diff --git a/.claude/loopspec/sketch-focus-arbiter.spec.md b/.claude/loopspec/sketch-focus-arbiter.spec.md new file mode 100644 index 0000000000..f0c1287307 --- /dev/null +++ b/.claude/loopspec/sketch-focus-arbiter.spec.md @@ -0,0 +1,86 @@ +# DELEGATION SPECIFICATION: HARNESS-DRIVEN VALIDATION LOOP +slug: sketch-focus-arbiter · repo: /home/tommaso/projects/apps/orca_cad · branch: cad-mainline + +## 1. TARGET GOAL + +**Functional Objective.** Keyboard input in the Design tab is routed by WHAT THE KEY IS, not by +which widget the window manager decided to focus. Adopted from FreeCAD's +`DrawSketchKeyboardManager::detectKeyboardEventHandlingMode` +(src/Mod/Sketcher/Gui/DrawSketchKeyboardManager.cpp), which never queries focus at all: + + - digit, `-`, `.`, `,` -> the open value field + - Backspace / Delete -> the open value field (when one is open) + - Enter / Return / Tab -> commit the field, control returns to the view + - a letter -> the sketch-tool shortcut map, as today + - Esc -> the existing CadLevel LIFO (DesignInteraction.hpp), unchanged + - anything else -> sticky: whoever had it keeps it + +Observable postcondition: for EVERY sketch tool that opens a value field, a value typed +immediately after the field appears — with NO click into the field — is the value committed. +Today the prefill is committed instead whenever the WM withholds focus. + +**Target Files / Scope (writable).** + src/slic3r/GUI/CAD/DesignPanel.cpp (the arbiter lives in the existing wxEVT_CHAR_HOOK) + src/slic3r/GUI/CAD/DesignCanvas.cpp/.hpp (forwarding entry points only) + src/slic3r/GUI/CAD/SketchInlineEditor.cpp/.hpp (accept a programmatically delivered character) + scripts/CAD/check-gui-click-edit.py (F2P oracle — authoring exception, see §4) +Everything else read-only. No dependency additions, no reformatting. + +**Open Bindings.** + - The in-canvas ImGui field on wip/in-canvas-value-field is NOT in scope. Default: the arbiter + is implemented against the CURRENT wxFrame field on cad-mainline, because content-based + routing makes the window's focus irrelevant either way. If it later moves in-canvas the + arbiter is unchanged. + - Tools whose field is opened by a toolbar button rather than a gesture (Constrain path) are + covered by the same arbiter but are not in the F2P tool list. Default: assert them in P2P only. + +## 2. HARNESS ENVIRONMENT & GROUND TRUTH + +The rig container `orcacad-gui` on nativedev IS the harness. Xvfb `:11` + openbox, the app under +test, `xdotool` for synthetic input, and an MCP socket at `/tmp/mcp.sock` that reports sketch +state as JSON. It is a closed loop: drive input, read geometry back, assert. No window manager +politics, no human. + + Harness interface (ordered; each slot one invocation, one exit code): + S1 sync docker cp orcacad-gui:/OrcaSlicer/ + S2 build docker exec orcacad-gui ninja -C /OrcaSlicer/build orca-slicer + S3 restart docker exec orcacad-gui /OrcaSlicer/scripts/CAD/start-headless-gui.sh + S4 F2P docker exec -e DISPLAY=:11 orcacad-gui python3 /tmp/check-gui-click-edit.py --attach + S5 P2P docker exec -e DISPLAY=:11 orcacad-gui python3 /tmp/check-gui-sketching.py + +**F2P.** `scripts/CAD/check-gui-click-edit.py`. For each of Line, Rectangle, Circle, Slot, +Polygon, Ellipse and Rounded rectangle: arm the tool, draw it, and type a value that differs +from the prefill WITHOUT clicking the field. Assert the committed value equals the typed value. +The ladder must FAIL against unmodified cad-mainline — that is what proves it asserts something. + +**P2P.** `scripts/CAD/check-gui-sketching.py`, the existing gesture ladder, minus anything red at +baseline. NOTE: it calls `focus_field()` — one click into the field before typing — which is the +workaround this whole task removes. It stays green as a regression guard; it is NOT evidence. + +**Test Integrity Constraint.** `focus_field()` in check-gui-sketching.py must NOT be deleted to +make things pass, and check-gui-click-edit.py must NOT be weakened. Either invalidates the run. + +## 3. VERIFICATION COMMANDS +1. Static: `docker exec orcacad-gui ninja -C /OrcaSlicer/build orca-slicer` (warnings delta only; + this repo configures no linter — the compiler is the static gate. Absolute-zero is NOT the gate.) +2. Harness: `docker exec -e DISPLAY=:11 orcacad-gui python3 /tmp/check-gui-click-edit.py --attach` +3. Regression: `docker exec -e DISPLAY=:11 orcacad-gui python3 /tmp/check-gui-sketching.py` + +## 4. CONVERGENCE LOOP — ceiling 8 iterations +EDIT (scoped) -> EXECUTE S1..S5 -> PARSE the ladder's per-tool assertions and the [UX]/[KEYTRACE] +lines -> PATCH from the parsed cause. On ceiling without convergence: stop, report the last diff +and the unresolved failure set. Do not report success. + +F2P authoring exception: check-gui-click-edit.py is writable, and must be shown RED against +unmodified source before any source edit counts. + +## 5. TERMINATION CRITERIA +- [ ] S2 exits 0, and introduces no compiler warning absent from the baseline. +- [ ] S4 ALL_PASSED — every tool commits the typed value, no click into the field. +- [ ] S5 shows zero regressions against its recorded baseline pass count. +- [ ] F2P proven red without the fix (source stashed, ladder re-run, must FAIL). + +## 6. GUARDRAILS +Zero-assumption: no completion claim without captured stdout and exit codes. Oracle supremacy: +the ladder's verdict overrides my judgement. Blast radius: §1 files only. Baseline obligation: +run §3 once before the first edit and record it. diff --git a/.claude/skills/orca-profiles/SKILL.md b/.claude/skills/orca-profiles/SKILL.md new file mode 100644 index 0000000000..692e529074 --- /dev/null +++ b/.claude/skills/orca-profiles/SKILL.md @@ -0,0 +1,117 @@ +--- +name: orca-profiles +description: Use when creating, modifying, reviewing or debugging OrcaSlicer FFF system profiles under resources/profiles, including printer/vendor/nozzle/material additions, bundle indexes and versions, preset renames, setting_id and filament_id. Also use for missing presets or vendors, ignored profile settings, ambiguous AMS filament matches, and failures from orca_profile_tool.py, check_profile.sh/.bat, OrcaSlicer_profile_validator or the Check profiles CI job. +--- + +# OrcaSlicer system profiles + +A bundle is `resources/profiles/.json` plus `/`. The vendor id is the +filename stem, not the index's display `name`. The index is the loader's only entry point: +unindexed presets never load. `OrcaFilamentLibrary` is the shared filament bundle; +`blacklist.json` is data, not a bundle. + +## Choose the reference for the task + +Read the relevant reference before editing; load others only when the task crosses those areas. +Paths below are relative to this skill. Commands run from the repository root. + +| Task | Read | +| --- | --- | +| Add or tune a filament, brand or material; fix compatibility / alias shadowing | [filament-profiles.md](references/filament-profiles.md) | +| Add a printer or nozzle; change models, variants, assets or extruder vectors | [machine-profiles.md](references/machine-profiles.md) | +| Add a quality tier or tune a process | [process-profiles.md](references/process-profiles.md) | +| Create a vendor bundle; diagnose loading or inheritance; migrate preset names | [vendor-bundle.md](references/vendor-bundle.md) | +| Change ids; diagnose AMS identity | [ids.md](references/ids.md), then `docs/HLSD/filament_id.md` for identity changes | +| Review a profile diff | [review-checklist.md](references/review-checklist.md) | +| Run checks, interpret failures, test another tree or verify in the app | [validation.md](references/validation.md) | + +## Golden rules + +1. **Bump every changed bundle's `version`**, including `OrcaFilamentLibrary.json` when affected. + Increment the last component; carry `.99` into the third component (`02.04.00.99` → + `02.04.01.00`). The updater requires a strictly newer version. CI does not check this. +2. **Register every preset, bases included, parents before children.** `update-index` generates + the four `*_list` arrays; `check` requires its output. Index names must equal file `name` fields. +3. **Generate ids; never invent or copy them.** Keep existing ids during ordinary tuning. New + presets normally omit them until `generate-id`; bases must have no `setting_id`. + BBL's authoritative `setting_id` and a wrongly inherited `filament_id` need the explicit + handling in [ids.md](references/ids.md). +4. **Load failures can discard a whole vendor bundle.** Broken `inherits`, missing indexed files, + duplicate names, invalid model/variant references and unresolved filament ids affect more than + the edited preset. Inheritance stays within a bundle, except filaments may inherit the library. +5. **Preserve shipped selectable names.** Renaming, deleting or changing `instantiation` from + `"true"` to `"false"` needs `renamed_from` on a selectable successor. It is a `;`-separated string; + update in-tree references too. See [migration rules](references/vendor-bundle.md#renamed_from). +6. **Compatibility uses exact printer variant names.** Every instantiated non-library filament + needs a non-empty `compatible_printers` in its own file. Library fallbacks may omit it; + library printer-specific tunes use a non-empty list. Keep same-product tunes disjoint. +7. **Preset values are strings or arrays of strings.** Use `"instantiation": "false"`, not `false`. + Model `nozzle_diameter` is a `;`-separated string; machine `nozzle_diameter` is an array. + Wrong types can abort loading; see [failure scopes](references/vendor-bundle.md#failure-modes-ranked-by-blast-radius). +8. **Verify setting keys against the code.** Unknown keys are silently discarded. Check + `PrintConfig.cpp` definitions and `PrintConfigDef::handle_legacy`; neighbours can contain dead + keys. `normalize` removes known obsolete keys, but does not detect arbitrary misspellings. +9. **Run the full profile checks before reporting completion.** A vendor-scoped pass is only a + development loop. Review also covers version bumps, assets, non-default processes and hardware + tuning that CI cannot establish. + +## Creating or modifying a profile + +1. **Inspect the diff and neighbouring presets.** Read their `name`, parent chain and children; + edits to a base or a leaf with descendants propagate. Match the bundle's structure and write + only overrides. New files use tab indentation, LF and a trailing newline; preserve unrelated + formatting in existing files. Match filename case exactly and use cross-platform names. +2. **Author explicit metadata.** Set `type` yourself, especially for `machine` vs `machine_model`. + Use `"from": "system"` and string `instantiation` on config presets. Omit ids on new presets + unless [ids.md](references/ids.md) requires special handling; retain them on existing ones. + Complete compatibility, defaults, assets and any rename migration using the task reference. +3. **Bump the version**, then run the authoring commands in order for each affected bundle: + + ```bash + python3 scripts/orca_profile_tool.py normalize --vendor "" + python3 scripts/orca_profile_tool.py update-index --vendor "" + python3 scripts/orca_profile_tool.py generate-id --vendor "" + python3 scripts/orca_profile_tool.py check + ``` + + Writing commands support `--dry-run`. Inspect their diffs: `normalize` changes content and can + reformat entire files. Stop and resolve command errors before proceeding. + + **Do not use `trim` in this workflow:** it can delete newly authored, unindexed profiles. + Do not use `normalize --force` for routine edits. +4. **Validate:** + + ```bash + ./scripts/check_profile.sh --vendor "" # development loop + ./scripts/check_profile.sh # full tree before the PR + ``` + + On Windows use `py -3` instead of `python3`, and `scripts\check_profile.bat -Vendor ""` + / `scripts\check_profile.bat`. Logs: `.test/check_profiles/logs/.log`. + Id checks remain tree-wide under `--vendor`; filament-only bundles skip the default slice check. + See [validation.md](references/validation.md) for flags, coverage and error remedies. +5. **Verify the changed behavior.** Slice newly added non-default processes explicitly, and + [test in the app](references/validation.md#testing-in-the-app) for selection or UI behavior. + Report checks actually run, failures/skips and any hardware tuning still unverified. + +## Symptom → first reference + +| Symptom | Start here | +| --- | --- | +| A vendor disappears | Loader log / `validate_system`; [bundle failure scopes](references/vendor-bundle.md#failure-modes-ranked-by-blast-radius) | +| A setting has no effect | Key spelling/type, `handle_legacy`, or a config key placed on a `machine_model` | +| A preset exists but is not selectable | Index registration, `instantiation`, installation and compatibility | +| A filament is missing, duplicated, or matches the wrong spool | [Compatibility and alias shadowing](references/filament-profiles.md#compatible_printers); [ids](references/ids.md) | +| A bed temperature is ignored | [Plate-specific temperature keys](references/filament-profiles.md#bed-temperature-is-twelve-keys-not-one) | +| A change is absent from the running app | Version bump and [installed profile location](references/validation.md#testing-in-the-app) | +| A check fails | [Error → remedy](references/validation.md#error--remedy) | + +## Source of truth + +When guidance and behavior disagree, inspect the current checkout: +`scripts/orca_profile_tool.py` for tooling and flags; `src/libslic3r/Preset*.cpp` for loading and +compatibility; `src/libslic3r/PrintConfig.cpp` for setting types and legacy handling; +`src/dev-utils/OrcaSlicer_profile_validator.cpp` and `.github/workflows/check_profiles.yml` for +validation coverage. `docs/HLSD/filament_id.md` defines filament identity. The +[profile development guide](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/how_to_create_profiles.md) +is a tutorial; confirm loader and CLI details against these sources. diff --git a/.claude/skills/orca-profiles/references/filament-profiles.md b/.claude/skills/orca-profiles/references/filament-profiles.md new file mode 100644 index 0000000000..b3f6acd4c4 --- /dev/null +++ b/.claude/skills/orca-profiles/references/filament-profiles.md @@ -0,0 +1,207 @@ +# Filament profiles and OrcaFilamentLibrary + +`OrcaFilamentLibrary` is the filament-only bundle the loader reads **first**; its config map +becomes the base bundle, so any vendor may inherit a library preset by name. It is the only cross-bundle +parent — vendor-to-vendor inheritance always fails. + +## Where a filament goes + +| Contribution | Location | +| --- | --- | +| Generic material for all printers | `OrcaFilamentLibrary/filament/Generic @System.json` | +| A brand's product, all printers | `OrcaFilamentLibrary/filament//` | +| A brand's tune for one printer | `OrcaFilamentLibrary/filament///` — recommended; `/filament//` also works | +| A printer vendor's tune of a generic or its own product | `/filament/` | + +Both locations for the last-but-one row are supported: `OrcaFilamentLibrary/filament///.json` +(the shape the wiki shows) and `/filament//`. The library path is the one a +filament vendor should contribute to — `OrcaFilamentLibrary/filament//` is the brand's own +folder, while a printer vendor's folder belongs to that printer vendor. Brand tunes do ship under +printer vendors' folders today (Polymaker and SUNLU among others). + +Library layout: `filament/base/fdm_filament_*.json` type roots, root-level `Generic @System.json` +generics, and one subfolder per brand, which may nest printer-specific tunes one level deeper. Adding +a brand means adding a folder here; the folder name is a directory label only — `filament_vendor` inside the JSON is the real vendor string. + +## The three-part shape + +```jsonc +// Fiberon PA6-CF @base.json — the product root, holds identity + material values +{ "type": "filament", "name": "Fiberon PA6-CF @base", "from": "system", + "instantiation": "false", "inherits": "fdm_filament_pa", + "filament_id": "OFkOviHk", // generated here; variants inherit it + "filament_vendor": ["Polymaker"], "filament_type": ["PA6-CF"], /* … */ } + +// Fiberon PA6-CF @System.json — the selectable shim, 7 keys +{ "type": "filament", "name": "Fiberon PA6-CF @System", "from": "system", + "instantiation": "true", "inherits": "Fiberon PA6-CF @base", + "setting_id": "…", "compatible_printers": [] } + +// /filament/Polymaker/Fiberon PA6-CF @BBL X1C.json — a printer tune +{ … "inherits": "Fiberon PA6-CF @base", "filament_max_volumetric_speed": ["14"], + "compatible_printers": ["Bambu Lab X1 Carbon 0.4 nozzle", …] } +``` + +- `@base` is the convention for a root. A base carries **no** `setting_id`, no `compatible_printers`, no + `filament_settings_id`. Only the `setting_id` half is enforced, and nothing violates it; the other two + are unchecked and plenty of bases still carry them. Do not copy that from a neighbouring file. +- Every `@System` must be `"instantiation": "true"`. DREMC ships `@System` presets set to `"false"`, + which therefore ship but can never be selected; no check catches it. +- A duplicated brand `@base` across bundles is normal and intentional (`Fiberon PA6-CF @base` exists in + both the library and BBL with the same id, differing only in MVS) — bases never enter the preset + collection, so there is no duplicate-name error. +- You may inherit from an instantiated preset as well as from a base; it is common. + +## The two most common contributions + +**A printer vendor tuning a generic.** Keep the `Generic X` base name so the alias shadows the library +preset on your printers, inherit `Generic X @System`, declare **no** `filament_id` (inheriting the +library's is correct — the product really is the library's generic), and give it a non-empty +`compatible_printers` in its own body: + +```jsonc +// /filament/Generic PETG @Acme One 0.4 nozzle.json +{ "type": "filament", "name": "Generic PETG @Acme One 0.4 nozzle", "from": "system", + "instantiation": "true", "inherits": "Generic PETG @System", + "filament_flow_ratio": ["0.95"], "filament_max_volumetric_speed": ["10"], + "compatible_printers": ["Acme One 0.4 nozzle"] } +``` + +**A printer vendor's own branded product.** Give it a `@base` root so `generate-id` can mint the id (see +[ids.md](ids.md) — inheriting `Generic X @System` directly makes the id unfixable by the tool), then one +instantiated leaf per printer in the same bundle. No `@System` shim: that is only for a product entering +OrcaFilamentLibrary. + +```jsonc +// /filament/Acme Aura PETG @base.json — instantiation false, no setting_id +{ "type": "filament", "name": "Acme Aura PETG @base", "from": "system", + "instantiation": "false", "inherits": "fdm_filament_pet", + "filament_vendor": ["Acme"], "filament_type": ["PETG"] } // filament_id minted here + +// /filament/Acme Aura PETG @Acme One 0.4 nozzle.json +{ "type": "filament", "name": "Acme Aura PETG @Acme One 0.4 nozzle", "from": "system", + "instantiation": "true", "inherits": "Acme Aura PETG @base", + "filament_max_volumetric_speed": ["11"], + "compatible_printers": ["Acme One 0.4 nozzle"] } +``` + +Omit `filament_settings_id` from new presets — it is runtime bookkeeping the app rewrites to the preset +name. + +## `compatible_printers` + +- **Library fallbacks:** empty `[]` or absent, so they are offered on all printers except where + [alias shadowing](#alias-shadowing) supplies a printer-specific tune. +- **Library printer-specific tunes:** non-empty, listing exact printer **variant** names. These can + supersede a same-alias fallback just like a tune in a printer vendor's bundle. +- **Instantiated filaments in every other vendor:** non-empty, listing exact printer **variant** names. + Enforced twice but not identically: the C++ `has_errors` reads the *flattened* config, so an inherited list satisfies it, + while the Python check reads the file's **own** key. Write the list in the file itself. This is the + most common filament CI failure. +- Emptying it to "make it apply everywhere" fails that check *and* creates a duplicate-`filament_id` + collision against the library generic on every printer. +- Copying a base's full printer list onto a nozzle-specific variant produces duplicate combobox entries — + a real shipped bug twice over. + +## Alias shadowing + +A printer-specific filament in either the library or a vendor bundle supersedes the library fallback +on the printers it lists. The matching key is the **alias**: the preset name up to the **first** `@`, +right-trimmed (no `@` → the whole name). So +`QIDI ABS-GF@Q2-Series` aliases to `QIDI ABS-GF`. + +A library preset with an empty `compatible_printers` collects, into `m_excluded_from`, every printer named +by any same-alias preset that *has* a non-empty list, and is then hidden on those printers. + +Two consequences: + +- **Only an unrestricted library fallback can be shadowed.** Two printer-specific presets sharing + an alias do not exclude each other — overlapping lists for the same product trip the + duplicate-`filament_id` check instead. +- This is why adding `Generic PLA @` to a vendor silently removes the library `Generic PLA` + from that printer. Intended — and the reason a vendor tuning a generic must **keep the `Generic X` + base name**. + +The literal spelling `Generic @System` is load-bearing beyond shadowing: `find_preset2` rewrites an +unresolved name containing "Generic" into that form and retries against the library, which is how 3MF +and project recovery works. + +## `filament_id`, `filament_vendor`, `filament_type` + +`filament_id` is minted from the triple `(filament_vendor, filament_type, name-before-first-@)`. +`filament_vendor` and `filament_type` are therefore **identity, not decoration** — editing either +re-mints the id. Read `docs/HLSD/filament_id.md` before changing any of them, and see +[ids.md](ids.md) for the tooling. + +A filament with no resolvable `filament_id` anywhere in its `inherits` chain is a **hard load error** that +discards the vendor bundle. The id inherits across bundles, so a vendor's `Generic ABS @X` inheriting +`Generic ABS @System` gets the library's id for free; a vendor's own product must resolve its own. + +- `filament_type` **must be a JSON array** — the one vector key the Python check enforces. A scalar + `"PP"` once hung the filament/printer selection UI. +- It is an **open** enum: an unlisted value is accepted silently and falls back to 190–300 °C defaults + and adhesion 1.0. Off-list values do ship. Prefer a value from `MaterialType::all()` in + `src/libslic3r/MaterialType.cpp`, or add a row there. +- Generics use `filament_vendor: ["Generic"]`, which `fdm_filament_common` already defaults to. + +## `"nil"` + +Legal in any key whose `ConfigOptionDef` is `nullable`. In a filament preset that is most of the +`filament_*` family, plus `long_retractions_when_ec` and `retraction_distances_when_ec`. About half are +the extruder overrides (`filament_retraction_length`, `filament_z_hop`, `filament_wipe`, +`filament_retract_*`, `filament_retraction_speed`, `filament_deretraction_speed`, +`filament_retraction_minimum_travel`, `filament_wipe_distance`, `filament_long_retractions_when_cut`, +`filament_retraction_distances_when_cut`, …), where `nil` means *keep the printer/extruder's own value*. +The rest are ordinary nullable options (`filament_flow_ratio`, `filament_flush_temp`, +`filament_adaptive_volumetric_speed`, …) where it means *unset*. + +Anywhere else it throws `Deserializing nil into a non-nullable object`. To not set a non-nullable key, +omit it — do not write `nil`. + +## What to review per nozzle + +Across `@X` / `@X 0.N nozzle` sibling pairs the keys that differ, most often first, are +`filament_max_volumetric_speed`, `filament_retraction_length`, `slow_down_min_speed`, +`filament_flow_ratio`, `slow_down_layer_time`, `nozzle_temperature` and `pressure_advance`. +`filament_cost`, `filament_density`, `filament_type` and `filament_vendor` belong on the `@base` and +should not appear in a printer tune. + +Use measured values for the material, hotend, extruder and nozzle combination. Neither maximum +volumetric speed nor pressure advance has a universal nozzle-only lookup table. When cloning a +0.4 preset for a 0.2 nozzle, explicitly revisit flow limits; do not infer a pressure-advance value +or a required direction of change from diameter alone. + +## Style + +Overrides, not full copies: a typical instantiated filament preset carries around a dozen non-meta keys, +and a library leaf two or three. Presets that restate fifty-plus keys from their parent do still ship — +Phrozen's single filament preset is that style — but they are the pattern to move away from, not to +copy. Commit `6943b6ddc3` is the stated model (flip true bases to `instantiation: "false"`, strip +`compatible_printers`/`setting_id`/`filament_settings_id`, add `renamed_from` on the survivor). + +Prefer the library's `fdm_filament_*` bases over a vendor-local copy. Phrozen's local +`fdm_filament_common` has drifted from the library's. + +Canonical key order, written by `orca_profile_tool.py normalize` when it rewrites a file: `type`, `name`, +`renamed_from`, `inherits`, `from`, `setting_id`, `filament_id`, `instantiation`, then everything else in +the order you wrote it. Not enforced — a file that leads with `compatible_printers` passes `check`. + +**Every vector-typed (`co*s`) key must be a JSON array.** Only `filament_type` is an outright error, but +`normalize` silently arrayifies five more (`filament_cost`, `filament_density`, +`temperature_vitrification`, `filament_max_volumetric_speed`, `filament_vendor`) and `check` fails when +it would. Every other vector key is on you — including `filament_start_gcode`, `filament_end_gcode`, +`filament_extruder_variant`, `compatible_printers` and the plate temperatures. + +## Bed temperature is twelve keys, not one + +There is no single "bed temperature". Which plate key applies depends on `curr_bed_type`, whose six +selectable values (`btPC`, `btEP`, `btPEI`, `btPTE`, `btPCT`, `btSuperTack`; `btDefault` maps to no key) +`get_bed_temp_key()` turns into `cool_plate_temp`, `eng_plate_temp`, `hot_plate_temp`, +`textured_plate_temp`, `textured_cool_plate_temp` and `supertack_plate_temp` — each with an +`*_initial_layer` twin. + +`textured_cool_plate_temp` is the one most often forgotten. A printer with `support_multi_bed_types` off +hides the selector, and the printer preset's +`default_bed_type` decides which plate is selected for it, but `curr_bed_type` can still hold a stale +value carried over from another printer — so set every plate the printer plausibly has, as the sibling +presets in the bundle do. diff --git a/.claude/skills/orca-profiles/references/ids.md b/.claude/skills/orca-profiles/references/ids.md new file mode 100644 index 0000000000..b6a09e9a2f --- /dev/null +++ b/.claude/skills/orca-profiles/references/ids.md @@ -0,0 +1,149 @@ +# `setting_id` and `filament_id` + +Orca-generated ids are deterministic hashes of identity. **Never invent an id or copy a sibling's +`setting_id`.** Use `scripts/orca_profile_tool.py`; the two special cases are +[a wrongly inherited filament id](#what-generate-id-does-and-does-not-fix) and +[BBL's authoritative setting ids](#bbls-exception-precisely). + +`docs/HLSD/filament_id.md` is the authoritative design document for `filament_id` — the id landscape, the +checks CI runs, and the Bambu catalog map. This page is the tooling half. + +| | `setting_id` | `filament_id` | +| --- | --- | --- | +| Identifies | one selectable preset | one filament **product** | +| Key hashed | `//` | `filament_product///` | +| Shape | 16 base62 chars | `OF` + 6 base62 chars | +| Required on | every `instantiation: "true"` preset | every **instantiated** filament, own or inherited | +| Forbidden on | bases (`instantiation != "true"`) | — (a base is exactly where it belongs) | +| Scope | globally unique across the tree | shared by every variant of the product, in every bundle | + +`` is `machine` / `process` / `filament` — the vendor is the **folder** name (`BBL`), not the +display name (`Bambulab`). Renaming a preset changes its `setting_id`; renaming a filament, or editing +its `filament_vendor` or `filament_type`, also changes its `filament_id`. + +## The tool + +Use `scripts/orca_profile_tool.py` with a subcommand: + +| Command | Does | +| --- | --- | +| `check` | everything CI's `profile_tool` step runs — see [validation.md](validation.md) | +| `generate-id` | writes `setting_id` and `filament_id` | +| `normalize` | rewrites profile files into their canonical shape | +| `trim` | deletes profile files no `.json` list references | +| `update-index` | rebuilds the `*_list` sections from the files on disk | + +The order after adding, renaming or deleting files — each step feeds the next, so it is not +interchangeable — is `normalize` → `update-index` → `generate-id` → `check`. +The [authoring workflow](../SKILL.md#creating-or-modifying-a-profile) has the commands. + +> **`trim` deletes.** It removes every profile file the index does not list — including the one you just +> added and have not registered yet. Register first, or skip `trim` entirely; it is a cleanup sweep, not +> part of landing a profile. Preview with `--dry-run`. + +**Register, then mint.** The `filament_id` pass reads `.json`'s `filament_list`, not the +filesystem (the `setting_id` pass walks the filesystem, so a bundle whose index has not landed yet is +still assignable). A new filament file is therefore invisible to `generate-id`'s filament_id pass until +it is registered — its `setting_id` is written regardless. + +- `--dry-run` works on every writing command (`generate-id`, `normalize`, `trim`, `update-index`) + and writes nothing. +- `--filament-id` / `--setting-id` narrow `generate-id`; they exclude each other, and passing neither + writes both. +- `--vendor` is repeatable and narrows **only what is written** — the id is a function of the triple + alone, so a narrowed run writes exactly what a full run would. An unknown vendor exits 1 before any + write. `--vendor` on `check` narrows the per-vendor checks only; the `setting_id` and `filament_id` + passes stay tree-wide. +- `--profiles DIR` points any command at another tree — see + [Checking a copy of the tree](validation.md#checking-a-copy-of-the-tree). +- `--profile-type` narrows `normalize`, `trim` and `update-index` to `machine_model`, `process`, + `filament` or `machine`. +- Exit codes: 0 clean, 1 errors found (`generate-id` still writes what it could), 2 argparse misuse. +- Output is ANSI-coloured; searching for the literal `[ERROR]` still works. + +`generate-id` is **idempotent and byte-preserving** — BOM and CRLF kept, one key line touched per pass. +A legitimate `generate-id` diff is one or two changed lines per file: a new instantiated filament gets +both a `filament_id` and a `setting_id`, and a BBL file with a misspelled `settings_id` has that line +dropped and its value restored under the right key. `normalize` is the opposite by design — it rewrites +whole files into canonical shape — which is why `check` demands it already be a no-op. Some bundles have +CRLF committed (OrcaFilamentLibrary, Anycubic and RH3D among them), so a `normalize` pass there rewrites +every line — read the diff before committing it. + +On a clean tree `check` and `generate-id --dry-run` both exit 0 with zero findings. That is the +baseline to restore before opening a PR. + +## What `generate-id` does and does not fix + +Writes: + +- a `setting_id` into any instantiated preset that lacks one, or whose value does not match the formula; +- strips a `setting_id` from a base; +- deletes the misspelled `settings_id` key; +- a `filament_id` into the id-less **root(s)** of an instantiated filament that resolves none; +- rewrites a **declared** `filament_id` that is not the mint of its own triple. + +Refuses to write (reports only): a base62 collision between two products, an empty `filament_vendor` or +`filament_type`, a broken `inherits` chain, roots of one filament resolving divergent `(vendor, type)` +pairs. + +**Does not fix: a preset that *inherits* a wrong `filament_id`.** This is check 2b, and it is the trap +most likely to bite. It happens when a branded filament inherits a generic for its settings: + +```jsonc +{ "name": "Phrozen Aura PETG @Phrozen Arco 0.4 nozzle", + "inherits": "Generic PETG @System" } // resolves the OFL generic's id — wrong product +``` + +The preset resolves *an* id, so `generate-id` neither inserts nor rewrites, and `check` fails with +`inherits filament_id "X" but its own triple "V/T/N" mints "Y"`. + +Two fixes, in order of preference: + +1. **Give the product a `@base` root** inheriting a material base (`fdm_filament_pet`, + `fdm_filament_pla`, …). No `fdm_filament_*` base carries a `filament_id`, so the filament now resolves + none and `generate-id` mints it for you. This is also the shape the rest of the tree uses. +2. **Declare the tool-computed key on the preset itself.** Use the expected value reported by `check` + or compute it with the function below; this is not a manually chosen id. Make sure the preset + resolves the right `filament_vendor` and `filament_type` first — with + neither set, the triple resolves through the generic parent and the branded product is minted + under vendor `Generic`. If you need the id before the file exists: + + ```bash + python3 -c "import sys; sys.path.insert(0,'scripts'); from orca_profile_tool import generate_filament_id as g; print(g('Polymaker','PLA','PolyLite PLA'))" + # -> OF5CgdDq + ``` + + The quoting works unchanged in cmd and PowerShell; only swap `python3` for `py -3`. + + The `setting_id` equivalent is `generate_preset_setting_id('', '', '')`. + +## BBL's exception, precisely + +`RESERVED_VENDORS = {"BBL"}` covers **`setting_id` assignment only**, keyed on the *folder* name: + +- The tool never mints or replaces a BBL `setting_id`. A new instantiated BBL preset with no + `setting_id` therefore **cannot be fixed by the tool**, yet the presence rule still applies to it — + carry over Bambu's authoritative id by hand. +- BBL is not exempt from anything else: bases still get their `setting_id` stripped, ids must still be + globally unique, and BBL `filament_id`s are minted like everyone else's — every one of them is an + `OF*`. + +## Ids other systems compose + +No id from another system is the mint of a triple, so `check` rejects it like any other bad id — same +error, same remedy, whoever wrote it. Three such spaces exist near the tree; recognise them so you do +not copy one into a profile: + +- **Bambu's `GF*` catalog** — external and opaque, correlated to Orca's ids by the generated + `resources/printers/bambu_filament_ids.json`. `GF` is a *prefix*, not a spelling the tree avoids: most + BBL `setting_id`s start with `G`, and `blacklist.json` and + `BBL/filament/filaments_color_codes.json` both reference Bambu catalog ids by design. The rule is + about `filament_id` and nothing else. +- **Qidi's `QD_*`** — composed at runtime by the box (`QD___`), not a preset id. +- **`P` + 7 hex, and `"null"`** — what `CreatePresetsDialog.cpp` gives a *user*-created filament. + +## Tests + +`python3 -m unittest discover -s scripts/tests -t scripts` (`py -3 -m …` on Windows). Note the +`-t scripts` argument; without it the imports fail. CI runs them as the first, non-`continue-on-error` +step of the profile job — see [validation.md](validation.md#ci). diff --git a/.claude/skills/orca-profiles/references/machine-profiles.md b/.claude/skills/orca-profiles/references/machine-profiles.md new file mode 100644 index 0000000000..01071af6b1 --- /dev/null +++ b/.claude/skills/orca-profiles/references/machine-profiles.md @@ -0,0 +1,194 @@ +# Printer models and variants + +Both live in `resources/profiles//machine/*.json`; models go in `machine_model_list`, variants +and shared bases in `machine_list`. Every one of them is registered. Some vendors (Elegoo, Eryone, +InfiMech, FlyingBear) nest a further subfolder under `machine/`, so recurse rather than globbing +`machine/*.json`. + +## A `machine_model` is not a config preset + +It is parsed by a hand-written key switch, and only these keys are stored (`version` and `url` are +matched and discarded): + +`name`, `model_id`, `nozzle_diameter`, `machine_tech`, `family`, `bed_model`, `bed_texture`, +`hotend_model`, `default_materials`, `not_support_bed_type`, `image_bed_type`, +`bottom_texture_end_name`, `bottom_texture_rect`, `bottom_texture_rect_longer`, `middle_texture_rect`, +`use_double_extruder_default_texture`. + +**Everything else is silently dropped.** Only `name` and `nozzle_diameter` are required. Dead keys ship +on real models today — `url`, `default_bed_type`, even a `desciption` typo — so a neighbour carrying a +key is no evidence it does anything. Printer config options belong on the `machine` preset, never here. + +```json +{ + "type": "machine_model", + "name": "Phrozen Arco", + "machine_tech": "FFF", + "family": "Phrozen", + "model_id": "Phrozen Arco", + "nozzle_diameter": "0.4", + "bed_model": "Phrozen Arco_buildplate_model.stl", + "bed_texture": "Phrozen Arco_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "Generic PLA @Phrozen Arco 0.4 nozzle" +} +``` + +| Field | Notes | +| --- | --- | +| identity | **the `name` of the `machine_model_list` entry**, which is what a variant's `printer_model` must equal. `check_name_consistency` forces it to equal the file's `name`, so they coincide. | +| `model_id` | a *separate* cloud/device printer type. Optional, and not required to be unique. Not the model's identity. Changing it changes device matching. | +| `machine_tech` | only `starts_with("SL")` means SLA; everything else is FFF. Write `FFF`; a few models write `FGF`, which is a label with no effect. | +| `nozzle_diameter` | `;`-separated string, one token per available size. Order is free (Qidi writes `0.4;0.2;0.6;0.8` to put the default first). This list is the authoritative set of legal `printer_variant` values. | +| `default_materials` | `;`-separated filament **preset names**. Used to preselect in the wizard *and* by `PresetBundle::load_installed_filaments` to auto-install a printer's filaments on first run, so a dangling entry costs a real user a filament. Not `,`; case-sensitive (`@System`). `check` fails on a dangling name here or in `default_filament_profile`. | +| `family` | a wizard grouping label only; give every model one. | + +### Assets + +`bed_model`, `bed_texture` and `hotend_model` are paths relative to the **vendor folder** (by id). +Majority convention: `_buildplate_model.stl` and `_buildplate_texture.svg`. An empty string +is the legal "none", and is the norm for `hotend_model`. + +**Nothing checks that the file exists.** A missing `hotend_model` falls back to +`resources/profiles/hotend.stl`; a missing `bed_model`/`bed_texture` just renders nothing. Broken +references already ship. Verify by hand. + +Every model also has a `_cover.png` in the vendor folder — treat it as required, not optional. +240×240 is the cap `scripts/optimize_cover_images.py` enforces and the size most covers already use. +A missing cover degrades to a placeholder in both the wizard and the sidebar. + +## The `machine` variant + +```json +{ + "type": "machine", + "name": "Phrozen Arco 0.4 nozzle", + "inherits": "fdm_machine_common", + "from": "system", + "setting_id": "lvaYKTUZr5C9jSwk", + "instantiation": "true", + "printer_model": "Phrozen Arco", + "printer_variant": "0.4", + "nozzle_diameter": ["0.4"], + "default_print_profile": "0.20mm Standard @Phrozen Arco 0.4 nozzle", + "default_filament_profile": ["Generic PLA @Phrozen Arco 0.4 nozzle"], + "printable_area": ["0x0", "300x0", "300x300", "0x300"], + "printable_height": "300" +} +``` + +Minimum viable key set: `type`, `name`, `from`, `instantiation`, `setting_id`, `inherits`, +`printer_model`, `printer_variant`, `nozzle_diameter`, `printable_area`, `printable_height`, +`default_print_profile`. The four keys without which the preset will not load at all are `name`, +`instantiation`, `printer_model` and `printer_variant`; `default_filament_profile` is an array +(`["Generic PLA @System"]`) and the model's `default_materials` a `;`-separated string. Unlike a +`machine_model`, a `machine` **is** config-loaded, so a key belonging to another preset type is a +reported error (a misspelled key is still silent). + +### `printer_variant` — three hard rules + +1. Non-empty, and an exact member of the model's `;`-separated `nozzle_diameter` list. +2. `printer_model` non-empty and naming a model of this vendor. +3. In validation mode, for instantiated presets only: split `printer_variant` on `+`, each token must + start with a number (a trailing non-numeric suffix such as `HF` is ignored), and the resulting **set** + must equal `set(nozzle_diameter)`. + +Rules 1 and 2 are loader-enforced — failing either drops the preset *and* the whole bundle. Rule 3 only +raises a validation error: the preset still loads, but the validator exits non-zero. + +`nozzle_diameter` lists one entry **per physical nozzle**; `printer_variant` lists the **distinct** +diameters joined with `+`. Snapmaker U1 is the worked case: `["0.4","0.4","0.6","0.6"]` against +`"0.4+0.6"` — it passes because the comparison is on sets. + +The conventional values are `0.2`, `0.25`, `0.4`, `0.5`, `0.6`, `0.8` and `1.0`. Suffixed forms +(`0.4HF`, `0.6HF`, `0.8HF`, `0.4HS`) are Flashforge-only and the `+` form is rare. A variant is **not** +required to be unique within a model — Volumic ships `EXO42 IDRE`, `… COPY MODE` and `… MIRROR MODE` all +at `0.4` under the one model `EXO42 IDRE`. + +The converse is **unchecked**: a nozzle size in the model's list with no matching variant is offered in +the wizard and resolves to nothing. `Wanhao France`'s `D12 500 PRO M2 DIRECT` ships that bug today. + +### Other fields worth knowing + +- `default_print_profile` is a **scalar**, matched by exact preset name. Not a `;` list. The named + process must be compatible with this printer through its resolved list or condition. + `validate_slice` attempts to select it and rejects generic Default fallbacks, but compatibility + updates can choose another compatible preset. Check the exact default reference yourself. +- `default_filament_profile` is an **array**, one name per element. +- `printable_area` is an array of `"XxY"` strings — four points for a rectangle, one per segment for a + delta or circular bed. +- `gcode_flavor` is usually set once in the base; `klipper`, `marlin`, `marlin2` and `reprapfirmware` + cover nearly every shipped printer. +- `printer_settings_id` is junk — most files carrying it disagree with their own name. Do not copy it + when cloning a bundle. +- `min_layer_height` / `max_layer_height` are **machine** keys (per extruder), never process keys. + +## Bases + +Nearly every machine-bearing vendor registers a base literally named `fdm_machine_common`, and Klipper +vendors add `fdm_klipper_common` on top of it. Two levels is the usual depth. + +**There is no leading-underscore convention for bases.** + +## Adding a printer to an existing bundle + +1. Choose the names first — model, variant(s), process(es); everything else references them. +2. Add the model (`machine_model_list`) and one `machine` variant per nozzle; the minimum key sets are + above. Bed assets and `_cover.png` go directly in `/`. +3. Add at least one process per variant naming it in `compatible_printers` + ([process-profiles.md](process-profiles.md#adding-a-quality-tier-or-a-nozzles-processes)). +4. Register everything (or run `update-index`), bump the version, run the id tool, validate. + +## Adding a nozzle variant + +1. Extend the model's `nozzle_diameter` (`"0.4"` → `"0.4;0.6"`). +2. Add the variant preset. Either inherit the shared base (the usual choice) or the 0.4 sibling (Elegoo, + BBL, Prusa and Qidi do this — smaller diff, but the sibling's edits now reach this file too). +3. Override what actually changes with nozzle: `nozzle_diameter`, `printer_variant`, + `default_print_profile`, `default_filament_profile`, `min_layer_height`/`max_layer_height`, and + retraction if the vendor tunes it. +4. Add at least one process for the new nozzle — see [process-profiles.md](process-profiles.md). +5. Register both, bump the version, run the id tool, validate. + +## Multi-extruder, IDEX and tool-changers + +Per-extruder vectors are **silently resized** to the nozzle count, with no error. Padding repeats the +**first** value, not the last — `["0.4","0.6"]` on a 4-nozzle machine becomes `0.4, 0.6, 0.4, 0.4`. +Longer vectors are truncated. + +Note the two sizing families: the plain per-extruder keys (`extruder_offset`, `extruder_colour`, +`extruder_printable_height`, `min_layer_height`, `max_layer_height`, `nozzle_diameter`) are sized to the +extruder count, while `printer_options_with_variant_1` (`retraction_length`, `z_hop`, `wipe`, +`nozzle_type`, the rest of the retraction family) is sized to `printer_extruder_variant` instead. + +- Give **one entry per extruder** for ordinary per-extruder vectors such as `extruder_offset`, + `extruder_colour`, `min_layer_height` and `max_layer_height`; size the variant-dependent family + to `printer_extruder_variant` instead. + A single `["0x0"]` `extruder_offset` on a dual or multi-tool machine — which already ships — pads every + toolhead to the same offset, so the offset never applies. +- Overriding `nozzle_diameter` to a different count without re-stating every per-extruder vector is the + other half of the trap — `Snapmaker U1 (0.4+0.6 nozzle)` inherits 5-entry vectors against 4 nozzles. + +Copy targets: `Custom/machine/fdm_toolchanger_common.json` + `Custom/machine/MyToolChanger 0.4 +nozzle.json` (a clean minimal variant on a base that gives every vector five entries), and +`Ratrig/machine/RatRig V-Core 4 IDEX 300 0.4 nozzle.json` for IDEX. The BBL extruder-variant machinery +(`extruder_variant_list`, `printer_extruder_id`, `default_nozzle_volume_type`) is used by a handful of +vendors — do not copy it into a new bundle (`nozzle_volume_type` itself is not a machine-preset key). + +## Custom G-code + +The keys are `machine_start_gcode`, `machine_end_gcode`, `change_filament_gcode`, +`machine_pause_gcode`, `before_layer_change_gcode` and `layer_change_gcode`. Both a single string with +embedded `\n` and a JSON array of lines are legal and both are in use — do not convert one into the +other. Conditionals are `{if …}` / `{elsif …}` / `{else}` / `{endif}`; `{elsif}` is rare but real (Qidi's +`layer_change_gcode` uses it). + +Placeholder errors only surface when the config is actually expanded, which means `validate_slice`: + +```bash +./scripts/check_profile.sh --vendor "" validate_slice +# Windows: scripts\check_profile.bat -Vendor "" validate_slice +``` + +What the sweep covers is in [validation.md](validation.md#validate_slice); no `CP TOOLCHANGE START` in +the output means `change_filament_gcode` never expanded. diff --git a/.claude/skills/orca-profiles/references/process-profiles.md b/.claude/skills/orca-profiles/references/process-profiles.md new file mode 100644 index 0000000000..98f31bac1a --- /dev/null +++ b/.claude/skills/orca-profiles/references/process-profiles.md @@ -0,0 +1,145 @@ +# Process profiles + +Processes live in `resources/profiles//process/` — selectable leaves and shared bases alike, and +every one of them is registered in `process_list`. There are no global processes shared across vendors. + +## Naming + +`"mm @"` — near-universal, so match it. + +Follow the bundle's existing quality vocabulary. BBL's common ladder relates the quality word to +the layer-height / nozzle ratio; it is a naming convention, not a loader constraint: + +| Quality | Ratio | 0.2 nozzle | 0.4 | 0.6 | 0.8 | +| --- | --- | --- | --- | --- | --- | +| Extra Fine | 0.2× | — | 0.08 | — | — | +| Fine | 0.3× | 0.06 | 0.12 | 0.18 | 0.24 | +| Optimal | 0.4× | 0.08 | 0.16 | 0.24 | 0.32 | +| Standard | 0.5× | 0.10 | 0.20 | 0.30 | 0.40 | +| Draft | 0.6× | 0.12 | 0.24 | 0.36 | 0.48 | +| Extra Draft | 0.7× | 0.14 | 0.28 | 0.42 | 0.56 | + +This is the `fdm_process_single__nozzle_` ladder; 0.4 is commonly the unsuffixed nozzle default. +Match neighbouring names rather than renaming shipped tiers to fit the table. + +The `@target` is a human label, not a reference: most do not equal any real printer variant name. +Compatibility comes from the resolved list or condition, not this label. + +## Shape + +A selectable leaf's only truly universal keys are `type`, `setting_id`, `name` and `instantiation`; +`inherits` and `from` are near-universal — plus compatibility. No slicing key is universal; even +`layer_height` is more often inherited than restated. A base has `type`, `name`, `instantiation`, almost +always `from`, and **no** `setting_id`. + +**Target shape: a 7-key leaf.** `OrcaArena` is the cleanest model — +`fdm_process_common` → `fdm_process_arena_common` → `fdm_process_arena__nozzle_` → leaf, where the +leaf carries only `type`, `name`, `inherits`, `from`, `setting_id`, `instantiation`, +`compatible_printers`, and the per-nozzle base holds the layer height and all eight line widths. + +BBL, WonderMaker and Z-Bolt are uniform in *layering* — every leaf inherits a base, names its printers +directly and holds no layer height of its own — but not in key count. Imitate BBL's layering, not its +content: its leaves carry doubled `print_extruder_variant` arrays that no single-variant vendor needs. + +Nearly every vendor ships its own `fdm_process_common` as the inherits-less root. Those files are not +identical; copying another vendor's version into a new bundle is normal. + +Beware leaf-inherits-leaf: Prusa chains several levels deep through sibling leaves, and Elegoo and +Flashforge do it too, so editing one selectable process silently changes others. Check a leaf's children +before editing it. + +## Compatibility + +Most leaves set `compatible_printers` directly; some inherit it from a base, and Prusa's fall through to +`compatible_printers_condition`. After resolving `inherits`, **every selectable process has one or the +other** — that is the invariant to review against. Unlike filaments, inheriting `compatible_printers` is +legitimate for a process, and no check enforces its presence. + +- A non-empty `compatible_printers` makes `compatible_printers_condition` **dead code**. Use one or + the other. +- A condition that fails to parse means *compatible with everything* — a warning, not an error. A typo + widens compatibility instead of narrowing it. +- Matching is `boost::regex` **`regex_match`** — a full-string match, which is why every shipped + condition wraps its keyword in `.*`. Because it is boost rather than `std`, `.` also spans the newlines + inside `printer_notes`. +- A `printer_notes` keyword that prefixes another model's keyword matches both. Prusa guards it: + + ``` + printer_notes=~/.*PRINTER_MODEL_COREONE[^_a-zA-Z0-9].*/ and nozzle_diameter[0]==0.4 and printer_notes=~/.*HF_NOZZLE.*/ + ``` + + The `[^_a-zA-Z0-9]` exists because `PRINTER_MODEL_COREONE_L` also contains `PRINTER_MODEL_COREONE`. + +`compatible_printers` is almost always one element. A leaf listing a whole model family is where a newly +added printer is usually forgotten. + +## What to review per nozzle + +| Key group | Review | +| --- | --- | +| `line_width` and per-region widths | resolved widths suit the nozzle and layer height | +| `layer_height`, `initial_layer_print_height` | within the printer's limits | +| print speeds | consistent with flow limits and hardware tuning | +| shell layers, wall loops, accelerations, support Z distances | preserve the intended thickness, motion and support behavior | + +**A common starting pattern is nozzle + 0.02 mm**: 0.22 / 0.42 / 0.62 / 0.82 / 1.02. In that pattern, at 0.4, +`inner_wall_line_width`, `sparse_infill_line_width`, `skin_infill_line_width` and +`skeleton_infill_line_width` widen to 0.45 and `initial_layer_line_width` to 0.5; at 0.2, +`initial_layer_line_width` widens to 0.25. Also derived, and easily missed: +`ironing_inset = line_width / 2` (0.11 / 0.21 / 0.31 / 0.41). +These are examples, not required values; preserve intentional vendor tuning and percentage/automatic +widths, and validate their resolved values. + +`min_layer_height` and `max_layer_height` are machine keys — no process file sets them. + +## Slice-time content checks + +`Print::validate()` enforces four rules at slice time: + +1. `initial_layer_print_height` ≤ min `nozzle_diameter` +2. `layer_height` ≤ min `nozzle_diameter` — *"Layer height cannot exceed nozzle diameter."* +3. `line_width` and the seven per-region widths (inner/outer wall, sparse infill, internal solid infill, + top surface, skin, skeleton) > `layer_height` — *"Line width too small"*. `support_line_width` only + when the object has support or a raft; `initial_layer_line_width` is never checked. +4. every width ≤ 5 × max `nozzle_diameter` — *"Line width too large"* + +Two further rules cover `bridge_line_width` (≤ nozzle diameter; > `layer_height` unless `thick_bridges` +and `thick_internal_bridges` are both on). The sweep starts from printer defaults rather than +enumerating every process. **A new non-default process gets no dedicated slice coverage in CI.** + +## What CI checks on a process + +Structure, not content: `process_list` name consistency **and** index coverage the other way, two files +claiming one process name, the `extruder_clearance_radius` / `extruder_clearance_max_radius` conflict +pair, duplicate JSON keys, a file `normalize` would rewrite, and the five `setting_id` rules (the fifth +rejects the misspelled key `settings_id`). `compatible_printers` presence is checked for **filaments +only**. + +Note the C++ loader derives a missing `setting_id` on the fly, so the validator will not fail a process +without one — only `orca_profile_tool.py check` catches it. Running the validator alone gives a false +all-clear. + +## Silent failures specific to processes + +- **Unknown or misspelled keys are discarded with no error and no warning.** They ship all over the + process tree, both plain typos (`inital_layer_height`, `tree_support_bramch_diameter_angle`, + `sparse_infill_patter`) and keys copied from other slicers that Orca never defined. +- Keys on the tool's `OBSOLETE_KEYS` list (`adaptive_layer_height`, `overhang_totally_speed`, …) are + rejected by `check`'s normalization pass across preset types; `normalize` removes them. + The additional per-key obsolete warnings read `filament/` only. +- A dangling `compatible_printers` inside an `instantiation: "false"` base is invisible to + `check_preset_references`: a base never becomes a `Preset` at all (its config goes into `config_maps` + and the loader returns early), so it is in no collection for the check to walk. +- Orphan bases that nothing inherits are scattered through the tree — usually the leftover of a + half-finished nozzle addition. + +## Adding a quality tier or a nozzle's processes + +1. Choose the layer height and quality label using the vendor's existing ladder. +2. If the vendor has per-nozzle bases, add one (`fdm_process___nozzle_`) with the layer + height, nozzle-appropriate line widths, `initial_layer_print_height` and `ironing_inset`. +3. Add the leaf: 7 keys, `compatible_printers` naming the exact printer variant(s). +4. Register both in `process_list`, parent first. Bump the version, run the id tool, validate. +5. Slice this process explicitly with its intended printer; the sweep gives non-default tiers no + dedicated coverage. If it is a printer's `default_print_profile`, verify the exact name and + resolved compatibility too — the sweep may fall back or select another compatible process. diff --git a/.claude/skills/orca-profiles/references/review-checklist.md b/.claude/skills/orca-profiles/references/review-checklist.md new file mode 100644 index 0000000000..0c4fa7e95a --- /dev/null +++ b/.claude/skills/orca-profiles/references/review-checklist.md @@ -0,0 +1,177 @@ +# Reviewing a profile change + +Start with delivery, identity and backward compatibility, then check the affected preset types. +The table highlights gaps that need human review. What CI *does* run: +[validation.md](validation.md). + +| Not checked by CI | Consequence | +| --- | --- | +| The `version` bump | The change never reaches an upgrading user | +| A misspelled setting key | Setting silently has no effect | +| A filename Windows cannot check out, or one that differs from its `sub_path` only in case | Works on the author's machine, breaks the bundle on another platform | +| `bed_model` / `bed_texture` / `hotend_model` pointing at a missing asset | Bed renders as Custom, hotend falls back to the generic model | +| A nozzle size in a model's list with no matching variant | The size is offered and resolves to nothing | +| A non-default process | `validate_slice` gives non-default quality tiers no dedicated coverage | +| Whether the intended default survived compatibility selection | The sweep can select a different compatible preset | +| A dangling `compatible_printers` inside an `instantiation: "false"` base | A base never becomes a `Preset`, so the reference check never sees it (a bad `inherits` in a base *is* caught) | +| A `renamed_from` whose old name is still a live preset | The redirect is inert while a live preset carries that name | +| Per-extruder vector length on a multi-nozzle printer | Silently padded (with the **first** value) or truncated | + +## 1. Was the vendor `version` bumped? + +For **every** bundle whose folder the diff touches, `resources/profiles/.json` must have its +`version` incremented — last component, carrying `.99` into the third component. A library change +means bumping `OrcaFilamentLibrary.json`. + +*Why:* nothing in CI checks it, and `PresetUpdater` reinstalls only when `vendor_ver < resource_ver` — +without a bump the change reaches neither an upgrading user nor the author's own running app. + +## 2. Was the index rebuilt, and does the diff contain only this change? + +`check` now fails on an unregistered file, on an index `update-index` would reorder, and on a file +`normalize` would rewrite — so a PR that skipped them arrives red, and you do not have to spot the +omission yourself. Three things are still yours: + +- **The index diff belongs to this change.** `update-index` rewrites whole `*_list` sections. If the + bundle had drifted, the author's PR now carries someone else's reordering; ask for it in a separate + commit rather than reviewing it inline. +- **A deleted selectable preset needs a successor** as in item 4. `update-index` removes its + registration; `validate_custom` detects the break only for names covered by released fixtures. +- **`normalize` edits content, not just layout.** It drops `version` and `is_custom_defined` from preset + files, removes obsolete keys, deletes six print-speed keys from filament profiles, and resolves + `extruder_clearance_radius` against `extruder_clearance_max_radius` by keeping the larger. + Check that the keys it removed were meant to go. + +Obsolete keys fail `check`'s normalization pass and should be removed with `normalize`. +`check` also reports per-key obsolete warnings for filament profiles in the selected vendors. + +*Why:* the index is the loader's only entry point. Out-of-order entries fail with `can not find inherits` +and take the whole vendor bundle down; an unindexed file gets reviewed, merged and never loads. + +## 3. Are ids generated, not written? + +No hand-typed or copied `setting_id` / `filament_id`. Instantiated presets have a `setting_id`; bases do +not. `check` enforces all of that; what it cannot tell you is whether the identity *should* have moved. + +A rewritten or removed `filament_id` means a product's identity moved — a rename, or an edited +`filament_vendor` / `filament_type` — and the old id is not forwarded anywhere. Confirm that was +intended, and that a new id is not a rename in disguise. + +*Why:* a duplicate `filament_id` on one printer makes AMS spool matching a coin toss; a copied +`setting_id` breaks preset identity. See [ids.md](ids.md). + +## 4. Does anything disappear for existing users? + +A rename, a deletion, or a flip of `"instantiation": "true"` → `"false"` on a shipped preset removes the +name from the preset collection. It needs `renamed_from` on a successor — and only one preset may claim a +given old name. The claimed old name must **not** still be a live preset; the redirect is inert if it is. + +*Why:* user presets inheriting it die with `can not find parent for config !`; 3MF-embedded +presets are dropped with no error at all. Commit `33923464ae` reverted exactly this for Cubicon; +`6943b6ddc3` redid it correctly. CI's `validate_custom` catches the shipped-name case — but not an inert +`renamed_from`. + +## 5. Is `compatible_printers` right? + +Exact printer **variant** names, non-empty on every instantiated filament outside OrcaFilamentLibrary +and written in the preset's own file — golden rule 6, with the flattened-vs-own-key trap in +[filament-profiles.md](filament-profiles.md#compatible_printers). Watch for a nozzle-specific variant that +inherited or copied the base's full printer list, and for two presets of one product with overlapping +lists — duplicate combobox entries and an ambiguous AMS match. + +*Why:* real shipped bugs twice (`b7b3418baf` "showing up everywhere", `ff83aa41ef` duplicate Flashforge +entries). + +## 6. Model ↔ variant ↔ process consistency + +- New nozzle size → the model's `nozzle_diameter` list extended, a variant with a matching + `printer_variant`, and at least one process listing that variant. +- `default_print_profile` is one exact name (not a `;` list), and that process's resolved + compatibility list or condition includes this printer. +- `default_filament_profile` is an array of names that exist. + +*Why:* an unlisted `printer_variant` is a hard bundle-load failure. Default process selection is +weaker: the sweep attempts the named default, then updates compatibility and rejects generic Default +fallbacks. Another compatible process can conceal a bad reference, so inspect it even after a pass. + +## 7. Types and spellings + +Every value a string or an array of strings; `filament_type` an array; `instantiation` the string +`"true"`/`"false"` — golden rule 7. Check index metadata and model `nozzle_diameter` especially; +wrong types there can abort loading for **every** vendor. + +The part only a reviewer can do: check new setting keys against `src/libslic3r/PrintConfig.cpp`. A +misspelled key is silently discarded (rule 8), the single most common way a profile edit does nothing +while CI stays green. + +## 8. Blast radius of a base edit + +A change to `fdm_*_common.json` reaches every child at once. Ask which presets it touches — several +reverts in this repo are exactly this (`41d1b0d3c8`, `dc491166a8`). Also check whether the edited leaf has +children of its own: Prusa, Flashforge and Elegoo all chain leaf-inherits-leaf several levels deep. + +## 9. Do the numbers make sense for the nozzle? + +Check resolved widths and layer heights against the nozzle, and flow limits / pressure advance +against the actual hardware and material. The patterns in [process-profiles.md](process-profiles.md) +are examples, not mandatory values; [filament-profiles.md](filament-profiles.md) explains what to +revisit for a nozzle change. A cloned preset's unchanged MVS needs particular scrutiny. + +Settings tuned for real hardware cannot be verified by reading the diff. Say so rather than approving +numbers nobody measured. + +## 10. Asset references (not checked anywhere) + +`bed_model`, `bed_texture`, `hotend_model` and `_cover.png` exist under +`resources/profiles//`. Broken references already ship; nothing checks them. + +## 11. `default_materials` (checked by CI) + +`check` fails on a `default_materials` / `default_filament_profile` name that resolves to no system +filament, so a dangling entry no longer reaches review. Scope the run while working on one vendor: + +```bash +python3 scripts/orca_profile_tool.py check --vendor "" # py -3 on Windows +``` + +## 12. Per-extruder vector lengths (not checked) + +One entry per extruder for the plain per-extruder vectors; the `printer_options_with_variant_1` keys are +sized to `printer_extruder_variant` instead. A wrong length is silently padded — repeating the **first** +value, not the last — or truncated. The two sizing families and the worked cases are in +[machine-profiles.md](machine-profiles.md#multi-extruder-idex-and-tool-changers). + +## 13. Non-default processes get no slice coverage + +`validate_slice` starts from printer defaults; it does not enumerate every process. Slice a new or +changed non-default tier explicitly with its intended printer. + +## 14. Housekeeping worth a nit, not a block + +`"from"` other than `"system"` (the preset-bundle loader ignores it, though the CLI's config-file loader +rejects anything but `system`/`user`/`User`), `printer_settings_id` copied from another +vendor, and a filename that disagrees with the preset's `name` (common; the loader keys off `name`). + +## 15. Cross-platform filenames and paths (not checked) + +Check for Windows-invalid characters, reserved device names, trailing path-component spaces/dots, +and case mismatches in `sub_path` or asset paths. See [cross-platform paths](validation.md#cross-platform-paths). + +--- + +## Reporting the review + +A finding is: **one defect**, its file, what breaks at runtime or in CI, and the fix. Split independent +defects into separate findings even when they live in one file — five id problems in one bullet get one +fix and four survivors. + +Severity discriminates only if it is earned: + +| Severity | Means | +| --- | --- | +| blocker | the bundle fails to load, or a preset is unreachable at runtime | +| major | CI fails, or existing users lose a preset | +| minor | wrong-but-working: dead keys, `from`, naming, redundant overrides | + +Compute every number and id (`orca_profile_tool.py`, a scripted count) or omit it — one invented count +makes a reader stop trusting the right ones. Report a command's result only if you ran it. diff --git a/.claude/skills/orca-profiles/references/validation.md b/.claude/skills/orca-profiles/references/validation.md new file mode 100644 index 0000000000..497e1d4e18 --- /dev/null +++ b/.claude/skills/orca-profiles/references/validation.md @@ -0,0 +1,255 @@ +# Validating profiles + +```bash +./scripts/check_profile.sh # everything CI runs +./scripts/check_profile.sh --vendor "" # fast loop +./scripts/check_profile.sh profile_tool validate_slice # named checks only +``` + +```bat +scripts\check_profile.bat :: the same three, on Windows +scripts\check_profile.bat -Vendor "" +scripts\check_profile.bat profile_tool validate_slice +``` + +`check_profile.bat` is a shim around `check_profile.ps1` — same checks, same order, same logs; +the flags take PowerShell spellings (`-Vendor`, `-ProfilesDir`, `-Validator`, `-Download`, `-Refresh`, +`-WorkDir`, `-LogLevel`) and positional check names are unchanged. `-p`, `-v` and `-l` are aliases, so +`-v Elegoo -l 2` reads the same on both platforms. It passes `-ExecutionPolicy Bypass` because a +default Windows client refuses to run a checked-out `.ps1` at all. The `.ps1` finds Python itself, +probing `py -3`, then `python`, then `python3`; run the tool by hand with `py -3` for the same reason. + +Every check in the run happens even after an earlier one fails; the script exits non-zero if any did, and writes +`.test/check_profiles/logs/.log` plus, on failure, `.test/check_profiles/pr_comment.md` — the same +report CI posts on the PR. A stale `.test/check_profiles/.lock` after a crash must be removed by hand. + +## The five checks + +| Check | Command it runs | Catches | +| --- | --- | --- | +| `profile_tool` | `python3 scripts/orca_profile_tool.py check` | index coverage **both ways**, preset-name collisions, files `normalize`/`update-index` would still rewrite, duplicate JSON keys, filament `compatible_printers`, `filament_type` array, conflict keys, id length, **all `setting_id` and `filament_id` rules** | +| `validate_system` | `validator -p resources/profiles -l 2` | load errors, missing filament `compatible_printers`, dangling `inherits`/`compatible_*`, duplicate `filament_id` per printer | +| `validate_slice` | `validator -p … -s -l 2` | custom G-code expansion, unresolvable printer defaults | +| `validate_filament_subtypes` | `validator -p … -l 2 -f` | nothing extra — see below | +| `validate_custom` | `validator -p -l 2` | a shipped preset name that a past release offered no longer resolving | + +**`-f` is a no-op.** It is declared `po::bool_switch()->default_value(true)`, so the duplicate-`filament_id` +check runs whether or not you pass it — `validate_system` already fails on duplicates. The binary's own +`--help` ("Off unless this flag is present") does not reflect that default. + +### `validate_custom` — the backward-compatibility gate + +Downloads one fixture archive per past release (v1.9.0 onwards) of *generated mock* user presets — +a `__orca_test` copy of every system preset that +release shipped, cut with the validator's own `-g 1` mode — unpacks each over a copy of the current tree +and loads it. Each entry holds only `inherits` plus a canned diff, so the one failure it adds over +`validate_system` is a shipped preset name disappearing. (The whole current tree sits under each fixture, +so every `validate_system` error fails it too.) This is what makes a rename or an +`instantiation` flip a CI failure rather than just a user complaint, and the reason `renamed_from` is +mandatory. + +### `validate_slice` + +Slices a two-colour cube on every instantiable printer in the tree, sequentially, forcing the prime tower. +It selects `default_print_profile` and the first `default_filament_profile`, then updates compatibility; +that update can select a different compatible preset. Confirm the intended defaults yourself rather +than treating a passing sweep as proof that those exact presets were sliced. +A printer fails if it cannot be selected, falls back to a Default preset, throws, produces no g-code, or +emits no `CP TOOLCHANGE START`. It cannot be scoped to a filament-only vendor +(`No instantiable printer presets found for vendor OrcaFilamentLibrary`); `check_profile.sh` records it +as SKIP for a vendor with no `machine/` folder. + +## `orca_profile_tool.py check` + +`check` is one subcommand of the tool that also owns +`generate-id`, `normalize`, `trim` and `update-index`; see [ids.md](ids.md) for the writing half. + +| Per vendor | Catches | +| --- | --- | +| `check_preset_name_uniqueness` | two files in one bundle claiming one type + name — indexed or not | +| `check_index_coverage` | a file on disk that no `*_list` references (**an error, not a warning**) | +| `check_name_consistency` | an index entry whose `name` disagrees with the file, or whose `sub_path` is missing | +| `check_normalized` | a file `normalize` would rewrite, and an index `update-index` would rebuild | +| `check_filament_compatible_printers` | an instantiated non-library filament with no `compatible_printers` of its own | +| `check_conflict_keys` | `extruder_clearance_radius` alongside `extruder_clearance_max_radius` | +| `check_vector_type_keys` | a vector option written as a scalar (`"filament_type": "PLA"`) | +| `check_filament_id_length` | a declared `filament_id` longer than 8 characters | +| `check_machine_default_materials` | every `default_materials` / `default_filament_profile` name resolves | +| `check_obsolete_keys` | per-key warnings for ignored options; **filament files only** | + +Tree-wide, **ignoring `--vendor` entirely**: `check_setting_id_uniqueness` and `check_filament_ids`. So a +vendor-scoped run can and does fail on another vendor's files — and it saves seconds, not minutes. + +Unscoped, the per-vendor pass covers every bundle. The only exclusion is the stray `user/` directory +(see below); `OrcaFilamentLibrary` is held to the same rules as any vendor, its sole exemption being +that a library filament may leave `compatible_printers` empty — exactly what +`check_filament_compatible_printers` allows. `check_normalized` covers every bundle with an index. + +Notes that matter: + +- Exit codes: **0** clean, **1** errors found, **2** argparse misuse. Warnings never change the exit code. +- A nonexistent `--vendor` is a hard error — `[ERROR] unknown vendor "" in `, exit 1. +- `--vendor ""` means all vendors; `check_profile.sh` relies on that. `--vendor` is repeatable. +- A **stray directory** under `resources/profiles/` still gets counted as a vendor by the per-vendor pass + and warned about (`No profiles found for vendor: at …/.json`, and the "Checked vendors" count + goes up by one). The one exception is `user/`, the validator's data dir, which an unscoped `check` + skips by name; `--vendor user` still checks and warns about it. Warnings never change the exit code. + `normalize`, `trim` and `update-index` ignore strays too — they define a bundle as *a directory with a + matching index file*. +- Each remedy is printed once for the whole run, not once per file, as a `[WARNING]` under the errors + ("2 unreferenced file(s) above: delete them, or run … update-index"). Read those lines: they name the + command that fixes the batch. +- The trailing summary always suggests `normalize`. That is right for the shape errors and misleading for + everything else — an id error needs `generate-id`, a dangling `default_materials` needs a human. +- `resources/profiles/check_unused_setting_id.py` is a legacy BBL-only diagnostic, not part of + profile CI. Use `orca_profile_tool.py check` for current id validation. + +### Obsolete-key diagnostics + +`check` always reports per-key warnings for obsolete options in filament profiles. +The normalization check also rejects obsolete keys across preset types; `normalize` removes them. + +### Default-material references + +The materials check finds `default_materials` / `default_filament_profile` entries naming a preset +that does not exist. The three authoring errors it surfaces are `,` instead of `;`, wrong case +(`@system`), and a whole `;`-joined string stuffed into one array element. + +### `normalize` and `update-index` are part of the check + +`check` fails when either command would still change something, so they are not optional polish — the +file that gets reviewed has to be the file that ships. What `normalize` changes is narrow and fixed: +adds a missing `type`, deletes a `version` or `is_custom_defined` key from a *preset* file, deletes six +print-speed keys from filament profiles (`initial_layer_print_speed`, `outer_wall_speed`, +`inner_wall_speed`, `infill_speed`, `top_surface_speed`, `travel_speed`), deletes the +obsolete keys in `PrintConfigDef::handle_legacy`'s `ignore` set across preset types, resolves the +`extruder_clearance_*` conflict pair by keeping the larger, arrayifies five filament options besides +`filament_type`, and hoists `type`, `name`, `renamed_from`, `inherits`, `from`, `setting_id`, +`filament_id`, `instantiation` to the front. A file it changes is then rewritten whole — tab-indented, +LF, one trailing newline, keys reordered. + +**Set `type` explicitly when authoring.** For a file in `machine/` without it, normalization guesses +`machine` only if its name contains `nozzle`, otherwise `machine_model`. That heuristic cannot +reliably classify shared machine bases or unusually named variants. + +The Python obsolete-key set is checked against the C++ source by a unit test. Active options +and legacy aliases that the loader migrates (such as `extruder_type` and +`extruder_clearance_max_radius`) are preserved. + +Two things it therefore does **not** enforce: + +- **Formatting and key order on their own.** A file with none of those problems is skipped entirely, so + 4-space indent, a missing trailing newline, and a file that leads with `compatible_printers` all pass + `check`. They stay latent until something else trips `normalize` and the whole file reformats inside an + unrelated diff. (`normalize --force` rewrites every file, which is not something to run on a shipped + bundle.) +- **A misspelled setting key.** `inital_layer_height` and `sparse_infill_densiti` pass `check` cleanly. + Verify new keys against `PrintConfig.cpp` and `PrintConfigDef::handle_legacy`. + +## The validator binary + +Built from `src/dev-utils/OrcaSlicer_profile_validator.cpp` (`-DORCA_TOOLS=ON`). +Both scripts find a local build under `build*/` — `check_profile.sh` tries Release, RelWithDebInfo, then +Debug, and `check_profile.ps1` adds MinSizeRel — else they download the nightly into +`.test/check_profiles/validator`. Pass `--download` / `-Download` to match CI exactly, since a stale +local build is used silently. Windows looks for `OrcaSlicer_profile_validator.exe`. + +If your build lives somewhere else entirely, point at it with `--validator` / `-Validator`, or set +`ORCA_PROFILE_VALIDATOR` (`$env:ORCA_PROFILE_VALIDATOR` in PowerShell). + +| Flag | Meaning | +| --- | --- | +| `-p ` | profile tree (also becomes the data dir) | +| `-l ` | log level; CI uses 2 | +| `-v ` | load only that vendor **plus** OrcaFilamentLibrary | +| `-s` | slice sweep | +| `-f` | no-op (see above) | +| `-g 1` | regenerate user-preset fixtures; takes a value, and wipes the user preset dir first | + +On ARM64 Linux the nightly is x86-64 only — the script warns and downloads anyway, producing a binary +that will not run. Build it locally instead. + +Running the validator directly uses the profile tree as its data directory and can create `user/` +there. Prefer the wrappers, which stash existing user presets and restore them afterward. After a +direct run, inspect `user/` and remove only empty directories created by that run; fixtures or +pre-existing user files may be present. + +## Checking a copy of the tree + +Use `--profiles DIR` on the Python tool and `-p DIR` on the validator. The wrappers' `--profiles` / +`-ProfilesDir` passes the tree to both, so one run validates a copy fully: + +```bash +./scripts/check_profile.sh --profiles "" +``` + +On Windows use `scripts\check_profile.bat -ProfilesDir ""`. + +## Testing in the app + +Editing this checkout's `resources/profiles` does not update a separately installed application. +Test with a build using the edited resources and a bumped bundle version; the updater installs newer +bundles under `/system/`, and the preset cache also depends on the bundle version. +Use Help ▸ Show Configuration Folder to locate the active data directory: + +| Platform | Default data directory | +| --- | --- | +| macOS | `~/Library/Application Support/OrcaSlicer` | +| Linux | `$XDG_CONFIG_HOME/OrcaSlicer`, or `~/.config/OrcaSlicer` when unset | +| Windows | `%APPDATA%\OrcaSlicer` | + +A portable `data_dir` next to the executable takes precedence. Use a separate test configuration +for a clean-install check; preserve the normal configuration and user presets. + +## Cross-platform paths + +Match the exact case of each `sub_path` and asset filename; Linux filesystems commonly distinguish +case even when a macOS or Windows checkout does not. Preset-name references are case-sensitive +on every platform. Avoid Windows-invalid characters (`< > : " | ? *`), reserved device names +such as `CON` / `NUL` (including with extensions), and trailing spaces or dots in path components. +Keep stems tidy too, but a space immediately before `.json` is not a trailing path-component space. + +## Error → remedy + +| Message | Fix | +| --- | --- | +| `can not find inherits for ` | parent missing, unregistered, or listed **after** the child | +| `can not find filament_id for ` | nothing in the chain declares one — run `generate-id` | +| `can not find parent for config !` | a shipped name disappeared — add `renamed_from` | +| `Missing instantiation attribute for ` | key absent **or** not the string `"true"`/`"false"` | +| `contains incorrect keys: , which were removed` | a key valid for a different preset type | +| `defines invalid printer variant ""` | not in the model's `nozzle_diameter` list | +| `has printer_variant "" that does not match its nozzle_diameter` | the set comparison in [machine-profiles.md](machine-profiles.md) | +| `references unknown compatible_printers "

"` | the printer was renamed or deleted; fix the reference | +| `references renamed compatible_printers "" (now "")` | in-tree references must name the current preset; `renamed_from` does not excuse them | +| `Filament preset "" is missing compatible_printers setting` | non-library filaments need a non-empty list in their **own** file — the flattened-vs-own-key trap is in [filament-profiles.md](filament-profiles.md#compatible_printers) | +| `Ambiguous AMS filament match: N presets share filament_id "X" … printer "Y"` | make the lists disjoint, or fix an `inherits` pointing at another material's `@base` | +| `Layer height cannot exceed nozzle diameter.` / `Line width too small` | `Print::validate()` flow rules | +| `[ERROR] … no .json list references it, so it never loads` | `update-index`, or delete the file | +| `[ERROR] … references it and it declares no profile type` | set the correct `type` explicitly, then `normalize` and `update-index` | +| `[ERROR] … normalize would ` / `.json: update-index would rebuild ` | run that command and commit the result | +| `[ERROR] has N profiles named ""` | identify the intended preset and remove or rename the duplicate; use `trim --dry-run` only for deliberate unindexed-file cleanup | +| `[ERROR] … must not have a setting_id` / `is missing a setting_id` | `generate-id --setting-id` | +| `inherits filament_id "X" but its own triple … mints "Y"` | `generate-id` will **not** fix this — see [ids.md](ids.md) | +| `vendor 's config version: invalid` | the `version` string is not Semver-parseable | +| `[json.exception.type_error.302] type must be string` | locate the non-string value in the index or model; see [failure scopes](vendor-bundle.md#failure-modes-ranked-by-blast-radius) | +| `Printer "

" fell back to a default preset` | final process or filament selection is a generic Default preset; check named defaults, visibility and available compatible presets. An incompatible default may instead be replaced without this error | +| `Printer "

" sliced but the filament change never fired` | `change_filament_gcode` never expanded | + +## CI + +`.github/workflows/check_profiles.yml`, job **"Check profiles"**, on `pull_request` into `main` or +`release/*`, paths `resources/profiles/**`, `resources/printers/**`, `scripts/**` and the workflow itself. +There is no push trigger — a direct push to main runs no profile validation. + +The job opens with `python3 -m unittest discover -s scripts/tests -t scripts`, the tool's own unit +tests. That step is deliberately **not** `continue-on-error`: a broken tool makes everything it then says +about the profiles worthless. Every check after it is `continue-on-error` with a final gate, so one run +reports all five results. On failure a second workflow posts or replaces a single PR comment marked +``, with each failing log truncated to 30 KB; it deletes the comment +once the run is green. + +The job name is also the required check for the delegated-merge bot, which lets a vendor maintainer +self-merge a `resources/profiles//` PR with no human review — so whatever CI does not check +is what ships unreviewed. Its denied patterns refuse `^scripts/` and any `.py`, so a PR that touches the +tooling always needs a maintainer. diff --git a/.claude/skills/orca-profiles/references/vendor-bundle.md b/.claude/skills/orca-profiles/references/vendor-bundle.md new file mode 100644 index 0000000000..29aac13331 --- /dev/null +++ b/.claude/skills/orca-profiles/references/vendor-bundle.md @@ -0,0 +1,175 @@ +# The vendor bundle and the loader + +A bundle is `resources/profiles/.json` (the index) plus `resources/profiles//`. +The **vendor id is the filename stem**, not the `name` inside — several differ (`BBL.json` is named +"Bambulab"). Asset paths and the `setting_id` formula use the id; the `validate_custom` fixture prefix +uses the `name`. + +## The index + +```json +{ + "name": "Phrozen", + "version": "02.04.00.03", + "force_update": "0", + "description": "Phrozen configurations", + "machine_model_list": [ { "name": "...", "sub_path": "machine/....json" } ], + "machine_list": [ ... ], + "process_list": [ ... ], + "filament_list": [ ... ] +} +``` + +The loader reads `name`, `version`, `url` and the four `*_list` arrays. +`description` is only logged. `force_update` is read by `PresetUpdater`, never by the loader. +`sub_path` is relative to the **vendor folder**. + +| List | Holds | +| --- | --- | +| `machine_model_list` | `machine_model` records (the printer product) | +| `machine_list` | printer variants **and** shared machine bases | +| `process_list` | selectable processes **and** shared process bases | +| `filament_list` | selectable filaments **and** shared filament bases | + +### Three registration rules + +1. **Everything is registered, bases included.** Every preset file on disk has exactly one entry in the + matching list, and no unindexed preset file is left in the tree. +2. **Parents before children.** `inherits` resolves against a per-kind map filled as the list is walked + (`configs.clear()` then process, filaments, printers). A parent listed after its child produces + `can not find inherits for ` and the bundle is discarded. +3. **The index entry's `name` must equal the `name` inside the sub_path file.** `check_name_consistency` + walks the index looking for the files; `check_index_coverage` walks the files looking for them in the + index. The `renamed_from` escape hatch `check_name_consistency`'s docstring promises is commented out. + +All three are `check` errors now, and `update-index` writes an index that satisfies all three from the +files on disk — including the parents-first ordering, by topological sort. Hand-editing the index is +fine for a one-line addition, but the committed result must equal what `update-index` writes, because +`check` compares them. + +The loader itself reports none of this: an unregistered file, or an entry with a typo'd key +(`"subpath"`), is silently dropped. (A typo'd `sub_path` is a `check` error naming the entry.) + +`BBL/cli_config.json` and `BBL/filament/filaments_color_codes.json` are auxiliary data loaded by path, +not presets. The tool's `NON_PROFILE_FILES` excludes these basenames from preset maintenance. + +## `version` + +Parsed by a four-component Semver where the 4th is folded in as `patch = patch*100 + value`. Write it +zero-padded, `MM.mm.pp.bb`; a couple of bundles drop a component or the padding, but do not imitate them. + +- **Bump the version for every bundle the PR touches.** `PresetUpdater` installs bundled resources + only when their version is newer than the installed version; the `.opc` preset cache is also + versioned. Nothing in profile CI checks the bump. +- **Keep the last component ≤ 99.** `02.04.00.100` and `02.04.01.00` both parse to `2.4.100`. A bundle + that reaches `.99` carries into the third component (`02.03.02.99` → `02.03.03.00`). +- An **absent** version is worse than a stale one: the validator still passes, but `Semver::valid()` + excludes `0.0.0`, so the vendor is dropped from the configuration wizard entirely and the preset cache + is disabled for it. An *unparseable* version is not silent — it throws and discards the whole bundle + (see the failure table below). + +## Common preset keys + +| Key | Value | +| --- | --- | +| `type` | `machine_model` / `machine` / `process` / `filament` | +| `name` | the preset name; the filename is *not* authoritative | +| `inherits` | the parent's exact `name` — no path, no `.json` | +| `instantiation` | the **string** `"true"` (selectable) or `"false"` (base) | +| `from` | `"system"` by convention; the vendor loader never reads it | +| `setting_id` | required on instantiated presets, forbidden on bases — generated | +| `renamed_from` | `;`-separated list of old names this preset supersedes | + +These are config-preset keys; `machine_model` records have their own +[schema](machine-profiles.md#a-machine_model-is-not-a-config-preset). Keep `from` as `"system"` +for shipped presets. The vendor loader ignores it, but the CLI config-file loader accepts only +`system`, `user` or `User` and handles their inheritance differently. + +`instantiation` is the one metadata key that is hard-gated: a missing key or any value other than the +strings `"true"`/`"false"` is an error (`Missing instantiation attribute for `). A JSON boolean +`true` fails harder — it throws inside `load_from_json` and takes the **whole vendor bundle** down. + +### `inherits` + +Resolution is an exact-name lookup **within the same bundle**, plus one exception: filaments may inherit +from `OrcaFilamentLibrary`, which is loaded first and becomes the base bundle. Vendor-to-vendor +inheritance always fails. You can inherit from an instantiated preset as well as from a base; it is +common. + +### `renamed_from` + +One JSON string, `;`-separated for several old names. + +- Write `"A;B"`, never `"A ; B"` — an unquoted item keeps its trailing space and can never match. +- When `renamed_from` is **absent** and the name contains `@`, the loader auto-adds the `@`-removed form + (`X @Y` → `X Y`) as a rename alias. Declaring an explicit `renamed_from` **suppresses** that, so a + preset that needs both the `@`-removed form and a real old name must list both. No shipped profile + currently does, which means any preset that gained a `renamed_from` quietly lost its `X Y` alias. +- It rescues names stored **outside** the tree: user presets and 3MF projects. It does **not** rescue + in-tree `inherits` (exact lookup), it does **not** satisfy `check_name_consistency`, the validator + reports an in-tree reference that only resolves through it (`references renamed compatible_printers + "OLD" (now "NEW")`), and `machine_model` records never read it at all. +- Only one preset may claim a given old name — two that do is a counted error + (`… was marked as renamed from "Y" … as well`). But the redirect is **inert while a live preset still + carries that name**, and nothing checks *that*; Z-Bolt ships a folder of such dead entries. + +## Failure modes, ranked by blast radius + +| Scope | Cause | +| --- | --- | +| **All vendors, zero system profiles** | a non-string `version`, `name` or `url` at the top level of a vendor index (`"version": 2`), or non-string `nozzle_diameter` on a model — `nlohmann::type_error` escapes the per-vendor `std::runtime_error` catch | +| **The whole vendor bundle** | unparseable `version`; index JSON parse error; a `sub_path` file missing or unparseable; unresolvable `inherits`; duplicate preset name within the vendor; empty/unknown `printer_model` or `printer_variant`; a filament resolving no `filament_id` | +| **One preset** | `instantiation` missing or a wrong string; keys belonging to another preset type (`contains incorrect keys: …, which were removed`); a non-string inside a `*_list` entry (`invalid value type for `) | +| **Logged, not counted** | a raw JSON number in a preset — `invalid json type for `, the value is dropped and the exit code stays 0 | +| **Nothing reported by the loader** | unregistered file; misspelled setting key; missing bed/hotend asset. Only the first of those is a `check` error; the other two reach users | + +Deleting a file the index still lists surfaces as a *parse error* on line 1, not "file not found" — the +loader `ifstream`s the missing path and nlohmann reports `unexpected end of input`. + +Preset names are a **single global namespace across every vendor**: a duplicate within one vendor is a +hard bundle failure, a duplicate across vendors is reported as `Found duplicated preset: in +vendor: ` and still counts as an error. `check_preset_name_uniqueness` catches the within-bundle +case earlier and more precisely — including an *unindexed* twin, which is one `sub_path` edit away from +silently becoming the parent every child resolves to (`std::map::emplace` keeps the first insertion, so +index order decides). Base names, by contrast, repeat across bundles by design: `fdm_process_common` +exists in nearly all of them. + +## Starting a whole new vendor bundle + +Nothing generates one; copy the smallest bundle that resembles the hardware. **`Voxelab` or `M3D`** are +the minimal shape — a shared machine base, the model, one variant, a shared process base, two +processes, and an empty `filament_list` that takes the library generics. Do *not* start from `Phrozen`: +it carries local `fdm_filament_*` copies that have drifted from the library, and a filament preset that +restates most of its parent — the style this skill advises against. + +Write the machine files **last**, so you only visit them once: + +1. **Choose the names first** — model, variant(s), process(es). Everything else references them. +2. `resources/profiles/.json`: `name`, `version` (`01.00.00.00`), `force_update: "0"`, + `description`, and all four `*_list` arrays (an empty `filament_list` is fine). +3. The shared bases — `/machine/fdm_machine_common.json` and + `/process/fdm_process_common.json`, both `"instantiation": "false"` with no `setting_id`. + For a Klipper printer add your own `/machine/fdm_klipper_common.json` inheriting the machine + base; there is no shared one, because a `machine` preset can only inherit inside its own bundle. +4. One selectable process per variant, each naming its variant in `compatible_printers`. +5. Bed assets and `_cover.png`, all directly in `/`. None of them is needed for the + bundle to load, and nothing in CI checks them — but the bed files are inert unless the `machine_model` + names them in `bed_model` / `bed_texture`, and the cover is found by convention as + `_cover.png`. +6. The `machine_model` record and the `machine` variants, now that every value they reference exists — + the minimum key sets and the `default_*` shapes are in + [machine-profiles.md](machine-profiles.md#the-machine-variant). +7. Run the tool and validate — follow + [Creating or modifying a profile](../SKILL.md#creating-or-modifying-a-profile). `generate-id` is not + optional for a new bundle: the validator loads presets that have no `setting_id`, but `check` fails + every one of them. `update-index` will fill the four `*_list` arrays for you once the files exist, so + step 2 only needs the bundle metadata to be right. + +## `resources/profiles_template/` + +A separate tree (`Template.json` + `Template/`) holding filament and process templates. It is **not** a +scaffold for shipped profiles — `CreatePresetsDialog.cpp` reads it for the in-app "create a custom +printer/filament" wizard, so editing it changes what users get when they create a custom preset. +`check_profile.sh`'s validator checks default to `resources/profiles` (redirectable with `-p`), and so +does `orca_profile_tool.py` (redirectable with `--profiles`); +neither covers this tree. diff --git a/.gitattributes b/.gitattributes index 441bdfe1eb..472a0b2d1f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,3 +5,8 @@ # with CRLF line endings: it fails on the first line. Windows checkouts default # to core.autocrlf=true, so keep these LF whatever the platform. *.sh text eol=lf + +# Batch files are read by cmd.exe, which tracks a byte offset into the file to +# resume after `call :label`. With LF endings that offset can land wrong and the +# label lookup fails, so keep these CRLF whatever the platform. +*.bat text eol=crlf diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 63f74a069e..6019c2bc8b 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,5 +1,5 @@ name: 🐞 Bug Report -description: File a bug report +description: Something behaves incorrectly while Orca Slicer keeps running labels: ["bug"] body: - type: markdown @@ -10,6 +10,8 @@ body: Please note that this is not the place to make feature requests or ask for help. For this, please use the [Feature request](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=feature_request.yml) issue type or you can discuss your idea on our [Discord server](https://discord.gg/P4VE9UY9gJ) with others. + If Orca Slicer closes on its own, freezes or stops responding, please use the [Crash report](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=crash_report.yml) form instead. It asks for the logs a crash needs. + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. - type: checkboxes attributes: @@ -47,7 +49,7 @@ body: id: os_type attributes: label: "Operating System (OS)" - description: "What OSes are you are experiencing issues on?" + description: "What OSes are you experiencing issues on?" multiple: true options: - Linux @@ -86,7 +88,7 @@ body: id: reproduce_steps attributes: label: How to reproduce - description: Please described the detailed steps to reproduce this issue + description: Please describe the detailed steps to reproduce this issue placeholder: | 1. Go to '...' 2. Click on '...' @@ -108,28 +110,23 @@ body: description: What should happen after the above steps? validations: required: true - - type: markdown - id: file_required - attributes: - value: | - Please be sure to add the following files: - * Please upload a ZIP archive containing the **project file** used when the problem arise. Please export it just before or after the problem occurs. Even if you did nothing and/or there is no object, export it! (We need the configurations in project file). - You can export the project file from the application menu in `File`->`Save project as...`, then zip it - * A **log file** for crashes and similar issues. - You can find your log file here: - Windows: `%APPDATA%\OrcaSlicer\log` or usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` - MacOS: `$HOME/Library/Application Support/OrcaSlicer/log` - Linux: `$HOME/.config/OrcaSlicer/log` - If Orca Slicer still starts, you can also reach this directory from the application menu in `Help` -> `Show Configuration Folder` - You can zip the log directory, or just select the newest logs when this issue happens, and zip them - type: textarea id: file_uploads attributes: label: Project file & Debug log uploads - description: Drop the project file and debug log here + description: | + Attach the files with the **Paste, drop, or click to add files** control directly underneath this box. Zip anything that is not a `.log`, `.txt` or image, since GitHub rejects other file types, and keep each file under 25 MB. + + * The **project file** used when the problem happened, zipped. Export it just before or after the problem occurs. Even if you did nothing and there is no object on the plate, export it, since we need the configuration it carries. `File` -> `Save project as...` + * The **log folder**, zipped. `Help` -> `Show Configuration Folder` opens it, or find it at: + * Windows: `%APPDATA%\OrcaSlicer\log`, usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` + * macOS: `$HOME/Library/Application Support/OrcaSlicer/log` + * Linux: `$HOME/.config/OrcaSlicer/log` + * Flatpak: `$HOME/.var/app/com.orcaslicer.OrcaSlicer/config/OrcaSlicer/log` + * If the zip comes out over 25 MB, attach the newest logs from that folder on their own instead. placeholder: | - Project File: `File` -> `Save project as...` then zip it & drop it here - Log File: `Help` -> `Show Configuration Folder`, then zip the log directory, or just select the newest logs in `log` when this issue happens and zip them, then drop the zip file here + Zipped project file + Zipped log folder validations: required: true - type: checkboxes @@ -144,7 +141,5 @@ body: label: Anything else? description: | Screenshots? References? Anything that will give us more context about the issue you are encountering! - - Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. validations: required: false diff --git a/.github/ISSUE_TEMPLATE/crash_report.yml b/.github/ISSUE_TEMPLATE/crash_report.yml new file mode 100644 index 0000000000..bcbee11d36 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/crash_report.yml @@ -0,0 +1,183 @@ +name: 💥 Crash Report +description: Orca Slicer closes on its own, freezes or stops responding +labels: ["crash"] +body: + - type: markdown + attributes: + value: | + **Thank you for taking the time to report a crash.** + + Use this form when Orca Slicer closes on its own, freezes, or stops responding. + If the application stays open and only produces a wrong result, please use the [Bug report](https://github.com/OrcaSlicer/OrcaSlicer/issues/new?assignees=&labels=&projects=&template=bug_report.yml) form instead. + A printer whose toolhead collides with the print is also a bug report rather than a crash, since the application itself did not stop. + + Before filing, please check if the issue already exists (either open or closed) by using the search bar on the issues page. If it does, comment there. Even if it's closed, we can reopen it based on your comment. + - type: checkboxes + attributes: + label: Is this crash reproducible in the latest nightly build? + description: > + Please verify this crash still happens in the latest nightly build first. It may already be fixed there: + [Nightly builds](https://github.com/OrcaSlicer/OrcaSlicer/releases/tag/nightly-builds). + options: + - label: I have checked the latest nightly build and the crash is still reproducible + required: true + - type: checkboxes + attributes: + label: Is there an existing issue for this crash? + description: Please search to see if an issue already exists for the crash you encountered. + options: + - label: I have searched the existing issues + required: true + - type: input + id: version + attributes: + label: OrcaSlicer Version + description: Which version of Orca Slicer are you running? You can see the full version in `Help` -> `About Orca Slicer`. + placeholder: e.g. 2.5.0 + validations: + required: true + - type: input + id: working_version + attributes: + label: Regression compared to a previous version + description: Did it work in a previous version? + placeholder: e.g. 2.3.2 + validations: + required: false + - type: dropdown + id: os_type + attributes: + label: "Operating System (OS)" + description: "What OSes are you seeing the crash on?" + multiple: true + options: + - Linux + - macOS + - Windows + validations: + required: true + - type: input + id: os_version + attributes: + label: "OS Version" + description: "What OS version does this relate to?" + placeholder: "i.e. OS: Windows 7/8/10/11 ..., Ubuntu 22.04/Fedora 36 ..., macOS 10.15/11.1/12.3 ..." + validations: + required: true + - type: input + id: printer + attributes: + label: Printer + description: Which printer was selected + placeholder: Voron 2.4/VzBot/Prusa MK4/Bambu Lab X1 series/Bambu Lab P1P/... + validations: + required: true + - type: dropdown + id: crash_moment + attributes: + label: When does the crash happen? + description: Pick the point where Orca Slicer stops working. + options: + - Not sure + - On startup, before the main window appears + - When opening or importing a project or model + - While changing printer, filament or process settings + - While slicing + - In the 3D view, Preview or Assembly view + - When exporting G-code or sending a print to the printer + - On the Device tab, or connecting to a printer (camera, sync, login) + - While using a specific tool, dialog or calibration + - After resuming from sleep or changing monitors + - When closing the application + - No clear pattern + validations: + required: true + - type: dropdown + id: crash_frequency + attributes: + label: How often does it happen? + options: + - Not sure + - Every time + - Often, but not every time + - Rarely + - It only happened once + validations: + required: true + - type: dropdown + id: fresh_config + attributes: + label: Does it still crash with a fresh configuration? + description: > + Close Orca Slicer and rename your configuration folder (`%APPDATA%\OrcaSlicer` on Windows, + `$HOME/Library/Application Support/OrcaSlicer` on macOS, `$HOME/.config/OrcaSlicer` on Linux), + then start it again. Renaming keeps your settings, so you can put the folder back afterwards. + options: + - I have not tried this + - Yes, it still crashes + - No, the crash goes away + validations: + required: true + - type: textarea + id: reproduce_steps + attributes: + label: How to reproduce + description: Please describe the detailed steps that lead to the crash. + placeholder: | + 1. Go to '...' + 2. Click on '...' + 3. Scroll down to '...' + 4. Orca Slicer closes + validations: + required: true + - type: textarea + id: system_info + attributes: + label: Additional system information + description: > + Display card and driver version are worth adding for crashes on startup or in the 3D view. + CPU and memory are worth adding for crashes while slicing. + placeholder: | + CPU: 11th gen Intel r core tm i7-1185g7/AMD Ryzen 7 6800h/... + Memory: 32/16 GB... + Display Card: NVIDIA Quadro P400/... + validations: + required: false + - type: textarea + id: file_uploads + attributes: + label: Project file, logs and crash report uploads + description: | + A crash report without logs usually cannot be acted on. Attach the files with the **Paste, drop, or click to add files** control directly underneath this box. Zip anything that is not a `.log`, `.txt` or image, since GitHub rejects other file types, and keep each file under 25 MB. + + * The **project file** used when the crash happened, zipped. Export it just before or after the crash, even if the plate is empty, since we need the configuration it carries. `File` -> `Save project as...` + * The whole **log folder**, zipped rather than single files picked out of it. `Help` -> `Show Configuration Folder` opens it, or find it at: + * Windows: `%APPDATA%\OrcaSlicer\log`, usually `C:\Users\\AppData\Roaming\OrcaSlicer\log` + * macOS: `$HOME/Library/Application Support/OrcaSlicer/log` + * Linux: `$HOME/.config/OrcaSlicer/log` + * Flatpak: `$HOME/.var/app/com.orcaslicer.OrcaSlicer/config/OrcaSlicer/log` + * On Windows the crash itself is written to a separate `crash_*.log` in there, and that is the file we need most. If the zip comes out over 25 MB GitHub will refuse it, so attach the newest log and any `crash_*.log` on their own instead. + * The **operating system crash report**, on macOS and Linux, where Orca Slicer cannot write its own crash log. It is often the only record of where it died: + * macOS: Console.app -> Crash Reports, or `$HOME/Library/Logs/DiagnosticReports/`. The file starts with `OrcaSlicer` and ends in `.ips`. Zip it before attaching, GitHub does not accept `.ips` files. + * Linux: run `orca-slicer` from a terminal (Flatpak: `flatpak run com.orcaslicer.OrcaSlicer`) and paste everything it prints when it dies. On systemd systems `coredumpctl info orca-slicer` gives a backtrace. + placeholder: | + Zipped project file + Zipped log folder + Zipped macOS .ips crash report, or the terminal output on Linux + validations: + required: true + - type: checkboxes + id: file_checklist + attributes: + label: Checklist of files to include + options: + - label: Log folder + - label: Project file + - label: Operating system crash report (macOS and Linux) + - type: textarea + attributes: + label: Anything else? + description: | + Screenshots? References? Anything that will give us more context about the crash you are encountering! + validations: + required: false diff --git a/.github/workflows/build_all.yml b/.github/workflows/build_all.yml index 3de2a9184b..2357b1a5a4 100644 --- a/.github/workflows/build_all.yml +++ b/.github/workflows/build_all.yml @@ -14,6 +14,9 @@ on: - 'localization/**' - 'resources/**' - ".github/workflows/build_*.yml" + - ".github/workflows/unit_tests*.yml" + - 'build_win.bat' + - 'scripts/test_build_win.ps1' - 'scripts/build_preset_cache.*' - 'scripts/flatpak/**' - 'scripts/msix/**' @@ -30,9 +33,10 @@ on: - '**/CMakeLists.txt' - 'version.inc' - ".github/workflows/build_*.yml" + - ".github/workflows/unit_tests*.yml" - 'build_linux.sh' - - 'build_release_vs.bat' - - 'build_release_vs2022.bat' + - 'build_win.bat' + - 'scripts/test_build_win.ps1' - 'build_release_macos.sh' - 'scripts/build_preset_cache.*' - 'scripts/flatpak/**' @@ -56,6 +60,22 @@ concurrency: jobs: + # build_win.bat ships a test suite. Run it before the Windows builds. + check_build_script: + name: Windows build script tests + runs-on: windows-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + lfs: 'false' + + # Windows PowerShell rather than pwsh: the suite drives build_win.bat + # through cmd, and the two differ in how they quote native arguments. + - name: Run the build script test suite + shell: powershell + run: .\scripts\test_build_win.ps1 + build_linux: strategy: fail-fast: false @@ -81,14 +101,16 @@ jobs: # SELF_HOSTED skips arm64 (the self-hosted Windows server is x64-only). matrix: include: ${{ fromJSON(vars.SELF_HOSTED - && '[{"arch":"x64","os":"orca-win-server"}]' - || '[{"arch":"x64","os":"windows-latest"},{"arch":"arm64","os":"windows-11-arm"}]') }} + && '[{"arch":"x64","os":"orca-win-server","compiler":"clang"}]' + || '[{"arch":"x64","os":"windows-latest","compiler":"clang"},{"arch":"arm64","os":"windows-11-vs2026-arm","compiler":"clang"}]') }} + needs: check_build_script # Don't run scheduled builds on forks: - if: ${{ !cancelled() && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} + if: ${{ !cancelled() && needs.check_build_script.result == 'success' && (github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer') }} uses: ./.github/workflows/build_check_cache.yml with: os: ${{ matrix.os }} arch: ${{ matrix.arch }} + compiler: ${{ matrix.compiler }} build-deps-only: ${{ inputs.build-deps-only || false }} force-build: ${{ github.event_name == 'schedule' }} secrets: inherit @@ -149,7 +171,7 @@ jobs: if: ${{ !cancelled() && success() && !vars.SELF_HOSTED }} uses: ./.github/workflows/unit_tests.yml with: - os: windows-11-arm + os: windows-11-vs2026-arm artifact: ${{ github.sha }}-tests-windows-arm64 test-dir: build-arm64/tests unit_tests_macos_arm64: @@ -187,7 +209,7 @@ jobs: ./validator-bin/OrcaSlicer_profile_validator -p "${{ github.workspace }}/resources/profiles" -s -l 2 publish_test_results: name: Publish Test Results - needs: [unit_tests_linux_x86_64, unit_tests_linux_aarch64, unit_tests_windows_x64, unit_tests_windows_arm64, unit_tests_macos_arm64] + needs: [unit_tests_linux_x86_64, unit_tests_linux_aarch64, unit_tests_windows_x64, unit_tests_windows_arm64, unit_tests_macos_arm64, unit_tests_flatpak_x86_64, unit_tests_flatpak_aarch64] if: ${{ !cancelled() }} runs-on: ubuntu-latest steps: @@ -259,38 +281,148 @@ jobs: echo "date=$(date +'%Y%m%d')" >> $GITHUB_ENV echo "git_commit_hash=$git_commit_hash" >> $GITHUB_ENV shell: bash - # Manage flatpak-builder cache externally so PRs restore but never upload + - name: Compute the flatpak-builder cache key + id: fp_cache_key + run: echo "key=flatpak-builder-${{ matrix.variant.arch }}-${{ hashFiles('deps/**', 'scripts/flatpak/com.orcaslicer.OrcaSlicer.yml', 'scripts/flatpak/make_deps_tar.sh') }}" >> "$GITHUB_OUTPUT" + shell: bash + # Manage flatpak-builder cache externally so PRs restore but never upload. + # The compiler cache under it is keyed per run below, so it is left out. - name: Restore flatpak-builder cache if: github.event_name == 'pull_request' uses: actions/cache/restore@v6 with: - path: .flatpak-builder - key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.event.pull_request.base.sha }} + path: | + .flatpak-builder/* + !.flatpak-builder/ccache + key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- - name: Save/restore flatpak-builder cache if: github.event_name != 'pull_request' uses: actions/cache@v6 with: - path: .flatpak-builder - key: flatpak-builder-${{ matrix.variant.arch }}-${{ github.sha }} + path: | + .flatpak-builder/* + !.flatpak-builder/ccache + key: ${{ steps.fp_cache_key.outputs.key }} restore-keys: flatpak-builder-${{ matrix.variant.arch }}- + # Compiler cache for the OrcaSlicer module, as in build_orca.yml. Pull + # requests only restore it; every other run (main, release branches, the + # nightly, a dispatch) saves it. orca_deps stays on the state cache above. + - name: Name the compiler cache leg + run: | + leg="Flatpak-${{ matrix.variant.arch }}" + echo "CCACHE_LEG=$leg" >> "$GITHUB_ENV" + echo "CCACHE_ENTRY=ccache-$leg-${{ github.run_id }}-${{ github.run_attempt }}" >> "$GITHUB_ENV" + shell: bash + - name: Restore compiler cache + id: ccache_restore + uses: actions/cache/restore@v6 + with: + path: .flatpak-builder/ccache + key: ${{ env.CCACHE_ENTRY }} + restore-keys: ccache-${{ env.CCACHE_LEG }}- - name: Disable debug info for faster CI builds run: | sed -i '/^build-options:/a\ no-debuginfo: true\n strip: true' \ scripts/flatpak/com.orcaslicer.OrcaSlicer.yml shell: bash - - name: Inject git commit hash into Flatpak manifest + # flatpak-builder reuses a module from its cache when the definition and + # sources are unchanged, so a re-run of the same commit would skip the + # OrcaSlicer module and ship no test asset. A per-run value in that module's + # env keeps it rebuilding; orca_deps stays cached, and the compiler cache + # still serves the rebuild. + - name: Inject commit hash and flatpak-builder cache buster into Flatpak manifest + env: + flatpak_builder_cache_buster: ${{ github.run_id }}-${{ github.run_attempt }} run: | - sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n git_commit_hash: \"$git_commit_hash\"|}" \ + sed -i "/name: OrcaSlicer/{n;s|buildsystem: simple|buildsystem: simple\n build-options:\n env:\n flatpak_builder_cache_buster: \"$flatpak_builder_cache_buster\"\n git_commit_hash: \"$git_commit_hash\"|}" \ scripts/flatpak/com.orcaslicer.OrcaSlicer.yml shell: bash + # flatpak-builder's --ccache only wraps cc and gcc, and the manifest builds + # with clang, so CMake's launcher runs ccache instead; --ccache is still what + # mounts the cache directory into the sandbox. The settings go into that + # directory's own config file, which the sandbox reads too. + - name: Enable compiler cache + run: | + printf ' %s\n' \ + 'CMAKE_C_COMPILER_LAUNCHER: ccache' \ + 'CMAKE_CXX_COMPILER_LAUNCHER: ccache' > "$RUNNER_TEMP/ccache-env.yml" + sed -i "/^ git_commit_hash: /r $RUNNER_TEMP/ccache-env.yml" \ + scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + grep -q '^ CMAKE_CXX_COMPILER_LAUNCHER: ccache$' scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + mkdir -p .flatpak-builder/ccache + export CCACHE_DIR=$PWD/.flatpak-builder/ccache + ccache --set-config=max_size=3G + # The compiler is reinstalled every run, so its mtime means nothing. + ccache --set-config=compiler_check=content + # Headers a fresh checkout has just written, the few files that use + # __DATE__ or __TIME__, and the precompiled header, whose macros ccache + # cannot see. + ccache --set-config=sloppiness=pch_defines,time_macros,include_file_mtime,include_file_ctime + # Hash the includes the compiler reports instead of preprocessing every + # miss before compiling it. + ccache --set-config=depend_mode=true + # The restored directory carries the previous run's counters. + ccache -z + shell: bash + - name: Check the manifest keeps orca_deps cacheable + run: ./scripts/flatpak/check_manifest_cacheable.sh + shell: bash + - name: Pack deps/ for the Flatpak manifest + run: ./scripts/flatpak/make_deps_tar.sh + shell: bash - uses: flatpak/flatpak-github-actions/flatpak-builder@master with: bundle: OrcaSlicer-Linux-flatpak_${{ env.ver }}_${{ matrix.variant.arch }}.flatpak manifest-path: scripts/flatpak/com.orcaslicer.OrcaSlicer.yml - cache: false + # cache only turns on flatpak-builder --ccache; the caching itself is above. + cache: true + restore-cache: false + save-cache: false arch: ${{ matrix.variant.arch }} upload-artifact: false + # run-tests fires the module's build-only test-commands; keep-build-dirs + # retains the binaries for the packaging step below. + run-tests: true + keep-build-dirs: true + # The build has just touched everything it can use, so an object untouched + # for a week is dead, usually orphaned by a flag change. + - name: Compiler cache statistics + if: always() + run: | + export CCACHE_DIR=$PWD/.flatpak-builder/ccache + ccache --evict-older-than 7d + ccache -s -v || ccache -s + shell: bash + # Save the new entry first, then drop the older ones for this leg on this + # ref, so a failed save leaves the previous entry in place. A cancelled or + # failed build saves too, since what it compiled is still valid; a restore + # that did not finish does not, since the directory may be a truncated copy. + - name: Save compiler cache + id: ccache_save + if: ${{ always() && steps.ccache_restore.outcome == 'success' && github.event_name != 'pull_request' }} + uses: actions/cache/save@v6 + with: + path: .flatpak-builder/ccache + key: ${{ env.CCACHE_ENTRY }} + - name: Drop older compiler cache entries + if: ${{ always() && steps.ccache_save.outcome == 'success' }} + # The container has no gh, so this is the list and delete over the REST API. + # Older means a lower run id, so two runs finishing close together keep + # the newer entry whichever of them cleans up last. + continue-on-error: true + env: + GH_TOKEN: ${{ github.token }} + run: | + api="$GITHUB_API_URL/repos/$GITHUB_REPOSITORY/actions/caches" + curl -sSf -H "Authorization: Bearer $GH_TOKEN" \ + "$api?ref=$GITHUB_REF&key=ccache-$CCACHE_LEG-&per_page=100" \ + | jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \ + '.actions_caches[] | select((.key | ltrimstr($prefix) | split("-")[0] | tonumber?) < $run) | .id' \ + | while read -r id; do + curl -sSf -X DELETE -H "Authorization: Bearer $GH_TOKEN" "$api/$id" + done + shell: bash - name: Upload artifacts Flatpak uses: actions/upload-artifact@v7 with: @@ -306,3 +438,46 @@ jobs: asset_name: OrcaSlicer-Linux-flatpak_nightly${{ env.nightly_suffix }}_${{ matrix.variant.arch }}.flatpak asset_content_type: application/octet-stream max_releases: 1 # optional, if there are more releases than this matching the asset_name, the oldest ones are going to be deleted + # The asset is /app (the exes link it at runtime) plus the build tree + # slimmed to what ctest needs. + - name: Package flatpak test asset + shell: bash + run: | + d=$(ls -d .flatpak-builder/build/OrcaSlicer-* | tail -1) + find "$d/build_flatpak" -mindepth 1 -maxdepth 1 ! -name tests -exec rm -rf {} + + # Strip debug info (the SDK builds with -g, only the app gets stripped); + # the bounds checks are compiled in, so a stripped exe still catches them. + find "$d/build_flatpak/tests" -type f -perm -u+x -exec strip --strip-unneeded {} + 2>/dev/null || true + # At runtime the tests read tests/ (TEST_DATA_DIR), scripts/, and under + # resources/ the shipped profiles (PROFILES_DIR) and the printers/ maps. + find "$d" -mindepth 1 -maxdepth 1 -type d \ + ! -name tests ! -name build_flatpak ! -name scripts ! -name resources -exec rm -rf {} + + find "$d/resources" -mindepth 1 -maxdepth 1 ! -name profiles ! -name printers -exec rm -rf {} + + tar -cf flatpak-test-asset.tar flatpak_app "$d" + - name: Upload flatpak test asset + uses: actions/upload-artifact@v7 + with: + name: ${{ github.sha }}-flatpak-tests-${{ matrix.variant.arch }} + path: flatpak-test-asset.tar + retention-days: 1 + # keep-build-dirs would otherwise land in the flatpak-builder cache saved post-job. + - name: Drop the kept build dirs before the flatpak-builder cache saves + if: always() + shell: bash + run: rm -rf .flatpak-builder/build + unit_tests_flatpak_x86_64: + name: Flatpak x86_64 + needs: flatpak + if: ${{ !cancelled() && success() }} + uses: ./.github/workflows/unit_tests_flatpak.yml + with: + os: ubuntu-24.04 + artifact: ${{ github.sha }}-flatpak-tests-x86_64 + unit_tests_flatpak_aarch64: + name: Flatpak aarch64 + needs: flatpak + if: ${{ !cancelled() && success() }} + uses: ./.github/workflows/unit_tests_flatpak.yml + with: + os: ubuntu-24.04-arm + artifact: ${{ github.sha }}-flatpak-tests-aarch64 diff --git a/.github/workflows/build_check_cache.yml b/.github/workflows/build_check_cache.yml index b5c5b28b95..2da05e1d69 100644 --- a/.github/workflows/build_check_cache.yml +++ b/.github/workflows/build_check_cache.yml @@ -9,6 +9,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc build-deps-only: required: false type: boolean @@ -33,11 +37,12 @@ jobs: - name: set outputs id: set_outputs env: - # Keep macOS/Windows cache keys architecture-specific. amd64 Linux passes - # no arch (key stays 'linux-clang', preserving the existing cache); - # aarch64 gets its own 'linux-clang-aarch64' key. - cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}', inputs.arch) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }} - # ARM64 builds use the build-arm64 tree (see build_release_vs.bat); x64/other use build. + # Anything that changes how the tree is built belongs in the key, or a job + # restores one it cannot use. Linux amd64 passes no arch deliberately, so + # 'linux-clang' keeps the cache it already has. + cache-os: ${{ runner.os == 'macOS' && format('macos-{0}', inputs.arch) || (runner.os == 'Windows' && format('windows-{0}-{1}', inputs.arch, inputs.compiler) || format('linux-clang{0}', inputs.arch && format('-{0}', inputs.arch) || '')) }} + # The Windows ARM64 deps build in build-arm64, all others under build; + # build_deps.yml and build_orca.yml pass the Windows directory to build_win.bat. dep-folder-name: ${{ runner.os == 'macOS' && format('/{0}', inputs.arch) || (runner.os == 'Windows' && inputs.arch == 'arm64') && '-arm64/OrcaSlicer_dep' || '/OrcaSlicer_dep' }} output-cmd: ${{ runner.os == 'Windows' && '$env:GITHUB_OUTPUT' || '"$GITHUB_OUTPUT"'}} run: | @@ -62,6 +67,7 @@ jobs: valid-cache: ${{ needs.check_cache.outputs.valid-cache == 'true' }} os: ${{ inputs.os }} arch: ${{ inputs.arch }} + compiler: ${{ inputs.compiler }} build-deps-only: ${{ inputs.build-deps-only }} force-build: ${{ inputs.force-build }} secrets: inherit diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index 9927f5bef6..a6d7a17dff 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -16,6 +16,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc build-deps-only: required: false type: boolean @@ -134,14 +138,11 @@ jobs: if (-not "${{ vars.SELF_HOSTED }}") { choco install strawberryperl } - $arch = "${{ inputs.arch }}" - if ($arch -eq "arm64") { - .\build_release_vs.bat deps arm64 - .\build_release_vs.bat pack arm64 - } else { - .\build_release_vs.bat deps - .\build_release_vs.bat pack - } + # cache-path is the install directory inside the deps build directory. + $deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/') + # -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator. + $flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" } + .\build_win.bat -d --arch ${{ inputs.arch }} --deps-dir $deps @flags shell: pwsh - name: Build on Mac ${{ inputs.arch }} @@ -149,9 +150,9 @@ jobs: working-directory: ${{ github.workspace }} run: | if [ -z "${{ vars.SELF_HOSTED }}" ]; then - brew install automake texinfo libtool + brew install automake texinfo libtool pkgconf yasm nasm fi - ./build_release_macos.sh -dx ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 + ./build_release_macos.sh -dx ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a ${{ inputs.arch }} -t 10.15 (cd "${{ github.workspace }}/deps/build/${{ inputs.arch }}" && \ find . -mindepth 1 -maxdepth 1 ! -name 'OrcaSlicer_dep' -exec rm -rf {} +) @@ -204,4 +205,5 @@ jobs: cache-path: ${{ inputs.cache-path }} os: ${{ inputs.os }} arch: ${{ inputs.arch }} + compiler: ${{ inputs.compiler }} secrets: inherit diff --git a/.github/workflows/build_orca.yml b/.github/workflows/build_orca.yml index 112c0b279b..53444ee16d 100644 --- a/.github/workflows/build_orca.yml +++ b/.github/workflows/build_orca.yml @@ -13,6 +13,10 @@ on: arch: required: false type: string + compiler: + required: false + type: string + default: msvc macos-combine-only: required: false type: boolean @@ -72,6 +76,69 @@ jobs: if (-not (Test-Path "$cmakeBin\cmake.exe")) { throw "cmake.exe not found at $cmakeBin" } Add-Content -Path $env:GITHUB_PATH -Value $cmakeBin + # Compiler cache. Pushes save it, so main keeps it warm; pull requests + # restore it and discard what they compiled. Objects are keyed on the + # preprocessed source, the compiler and the flags, so a leg only ever + # hits its own entries. A failed install costs the caching, not the build. + - name: Name the compiler cache leg + if: ${{ !inputs.macos-combine-only }} + shell: bash + run: | + leg="${{ runner.os }}-${{ inputs.arch || 'amd64' }}${{ runner.os == 'Windows' && format('-{0}', inputs.compiler) || '' }}" + # clang-cl refuses a precompiled header from another cl.exe build and ccache + # does not hash that build, so each one gets its own cache. The build number + # is read from cl.exe itself; the toolset directory keeps its name across patches. + if [ "${{ runner.os }}" = Windows ]; then + vswhere='/c/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe' + toolset=$(tr -d '\r\n' < "$("$vswhere" -latest -products '*' -find 'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt' | tr -d '\r')") + cl=$("$vswhere" -latest -products '*' -find 'VC\Tools\MSVC\'"$toolset"'\**\cl.exe' | tr -d '\r' | head -1) + leg="$leg-vc$("$cl" 2>&1 | grep -o -E 'Version [0-9.]+' | cut -d' ' -f2)" + fi + echo "CCACHE_LEG=$leg" >> "$GITHUB_ENV" + echo "CCACHE_ENTRY=ccache-$leg-${{ github.run_id }}-${{ github.run_attempt }}" >> "$GITHUB_ENV" + + # The action only installs and configures ccache. Restore and save go + # through actions/cache with one path string, since the cache service + # only matches entries saved under the identical path and the action + # spells it differently on Windows. + - name: Compiler cache + id: ccache + if: ${{ !inputs.macos-combine-only }} + continue-on-error: true + uses: hendrikmuhs/ccache-action@v1.2.24 + with: + key: ${{ env.CCACHE_LEG }} + max-size: 3G + restore: false + save: false + # ccache -s runs as its own step; no summary table per job. + job-summary: '' + + - name: Restore compiler cache + id: ccache_restore + if: ${{ steps.ccache.outcome == 'success' }} + uses: actions/cache/restore@v6 + with: + path: ${{ github.workspace }}/.ccache + key: ${{ env.CCACHE_ENTRY }} + restore-keys: ccache-${{ env.CCACHE_LEG }}- + + - name: Enable compiler cache + if: ${{ steps.ccache.outcome == 'success' }} + shell: bash + run: | + echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" + echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> "$GITHUB_ENV" + # Headers a fresh checkout has just written, the few files that + # use __DATE__ or __TIME__, and the precompiled header, whose + # macros ccache cannot see. + echo "CCACHE_SLOPPINESS=pch_defines,time_macros,include_file_mtime,include_file_ctime" >> "$GITHUB_ENV" + # Hash the includes the compiler reports instead of preprocessing + # every miss before compiling it. + echo "CCACHE_DEPEND=1" >> "$GITHUB_ENV" + # The restored directory carries the previous run's counters. + ccache -z + - name: Get the version and date on Ubuntu and macOS if: runner.os != 'Windows' run: | @@ -145,7 +212,7 @@ jobs: env: ORCA_TESTS_BUILD_ONLY: ${{ inputs.arch == 'arm64' && '1' || '' }} run: | - ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a ${{ inputs.arch }} -t 10.15 ${{ inputs.arch == 'arm64' && '-T' || '' }} + ./build_release_macos.sh -s -n -x ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a ${{ inputs.arch }} -t 10.15 ${{ inputs.arch == 'arm64' && '-T' || '' }} - name: Pack unit tests mac if: runner.os == 'macOS' && !inputs.macos-combine-only && inputs.arch == 'arm64' @@ -204,7 +271,7 @@ jobs: if: runner.os == 'macOS' && inputs.macos-combine-only working-directory: ${{ github.workspace }} run: | - ./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-1' || '' }} -a universal -t 10.15 + ./build_release_macos.sh -u -x ${{ !vars.SELF_HOSTED && '-j 3' || '' }} -a universal -t 10.15 # Thanks to RaySajuuk, it's working now - name: Sign app and notary @@ -392,10 +459,13 @@ jobs: # env: # WindowsSdkDir: 'C:\Program Files (x86)\Windows Kits\10\' # WindowsSDKVersion: '10.0.26100.0\' - # "tests" builds the unit tests too; the unit_tests_windows_* jobs run them. + # --tests builds the unit tests too; the unit_tests_windows_* jobs run them. run: | - $arch = "${{ inputs.arch }}" - if ($arch -eq "arm64") { .\build_release_vs.bat slicer arm64 tests } else { .\build_release_vs.bat slicer tests } + # cache-path is the install directory inside the deps build directory. + $deps = (Split-Path "${{ inputs.cache-path }}").Replace('\', '/') + # -l compiles with Visual Studio's clang-cl and -x builds with Ninja; --msvc --msbuild is cl under the Visual Studio generator. + $flags = if ("${{ inputs.compiler }}" -eq "clang") { "-l", "-x" } else { "--msvc", "--msbuild" } + .\build_win.bat -s --tests -i --arch ${{ inputs.arch }} --build-dir $env:BUILD_DIR --deps-dir $deps @flags shell: pwsh - name: Build system preset cache (Windows) @@ -615,6 +685,18 @@ jobs: name: OrcaSlicer_profile_validator_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} path: './build/src/Release/OrcaSlicer_profile_validator' + # generate_system_cache is what scripts/build_preset_cache.sh bakes the + # .opc caches with; it was already built by the "Build system + # preset cache (Linux)" step above. The .opc format is 64-bit + # little-endian native, i.e. identical across every platform Orca ships, + # so only the Linux binary is published. + - name: Upload generate_system_cache Ubuntu + if: ${{ ! env.ACT && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} + uses: actions/upload-artifact@v7 + with: + name: generate_system_cache_Linux_ubuntu_${{ env.ubuntu-ver }}_${{ env.ver }} + path: './build/src/dev-utils/Release/generate_system_cache' + - name: Deploy Ubuntu release if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && env.deploy_nightly == 'true' && runner.os == 'Linux' && !vars.SELF_HOSTED }} uses: WebFreak001/deploy-nightly@v3.2.0 @@ -645,6 +727,17 @@ jobs: asset_content_type: application/octet-stream max_releases: 1 + - name: Deploy Ubuntu generate_system_cache release + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} + uses: WebFreak001/deploy-nightly@v3.2.0 + with: + upload_url: https://uploads.github.com/repos/OrcaSlicer/OrcaSlicer/releases/137995723/assets{?name,label} + release_id: 137995723 + asset_path: ./build/src/dev-utils/Release/generate_system_cache + asset_name: generate_system_cache_Linux${{ env.ubuntu-ver-str }}_nightly + asset_content_type: application/octet-stream + max_releases: 1 + - name: Deploy orca_custom_preset_tests if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' && ! env.ACT && github.ref == 'refs/heads/main' && runner.os == 'Linux' && !vars.SELF_HOSTED && inputs.arch != 'aarch64' }} uses: WebFreak001/deploy-nightly@v3.2.0 @@ -655,3 +748,41 @@ jobs: asset_name: orca_custom_preset_tests.zip asset_content_type: application/octet-stream max_releases: 1 + + # The build has just touched everything it can use, so an object + # untouched for a week is dead, usually orphaned by a flag change. + - name: Compiler cache statistics + if: ${{ always() && steps.ccache.outcome == 'success' }} + shell: bash + run: | + ccache --evict-older-than 7d + ccache -s -v || ccache -s + + # Entries are immutable, so the new one is saved first and the older + # ones for this leg on this ref are dropped afterwards: a failed save + # leaves the previous entry in place. A cancelled or failed build saves + # too, since what it compiled is still valid; a restore that did not + # finish does not, since the directory may be a truncated copy. + - name: Save compiler cache + id: ccache_save + if: ${{ always() && steps.ccache_restore.outcome == 'success' && github.event_name != 'pull_request' }} + uses: actions/cache/save@v6 + with: + path: ${{ github.workspace }}/.ccache + key: ${{ env.CCACHE_ENTRY }} + + - name: Drop older compiler cache entries + if: ${{ always() && steps.ccache_save.outcome == 'success' }} + # A read-only token (fork PRs) cannot delete; that only costs storage. + # Older means a lower run id, so two runs finishing close together keep + # the newer entry whichever of them cleans up last. + continue-on-error: true + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + gh cache list --ref "$GITHUB_REF" --key "ccache-$CCACHE_LEG-" --limit 100 --json id,key \ + | jq -r --arg prefix "ccache-$CCACHE_LEG-" --argjson run "$GITHUB_RUN_ID" \ + '.[] | select((.key | ltrimstr($prefix) | split("-")[0] | tonumber?) < $run) | .id' \ + | tr -d '\r' \ + | while read -r id; do gh cache delete "$id"; done diff --git a/.github/workflows/check_profiles.yml b/.github/workflows/check_profiles.yml index db3ae6c4e8..e668482bfd 100644 --- a/.github/workflows/check_profiles.yml +++ b/.github/workflows/check_profiles.yml @@ -9,6 +9,11 @@ on: - release/* paths: - 'resources/profiles/**' + # orca_profile_tool.py also validates resources/printers/bambu_filament_ids.json, and + # both it and its tests live in scripts/, so a PR touching only those must still run + # this workflow. + - 'resources/printers/**' + - 'scripts/**' - ".github/workflows/check_profiles.yml" workflow_dispatch: @@ -32,12 +37,23 @@ jobs: - name: Checkout repository uses: actions/checkout@v7 - - name: Run extra JSON check - id: extra_json_check + # Deliberately not continue-on-error, unlike every check below: if the tool itself is + # broken, nothing it then reports about the profiles is worth reading. + - name: Run the profile tool's own unit tests + run: python3 -m unittest discover -s scripts/tests -t scripts + + # What the validator below cannot see. It loads the tree the way the slicer does, so + # it never notices a profile no .json indexes, a preset name two files claim, + # an id that is not the mint of its own triple, or a file that normalize and + # update-index would still rewrite. + # The step id is the handle the PR comment and the failure gate below use; renaming it + # silently disables them. + - name: Check profiles (orca_profile_tool.py) + id: profile_tool continue-on-error: true run: | set +e - python3 ./scripts/orca_extra_profile_check.py 2>&1 | tee ${{ runner.temp }}/extra_json_check.log + python3 ./scripts/orca_profile_tool.py check 2>&1 | tee ${{ runner.temp }}/profile_tool.log exit ${PIPESTATUS[0]} # download @@ -64,13 +80,14 @@ jobs: set +e ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -s -l 2 2>&1 | tee ${{ runner.temp }}/validate_slice.log exit ${PIPESTATUS[0]} - # For now run filament subtype check only for BBL profiles until we fix other vendors' profiles. - - name: validate filament subtype check for BBL profiles + # All vendors' filament_id collisions were fixed, so the duplicate-filament-subtype + # check runs tree-wide. + - name: validate filament subtype check id: validate_filament_subtypes continue-on-error: true run: | set +e - ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 -v BBL -f 2>&1 | tee ${{ runner.temp }}/validate_filament_subtypes.log + ./OrcaSlicer_profile_validator -p ${{ github.workspace }}/resources/profiles -l 2 -f 2>&1 | tee ${{ runner.temp }}/validate_filament_subtypes.log exit ${PIPESTATUS[0]} - name: validate custom presets @@ -181,7 +198,7 @@ jobs: echo "${{ github.event.pull_request.number }}" > ${{ runner.temp }}/profile-check-results/pr_number.txt - name: Prepare comment artifact - if: ${{ always() && github.event_name == 'pull_request' && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + if: ${{ always() && github.event_name == 'pull_request' && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | { # Marker matched by check_profiles_comment.yml to delete prior comments. @@ -189,11 +206,11 @@ jobs: echo "## :x: Profile Validation Errors" echo "" - if [ "${{ steps.extra_json_check.outcome }}" = "failure" ]; then - echo "### Extra JSON Check Failed" + if [ "${{ steps.profile_tool.outcome }}" = "failure" ]; then + echo "### Profile Check Failed (orca_profile_tool.py)" echo "" echo '```' - head -c 30000 ${{ runner.temp }}/extra_json_check.log || echo "No output captured" + head -c 30000 ${{ runner.temp }}/profile_tool.log || echo "No output captured" echo '```' echo "" fi @@ -217,7 +234,7 @@ jobs: fi if [ "${{ steps.validate_filament_subtypes.outcome }}" = "failure" ]; then - echo "### BBL Filament Subtype Validation Failed" + echo "### Filament Subtype Validation Failed" echo "" echo '```' head -c 30000 ${{ runner.temp }}/validate_filament_subtypes.log || echo "No output captured" @@ -235,7 +252,7 @@ jobs: fi echo "---" - echo "*Please fix the above errors and push a new commit.*" + echo '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*' } > ${{ runner.temp }}/profile-check-results/pr_comment.md - name: Upload comment artifact @@ -247,7 +264,8 @@ jobs: retention-days: 1 - name: Fail if any check failed - if: ${{ always() && (steps.extra_json_check.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} + if: ${{ always() && (steps.profile_tool.outcome == 'failure' || steps.validate_system.outcome == 'failure' || steps.validate_slice.outcome == 'failure' || steps.validate_filament_subtypes.outcome == 'failure' || steps.validate_custom.outcome == 'failure') }} run: | - echo "One or more profile checks failed. See above for details." + echo "One or more profile checks failed; see the step logs above." + echo 'Reproduce the whole run locally with scripts/check_profile.sh (scripts\check_profile.bat on Windows).' exit 1 diff --git a/.github/workflows/doxygen-docs.yml b/.github/workflows/doxygen-docs.yml index 6af7255fa3..d7d2f982e7 100644 --- a/.github/workflows/doxygen-docs.yml +++ b/.github/workflows/doxygen-docs.yml @@ -19,11 +19,18 @@ jobs: permissions: contents: read steps: - - uses: thejerrybao/setup-swap-space@v1 - with: - swap-space-path: /swapfile - swap-size-gb: 8 - remove-existing-swap-files: true + # Doxygen with call graphs over all of src/ outgrows the runner's RAM; + # replace the runner's swapfile with an 8 GB one. + - name: Grow swap space + run: | + set -euo pipefail + sudo swapoff -a + sudo rm -f /swapfile + sudo fallocate -l 8G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + free -h - name: Checkout repository uses: actions/checkout@v7 diff --git a/.github/workflows/parity_nightly.yml b/.github/workflows/parity_nightly.yml new file mode 100644 index 0000000000..79f5c9b514 --- /dev/null +++ b/.github/workflows/parity_nightly.yml @@ -0,0 +1,219 @@ +# Nightly parity checks from OrcaSlicer/orca-test-repo, kept out of the +# per-build "Run external slicer regression tests" step because they take far +# longer than that step's budget: +# effect - the CLI override sweep's full effect stage: every landed option +# re-sliced on its own to see whether it changes the G-code +# harness - the GUI-vs-CLI parity harness (metrics only, never fails) +# Both test the latest successful build_all.yml Linux AppImage from main, with +# sources checked out at the commit that build was made from. Nothing here +# gates a build or a PR. +name: Parity Nightly + +on: + schedule: + # build_all.yml starts at 17:00 UTC and has finished by ~20:00 + - cron: "0 21 * * *" + workflow_dispatch: + inputs: + test_repo_ref: + description: "orca-test-repo ref to run" + required: false + default: "main" + build_branch: + description: "branch whose latest successful build_all artifact to test" + required: false + default: "main" + fixtures: + description: "harness fixture ids, space-separated (empty = all)" + required: false + default: "" + cli_presets: + description: "harness lane C presets: flat = flatten inherits first, raw = leaf profile as-is" + required: false + default: "flat" + +permissions: + contents: read + actions: read + +jobs: + build: + name: Find the build to test + # Don't run scheduled checks on forks + if: github.event_name != 'schedule' || github.repository == 'OrcaSlicer/OrcaSlicer' + runs-on: ubuntu-24.04 + outputs: + run_id: ${{ steps.find.outputs.run_id }} + head_sha: ${{ steps.find.outputs.head_sha }} + steps: + - id: find + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + run: | + set -euo pipefail + gh run list --workflow build_all.yml \ + --branch "${{ inputs.build_branch || 'main' }}" \ + --status success --limit 1 --json databaseId,headSha \ + --jq '"run_id=\(.[0].databaseId)\nhead_sha=\(.[0].headSha)"' \ + >> "$GITHUB_OUTPUT" + cat "$GITHUB_OUTPUT" + + effect: + name: Override sweep effect stage (shard ${{ matrix.shard }}) + needs: build + runs-on: ubuntu-24.04 + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + # orca-test-repo's parity/effect_routing.json holds a 2-way split, + # ~12.5 min a shard on this runner + shard: [0, 1] + steps: + - &checkout-suite + name: Check out the test suite + uses: actions/checkout@v7 + with: + repository: OrcaSlicer/orca-test-repo + ref: ${{ inputs.test_repo_ref || 'main' }} + path: orca-test-repo + + # The AppImage ships only packed preset caches, so profiles and the CLI + # option surface come from the sources the build was made from + - &checkout-slicer + name: Check out OrcaSlicer at the build's commit + uses: actions/checkout@v7 + with: + ref: ${{ needs.build.outputs.head_sha }} + path: slicer + lfs: 'false' + + - &extract-appimage + name: Download and extract the Linux AppImage + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + run: | + set -euo pipefail + gh run download "${{ needs.build.outputs.run_id }}" --dir appimage \ + --pattern "OrcaSlicer_Linux_ubuntu_2404*" + appimage=$(find appimage -name "*.AppImage" ! -name "*aarch64*" | head -1) + [ -n "$appimage" ] || { echo "no x86_64 AppImage in run ${{ needs.build.outputs.run_id }}"; exit 1; } + chmod +x "$appimage" + "$appimage" --appimage-extract > /dev/null + # The bare binary cannot find the AppImage's bundled libraries; AppRun + # sets them up and execs it, so exit codes and signals pass through + [ -x squashfs-root/AppRun ] || { echo "no AppRun in the AppImage"; exit 1; } + echo "ORCA_BIN=$PWD/squashfs-root/AppRun" >> "$GITHUB_ENV" + echo "ORCA_SOURCE=$PWD/slicer" >> "$GITHUB_ENV" + + - name: Install the AppImage's host runtime dependencies + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + libopengl0 libglu1-mesa libgl1 libegl1 libwebkit2gtk-4.1-0 + + - uses: actions/setup-python@v6 + with: + python-version: "3.12" + + - name: Install suite dependencies + run: pip install -r orca-test-repo/requirements.txt + + - name: Run the override sweep with the full effect stage + id: run + continue-on-error: true + working-directory: orca-test-repo + run: | + set -o pipefail + # -rA keeps the per-stage summaries, which pytest otherwise swallows + # for passing tests + python -m pytest test_cli_overrides.py -c pytest.ini -v -rA \ + --effect-full --effect-shard ${{ matrix.shard }}/2 \ + --orca-bin "$ORCA_BIN" --orca-source "$ORCA_SOURCE" \ + 2>&1 | tee ../sweep.log + + - name: Publish job summary + if: always() + run: | + { + echo "## Override sweep effect stage, shard ${{ matrix.shard }}/2" + echo "Build ${{ needs.build.outputs.head_sha }} (run ${{ needs.build.outputs.run_id }})" + echo '```' + grep -E "\[override sweep" sweep.log || echo "no stage summaries, see the log" + grep -E "^=+ .*(passed|failed)" sweep.log | tail -1 || true + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + + - name: Upload the override report + if: always() + uses: actions/upload-artifact@v7 + with: + name: override-report-shard${{ matrix.shard }} + path: | + orca-test-repo/.pytest_cache/override_report.json + sweep.log + if-no-files-found: warn + retention-days: 30 + + # The sweep step continues on error so the summary and report still get + # published; this puts the failure back on the job + - name: Fail the job if the sweep failed + if: steps.run.outcome == 'failure' + run: | + echo "the override sweep failed, see the job summary and the uploaded report" >&2 + exit 1 + + harness: + name: GUI-vs-CLI parity harness + needs: build + runs-on: ubuntu-24.04 + timeout-minutes: 180 + steps: + - *checkout-suite + - *checkout-slicer + - *extract-appimage + + - name: Install display tooling and the AppImage's host runtime + run: | + sudo apt-get update + sudo apt-get install -y --no-install-recommends \ + xvfb xdotool imagemagick openbox mesa-utils \ + libopengl0 libglu1-mesa libgl1 libegl1 libwebkit2gtk-4.1-0 + + - name: Run the parity harness + run: | + set -euo pipefail + fixtures=() + for f in ${{ inputs.fixtures || '' }}; do + fixtures+=(--fixture "$f") + done + # 2 GUI displays: ~1.5 cores peak / ~1.9 GB on this 4-vCPU runner, + # and each fixture is fully isolated, so results match a serial run + python3 orca-test-repo/parity/run_parity.py \ + --slicer-root "$ORCA_SOURCE" --bin "$ORCA_BIN" \ + --cli-presets "${{ inputs.cli_presets || 'flat' }}" \ + --gui-workers 2 --out "$PWD/parity-out" "${fixtures[@]}" + + - name: Publish job summary + if: always() + run: | + if [ -f parity-out/report.md ]; then + cat parity-out/report.md >> "$GITHUB_STEP_SUMMARY" + else + echo "the harness produced no report, see the log" >> "$GITHUB_STEP_SUMMARY" + fi + + - name: Drop per-lane datadirs before upload + if: always() + run: rm -rf parity-out/*/seed parity-out/*/datadir-* || true + + - name: Upload the scorecard and evidence + if: always() + uses: actions/upload-artifact@v7 + with: + name: parity-scorecard + path: parity-out/ + if-no-files-found: warn + retention-days: 30 diff --git a/.github/workflows/post_merge_profiles.yml b/.github/workflows/post_merge_profiles.yml new file mode 100644 index 0000000000..469bb2a6c3 --- /dev/null +++ b/.github/workflows/post_merge_profiles.yml @@ -0,0 +1,253 @@ +name: Post-merge profiles + +# Push-triggered counterpart to check_profiles.yml (which only gates PRs). When a +# profile change lands on main or a release branch, rebuild the affected vendors' +# binary preset caches (.opc) and publish each as a versioned ZIP asset on +# a per-Orca-version release of the profiles repo. From there OrcaCloud's OTA +# Manager lists the asset, a maintainer attaches a changelog and hits Publish, and +# only then does it become a live OTA update - this workflow does none of that +# last part (no changelog, no R2, no webhook). +# +# Asset contract expected by OrcaCloud's release scanner: +# ^(\d+\.\d+\.\d+)_([^_]+)_(\d+(?:\.\d+){3})_(\d{12})\.zip$ +# ___.zip (zip root: .opc) +# +# Setup (App + secrets): docs/ota/post-merge-profiles-setup.md + +on: + push: + branches: + - main + - release/* + paths: + - 'resources/profiles/**' + - '.github/workflows/post_merge_profiles.yml' + + workflow_dispatch: + +permissions: + contents: read + +# One run per branch; let a run finish rather than cancel it, since it publishes. +concurrency: + group: post-merge-profiles-${{ github.ref }} + cancel-in-progress: false + +env: + # generate_system_cache is published to this repo's own nightly-builds release + # by build_orca.yml's Linux leg. The job guard pins github.repository to + # OrcaSlicer/OrcaSlicer, so this resolves there. + TOOL_REPO: ${{ github.repository }} + TOOL_ASSET: generate_system_cache_Linux_Ubuntu2404_nightly + # Where per-vendor ZIP assets are published; OrcaCloud's OTA reads this repo. + PROFILES_OWNER: OrcaSlicer + PROFILES_REPO: orcaslicer-profiles + +jobs: + publish_profile_caches: + name: Publish profile caches + if: ${{ github.repository == 'OrcaSlicer/OrcaSlicer' }} + # FOLDER_MERGERS is an environment-scoped variable, shared with the PR + # merge bot. Keep this environment free of protection rules so this + # push-triggered job does not wait for a reviewer. + environment: merge-delegation + runs-on: ubuntu-24.04 + steps: + - name: Checkout repository + uses: actions/checkout@v7 + with: + # Enough history to reach github.event.before for the changed-vendor + # diff on a normal push; deeper pushes fall back to HEAD^..HEAD in the + # step below. fetch-depth: 0 would clone all of OrcaSlicer's history. + fetch-depth: 50 + + - name: Resolve changed vendors + id: vendors + shell: bash + env: + FOLDER_MERGERS: ${{ vars.FOLDER_MERGERS }} + run: | + set -euo pipefail + base='${{ github.event.before }}' + head='${{ github.sha }}' + # Zero SHA (branch created / force push) or manual dispatch: fall back + # to this commit's own diff. + if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ] || ! git cat-file -e "$base^{commit}" 2>/dev/null; then + base="$head^" + fi + echo "Diffing $base..$head" + + mapfile -t candidates < <( + git diff --name-only "$base" "$head" -- resources/profiles \ + | sed -nE 's#^resources/profiles/([^/]+)/.*#\1#p; s#^resources/profiles/([^/]+)\.json$#\1#p' \ + | sort -u + ) + + vendors=() + for v in "${candidates[@]:-}"; do + [ -n "$v" ] || continue + json="resources/profiles/$v.json" + # A vendor has a manifest plus either a preset directory or a version + # field; this drops non-vendor files such as blacklist.json. + if [ -f "$json" ] && { [ -d "resources/profiles/$v" ] || jq -e '.version' "$json" >/dev/null 2>&1; }; then + vendors+=("$v") + fi + done + + if [ "${#vendors[@]}" -eq 0 ]; then + echo "No changed vendor profiles in this push; nothing to publish." + echo "vendors=" >> "$GITHUB_OUTPUT" + exit 0 + fi + + # A vendor is eligible only when both the profile directory and its + # sibling bundle JSON are covered by at least one FOLDER_MERGERS + # grant. The account part is intentionally ignored here: this is a + # post-merge safety check, not an authorization check for a command. + grants=() + while IFS= read -r raw_line; do + line="${raw_line#"${raw_line%%[![:space:]]*}"}" + line="${line%"${line##*[![:space:]]}"}" + [ -n "$line" ] || continue + [[ "$line" == \#* ]] && continue + [[ "$line" == *:* ]] || continue + + grant="${line#*:}" + grant="${grant#"${grant%%[![:space:]]*}"}" + grant="${grant%"${grant##*[![:space:]]}"}" + while [[ "$grant" == */ ]]; do grant="${grant%/}"; done + grants+=("$grant") + done <<< "${FOLDER_MERGERS:-}" + + is_granted() { + local path="$1" + local grant + for grant in "${grants[@]:-}"; do + if [[ "$path" == "$grant" || "$path" == "$grant/"* ]]; then + return 0 + fi + done + return 1 + } + + unauthorized=() + for v in "${vendors[@]}"; do + if ! is_granted "resources/profiles/$v" || ! is_granted "resources/profiles/$v.json"; then + unauthorized+=("$v") + fi + done + + if [ "${#unauthorized[@]}" -ne 0 ]; then + echo "Changed vendor profiles are not covered by FOLDER_MERGERS: ${unauthorized[*]}" + echo "No profile caches will be published for this push." + echo "vendors=" >> "$GITHUB_OUTPUT" + exit 0 + fi + + printf 'Changed vendors: %s\n' "${vendors[*]}" + echo "vendors=${vendors[*]}" >> "$GITHUB_OUTPUT" + + - name: Resolve Orca version + id: orca + if: steps.vendors.outputs.vendors != '' + shell: bash + run: | + set -euo pipefail + raw="$(sed -nE 's/^set\(SoftFever_VERSION "([^"]+)".*/\1/p' version.inc | head -1)" + [ -n "$raw" ] || { echo "::error::could not read SoftFever_VERSION from version.inc"; exit 1; } + orca_ver="${raw%%-*}" + if ! [[ "$orca_ver" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "::error::Orca version '$orca_ver' (from '$raw') is not X.Y.Z"; exit 1 + fi + # release_tag is what the desktop client sends as orca_version and what + # OrcaCloud keys R2 on; orca_ver (X.Y.Z) is the asset-name prefix. + echo "release_tag=$raw" >> "$GITHUB_OUTPUT" + echo "orca_ver=$orca_ver" >> "$GITHUB_OUTPUT" + echo "Orca version: release_tag=$raw asset_prefix=$orca_ver" + + - name: Validate profile versions + id: pver + if: steps.vendors.outputs.vendors != '' + shell: bash + run: | + set -euo pipefail + : > "$RUNNER_TEMP/pver.tsv" + for v in ${{ steps.vendors.outputs.vendors }}; do + pv="$(jq -r '.version // empty' "resources/profiles/$v.json")" + if ! [[ "$pv" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "::error::vendor $v version '${pv:-}' must be 4 numeric parts (A.B.C.D) for the OTA asset name; fix resources/profiles/$v.json" + exit 1 + fi + printf '%s\t%s\n' "$v" "$pv" >> "$RUNNER_TEMP/pver.tsv" + echo "$v -> $pv" + done + + - name: Download generate_system_cache + if: steps.vendors.outputs.vendors != '' + shell: bash + env: + # gh (with the default token) rather than an unauthenticated curl: keeps + # working if TOOL_REPO is ever private and avoids anonymous rate limits. + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + gh release download nightly-builds --repo "$TOOL_REPO" \ + --pattern "$TOOL_ASSET" --output generate_system_cache --clobber + chmod +x generate_system_cache + + - name: Build caches and package assets + id: pkg + if: steps.vendors.outputs.vendors != '' + shell: bash + run: | + set -euo pipefail + # One timestamp for the whole run so a multi-vendor merge groups together. + ts="$(date -u +%Y%m%d%H%M)" + orca_ver='${{ steps.orca.outputs.orca_ver }}' + out="$RUNNER_TEMP/assets" + mkdir -p "$out" + + for v in ${{ steps.vendors.outputs.vendors }}; do + ./generate_system_cache -p "$GITHUB_WORKSPACE/resources/profiles" -v "$v" -l 2 + opc="resources/profiles/$v.opc" + [ -f "$opc" ] || { echo "::error::$opc was not generated"; exit 1; } + pv="$(awk -F'\t' -v v="$v" '$1==v{print $2}' "$RUNNER_TEMP/pver.tsv")" + name="${orca_ver}_${v}_${pv}_${ts}.zip" + ( cd resources/profiles && zip -q -j "$out/$name" "$v.opc" ) + echo "packaged $name" + done + echo "dir=$out" >> "$GITHUB_OUTPUT" + + - name: Mint profiles-repo token + id: token + if: steps.vendors.outputs.vendors != '' + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.PROFILES_APP_ID }} + private-key: ${{ secrets.PROFILES_APP_PRIVATE_KEY }} + owner: ${{ env.PROFILES_OWNER }} + repositories: ${{ env.PROFILES_REPO }} + + - name: Publish assets to profiles release + if: steps.vendors.outputs.vendors != '' + shell: bash + env: + GH_TOKEN: ${{ steps.token.outputs.token }} + RELEASE_TAG: ${{ steps.orca.outputs.release_tag }} + ASSET_DIR: ${{ steps.pkg.outputs.dir }} + run: | + set -euo pipefail + repo="$PROFILES_OWNER/$PROFILES_REPO" + if ! gh release view "$RELEASE_TAG" --repo "$repo" >/dev/null 2>&1; then + echo "Creating release $RELEASE_TAG on $repo" + gh release create "$RELEASE_TAG" --repo "$repo" \ + --title "$RELEASE_TAG" --notes "Profile cache assets for Orca $RELEASE_TAG." \ + --latest=false + fi + # Asset names are timestamp-unique; a clash means a bug, so don't --clobber. + gh release upload "$RELEASE_TAG" --repo "$repo" "$ASSET_DIR"/*.zip + + { + echo "### Published to \`$repo\` release \`$RELEASE_TAG\`" + for f in "$ASSET_DIR"/*.zip; do echo "- \`$(basename "$f")\`"; done + } >> "$GITHUB_STEP_SUMMARY" diff --git a/.github/workflows/pr-label-bot.yml b/.github/workflows/pr-label-bot.yml index 1214db0776..fe74841831 100644 --- a/.github/workflows/pr-label-bot.yml +++ b/.github/workflows/pr-label-bot.yml @@ -32,13 +32,21 @@ jobs: } const allowedLabels = [ + // kind of change + 'crash', 'bug-fix', 'enhancement', - 'Localization', - 'profile', 'QoL', + 'optimization', + // area 'UI/UX', - 'dependencies' + 'profile', + 'Localization', + // infrastructure + 'build', + 'test', + 'dependencies', + 'documentation' ]; const pr = context.payload.pull_request; const labelsList = `${allowedLabels @@ -182,13 +190,21 @@ jobs: } const allowedLabels = [ + // kind of change + 'crash', 'bug-fix', 'enhancement', - 'Localization', - 'profile', 'QoL', + 'optimization', + // area 'UI/UX', - 'dependencies' + 'profile', + 'Localization', + // infrastructure + 'build', + 'test', + 'dependencies', + 'documentation' ]; const issue = context.payload.issue; diff --git a/.github/workflows/pr-merge-bot.yml b/.github/workflows/pr-merge-bot.yml index 9b5ff2dfaf..a2722f105e 100644 --- a/.github/workflows/pr-merge-bot.yml +++ b/.github/workflows/pr-merge-bot.yml @@ -12,6 +12,13 @@ name: PR Merge Bot # PR targets main or release/*, and CI is green on the head commit. Otherwise it # comments naming the files that fell outside the grant. # +# When a PR touching resources/profiles/** is opened, two labels are applied +# independently of the merge command: +# profile every changed path is inside resources/profiles/ +# orca profile partner the PR author holds a grant covering every changed +# path, plus a one-time comment explaining /bot merge +# Neither label changes what the merge command checks. +# # Grants come from the FOLDER_MERGERS variable in the `merge-delegation` # environment: one per line, `account: path`, `#` comments and blank lines # allowed. Paths may contain spaces. A vendor takes two grants, the folder and @@ -32,10 +39,18 @@ on: issue_comment: types: - created + # Labels profile PRs on open, without waiting for a /bot merge command. + pull_request_target: + types: + - opened + paths: + - 'resources/profiles/**' # One merge attempt per PR at a time, so two quick comments cannot race. +# Labels run under their own group, so a queued label run is not replaced by +# a merge run for the same PR. concurrency: - group: ${{ github.workflow }}-${{ github.event.issue.number }} + group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.event.issue.number || github.event.pull_request.number }} cancel-in-progress: false jobs: @@ -43,6 +58,7 @@ jobs: # Skips the job unless a PR comment mentions the command. if: >- github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'issue_comment' && github.event.issue.pull_request != null && contains(github.event.comment.body, '/bot merge') permissions: @@ -53,7 +69,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 10 # Supplies FOLDER_MERGERS. Must carry no protection rules, or every - # delegated merge would wait for a human reviewer. + # delegated merge and partner label run would wait for a human reviewer. environment: merge-delegation steps: - name: Merge PR on behalf of a folder delegate @@ -76,7 +92,6 @@ jobs: const ALLOWED_BASE_BRANCH = /^(?:main|release\/.+)$/; const MERGE_METHOD = 'squash'; const REQUIRED_CHECK = 'Check profiles'; // job name in check_profiles.yml - const MAX_CHANGED_FILES = 500; // policy cap, well under listFiles' 3000 const LISTFILES_CAP = 3000; const MAX_REPORTED_FILES = 12; const MERGEABLE_ATTEMPTS = 5; @@ -304,9 +319,6 @@ jobs: 'so the file list is truncated and I cannot verify the folder scope. A maintainer must merge this one.' ); } - if (pr.changed_files > MAX_CHANGED_FILES) { - return refuse(`it changes ${pr.changed_files} files; delegated merges are capped at ${MAX_CHANGED_FILES}.`); - } const deniedFiles = []; const outsideFiles = []; @@ -508,3 +520,392 @@ jobs: } catch (error) { core.warning(`Merged successfully, but dispatching build_all.yml failed: ${error.message}`); } + + label-profile: + # Independent of the merge rules: any PR that changes only files inside + # resources/profiles/ is labeled `profile`. + if: >- + github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'pull_request_target' + permissions: + contents: read + pull-requests: read + issues: write + runs-on: ubuntu-latest + timeout-minutes: 5 + steps: + - name: Label profile-only PRs + uses: actions/github-script@v9 + with: + script: | + function isPermissionDenied(error) { + return error && error.status === 403 && /Resource not accessible by integration/i.test(error.message || ''); + } + + const PROFILE_ROOT = 'resources/profiles/'; + const LABEL = 'profile'; + const LISTFILES_CAP = 3000; + const ATTEMPTS = 3; + + function profileOnlyProblem(pr, files) { + if (!files.length) { + return 'PR changes no files; not labeling.'; + } + // A truncated list, or a count that disagrees with the PR, cannot + // prove "only profile files". + if (files.length >= LISTFILES_CAP || files.length !== pr.changed_files) { + return `PR reports ${pr.changed_files} changed files but the API listed ${files.length}; not labeling.`; + } + + // Both endpoints of a rename count, so a move out of the profile + // root is not mistaken for a profile-only change. + const paths = files.flatMap((file) => [file.filename, file.previous_filename].filter(Boolean)); + const outside = paths.filter((path) => !path.startsWith(PROFILE_ROOT)); + + if (outside.length) { + return `${outside.length} changed path(s) fall outside ${PROFILE_ROOT}; not labeling.`; + } + + return null; + } + + const { owner, repo } = context.repo; + const number = context.payload.pull_request.number; + + // The event payload is frozen at `opened`; listFiles is not. Read + // fresh PR metadata and retry if either side of the diff changes. + for (let attempt = 0; attempt < ATTEMPTS; attempt += 1) { + const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: number }); + + if (pr.state !== 'open') { + core.info(`PR is ${pr.state}; not labeling.`); + return; + } + + const files = await github.paginate(github.rest.pulls.listFiles, { + owner, + repo, + pull_number: pr.number, + per_page: 100 + }); + const problem = profileOnlyProblem(pr, files); + + const { data: after } = await github.rest.pulls.get({ owner, repo, pull_number: number }); + if ( + after.state !== 'open' || + after.head.sha !== pr.head.sha || + after.base.ref !== pr.base.ref || + after.base.sha !== pr.base.sha + ) { + core.info('PR changed while listing files; retrying.'); + continue; + } + + if (problem) { + core.info(problem); + return; + } + + try { + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: pr.number, + labels: [LABEL] + }); + core.info(`Applied the "${LABEL}" label.`); + } catch (error) { + if (isPermissionDenied(error)) { + core.warning(`Cannot add the "${LABEL}" label because the token cannot write.`); + return; + } + + throw error; + } + + return; + } + + core.warning('PR kept changing during verification; not labeling.'); + + label-profile-partner: + # Labels a profile PR whose author holds a grant covering every changed + # path, and explains the /bot merge command to them once. + if: >- + github.repository == 'OrcaSlicer/OrcaSlicer' + && github.event_name == 'pull_request_target' + permissions: + contents: read # delegatable subtree, for file modes + pull-requests: read + issues: write # label + comment + runs-on: ubuntu-latest + timeout-minutes: 10 + # Supplies FOLDER_MERGERS. Must carry no protection rules, or every + # qualifying PR open would wait for a human reviewer. + environment: merge-delegation + steps: + - name: Label profile PRs from delegated maintainers + uses: actions/github-script@v9 + env: + # Read as an env var, never interpolated into the script body. + FOLDER_MERGERS: ${{ vars.FOLDER_MERGERS }} + with: + script: | + function isPermissionDenied(error) { + return error && error.status === 403 && /Resource not accessible by integration/i.test(error.message || ''); + } + + // Never prints the grant list: this job posts public comments and + // its logs are public too. + async function bestEffort(call, warning) { + try { + await call(); + } catch (error) { + if (isPermissionDenied(error)) { + core.warning(warning); + return; + } + + throw error; + } + } + + const MARKER = ''; + const LABEL = 'orca profile partner'; + const ATTEMPTS = 3; + + // ---- scope rules, mirrored from the merge job above ---- + // Change both together: these decide whether a delegate could merge. + const DELEGATABLE_ROOT = 'resources/profiles/'; + const ALLOWED_BASE_BRANCH = /^(?:main|release\/.+)$/; + const LISTFILES_CAP = 3000; + const REGULAR_FILE_MODES = new Set(['100644', '100755']); + + const DENIED_PATTERNS = [ + /^\.github\//, + /(^|\/)\.git(attributes|modules|ignore|config)$/, + /^(?:src|deps|deps_src|tests|tools|cmake|sandboxes|scripts|docs?|localization|bbl)\//, + /(^|\/)cmakelists\.txt$/, + /\.cmake$/, + /^build_[^/]*\.(?:sh|bat)$/, + /^version\.inc$/, + // Executables, including those inside the delegatable root. + /\.(?:sh|bash|bat|cmd|ps1|py|js|mjs|cjs|ts|rb|pl|php)$/ + ]; + + function parseGrants(raw) { + // GitHub login: 1-39 chars, alphanumerics with single interior hyphens. + const loginPattern = /^[A-Za-z0-9](?:[A-Za-z0-9]|-(?=[A-Za-z0-9])){0,38}$/; + const grantsByLogin = new Map(); + const problems = []; + + (raw || '').split(/\r?\n/).forEach((rawLine, index) => { + const line = rawLine.trim(); + if (!line || line.startsWith('#')) { + return; + } + + // Splits on the first colon only, so paths may contain ':' and spaces. + const separator = line.indexOf(':'); + if (separator === -1) { + problems.push(`line ${index + 1}: expected \`account: path\``); + return; + } + + const login = line.slice(0, separator).trim().replace(/^@/, ''); + const path = line.slice(separator + 1).trim().replace(/\/+$/, ''); + + if (!loginPattern.test(login)) { + problems.push(`line ${index + 1}: \`${login}\` is not a valid GitHub account name`); + return; + } + if (/[\\*?\u0000-\u001f\u007f]/.test(path) || path.split('/').includes('..') || path.includes('//')) { + problems.push(`line ${index + 1}: invalid path (no globs, \`..\`, \`//\`, backslashes or control characters)`); + return; + } + // Rejects anything outside the root, and the bare root itself. + if (!path.startsWith(DELEGATABLE_ROOT) || path.length <= DELEGATABLE_ROOT.length) { + problems.push(`line ${index + 1}: \`${path}\` is not inside \`${DELEGATABLE_ROOT}\``); + return; + } + + const key = login.toLowerCase(); + grantsByLogin.set(key, (grantsByLogin.get(key) || []).concat(path)); + }); + + return { grantsByLogin, problems }; + } + + function isDenied(path) { + if (/[\\\u0000-\u001f\u007f]/.test(path) || path.startsWith('/') || path.split('/').includes('..')) { + return true; + } + + const normalized = path.normalize('NFKC').toLowerCase(); + return DENIED_PATTERNS.some((pattern) => pattern.test(normalized)); + } + + // Byte-exact match on directory boundaries, so a grant of + // `.../Acme` covers neither `.../Acme Labs/x.json` nor `.../Acme.json`. + function isGranted(path, grants) { + return grants.some((grant) => path === grant || path.startsWith(`${grant}/`)); + } + + // Both endpoints of a rename; both must satisfy the grant. + function pathsFor(file) { + return [file.filename, file.previous_filename].filter(Boolean); + } + // ---- end mirrored rules ---- + + function scopeProblem(pr, files, grants) { + if (!files.length) { + return 'PR changes no files; not labeling.'; + } + if (files.length >= LISTFILES_CAP || files.length !== pr.changed_files) { + return `PR reports ${pr.changed_files} changed files but the API listed ${files.length}; not labeling.`; + } + + let outsideCount = 0; + for (const file of files) { + for (const path of pathsFor(file)) { + if (isDenied(path) || !isGranted(path, grants)) { + outsideCount += 1; + } + } + } + + if (outsideCount) { + return `PR has ${outsideCount} path(s) outside @${author}'s grants; not labeling.`; + } + + return null; + } + + // ---- file modes: rejects symlinks and submodules ---- + function modeProblem(files, tree) { + if (tree.truncated) { + return 'The profile tree is too large to verify file modes; not labeling.'; + } + + const modesByPath = new Map(tree.tree.map((entry) => [`${DELEGATABLE_ROOT}${entry.path}`, entry.mode])); + const hasIrregularFile = files.some((file) => + file.status !== 'removed' && !REGULAR_FILE_MODES.has(modesByPath.get(file.filename))); + + if (hasIrregularFile) { + return 'PR adds symlinks, submodules or files whose modes cannot be verified; not labeling.'; + } + + return null; + } + + const { owner, repo } = context.repo; + const number = context.payload.pull_request.number; + const author = context.payload.pull_request.user.login; + + const { grantsByLogin, problems } = parseGrants(process.env.FOLDER_MERGERS); + + // Only the count: the malformed lines may name grant holders. + if (problems.length) { + core.warning(`FOLDER_MERGERS has ${problems.length} malformed line(s); not labeling.`); + return; + } + + const grants = grantsByLogin.get(author.toLowerCase()) || []; + // Says nothing to accounts with no grant, so it cannot be used to spam. + if (!grants.length) { + core.info(`Ignoring PR from @${author}: not listed in FOLDER_MERGERS.`); + return; + } + + // Read current PR metadata for the file list and head tree. Retry + // if either side of the diff changes during verification. + for (let attempt = 0; attempt < ATTEMPTS; attempt += 1) { + const { data: pr } = await github.rest.pulls.get({ owner, repo, pull_number: number }); + + if (pr.state !== 'open') { + core.info(`PR is ${pr.state}; not labeling.`); + return; + } + if (!ALLOWED_BASE_BRANCH.test(pr.base.ref)) { + core.info(`PR targets "${pr.base.ref}", not main or release/*; not labeling.`); + return; + } + // Checked before listing files, so a PR too large to list is + // rejected in one call. + if (pr.changed_files >= LISTFILES_CAP) { + core.info(`PR changes ${pr.changed_files} files, more than the API can list; not labeling.`); + return; + } + + const files = await github.paginate(github.rest.pulls.listFiles, { + owner, + repo, + pull_number: pr.number, + per_page: 100 + }); + const scopeIssue = scopeProblem(pr, files, grants); + + let modeIssue = null; + if (!scopeIssue) { + const { data: tree } = await github.rest.git.getTree({ + owner, + repo, + tree_sha: `${pr.head.sha}:${DELEGATABLE_ROOT.replace(/\/$/, '')}`, + recursive: 'true' + }); + modeIssue = modeProblem(files, tree); + } + + const { data: after } = await github.rest.pulls.get({ owner, repo, pull_number: number }); + if ( + after.state !== 'open' || + after.head.sha !== pr.head.sha || + after.base.ref !== pr.base.ref || + after.base.sha !== pr.base.sha + ) { + core.info('PR changed while verifying; retrying.'); + continue; + } + + const problem = scopeIssue || modeIssue; + if (problem) { + core.info(problem); + return; + } + + // ---- label + one-time comment ---- + await bestEffort( + () => github.rest.issues.addLabels({ owner, repo, issue_number: pr.number, labels: [LABEL] }), + `Cannot add the "${LABEL}" label because the token cannot write.`); + + const comments = await github.paginate(github.rest.issues.listComments, { + owner, + repo, + issue_number: pr.number, + per_page: 100 + }); + if (comments.some((comment) => (comment.body || '').includes(MARKER))) { + core.info('Partner notice already present; skipping comment.'); + return; + } + + await bestEffort( + () => github.rest.issues.createComment({ + owner, + repo, + issue_number: pr.number, + body: + `${MARKER}\n` + + `Hi @${author}, this profile PR is covered by your delegated merge grant.\n\n` + + `Once it is ready for review and CI is green, you can merge it yourself:\n\n` + + `- \`/bot merge\` - squash-merge into \`main\` or \`release/*\`\n` + + `- \`/bot merge --dry-run\` - report the verdict without merging\n\n` + + `The bot re-checks the scope, the file modes and the \`Check profiles\` check at merge time.` + }), + 'Cannot post the partner notice because the token cannot write comments.'); + + core.info(`Applied the "${LABEL}" label and posted the /bot merge notice.`); + return; + } + + core.warning('PR kept changing during verification; not labeling.'); diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 5f54f6581d..f5850d9fd7 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -54,8 +54,10 @@ jobs: shell: bash run: | tar -xvf build_tests.tar - # Multi-config generators (Windows/macOS) need a config; Linux is single-config. - scripts/run_unit_tests.sh "${{ inputs.test-dir }}" "${{ runner.os != 'Linux' && 'Release' || '' }}" + # Every platform builds with a multi-config generator (build_linux.sh uses Ninja + # Multi-Config), so ctest needs the config: without it, plain add_test() tests + # lose their labels and report "Not Run". + scripts/run_unit_tests.sh "${{ inputs.test-dir }}" Release - name: Upload Test Logs if: ${{ failure() }} uses: actions/upload-artifact@v7 diff --git a/.github/workflows/unit_tests_flatpak.yml b/.github/workflows/unit_tests_flatpak.yml new file mode 100644 index 0000000000..ce261c210c --- /dev/null +++ b/.github/workflows/unit_tests_flatpak.yml @@ -0,0 +1,67 @@ +name: Flatpak Unit Tests + +# Run the flatpak build's test asset inside the sandbox, once per arch. The +# GNOME SDK's _GLIBCXX_ASSERTIONS gives a bounds-checked STL that catches +# out-of-bounds reads no other test leg does. +on: + workflow_call: + inputs: + os: + required: true + type: string + artifact: + description: Test asset uploaded by the flatpak build leg + required: true + type: string + +jobs: + unit_tests_flatpak: + name: Flatpak Unit Tests + runs-on: ${{ inputs.os }} + container: + image: ghcr.io/flathub-infra/flatpak-github-actions:gnome-50 + options: --privileged + steps: + - name: Restore test asset + uses: actions/download-artifact@v8 + with: + name: ${{ inputs.artifact }} + - name: Run unit tests (bounds-checked sandbox) + timeout-minutes: 20 + shell: bash + run: | + tar -xf flatpak-test-asset.tar + # Recreate the stable module symlink so /run/build/OrcaSlicer resolves. + d=$(ls -d .flatpak-builder/build/OrcaSlicer-* | tail -1) + ln -sfn "$(basename "$d")" .flatpak-builder/build/OrcaSlicer + # The runtime + SDK + the llvm extension the app metadata references, + # which `flatpak build` mounts; best-effort, the image may have them. + flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo + flatpak install --user -y --noninteractive flathub \ + org.gnome.Platform//50 org.gnome.Sdk//50 org.freedesktop.Sdk.Extension.llvm21//25.08 || true + # `flatpak build` uses bwrap (no rofiles-fuse, which this container + # rejects); bind-mount the build tree so the baked TEST_DATA_DIR resolves. + flatpak build --die-with-parent --share=network \ + --bind-mount=/run/build="$PWD/.flatpak-builder/build" \ + flatpak_app \ + bash -c 'cd /run/build/OrcaSlicer && scripts/run_unit_tests.sh build_flatpak/tests' + - name: Collect test results + if: always() + shell: bash + run: | + d=$(ls -d .flatpak-builder/build/OrcaSlicer-* 2>/dev/null | tail -1 || true) + [ -n "$d" ] && [ -f "$d/ctest_results.xml" ] && cp "$d/ctest_results.xml" ctest_results.xml || true + - name: Upload Test Results + if: always() + uses: actions/upload-artifact@v7 + with: + name: test-results-${{ inputs.artifact }} + path: ctest_results.xml + retention-days: 5 + if-no-files-found: warn + - name: Delete Test Asset + if: success() + uses: geekyeggo/delete-artifact@v6 + with: + name: ${{ inputs.artifact }} + failOnError: false diff --git a/.gitignore b/.gitignore index cdcd1c90b4..a2a1520fd5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ Build Build.bat /build*/ +/out/ CMakeLists.txt.user CMakeUserPresets.json **/CMakeLists.txt.autosave @@ -51,3 +52,5 @@ internal_docs/ __pycache__/ *.pyc *.opc +/.test/ +docs/superpowers/ \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 236aa54c05..3d0a61b303 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,11 +20,18 @@ cmake --build . --config %build_type% --target ALL_BUILD -- -m Catch2 framework. Tests in `tests/`; see [tests/AGENTS.md](tests/AGENTS.md) for where a new test belongs and the conventions to follow. ```bash -cd build && ctest --output-on-failure # all tests -ctest --test-dir ./tests/libslic3r # individual suite -ctest --test-dir ./tests/fff_print +cd build && ctest -C Release --output-on-failure # all tests +ctest --test-dir ./tests/libslic3r -C Release # individual suite +ctest --test-dir ./tests/fff_print -C Release ``` +## Documentation + +- Docs live in `docs/`; the high-level design of a subsystem goes in `docs/HLSD/.md`. +- Describe the design as it stands — what the subsystem does, why it exists, and the constraints that shape it. Not the route that got there: no phases, task lists, status markers, or "before/after this PR" framing. +- Planning and investigation output (brainstorms, superpowers design and plan docs) stays in `docs/superpowers/`, which is gitignored. Never commit it. +- Write a doc only when the design is not evident from the code, and when a change invalidates an existing one, update it in the same PR. + ## Code Style - C++17, selective C++20. PascalCase classes, snake_case functions/variables @@ -57,16 +64,16 @@ ctest --test-dir ./tests/fff_print - Keep code concise and clear. Manually simplify AI generated bloated codes before review. - Include targeted tests or documented verification for behavior changes, especially in slicing logic, profiles, formats, and GUI defaults. - For profile changes (`resources/profiles//**`), check that `version` in the sibling `resources/profiles/.json` was bumped. -- For translation changes (`localization/i18n/**/*.po`), check that recurring terms match the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_glossary.md) for that language. +- For translation changes (`localization/i18n/**/*.po`), check that recurring terms match the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_glossary.md) for that language. ## Localization & translations Catalogs live in `localization/i18n//OrcaSlicer_.po`; the template is `OrcaSlicer.pot`. -See the [Localization guide](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_guide.md) for the human-facing version of these principles. +See the [Localization guide](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_guide.md) for the human-facing version of these principles. ### Terminology -- Use the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/guides/localization_glossary.md) as the source of truth for recurring terms, so the same English term is always rendered the same way within a language, and terms that must stay in English (brand/product names, acronyms, materials, file formats, G-code tokens, macros/variables/identifiers) are not translated. +- Use the [Localization glossary](https://github.com/OrcaSlicer/OrcaSlicer_WIKI/blob/main/developer_reference/localization_glossary.md) as the source of truth for recurring terms, so the same English term is always rendered the same way within a language, and terms that must stay in English (brand/product names, acronyms, materials, file formats, G-code tokens, macros/variables/identifiers) are not translated. - If a term's established translation changes, update both the affected `.po` files and the glossary (`localization_glossary.tsv`, then regenerate) so they stay in sync. - Translate the *meaning*, not the words. Check what the string actually controls before translating it — English reuses one word for different things. `Flow ratio` (multiplier), `Flow Rate` (throughput) and `Flow Dynamics` (pressure compensation) are three different terms; `extruder` may mean the toolhead, the feeder motor, or the nozzle depending on the string. - Reuse one template per recurring message shape (`Failed to connect to …`, `Are you sure you want to …?`), even where the English wording varies. diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f0db669b8..e3547281f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,10 @@ endif() cmake_minimum_required(VERSION 3.13) +if(POLICY CMP0177) + cmake_policy(SET CMP0177 NEW) +endif() + # The following line used to be in tests/CMakeLists.txt # Having it there causes rebuilds of all targets on any CMakeLists.txt change under tests/ @@ -95,33 +99,6 @@ else () add_compile_definitions("$<$:WXINSPECTOR_DISABLE>") endif () -find_package(Git) -if(DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") - message(STATUS "Specified git commit hash: $ENV{git_commit_hash}") - if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Convert the given hash to short hash - execute_process( - COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - else() - # No .git directory (e.g., Flatpak sandbox) — truncate directly - string(SUBSTRING "$ENV{git_commit_hash}" 0 7 GIT_COMMIT_HASH) - endif() - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") -elseif(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git") - # Check current Git commit hash - execute_process( - COMMAND ${GIT_EXECUTABLE} log -1 --format=%h - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT_HASH - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - add_definitions("-DGIT_COMMIT_HASH=\"${GIT_COMMIT_HASH}\"") -endif() - if(DEFINED ENV{SLIC3R_STATIC}) set(SLIC3R_STATIC_INITIAL $ENV{SLIC3R_STATIC}) else() @@ -130,6 +107,7 @@ endif() option(SLIC3R_STATIC "Compile OrcaSlicer with static libraries (Boost, TBB)" ${SLIC3R_STATIC_INITIAL}) option(SLIC3R_GUI "Compile OrcaSlicer with GUI components (OpenGL, wxWidgets)" 1) +option(SLIC3R_CAD "Compile OrcaSlicer with the parametric Design/CAD tab (needs OCCT ModelingAlgorithms)" 1) option(SLIC3R_FHS "Assume OrcaSlicer is to be installed in a FHS directory structure" 0) option(SLIC3R_PROFILE "Compile OrcaSlicer with an invasive Shiny profiler" 0) option(SLIC3R_PCH "Use precompiled headers" 1) @@ -137,6 +115,7 @@ option(SLIC3R_WARNINGS "Emit compiler warnings for OrcaSlicer sources" option(SLIC3R_BUNDLED_WARNINGS "Emit compiler warnings for bundled third-party sources" 0) option(SLIC3R_MSVC_COMPILE_PARALLEL "Compile on Visual Studio in parallel" 1) option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1) +option(SLIC3R_RELATIVE_DEBUG_PATHS "Record a relative compilation directory in debug info (clang-cl)" 0) option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0) # Python stubgen module @@ -298,6 +277,8 @@ if (APPLE) SET(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.orcaslicer.OrcaSlicer") message(STATUS "Orca: IS_CROSS_COMPILE: ${IS_CROSS_COMPILE}") +elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(CMAKE_INSTALL_RPATH "$ORIGIN") endif () # Proposal for C++ unit tests and sandboxes @@ -328,6 +309,10 @@ if (SLIC3R_GUI) add_definitions(-DSLIC3R_GUI) endif () +if (SLIC3R_CAD) + add_definitions(-DSLIC3R_CAD) +endif () + if(SLIC3R_DESKTOP_INTEGRATION) add_definitions(-DSLIC3R_DESKTOP_INTEGRATION) endif () @@ -360,12 +345,31 @@ if (MSVC) if (SLIC3R_MSVC_COMPILE_PARALLEL AND CMAKE_GENERATOR MATCHES "Visual Studio") add_compile_options(/MP) endif () + + # Parse lambdas the way the standard says, as clang and GCC already do. Without it + # MSVC keeps its legacy lambda processor under /std:c++17 and rejects reading a + # constexpr constant inside a lambda that does not capture it (C3493), which no + # other compiler requires. Implied by /std:c++20 and /permissive-, so it is only + # needed while we are on C++17. clang-cl is conforming already and does not take + # the flag. Requires VS2019 16.8 or newer. + if (NOT IS_CLANG_CL) + # cl.exe only warns (D9002) about an unknown /Zc: option, so without this the + # flag would be dropped and the first lambda reading a constexpr constant would + # fail with C3493 far from the cause. + if (MSVC_VERSION LESS 1928) + message(FATAL_ERROR "Visual Studio 2019 16.8 (MSVC 19.28) or newer is required; detected MSVC ${MSVC_VERSION}.") + endif () + add_compile_options(/Zc:lambda) + endif () # /bigobj (Increase Number of Sections in .Obj file) + add_compile_options(-bigobj) # error C3859: virtual memory range for PCH exceeded; please recompile with a command line option of '-Zm90' or greater # Generate symbols at every build target, even for the release. # -Zm520 fixes error C3859 but forces the compiler to pre-allocate that memory for every translation unit regardless # combining /Zi with /FS frees up a significant amount of memory pressure across all parallel compile jobs and makes /MP faster overall. - add_compile_options(-bigobj /Zi /FS) + if (SLIC3R_MSVC_PDB) + add_compile_options(/Zi /FS) + endif () # Disable STL4007: Many result_type typedefs and all argument_type, first_argument_type, and second_argument_type typedefs are deprecated in C++17. #FIXME Remove this line after eigen library adapts to the new C++17 adaptor rules. add_compile_options(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) @@ -383,6 +387,16 @@ if (MSVC) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /LTCG") endif () +# Without this every object names its build directory and two worktrees never +# share cache entries. The linker still writes absolute paths into the PDB. +if (SLIC3R_RELATIVE_DEBUG_PATHS) + if (IS_CLANG_CL) + add_compile_options(-ffile-compilation-dir=.) + else () + message(WARNING "SLIC3R_RELATIVE_DEBUG_PATHS is only implemented for clang-cl") + endif () +endif () + if (${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang" AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) add_compile_definitions(BOOST_NO_CXX98_FUNCTION_BASE _HAS_AUTO_PTR_ETC=0) endif() @@ -548,59 +562,92 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR elseif (NOT MINGW) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" ) endif () - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-reorder" ) - # On GCC and Clang, no return from a non-void function is a warning only. Here, we make it an error. - add_compile_options(-Werror=return-type) + # Every warning is an error unless it appears in one of the two lists below. + # disabled - never wanted. Off everywhere, so it never warns or errors. + # demoted - wanted, not cleared yet. Still warns, does not error. - # Since some portions of code are just commented out or put under conditional compilation, there are - # a bunch of warning related to unused functions and variables. Suppress those warnings to not pollute - # compilers diagnostics output with warnings we not going to look at - add_compile_options(-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable -Wno-unused-label -Wno-unused-local-typedefs) + # Disabled. + set(warnings_disabled + reorder # members initialised in an order we chose + sign-compare # signed/unsigned comparisons throughout + misleading-indentation # false positives on mixed tabs and spaces + switch # unhandled enum value in a switch + unused-function # commented-out or conditionally compiled code + unused-variable # commented-out or conditionally compiled code + unused-but-set-variable # commented-out or conditionally compiled code + unused-label # commented-out or conditionally compiled code + unused-local-typedefs # commented-out or conditionally compiled code + ) + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND warnings_disabled deprecated-declarations) # legacy OpenGL calls + endif () + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) + list(APPEND warnings_disabled ignored-attributes) # from Eigen headers marked SYSTEM + endif () + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + list(APPEND warnings_disabled unknown-pragmas) # igl pragmas, GCC bug 66943 + endif () + foreach (w IN LISTS warnings_disabled) + add_compile_options(-Wno-${w}) + endforeach () - # Ignore signed/unsigned comparison warnings - add_compile_options(-Wno-sign-compare) + # GCC is not built in CI, so don't throw errors CI won't catch. + if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") + add_compile_options(-Werror=return-type) + else () + # Turn everything else into an error. Dependency headers are exempt because the + # SYSTEM include flag (-imsvc on clang-cl, -isystem elsewhere) keeps their + # diagnostics out. + add_compile_options(-Werror) + endif () - # The mismatch of tabs and spaces throughout the project can sometimes - # cause this warning to appear even though the indentation is fine. - # Some includes also cause the warning - add_compile_options(-Wno-misleading-indentation) + # Demoted. Remove a name once its category is cleared on every compiler. + set(warnings_demoted) + if (APPLE) + list(APPEND warnings_demoted + # MacDarkMode.mm makes two calls to AppKit's private titlebarViewController + # and one to a wxWidgets category on NSTableColumn whose header is not + # imported. Clearing it means declaring the private selectors ourselves, which + # needs a macOS build to verify. + objc-method-access + ) + endif () + if (WIN32 AND CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64") + list(APPEND warnings_demoted + # About two dozen GetProcAddress casts, most in the vendored dark_mode.hpp, + # retype FARPROC to a real signature. The __stdcall typedefs are identical to + # FARPROC on x64, so only arm64 reports them. Clearing them is a separate + # sweep. + cast-function-type-mismatch + ) + endif () + if (CMAKE_CXX_COMPILER_ID MATCHES "Clang") + list(APPEND warnings_demoted + # enum-constexpr-conversion is a Clang warning that defaults to an error, + # present through clang 20 and gone in clang 21. + enum-constexpr-conversion + ) + endif () - # Disable warning if enum value does not have a corresponding case in switch statement - add_compile_options(-Wno-switch) - - # removes LOTS of extraneous Eigen warnings (GCC only supports it since 6.1) - # https://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221 - if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" OR CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 6.0) - add_compile_options(-Wno-ignored-attributes) # Tamas: Eigen include dirs are marked as SYSTEM - endif() - - # Clang reports legacy OpenGL calls as deprecated. Turn off the warning for now - # to reduce the clutter, we know about this one. It should be reenabled after - # we finally get rid of the deprecated code. - if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") - add_compile_options(-Wno-deprecated-declarations) - endif() - - if((${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "AppleClang") AND ${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER 15) - include(CheckCXXCompilerFlag) - check_cxx_compiler_flag(-Wno-error=enum-constexpr-conversion HAS_WNO_ERROR_ENUM_CONSTEXPR_CONV) - if(HAS_WNO_ERROR_ENUM_CONSTEXPR_CONV) - add_compile_options(-Wno-error=enum-constexpr-conversion) - endif() - endif() - - #GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - # We will turn the warning of for GCC for now: - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") - # GCC generates loads of -Wunknown-pragmas when compiling igl. The fix is not easy due to a bug in gcc, see - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66943 or - # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53431 - # We will turn the warning of for GCC for now: - add_compile_options(-Wno-unknown-pragmas) - endif() + # The list mixes names not every compiler has, so add each exception only where the + # compiler knows the warning. Probe with the positive -W, which an unknown + # warning fails on both compilers (GCC errors, Clang reports unknown-warning-option). + # An option that takes a =N argument rejects the bare -W, so fall back to + # -W=1 and demote with the trailing =. + include(CheckCXXCompilerFlag) + foreach (category IN LISTS warnings_demoted) + string(MAKE_C_IDENTIFIER "ORCA_HAS_W_${category}" _orca_has_w) + check_cxx_compiler_flag("-W${category}" ${_orca_has_w}) + if (${_orca_has_w}) + add_compile_options(-Wno-error=${category}) + else () + check_cxx_compiler_flag("-W${category}=1" ${_orca_has_w}_arg) + if (${${_orca_has_w}_arg}) + add_compile_options(-Wno-error=${category}=) + endif () + endif () + endforeach () # Compress the debug info with zstd to save space in Flatpak CI builds if(FLATPAK) @@ -610,10 +657,6 @@ if ((NOT MSVC OR IS_CLANG_CL) AND ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR endif() endif() - if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 14) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=template-id-cdtor" ) - endif() - endif() if (SLIC3R_ASAN) @@ -1038,74 +1081,97 @@ function(orcaslicer_copy_dlls target config postfix output_dlls) ${TOP_LEVEL_PROJECT_DIR}/deps/WebView2/lib/win-${_arch}/WebView2Loader.dll DESTINATION ${_out_dir}) - file(COPY ${CMAKE_PREFIX_PATH}/bin/occt/TKBO.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKBRep.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKCAF.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKCDF.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKernel.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKG2d.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKG3d.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKGeomAlgo.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKGeomBase.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKHLR.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKLCAF.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKMath.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKMesh.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKPrim.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKService.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKShHealing.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKSTEP.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKSTEP209.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKSTEPAttr.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKSTEPBase.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKTopAlgo.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKV3d.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKVCAF.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKXCAF.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKXDESTEP.dll - ${CMAKE_PREFIX_PATH}/bin/occt/TKXSBase.dll + # Stage the OCCT toolkits libslic3r links (published as OCCT_LIBS), not whatever the + # deps prefix happens to hold, and fail the configure if one of them is missing. + if (NOT OCCT_LIBS) + message(FATAL_ERROR "OCCT_LIBS is not set; libslic3r must be configured first.") + endif () + set(_occt_bin "${CMAKE_PREFIX_PATH}/bin/occt") + set(_occt_dlls "") + set(_occt_staged "") + set(_missing_occt "") + foreach (_tk IN LISTS OCCT_LIBS) + if (EXISTS "${_occt_bin}/${_tk}.dll") + list(APPEND _occt_dlls "${_occt_bin}/${_tk}.dll") + list(APPEND _occt_staged "${_out_dir}/${_tk}.dll") + else () + list(APPEND _missing_occt "${_tk}.dll") + endif () + endforeach () + if (_missing_occt) + message(FATAL_ERROR + "OCCT DLLs missing from ${_occt_bin}/: ${_missing_occt}\n" + "Rebuild the dependencies (build_release_vs2022.bat deps) with the same " + "SLIC3R_CAD setting as this project.") + endif () + file(COPY ${_occt_dlls} ${CMAKE_PREFIX_PATH}/bin/freetype.dll + ${CMAKE_PREFIX_PATH}/bin/avcodec-61.dll + ${CMAKE_PREFIX_PATH}/bin/swresample-5.dll + ${CMAKE_PREFIX_PATH}/bin/swscale-8.dll + ${CMAKE_PREFIX_PATH}/bin/avutil-59.dll DESTINATION ${_out_dir}) - set(${output_dlls} + set(_dll_list ${_out_dir}/libgmp-10.dll ${_out_dir}/libmpfr-4.dll ${_out_dir}/WebView2Loader.dll - ${_out_dir}/TKBO.dll - ${_out_dir}/TKBRep.dll - ${_out_dir}/TKCAF.dll - ${_out_dir}/TKCDF.dll - ${_out_dir}/TKernel.dll - ${_out_dir}/TKG2d.dll - ${_out_dir}/TKG3d.dll - ${_out_dir}/TKGeomAlgo.dll - ${_out_dir}/TKGeomBase.dll - ${_out_dir}/TKHLR.dll - ${_out_dir}/TKLCAF.dll - ${_out_dir}/TKMath.dll - ${_out_dir}/TKMesh.dll - ${_out_dir}/TKPrim.dll - ${_out_dir}/TKService.dll - ${_out_dir}/TKShHealing.dll - ${_out_dir}/TKSTEP.dll - ${_out_dir}/TKSTEP209.dll - ${_out_dir}/TKSTEPAttr.dll - ${_out_dir}/TKSTEPBase.dll - ${_out_dir}/TKTopAlgo.dll - ${_out_dir}/TKV3d.dll - ${_out_dir}/TKVCAF.dll - ${_out_dir}/TKXCAF.dll - ${_out_dir}/TKXDESTEP.dll - ${_out_dir}/TKXSBase.dll - ${_out_dir}/freetype.dll - + ${_out_dir}/avcodec-61.dll + ${_out_dir}/swresample-5.dll + ${_out_dir}/swscale-8.dll + ${_out_dir}/avutil-59.dll PARENT_SCOPE ) + list(APPEND _dll_list ${_occt_staged}) + set(${output_dlls} ${_dll_list} PARENT_SCOPE) endfunction() +function(orcaslicer_copy_sos target config postfix output_sos) + + get_property(_is_multi GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + get_target_property(_alt_out_dir ${target} RUNTIME_OUTPUT_DIRECTORY) + + if (_alt_out_dir) + set(_out_dir "${_alt_out_dir}") + elseif (_is_multi) + set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}/${config}") + else () + set(_out_dir "${CMAKE_CURRENT_BINARY_DIR}") + endif () + + file(COPY ${CMAKE_PREFIX_PATH}/lib/libavcodec.so + ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61 + ${CMAKE_PREFIX_PATH}/lib/libavcodec.so.61.3.100 + ${CMAKE_PREFIX_PATH}/lib/libavutil.so + ${CMAKE_PREFIX_PATH}/lib/libavutil.so.59 + ${CMAKE_PREFIX_PATH}/lib/libavutil.so.59.8.100 + ${CMAKE_PREFIX_PATH}/lib/libswscale.so + ${CMAKE_PREFIX_PATH}/lib/libswscale.so.8 + ${CMAKE_PREFIX_PATH}/lib/libswscale.so.8.1.100 + ${CMAKE_PREFIX_PATH}/lib/libswresample.so + ${CMAKE_PREFIX_PATH}/lib/libswresample.so.5 + ${CMAKE_PREFIX_PATH}/lib/libswresample.so.5.1.100 + DESTINATION ${_out_dir}) + + set(${output_sos} + ${_out_dir}/libavcodec.so + ${_out_dir}/libavcodec.so.61 + ${_out_dir}/libavcodec.so.61.3.100 + ${_out_dir}/libavutil.so + ${_out_dir}/libavutil.so.59 + ${_out_dir}/libavutil.so.59.8.100 + ${_out_dir}/libswscale.so + ${_out_dir}/libswscale.so.8 + ${_out_dir}/libswscale.so.8.1.100 + ${_out_dir}/libswresample.so + ${_out_dir}/libswresample.so.5 + ${_out_dir}/libswresample.so.5.1.100 + PARENT_SCOPE + ) +endfunction() # Bundled sources set their own warning flags, and a plain -Wall there means /Wall # (= -Weverything) under clang-cl. Target options are applied after the ones a target @@ -1153,8 +1219,9 @@ endif () if (NOT SLIC3R_WARNINGS) add_compile_options(-w) elseif (MSVC AND NOT IS_CLANG_CL) - # /we4715 is C4715, no return from a non-void function, matching the - # -Werror=return-type the GNU/Clang builds apply. + # /we4715 is C4715, no return from a non-void function, an error on the GNU/Clang + # builds under -Werror. MSVC is not in that model, so this stays a single promoted + # warning. add_compile_options(/W3 /we4715) endif () @@ -1217,6 +1284,20 @@ else () endif() endif () +if (CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(LIBRARY_FILES + ${LIBDIR_BIN}/libavcodec.so.61 + ${LIBDIR_BIN}/libavcodec.so.61.3.100 + ${LIBDIR_BIN}/libavutil.so.59 + ${LIBDIR_BIN}/libavutil.so.59.8.100 + ${LIBDIR_BIN}/libswresample.so.5 + ${LIBDIR_BIN}/libswresample.so.5.1.100 + ${LIBDIR_BIN}/libswscale.so.8 + ${LIBDIR_BIN}/libswscale.so.8.1.100 + ) + install(FILES ${LIBRARY_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/bin") +endif () + install(FILES ${CMAKE_SOURCE_DIR}/LICENSE.txt DESTINATION ".") configure_file(${LIBDIR}/dev-utils/platform/unix/fhs.hpp.in ${LIBDIR_BIN}/dev-utils/platform/unix/fhs.hpp) diff --git a/build_flatpak.sh b/build_flatpak.sh index b805bb3422..12ccac372b 100755 --- a/build_flatpak.sh +++ b/build_flatpak.sh @@ -260,6 +260,9 @@ if [[ ! -f "./scripts/flatpak/com.orcaslicer.OrcaSlicer.yml" ]]; then exit 1 fi +echo -e "${YELLOW}Packing deps/ for the manifest...${NC}" +./scripts/flatpak/make_deps_tar.sh + # Build the Flatpak echo -e "${YELLOW}Building Flatpak package...${NC}" echo -e "This may take a while (30+ minutes depending on your system)..." diff --git a/build_release.bat b/build_release.bat deleted file mode 100644 index f751c17e5a..0000000000 --- a/build_release.bat +++ /dev/null @@ -1,52 +0,0 @@ -set WP=%CD% - -set debug=OFF -set debuginfo=OFF -if "%1"=="debug" set debug=ON -if "%2"=="debug" set debug=ON -if "%1"=="debuginfo" set debuginfo=ON -if "%2"=="debuginfo" set debuginfo=ON -if "%debug%"=="ON" ( - set build_type=Debug - set build_dir=build-dbg -) else ( - if "%debuginfo%"=="ON" ( - set build_type=RelWithDebInfo - set build_dir=build-dbginfo - ) else ( - set build_type=Release - set build_dir=build - ) -) -echo build type set to %build_type% - -cd deps -mkdir %build_dir% -cd %build_dir% -set DEPS=%CD%/OrcaSlicer_dep -set "SIG_FLAG=" -if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" -if "%1"=="slicer" ( - GOTO :slicer -) -echo "building deps.." - -echo cmake ../ -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type% -cmake ../ -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type% -cmake --build . --config %build_type% --target deps -- -m - -if "%1"=="deps" exit /b 0 - -:slicer -echo "building Orca Slicer..." -cd %WP% -mkdir %build_dir% -cd %build_dir% - -echo cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type% -cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_BUILD_TYPE=%build_type% %SIG_FLAG% -cmake --build . --config %build_type% --target ALL_BUILD -- -m -cd .. -call scripts/run_gettext.bat -cd %build_dir% -cmake --build . --target install --config %build_type% diff --git a/build_release_macos.sh b/build_release_macos.sh index 2fd7b26cd8..b1de5df2e4 100755 --- a/build_release_macos.sh +++ b/build_release_macos.sh @@ -4,7 +4,7 @@ set -e set -o pipefail SECONDS=0 -while getopts ":dpa:snt:xbc:i:1Tuh" opt; do +while getopts ":dpa:snt:xbc:i:j:Tuh" opt; do case "${opt}" in d ) export BUILD_TARGET="deps" @@ -38,8 +38,8 @@ while getopts ":dpa:snt:xbc:i:1Tuh" opt; do i ) export CMAKE_IGNORE_PREFIX_PATH="${CMAKE_IGNORE_PREFIX_PATH:+$CMAKE_IGNORE_PREFIX_PATH;}$OPTARG" ;; - 1 ) - export CMAKE_BUILD_PARALLEL_LEVEL=1 + j ) + export CMAKE_BUILD_PARALLEL_LEVEL="$OPTARG" ;; T ) export BUILD_TESTS="1" @@ -58,7 +58,7 @@ while getopts ":dpa:snt:xbc:i:1Tuh" opt; do echo " -b: Build without reconfiguring CMake" echo " -c: Set CMake build configuration, default is Release" echo " -i: Add a prefix to ignore during CMake dependency discovery (repeatable), defaults to /opt/local:/usr/local:/opt/homebrew" - echo " -1: Use single job for building" + echo " -j: Set the number of parallel build jobs (CMAKE_BUILD_PARALLEL_LEVEL)" echo " -T: Build and run tests (set ORCA_TESTS_BUILD_ONLY=1 to build without running)" exit 0 ;; diff --git a/build_release_vs.bat b/build_release_vs.bat deleted file mode 100644 index 78419dadf5..0000000000 --- a/build_release_vs.bat +++ /dev/null @@ -1,177 +0,0 @@ -@REM OrcaSlicer build script for Windows with VS auto-detect -@echo off -set WP=%CD% -set _START_TIME=%TIME% - -@REM Default target architecture to the host CPU arch; override by passing -@REM "x64" or "arm64" as an argument. PROCESSOR_ARCHITEW6432 covers a 32-bit -@REM shell running on a 64-bit OS, where PROCESSOR_ARCHITECTURE reads "x86". -set arch=x64 -if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64 -if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64 -if /I "%1"=="arm64" set arch=ARM64 -if /I "%2"=="arm64" set arch=ARM64 -if /I "%1"=="x64" set arch=x64 -if /I "%2"=="x64" set arch=x64 - -@REM Check for Ninja Multi-Config option (-x) -set USE_NINJA=0 -for %%a in (%*) do ( - if "%%a"=="-x" set USE_NINJA=1 -) - -@REM Check for unit-tests option ("tests") -set BUILD_TESTS=OFF -for %%a in (%*) do ( - if /I "%%a"=="tests" set BUILD_TESTS=ON -) - -if "%USE_NINJA%"=="1" ( - echo Using Ninja Multi-Config generator - set CMAKE_GENERATOR="Ninja Multi-Config" - set VS_VERSION=Ninja - goto :generator_ready -) - -@REM Detect Visual Studio version using msbuild -echo Detecting Visual Studio version using msbuild... - -@REM Try to get MSBuild version - the output format varies by VS version -set VS_MAJOR= -for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( - for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a - set MSBUILD_OUTPUT=%%i - goto :version_found -) - -@REM Alternative method for newer MSBuild versions -if "%VS_MAJOR%"=="" ( - for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( - for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a - set MSBUILD_OUTPUT=%%i - goto :version_found - ) -) - -:version_found -echo MSBuild version detected: %MSBUILD_OUTPUT% -echo Major version: %VS_MAJOR% - -if "%VS_MAJOR%"=="" ( - echo Error: Could not determine Visual Studio version from msbuild - echo Please ensure Visual Studio and MSBuild are properly installed - exit /b 1 -) - -if "%VS_MAJOR%"=="16" ( - set VS_VERSION=2019 - set CMAKE_GENERATOR="Visual Studio 16 2019" -) else if "%VS_MAJOR%"=="17" ( - set VS_VERSION=2022 - set CMAKE_GENERATOR="Visual Studio 17 2022" -) else if "%VS_MAJOR%"=="18" ( - set VS_VERSION=2026 - set CMAKE_GENERATOR="Visual Studio 18 2026" -) else ( - echo Error: Unsupported Visual Studio version: %VS_MAJOR% - echo Supported versions: VS2019 (16.x^), VS2022 (17.x^), VS2026 (18.x^) - exit /b 1 -) - -echo Detected Visual Studio %VS_VERSION% (version %VS_MAJOR%) -echo Using CMake generator: %CMAKE_GENERATOR% - -:generator_ready - -@REM Pack deps -if "%1"=="pack" ( - setlocal ENABLEDELAYEDEXPANSION - cd %WP%/deps/build - if "%arch%"=="ARM64" cd %WP%/deps/build-arm64 - for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set build_date=%%c%%b%%a - echo packing deps: OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip - - %WP%/tools/7z.exe a OrcaSlicer_dep_win-!arch!_!build_date!_vs!VS_VERSION!.zip OrcaSlicer_dep - goto :done -) - -set debug=OFF -set debuginfo=OFF -if "%1"=="debug" set debug=ON -if "%2"=="debug" set debug=ON -if "%1"=="debuginfo" set debuginfo=ON -if "%2"=="debuginfo" set debuginfo=ON -if "%debug%"=="ON" ( - set build_type=Debug - set build_dir=build-dbg -) else ( - if "%debuginfo%"=="ON" ( - set build_type=RelWithDebInfo - set build_dir=build-dbginfo - ) else ( - set build_type=Release - set build_dir=build - ) -) -if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64 -echo build type set to %build_type%, arch=%arch% - -setlocal DISABLEDELAYEDEXPANSION -cd deps -mkdir %build_dir% -cd %build_dir% -set "SIG_FLAG=" -if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" - -if "%1"=="slicer" ( - GOTO :slicer -) -echo "building deps.." - -echo on -REM Set minimum CMake policy to avoid <3.5 errors -set CMAKE_POLICY_VERSION_MINIMUM=3.5 -if "%USE_NINJA%"=="1" ( - cmake ../ -G %CMAKE_GENERATOR% -DCMAKE_BUILD_TYPE=%build_type% - cmake --build . --config %build_type% --target deps -) else ( - cmake ../ -G %CMAKE_GENERATOR% -A %arch% -DCMAKE_BUILD_TYPE=%build_type% - cmake --build . --config %build_type% --target deps -- -m -) -@echo off - -if "%1"=="deps" goto :done - -:slicer -echo "building Orca Slicer..." -cd %WP% -mkdir %build_dir% -cd %build_dir% - -echo on -set CMAKE_POLICY_VERSION_MINIMUM=3.5 -if "%USE_NINJA%"=="1" ( - cmake .. -G %CMAKE_GENERATOR% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type% - cmake --build . --config %build_type% --target all -) else ( - cmake .. -G %CMAKE_GENERATOR% -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DBUILD_TESTS=%BUILD_TESTS% -DCMAKE_BUILD_TYPE=%build_type% - cmake --build . --config %build_type% --target ALL_BUILD -- -m -) -@echo off -cd .. -call scripts/run_gettext.bat -cd %build_dir% -cmake --build . --target install --config %build_type% - -:done -@echo off -for /f "tokens=1-3 delims=:.," %%a in ("%_START_TIME: =0%") do set /a "_start_s=%%a*3600+%%b*60+%%c" -for /f "tokens=1-3 delims=:.," %%a in ("%TIME: =0%") do set /a "_end_s=%%a*3600+%%b*60+%%c" -set /a "_elapsed=_end_s - _start_s" -if %_elapsed% lss 0 set /a "_elapsed+=86400" -set /a "_hours=_elapsed / 3600" -set /a "_remainder=_elapsed - _hours * 3600" -set /a "_mins=_remainder / 60" -set /a "_secs=_remainder - _mins * 60" -echo. -echo Build completed in %_hours%h %_mins%m %_secs%s diff --git a/build_release_vs2022.bat b/build_release_vs2022.bat deleted file mode 100644 index 32f39745e3..0000000000 --- a/build_release_vs2022.bat +++ /dev/null @@ -1,80 +0,0 @@ -@REM OrcaSlicer build script for Windows -@echo off -set WP=%CD% - -@REM Pack deps -if "%1"=="pack" ( - setlocal ENABLEDELAYEDEXPANSION - cd %WP%/deps/build - for /f "tokens=2-4 delims=/ " %%a in ('date /t') do set build_date=%%c%%b%%a - echo packing deps: OrcaSlicer_dep_win64_!build_date!_vs2022.zip - - %WP%/tools/7z.exe a OrcaSlicer_dep_win64_!build_date!_vs2022.zip OrcaSlicer_dep - exit /b 0 -) - -set debug=OFF -set debuginfo=OFF -@REM Default target architecture to the host CPU arch; override with x64/arm64 arg. -set arch=x64 -if /I "%PROCESSOR_ARCHITECTURE%"=="ARM64" set arch=ARM64 -if /I "%PROCESSOR_ARCHITEW6432%"=="ARM64" set arch=ARM64 -if "%1"=="debug" set debug=ON -if "%2"=="debug" set debug=ON -if "%1"=="debuginfo" set debuginfo=ON -if "%2"=="debuginfo" set debuginfo=ON -if /I "%1"=="arm64" set arch=ARM64 -if /I "%2"=="arm64" set arch=ARM64 -if /I "%1"=="x64" set arch=x64 -if /I "%2"=="x64" set arch=x64 -if "%debug%"=="ON" ( - set build_type=Debug - set build_dir=build-dbg -) else ( - if "%debuginfo%"=="ON" ( - set build_type=RelWithDebInfo - set build_dir=build-dbginfo - ) else ( - set build_type=Release - set build_dir=build - ) -) -if "%arch%"=="ARM64" set build_dir=%build_dir%-arm64 -echo build type set to %build_type%, arch=%arch% - -setlocal DISABLEDELAYEDEXPANSION -cd deps -mkdir %build_dir% -cd %build_dir% -set "SIG_FLAG=" -if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" - -if "%1"=="slicer" ( - GOTO :slicer -) -echo "building deps.." - -echo on -REM Set minimum CMake policy to avoid <3.5 errors -set CMAKE_POLICY_VERSION_MINIMUM=3.5 -cmake ../ -G "Visual Studio 17 2022" -A %arch% -DCMAKE_BUILD_TYPE=%build_type% -cmake --build . --config %build_type% --target deps -- -m -@echo off - -if "%1"=="deps" exit /b 0 - -:slicer -echo "building Orca Slicer..." -cd %WP% -mkdir %build_dir% -cd %build_dir% - -echo on -set CMAKE_POLICY_VERSION_MINIMUM=3.5 -cmake .. -G "Visual Studio 17 2022" -A %arch% -DORCA_TOOLS=ON %SIG_FLAG% -DCMAKE_BUILD_TYPE=%build_type% -cmake --build . --config %build_type% --target ALL_BUILD -- -m -@echo off -cd .. -call scripts/run_gettext.bat -cd %build_dir% -cmake --build . --target install --config %build_type% diff --git a/build_win.bat b/build_win.bat new file mode 100644 index 0000000000..dfb30e313b --- /dev/null +++ b/build_win.bat @@ -0,0 +1,1396 @@ +@echo off + +REM OrcaSlicer build script for Windows. Run with -h for the options. + +REM =========================================================================== +REM Script setup +REM =========================================================================== + +setlocal enableDelayedExpansion + +REM A manually set errorlevel shadows the real one, and cmd then stops +REM updating it after each command. Clear it, inside the scope above so +REM the caller keeps whatever it had. +set errorlevel= + +REM Everything here is relative to the repository root: deps/, build/ and +REM the 7z in tools/. Work from there whatever directory this was called +REM from. setlocal above restores the caller directory on exit. +cd /d "%~dp0" +set "WP=%CD%" +set "script_name=%~nx0" + +set argdefn=0 + +REM Both macros stop on a non-zero errorlevel; error_check also says so. +REM +REM error_check jumps to :die rather than calling exit /b where it stands. +REM Every use of it is inside a parenthesised block, and an exit /b there +REM ends the script but leaves the process exit code at zero, so a failed +REM build reported success. goto unwinds the block first. +set "repeat_error=if not ^!errorlevel^! == 0 exit /b ^!errorlevel^!" +set "error_check=if not ^!errorlevel^! == 0 (set rc=^!errorlevel^!& goto :die)" + +set VSWHERE="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" + +REM =========================================================================== +REM Command line options +REM =========================================================================== + +call :add_section "Actions" +call :add_arg build_deps bool d deps "Download and build the dependencies, needed before -s" +call :add_arg build_slicer bool s slicer "Build OrcaSlicer" +call :add_arg build_tests bool "" tests "Build the unit tests" +call :add_arg run_tests bool "" run-tests "Build the unit tests and run them" +call :add_arg pack_deps bool p pack "Bundle the built dependencies into a zip file" +call :add_arg install_deps bool u install-deps "Install or update CMake, Perl and Git with WinGet" +call :add_arg install_vs string "" install-vs "Also install Visual Studio: buildtools or ide" +call :add_arg kill_jobs bool k kill-jobs "Kill any running build and compiler processes" +call :add_arg print_help bool h help "Print this help message" + +call :add_section "Build configuration" +call :add_arg config string "" config "release, debug, relwithdebinfo or minsizerel (default: release)" +call :add_arg target_arch string "" arch "x64 or arm64 (default: the host architecture)" +call :add_arg slicer_asan bool a asan "Build the slicer with ASAN enabled" +call :add_arg no_pch bool "" no-pch "Build without the precompiled header, implied by --cache" + +call :add_section "Toolchain" +call :add_arg use_clang_cl bool l clang-cl "Use clang-cl as the compiler" +call :add_arg use_msvc bool "" msvc "Use cl as the compiler (default)" +call :add_arg use_ninja bool x ninja "Use the Ninja Multi-Config generator" +call :add_arg use_msbuild bool "" msbuild "Use the Visual Studio generator (default)" +call :add_arg vs_version string "" vs "Visual Studio release: 2019, 2022 or 2026 (default: autodetect)" +call :add_arg clang_path string "" clang-path "Path to clang-cl.exe, requires -x (default: the one from Visual Studio)" +call :add_arg cache string "" cache "Compiler cache: ccache, sccache or off, requires -l -x (default: off)" + +call :add_section "How much gets rebuilt" +call :add_arg slicer_target string "" slicer-target "Build one slicer target instead of all, e.g. libslic3r" +call :add_arg deps_target string t deps-target "Build one dependency instead of all, e.g. dep_Boost" +call :add_arg no_configure bool "" no-configure "Build the existing tree without configuring" +call :add_arg no_gettext bool "" no-gettext "Skip regenerating the translations" +call :add_arg install_slicer bool i install "Install into the build tree's OrcaSlicer folder" +call :add_arg jobs string j jobs "Limit the build to N parallel jobs" +call :add_arg clean bool c clean "Remove the trees this run builds, deps with -d, slicer with -s" + +call :add_section "Paths and extra arguments" +call :add_arg deps_dir string "" deps-dir "Dependency tree to build in or use, instead of the one named for this build" +call :add_arg slicer_dir string "" build-dir "Slicer build directory, instead of the one named for this build" +call :add_arg deps_args rawstring "" deps-args "Extra arguments for the deps configure, quoted" +call :add_arg slicer_args rawstring "" slicer-args "Extra arguments for the slicer configure, quoted" + +call :add_section "Diagnostics" +call :add_arg verbose bool v verbose "Show the compiler command lines" +call :add_arg dry_run bool D dry-run "Print the commands instead of running them" + +REM =========================================================================== +REM Lookup tables +REM =========================================================================== + +REM Known build configurations: the CMake build type, the directory to build +REM in, and the dependency tree to build against. Adding one means adding all +REM three entries in its group. The name is matched case-insensitively because +REM batch variable names are, so --config Debug finds cfg_type_debug. +REM +REM Release, RelWithDebInfo and MinSizeRel all link the /MD dependencies, so +REM they share one tree rather than each paying for its own. Debug needs /MDd +REM and cannot. deps/CMakeLists.txt makes the same split: only Debug turns on +REM DEP_DEBUG, while RelWithDebInfo just adds debug info to a release build. +set "cfg_type_release=Release" +set "cfg_dir_release=build" +set "cfg_dep_release=build" + +set "cfg_type_debug=Debug" +set "cfg_dir_debug=build-dbg" +set "cfg_dep_debug=build-dbg" + +set "cfg_type_relwithdebinfo=RelWithDebInfo" +set "cfg_dir_relwithdebinfo=build-dbginfo" +set "cfg_dep_relwithdebinfo=build" + +set "cfg_type_minsizerel=MinSizeRel" +set "cfg_dir_minsizerel=build-minsize" +set "cfg_dep_minsizerel=build" + +set "cfg_default=release" + +REM Known Visual Studio releases: the generator name, the suffix in the +REM WinGet id, and the major version vswhere and msbuild report. Adding a +REM release means adding all three entries in its group. +set "vs_gen_2019=Visual Studio 16 2019" +set "vs_winget_2019=.2019" +set "vs_year_16=2019" + +set "vs_gen_2022=Visual Studio 17 2022" +set "vs_winget_2022=.2022" +set "vs_year_17=2022" + +REM 2026 is the unversioned WinGet id: there is no Microsoft.VisualStudio.2026. +set "vs_gen_2026=Visual Studio 18 2026" +set "vs_winget_2026=" +set "vs_year_18=2026" + +set "vs_default=2026" + +REM What --install-vs asks WinGet for. +set "vs_edition_buildtools=BuildTools" +set "vs_edition_ide=Community" + +REM =========================================================================== +REM Command line handling +REM =========================================================================== + +call :handle_args %* +%error_check% + +if "%debugscript%" == "ON" ( + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, !range_end!) do ( + call :echo_var !argdefs[%%i].VARIABLE_NAME! + ) +) + +if "%~1" == "" ( + set print_help=ON + goto :before_print_help +) + +set "all_args=%*" +if "%all_args:"=%" == "" ( + set print_help=ON +) + +:before_print_help + +if "%print_help%" == "ON" ( + call :print_help_msg + exit /b 0 +) + +REM Say so before the first + line scrolls past. +if "%dry_run%" == "ON" echo Dry run: printing commands without running them. + +if "%kill_jobs%" == "ON" ( + echo Stopping build processes. + call :kill_image MSBuild.exe + call :kill_image ninja.exe + call :kill_image cl.exe + call :kill_image clang-cl.exe + exit /b 0 +) + +REM Neither test option can happen without building the slicer, so asking for +REM one asks for that, unless another action was already named. +if "%build_deps%%build_slicer%%pack_deps%%install_deps%%install_vs%" == "" ( + if "%build_tests%" == "ON" set "build_slicer=ON" + if "%run_tests%" == "ON" set "build_slicer=ON" +) + +REM Options like --config or -j only shape a build. Without one of the actions +REM there is nothing for them to shape, so say so rather than resolving a whole +REM build and reporting it took no time. The block above may have added one. +if "%build_deps%%build_slicer%%pack_deps%%install_deps%%install_vs%" == "" ( + echo Nothing to do. Pick an action: -d, -s, -p or -u. Run -h for the full list. + exit /b 1 +) + +REM =========================================================================== +REM Visual Studio and target architecture +REM =========================================================================== + +REM Asking for Visual Studio is asking to install prerequisites. Resolve the +REM edition here rather than testing whether the name is defined: `if defined` +REM stops at the first space, so "ide " would pass and then expand to nothing. +set "vs_edition=" +if not "%install_vs%" == "" ( + set "install_deps=ON" + set "vs_edition=!vs_edition_%install_vs%!" + if "!vs_edition!" == "" ( + echo Unknown Visual Studio edition "%install_vs%". Known editions: buildtools, ide. + exit /b 1 + ) +) +REM Autodetection overwrites vs_version, so snapshot whether it was pinned. +set "vs_pinned=%vs_version%" + +if not "%vs_version%" == "" if "%use_ninja%" == "ON" ( + echo --vs and --ninja select different generators. + exit /b 1 +) +REM install(TARGETS OrcaSlicer) carries no OPTIONAL, so installing a tree +REM whose executable was never built fails. Say so before the build starts. +if "%build_slicer%" == "ON" if "%install_slicer%" == "ON" if not "%slicer_target%" == "" if /I not "%slicer_target%" == "OrcaSlicer" ( + echo --install needs the executable, but --slicer-target names "%slicer_target%". + exit /b 1 +) +if not "%vs_version%" == "" if "!vs_gen_%vs_version%!" == "" ( + echo Unknown Visual Studio release "%vs_version%". Known releases: 2019, 2022, 2026. + exit /b 1 +) + +call :autodetect_vs +%error_check% + +REM autodetect leaves this empty when it finds nothing usable. +if "%vs_version%" == "" set "vs_version=%vs_default%" + +REM Default to the host CPU. PROCESSOR_ARCHITEW6432 covers a 32-bit shell on +REM a 64-bit OS, where PROCESSOR_ARCHITECTURE reads x86. +set arch=x64 +if /I "%PROCESSOR_ARCHITECTURE%" == "ARM64" set arch=ARM64 +if /I "%PROCESSOR_ARCHITEW6432%" == "ARM64" set arch=ARM64 +if not "%target_arch%" == "" ( + if /I "%target_arch%" == "arm64" ( + set arch=ARM64 + ) else ( + if /I "%target_arch%" == "x64" ( + set arch=x64 + ) else ( + echo Unknown architecture "%target_arch%". Expected x64 or arm64. + exit /b 1 + ) + ) +) + +REM =========================================================================== +REM Installing prerequisites +REM =========================================================================== + +if "%install_deps%" == "ON" ( + where winget >nul 2>nul + if not !errorlevel! == 0 ( + echo WinGet was not found + exit /b 1 + ) + REM Keep going after one failure so the rest still get installed, then + REM name the ones that did not rather than claiming they all did. + set "install_failed=" + set "winget_args=-e --source=winget" + if not "%install_vs%" == "" ( + set "vs_year=!vs_winget_%vs_version%!" + set "ide_component_flag=" + if /I "%install_vs%" == "ide" set "ide_component_flag=Microsoft.VisualStudio.Component.VC.CoreIde" + REM Two components: the clang-cl compiler itself, and the MSBuild + REM toolset that lets the Visual Studio generator drive it. One + REM install covers both x64 and ARM64. + set "clang_cl_flag=" + if "%use_clang_cl%" == "ON" set "clang_cl_flag=Microsoft.VisualStudio.Component.VC.Llvm.Clang Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset" + REM The x64 tools build the host tooling either way; targeting ARM64 + REM needs its own toolset on top of them. + set "arm64_tools_flag=" + if /I "%arch%" == "ARM64" set "arm64_tools_flag=Microsoft.VisualStudio.Component.VC.Tools.ARM64" + call :print_and_run winget install !winget_args! --id=Microsoft.VisualStudio!vs_year!.!vs_edition! --force --custom "--add !ide_component_flag! Microsoft.VisualStudio.Component.VC.Tools.x86.x64 !arm64_tools_flag! Microsoft.VisualStudio.Component.VC.CMake.Project Microsoft.VisualStudio.Component.Windows11SDK.22621 !clang_cl_flag!" + call :note_failed "Visual Studio" !errorlevel! + ) + + REM CMake 4 dropped pre-3.5 policy support and ships incomplete ASM_ARMASM + REM linker modules, which breaks Boost.Context on ARM64. CI pins the same way. + set "cmake_version_flag=" + if /I "%arch%" == "ARM64" set "cmake_version_flag=--version 3.31.8" + call :print_and_run winget install !winget_args! --id=Kitware.CMake !cmake_version_flag! + call :note_failed CMake !errorlevel! + call :print_and_run winget install !winget_args! --id=StrawberryPerl.StrawberryPerl + call :note_failed Perl !errorlevel! + call :print_and_run winget install !winget_args! --id=Git.Git + call :note_failed Git !errorlevel! + + if defined install_failed ( + set "die_reason=Failed to install:!install_failed!" + set rc=1 + goto :die + ) + + REM Flags to repeat back in the deferred build command. + set "next_flags=" + if "%use_clang_cl%" == "ON" set "next_flags=!next_flags! -l" + if "%use_ninja%" == "ON" set "next_flags=!next_flags! -x" + if not "%target_arch%" == "" set "next_flags=!next_flags! --arch %target_arch%" + + REM Name the build that was deferred, not a fuller one. + set "next_actions=" + if "%build_deps%" == "ON" set "next_actions=!next_actions!d" + if "%build_slicer%" == "ON" set "next_actions=!next_actions!s" + if "%pack_deps%" == "ON" set "next_actions=!next_actions!p" + if "!next_actions!" == "" set "next_actions=ds" + + echo. + echo ------------------------------------------------------------- + REM A dry run installed nothing, so do not report that it did. + if "%dry_run%" == "ON" ( + echo Dry run: nothing was installed. + ) else ( + echo Installed the prerequisites. + ) + echo. + echo Next + REM The new PATH cannot reach this shell, so the build runs in the next one. + echo Restart this shell so the new PATH takes effect, then + echo build_win.bat -!next_actions!!next_flags! + echo ------------------------------------------------------------- + exit /b 0 +) + +REM =========================================================================== +REM Resolving the build +REM =========================================================================== + +REM A value ending in a backslash escapes the closing quote when it is +REM spliced into a command line: -B "D:\tree\" reaches cmake as D:\tree" +REM and swallows the argument after it. No path here needs one. +call :trim_slash deps_dir +call :trim_slash slicer_dir +call :trim_slash clang_path + +REM Naming a specific clang-cl is naming clang-cl. Doing it before the +REM conflict check below means --clang-path with --msvc is caught there. +if not "%clang_path%" == "" set "use_clang_cl=ON" +if not "%clang_path%" == "" if not exist "%clang_path%" ( + echo No clang-cl at "%clang_path%". + exit /b 1 +) +REM A trailing backslash matches directories only, and a directory would +REM otherwise reach CMake as the compiler. +if not "%clang_path%" == "" if exist "%clang_path%\" ( + echo "%clang_path%" is a directory. Name clang-cl.exe itself. + exit /b 1 +) + +REM Naming a default explicitly is fine; naming both sides is not. +if "%use_clang_cl%" == "ON" if "%use_msvc%" == "ON" ( + echo --clang-cl and --msvc select different compilers. + exit /b 1 +) +if "%use_ninja%" == "ON" if "%use_msbuild%" == "ON" ( + echo --ninja and --msbuild select different generators. + exit /b 1 +) + +set "generator=!vs_gen_%vs_version%!" +if "%use_ninja%" == "ON" ( + set "generator=Ninja Multi-Config" + call :setup_dev_env + %error_check% + set "using_ninja=ON" +) + +call :resolve_clang_cl +%repeat_error% + +if "%using_ninja%" == "ON" ( + if "%use_clang_cl%" == "ON" ( + REM Quoted, because the resolved path has spaces in it. + set "gen_args=-DCMAKE_C_COMPILER="!clang_exe!" -DCMAKE_CXX_COMPILER="!clang_exe!"" + ) +) else ( + set "gen_args=-A !arch!" + if "%use_clang_cl%" == "ON" ( + set "gen_args=!gen_args! -T ClangCL" + ) +) + +if not "%clang_path%" == "" if not "%using_ninja%" == "ON" ( + echo --clang-path needs the Ninja generator; add -x. The Visual Studio + echo generator builds clang-cl through its own ClangCL toolset. + exit /b 1 +) + +set "cache_args=" +if "%cache%" == "" goto :cache_ready +if /I "%cache%" == "off" goto :cache_ready +if /I "%cache%" == "ccache" goto :cache_named +if /I "%cache%" == "sccache" goto :cache_named +echo Unknown --cache value "%cache%". Expected ccache, sccache or off. +exit /b 1 + +REM CMake accepts a compiler launcher under any generator but only runs it +REM under Makefile and Ninja. ccache also refuses cl.exe because the build +REM passes /Zi. +:cache_named +REM Only a configure records the launcher, so --no-configure needs none. +if "%no_configure%" == "ON" goto :cache_ready +if "%build_deps%%build_slicer%" == "" goto :cache_ready +if not "%using_ninja%" == "ON" goto :cache_needs_clang +if not "%use_clang_cl%" == "ON" goto :cache_needs_clang +goto :cache_tool + +:cache_needs_clang +echo --cache needs clang-cl and Ninja; add -l -x. +exit /b 1 + +REM Name a full path, so the recorded launcher does not depend on PATH. +:cache_tool +set "cache_exe=" +for /f "tokens=*" %%i in ('where %cache% 2^>nul') do ( + if not defined cache_exe set "cache_exe=%%i" +) +if not defined cache_exe ( + echo %cache% is not on PATH. Install it, or leave --cache off. + exit /b 1 +) +REM Forward slashes, so CMake does not read a backslash as an escape. +set "cache_exe=%cache_exe:\=/%" +set "cache_args=-DCMAKE_C_COMPILER_LAUNCHER="%cache_exe%" -DCMAKE_CXX_COMPILER_LAUNCHER="%cache_exe%"" +REM Neither cache stores a compile that uses a precompiled header. sccache +REM refuses /Fp outright. ccache does too unless its sloppiness is loosened, +REM and even then most hits fall back to the slower preprocessed mode. +set "no_pch=ON" + +:cache_ready + +REM Ninja prints [123/456] by default, which says nothing about how far +REM along it is or how long is left. %p is a percentage, %w and %W are +REM elapsed and remaining, but those two arrived in ninja 1.12 and an +REM unknown placeholder is fatal rather than a warning, so an older ninja +REM would abort the build instead of degrading. Ask which one is on PATH. +REM Keep %p first inside the brackets: VS Code reads the first digits% +REM it finds there to drive its progress bar. +if "%using_ninja%" == "ON" if not defined NINJA_STATUS ( + set "nj_major=0" + set "nj_minor=0" + for /f "tokens=1,2 delims=." %%a in ('ninja --version 2^>nul') do ( + set "nj_major=%%a" + set "nj_minor=%%b" + ) + set "NINJA_STATUS=[%%s/%%t %%p :: %%e] " + if !nj_major! GTR 1 set "NINJA_STATUS=[%%f/%%t %%p :: %%w / %%W] " + if !nj_major! EQU 1 if !nj_minor! GEQ 12 set "NINJA_STATUS=[%%f/%%t %%p :: %%w / %%W] " +) +if "%verbose%" == "ON" if defined NINJA_STATUS echo Ninja progress format: !NINJA_STATUS! + +if "%deps_target%" == "" ( + set "deps_target=deps" +) + +REM Only the builds need CMake. -p zips an existing tree with 7z. +if "%build_deps%%build_slicer%" == "" goto :cmake_ready + +cmake --version >nul 2>nul +if not !errorlevel! == 0 ( + echo CMake was not found. Have you installed the system dependencies? + exit /b 1 +) + +REM Strawberry Perl ships a c/bin full of GNU tools, and the top-level +REM CMakeLists refuses to configure when it precedes CMake on PATH. Put a +REM real CMake first, skipping any hit from Strawberry's own cmake.exe, or +REM this pins exactly the order it is meant to undo. The findstr needle +REM must not end in a backslash, which escapes the quote and matches nothing. +set "cmake_bin=" +for /f "delims=" %%i in ('where cmake 2^>nul') do ( + if not defined cmake_bin ( + echo %%~dpi| findstr /i /c:"\Strawberry\c\bin" >nul || set "cmake_bin=%%~dpi" + ) +) +if defined cmake_bin set "PATH=%cmake_bin%;%PATH%" +:cmake_ready + +if "%config%" == "" set "config=%cfg_default%" + +REM Judge what the lookup returned rather than whether the name is defined. +REM "release " passed `if defined` and then expanded to nothing, leaving an +REM empty build directory for --clean to remove. +set "build_type=!cfg_type_%config%!" +set "tree_name=!cfg_dir_%config%!" +set "dep_name=!cfg_dep_%config%!" +set "bad_config=" +if "!build_type!" == "" set "bad_config=ON" +if "!tree_name!" == "" set "bad_config=ON" +if "!dep_name!" == "" set "bad_config=ON" +if defined bad_config ( + echo Unknown configuration "%config%". Known configurations: release, debug, relwithdebinfo, minsizerel. + exit /b 1 +) + +REM A tree is only good for the configuration, compiler and architecture it +REM was made with. Change one underneath it and CMake resets its cache and +REM carries on, leaving ExternalProject stamps from the old toolchain and +REM sub-builds that fail scattershot on things that build fine from scratch. +REM So name the tree for all three. MSVC x64 keeps the historical names. +if "%use_clang_cl%" == "ON" set "tree_name=!tree_name!-clang" +if /I "%arch%" == "ARM64" set "tree_name=!tree_name!-arm64" +if "%use_clang_cl%" == "ON" set "dep_name=!dep_name!-clang" +if /I "%arch%" == "ARM64" set "dep_name=!dep_name!-arm64" + +set "build_dir=!tree_name!" +if not "%slicer_dir%" == "" set "build_dir=%slicer_dir%" + +REM Resolve it once. --build-dir may arrive absolute, relative, or with +REM forward slashes, and anything that prints the directory has to show a +REM real path rather than one glued onto the repository root. +for %%p in ("!build_dir!") do set "build_full=%%~fp" +echo Configuration: %build_type%, %arch% +if not "%clang_exe%" == "" echo Compiler: %clang_exe% +if "%no_pch%" == "ON" echo Precompiled header: off +if not "%cache_args%" == "" echo Compiler cache: %cache_exe% + +set "SIG_FLAG=" +if defined ORCA_UPDATER_SIG_KEY set "SIG_FLAG=-DORCA_UPDATER_SIG_KEY=%ORCA_UPDATER_SIG_KEY%" + +set "TESTS_FLAG=-DBUILD_TESTS=OFF" +if "%build_tests%" == "ON" set "TESTS_FLAG=-DBUILD_TESTS=ON" +if "%run_tests%" == "ON" set "TESTS_FLAG=-DBUILD_TESTS=ON" + +set "SLICER_TARGET_FLAG=" +if not "%slicer_target%" == "" set "SLICER_TARGET_FLAG=--target %slicer_target%" + +set "DEP_TREE=deps/!dep_name!" +set "DEP_TREE_PACK=%WP%\deps\!dep_name!" +set "DEP_TREE_FLAG=" +if not "%deps_dir%" == "" ( + set "DEP_TREE=%deps_dir%" + set "DEP_TREE_PACK=%deps_dir%" + set "DEP_TREE_FLAG=-DDEP_BUILD_DIR="%deps_dir%"" +) + +REM CMakeLists derives DEP_BUILD_DIR from the build directory NAME, which is +REM wrong whenever the build tree and the dependency tree are named +REM differently, as they are for every configuration that shares the release +REM dependencies. Name it outright once the two stop matching. +if "!DEP_TREE_FLAG!" == "" if not "%build_dir%" == "!dep_name!" ( + set "DEP_TREE_FLAG=-DDEP_BUILD_DIR="%WP%\deps\!dep_name!"" +) + +set "VERBOSE_FLAG=" +if "%verbose%" == "ON" set "VERBOSE_FLAG=--verbose" + +REM The two generators count differently. +REM +REM Ninja counts compilers, so -j is exact. The deps superbuild reads +REM CMAKE_BUILD_PARALLEL_LEVEL for the sub-builds it drives. +REM +REM MSBuild turns -j into /m, which counts projects, not compilers: /MP still +REM runs one cl per core inside each one, so -j 1 would not give one +REM compiler. CL_MPCount sets the /MP degree instead, and MSBuild reads +REM properties from the environment, so nested deps builds inherit it. /m +REM stays at its default of one project at a time. +set "JOBS_FLAG=" +if "%jobs%" == "" goto :jobs_ready +echo %jobs%| findstr /r /c:"^[1-9][0-9]*$" >nul +if errorlevel 1 ( + echo Invalid --jobs value "%jobs%". Expected a positive integer. + exit /b 1 +) +if "%using_ninja%" == "ON" ( + set "JOBS_FLAG=-j %jobs%" + set "CMAKE_BUILD_PARALLEL_LEVEL=%jobs%" +) else ( + set "CL_MPCount=%jobs%" +) +echo Parallel jobs: %jobs% +:jobs_ready + +REM The flags that reproduce this run, for the commands the summary suggests. +REM Kept in three parts because they are not all relevant everywhere: a deps +REM retry has no use for --build-dir, and the bundle line names its own tree. +set "recall_tc=" +if "%use_clang_cl%" == "ON" set "recall_tc=!recall_tc! -l" +if "%using_ninja%" == "ON" set "recall_tc=!recall_tc! -x" +if /I not "%config%" == "%cfg_default%" set "recall_tc=!recall_tc! --config %config%" +if not "%target_arch%" == "" set "recall_tc=!recall_tc! --arch %target_arch%" +if not "%vs_pinned%" == "" set "recall_tc=!recall_tc! --vs %vs_pinned%" +if not "%clang_path%" == "" set "recall_tc=!recall_tc! --clang-path "%clang_path%"" + +set "recall_i=" +if "%install_slicer%" == "ON" set "recall_i= -i" +set "recall_dd=" +if not "%deps_dir%" == "" set "recall_dd= --deps-dir "%deps_dir%"" +set "recall_bd=" +if not "%slicer_dir%" == "" set "recall_bd= --build-dir "%slicer_dir%"" +set "recall=!recall_tc!!recall_i!!recall_dd!!recall_bd!" + +REM =========================================================================== +REM Running the build +REM =========================================================================== + +REM CMake 4 refuses a pre-3.5 policy version; several deps still ask for one. +set CMAKE_POLICY_VERSION_MINIMUM=3.5 + +set _START_TIME=%TIME% + +if "%build_deps%" == "ON" ( + REM Which stage is running, so a failure can name it and suggest a + REM retry scoped to it rather than to the whole run. + set "stage=d" + echo Building the dependencies... + + if "%clean%" == "ON" ( + call :clean_tree "!DEP_TREE!" + %error_check% + ) + + if not "!cache_args!" == "" ( + set "deps_args=!deps_args! !cache_args!" + ) + + if not "%no_configure%" == "ON" ( + call :print_and_run cmake -S deps -B "!DEP_TREE!" -G "%generator%" %gen_args% -DCMAKE_BUILD_TYPE=%build_type% !deps_args! %ORCA_DEPS_CMAKE_ARGS% + %error_check% + ) + + call :print_and_run cmake --build "!DEP_TREE!" --config %build_type% --target %deps_target% %JOBS_FLAG% %VERBOSE_FLAG% + %error_check% +) + +if "%pack_deps%" == "ON" ( + set "stage=p" + setlocal ENABLEDELAYEDEXPANSION + call :print_and_run cd /d "!DEP_TREE_PACK!" + %error_check% + REM date /t prints in the machine locale and its field order varies by + REM region, which is how the inherited parse produced YYYYDDMM. Ask for + REM an unambiguous stamp instead. powershell.exe lives under + REM System32\WindowsPowerShell rather than System32, so a trimmed PATH + REM cannot find it and the stamp comes back empty. + set "ps=%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" + set "build_date=" + for /f %%d in ('!ps! -NoProfile -Command "Get-Date -Format yyyyMMdd"') do set "build_date=%%d" + if "!build_date!" == "" ( + set "die_reason=Could not read the date from !ps!." + set rc=1 + goto :die + ) + + REM A bundle is only good for what built it, so it carries the same parts + REM as the dependency tree. Release x64 on cl keeps the plain name. + set "dep_flavour=!cfg_dep_%config%!" + set "dep_flavour=!dep_flavour:build=!" + set "dep_variant=%arch%" + if "%use_clang_cl%" == "ON" set "dep_variant=!dep_variant!-clang" + set "dep_variant=!dep_variant!!dep_flavour!" + echo Packing the dependencies: OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip + + REM tools\7z.exe loads its codecs from a 7z.dll, and the repo does not + REM carry one, so it can only archive on a machine that has 7-Zip + REM installed. Windows has shipped bsdtar in System32 since 10 1803 and + REM it writes an ordinary deflate zip, so fall back to that rather than + REM failing on a machine that has everything it needs. + set "zipper=" + if exist "%WP%\tools\7z.dll" set "zipper=%WP%/tools/7z.exe a" + if not defined zipper if exist "%SystemRoot%\System32\tar.exe" set "zipper=%SystemRoot%\System32\tar.exe -a -c -f" + if not defined zipper ( + set "die_reason=No archiver. tools\7z.exe needs a 7z.dll, and this Windows has no System32\tar.exe." + set "die_hint=Install 7-Zip, or copy its 7z.dll into tools\." + set rc=1 + goto :die + ) + + call :print_and_run !zipper! OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip OrcaSlicer_dep + %error_check% + REM endlocal is about to discard the name, so carry the path out with it. + for %%z in ("!DEP_TREE_PACK!\OrcaSlicer_dep_win-!dep_variant!_!build_date!.zip") do endlocal & set "bundle=%%~fz" +) + +if "%build_slicer%" == "ON" ( + set "stage=s" + echo Building OrcaSlicer... + + if "%clean%" == "ON" ( + call :clean_tree "%build_dir%" + %error_check% + ) + + if "%slicer_asan%" == "ON" ( + set "slicer_args=!slicer_args! -DSLIC3R_ASAN=ON" + ) + + REM A later -DSLIC3R_PCH=ON in ORCA_SLICER_CMAKE_ARGS still wins, because + REM CMake takes the last definition on the command line. + if "%no_pch%" == "ON" ( + set "slicer_args=!slicer_args! -DSLIC3R_PCH=OFF" + ) + + if not "!cache_args!" == "" ( + REM Relative debug paths as well, so another tree can reuse the objects. + set "slicer_args=!slicer_args! !cache_args! -DSLIC3R_RELATIVE_DEBUG_PATHS=ON" + ) + + REM Configuring against a tree that was never built fails deep inside + REM package resolution. Name it here instead. Skipped when -d is about to + REM build it in this same run, and under a dry run, which configures + REM nothing and must not depend on what happens to be on the machine. + if not "%dry_run%" == "ON" if not "%no_configure%" == "ON" if not "%build_deps%" == "ON" if not exist "!DEP_TREE!\OrcaSlicer_dep\usr\local\" ( + for %%p in ("!DEP_TREE!") do set "die_reason=Dependencies not found at %%~fp" + set "die_hint=Build them with build_win.bat -d!recall!." + REM Only worth suggesting to someone who did not name a tree. + if "%deps_dir%" == "" set "die_hint=Build them with build_win.bat -d!recall!, or point --deps-dir at an existing tree." + set rc=1 + goto :die + ) + + if not "%no_configure%" == "ON" ( + call :print_and_run cmake -B "%build_dir%" -G "%generator%" %gen_args% -DORCA_TOOLS=ON %SIG_FLAG% %TESTS_FLAG% %DEP_TREE_FLAG% -DCMAKE_BUILD_TYPE=%build_type% !slicer_args! %ORCA_SLICER_CMAKE_ARGS% + %error_check% + ) + + call :print_and_run cmake --build "%build_dir%" --config %build_type% %SLICER_TARGET_FLAG% %JOBS_FLAG% %VERBOSE_FLAG% + %error_check% + + if "%run_tests%" == "ON" ( + call :print_and_run ctest --test-dir "%build_dir%/tests" -C %build_type% --output-on-failure + %error_check% + ) + + if not "%no_gettext%" == "ON" ( + call :print_and_run call scripts/run_gettext.bat + %error_check% + ) + + if "%install_slicer%" == "ON" ( + call :print_and_run cmake --build "%build_dir%" --target install --config %build_type% + %error_check% + ) +) + +REM Elapsed wall clock. The 1%%a-100 trick strips a leading zero, which set /A +REM would otherwise read as octal, and a negative total means the build ran +REM past midnight. +for /f "tokens=1-3 delims=:.," %%a in ("%_START_TIME: =0%") do set /a "_start_s=(1%%a-100)*3600+(1%%b-100)*60+(1%%c-100)" +for /f "tokens=1-3 delims=:.," %%a in ("%TIME: =0%") do set /a "_end_s=(1%%a-100)*3600+(1%%b-100)*60+(1%%c-100)" +set /a "_elapsed=_end_s - _start_s" +if %_elapsed% lss 0 set /a "_elapsed+=86400" +set /a "_hours=_elapsed / 3600" +set /a "_remainder=_elapsed - _hours * 3600" +set /a "_mins=_remainder / 60" +set /a "_secs=_remainder - _mins * 60" +call :summary +exit /b 0 + +REM Reached only by error_check, from the top level, where exit /b works. +REM The hash block is what CMakeLists already uses for a build that cannot +REM continue, so it means the same thing here. +:die +echo. +echo ############################################################# +REM The paths that set die_reason had no command fail, so last_cmd there +REM names one that succeeded. +if defined die_reason echo !die_reason! +if not defined die_reason if defined last_cmd echo Failed: !last_cmd! +if defined die_hint echo !die_hint! +echo Exit code %rc%. +REM -v only makes the build verbose, so it has nothing to offer a configure +REM that failed before any compiler ran. +set "failed_configure=" +if "!last_cmd:~0,9!" == "cmake -B " set "failed_configure=ON" +if "!last_cmd:~0,9!" == "cmake -S " set "failed_configure=ON" +REM Scoped to the stage that failed. Offering -c for the whole run would +REM discard a dependency tree that was not at fault, and neither flag does +REM anything for a failed pack. A named reason already carries its own advice. +if "!stage!" == "d" set "recall=!recall_tc!!recall_dd!" +if not defined die_reason if defined stage if not "!stage!" == "p" ( + echo. + echo Try + if not defined failed_configure echo build_win.bat -!stage!!recall! -v show the failing compiler command line + echo build_win.bat -!stage!!recall! -c discard that tree and configure from scratch +) +echo ############################################################# +exit /b %rc% + +REM =========================================================================== +REM Function definitions +REM =========================================================================== + +REM summary - what was produced, and what to do with it next. A dry run says +REM so rather than claiming the files exist, but every line below that is +REM worked out the same way in either run. +:summary + for %%p in ("!DEP_TREE!") do set "dep_full=%%~fp" + REM The binary only leaves the build tree when it is installed. + set "slicer_exe=%build_dir%\src\%build_type%\orca-slicer.exe" + if "%install_slicer%" == "ON" set "slicer_exe=%build_dir%\OrcaSlicer\orca-slicer.exe" + for %%p in ("!slicer_exe!") do set "slicer_full=%%~fp" + REM The 2026 generator writes OrcaSlicer.slnx, the releases before it + REM OrcaSlicer.sln. A file already there wins, in case an older CMake + REM configured the build. + set "solution=OrcaSlicer.sln" + if "%vs_version%" == "2026" set "solution=OrcaSlicer.slnx" + if exist "!build_full!\OrcaSlicer.sln" set "solution=OrcaSlicer.sln" + if exist "!build_full!\OrcaSlicer.slnx" set "solution=OrcaSlicer.slnx" + + REM Naming a target builds it and its dependencies, not its dependents, + REM so only a full build or the executable's own target relinks. + set "linked=ON" + if not "%slicer_target%" == "" set "linked=" + if /I "%slicer_target%" == "OrcaSlicer" set "linked=ON" + + echo. + echo ------------------------------------------------------------- + if "%dry_run%" == "ON" ( + echo Dry run: nothing was built. A real run would report: + ) else ( + echo Build completed in %_hours%h %_mins%m %_secs%s + ) + + if "%build_deps%" == "ON" echo Dependencies !dep_full! + if "%build_slicer%" == "ON" if "%linked%" == "ON" echo OrcaSlicer !slicer_full! + if "%build_slicer%" == "ON" if not "%linked%" == "ON" echo Target %slicer_target% + if "%build_slicer%" == "ON" if not "%using_ninja%" == "ON" echo Solution %build_full%\!solution! + if "%pack_deps%" == "ON" if defined bundle echo Bundle !bundle! + + echo. + echo Next + if "%build_slicer%" == "ON" ( + if "%linked%" == "ON" echo Run it !slicer_exe! + if not "%using_ninja%" == "ON" echo Open in Visual Studio %build_dir%\!solution! + if "%linked%" == "ON" echo Rebuild after edits build_win.bat -s!recall! --no-configure + if not "%linked%" == "ON" echo Relink the binary build_win.bat -s!recall! --no-configure + if "%linked%" == "ON" if "%using_ninja%" == "ON" echo Rebuild one target build_win.bat -s!recall! --no-configure --slicer-target libslic3r + if "%run_tests%" == "ON" echo Re-run the tests ctest --test-dir %build_dir%/tests -C %build_type% --output-on-failure + ) else ( + if "%build_deps%" == "ON" echo Build the slicer build_win.bat -s!recall! + ) + if "%pack_deps%" == "ON" echo Share the bundle unzip it elsewhere, then build_win.bat -s!recall_tc! --deps-dir ^ + echo ------------------------------------------------------------- + exit /b 0 + +:debug_msg + if "%debugscript%" == "ON" echo %* + exit /b 0 + +REM get_str_len -> length in %ret% +:get_str_len + setlocal + set "in=%~1" + for /L %%i in (0, 1, 100) do ( + if "!in:~%%i,1!" == "" ( + set out=%%i + goto :break_str_len + ) + ) + + echo error in get_str_len: string is too long + endlocal + exit /b 1 + + :break_str_len + endlocal & set ret=%out% + exit /b 0 + +:print_help_msg + setlocal + + REM Measure the widest flag column. Section headers have no flags and + REM must not widen it. + set flags= + set max_len=0 + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, %range_end%) do ( + if "!argdefs[%%i].TYPE!" == "section" ( + set "flags[%%i]=" + ) else ( + set str_placeholder= + if not "!argdefs[%%i].TYPE!" == "bool" ( + set "str_placeholder= " + ) + + REM The placeholder goes on the long form only. Repeating it on + REM the short one says nothing extra and costs eight columns. + set "flag_str=" + if not "!argdefs[%%i].SHORT_FLAG!" == "" ( + set "flag_str=-!argdefs[%%i].SHORT_FLAG!" + ) + + if not "!argdefs[%%i].LONG_FLAG!" == "" ( + if "!flag_str!" == "" ( + REM No short flag: pad so the long one lines up with the others. + set "flag_str= " + ) else ( + set "flag_str=!flag_str!, " + ) + set "flag_str=!flag_str!--!argdefs[%%i].LONG_FLAG!!str_placeholder!" + ) else ( + set "flag_str=!flag_str!!str_placeholder!" + ) + set "flag_str=!flag_str! " + set "flags[%%i]=!flag_str!" + call :get_str_len "!flag_str!" + if !ret! GTR !max_len! ( + set max_len=!ret! + ) + ) + ) + + set padding= + for /L %%i in (0, 1, %max_len%) do set "padding=!padding! " + + echo Builds OrcaSlicer and its dependencies on Windows. + echo. + echo Usage: %script_name% [options] + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, !range_end!) do ( + if "!argdefs[%%i].TYPE!" == "section" ( + echo. + echo !argdefs[%%i].HELP_TEXT!: + ) else ( + set "flag=!flags[%%i]!%padding%" + echo !flag:~0,%max_len%!!argdefs[%%i].HELP_TEXT! + ) + ) + echo. + echo Examples: + echo %script_name% --install-vs ide Set up a new machine, then restart the shell + echo %script_name% -ds Build the dependencies, then the slicer + echo %script_name% -s -l -x Rebuild the slicer with clang-cl and Ninja + echo %script_name% -s --no-configure -j 8 Rebuild quickly while iterating + echo %script_name% -s --slicer-target glad Compile one target to check the toolchain + echo %script_name% -l -x --run-tests Test that toolchain's build, not the default one + echo %script_name% -s -l -x --cache ccache Rebuild through a compiler cache + echo. + echo Environment: + echo ORCA_DEPS_CMAKE_ARGS Extra arguments for the deps configure + echo ORCA_SLICER_CMAKE_ARGS Extra arguments for the slicer configure + echo ORCA_UPDATER_SIG_KEY Update signing key baked into the slicer + echo git_commit_hash Revision to stamp into the build, as CI does + echo NINJA_STATUS Ninja progress format, if you want your own + echo debugscript Set to ON to trace this script + echo. + echo set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_BUILD_SANDBOXES=ON -DSLIC3R_WARNINGS=OFF + echo $env:ORCA_SLICER_CMAKE_ARGS = '-DSLIC3R_BUILD_SANDBOXES=ON' (PowerShell) + echo. + echo --deps-args and --slicer-args cannot carry a value with spaces; use + echo these instead. Neither form supports a value containing an ampersand. + endlocal + exit /b 0 + +REM add_section +:add_section + set argdefs[%argdefn%].VARIABLE_NAME= + set argdefs[%argdefn%].TYPE=section + set argdefs[%argdefn%].SHORT_FLAG= + set argdefs[%argdefn%].LONG_FLAG= + set argdefs[%argdefn%].HELP_TEXT=%~1 + set /A argdefn+=1 + exit /b 0 + +REM add_arg <variable> <type:bool,string,rawstring> <short> <long> <help> +:add_arg + set argdefs[%argdefn%].VARIABLE_NAME=%~1 + set argdefs[%argdefn%].TYPE=%~2 + set argdefs[%argdefn%].SHORT_FLAG=%~3 + set argdefs[%argdefn%].LONG_FLAG=%~4 + set argdefs[%argdefn%].HELP_TEXT=%~5 + + REM Start every option unset, so "defined" means the user gave it. + set %~1= + + if "%debugscript%" == "ON" ( + echo add_arg VARIABLE_NAME: !argdefs[%argdefn%].VARIABLE_NAME! + echo add_arg TYPE: !argdefs[%argdefn%].TYPE! + echo add_arg SHORT_FLAG: !argdefs[%argdefn%].SHORT_FLAG! + echo add_arg LONG_FLAG: !argdefs[%argdefn%].LONG_FLAG! + echo add_arg HELP_TEXT: !argdefs[%argdefn%].HELP_TEXT! + ) + + set /A argdefn+=1 + + exit /b 0 + +REM find_arg <type:short,long> <flag> -> index in %ret% +:find_arg + setlocal + call :debug_msg starting function: find_arg "%~1" "%~2" + + set type= + if /I "%~1" == "short" set type=SHORT + if /I "%~1" == "long" set type=LONG + if not defined type ( + endlocal + set ret= + exit /b 1 + ) + + call :debug_msg find_arg type=%type% + set /A range_end = %argdefn% - 1 + for /L %%i in (0, 1, %range_end%) do ( + if "!argdefs[%%i].%type%_FLAG!" == "%~2" ( + set idx=%%i + goto :find_arg_cont + ) + ) + + echo Error in find_arg: Failed to find arg "%~2" + call :print_help_msg + + endlocal + set ret= + exit /b 1 + + :find_arg_cont + call :debug_msg find_arg: found at %idx% + endlocal & ( + set ret=%idx% + ) + exit /b 0 + +REM set_arg <index> [<value>] +:set_arg + call :debug_msg starting function: set_arg "%~1" "%~2" + + if "%~1" == "" ( + echo Error in set_arg: no index provided + exit /b 1 + ) + + setlocal + if /I "!argdefs[%~1].TYPE!" == "bool" ( + call :debug_msg set_arg: setting bool type to ON + set val=ON + ) else ( + set "val=%~2" + set quote_char=" + REM Delayed expansion throughout: %val% here would be the value from the + REM previous call, since the whole block is parsed before it runs. + if "!val:~0,1!" == "!quote_char!" ( + if "!val:~-1,1!" == "!quote_char!" ( + set "val=!val:~1,-1!" + ) + ) + + call :debug_msg set_arg: setting string type to %~2 + ) + set var_name=!argdefs[%~1].VARIABLE_NAME! + + endlocal & ( + REM Set variable in parent scope + set "%var_name%=%val%" + + REM Add variable to finalize command + set "finalize_cmd=%finalize_cmd% & set "%var_name%=%val%"" + ) + + exit /b 0 + +REM get_arg_type <index> -> type in %ret% +:get_arg_type + call :debug_msg starting function get_arg_type "%~1" + setlocal + set type=!argdefs[%~1].TYPE! + endlocal & set ret=%type% + exit /b 0 + +REM echo_var <variable> +:echo_var + echo %~1=!%~1! + exit /b 0 + +:autodetect_vs + REM Nothing to detect once the release is pinned, or under Ninja. + if not "%vs_version%" == "" exit /b 0 + if "%use_ninja%" == "ON" exit /b 0 + + setlocal + + %VSWHERE% -nologo >nul 2>nul + if not !errorlevel! == 0 ( + REM vswhere is not in its usual place; try msbuild instead. + goto :msbuild_check + ) + + echo Detecting Visual Studio version using vswhere... + for /f "tokens=1 delims=." %%i in ('%VSWHERE% -nologo -products * -latest -property catalog_productDisplayVersion') do ( + set "VS_MAJOR=%%i" + goto :version_found + ) + + :msbuild_check + where msbuild >nul 2>nul + if not !errorlevel! == 0 ( + REM No msbuild either; leave the release empty and let the default apply. + endlocal + exit /b 0 + ) + + echo Detecting Visual Studio version using msbuild... + + REM The version line varies by release, so try two patterns for it. + set VS_MAJOR= + for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "^[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( + for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a + set MSBUILD_OUTPUT=%%i + goto :version_found + ) + + REM The same pattern unanchored, for releases that print a banner first. + if "%VS_MAJOR%"=="" ( + for /f "tokens=*" %%i in ('msbuild -version 2^>^&1 ^| findstr /r "[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"') do ( + for /f "tokens=1 delims=." %%a in ("%%i") do set VS_MAJOR=%%a + set MSBUILD_OUTPUT=%%i + goto :version_found + ) + ) + + :version_found + set "detected=!vs_year_%VS_MAJOR%!" + if not defined detected ( + echo Error: Unsupported Visual Studio major version: %VS_MAJOR% + endlocal + exit /b 1 + ) + echo Detected Visual Studio %VS_MAJOR% ^(!detected!^) + endlocal & set "vs_version=%detected%" + + exit /b 0 + +:setup_dev_env + REM A dry run runs nothing, and VsDevCmd costs seconds. + if "%dry_run%" == "ON" exit /b 0 + set "dev_arch=x64" + if /I "!arch!" == "ARM64" set "dev_arch=arm64" + %VSWHERE% -nologo >nul 2>nul + if not !errorlevel! == 0 ( + REM vswhere is not in its usual place; use the environment as it stands. + exit /b 0 + ) + + for /f "tokens=*" %%i in ('%VSWHERE% -nologo -products * -latest -property resolvedInstallationPath') do ( + set "VS_PATH=%%i" + goto :vs_path_found + ) + exit /b 0 + + :vs_path_found + call "%VS_PATH%\Common7\Tools\VsDevCmd.bat" -arch=!dev_arch! >nul 2>nul + set "VS_PATH=" + + exit /b 0 + +REM resolve_clang_cl - set clang_exe to the clang-cl a Ninja build uses. +REM VsDevCmd appends the Visual Studio LLVM directory to the end of PATH, +REM so a standalone LLVM already there shadows it. Name a full path. +:resolve_clang_cl + set "clang_exe=" + if not "%using_ninja%" == "ON" exit /b 0 + if not "%use_clang_cl%" == "ON" exit /b 0 + REM Only a configure uses it, so -p and --no-configure need none. + if "%no_configure%" == "ON" exit /b 0 + if "%build_deps%%build_slicer%" == "" exit /b 0 + + REM --clang-path wins. Forward slashes either way, so CMake does not + REM read a backslash as an escape. + if not "%clang_path%" == "" ( + set "clang_exe=%clang_path:\=/%" + exit /b 0 + ) + + setlocal + + REM Keyed on the host, not %arch%, because the x64 compiler + REM cross-compiles to ARM64. + set "llvm_host=x64" + if /I "%PROCESSOR_ARCHITECTURE%" == "ARM64" set "llvm_host=ARM64" + + set "found=" + %VSWHERE% -nologo >nul 2>nul + if !errorlevel! == 0 ( + for /f "tokens=*" %%i in ('%VSWHERE% -nologo -products * -latest -property resolvedInstallationPath') do ( + if exist "%%i\VC\Tools\Llvm\!llvm_host!\bin\clang-cl.exe" ( + set "found=%%i\VC\Tools\Llvm\!llvm_host!\bin\clang-cl.exe" + ) + ) + ) + + REM No clang toolset in Visual Studio. where lists every match, and the + REM first is the one PATH would resolve. + if "!found!" == "" ( + for /f "tokens=*" %%i in ('where clang-cl.exe 2^>nul') do ( + if "!found!" == "" set "found=%%i" + ) + if not "!found!" == "" echo Visual Studio has no clang-cl; using !found! from PATH. + ) + + if "!found!" == "" ( + echo No clang-cl found. Add the C++ Clang Compiler component with + echo %script_name% --install-vs ide -l + echo or name a standalone one with --clang-path. + endlocal + exit /b 1 + ) + + endlocal & set "clang_exe=%found:\=/%" + + exit /b 0 + +REM clean_tree <path> - remove a build tree, refusing anything that is not +REM one. Nothing here should ever fire; it is a floor under a bug that +REM produced a path far shorter than it looks. +:clean_tree + setlocal + set "target=%~1" + if not defined target ( + echo Refusing to clean: no directory to remove. + exit /b 1 + ) + + REM Resolve first, because "." and "deps/.." are shorter than they read. + for %%p in ("!target!") do set "full=%%~fp" + if "!full:~1!" == ":\" ( + echo Refusing to clean "!full!": that is a drive root. + exit /b 1 + ) + if /I "!full!" == "%WP%" ( + echo Refusing to clean "!full!": that is the repository itself. + exit /b 1 + ) + + call :print_and_run rmdir /S /Q "!full!" + exit /b !errorlevel! + +REM note_failed <name> <code> - record a failed install. Two winget codes +REM mean the tool is already there, which is what -u is for: +REM -1978335135 (0x8A150061) winget declined: a version is already there +REM -1978335189 (0x8A15002B) installed and already the newest version +:note_failed + if "%~2" == "0" exit /b 0 + if "%~2" == "-1978335135" exit /b 0 + if "%~2" == "-1978335189" exit /b 0 + set "install_failed=%install_failed% %~1" + exit /b 0 + +REM trim_slash <variable> - drop a trailing backslash from a path value. +REM A drive root keeps its own: "C:\" is not the same place as "C:". +:trim_slash + set "trim_value=!%~1!" + if not defined trim_value exit /b 0 + if not "!trim_value:~-1!" == "\" exit /b 0 + if "!trim_value:~-2!" == ":\" exit /b 0 + set "%~1=!trim_value:~0,-1!" + exit /b 0 + +REM kill_image <name> - stop every process of one image. The count is printed +REM first because taskkill can take a while and says nothing until it returns. +REM Never fails, so one stubborn image cannot stop the rest. +:kill_image + setlocal + REM A dry run does not count, so it prints the same on every machine. + if "%dry_run%" == "ON" ( + call :print_and_run taskkill /F /IM %~1 + endlocal + exit /b 0 + ) + set "img_count=0" + for /f "tokens=1" %%a in ('tasklist /nh /fi "IMAGENAME eq %~1" 2^>nul') do ( + if /I "%%a" == "%~1" set /a img_count+=1 + ) + if "!img_count!" == "0" ( + echo %~1: none running + endlocal + exit /b 0 + ) + echo %~1: stopping !img_count! + call :print_and_run taskkill /F /IM %~1 + endlocal + exit /b 0 + +REM print_and_run <command...> +:print_and_run + echo + %* + REM Recorded before the command runs. A set afterwards would clear the + REM errorlevel the next line returns, reporting every failure as a pass. + set "last_cmd=%*" + if not "%dry_run%" == "ON" ( + %* + exit /b !errorlevel! + ) + exit /b 0 + +REM handle_args <args...> +:handle_args + call :debug_msg starting function handle_args "%*" + if "%~1" == "" exit /b 0 + + setlocal + set arg=%~1 + set finalize_cmd= + + call :debug_msg Begin handling arg "%arg%" + + if not "%arg:~0,2%" == "--" goto :HAL_check_short + + call :debug_msg Processing long arg + + call :find_arg long %arg:~2% + %repeat_error% + set idx=%ret% + + call :get_arg_type %idx% + %repeat_error% + set type=%ret% + + if /I not "%type%" == "bool" ( + set "string_val=%~2" + if not defined string_val ( + echo Error in handle_args_loop: The option "%arg:~2%" requires a value + exit /b 1 + ) + + REM rawstring options carry cmake arguments, which start with a dash, so + REM only plain string options reject a value that looks like an option. + if /I "%type%" == "string" ( + if "!string_val:~0,1!" == "-" ( + echo Error in handle_args_loop: The option "%arg:~2%" requires a value. "!string_val!" looks like another option. + exit /b 1 + ) + ) + shift + ) + + call :set_arg %idx% "%string_val%" + %repeat_error% + goto :handle_args_loop_reset + + :HAL_check_short + if not "%arg:~0,1%" == "-" ( + echo Unknown argument: %arg% + call :print_help_msg + exit /b 1 + ) + + call :debug_msg processing short args + set /A charidx=1 + :short_arg_loop + if "!arg:~%charidx%,1!" == "" goto :handle_args_loop_reset + + call :find_arg short !arg:~%charidx%,1! + %repeat_error% + set idx=%ret% + + call :get_arg_type %idx% + %repeat_error% + set type=%ret% + + set /A start_idx = %charidx% + 1 + if /I not "%type%" == "bool" ( + REM A value may be attached (-j8) or be the next argument (-j 8). + set remaining=!arg:~%start_idx%! + if defined remaining ( + set string_val=!remaining! + ) else ( + set "string_val=%~2" + shift + ) + if not defined string_val ( + echo Error in handle_args_loop: The option "!arg:~%charidx%,1!" requires a value + exit /b 1 + ) + + REM As in the long-option branch above. + if /I "%type%" == "string" ( + if "!string_val:~0,1!" == "-" ( + echo Error in handle_args_loop: The option "!arg:~%charidx%,1!" requires a value. "!string_val!" looks like another option. + exit /b 1 + ) + ) + call :set_arg !idx! "!string_val!" + %repeat_error% + goto :handle_args_loop_reset + ) + + call :set_arg %idx% + %repeat_error% + set /A charidx+=1 + goto :short_arg_loop + + :handle_args_loop_reset + REM endlocal drops this iteration scope; finalize_cmd re-applies the options + REM it set, in the caller scope. + endlocal %finalize_cmd% + shift + goto :handle_args diff --git a/cmake/modules/PrecompiledHeader.cmake b/cmake/modules/PrecompiledHeader.cmake index 7ef80aacff..7d8b3a5603 100644 --- a/cmake/modules/PrecompiledHeader.cmake +++ b/cmake/modules/PrecompiledHeader.cmake @@ -256,6 +256,13 @@ function(add_precompiled_header _target _input) message(STATUS "Adding precompiled header ${_input} to target ${_target}.") target_precompile_headers(${_target} PRIVATE ${_input}) + # Clang records the modification time of every input in the precompiled + # header, which makes it differ between two checkouts of the same source + # and defeats a compiler cache. The build system already rebuilds the + # header when an input changes. + target_compile_options(${_target} PRIVATE + "$<$<CXX_COMPILER_ID:Clang,AppleClang>:SHELL:-Xclang -fno-pch-timestamp>") + get_target_property(_sources ${_target} SOURCES) list(FILTER _sources INCLUDE REGEX ".*\\.mm?") diff --git a/deps/Assimp/Assimp.cmake b/deps/Assimp/Assimp.cmake index 8b4de03b09..9b973a55d5 100644 --- a/deps/Assimp/Assimp.cmake +++ b/deps/Assimp/Assimp.cmake @@ -21,6 +21,9 @@ orcaslicer_add_cmake_project(Assimp URL ${_assimp_url} URL_HASH ${_assimp_hash} CMAKE_ARGS + # Assimp's ccache support sets the global RULE_LAUNCH_COMPILE, which breaks + # the Ninja RC rule. The superbuild forwards CMAKE_<LANG>_COMPILER_LAUNCHER. + -DASSIMP_BUILD_USE_CCACHE=OFF -DASSIMP_BUILD_TESTS=OFF -DASSIMP_BUILD_SAMPLES=OFF -DASSIMP_BUILD_ASSIMP_TOOLS=OFF diff --git a/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index bdd801857e..1526928094 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -24,6 +24,20 @@ if (MSVC AND DEP_DEBUG) set(_options "FORWARD_CONFIG") endif () +# Boost.Container's bundled dlmalloc passes int* where the Win32 Interlocked API +# takes volatile long*; cl compiles that with a warning, clang errors out. +set(_boost_c_flags_line "") +set(_boost_cxx_flags_line "") +if (MSVC AND CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(_boost_c_flags_line "-DCMAKE_C_FLAGS:STRING=-Wno-incompatible-pointer-types") + # The Visual Studio generator applies only the link language's flags to a + # project, and boost_container links as C++, so its C file never sees + # CMAKE_C_FLAGS. The C++ flags reach every file; keep CMake's defaults. + if (CMAKE_GENERATOR MATCHES "Visual Studio") + set(_boost_cxx_flags_line "-DCMAKE_CXX_FLAGS:STRING=${CMAKE_CXX_FLAGS} -Wno-incompatible-pointer-types") + endif () +endif () + orcaslicer_add_cmake_project(Boost ${_options} URL "https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz" @@ -38,6 +52,8 @@ orcaslicer_add_cmake_project(Boost "${_context_abi_line}" "${_context_arch_line}" "${_context_impl_line}" + "${_boost_c_flags_line}" + "${_boost_cxx_flags_line}" ) -set(DEP_Boost_DEPENDS ZLIB) \ No newline at end of file +set(DEP_Boost_DEPENDS ZLIB) diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 8f4bc2a215..e02186705b 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -55,6 +55,7 @@ endif () set(DEP_DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/DL_CACHE CACHE PATH "Path for downloaded source packages.") set(FLATPAK FALSE CACHE BOOL "Toggles various build settings for flatpak, like /usr/local in DESTDIR or not building wxwidgets") +option(SLIC3R_CAD "Build the SolveSpace solver and OCCT ModelingAlgorithms module the parametric Design/CAD tab needs. Must match the main project's SLIC3R_CAD." ON) if ("${DESTDIR}" STREQUAL "" OR "${DESTDIR}" STREQUAL "${AUTOGENERATED_DESTDIR}") if (LINUX AND (NOT DEFINED USE_OLD_DESTDIR_PREV OR USE_OLD_DESTDIR_PREV) AND EXISTS "${CMAKE_BINARY_DIR}/destdir/usr/local" AND NOT EXISTS "${CMAKE_BINARY_DIR}/OrcaSlicer_dep/usr/local") @@ -157,8 +158,16 @@ endif () function(orcaslicer_add_cmake_project projectname) cmake_parse_arguments(P_ARGS "FORWARD_CONFIG" "INSTALL_DIR;BUILD_COMMAND;INSTALL_COMMAND" "CMAKE_ARGS" ${ARGN}) + # MSVC is true for clang-cl as well, so the sub-build toolchain has to key on the + # generator. A non-Visual-Studio superbuild passes its own generator down, and with + # it the CMAKE_C_COMPILER / CMAKE_CXX_COMPILER forwarded below. + set(_dep_msvc_gen FALSE) + if (MSVC AND CMAKE_GENERATOR MATCHES "Visual Studio") + set(_dep_msvc_gen TRUE) + endif () + set(_configs_line -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}) - if (_is_multi OR MSVC) + if (_is_multi OR _dep_msvc_gen) if (P_ARGS_FORWARD_CONFIG) set(_configs_line -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}) elseif (ORCA_INCLUDE_DEBUG_INFO AND NOT DEP_DEBUG) @@ -174,15 +183,20 @@ function(orcaslicer_add_cmake_project projectname) set(_target_config "Release") endif() - if (MSVC) + if (_dep_msvc_gen) set(_gen CMAKE_GENERATOR "${DEP_MSVC_GEN}" CMAKE_GENERATOR_PLATFORM "${DEP_PLATFORM}") + # The toolset picks the compiler here, not the CMAKE_<LANG>_COMPILER + # forwarded below, so without it a clang-cl superbuild builds with cl. + if (CMAKE_GENERATOR_TOOLSET) + list(APPEND _gen CMAKE_GENERATOR_TOOLSET "${CMAKE_GENERATOR_TOOLSET}") + endif () else() set(_gen "") endif() if ($ENV{CMAKE_BUILD_PARALLEL_LEVEL}) set(_build_j "") # assume environment will control --build parallel setting - elseif(MSVC) + elseif(_dep_msvc_gen) set(_build_j "/m") else() set(_build_j "-j${NPROC}") @@ -350,6 +364,11 @@ include(GLEW/GLEW.cmake) include(GLFW/GLFW.cmake) include(OpenCSG/OpenCSG.cmake) +set(SLVS_PKG "") +if (SLIC3R_CAD) + include(SLVS/SLVS.cmake) + set(SLVS_PKG dep_SLVS) +endif () include(TBB/TBB.cmake) @@ -367,7 +386,7 @@ include(libnoise/libnoise.cmake) include(Draco/Draco.cmake) -# Assimp: glTF/GLB/FBX import for the texture-to-color feature. +include(FFMPEG/FFMPEG.cmake) include(Assimp/Assimp.cmake) @@ -439,6 +458,7 @@ set(_dep_list dep_NLopt dep_OpenVDB dep_OpenCSG + ${SLVS_PKG} dep_OpenCV dep_Eigen dep_CGAL @@ -451,6 +471,7 @@ set(_dep_list dep_libnoise dep_python3 dep_wxInspector + dep_FFMPEG dep_Assimp ) diff --git a/deps/CURL/CURL.cmake b/deps/CURL/CURL.cmake index a5ae1b9d00..3d649dfdea 100644 --- a/deps/CURL/CURL.cmake +++ b/deps/CURL/CURL.cmake @@ -56,6 +56,18 @@ else() set(_curl_static ON) endif() +# curl 7.75's configure probes and code rely on C laxness cl allows but clang +# errors on (implicit function declarations, int* vs u_long* in ioctlsocket), +# which flips probe results and misconfigures nonblock.c into the AmigaOS +# IoctlSocket branch. Relax both diagnostics so the probes behave like cl, and +# pin the camel-case probes off since they only "pass" by implicit declaration. +set(_curl_c_flags_line "") +set(_curl_probe_overrides "") +if (MSVC AND CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(_curl_c_flags_line "-DCMAKE_C_FLAGS:STRING=-Wno-implicit-function-declaration -Wno-incompatible-pointer-types") + set(_curl_probe_overrides -DHAVE_IOCTLSOCKET_CAMEL=0 -DHAVE_IOCTLSOCKET_CAMEL_FIONBIO=0) +endif () + orcaslicer_add_cmake_project(CURL # GIT_REPOSITORY https://github.com/curl/curl.git # GIT_TAG curl-7_75_0 @@ -69,6 +81,8 @@ orcaslicer_add_cmake_project(CURL -DBUILD_CURL_EXE:BOOL=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCURL_STATICLIB=${_curl_static} + "${_curl_c_flags_line}" + ${_curl_probe_overrides} ${_curl_platform_flags} ) diff --git a/deps/Draco/Draco.cmake b/deps/Draco/Draco.cmake index 02ac7efe13..77f73684f6 100644 --- a/deps/Draco/Draco.cmake +++ b/deps/Draco/Draco.cmake @@ -7,4 +7,7 @@ orcaslicer_add_cmake_project(Draco ${_options} URL https://github.com/google/draco/archive/refs/tags/1.5.7.zip URL_HASH SHA256=27b72ba2d5ff3d0a9814ad40d4cb88f8dc89a35491c0866d952473f8f9416b77 + CMAKE_ARGS + # The encoder and decoder tools duplicate draco.lib; see deps-windows.cmake. + "${DEP_LLD_FORCE_MULTIPLE}" ) \ No newline at end of file diff --git a/deps/Eigen/Eigen.cmake b/deps/Eigen/Eigen.cmake index 599976debb..2a9cc7105c 100644 --- a/deps/Eigen/Eigen.cmake +++ b/deps/Eigen/Eigen.cmake @@ -7,5 +7,20 @@ orcaslicer_add_cmake_project(Eigen URL https://gitlab.com/libeigen/eigen/-/archive/5.0.1/eigen-5.0.1.zip URL_HASH SHA256=0dbb1f9e3aaad66f352c03227d8c983f6f0b49e0b07e71a7300f4abcc01aee12 CMAKE_ARGS "${_eigen_extra_flags}" + # Only the headers are consumed here. Everything below builds nothing we + # use, and all three enable_language(Fortran): test/CMakeLists.txt:9, + # lapack/CMakeLists.txt:6 and blas/testing/CMakeLists.txt:2. They default + # to ON because the dependency configures as its own top-level project. + # + # Whether that probe is harmless depends on what CMake finds. The Visual + # Studio generator supports no Fortran, so it finds nothing; clang-cl sits + # next to the LLVM toolset's flang, which works. MSVC with Ninja finds + # Strawberry Perl's MinGW gfortran instead, which the deps build already + # requires for OpenSSL, and hands it the MSVC-style /machine:x64 that + # MinGW's ld reads as a missing input file. The configure dies there and + # takes the rest of the superbuild with it. + -DEIGEN_BUILD_TESTING=OFF + -DEIGEN_BUILD_BLAS=OFF + -DEIGEN_BUILD_LAPACK=OFF DEPENDS dep_Boost dep_GMP dep_MPFR ) diff --git a/deps/FFMPEG/FFMPEG.cmake b/deps/FFMPEG/FFMPEG.cmake new file mode 100644 index 0000000000..38e952bbdd --- /dev/null +++ b/deps/FFMPEG/FFMPEG.cmake @@ -0,0 +1,87 @@ +set(_conf_cmd ./configure) + +if (MSVC) + set(_source_dir "${CMAKE_BINARY_DIR}/dep_FFMPEG-prefix/src/dep_FFMPEG") + + set(PREBUILD_URL_arm64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-07-17-14-28/ffmpeg-n7.0.3-31-g9b6ffd74b5-winarm64-orca-shared-7.0.zip") + set(PREBUILD_HASH_arm64 "12f4140279f2f8469885e1b5b2e8be9d788882914c21523cacd56989f3548054") + set(PREBUILD_URL_x64 "https://github.com/Noisyfox/FFmpeg-Builds-Orca/releases/download/autobuild-2026-07-17-14-28/ffmpeg-n7.0.3-31-g9b6ffd74b5-win64-orca-shared-7.0.zip") + set(PREBUILD_HASH_x64 "e65916020ddb9ef84b2666dfbcbfc9b1d67f69d15b4a66db53754637bf2d498c") + + ExternalProject_Add(dep_FFMPEG + URL ${PREBUILD_URL_${DEPS_ARCH}} + URL_HASH SHA256=${PREBUILD_HASH_${DEPS_ARCH}} + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND + COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/bin" "${DESTDIR}/bin" + COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/lib" "${DESTDIR}/lib" + COMMAND ${CMAKE_COMMAND} -E copy_directory "${_source_dir}/include" "${DESTDIR}/include" + ) + +else () + if (APPLE) + set(_minos_cmd + "--extra-cflags=-mmacosx-version-min=${DEP_OSX_TARGET}" + "--extra-ldflags=-mmacosx-version-min=${DEP_OSX_TARGET}" + ) + # Static FFmpeg: nothing to bundle into the .app, no rpath handling. + # Disable the VideoToolbox/AudioToolbox HW-accel paths: the player decodes + # in software (swscale), and the auto-detected HW objects would drag in + # system frameworks that the static libs would then depend on. + set(_link_cmd --enable-static --disable-shared --disable-videotoolbox --disable-audiotoolbox) + if (IS_CROSS_COMPILE) + set(_cross_cmd --enable-cross-compile) + set(_pic_cmd --enable-pic) + if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64") + set(_arch_cmd --arch=arm64) + set(_cc_cmd "--cc=clang -arch arm64") + else() + set(_arch_cmd --arch=x86_64) + set(_cc_cmd "--cc=clang -arch x86_64") + endif() + endif() + else () + set(_link_cmd --enable-shared) + endif () + + set(_build_j -j) + if(DEFINED ENV{CMAKE_BUILD_PARALLEL_LEVEL}) + set(_build_j "-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}") + endif() + + ExternalProject_Add(dep_FFMPEG + URL https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz + URL_HASH SHA256=DEEDCABE339165214A3637DF4C86A507AEF0D793CF8774FF68735F4737E8DDBC + DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/FFMPEG + CONFIGURE_COMMAND ${_conf_cmd} + ${_cross_cmd} + ${_pic_cmd} + ${_arch_cmd} + ${_cc_cmd} + "--prefix=${DESTDIR}" + ${_link_cmd} + ${_minos_cmd} + --disable-doc + --enable-small + --disable-outdevs + --disable-filters + --enable-filter=*null*,afade,*fifo,*format,*resample,aeval,allrgb,allyuv,atempo,pan,*bars,color,*key,crop,draw*,eq*,framerate,*_qsv,*_vaapi,*v4l2*,hw*,scale,volume,test* + --disable-protocols + --enable-protocol=file,fd,pipe,rtp,udp + --disable-muxers + --enable-muxer=rtp + --disable-encoders + --disable-decoders + --enable-decoder=*aac*,h264*,mp3*,mjpeg,rv* + --disable-demuxers + --enable-demuxer=h264,mp3,mov + --disable-zlib + --disable-avdevice + BUILD_IN_SOURCE ON + BUILD_COMMAND make ${_build_j} + INSTALL_COMMAND make install + ) + +endif() diff --git a/deps/NLopt/NLopt.cmake b/deps/NLopt/NLopt.cmake index fdd6341f2b..07afc95a48 100644 --- a/deps/NLopt/NLopt.cmake +++ b/deps/NLopt/NLopt.cmake @@ -8,6 +8,8 @@ orcaslicer_add_cmake_project(NLopt -DNLOPT_GUILE:BOOL=OFF -DNLOPT_SWIG:BOOL=OFF -DNLOPT_TESTS:BOOL=OFF + # testopt is built regardless of NLOPT_TESTS; see deps-windows.cmake. + "${DEP_LLD_FORCE_MULTIPLE}" ) if (MSVC) diff --git a/deps/OCCT/0001-OCCT-fix.patch b/deps/OCCT/0001-OCCT-fix.patch index 27f5db7e0f..d251cc7ab6 100644 --- a/deps/OCCT/0001-OCCT-fix.patch +++ b/deps/OCCT/0001-OCCT-fix.patch @@ -1,3 +1,20 @@ +diff --git a/adm/cmake/occt_defs_flags.cmake b/adm/cmake/occt_defs_flags.cmake +index 00000000..00000001 100644 +--- a/adm/cmake/occt_defs_flags.cmake ++++ b/adm/cmake/occt_defs_flags.cmake +@@ -134,7 +134,11 @@ + set (CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}") + endif() + # Optimize size of binaries +- set (CMAKE_SHARED_LINKER_FLAGS "-Wl,-s ${CMAKE_SHARED_LINKER_FLAGS}") ++ # clang-cl reports the Clang compiler ID, and OCCT builds shared on Windows, ++ # where the MSVC-style linker gets this flag as an argument it does not know. ++ if (NOT WIN32) ++ set (CMAKE_SHARED_LINKER_FLAGS "-Wl,-s ${CMAKE_SHARED_LINKER_FLAGS}") ++ endif() + elseif(MINGW) + add_definitions(-D_WIN32_WINNT=0x0601) + # _WIN32_WINNT=0x0601 (use Windows 7 SDK) diff --git a/CMakeLists.txt b/CMakeLists.txt index d98acc0f..28eb8eb4 100644 --- a/CMakeLists.txt @@ -168,6 +185,32 @@ index d98acc0f..28eb8eb4 100644 endforeach() if (BUILD_SAMPLES_QT) +diff --git a/adm/cmake/occt_macros.cmake b/adm/cmake/occt_macros.cmake +index 224c96b1..8c94a1c5 100644 +--- a/adm/cmake/occt_macros.cmake ++++ b/adm/cmake/occt_macros.cmake +@@ -608,7 +608,7 @@ macro (OCCT_INSERT_CODE_FOR_TARGET) + install(CODE "if (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ee][Aa][Ss][Ee])$\") + set (OCCT_INSTALL_BIN_LETTER \"\") + elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Rr][Ee][Ll][Ww][Ii][Tt][Hh][Dd][Ee][Bb][Ii][Nn][Ff][Oo])$\") +- set (OCCT_INSTALL_BIN_LETTER \"i\") ++ set (OCCT_INSTALL_BIN_LETTER \"\") + elseif (\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Dd][Ee][Bb][Uu][Gg])$\") + set (OCCT_INSTALL_BIN_LETTER \"d\") + endif()") +diff --git a/adm/cmake/occt_toolkit.cmake b/adm/cmake/occt_toolkit.cmake +index 550e0e2f..7ac1a3b8 100644 +--- a/adm/cmake/occt_toolkit.cmake ++++ b/adm/cmake/occt_toolkit.cmake +@@ -241,7 +241,7 @@ + else() + set (aReleasePdbConf) + endif() +- install (FILES ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.pdb ++ install (FILES $<TARGET_PDB_FILE:${PROJECT_NAME}> + CONFIGURATIONS Debug ${aReleasePdbConf} RelWithDebInfo + DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}") + endif() diff --git a/src/Font/Font_FTFont.cxx b/src/Font/Font_FTFont.cxx index 5ae9899f..0a17372b 100644 --- a/src/Font/Font_FTFont.cxx diff --git a/deps/OCCT/OCCT.cmake b/deps/OCCT/OCCT.cmake index b4cd9facd2..45263d6ae3 100644 --- a/deps/OCCT/OCCT.cmake +++ b/deps/OCCT/OCCT.cmake @@ -1,9 +1,31 @@ +# clang-cl cannot emit IGESAppli_GeneralModule.cxx on ARM64 +# (llvm/llvm-project#62081). cl and clang-cl share an ABI. +set(_occt_compiler_args "") +if ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(_occt_compiler_args -DCMAKE_C_COMPILER:STRING=cl -DCMAKE_CXX_COMPILER:STRING=cl) +endif () + if(WIN32) set(library_build_type "Shared") else() set(library_build_type "Static") endif() +# SLIC3R_CAD (declared in deps/CMakeLists.txt) builds OCCT's ModelingAlgorithms module +# (fillet/offset/loft), whose only consumer is the parametric Design/CAD tab. With it OFF +# the deps prefix matches upstream exactly. +# +# With it ON the delta is THREE toolkits, not two: TKFillet (7.40 MiB archive, used via +# BRepFilletAPI), TKOffset (5.38 MiB, used via BRepOffsetAPI) and TKFeat (4.42 MiB), which +# nothing here references but which the module flag builds anyway -- it is all-or-nothing +# per module. The module's other nine toolkits are built either way, because DataExchange +# (the STEP path upstream already ships) depends on them. +# +# On macOS/Linux OCCT links statically, so an unreferenced toolkit costs build time and no +# shipped bytes. The Windows figure is a real DLL cost and has NOT been measured -- an +# earlier "3.77 MiB, Windows only" note here covered only two of the three toolkits and is +# not a number to quote. See docs/cad_dependency_weight.md. + if (IN_GIT_REPO) set(OCCT_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OCCT-prefix/src/dep_OCCT) endif () @@ -28,9 +50,10 @@ orcaslicer_add_cmake_project(OCCT #-DBUILD_MODULE_DataExchange=OFF -DBUILD_MODULE_Draw=OFF -DBUILD_MODULE_FoundationClasses=OFF - -DBUILD_MODULE_ModelingAlgorithms=OFF + -DBUILD_MODULE_ModelingAlgorithms=${SLIC3R_CAD} -DBUILD_MODULE_ModelingData=OFF -DBUILD_MODULE_Visualization=OFF + ${_occt_compiler_args} ) # add_dependencies(dep_OCCT ${FREETYPE_PKG}) diff --git a/deps/OpenCV/OpenCV.cmake b/deps/OpenCV/OpenCV.cmake index d8c7cbac3b..0290b3f47a 100644 --- a/deps/OpenCV/OpenCV.cmake +++ b/deps/OpenCV/OpenCV.cmake @@ -10,6 +10,13 @@ else () set(_options "") endif () +# carotene is OpenCV's ARM NEON HAL. It uses M_PI without _USE_MATH_DEFINES +# and does not compile with clang-cl. +set(_disable_carotene "") +if ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + set(_disable_carotene "-DWITH_CAROTENE=OFF") +endif () + if (IN_GIT_REPO) set(OpenCV_DIRECTORY_FLAG --directory ${BINARY_DIR_REL}/dep_OpenCV-prefix/src/dep_OpenCV) endif () @@ -83,5 +90,6 @@ orcaslicer_add_cmake_project(OpenCV -DWITH_PROTOBUF=OFF -DWITH_WIN32UI=OFF -DHAVE_WIN32UI=FALSE + ${_disable_carotene} ) diff --git a/deps/OpenSSL/OpenSSL.cmake b/deps/OpenSSL/OpenSSL.cmake index e43997265b..4a2d49572b 100644 --- a/deps/OpenSSL/OpenSSL.cmake +++ b/deps/OpenSSL/OpenSSL.cmake @@ -6,7 +6,7 @@ if(DEFINED OPENSSL_ARCH) set(_cross_arch ${OPENSSL_ARCH}) else() if(WIN32) - if("${CMAKE_GENERATOR_PLATFORM}" STREQUAL "ARM64") + if("${DEPS_ARCH}" STREQUAL "arm64") set(_cross_arch "VC-WIN64-ARM") else() set(_cross_arch "VC-WIN64A") @@ -17,10 +17,20 @@ else() endif() if(WIN32) - set(_conf_cmd perl Configure ) + set(_openssl_msvc_env CC=cl CXX=cl RC=rc CL=/FS) + # OpenSSL's perl Configure honors the CC environment variable, but the + # VC-WIN64A makefile only works with cl (an unquoted clang-cl path with + # spaces, e.g. exported by CLion, silently produces no .obj files and the + # lib step fails with LNK1181). Pin the upstream toolchain. + # Keep rc.exe resolved from the MSVC developer environment as well. The + # absolute Windows SDK path contains spaces and OpenSSL 1.1.1 writes it to + # the generated nmake file without quoting, which skips .res generation. + # /FS serializes access to OpenSSL's shared generated PDB when cl is + # driven through nmake from a Ninja configure step. + set(_conf_cmd ${CMAKE_COMMAND} -E env ${_openssl_msvc_env} perl Configure ) set(_cross_comp_prefix_line "") - set(_make_cmd nmake) - set(_install_cmd nmake install_sw ) + set(_make_cmd ${CMAKE_COMMAND} -E env ${_openssl_msvc_env} nmake) + set(_install_cmd ${CMAKE_COMMAND} -E env ${_openssl_msvc_env} nmake install_sw ) else() if(APPLE) set(_conf_cmd export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} && ./Configure -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}) @@ -70,6 +80,12 @@ ExternalProject_Add(dep_OpenSSL INSTALL_COMMAND ${_install_cmd} ) +if (CMAKE_GENERATOR MATCHES "Visual Studio") + # OpenSSL builds with cl, but MSBuild runs nmake in this project's toolset + # environment, and ClangCL's puts clang's headers first. Use the default. + set_target_properties(dep_OpenSSL PROPERTIES VS_PLATFORM_TOOLSET "$(DefaultPlatformToolset)") +endif () + ExternalProject_Add_Step(dep_OpenSSL install_cmake_files DEPENDEES install diff --git a/deps/PNG/PNG.cmake b/deps/PNG/PNG.cmake index 332fdfe274..a73e96a0c9 100644 --- a/deps/PNG/PNG.cmake +++ b/deps/PNG/PNG.cmake @@ -1,6 +1,10 @@ if (APPLE) # Only disable NEON extension for Apple ARM builds, leave it enabled for Raspberry PI. set(_disable_neon_extension "-DPNG_ARM_NEON=off") +elseif ("${DEPS_ARCH}" STREQUAL "arm64" AND CMAKE_CXX_COMPILER_ID STREQUAL Clang) + # libpng's CMake ignores PNG_ARM_NEON on Windows ARM64 and skips the NEON + # sources, but pngpriv.h enables NEON anyway. + set(_disable_neon_extension "-DCMAKE_C_FLAGS=/DWIN32 /D_WINDOWS /DPNG_ARM_NEON_OPT=0") else () set(_disable_neon_extension "") endif () diff --git a/deps/SLVS/CMakeLists.txt.in b/deps/SLVS/CMakeLists.txt.in new file mode 100644 index 0000000000..b09ad8da98 --- /dev/null +++ b/deps/SLVS/CMakeLists.txt.in @@ -0,0 +1,65 @@ +# Replaces the upstream SolveSpaceLib CMakeLists, which builds a demo executable and +# has no install rules. The sources themselves are used verbatim. +cmake_minimum_required(VERSION 3.13) + +project(SLVS VERSION 3.0) + +add_library(slvs + libslvs/constrainteq.cpp + libslvs/entity.cpp + libslvs/expr.cpp + libslvs/system.cpp + libslvs/util.cpp + libslvs/platform/unixutil.cpp + libslvs/lib.cpp + libslvs/SolveSpaceSystem.cpp) + +target_compile_features(slvs PUBLIC cxx_std_11) + +# LIBRARY strips the solver core out of the SolveSpace application it was extracted from. +target_compile_definitions(slvs PRIVATE -DLIBRARY) +if (MSVC) + target_compile_definitions(slvs PRIVATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS) +endif () + +target_include_directories(slvs + PUBLIC $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/libslvs/include> + PRIVATE ${PROJECT_SOURCE_DIR}/libslvs) + +# libslic3r is linked into shared targets, so this has to be position independent. +set_target_properties(slvs PROPERTIES POSITION_INDEPENDENT_CODE ON) + +# 2018 code, predating the project's warning settings; it is not ours to clean up. +if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + target_compile_options(slvs PRIVATE -w -fno-strict-aliasing) +endif () + +include(CMakePackageConfigHelpers) +include(GNUInstallDirs) + +write_basic_package_version_file( + "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + VERSION ${PROJECT_VERSION} + COMPATIBILITY AnyNewerVersion) + +install(TARGETS slvs + EXPORT ${PROJECT_NAME}Targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +set(ConfigPackageLocation ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + +install(EXPORT ${PROJECT_NAME}Targets + FILE "${PROJECT_NAME}Config.cmake" + NAMESPACE ${PROJECT_NAME}:: + DESTINATION ${ConfigPackageLocation}) + +install(FILES + ${PROJECT_SOURCE_DIR}/libslvs/include/slvs.h + ${PROJECT_SOURCE_DIR}/libslvs/include/SolveSpaceSystem.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + +install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION ${ConfigPackageLocation}) diff --git a/deps/SLVS/SLVS.cmake b/deps/SLVS/SLVS.cmake new file mode 100644 index 0000000000..69dcdc891f --- /dev/null +++ b/deps/SLVS/SLVS.cmake @@ -0,0 +1,13 @@ +# libslvs — the geometric constraint solver behind the Design tab's sketch constraints. +# Extraction of solvespace.com's libslvs, taken verbatim from JacobStoren/SolveSpaceLib; +# only the CMakeLists is ours, because upstream's builds a demo and installs nothing. +# GPLv3, compatible with this fork's licence. Self-contained: no external dependencies. +orcaslicer_add_cmake_project(SLVS + URL https://github.com/JacobStoren/SolveSpaceLib/archive/4d8704523e4bf212fadf5189f92484244f670fea.zip + URL_HASH SHA256=1c4bdde9c3c6ef20ea4b50b73601de56769f2eb131b36927d7c6489f102e6c30 + PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in ./CMakeLists.txt +) + +if (MSVC) + add_debug_dep(dep_SLVS) +endif () diff --git a/deps/deps-windows.cmake b/deps/deps-windows.cmake index 6e73f7d4b5..4305489758 100644 --- a/deps/deps-windows.cmake +++ b/deps/deps-windows.cmake @@ -42,6 +42,15 @@ else () message(FATAL_ERROR "Unsupported OS architecture: ${DEPS_ARCH}") endif () +# Draco's tools and NLopt's testopt compile sources that are also in their +# static library. MSBuild passes the library before the objects and lld-link +# resolves as it goes, so the library's copy wins and the object then reads as +# a duplicate. Nothing uses those executables, so let lld keep the first one. +set(DEP_LLD_FORCE_MULTIPLE "") +if (CMAKE_GENERATOR MATCHES "Visual Studio" AND CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(DEP_LLD_FORCE_MULTIPLE "-DCMAKE_EXE_LINKER_FLAGS:STRING=${CMAKE_EXE_LINKER_FLAGS} /FORCE:MULTIPLE") +endif () + if (${DEP_DEBUG}) set(DEP_BOOST_DEBUG "debug") else () diff --git a/deps/python3/arm64-unicodectype.props b/deps/python3/arm64-unicodectype.props new file mode 100644 index 0000000000..5f5727c842 --- /dev/null +++ b/deps/python3/arm64-unicodectype.props @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Compiles Objects/unicodectype.c without optimisation. VS 2026's ARM64 code + generator needs about 27 GB for _PyUnicode_ToNumeric, a switch with 1951 + cases. CPython has the same workaround (python/cpython#153668). --> +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Update="..\Objects\unicodectype.c"> + <Optimization>Disabled</Optimization> + <WholeProgramOptimization>false</WholeProgramOptimization> + </ClCompile> + </ItemGroup> +</Project> diff --git a/deps/python3/python3.cmake b/deps/python3/python3.cmake index e93045fe45..3e063fac4e 100644 --- a/deps/python3/python3.cmake +++ b/deps/python3/python3.cmake @@ -15,7 +15,13 @@ if(WIN32) # See https://github.com/python/cpython/issues/153438 # Patch from https://github.com/python/cpython/pull/153608 # This patch has not been merged to 3.12 yet so we need to apply it manually - set(_patch_cmd git init && ${PATCH_CMD} ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) + # + # Without core.autocrlf=false the patched find_python.bat comes out LF and + # cmd.exe cannot find its goto labels. + set(_patch_cmd git init + && ${GIT_EXECUTABLE} -c core.autocrlf=false apply --verbose + --ignore-space-change --whitespace=fix + ${CMAKE_CURRENT_LIST_DIR}/01-windows-nuget.patch) if(MSVC_VERSION EQUAL 1800) set(_python_platform_toolset v120) @@ -53,12 +59,9 @@ if(WIN32) set(_python_pcbuild_output_dir win32) endif() + # pybind11 undefines _DEBUG around Python.h so a debug build links the + # release python3xx.lib; Py_DEBUG could not load release plugin modules. set(_python_pcbuild_config Release) - set(_python_layout_debug OFF) - if(DEFINED DEP_DEBUG AND DEP_DEBUG) - set(_python_pcbuild_config Debug) - set(_python_layout_debug ON) - endif() # CPython's PCbuild needs a 64-bit-hosted toolchain: find_msbuild.bat picks the # 32-bit Bin\MSBuild.exe, whose x86 cl.exe/link.exe run out of address space @@ -85,8 +88,18 @@ if(WIN32) list(APPEND _python_env_args "PreferredToolArchitecture=${_python_tool_arch}") endif() + # MSBuild reads extra switches from PCbuild/msbuild.rsp. + set(_python_rsp "/p:PlatformToolset=${_python_platform_toolset}\n") + # VS 2026's ARM64 code generator needs about 27 GB for one function in + # Objects/unicodectype.c (python/cpython#153668); the property sheet compiles + # that file without optimisation. + if(_python_pcbuild_platform STREQUAL "ARM64") + file(TO_NATIVE_PATH "${CMAKE_CURRENT_LIST_DIR}/arm64-unicodectype.props" _python_arm64_props) + string(APPEND _python_rsp "/p:ForceImportAfterCppTargets=\"${_python_arm64_props}\"\n") + endif() + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/python3-msbuild.rsp" "${_python_rsp}") set(_conf_cmd - cmd /c "echo /p:PlatformToolset=${_python_platform_toolset}>PCbuild\\msbuild.rsp" + ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/python3-msbuild.rsp" <SOURCE_DIR>/PCbuild/msbuild.rsp ) set(_build_cmd ${CMAKE_COMMAND} -E env ${_python_env_args} @@ -101,7 +114,6 @@ if(WIN32) -DPYTHON_BUILD_DIR=<SOURCE_DIR>/PCbuild/${_python_pcbuild_output_dir} -DPYTHON_DEST_DIR=${DESTDIR}/libpython -DPYTHON_LAYOUT_ARCH=${_python_layout_arch} - -DPYTHON_DEBUG=${_python_layout_debug} -P ${CMAKE_CURRENT_LIST_DIR}/stage_windows.cmake ) elseif(APPLE) diff --git a/deps/python3/stage_windows.cmake b/deps/python3/stage_windows.cmake index b127f06b68..758e0be9f3 100644 --- a/deps/python3/stage_windows.cmake +++ b/deps/python3/stage_windows.cmake @@ -9,9 +9,6 @@ foreach(_var PYTHON_SOURCE_DIR PYTHON_BUILD_DIR PYTHON_DEST_DIR PYTHON_LAYOUT_AR endforeach() set(_python_exe "${PYTHON_BUILD_DIR}/python.exe") -if(PYTHON_DEBUG) - set(_python_exe "${PYTHON_BUILD_DIR}/python_d.exe") -endif() if(NOT EXISTS "${_python_exe}") message(FATAL_ERROR "Built Python executable not found: ${_python_exe}") @@ -49,22 +46,11 @@ endif() set(_required_files "${PYTHON_DEST_DIR}/Lib/encodings/__init__.py" "${PYTHON_DEST_DIR}/include/Python.h" + "${PYTHON_DEST_DIR}/python.exe" + "${PYTHON_DEST_DIR}/python${_python_abi}.dll" + "${PYTHON_DEST_DIR}/libs/python${_python_abi}.lib" ) -if(PYTHON_DEBUG) - list(APPEND _required_files - "${PYTHON_DEST_DIR}/python_d.exe" - "${PYTHON_DEST_DIR}/python${_python_abi}_d.dll" - "${PYTHON_DEST_DIR}/libs/python${_python_abi}_d.lib" - ) -else() - list(APPEND _required_files - "${PYTHON_DEST_DIR}/python.exe" - "${PYTHON_DEST_DIR}/python${_python_abi}.dll" - "${PYTHON_DEST_DIR}/libs/python${_python_abi}.lib" - ) -endif() - foreach(_required_file IN LISTS _required_files) if(NOT EXISTS "${_required_file}") message(FATAL_ERROR "Staged Python file missing: ${_required_file}") diff --git a/deps/wxInspector/wxInspector.cmake b/deps/wxInspector/wxInspector.cmake index 97c3810809..4a5b28407f 100644 --- a/deps/wxInspector/wxInspector.cmake +++ b/deps/wxInspector/wxInspector.cmake @@ -1,3 +1,26 @@ +# wxInspector finds wxWidgets through CMake's FindwxWidgets module, which only +# searches lib/vc*_lib because _WX_TOOL is hardcoded to "vc". A superbuild driven +# by clang-cl installs wxWidgets into lib/clang_x64_lib, so hand the module the +# directory wxWidgets actually used, derived the same way wxWidgetsConfig.cmake +# derives it. +set(_wxinspector_wx_hints "") +if (MSVC) + if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(_wx_compiler_prefix "clang") + else () + set(_wx_compiler_prefix "vc") + endif () + set(_wx_arch_suffix "") + if (CMAKE_GENERATOR_PLATFORM AND NOT CMAKE_GENERATOR_PLATFORM STREQUAL "Win32") + string(TOLOWER "_${CMAKE_GENERATOR_PLATFORM}" _wx_arch_suffix) + elseif (CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_wx_arch_suffix "_x64") + endif () + set(_wxinspector_wx_hints + "-DwxWidgets_ROOT_DIR=${DESTDIR}" + "-DwxWidgets_LIB_DIR=${DESTDIR}/lib/${_wx_compiler_prefix}${_wx_arch_suffix}_lib") +endif () + orcaslicer_add_cmake_project( wxInspector URL https://github.com/Noisyfox/wxInspector/archive/refs/tags/v1.0.0.zip @@ -6,6 +29,7 @@ orcaslicer_add_cmake_project( CMAKE_ARGS -DCMAKE_CXX_FLAGS="-DwxDEBUG_LEVEL=0" -DCMAKE_POSITION_INDEPENDENT_CODE=ON + ${_wxinspector_wx_hints} ) if (MSVC) diff --git a/deps/wxWidgets/0001-Clang-CL-fix.patch b/deps/wxWidgets/0001-Clang-CL-fix.patch deleted file mode 100644 index 23bf23b3f4..0000000000 --- a/deps/wxWidgets/0001-Clang-CL-fix.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- - build/cmake/wxWidgetsConfig.cmake.in | 10 +++++++++- - 1 file changed, 10 insertions(+), 1 deletion(-) - -diff --git a/build/cmake/wxWidgetsConfig.cmake.in b/build/cmake/wxWidgetsConfig.cmake.in -index 1a83f36..70ad8a4 100644 ---- a/build/cmake/wxWidgetsConfig.cmake.in -+++ b/build/cmake/wxWidgetsConfig.cmake.in -@@ -58,7 +58,16 @@ if(WIN32_MSVC_NAMING) - endif() - endif() - --include("${CMAKE_CURRENT_LIST_DIR}${wxPLATFORM_LIB_DIR}/@PROJECT_NAME@Targets.cmake") -+if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC") -+ if (CMAKE_GENERATOR_PLATFORM STREQUAL "ARM64" OR CMAKE_VS_PLATFORM_NAME STREQUAL "ARM64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "^(ARM64|arm64|aarch64)$") -+ set(_wx_clang_msvc_lib_dir "vc_arm64_lib") -+ else() -+ set(_wx_clang_msvc_lib_dir "vc_x64_lib") -+ endif() -+ include("${CMAKE_CURRENT_LIST_DIR}${wxPLATFORM_LIB_DIR}/${_wx_clang_msvc_lib_dir}/@PROJECT_NAME@Targets.cmake") -+else() -+ include("${CMAKE_CURRENT_LIST_DIR}${wxPLATFORM_LIB_DIR}/@PROJECT_NAME@Targets.cmake") -+endif() - - macro(wx_inherit_property source dest name) - # property name without _<CONFIG> --- -2.43.0 diff --git a/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch b/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch new file mode 100644 index 0000000000..decbee0ad9 --- /dev/null +++ b/deps/wxWidgets/0001-macos-use-srgb-colour-components.patch @@ -0,0 +1,29 @@ +diff --git a/src/osx/cocoa/colour.mm b/src/osx/cocoa/colour.mm +index 31515d146f..86b33e94a2 100644 +--- a/src/osx/cocoa/colour.mm ++++ b/src/osx/cocoa/colour.mm +@@ -125,3 +125,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA redComponent]; +@@ -134,3 +134,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA greenComponent]; +@@ -143,3 +143,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA blueComponent]; +@@ -152,3 +152,3 @@ + wxOSXEffectiveAppearanceSetter helper; +- if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] ) ++ if ( NSColor* colRGBA = [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] ) + return [colRGBA alphaComponent]; +@@ -160,3 +160,3 @@ + { +- return [m_nsColour colorUsingColorSpaceName:NSCalibratedRGBColorSpace] != nil; ++ return [m_nsColour colorUsingColorSpace:[NSColorSpace sRGBColorSpace]] != nil; + } diff --git a/deps/wxWidgets/wxWidgets.cmake b/deps/wxWidgets/wxWidgets.cmake index 07bb31d8be..e57e82f3e9 100644 --- a/deps/wxWidgets/wxWidgets.cmake +++ b/deps/wxWidgets/wxWidgets.cmake @@ -21,14 +21,23 @@ else () set(_wx_edge "-DwxUSE_WEBVIEW_EDGE=OFF") endif () +set(_wx_patch_command "") +if (APPLE) + set(_wx_patch_command + ${GIT_EXECUTABLE} checkout -f -- src/osx/cocoa/colour.mm + COMMAND ${GIT_EXECUTABLE} apply --verbose + ${CMAKE_CURRENT_LIST_DIR}/0001-macos-use-srgb-colour-components.patch + ) +endif () + orcaslicer_add_cmake_project( wxWidgets GIT_REPOSITORY "https://github.com/SoftFever/Orca-deps-wxWidgets" GIT_TAG v3.3.2 GIT_SHALLOW ON GIT_SUBMODULES 3rdparty/catch 3rdparty/pcre 3rdparty/libwebp + PATCH_COMMAND ${_wx_patch_command} DEPENDS ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} ${JPEG_PKG} - PATCH_COMMAND git apply --verbose --ignore-space-change --whitespace=fix ${CMAKE_CURRENT_LIST_DIR}/0001-Clang-CL-fix.patch CMAKE_ARGS -DwxBUILD_PRECOMP=ON ${_wx_toolkit} diff --git a/deps_src/admesh/stlinit.cpp b/deps_src/admesh/stlinit.cpp index a69bd5497a..9d44cdf266 100644 --- a/deps_src/admesh/stlinit.cpp +++ b/deps_src/admesh/stlinit.cpp @@ -162,7 +162,7 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor rewind(fp); try{ char solid_name[256]; - int res_solid = fscanf(fp, " solid %[^\n]", solid_name); + int res_solid = fscanf(fp, " solid %255[^\n]", solid_name); if (res_solid == 1) { char* mw_position = strstr(solid_name, "MW"); if (mw_position != NULL) { @@ -170,7 +170,7 @@ static bool stl_read(stl_file *stl, FILE *fp, int first_facet, bool first, Impor char version_str[16]; char model_id_str[128]; char country_code_str[16]; - int num_values = sscanf(mw_position + 3, "%s %s %s", version_str, model_id_str, country_code_str); + int num_values = sscanf(mw_position + 3, "%15s %127s %15s", version_str, model_id_str, country_code_str); if (num_values == 3) { if (strcmp(version_str, "1.0") == 0) { model_id = model_id_str; diff --git a/docs/CAD/GAP_ANALYSIS_vs_ONSHAPE.md b/docs/CAD/GAP_ANALYSIS_vs_ONSHAPE.md new file mode 100644 index 0000000000..bf603cf2c1 --- /dev/null +++ b/docs/CAD/GAP_ANALYSIS_vs_ONSHAPE.md @@ -0,0 +1,160 @@ +# Orca-CAD vs Onshape — capability gap analysis + +Generated 2026-07-22 by enumerating the source, not from recollection: +`CadFeatureType` and `add_*` in `src/libslic3r/CAD/CadDocument.hpp`, `Tool` in +`src/slic3r/GUI/CAD/DesignPanel.hpp`, `Mode` in `src/slic3r/GUI/CAD/DesignSketchTool.hpp`, +`SketchConstraintType` + `SketchEntity::Type` in `src/libslic3r/CAD/SketchEngine.hpp`, +and the JSON-RPC dispatch in `src/slic3r/GUI/CAD/McpControl.cpp`. + +**Scope note.** Onshape is a cloud PLM platform; Orca is a Design tab inside a +slicer. A large share of Onshape's surface (release management, branching, real-time +collaboration, FEA, rendering, PDM) is out of scope by construction and is listed +separately at the bottom rather than counted as a "missing tool". + +--- + +## 1. What Orca already has + +### 2D sketcher — near parity with Onshape +This is the strongest area. Very little is missing. + +| Category | Orca | +|---|---| +| Entities | Line, Polyline, Arc (3-point / tangent / center), Circle (center / 2-point / 3-point), Point, Ellipse, Elliptical arc, B-spline | +| Shapes | Rectangle (corner / center / oblique / rounded), Slot, Arc-slot, Polygon | +| Edit ops | Fillet, Chamfer, Offset, Mirror, Trim, Extend | +| Transforms | Move, Rotate, Scale, Linear array, Polar array | +| Constraints (19) | Fix, Coincident, Horizontal, Vertical, Distance, LockX, LockY, EqualLength, Parallel, Perpendicular, Concentric, Tangent, Midpoint, Symmetric, Angle, Radius, Diameter, PointOnLine, PointOnObject | +| Dimensions | Length, Diameter, Radius, Angle, Distance, Distance-to-line | + +Solver: vendored SolveSpace (`libslvs`, GPL-3.0) — the same solver lineage as a +commercial-grade sketcher. + +### Part features + +| Present | Notes | +|---|---| +| Extrude | + up-to-face / up-to-point, taper, flip | +| Revolve | angle-arc gizmo | +| Sweep | along a path | +| Loft | multi-profile | +| Fillet / Chamfer | edge-level | +| Draft | face taper | +| Shell | wall thickness + open face | +| Hole / Thread | face-aware placement | +| Pattern | linear + circular | +| Boolean | New / Add / Cut / Intersect, with face-mating | +| Cut | plane-based, signed offset | +| Datum plane | offset / 2-face / 2-edge derived | +| Import | STEP (B-rep) + mesh→B-rep (native mesh2step port) | +| Export | STEP (native B-rep, not tessellated) | +| Multi-body | + per-body colour | +| Section view | with flip | +| Undo/redo | full feature-tree recompute | +| 3MF persistence | parametric recipe survives save/load | + +### Automation +9 MCP JSON-RPC methods: `describe_tools`, `describe_scene`, `query_topology`, +`measure`, `slice_body`, `import_step`, `import_mesh`, `validate_against`, plus +build actions `extrude`, `revolve`, `fillet`, `chamfer`, `hole`, `boolean`, `pattern`. +Onshape's equivalent is its REST API + FeatureScript. + +--- + +## 2. Missing tools — ranked by impact + +### Tier 1 — structural absences (whole subsystems) + +**1. Assemblies and mates.** Entirely absent. No assembly document, no mate +connectors, no fastened / revolute / slider / cylindrical / planar / ball / pin-slot +mates, no assembly patterns, no interference detection, no exploded views. +`bool_target_face` / `bool_tool_face` do face-to-face *mating* for a boolean, which +is geometric alignment, not a kinematic joint. +*Impact:* multi-part products cannot be positioned or validated as a mechanism. +*Note:* an MCP-side `align_instance_to_face` / `create_*_mate` vocabulary already +exists on the Onshape bridge in this workspace, so the target semantics are known. + +**2. Drawings / 2D documentation.** Absent. No drawing sheets, dimensioned views, +section/detail views, GD&T, title blocks, or BOM. +*Impact:* nothing manufacturable-by-a-third-party leaves the tool. For 3D printing +this matters less than for machining, which is the honest reason it is Tier 1 by +CAD convention but arguably Tier 3 for this product. + +**3. Variables, equations, configurations.** Absent — no `add_variable`, no +expression evaluation, no configuration table. Every dimension is a literal double. +*Impact:* this is the biggest *parametric* gap. "Make this bracket for an M4 vs M5 +bolt" requires re-editing every dependent feature by hand. Onshape's Variable +Studio + configurations are a core differentiator, and this is the cheapest Tier 1 +item to close for the size of the payoff. + +**4. Surface modelling.** Absent. No surface extrude/revolve/loft/sweep, no fill, +knit, trim/extend surface, offset surface, or thicken. Orca is solid-only. +*Impact:* organic/complex shapes and repair of imported junk geometry are impossible. +OCCT already provides all of it (`TKOffset`, `TKBRep`), so the kernel is not the +blocker — only UI and feature plumbing. + +**5. Sheet metal.** Absent. No flange, bend, tab, relief, or flat-pattern unfold. +*Impact:* arguably out of scope for an FDM slicer; listed for completeness. + +### Tier 2 — individual features with clear demand + +| Missing | Why it matters | Cheap? | +|---|---|---| +| **Mirror body** (part-level) | Sketch mirror exists; mirroring a *solid* about a plane does not. Extremely common. | Yes — OCCT `gp_Trsf` mirror + fuse | +| **Helix / spiral curve** | No helix ⇒ no springs, no custom threads, no spiral vase geometry. Sweep exists but has no helical path to sweep along. | Yes | +| **Move / rotate body as a real feature** | `m_body_xform` exists but is **display-only** (memory #1655) — it never enters the B-rep. Export/boolean see the original position. | Medium | +| **Split body** | Cut removes material; splitting one body into two independently-usable bodies is absent. Very relevant for print-in-parts. | Medium | +| **Thicken** | Solid from a surface/face offset. | Needs surfaces | +| **Rib** | Standard structural feature. | Medium | +| **Delete face / move face / replace face** | Direct/dumb-solid editing — the main tool for fixing imported STEP. Given Orca imports STEP *and* meshes, its absence is felt. | Medium | +| **Datum axis, coordinate system** | Only datum *planes* exist. Axes are needed for revolve/pattern references. | Yes | +| **Mass properties** | `GeometryEngine` computes a volume internally, but there is no volume/mass/COM/inertia readout. For print cost/time estimation this is nearly free to expose. | Yes — trivial | +| **Measure tool in the GUI** | `measure` exists over MCP but there is no interactive measure in the UI. | Yes | +| **Hole standards library** | Hole exists, but no counterbore/countersink/tapped standards (ISO/ANSI) with callouts. | Medium | +| **Project / convert edges into a sketch** | Cannot reference existing solid edges as sketch geometry ("Use" in SolidWorks). A significant sketcher gap given everything else is present. | Medium | +| **Construction geometry** | Could not confirm a construction/reference-line flag on sketch entities. | Yes if absent | +| **Curve tools** | Projected curve, bridging curve, composite curve, 3D fit spline. | Medium | +| **Pattern on curve / pattern faces** | Pattern is linear + circular of whole bodies only; no curve-driven pattern, no feature/face pattern. | Medium | +| **Wrap / emboss** | Text or sketch wrapped onto a curved face. | Hard | +| **Enclose** | Solid from bounded void regions. | Medium | + +### Tier 3 — platform capabilities (out of scope by construction) + +Version control with branching/merging, release management, real-time multi-user +collaboration, cloud PDM, FeatureScript custom-feature authoring, simulation/FEA, +photorealistic rendering, app store/integrations. These are Onshape-the-platform, +not Onshape-the-modeller. Not defects in Orca. + +--- + +## 3. Recommended priority + +If the goal is "credible parametric CAD inside a slicer", the ordering that buys +the most capability per unit of work: + +1. **Variables + expressions** — unlocks genuine parametric reuse; no new kernel work. +2. **Mass properties + GUI measure** — nearly free, immediately useful for printing. +3. **Mirror body, datum axis, helix** — small, self-contained, high-frequency features. +4. **Promote move/rotate body from display-only to a real B-rep feature** — closes a + correctness gap, not just a missing tool (exports currently disagree with the view). +5. **Split body** — high value for print-in-parts workflows. +6. **Project edges into sketch** — the sketcher's most conspicuous hole. +7. **Surface modelling** — large, but OCCT already ships the algorithms. +8. **Assemblies** — largest effort; only worth it if Orca targets multi-part products. + +Deliberately last: drawings and sheet metal — high cost, low relevance to an +FDM-oriented tool. + +--- + +## 4. Honest summary + +Orca's **sketcher is at or near Onshape parity**, and its **solid feature set +covers the mainstream modelling path** (sketch → extrude/revolve/sweep/loft → +dress-up → boolean/pattern). What is absent is *breadth*: assemblies, surfaces, +sheet metal, drawings, and — most importantly for a tool calling itself parametric — +**variables and configurations**. + +The single most defensible criticism is #3: without variables, the feature tree is +parametric in *structure* but not in *value*, so the promise of "change one number +and the model updates" is only half delivered. diff --git a/docs/CAD/cad_dependency_weight.md b/docs/CAD/cad_dependency_weight.md new file mode 100644 index 0000000000..0b64ac8097 --- /dev/null +++ b/docs/CAD/cad_dependency_weight.md @@ -0,0 +1,136 @@ +# Dependency weight of the Design/CAD subsystem + +What the Design tab actually costs a maintainer who merges it. Written to be checkable: +every number below is reproducible with the command that produced it, and the places where +a number is still missing say so instead of guessing. + +Measured on Linux x86_64, OCCT V7_6_0, in the `snapmaker-deps` build image. + +## Summary + +| | Cost | +|---|---| +| New third-party dependencies | **none** | +| OCCT build flag | `BUILD_MODULE_ModelingAlgorithms=ON` | +| Extra OCCT toolkits *built* | 3 (TKFillet, TKOffset, TKFeat) | +| Extra OCCT toolkits *linked* | 2 (TKFillet, TKOffset) | +| Vendored code | `src/libslic3r/slvs`, 9,339 lines, 380 KiB, GPLv3 | +| Own object code | 6.79 MiB unstripped `.o` (7.13 MiB with the solver) | + +OCCT is **already** an upstream dependency — Orca uses it for STEP import. The Design tab +does not add a library; it turns on one more OCCT module. + +## The OCCT module flag + +`deps/OCCT/OCCT.cmake` gates the module on `SLIC3R_CAD`: + +```cmake +-DBUILD_MODULE_ModelingAlgorithms=${SLIC3R_CAD} # was hard-coded OFF +``` + +With `SLIC3R_CAD=OFF` the deps prefix matches upstream exactly. + +`ModelingAlgorithms` contains 12 toolkits, but **most were already being built**, because +`DataExchange` — the STEP path upstream already ships — depends on them. The honest delta is +only the toolkits that DataExchange's dependency closure does *not* reach: + +``` +ModelingAlgorithms = TKGeomAlgo TKTopAlgo TKPrim TKBO TKBool TKHLR + TKFillet TKOffset TKFeat TKMesh TKXMesh TKShHealing + +already required by DataExchange: TKBO TKBool TKGeomAlgo TKHLR TKMesh + TKPrim TKShHealing TKTopAlgo +true delta: TKFeat TKFillet TKOffset TKXMesh +``` + +Reproduce by walking `adm/MODULES` and each toolkit's `src/<TK>/EXTERNLIB` in the OCCT +source tree. + +### Sizes of the delta toolkits + +Static archives in the deps prefix. These are *build artifacts*, not shipped bytes — a +static link pulls in only the objects it references: + +| Toolkit | Archive | Referenced by the Design tab? | +|---|---|---| +| TKFillet | 7.40 MiB | yes — `BRepFilletAPI` | +| TKOffset | 5.38 MiB | yes — `BRepOffsetAPI`, `BRepOffset_` | +| TKFeat | 4.42 MiB | **no** | +| TKXMesh | — | not produced at all | + +TKFeat is worth calling out: nothing in the Design tab references it, and it is absent from +the `TKFillet`/`TKOffset` dependency closure, so it is built for nothing. OCCT's module flag +is all-or-nothing per module, which is why it comes along. It costs build time and zero +shipped bytes on any platform that links OCCT statically. + +**A correction to the record.** The comment in `deps/OCCT/OCCT.cmake` and the earlier +summary both said the delta was "TKFillet + TKOffset — 3.77 MiB, Windows only". The toolkit +list was incomplete: TKFeat is built too. The 3.77 MiB figure covers 2 of the 3 built +toolkits and has not been re-derived here — see the gap below. + +## What is not measured yet + +Two numbers a maintainer may reasonably ask for are **not** in this document, because +producing them honestly needs a build this machine cannot do: + +1. **Windows DLL delta.** OCCT builds shared on Windows, so the shipped cost there is real + DLL bytes rather than linker-selected objects. That needs a Windows build to size — + tracked as the cross-platform build proof (`gix`). +2. **Clean-build time delta.** Measuring it means building the deps prefix twice, with the + flag ON and OFF, on the same machine. The incremental figures from day-to-day work do not + answer the question and are not offered as if they did. + +Do not quote a number for either until it has been measured. + +## Vendored solver + +`src/libslic3r/slvs` — the 2D sketch constraint solver extracted from SolveSpace. + +- 19 files: 8 `.cpp`, 11 `.h`, plus `LICENSE` +- 9,339 lines, 380 KiB of source, 0.34 MiB of object code +- **GPLv3**, `LICENSE` preserved verbatim in the vendored directory + +The fork is **AGPLv3**. GPLv3 code combines into an AGPLv3 work without difficulty: AGPLv3 +§13 provides explicit compatibility in that direction. No licence question to resolve. + +It is live code, not a carried corpse — `SketchSolver.cpp` is its only consumer and drives +every sketch constraint in the Design tab. + +## Own code + +Object sizes from the release build (unstripped, so these include debug information and +overstate the shipped contribution): + +| Object | Size | +|---|---| +| DesignPanel.o | 2.22 MiB | +| McpControl.o | 1.69 MiB | +| DesignSketchTool.o | 0.88 MiB | +| CadDocument.o | 0.76 MiB | +| SketchEngine.o | 0.40 MiB | +| DesignCanvas.o | 0.37 MiB | +| GeometryEngine.o | 0.32 MiB | +| SketchSolver.o | 0.15 MiB | +| slvs (all objects) | 0.34 MiB | +| **total** | **7.13 MiB** | + +For scale, the linked binary is 137.1 MiB. + +## Reproducing + +```bash +# toolkit membership and dependency closure +R=<occt-source> +cat $R/adm/MODULES # module -> toolkits +cat $R/src/<TK>/EXTERNLIB # toolkit -> its dependencies + +# archive sizes +ls -l <deps-prefix>/lib/libTK{Fillet,Offset,Feat}.a + +# what the Design tab actually references +grep -rE 'BRepFilletAPI|BRepOffsetAPI|BRepOffset_|BRepFeat' src/libslic3r/ + +# vendored solver +wc -l src/libslic3r/slvs/*.cpp src/libslic3r/slvs/**/*.h +head -3 src/libslic3r/slvs/LICENSE +``` diff --git a/docs/CAD/cad_ux_guidelines.md b/docs/CAD/cad_ux_guidelines.md new file mode 100644 index 0000000000..d0290a1d3d --- /dev/null +++ b/docs/CAD/cad_ux_guidelines.md @@ -0,0 +1,704 @@ +# Orca-CAD — UX guidelines and design charter + +Status: proposed, v1. Owner: design working group. Applies to the Design tab — +the parametric CAD environment inside OrcaSlicer. + +This document is a **review instrument**, not an essay. Sections 3–9 are written +so that a reviewer can hold a pull request against them and get a yes or a no. +If a rule here cannot be failed, it is badly written and should be rewritten. + +--- + +## 1. Why this exists + +A CAD tool acquires its interface by accretion. Every feature arrives needing +"just one more field", the side panel is the cheapest place to put it, and after +forty features the product is FreeCAD: complete, respected, and abandoned by +almost everyone who opens it once. That end state is not a failure of any single +decision. It is the sum of forty locally reasonable ones taken without a written +rule to violate. + +So we write the rule down first, and we make additions argue against it. + +## 2. Product thesis + +**Orca-CAD is a modelling space for people who want a part, inside the tool that +prints it.** + +Three audiences, one interface: + +- **The fourteen-year-old on a school laptop.** Free software, on the machine + they already have, with no account, no subscription, no licence and no + tutorial. They open the tab because they want a bracket for a bike light, and + an hour later it is printing. This is not the charity case at the bottom of + the list — it is the reason the project is worth doing. A CAD tool that only + the equipped can run is a tool for people who were already going to design + something; this one has to be a creative instrument in the hands of someone + who did not yet know they could make things. Everything in §6.1 exists to + keep that door open, and nothing gets to close it for the convenience of the + other two audiences. +- **The maker** who has an idea and a printer, and who has bounced off FreeCAD. + They should be modelling something real within ten minutes of first opening + the tab, without a tutorial, without knowing the word "constraint". +- **The mechanical designer** who needs assemblies, mates, exploded views, + variables, and a feature history they can edit six months later. They should + not have to leave for SolidWorks the moment the work gets serious. + +The order matters. When a decision helps one audience and hurts another, the +earlier one wins unless there is a written argument for why not. + +The reference for *how it feels* is Shapr3D: direct, gestural, quiet, almost no +chrome, depth revealed by what you touch rather than by what is on screen. The +anti-references are Blender (a modal keyboard language you must learn before the +first success) and FreeCAD (a workbench-and-dialog architecture where the +geometry is a preview of a form you fill in elsewhere). + +We are not cloning Shapr3D's feature set. We are adopting its *interaction +economy*: the smallest number of visible controls that still makes an expert +fast. + +**And one thing neither reference has:** Orca-CAD lives inside a slicer. The +plate, the nozzle, the material and the print constraints are known to the +application at design time. Designing for print is not a plugin here, it is the +home advantage. Where a rule below trades generality for print-awareness, it +trades in favour of print-awareness. + +## 3. The laws + +Non-negotiable. A change that breaks one of these does not get merged on the +grounds that it was easier, that the alternative is more work, or that another +CAD does it that way. Each law carries a test — the question a reviewer asks. + +### L1 — Geometry first: you point, then you act + +Controls live **on the geometry**: handles, arrows, points, small circles and +boxes, with an inline label tab for typed values. Not in a side panel of combos +and spin fields. + +The canonical gesture: **select a face or plane in the viewport, then click the +sketch tool.** Never: click the sketch tool, then choose a plane from a list. +The tool consumes what you pointed at — and, better still, the thing you pointed +at offers the tool itself (§4). + +> **Test.** Can the operation be performed start to finish without the pointer +> leaving the viewport, except to press the tool itself? If a control had to be +> added to a panel to make it work, the design is not finished. + +This is the law the others serve. It was stated after two proposals in a row +reached for a dropdown, and the failure mode it names is real and recurrent: a +fix that "adds a row to the plane combo" is the side-panel pattern wearing a +different hat. + +### L2 — Everything draggable is typable, and everything typable is draggable + +Any value produced by direct manipulation (a fillet radius, an extrude depth, a +pattern spacing, a plane offset) shows a live label on the geometry, and that +label is an editable field. Any value entered numerically has a corresponding +handle in the viewport. + +Dragging is for finding the answer. Typing is for committing to it. A tool that +offers only one of the two is half a tool. + +> **Test.** Point at the number the tool produces. Can you drag it? Can you +> click it and type? Both must be yes. + +### L3 — Noun then verb, always the same way round + +Selection precedes action, without exception, across sketch tools, features, +dress-up, booleans and mates. There is no tool in the product that is armed +first and asks for its input afterwards. + +> **Test.** Does this tool work if the user has already selected the thing they +> want it applied to? Does it work *only* that way? + +### L4 — No modal dialog in the modelling loop + +Dialogs belong to document-level actions: open, save, import, export, preferences. +Modelling never opens one. A feature that needs three values gets three labels on +the geometry, not a form; a feature that needs confirming gets a ghost preview and +a confirm/cancel puck in the scene beside it (§4.2) — an object, not a window: the +camera still orbits, the values are still editable, nothing is blocked. + +> **Test.** Between starting an operation and seeing its result, does a window +> appear that must be dismissed? If yes, redesign. + +### L5 — One click, one visible change + +Every click either changes what is on screen or tells the user why it did not. +A click that opens something invisible, arms an invisible state, or requires a +second identical click to have any effect is a defect, not a design. + +This law exists because we shipped its violation twice. Sketch-tool family +buttons were flyouts whose first click only rendered a pressed state — three +separate sessions filed bugs against tools that were working. Solid picking used +a click *cycle* (first click selects the body, second refines to the face), so +sketching on a face appeared broken to anyone who clicked a face once, the way +every human does. + +> **Test.** Perform the gesture exactly once, as a first-time user would. Take a +> screenshot. Is the state visibly different, and is the difference the one the +> user intended? + +### L6 — The default is the answer four times out of five + +Every option that has a default must have the *common* answer as its default, +measured against real parts, not against generality. "New body" as the default +result of an extrude is wrong: most extrudes join. Radius as the input for a +circle is wrong: drawings give diameter. + +> **Test.** Take ten real parts. In how many is the default correct? Below eight, +> change the default or infer it from context. + +### L7 — Errors are caught before the commit, in the user's words + +A self-intersecting profile, a cut that removes no material, a wall thinner than +the nozzle: these are reported at the moment they become knowable, on the +geometry that is wrong, phrased as what happened and what to do — not as a kernel +exception after the fact, and never silently. + +> **Test.** Is the failure detectable before the user commits? Then it must be +> reported before the user commits. Read the message aloud: does it name a thing +> the user can see and an action they can take? + +### L8 — The camera is the application's job + +Selecting a sketch plane orients the view to it. Committing a feature does not +throw the camera away. Zoom-to-fit exists and is one keystroke. The user is never +required to fight the view in order to reach the geometry, and orbit is bound to +the gesture people actually try. + +> **Test.** Count camera manipulations in a representative modelling session. +> Any camera action the application could have performed for the user is a bug. + +### L9 — Accessible by construction, not by retrofit + +The floor, applied to every new interaction (details in §6.2): full keyboard +reach, no meaning carried by colour alone, hit targets that survive a shaky hand +and a HiDPI screen, legible labels over an arbitrary 3D background, no gesture +that depends on timing. + +> **Test.** Drive the whole interaction from the keyboard. Then drive it in +> greyscale. Both must work. + +### L10 — Vocabulary from the drawing office + +Names come from the language of people who make parts: fillet, chamfer, boss, +rib, counterbore, mate, exploded view. Not from the kernel (no "boolean +subtract", no "B-rep"), not from invented product-speak. Where the drawing-office +word and the beginner's word differ, use the drawing-office word and make the +tooltip teach it — an approachable tool that leaves the user unable to talk to a +machinist has failed them. + +> **Test.** Would a shop-floor engineer recognise this word? Would a first-time +> user be able to look it up and find a real definition? + +### L11 — The floor is a school laptop, and nothing is behind a door + +The product runs, completely, on a low-end laptop with integrated graphics and a +small screen, offline, with no account, no subscription and no feature withheld. +No capability in this document is reserved for a paid tier, a cloud service, a +plugin, or a machine with a discrete GPU — there is one product and everybody +gets all of it. + +> **Test.** On the reference low-end machine (§6.1), at 1366×768, with the +> network cable pulled and no account ever created: does this feature work, and +> is it usable at an honest frame rate? Any "no" is a defect, not a limitation. + +## 4. Interaction grammar — object-driven + +The rules above compose into one sentence the whole product obeys: + +> **Point at geometry → the geometry offers what can be done to it → choose the +> tool → manipulate handles and type exact values → confirm or cancel.** + +The selection does not merely feed the tool. **The selection determines which +tools exist.** Pick a planar face and the product shows you the small set of +things a planar face can become — sketch on it, extrude it, hole it, shell it, +put a datum on it. Pick an edge and that set is fillet, chamfer, and the sketch +tools that can use it as a reference. Nothing else is offered, because nothing +else is possible. + +This is the single largest thing we can do for a first-time user, and it is +worth stating as the reason: a beginner's difficulty is not operating a tool, +it is **not knowing which tools apply to what they are looking at**. A palette +of sixty icons answers a question they cannot yet ask. A face that offers its +own five verbs teaches the model of the product by using it. It also removes an +entire class of failure — a tool that silently does nothing because the +selection was wrong can no longer be reached. + +### 4.1 The offer, and the one thing that makes it work + +The flow, in full: + +> **left-click the geometry to select it → right-click to open the offer → a +> vertical list, always in the same order, each row an icon, a name and its +> keyboard shortcut → click.** + +- **Selecting and acting are separate gestures.** Left-click only ever selects, + so pointing at things is quiet — nothing pops up while you look around. + Right-click on the selection opens the offer, at the pointer, over the + geometry it acts on. +- **Order is fixed and it is the whole point.** A verb occupies one permanent + row, and that row is the same in every selection where the verb appears. + Dress-up is the fourth row on an edge, on a face, on a body, on the day the + product ships and two years later. The hand learns the position; the eye stops + being needed. +- **What does not apply is DISABLED IN PLACE, never removed.** This is the + single strongest thing the list does, and it is why it beat the radial we + drew first: a greyed row still carries its name *and the reason it is grey* — + "Create a sketch, or pick a solid face, first", "Create a solid body to + pattern first" — in the words the product already ships. On a first-run + document the offer is therefore not a mostly-empty control but a map of what + the product does and what you have to do first. +- **It is an accelerator, not a toll gate.** The toolbar and the single-letter + shortcuts keep working exactly as they do now, and pressing a tool directly + consumes the same selection (L3). An expert never has to open the offer; a + beginner never has to know the toolbar exists. Both routes land in the same + place — this is the only way one interface serves §2's three audiences. +- **Every row shows its keyboard shortcut**, right-aligned so the keys stack + into a column the eye learns without trying, beside the icon and the + drawing-office word (L10). This is deliberate: the offer is the path by which + a user stops needing the offer. You reach for fillet in its row, the row says + "F", and one day your hand types F before the menu has finished opening. A + menu that teaches its own shortcut is how a beginner becomes the power user + who never opens it — the same interface at two speeds, with no "advanced mode" + between them (§7). +- **A family with more than one applicable verb opens a submenu** to the side, + in its own fixed order. A family with exactly one shows that verb directly, so + the common path is never one click longer than it needs to be. +- **It never blocks the view of what it acts on**: it opens beside the pick, + never over it, with a thin leader back to the point it belongs to, and it + dismisses the moment the selection changes. +- **The header names what is selected** ("Top face · Body 1"), because a user + who mis-picked should find that out before choosing a verb, not after. + +#### Opening the offer on every machine + +Right-click is the primary gesture and every platform must have a first-class +equivalent — this is a reach requirement (L11), not a nicety: + +| Input | Gesture | +|---|---| +| Two-button mouse | right-click | +| Trackpad | two-finger tap (the OS-standard secondary click) | +| macOS, one-button mouse | **long-press**, and Ctrl-click, which is the platform convention | +| Keyboard | the Menu key, or Shift+F10, on the current selection | +| Touch / pen | long-press | + +The long-press is an **additional** route, never the only one — §6.2 forbids +press-and-hold as a sole path to a function, and it stays forbidden. Every +opening gesture is reachable at least two ways on every platform, and the +keyboard route exists everywhere. A long-press must show that it is charging +(a growing ring under the finger) so a user who holds too briefly learns why +nothing happened rather than concluding the product is broken (L5). + +#### The row-constancy invariant + +This is the rule that has to survive every future feature, so it is written as +an invariant rather than as advice: + +> **Every verb has exactly one row index in the offer. That index is identical +> for every selection type in which the verb appears. Verbs that do not apply to +> the current selection are DISABLED IN PLACE, with their reason — the offer is +> never compacted, re-sorted or re-ordered. Adding a verb never changes the +> index of an existing one.** + +Two consequences the group must accept together with the invariant: + +- **No adaptive ordering. Ever.** Not most-used-first, not recently-used-first, + not per-selection frequency. An offer that rearranges itself to be helpful + destroys the only thing that made it fast, and it does so precisely for the + user who has just started to learn it. (Office 2000's adaptive menus are the + textbook case; they were removed.) +- **Greyed rows are the price, and they are cheap.** A compacted menu is shorter + and unlearnable. A constant one is a few rows longer, teaches while it waits, + and is memorised in a week. + +#### The map — RATIFIED 2026-07-31 + +The invariant is not negotiable, and as of 2026-07-31 neither is the assignment: +the row order below is **ratified**. It was argued once; it is not argued again. +Changing an index from here on is a breaking change to every user's muscle +memory and needs the group, not a pull request (§9 q12). + +Eight families, ordered so the sequence itself has a logic: material is created, +grows, is taken away, is refined, is repeated, is moved, is referred to, is +edited. + +| Row | Family | On a face | On an edge | On a body | On text/art | +|---|---|---|---|---|---| +| **1** | Create | Sketch on it | — | — | Edit text | +| **2** | Add material | Extrude, thicken | — | Combine, thicken | Extrude | +| **3** | Remove | Hole, shell | Thread | Shell, cut, split | — | +| **4** | Dress-up | Draft | Fillet, chamfer | Fillet, chamfer | — | +| **5** | Repeat | Pattern | Pattern along it | Pattern, mirror | Pattern | +| **6** | Transform | Align to, mate | — | Move, mate | Move, size | +| **7** | Reference | Plane, axis, measure | Axis, measure | Project, measure, mass | — | +| **8** | Modify | Delete face, edit | — | Edit, colour, delete | Replace art | + +A dash means the row is drawn greyed for that selection, with its reason. + +The authoritative version of this table is **`docs/ux/tool_atlas.json`**, which +carries all 52 verbs with their preconditions and their refusal strings, taken +from the code rather than from memory. Every state it produces — 20 selection +kinds × 2 document states, 40 primary menus and 73 submenus — is rendered by +`docs/ux/mockups/gen_offer_mockups.py` into `docs/ux/offer_atlas.html`. Read the +atlas before proposing a change to the map; the generator refuses to render an +address collision, so the map cannot silently rot. + +#### Rejected: the radial ring + +The first design put the eight families at eight compass points around the pick. +It is recorded here because it is a good idea that loses on evidence, and +someone will propose it again: + +- an inapplicable slot could only be drawn empty, and **an empty slot says + nothing** — the reason text above has nowhere to live; +- the measured fill was **3.45 of 8 slots**, so most of the control was blank + most of the time, and on a fresh document only two of eight were live; +- sketch-mode *Create* needs **nine** addresses; eight forced two primitives + behind a "More" slot, and a ninth position costs the 45° spacing that made the + ring worth having; +- long translated names do not fit around a circle, and screen readers and arrow + keys need bespoke handling a list gets for free; +- a 380 px disc over the model costs more on a 1366×768 screen than a 324 px + list beside it (§6.1). + +What it kept — equidistant targets and a future flick gesture — buys little in a +product whose experts live on the keyboard by design. + +### 4.2 Confirm and cancel are objects, not gestures + +The old rule — click empty space to commit — is withdrawn. It was an invisible +gesture with a destructive meaning: nothing on screen said it, and a stray click +committed a feature the user was still adjusting. That is exactly what L5 +forbids, and it is hostile to the audience §6.1 exists for. + +- **A pending feature carries a confirm/cancel puck**, attached to the geometry + it is editing, next to its handles: ✓ commits, ✗ discards. Enter and Escape + mirror them for the keyboard (L9). It is drawn where the user's attention + already is, and it is the only thing in the viewport that commits. +- **Empty space now means "clear the selection"** — the safe meaning, and the + same meaning everywhere. +- **This is not a dialog** (L4). It is two objects in the scene, on the + geometry, non-modal: the camera still orbits, the tree is still there, the + values are still editable while it waits. +- **Continuous tools do not ask.** Drawing a line, a rectangle, a circle commits + each entity as its own gesture completes — a ✓ per line would destroy the + inner loop. The puck belongs to *features* (extrude, fillet, hole, pattern, + mate) and to sketch edits that hold a pending state. Enter/Escape end a + continuous tool rather than confirming an entity. +- **Ambiguity resolves toward keeping work, never toward losing it.** Starting + another operation while a valid feature is pending commits it rather than + discarding it; if it is not valid, the product says why (L7) and keeps it + pending. Since undo reaches everything (§6.1), the recoverable direction is + always the right default. + +### 4.3 The rest of the grammar + +- **The status line is one imperative sentence** naming what the tool wants + next, and it names the target when the target came from a selection + ("Circle — click centre, then radius · on the picked face"). It is the + authoritative feedback surface for the armed tool; the toolbar is not. +- **Hover previews, click commits.** A hover shows the ghost of what a click + would do wherever this is cheap to compute. +- **Selection is persistent and visible** until consumed or cleared. A tool that + consumes a selection clears it, so the next feature cannot silently inherit it. +- **Every gesture is undoable**, and the feature tree is editable history, not a + log. Re-editing a feature re-enters the same on-geometry interaction that + created it — including its offer and its puck. + +## 5. Layout and screen budget + +The viewport is the application. Chrome is a tax on it. + +- **One toolbar**, contextual to the mode (model / sketch). Tools are grouped by + what they make, not by which subsystem implements them. +- **A left rail for the document, not for parameters**: feature tree, bodies, + variables. It answers "what exists", never "what value should this be". +- **No parameter panel.** Where one exists today it is technical debt with a + scheduled removal (§10). +- **Print context is ambient**, not a panel: the plate is visible in the design + space, and print-domain warnings appear on the geometry that will fail. +- **Nothing is added to permanent chrome without removing something**, or + demonstrating that the addition is used in the majority of sessions. +- **The budget is set by the smallest screen we serve**, 1366×768 (§6.1) — not + by the reviewer's monitor. Chrome that fits a 27-inch display and swallows a + laptop's has not fitted, it has just failed somewhere the author cannot see. + +## 6. Accessibility — reach first, then the assistive floor + +"Accessible" means two different things and the product owes both. §6.1 is about +**who can get in at all**; §6.2 is about **who can operate it once inside**. +Neither is a phase. Both are merge requirements. + +### 6.1 Reach — the door has to be open + +The premise of the whole project: someone with no money, no licence, no account, +no fast machine and no teacher can open this and make a real thing. Free +software on a school laptop is the only path to a CAD tool that reaches people +who were never going to be handed one. If a design decision quietly raises the +cost of entry, it has broken the premise, however elegant it is. + +- **The reference machine.** A 5-year-old laptop: dual/quad-core CPU, + **integrated graphics**, 8 GB RAM, **1366×768** screen, no discrete GPU. The + Design tab must be usable there, and any interaction that needs more is a + design failure to be solved, not a requirement to be documented. The GPU path + degrades gracefully to software rendering rather than refusing to start; the + viewport stays interactive while the kernel thinks. +- **1366×768 is the layout target, not the stretch case.** A form-heavy side + panel is not merely inelegant on that screen — it takes the model off it. + This is the second, independent argument for the whole of L1 and §5. +- **No account, no cloud, no connection.** The product works forever with the + network unplugged. Nothing is uploaded, no sign-in gates any feature, no + telemetry is required to use it. A school network that blocks everything must + not be able to block this. +- **No tier, no plugin wall, no "pro".** Every feature named in this document is + in the product everyone downloads. Assemblies and exploded views are not the + paid half. +- **Files belong to the user**, on their disk, in a format that outlives the + project: the design travels inside the ordinary project file, and the geometry + exports to STEP and mesh formats anyone can open. +- **Learnable without instruction.** The first solid comes with no + documentation, no video and no tutorial mode — from noticing that a face can + be clicked. Tooltips teach the vocabulary (L10) at the moment it is needed; + nothing is explained in a manual the user will never open. +- **Plain language at the entry tier.** The Make tier speaks in words a + thirteen-year-old reads without stopping. Precision comes with the tier that + needs it, and everything is translated, because "accessible" in English only + is not accessible. +- **Exploration must be free.** Undo reaches everything, work is never lost to a + wrong click, and no dialog ever asks the user to be sure. A tool that punishes + experiments teaches people to stop experimenting, which is the one thing this + audience cannot afford to learn. +- **The product never blames the user.** Failures are stated as what happened + and what to do (L7). "Invalid input" is not an acceptable sentence anywhere. + +### 6.2 Assistive floor + +- **Keyboard**: every operation reachable and completable without a pointer. + Single-letter shortcuts for sketch tools, shown in the offer itself (§4.1) as + well as in the tooltip. The offer opens from the keyboard (Menu key or + Shift+F10) and walks by arrow key and by type-ahead, so the row map works for + someone who never touches the pointer. A visible focus state on every + focusable element. No shortcut that only works while the pointer happens to be + over the canvas. +- **Colour**: never the sole carrier of meaning. Selection is colour *and* + outline; an error is colour *and* an icon *and* text. Verify in greyscale. +- **Contrast**: labels over the 3D viewport get a scrim or halo so 4.5:1 holds + against any background the model can produce, including a white body under a + white plate. +- **Targets**: handles and grips no smaller than 32 px at 100 % scale, scaling + with the OS factor; the grab tolerance is larger than the drawn glyph. +- **Timing**: no double-click-to-mean-something-else, no press-and-hold as the + only route to a function, no cycle that depends on repeated clicks + (see L5). The long-press that opens the offer on a one-button Mac and on touch + (§4.1) is explicitly an *additional* route — Ctrl-click, two-finger tap and + the keyboard all reach the same place — and it shows its own progress while + charging, so it never fails silently. +- **Motion**: animation is functional (showing where a thing went), never + decorative, and it respects the reduced-motion preference. +- **Text**: no fixed-width assumptions; the UI holds together in German and in + Chinese, at 125 % and 200 % scale. Every string routed through the normal + translation path. + +## 7. Depth without clutter — the three tiers + +Power for experts is delivered by **progressive disclosure of tools, never by +relocation of tools**. A tool that appears in a later tier is in the same place +it will always be; it is simply not shown yet. + +| Tier | Who | What appears | +|---|---|---| +| **Make** | first hour | Sketch, extrude, revolve, hole, fillet/chamfer, move, commit to plate | +| **Model** | competent user | Patterns, shell, draft, sweep/loft, booleans, reference geometry, variables, import/export | +| **Mechanism** | mechanical designer | Assemblies and mates, exploded views, interference detection, surfaces, feature-level editing of imported solids | + +Rules that keep this honest: + +1. **Tiers are non-modal.** No mode switch, no workbench selector, no "advanced + mode" toggle that changes the meaning of anything. The tier only governs what + is *offered*. +2. **A tier reveals itself by use.** Using a body reveals boolean tools; adding + a second body reveals assembly tools. The product notices what you are doing. +3. **Nothing moves when a tier appears.** A user who learned where fillet lives + finds it in the same place forever. +4. **An expert tool obeys the same grammar** as a beginner tool. Mates are + picked in 3D like everything else, not configured in a table. +5. **Exploded views are a view state**, not a document mode — reversible, + draggable along mate axes, and never a separate file. + +## 8. Designing for print — the home advantage + +Design-time knowledge the application already has, and must use: + +- **The plate is present** in the design space, at the real size, with the real + origin. Committing a body to the plate is one action and preserves placement. +- **Print-domain checks run on the model, on the geometry, before slicing**: + walls thinner than the nozzle, unsupported overhangs beyond the material's + angle, features smaller than the layer height, a part that does not fit the + build volume. +- **These are warnings on the geometry, never a report.** The thin wall glows; + the tooltip says how thin and what the nozzle is. +- **Material and machine context is inherited** from the active slicer profile, + not re-entered in the Design tab. +- **The round trip is preserved**: editing a design after slicing returns to the + feature history, not to a mesh. + +## 9. The review gate + +Every pull request that touches the Design tab UI answers these, in the PR body. +A "no" that is not accompanied by an argument is a request for changes. + +1. Which law (L1–L11) does the change most directly serve? +2. Can the whole operation be completed without the pointer leaving the + viewport? If not, why is this the exception? + And: does the relevant selection *offer* this tool (§4.1), or must the user + already know it exists? +3. Are the values draggable *and* typable? +4. Screenshot of the state after **exactly one** click of the new gesture, + performed as a first-time user. +5. Keyboard-only walkthrough: does it complete? +6. Greyscale screenshot: is every state still distinguishable? +7. What was **removed**? (Net additions to permanent chrome require an argument.) +8. Which tier does it belong to, and does it appear without moving anything else? +9. What does it do when the geometry is invalid, and is that reported before the + commit? +10. Interaction cost: actions required for the canonical task it addresses, + before and after. +11. Reach (L11): screenshot at 1366×768 with the panel open — is the model still + on screen? Does it run on integrated graphics? Does it need the network, an + account, or a file the user cannot keep? +12. If the change adds or moves a verb in the offer: which row, and is it that + verb's row in **every** selection where it appears? Did any existing verb's + index change? (If yes, this is not a UI change, it is a breaking change to + every user's muscle memory, and it needs the group — see §4.1.) Was + `docs/ux/tool_atlas.json` updated and the atlas regenerated? +13. If the change adds a pointer gesture: what is its keyboard equivalent, and + what does a one-button Mac, a trackpad and a touch screen do (§4.1)? + +## 10. Where we stand today — honest inventory + +Complying with the laws already: + +- Sketch inline editors — draw an entity and its dimension tab opens on the + geometry; Tab walks Length → Width → Angle. +- Fillet/chamfer draggable radius arrow with an editable value label. +- Extrude depth arrow; move-body three-axis arrows. +- Datum-plane resize handles and offset arrow; ghost reference planes picked in + 3D. +- Imported-art place/size gizmo. +- Sketch plane taken from the picked face, with the target named in the status + line, and the sketch-plane dropdown deleted outright. + +Violating them, with removal scheduled: + +- **Every tool card is a two-column form** of combos and spin fields in the left + panel. This is the single largest debt in the product and the reason this + document exists. Tracked as an epic; each card is replaced by its on-geometry + equivalent, not improved in place. It fails L1 and it fails L11 twice over — + on a 1366×768 screen the cards leave the model a strip. +- Seven remaining plane pickers still populate a combo instead of consuming a + viewport selection. +- Pattern has no on-geometry spacing arrow or count badge. +- Hole is positioned by X/Y fields rather than by a point on a face. +- Booleans and cuts pick their operands from lists rather than in 3D. +- Fillet/chamfer edge selection still requires the click cycle L5 forbids. +- **Selecting geometry offers nothing.** There is no contextual offer (§4.1): + the user faces the full toolbar whatever they have picked, and finds out that + a tool did not apply by it doing nothing. This is the largest single item of + new work the charter asks for. The map and every state of it are already + drawn (`docs/ux/offer_atlas.html`); what the group owes itself before the code + is ratifying the row order, since every verb built before that lands has to be + addressed afterwards anyway. +- **Committing is an invisible click in empty space** rather than the + confirm/cancel puck of §4.2 — the exact gesture that rule withdraws. + +Nothing on the violating list is defended. The only open question for each is +what its on-geometry replacement should be. + +## 11. How the group works + +**Roles.** Product/UX lead (owns this document and casts the tie-break vote on +interaction questions); kernel maintainer; GUI maintainer; a print-domain +reviewer; a mechanical-design reviewer who uses the product on real work; an +accessibility reviewer covering both senses of §6 — reach and assistive — who +owns the reference machine and actually runs on it. One person may hold more +than one role; the UX lead and the mechanical-design reviewer should not be the +same person, and nobody reviews reach from a workstation. + +**The absent audience needs a seat.** The fourteen-year-old is not in the room +and cannot file an issue. Someone in the group is accountable for B5 and B6, and +the group watches real first-timers use the product on the reference machine at +least once a quarter — school, makerspace, or a friend's kid. Everything else in +this document can be argued from principle; approachability can only be +observed. + +**Cadence.** A short weekly review of open interaction proposals. A monthly pass +over the violating inventory in §10 — anything that has not moved in two months +is either scheduled or explicitly accepted as permanent, with a reason written +into this document. + +**How a change moves.** + +1. *Problem* — a described user difficulty, ideally with an interaction-cost + measurement, never a solution in disguise. +2. *Sketch* — one or two on-geometry interaction proposals, drawn or described + as a gesture sequence. Reviewed against §3 before any code. +3. *Prototype* — built behind whatever the smallest safe path is, driven end to + end on a real display, and screenshotted at each state. +4. *Gate* — §9 answered in the PR. +5. *Merge*, then update §10. + +**Decisions are written down.** Any resolution that constrains future work is +appended to this document as a numbered law or as an accepted exception with its +reasoning. A decision that lives only in a call is not a decision. + +**How disagreements resolve.** Against the laws first. If the laws do not decide +it, the tie-break is the interaction cost measured on the canonical tasks in +§12; if that does not decide it, the UX lead chooses and records why. + +## 12. Canonical tasks — the benchmark + +The measure of every UX change is the cost of these five tasks. Each is timed and +counted (clicks, keystrokes, camera actions, mode switches) on the headless rig +and, periodically, with real users who have not seen the product. + +| # | Task | What it exercises | +|---|---|---| +| **B1** | Bracket: sketch an L, extrude, two holes, fillet the inside corner, send to plate | The inner loop | +| **B2** | Change a hole diameter and the plate thickness, six features deep, and rebuild | Parametric editability | +| **B3** | Take an imported STEP, delete a boss, close the face, thicken a wall to nozzle width | Direct editing + print awareness | +| **B4** | Two parts, one revolute mate, check interference, produce an exploded view | The Mechanism tier | +| **B5** | First-run: from opening the Design tab to a print-ready solid, no documentation | Approachability | +| **B6** | B1 again, on the reference machine at 1366×768, offline, on a fresh account-less install | Reach (L11) | + +Every task is run on the reference machine of §6.1, not on a workstation — a +number measured on a fast desktop describes an experience most of our users will +never have. B6 repeats the inner loop under the full entry conditions so that +reach is a measured quantity and not an intention. + +Targets are set once each task has been measured on the current build. B5's +target is expressed in minutes-to-first-solid **by someone who has never seen a +CAD program**, and it is the number this project is ultimately judged by. + +--- + +### Appendix — anti-patterns we have already paid for + +Kept because each cost real time and each is easy to reintroduce. + +- **The dropdown that grew a row.** Fixing "cannot sketch on a face" by adding a + "Face of Body 1" entry to a plane combo. It reads as a small fix and it is the + side-panel architecture reproducing itself. +- **The invisible first click.** Flyout buttons and pick cycles whose first click + changes nothing meaningful. Filed as bugs three separate times against working + code, and made a real bug look fixed when it was not. +- **The fix verified through a path the user will never take.** A face-sketch fix + confirmed by double-clicking to reach face level. Users click once. A fix + reachable only by an undiscoverable gesture is indistinguishable from no fix. +- **The wrong feedback surface.** Measuring an armed tool by the toolbar, which + never renders keyboard-armed state. The status line is the surface that + answers. +- **The silent success.** A cut that removed no material, reported as done. Now + an error naming the likely cause. diff --git a/docs/CAD/design/mate-connectors/BEAR_CONNECTOR_REVIEW.md b/docs/CAD/design/mate-connectors/BEAR_CONNECTOR_REVIEW.md new file mode 100644 index 0000000000..cc2d4b22aa --- /dev/null +++ b/docs/CAD/design/mate-connectors/BEAR_CONNECTOR_REVIEW.md @@ -0,0 +1,169 @@ +# BearConnector.step — examination + +> **Scope.** One file was supplied and it contains **one object: the male.** Everything below is +> measured from that single solid. Earlier drafts of this note reasoned about a female pocket and a +> mating pair — those objects were never supplied, so any statement about them was speculation and +> has been removed. The clearance, the fit, and the pocket's legibility are all **unassessed**. + +Measured, not eyeballed. Imported into the Design tab's own OpenCascade kernel +(`import_step` → one valid closed solid), topology queried, geometry checked numerically. +Flat drawing: `artifacts/shots/bear-flat.png`. Viewport: `artifacts/shots/bear-02-zoom.png`. + +**File:** AP242 Edition 2, ST-Developer. 1 `MANIFOLD_SOLID_BREP`, 1 `CLOSED_SHELL`. +**Size:** 83.06 × 66.69 × 17.27 mm. **Faces:** 30 — 24 planar + 6 cylindrical. +**Curves:** 69 lines + 12 circles. **No** splines, spheres, tori or cones. +**Relief:** only four Z levels — 0, 3.00, 10.66, 17.27. + +--- + +## What is right, and precisely so + +**The sloping ridge is implemented exactly as briefed.** From (0.00, 18.40, 17.27) to +(0.00, 46.72, 10.66): 28.3 mm long, 6.61 mm drop, **13.1° slope**, and both ends sit dead on +x = 0.00. It breaks 180° rotation on its own. + +**20.0° uniform draft on all four snout flanks**, identical to within 0.1°: +`(0,−0.94,0.342) (0.936,0.08,0.342) (0,0.94,0.342) (−0.936,0.08,0.342)`. That is a real, +deliberate lead-in — it self-centres into a matching pocket, and it demoulds and prints. + +**The eyes are exactly symmetric**: Ø9.87 at x = ±16.43, y = 48.01, matching to 0.01 mm. +Someone mirrored those on purpose. + +**The mating feature is extremely economical**: only **five edges** exist above the 3 mm plate — +the ridge plus two flank edges at each end. Base plate is exactly 3.00 mm. + +The low-poly constraint is honoured. All six cylinders are outline rounds and eye holes; none of +them is a mating surface. + +--- + +## The asymmetry is deliberate, and it is complete + +**Correction.** A first pass read the left/right differences as an unfinished mirror. That was wrong: +the asymmetry is intentional. Tested properly — every candidate self-symmetry, in the part's own +centred frame, with a generous 0.1 mm tolerance: + +| operation | edges mapped onto the part | +|---|---| +| identity | 81 / 81 — 100 % | +| mirror about x = 0 (left/right) | **0 / 81** | +| mirror about y = 0 (top/bottom) | **0 / 81** | +| rotate 180° about Z | **0 / 81** | +| rotate 90° about Z | **0 / 81** | +| mirror about the diagonal | **0 / 81** | + +**The symmetry group is trivial.** No rigid motion or reflection maps this part onto itself, so +**every partial view determines the orientation uniquely** — you never need to see the whole face to +know which way round it goes. That is the strongest possible result for a keying interface and it is +exactly what the earlier abstract glyph work kept failing to achieve: a symmetric shape seen at a +grazing angle, or half-occluded, gives an ambiguous read. + +### Does it let you GRASP the orientation? Measured, not asserted. + +Unique-in-principle and graspable-at-a-glance are different claims. The symmetry table proves the +first. For the second, the front-on picture (outline + eyes + mouth, filled) was rasterised and +compared against its own mirror and its own 180° rotation — the two ways a person can get it wrong. + +**By size** (percentage of pixels that differ): + +| width | vs mirror | vs rotated 180° | +|---|---|---| +| 16 px | 20.7 % | 26.0 % | +| 24 px | 21.9 % | 30.9 % | +| 32 px | 23.0 % | 28.1 % | +| 48 px | 22.4 % | 30.6 % | +| 80 px | 24.7 % | 31.0 % | +| 160 px | 23.6 % | 31.0 % | + +**The curve is flat.** The full signal is already there at 16 pixels and more resolution adds +nothing. That is the whole result: **the orientation cue lives at low spatial frequency**, carried by +the overall shape rather than by any detail. It therefore survives distance, blur, poor light, +peripheral vision, a small print and a low-resolution screen. It is the exact opposite of the abstract +disc glyph, whose roll cue was a small high-frequency feature and died at a grazing angle. + +**Partial views — a claim I made and then withdrew.** I ran a masked-window test and concluded that +a single quarter of the face was enough to read the orientation. **That test was invalid and the +conclusion is wrong.** It compared a window of the original against *the same window* of the mirrored +and rotated versions — which silently hands the observer the registration. It assumes you already +know that the patch you are looking at is the top-left quarter, which is exactly the thing you would +not know if you could only see a quarter. + +**You need to see the whole face.** The cues here are *relational*: the big ear only means something +next to the small ear, and the mouth offset only means something relative to the centreline. None of +them is self-locating. Whole-face is the operating condition, and the design should be judged and +used on that basis. + +That does not weaken the size result above, which always used the complete silhouette: the whole face +reads at 16 px. Needing all of it, and needing very little resolution of it, are compatible — and for +a part held in a hand, seeing all of it is the normal case. + +**The signal is allocated to the right risks.** The strongest cue (up to 41.7 %) guards against +inserting it upside down — the mistake people actually make. The weakest (~23 %) guards the mirror +case, which needs the part flipped over and which the protrusion already prevents mechanically. + +It also does mechanical work beyond the ridge. The ridge alone breaks 180° rotation; the asymmetric +outline additionally defeats the **mirrored-part** case — a mirror-image copy will not fit, so a +modelling or printing mirror is caught at assembly rather than three steps later. + +And for children specifically, a symmetric cartoon face reads as a mask; illustrators asymmetrise +deliberately so a face reads as a *character*. The asymmetry is earning its keep three ways at once. + +### What is worth keeping in mind anyway + +**The ears differ by 42 %** — left 8.33 mm wide (top y 65.68), right 11.81 mm (top y 66.69). Both +start at the same y = 60.79, so they read as a deliberate pair rather than an error. 42 % is well +above the perceptual threshold: you see it instantly. Good cue. + +**The mouth is a smirk** — x −21.93 … 0.00, centred at x = −10.96, stopping on the centreline. A +classic character device and a strong asymmetry. + +**The rounds are the best cue and the one safety question.** All four are on the left — Ø11.71 at +(−40.82, 7.38), Ø11.71 at (−34.76, 0.58), Ø10.00 at (−29.85, 60.83), Ø2.90 at (−26.70, 65.95) — and +the right side is entirely sharp. This is the *most locally readable* cue in the design: the ears +differ only by comparison (you must see both to know which is which), whereas a rounded corner tells +you "this is the left" from that corner alone, by eye **or by fingertip**. For children assembling by +feel that is the cue doing the real work. + +The tension is that "sharp" on a children's part is a hazard, and the obvious safety fix — round +everything — destroys the cue. The resolution is not round-vs-sharp but **large-vs-small radius**: +keep R≈6 on the left and give the right R≈1. R1 still reads and feels sharp locally, so the cue +survives, and the actual edge hazard goes away. That is the one recommendation that outlives the +correction. + +**One measurement that does not fit the story:** the outline is off-centre by **0.54 mm** (left reach +40.99, right reach 42.07). A deliberate cue should be unmissable; 0.54 mm is invisible. It is +probably a by-product of the other features rather than intent — worth a look, not a defect. + +--- + +## Two judgement calls, not defects + +**The snout is highest at the nose tip and slopes down toward the brow** — a real bear's muzzle +does the opposite. Anatomically it reads more like a beak or a horn than a snout. But mechanically +it is the better choice: the nose tip enters the pocket first and does the finding. Keep it if the +lead-in matters more than the likeness; flip it if "it must look like a bear" wins. + +**Only the male was supplied**, so the clearance, the fit and the pocket are unassessed. Nothing in +this note should be read as a judgement on them. + +--- + +## The strategic point, which is the real reason this design is good + +It gives orientation **a name**. "Ears up, nose down" needs no legend, no convention and no +documentation. Face recognition is the most robust pattern-matching humans have: it survives low +resolution, poor light, partial occlusion and peripheral vision. That is exactly the robustness the +abstract ridge key was reaching for, and here it comes for free. + +**One earlier objection does not transfer — noting it only so it is not carried over by mistake.** +In §8c of the design doc a female *pocket* measured as visually invisible — flat-shaded, a recess +reads as a blank rectangle — and I concluded male/female +is the wrong polarity cue. **That was a viewport finding, and it does not apply to a physical part.** +Nobody looks into the pocket of a toy; they feel it. For a part in a child's hands, male/female is +exactly the right polarity language. The earlier conclusion stands for the on-screen glyph and must +not be carried over to this. + +**The one rule to write down now:** the face and the key must never be allowed to disagree. People +will trust the face over the mechanics every time. Here they agree — ridge on the centreline, ears +up. If the face is ever restyled independently of the key, a user will orient by the bear and be +wrong. Tie them permanently, in the model and in whatever generates it. diff --git a/docs/CAD/design/mate-connectors/BearConnector_Cutter.step b/docs/CAD/design/mate-connectors/BearConnector_Cutter.step new file mode 100644 index 0000000000..c78e19e536 --- /dev/null +++ b/docs/CAD/design/mate-connectors/BearConnector_Cutter.step @@ -0,0 +1,998 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-08-05T12:46:26',('FreeCAD'),( + 'FreeCAD'),'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('Open CASCADE STEP translator 7.8 1', + 'Open CASCADE STEP translator 7.8 1','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#958); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = MANIFOLD_SOLID_BREP('',#16); +#16 = CLOSED_SHELL('',(#17,#229,#260,#497,#514,#531,#548,#565,#582,#599, + #616,#633,#650,#667,#684,#701,#718,#735,#747,#770,#794,#810,#822, + #839,#856,#878,#895,#912,#929,#946)); +#17 = ADVANCED_FACE('',(#18,#68,#79,#213),#224,.F.); +#18 = FACE_BOUND('',#19,.F.); +#19 = EDGE_LOOP('',(#20,#30,#38,#46,#54,#62)); +#20 = ORIENTED_EDGE('',*,*,#21,.F.); +#21 = EDGE_CURVE('',#22,#24,#26,.T.); +#22 = VERTEX_POINT('',#23); +#23 = CARTESIAN_POINT('',(19.029295926024,-0.2,-17.63009960955)); +#24 = VERTEX_POINT('',#25); +#25 = CARTESIAN_POINT('',(16.626582997737,-0.2,-8.940188245231)); +#26 = LINE('',#27,#28); +#27 = CARTESIAN_POINT('',(19.849519003668,-0.2,-20.59660707692)); +#28 = VECTOR('',#29,1.); +#29 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#30 = ORIENTED_EDGE('',*,*,#31,.F.); +#31 = EDGE_CURVE('',#32,#22,#34,.T.); +#32 = VERTEX_POINT('',#33); +#33 = CARTESIAN_POINT('',(22.059435554995,-0.2,-3.734519760785)); +#34 = LINE('',#35,#36); +#35 = CARTESIAN_POINT('',(17.698510515043,-0.2,-23.73280021221)); +#36 = VECTOR('',#37,1.); +#37 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#38 = ORIENTED_EDGE('',*,*,#39,.F.); +#39 = EDGE_CURVE('',#40,#32,#42,.T.); +#40 = VERTEX_POINT('',#41); +#41 = CARTESIAN_POINT('',(-21.72552223146,-0.2,-3.734519760785)); +#42 = LINE('',#43,#44); +#43 = CARTESIAN_POINT('',(0.297084840953,-0.2,-3.734519760785)); +#44 = VECTOR('',#45,1.); +#45 = DIRECTION('',(1.,0.,0.)); +#46 = ORIENTED_EDGE('',*,*,#47,.F.); +#47 = EDGE_CURVE('',#48,#40,#50,.T.); +#48 = VERTEX_POINT('',#49); +#49 = CARTESIAN_POINT('',(-21.72552223146,-0.2,-8.903751135252)); +#50 = LINE('',#51,#52); +#51 = CARTESIAN_POINT('',(-21.72552223146,-0.2,-19.83215600037)); +#52 = VECTOR('',#53,1.); +#53 = DIRECTION('',(0.,0.,1.)); +#54 = ORIENTED_EDGE('',*,*,#55,.F.); +#55 = EDGE_CURVE('',#56,#48,#58,.T.); +#56 = VERTEX_POINT('',#57); +#57 = CARTESIAN_POINT('',(4.383041634064E-04,-0.2,-8.903751615529)); +#58 = LINE('',#59,#60); +#59 = CARTESIAN_POINT('',(-5.279852300138,-0.2,-8.903751135252)); +#60 = VECTOR('',#61,1.); +#61 = DIRECTION('',(-1.,0.,0.)); +#62 = ORIENTED_EDGE('',*,*,#63,.F.); +#63 = EDGE_CURVE('',#24,#56,#64,.T.); +#64 = LINE('',#65,#66); +#65 = CARTESIAN_POINT('',(4.347099726942,-0.2,-8.913277437397)); +#66 = VECTOR('',#67,1.); +#67 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#68 = FACE_BOUND('',#69,.F.); +#69 = EDGE_LOOP('',(#70)); +#70 = ORIENTED_EDGE('',*,*,#71,.F.); +#71 = EDGE_CURVE('',#72,#72,#74,.T.); +#72 = VERTEX_POINT('',#73); +#73 = CARTESIAN_POINT('',(21.163799345768,-0.2,-48.00951684793)); +#74 = CIRCLE('',#75,4.735522705283); +#75 = AXIS2_PLACEMENT_3D('',#76,#77,#78); +#76 = CARTESIAN_POINT('',(16.428276640485,-0.2,-48.00951684793)); +#77 = DIRECTION('',(-0.,1.,0.)); +#78 = DIRECTION('',(1.,0.,0.)); +#79 = FACE_BOUND('',#80,.F.); +#80 = EDGE_LOOP('',(#81,#91,#100,#108,#116,#125,#133,#142,#150,#158,#166 + ,#174,#182,#190,#198,#206)); +#81 = ORIENTED_EDGE('',*,*,#82,.T.); +#82 = EDGE_CURVE('',#83,#85,#87,.T.); +#83 = VERTEX_POINT('',#84); +#84 = CARTESIAN_POINT('',(-27.86158468659,-0.2,-65.78852163128)); +#85 = VERTEX_POINT('',#86); +#86 = CARTESIAN_POINT('',(-29.08766684168,-0.2,-64.52156932717)); +#87 = LINE('',#88,#89); +#88 = CARTESIAN_POINT('',(-29.44004200272,-0.2,-64.15744811364)); +#89 = VECTOR('',#90,1.); +#90 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#91 = ORIENTED_EDGE('',*,*,#92,.F.); +#92 = EDGE_CURVE('',#93,#85,#95,.T.); +#93 = VERTEX_POINT('',#94); +#94 = CARTESIAN_POINT('',(-28.96712497021,-0.2,-57.16864680227)); +#95 = CIRCLE('',#96,5.2); +#96 = AXIS2_PLACEMENT_3D('',#97,#98,#99); +#97 = CARTESIAN_POINT('',(-25.35093464349,-0.2,-60.90537900045)); +#98 = DIRECTION('',(0.,-1.,0.)); +#99 = DIRECTION('',(-1.,0.,0.)); +#100 = ORIENTED_EDGE('',*,*,#101,.T.); +#101 = EDGE_CURVE('',#93,#102,#104,.T.); +#102 = VERTEX_POINT('',#103); +#103 = CARTESIAN_POINT('',(-26.93875323652,-0.2,-55.20570756731)); +#104 = LINE('',#105,#106); +#105 = CARTESIAN_POINT('',(-14.90185526362,-0.2,-43.55710346492)); +#106 = VECTOR('',#107,1.); +#107 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#108 = ORIENTED_EDGE('',*,*,#109,.T.); +#109 = EDGE_CURVE('',#102,#110,#112,.T.); +#110 = VERTEX_POINT('',#111); +#111 = CARTESIAN_POINT('',(-41.17904151244,-0.2,-10.52828909594)); +#112 = LINE('',#113,#114); +#113 = CARTESIAN_POINT('',(-32.39120436163,-0.2,-38.09921113329)); +#114 = VECTOR('',#115,1.); +#115 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#116 = ORIENTED_EDGE('',*,*,#117,.F.); +#117 = EDGE_CURVE('',#118,#110,#120,.T.); +#118 = VERTEX_POINT('',#119); +#119 = CARTESIAN_POINT('',(-39.69176606491,-0.2,-4.408923352436)); +#120 = CIRCLE('',#121,6.054044962965); +#121 = AXIS2_PLACEMENT_3D('',#122,#123,#124); +#122 = CARTESIAN_POINT('',(-35.41090981799,-0.2,-8.689779599357)); +#123 = DIRECTION('',(0.,-1.,0.)); +#124 = DIRECTION('',(-1.,0.,0.)); +#125 = ORIENTED_EDGE('',*,*,#126,.T.); +#126 = EDGE_CURVE('',#118,#127,#129,.T.); +#127 = VERTEX_POINT('',#128); +#128 = CARTESIAN_POINT('',(-36.85603142851,-0.2,-1.573188716044)); +#129 = LINE('',#130,#131); +#130 = CARTESIAN_POINT('',(-36.19319006079,-0.2,-0.910347348321)); +#131 = VECTOR('',#132,1.); +#132 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#133 = ORIENTED_EDGE('',*,*,#134,.F.); +#134 = EDGE_CURVE('',#135,#127,#137,.T.); +#135 = VERTEX_POINT('',#136); +#136 = CARTESIAN_POINT('',(-32.57517518159,-0.2,0.2)); +#137 = CIRCLE('',#138,6.054044962965); +#138 = AXIS2_PLACEMENT_3D('',#139,#140,#141); +#139 = CARTESIAN_POINT('',(-32.57517518159,-0.2,-5.854044962965)); +#140 = DIRECTION('',(0.,-1.,0.)); +#141 = DIRECTION('',(-1.,0.,0.)); +#142 = ORIENTED_EDGE('',*,*,#143,.T.); +#143 = EDGE_CURVE('',#135,#144,#146,.T.); +#144 = VERTEX_POINT('',#145); +#145 = CARTESIAN_POINT('',(35.082842712475,-0.2,0.2)); +#146 = LINE('',#147,#148); +#147 = CARTESIAN_POINT('',(-7.942265537672,-0.2,0.2)); +#148 = VECTOR('',#149,1.); +#149 = DIRECTION('',(1.,0.,0.)); +#150 = ORIENTED_EDGE('',*,*,#151,.F.); +#151 = EDGE_CURVE('',#152,#144,#154,.T.); +#152 = VERTEX_POINT('',#153); +#153 = CARTESIAN_POINT('',(42.298608189024,-0.2,-7.015765476549)); +#154 = LINE('',#155,#156); +#155 = CARTESIAN_POINT('',(36.596246576251,-0.2,-1.313403863776)); +#156 = VECTOR('',#157,1.); +#157 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#158 = ORIENTED_EDGE('',*,*,#159,.F.); +#159 = EDGE_CURVE('',#160,#152,#162,.T.); +#160 = VERTEX_POINT('',#161); +#161 = CARTESIAN_POINT('',(26.938753236523,-0.2,-55.20570756731)); +#162 = LINE('',#163,#164); +#163 = CARTESIAN_POINT('',(32.699020781567,-0.2,-37.13346923684)); +#164 = VECTOR('',#165,1.); +#165 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#166 = ORIENTED_EDGE('',*,*,#167,.F.); +#167 = EDGE_CURVE('',#168,#160,#170,.T.); +#168 = VERTEX_POINT('',#169); +#169 = CARTESIAN_POINT('',(32.703857168398,-0.2,-60.78483712899)); +#170 = LINE('',#171,#172); +#171 = CARTESIAN_POINT('',(16.008242280412,-0.2,-44.62779994931)); +#172 = VECTOR('',#173,1.); +#173 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#174 = ORIENTED_EDGE('',*,*,#175,.F.); +#175 = EDGE_CURVE('',#176,#168,#178,.T.); +#176 = VERTEX_POINT('',#177); +#177 = CARTESIAN_POINT('',(26.715163243538,-0.2,-66.97315781796)); +#178 = LINE('',#179,#180); +#179 = CARTESIAN_POINT('',(30.25240665457,-0.2,-63.31800414721)); +#180 = VECTOR('',#181,1.); +#181 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#182 = ORIENTED_EDGE('',*,*,#183,.F.); +#183 = EDGE_CURVE('',#184,#176,#186,.T.); +#184 = VERTEX_POINT('',#185); +#185 = CARTESIAN_POINT('',(20.532019001374,-0.2,-60.98947335481)); +#186 = LINE('',#187,#188); +#187 = CARTESIAN_POINT('',(9.922784884512,-0.2,-50.72247862452)); +#188 = VECTOR('',#189,1.); +#189 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#190 = ORIENTED_EDGE('',*,*,#191,.F.); +#191 = EDGE_CURVE('',#192,#184,#194,.T.); +#192 = VERTEX_POINT('',#193); +#193 = CARTESIAN_POINT('',(-20.53201900137,-0.2,-60.98947335481)); +#194 = LINE('',#195,#196); +#195 = CARTESIAN_POINT('',(5.354765181569,-0.2,-60.98947335481)); +#196 = VECTOR('',#197,1.); +#197 = DIRECTION('',(1.,0.,0.)); +#198 = ORIENTED_EDGE('',*,*,#199,.T.); +#199 = EDGE_CURVE('',#192,#200,#202,.T.); +#200 = VERTEX_POINT('',#201); +#201 = CARTESIAN_POINT('',(-25.53052705686,-0.2,-65.82673637491)); +#202 = LINE('',#203,#204); +#203 = CARTESIAN_POINT('',(-9.454421870603,-0.2,-50.26922436104)); +#204 = VECTOR('',#205,1.); +#205 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#206 = ORIENTED_EDGE('',*,*,#207,.F.); +#207 = EDGE_CURVE('',#83,#200,#208,.T.); +#208 = CIRCLE('',#209,1.648528137424); +#209 = AXIS2_PLACEMENT_3D('',#210,#211,#212); +#210 = CARTESIAN_POINT('',(-26.67694849991,-0.2,-64.64210018823)); +#211 = DIRECTION('',(0.,-1.,0.)); +#212 = DIRECTION('',(-1.,0.,0.)); +#213 = FACE_BOUND('',#214,.F.); +#214 = EDGE_LOOP('',(#215)); +#215 = ORIENTED_EDGE('',*,*,#216,.F.); +#216 = EDGE_CURVE('',#217,#217,#219,.T.); +#217 = VERTEX_POINT('',#218); +#218 = CARTESIAN_POINT('',(-11.6927539352,-0.2,-48.00951684793)); +#219 = CIRCLE('',#220,4.735522705283); +#220 = AXIS2_PLACEMENT_3D('',#221,#222,#223); +#221 = CARTESIAN_POINT('',(-16.42827664048,-0.2,-48.00951684793)); +#222 = DIRECTION('',(-0.,1.,0.)); +#223 = DIRECTION('',(1.,0.,0.)); +#224 = PLANE('',#225); +#225 = AXIS2_PLACEMENT_3D('',#226,#227,#228); +#226 = CARTESIAN_POINT('',(0.403056515455,-0.2,-33.34517655273)); +#227 = DIRECTION('',(0.,1.,0.)); +#228 = DIRECTION('',(1.,0.,0.)); +#229 = ADVANCED_FACE('',(#230),#255,.F.); +#230 = FACE_BOUND('',#231,.F.); +#231 = EDGE_LOOP('',(#232,#240,#241,#249)); +#232 = ORIENTED_EDGE('',*,*,#233,.T.); +#233 = EDGE_CURVE('',#234,#160,#236,.T.); +#234 = VERTEX_POINT('',#235); +#235 = CARTESIAN_POINT('',(26.938753236523,3.2,-55.20570756731)); +#236 = LINE('',#237,#238); +#237 = CARTESIAN_POINT('',(26.938753236523,3.,-55.20570756731)); +#238 = VECTOR('',#239,1.); +#239 = DIRECTION('',(0.,-1.,0.)); +#240 = ORIENTED_EDGE('',*,*,#159,.T.); +#241 = ORIENTED_EDGE('',*,*,#242,.F.); +#242 = EDGE_CURVE('',#243,#152,#245,.T.); +#243 = VERTEX_POINT('',#244); +#244 = CARTESIAN_POINT('',(42.298608189024,3.2,-7.015765476549)); +#245 = LINE('',#246,#247); +#246 = CARTESIAN_POINT('',(42.298608189024,3.,-7.015765476549)); +#247 = VECTOR('',#248,1.); +#248 = DIRECTION('',(0.,-1.,0.)); +#249 = ORIENTED_EDGE('',*,*,#250,.F.); +#250 = EDGE_CURVE('',#234,#243,#251,.T.); +#251 = LINE('',#252,#253); +#252 = CARTESIAN_POINT('',(32.699020781567,3.2,-37.13346923684)); +#253 = VECTOR('',#254,1.); +#254 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#255 = PLANE('',#256); +#256 = AXIS2_PLACEMENT_3D('',#257,#258,#259); +#257 = CARTESIAN_POINT('',(34.581352051556,3.,-31.22785130119)); +#258 = DIRECTION('',(-0.952773183837,0.,0.30368282823)); +#259 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#260 = ADVANCED_FACE('',(#261,#311,#322,#447,#481),#492,.T.); +#261 = FACE_BOUND('',#262,.T.); +#262 = EDGE_LOOP('',(#263,#273,#281,#289,#297,#305)); +#263 = ORIENTED_EDGE('',*,*,#264,.F.); +#264 = EDGE_CURVE('',#265,#267,#269,.T.); +#265 = VERTEX_POINT('',#266); +#266 = CARTESIAN_POINT('',(16.626582997737,3.2,-8.940188245231)); +#267 = VERTEX_POINT('',#268); +#268 = CARTESIAN_POINT('',(4.383041634064E-04,3.2,-8.903751615529)); +#269 = LINE('',#270,#271); +#270 = CARTESIAN_POINT('',(4.347099726942,3.2,-8.913277437397)); +#271 = VECTOR('',#272,1.); +#272 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#273 = ORIENTED_EDGE('',*,*,#274,.F.); +#274 = EDGE_CURVE('',#275,#265,#277,.T.); +#275 = VERTEX_POINT('',#276); +#276 = CARTESIAN_POINT('',(19.029295926024,3.2,-17.63009960955)); +#277 = LINE('',#278,#279); +#278 = CARTESIAN_POINT('',(19.849519003668,3.2,-20.59660707692)); +#279 = VECTOR('',#280,1.); +#280 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#281 = ORIENTED_EDGE('',*,*,#282,.F.); +#282 = EDGE_CURVE('',#283,#275,#285,.T.); +#283 = VERTEX_POINT('',#284); +#284 = CARTESIAN_POINT('',(22.059435554995,3.2,-3.734519760785)); +#285 = LINE('',#286,#287); +#286 = CARTESIAN_POINT('',(17.698510515043,3.2,-23.73280021221)); +#287 = VECTOR('',#288,1.); +#288 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#289 = ORIENTED_EDGE('',*,*,#290,.F.); +#290 = EDGE_CURVE('',#291,#283,#293,.T.); +#291 = VERTEX_POINT('',#292); +#292 = CARTESIAN_POINT('',(-21.72552223146,3.2,-3.734519760785)); +#293 = LINE('',#294,#295); +#294 = CARTESIAN_POINT('',(0.297084840953,3.2,-3.734519760785)); +#295 = VECTOR('',#296,1.); +#296 = DIRECTION('',(1.,0.,0.)); +#297 = ORIENTED_EDGE('',*,*,#298,.F.); +#298 = EDGE_CURVE('',#299,#291,#301,.T.); +#299 = VERTEX_POINT('',#300); +#300 = CARTESIAN_POINT('',(-21.72552223146,3.2,-8.903751135252)); +#301 = LINE('',#302,#303); +#302 = CARTESIAN_POINT('',(-21.72552223146,3.2,-19.83215600037)); +#303 = VECTOR('',#304,1.); +#304 = DIRECTION('',(0.,0.,1.)); +#305 = ORIENTED_EDGE('',*,*,#306,.F.); +#306 = EDGE_CURVE('',#267,#299,#307,.T.); +#307 = LINE('',#308,#309); +#308 = CARTESIAN_POINT('',(-5.279852300138,3.2,-8.903751135252)); +#309 = VECTOR('',#310,1.); +#310 = DIRECTION('',(-1.,0.,0.)); +#311 = FACE_BOUND('',#312,.T.); +#312 = EDGE_LOOP('',(#313)); +#313 = ORIENTED_EDGE('',*,*,#314,.F.); +#314 = EDGE_CURVE('',#315,#315,#317,.T.); +#315 = VERTEX_POINT('',#316); +#316 = CARTESIAN_POINT('',(21.163799345768,3.2,-48.00951684793)); +#317 = CIRCLE('',#318,4.735522705283); +#318 = AXIS2_PLACEMENT_3D('',#319,#320,#321); +#319 = CARTESIAN_POINT('',(16.428276640485,3.2,-48.00951684793)); +#320 = DIRECTION('',(-0.,1.,0.)); +#321 = DIRECTION('',(1.,0.,0.)); +#322 = FACE_BOUND('',#323,.T.); +#323 = EDGE_LOOP('',(#324,#334,#343,#351,#360,#368,#374,#375,#383,#391, + #399,#407,#415,#424,#432,#441)); +#324 = ORIENTED_EDGE('',*,*,#325,.T.); +#325 = EDGE_CURVE('',#326,#328,#330,.T.); +#326 = VERTEX_POINT('',#327); +#327 = CARTESIAN_POINT('',(-26.93875323652,3.2,-55.20570756731)); +#328 = VERTEX_POINT('',#329); +#329 = CARTESIAN_POINT('',(-41.17904151244,3.2,-10.52828909594)); +#330 = LINE('',#331,#332); +#331 = CARTESIAN_POINT('',(-32.39120436163,3.2,-38.09921113329)); +#332 = VECTOR('',#333,1.); +#333 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#334 = ORIENTED_EDGE('',*,*,#335,.F.); +#335 = EDGE_CURVE('',#336,#328,#338,.T.); +#336 = VERTEX_POINT('',#337); +#337 = CARTESIAN_POINT('',(-39.69176606491,3.2,-4.408923352436)); +#338 = CIRCLE('',#339,6.054044962965); +#339 = AXIS2_PLACEMENT_3D('',#340,#341,#342); +#340 = CARTESIAN_POINT('',(-35.41090981799,3.2,-8.689779599357)); +#341 = DIRECTION('',(0.,-1.,0.)); +#342 = DIRECTION('',(-1.,0.,0.)); +#343 = ORIENTED_EDGE('',*,*,#344,.T.); +#344 = EDGE_CURVE('',#336,#345,#347,.T.); +#345 = VERTEX_POINT('',#346); +#346 = CARTESIAN_POINT('',(-36.85603142851,3.2,-1.573188716044)); +#347 = LINE('',#348,#349); +#348 = CARTESIAN_POINT('',(-36.19319006079,3.2,-0.910347348321)); +#349 = VECTOR('',#350,1.); +#350 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#351 = ORIENTED_EDGE('',*,*,#352,.F.); +#352 = EDGE_CURVE('',#353,#345,#355,.T.); +#353 = VERTEX_POINT('',#354); +#354 = CARTESIAN_POINT('',(-32.57517518159,3.2,0.2)); +#355 = CIRCLE('',#356,6.054044962965); +#356 = AXIS2_PLACEMENT_3D('',#357,#358,#359); +#357 = CARTESIAN_POINT('',(-32.57517518159,3.2,-5.854044962965)); +#358 = DIRECTION('',(0.,-1.,0.)); +#359 = DIRECTION('',(-1.,0.,0.)); +#360 = ORIENTED_EDGE('',*,*,#361,.T.); +#361 = EDGE_CURVE('',#353,#362,#364,.T.); +#362 = VERTEX_POINT('',#363); +#363 = CARTESIAN_POINT('',(35.082842712475,3.2,0.2)); +#364 = LINE('',#365,#366); +#365 = CARTESIAN_POINT('',(-7.942265537672,3.2,0.2)); +#366 = VECTOR('',#367,1.); +#367 = DIRECTION('',(1.,0.,0.)); +#368 = ORIENTED_EDGE('',*,*,#369,.F.); +#369 = EDGE_CURVE('',#243,#362,#370,.T.); +#370 = LINE('',#371,#372); +#371 = CARTESIAN_POINT('',(36.596246576251,3.2,-1.313403863776)); +#372 = VECTOR('',#373,1.); +#373 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#374 = ORIENTED_EDGE('',*,*,#250,.F.); +#375 = ORIENTED_EDGE('',*,*,#376,.F.); +#376 = EDGE_CURVE('',#377,#234,#379,.T.); +#377 = VERTEX_POINT('',#378); +#378 = CARTESIAN_POINT('',(32.703857168398,3.2,-60.78483712899)); +#379 = LINE('',#380,#381); +#380 = CARTESIAN_POINT('',(16.008242280412,3.2,-44.62779994931)); +#381 = VECTOR('',#382,1.); +#382 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#383 = ORIENTED_EDGE('',*,*,#384,.F.); +#384 = EDGE_CURVE('',#385,#377,#387,.T.); +#385 = VERTEX_POINT('',#386); +#386 = CARTESIAN_POINT('',(26.715163243538,3.2,-66.97315781796)); +#387 = LINE('',#388,#389); +#388 = CARTESIAN_POINT('',(30.25240665457,3.2,-63.31800414721)); +#389 = VECTOR('',#390,1.); +#390 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#391 = ORIENTED_EDGE('',*,*,#392,.F.); +#392 = EDGE_CURVE('',#393,#385,#395,.T.); +#393 = VERTEX_POINT('',#394); +#394 = CARTESIAN_POINT('',(20.532019001374,3.2,-60.98947335481)); +#395 = LINE('',#396,#397); +#396 = CARTESIAN_POINT('',(9.922784884512,3.2,-50.72247862452)); +#397 = VECTOR('',#398,1.); +#398 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#399 = ORIENTED_EDGE('',*,*,#400,.F.); +#400 = EDGE_CURVE('',#401,#393,#403,.T.); +#401 = VERTEX_POINT('',#402); +#402 = CARTESIAN_POINT('',(-20.53201900137,3.2,-60.98947335481)); +#403 = LINE('',#404,#405); +#404 = CARTESIAN_POINT('',(5.354765181569,3.2,-60.98947335481)); +#405 = VECTOR('',#406,1.); +#406 = DIRECTION('',(1.,0.,0.)); +#407 = ORIENTED_EDGE('',*,*,#408,.T.); +#408 = EDGE_CURVE('',#401,#409,#411,.T.); +#409 = VERTEX_POINT('',#410); +#410 = CARTESIAN_POINT('',(-25.53052705686,3.2,-65.82673637491)); +#411 = LINE('',#412,#413); +#412 = CARTESIAN_POINT('',(-9.454421870603,3.2,-50.26922436104)); +#413 = VECTOR('',#414,1.); +#414 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#415 = ORIENTED_EDGE('',*,*,#416,.F.); +#416 = EDGE_CURVE('',#417,#409,#419,.T.); +#417 = VERTEX_POINT('',#418); +#418 = CARTESIAN_POINT('',(-27.86158468659,3.2,-65.78852163128)); +#419 = CIRCLE('',#420,1.648528137424); +#420 = AXIS2_PLACEMENT_3D('',#421,#422,#423); +#421 = CARTESIAN_POINT('',(-26.67694849991,3.2,-64.64210018823)); +#422 = DIRECTION('',(0.,-1.,0.)); +#423 = DIRECTION('',(-1.,0.,0.)); +#424 = ORIENTED_EDGE('',*,*,#425,.T.); +#425 = EDGE_CURVE('',#417,#426,#428,.T.); +#426 = VERTEX_POINT('',#427); +#427 = CARTESIAN_POINT('',(-29.08766684168,3.2,-64.52156932717)); +#428 = LINE('',#429,#430); +#429 = CARTESIAN_POINT('',(-29.44004200272,3.2,-64.15744811364)); +#430 = VECTOR('',#431,1.); +#431 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#432 = ORIENTED_EDGE('',*,*,#433,.F.); +#433 = EDGE_CURVE('',#434,#426,#436,.T.); +#434 = VERTEX_POINT('',#435); +#435 = CARTESIAN_POINT('',(-28.96712497021,3.2,-57.16864680227)); +#436 = CIRCLE('',#437,5.2); +#437 = AXIS2_PLACEMENT_3D('',#438,#439,#440); +#438 = CARTESIAN_POINT('',(-25.35093464349,3.2,-60.90537900045)); +#439 = DIRECTION('',(0.,-1.,0.)); +#440 = DIRECTION('',(-1.,0.,0.)); +#441 = ORIENTED_EDGE('',*,*,#442,.T.); +#442 = EDGE_CURVE('',#434,#326,#443,.T.); +#443 = LINE('',#444,#445); +#444 = CARTESIAN_POINT('',(-14.90185526362,3.2,-43.55710346492)); +#445 = VECTOR('',#446,1.); +#446 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#447 = FACE_BOUND('',#448,.T.); +#448 = EDGE_LOOP('',(#449,#459,#467,#475)); +#449 = ORIENTED_EDGE('',*,*,#450,.F.); +#450 = EDGE_CURVE('',#451,#453,#455,.T.); +#451 = VERTEX_POINT('',#452); +#452 = CARTESIAN_POINT('',(5.809375885494,3.2,-13.06417917474)); +#453 = VERTEX_POINT('',#454); +#454 = CARTESIAN_POINT('',(2.688069798796,3.2,-49.64588621989)); +#455 = LINE('',#456,#457); +#456 = CARTESIAN_POINT('',(4.914157977861,3.2,-23.55613296875)); +#457 = VECTOR('',#458,1.); +#458 = DIRECTION('',(-8.501532861635E-02,0.,-0.996379643459)); +#459 = ORIENTED_EDGE('',*,*,#460,.F.); +#460 = EDGE_CURVE('',#461,#451,#463,.T.); +#461 = VERTEX_POINT('',#462); +#462 = CARTESIAN_POINT('',(-5.809375885494,3.2,-13.06417917474)); +#463 = LINE('',#464,#465); +#464 = CARTESIAN_POINT('',(1.615747408047,3.2,-13.06417917474)); +#465 = VECTOR('',#466,1.); +#466 = DIRECTION('',(1.,0.,-3.066574716487E-16)); +#467 = ORIENTED_EDGE('',*,*,#468,.F.); +#468 = EDGE_CURVE('',#469,#461,#471,.T.); +#469 = VERTEX_POINT('',#470); +#470 = CARTESIAN_POINT('',(-2.688069798796,3.2,-49.64588621989)); +#471 = LINE('',#472,#473); +#472 = CARTESIAN_POINT('',(-4.890802006217,3.2,-23.82986495424)); +#473 = VECTOR('',#474,1.); +#474 = DIRECTION('',(-8.501532861635E-02,0.,0.996379643459)); +#475 = ORIENTED_EDGE('',*,*,#476,.F.); +#476 = EDGE_CURVE('',#453,#469,#477,.T.); +#477 = LINE('',#478,#479); +#478 = CARTESIAN_POINT('',(1.615747408047,3.2,-49.64588621989)); +#479 = VECTOR('',#480,1.); +#480 = DIRECTION('',(-1.,0.,0.)); +#481 = FACE_BOUND('',#482,.T.); +#482 = EDGE_LOOP('',(#483)); +#483 = ORIENTED_EDGE('',*,*,#484,.F.); +#484 = EDGE_CURVE('',#485,#485,#487,.T.); +#485 = VERTEX_POINT('',#486); +#486 = CARTESIAN_POINT('',(-11.6927539352,3.2,-48.00951684793)); +#487 = CIRCLE('',#488,4.735522705283); +#488 = AXIS2_PLACEMENT_3D('',#489,#490,#491); +#489 = CARTESIAN_POINT('',(-16.42827664048,3.2,-48.00951684793)); +#490 = DIRECTION('',(-0.,1.,0.)); +#491 = DIRECTION('',(1.,0.,0.)); +#492 = PLANE('',#493); +#493 = AXIS2_PLACEMENT_3D('',#494,#495,#496); +#494 = CARTESIAN_POINT('',(0.403056515455,3.2,-33.34517655273)); +#495 = DIRECTION('',(0.,1.,0.)); +#496 = DIRECTION('',(1.,0.,0.)); +#497 = ADVANCED_FACE('',(#498),#509,.F.); +#498 = FACE_BOUND('',#499,.F.); +#499 = EDGE_LOOP('',(#500,#506,#507,#508)); +#500 = ORIENTED_EDGE('',*,*,#501,.F.); +#501 = EDGE_CURVE('',#168,#377,#502,.T.); +#502 = LINE('',#503,#504); +#503 = CARTESIAN_POINT('',(32.703857168398,3.,-60.78483712899)); +#504 = VECTOR('',#505,1.); +#505 = DIRECTION('',(0.,1.,0.)); +#506 = ORIENTED_EDGE('',*,*,#167,.T.); +#507 = ORIENTED_EDGE('',*,*,#233,.F.); +#508 = ORIENTED_EDGE('',*,*,#376,.F.); +#509 = PLANE('',#510); +#510 = AXIS2_PLACEMENT_3D('',#511,#512,#513); +#511 = CARTESIAN_POINT('',(29.704873980143,3.,-57.88259703786)); +#512 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#513 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#514 = ADVANCED_FACE('',(#515),#526,.F.); +#515 = FACE_BOUND('',#516,.F.); +#516 = EDGE_LOOP('',(#517,#523,#524,#525)); +#517 = ORIENTED_EDGE('',*,*,#518,.F.); +#518 = EDGE_CURVE('',#176,#385,#519,.T.); +#519 = LINE('',#520,#521); +#520 = CARTESIAN_POINT('',(26.715163243538,3.,-66.97315781796)); +#521 = VECTOR('',#522,1.); +#522 = DIRECTION('',(0.,1.,0.)); +#523 = ORIENTED_EDGE('',*,*,#175,.T.); +#524 = ORIENTED_EDGE('',*,*,#501,.T.); +#525 = ORIENTED_EDGE('',*,*,#384,.F.); +#526 = PLANE('',#527); +#527 = AXIS2_PLACEMENT_3D('',#528,#529,#530); +#528 = CARTESIAN_POINT('',(29.709510205968,3.,-63.87899747347)); +#529 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#530 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#531 = ADVANCED_FACE('',(#532),#543,.F.); +#532 = FACE_BOUND('',#533,.F.); +#533 = EDGE_LOOP('',(#534,#540,#541,#542)); +#534 = ORIENTED_EDGE('',*,*,#535,.T.); +#535 = EDGE_CURVE('',#393,#184,#536,.T.); +#536 = LINE('',#537,#538); +#537 = CARTESIAN_POINT('',(20.532019001374,3.,-60.98947335481)); +#538 = VECTOR('',#539,1.); +#539 = DIRECTION('',(0.,-1.,0.)); +#540 = ORIENTED_EDGE('',*,*,#183,.T.); +#541 = ORIENTED_EDGE('',*,*,#518,.T.); +#542 = ORIENTED_EDGE('',*,*,#392,.F.); +#543 = PLANE('',#544); +#544 = AXIS2_PLACEMENT_3D('',#545,#546,#547); +#545 = CARTESIAN_POINT('',(23.522653113203,3.,-63.8836336993)); +#546 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#547 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#548 = ADVANCED_FACE('',(#549),#560,.F.); +#549 = FACE_BOUND('',#550,.F.); +#550 = EDGE_LOOP('',(#551,#557,#558,#559)); +#551 = ORIENTED_EDGE('',*,*,#552,.F.); +#552 = EDGE_CURVE('',#192,#401,#553,.T.); +#553 = LINE('',#554,#555); +#554 = CARTESIAN_POINT('',(-20.53201900137,3.,-60.98947335481)); +#555 = VECTOR('',#556,1.); +#556 = DIRECTION('',(0.,1.,0.)); +#557 = ORIENTED_EDGE('',*,*,#191,.T.); +#558 = ORIENTED_EDGE('',*,*,#535,.F.); +#559 = ORIENTED_EDGE('',*,*,#400,.F.); +#560 = PLANE('',#561); +#561 = AXIS2_PLACEMENT_3D('',#562,#563,#564); +#562 = CARTESIAN_POINT('',(10.306473847682,3.,-60.98947335481)); +#563 = DIRECTION('',(0.,0.,1.)); +#564 = DIRECTION('',(0.,-1.,0.)); +#565 = ADVANCED_FACE('',(#566),#577,.T.); +#566 = FACE_BOUND('',#567,.T.); +#567 = EDGE_LOOP('',(#568,#574,#575,#576)); +#568 = ORIENTED_EDGE('',*,*,#569,.F.); +#569 = EDGE_CURVE('',#409,#200,#570,.T.); +#570 = LINE('',#571,#572); +#571 = CARTESIAN_POINT('',(-25.53052705686,3.,-65.82673637491)); +#572 = VECTOR('',#573,1.); +#573 = DIRECTION('',(0.,-1.,0.)); +#574 = ORIENTED_EDGE('',*,*,#408,.F.); +#575 = ORIENTED_EDGE('',*,*,#552,.F.); +#576 = ORIENTED_EDGE('',*,*,#199,.T.); +#577 = PLANE('',#578); +#578 = AXIS2_PLACEMENT_3D('',#579,#580,#581); +#579 = CARTESIAN_POINT('',(-23.00219525444,3.,-63.37996509944)); +#580 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#581 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#582 = ADVANCED_FACE('',(#583),#594,.T.); +#583 = FACE_BOUND('',#584,.T.); +#584 = EDGE_LOOP('',(#585,#591,#592,#593)); +#585 = ORIENTED_EDGE('',*,*,#586,.F.); +#586 = EDGE_CURVE('',#417,#83,#587,.T.); +#587 = LINE('',#588,#589); +#588 = CARTESIAN_POINT('',(-27.86158468659,3.,-65.78852163128)); +#589 = VECTOR('',#590,1.); +#590 = DIRECTION('',(0.,-1.,0.)); +#591 = ORIENTED_EDGE('',*,*,#416,.T.); +#592 = ORIENTED_EDGE('',*,*,#569,.T.); +#593 = ORIENTED_EDGE('',*,*,#207,.F.); +#594 = CYLINDRICAL_SURFACE('',#595,1.648528137424); +#595 = AXIS2_PLACEMENT_3D('',#596,#597,#598); +#596 = CARTESIAN_POINT('',(-26.67694849991,3.,-64.64210018823)); +#597 = DIRECTION('',(0.,-1.,0.)); +#598 = DIRECTION('',(-1.,0.,0.)); +#599 = ADVANCED_FACE('',(#600),#611,.T.); +#600 = FACE_BOUND('',#601,.T.); +#601 = EDGE_LOOP('',(#602,#608,#609,#610)); +#602 = ORIENTED_EDGE('',*,*,#603,.F.); +#603 = EDGE_CURVE('',#426,#85,#604,.T.); +#604 = LINE('',#605,#606); +#605 = CARTESIAN_POINT('',(-29.08766684168,3.,-64.52156932717)); +#606 = VECTOR('',#607,1.); +#607 = DIRECTION('',(0.,-1.,0.)); +#608 = ORIENTED_EDGE('',*,*,#425,.F.); +#609 = ORIENTED_EDGE('',*,*,#586,.T.); +#610 = ORIENTED_EDGE('',*,*,#82,.T.); +#611 = PLANE('',#612); +#612 = AXIS2_PLACEMENT_3D('',#613,#614,#615); +#613 = CARTESIAN_POINT('',(-28.47462576413,3.,-65.15504547923)); +#614 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#615 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#616 = ADVANCED_FACE('',(#617),#628,.T.); +#617 = FACE_BOUND('',#618,.T.); +#618 = EDGE_LOOP('',(#619,#625,#626,#627)); +#619 = ORIENTED_EDGE('',*,*,#620,.F.); +#620 = EDGE_CURVE('',#434,#93,#621,.T.); +#621 = LINE('',#622,#623); +#622 = CARTESIAN_POINT('',(-28.96712497021,3.,-57.16864680227)); +#623 = VECTOR('',#624,1.); +#624 = DIRECTION('',(0.,-1.,0.)); +#625 = ORIENTED_EDGE('',*,*,#433,.T.); +#626 = ORIENTED_EDGE('',*,*,#603,.T.); +#627 = ORIENTED_EDGE('',*,*,#92,.F.); +#628 = CYLINDRICAL_SURFACE('',#629,5.2); +#629 = AXIS2_PLACEMENT_3D('',#630,#631,#632); +#630 = CARTESIAN_POINT('',(-25.35093464349,3.,-60.90537900045)); +#631 = DIRECTION('',(0.,-1.,0.)); +#632 = DIRECTION('',(-1.,0.,0.)); +#633 = ADVANCED_FACE('',(#634),#645,.T.); +#634 = FACE_BOUND('',#635,.T.); +#635 = EDGE_LOOP('',(#636,#642,#643,#644)); +#636 = ORIENTED_EDGE('',*,*,#637,.F.); +#637 = EDGE_CURVE('',#326,#102,#638,.T.); +#638 = LINE('',#639,#640); +#639 = CARTESIAN_POINT('',(-26.93875323652,3.,-55.20570756731)); +#640 = VECTOR('',#641,1.); +#641 = DIRECTION('',(0.,-1.,0.)); +#642 = ORIENTED_EDGE('',*,*,#442,.F.); +#643 = ORIENTED_EDGE('',*,*,#620,.T.); +#644 = ORIENTED_EDGE('',*,*,#101,.T.); +#645 = PLANE('',#646); +#646 = AXIS2_PLACEMENT_3D('',#647,#648,#649); +#647 = CARTESIAN_POINT('',(-27.90836811563,3.,-56.14404399617)); +#648 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#649 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#650 = ADVANCED_FACE('',(#651),#662,.T.); +#651 = FACE_BOUND('',#652,.T.); +#652 = EDGE_LOOP('',(#653,#659,#660,#661)); +#653 = ORIENTED_EDGE('',*,*,#654,.F.); +#654 = EDGE_CURVE('',#328,#110,#655,.T.); +#655 = LINE('',#656,#657); +#656 = CARTESIAN_POINT('',(-41.17904151244,3.,-10.52828909594)); +#657 = VECTOR('',#658,1.); +#658 = DIRECTION('',(0.,-1.,0.)); +#659 = ORIENTED_EDGE('',*,*,#325,.F.); +#660 = ORIENTED_EDGE('',*,*,#637,.T.); +#661 = ORIENTED_EDGE('',*,*,#109,.T.); +#662 = PLANE('',#663); +#663 = AXIS2_PLACEMENT_3D('',#664,#665,#666); +#664 = CARTESIAN_POINT('',(-34.04006158346,3.,-32.92609366041)); +#665 = DIRECTION('',(-0.952773183837,0.,-0.30368282823)); +#666 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#667 = ADVANCED_FACE('',(#668),#679,.T.); +#668 = FACE_BOUND('',#669,.T.); +#669 = EDGE_LOOP('',(#670,#676,#677,#678)); +#670 = ORIENTED_EDGE('',*,*,#671,.F.); +#671 = EDGE_CURVE('',#336,#118,#672,.T.); +#672 = LINE('',#673,#674); +#673 = CARTESIAN_POINT('',(-39.69176606491,3.,-4.408923352436)); +#674 = VECTOR('',#675,1.); +#675 = DIRECTION('',(0.,-1.,0.)); +#676 = ORIENTED_EDGE('',*,*,#335,.T.); +#677 = ORIENTED_EDGE('',*,*,#654,.T.); +#678 = ORIENTED_EDGE('',*,*,#117,.F.); +#679 = CYLINDRICAL_SURFACE('',#680,6.054044962965); +#680 = AXIS2_PLACEMENT_3D('',#681,#682,#683); +#681 = CARTESIAN_POINT('',(-35.41090981799,3.,-8.689779599357)); +#682 = DIRECTION('',(0.,-1.,0.)); +#683 = DIRECTION('',(-1.,0.,0.)); +#684 = ADVANCED_FACE('',(#685),#696,.T.); +#685 = FACE_BOUND('',#686,.T.); +#686 = EDGE_LOOP('',(#687,#693,#694,#695)); +#687 = ORIENTED_EDGE('',*,*,#688,.F.); +#688 = EDGE_CURVE('',#345,#127,#689,.T.); +#689 = LINE('',#690,#691); +#690 = CARTESIAN_POINT('',(-36.85603142851,3.,-1.573188716044)); +#691 = VECTOR('',#692,1.); +#692 = DIRECTION('',(0.,-1.,0.)); +#693 = ORIENTED_EDGE('',*,*,#344,.F.); +#694 = ORIENTED_EDGE('',*,*,#671,.T.); +#695 = ORIENTED_EDGE('',*,*,#126,.T.); +#696 = PLANE('',#697); +#697 = AXIS2_PLACEMENT_3D('',#698,#699,#700); +#698 = CARTESIAN_POINT('',(-38.27389874671,3.,-2.99105603424)); +#699 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#700 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#701 = ADVANCED_FACE('',(#702),#713,.T.); +#702 = FACE_BOUND('',#703,.T.); +#703 = EDGE_LOOP('',(#704,#710,#711,#712)); +#704 = ORIENTED_EDGE('',*,*,#705,.F.); +#705 = EDGE_CURVE('',#353,#135,#706,.T.); +#706 = LINE('',#707,#708); +#707 = CARTESIAN_POINT('',(-32.57517518159,3.,0.2)); +#708 = VECTOR('',#709,1.); +#709 = DIRECTION('',(0.,-1.,0.)); +#710 = ORIENTED_EDGE('',*,*,#352,.T.); +#711 = ORIENTED_EDGE('',*,*,#688,.T.); +#712 = ORIENTED_EDGE('',*,*,#134,.F.); +#713 = CYLINDRICAL_SURFACE('',#714,6.054044962965); +#714 = AXIS2_PLACEMENT_3D('',#715,#716,#717); +#715 = CARTESIAN_POINT('',(-32.57517518159,3.,-5.854044962965)); +#716 = DIRECTION('',(0.,-1.,0.)); +#717 = DIRECTION('',(-1.,0.,0.)); +#718 = ADVANCED_FACE('',(#719),#730,.T.); +#719 = FACE_BOUND('',#720,.T.); +#720 = EDGE_LOOP('',(#721,#727,#728,#729)); +#721 = ORIENTED_EDGE('',*,*,#722,.F.); +#722 = EDGE_CURVE('',#362,#144,#723,.T.); +#723 = LINE('',#724,#725); +#724 = CARTESIAN_POINT('',(35.082842712475,3.,0.2)); +#725 = VECTOR('',#726,1.); +#726 = DIRECTION('',(0.,-1.,0.)); +#727 = ORIENTED_EDGE('',*,*,#361,.F.); +#728 = ORIENTED_EDGE('',*,*,#705,.T.); +#729 = ORIENTED_EDGE('',*,*,#143,.T.); +#730 = PLANE('',#731); +#731 = AXIS2_PLACEMENT_3D('',#732,#733,#734); +#732 = CARTESIAN_POINT('',(-16.28758759079,3.,0.2)); +#733 = DIRECTION('',(0.,0.,1.)); +#734 = DIRECTION('',(0.,-1.,0.)); +#735 = ADVANCED_FACE('',(#736),#742,.F.); +#736 = FACE_BOUND('',#737,.F.); +#737 = EDGE_LOOP('',(#738,#739,#740,#741)); +#738 = ORIENTED_EDGE('',*,*,#151,.T.); +#739 = ORIENTED_EDGE('',*,*,#722,.F.); +#740 = ORIENTED_EDGE('',*,*,#369,.F.); +#741 = ORIENTED_EDGE('',*,*,#242,.T.); +#742 = PLANE('',#743); +#743 = AXIS2_PLACEMENT_3D('',#744,#745,#746); +#744 = CARTESIAN_POINT('',(38.67695526217,3.,-3.394112549695)); +#745 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#746 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#747 = ADVANCED_FACE('',(#748),#765,.T.); +#748 = FACE_BOUND('',#749,.T.); +#749 = EDGE_LOOP('',(#750,#758,#764)); +#750 = ORIENTED_EDGE('',*,*,#751,.T.); +#751 = EDGE_CURVE('',#451,#752,#754,.T.); +#752 = VERTEX_POINT('',#753); +#753 = CARTESIAN_POINT('',(3.256654205567E-15,17.8572529153, + -18.39898295202)); +#754 = LINE('',#755,#756); +#755 = CARTESIAN_POINT('',(5.649679875255,3.602918464526,-13.21082950266 + )); +#756 = VECTOR('',#757,1.); +#757 = DIRECTION('',(-0.349023821871,0.880598971639,-0.320511814002)); +#758 = ORIENTED_EDGE('',*,*,#759,.T.); +#759 = EDGE_CURVE('',#752,#461,#760,.T.); +#760 = LINE('',#761,#762); +#761 = CARTESIAN_POINT('',(-5.275833888477,4.546144602338, + -13.55413574101)); +#762 = VECTOR('',#763,1.); +#763 = DIRECTION('',(-0.349023821871,-0.880598971639,0.320511814002)); +#764 = ORIENTED_EDGE('',*,*,#460,.T.); +#765 = PLANE('',#766); +#766 = AXIS2_PLACEMENT_3D('',#767,#768,#769); +#767 = CARTESIAN_POINT('',(2.828438300639,3.068404028665,-13.01628215822 + )); +#768 = DIRECTION('',(2.881637632171E-16,0.342020143326,0.939692620786)); +#769 = DIRECTION('',(-1.048830324052E-16,0.939692620786,-0.342020143326) + ); +#770 = ADVANCED_FACE('',(#771),#789,.T.); +#771 = FACE_BOUND('',#772,.T.); +#772 = EDGE_LOOP('',(#773,#781,#782,#783)); +#773 = ORIENTED_EDGE('',*,*,#774,.T.); +#774 = EDGE_CURVE('',#775,#752,#777,.T.); +#775 = VERTEX_POINT('',#776); +#776 = CARTESIAN_POINT('',(1.480297366167E-15,11.242400581089, + -46.71869179633)); +#777 = LINE('',#778,#779); +#778 = CARTESIAN_POINT('',(2.6645352591E-15,18.133069549222, + -17.21814831317)); +#779 = VECTOR('',#780,1.); +#780 = DIRECTION('',(5.275122655166E-17,0.227455280238,0.97378852709)); +#781 = ORIENTED_EDGE('',*,*,#751,.F.); +#782 = ORIENTED_EDGE('',*,*,#450,.T.); +#783 = ORIENTED_EDGE('',*,*,#784,.T.); +#784 = EDGE_CURVE('',#453,#775,#785,.T.); +#785 = LINE('',#786,#787); +#786 = CARTESIAN_POINT('',(1.103762571829,7.940067898719,-47.92064259636 + )); +#787 = VECTOR('',#788,1.); +#788 = DIRECTION('',(-0.299648208284,0.896513522642,0.326304236859)); +#789 = PLANE('',#790); +#790 = AXIS2_PLACEMENT_3D('',#791,#792,#793); +#791 = CARTESIAN_POINT('',(5.823691883056,3.068404028665,-13.45978839622 + )); +#792 = DIRECTION('',(0.93629059846,0.342020143326,-7.988827695448E-02)); +#793 = DIRECTION('',(-0.340781908463,0.939692620786,2.907695487824E-02) + ); +#794 = ADVANCED_FACE('',(#795),#805,.T.); +#795 = FACE_BOUND('',#796,.T.); +#796 = EDGE_LOOP('',(#797,#803,#804)); +#797 = ORIENTED_EDGE('',*,*,#798,.T.); +#798 = EDGE_CURVE('',#469,#775,#799,.T.); +#799 = LINE('',#800,#801); +#800 = CARTESIAN_POINT('',(-0.871390517001,8.635298785064, + -47.66759924779)); +#801 = VECTOR('',#802,1.); +#802 = DIRECTION('',(0.299648208284,0.896513522642,0.326304236859)); +#803 = ORIENTED_EDGE('',*,*,#784,.F.); +#804 = ORIENTED_EDGE('',*,*,#476,.T.); +#805 = PLANE('',#806); +#806 = AXIS2_PLACEMENT_3D('',#807,#808,#809); +#807 = CARTESIAN_POINT('',(2.828438300639,3.068404028665,-49.69378323641 + )); +#808 = DIRECTION('',(0.,0.342020143326,-0.939692620786)); +#809 = DIRECTION('',(0.,0.939692620786,0.342020143326)); +#810 = ADVANCED_FACE('',(#811),#817,.T.); +#811 = FACE_BOUND('',#812,.T.); +#812 = EDGE_LOOP('',(#813,#814,#815,#816)); +#813 = ORIENTED_EDGE('',*,*,#468,.T.); +#814 = ORIENTED_EDGE('',*,*,#759,.F.); +#815 = ORIENTED_EDGE('',*,*,#774,.F.); +#816 = ORIENTED_EDGE('',*,*,#798,.F.); +#817 = PLANE('',#818); +#818 = AXIS2_PLACEMENT_3D('',#819,#820,#821); +#819 = CARTESIAN_POINT('',(-5.782806207227,3.068404028665, + -13.93896851312)); +#820 = DIRECTION('',(-0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#821 = DIRECTION('',(0.340781908463,0.939692620786,2.907695487824E-02)); +#822 = ADVANCED_FACE('',(#823),#834,.F.); +#823 = FACE_BOUND('',#824,.F.); +#824 = EDGE_LOOP('',(#825,#831,#832,#833)); +#825 = ORIENTED_EDGE('',*,*,#826,.F.); +#826 = EDGE_CURVE('',#217,#485,#827,.T.); +#827 = LINE('',#828,#829); +#828 = CARTESIAN_POINT('',(-11.6927539352,-22.,-48.00951684793)); +#829 = VECTOR('',#830,1.); +#830 = DIRECTION('',(0.,1.,0.)); +#831 = ORIENTED_EDGE('',*,*,#216,.T.); +#832 = ORIENTED_EDGE('',*,*,#826,.T.); +#833 = ORIENTED_EDGE('',*,*,#484,.F.); +#834 = CYLINDRICAL_SURFACE('',#835,4.735522705283); +#835 = AXIS2_PLACEMENT_3D('',#836,#837,#838); +#836 = CARTESIAN_POINT('',(-16.42827664048,-22.,-48.00951684793)); +#837 = DIRECTION('',(0.,1.,0.)); +#838 = DIRECTION('',(1.,0.,0.)); +#839 = ADVANCED_FACE('',(#840),#851,.F.); +#840 = FACE_BOUND('',#841,.F.); +#841 = EDGE_LOOP('',(#842,#848,#849,#850)); +#842 = ORIENTED_EDGE('',*,*,#843,.F.); +#843 = EDGE_CURVE('',#72,#315,#844,.T.); +#844 = LINE('',#845,#846); +#845 = CARTESIAN_POINT('',(21.163799345768,-22.,-48.00951684793)); +#846 = VECTOR('',#847,1.); +#847 = DIRECTION('',(0.,1.,0.)); +#848 = ORIENTED_EDGE('',*,*,#71,.T.); +#849 = ORIENTED_EDGE('',*,*,#843,.T.); +#850 = ORIENTED_EDGE('',*,*,#314,.F.); +#851 = CYLINDRICAL_SURFACE('',#852,4.735522705283); +#852 = AXIS2_PLACEMENT_3D('',#853,#854,#855); +#853 = CARTESIAN_POINT('',(16.428276640485,-22.,-48.00951684793)); +#854 = DIRECTION('',(0.,1.,0.)); +#855 = DIRECTION('',(1.,0.,0.)); +#856 = ADVANCED_FACE('',(#857),#873,.F.); +#857 = FACE_BOUND('',#858,.F.); +#858 = EDGE_LOOP('',(#859,#865,#866,#872)); +#859 = ORIENTED_EDGE('',*,*,#860,.F.); +#860 = EDGE_CURVE('',#24,#265,#861,.T.); +#861 = LINE('',#862,#863); +#862 = CARTESIAN_POINT('',(16.626582997737,-22.,-8.940188245231)); +#863 = VECTOR('',#864,1.); +#864 = DIRECTION('',(0.,1.,0.)); +#865 = ORIENTED_EDGE('',*,*,#63,.T.); +#866 = ORIENTED_EDGE('',*,*,#867,.T.); +#867 = EDGE_CURVE('',#56,#267,#868,.T.); +#868 = LINE('',#869,#870); +#869 = CARTESIAN_POINT('',(-5.329070518201E-15,-22.,-8.903751135252)); +#870 = VECTOR('',#871,1.); +#871 = DIRECTION('',(0.,1.,0.)); +#872 = ORIENTED_EDGE('',*,*,#264,.F.); +#873 = PLANE('',#874); +#874 = AXIS2_PLACEMENT_3D('',#875,#876,#877); +#875 = CARTESIAN_POINT('',(8.237581109188,-22.,-8.921803528809)); +#876 = DIRECTION('',(-2.191520817069E-03,0.,-0.999997598615)); +#877 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#878 = ADVANCED_FACE('',(#879),#890,.F.); +#879 = FACE_BOUND('',#880,.F.); +#880 = EDGE_LOOP('',(#881,#887,#888,#889)); +#881 = ORIENTED_EDGE('',*,*,#882,.T.); +#882 = EDGE_CURVE('',#48,#299,#883,.T.); +#883 = LINE('',#884,#885); +#884 = CARTESIAN_POINT('',(-21.72552223146,-22.,-8.903751135252)); +#885 = VECTOR('',#886,1.); +#886 = DIRECTION('',(0.,1.,0.)); +#887 = ORIENTED_EDGE('',*,*,#306,.F.); +#888 = ORIENTED_EDGE('',*,*,#867,.F.); +#889 = ORIENTED_EDGE('',*,*,#55,.T.); +#890 = PLANE('',#891); +#891 = AXIS2_PLACEMENT_3D('',#892,#893,#894); +#892 = CARTESIAN_POINT('',(-10.96276111573,-22.,-8.903751135252)); +#893 = DIRECTION('',(0.,0.,-1.)); +#894 = DIRECTION('',(0.,1.,0.)); +#895 = ADVANCED_FACE('',(#896),#907,.F.); +#896 = FACE_BOUND('',#897,.F.); +#897 = EDGE_LOOP('',(#898,#904,#905,#906)); +#898 = ORIENTED_EDGE('',*,*,#899,.T.); +#899 = EDGE_CURVE('',#40,#291,#900,.T.); +#900 = LINE('',#901,#902); +#901 = CARTESIAN_POINT('',(-21.72552223146,-22.,-3.734519760785)); +#902 = VECTOR('',#903,1.); +#903 = DIRECTION('',(0.,1.,0.)); +#904 = ORIENTED_EDGE('',*,*,#298,.F.); +#905 = ORIENTED_EDGE('',*,*,#882,.F.); +#906 = ORIENTED_EDGE('',*,*,#47,.T.); +#907 = PLANE('',#908); +#908 = AXIS2_PLACEMENT_3D('',#909,#910,#911); +#909 = CARTESIAN_POINT('',(-21.72552223146,-22.,-6.319135448019)); +#910 = DIRECTION('',(-1.,0.,0.)); +#911 = DIRECTION('',(0.,1.,0.)); +#912 = ADVANCED_FACE('',(#913),#924,.F.); +#913 = FACE_BOUND('',#914,.F.); +#914 = EDGE_LOOP('',(#915,#921,#922,#923)); +#915 = ORIENTED_EDGE('',*,*,#916,.T.); +#916 = EDGE_CURVE('',#32,#283,#917,.T.); +#917 = LINE('',#918,#919); +#918 = CARTESIAN_POINT('',(22.059435554995,-22.,-3.734519760785)); +#919 = VECTOR('',#920,1.); +#920 = DIRECTION('',(0.,1.,0.)); +#921 = ORIENTED_EDGE('',*,*,#290,.F.); +#922 = ORIENTED_EDGE('',*,*,#899,.F.); +#923 = ORIENTED_EDGE('',*,*,#39,.T.); +#924 = PLANE('',#925); +#925 = AXIS2_PLACEMENT_3D('',#926,#927,#928); +#926 = CARTESIAN_POINT('',(0.19111316645,-22.,-3.734519760785)); +#927 = DIRECTION('',(0.,0.,1.)); +#928 = DIRECTION('',(0.,-1.,0.)); +#929 = ADVANCED_FACE('',(#930),#941,.F.); +#930 = FACE_BOUND('',#931,.F.); +#931 = EDGE_LOOP('',(#932,#938,#939,#940)); +#932 = ORIENTED_EDGE('',*,*,#933,.T.); +#933 = EDGE_CURVE('',#22,#275,#934,.T.); +#934 = LINE('',#935,#936); +#935 = CARTESIAN_POINT('',(19.029295926024,-22.,-17.63009960955)); +#936 = VECTOR('',#937,1.); +#937 = DIRECTION('',(0.,1.,0.)); +#938 = ORIENTED_EDGE('',*,*,#282,.F.); +#939 = ORIENTED_EDGE('',*,*,#916,.F.); +#940 = ORIENTED_EDGE('',*,*,#31,.T.); +#941 = PLANE('',#942); +#942 = AXIS2_PLACEMENT_3D('',#943,#944,#945); +#943 = CARTESIAN_POINT('',(20.484588228021,-22.,-10.95643672209)); +#944 = DIRECTION('',(0.977039526026,0.,-0.213058124893)); +#945 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#946 = ADVANCED_FACE('',(#947),#953,.F.); +#947 = FACE_BOUND('',#948,.F.); +#948 = EDGE_LOOP('',(#949,#950,#951,#952)); +#949 = ORIENTED_EDGE('',*,*,#21,.T.); +#950 = ORIENTED_EDGE('',*,*,#860,.T.); +#951 = ORIENTED_EDGE('',*,*,#274,.F.); +#952 = ORIENTED_EDGE('',*,*,#933,.F.); +#953 = PLANE('',#954); +#954 = AXIS2_PLACEMENT_3D('',#955,#956,#957); +#955 = CARTESIAN_POINT('',(17.956031892536,-22.,-13.7484168618)); +#956 = DIRECTION('',(-0.963836182336,0.,-0.26649542889)); +#957 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#958 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#962)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#959,#960,#961)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#959 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#960 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#961 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#962 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-05),#959, + 'distance_accuracy_value','confusion accuracy'); +#963 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +ENDSEC; +END-ISO-10303-21; diff --git a/docs/CAD/design/mate-connectors/BearConnector_Female.step b/docs/CAD/design/mate-connectors/BearConnector_Female.step new file mode 100644 index 0000000000..18e31c4b47 --- /dev/null +++ b/docs/CAD/design/mate-connectors/BearConnector_Female.step @@ -0,0 +1,1173 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-08-05T10:54:26',('FreeCAD'),( + 'FreeCAD'),'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('Open CASCADE STEP translator 7.8 1', + 'Open CASCADE STEP translator 7.8 1','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#1118); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = MANIFOLD_SOLID_BREP('',#16); +#16 = CLOSED_SHELL('',(#17,#57,#222,#246,#270,#287,#299,#330,#354,#378, + #402,#426,#451,#475,#500,#524,#548,#573,#597,#622,#646,#670,#687, + #817,#848,#872,#896,#920,#944,#961,#986,#1017,#1033,#1050,#1061, + #1086,#1100,#1109)); +#17 = ADVANCED_FACE('',(#18),#52,.F.); +#18 = FACE_BOUND('',#19,.F.); +#19 = EDGE_LOOP('',(#20,#30,#38,#46)); +#20 = ORIENTED_EDGE('',*,*,#21,.F.); +#21 = EDGE_CURVE('',#22,#24,#26,.T.); +#22 = VERTEX_POINT('',#23); +#23 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#24 = VERTEX_POINT('',#25); +#25 = CARTESIAN_POINT('',(-45.46495478095,0.,4.2)); +#26 = LINE('',#27,#28); +#27 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#28 = VECTOR('',#29,1.); +#29 = DIRECTION('',(0.,0.,1.)); +#30 = ORIENTED_EDGE('',*,*,#31,.T.); +#31 = EDGE_CURVE('',#22,#32,#34,.T.); +#32 = VERTEX_POINT('',#33); +#33 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,-70.97315781796) + ); +#34 = LINE('',#35,#36); +#35 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#36 = VECTOR('',#37,1.); +#37 = DIRECTION('',(0.,1.,0.)); +#38 = ORIENTED_EDGE('',*,*,#39,.T.); +#39 = EDGE_CURVE('',#32,#40,#42,.T.); +#40 = VERTEX_POINT('',#41); +#41 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,4.2)); +#42 = LINE('',#43,#44); +#43 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,-70.97315781796) + ); +#44 = VECTOR('',#45,1.); +#45 = DIRECTION('',(0.,0.,1.)); +#46 = ORIENTED_EDGE('',*,*,#47,.F.); +#47 = EDGE_CURVE('',#24,#40,#48,.T.); +#48 = LINE('',#49,#50); +#49 = CARTESIAN_POINT('',(-45.46495478095,0.,4.2)); +#50 = VECTOR('',#51,1.); +#51 = DIRECTION('',(0.,1.,0.)); +#52 = PLANE('',#53); +#53 = AXIS2_PLACEMENT_3D('',#54,#55,#56); +#54 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#55 = DIRECTION('',(1.,0.,0.)); +#56 = DIRECTION('',(0.,0.,1.)); +#57 = ADVANCED_FACE('',(#58,#83),#217,.F.); +#58 = FACE_BOUND('',#59,.F.); +#59 = EDGE_LOOP('',(#60,#68,#69,#77)); +#60 = ORIENTED_EDGE('',*,*,#61,.F.); +#61 = EDGE_CURVE('',#22,#62,#64,.T.); +#62 = VERTEX_POINT('',#63); +#63 = CARTESIAN_POINT('',(46.298608189024,0.,-70.97315781796)); +#64 = LINE('',#65,#66); +#65 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#66 = VECTOR('',#67,1.); +#67 = DIRECTION('',(1.,0.,0.)); +#68 = ORIENTED_EDGE('',*,*,#21,.T.); +#69 = ORIENTED_EDGE('',*,*,#70,.T.); +#70 = EDGE_CURVE('',#24,#71,#73,.T.); +#71 = VERTEX_POINT('',#72); +#72 = CARTESIAN_POINT('',(46.298608189024,0.,4.2)); +#73 = LINE('',#74,#75); +#74 = CARTESIAN_POINT('',(-45.46495478095,0.,4.2)); +#75 = VECTOR('',#76,1.); +#76 = DIRECTION('',(1.,0.,0.)); +#77 = ORIENTED_EDGE('',*,*,#78,.F.); +#78 = EDGE_CURVE('',#62,#71,#79,.T.); +#79 = LINE('',#80,#81); +#80 = CARTESIAN_POINT('',(46.298608189024,0.,-70.97315781796)); +#81 = VECTOR('',#82,1.); +#82 = DIRECTION('',(0.,0.,1.)); +#83 = FACE_BOUND('',#84,.F.); +#84 = EDGE_LOOP('',(#85,#95,#103,#111,#119,#128,#136,#145,#153,#161,#170 + ,#178,#187,#195,#203,#211)); +#85 = ORIENTED_EDGE('',*,*,#86,.T.); +#86 = EDGE_CURVE('',#87,#89,#91,.T.); +#87 = VERTEX_POINT('',#88); +#88 = CARTESIAN_POINT('',(32.703857168398,0.,-60.78483712899)); +#89 = VERTEX_POINT('',#90); +#90 = CARTESIAN_POINT('',(26.938753236523,0.,-55.20570756731)); +#91 = LINE('',#92,#93); +#92 = CARTESIAN_POINT('',(13.567306766147,0.,-42.26560567724)); +#93 = VECTOR('',#94,1.); +#94 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#95 = ORIENTED_EDGE('',*,*,#96,.T.); +#96 = EDGE_CURVE('',#89,#97,#99,.T.); +#97 = VERTEX_POINT('',#98); +#98 = CARTESIAN_POINT('',(42.298608189024,0.,-7.015765476549)); +#99 = LINE('',#100,#101); +#100 = CARTESIAN_POINT('',(25.140315874087,-4.440892098501E-16, + -60.84811712245)); +#101 = VECTOR('',#102,1.); +#102 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#103 = ORIENTED_EDGE('',*,*,#104,.T.); +#104 = EDGE_CURVE('',#97,#105,#107,.T.); +#105 = VERTEX_POINT('',#106); +#106 = CARTESIAN_POINT('',(35.082842712475,0.,0.2)); +#107 = LINE('',#108,#109); +#108 = CARTESIAN_POINT('',(34.536239068456,0.,0.746603644019)); +#109 = VECTOR('',#110,1.); +#110 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#111 = ORIENTED_EDGE('',*,*,#112,.F.); +#112 = EDGE_CURVE('',#113,#105,#115,.T.); +#113 = VERTEX_POINT('',#114); +#114 = CARTESIAN_POINT('',(-32.57517518159,0.,0.2)); +#115 = LINE('',#116,#117); +#116 = CARTESIAN_POINT('',(-30.87627118587,0.,0.2)); +#117 = VECTOR('',#118,1.); +#118 = DIRECTION('',(1.,0.,0.)); +#119 = ORIENTED_EDGE('',*,*,#120,.T.); +#120 = EDGE_CURVE('',#113,#121,#123,.T.); +#121 = VERTEX_POINT('',#122); +#122 = CARTESIAN_POINT('',(-36.85603142851,0.,-1.573188716044)); +#123 = CIRCLE('',#124,6.054044962965); +#124 = AXIS2_PLACEMENT_3D('',#125,#126,#127); +#125 = CARTESIAN_POINT('',(-32.57517518159,0.,-5.854044962965)); +#126 = DIRECTION('',(0.,-1.,0.)); +#127 = DIRECTION('',(-1.,0.,0.)); +#128 = ORIENTED_EDGE('',*,*,#129,.F.); +#129 = EDGE_CURVE('',#130,#121,#132,.T.); +#130 = VERTEX_POINT('',#131); +#131 = CARTESIAN_POINT('',(-39.69176606491,0.,-4.408923352436)); +#132 = LINE('',#133,#134); +#133 = CARTESIAN_POINT('',(-57.0671882012,0.,-21.78434548873)); +#134 = VECTOR('',#135,1.); +#135 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#136 = ORIENTED_EDGE('',*,*,#137,.T.); +#137 = EDGE_CURVE('',#130,#138,#140,.T.); +#138 = VERTEX_POINT('',#139); +#139 = CARTESIAN_POINT('',(-41.17904151244,0.,-10.52828909594)); +#140 = CIRCLE('',#141,6.054044962965); +#141 = AXIS2_PLACEMENT_3D('',#142,#143,#144); +#142 = CARTESIAN_POINT('',(-35.41090981799,0.,-8.689779599357)); +#143 = DIRECTION('',(0.,-1.,0.)); +#144 = DIRECTION('',(-1.,0.,0.)); +#145 = ORIENTED_EDGE('',*,*,#146,.F.); +#146 = EDGE_CURVE('',#147,#138,#149,.T.); +#147 = VERTEX_POINT('',#148); +#148 = CARTESIAN_POINT('',(-26.93875323652,0.,-55.20570756731)); +#149 = LINE('',#150,#151); +#150 = CARTESIAN_POINT('',(-29.06259699304,-4.440892098501E-16, + -48.54236940733)); +#151 = VECTOR('',#152,1.); +#152 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#153 = ORIENTED_EDGE('',*,*,#154,.F.); +#154 = EDGE_CURVE('',#155,#147,#157,.T.); +#155 = VERTEX_POINT('',#156); +#156 = CARTESIAN_POINT('',(-28.96712497021,0.,-57.16864680227)); +#157 = LINE('',#158,#159); +#158 = CARTESIAN_POINT('',(-36.14667143517,0.,-64.11659091489)); +#159 = VECTOR('',#160,1.); +#160 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#161 = ORIENTED_EDGE('',*,*,#162,.T.); +#162 = EDGE_CURVE('',#155,#163,#165,.T.); +#163 = VERTEX_POINT('',#164); +#164 = CARTESIAN_POINT('',(-29.08766684168,0.,-64.52156932717)); +#165 = CIRCLE('',#166,5.2); +#166 = AXIS2_PLACEMENT_3D('',#167,#168,#169); +#167 = CARTESIAN_POINT('',(-25.35093464349,0.,-60.90537900045)); +#168 = DIRECTION('',(0.,-1.,0.)); +#169 = DIRECTION('',(-1.,0.,0.)); +#170 = ORIENTED_EDGE('',*,*,#171,.F.); +#171 = EDGE_CURVE('',#172,#163,#174,.T.); +#172 = VERTEX_POINT('',#173); +#173 = CARTESIAN_POINT('',(-27.86158468659,0.,-65.78852163128)); +#174 = LINE('',#175,#176); +#175 = CARTESIAN_POINT('',(-31.12923147938,0.,-62.41195129628)); +#176 = VECTOR('',#177,1.); +#177 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#178 = ORIENTED_EDGE('',*,*,#179,.T.); +#179 = EDGE_CURVE('',#172,#180,#182,.T.); +#180 = VERTEX_POINT('',#181); +#181 = CARTESIAN_POINT('',(-25.53052705686,0.,-65.82673637491)); +#182 = CIRCLE('',#183,1.648528137424); +#183 = AXIS2_PLACEMENT_3D('',#184,#185,#186); +#184 = CARTESIAN_POINT('',(-26.67694849991,0.,-64.64210018823)); +#185 = DIRECTION('',(0.,-1.,0.)); +#186 = DIRECTION('',(-1.,0.,0.)); +#187 = ORIENTED_EDGE('',*,*,#188,.F.); +#188 = EDGE_CURVE('',#189,#180,#191,.T.); +#189 = VERTEX_POINT('',#190); +#190 = CARTESIAN_POINT('',(-20.53201900137,0.,-60.98947335481)); +#191 = LINE('',#192,#193); +#192 = CARTESIAN_POINT('',(-30.69923804215,0.,-70.82871181101)); +#193 = VECTOR('',#194,1.); +#194 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#195 = ORIENTED_EDGE('',*,*,#196,.T.); +#196 = EDGE_CURVE('',#189,#197,#199,.T.); +#197 = VERTEX_POINT('',#198); +#198 = CARTESIAN_POINT('',(20.532019001374,0.,-60.98947335481)); +#199 = LINE('',#200,#201); +#200 = CARTESIAN_POINT('',(-17.57924046663,0.,-60.98947335481)); +#201 = VECTOR('',#202,1.); +#202 = DIRECTION('',(1.,0.,0.)); +#203 = ORIENTED_EDGE('',*,*,#204,.T.); +#204 = EDGE_CURVE('',#197,#205,#207,.T.); +#205 = VERTEX_POINT('',#206); +#206 = CARTESIAN_POINT('',(26.715163243538,0.,-66.97315781796)); +#207 = LINE('',#208,#209); +#208 = CARTESIAN_POINT('',(7.481849370247,-4.440892098501E-16, + -48.36028435244)); +#209 = VECTOR('',#210,1.); +#210 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#211 = ORIENTED_EDGE('',*,*,#212,.T.); +#212 = EDGE_CURVE('',#205,#87,#213,.T.); +#213 = LINE('',#214,#215); +#214 = CARTESIAN_POINT('',(9.75933652063,0.,-84.4941890519)); +#215 = VECTOR('',#216,1.); +#216 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#217 = PLANE('',#218); +#218 = AXIS2_PLACEMENT_3D('',#219,#220,#221); +#219 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#220 = DIRECTION('',(0.,1.,0.)); +#221 = DIRECTION('',(0.,0.,1.)); +#222 = ADVANCED_FACE('',(#223),#241,.T.); +#223 = FACE_BOUND('',#224,.T.); +#224 = EDGE_LOOP('',(#225,#226,#227,#235)); +#225 = ORIENTED_EDGE('',*,*,#47,.F.); +#226 = ORIENTED_EDGE('',*,*,#70,.T.); +#227 = ORIENTED_EDGE('',*,*,#228,.T.); +#228 = EDGE_CURVE('',#71,#229,#231,.T.); +#229 = VERTEX_POINT('',#230); +#230 = CARTESIAN_POINT('',(46.298608189024,20.8572529153,4.2)); +#231 = LINE('',#232,#233); +#232 = CARTESIAN_POINT('',(46.298608189024,0.,4.2)); +#233 = VECTOR('',#234,1.); +#234 = DIRECTION('',(0.,1.,0.)); +#235 = ORIENTED_EDGE('',*,*,#236,.F.); +#236 = EDGE_CURVE('',#40,#229,#237,.T.); +#237 = LINE('',#238,#239); +#238 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,4.2)); +#239 = VECTOR('',#240,1.); +#240 = DIRECTION('',(1.,0.,0.)); +#241 = PLANE('',#242); +#242 = AXIS2_PLACEMENT_3D('',#243,#244,#245); +#243 = CARTESIAN_POINT('',(-45.46495478095,0.,4.2)); +#244 = DIRECTION('',(0.,0.,1.)); +#245 = DIRECTION('',(1.,0.,0.)); +#246 = ADVANCED_FACE('',(#247),#265,.T.); +#247 = FACE_BOUND('',#248,.T.); +#248 = EDGE_LOOP('',(#249,#257,#258,#259)); +#249 = ORIENTED_EDGE('',*,*,#250,.F.); +#250 = EDGE_CURVE('',#32,#251,#253,.T.); +#251 = VERTEX_POINT('',#252); +#252 = CARTESIAN_POINT('',(46.298608189024,20.8572529153,-70.97315781796 + )); +#253 = LINE('',#254,#255); +#254 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,-70.97315781796 + )); +#255 = VECTOR('',#256,1.); +#256 = DIRECTION('',(1.,0.,0.)); +#257 = ORIENTED_EDGE('',*,*,#39,.T.); +#258 = ORIENTED_EDGE('',*,*,#236,.T.); +#259 = ORIENTED_EDGE('',*,*,#260,.F.); +#260 = EDGE_CURVE('',#251,#229,#261,.T.); +#261 = LINE('',#262,#263); +#262 = CARTESIAN_POINT('',(46.298608189024,20.8572529153,-70.97315781796 + )); +#263 = VECTOR('',#264,1.); +#264 = DIRECTION('',(0.,0.,1.)); +#265 = PLANE('',#266); +#266 = AXIS2_PLACEMENT_3D('',#267,#268,#269); +#267 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,-70.97315781796 + )); +#268 = DIRECTION('',(0.,1.,0.)); +#269 = DIRECTION('',(0.,0.,1.)); +#270 = ADVANCED_FACE('',(#271),#282,.F.); +#271 = FACE_BOUND('',#272,.F.); +#272 = EDGE_LOOP('',(#273,#274,#275,#281)); +#273 = ORIENTED_EDGE('',*,*,#31,.F.); +#274 = ORIENTED_EDGE('',*,*,#61,.T.); +#275 = ORIENTED_EDGE('',*,*,#276,.T.); +#276 = EDGE_CURVE('',#62,#251,#277,.T.); +#277 = LINE('',#278,#279); +#278 = CARTESIAN_POINT('',(46.298608189024,0.,-70.97315781796)); +#279 = VECTOR('',#280,1.); +#280 = DIRECTION('',(0.,1.,0.)); +#281 = ORIENTED_EDGE('',*,*,#250,.F.); +#282 = PLANE('',#283); +#283 = AXIS2_PLACEMENT_3D('',#284,#285,#286); +#284 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#285 = DIRECTION('',(0.,0.,1.)); +#286 = DIRECTION('',(1.,0.,0.)); +#287 = ADVANCED_FACE('',(#288),#294,.T.); +#288 = FACE_BOUND('',#289,.T.); +#289 = EDGE_LOOP('',(#290,#291,#292,#293)); +#290 = ORIENTED_EDGE('',*,*,#78,.F.); +#291 = ORIENTED_EDGE('',*,*,#276,.T.); +#292 = ORIENTED_EDGE('',*,*,#260,.T.); +#293 = ORIENTED_EDGE('',*,*,#228,.F.); +#294 = PLANE('',#295); +#295 = AXIS2_PLACEMENT_3D('',#296,#297,#298); +#296 = CARTESIAN_POINT('',(46.298608189024,0.,-70.97315781796)); +#297 = DIRECTION('',(1.,0.,0.)); +#298 = DIRECTION('',(0.,0.,1.)); +#299 = ADVANCED_FACE('',(#300),#325,.T.); +#300 = FACE_BOUND('',#301,.T.); +#301 = EDGE_LOOP('',(#302,#310,#311,#319)); +#302 = ORIENTED_EDGE('',*,*,#303,.F.); +#303 = EDGE_CURVE('',#87,#304,#306,.T.); +#304 = VERTEX_POINT('',#305); +#305 = CARTESIAN_POINT('',(32.703857168398,3.2,-60.78483712899)); +#306 = LINE('',#307,#308); +#307 = CARTESIAN_POINT('',(32.703857168398,3.,-60.78483712899)); +#308 = VECTOR('',#309,1.); +#309 = DIRECTION('',(0.,1.,0.)); +#310 = ORIENTED_EDGE('',*,*,#86,.T.); +#311 = ORIENTED_EDGE('',*,*,#312,.F.); +#312 = EDGE_CURVE('',#313,#89,#315,.T.); +#313 = VERTEX_POINT('',#314); +#314 = CARTESIAN_POINT('',(26.938753236523,3.2,-55.20570756731)); +#315 = LINE('',#316,#317); +#316 = CARTESIAN_POINT('',(26.938753236523,3.,-55.20570756731)); +#317 = VECTOR('',#318,1.); +#318 = DIRECTION('',(0.,-1.,0.)); +#319 = ORIENTED_EDGE('',*,*,#320,.F.); +#320 = EDGE_CURVE('',#304,#313,#321,.T.); +#321 = LINE('',#322,#323); +#322 = CARTESIAN_POINT('',(16.008242280412,3.2,-44.62779994931)); +#323 = VECTOR('',#324,1.); +#324 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#325 = PLANE('',#326); +#326 = AXIS2_PLACEMENT_3D('',#327,#328,#329); +#327 = CARTESIAN_POINT('',(29.704873980143,3.,-57.88259703786)); +#328 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#329 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#330 = ADVANCED_FACE('',(#331),#349,.T.); +#331 = FACE_BOUND('',#332,.T.); +#332 = EDGE_LOOP('',(#333,#341,#342,#343)); +#333 = ORIENTED_EDGE('',*,*,#334,.F.); +#334 = EDGE_CURVE('',#205,#335,#337,.T.); +#335 = VERTEX_POINT('',#336); +#336 = CARTESIAN_POINT('',(26.715163243538,3.2,-66.97315781796)); +#337 = LINE('',#338,#339); +#338 = CARTESIAN_POINT('',(26.715163243538,3.,-66.97315781796)); +#339 = VECTOR('',#340,1.); +#340 = DIRECTION('',(0.,1.,0.)); +#341 = ORIENTED_EDGE('',*,*,#212,.T.); +#342 = ORIENTED_EDGE('',*,*,#303,.T.); +#343 = ORIENTED_EDGE('',*,*,#344,.F.); +#344 = EDGE_CURVE('',#335,#304,#345,.T.); +#345 = LINE('',#346,#347); +#346 = CARTESIAN_POINT('',(30.25240665457,3.2,-63.31800414721)); +#347 = VECTOR('',#348,1.); +#348 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#349 = PLANE('',#350); +#350 = AXIS2_PLACEMENT_3D('',#351,#352,#353); +#351 = CARTESIAN_POINT('',(29.709510205968,3.,-63.87899747347)); +#352 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#353 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#354 = ADVANCED_FACE('',(#355),#373,.T.); +#355 = FACE_BOUND('',#356,.T.); +#356 = EDGE_LOOP('',(#357,#365,#371,#372)); +#357 = ORIENTED_EDGE('',*,*,#358,.F.); +#358 = EDGE_CURVE('',#359,#335,#361,.T.); +#359 = VERTEX_POINT('',#360); +#360 = CARTESIAN_POINT('',(20.532019001374,3.2,-60.98947335481)); +#361 = LINE('',#362,#363); +#362 = CARTESIAN_POINT('',(9.922784884512,3.2,-50.72247862452)); +#363 = VECTOR('',#364,1.); +#364 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#365 = ORIENTED_EDGE('',*,*,#366,.T.); +#366 = EDGE_CURVE('',#359,#197,#367,.T.); +#367 = LINE('',#368,#369); +#368 = CARTESIAN_POINT('',(20.532019001374,3.,-60.98947335481)); +#369 = VECTOR('',#370,1.); +#370 = DIRECTION('',(0.,-1.,0.)); +#371 = ORIENTED_EDGE('',*,*,#204,.T.); +#372 = ORIENTED_EDGE('',*,*,#334,.T.); +#373 = PLANE('',#374); +#374 = AXIS2_PLACEMENT_3D('',#375,#376,#377); +#375 = CARTESIAN_POINT('',(23.522653113203,3.,-63.8836336993)); +#376 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#377 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#378 = ADVANCED_FACE('',(#379),#397,.T.); +#379 = FACE_BOUND('',#380,.T.); +#380 = EDGE_LOOP('',(#381,#389,#390,#391)); +#381 = ORIENTED_EDGE('',*,*,#382,.F.); +#382 = EDGE_CURVE('',#189,#383,#385,.T.); +#383 = VERTEX_POINT('',#384); +#384 = CARTESIAN_POINT('',(-20.53201900137,3.2,-60.98947335481)); +#385 = LINE('',#386,#387); +#386 = CARTESIAN_POINT('',(-20.53201900137,3.,-60.98947335481)); +#387 = VECTOR('',#388,1.); +#388 = DIRECTION('',(0.,1.,0.)); +#389 = ORIENTED_EDGE('',*,*,#196,.T.); +#390 = ORIENTED_EDGE('',*,*,#366,.F.); +#391 = ORIENTED_EDGE('',*,*,#392,.F.); +#392 = EDGE_CURVE('',#383,#359,#393,.T.); +#393 = LINE('',#394,#395); +#394 = CARTESIAN_POINT('',(5.354765181569,3.2,-60.98947335481)); +#395 = VECTOR('',#396,1.); +#396 = DIRECTION('',(1.,0.,0.)); +#397 = PLANE('',#398); +#398 = AXIS2_PLACEMENT_3D('',#399,#400,#401); +#399 = CARTESIAN_POINT('',(10.306473847682,3.,-60.98947335481)); +#400 = DIRECTION('',(0.,0.,1.)); +#401 = DIRECTION('',(0.,-1.,0.)); +#402 = ADVANCED_FACE('',(#403),#421,.F.); +#403 = FACE_BOUND('',#404,.F.); +#404 = EDGE_LOOP('',(#405,#413,#419,#420)); +#405 = ORIENTED_EDGE('',*,*,#406,.F.); +#406 = EDGE_CURVE('',#407,#180,#409,.T.); +#407 = VERTEX_POINT('',#408); +#408 = CARTESIAN_POINT('',(-25.53052705686,3.2,-65.82673637491)); +#409 = LINE('',#410,#411); +#410 = CARTESIAN_POINT('',(-25.53052705686,3.,-65.82673637491)); +#411 = VECTOR('',#412,1.); +#412 = DIRECTION('',(0.,-1.,0.)); +#413 = ORIENTED_EDGE('',*,*,#414,.F.); +#414 = EDGE_CURVE('',#383,#407,#415,.T.); +#415 = LINE('',#416,#417); +#416 = CARTESIAN_POINT('',(-9.454421870603,3.2,-50.26922436104)); +#417 = VECTOR('',#418,1.); +#418 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#419 = ORIENTED_EDGE('',*,*,#382,.F.); +#420 = ORIENTED_EDGE('',*,*,#188,.T.); +#421 = PLANE('',#422); +#422 = AXIS2_PLACEMENT_3D('',#423,#424,#425); +#423 = CARTESIAN_POINT('',(-23.00219525444,3.,-63.37996509944)); +#424 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#425 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#426 = ADVANCED_FACE('',(#427),#446,.F.); +#427 = FACE_BOUND('',#428,.F.); +#428 = EDGE_LOOP('',(#429,#437,#444,#445)); +#429 = ORIENTED_EDGE('',*,*,#430,.F.); +#430 = EDGE_CURVE('',#431,#172,#433,.T.); +#431 = VERTEX_POINT('',#432); +#432 = CARTESIAN_POINT('',(-27.86158468659,3.2,-65.78852163128)); +#433 = LINE('',#434,#435); +#434 = CARTESIAN_POINT('',(-27.86158468659,3.,-65.78852163128)); +#435 = VECTOR('',#436,1.); +#436 = DIRECTION('',(0.,-1.,0.)); +#437 = ORIENTED_EDGE('',*,*,#438,.T.); +#438 = EDGE_CURVE('',#431,#407,#439,.T.); +#439 = CIRCLE('',#440,1.648528137424); +#440 = AXIS2_PLACEMENT_3D('',#441,#442,#443); +#441 = CARTESIAN_POINT('',(-26.67694849991,3.2,-64.64210018823)); +#442 = DIRECTION('',(0.,-1.,0.)); +#443 = DIRECTION('',(-1.,0.,0.)); +#444 = ORIENTED_EDGE('',*,*,#406,.T.); +#445 = ORIENTED_EDGE('',*,*,#179,.F.); +#446 = CYLINDRICAL_SURFACE('',#447,1.648528137424); +#447 = AXIS2_PLACEMENT_3D('',#448,#449,#450); +#448 = CARTESIAN_POINT('',(-26.67694849991,3.,-64.64210018823)); +#449 = DIRECTION('',(0.,-1.,0.)); +#450 = DIRECTION('',(-1.,0.,0.)); +#451 = ADVANCED_FACE('',(#452),#470,.F.); +#452 = FACE_BOUND('',#453,.F.); +#453 = EDGE_LOOP('',(#454,#462,#468,#469)); +#454 = ORIENTED_EDGE('',*,*,#455,.F.); +#455 = EDGE_CURVE('',#456,#163,#458,.T.); +#456 = VERTEX_POINT('',#457); +#457 = CARTESIAN_POINT('',(-29.08766684168,3.2,-64.52156932717)); +#458 = LINE('',#459,#460); +#459 = CARTESIAN_POINT('',(-29.08766684168,3.,-64.52156932717)); +#460 = VECTOR('',#461,1.); +#461 = DIRECTION('',(0.,-1.,0.)); +#462 = ORIENTED_EDGE('',*,*,#463,.F.); +#463 = EDGE_CURVE('',#431,#456,#464,.T.); +#464 = LINE('',#465,#466); +#465 = CARTESIAN_POINT('',(-29.44004200272,3.2,-64.15744811364)); +#466 = VECTOR('',#467,1.); +#467 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#468 = ORIENTED_EDGE('',*,*,#430,.T.); +#469 = ORIENTED_EDGE('',*,*,#171,.T.); +#470 = PLANE('',#471); +#471 = AXIS2_PLACEMENT_3D('',#472,#473,#474); +#472 = CARTESIAN_POINT('',(-28.47462576413,3.,-65.15504547923)); +#473 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#474 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#475 = ADVANCED_FACE('',(#476),#495,.F.); +#476 = FACE_BOUND('',#477,.F.); +#477 = EDGE_LOOP('',(#478,#486,#493,#494)); +#478 = ORIENTED_EDGE('',*,*,#479,.F.); +#479 = EDGE_CURVE('',#480,#155,#482,.T.); +#480 = VERTEX_POINT('',#481); +#481 = CARTESIAN_POINT('',(-28.96712497021,3.2,-57.16864680227)); +#482 = LINE('',#483,#484); +#483 = CARTESIAN_POINT('',(-28.96712497021,3.,-57.16864680227)); +#484 = VECTOR('',#485,1.); +#485 = DIRECTION('',(0.,-1.,0.)); +#486 = ORIENTED_EDGE('',*,*,#487,.T.); +#487 = EDGE_CURVE('',#480,#456,#488,.T.); +#488 = CIRCLE('',#489,5.2); +#489 = AXIS2_PLACEMENT_3D('',#490,#491,#492); +#490 = CARTESIAN_POINT('',(-25.35093464349,3.2,-60.90537900045)); +#491 = DIRECTION('',(0.,-1.,0.)); +#492 = DIRECTION('',(-1.,0.,0.)); +#493 = ORIENTED_EDGE('',*,*,#455,.T.); +#494 = ORIENTED_EDGE('',*,*,#162,.F.); +#495 = CYLINDRICAL_SURFACE('',#496,5.2); +#496 = AXIS2_PLACEMENT_3D('',#497,#498,#499); +#497 = CARTESIAN_POINT('',(-25.35093464349,3.,-60.90537900045)); +#498 = DIRECTION('',(0.,-1.,0.)); +#499 = DIRECTION('',(-1.,0.,0.)); +#500 = ADVANCED_FACE('',(#501),#519,.F.); +#501 = FACE_BOUND('',#502,.F.); +#502 = EDGE_LOOP('',(#503,#511,#517,#518)); +#503 = ORIENTED_EDGE('',*,*,#504,.F.); +#504 = EDGE_CURVE('',#505,#147,#507,.T.); +#505 = VERTEX_POINT('',#506); +#506 = CARTESIAN_POINT('',(-26.93875323652,3.2,-55.20570756731)); +#507 = LINE('',#508,#509); +#508 = CARTESIAN_POINT('',(-26.93875323652,3.,-55.20570756731)); +#509 = VECTOR('',#510,1.); +#510 = DIRECTION('',(0.,-1.,0.)); +#511 = ORIENTED_EDGE('',*,*,#512,.F.); +#512 = EDGE_CURVE('',#480,#505,#513,.T.); +#513 = LINE('',#514,#515); +#514 = CARTESIAN_POINT('',(-14.90185526362,3.2,-43.55710346492)); +#515 = VECTOR('',#516,1.); +#516 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#517 = ORIENTED_EDGE('',*,*,#479,.T.); +#518 = ORIENTED_EDGE('',*,*,#154,.T.); +#519 = PLANE('',#520); +#520 = AXIS2_PLACEMENT_3D('',#521,#522,#523); +#521 = CARTESIAN_POINT('',(-27.90836811563,3.,-56.14404399617)); +#522 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#523 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#524 = ADVANCED_FACE('',(#525),#543,.F.); +#525 = FACE_BOUND('',#526,.F.); +#526 = EDGE_LOOP('',(#527,#535,#541,#542)); +#527 = ORIENTED_EDGE('',*,*,#528,.F.); +#528 = EDGE_CURVE('',#529,#138,#531,.T.); +#529 = VERTEX_POINT('',#530); +#530 = CARTESIAN_POINT('',(-41.17904151244,3.2,-10.52828909594)); +#531 = LINE('',#532,#533); +#532 = CARTESIAN_POINT('',(-41.17904151244,3.,-10.52828909594)); +#533 = VECTOR('',#534,1.); +#534 = DIRECTION('',(0.,-1.,0.)); +#535 = ORIENTED_EDGE('',*,*,#536,.F.); +#536 = EDGE_CURVE('',#505,#529,#537,.T.); +#537 = LINE('',#538,#539); +#538 = CARTESIAN_POINT('',(-32.39120436163,3.2,-38.09921113329)); +#539 = VECTOR('',#540,1.); +#540 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#541 = ORIENTED_EDGE('',*,*,#504,.T.); +#542 = ORIENTED_EDGE('',*,*,#146,.T.); +#543 = PLANE('',#544); +#544 = AXIS2_PLACEMENT_3D('',#545,#546,#547); +#545 = CARTESIAN_POINT('',(-34.04006158346,3.,-32.92609366041)); +#546 = DIRECTION('',(-0.952773183837,0.,-0.30368282823)); +#547 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#548 = ADVANCED_FACE('',(#549),#568,.F.); +#549 = FACE_BOUND('',#550,.F.); +#550 = EDGE_LOOP('',(#551,#559,#566,#567)); +#551 = ORIENTED_EDGE('',*,*,#552,.F.); +#552 = EDGE_CURVE('',#553,#130,#555,.T.); +#553 = VERTEX_POINT('',#554); +#554 = CARTESIAN_POINT('',(-39.69176606491,3.2,-4.408923352436)); +#555 = LINE('',#556,#557); +#556 = CARTESIAN_POINT('',(-39.69176606491,3.,-4.408923352436)); +#557 = VECTOR('',#558,1.); +#558 = DIRECTION('',(0.,-1.,0.)); +#559 = ORIENTED_EDGE('',*,*,#560,.T.); +#560 = EDGE_CURVE('',#553,#529,#561,.T.); +#561 = CIRCLE('',#562,6.054044962965); +#562 = AXIS2_PLACEMENT_3D('',#563,#564,#565); +#563 = CARTESIAN_POINT('',(-35.41090981799,3.2,-8.689779599357)); +#564 = DIRECTION('',(0.,-1.,0.)); +#565 = DIRECTION('',(-1.,0.,0.)); +#566 = ORIENTED_EDGE('',*,*,#528,.T.); +#567 = ORIENTED_EDGE('',*,*,#137,.F.); +#568 = CYLINDRICAL_SURFACE('',#569,6.054044962965); +#569 = AXIS2_PLACEMENT_3D('',#570,#571,#572); +#570 = CARTESIAN_POINT('',(-35.41090981799,3.,-8.689779599357)); +#571 = DIRECTION('',(0.,-1.,0.)); +#572 = DIRECTION('',(-1.,0.,0.)); +#573 = ADVANCED_FACE('',(#574),#592,.F.); +#574 = FACE_BOUND('',#575,.F.); +#575 = EDGE_LOOP('',(#576,#584,#590,#591)); +#576 = ORIENTED_EDGE('',*,*,#577,.F.); +#577 = EDGE_CURVE('',#578,#121,#580,.T.); +#578 = VERTEX_POINT('',#579); +#579 = CARTESIAN_POINT('',(-36.85603142851,3.2,-1.573188716044)); +#580 = LINE('',#581,#582); +#581 = CARTESIAN_POINT('',(-36.85603142851,3.,-1.573188716044)); +#582 = VECTOR('',#583,1.); +#583 = DIRECTION('',(0.,-1.,0.)); +#584 = ORIENTED_EDGE('',*,*,#585,.F.); +#585 = EDGE_CURVE('',#553,#578,#586,.T.); +#586 = LINE('',#587,#588); +#587 = CARTESIAN_POINT('',(-36.19319006079,3.2,-0.910347348321)); +#588 = VECTOR('',#589,1.); +#589 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#590 = ORIENTED_EDGE('',*,*,#552,.T.); +#591 = ORIENTED_EDGE('',*,*,#129,.T.); +#592 = PLANE('',#593); +#593 = AXIS2_PLACEMENT_3D('',#594,#595,#596); +#594 = CARTESIAN_POINT('',(-38.27389874671,3.,-2.99105603424)); +#595 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#596 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#597 = ADVANCED_FACE('',(#598),#617,.F.); +#598 = FACE_BOUND('',#599,.F.); +#599 = EDGE_LOOP('',(#600,#608,#615,#616)); +#600 = ORIENTED_EDGE('',*,*,#601,.F.); +#601 = EDGE_CURVE('',#602,#113,#604,.T.); +#602 = VERTEX_POINT('',#603); +#603 = CARTESIAN_POINT('',(-32.57517518159,3.2,0.2)); +#604 = LINE('',#605,#606); +#605 = CARTESIAN_POINT('',(-32.57517518159,3.,0.2)); +#606 = VECTOR('',#607,1.); +#607 = DIRECTION('',(0.,-1.,0.)); +#608 = ORIENTED_EDGE('',*,*,#609,.T.); +#609 = EDGE_CURVE('',#602,#578,#610,.T.); +#610 = CIRCLE('',#611,6.054044962965); +#611 = AXIS2_PLACEMENT_3D('',#612,#613,#614); +#612 = CARTESIAN_POINT('',(-32.57517518159,3.2,-5.854044962965)); +#613 = DIRECTION('',(0.,-1.,0.)); +#614 = DIRECTION('',(-1.,0.,0.)); +#615 = ORIENTED_EDGE('',*,*,#577,.T.); +#616 = ORIENTED_EDGE('',*,*,#120,.F.); +#617 = CYLINDRICAL_SURFACE('',#618,6.054044962965); +#618 = AXIS2_PLACEMENT_3D('',#619,#620,#621); +#619 = CARTESIAN_POINT('',(-32.57517518159,3.,-5.854044962965)); +#620 = DIRECTION('',(0.,-1.,0.)); +#621 = DIRECTION('',(-1.,0.,0.)); +#622 = ADVANCED_FACE('',(#623),#641,.F.); +#623 = FACE_BOUND('',#624,.F.); +#624 = EDGE_LOOP('',(#625,#633,#639,#640)); +#625 = ORIENTED_EDGE('',*,*,#626,.F.); +#626 = EDGE_CURVE('',#627,#105,#629,.T.); +#627 = VERTEX_POINT('',#628); +#628 = CARTESIAN_POINT('',(35.082842712475,3.2,0.2)); +#629 = LINE('',#630,#631); +#630 = CARTESIAN_POINT('',(35.082842712475,3.,0.2)); +#631 = VECTOR('',#632,1.); +#632 = DIRECTION('',(0.,-1.,0.)); +#633 = ORIENTED_EDGE('',*,*,#634,.F.); +#634 = EDGE_CURVE('',#602,#627,#635,.T.); +#635 = LINE('',#636,#637); +#636 = CARTESIAN_POINT('',(-7.942265537672,3.2,0.2)); +#637 = VECTOR('',#638,1.); +#638 = DIRECTION('',(1.,0.,0.)); +#639 = ORIENTED_EDGE('',*,*,#601,.T.); +#640 = ORIENTED_EDGE('',*,*,#112,.T.); +#641 = PLANE('',#642); +#642 = AXIS2_PLACEMENT_3D('',#643,#644,#645); +#643 = CARTESIAN_POINT('',(-16.28758759079,3.,0.2)); +#644 = DIRECTION('',(0.,0.,1.)); +#645 = DIRECTION('',(0.,-1.,0.)); +#646 = ADVANCED_FACE('',(#647),#665,.T.); +#647 = FACE_BOUND('',#648,.T.); +#648 = EDGE_LOOP('',(#649,#657,#658,#659)); +#649 = ORIENTED_EDGE('',*,*,#650,.T.); +#650 = EDGE_CURVE('',#651,#97,#653,.T.); +#651 = VERTEX_POINT('',#652); +#652 = CARTESIAN_POINT('',(42.298608189024,3.2,-7.015765476549)); +#653 = LINE('',#654,#655); +#654 = CARTESIAN_POINT('',(42.298608189024,3.,-7.015765476549)); +#655 = VECTOR('',#656,1.); +#656 = DIRECTION('',(0.,-1.,0.)); +#657 = ORIENTED_EDGE('',*,*,#104,.T.); +#658 = ORIENTED_EDGE('',*,*,#626,.F.); +#659 = ORIENTED_EDGE('',*,*,#660,.F.); +#660 = EDGE_CURVE('',#651,#627,#661,.T.); +#661 = LINE('',#662,#663); +#662 = CARTESIAN_POINT('',(36.596246576251,3.2,-1.313403863776)); +#663 = VECTOR('',#664,1.); +#664 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#665 = PLANE('',#666); +#666 = AXIS2_PLACEMENT_3D('',#667,#668,#669); +#667 = CARTESIAN_POINT('',(38.67695526217,3.,-3.394112549695)); +#668 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#669 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#670 = ADVANCED_FACE('',(#671),#682,.T.); +#671 = FACE_BOUND('',#672,.T.); +#672 = EDGE_LOOP('',(#673,#679,#680,#681)); +#673 = ORIENTED_EDGE('',*,*,#674,.F.); +#674 = EDGE_CURVE('',#313,#651,#675,.T.); +#675 = LINE('',#676,#677); +#676 = CARTESIAN_POINT('',(32.699020781567,3.2,-37.13346923684)); +#677 = VECTOR('',#678,1.); +#678 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#679 = ORIENTED_EDGE('',*,*,#312,.T.); +#680 = ORIENTED_EDGE('',*,*,#96,.T.); +#681 = ORIENTED_EDGE('',*,*,#650,.F.); +#682 = PLANE('',#683); +#683 = AXIS2_PLACEMENT_3D('',#684,#685,#686); +#684 = CARTESIAN_POINT('',(34.581352051556,3.,-31.22785130119)); +#685 = DIRECTION('',(-0.952773183837,0.,0.30368282823)); +#686 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#687 = ADVANCED_FACE('',(#688,#738,#749,#767,#801),#812,.F.); +#688 = FACE_BOUND('',#689,.F.); +#689 = EDGE_LOOP('',(#690,#700,#708,#716,#724,#732)); +#690 = ORIENTED_EDGE('',*,*,#691,.F.); +#691 = EDGE_CURVE('',#692,#694,#696,.T.); +#692 = VERTEX_POINT('',#693); +#693 = CARTESIAN_POINT('',(16.626582997737,3.2,-8.940188245231)); +#694 = VERTEX_POINT('',#695); +#695 = CARTESIAN_POINT('',(4.383041634064E-04,3.2,-8.903751615529)); +#696 = LINE('',#697,#698); +#697 = CARTESIAN_POINT('',(4.347099726942,3.2,-8.913277437397)); +#698 = VECTOR('',#699,1.); +#699 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#700 = ORIENTED_EDGE('',*,*,#701,.F.); +#701 = EDGE_CURVE('',#702,#692,#704,.T.); +#702 = VERTEX_POINT('',#703); +#703 = CARTESIAN_POINT('',(19.029295926024,3.2,-17.63009960955)); +#704 = LINE('',#705,#706); +#705 = CARTESIAN_POINT('',(19.849519003668,3.2,-20.59660707692)); +#706 = VECTOR('',#707,1.); +#707 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#708 = ORIENTED_EDGE('',*,*,#709,.F.); +#709 = EDGE_CURVE('',#710,#702,#712,.T.); +#710 = VERTEX_POINT('',#711); +#711 = CARTESIAN_POINT('',(22.059435554995,3.2,-3.734519760785)); +#712 = LINE('',#713,#714); +#713 = CARTESIAN_POINT('',(17.698510515043,3.2,-23.73280021221)); +#714 = VECTOR('',#715,1.); +#715 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#716 = ORIENTED_EDGE('',*,*,#717,.F.); +#717 = EDGE_CURVE('',#718,#710,#720,.T.); +#718 = VERTEX_POINT('',#719); +#719 = CARTESIAN_POINT('',(-21.72552223146,3.2,-3.734519760785)); +#720 = LINE('',#721,#722); +#721 = CARTESIAN_POINT('',(0.297084840953,3.2,-3.734519760785)); +#722 = VECTOR('',#723,1.); +#723 = DIRECTION('',(1.,0.,0.)); +#724 = ORIENTED_EDGE('',*,*,#725,.F.); +#725 = EDGE_CURVE('',#726,#718,#728,.T.); +#726 = VERTEX_POINT('',#727); +#727 = CARTESIAN_POINT('',(-21.72552223146,3.2,-8.903751135252)); +#728 = LINE('',#729,#730); +#729 = CARTESIAN_POINT('',(-21.72552223146,3.2,-19.83215600037)); +#730 = VECTOR('',#731,1.); +#731 = DIRECTION('',(0.,0.,1.)); +#732 = ORIENTED_EDGE('',*,*,#733,.F.); +#733 = EDGE_CURVE('',#694,#726,#734,.T.); +#734 = LINE('',#735,#736); +#735 = CARTESIAN_POINT('',(-5.279852300138,3.2,-8.903751135252)); +#736 = VECTOR('',#737,1.); +#737 = DIRECTION('',(-1.,0.,0.)); +#738 = FACE_BOUND('',#739,.F.); +#739 = EDGE_LOOP('',(#740)); +#740 = ORIENTED_EDGE('',*,*,#741,.F.); +#741 = EDGE_CURVE('',#742,#742,#744,.T.); +#742 = VERTEX_POINT('',#743); +#743 = CARTESIAN_POINT('',(21.163799345768,3.2,-48.00951684793)); +#744 = CIRCLE('',#745,4.735522705283); +#745 = AXIS2_PLACEMENT_3D('',#746,#747,#748); +#746 = CARTESIAN_POINT('',(16.428276640485,3.2,-48.00951684793)); +#747 = DIRECTION('',(-0.,1.,0.)); +#748 = DIRECTION('',(1.,0.,0.)); +#749 = FACE_BOUND('',#750,.F.); +#750 = EDGE_LOOP('',(#751,#752,#753,#754,#755,#756,#757,#758,#759,#760, + #761,#762,#763,#764,#765,#766)); +#751 = ORIENTED_EDGE('',*,*,#536,.T.); +#752 = ORIENTED_EDGE('',*,*,#560,.F.); +#753 = ORIENTED_EDGE('',*,*,#585,.T.); +#754 = ORIENTED_EDGE('',*,*,#609,.F.); +#755 = ORIENTED_EDGE('',*,*,#634,.T.); +#756 = ORIENTED_EDGE('',*,*,#660,.F.); +#757 = ORIENTED_EDGE('',*,*,#674,.F.); +#758 = ORIENTED_EDGE('',*,*,#320,.F.); +#759 = ORIENTED_EDGE('',*,*,#344,.F.); +#760 = ORIENTED_EDGE('',*,*,#358,.F.); +#761 = ORIENTED_EDGE('',*,*,#392,.F.); +#762 = ORIENTED_EDGE('',*,*,#414,.T.); +#763 = ORIENTED_EDGE('',*,*,#438,.F.); +#764 = ORIENTED_EDGE('',*,*,#463,.T.); +#765 = ORIENTED_EDGE('',*,*,#487,.F.); +#766 = ORIENTED_EDGE('',*,*,#512,.T.); +#767 = FACE_BOUND('',#768,.F.); +#768 = EDGE_LOOP('',(#769,#779,#787,#795)); +#769 = ORIENTED_EDGE('',*,*,#770,.F.); +#770 = EDGE_CURVE('',#771,#773,#775,.T.); +#771 = VERTEX_POINT('',#772); +#772 = CARTESIAN_POINT('',(5.809375885494,3.2,-13.06417917474)); +#773 = VERTEX_POINT('',#774); +#774 = CARTESIAN_POINT('',(2.688069798796,3.2,-49.64588621989)); +#775 = LINE('',#776,#777); +#776 = CARTESIAN_POINT('',(4.914157977861,3.2,-23.55613296875)); +#777 = VECTOR('',#778,1.); +#778 = DIRECTION('',(-8.501532861635E-02,0.,-0.996379643459)); +#779 = ORIENTED_EDGE('',*,*,#780,.F.); +#780 = EDGE_CURVE('',#781,#771,#783,.T.); +#781 = VERTEX_POINT('',#782); +#782 = CARTESIAN_POINT('',(-5.809375885494,3.2,-13.06417917474)); +#783 = LINE('',#784,#785); +#784 = CARTESIAN_POINT('',(1.615747408047,3.2,-13.06417917474)); +#785 = VECTOR('',#786,1.); +#786 = DIRECTION('',(1.,0.,-3.066574716487E-16)); +#787 = ORIENTED_EDGE('',*,*,#788,.F.); +#788 = EDGE_CURVE('',#789,#781,#791,.T.); +#789 = VERTEX_POINT('',#790); +#790 = CARTESIAN_POINT('',(-2.688069798796,3.2,-49.64588621989)); +#791 = LINE('',#792,#793); +#792 = CARTESIAN_POINT('',(-4.890802006217,3.2,-23.82986495424)); +#793 = VECTOR('',#794,1.); +#794 = DIRECTION('',(-8.501532861635E-02,0.,0.996379643459)); +#795 = ORIENTED_EDGE('',*,*,#796,.F.); +#796 = EDGE_CURVE('',#773,#789,#797,.T.); +#797 = LINE('',#798,#799); +#798 = CARTESIAN_POINT('',(1.615747408047,3.2,-49.64588621989)); +#799 = VECTOR('',#800,1.); +#800 = DIRECTION('',(-1.,0.,0.)); +#801 = FACE_BOUND('',#802,.F.); +#802 = EDGE_LOOP('',(#803)); +#803 = ORIENTED_EDGE('',*,*,#804,.F.); +#804 = EDGE_CURVE('',#805,#805,#807,.T.); +#805 = VERTEX_POINT('',#806); +#806 = CARTESIAN_POINT('',(-11.6927539352,3.2,-48.00951684793)); +#807 = CIRCLE('',#808,4.735522705283); +#808 = AXIS2_PLACEMENT_3D('',#809,#810,#811); +#809 = CARTESIAN_POINT('',(-16.42827664048,3.2,-48.00951684793)); +#810 = DIRECTION('',(-0.,1.,0.)); +#811 = DIRECTION('',(1.,0.,0.)); +#812 = PLANE('',#813); +#813 = AXIS2_PLACEMENT_3D('',#814,#815,#816); +#814 = CARTESIAN_POINT('',(0.403056515455,3.2,-33.34517655273)); +#815 = DIRECTION('',(0.,1.,0.)); +#816 = DIRECTION('',(1.,0.,0.)); +#817 = ADVANCED_FACE('',(#818),#843,.T.); +#818 = FACE_BOUND('',#819,.T.); +#819 = EDGE_LOOP('',(#820,#828,#836,#842)); +#820 = ORIENTED_EDGE('',*,*,#821,.F.); +#821 = EDGE_CURVE('',#822,#692,#824,.T.); +#822 = VERTEX_POINT('',#823); +#823 = CARTESIAN_POINT('',(16.626582997737,0.,-8.940188245231)); +#824 = LINE('',#825,#826); +#825 = CARTESIAN_POINT('',(16.626582997737,-22.,-8.940188245231)); +#826 = VECTOR('',#827,1.); +#827 = DIRECTION('',(0.,1.,0.)); +#828 = ORIENTED_EDGE('',*,*,#829,.T.); +#829 = EDGE_CURVE('',#822,#830,#832,.T.); +#830 = VERTEX_POINT('',#831); +#831 = CARTESIAN_POINT('',(-5.329070518201E-15,0.,-8.903751135252)); +#832 = LINE('',#833,#834); +#833 = CARTESIAN_POINT('',(-18.54556462154,1.7763568394E-15, + -8.863107566442)); +#834 = VECTOR('',#835,1.); +#835 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#836 = ORIENTED_EDGE('',*,*,#837,.T.); +#837 = EDGE_CURVE('',#830,#694,#838,.T.); +#838 = LINE('',#839,#840); +#839 = CARTESIAN_POINT('',(-5.329070518201E-15,-22.,-8.903751135252)); +#840 = VECTOR('',#841,1.); +#841 = DIRECTION('',(0.,1.,0.)); +#842 = ORIENTED_EDGE('',*,*,#691,.F.); +#843 = PLANE('',#844); +#844 = AXIS2_PLACEMENT_3D('',#845,#846,#847); +#845 = CARTESIAN_POINT('',(8.237581109188,-22.,-8.921803528809)); +#846 = DIRECTION('',(-2.191520817069E-03,0.,-0.999997598615)); +#847 = DIRECTION('',(-0.999997598615,0.,2.191520817069E-03)); +#848 = ADVANCED_FACE('',(#849),#867,.T.); +#849 = FACE_BOUND('',#850,.T.); +#850 = EDGE_LOOP('',(#851,#859,#865,#866)); +#851 = ORIENTED_EDGE('',*,*,#852,.F.); +#852 = EDGE_CURVE('',#853,#702,#855,.T.); +#853 = VERTEX_POINT('',#854); +#854 = CARTESIAN_POINT('',(19.029295926024,0.,-17.63009960955)); +#855 = LINE('',#856,#857); +#856 = CARTESIAN_POINT('',(19.029295926024,-22.,-17.63009960955)); +#857 = VECTOR('',#858,1.); +#858 = DIRECTION('',(0.,1.,0.)); +#859 = ORIENTED_EDGE('',*,*,#860,.T.); +#860 = EDGE_CURVE('',#853,#822,#861,.T.); +#861 = LINE('',#862,#863); +#862 = CARTESIAN_POINT('',(23.053273013696,0.,-32.18365022821)); +#863 = VECTOR('',#864,1.); +#864 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#865 = ORIENTED_EDGE('',*,*,#821,.T.); +#866 = ORIENTED_EDGE('',*,*,#701,.F.); +#867 = PLANE('',#868); +#868 = AXIS2_PLACEMENT_3D('',#869,#870,#871); +#869 = CARTESIAN_POINT('',(17.956031892536,-22.,-13.7484168618)); +#870 = DIRECTION('',(-0.963836182336,0.,-0.26649542889)); +#871 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#872 = ADVANCED_FACE('',(#873),#891,.T.); +#873 = FACE_BOUND('',#874,.T.); +#874 = EDGE_LOOP('',(#875,#883,#884,#885)); +#875 = ORIENTED_EDGE('',*,*,#876,.T.); +#876 = EDGE_CURVE('',#877,#853,#879,.T.); +#877 = VERTEX_POINT('',#878); +#878 = CARTESIAN_POINT('',(22.059435554995,0.,-3.734519760785)); +#879 = LINE('',#880,#881); +#880 = CARTESIAN_POINT('',(12.741012548745,1.7763568394E-15, + -46.46683800444)); +#881 = VECTOR('',#882,1.); +#882 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#883 = ORIENTED_EDGE('',*,*,#852,.T.); +#884 = ORIENTED_EDGE('',*,*,#709,.F.); +#885 = ORIENTED_EDGE('',*,*,#886,.F.); +#886 = EDGE_CURVE('',#877,#710,#887,.T.); +#887 = LINE('',#888,#889); +#888 = CARTESIAN_POINT('',(22.059435554995,-22.,-3.734519760785)); +#889 = VECTOR('',#890,1.); +#890 = DIRECTION('',(0.,1.,0.)); +#891 = PLANE('',#892); +#892 = AXIS2_PLACEMENT_3D('',#893,#894,#895); +#893 = CARTESIAN_POINT('',(20.484588228021,-22.,-10.95643672209)); +#894 = DIRECTION('',(0.977039526026,0.,-0.213058124893)); +#895 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#896 = ADVANCED_FACE('',(#897),#915,.T.); +#897 = FACE_BOUND('',#898,.T.); +#898 = EDGE_LOOP('',(#899,#907,#908,#909)); +#899 = ORIENTED_EDGE('',*,*,#900,.T.); +#900 = EDGE_CURVE('',#901,#877,#903,.T.); +#901 = VERTEX_POINT('',#902); +#902 = CARTESIAN_POINT('',(-21.72552223146,0.,-3.734519760785)); +#903 = LINE('',#904,#905); +#904 = CARTESIAN_POINT('',(-22.63692080725,0.,-3.734519760785)); +#905 = VECTOR('',#906,1.); +#906 = DIRECTION('',(1.,0.,0.)); +#907 = ORIENTED_EDGE('',*,*,#886,.T.); +#908 = ORIENTED_EDGE('',*,*,#717,.F.); +#909 = ORIENTED_EDGE('',*,*,#910,.F.); +#910 = EDGE_CURVE('',#901,#718,#911,.T.); +#911 = LINE('',#912,#913); +#912 = CARTESIAN_POINT('',(-21.72552223146,-22.,-3.734519760785)); +#913 = VECTOR('',#914,1.); +#914 = DIRECTION('',(0.,1.,0.)); +#915 = PLANE('',#916); +#916 = AXIS2_PLACEMENT_3D('',#917,#918,#919); +#917 = CARTESIAN_POINT('',(0.19111316645,-22.,-3.734519760785)); +#918 = DIRECTION('',(0.,0.,1.)); +#919 = DIRECTION('',(0.,-1.,0.)); +#920 = ADVANCED_FACE('',(#921),#939,.T.); +#921 = FACE_BOUND('',#922,.T.); +#922 = EDGE_LOOP('',(#923,#931,#932,#933)); +#923 = ORIENTED_EDGE('',*,*,#924,.T.); +#924 = EDGE_CURVE('',#925,#901,#927,.T.); +#925 = VERTEX_POINT('',#926); +#926 = CARTESIAN_POINT('',(-21.72552223146,0.,-8.903751135252)); +#927 = LINE('',#928,#929); +#928 = CARTESIAN_POINT('',(-21.72552223146,0.,-38.64614663299)); +#929 = VECTOR('',#930,1.); +#930 = DIRECTION('',(0.,0.,1.)); +#931 = ORIENTED_EDGE('',*,*,#910,.T.); +#932 = ORIENTED_EDGE('',*,*,#725,.F.); +#933 = ORIENTED_EDGE('',*,*,#934,.F.); +#934 = EDGE_CURVE('',#925,#726,#935,.T.); +#935 = LINE('',#936,#937); +#936 = CARTESIAN_POINT('',(-21.72552223146,-22.,-8.903751135252)); +#937 = VECTOR('',#938,1.); +#938 = DIRECTION('',(0.,1.,0.)); +#939 = PLANE('',#940); +#940 = AXIS2_PLACEMENT_3D('',#941,#942,#943); +#941 = CARTESIAN_POINT('',(-21.72552223146,-22.,-6.319135448019)); +#942 = DIRECTION('',(-1.,0.,0.)); +#943 = DIRECTION('',(0.,1.,0.)); +#944 = ADVANCED_FACE('',(#945),#956,.T.); +#945 = FACE_BOUND('',#946,.T.); +#946 = EDGE_LOOP('',(#947,#953,#954,#955)); +#947 = ORIENTED_EDGE('',*,*,#948,.T.); +#948 = EDGE_CURVE('',#830,#925,#949,.T.); +#949 = LINE('',#950,#951); +#950 = CARTESIAN_POINT('',(-28.21385794834,0.,-8.903751135252)); +#951 = VECTOR('',#952,1.); +#952 = DIRECTION('',(-1.,0.,0.)); +#953 = ORIENTED_EDGE('',*,*,#934,.T.); +#954 = ORIENTED_EDGE('',*,*,#733,.F.); +#955 = ORIENTED_EDGE('',*,*,#837,.F.); +#956 = PLANE('',#957); +#957 = AXIS2_PLACEMENT_3D('',#958,#959,#960); +#958 = CARTESIAN_POINT('',(-10.96276111573,-22.,-8.903751135252)); +#959 = DIRECTION('',(0.,0.,-1.)); +#960 = DIRECTION('',(0.,1.,0.)); +#961 = ADVANCED_FACE('',(#962),#981,.T.); +#962 = FACE_BOUND('',#963,.T.); +#963 = EDGE_LOOP('',(#964,#973,#979,#980)); +#964 = ORIENTED_EDGE('',*,*,#965,.T.); +#965 = EDGE_CURVE('',#966,#966,#968,.T.); +#966 = VERTEX_POINT('',#967); +#967 = CARTESIAN_POINT('',(21.163799345768,0.,-48.00951684793)); +#968 = CIRCLE('',#969,4.735522705283); +#969 = AXIS2_PLACEMENT_3D('',#970,#971,#972); +#970 = CARTESIAN_POINT('',(16.428276640485,0.,-48.00951684793)); +#971 = DIRECTION('',(-0.,1.,0.)); +#972 = DIRECTION('',(1.,0.,0.)); +#973 = ORIENTED_EDGE('',*,*,#974,.T.); +#974 = EDGE_CURVE('',#966,#742,#975,.T.); +#975 = LINE('',#976,#977); +#976 = CARTESIAN_POINT('',(21.163799345768,-22.,-48.00951684793)); +#977 = VECTOR('',#978,1.); +#978 = DIRECTION('',(0.,1.,0.)); +#979 = ORIENTED_EDGE('',*,*,#741,.F.); +#980 = ORIENTED_EDGE('',*,*,#974,.F.); +#981 = CYLINDRICAL_SURFACE('',#982,4.735522705283); +#982 = AXIS2_PLACEMENT_3D('',#983,#984,#985); +#983 = CARTESIAN_POINT('',(16.428276640485,-22.,-48.00951684793)); +#984 = DIRECTION('',(0.,1.,0.)); +#985 = DIRECTION('',(1.,0.,0.)); +#986 = ADVANCED_FACE('',(#987),#1012,.F.); +#987 = FACE_BOUND('',#988,.F.); +#988 = EDGE_LOOP('',(#989,#999,#1005,#1006)); +#989 = ORIENTED_EDGE('',*,*,#990,.T.); +#990 = EDGE_CURVE('',#991,#993,#995,.T.); +#991 = VERTEX_POINT('',#992); +#992 = CARTESIAN_POINT('',(1.480297366167E-15,11.242400581089, + -46.71869179633)); +#993 = VERTEX_POINT('',#994); +#994 = CARTESIAN_POINT('',(3.256654205567E-15,17.8572529153, + -18.39898295202)); +#995 = LINE('',#996,#997); +#996 = CARTESIAN_POINT('',(2.6645352591E-15,18.133069549222, + -17.21814831317)); +#997 = VECTOR('',#998,1.); +#998 = DIRECTION('',(5.275122655166E-17,0.227455280238,0.97378852709)); +#999 = ORIENTED_EDGE('',*,*,#1000,.F.); +#1000 = EDGE_CURVE('',#771,#993,#1001,.T.); +#1001 = LINE('',#1002,#1003); +#1002 = CARTESIAN_POINT('',(5.649679875255,3.602918464526, + -13.21082950266)); +#1003 = VECTOR('',#1004,1.); +#1004 = DIRECTION('',(-0.349023821871,0.880598971639,-0.320511814002)); +#1005 = ORIENTED_EDGE('',*,*,#770,.T.); +#1006 = ORIENTED_EDGE('',*,*,#1007,.T.); +#1007 = EDGE_CURVE('',#773,#991,#1008,.T.); +#1008 = LINE('',#1009,#1010); +#1009 = CARTESIAN_POINT('',(1.103762571829,7.940067898719, + -47.92064259636)); +#1010 = VECTOR('',#1011,1.); +#1011 = DIRECTION('',(-0.299648208284,0.896513522642,0.326304236859)); +#1012 = PLANE('',#1013); +#1013 = AXIS2_PLACEMENT_3D('',#1014,#1015,#1016); +#1014 = CARTESIAN_POINT('',(5.823691883056,3.068404028665, + -13.45978839622)); +#1015 = DIRECTION('',(0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#1016 = DIRECTION('',(-0.340781908463,0.939692620786,2.907695487824E-02) + ); +#1017 = ADVANCED_FACE('',(#1018),#1028,.F.); +#1018 = FACE_BOUND('',#1019,.F.); +#1019 = EDGE_LOOP('',(#1020,#1021,#1027)); +#1020 = ORIENTED_EDGE('',*,*,#1000,.T.); +#1021 = ORIENTED_EDGE('',*,*,#1022,.T.); +#1022 = EDGE_CURVE('',#993,#781,#1023,.T.); +#1023 = LINE('',#1024,#1025); +#1024 = CARTESIAN_POINT('',(-5.275833888477,4.546144602338, + -13.55413574101)); +#1025 = VECTOR('',#1026,1.); +#1026 = DIRECTION('',(-0.349023821871,-0.880598971639,0.320511814002)); +#1027 = ORIENTED_EDGE('',*,*,#780,.T.); +#1028 = PLANE('',#1029); +#1029 = AXIS2_PLACEMENT_3D('',#1030,#1031,#1032); +#1030 = CARTESIAN_POINT('',(2.828438300639,3.068404028665, + -13.01628215822)); +#1031 = DIRECTION('',(2.881637632171E-16,0.342020143326,0.939692620786) + ); +#1032 = DIRECTION('',(-1.048830324052E-16,0.939692620786,-0.342020143326 + )); +#1033 = ADVANCED_FACE('',(#1034),#1045,.F.); +#1034 = FACE_BOUND('',#1035,.F.); +#1035 = EDGE_LOOP('',(#1036,#1037,#1038,#1039)); +#1036 = ORIENTED_EDGE('',*,*,#788,.T.); +#1037 = ORIENTED_EDGE('',*,*,#1022,.F.); +#1038 = ORIENTED_EDGE('',*,*,#990,.F.); +#1039 = ORIENTED_EDGE('',*,*,#1040,.F.); +#1040 = EDGE_CURVE('',#789,#991,#1041,.T.); +#1041 = LINE('',#1042,#1043); +#1042 = CARTESIAN_POINT('',(-0.871390517001,8.635298785064, + -47.66759924779)); +#1043 = VECTOR('',#1044,1.); +#1044 = DIRECTION('',(0.299648208284,0.896513522642,0.326304236859)); +#1045 = PLANE('',#1046); +#1046 = AXIS2_PLACEMENT_3D('',#1047,#1048,#1049); +#1047 = CARTESIAN_POINT('',(-5.782806207227,3.068404028665, + -13.93896851312)); +#1048 = DIRECTION('',(-0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#1049 = DIRECTION('',(0.340781908463,0.939692620786,2.907695487824E-02) + ); +#1050 = ADVANCED_FACE('',(#1051),#1056,.F.); +#1051 = FACE_BOUND('',#1052,.F.); +#1052 = EDGE_LOOP('',(#1053,#1054,#1055)); +#1053 = ORIENTED_EDGE('',*,*,#1040,.T.); +#1054 = ORIENTED_EDGE('',*,*,#1007,.F.); +#1055 = ORIENTED_EDGE('',*,*,#796,.T.); +#1056 = PLANE('',#1057); +#1057 = AXIS2_PLACEMENT_3D('',#1058,#1059,#1060); +#1058 = CARTESIAN_POINT('',(2.828438300639,3.068404028665, + -49.69378323641)); +#1059 = DIRECTION('',(0.,0.342020143326,-0.939692620786)); +#1060 = DIRECTION('',(0.,0.939692620786,0.342020143326)); +#1061 = ADVANCED_FACE('',(#1062),#1081,.T.); +#1062 = FACE_BOUND('',#1063,.T.); +#1063 = EDGE_LOOP('',(#1064,#1073,#1079,#1080)); +#1064 = ORIENTED_EDGE('',*,*,#1065,.T.); +#1065 = EDGE_CURVE('',#1066,#1066,#1068,.T.); +#1066 = VERTEX_POINT('',#1067); +#1067 = CARTESIAN_POINT('',(-11.6927539352,0.,-48.00951684793)); +#1068 = CIRCLE('',#1069,4.735522705283); +#1069 = AXIS2_PLACEMENT_3D('',#1070,#1071,#1072); +#1070 = CARTESIAN_POINT('',(-16.42827664048,0.,-48.00951684793)); +#1071 = DIRECTION('',(-0.,1.,0.)); +#1072 = DIRECTION('',(1.,0.,0.)); +#1073 = ORIENTED_EDGE('',*,*,#1074,.T.); +#1074 = EDGE_CURVE('',#1066,#805,#1075,.T.); +#1075 = LINE('',#1076,#1077); +#1076 = CARTESIAN_POINT('',(-11.6927539352,-22.,-48.00951684793)); +#1077 = VECTOR('',#1078,1.); +#1078 = DIRECTION('',(0.,1.,0.)); +#1079 = ORIENTED_EDGE('',*,*,#804,.F.); +#1080 = ORIENTED_EDGE('',*,*,#1074,.F.); +#1081 = CYLINDRICAL_SURFACE('',#1082,4.735522705283); +#1082 = AXIS2_PLACEMENT_3D('',#1083,#1084,#1085); +#1083 = CARTESIAN_POINT('',(-16.42827664048,-22.,-48.00951684793)); +#1084 = DIRECTION('',(0.,1.,0.)); +#1085 = DIRECTION('',(1.,0.,0.)); +#1086 = ADVANCED_FACE('',(#1087),#1095,.F.); +#1087 = FACE_BOUND('',#1088,.F.); +#1088 = EDGE_LOOP('',(#1089,#1090,#1091,#1092,#1093,#1094)); +#1089 = ORIENTED_EDGE('',*,*,#860,.T.); +#1090 = ORIENTED_EDGE('',*,*,#829,.T.); +#1091 = ORIENTED_EDGE('',*,*,#948,.T.); +#1092 = ORIENTED_EDGE('',*,*,#924,.T.); +#1093 = ORIENTED_EDGE('',*,*,#900,.T.); +#1094 = ORIENTED_EDGE('',*,*,#876,.T.); +#1095 = PLANE('',#1096); +#1096 = AXIS2_PLACEMENT_3D('',#1097,#1098,#1099); +#1097 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1098 = DIRECTION('',(0.,1.,0.)); +#1099 = DIRECTION('',(0.,0.,1.)); +#1100 = ADVANCED_FACE('',(#1101),#1104,.F.); +#1101 = FACE_BOUND('',#1102,.F.); +#1102 = EDGE_LOOP('',(#1103)); +#1103 = ORIENTED_EDGE('',*,*,#965,.T.); +#1104 = PLANE('',#1105); +#1105 = AXIS2_PLACEMENT_3D('',#1106,#1107,#1108); +#1106 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1107 = DIRECTION('',(0.,1.,0.)); +#1108 = DIRECTION('',(0.,0.,1.)); +#1109 = ADVANCED_FACE('',(#1110),#1113,.F.); +#1110 = FACE_BOUND('',#1111,.F.); +#1111 = EDGE_LOOP('',(#1112)); +#1112 = ORIENTED_EDGE('',*,*,#1065,.T.); +#1113 = PLANE('',#1114); +#1114 = AXIS2_PLACEMENT_3D('',#1115,#1116,#1117); +#1115 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1116 = DIRECTION('',(0.,1.,0.)); +#1117 = DIRECTION('',(0.,0.,1.)); +#1118 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1122)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1119,#1120,#1121)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1119 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1120 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1121 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1122 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-05),#1119, + 'distance_accuracy_value','confusion accuracy'); +#1123 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +ENDSEC; +END-ISO-10303-21; diff --git a/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.step b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.step new file mode 100644 index 0000000000..e6575701e4 --- /dev/null +++ b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.step @@ -0,0 +1,1048 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-08-05T11:06:23',('FreeCAD'),( + 'FreeCAD'),'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('Open CASCADE STEP translator 7.8 1', + 'Open CASCADE STEP translator 7.8 1','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#976); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = MANIFOLD_SOLID_BREP('',#16); +#16 = CLOSED_SHELL('',(#17,#157,#188,#212,#236,#261,#285,#310,#334,#358, + #383,#407,#432,#456,#480,#504,#528,#545,#675,#706,#730,#754,#778, + #802,#819,#850,#866,#882,#894,#919,#944,#958,#967)); +#17 = ADVANCED_FACE('',(#18),#152,.T.); +#18 = FACE_BOUND('',#19,.T.); +#19 = EDGE_LOOP('',(#20,#30,#38,#46,#54,#62,#70,#79,#87,#96,#104,#112, + #121,#129,#138,#146)); +#20 = ORIENTED_EDGE('',*,*,#21,.F.); +#21 = EDGE_CURVE('',#22,#24,#26,.T.); +#22 = VERTEX_POINT('',#23); +#23 = CARTESIAN_POINT('',(26.824640127118,20.8572529153,-55.23443461327) + ); +#24 = VERTEX_POINT('',#25); +#25 = CARTESIAN_POINT('',(42.184838000445,20.8572529153,-7.043416644207) + ); +#26 = LINE('',#27,#28); +#27 = CARTESIAN_POINT('',(28.89442018934,20.8572529153,-48.74071565254) + ); +#28 = VECTOR('',#29,1.); +#29 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#30 = ORIENTED_EDGE('',*,*,#31,.F.); +#31 = EDGE_CURVE('',#32,#22,#34,.T.); +#32 = VERTEX_POINT('',#33); +#33 = CARTESIAN_POINT('',(32.56245481215,20.8572529153,-60.7871552419)); +#34 = LINE('',#35,#36); +#35 = CARTESIAN_POINT('',(12.092418778801,20.8572529153,-40.97745458223) + ); +#36 = VECTOR('',#37,1.); +#37 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#38 = ORIENTED_EDGE('',*,*,#39,.F.); +#39 = EDGE_CURVE('',#40,#32,#42,.T.); +#40 = VERTEX_POINT('',#41); +#41 = CARTESIAN_POINT('',(26.712845130625,20.8572529153,-66.83175546171) + ); +#42 = LINE('',#43,#44); +#43 = CARTESIAN_POINT('',(11.149878706433,20.8572529153,-82.91349687528) + ); +#44 = VECTOR('',#45,1.); +#45 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#46 = ORIENTED_EDGE('',*,*,#47,.F.); +#47 = EDGE_CURVE('',#48,#40,#50,.T.); +#48 = VERTEX_POINT('',#49); +#49 = CARTESIAN_POINT('',(20.57248334837,20.8572529153,-60.88947335481) + ); +#50 = LINE('',#51,#52); +#51 = CARTESIAN_POINT('',(9.111716439792,20.8572529153,-49.79841511636) + ); +#52 = VECTOR('',#53,1.); +#53 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#54 = ORIENTED_EDGE('',*,*,#55,.F.); +#55 = EDGE_CURVE('',#56,#48,#58,.T.); +#56 = VERTEX_POINT('',#57); +#57 = CARTESIAN_POINT('',(-20.57248334837,20.8572529153,-60.88947335481) + ); +#58 = LINE('',#59,#60); +#59 = CARTESIAN_POINT('',(-12.44623571629,20.8572529153,-60.88947335481) + ); +#60 = VECTOR('',#61,1.); +#61 = DIRECTION('',(1.,0.,0.)); +#62 = ORIENTED_EDGE('',*,*,#63,.T.); +#63 = EDGE_CURVE('',#56,#64,#66,.T.); +#64 = VERTEX_POINT('',#65); +#65 = CARTESIAN_POINT('',(-25.60006917852,20.8572529153,-65.75487614033) + ); +#66 = LINE('',#67,#68); +#67 = CARTESIAN_POINT('',(-32.03294606502,20.8572529153,-71.98023721416) + ); +#68 = VECTOR('',#69,1.); +#69 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#70 = ORIENTED_EDGE('',*,*,#71,.F.); +#71 = EDGE_CURVE('',#72,#64,#74,.T.); +#72 = VERTEX_POINT('',#73); +#73 = CARTESIAN_POINT('',(-27.78972445201,20.8572529153,-65.71897950961) + ); +#74 = CIRCLE('',#75,1.548528137424); +#75 = AXIS2_PLACEMENT_3D('',#76,#77,#78); +#76 = CARTESIAN_POINT('',(-26.67694849991,20.8572529153,-64.64210018823) + ); +#77 = DIRECTION('',(0.,-1.,0.)); +#78 = DIRECTION('',(1.,0.,0.)); +#79 = ORIENTED_EDGE('',*,*,#80,.T.); +#80 = EDGE_CURVE('',#72,#81,#83,.T.); +#81 = VERTEX_POINT('',#82); +#82 = CARTESIAN_POINT('',(-29.01580660709,20.8572529153,-64.4520272055) + ); +#83 = LINE('',#84,#85); +#84 = CARTESIAN_POINT('',(-31.36389178357,20.8572529153,-62.02567109858) + ); +#85 = VECTOR('',#86,1.); +#86 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#87 = ORIENTED_EDGE('',*,*,#88,.F.); +#88 = EDGE_CURVE('',#89,#81,#91,.T.); +#89 = VERTEX_POINT('',#90); +#90 = CARTESIAN_POINT('',(-28.89758284854,20.8572529153,-57.24050703685) + ); +#91 = CIRCLE('',#92,5.1); +#92 = AXIS2_PLACEMENT_3D('',#93,#94,#95); +#93 = CARTESIAN_POINT('',(-25.35093464349,20.8572529153,-60.90537900045) + ); +#94 = DIRECTION('',(0.,-1.,0.)); +#95 = DIRECTION('',(1.,0.,0.)); +#96 = ORIENTED_EDGE('',*,*,#97,.T.); +#97 = EDGE_CURVE('',#89,#98,#100,.T.); +#98 = VERTEX_POINT('',#99); +#99 = CARTESIAN_POINT('',(-26.82464012711,20.8572529153,-55.23443461327) + ); +#100 = LINE('',#101,#102); +#101 = CARTESIAN_POINT('',(-35.57003638008,20.8572529153,-63.69771634073 + )); +#102 = VECTOR('',#103,1.); +#103 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#104 = ORIENTED_EDGE('',*,*,#105,.T.); +#105 = EDGE_CURVE('',#98,#106,#108,.T.); +#106 = VERTEX_POINT('',#107); +#107 = CARTESIAN_POINT('',(-41.08376419406,20.8572529153,-10.49792081311 + )); +#108 = LINE('',#109,#110); +#109 = CARTESIAN_POINT('',(-32.53680963915,20.8572529153,-37.31309884227 + )); +#110 = VECTOR('',#111,1.); +#111 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#112 = ORIENTED_EDGE('',*,*,#113,.F.); +#113 = EDGE_CURVE('',#114,#106,#116,.T.); +#114 = VERTEX_POINT('',#115); +#115 = CARTESIAN_POINT('',(-39.62105538679,20.8572529153,-4.479634030555 + )); +#116 = CIRCLE('',#117,5.954044962965); +#117 = AXIS2_PLACEMENT_3D('',#118,#119,#120); +#118 = CARTESIAN_POINT('',(-35.41090981799,20.8572529153,-8.689779599357 + )); +#119 = DIRECTION('',(0.,-1.,0.)); +#120 = DIRECTION('',(1.,0.,0.)); +#121 = ORIENTED_EDGE('',*,*,#122,.T.); +#122 = EDGE_CURVE('',#114,#123,#125,.T.); +#123 = VERTEX_POINT('',#124); +#124 = CARTESIAN_POINT('',(-36.7853207504,20.8572529153,-1.643899394163) + ); +#125 = LINE('',#126,#127); +#126 = CARTESIAN_POINT('',(-56.28754386398,20.8572529153,-21.14612250775 + )); +#127 = VECTOR('',#128,1.); +#128 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#129 = ORIENTED_EDGE('',*,*,#130,.F.); +#130 = EDGE_CURVE('',#131,#123,#133,.T.); +#131 = VERTEX_POINT('',#132); +#132 = CARTESIAN_POINT('',(-32.57517518159,20.8572529153, + 9.999999999998E-02)); +#133 = CIRCLE('',#134,5.954044962965); +#134 = AXIS2_PLACEMENT_3D('',#135,#136,#137); +#135 = CARTESIAN_POINT('',(-32.57517518159,20.8572529153,-5.854044962965 + )); +#136 = DIRECTION('',(0.,-1.,0.)); +#137 = DIRECTION('',(1.,0.,0.)); +#138 = ORIENTED_EDGE('',*,*,#139,.T.); +#139 = EDGE_CURVE('',#131,#140,#142,.T.); +#140 = VERTEX_POINT('',#141); +#141 = CARTESIAN_POINT('',(35.041421356237,20.8572529153,0.1)); +#142 = LINE('',#143,#144); +#143 = CARTESIAN_POINT('',(-5.211766712356,20.8572529153,0.1)); +#144 = VECTOR('',#145,1.); +#145 = DIRECTION('',(1.,0.,0.)); +#146 = ORIENTED_EDGE('',*,*,#147,.F.); +#147 = EDGE_CURVE('',#24,#140,#148,.T.); +#148 = LINE('',#149,#150); +#149 = CARTESIAN_POINT('',(32.68311677643,20.8572529153,2.458304579807) + ); +#150 = VECTOR('',#151,1.); +#151 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#152 = PLANE('',#153); +#153 = AXIS2_PLACEMENT_3D('',#154,#155,#156); +#154 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153,-70.97315781796 + )); +#155 = DIRECTION('',(0.,1.,0.)); +#156 = DIRECTION('',(0.,0.,1.)); +#157 = ADVANCED_FACE('',(#158),#183,.F.); +#158 = FACE_BOUND('',#159,.F.); +#159 = EDGE_LOOP('',(#160,#170,#176,#177)); +#160 = ORIENTED_EDGE('',*,*,#161,.T.); +#161 = EDGE_CURVE('',#162,#164,#166,.T.); +#162 = VERTEX_POINT('',#163); +#163 = CARTESIAN_POINT('',(26.824640127118,3.2,-55.23443461327)); +#164 = VERTEX_POINT('',#165); +#165 = CARTESIAN_POINT('',(42.184838000445,3.2,-7.043416644207)); +#166 = LINE('',#167,#168); +#167 = CARTESIAN_POINT('',(36.45312509682,3.2,-25.02606776693)); +#168 = VECTOR('',#169,1.); +#169 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#170 = ORIENTED_EDGE('',*,*,#171,.T.); +#171 = EDGE_CURVE('',#164,#24,#172,.T.); +#172 = LINE('',#173,#174); +#173 = CARTESIAN_POINT('',(42.184838000445,-5.,-7.043416644207)); +#174 = VECTOR('',#175,1.); +#175 = DIRECTION('',(0.,1.,0.)); +#176 = ORIENTED_EDGE('',*,*,#21,.F.); +#177 = ORIENTED_EDGE('',*,*,#178,.F.); +#178 = EDGE_CURVE('',#162,#22,#179,.T.); +#179 = LINE('',#180,#181); +#180 = CARTESIAN_POINT('',(26.824640127118,-5.,-55.23443461327)); +#181 = VECTOR('',#182,1.); +#182 = DIRECTION('',(0.,1.,0.)); +#183 = PLANE('',#184); +#184 = AXIS2_PLACEMENT_3D('',#185,#186,#187); +#185 = CARTESIAN_POINT('',(42.184838000445,-5.,-7.043416644207)); +#186 = DIRECTION('',(-0.952773183837,0.,0.30368282823)); +#187 = DIRECTION('',(-0.30368282823,0.,-0.952773183837)); +#188 = ADVANCED_FACE('',(#189),#207,.F.); +#189 = FACE_BOUND('',#190,.F.); +#190 = EDGE_LOOP('',(#191,#199,#205,#206)); +#191 = ORIENTED_EDGE('',*,*,#192,.T.); +#192 = EDGE_CURVE('',#164,#193,#195,.T.); +#193 = VERTEX_POINT('',#194); +#194 = CARTESIAN_POINT('',(35.041421356237,3.2,0.1)); +#195 = LINE('',#196,#197); +#196 = CARTESIAN_POINT('',(34.743124284224,3.2,0.398297072013)); +#197 = VECTOR('',#198,1.); +#198 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#199 = ORIENTED_EDGE('',*,*,#200,.T.); +#200 = EDGE_CURVE('',#193,#140,#201,.T.); +#201 = LINE('',#202,#203); +#202 = CARTESIAN_POINT('',(35.041421356237,-5.,0.1)); +#203 = VECTOR('',#204,1.); +#204 = DIRECTION('',(0.,1.,0.)); +#205 = ORIENTED_EDGE('',*,*,#147,.F.); +#206 = ORIENTED_EDGE('',*,*,#171,.F.); +#207 = PLANE('',#208); +#208 = AXIS2_PLACEMENT_3D('',#209,#210,#211); +#209 = CARTESIAN_POINT('',(35.041421356237,-5.,9.999999999998E-02)); +#210 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#211 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#212 = ADVANCED_FACE('',(#213),#231,.T.); +#213 = FACE_BOUND('',#214,.T.); +#214 = EDGE_LOOP('',(#215,#223,#224,#225)); +#215 = ORIENTED_EDGE('',*,*,#216,.T.); +#216 = EDGE_CURVE('',#217,#193,#219,.T.); +#217 = VERTEX_POINT('',#218); +#218 = CARTESIAN_POINT('',(-32.57517518159,3.2,9.999999999998E-02)); +#219 = LINE('',#220,#221); +#220 = CARTESIAN_POINT('',(17.722238935846,3.2,0.1)); +#221 = VECTOR('',#222,1.); +#222 = DIRECTION('',(1.,0.,0.)); +#223 = ORIENTED_EDGE('',*,*,#200,.T.); +#224 = ORIENTED_EDGE('',*,*,#139,.F.); +#225 = ORIENTED_EDGE('',*,*,#226,.F.); +#226 = EDGE_CURVE('',#217,#131,#227,.T.); +#227 = LINE('',#228,#229); +#228 = CARTESIAN_POINT('',(-32.57517518159,-5.,9.999999999998E-02)); +#229 = VECTOR('',#230,1.); +#230 = DIRECTION('',(0.,1.,0.)); +#231 = PLANE('',#232); +#232 = AXIS2_PLACEMENT_3D('',#233,#234,#235); +#233 = CARTESIAN_POINT('',(35.041421356237,-5.,0.1)); +#234 = DIRECTION('',(0.,0.,1.)); +#235 = DIRECTION('',(-1.,0.,0.)); +#236 = ADVANCED_FACE('',(#237),#256,.T.); +#237 = FACE_BOUND('',#238,.F.); +#238 = EDGE_LOOP('',(#239,#248,#254,#255)); +#239 = ORIENTED_EDGE('',*,*,#240,.T.); +#240 = EDGE_CURVE('',#217,#241,#243,.T.); +#241 = VERTEX_POINT('',#242); +#242 = CARTESIAN_POINT('',(-36.7853207504,3.2,-1.643899394163)); +#243 = CIRCLE('',#244,5.954044962965); +#244 = AXIS2_PLACEMENT_3D('',#245,#246,#247); +#245 = CARTESIAN_POINT('',(-32.57517518159,3.2,-5.854044962965)); +#246 = DIRECTION('',(0.,-1.,0.)); +#247 = DIRECTION('',(1.,0.,0.)); +#248 = ORIENTED_EDGE('',*,*,#249,.T.); +#249 = EDGE_CURVE('',#241,#123,#250,.T.); +#250 = LINE('',#251,#252); +#251 = CARTESIAN_POINT('',(-36.7853207504,-5.,-1.643899394163)); +#252 = VECTOR('',#253,1.); +#253 = DIRECTION('',(0.,1.,0.)); +#254 = ORIENTED_EDGE('',*,*,#130,.F.); +#255 = ORIENTED_EDGE('',*,*,#226,.F.); +#256 = CYLINDRICAL_SURFACE('',#257,5.954044962965); +#257 = AXIS2_PLACEMENT_3D('',#258,#259,#260); +#258 = CARTESIAN_POINT('',(-32.57517518159,-5.,-5.854044962965)); +#259 = DIRECTION('',(0.,-1.,0.)); +#260 = DIRECTION('',(1.,0.,0.)); +#261 = ADVANCED_FACE('',(#262),#280,.T.); +#262 = FACE_BOUND('',#263,.T.); +#263 = EDGE_LOOP('',(#264,#272,#273,#274)); +#264 = ORIENTED_EDGE('',*,*,#265,.T.); +#265 = EDGE_CURVE('',#266,#241,#268,.T.); +#266 = VERTEX_POINT('',#267); +#267 = CARTESIAN_POINT('',(-39.62105538679,3.2,-4.479634030555)); +#268 = LINE('',#269,#270); +#269 = CARTESIAN_POINT('',(-35.41354572357,3.2,-0.272124367341)); +#270 = VECTOR('',#271,1.); +#271 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#272 = ORIENTED_EDGE('',*,*,#249,.T.); +#273 = ORIENTED_EDGE('',*,*,#122,.F.); +#274 = ORIENTED_EDGE('',*,*,#275,.F.); +#275 = EDGE_CURVE('',#266,#114,#276,.T.); +#276 = LINE('',#277,#278); +#277 = CARTESIAN_POINT('',(-39.62105538679,-5.,-4.479634030555)); +#278 = VECTOR('',#279,1.); +#279 = DIRECTION('',(0.,1.,0.)); +#280 = PLANE('',#281); +#281 = AXIS2_PLACEMENT_3D('',#282,#283,#284); +#282 = CARTESIAN_POINT('',(-36.7853207504,-5.,-1.643899394163)); +#283 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#284 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#285 = ADVANCED_FACE('',(#286),#305,.T.); +#286 = FACE_BOUND('',#287,.F.); +#287 = EDGE_LOOP('',(#288,#297,#303,#304)); +#288 = ORIENTED_EDGE('',*,*,#289,.T.); +#289 = EDGE_CURVE('',#266,#290,#292,.T.); +#290 = VERTEX_POINT('',#291); +#291 = CARTESIAN_POINT('',(-41.08376419406,3.2,-10.49792081311)); +#292 = CIRCLE('',#293,5.954044962965); +#293 = AXIS2_PLACEMENT_3D('',#294,#295,#296); +#294 = CARTESIAN_POINT('',(-35.41090981799,3.2,-8.689779599357)); +#295 = DIRECTION('',(0.,-1.,0.)); +#296 = DIRECTION('',(1.,0.,0.)); +#297 = ORIENTED_EDGE('',*,*,#298,.T.); +#298 = EDGE_CURVE('',#290,#106,#299,.T.); +#299 = LINE('',#300,#301); +#300 = CARTESIAN_POINT('',(-41.08376419406,-5.,-10.49792081311)); +#301 = VECTOR('',#302,1.); +#302 = DIRECTION('',(0.,1.,0.)); +#303 = ORIENTED_EDGE('',*,*,#113,.F.); +#304 = ORIENTED_EDGE('',*,*,#275,.F.); +#305 = CYLINDRICAL_SURFACE('',#306,5.954044962965); +#306 = AXIS2_PLACEMENT_3D('',#307,#308,#309); +#307 = CARTESIAN_POINT('',(-35.41090981799,-5.,-8.689779599357)); +#308 = DIRECTION('',(0.,-1.,0.)); +#309 = DIRECTION('',(1.,0.,0.)); +#310 = ADVANCED_FACE('',(#311),#329,.T.); +#311 = FACE_BOUND('',#312,.T.); +#312 = EDGE_LOOP('',(#313,#321,#322,#323)); +#313 = ORIENTED_EDGE('',*,*,#314,.T.); +#314 = EDGE_CURVE('',#315,#290,#317,.T.); +#315 = VERTEX_POINT('',#316); +#316 = CARTESIAN_POINT('',(-26.82464012711,3.2,-55.23443461327)); +#317 = LINE('',#318,#319); +#318 = CARTESIAN_POINT('',(-35.86541700774,3.2,-26.86994056823)); +#319 = VECTOR('',#320,1.); +#320 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#321 = ORIENTED_EDGE('',*,*,#298,.T.); +#322 = ORIENTED_EDGE('',*,*,#105,.F.); +#323 = ORIENTED_EDGE('',*,*,#324,.F.); +#324 = EDGE_CURVE('',#315,#98,#325,.T.); +#325 = LINE('',#326,#327); +#326 = CARTESIAN_POINT('',(-26.82464012711,-5.,-55.23443461327)); +#327 = VECTOR('',#328,1.); +#328 = DIRECTION('',(0.,1.,0.)); +#329 = PLANE('',#330); +#330 = AXIS2_PLACEMENT_3D('',#331,#332,#333); +#331 = CARTESIAN_POINT('',(-41.08376419406,-5.,-10.49792081311)); +#332 = DIRECTION('',(-0.952773183837,0.,-0.30368282823)); +#333 = DIRECTION('',(0.30368282823,0.,-0.952773183837)); +#334 = ADVANCED_FACE('',(#335),#353,.T.); +#335 = FACE_BOUND('',#336,.T.); +#336 = EDGE_LOOP('',(#337,#345,#346,#347)); +#337 = ORIENTED_EDGE('',*,*,#338,.T.); +#338 = EDGE_CURVE('',#339,#315,#341,.T.); +#339 = VERTEX_POINT('',#340); +#340 = CARTESIAN_POINT('',(-28.89758284854,3.2,-57.24050703685)); +#341 = LINE('',#342,#343); +#342 = CARTESIAN_POINT('',(-14.32522020853,3.2,-43.13822889076)); +#343 = VECTOR('',#344,1.); +#344 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#345 = ORIENTED_EDGE('',*,*,#324,.T.); +#346 = ORIENTED_EDGE('',*,*,#97,.F.); +#347 = ORIENTED_EDGE('',*,*,#348,.F.); +#348 = EDGE_CURVE('',#339,#89,#349,.T.); +#349 = LINE('',#350,#351); +#350 = CARTESIAN_POINT('',(-28.89758284854,-5.,-57.24050703685)); +#351 = VECTOR('',#352,1.); +#352 = DIRECTION('',(0.,1.,0.)); +#353 = PLANE('',#354); +#354 = AXIS2_PLACEMENT_3D('',#355,#356,#357); +#355 = CARTESIAN_POINT('',(-26.82464012711,-5.,-55.23443461327)); +#356 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#357 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#358 = ADVANCED_FACE('',(#359),#378,.T.); +#359 = FACE_BOUND('',#360,.F.); +#360 = EDGE_LOOP('',(#361,#370,#376,#377)); +#361 = ORIENTED_EDGE('',*,*,#362,.T.); +#362 = EDGE_CURVE('',#339,#363,#365,.T.); +#363 = VERTEX_POINT('',#364); +#364 = CARTESIAN_POINT('',(-29.01580660709,3.2,-64.4520272055)); +#365 = CIRCLE('',#366,5.1); +#366 = AXIS2_PLACEMENT_3D('',#367,#368,#369); +#367 = CARTESIAN_POINT('',(-25.35093464349,3.2,-60.90537900045)); +#368 = DIRECTION('',(0.,-1.,0.)); +#369 = DIRECTION('',(1.,0.,0.)); +#370 = ORIENTED_EDGE('',*,*,#371,.T.); +#371 = EDGE_CURVE('',#363,#81,#372,.T.); +#372 = LINE('',#373,#374); +#373 = CARTESIAN_POINT('',(-29.01580660709,-5.,-64.4520272055)); +#374 = VECTOR('',#375,1.); +#375 = DIRECTION('',(0.,1.,0.)); +#376 = ORIENTED_EDGE('',*,*,#88,.F.); +#377 = ORIENTED_EDGE('',*,*,#348,.F.); +#378 = CYLINDRICAL_SURFACE('',#379,5.1); +#379 = AXIS2_PLACEMENT_3D('',#380,#381,#382); +#380 = CARTESIAN_POINT('',(-25.35093464349,-5.,-60.90537900045)); +#381 = DIRECTION('',(0.,-1.,0.)); +#382 = DIRECTION('',(1.,0.,0.)); +#383 = ADVANCED_FACE('',(#384),#402,.T.); +#384 = FACE_BOUND('',#385,.T.); +#385 = EDGE_LOOP('',(#386,#394,#395,#396)); +#386 = ORIENTED_EDGE('',*,*,#387,.T.); +#387 = EDGE_CURVE('',#388,#363,#390,.T.); +#388 = VERTEX_POINT('',#389); +#389 = CARTESIAN_POINT('',(-27.78972445201,3.2,-65.71897950961)); +#390 = LINE('',#391,#392); +#391 = CARTESIAN_POINT('',(-29.67470230692,3.2,-63.77116791594)); +#392 = VECTOR('',#393,1.); +#393 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#394 = ORIENTED_EDGE('',*,*,#371,.T.); +#395 = ORIENTED_EDGE('',*,*,#80,.F.); +#396 = ORIENTED_EDGE('',*,*,#397,.F.); +#397 = EDGE_CURVE('',#388,#72,#398,.T.); +#398 = LINE('',#399,#400); +#399 = CARTESIAN_POINT('',(-27.78972445201,-5.,-65.71897950961)); +#400 = VECTOR('',#401,1.); +#401 = DIRECTION('',(0.,1.,0.)); +#402 = PLANE('',#403); +#403 = AXIS2_PLACEMENT_3D('',#404,#405,#406); +#404 = CARTESIAN_POINT('',(-29.01580660709,-5.,-64.4520272055)); +#405 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#406 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#407 = ADVANCED_FACE('',(#408),#427,.T.); +#408 = FACE_BOUND('',#409,.F.); +#409 = EDGE_LOOP('',(#410,#419,#425,#426)); +#410 = ORIENTED_EDGE('',*,*,#411,.T.); +#411 = EDGE_CURVE('',#388,#412,#414,.T.); +#412 = VERTEX_POINT('',#413); +#413 = CARTESIAN_POINT('',(-25.60006917852,3.2,-65.75487614033)); +#414 = CIRCLE('',#415,1.548528137424); +#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418); +#416 = CARTESIAN_POINT('',(-26.67694849991,3.2,-64.64210018823)); +#417 = DIRECTION('',(0.,-1.,0.)); +#418 = DIRECTION('',(1.,0.,0.)); +#419 = ORIENTED_EDGE('',*,*,#420,.T.); +#420 = EDGE_CURVE('',#412,#64,#421,.T.); +#421 = LINE('',#422,#423); +#422 = CARTESIAN_POINT('',(-25.60006917852,-5.,-65.75487614033)); +#423 = VECTOR('',#424,1.); +#424 = DIRECTION('',(0.,1.,0.)); +#425 = ORIENTED_EDGE('',*,*,#71,.F.); +#426 = ORIENTED_EDGE('',*,*,#397,.F.); +#427 = CYLINDRICAL_SURFACE('',#428,1.548528137424); +#428 = AXIS2_PLACEMENT_3D('',#429,#430,#431); +#429 = CARTESIAN_POINT('',(-26.67694849991,-5.,-64.64210018823)); +#430 = DIRECTION('',(0.,-1.,0.)); +#431 = DIRECTION('',(1.,0.,0.)); +#432 = ADVANCED_FACE('',(#433),#451,.T.); +#433 = FACE_BOUND('',#434,.T.); +#434 = EDGE_LOOP('',(#435,#443,#444,#445)); +#435 = ORIENTED_EDGE('',*,*,#436,.T.); +#436 = EDGE_CURVE('',#437,#412,#439,.T.); +#437 = VERTEX_POINT('',#438); +#438 = CARTESIAN_POINT('',(-20.57248334837,3.2,-60.88947335481)); +#439 = LINE('',#440,#441); +#440 = CARTESIAN_POINT('',(-10.78812989347,3.2,-51.42074976419)); +#441 = VECTOR('',#442,1.); +#442 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#443 = ORIENTED_EDGE('',*,*,#420,.T.); +#444 = ORIENTED_EDGE('',*,*,#63,.F.); +#445 = ORIENTED_EDGE('',*,*,#446,.F.); +#446 = EDGE_CURVE('',#437,#56,#447,.T.); +#447 = LINE('',#448,#449); +#448 = CARTESIAN_POINT('',(-20.57248334837,-5.,-60.88947335481)); +#449 = VECTOR('',#450,1.); +#450 = DIRECTION('',(0.,1.,0.)); +#451 = PLANE('',#452); +#452 = AXIS2_PLACEMENT_3D('',#453,#454,#455); +#453 = CARTESIAN_POINT('',(-25.60006917852,-5.,-65.75487614033)); +#454 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#455 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#456 = ADVANCED_FACE('',(#457),#475,.F.); +#457 = FACE_BOUND('',#458,.F.); +#458 = EDGE_LOOP('',(#459,#467,#473,#474)); +#459 = ORIENTED_EDGE('',*,*,#460,.T.); +#460 = EDGE_CURVE('',#437,#461,#463,.T.); +#461 = VERTEX_POINT('',#462); +#462 = CARTESIAN_POINT('',(20.57248334837,3.2,-60.88947335481)); +#463 = LINE('',#464,#465); +#464 = CARTESIAN_POINT('',(10.487769931912,3.2,-60.88947335481)); +#465 = VECTOR('',#466,1.); +#466 = DIRECTION('',(1.,0.,0.)); +#467 = ORIENTED_EDGE('',*,*,#468,.T.); +#468 = EDGE_CURVE('',#461,#48,#469,.T.); +#469 = LINE('',#470,#471); +#470 = CARTESIAN_POINT('',(20.57248334837,-5.,-60.88947335481)); +#471 = VECTOR('',#472,1.); +#472 = DIRECTION('',(0.,1.,0.)); +#473 = ORIENTED_EDGE('',*,*,#55,.F.); +#474 = ORIENTED_EDGE('',*,*,#446,.F.); +#475 = PLANE('',#476); +#476 = AXIS2_PLACEMENT_3D('',#477,#478,#479); +#477 = CARTESIAN_POINT('',(20.57248334837,-5.,-60.88947335481)); +#478 = DIRECTION('',(0.,0.,1.)); +#479 = DIRECTION('',(-1.,0.,0.)); +#480 = ADVANCED_FACE('',(#481),#499,.F.); +#481 = FACE_BOUND('',#482,.F.); +#482 = EDGE_LOOP('',(#483,#491,#497,#498)); +#483 = ORIENTED_EDGE('',*,*,#484,.T.); +#484 = EDGE_CURVE('',#461,#485,#487,.T.); +#485 = VERTEX_POINT('',#486); +#486 = CARTESIAN_POINT('',(26.712845130625,3.2,-66.83175546171)); +#487 = LINE('',#488,#489); +#488 = CARTESIAN_POINT('',(11.552651954056,3.2,-52.16060938843)); +#489 = VECTOR('',#490,1.); +#490 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#491 = ORIENTED_EDGE('',*,*,#492,.T.); +#492 = EDGE_CURVE('',#485,#40,#493,.T.); +#493 = LINE('',#494,#495); +#494 = CARTESIAN_POINT('',(26.712845130625,-5.,-66.83175546171)); +#495 = VECTOR('',#496,1.); +#496 = DIRECTION('',(0.,1.,0.)); +#497 = ORIENTED_EDGE('',*,*,#47,.F.); +#498 = ORIENTED_EDGE('',*,*,#468,.F.); +#499 = PLANE('',#500); +#500 = AXIS2_PLACEMENT_3D('',#501,#502,#503); +#501 = CARTESIAN_POINT('',(26.712845130625,-5.,-66.83175546171)); +#502 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#503 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#504 = ADVANCED_FACE('',(#505),#523,.F.); +#505 = FACE_BOUND('',#506,.F.); +#506 = EDGE_LOOP('',(#507,#515,#521,#522)); +#507 = ORIENTED_EDGE('',*,*,#508,.T.); +#508 = EDGE_CURVE('',#485,#509,#511,.T.); +#509 = VERTEX_POINT('',#510); +#510 = CARTESIAN_POINT('',(32.56245481215,3.2,-60.7871552419)); +#511 = LINE('',#512,#513); +#512 = CARTESIAN_POINT('',(31.642948840372,3.2,-61.73731197059)); +#513 = VECTOR('',#514,1.); +#514 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#515 = ORIENTED_EDGE('',*,*,#516,.T.); +#516 = EDGE_CURVE('',#509,#32,#517,.T.); +#517 = LINE('',#518,#519); +#518 = CARTESIAN_POINT('',(32.56245481215,-5.,-60.7871552419)); +#519 = VECTOR('',#520,1.); +#520 = DIRECTION('',(0.,1.,0.)); +#521 = ORIENTED_EDGE('',*,*,#39,.F.); +#522 = ORIENTED_EDGE('',*,*,#492,.F.); +#523 = PLANE('',#524); +#524 = AXIS2_PLACEMENT_3D('',#525,#526,#527); +#525 = CARTESIAN_POINT('',(32.56245481215,-5.,-60.7871552419)); +#526 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#527 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#528 = ADVANCED_FACE('',(#529),#540,.F.); +#529 = FACE_BOUND('',#530,.F.); +#530 = EDGE_LOOP('',(#531,#537,#538,#539)); +#531 = ORIENTED_EDGE('',*,*,#532,.T.); +#532 = EDGE_CURVE('',#509,#162,#533,.T.); +#533 = LINE('',#534,#535); +#534 = CARTESIAN_POINT('',(14.533354293065,3.2,-43.3396488543)); +#535 = VECTOR('',#536,1.); +#536 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#537 = ORIENTED_EDGE('',*,*,#178,.T.); +#538 = ORIENTED_EDGE('',*,*,#31,.F.); +#539 = ORIENTED_EDGE('',*,*,#516,.F.); +#540 = PLANE('',#541); +#541 = AXIS2_PLACEMENT_3D('',#542,#543,#544); +#542 = CARTESIAN_POINT('',(26.824640127118,-5.,-55.23443461327)); +#543 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#544 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#545 = ADVANCED_FACE('',(#546,#564,#614,#648,#659),#670,.F.); +#546 = FACE_BOUND('',#547,.F.); +#547 = EDGE_LOOP('',(#548,#549,#550,#551,#552,#553,#554,#555,#556,#557, + #558,#559,#560,#561,#562,#563)); +#548 = ORIENTED_EDGE('',*,*,#161,.F.); +#549 = ORIENTED_EDGE('',*,*,#532,.F.); +#550 = ORIENTED_EDGE('',*,*,#508,.F.); +#551 = ORIENTED_EDGE('',*,*,#484,.F.); +#552 = ORIENTED_EDGE('',*,*,#460,.F.); +#553 = ORIENTED_EDGE('',*,*,#436,.T.); +#554 = ORIENTED_EDGE('',*,*,#411,.F.); +#555 = ORIENTED_EDGE('',*,*,#387,.T.); +#556 = ORIENTED_EDGE('',*,*,#362,.F.); +#557 = ORIENTED_EDGE('',*,*,#338,.T.); +#558 = ORIENTED_EDGE('',*,*,#314,.T.); +#559 = ORIENTED_EDGE('',*,*,#289,.F.); +#560 = ORIENTED_EDGE('',*,*,#265,.T.); +#561 = ORIENTED_EDGE('',*,*,#240,.F.); +#562 = ORIENTED_EDGE('',*,*,#216,.T.); +#563 = ORIENTED_EDGE('',*,*,#192,.F.); +#564 = FACE_BOUND('',#565,.F.); +#565 = EDGE_LOOP('',(#566,#576,#584,#592,#600,#608)); +#566 = ORIENTED_EDGE('',*,*,#567,.F.); +#567 = EDGE_CURVE('',#568,#570,#572,.T.); +#568 = VERTEX_POINT('',#569); +#569 = CARTESIAN_POINT('',(16.626582997737,3.2,-8.940188245231)); +#570 = VERTEX_POINT('',#571); +#571 = CARTESIAN_POINT('',(4.383041634064E-04,3.2,-8.903751615529)); +#572 = LINE('',#573,#574); +#573 = CARTESIAN_POINT('',(4.347099726942,3.2,-8.913277437397)); +#574 = VECTOR('',#575,1.); +#575 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#576 = ORIENTED_EDGE('',*,*,#577,.F.); +#577 = EDGE_CURVE('',#578,#568,#580,.T.); +#578 = VERTEX_POINT('',#579); +#579 = CARTESIAN_POINT('',(19.029295926024,3.2,-17.63009960955)); +#580 = LINE('',#581,#582); +#581 = CARTESIAN_POINT('',(19.849519003668,3.2,-20.59660707692)); +#582 = VECTOR('',#583,1.); +#583 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#584 = ORIENTED_EDGE('',*,*,#585,.F.); +#585 = EDGE_CURVE('',#586,#578,#588,.T.); +#586 = VERTEX_POINT('',#587); +#587 = CARTESIAN_POINT('',(22.059435554995,3.2,-3.734519760785)); +#588 = LINE('',#589,#590); +#589 = CARTESIAN_POINT('',(17.698510515043,3.2,-23.73280021221)); +#590 = VECTOR('',#591,1.); +#591 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#592 = ORIENTED_EDGE('',*,*,#593,.F.); +#593 = EDGE_CURVE('',#594,#586,#596,.T.); +#594 = VERTEX_POINT('',#595); +#595 = CARTESIAN_POINT('',(-21.72552223146,3.2,-3.734519760785)); +#596 = LINE('',#597,#598); +#597 = CARTESIAN_POINT('',(0.297084840953,3.2,-3.734519760785)); +#598 = VECTOR('',#599,1.); +#599 = DIRECTION('',(1.,0.,0.)); +#600 = ORIENTED_EDGE('',*,*,#601,.F.); +#601 = EDGE_CURVE('',#602,#594,#604,.T.); +#602 = VERTEX_POINT('',#603); +#603 = CARTESIAN_POINT('',(-21.72552223146,3.2,-8.903751135252)); +#604 = LINE('',#605,#606); +#605 = CARTESIAN_POINT('',(-21.72552223146,3.2,-19.83215600037)); +#606 = VECTOR('',#607,1.); +#607 = DIRECTION('',(0.,0.,1.)); +#608 = ORIENTED_EDGE('',*,*,#609,.F.); +#609 = EDGE_CURVE('',#570,#602,#610,.T.); +#610 = LINE('',#611,#612); +#611 = CARTESIAN_POINT('',(-5.279852300138,3.2,-8.903751135252)); +#612 = VECTOR('',#613,1.); +#613 = DIRECTION('',(-1.,0.,0.)); +#614 = FACE_BOUND('',#615,.F.); +#615 = EDGE_LOOP('',(#616,#626,#634,#642)); +#616 = ORIENTED_EDGE('',*,*,#617,.F.); +#617 = EDGE_CURVE('',#618,#620,#622,.T.); +#618 = VERTEX_POINT('',#619); +#619 = CARTESIAN_POINT('',(5.809375885494,3.2,-13.06417917474)); +#620 = VERTEX_POINT('',#621); +#621 = CARTESIAN_POINT('',(2.688069798796,3.2,-49.64588621989)); +#622 = LINE('',#623,#624); +#623 = CARTESIAN_POINT('',(4.914157977861,3.2,-23.55613296875)); +#624 = VECTOR('',#625,1.); +#625 = DIRECTION('',(-8.501532861638E-02,0.,-0.996379643459)); +#626 = ORIENTED_EDGE('',*,*,#627,.F.); +#627 = EDGE_CURVE('',#628,#618,#630,.T.); +#628 = VERTEX_POINT('',#629); +#629 = CARTESIAN_POINT('',(-5.809375885494,3.2,-13.06417917474)); +#630 = LINE('',#631,#632); +#631 = CARTESIAN_POINT('',(1.615747408047,3.2,-13.06417917474)); +#632 = VECTOR('',#633,1.); +#633 = DIRECTION('',(1.,0.,-3.066574716487E-16)); +#634 = ORIENTED_EDGE('',*,*,#635,.F.); +#635 = EDGE_CURVE('',#636,#628,#638,.T.); +#636 = VERTEX_POINT('',#637); +#637 = CARTESIAN_POINT('',(-2.688069798796,3.2,-49.64588621989)); +#638 = LINE('',#639,#640); +#639 = CARTESIAN_POINT('',(-4.890802006217,3.2,-23.82986495424)); +#640 = VECTOR('',#641,1.); +#641 = DIRECTION('',(-8.501532861638E-02,0.,0.996379643459)); +#642 = ORIENTED_EDGE('',*,*,#643,.F.); +#643 = EDGE_CURVE('',#620,#636,#644,.T.); +#644 = LINE('',#645,#646); +#645 = CARTESIAN_POINT('',(1.615747408047,3.2,-49.64588621989)); +#646 = VECTOR('',#647,1.); +#647 = DIRECTION('',(-1.,0.,0.)); +#648 = FACE_BOUND('',#649,.F.); +#649 = EDGE_LOOP('',(#650)); +#650 = ORIENTED_EDGE('',*,*,#651,.F.); +#651 = EDGE_CURVE('',#652,#652,#654,.T.); +#652 = VERTEX_POINT('',#653); +#653 = CARTESIAN_POINT('',(-11.6927539352,3.2,-48.00951684793)); +#654 = CIRCLE('',#655,4.735522705283); +#655 = AXIS2_PLACEMENT_3D('',#656,#657,#658); +#656 = CARTESIAN_POINT('',(-16.42827664048,3.2,-48.00951684793)); +#657 = DIRECTION('',(-0.,1.,0.)); +#658 = DIRECTION('',(1.,0.,0.)); +#659 = FACE_BOUND('',#660,.F.); +#660 = EDGE_LOOP('',(#661)); +#661 = ORIENTED_EDGE('',*,*,#662,.F.); +#662 = EDGE_CURVE('',#663,#663,#665,.T.); +#663 = VERTEX_POINT('',#664); +#664 = CARTESIAN_POINT('',(21.163799345768,3.2,-48.00951684793)); +#665 = CIRCLE('',#666,4.735522705283); +#666 = AXIS2_PLACEMENT_3D('',#667,#668,#669); +#667 = CARTESIAN_POINT('',(16.428276640485,3.2,-48.00951684793)); +#668 = DIRECTION('',(-0.,1.,0.)); +#669 = DIRECTION('',(1.,0.,0.)); +#670 = PLANE('',#671); +#671 = AXIS2_PLACEMENT_3D('',#672,#673,#674); +#672 = CARTESIAN_POINT('',(0.403056515455,3.2,-33.34517655273)); +#673 = DIRECTION('',(0.,1.,0.)); +#674 = DIRECTION('',(1.,0.,0.)); +#675 = ADVANCED_FACE('',(#676),#701,.T.); +#676 = FACE_BOUND('',#677,.T.); +#677 = EDGE_LOOP('',(#678,#686,#694,#700)); +#678 = ORIENTED_EDGE('',*,*,#679,.F.); +#679 = EDGE_CURVE('',#680,#568,#682,.T.); +#680 = VERTEX_POINT('',#681); +#681 = CARTESIAN_POINT('',(16.626582997737,0.,-8.940188245231)); +#682 = LINE('',#683,#684); +#683 = CARTESIAN_POINT('',(16.626582997737,-22.,-8.940188245231)); +#684 = VECTOR('',#685,1.); +#685 = DIRECTION('',(0.,1.,0.)); +#686 = ORIENTED_EDGE('',*,*,#687,.T.); +#687 = EDGE_CURVE('',#680,#688,#690,.T.); +#688 = VERTEX_POINT('',#689); +#689 = CARTESIAN_POINT('',(-5.329070518201E-15,0.,-8.903751135252)); +#690 = LINE('',#691,#692); +#691 = CARTESIAN_POINT('',(-18.54556462154,1.7763568394E-15, + -8.863107566442)); +#692 = VECTOR('',#693,1.); +#693 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#694 = ORIENTED_EDGE('',*,*,#695,.T.); +#695 = EDGE_CURVE('',#688,#570,#696,.T.); +#696 = LINE('',#697,#698); +#697 = CARTESIAN_POINT('',(-5.329070518201E-15,-22.,-8.903751135252)); +#698 = VECTOR('',#699,1.); +#699 = DIRECTION('',(0.,1.,0.)); +#700 = ORIENTED_EDGE('',*,*,#567,.F.); +#701 = PLANE('',#702); +#702 = AXIS2_PLACEMENT_3D('',#703,#704,#705); +#703 = CARTESIAN_POINT('',(8.237581109188,-22.,-8.921803528809)); +#704 = DIRECTION('',(-2.19152081707E-03,0.,-0.999997598615)); +#705 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#706 = ADVANCED_FACE('',(#707),#725,.T.); +#707 = FACE_BOUND('',#708,.T.); +#708 = EDGE_LOOP('',(#709,#717,#723,#724)); +#709 = ORIENTED_EDGE('',*,*,#710,.F.); +#710 = EDGE_CURVE('',#711,#578,#713,.T.); +#711 = VERTEX_POINT('',#712); +#712 = CARTESIAN_POINT('',(19.029295926024,0.,-17.63009960955)); +#713 = LINE('',#714,#715); +#714 = CARTESIAN_POINT('',(19.029295926024,-22.,-17.63009960955)); +#715 = VECTOR('',#716,1.); +#716 = DIRECTION('',(0.,1.,0.)); +#717 = ORIENTED_EDGE('',*,*,#718,.T.); +#718 = EDGE_CURVE('',#711,#680,#719,.T.); +#719 = LINE('',#720,#721); +#720 = CARTESIAN_POINT('',(23.053273013696,0.,-32.18365022821)); +#721 = VECTOR('',#722,1.); +#722 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#723 = ORIENTED_EDGE('',*,*,#679,.T.); +#724 = ORIENTED_EDGE('',*,*,#577,.F.); +#725 = PLANE('',#726); +#726 = AXIS2_PLACEMENT_3D('',#727,#728,#729); +#727 = CARTESIAN_POINT('',(17.956031892536,-22.,-13.7484168618)); +#728 = DIRECTION('',(-0.963836182336,0.,-0.26649542889)); +#729 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#730 = ADVANCED_FACE('',(#731),#749,.T.); +#731 = FACE_BOUND('',#732,.T.); +#732 = EDGE_LOOP('',(#733,#741,#747,#748)); +#733 = ORIENTED_EDGE('',*,*,#734,.T.); +#734 = EDGE_CURVE('',#688,#735,#737,.T.); +#735 = VERTEX_POINT('',#736); +#736 = CARTESIAN_POINT('',(-21.72552223146,0.,-8.903751135252)); +#737 = LINE('',#738,#739); +#738 = CARTESIAN_POINT('',(-28.21385794834,0.,-8.903751135252)); +#739 = VECTOR('',#740,1.); +#740 = DIRECTION('',(-1.,0.,0.)); +#741 = ORIENTED_EDGE('',*,*,#742,.T.); +#742 = EDGE_CURVE('',#735,#602,#743,.T.); +#743 = LINE('',#744,#745); +#744 = CARTESIAN_POINT('',(-21.72552223146,-22.,-8.903751135252)); +#745 = VECTOR('',#746,1.); +#746 = DIRECTION('',(0.,1.,0.)); +#747 = ORIENTED_EDGE('',*,*,#609,.F.); +#748 = ORIENTED_EDGE('',*,*,#695,.F.); +#749 = PLANE('',#750); +#750 = AXIS2_PLACEMENT_3D('',#751,#752,#753); +#751 = CARTESIAN_POINT('',(-10.96276111573,-22.,-8.903751135252)); +#752 = DIRECTION('',(0.,0.,-1.)); +#753 = DIRECTION('',(0.,1.,0.)); +#754 = ADVANCED_FACE('',(#755),#773,.T.); +#755 = FACE_BOUND('',#756,.T.); +#756 = EDGE_LOOP('',(#757,#765,#766,#767)); +#757 = ORIENTED_EDGE('',*,*,#758,.T.); +#758 = EDGE_CURVE('',#759,#711,#761,.T.); +#759 = VERTEX_POINT('',#760); +#760 = CARTESIAN_POINT('',(22.059435554995,0.,-3.734519760785)); +#761 = LINE('',#762,#763); +#762 = CARTESIAN_POINT('',(12.741012548745,1.7763568394E-15, + -46.46683800444)); +#763 = VECTOR('',#764,1.); +#764 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#765 = ORIENTED_EDGE('',*,*,#710,.T.); +#766 = ORIENTED_EDGE('',*,*,#585,.F.); +#767 = ORIENTED_EDGE('',*,*,#768,.F.); +#768 = EDGE_CURVE('',#759,#586,#769,.T.); +#769 = LINE('',#770,#771); +#770 = CARTESIAN_POINT('',(22.059435554995,-22.,-3.734519760785)); +#771 = VECTOR('',#772,1.); +#772 = DIRECTION('',(0.,1.,0.)); +#773 = PLANE('',#774); +#774 = AXIS2_PLACEMENT_3D('',#775,#776,#777); +#775 = CARTESIAN_POINT('',(20.484588228021,-22.,-10.95643672209)); +#776 = DIRECTION('',(0.977039526026,0.,-0.213058124893)); +#777 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#778 = ADVANCED_FACE('',(#779),#797,.T.); +#779 = FACE_BOUND('',#780,.T.); +#780 = EDGE_LOOP('',(#781,#789,#795,#796)); +#781 = ORIENTED_EDGE('',*,*,#782,.T.); +#782 = EDGE_CURVE('',#735,#783,#785,.T.); +#783 = VERTEX_POINT('',#784); +#784 = CARTESIAN_POINT('',(-21.72552223146,0.,-3.734519760785)); +#785 = LINE('',#786,#787); +#786 = CARTESIAN_POINT('',(-21.72552223146,0.,-38.64614663299)); +#787 = VECTOR('',#788,1.); +#788 = DIRECTION('',(0.,0.,1.)); +#789 = ORIENTED_EDGE('',*,*,#790,.T.); +#790 = EDGE_CURVE('',#783,#594,#791,.T.); +#791 = LINE('',#792,#793); +#792 = CARTESIAN_POINT('',(-21.72552223146,-22.,-3.734519760785)); +#793 = VECTOR('',#794,1.); +#794 = DIRECTION('',(0.,1.,0.)); +#795 = ORIENTED_EDGE('',*,*,#601,.F.); +#796 = ORIENTED_EDGE('',*,*,#742,.F.); +#797 = PLANE('',#798); +#798 = AXIS2_PLACEMENT_3D('',#799,#800,#801); +#799 = CARTESIAN_POINT('',(-21.72552223146,-22.,-6.319135448019)); +#800 = DIRECTION('',(-1.,0.,0.)); +#801 = DIRECTION('',(0.,1.,0.)); +#802 = ADVANCED_FACE('',(#803),#814,.T.); +#803 = FACE_BOUND('',#804,.T.); +#804 = EDGE_LOOP('',(#805,#811,#812,#813)); +#805 = ORIENTED_EDGE('',*,*,#806,.T.); +#806 = EDGE_CURVE('',#783,#759,#807,.T.); +#807 = LINE('',#808,#809); +#808 = CARTESIAN_POINT('',(-22.63692080725,0.,-3.734519760785)); +#809 = VECTOR('',#810,1.); +#810 = DIRECTION('',(1.,0.,0.)); +#811 = ORIENTED_EDGE('',*,*,#768,.T.); +#812 = ORIENTED_EDGE('',*,*,#593,.F.); +#813 = ORIENTED_EDGE('',*,*,#790,.F.); +#814 = PLANE('',#815); +#815 = AXIS2_PLACEMENT_3D('',#816,#817,#818); +#816 = CARTESIAN_POINT('',(0.19111316645,-22.,-3.734519760785)); +#817 = DIRECTION('',(0.,0.,1.)); +#818 = DIRECTION('',(0.,-1.,0.)); +#819 = ADVANCED_FACE('',(#820),#845,.F.); +#820 = FACE_BOUND('',#821,.F.); +#821 = EDGE_LOOP('',(#822,#832,#838,#839)); +#822 = ORIENTED_EDGE('',*,*,#823,.T.); +#823 = EDGE_CURVE('',#824,#826,#828,.T.); +#824 = VERTEX_POINT('',#825); +#825 = CARTESIAN_POINT('',(1.480297366167E-15,11.242400581089, + -46.71869179633)); +#826 = VERTEX_POINT('',#827); +#827 = CARTESIAN_POINT('',(3.256654205567E-15,17.8572529153, + -18.39898295202)); +#828 = LINE('',#829,#830); +#829 = CARTESIAN_POINT('',(2.6645352591E-15,18.133069549222, + -17.21814831317)); +#830 = VECTOR('',#831,1.); +#831 = DIRECTION('',(5.275122655165E-17,0.227455280238,0.97378852709)); +#832 = ORIENTED_EDGE('',*,*,#833,.F.); +#833 = EDGE_CURVE('',#618,#826,#834,.T.); +#834 = LINE('',#835,#836); +#835 = CARTESIAN_POINT('',(5.649679875255,3.602918464526,-13.21082950266 + )); +#836 = VECTOR('',#837,1.); +#837 = DIRECTION('',(-0.349023821871,0.880598971639,-0.320511814002)); +#838 = ORIENTED_EDGE('',*,*,#617,.T.); +#839 = ORIENTED_EDGE('',*,*,#840,.T.); +#840 = EDGE_CURVE('',#620,#824,#841,.T.); +#841 = LINE('',#842,#843); +#842 = CARTESIAN_POINT('',(1.103762571829,7.940067898719,-47.92064259636 + )); +#843 = VECTOR('',#844,1.); +#844 = DIRECTION('',(-0.299648208284,0.896513522642,0.326304236859)); +#845 = PLANE('',#846); +#846 = AXIS2_PLACEMENT_3D('',#847,#848,#849); +#847 = CARTESIAN_POINT('',(5.823691883056,3.068404028665,-13.45978839622 + )); +#848 = DIRECTION('',(0.93629059846,0.342020143326,-7.988827695448E-02)); +#849 = DIRECTION('',(-0.340781908463,0.939692620786,2.907695487825E-02) + ); +#850 = ADVANCED_FACE('',(#851),#861,.F.); +#851 = FACE_BOUND('',#852,.F.); +#852 = EDGE_LOOP('',(#853,#854,#860)); +#853 = ORIENTED_EDGE('',*,*,#833,.T.); +#854 = ORIENTED_EDGE('',*,*,#855,.T.); +#855 = EDGE_CURVE('',#826,#628,#856,.T.); +#856 = LINE('',#857,#858); +#857 = CARTESIAN_POINT('',(-5.275833888477,4.546144602338, + -13.55413574101)); +#858 = VECTOR('',#859,1.); +#859 = DIRECTION('',(-0.349023821871,-0.880598971639,0.320511814002)); +#860 = ORIENTED_EDGE('',*,*,#627,.T.); +#861 = PLANE('',#862); +#862 = AXIS2_PLACEMENT_3D('',#863,#864,#865); +#863 = CARTESIAN_POINT('',(2.828438300639,3.068404028665,-13.01628215822 + )); +#864 = DIRECTION('',(2.88163763217E-16,0.342020143326,0.939692620786)); +#865 = DIRECTION('',(-1.048830324052E-16,0.939692620786,-0.342020143326) + ); +#866 = ADVANCED_FACE('',(#867),#877,.F.); +#867 = FACE_BOUND('',#868,.F.); +#868 = EDGE_LOOP('',(#869,#875,#876)); +#869 = ORIENTED_EDGE('',*,*,#870,.T.); +#870 = EDGE_CURVE('',#636,#824,#871,.T.); +#871 = LINE('',#872,#873); +#872 = CARTESIAN_POINT('',(-0.871390517001,8.635298785064, + -47.66759924779)); +#873 = VECTOR('',#874,1.); +#874 = DIRECTION('',(0.299648208284,0.896513522642,0.326304236859)); +#875 = ORIENTED_EDGE('',*,*,#840,.F.); +#876 = ORIENTED_EDGE('',*,*,#643,.T.); +#877 = PLANE('',#878); +#878 = AXIS2_PLACEMENT_3D('',#879,#880,#881); +#879 = CARTESIAN_POINT('',(2.828438300639,3.068404028665,-49.69378323641 + )); +#880 = DIRECTION('',(0.,0.342020143326,-0.939692620786)); +#881 = DIRECTION('',(0.,0.939692620786,0.342020143326)); +#882 = ADVANCED_FACE('',(#883),#889,.F.); +#883 = FACE_BOUND('',#884,.F.); +#884 = EDGE_LOOP('',(#885,#886,#887,#888)); +#885 = ORIENTED_EDGE('',*,*,#635,.T.); +#886 = ORIENTED_EDGE('',*,*,#855,.F.); +#887 = ORIENTED_EDGE('',*,*,#823,.F.); +#888 = ORIENTED_EDGE('',*,*,#870,.F.); +#889 = PLANE('',#890); +#890 = AXIS2_PLACEMENT_3D('',#891,#892,#893); +#891 = CARTESIAN_POINT('',(-5.782806207227,3.068404028665, + -13.93896851312)); +#892 = DIRECTION('',(-0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#893 = DIRECTION('',(0.340781908463,0.939692620786,2.907695487825E-02)); +#894 = ADVANCED_FACE('',(#895),#914,.T.); +#895 = FACE_BOUND('',#896,.T.); +#896 = EDGE_LOOP('',(#897,#906,#912,#913)); +#897 = ORIENTED_EDGE('',*,*,#898,.T.); +#898 = EDGE_CURVE('',#899,#899,#901,.T.); +#899 = VERTEX_POINT('',#900); +#900 = CARTESIAN_POINT('',(-11.6927539352,0.,-48.00951684793)); +#901 = CIRCLE('',#902,4.735522705283); +#902 = AXIS2_PLACEMENT_3D('',#903,#904,#905); +#903 = CARTESIAN_POINT('',(-16.42827664048,0.,-48.00951684793)); +#904 = DIRECTION('',(-0.,1.,0.)); +#905 = DIRECTION('',(1.,0.,0.)); +#906 = ORIENTED_EDGE('',*,*,#907,.T.); +#907 = EDGE_CURVE('',#899,#652,#908,.T.); +#908 = LINE('',#909,#910); +#909 = CARTESIAN_POINT('',(-11.6927539352,-22.,-48.00951684793)); +#910 = VECTOR('',#911,1.); +#911 = DIRECTION('',(0.,1.,0.)); +#912 = ORIENTED_EDGE('',*,*,#651,.F.); +#913 = ORIENTED_EDGE('',*,*,#907,.F.); +#914 = CYLINDRICAL_SURFACE('',#915,4.735522705283); +#915 = AXIS2_PLACEMENT_3D('',#916,#917,#918); +#916 = CARTESIAN_POINT('',(-16.42827664048,-22.,-48.00951684793)); +#917 = DIRECTION('',(0.,1.,0.)); +#918 = DIRECTION('',(1.,0.,0.)); +#919 = ADVANCED_FACE('',(#920),#939,.T.); +#920 = FACE_BOUND('',#921,.T.); +#921 = EDGE_LOOP('',(#922,#931,#937,#938)); +#922 = ORIENTED_EDGE('',*,*,#923,.T.); +#923 = EDGE_CURVE('',#924,#924,#926,.T.); +#924 = VERTEX_POINT('',#925); +#925 = CARTESIAN_POINT('',(21.163799345768,0.,-48.00951684793)); +#926 = CIRCLE('',#927,4.735522705283); +#927 = AXIS2_PLACEMENT_3D('',#928,#929,#930); +#928 = CARTESIAN_POINT('',(16.428276640485,0.,-48.00951684793)); +#929 = DIRECTION('',(-0.,1.,0.)); +#930 = DIRECTION('',(1.,0.,0.)); +#931 = ORIENTED_EDGE('',*,*,#932,.T.); +#932 = EDGE_CURVE('',#924,#663,#933,.T.); +#933 = LINE('',#934,#935); +#934 = CARTESIAN_POINT('',(21.163799345768,-22.,-48.00951684793)); +#935 = VECTOR('',#936,1.); +#936 = DIRECTION('',(0.,1.,0.)); +#937 = ORIENTED_EDGE('',*,*,#662,.F.); +#938 = ORIENTED_EDGE('',*,*,#932,.F.); +#939 = CYLINDRICAL_SURFACE('',#940,4.735522705283); +#940 = AXIS2_PLACEMENT_3D('',#941,#942,#943); +#941 = CARTESIAN_POINT('',(16.428276640485,-22.,-48.00951684793)); +#942 = DIRECTION('',(0.,1.,0.)); +#943 = DIRECTION('',(1.,0.,0.)); +#944 = ADVANCED_FACE('',(#945),#953,.F.); +#945 = FACE_BOUND('',#946,.F.); +#946 = EDGE_LOOP('',(#947,#948,#949,#950,#951,#952)); +#947 = ORIENTED_EDGE('',*,*,#718,.T.); +#948 = ORIENTED_EDGE('',*,*,#687,.T.); +#949 = ORIENTED_EDGE('',*,*,#734,.T.); +#950 = ORIENTED_EDGE('',*,*,#782,.T.); +#951 = ORIENTED_EDGE('',*,*,#806,.T.); +#952 = ORIENTED_EDGE('',*,*,#758,.T.); +#953 = PLANE('',#954); +#954 = AXIS2_PLACEMENT_3D('',#955,#956,#957); +#955 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#956 = DIRECTION('',(0.,1.,0.)); +#957 = DIRECTION('',(0.,0.,1.)); +#958 = ADVANCED_FACE('',(#959),#962,.F.); +#959 = FACE_BOUND('',#960,.F.); +#960 = EDGE_LOOP('',(#961)); +#961 = ORIENTED_EDGE('',*,*,#898,.T.); +#962 = PLANE('',#963); +#963 = AXIS2_PLACEMENT_3D('',#964,#965,#966); +#964 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#965 = DIRECTION('',(0.,1.,0.)); +#966 = DIRECTION('',(0.,0.,1.)); +#967 = ADVANCED_FACE('',(#968),#971,.F.); +#968 = FACE_BOUND('',#969,.F.); +#969 = EDGE_LOOP('',(#970)); +#970 = ORIENTED_EDGE('',*,*,#923,.T.); +#971 = PLANE('',#972); +#972 = AXIS2_PLACEMENT_3D('',#973,#974,#975); +#973 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#974 = DIRECTION('',(0.,1.,0.)); +#975 = DIRECTION('',(0.,0.,1.)); +#976 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#980)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#977,#978,#979)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#977 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#978 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#979 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#980 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(5.E-06),#977, + 'distance_accuracy_value','confusion accuracy'); +#981 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +ENDSEC; +END-ISO-10303-21; diff --git a/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.stl b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.stl new file mode 100644 index 0000000000..940dab90f7 Binary files /dev/null and b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed.stl differ diff --git a/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.step b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.step new file mode 100644 index 0000000000..14e61e2877 --- /dev/null +++ b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.step @@ -0,0 +1,1604 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-08-05T11:06:23',('FreeCAD'),( + 'FreeCAD'),'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('Open CASCADE STEP translator 7.8 2', + 'Open CASCADE STEP translator 7.8 2','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#1522); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = MANIFOLD_SOLID_BREP('',#16); +#16 = CLOSED_SHELL('',(#17,#291,#322,#346,#370,#395,#419,#444,#468,#492, + #517,#541,#566,#590,#614,#638,#662,#679,#710,#734,#758,#782,#806, + #830,#854,#878,#903,#928,#952,#976,#1001,#1026,#1050,#1067,#1091, + #1221,#1252,#1276,#1300,#1324,#1348,#1365,#1390,#1421,#1437,#1454, + #1465,#1490,#1504,#1513)); +#17 = ADVANCED_FACE('',(#18,#152),#286,.F.); +#18 = FACE_BOUND('',#19,.F.); +#19 = EDGE_LOOP('',(#20,#30,#38,#46,#54,#62,#70,#79,#87,#96,#104,#112, + #121,#129,#138,#146)); +#20 = ORIENTED_EDGE('',*,*,#21,.F.); +#21 = EDGE_CURVE('',#22,#24,#26,.T.); +#22 = VERTEX_POINT('',#23); +#23 = CARTESIAN_POINT('',(28.536336768195,0.,-54.80352892379)); +#24 = VERTEX_POINT('',#25); +#25 = CARTESIAN_POINT('',(43.891390829132,0.,-6.628649129335)); +#26 = LINE('',#27,#28); +#27 = CARTESIAN_POINT('',(30.462276491561,4.440892098501E-16, + -48.76109401628)); +#28 = VECTOR('',#29,1.); +#29 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#30 = ORIENTED_EDGE('',*,*,#31,.F.); +#31 = EDGE_CURVE('',#32,#22,#34,.T.); +#32 = VERTEX_POINT('',#33); +#33 = CARTESIAN_POINT('',(34.683490155872,0.,-60.75238354821)); +#34 = LINE('',#35,#36); +#35 = CARTESIAN_POINT('',(13.469833011847,0.,-40.22304997814)); +#36 = VECTOR('',#37,1.); +#37 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#38 = ORIENTED_EDGE('',*,*,#39,.F.); +#39 = EDGE_CURVE('',#40,#32,#42,.T.); +#40 = VERTEX_POINT('',#41); +#41 = CARTESIAN_POINT('',(26.747616824317,0.,-68.95279080543)); +#42 = LINE('',#43,#44); +#43 = CARTESIAN_POINT('',(12.749348137648,0.,-83.41767694094)); +#44 = VECTOR('',#45,1.); +#45 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#46 = ORIENTED_EDGE('',*,*,#47,.F.); +#47 = EDGE_CURVE('',#48,#40,#50,.T.); +#48 = VERTEX_POINT('',#49); +#49 = CARTESIAN_POINT('',(19.965518143439,0.,-62.38947335481)); +#50 = LINE('',#51,#52); +#51 = CARTESIAN_POINT('',(8.607536374131,0.,-51.39788454757)); +#52 = VECTOR('',#53,1.); +#53 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#54 = ORIENTED_EDGE('',*,*,#55,.F.); +#55 = EDGE_CURVE('',#56,#48,#58,.T.); +#56 = VERTEX_POINT('',#57); +#57 = CARTESIAN_POINT('',(-19.96551814343,0.,-62.38947335481)); +#58 = LINE('',#59,#60); +#59 = CARTESIAN_POINT('',(-12.74971831875,0.,-62.38947335481)); +#60 = VECTOR('',#61,1.); +#61 = DIRECTION('',(1.,0.,0.)); +#62 = ORIENTED_EDGE('',*,*,#63,.T.); +#63 = EDGE_CURVE('',#56,#64,#66,.T.); +#64 = VERTEX_POINT('',#65); +#65 = CARTESIAN_POINT('',(-24.55693735351,0.,-66.83277965903)); +#66 = LINE('',#67,#68); +#67 = CARTESIAN_POINT('',(-30.98981424001,0.,-73.05814073287)); +#68 = VECTOR('',#69,1.); +#69 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#70 = ORIENTED_EDGE('',*,*,#71,.F.); +#71 = EDGE_CURVE('',#72,#64,#74,.T.); +#72 = VERTEX_POINT('',#73); +#73 = CARTESIAN_POINT('',(-28.86762797071,0.,-66.76211133463)); +#74 = CIRCLE('',#75,3.048528137424); +#75 = AXIS2_PLACEMENT_3D('',#76,#77,#78); +#76 = CARTESIAN_POINT('',(-26.67694849991,0.,-64.64210018823)); +#77 = DIRECTION('',(0.,-1.,0.)); +#78 = DIRECTION('',(1.,0.,0.)); +#79 = ORIENTED_EDGE('',*,*,#80,.T.); +#80 = EDGE_CURVE('',#72,#81,#83,.T.); +#81 = VERTEX_POINT('',#82); +#82 = CARTESIAN_POINT('',(-30.0937101258,0.,-65.49515903052)); +#83 = LINE('',#84,#85); +#84 = CARTESIAN_POINT('',(-32.44179530228,0.,-63.0688029236)); +#85 = VECTOR('',#86,1.); +#86 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#87 = ORIENTED_EDGE('',*,*,#88,.F.); +#88 = EDGE_CURVE('',#89,#81,#91,.T.); +#89 = VERTEX_POINT('',#90); +#90 = CARTESIAN_POINT('',(-29.94071467356,0.,-56.16260351814)); +#91 = CIRCLE('',#92,6.6); +#92 = AXIS2_PLACEMENT_3D('',#93,#94,#95); +#93 = CARTESIAN_POINT('',(-25.35093464349,0.,-60.90537900045)); +#94 = DIRECTION('',(0.,-1.,0.)); +#95 = DIRECTION('',(1.,0.,0.)); +#96 = ORIENTED_EDGE('',*,*,#97,.T.); +#97 = EDGE_CURVE('',#89,#98,#100,.T.); +#98 = VERTEX_POINT('',#99); +#99 = CARTESIAN_POINT('',(-28.53633676819,0.,-54.80352892379)); +#100 = LINE('',#101,#102); +#101 = CARTESIAN_POINT('',(-36.94745061313,0.,-62.94331173664)); +#102 = VECTOR('',#103,1.); +#103 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#104 = ORIENTED_EDGE('',*,*,#105,.T.); +#105 = EDGE_CURVE('',#98,#106,#108,.T.); +#106 = VERTEX_POINT('',#107); +#107 = CARTESIAN_POINT('',(-42.51292396981,0.,-10.95344505546)); +#108 = LINE('',#109,#110); +#109 = CARTESIAN_POINT('',(-33.96596941491,4.440892098501E-16, + -37.76862308461)); +#110 = VECTOR('',#111,1.); +#111 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#112 = ORIENTED_EDGE('',*,*,#113,.F.); +#113 = EDGE_CURVE('',#114,#106,#116,.T.); +#114 = VERTEX_POINT('',#115); +#115 = CARTESIAN_POINT('',(-40.68171555857,0.,-3.418973858775)); +#116 = CIRCLE('',#117,7.454044962965); +#117 = AXIS2_PLACEMENT_3D('',#118,#119,#120); +#118 = CARTESIAN_POINT('',(-35.41090981799,0.,-8.689779599357)); +#119 = DIRECTION('',(0.,-1.,0.)); +#120 = DIRECTION('',(1.,0.,0.)); +#121 = ORIENTED_EDGE('',*,*,#122,.T.); +#122 = EDGE_CURVE('',#114,#123,#125,.T.); +#123 = VERTEX_POINT('',#124); +#124 = CARTESIAN_POINT('',(-37.84598092218,0.,-0.583239222383)); +#125 = LINE('',#126,#127); +#126 = CARTESIAN_POINT('',(-57.34820403576,0.,-20.08546233597)); +#127 = VECTOR('',#128,1.); +#128 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#129 = ORIENTED_EDGE('',*,*,#130,.F.); +#130 = EDGE_CURVE('',#131,#123,#133,.T.); +#131 = VERTEX_POINT('',#132); +#132 = CARTESIAN_POINT('',(-32.57517518159,0.,1.6)); +#133 = CIRCLE('',#134,7.454044962965); +#134 = AXIS2_PLACEMENT_3D('',#135,#136,#137); +#135 = CARTESIAN_POINT('',(-32.57517518159,0.,-5.854044962965)); +#136 = DIRECTION('',(0.,-1.,0.)); +#137 = DIRECTION('',(1.,0.,0.)); +#138 = ORIENTED_EDGE('',*,*,#139,.T.); +#139 = EDGE_CURVE('',#131,#140,#142,.T.); +#140 = VERTEX_POINT('',#141); +#141 = CARTESIAN_POINT('',(35.662741699797,0.,1.6)); +#142 = LINE('',#143,#144); +#143 = CARTESIAN_POINT('',(-4.901106540577,0.,1.6)); +#144 = VECTOR('',#145,1.); +#145 = DIRECTION('',(1.,0.,0.)); +#146 = ORIENTED_EDGE('',*,*,#147,.F.); +#147 = EDGE_CURVE('',#24,#140,#148,.T.); +#148 = LINE('',#149,#150); +#149 = CARTESIAN_POINT('',(33.5241070341,0.,3.738634665697)); +#150 = VECTOR('',#151,1.); +#151 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#152 = FACE_BOUND('',#153,.F.); +#153 = EDGE_LOOP('',(#154,#164,#172,#180,#188,#197,#205,#214,#222,#230, + #239,#247,#256,#264,#272,#280)); +#154 = ORIENTED_EDGE('',*,*,#155,.T.); +#155 = EDGE_CURVE('',#156,#158,#160,.T.); +#156 = VERTEX_POINT('',#157); +#157 = CARTESIAN_POINT('',(32.703857168398,0.,-60.78483712899)); +#158 = VERTEX_POINT('',#159); +#159 = CARTESIAN_POINT('',(26.938753236523,0.,-55.20570756731)); +#160 = LINE('',#161,#162); +#161 = CARTESIAN_POINT('',(13.567306766147,0.,-42.26560567724)); +#162 = VECTOR('',#163,1.); +#163 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#164 = ORIENTED_EDGE('',*,*,#165,.T.); +#165 = EDGE_CURVE('',#158,#166,#168,.T.); +#166 = VERTEX_POINT('',#167); +#167 = CARTESIAN_POINT('',(42.298608189024,0.,-7.015765476549)); +#168 = LINE('',#169,#170); +#169 = CARTESIAN_POINT('',(25.140315874087,-4.440892098501E-16, + -60.84811712245)); +#170 = VECTOR('',#171,1.); +#171 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#172 = ORIENTED_EDGE('',*,*,#173,.T.); +#173 = EDGE_CURVE('',#166,#174,#176,.T.); +#174 = VERTEX_POINT('',#175); +#175 = CARTESIAN_POINT('',(35.082842712475,0.,0.2)); +#176 = LINE('',#177,#178); +#177 = CARTESIAN_POINT('',(34.536239068456,0.,0.746603644019)); +#178 = VECTOR('',#179,1.); +#179 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#180 = ORIENTED_EDGE('',*,*,#181,.F.); +#181 = EDGE_CURVE('',#182,#174,#184,.T.); +#182 = VERTEX_POINT('',#183); +#183 = CARTESIAN_POINT('',(-32.57517518159,0.,0.2)); +#184 = LINE('',#185,#186); +#185 = CARTESIAN_POINT('',(-30.87627118587,0.,0.2)); +#186 = VECTOR('',#187,1.); +#187 = DIRECTION('',(1.,0.,0.)); +#188 = ORIENTED_EDGE('',*,*,#189,.T.); +#189 = EDGE_CURVE('',#182,#190,#192,.T.); +#190 = VERTEX_POINT('',#191); +#191 = CARTESIAN_POINT('',(-36.85603142851,0.,-1.573188716044)); +#192 = CIRCLE('',#193,6.054044962965); +#193 = AXIS2_PLACEMENT_3D('',#194,#195,#196); +#194 = CARTESIAN_POINT('',(-32.57517518159,0.,-5.854044962965)); +#195 = DIRECTION('',(0.,-1.,0.)); +#196 = DIRECTION('',(-1.,0.,0.)); +#197 = ORIENTED_EDGE('',*,*,#198,.F.); +#198 = EDGE_CURVE('',#199,#190,#201,.T.); +#199 = VERTEX_POINT('',#200); +#200 = CARTESIAN_POINT('',(-39.69176606491,0.,-4.408923352436)); +#201 = LINE('',#202,#203); +#202 = CARTESIAN_POINT('',(-57.0671882012,0.,-21.78434548873)); +#203 = VECTOR('',#204,1.); +#204 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#205 = ORIENTED_EDGE('',*,*,#206,.T.); +#206 = EDGE_CURVE('',#199,#207,#209,.T.); +#207 = VERTEX_POINT('',#208); +#208 = CARTESIAN_POINT('',(-41.17904151244,0.,-10.52828909594)); +#209 = CIRCLE('',#210,6.054044962965); +#210 = AXIS2_PLACEMENT_3D('',#211,#212,#213); +#211 = CARTESIAN_POINT('',(-35.41090981799,0.,-8.689779599357)); +#212 = DIRECTION('',(0.,-1.,0.)); +#213 = DIRECTION('',(-1.,0.,0.)); +#214 = ORIENTED_EDGE('',*,*,#215,.F.); +#215 = EDGE_CURVE('',#216,#207,#218,.T.); +#216 = VERTEX_POINT('',#217); +#217 = CARTESIAN_POINT('',(-26.93875323652,0.,-55.20570756731)); +#218 = LINE('',#219,#220); +#219 = CARTESIAN_POINT('',(-29.06259699304,-4.440892098501E-16, + -48.54236940733)); +#220 = VECTOR('',#221,1.); +#221 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#222 = ORIENTED_EDGE('',*,*,#223,.F.); +#223 = EDGE_CURVE('',#224,#216,#226,.T.); +#224 = VERTEX_POINT('',#225); +#225 = CARTESIAN_POINT('',(-28.96712497021,0.,-57.16864680227)); +#226 = LINE('',#227,#228); +#227 = CARTESIAN_POINT('',(-36.14667143517,0.,-64.11659091489)); +#228 = VECTOR('',#229,1.); +#229 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#230 = ORIENTED_EDGE('',*,*,#231,.T.); +#231 = EDGE_CURVE('',#224,#232,#234,.T.); +#232 = VERTEX_POINT('',#233); +#233 = CARTESIAN_POINT('',(-29.08766684168,0.,-64.52156932717)); +#234 = CIRCLE('',#235,5.2); +#235 = AXIS2_PLACEMENT_3D('',#236,#237,#238); +#236 = CARTESIAN_POINT('',(-25.35093464349,0.,-60.90537900045)); +#237 = DIRECTION('',(0.,-1.,0.)); +#238 = DIRECTION('',(-1.,0.,0.)); +#239 = ORIENTED_EDGE('',*,*,#240,.F.); +#240 = EDGE_CURVE('',#241,#232,#243,.T.); +#241 = VERTEX_POINT('',#242); +#242 = CARTESIAN_POINT('',(-27.86158468659,0.,-65.78852163128)); +#243 = LINE('',#244,#245); +#244 = CARTESIAN_POINT('',(-31.12923147938,0.,-62.41195129628)); +#245 = VECTOR('',#246,1.); +#246 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#247 = ORIENTED_EDGE('',*,*,#248,.T.); +#248 = EDGE_CURVE('',#241,#249,#251,.T.); +#249 = VERTEX_POINT('',#250); +#250 = CARTESIAN_POINT('',(-25.53052705686,0.,-65.82673637491)); +#251 = CIRCLE('',#252,1.648528137424); +#252 = AXIS2_PLACEMENT_3D('',#253,#254,#255); +#253 = CARTESIAN_POINT('',(-26.67694849991,0.,-64.64210018823)); +#254 = DIRECTION('',(0.,-1.,0.)); +#255 = DIRECTION('',(-1.,0.,0.)); +#256 = ORIENTED_EDGE('',*,*,#257,.F.); +#257 = EDGE_CURVE('',#258,#249,#260,.T.); +#258 = VERTEX_POINT('',#259); +#259 = CARTESIAN_POINT('',(-20.53201900137,0.,-60.98947335481)); +#260 = LINE('',#261,#262); +#261 = CARTESIAN_POINT('',(-30.69923804215,0.,-70.82871181101)); +#262 = VECTOR('',#263,1.); +#263 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#264 = ORIENTED_EDGE('',*,*,#265,.T.); +#265 = EDGE_CURVE('',#258,#266,#268,.T.); +#266 = VERTEX_POINT('',#267); +#267 = CARTESIAN_POINT('',(20.532019001374,0.,-60.98947335481)); +#268 = LINE('',#269,#270); +#269 = CARTESIAN_POINT('',(-17.57924046663,0.,-60.98947335481)); +#270 = VECTOR('',#271,1.); +#271 = DIRECTION('',(1.,0.,0.)); +#272 = ORIENTED_EDGE('',*,*,#273,.T.); +#273 = EDGE_CURVE('',#266,#274,#276,.T.); +#274 = VERTEX_POINT('',#275); +#275 = CARTESIAN_POINT('',(26.715163243538,0.,-66.97315781796)); +#276 = LINE('',#277,#278); +#277 = CARTESIAN_POINT('',(7.481849370247,-4.440892098501E-16, + -48.36028435244)); +#278 = VECTOR('',#279,1.); +#279 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#280 = ORIENTED_EDGE('',*,*,#281,.T.); +#281 = EDGE_CURVE('',#274,#156,#282,.T.); +#282 = LINE('',#283,#284); +#283 = CARTESIAN_POINT('',(9.75933652063,0.,-84.4941890519)); +#284 = VECTOR('',#285,1.); +#285 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#286 = PLANE('',#287); +#287 = AXIS2_PLACEMENT_3D('',#288,#289,#290); +#288 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#289 = DIRECTION('',(0.,1.,0.)); +#290 = DIRECTION('',(0.,0.,1.)); +#291 = ADVANCED_FACE('',(#292),#317,.F.); +#292 = FACE_BOUND('',#293,.F.); +#293 = EDGE_LOOP('',(#294,#295,#303,#311)); +#294 = ORIENTED_EDGE('',*,*,#21,.T.); +#295 = ORIENTED_EDGE('',*,*,#296,.T.); +#296 = EDGE_CURVE('',#24,#297,#299,.T.); +#297 = VERTEX_POINT('',#298); +#298 = CARTESIAN_POINT('',(43.891390829132,20.8572529153,-6.628649129335 + )); +#299 = LINE('',#300,#301); +#300 = CARTESIAN_POINT('',(43.891390829132,-5.,-6.628649129335)); +#301 = VECTOR('',#302,1.); +#302 = DIRECTION('',(0.,1.,0.)); +#303 = ORIENTED_EDGE('',*,*,#304,.F.); +#304 = EDGE_CURVE('',#305,#297,#307,.T.); +#305 = VERTEX_POINT('',#306); +#306 = CARTESIAN_POINT('',(28.536336768195,20.8572529153,-54.80352892379 + )); +#307 = LINE('',#308,#309); +#308 = CARTESIAN_POINT('',(30.462276491561,20.8572529153,-48.76109401628 + )); +#309 = VECTOR('',#310,1.); +#310 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#311 = ORIENTED_EDGE('',*,*,#312,.F.); +#312 = EDGE_CURVE('',#22,#305,#313,.T.); +#313 = LINE('',#314,#315); +#314 = CARTESIAN_POINT('',(28.536336768195,-5.,-54.80352892379)); +#315 = VECTOR('',#316,1.); +#316 = DIRECTION('',(0.,1.,0.)); +#317 = PLANE('',#318); +#318 = AXIS2_PLACEMENT_3D('',#319,#320,#321); +#319 = CARTESIAN_POINT('',(43.891390829132,-5.,-6.628649129335)); +#320 = DIRECTION('',(-0.952773183837,0.,0.30368282823)); +#321 = DIRECTION('',(-0.30368282823,0.,-0.952773183837)); +#322 = ADVANCED_FACE('',(#323),#341,.F.); +#323 = FACE_BOUND('',#324,.F.); +#324 = EDGE_LOOP('',(#325,#326,#334,#340)); +#325 = ORIENTED_EDGE('',*,*,#147,.T.); +#326 = ORIENTED_EDGE('',*,*,#327,.T.); +#327 = EDGE_CURVE('',#140,#328,#330,.T.); +#328 = VERTEX_POINT('',#329); +#329 = CARTESIAN_POINT('',(35.662741699797,20.8572529153,1.6)); +#330 = LINE('',#331,#332); +#331 = CARTESIAN_POINT('',(35.662741699797,-5.,1.6)); +#332 = VECTOR('',#333,1.); +#333 = DIRECTION('',(0.,1.,0.)); +#334 = ORIENTED_EDGE('',*,*,#335,.F.); +#335 = EDGE_CURVE('',#297,#328,#336,.T.); +#336 = LINE('',#337,#338); +#337 = CARTESIAN_POINT('',(33.5241070341,20.8572529153,3.738634665697)); +#338 = VECTOR('',#339,1.); +#339 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#340 = ORIENTED_EDGE('',*,*,#296,.F.); +#341 = PLANE('',#342); +#342 = AXIS2_PLACEMENT_3D('',#343,#344,#345); +#343 = CARTESIAN_POINT('',(35.662741699797,-5.,1.6)); +#344 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#345 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#346 = ADVANCED_FACE('',(#347),#365,.T.); +#347 = FACE_BOUND('',#348,.T.); +#348 = EDGE_LOOP('',(#349,#350,#351,#359)); +#349 = ORIENTED_EDGE('',*,*,#139,.T.); +#350 = ORIENTED_EDGE('',*,*,#327,.T.); +#351 = ORIENTED_EDGE('',*,*,#352,.F.); +#352 = EDGE_CURVE('',#353,#328,#355,.T.); +#353 = VERTEX_POINT('',#354); +#354 = CARTESIAN_POINT('',(-32.57517518159,20.8572529153,1.6)); +#355 = LINE('',#356,#357); +#356 = CARTESIAN_POINT('',(-4.901106540577,20.8572529153,1.6)); +#357 = VECTOR('',#358,1.); +#358 = DIRECTION('',(1.,0.,0.)); +#359 = ORIENTED_EDGE('',*,*,#360,.F.); +#360 = EDGE_CURVE('',#131,#353,#361,.T.); +#361 = LINE('',#362,#363); +#362 = CARTESIAN_POINT('',(-32.57517518159,-5.,1.6)); +#363 = VECTOR('',#364,1.); +#364 = DIRECTION('',(0.,1.,0.)); +#365 = PLANE('',#366); +#366 = AXIS2_PLACEMENT_3D('',#367,#368,#369); +#367 = CARTESIAN_POINT('',(35.662741699797,-5.,1.6)); +#368 = DIRECTION('',(0.,0.,1.)); +#369 = DIRECTION('',(-1.,0.,0.)); +#370 = ADVANCED_FACE('',(#371),#390,.T.); +#371 = FACE_BOUND('',#372,.F.); +#372 = EDGE_LOOP('',(#373,#374,#382,#389)); +#373 = ORIENTED_EDGE('',*,*,#130,.T.); +#374 = ORIENTED_EDGE('',*,*,#375,.T.); +#375 = EDGE_CURVE('',#123,#376,#378,.T.); +#376 = VERTEX_POINT('',#377); +#377 = CARTESIAN_POINT('',(-37.84598092218,20.8572529153,-0.583239222383 + )); +#378 = LINE('',#379,#380); +#379 = CARTESIAN_POINT('',(-37.84598092218,-5.,-0.583239222383)); +#380 = VECTOR('',#381,1.); +#381 = DIRECTION('',(0.,1.,0.)); +#382 = ORIENTED_EDGE('',*,*,#383,.F.); +#383 = EDGE_CURVE('',#353,#376,#384,.T.); +#384 = CIRCLE('',#385,7.454044962965); +#385 = AXIS2_PLACEMENT_3D('',#386,#387,#388); +#386 = CARTESIAN_POINT('',(-32.57517518159,20.8572529153,-5.854044962965 + )); +#387 = DIRECTION('',(0.,-1.,0.)); +#388 = DIRECTION('',(1.,0.,0.)); +#389 = ORIENTED_EDGE('',*,*,#360,.F.); +#390 = CYLINDRICAL_SURFACE('',#391,7.454044962965); +#391 = AXIS2_PLACEMENT_3D('',#392,#393,#394); +#392 = CARTESIAN_POINT('',(-32.57517518159,-5.,-5.854044962965)); +#393 = DIRECTION('',(0.,-1.,0.)); +#394 = DIRECTION('',(1.,0.,0.)); +#395 = ADVANCED_FACE('',(#396),#414,.T.); +#396 = FACE_BOUND('',#397,.T.); +#397 = EDGE_LOOP('',(#398,#399,#400,#408)); +#398 = ORIENTED_EDGE('',*,*,#122,.T.); +#399 = ORIENTED_EDGE('',*,*,#375,.T.); +#400 = ORIENTED_EDGE('',*,*,#401,.F.); +#401 = EDGE_CURVE('',#402,#376,#404,.T.); +#402 = VERTEX_POINT('',#403); +#403 = CARTESIAN_POINT('',(-40.68171555857,20.8572529153,-3.418973858775 + )); +#404 = LINE('',#405,#406); +#405 = CARTESIAN_POINT('',(-57.34820403576,20.8572529153,-20.08546233597 + )); +#406 = VECTOR('',#407,1.); +#407 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#408 = ORIENTED_EDGE('',*,*,#409,.F.); +#409 = EDGE_CURVE('',#114,#402,#410,.T.); +#410 = LINE('',#411,#412); +#411 = CARTESIAN_POINT('',(-40.68171555857,-5.,-3.418973858775)); +#412 = VECTOR('',#413,1.); +#413 = DIRECTION('',(0.,1.,0.)); +#414 = PLANE('',#415); +#415 = AXIS2_PLACEMENT_3D('',#416,#417,#418); +#416 = CARTESIAN_POINT('',(-37.84598092218,-5.,-0.583239222383)); +#417 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#418 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#419 = ADVANCED_FACE('',(#420),#439,.T.); +#420 = FACE_BOUND('',#421,.F.); +#421 = EDGE_LOOP('',(#422,#423,#431,#438)); +#422 = ORIENTED_EDGE('',*,*,#113,.T.); +#423 = ORIENTED_EDGE('',*,*,#424,.T.); +#424 = EDGE_CURVE('',#106,#425,#427,.T.); +#425 = VERTEX_POINT('',#426); +#426 = CARTESIAN_POINT('',(-42.51292396981,20.8572529153,-10.95344505546 + )); +#427 = LINE('',#428,#429); +#428 = CARTESIAN_POINT('',(-42.51292396981,-5.,-10.95344505546)); +#429 = VECTOR('',#430,1.); +#430 = DIRECTION('',(0.,1.,0.)); +#431 = ORIENTED_EDGE('',*,*,#432,.F.); +#432 = EDGE_CURVE('',#402,#425,#433,.T.); +#433 = CIRCLE('',#434,7.454044962965); +#434 = AXIS2_PLACEMENT_3D('',#435,#436,#437); +#435 = CARTESIAN_POINT('',(-35.41090981799,20.8572529153,-8.689779599357 + )); +#436 = DIRECTION('',(0.,-1.,0.)); +#437 = DIRECTION('',(1.,0.,0.)); +#438 = ORIENTED_EDGE('',*,*,#409,.F.); +#439 = CYLINDRICAL_SURFACE('',#440,7.454044962965); +#440 = AXIS2_PLACEMENT_3D('',#441,#442,#443); +#441 = CARTESIAN_POINT('',(-35.41090981799,-5.,-8.689779599357)); +#442 = DIRECTION('',(0.,-1.,0.)); +#443 = DIRECTION('',(1.,0.,0.)); +#444 = ADVANCED_FACE('',(#445),#463,.T.); +#445 = FACE_BOUND('',#446,.T.); +#446 = EDGE_LOOP('',(#447,#448,#449,#457)); +#447 = ORIENTED_EDGE('',*,*,#105,.T.); +#448 = ORIENTED_EDGE('',*,*,#424,.T.); +#449 = ORIENTED_EDGE('',*,*,#450,.F.); +#450 = EDGE_CURVE('',#451,#425,#453,.T.); +#451 = VERTEX_POINT('',#452); +#452 = CARTESIAN_POINT('',(-28.53633676819,20.8572529153,-54.80352892379 + )); +#453 = LINE('',#454,#455); +#454 = CARTESIAN_POINT('',(-33.96596941491,20.8572529153,-37.76862308461 + )); +#455 = VECTOR('',#456,1.); +#456 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#457 = ORIENTED_EDGE('',*,*,#458,.F.); +#458 = EDGE_CURVE('',#98,#451,#459,.T.); +#459 = LINE('',#460,#461); +#460 = CARTESIAN_POINT('',(-28.53633676819,-5.,-54.80352892379)); +#461 = VECTOR('',#462,1.); +#462 = DIRECTION('',(0.,1.,0.)); +#463 = PLANE('',#464); +#464 = AXIS2_PLACEMENT_3D('',#465,#466,#467); +#465 = CARTESIAN_POINT('',(-42.51292396981,-5.,-10.95344505546)); +#466 = DIRECTION('',(-0.952773183837,0.,-0.30368282823)); +#467 = DIRECTION('',(0.30368282823,0.,-0.952773183837)); +#468 = ADVANCED_FACE('',(#469),#487,.T.); +#469 = FACE_BOUND('',#470,.T.); +#470 = EDGE_LOOP('',(#471,#472,#473,#481)); +#471 = ORIENTED_EDGE('',*,*,#97,.T.); +#472 = ORIENTED_EDGE('',*,*,#458,.T.); +#473 = ORIENTED_EDGE('',*,*,#474,.F.); +#474 = EDGE_CURVE('',#475,#451,#477,.T.); +#475 = VERTEX_POINT('',#476); +#476 = CARTESIAN_POINT('',(-29.94071467356,20.8572529153,-56.16260351814 + )); +#477 = LINE('',#478,#479); +#478 = CARTESIAN_POINT('',(-36.94745061313,20.8572529153,-62.94331173664 + )); +#479 = VECTOR('',#480,1.); +#480 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#481 = ORIENTED_EDGE('',*,*,#482,.F.); +#482 = EDGE_CURVE('',#89,#475,#483,.T.); +#483 = LINE('',#484,#485); +#484 = CARTESIAN_POINT('',(-29.94071467356,-5.,-56.16260351814)); +#485 = VECTOR('',#486,1.); +#486 = DIRECTION('',(0.,1.,0.)); +#487 = PLANE('',#488); +#488 = AXIS2_PLACEMENT_3D('',#489,#490,#491); +#489 = CARTESIAN_POINT('',(-28.53633676819,-5.,-54.80352892379)); +#490 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#491 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#492 = ADVANCED_FACE('',(#493),#512,.T.); +#493 = FACE_BOUND('',#494,.F.); +#494 = EDGE_LOOP('',(#495,#496,#504,#511)); +#495 = ORIENTED_EDGE('',*,*,#88,.T.); +#496 = ORIENTED_EDGE('',*,*,#497,.T.); +#497 = EDGE_CURVE('',#81,#498,#500,.T.); +#498 = VERTEX_POINT('',#499); +#499 = CARTESIAN_POINT('',(-30.0937101258,20.8572529153,-65.49515903052) + ); +#500 = LINE('',#501,#502); +#501 = CARTESIAN_POINT('',(-30.0937101258,-5.,-65.49515903052)); +#502 = VECTOR('',#503,1.); +#503 = DIRECTION('',(0.,1.,0.)); +#504 = ORIENTED_EDGE('',*,*,#505,.F.); +#505 = EDGE_CURVE('',#475,#498,#506,.T.); +#506 = CIRCLE('',#507,6.6); +#507 = AXIS2_PLACEMENT_3D('',#508,#509,#510); +#508 = CARTESIAN_POINT('',(-25.35093464349,20.8572529153,-60.90537900045 + )); +#509 = DIRECTION('',(0.,-1.,0.)); +#510 = DIRECTION('',(1.,0.,0.)); +#511 = ORIENTED_EDGE('',*,*,#482,.F.); +#512 = CYLINDRICAL_SURFACE('',#513,6.6); +#513 = AXIS2_PLACEMENT_3D('',#514,#515,#516); +#514 = CARTESIAN_POINT('',(-25.35093464349,-5.,-60.90537900045)); +#515 = DIRECTION('',(0.,-1.,0.)); +#516 = DIRECTION('',(1.,0.,0.)); +#517 = ADVANCED_FACE('',(#518),#536,.T.); +#518 = FACE_BOUND('',#519,.T.); +#519 = EDGE_LOOP('',(#520,#521,#522,#530)); +#520 = ORIENTED_EDGE('',*,*,#80,.T.); +#521 = ORIENTED_EDGE('',*,*,#497,.T.); +#522 = ORIENTED_EDGE('',*,*,#523,.F.); +#523 = EDGE_CURVE('',#524,#498,#526,.T.); +#524 = VERTEX_POINT('',#525); +#525 = CARTESIAN_POINT('',(-28.86762797071,20.8572529153,-66.76211133463 + )); +#526 = LINE('',#527,#528); +#527 = CARTESIAN_POINT('',(-32.44179530228,20.8572529153,-63.0688029236) + ); +#528 = VECTOR('',#529,1.); +#529 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#530 = ORIENTED_EDGE('',*,*,#531,.F.); +#531 = EDGE_CURVE('',#72,#524,#532,.T.); +#532 = LINE('',#533,#534); +#533 = CARTESIAN_POINT('',(-28.86762797071,-5.,-66.76211133463)); +#534 = VECTOR('',#535,1.); +#535 = DIRECTION('',(0.,1.,0.)); +#536 = PLANE('',#537); +#537 = AXIS2_PLACEMENT_3D('',#538,#539,#540); +#538 = CARTESIAN_POINT('',(-30.0937101258,-5.,-65.49515903052)); +#539 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#540 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#541 = ADVANCED_FACE('',(#542),#561,.T.); +#542 = FACE_BOUND('',#543,.F.); +#543 = EDGE_LOOP('',(#544,#545,#553,#560)); +#544 = ORIENTED_EDGE('',*,*,#71,.T.); +#545 = ORIENTED_EDGE('',*,*,#546,.T.); +#546 = EDGE_CURVE('',#64,#547,#549,.T.); +#547 = VERTEX_POINT('',#548); +#548 = CARTESIAN_POINT('',(-24.55693735351,20.8572529153,-66.83277965903 + )); +#549 = LINE('',#550,#551); +#550 = CARTESIAN_POINT('',(-24.55693735351,-5.,-66.83277965903)); +#551 = VECTOR('',#552,1.); +#552 = DIRECTION('',(0.,1.,0.)); +#553 = ORIENTED_EDGE('',*,*,#554,.F.); +#554 = EDGE_CURVE('',#524,#547,#555,.T.); +#555 = CIRCLE('',#556,3.048528137424); +#556 = AXIS2_PLACEMENT_3D('',#557,#558,#559); +#557 = CARTESIAN_POINT('',(-26.67694849991,20.8572529153,-64.64210018823 + )); +#558 = DIRECTION('',(0.,-1.,0.)); +#559 = DIRECTION('',(1.,0.,0.)); +#560 = ORIENTED_EDGE('',*,*,#531,.F.); +#561 = CYLINDRICAL_SURFACE('',#562,3.048528137424); +#562 = AXIS2_PLACEMENT_3D('',#563,#564,#565); +#563 = CARTESIAN_POINT('',(-26.67694849991,-5.,-64.64210018823)); +#564 = DIRECTION('',(0.,-1.,0.)); +#565 = DIRECTION('',(1.,0.,0.)); +#566 = ADVANCED_FACE('',(#567),#585,.T.); +#567 = FACE_BOUND('',#568,.T.); +#568 = EDGE_LOOP('',(#569,#570,#571,#579)); +#569 = ORIENTED_EDGE('',*,*,#63,.T.); +#570 = ORIENTED_EDGE('',*,*,#546,.T.); +#571 = ORIENTED_EDGE('',*,*,#572,.F.); +#572 = EDGE_CURVE('',#573,#547,#575,.T.); +#573 = VERTEX_POINT('',#574); +#574 = CARTESIAN_POINT('',(-19.96551814343,20.8572529153,-62.38947335481 + )); +#575 = LINE('',#576,#577); +#576 = CARTESIAN_POINT('',(-30.98981424001,20.8572529153,-73.05814073287 + )); +#577 = VECTOR('',#578,1.); +#578 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#579 = ORIENTED_EDGE('',*,*,#580,.F.); +#580 = EDGE_CURVE('',#56,#573,#581,.T.); +#581 = LINE('',#582,#583); +#582 = CARTESIAN_POINT('',(-19.96551814343,-5.,-62.38947335481)); +#583 = VECTOR('',#584,1.); +#584 = DIRECTION('',(0.,1.,0.)); +#585 = PLANE('',#586); +#586 = AXIS2_PLACEMENT_3D('',#587,#588,#589); +#587 = CARTESIAN_POINT('',(-24.55693735351,-5.,-66.83277965903)); +#588 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#589 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#590 = ADVANCED_FACE('',(#591),#609,.F.); +#591 = FACE_BOUND('',#592,.F.); +#592 = EDGE_LOOP('',(#593,#594,#602,#608)); +#593 = ORIENTED_EDGE('',*,*,#55,.T.); +#594 = ORIENTED_EDGE('',*,*,#595,.T.); +#595 = EDGE_CURVE('',#48,#596,#598,.T.); +#596 = VERTEX_POINT('',#597); +#597 = CARTESIAN_POINT('',(19.965518143439,20.8572529153,-62.38947335481 + )); +#598 = LINE('',#599,#600); +#599 = CARTESIAN_POINT('',(19.965518143439,-5.,-62.38947335481)); +#600 = VECTOR('',#601,1.); +#601 = DIRECTION('',(0.,1.,0.)); +#602 = ORIENTED_EDGE('',*,*,#603,.F.); +#603 = EDGE_CURVE('',#573,#596,#604,.T.); +#604 = LINE('',#605,#606); +#605 = CARTESIAN_POINT('',(-12.74971831875,20.8572529153,-62.38947335481 + )); +#606 = VECTOR('',#607,1.); +#607 = DIRECTION('',(1.,0.,0.)); +#608 = ORIENTED_EDGE('',*,*,#580,.F.); +#609 = PLANE('',#610); +#610 = AXIS2_PLACEMENT_3D('',#611,#612,#613); +#611 = CARTESIAN_POINT('',(19.965518143439,-5.,-62.38947335481)); +#612 = DIRECTION('',(0.,0.,1.)); +#613 = DIRECTION('',(-1.,0.,0.)); +#614 = ADVANCED_FACE('',(#615),#633,.F.); +#615 = FACE_BOUND('',#616,.F.); +#616 = EDGE_LOOP('',(#617,#618,#626,#632)); +#617 = ORIENTED_EDGE('',*,*,#47,.T.); +#618 = ORIENTED_EDGE('',*,*,#619,.T.); +#619 = EDGE_CURVE('',#40,#620,#622,.T.); +#620 = VERTEX_POINT('',#621); +#621 = CARTESIAN_POINT('',(26.747616824317,20.8572529153,-68.95279080543 + )); +#622 = LINE('',#623,#624); +#623 = CARTESIAN_POINT('',(26.747616824317,-5.,-68.95279080543)); +#624 = VECTOR('',#625,1.); +#625 = DIRECTION('',(0.,1.,0.)); +#626 = ORIENTED_EDGE('',*,*,#627,.F.); +#627 = EDGE_CURVE('',#596,#620,#628,.T.); +#628 = LINE('',#629,#630); +#629 = CARTESIAN_POINT('',(8.607536374131,20.8572529153,-51.39788454757) + ); +#630 = VECTOR('',#631,1.); +#631 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#632 = ORIENTED_EDGE('',*,*,#595,.F.); +#633 = PLANE('',#634); +#634 = AXIS2_PLACEMENT_3D('',#635,#636,#637); +#635 = CARTESIAN_POINT('',(26.747616824317,-5.,-68.95279080543)); +#636 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#637 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#638 = ADVANCED_FACE('',(#639),#657,.F.); +#639 = FACE_BOUND('',#640,.F.); +#640 = EDGE_LOOP('',(#641,#642,#650,#656)); +#641 = ORIENTED_EDGE('',*,*,#39,.T.); +#642 = ORIENTED_EDGE('',*,*,#643,.T.); +#643 = EDGE_CURVE('',#32,#644,#646,.T.); +#644 = VERTEX_POINT('',#645); +#645 = CARTESIAN_POINT('',(34.683490155872,20.8572529153,-60.75238354821 + )); +#646 = LINE('',#647,#648); +#647 = CARTESIAN_POINT('',(34.683490155872,-5.,-60.75238354821)); +#648 = VECTOR('',#649,1.); +#649 = DIRECTION('',(0.,1.,0.)); +#650 = ORIENTED_EDGE('',*,*,#651,.F.); +#651 = EDGE_CURVE('',#620,#644,#652,.T.); +#652 = LINE('',#653,#654); +#653 = CARTESIAN_POINT('',(12.749348137648,20.8572529153,-83.41767694094 + )); +#654 = VECTOR('',#655,1.); +#655 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#656 = ORIENTED_EDGE('',*,*,#619,.F.); +#657 = PLANE('',#658); +#658 = AXIS2_PLACEMENT_3D('',#659,#660,#661); +#659 = CARTESIAN_POINT('',(34.683490155872,-5.,-60.75238354821)); +#660 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#661 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#662 = ADVANCED_FACE('',(#663),#674,.F.); +#663 = FACE_BOUND('',#664,.F.); +#664 = EDGE_LOOP('',(#665,#666,#667,#673)); +#665 = ORIENTED_EDGE('',*,*,#31,.T.); +#666 = ORIENTED_EDGE('',*,*,#312,.T.); +#667 = ORIENTED_EDGE('',*,*,#668,.F.); +#668 = EDGE_CURVE('',#644,#305,#669,.T.); +#669 = LINE('',#670,#671); +#670 = CARTESIAN_POINT('',(13.469833011847,20.8572529153,-40.22304997814 + )); +#671 = VECTOR('',#672,1.); +#672 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#673 = ORIENTED_EDGE('',*,*,#643,.F.); +#674 = PLANE('',#675); +#675 = AXIS2_PLACEMENT_3D('',#676,#677,#678); +#676 = CARTESIAN_POINT('',(28.536336768195,-5.,-54.80352892379)); +#677 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#678 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#679 = ADVANCED_FACE('',(#680),#705,.T.); +#680 = FACE_BOUND('',#681,.T.); +#681 = EDGE_LOOP('',(#682,#690,#691,#699)); +#682 = ORIENTED_EDGE('',*,*,#683,.F.); +#683 = EDGE_CURVE('',#156,#684,#686,.T.); +#684 = VERTEX_POINT('',#685); +#685 = CARTESIAN_POINT('',(32.703857168398,3.2,-60.78483712899)); +#686 = LINE('',#687,#688); +#687 = CARTESIAN_POINT('',(32.703857168398,3.,-60.78483712899)); +#688 = VECTOR('',#689,1.); +#689 = DIRECTION('',(0.,1.,0.)); +#690 = ORIENTED_EDGE('',*,*,#155,.T.); +#691 = ORIENTED_EDGE('',*,*,#692,.F.); +#692 = EDGE_CURVE('',#693,#158,#695,.T.); +#693 = VERTEX_POINT('',#694); +#694 = CARTESIAN_POINT('',(26.938753236523,3.2,-55.20570756731)); +#695 = LINE('',#696,#697); +#696 = CARTESIAN_POINT('',(26.938753236523,3.,-55.20570756731)); +#697 = VECTOR('',#698,1.); +#698 = DIRECTION('',(0.,-1.,0.)); +#699 = ORIENTED_EDGE('',*,*,#700,.F.); +#700 = EDGE_CURVE('',#684,#693,#701,.T.); +#701 = LINE('',#702,#703); +#702 = CARTESIAN_POINT('',(16.008242280412,3.2,-44.62779994931)); +#703 = VECTOR('',#704,1.); +#704 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#705 = PLANE('',#706); +#706 = AXIS2_PLACEMENT_3D('',#707,#708,#709); +#707 = CARTESIAN_POINT('',(29.704873980143,3.,-57.88259703786)); +#708 = DIRECTION('',(-0.695421216677,0.,-0.718602345805)); +#709 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#710 = ADVANCED_FACE('',(#711),#729,.T.); +#711 = FACE_BOUND('',#712,.T.); +#712 = EDGE_LOOP('',(#713,#721,#722,#723)); +#713 = ORIENTED_EDGE('',*,*,#714,.F.); +#714 = EDGE_CURVE('',#274,#715,#717,.T.); +#715 = VERTEX_POINT('',#716); +#716 = CARTESIAN_POINT('',(26.715163243538,3.2,-66.97315781796)); +#717 = LINE('',#718,#719); +#718 = CARTESIAN_POINT('',(26.715163243538,3.,-66.97315781796)); +#719 = VECTOR('',#720,1.); +#720 = DIRECTION('',(0.,1.,0.)); +#721 = ORIENTED_EDGE('',*,*,#281,.T.); +#722 = ORIENTED_EDGE('',*,*,#683,.T.); +#723 = ORIENTED_EDGE('',*,*,#724,.F.); +#724 = EDGE_CURVE('',#715,#684,#725,.T.); +#725 = LINE('',#726,#727); +#726 = CARTESIAN_POINT('',(30.25240665457,3.2,-63.31800414721)); +#727 = VECTOR('',#728,1.); +#728 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#729 = PLANE('',#730); +#730 = AXIS2_PLACEMENT_3D('',#731,#732,#733); +#731 = CARTESIAN_POINT('',(29.709510205968,3.,-63.87899747347)); +#732 = DIRECTION('',(-0.718602345805,0.,0.695421216677)); +#733 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#734 = ADVANCED_FACE('',(#735),#753,.T.); +#735 = FACE_BOUND('',#736,.T.); +#736 = EDGE_LOOP('',(#737,#745,#746,#747)); +#737 = ORIENTED_EDGE('',*,*,#738,.F.); +#738 = EDGE_CURVE('',#693,#739,#741,.T.); +#739 = VERTEX_POINT('',#740); +#740 = CARTESIAN_POINT('',(42.298608189024,3.2,-7.015765476549)); +#741 = LINE('',#742,#743); +#742 = CARTESIAN_POINT('',(32.699020781567,3.2,-37.13346923684)); +#743 = VECTOR('',#744,1.); +#744 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#745 = ORIENTED_EDGE('',*,*,#692,.T.); +#746 = ORIENTED_EDGE('',*,*,#165,.T.); +#747 = ORIENTED_EDGE('',*,*,#748,.F.); +#748 = EDGE_CURVE('',#739,#166,#749,.T.); +#749 = LINE('',#750,#751); +#750 = CARTESIAN_POINT('',(42.298608189024,3.,-7.015765476549)); +#751 = VECTOR('',#752,1.); +#752 = DIRECTION('',(0.,-1.,0.)); +#753 = PLANE('',#754); +#754 = AXIS2_PLACEMENT_3D('',#755,#756,#757); +#755 = CARTESIAN_POINT('',(34.581352051556,3.,-31.22785130119)); +#756 = DIRECTION('',(-0.952773183837,0.,0.30368282823)); +#757 = DIRECTION('',(0.30368282823,0.,0.952773183837)); +#758 = ADVANCED_FACE('',(#759),#777,.T.); +#759 = FACE_BOUND('',#760,.T.); +#760 = EDGE_LOOP('',(#761,#769,#775,#776)); +#761 = ORIENTED_EDGE('',*,*,#762,.F.); +#762 = EDGE_CURVE('',#763,#715,#765,.T.); +#763 = VERTEX_POINT('',#764); +#764 = CARTESIAN_POINT('',(20.532019001374,3.2,-60.98947335481)); +#765 = LINE('',#766,#767); +#766 = CARTESIAN_POINT('',(9.922784884512,3.2,-50.72247862452)); +#767 = VECTOR('',#768,1.); +#768 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#769 = ORIENTED_EDGE('',*,*,#770,.T.); +#770 = EDGE_CURVE('',#763,#266,#771,.T.); +#771 = LINE('',#772,#773); +#772 = CARTESIAN_POINT('',(20.532019001374,3.,-60.98947335481)); +#773 = VECTOR('',#774,1.); +#774 = DIRECTION('',(0.,-1.,0.)); +#775 = ORIENTED_EDGE('',*,*,#273,.T.); +#776 = ORIENTED_EDGE('',*,*,#714,.T.); +#777 = PLANE('',#778); +#778 = AXIS2_PLACEMENT_3D('',#779,#780,#781); +#779 = CARTESIAN_POINT('',(23.522653113203,3.,-63.8836336993)); +#780 = DIRECTION('',(0.695421216677,0.,0.718602345805)); +#781 = DIRECTION('',(0.718602345805,0.,-0.695421216677)); +#782 = ADVANCED_FACE('',(#783),#801,.T.); +#783 = FACE_BOUND('',#784,.T.); +#784 = EDGE_LOOP('',(#785,#786,#787,#795)); +#785 = ORIENTED_EDGE('',*,*,#748,.T.); +#786 = ORIENTED_EDGE('',*,*,#173,.T.); +#787 = ORIENTED_EDGE('',*,*,#788,.F.); +#788 = EDGE_CURVE('',#789,#174,#791,.T.); +#789 = VERTEX_POINT('',#790); +#790 = CARTESIAN_POINT('',(35.082842712475,3.2,0.2)); +#791 = LINE('',#792,#793); +#792 = CARTESIAN_POINT('',(35.082842712475,3.,0.2)); +#793 = VECTOR('',#794,1.); +#794 = DIRECTION('',(0.,-1.,0.)); +#795 = ORIENTED_EDGE('',*,*,#796,.F.); +#796 = EDGE_CURVE('',#739,#789,#797,.T.); +#797 = LINE('',#798,#799); +#798 = CARTESIAN_POINT('',(36.596246576251,3.2,-1.313403863776)); +#799 = VECTOR('',#800,1.); +#800 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#801 = PLANE('',#802); +#802 = AXIS2_PLACEMENT_3D('',#803,#804,#805); +#803 = CARTESIAN_POINT('',(38.67695526217,3.,-3.394112549695)); +#804 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#805 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#806 = ADVANCED_FACE('',(#807),#825,.T.); +#807 = FACE_BOUND('',#808,.T.); +#808 = EDGE_LOOP('',(#809,#817,#818,#819)); +#809 = ORIENTED_EDGE('',*,*,#810,.F.); +#810 = EDGE_CURVE('',#258,#811,#813,.T.); +#811 = VERTEX_POINT('',#812); +#812 = CARTESIAN_POINT('',(-20.53201900137,3.2,-60.98947335481)); +#813 = LINE('',#814,#815); +#814 = CARTESIAN_POINT('',(-20.53201900137,3.,-60.98947335481)); +#815 = VECTOR('',#816,1.); +#816 = DIRECTION('',(0.,1.,0.)); +#817 = ORIENTED_EDGE('',*,*,#265,.T.); +#818 = ORIENTED_EDGE('',*,*,#770,.F.); +#819 = ORIENTED_EDGE('',*,*,#820,.F.); +#820 = EDGE_CURVE('',#811,#763,#821,.T.); +#821 = LINE('',#822,#823); +#822 = CARTESIAN_POINT('',(5.354765181569,3.2,-60.98947335481)); +#823 = VECTOR('',#824,1.); +#824 = DIRECTION('',(1.,0.,0.)); +#825 = PLANE('',#826); +#826 = AXIS2_PLACEMENT_3D('',#827,#828,#829); +#827 = CARTESIAN_POINT('',(10.306473847682,3.,-60.98947335481)); +#828 = DIRECTION('',(0.,0.,1.)); +#829 = DIRECTION('',(0.,-1.,0.)); +#830 = ADVANCED_FACE('',(#831),#849,.F.); +#831 = FACE_BOUND('',#832,.F.); +#832 = EDGE_LOOP('',(#833,#834,#842,#848)); +#833 = ORIENTED_EDGE('',*,*,#788,.F.); +#834 = ORIENTED_EDGE('',*,*,#835,.F.); +#835 = EDGE_CURVE('',#836,#789,#838,.T.); +#836 = VERTEX_POINT('',#837); +#837 = CARTESIAN_POINT('',(-32.57517518159,3.2,0.2)); +#838 = LINE('',#839,#840); +#839 = CARTESIAN_POINT('',(-7.942265537672,3.2,0.2)); +#840 = VECTOR('',#841,1.); +#841 = DIRECTION('',(1.,0.,0.)); +#842 = ORIENTED_EDGE('',*,*,#843,.T.); +#843 = EDGE_CURVE('',#836,#182,#844,.T.); +#844 = LINE('',#845,#846); +#845 = CARTESIAN_POINT('',(-32.57517518159,3.,0.2)); +#846 = VECTOR('',#847,1.); +#847 = DIRECTION('',(0.,-1.,0.)); +#848 = ORIENTED_EDGE('',*,*,#181,.T.); +#849 = PLANE('',#850); +#850 = AXIS2_PLACEMENT_3D('',#851,#852,#853); +#851 = CARTESIAN_POINT('',(-16.28758759079,3.,0.2)); +#852 = DIRECTION('',(0.,0.,1.)); +#853 = DIRECTION('',(0.,-1.,0.)); +#854 = ADVANCED_FACE('',(#855),#873,.F.); +#855 = FACE_BOUND('',#856,.F.); +#856 = EDGE_LOOP('',(#857,#865,#871,#872)); +#857 = ORIENTED_EDGE('',*,*,#858,.F.); +#858 = EDGE_CURVE('',#859,#249,#861,.T.); +#859 = VERTEX_POINT('',#860); +#860 = CARTESIAN_POINT('',(-25.53052705686,3.2,-65.82673637491)); +#861 = LINE('',#862,#863); +#862 = CARTESIAN_POINT('',(-25.53052705686,3.,-65.82673637491)); +#863 = VECTOR('',#864,1.); +#864 = DIRECTION('',(0.,-1.,0.)); +#865 = ORIENTED_EDGE('',*,*,#866,.F.); +#866 = EDGE_CURVE('',#811,#859,#867,.T.); +#867 = LINE('',#868,#869); +#868 = CARTESIAN_POINT('',(-9.454421870603,3.2,-50.26922436104)); +#869 = VECTOR('',#870,1.); +#870 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#871 = ORIENTED_EDGE('',*,*,#810,.F.); +#872 = ORIENTED_EDGE('',*,*,#257,.T.); +#873 = PLANE('',#874); +#874 = AXIS2_PLACEMENT_3D('',#875,#876,#877); +#875 = CARTESIAN_POINT('',(-23.00219525444,3.,-63.37996509944)); +#876 = DIRECTION('',(0.695421216677,0.,-0.718602345805)); +#877 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#878 = ADVANCED_FACE('',(#879),#898,.F.); +#879 = FACE_BOUND('',#880,.F.); +#880 = EDGE_LOOP('',(#881,#882,#891,#897)); +#881 = ORIENTED_EDGE('',*,*,#843,.F.); +#882 = ORIENTED_EDGE('',*,*,#883,.T.); +#883 = EDGE_CURVE('',#836,#884,#886,.T.); +#884 = VERTEX_POINT('',#885); +#885 = CARTESIAN_POINT('',(-36.85603142851,3.2,-1.573188716044)); +#886 = CIRCLE('',#887,6.054044962965); +#887 = AXIS2_PLACEMENT_3D('',#888,#889,#890); +#888 = CARTESIAN_POINT('',(-32.57517518159,3.2,-5.854044962965)); +#889 = DIRECTION('',(0.,-1.,0.)); +#890 = DIRECTION('',(-1.,0.,0.)); +#891 = ORIENTED_EDGE('',*,*,#892,.T.); +#892 = EDGE_CURVE('',#884,#190,#893,.T.); +#893 = LINE('',#894,#895); +#894 = CARTESIAN_POINT('',(-36.85603142851,3.,-1.573188716044)); +#895 = VECTOR('',#896,1.); +#896 = DIRECTION('',(0.,-1.,0.)); +#897 = ORIENTED_EDGE('',*,*,#189,.F.); +#898 = CYLINDRICAL_SURFACE('',#899,6.054044962965); +#899 = AXIS2_PLACEMENT_3D('',#900,#901,#902); +#900 = CARTESIAN_POINT('',(-32.57517518159,3.,-5.854044962965)); +#901 = DIRECTION('',(0.,-1.,0.)); +#902 = DIRECTION('',(-1.,0.,0.)); +#903 = ADVANCED_FACE('',(#904),#923,.F.); +#904 = FACE_BOUND('',#905,.F.); +#905 = EDGE_LOOP('',(#906,#914,#921,#922)); +#906 = ORIENTED_EDGE('',*,*,#907,.F.); +#907 = EDGE_CURVE('',#908,#241,#910,.T.); +#908 = VERTEX_POINT('',#909); +#909 = CARTESIAN_POINT('',(-27.86158468659,3.2,-65.78852163128)); +#910 = LINE('',#911,#912); +#911 = CARTESIAN_POINT('',(-27.86158468659,3.,-65.78852163128)); +#912 = VECTOR('',#913,1.); +#913 = DIRECTION('',(0.,-1.,0.)); +#914 = ORIENTED_EDGE('',*,*,#915,.T.); +#915 = EDGE_CURVE('',#908,#859,#916,.T.); +#916 = CIRCLE('',#917,1.648528137424); +#917 = AXIS2_PLACEMENT_3D('',#918,#919,#920); +#918 = CARTESIAN_POINT('',(-26.67694849991,3.2,-64.64210018823)); +#919 = DIRECTION('',(0.,-1.,0.)); +#920 = DIRECTION('',(-1.,0.,0.)); +#921 = ORIENTED_EDGE('',*,*,#858,.T.); +#922 = ORIENTED_EDGE('',*,*,#248,.F.); +#923 = CYLINDRICAL_SURFACE('',#924,1.648528137424); +#924 = AXIS2_PLACEMENT_3D('',#925,#926,#927); +#925 = CARTESIAN_POINT('',(-26.67694849991,3.,-64.64210018823)); +#926 = DIRECTION('',(0.,-1.,0.)); +#927 = DIRECTION('',(-1.,0.,0.)); +#928 = ADVANCED_FACE('',(#929),#947,.F.); +#929 = FACE_BOUND('',#930,.F.); +#930 = EDGE_LOOP('',(#931,#932,#940,#946)); +#931 = ORIENTED_EDGE('',*,*,#892,.F.); +#932 = ORIENTED_EDGE('',*,*,#933,.F.); +#933 = EDGE_CURVE('',#934,#884,#936,.T.); +#934 = VERTEX_POINT('',#935); +#935 = CARTESIAN_POINT('',(-39.69176606491,3.2,-4.408923352436)); +#936 = LINE('',#937,#938); +#937 = CARTESIAN_POINT('',(-36.19319006079,3.2,-0.910347348321)); +#938 = VECTOR('',#939,1.); +#939 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#940 = ORIENTED_EDGE('',*,*,#941,.T.); +#941 = EDGE_CURVE('',#934,#199,#942,.T.); +#942 = LINE('',#943,#944); +#943 = CARTESIAN_POINT('',(-39.69176606491,3.,-4.408923352436)); +#944 = VECTOR('',#945,1.); +#945 = DIRECTION('',(0.,-1.,0.)); +#946 = ORIENTED_EDGE('',*,*,#198,.T.); +#947 = PLANE('',#948); +#948 = AXIS2_PLACEMENT_3D('',#949,#950,#951); +#949 = CARTESIAN_POINT('',(-38.27389874671,3.,-2.99105603424)); +#950 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#951 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#952 = ADVANCED_FACE('',(#953),#971,.F.); +#953 = FACE_BOUND('',#954,.F.); +#954 = EDGE_LOOP('',(#955,#963,#969,#970)); +#955 = ORIENTED_EDGE('',*,*,#956,.F.); +#956 = EDGE_CURVE('',#957,#232,#959,.T.); +#957 = VERTEX_POINT('',#958); +#958 = CARTESIAN_POINT('',(-29.08766684168,3.2,-64.52156932717)); +#959 = LINE('',#960,#961); +#960 = CARTESIAN_POINT('',(-29.08766684168,3.,-64.52156932717)); +#961 = VECTOR('',#962,1.); +#962 = DIRECTION('',(0.,-1.,0.)); +#963 = ORIENTED_EDGE('',*,*,#964,.F.); +#964 = EDGE_CURVE('',#908,#957,#965,.T.); +#965 = LINE('',#966,#967); +#966 = CARTESIAN_POINT('',(-29.44004200272,3.2,-64.15744811364)); +#967 = VECTOR('',#968,1.); +#968 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#969 = ORIENTED_EDGE('',*,*,#907,.T.); +#970 = ORIENTED_EDGE('',*,*,#240,.T.); +#971 = PLANE('',#972); +#972 = AXIS2_PLACEMENT_3D('',#973,#974,#975); +#973 = CARTESIAN_POINT('',(-28.47462576413,3.,-65.15504547923)); +#974 = DIRECTION('',(-0.718602345805,0.,-0.695421216677)); +#975 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#976 = ADVANCED_FACE('',(#977),#996,.F.); +#977 = FACE_BOUND('',#978,.F.); +#978 = EDGE_LOOP('',(#979,#980,#989,#995)); +#979 = ORIENTED_EDGE('',*,*,#941,.F.); +#980 = ORIENTED_EDGE('',*,*,#981,.T.); +#981 = EDGE_CURVE('',#934,#982,#984,.T.); +#982 = VERTEX_POINT('',#983); +#983 = CARTESIAN_POINT('',(-41.17904151244,3.2,-10.52828909594)); +#984 = CIRCLE('',#985,6.054044962965); +#985 = AXIS2_PLACEMENT_3D('',#986,#987,#988); +#986 = CARTESIAN_POINT('',(-35.41090981799,3.2,-8.689779599357)); +#987 = DIRECTION('',(0.,-1.,0.)); +#988 = DIRECTION('',(-1.,0.,0.)); +#989 = ORIENTED_EDGE('',*,*,#990,.T.); +#990 = EDGE_CURVE('',#982,#207,#991,.T.); +#991 = LINE('',#992,#993); +#992 = CARTESIAN_POINT('',(-41.17904151244,3.,-10.52828909594)); +#993 = VECTOR('',#994,1.); +#994 = DIRECTION('',(0.,-1.,0.)); +#995 = ORIENTED_EDGE('',*,*,#206,.F.); +#996 = CYLINDRICAL_SURFACE('',#997,6.054044962965); +#997 = AXIS2_PLACEMENT_3D('',#998,#999,#1000); +#998 = CARTESIAN_POINT('',(-35.41090981799,3.,-8.689779599357)); +#999 = DIRECTION('',(0.,-1.,0.)); +#1000 = DIRECTION('',(-1.,0.,0.)); +#1001 = ADVANCED_FACE('',(#1002),#1021,.F.); +#1002 = FACE_BOUND('',#1003,.F.); +#1003 = EDGE_LOOP('',(#1004,#1012,#1019,#1020)); +#1004 = ORIENTED_EDGE('',*,*,#1005,.F.); +#1005 = EDGE_CURVE('',#1006,#224,#1008,.T.); +#1006 = VERTEX_POINT('',#1007); +#1007 = CARTESIAN_POINT('',(-28.96712497021,3.2,-57.16864680227)); +#1008 = LINE('',#1009,#1010); +#1009 = CARTESIAN_POINT('',(-28.96712497021,3.,-57.16864680227)); +#1010 = VECTOR('',#1011,1.); +#1011 = DIRECTION('',(0.,-1.,0.)); +#1012 = ORIENTED_EDGE('',*,*,#1013,.T.); +#1013 = EDGE_CURVE('',#1006,#957,#1014,.T.); +#1014 = CIRCLE('',#1015,5.2); +#1015 = AXIS2_PLACEMENT_3D('',#1016,#1017,#1018); +#1016 = CARTESIAN_POINT('',(-25.35093464349,3.2,-60.90537900045)); +#1017 = DIRECTION('',(0.,-1.,0.)); +#1018 = DIRECTION('',(-1.,0.,0.)); +#1019 = ORIENTED_EDGE('',*,*,#956,.T.); +#1020 = ORIENTED_EDGE('',*,*,#231,.F.); +#1021 = CYLINDRICAL_SURFACE('',#1022,5.2); +#1022 = AXIS2_PLACEMENT_3D('',#1023,#1024,#1025); +#1023 = CARTESIAN_POINT('',(-25.35093464349,3.,-60.90537900045)); +#1024 = DIRECTION('',(0.,-1.,0.)); +#1025 = DIRECTION('',(-1.,0.,0.)); +#1026 = ADVANCED_FACE('',(#1027),#1045,.F.); +#1027 = FACE_BOUND('',#1028,.F.); +#1028 = EDGE_LOOP('',(#1029,#1030,#1038,#1044)); +#1029 = ORIENTED_EDGE('',*,*,#990,.F.); +#1030 = ORIENTED_EDGE('',*,*,#1031,.F.); +#1031 = EDGE_CURVE('',#1032,#982,#1034,.T.); +#1032 = VERTEX_POINT('',#1033); +#1033 = CARTESIAN_POINT('',(-26.93875323652,3.2,-55.20570756731)); +#1034 = LINE('',#1035,#1036); +#1035 = CARTESIAN_POINT('',(-32.39120436163,3.2,-38.09921113329)); +#1036 = VECTOR('',#1037,1.); +#1037 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#1038 = ORIENTED_EDGE('',*,*,#1039,.T.); +#1039 = EDGE_CURVE('',#1032,#216,#1040,.T.); +#1040 = LINE('',#1041,#1042); +#1041 = CARTESIAN_POINT('',(-26.93875323652,3.,-55.20570756731)); +#1042 = VECTOR('',#1043,1.); +#1043 = DIRECTION('',(0.,-1.,0.)); +#1044 = ORIENTED_EDGE('',*,*,#215,.T.); +#1045 = PLANE('',#1046); +#1046 = AXIS2_PLACEMENT_3D('',#1047,#1048,#1049); +#1047 = CARTESIAN_POINT('',(-34.04006158346,3.,-32.92609366041)); +#1048 = DIRECTION('',(-0.952773183837,0.,-0.30368282823)); +#1049 = DIRECTION('',(-0.30368282823,0.,0.952773183837)); +#1050 = ADVANCED_FACE('',(#1051),#1062,.F.); +#1051 = FACE_BOUND('',#1052,.F.); +#1052 = EDGE_LOOP('',(#1053,#1054,#1060,#1061)); +#1053 = ORIENTED_EDGE('',*,*,#1039,.F.); +#1054 = ORIENTED_EDGE('',*,*,#1055,.F.); +#1055 = EDGE_CURVE('',#1006,#1032,#1056,.T.); +#1056 = LINE('',#1057,#1058); +#1057 = CARTESIAN_POINT('',(-14.90185526362,3.2,-43.55710346492)); +#1058 = VECTOR('',#1059,1.); +#1059 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#1060 = ORIENTED_EDGE('',*,*,#1005,.T.); +#1061 = ORIENTED_EDGE('',*,*,#223,.T.); +#1062 = PLANE('',#1063); +#1063 = AXIS2_PLACEMENT_3D('',#1064,#1065,#1066); +#1064 = CARTESIAN_POINT('',(-27.90836811563,3.,-56.14404399617)); +#1065 = DIRECTION('',(-0.695421216677,0.,0.718602345805)); +#1066 = DIRECTION('',(0.718602345805,0.,0.695421216677)); +#1067 = ADVANCED_FACE('',(#1068),#1086,.T.); +#1068 = FACE_BOUND('',#1069,.T.); +#1069 = EDGE_LOOP('',(#1070,#1071,#1072,#1073,#1074,#1075,#1076,#1077, + #1078,#1079,#1080,#1081,#1082,#1083,#1084,#1085)); +#1070 = ORIENTED_EDGE('',*,*,#304,.F.); +#1071 = ORIENTED_EDGE('',*,*,#668,.F.); +#1072 = ORIENTED_EDGE('',*,*,#651,.F.); +#1073 = ORIENTED_EDGE('',*,*,#627,.F.); +#1074 = ORIENTED_EDGE('',*,*,#603,.F.); +#1075 = ORIENTED_EDGE('',*,*,#572,.T.); +#1076 = ORIENTED_EDGE('',*,*,#554,.F.); +#1077 = ORIENTED_EDGE('',*,*,#523,.T.); +#1078 = ORIENTED_EDGE('',*,*,#505,.F.); +#1079 = ORIENTED_EDGE('',*,*,#474,.T.); +#1080 = ORIENTED_EDGE('',*,*,#450,.T.); +#1081 = ORIENTED_EDGE('',*,*,#432,.F.); +#1082 = ORIENTED_EDGE('',*,*,#401,.T.); +#1083 = ORIENTED_EDGE('',*,*,#383,.F.); +#1084 = ORIENTED_EDGE('',*,*,#352,.T.); +#1085 = ORIENTED_EDGE('',*,*,#335,.F.); +#1086 = PLANE('',#1087); +#1087 = AXIS2_PLACEMENT_3D('',#1088,#1089,#1090); +#1088 = CARTESIAN_POINT('',(-45.46495478095,20.8572529153, + -70.97315781796)); +#1089 = DIRECTION('',(0.,1.,0.)); +#1090 = DIRECTION('',(0.,0.,1.)); +#1091 = ADVANCED_FACE('',(#1092,#1142,#1153,#1171,#1205),#1216,.F.); +#1092 = FACE_BOUND('',#1093,.F.); +#1093 = EDGE_LOOP('',(#1094,#1104,#1112,#1120,#1128,#1136)); +#1094 = ORIENTED_EDGE('',*,*,#1095,.F.); +#1095 = EDGE_CURVE('',#1096,#1098,#1100,.T.); +#1096 = VERTEX_POINT('',#1097); +#1097 = CARTESIAN_POINT('',(16.626582997737,3.2,-8.940188245231)); +#1098 = VERTEX_POINT('',#1099); +#1099 = CARTESIAN_POINT('',(4.383041634064E-04,3.2,-8.903751615529)); +#1100 = LINE('',#1101,#1102); +#1101 = CARTESIAN_POINT('',(4.347099726942,3.2,-8.913277437397)); +#1102 = VECTOR('',#1103,1.); +#1103 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#1104 = ORIENTED_EDGE('',*,*,#1105,.F.); +#1105 = EDGE_CURVE('',#1106,#1096,#1108,.T.); +#1106 = VERTEX_POINT('',#1107); +#1107 = CARTESIAN_POINT('',(19.029295926024,3.2,-17.63009960955)); +#1108 = LINE('',#1109,#1110); +#1109 = CARTESIAN_POINT('',(19.849519003668,3.2,-20.59660707692)); +#1110 = VECTOR('',#1111,1.); +#1111 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#1112 = ORIENTED_EDGE('',*,*,#1113,.F.); +#1113 = EDGE_CURVE('',#1114,#1106,#1116,.T.); +#1114 = VERTEX_POINT('',#1115); +#1115 = CARTESIAN_POINT('',(22.059435554995,3.2,-3.734519760785)); +#1116 = LINE('',#1117,#1118); +#1117 = CARTESIAN_POINT('',(17.698510515043,3.2,-23.73280021221)); +#1118 = VECTOR('',#1119,1.); +#1119 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#1120 = ORIENTED_EDGE('',*,*,#1121,.F.); +#1121 = EDGE_CURVE('',#1122,#1114,#1124,.T.); +#1122 = VERTEX_POINT('',#1123); +#1123 = CARTESIAN_POINT('',(-21.72552223146,3.2,-3.734519760785)); +#1124 = LINE('',#1125,#1126); +#1125 = CARTESIAN_POINT('',(0.297084840953,3.2,-3.734519760785)); +#1126 = VECTOR('',#1127,1.); +#1127 = DIRECTION('',(1.,0.,0.)); +#1128 = ORIENTED_EDGE('',*,*,#1129,.F.); +#1129 = EDGE_CURVE('',#1130,#1122,#1132,.T.); +#1130 = VERTEX_POINT('',#1131); +#1131 = CARTESIAN_POINT('',(-21.72552223146,3.2,-8.903751135252)); +#1132 = LINE('',#1133,#1134); +#1133 = CARTESIAN_POINT('',(-21.72552223146,3.2,-19.83215600037)); +#1134 = VECTOR('',#1135,1.); +#1135 = DIRECTION('',(0.,0.,1.)); +#1136 = ORIENTED_EDGE('',*,*,#1137,.F.); +#1137 = EDGE_CURVE('',#1098,#1130,#1138,.T.); +#1138 = LINE('',#1139,#1140); +#1139 = CARTESIAN_POINT('',(-5.279852300138,3.2,-8.903751135252)); +#1140 = VECTOR('',#1141,1.); +#1141 = DIRECTION('',(-1.,0.,0.)); +#1142 = FACE_BOUND('',#1143,.F.); +#1143 = EDGE_LOOP('',(#1144)); +#1144 = ORIENTED_EDGE('',*,*,#1145,.F.); +#1145 = EDGE_CURVE('',#1146,#1146,#1148,.T.); +#1146 = VERTEX_POINT('',#1147); +#1147 = CARTESIAN_POINT('',(21.163799345768,3.2,-48.00951684793)); +#1148 = CIRCLE('',#1149,4.735522705283); +#1149 = AXIS2_PLACEMENT_3D('',#1150,#1151,#1152); +#1150 = CARTESIAN_POINT('',(16.428276640485,3.2,-48.00951684793)); +#1151 = DIRECTION('',(-0.,1.,0.)); +#1152 = DIRECTION('',(1.,0.,0.)); +#1153 = FACE_BOUND('',#1154,.F.); +#1154 = EDGE_LOOP('',(#1155,#1156,#1157,#1158,#1159,#1160,#1161,#1162, + #1163,#1164,#1165,#1166,#1167,#1168,#1169,#1170)); +#1155 = ORIENTED_EDGE('',*,*,#1031,.T.); +#1156 = ORIENTED_EDGE('',*,*,#981,.F.); +#1157 = ORIENTED_EDGE('',*,*,#933,.T.); +#1158 = ORIENTED_EDGE('',*,*,#883,.F.); +#1159 = ORIENTED_EDGE('',*,*,#835,.T.); +#1160 = ORIENTED_EDGE('',*,*,#796,.F.); +#1161 = ORIENTED_EDGE('',*,*,#738,.F.); +#1162 = ORIENTED_EDGE('',*,*,#700,.F.); +#1163 = ORIENTED_EDGE('',*,*,#724,.F.); +#1164 = ORIENTED_EDGE('',*,*,#762,.F.); +#1165 = ORIENTED_EDGE('',*,*,#820,.F.); +#1166 = ORIENTED_EDGE('',*,*,#866,.T.); +#1167 = ORIENTED_EDGE('',*,*,#915,.F.); +#1168 = ORIENTED_EDGE('',*,*,#964,.T.); +#1169 = ORIENTED_EDGE('',*,*,#1013,.F.); +#1170 = ORIENTED_EDGE('',*,*,#1055,.T.); +#1171 = FACE_BOUND('',#1172,.F.); +#1172 = EDGE_LOOP('',(#1173,#1183,#1191,#1199)); +#1173 = ORIENTED_EDGE('',*,*,#1174,.F.); +#1174 = EDGE_CURVE('',#1175,#1177,#1179,.T.); +#1175 = VERTEX_POINT('',#1176); +#1176 = CARTESIAN_POINT('',(5.809375885494,3.2,-13.06417917474)); +#1177 = VERTEX_POINT('',#1178); +#1178 = CARTESIAN_POINT('',(2.688069798796,3.2,-49.64588621989)); +#1179 = LINE('',#1180,#1181); +#1180 = CARTESIAN_POINT('',(4.914157977861,3.2,-23.55613296875)); +#1181 = VECTOR('',#1182,1.); +#1182 = DIRECTION('',(-8.501532861638E-02,0.,-0.996379643459)); +#1183 = ORIENTED_EDGE('',*,*,#1184,.F.); +#1184 = EDGE_CURVE('',#1185,#1175,#1187,.T.); +#1185 = VERTEX_POINT('',#1186); +#1186 = CARTESIAN_POINT('',(-5.809375885494,3.2,-13.06417917474)); +#1187 = LINE('',#1188,#1189); +#1188 = CARTESIAN_POINT('',(1.615747408047,3.2,-13.06417917474)); +#1189 = VECTOR('',#1190,1.); +#1190 = DIRECTION('',(1.,0.,-3.066574716487E-16)); +#1191 = ORIENTED_EDGE('',*,*,#1192,.F.); +#1192 = EDGE_CURVE('',#1193,#1185,#1195,.T.); +#1193 = VERTEX_POINT('',#1194); +#1194 = CARTESIAN_POINT('',(-2.688069798796,3.2,-49.64588621989)); +#1195 = LINE('',#1196,#1197); +#1196 = CARTESIAN_POINT('',(-4.890802006217,3.2,-23.82986495424)); +#1197 = VECTOR('',#1198,1.); +#1198 = DIRECTION('',(-8.501532861638E-02,0.,0.996379643459)); +#1199 = ORIENTED_EDGE('',*,*,#1200,.F.); +#1200 = EDGE_CURVE('',#1177,#1193,#1201,.T.); +#1201 = LINE('',#1202,#1203); +#1202 = CARTESIAN_POINT('',(1.615747408047,3.2,-49.64588621989)); +#1203 = VECTOR('',#1204,1.); +#1204 = DIRECTION('',(-1.,0.,0.)); +#1205 = FACE_BOUND('',#1206,.F.); +#1206 = EDGE_LOOP('',(#1207)); +#1207 = ORIENTED_EDGE('',*,*,#1208,.F.); +#1208 = EDGE_CURVE('',#1209,#1209,#1211,.T.); +#1209 = VERTEX_POINT('',#1210); +#1210 = CARTESIAN_POINT('',(-11.6927539352,3.2,-48.00951684793)); +#1211 = CIRCLE('',#1212,4.735522705283); +#1212 = AXIS2_PLACEMENT_3D('',#1213,#1214,#1215); +#1213 = CARTESIAN_POINT('',(-16.42827664048,3.2,-48.00951684793)); +#1214 = DIRECTION('',(-0.,1.,0.)); +#1215 = DIRECTION('',(1.,0.,0.)); +#1216 = PLANE('',#1217); +#1217 = AXIS2_PLACEMENT_3D('',#1218,#1219,#1220); +#1218 = CARTESIAN_POINT('',(0.403056515455,3.2,-33.34517655273)); +#1219 = DIRECTION('',(0.,1.,0.)); +#1220 = DIRECTION('',(1.,0.,0.)); +#1221 = ADVANCED_FACE('',(#1222),#1247,.T.); +#1222 = FACE_BOUND('',#1223,.T.); +#1223 = EDGE_LOOP('',(#1224,#1232,#1240,#1246)); +#1224 = ORIENTED_EDGE('',*,*,#1225,.F.); +#1225 = EDGE_CURVE('',#1226,#1096,#1228,.T.); +#1226 = VERTEX_POINT('',#1227); +#1227 = CARTESIAN_POINT('',(16.626582997737,0.,-8.940188245231)); +#1228 = LINE('',#1229,#1230); +#1229 = CARTESIAN_POINT('',(16.626582997737,-22.,-8.940188245231)); +#1230 = VECTOR('',#1231,1.); +#1231 = DIRECTION('',(0.,1.,0.)); +#1232 = ORIENTED_EDGE('',*,*,#1233,.T.); +#1233 = EDGE_CURVE('',#1226,#1234,#1236,.T.); +#1234 = VERTEX_POINT('',#1235); +#1235 = CARTESIAN_POINT('',(-5.329070518201E-15,0.,-8.903751135252)); +#1236 = LINE('',#1237,#1238); +#1237 = CARTESIAN_POINT('',(-18.54556462154,1.7763568394E-15, + -8.863107566442)); +#1238 = VECTOR('',#1239,1.); +#1239 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#1240 = ORIENTED_EDGE('',*,*,#1241,.T.); +#1241 = EDGE_CURVE('',#1234,#1098,#1242,.T.); +#1242 = LINE('',#1243,#1244); +#1243 = CARTESIAN_POINT('',(-5.329070518201E-15,-22.,-8.903751135252)); +#1244 = VECTOR('',#1245,1.); +#1245 = DIRECTION('',(0.,1.,0.)); +#1246 = ORIENTED_EDGE('',*,*,#1095,.F.); +#1247 = PLANE('',#1248); +#1248 = AXIS2_PLACEMENT_3D('',#1249,#1250,#1251); +#1249 = CARTESIAN_POINT('',(8.237581109188,-22.,-8.921803528809)); +#1250 = DIRECTION('',(-2.19152081707E-03,0.,-0.999997598615)); +#1251 = DIRECTION('',(-0.999997598615,0.,2.19152081707E-03)); +#1252 = ADVANCED_FACE('',(#1253),#1271,.T.); +#1253 = FACE_BOUND('',#1254,.T.); +#1254 = EDGE_LOOP('',(#1255,#1263,#1269,#1270)); +#1255 = ORIENTED_EDGE('',*,*,#1256,.F.); +#1256 = EDGE_CURVE('',#1257,#1106,#1259,.T.); +#1257 = VERTEX_POINT('',#1258); +#1258 = CARTESIAN_POINT('',(19.029295926024,0.,-17.63009960955)); +#1259 = LINE('',#1260,#1261); +#1260 = CARTESIAN_POINT('',(19.029295926024,-22.,-17.63009960955)); +#1261 = VECTOR('',#1262,1.); +#1262 = DIRECTION('',(0.,1.,0.)); +#1263 = ORIENTED_EDGE('',*,*,#1264,.T.); +#1264 = EDGE_CURVE('',#1257,#1226,#1265,.T.); +#1265 = LINE('',#1266,#1267); +#1266 = CARTESIAN_POINT('',(23.053273013696,0.,-32.18365022821)); +#1267 = VECTOR('',#1268,1.); +#1268 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#1269 = ORIENTED_EDGE('',*,*,#1225,.T.); +#1270 = ORIENTED_EDGE('',*,*,#1105,.F.); +#1271 = PLANE('',#1272); +#1272 = AXIS2_PLACEMENT_3D('',#1273,#1274,#1275); +#1273 = CARTESIAN_POINT('',(17.956031892536,-22.,-13.7484168618)); +#1274 = DIRECTION('',(-0.963836182336,0.,-0.26649542889)); +#1275 = DIRECTION('',(-0.26649542889,0.,0.963836182336)); +#1276 = ADVANCED_FACE('',(#1277),#1295,.T.); +#1277 = FACE_BOUND('',#1278,.T.); +#1278 = EDGE_LOOP('',(#1279,#1287,#1288,#1289)); +#1279 = ORIENTED_EDGE('',*,*,#1280,.T.); +#1280 = EDGE_CURVE('',#1281,#1257,#1283,.T.); +#1281 = VERTEX_POINT('',#1282); +#1282 = CARTESIAN_POINT('',(22.059435554995,0.,-3.734519760785)); +#1283 = LINE('',#1284,#1285); +#1284 = CARTESIAN_POINT('',(12.741012548745,1.7763568394E-15, + -46.46683800444)); +#1285 = VECTOR('',#1286,1.); +#1286 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#1287 = ORIENTED_EDGE('',*,*,#1256,.T.); +#1288 = ORIENTED_EDGE('',*,*,#1113,.F.); +#1289 = ORIENTED_EDGE('',*,*,#1290,.F.); +#1290 = EDGE_CURVE('',#1281,#1114,#1291,.T.); +#1291 = LINE('',#1292,#1293); +#1292 = CARTESIAN_POINT('',(22.059435554995,-22.,-3.734519760785)); +#1293 = VECTOR('',#1294,1.); +#1294 = DIRECTION('',(0.,1.,0.)); +#1295 = PLANE('',#1296); +#1296 = AXIS2_PLACEMENT_3D('',#1297,#1298,#1299); +#1297 = CARTESIAN_POINT('',(20.484588228021,-22.,-10.95643672209)); +#1298 = DIRECTION('',(0.977039526026,0.,-0.213058124893)); +#1299 = DIRECTION('',(-0.213058124893,0.,-0.977039526026)); +#1300 = ADVANCED_FACE('',(#1301),#1319,.T.); +#1301 = FACE_BOUND('',#1302,.T.); +#1302 = EDGE_LOOP('',(#1303,#1311,#1312,#1313)); +#1303 = ORIENTED_EDGE('',*,*,#1304,.T.); +#1304 = EDGE_CURVE('',#1305,#1281,#1307,.T.); +#1305 = VERTEX_POINT('',#1306); +#1306 = CARTESIAN_POINT('',(-21.72552223146,0.,-3.734519760785)); +#1307 = LINE('',#1308,#1309); +#1308 = CARTESIAN_POINT('',(-22.63692080725,0.,-3.734519760785)); +#1309 = VECTOR('',#1310,1.); +#1310 = DIRECTION('',(1.,0.,0.)); +#1311 = ORIENTED_EDGE('',*,*,#1290,.T.); +#1312 = ORIENTED_EDGE('',*,*,#1121,.F.); +#1313 = ORIENTED_EDGE('',*,*,#1314,.F.); +#1314 = EDGE_CURVE('',#1305,#1122,#1315,.T.); +#1315 = LINE('',#1316,#1317); +#1316 = CARTESIAN_POINT('',(-21.72552223146,-22.,-3.734519760785)); +#1317 = VECTOR('',#1318,1.); +#1318 = DIRECTION('',(0.,1.,0.)); +#1319 = PLANE('',#1320); +#1320 = AXIS2_PLACEMENT_3D('',#1321,#1322,#1323); +#1321 = CARTESIAN_POINT('',(0.19111316645,-22.,-3.734519760785)); +#1322 = DIRECTION('',(0.,0.,1.)); +#1323 = DIRECTION('',(0.,-1.,0.)); +#1324 = ADVANCED_FACE('',(#1325),#1343,.T.); +#1325 = FACE_BOUND('',#1326,.T.); +#1326 = EDGE_LOOP('',(#1327,#1335,#1336,#1337)); +#1327 = ORIENTED_EDGE('',*,*,#1328,.T.); +#1328 = EDGE_CURVE('',#1329,#1305,#1331,.T.); +#1329 = VERTEX_POINT('',#1330); +#1330 = CARTESIAN_POINT('',(-21.72552223146,0.,-8.903751135252)); +#1331 = LINE('',#1332,#1333); +#1332 = CARTESIAN_POINT('',(-21.72552223146,0.,-38.64614663299)); +#1333 = VECTOR('',#1334,1.); +#1334 = DIRECTION('',(0.,0.,1.)); +#1335 = ORIENTED_EDGE('',*,*,#1314,.T.); +#1336 = ORIENTED_EDGE('',*,*,#1129,.F.); +#1337 = ORIENTED_EDGE('',*,*,#1338,.F.); +#1338 = EDGE_CURVE('',#1329,#1130,#1339,.T.); +#1339 = LINE('',#1340,#1341); +#1340 = CARTESIAN_POINT('',(-21.72552223146,-22.,-8.903751135252)); +#1341 = VECTOR('',#1342,1.); +#1342 = DIRECTION('',(0.,1.,0.)); +#1343 = PLANE('',#1344); +#1344 = AXIS2_PLACEMENT_3D('',#1345,#1346,#1347); +#1345 = CARTESIAN_POINT('',(-21.72552223146,-22.,-6.319135448019)); +#1346 = DIRECTION('',(-1.,0.,0.)); +#1347 = DIRECTION('',(0.,1.,0.)); +#1348 = ADVANCED_FACE('',(#1349),#1360,.T.); +#1349 = FACE_BOUND('',#1350,.T.); +#1350 = EDGE_LOOP('',(#1351,#1357,#1358,#1359)); +#1351 = ORIENTED_EDGE('',*,*,#1352,.T.); +#1352 = EDGE_CURVE('',#1234,#1329,#1353,.T.); +#1353 = LINE('',#1354,#1355); +#1354 = CARTESIAN_POINT('',(-28.21385794834,0.,-8.903751135252)); +#1355 = VECTOR('',#1356,1.); +#1356 = DIRECTION('',(-1.,0.,0.)); +#1357 = ORIENTED_EDGE('',*,*,#1338,.T.); +#1358 = ORIENTED_EDGE('',*,*,#1137,.F.); +#1359 = ORIENTED_EDGE('',*,*,#1241,.F.); +#1360 = PLANE('',#1361); +#1361 = AXIS2_PLACEMENT_3D('',#1362,#1363,#1364); +#1362 = CARTESIAN_POINT('',(-10.96276111573,-22.,-8.903751135252)); +#1363 = DIRECTION('',(0.,0.,-1.)); +#1364 = DIRECTION('',(0.,1.,0.)); +#1365 = ADVANCED_FACE('',(#1366),#1385,.T.); +#1366 = FACE_BOUND('',#1367,.T.); +#1367 = EDGE_LOOP('',(#1368,#1377,#1383,#1384)); +#1368 = ORIENTED_EDGE('',*,*,#1369,.T.); +#1369 = EDGE_CURVE('',#1370,#1370,#1372,.T.); +#1370 = VERTEX_POINT('',#1371); +#1371 = CARTESIAN_POINT('',(21.163799345768,0.,-48.00951684793)); +#1372 = CIRCLE('',#1373,4.735522705283); +#1373 = AXIS2_PLACEMENT_3D('',#1374,#1375,#1376); +#1374 = CARTESIAN_POINT('',(16.428276640485,0.,-48.00951684793)); +#1375 = DIRECTION('',(-0.,1.,0.)); +#1376 = DIRECTION('',(1.,0.,0.)); +#1377 = ORIENTED_EDGE('',*,*,#1378,.T.); +#1378 = EDGE_CURVE('',#1370,#1146,#1379,.T.); +#1379 = LINE('',#1380,#1381); +#1380 = CARTESIAN_POINT('',(21.163799345768,-22.,-48.00951684793)); +#1381 = VECTOR('',#1382,1.); +#1382 = DIRECTION('',(0.,1.,0.)); +#1383 = ORIENTED_EDGE('',*,*,#1145,.F.); +#1384 = ORIENTED_EDGE('',*,*,#1378,.F.); +#1385 = CYLINDRICAL_SURFACE('',#1386,4.735522705283); +#1386 = AXIS2_PLACEMENT_3D('',#1387,#1388,#1389); +#1387 = CARTESIAN_POINT('',(16.428276640485,-22.,-48.00951684793)); +#1388 = DIRECTION('',(0.,1.,0.)); +#1389 = DIRECTION('',(1.,0.,0.)); +#1390 = ADVANCED_FACE('',(#1391),#1416,.F.); +#1391 = FACE_BOUND('',#1392,.F.); +#1392 = EDGE_LOOP('',(#1393,#1403,#1409,#1410)); +#1393 = ORIENTED_EDGE('',*,*,#1394,.T.); +#1394 = EDGE_CURVE('',#1395,#1397,#1399,.T.); +#1395 = VERTEX_POINT('',#1396); +#1396 = CARTESIAN_POINT('',(1.480297366167E-15,11.242400581089, + -46.71869179633)); +#1397 = VERTEX_POINT('',#1398); +#1398 = CARTESIAN_POINT('',(3.256654205567E-15,17.8572529153, + -18.39898295202)); +#1399 = LINE('',#1400,#1401); +#1400 = CARTESIAN_POINT('',(2.6645352591E-15,18.133069549222, + -17.21814831317)); +#1401 = VECTOR('',#1402,1.); +#1402 = DIRECTION('',(5.275122655165E-17,0.227455280238,0.97378852709)); +#1403 = ORIENTED_EDGE('',*,*,#1404,.F.); +#1404 = EDGE_CURVE('',#1175,#1397,#1405,.T.); +#1405 = LINE('',#1406,#1407); +#1406 = CARTESIAN_POINT('',(5.649679875255,3.602918464526, + -13.21082950266)); +#1407 = VECTOR('',#1408,1.); +#1408 = DIRECTION('',(-0.349023821871,0.880598971639,-0.320511814002)); +#1409 = ORIENTED_EDGE('',*,*,#1174,.T.); +#1410 = ORIENTED_EDGE('',*,*,#1411,.T.); +#1411 = EDGE_CURVE('',#1177,#1395,#1412,.T.); +#1412 = LINE('',#1413,#1414); +#1413 = CARTESIAN_POINT('',(1.103762571829,7.940067898719, + -47.92064259636)); +#1414 = VECTOR('',#1415,1.); +#1415 = DIRECTION('',(-0.299648208284,0.896513522642,0.326304236859)); +#1416 = PLANE('',#1417); +#1417 = AXIS2_PLACEMENT_3D('',#1418,#1419,#1420); +#1418 = CARTESIAN_POINT('',(5.823691883056,3.068404028665, + -13.45978839622)); +#1419 = DIRECTION('',(0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#1420 = DIRECTION('',(-0.340781908463,0.939692620786,2.907695487825E-02) + ); +#1421 = ADVANCED_FACE('',(#1422),#1432,.F.); +#1422 = FACE_BOUND('',#1423,.F.); +#1423 = EDGE_LOOP('',(#1424,#1425,#1431)); +#1424 = ORIENTED_EDGE('',*,*,#1404,.T.); +#1425 = ORIENTED_EDGE('',*,*,#1426,.T.); +#1426 = EDGE_CURVE('',#1397,#1185,#1427,.T.); +#1427 = LINE('',#1428,#1429); +#1428 = CARTESIAN_POINT('',(-5.275833888477,4.546144602338, + -13.55413574101)); +#1429 = VECTOR('',#1430,1.); +#1430 = DIRECTION('',(-0.349023821871,-0.880598971639,0.320511814002)); +#1431 = ORIENTED_EDGE('',*,*,#1184,.T.); +#1432 = PLANE('',#1433); +#1433 = AXIS2_PLACEMENT_3D('',#1434,#1435,#1436); +#1434 = CARTESIAN_POINT('',(2.828438300639,3.068404028665, + -13.01628215822)); +#1435 = DIRECTION('',(2.88163763217E-16,0.342020143326,0.939692620786)); +#1436 = DIRECTION('',(-1.048830324052E-16,0.939692620786,-0.342020143326 + )); +#1437 = ADVANCED_FACE('',(#1438),#1449,.F.); +#1438 = FACE_BOUND('',#1439,.F.); +#1439 = EDGE_LOOP('',(#1440,#1441,#1442,#1443)); +#1440 = ORIENTED_EDGE('',*,*,#1192,.T.); +#1441 = ORIENTED_EDGE('',*,*,#1426,.F.); +#1442 = ORIENTED_EDGE('',*,*,#1394,.F.); +#1443 = ORIENTED_EDGE('',*,*,#1444,.F.); +#1444 = EDGE_CURVE('',#1193,#1395,#1445,.T.); +#1445 = LINE('',#1446,#1447); +#1446 = CARTESIAN_POINT('',(-0.871390517001,8.635298785064, + -47.66759924779)); +#1447 = VECTOR('',#1448,1.); +#1448 = DIRECTION('',(0.299648208284,0.896513522642,0.326304236859)); +#1449 = PLANE('',#1450); +#1450 = AXIS2_PLACEMENT_3D('',#1451,#1452,#1453); +#1451 = CARTESIAN_POINT('',(-5.782806207227,3.068404028665, + -13.93896851312)); +#1452 = DIRECTION('',(-0.93629059846,0.342020143326,-7.988827695448E-02) + ); +#1453 = DIRECTION('',(0.340781908463,0.939692620786,2.907695487825E-02) + ); +#1454 = ADVANCED_FACE('',(#1455),#1460,.F.); +#1455 = FACE_BOUND('',#1456,.F.); +#1456 = EDGE_LOOP('',(#1457,#1458,#1459)); +#1457 = ORIENTED_EDGE('',*,*,#1444,.T.); +#1458 = ORIENTED_EDGE('',*,*,#1411,.F.); +#1459 = ORIENTED_EDGE('',*,*,#1200,.T.); +#1460 = PLANE('',#1461); +#1461 = AXIS2_PLACEMENT_3D('',#1462,#1463,#1464); +#1462 = CARTESIAN_POINT('',(2.828438300639,3.068404028665, + -49.69378323641)); +#1463 = DIRECTION('',(0.,0.342020143326,-0.939692620786)); +#1464 = DIRECTION('',(0.,0.939692620786,0.342020143326)); +#1465 = ADVANCED_FACE('',(#1466),#1485,.T.); +#1466 = FACE_BOUND('',#1467,.T.); +#1467 = EDGE_LOOP('',(#1468,#1477,#1483,#1484)); +#1468 = ORIENTED_EDGE('',*,*,#1469,.T.); +#1469 = EDGE_CURVE('',#1470,#1470,#1472,.T.); +#1470 = VERTEX_POINT('',#1471); +#1471 = CARTESIAN_POINT('',(-11.6927539352,0.,-48.00951684793)); +#1472 = CIRCLE('',#1473,4.735522705283); +#1473 = AXIS2_PLACEMENT_3D('',#1474,#1475,#1476); +#1474 = CARTESIAN_POINT('',(-16.42827664048,0.,-48.00951684793)); +#1475 = DIRECTION('',(-0.,1.,0.)); +#1476 = DIRECTION('',(1.,0.,0.)); +#1477 = ORIENTED_EDGE('',*,*,#1478,.T.); +#1478 = EDGE_CURVE('',#1470,#1209,#1479,.T.); +#1479 = LINE('',#1480,#1481); +#1480 = CARTESIAN_POINT('',(-11.6927539352,-22.,-48.00951684793)); +#1481 = VECTOR('',#1482,1.); +#1482 = DIRECTION('',(0.,1.,0.)); +#1483 = ORIENTED_EDGE('',*,*,#1208,.F.); +#1484 = ORIENTED_EDGE('',*,*,#1478,.F.); +#1485 = CYLINDRICAL_SURFACE('',#1486,4.735522705283); +#1486 = AXIS2_PLACEMENT_3D('',#1487,#1488,#1489); +#1487 = CARTESIAN_POINT('',(-16.42827664048,-22.,-48.00951684793)); +#1488 = DIRECTION('',(0.,1.,0.)); +#1489 = DIRECTION('',(1.,0.,0.)); +#1490 = ADVANCED_FACE('',(#1491),#1499,.F.); +#1491 = FACE_BOUND('',#1492,.F.); +#1492 = EDGE_LOOP('',(#1493,#1494,#1495,#1496,#1497,#1498)); +#1493 = ORIENTED_EDGE('',*,*,#1264,.T.); +#1494 = ORIENTED_EDGE('',*,*,#1233,.T.); +#1495 = ORIENTED_EDGE('',*,*,#1352,.T.); +#1496 = ORIENTED_EDGE('',*,*,#1328,.T.); +#1497 = ORIENTED_EDGE('',*,*,#1304,.T.); +#1498 = ORIENTED_EDGE('',*,*,#1280,.T.); +#1499 = PLANE('',#1500); +#1500 = AXIS2_PLACEMENT_3D('',#1501,#1502,#1503); +#1501 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1502 = DIRECTION('',(0.,1.,0.)); +#1503 = DIRECTION('',(0.,0.,1.)); +#1504 = ADVANCED_FACE('',(#1505),#1508,.F.); +#1505 = FACE_BOUND('',#1506,.F.); +#1506 = EDGE_LOOP('',(#1507)); +#1507 = ORIENTED_EDGE('',*,*,#1369,.T.); +#1508 = PLANE('',#1509); +#1509 = AXIS2_PLACEMENT_3D('',#1510,#1511,#1512); +#1510 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1511 = DIRECTION('',(0.,1.,0.)); +#1512 = DIRECTION('',(0.,0.,1.)); +#1513 = ADVANCED_FACE('',(#1514),#1517,.F.); +#1514 = FACE_BOUND('',#1515,.F.); +#1515 = EDGE_LOOP('',(#1516)); +#1516 = ORIENTED_EDGE('',*,*,#1469,.T.); +#1517 = PLANE('',#1518); +#1518 = AXIS2_PLACEMENT_3D('',#1519,#1520,#1521); +#1519 = CARTESIAN_POINT('',(-45.46495478095,0.,-70.97315781796)); +#1520 = DIRECTION('',(0.,1.,0.)); +#1521 = DIRECTION('',(0.,0.,1.)); +#1522 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1526)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1523,#1524,#1525)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1523 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1524 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1525 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1526 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-06),#1523, + 'distance_accuracy_value','confusion accuracy'); +#1527 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +ENDSEC; +END-ISO-10303-21; diff --git a/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.stl b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.stl new file mode 100644 index 0000000000..5c1f741349 Binary files /dev/null and b/docs/CAD/design/mate-connectors/BearConnector_Female_Trimmed_wall.stl differ diff --git a/docs/CAD/design/mate-connectors/DESIGN_MATE_CONNECTORS.md b/docs/CAD/design/mate-connectors/DESIGN_MATE_CONNECTORS.md new file mode 100644 index 0000000000..fe1a7a5fee --- /dev/null +++ b/docs/CAD/design/mate-connectors/DESIGN_MATE_CONNECTORS.md @@ -0,0 +1,922 @@ +# Mate connectors: aligning with the mainstream CAD systems + +Research date: 2026-08-05. Written against `orca_cad` / `Snapmaker` at the M8 state +(`CadDocument.{hpp,cpp}`, `apply_mate`, `datum_frame`, the `Mate` card in `DesignPanel.cpp`). + +**Brief:** align with the mate-connector concept as the main CAD programs actually implement it, +and be simple, unequivocal, unconfusing. Alignment is the organising principle of this document: +every recommendation is labelled either **[INDUSTRY]** — do what they all do — or **[DEVIATION]** — +we would be departing, here is why and what it costs. + +--- + +## 0. The answer in ten lines + +1. Seven systems surveyed. **Five of the seven use the same model**; two are the old world. +2. The model: a joint is defined between **two local coordinate frames**, one rigidly attached to + each part, plus **one type** naming which DOF stay free. +3. The frame is called a mate connector (Onshape), a **joint origin** (Fusion, Inventor), a joint + connector (FreeCAD 1.0). Same object, three names. +4. **Every one of them expresses every DOF about the frame's Z axis.** One axis, one convention. +5. **Five types appear in every frame-based system with identical names and identical DOF**: + Fastened/Rigid, Revolute, Slider, Cylindrical, Planar. Ball is in four of five. +6. That is not fashion — those are the classical **lower kinematic pairs**. The vocabulary converged + because the mechanics converged. +7. Our kernel is already on the right side of the line: frame-based, five types, Z-relative, + superimpose-then-relax. **The architecture needs no revisiting.** +8. Where we are out of step: connectors that are not attached to a body; an origin that can only be + a face centroid; no live preview of the two Z arrows; a mate card of abstract dropdowns. +9. Where we would knowingly deviate: refusing a second mate per body (no vendor does this — it is + forced on us by having no solver) and possibly inverting the default mate direction. +10. Biggest single win for the stated goal, and it costs no kernel work: **draw both frames and + ghost the result before Confirm.** The convention stops needing to be remembered. + +--- + +## 1. The two families + +**Constraint-based ("old CAD").** The user states pairwise *geometric relations* between raw +topology — this face coincident with that face, this axis concentric with that axis, this plane +parallel at 12 mm. Each relation removes some DOF; a numerical solver satisfies all of them at once. +Fully positioning one part typically takes **three or more mates**, and the set can be +over-constrained, under-constrained, or satisfiable in several configurations. + +**Frame-based ("mate connectors").** The user places a *local coordinate system* on each part and +states **one** relation between the two frames. The relation is not "these surfaces touch" but +"these frames coincide, except for the following DOF, which stay free." + +Onshape's help page opens by drawing exactly this line: + +> *"Mates in Onshape are different than mates in old CAD systems. Many assemblies require only one +> Onshape Mate between any two instances, as the movement (degrees of freedom) between those two +> instances is embedded in the Mate."* + +The frame-based model won for three reasons, all of which matter here: + +- **One mate per pair.** No mental arithmetic about which three constraints add up to a hinge. +- **The DOF are declared, not deduced.** A revolute mate *is* one rotation. You do not discover the + remaining freedom by dragging. +- **It needs no simultaneous solver for the common case.** Frame-to-frame alignment is a matrix + composition — precisely what `apply_mate` already does. + +> **Caveat — several vendors ship both, and "align with X" is therefore ambiguous.** **Inventor** +> kept its legacy constraints *and* added frame-based Joints in 2012; many Inventor users still build +> assemblies entirely with the old constraint stack. **Creo** has placement constraints *and* +> Mechanism connections. **FreeCAD** had constraint-based Assembly2/3 add-ons before the frame-based +> Assembly workbench shipped in 1.0. So copying "what Inventor does" means copying **one of two +> coexisting workflows**. **Onshape and Fusion 360 are the only pure frame-based examples**, and they +> are the ones to weight most heavily when the evidence conflicts. + +--- + +## 2. Field survey — seven systems + +| | Onshape | Fusion 360 | Inventor | FreeCAD 1.0 | Creo | Siemens NX | SOLIDWORKS | +|---|---|---|---|---|---|---|---| +| **Family** | Frame | Frame | Frame (+ legacy constraints) | Frame (+ legacy add-ons) | Both | Constraint | Constraint | +| **Frame object** | Mate connector | Joint origin | Joint origin | Joint connector (`Placement1/2`) | CSYS on `Weld`/`6DOF` | — | — (nearest: **mate reference**) | +| **Where it lives** | Part Studio **and** Assembly; in the feature list | Component, inside the joint | Component / inside the joint | Inside the Joint object | Part | — | Part (up to 3 named entities) | +| **Origin placement** | Inferred family on hover; `Shift` locks | Discrete **snap points**; `Ctrl` cycles | Snap points + explicit origins | Inferred, previewed on hover | Picked CSYS | Picked entities | Picked entities | +| **Orientation control** | Primary axis (Z) + secondary axis; flip + 90° reorient | Flip, angle, offsets | Flip, angle, offsets | `Placement1/2` + `Offset1/2` | CSYS + offset | — | — | +| **Type inference** | No — explicit | No — explicit | **Yes — "Automatic"** from picked geometry | No | No | No | Partial (mate reference type) | +| **Solver** | Yes, simultaneous — *"order won't affect a Mate"* | Yes | Yes | Yes (Ondsel) | Yes | Yes | Yes | +| **Reuse across instances** | **Yes** — a Part Studio connector exists on every instance | Weak | Partial | Per-joint | Interfaces | Product Interface | Mate references auto-mate on insert | + +Three observations that shape everything below. + +- **Every frame-based system reduced the type list by an order of magnitude** relative to SOLIDWORKS + (7–13 vs ~25) and lost nothing. That is not simplification-by-omission; it is what happens when the + DOF live in the mate instead of being assembled from constraints. +- **Every one of them defines its types relative to a single axis.** Slider translates along Z, + Revolute rotates about Z, Cylindrical does both, Planar translates in X/Y and rotates about Z. + One axis carries the whole vocabulary. +- **Onshape alone treats the connector as a first-class, reusable, named object** — and that is also + where its worst usability complaints come from (§4). + +--- + +## 3. The type vocabulary — cross-system table + +DOF = degrees of freedom left **free**, stated about/along the connector Z. + +| DOF | Onshape | Fusion 360 | Inventor | FreeCAD 1.0 | Creo | **Ours today** | +|---|---|---|---|---|---|---| +| 0 | Fastened | Rigid | Rigid | Fixed | Rigid / Weld | **Fastened** ✅ | +| 1 — rot Z | Revolute | Revolute | Rotational | Revolute | Pin | **Revolute** ✅ | +| 1 — trans Z | Slider | Slider | Slider | Slider | Slider | **Slider** ✅ | +| 2 — rot + trans Z | Cylindrical | Cylindrical | Cylindrical | Cylindrical | Cylinder | **Cylindrical** ✅ | +| 3 — trans XY + rot Z | Planar | Planar | Planar | *(Parallel+Distance)* | Planar | **Planar** ✅ | +| 3 — rot XYZ | Ball | Ball | Ball | Ball | Ball | — | +| 2 — different axes | Pin slot | Pin-Slot | — | — | Slot / Bearing | — | +| 1 — coupled | Screw | — | — | Screw | — | — | +| 4 | Parallel | — | — | Parallel | — | — | +| other | Tangent, Width, Group | As-built | Automatic | Perpendicular, Angle, Distance, Gears, Belt, RackPinion | General, 6DOF | — | + +**Five types appear in every frame-based system, with the same name and the same DOF.** Those five +are the industry's common denominator, and they are exactly `mate_kind` 0–4 as already implemented. +Ball is in four of five. Everything past that is a long tail no two vendors agree on. + +### Why the convergence is a fact, not a fashion + +A rigid-body placement is an element of SE(3). A mate leaves some set of relative motions free. For +the mate to behave the same throughout its range — for a hinge to be a hinge at every angle — that +free set must be **closed under composition**: two allowed motions must compose to an allowed motion. +A closed set of motions is a **subgroup** of SE(3). + +The subgroups corresponding to physical surface-on-surface contact are the classical **six lower +pairs** (Reuleaux): + +| Pair | Free motion relative to Z | DOF | +|---|---|---| +| Revolute (R) | rotation about Z | 1 | +| Prismatic / slider (P) | translation along Z | 1 | +| Helical / screw (H) | coupled rotation + translation | 1 | +| Cylindrical (C) | rotation about **and** translation along Z | 2 | +| Planar (E/G) | translation in X,Y + rotation about Z | 3 | +| Spherical / ball (S) | rotation about X, Y, Z | 3 | + +Plus the two trivial ends: identity (0 DOF — **fastened**) and all of SE(3) (6 DOF — floating, i.e. +no mate). Hervé's Lie-subgroup analysis of the displacement group is the standard reference for +treating these as the algebraic building blocks of mechanism synthesis. + +**Consequence.** Anything outside this table is either (a) a *composition* needing a solver, or +(b) not a joint at all but a *measurement*: + +- Onshape's **Parallel** (4 DOF), **Tangent**, **Width**, **Pin slot**, and FreeCAD's **Distance / + Angle / Perpendicular** are constraints, not pairs — their free set is not a subgroup, so they only + make sense alongside a simultaneous solver. +- **Gear, Belt, Rack-and-pinion** are *relations between two mates*, a different object entirely. +- **Screw (H)** is a legitimate lower pair but needs a pitch parameter and is rare in printed parts. + +So the vendors' shared five, the lower pairs, and our `mate_kind` 0–4 are the same list arrived at +three ways. **[INDUSTRY] Stop looking for missing types and spend the budget on the connector.** + +--- + +## 4. What they all agree on — adopt verbatim + +Deviating from any of these makes an experienced user's intuition *wrong*, which is the operational +definition of "confusing". + +**A1 [INDUSTRY] — The connector is a full right-handed frame.** +Origin + Z (primary) + X (secondary). Onshape and Fusion expose exactly these two axis controls and +nothing else. A point cannot express spin; an axis cannot express clocking. +*Status: we comply* — `DatumCoordSys` carries origin/x/y and derives Z. + +**A2 [INDUSTRY] — Z is the joint axis; every DOF is about or along Z.** +Revolute rotates about Z. Slider translates along Z. Planar's free plane is normal to Z. Offsets run +along Z. This single rule is what makes the system learnable: **one axis to look at, and its meaning +never changes.** +*Status: we comply* — `mate_offset` along A's z, `mate_angle` about A's z. + +**A3 [INDUSTRY] — Mating superimposes the two frames; the type then relaxes specific DOF.** +FreeCAD states it most plainly: *"the second connector is superimposed on the first connector by +default and may change its position according to the joint type."* Fastened is not a special case — +it is the base case with nothing relaxed. +*Status: we comply* — `T = M_A · Rz · Tz · F · M_B⁻¹`, looser kinds relaxing from there. + +**A4 [INDUSTRY] — The connector belongs to a part and moves with it.** +Onshape: a connector defined in a Part Studio *"is available for reuse on every instance of that part +in every assembly in which it is instanced."* It is part geometry, not assembly geometry. +*Status: **violated**.* `CoordSysType::PointWorld` is a bare world XYZ with `X = world X` and no +`coordsys_body`. Such a connector does not follow its part. See §6 G1. + +**A5 [INDUSTRY] — Selection order is meaningful and must be visible.** +One connector is the reference; the other is driven onto it. Onshape spells out that offsets are +measured *"from the second Mate connector selected to the first"*, and that reversing the order +flips the sign. +*Status: complied with in the data model* (`mate_cs_a` fixed, `mate_cs_b` moves) *but not in the UI* — +two dropdowns labelled A and B do not tell the user which part is about to jump. + +**A6 [INDUSTRY] — Flip and re-clock live in the mate dialog, always.** +Onshape: *"Click the arrow icon to flip the direction of the primary axis. Click the Reorient +secondary axis icon to rotate the secondary axis in 90-degree increments."* +*Status: partial.* We have `mate_flip` (Z reversal). We have `mate_angle` as a free number — strictly +more powerful than 90° steps, and much worse to *use*: the common case is "it came in a quarter turn +out", and typing 90 is a worse gesture than pressing a button. + +**A7 [INDUSTRY] — DOF are shown, not inferred by the user.** +Onshape animates each mate's remaining DOF on demand; Fusion and Inventor name the DOF in the type +list. Our dropdown text already does this in words ("free spin + axial slide"). Keep it. + +**A8 [INDUSTRY] — Free DOF are preserved from the current placement, not zeroed.** +Onshape: a Planar mate aligns the frames *"but they are not restricted to this location with respect +to their degrees of freedom."* +*Status: we comply* — and it must be *said*, because a Planar mate that leaves the part where it was +looks like a mate that did nothing. + +--- + +## 5. Where they diverge — who to copy, and why + +### D1 — Where the connector's origin comes from + +| | Behaviour | +|---|---| +| **Fusion 360** | Discrete **snap points** only: vertex, edge midpoint, face centre, arc centre. `Ctrl` cycles the candidates under the cursor. A circle icon denotes a vertex, a triangle a midpoint. "Between two faces" is a separate explicit option. | +| **Onshape** | Infers a *family* on hover — centroid, every vertex, every edge midpoint, every arc centre, the centroids of interior regions (holes, slots), and the virtual sharps of conical faces. `Shift` locks the current candidate. | +| **Inventor** | Snap points, plus explicit joint origins for awkward cases. | +| **FreeCAD 1.0** | Hovering previews where the connector will land before you commit. | +| **Ours** | Always the **face centroid**. No alternative exists. | + +Onshape's richness has a cost its own documentation admits: *"The suggested locations are based on +the underlying geometry of the part and changing the geometry will change the location of the Mate. +This can be undesirable in certain situations."* On the forum this shows up as connectors that move +or break on edit — the classic topological-naming failure. Fusion's discrete set is poorer and far +more predictable. + +> **[INDUSTRY] Copy Fusion's candidate *set*.** A small, closed, enumerable set — **face centroid, +> vertex, edge midpoint, arc/circle centre** — each drawn before commit, with the card naming which is +> in use ("Origin: edge midpoint"). This is our largest expressiveness gap: a face centroid alone +> cannot place a hinge pin on a corner boss. It is also the one place where copying the *simpler* +> vendor is clearly right. +> +> **Open sub-choice — how the candidate is chosen.** Three options, in increasing order of magic: +> (1) **explicit dropdown** in the card after picking the face — no hover behaviour at all; +> (2) **Fusion's `Ctrl` cycling** through candidates under the cursor; (3) **Onshape's hover +> inference**. Kimi's independent review argued for (1) on the grounds that hover is exactly where +> both vendors' instability complaints originate, and that a dropdown gets ~90% of the expressiveness +> with none of the hover-guess debugging. That is a fair reading and (1) is the cheapest to build and +> the easiest to make unequivocal. **Recommendation: build (1) first; if hover is added later, let it +> *pre-fill the dropdown* rather than silently create an implicit connector** — which also keeps R2 +> (one kind of connector) intact. + +### D2 — Explicit type, or inferred from the geometry? + +Inventor is the only surveyed system that infers: *"Rotational is selected if the two selected +origins are circular. Cylindrical if the two selected origins are points on a cylinder. Ball if +points on a sphere. Rigid for all other origin selections."* Onshape and Fusion require an explicit +choice. + +> **[INDUSTRY, Inventor] Do both, in Inventor's order.** Infer a *default* type from what was picked, +> then show it in an editable control. Inference is what makes the tool feel like it understands the +> geometry; the visible, editable result is what keeps it unequivocal. Pure inference with no visible +> type is the confusing option; a pure dropdown with no default is the tedious one. This also fits +> the Design tab's geometry-first charter exactly: point at a bore, get Revolute offered. + +### D3 — How the Z-direction ambiguity is resolved + +This is the specific failure the brief is aimed at. A former IT trainer stated it precisely on the +Onshape forum: + +> *"There is always the risk that users will build their own conceptual models of how software works +> which may not match the designer's concept. The result is usually a poor user experience and many +> mistakes… for a good (say) Fixed mate to occur do the Z axes of the two mates have to be pointing +> in the same direction… Alternatively, should they be facing each other?"* + +He is asking the right question and **no vendor's documentation answers it.** Onshape's own advice — +*"if the behavior is not what you expected, try flipping the primary and/or secondary axis"* — is +trial and error. This is a gap in the industry, not a convention to copy. + +> **[INDUSTRY, method] Resolve it with live preview, not documentation.** FreeCAD previews the +> connector on hover; Onshape and Fusion both draw the frames. Draw **both** Z arrows the moment the +> second connector is picked, and ghost the resulting placement *before* Confirm. The convention then +> never has to be remembered because it is on screen. +> +> **[DEVIATION, optional] Name the two cases in the user's words** rather than in axis-speak: +> "the two faces come together" vs "the axes run the same way". No surveyed vendor does this — they +> all ship a flip arrow. It is a small, low-risk improvement on the state of the art, and it is +> separable from the default-direction question in §8 D1. + +### D4 — Named, reusable connectors on the part + +Onshape: connectors created in the Part Studio are reused on every instance in every assembly. +SOLIDWORKS' **mate reference** reaches the same end by another route: up to three named entities +(primary/secondary/tertiary) baked into the part so it auto-mates on drag-and-drop — and a *named* +mate reference seeks out a matching name on insertion. That naming trick is how a library of +fasteners assembles itself. + +> **[INDUSTRY] Out of scope now, but do not preclude it.** Give connectors a stable, user-visible +> name at creation. One string today; expensive to add once documents exist in the wild. + +--- + +## 6. Confusion catalogue + +Documented ways real implementations confuse people. Each is a requirement in disguise. + +**C1 — Which way does Z point?** See D3. If a user has to ask once, they will mis-predict a hundred +times. + +**C2 — The roll is unspecified.** Aligning Z leaves one rotation about Z undetermined. Something must +pin it, and if that something is world-derived, the frame does not rotate with its part. **This +codebase shipped exactly this bug** (`en4`): a face-only connector took Z from the face +normal but X from `coordsys_x_hint`, a world constant, so Fastened and Slider claimed to lock an +orientation the frame could not see. Fixed 2026-07-26 by deriving X from the face's own first usable +edge — but note the fix's own caveat: *"replaying an older document whose face-only connector fed a +mate can now place that body differently."* Roll conventions are load-bearing, and changing one is a +document-format change. + +**C3 — The origin drifts.** See D1. + +**C4 — Implicit and explicit connectors are not the same thing.** On the Onshape forum, implicit +connectors are reported to change their query structure when a feature is edited and re-accepted, and +are unusable in places explicit ones work. Two things called by one name that behave differently is a +permanent tax. + +**C5 — Which part moves?** A frame alignment is asymmetric. If the UI does not say which frame is +driven, the user finds out by watching the wrong part jump. + +**C6 — Which direction is a positive offset?** Onshape measures *"from the second Mate connector +selected to the first"* — the sign depends on pick order, and swapping the picks flips it. Documented +behaviour, documented surprise. + +**C7 — One intent, several mates.** The SOLIDWORKS failure: expressing "this shaft is in this hole, +resting on this shoulder" as three constraints, then discovering the solver picked the mirror +configuration. Frame-based systems fix this by construction; the requirement is not to reintroduce it. + +**C8 — Degenerate frames.** A circular face has no usable in-plane edge direction; a cylinder seam +projects to nothing; a picked edge parallel to Z gives a zero cross product. `datum_frame` handles all +three with fallbacks — the requirement is that a fallback be *visible*, because a silent fallback is +C2 wearing a different hat. + +**C9 — Order dependence without a solver.** Onshape can say *"Onshape solves Mates simultaneously so +order won't affect a Mate."* A system that composes transforms in tree order cannot say that. Two +mates driving one body means the second wins and the first is a lie on screen. + +**C10 — Mirrors and patterns.** A mirrored instance has a left-handed frame. Blindly mirroring a +connector gives a frame whose Z still points "out" but whose handedness flipped, so every rotation +runs backwards. Cheap to handle now, miserable to retrofit. + +--- + +## 7. Requirements + +Labelled **[INDUSTRY]** (what the frame-based systems do) or **[DEVIATION]** (we would depart). + +### Definition + +**R1 [INDUSTRY] — A mate connector is a frame attached to exactly one body.** No body, no connector. +*Test:* creating a connector without a body is rejected at creation, not at mate time. +→ **`CoordSysType::PointWorld` violates this.** It is a datum wearing a connector's name. + +**R2 [INDUSTRY] — One kind of connector, not two.** No "implicit" connector that behaves differently +from an explicit one. If hover inference is offered, hovering *creates* an ordinary connector. +*Why:* C4. *Test:* everything that accepts a connector accepts any connector. + +**R3 [INDUSTRY] — A mate names exactly one subgroup of free motion.** Fastened (0), Revolute (1), +Slider (1), Cylindrical (2), Planar (3), optionally Ball (3). *Why:* §3. *Test:* every type's free +set is closed; no type is "A and also B". + +### Orientation + +**R4 [INDUSTRY] — Everything is about Z. Say so once, in the UI.** *Test:* no mate parameter refers +to any other axis. + +**R5 [DEVIATION] — Z is the outward material direction, and mates default to FACING.** +A mate would drive B's Z onto **−A's Z** by default, so picking two faces that should touch makes +them touch with no options changed. *Why:* it is the whole of C1. +**Cost and caveat:** this inverts today's default (`mate_flip=false` currently *aligns*), and I could +not establish from any vendor's documentation what their default actually is — the forum question in +D3 went unanswered precisely because it is undocumented. So this is marked a deviation on the honest +grounds that **I cannot prove the industry agrees with it.** If D3's live preview lands first, the +default matters much less, because the user sees the outcome before committing. See §9 D1. + +**R6 [DEVIATION] — Name the two directions; do not ship a boolean called "flip".** +`Direction: Facing | Aligned`. Every surveyed vendor ships a flip arrow instead. A boolean requires +remembering what unticked means; two named values do not. Low risk, small improvement on the state of +the art. + +**R7 [INDUSTRY] — Roll is picked, or a stored quarter turn. Never world-derived.** +X from a referenced edge or in-plane direction; failing that, a deterministic body-attached seed, with +**Rotate 90°** offered as a stored integer 0–3 on top (this is Onshape's "reorient secondary axis", +A6). *Why:* C2 and the world-constant bug this project already shipped. *Test:* rotate the parent +body by any angle; the connector's X rotates with it — *this test already exists* ("a face-only frame +rotates with its body"). + +**R8 [INDUSTRY] — A degenerate roll is reported, not absorbed.** *Test:* a connector on a full +cylindrical face reports "roll undefined — pick a direction" rather than silently taking a fallback. + +### Placement + +**R9 [INDUSTRY, Fusion] — Origin comes from a small closed set of named candidates.** +**Face centroid, arc/circle centre, edge midpoint, vertex.** Four. Each stored as +`(kind, topological reference)` and resolved at rebuild. *Why:* D1. *Test:* the stored kind is visible +in the card; a rebuild either resolves it or raises an error. + +**R10 [INDUSTRY] — An unresolvable reference is an error, never a silent relocation.** +*Test:* delete the referenced face; the mate reports "connector A: face not found" and the body stays +where it was. + +### Semantics without a solver + +**R11 [DEVIATION] — A body is driven by at most one mate. The second is refused.** +**No surveyed system does this** — they all have solvers and all accept many mates per body. It is +forced on us by tree-order composition: a second mate on the same body silently overrides the first +and the screen shows a configuration satisfying only one stated intent (C9). *Test:* creating a +second mate whose moving body already has one is rejected, naming the existing mate. +This is the single largest departure in this document. See §9 D4. + +> **A tempting misreading, checked and rejected.** It is easy to find the claim that Onshape mandates +> *"exactly one Mate between any two instances"*, which would make R11 an industry agreement rather +> than a deviation. **The Onshape page does not say that.** It says *"**Many assemblies require only** +> one Onshape Mate between any two instances"* and then lists, as an explicit remedy, *"**Use more +> than one Mate if necessary.**"* One mate per pair is Onshape's *typical case*, not its rule. R11 +> remains a deviation and must be justified on our own architecture, not on theirs. + +**R11a [DEVIATION] — The refusal list.** With no solver, these are unsupportable and must be refused +rather than half-done: a second mate on an already-driven body; cycles (A→B, B→A); closed loops +(A→B, A→C, B→C); relations *between* mates (gear, belt, rack-and-pinion, screw coupling); **joint +limits**, which nothing can enforce without a solver; and **dragging a body to exercise a free DOF**, +which requires keeping the body on the allowed manifold. Motion analysis and animation follow from the +same lack. *Requirement:* none of these may appear in the UI as something that half-works. + +**R12 [DEVIATION] — The mate graph is an acyclic forest rooted at fixed bodies.** A body reached by +no mate is fixed; cycles are refused. Same root cause as R11. *Test:* A→B, B→A rejected at creation. + +**R13 [INDUSTRY] — Free DOF are preserved from the current placement, and the user is told.** +Behaviour already matches Onshape (A8); the telling does not. *Test:* the card for any type with +DOF > 0 says which motions remain and that dragging exercises them. + +**R14 [INDUSTRY] — State what mirroring does to a connector.** +*Checked in the code:* `datum_frame` ends with a Gram-Schmidt forcing a right-handed frame +(`ds.x = Y.cross(Z)`), so a connector resolved on a mirrored body comes out **right-handed, not +mirror-imaged**. Z follows the mirrored face's outward normal, X follows a mirrored edge, handedness +is re-imposed. Defensible — a mate on the mirrored part still turns the way its type says — but it +means a mirrored sub-assembly is *not* the mirror image of the original in its rotation sense. +*Requirement:* document it and pin it with a test. *Why:* C10. + +### Feedback — the part that actually removes confusion + +**R15 [INDUSTRY] — Before Confirm, the card answers four questions in words.** Which body moves; +which way Z points on each connector; how many DOF remain; what the offset is measured from. + +**R16 [INDUSTRY] — Draw both frames live, with Z distinguishable, and ghost the result.** +Two triads with Z rendered differently from X/Y (length, arrowhead, colour). *Why:* D3 — the fastest +way to make a convention unequivocal is to show it. *Test:* both Z directions are readable in a +screenshot. + +**R17 [INDUSTRY] — Show the DOF budget per body.** "Body 2: 1 of 6 DOF free (rotation about Z)." +The most educational readout in any assembly system, and free to compute here — the type *is* the DOF +count. *Test:* the number changes when the type changes. + +**R18 [DEVIATION] — Refuse loudly and name the alternative.** Where something is out of scope (a +second mate, a tangency, a gear ratio), say what is unsupported and what to do instead. Vendors do not +need this because their solvers accept the input. *Test:* no refusal message ends without a suggested +next action. + +--- + +## 8. Minimal specification, and gap analysis + +### The connector + +``` +MateConnector + body int required, ≥ 0 (R1) + origin_kind enum FaceCentroid | ArcCentre | EdgeMidpoint | Vertex (R9) + origin_ref topo ref face / edge / vertex index on that body + z_source implied by origin_kind: face normal, arc axis, edge tangent + roll_ref topo ref optional in-plane edge; else deterministic seed (R7) + roll_quarters int 0..3 stored quarter turns on top of the seed (R7, A6) + flip_z bool reverse Z at the connector + name string stable, user-visible (D4) +``` + +`flip_z` is a property of the **connector**, chosen once when it is made — not a per-mate +afterthought. Keeping connector-flip and mate-direction separate is what stops the "which flip do I +tick?" question. + +### The mate + +``` +Mate + kind enum Fastened | Revolute | Slider | Cylindrical | Planar [| Ball] (R3) + fixed connector A — its body does not move + moving connector B — its body is driven (A5, C5) + direction enum Facing | Aligned (R5, R6) + offset mm along A's Z, measured A → B — state this in the label (C6) + angle deg about A's Z (R4) +``` + +Within one field of what exists. + +### Gaps against today + +Source of record: `CadDocument.hpp:26,247-252,298-310`; `CadDocument.cpp:1669` (`datum_frame`), +`:2961` (`apply_mate`), `:1302` (`add_mate`); `DesignPanel.cpp:2671-2709` (the Mate card). + +| # | Gap | Severity | Ref | +|---|---|---|---| +| G1 | `PointWorld` connectors are not attached to a body and their X is a world constant | **High — data model** | A4/R1 | +| G2 | Origin is always the face centroid; no vertex / edge-midpoint / arc-centre snap | **High — expressiveness** | D1/R9 | +| G3 | No live preview of the two Z arrows or of the resulting placement | **High — this is the brief** | D3/R16 | +| G4 | Mate card is two abstract dropdowns; nothing says which body moves | High — charter + A5 | R15 | +| G5 | No joint-type inference from the picked geometry | Medium — feel | D2 | +| G6 | `add_mate` validates nothing — no one-mate-per-body, no cycle check | Medium | R11/R12 | +| G7 | No `Ball` type | Low | §3 | +| G8 | Re-clocking needs a typed angle; no 90° step control | Low, cheap | A6/R7 | +| G9 | Degenerate roll falls back silently | Low | C8/R8 | +| G10 | Connectors have no stable user-facing name | Low now, expensive later | D4 | + +**Already aligned — do not "fix" these:** the five types and their DOF; the frame definition (A1); +Z as the joint axis (A2); superimpose-then-relax (A3); the fixed/moving asymmetry in the data model +(A5); DOF wording in the type list (A7); free-DOF preservation (A8); right-handed frames under mirror +(R14); and `en4`'s fix, which put roll derivation on the body where it belongs (C2). + +**The pattern worth naming: the kernel is in good shape and the concept is under-explained.** Half the +requirements here are wording and drawing, not geometry. The two real engineering items are R9 (origin +candidates) and R11/R12 (the mate-graph rules). + +### Expensive-to-retrofit decisions — get these right in the data model now + +Changing any of these after documents exist in the wild costs a migration, not an edit. + +1. **Topological reference stability.** Storing raw face/edge indices is brittle — editing a body + renumbers faces. Either persistent topology IDs, or store the named origin *kind* plus a + deterministic search that re-finds the same geometric intent on rebuild. The latter is cheaper and + probably sufficient here; it is also what makes R10's "error, never silent relocation" enforceable. +2. **Connector ownership** (R1). Remove `PointWorld` or bind it to a body. Do this first. +3. **Mate direction semantics** (R5/D1). Inverting the default rewrites the meaning of every saved + mate. +4. **Roll representation** (R7). "First usable edge" is better than world-X but still fragile. Store + an explicit roll reference plus quarter turns. +5. **Coordinate convention** — Z = joint axis, X = roll reference. Changing this after release + invalidates every mate. +6. **Units** — offset in mm, angle in degrees. Never change. +7. **Mirror handedness** (R14) — document the decision, do not let it stay an accident. +8. **Flat body index vs. a component tree.** Mates currently reference bodies in a flat vector. If + **sub-assemblies** are ever in scope, mates must reference nodes in a tree instead. Retrofitting + this is painful and it is the one item on this list not already implied elsewhere in the document — + **decide now whether nested assemblies are in scope.** +9. **Serialization field semantics.** Adding fields is easy; redefining `mate_flip` or + `coordsys_x_hint` is not. +10. **The one-mate-per-body rule** (R11). Enforce at creation. Relaxing it later by adding a solver is + straightforward; allowing many mates now and discovering later that they silently conflict is not. + +--- + +## 8b. The visual shape of the connector — polarity and verse + +Researched separately (2026-08-05) by downloading and **looking at** the vendors' own figures, not +by reading their prose. Files kept alongside this document in `doc/design/mate-connectors/`. + +### What the systems actually draw + +**Onshape** — verified from `planarfacemateconnectors.png`, `cylindricalmateconnectors.png`, +`linearedgemateconnectors.png`, `mateconnector-planarpoints.png`, `matepointiconLG.png`: + +> **A small circle with one quadrant filled, plus three short coloured axis arms (X red, Y green, +> Z blue).** + +Three parts, each doing one job: + +| Element | What it says | +|---|---| +| The **circle** | "I am a frame, and this is my XY plane." | +| The **filled quadrant** | **The roll.** The shaded sector is the +X/+Y quadrant. | +| The **coloured arms** | The three axis directions, Z distinguished by colour. | + +The quadrant is the cleverest part of the whole design and it is easy to miss. The figure +`matepointreorientsecondaryaxis.png` shows three connectors side by side with the quadrant in three +different rotations — **it is the live readout of "reorient secondary axis in 90° increments" (A6).** +One glyph element makes the otherwise-invisible clocking visible, and makes the 90° button's effect +legible before you commit. The toolbar icon `matepointiconLG.png` is that same circle-with-a-quadrant, +so the symbol is consistent from toolbar to viewport. + +Candidate snap points, before you choose one, are drawn as **plain small white dots** on the model +(clear in `mateconnector-planarpoints.png`: dots at every corner and edge midpoint). Candidate and +committed are deliberately different weights — dots propose, the circle-and-triad commits. + +**FreeCAD 1.0** — verbatim from the wiki: *"Connectors are local coordinate systems and are marked by +a symbol with three axes (X, Y, Z) and a circle representing the XY-plane."* Same core as Onshape — +circle plus triad — **without** the quadrant. + +**Fusion 360** — the joint origin glyph, plus a documented icon language for *candidates*: *"A circle +denotes a vertex, and a triangle denotes a midpoint."* Shape encodes what kind of point it is. + +**Convergent core:** *circle for the XY plane + coloured triad*. Onshape alone adds the roll quadrant. + +### What none of them draw — and it is exactly what was asked for + +**Nothing in any vendor's glyph says which connector is the reference and which one is about to +move.** Both ends of a mate are drawn identically. That is confusion C5 ("which part moves?") left +unsolved in the visual language, and it is why the honest recommendation earlier was a live ghost — +the ghost compensates for a glyph that does not carry the information. + +So the two things asked for split cleanly, and only one of them is solved upstream: + +- **Verse** (*verso* — which way it points): **solved**. Z has a colour and a direction. +- **Polarity** (which end receives, which end inserts; who is anchored, who travels): **unsolved + everywhere.** This is open ground, and getting it right is a genuine improvement rather than a + deviation to justify. + +### Our starting point + +**We draw nothing.** `resolve_datum_coordsys()` (`CadDocument.cpp:1749`) has exactly one consumer in +the entire tree — `McpControl.cpp:1310`, the agent socket. A mate connector is today visible only to +a program. The glyph is unbuilt, so there is no migration cost to designing it properly now. + +### Proposed glyph: the magnet + +Adopt Onshape's proven core, then add the missing polarity with a metaphor that carries its own +instructions. + +``` + ▲ solid cone on +Z ONLY ← verse + | + ────●──── ← the disc = XY plane, ● = exact origin + ▨ quadrant filled ← roll / clocking, steps 90° +``` + +**Rule 1 — verse: draw +Z and never −Z.** A single stem with a cone head, on the positive side only. +No stem below the disc. A double-headed axis is the one thing that guarantees the question gets asked; +an arrow that exists on one side only cannot be misread. Length is asymmetric on purpose. + +**Rule 2 — roll: keep Onshape's quadrant.** Filled sector = the +X/+Y quadrant. It rotates in 90° +steps with the reorient control (A6/R7). This is aligned *and* it is the only in-glyph answer to +"where is X?", which matters because Fastened and Slider lock the clocking. + +**Rule 3 — polarity: solid cone travels, open collar receives.** +- The **driven** connector (B, on the body that will move) draws a **solid filled cone** — the plug. +- The **fixed** connector (A) draws an **open ring / hollow cone outline** — the socket. + +Same silhouette, so they read as a matched pair; opposite fill, so which one is about to jump is +answerable at a glance and without a legend. Plug-into-socket is the one mechanical metaphor every +user of this tool already has in their hands. + +**Rule 4 — the pair reads as a magnet.** Draw a dashed line joining the two origins the moment both +are picked. Two poles, one field line. And because a magnet's north seeks a south, **"facing" becomes +the self-evident default** — which quietly settles open decision D1 (§9) on visual grounds rather than +on a convention nobody can look up. If the glyph looks like a magnet, nobody has to be told that two +faces which touch have opposed normals. + +**Rule 5 — three states, three weights.** + +| State | Drawing | +|---|---| +| **Candidate** (hover) | small dot only — Onshape's white dots; shape may encode kind, Fusion-style | +| **Picked** | full glyph: disc + quadrant + cone | +| **Degenerate roll** (C8/R8) | the quadrant is drawn **hollow/hatched** — "roll undefined, pick a direction" | + +That last row is worth the trouble: it turns R8 from a message nobody reads into a mark you cannot +miss, and it costs one branch in the renderer. + +**Rule 6 — do not reuse the existing triad.** The bed-centre world triad +(`DesignCanvas.cpp:65`, `set_axes_at_bed_center`) and the move gizmo are already three-coloured arrows. +The connector must not be a fourth set of RGB arrows or the viewport becomes unreadable. The disc and +the quadrant are what distinguish it; keep the arms short, and consider drawing only Z on the +committed glyph, with X/Y implied by the quadrant. + +### Built and judged in the viewport, not in a mock + +The browser mock that first accompanied this section was the wrong instrument and its proportions +were meaningless: **every gizmo in this codebase is sized in SCREEN PIXELS** via `upp = 1/zoom` +(`render_shell_gizmo` uses `15.0 * upp`, `render_hole_gizmo` `9.0 * upp` for its cube). A connector +is a symbol, not a part — it must not shrink with the model. Nothing about that is visible in SVG. + +The glyph was therefore implemented and driven on the rig. Screenshots: `g-0*.png`, left in the workspace `artifacts/shots/` and not moved into the repo. +Five findings, none of which a mock could have produced: + +**F1 — Three axis arms lose to one.** Rendered side by side (`ORCA_CAD_GLYPH=A` vs default), the +Onshape-style RGB trio crowds a 22 px disc: the arrowheads are as large as the disc, they bury the +gold quadrant, and at an oblique angle the three heads pile into a coloured smudge. Worse, **it is +indistinguishable from the move gizmo and the bed triad**, which are already RGB arrow trios in this +viewport. One-sided Z wins on evidence, not taste. (`g-01-zoom.png` vs `g-02-zoom.png`.) + +**F2 — Polarity works, and colour does more of the work than fill.** A filled blue head against an +open grey outline head is readable instantly at 22 px (`g-03-zoom.png`). But the fill difference is +the *second* cue; the colour split carries it. Keep both — fill survives greyscale and colour-blind +palettes, colour survives small size. + +**F3 — Depth off floats, depth on tears.** With `GL_DEPTH_TEST` off, connectors on faces pointing +*away* from the camera still drew their discs over the solid, so the part looked covered in frames +that were really on its back. Turning depth on fixed that and immediately caused **z-fighting**: the +disc is exactly coplanar with its face, and came out as a broken dotted arc. The fix is depth **on** +plus a sub-pixel lift along Z (`0.7 * upp`), scaled by `upp` so it never becomes a visible gap on +zoom-in. Both failure modes are in the images (`g-03` torn, `g-04` clean). + +**F4 — The quadrant is the first thing to die at a grazing angle.** On a face seen nearly edge-on the +disc foreshortens to a sliver and the fan collapses into a blob (`g-01-zoom.png`, lower-right glyph). +The roll is exactly the information that is hardest to read when you most need it. Not yet solved — +see the open item below. + +**F5 — Roll-undefined in red is too loud.** It works, but it makes the *least* important connector +the most eye-catching thing on screen. Amber, or the same grey with a hatched quadrant, is enough. + +Also surfaced while testing, and unrelated to the glyph: `add_mate` accepted a mate between two +connectors **on the same body**, which is meaningless, and duly transformed the body relative to +itself. Concrete instance of gap G6. + +**Still untested:** a true grazing view (the view-cube click missed), a connector on a curved face, +and behaviour when a connector overlaps the move gizmo. F4 is the open design question — the disc may +need to billboard its *quadrant* while keeping the disc in-plane, which is a compromise no surveyed +vendor makes and which should be tried before being adopted. + +### What this costs + +A renderer for `resolve_datum_coordsys()` — which does not exist and has to be written whatever glyph +is chosen — plus one dashed line and three fill states. No kernel work. It is the same piece of work +as G3 (live preview), and doing them together is what makes the mate card honest. + +--- + +## 8c. The "faceted ridge dome" proposal — built, rendered, judged + +A colleague proposed replacing the flat disc with an **asymmetric low-poly solid**: a faceted +prismatic wedge with a dominant longitudinal ridge that **slopes** from a tall steep back to a long +shallow front, plus a male protrusion / female pocket pair with a 0.2 mm clearance. + +It was built rather than discussed. `faceted_ridge_key.scad` (this folder) (6 vertices, 7 faces), +verified as a closed manifold, exported through OpenSCAD, and flat-shaded from five directions with +`render_key.py` / `render_stl.py`. Sheets: `rk-sheet.png`, `cmp-sheet.png`. + +### The verdict: the shape is right, the male/female polarity cue is not + +**It solves F4, decisively.** The grazing view — where the flat disc dies, its quadrant collapsing to +a blob — is the view where this shape is *most* legible: the tall back and long shallow front are +unmistakable in silhouette. At a grazing angle the silhouette IS the information, and this solid's +silhouette is maximally informative there. That is a real, evidence-backed win over what is currently +in the code. + +**Down the mating axis (+Z) it also reads well**, which matters because that is the natural viewing +direction when you are looking at a face you intend to mate. + +**One degenerate view, and it is not the one I predicted.** I expected the ±X views (along the ridge) +to be silhouette-ambiguous, resolved only by shading. Wrong: front and back are clearly *different* — +the front shows several facets, the back is a **single flat featureless triangle**. So they are not +confusable, but the view from directly behind the tall end tells you nothing about roll or slope. +A second blind spot remains untested: from below the base, where the protrusion is hidden behind its +own face. + +**The female half fails, and much harder than expected.** Rendered with flat shading and no outlines — +the honest test, since a viewport draws no black edges — a recessed pocket is *invisible*: iso and +grazing show a plain block with a hairline; straight down the axis shows a **completely blank +rectangle**. The interior faces are lit almost identically to the top face and are occluded by the rim +from most angles. As a polarity cue, male/female therefore works in exactly one direction and returns +nothing in the other. + +> **Conclusion: do not overload shape with all three jobs.** Let the solid carry **verse and roll**, +> where it is excellent, and carry **polarity on a second channel** — colour plus the filled/open head +> that already tested well at 22 px (F2). Drawing the fixed connector as an outline/wireframe of the +> same solid is the variant worth trying; drawing it as a pocket is not. + +### Two premises in the brief are wrong + +**"Avoid curved surfaces to optimise rendering computations / rapid mesh processing."** Not a reason +for a viewport glyph. There are 2–20 connectors on screen, the renderer pushes `GLModel` triangles +directly, and it performs no CSG or mesh processing at all. **The real argument for flat facets is +legibility**: hard normals give distinct value steps between adjacent facets, and the renders confirm +that is exactly what makes the shape readable from an arbitrary angle. Keep the constraint, fix the +justification. (For a *printed* part the original justification is sound for a different reason: flat +facets slice without the stair-stepping a tessellated curve produces.) + +**"0.2 mm clearance for smooth mechanical mating."** Meaningless for a glyph. A symbol mates with +nothing, and every gizmo here is sized in screen pixels via `upp`, so a millimetre tolerance has no +referent. This is the strongest signal that **the brief was written for a physical printed part**, +not for a viewport symbol — as are "scannable" and "mechanical mating". See the open question below. + +### Two defects the build caught that discussion would not have + +1. **The flank quads are not planar.** Written as `[0,3,5,4]` and `[1,4,5,2]` the base edge and the + ridge edge are skew, so the four corners do not share a plane — my own first draft asserted the + opposite in a comment. Left as quads, the tessellator picks the fold direction, the "flat facet" + promise is broken by an unspecified crease, and two exporters can disagree about the shape. Fixed + by triangulating explicitly (7 faces, Euler 6 − 11 + 7 = 2). +2. **The pocket punched through its own plate.** A 4.5 mm key against a 3 mm demo plate gives a + through-hole, not a pocket. Minimum stock = height + clearance + pocket depth + a wall. + +Also worth recording: the first female render was misleading because the debug renderer outlined +*every* triangle, so a flat top face triangulated by CGAL looked like a faceted dome. The instrument +lied before the geometry did. Conclusions were only drawn after outlines were removed. + +### Second opinion, and the one disagreement worth resolving + +Kimi reviewed the proposal independently and **rejected it for the viewport**. It agreed on the two +wrong premises, agreed the female pocket is unreadable, and added the useful framing that a +screen-constant symbol and a model-constant part feature are two different design spaces that cannot +be served by one geometry. It also noted correctly that there is **no single scalar** that removes +ambiguity from every view: you need one asymmetry in the base plane (for top-down roll) and one out +of plane (the ridge slope, for front/back). Our base is scalene, so it has both. + +Its central objection was numeric and testable: *"at 22 px with 6–8 facets each facet is 3–7 px wide, +that is at the aliasing limit … minimum useful size is roughly 32–48 px, which is not compatible with +a 22 px screen-constant symbol."* My own renders were ~300 px, so the claim was unaddressed by my +evidence and would have killed the concept if true. + +**Rendered at 22, 32 and 48 px (`size-test.png`), it is false for this shape.** At 22 px all three +views still read: the grazing view shows the tall back and shallow front unmistakably, and the +down-axis view keeps a strong dark/light split. The reason Kimi's arithmetic does not apply is that +this solid presents only **four or five large facets with high value contrast**, not eight small ones — +the silhouette does most of the work, and silhouettes survive downsampling far better than facet +detail does. + +*Honest limit on that result:* the test renderer has no anti-aliasing, no perspective, one directional +light, and no background. Readable at 22 px against white is not the same as readable at 22 px on top +of a shaded gold part next to the move gizmo. That case still needs the rig. + +**Where I do not follow Kimi:** its recommendation is to **billboard** the existing flat glyph so it +never turns edge-on. That kills F4 by construction, but a billboarded frame cannot show the frame's +orientation *in place* — which is the entire reason the disc is a disc and not a dot — and it is what +no surveyed CAD system does; Onshape, Fusion and FreeCAD all draw the frame in the geometry. Worth +prototyping as an option, not worth adopting on argument. + +### Open question for Tommaso + +**Is this a viewport glyph or a printable alignment feature?** The vertex logic is identical either +way; only the units and the clearance change, and the `.scad` file states both readings. But the +answer decides whether `clr`/`depth` are real millimetres or meaningless, and whether the geometry +scales with the model or stays screen-constant. The brief's own language points at "physical", the +conversation it arrived in points at "glyph". + +--- + +## 9. Decisions for you + +**D1 — Invert the default direction to Facing?** [DEVIATION, R5] +It changes the meaning of every stored document containing a mate. Options: (a) invert and migrate, +writing `direction=Aligned` where `mate_flip` was false; (b) invert only for new mates and store +`direction` explicitly from now on. (b) is safer and costs one field. Note this project has taken one +such semantic hit knowingly before — the `en4` fix — and the golden fixture survived, so the +migration path is a known quantity. **If G3 (live preview) lands first, this matters much less.** + +**D2 — How far to take origin candidates?** [R9] +Four kinds is the Fusion-aligned recommendation. Two (face centroid + arc centre) would cover "sit on +a face" and "go down a hole" — most printed-part assembly — at a third of the work. Where do you want +to stop? + +**D3 — Ball mate: in or out?** +In four of five frame-based systems, so including it is the aligned choice. Out is defensible for +printable mechanical parts. Cheap either way — align origins, leave orientation free. Kimi's review +argued **out**: a true ball joint is hard to print and hard to use without a roll reference, and a +Fastened connector at the ball centre approximates it. + +**D3a — Should Planar be dropped?** [dissent worth recording] +Kimi's independent review recommended **removing Planar** and shipping four types, on the grounds that +"slide on a flat surface" is rarely how printed mechanisms work — you usually want a rail or a hinge — +and that Planar is the type most likely to confuse a user who expected "put this flat on that" and got +a part free to slide. It further ranked the honest minimum as **three**: Fastened, Revolute, Slider, +with Cylindrical useful and decomposable. +**I do not agree, and the reason is alignment.** Planar appears in every frame-based system surveyed, +it is a genuine lower pair, it is already implemented and tested, and removing it is a document-format +change made in exchange for nothing. The confusion Kimi names is real but it is a *feedback* problem — +it is exactly what R17 (show the DOF budget) and R13 (say that free DOF are preserved) exist to fix. +Recorded here because it is a legitimate reading of the same evidence and the call is yours. + +**D4 — Is refusing a second mate per body acceptable?** [DEVIATION, R11 — the big one] +It is the honest consequence of having no solver, and it is what makes the tool predictable. But **no +mainstream system behaves this way**, so it is the point where an experienced user's intuition will +break. It means a part cannot be constrained by two independent relationships — "in this hole *and* +resting on this shoulder" must be expressed by placing one connector correctly rather than by two +mates. If that trade is unacceptable, the answer is a solver, and the scope of this document changes +entirely. + +There is a strong argument that the trade is not merely acceptable but *correct for this product*: +the Design tab lives inside a slicer, and most of its users are positioning parts for printing rather +than building working mechanisms. For layout-and-export, tree-order composition is genuinely enough, +and adding a solver to look like Onshape would buy complexity nobody asked for. The rule to publish is +then simple and defensible: **one mate per moving body, acyclic, no relations between mates** — with +R18's loud refusals carrying the honesty. + +--- + +## Sources + +**Onshape** — [Mate Connector](https://cad.onshape.com/help/Content/PartStudio/mate_connector.htm) · +[Mates](https://cad.onshape.com/help/Content/Assembly/mates.htm) · +[Fastened](https://cad.onshape.com/help/Content/Assembly/fastened_mate.htm) · +[Revolute](https://cad.onshape.com/help/Content/Assembly/revolute_mate.htm) · +[Slider](https://cad.onshape.com/help/Content/Assembly/slider_mate.htm) · +[Cylindrical](https://cad.onshape.com/help/Content/Assembly/cylindrical_mate.htm) · +[Planar](https://cad.onshape.com/help/Content/Assembly/planar_mate.htm) · +[Ball](https://cad.onshape.com/help/Content/Assembly/ball_mate.htm) · +[Parallel](https://cad.onshape.com/help/Content/Assembly/parallel_mate.htm) · +[Tangent](https://cad.onshape.com/help/Content/Assembly/tangent_mate.htm) · +[Pin Slot](https://cad.onshape.com/help/Content/Assembly/pin_slot_mate.htm) · +[5 things you can do with mate connectors in Part Studios](https://www.onshape.com/en/resource-center/tech-tips/tech-tip-5-things-you-can-do-with-mate-connectors-in-onshape-part-studios) + +**Onshape forum** — [The concept behind Mates Z Axes](https://forum.onshape.com/discussion/22828/the-concept-behind-mates-z-axes) (C1/D3) · +[Implicit mate connectors act differently than explicit ones](https://forum.onshape.com/discussion/15736/implicit-mate-connectors-act-differently-than-explicit-ones) (C4) · +[Efficiently set mate connectors](https://forum.onshape.com/discussion/13133/efficiently-set-mate-connectors) + +**Fusion 360** — [Joint types](https://help.autodesk.com/cloudhelp/ENU/Fusion-Assemble/files/GUID-8818AE31-958A-4A59-989B-9875A174C67A.htm) · +[Joint origins](https://help.autodesk.com/view/fusion360/ENU/?guid=ASM-JOINT-ORIGIN) · +[Joints vs. Mates in Fusion](https://www.autodesk.com/products/fusion-360/blog/joints-mates-moving-fusion/) · +[Joint tips — snap points and Ctrl cycling](https://mgfx.co.za/blog/engineering-manufacturing-design/fusion-360-joint-tips/) + +**Inventor** — [Create Joints Reference](https://help.autodesk.com/cloudhelp/2026/ENU/Inventor-Help/files/GUID-6AA68E8F-7C97-4806-8483-3941DE915E70.htm) · +[Use Joint to define and manage relationships](https://knowledge.autodesk.com/support/inventor-products/learn-explore/caas/CloudHelp/cloudhelp/2014/ENU/Inventor/files/GUID-21DC3336-5C51-42C1-90FB-4299CD66E0C6-htm.html) (type inference, D2) + +**FreeCAD 1.0** — [Assembly Workbench](https://wiki.freecad.org/Assembly_Workbench) · +[Fixed Joint properties](https://wiki.freecad.org/Assembly_CreateJointFixed) + +**Creo** — [About Predefined Constraint Sets](https://support.ptc.com/help/creo/creo_pma/r12/usascii/assembly/asm/About_Predefined_Constraint_Sets.html) + +**Siemens NX** — [Assembly constraints](https://learnnx.com/lesson/siemens-nx-assemblies-assembly-constraints/) + +**SOLIDWORKS** — [Mate References](https://help.solidworks.com/2025/English/SolidWorks/sldworks/c_Mate_References_Overview_SWassy.htm) · +[Creating and using mate references](https://blogs.solidworks.com/tech/2019/07/creating-and-using-mate-references.html) + +**Theory** — [Hervé, The Lie group of rigid body displacements, a fundamental tool for mechanism design](https://www.sciencedirect.com/science/article/abs/pii/S0094114X98000512) · +[Joint kinematics — the six lower pairs and their DOF](https://erc-bpgc.github.io/handbook/mechanical/Joint%20Kinematics/) · +[ISO 10303-105 — Kinematics (STEP integrated resource)](https://www.iso.org/standard/78589.html) + +**Internal** — `en4` (closed 2026-07-26, fixes C2 here) · `CadDocument.cpp:1669` +`datum_frame` · `CadDocument.cpp:2961` `apply_mate` · `CadDocument.cpp:1302` `add_mate` + +**Second opinion** — an independent review by Kimi Code (2026-08-05) contributed the +vendors-ship-both caveat (§1), the explicit-dropdown option for origin choice (D1), the expanded +refusal list (R11a), the retrofit list (§8), and the dissents recorded at D3/D3a. One of its claims — +that Onshape mandates *"exactly one Mate between any two instances"* — **was checked against the +source and is wrong**; the correction is recorded at R11 because it is a misreading that would +otherwise turn our largest deviation into a false agreement. diff --git a/docs/CAD/design/mate-connectors/bear-01-view.png b/docs/CAD/design/mate-connectors/bear-01-view.png new file mode 100644 index 0000000000..eb57aaeefe Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-01-view.png differ diff --git a/docs/CAD/design/mate-connectors/bear-02-view.png b/docs/CAD/design/mate-connectors/bear-02-view.png new file mode 100644 index 0000000000..46b6d834fa Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-02-view.png differ diff --git a/docs/CAD/design/mate-connectors/bear-02-zoom.png b/docs/CAD/design/mate-connectors/bear-02-zoom.png new file mode 100644 index 0000000000..437adaee9d Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-02-zoom.png differ diff --git a/docs/CAD/design/mate-connectors/bear-flat.png b/docs/CAD/design/mate-connectors/bear-flat.png new file mode 100644 index 0000000000..16375b9d5c Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-flat.png differ diff --git a/docs/CAD/design/mate-connectors/bear-sil-cmp.png b/docs/CAD/design/mate-connectors/bear-sil-cmp.png new file mode 100644 index 0000000000..eb2f283f95 Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-sil-cmp.png differ diff --git a/docs/CAD/design/mate-connectors/bear-sil.png b/docs/CAD/design/mate-connectors/bear-sil.png new file mode 100644 index 0000000000..2b6e51067e Binary files /dev/null and b/docs/CAD/design/mate-connectors/bear-sil.png differ diff --git a/docs/CAD/design/mate-connectors/bear.step b/docs/CAD/design/mate-connectors/bear.step new file mode 100644 index 0000000000..a61f1b22c0 --- /dev/null +++ b/docs/CAD/design/mate-connectors/bear.step @@ -0,0 +1,1020 @@ +ISO-10303-21; +HEADER; +/* Generated by software containing ST-Developer + * from STEP Tools, Inc. (www.steptools.com) + */ +/* OPTION: using custom renumber hook */ + +FILE_DESCRIPTION( +/* description */ ('STEP AP242 Edition 2', +'CAx-IF Rec.Pracs.---Representation and Presentation of Product Manufa +cturing Information (PMI)---4.0---2014-10-13', +'CAx-IF Rec.Pracs.---3D Tessellated Geometry---0.4---2014-09-14','2;1', +'CAx-IF Rec.Pracs.---User Defined Attributes---1.5---2016-08-15'), +/* implementation_level */ '2;1'); + +FILE_NAME( +/* name */ 'Part Studio 1 - Part 1', +/* time_stamp */ '2026-08-05T08:27:36Z', +/* author */ (''), +/* organization */ (''), +/* preprocessor_version */ 'ST-DEVELOPER v20', +/* originating_system */ 'ONSHAPE BY PTC INC, 1.218', +/* authorisation */ ' '); + +FILE_SCHEMA (('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF { 1 0 10303 442 3 1 4 }')); +ENDSEC; + +DATA; +#10=SHAPE_REPRESENTATION_RELATIONSHIP('','',#598,#11); +#11=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#596),#960); +#12=CYLINDRICAL_SURFACE('',#620,0.00144852813742385); +#13=CYLINDRICAL_SURFACE('',#622,0.005); +#14=CYLINDRICAL_SURFACE('',#625,0.00585404496296467); +#15=CYLINDRICAL_SURFACE('',#627,0.00585404496296468); +#16=CYLINDRICAL_SURFACE('',#634,0.00493552270528336); +#17=CYLINDRICAL_SURFACE('',#635,0.00493552270528336); +#18=CIRCLE('',#601,0.00493552270528336); +#19=CIRCLE('',#602,0.00585404496296468); +#20=CIRCLE('',#603,0.00585404496296467); +#21=CIRCLE('',#604,0.005); +#22=CIRCLE('',#605,0.00144852813742385); +#23=CIRCLE('',#606,0.00493552270528336); +#24=CIRCLE('',#608,0.00144852813742385); +#25=CIRCLE('',#609,0.005); +#26=CIRCLE('',#610,0.00585404496296467); +#27=CIRCLE('',#611,0.00585404496296468); +#28=CIRCLE('',#612,0.00493552270528336); +#29=CIRCLE('',#613,0.00493552270528336); +#30=ORIENTED_EDGE('',*,*,#188,.T.); +#31=ORIENTED_EDGE('',*,*,#189,.T.); +#32=ORIENTED_EDGE('',*,*,#190,.T.); +#33=ORIENTED_EDGE('',*,*,#191,.T.); +#34=ORIENTED_EDGE('',*,*,#192,.T.); +#35=ORIENTED_EDGE('',*,*,#193,.T.); +#36=ORIENTED_EDGE('',*,*,#194,.T.); +#37=ORIENTED_EDGE('',*,*,#195,.F.); +#38=ORIENTED_EDGE('',*,*,#196,.F.); +#39=ORIENTED_EDGE('',*,*,#197,.T.); +#40=ORIENTED_EDGE('',*,*,#198,.F.); +#41=ORIENTED_EDGE('',*,*,#199,.T.); +#42=ORIENTED_EDGE('',*,*,#200,.F.); +#43=ORIENTED_EDGE('',*,*,#201,.T.); +#44=ORIENTED_EDGE('',*,*,#202,.T.); +#45=ORIENTED_EDGE('',*,*,#203,.F.); +#46=ORIENTED_EDGE('',*,*,#204,.T.); +#47=ORIENTED_EDGE('',*,*,#205,.F.); +#48=ORIENTED_EDGE('',*,*,#206,.T.); +#49=ORIENTED_EDGE('',*,*,#207,.F.); +#50=ORIENTED_EDGE('',*,*,#208,.F.); +#51=ORIENTED_EDGE('',*,*,#209,.F.); +#52=ORIENTED_EDGE('',*,*,#210,.F.); +#53=ORIENTED_EDGE('',*,*,#211,.F.); +#54=ORIENTED_EDGE('',*,*,#212,.F.); +#55=ORIENTED_EDGE('',*,*,#213,.F.); +#56=ORIENTED_EDGE('',*,*,#214,.F.); +#57=ORIENTED_EDGE('',*,*,#215,.F.); +#58=ORIENTED_EDGE('',*,*,#216,.F.); +#59=ORIENTED_EDGE('',*,*,#217,.F.); +#60=ORIENTED_EDGE('',*,*,#218,.F.); +#61=ORIENTED_EDGE('',*,*,#219,.T.); +#62=ORIENTED_EDGE('',*,*,#220,.T.); +#63=ORIENTED_EDGE('',*,*,#221,.F.); +#64=ORIENTED_EDGE('',*,*,#222,.T.); +#65=ORIENTED_EDGE('',*,*,#223,.T.); +#66=ORIENTED_EDGE('',*,*,#224,.T.); +#67=ORIENTED_EDGE('',*,*,#225,.T.); +#68=ORIENTED_EDGE('',*,*,#226,.T.); +#69=ORIENTED_EDGE('',*,*,#227,.F.); +#70=ORIENTED_EDGE('',*,*,#228,.T.); +#71=ORIENTED_EDGE('',*,*,#229,.F.); +#72=ORIENTED_EDGE('',*,*,#230,.T.); +#73=ORIENTED_EDGE('',*,*,#231,.F.); +#74=ORIENTED_EDGE('',*,*,#232,.F.); +#75=ORIENTED_EDGE('',*,*,#233,.T.); +#76=ORIENTED_EDGE('',*,*,#234,.F.); +#77=ORIENTED_EDGE('',*,*,#235,.T.); +#78=ORIENTED_EDGE('',*,*,#236,.F.); +#79=ORIENTED_EDGE('',*,*,#237,.T.); +#80=ORIENTED_EDGE('',*,*,#238,.F.); +#81=ORIENTED_EDGE('',*,*,#239,.T.); +#82=ORIENTED_EDGE('',*,*,#195,.T.); +#83=ORIENTED_EDGE('',*,*,#240,.F.); +#84=ORIENTED_EDGE('',*,*,#222,.F.); +#85=ORIENTED_EDGE('',*,*,#241,.T.); +#86=ORIENTED_EDGE('',*,*,#210,.T.); +#87=ORIENTED_EDGE('',*,*,#242,.F.); +#88=ORIENTED_EDGE('',*,*,#223,.F.); +#89=ORIENTED_EDGE('',*,*,#240,.T.); +#90=ORIENTED_EDGE('',*,*,#209,.T.); +#91=ORIENTED_EDGE('',*,*,#243,.F.); +#92=ORIENTED_EDGE('',*,*,#224,.F.); +#93=ORIENTED_EDGE('',*,*,#242,.T.); +#94=ORIENTED_EDGE('',*,*,#208,.T.); +#95=ORIENTED_EDGE('',*,*,#244,.F.); +#96=ORIENTED_EDGE('',*,*,#225,.F.); +#97=ORIENTED_EDGE('',*,*,#243,.T.); +#98=ORIENTED_EDGE('',*,*,#207,.T.); +#99=ORIENTED_EDGE('',*,*,#245,.F.); +#100=ORIENTED_EDGE('',*,*,#226,.F.); +#101=ORIENTED_EDGE('',*,*,#244,.T.); +#102=ORIENTED_EDGE('',*,*,#206,.F.); +#103=ORIENTED_EDGE('',*,*,#246,.F.); +#104=ORIENTED_EDGE('',*,*,#227,.T.); +#105=ORIENTED_EDGE('',*,*,#245,.T.); +#106=ORIENTED_EDGE('',*,*,#205,.T.); +#107=ORIENTED_EDGE('',*,*,#247,.F.); +#108=ORIENTED_EDGE('',*,*,#228,.F.); +#109=ORIENTED_EDGE('',*,*,#246,.T.); +#110=ORIENTED_EDGE('',*,*,#204,.F.); +#111=ORIENTED_EDGE('',*,*,#248,.F.); +#112=ORIENTED_EDGE('',*,*,#229,.T.); +#113=ORIENTED_EDGE('',*,*,#247,.T.); +#114=ORIENTED_EDGE('',*,*,#203,.T.); +#115=ORIENTED_EDGE('',*,*,#249,.F.); +#116=ORIENTED_EDGE('',*,*,#230,.F.); +#117=ORIENTED_EDGE('',*,*,#248,.T.); +#118=ORIENTED_EDGE('',*,*,#202,.F.); +#119=ORIENTED_EDGE('',*,*,#250,.F.); +#120=ORIENTED_EDGE('',*,*,#231,.T.); +#121=ORIENTED_EDGE('',*,*,#249,.T.); +#122=ORIENTED_EDGE('',*,*,#201,.F.); +#123=ORIENTED_EDGE('',*,*,#251,.F.); +#124=ORIENTED_EDGE('',*,*,#232,.T.); +#125=ORIENTED_EDGE('',*,*,#250,.T.); +#126=ORIENTED_EDGE('',*,*,#200,.T.); +#127=ORIENTED_EDGE('',*,*,#252,.F.); +#128=ORIENTED_EDGE('',*,*,#233,.F.); +#129=ORIENTED_EDGE('',*,*,#251,.T.); +#130=ORIENTED_EDGE('',*,*,#199,.F.); +#131=ORIENTED_EDGE('',*,*,#253,.F.); +#132=ORIENTED_EDGE('',*,*,#234,.T.); +#133=ORIENTED_EDGE('',*,*,#252,.T.); +#134=ORIENTED_EDGE('',*,*,#198,.T.); +#135=ORIENTED_EDGE('',*,*,#254,.F.); +#136=ORIENTED_EDGE('',*,*,#235,.F.); +#137=ORIENTED_EDGE('',*,*,#253,.T.); +#138=ORIENTED_EDGE('',*,*,#197,.F.); +#139=ORIENTED_EDGE('',*,*,#255,.F.); +#140=ORIENTED_EDGE('',*,*,#236,.T.); +#141=ORIENTED_EDGE('',*,*,#254,.T.); +#142=ORIENTED_EDGE('',*,*,#196,.T.); +#143=ORIENTED_EDGE('',*,*,#241,.F.); +#144=ORIENTED_EDGE('',*,*,#237,.F.); +#145=ORIENTED_EDGE('',*,*,#255,.T.); +#146=ORIENTED_EDGE('',*,*,#219,.F.); +#147=ORIENTED_EDGE('',*,*,#256,.F.); +#148=ORIENTED_EDGE('',*,*,#257,.T.); +#149=ORIENTED_EDGE('',*,*,#258,.F.); +#150=ORIENTED_EDGE('',*,*,#256,.T.); +#151=ORIENTED_EDGE('',*,*,#218,.T.); +#152=ORIENTED_EDGE('',*,*,#259,.F.); +#153=ORIENTED_EDGE('',*,*,#221,.T.); +#154=ORIENTED_EDGE('',*,*,#260,.F.); +#155=ORIENTED_EDGE('',*,*,#259,.T.); +#156=ORIENTED_EDGE('',*,*,#257,.F.); +#157=ORIENTED_EDGE('',*,*,#258,.T.); +#158=ORIENTED_EDGE('',*,*,#260,.T.); +#159=ORIENTED_EDGE('',*,*,#220,.F.); +#160=ORIENTED_EDGE('',*,*,#238,.T.); +#161=ORIENTED_EDGE('',*,*,#194,.F.); +#162=ORIENTED_EDGE('',*,*,#239,.F.); +#163=ORIENTED_EDGE('',*,*,#211,.T.); +#164=ORIENTED_EDGE('',*,*,#261,.T.); +#165=ORIENTED_EDGE('',*,*,#212,.T.); +#166=ORIENTED_EDGE('',*,*,#262,.F.); +#167=ORIENTED_EDGE('',*,*,#189,.F.); +#168=ORIENTED_EDGE('',*,*,#262,.T.); +#169=ORIENTED_EDGE('',*,*,#217,.T.); +#170=ORIENTED_EDGE('',*,*,#263,.F.); +#171=ORIENTED_EDGE('',*,*,#190,.F.); +#172=ORIENTED_EDGE('',*,*,#263,.T.); +#173=ORIENTED_EDGE('',*,*,#216,.T.); +#174=ORIENTED_EDGE('',*,*,#264,.F.); +#175=ORIENTED_EDGE('',*,*,#191,.F.); +#176=ORIENTED_EDGE('',*,*,#264,.T.); +#177=ORIENTED_EDGE('',*,*,#215,.T.); +#178=ORIENTED_EDGE('',*,*,#265,.F.); +#179=ORIENTED_EDGE('',*,*,#192,.F.); +#180=ORIENTED_EDGE('',*,*,#265,.T.); +#181=ORIENTED_EDGE('',*,*,#214,.T.); +#182=ORIENTED_EDGE('',*,*,#266,.F.); +#183=ORIENTED_EDGE('',*,*,#193,.F.); +#184=ORIENTED_EDGE('',*,*,#266,.T.); +#185=ORIENTED_EDGE('',*,*,#213,.T.); +#186=ORIENTED_EDGE('',*,*,#261,.F.); +#187=ORIENTED_EDGE('',*,*,#188,.F.); +#188=EDGE_CURVE('',#267,#268,#321,.T.); +#189=EDGE_CURVE('',#268,#269,#322,.T.); +#190=EDGE_CURVE('',#269,#270,#323,.T.); +#191=EDGE_CURVE('',#270,#271,#324,.T.); +#192=EDGE_CURVE('',#271,#272,#325,.T.); +#193=EDGE_CURVE('',#272,#267,#326,.T.); +#194=EDGE_CURVE('',#273,#273,#18,.T.); +#195=EDGE_CURVE('',#274,#275,#327,.T.); +#196=EDGE_CURVE('',#276,#274,#328,.T.); +#197=EDGE_CURVE('',#276,#277,#329,.T.); +#198=EDGE_CURVE('',#278,#277,#19,.T.); +#199=EDGE_CURVE('',#278,#279,#330,.T.); +#200=EDGE_CURVE('',#280,#279,#20,.T.); +#201=EDGE_CURVE('',#280,#281,#331,.T.); +#202=EDGE_CURVE('',#281,#282,#332,.T.); +#203=EDGE_CURVE('',#283,#282,#21,.T.); +#204=EDGE_CURVE('',#283,#284,#333,.T.); +#205=EDGE_CURVE('',#285,#284,#22,.T.); +#206=EDGE_CURVE('',#285,#286,#334,.T.); +#207=EDGE_CURVE('',#287,#286,#335,.T.); +#208=EDGE_CURVE('',#288,#287,#336,.T.); +#209=EDGE_CURVE('',#289,#288,#337,.T.); +#210=EDGE_CURVE('',#275,#289,#338,.T.); +#211=EDGE_CURVE('',#290,#290,#23,.F.); +#212=EDGE_CURVE('',#291,#292,#339,.T.); +#213=EDGE_CURVE('',#293,#291,#340,.T.); +#214=EDGE_CURVE('',#294,#293,#341,.T.); +#215=EDGE_CURVE('',#295,#294,#342,.T.); +#216=EDGE_CURVE('',#296,#295,#343,.T.); +#217=EDGE_CURVE('',#292,#296,#344,.T.); +#218=EDGE_CURVE('',#297,#298,#345,.F.); +#219=EDGE_CURVE('',#297,#299,#346,.T.); +#220=EDGE_CURVE('',#299,#300,#347,.T.); +#221=EDGE_CURVE('',#298,#300,#348,.F.); +#222=EDGE_CURVE('',#301,#302,#349,.T.); +#223=EDGE_CURVE('',#302,#303,#350,.T.); +#224=EDGE_CURVE('',#303,#304,#351,.T.); +#225=EDGE_CURVE('',#304,#305,#352,.T.); +#226=EDGE_CURVE('',#305,#306,#353,.T.); +#227=EDGE_CURVE('',#307,#306,#354,.T.); +#228=EDGE_CURVE('',#307,#308,#24,.T.); +#229=EDGE_CURVE('',#309,#308,#355,.T.); +#230=EDGE_CURVE('',#309,#310,#25,.T.); +#231=EDGE_CURVE('',#311,#310,#356,.T.); +#232=EDGE_CURVE('',#312,#311,#357,.T.); +#233=EDGE_CURVE('',#312,#313,#26,.T.); +#234=EDGE_CURVE('',#314,#313,#358,.T.); +#235=EDGE_CURVE('',#314,#315,#27,.T.); +#236=EDGE_CURVE('',#316,#315,#359,.T.); +#237=EDGE_CURVE('',#316,#301,#360,.T.); +#238=EDGE_CURVE('',#317,#317,#28,.T.); +#239=EDGE_CURVE('',#318,#318,#29,.T.); +#240=EDGE_CURVE('',#302,#275,#361,.T.); +#241=EDGE_CURVE('',#301,#274,#362,.T.); +#242=EDGE_CURVE('',#303,#289,#363,.T.); +#243=EDGE_CURVE('',#304,#288,#364,.T.); +#244=EDGE_CURVE('',#305,#287,#365,.T.); +#245=EDGE_CURVE('',#306,#286,#366,.T.); +#246=EDGE_CURVE('',#307,#285,#367,.T.); +#247=EDGE_CURVE('',#308,#284,#368,.T.); +#248=EDGE_CURVE('',#309,#283,#369,.T.); +#249=EDGE_CURVE('',#310,#282,#370,.T.); +#250=EDGE_CURVE('',#311,#281,#371,.T.); +#251=EDGE_CURVE('',#312,#280,#372,.T.); +#252=EDGE_CURVE('',#313,#279,#373,.T.); +#253=EDGE_CURVE('',#314,#278,#374,.T.); +#254=EDGE_CURVE('',#315,#277,#375,.T.); +#255=EDGE_CURVE('',#316,#276,#376,.T.); +#256=EDGE_CURVE('',#319,#297,#377,.F.); +#257=EDGE_CURVE('',#319,#299,#378,.T.); +#258=EDGE_CURVE('',#319,#320,#379,.F.); +#259=EDGE_CURVE('',#320,#298,#380,.T.); +#260=EDGE_CURVE('',#320,#300,#381,.F.); +#261=EDGE_CURVE('',#268,#291,#382,.T.); +#262=EDGE_CURVE('',#269,#292,#383,.T.); +#263=EDGE_CURVE('',#270,#296,#384,.T.); +#264=EDGE_CURVE('',#271,#295,#385,.T.); +#265=EDGE_CURVE('',#272,#294,#386,.T.); +#266=EDGE_CURVE('',#267,#293,#387,.T.); +#267=VERTEX_POINT('',#798); +#268=VERTEX_POINT('',#799); +#269=VERTEX_POINT('',#801); +#270=VERTEX_POINT('',#803); +#271=VERTEX_POINT('',#805); +#272=VERTEX_POINT('',#807); +#273=VERTEX_POINT('',#810); +#274=VERTEX_POINT('',#812); +#275=VERTEX_POINT('',#813); +#276=VERTEX_POINT('',#815); +#277=VERTEX_POINT('',#817); +#278=VERTEX_POINT('',#819); +#279=VERTEX_POINT('',#821); +#280=VERTEX_POINT('',#823); +#281=VERTEX_POINT('',#825); +#282=VERTEX_POINT('',#827); +#283=VERTEX_POINT('',#829); +#284=VERTEX_POINT('',#831); +#285=VERTEX_POINT('',#833); +#286=VERTEX_POINT('',#835); +#287=VERTEX_POINT('',#837); +#288=VERTEX_POINT('',#839); +#289=VERTEX_POINT('',#841); +#290=VERTEX_POINT('',#844); +#291=VERTEX_POINT('',#847); +#292=VERTEX_POINT('',#848); +#293=VERTEX_POINT('',#850); +#294=VERTEX_POINT('',#852); +#295=VERTEX_POINT('',#854); +#296=VERTEX_POINT('',#856); +#297=VERTEX_POINT('',#859); +#298=VERTEX_POINT('',#860); +#299=VERTEX_POINT('',#862); +#300=VERTEX_POINT('',#864); +#301=VERTEX_POINT('',#867); +#302=VERTEX_POINT('',#868); +#303=VERTEX_POINT('',#870); +#304=VERTEX_POINT('',#872); +#305=VERTEX_POINT('',#874); +#306=VERTEX_POINT('',#876); +#307=VERTEX_POINT('',#878); +#308=VERTEX_POINT('',#880); +#309=VERTEX_POINT('',#882); +#310=VERTEX_POINT('',#884); +#311=VERTEX_POINT('',#886); +#312=VERTEX_POINT('',#888); +#313=VERTEX_POINT('',#890); +#314=VERTEX_POINT('',#892); +#315=VERTEX_POINT('',#894); +#316=VERTEX_POINT('',#896); +#317=VERTEX_POINT('',#899); +#318=VERTEX_POINT('',#901); +#319=VERTEX_POINT('',#936); +#320=VERTEX_POINT('',#940); +#321=LINE('',#797,#388); +#322=LINE('',#800,#389); +#323=LINE('',#802,#390); +#324=LINE('',#804,#391); +#325=LINE('',#806,#392); +#326=LINE('',#808,#393); +#327=LINE('',#811,#394); +#328=LINE('',#814,#395); +#329=LINE('',#816,#396); +#330=LINE('',#820,#397); +#331=LINE('',#824,#398); +#332=LINE('',#826,#399); +#333=LINE('',#830,#400); +#334=LINE('',#834,#401); +#335=LINE('',#836,#402); +#336=LINE('',#838,#403); +#337=LINE('',#840,#404); +#338=LINE('',#842,#405); +#339=LINE('',#846,#406); +#340=LINE('',#849,#407); +#341=LINE('',#851,#408); +#342=LINE('',#853,#409); +#343=LINE('',#855,#410); +#344=LINE('',#857,#411); +#345=LINE('',#858,#412); +#346=LINE('',#861,#413); +#347=LINE('',#863,#414); +#348=LINE('',#865,#415); +#349=LINE('',#866,#416); +#350=LINE('',#869,#417); +#351=LINE('',#871,#418); +#352=LINE('',#873,#419); +#353=LINE('',#875,#420); +#354=LINE('',#877,#421); +#355=LINE('',#881,#422); +#356=LINE('',#885,#423); +#357=LINE('',#887,#424); +#358=LINE('',#891,#425); +#359=LINE('',#895,#426); +#360=LINE('',#897,#427); +#361=LINE('',#903,#428); +#362=LINE('',#904,#429); +#363=LINE('',#906,#430); +#364=LINE('',#908,#431); +#365=LINE('',#910,#432); +#366=LINE('',#912,#433); +#367=LINE('',#914,#434); +#368=LINE('',#916,#435); +#369=LINE('',#918,#436); +#370=LINE('',#920,#437); +#371=LINE('',#922,#438); +#372=LINE('',#924,#439); +#373=LINE('',#926,#440); +#374=LINE('',#928,#441); +#375=LINE('',#930,#442); +#376=LINE('',#932,#443); +#377=LINE('',#935,#444); +#378=LINE('',#937,#445); +#379=LINE('',#939,#446); +#380=LINE('',#941,#447); +#381=LINE('',#943,#448); +#382=LINE('',#948,#449); +#383=LINE('',#949,#450); +#384=LINE('',#951,#451); +#385=LINE('',#953,#452); +#386=LINE('',#955,#453); +#387=LINE('',#957,#454); +#388=VECTOR('',#646,1.); +#389=VECTOR('',#647,1.); +#390=VECTOR('',#648,1.); +#391=VECTOR('',#649,1.); +#392=VECTOR('',#650,1.); +#393=VECTOR('',#651,1.); +#394=VECTOR('',#654,1.); +#395=VECTOR('',#655,1.); +#396=VECTOR('',#656,1.); +#397=VECTOR('',#659,1.); +#398=VECTOR('',#662,1.); +#399=VECTOR('',#663,1.); +#400=VECTOR('',#666,1.); +#401=VECTOR('',#669,1.); +#402=VECTOR('',#670,1.); +#403=VECTOR('',#671,1.); +#404=VECTOR('',#672,1.); +#405=VECTOR('',#673,1.); +#406=VECTOR('',#678,1.); +#407=VECTOR('',#679,1.); +#408=VECTOR('',#680,1.); +#409=VECTOR('',#681,1.); +#410=VECTOR('',#682,1.); +#411=VECTOR('',#683,1.); +#412=VECTOR('',#684,1.); +#413=VECTOR('',#685,1.); +#414=VECTOR('',#686,1.); +#415=VECTOR('',#687,1.); +#416=VECTOR('',#688,1.); +#417=VECTOR('',#689,1.); +#418=VECTOR('',#690,1.); +#419=VECTOR('',#691,1.); +#420=VECTOR('',#692,1.); +#421=VECTOR('',#693,1.); +#422=VECTOR('',#696,1.); +#423=VECTOR('',#699,1.); +#424=VECTOR('',#700,1.); +#425=VECTOR('',#703,1.); +#426=VECTOR('',#706,1.); +#427=VECTOR('',#707,1.); +#428=VECTOR('',#714,1.); +#429=VECTOR('',#715,1.); +#430=VECTOR('',#718,1.); +#431=VECTOR('',#721,1.); +#432=VECTOR('',#724,1.); +#433=VECTOR('',#727,1.); +#434=VECTOR('',#730,1.); +#435=VECTOR('',#733,1.); +#436=VECTOR('',#736,1.); +#437=VECTOR('',#739,1.); +#438=VECTOR('',#742,1.); +#439=VECTOR('',#745,1.); +#440=VECTOR('',#748,1.); +#441=VECTOR('',#751,1.); +#442=VECTOR('',#754,1.); +#443=VECTOR('',#757,1.); +#444=VECTOR('',#762,1.); +#445=VECTOR('',#763,1.); +#446=VECTOR('',#766,1.); +#447=VECTOR('',#767,1.); +#448=VECTOR('',#770,1.); +#449=VECTOR('',#779,1.); +#450=VECTOR('',#780,1.); +#451=VECTOR('',#783,1.); +#452=VECTOR('',#786,1.); +#453=VECTOR('',#789,1.); +#454=VECTOR('',#792,1.); +#455=EDGE_LOOP('',(#30,#31,#32,#33,#34,#35)); +#456=EDGE_LOOP('',(#36)); +#457=EDGE_LOOP('',(#37,#38,#39,#40,#41,#42,#43,#44,#45,#46,#47,#48,#49, +#50,#51,#52)); +#458=EDGE_LOOP('',(#53)); +#459=EDGE_LOOP('',(#54,#55,#56,#57,#58,#59)); +#460=EDGE_LOOP('',(#60,#61,#62,#63)); +#461=EDGE_LOOP('',(#64,#65,#66,#67,#68,#69,#70,#71,#72,#73,#74,#75,#76, +#77,#78,#79)); +#462=EDGE_LOOP('',(#80)); +#463=EDGE_LOOP('',(#81)); +#464=EDGE_LOOP('',(#82,#83,#84,#85)); +#465=EDGE_LOOP('',(#86,#87,#88,#89)); +#466=EDGE_LOOP('',(#90,#91,#92,#93)); +#467=EDGE_LOOP('',(#94,#95,#96,#97)); +#468=EDGE_LOOP('',(#98,#99,#100,#101)); +#469=EDGE_LOOP('',(#102,#103,#104,#105)); +#470=EDGE_LOOP('',(#106,#107,#108,#109)); +#471=EDGE_LOOP('',(#110,#111,#112,#113)); +#472=EDGE_LOOP('',(#114,#115,#116,#117)); +#473=EDGE_LOOP('',(#118,#119,#120,#121)); +#474=EDGE_LOOP('',(#122,#123,#124,#125)); +#475=EDGE_LOOP('',(#126,#127,#128,#129)); +#476=EDGE_LOOP('',(#130,#131,#132,#133)); +#477=EDGE_LOOP('',(#134,#135,#136,#137)); +#478=EDGE_LOOP('',(#138,#139,#140,#141)); +#479=EDGE_LOOP('',(#142,#143,#144,#145)); +#480=EDGE_LOOP('',(#146,#147,#148)); +#481=EDGE_LOOP('',(#149,#150,#151,#152)); +#482=EDGE_LOOP('',(#153,#154,#155)); +#483=EDGE_LOOP('',(#156,#157,#158,#159)); +#484=EDGE_LOOP('',(#160)); +#485=EDGE_LOOP('',(#161)); +#486=EDGE_LOOP('',(#162)); +#487=EDGE_LOOP('',(#163)); +#488=EDGE_LOOP('',(#164,#165,#166,#167)); +#489=EDGE_LOOP('',(#168,#169,#170,#171)); +#490=EDGE_LOOP('',(#172,#173,#174,#175)); +#491=EDGE_LOOP('',(#176,#177,#178,#179)); +#492=EDGE_LOOP('',(#180,#181,#182,#183)); +#493=EDGE_LOOP('',(#184,#185,#186,#187)); +#494=FACE_BOUND('',#455,.T.); +#495=FACE_BOUND('',#456,.T.); +#496=FACE_BOUND('',#457,.T.); +#497=FACE_BOUND('',#458,.T.); +#498=FACE_BOUND('',#459,.T.); +#499=FACE_BOUND('',#460,.T.); +#500=FACE_BOUND('',#461,.T.); +#501=FACE_BOUND('',#462,.T.); +#502=FACE_BOUND('',#463,.T.); +#503=FACE_BOUND('',#464,.T.); +#504=FACE_BOUND('',#465,.T.); +#505=FACE_BOUND('',#466,.T.); +#506=FACE_BOUND('',#467,.T.); +#507=FACE_BOUND('',#468,.T.); +#508=FACE_BOUND('',#469,.T.); +#509=FACE_BOUND('',#470,.T.); +#510=FACE_BOUND('',#471,.T.); +#511=FACE_BOUND('',#472,.T.); +#512=FACE_BOUND('',#473,.T.); +#513=FACE_BOUND('',#474,.T.); +#514=FACE_BOUND('',#475,.T.); +#515=FACE_BOUND('',#476,.T.); +#516=FACE_BOUND('',#477,.T.); +#517=FACE_BOUND('',#478,.T.); +#518=FACE_BOUND('',#479,.T.); +#519=FACE_BOUND('',#480,.T.); +#520=FACE_BOUND('',#481,.T.); +#521=FACE_BOUND('',#482,.T.); +#522=FACE_BOUND('',#483,.T.); +#523=FACE_BOUND('',#484,.T.); +#524=FACE_BOUND('',#485,.T.); +#525=FACE_BOUND('',#486,.T.); +#526=FACE_BOUND('',#487,.T.); +#527=FACE_BOUND('',#488,.T.); +#528=FACE_BOUND('',#489,.T.); +#529=FACE_BOUND('',#490,.T.); +#530=FACE_BOUND('',#491,.T.); +#531=FACE_BOUND('',#492,.T.); +#532=FACE_BOUND('',#493,.T.); +#533=PLANE('',#600); +#534=PLANE('',#607); +#535=PLANE('',#614); +#536=PLANE('',#615); +#537=PLANE('',#616); +#538=PLANE('',#617); +#539=PLANE('',#618); +#540=PLANE('',#619); +#541=PLANE('',#621); +#542=PLANE('',#623); +#543=PLANE('',#624); +#544=PLANE('',#626); +#545=PLANE('',#628); +#546=PLANE('',#629); +#547=PLANE('',#630); +#548=PLANE('',#631); +#549=PLANE('',#632); +#550=PLANE('',#633); +#551=PLANE('',#636); +#552=PLANE('',#637); +#553=PLANE('',#638); +#554=PLANE('',#639); +#555=PLANE('',#640); +#556=PLANE('',#641); +#557=ADVANCED_FACE('',(#494,#495,#496,#497),#533,.F.); +#558=ADVANCED_FACE('',(#498,#499,#500,#501,#502),#534,.T.); +#559=ADVANCED_FACE('',(#503),#535,.F.); +#560=ADVANCED_FACE('',(#504),#536,.F.); +#561=ADVANCED_FACE('',(#505),#537,.F.); +#562=ADVANCED_FACE('',(#506),#538,.F.); +#563=ADVANCED_FACE('',(#507),#539,.F.); +#564=ADVANCED_FACE('',(#508),#540,.T.); +#565=ADVANCED_FACE('',(#509),#12,.T.); +#566=ADVANCED_FACE('',(#510),#541,.T.); +#567=ADVANCED_FACE('',(#511),#13,.T.); +#568=ADVANCED_FACE('',(#512),#542,.T.); +#569=ADVANCED_FACE('',(#513),#543,.T.); +#570=ADVANCED_FACE('',(#514),#14,.T.); +#571=ADVANCED_FACE('',(#515),#544,.T.); +#572=ADVANCED_FACE('',(#516),#15,.T.); +#573=ADVANCED_FACE('',(#517),#545,.T.); +#574=ADVANCED_FACE('',(#518),#546,.F.); +#575=ADVANCED_FACE('',(#519),#547,.T.); +#576=ADVANCED_FACE('',(#520),#548,.T.); +#577=ADVANCED_FACE('',(#521),#549,.T.); +#578=ADVANCED_FACE('',(#522),#550,.T.); +#579=ADVANCED_FACE('',(#523,#524),#16,.F.); +#580=ADVANCED_FACE('',(#525,#526),#17,.F.); +#581=ADVANCED_FACE('',(#527),#551,.F.); +#582=ADVANCED_FACE('',(#528),#552,.F.); +#583=ADVANCED_FACE('',(#529),#553,.F.); +#584=ADVANCED_FACE('',(#530),#554,.F.); +#585=ADVANCED_FACE('',(#531),#555,.F.); +#586=ADVANCED_FACE('',(#532),#556,.F.); +#587=CLOSED_SHELL('',(#557,#558,#559,#560,#561,#562,#563,#564,#565,#566, +#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581, +#582,#583,#584,#585,#586)); +#588=STYLED_ITEM('',(#589),#596); +#589=PRESENTATION_STYLE_ASSIGNMENT((#590)); +#590=SURFACE_STYLE_USAGE(.BOTH.,#591); +#591=SURFACE_SIDE_STYLE('',(#592)); +#592=SURFACE_STYLE_FILL_AREA(#593); +#593=FILL_AREA_STYLE('',(#594)); +#594=FILL_AREA_STYLE_COLOUR('',#595); +#595=COLOUR_RGB('',0.917647058823529,0.917647058823529,0.917647058823529); +#596=MANIFOLD_SOLID_BREP('Part 1',#587); +#597=SHAPE_DEFINITION_REPRESENTATION(#965,#598); +#598=SHAPE_REPRESENTATION('Part 1',(#599),#960); +#599=AXIS2_PLACEMENT_3D('',#795,#642,#643); +#600=AXIS2_PLACEMENT_3D('',#796,#644,#645); +#601=AXIS2_PLACEMENT_3D('',#809,#652,#653); +#602=AXIS2_PLACEMENT_3D('',#818,#657,#658); +#603=AXIS2_PLACEMENT_3D('',#822,#660,#661); +#604=AXIS2_PLACEMENT_3D('',#828,#664,#665); +#605=AXIS2_PLACEMENT_3D('',#832,#667,#668); +#606=AXIS2_PLACEMENT_3D('',#843,#674,#675); +#607=AXIS2_PLACEMENT_3D('',#845,#676,#677); +#608=AXIS2_PLACEMENT_3D('',#879,#694,#695); +#609=AXIS2_PLACEMENT_3D('',#883,#697,#698); +#610=AXIS2_PLACEMENT_3D('',#889,#701,#702); +#611=AXIS2_PLACEMENT_3D('',#893,#704,#705); +#612=AXIS2_PLACEMENT_3D('',#898,#708,#709); +#613=AXIS2_PLACEMENT_3D('',#900,#710,#711); +#614=AXIS2_PLACEMENT_3D('',#902,#712,#713); +#615=AXIS2_PLACEMENT_3D('',#905,#716,#717); +#616=AXIS2_PLACEMENT_3D('',#907,#719,#720); +#617=AXIS2_PLACEMENT_3D('',#909,#722,#723); +#618=AXIS2_PLACEMENT_3D('',#911,#725,#726); +#619=AXIS2_PLACEMENT_3D('',#913,#728,#729); +#620=AXIS2_PLACEMENT_3D('',#915,#731,#732); +#621=AXIS2_PLACEMENT_3D('',#917,#734,#735); +#622=AXIS2_PLACEMENT_3D('',#919,#737,#738); +#623=AXIS2_PLACEMENT_3D('',#921,#740,#741); +#624=AXIS2_PLACEMENT_3D('',#923,#743,#744); +#625=AXIS2_PLACEMENT_3D('',#925,#746,#747); +#626=AXIS2_PLACEMENT_3D('',#927,#749,#750); +#627=AXIS2_PLACEMENT_3D('',#929,#752,#753); +#628=AXIS2_PLACEMENT_3D('',#931,#755,#756); +#629=AXIS2_PLACEMENT_3D('',#933,#758,#759); +#630=AXIS2_PLACEMENT_3D('',#934,#760,#761); +#631=AXIS2_PLACEMENT_3D('',#938,#764,#765); +#632=AXIS2_PLACEMENT_3D('',#942,#768,#769); +#633=AXIS2_PLACEMENT_3D('',#944,#771,#772); +#634=AXIS2_PLACEMENT_3D('',#945,#773,#774); +#635=AXIS2_PLACEMENT_3D('',#946,#775,#776); +#636=AXIS2_PLACEMENT_3D('',#947,#777,#778); +#637=AXIS2_PLACEMENT_3D('',#950,#781,#782); +#638=AXIS2_PLACEMENT_3D('',#952,#784,#785); +#639=AXIS2_PLACEMENT_3D('',#954,#787,#788); +#640=AXIS2_PLACEMENT_3D('',#956,#790,#791); +#641=AXIS2_PLACEMENT_3D('',#958,#793,#794); +#642=DIRECTION('',(0.,0.,1.)); +#643=DIRECTION('',(1.,0.,0.)); +#644=DIRECTION('',(0.,1.,0.)); +#645=DIRECTION('',(1.,0.,0.)); +#646=DIRECTION('',(-0.266495428889882,0.,0.963836182336396)); +#647=DIRECTION('',(-0.999997598615371,0.,0.00219152081706934)); +#648=DIRECTION('',(-1.,0.,0.)); +#649=DIRECTION('',(0.,0.,1.)); +#650=DIRECTION('',(1.,0.,0.)); +#651=DIRECTION('',(-0.213058124893242,0.,-0.977039526025931)); +#652=DIRECTION('',(0.,1.,0.)); +#653=DIRECTION('',(1.,0.,0.)); +#654=DIRECTION('',(-0.303682828230025,0.,-0.952773183836643)); +#655=DIRECTION('',(0.707106781186547,0.,-0.707106781186548)); +#656=DIRECTION('',(-1.,0.,0.)); +#657=DIRECTION('',(0.,1.,0.)); +#658=DIRECTION('',(1.,0.,0.)); +#659=DIRECTION('',(-0.707106781186547,0.,-0.707106781186548)); +#660=DIRECTION('',(0.,1.,0.)); +#661=DIRECTION('',(1.,0.,0.)); +#662=DIRECTION('',(0.303682828230025,0.,-0.952773183836643)); +#663=DIRECTION('',(-0.718602345804687,0.,-0.695421216676628)); +#664=DIRECTION('',(0.,1.,0.)); +#665=DIRECTION('',(1.,0.,0.)); +#666=DIRECTION('',(0.695421216676628,0.,-0.718602345804686)); +#667=DIRECTION('',(0.,1.,0.)); +#668=DIRECTION('',(1.,0.,0.)); +#669=DIRECTION('',(0.718602345804687,0.,0.695421216676628)); +#670=DIRECTION('',(-1.,0.,0.)); +#671=DIRECTION('',(-0.718602345804687,0.,0.695421216676628)); +#672=DIRECTION('',(-0.695421216676628,0.,-0.718602345804686)); +#673=DIRECTION('',(0.718602345804687,0.,-0.695421216676628)); +#674=DIRECTION('',(0.,1.,0.)); +#675=DIRECTION('',(1.,0.,0.)); +#676=DIRECTION('',(0.,1.,0.)); +#677=DIRECTION('',(1.,0.,0.)); +#678=DIRECTION('',(-0.999997598615371,0.,0.00219152081706934)); +#679=DIRECTION('',(-0.266495428889882,0.,0.963836182336396)); +#680=DIRECTION('',(-0.213058124893242,0.,-0.977039526025931)); +#681=DIRECTION('',(1.,0.,0.)); +#682=DIRECTION('',(0.,0.,1.)); +#683=DIRECTION('',(-1.,0.,0.)); +#684=DIRECTION('',(0.085015328616355,0.,0.996379643459386)); +#685=DIRECTION('',(-1.,0.,3.06657471648694E-16)); +#686=DIRECTION('',(0.085015328616355,0.,-0.996379643459386)); +#687=DIRECTION('',(1.,0.,0.)); +#688=DIRECTION('',(-0.303682828230025,0.,-0.952773183836643)); +#689=DIRECTION('',(0.718602345804687,0.,-0.695421216676628)); +#690=DIRECTION('',(-0.695421216676628,0.,-0.718602345804686)); +#691=DIRECTION('',(-0.718602345804687,0.,0.695421216676628)); +#692=DIRECTION('',(-1.,0.,0.)); +#693=DIRECTION('',(0.718602345804687,0.,0.695421216676628)); +#694=DIRECTION('',(0.,1.,0.)); +#695=DIRECTION('',(1.,0.,0.)); +#696=DIRECTION('',(0.695421216676628,0.,-0.718602345804686)); +#697=DIRECTION('',(0.,1.,0.)); +#698=DIRECTION('',(1.,0.,0.)); +#699=DIRECTION('',(-0.718602345804687,0.,-0.695421216676628)); +#700=DIRECTION('',(0.303682828230025,0.,-0.952773183836643)); +#701=DIRECTION('',(0.,1.,0.)); +#702=DIRECTION('',(1.,0.,0.)); +#703=DIRECTION('',(-0.707106781186547,0.,-0.707106781186548)); +#704=DIRECTION('',(0.,1.,0.)); +#705=DIRECTION('',(1.,0.,0.)); +#706=DIRECTION('',(-1.,0.,0.)); +#707=DIRECTION('',(0.707106781186547,0.,-0.707106781186548)); +#708=DIRECTION('',(0.,1.,0.)); +#709=DIRECTION('',(1.,0.,0.)); +#710=DIRECTION('',(0.,-1.,0.)); +#711=DIRECTION('',(1.,0.,0.)); +#712=DIRECTION('',(-0.952773183836643,0.,0.303682828230025)); +#713=DIRECTION('',(0.303682828230025,0.,0.952773183836643)); +#714=DIRECTION('',(0.,-1.,0.)); +#715=DIRECTION('',(0.,-1.,0.)); +#716=DIRECTION('',(-0.695421216676628,0.,-0.718602345804686)); +#717=DIRECTION('',(-0.718602345804687,0.,0.695421216676628)); +#718=DIRECTION('',(0.,-1.,0.)); +#719=DIRECTION('',(-0.718602345804686,0.,0.695421216676628)); +#720=DIRECTION('',(0.695421216676628,0.,0.718602345804686)); +#721=DIRECTION('',(0.,-1.,0.)); +#722=DIRECTION('',(0.695421216676628,0.,0.718602345804687)); +#723=DIRECTION('',(0.718602345804687,0.,-0.695421216676628)); +#724=DIRECTION('',(0.,-1.,0.)); +#725=DIRECTION('',(0.,0.,1.)); +#726=DIRECTION('',(0.,-1.,0.)); +#727=DIRECTION('',(0.,-1.,0.)); +#728=DIRECTION('',(0.695421216676628,0.,-0.718602345804686)); +#729=DIRECTION('',(-0.718602345804687,0.,-0.695421216676628)); +#730=DIRECTION('',(0.,-1.,0.)); +#731=DIRECTION('',(0.,-1.,0.)); +#732=DIRECTION('',(-1.,0.,0.)); +#733=DIRECTION('',(0.,-1.,0.)); +#734=DIRECTION('',(-0.718602345804686,0.,-0.695421216676628)); +#735=DIRECTION('',(-0.695421216676628,0.,0.718602345804686)); +#736=DIRECTION('',(0.,-1.,0.)); +#737=DIRECTION('',(0.,-1.,0.)); +#738=DIRECTION('',(-1.,0.,0.)); +#739=DIRECTION('',(0.,-1.,0.)); +#740=DIRECTION('',(-0.695421216676628,0.,0.718602345804686)); +#741=DIRECTION('',(0.718602345804687,0.,0.695421216676628)); +#742=DIRECTION('',(0.,-1.,0.)); +#743=DIRECTION('',(-0.952773183836643,0.,-0.303682828230025)); +#744=DIRECTION('',(-0.303682828230025,0.,0.952773183836643)); +#745=DIRECTION('',(0.,-1.,0.)); +#746=DIRECTION('',(0.,-1.,0.)); +#747=DIRECTION('',(-1.,0.,0.)); +#748=DIRECTION('',(0.,-1.,0.)); +#749=DIRECTION('',(-0.707106781186548,0.,0.707106781186547)); +#750=DIRECTION('',(0.707106781186547,0.,0.707106781186548)); +#751=DIRECTION('',(0.,-1.,0.)); +#752=DIRECTION('',(0.,-1.,0.)); +#753=DIRECTION('',(-1.,0.,0.)); +#754=DIRECTION('',(0.,-1.,0.)); +#755=DIRECTION('',(0.,0.,1.)); +#756=DIRECTION('',(0.,-1.,0.)); +#757=DIRECTION('',(0.,-1.,0.)); +#758=DIRECTION('',(-0.707106781186548,0.,-0.707106781186547)); +#759=DIRECTION('',(-0.707106781186547,0.,0.707106781186548)); +#760=DIRECTION('',(2.88163763217142E-16,0.342020143325668,0.939692620785908)); +#761=DIRECTION('',(-1.04883032405173E-16,0.939692620785908,-0.342020143325668)); +#762=DIRECTION('',(-0.349023821871155,0.88059897163896,-0.320511814002009)); +#763=DIRECTION('',(-0.349023821871155,-0.88059897163896,0.320511814002009)); +#764=DIRECTION('',(0.93629059846008,0.342020143325668,-0.0798882769544779)); +#765=DIRECTION('',(-0.340781908462758,0.939692620785908,0.0290769548782445)); +#766=DIRECTION('',(5.27512265516559E-18,0.227455280238187,0.973788527089824)); +#767=DIRECTION('',(0.29964820828413,-0.89651352264206,-0.326304236858849)); +#768=DIRECTION('',(0.,0.342020143325668,-0.939692620785908)); +#769=DIRECTION('',(0.,0.939692620785908,0.342020143325668)); +#770=DIRECTION('',(0.29964820828413,0.89651352264206,0.326304236858849)); +#771=DIRECTION('',(-0.93629059846008,0.342020143325668,-0.0798882769544778)); +#772=DIRECTION('',(0.340781908462758,0.939692620785908,0.0290769548782445)); +#773=DIRECTION('',(0.,1.,0.)); +#774=DIRECTION('',(1.,0.,0.)); +#775=DIRECTION('',(0.,1.,0.)); +#776=DIRECTION('',(1.,0.,0.)); +#777=DIRECTION('',(-0.00219152081706934,0.,-0.999997598615371)); +#778=DIRECTION('',(-0.999997598615371,0.,0.00219152081706934)); +#779=DIRECTION('',(0.,1.,0.)); +#780=DIRECTION('',(0.,1.,0.)); +#781=DIRECTION('',(0.,0.,-1.)); +#782=DIRECTION('',(0.,1.,0.)); +#783=DIRECTION('',(0.,1.,0.)); +#784=DIRECTION('',(-1.,0.,0.)); +#785=DIRECTION('',(0.,1.,0.)); +#786=DIRECTION('',(0.,1.,0.)); +#787=DIRECTION('',(0.,0.,1.)); +#788=DIRECTION('',(0.,-1.,0.)); +#789=DIRECTION('',(0.,1.,0.)); +#790=DIRECTION('',(0.977039526025931,0.,-0.213058124893242)); +#791=DIRECTION('',(-0.213058124893242,0.,-0.977039526025931)); +#792=DIRECTION('',(0.,1.,0.)); +#793=DIRECTION('',(-0.963836182336396,0.,-0.266495428889882)); +#794=DIRECTION('',(-0.266495428889882,0.,0.963836182336396)); +#795=CARTESIAN_POINT('',(0.,0.,0.)); +#796=CARTESIAN_POINT('',(0.000403056515455171,0.,-0.0333451765527338)); +#797=CARTESIAN_POINT('',(0.0215502388783335,0.,-0.0274980963778158)); +#798=CARTESIAN_POINT('',(0.0190522437020891,0.,-0.0184635769333528)); +#799=CARTESIAN_POINT('',(0.0164742856100485,0.,-0.00913985496181237)); +#800=CARTESIAN_POINT('',(0.000456180040532926,0.,-0.00910475086570832)); +#801=CARTESIAN_POINT('',(-5.20417042793042E-18,0.,-0.00910375113525243)); +#802=CARTESIAN_POINT('',(0.000403056515455171,0.,-0.00910375113525243)); +#803=CARTESIAN_POINT('',(-0.0219255222314632,0.,-0.00910375113525243)); +#804=CARTESIAN_POINT('',(-0.0219255222314632,0.,-0.0333451765527338)); +#805=CARTESIAN_POINT('',(-0.0219255222314632,0.,-0.00353451976078464)); +#806=CARTESIAN_POINT('',(0.000403056515455171,0.,-0.00353451976078464)); +#807=CARTESIAN_POINT('',(0.0223077485643632,0.,-0.00353451976078463)); +#808=CARTESIAN_POINT('',(0.0151078407072698,0.,-0.0365517753273105)); +#809=CARTESIAN_POINT('',(-0.016428276640485,0.,-0.0480095168479337)); +#810=CARTESIAN_POINT('',(-0.0114927539352016,0.,-0.0480095168479337)); +#811=CARTESIAN_POINT('',(0.0343907974147891,0.,-0.0311671147355531)); +#812=CARTESIAN_POINT('',(0.0420710678118655,0.,-0.00707106781186548)); +#813=CARTESIAN_POINT('',(0.0267105270177126,0.,-0.0552631616592407)); +#814=CARTESIAN_POINT('',(0.0385355339059327,0.,-0.00353553390593274)); +#815=CARTESIAN_POINT('',(0.035,0.,0.)); +#816=CARTESIAN_POINT('',(-0.016287587590799,0.,0.)); +#817=CARTESIAN_POINT('',(-0.0325751751815982,0.,-1.56125112837912E-17)); +#818=CARTESIAN_POINT('',(-0.0325751751815982,0.,-0.0058540449629647)); +#819=CARTESIAN_POINT('',(-0.0367146100722814,0.,-0.00171461007228142)); +#820=CARTESIAN_POINT('',(-0.0381324773904776,0.,-0.00313247739047756)); +#821=CARTESIAN_POINT('',(-0.0395503447086737,0.,-0.00455034470867372)); +#822=CARTESIAN_POINT('',(-0.0354109098179905,0.,-0.008689779599357)); +#823=CARTESIAN_POINT('',(-0.0409884868756772,0.,-0.0104675525302958)); +#824=CARTESIAN_POINT('',(-0.0338495069466949,0.,-0.0328653570947683)); +#825=CARTESIAN_POINT('',(-0.0267105270177126,0.,-0.0552631616592407)); +#826=CARTESIAN_POINT('',(-0.0277692838722956,0.,-0.056287764465337)); +#827=CARTESIAN_POINT('',(-0.0288280407268787,0.,-0.0573123672714333)); +#828=CARTESIAN_POINT('',(-0.0253509346434956,0.,-0.0609053790004567)); +#829=CARTESIAN_POINT('',(-0.0289439463725189,0.,-0.0643824850838399)); +#830=CARTESIAN_POINT('',(-0.0283309052949746,0.,-0.0650159612358953)); +#831=CARTESIAN_POINT('',(-0.0277178642174302,0.,-0.0656494373879507)); +#832=CARTESIAN_POINT('',(-0.0266769484999133,0.,-0.0646421001882331)); +#833=CARTESIAN_POINT('',(-0.0256696113001957,0.,-0.06568301590575)); +#834=CARTESIAN_POINT('',(-0.0231412794977803,0.,-0.0632362446302832)); +#835=CARTESIAN_POINT('',(-0.0206129476953649,0.,-0.0607894733548164)); +#836=CARTESIAN_POINT('',(0.0103064738476824,0.,-0.0607894733548164)); +#837=CARTESIAN_POINT('',(0.0206129476953649,0.,-0.0607894733548164)); +#838=CARTESIAN_POINT('',(0.0236617373565387,0.,-0.063739913230142)); +#839=CARTESIAN_POINT('',(0.0267105270177126,0.,-0.0666903531054676)); +#840=CARTESIAN_POINT('',(0.0295657897368073,0.,-0.063739913230142)); +#841=CARTESIAN_POINT('',(0.0324210524559021,0.,-0.0607894733548164)); +#842=CARTESIAN_POINT('',(0.0295657897368073,0.,-0.0580263175070286)); +#843=CARTESIAN_POINT('',(0.016428276640485,0.,-0.0480095168479337)); +#844=CARTESIAN_POINT('',(0.0213637993457684,0.,-0.0480095168479337)); +#845=CARTESIAN_POINT('',(0.000403056515455171,0.003,-0.0333451765527338)); +#846=CARTESIAN_POINT('',(0.00823714280502423,0.003,-0.0091218030485324)); +#847=CARTESIAN_POINT('',(0.0164742856100485,0.003,-0.00913985496181237)); +#848=CARTESIAN_POINT('',(-5.20417042793042E-18,0.003,-0.00910375113525243)); +#849=CARTESIAN_POINT('',(0.0177632646560688,0.003,-0.0138017159475826)); +#850=CARTESIAN_POINT('',(0.0190522437020891,0.003,-0.0184635769333528)); +#851=CARTESIAN_POINT('',(0.0206799961332261,0.003,-0.0109990483470687)); +#852=CARTESIAN_POINT('',(0.0223077485643632,0.003,-0.00353451976078463)); +#853=CARTESIAN_POINT('',(0.000191113166449982,0.003,-0.00353451976078464)); +#854=CARTESIAN_POINT('',(-0.0219255222314632,0.003,-0.00353451976078464)); +#855=CARTESIAN_POINT('',(-0.0219255222314632,0.003,-0.00631913544801854)); +#856=CARTESIAN_POINT('',(-0.0219255222314632,0.003,-0.00910375113525243)); +#857=CARTESIAN_POINT('',(-0.0109627611157316,0.003,-0.00910375113525243)); +#858=CARTESIAN_POINT('',(0.00563643376336433,0.003,-0.0134438107408346)); +#859=CARTESIAN_POINT('',(0.00565687660127879,0.003,-0.0132042206823826)); +#860=CARTESIAN_POINT('',(0.0025594683829695,0.003,-0.0495058447122574)); +#861=CARTESIAN_POINT('',(0.00282843830063939,0.003,-0.0132042206823826)); +#862=CARTESIAN_POINT('',(-0.00565687660127879,0.003,-0.0132042206823826)); +#863=CARTESIAN_POINT('',(-0.00559554808753541,0.003,-0.0139229908577385)); +#864=CARTESIAN_POINT('',(-0.0025594683829695,0.003,-0.0495058447122574)); +#865=CARTESIAN_POINT('',(0.00282843830063939,0.003,-0.0495058447122574)); +#866=CARTESIAN_POINT('',(0.0343907974147891,0.003,-0.0311671147355531)); +#867=CARTESIAN_POINT('',(0.0420710678118655,0.003,-0.00707106781186548)); +#868=CARTESIAN_POINT('',(0.0267105270177126,0.003,-0.0552631616592407)); +#869=CARTESIAN_POINT('',(0.0295657897368073,0.003,-0.0580263175070286)); +#870=CARTESIAN_POINT('',(0.0324210524559021,0.003,-0.0607894733548164)); +#871=CARTESIAN_POINT('',(0.0295657897368073,0.003,-0.063739913230142)); +#872=CARTESIAN_POINT('',(0.0267105270177126,0.003,-0.0666903531054676)); +#873=CARTESIAN_POINT('',(0.0236617373565387,0.003,-0.063739913230142)); +#874=CARTESIAN_POINT('',(0.0206129476953649,0.003,-0.0607894733548164)); +#875=CARTESIAN_POINT('',(0.0103064738476824,0.003,-0.0607894733548164)); +#876=CARTESIAN_POINT('',(-0.0206129476953649,0.003,-0.0607894733548164)); +#877=CARTESIAN_POINT('',(-0.0231412794977803,0.003,-0.0632362446302832)); +#878=CARTESIAN_POINT('',(-0.0256696113001957,0.003,-0.06568301590575)); +#879=CARTESIAN_POINT('',(-0.0266769484999133,0.003,-0.0646421001882331)); +#880=CARTESIAN_POINT('',(-0.0277178642174302,0.003,-0.0656494373879507)); +#881=CARTESIAN_POINT('',(-0.0283309052949746,0.003,-0.0650159612358953)); +#882=CARTESIAN_POINT('',(-0.0289439463725189,0.003,-0.0643824850838399)); +#883=CARTESIAN_POINT('',(-0.0253509346434956,0.003,-0.0609053790004567)); +#884=CARTESIAN_POINT('',(-0.0288280407268787,0.003,-0.0573123672714333)); +#885=CARTESIAN_POINT('',(-0.0277692838722956,0.003,-0.056287764465337)); +#886=CARTESIAN_POINT('',(-0.0267105270177126,0.003,-0.0552631616592407)); +#887=CARTESIAN_POINT('',(-0.0338495069466949,0.003,-0.0328653570947683)); +#888=CARTESIAN_POINT('',(-0.0409884868756772,0.003,-0.0104675525302958)); +#889=CARTESIAN_POINT('',(-0.0354109098179905,0.003,-0.008689779599357)); +#890=CARTESIAN_POINT('',(-0.0395503447086737,0.003,-0.00455034470867372)); +#891=CARTESIAN_POINT('',(-0.0381324773904776,0.003,-0.00313247739047756)); +#892=CARTESIAN_POINT('',(-0.0367146100722814,0.003,-0.00171461007228142)); +#893=CARTESIAN_POINT('',(-0.0325751751815982,0.003,-0.0058540449629647)); +#894=CARTESIAN_POINT('',(-0.0325751751815982,0.003,-1.56125112837912E-17)); +#895=CARTESIAN_POINT('',(-0.016287587590799,0.003,0.)); +#896=CARTESIAN_POINT('',(0.035,0.003,0.)); +#897=CARTESIAN_POINT('',(0.0385355339059327,0.003,-0.00353553390593274)); +#898=CARTESIAN_POINT('',(-0.016428276640485,0.003,-0.0480095168479337)); +#899=CARTESIAN_POINT('',(-0.0114927539352016,0.003,-0.0480095168479337)); +#900=CARTESIAN_POINT('',(0.016428276640485,0.003,-0.0480095168479337)); +#901=CARTESIAN_POINT('',(0.0213637993457684,0.003,-0.0480095168479337)); +#902=CARTESIAN_POINT('',(0.0343907974147891,0.003,-0.0311671147355531)); +#903=CARTESIAN_POINT('',(0.0267105270177126,0.003,-0.0552631616592407)); +#904=CARTESIAN_POINT('',(0.0420710678118655,0.003,-0.00707106781186548)); +#905=CARTESIAN_POINT('',(0.0295657897368073,0.003,-0.0580263175070286)); +#906=CARTESIAN_POINT('',(0.0324210524559021,0.003,-0.0607894733548164)); +#907=CARTESIAN_POINT('',(0.0295657897368073,0.003,-0.063739913230142)); +#908=CARTESIAN_POINT('',(0.0267105270177126,0.003,-0.0666903531054676)); +#909=CARTESIAN_POINT('',(0.0236617373565387,0.003,-0.063739913230142)); +#910=CARTESIAN_POINT('',(0.0206129476953649,0.003,-0.0607894733548164)); +#911=CARTESIAN_POINT('',(0.0103064738476824,0.003,-0.0607894733548164)); +#912=CARTESIAN_POINT('',(-0.0206129476953649,0.003,-0.0607894733548164)); +#913=CARTESIAN_POINT('',(-0.0231412794977803,0.003,-0.0632362446302832)); +#914=CARTESIAN_POINT('',(-0.0256696113001957,0.003,-0.06568301590575)); +#915=CARTESIAN_POINT('',(-0.0266769484999133,0.003,-0.0646421001882331)); +#916=CARTESIAN_POINT('',(-0.0277178642174302,0.003,-0.0656494373879507)); +#917=CARTESIAN_POINT('',(-0.0283309052949746,0.003,-0.0650159612358953)); +#918=CARTESIAN_POINT('',(-0.0289439463725189,0.003,-0.0643824850838399)); +#919=CARTESIAN_POINT('',(-0.0253509346434956,0.003,-0.0609053790004567)); +#920=CARTESIAN_POINT('',(-0.0288280407268787,0.003,-0.0573123672714333)); +#921=CARTESIAN_POINT('',(-0.0277692838722956,0.003,-0.056287764465337)); +#922=CARTESIAN_POINT('',(-0.0267105270177126,0.003,-0.0552631616592407)); +#923=CARTESIAN_POINT('',(-0.0338495069466949,0.003,-0.0328653570947683)); +#924=CARTESIAN_POINT('',(-0.0409884868756772,0.003,-0.0104675525302958)); +#925=CARTESIAN_POINT('',(-0.0354109098179905,0.003,-0.008689779599357)); +#926=CARTESIAN_POINT('',(-0.0395503447086737,0.003,-0.00455034470867372)); +#927=CARTESIAN_POINT('',(-0.0381324773904776,0.003,-0.00313247739047756)); +#928=CARTESIAN_POINT('',(-0.0367146100722814,0.003,-0.00171461007228142)); +#929=CARTESIAN_POINT('',(-0.0325751751815982,0.003,-0.0058540449629647)); +#930=CARTESIAN_POINT('',(-0.0325751751815982,0.003,-1.56125112837912E-17)); +#931=CARTESIAN_POINT('',(-0.016287587590799,0.003,0.)); +#932=CARTESIAN_POINT('',(0.035,0.003,0.)); +#933=CARTESIAN_POINT('',(0.0385355339059327,0.003,-0.00353553390593274)); +#934=CARTESIAN_POINT('',(0.00282843830063939,0.003,-0.0132042206823826)); +#935=CARTESIAN_POINT('',(0.00531232295588997,0.00386932056435923,-0.0135206274918448)); +#936=CARTESIAN_POINT('',(-1.3010426069826E-18,0.0172724920352672,-0.0183989829520213)); +#937=CARTESIAN_POINT('',(-0.00462321566511233,0.00560796169307769,-0.0141534411107693)); +#938=CARTESIAN_POINT('',(0.00563643376336433,0.003,-0.0134438107408346)); +#939=CARTESIAN_POINT('',(0.,0.0176316294050728,-0.0168614330213291)); +#940=CARTESIAN_POINT('',(-2.16840434497101E-19,0.0106576397010564,-0.0467186917963377)); +#941=CARTESIAN_POINT('',(0.0025836189360135,0.00292774427884215,-0.0495321436440143)); +#942=CARTESIAN_POINT('',(0.00282843830063939,0.003,-0.0495058447122574)); +#943=CARTESIAN_POINT('',(-0.00207569336721363,0.0044474000896754,-0.0489790341625413)); +#944=CARTESIAN_POINT('',(-0.00559554808753541,0.003,-0.0139229908577385)); +#945=CARTESIAN_POINT('',(-0.016428276640485,-0.022,-0.0480095168479337)); +#946=CARTESIAN_POINT('',(0.016428276640485,-0.022,-0.0480095168479337)); +#947=CARTESIAN_POINT('',(0.00823714280502423,-0.022,-0.0091218030485324)); +#948=CARTESIAN_POINT('',(0.0164742856100485,-0.022,-0.00913985496181237)); +#949=CARTESIAN_POINT('',(-5.20417042793042E-18,-0.022,-0.00910375113525243)); +#950=CARTESIAN_POINT('',(-0.0109627611157316,-0.022,-0.00910375113525243)); +#951=CARTESIAN_POINT('',(-0.0219255222314632,-0.022,-0.00910375113525243)); +#952=CARTESIAN_POINT('',(-0.0219255222314632,-0.022,-0.00631913544801854)); +#953=CARTESIAN_POINT('',(-0.0219255222314632,-0.022,-0.00353451976078464)); +#954=CARTESIAN_POINT('',(0.000191113166449982,-0.022,-0.00353451976078464)); +#955=CARTESIAN_POINT('',(0.0223077485643632,-0.022,-0.00353451976078463)); +#956=CARTESIAN_POINT('',(0.0206799961332261,-0.022,-0.0109990483470687)); +#957=CARTESIAN_POINT('',(0.0190522437020891,-0.022,-0.0184635769333528)); +#958=CARTESIAN_POINT('',(0.0177632646560688,-0.022,-0.0138017159475826)); +#959=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#588), +#960); +#960=( +GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#961)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#964,#963,#962)) +REPRESENTATION_CONTEXT('Part 1','TOP_LEVEL_ASSEMBLY_PART') +); +#961=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-8),#964, +'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model'); +#962=( +NAMED_UNIT(*) +SI_UNIT($,.STERADIAN.) +SOLID_ANGLE_UNIT() +); +#963=( +NAMED_UNIT(*) +PLANE_ANGLE_UNIT() +SI_UNIT($,.RADIAN.) +); +#964=( +LENGTH_UNIT() +NAMED_UNIT(*) +SI_UNIT($,.METRE.) +); +#965=PRODUCT_DEFINITION_SHAPE('','',#966); +#966=PRODUCT_DEFINITION('','',#968,#967); +#967=PRODUCT_DEFINITION_CONTEXT('',#974,'design'); +#968=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#970, + .NOT_KNOWN.); +#969=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#970)); +#970=PRODUCT('Part 1','Part 1','Part 1',(#972)); +#971=PRODUCT_CATEGORY('',''); +#972=PRODUCT_CONTEXT('',#974,'mechanical'); +#973=APPLICATION_PROTOCOL_DEFINITION('international standard', +'ap242_managed_model_based_3d_engineering',2020,#974); +#974=APPLICATION_CONTEXT('managed model based 3d engineering'); +ENDSEC; +END-ISO-10303-21; diff --git a/docs/CAD/design/mate-connectors/bear_glyph_table.h b/docs/CAD/design/mate-connectors/bear_glyph_table.h new file mode 100644 index 0000000000..c26631e7e0 --- /dev/null +++ b/docs/CAD/design/mate-connectors/bear_glyph_table.h @@ -0,0 +1,30 @@ +// Emitted by doc/design/mate-connectors/emit_glyph_table.py from bear.step — do not hand-edit. +// Normalised to the part's bounding span and centred: the renderer scales by one radius. +static const Vec2d kBearOutline[] = { // 12 verts, RDP eps 0.030, CCW + {+0.3842, +0.3294}, {+0.3156, +0.4002}, {+0.2424, +0.3294}, + {-0.2524, +0.3294}, {-0.3377, +0.3877}, {-0.3693, +0.3298}, + {-0.3256, +0.2631}, {-0.4893, -0.3337}, {-0.3960, -0.4002}, + {+0.4151, -0.4002}, {+0.5000, -0.3154}, {+0.3156, +0.2631}, +}; +static const Vec2d kBearChin[] = { // the CHIN BAR, flat. The muzzle is relief — see kBearCrest. + {-0.2682, -0.3578}, {+0.2628, -0.3578}, {+0.2237, -0.1786}, +}; +// {cx, cy, r}: two eyes, then the cheek dot that carries handedness (wi3z). +static const Vec3d kBearMarks[] = { + {-0.1997, +0.1760, +0.0590}, + {+0.1947, +0.1760, +0.0590}, + {+0.2797, +0.0760, +0.0380}, +}; +// THE MUZZLE, lifted off the mesh: a tapered wedge, base quad + crest edge, 6 facets. +// This is the only feature standing along +Z and the only one still legible edge-on. +static const double kBearPlateZ = +0.0360; +static const Vec2d kBearSnoutBase[] = { // CCW from the nose end + {-0.0727, -0.2417}, + {+0.0630, -0.2417}, + {+0.0259, +0.1939}, + {-0.0356, +0.1939}, +}; +static const Vec3d kBearCrest[] = { // nose (tall) -> tail (short) + {-0.0048, -0.1793, +0.2073}, + {-0.0048, +0.1605, +0.1279}, +}; diff --git a/docs/CAD/design/mate-connectors/bear_mesh.json b/docs/CAD/design/mate-connectors/bear_mesh.json new file mode 100644 index 0000000000..4bfb6aa361 --- /dev/null +++ b/docs/CAD/design/mate-connectors/bear_mesh.json @@ -0,0 +1 @@ +{"v": [[-36.7146, 0.0, -1.7146], [-36.0624, 0.0, -1.152], [-36.5065, 0.0, -1.5165], [-36.2889, 0.0, -1.3288], [-39.9409, 0.0, -4.9818], [-40.1196, 0.0, -5.2115], [-39.751, 0.0, -4.7612], [-39.5503, 0.0, -4.5503], [-35.8275, 0.0, -0.9866], [-35.3348, 0.0, -0.6912], [-35.5848, 0.0, -0.8329], [-40.4417, 0.0, -5.6962], [-40.5842, 0.0, -5.95], [-40.2867, 0.0, -5.4499], [-35.0781, 0.0, -0.5621], [-40.714, 0.0, -6.2105], [-34.5473, 0.0, -0.3422], [-34.8154, 0.0, -0.4456], [-40.8307, 0.0, -6.4772], [-40.934, 0.0, -6.7493], [-41.0236, 0.0, -7.0262], [-33.9976, 0.0, -0.1754], [-34.2745, 0.0, -0.2521], [-41.161, 0.0, -7.5917], [-41.2085, 0.0, -7.8789], [-41.0994, 0.0, -7.3072], [-33.149, 0.0, -0.0282], [-33.7172, 0.0, -0.1125], [-33.4341, 0.0, -0.0634], [-32.8624, 0.0, -0.0071], [-32.5752, 0.0, -0.0], [-41.2544, 0.0, -9.0404], [-41.2298, 0.0, -9.3304], [-41.2646, 0.0, -8.7495], [-41.2604, 0.0, -8.4585], [-41.2417, 0.0, -8.168], [-41.1908, 0.0, -9.6189], [-41.1374, 0.0, -9.905], [-41.07, 0.0, -10.1881], [-40.9885, 0.0, -10.4676], [-21.9255, 0.0, -9.1038], [-21.9255, 0.0, -3.5345], [-20.0463, 0.0, -44.6525], [-19.8744, 0.0, -44.4763], [-19.694, 0.0, -44.309], [-20.2091, 0.0, -44.837], [-19.5055, 0.0, -44.1508], [-20.3625, 0.0, -45.0294], [-19.3094, 0.0, -44.0022], [-20.5062, 0.0, -45.2292], [-19.106, 0.0, -43.8635], [-20.6397, 0.0, -45.436], [-18.896, 0.0, -43.7352], [-20.7628, 0.0, -45.6491], [-18.6799, 0.0, -43.6175], [-20.875, 0.0, -45.8681], [-18.4582, 0.0, -43.5108], [-20.9762, 0.0, -46.0924], [-18.2314, 0.0, -43.4152], [-21.0662, 0.0, -46.3215], [-18.0002, 0.0, -43.331], [-17.765, 0.0, -43.2585], [-17.5265, 0.0, -43.1977], [22.3077, 0.0, -3.5345], [-17.2853, 0.0, -43.149], [-17.042, 0.0, -43.1123], [-16.7971, 0.0, -43.0878], [-16.5513, 0.0, -43.0755], [-16.3052, 0.0, -43.0755], [-16.0594, 0.0, -43.0878], [-15.8146, 0.0, -43.1123], [-15.5712, 0.0, -43.149], [-15.33, 0.0, -43.1977], [-0.0, 0.0, -9.1038], [-15.0915, 0.0, -43.2585], [-14.8564, 0.0, -43.331], [-21.2112, 0.0, -49.2274], [-26.7105, 0.0, -55.2632], [-21.1445, 0.0, -49.4643], [-21.2659, 0.0, -48.9875], [-21.3087, 0.0, -48.7451], [-21.3393, 0.0, -48.5009], [-21.3577, 0.0, -48.2555], [-21.3638, 0.0, -48.0095], [-21.3577, 0.0, -47.7635], [-21.3393, 0.0, -47.5181], [-21.3087, 0.0, -47.2739], [-21.2659, 0.0, -47.0316], [-21.2112, 0.0, -46.7916], [-21.1445, 0.0, -46.5547], [-21.0662, 0.0, -49.6976], [-14.6251, 0.0, -43.4152], [-20.9762, 0.0, -49.9266], [-14.3984, 0.0, -43.5108], [-20.875, 0.0, -50.151], [-14.1766, 0.0, -43.6175], [-20.7628, 0.0, -50.37], [-13.9605, 0.0, -43.7352], [-20.6397, 0.0, -50.5831], [-13.7505, 0.0, -43.8635], [-20.5062, 0.0, -50.7898], [-13.5472, 0.0, -44.0022], [-20.3625, 0.0, -50.9896], [-13.351, 0.0, -44.1508], [-20.2091, 0.0, -51.182], [-13.1625, 0.0, -44.309], [-20.0463, 0.0, -51.3665], [-19.8744, 0.0, -51.5427], [-19.694, 0.0, -51.7101], [-19.5055, 0.0, -51.8683], [-19.3094, 0.0, -52.0169], [-19.106, 0.0, -52.1555], [35.0, 0.0, 0.0], [19.0522, 0.0, -18.4636], [16.4743, 0.0, -9.1399], [-27.6672, 0.0, -65.6993], [-27.6141, 0.0, -65.7466], [-27.7179, 0.0, -65.6494], [-27.5588, 0.0, -65.7913], [-27.4419, 0.0, -65.8722], [-27.3806, 0.0, -65.9082], [-27.5013, 0.0, -65.8332], [-27.3177, 0.0, -65.9412], [-27.2531, 0.0, -65.9711], [-27.1872, 0.0, -65.9978], [-27.1201, 0.0, -66.0212], [-27.0519, 0.0, -66.0413], [-26.9828, 0.0, -66.058], [-26.9129, 0.0, -66.0713], [-26.8425, 0.0, -66.0811], [-26.7007, 0.0, -66.0904], [-26.7717, 0.0, -66.0875], [-26.6296, 0.0, -66.0899], [-26.4879, 0.0, -66.0782], [-26.4177, 0.0, -66.0672], [-26.5586, 0.0, -66.0858], [-26.3481, 0.0, -66.0528], [-26.2792, 0.0, -66.035], [-26.2114, 0.0, -66.0138], [-26.1446, 0.0, -65.9893], [-26.0792, 0.0, -65.9615], [-26.0151, 0.0, -65.9306], [-25.9527, 0.0, -65.8966], [-25.892, 0.0, -65.8595], [-25.8332, 0.0, -65.8196], [-25.7765, 0.0, -65.7767], [-25.7219, 0.0, -65.7312], [-25.6696, 0.0, -65.683], [-28.9439, 0.0, -64.3825], [-29.1102, 0.0, -64.202], [-29.2675, 0.0, -64.0136], [-29.4153, 0.0, -63.8176], [-29.5533, 0.0, -63.6147], [-29.6811, 0.0, -63.4052], [-29.7986, 0.0, -63.1898], [-29.9053, 0.0, -62.9688], [-30.0011, 0.0, -62.7428], [-30.0856, 0.0, -62.5124], [-30.1588, 0.0, -62.2782], [-30.2204, 0.0, -62.0406], [-30.2702, 0.0, -61.8003], [-30.3082, 0.0, -61.5579], [-30.3342, 0.0, -61.3138], [-30.3483, 0.0, -61.0688], [-30.3503, 0.0, -60.8234], [-30.3402, 0.0, -60.5782], [-30.3182, 0.0, -60.3338], [-30.2841, 0.0, -60.0908], [-30.2382, 0.0, -59.8497], [-30.1805, 0.0, -59.6111], [-30.1112, 0.0, -59.3757], [-30.0304, 0.0, -59.144], [-29.9383, 0.0, -58.9165], [-29.8352, 0.0, -58.6938], [-29.7213, 0.0, -58.4764], [-29.5969, 0.0, -58.2649], [-13.7505, 0.0, -52.1555], [-20.6129, 0.0, -60.7895], [-13.5472, 0.0, -52.0169], [-13.9605, 0.0, -52.2838], [-14.1766, 0.0, -52.4015], [-14.3984, 0.0, -52.5083], [-14.6251, 0.0, -52.6039], [-14.8564, 0.0, -52.688], [-15.0915, 0.0, -52.7606], [-15.33, 0.0, -52.8213], [-15.5712, 0.0, -52.8701], [-15.8146, 0.0, -52.9067], [-16.0594, 0.0, -52.9312], [-16.3052, 0.0, -52.9435], [-16.5513, 0.0, -52.9435], [-16.7971, 0.0, -52.9312], [-17.042, 0.0, -52.9067], [-17.2853, 0.0, -52.8701], [-17.5265, 0.0, -52.8213], [-17.765, 0.0, -52.7606], [-18.0002, 0.0, -52.688], [-18.2314, 0.0, -52.6039], [-18.4582, 0.0, -52.5083], [-18.6799, 0.0, -52.4015], [-18.896, 0.0, -52.2838], [-29.4622, 0.0, -58.0598], [-29.3176, 0.0, -57.8615], [-29.1635, 0.0, -57.6705], [-29.0002, 0.0, -57.4873], [-28.828, 0.0, -57.3124], [42.0711, 0.0, -7.0711], [-12.9821, 0.0, -44.4763], [12.9821, 0.0, -44.4763], [-12.8103, 0.0, -44.6525], [12.8103, 0.0, -44.6525], [-12.6474, 0.0, -44.837], [13.1625, 0.0, -44.309], [12.6474, 0.0, -44.837], [13.351, 0.0, -44.1508], [-12.494, 0.0, -45.0294], [12.494, 0.0, -45.0294], [13.5472, 0.0, -44.0022], [-12.3504, 0.0, -45.2292], [12.3504, 0.0, -45.2292], [-12.2168, 0.0, -45.436], [13.7505, 0.0, -43.8635], [-12.0938, 0.0, -45.6491], [12.2168, 0.0, -45.436], [13.9605, 0.0, -43.7352], [12.0938, 0.0, -45.6491], [14.1766, 0.0, -43.6175], [-11.9815, 0.0, -45.8681], [11.9815, 0.0, -45.8681], [14.3984, 0.0, -43.5108], [-11.8803, 0.0, -46.0924], [11.8803, 0.0, -46.0924], [14.6251, 0.0, -43.4152], [11.7904, 0.0, -46.3215], [-11.7904, 0.0, -46.3215], [-11.712, 0.0, -46.5547], [14.8564, 0.0, -43.331], [11.712, 0.0, -46.5547], [15.0915, 0.0, -43.2585], [-11.6454, 0.0, -46.7916], [11.6454, 0.0, -46.7916], [15.33, 0.0, -43.1977], [-11.5906, 0.0, -47.0316], [11.5906, 0.0, -47.0316], [15.5712, 0.0, -43.149], [-11.5479, 0.0, -47.2739], [11.5479, 0.0, -47.2739], [15.8146, 0.0, -43.1123], [-11.5173, 0.0, -47.5181], [11.5173, 0.0, -47.5181], [16.0594, 0.0, -43.0878], [11.4989, 0.0, -47.7635], [-11.4989, 0.0, -47.7635], [16.3052, 0.0, -43.0755], [11.4928, 0.0, -48.0095], [-11.4928, 0.0, -48.0095], [16.5513, 0.0, -43.0755], [-11.4989, 0.0, -48.2555], [11.4989, 0.0, -48.2555], [-11.5173, 0.0, -48.5009], [16.7971, 0.0, -43.0878], [11.5173, 0.0, -48.5009], [-11.5479, 0.0, -48.7451], [17.042, 0.0, -43.1123], [11.5479, 0.0, -48.7451], [17.2853, 0.0, -43.149], [11.5906, 0.0, -48.9875], [-11.5906, 0.0, -48.9875], [17.5265, 0.0, -43.1977], [11.6454, 0.0, -49.2274], [-11.6454, 0.0, -49.2274], [17.765, 0.0, -43.2585], [-11.712, 0.0, -49.4643], [11.712, 0.0, -49.4643], [-11.7904, 0.0, -49.6976], [18.0002, 0.0, -43.331], [11.7904, 0.0, -49.6976], [18.2314, 0.0, -43.4152], [-11.8803, 0.0, -49.9266], [11.8803, 0.0, -49.9266], [18.4582, 0.0, -43.5108], [-11.9815, 0.0, -50.151], [11.9815, 0.0, -50.151], [18.6799, 0.0, -43.6175], [-12.0938, 0.0, -50.37], [12.0938, 0.0, -50.37], [18.896, 0.0, -43.7352], [-12.2168, 0.0, -50.5831], [12.2168, 0.0, -50.5831], [-12.3504, 0.0, -50.7898], [19.106, 0.0, -43.8635], [12.3504, 0.0, -50.7898], [19.3094, 0.0, -44.0022], [-12.494, 0.0, -50.9896], [12.494, 0.0, -50.9896], [19.5055, 0.0, -44.1508], [-12.6474, 0.0, -51.182], [12.6474, 0.0, -51.182], [-12.8103, 0.0, -51.3665], [19.694, 0.0, -44.309], [12.8103, 0.0, -51.3665], [-12.9821, 0.0, -51.5427], [19.8744, 0.0, -44.4763], [-13.1625, 0.0, -51.7101], [12.9821, 0.0, -51.5427], [20.0463, 0.0, -44.6525], [13.1625, 0.0, -51.7101], [20.2091, 0.0, -44.837], [13.351, 0.0, -51.8683], [-13.351, 0.0, -51.8683], [20.3625, 0.0, -45.0294], [13.5472, 0.0, -52.0169], [20.5062, 0.0, -45.2292], [20.6397, 0.0, -45.436], [20.7628, 0.0, -45.6491], [20.875, 0.0, -45.8681], [20.9762, 0.0, -46.0924], [20.6129, 0.0, -60.7895], [18.896, 0.0, -52.2838], [19.106, 0.0, -52.1555], [18.6799, 0.0, -52.4015], [18.4582, 0.0, -52.5083], [18.2314, 0.0, -52.6039], [18.0002, 0.0, -52.688], [17.765, 0.0, -52.7606], [17.5265, 0.0, -52.8213], [17.2853, 0.0, -52.8701], [17.042, 0.0, -52.9067], [16.7971, 0.0, -52.9312], [16.5513, 0.0, -52.9435], [16.3052, 0.0, -52.9435], [16.0594, 0.0, -52.9312], [15.8146, 0.0, -52.9067], [15.5712, 0.0, -52.8701], [15.33, 0.0, -52.8213], [15.0915, 0.0, -52.7606], [14.8564, 0.0, -52.688], [14.6251, 0.0, -52.6039], [14.3984, 0.0, -52.5083], [14.1766, 0.0, -52.4015], [13.9605, 0.0, -52.2838], [13.7505, 0.0, -52.1555], [26.7105, 0.0, -55.2632], [21.3577, 0.0, -48.2555], [21.3638, 0.0, -48.0095], [21.3393, 0.0, -48.5009], [21.3087, 0.0, -48.7451], [21.2659, 0.0, -48.9875], [21.2112, 0.0, -49.2274], [21.1445, 0.0, -49.4643], [21.0662, 0.0, -49.6976], [20.9762, 0.0, -49.9266], [20.875, 0.0, -50.151], [20.7628, 0.0, -50.37], [20.6397, 0.0, -50.5831], [20.5062, 0.0, -50.7898], [20.3625, 0.0, -50.9896], [20.2091, 0.0, -51.182], [20.0463, 0.0, -51.3665], [19.8744, 0.0, -51.5427], [19.694, 0.0, -51.7101], [21.0662, 0.0, -46.3215], [19.5055, 0.0, -51.8683], [21.1445, 0.0, -46.5547], [19.3094, 0.0, -52.0169], [21.2112, 0.0, -46.7916], [21.2659, 0.0, -47.0316], [21.3087, 0.0, -47.2739], [21.3393, 0.0, -47.5181], [21.3577, 0.0, -47.7635], [26.7105, 0.0, -66.6904], [32.4211, 0.0, -60.7895], [-40.1196, 3.0, -5.2115], [-39.9409, 3.0, -4.9818], [-39.751, 3.0, -4.7612], [-39.5503, 3.0, -4.5503], [-35.3348, 3.0, -0.6912], [-35.8275, 3.0, -0.9866], [-35.5848, 3.0, -0.8329], [-36.0624, 3.0, -1.152], [-40.714, 3.0, -6.2105], [-40.5842, 3.0, -5.95], [-40.4417, 3.0, -5.6962], [-40.2867, 3.0, -5.4499], [-34.5473, 3.0, -0.3422], [-35.0781, 3.0, -0.5621], [-34.8154, 3.0, -0.4456], [-41.0236, 3.0, -7.0262], [-40.934, 3.0, -6.7493], [-40.8307, 3.0, -6.4772], [-33.9976, 3.0, -0.1754], [-34.2745, 3.0, -0.2521], [-36.5065, 3.0, -1.5165], [-36.2889, 3.0, -1.3288], [-41.2085, 3.0, -7.8789], [-41.161, 3.0, -7.5917], [-41.0994, 3.0, -7.3072], [-33.149, 3.0, -0.0282], [-33.7172, 3.0, -0.1125], [-33.4341, 3.0, -0.0634], [-36.7146, 3.0, -1.7146], [-41.2417, 3.0, -8.168], [-32.8624, 3.0, -0.0071], [-32.5752, 3.0, -0.0], [-41.2298, 3.0, -9.3304], [-41.2544, 3.0, -9.0404], [-41.2646, 3.0, -8.7495], [-41.2604, 3.0, -8.4585], [-41.07, 3.0, -10.1881], [-41.1374, 3.0, -9.905], [-41.1908, 3.0, -9.6189], [-40.9885, 3.0, -10.4676], [-21.9255, 3.0, -9.1038], [-21.9255, 3.0, -3.5345], [5.6569, 3.0, -13.2042], [-5.6569, 3.0, -13.2042], [-0.0, 3.0, -9.1038], [-20.0463, 3.0, -44.6525], [-19.8744, 3.0, -44.4763], [-19.694, 3.0, -44.309], [-20.2091, 3.0, -44.837], [-19.5055, 3.0, -44.1508], [-20.3625, 3.0, -45.0294], [-19.3094, 3.0, -44.0022], [-20.5062, 3.0, -45.2292], [-19.106, 3.0, -43.8635], [-20.6397, 3.0, -45.436], [-18.896, 3.0, -43.7352], [-20.7628, 3.0, -45.6491], [-18.6799, 3.0, -43.6175], [-20.875, 3.0, -45.8681], [-18.4582, 3.0, -43.5108], [-20.9762, 3.0, -46.0924], [-18.2314, 3.0, -43.4152], [-21.0662, 3.0, -46.3215], [-18.0002, 3.0, -43.331], [-17.765, 3.0, -43.2585], [16.4743, 3.0, -9.1399], [-17.5265, 3.0, -43.1977], [22.3077, 3.0, -3.5345], [-17.2853, 3.0, -43.149], [-17.042, 3.0, -43.1123], [-16.7971, 3.0, -43.0878], [-16.5513, 3.0, -43.0755], [-16.3052, 3.0, -43.0755], [-16.0594, 3.0, -43.0878], [-15.8146, 3.0, -43.1123], [-15.5712, 3.0, -43.149], [-15.33, 3.0, -43.1977], [-15.0915, 3.0, -43.2585], [-14.8564, 3.0, -43.331], [-26.7105, 3.0, -55.2632], [-21.2112, 3.0, -49.2274], [-21.1445, 3.0, -49.4643], [-21.2659, 3.0, -48.9875], [-21.3087, 3.0, -48.7451], [-21.3393, 3.0, -48.5009], [-21.3577, 3.0, -48.2555], [-21.3638, 3.0, -48.0095], [-21.3577, 3.0, -47.7635], [-21.3393, 3.0, -47.5181], [-21.3087, 3.0, -47.2739], [-21.2659, 3.0, -47.0316], [-21.2112, 3.0, -46.7916], [-21.1445, 3.0, -46.5547], [-21.0662, 3.0, -49.6976], [-14.6251, 3.0, -43.4152], [-20.9762, 3.0, -49.9266], [-14.3984, 3.0, -43.5108], [-20.875, 3.0, -50.151], [-14.1766, 3.0, -43.6175], [-20.7628, 3.0, -50.37], [-13.9605, 3.0, -43.7352], [-20.6397, 3.0, -50.5831], [-13.7505, 3.0, -43.8635], [-20.5062, 3.0, -50.7898], [-13.5472, 3.0, -44.0022], [-20.3625, 3.0, -50.9896], [-13.351, 3.0, -44.1508], [-20.2091, 3.0, -51.182], [-13.1625, 3.0, -44.309], [-20.0463, 3.0, -51.3665], [-12.9821, 3.0, -44.4763], [-19.8744, 3.0, -51.5427], [-19.694, 3.0, -51.7101], [-19.5055, 3.0, -51.8683], [-19.3094, 3.0, -52.0169], [-19.106, 3.0, -52.1555], [35.0, 3.0, 0.0], [19.0522, 3.0, -18.4636], [-27.6141, 3.0, -65.7466], [-27.6672, 3.0, -65.6993], [-27.7179, 3.0, -65.6494], [-27.5588, 3.0, -65.7913], [-27.3806, 3.0, -65.9082], [-27.4419, 3.0, -65.8722], [-27.5013, 3.0, -65.8332], [-27.2531, 3.0, -65.9711], [-27.3177, 3.0, -65.9412], [-27.1872, 3.0, -65.9978], [-27.0519, 3.0, -66.0413], [-27.1201, 3.0, -66.0212], [-26.9129, 3.0, -66.0713], [-26.9828, 3.0, -66.058], [-26.8425, 3.0, -66.0811], [-26.7007, 3.0, -66.0904], [-26.7717, 3.0, -66.0875], [-26.5586, 3.0, -66.0858], [-26.6296, 3.0, -66.0899], [-26.2792, 3.0, -66.035], [-26.3481, 3.0, -66.0528], [-26.4177, 3.0, -66.0672], [-26.4879, 3.0, -66.0782], [-26.1446, 3.0, -65.9893], [-26.2114, 3.0, -66.0138], [-26.0792, 3.0, -65.9615], [-25.9527, 3.0, -65.8966], [-26.0151, 3.0, -65.9306], [-25.8332, 3.0, -65.8196], [-25.892, 3.0, -65.8595], [-25.7765, 3.0, -65.7767], [-25.6696, 3.0, -65.683], [-25.7219, 3.0, -65.7312], [-28.9439, 3.0, -64.3825], [-29.1102, 3.0, -64.202], [-29.2675, 3.0, -64.0136], [-29.4153, 3.0, -63.8176], [-29.5533, 3.0, -63.6147], [-29.6811, 3.0, -63.4052], [-29.7986, 3.0, -63.1898], [-29.9053, 3.0, -62.9688], [-30.0011, 3.0, -62.7428], [-30.0856, 3.0, -62.5124], [-30.1588, 3.0, -62.2782], [-30.2204, 3.0, -62.0406], [-30.2702, 3.0, -61.8003], [-30.3082, 3.0, -61.5579], [-30.3342, 3.0, -61.3138], [-30.3483, 3.0, -61.0688], [-30.3503, 3.0, -60.8234], [-30.3402, 3.0, -60.5782], [-30.3182, 3.0, -60.3338], [-30.2841, 3.0, -60.0908], [-30.2382, 3.0, -59.8497], [-30.1805, 3.0, -59.6111], [-30.1112, 3.0, -59.3757], [-30.0304, 3.0, -59.144], [-29.9383, 3.0, -58.9165], [-29.8352, 3.0, -58.6938], [-29.7213, 3.0, -58.4764], [-29.5969, 3.0, -58.2649], [-20.6129, 3.0, -60.7895], [-13.9605, 3.0, -52.2838], [-13.7505, 3.0, -52.1555], [-14.1766, 3.0, -52.4015], [-14.3984, 3.0, -52.5083], [-14.6251, 3.0, -52.6039], [-14.8564, 3.0, -52.688], [-15.0915, 3.0, -52.7606], [-15.33, 3.0, -52.8213], [-15.5712, 3.0, -52.8701], [-15.8146, 3.0, -52.9067], [-16.0594, 3.0, -52.9312], [-16.3052, 3.0, -52.9435], [-16.5513, 3.0, -52.9435], [-16.7971, 3.0, -52.9312], [-17.042, 3.0, -52.9067], [-17.2853, 3.0, -52.8701], [-17.5265, 3.0, -52.8213], [-17.765, 3.0, -52.7606], [-18.0002, 3.0, -52.688], [-18.2314, 3.0, -52.6039], [-18.4582, 3.0, -52.5083], [-18.6799, 3.0, -52.4015], [-18.896, 3.0, -52.2838], [-29.4622, 3.0, -58.0598], [-29.3176, 3.0, -57.8615], [-29.1635, 3.0, -57.6705], [-29.0002, 3.0, -57.4873], [-28.828, 3.0, -57.3124], [-2.5595, 3.0, -49.5058], [-11.4989, 3.0, -48.2555], [-11.4928, 3.0, -48.0095], [-11.5173, 3.0, -48.5009], [-11.5479, 3.0, -48.7451], [-11.5906, 3.0, -48.9875], [-11.6454, 3.0, -49.2274], [-11.712, 3.0, -49.4643], [-11.7904, 3.0, -49.6976], [-11.8803, 3.0, -49.9266], [-11.9815, 3.0, -50.151], [-12.8103, 3.0, -44.6525], [-12.0938, 3.0, -50.37], [-12.6474, 3.0, -44.837], [-12.2168, 3.0, -50.5831], [-12.494, 3.0, -45.0294], [-12.3504, 3.0, -50.7898], [-12.3504, 3.0, -45.2292], [-12.494, 3.0, -50.9896], [-12.2168, 3.0, -45.436], [-12.6474, 3.0, -51.182], [-12.0938, 3.0, -45.6491], [-12.8103, 3.0, -51.3665], [-11.9815, 3.0, -45.8681], [-12.9821, 3.0, -51.5427], [-11.8803, 3.0, -46.0924], [-13.1625, 3.0, -51.7101], [-11.7904, 3.0, -46.3215], [-13.351, 3.0, -51.8683], [-11.712, 3.0, -46.5547], [-13.5472, 3.0, -52.0169], [-11.6454, 3.0, -46.7916], [-11.5906, 3.0, -47.0316], [-11.5479, 3.0, -47.2739], [-11.5173, 3.0, -47.5181], [-11.4989, 3.0, -47.7635], [42.0711, 3.0, -7.0711], [2.5595, 3.0, -49.5058], [12.9821, 3.0, -44.4763], [12.8103, 3.0, -44.6525], [13.1625, 3.0, -44.309], [12.6474, 3.0, -44.837], [13.351, 3.0, -44.1508], [12.494, 3.0, -45.0294], [13.5472, 3.0, -44.0022], [12.3504, 3.0, -45.2292], [13.7505, 3.0, -43.8635], [12.2168, 3.0, -45.436], [13.9605, 3.0, -43.7352], [12.0938, 3.0, -45.6491], [14.1766, 3.0, -43.6175], [11.9815, 3.0, -45.8681], [14.3984, 3.0, -43.5108], [11.8803, 3.0, -46.0924], [14.6251, 3.0, -43.4152], [11.7904, 3.0, -46.3215], [14.8564, 3.0, -43.331], [11.712, 3.0, -46.5547], [15.0915, 3.0, -43.2585], [11.6454, 3.0, -46.7916], [15.33, 3.0, -43.1977], [11.5906, 3.0, -47.0316], [15.5712, 3.0, -43.149], [11.5479, 3.0, -47.2739], [15.8146, 3.0, -43.1123], [11.5173, 3.0, -47.5181], [16.0594, 3.0, -43.0878], [11.4989, 3.0, -47.7635], [16.3052, 3.0, -43.0755], [11.4928, 3.0, -48.0095], [16.5513, 3.0, -43.0755], [11.4989, 3.0, -48.2555], [16.7971, 3.0, -43.0878], [11.5173, 3.0, -48.5009], [17.042, 3.0, -43.1123], [11.5479, 3.0, -48.7451], [17.2853, 3.0, -43.149], [11.5906, 3.0, -48.9875], [17.5265, 3.0, -43.1977], [11.6454, 3.0, -49.2274], [17.765, 3.0, -43.2585], [11.712, 3.0, -49.4643], [18.0002, 3.0, -43.331], [11.7904, 3.0, -49.6976], [18.2314, 3.0, -43.4152], [11.8803, 3.0, -49.9266], [18.4582, 3.0, -43.5108], [11.9815, 3.0, -50.151], [18.6799, 3.0, -43.6175], [12.0938, 3.0, -50.37], [18.896, 3.0, -43.7352], [12.2168, 3.0, -50.5831], [19.106, 3.0, -43.8635], [12.3504, 3.0, -50.7898], [19.3094, 3.0, -44.0022], [12.494, 3.0, -50.9896], [19.5055, 3.0, -44.1508], [12.6474, 3.0, -51.182], [19.694, 3.0, -44.309], [12.8103, 3.0, -51.3665], [19.8744, 3.0, -44.4763], [12.9821, 3.0, -51.5427], [20.0463, 3.0, -44.6525], [13.1625, 3.0, -51.7101], [20.2091, 3.0, -44.837], [13.351, 3.0, -51.8683], [20.3625, 3.0, -45.0294], [13.5472, 3.0, -52.0169], [20.5062, 3.0, -45.2292], [13.7505, 3.0, -52.1555], [20.6397, 3.0, -45.436], [20.7628, 3.0, -45.6491], [20.875, 3.0, -45.8681], [20.9762, 3.0, -46.0924], [20.6129, 3.0, -60.7895], [13.9605, 3.0, -52.2838], [14.1766, 3.0, -52.4015], [14.3984, 3.0, -52.5083], [14.6251, 3.0, -52.6039], [14.8564, 3.0, -52.688], [15.0915, 3.0, -52.7606], [15.33, 3.0, -52.8213], [15.5712, 3.0, -52.8701], [15.8146, 3.0, -52.9067], [16.0594, 3.0, -52.9312], [16.3052, 3.0, -52.9435], [16.5513, 3.0, -52.9435], [16.7971, 3.0, -52.9312], [17.042, 3.0, -52.9067], [17.2853, 3.0, -52.8701], [17.5265, 3.0, -52.8213], [17.765, 3.0, -52.7606], [18.0002, 3.0, -52.688], [18.2314, 3.0, -52.6039], [18.4582, 3.0, -52.5083], [18.6799, 3.0, -52.4015], [18.896, 3.0, -52.2838], [19.106, 3.0, -52.1555], [26.7105, 3.0, -55.2632], [21.3638, 3.0, -48.0095], [21.3577, 3.0, -47.7635], [21.3393, 3.0, -47.5181], [21.3087, 3.0, -47.2739], [21.2659, 3.0, -47.0316], [21.2112, 3.0, -46.7916], [21.1445, 3.0, -46.5547], [19.3094, 3.0, -52.0169], [21.0662, 3.0, -46.3215], [19.5055, 3.0, -51.8683], [19.694, 3.0, -51.7101], [19.8744, 3.0, -51.5427], [20.0463, 3.0, -51.3665], [20.2091, 3.0, -51.182], [20.3625, 3.0, -50.9896], [20.5062, 3.0, -50.7898], [20.6397, 3.0, -50.5831], [20.7628, 3.0, -50.37], [20.875, 3.0, -50.151], [20.9762, 3.0, -49.9266], [21.0662, 3.0, -49.6976], [21.1445, 3.0, -49.4643], [21.2112, 3.0, -49.2274], [21.2659, 3.0, -48.9875], [21.3087, 3.0, -48.7451], [21.3393, 3.0, -48.5009], [21.3577, 3.0, -48.2555], [26.7105, 3.0, -66.6904], [32.4211, 3.0, -60.7895], [-0.0, 17.2725, -18.399], [-0.0, 10.6576, -46.7187]], "f": [[0, 1, 2], [2, 1, 3], [4, 5, 6], [6, 5, 7], [8, 9, 10], [11, 12, 13], [13, 12, 5], [8, 14, 9], [1, 14, 8], [12, 15, 5], [14, 16, 17], [18, 19, 15], [19, 20, 15], [5, 20, 7], [15, 20, 5], [16, 21, 22], [14, 21, 16], [1, 21, 14], [23, 24, 25], [25, 24, 20], [21, 26, 27], [27, 26, 28], [1, 26, 21], [0, 26, 1], [0, 29, 26], [0, 30, 29], [31, 32, 33], [33, 32, 34], [34, 32, 35], [36, 37, 32], [24, 38, 20], [32, 38, 35], [37, 38, 32], [35, 38, 24], [20, 39, 7], [38, 39, 20], [7, 39, 0], [0, 40, 30], [39, 40, 0], [30, 40, 41], [39, 42, 43], [43, 44, 39], [39, 45, 42], [44, 46, 39], [39, 47, 45], [46, 48, 39], [39, 49, 47], [39, 50, 40], [48, 50, 39], [39, 51, 49], [50, 52, 40], [39, 53, 51], [52, 54, 40], [39, 55, 53], [54, 56, 40], [39, 57, 55], [56, 58, 40], [39, 59, 57], [58, 60, 40], [60, 61, 40], [61, 62, 40], [41, 63, 30], [62, 64, 40], [64, 65, 40], [65, 66, 40], [66, 67, 40], [67, 68, 40], [68, 69, 40], [69, 70, 40], [70, 71, 40], [71, 72, 40], [40, 72, 73], [72, 74, 73], [74, 75, 73], [76, 77, 78], [79, 77, 76], [80, 77, 79], [81, 77, 80], [82, 77, 81], [83, 77, 82], [84, 77, 83], [85, 77, 84], [86, 77, 85], [87, 77, 86], [88, 77, 87], [89, 77, 88], [59, 77, 89], [39, 77, 59], [77, 90, 78], [75, 91, 73], [77, 92, 90], [91, 93, 73], [77, 94, 92], [93, 95, 73], [77, 96, 94], [95, 97, 73], [77, 98, 96], [97, 99, 73], [77, 100, 98], [99, 101, 73], [77, 102, 100], [101, 103, 73], [77, 104, 102], [103, 105, 73], [77, 106, 104], [77, 107, 106], [77, 108, 107], [77, 109, 108], [77, 110, 109], [77, 111, 110], [63, 112, 30], [73, 113, 114], [115, 116, 117], [116, 118, 117], [119, 120, 121], [121, 120, 118], [122, 123, 120], [118, 123, 117], [120, 123, 118], [123, 124, 117], [125, 126, 124], [124, 126, 117], [127, 128, 126], [128, 129, 126], [129, 130, 126], [131, 130, 129], [130, 132, 126], [133, 134, 135], [135, 134, 132], [132, 136, 126], [134, 136, 132], [137, 138, 136], [138, 139, 136], [139, 140, 136], [140, 141, 136], [142, 143, 141], [141, 143, 136], [143, 144, 136], [136, 145, 126], [144, 145, 136], [146, 147, 145], [145, 147, 126], [117, 147, 148], [148, 147, 149], [149, 147, 150], [150, 147, 151], [151, 147, 152], [152, 147, 153], [153, 147, 154], [154, 147, 155], [155, 147, 156], [156, 147, 157], [157, 147, 158], [158, 147, 159], [159, 147, 160], [160, 147, 161], [161, 147, 162], [162, 147, 163], [163, 147, 164], [164, 147, 165], [165, 147, 166], [166, 147, 167], [167, 147, 168], [168, 147, 169], [169, 147, 170], [170, 147, 171], [171, 147, 172], [172, 147, 173], [173, 147, 174], [174, 147, 175], [126, 147, 117], [176, 177, 178], [179, 177, 176], [180, 177, 179], [181, 177, 180], [182, 177, 181], [183, 177, 182], [184, 177, 183], [185, 177, 184], [186, 177, 185], [187, 177, 186], [188, 177, 187], [189, 177, 188], [190, 177, 189], [191, 177, 190], [192, 177, 191], [193, 177, 192], [194, 177, 193], [195, 177, 194], [77, 177, 111], [196, 177, 195], [197, 177, 196], [198, 177, 197], [199, 177, 198], [200, 177, 199], [111, 177, 200], [175, 177, 201], [201, 177, 202], [202, 177, 203], [203, 177, 204], [204, 177, 205], [205, 177, 77], [147, 177, 175], [113, 206, 63], [63, 206, 112], [207, 208, 105], [209, 210, 207], [211, 210, 209], [207, 210, 208], [105, 212, 73], [208, 212, 105], [211, 213, 210], [212, 214, 73], [215, 216, 211], [211, 216, 213], [73, 217, 113], [214, 217, 73], [218, 219, 215], [220, 219, 218], [215, 219, 216], [217, 221, 113], [222, 223, 220], [220, 223, 219], [221, 224, 113], [222, 225, 223], [224, 226, 113], [227, 228, 222], [222, 228, 225], [226, 229, 113], [230, 231, 227], [227, 231, 228], [229, 232, 113], [230, 233, 231], [234, 233, 230], [235, 233, 234], [232, 236, 113], [235, 237, 233], [236, 238, 113], [239, 240, 235], [235, 240, 237], [238, 241, 113], [242, 243, 239], [239, 243, 240], [241, 244, 113], [245, 246, 242], [242, 246, 243], [244, 247, 113], [248, 249, 245], [245, 249, 246], [247, 250, 113], [248, 251, 249], [252, 251, 248], [250, 253, 113], [252, 254, 251], [255, 254, 252], [253, 256, 113], [257, 258, 255], [259, 258, 257], [255, 258, 254], [256, 260, 113], [259, 261, 258], [262, 261, 259], [260, 263, 113], [262, 264, 261], [263, 265, 113], [262, 266, 264], [267, 266, 262], [265, 268, 113], [267, 269, 266], [270, 269, 267], [268, 271, 113], [272, 273, 270], [274, 273, 272], [270, 273, 269], [271, 275, 113], [274, 276, 273], [275, 277, 113], [278, 279, 274], [274, 279, 276], [277, 280, 113], [281, 282, 278], [278, 282, 279], [280, 283, 113], [284, 285, 281], [281, 285, 282], [283, 286, 113], [287, 288, 284], [289, 288, 287], [284, 288, 285], [286, 290, 113], [289, 291, 288], [290, 292, 113], [293, 294, 289], [289, 294, 291], [292, 295, 113], [296, 297, 293], [298, 297, 296], [293, 297, 294], [295, 299, 113], [298, 300, 297], [301, 300, 298], [299, 302, 113], [303, 304, 301], [301, 304, 300], [302, 305, 113], [303, 306, 304], [305, 307, 113], [303, 308, 306], [309, 308, 303], [178, 308, 309], [113, 310, 206], [307, 310, 113], [178, 311, 308], [310, 312, 206], [312, 313, 206], [313, 314, 206], [314, 315, 206], [315, 316, 206], [177, 317, 178], [318, 317, 319], [320, 317, 318], [321, 317, 320], [322, 317, 321], [323, 317, 322], [324, 317, 323], [325, 317, 324], [326, 317, 325], [327, 317, 326], [178, 317, 311], [328, 317, 327], [329, 317, 328], [330, 317, 329], [331, 317, 330], [332, 317, 331], [333, 317, 332], [334, 317, 333], [335, 317, 334], [336, 317, 335], [337, 317, 336], [338, 317, 337], [339, 317, 338], [340, 317, 339], [341, 317, 340], [311, 317, 341], [316, 342, 206], [343, 342, 344], [345, 342, 343], [346, 342, 345], [347, 342, 346], [348, 342, 347], [349, 342, 348], [350, 342, 349], [351, 342, 350], [352, 342, 351], [353, 342, 352], [354, 342, 353], [355, 342, 354], [356, 342, 355], [357, 342, 356], [317, 342, 319], [358, 342, 357], [359, 342, 358], [360, 342, 359], [361, 342, 316], [362, 342, 360], [363, 342, 361], [364, 342, 362], [365, 342, 363], [319, 342, 364], [366, 342, 365], [367, 342, 366], [368, 342, 367], [369, 342, 368], [344, 342, 369], [342, 370, 371], [317, 370, 342], [372, 373, 374], [372, 374, 375], [376, 377, 378], [376, 379, 377], [380, 381, 382], [380, 382, 383], [380, 383, 372], [384, 385, 386], [387, 380, 372], [387, 388, 389], [387, 389, 380], [387, 372, 375], [390, 379, 376], [390, 376, 385], [390, 384, 391], [390, 385, 384], [390, 392, 393], [390, 393, 379], [394, 395, 396], [394, 396, 387], [397, 390, 398], [397, 398, 399], [397, 392, 390], [397, 400, 392], [401, 387, 375], [401, 394, 387], [402, 400, 397], [403, 400, 402], [404, 405, 406], [404, 406, 407], [404, 407, 401], [408, 401, 375], [408, 404, 401], [408, 409, 410], [408, 410, 404], [411, 408, 375], [411, 375, 400], [412, 411, 400], [412, 400, 403], [412, 403, 413], [414, 415, 416], [417, 411, 418], [419, 418, 411], [420, 411, 417], [421, 419, 411], [422, 411, 420], [423, 421, 411], [424, 411, 422], [425, 411, 412], [425, 423, 411], [426, 411, 424], [427, 425, 412], [428, 411, 426], [429, 427, 412], [430, 411, 428], [431, 429, 412], [432, 411, 430], [433, 431, 412], [434, 411, 432], [435, 433, 412], [436, 435, 412], [437, 414, 416], [438, 436, 412], [439, 413, 403], [440, 438, 412], [441, 440, 412], [442, 441, 412], [443, 442, 412], [443, 412, 415], [444, 443, 415], [445, 444, 415], [446, 445, 415], [447, 446, 415], [448, 447, 415], [449, 448, 415], [450, 449, 415], [451, 411, 434], [451, 452, 453], [451, 454, 452], [451, 455, 454], [451, 456, 455], [451, 457, 456], [451, 458, 457], [451, 459, 458], [451, 460, 459], [451, 461, 460], [451, 462, 461], [451, 463, 462], [451, 464, 463], [451, 434, 464], [465, 451, 453], [466, 450, 415], [467, 451, 465], [468, 466, 415], [469, 451, 467], [470, 468, 415], [471, 451, 469], [472, 470, 415], [473, 451, 471], [474, 472, 415], [475, 451, 473], [476, 474, 415], [477, 451, 475], [478, 476, 415], [479, 451, 477], [480, 478, 415], [481, 451, 479], [482, 480, 415], [483, 451, 481], [484, 451, 483], [485, 451, 484], [486, 451, 485], [487, 451, 486], [488, 439, 403], [489, 414, 437], [490, 491, 492], [493, 490, 492], [494, 495, 496], [494, 496, 493], [497, 493, 492], [497, 498, 494], [497, 494, 493], [499, 497, 492], [500, 501, 499], [500, 499, 492], [502, 503, 500], [504, 502, 500], [505, 506, 504], [505, 504, 500], [507, 508, 505], [509, 510, 511], [509, 511, 512], [509, 512, 507], [513, 514, 509], [515, 507, 505], [515, 509, 507], [515, 513, 509], [516, 517, 515], [516, 515, 505], [518, 519, 516], [518, 516, 505], [520, 505, 500], [520, 518, 505], [521, 522, 520], [521, 500, 492], [521, 492, 523], [521, 520, 500], [521, 523, 524], [521, 524, 525], [521, 525, 526], [521, 526, 527], [521, 527, 528], [521, 528, 529], [521, 529, 530], [521, 530, 531], [521, 531, 532], [521, 532, 533], [521, 533, 534], [521, 534, 535], [521, 535, 536], [521, 536, 537], [521, 537, 538], [521, 538, 539], [521, 539, 540], [521, 540, 541], [521, 541, 542], [521, 542, 543], [521, 543, 544], [521, 544, 545], [521, 545, 546], [521, 546, 547], [521, 547, 548], [521, 548, 549], [521, 549, 550], [551, 552, 553], [551, 554, 552], [551, 555, 554], [551, 556, 555], [551, 557, 556], [551, 558, 557], [551, 559, 558], [551, 560, 559], [551, 561, 560], [551, 562, 561], [551, 563, 562], [551, 564, 563], [551, 451, 487], [551, 565, 564], [551, 566, 565], [551, 567, 566], [551, 568, 567], [551, 569, 568], [551, 570, 569], [551, 571, 570], [551, 572, 571], [551, 573, 572], [551, 574, 573], [551, 487, 574], [551, 550, 575], [551, 575, 576], [551, 576, 577], [551, 577, 578], [551, 578, 579], [551, 579, 451], [551, 521, 550], [580, 482, 415], [580, 581, 582], [580, 583, 581], [580, 584, 583], [580, 585, 584], [580, 586, 585], [580, 587, 586], [580, 588, 587], [580, 589, 588], [580, 590, 589], [580, 591, 482], [580, 592, 590], [580, 593, 591], [580, 594, 592], [580, 595, 593], [580, 596, 594], [580, 597, 595], [580, 598, 596], [580, 599, 597], [580, 600, 598], [580, 601, 599], [580, 602, 600], [580, 603, 601], [580, 604, 602], [580, 605, 603], [580, 606, 604], [580, 607, 605], [580, 608, 606], [580, 609, 607], [580, 610, 608], [580, 611, 609], [580, 553, 610], [580, 612, 611], [580, 613, 612], [580, 614, 613], [580, 615, 614], [580, 582, 615], [580, 551, 553], [616, 439, 488], [616, 489, 439], [617, 551, 580], [618, 617, 414], [619, 617, 618], [620, 618, 414], [621, 617, 619], [622, 620, 414], [623, 617, 621], [624, 622, 414], [625, 617, 623], [626, 624, 414], [627, 617, 625], [628, 626, 414], [629, 617, 627], [630, 414, 489], [630, 628, 414], [631, 617, 629], [632, 630, 489], [633, 617, 631], [634, 632, 489], [635, 617, 633], [636, 634, 489], [637, 617, 635], [638, 636, 489], [639, 617, 637], [640, 638, 489], [641, 617, 639], [642, 640, 489], [643, 617, 641], [644, 642, 489], [645, 617, 643], [646, 644, 489], [647, 617, 645], [648, 646, 489], [649, 617, 647], [650, 648, 489], [651, 617, 649], [652, 650, 489], [653, 617, 651], [654, 652, 489], [655, 617, 653], [656, 654, 489], [657, 617, 655], [658, 656, 489], [659, 617, 657], [660, 658, 489], [661, 617, 659], [662, 660, 489], [663, 617, 661], [664, 662, 489], [665, 617, 663], [666, 664, 489], [667, 617, 665], [668, 666, 489], [669, 617, 667], [670, 668, 489], [671, 617, 669], [672, 670, 489], [673, 617, 671], [674, 672, 489], [675, 617, 673], [676, 674, 489], [677, 617, 675], [678, 676, 489], [679, 617, 677], [680, 678, 489], [681, 617, 679], [682, 680, 489], [683, 617, 681], [684, 682, 489], [685, 617, 683], [686, 489, 616], [686, 684, 489], [687, 617, 685], [688, 686, 616], [689, 617, 687], [690, 688, 616], [691, 690, 616], [692, 691, 616], [693, 692, 616], [694, 617, 689], [694, 689, 695], [694, 695, 696], [694, 696, 697], [694, 697, 698], [694, 698, 699], [694, 699, 700], [694, 700, 701], [694, 701, 702], [694, 702, 703], [694, 703, 704], [694, 704, 705], [694, 705, 706], [694, 706, 707], [694, 707, 708], [694, 708, 709], [694, 709, 710], [694, 710, 711], [694, 711, 712], [694, 712, 713], [694, 713, 714], [694, 714, 715], [694, 715, 716], [694, 716, 717], [694, 551, 617], [718, 693, 616], [718, 694, 717], [718, 719, 720], [718, 720, 721], [718, 721, 722], [718, 722, 723], [718, 723, 724], [718, 724, 725], [718, 717, 726], [718, 725, 727], [718, 726, 728], [718, 727, 693], [718, 728, 729], [718, 729, 730], [718, 730, 731], [718, 731, 732], [718, 732, 733], [718, 733, 734], [718, 734, 735], [718, 735, 736], [718, 736, 737], [718, 737, 738], [718, 738, 739], [718, 739, 740], [718, 740, 741], [718, 741, 742], [718, 742, 743], [718, 743, 744], [718, 744, 745], [718, 745, 719], [746, 718, 747], [746, 694, 718], [412, 416, 415], [718, 616, 342], [342, 616, 206], [747, 718, 371], [371, 718, 342], [746, 747, 370], [370, 747, 371], [694, 746, 317], [317, 746, 370], [694, 317, 551], [551, 317, 177], [147, 551, 177], [521, 551, 147], [115, 117, 492], [115, 492, 491], [116, 491, 490], [116, 115, 491], [118, 490, 493], [118, 116, 490], [121, 493, 496], [121, 118, 493], [119, 496, 495], [119, 121, 496], [120, 495, 494], [120, 119, 495], [122, 494, 498], [122, 120, 494], [123, 122, 498], [123, 498, 497], [124, 123, 497], [124, 499, 501], [124, 497, 499], [125, 124, 501], [126, 125, 501], [126, 501, 500], [127, 126, 500], [127, 503, 502], [127, 500, 503], [128, 127, 502], [129, 128, 502], [129, 502, 504], [131, 129, 504], [131, 504, 506], [130, 131, 506], [130, 506, 505], [132, 130, 505], [132, 505, 508], [135, 132, 508], [135, 507, 512], [135, 508, 507], [133, 512, 511], [133, 135, 512], [134, 133, 511], [136, 510, 509], [136, 511, 510], [136, 134, 511], [137, 509, 514], [137, 136, 509], [138, 137, 514], [139, 514, 513], [139, 138, 514], [140, 513, 515], [140, 139, 513], [141, 515, 517], [141, 140, 515], [142, 516, 519], [142, 517, 516], [142, 141, 517], [143, 142, 519], [144, 519, 518], [144, 143, 519], [145, 518, 520], [145, 144, 518], [146, 520, 522], [146, 145, 520], [147, 522, 521], [147, 146, 522], [492, 117, 148], [523, 492, 148], [204, 205, 579], [204, 579, 578], [203, 578, 577], [203, 204, 578], [202, 577, 576], [202, 203, 577], [201, 576, 575], [201, 202, 576], [175, 575, 550], [175, 201, 575], [174, 550, 549], [174, 175, 550], [173, 549, 548], [173, 174, 549], [172, 173, 548], [172, 548, 547], [171, 172, 547], [171, 547, 546], [170, 171, 546], [170, 546, 545], [169, 170, 545], [169, 545, 544], [168, 169, 544], [168, 544, 543], [167, 168, 543], [167, 542, 541], [167, 543, 542], [166, 167, 541], [165, 166, 541], [165, 541, 540], [164, 165, 540], [164, 540, 539], [163, 164, 539], [163, 539, 538], [162, 163, 538], [162, 538, 537], [161, 537, 536], [161, 162, 537], [160, 536, 535], [160, 161, 536], [159, 160, 535], [159, 535, 534], [158, 533, 532], [158, 534, 533], [158, 159, 534], [157, 158, 532], [156, 532, 531], [156, 157, 532], [155, 531, 530], [155, 156, 531], [154, 529, 528], [154, 530, 529], [154, 155, 530], [153, 154, 528], [152, 528, 527], [152, 153, 528], [151, 527, 526], [151, 152, 527], [150, 526, 525], [150, 151, 526], [149, 525, 524], [149, 150, 525], [148, 524, 523], [148, 149, 524], [451, 205, 77], [451, 579, 205], [411, 77, 39], [411, 451, 77], [6, 7, 375], [6, 375, 374], [4, 374, 373], [4, 6, 374], [5, 372, 383], [5, 373, 372], [5, 4, 373], [13, 5, 383], [11, 383, 382], [11, 13, 383], [12, 382, 381], [12, 11, 382], [15, 381, 380], [15, 12, 381], [18, 389, 388], [18, 380, 389], [18, 15, 380], [19, 18, 388], [20, 388, 387], [20, 19, 388], [25, 387, 396], [25, 20, 387], [23, 396, 395], [23, 25, 396], [24, 23, 395], [24, 394, 401], [24, 395, 394], [35, 24, 401], [34, 35, 401], [34, 401, 407], [33, 34, 407], [33, 407, 406], [31, 33, 406], [31, 405, 404], [31, 406, 405], [32, 31, 404], [36, 404, 410], [36, 32, 404], [37, 36, 410], [37, 410, 409], [38, 409, 408], [38, 37, 409], [39, 408, 411], [39, 38, 408], [400, 7, 0], [400, 375, 7], [29, 30, 403], [29, 403, 402], [26, 402, 397], [26, 29, 402], [28, 397, 399], [28, 26, 397], [27, 398, 390], [27, 399, 398], [27, 28, 399], [21, 27, 390], [22, 390, 391], [22, 21, 390], [16, 391, 384], [16, 22, 391], [17, 384, 386], [17, 16, 384], [14, 386, 385], [14, 17, 386], [9, 385, 376], [9, 14, 385], [10, 376, 378], [10, 9, 376], [8, 377, 379], [8, 378, 377], [8, 10, 378], [1, 8, 379], [3, 379, 393], [3, 1, 379], [2, 393, 392], [2, 3, 393], [0, 392, 400], [0, 2, 392], [112, 488, 403], [112, 403, 30], [616, 112, 206], [616, 488, 112], [748, 415, 414], [414, 617, 749], [748, 414, 749], [749, 617, 580], [749, 415, 748], [749, 580, 415], [582, 581, 255], [255, 581, 257], [257, 583, 259], [259, 583, 262], [581, 583, 257], [583, 584, 262], [262, 585, 267], [267, 585, 270], [584, 585, 262], [270, 586, 272], [585, 586, 270], [586, 587, 272], [272, 588, 274], [587, 588, 272], [274, 589, 278], [278, 589, 281], [588, 589, 274], [589, 590, 281], [281, 592, 284], [590, 592, 281], [592, 594, 284], [284, 594, 287], [594, 596, 287], [287, 596, 289], [596, 598, 289], [289, 598, 293], [598, 600, 293], [293, 600, 296], [600, 602, 296], [296, 602, 298], [602, 604, 298], [298, 604, 301], [604, 606, 301], [301, 606, 303], [606, 608, 303], [303, 608, 309], [608, 610, 309], [309, 610, 178], [610, 553, 178], [178, 553, 176], [176, 553, 179], [553, 552, 179], [552, 554, 179], [179, 554, 180], [180, 554, 181], [554, 555, 181], [181, 556, 182], [182, 556, 183], [555, 556, 181], [556, 557, 183], [183, 558, 184], [557, 558, 183], [184, 559, 185], [185, 559, 186], [558, 559, 184], [186, 560, 187], [559, 560, 186], [560, 561, 187], [187, 562, 188], [188, 562, 189], [561, 562, 187], [562, 563, 189], [189, 564, 190], [190, 564, 191], [563, 564, 189], [564, 565, 191], [191, 566, 192], [192, 566, 193], [565, 566, 191], [566, 567, 193], [567, 568, 193], [193, 568, 194], [568, 569, 194], [194, 569, 195], [569, 570, 195], [195, 570, 196], [570, 571, 196], [196, 571, 197], [571, 572, 197], [197, 572, 198], [198, 572, 199], [572, 573, 199], [573, 574, 199], [199, 574, 200], [574, 487, 200], [200, 487, 111], [487, 486, 111], [111, 486, 110], [486, 485, 110], [110, 485, 109], [485, 484, 109], [109, 484, 108], [484, 483, 108], [108, 483, 107], [483, 481, 107], [107, 481, 106], [481, 479, 106], [106, 479, 104], [479, 477, 104], [104, 477, 102], [477, 475, 102], [102, 475, 100], [475, 473, 100], [100, 473, 98], [473, 471, 98], [98, 471, 96], [471, 469, 96], [96, 469, 94], [469, 467, 94], [94, 467, 92], [467, 465, 92], [92, 465, 90], [465, 453, 90], [90, 453, 78], [78, 452, 76], [453, 452, 78], [76, 454, 79], [452, 454, 76], [79, 455, 80], [454, 455, 79], [80, 456, 81], [455, 456, 80], [456, 457, 81], [81, 457, 82], [457, 458, 82], [82, 458, 83], [458, 459, 83], [83, 459, 84], [459, 460, 84], [84, 460, 85], [460, 461, 85], [85, 461, 86], [461, 462, 86], [86, 462, 87], [462, 463, 87], [87, 463, 88], [463, 464, 88], [88, 464, 89], [464, 434, 89], [89, 434, 59], [434, 432, 59], [59, 432, 57], [432, 430, 57], [57, 430, 55], [430, 428, 55], [55, 428, 53], [428, 426, 53], [53, 426, 51], [51, 424, 49], [426, 424, 51], [49, 422, 47], [424, 422, 49], [47, 420, 45], [422, 420, 47], [45, 417, 42], [420, 417, 45], [42, 418, 43], [417, 418, 42], [43, 419, 44], [418, 419, 43], [44, 421, 46], [419, 421, 44], [46, 423, 48], [421, 423, 46], [48, 425, 50], [423, 425, 48], [50, 427, 52], [425, 427, 50], [52, 429, 54], [427, 429, 52], [54, 431, 56], [429, 431, 54], [56, 433, 58], [431, 433, 56], [433, 435, 58], [58, 435, 60], [435, 436, 60], [60, 436, 61], [436, 438, 61], [61, 438, 62], [438, 440, 62], [62, 440, 64], [64, 441, 65], [440, 441, 64], [65, 442, 66], [66, 442, 67], [441, 442, 65], [442, 443, 67], [67, 444, 68], [443, 444, 67], [68, 445, 69], [444, 445, 68], [69, 446, 70], [445, 446, 69], [70, 447, 71], [446, 447, 70], [71, 448, 72], [72, 448, 74], [447, 448, 71], [448, 449, 74], [74, 450, 75], [449, 450, 74], [75, 466, 91], [450, 466, 75], [91, 468, 93], [93, 468, 95], [466, 468, 91], [468, 470, 95], [95, 472, 97], [470, 472, 95], [97, 474, 99], [472, 474, 97], [99, 476, 101], [101, 476, 103], [474, 476, 99], [476, 478, 103], [103, 480, 105], [105, 480, 207], [478, 480, 103], [480, 482, 207], [207, 591, 209], [482, 591, 207], [591, 593, 209], [209, 593, 211], [593, 595, 211], [211, 595, 215], [595, 597, 215], [215, 597, 218], [597, 599, 218], [218, 599, 220], [599, 601, 220], [220, 601, 222], [601, 603, 222], [222, 603, 227], [603, 605, 227], [227, 605, 230], [605, 607, 230], [230, 607, 234], [607, 609, 234], [234, 609, 235], [609, 611, 235], [235, 611, 239], [611, 612, 239], [239, 612, 242], [612, 613, 242], [242, 613, 245], [245, 614, 248], [613, 614, 245], [614, 615, 248], [248, 615, 252], [252, 582, 255], [615, 582, 252], [719, 745, 344], [344, 745, 343], [343, 744, 345], [745, 744, 343], [345, 743, 346], [744, 743, 345], [346, 742, 347], [743, 742, 346], [347, 741, 348], [742, 741, 347], [348, 740, 349], [741, 740, 348], [349, 739, 350], [740, 739, 349], [350, 738, 351], [739, 738, 350], [351, 737, 352], [738, 737, 351], [352, 736, 353], [737, 736, 352], [736, 735, 353], [353, 735, 354], [735, 734, 354], [354, 734, 355], [734, 733, 355], [355, 733, 356], [733, 732, 356], [356, 732, 357], [732, 731, 357], [357, 731, 358], [731, 730, 358], [358, 730, 359], [730, 729, 359], [359, 729, 360], [729, 728, 360], [360, 728, 362], [728, 726, 362], [362, 726, 364], [726, 717, 364], [364, 717, 319], [717, 716, 319], [319, 716, 318], [716, 715, 318], [318, 715, 320], [320, 714, 321], [715, 714, 320], [321, 713, 322], [714, 713, 321], [322, 712, 323], [713, 712, 322], [323, 711, 324], [712, 711, 323], [324, 710, 325], [711, 710, 324], [325, 709, 326], [710, 709, 325], [326, 708, 327], [709, 708, 326], [327, 707, 328], [708, 707, 327], [328, 706, 329], [707, 706, 328], [329, 705, 330], [706, 705, 329], [330, 704, 331], [705, 704, 330], [331, 703, 332], [704, 703, 331], [332, 702, 333], [703, 702, 332], [333, 701, 334], [702, 701, 333], [701, 700, 334], [334, 700, 335], [700, 699, 335], [335, 699, 336], [699, 698, 336], [336, 698, 337], [698, 697, 337], [337, 697, 338], [697, 696, 338], [338, 696, 339], [696, 695, 339], [339, 695, 340], [695, 689, 340], [340, 689, 341], [689, 687, 341], [341, 687, 311], [687, 685, 311], [311, 685, 308], [685, 683, 308], [308, 683, 306], [683, 681, 306], [306, 681, 304], [681, 679, 304], [304, 679, 300], [679, 677, 300], [300, 677, 297], [677, 675, 297], [297, 675, 294], [675, 673, 294], [294, 673, 291], [673, 671, 291], [291, 671, 288], [671, 669, 288], [288, 669, 285], [669, 667, 285], [285, 667, 282], [667, 665, 282], [282, 665, 279], [665, 663, 279], [279, 663, 276], [663, 661, 276], [276, 661, 273], [273, 659, 269], [661, 659, 273], [269, 657, 266], [659, 657, 269], [266, 655, 264], [657, 655, 266], [264, 653, 261], [655, 653, 264], [653, 651, 261], [261, 651, 258], [651, 649, 258], [258, 649, 254], [649, 647, 254], [254, 647, 251], [647, 645, 251], [251, 645, 249], [645, 643, 249], [249, 643, 246], [643, 641, 246], [246, 641, 243], [641, 639, 243], [243, 639, 240], [639, 637, 240], [240, 637, 237], [637, 635, 237], [237, 635, 233], [635, 633, 233], [233, 633, 231], [633, 631, 231], [231, 631, 228], [631, 629, 228], [228, 629, 225], [223, 627, 219], [629, 627, 225], [225, 627, 223], [627, 625, 219], [219, 623, 216], [625, 623, 219], [216, 621, 213], [623, 621, 216], [213, 619, 210], [210, 619, 208], [621, 619, 213], [619, 618, 208], [208, 620, 212], [618, 620, 208], [212, 622, 214], [214, 622, 217], [620, 622, 212], [622, 624, 217], [217, 626, 221], [624, 626, 217], [221, 628, 224], [626, 628, 221], [224, 630, 226], [628, 630, 224], [226, 632, 229], [229, 632, 232], [630, 632, 226], [632, 634, 232], [634, 636, 232], [232, 636, 236], [236, 636, 238], [636, 638, 238], [238, 638, 241], [638, 640, 241], [241, 642, 244], [640, 642, 241], [244, 644, 247], [642, 644, 244], [247, 646, 250], [644, 646, 247], [250, 648, 253], [646, 648, 250], [253, 650, 256], [648, 650, 253], [256, 652, 260], [260, 652, 263], [650, 652, 256], [652, 654, 263], [263, 656, 265], [654, 656, 263], [265, 658, 268], [268, 658, 271], [656, 658, 265], [658, 660, 271], [271, 662, 275], [660, 662, 271], [275, 664, 277], [662, 664, 275], [277, 666, 280], [664, 666, 277], [280, 668, 283], [666, 668, 280], [283, 670, 286], [668, 670, 283], [286, 672, 290], [670, 672, 286], [290, 674, 292], [672, 674, 290], [292, 676, 295], [674, 676, 292], [295, 678, 299], [299, 678, 302], [676, 678, 295], [678, 680, 302], [302, 682, 305], [305, 682, 307], [680, 682, 302], [682, 684, 307], [684, 686, 307], [307, 686, 310], [686, 688, 310], [310, 688, 312], [688, 690, 312], [312, 690, 313], [690, 691, 313], [313, 691, 314], [691, 692, 314], [314, 692, 315], [315, 692, 316], [692, 693, 316], [693, 727, 316], [316, 727, 361], [727, 725, 361], [361, 725, 363], [725, 724, 363], [363, 724, 365], [724, 723, 365], [365, 723, 366], [723, 722, 366], [366, 722, 367], [722, 721, 367], [367, 721, 368], [368, 720, 369], [721, 720, 368], [369, 719, 344], [720, 719, 369], [437, 73, 114], [437, 416, 73], [40, 73, 412], [73, 416, 412], [40, 412, 41], [41, 412, 413], [439, 63, 413], [413, 63, 41], [63, 489, 113], [439, 489, 63], [113, 437, 114], [489, 437, 113]]} \ No newline at end of file diff --git a/docs/CAD/design/mate-connectors/bear_outline.json b/docs/CAD/design/mate-connectors/bear_outline.json new file mode 100644 index 0000000000..21b420c616 --- /dev/null +++ b/docs/CAD/design/mate-connectors/bear_outline.json @@ -0,0 +1 @@ +{"outer": [[26.711, -55.263], [42.071, -7.071], [35.0, -0.0], [-32.575, 0.0], [-33.717, -0.112], [-34.815, -0.446], [-35.828, -0.987], [-36.715, -1.715], [-39.55, -4.55], [-40.35, -5.547], [-40.914, -6.694], [-41.216, -7.937], [-41.241, -9.215], [-40.988, -10.468], [-26.711, -55.263], [-28.828, -57.312], [-29.64, -58.335], [-30.159, -59.532], [-30.35, -60.823], [-30.201, -62.12], [-29.721, -63.334], [-28.944, -64.382], [-27.718, -65.649], [-27.075, -66.035], [-26.325, -66.047], [-25.67, -65.683], [-20.613, -60.789], [20.613, -60.789], [26.711, -66.69], [32.421, -60.789], [26.711, -55.263]], "holes": [{"pts": [[19.052, -18.464], [16.474, -9.14], [-0.0, -9.104], [-21.926, -9.104], [-21.926, -3.535], [22.308, -3.535], [19.052, -18.464]], "cx": 4.719, "cz": -10.192, "d": 44.234}, {"pts": [[-11.493, -48.01], [-11.676, -49.341], [-12.211, -50.574], [-13.06, -51.617], [-14.158, -52.392], [-15.424, -52.842], [-16.765, -52.934], [-18.081, -52.66], [-19.274, -52.042], [-20.257, -51.124], [-20.955, -49.976], [-21.318, -48.682], [-21.318, -47.337], [-20.955, -46.043], [-20.257, -44.895], [-19.274, -43.977], [-18.081, -43.359], [-16.765, -43.085], [-15.424, -43.177], [-14.158, -43.627], [-13.06, -44.402], [-12.211, -45.445], [-11.676, -46.678], [-11.493, -48.01]], "cx": -16.223, "cz": -48.01, "d": 9.825}, {"pts": [[21.364, -48.01], [21.181, -49.341], [20.645, -50.574], [19.797, -51.617], [18.699, -52.392], [17.432, -52.842], [16.091, -52.934], [14.775, -52.66], [13.582, -52.042], [12.6, -51.124], [11.901, -49.976], [11.539, -48.682], [11.539, -47.337], [11.901, -46.043], [12.6, -44.895], [13.582, -43.977], [14.775, -43.359], [16.091, -43.085], [17.432, -43.177], [18.699, -43.627], [19.797, -44.402], [20.645, -45.445], [21.181, -46.678], [21.364, -48.01]], "cx": 16.634, "cz": -48.01, "d": 9.825}]} \ No newline at end of file diff --git a/docs/CAD/design/mate-connectors/circularmateconnectors.png b/docs/CAD/design/mate-connectors/circularmateconnectors.png new file mode 100644 index 0000000000..3150a5667b Binary files /dev/null and b/docs/CAD/design/mate-connectors/circularmateconnectors.png differ diff --git a/docs/CAD/design/mate-connectors/cmp-sheet.png b/docs/CAD/design/mate-connectors/cmp-sheet.png new file mode 100644 index 0000000000..1d67ae31ed Binary files /dev/null and b/docs/CAD/design/mate-connectors/cmp-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/connector-glyph-proposal.html b/docs/CAD/design/mate-connectors/connector-glyph-proposal.html new file mode 100644 index 0000000000..2a8475ee24 --- /dev/null +++ b/docs/CAD/design/mate-connectors/connector-glyph-proposal.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +<title>Mate connector glyph — polarity and verse + + + +

+ +
+
Orca Design · assembly
+

Mate connector glyph — polarity and verse

+

+ Onshape's core (disc + roll quadrant + Z arrow) is adopted unchanged because it is proven and + aligned. The addition is polarity — which connector is anchored and + which one travels — which no surveyed CAD system encodes in its glyph. +

+
+ +

The three jobs of the glyph

+
+
+
+ + + + +
+
Disc — the XY plane
+

Says “I am a frame, and this is the plane I sit in.” The dot is the exact origin.

+
+ +
+
+ + + + + +
+
Quadrant — the roll
+

+ The filled sector is the +X/+Y quadrant. It steps 90° with the reorient control, so the + clocking that Fastened and Slider lock is visible before you commit. +

+
+ +
+
+ + + + + + + +
+
Arrow — the verse
+

+ Drawn on +Z only. Nothing below the disc. A double-headed axis is what + makes people ask which way it points; a one-sided arrow cannot be misread. +

+
+
+ +

Polarity — the part nobody else draws

+
+
+
+ + + + + + + + +
+
Fixed — the socket
+

+ Hollow head, muted colour. This body does not move. It receives. +

+
+ +
+
+ + + + + + + +
+
Driven — the plug
+

+ Solid head, active colour. This body is the one that jumps. It inserts. +

+
+ +
+
+ + + + + + + + + + + + +
+
Roll undefined
+

+ Hatched quadrant, dashed disc: a circular face or a seam gave no usable direction. Says + “pick a direction” without a dialog. +

+
+
+ +

The pair reads as a magnet

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + fixed · receives + driven · inserts + +
+

+ Two arrows nose to nose. Because a magnet's north seeks a south, “facing” is the + self-evident default — which settles open decision D1 on visual grounds instead of a + convention nobody can look up. Nothing has to be remembered: the picture is the rule. + The dashed line is what makes the two glyphs read as one object. +

+
+ +

States

+
+ + + + + + + + + + + + + + + + + + + + + +
StateDrawingWhy
Candidate (hover)small dot onlyOnshape draws plain white dots at every corner and midpoint. Dots propose; the full glyph commits.
Pickeddisc + quadrant + coneThe committed frame, with roll and verse both readable.
Roll undefinedhatched quadrant, dashed discTurns requirement R8 from a message nobody reads into a mark you cannot miss.
+
+ +

Constraints on the drawing

+
+

+ Do not make it a fourth RGB triad. The bed-centre world triad + (DesignCanvas.cpp:65) and the move gizmo are already three coloured arrows. The disc + and the quadrant are what tell a connector apart from those — keep the arms short, and consider + drawing only Z on the committed glyph, with X and Y implied by the quadrant. +

+
+ roll quadrant + Z / driven + fixed + roll undefined +
+
+ +
+ + diff --git a/docs/CAD/design/mate-connectors/coplanar_test.py b/docs/CAD/design/mate-connectors/coplanar_test.py new file mode 100644 index 0000000000..ea02ed3c80 --- /dev/null +++ b/docs/CAD/design/mate-connectors/coplanar_test.py @@ -0,0 +1,68 @@ +# Does the connector pair let two hosts sit COPLANAR, or does it hold them apart? +# +# The male's flat back is the plane Y=0 and all its relief rises to +Y. So Y=0 is the natural +# mating datum: everything the male adds lives on one side of it. The test below builds two dummy +# host plates that meet on that plane -- one with the male FUSED on, one with the cavity CUT in -- +# and measures whether they touch, interfere, or stand apart. +# +# It also emits the artifact that makes this work in practice: a CUTTER solid (the male grown by +# the clearance) that you subtract from any host. A standalone female block cannot keep two hosts +# coplanar, because its own floor material stands between them; a cavity can. +# +# Run: /snap/bin/freecad.cmd coplanar_test.py + +import os +import FreeCAD as App +import Part +from FreeCAD import Vector + +HERE = os.path.dirname(os.path.abspath(__file__)) +MALE = os.path.join(HERE, "bear.step") +CLEAR = 0.20 + +male = Part.Shape(); male.read(MALE); male = male.Solids[0] +bb = male.BoundBox +print(f"male relief: Y {bb.YMin:.3f} .. {bb.YMax:.3f} -> datum plane Y=0, all relief on +Y") + +# the flat back face, and proof it is the whole silhouette sitting on Y=0 +back = max((f for f in male.Faces + if abs(f.CenterOfMass.y) < 1e-6 and abs(abs(f.normalAt(0, 0).y) - 1) < 1e-6), + key=lambda f: f.Area) +print(f"back face : {back.Area:.1f} mm2 on Y=0 -- this is the contact surface") + +# ---- the cutter: the male grown by the clearance, poking 0.2 mm proud so the boolean is clean +cutter = male.makeOffsetShape(CLEAR, 1e-6, False, False, 0, 2, False).Solids[0] +cb = cutter.BoundBox +print(f"cutter : Y {cb.YMin:.3f} .. {cb.YMax:.3f}, {cutter.Volume/1000:.2f} cm3") + +# ---- two dummy hosts meeting on Y = 0 +W, H = 120.0, 100.0 +hostA = Part.makeBox(W, 10.0, H, Vector(-W/2, -10.0, -15.0)) # occupies Y -10..0 +hostB = Part.makeBox(W, 30.0, H, Vector(-W/2, 0.0, -15.0)) # occupies Y 0..30 + +partA = hostA.fuse(male) # male stands proud of A's face +partB = hostB.cut(cutter) # cavity sunk into B from its face + +print(f"\npart A (host + male) : {partA.Volume/1000:.2f} cm3") +print(f"part B (host - cutter) : {partB.Volume/1000:.2f} cm3") + +# ---- the question ------------------------------------------------------------------ +inter = partA.common(partB) +iv = inter.Volume if inter.Solids else 0.0 +gap = partA.distToShape(partB)[0] +print(f"\nRESULT interference A vs B : {iv:.6f} mm3 (0 = they do not collide)") +print(f"RESULT closest approach : {gap:.4f} mm (0 = the host faces are touching)") + +# are the two host faces actually on the same plane? +fa = [f for f in partA.Faces if abs(f.CenterOfMass.y) < 1e-9 and abs(abs(f.normalAt(0,0).y)-1) < 1e-6] +fb = [f for f in partB.Faces if abs(f.CenterOfMass.y) < 1e-9 and abs(abs(f.normalAt(0,0).y)-1) < 1e-6] +print(f"RESULT A has {len(fa)} face(s) lying exactly on Y=0, total {sum(f.Area for f in fa):.1f} mm2") +print(f"RESULT B has {len(fb)} face(s) lying exactly on Y=0, total {sum(f.Area for f in fb):.1f} mm2") +print("RESULT -> the hosts meet on Y=0: COPLANAR" if fa and fb and iv < 1e-3 + else "RESULT -> NOT coplanar") + +doc = App.newDocument("Cutter") +o = doc.addObject("Part::Feature", "BearConnector_Cutter"); o.Shape = cutter +doc.recompute() +Part.export([o], os.path.join(HERE, "BearConnector_Cutter.step")) +print(f"\nwrote BearConnector_Cutter.step -- subtract this from any host to get the socket") diff --git a/docs/CAD/design/mate-connectors/cylindricalmateconnectors.png b/docs/CAD/design/mate-connectors/cylindricalmateconnectors.png new file mode 100644 index 0000000000..e4c1cebcf9 Binary files /dev/null and b/docs/CAD/design/mate-connectors/cylindricalmateconnectors.png differ diff --git a/docs/CAD/design/mate-connectors/emit_glyph_table.py b/docs/CAD/design/mate-connectors/emit_glyph_table.py new file mode 100644 index 0000000000..6e0fd29e32 --- /dev/null +++ b/docs/CAD/design/mate-connectors/emit_glyph_table.py @@ -0,0 +1,97 @@ +"""Emit the simplified bear as a C++ table for the viewport glyph — wi3z. + +Everything is normalised to the part's own bounding span and centred, so the renderer scales by +one radius R in screen pixels and nothing here carries millimetres. Emitting rather than +hand-authoring keeps the glyph and the printed part from drifting apart: rerun this and the table +follows the STEP. +""" +import json, math, os +HERE = os.path.dirname(os.path.abspath(__file__)) +D = json.load(open(os.path.join(HERE, "bear_outline.json"))) + +def unit_frame(pts_sets): + allp=[p for s in pts_sets for p in s] + xs=[p[0] for p in allp]; ys=[p[1] for p in allp] + cx,cy=(min(xs)+max(xs))/2,(min(ys)+max(ys))/2 + span=max(max(xs)-min(xs), max(ys)-min(ys)) + return cx,cy,span + +outer=[(x,-z) for x,z in D["outer"]] +holes=[[(x,-z) for x,z in h["pts"]] for h in D["holes"]] +CX,CY,SPAN = unit_frame([outer]+holes) +U=lambda pts:[((x-CX)/SPAN,(y-CY)/SPAN) for x,y in pts] +OUT=U(outer) +EYES=[U(h) for h,m in zip(holes,D["holes"]) if m["d"]<20] +MUZ =U([h for h,m in zip(holes,D["holes"]) if m["d"]>=20][0]) + +def rdp(p,eps): + if len(p)<3: return p + ax,ay=p[0]; bx,by=p[-1]; dx,dy=bx-ax,by-ay; n=math.hypot(dx,dy) + best,bi=-1.0,0 + for i in range(1,len(p)-1): + px,py=p[i] + d=abs(dx*(ay-py)-(ax-px)*dy)/n if n>1e-12 else math.hypot(px-ax,py-ay) + if d>best: best,bi=d,i + if best<=eps: return [p[0],p[-1]] + return rdp(p[:bi+1],eps)[:-1]+rdp(p[bi:],eps) +def simp(p,eps): + r=rdp(p+[p[0]],eps); return r[:-1] + +OUT_S = simp(OUT,.030) # 22 verts, the size the study settled on +# wind counter-clockwise so the renderer's normals come out facing +Z +def area2(p): return sum(p[i][0]*p[(i+1)%len(p)][1]-p[(i+1)%len(p)][0]*p[i][1] for i in range(len(p))) +if area2(OUT_S) < 0: OUT_S = OUT_S[::-1] + +def centroid(p): return (sum(q[0] for q in p)/len(p), sum(q[1] for q in p)/len(p)) +E=[] +for e in EYES: + c=centroid(e); r=(max(p[0] for p in e)-min(p[0] for p in e))/2 + E.append((c[0],c[1],r)) +E.sort() + +lo=min(p[1] for p in MUZ); hi=max(p[1] for p in MUZ) +bottom=[p for p in MUZ if p[1] < lo+0.06*(hi-lo)] +apex=max(MUZ,key=lambda p:p[1]) +TRI=[min(bottom),max(bottom),apex] +if area2(TRI)<0: TRI=TRI[::-1] + +# the cheek dot: the handedness mark adopted after the mirror-difference study +DOT=(E[1][0]+0.085, E[1][1]-0.10, 0.038) + +# THE MUZZLE. Six facets lifted straight off the mesh -- every facet touching anything above the +# 3 mm plate. Do NOT recompute the base from height*tan(draft): the first version did and produced +# a needle, because the real base OVERHANGS the crest at both ends (0.062 at the nose, 0.034 at the +# tail) and it is that overhang that makes it a tapered wedge instead of a blade. +PLATE = 0.036 # 3.00 / 83.34 +SNOUT_BASE = ((-0.0727, -0.2417), (+0.0630, -0.2417), # nose end, 0.136 wide + (+0.0259, +0.1939), (-0.0356, +0.1939)) # tail end, 0.062 wide +CREST = ((-0.0048, -0.1793, 0.2073), (-0.0048, +0.1605, 0.1279)) + +def fmt(v): return f"{v:+.4f}" +L=[] +L.append(f"// Emitted by doc/design/mate-connectors/emit_glyph_table.py from bear.step — do not hand-edit.") +L.append(f"// Normalised to the part's bounding span and centred: the renderer scales by one radius.") +L.append(f"static const Vec2d kBearOutline[] = {{ // {len(OUT_S)} verts, RDP eps 0.030, CCW") +for i in range(0,len(OUT_S),3): + row=", ".join(f"{{{fmt(x)}, {fmt(y)}}}" for x,y in OUT_S[i:i+3]) + L.append(" "+row+",") +L.append("};") +L.append(f"static const Vec2d kBearChin[] = {{ // the CHIN BAR, flat. The muzzle is relief — see kBearCrest.") +L.append(" "+", ".join(f"{{{fmt(x)}, {fmt(y)}}}" for x,y in TRI)+",") +L.append("};") +L.append("// {cx, cy, r}: two eyes, then the cheek dot that carries handedness (wi3z).") +L.append("static const Vec3d kBearMarks[] = {") +for cx,cy,r in E: L.append(f" {{{fmt(cx)}, {fmt(cy)}, {fmt(r)}}},") +L.append(f" {{{fmt(DOT[0])}, {fmt(DOT[1])}, {fmt(DOT[2])}}},") +L.append("};") +L.append("// THE MUZZLE, lifted off the mesh: a tapered wedge, base quad + crest edge, 6 facets.") +L.append("// This is the only feature standing along +Z and the only one still legible edge-on.") +L.append(f"static const double kBearPlateZ = {PLATE:+.4f};") +L.append("static const Vec2d kBearSnoutBase[] = { // CCW from the nose end") +for x,y in SNOUT_BASE: L.append(f" {{{fmt(x)}, {fmt(y)}}},") +L.append("};") +L.append("static const Vec3d kBearCrest[] = { // nose (tall) -> tail (short)") +for x,y,z in CREST: L.append(f" {{{fmt(x)}, {fmt(y)}, {fmt(z)}}},") +L.append("};") +open(os.path.join(HERE,"bear_glyph_table.h"),"w").write("\n".join(L)+"\n") +print("\n".join(L)) diff --git a/docs/CAD/design/mate-connectors/extract_outline.py b/docs/CAD/design/mate-connectors/extract_outline.py new file mode 100644 index 0000000000..720223c6b1 --- /dev/null +++ b/docs/CAD/design/mate-connectors/extract_outline.py @@ -0,0 +1,65 @@ +# Pull the bear's true silhouette and feature positions out of the supplied male B-rep, so the +# simplification study starts from measured geometry instead of a tracing of the flat drawing. +# +# The part's native frame (make_female.py): flat back on Y=0, relief rising to Y=+17.27, the FACE +# carried by X and Z. So the face plane is XZ and the silhouette is the outline projected along Y. +import os, json +import Part + +HERE = os.path.dirname(os.path.abspath(__file__)) +s = Part.Shape(); s.read(os.path.join(HERE, "bear.step")) +sol = s.Solids[0] +bb = sol.BoundBox +print(f"bbox X {bb.XMin:.2f}..{bb.XMax:.2f} Y {bb.YMin:.2f}..{bb.YMax:.2f} Z {bb.ZMin:.2f}..{bb.ZMax:.2f}") + +# The back plate face: the planar face whose normal is -Y and which sits at Y=YMin. Its outer wire +# IS the silhouette; its inner wires are the eye holes. +best = None +for f in sol.Faces: + if f.Surface.__class__.__name__ != "Plane": + continue + n = f.Surface.Axis + if abs(abs(n.y) - 1.0) > 1e-6: + continue + c = f.CenterOfMass + if best is None or c.y < best[0]: + best = (c.y, f) +y, face = best +print(f"back plate at Y={y:.3f} wires={len(face.Wires)} area={face.Area:.1f} mm2") + +def wire_pts(w, tol=0.05): + # ORDER MATTERS and w.Edges does not carry it: OCC hands the edges back in whatever order the + # face stored them, so concatenating their discretisations gives a scrambled ring. The first + # version of this script did exactly that and emitted an outline with 7 duplicated points and + # twice the perimeter it should have. OrderedEdges walks the wire, and each edge is reversed + # when its own orientation runs against the walk. + pts = [] + for e in w.OrderedEdges: + d = e.discretize(Deflection=tol) + if e.Orientation == "Reversed": + d = list(reversed(d)) + for p in d: + pts.append((round(p.x, 3), round(p.z, 3))) + # drop consecutive duplicates + out = [pts[0]] + for p in pts[1:]: + if abs(p[0]-out[-1][0]) > 1e-4 or abs(p[1]-out[-1][1]) > 1e-4: + out.append(p) + return out + +data = {"outer": None, "holes": []} +outer = face.OuterWire +data["outer"] = wire_pts(outer) +for w in face.Wires: + if w.isSame(outer): + continue + pts = wire_pts(w) + xs = [p[0] for p in pts]; zs = [p[1] for p in pts] + data["holes"].append({"pts": pts, + "cx": round(sum(xs)/len(xs), 3), "cz": round(sum(zs)/len(zs), 3), + "d": round(max(xs)-min(xs), 3)}) + print(f" hole: centre ({data['holes'][-1]['cx']}, {data['holes'][-1]['cz']}) dia {data['holes'][-1]['d']}") + +print(f"outer wire: {len(data['outer'])} points") +json.dump(data, open(os.path.join(HERE, "bear_outline.json"), "w")) +print("WROTE bear_outline.json") diff --git a/docs/CAD/design/mate-connectors/faceted_ridge_key.scad b/docs/CAD/design/mate-connectors/faceted_ridge_key.scad new file mode 100644 index 0000000000..3eb60064fb --- /dev/null +++ b/docs/CAD/design/mate-connectors/faceted_ridge_key.scad @@ -0,0 +1,140 @@ +// Faceted ridge key — asymmetric male/female alignment feature, flat facets only. +// +// 6 vertices, 7 faces, one closed manifold. Euler check: V - E + F = 6 - 11 + 7 = 2. +// No spheres, no cylinders, no splines, no fillets. +// +// THE FLANKS ARE TRIANGULATED EXPLICITLY, and that is not cosmetic. Written as quads +// [0,3,5,4] and [1,4,5,2] they are NOT planar — the base edge and the ridge edge are +// skew, so the four corners do not share a plane. A checker caught this after the first +// draft claimed the opposite. Left as quads, the tessellator picks the fold direction for +// you, which means the "flat facet" promise is broken by an unspecified crease and two +// exporters can disagree about the shape. Splitting them here fixes the crease at +// back-bottom -> front-ridge, which keeps the rear peak's triangle large and clean. +// +// FRAME CONVENTION (matches the CAD mate connector it is derived from): +// +Z the mating axis — the feature protrudes along it +// +X the roll reference — the ridge runs along it, low end forward +// +Y completes the right-handed frame +// +// WHAT BREAKS WHICH SYMMETRY +// rotational about Z ....... the ridge (elongation along X) +// 180 deg about Z .......... the ridge SLOPE: tall steep back, long shallow front +// mirror across XZ ......... deliberately NOT broken. Handedness is fixed by convention, +// so +Y is implied once Z and X are known. Breaking it would +// add a facet and buy nothing. +// +// KNOWN AMBIGUITY, stated rather than hidden: viewed exactly ALONG the ridge (+/-X, +// orthographic), the silhouette is the same isoceles triangle from front and back. Front +// and back are then distinguished by SHADING only — the long shallow front face catches +// light differently from the steep back face. If the target renderer is flat-shaded with a +// single headlight, verify this case before committing to the shape. + +// ---------------------------------------------------------------- parameters +L = 12.0; // overall length along the ridge (X) +W = 4.0; // half-width at the BACK +tf = 0.45; // front taper: front half-width = W * tf +H = 4.5; // peak height at the rear <-- the single dimension controlling asymmetry +pr = 0.22; // rear ridge position, fraction of L from the back +pf = 0.62; // front ridge position, fraction of L from the back +hf = 0.35; // front ridge height, fraction of H + +// Clearance is a PHYSICAL quantity and only means anything if this is a printed part. +// See the note at the bottom: for a viewport glyph it is meaningless. +clr = 0.20; // per-face clearance, mm +depth = 0.40; // extra pocket depth so the male never bottoms out before it seats + +Wf = W * tf; +xr0 = -L/2 + L * pr; +xr1 = -L/2 + L * pf; +Hf = H * hf; + +// ---------------------------------------------------------------- geometry +// Vertex order is fixed and referenced by the face table; do not reorder. +// 0 back-left 1 back-right 2 front-right 3 front-left +// 4 REAR PEAK (tall) 5 front ridge (low) +function ridge_pts(l, w, wf, h, hfr, x0, x1) = [ + [-l/2, -w, 0 ], // 0 + [-l/2, w, 0 ], // 1 + [ l/2, wf, 0 ], // 2 + [ l/2, -wf, 0 ], // 3 + [ x0, 0, h ], // 4 rear peak + [ x1, 0, hfr] // 5 front ridge, low +]; + +// OpenSCAD wants each face wound CLOCKWISE seen from OUTSIDE. The right-hand-rule +// outward-normal (CCW) form is given in the comment for anyone porting to STL/OCC, +// where the opposite convention is the usual one. +RIDGE_FACES = [ + [3, 2, 1, 0], // base (CCW-outward: [0,1,2,3]) planar, all z=0 + [1, 4, 0], // back (CCW-outward: [0,4,1]) steep + [5, 3, 0], // flank -Y a (CCW-outward: [0,3,5]) + [4, 5, 0], // flank -Y b (CCW-outward: [0,5,4]) + [5, 4, 1], // flank +Y a (CCW-outward: [1,4,5]) + [2, 5, 1], // flank +Y b (CCW-outward: [1,5,2]) + [5, 2, 3] // front (CCW-outward: [3,2,5]) long, shallow +]; + +module ridge_key(l = L, w = W, wf = Wf, h = H, hfr = Hf, x0 = xr0, x1 = xr1) { + polyhedron(points = ridge_pts(l, w, wf, h, hfr, x0, x1), + faces = RIDGE_FACES, + convexity = 3); +} + +// MALE: the protrusion, nominal size. +module ridge_key_male() { ridge_key(); } + +// FEMALE: the pocket. Grown by `clr` on every side and sunk `depth` deeper. +// +// HONEST LIMITATION: this grows the key by scaling its defining dimensions, which is NOT a +// true uniform surface offset — on the shallow front face the normal clearance comes out +// smaller than `clr`, because that face is far from perpendicular to every axis it is +// scaled along. A true offset needs minkowski() with a small cube, which is exact and slow, +// or an explicit per-face plane push, which is exact and fiddly. For a keying feature whose +// job is angular registration rather than a press fit, the approximation is the right trade +// — but do not quote this pocket as holding 0.2 mm everywhere, because it does not. +module ridge_key_female() { + translate([0, 0, -depth]) + ridge_key(l = L + 2*clr, + w = W + clr, + wf = Wf + clr, + h = H + clr + depth, + hfr = Hf + clr + depth, + x0 = xr0, + x1 = xr1); +} + +// ---------------------------------------------------------------- demo +// Left: the male key on its plate. Right: the plate with the pocket cut. +PLATE = [30, 18, 3]; + +module plate_with_male() { + translate([-PLATE[0]/2, -PLATE[1]/2, -PLATE[2]]) cube(PLATE); + ridge_key_male(); +} + +module plate_with_female() { + difference() { + translate([-PLATE[0]/2, -PLATE[1]/2, -PLATE[2]]) cube(PLATE); + ridge_key_female(); + } +} + +translate([-20, 0, 0]) plate_with_male(); +translate([ 20, 0, 0]) plate_with_female(); + +// ---------------------------------------------------------------- note on the two readings +// This file is written for the PHYSICAL reading: a printable alignment key, where `clr` and +// `depth` are real millimetres and flat facets genuinely help — they slice without the +// stair-stepping a tessellated curve produces, and they print without support on the +// shallow front face. +// +// If the intent is instead the VIEWPORT GLYPH for a CAD mate connector, then: +// - `clr` and `depth` are meaningless: a symbol does not mate with anything; +// - all dimensions must become SCREEN PIXELS scaled by upp = 1/zoom, because every gizmo +// in that viewport is screen-constant and must not shrink with the model; +// - "low-poly for rendering performance" is not a real reason at ~2-20 glyphs per frame. +// The real reason to keep flat facets there is LEGIBILITY: hard normals give distinct +// value steps between facets, and that is what lets a 22-px solid read as an oriented +// object instead of a grey blob. +// The vertex logic above is identical under both readings. Only the units and the clearance +// change. diff --git a/docs/CAD/design/mate-connectors/fem-0.png b/docs/CAD/design/mate-connectors/fem-0.png new file mode 100644 index 0000000000..391881e72a Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-0.png differ diff --git a/docs/CAD/design/mate-connectors/fem-1.png b/docs/CAD/design/mate-connectors/fem-1.png new file mode 100644 index 0000000000..c329d20bea Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-1.png differ diff --git a/docs/CAD/design/mate-connectors/fem-2.png b/docs/CAD/design/mate-connectors/fem-2.png new file mode 100644 index 0000000000..a32f2ffbf1 Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-2.png differ diff --git a/docs/CAD/design/mate-connectors/fem-3.png b/docs/CAD/design/mate-connectors/fem-3.png new file mode 100644 index 0000000000..f21ae3f98b Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-3.png differ diff --git a/docs/CAD/design/mate-connectors/fem-sheet.png b/docs/CAD/design/mate-connectors/fem-sheet.png new file mode 100644 index 0000000000..add56590a1 Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/fem-sheet2.png b/docs/CAD/design/mate-connectors/fem-sheet2.png new file mode 100644 index 0000000000..879b4295fb Binary files /dev/null and b/docs/CAD/design/mate-connectors/fem-sheet2.png differ diff --git a/docs/CAD/design/mate-connectors/female.stl b/docs/CAD/design/mate-connectors/female.stl new file mode 100644 index 0000000000..57b0ef6d20 --- /dev/null +++ b/docs/CAD/design/mate-connectors/female.stl @@ -0,0 +1,226 @@ +solid OpenSCAD_Model + facet normal 1 -0 0 + outer loop + vertex 15 -9 0 + vertex 15 9 -8 + vertex 15 9 0 + endloop + endfacet + facet normal 1 0 0 + outer loop + vertex 15 9 -8 + vertex 15 -9 0 + vertex 15 -9 -8 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15 9 0 + vertex 5.3246 1.63218 0 + vertex 15 -9 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15 9 0 + vertex -4.79494 3.42759 0 + vertex 5.3246 1.63218 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 15 9 0 + vertex -5.97725 3.87059 0 + vertex -4.79494 3.42759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.97725 3.87059 0 + vertex -15 9 0 + vertex -5.97725 -3.87059 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -15 9 0 + vertex -5.97725 3.87059 0 + vertex 15 9 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex 5.3246 -1.63218 0 + vertex 15 -9 0 + vertex 5.3246 1.63218 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -4.79494 -3.42759 0 + vertex 15 -9 0 + vertex 5.3246 -1.63218 0 + endloop + endfacet + facet normal -0 0 1 + outer loop + vertex -5.97725 -3.87059 0 + vertex 15 -9 0 + vertex -4.79494 -3.42759 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -5.97725 -3.87059 0 + vertex -15 -9 0 + vertex 15 -9 0 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -15 -9 0 + vertex -5.97725 -3.87059 0 + vertex -15 9 0 + endloop + endfacet + facet normal 0 0 -1 + outer loop + vertex -15 -9 -8 + vertex 15 9 -8 + vertex 15 -9 -8 + endloop + endfacet + facet normal -0 0 -1 + outer loop + vertex 15 9 -8 + vertex -15 -9 -8 + vertex -15 9 -8 + endloop + endfacet + facet normal -1 0 0 + outer loop + vertex -15 -9 -8 + vertex -15 9 0 + vertex -15 9 -8 + endloop + endfacet + facet normal -1 -0 0 + outer loop + vertex -15 9 0 + vertex -15 -9 -8 + vertex -15 -9 0 + endloop + endfacet + facet normal 0 1 -0 + outer loop + vertex 15 9 -8 + vertex -15 9 0 + vertex 15 9 0 + endloop + endfacet + facet normal 0 1 0 + outer loop + vertex -15 9 0 + vertex 15 9 -8 + vertex -15 9 -8 + endloop + endfacet + facet normal 0 -1 0 + outer loop + vertex -15 -9 -8 + vertex 15 -9 0 + vertex -15 -9 0 + endloop + endfacet + facet normal 0 -1 -0 + outer loop + vertex 15 -9 0 + vertex -15 -9 -8 + vertex 15 -9 -8 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex -6.2 4.2 -0.4 + vertex 6.2 -2 -0.4 + vertex 6.2 2 -0.4 + endloop + endfacet + facet normal 0 0 1 + outer loop + vertex 6.2 -2 -0.4 + vertex -6.2 4.2 -0.4 + vertex -6.2 -4.2 -0.4 + endloop + endfacet + facet normal 0.873667 0 -0.486524 + outer loop + vertex -5.97725 -3.87059 0 + vertex -6.2 4.2 -0.4 + vertex -5.97725 3.87059 0 + endloop + endfacet + facet normal 0.873667 0 -0.486524 + outer loop + vertex -6.2 4.2 -0.4 + vertex -5.97725 -3.87059 0 + vertex -6.2 -4.2 -0.4 + endloop + endfacet + facet normal -0.107146 0.603912 -0.789816 + outer loop + vertex 6.2 -2 -0.4 + vertex -4.79494 -3.42759 0 + vertex 5.3246 -1.63218 0 + endloop + endfacet + facet normal -0.107147 0.603918 -0.789812 + outer loop + vertex -4.79494 -3.42759 0 + vertex 6.2 -2 -0.4 + vertex -6.2 -4.2 -0.4 + endloop + endfacet + facet normal -0.304068 0.811519 -0.498978 + outer loop + vertex -4.79494 -3.42759 0 + vertex -6.2 -4.2 -0.4 + vertex -5.97725 -3.87059 0 + endloop + endfacet + facet normal -0.304068 -0.811519 -0.498978 + outer loop + vertex -5.97725 3.87059 0 + vertex -6.2 4.2 -0.4 + vertex -4.79494 3.42759 0 + endloop + endfacet + facet normal -0.107146 -0.603912 -0.789816 + outer loop + vertex -4.79494 3.42759 0 + vertex 6.2 2 -0.4 + vertex 5.3246 1.63218 0 + endloop + endfacet + facet normal -0.107147 -0.603918 -0.789812 + outer loop + vertex 6.2 2 -0.4 + vertex -4.79494 3.42759 0 + vertex -6.2 4.2 -0.4 + endloop + endfacet + facet normal -0.415603 0 -0.909546 + outer loop + vertex 5.3246 -1.63218 0 + vertex 6.2 2 -0.4 + vertex 6.2 -2 -0.4 + endloop + endfacet + facet normal -0.415603 0 -0.909546 + outer loop + vertex 6.2 2 -0.4 + vertex 5.3246 -1.63218 0 + vertex 5.3246 1.63218 0 + endloop + endfacet +endsolid OpenSCAD_Model diff --git a/docs/CAD/design/mate-connectors/female_only.scad b/docs/CAD/design/mate-connectors/female_only.scad new file mode 100644 index 0000000000..89f83b4655 --- /dev/null +++ b/docs/CAD/design/mate-connectors/female_only.scad @@ -0,0 +1,12 @@ +// Female half alone, for the legibility test: is a recessed faceted pocket readable in a +// shaded view, or does a concave feature just read as a dark hole with no orientation? +use + +// The plate must be THICKER than the key is tall, or the "pocket" is a through-hole. The +// first version used 3 mm against a 4.5 mm key and cut straight through — caught only by +// rendering it. Minimum stock = H + clearance + pocket depth + a wall to print against. +PLATE = [30, 18, 8]; +difference() { + translate([-PLATE[0]/2, -PLATE[1]/2, -PLATE[2]]) cube(PLATE); + ridge_key_female(); +} diff --git a/docs/CAD/design/mate-connectors/fit_check.py b/docs/CAD/design/mate-connectors/fit_check.py new file mode 100644 index 0000000000..5a9ee01063 --- /dev/null +++ b/docs/CAD/design/mate-connectors/fit_check.py @@ -0,0 +1,20 @@ +# Measure the assembled fit between the supplied male and the generated female. +# This is the number that matters: the minimum gap in the seated position. +# Run: /snap/bin/freecad.cmd fit_check.py +import os +import Part + +HERE = os.path.dirname(os.path.abspath(__file__)) +male = Part.Shape(); male.read(os.path.join(HERE, "bear.step")) +fem = Part.Shape(); fem.read(os.path.join(HERE, "BearConnector_Female.step")) +male, fem = male.Solids[0], fem.Solids[0] + +d = male.distToShape(fem) +print(f"RESULT minimum gap male<->female, seated: {d[0]:.4f} mm (design clearance 0.20)") + +c = male.common(fem) +print(f"RESULT interference volume: {(c.Volume if c.Solids else 0.0):.6f} mm3") + +p = d[1][0][0] +print(f"RESULT tightest point on the male: ({p.x:.2f}, {p.y:.2f}, {p.z:.2f})") +print(f"RESULT male {male.Volume/1000:.2f} cm3 / female {fem.Volume/1000:.2f} cm3") diff --git a/docs/CAD/design/mate-connectors/glyph-preview.png b/docs/CAD/design/mate-connectors/glyph-preview.png new file mode 100644 index 0000000000..5e62c9a17f Binary files /dev/null and b/docs/CAD/design/mate-connectors/glyph-preview.png differ diff --git a/docs/CAD/design/mate-connectors/glyph_preview.py b/docs/CAD/design/mate-connectors/glyph_preview.py new file mode 100644 index 0000000000..e339e6bdab --- /dev/null +++ b/docs/CAD/design/mate-connectors/glyph_preview.py @@ -0,0 +1,99 @@ +"""Render the SIMPLIFIED glyph exactly as render_mate_face() draws it — x0kd. + +This is the panel the study was missing. simplify_study.py measured a FLAT outline and +relief_sheet.py measured the FULL 1508-facet part; neither showed the simplified glyph WITH its +relief, which is what the code actually draws and the only thing that answers "is the snout still +protruding". Same facet list, same painter order, same camera-fixed lambert as the C++. +""" +import math, os +from PIL import Image, ImageDraw + +HERE = os.path.dirname(os.path.abspath(__file__)) +T = open(os.path.join(HERE, "bear_glyph_table.h")).read() +def grab(name, n): + body = T.split(name + "[] = {")[1].split("};")[0] + body = "\n".join(l.split("//")[0] for l in body.splitlines()) + out = [] + for tok in body.replace("\n", " ").split("},"): + tok = tok.strip().lstrip("{").strip() + if not tok: continue + v = [float(x) for x in tok.replace("{", "").split(",")[:n]] + if len(v) == n: out.append(tuple(v)) + return out +OUT = grab("kBearOutline", 2) +CHIN = grab("kBearChin", 2) # NB: this table entry is the CHIN BAR, not the snout +MARKS = grab("kBearMarks", 3) +CREST = grab("kBearCrest", 3) +SBASE = grab("kBearSnoutBase", 2) +PLATE = float(T.split("kBearPlateZ = ")[1].split(";")[0]) + + +def facets(): + F = [] + n = len(OUT) + for i in range(n): # plate sides -> the grazing silhouette + a, b = OUT[i], OUT[(i+1) % n] + F.append(([(a[0],a[1],0.0),(b[0],b[1],0.0),(b[0],b[1],PLATE),(a[0],a[1],PLATE)], "body", True)) + F.append(([(x,y,PLATE) for x,y in OUT], "body", True)) # plate top + zm = PLATE + 0.004 + for cx,cy,r in MARKS: # eyes + cheek dot + F.append(([(cx+r*math.cos(2*math.pi*i/12), cy+r*math.sin(2*math.pi*i/12), zm) for i in range(12)], "mark", False)) + F.append(([(x,y,zm) for x,y in CHIN], "mark", False)) # chin bar + A, B = CREST # THE MUZZLE: base quad + crest + nl=(SBASE[0][0],SBASE[0][1],PLATE); nr=(SBASE[1][0],SBASE[1][1],PLATE) + tr=(SBASE[2][0],SBASE[2][1],PLATE); tl=(SBASE[3][0],SBASE[3][1],PLATE) + F += [([nl,tl,B,A],"body",True), # left flank + ([nr,A,B,tr],"body",True), # right flank + ([nl,A,nr],"body",True), # nose cap, sloping because the base overhangs the crest + ([tr,B,tl],"body",True)] # tail cap + return F +FACETS = facets() + +BODY=(0.42,0.46,0.52); MARK=(0.126,0.138,0.156) +def render(px, elev_deg, ss=8): + S=px*ss; a=math.radians(elev_deg); ca,sa=math.cos(a),math.sin(a) + # camera orbits down; the connector's +Z (relief) tips toward the horizon + xf=lambda p:(p[0], p[1]*sa + p[2]*ca, -p[1]*ca + p[2]*sa) + light=(-0.70,0.30,0.45) + img=Image.new("RGB",(S,S),(24,27,32)); d=ImageDraw.Draw(img) + tris=[] + for pts,kind,shade in FACETS: + q=[xf(p) for p in pts] + tris.append((sum(v[2] for v in q)/len(q), q, kind, shade)) + tris.sort(key=lambda t:t[0]) # far first + for _,q,kind,shade in tris: + (x0,y0,z0),(x1,y1,z1),(x2,y2,z2)=q[0],q[1],q[2] + ux,uy,uz=x1-x0,y1-y0,z1-z0; vx,vy,vz=x2-x0,y2-y0,z2-z0 + nx,ny,nz=uy*vz-uz*vy, uz*vx-ux*vz, ux*vy-uy*vx + nn=math.sqrt(nx*nx+ny*ny+nz*nz) or 1.0 + nx,ny,nz=nx/nn,ny/nn,nz/nn + if nz<0: nx,ny,nz=-nx,-ny,-nz + base=BODY if kind=="body" else MARK + k=(0.42+0.58*max(0.0,nx*light[0]+ny*light[1]+nz*light[2])) if shade else 1.0 + col=tuple(min(255,int(255*c*k)) for c in base) + d.polygon([(S/2+p[0]*S*0.92, S/2-p[1]*S*0.92) for p in q], fill=col) + return img.resize((px,px), Image.LANCZOS) + +SIZES=[22,32,48]; ELEVS=[(90,"flat on"),(47,"47"),(16,"16"),(6,"6")] +pad,cell=8,58 +W=pad+len(SIZES)*len(ELEVS)*cell+pad; H=pad+cell+pad +sheet=Image.new("RGB",(W,H),(24,27,32)) +for ci,(e,_) in enumerate(ELEVS): + for si,px in enumerate(SIZES): + g=render(px,e) + sheet.paste(g, (pad+(ci*len(SIZES)+si)*cell+(cell-px)//2, pad+(cell-px)//2)) +sheet.resize((W*2,H*2), Image.NEAREST).save(os.path.join(HERE,"glyph-preview.png")) + +# how much of the glyph is the snout: render with and without the tent and diff +def render_no_tent(px, elev): + global FACETS + keep=FACETS; FACETS=FACETS[:-4] + try: return render(px, elev) + finally: FACETS=keep +print(f"{'elev':>8} {'lit px@32':>10} {'snout px':>9} {'snout share':>12}") +for e,_ in ELEVS: + a=render(32,e); b=render_no_tent(32,e) + la=sum(1 for p in a.get_flattened_data() if p!=(24,27,32)) + diff=sum(1 for p,q in zip(a.get_flattened_data(), b.get_flattened_data()) if p!=q) + print(f"{e:>8} {la:>10} {diff:>9} {100.0*diff/max(1,la):>11.1f}%") +print("WROTE glyph-preview.png") diff --git a/docs/CAD/design/mate-connectors/glyph_probe.py b/docs/CAD/design/mate-connectors/glyph_probe.py new file mode 100644 index 0000000000..f4d48fdd6c --- /dev/null +++ b/docs/CAD/design/mate-connectors/glyph_probe.py @@ -0,0 +1,143 @@ +# Mate-connector glyph probe — built as REAL solids on REAL mechanical geometry, +# so the shape can be judged in a 3D viewport instead of in a browser mock. +# +# Four polarity treatments, side by side on one bracket: +# A Onshape baseline ...... ring + roll quadrant + three short axis arms +# B solid cone ............ ring + quadrant + one-sided Z arrow, filled head (driven) +# C hollow collar ......... ring + quadrant + one-sided Z arrow, shell head (fixed) +# D pin / cup ............. polarity by RELIEF: a raised pin vs a sunk cup +# +# D is the one that only a 3D test can settle: in a shaded viewport, solid-vs-hollow is a +# weak cue that depends on angle and lighting, while convex-vs-concave is a strong one -- +# and male/female is the mechanical language for polarity anyway. +# +# Scale note: in the real viewport gizmos are screen-constant (~15-40 px via upp = 1/zoom). +# At a zoom where a 60 mm part fills ~600 px, 40 px is about 4 mm, so R = 4.5 mm here. + +import FreeCAD as App +import FreeCADGui as Gui +import Part +from FreeCAD import Vector + +DOC = "GlyphProbe" +for d in list(App.listDocuments()): + App.closeDocument(d) +doc = App.newDocument(DOC) + +R = 4.5 # disc radius, the module everything scales from +GOLD = (0.93, 0.66, 0.09) +BLUE = (0.18, 0.44, 0.93) +GREY = (0.42, 0.46, 0.52) +RED = (0.85, 0.29, 0.24) +GREEN = (0.23, 0.65, 0.35) + +def add(name, shape, color, transparency=0): + o = doc.addObject("Part::Feature", name) + o.Shape = shape + o.ViewObject.ShapeColor = color + o.ViewObject.LineColor = color + o.ViewObject.PointColor = color + o.ViewObject.Transparency = transparency + return o + +def frame(origin, zdir, xdir): + """Right-handed placement matrix from origin + Z + X (X orthonormalised against Z).""" + z = Vector(*zdir); z.normalize() + xr = Vector(*xdir) + x = xr.sub(Vector(z).multiply(z.dot(xr))); x.normalize() + y = z.cross(x) + return App.Matrix(x.x, y.x, z.x, origin[0], + x.y, y.y, z.y, origin[1], + x.z, y.z, z.z, origin[2], + 0, 0, 0, 1) + +# ---------------------------------------------------------------- the bracket +plate = Part.makeBox(120, 46, 8) +bore = Part.makeCylinder(7, 40, Vector(96, 23, -6)) # a real bore, curved face +boss = Part.makeCylinder(11, 7, Vector(96, 23, 8)) +part = plate.fuse(boss).cut(bore) +add("Bracket", part, (0.60, 0.63, 0.66)) + +# ---------------------------------------------------------------- glyph pieces +def ring(t=None): + t = t or R * 0.10 + return Part.makeCylinder(R, t).cut(Part.makeCylinder(R * 0.84, t)) + +def quadrant(t=None): + t = t or R * 0.10 + return Part.makeCylinder(R * 0.84, t, Vector(0, 0, 0), Vector(0, 0, 1), 90) + +def stem(L=None, r=None): + return Part.makeCylinder(r or R * 0.09, L or R * 2.3) + +def solid_head(): + return Part.makeCone(R * 0.32, 0, R * 0.80, Vector(0, 0, R * 2.3)) + +def shell_head(): + outer = Part.makeCone(R * 0.32, 0, R * 0.80, Vector(0, 0, R * 2.3)) + inner = Part.makeCone(R * 0.22, 0, R * 0.62, Vector(0, 0, R * 2.3)) + return outer.cut(inner) + +def short_axis(direction, L=None): + L = L or R * 1.15 + return Part.makeCylinder(R * 0.07, L, Vector(0, 0, 0), Vector(*direction)) + +def place(shape, m): + s = shape.copy() + s.transformShape(m) + return s + +# ---------------------------------------------------------------- the variants +def variant_A(tag, origin): # Onshape baseline + m = frame(origin, (0, 0, 1), (1, 0, 0)) + add(tag + "_ring", place(ring(), m), GREY) + add(tag + "_quad", place(quadrant(), m), GOLD) + add(tag + "_x", place(short_axis((1, 0, 0)), m), RED) + add(tag + "_y", place(short_axis((0, 1, 0)), m), GREEN) + add(tag + "_z", place(short_axis((0, 0, 1), R * 1.6), m), BLUE) + +def variant_B(tag, origin, zdir=(0, 0, 1)): # solid cone = driven + m = frame(origin, zdir, (1, 0, 0)) + add(tag + "_ring", place(ring(), m), BLUE) + add(tag + "_quad", place(quadrant(), m), GOLD) + add(tag + "_body", place(stem().fuse(solid_head()), m), BLUE) + +def variant_C(tag, origin, zdir=(0, 0, 1)): # hollow collar = fixed + m = frame(origin, zdir, (1, 0, 0)) + add(tag + "_ring", place(ring(), m), GREY) + add(tag + "_quad", place(quadrant(), m), GOLD) + add(tag + "_body", place(stem().fuse(shell_head()), m), GREY) + +def variant_D_pin(tag, origin, zdir=(0, 0, 1)): # polarity by relief: raised PIN + m = frame(origin, zdir, (1, 0, 0)) + pin = Part.makeCylinder(R * 0.30, R * 1.5).fuse( + Part.makeCone(R * 0.30, 0, R * 0.55, Vector(0, 0, R * 1.5))) + add(tag + "_ring", place(ring(), m), BLUE) + add(tag + "_quad", place(quadrant(), m), GOLD) + add(tag + "_pin", place(pin, m), BLUE) + +def variant_D_cup(tag, origin, zdir=(0, 0, 1)): # polarity by relief: sunk CUP + m = frame(origin, zdir, (1, 0, 0)) + cup = Part.makeCylinder(R * 0.62, R * 0.9).cut( + Part.makeCylinder(R * 0.40, R * 0.9, Vector(0, 0, -0.01))) + add(tag + "_ring", place(ring(), m), GREY) + add(tag + "_quad", place(quadrant(), m), GOLD) + add(tag + "_cup", place(cup, m), GREY) + +# four treatments across the plate, all on the same flat face, same Z +variant_A("A", (14, 30, 8)) +variant_B("B", (40, 30, 8)) +variant_C("C", (64, 30, 8)) +variant_D_pin("Dpin", (14, 10, 8)) +variant_D_cup("Dcup", (40, 10, 8)) + +# the hard cases, which is the whole reason for doing this in 3D: +variant_B("Bore", (96, 23, 15)) # on the boss above a bore +variant_B("Edge", (64, 0, 8), (0, -0.7071, 0.7071)) # tilted, on an edge, oblique Z + +doc.recompute() + +v = Gui.activeDocument().activeView() +v.viewIsometric() +Gui.SendMsgToActiveView("ViewFit") +App.Console.PrintMessage("glyph probe built: %d objects\n" % len(doc.Objects)) diff --git a/docs/CAD/design/mate-connectors/handedness-sheet.png b/docs/CAD/design/mate-connectors/handedness-sheet.png new file mode 100644 index 0000000000..b44c370328 Binary files /dev/null and b/docs/CAD/design/mate-connectors/handedness-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/handedness.py b/docs/CAD/design/mate-connectors/handedness.py new file mode 100644 index 0000000000..68fa07bb55 --- /dev/null +++ b/docs/CAD/design/mate-connectors/handedness.py @@ -0,0 +1,112 @@ +"""Give the bear a handedness mark that survives rasterisation — wi3z, Tommaso's call 2. + +The study showed the left/right cue lives in sub-millimetre corner radii and is therefore invisible +at glyph size: one pixel is 2.6 mm at 32 px. Roll and verse are safe; handedness is not. + +THE MEASURE IS THE QUESTION ITSELF. Render the glyph, render its mirror image, and count how many +pixels differ. If a human is to tell left from right, the two must differ on screen; a candidate +that scores near zero is invisible however elegant it looks in CAD. Reported as a percentage of the +glyph's own lit area, so the sizes are comparable. +""" +import json, math, os +from PIL import Image, ImageDraw, ImageChops + +HERE = os.path.dirname(os.path.abspath(__file__)) +D = json.load(open(os.path.join(HERE, "bear_outline.json"))) +def unit(pts): + p = [(x, -z) for x, z in pts] + return p +outer = unit(D["outer"]); holes = [unit(h["pts"]) for h in D["holes"]] +ALL = outer + [p for h in holes for p in h] +xs=[p[0] for p in ALL]; ys=[p[1] for p in ALL] +CX,CY = (min(xs)+max(xs))/2,(min(ys)+max(ys))/2 +SPAN = max(max(xs)-min(xs), max(ys)-min(ys)) +U = lambda pts: [((x-CX)/SPAN,(y-CY)/SPAN) for x,y in pts] +OUT = U(outer) +EYES = [U(h) for h,m in zip(holes, D["holes"]) if m["d"] < 20] +MUZ = U([h for h,m in zip(holes, D["holes"]) if m["d"] >= 20][0]) + +def rdp(pts, eps): + if len(pts) < 3: return pts + ax,ay=pts[0]; bx,by=pts[-1]; dx,dy=bx-ax,by-ay + n=math.hypot(dx,dy); best,bi=-1.0,0 + for i in range(1,len(pts)-1): + px,py=pts[i] + d=abs(dx*(ay-py)-(ax-px)*dy)/n if n>1e-12 else math.hypot(px-ax,py-ay) + if d>best: best,bi=d,i + if best<=eps: return [pts[0],pts[-1]] + return rdp(pts[:bi+1],eps)[:-1]+rdp(pts[bi:],eps) +def simp(pts,eps): + r=rdp(pts+[pts[0]],eps); return r[:-1] + +BASE = simp(OUT, .030) # the 22-vertex outline the study settled on +def centroid(p): return (sum(q[0] for q in p)/len(p), sum(q[1] for q in p)/len(p)) +def circ(cx,cy,r,n=16): return [(cx+r*math.cos(2*math.pi*i/n), cy+r*math.sin(2*math.pi*i/n)) for i in range(n)] +EYE_D = [] +for e in EYES: + c=centroid(e); r=(max(p[0] for p in e)-min(p[0] for p in e))/2 + EYE_D.append((c[0],c[1],r)) +EYE_D.sort() # [0] = left (x<0), [1] = right + +TOP = max(p[1] for p in BASE) +H = TOP - min(p[1] for p in BASE) +def ear_tip(sign): + cands=[p for p in BASE if p[1] > TOP-0.18*H and (p[0]*sign) > 0] + return max(cands, key=lambda p: p[0]*sign) if cands else None +LT, RT = ear_tip(-1), ear_tip(+1) + +def notch(tip, sign, k=0.085): + """A wedge bitten out of one ear — background-filled, exactly how the eyes are already drawn.""" + x,y = tip + return [(x, y+0.02), (x - sign*k, y - k*0.55), (x + sign*k*0.15, y - k*1.05)] + +CANDS = { + "H0 none": dict(cuts=[], eyes=EYE_D), + "H1 notch R ear": dict(cuts=[notch(RT, +1)], eyes=EYE_D), + "H2 notch both": dict(cuts=[notch(RT, +1), notch(LT, -1, 0.045)], eyes=EYE_D), + "H3 cheek dot": dict(cuts=[circ(EYE_D[1][0]+0.085, EYE_D[1][1]-0.10, 0.038)], eyes=EYE_D), + "H4 uneven eyes": dict(cuts=[], eyes=[EYE_D[0], (EYE_D[1][0], EYE_D[1][1], EYE_D[1][2]*1.55)]), +} + +def render(c, px, ss=8, mirror=False): + S=px*ss; img=Image.new("L",(S,S),0); d=ImageDraw.Draw(img) + m = lambda p: (S/2 + (-p[0] if mirror else p[0])*S*0.92, S/2 - p[1]*S*0.92) + d.polygon([m(p) for p in BASE], fill=255) + d.polygon([m(p) for p in MUZ], fill=0) + for cx,cy,r in c["eyes"]: + a=m((cx-r,cy+r)); b=m((cx+r,cy-r)) + d.ellipse([min(a[0],b[0]), min(a[1],b[1]), max(a[0],b[0]), max(a[1],b[1])], fill=0) + for cut in c["cuts"]: + d.polygon([m(p) for p in cut], fill=0) + return img.resize((px,px), Image.LANCZOS) + +SIZES=[22,32,48] +print(f"{'candidate':16} " + " ".join(f"{s}px" for s in SIZES) + " (pixels differing from own mirror, % of lit area)") +print("-"*84) +scores={} +for name,c in CANDS.items(): + row=[] + for px in SIZES: + a=render(c,px); b=render(c,px,mirror=True) + diff=ImageChops.difference(a,b) + nd=sum(1 for v in diff.getdata() if v>40) + lit=sum(1 for v in a.getdata() if v>40) or 1 + row.append(100.0*nd/lit) + scores[name]=row + print(f"{name:16} " + " ".join(f"{v:5.1f}" for v in row)) + +pad,cell=8,58 +W=pad+len(SIZES)*2*cell+pad; Hh=pad+len(CANDS)*cell+pad +sheet=Image.new("RGB",(W,Hh),(24,27,32)) +for r,(name,c) in enumerate(CANDS.items()): + for mi,mir in enumerate((False,True)): + for si,px in enumerate(SIZES): + g=render(c,px,mirror=mir) + tile=Image.new("RGB",(px,px),(24,27,32)) + tile.paste(Image.new("RGB",(px,px),(237,168,23)),(0,0),g) + x=pad+(mi*len(SIZES)+si)*cell+(cell-px)//2 + y=pad+r*cell+(cell-px)//2 + sheet.paste(tile,(x,y)) +sheet.resize((W*2,Hh*2), Image.NEAREST).save(os.path.join(HERE,"handedness-sheet.png")) +print("\nleft block = as drawn, right block = mirrored. rows: " + ", ".join(CANDS)) +print("WROTE handedness-sheet.png") diff --git a/docs/CAD/design/mate-connectors/linearedgemateconnectors.png b/docs/CAD/design/mate-connectors/linearedgemateconnectors.png new file mode 100644 index 0000000000..fd5e64190d Binary files /dev/null and b/docs/CAD/design/mate-connectors/linearedgemateconnectors.png differ diff --git a/docs/CAD/design/mate-connectors/make_female.py b/docs/CAD/design/mate-connectors/make_female.py new file mode 100644 index 0000000000..ccb38426bf --- /dev/null +++ b/docs/CAD/design/mate-connectors/make_female.py @@ -0,0 +1,135 @@ +# Build the complementary FEMALE for BearConnector.step. +# +# Method: take the supplied male B-rep as-is, grow it by a uniform clearance, and subtract that +# from a block. Working on the real solid rather than re-modelling the bear is the whole point — +# the pocket is then exactly complementary by construction, including every deliberate asymmetry. +# +# The offset uses join=2 (Intersection), which extends the adjacent planes and meets them at a +# sharp corner. For a faceted part that is the correct join: the arc join would round every convex +# edge and blunt the very cues the design depends on. +# +# THE MALE'S NATIVE FRAME: the flat back is the plane Y=0 and the relief rises to Y=+17.27. +# X and Z carry the face (83.34 x 66.69). The frame is kept exactly as supplied so that male and +# female drop into the same assembly without anyone having to re-orient one of them. +# Insertion is therefore along +Y, and the pocket must OPEN on the Y=0 plane. +# +# A first version of this script assumed the relief ran along +Z, built the block around the wrong +# axis, and produced a sealed cavity with no way in. It passed a "male does not intersect female" +# check, because that only tests the seated position and says nothing about whether the part can +# get there. The straight-pull test below is what catches it. +# +# Run: /snap/bin/freecad.cmd make_female.py + +import os, sys, math +import FreeCAD as App +import Part + +HERE = os.path.dirname(os.path.abspath(__file__)) +MALE = os.path.join(HERE, "bear.step") +OUT_STEP = os.path.join(HERE, "BearConnector_Female.step") + +CLEAR = 0.20 # per-face clearance, mm +WALL = 4.0 # material around the pocket, mm +FLOOR = 3.0 # material behind the deepest point of the pocket, mm + +male = Part.Shape(); male.read(MALE) +if len(male.Solids) != 1: + print(f"FAIL: expected 1 solid in the male, found {len(male.Solids)}"); sys.exit(1) +male = male.Solids[0] +bb = male.BoundBox +print(f"male : {bb.XLength:.2f} (X) x {bb.YLength:.2f} (Y) x {bb.ZLength:.2f} (Z) mm, " + f"{len(male.Faces)} faces, {male.Volume/1000:.2f} cm3") +print(f" relief runs Y {bb.YMin:.2f} .. {bb.YMax:.2f} -> insertion along +Y, mouth at Y={bb.YMin:.2f}") + +# ---- 1. can the male even be withdrawn along the insertion axis? ---------------------- +# Ray-cast a grid along +Y through the tessellated male and count crossings. A straight pull is +# possible only if no ray enters the solid more than once; a second entry is an undercut. +verts, facets = male.tessellate(0.15) +V = [(v.x, v.y, v.z) for v in verts] +worst, undercut_pts = 0, 0 +NX = NZ = 90 +for i in range(NX): + x = bb.XMin + (i + 0.5) * bb.XLength / NX + for j in range(NZ): + z = bb.ZMin + (j + 0.5) * bb.ZLength / NZ + hits = 0 + for (ia, ib, ic) in facets: # ray (x, *, z) along +Y vs triangle + ax, ay, az = V[ia]; bx, by, bz = V[ib]; cx, cy, cz = V[ic] + # 2D point-in-triangle in the XZ plane + d = (bz - cz) * (ax - cx) + (cx - bx) * (az - cz) + if abs(d) < 1e-12: continue + u = ((bz - cz) * (x - cx) + (cx - bx) * (z - cz)) / d + v = ((cz - az) * (x - cx) + (ax - cx) * (z - cz)) / d + if u < 0 or v < 0 or u + v > 1: continue + hits += 1 + worst = max(worst, hits) + if hits > 2: undercut_pts += 1 +print(f"pull : max crossings along +Y = {worst}, undercut samples = {undercut_pts}/{NX*NZ}") +if undercut_pts: + print("FAIL: the male has an undercut along +Y; a straight pocket cannot release it") + sys.exit(1) +print(" no undercut -> a straight-pull pocket works") + +# ---- 2. grow the male by the clearance ----------------------------------------------- +grown = None +for join, name in ((2, "Intersection"), (1, "Tangent"), (0, "Arc")): + try: + g = male.makeOffsetShape(CLEAR, 1e-6, False, False, 0, join, False) + if g.isValid() and g.Solids: + grown = g.Solids[0]; print(f"offset: join={name}, {grown.Volume/1000:.2f} cm3"); break + except Exception as e: + print(f"offset: join={name} failed -- {e}") +if grown is None: + print("FAIL: could not offset the male; refusing to emit a zero-clearance pocket"); sys.exit(1) + +# ---- 3. the block: walls in X and Z, depth in +Y, OPEN at the Y=0 mouth --------------- +gb = grown.BoundBox +y_mouth = bb.YMin # the male's flat back plane +depth = gb.YMax - y_mouth +block = Part.makeBox(gb.XLength + 2*WALL, depth + FLOOR, gb.ZLength + 2*WALL, + App.Vector(gb.XMin - WALL, y_mouth, gb.ZMin - WALL)) +print(f"block : {gb.XLength + 2*WALL:.2f} x {depth + FLOOR:.2f} x {gb.ZLength + 2*WALL:.2f} mm, " + f"mouth on the Y={y_mouth:.2f} plane") + +female = block.cut(grown) + +# ---- 4. verify -------------------------------------------------------------------------- +ok = True +if not female.isValid(): print("FAIL: invalid shape"); ok = False +if len(female.Solids) != 1: print(f"FAIL: {len(female.Solids)} solids"); ok = False + +clash = male.common(female) +cv = clash.Volume if clash.Solids else 0.0 +print(f"check : male ∩ female = {cv:.6f} mm3 (seated fit, must be ~0)") +if cv > 1e-3: print("FAIL: male collides with female"); ok = False + +# the mouth must actually be open: the pocket has to reach the Y=y_mouth face of the block +mouth_face_area = 0.0 +for f in female.Faces: + c = f.CenterOfMass + if abs(c.y - y_mouth) < 1e-6: + mouth_face_area += f.Area +solid_mouth = (gb.XLength + 2*WALL) * (gb.ZLength + 2*WALL) +open_area = solid_mouth - mouth_face_area +print(f"check : mouth plane -- material {mouth_face_area:.1f} mm2, opening {open_area:.1f} mm2 " + f"({100*open_area/solid_mouth:.1f}% of the face)") +if open_area < 100: + print("FAIL: the pocket is sealed -- the male cannot be inserted"); ok = False + +cavity = block.Volume - female.Volume +print(f"check : cavity {cavity/1000:.2f} cm3 vs male {male.Volume/1000:.2f} cm3 " + f"-> clearance shell {(cavity-male.Volume)/1000:.2f} cm3") +if cavity < male.Volume: print("FAIL: cavity smaller than the male"); ok = False + +if not ok: + print("\nREFUSING to write the STEP"); sys.exit(1) + +doc = App.newDocument("Female") +obj = doc.addObject("Part::Feature", "BearConnector_Female") +obj.Shape = female +doc.recompute() +Part.export([obj], OUT_STEP) +fb = female.BoundBox +print(f"\nwrote {OUT_STEP}") +print(f"female: {fb.XLength:.2f} x {fb.YLength:.2f} x {fb.ZLength:.2f} mm, " + f"{len(female.Faces)} faces, {female.Volume/1000:.2f} cm3") diff --git a/docs/CAD/design/mate-connectors/mate-connector-virtual-sharp.png b/docs/CAD/design/mate-connectors/mate-connector-virtual-sharp.png new file mode 100644 index 0000000000..f9a80c1e10 Binary files /dev/null and b/docs/CAD/design/mate-connectors/mate-connector-virtual-sharp.png differ diff --git a/docs/CAD/design/mate-connectors/mateconnector-planarcentroid.png b/docs/CAD/design/mate-connectors/mateconnector-planarcentroid.png new file mode 100644 index 0000000000..16ca1c01e6 Binary files /dev/null and b/docs/CAD/design/mate-connectors/mateconnector-planarcentroid.png differ diff --git a/docs/CAD/design/mate-connectors/mateconnector-planarpoints.png b/docs/CAD/design/mate-connectors/mateconnector-planarpoints.png new file mode 100644 index 0000000000..d952ddc1f0 Binary files /dev/null and b/docs/CAD/design/mate-connectors/mateconnector-planarpoints.png differ diff --git a/docs/CAD/design/mate-connectors/matepointiconLG.png b/docs/CAD/design/mate-connectors/matepointiconLG.png new file mode 100644 index 0000000000..2f3022d116 Binary files /dev/null and b/docs/CAD/design/mate-connectors/matepointiconLG.png differ diff --git a/docs/CAD/design/mate-connectors/matepointreorientsecondaryaxis.png b/docs/CAD/design/mate-connectors/matepointreorientsecondaryaxis.png new file mode 100644 index 0000000000..bd65a9f40e Binary files /dev/null and b/docs/CAD/design/mate-connectors/matepointreorientsecondaryaxis.png differ diff --git a/docs/CAD/design/mate-connectors/muzzle_variants.py b/docs/CAD/design/mate-connectors/muzzle_variants.py new file mode 100644 index 0000000000..f4c9ab33b5 --- /dev/null +++ b/docs/CAD/design/mate-connectors/muzzle_variants.py @@ -0,0 +1,71 @@ +"""The muzzle has to READ, not just be present — wi3z. + +Faithfully scaled, the part's ridge is 11.3 mm on an 83 mm face: 13.6 % of the width. At glyph +size that is a scratch. A glyph is a symbol, not a scale model, so the question is how much +emphasis it takes before the only +Z feature actually reads. Variants, all with the same crest +geometry, differing only in width and colour. +""" +import math, os, importlib.util +from PIL import Image, ImageDraw +spec=importlib.util.spec_from_file_location("gp","glyph_preview.py") +gp=importlib.util.module_from_spec(spec); spec.loader.exec_module(gp) + +OUT, CHIN, MARKS, CREST, SBASE, PLATE = gp.OUT, gp.CHIN, gp.MARKS, gp.CREST, gp.SBASE, gp.PLATE +BODY=(0.42,0.46,0.52); MARK=(0.126,0.138,0.156); GOLD=(0.93,0.66,0.09) + +def facets(widen=1.0, muzzle_gold=False): + F=[]; n=len(OUT) + for i in range(n): + a,b=OUT[i],OUT[(i+1)%n] + F.append(([(a[0],a[1],0.0),(b[0],b[1],0.0),(b[0],b[1],PLATE),(a[0],a[1],PLATE)],BODY,True)) + F.append(([(x,y,PLATE) for x,y in OUT],BODY,True)) + zm=PLATE+0.004 + for cx,cy,r in MARKS: + F.append(([(cx+r*math.cos(2*math.pi*i/12),cy+r*math.sin(2*math.pi*i/12),zm) for i in range(12)],MARK,False)) + F.append(([(x,y,zm) for x,y in CHIN],MARK,False)) + A,B=CREST + w=lambda p:(p[0]*widen,p[1],PLATE) + nl,nr,tr,tl=(w(SBASE[0]),w(SBASE[1]),w(SBASE[2]),w(SBASE[3])) + col = GOLD if muzzle_gold else BODY + F+=[([nl,tl,B,A],col,True),([nr,A,B,tr],col,True), + ([nl,A,nr],col,True), ([tr,B,tl],col,True)] + return F + +def render(F, px, elev, ss=8): + S=px*ss; a=math.radians(elev); ca,sa=math.cos(a),math.sin(a) + xf=lambda p:(p[0],p[1]*sa+p[2]*ca,-p[1]*ca+p[2]*sa) + light=(-0.70,0.30,0.45) + img=Image.new("RGB",(S,S),(24,27,32)); d=ImageDraw.Draw(img) + tris=sorted(((sum(v[2] for v in [xf(q) for q in pts])/len(pts),[xf(q) for q in pts],c,sh) + for pts,c,sh in F), key=lambda t:t[0]) + for _,q,base,shade in tris: + (x0,y0,z0),(x1,y1,z1),(x2,y2,z2)=q[0],q[1],q[2] + ux,uy,uz=x1-x0,y1-y0,z1-z0; vx,vy,vz=x2-x0,y2-y0,z2-z0 + nx,ny,nz=uy*vz-uz*vy,uz*vx-ux*vz,ux*vy-uy*vx + L=math.sqrt(nx*nx+ny*ny+nz*nz) or 1.0; nx,ny,nz=nx/L,ny/L,nz/L + if nz<0: nx,ny,nz=-nx,-ny,-nz + k=(0.42+0.58*max(0.0,nx*light[0]+ny*light[1]+nz*light[2])) if shade else 1.0 + d.polygon([(S/2+p[0]*S*0.92,S/2-p[1]*S*0.92) for p in q], + fill=tuple(min(255,int(255*c*k)) for c in base)) + return img.resize((px,px),Image.LANCZOS) + +VAR=[("V1 faithful", 1.0, False), + ("V2 gold muzzle", 1.0, True), + ("V3 gold + 1.8x wide",1.8, True), + ("V4 body + 1.8x wide",1.8, False)] +big=Image.new("RGB",(4*250+30,4*140+30),(24,27,32)) +for r,(name,wd,gold) in enumerate(VAR): + F=facets(wd,gold) + for c,e in enumerate((90,47,16,6)): + big.paste(render(F,120,e),(15+c*250+60,15+r*140+10)) +big.save("/tmp/muzzle-variants.png") +for name,wd,gold in VAR: + F=facets(wd,gold); F0=[f for f in F][:-4] + row=[] + for e in (90,16,6): + a=render(F,32,e); b=render(F0,32,e) + la=sum(1 for p in a.get_flattened_data() if p!=(24,27,32)) + df=sum(1 for p,q in zip(a.get_flattened_data(),b.get_flattened_data()) if p!=q) + row.append(f"{100.0*df/max(1,la):5.1f}%") + print(f"{name:22} muzzle share at 90/16/6 deg: " + " ".join(row)) +print("WROTE /tmp/muzzle-variants.png") diff --git a/docs/CAD/design/mate-connectors/planarfacemateconnectors.png b/docs/CAD/design/mate-connectors/planarfacemateconnectors.png new file mode 100644 index 0000000000..9fea27ab2b Binary files /dev/null and b/docs/CAD/design/mate-connectors/planarfacemateconnectors.png differ diff --git a/docs/CAD/design/mate-connectors/relief-sheet.png b/docs/CAD/design/mate-connectors/relief-sheet.png new file mode 100644 index 0000000000..0c6d0d11f0 Binary files /dev/null and b/docs/CAD/design/mate-connectors/relief-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/relief_sheet.py b/docs/CAD/design/mate-connectors/relief_sheet.py new file mode 100644 index 0000000000..4b8bc6aa74 --- /dev/null +++ b/docs/CAD/design/mate-connectors/relief_sheet.py @@ -0,0 +1,99 @@ +"""Flat glyph vs 3D relief, at the elevations that killed the disc — wi3z. + +The flat study collapsed at 16 deg because anything drawn IN the connector's plane foreshortens by +sin(elevation). This renders the SAME bear as its real relief (1508 facets off the supplied male) +with a simple lambert shade, so the silhouette does the work at a grazing angle. Two rows, same +sizes, same elevations, so the comparison is direct. +""" +import json, math, os +from PIL import Image, ImageDraw + +HERE = os.path.dirname(os.path.abspath(__file__)) +M = json.load(open(os.path.join(HERE, "bear_mesh.json"))) +V, F = M["v"], M["f"] + +# Part frame: face carried by X (right) and Z (down-negative), relief along +Y. +P = [(v[0], -v[2], v[1]) for v in V] # -> (x right, y up, z out of the face) +xs=[p[0] for p in P]; ys=[p[1] for p in P]; zs=[p[2] for p in P] +CX,CY,CZ = (min(xs)+max(xs))/2, (min(ys)+max(ys))/2, (min(zs)+max(zs))/2 +SPAN = max(max(xs)-min(xs), max(ys)-min(ys)) +P = [((x-CX)/SPAN, (y-CY)/SPAN, (z-CZ)/SPAN) for x,y,z in P] + +def shade(px, elev_deg, supersample=8): + """Camera orbits down from straight-on (90) to grazing (small). Rotate about the screen x-axis.""" + S = px*supersample + a = math.radians(elev_deg) + ca, sa = math.cos(a), math.sin(a) + # view: rotate the model so the face normal tips away from the camera + def xf(p): + x,y,z = p + return (x, y*sa + z*ca, -y*ca + z*sa) # third component = depth toward camera + Q = [xf(p) for p in P] + img = Image.new("L", (S,S), 0) + d = ImageDraw.Draw(img) + order = [] + for tri in F: + a3 = [Q[i] for i in tri] + order.append((sum(v[2] for v in a3)/3.0, tri, a3)) + order.sort(key=lambda t: t[0]) # painter: far first + light = (-0.35, 0.55, 0.76) + for _, tri, a3 in order: + (x0,y0,z0),(x1,y1,z1),(x2,y2,z2) = a3 + ux,uy,uz = x1-x0, y1-y0, z1-z0 + vx,vy,vz = x2-x0, y2-y0, z2-z0 + nx,ny,nz = uy*vz-uz*vy, uz*vx-ux*vz, ux*vy-uy*vx + n = math.sqrt(nx*nx+ny*ny+nz*nz) or 1.0 + nx,ny,nz = nx/n, ny/n, nz/n + if nz < 0: nx,ny,nz = -nx,-ny,-nz # face the camera + lam = max(0.0, nx*light[0] + ny*light[1] + nz*light[2]) + val = int(70 + 185*lam) + pts = [(S/2 + x*S*0.92, S/2 - y*S*0.92) for x,y,_ in a3] + d.polygon(pts, fill=val) + return img.resize((px,px), Image.LANCZOS) + +# flat outline, for the side-by-side +D = json.load(open(os.path.join(HERE, "bear_outline.json"))) +def unit(pts): + p=[(x,-z) for x,z in pts] + return [((x-CX)/SPAN,(y-CY)/SPAN) for x,y in p] +OUT = unit(D["outer"]) +HOLES = [unit(h["pts"]) for h in D["holes"]] + +def flat(px, elev_deg, supersample=8): + S=px*supersample + img=Image.new("L",(S,S),0); d=ImageDraw.Draw(img) + k=math.sin(math.radians(elev_deg)) + m=lambda p:(S/2+p[0]*S*0.92, S/2-p[1]*S*0.92*k) + d.polygon([m(p) for p in OUT], fill=255) + for h in HOLES: d.polygon([m(p) for p in h], fill=0) + return img.resize((px,px), Image.LANCZOS) + +SIZES=[22,32,48]; ELEVS=[(90,"flat on"),(47,"47"),(16,"16"),(6,"6")] +pad,cell=8,58 +W=pad+len(SIZES)*len(ELEVS)*cell+pad; H=pad+2*cell+pad +sheet=Image.new("RGB",(W,H),(24,27,32)) +for r,fn in enumerate((flat, shade)): + for ci,(elev,_) in enumerate(ELEVS): + for si,px in enumerate(SIZES): + g=fn(px,elev) + tile=Image.new("RGB",(px,px),(24,27,32)) + if fn is flat: + tile.paste(Image.new("RGB",(px,px),(237,168,23)),(0,0),g) + else: + gg=g.convert("L") + tile=Image.merge("RGB",(gg.point(lambda v:min(255,int(v*1.00))), + gg.point(lambda v:int(v*0.71)), + gg.point(lambda v:int(v*0.16)))) + x=pad+(ci*len(SIZES)+si)*cell+(cell-px)//2 + y=pad+r*cell+(cell-px)//2 + sheet.paste(tile,(x,y)) +sheet.resize((W*2,H*2), Image.NEAREST).save(os.path.join(HERE,"relief-sheet.png")) + +# how much ink survives — the same measure used on the disc glyph +print(f"{'elev':>6} {'flat px@32':>11} {'relief px@32':>13}") +for elev,_ in ELEVS: + f32=flat(32,elev); s32=shade(32,elev) + fi=sum(1 for v in f32.getdata() if v>40) + si=sum(1 for v in s32.getdata() if v>40) + print(f"{elev:>6} {fi:>11} {si:>13}") +print("WROTE relief-sheet.png") diff --git a/docs/CAD/design/mate-connectors/relief_test.py b/docs/CAD/design/mate-connectors/relief_test.py new file mode 100644 index 0000000000..3fb83b2a8e --- /dev/null +++ b/docs/CAD/design/mate-connectors/relief_test.py @@ -0,0 +1,9 @@ +# Export the real male's relief as a triangle mesh, so the grazing test uses the actual geometry. +import os, json +import Part +HERE = os.path.dirname(os.path.abspath(__file__)) +s = Part.Shape(); s.read(os.path.join(HERE, "bear.step")) +verts, facets = s.Solids[0].tessellate(0.25) +V = [[round(p.x,4), round(p.y,4), round(p.z,4)] for p in verts] +json.dump({"v": V, "f": facets}, open(os.path.join(HERE, "bear_mesh.json"), "w")) +print(f"verts {len(V)} facets {len(facets)}") diff --git a/docs/CAD/design/mate-connectors/render_key.py b/docs/CAD/design/mate-connectors/render_key.py new file mode 100644 index 0000000000..eb4bcdbd99 --- /dev/null +++ b/docs/CAD/design/mate-connectors/render_key.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +"""Flat-shade the faceted ridge key from several camera directions. + +The point is not a pretty picture. It is one question: does a low-poly solid, flat-shaded, +let a human read its orientation from an arbitrary viewpoint -- and specifically, is the +view ALONG the ridge ambiguous between front and back, as the geometry suggests it must be +in silhouette? + +Flat shading (one normal per facet, no smoothing) is deliberate: it is what the concept +claims to rely on, and it is what a CAD viewport with hard normals actually produces. +""" +import numpy as np +from PIL import Image, ImageDraw + +# ---- the key, same numbers as faceted_ridge_key.scad +L, W, tf, H, pr, pf, hf = 12.0, 4.0, 0.45, 4.5, 0.22, 0.62, 0.35 +Wf, xr0, xr1, Hf = W * tf, -L / 2 + L * pr, -L / 2 + L * pf, H * hf + +V = np.array([(-L/2, -W, 0), (-L/2, W, 0), (L/2, Wf, 0), (L/2, -Wf, 0), + (xr0, 0, H), (xr1, 0, Hf)], dtype=float) +F = [[0, 1, 2, 3], [0, 4, 1], [0, 3, 5], [0, 5, 4], [1, 4, 5], [1, 5, 2], [3, 2, 5]] + +LIGHT = np.array([0.35, -0.5, 0.78]) # a headlight-ish key light +LIGHT /= np.linalg.norm(LIGHT) + + +def look_at(eye, target, up=(0, 0, 1)): + f = np.array(target, float) - np.array(eye, float) + f /= np.linalg.norm(f) + up = np.array(up, float) + if abs(np.dot(f, up)) > 0.999: + up = np.array([0, 1, 0], float) + r = np.cross(f, up); r /= np.linalg.norm(r) + u = np.cross(r, f) + return r, u, f + + +def render(eye, target, path, size=(620, 460), scale=26.0, label=""): + r, u, f = look_at(eye, target) + eye = np.array(eye, float) + cam = np.stack([r, u, f]) # world -> camera rows + P = (V - eye) @ cam.T # orthographic: x,y screen, z depth + + w, h = size + img = Image.new("RGB", size, (238, 240, 243)) + d = ImageDraw.Draw(img) + + def to_px(p): + return (w / 2 + p[0] * scale, h / 2 - p[1] * scale) + + faces = [] + for face in F: + pts = V[face] + n = np.cross(pts[1] - pts[0], pts[2] - pts[0]) + n /= np.linalg.norm(n) + centre = pts.mean(axis=0) + if np.dot(n, centre - eye) > 0: # back-face cull + continue + depth = P[face][:, 2].mean() + lam = max(0.0, float(np.dot(n, LIGHT))) + shade = 0.22 + 0.78 * lam # flat: ONE value for the whole facet + col = tuple(int(255 * shade * c) for c in (0.86, 0.72, 0.35)) + faces.append((depth, [to_px(P[i]) for i in face], col)) + + for _, poly, col in sorted(faces, key=lambda t: -t[0]): # painter's algorithm + d.polygon(poly, fill=col) + + if label: + d.rectangle([8, 8, 8 + 9 * len(label), 30], fill=(255, 255, 255)) + d.text((14, 14), label, fill=(20, 20, 20)) + img.save(path) + return path + + +if __name__ == "__main__": + t = (0, 0, H * 0.35) + views = [ + ((26, -22, 20), "iso: the reference view"), + ((30, 0, 6), "ALONG +X (from the FRONT, low end)"), + ((-30, 0, 6), "ALONG -X (from the BACK, tall end)"), + ((0, 0, 34), "ALONG +Z (straight down the mating axis)"), + ((2, -32, 5), "ALONG -Y (broadside, grazing)"), + ] + for i, (eye, lab) in enumerate(views): + print(render(eye, t, f"rk-{i}.png", label=lab)) diff --git a/docs/CAD/design/mate-connectors/render_stl.py b/docs/CAD/design/mate-connectors/render_stl.py new file mode 100644 index 0000000000..16ad0e92a9 --- /dev/null +++ b/docs/CAD/design/mate-connectors/render_stl.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 +"""Flat-shade an ASCII/binary STL from several directions. + +Used to answer one question with a picture instead of an argument: does a RECESSED faceted +pocket read as an oriented feature, or does a concave feature collapse into a dark hole? +""" +import struct +import sys +import numpy as np +from PIL import Image, ImageDraw + +LIGHT = np.array([0.35, -0.5, 0.78]); LIGHT /= np.linalg.norm(LIGHT) + + +def load_stl(path): + data = open(path, "rb").read() + if data[:5] == b"solid" and b"facet" in data[:2000]: + tris, cur = [], [] + for line in data.decode("ascii", "ignore").splitlines(): + s = line.split() + if s and s[0] == "vertex": + cur.append([float(x) for x in s[1:4]]) + if len(cur) == 3: + tris.append(cur); cur = [] + return np.array(tris, dtype=float) + n = struct.unpack(" 0.999: up = np.array([0, 1.0, 0]) + r = np.cross(f, up); r /= np.linalg.norm(r) + u = np.cross(r, f) + cam = np.stack([r, u, f]) + + w, h = size + img = Image.new("RGB", size, (238, 240, 243)); d = ImageDraw.Draw(img) + faces = [] + for t in tris: + n = np.cross(t[1] - t[0], t[2] - t[0]) + ln = np.linalg.norm(n) + if ln < 1e-12: continue + n /= ln + c = t.mean(axis=0) + if np.dot(n, c - eye) > 0: continue # cull back faces + P = (t - eye) @ cam.T + lam = max(0.0, float(np.dot(n, LIGHT))) + shade = 0.20 + 0.80 * lam + col = tuple(int(255 * shade * ch) for ch in (0.86, 0.72, 0.35)) + poly = [(w / 2 + p[0] * scale, h / 2 - p[1] * scale) for p in P] + faces.append((P[:, 2].mean(), poly, col)) + for _, poly, col in sorted(faces, key=lambda x: -x[0]): + d.polygon(poly, fill=col) + if label: + d.rectangle([8, 8, 8 + 9 * len(label), 30], fill=(255, 255, 255)) + d.text((14, 14), label, fill=(20, 20, 20)) + img.save(path) + + +if __name__ == "__main__": + tris = load_stl(sys.argv[1]) + print("triangles:", len(tris)) + views = [((26, -22, 20), "iso"), ((0, 0, 34), "straight down +Z"), + ((4, -30, 9), "grazing"), ((-28, -10, 12), "from the tall end")] + for i, (eye, lab) in enumerate(views): + render(tris, eye, (0, 0, 0), f"fem-{i}.png", label=f"FEMALE POCKET — {lab}") + print(f"fem-{i}.png") diff --git a/docs/CAD/design/mate-connectors/rk-0.png b/docs/CAD/design/mate-connectors/rk-0.png new file mode 100644 index 0000000000..1d7208238a Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-0.png differ diff --git a/docs/CAD/design/mate-connectors/rk-1.png b/docs/CAD/design/mate-connectors/rk-1.png new file mode 100644 index 0000000000..282bd0a2fe Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-1.png differ diff --git a/docs/CAD/design/mate-connectors/rk-2.png b/docs/CAD/design/mate-connectors/rk-2.png new file mode 100644 index 0000000000..75d83e1402 Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-2.png differ diff --git a/docs/CAD/design/mate-connectors/rk-3.png b/docs/CAD/design/mate-connectors/rk-3.png new file mode 100644 index 0000000000..eccdf94807 Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-3.png differ diff --git a/docs/CAD/design/mate-connectors/rk-4.png b/docs/CAD/design/mate-connectors/rk-4.png new file mode 100644 index 0000000000..794fd4bd97 Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-4.png differ diff --git a/docs/CAD/design/mate-connectors/rk-back.png b/docs/CAD/design/mate-connectors/rk-back.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/CAD/design/mate-connectors/rk-front.png b/docs/CAD/design/mate-connectors/rk-front.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/CAD/design/mate-connectors/rk-iso.png b/docs/CAD/design/mate-connectors/rk-iso.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/CAD/design/mate-connectors/rk-sheet.png b/docs/CAD/design/mate-connectors/rk-sheet.png new file mode 100644 index 0000000000..e785a02839 Binary files /dev/null and b/docs/CAD/design/mate-connectors/rk-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/simplify-sheet.png b/docs/CAD/design/mate-connectors/simplify-sheet.png new file mode 100644 index 0000000000..9c05180c59 Binary files /dev/null and b/docs/CAD/design/mate-connectors/simplify-sheet.png differ diff --git a/docs/CAD/design/mate-connectors/simplify_study.py b/docs/CAD/design/mate-connectors/simplify_study.py new file mode 100644 index 0000000000..c0bbcf63ab --- /dev/null +++ b/docs/CAD/design/mate-connectors/simplify_study.py @@ -0,0 +1,142 @@ +"""Reduce the bear face to the fewest marks that still read at glyph size — wi3z. + +Geometry comes from bear_outline.json, which extract_outline.py pulled off the supplied male +B-rep's back plate: the outer wire IS the silhouette, the inner wires are the two eyes and the +muzzle opening. Nothing here is traced by eye. + +The glyph is drawn IN the connector's plane, so a grazing view foreshortens it along one axis by +sin(elevation) — exactly what collapsed the disc's roll quadrant to 3 pixels at 10 deg. Every +candidate is therefore rendered at three elevations as well as three pixel sizes. +""" +import json, math, os +from PIL import Image, ImageDraw + +HERE = os.path.dirname(os.path.abspath(__file__)) +D = json.load(open(os.path.join(HERE, "bear_outline.json"))) + +def norm(pts): + """Part frame (X right, Z down-negative) -> glyph frame (x right, y up), centred, unit height.""" + p = [(x, -z) for x, z in pts] + return p + +outer = norm(D["outer"]) +holes = [norm(h["pts"]) for h in D["holes"]] +# the two Ø9.8 wires are the eyes; the wide one is the muzzle +eyes = [h for h, meta in zip(holes, D["holes"]) if meta["d"] < 20] +muzzle = [h for h, meta in zip(holes, D["holes"]) if meta["d"] >= 20] + +ALL = outer + [p for h in holes for p in h] +xs = [p[0] for p in ALL]; ys = [p[1] for p in ALL] +CX, CY = (min(xs)+max(xs))/2, (min(ys)+max(ys))/2 +SPAN = max(max(xs)-min(xs), max(ys)-min(ys)) +def to_unit(pts): return [((x-CX)/SPAN, (y-CY)/SPAN) for x, y in pts] + +def rdp(pts, eps): + """Douglas-Peucker. Vertex count is the honest measure of 'how simplified'.""" + if len(pts) < 3: return pts + ax, ay = pts[0]; bx, by = pts[-1] + dx, dy = bx-ax, by-ay + n = math.hypot(dx, dy) + best, bi = -1.0, 0 + for i in range(1, len(pts)-1): + px, py = pts[i] + d = abs(dx*(ay-py) - (ax-px)*dy)/n if n > 1e-12 else math.hypot(px-ax, py-ay) + if d > best: best, bi = d, i + if best <= eps: + return [pts[0], pts[-1]] + return rdp(pts[:bi+1], eps)[:-1] + rdp(pts[bi:], eps) + +def simp_closed(pts, eps): + r = rdp(pts + [pts[0]], eps) + return r[:-1] + +def centroid(pts): + return (sum(p[0] for p in pts)/len(pts), sum(p[1] for p in pts)/len(pts)) + +U_OUT = to_unit(outer) +U_EYE = [to_unit(e) for e in eyes] +U_MUZ = [to_unit(m) for m in muzzle] + +def eye_dots(scale=1.0): + out = [] + for e in U_EYE: + cx, cy = centroid(e) + r = max(max(p[0] for p in e)-min(p[0] for p in e), + max(p[1] for p in e)-min(p[1] for p in e))/2*scale + out.append((cx, cy, r)) + return out + +def muzzle_tri(): + """The muzzle reduced to one filled triangle: its two lower corners and its apex.""" + m = U_MUZ[0] + lo = min(p[1] for p in m); hi = max(p[1] for p in m) + bottom = [p for p in m if p[1] < lo + 0.06*(hi-lo)] + apex = max(m, key=lambda p: p[1]) + return [min(bottom), max(bottom), apex] + +CANDIDATES = { + "C0 full": dict(out=U_OUT, eyes=eye_dots(), muz=U_MUZ[0]), + "C1 eps .004": dict(out=simp_closed(U_OUT, .004), eyes=eye_dots(), muz=simp_closed(U_MUZ[0], .004)), + "C2 eps .012": dict(out=simp_closed(U_OUT, .012), eyes=eye_dots(), muz=muzzle_tri()), + "C3 eps .030": dict(out=simp_closed(U_OUT, .030), eyes=eye_dots(1.15), muz=muzzle_tri()), + "C4 no eyes": dict(out=simp_closed(U_OUT, .012), eyes=[], muz=muzzle_tri()), +} + +def sym_report(pts, tol=0.02): + """Trivial symmetry group is the property doing the work. If a simplification restores a + mirror or a 180 deg rotation, that simplification is wrong.""" + def match(tf): + t = [tf(p) for p in pts] + hit = 0 + for q in t: + if min(math.hypot(q[0]-p[0], q[1]-p[1]) for p in pts) <= tol: hit += 1 + return hit, len(pts) + return { + "mirror-x": match(lambda p: (-p[0], p[1])), + "mirror-y": match(lambda p: ( p[0], -p[1])), + "rot-180": match(lambda p: (-p[0], -p[1])), + } + +def render(c, px, elev_deg, supersample=8): + S = px*supersample + img = Image.new("L", (S, S), 0) + d = ImageDraw.Draw(img) + k = math.sin(math.radians(elev_deg)) + def m(p): + return (S/2 + p[0]*S*0.92, S/2 - p[1]*S*0.92*k) + d.polygon([m(p) for p in c["out"]], fill=255) + if c["muz"]: d.polygon([m(p) for p in c["muz"]], fill=0) + for cx, cy, r in c["eyes"]: + a = m((cx-r, cy+r)); b = m((cx+r, cy-r)) + d.ellipse([a[0], a[1], b[0], b[1]], fill=0) + return img.resize((px, px), Image.LANCZOS) + +print(f"{'candidate':14} {'verts':>6} {'marks':>6} symmetry (matched/total, lower is better)") +print("-"*78) +for name, c in CANDIDATES.items(): + s = sym_report(c["out"]) + marks = 1 + (1 if c["muz"] else 0) + len(c["eyes"]) + sym = " ".join(f"{k} {v[0]}/{v[1]}" for k, v in s.items()) + print(f"{name:14} {len(c['out']):6} {marks:6} {sym}") + +SIZES = [22, 32, 48] +ELEVS = [(90, "flat on"), (47, "47 deg"), (16, "16 deg"), (6, "6 deg")] +pad, cell = 8, 56 +W = pad + len(SIZES)*len(ELEVS)*cell + pad +H = pad + len(CANDIDATES)*cell + pad +sheet = Image.new("RGB", (W, H), (24, 27, 32)) +for r, (name, c) in enumerate(CANDIDATES.items()): + for ci, (elev, _) in enumerate(ELEVS): + for si, px in enumerate(SIZES): + g = render(c, px, elev) + tile = Image.new("RGB", (px, px), (24, 27, 32)) + gold = Image.new("RGB", (px, px), (237, 168, 23)) + tile.paste(gold, (0, 0), g) + x = pad + (ci*len(SIZES)+si)*cell + (cell-px)//2 + y = pad + r*cell + (cell-px)//2 + sheet.paste(tile, (x, y)) +sheet = sheet.resize((W*2, H*2), Image.NEAREST) +sheet.save(os.path.join(HERE, "simplify-sheet.png")) +print("\ncolumns: " + " | ".join(f"{e[1]} @ 22/32/48px" for e in ELEVS)) +print("rows: " + ", ".join(CANDIDATES)) +print("WROTE simplify-sheet.png") diff --git a/docs/CAD/design/mate-connectors/size-test.png b/docs/CAD/design/mate-connectors/size-test.png new file mode 100644 index 0000000000..941f76ffb8 Binary files /dev/null and b/docs/CAD/design/mate-connectors/size-test.png differ diff --git a/docs/CAD/design/mate-connectors/sz-22-down+Z.png b/docs/CAD/design/mate-connectors/sz-22-down+Z.png new file mode 100644 index 0000000000..85cbf9ba4e Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-22-down+Z.png differ diff --git a/docs/CAD/design/mate-connectors/sz-22-grazing.png b/docs/CAD/design/mate-connectors/sz-22-grazing.png new file mode 100644 index 0000000000..047f2c6e06 Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-22-grazing.png differ diff --git a/docs/CAD/design/mate-connectors/sz-22-iso.png b/docs/CAD/design/mate-connectors/sz-22-iso.png new file mode 100644 index 0000000000..55b8a13eed Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-22-iso.png differ diff --git a/docs/CAD/design/mate-connectors/sz-32-down+Z.png b/docs/CAD/design/mate-connectors/sz-32-down+Z.png new file mode 100644 index 0000000000..683fc3d0aa Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-32-down+Z.png differ diff --git a/docs/CAD/design/mate-connectors/sz-32-grazing.png b/docs/CAD/design/mate-connectors/sz-32-grazing.png new file mode 100644 index 0000000000..92e17ca09a Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-32-grazing.png differ diff --git a/docs/CAD/design/mate-connectors/sz-32-iso.png b/docs/CAD/design/mate-connectors/sz-32-iso.png new file mode 100644 index 0000000000..1fe0ccb091 Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-32-iso.png differ diff --git a/docs/CAD/design/mate-connectors/sz-48-down+Z.png b/docs/CAD/design/mate-connectors/sz-48-down+Z.png new file mode 100644 index 0000000000..ec451714ff Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-48-down+Z.png differ diff --git a/docs/CAD/design/mate-connectors/sz-48-grazing.png b/docs/CAD/design/mate-connectors/sz-48-grazing.png new file mode 100644 index 0000000000..524c8e5343 Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-48-grazing.png differ diff --git a/docs/CAD/design/mate-connectors/sz-48-iso.png b/docs/CAD/design/mate-connectors/sz-48-iso.png new file mode 100644 index 0000000000..e0ed208b64 Binary files /dev/null and b/docs/CAD/design/mate-connectors/sz-48-iso.png differ diff --git a/docs/CAD/design/mate-connectors/t-+0.1-0.png b/docs/CAD/design/mate-connectors/t-+0.1-0.png new file mode 100644 index 0000000000..b0c09ef253 Binary files /dev/null and b/docs/CAD/design/mate-connectors/t-+0.1-0.png differ diff --git a/docs/CAD/design/mate-connectors/t-+0.1-1.png b/docs/CAD/design/mate-connectors/t-+0.1-1.png new file mode 100644 index 0000000000..782cd16c0d Binary files /dev/null and b/docs/CAD/design/mate-connectors/t-+0.1-1.png differ diff --git a/docs/CAD/design/mate-connectors/t-+1.6-0.png b/docs/CAD/design/mate-connectors/t-+1.6-0.png new file mode 100644 index 0000000000..f3b37f6697 Binary files /dev/null and b/docs/CAD/design/mate-connectors/t-+1.6-0.png differ diff --git a/docs/CAD/design/mate-connectors/t-+1.6-1.png b/docs/CAD/design/mate-connectors/t-+1.6-1.png new file mode 100644 index 0000000000..731e092769 Binary files /dev/null and b/docs/CAD/design/mate-connectors/t-+1.6-1.png differ diff --git a/docs/CAD/design/mate-connectors/trim-cmp.png b/docs/CAD/design/mate-connectors/trim-cmp.png new file mode 100644 index 0000000000..8dcc0c973f Binary files /dev/null and b/docs/CAD/design/mate-connectors/trim-cmp.png differ diff --git a/docs/CAD/design/mate-connectors/trim_female.py b/docs/CAD/design/mate-connectors/trim_female.py new file mode 100644 index 0000000000..2753e4a3a8 --- /dev/null +++ b/docs/CAD/design/mate-connectors/trim_female.py @@ -0,0 +1,74 @@ +# Trim the boxy frame off the female so its outer shape is the bear face itself. +# +# Method: take the male's flat back face (the plane Y=0 -- that face IS the bear silhouette), +# offset its OUTER wire outward in 2D, extrude the result along the insertion axis, and keep only +# the part of the female inside it. Everything outside is the block frame and goes away. +# +# NOTE ON THE NUMBER. The pocket's side walls stand at +0.20 mm from the male outline, because that +# is the clearance. A trim boundary at +0.10 mm therefore falls INSIDE them by 0.10 mm and removes +# the side wall entirely rather than leaving a thin one. The script runs the requested value and +# then measures what is actually left, so the outcome is a number rather than an opinion; it also +# emits a second variant at an offset that leaves a printable wall, for comparison. +# +# Run: /snap/bin/freecad.cmd trim_female.py + +import os, sys +import FreeCAD as App +import Part +from FreeCAD import Vector + +HERE = os.path.dirname(os.path.abspath(__file__)) +MALE = os.path.join(HERE, "bear.step") +FEMALE = os.path.join(HERE, "BearConnector_Female.step") + +REQUESTED = 0.10 # as asked +CLEARANCE = 0.20 # what the pocket was built with +SAFE_WALL = 1.60 # a wall that survives an FDM nozzle: clearance + ~1.4 mm + +male = Part.Shape(); male.read(MALE); male = male.Solids[0] +fem = Part.Shape(); fem.read(FEMALE); fem = fem.Solids[0] +print(f"female in : {fem.Volume/1000:.2f} cm3, {len(fem.Faces)} faces") + +# --- the bear silhouette: the male's flat back face at Y = 0 +back = None +for f in male.Faces: + n = f.normalAt(0, 0) + if abs(f.CenterOfMass.y) < 1e-6 and abs(abs(n.y) - 1.0) < 1e-6: + if back is None or f.Area > back.Area: + back = f +if back is None: + print("FAIL: could not find the flat back face at Y=0"); sys.exit(1) +print(f"silhouette: back face area {back.Area:.1f} mm2, {len(back.Wires)} wires " + f"(outer + {len(back.Wires)-1} holes: eyes and mouth)") + +fb = fem.BoundBox +y0, y1 = fb.YMin - 5.0, fb.YMax + 5.0 + +def trimmed(offset): + """keep only the part of the female inside the silhouette grown by `offset`""" + wire = back.OuterWire + grown = wire.makeOffset2D(offset, join=2, fill=False, openResult=False, intersection=True) + face = Part.Face(Part.Wire(grown.Edges)) + prism = face.extrude(Vector(0, y1 - y0, 0)) + prism.translate(Vector(0, y0 - face.CenterOfMass.y, 0)) + return fem.common(prism) + +for tag, off, out in (("requested", REQUESTED, "BearConnector_Female_Trimmed.step"), + ("safe wall", SAFE_WALL, "BearConnector_Female_Trimmed_wall.step")): + r = trimmed(off) + if not r.Solids: + print(f"\n{tag} (+{off:.2f} mm): NOTHING LEFT"); continue + wall = off - CLEARANCE + # is there any material left at the level of the pocket's side wall? + sec = r.section(Part.makePlane(400, 400, Vector(-200, 1.5, -200), Vector(0, 1, 0))) + perim = sum(e.Length for e in sec.Edges) + print(f"\n{tag} (+{off:.2f} mm) wall = {wall:+.2f} mm") + print(f" volume {r.Volume/1000:.2f} cm3, {len(r.Solids)} solid(s), {len(r.Faces)} faces") + print(f" section through the pocket wall at Y=1.5: {perim:.1f} mm of edge") + if wall <= 0: + print(f" -> the trim cuts {abs(wall):.2f} mm INSIDE the pocket wall: no side wall remains") + doc = App.newDocument(tag.replace(" ", "_")) + o = doc.addObject("Part::Feature", "Female") + o.Shape = r; doc.recompute() + Part.export([o], os.path.join(HERE, out)) + print(f" wrote {out}") diff --git a/docs/CAD/design/mate-connectors/verify_trimmed.py b/docs/CAD/design/mate-connectors/verify_trimmed.py new file mode 100644 index 0000000000..81f6f3fea1 --- /dev/null +++ b/docs/CAD/design/mate-connectors/verify_trimmed.py @@ -0,0 +1,25 @@ +# Check both trimmed females still fit the male, and export STLs for a visual comparison. +# Run: /snap/bin/freecad.cmd verify_trimmed.py +import os +import Mesh, Part + +HERE = os.path.dirname(os.path.abspath(__file__)) +male = Part.Shape(); male.read(os.path.join(HERE, "bear.step")); male = male.Solids[0] + +for name in ("BearConnector_Female_Trimmed", "BearConnector_Female_Trimmed_wall"): + p = os.path.join(HERE, name + ".step") + s = Part.Shape(); s.read(p); s = s.Solids[0] + d = male.distToShape(s)[0] + c = male.common(s) + cv = c.Volume if c.Solids else 0.0 + bb = s.BoundBox + print(f"{name}") + print(f" {bb.XLength:.2f} x {bb.YLength:.2f} x {bb.ZLength:.2f} mm, {s.Volume/1000:.2f} cm3, " + f"{len(s.Faces)} faces, valid={s.isValid()}") + print(f" gap to male {d:.4f} mm, interference {cv:.6f} mm3") + m = Mesh.Mesh(); m.addFacets([tuple(t) for t in s.tessellate(0.12)[1]] and + [(s.tessellate(0.12)[0][a], s.tessellate(0.12)[0][b], + s.tessellate(0.12)[0][c2]) + for a, b, c2 in s.tessellate(0.12)[1]]) + m.write(os.path.join(HERE, name + ".stl")) + print(f" wrote {name}.stl ({m.CountFacets} facets)") diff --git a/docs/CAD/design_tab.md b/docs/CAD/design_tab.md new file mode 100644 index 0000000000..1be0a2ea33 --- /dev/null +++ b/docs/CAD/design_tab.md @@ -0,0 +1,333 @@ +# The Design tab + +Object-driven parametric CAD inside the slicer. Point at geometry; the geometry offers the +verbs that apply to it. Selection comes first and the tool consumes it. Draw a sketch, +constrain it, turn it into a solid, refine it, and send it straight to Prepare — without +leaving for another application and coming back through an STL. + +The model is a **recipe**, not a mesh. Every action becomes a feature in a tree that is +replayed from the start whenever anything changes, so editing a dimension you set twenty +steps ago rebuilds everything downstream. The geometry kernel is OCCT, which the slicer +already ships for STEP import. + +--- + +## Getting started + +1. Open the **Design** tab. +2. Click a face or a reference plane in the viewport, then press `Shift+S` (Sketch). The offer + opens with the sketch tools on it. +3. Draw a closed profile, then press **✓ Confirm** in the floating action bar. +4. With the sketch selected, press `Shift+E` (Extrude). +5. Press **Commit to Plate** to hand the solid to Prepare. + +The status line under the toolbar is the thing to watch: it says what the current tool is +waiting for. When no plane is picked it reads *"Click a face or a reference plane in the +viewport, then a sketch tool"*; once one is picked it reads *"Sketching on — pick a +tool"*. It is also where a refusal explains itself. + +--- + +## Selecting + +- One left-click selects what is under the cursor. There is no click-cycling through + face → edge → body. +- A click near a corner takes the corner, not the face behind it. +- Left-drag sweeps a rubber band, and a rubber band takes the whole body. +- An open sketch line can be clicked, even where it bounds a region. +- Double-click a sketch stroke to edit it — the gesture belongs on the geometry. +- Editing a dimension's value **updates** that dimension instead of adding a second one next + to it. +- The floating chrome that belongs to a sketch leaves with the sketch when it ends. +- Sketching happens on the face you clicked, first click. +- A sketch whose entities form no wire **fails** instead of extruding a default box. A + subtraction that removes nothing is reported as an error instead of a silent success. + +--- + +## The offer + +Right-click on the geometry, released without moving the mouse (an 8 px budget — a +right-drag that orbits the camera does not open it). Left-click still only selects, so +pointing at things stays quiet. + +The offer also opens by itself the moment you press Sketch on a face or plane, showing the +sketch tools — the app hands you the tools directly. + +**Eight families, always in this fixed order:** Create, Add material, Remove, Dress-up, +Repeat, Transform, Reference, Modify. + +- A family with at least one applicable verb shows it. Several applicable verbs collapse + into a submenu under the family name. +- A family with nothing applicable is **shown greyed in place, with the reason** — e.g. + *"Create — Click a face or a reference plane in the viewport, then a sketch tool"*. It is + not hidden. A control that cannot be used still says what it is and what you would have to + do first. +- Inside a sketch the offer shows the sketch verbs; outside it shows the feature verbs. + +**Document-level actions never enter the offer**, because they act on the document and not +on a selection: Import STEP, Import mesh, Text, SVG, Export STEP, Commit to Plate, Undo, +Redo, Variables, Section view, Origin planes, World axes. They live in the toolbar. + +--- + +## Keyboard + +Single letters drive sketch tools **while a sketch is open**; Shift+letter drives feature +tools and single letters drive view toggles **when no sketch is open**. The two maps are +selected by the mode, not by whether a sketch session is running. + +### Sketch (while a sketch is open) + +| Key | Tool | +|---|---| +| `L` | Line — click start, then end | +| `R` | Rectangle — click two opposite corners | +| `C` | Circle — click centre, then radius | +| `A` | Arc — click start, end, then a point | +| `S` | Slot — two centreline ends, then width | +| `E` | Ellipse — centre, major end, minor point | +| `B` | Spline — click control points | +| `P` | Point — click to place | +| `G` | Polygon — click centre, then a vertex | +| `D` | Dimension — click 2 points or an entity | +| `T` | Trim — click a segment to trim it | +| `X` | Extend — click a line/arc to extend it | +| `O` | Offset — pick an entity, drag the distance | +| `M` | Mirror — pick axis, then entities | +| `F` | Fillet — pick two lines, set the radius | +| `H` | Chamfer — pick two lines, set the distance | +| `K` | Constrain — finish the live sketch and enter constrain | +| `Q` | Construction toggle — draw the next entity as construction geometry | +| `Del` | Delete the selected sketch entity | +| `Esc` | Cancel the live tool | + +### Feature (when no sketch is open) + +| Key | Tool | +|---|---| +| `Shift+S` | Sketch | +| `Shift+E` | Extrude — extrude a profile, or push/pull a picked face | +| `Shift+R` | Revolve | +| `Shift+W` | Sweep | +| `Shift+L` | Loft | +| `Shift+N` | Pattern | +| `Shift+G` | Surface Extrude | +| `Shift+J` | Surface Revolve | +| `Shift+O` | Surface Loft | +| `Shift+Q` | Surface Fill | +| `Shift+U` | Surface Offset | +| `Shift+V` | Thicken Surface | +| `Shift+P` | Plane | +| `Shift+A` | Axis | +| `Shift+C` | Coord Sys | +| `Shift+Y` | Transform | +| `Shift+Z` | Mirror | +| `Shift+B` | Boolean | +| `Shift+X` | Cut | +| `Shift+F` | Fillet / Chamfer | +| `Shift+D` | Draft | +| `Shift+K` | Shell | +| `Shift+H` | Hole | +| `Shift+T` | Thread | +| `Shift+I` | Import STEP | +| `Shift+M` | Import mesh | + +### View toggles (single letters, when no sketch is open) + +| Key | Action | +|---|---| +| `Home` | Axonometric view, fitted to the model | +| `P` | Origin planes on/off | +| `A` | World axes on/off | +| `X` | Section view on/off | + +While the section is on: `PageUp` / `PageDown` move the cut plane, `F` flips which half is +kept. With no section on, `F` is Place on Face — lay the picked face flat on the bed. + +--- + +## Sketching + +A sketch is a closed (or open) 2D profile on a plane or on a flat face of an existing body. +Press `Shift+S`, click the face or plane you want to sketch on, and draw. The toolbar and +the offer both carry the sketch tools. + +**Entities:** line, polyline, rectangle (corner / centre / oblique / rounded), circle +(centre-radius / 2-point / 3-point), arc (centre-point / 3-point / tangent), ellipse and +elliptical arc, polygon (inscribed / circumscribed), slot (straight / arc), spline, point, +and text. + +**Editing:** move, rotate, scale, trim, extend, offset, mirror, and linear or polar arrays. + +**Constraints:** coincident, horizontal, vertical, parallel, perpendicular, tangent, equal, +concentric, midpoint, symmetric, fix, plus dimensional radius, diameter, distance and angle. +The solver reports the remaining degrees of freedom and tells you when a sketch is fully +constrained — or when a constraint conflicts with one already there. + +Sketches stay editable. Selecting one in the feature tree reopens it with its dimensions +live. + +--- + +## Building solids + +Grouped in the toolbar by what they do, one concept per drawer. + +### Add material +| Tool | Shortcut | What it does | +|---|---|---| +| Extrude | `Shift+E` | Extrude a profile, or push/pull a face already on a body | +| Revolve | `Shift+R` | Revolve a profile about an axis | +| Sweep | `Shift+W` | Sweep a profile along a path — including a helix, for springs and augers | +| Loft | `Shift+L` | Skin between two or more profiles | +| Thicken | — | Offset a solid face into a thin plate as a new body | +| Rib | — | Grow a stiffening wall from an open sketch line, fused to a body | + +Extrude offers blind, symmetric, two-sided, through-all and up-to-face end conditions, plus +a draft angle on the side wall, and can add, subtract, intersect or start a new body. + +### Surface +Sheet bodies — surfaces with no thickness — for shapes that are easier to build as skins and +solidify afterwards. + +| Tool | Shortcut | +|---|---| +| Surface Extrude | `Shift+G` | +| Surface Revolve | `Shift+J` | +| Surface Loft | `Shift+O` | +| Surface Fill | `Shift+Q` | +| Surface Offset | `Shift+U` | +| Thicken Surface | `Shift+V` | + +Thicken Surface is how a sheet becomes a printable solid. + +### Dress-up +| Tool | Shortcut | +|---|---| +| Fillet / Chamfer | `Shift+F` | +| Draft (taper a face) | `Shift+D` | +| Shell | `Shift+K` | +| Delete Face | — | + +Delete Face removes faces and heals the solid — useful for stripping a feature off an +imported part. + +### Holes +**Hole** (`Shift+H`) drills simple, counterbored or countersunk holes, with an ISO/ANSI +standards table so you can ask for an M6 clearance hole instead of computing a diameter. +**Thread** (`Shift+T`) cuts a real helical thread into a bore or onto a shaft. + +### Placement +Operations that move a body without changing its shape: **Transform** (`Shift+Y`), +**Mirror** (`Shift+Z`), and **Mate** for assemblies. + +### Combining +**Boolean** (`Shift+B`) unions, subtracts or intersects two bodies. **Cut** (`Shift+X`) +splits a body with a plane. **Pattern** (`Shift+N`) repeats a body linearly, in a circle, or +along a curve. + +--- + +## Reference geometry + +Datum features carry no material; they exist to give later features something to attach to. + +- **Plane** (`Shift+P`) — offset, tilted, midplane, tangent, through two edges, or coincident +- **Axis** (`Shift+A`) — two points, a face normal, a cylinder centreline, the intersection of + two planes, or along an edge +- **Coord Sys** (`Shift+C`) — a full frame, from a world point or from a face plus a + direction edge +- **Helix** — a helical curve to sweep along +- **Project** — project a body's edges onto a plane as sketch geometry + +On the Coord Sys tool, picking a direction **edge** is worth the extra click: without one the +frame takes its X from the face's first edge, which is deterministic but not necessarily the +direction you meant. + +--- + +## Assemblies + +**Mate** aligns two coordinate systems and moves one body onto the other. Five kinds: + +| Kind | Leaves free | +|---|---| +| Fastened | nothing — 6 DOF locked | +| Planar | sliding in the plane | +| Revolute | rotation about the axis | +| Slider | sliding along the axis | +| Cylindrical | rotation *and* sliding | + +**Check interference** reports every overlapping pair of solids with the overlapping volume, +so a clash is a number rather than an impression. Bodies that merely touch enclose no volume +and are not reported. + +--- + +## Variables and expressions + +Define named variables and drive dimensions from them. Any numeric field accepts an +expression — `width/2`, `wall*3` — and everything re-evaluates on recompute. Change one +variable and the whole model follows. + +--- + +## Import and export + +**Import STEP** brings in a real B-rep solid, not a mesh: its faces and edges can be filleted, +shelled and cut like anything modelled here. + +**Import mesh** (STL/OBJ) converts triangles to a B-rep body and tells you honestly what it +got — whether the result is a closed solid or an open shell, with the boundary and +non-manifold edge counts. A large mesh becomes a large number of faces, which is slow to +edit; the importer warns before you commit to it. + +**Export STEP** writes the model out for another CAD tool. + +**Commit to Plate** sends the solid to Prepare for slicing. The whole feature recipe is saved +inside the 3MF, so reopening the project restores the editable model rather than a frozen +mesh. + +--- + +## View controls + +**Section view** (`X`) hides half the model so you can see inside — `PageUp`/`PageDown` move +the plane, `F` flips which half is kept. **Place on Face** (`F`, when section is off) lays a +picked face flat on the bed. Origin planes (`P`) and world axes (`A`) can be toggled on while +you orient yourself. + +--- + +## Known limitations + +Being straight about the edges, so nobody discovers them the hard way: + +- **Rib** needs a sketch containing an explicit open line. A parametric rectangle sketch + carries no individual entities, so Rib cannot use one. +- **Surface Loft** and **Surface Fill** have kernel tests but have not been exercised by hand. +- Card wiring for 9 of the 16 late-wired tools has never been click-tested. +- Mate resolves by composing transforms directly. There is no 3D assembly solver, so mates + are applied in order rather than solved simultaneously, and mate limits are not implemented. +- Move-face and replace-face are not implemented — OCCT offers no clean primitive for them. +- There is no automated GUI test in CI. Every behaviour above is traced to code and to a + hand pass, not to a synthetic click. + +--- + +## Where the code lives + +| Path | Role | +|---|---| +| `src/libslic3r/CAD/CadDocument.*` | the feature recipe and its replay | +| `src/libslic3r/CAD/GeometryEngine.*` | OCCT wrapper — faces, edges, booleans, healing | +| `src/libslic3r/CAD/SketchEngine.*` | profile → wire → solid | +| `src/libslic3r/CAD/SketchSolver.*` | constraint solving, over the vendored solver | +| `src/libslic3r/slvs/` | vendored 2D constraint solver (GPLv3) | +| `src/slic3r/GUI/CAD/DesignPanel.*` | the tab: toolbar, cards, feature tree | +| `src/slic3r/GUI/CAD/DesignCanvas.*` | viewport integration | +| `src/slic3r/GUI/CAD/DesignSketchTool.*` | in-canvas sketching | + +Build with `-DSLIC3R_CAD=ON` (the default). With it OFF the tab is not compiled and the deps +prefix matches upstream exactly — see [cad_dependency_weight.md](cad_dependency_weight.md). diff --git a/docs/CAD/design_tab_pr_description.md b/docs/CAD/design_tab_pr_description.md new file mode 100644 index 0000000000..a6d67f0e7c --- /dev/null +++ b/docs/CAD/design_tab_pr_description.md @@ -0,0 +1,73 @@ +# Design (CAD) tab — upstream pull request + +## What this adds + +A sketch-first parametric CAD tab inside the slicer. The workflow is direct: +sketch → constrain → solid features → commit to plate. The whole feature recipe is +persisted inside the 3MF, so reopening restores an editable model rather than a frozen mesh. + +- Kernel: OCCT, which upstream already links for STEP import — see + [cad_dependency_weight.md](docs/cad_dependency_weight.md) +- Constraint solver: vendored SolveSpace `libslvs` subset +- Interaction model: object-driven — point at geometry, the geometry offers the verbs that + apply to it; see [cad_ux_guidelines.md](docs/cad_ux_guidelines.md) +- Full user-facing documentation: [design_tab.md](docs/design_tab.md) + +## Why it belongs in the slicer + +Every round trip through an external CAD tool costs a file export, a re-import, and the +design intent that both steps discard. A part modified after slicing should return to its +feature history, not to a mesh. Keeping the CAD model inside the slicer preserves that +loop — the nozzle diameter, the build volume and the material are known at design time. + +For the integration case in full: [design_tab_upstream_portability.md](docs/design_tab_upstream_portability.md). + +## How it is built + +The `SLIC3R_CAD` CMake flag (default ON) gates the entire tab. With it OFF the tab is not +compiled and the deps prefix matches upstream exactly — the dependency diff is one line in +OCCT's CMake: `BUILD_MODULE_ModelingAlgorithms=OFF → ON`. + +Measured cost table: [cad_dependency_weight.md](docs/cad_dependency_weight.md). + +## Diff shape + + + +Against merge-base `d6cb667b894f`: + + 306 files changed, 83032 insertions(+), 777 deletions(-) + +350 commits, of which 284 are new files and 37 modify upstream files. 99.3 % of the diff +is new code. The negotiable surface is the 37 modified files. + +## Tests + +205 `TEST_CASE` blocks across 6 new test source files. This counts assertions written, not +assertions passed — a run needs a build. + +`scripts/CAD/run-kernel-tests.sh` is the headless verification contract: it builds only +`libslic3r_tests` (not the GUI app), needs no display, and exit 0 means the CAD suite +passed. It now runs with **no exclusions** — both cases that used to be quarantined (the +circle-line tangency solver abort and the internal-thread reference) are fixed. + +## Licensing + +The vendored solver in `src/libslic3r/slvs/` is **GPL-3.0** (see `src/libslic3r/slvs/LICENSE`), +not LGPL. The combined work is distributable under AGPL-3.0. See the Licensing section of +[design_tab_upstream_portability.md](docs/design_tab_upstream_portability.md) for the +AGPLv3/GPLv3 compatibility argument; this point should be confirmed with upstream explicitly. + +## Not verified + +- Card wiring for 9 of the 16 late-wired tools was never click-tested. +- There is no automated GUI test in CI. A green kernel run says nothing about the GUI — + synthetic clicks never drift, so the test suite and the viewport are two separate realities. +- The click-test defect rate has **not converged**: a second pass found no new defects, but + four further days of work found five more. The earlier pass is not evidence of stability. + +## Reviewer's map + +See the [Where the code lives](docs/design_tab.md#where-the-code-lives) table in the user +doc for the file-to-role mapping, and [docs/ux/tool_atlas.json](docs/ux/tool_atlas.json) as +the generated-from source of `src/slic3r/GUI/CAD/DesignOffer.hpp`. diff --git a/docs/CAD/design_tab_upstream_portability.md b/docs/CAD/design_tab_upstream_portability.md new file mode 100644 index 0000000000..a7e9cd84ed --- /dev/null +++ b/docs/CAD/design_tab_upstream_portability.md @@ -0,0 +1,162 @@ +# Design (CAD) tab — upstream integration brief + +**Question:** can the Design tab (sketch-first parametric CAD: sketch → constrain → +extrude/revolve/fillet/hole/thread/shell, multi-body, undo, 3MF persistence) land in +mainline OrcaSlicer? + +**Answer: yes, and the ask is far smaller than previously believed.** OCCT is *already* +an OrcaSlicer dependency. We are not asking upstream to adopt a new library; we are +asking it to widen one it already builds, at a measured cost of **3.77 MiB on Windows**. + +> ### Corrections to the 2026-06-21 assessment +> That revision was written before the persistence work landed and got two load-bearing +> facts wrong. Both are corrected here from direct measurement of the branch: +> +> 1. **"The real blocker: OCCT … a dependency mainline OrcaSlicer has never carried."** +> **False.** `deps/OCCT/` exists at the merge-base and upstream links it from +> `Format/STEP.cpp`, `Format/svg.cpp`, and `Shape/TextShape.cpp`. Our entire +> dependency diff is **one line**: `BUILD_MODULE_ModelingAlgorithms=OFF → ON`. +> 2. **"vendored SolveSpace solver … LGPL."** **False.** `src/libslic3r/slvs/LICENSE` is +> **GPL-3.0**, not LGPL. This is fine (see Licensing) but must not be misstated. +> +> It also claimed "no changes to Model" — no longer true; 3MF recipe persistence adds one +> `std::string` to `Model`. + +## Measured shape of the change + +Against merge-base `449a4cf9fc` (34 commits ahead): + +| | files | lines | +|---|---:|---:| +| **New files** | 138 | +61,720 | +| **Modified upstream files** | 23 | +457 / −75 | +| **Deleted upstream files** | 0 | — | + +The 62 kLOC headline is inflated by localization. The feature itself: + +| area | LOC | files | +|---|---:|---:| +| kernel (`src/libslic3r/`) | 15,828 | 37 | +| GUI (`src/slic3r/`) | 19,544 | 14 | +| tests (Catch2) | 2,567 | 6 | +| i18n (unrelated; strip from the CAD PR) | 23,438 | 77 | + +**99.3 % of the diff is new files.** The negotiable surface is 457 added lines across 23 +files, and nothing upstream is deleted. The largest single hook is `GLCanvas3D.cpp` +(+110/−2): an `m_design_sketch_tool` member plus render/mouse/key hooks, **every one +already null-guarded** — which is why the compile-time gate below is cheap. + +No changes to the slicing pipeline (Print/PrintObject/Layer/GCode), Tab, or the +printer-profile/config system. + +## The dependency ask, precisely + +Not "adopt OCCT" — **widen the existing OCCT build**: + +```diff +- -DBUILD_MODULE_ModelingAlgorithms=OFF ++ -DBUILD_MODULE_ModelingAlgorithms=ON +``` + +Cost, measured from the shipped Windows artifact (42 OCCT DLLs, 45.43 MiB total): + +| toolkit | size | note | +|---|---:|---| +| `TKFillet.dll` | 2.02 MiB | only exists with the flag ON | +| `TKOffset.dll` | 1.75 MiB | only exists with the flag ON | +| **delta** | **3.77 MiB** | Windows only (OCCT is Shared on Win, Static elsewhere) | + +`TKBool` is *not* part of the delta — upstream's `DataExchange` already pulls it in +transitively. On macOS/Linux OCCT links statically, so the cost is only the code actually +referenced, not a 3.77 MiB floor. + +**Unmeasured, and we should measure before the call:** clean-deps build-time delta with +the flag ON vs OFF, and the resulting CI runner-minute cost. Do not guess these at him. + +## Licensing + +- Vendored solver `src/libslic3r/slvs/` — **GPL-3.0**, 9,339 LOC, © Jonathan Westhues, + a self-contained subset of SolveSpace (`libslvs`). No external dependencies. +- OrcaSlicer — **AGPL-3.0** (`LICENSE.txt`). + +GPLv3 §13 expressly permits combining a GPLv3 work with an AGPLv3 work; AGPLv3 §13 grants +the converse. The combined work is distributable under AGPL-3.0 with the solver's GPLv3 +terms preserved. This is a favourable direction (GPLv3 → into an AGPLv3 project), but it +is a point to **confirm explicitly with upstream**, not to assert unilaterally. + +Open question for SoftFever: keep the solver **vendored** (current: pinned, no submodule, +no external build) or move it to `deps/` as a fetched external? Vendoring costs us +upstream-sync burden; `deps/` costs build complexity. + +## The one irreversible decision: the 3MF format + +Persistence adds an **optional** archive entry and one field: + +```cpp +// Model.hpp +std::string cad_recipe; // empty for non-CAD projects +``` + +``` +Metadata/orca_cad.bin // written only when cad_recipe is non-empty +``` + +Readers that do not know the entry ignore it; writers skip it entirely when empty. So +existing projects are bit-identical and old readers are unaffected. Good. + +**But the moment upstream ships this, it owns forward-compatibility forever.** Three +things should be settled *before* the first release, because none can be changed after: + +1. **Name.** Renamed to `Metadata/orca_cad.bin`. +2. **Encoding.** The recipe is an opaque **cereal `PortableBinaryArchive`** blob whose + layout is the field order of `CadFeature::serialize`. Portable across endianness and + word size — *not* across a field reorder. Append-only is currently a convention held by + discipline, not by any check. +3. **Embedded BRep.** `Import` features embed OCCT's ASCII BRep for the imported solid, + which couples saved project files to an OCCT BRep revision. Alternative: re-import from + the source STEP and store only a reference. Worth deciding deliberately. + +**Concrete gap we should close before the call.** `test_caddocument.cpp` covers the +in-memory round-trip and correctly refuses a version-999 blob — but there is **no +checked-in v1 fixture on disk**. A reordered field in `CadFeature::serialize` would pass +the entire suite while silently breaking every previously-saved project. Ship a golden +`.bin` fixture generated today plus a test that loads it; that is the only thing that will +hold the format still once real users have files. + +## Proposed PR decomposition + +35 kLOC in one PR is not reviewable. Behind the flag, slices 1–4 are behaviour-neutral for +existing users: + +1. **Build gate + OCCT flag + Windows packaging guard.** `-DSLIC3R_CAD=ON/OFF`, default + **OFF**. Flips `ModelingAlgorithms=ON`. Includes the guard that asserts every linked + OCCT toolkit has a shipped DLL (already on both forks: `546cef5f42`). ← *this is what + makes SoftFever's "parallel build" a one-line CI matrix entry.* +2. **Vendored `slvs` solver** + its Catch2 tests. No GUI, no OCCT. +3. **CAD kernel** (`CadDocument`, `SketchEngine`, `GeometryEngine`, `Sketch*`) + kernel + tests. Headless, no GUI. +4. **3MF recipe persistence** + golden-fixture regression test. +5. **GUI Design tab** (`DesignPanel`, `DesignCanvas`, `DesignSketchTool`, `GLGizmoSketch`) + + the 23 upstream hooks. + +## Agenda for the call + +Questions only SoftFever can answer: + +- Does OrcaSlicer *want* to be a CAD-integrated slicer? (Strategic; everything else is mechanical.) +- Default of `SLIC3R_CAD` at merge time, and when it flips ON. +- Vendored solver vs `deps/` external; and confirmation of the GPLv3/AGPLv3 combination. +- Project-file format: neutral name, encoding, embedded-BRep policy, and who owns v1 forward-compat. +- Undo/redo: the Design tab has its own stack; integrate with Orca's snapshot system or keep separate? +- Does he want the i18n work (Romanian, +23 kLOC) as a wholly separate PR? (Yes, almost certainly.) + +## Verdict + +Portability **high**. The prior "does upstream want OCCT" framing was wrong — OCCT is +already there. What remains is a 3.77 MiB dependency widening, a compile-time gate that +the existing null-guards make cheap, and one file-format decision that must be made before +the first release rather than after. + +--- +*Revised 2026-07-10 from direct measurement of `cad-mainline` @ `546cef5f42` vs upstream +merge-base `449a4cf9fc`. Supersedes the 2026-06-21 read-only assessment.* diff --git a/docs/CAD/rig_build_traps.md b/docs/CAD/rig_build_traps.md new file mode 100644 index 0000000000..b620b244d9 --- /dev/null +++ b/docs/CAD/rig_build_traps.md @@ -0,0 +1,151 @@ +# Rig build traps + +The build rig is two long-lived containers, `snapmaker-gui` and `orcacad-gui`, one per fork. Each +mounts only its fork's build volume (`snapmaker_buildcache` / `orcacad_buildcache`) at +`/OrcaSlicer/build`, its fork's `resources/`, and a shots directory — nothing else. They run the +binary; they do not build it. Rebuild with `scripts/CAD/build-gui.sh`. + +| fork repo | project() | deps image | build volume | GUI container | binary | +|---|---|---|---|---|---| +| `Snapmaker` | `Snapmaker_Orca` | `snapmaker-deps` | `snapmaker_buildcache` | `snapmaker-gui` | `snapmaker-orca` | +| `orca_cad` | `OrcaSlicer` | `orcacad-deps` | `orcacad_buildcache` | `orcacad-gui` | `orca-slicer` | + +`scripts/CAD/build-gui.sh` exists alongside `scripts/CAD/build-gui-incremental.sh` for one reason: it does a +target-only `ninja` into the volume the GUI rig launches from, so a session can test a single +change without a full repackage, whereas `build-gui-incremental.sh` runs the full packaged build. +Both start a throwaway container from the deps image with the live repo mounted over the baked +tree — never build inside the GUI container (Trap 1). + +Every trap below has already cost about a session to re-derive, once each. They are recorded now +so no fresh session pays them again. Symptoms, causes, and exact recovery commands follow. + +--- + +## Trap 1 — never configure inside the GUI container + +**Symptom.** After building inside the GUI container, the fork's targets no longer exist; ninja +reports an unknown target, and `orca-slicer` / `OrcaSlicer` have been replaced by +`snapmaker-orca` / `Snapmaker_Orca`. + +**Cause.** The GUI image's baked `/OrcaSlicer` tree is the Jun-13 Snapmaker-derived source +(`project(Snapmaker_Orca)`, executable `snapmaker-orca`). `orcacad-deps` is layered on +`snapmaker-deps`, so even on the mainline fork the baked tree is the other fork's. A `cmake .` +there reconfigures the shared build dir under the wrong project name. + +**Fix.** Build only via `scripts/CAD/build-gui.sh`, which starts a throwaway container from the deps +image with the live repo mounted over the baked tree — `src`, `resources`, `cmake`, `deps_src`, +`localization`, `CMakeLists.txt`, `version.inc` — and writes into the same volume the rig +launches from. + +--- + +## Trap 2 — stale `NLopt_DIR` in CMakeCache + +**Symptom.** Configure fails with `Cannot find NLopt library 'nlopt_cxx' in '/lib'`. + +**Cause.** `cmake/modules/FindNLopt.cmake:26` is `set(NLopt_DIR $ENV{NLOPT})`. With `NLOPT` +unset that expands to `set(NLopt_DIR)` — zero arguments — which *unsets the normal variable* and +lets a leftover CACHE entry of the same name (e.g. `/lib/cmake/nlopt`) show through the +following `if(NOT NLopt_DIR)`. The `else()` branch then searches for `nlopt_cxx` under +`${NLopt_DIR}/lib` with `NO_DEFAULT_PATH`, while the deps prefix ships plain `nlopt`. + +**Fix.** From inside the build dir: + + cmake -U NLopt_DIR -U NLopt_LIBS . + +Do **not** `sed` the entry out of `CMakeCache.txt` — deleting a line breaks the cache parser. + +--- + +## Trap 3 — the image lacks `deps_src/pybind11` + +**Symptom.** Configure aborts with `pybind11 headers not found in /OrcaSlicer/deps_src/pybind11. +Did you initialize submodules?` (the `FATAL_ERROR` guarding `PYBIND11_SOURCE_DIR` in the mainline +fork's root `CMakeLists.txt`, near line 948). + +**Cause.** The deps image predates that requirement. Only the mainline (`orca_cad`) fork has +`deps_src/pybind11` and the requirement; Snapmaker has neither. + +**Fix.** Mount `deps_src` over the baked tree — `scripts/CAD/build-gui.sh` does. Corollary: mounting a +Snapmaker tree into an `orcacad-deps` build reproduces this error exactly. + +--- + +## Trap 4 — `OCCT_LIBS` lags one configure + +**Symptom.** A wall of undefined references to `TopOpeBRepBuild` symbols. It reads as a broken +OCCT installation. It is not. + +**Cause.** `src/libslic3r/CMakeLists.txt:603` does +`set(OCCT_LIBS "${OCCT_LIBS}" CACHE INTERNAL "OCCT toolkits linked by libslic3r")` at the END of +its own configure, while the consumer in the root `CMakeLists.txt` (`if (NOT OCCT_LIBS)` … +`foreach (_tk IN LISTS OCCT_LIBS)`) reads whatever is already in the cache. The first reconfigure +after the `TKFillet TKOffset` prepend (`src/libslic3r/CMakeLists.txt:599`) therefore links the +previous list and drops `TKBool`/`TKOffset`. + +**Fix.** Configure twice. `scripts/CAD/build-gui.sh` runs `cmake .` twice for exactly this reason; if +you ever configure by hand, run it twice. + +--- + +## Trap 5 — `SLIC3R_CAD=ON` in the cache, macro never defined + +**Symptom.** The build succeeds and links, but the Design tab is simply absent — or it fails with +`class GLCanvas3D has no member named set_design_sketch_tool`. + +**Cause.** The cache carries `SLIC3R_CAD=ON`, but the root `CMakeLists.txt` actually configured is +a stale baked copy that predates the gate and never runs `add_definitions(-DSLIC3R_CAD)` (the +gate is `if (SLIC3R_CAD)` / `add_definitions(-DSLIC3R_CAD)` in the root list — line 179/180 in +Snapmaker, 319/320 in orca_cad). Every `#ifdef SLIC3R_CAD` block therefore compiles out while the +option still reads ON. + +**Fix.** Always mount the live `CMakeLists.txt` and `cmake/` — never inherit them from the image. +This is why `scripts/CAD/build-gui-incremental.sh`, `scripts/CAD/run-kernel-tests.sh` and `scripts/CAD/build-gui.sh` +all mount both. + +--- + +## The binary the rig actually launches + +`ninja ` writes `/OrcaSlicer/build/src/Release/`; only `build_linux.sh` +additionally packages to `/OrcaSlicer/build/package/bin/`. `orca_cad`'s +`scripts/CAD/start-headless-gui.sh` defaults `BIN` to `src/Release/orca-slicer`, but Snapmaker's defaults to +`package/bin/snapmaker-orca`. So after a target-only rebuild on Snapmaker, launching +`start-headless-gui.sh` with its default runs the **stale packaged** binary — the change under test is +invisible and the session hunts a phantom. Pass `BIN` explicitly: + + docker exec -e BIN=/OrcaSlicer/build/src/Release/snapmaker-orca snapmaker-gui /OrcaSlicer/scripts/CAD/start-headless-gui.sh + +`scripts/CAD/build-gui.sh` prints the correct line for the current fork when it finishes. + +Note also that the GUI containers do **not** mount `scripts/`: `/OrcaSlicer/scripts` inside them +is the baked copy, so a local edit to `start-headless-gui.sh` has no effect until you +`docker cp scripts/CAD/start-headless-gui.sh :/OrcaSlicer/scripts/`. + +--- + +## Trap 6 — `src/Release/` resolves resources to `build/resources`, which may not exist + +The binary derives `resources_dir()` from its own location, so the `src/Release/` one looks in +`/OrcaSlicer/build/resources` while the packaged one looks inside `build/package/`. Only the +packaging step creates the latter; nothing creates the former. Without it the app fails every +`Failed to add custom font ".../build/resources/fonts/…"`, logs `Health check is not running`, +and **exits 255 with nothing on stdout** — which reads exactly like a crash in whatever you just +changed. Measured 2026-08-02: an hour was nearly spent bisecting a GUI change that was fine. + +`build/` is the shared cache volume, so one symlink fixes it permanently, and pointing it at the +bind-mounted repo tree means the rig also picks up new `resources/images/*.svg` without a rebuild: + + docker exec -gui ln -sfn /OrcaSlicer/resources /OrcaSlicer/build/resources + +Tell the two apart before debugging: a resource failure dies in the first second with no window; +a real fault in your code gets past the version banner. Compare +`~/.config//log/.log.0` against a known-good run — 47 lines versus 340 is the tell. + +## Trap 7 — a single-instance app plus a path-matched `pkill` + +`start-headless-gui.sh` used to kill by `"$BIN"`, while its own `app_pid()` matched by BASENAME. Launch +with a `BIN` that differs from the running instance's path and the old process survives, keeps +the single-instance lock, and the new one exits seconds after loading fonts — then `status` +reports the *stale* pid as a healthy session. Fixed by killing on the basename; `status` now also +prints `binary : $(readlink -f /proc//exe)`. **Read that line before trusting a screenshot.** diff --git a/docs/CAD/ux/interaction-model.md b/docs/CAD/ux/interaction-model.md new file mode 100644 index 0000000000..2041978ea0 --- /dev/null +++ b/docs/CAD/ux/interaction-model.md @@ -0,0 +1,144 @@ +# Design tab — interaction model + +The contract for Esc, the right mouse button, and the states between them. Code that changes any +of the three changes this file in the same commit. + +## 1. The state machine + +`src/slic3r/GUI/CAD/DesignInteraction.hpp` — a four-level LIFO stack. The enum value *is* the +depth, so "which level does this press belong to" is a comparison rather than a chain of +special cases spread over three files. + +```cpp +enum class CadLevel : int { + Idle = 0, // nothing transient is up: Esc clears the selection + Tool = 1, // a feature card / armed sketch tool / constrain session: Esc exits it + Gesture = 2, // an uncommitted delta (entity being drawn, body being dragged): Esc reverts it + Transient = 3, // a value field or a popup menu: Esc closes just that +}; + +struct CadInteractionState { // the four bits routing actually needs + bool value_field_open{false}; + bool gesture_active{false}; + bool tool_armed{false}; + bool has_selection{false}; +}; + +constexpr CadLevel cad_escape_level(const CadInteractionState& s) +{ + if (s.value_field_open) return CadLevel::Transient; + if (s.gesture_active) return CadLevel::Gesture; + if (s.tool_armed) return CadLevel::Tool; + return CadLevel::Idle; +} +``` + +The rule is a `constexpr` free function over a POD, not a method on the panel, so the ordering +that is the entire contract is checkable without a window, a GL context or an event loop. Five +`static_assert`s in the header do exactly that, at compile time. + +**Strict invariant.** No level of Esc deletes a feature, discards a sketch that holds geometry, +or rolls history back. Destroying work needs a gesture that says so: + +| To destroy | Gesture | +|---|---| +| a feature | Delete / Backspace on an explicit selection | +| a drawn sketch | the ribbon's ✗ Cancel, which asks first | +| the last committed change | Ctrl+Z | + +## 2. Event routing + +**`OnKeyDown(WXK_ESCAPE)`** — `DesignPanel`'s `wxEVT_CHAR_HOOK`, one line: + +```cpp +if (key == WXK_ESCAPE) { escape(); return; } +``` + +Every Esc in the tab goes through it, whatever holds focus. `DesignPanel::escape_level()` answers +the four questions of `CadInteractionState` about this panel; `DesignPanel::escape()` acts on the +one level that answer names, and on no other: + +| Level | What one press does | What it must not touch | +|---|---|---| +| `Transient` | close the value field (`cancel_value` / `inline_cancel`) | the tool, which stays armed | +| `Gesture` | drop the clicks of the entity being drawn, or put a moved body back at the pose it had when the gizmo appeared | everything already committed | +| `Tool` | discard a feature card's *candidate*; drop an armed sketch tool to Select; end Constrain | committed features; entities already drawn | +| `Idle` | clear the selection (model and sketch); leave a sketch session **only if it is empty** | a sketch holding geometry — it is left through Finish or Cancel | + +A sketch *session* is deliberately not a `Tool`. It is the environment the Idle level lives in, +which is what makes the destructive path unrepresentable rather than merely unlikely. + +**`OnRightDown` / `OnRightUp`** — `DesignCanvas::set_on_context_menu`, bound after `GLCanvas3D`'s +own handlers so it can consume the event before them: + +```cpp +RIGHT_DOWN: remember the press position and the clock, then Skip() // the canvas still seeds the orbit + +RIGHT_UP: terminated = sketch_tool.take_right_consumed(); // read-and-clear, always + is_click = drift <= 3 px && dt <= 200 ms; // both budgets, or it was navigation + if (callback && !terminated && !inline_busy && is_click) { + select_at_screen(press.x, press.y); // raycast at the PRESS, not the release + on_context_menu(ClientToScreen(press)); + return; // consumed + } + Skip(); // orbit / pan / the handlers underneath +``` + +Two independent budgets because the two failure modes are independent: drift alone still popped a +menu at the end of a slow, careful orbit. `take_right_consumed()` is how a right-click that +already meant something to the armed sketch tool (terminate a chain, drop an edit-op) declines to +also mean "open a menu". + +## 3. Transition table + +`sel` = something is picked. Blank = the input does nothing at that state. + +| State | Left-click | Right-click | Esc | Enter | +|---|---|---|---|---| +| **Idle — model view** | pick / escalate the pick | offer menu for what is under the cursor | clear the selection | — | +| **Idle — sketch, empty** | pick | sketch offer menu | leave the session (nothing to lose) | Finish sketch | +| **Idle — sketch, drawn** | pick | sketch offer menu | clear the selection; status says the sketch is kept | Finish sketch | +| **Tool — feature card** | pick the card's next reference | offer menu | discard the candidate, close the card | commit the feature | +| **Tool — sketch tool armed** | place the first point | drop the tool to Select | drop the tool to Select | — | +| **Tool — constrain** | pick an entity | offer menu | end the session | apply | +| **Gesture — drawing** | place the next point | terminate the chain (keep what is drawn) | drop the in-progress entity, tool stays armed | commit the entity as drawn | +| **Gesture — moving a body** | drop the body here | end the move | revert to the pose at move-start | keep the placement | +| **Transient — value field** | — | — | close the field, tool stays armed | commit the value, advance the chain | +| **Transient — popup menu** | run the entry | — | close the menu | run the highlighted entry | +| **any** | — | — | *never* deletes, discards or rolls back | — | + +Right-hold-and-drag is not in the table on purpose: past 3 px or 200 ms it is navigation, and +navigation does not transition the state machine. + +## 4. Visual scaffolding + +Entering a sketch changes three things at once, so the state is legible from across the room: + +- **Banner.** A teal strip across the top of the viewport: `Editing: Sketch N · N = look normal to + the plane · Finish or Cancel in the toolbar`. Indicator only — Confirm and Cancel stay on the one + ribbon action bar, per the Design UX contract. It is a sibling above the canvas, not a floating + child over it: a child window over a `wxGLCanvas` is a native window on GTK and does not reliably + stack over GL, and this banner's job is to be unmissable rather than clever. +- **The printer bed is muted.** A plate grid and a sketch grid are the same visual language, and + reading one as the other is how a sketch gets drawn against the wrong reference. The view + checkbox remains the stored preference and is restored on the way out; ticking it mid-sketch + still shows the bed, because that is a deliberate act and this is only a default. +- **`N` looks normal to the plane**, keeping the current zoom, with the plane's own y axis as up. + Sketch key map only — in Feature mode the navigator orb owns orientation. + +## 5. Context menu content + +The offer is generated from `docs/CAD/ux/tool_atlas.json`; its 8-row shape and permanent row +indices are ratified and are not changed here. Checked against the per-context vocabularies asked +for in the 2026-09-05 interaction brief, the atlas already carries all of them except two, both on +a planar face: + +| Asked for | Status | +|---|---| +| Revolve on a planar face | **not offered, and should not be**: `revolve` accepts `sk_loop` only, because the kernel takes a sketch profile — a face is not one | +| Offset Face | offered as **Thicken** (`thicken`, accepts `face_planar`); `surf_offset` is the sheet-body verb and accepts `body_sheet` | + +View and document actions — Zoom to Fit, View Isometric, Clear Selection, Finish Sketch, Normal to +Sketch — stay in chrome by the atlas's own rule: the offer describes verbs that consume a +*selection*, and these act on the document or the camera. Esc covers Clear Selection, `N` covers +Normal to Sketch, and the ribbon covers Finish. diff --git a/docs/CAD/ux/mockups/cmp_12__edge_str.svg b/docs/CAD/ux/mockups/cmp_12__edge_str.svg new file mode 100644 index 0000000000..3e641e90ec --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_12__edge_str.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 12 slotsDress-up2Pattern on CurveReference3Straight edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/cmp_12__face_planar.svg b/docs/CAD/ux/mockups/cmp_12__face_planar.svg new file mode 100644 index 0000000000..85809d5bf6 --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_12__face_planar.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 12 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/cmp_12__sk_line.svg b/docs/CAD/ux/mockups/cmp_12__sk_line.svg new file mode 100644 index 0000000000..6535c9fe77 --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_12__sk_line.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 12 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line \ No newline at end of file diff --git a/docs/CAD/ux/mockups/cmp_8__edge_str.svg b/docs/CAD/ux/mockups/cmp_8__edge_str.svg new file mode 100644 index 0000000000..2c41ce74fc --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_8__edge_str.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 8 slotsDress-up2Pattern on CurveReference3Straight edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/cmp_8__face_planar.svg b/docs/CAD/ux/mockups/cmp_8__face_planar.svg new file mode 100644 index 0000000000..5a58e2fb72 --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_8__face_planar.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/cmp_8__sk_line.svg b/docs/CAD/ux/mockups/cmp_8__sk_line.svg new file mode 100644 index 0000000000..4ca4000d59 --- /dev/null +++ b/docs/CAD/ux/mockups/cmp_8__sk_line.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__art.svg b/docs/CAD/ux/mockups/fresh__art.svg new file mode 100644 index 0000000000..a54dd49b43 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__art.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetText / imported art selected — pick what to do with itFresh document · 8 slotsABCModify2Text / imported art \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__art__modify.svg b/docs/CAD/ux/mockups/fresh__art__modify.svg new file mode 100644 index 0000000000..184611c682 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__art__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsABCDeleteDelEditText / imported art · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__bodies_2.svg b/docs/CAD/ux/mockups/fresh__bodies_2.svg new file mode 100644 index 0000000000..f282bef03a --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__bodies_2.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetTwo bodies selected — pick what to do with itFresh document · 8 slotsMeasureDeleteDelTwo bodies \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__body_sheet.svg b/docs/CAD/ux/mockups/fresh__body_sheet.svg new file mode 100644 index 0000000000..635b2f6aa6 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__body_sheet.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSheet body selected — pick what to do with itFresh document · 8 slotsMeasureModify2Sheet body \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__body_sheet__modify.svg b/docs/CAD/ux/mockups/fresh__body_sheet__modify.svg new file mode 100644 index 0000000000..0cd330046d --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__body_sheet__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditSheet body · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__body_solid.svg b/docs/CAD/ux/mockups/fresh__body_solid.svg new file mode 100644 index 0000000000..ef21e2b8e2 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__body_solid.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSolid body selected — pick what to do with itFresh document · 8 slotsMeasureModify2Solid body \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__body_solid__modify.svg b/docs/CAD/ux/mockups/fresh__body_solid__modify.svg new file mode 100644 index 0000000000..8b5d1485a0 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__body_solid__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditSolid body · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__coordsys.svg b/docs/CAD/ux/mockups/fresh__coordsys.svg new file mode 100644 index 0000000000..e20d08d000 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__coordsys.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCoordinate system selected — pick what to do with itFresh document · 8 slotsModify2Coordinate system \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__coordsys__modify.svg b/docs/CAD/ux/mockups/fresh__coordsys__modify.svg new file mode 100644 index 0000000000..b6b4871d16 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__coordsys__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditCoordinate system · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__datum_axis.svg b/docs/CAD/ux/mockups/fresh__datum_axis.svg new file mode 100644 index 0000000000..8174807ceb --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__datum_axis.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetDatum axis selected — pick what to do with itFresh document · 8 slotsModify2Datum axis \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__datum_axis__modify.svg b/docs/CAD/ux/mockups/fresh__datum_axis__modify.svg new file mode 100644 index 0000000000..cba7005358 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__datum_axis__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditDatum axis · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__datum_plane.svg b/docs/CAD/ux/mockups/fresh__datum_plane.svg new file mode 100644 index 0000000000..ffabd59969 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__datum_plane.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetDatum plane selected — pick what to do with itFresh document · 8 slotsSketchShift+SReference2Modify2Datum plane \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__datum_plane__modify.svg b/docs/CAD/ux/mockups/fresh__datum_plane__modify.svg new file mode 100644 index 0000000000..9ac26e4ce1 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__datum_plane__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditDatum plane · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__datum_plane__reference.svg b/docs/CAD/ux/mockups/fresh__datum_plane__reference.svg new file mode 100644 index 0000000000..b42479441a --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__datum_plane__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsPlaneShift+PHelixDatum plane · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__edge_circ.svg b/docs/CAD/ux/mockups/fresh__edge_circ.svg new file mode 100644 index 0000000000..3e72544c04 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__edge_circ.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCircular edge selected — pick what to do with itFresh document · 8 slotsMeasureCircular edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__edge_str.svg b/docs/CAD/ux/mockups/fresh__edge_str.svg new file mode 100644 index 0000000000..c4e54d5335 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__edge_str.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetStraight edge selected — pick what to do with itFresh document · 8 slotsReference3Straight edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__edge_str__reference.svg b/docs/CAD/ux/mockups/fresh__edge_str__reference.svg new file mode 100644 index 0000000000..80dd7a877a --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__edge_str__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsMeasurePlaneShift+PAxisShift+AStraight edge · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__face_cyl.svg b/docs/CAD/ux/mockups/fresh__face_cyl.svg new file mode 100644 index 0000000000..d2335e4177 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__face_cyl.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCylindrical face selected — pick what to do with itFresh document · 8 slotsReference3EditCylindrical face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__face_cyl__reference.svg b/docs/CAD/ux/mockups/fresh__face_cyl__reference.svg new file mode 100644 index 0000000000..7cb83afb56 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__face_cyl__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsMeasureAxisShift+AHelixCylindrical face · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__face_other.svg b/docs/CAD/ux/mockups/fresh__face_other.svg new file mode 100644 index 0000000000..d8dcfb96ab --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__face_other.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCurved face selected — pick what to do with itFresh document · 8 slotsMeasureEditCurved face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__face_planar.svg b/docs/CAD/ux/mockups/fresh__face_planar.svg new file mode 100644 index 0000000000..a66268fc9a --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__face_planar.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetPlanar face selected — pick what to do with itFresh document · 8 slotsSketchShift+SExtrudeShift+EReference4EditPlanar face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__face_planar__reference.svg b/docs/CAD/ux/mockups/fresh__face_planar__reference.svg new file mode 100644 index 0000000000..9aa608a5e7 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__face_planar__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsCoord SysShift+CMeasurePlaneShift+PAxisShift+APlanar face · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__none.svg b/docs/CAD/ux/mockups/fresh__none.svg new file mode 100644 index 0000000000..56ac028b74 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__none.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetClick a face or a reference plane, then a toolFresh document · 8 slotsSketchShift+SReference4Nothing selected \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__none__reference.svg b/docs/CAD/ux/mockups/fresh__none__reference.svg new file mode 100644 index 0000000000..0492aa6de0 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__none__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsCoord SysShift+CHelixPlaneShift+PAxisShift+ANothing selected · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_2ent.svg b/docs/CAD/ux/mockups/fresh__sk_2ent.svg new file mode 100644 index 0000000000..dd02122149 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_2ent.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetTwo sketch entities selected — pick what to do with itFresh document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Two sketch entities \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_2ent__create.svg b/docs/CAD/ux/mockups/fresh__sk_2ent__create.svg new file mode 100644 index 0000000000..98e984bff2 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_2ent__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCreate — pick oneFresh document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Two sketch entities · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_2ent__dressup.svg b/docs/CAD/ux/mockups/fresh__sk_2ent__dressup.svg new file mode 100644 index 0000000000..926594bb86 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_2ent__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetDress-up — pick oneFresh document · 8 slotsFilletFChamferHTwo sketch entities · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_2ent__modify.svg b/docs/CAD/ux/mockups/fresh__sk_2ent__modify.svg new file mode 100644 index 0000000000..242332967e --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_2ent__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelExtendXTwo sketch entities · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_2ent__reference.svg b/docs/CAD/ux/mockups/fresh__sk_2ent__reference.svg new file mode 100644 index 0000000000..aa105c3a9e --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_2ent__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsConstructionQDimensionDConstrainKTwo sketch entities · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_arc.svg b/docs/CAD/ux/mockups/fresh__sk_arc.svg new file mode 100644 index 0000000000..0712508411 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_arc.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSketch arc or circle selected — pick what to do with itFresh document · 8 slotsCreate9OffsetOTrimTMirrorMMoveReference3Modify2Sketch arc or circle \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_arc__create.svg b/docs/CAD/ux/mockups/fresh__sk_arc__create.svg new file mode 100644 index 0000000000..d22d916e60 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_arc__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCreate — pick oneFresh document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch arc or circle · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_arc__modify.svg b/docs/CAD/ux/mockups/fresh__sk_arc__modify.svg new file mode 100644 index 0000000000..cf3fc2450f --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_arc__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelExtendXSketch arc or circle · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_arc__reference.svg b/docs/CAD/ux/mockups/fresh__sk_arc__reference.svg new file mode 100644 index 0000000000..cfbe0a1042 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_arc__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsConstructionQDimensionDConstrainKSketch arc or circle · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_line.svg b/docs/CAD/ux/mockups/fresh__sk_line.svg new file mode 100644 index 0000000000..e40d823e13 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_line.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSketch line selected — pick what to do with itFresh document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_line__create.svg b/docs/CAD/ux/mockups/fresh__sk_line__create.svg new file mode 100644 index 0000000000..1a6f7b561c --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_line__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCreate — pick oneFresh document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch line · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_line__dressup.svg b/docs/CAD/ux/mockups/fresh__sk_line__dressup.svg new file mode 100644 index 0000000000..3fce662ba1 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_line__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetDress-up — pick oneFresh document · 8 slotsFilletFChamferHSketch line · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_line__modify.svg b/docs/CAD/ux/mockups/fresh__sk_line__modify.svg new file mode 100644 index 0000000000..26318535ef --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_line__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelExtendXSketch line · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_line__reference.svg b/docs/CAD/ux/mockups/fresh__sk_line__reference.svg new file mode 100644 index 0000000000..2abc91fc99 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_line__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsConstructionQDimensionDConstrainKSketch line · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_loop.svg b/docs/CAD/ux/mockups/fresh__sk_loop.svg new file mode 100644 index 0000000000..58eaa9e4fb --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_loop.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetClosed sketch loop selected — pick what to do with itFresh document · 8 slotsAdd material5Modify2Closed sketch loop \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_loop__add.svg b/docs/CAD/ux/mockups/fresh__sk_loop__add.svg new file mode 100644 index 0000000000..c6e6c90701 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_loop__add.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetAdd material — pick oneFresh document · 8 slotsExtrudeShift+ERevolveShift+RSurface ExtrudeShift+GSurface RevolveSurface FillClosed sketch loop · Add material \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_loop__modify.svg b/docs/CAD/ux/mockups/fresh__sk_loop__modify.svg new file mode 100644 index 0000000000..416e62d7cd --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_loop__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetModify — pick oneFresh document · 8 slotsDeleteDelEditClosed sketch loop · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_none.svg b/docs/CAD/ux/mockups/fresh__sk_none.svg new file mode 100644 index 0000000000..ce7604c47d --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_none.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSketch, nothing picked selected — pick what to do with itFresh document · 8 slotsCreate9Reference2Sketch, nothing picked \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_none__create.svg b/docs/CAD/ux/mockups/fresh__sk_none__create.svg new file mode 100644 index 0000000000..06994f9517 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_none__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCreate — pick oneFresh document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch, nothing picked · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_none__reference.svg b/docs/CAD/ux/mockups/fresh__sk_none__reference.svg new file mode 100644 index 0000000000..e4e558bbd9 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_none__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsDimensionDConstructionQSketch, nothing picked · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_point.svg b/docs/CAD/ux/mockups/fresh__sk_point.svg new file mode 100644 index 0000000000..65acf94ac7 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_point.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetSketch point selected — pick what to do with itFresh document · 8 slotsCreate9MoveReference2DeleteDelSketch point \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_point__create.svg b/docs/CAD/ux/mockups/fresh__sk_point__create.svg new file mode 100644 index 0000000000..fbe094d147 --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_point__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetCreate — pick oneFresh document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch point · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__sk_point__reference.svg b/docs/CAD/ux/mockups/fresh__sk_point__reference.svg new file mode 100644 index 0000000000..8b02eba29f --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__sk_point__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsDimensionDConstrainKSketch point · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__vertex.svg b/docs/CAD/ux/mockups/fresh__vertex.svg new file mode 100644 index 0000000000..1e1661d6aa --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__vertex.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetVertex selected — pick what to do with itFresh document · 8 slotsReference4Vertex \ No newline at end of file diff --git a/docs/CAD/ux/mockups/fresh__vertex__reference.svg b/docs/CAD/ux/mockups/fresh__vertex__reference.svg new file mode 100644 index 0000000000..aad3d46b6e --- /dev/null +++ b/docs/CAD/ux/mockups/fresh__vertex__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetReference — pick oneFresh document · 8 slotsCoord SysShift+CMeasurePlaneShift+PAxisShift+AVertex · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/gen_offer_mockups.py b/docs/CAD/ux/mockups/gen_offer_mockups.py new file mode 100644 index 0000000000..6ddd4caae4 --- /dev/null +++ b/docs/CAD/ux/mockups/gen_offer_mockups.py @@ -0,0 +1,884 @@ +#!/usr/bin/env python3 +"""Render the object-driven tool offer from docs/ux/tool_atlas.json. + +Fork-neutral on purpose: this file and everything it emits name no product, so the +two forks carry byte-identical copies (the charter itself is the only doc that +substitutes the product name). + +Every mockup in docs/ux/mockups/ and the review page docs/ux/offer_atlas.html are +generated by this script. Nothing is hand-drawn: the point of the offer is that a +tool's address never changes, and a human drawing 40-odd states by hand is exactly +how an address quietly changes. + + python3 docs/ux/mockups/gen_offer_mockups.py + +It fails loudly rather than rendering a broken map: an unknown slot, an unknown +selection id in `accepts`, or one address holding two different verbs for the same +selection is an error, not a warning. + +SVG on purpose. There is no rsvg/inkscape/cairosvg on the build box and +ImageMagick would rasterise through its own weak internal renderer; SVG renders +exactly in a browser at any zoom and stays diffable in git. Rasterise later if +slides need it. +""" + +import json +import re +import math +import os +import sys +from collections import defaultdict + +HERE = os.path.dirname(os.path.abspath(__file__)) +UX = os.path.dirname(HERE) +ATLAS = os.path.join(UX, "tool_atlas.json") + +# The reach target from the charter (L11 / 6.1): if the ring plus a real part do not +# fit here, the design has failed before it is built. +W, H = 1366, 768 + +C = { + "app": "#1a1d21", "chrome": "#23272d", "panel": "#20242a", "line": "#31363d", + "vp0": "#2f353d", "vp1": "#242930", "grid": "#333a43", + "text": "#e7ecf1", "muted": "#8e9aa7", "dim": "#5f6a76", + "top": "#93a1b1", "left": "#6f7b89", "right": "#5a6472", "edge": "#39414b", + "hi": "#f5a623", "hi_soft": "#f5a62333", "sheet": "#7fa8c9", + "ring": "#171a1e", "chip": "#2e343c", "chip_line": "#3c444e", + "key": "#454f5b", "accent": "#4f9bd9", "empty": "#2a2f36", +} + + +# ---------------------------------------------------------------- glyphs +# Each glyph draws inside a 24x24 box centred on (0,0) — i.e. -12..12. +def _g(body): + return body + + +GLYPHS = { + # model + "sketch": '', + "extrude": '', + "revolve": '', + "sweep": '', + "loft": '', + "thicken": '', + "rib": '', + "boolean": '', + "hole": '', + "thread": '', + "shell": '', + "cut": '', + "split": '', + "fillet": '', + "chamfer": '', + "draft": '', + "surf_off": '', + "pattern": '', + "mirror": '', + "pat_curve": '', + "move": '', + "mate": '', + "align": '', + "plane": '', + "axis": '', + "csys": '', + "helix": '', + "project": '', + "measure": '', + "mass": '', + "interfere": '', + "edit": '', + "del_face": '', + "colour": '', + "delete": '', + # sketch primitives + "sk_line": '', + "sk_rect": '', + "sk_circle": '', + "sk_arc": '', + "sk_slot": '', + "sk_ell": '', + "sk_spline": '', + "sk_poly": '', + "sk_point": '', + "sk_offset": '', + "sk_trim": '', + "sk_ext": '', + "sk_mir": '', + "sk_move": '', + "sk_dim": '', + "sk_lock": '', + "sk_constr": '', + # families (used when a slot holds more than one verb) + "fam_create": '', + "fam_add": '', + "fam_remove": '', + "fam_dressup": '', + "fam_repeat": '', + "fam_transform": '', + "fam_reference": '', + # Deliberately NOT the bare pencil: create/sketch already owns that shape and the two slots + # are adjacent (N and NW). A pencil over a solid reads as "change the thing that exists". + "fam_modify": '' + '', +} + +VERB_GLYPH = { + "sketch": "sketch", "extrude": "extrude", "revolve": "revolve", "sweep": "sweep", + "loft": "loft", "thicken": "thicken", "rib": "rib", "boolean": "boolean", + "surf_extrude": "extrude", "surf_revolve": "revolve", "surf_loft": "loft", + "surf_fill": "surf_off", "thicken_surf": "thicken", "hole": "hole", "thread": "thread", + "shell": "shell", "cut": "cut", "split": "split", "fillet": "fillet", + "chamfer": "chamfer", "draft": "draft", "surf_offset": "surf_off", + "pattern": "pattern", "mirror": "mirror", "pat_curve": "pat_curve", + "transform": "move", "mate": "mate", "align": "align", "plane": "plane", + "axis": "axis", "coordsys_v": "csys", "helix": "helix", "project": "project", + "measure": "measure", "mass_props": "mass", "interference": "interfere", + "edit_feature": "edit", "delete_face": "del_face", "colour": "colour", "delete": "delete", + "sk_line_t": "sk_line", "sk_rect": "sk_rect", "sk_circle": "sk_circle", + "sk_arc_t": "sk_arc", "sk_slot": "sk_slot", "sk_ellipse": "sk_ell", + "sk_spline": "sk_spline", "sk_polygon": "sk_poly", "sk_point_t": "sk_point", + "sk_offset": "sk_offset", "sk_trim": "sk_trim", "sk_fillet": "fillet", + "sk_chamfer": "chamfer", "sk_mirror": "sk_mir", "sk_move": "sk_move", + "sk_dimension": "sk_dim", "sk_constrain": "sk_lock", "sk_construct": "sk_constr", + "sk_extend": "sk_ext", "sk_delete": "delete", +} + + +def glyph(name, cx, cy, colour, scale=1.0, sw=1.6): + body = GLYPHS.get(name, '') + return (f'{body}') + + +# ---------------------------------------------------------------- iso scene +COS30, SIN30 = math.cos(math.radians(30)), math.sin(math.radians(30)) + + +def iso(x, y, z, ox, oy, s=1.0): + return (ox + (x - y) * COS30 * s, oy + (x + y) * SIN30 * s - z * s) + + +def poly(pts, fill, stroke=None, extra=""): + d = " ".join(f"{x:.1f},{y:.1f}" for x, y in pts) + # Only emit our own stroke-width when the caller has not supplied one: a duplicate + # attribute is last-one-wins in a browser but invalid markup, and it is exactly the + # kind of thing a stricter renderer refuses outright. + if stroke: + st = f' stroke="{stroke}"' + ("" if "stroke-width" in extra else ' stroke-width="1"') + else: + st = ' stroke="none"' + return f'' + + +def box(ox, oy, w=150, d=105, h=52, s=1.0, hi=None): + """Three visible faces of a box. `hi` names the face/edge to highlight.""" + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + top = [P(0, 0, h), P(w, 0, h), P(w, d, h), P(0, d, h)] + left = [P(0, d, h), P(w, d, h), P(w, d, 0), P(0, d, 0)] + right = [P(w, 0, h), P(w, d, h), P(w, d, 0), P(w, 0, 0)] + out = [ + poly(left, C["left"], C["edge"]), + poly(right, C["right"], C["edge"]), + poly(top, C["hi"] if hi == "top" else C["top"], C["edge"]), + ] + if hi == "top": + out.append(poly(top, "none", "#ffd07a", ' stroke-width="2.5"')) + if hi == "front_edge": + a, b = P(0, d, h), P(w, d, h) + out.append(f'') + if hi == "vertex": + v = P(w, d, h) + out.append(f'') + if hi == "whole": + out.append(poly(top, "none", "#ffd07a", ' stroke-width="2.5"')) + out.append(poly(left, "none", "#ffd07a", ' stroke-width="2.5"')) + out.append(poly(right, "none", "#ffd07a", ' stroke-width="2.5"')) + return "".join(out), P + + +def bore(P, cx, cy, h, r=22, s=1.0, hi=False): + """A cylindrical bore through the top face, drawn as ellipse + wall.""" + c = P(cx, cy, h) + rx, ry = r * COS30 * 2 * s, r * SIN30 * 2 * s + col = C["hi"] if hi else "#20252b" + wall = C["hi"] if hi == "wall" else "#3b434d" + return (f'' + f'' + + (f'' if hi else "")), c + + +def scene(kind, ox, oy): + """Return (svg, anchor) for a selection kind. Anchor = where the ring centres.""" + s = 1.0 + if kind == "origin": + # A document with nothing in it: the three origin planes are all there is to click. + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + g = poly([P(-70, -70, 0), P(70, -70, 0), P(70, 70, 0), P(-70, 70, 0)], + "#4f9bd91f", "#4f9bd977", ' stroke-width="1.5" stroke-dasharray="6 4"') + g += poly([P(-70, 0, -70), P(70, 0, -70), P(70, 0, 70), P(-70, 0, 70)], + "#e05c5c14", "#e05c5c66", ' stroke-width="1.5" stroke-dasharray="6 4"') + g += poly([P(0, -70, -70), P(0, 70, -70), P(0, 70, 70), P(0, -70, 70)], + "#5ce07a14", "#5ce07a66", ' stroke-width="1.5" stroke-dasharray="6 4"') + return g, P(0, 0, 0) + if kind == "empty": + g, P = box(ox, oy, s=s) + return g, P(75, 52, 26) + if kind == "box_top": + g, P = box(ox, oy, s=s, hi="top") + return g, P(75, 52, 52) + if kind == "box_whole": + g, P = box(ox, oy, s=s, hi="whole") + return g, P(75, 52, 26) + if kind == "box_edge": + g, P = box(ox, oy, s=s, hi="front_edge") + return g, P(75, 105, 52) + if kind == "box_vertex": + g, P = box(ox, oy, s=s, hi="vertex") + return g, P(150, 105, 52) + if kind in ("box_bore", "box_bore_rim"): + g, P = box(ox, oy, s=s) + b, c = bore(P, 75, 52, 52, hi=("wall" if kind == "box_bore" else True)) + return g + b, c + if kind == "box_fillet_face": + g, P = box(ox, oy, s=s) + a, b = P(0, 0, 52), P(0, 105, 52) + g += (f'') + return g, P(0, 52, 52) + if kind == "sheet": + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + pts = [P(0, 0, 40), P(150, 0, 55), P(150, 105, 30), P(0, 105, 18)] + return (poly(pts, C["sheet"], "#ffd07a", ' stroke-width="2.5" opacity="0.85"'), + P(75, 52, 36)) + if kind == "two_boxes": + g1, P1 = box(ox - 60, oy - 10, w=110, d=80, h=44, hi="whole") + g2, P2 = box(ox + 70, oy + 26, w=95, d=70, h=60, hi="whole") + return g1 + g2, (ox + 42, oy + 6) + if kind == "datum": + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + g, _ = box(ox, oy, s=s) + pts = [P(-25, -25, 70), P(175, -25, 70), P(175, 130, 70), P(-25, 130, 70)] + g += poly(pts, "#4f9bd933", C["hi"], ' stroke-width="2.5" stroke-dasharray="6 4"') + return g, P(75, 52, 70) + if kind == "axis": + g, P = box(ox, oy, s=s) + a, b = P(-30, 52, 52), P(180, 52, 52) + g += (f'') + return g, P(75, 52, 52) + if kind == "csys": + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + g, _ = box(ox, oy, s=s) + o = P(0, 0, 52) + for tgt, col in ((P(60, 0, 52), "#e05c5c"), (P(0, 60, 52), "#5ce07a"), (P(0, 0, 112), "#5c9ce0")): + g += (f'') + g += f'' + return g, o + if kind == "art": + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + g, _ = box(ox, oy, s=s) + c = P(75, 52, 52) + g += (f'' + f'ABC') + return g, c + if kind == "loop": + P = lambda x, y, z: iso(x, y, z, ox, oy, s) + g, _ = box(ox, oy, s=s) + pts = [P(28, 22, 52), P(122, 22, 52), P(122, 83, 52), P(28, 83, 52)] + g += poly(pts, C["hi_soft"], C["hi"], ' stroke-width="3"') + return g, P(75, 52, 52) + # --- sketch mode: flat, camera normal to the plane + gx, gy = ox - 30, oy - 10 + grid = "".join( + f'' + for i in range(11)) + "".join( + f'' + for i in range(16)) + if kind == "sk_empty": + return grid, (gx, gy) + if kind == "sk_line": + return (grid + f'' + f'' + f'', (gx, gy + 10)) + if kind == "sk_arc": + return (grid + f'', (gx, gy)) + if kind == "sk_point": + return (grid + f'', (gx, gy)) + if kind == "sk_two": + return (grid + f'' + f'', (gx, gy + 5)) + return grid, (gx, gy) + + +# ---------------------------------------------------------------- app chrome +def chrome(title, status, mode="model", empty_doc=False): + tabs = ["Prepare", "Preview", "Design"] + g = [f'', + f'' + f'' + f'', + f'', + f''] + x = 24 + for t in tabs: + on = (t == "Design") + g.append(f'{t}') + if on: + g.append(f'') + x += len(t) * 9 + 34 + # toolbar + g.append(f'' + f'') + fams = (["sketch", "extrude", "hole", "fillet", "pattern", "boolean", "plane", "move", "measure"] + if mode == "model" else + ["sk_line", "sk_rect", "sk_circle", "sk_arc", "sk_slot", "sk_spline", "sk_dim", "sk_trim", "sk_lock"]) + for i, gl in enumerate(fams): + cx = 40 + i * 46 + g.append(f'') + g.append(glyph(gl, cx, 68, C["muted"], 0.62, 1.7)) + # left rail + g.append(f'' + f'') + g.append(f'FEATURES') + # A "fresh document" mockup that shows six existing features is a lie, and it is the one + # state the group will look at hardest — it is the first-run picture (B5). + tree = ([] if empty_doc else + [("Sketch1", 0), ("Extrude1", 0), ("Hole1", 1), ("Fillet1", 1), ("Sketch2", 0), ("Extrude2", 0)]) + if empty_doc: + g.append(f'nothing yet') + for i, (n, ind) in enumerate(tree): + yy = 150 + i * 26 + g.append(glyph("sketch" if n.startswith("Sketch") else "extrude", 30 + ind * 14, yy - 4, C["dim"], 0.42, 1.8)) + g.append(f'{n}') + # status bar + g.append(f'' + f'{status}') + g.append(f'{title}') + return "".join(g) + + +# ---------------------------------------------------------------- the ring +def ring(cx, cy, items, capacity, sel_name, radius=134): + """items: dict angle_index -> (glyph, label, key, count) or None for an empty slot.""" + # The scrim is deliberately faint. §4.1: the offer "never blocks the view of what it acts + # on" — at 0.55 the disc swallowed the very face the ring was opened on, which is the rule + # failing in its own mockup. + g = [f'', + f'', + f''] + step = 360.0 / capacity + for i in range(capacity): + ang = math.radians(-90 + i * step) + px, py = cx + radius * math.cos(ang), cy + radius * math.sin(ang) + it = items.get(i) + if not it: + g.append(f'') + continue + gl, label, key, count = it + g.append(f'') + g.append(glyph(gl, px, py - 2, C["text"], 0.92, 1.7)) + g.append(f'{label}') + if key: + kw = 13 + len(key) * 6.6 + g.append(f'' + f'{key}') + if count and count > 1: + g.append(f'' + f'{count}') + # The selection name sits on the LOWER rim of the centre hole, not above it: above, it + # landed on top of the north slot's shortcut chip and hid it. Below, the pick stays + # visible through the hole and the pill is clear of the south chip at cy+104. + w = 13 + len(sel_name) * 6.9 + g.append(f'' + f'{sel_name}') + return "".join(g) + + +# ---------------------------------------------------------------- enumeration +def load(): + with open(ATLAS, encoding="utf-8") as f: + return json.load(f) + + +def validate(A): + slot_ids = {s["id"] for s in A["slots"]} + sel_ids = {s["id"] for s in A["selections"]} + errs = [] + seen = {} + for v in A["verbs"]: + if v["slot"] not in slot_ids: + errs.append(f'{v["id"]}: unknown slot {v["slot"]!r}') + for a in v["accepts"]: + if a not in sel_ids: + errs.append(f'{v["id"]}: accepts unknown selection {a!r}') + if v["id"] in seen: + errs.append(f'{v["id"]}: duplicate verb id') + seen[v["id"]] = v["slot"] + if errs: + sys.exit("tool_atlas.json is inconsistent:\n " + "\n ".join(errs)) + return slot_ids, sel_ids + + +def eligible(A, sel_id, doc): + sel = next(s for s in A["selections"] if s["id"] == sel_id) + out = [] + for v in A["verbs"]: + if v.get("mode", "model") != sel["mode"]: + continue + if sel_id not in v["accepts"]: + continue + n = v.get("needs") or {} + if n.get("bodies", 0) > doc["bodies"]: + continue + if n.get("sketches", 0) > doc["sketches"]: + continue + if n.get("sheet") and not doc["sheet"]: + continue + out.append(v) + return out + + +def by_slot(A, verbs): + order = [s["id"] for s in A["slots"]] + d = defaultdict(list) + for v in verbs: + d[v["slot"]].append(v) + return {k: d[k] for k in order if d[k]} + + +def ring_items(A, grouped): + order = [s["id"] for s in A["slots"]] + slot_label = {s["id"]: s["label"] for s in A["slots"]} + items = {} + for i, sid in enumerate(order): + vs = grouped.get(sid) + if not vs: + continue + if len(vs) == 1: + v = vs[0] + items[i] = (VERB_GLYPH.get(v["id"], "fam_" + sid), v["name"], v.get("key"), 1) + else: + items[i] = ("fam_" + sid, slot_label[sid], None, len(vs)) + return items + + +# ---------------------------------------------------------------- rendering +def menu(cx, cy, header, rows, submenu=None, sub_at=None): + """Vertical list form of the offer. rows: (glyph, name, key, count, enabled, reason). + + The invariant is unchanged — a verb has one permanent row index, and rows that do not + apply are DISABLED IN PLACE, never removed. What changes against the ring is what an + unavailable slot can say: an empty circle says nothing, a greyed row says its own name + and the reason it is grey, in the words the product already ships. + """ + RW, RH, HD = 324, 34, 38 + # The reason line is the whole point of a disabled row, so it must FIT: at 10px italic a + # glyph is ~4.9px, and anything past the box edge is a promise the layout does not keep. + fit = int((RW - 62) / 4.9) + x, y = cx + 26, cy - 30 + h = HD + len(rows) * RH + 10 + if y + h > H - 44: + y = max(100, H - 44 - h) + g = [f'', + f'', + f'{header.upper()}', + f''] + # a leader from the pick point to the menu, so the list is visibly ABOUT that geometry + g.insert(0, f'') + g.insert(0, f'') + for i, (gl, name, key, count, on, reason) in enumerate(rows): + ry = y + HD + i * RH + op = "1" if on else "0.34" + if on and i == 0: + g.append(f'') + g.append(f'') + g.append(glyph(gl, x + 26, ry + RH / 2, C["text"], 0.72, 1.7)) + g.append(f'{name}') + if key: + kw = 13 + len(key) * 6.6 + g.append(f'' + f'{key}') + elif count and count > 1: + g.append(f'') + g.append(f'{count}') + g.append('') + if not on and reason: + r = reason if len(reason) <= fit else reason[:fit - 1].rstrip(" ,—-") + "…" + g.append(f'{r}') + if submenu: + sy = y + HD + (sub_at or 0) * RH - 6 + sh = 12 + len(submenu) * RH + sx = x + RW + 8 + g.append(f'') + g.append(f'') + for i, (gl, name, key, _c, on, _r) in enumerate(submenu): + ry = sy + 6 + i * RH + g.append(f'') + g.append(glyph(gl, sx + 24, ry + RH / 2, C["text"], 0.72, 1.7)) + g.append(f'{name}') + if key: + kw = 13 + len(key) * 6.6 + g.append(f'' + f'{key}') + g.append('') + return "".join(g) + + +OVERFLOWS = [] # (selection, doc state, family, verbs that did not fit the sub-ring) + + +def svg_doc(inner): + return (f'{inner}') + + +def render_list_state(A, sel, doc, expand=None): + """The vertical-list form: every family row always present, in the same order, with the + ones that do not apply disabled and carrying their reason.""" + verbs = eligible(A, sel["id"], doc) + grouped = by_slot(A, verbs) + fresh = doc["bodies"] == 0 and doc["sketches"] == 0 + shape = "origin" if (fresh and sel["shape"] == "empty") else sel["shape"] + art, (ax, ay) = scene(shape, 620, 360) + rows, sub, sub_at = [], None, None + for idx, s in enumerate(A["slots"]): + vs = grouped.get(s["id"], []) + if len(vs) == 1: + v = vs[0] + rows.append((VERB_GLYPH.get(v["id"], "fam_" + s["id"]), v["name"], v.get("key"), 1, True, None)) + elif len(vs) > 1: + rows.append(("fam_" + s["id"], s["label"], None, len(vs), True, None)) + if expand == s["id"]: + sub_at = idx + sub = [(VERB_GLYPH.get(v["id"], "fam_" + s["id"]), v["name"], v.get("key"), 1, True, None) + for v in vs] + else: + # Disabled in place, with the product's own refusal text — the thing an empty + # slot in the ring could never say. + cands = [v for v in A["verbs"] + if v["slot"] == s["id"] and v.get("mode", "model") == sel["mode"]] + why = next((v["refusal"] for v in cands if v.get("refusal")), None) + rows.append(("fam_" + s["id"], s["label"], None, 0, False, why)) + status = ("Right-click the geometry to see what you can do with it" if not expand + else f'{sel["name"]} — pick one') + inner = chrome(f'{doc["name"]} · vertical list', status, sel["mode"], empty_doc=fresh) + inner += art + inner += menu(ax, ay, sel["name"], rows, sub, sub_at) + return svg_doc(inner) + + +def render_state(A, sel, doc, capacity=8, secondary=None): + verbs = eligible(A, sel["id"], doc) + grouped = by_slot(A, verbs) + anchor_x, anchor_y = 810, 400 + fresh = doc["bodies"] == 0 and doc["sketches"] == 0 + shape = "origin" if (fresh and sel["shape"] == "empty") else sel["shape"] + art, (ax, ay) = scene(shape, anchor_x - 90, anchor_y - 40) + if secondary: + vs = grouped[secondary] + # A sub-ring ANCHORS ON ITS PARENT'S DIRECTION. Fanning from north instead put Extrude + # at N — Create's address in the primary map — so the second level contradicted the + # first. Anchored, an address is two consistent strokes: Add material is NE, and the + # first verb of Add material is NE again. + base = [s["id"] for s in A["slots"]].index(secondary) + overflow = [] + if len(vs) > capacity: + # Do NOT wrap: (base+i) % capacity would quietly put verb 9 on top of verb 1, which + # is the invariant failing silently — the one outcome worse than an ugly ring. Show + # what fits, mark the rest, and report it. + overflow = vs[capacity - 1:] + vs = vs[:capacity - 1] + items = {(base + i) % capacity: + (VERB_GLYPH.get(v["id"], "fam_" + secondary), v["name"], v.get("key"), 1) + for i, v in enumerate(vs)} + if overflow: + items[(base + capacity - 1) % capacity] = ("fam_" + secondary, "More", None, len(overflow)) + OVERFLOWS.append((sel["name"], doc["id"], secondary, [v["name"] for v in overflow])) + label = next(s["label"] for s in A["slots"] if s["id"] == secondary) + sel_name = f'{sel["name"]} · {label}' + status = f'{label} — pick one' + else: + items = ring_items(A, grouped) + sel_name = sel["name"] + status = ("Click a face or a reference plane, then a tool" + if sel["id"] == "none" else f'{sel["name"]} selected — pick what to do with it') + inner = chrome(f'{doc["name"]} · {capacity} slots', status, sel["mode"], empty_doc=fresh) + inner += art + inner += ring(ax, ay, items, capacity, sel_name) + return svg_doc(inner), verbs, grouped + + +def main(): + A = load() + validate(A) + docs = {d["id"]: d for d in A["doc_states"]} + outdir = HERE + rows, files = [], [] + total_primary = total_secondary = 0 + fill_sum = fill_n = 0 + + for d in A["doc_states"]: + for sel in A["selections"]: + svg, verbs, grouped = render_state(A, sel, d) + name = f'{d["id"]}__{sel["id"]}.svg' + with open(os.path.join(outdir, name), "w", encoding="utf-8") as f: + f.write(svg) + files.append((name, f'{sel["name"]} — {d["name"]}')) + total_primary += 1 + fill_sum += len(grouped) + fill_n += 1 + secondaries = [] + for sid, vs in grouped.items(): + if len(vs) > 1: + s2, _, _ = render_state(A, sel, d, secondary=sid) + n2 = f'{d["id"]}__{sel["id"]}__{sid}.svg' + with open(os.path.join(outdir, n2), "w", encoding="utf-8") as f: + f.write(s2) + label = next(s["label"] for s in A["slots"] if s["id"] == sid) + files.append((n2, f'{sel["name"]} — {label} ring')) + secondaries.append(sid) + total_secondary += 1 + rows.append({ + "doc": d["name"], "sel": sel["name"], "mode": sel["mode"], + "verbs": len(verbs), "slots": len(grouped), + "second": len(secondaries), + "detail": {sid: [v["name"] for v in vs] for sid, vs in grouped.items()}, + }) + + # Form-factor comparison: the SAME state as a ring and as a vertical list. + for sid in ("face_planar", "edge_str", "body_solid", "sk_line", "none"): + sel = next(s for s in A["selections"] if s["id"] == sid) + d = docs["fresh"] if sid == "none" else docs["rich"] + with open(os.path.join(outdir, f"list__{sid}.svg"), "w", encoding="utf-8") as f: + f.write(render_list_state(A, sel, d)) + for sid, fam in (("face_planar", "add"), ("sk_none", "create")): + sel = next(s for s in A["selections"] if s["id"] == sid) + with open(os.path.join(outdir, f"list__{sid}__{fam}.svg"), "w", encoding="utf-8") as f: + f.write(render_list_state(A, sel, docs["rich"], expand=fam)) + + # comparison sheet: 8 vs 12 slots on the same three selections + for cap in (8, 12): + for sid in ("face_planar", "edge_str", "sk_line"): + sel = next(s for s in A["selections"] if s["id"] == sid) + svg, _, _ = render_state(A, sel, docs["rich"], capacity=cap) + n = f'cmp_{cap}__{sid}.svg' + with open(os.path.join(outdir, n), "w", encoding="utf-8") as f: + f.write(svg) + + write_atlas(A, rows, files, total_primary, total_secondary, + fill_sum / max(1, fill_n)) + print(f"{total_primary} primary + {total_secondary} secondary = " + f"{total_primary+total_secondary} offer states rendered") + print(f"mean populated slots per primary ring: {fill_sum/max(1,fill_n):.2f} of 8") + if OVERFLOWS: + seen = {(f, tuple(v)) for _, _, f, v in OVERFLOWS} + print(f"OVERFLOW: {len(OVERFLOWS)} sub-rings did not fit 8 slots — " + f"{len(seen)} distinct case(s):") + for f, v in sorted(seen): + print(f" {f}: {', '.join(v)} pushed behind 'More'") + + +def write_atlas(A, rows, files, n_prim, n_sec, mean_fill): + gui_missing = [v["name"] for v in A["verbs"] if not v.get("gui", True)] + esc = lambda s: (s.replace("&", "&").replace("<", "<").replace(">", ">")) + cards = "".join( + f'
{esc(t)}
{esc(t)}
' + for n, t in files) + cmp8 = "".join(f'
' + f'
8 slots — {s}
' + for s in ("face_planar", "edge_str", "sk_line")) + cmp12 = "".join(f'
' + f'
12 slots — {s}
' + for s in ("face_planar", "edge_str", "sk_line")) + if OVERFLOWS: + cases = sorted({(f, tuple(v)) for _, _, f, v in OVERFLOWS}) + over_html = ("Measured, not predicted: " + "; ".join( + f'the {esc(f)} sub-ring needs {8 + len(v)} addresses, so ' + f'{esc(", ".join(v))} {"is" if len(v) == 1 else "are"} pushed behind a “More” slot' + for f, v in cases) + + ". This is the decision the ring size actually turns on — either a verb moves to " + "another family, or the tail goes to a third level, or the ring is not eight. " + "It affects sketch mode only; every model-mode family fits.") + else: + over_html = "No sub-ring exceeds the ring capacity. Eight slots is sufficient everywhere." + trs = "".join( + f'{esc(r["sel"])}{esc(r["doc"])}{r["verbs"]}' + f'{r["slots"]}/8{r["second"]}' + f'{esc(" · ".join(k + ": " + ", ".join(v) for k, v in r["detail"].items()))}' + for r in rows) + html = f"""Design tab — offer atlas + +
+

The offer — atlas of every state

+

Every state of the object-driven tool offer, generated from + docs/ux/tool_atlas.json. The invariant under test: a verb has one address, that + address is the same in every selection where it appears, and slots that do not apply are drawn + empty rather than compacted.

+
+
{len(A["verbs"])}verbs mapped
+
{len(A["selections"])}selection kinds
+
{n_prim}primary rings
+
{n_sec}secondary rings
+
{n_prim+n_sec}states total
+
{mean_fill:.1f}/8mean slots filled
+
{len(gui_missing)}verbs with no GUI yet
+
+
+
+

Decision 0 — ring or vertical list

+

The live question. Both forms carry the SAME map and the same invariant — fixed order, never + re-sorted, nothing compacted; only the geometry differs. Left-click selects; right-click opens the + offer. What the list buys: a disabled row can state its own reason in the words the product + already ships, where an empty slot in a ring is mute; nine sketch primitives fit without an + overflow; shortcuts line up in a readable column; long translated names fit; and it is navigable + by arrow key and by screen reader, which a radial is not. What it costs: no equidistant flick + gesture, and travel to the last row is longer than to the nearest direction. Pairs below — + list first, the same state as a ring second.

+ +

Decision 1 — ring capacity

+

The same three selections at eight and at twelve. Eight keeps 45° between neighbours, which is + the reliable eyes-free pointing threshold and maps 1:1 to the numpad; twelve buys direct addresses + for more verbs at 30° spacing and positions that stop being nameable.

+
{cmp8}
+
{cmp12}
+ +

Decision 2 — one map or one per mode

+

These renders use ONE shared map: sketch verbs occupy the same eight families as model verbs, + so dress-up is south-east whether you picked a solid edge or a sketch line. Compare the sketch-mode + states below against the model-mode ones — if a verb that exists in both modes ever appears at two + addresses, the shared map has failed and the split map is the answer.

+ +

The matrix — every selection, every document state

+
+ + {trs} +
SelectionDocumentVerbsSlots2nd ringsWhat lands where
+ +

Overflow — the one place eight slots is not enough

+

{over_html}

+ +

Not in the offer

+

{esc(", ".join(A["chrome_only"]["items"]))} — these act on the document, not on a selection, + so they stay in chrome. Verbs with kernel support but no GUI today, which still hold an address: + {esc(", ".join(gui_missing))}.

+ +

All states

+
{cards}
+
+""" + with open(os.path.join(UX, "offer_atlas.html"), "w", encoding="utf-8") as f: + f.write(html) + + # A second, SELF-CONTAINED copy for review outside the repo: the artifact host blocks + # every external request, so relative would silently show nothing. Curated + # rather than all 113 states — the whole set inlined is 1.5 MB, which is a poor thing to + # send to the low-end machine this design is meant to serve (6.1). + def inline(name): + p = os.path.join(HERE, name) + if not os.path.exists(p): + return "" + s = open(p, encoding="utf-8").read() + return s.replace("{inline(n)}
{esc(t)}
' + for n, t in picks if inline(n)) + head, _, tail = html.partition('

All states

') + # The comparison grids in the head use , which resolves to nothing + # once the page is served on its own. Inline those too rather than shipping empty frames. + head = re.sub(r']*>', + lambda m: inline(m.group(1)), head) + inline_html = head + '

The states

\n
' + figs + '
\n' + with open(os.path.join(UX, "offer_atlas_inline.html"), "w", encoding="utf-8") as f: + f.write(inline_html) + + +if __name__ == "__main__": + main() diff --git a/docs/CAD/ux/mockups/gen_offer_table.py b/docs/CAD/ux/mockups/gen_offer_table.py new file mode 100644 index 0000000000..9744f9288b --- /dev/null +++ b/docs/CAD/ux/mockups/gen_offer_table.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python3 +"""Emit the C++ offer table from docs/ux/tool_atlas.json. + + python3 docs/ux/mockups/gen_offer_table.py + +The map exists ONCE. The mockups and the shipping menu read the same rows in the same +order from the same file, so a drawing and the product cannot drift apart — which is the +only way row constancy (charter 4.1) survives contact with a codebase. + +Output: src/slic3r/GUI/CAD/DesignOffer.hpp, checked in and never hand-edited. +""" + +import json +import os +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +UX = os.path.dirname(HERE) +# One dirname more than you would expect: this generator lives at docs/CAD/ux/mockups/, +# not docs/ux/mockups/, since the design docs moved into the CAD subfolder (bbd1989e1e). +# With the old count REPO resolved to docs/, so OUT pointed at docs/src/.../DesignOffer.hpp, +# which does not exist -- and --check then diffed the real generated table against an empty +# file and reported the whole 189-line header as a difference. +REPO = os.path.dirname(os.path.dirname(os.path.dirname(UX))) +ATLAS = os.path.join(UX, "tool_atlas.json") +OUT = os.path.join(REPO, "src", "slic3r", "GUI", "CAD", "DesignOffer.hpp") + +# selection id -> C++ enumerator +ENUM = { + "none": "None", "face_planar": "FacePlanar", "face_cyl": "FaceCyl", + "face_other": "FaceOther", "edge_str": "EdgeStr", "edge_circ": "EdgeCirc", + "vertex": "Vertex", "body_solid": "BodySolid", "body_sheet": "BodySheet", + "bodies_2": "Bodies2", "datum_plane": "DatumPlane", "datum_axis": "DatumAxis", + "coordsys": "CoordSys", "art": "Art", "sk_loop": "SkLoop", "sk_none": "SkNone", + "sk_line": "SkLine", "sk_arc": "SkArc", "sk_point": "SkPoint", "sk_2ent": "Sk2Ent", +} + + +def cstr(s): + if s is None: + return "nullptr" + return '"' + s.replace("\\", "\\\\").replace('"', '\\"') + '"' + + +def main(): + A = json.load(open(ATLAS, encoding="utf-8")) + sels = [s["id"] for s in A["selections"]] + assert all(s in ENUM for s in sels), [s for s in sels if s not in ENUM] + slots = [s["id"] for s in A["slots"]] + + lines = [ + "// GENERATED FILE — DO NOT EDIT.", + "// Source: docs/ux/tool_atlas.json Generator: docs/ux/mockups/gen_offer_table.py", + "//", + "// The object-driven tool offer (charter 4.1): every verb has ONE row index, that index", + "// is the same in every selection it appears in, and verbs that do not apply are shown", + "// disabled in place with their reason rather than removed. Row order was ratified", + "// 2026-07-31; changing an index is a breaking change to every user's muscle memory.", + "#ifndef slic3r_GUI_DesignOffer_hpp_", + "#define slic3r_GUI_DesignOffer_hpp_", + "", + "#include ", + "", + "namespace Slic3r { namespace GUI {", + "", + "// What the viewport has selected. Ordered as in tool_atlas.json; the bitmask in", + "// OfferVerb::accepts indexes these.", + "enum class OfferSel : int {", + ] + for i, s in enumerate(sels): + lines.append(f" {ENUM[s]} = {i},") + lines += [ + f" Count = {len(sels)}", + "};", + "", + "inline uint32_t offer_bit(OfferSel s) { return 1u << int(s); }", + "", + "// One row of the offer. `action` routes to the code that already implements the verb:", + '// "key:S+E" -> m_keys_feature[SHIFT(\'E\')]', + '// "key:L" -> m_keys_sketch[\'L\']', + '// "fly:material#4" -> row 4 of the "material" feature flyout', + '// "btn:delete" -> a standalone toolbar button', + "// nullptr -> kernel support exists, no GUI path yet (row shows disabled)", + "struct OfferVerb {", + " const char* id;", + " const char* name; // drawing-office word (L10); translated at use with wxGetTranslation", + " int row; // 0..7, the ratified index — NEVER reorder", + " const char* key; // shortcut shown in the row, or nullptr", + " const char* action;", + " const char* refusal; // why this row is greyed, in the product's own words", + " uint32_t accepts; // bitmask over OfferSel", + " int need_bodies;", + " int need_sketches;", + " bool need_sheet;", + " bool sketch_mode; // belongs to the sketch-mode vocabulary, not the model one", + " // Second level INSIDE a row, for tools that come in variants: \"Rectangle\" holds corner,", + " // centre, oblique and rounded. nullptr = sits directly in the row. Keeps the row's own", + " // address fixed (L4.1) while the variants hang one level below it, mirroring the toolbar's", + " // grouping instead of flattening 19 create tools into one wall.", + " const char* family;", + " const char* icon; // resources/images name, or nullptr — the offer draws it beside the row", + " const char* hint; // what the verb does / what to click; shown on hover", + "};", + "", + "// Row labels, in ratified order.", + "static const char* const kOfferRowNames[] = {", + ] + for s in A["slots"]: + lines.append(f' "{s["label"]}",') + lines += [ + "};", + f"static const int kOfferRowCount = {len(slots)};", + "", + "static const OfferVerb kOfferVerbs[] = {", + ] + # A verb the user can PICK must say what it does. Fail loudly rather than ship a + # bare name — the offer is now the only door to these tools. + blind = [v["id"] for v in A["verbs"] if v.get("action") and not v.get("hint")] + assert not blind, f"wired verbs with no hint: {blind}" + for v in A["verbs"]: + # A verb may carry a NOTE: the reason it exists, emitted as a C++ comment above its row. + # Without somewhere to put it, a rationale written into the generated header is deleted by + # the next regeneration — which is how the model-mode "Constrain sketch" row came to exist + # in the header and not in the atlas at all (ziam). The map exists once; so does + # the explanation. + for ln in ([v["note"]] if isinstance(v.get("note"), str) else v.get("note") or []): + lines.append(f" // {ln}") + mask = 0 + for a in v["accepts"]: + mask |= 1 << sels.index(a) + n = v.get("needs") or {} + lines.append( + " {%s, %s, %d, %s, %s, %s, 0x%08xu, %d, %d, %s, %s, %s, %s, %s}," % ( + cstr(v["id"]), cstr(v["name"]), slots.index(v["slot"]), + cstr(v.get("key")), cstr(v.get("action")), cstr(v.get("refusal")), + mask, n.get("bodies", 0), n.get("sketches", 0), + "true" if n.get("sheet") else "false", + "true" if v.get("mode") == "sketch" else "false", + cstr(v.get("family")), cstr(v.get("icon")), cstr(v.get("hint")))) + lines += [ + "};", + f"static const int kOfferVerbCount = {len(A['verbs'])};", + "", + "}} // namespace Slic3r::GUI", + "", + "#endif // slic3r_GUI_DesignOffer_hpp_", + "", + ] + text = "\n".join(lines) + # --check: prove the checked-in header IS what this generator produces, and change nothing. + # The header calls itself GENERATED and was hand-edited anyway; a claim like that is only + # worth having if something enforces it, so run-all-checks.sh runs this on every gate. + if "--check" in sys.argv: + have = open(OUT, encoding="utf-8").read() if os.path.exists(OUT) else "" + if have == text: + print(f"{os.path.relpath(OUT, REPO)} matches tool_atlas.json") + return 0 + import difflib + d = list(difflib.unified_diff(have.splitlines(), text.splitlines(), + "checked-in", "generated", lineterm="", n=1)) + print(f"{os.path.relpath(OUT, REPO)} DIFFERS from tool_atlas.json:") + print("\n".join(d[:60])) + return 1 + with open(OUT, "w", encoding="utf-8") as f: + f.write(text) + wired = sum(1 for v in A["verbs"] if v.get("action")) + print(f"wrote {os.path.relpath(OUT, REPO)}: {len(A['verbs'])} verbs, " + f"{len(slots)} rows, {wired} wired to existing actions") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/docs/CAD/ux/mockups/list__body_solid.svg b/docs/CAD/ux/mockups/list__body_solid.svg new file mode 100644 index 0000000000..ec3b3a84f4 --- /dev/null +++ b/docs/CAD/ux/mockups/list__body_solid.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSOLID BODYCreateClick a face or a reference plane in the viewport, t…Add materialCreate a sketch, or pick a solid face, firstRemove3Dress-up2Repeat3MoveShift+YReference3Modify3 \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__edge_str.svg b/docs/CAD/ux/mockups/list__edge_str.svg new file mode 100644 index 0000000000..3942000d25 --- /dev/null +++ b/docs/CAD/ux/mockups/list__edge_str.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSTRAIGHT EDGECreateClick a face or a reference plane in the viewport, t…Add materialCreate a sketch, or pick a solid face, firstRemovePick a face or a plane to drill intoDress-up2Pattern on CurveTransformTransform needs a body — add or import one firstReference3ModifyDelete Face needs a body — add or import one first \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__face_planar.svg b/docs/CAD/ux/mockups/list__face_planar.svg new file mode 100644 index 0000000000..5ff6892902 --- /dev/null +++ b/docs/CAD/ux/mockups/list__face_planar.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listPLANAR FACESketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2 \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__face_planar__add.svg b/docs/CAD/ux/mockups/list__face_planar__add.svg new file mode 100644 index 0000000000..fb80f2a5c7 --- /dev/null +++ b/docs/CAD/ux/mockups/list__face_planar__add.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face — pick oneWorking document · vertical listPLANAR FACESketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2ExtrudeShift+EThicken \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__none.svg b/docs/CAD/ux/mockups/list__none.svg new file mode 100644 index 0000000000..1e68606383 --- /dev/null +++ b/docs/CAD/ux/mockups/list__none.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESnothing yetRight-click the geometry to see what you can do with itFresh document · vertical listNOTHING SELECTEDSketchShift+SAdd materialCreate a sketch, or pick a solid face, firstRemovePick a face or a plane to drill intoDress-upPick an edge to roundRepeatCreate a solid body to pattern firstTransformTransform needs a body — add or import one firstReference4ModifyDelete Face needs a body — add or import one first \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__sk_line.svg b/docs/CAD/ux/mockups/list__sk_line.svg new file mode 100644 index 0000000000..1b1c2e9cd2 --- /dev/null +++ b/docs/CAD/ux/mockups/list__sk_line.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSKETCH LINECreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2 \ No newline at end of file diff --git a/docs/CAD/ux/mockups/list__sk_none__create.svg b/docs/CAD/ux/mockups/list__sk_none__create.svg new file mode 100644 index 0000000000..0b41268fa6 --- /dev/null +++ b/docs/CAD/ux/mockups/list__sk_none__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch, nothing picked — pick oneWorking document · vertical listSKETCH, NOTHING PICKEDCreate9Add materialRemoveDress-upRepeatTransformReference2ModifyLineLRectangleRCircleCArcASlotSEllipseESplineBPolygonGPointP \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__art.svg b/docs/CAD/ux/mockups/rich__art.svg new file mode 100644 index 0000000000..e835ed1ce0 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__art.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Text / imported art selected — pick what to do with itWorking document · 8 slotsABCPatternShift+NMoveShift+YModify2Text / imported art \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__art__modify.svg b/docs/CAD/ux/mockups/rich__art__modify.svg new file mode 100644 index 0000000000..4c8cdef2b5 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__art__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsABCDeleteDelEditText / imported art · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__bodies_2.svg b/docs/CAD/ux/mockups/rich__bodies_2.svg new file mode 100644 index 0000000000..a977b7f1de --- /dev/null +++ b/docs/CAD/ux/mockups/rich__bodies_2.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Two bodies selected — pick what to do with itWorking document · 8 slotsCombineShift+BMateReference2DeleteDelTwo bodies \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__bodies_2__reference.svg b/docs/CAD/ux/mockups/rich__bodies_2__reference.svg new file mode 100644 index 0000000000..1bfbac0db0 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__bodies_2__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsMeasureInterferenceTwo bodies · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_sheet.svg b/docs/CAD/ux/mockups/rich__body_sheet.svg new file mode 100644 index 0000000000..a1cc27808d --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_sheet.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sheet body selected — pick what to do with itWorking document · 8 slotsThicken SurfaceSurface OffsetMoveShift+YMeasureModify3Sheet body \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_sheet__modify.svg b/docs/CAD/ux/mockups/rich__body_sheet__modify.svg new file mode 100644 index 0000000000..7ce8dbee54 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_sheet__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsColourDeleteDelEditSheet body · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid.svg b/docs/CAD/ux/mockups/rich__body_solid.svg new file mode 100644 index 0000000000..e958532347 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Solid body selected — pick what to do with itWorking document · 8 slotsRemove3Dress-up2Repeat3MoveShift+YReference3Modify3Solid body \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid__dressup.svg b/docs/CAD/ux/mockups/rich__body_solid__dressup.svg new file mode 100644 index 0000000000..7a9ceed334 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletShift+FChamferSolid body · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid__modify.svg b/docs/CAD/ux/mockups/rich__body_solid__modify.svg new file mode 100644 index 0000000000..7a6340d40f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsColourDeleteDelEditSolid body · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid__reference.svg b/docs/CAD/ux/mockups/rich__body_solid__reference.svg new file mode 100644 index 0000000000..27639836c6 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsMassProjectMeasureSolid body · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid__remove.svg b/docs/CAD/ux/mockups/rich__body_solid__remove.svg new file mode 100644 index 0000000000..edbddb7115 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid__remove.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Remove — pick oneWorking document · 8 slotsShellShift+KCutShift+XSplitSolid body · Remove \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__body_solid__repeat.svg b/docs/CAD/ux/mockups/rich__body_solid__repeat.svg new file mode 100644 index 0000000000..74dd67c7de --- /dev/null +++ b/docs/CAD/ux/mockups/rich__body_solid__repeat.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Repeat — pick oneWorking document · 8 slotsPatternShift+NMirrorShift+ZPattern on CurveSolid body · Repeat \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__coordsys.svg b/docs/CAD/ux/mockups/rich__coordsys.svg new file mode 100644 index 0000000000..8cef106106 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__coordsys.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Coordinate system selected — pick what to do with itWorking document · 8 slotsMateModify2Coordinate system \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__coordsys__modify.svg b/docs/CAD/ux/mockups/rich__coordsys__modify.svg new file mode 100644 index 0000000000..92eb28d3dc --- /dev/null +++ b/docs/CAD/ux/mockups/rich__coordsys__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelEditCoordinate system · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_axis.svg b/docs/CAD/ux/mockups/rich__datum_axis.svg new file mode 100644 index 0000000000..c9da648ab7 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_axis.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Datum axis selected — pick what to do with itWorking document · 8 slotsModify2Datum axis \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_axis__modify.svg b/docs/CAD/ux/mockups/rich__datum_axis__modify.svg new file mode 100644 index 0000000000..fd0ae80c52 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_axis__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelEditDatum axis · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_plane.svg b/docs/CAD/ux/mockups/rich__datum_plane.svg new file mode 100644 index 0000000000..8ef88bd9a3 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_plane.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Datum plane selected — pick what to do with itWorking document · 8 slotsSketchShift+SRemove2MirrorShift+ZReference3Modify2Datum plane \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_plane__modify.svg b/docs/CAD/ux/mockups/rich__datum_plane__modify.svg new file mode 100644 index 0000000000..39e5cad41e --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_plane__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelEditDatum plane · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_plane__reference.svg b/docs/CAD/ux/mockups/rich__datum_plane__reference.svg new file mode 100644 index 0000000000..bae3119b6b --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_plane__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsProjectPlaneShift+PHelixDatum plane · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__datum_plane__remove.svg b/docs/CAD/ux/mockups/rich__datum_plane__remove.svg new file mode 100644 index 0000000000..c98b33ad31 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__datum_plane__remove.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Remove — pick oneWorking document · 8 slotsHoleShift+HCutShift+XDatum plane · Remove \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__edge_circ.svg b/docs/CAD/ux/mockups/rich__edge_circ.svg new file mode 100644 index 0000000000..1d07291623 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__edge_circ.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Circular edge selected — pick what to do with itWorking document · 8 slotsThreadShift+TDress-up2MeasureCircular edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__edge_circ__dressup.svg b/docs/CAD/ux/mockups/rich__edge_circ__dressup.svg new file mode 100644 index 0000000000..b315fc2e22 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__edge_circ__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletShift+FChamferCircular edge · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__edge_str.svg b/docs/CAD/ux/mockups/rich__edge_str.svg new file mode 100644 index 0000000000..2c41ce74fc --- /dev/null +++ b/docs/CAD/ux/mockups/rich__edge_str.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 8 slotsDress-up2Pattern on CurveReference3Straight edge \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__edge_str__dressup.svg b/docs/CAD/ux/mockups/rich__edge_str__dressup.svg new file mode 100644 index 0000000000..8e674c044f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__edge_str__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletShift+FChamferStraight edge · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__edge_str__reference.svg b/docs/CAD/ux/mockups/rich__edge_str__reference.svg new file mode 100644 index 0000000000..bc99ca6a13 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__edge_str__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsMeasurePlaneShift+PAxisShift+AStraight edge · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_cyl.svg b/docs/CAD/ux/mockups/rich__face_cyl.svg new file mode 100644 index 0000000000..3c2860373f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_cyl.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Cylindrical face selected — pick what to do with itWorking document · 8 slotsThreadShift+TReference3Modify2Cylindrical face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_cyl__modify.svg b/docs/CAD/ux/mockups/rich__face_cyl__modify.svg new file mode 100644 index 0000000000..9f573682ad --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_cyl__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDelete FaceEditCylindrical face · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_cyl__reference.svg b/docs/CAD/ux/mockups/rich__face_cyl__reference.svg new file mode 100644 index 0000000000..a62be81de8 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_cyl__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsMeasureAxisShift+AHelixCylindrical face · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_other.svg b/docs/CAD/ux/mockups/rich__face_other.svg new file mode 100644 index 0000000000..e5cff4eee5 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_other.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Curved face selected — pick what to do with itWorking document · 8 slotsThickenDraftShift+DMeasureModify2Curved face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_other__modify.svg b/docs/CAD/ux/mockups/rich__face_other__modify.svg new file mode 100644 index 0000000000..8b5fcfd63f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_other__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDelete FaceEditCurved face · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar.svg b/docs/CAD/ux/mockups/rich__face_planar.svg new file mode 100644 index 0000000000..5a58e2fb72 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__add.svg b/docs/CAD/ux/mockups/rich__face_planar__add.svg new file mode 100644 index 0000000000..82acc85038 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__add.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Add material — pick oneWorking document · 8 slotsExtrudeShift+EThickenPlanar face · Add material \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__dressup.svg b/docs/CAD/ux/mockups/rich__face_planar__dressup.svg new file mode 100644 index 0000000000..8d32b9f212 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletShift+FChamferDraftShift+DPlanar face · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__modify.svg b/docs/CAD/ux/mockups/rich__face_planar__modify.svg new file mode 100644 index 0000000000..bffd218131 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDelete FaceEditPlanar face · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__reference.svg b/docs/CAD/ux/mockups/rich__face_planar__reference.svg new file mode 100644 index 0000000000..4682f1e7b1 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsCoord SysShift+CProjectMeasurePlaneShift+PAxisShift+APlanar face · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__remove.svg b/docs/CAD/ux/mockups/rich__face_planar__remove.svg new file mode 100644 index 0000000000..b77a5a0c50 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__remove.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Remove — pick oneWorking document · 8 slotsHoleShift+HShellShift+KPlanar face · Remove \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__face_planar__transform.svg b/docs/CAD/ux/mockups/rich__face_planar__transform.svg new file mode 100644 index 0000000000..2e27983c8b --- /dev/null +++ b/docs/CAD/ux/mockups/rich__face_planar__transform.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Transform — pick oneWorking document · 8 slotsMateAlign toPlanar face · Transform \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__none.svg b/docs/CAD/ux/mockups/rich__none.svg new file mode 100644 index 0000000000..4e8a9dc640 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__none.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Click a face or a reference plane, then a toolWorking document · 8 slotsSketchShift+SReference4Nothing selected \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__none__reference.svg b/docs/CAD/ux/mockups/rich__none__reference.svg new file mode 100644 index 0000000000..14c47c4b27 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__none__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsCoord SysShift+CHelixPlaneShift+PAxisShift+ANothing selected · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_2ent.svg b/docs/CAD/ux/mockups/rich__sk_2ent.svg new file mode 100644 index 0000000000..738b01ecf2 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_2ent.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Two sketch entities selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Two sketch entities \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_2ent__create.svg b/docs/CAD/ux/mockups/rich__sk_2ent__create.svg new file mode 100644 index 0000000000..6d27ffa34a --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_2ent__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Two sketch entities · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_2ent__dressup.svg b/docs/CAD/ux/mockups/rich__sk_2ent__dressup.svg new file mode 100644 index 0000000000..929520b8d2 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_2ent__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletFChamferHTwo sketch entities · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_2ent__modify.svg b/docs/CAD/ux/mockups/rich__sk_2ent__modify.svg new file mode 100644 index 0000000000..d8be7c2d4f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_2ent__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelExtendXTwo sketch entities · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_2ent__reference.svg b/docs/CAD/ux/mockups/rich__sk_2ent__reference.svg new file mode 100644 index 0000000000..9ffc2592a8 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_2ent__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsConstructionQDimensionDConstrainKTwo sketch entities · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_arc.svg b/docs/CAD/ux/mockups/rich__sk_arc.svg new file mode 100644 index 0000000000..d470369f1a --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_arc.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch arc or circle selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTMirrorMMoveReference3Modify2Sketch arc or circle \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_arc__create.svg b/docs/CAD/ux/mockups/rich__sk_arc__create.svg new file mode 100644 index 0000000000..1f901596ec --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_arc__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch arc or circle · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_arc__modify.svg b/docs/CAD/ux/mockups/rich__sk_arc__modify.svg new file mode 100644 index 0000000000..52f9d7d3e5 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_arc__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelExtendXSketch arc or circle · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_arc__reference.svg b/docs/CAD/ux/mockups/rich__sk_arc__reference.svg new file mode 100644 index 0000000000..53e949c184 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_arc__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsConstructionQDimensionDConstrainKSketch arc or circle · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_line.svg b/docs/CAD/ux/mockups/rich__sk_line.svg new file mode 100644 index 0000000000..4ca4000d59 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_line.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_line__create.svg b/docs/CAD/ux/mockups/rich__sk_line__create.svg new file mode 100644 index 0000000000..c37f2d0e45 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_line__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch line · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_line__dressup.svg b/docs/CAD/ux/mockups/rich__sk_line__dressup.svg new file mode 100644 index 0000000000..29e86762d2 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_line__dressup.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Dress-up — pick oneWorking document · 8 slotsFilletFChamferHSketch line · Dress-up \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_line__modify.svg b/docs/CAD/ux/mockups/rich__sk_line__modify.svg new file mode 100644 index 0000000000..b9775b7d94 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_line__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelExtendXSketch line · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_line__reference.svg b/docs/CAD/ux/mockups/rich__sk_line__reference.svg new file mode 100644 index 0000000000..6eb1ef621f --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_line__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsConstructionQDimensionDConstrainKSketch line · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_loop.svg b/docs/CAD/ux/mockups/rich__sk_loop.svg new file mode 100644 index 0000000000..c07d1c09c3 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_loop.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Closed sketch loop selected — pick what to do with itWorking document · 8 slotsAdd material8PatternShift+NModify2Closed sketch loop \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_loop__add.svg b/docs/CAD/ux/mockups/rich__sk_loop__add.svg new file mode 100644 index 0000000000..bf9f429b81 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_loop__add.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Add material — pick oneWorking document · 8 slotsSurface FillExtrudeShift+ERevolveShift+RSweepShift+WLoftShift+LSurface ExtrudeShift+GSurface RevolveSurface LoftClosed sketch loop · Add material \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_loop__modify.svg b/docs/CAD/ux/mockups/rich__sk_loop__modify.svg new file mode 100644 index 0000000000..c466379c9e --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_loop__modify.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Modify — pick oneWorking document · 8 slotsDeleteDelEditClosed sketch loop · Modify \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_none.svg b/docs/CAD/ux/mockups/rich__sk_none.svg new file mode 100644 index 0000000000..ffe49ab9a0 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_none.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch, nothing picked selected — pick what to do with itWorking document · 8 slotsCreate9Reference2Sketch, nothing picked \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_none__create.svg b/docs/CAD/ux/mockups/rich__sk_none__create.svg new file mode 100644 index 0000000000..c9a2bc698d --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_none__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch, nothing picked · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_none__reference.svg b/docs/CAD/ux/mockups/rich__sk_none__reference.svg new file mode 100644 index 0000000000..cc9d465fa4 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_none__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsDimensionDConstructionQSketch, nothing picked · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_point.svg b/docs/CAD/ux/mockups/rich__sk_point.svg new file mode 100644 index 0000000000..f089787bca --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_point.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch point selected — pick what to do with itWorking document · 8 slotsCreate9MoveReference2DeleteDelSketch point \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_point__create.svg b/docs/CAD/ux/mockups/rich__sk_point__create.svg new file mode 100644 index 0000000000..5d2070a6c5 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_point__create.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch point · Create \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__sk_point__reference.svg b/docs/CAD/ux/mockups/rich__sk_point__reference.svg new file mode 100644 index 0000000000..e090382a24 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__sk_point__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsDimensionDConstrainKSketch point · Reference \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__vertex.svg b/docs/CAD/ux/mockups/rich__vertex.svg new file mode 100644 index 0000000000..f37bbd7d47 --- /dev/null +++ b/docs/CAD/ux/mockups/rich__vertex.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Vertex selected — pick what to do with itWorking document · 8 slotsReference4Vertex \ No newline at end of file diff --git a/docs/CAD/ux/mockups/rich__vertex__reference.svg b/docs/CAD/ux/mockups/rich__vertex__reference.svg new file mode 100644 index 0000000000..ceabba032e --- /dev/null +++ b/docs/CAD/ux/mockups/rich__vertex__reference.svg @@ -0,0 +1 @@ +PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsCoord SysShift+CMeasurePlaneShift+PAxisShift+AVertex · Reference \ No newline at end of file diff --git a/docs/CAD/ux/offer_atlas.html b/docs/CAD/ux/offer_atlas.html new file mode 100644 index 0000000000..35c4f5860c --- /dev/null +++ b/docs/CAD/ux/offer_atlas.html @@ -0,0 +1,78 @@ +Design tab — offer atlas + +
+

The offer — atlas of every state

+

Every state of the object-driven tool offer, generated from + docs/ux/tool_atlas.json. The invariant under test: a verb has one address, that + address is the same in every selection where it appears, and slots that do not apply are drawn + empty rather than compacted.

+
+
60verbs mapped
+
20selection kinds
+
40primary rings
+
73secondary rings
+
113states total
+
3.5/8mean slots filled
+
5verbs with no GUI yet
+
+
+
+

Decision 0 — ring or vertical list

+

The live question. Both forms carry the SAME map and the same invariant — fixed order, never + re-sorted, nothing compacted; only the geometry differs. Left-click selects; right-click opens the + offer. What the list buys: a disabled row can state its own reason in the words the product + already ships, where an empty slot in a ring is mute; nine sketch primitives fit without an + overflow; shortcuts line up in a readable column; long translated names fit; and it is navigable + by arrow key and by screen reader, which a radial is not. What it costs: no equidistant flick + gesture, and travel to the last row is longer than to the nearest direction. Pairs below — + list first, the same state as a ring second.

+ +

Decision 1 — ring capacity

+

The same three selections at eight and at twelve. Eight keeps 45° between neighbours, which is + the reliable eyes-free pointing threshold and maps 1:1 to the numpad; twelve buys direct addresses + for more verbs at 30° spacing and positions that stop being nameable.

+
8 slots — face_planar
8 slots — edge_str
8 slots — sk_line
+
12 slots — face_planar
12 slots — edge_str
12 slots — sk_line
+ +

Decision 2 — one map or one per mode

+

These renders use ONE shared map: sketch verbs occupy the same eight families as model verbs, + so dress-up is south-east whether you picked a solid edge or a sketch line. Compare the sketch-mode + states below against the model-mode ones — if a verb that exists in both modes ever appears at two + addresses, the shared map has failed and the split map is the answer.

+ +

The matrix — every selection, every document state

+
+ + +
SelectionDocumentVerbsSlots2nd ringsWhat lands where
Nothing selectedWorking document52/81create: Sketch · reference: Plane, Axis, Coord Sys, Helix
Planar faceWorking document188/86create: Sketch · add: Extrude, Thicken · remove: Hole, Shell · dressup: Fillet, Chamfer, Draft · repeat: Pattern · transform: Mate, Align to · reference: Plane, Axis, Coord Sys, Project, Measure · modify: Edit, Delete Face
Cylindrical faceWorking document63/82remove: Thread · reference: Axis, Helix, Measure · modify: Edit, Delete Face
Curved faceWorking document54/81add: Thicken · dressup: Draft · reference: Measure · modify: Edit, Delete Face
Straight edgeWorking document63/82dressup: Fillet, Chamfer · repeat: Pattern on Curve · reference: Plane, Axis, Measure
Circular edgeWorking document43/81remove: Thread · dressup: Fillet, Chamfer · reference: Measure
VertexWorking document41/81reference: Plane, Axis, Coord Sys, Measure
Solid bodyWorking document156/85remove: Shell, Cut, Split · dressup: Fillet, Chamfer · repeat: Pattern, Mirror, Pattern on Curve · transform: Move · reference: Project, Measure, Mass · modify: Edit, Colour, Delete
Sheet bodyWorking document75/81add: Thicken Surface · dressup: Surface Offset · transform: Move · reference: Measure · modify: Edit, Colour, Delete
Two bodiesWorking document54/81add: Combine · transform: Mate · reference: Measure, Interference · modify: Delete
Datum planeWorking document95/83create: Sketch · remove: Hole, Cut · repeat: Mirror · reference: Plane, Helix, Project · modify: Edit, Delete
Datum axisWorking document21/81modify: Edit, Delete
Coordinate systemWorking document32/81transform: Mate · modify: Edit, Delete
Text / imported artWorking document43/81repeat: Pattern · transform: Move · modify: Edit, Delete
Closed sketch loopWorking document113/82add: Extrude, Revolve, Sweep, Loft, Surface Extrude, Surface Revolve, Surface Loft, Surface Fill · repeat: Pattern · modify: Edit, Delete
Sketch, nothing pickedWorking document112/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction
Sketch lineWorking document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch arc or circleWorking document187/83create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch pointWorking document134/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete
Two sketch entitiesWorking document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Nothing selectedFresh document52/81create: Sketch · reference: Plane, Axis, Coord Sys, Helix
Planar faceFresh document74/81create: Sketch · add: Extrude · reference: Plane, Axis, Coord Sys, Measure · modify: Edit
Cylindrical faceFresh document42/81reference: Axis, Helix, Measure · modify: Edit
Curved faceFresh document22/80reference: Measure · modify: Edit
Straight edgeFresh document31/81reference: Plane, Axis, Measure
Circular edgeFresh document11/80reference: Measure
VertexFresh document41/81reference: Plane, Axis, Coord Sys, Measure
Solid bodyFresh document32/81reference: Measure · modify: Edit, Delete
Sheet bodyFresh document32/81reference: Measure · modify: Edit, Delete
Two bodiesFresh document22/80reference: Measure · modify: Delete
Datum planeFresh document53/82create: Sketch · reference: Plane, Helix · modify: Edit, Delete
Datum axisFresh document21/81modify: Edit, Delete
Coordinate systemFresh document21/81modify: Edit, Delete
Text / imported artFresh document21/81modify: Edit, Delete
Closed sketch loopFresh document72/82add: Extrude, Revolve, Surface Extrude, Surface Revolve, Surface Fill · modify: Edit, Delete
Sketch, nothing pickedFresh document112/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction
Sketch lineFresh document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch arc or circleFresh document187/83create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch pointFresh document134/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete
Two sketch entitiesFresh document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
+ +

Overflow — the one place eight slots is not enough

+

Measured, not predicted: the create sub-ring needs 10 addresses, so Polygon, Point are pushed behind a “More” slot. This is the decision the ring size actually turns on — either a verb moves to another family, or the tail goes to a third level, or the ring is not eight. It affects sketch mode only; every model-mode family fits.

+ +

Not in the offer

+

Import STEP, Import mesh, Text, SVG, Export STEP, Commit to Plate, Undo, Redo, Variables, Section view, Origin planes, World axes — these act on the document, not on a selection, + so they stay in chrome. Verbs with kernel support but no GUI today, which still hold an address: + Split, Pattern on Curve, Align to, Measure, Interference.

+ +

All states

+
Nothing selected — Working document
Nothing selected — Working document
Nothing selected — Reference ring
Nothing selected — Reference ring
Planar face — Working document
Planar face — Working document
Planar face — Add material ring
Planar face — Add material ring
Planar face — Remove ring
Planar face — Remove ring
Planar face — Dress-up ring
Planar face — Dress-up ring
Planar face — Transform ring
Planar face — Transform ring
Planar face — Reference ring
Planar face — Reference ring
Planar face — Modify ring
Planar face — Modify ring
Cylindrical face — Working document
Cylindrical face — Working document
Cylindrical face — Reference ring
Cylindrical face — Reference ring
Cylindrical face — Modify ring
Cylindrical face — Modify ring
Curved face — Working document
Curved face — Working document
Curved face — Modify ring
Curved face — Modify ring
Straight edge — Working document
Straight edge — Working document
Straight edge — Dress-up ring
Straight edge — Dress-up ring
Straight edge — Reference ring
Straight edge — Reference ring
Circular edge — Working document
Circular edge — Working document
Circular edge — Dress-up ring
Circular edge — Dress-up ring
Vertex — Working document
Vertex — Working document
Vertex — Reference ring
Vertex — Reference ring
Solid body — Working document
Solid body — Working document
Solid body — Remove ring
Solid body — Remove ring
Solid body — Dress-up ring
Solid body — Dress-up ring
Solid body — Repeat ring
Solid body — Repeat ring
Solid body — Reference ring
Solid body — Reference ring
Solid body — Modify ring
Solid body — Modify ring
Sheet body — Working document
Sheet body — Working document
Sheet body — Modify ring
Sheet body — Modify ring
Two bodies — Working document
Two bodies — Working document
Two bodies — Reference ring
Two bodies — Reference ring
Datum plane — Working document
Datum plane — Working document
Datum plane — Remove ring
Datum plane — Remove ring
Datum plane — Reference ring
Datum plane — Reference ring
Datum plane — Modify ring
Datum plane — Modify ring
Datum axis — Working document
Datum axis — Working document
Datum axis — Modify ring
Datum axis — Modify ring
Coordinate system — Working document
Coordinate system — Working document
Coordinate system — Modify ring
Coordinate system — Modify ring
Text / imported art — Working document
Text / imported art — Working document
Text / imported art — Modify ring
Text / imported art — Modify ring
Closed sketch loop — Working document
Closed sketch loop — Working document
Closed sketch loop — Add material ring
Closed sketch loop — Add material ring
Closed sketch loop — Modify ring
Closed sketch loop — Modify ring
Sketch, nothing picked — Working document
Sketch, nothing picked — Working document
Sketch, nothing picked — Create ring
Sketch, nothing picked — Create ring
Sketch, nothing picked — Reference ring
Sketch, nothing picked — Reference ring
Sketch line — Working document
Sketch line — Working document
Sketch line — Create ring
Sketch line — Create ring
Sketch line — Dress-up ring
Sketch line — Dress-up ring
Sketch line — Reference ring
Sketch line — Reference ring
Sketch line — Modify ring
Sketch line — Modify ring
Sketch arc or circle — Working document
Sketch arc or circle — Working document
Sketch arc or circle — Create ring
Sketch arc or circle — Create ring
Sketch arc or circle — Reference ring
Sketch arc or circle — Reference ring
Sketch arc or circle — Modify ring
Sketch arc or circle — Modify ring
Sketch point — Working document
Sketch point — Working document
Sketch point — Create ring
Sketch point — Create ring
Sketch point — Reference ring
Sketch point — Reference ring
Two sketch entities — Working document
Two sketch entities — Working document
Two sketch entities — Create ring
Two sketch entities — Create ring
Two sketch entities — Dress-up ring
Two sketch entities — Dress-up ring
Two sketch entities — Reference ring
Two sketch entities — Reference ring
Two sketch entities — Modify ring
Two sketch entities — Modify ring
Nothing selected — Fresh document
Nothing selected — Fresh document
Nothing selected — Reference ring
Nothing selected — Reference ring
Planar face — Fresh document
Planar face — Fresh document
Planar face — Reference ring
Planar face — Reference ring
Cylindrical face — Fresh document
Cylindrical face — Fresh document
Cylindrical face — Reference ring
Cylindrical face — Reference ring
Curved face — Fresh document
Curved face — Fresh document
Straight edge — Fresh document
Straight edge — Fresh document
Straight edge — Reference ring
Straight edge — Reference ring
Circular edge — Fresh document
Circular edge — Fresh document
Vertex — Fresh document
Vertex — Fresh document
Vertex — Reference ring
Vertex — Reference ring
Solid body — Fresh document
Solid body — Fresh document
Solid body — Modify ring
Solid body — Modify ring
Sheet body — Fresh document
Sheet body — Fresh document
Sheet body — Modify ring
Sheet body — Modify ring
Two bodies — Fresh document
Two bodies — Fresh document
Datum plane — Fresh document
Datum plane — Fresh document
Datum plane — Reference ring
Datum plane — Reference ring
Datum plane — Modify ring
Datum plane — Modify ring
Datum axis — Fresh document
Datum axis — Fresh document
Datum axis — Modify ring
Datum axis — Modify ring
Coordinate system — Fresh document
Coordinate system — Fresh document
Coordinate system — Modify ring
Coordinate system — Modify ring
Text / imported art — Fresh document
Text / imported art — Fresh document
Text / imported art — Modify ring
Text / imported art — Modify ring
Closed sketch loop — Fresh document
Closed sketch loop — Fresh document
Closed sketch loop — Add material ring
Closed sketch loop — Add material ring
Closed sketch loop — Modify ring
Closed sketch loop — Modify ring
Sketch, nothing picked — Fresh document
Sketch, nothing picked — Fresh document
Sketch, nothing picked — Create ring
Sketch, nothing picked — Create ring
Sketch, nothing picked — Reference ring
Sketch, nothing picked — Reference ring
Sketch line — Fresh document
Sketch line — Fresh document
Sketch line — Create ring
Sketch line — Create ring
Sketch line — Dress-up ring
Sketch line — Dress-up ring
Sketch line — Reference ring
Sketch line — Reference ring
Sketch line — Modify ring
Sketch line — Modify ring
Sketch arc or circle — Fresh document
Sketch arc or circle — Fresh document
Sketch arc or circle — Create ring
Sketch arc or circle — Create ring
Sketch arc or circle — Reference ring
Sketch arc or circle — Reference ring
Sketch arc or circle — Modify ring
Sketch arc or circle — Modify ring
Sketch point — Fresh document
Sketch point — Fresh document
Sketch point — Create ring
Sketch point — Create ring
Sketch point — Reference ring
Sketch point — Reference ring
Two sketch entities — Fresh document
Two sketch entities — Fresh document
Two sketch entities — Create ring
Two sketch entities — Create ring
Two sketch entities — Dress-up ring
Two sketch entities — Dress-up ring
Two sketch entities — Reference ring
Two sketch entities — Reference ring
Two sketch entities — Modify ring
Two sketch entities — Modify ring
+
diff --git a/docs/CAD/ux/offer_atlas_inline.html b/docs/CAD/ux/offer_atlas_inline.html new file mode 100644 index 0000000000..3bbfb1b303 --- /dev/null +++ b/docs/CAD/ux/offer_atlas_inline.html @@ -0,0 +1,77 @@ +Design tab — offer atlas + +
+

The offer — atlas of every state

+

Every state of the object-driven tool offer, generated from + docs/ux/tool_atlas.json. The invariant under test: a verb has one address, that + address is the same in every selection where it appears, and slots that do not apply are drawn + empty rather than compacted.

+
+
60verbs mapped
+
20selection kinds
+
40primary rings
+
73secondary rings
+
113states total
+
3.5/8mean slots filled
+
5verbs with no GUI yet
+
+
+
+

Decision 0 — ring or vertical list

+

The live question. Both forms carry the SAME map and the same invariant — fixed order, never + re-sorted, nothing compacted; only the geometry differs. Left-click selects; right-click opens the + offer. What the list buys: a disabled row can state its own reason in the words the product + already ships, where an empty slot in a ring is mute; nine sketch primitives fit without an + overflow; shortcuts line up in a readable column; long translated names fit; and it is navigable + by arrow key and by screen reader, which a radial is not. What it costs: no equidistant flick + gesture, and travel to the last row is longer than to the nearest direction. Pairs below — + list first, the same state as a ring second.

+ +

Decision 1 — ring capacity

+

The same three selections at eight and at twelve. Eight keeps 45° between neighbours, which is + the reliable eyes-free pointing threshold and maps 1:1 to the numpad; twelve buys direct addresses + for more verbs at 30° spacing and positions that stop being nameable.

+
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
8 slots — face_planar
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 8 slotsDress-up2Pattern on CurveReference3Straight edge
8 slots — edge_str
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line
8 slots — sk_line
+
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 12 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
12 slots — face_planar
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 12 slotsDress-up2Pattern on CurveReference3Straight edge
12 slots — edge_str
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 12 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line
12 slots — sk_line
+ +

Decision 2 — one map or one per mode

+

These renders use ONE shared map: sketch verbs occupy the same eight families as model verbs, + so dress-up is south-east whether you picked a solid edge or a sketch line. Compare the sketch-mode + states below against the model-mode ones — if a verb that exists in both modes ever appears at two + addresses, the shared map has failed and the split map is the answer.

+ +

The matrix — every selection, every document state

+
+ + +
SelectionDocumentVerbsSlots2nd ringsWhat lands where
Nothing selectedWorking document52/81create: Sketch · reference: Plane, Axis, Coord Sys, Helix
Planar faceWorking document188/86create: Sketch · add: Extrude, Thicken · remove: Hole, Shell · dressup: Fillet, Chamfer, Draft · repeat: Pattern · transform: Mate, Align to · reference: Plane, Axis, Coord Sys, Project, Measure · modify: Edit, Delete Face
Cylindrical faceWorking document63/82remove: Thread · reference: Axis, Helix, Measure · modify: Edit, Delete Face
Curved faceWorking document54/81add: Thicken · dressup: Draft · reference: Measure · modify: Edit, Delete Face
Straight edgeWorking document63/82dressup: Fillet, Chamfer · repeat: Pattern on Curve · reference: Plane, Axis, Measure
Circular edgeWorking document43/81remove: Thread · dressup: Fillet, Chamfer · reference: Measure
VertexWorking document41/81reference: Plane, Axis, Coord Sys, Measure
Solid bodyWorking document156/85remove: Shell, Cut, Split · dressup: Fillet, Chamfer · repeat: Pattern, Mirror, Pattern on Curve · transform: Move · reference: Project, Measure, Mass · modify: Edit, Colour, Delete
Sheet bodyWorking document75/81add: Thicken Surface · dressup: Surface Offset · transform: Move · reference: Measure · modify: Edit, Colour, Delete
Two bodiesWorking document54/81add: Combine · transform: Mate · reference: Measure, Interference · modify: Delete
Datum planeWorking document95/83create: Sketch · remove: Hole, Cut · repeat: Mirror · reference: Plane, Helix, Project · modify: Edit, Delete
Datum axisWorking document21/81modify: Edit, Delete
Coordinate systemWorking document32/81transform: Mate · modify: Edit, Delete
Text / imported artWorking document43/81repeat: Pattern · transform: Move · modify: Edit, Delete
Closed sketch loopWorking document113/82add: Extrude, Revolve, Sweep, Loft, Surface Extrude, Surface Revolve, Surface Loft, Surface Fill · repeat: Pattern · modify: Edit, Delete
Sketch, nothing pickedWorking document112/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction
Sketch lineWorking document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch arc or circleWorking document187/83create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch pointWorking document134/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete
Two sketch entitiesWorking document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Nothing selectedFresh document52/81create: Sketch · reference: Plane, Axis, Coord Sys, Helix
Planar faceFresh document74/81create: Sketch · add: Extrude · reference: Plane, Axis, Coord Sys, Measure · modify: Edit
Cylindrical faceFresh document42/81reference: Axis, Helix, Measure · modify: Edit
Curved faceFresh document22/80reference: Measure · modify: Edit
Straight edgeFresh document31/81reference: Plane, Axis, Measure
Circular edgeFresh document11/80reference: Measure
VertexFresh document41/81reference: Plane, Axis, Coord Sys, Measure
Solid bodyFresh document32/81reference: Measure · modify: Edit, Delete
Sheet bodyFresh document32/81reference: Measure · modify: Edit, Delete
Two bodiesFresh document22/80reference: Measure · modify: Delete
Datum planeFresh document53/82create: Sketch · reference: Plane, Helix · modify: Edit, Delete
Datum axisFresh document21/81modify: Edit, Delete
Coordinate systemFresh document21/81modify: Edit, Delete
Text / imported artFresh document21/81modify: Edit, Delete
Closed sketch loopFresh document72/82add: Extrude, Revolve, Surface Extrude, Surface Revolve, Surface Fill · modify: Edit, Delete
Sketch, nothing pickedFresh document112/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · reference: Dimension, Construction
Sketch lineFresh document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch arc or circleFresh document187/83create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
Sketch pointFresh document134/82create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · transform: Move · reference: Dimension, Constrain · modify: Delete
Two sketch entitiesFresh document208/84create: Line, Rectangle, Circle, Arc, Slot, Ellipse, Spline, Polygon, Point · add: Offset · remove: Trim · dressup: Fillet, Chamfer · repeat: Mirror · transform: Move · reference: Dimension, Constrain, Construction · modify: Extend, Delete
+ +

Overflow — the one place eight slots is not enough

+

Measured, not predicted: the create sub-ring needs 10 addresses, so Polygon, Point are pushed behind a “More” slot. This is the decision the ring size actually turns on — either a verb moves to another family, or the tail goes to a third level, or the ring is not eight. It affects sketch mode only; every model-mode family fits.

+ +

Not in the offer

+

Import STEP, Import mesh, Text, SVG, Export STEP, Commit to Plate, Undo, Redo, Variables, Section view, Origin planes, World axes — these act on the document, not on a selection, + so they stay in chrome. Verbs with kernel support but no GUI today, which still hold an address: + Split, Pattern on Curve, Align to, Measure, Interference.

+ +

The states

+
PreparePreviewDesignFEATURESnothing yetClick a face or a reference plane, then a toolFresh document · 8 slotsSketchShift+SReference4Nothing selected
Fresh document, nothing selected — the first-run picture
PreparePreviewDesignFEATURESnothing yetRight-click the geometry to see what you can do with itFresh document · vertical listNOTHING SELECTEDSketchShift+SAdd materialCreate a sketch, or pick a solid face, firstRemovePick a face or a plane to drill intoDress-upPick an edge to roundRepeatCreate a solid body to pattern firstTransformTransform needs a body — add or import one firstReference4ModifyDelete Face needs a body — add or import one first
LIST · fresh document — every family present, the unavailable ones say why
PreparePreviewDesignFEATURESnothing yetClick a face or a reference plane, then a toolFresh document · 8 slotsSketchShift+SReference4Nothing selected
RING · the same state — an empty slot cannot say anything
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listPLANAR FACESketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2
LIST · planar face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
RING · planar face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch, nothing picked — pick oneWorking document · vertical listSKETCH, NOTHING PICKEDCreate9Add materialRemoveDress-upRepeatTransformReference2ModifyLineLRectangleRCircleCArcASlotSEllipseESplineBPolygonGPointP
LIST · sketch Create submenu — all 9 primitives fit, no overflow
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch, nothing picked · Create
RING · the same submenu — 2 verbs pushed behind “More”
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face — pick oneWorking document · vertical listPLANAR FACESketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2ExtrudeShift+EThicken
LIST · planar face, Add material submenu
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Add material — pick oneWorking document · 8 slotsExtrudeShift+EThickenPlanar face · Add material
RING · planar face, Add material sub-ring
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSOLID BODYCreateClick a face or a reference plane in the viewport, t…Add materialCreate a sketch, or pick a solid face, firstRemove3Dress-up2Repeat3MoveShift+YReference3Modify3
LIST · solid body
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSTRAIGHT EDGECreateClick a face or a reference plane in the viewport, t…Add materialCreate a sketch, or pick a solid face, firstRemovePick a face or a plane to drill intoDress-up2Pattern on CurveTransformTransform needs a body — add or import one firstReference3ModifyDelete Face needs a body — add or import one first
LIST · straight edge
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Right-click the geometry to see what you can do with itWorking document · vertical listSKETCH LINECreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2
LIST · sketch line
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Click a face or a reference plane, then a toolWorking document · 8 slotsSketchShift+SReference4Nothing selected
RING · Nothing selected
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
RING · Planar face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Cylindrical face selected — pick what to do with itWorking document · 8 slotsThreadShift+TReference3Modify2Cylindrical face
RING · Cylindrical face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Curved face selected — pick what to do with itWorking document · 8 slotsThickenDraftShift+DMeasureModify2Curved face
RING · Curved face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Straight edge selected — pick what to do with itWorking document · 8 slotsDress-up2Pattern on CurveReference3Straight edge
RING · Straight edge
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Circular edge selected — pick what to do with itWorking document · 8 slotsThreadShift+TDress-up2MeasureCircular edge
RING · Circular edge
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Vertex selected — pick what to do with itWorking document · 8 slotsReference4Vertex
RING · Vertex
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Solid body selected — pick what to do with itWorking document · 8 slotsRemove3Dress-up2Repeat3MoveShift+YReference3Modify3Solid body
RING · Solid body
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sheet body selected — pick what to do with itWorking document · 8 slotsThicken SurfaceSurface OffsetMoveShift+YMeasureModify3Sheet body
RING · Sheet body
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Two bodies selected — pick what to do with itWorking document · 8 slotsCombineShift+BMateReference2DeleteDelTwo bodies
RING · Two bodies
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Datum plane selected — pick what to do with itWorking document · 8 slotsSketchShift+SRemove2MirrorShift+ZReference3Modify2Datum plane
RING · Datum plane
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Datum axis selected — pick what to do with itWorking document · 8 slotsModify2Datum axis
RING · Datum axis
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Coordinate system selected — pick what to do with itWorking document · 8 slotsMateModify2Coordinate system
RING · Coordinate system
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Text / imported art selected — pick what to do with itWorking document · 8 slotsABCPatternShift+NMoveShift+YModify2Text / imported art
RING · Text / imported art
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Closed sketch loop selected — pick what to do with itWorking document · 8 slotsAdd material8PatternShift+NModify2Closed sketch loop
RING · Closed sketch loop
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch, nothing picked selected — pick what to do with itWorking document · 8 slotsCreate9Reference2Sketch, nothing picked
RING · Sketch, nothing picked
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line
RING · Sketch line
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch arc or circle selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTMirrorMMoveReference3Modify2Sketch arc or circle
RING · Sketch arc or circle
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch point selected — pick what to do with itWorking document · 8 slotsCreate9MoveReference2DeleteDelSketch point
RING · Sketch point
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Two sketch entities selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Two sketch entities
RING · Two sketch entities
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Add material — pick oneWorking document · 8 slotsExtrudeShift+EThickenPlanar face · Add material
Planar face · Add material sub-ring
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Reference — pick oneWorking document · 8 slotsCoord SysShift+CProjectMeasurePlaneShift+PAxisShift+APlanar face · Reference
Planar face · Reference sub-ring
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Create — pick oneWorking document · 8 slotsLineLRectangleRCircleCArcASlotSEllipseESplineBMore2Sketch, nothing picked · Create
Sketch · Create sub-ring (the overflow case)
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Remove — pick oneWorking document · 8 slotsShellShift+KCutShift+XSplitSolid body · Remove
Solid body · Remove sub-ring
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 8 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
8 slots — planar face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Planar face selected — pick what to do with itWorking document · 12 slotsSketchShift+SAdd material2Remove2Dress-up3PatternShift+NTransform2Reference5Modify2Planar face
12 slots — planar face
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 8 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line
8 slots — sketch line
PreparePreviewDesignFEATURESSketch1Extrude1Hole1Fillet1Sketch2Extrude2Sketch line selected — pick what to do with itWorking document · 12 slotsCreate9OffsetOTrimTDress-up2MirrorMMoveReference3Modify2Sketch line
12 slots — sketch line
diff --git a/docs/CAD/ux/tool_atlas.json b/docs/CAD/ux/tool_atlas.json new file mode 100644 index 0000000000..94709f2057 --- /dev/null +++ b/docs/CAD/ux/tool_atlas.json @@ -0,0 +1,2213 @@ +{ + "_comment": [ + "Source of truth for the object-driven tool offer (see docs/cad_ux_guidelines.md 4.1).", + "Every verb, the selections it accepts, the document state it needs, and its fixed", + "compass address. Extracted from the code, not from memory:", + " verbs + shortcuts + refusal messages -> src/slic3r/GUI/CAD/DesignPanel.cpp (feat_dropdown", + " call sites at 524/662/734/790/874/904, sk_key table at 369-400, m_keys_feature)", + " kernel coverage -> src/libslic3r/CAD/CadDocument.hpp (enum CadFeatureType)", + " headless coverage -> src/slic3r/GUI/CAD/McpControl.cpp (method == \"...\")", + " selection kinds -> src/slic3r/GUI/CAD/DesignCanvas.hpp (the on_*_selected callbacks)", + "gen_offer_mockups.py reads this file; the eventual C++ offer table is generated from it", + "too, so the map exists once." + ], + "slots": [ + { + "id": "create", + "pos": "N", + "angle": 270, + "label": "Create", + "why": "makes new geometry from nothing you have yet" + }, + { + "id": "add", + "pos": "NE", + "angle": 315, + "label": "Add material", + "why": "grows solid or sheet material" + }, + { + "id": "remove", + "pos": "E", + "angle": 0, + "label": "Remove", + "why": "takes material away Shell lives here by decision of 2026-08-01, not by oversight." + }, + { + "id": "dressup", + "pos": "SE", + "angle": 45, + "label": "Fillet / chamfer / draft", + "why": "finishes faces and edges without changing the shape's intent; named for the tools it holds, not for the trade word. RATIFIED 2026-08-01: Shell stays in Remove and Delete Face in Modify — this row is deliberately NOT the same set as the toolbar's dressup dropdown, which groups all five. Shell hollows a solid, so it belongs with the verbs that take material away. Do not re-open: a verb's row is its address and reordering breaks learned reach." + }, + { + "id": "repeat", + "pos": "S", + "angle": 90, + "label": "Repeat", + "why": "copies what exists" + }, + { + "id": "transform", + "pos": "SW", + "angle": 135, + "label": "Transform", + "why": "moves without changing shape" + }, + { + "id": "reference", + "pos": "W", + "angle": 180, + "label": "Reference", + "why": "makes datums, curves and measurements" + }, + { + "id": "modify", + "pos": "NW", + "angle": 225, + "label": "Modify", + "why": "edits or removes what is already there" + } + ], + "selections": [ + { + "id": "none", + "name": "Nothing selected", + "mode": "model", + "shape": "empty" + }, + { + "id": "face_planar", + "name": "Planar face", + "mode": "model", + "shape": "box_top" + }, + { + "id": "face_cyl", + "name": "Cylindrical face", + "mode": "model", + "shape": "box_bore" + }, + { + "id": "face_other", + "name": "Curved face", + "mode": "model", + "shape": "box_fillet_face" + }, + { + "id": "edge_str", + "name": "Straight edge", + "mode": "model", + "shape": "box_edge" + }, + { + "id": "edge_circ", + "name": "Circular edge", + "mode": "model", + "shape": "box_bore_rim" + }, + { + "id": "vertex", + "name": "Vertex", + "mode": "model", + "shape": "box_vertex" + }, + { + "id": "body_solid", + "name": "Solid body", + "mode": "model", + "shape": "box_whole" + }, + { + "id": "body_sheet", + "name": "Sheet body", + "mode": "model", + "shape": "sheet" + }, + { + "id": "bodies_2", + "name": "Two bodies", + "mode": "model", + "shape": "two_boxes" + }, + { + "id": "datum_plane", + "name": "Datum plane", + "mode": "model", + "shape": "datum" + }, + { + "id": "datum_axis", + "name": "Datum axis", + "mode": "model", + "shape": "axis" + }, + { + "id": "coordsys", + "name": "Coordinate system", + "mode": "model", + "shape": "csys" + }, + { + "id": "art", + "name": "Text / imported art", + "mode": "model", + "shape": "art" + }, + { + "id": "sk_loop", + "name": "Closed sketch loop", + "mode": "model", + "shape": "loop" + }, + { + "id": "sk_none", + "name": "Sketch, nothing picked", + "mode": "sketch", + "shape": "sk_empty" + }, + { + "id": "sk_line", + "name": "Sketch line", + "mode": "sketch", + "shape": "sk_line" + }, + { + "id": "sk_arc", + "name": "Sketch arc or circle", + "mode": "sketch", + "shape": "sk_arc" + }, + { + "id": "sk_point", + "name": "Sketch point", + "mode": "sketch", + "shape": "sk_point" + }, + { + "id": "sk_2ent", + "name": "Two sketch entities", + "mode": "sketch", + "shape": "sk_two" + } + ], + "doc_states": [ + { + "id": "rich", + "name": "Working document", + "bodies": 2, + "sketches": 2, + "sheet": true, + "note": "two solids, two sketches, one sheet body — everything doc-gated is legal" + }, + { + "id": "fresh", + "name": "Fresh document", + "bodies": 0, + "sketches": 0, + "sheet": false, + "note": "nothing built yet — shows how much of the ring is empty on first open" + } + ], + "verbs": [ + { + "id": "sketch", + "name": "Sketch", + "slot": "create", + "key": "Shift+S", + "feature": "Sketch", + "mcp": null, + "accepts": [ + "face_planar", + "datum_plane", + "none" + ], + "needs": {}, + "refusal": "Click a face or a reference plane in the viewport, then a sketch tool", + "gui": true, + "action": "key:S+S", + "icon": "design_sketch", + "hint": "Click a face or a reference plane, then pick a drawing tool" + }, + { + "id": "extrude", + "name": "Extrude", + "slot": "add", + "key": "Shift+E", + "feature": "Extrude", + "mcp": "extrude", + "accepts": [ + "sk_loop", + "face_planar" + ], + "needs": {}, + "refusal": "Create a sketch, or pick a solid face, first", + "gui": true, + "action": "key:S+E", + "icon": "design_extrude", + "hint": "Extrude a sketch profile, or push/pull a picked face" + }, + { + "id": "revolve", + "name": "Revolve", + "slot": "add", + "key": "Shift+R", + "feature": "Revolve", + "mcp": "revolve", + "accepts": [ + "sk_loop" + ], + "needs": {}, + "refusal": "Create a sketch profile to revolve first", + "gui": true, + "action": "key:S+R", + "icon": "design_revolve", + "hint": "Revolve a profile about an axis" + }, + { + "id": "sweep", + "name": "Sweep", + "slot": "add", + "key": "Shift+W", + "feature": "Sweep", + "mcp": null, + "accepts": [ + "sk_loop" + ], + "needs": { + "sketches": 2 + }, + "refusal": "Create a profile sketch to sweep first", + "gui": true, + "action": "key:S+W", + "icon": "design_sweep", + "hint": "Sweep a profile along a path" + }, + { + "id": "loft", + "name": "Loft", + "slot": "add", + "key": "Shift+L", + "feature": "Loft", + "mcp": null, + "accepts": [ + "sk_loop" + ], + "needs": { + "sketches": 2 + }, + "refusal": "Create at least two profile sketches to loft", + "gui": true, + "action": "key:S+L", + "icon": "design_loft", + "hint": "Loft (skin) between two or more profiles" + }, + { + "id": "thicken", + "name": "Thicken", + "slot": "add", + "key": null, + "feature": "Thicken", + "mcp": "thicken", + "accepts": [ + "face_planar", + "face_other" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Thicken needs a solid body — add or import one first", + "gui": true, + "action": "fly:material#4", + "icon": "design_thicken", + "hint": "Offset a solid face into a thin plate (new body)" + }, + { + "id": "rib", + "name": "Rib", + "slot": "add", + "key": null, + "feature": "Rib", + "mcp": "rib", + "accepts": [ + "sk_line" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Rib needs a solid body — add or import one first", + "gui": true, + "action": "fly:material#5", + "icon": "design_rib", + "hint": "Grow a thin wall from an open sketch line, fused to a body" + }, + { + "id": "boolean", + "name": "Union", + "slot": "add", + "key": "Shift+B", + "feature": "Boolean", + "mcp": "boolean", + "accepts": [ + "bodies_2" + ], + "needs": { + "bodies": 2 + }, + "refusal": "Boolean needs two bodies — create or import a second solid", + "gui": true, + "action": "btn:bool#0", + "icon": "design_boolean", + "hint": "Fuse the tool body into the target — one solid, no seam" + }, + { + "id": "bool_subtract", + "name": "Subtract", + "slot": "add", + "key": null, + "feature": "Boolean", + "mcp": null, + "accepts": [ + "bodies_2" + ], + "needs": { + "bodies": 2 + }, + "refusal": "Boolean needs two bodies — create or import a second solid", + "gui": true, + "action": "btn:bool#1", + "mode": null, + "icon": "design_boolean", + "hint": "Cut the tool body out of the target" + }, + { + "id": "bool_intersect", + "name": "Intersect", + "slot": "add", + "key": null, + "feature": "Boolean", + "mcp": null, + "accepts": [ + "bodies_2" + ], + "needs": { + "bodies": 2 + }, + "refusal": "Boolean needs two bodies — create or import a second solid", + "gui": true, + "action": "btn:bool#2", + "mode": null, + "icon": "design_boolean", + "hint": "Keep only where the two bodies overlap" + }, + { + "id": "surf_extrude", + "name": "Surface Extrude", + "slot": "add", + "key": "Shift+G", + "feature": "SurfaceExtrude", + "mcp": "surface_extrude", + "accepts": [ + "sk_loop" + ], + "needs": {}, + "refusal": "Create a sketch first", + "gui": true, + "action": "key:S+G", + "icon": "design_extrude", + "hint": "Extrude a sketch into a sheet body (no end caps)" + }, + { + "id": "surf_revolve", + "name": "Surface Revolve", + "slot": "add", + "key": null, + "feature": "SurfaceRevolve", + "mcp": "surface_revolve", + "accepts": [ + "sk_loop" + ], + "needs": {}, + "refusal": "Create a sketch profile to revolve first", + "gui": true, + "action": "fly:surface#1", + "icon": "design_revolve", + "hint": "Revolve a sketch profile into a sheet body" + }, + { + "id": "surf_loft", + "name": "Surface Loft", + "slot": "add", + "key": null, + "feature": "SurfaceLoft", + "mcp": "surface_loft", + "accepts": [ + "sk_loop" + ], + "needs": { + "sketches": 2 + }, + "refusal": "Create at least two profile sketches to loft", + "gui": true, + "action": "fly:surface#2", + "icon": "design_loft", + "hint": "Loft (skin) between 2+ profiles, open (no end caps)" + }, + { + "id": "surf_fill", + "name": "Surface Fill", + "slot": "add", + "key": null, + "feature": "SurfaceFill", + "mcp": "surface_fill", + "accepts": [ + "sk_loop" + ], + "needs": {}, + "refusal": "Create a closed sketch first", + "gui": true, + "action": "fly:surface#3", + "icon": "design_surface", + "hint": "Fill a sketch boundary with a smooth face" + }, + { + "id": "thicken_surf", + "name": "Thicken Surface", + "slot": "add", + "key": null, + "feature": "ThickenSurface", + "mcp": "thicken_surface", + "accepts": [ + "body_sheet" + ], + "needs": { + "sheet": true + }, + "refusal": "target is not a sheet body", + "gui": true, + "action": "fly:surface#5", + "icon": "design_thicken", + "hint": "Thicken a sheet body into a solid" + }, + { + "id": "hole", + "name": "Hole", + "slot": "remove", + "key": "Shift+H", + "feature": "Hole", + "mcp": "hole", + "accepts": [ + "face_planar", + "datum_plane" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pick a face or a plane to drill into", + "gui": true, + "action": "key:S+H", + "icon": "design_hole", + "hint": "Drill a hole, centred on a picked face or placed on a plane" + }, + { + "id": "thread", + "name": "Thread", + "slot": "remove", + "key": "Shift+T", + "feature": "Thread", + "mcp": null, + "accepts": [ + "face_cyl", + "edge_circ" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pick a cylindrical surface (bore / outer) or a circular edge for a thread", + "gui": true, + "action": "key:S+T", + "icon": "design_thread", + "hint": "Thread a cylindrical surface (inner bore / outer) or a circular edge" + }, + { + "id": "shell", + "name": "Shell", + "slot": "remove", + "key": "Shift+K", + "feature": "Shell", + "mcp": "shell", + "accepts": [ + "face_planar", + "body_solid" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Shell needs a solid body", + "gui": true, + "action": "key:S+K", + "icon": "design_shell", + "hint": "Hollow the body to a wall thickness, opening a picked face" + }, + { + "id": "cut", + "name": "Cut", + "slot": "remove", + "key": "Shift+X", + "feature": "Cut", + "mcp": null, + "accepts": [ + "body_solid", + "datum_plane", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Create a solid body to cut first", + "gui": true, + "action": "key:S+X", + "icon": "design_cut", + "hint": "Trim the body with a plane — drag the offset arrow; keep one half or both" + }, + { + "id": "split", + "name": "Split", + "slot": "remove", + "key": null, + "feature": "Cut", + "mcp": "split", + "accepts": [ + "body_solid", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Split needs a solid body", + "gui": false, + "action": null, + "icon": null, + "hint": "Split the body along a picked face into two solids" + }, + { + "id": "fillet", + "name": "Fillet", + "slot": "dressup", + "key": "Shift+F", + "feature": "Fillet", + "mcp": "fillet", + "accepts": [ + "edge_str", + "edge_circ", + "face_planar", + "body_solid" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pick an edge to round", + "gui": true, + "action": "btn:dress#0", + "icon": "design_filletedge", + "hint": "Pick an edge, then drag the radius arrow or type it" + }, + { + "id": "chamfer", + "name": "Chamfer", + "slot": "dressup", + "key": null, + "feature": "Chamfer", + "mcp": "chamfer", + "accepts": [ + "edge_str", + "edge_circ", + "face_planar", + "body_solid" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pick an edge to bevel", + "gui": true, + "action": "btn:dress#1", + "icon": "design_chamfer", + "hint": "Pick an edge, then drag the distance arrow or type it" + }, + { + "id": "draft", + "name": "Draft", + "slot": "dressup", + "key": "Shift+D", + "feature": "Draft", + "mcp": "draft", + "accepts": [ + "face_planar", + "face_other" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pick a face to taper", + "gui": true, + "action": "key:S+D", + "icon": "design_draft", + "hint": "Tilt a picked face by a draft angle" + }, + { + "id": "surf_offset", + "name": "Surface Offset", + "slot": "dressup", + "key": null, + "feature": "SurfaceOffset", + "mcp": "surface_offset", + "accepts": [ + "body_sheet" + ], + "needs": { + "sheet": true + }, + "refusal": "target is not a sheet body", + "gui": true, + "action": "fly:surface#4", + "icon": "design_offset", + "hint": "Offset a sheet body's shell by a signed distance" + }, + { + "id": "pattern", + "name": "Linear pattern", + "slot": "repeat", + "key": "Shift+N", + "feature": "Pattern", + "mcp": "pattern", + "accepts": [ + "body_solid", + "face_planar", + "sk_loop", + "art" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Create a solid body to pattern first", + "gui": true, + "action": "btn:pat#0", + "icon": "design_array", + "hint": "Repeat the body along a direction — drag the spacing, set the count" + }, + { + "id": "pattern_circular", + "name": "Circular pattern", + "slot": "repeat", + "key": null, + "feature": "Pattern", + "mcp": null, + "accepts": [ + "body_solid", + "face_planar", + "sk_loop", + "art" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Create a solid body to pattern first", + "gui": true, + "action": "btn:pat#1", + "mode": null, + "icon": "design_polararray", + "hint": "Repeat the body around an axis — set the count and sweep" + }, + { + "id": "mirror", + "name": "Mirror", + "slot": "repeat", + "key": "Shift+Z", + "feature": "Mirror", + "mcp": "mirror", + "accepts": [ + "body_solid", + "datum_plane", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Mirror needs a body — add or import one first", + "gui": true, + "action": "key:S+Z", + "icon": "design_mirror", + "hint": "Reflect a body about a plane" + }, + { + "id": "pat_curve", + "name": "Pattern on Curve", + "slot": "repeat", + "key": null, + "feature": "Pattern", + "mcp": "pattern_on_curve", + "accepts": [ + "body_solid", + "edge_str" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Pattern on curve needs a body and a curve", + "gui": false, + "action": null, + "icon": null, + "hint": "Repeat the body along a picked curve" + }, + { + "id": "transform", + "name": "Move", + "slot": "transform", + "key": "Shift+Y", + "feature": "Transform", + "mcp": "transform", + "accepts": [ + "body_solid", + "body_sheet", + "art", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Transform needs a body — add or import one first", + "gui": true, + "action": "key:S+Y", + "icon": "design_move", + "hint": "Move and/or rotate an existing body" + }, + { + "id": "mate", + "name": "Mate", + "slot": "transform", + "key": null, + "feature": "Mate", + "mcp": "mate", + "accepts": [ + "coordsys", + "bodies_2", + "face_planar" + ], + "needs": { + "bodies": 2 + }, + "refusal": "A mate needs two coordinate systems", + "gui": true, + "action": "fly:placement#2", + "icon": "design_c_coincident", + "hint": "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)" + }, + { + "id": "align", + "name": "Align to", + "slot": "transform", + "key": null, + "feature": "Transform", + "mcp": "transform", + "accepts": [ + "face_planar" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Align needs a body", + "gui": false, + "action": null, + "icon": null, + "hint": "Align the body to a picked face or plane" + }, + { + "id": "plane", + "name": "Plane", + "slot": "reference", + "key": "Shift+P", + "feature": "Plane", + "mcp": null, + "accepts": [ + "none", + "face_planar", + "edge_str", + "datum_plane", + "vertex" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:S+P", + "icon": "design_plane", + "hint": "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)" + }, + { + "id": "axis", + "name": "Axis", + "slot": "reference", + "key": "Shift+A", + "feature": "Axis", + "mcp": "axis", + "accepts": [ + "none", + "face_planar", + "face_cyl", + "edge_str", + "vertex" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:S+A", + "icon": "design_line", + "hint": "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)" + }, + { + "id": "coordsys_v", + "name": "Coord Sys", + "slot": "reference", + "key": "Shift+C", + "feature": "CoordSys", + "mcp": "coordsys", + "accepts": [ + "none", + "face_planar", + "vertex" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:S+C", + "icon": "design_point", + "hint": "Datum coordinate system (world point, or face + direction edge)" + }, + { + "id": "helix", + "name": "Helix", + "slot": "reference", + "key": null, + "feature": "Helix", + "mcp": "helix", + "accepts": [ + "none", + "datum_plane", + "face_cyl" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:plane#3", + "icon": "design_thread", + "hint": "Helical curve (spring path) — use as a sweep path for coils / springs / augers" + }, + { + "id": "project", + "name": "Project", + "slot": "reference", + "key": null, + "feature": "Project", + "mcp": "project", + "accepts": [ + "body_solid", + "face_planar", + "datum_plane" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Project needs a body — add or import one first", + "gui": true, + "action": "fly:plane#4", + "icon": "design_sketch", + "hint": "Project body edges onto a plane as sketch entities" + }, + { + "id": "measure", + "name": "Measure", + "slot": "reference", + "key": null, + "feature": null, + "mcp": "measure", + "accepts": [ + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex", + "body_solid", + "body_sheet", + "bodies_2", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": false, + "action": null, + "icon": null, + "hint": "Measure between the picked points, edges or faces" + }, + { + "id": "mass_props", + "name": "Mass", + "slot": "reference", + "key": null, + "feature": null, + "mcp": "mass_properties", + "accepts": [ + "body_solid", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": null, + "gui": true, + "action": "btn:mass", + "icon": "info", + "hint": "Report the volume and surface area of the selected body" + }, + { + "id": "interference", + "name": "Interference", + "slot": "reference", + "key": null, + "feature": null, + "mcp": "check_interference", + "accepts": [ + "bodies_2" + ], + "needs": { + "bodies": 2 + }, + "refusal": null, + "gui": false, + "action": null, + "icon": null, + "hint": "Check whether two bodies overlap — reports, changes nothing" + }, + { + "id": "edit_feature", + "name": "Edit", + "slot": "modify", + "key": null, + "feature": null, + "mcp": "set_feature_expr", + "accepts": [ + "body_solid", + "face_planar", + "face_cyl", + "face_other", + "sk_loop", + "art", + "datum_plane", + "datum_axis", + "coordsys", + "body_sheet" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:edit", + "icon": "design_edit", + "hint": "Reopen the selected feature to change what it was made from" + }, + { + "id": "rename", + "name": "Rename…", + "slot": "modify", + "key": "F2", + "feature": "Tree", + "mcp": null, + "mode": "model", + "accepts": [ + "sk_loop", + "body_solid" + ], + "needs": {}, + "refusal": "Select a feature, or a body, to rename it", + "gui": true, + "action": "btn:rename", + "icon": null, + "hint": "Give this feature a name you will recognise in the tree (a body takes its name from the feature that makes it)" + }, + { + "id": "delete_face", + "name": "Delete Face", + "slot": "modify", + "key": null, + "feature": "DeleteFace", + "mcp": "delete_face", + "accepts": [ + "face_planar", + "face_cyl", + "face_other" + ], + "needs": { + "bodies": 1 + }, + "refusal": "Delete Face needs a body — add or import one first", + "gui": true, + "action": "fly:dressup#3", + "icon": "design_delete", + "hint": "Remove faces from a body and heal the solid" + }, + { + "id": "colour", + "name": "Colour", + "slot": "modify", + "key": null, + "feature": null, + "mcp": null, + "accepts": [ + "body_solid", + "body_sheet", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "refusal": null, + "gui": true, + "action": "btn:colour", + "icon": "color_palette", + "hint": "Set the selected body's display colour" + }, + { + "id": "delete", + "name": "Delete", + "slot": "modify", + "key": "Del", + "feature": null, + "mcp": null, + "accepts": [ + "sk_loop", + "art", + "datum_plane", + "datum_axis", + "coordsys", + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:delete", + "icon": "design_delete", + "hint": "Delete what is selected" + }, + { + "id": "delete_body", + "name": "Delete Body", + "slot": "modify", + "key": null, + "action": "btn:delete_body", + "refusal": null, + "accepts": [ + "body_solid", + "body_sheet", + "face_planar", + "face_cyl", + "face_other", + "edge_str", + "edge_circ", + "vertex" + ], + "needs": { + "bodies": 1 + }, + "mode": "model", + "family": null, + "icon": "design_delete", + "hint": "Delete this whole body — removes the feature it was made from" + }, + { + "id": "sk_line_t", + "name": "Line", + "slot": "create", + "key": "L", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:L", + "family": "Line", + "icon": "design_line", + "hint": "Line — click start, then end" + }, + { + "id": "sk_polyline", + "name": "Polyline", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_line#1", + "mode": "sketch", + "family": "Line", + "icon": "design_polyline", + "hint": "Click points; click the first point to close the loop, right-click to end it open" + }, + { + "id": "sk_rect", + "name": "Corner rectangle", + "slot": "create", + "key": "R", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:R", + "family": "Rectangle", + "icon": "design_rect", + "hint": "Rectangle — click two opposite corners" + }, + { + "id": "sk_rect_center", + "name": "Centre rectangle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_rect#1", + "mode": "sketch", + "family": "Rectangle", + "icon": "design_crect", + "hint": "Click center, then a corner" + }, + { + "id": "sk_rect_oblique", + "name": "Oblique rectangle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_rect#2", + "mode": "sketch", + "family": "Rectangle", + "icon": "design_rect_oblique", + "hint": "Click two corners of one edge, then a point for the width" + }, + { + "id": "sk_rect_rounded", + "name": "Rounded rectangle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_rect#3", + "mode": "sketch", + "family": "Rectangle", + "icon": "design_rect_rounded", + "hint": "Click two opposite corners, then a point for the corner radius" + }, + { + "id": "sk_circle", + "name": "Centre circle", + "slot": "create", + "key": "C", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:C", + "family": "Circle", + "icon": "design_circle", + "hint": "Circle — click center, then radius" + }, + { + "id": "sk_circle_2pt", + "name": "2-point circle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_circle#1", + "mode": "sketch", + "family": "Circle", + "icon": "design_circle2pt", + "hint": "Click two ends of the diameter" + }, + { + "id": "sk_circle_3pt", + "name": "3-point circle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_circle#2", + "mode": "sketch", + "family": "Circle", + "icon": "design_circle3pt", + "hint": "Click three points on the circle" + }, + { + "id": "sk_arc_t", + "name": "3-point arc", + "slot": "create", + "key": "A", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:A", + "family": "Arc", + "icon": "design_arc3pt", + "hint": "Arc — click start, end, then a point" + }, + { + "id": "sk_arc_tangent", + "name": "Tangent arc", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_arc3pt#1", + "mode": "sketch", + "family": "Arc", + "icon": "design_tangentarc", + "hint": "Click start (on the last entity) then end" + }, + { + "id": "sk_arc_center", + "name": "Centre-point arc", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_arc3pt#2", + "mode": "sketch", + "family": "Arc", + "icon": "design_arc_center", + "hint": "Click center, then start, then a point for the end angle" + }, + { + "id": "sk_slot", + "name": "Slot", + "slot": "create", + "key": "S", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:S", + "family": "Slot", + "icon": "design_slot", + "hint": "Slot — two centerline ends, then end radius" + }, + { + "id": "sk_slot_arc", + "name": "Arc slot", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_slot#1", + "mode": "sketch", + "family": "Slot", + "icon": "design_slot_arc", + "hint": "Click center, start, end, then a point for the width" + }, + { + "id": "sk_ellipse", + "name": "Ellipse", + "slot": "create", + "key": "E", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:E", + "family": "Ellipse", + "icon": "design_ellipse", + "hint": "Ellipse — center, major end, minor point" + }, + { + "id": "sk_ellipse_arc", + "name": "Elliptical arc", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_ellipse#1", + "mode": "sketch", + "family": "Ellipse", + "icon": "design_ellipse_arc", + "hint": "Click center, major-axis end, minor point, then arc start and end" + }, + { + "id": "sk_spline", + "name": "Spline", + "slot": "create", + "key": "B", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:B", + "icon": "design_bspline", + "hint": "Spline — click control points" + }, + { + "id": "sk_poly_3", + "name": "Triangle", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#3", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Triangle — click centre, then a vertex" + }, + { + "id": "sk_poly_4", + "name": "Square", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#4", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Square — click centre, then a vertex" + }, + { + "id": "sk_poly_5", + "name": "Pentagon", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#5", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Pentagon — click centre, then a vertex" + }, + { + "id": "sk_polygon", + "name": "Hexagon", + "slot": "create", + "key": "G", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#6", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Hexagon — click centre, then a vertex" + }, + { + "id": "sk_poly_8", + "name": "Octagon", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#8", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Octagon — click centre, then a vertex" + }, + { + "id": "sk_poly_12", + "name": "Dodecagon", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:poly#12", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Dodecagon — click centre, then a vertex" + }, + { + "id": "sk_poly_inscribed", + "name": "Inscribed", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:polyfit#0", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Measure the polygon to its corners (inscribed)" + }, + { + "id": "sk_poly_circumscribed", + "name": "Circumscribed", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:polyfit#1", + "mode": "sketch", + "family": "Polygon", + "icon": "design_polygon", + "hint": "Measure the polygon to its flats (circumscribed)" + }, + { + "id": "sk_point_t", + "name": "Point", + "slot": "create", + "key": "P", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:P", + "icon": "design_point", + "hint": "Point — click to place" + }, + { + "id": "sk_text", + "name": "Text", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:text", + "mode": "sketch", + "icon": "design_text", + "hint": "Type text; its outline is added to this sketch as editable lines" + }, + { + "id": "sk_svg", + "name": "SVG", + "slot": "create", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_none", + "sk_point", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:svg", + "mode": "sketch", + "icon": "design_svg", + "hint": "Import an SVG outline into this sketch as editable lines" + }, + { + "id": "sk_offset", + "name": "Offset", + "slot": "add", + "key": "O", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:O", + "icon": "design_offset", + "hint": "Offset — pick an entity, drag the distance" + }, + { + "id": "sk_trim", + "name": "Trim", + "slot": "remove", + "key": "T", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:T", + "icon": "design_trim", + "hint": "Trim — click a segment to trim it" + }, + { + "id": "sk_fillet", + "name": "Fillet", + "slot": "dressup", + "key": "F", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:F", + "icon": "design_filletedge", + "hint": "Fillet — pick two lines, set the radius" + }, + { + "id": "sk_chamfer", + "name": "Chamfer", + "slot": "dressup", + "key": "H", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:H", + "icon": "design_chamfer", + "hint": "Chamfer — pick two lines, set the distance" + }, + { + "id": "sk_array", + "name": "Linear array", + "slot": "repeat", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_array#0", + "mode": "sketch", + "family": "Array", + "icon": "design_array", + "hint": "Pick entities, drag the spacing handle, click the count; click empty to apply" + }, + { + "id": "sk_array_polar", + "name": "Polar array", + "slot": "repeat", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_array#1", + "mode": "sketch", + "family": "Array", + "icon": "design_polararray", + "hint": "Pick entities, drag the sweep handle, click the count; click empty to apply" + }, + { + "id": "sk_mirror", + "name": "Mirror", + "slot": "repeat", + "key": "M", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:M", + "icon": "design_mirror", + "hint": "Mirror — pick axis, then entities" + }, + { + "id": "sk_move", + "name": "Move", + "slot": "transform", + "key": null, + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_move#0", + "family": "Move", + "icon": "design_move", + "hint": "Pick entities, then drag the handle or click the distance; click empty to apply" + }, + { + "id": "sk_rotate", + "name": "Rotate", + "slot": "transform", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_move#1", + "mode": "sketch", + "family": "Move", + "icon": "design_rotate", + "hint": "Pick entities, then drag around the pivot or click the angle; click empty to apply" + }, + { + "id": "sk_scale", + "name": "Scale", + "slot": "transform", + "key": null, + "feature": "Sketch", + "mcp": null, + "accepts": [ + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "fly:design_move#2", + "mode": "sketch", + "family": "Move", + "icon": "design_scale", + "hint": "Pick entities, then drag the handle or click the factor; click empty to apply" + }, + { + "id": "sk_dimension", + "name": "Dimension", + "slot": "reference", + "key": "D", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:D", + "icon": "design_dimension", + "hint": "Dimension — click 2 points or an entity" + }, + { + "id": "sk_constrain", + "name": "Constrain", + "slot": "reference", + "key": "K", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:K", + "icon": "design_constrain", + "hint": "Constrain the selected sketch entities to each other" + }, + { + "id": "constrain", + "name": "Constrain sketch", + "slot": "modify", + "key": null, + "feature": "Sketch", + "mcp": null, + "mode": "model", + "accepts": [ + "sk_loop" + ], + "needs": { + "sketches": 1 + }, + "refusal": "Select a sketch to constrain it", + "gui": true, + "action": "btn:constrain", + "icon": "design_constrain", + "hint": "Add dimensions and relations (coincident, tangent, parallel...) to the selected sketch", + "note": [ + "Same verb, model-mode vocabulary: offered when a SKETCH is selected (bit 14, SkLoop), the", + "state a user is in right after finishing one. Without this row the only way in was the", + "toolbar icon, and constraints read as absent — see the Onshape-comparison report." + ] + }, + { + "id": "sk_construct", + "name": "Construction", + "slot": "reference", + "key": "Q", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_none", + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:Q", + "icon": null, + "hint": "Toggle construction: geometry that guides but is never built" + }, + { + "id": "sk_extend", + "name": "Extend", + "slot": "modify", + "key": "X", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:X", + "icon": "design_extend", + "hint": "Extend — click a line/arc to extend it" + }, + { + "id": "sk_delete", + "name": "Delete", + "slot": "modify", + "key": "Del", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line", + "sk_arc", + "sk_point", + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "btn:sk_delete", + "icon": "design_delete", + "hint": "Delete the selected sketch entities" + }, + { + "id": "sk_length", + "name": "Length…", + "slot": "modify", + "key": "V", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_line" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:V", + "icon": "design_dimension", + "hint": "Type the length of this line", + "note": [ + "Typing the defining number of the element you pointed at. Three rows rather than one so", + "each names the quantity in the drawing-office word for THAT element; all three land on", + "the same handler, because dimension_kind() already resolves the quantity from the", + "selection. Without these, an element's own numbers were reachable only by arming the", + "Dimension tool and re-picking geometry that was already selected." + ] + }, + { + "id": "sk_radius", + "name": "Radius / diameter…", + "slot": "modify", + "key": "V", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_arc" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:V", + "icon": "design_dimension", + "hint": "Type the radius of this arc, or the diameter of this circle" + }, + { + "id": "sk_angdist", + "name": "Angle / distance…", + "slot": "modify", + "key": "V", + "feature": "Sketch", + "mcp": null, + "mode": "sketch", + "accepts": [ + "sk_2ent" + ], + "needs": {}, + "refusal": null, + "gui": true, + "action": "key:V", + "icon": "design_dimension", + "hint": "Type the angle between two lines, or the distance between the two picks" + } + ], + "chrome_only": { + "_why": "document-level actions act on the DOCUMENT, not on a selection, so they stay in chrome and never enter the offer (see 4.1) Text and SVG were removed from this list 2026-08-01: they create a Sketch feature on the picked face, so they consume a selection like any other Create verb.", + "items": [ + "Import STEP", + "Import mesh", + "Export STEP", + "Commit to Plate", + "Undo", + "Redo", + "Variables", + "Section view", + "Origin planes", + "World axes" + ] + }, + "_ratified": "Row order ratified 2026-07-31 by Tommaso. Changing an index is a breaking change (charter 4.1)." +} diff --git a/docs/HLSD/filament_id.md b/docs/HLSD/filament_id.md new file mode 100644 index 0000000000..122dfb6fdb --- /dev/null +++ b/docs/HLSD/filament_id.md @@ -0,0 +1,487 @@ +# Filament IDs (`filament_id`) + +`filament_id` identifies one **filament product**: one named spool product = one id, shared by +all of that product's per-printer / per-nozzle variants, in every profile bundle that ships it. +Devices use it to match a physical spool or tray to a filament preset. It is never per-color, +per-printer, per-nozzle, or per-preset (per-preset identity is `setting_id`), and it is never +per-bundle either — PolyLite PLA carries the same id whether the preset lives in the +OrcaFilamentLibrary (OFL), Qidi, or Snapmaker bundle. The granularity is the name on the spool, +not the brand behind it: `AAA PLA Lite` and `AAA PLA Pro` are two filaments with two ids, not +variants of one. + +**How it is generated:** an id is computed, never invented. `scripts/orca_profile_tool.py` +mints it as a deterministic hash of the product's identity — the triple +`(filament_vendor, filament_type, filament name)`, where the filament name is the preset name +with its `@...` variant suffix stripped — producing an 8-character `OF*` code that is the +same for that product in every bundle, in every PR, on every machine. For example, Polymaker's +PolyLite PLA presets (`PolyLite PLA @base`, `PolyLite PLA@Q2-Series`, …) resolve +`filament_vendor` `Polymaker`, `filament_type` `PLA`, and filament name `PolyLite PLA`; hashing +`filament_product/Polymaker/PLA/PolyLite PLA` yields `OF5CgdDq`, and that is the id the +OrcaFilamentLibrary, OrcaArena, Qidi, and Snapmaker bundles all arrive at independently +(derivation details in the Minting section). + +**How it is used:** at runtime the id is the join key between hardware and profiles. +When a printer reports what a tray holds (Bambu AMS, Qidi box, Creality CFS, +Klipper, Snapmaker), OrcaSlicer matches the reported id against the filament presets +compatible with that printer to select the right profile; other features — tray display +names, support-material detection, vitrification warnings, multi-nozzle filament grouping — +look up material properties by id alone. An id that changes is not forwarded anywhere: a +tray or record still holding the old value falls back to matching by material type until the +user re-selects the filament, so identity changes are made deliberately and rarely. + +This page is the rule for authoring `filament_id` in system profiles +(`resources/profiles/**`). CI enforces everything below; the short version is: + +> [!IMPORTANT] +> **Never write a `filament_id` value by hand.** A new filament gets its id from +> `python scripts/orca_profile_tool.py generate-id`; one already in the tree has one — inherit it. + +## The design + +Because several consumers match **globally by id alone, first hit wins** (see the next +section), any two materials sharing one id feed wrong data somewhere — a wrong tray name, a +wrong support-material flag, a wrong nozzle grouping — and inside one printer a duplicated id +makes AMS spool matching a coin toss. Hand-written ids produce such collisions constantly, so +the system is built to make them impossible: an id is a pure hash of the product's identity — +no registry to maintain, no next-free-number ceremony, no way for two concurrent PRs to race +for the same number, and no way to get it wrong by hand, because you never write it by hand. +CI holds every id in the tree to that rule, so the profiles themselves are the whole record of +which products exist and which bundles ship them. + +## Who consumes the id + +The canonical consumer is tray-to-preset matching: a device reports a tray material id +(`tray_info_idx`), and the shared matching pipeline (`PresetBundle::sync_ams_list` and +friends) resolves it to a preset. The matcher is printer-scoped and first-match-wins: +scanning only compatible root presets — system roots plus user-made custom filaments, which +are user roots carrying their own `P*` ids; a preset derived from another resolves through +its root and never matches directly — it picks the first one whose `filament_id` equals the +tray's. On a miss it falls back by filament type: a system `Generic ` preset +(matched by name, then by type similarity), else the slot's previous selection, else any compatible system generic or, +failing that, any compatible system preset, else the slot is skipped — every fallback +selection surfaces a user-visible notice. + +Today only the Bambu AMS integration follows this pattern end to end — the device itself +reports the id, `BBLPrinterAgent` translates it out of Bambu's catalog into ours, and the +pipeline does all the matching. The other device integrations still synthesize a preset id +client-side in their agents (by type, brand, or color lookups against the loaded presets) +before the pipeline runs; they are intended to converge on the same pattern, with the +device-reported tray material id flowing through the shared matcher. + +| Ecosystem | Where the tray id comes from today | +| --- | --- | +| Bambu AMS | the device itself (RFID / user tray setting), in Bambu's own `GF*` catalog; `BBLPrinterAgent` rewrites it into our id before the matcher sees it (see [The Bambu catalog map](#the-bambu-catalog-map)) | +| Qidi box | composed at runtime as `QD___` — vendor and type indices from the device's per-slot saved variables, the series digit inferred client-side from the printer model/name. No preset carries a `QD_*` value, so the slot currently resolves by filament type; mapping the composed id onto the filament's minted id belongs in the agent | +| Creality CFS | runtime brand/type scoring returns the winning preset's id | +| Klipper (AFC / Happy Hare) | runtime lookup by filament type | +| Snapmaker | runtime color/vendor/type match | + +Tray-to-preset matching is printer-scoped, but **several consumers match globally by id alone, +first hit wins**: tray display names, `filament_is_support`, vitrification warnings, and +multi-nozzle filament grouping in the slicing pipeline (`FilamentGroup::try_merge_filaments` +merges plate slots sharing one `(filament_id, color)` pair, with matching +extruder-printability, onto one nozzle group; the engine is implemented but no grouping path +calls it yet). +Two *different* materials sharing one id +feed wrong data to those consumers even when the presets live in different vendors — so +cross-material id sharing is never safe. Within one printer, duplicate ids break AMS matching: +the matcher picks whichever preset loads first (it now logs an "Ambiguous AMS filament match" +warning, but the pick is still arbitrary) and the tray-edit dialog, which lists one entry per +id, hides the second preset entirely. The profile validator's `-f` check +(`check_filament_subtypes` → `PresetBundle::check_duplicate_filament_subtypes`) rejects this +per printer, and CI runs it tree-wide. + +Two more consumer-side facts worth knowing: + +- The machine-facing dialogs (AMS tray edit, AMS dry control, calibration history, extrusion + calibration) offer the filaments a connected printer can use by the same compatibility rule + the plater uses (an empty `compatible_printers` means *every* printer). Alias shadowing + still applies: a vendor's same-name profile supersedes the library generic. That is what + puts Orca Filament Library materials in those lists — deduplicated to one entry per + `filament_id` in the AMS and calibration-history dialogs, while extrusion calibration + deliberately lists every matching preset by full name. +- The id is load-bearing at startup: an instantiated system filament (one marked + `"instantiation": "true"` — see the structure rules) that resolves **no** + `filament_id` anywhere in its `inherits` chain is a hard load error in the C++ loader + (`Can not find filament_id for `) that discards the entire vendor bundle (for the + OrcaFilamentLibrary itself the failure is messier: library presets loaded before the + failing one survive, and every vendor bundle whose filaments inherit from the library is + then discarded for want of a base). CI's structure check catches this before it ships. + +## Do I need a new id? The one-question test + +> **Would a user consider this a different spool product than anything already in the tree?** + +Different polymer, different sub-brand (Basic / Matte / Silk / HF), fiber-filled sibling, or a +second selectable diameter → **new filament, new id**. The same spool tuned for another printer +or nozzle → **join the existing filament** (keep its base name and inherit it; no id +key needed). Tuning a generic material → **join the OrcaFilamentLibrary filament** (inherit +`Generic X @System` and keep the `Generic X` base name; no id key needed). + +| Situation | id | +| --- | --- | +| Per-printer / per-nozzle variant of an existing material | same id (inherit it) | +| Sub-brand or product line (PLA vs PLA Matte vs PLA Silk vs PLA HF) | new id each | +| Color | never a new id | +| Second diameter of the same product (1.75 + 2.85) | sibling filament, new id | +| "High-speed" tuned for a *different printer model* | same id (it is a printer variant) | +| "High-speed" selectable *alongside* the normal preset on one printer | new name, so a new id (it is a product line) | + +## Structure rules + +1. **Every preset carries the id of its own product, wherever it gets it from.** The id is a + function of the preset's own triple (rule 5), and `inherits` carries settings, never + identity. So a preset may declare the key itself or inherit it from any ancestor — a + ` @base` root, a real (instantiated) preset of the same filament, an + OrcaFilamentLibrary preset — and CI checks one thing: the id it ends up with equals the + mint of *its* triple. The usual shape is one `@base` root (`"instantiation": "false"`) + declaring the key and the per-printer variants inheriting it; a filament may have several + roots — Qidi's PolyLite PLA has four per-series roots (`PolyLite PLA@Q2-Series`, + `@Q2C-Series`, `@X-Max 4-Series`, `@X-Plus 5-Series`) — which then all declare the identical + id. A branded filament that borrows a generic's settings (`Flashforge ABS Basic @FF C5` + inherits `Generic ABS @System`) declares its own id, because its triple is its own. +2. **The filament name is the base name**: the preset name with everything from the first + (optionally space-preceded) `@` stripped. `MyBrand PLA @Orca 3D Fuse1` and `MyBrand PLA@HS` + are both the filament `MyBrand PLA`. +3. **Within one filament, variants' `compatible_printers` are pairwise disjoint** — per printer, + at most one compatible instantiated preset per id, or AMS matching turns ambiguous. The + C++ validator's `-f` check enforces this, tree-wide in CI. Since one product carries one id + and cannot be split onto two, this rule is the *only* remedy for such an ambiguity: narrow + the `compatible_printers`, or retire the preset that duplicates another. +4. **Generics belong to OrcaFilamentLibrary.** A vendor tuning a generic material inherits + `Generic X @System`, keeps the `Generic X` base name (that alias is what hides the library + preset on your printers, and it is what makes its triple — and so its id — the library's) + and sets a non-empty `compatible_printers` — e.g. `Generic PLA @Sovol SV08 MAX` inherits + `Generic PLA @System` and lists three Sovol nozzles. Renaming such a preset makes it a + different product by rule 5, so it then needs its own id. +5. **Ids follow the product identity.** The id is a pure function of the product triple + `(filament_vendor, filament_type, filament name)`, so correcting any of them re-mints the id + **by design**, applied by `generate-id` (preview with `--dry-run`, confine with `--vendor`); + the exact sequence is in the FAQ. Nothing forwards + the old value, so anything outside the tree that stored it — a device tray, a calibration + record, a saved project — falls back to matching by filament type until the user re-selects + the filament. Re-mint deliberately, and only to fix a genuinely wrong identity. + (`renamed_from` still gates preset-*name* compatibility, as before.) + +## Minting — nobody invents ids + +New ids are deterministic, computed exactly like the `setting_id` precedent +(the `setting_id` half of `scripts/orca_profile_tool.py generate-id`): + +```text +FILAMENT_ID_NAMESPACE = uuid5(setting-id NAMESPACE, "filament_id") + = c4d3ff49-4c32-5534-a3e3-00894157ab97 +filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, + "filament_product///") ) +``` + +`base62_6` is the low 6 base62 digits (alphabet `0-9A-Za-z`) of the UUID taken as a big-endian +integer, most-significant digit first; with the `OF` prefix the full id is 8 chars, within the +AMS length limit. The triple comes from the root preset's *flattened* config: +`` is the filament +**manufacturer** (`"Polymaker"`, or `"Generic"` for generics — never the printer brand), +`` the material type, `` the root's base name; the two config +values are inheritable list options and the first element counts. + +Content-addressing on that triple is what makes the whole system converge. The key contains no +bundle name, so the same product mints the same id in every bundle — moving a filament into +OrcaFilamentLibrary never changes its id, and two vendors independently shipping the same +product arrive at the same id without coordinating. `Polymaker/PLA/PolyLite PLA` mints +`OF5CgdDq`, and that one id is declared by the OrcaFilamentLibrary, OrcaArena, Qidi, and +Snapmaker bundles alike; the OFL generic `Generic/PLA/Generic PLA` mints `OFDSrzZ8`, claimed +by 35 bundles — most by independent declarations converging on the same mint, the rest +purely through inheritance from the OFL preset. + +Nothing but the triple feeds the mint — not the rest of the tree, not what another preset of +the product happens to carry. Determined triple, determined id: one product +carries one id and there is no second acceptable value for it, so any other value on a preset +is a mismatch `check` reports and `generate-id` pulls back. Two *different* products whose +triples mint the same base62 value would be a collision (a roughly 36-bit id space against a +few thousand products); nothing salts past it: `check` reports it naming both products, +`generate-id` refuses to write it, and the remedy is a rename so their triples differ. Where +two presets of one product would be AMS-ambiguous on a printer, the fix is likewise in the +profiles — make their `compatible_printers` disjoint (structure rule 3), retire the redundant +preset, or, if they really are different products, give them different names so their triples +differ. Never a second id for one triple. + +Workflow for a new filament: + +```bash +# 1. Author the filament with NO filament_id key anywhere. +python scripts/orca_profile_tool.py generate-id --dry-run # 2. preview the ids — writes nothing +python scripts/orca_profile_tool.py generate-id # 3. apply them to the profile file(s) +python scripts/orca_profile_tool.py check # 4. validate — everything CI checks +``` + +`generate-id` makes every filament's id equal the mint of its own +`(filament_vendor, filament_type, filament name)` triple: it inserts one where an instantiated +filament resolves none, and re-derives one that does not match. A preset that *inherits* a +mismatching id is the one case left to the author — check 2b names it, and the fix is to inherit +a preset of the same filament or to give the preset its own key. A declaration is left alone +exactly when it already equals the one id its triple mints, and a collision (check 2d) is +reported and left unwritten. The same run assigns +`generate_preset_setting_id(vendor, type, name)` to every instantiated filament, process +and machine preset of every vendor except BBL, which keeps its authoritative `G*` ids, strips +`setting_id` from base profiles, and fixes the misspelled `settings_id` key — dropped, or, for +BBL, whose ids have no formula to fall back on, restored under the correct name. It is idempotent and +byte-preserving (indentation, BOM, and line endings intact, every edited file re-parsed to fail +loudly), and a no-op on a tree that already passes `check`. + +- `--filament-id` limits the run to `filament_id`. +- `--setting-id` limits the run to `setting_id`. The two exclude each other; pass neither to + write both. +- `--vendor VENDOR` confines the run to that bundle; repeatable. The id is a function of the + triple alone, so a narrowed run writes exactly what a full one would; `check` reports + whatever it left outside. +- `--dry-run` reports what the run would do and writes nothing, so + `generate-id --dry-run --vendor ` previews just that bundle. +- `--profiles DIR` points the tooling at a different profile tree (default + `resources/profiles`). + +The tool's other commands maintain the tree around the ids: `fix` normalises profile files, +`trim` drops files no `.json` list references, and `update-index` rebuilds those lists. +They do not touch ids; `--help` documents them. + +**Identity fixes need no separate command.** `generate-id` re-derives an id that no longer matches +its triple exactly the way it fills in a missing one, so a rename or a `filament_vendor` / +`filament_type` correction is just: fix the config and run `generate-id` (confine it with +`--vendor`, preview it with `--dry-run`). + +If you skip the tooling, CI fails and prints the remedy: the expected id for your filament and +the instruction to run `python scripts/orca_profile_tool.py generate-id`. + +## Ids other systems compose + +Every filament profile carries a minted id, with no exceptions and no spellings held back for +anyone. There is therefore no reserved namespace to respect and no bundle that owns one: an id +some other system composes for its own purposes is simply not the mint of a triple, so it +cannot be a system profile's `filament_id`, and the format check rejects it for that reason +alone — same error, same remedy, whoever wrote it. + +Three such spaces exist around us, and are worth recognising so nobody mistakes one for an id +to copy into a profile: + +- **Bambu's `GF*` catalog.** Bambu's device / RFID / cloud catalog is external and opaque. Every + BBL filament mints an `OF` id from its triple like every other vendor's, and the + correspondence to Bambu's catalog ids lives in one generated file the app applies at the + printer boundary — the next section. Note that `GF` is a *prefix*, not a namespace the tree + avoids: BBL's authoritative `setting_id` values include `GF`-prefixed ones, and + `resources/profiles/blacklist.json` and `BBL/filament/filaments_color_codes.json` both + reference Bambu catalog ids by design. The rule is about `filament_id` and nothing else. +- **Qidi's `QD_*` protocol ids.** The Qidi box composes `QD___` at + runtime (slot vendor and type indices reported by the device, the series digit inferred + client-side from the printer model/name). Qidi presets carry ordinary minted `OF*` ids + (generics share the OFL ids), so a composed id matches no preset and the slot falls back to + filament type; translating it to the filament's id belongs in `QidiPrinterAgent`. Treating + per-series protocol ids as preset ids would put one product under five ids + (`QIDI PLA Rapido` would be `QD_0_1_1` through `QD_4_1_1`) — exactly the fragmentation the + mint rule removes. +- **`P` + 7 hex chars, and `"null"`.** What `CreatePresetsDialog.cpp` gives a filament a *user* + creates. Those are user presets, not system profiles, and the two never meet in the tree. + +## The Bambu catalog map + +Bambu's printers, its AMS and its cloud know only Bambu's own catalog ids. Our profiles carry +minted `OF` ids like every other vendor's, so one generated file records the correspondence and +the app applies it **only where an id crosses to or from a Bambu printer**. + +**The file** is `resources/printers/bambu_filament_ids.json` — a header plus one row per +catalogued product, keyed by our id: + +```json +{ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": { + "OFhuaUQB": { "bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS" } + } +} +``` + +It ships in `resources/printers/`, next to `filaments_blacklist.json` — deliberately not in +`resources/profiles/`, where the loader reads every top-level `.json` as a vendor index. It +holds 100 rows today, one per product BambuStudio ships, and the correspondence is +one-to-one in both directions. + +**It is generated, never hand-edited.** `python scripts/update_bambu_filament_ids.py` rebuilds +it from **BambuStudio's own shipped BBL bundle** — a sparse shallow clone of upstream `master`, +or `--bambustudio-dir `. Our BBL bundle is a fork of +Bambu's, tuned and extended independently, so it is not the source of truth for Bambu's ids. +A row's key is the id the product's `(filament_vendor, filament_type, filament name)` triple +mints — the same id any bundle of ours carries for it, since the id is a function of the triple +alone; the row of a product we do not ship sits inert until some bundle claims that triple — +`OFdyfQvU` / `GFG03`, "Bambu PETG Matte", is such a row today. + +**Regenerate it in the same commit as every BBL profile sync**, and read the drift report it +prints. Two lines, both informational, neither blocking the write: + +```text +upstream ships 'Bambu PETG Matte' (Bambu Lab/PETG), we ship nothing with that identity +Orca BBL filaments with no row: 135 Orca-only product(s) +``` + +The first names each upstream product our BBL bundle has no same-identity filament for — +sometimes a genuinely missing product, sometimes a name drift a follow-up rename would +converge. The second counts our own BBL filaments that matched no row: 135 of 234 today, of +which 109 send an `OF` id on the wire and 26 already rode `OF` ids inherited from the +OrcaFilamentLibrary. **135 is the number to expect at every regeneration** — 109 was the +one-off size of the transition and stopped being computable from the tree once the BBL bundle +was re-minted, so do not "fix" the report to print it. + +**Check 4** lives in `check_filament_ids`, so profile CI runs it alongside the other three. It +holds the file to its contract: it parses, carries `source` / `bambustudio_commit` / +`generated`, keys only `OF`-format ids, maps each Bambu id at most once, and — for every row +whose key the tree actually claims — agrees with the tree on that id's `(vendor, type, name)` +triple. A row for a product we do not ship is skipped, not an error. The remedy it prints is +always the same: regenerate the map and commit the diff for review. + +### The runtime rule: swap on hit + +Outbound, our id with a row becomes Bambu's; inbound, Bambu's id with a row becomes ours. +Everything else is forwarded untouched — an `OF` id with no row, a Bambu id for a product we do +not ship, a `P`-hex user id, `"null"`, an empty string. Translation is confined to the +boundary: nothing between the boundaries ever holds a Bambu id. + +Translating one value is a capability of the printer agent: `IPrinterAgent` declares +`to_orca_filament_id` and `from_orca_filament_id` returning their argument, and `BBLPrinterAgent` +overrides them with Bambu's map, so an agent whose printers already speak our ids inherits the +identity default and translates nothing. `NetworkAgent` forwards both to the live agent, so the +comparison sites below reach them through `wxGetApp().getAgent()` and leave an id untranslated +while no agent is live. Whole documents are Bambu's business alone: +`BBLPrinterAgent::to_orca_payload` and `from_orca_payload` rewrite every string under +`tray_info_idx`, `filament_id` or `filamentId` at any depth; text that does not parse, or carries +none of those keys, comes back unchanged. The map is loaded once, lazily; a missing or malformed +file degrades to identity with a log line rather than failing. + +| Boundary | Where it translates | +| --- | --- | +| Everything the agent sends | `BBLPrinterAgent::send_message` and `send_message_to_printer`, plus `PrintParams::ams_mapping_info` in `dispatch_start` — the funnel all five `start_*` calls share | +| Everything the agent receives | `set_on_message_fn` and `set_on_local_message_fn` wrap their callback, so `MachineObject::parse_json` and everything downstream see our ids only | +| 3mf export | `Plater::export_3mf` writes Bambu's ids into `slice_info.config`, gated on `preset_bundle.is_bbl_vendor()` — the printer reads that file and knows only its own catalog, and no other vendor's export is affected. The CLI has its own writer in `OrcaSlicer.cpp`; it does the same, gated on the `printer_model` prefix that already decides `Print::is_BBL_printer()` for that run | +| Project ingest | `Plater::priv::load_files` reverse-maps the project's `filament_ids` before the bundle ingests them, so a project saved by an older Orca or by BambuStudio still resolves the same presets | +| Prints from the printer's SD card | `SelectMachineDialog::update_print_required_data` reverse-maps each plate's slice-info ids as it adopts the plates, so the AMS mapping dialog pairs them with trays | +| Bambu-specific comparisons | `CalibUtils.cpp`, `DeviceManager.cpp`, `DeviceCore/DevFilaSystem.cpp`, `DeviceCore/DevFilaBlackList.cpp`, `SelectMachine.cpp`, `AMSDryControl.cpp`, `AMSMaterialsSetting.cpp`, `PresetComboBoxes.cpp`, `ColorDecomposeSupport.cpp` | + +That last row is the rule to follow when a new Bambu-specific behaviour is added: **translate +the value you are about to compare, never the table you compare it against.** The shipped data +those sites read is Bambu's and stays verbatim — `white_fila_ids` in +`resources/printers/filaments_blacklist.json`, the calibration id lists in +`resources/printers/.json`, `fila_id` in +`resources/profiles/BBL/filament/filaments_color_codes.json`. + +`tests/slic3rutils/test_bambu_filament_ids.cpp` covers the lookups, the payload rewrite and the +Bambu-specific rules. `orcaslicer_discover_tests` registers a Catch2 tag as a CTest **label**, +not as part of the test name, so `-R` matches nothing here and the filter is `-L`: + +```bash +ctest --test-dir /tests/slic3rutils -L BambuFilamentIds +``` + +### Three places the map deliberately does not reach + +The map and its lookups live in the GUI library, which libslic3r cannot link against and which a +GUI-less build does not link at all. Three consequences are known and documented; none is worth +pulling the map down into libslic3r for. + +- **The support display type in `PrintConfig.cpp`.** `DynamicPrintConfig::get_filament_type` + picks `PLA-S` / `Sup.PLA` and `PA-S` / `Sup.PA` for a support filament by testing + `filament_id` against `GFS00` and `GFS01`, and otherwise falls back on `filament_type` — a + fallback that returns those same two pairs for `"PLA"` and `"PA"`. Bambu Support W inherits + `fdm_filament_pla` and Bambu Support G inherits `fdm_filament_pa`, so with their `OF` ids the + fallback produces exactly what the id branches produced. (The only config that ever carries a + singular `filament_id` key is the AMS tray config built in `Plater.cpp`, and that one never + reaches this function.) These two lines are the only mention of a Bambu id anywhere in + libslic3r, and they need no change. +- **Config imports.** `PresetBundle::import_presets` (File ▸ Import ▸ Import Configs, for + `.json` / `.zip` / `.orca_filament` / `.orca_printer` / `.orca_bundle`) and + `PresetBundle::load_config_file` (the CLI's `--load-settings` of a G-code file with an + embedded config) both parse inside libslic3r, out of the GUI's reach, so a Bambu id carried + in such a file lands on the imported preset untranslated. The effect is bounded: that preset + does not auto-match an AMS tray while the stale id is live, and the id does not survive + being saved — `Preset::save` writes a `filament_id` key only for a preset whose `inherits` is + empty, and on the next load an inheriting preset takes its parent's id. A known gap, and not + a regression: nothing forwarded a stale id before either. +- **A build configured without the GUI.** `target_link_libraries(OrcaSlicer libslic3r_gui)` sits + inside `if (SLIC3R_GUI)` in `src/CMakeLists.txt`, so the lookups are not linkable when the GUI + is off. The CLI's 3mf writer in `src/OrcaSlicer.cpp` therefore guards its translation with + `#ifdef SLIC3R_GUI`, and a 3mf that such a build slices for a Bambu printer carries our `OF` + ids in `slice_info.config` rather than Bambu's. Every shipped build enables the GUI, so this + reaches only a purpose-built GUI-less binary. + +One more thing worth recording before it is rediscovered: +`SyncAmsInfoDialog::update_print_required_data` is a structural twin of the SD-card function +above and carries no translation. It has no callers today and its plate list is only ever read +for `printer_model_id`, so it is not a live gap — but wiring it up without adding the reverse +map would silently reproduce the bug. + +## How CI enforces this + +Profile CI (`check_profiles.yml`) runs `check_filament_ids()` tree-wide via +`scripts/orca_profile_tool.py check`. Every check judges the tree against the rules on this +page and nothing else — there is no recorded id state to match and no grandfather list of any +kind. + +The checks, in brief: + +- **Format** — every id occurring in the tree is `OF` + 6 base62 chars. No exceptions, not + even BBL. +- **Identity** — the id is a function of the triple alone. A declared `OF*` id must equal the + one id its declarer's own triple mints, with no second acceptable value; the id an + instantiated preset *inherits* must equal the mint of *its* own triple, however it inherits + it (a root, a real filament, a library preset — structure rule 1); and every instantiated + system filament must resolve an effective id at all (recall: an id-less one is a hard load + error in C++ that discards the whole vendor bundle); and no two products mint one id (a + base62 collision, resolved by renaming one of them). The errors print the expected id. +- **Triple integrity** — every declarer must resolve a non-empty `filament_vendor` and + `filament_type` (generics use `"Generic"`), and all declarers of one filament within a + bundle must agree on the triple. +- **Bambu catalog map** — `resources/printers/bambu_filament_ids.json` parses, carries its + `source` / `bambustudio_commit` / `generated` header, keys only `OF`-format ids, maps each + Bambu id at most once, and agrees with the tree on the triple of every row whose key the + tree claims. See [The Bambu catalog map](#the-bambu-catalog-map); the remedy is always to + regenerate, never to hand-edit. + +A profile that declares an id no triple mints — a Bambu catalog id, a composed Qidi one, a +hand-typed value, whatever its vendor — fails the format check. For a Bambu-cataloged product +the catalog map is where the correspondence belongs. Two products sharing one id are caught by +the identity check whether the id is declared or inherited. + +The same `check` run holds every declared id to the AMS 8-character limit, tree-wide and for +every vendor alike, scoped to the presets a vendor's index actually references (a file the index +never loads cannot break AMS matching). + +Complementing the Python checks, CI also runs the C++ profile validator with `-f` +(`check_filament_subtypes`): it loads the bundle exactly as the app does and flags any printer +for which two or more compatible filament presets share one `filament_id` — the runtime-shaped +ambiguity check behind structure rule 3. + +## FAQ + +- **A new color of an existing product?** Never a new id — colors are not filaments. +- **A second diameter (1.75 mm and 2.85 mm) of the same product?** A sibling filament with its + own id: two diameters are separately selectable spool products. +- **A high-speed tune of an existing material for another printer model?** Same filament: + keep the base name and inherit its root; no id key needed. +- **A tuned generic ("our profile for Generic PLA")?** Inherit `Generic PLA @System`, keep the + `Generic PLA` base name, set `compatible_printers`; no id key needed. +- **A branded filament that borrows a generic's settings?** Fine — inherit `Generic X @System` + (or any real filament) for the settings and declare the id of your own filament; run + `python scripts/orca_profile_tool.py generate-id` to mint it. Inheritance never changes the id. +- **I need to fix a filament's `filament_vendor` or `filament_type`.** Fix the config, run + `generate-id --vendor ` (preview with `--dry-run`), and commit the result. The id + re-derives from the corrected identity, and + nothing forwards the old value, so a tray or record still holding it falls back to matching by + filament type. +- **I need to rename a filament.** Rename the presets (adding `renamed_from`, which keeps the + preset *name* resolving), then `generate-id --vendor ` (preview with `--dry-run`). The + id follows the new filament name; as with any identity fix, the old id + is not forwarded. +- **Can I reuse a `QD_*` id for a Qidi profile?** No — it is not a mint, so it is not a + `filament_id`. Those values are composed by the box at runtime, and no preset carries one. + Author Qidi filaments like any other vendor's. +- **CI says my filament needs an id.** Run `python scripts/orca_profile_tool.py generate-id` and + commit the result. Do not type an id by hand. + +For general profile authoring, see the profile development guide on the +[OrcaSlicer wiki](https://www.orcaslicer.com/wiki). diff --git a/docs/HLSD/wipe-inward.md b/docs/HLSD/wipe-inward.md new file mode 100644 index 0000000000..9f1c617cc3 --- /dev/null +++ b/docs/HLSD/wipe-inward.md @@ -0,0 +1,170 @@ +# Wipe inward — High Level Design + +## Purpose and scope + +Wipe inward reduces reheating of fresh plastic and visible seam artifacts by +moving the hot nozzle toward adjacent printed material during the external-wall +wipe. Wipe marks are especially visible at layer heights below 0.1 mm. +The option applies only to wipes after external walls, including walls around +holes. It does not offset wipes after inner walls, infill or supports. For an +outer contour the move is inward; for a hole it is away from the hole, toward +the surrounding material. The path must remain supported by material that is +already present when the wipe executes. + +The operation belongs to G-code generation. It uses extrusion paths, their actual +widths and their print order. Changing its settings invalidates G-code export +while preserving the sliced geometry. + +## Settings and eligibility + +`wipe_inward` defaults to disabled and requires Wipe while retracting to be +enabled for the active filament. `wipe_inward_distance` defaults to 50% of the +actual external-wall extrusion width; it also accepts an absolute distance in +millimeters. Using the path width makes Auto width and Arachne's variable widths +meaningful. The effective offset is limited by that width and the spacing to the +adjacent wall. A zero distance disables the offset. + +Only external perimeters with a suitable, previously printed inner perimeter +are eligible. A configured wall count alone cannot establish eligibility: +the local geometry may contain fewer walls, and walls scheduled later do not +provide support. Outer/Inner wall order therefore normally retains the regular +wipe path. + +Retraction and pressure advance calibrations disable inward wiping so it cannot +mask the behavior being measured. The calibration settings turn it off, and +G-code generation enforces this even if a profile or object override enables it. + +## Path selection and support + +The planner identifies an adjacent inner perimeter on the material side of the +outgoing wall. Contour winding and the distinction between outer contours and +holes establish a preferred direction; local printed geometry resolves ambiguous +or self-touching contours. + +Candidate paths offset or translate the portion needed for the configured wipe +distance. A wide seam gap can prevent a supported forward path; following the +incoming printed wall backwards is also a candidate. If translating that wall +cannot provide a complete wipe around a curve, the planner tries an offset of +the reversed wall. Direction checks allow coordinate-rounding error at a +perpendicular entry, while rejecting actual backtracking. The planner checks the +complete executable path, including its connector from the nozzle position, +against the current and earlier printed perimeters. Nearby endpoints alone do +not establish support across a gap. + +Each region accumulates its printed perimeter prefix once, in extrusion order. +Every entity contributes its geometry only after it is printed, and the prefix +is discarded when the region ends. This collection is skipped when inward wiping +is disabled or its configured distance is zero. A mixed inner-wall loop remains +an eligible target even when its first path is an overhang: ordinary inner-wall +paths elsewhere in the loop identify it. Likewise, an external loop with an +overhanging start remains eligible when other segments identify the external +wall. It is available for support checks but is not an inner-wall target. +Candidate-specific support filtering and AABB trees are built only for eligible +external loops, then reused across their candidate paths. + +Material-side validation applies with or without a seam gap. Along each +candidate, local wall normals point toward the adjacent printed inner wall; +samples on the opposite side are rejected even when they remain close enough +to the external wall to pass the support check. This uses the open wall geometry +without treating it as a closed polygon. Full paths at a zero-gap seam also +retain clearance from the external wall after their initial connector. At a +clipped corner, another branch can be closer than the requested offset, so +material-side and support checks apply without that additional clearance rule. + +An accepted candidate replaces the stored wipe path as a whole. A short direct +inward move is also eligible when longer candidates fail validation. It may +waive full wall clearance, but must pass the material-side check. Its initial +direction is checked from the actual nozzle position after any loop pre-move; +the original wall endpoint is retained separately for intersection checks. It takes +priority over the alternate offset when the preferred and translated paths +are unusable. A longer reversed path may replace the selected candidate only +when its distance to the target inner wall is no worse within tolerance. + +## Fallback to the regular wipe + +The original wipe path is retained when: + +- No suitable adjacent inner wall has already been printed near the seam. This + includes single-wall areas, locally missing inner walls and normally Outer/Inner + wall order. A distant wall or a wall on the air side does not qualify. +- The requested or available offset, or the configured wipe distance, is zero + or too small at the geometry's coordinate precision. +- Degenerate geometry prevents construction of a usable candidate, or all + candidates fail the checks for printed support, direction, wall clearance or + the connector from the actual nozzle position. This can occur at tight corners, + narrow features or seam gaps. + +Corners and seam gaps do not automatically trigger fallback: an offset, +translated, reversed or short direct inward path may still be valid. The regular +wipe is retained only when no candidate is accepted. + +Fallback uses the path and retraction rules for `wipe_inward` disabled. +Wipe while retracting must still be enabled for a wipe to occur; `wipe_on_loops` +remains controlled by its own setting. + +## Interaction with Wipe on loop + +`wipe_on_loops` is an independent option that makes a short move before leaving +an external loop. It can operate with `wipe_inward` disabled. When both options +are enabled, its destination is the starting position for the inward wipe. + +The loop move samples the outgoing and incoming paths by distance across path +boundaries. The sampling distance is bounded by the nozzle diameter and one +quarter of the total path length. It samples the outgoing path at up to 20% of +the nozzle diameter and rotates that point around the seam through one third +of the material-side corner angle. For a closed square outer contour, this +produces a move of 20% of the nozzle diameter at 30 degrees into the corner. +Coincident samples or degenerate angles suppress the move. + +The nozzle position stored by G-code generation must match the emitted loop +move. Both travel planning and wipe execution depend on this position, including +when Wipe inward is disabled. + +With a seam gap, a loop move may advance past the inward offset's original entry. +If that alone makes the connector backtrack, the entry advances to the nozzle's +projection on the offset. The planner extends the source as needed to preserve +the configured wipe length and validates the new connector and complete path. +Joins that already backtrack across the seam gap are not adjusted this way. + +## Execution and retraction + +The stored wipe path uses a sentinel first point. Execution starts from the +actual nozzle position and proceeds to the second stored point. Path selection, +support validation and wipe-length calculation must all use this same executable +geometry, especially after a Wipe on loop move. + +An accepted inward path executes at the end of the external loop, after any +Wipe on loop move, without retracting filament. It consumes the stored path and +updates the nozzle position before travel planning. A short travel to the next +wall cannot discard this wipe or force a retraction or Z-hop. Subsequent travel +uses the normal minimum-travel threshold and retraction/lift settings from the +new position. The regular wipe, including fallback, remains deferred until a +normal retraction uses it. + +Retraction is divided into portions before, during and after wiping. The amount +that can be retracted during the wipe depends on its executable length, wipe +speed and the active filament's retraction speed. Fractional retraction speeds +are retained in this calculation. For a 2 mm wipe at 100 mm/s and a retraction +speed of 25.5 mm/s, the wipe can retract 0.51 mm. With a total retraction of 0.8 mm +and both before/after percentages set to zero, the remaining 0.29 mm is retracted +before wiping. This split applies to regular deferred wipes, including fallback; +an accepted inward wipe executes separately without retraction. + +## Implementation and verification + +- [GCode.cpp](../../src/libslic3r/GCode.cpp) integrates path selection, nozzle + position and retraction; [Print.cpp](../../src/libslic3r/Print.cpp) controls + invalidation, and [PrintConfig.cpp](../../src/libslic3r/PrintConfig.cpp) defines + the settings. +- [WipePathHelpers](../../src/libslic3r/GCode/WipePathHelpers.hpp) implements path + sampling, offset selection and support checks. +- [Geometry tests](../../tests/libslic3r/test_wipe_path.cpp) cover support, + degenerate paths, contour and hole orientations, and exact loop-move geometry + across path subdivisions. +- [FFF tests](../../tests/fff_print/test_wipe.cpp) cover emitted trajectories, + fallback, minimum-travel retraction and Z-hop rules, and export invalidation. + With Wipe inward disabled, they check the loop move's direction and magnitude + for Classic and Arachne, the subsequent wipe's start and length, and fractional + retraction splitting in absolute and relative E modes. + Loop-move checks use reserved role/wipe markers and extrusion state, and run + with human-readable G-code comments both enabled and disabled. diff --git a/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md b/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md deleted file mode 100644 index 5b3669ace4..0000000000 --- a/docs/superpowers/plans/2026-07-23-wx-inspectable-on-dpiaware-plan.md +++ /dev/null @@ -1,111 +0,0 @@ -# Move `wxInspectable` into `DPIAware` — Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Move `wxInspector::wxInspectable` from individual leaf classes into the common `DPIAware

` template so every DPIAware widget is automatically inspectable and gets the inspector keyboard shortcut. - -**Architecture:** `DPIAware

` gains `wxInspector::wxInspectable` as a second base class and calls `SetupInspectorAccelerator(this)` in its constructor. `DPIDialog` and `MainFrame` drop their now-redundant `wxInspectable` inheritance and `SetupInspectorAccelerator` calls. - -**Tech Stack:** C++17, wxWidgets, wxInspector - -## Global Constraints - -- Build with `D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe` -- Use `--config RelWithDebInfo` for all builds -- Cross-platform: must compile on Windows, macOS, and Linux -- Match existing code style: PascalCase classes, `#pragma once` -- Do NOT commit files under `.superpowers/` -- Do NOT commit `task.md` - ---- - -### Task 1: Move `wxInspectable` and `SetupInspectorAccelerator` into `DPIAware

` - -**Files:** -- Modify: `src/slic3r/GUI/GUI_Utils.hpp:92` (DPIAware template — add wxInspectable base + SetupInspectorAccelerator call) -- Modify: `src/slic3r/GUI/GUI_Utils.hpp:276` (DPIDialog — drop wxInspectable + SetupInspectorAccelerator) -- Modify: `src/slic3r/GUI/MainFrame.hpp:96` (MainFrame — drop wxInspectable) -- Modify: `src/slic3r/GUI/MainFrame.cpp:304` (MainFrame constructor — drop SetupInspectorAccelerator) - -**Interfaces:** -- Consumes: Nothing (standalone refactor) -- Produces: All DPIAware widgets automatically inherit `wxInspector::wxInspectable` and get Ctrl+Shift+I accelerator - -- [ ] **Step 1: Add `wxInspectable` to `DPIAware

` and call `SetupInspectorAccelerator`** - -In `src/slic3r/GUI/GUI_Utils.hpp`, line 92, change the base class: - -```cpp -// Before: -template class DPIAware : public P -// After: -template class DPIAware : public P, public wxInspector::wxInspectable -``` - -In the constructor body of `DPIAware

`, after `this->CenterOnParent();` (currently line 110), add: - -```cpp -SetupInspectorAccelerator(this); -``` - -(`` is already included at line 23.) - -- [ ] **Step 2: Remove redundant `wxInspectable` and `SetupInspectorAccelerator` from `DPIDialog`** - -In `src/slic3r/GUI/GUI_Utils.hpp`, line 276, change: - -```cpp -// Before: -class DPIDialog : public DPIAware, public wxInspector::wxInspectable -// After: -class DPIDialog : public DPIAware -``` - -In the `DPIDialog` constructor body, remove the `SetupInspectorAccelerator(this);` line (currently line 286). The rest of the constructor stays. - -- [ ] **Step 3: Remove redundant `wxInspectable` from `MainFrame`** - -In `src/slic3r/GUI/MainFrame.hpp`, line 96, change: - -```cpp -// Before: -class MainFrame : public DPIFrame, public wxInspector::wxInspectable -// After: -class MainFrame : public DPIFrame -``` - -`MainFrame` now gets `wxInspectable` through `DPIFrame` → `DPIAware`. - -- [ ] **Step 4: Remove redundant `SetupInspectorAccelerator` from `MainFrame` constructor** - -In `src/slic3r/GUI/MainFrame.cpp`, line 304, remove the line: - -```cpp -SetupInspectorAccelerator(this); -``` - -It is now called automatically by the `DPIAware` constructor. - -- [ ] **Step 5: Build to verify compilation** - -```powershell -$cmakePath = "D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -& $cmakePath --build . --config RelWithDebInfo --target ALL_BUILD -- -m -``` - -Expected: Build succeeds with zero new errors or warnings. - -- [ ] **Step 6: Commit** - -```bash -git add src/slic3r/GUI/GUI_Utils.hpp src/slic3r/GUI/MainFrame.hpp src/slic3r/GUI/MainFrame.cpp -git commit -m "refactor: move wxInspectable and SetupInspectorAccelerator into DPIAware - -DPIAware

now inherits wxInspector::wxInspectable and calls -SetupInspectorAccelerator in its constructor, making all DPIAware -widgets automatically appear in the inspector tree with the -Ctrl+Shift+I shortcut. Remove redundant wxInspectable inheritance -and SetupInspectorAccelerator calls from DPIDialog and MainFrame. - -Co-Authored-By: Claude " -``` diff --git a/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md b/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md deleted file mode 100644 index c3061b223d..0000000000 --- a/docs/superpowers/plans/2026-07-23-wx-inspector-plugins-plan.md +++ /dev/null @@ -1,753 +0,0 @@ -# wxInspector Plugins for OrcaSlicer — Implementation Plan - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal:** Build two wxInspector plugins (DPIAware + CustomWidgets) that expose OrcaSlicer custom control properties in the inspector's property grid. - -**Architecture:** Two plugins in a shared folder under `src/slic3r/Utils/wxInspectorPlugins/`. DPIAwarePlugin uses `dynamic_cast/` for detection; CustomWidgetsPlugin uses per-type `dynamic_cast`. Both registered as static singletons via a single inline function in `Registration.hpp`, called from `MainFrame` constructor. - -**Tech Stack:** C++17, wxWidgets, wxInspector plugin API (`wx/inspector/plugin.h`, `wx/inspector/inspector.h`), OrcaSlicer custom widget headers - -## Global Constraints - -- Plugins placed under `src/slic3r/Utils/wxInspectorPlugins/` -- Build with `D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe` -- Minimal source changes: only trivial (one-line) getters/setters added to existing classes -- Cross-platform: must compile on Windows, macOS, and Linux -- Match existing code style: PascalCase classes, snake_case functions, `#pragma once` - ---- - -### Task 1: Add getters/setters to existing Orca widget headers - -**Files:** -- Modify: `src/slic3r/GUI/GUI_Utils.hpp` (DPIAware template — add 4 methods) -- Modify: `src/slic3r/GUI/Widgets/Button.hpp` (add 3 getters) -- Modify: `src/slic3r/GUI/Widgets/CheckBox.hpp` (add 1 getter) -- Modify: `src/slic3r/GUI/Widgets/TextInput.hpp` (add 1 getter) -- Modify: `src/slic3r/GUI/Widgets/LabeledStaticBox.hpp` (add 4 getter declarations) -- Modify: `src/slic3r/GUI/Widgets/LabeledStaticBox.cpp` (add 4 getter implementations) - -**Interfaces:** -- Consumes: Nothing (prerequisite for all other tasks) -- Produces: - - `DPIAware

::set_scale_factor(float)`, `DPIAware

::set_prev_scale_factor(float)`, `DPIAware

::set_em_unit(int)`, `DPIAware

::force_rescale() const` - - `Button::GetStyle()`, `Button::GetType()`, `Button::IsSelected()` - - `CheckBox::IsHalfChecked()` - - `TextInput::GetCornerRadius()` - - `LabeledStaticBox::GetCornerRadius()`, `LabeledStaticBox::GetBorderWidth()`, `LabeledStaticBox::GetBorderColor()`, `LabeledStaticBox::GetScale()` - -- [ ] **Step 1: Add DPIAware setters/getter in GUI_Utils.hpp** - -After line 184 (`float prev_scale_factor() const { return m_prev_scale_factor; }`), add: - -```cpp -void set_scale_factor(float v) { m_scale_factor = v; } -void set_prev_scale_factor(float v) { m_prev_scale_factor = v; } -void set_em_unit(int v) { m_em_unit = v; } -bool force_rescale() const { return m_force_rescale; } -``` - -- [ ] **Step 2: Add Button getters in Button.hpp** - -After line 79 (`void SetSelected(bool selected = true) { m_selected = selected; }`), add: - -```cpp -ButtonStyle GetStyle() const { return m_style; } -ButtonType GetType() const { return m_type; } -bool IsSelected() const { return m_selected; } -``` - -- [ ] **Step 3: Add CheckBox getter in CheckBox.hpp** - -After line 16 (`void SetHalfChecked(bool value = true);`), add: - -```cpp -bool IsHalfChecked() const { return m_half_checked; } -``` - -- [ ] **Step 4: Add TextInput getter in TextInput.hpp** - -After line 44 (`void SetCornerRadius(double radius);`), add: - -```cpp -int GetCornerRadius() const { return static_cast(radius); } -``` - -(Note: `radius` is inherited from `StaticBox` which has it as a protected `double` member.) - -- [ ] **Step 5: Add LabeledStaticBox getter declarations in LabeledStaticBox.hpp** - -After line 46 (`bool Enable(bool enable) override;`), add: - -```cpp -int GetCornerRadius() const { return m_radius; } -int GetBorderWidth() const { return m_border_width; } -StateColor GetBorderColor() const { return border_color; } -float GetScale() const { return m_scale; } -``` - -(Note: all of `m_radius`, `m_border_width`, `border_color`, `m_scale` are protected members, accessible to inline methods.) - -- [ ] **Step 6: Commit** - -```bash -git add src/slic3r/GUI/GUI_Utils.hpp src/slic3r/GUI/Widgets/Button.hpp src/slic3r/GUI/Widgets/CheckBox.hpp src/slic3r/GUI/Widgets/TextInput.hpp src/slic3r/GUI/Widgets/LabeledStaticBox.hpp -git commit -m "feat: add getters/setters for wxInspector plugin access - -Add minimal public accessors to DPIAware (set_scale_factor, -set_prev_scale_factor, set_em_unit, force_rescale), Button -(GetStyle, GetType, IsSelected), CheckBox (IsHalfChecked), -TextInput (GetCornerRadius), and LabeledStaticBox -(GetCornerRadius, GetBorderWidth, GetBorderColor, GetScale)." -``` - ---- - -### Task 2: Create Registration helper header - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/Registration.hpp` - -**Interfaces:** -- Consumes: Nothing (forward-declares plugin classes) -- Produces: `RegisterOrcaInspectorPlugins()` - -- [ ] **Step 1: Create directory** - -```bash -mkdir -p src/slic3r/Utils/wxInspectorPlugins -``` - -- [ ] **Step 2: Write Registration.hpp** - -```cpp -#pragma once - -namespace wxInspector { -class wxInspectorPlugin; -void RegisterPlugin(wxInspectorPlugin* plugin); -} - -// Forward declare our plugins -class DPIAwarePlugin; -class CustomWidgetsPlugin; - -inline void RegisterOrcaInspectorPlugins() -{ - static DPIAwarePlugin dpiaware; - static CustomWidgetsPlugin customWidgets; - wxInspector::RegisterPlugin(&dpiaware); - wxInspector::RegisterPlugin(&customWidgets); -} -``` - -- [ ] **Step 3: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/Registration.hpp -git commit -m "feat: add wxInspector plugin registration helper - -Add RegisterOrcaInspectorPlugins() inline function that creates -and registers the DPIAwarePlugin and CustomWidgetsPlugin as -static instances (matching wxInspector's built-in pattern)." -``` - ---- - -### Task 3: Create DPIAwarePlugin - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.hpp` -- Create: `src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.cpp` - -**Interfaces:** -- Consumes: Task 1 (DPIAware getters/setters), Task 2 (registration pattern) -- Produces: `class DPIAwarePlugin : public wxInspector::wxInspectorPlugin` - -- [ ] **Step 1: Write DPIAwarePlugin.hpp** - -```cpp -#pragma once - -#include - -class DPIAwarePlugin : public wxInspector::wxInspectorPlugin -{ -public: - wxString GetName() const override; - - bool CanProvideProperties(wxClassInfo* info) override; - - wxVector GetProperties( - wxInspector::InspectableObject& obj) override; -}; -``` - -- [ ] **Step 2: Write DPIAwarePlugin.cpp** - -```cpp -#include "DPIAwarePlugin.hpp" - -#include "slic3r/GUI/GUI_Utils.hpp" // DPIFrame, DPIDialog, DPIAware

- -#include - -namespace { - -template -void addDPIProps(T* dpi, wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Scale Factor", "DPI Scaling", PropertyType::String, - wxString::Format("%.2f", dpi->scale_factor()), false, {}, - [dpi]() { return wxString::Format("%.2f", dpi->scale_factor()); }, - [dpi](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - dpi->set_scale_factor((float) val); - return true; - }}); - - props.push_back({"Prev Scale Factor", "DPI Scaling", PropertyType::String, - wxString::Format("%.2f", dpi->prev_scale_factor()), false, {}, - [dpi]() { return wxString::Format("%.2f", dpi->prev_scale_factor()); }, - [dpi](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - dpi->set_prev_scale_factor((float) val); - return true; - }}); - - props.push_back({"EM Unit", "DPI Scaling", PropertyType::Integer, - wxString::Format("%d", dpi->em_unit()), false, {}, - [dpi]() { return wxString::Format("%d", dpi->em_unit()); }, - [dpi](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - dpi->set_em_unit((int) val); - return true; - }}); - - props.push_back({"Normal Font", "DPI Scaling", PropertyType::ReadOnly, - dpi->normal_font().GetNativeFontInfoDesc(), true, {}, - [dpi]() { return dpi->normal_font().GetNativeFontInfoDesc(); }, - nullptr}); - - props.push_back({"Force Rescale", "DPI Scaling", PropertyType::Boolean, - dpi->force_rescale() ? "true" : "false", true, {}, - [dpi]() { return dpi->force_rescale() ? "true" : "false"; }, - nullptr}); -} - -} // anonymous namespace - -wxString DPIAwarePlugin::GetName() const -{ - return "OrcaDPIAware"; -} - -bool DPIAwarePlugin::CanProvideProperties(wxClassInfo* info) -{ - return info->IsKindOf(CLASSINFO(wxWindow)); -} - -wxVector DPIAwarePlugin::GetProperties( - wxInspector::InspectableObject& obj) -{ - wxVector props; - wxWindow* win = obj.AsWindow(); - if (!win) return props; - - if (auto* frame = dynamic_cast(win)) { - addDPIProps(frame, props); - } else if (auto* dlg = dynamic_cast(win)) { - addDPIProps(dlg, props); - } - - return props; -} -``` - -- [ ] **Step 3: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.hpp src/slic3r/Utils/wxInspectorPlugins/DPIAwarePlugin.cpp -git commit -m "feat: add DPIAware wxInspector plugin - -Exposes DPI scaling properties (scale_factor, prev_scale_factor, -em_unit, normal_font, force_rescale) on DPIFrame and DPIDialog -widgets. Uses dynamic_cast for detection and a template helper -to capture the correct static type for lambda accessors." -``` - ---- - -### Task 4: Create CustomWidgetsPlugin - -**Files:** -- Create: `src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp` -- Create: `src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp` - -**Interfaces:** -- Consumes: Task 1 (all widget getters), Task 2 (registration pattern) -- Produces: `class CustomWidgetsPlugin : public wxInspector::wxInspectorPlugin` - -- [ ] **Step 1: Write CustomWidgetsPlugin.hpp** - -```cpp -#pragma once - -#include - -class CustomWidgetsPlugin : public wxInspector::wxInspectorPlugin -{ -public: - wxString GetName() const override; - - bool CanProvideProperties(wxClassInfo* info) override; - - wxVector GetProperties( - wxInspector::InspectableObject& obj) override; - -private: - void addButtonProps(class Button* btn, - wxVector& props); - void addCheckBoxProps(class CheckBox* cb, - wxVector& props); - void addTextInputProps(class TextInput* ti, - wxVector& props); - void addSwitchButtonProps(class SwitchButton* sb, - wxVector& props); - void addProgressBarProps(class ProgressBar* pb, - wxVector& props); - void addLabelProps(class Label* lbl, - wxVector& props); - void addLabeledStaticBoxProps(class LabeledStaticBox* lsb, - wxVector& props); -}; -``` - -- [ ] **Step 2: Write CustomWidgetsPlugin.cpp — includes and GetName/CanProvideProperties** - -```cpp -#include "CustomWidgetsPlugin.hpp" - -#include "slic3r/GUI/Widgets/Button.hpp" -#include "slic3r/GUI/Widgets/CheckBox.hpp" -#include "slic3r/GUI/Widgets/TextInput.hpp" -#include "slic3r/GUI/Widgets/SwitchButton.hpp" -#include "slic3r/GUI/Widgets/ProgressBar.hpp" -#include "slic3r/GUI/Widgets/Label.hpp" -#include "slic3r/GUI/Widgets/LabeledStaticBox.hpp" - -#include -#include - -wxString CustomWidgetsPlugin::GetName() const -{ - return "OrcaCustomWidgets"; -} - -bool CustomWidgetsPlugin::CanProvideProperties(wxClassInfo* info) -{ - return info->IsKindOf(CLASSINFO(wxWindow)); -} - -wxVector CustomWidgetsPlugin::GetProperties( - wxInspector::InspectableObject& obj) -{ - wxVector props; - wxWindow* win = obj.AsWindow(); - if (!win) return props; - - if (auto* btn = dynamic_cast(win)) - addButtonProps(btn, props); - if (auto* cb = dynamic_cast(win)) - addCheckBoxProps(cb, props); - if (auto* ti = dynamic_cast(win)) - addTextInputProps(ti, props); - if (auto* sb = dynamic_cast(win)) - addSwitchButtonProps(sb, props); - if (auto* pb = dynamic_cast(win)) - addProgressBarProps(pb, props); - if (auto* lbl = dynamic_cast(win)) - addLabelProps(lbl, props); - if (auto* lsb = dynamic_cast(win)) - addLabeledStaticBoxProps(lsb, props); - - return props; -} -``` - -- [ ] **Step 3: Write CustomWidgetsPlugin.cpp — addButtonProps** - -```cpp -void CustomWidgetsPlugin::addButtonProps(Button* btn, - wxVector& props) -{ - using namespace wxInspector; - - wxVector styleChoices; - styleChoices.push_back("Regular"); - styleChoices.push_back("Confirm"); - styleChoices.push_back("Alert"); - styleChoices.push_back("Disabled"); - - auto styleToStr = [](ButtonStyle s) -> wxString { - switch (s) { - case ButtonStyle::Regular: return "Regular"; - case ButtonStyle::Confirm: return "Confirm"; - case ButtonStyle::Alert: return "Alert"; - case ButtonStyle::Disabled: return "Disabled"; - } - return "Regular"; - }; - - props.push_back({"Button Style", "Orca Button", PropertyType::Choice, - styleToStr(btn->GetStyle()), false, styleChoices, - [btn, styleToStr]() { return styleToStr(btn->GetStyle()); }, - [btn](const wxString& v) { - ButtonStyle s = ButtonStyle::Regular; - if (v == "Confirm") s = ButtonStyle::Confirm; - else if (v == "Alert") s = ButtonStyle::Alert; - else if (v == "Disabled") s = ButtonStyle::Disabled; - btn->SetStyle(s, btn->GetType()); - return true; - }}); - - wxVector typeChoices; - typeChoices.push_back("Compact"); - typeChoices.push_back("Window"); - typeChoices.push_back("Choice"); - typeChoices.push_back("Parameter"); - typeChoices.push_back("Icon"); - typeChoices.push_back("Expanded"); - - auto typeToStr = [](ButtonType t) -> wxString { - switch (t) { - case ButtonType::Compact: return "Compact"; - case ButtonType::Window: return "Window"; - case ButtonType::Choice: return "Choice"; - case ButtonType::Parameter: return "Parameter"; - case ButtonType::Icon: return "Icon"; - case ButtonType::Expanded: return "Expanded"; - } - return "Compact"; - }; - - props.push_back({"Button Type", "Orca Button", PropertyType::Choice, - typeToStr(btn->GetType()), false, typeChoices, - [btn, typeToStr]() { return typeToStr(btn->GetType()); }, - [btn](const wxString& v) { - ButtonType t = ButtonType::Compact; - if (v == "Window") t = ButtonType::Window; - else if (v == "Choice") t = ButtonType::Choice; - else if (v == "Parameter") t = ButtonType::Parameter; - else if (v == "Icon") t = ButtonType::Icon; - else if (v == "Expanded") t = ButtonType::Expanded; - btn->SetStyle(btn->GetStyle(), t); - return true; - }}); - - props.push_back({"Selected", "Orca Button", PropertyType::Boolean, - btn->IsSelected() ? "true" : "false", false, {}, - [btn]() { return btn->IsSelected() ? "true" : "false"; }, - [btn](const wxString& v) { - btn->SetSelected(v == "true"); - btn->Refresh(); - return true; - }}); -} -``` - -- [ ] **Step 4: Write CustomWidgetsPlugin.cpp — addCheckBoxProps** - -```cpp -void CustomWidgetsPlugin::addCheckBoxProps(CheckBox* cb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Half Checked", "Orca CheckBox", PropertyType::Boolean, - cb->IsHalfChecked() ? "true" : "false", false, {}, - [cb]() { return cb->IsHalfChecked() ? "true" : "false"; }, - [cb](const wxString& v) { - cb->SetHalfChecked(v == "true"); - return true; - }}); -} -``` - -- [ ] **Step 5: Write CustomWidgetsPlugin.cpp — addTextInputProps** - -```cpp -void CustomWidgetsPlugin::addTextInputProps(TextInput* ti, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Label", "Orca TextInput", PropertyType::String, - ti->GetLabel(), false, {}, - [ti]() { return ti->GetLabel(); }, - [ti](const wxString& v) { ti->SetLabel(v); return true; }}); - - props.push_back({"Text Value", "Orca TextInput", PropertyType::String, - ti->GetTextCtrl()->GetValue(), false, {}, - [ti]() { return ti->GetTextCtrl()->GetValue(); }, - [ti](const wxString& v) { ti->GetTextCtrl()->SetValue(v); return true; }}); - - props.push_back({"Corner Radius", "Orca TextInput", PropertyType::Integer, - wxString::Format("%d", ti->GetCornerRadius()), false, {}, - [ti]() { return wxString::Format("%d", ti->GetCornerRadius()); }, - [ti](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - ti->SetCornerRadius((double) val); - ti->Refresh(); - return true; - }}); -} -``` - -- [ ] **Step 6: Write CustomWidgetsPlugin.cpp — addSwitchButtonProps** - -```cpp -void CustomWidgetsPlugin::addSwitchButtonProps(SwitchButton* sb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Value", "Orca SwitchButton", PropertyType::Boolean, - sb->GetValue() ? "true" : "false", false, {}, - [sb]() { return sb->GetValue() ? "true" : "false"; }, - [sb](const wxString& v) { - sb->SetValue(v == "true"); - return true; - }}); -} -``` - -(Note: `GetValue()` and `SetValue()` are inherited from `wxBitmapToggleButton` → `wxToggleButton`.) - -- [ ] **Step 7: Write CustomWidgetsPlugin.cpp — addProgressBarProps** - -```cpp -void CustomWidgetsPlugin::addProgressBarProps(ProgressBar* pb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Proportion", "Orca ProgressBar", PropertyType::String, - wxString::Format("%.2f", pb->m_proportion), false, {}, - [pb]() { return wxString::Format("%.2f", pb->m_proportion); }, - [pb](const wxString& v) { - double val; - if (wxSscanf(v, "%lf", &val) != 1) return false; - pb->m_proportion = val; - pb->Refresh(); - return true; - }}); - - props.push_back({"Show Number", "Orca ProgressBar", PropertyType::Boolean, - pb->m_shownumber ? "true" : "false", false, {}, - [pb]() { return pb->m_shownumber ? "true" : "false"; }, - [pb](const wxString& v) { - pb->m_shownumber = (v == "true"); - pb->Refresh(); - return true; - }}); -} -``` - -(Note: `m_proportion` and `m_shownumber` are public members on `ProgressBar`.) - -- [ ] **Step 8: Write CustomWidgetsPlugin.cpp — addLabelProps** - -```cpp -void CustomWidgetsPlugin::addLabelProps(Label* lbl, - wxVector& props) -{ - using namespace wxInspector; - - bool isHyperlink = (lbl->GetWindowStyleFlag() & 0x0020) != 0; // LB_HYPERLINK - - props.push_back({"Is Hyperlink", "Orca Label", PropertyType::Boolean, - isHyperlink ? "true" : "false", true, {}, - [lbl]() { - return (lbl->GetWindowStyleFlag() & 0x0020) ? "true" : "false"; - }, - nullptr}); - - props.push_back({"Font Point Size", "Orca Label", PropertyType::ReadOnly, - wxString::Format("%d", lbl->GetFont().GetPointSize()), true, {}, - [lbl]() { - return wxString::Format("%d", lbl->GetFont().GetPointSize()); - }, - nullptr}); -} -``` - -- [ ] **Step 9: Write CustomWidgetsPlugin.cpp — addLabeledStaticBoxProps** - -```cpp -void CustomWidgetsPlugin::addLabeledStaticBoxProps(LabeledStaticBox* lsb, - wxVector& props) -{ - using namespace wxInspector; - - props.push_back({"Corner Radius", "LabeledStaticBox", PropertyType::Integer, - wxString::Format("%d", lsb->GetCornerRadius()), false, {}, - [lsb]() { return wxString::Format("%d", lsb->GetCornerRadius()); }, - [lsb](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - lsb->SetCornerRadius((int) val); - return true; - }}); - - props.push_back({"Border Width", "LabeledStaticBox", PropertyType::Integer, - wxString::Format("%d", lsb->GetBorderWidth()), false, {}, - [lsb]() { return wxString::Format("%d", lsb->GetBorderWidth()); }, - [lsb](const wxString& v) { - long val; - if (!v.ToLong(&val)) return false; - lsb->SetBorderWidth((int) val); - return true; - }}); - - // Border Color: display as hex string - wxColour bc = lsb->GetBorderColor().colorForStates(0); - props.push_back({"Border Color", "LabeledStaticBox", PropertyType::String, - bc.GetAsString(wxC2S_HTML_SYNTAX), false, {}, - [lsb]() { - return lsb->GetBorderColor() - .colorForStates(0) - .GetAsString(wxC2S_HTML_SYNTAX); - }, - [lsb](const wxString& v) { - wxColour c(v); - if (!c.IsOk()) return false; - lsb->SetBorderColor(StateColor(c)); - return true; - }}); - - props.push_back({"Scale", "LabeledStaticBox", PropertyType::ReadOnly, - wxString::Format("%.2f", lsb->GetScale()), true, {}, - [lsb]() { return wxString::Format("%.2f", lsb->GetScale()); }, - nullptr}); -} -``` - -- [ ] **Step 10: Commit** - -```bash -git add src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp src/slic3r/Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp -git commit -m "feat: add OrcaCustomWidgets wxInspector plugin - -Exposes Orca-specific properties on 7 widget types: -- Button: Style, Type, Selected -- CheckBox: Half Checked -- TextInput: Label, Text Value, Corner Radius -- SwitchButton: Value -- ProgressBar: Proportion, Show Number -- Label: Is Hyperlink, Font Point Size -- LabeledStaticBox: Corner Radius, Border Width, Border Color, Scale - -Each widget type uses dynamic_cast for safe detection." -``` - ---- - -### Task 5: Wire plugins into MainFrame and CMakeLists - -**Files:** -- Modify: `src/slic3r/GUI/MainFrame.cpp` (add include + registration call) -- Modify: `src/slic3r/CMakeLists.txt` (add 4 source files) - -**Interfaces:** -- Consumes: Tasks 1-4 (all plugins and registration helper) -- Produces: Registered plugins available at runtime, buildable project - -- [ ] **Step 1: Add include in MainFrame.cpp** - -After the existing includes (around line 30, near the other Utils includes), add: - -```cpp -#include "slic3r/Utils/wxInspectorPlugins/Registration.hpp" -``` - -- [ ] **Step 2: Add registration call in MainFrame constructor** - -After `SetupInspectorAccelerator(this);` (currently line ~303), add: - -```cpp -RegisterOrcaInspectorPlugins(); -``` - -- [ ] **Step 3: Add source files to CMakeLists.txt** - -Find the `SLIC3R_GUI_SOURCES` list in `src/slic3r/CMakeLists.txt`. After the existing `Utils/*.cpp` entries (around line 650-754), add: - -```cmake -Utils/wxInspectorPlugins/DPIAwarePlugin.hpp -Utils/wxInspectorPlugins/DPIAwarePlugin.cpp -Utils/wxInspectorPlugins/CustomWidgetsPlugin.hpp -Utils/wxInspectorPlugins/CustomWidgetsPlugin.cpp -Utils/wxInspectorPlugins/Registration.hpp -``` - -(Note: Add all 5 files — 2 .hpp + 2 .cpp + 1 Registration.hpp. wxWidgets cmake needs headers listed too for the resource system.) - -- [ ] **Step 4: Commit** - -```bash -git add src/slic3r/GUI/MainFrame.cpp src/slic3r/CMakeLists.txt -git commit -m "feat: wire wxInspector plugins into MainFrame and build - -- Call RegisterOrcaInspectorPlugins() after SetupInspectorAccelerator -- Add all plugin source files to SLIC3R_GUI_SOURCES" -``` - ---- - -### Task 6: Build and verify - -**Files:** -- None modified (verification only) - -- [ ] **Step 1: Configure the build** - -```powershell -$cmakePath = "D:\VisualStudio\2026\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -& $cmakePath --build . --config Debug --target ALL_BUILD -- -m -``` - -Expected: Build succeeds with zero errors and zero warnings from our new files. - -- [ ] **Step 2: Fix any compilation errors** - -If the build fails: -- Check that `#include` paths resolve (the `slic3r/GUI/…` relative paths use `src/` as the include root — verify this is set up in CMake via `include_directories`) -- Check that `ButtonStyle` and `ButtonType` enums are visible (they're defined in `Button.hpp`) -- Check that `StateColor` constructor from `wxColour` is valid (it has `StateColor(wxColour const&)`) -- Check that `LabeledStaticBox::GetBorderColor()` returns by value (StateColor copy is fine) -- On macOS: static box margin removal call needs `#ifdef __WXOSX__` guard - -- [ ] **Step 3: Launch OrcaSlicer and verify inspector** - -Launch the built OrcaSlicer, press Ctrl+Shift+I to open the inspector: -1. Select the MainFrame in the tree — verify "DPI Scaling" category appears with Scale Factor, Prev Scale Factor, EM Unit, Normal Font, Force Rescale -2. Select an Orca Button — verify "Orca Button" category appears -3. Select an Orca CheckBox — verify "Orca CheckBox" category appears -4. Edit a property value (e.g., Scale Factor) — verify the setter applies correctly -5. Select a LabeledStaticBox — verify corner radius, border width, border color, scale appear - -- [ ] **Step 5: Commit (if fixes were needed) or mark complete** - -```bash -git status -``` - -If clean: verification complete. If changes were made: `git add` and commit with fix message. diff --git a/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md b/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md deleted file mode 100644 index 3a4e873af6..0000000000 --- a/docs/superpowers/specs/2026-07-23-wx-inspectable-on-dpiaware-design.md +++ /dev/null @@ -1,102 +0,0 @@ -# Move `wxInspectable` into `DPIAware` — Design Spec - -Date: 2026-07-23 -Branch: `dev/layout-inspector` - -## Overview - -Move the `wxInspector::wxInspectable` base class from individual leaf classes (`DPIDialog`, `MainFrame`) into the common `DPIAware

` template. This makes every DPIAware widget automatically visible in the inspector tree without requiring each subclass to opt in. - -## Motivation - -Currently, only `DPIDialog` and `MainFrame` explicitly inherit `wxInspectable`. `DPIFrame` (which `MainFrame` inherits from) does not — `MainFrame` adds it manually. This means: - -- Any `DPIAware` widget that isn't `DPIDialog` or `MainFrame` is invisible in the inspector tree -- `DPIFrame` subclasses (`BaseTransparentDPIFrame`, `ImageDPIFrame`, `ModelMallDialog`, `MediaFileFrame`, `SecondaryCheckDialog`, `PrintErrorDialog`, etc.) don't appear -- Adding a new DPIAware widget type requires remembering to also inherit `wxInspectable` - -Moving `wxInspectable` to `DPIAware` fixes this for all current and future DPIAware widgets at once. - -## Design - -### Change 1: `GUI_Utils.hpp` — `DPIAware

` - -Add `wxInspector::wxInspectable` as a second base class, and call `SetupInspectorAccelerator(this)` in the constructor (after `this->CenterOnParent()`): - -```cpp -// Before: -template class DPIAware : public P - -// After: -template class DPIAware : public P, public wxInspector::wxInspectable -``` - -Add in the constructor body (after `this->CenterOnParent()` at line 110): -```cpp -SetupInspectorAccelerator(this); -``` - -This gives every `DPIAware` widget both inspectability and the Ctrl+Shift+I keyboard shortcut automatically. `#include ` is already present in the file. - -### Change 2: `GUI_Utils.hpp` — `DPIDialog` - -Remove the now-redundant `wxInspector::wxInspectable` and the `SetupInspectorAccelerator(this)` call: - -```cpp -// Before: -class DPIDialog : public DPIAware, public wxInspector::wxInspectable -// ... - SetupInspectorAccelerator(this); - -// After: -class DPIDialog : public DPIAware -// (SetupInspectorAccelerator call removed — now done in DPIAware constructor) -``` - -`DPIDialog` gets `wxInspectable` and the accelerator through `DPIAware` now. - -### Change 3: `MainFrame.hpp` — `MainFrame` - -Remove the now-redundant `wxInspector::wxInspectable`: - -```cpp -// Before: -class MainFrame : public DPIFrame, public wxInspector::wxInspectable - -// After: -class MainFrame : public DPIFrame -``` - -`MainFrame` gets `wxInspectable` through `DPIFrame` → `DPIAware`. - -### Change 4: `MainFrame.cpp` — `MainFrame` constructor - -Remove the now-redundant `SetupInspectorAccelerator(this)` call (line 304). It will be called automatically by the `DPIAware` constructor. - -## Impact - -| Widget | Before | After | -|--------|--------|-------| -| `DPIDialog` subclasses (~80) | ✓ inspectable | ✓ inspectable (transitive) | -| `MainFrame` | ✓ inspectable | ✓ inspectable (transitive) | -| `DPIFrame` subclasses (8 others) | ✗ invisible | ✓ inspectable | -| Future `DPIAware` | ✗ invisible | ✓ inspectable | - -## Files Modified - -| File | Change | -|------|--------| -| `src/slic3r/GUI/GUI_Utils.hpp` | `DPIAware

` gains `wxInspector::wxInspectable` + `SetupInspectorAccelerator(this)` call; `DPIDialog` drops redundant `wxInspector::wxInspectable` and `SetupInspectorAccelerator(this)` | -| `src/slic3r/GUI/MainFrame.hpp` | `MainFrame` drops redundant `wxInspector::wxInspectable` | -| `src/slic3r/GUI/MainFrame.cpp` | Remove redundant `SetupInspectorAccelerator(this)` from MainFrame constructor | - -## Non-Goals - -- The `DPIAwarePlugin` detection logic (`dynamic_cast` / `dynamic_cast`) is unchanged -- No new DPI properties — this is purely about tree visibility and accelerator setup - -## Risk Assessment - -- **Multiple inheritance**: `DPIAware

` already has a vtable (virtual destructor). Adding `wxInspectable` adds a second base but no additional data members. The `wxInspector::wxInspectable` class is expected to be a lightweight marker interface. -- **Build**: No new includes needed; `` is already included in `GUI_Utils.hpp`. -- **Cross-platform**: The change is standard C++ multiple inheritance — no platform-specific concerns. diff --git a/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md b/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md deleted file mode 100644 index 5715635969..0000000000 --- a/docs/superpowers/specs/2026-07-23-wx-inspector-plugins-design.md +++ /dev/null @@ -1,244 +0,0 @@ -# wxInspector Plugins for OrcaSlicer Custom Controls — Design Spec - -Date: 2026-07-23 -Branch: `dev/layout-inspector` - -## Overview - -Create wxInspector plugins that expose OrcaSlicer's custom widget properties in the inspector's property grid. Without these plugins, the inspector shows only generic wxWidgets properties — missing all DPI-awareness data, custom styling, and Orca-specific control state. - -## Goals - -1. **DPIAware properties** — Inspect and update `scale_factor`, `prev_scale_factor`, `em_unit`, and `normal_font` on any DPIAware-derived widget -2. **Custom widget properties** — Surface Orca-specific properties on `Button`, `CheckBox`, `TextInput`, `SwitchButton`, `ProgressBar`, `Label`, and `LabeledStaticBox` -3. **Minimal source changes** — Only add trivial (one-line) getters/setters to existing classes; no architectural refactoring of Orca's widget hierarchy - -## Non-Goals - -- Custom inspector panels or AUI tabs (use the existing property grid and method invoker) -- Python-plugin integration (this is C++ wxInspector, not Orca's Python plugin system) -- Event logging customization (the built-in event logger already works) - -## Architecture - -### Two Plugins - -| Plugin | Class | Files | -|--------|-------|-------| -| DPIAware plugin | `DPIAwarePlugin` | `DPIAwarePlugin.hpp`, `DPIAwarePlugin.cpp` | -| Custom widgets plugin | `CustomWidgetsPlugin` | `CustomWidgetsPlugin.hpp`, `CustomWidgetsPlugin.cpp` | -| Registration helper | inline function | `Registration.hpp` | - -All files live under `src/slic3r/Utils/wxInspectorPlugins/`. - -### Plugin Detection Strategy - -**DPIAware plugin**: Uses `dynamic_cast` and `dynamic_cast` as detection gates. `DPIFrame` = `DPIAware`, `DPIDialog` = `DPIAware`. Since these are concrete typedefs, `dynamic_cast` works at runtime. This covers `MainFrame`, `SettingsDialog`, and all 8 calibration dialogs (which inherit `DPIDialog`). - -**Custom widgets plugin**: Gates broadly on `CLASSINFO(wxWindow)`, then uses per-type `dynamic_cast` inside `GetProperties` to check each Orca-specific type. Only matching types append properties. - -### Registration - -A single `RegisterOrcaInspectorPlugins()` inline function in `Registration.hpp` creates both plugins as function-local statics (matching the wxInspector built-in provider pattern) and registers them via `wxInspector::RegisterPlugin()`. - -Called once from `MainFrame::MainFrame()` after `SetupInspectorAccelerator(this)`. - -### Why Separate Plugins? - -- DPIAware is a C++ template concept (not a wxClassInfo-isKindOf check), so it needs its own detection logic -- Custom widgets use standard wxClassInfo-based detection, matching the built-in provider pattern -- Two focused files are easier to review and maintain than one monolithic plugin -- Compile-time failure isolation: if a widget header changes, only one plugin breaks - -## DPIAware Plugin — Property Specification - -### Source Changes (GUI_Utils.hpp) - -Four one-liner methods added to the `DPIAware

` template class (public section): - -```cpp -float scale_factor() const { return m_scale_factor; } // already exists -float prev_scale_factor() const { return m_prev_scale_factor; } // already exists -int em_unit() const { return m_em_unit; } // already exists -void set_scale_factor(float v) { m_scale_factor = v; } // NEW -void set_prev_scale_factor(float v) { m_prev_scale_factor = v; } // NEW -void set_em_unit(int v) { m_em_unit = v; } // NEW -bool force_rescale() const { return m_force_rescale; } // NEW -// m_normal_font getter already exists: normal_font() -``` - -### Detection - -```cpp -bool CanProvideProperties(wxClassInfo* info) override { - // Gated in GetProperties via dynamic_cast on the window itself - return info->IsKindOf(CLASSINFO(wxWindow)); -} -``` - -In `GetProperties`: -```cpp -auto* win = obj.AsWindow(); -bool isDPI = dynamic_cast(win) || dynamic_cast(win); -if (!isDPI) return props; -``` - -### Property Table (category: "DPI Scaling") - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Scale Factor | String (float) | Yes | `dpi->scale_factor()` | `dpi->set_scale_factor(v)` | -| Prev Scale Factor | String (float) | Yes | `dpi->prev_scale_factor()` | `dpi->set_prev_scale_factor(v)` | -| EM Unit | Integer | Yes | `dpi->em_unit()` | `dpi->set_em_unit(v)` | -| Normal Font | ReadOnly | No | `dpi->normal_font().GetNativeFontInfoDesc()` | — | -| Force Rescale | Boolean (ReadOnly) | No | `dpi->force_rescale()` | — | - -**Note on setters**: The setters simply store values. They do NOT trigger a widget rescale/layout. To see the effect of a changed scale factor, use the inspector's Methods panel to call `Layout()` or resize the window — which triggers the DPI_CHANGED event path naturally. - -## Custom Widgets Plugin — Property Specification - -All properties are appended to the built-in wxWindow properties. Each widget type is independently detected via `dynamic_cast`. - -### Detection gates (in `GetProperties`) - -```cpp -auto* win = obj.AsWindow(); -if (auto* btn = dynamic_cast(win)) { addButtonProperties(btn, props); } -if (auto* cb = dynamic_cast(win)) { addCheckBoxProperties(cb, props); } -if (auto* ti = dynamic_cast(win)) { addTextInputProperties(ti, props); } -if (auto* sb = dynamic_cast(win)) { addSwitchButtonProperties(sb, props); } -if (auto* pb = dynamic_cast(win)) { addProgressBarProperties(pb, props); } -if (auto* lbl = dynamic_cast(win)) { addLabelProperties(lbl, props); } -if (auto* lsb = dynamic_cast(win)) { addLabeledStaticBoxProperties(lsb, props); } -``` - -### Orca Button (`Button`) — category: "Orca Button" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Button Style | Choice | Yes | enum→string | string→enum | -| Button Type | Choice | Yes | enum→string | string→enum | -| Selected | Boolean | Yes | `m_selected` (needs getter) | `SetSelected(v)` | -| Active Icon | ReadOnly | No | icon name string | — | -| Inactive Icon | ReadOnly | No | icon name string | — | - -Choices for Button Style: `Regular`, `Confirm`, `Alert`, `Disabled` -Choices for Button Type: `Compact`, `Window`, `Choice`, `Parameter`, `Icon`, `Expanded` - -**Source changes needed**: Button's `m_selected` is private. Add one-liner getter: -```cpp -bool IsSelected() const { return m_selected; } -``` - -### Orca CheckBox (`CheckBox`) — category: "Orca CheckBox" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Half Checked | Boolean | Yes | `m_half_checked` (needs getter) | `SetHalfChecked(v)` | - -**Source changes needed**: `m_half_checked` is private. Add one-liner getter: -```cpp -bool IsHalfChecked() const { return m_half_checked; } -``` - -### Orca TextInput (`TextInput`) — category: "Orca TextInput" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Label | String | Yes | `GetLabel()` (inherited from wxWindow) | `SetLabel(v)` (exists) | -| Text Value | String | Yes | `GetTextCtrl()->GetValue()` (GetTextCtrl is public) | `GetTextCtrl()->SetValue(v)` | -| Corner Radius | Integer | Yes | `GetCornerRadius()` (NEW) | `SetCornerRadius(v)` (exists) | - -**Source changes needed**: Add one getter to `TextInput`: -```cpp -int GetCornerRadius() const { return static_cast(radius); } -``` -(`radius` is inherited from StaticBox. `SetCornerRadius(double)` already exists. `GetTextCtrl()` is already public.) - -### Orca SwitchButton (`SwitchButton`) — category: "Orca SwitchButton" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Value | Boolean | Yes | existing getter | existing setter | - -### Orca ProgressBar (`ProgressBar`) — category: "Orca ProgressBar" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Proportion | Float (0-1) | Yes | `pb->m_proportion` (public member) | `pb->m_proportion = v` | -| Show Number | Boolean | Yes | `pb->m_shownumber` (public member) | `pb->m_shownumber = v` | - -**No source changes needed**: `m_proportion` and `m_shownumber` are already public members. `SetValue(int)` and `SetProgress(int)` already exist as public methods. - -### Orca Label (`Label`) — category: "Orca Label" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Is Hyperlink | Boolean | No | existing flag check | — | -| Font Size | ReadOnly | No | `GetFont().GetPointSize()` | — | - -### LabeledStaticBox — category: "LabeledStaticBox" - -| Name | Type | Editable | Getter | Setter | -|------|------|----------|--------|--------| -| Corner Radius | Integer | Yes | `GetCornerRadius()` (NEW) | `SetCornerRadius(v)` (exists) | -| Border Width | Integer | Yes | `GetBorderWidth()` (NEW) | `SetBorderWidth(v)` (exists) | -| Border Color | String (hex) | Yes | `GetBorderColor()` (NEW) | `SetBorderColor(v)` (exists) | -| Scale | Float (ReadOnly) | No | `m_scale` (protected, needs getter) | — | - -**Source changes needed**: Four one-liner getters added to `LabeledStaticBox`: -```cpp -int GetCornerRadius() const { return m_radius; } -int GetBorderWidth() const { return m_border_width; } -StateColor GetBorderColor() const { return border_color; } -float GetScale() const { return m_scale; } -``` - -## Files Modified (Existing Code) - -| File | Changes | -|------|---------| -| `src/slic3r/GUI/GUI_Utils.hpp` | +4 methods in `DPIAware

`: `set_scale_factor()`, `set_prev_scale_factor()`, `set_em_unit()`, `force_rescale()` | -| `src/slic3r/GUI/Widgets/LabeledStaticBox.hpp` | +4 getter declarations: `GetCornerRadius()`, `GetBorderWidth()`, `GetBorderColor()`, `GetScale()` | -| `src/slic3r/GUI/Widgets/LabeledStaticBox.cpp` | +4 getter implementations | -| `src/slic3r/GUI/Widgets/Button.hpp` | +1 getter: `IsSelected()` | -| `src/slic3r/GUI/Widgets/CheckBox.hpp` | +1 getter: `IsHalfChecked()` | -| `src/slic3r/GUI/Widgets/TextInput.hpp` | +1 getter: `GetCornerRadius()` | -| `src/slic3r/GUI/Widgets/ProgressBar.hpp` | None (public members are used directly) | -| `src/slic3r/GUI/MainFrame.cpp` | +1 `#include`, +1 call to `RegisterOrcaInspectorPlugins()` | -| `src/slic3r/CMakeLists.txt` | +4 entries in `SLIC3R_GUI_SOURCES` (the .cpp plugin files) | - -## Files Created - -``` -src/slic3r/Utils/wxInspectorPlugins/ -├── DPIAwarePlugin.hpp -├── DPIAwarePlugin.cpp -├── CustomWidgetsPlugin.hpp -├── CustomWidgetsPlugin.cpp -└── Registration.hpp -``` - -## Build & Linking - -The `wxInspector` dependency is already wired: -- `deps/wxInspector/wxInspector.cmake` fetches and builds wxInspector -- `src/CMakeLists.txt` lines 92-93 link `wxInspector::wxInspector` into `wxWidgets_LIBRARIES` -- The plugin files only need `#include ` and `#include ` — both available from the installed dependency - -No new CMake dependencies needed. Only the new source files need listing in `SLIC3R_GUI_SOURCES`. - -## Error Handling & Edge Cases - -- **Stale pointers**: Plugin lambdas capture raw pointers, regenerated on every `GetProperties` call (matching wxInspector's built-in provider pattern). Pointers live only until the next tree selection. -- **Widget destruction**: If a widget is destroyed while the inspector is showing its properties, `InspectableObject::IsValid()` returns false and properties are not displayed. The inspector won't show stale data. -- **Invalid property values**: Setters use `sscanf` / `ToLong` with validation (matching built-in patterns). Bogus input is rejected — setter returns `false`, property grid shows error state. -- **DPI drift**: Setting `scale_factor` without triggering rescale means displayed sizes don't match the new factor. This is acceptable — the inspector is a developer tool; operators know to call `Layout()` after making changes. -- **Missing widget type**: If a `dynamic_cast` fails for all types, only built-in wxWindow properties are shown. No crash, no error — just reduced info. - -## Future Work (Out of Scope) - -- **StateColor visualization**: `StateColor` is a multi-value type (maps bitmask states to colors). A full solution would need a custom property editor (e.g., a table showing each state→color pair). Keep it simple for now. -- **ScalableBitmap display**: Could show the bitmap as an inline thumbnail. Complex property editor work — deferred. -- **More widget types**: `SwitchBoard`, `MultiSwitchButton`, `StepCtrl`, `FanControl`, `DropDown`, `ComboBox`, `AMS*` widgets could all benefit. Add as needed. -- **Property refresh on tree selection**: Currently properties are static snapshots. A "refresh" button or auto-poll could keep values current for rapidly-changing widgets (progress bars, etc.). The built-in wxInspector already provides a tree-refresh button. diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index 6ec0ecd9cf..32269c0e6d 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2293,15 +2293,6 @@ msgstr "" msgid "%s has been removed." msgstr "" -msgid "Switching application language" -msgstr "" - -msgid "Select the language" -msgstr "" - -msgid "Language" -msgstr "" - #, possible-c-format, possible-boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "" @@ -2762,6 +2753,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3039,6 +3033,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -3482,10 +3479,12 @@ msgstr "" msgid "Switch track at Filament Track Switch" msgstr "" -msgid "The maximum temperature cannot exceed " +#, possible-c-format, possible-boost-format +msgid "The maximum temperature cannot exceed %d" msgstr "" -msgid "The minmum temperature should not be less than " +#, possible-c-format, possible-boost-format +msgid "The minimum temperature should not be less than %d" msgstr "" msgid "Type to filter..." @@ -4318,6 +4317,12 @@ msgid "" "Error message: %1%" msgstr "" +#, possible-boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" + #, possible-boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "" @@ -4497,7 +4502,7 @@ msgid "" "The value will be reset to 0." msgstr "" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "" msgid "" @@ -4528,13 +4533,13 @@ msgid "" msgstr "" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" @@ -4565,6 +4570,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -4987,10 +4995,10 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "" #, possible-c-format, possible-boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "" + +msgid "%" msgstr "" #, possible-boost-format @@ -5013,22 +5021,16 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" -msgid "No plugin selected" -msgstr "" - msgid "Add plugin" msgstr "" -msgid "Select plugin" +msgid "Remove plugin" msgstr "" -msgid "Remove plugin" +msgid "No plugin selected" msgstr "" msgid "Configure" @@ -5284,13 +5286,16 @@ msgstr "" msgid "Regroup filament" msgstr "" -msgid "up to" +#, possible-boost-format +msgid "up to %1% mm" msgstr "" -msgid "above" +#, possible-boost-format +msgid "above %1% mm" msgstr "" -msgid "from" +#, possible-boost-format +msgid "from %1% to %2% mm" msgstr "" msgid "Usage" @@ -5641,7 +5646,7 @@ msgstr "" msgid "Size:" msgstr "" -#, possible-boost-format +#, possible-c-format, possible-boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "" @@ -5945,16 +5950,22 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" msgid "Load a model" msgstr "" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "" msgid "Import Configs" @@ -7172,6 +7183,12 @@ msgctxt "Layers" msgid "Bottom" msgstr "" +msgid "This setting does not specify a plugin capability type." +msgstr "" + +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "" + msgid "Plugin Selection" msgstr "" @@ -7403,6 +7420,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, possible-boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7523,12 +7543,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, possible-c-format, possible-boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7663,7 +7707,13 @@ msgstr "" msgid "Customized Preset" msgstr "" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed:" +msgstr "" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7685,7 +7735,7 @@ msgstr "" #, possible-c-format, possible-boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" msgid "Object too small" @@ -7700,6 +7750,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7894,6 +7950,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -8023,6 +8091,17 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -8220,9 +8299,6 @@ msgstr "" msgid "Language selection" msgstr "" -msgid "Switching application language while some presets are modified." -msgstr "" - msgid "Asia-Pacific" msgstr "" @@ -8316,6 +8392,9 @@ msgstr "" msgid "General" msgstr "" +msgid "Language" +msgstr "" + msgid "Metric" msgstr "" @@ -8705,9 +8784,6 @@ msgstr "" msgid "Dimmed layer brightness" msgstr "" -msgid "%" -msgstr "" - msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" "99% is barely darkened, 0% renders them black. Capped at 99% because 100% would be the same as disabling the option." @@ -9043,6 +9119,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -9070,9 +9149,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9088,6 +9164,63 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Filament %d (mixed)" +msgstr "" + +#, possible-boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "" + +#, possible-boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to be published in the 3MF file" +msgstr "" + +msgid "Publish 3MF Wiki" +msgstr "" + +msgid "Publish 3MF Video Guide" +msgstr "" + +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, possible-c-format, possible-boost-format msgid "Save %s as" msgstr "" @@ -9104,6 +9237,9 @@ msgstr "" msgid "Detach from parent" msgstr "" +msgid "Save without parent" +msgstr "" + msgid "Unique preset" msgstr "" @@ -9753,9 +9889,15 @@ msgstr "" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "" +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "" +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "" + msgid "Still print by object?" msgstr "" @@ -10104,9 +10246,6 @@ msgstr "" msgid "Printable space" msgstr "" -msgid "Printer Agent" -msgstr "" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "" @@ -10329,11 +10468,11 @@ msgstr "" msgid "No modifications need to be copied." msgstr "" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "" #, possible-c-format, possible-boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "" #, possible-c-format, possible-boost-format @@ -10466,12 +10605,6 @@ msgstr "" msgid "Capabilities" msgstr "" -msgid "Left: " -msgstr "" - -msgid "Right: " -msgstr "" - msgid "Show all presets (including incompatible)" msgstr "" @@ -10807,27 +10940,6 @@ msgstr "" msgid "Please choose the filament colour" msgstr "" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "" @@ -11296,15 +11408,19 @@ msgstr "" msgid "Copying of file %1% to %2% failed: %3%" msgstr "" +msgid "Downloading new vendor profile(s): " +msgstr "" + +#, possible-boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "" + +msgid "Failed to download vendor profile(s): " +msgstr "" + msgid "Please check any unsaved changes before updating the configuration." msgstr "" -msgid "Configuration package: " -msgstr "" - -msgid " updated to " -msgstr "" - msgid "Open G-code file:" msgstr "" @@ -11360,10 +11476,12 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "" -msgid "Grouping error: " +#, possible-boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" msgstr "" -msgid " can not be placed in the " +#, possible-boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" msgstr "" msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -11477,6 +11595,9 @@ msgstr "" msgid "%1% is too tall, and collisions will be caused." msgstr "" +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" @@ -11510,6 +11631,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11546,6 +11670,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -11793,6 +11920,9 @@ msgstr "" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "" +msgid "Printer Agent" +msgstr "" + msgid "Select the network agent implementation for printer communication." msgstr "" @@ -11874,7 +12004,7 @@ msgstr "" msgid "Other layers" msgstr "" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -12641,6 +12771,9 @@ msgstr "" msgid "Concentric" msgstr "" +msgid "Spiral Inset" +msgstr "" + msgid "Hilbert Curve" msgstr "" @@ -12710,7 +12843,7 @@ msgid "Top surface fill order" msgstr "" msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" @@ -12719,7 +12852,7 @@ msgid "Bottom surface fill order" msgstr "" msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" @@ -12807,6 +12940,12 @@ msgstr "" msgid "Clockwise" msgstr "" +msgid "Distance to rod" +msgstr "" + +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "" + msgid "Height to rod" msgstr "" @@ -12958,6 +13097,7 @@ msgstr "" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "" +msgctxt "second" msgid "s" msgstr "" @@ -13251,6 +13391,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -14398,6 +14580,7 @@ msgstr "" msgid "The allowed maximum output force of Y axis" msgstr "" +msgctxt "Newton" msgid "N" msgstr "" @@ -14407,6 +14590,7 @@ msgstr "" msgid "The machine bed mass load of Y axis" msgstr "" +msgctxt "gram" msgid "g" msgstr "" @@ -14675,7 +14859,7 @@ msgstr "" msgid "Reduce infill retraction" msgstr "" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -14712,6 +14896,15 @@ msgstr "" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "" +msgid "Print unsupported walls last" +msgstr "" + +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" + msgid "Outer walls" msgstr "" @@ -14831,7 +15024,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" @@ -14874,7 +15067,7 @@ msgstr "" msgid "Z-hop height" msgstr "" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "" msgid "Z-hop lower boundary" @@ -15121,6 +15314,27 @@ msgstr "" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe inward" +msgstr "" + +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" + +msgid "Wipe inward distance" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" + msgid "Wipe before external loop" msgstr "" @@ -15361,7 +15575,7 @@ msgstr "" msgid "No sparse layers (beta)" msgstr "" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." msgstr "" msgid "Prime all printing extruders" @@ -15382,6 +15596,24 @@ msgstr "" msgid "Cyclic" msgstr "" +msgid "Cyclic order" +msgstr "" + +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" + +msgid "Apply cyclic order to first layer" +msgstr "" + +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" + msgid "Slice gap closing radius" msgstr "" @@ -15391,9 +15623,6 @@ msgstr "" msgid "Slicing Mode" msgstr "" -msgid "Other" -msgstr "" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "" @@ -15834,6 +16063,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16290,6 +16525,12 @@ msgstr "" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "" +msgid "Strict mode" +msgstr "" + +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "" + msgid "Normative check" msgstr "" @@ -16302,10 +16543,22 @@ msgstr "" msgid "This outputs the model’s information." msgstr "" +msgid "Inspect mesh (JSON to stdout)" +msgstr "" + +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "" + +msgid "Inspect paint (JSON to stdout)" +msgstr "" + +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "" + msgid "Export Settings" msgstr "" -msgid "This exports settings to a file." +msgid "This exports settings to a file. Use - to write them to stdout." msgstr "" msgid "Send progress to pipe" @@ -16362,6 +16615,24 @@ msgstr "" msgid "Rotation angle around the Y axis in degrees." msgstr "" +msgid "Ground largest face" +msgstr "" + +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + +msgid "Ground face by normal" +msgstr "" + +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + +msgid "Ground face at point" +msgstr "" + +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + msgid "Scale the model by a float factor." msgstr "" @@ -16861,6 +17132,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" @@ -18191,17 +18465,17 @@ msgstr "" msgid "Only display the filament names with changes to filament presets." msgstr "" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" msgid "Please select at least one printer or filament." @@ -18416,7 +18690,7 @@ msgstr "" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "" -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "" msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -18458,7 +18732,7 @@ msgstr "" msgid "Stored logs" msgstr "" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "" msgid "Profiles" @@ -18523,7 +18797,7 @@ msgstr "" msgid "Authorizing..." msgstr "" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "" msgid "Could not parse server response." @@ -18961,7 +19235,7 @@ msgstr "" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "" -msgid "Fila Saving" +msgid "File Saving" msgstr "" msgid "Don't remind me again" @@ -19244,6 +19518,15 @@ msgstr "" msgid "Skipping objects." msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + +msgid "Ratio" +msgstr "" + msgid "Select Filament" msgstr "" @@ -19321,6 +19604,9 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" +msgid "s" +msgstr "" + msgid "Volumetric speed" msgstr "" @@ -19477,10 +19763,12 @@ msgstr "" msgid "Drying-Dehumidifying" msgstr "" -msgid " maximum drying temperature is " +#, possible-c-format, possible-boost-format +msgid "%s maximum drying temperature is %d°C." msgstr "" -msgid " minimum drying temperature is " +#, possible-c-format, possible-boost-format +msgid "%s minimum drying temperature is %d°C." msgstr "" msgid "This filament may not be completely dried." diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index b7eb022c0d..e1a06108b6 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2025-03-15 10:55+0100\n" "Last-Translator: \n" "Language-Team: \n" @@ -2522,15 +2522,6 @@ msgstr "Hi ha una actualització disponible. Obriu el quadre de diàleg del paqu msgid "%s has been removed." msgstr "%s s'ha eliminat." -msgid "Switching application language" -msgstr "Canvi d'idioma de l'aplicació" - -msgid "Select the language" -msgstr "Seleccioneu l'idioma" - -msgid "Language" -msgstr "Idioma" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -3015,6 +3006,10 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusiona amb" +# AI Translated +msgid "Decompose Color" +msgstr "Descompondre el color" + msgid "Delete this filament" msgstr "Elimina aquest filament" @@ -3316,6 +3311,10 @@ msgstr "Muntatge" msgid "Merge parts to an object" msgstr "Fusionar les peces en un objecte" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Utilitzar una alçada de capa variable juntament amb la subcapa de color mixt pot reduir la qualitat de la barreja de colors." + # AI Translated msgid "Add layers" msgstr "Afegir capes" @@ -3776,11 +3775,15 @@ msgstr "Retirar el filament actual al Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Canviar de via al Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "La temperatura màxima no pot superar " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "La temperatura màxima no pot superar %d" -msgid "The minmum temperature should not be less than " -msgstr "La temperatura mínima no hauria de ser inferior a " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "La temperatura mínima no hauria de ser inferior a %d" # AI Translated msgid "Type to filter..." @@ -4681,6 +4684,15 @@ msgstr "" "Error en copiar el codi-G temporal al codi-G de sortida. Potser la targeta SD està bloquejada contra escriptura?\n" "Missatge d'error: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Ha fallat la còpia del codi-G temporal al codi-G de sortida.\n" +"Missatge d'error: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Error en copiar el codi-G temporal al codi-G de sortida. Hi pot haver un problema amb el dispositiu de destinació, intenteu exportar novament o utilitzeu un dispositiu diferent. El codi-G de sortida malmès és a %1%.tmp." @@ -4893,7 +4905,7 @@ msgstr "" "\n" "El valor es restablirà a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "La paret addicional alternativa no funciona bé quan assegurar el gruix de la closca vertical està establert a Tot." msgid "" @@ -4939,7 +4951,7 @@ msgstr "" "NO - Mantenir l'alçada de la capa de suport independent" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height ha de ser més petit que layer_height.\n" @@ -4947,7 +4959,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profunditat de bloqueig ha de ser menor que la profunditat de la pell.\n" @@ -4987,6 +4999,9 @@ msgstr "" "Sí: canviar aquesta configuració i activar el mode d'espiral automàticament\n" "No - Renunciar a utilitzar el mode espiral aquesta vegada" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimint" @@ -5419,14 +5434,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "El valor %s està fora de rang. El rang vàlid és de %d a %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"És %s%% or %s %s?\n" -"SÍ per %s%%.\n" -"NO per %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "És %s%% or %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5448,29 +5460,22 @@ msgstr "Patró no vàlid. Utilitzeu N, N#K, o una llista separada per comes amb msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format no vàlid. Format vectorial esperat: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agents del sistema" -# AI Translated -msgid "No plugin selected" -msgstr "Cap connector seleccionat" - # AI Translated msgid "Add plugin" msgstr "Afegir connector" -# AI Translated -msgid "Select plugin" -msgstr "Seleccionar connector" - # AI Translated msgid "Remove plugin" msgstr "Eliminar connector" +# AI Translated +msgid "No plugin selected" +msgstr "Cap connector seleccionat" + # AI Translated msgid "Configure" msgstr "Configurar" @@ -5729,14 +5734,20 @@ msgstr "Estableix a l'òptim" msgid "Regroup filament" msgstr "Reagrupa filaments" -msgid "up to" -msgstr "fins a" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "fins a %1% mm" -msgid "above" -msgstr "sobre" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "per sobre de %1% mm" -msgid "from" -msgstr "des de" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "de %1% a %2% mm" msgid "Usage" msgstr "Ús" @@ -6099,7 +6110,7 @@ msgstr "Volum:" msgid "Size:" msgstr "Mida:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "S'han trobat conflictes de rutes gcode a la capa %d, Z = %.2lfmm. Si us plau, separeu els objectes conflictius més lluny ( %s <-> %s )." @@ -6413,16 +6424,24 @@ msgstr "Desa el projecte com a" msgid "Save current project as" msgstr "Desar el projecte actual com" +# AI Translated +msgid "Publish 3MF" +msgstr "Publicar 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exportar un fitxer 3MF amb la configuració seleccionada incrustada" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carregar un model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importar fitxer ZIP" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Carregar models continguts dins d'un arxiu zip" msgid "Import Configs" @@ -7696,6 +7715,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Aquesta opció no especifica cap tipus de capacitat del connector." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Aquesta opció especifica un tipus de capacitat del connector no reconegut: " + # AI Translated msgid "Plugin Selection" msgstr "Selecció de connectors" @@ -7956,6 +7983,10 @@ msgstr "Personalitzar la placa actual" msgid "The %s nozzle can not print %s." msgstr "El broquet %s no pot imprimir %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filament de color mixt en una impressora d'un sol extrusor requereix canvis de filament i purgues freqüents, cosa que pot augmentar considerablement el malbaratament i el risc d'obstrucció del broquet o del conducte de residus." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No es recomana barrejar %1% amb %2% en la impressió.\n" @@ -8081,6 +8112,26 @@ msgstr "Sincronitzar la llista de filaments des d'AMS" msgid "Set filaments to use" msgstr "Configurar els filaments a utilitzar" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Afegir filament mixt" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mixt" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Eliminar l'últim filament mixt" + +# AI Translated +msgid "Add mixed filament" +msgstr "Afegir filament mixt" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "El filament mixt té components no vàlids o incoherents. Torneu a editar les entrades afectades." + msgid "Search plate, object and part." msgstr "Cercar placa, objecte i peça." @@ -8088,6 +8139,18 @@ msgstr "Cercar placa, objecte i peça." msgid "Pellets" msgstr "Pèl·lets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "El filament mixt té referències de components trencades" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editar / Esborrar / Fusionar" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "El filament mixt de destinació utilitza aquest filament físic com a component. En fusionar-los s'eliminarà aquest filament físic i el filament mixt pot quedar no vàlid. Voleu continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "En completar l'operació, el projecte %s es tancarà i es crearà un nou projecte." @@ -8232,8 +8295,16 @@ msgid "Customized Preset" msgstr "Perfil personalitzat" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF8!" +msgid "Some published settings could not be applied:" +msgstr "No s'han pogut aplicar algunes opcions publicades:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "S'han canviat algunes ranures de filament:" + +# AI Translated +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Els noms dels components dins del fitxer STEP no tenen format UTF-8!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8255,10 +8326,10 @@ msgstr "El volum de l'objecte és zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L'objecte del fitxer %s és massa petit, i potser en metres o polzades.\n" -" Vols escalar a mil·límetres?" +"Vols escalar a mil·límetres?" msgid "Object too small" msgstr "Objecte massa petit" @@ -8275,6 +8346,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objecte de múltiples peces detectat" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associant les textures als filaments" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avís d'importació de textures" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar aquests fitxers com un sol objecte amb diverses peces?\n" @@ -8488,6 +8567,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronitza ara" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "No s'ha pogut importar la textura. El model sembla contenir dades de textura, però el procés d'importació no s'ha pogut completar. El model s'importarà només com a geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplicant els colors de textura..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Actualitzant la vista 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Colors de textura aplicats." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Podeu mantenir els perfils modificats al projecte nou o descartar-los" @@ -8619,6 +8714,21 @@ msgstr "Desa el fitxer Laminat com a:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El fitxer %s s'ha enviat a l'emmagatzematge de la impressora i es pot visualitzar a la impressora." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publicar el fitxer 3MF com a:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"No s'ha pogut exportar el fitxer 3MF publicat.\n" +"Comproveu si la carpeta existeix en línia o si altres programes tenen el fitxer obert." + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipus de broquet no està establert. Establiu el broquet i torneu-ho a provar." @@ -8833,9 +8943,6 @@ msgstr "Voleu continuar?" msgid "Language selection" msgstr "Selecció d'idiomes" -msgid "Switching application language while some presets are modified." -msgstr "Canviant l'idioma de l'aplicació mentre es modifiquen alguns perfils." - msgid "Asia-Pacific" msgstr "Àsia-Pacífic" @@ -8941,6 +9048,9 @@ msgstr "Ruta de la Instància Actual: " msgid "General" msgstr "General" +msgid "Language" +msgstr "Idioma" + msgid "Metric" msgstr "Mètric" @@ -9406,9 +9516,6 @@ msgstr "En desplaçar el control lliscant de capes a la previsualització lamina msgid "Dimmed layer brightness" msgstr "Brillantor de les capes enfosquides" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9780,6 +9887,10 @@ msgstr "Gerro en Espiral" msgid "First layer filament sequence" msgstr "Seqüència d'impressió de la primera capa" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La llista de filaments conté filaments mixtos. La seqüència de filaments personalitzada no tindrà efecte." + msgid "By Layer" msgstr "Per Capa" @@ -9808,9 +9919,6 @@ msgstr "Anar a la pàgina web de publicació de models" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparació pot trigar uns quants minuts. Si us plau, sigui pacient." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicació ha estat cancel·lada" @@ -9826,6 +9934,81 @@ msgstr "Carregant dades" msgid "Jump to webpage" msgstr "Anar a la pàgina web" +# AI Translated +msgid "Material" +msgstr "Material" + +# AI Translated +msgid "Mixed filament" +msgstr "Filament mixt" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Alguns filaments mixtos depenen de filaments que no es publicaran:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (mixt)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% necessita %2%, que no està activat." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% necessita %2%, el material del qual no es publicarà." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Per publicar un filament mixt, activeu tots els filaments que fa servir i trieu Publicació completa o compliu el seu requisit de Tipus." + +# AI Translated +msgid "Publish anyway" +msgstr "Publicar igualment" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publicar 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Seleccioneu quines opcions es publicaran al fitxer 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki de Publicar 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Guia en vídeo de Publicar 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filament mixt - es publica com un conjunt quan se selecciona \"Activar\" a dalt" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publicar aquest filament mixt i activar + publicar completament els seus filaments components" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publicar aquesta ranura de filament al fitxer 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Publicació completa" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Incrustar tot el filament d'aquesta ranura al fitxer 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrar els no seleccionats" + #, c-format, boost-format msgid "Save %s as" msgstr "Desar %s com a" @@ -9843,6 +10026,10 @@ msgstr "Copia en aquest perfil tots els valors heretats del perfil pare i elimin msgid "Detach from parent" msgstr "Desvincula del pare" +# AI Translated +msgid "Save without parent" +msgstr "Desar sense pare" + # AI Translated msgid "Unique preset" msgstr "Perfil únic" @@ -10550,9 +10737,17 @@ msgstr "Es necessita una torre de purga per a la detecció d'acumulació. Pot ha msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Activar tant l'alçada Z precisa com la torre de purga pot causar errors de tall. Voleu activar l'alçada Z precisa igualment?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "El timelapse suau necessita una Torre de Purga a cada capa, cosa que no és compatible amb \"Sense capes poc denses\". S'ha desactivat \"Sense capes poc denses\"." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "La Torre de Purga és necessària per a un timelapse suau. Pot haver-hi defectes en el model sense Torre de Purga. Vols habilitar la Torre de Purga?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Sense capes poc denses\" no és compatible amb el timelapse suau, que necessita una Torre de Purga a cada capa. El timelapse ha canviat al mode tradicional." + msgid "Still print by object?" msgstr "Continuar imprimint per objecte?" @@ -10930,9 +11125,6 @@ msgstr "Perfils de processos compatibles" msgid "Printable space" msgstr "Espai imprimible" -msgid "Printer Agent" -msgstr "Agent de la impressora" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Seleccioneu la implementació de l'agent de xarxa per a la comunicació amb la impressora. Els agents disponibles es registren a l'inici." @@ -11189,12 +11381,12 @@ msgid "No modifications need to be copied." msgstr "No cal copiar cap modificació." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar els paràmetres" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar els paràmetres de %s" # AI Translated @@ -11353,14 +11545,6 @@ msgstr "Nombre d'extrusors" msgid "Capabilities" msgstr "Capacitats" -# AI Translated -msgid "Left: " -msgstr "Esquerra: " - -# AI Translated -msgid "Right: " -msgstr "Dreta: " - msgid "Show all presets (including incompatible)" msgstr "Mostra tots els perfils ( inclosos els incompatibles )" @@ -11715,29 +11899,6 @@ msgstr "Volums de purga per al canvi de filament" msgid "Please choose the filament colour" msgstr "Trieu el color del filament" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La visualització en directe nativa de Wayland requereix el sink de vídeo GTK de GStreamer. Instal·leu el connector gtksink per a GStreamer i reinicieu l'OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "No s'ha pogut inicialitzar el sink de vídeo natiu de GStreamer per a Wayland. Comproveu la instal·lació del connector GTK de GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "El Windows Media Player és necessari per a aquesta tasca. Voleu habilitar el \"Windows Media Player\" per al vostre sistema operatiu?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource no s'ha registrat correctament per a la reproducció multimèdia! Premeu Sí per tornar-lo a registrar. Seràs promocionat dues vegades" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Falta el component BambuSource registrat per a la reproducció multimèdia! Reinstal·leu OrcaSlicer o cerqueu ajuda a la comunitat." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Utilitzar un BambuSource des d'una instal·lació diferent, la reproducció de vídeo pot no funcionar correctament! Premeu Sí per solucionar-ho." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Al vostre sistema li falten còdecs H.264 per al GStreamer, necessaris per reproduir vídeo. (Proveu d'instal·lar els paquets gstreamer1.0-plugins-bad o gstreamer1.0-libav i, a continuació, reinicieu Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "L'agent del núvol no està disponible. Reinicieu l'OrcaSlicer i torneu-ho a provar." @@ -12236,15 +12397,22 @@ msgstr "Reparació cancel·lada" msgid "Copying of file %1% to %2% failed: %3%" msgstr "La còpia del fitxer %1% a %2% ha fallat: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "S'estan descarregant perfils de fabricant nous: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Paquet de configuració: %1% actualitzat a %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "No s'han pogut descarregar els perfils de fabricant: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Cal comprovar els canvis no desats abans de les actualitzacions de configuració." -msgid "Configuration package: " -msgstr "Paquet de configuració: " - -msgid " updated to " -msgstr " actualitzat a " - msgid "Open G-code file:" msgstr "Obre el fitxer de Codi-G:" @@ -12309,11 +12477,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "L'Input Shaping només és compatible amb Klipper, RepRapFirmware i Marlin 2." -msgid "Grouping error: " -msgstr "Error d'agrupació: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Error d'agrupació: %1% no es pot col·locar al broquet esquerre" -msgid " can not be placed in the " -msgstr " no es pot col·locar al " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Error d'agrupació: %1% no es pot col·locar al broquet dret" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12428,6 +12600,10 @@ msgstr "%1% està massa a prop d'altres i es poden produir col·lisions." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% és massa alt i es provocaran col·lisions." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "La posició relativa del model i la Torre de Purga no compleix els requisits de la funció \"Sense capes poc denses\". Ajusteu-ne les posicions relatives, reduïu l'alçada del model o desactiveu \"Sense capes poc denses\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " està massa a prop de l'àrea d'exclusió, pot haver-hi col·lisions en imprimir." @@ -12465,6 +12641,10 @@ msgstr "Si tot i així voleu imprimir, podeu activar l'opció a Preferències / msgid "No extrusions under current settings." msgstr "No hi ha extrusions a la configuració actual." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "S'està utilitzant un filament mixt amb degradat, però 'Subcapa de color mixt' està desactivat. El degradat no s'imprimirà." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "El mode suau de timelapse no està permès quan la seqüència \"Per objecte\" està habilitada." @@ -12501,6 +12681,10 @@ msgstr "Potser voleu reduir la mida del model o canviar la configuració d'impre msgid "Variable layer height is not supported with Organic supports." msgstr "Alçada de Capa Variable no és compatible amb suports Orgànics." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "El filament de la torre de purga no pot ser un filament mixt." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "És possible que els diferents diàmetres de broquet i els diferents diàmetres de filament no funcionin bé quan la torre principal està activada. És molt experimental, així que si us plau, procediu amb precaució." @@ -12784,6 +12968,9 @@ msgstr "Utilitzar 3MF en lloc de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activeu-ho si la impressora accepta un fitxer 3MF com a treball d'impressió. Quan està activat, Orca Slicer envia el fitxer laminat com a .gcode.3mf, en lloc d'un fitxer .gcode simple." +msgid "Printer Agent" +msgstr "Agent de la impressora" + msgid "Select the network agent implementation for printer communication." msgstr "Seleccioneu la implementació de l'agent de xarxa per a la comunicació amb la impressora." @@ -12868,8 +13055,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Altres capes" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura del llit per a les capes excepte la primera. Un valor de 0 significa que el filament no admet la impressió sobre el Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Temperatura del llit de les capes excepte la inicial. Un valor de 0 significa que el filament no admet la impressió sobre el Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Temperatura del llit de les capes excepte la inicial. El valor 0 significa que el filament no admet imprimir a una Base Freda." @@ -13860,6 +14047,10 @@ msgstr "Alineat Rectilini" msgid "Concentric" msgstr "Concèntric" +# AI Translated +msgid "Spiral Inset" +msgstr "Espiral interior" + msgid "Hilbert Curve" msgstr "Corba de Hilbert" @@ -13951,13 +14142,13 @@ msgstr "Ordre d'emplenament de la superfície superior" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direcció en què s'omplen les superfícies superiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n" -"Cap a fora comença al centre de la superfície, de manera que l'excés de material es desplaça cap a la vora, on és menys visible. Cap a dins comença a la vora i acaba amb les corbes tancades del centre.\n" -"Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció." +"Direcció en què s'omplen les superfícies superiors quan es fa servir un patró basat en el centre (Concèntric, Espiral interior, Acords d'Arquimedes, Octograma en Espiral).\n" +"Cap a fora comença al centre de la superfície, de manera que el material sobrant s'empeny cap a la vora, on és menys visible. Cap a dins comença a la vora i acaba amb les corbes tancades del centre.\n" +"Per defecte fa servir l'ordre del camí més curt, que pot anar en qualsevol dels dos sentits." # AI Translated msgid "Bottom surface fill order" @@ -13965,13 +14156,13 @@ msgstr "Ordre d'emplenament de la superfície inferior" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direcció en què s'omplen les superfícies inferiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n" -"Cap a dins comença cada superfície amb les corbes exteriors més amples, cosa que millora l'adherència de la capa inicial en plaques on les corbes tancades del centre poden no adherir-se. Cap a fora comença al centre i desplaça l'excés de material cap a la vora.\n" -"Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció." +"Direcció en què s'omplen les superfícies inferiors quan es fa servir un patró basat en el centre (Concèntric, Espiral interior, Acords d'Arquimedes, Octograma en Espiral).\n" +"Cap a dins comença cada superfície per les corbes exteriors més amples, cosa que millora l'adhesió de la capa inicial en llits on les corbes tancades del centre poden no agafar-se. Cap a fora comença al centre i empeny el material sobrant cap a la vora.\n" +"Per defecte fa servir l'ordre del camí més curt, que pot anar en qualsevol dels dos sentits." msgid "Internal solid infill pattern" msgstr "Patró de farciment sòlid intern" @@ -14076,6 +14267,14 @@ msgstr "En sentit contrari a les agulles del rellotge" msgid "Clockwise" msgstr "En el sentit de les agulles del rellotge" +# AI Translated +msgid "Distance to rod" +msgstr "Distància a la barra" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Distància horitzontal de la punta del broquet a la vora més llunyana de la barra. Es fa servir per evitar col·lisions en la impressió per objecte." + msgid "Height to rod" msgstr "Alçada a la tija" @@ -14263,6 +14462,8 @@ msgstr "Temps de capa" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "S'habilitarà el ventilador de refrigeració de peces per a capes el temps estimat de les quals sigui inferior a aquest valor. La velocitat del ventilador s'interpola entre les velocitats mínima i màxima del ventilador segons el temps d'impressió per capes" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14572,6 +14773,62 @@ msgstr "Material de suport" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de suport s'utilitza habitualment per imprimir interfície de suport i suport" +# AI Translated +msgid "Is mixed filament" +msgstr "És filament mixt" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica si aquesta ranura de filament és un filament mixt compost per diversos filaments físics" + +# AI Translated +msgid "Mixed filament components" +msgstr "Components del filament mixt" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índexs (començant per 1) dels filaments components, separats per comes; p. ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporcions de subcapa del filament mixt" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valors de proporció separats per comes que sumin 1.0; p. ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Degradat del filament mixt" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Activa el mode de degradat en direcció Z per a les subcapes del filament mixt. En activar-lo, les proporcions de les subcapes varien linealment entre capes." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Rang del degradat del filament mixt" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporcions inicial i final del primer component en el mode de degradat. Parell separat per comes; p. ex. \"0.10,0.90\" significa del 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Corba del degradat del filament mixt" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Corba personalitzada opcional, a l'estil de Photoshop, que assigna el progrés en Z a la proporció del primer component. Es codifica com a punts de control separats per barres verticals, amb el format \"x,y\" (heretat) o \"x,y,m_in,m_out\" quan cal anul·lar la tangent (un valor buit o \"nan\" fa servir el valor PCHIP predeterminat). x està dins de [0,1]; y es limita al rang de proporcions configurat; p. ex. \"0,0.15|0.5,0.50|1,0.85\". Si es deixa buit, s'utilitza el gradient_range lineal." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Degradat per peça del filament mixt" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quan el mode de degradat està activat, aplica el degradat a cada peça d'un muntatge de manera independent en lloc de tractar tot el muntatge com un únic rang Z." + msgid "Filament printable" msgstr "Filament imprimible" @@ -15860,6 +16117,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Força de sortida màxima permesa de l'eix Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15872,6 +16130,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Càrrega de massa del llit de la màquina a l'eix Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16197,7 +16456,7 @@ msgid "Reduce infill retraction" msgstr "Reduir la retracció de farciment" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "No retrau quan el desplaçament està totalment a la zona de farciment. Això vol dir que l'oozing( goteig ) queda amagat. Això pot reduir els temps de retracció per a models complexos i estalviar temps d'impressió, però fer que el laminat i la generació de Codi-G siguin més lents. Tingueu en compte que el salt en Z tampoc es realitza a les zones on s'omet la retracció." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16234,6 +16493,20 @@ msgstr "Detectar voladís de perímetre" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Detectar el percentatge de voladís en relació amb l'amplada de la línia i utilitzar una velocitat diferent per imprimir. Per al voladís del 100%%, s'utilitza la velocitat de pont." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Imprimir al final els perímetres sense suport" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Els bucles de perímetre que queden completament a l'aire s'imprimeixen quan alguna cosa els pot sostenir:\n" +"s'extrudeixen després dels altres perímetres de la seva illa, començant pel més interior, sigui quin sigui l'ordre de perímetres.\n" +"Un bucle que només poden ancorar els ponts d'aquesta capa espera que s'imprimeixin aquests ponts, mentre que un bucle que va al costat d'un perímetre amb suport manté el seu lloc abans del farciment, que el necessita com a ancoratge." + # AI Translated msgid "Outer walls" msgstr "Perímetres exteriors" @@ -16373,7 +16646,7 @@ msgstr "Quantitat de retracció després de netejar" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Longitud de la retracció ràpida després de netejar, relativa a la longitud de retracció.\n" @@ -16420,7 +16693,7 @@ msgstr "Quan s'activa la retracció abans d'un canvi d'eina, el filament es reti msgid "Z-hop height" msgstr "Alçada Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Cade vegada que es fa una retracció, s'aixeca una mica el broquet per crear espai lliure entre el broquet i la impressió. Evita que el broquet colpegi la impressió en els desplaçaments. L'ús de la línia espiral per aixecar z pot evitar l'aparició de fils" msgid "Z-hop lower boundary" @@ -16682,6 +16955,39 @@ msgstr "Neteja en bucles" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Per minimitzar la visibilitat de la costura en una extrusió de bucle tancat, s'executa un petit moviment cap a l'interior abans que l'extrusora surti del bucle." +# AI Translated +msgid "Wipe inward" +msgstr "Netejar cap a dins" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Només s'aplica als perímetres exteriors, inclosos els contorns dels forats. Durant la neteja mou el broquet calent cap als perímetres interiors ja impresos per reduir el reescalfament del plàstic acabat d'imprimir i les marques de costura.\n" +"\n" +"És especialment útil amb alçades de capa per sota de 0,1 mm, on les marques de neteja es veuen més.\n" +"\n" +"Fa servir la neteja normal si no hi ha cap perímetre interior contigu ja imprès (zones d'un sol perímetre o ordre de perímetres Exterior/Interior) o si no es troba cap trajectòria cap a dins amb suport, per exemple a cantonades tancades o a buits de la costura." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Distància de neteja cap a dins" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Distància que es desplaça la trajectòria de neteja allunyant-se del perímetre exterior, indicada en mil·límetres o com a percentatge de l'amplada d'extrusió real del perímetre exterior.\n" +"\n" +"Per exemple, 50% desplaça la trajectòria la meitat de l'amplada del perímetre exterior. El desplaçament efectiu està limitat tant per l'amplada real del perímetre exterior com per l'espai disponible fins al perímetre contigu, de manera que els valors per sobre de 100% o una distància absoluta equivalent no tenen cap efecte addicional. Poseu-hi 0 per desactivar el desplaçament." + msgid "Wipe before external loop" msgstr "Netejar abans del bucle extern" @@ -16946,8 +17252,9 @@ msgstr "Recull la nova eina sense esperar que arribi a la temperatura d'impressi msgid "No sparse layers (beta)" msgstr "Sense capes poc denses( beta )" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Si està habilitat, la Torre de Purga no s'imprimeix en capes sense canvis d'eina. En capes amb canvi d'eina, l'extrusor es desplaçarà cap avall per imprimir la Torre de Purga. L'usuari és responsable de garantir que no hi hagi col·lisió amb la impressió." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Si s'activa, la Torre de Purga no s'imprimirà a les capes sense canvis d'eina. A les capes amb un canvi d'eina, l'extrusor baixarà per imprimir la Torre de Purga, de manera que la torre queda per sota del model i el capçal ha de baixar fins a ella. Es rebutgen les disposicions en què això xocaria amb un objecte ja imprès. No té cap efecte amb el timelapse suau ni amb la detecció d'obstruccions al broquet, que necessiten una torre a cada capa." msgid "Prime all printing extruders" msgstr "Purgar tots els extrusors d'impressió" @@ -16973,6 +17280,34 @@ msgstr "" msgid "Cyclic" msgstr "Cíclic" +# AI Translated +msgid "Cyclic order" +msgstr "Ordre cíclic" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Seqüència de filaments personalitzada que fa servir l'ordre cíclic de canvis d'eina, com a números de filament separats per comes (p. ex. \"3,2,1,4\").\n" +"Cada capa imprimeix els seus filaments seguint aquesta seqüència; els filaments que no hi consten s'imprimeixen al final, en ordre ascendent.\n" +"Deixeu-ho buit per recórrer els filaments en ordre ascendent." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Aplicar l'ordre cíclic a la capa inicial" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Aplica l'ordre cíclic de canvis d'eina també a la capa inicial.\n" +"Per defecte està desactivat, perquè la capa inicial s'ordena en lloc d'això per aconseguir la millor adhesió al llit: els filaments que imprimeixen detalls petits i fràgils de la capa inicial s'imprimeixen al final, de manera que els canvis d'eina i els recorreguts posteriors tenen menys probabilitats d'arrencar aquestes peces mal ancorades. Aquest ordre de la capa inicial també respecta una seqüència de filaments personalitzada per a la capa inicial quan se n'ha definit una. L'avantatge de l'ordre cíclic (els canvis d'eina addicionals donen a cada capa més temps per refredar-se) no s'aplica a la capa inicial, que s'imprimeix a poc a poc i calenta per afavorir l'adhesió.\n" +"Activeu-ho només si necessiteu exactament la mateixa seqüència d'eines a totes les capes, inclosa la primera, a costa d'aquesta optimització de l'adhesió." + msgid "Slice gap closing radius" msgstr "Radi de tancament dels buits en laminar" @@ -16982,9 +17317,6 @@ msgstr "Les esquerdes de menys de dues vegades el radi de tancament de buits s'o msgid "Slicing Mode" msgstr "Mode de laminat" -msgid "Other" -msgstr "Altre" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Utilitzeu \"Parell-imparell\" per als models d'avió 3DLabPrint. Utilitzeu \"Tancar forats\" per tancar tots els forats del model." @@ -17482,6 +17814,14 @@ msgstr "" "\n" "L'establiment d'un valor en la quantitat de retractació abans de l'esborrat es realitzarà qualsevol retracció en excés abans de la neteja, sinó es realitzarà després." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Subcapa de color mixt" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Activa la divisió en subcapes de color mixt. En activar-la, les capes que contenen filaments de color mixt es divideixen en subcapes per aconseguir efectes de barreja de colors." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La Torre de Purga es pot utilitzar per netejar els residus al broquet i estabilitzar la pressió de la cambra dins del broquet, per tal d'evitar defectes d'aparença en imprimir objectes." @@ -17994,6 +18334,14 @@ msgstr "No comprovar" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "No executar cap comprovació de validesa, com ara la comprovació de conflictes de trajectòria al Codi-G." +# AI Translated +msgid "Strict mode" +msgstr "Mode estricte" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Surt amb un codi diferent de zero quan el llescat genera un avís no crític que altrament només es registraria, com ara un model que necessita suports mentre els suports estan desactivats. Feu-ho servir en CI o en processos automatitzats que mai no han de lliurar un llescat subtilment defectuós. Cadascun d'aquests avisos també apareix amb una classe estable a la matriu `warnings` de result.json, que només s'escriu a Linux. No es pot combinar amb --no-check, que omet la comprovació de suports." + msgid "Normative check" msgstr "Comprovació normativa" @@ -18006,11 +18354,28 @@ msgstr "Informació del model de sortida" msgid "This outputs the model’s information." msgstr "Emet la informació del model." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Inspeccionar la malla (JSON a stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Escriu a stdout un resum JSON de cada objecte carregat i després surt: les seves capses contenidores i les cares de l'envolupant convexa sobre les quals es pot recolzar, amb les normals, àrees i centres corresponents. Aquestes són les cares entre les quals trien les opcions --ground-*. Alternativa llegible per màquina a --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Inspeccionar el pintat (JSON a stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Escriu un resum JSON estructurat de cada capa pintada (suports, costura, color MMU, pell difusa) ja desada al model carregat — nombre de facetes, àrea de superfície i capsa contenidora local a la malla per a cada estat — i després surt. Alternativa llegible per màquina a obrir les eines de pintat a la interfície." + msgid "Export Settings" msgstr "Exportar Configuració" -msgid "This exports settings to a file." -msgstr "Exporta la configuració a un fitxer." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Això exporta la configuració a un fitxer. Feu servir - per escriure-la a stdout." msgid "Send progress to pipe" msgstr "Envia el progrés a la canalització" @@ -18066,6 +18431,30 @@ msgstr "Rotar al voltant de l'eix Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Angle de rotació al voltant de l'eix Y en graus." +# AI Translated +msgid "Ground largest face" +msgstr "Recolzar sobre la cara més gran" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Recolza cada objecte sobre la cara més gran de la seva envolupant convexa i el deixa caure sobre el llit. Entre cares igual de grans es conserva la que ja mira cap avall. Els objectes sense una cara prou gran per recolzar-s'hi es deixen tal com estan. Les transformacions s'apliquen en l'ordre de la línia d'ordres, de manera que es respecten les rotacions indicades abans d'aquesta opció. --orient 1 s'executa després de totes les transformacions i substitueix l'orientació." + +# AI Translated +msgid "Ground face by normal" +msgstr "Recolzar sobre la cara segons la normal" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Recolza cada objecte sobre la cara de l'envolupant convexa la normal exterior de la qual sigui més propera a la direcció NX,NY,NZ i el deixa caure sobre el llit. La direcció és en coordenades de l'objecte, que inclouen les rotacions indicades abans d'aquesta opció i coincideixen amb els eixos de la safata llevat que el fitxer d'entrada giri l'objecte. Per exemple, 1,0,0 recolza l'objecte sobre el seu costat +X. --orient 1 s'executa després de totes les transformacions i substitueix l'orientació." + +# AI Translated +msgid "Ground face at point" +msgstr "Recolzar sobre la cara en un punt" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Recolza cada objecte sobre la cara de l'envolupant convexa que conté el punt X,Y,Z i el deixa caure sobre el llit. El punt és en coordenades de l'objecte, que inclouen les rotacions indicades abans d'aquesta opció; --inspect-mesh indica els centres de les cares en aquestes coordenades. Els objectes sense una cara així es deixen tal com estan, i l'execució falla si cap objecte en té. --orient 1 s'executa després de totes les transformacions i substitueix l'orientació." + msgid "Scale the model by a float factor." msgstr "Escala el model amb un factor flotant" @@ -18573,6 +18962,10 @@ msgstr "La generació de malla del fitxer del model ha fallat o la forma no és msgid "The supplied file couldn't be read because it's empty." msgstr "El fitxer subministrat no s'ha pogut llegir perquè està buit" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "El format del fitxer és incompatible i no es pot analitzar." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fitxer desconegut. El fitxer d'entrada ha de tenir extensió .stl, .obj, .amf( .xml )." @@ -20071,19 +20464,19 @@ msgstr "Mostrar només els noms de les impressores amb canvis als perfils d'impr msgid "Only display the filament names with changes to filament presets." msgstr "Mostrar només els noms dels filaments amb canvis en els perfils de filament." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Només es mostraran els noms de les impressores amb perfils d'impressora d'usuari i cada perfil que trieu s'exportarà com a fitxer zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Només es mostraran els noms dels filaments amb perfils de filament d'usuari, \n" "i tots els perfils de filament d'usuari de cada nom de filament que seleccioneu s'exportaran com a zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Només es mostraran els noms de les impressores amb perfils de processament modificats, \n" "I tots els valors perfils del procés d'usuari de cada nom d'impressora que seleccioneu s'exportaran com a ZIP." @@ -20328,7 +20721,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Necessitem informació per diagnosticar l'origen del problema. Consulteu la pàgina wiki per a una guia detallada." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "El botó Empaquetar recull el fitxer del projecte i els registres de la sessió actual en un fitxer zip." # AI Translated @@ -20384,7 +20777,7 @@ msgid "Stored logs" msgstr "Registres emmagatzemats" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Empaqueta tots els registres emmagatzemats en un fitxer zip." # AI Translated @@ -20472,7 +20865,7 @@ msgid "Authorizing..." msgstr "Autoritzant..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Error. No es pot obtenir el testimoni d'api per a l'autorització" # AI Translated @@ -20928,8 +21321,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Activar l'assignació intel·ligent de filament: assigna un filament a diversos broquets per maximitzar l'estalvi" # AI Translated -msgid "Fila Saving" -msgstr "Estalvi de filament" +msgid "File Saving" +msgstr "Desament de fitxers" msgid "Don't remind me again" msgstr "No m'ho recordis més" @@ -21258,6 +21651,18 @@ msgstr "Aquesta acció no es pot desfer. Continuar?" msgid "Skipping objects." msgstr "Ometent objectes." +# AI Translated +msgid "Material Ratio" +msgstr "Proporció de material" + +# AI Translated +msgid "Model Height" +msgstr "Alçada del model" + +# AI Translated +msgid "Ratio" +msgstr "Proporció" + msgid "Select Filament" msgstr "Seleccioneu filament" @@ -21338,6 +21743,9 @@ msgstr "Reinicia ara" msgid "NO RAMMING AT ALL" msgstr "SENSE EMPENTA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocitat volumètrica" @@ -21538,12 +21946,14 @@ msgid "Drying-Dehumidifying" msgstr "Assecatge - Deshumidificació" # AI Translated -msgid " maximum drying temperature is " -msgstr " la temperatura màxima d'assecatge és " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "La temperatura màxima d'assecatge de %s és %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " la temperatura mínima d'assecatge és " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "La temperatura mínima d'assecatge de %s és %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21989,6 +22399,132 @@ msgstr "" "Evitar la deformació( warping )\n" "Sabíeu que quan imprimiu materials propensos a deformar-se, com ara l'ABS, augmentar adequadament la temperatura del llit pot reduir la probabilitat de deformació?" +#~ msgid "Other" +#~ msgstr "Altre" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Esquerra: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Dreta: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "La temperatura màxima no pot superar " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "La temperatura mínima no hauria de ser inferior a " + +#~ msgid "up to" +#~ msgstr "fins a" + +#~ msgid "above" +#~ msgstr "sobre" + +#~ msgid "from" +#~ msgstr "des de" + +#~ msgid "Configuration package: " +#~ msgstr "Paquet de configuració: " + +#~ msgid " updated to " +#~ msgstr " actualitzat a " + +#~ msgid "Grouping error: " +#~ msgstr "Error d'agrupació: " + +#~ msgid " can not be placed in the " +#~ msgstr " no es pot col·locar al " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " la temperatura màxima d'assecatge és " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " la temperatura mínima d'assecatge és " + +# AI Translated +#~ msgid "needs" +#~ msgstr "necessita" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "no activat" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "material no publicat" + +#~ msgid "Select the language" +#~ msgstr "Seleccioneu l'idioma" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Seleccionar connector" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direcció en què s'omplen les superfícies superiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n" +#~ "Cap a fora comença al centre de la superfície, de manera que l'excés de material es desplaça cap a la vora, on és menys visible. Cap a dins comença a la vora i acaba amb les corbes tancades del centre.\n" +#~ "Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direcció en què s'omplen les superfícies inferiors quan s'utilitza un patró centrat (Concèntric, Acords d'Arquimedes, Octograma en Espiral).\n" +#~ "Cap a dins comença cada superfície amb les corbes exteriors més amples, cosa que millora l'adherència de la capa inicial en plaques on les corbes tancades del centre poden no adherir-se. Cap a fora comença al centre i desplaça l'excés de material cap a la vora.\n" +#~ "Per defecte utilitza l'ordenació pel camí més curt, que pot anar en qualsevol direcció." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Si està habilitat, la Torre de Purga no s'imprimeix en capes sense canvis d'eina. En capes amb canvi d'eina, l'extrusor es desplaçarà cap avall per imprimir la Torre de Purga. L'usuari és responsable de garantir que no hi hagi col·lisió amb la impressió." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exporta la configuració a un fitxer." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La visualització en directe nativa de Wayland requereix el sink de vídeo GTK de GStreamer. Instal·leu el connector gtksink per a GStreamer i reinicieu l'OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "No s'ha pogut inicialitzar el sink de vídeo natiu de GStreamer per a Wayland. Comproveu la instal·lació del connector GTK de GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "El Windows Media Player és necessari per a aquesta tasca. Voleu habilitar el \"Windows Media Player\" per al vostre sistema operatiu?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource no s'ha registrat correctament per a la reproducció multimèdia! Premeu Sí per tornar-lo a registrar. Seràs promocionat dues vegades" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Falta el component BambuSource registrat per a la reproducció multimèdia! Reinstal·leu OrcaSlicer o cerqueu ajuda a la comunitat." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Utilitzar un BambuSource des d'una instal·lació diferent, la reproducció de vídeo pot no funcionar correctament! Premeu Sí per solucionar-ho." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Al vostre sistema li falten còdecs H.264 per al GStreamer, necessaris per reproduir vídeo. (Proveu d'instal·lar els paquets gstreamer1.0-plugins-bad o gstreamer1.0-libav i, a continuació, reinicieu Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Estalvi de filament" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index b521a8073b..9dd405673e 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: Jakub Hencl\n" "Language-Team: \n" @@ -2482,15 +2482,6 @@ msgstr "Je k dispozici aktualizace. Otevřete dialog balíčku předvoleb a prov msgid "%s has been removed." msgstr "%s bylo odstraněno." -msgid "Switching application language" -msgstr "Přepnutí jazyka aplikace" - -msgid "Select the language" -msgstr "Zvolte jazyk" - -msgid "Language" -msgstr "Jazyk" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2977,6 +2968,10 @@ msgstr "Upravit" msgid "Merge with" msgstr "Sloučit s" +# AI Translated +msgid "Decompose Color" +msgstr "Rozložit barvu" + msgid "Delete this filament" msgstr "Smazat tento filament" @@ -3279,6 +3274,10 @@ msgstr "Sestava" msgid "Merge parts to an object" msgstr "Sloučit části do objektu" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Použití proměnné výšky vrstvy společně s podvrstvou míchané barvy může zhoršit kvalitu míchání barev." + # AI Translated msgid "Add layers" msgstr "Přidat vrstvy" @@ -3743,11 +3742,15 @@ msgstr "Vytáhnout aktuální filament zpět na Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Přepnout dráhu na Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "Maximální teplota nesmí překročit " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Maximální teplota nesmí překročit %d" -msgid "The minmum temperature should not be less than " -msgstr "Minimální teplota nesmí být nižší než " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Minimální teplota nesmí být nižší než %d" # AI Translated msgid "Type to filter..." @@ -4641,6 +4644,15 @@ msgstr "" "Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Možná je SD karta uzamčená pro zápis?\n" "Chybová zpráva: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Kopírování dočasného G-kódu do výstupního G-kódu selhalo.\n" +"Chybová zpráva: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Kopírování dočasného G-kódu do výstupního G-kódu selhalo. Může být problém s cílovým zařízením, zkuste prosím exportovat znovu nebo použijte jiné zařízení. Poškozený výstupní G-kód je na %1%.tmp." @@ -4851,7 +4863,7 @@ msgstr "" "\n" "Hodnota bude nastavena na 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Střídavá přídavná stěna nefunguje správně, pokud je zajištění tloušťky svislé stěny nastaveno na Vše." msgid "" @@ -4897,7 +4909,7 @@ msgstr "" "NE – Ponechat nezávislou výšku podpůrné vrstvy" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height musí být menší než layer_height.\n" @@ -4905,7 +4917,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Hloubka zamčení musí být menší než hloubka krycí vrstvy.\n" @@ -4945,6 +4957,10 @@ msgstr "" "Ano – změnit tato nastavení a automaticky povolit spirálový režim\n" "Ne – tentokrát nepoužít spirálový režim" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Tisk" @@ -5375,14 +5391,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Hodnota %s je mimo rozsah. Platný rozsah je od %d do %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Je to %s%% nebo %s %s?\n" -"ANO pro %s%%,\n" -"NE pro %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Je to %s%% nebo %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5404,30 +5417,22 @@ msgstr "Neplatný vzor. Použijte N, N#K nebo seznam oddělený čárkami s voli msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Neplatný formát. Očekávaný vektorový formát: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Systémoví agenti" -# AI Translated -msgid "No plugin selected" -msgstr "Není vybrán žádný plugin" - # AI Translated msgid "Add plugin" msgstr "Přidat plugin" -# AI Translated -msgid "Select plugin" -msgstr "Vybrat plugin" - # AI Translated msgid "Remove plugin" msgstr "Odebrat plugin" +# AI Translated +msgid "No plugin selected" +msgstr "Není vybrán žádný plugin" + # AI Translated msgid "Configure" msgstr "Konfigurovat" @@ -5688,14 +5693,20 @@ msgstr "Nastavit optimální" msgid "Regroup filament" msgstr "Znovu seskupit filament" -msgid "up to" -msgstr "až do" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "až do %1% mm" -msgid "above" -msgstr "nad" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "nad %1% mm" -msgid "from" -msgstr "Od" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "od %1% do %2% mm" msgid "Usage" msgstr "Využití" @@ -6061,7 +6072,7 @@ msgstr "Objem:" msgid "Size:" msgstr "Velikost:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Byly nalezeny konflikty drah G-kódu ve vrstvě %d, Z = %.2lf mm. Oddělte prosím konfliktní objekty více od sebe (%s <-> %s)." @@ -6374,16 +6385,24 @@ msgstr "Uložit projekt jako" msgid "Save current project as" msgstr "Uložit aktuální projekt jako" +# AI Translated +msgid "Publish 3MF" +msgstr "Publikovat 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exportovat soubor 3MF s vloženými vybranými nastaveními" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importovat 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Načíst model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importovat ZIP archiv" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Načíst modely obsažené v zip archivu" msgid "Import Configs" @@ -7663,6 +7682,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Spodní" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Toto nastavení neurčuje typ schopnosti pluginu." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Toto nastavení určuje neznámý typ schopnosti pluginu: " + # AI Translated msgid "Plugin Selection" msgstr "Výběr pluginů" @@ -7921,6 +7948,10 @@ msgstr "Přizpůsobit aktuální desku" msgid "The %s nozzle can not print %s." msgstr "Tryska %s nemůže tisknout %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Tisk filamentu s míchanou barvou na tiskárně s jedním extruderem vyžaduje časté výměny filamentu a čištění, což může výrazně zvýšit množství odpadu a riziko ucpání trysky nebo odpadního skluzu." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Míchání %1% s %2% při tisku není doporučeno.\n" @@ -8050,12 +8081,44 @@ msgstr "Synchronizovat seznam filamentů z AMS" msgid "Set filaments to use" msgstr "Nastavit používané filamenty" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Přidat míchaný filament" + +# AI Translated +msgid "Mixed Filament" +msgstr "Míchaný filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Odebrat poslední míchaný filament" + +# AI Translated +msgid "Add mixed filament" +msgstr "Přidat míchaný filament" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Míchaný filament má neplatné nebo neodpovídající komponenty. Upravte prosím dotčené položky znovu." + msgid "Search plate, object and part." msgstr "Hledat desku, objekt a díl." msgid "Pellets" msgstr "Pelety" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Míchaný filament má poškozené odkazy na komponenty" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Upravit / Smazat / Sloučit" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Cílový míchaný filament používá tento fyzický filament jako komponentu. Sloučením se tento fyzický filament odstraní a míchaný filament může přestat být platný. Pokračovat?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po dokončení operace bude projekt %s uzavřen a bude vytvořen nový projekt." @@ -8193,7 +8256,15 @@ msgstr "Potvrďte prosím, že je G-code v těchto předvolbách bezpečný, aby msgid "Customized Preset" msgstr "Přizpůsobená předvolba" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Některá publikovaná nastavení nebylo možné použít:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Některé sloty filamentu byly změněny:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Názvy komponent v souboru STEP nejsou ve formátu UTF-8!" # AI Translated @@ -8216,7 +8287,7 @@ msgstr "Objem objektu je nula." #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objekt ze souboru %s je příliš malý a může být v metrech nebo palcích.\n" "Chcete převést měřítko na milimetry?" @@ -8237,6 +8308,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Detekován vícedílný objekt" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Přiřazování textur k filamentům" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Upozornění při importu textury" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Načíst tyto soubory jako jeden objekt s více částmi?\n" @@ -8447,6 +8526,22 @@ msgstr "" msgid "Sync now" msgstr "Synchronizovat nyní" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Import textury se nezdařil. Zdá se, že model obsahuje data textury, ale proces importu nebylo možné dokončit. Model bude importován pouze jako geometrie." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplikují se barvy textury..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aktualizuje se 3D náhled..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Barvy textury byly použity." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Upravené předvolby můžete ponechat v novém projektu nebo je zahodit" @@ -8579,6 +8674,21 @@ msgstr "Uložit rozřezaný soubor jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Soubor %s byl odeslán do úložiště tiskárny a lze jej zobrazit na tiskárně." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publikovat soubor 3MF jako:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Export publikovaného souboru 3MF selhal.\n" +"Zkontrolujte prosím, zda složka existuje online, nebo zda soubor nemají otevřený jiné programy." + +msgid "Publish" +msgstr "Publikovat" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Typ trysky není nastaven. Nastavte prosím trysku a zkuste to znovu." @@ -8791,9 +8901,6 @@ msgstr "Chcete pokračovat?" msgid "Language selection" msgstr "Výběr jazyka" -msgid "Switching application language while some presets are modified." -msgstr "Přepnutí jazyka aplikace, když jsou některé předvolby upraveny." - msgid "Asia-Pacific" msgstr "Asie-Pacifik" @@ -8899,6 +9006,9 @@ msgstr "Cesta k aktuální instanci: " msgid "General" msgstr "Obecné" +msgid "Language" +msgstr "Jazyk" + msgid "Metric" msgstr "Metrika" @@ -9361,9 +9471,6 @@ msgstr "Při posouvání posuvníku vrstev v náhledu po slicování vykresluje msgid "Dimmed layer brightness" msgstr "Jas ztmavených vrstev" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9728,6 +9835,10 @@ msgstr "Spirálová váza" msgid "First layer filament sequence" msgstr "Pořadí filamentů v první vrstvě" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Seznam filamentů obsahuje míchané filamenty. Vlastní pořadí filamentů se neuplatní." + msgid "By Layer" msgstr "Podle vrstvy" @@ -9756,9 +9867,6 @@ msgstr "Přejít na webovou stránku publikace modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Poznámka: Příprava může trvat několik minut. Buďte prosím trpěliví." -msgid "Publish" -msgstr "Publikovat" - msgid "Publish was canceled" msgstr "Publikování bylo zrušeno" @@ -9774,6 +9882,81 @@ msgstr "Nahrávání dat" msgid "Jump to webpage" msgstr "Přejít na webovou stránku" +# AI Translated +msgid "Material" +msgstr "Materiál" + +# AI Translated +msgid "Mixed filament" +msgstr "Míchaný filament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Některé míchané filamenty závisejí na filamentech, které nebudou publikovány:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (míchaný)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% vyžaduje %2%, který není povolen." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% vyžaduje %2%, jehož materiál nebude publikován." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Chcete-li publikovat míchaný filament, povolte každý filament, který používá, a zvolte Úplné publikování nebo splňte jeho požadavek Typ." + +# AI Translated +msgid "Publish anyway" +msgstr "Přesto publikovat" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publikovat 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Vyberte, která nastavení se mají publikovat v souboru 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki k publikování 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Videonávod k publikování 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Míchaný filament - publikuje se jako celek, pokud je výše zvoleno \"Povolit\"" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publikovat tento míchaný filament a povolit + úplně publikovat jeho složkové filamenty" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publikovat tento slot filamentu v souboru 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Úplné publikování" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Vložit celý filament tohoto slotu do souboru 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrovat nevybrané" + #, c-format, boost-format msgid "Save %s as" msgstr "Uložit %s jako" @@ -9792,6 +9975,10 @@ msgstr "Zkopíruje do této předvolby všechny hodnoty zděděné z nadřazené msgid "Detach from parent" msgstr "Oddělit od nadřazeného" +# AI Translated +msgid "Save without parent" +msgstr "Uložit bez nadřazeného" + # AI Translated msgid "Unique preset" msgstr "Samostatná předvolba" @@ -10498,9 +10685,17 @@ msgstr "Pro detekci shlukování je vyžadována čistící věž. Bez čistíc msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Povolení přesné výšky Z i čistící věže může způsobit chyby slicování. Chcete přesto povolit přesnou výšku Z?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Plynulý časosběr vyžaduje čistící věž na každé vrstvě, což není slučitelné s možností \"Žádné řídké vrstvy\". Možnost \"Žádné řídké vrstvy\" byla vypnuta." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Pro hladký časosběr je potřeba základní věž. Model může mít vady bez základní věže. Chcete povolit základní věž?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "Možnost \"Žádné řídké vrstvy\" není slučitelná s plynulým časosběrem, který vyžaduje čistící věž na každé vrstvě. Časosběr byl přepnut do tradičního režimu." + msgid "Still print by object?" msgstr "Stále tisknout po objektu?" @@ -10879,10 +11074,6 @@ msgstr "Kompatibilní procesní profily" msgid "Printable space" msgstr "Tisknutelný prostor" -# AI Translated -msgid "Printer Agent" -msgstr "Agent tiskárny" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Vyberte implementaci síťového agenta pro komunikaci s tiskárnou. Dostupní agenti jsou registrováni při spuštění." @@ -11133,12 +11324,12 @@ msgid "No modifications need to be copied." msgstr "Není třeba kopírovat žádné úpravy." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopírovat parametry" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Upravit parametry %s" # AI Translated @@ -11298,14 +11489,6 @@ msgstr "Počet extrudérů" msgid "Capabilities" msgstr "Možnosti" -# AI Translated -msgid "Left: " -msgstr "Levý: " - -# AI Translated -msgid "Right: " -msgstr "Pravý: " - msgid "Show all presets (including incompatible)" msgstr "Zobrazit všechny předvolby (včetně nekompatibilních)" @@ -11697,34 +11880,6 @@ msgstr "Objemy čištění při výměně filamentu" msgid "Please choose the filament colour" msgstr "Vyberte prosím barvu filamentu" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Nativní živý náhled ve Waylandu vyžaduje video sink GStreamer GTK. Nainstalujte prosím plugin gtksink pro GStreamer a poté restartujte OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nepodařilo se inicializovat nativní video sink GStreamer pro Wayland. Zkontrolujte prosím instalaci pluginu GStreamer GTK." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Pro tuto úlohu je vyžadován Windows Media Player! Chcete ve svém operačním systému povolit „Windows Media Player“?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource nebyl správně zaregistrován pro přehrávání médií! Stisknutím Ano jej znovu zaregistrujete. Budete vyzváni dvakrát" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Chybí komponenta BambuSource registrovaná pro přehrávání médií! Přeinstalujte prosím OrcaSlicer nebo požádejte o pomoc komunitu." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Používá se BambuSource z jiné instalace, přehrávání videa nemusí fungovat správně! Stisknutím Ano to opravíte." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ve vašem systému chybí kodeky H.264 pro GStreamer, které jsou nutné k přehrávání videa. (Zkuste nainstalovat balíčky gstreamer1.0-plugins-bad nebo gstreamer1.0-libav a poté restartovat Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Cloudový agent není dostupný. Restartujte prosím OrcaSlicer a zkuste to znovu." @@ -12225,15 +12380,22 @@ msgstr "Oprava zrušena" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Kopírování souboru %1% do %2% selhalo: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Stahování nových profilů dodavatelů: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Balíček konfigurace: %1% aktualizováno na %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Stažení profilů dodavatelů selhalo: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Nejprve je třeba zkontrolovat neuložené změny před aktualizací konfigurace." -msgid "Configuration package: " -msgstr "Balíček konfigurace: " - -msgid " updated to " -msgstr " aktualizováno na " - msgid "Open G-code file:" msgstr "Otevřít G-code soubor:" @@ -12293,11 +12455,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input Shaping je podporován pouze v Klipperu, RepRapFirmware a Marlinu 2" -msgid "Grouping error: " -msgstr "Chyba seskupení: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Chyba seskupení: %1% nelze umístit do levé trysky" -msgid " can not be placed in the " -msgstr " nelze umístit do " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Chyba seskupení: %1% nelze umístit do pravé trysky" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12412,6 +12578,10 @@ msgstr "%1% je příliš blízko ostatním, může dojít ke kolizím." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% je příliš vysoký, může dojít ke kolizím." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Vzájemná poloha modelu a čistící věže nesplňuje požadavky funkce \"Žádné řídké vrstvy\". Upravte prosím jejich vzájemnou polohu, snižte výšku modelu nebo vypněte možnost \"Žádné řídké vrstvy\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " je příliš blízko oblasti vyloučení, při tisku mohou nastat kolize." @@ -12446,6 +12616,10 @@ msgstr "Pokud chcete přesto tisknout, můžete povolit možnost v Nastavení / msgid "No extrusions under current settings." msgstr "Při aktuálním nastavení nejsou žádné extruze." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Je použit míchaný filament s gradientem, ale 'Podvrstva míchané barvy' je vypnutá. Gradient nebude vytištěn." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Plynulý režim časosběru není podporován, pokud je povoleno pořadí tisku „podle objektu“." @@ -12482,6 +12656,10 @@ msgstr "Možná budete chtít zmenšit velikost modelu nebo změnit aktuální n msgid "Variable layer height is not supported with Organic supports." msgstr "Proměnná výška vrstvy není podporována s organickými podporami." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament věže na očištění trysky nemůže být míchaný filament." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Různé průměry trysek a filamentu nemusí správně fungovat, pokud je povolena základní věž. Jedná se o velmi experimentální funkci, proto pokračujte opatrně." @@ -12767,6 +12945,10 @@ msgstr "Použít 3MF místo G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Zapněte, pokud tiskárna přijímá jako tiskovou úlohu soubor 3MF. Je-li zapnuto, odešle Orca Slicer slicovaný soubor jako .gcode.3mf místo prostého souboru .gcode." +# AI Translated +msgid "Printer Agent" +msgstr "Agent tiskárny" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Vyberte implementaci síťového agenta pro komunikaci s tiskárnou." @@ -12853,7 +13035,7 @@ msgstr "mm nebo %" msgid "Other layers" msgstr "Ostatní vrstvy" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Teplota desky pro vrstvy kromě počáteční. Hodnota 0 znamená, že filament nepodporuje tisk na chladicí podložce SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13830,6 +14012,10 @@ msgstr "Zarovnaná pravoúhlá" msgid "Concentric" msgstr "Koncentrický" +# AI Translated +msgid "Spiral Inset" +msgstr "Spirálový odsaz" + msgid "Hilbert Curve" msgstr "Hilbertova křivka" @@ -13921,13 +14107,13 @@ msgstr "Pořadí vyplňování horního povrchu" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Směr, ve kterém jsou horní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n" -"Ven začíná ve středu povrchu, takže je přebytečný materiál vytlačen k okraji, kde je nejméně viditelný. Dovnitř začíná u okraje a končí těsnými oblouky ve středu.\n" -"Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech." +"Směr, ve kterém se vyplňují horní povrchy při použití vzoru vycházejícího ze středu (Koncentrický, Spirálový odsaz, Archimédovy akordy, Oktagramová spirála).\n" +"Ven začíná ve středu povrchu, takže se přebytečný materiál vytlačuje k okraji, kde je nejméně vidět. Dovnitř začíná u okraje a končí těsnými oblouky ve středu.\n" +"Výchozí používá řazení podle nejkratší cesty, které může probíhat v obou směrech." # AI Translated msgid "Bottom surface fill order" @@ -13935,13 +14121,13 @@ msgstr "Pořadí vyplňování spodního povrchu" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Směr, ve kterém jsou spodní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n" -"Dovnitř začíná každý povrch širšími vnějšími oblouky, což zlepšuje přilnavost první vrstvy na podložkách, kde se těsné oblouky ve středu nemusí přichytit. Ven začíná ve středu a přebytečný materiál vytlačuje k okraji.\n" -"Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech." +"Směr, ve kterém se vyplňují spodní povrchy při použití vzoru vycházejícího ze středu (Koncentrický, Spirálový odsaz, Archimédovy akordy, Oktagramová spirála).\n" +"Dovnitř začíná každý povrch širšími vnějšími oblouky, což zlepšuje přilnavost počáteční vrstvy na podložkách, kde se těsné oblouky ve středu nemusí uchytit. Ven začíná ve středu a vytlačuje přebytečný materiál k okraji.\n" +"Výchozí používá řazení podle nejkratší cesty, které může probíhat v obou směrech." msgid "Internal solid infill pattern" msgstr "Vzor vnitřní plné výplně" @@ -14044,6 +14230,14 @@ msgstr "Proti směru hodinových ručiček" msgid "Clockwise" msgstr "Po směru hodinových ručiček" +# AI Translated +msgid "Distance to rod" +msgstr "Vzdálenost k tyči" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Vodorovná vzdálenost špičky trysky ke vzdálenější hraně tyče. Používá se pro vyhýbání se kolizím při tisku podle objektu." + msgid "Height to rod" msgstr "Výška k tyči" @@ -14232,6 +14426,8 @@ msgstr "Čas vrstvy" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Ventilátor chlazení části bude spuštěn u vrstev, jejichž odhadovaný čas je kratší než tato hodnota. Rychlost ventilátoru je interpolována mezi minimální a maximální podle času tisku vrstvy." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14540,6 +14736,62 @@ msgstr "Podpůrný materiál" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Podpůrný materiál se běžně používá pro tisk podpěr a rozhraní podpěr." +# AI Translated +msgid "Is mixed filament" +msgstr "Je míchaný filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Určuje, zda je tato pozice filamentu míchaným filamentem složeným z několika fyzických filamentů" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenty míchaného filamentu" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Čárkami oddělené indexy komponentních filamentů počítané od 1, např. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Poměry podvrstev míchaného filamentu" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Čárkami oddělené hodnoty poměrů, jejichž součet je 1.0, např. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient míchaného filamentu" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Zapne režim gradientu ve směru Z pro podvrstvy míchaného filamentu. Je-li zapnutý, poměry podvrstev se mění lineárně napříč vrstvami." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Rozsah gradientu míchaného filamentu" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Počáteční a koncový poměr první komponenty v režimu gradientu. Dvojice oddělená čárkou, např. \"0.10,0.90\" znamená 10% až 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Křivka gradientu míchaného filamentu" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Volitelná vlastní křivka ve stylu Photoshopu, která mapuje postup v ose Z na poměr první komponenty. Zapisuje se jako řídicí body oddělené svislými čarami, buď ve tvaru \"x,y\" (starší formát), nebo \"x,y,m_in,m_out\", pokud je potřeba přepsat tečnu (prázdná hodnota nebo \"nan\" použije výchozí PCHIP). x je v intervalu [0,1]; y je omezeno na nastavený rozsah poměrů, např. \"0,0.15|0.5,0.50|1,0.85\". Pokud je pole prázdné, použije se lineární gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient míchaného filamentu podle dílu" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Je-li zapnutý režim gradientu, aplikuje gradient na každý díl sestavy samostatně místo toho, aby se celá sestava brala jako jeden rozsah Z." + msgid "Filament printable" msgstr "Tisknutelný filament" @@ -15816,6 +16068,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Povolená maximální výstupní síla osy Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15828,6 +16081,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Zatížení osy Y hmotností podložky stroje" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16143,8 +16397,8 @@ msgstr "Počáteční a koncové body, které vedou z oblasti řezače do odpadk msgid "Reduce infill retraction" msgstr "Snížit retrakci při výplni" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Neprovádět retrakci, pokud se přejezd nachází zcela uvnitř oblasti výplně. Případné vytékání materiálu tak nebude viditelné. To může snížit počet retrakčních pohybů u složitých modelů a zkrátit dobu tisku, ale zároveň zpomalit slicování a generování G-code. V oblastech, kde je retrakce přeskočena, se zároveň neprovádí ani z-hop." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Neprovádět retrakci, pokud se přejezd nachází zcela uvnitř oblasti výplně. Případné vytékání materiálu tak nebude viditelné. To může snížit počet retrakčních pohybů u složitých modelů a zkrátit dobu tisku, ale zároveň zpomalit slicování a generování G-code. V oblastech, kde je retrakce přeskočena, se zároveň neprovádí ani Z-hop." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Tato možnost sníží teplotu neaktivních extruderů, aby se zabránilo vytékání." @@ -16180,6 +16434,20 @@ msgstr "Detekovat převislou stěnu" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Detekuje procento převisu vzhledem k šířce čáry a použije odlišnou rychlost tisku. Pro 100%% převis je použita rychlost mostů." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Tisknout nepodepřené stěny jako poslední" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Smyčky stěn, které leží zcela ve vzduchu, se tisknou až ve chvíli, kdy je má co udržet:\n" +"extrudují se po ostatních stěnách svého ostrůvku, nejprve ta nejvnitřnější, bez ohledu na pořadí stěn.\n" +"Smyčka, kterou dokážou ukotvit pouze můstky této vrstvy, čeká, až budou tyto můstky vytištěny, zatímco smyčka vedoucí podél podepřené stěny si ponechá své místo před výplní, která ji potřebuje jako ukotvení." + # AI Translated msgid "Outer walls" msgstr "Vnější stěny" @@ -16317,7 +16585,7 @@ msgstr "Délka retrakce po očištění" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Délka rychlé retrakce po očištění, vztažená k délce retrakce.\n" @@ -16364,7 +16632,7 @@ msgstr "Když je retrakce spuštěna před změnou nástroje, filament se zatáh msgid "Z-hop height" msgstr "Výška Z-hopu" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Po každém stažení filamentu se tryska mírně zvedne, aby vznikla mezera mezi tryskou a tiskem. Zabrání kolizi trysky s tiskem při přesunu. Použití spirálových linií pro zvedání v ose Z může zabránit vytahování vláken." msgid "Z-hop lower boundary" @@ -16624,6 +16892,39 @@ msgstr "Očištění na okruzích" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Pro minimalizaci viditelnosti stehu v uzavřené smyčce extruze je před opuštěním smyčky tryskou proveden malý pohyb směrem dovnitř." +# AI Translated +msgid "Wipe inward" +msgstr "Očištění dovnitř" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Platí pouze pro vnější stěny včetně obrysů otvorů. Během očištění posouvá horkou trysku směrem k již vytištěným vnitřním stěnám, aby se omezilo opětovné zahřívání čerstvě vytištěného plastu a stopy po švu.\n" +"\n" +"Obzvláště užitečné při výškách vrstvy pod 0,1 mm, kde jsou stopy po očištění výraznější.\n" +"\n" +"Použije běžné očištění, pokud není žádná sousední vnitřní stěna již vytištěná (oblasti s jedinou stěnou nebo pořadí stěn Vnější/Vnitřní) nebo pokud nelze najít podepřenou dráhu dovnitř, například v ostrých rozích nebo v mezerách švu." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Vzdálenost očištění dovnitř" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Vzdálenost, o kterou se dráha očištění posune od vnějšího obvodu, uvedená v milimetrech nebo jako procento skutečné šířky extruze vnější stěny.\n" +"\n" +"Například 50% posune dráhu o polovinu šířky vnější stěny. Účinný posun je omezen jak skutečnou šířkou vnější stěny, tak dostupnou mezerou k sousední stěně, takže hodnoty nad 100% nebo odpovídající absolutní vzdálenost už nemají další účinek. Nastavením na 0 posun vypnete." + msgid "Wipe before external loop" msgstr "Očištění před vnějším okruhem" @@ -16891,8 +17192,9 @@ msgstr "Vyzvedne nový nástroj, aniž by čekal na dosažení tiskové teploty, msgid "No sparse layers (beta)" msgstr "Žádné řídké vrstvy (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Je-li povoleno, věž na očištění trysky se nebude tisknout na vrstvách bez změny nástroje. Na vrstvách s výměnou nástroje pojede extruder dolů k tisku věže na očištění trysky. Uživatel je zodpovědný za zajištění, že nedojde ke kolizi s tiskem." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Pokud je povoleno, čistící věž se nebude tisknout na vrstvách bez změny nástroje. Na vrstvách se změnou nástroje extruder sjede dolů, aby čistící věž vytiskl, takže věž skončí pod modelem a tisková hlava k ní musí dosáhnout dolů. Rozvržení, kde by to znamenalo kolizi s již vytištěným objektem, jsou odmítnuta. Nemá vliv při plynulém časosběru ani při detekci nánosů na trysce, které vyžadují věž na každé vrstvě." msgid "Prime all printing extruders" msgstr "Připravit všechny tiskové extrudery" @@ -16918,6 +17220,34 @@ msgstr "" msgid "Cyclic" msgstr "Cyklické" +# AI Translated +msgid "Cyclic order" +msgstr "Cyklické pořadí" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Vlastní posloupnost filamentů použitá cyklickým řazením změn nástroje, jako čísla filamentů oddělená čárkami (např. \"3,2,1,4\").\n" +"Každá vrstva tiskne své filamenty podle této posloupnosti; filamenty, které v ní nejsou uvedeny, se tisknou jako poslední, ve vzestupném pořadí.\n" +"Ponechte prázdné, chcete-li filamenty procházet ve vzestupném pořadí." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Použít cyklické pořadí na počáteční vrstvu" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Použije cyklické pořadí změn nástroje také na počáteční vrstvu.\n" +"Ve výchozím nastavení je vypnuto, protože počáteční vrstva se místo toho řadí pro nejlepší přilnavost k podložce: filamenty, které tisknou malé, křehké prvky počáteční vrstvy, se tisknou jako poslední, takže následné změny nástroje a přejezdy tyto slabě ukotvené části s menší pravděpodobností urazí. Toto pořadí počáteční vrstvy také respektuje vlastní posloupnost filamentů pro počáteční vrstvu, je-li nastavena. Přínos cyklického pořadí (další změny nástroje dávají každé vrstvě více času na vychladnutí) se na počáteční vrstvu nevztahuje, protože se tiskne pomalu a horká kvůli přilnavosti.\n" +"Povolte to pouze tehdy, pokud potřebujete přesně stejnou posloupnost nástrojů na každé vrstvě včetně první, za cenu této optimalizace přilnavosti." + msgid "Slice gap closing radius" msgstr "Poloměr uzavření mezery řezu" @@ -16927,9 +17257,6 @@ msgstr "Trhliny menší než 2x poloměr uzavření mezery jsou při řezání t msgid "Slicing Mode" msgstr "Režim slicingu" -msgid "Other" -msgstr "Ostatní" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Použijte \"Sudý-lichý\" pro modely letadel 3DLabPrint. Použijte \"Zavřít díry\" pro uzavření všech otvorů v modelu." @@ -17427,6 +17754,14 @@ msgstr "" "\n" "Nastavení hodnoty v parametru množství retrakce před očištěním níže provede případnou dodatečnou retrakci před očištěním, jinak bude provedena po něm." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Podvrstva míchané barvy" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Zapne dělení na podvrstvy míchané barvy. Je-li zapnuto, vrstvy obsahující filamenty s míchanou barvou se rozdělí na podvrstvy, aby vznikl efekt míchání barev." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Čistící věž lze použít k odstranění zbytků materiálu na trysce a ke stabilizaci tlaku v komoře trysky, aby se předešlo vizuálním vadám při tisku objektů." @@ -17921,6 +18256,14 @@ msgstr "Bez kontroly" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Nespouštějte žádné kontroly platnosti, například kontrolu konfliktů dráhy G-kódu." +# AI Translated +msgid "Strict mode" +msgstr "Přísný režim" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Skončí s nenulovým návratovým kódem, pokud slicování vyvolá nekritické varování, které by se jinak pouze zapsalo do protokolu, například model vyžadující podpory, zatímco jsou podpory vypnuté. Použijte v CI nebo ve skriptovaných procesech, které nikdy nesmí dodat nenápadně vadný výsledek slicování. Každé takové varování je navíc uvedeno se stabilní třídou v poli `warnings` souboru result.json, který se zapisuje pouze na Linuxu. Nelze kombinovat s --no-check, který přeskakuje kontrolu podpor." + msgid "Normative check" msgstr "Normativní kontrola" @@ -17933,11 +18276,28 @@ msgstr "Informace o výstupním modelu" msgid "This outputs the model’s information." msgstr "Zobrazit informace o modelu." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Prozkoumat síť (JSON na stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Vypíše na stdout souhrn JSON pro každý načtený objekt a poté skončí: jeho ohraničující kvádry a stěny konvexní obálky, na které jej lze položit, včetně jejich normál, obsahů a středů. Právě z těchto stěn vybírají volby --ground-*. Strojově čitelná alternativa k --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Prozkoumat malování (JSON na stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Vypíše strukturovaný souhrn JSON každé malované vrstvy (podpory, šev, barva MMU, fuzzy skin) již uložené v načteném modelu — počet facet, plochu povrchu a ohraničující kvádr v souřadnicích sítě pro každý stav — a poté skončí. Strojově čitelná alternativa k otevření malovacích nástrojů v rozhraní." + msgid "Export Settings" msgstr "Exportovat nastavení" -msgid "This exports settings to a file." -msgstr "Exportovat nastavení do souboru." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Toto exportuje nastavení do souboru. Použijte - pro zápis na stdout." msgid "Send progress to pipe" msgstr "Odesílat průběh do pipe" @@ -17993,6 +18353,30 @@ msgstr "Otočit kolem osy Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Úhel rotace kolem osy Y ve stupních." +# AI Translated +msgid "Ground largest face" +msgstr "Položit na největší stěnu" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Položí každý objekt na největší stěnu jeho konvexní obálky a spustí jej na podložku. Ze stejně velkých stěn se zachová ta, která již směřuje dolů. Objekty bez stěny dostatečně velké na to, aby na ní mohly spočívat, zůstanou beze změny. Transformace se provádějí v pořadí zadání na příkazové řádce, takže rotace uvedené před touto volbou jsou respektovány. --orient 1 se spouští po všech transformacích a nahrazuje orientaci." + +# AI Translated +msgid "Ground face by normal" +msgstr "Položit na stěnu podle normály" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Položí každý objekt na tu stěnu konvexní obálky, jejíž vnější normála je nejblíže směru NX,NY,NZ, a spustí jej na podložku. Směr je v souřadnicích objektu, které zahrnují rotace uvedené před touto volbou a odpovídají osám podložky, pokud vstupní soubor objekt neotáčí. Například 1,0,0 postaví objekt na jeho stranu +X. --orient 1 se spouští po všech transformacích a nahrazuje orientaci." + +# AI Translated +msgid "Ground face at point" +msgstr "Položit na stěnu v bodě" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Položí každý objekt na tu stěnu konvexní obálky, která obsahuje bod X,Y,Z, a spustí jej na podložku. Bod je v souřadnicích objektu, které zahrnují rotace uvedené před touto volbou; --inspect-mesh uvádí středy stěn v těchto souřadnicích. Objekty bez takové stěny zůstanou beze změny a běh selže, pokud ji nemá žádný objekt. --orient 1 se spouští po všech transformacích a nahrazuje orientaci." + msgid "Scale the model by a float factor." msgstr "Změnit měřítko modelu podle desetinného faktoru." @@ -18500,6 +18884,10 @@ msgstr "Síťování modelového souboru selhalo nebo nebyl nalezen platný tvar msgid "The supplied file couldn't be read because it's empty." msgstr "Zadaný soubor nelze načíst, protože je prázdný." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Formát souboru není kompatibilní a nelze jej načíst." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Neznámý formát souboru. Vstupní soubor musí mít příponu .stl, .obj nebo .amf(.xml)." @@ -19992,19 +20380,19 @@ msgstr "Zobrazit pouze názvy tiskáren se změnami v předvolbách tiskárny, f msgid "Only display the filament names with changes to filament presets." msgstr "Zobrazit pouze názvy filamentů se změnami ve filamentových profilech." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Zobrazí se pouze názvy tiskáren s uživatelskými předvolbami tiskárny, každá vybraná předvolba bude exportována jako zip archiv." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Zobrazí se pouze názvy filamentů s uživatelskými filamentovými profily. \n" "Všechny uživatelské filamentové profily ve vybraných filamentech budou exportovány jako zip archiv." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Zobrazí se pouze názvy tiskáren se změněnými procesními předvolbami. \n" "Všechny uživatelské procesní předvolby ve vybraných tiskárnách budou exportovány jako zip archiv." @@ -20250,7 +20638,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Pro diagnostiku zdroje problému potřebujeme informace. Podrobný návod najdete na stránce wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Tlačítko Zabalit shromáždí soubor projektu a protokoly aktuální relace do souboru zip." # AI Translated @@ -20306,7 +20694,7 @@ msgid "Stored logs" msgstr "Uložené protokoly" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Zabalí všechny uložené protokoly do souboru zip." # AI Translated @@ -20394,8 +20782,8 @@ msgid "Authorizing..." msgstr "Probíhá autorizace..." # AI Translated -msgid "Error. Can't get api token for authorization" -msgstr "Chyba. Nelze získat api token pro autorizaci" +msgid "Error. Can't get API token for authorization" +msgstr "Chyba. Nelze získat API token pro autorizaci" # AI Translated msgid "Could not parse server response." @@ -20851,8 +21239,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Povolit chytré přiřazení filamentu: přiřadit jeden filament více tryskám pro maximální úsporu" # AI Translated -msgid "Fila Saving" -msgstr "Úspora filamentu" +msgid "File Saving" +msgstr "Ukládání souboru" # AI Translated msgid "Don't remind me again" @@ -21207,6 +21595,18 @@ msgstr "Tuto akci nelze vrátit zpět. Pokračovat?" msgid "Skipping objects." msgstr "Přeskakování objektů." +# AI Translated +msgid "Material Ratio" +msgstr "Poměr materiálu" + +# AI Translated +msgid "Model Height" +msgstr "Výška modelu" + +# AI Translated +msgid "Ratio" +msgstr "Poměr" + # AI Translated msgid "Select Filament" msgstr "Vybrat filament" @@ -21308,6 +21708,9 @@ msgstr "Restartovat nyní" msgid "NO RAMMING AT ALL" msgstr "ŽÁDNÝ RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Objemová rychlost" @@ -21518,12 +21921,14 @@ msgid "Drying-Dehumidifying" msgstr "Sušení – odvlhčování" # AI Translated -msgid " maximum drying temperature is " -msgstr " maximální teplota sušení je " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Maximální teplota sušení pro %s je %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " minimální teplota sušení je " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Minimální teplota sušení pro %s je %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21975,6 +22380,137 @@ msgstr "" "Zamezte kroucení\n" "Víte, že při tisku materiálů náchylných ke kroucení, jako je ABS, může vhodné zvýšení teploty vyhřívané desky snížit pravděpodobnost kroucení?" +#~ msgid "Other" +#~ msgstr "Ostatní" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Levý: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Pravý: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Maximální teplota nesmí překročit " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Minimální teplota nesmí být nižší než " + +#~ msgid "up to" +#~ msgstr "až do" + +#~ msgid "above" +#~ msgstr "nad" + +#~ msgid "from" +#~ msgstr "Od" + +#~ msgid "Configuration package: " +#~ msgstr "Balíček konfigurace: " + +#~ msgid " updated to " +#~ msgstr " aktualizováno na " + +#~ msgid "Grouping error: " +#~ msgstr "Chyba seskupení: " + +#~ msgid " can not be placed in the " +#~ msgstr " nelze umístit do " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " maximální teplota sušení je " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " minimální teplota sušení je " + +# AI Translated +#~ msgid "needs" +#~ msgstr "vyžaduje" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "není povoleno" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materiál není publikován" + +#~ msgid "Select the language" +#~ msgstr "Zvolte jazyk" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Vybrat plugin" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Směr, ve kterém jsou horní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n" +#~ "Ven začíná ve středu povrchu, takže je přebytečný materiál vytlačen k okraji, kde je nejméně viditelný. Dovnitř začíná u okraje a končí těsnými oblouky ve středu.\n" +#~ "Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Směr, ve kterém jsou spodní povrchy vyplňovány při použití vzoru vycházejícího ze středu (Koncentrický, Archimédovy akordy, Oktagramová spirála).\n" +#~ "Dovnitř začíná každý povrch širšími vnějšími oblouky, což zlepšuje přilnavost první vrstvy na podložkách, kde se těsné oblouky ve středu nemusí přichytit. Ven začíná ve středu a přebytečný materiál vytlačuje k okraji.\n" +#~ "Výchozí používá řazení podle nejkratší dráhy, které může probíhat v obou směrech." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Je-li povoleno, věž na očištění trysky se nebude tisknout na vrstvách bez změny nástroje. Na vrstvách s výměnou nástroje pojede extruder dolů k tisku věže na očištění trysky. Uživatel je zodpovědný za zajištění, že nedojde ke kolizi s tiskem." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exportovat nastavení do souboru." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Nativní živý náhled ve Waylandu vyžaduje video sink GStreamer GTK. Nainstalujte prosím plugin gtksink pro GStreamer a poté restartujte OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nepodařilo se inicializovat nativní video sink GStreamer pro Wayland. Zkontrolujte prosím instalaci pluginu GStreamer GTK." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Pro tuto úlohu je vyžadován Windows Media Player! Chcete ve svém operačním systému povolit „Windows Media Player“?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource nebyl správně zaregistrován pro přehrávání médií! Stisknutím Ano jej znovu zaregistrujete. Budete vyzváni dvakrát" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Chybí komponenta BambuSource registrovaná pro přehrávání médií! Přeinstalujte prosím OrcaSlicer nebo požádejte o pomoc komunitu." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Používá se BambuSource z jiné instalace, přehrávání videa nemusí fungovat správně! Stisknutím Ano to opravíte." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ve vašem systému chybí kodeky H.264 pro GStreamer, které jsou nutné k přehrávání videa. (Zkuste nainstalovat balíčky gstreamer1.0-plugins-bad nebo gstreamer1.0-libav a poté restartovat Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Úspora filamentu" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 436966457a..a4909c409b 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -2430,15 +2430,6 @@ msgstr "Es ist ein Update verfügbar. Öffnen Sie den Profilbündel-Dialog, um e msgid "%s has been removed." msgstr "%s wurde entfernt." -msgid "Switching application language" -msgstr "Wechsel der Sprache" - -msgid "Select the language" -msgstr "Sprache wählen" - -msgid "Language" -msgstr "Sprache" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2917,6 +2908,10 @@ msgstr "Bearbeiten" msgid "Merge with" msgstr "Zusammenführen mit" +# AI Translated +msgid "Decompose Color" +msgstr "Farbe zerlegen" + msgid "Delete this filament" msgstr "Diesen Filament löschen" @@ -3216,6 +3211,10 @@ msgstr "Zusammenbau" msgid "Merge parts to an object" msgstr "Teile zu einem Objekt zusammenführen" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Die Verwendung einer variablen Schichthöhe zusammen mit der Mischfarben-Unterschicht kann zu einer schlechten Farbmischqualität führen." + # AI Translated msgid "Add layers" msgstr "Schichten hinzufügen" @@ -3672,11 +3671,15 @@ msgstr "Aktuelles Filament am Filament Track Switch zurückziehen" msgid "Switch track at Filament Track Switch" msgstr "Spur am Filament Track Switch wechseln" -msgid "The maximum temperature cannot exceed " -msgstr "Die maximale Temperatur darf nicht überschritten werden " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Die maximale Temperatur darf %d nicht überschreiten" -msgid "The minmum temperature should not be less than " -msgstr "Die minimale Temperatur sollte nicht weniger als " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Die minimale Temperatur darf %d nicht unterschreiten" msgid "Type to filter..." msgstr "Tippen zum Filtern..." @@ -4548,6 +4551,15 @@ msgstr "" "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Ist die SD-Karte schreibgeschützt?\n" "Fehlermeldung: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen.\n" +"Fehlermeldung: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Das Kopieren des temporären G-Codes in den Ausgabe-G-Code ist fehlgeschlagen. Es könnte ein Problem mit dem Zielgerät geben. Versuchen Sie es erneut oder verwenden Sie ein anderes Gerät. Der beschädigte Ausgabe-G-Code befindet sich in %1%.tmp." @@ -4757,7 +4769,7 @@ msgstr "" "\n" "Der Wert wird auf 0 zurückgesetzt." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Der alternative zusätzliche Wandmodus funktioniert nicht gut, wenn die vertikale Wanddicke auf Alle eingestellt ist." msgid "" @@ -4803,7 +4815,7 @@ msgstr "" "NEIN - unabhängige Stütz-Schichthöhen beibehalten" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height muss kleiner als layer_height sein.\n" @@ -4811,7 +4823,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Die Verriegelungstiefe sollte kleiner als die Hauttiefe sein.\n" @@ -4851,6 +4863,9 @@ msgstr "" "Ja - Diese Einstellungen ändern und den Spiralmodus automatisch aktivieren\n" "Nein - Spiralmodus nicht aktivieren" +msgid "N/A" +msgstr "Nicht verfügbar" + msgid "Printing" msgstr "Drucken" @@ -5281,14 +5296,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Wert %s ist außerhalb des Bereichs. Der gültige Bereich liegt zwischen %d und %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Heißt es %s%% oder %s %s?\n" -"Ja für %s%%, \n" -"Nein für %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Heißt es %s%% oder %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5310,29 +5322,22 @@ msgstr "Ungültiges Muster. Verwenden Sie N, N#K oder eine durch Kommas getrennt msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ungültiges Format. Erwartetes Vektorformat: \"%1%\"" -msgid "N/A" -msgstr "Nicht verfügbar" - # AI Translated msgid "System agents" msgstr "Systemagenten" -# AI Translated -msgid "No plugin selected" -msgstr "Kein Plugin ausgewählt" - # AI Translated msgid "Add plugin" msgstr "Plugin hinzufügen" -# AI Translated -msgid "Select plugin" -msgstr "Plugin auswählen" - # AI Translated msgid "Remove plugin" msgstr "Plugin entfernen" +# AI Translated +msgid "No plugin selected" +msgstr "Kein Plugin ausgewählt" + # AI Translated msgid "Configure" msgstr "Konfigurieren" @@ -5588,14 +5593,20 @@ msgstr "Auf optimal setzen" msgid "Regroup filament" msgstr "Filament neu gruppieren" -msgid "up to" -msgstr "bis zu" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "bis zu %1% mm" -msgid "above" -msgstr "über" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "über %1% mm" -msgid "from" -msgstr "von" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "von %1% bis %2% mm" msgid "Usage" msgstr "Nutzung" @@ -5955,7 +5966,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Größe:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Konflikte von G-Code-Pfaden wurden bei Layer %d, Z = %.2lf mm gefunden.Bitte trennen Sie die konfliktbehafteten Objekte weiter voneinander (%s <-> %s)." @@ -6266,16 +6277,24 @@ msgstr "Projekt speichern als" msgid "Save current project as" msgstr "Aktuelles Projekt speichern als" +# AI Translated +msgid "Publish 3MF" +msgstr "3MF veröffentlichen" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Eine 3MF-Datei mit den ausgewählten eingebetteten Einstellungen exportieren" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importiere 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Lade ein Modell" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip-Archiv importieren" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Modelle aus einem Zip-Archiv laden" msgid "Import Configs" @@ -7533,6 +7552,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Untere" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Diese Einstellung gibt keinen Plugin-Fähigkeitstyp an." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Diese Einstellung gibt einen unbekannten Plugin-Fähigkeitstyp an: " + # AI Translated msgid "Plugin Selection" msgstr "Plugin-Auswahl" @@ -7791,6 +7818,10 @@ msgstr "Aktuelle Platte anpassen" msgid "The %s nozzle can not print %s." msgstr "Die %s Düse kann %s nicht drucken." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Der Druck von Mischfarben-Filament auf einem Drucker mit nur einem Extruder erfordert häufige Filamentwechsel und Spülvorgänge, was den Abfall und das Risiko einer Verstopfung von Düse bzw. Abfallschacht deutlich erhöhen kann." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mischen von %1% mit %2% im Druck wird nicht empfohlen.\n" @@ -7916,6 +7947,26 @@ msgstr "Filamentliste von AMS synchronisieren" msgid "Set filaments to use" msgstr "Zu verwendende Filamente einstellen" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Mischfilament hinzufügen" + +# AI Translated +msgid "Mixed Filament" +msgstr "Mischfilament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Letztes Mischfilament entfernen" + +# AI Translated +msgid "Add mixed filament" +msgstr "Mischfilament hinzufügen" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Das Mischfilament enthält ungültige oder nicht zusammenpassende Komponenten. Bitte bearbeiten Sie die betroffenen Einträge erneut." + msgid "Search plate, object and part." msgstr "Suche Platte, Objekt und Teil." @@ -7923,6 +7974,18 @@ msgstr "Suche Platte, Objekt und Teil." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Das Mischfilament enthält ungültige Komponentenverweise" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Bearbeiten / Löschen / Zusammenführen" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Das Ziel-Mischfilament verwendet dieses physische Filament als Komponente. Beim Zusammenführen wird dieses physische Filament entfernt und das Mischfilament kann dadurch ungültig werden. Fortfahren?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Nach Abschluss Ihrer Operation wird das %s-Projekt geschlossen und ein neues Projekt erstellt." @@ -8063,8 +8126,16 @@ msgstr "Bitte bestätigen Sie, dass die G-Codes innerhalb dieser Profile sicher msgid "Customized Preset" msgstr "Benutzerdefinierte Profile" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF8-Format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Einige veröffentlichte Einstellungen konnten nicht angewendet werden:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Einige Filament-Steckplätze wurden geändert:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Der Name der Komponenten in der Step-Datei ist nicht im UTF-8-Format!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Aufgrund der nicht unterstützten Textkodierung können unbrauchbare Zeichen erscheinen!" @@ -8085,10 +8156,10 @@ msgstr "Das Volumen des Objekts ist Null" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Das Objekt aus der Datei %s ist zu klein und vielleicht in Metern oder Zoll angeben.\n" -" Möchten Sie auf Millimeter skalieren?" +"Möchten Sie auf Millimeter skalieren?" msgid "Object too small" msgstr "Objekt zu klein" @@ -8106,6 +8177,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Mehrteiliges Objekt erkannt" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Texturen werden den Filamenten zugeordnet" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Warnung beim Texturimport" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Diese Dateien als ein einziges Objekt mit mehreren Teilen laden?\n" @@ -8319,6 +8398,22 @@ msgstr "" msgid "Sync now" msgstr "Jetzt synchronisieren" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Der Texturimport ist fehlgeschlagen. Das Modell scheint Texturdaten zu enthalten, der Importvorgang konnte jedoch nicht abgeschlossen werden. Das Modell wird nur als Geometrie importiert." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Texturfarben werden angewendet..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D-Ansicht wird aktualisiert..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Texturfarben angewendet." + # AI Translated msgid "You can keep the modified presets for the new project or discard them" msgstr "Sie können die geänderten Profile für das neue Projekt beibehalten oder sie verwerfen" @@ -8451,6 +8546,21 @@ msgstr "Geslicte Datei speichern unter:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Die Datei %s wurde an den Speicher des Druckers gesendet und kann auf dem Drucker angezeigt werden." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MF-Datei veröffentlichen als:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Die veröffentlichte 3MF-Datei konnte nicht exportiert werden.\n" +"Bitte prüfen Sie, ob der Ordner online liegt oder ob andere Programme die Datei geöffnet haben." + +msgid "Publish" +msgstr "Veröffentlichen" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Die Düsenart ist nicht eingestellt. Bitte stellen Sie die Düse ein und versuchen Sie es erneut." @@ -8663,9 +8773,6 @@ msgstr "Möchten Sie fortfahren?" msgid "Language selection" msgstr "Sprachauswahl" -msgid "Switching application language while some presets are modified." -msgstr "Umschalten der Anwendungssprache, während einige Profile geändert werden." - msgid "Asia-Pacific" msgstr "Asien-Pazifik" @@ -8770,6 +8877,9 @@ msgstr "Aktueller Instanzpfad: " msgid "General" msgstr "Allgemein" +msgid "Language" +msgstr "Sprache" + msgid "Metric" msgstr "Metrisch" @@ -9208,9 +9318,6 @@ msgstr "Beim Bewegen des Schichtreglers in der geslicten Vorschau werden die Sch msgid "Dimmed layer brightness" msgstr "Helligkeit abgedunkelter Schichten" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9563,6 +9670,10 @@ msgstr "Vasenmodus" msgid "First layer filament sequence" msgstr "Erste Filament-Schichtsequenz" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Die Filamentliste enthält Mischfilamente. Die benutzerdefinierte Filamentreihenfolge wird nicht wirksam." + msgid "By Layer" msgstr "Nach Schicht" @@ -9590,9 +9701,6 @@ msgstr "Zur Modellveröffentlichungs-Webseite springen" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Hinweis: Die Vorbereitung kann einige Minuten dauern. Bitte haben Sie Geduld." -msgid "Publish" -msgstr "Veröffentlichen" - msgid "Publish was canceled" msgstr "Veröffentlichung wurde abgebrochen" @@ -9608,6 +9716,81 @@ msgstr "Daten werden hochgeladen" msgid "Jump to webpage" msgstr "Zu einer Website springen" +# AI Translated +msgid "Material" +msgstr "Material" + +# AI Translated +msgid "Mixed filament" +msgstr "Mischfilament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Einige Mischfilamente benötigen Filamente, die nicht veröffentlicht werden:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (gemischt)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% benötigt %2%, das nicht aktiviert ist." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% benötigt %2%, dessen Material nicht veröffentlicht wird." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Um ein Mischfilament zu veröffentlichen, aktivieren Sie jedes von ihm verwendete Filament und wählen Sie Vollständig veröffentlichen oder erfüllen Sie dessen Typ-Anforderung." + +# AI Translated +msgid "Publish anyway" +msgstr "Trotzdem veröffentlichen" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MF veröffentlichen..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Wählen Sie aus, welche Einstellungen in der 3MF-Datei veröffentlicht werden" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki: 3MF veröffentlichen" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Videoanleitung: 3MF veröffentlichen" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Mischfilament - wird als Ganzes veröffentlicht, wenn oben \"Aktivieren\" ausgewählt ist" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Dieses Mischfilament veröffentlichen und seine Komponentenfilamente aktivieren + vollständig veröffentlichen" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Diesen Filament-Steckplatz in der 3MF-Datei veröffentlichen" + +# AI Translated +msgid "Full Publish" +msgstr "Vollständig veröffentlichen" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Das gesamte Filament dieses Steckplatzes in die 3MF-Datei einbetten" + +# AI Translated +msgid "Filter non-selected" +msgstr "Nicht ausgewählte filtern" + #, c-format, boost-format msgid "Save %s as" msgstr "%s speichern als" @@ -9625,6 +9808,10 @@ msgstr "Kopiert alle vom übergeordneten Profil geerbten Werte in dieses Profil msgid "Detach from parent" msgstr "Vom übergeordneten Element trennen" +# AI Translated +msgid "Save without parent" +msgstr "Ohne übergeordnetes Element speichern" + # AI Translated msgid "Unique preset" msgstr "Eigenständiges Profil" @@ -10325,9 +10512,17 @@ msgstr "Reinigungsturm ist für die Erkennung von Klumpen erforderlich. Ohne Rei msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Das Aktivieren von sowohl präziser Z-Höhe als auch Reinigungsturm kann zu Slicing-Fehlern führen. Möchten Sie trotzdem die präzise Z-Höhe aktivieren?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Der Smooth-Zeitraffer benötigt auf jeder Schicht einen Reinigungsturm und ist daher nicht mit \"Keine dünnen Schichten\" kompatibel. \"Keine dünnen Schichten\" wurde deaktiviert." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Für den gewählten Zeitraffermodus ist ein Reinigungsturm erforderlich. Ohne Reinigungsturm kann es zu Fehlern am Modell kommen. Möchten Sie den Reinigungsturm aktivieren?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Keine dünnen Schichten\" ist nicht mit dem Smooth-Zeitraffer kompatibel, der auf jeder Schicht einen Reinigungsturm benötigt. Der Zeitraffer wurde auf den traditionellen Modus umgestellt." + msgid "Still print by object?" msgstr "Trotzdem nach Objekt drucken?" @@ -10697,9 +10892,6 @@ msgstr "Kompatible Prozessprofile" msgid "Printable space" msgstr "Druckbarer Raum" -msgid "Printer Agent" -msgstr "Drucker-Agent" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Wählen Sie die Implementierung des Netzwerkagenten für die Druckerkommunikation. Verfügbare Agenten werden beim Start registriert." @@ -10940,11 +11132,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Es müssen keine Änderungen kopiert werden." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parameter kopieren" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Parameter von %s ändern" #, c-format, boost-format @@ -11101,12 +11293,6 @@ msgstr "Anzahl der Extruder" msgid "Capabilities" msgstr "Fähigkeiten" -msgid "Left: " -msgstr "Links: " - -msgid "Right: " -msgstr "Rechts: " - msgid "Show all presets (including incompatible)" msgstr "Alle Profile anzeigen (auch inkompatible)" @@ -11460,27 +11646,6 @@ msgstr "Reinigungsvolumen für Filamentwechsel" msgid "Please choose the filament colour" msgstr "Bitte wählen Sie die Filamentfarbe" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Native Wayland Liveview erfordert das GStreamer GTK Video Sink. Bitte installieren Sie das gtksink-Plugin für GStreamer und starten Sie OrcaSlicer neu." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Fehler beim Initialisieren des nativen Wayland GStreamer Video Sinks. Bitte überprüfen Ihre GStreamer GTK-Plugin-Installation." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player wird für diese Aufgabe benötigt! Möchten Sie 'Windows Media Player' für Ihr Betriebssystem aktivieren?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource wurde nicht korrekt für das Abspielen von Medien registriert! Drücken Sie Ja, um es erneut zu registrieren. Sie werden zweimal aufgefordert" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Fehlende BambuSource-Komponente, die für das Abspielen von Medien registriert ist! Bitte installieren Sie OrcaSlicer neu oder suchen Sie Hilfe in der Community." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Verwendung eines BambuSource aus einer anderen Installation, das Abspielen von Videos funktioniert möglicherweise nicht korrekt! Drücken Sie Ja, um es zu beheben." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ihr System fehlt H.264-Codecs für GStreamer, die zum Abspielen von Videos erforderlich sind. (Versuchen Sie, die Pakete gstreamer1.0-plugins-bad oder gstreamer1.0-libav zu installieren und starten Sie Orca Slicer neu?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Cloud-Agent ist nicht verfügbar. Bitte starten Sie OrcaSlicer neu und versuchen Sie es erneut." @@ -11965,15 +12130,22 @@ msgstr "Reparatur abgebrochen" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Kopieren der Datei %1% nach %2% fehlgeschlagen: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Neue Herstellerprofile werden heruntergeladen: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigurationspaket: %1% aktualisiert auf %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Herstellerprofile konnten nicht heruntergeladen werden: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Vor der Aktualisierung der Konfiguration müssen die nicht gespeicherten Änderungen überprüft werden." -msgid "Configuration package: " -msgstr "Konfigurationspaket:" - -msgid " updated to " -msgstr " aktualisiert auf " - msgid "Open G-code file:" msgstr "Öffne G-Code-Datei:" @@ -12033,11 +12205,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input Shaping wird nur von Klipper, RepRapFirmware und Marlin 2 unterstützt" -msgid "Grouping error: " -msgstr "Gruppierungsfehler: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Gruppierungsfehler: %1% kann nicht in der linken Düse platziert werden" -msgid " can not be placed in the " -msgstr " kann nicht platziert werden in der " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Gruppierungsfehler: %1% kann nicht in der rechten Düse platziert werden" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12151,6 +12327,10 @@ msgstr "%1% ist zu nah an anderen, was Kollisionen verursachen kann." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% ist zu hoch und es kommt zu Kollisionen." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Die relative Position von Modell und Reinigungsturm erfüllt nicht die Anforderungen der Funktion \"Keine dünnen Schichten\". Bitte passen Sie ihre relative Position an, verringern Sie die Modellhöhe oder deaktivieren Sie \"Keine dünnen Schichten\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " befindet sich zu nahe an einem Sperrbereich. Beim Drucken kann es zu Kollisionen kommen." @@ -12185,6 +12365,10 @@ msgstr "Wenn Sie trotzdem drucken möchten, können Sie die Option in Einstellun msgid "No extrusions under current settings." msgstr "Keine Extrusion unter den aktuellen Einstellungen." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Es wird ein Mischfilament mit Verlauf verwendet, aber „Mischfarben-Unterschicht“ ist deaktiviert. Der Verlauf wird nicht gedruckt." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Der gewählte Zeitraffermodus wird nicht unterstützt, wenn die Sequenz \"nach Objekt\" aktiviert ist." @@ -12221,6 +12405,10 @@ msgstr "Sie möchten möglicherweise die Größe Ihres Modells reduzieren oder d msgid "Variable layer height is not supported with Organic supports." msgstr "Variable Schichthöhe wird nicht mit organischen Stützstrukturen unterstützt." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Das Filament des Reinigungsturms darf kein Mischfilament sein." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Unterschiedliche Düsendurchmesser und unterschiedliche Filamentdurchmesser funktionieren möglicherweise nicht gut, wenn der Reinigungsturm aktiviert ist. Es ist sehr experimentell, also gehen Sie bitte vorsichtig vor." @@ -12488,6 +12676,9 @@ msgstr "Benutze 3MF statt G-Code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Aktivieren Sie diese Option, wenn der Drucker eine 3MF-Datei als Druckauftrag akzeptiert. Wenn aktiviert, sendet Orca Slicer die geslicete Datei als .gcode.3mf, anstatt als einfache .gcode-Datei." +msgid "Printer Agent" +msgstr "Drucker-Agent" + msgid "Select the network agent implementation for printer communication." msgstr "Wählen Sie die Netzwerk-Agent-Implementierung für die Druckerkommunikation aus." @@ -12570,7 +12761,7 @@ msgstr "mm o. %" msgid "Other layers" msgstr "Andere Schichten" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Dies ist die Betttemperatur für Schichten mit Ausnahme der Ersten. Ein Wert von 0 bedeutet, dass das Filament auf der kalten Druckplatte SuperTack nicht unterstützt wird." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13532,6 +13723,10 @@ msgstr "Geradlinig ausgerichtet" msgid "Concentric" msgstr "Konzentrisch" +# AI Translated +msgid "Spiral Inset" +msgstr "Spiralversatz" + msgid "Hilbert Curve" msgstr "Hilbert-Kurve" @@ -13623,13 +13818,13 @@ msgstr "Füllreihenfolge der oberen Oberfläche" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Richtung, in der obere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n" -"Nach außen beginnt in der Mitte der Oberfläche, sodass überschüssiges Material zum Rand geschoben wird, wo es am wenigsten sichtbar ist. Nach innen beginnt am Rand und endet mit den engen Kurven in der Mitte.\n" -"Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann." +"Richtung, in der obere Flächen gefüllt werden, wenn ein zentrumsbasiertes Muster verwendet wird (Konzentrisch, Spiralversatz, Archimedische Akkorde, Oktagramm Spirale).\n" +"Nach außen beginnt in der Mitte der Fläche, sodass überschüssiges Material zum Rand gedrückt wird, wo es am wenigsten sichtbar ist. Nach innen beginnt am Rand und endet mit den engen Kurven in der Mitte.\n" +"Standard verwendet die Reihenfolge des kürzesten Weges, die in beide Richtungen verlaufen kann." # AI Translated msgid "Bottom surface fill order" @@ -13637,13 +13832,13 @@ msgstr "Füllreihenfolge der unteren Oberfläche" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Richtung, in der untere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n" -"Nach innen beginnt jede Oberfläche mit den breiteren äußeren Kurven, was die Haftung der ersten Schicht auf Druckbetten verbessert, auf denen die engen Kurven in der Mitte möglicherweise nicht haften. Nach außen beginnt in der Mitte und schiebt überschüssiges Material zum Rand.\n" -"Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann." +"Richtung, in der untere Flächen gefüllt werden, wenn ein zentrumsbasiertes Muster verwendet wird (Konzentrisch, Spiralversatz, Archimedische Akkorde, Oktagramm Spirale).\n" +"Nach innen beginnt jede Fläche mit den weiteren äußeren Kurven, was die Haftung der ersten Schicht auf Druckbetten verbessert, auf denen die engen Kurven in der Mitte möglicherweise nicht haften. Nach außen beginnt in der Mitte und drückt überschüssiges Material zum Rand.\n" +"Standard verwendet die Reihenfolge des kürzesten Weges, die in beide Richtungen verlaufen kann." msgid "Internal solid infill pattern" msgstr "Muster für das interne feste Füllmuster" @@ -13746,6 +13941,14 @@ msgstr "Gegen den Uhrzeigersinn" msgid "Clockwise" msgstr "Im Uhrzeigersinn" +# AI Translated +msgid "Distance to rod" +msgstr "Abstand zur Stange" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Horizontaler Abstand der Düsenspitze zur entfernteren Kante der Stange. Wird zur Kollisionsvermeidung beim Drucken nach Objekt verwendet." + msgid "Height to rod" msgstr "Höhe zur Führung" @@ -13934,6 +14137,8 @@ msgstr "Schichtdauer" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Der Bauteillüfter wird für Schichten aktiviert, deren geschätzte Zeit kürzer als dieser Wert ist. Die Lüftergeschwindigkeit wird zwischen der minimalen und maximalen Geschwindigkeit entsprechend der Druckzeit der Schicht interpoliert." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14238,6 +14443,62 @@ msgstr "Stützmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Stützmaterial wird üblicherweise zum Drucken von Stützen und Stütz-Schnittstellen verwendet." +# AI Translated +msgid "Is mixed filament" +msgstr "Ist Mischfilament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Gibt an, ob dieser Filamentplatz ein Mischfilament aus mehreren physischen Filamenten ist" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenten des Mischfilaments" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Durch Kommas getrennte Indizes der Komponentenfilamente, beginnend bei 1, z. B. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Unterschicht-Anteile des Mischfilaments" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Durch Kommas getrennte Anteilswerte, die in der Summe 1.0 ergeben, z. B. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Verlauf des Mischfilaments" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Aktiviert den Verlaufsmodus in Z-Richtung für die Unterschichten des Mischfilaments. Wenn aktiviert, ändern sich die Anteile der Unterschichten linear über die Schichten hinweg." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Verlaufsbereich des Mischfilaments" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Start- und Endanteil der ersten Komponente im Verlaufsmodus. Durch Komma getrenntes Paar, z. B. \"0.10,0.90\" bedeutet 10% bis 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Verlaufskurve des Mischfilaments" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Optionale benutzerdefinierte Kurve im Photoshop-Stil, die den Z-Fortschritt auf den Anteil der ersten Komponente abbildet. Kodiert als durch senkrechte Striche getrennte Kontrollpunkte, entweder \"x,y\" (veraltet) oder \"x,y,m_in,m_out\", wenn die Tangente überschrieben werden soll (ein leerer Wert oder \"nan\" verwendet den PCHIP-Standard). x liegt in [0,1]; y wird auf den konfigurierten Anteilsbereich begrenzt, z. B. \"0,0.15|0.5,0.50|1,0.85\". Bleibt das Feld leer, wird stattdessen der lineare gradient_range verwendet." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Verlauf pro Teil beim Mischfilament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Wenn der Verlaufsmodus aktiviert ist, wird der Verlauf auf jedes Teil eines Zusammenbaus einzeln angewendet, anstatt den gesamten Zusammenbau als einen einzigen Z-Bereich zu behandeln." + msgid "Filament printable" msgstr "Filament druckbar" @@ -15478,6 +15739,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Die maximal zulässige Ausgangskraft der Y-Achse" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15488,6 +15750,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Die Maschinenbett-Massenlast der Y-Achse" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15802,7 +16065,7 @@ msgstr "Die Start- und Endpunkte, vom Schnittbereich bis zum Auswurfschacht." msgid "Reduce infill retraction" msgstr "Rückzug bei der Füllung verringern" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Kein Rückzug, wenn sich die Bewegung des Druckkopfes vollständig in einem Füllbereich befindet. Das bedeutet, dass das herauslaufen des Filaments nicht zu sehen ist. Dies kann die Zeit für das zurückziehen des Filaments bei komplexeren Modellen verkürzen und Druckzeit sparen, verlangsamt aber das Slicen und die G-Code Generierung." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15839,6 +16102,20 @@ msgstr "Erkennen von Wandüberhängen" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Erkennt den Prozentsatz des Überhangs im Verhältnis zur Linienbreite und verwenden hierfür eine unterschiedliche Druckgeschwindigkeiten. Bei einem 100%% Überhang wird die Brückengeschwindigkeit verwendet." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Nicht gestützte Wände zuletzt drucken" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Wandschleifen, die vollständig in der Luft liegen, werden erst gedruckt, wenn etwas sie halten kann:\n" +"Sie werden nach den übrigen Wänden ihrer Insel extrudiert, die innerste zuerst, unabhängig von der Wandreihenfolge.\n" +"Eine Schleife, die nur von den Überbrückungen dieser Schicht verankert werden kann, wartet, bis diese Überbrückungen gedruckt sind, während eine Schleife, die neben einer gestützten Wand verläuft, ihren Platz vor der Füllung behält, die sie als Verankerung benötigt." + msgid "Outer walls" msgstr "Äußere Wände" @@ -15972,7 +16249,7 @@ msgstr "Rückzugsmenge nach dem Wischen" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Die Länge des schnellen Rückzugs nach dem Wischen, relativ zur Rückzugslänge.\n" @@ -16019,7 +16296,7 @@ msgstr "Wenn vor einem Werkzeugwechsel ein Rückzug ausgelöst wird, wird das Fi msgid "Z-hop height" msgstr "Z-Hub-Höhe" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Bei jedem Rückzug wird die Düse ein wenig angehoben, um einen Abstand zwischen Düse und Druck zu schaffen. Dadurch wird verhindert, dass die Düse bei der Verfahrbewegung gegen den Druck stößt. Die Verwendung einer Spirallinie zum Anheben von z kann Fadenbildung verhindern." msgid "Z-hop lower boundary" @@ -16280,6 +16557,39 @@ msgstr "Wischbewegung nach innen" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Um die Sichtbarkeit der Naht in einer geschlossenen Schleifen-Extrusion zu minimieren, wird vor dem Verlassen der Schleife eine kleine Bewegung nach innen ausgeführt." +# AI Translated +msgid "Wipe inward" +msgstr "Reinigen nach innen" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Gilt nur für Außenwände, einschließlich Lochkonturen. Bewegt die heiße Düse beim Reinigen in Richtung bereits gedruckter innerer Wände, um das erneute Aufschmelzen frisch gedruckten Kunststoffs und Nahtmarkierungen zu verringern.\n" +"\n" +"Besonders nützlich bei Schichthöhen unter 0,1 mm, wo Reinigungsspuren deutlicher sichtbar sind.\n" +"\n" +"Verwendet die normale Reinigung, wenn keine angrenzende innere Wand bereits gedruckt ist (Bereiche mit nur einer Wand oder die Wandreihenfolge Außen/Innen) oder wenn kein gestützter Weg nach innen gefunden werden kann, zum Beispiel an engen Ecken oder Nahtlücken." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Abstand für Reinigen nach innen" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Der Abstand, um den der Reinigungsweg vom Außenperimeter weg verschoben wird, angegeben in Millimetern oder als Prozentsatz der tatsächlichen Extrusionsbreite der Außenwand.\n" +"\n" +"Zum Beispiel verschiebt 50% den Weg um die halbe Außenwandbreite. Der wirksame Versatz wird sowohl durch die tatsächliche Außenwandbreite als auch durch den verfügbaren Abstand zur benachbarten Wand begrenzt, sodass Werte über 100% oder ein entsprechender absoluter Abstand keine zusätzliche Wirkung haben. Auf 0 setzen, um den Versatz zu deaktivieren." + msgid "Wipe before external loop" msgstr "Wischbewegung vor äußerer Schleife" @@ -16542,8 +16852,9 @@ msgstr "Nimmt das neue Werkzeug auf, ohne auf das Erreichen der Drucktemperatur msgid "No sparse layers (beta)" msgstr "Keine dünnen Schichten (Beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Wenn aktiviert, wird der Reinigungsturm nicht auf Schichten ohne Werkzeugwechsel gedruckt. Auf Schichten mit einem Werkzeugwechsel wird der Extruder nach unten fahren, um den Reinigungsturm zu drucken. Der Benutzer ist dafür verantwortlich, dass es keine Kollision mit dem Druck gibt." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Wenn aktiviert, wird der Reinigungsturm auf Schichten ohne Werkzeugwechsel nicht gedruckt. Auf Schichten mit einem Werkzeugwechsel fährt der Extruder nach unten, um den Reinigungsturm zu drucken, sodass der Turm unterhalb des Modells endet und der Werkzeugkopf zu ihm hinuntergreifen muss. Anordnungen, bei denen das mit einem bereits gedruckten Objekt kollidieren würde, werden abgelehnt. Hat keine Wirkung beim Smooth-Zeitraffer oder bei der Düsenverstopfungserkennung, die auf jeder Schicht einen Turm benötigen." msgid "Prime all printing extruders" msgstr "Reinige alle Druckextruder" @@ -16569,6 +16880,34 @@ msgstr "" msgid "Cyclic" msgstr "Zyklisch" +# AI Translated +msgid "Cyclic order" +msgstr "Zyklische Reihenfolge" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Benutzerdefinierte Filamentreihenfolge für die zyklische Werkzeugwechsel-Reihenfolge, als durch Kommas getrennte Filamentnummern (z. B. \"3,2,1,4\").\n" +"Jede Schicht druckt ihre Filamente in dieser Reihenfolge; nicht aufgeführte Filamente werden zuletzt gedruckt, in aufsteigender Reihenfolge.\n" +"Leer lassen, um die Filamente in aufsteigender Reihenfolge zu durchlaufen." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Zyklische Reihenfolge auf erste Schicht anwenden" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Wendet die zyklische Werkzeugwechsel-Reihenfolge auch auf die erste Schicht an.\n" +"Standardmäßig ist dies deaktiviert, weil die erste Schicht stattdessen für die beste Druckbetthaftung sortiert wird: Filamente, die kleine, empfindliche Elemente der ersten Schicht drucken, werden zuletzt gedruckt, sodass die folgenden Werkzeugwechsel und Eilgänge diese schwach verankerten Teile seltener losreißen. Diese Reihenfolge der ersten Schicht berücksichtigt auch eine benutzerdefinierte Filamentreihenfolge für die erste Schicht, sofern eine festgelegt ist. Der Vorteil der zyklischen Reihenfolge (zusätzliche Werkzeugwechsel geben jeder Schicht mehr Zeit zum Abkühlen) gilt nicht für die erste Schicht, die für die Haftung langsam und heiß gedruckt wird.\n" +"Aktivieren Sie dies nur, wenn Sie auf jeder Schicht einschließlich der ersten exakt dieselbe Werkzeugreihenfolge benötigen, auf Kosten dieser Haftungsoptimierung." + msgid "Slice gap closing radius" msgstr "Slice-Lückenschlussradius" @@ -16578,9 +16917,6 @@ msgstr "Risse, die kleiner als das 2-fache des Lückenschlussradius sind, werden msgid "Slicing Mode" msgstr "Slicing-Modus" -msgid "Other" -msgstr "Sonstiges" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Verwenden Sie \"Gerade-ungerade\" für 3DLabPrint-Flugzeugmodelle. Verwenden Sie \"Löcher schließen\", um alle Löcher im Modell zu schließen." @@ -17070,6 +17406,14 @@ msgstr "" "\n" "Wenn ein Wert in der Einstellung \"Rückzugsmenge vor dem Wischen\" unten angegeben ist, wird ein überschüssiger Rückzug vor dem Wischen ausgeführt, ansonsten wird er danach ausgeführt." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Mischfarben-Unterschicht" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Aktiviert die Aufteilung in Mischfarben-Unterschichten. Wenn aktiviert, werden Schichten mit Mischfarben-Filamenten in Unterschichten aufgeteilt, um Farbmischeffekte zu erzielen." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Der Reinigungsturm kann verwendet werden, um Rückstände auf der Düse zu entfernen und den Kammerdruck im Inneren der Düse zu stabilisieren, um Erscheinungsdefekte beim Drucken von Objekten zu vermeiden." @@ -17563,6 +17907,14 @@ msgstr "Keine Überprüfung" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Führe keine Gültigkeitsprüfungen durch, wie beispielsweise die Überprüfung von G-Code-Pfadkonflikten." +# AI Translated +msgid "Strict mode" +msgstr "Strikter Modus" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Beendet sich mit einem Rückgabewert ungleich null, wenn das Slicen eine nicht kritische Warnung auslöst, die sonst nur protokolliert wird, etwa ein Modell, das Stützen benötigt, während Stützen deaktiviert sind. Verwenden Sie dies in CI- oder Skript-Pipelines, die niemals einen unbemerkt fehlerhaften Slice ausliefern sollen. Jede solche Warnung wird zusätzlich mit einer stabilen Klasse im Array `warnings` von result.json aufgeführt, das nur unter Linux geschrieben wird. Kann nicht mit --no-check kombiniert werden, das die Stützenprüfung überspringt." + msgid "Normative check" msgstr "Normative Überprüfung" @@ -17575,11 +17927,28 @@ msgstr "Ausgabe Modellinformationen" msgid "This outputs the model’s information." msgstr "Geben Sie die Informationen des Modells aus." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Mesh prüfen (JSON nach stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Gibt eine JSON-Zusammenfassung jedes geladenen Objekts nach stdout aus und beendet sich dann: seine Begrenzungsrahmen und die Flächen der konvexen Hülle, auf die es gelegt werden kann, mit deren Normalen, Flächeninhalten und Mittelpunkten. Dies sind die Flächen, aus denen die Optionen --ground-* auswählen. Maschinenlesbare Alternative zu --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Bemalung prüfen (JSON nach stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Gibt eine strukturierte JSON-Zusammenfassung jeder bereits im geladenen Modell gespeicherten Bemalungsebene (Stützen, Naht, MMU-Farbe, Fuzzy skin) aus — Facettenanzahl, Oberfläche und mesh-lokaler Begrenzungsrahmen je Zustand — und beendet sich dann. Maschinenlesbare Alternative zum Öffnen der Mal-Gizmos in der Benutzeroberfläche." + msgid "Export Settings" msgstr "Einstellungen exportieren" -msgid "This exports settings to a file." -msgstr "Einstellungen in eine Datei exportieren." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Exportiert die Einstellungen in eine Datei. Verwenden Sie -, um sie nach stdout zu schreiben." msgid "Send progress to pipe" msgstr "Fortschritt an die Leitung senden" @@ -17635,6 +18004,30 @@ msgstr "Rotieren um Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Rotationswinkel um die Y-Achse in Grad." +# AI Translated +msgid "Ground largest face" +msgstr "Auf größte Fläche legen" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt jedes Objekt auf die größte Fläche seiner konvexen Hülle und lässt es auf das Druckbett fallen. Bei gleich großen Flächen wird die bereits nach unten zeigende beibehalten. Objekte ohne eine ausreichend große Auflagefläche bleiben unverändert. Transformationen werden in der Reihenfolge der Befehlszeile ausgeführt, sodass vor dieser Option angegebene Drehungen berücksichtigt werden. --orient 1 läuft nach allen Transformationen und ersetzt die Ausrichtung." + +# AI Translated +msgid "Ground face by normal" +msgstr "Auf Fläche nach Normale legen" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt jedes Objekt auf die Fläche der konvexen Hülle, deren äußere Normale der Richtung NX,NY,NZ am nächsten kommt, und lässt es auf das Druckbett fallen. Die Richtung ist in Objektkoordinaten angegeben, die die vor dieser Option angegebenen Drehungen enthalten und den Achsen des Druckbetts entsprechen, sofern die Eingabedatei das Objekt nicht dreht. Zum Beispiel stellt 1,0,0 das Objekt auf seine +X-Seite. --orient 1 läuft nach allen Transformationen und ersetzt die Ausrichtung." + +# AI Translated +msgid "Ground face at point" +msgstr "Auf Fläche an Punkt legen" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt jedes Objekt auf die Fläche der konvexen Hülle, die den Punkt X,Y,Z enthält, und lässt es auf das Druckbett fallen. Der Punkt ist in Objektkoordinaten angegeben, die die vor dieser Option angegebenen Drehungen enthalten; --inspect-mesh gibt Flächenmittelpunkte in diesen an. Objekte ohne eine solche Fläche bleiben unverändert, und der Durchlauf schlägt fehl, wenn kein Objekt eine solche hat. --orient 1 läuft nach allen Transformationen und ersetzt die Ausrichtung." + msgid "Scale the model by a float factor." msgstr "Skalierung des Modells um einen Faktor" @@ -18140,6 +18533,10 @@ msgstr "Das Erstellen eines Netzes aus der Modelldatei ist fehlgeschlagen oder e msgid "The supplied file couldn't be read because it's empty." msgstr "Die angegebene Datei konnte nicht gelesen werden, weil sie leer ist." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Das Dateiformat ist nicht kompatibel und kann nicht gelesen werden." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Unbekanntes Dateiformat: Die Eingabedatei muss die Endung .stl, .obj oder .amf(.xml) haben." @@ -19600,19 +19997,19 @@ msgstr "Nur Druckernamen mit Änderungen an Drucker-, Filament- und Prozessprofi msgid "Only display the filament names with changes to filament presets." msgstr "Nur die Filamentnamen mit Änderungen an den Filamentprofilen werden angezeigt." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Nur Druckernamen mit Benutzerdruckerprofilen werden angezeigt, und jedes Profil, das Sie auswählen, wird als ZIP exportiert." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Nur die Filamentnamen mit Benutzerfilamentvorlagen werden angezeigt, \n" "und alle Benutzerfilamentvorlagen in jedem Filamentnamen, den Sie auswählen, " msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Nur Druckernamen mit geänderten Prozessvorlagen werden angezeigt, \n" "und alle Benutzerprozessvorlagen in jedem Druckernamen, den Sie auswählen, werden als ZIP exportiert." @@ -19841,7 +20238,7 @@ msgstr "Systeminformationen in die Zwischenablage kopieren" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Wir benötigen Informationen zur Diagnose der Ursache des Problems. Überprüfen Sie die Wiki-Seite für eine detaillierte Anleitung." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Die Schaltfläche „Packen“ sammelt die Projektdatei und Protokolle der aktuellen Sitzung in einer ZIP-Datei." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19883,7 +20280,7 @@ msgstr "Protokollstufe" msgid "Stored logs" msgstr "Gespeicherte Protokolle" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Packt alle gespeicherten Protokolle in eine ZIP-Datei." msgid "Profiles" @@ -19950,7 +20347,7 @@ msgstr "Druckertyp nicht gefunden, bitte manuell auswählen." msgid "Authorizing..." msgstr "Autorisierung..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fehler. Kann kein API-Token für die Autorisierung erhalten" msgid "Could not parse server response." @@ -20398,8 +20795,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Intelligente Filamentzuweisung aktivieren: Ein Filament mehreren Düsen zuweisen, um Einsparungen zu maximieren" # AI Translated -msgid "Fila Saving" -msgstr "Filamentersparnis" +msgid "File Saving" +msgstr "Datei speichern" msgid "Don't remind me again" msgstr "Nicht mehr erinnern" @@ -20685,6 +21082,18 @@ msgstr "Diese Aktion kann nicht rückgängig gemacht werden. Fortsetzen?" msgid "Skipping objects." msgstr "Objekte werden übersprungen." +# AI Translated +msgid "Material Ratio" +msgstr "Materialanteil" + +# AI Translated +msgid "Model Height" +msgstr "Modellhöhe" + +# AI Translated +msgid "Ratio" +msgstr "Anteil" + msgid "Select Filament" msgstr "Filament auswählen" @@ -20764,6 +21173,9 @@ msgstr "Jetzt neu starten" msgid "NO RAMMING AT ALL" msgstr "KEIN RAMMING ÜBERALL" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Volumetrische Geschwindigkeit" @@ -20938,12 +21350,14 @@ msgid "Drying-Dehumidifying" msgstr "Trocknung – Entfeuchten" # AI Translated -msgid " maximum drying temperature is " -msgstr " maximale Trocknungstemperatur ist " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Die maximale Trocknungstemperatur von %s beträgt %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " minimale Trocknungstemperatur ist " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Die minimale Trocknungstemperatur von %s beträgt %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21388,6 +21802,128 @@ msgstr "" "Verwerfungen vermeiden\n" "Wussten Sie, dass beim Drucken von Materialien, die zu Verwerfungen neigen, wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die Wahrscheinlichkeit von Verwerfungen verringert werden kann?" +#~ msgid "Other" +#~ msgstr "Sonstiges" + +#~ msgid "Left: " +#~ msgstr "Links: " + +#~ msgid "Right: " +#~ msgstr "Rechts: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Die maximale Temperatur darf nicht überschritten werden " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Die minimale Temperatur sollte nicht weniger als " + +#~ msgid "up to" +#~ msgstr "bis zu" + +#~ msgid "above" +#~ msgstr "über" + +#~ msgid "from" +#~ msgstr "von" + +#~ msgid "Configuration package: " +#~ msgstr "Konfigurationspaket:" + +#~ msgid " updated to " +#~ msgstr " aktualisiert auf " + +#~ msgid "Grouping error: " +#~ msgstr "Gruppierungsfehler: " + +#~ msgid " can not be placed in the " +#~ msgstr " kann nicht platziert werden in der " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " maximale Trocknungstemperatur ist " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " minimale Trocknungstemperatur ist " + +# AI Translated +#~ msgid "needs" +#~ msgstr "benötigt" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "nicht aktiviert" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "Material nicht veröffentlicht" + +#~ msgid "Select the language" +#~ msgstr "Sprache wählen" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Plugin auswählen" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Richtung, in der obere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n" +#~ "Nach außen beginnt in der Mitte der Oberfläche, sodass überschüssiges Material zum Rand geschoben wird, wo es am wenigsten sichtbar ist. Nach innen beginnt am Rand und endet mit den engen Kurven in der Mitte.\n" +#~ "Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Richtung, in der untere Oberflächen gefüllt werden, wenn ein mittenbasiertes Muster (Konzentrisch, Archimedische Akkorde, Oktagramm Spirale) verwendet wird.\n" +#~ "Nach innen beginnt jede Oberfläche mit den breiteren äußeren Kurven, was die Haftung der ersten Schicht auf Druckbetten verbessert, auf denen die engen Kurven in der Mitte möglicherweise nicht haften. Nach außen beginnt in der Mitte und schiebt überschüssiges Material zum Rand.\n" +#~ "Standard verwendet die Sortierung nach kürzestem Pfad, die in beide Richtungen verlaufen kann." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Wenn aktiviert, wird der Reinigungsturm nicht auf Schichten ohne Werkzeugwechsel gedruckt. Auf Schichten mit einem Werkzeugwechsel wird der Extruder nach unten fahren, um den Reinigungsturm zu drucken. Der Benutzer ist dafür verantwortlich, dass es keine Kollision mit dem Druck gibt." + +#~ msgid "This exports settings to a file." +#~ msgstr "Einstellungen in eine Datei exportieren." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Native Wayland Liveview erfordert das GStreamer GTK Video Sink. Bitte installieren Sie das gtksink-Plugin für GStreamer und starten Sie OrcaSlicer neu." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Fehler beim Initialisieren des nativen Wayland GStreamer Video Sinks. Bitte überprüfen Ihre GStreamer GTK-Plugin-Installation." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player wird für diese Aufgabe benötigt! Möchten Sie 'Windows Media Player' für Ihr Betriebssystem aktivieren?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource wurde nicht korrekt für das Abspielen von Medien registriert! Drücken Sie Ja, um es erneut zu registrieren. Sie werden zweimal aufgefordert" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Fehlende BambuSource-Komponente, die für das Abspielen von Medien registriert ist! Bitte installieren Sie OrcaSlicer neu oder suchen Sie Hilfe in der Community." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Verwendung eines BambuSource aus einer anderen Installation, das Abspielen von Videos funktioniert möglicherweise nicht korrekt! Drücken Sie Ja, um es zu beheben." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ihr System fehlt H.264-Codecs für GStreamer, die zum Abspielen von Videos erforderlich sind. (Versuchen Sie, die Pakete gstreamer1.0-plugins-bad oder gstreamer1.0-libav zu installieren und starten Sie Orca Slicer neu?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentersparnis" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 88fb455959..d6f39cacb5 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-06-17 15:44-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: \n" @@ -2289,15 +2289,6 @@ msgstr "" msgid "%s has been removed." msgstr "" -msgid "Switching application language" -msgstr "" - -msgid "Select the language" -msgstr "" - -msgid "Language" -msgstr "" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "" @@ -2758,6 +2749,9 @@ msgstr "" msgid "Merge with" msgstr "" +msgid "Decompose Color" +msgstr "" + msgid "Delete this filament" msgstr "" @@ -3035,6 +3029,9 @@ msgstr "" msgid "Merge parts to an object" msgstr "" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "" + msgid "Add layers" msgstr "" @@ -3478,10 +3475,12 @@ msgstr "" msgid "Switch track at Filament Track Switch" msgstr "" -msgid "The maximum temperature cannot exceed " +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" msgstr "" -msgid "The minmum temperature should not be less than " +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" msgstr "" msgid "Type to filter..." @@ -4314,6 +4313,12 @@ msgid "" "Error message: %1%" msgstr "" +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "" @@ -4493,7 +4498,7 @@ msgid "" "The value will be reset to 0." msgstr "" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "" msgid "" @@ -4524,13 +4529,13 @@ msgid "" msgstr "" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" @@ -4561,6 +4566,9 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "" +msgid "N/A" +msgstr "" + msgid "Printing" msgstr "" @@ -4983,10 +4991,10 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "" #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "" + +msgid "%" msgstr "" #, boost-format @@ -5009,22 +5017,16 @@ msgstr "" msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "" -msgid "N/A" -msgstr "" - msgid "System agents" msgstr "" -msgid "No plugin selected" -msgstr "" - msgid "Add plugin" msgstr "" -msgid "Select plugin" +msgid "Remove plugin" msgstr "" -msgid "Remove plugin" +msgid "No plugin selected" msgstr "" msgid "Configure" @@ -5280,13 +5282,16 @@ msgstr "" msgid "Regroup filament" msgstr "" -msgid "up to" +#, boost-format +msgid "up to %1% mm" msgstr "" -msgid "above" +#, boost-format +msgid "above %1% mm" msgstr "" -msgid "from" +#, boost-format +msgid "from %1% to %2% mm" msgstr "" msgid "Usage" @@ -5637,7 +5642,7 @@ msgstr "" msgid "Size:" msgstr "" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "" @@ -5941,16 +5946,22 @@ msgstr "" msgid "Save current project as" msgstr "" +msgid "Publish 3MF" +msgstr "" + +msgid "Export a 3MF file with the selected settings embedded" +msgstr "" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "" msgid "Load a model" msgstr "" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "" msgid "Import Configs" @@ -7168,6 +7179,12 @@ msgctxt "Layers" msgid "Bottom" msgstr "" +msgid "This setting does not specify a plugin capability type." +msgstr "" + +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "" + msgid "Plugin Selection" msgstr "" @@ -7399,6 +7416,9 @@ msgstr "" msgid "The %s nozzle can not print %s." msgstr "" +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7519,12 +7539,36 @@ msgstr "" msgid "Set filaments to use" msgstr "" +msgid "Add Mixed Filament" +msgstr "" + +msgid "Mixed Filament" +msgstr "" + +msgid "Remove last mixed filament" +msgstr "" + +msgid "Add mixed filament" +msgstr "" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "" + msgid "Search plate, object and part." msgstr "" msgid "Pellets" msgstr "" +msgid "Mixed filament has broken component references" +msgstr "" + +msgid "Edit / Delete / Merge" +msgstr "" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "" @@ -7659,7 +7703,13 @@ msgstr "" msgid "Customized Preset" msgstr "" -msgid "Component name(s) inside step file not in UTF8 format!" +msgid "Some published settings could not be applied:" +msgstr "" + +msgid "Some filament slots were changed:" +msgstr "" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7681,7 +7731,7 @@ msgstr "" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" msgid "Object too small" @@ -7696,6 +7746,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "" +msgid "Matching textures to filaments" +msgstr "" + +msgid "Texture Import Warning" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -7890,6 +7946,18 @@ msgstr "" msgid "Sync now" msgstr "" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "" + +msgid "Applying texture colors..." +msgstr "" + +msgid "Updating 3D view..." +msgstr "" + +msgid "Texture colors applied." +msgstr "" + msgid "You can keep the modified presets for the new project or discard them" msgstr "" @@ -8019,6 +8087,17 @@ msgstr "" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "" +msgid "Publish 3MF file as:" +msgstr "" + +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" + +msgid "Publish" +msgstr "" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "" @@ -8216,9 +8295,6 @@ msgstr "" msgid "Language selection" msgstr "" -msgid "Switching application language while some presets are modified." -msgstr "" - msgid "Asia-Pacific" msgstr "" @@ -8312,6 +8388,9 @@ msgstr "" msgid "General" msgstr "" +msgid "Language" +msgstr "" + msgid "Metric" msgstr "" @@ -8701,9 +8780,6 @@ msgstr "" msgid "Dimmed layer brightness" msgstr "" -msgid "%" -msgstr "" - msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" "99% is barely darkened, 0% renders them black. Capped at 99% because 100% would be the same as disabling the option." @@ -9039,6 +9115,9 @@ msgstr "" msgid "First layer filament sequence" msgstr "" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "" + msgid "By Layer" msgstr "" @@ -9066,9 +9145,6 @@ msgstr "" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "" -msgid "Publish" -msgstr "" - msgid "Publish was canceled" msgstr "" @@ -9084,6 +9160,63 @@ msgstr "" msgid "Jump to webpage" msgstr "" +msgid "Material" +msgstr "" + +msgid "Mixed filament" +msgstr "" + +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "" + +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "" + +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "" + +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "" + +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "" + +msgid "Publish anyway" +msgstr "" + +msgid "Publish 3MF..." +msgstr "" + +msgid "Select which settings to be published in the 3MF file" +msgstr "" + +msgid "Publish 3MF Wiki" +msgstr "" + +msgid "Publish 3MF Video Guide" +msgstr "" + +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "" + +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "" + +msgid "Publish this filament slot in the 3MF file" +msgstr "" + +msgid "Full Publish" +msgstr "" + +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "" + +msgid "Filter non-selected" +msgstr "" + #, c-format, boost-format msgid "Save %s as" msgstr "" @@ -9100,6 +9233,9 @@ msgstr "" msgid "Detach from parent" msgstr "" +msgid "Save without parent" +msgstr "" + msgid "Unique preset" msgstr "" @@ -9749,9 +9885,15 @@ msgstr "" msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "" +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "" +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "" + msgid "Still print by object?" msgstr "" @@ -10100,9 +10242,6 @@ msgstr "" msgid "Printable space" msgstr "" -msgid "Printer Agent" -msgstr "" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "" @@ -10325,11 +10464,11 @@ msgstr "" msgid "No modifications need to be copied." msgstr "" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "" #, c-format, boost-format @@ -10462,12 +10601,6 @@ msgstr "" msgid "Capabilities" msgstr "" -msgid "Left: " -msgstr "" - -msgid "Right: " -msgstr "" - msgid "Show all presets (including incompatible)" msgstr "" @@ -10803,27 +10936,6 @@ msgstr "" msgid "Please choose the filament colour" msgstr "" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "" @@ -11292,15 +11404,19 @@ msgstr "" msgid "Copying of file %1% to %2% failed: %3%" msgstr "" +msgid "Downloading new vendor profile(s): " +msgstr "" + +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "" + +msgid "Failed to download vendor profile(s): " +msgstr "" + msgid "Please check any unsaved changes before updating the configuration." msgstr "" -msgid "Configuration package: " -msgstr "" - -msgid " updated to " -msgstr "" - msgid "Open G-code file:" msgstr "" @@ -11356,10 +11472,12 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "" -msgid "Grouping error: " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" msgstr "" -msgid " can not be placed in the " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" msgstr "" msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -11473,6 +11591,9 @@ msgstr "" msgid "%1% is too tall, and collisions will be caused." msgstr "" +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "" @@ -11506,6 +11627,9 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "" @@ -11542,6 +11666,9 @@ msgstr "" msgid "Variable layer height is not supported with Organic supports." msgstr "" +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "" @@ -11789,6 +11916,9 @@ msgstr "" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "" +msgid "Printer Agent" +msgstr "" + msgid "Select the network agent implementation for printer communication." msgstr "" @@ -11870,7 +12000,7 @@ msgstr "" msgid "Other layers" msgstr "" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -12637,6 +12767,9 @@ msgstr "" msgid "Concentric" msgstr "" +msgid "Spiral Inset" +msgstr "" + msgid "Hilbert Curve" msgstr "" @@ -12706,7 +12839,7 @@ msgid "Top surface fill order" msgstr "" msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" @@ -12715,7 +12848,7 @@ msgid "Bottom surface fill order" msgstr "" msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" @@ -12803,6 +12936,12 @@ msgstr "" msgid "Clockwise" msgstr "" +msgid "Distance to rod" +msgstr "" + +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "" + msgid "Height to rod" msgstr "" @@ -12954,6 +13093,7 @@ msgstr "" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "" +msgctxt "second" msgid "s" msgstr "" @@ -13247,6 +13387,48 @@ msgstr "" msgid "Support material is commonly used to print supports and support interfaces." msgstr "" +msgid "Is mixed filament" +msgstr "" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "" + +msgid "Mixed filament components" +msgstr "" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "" + +msgid "Mixed filament sublayer ratios" +msgstr "" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "" + +msgid "Mixed filament gradient" +msgstr "" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "" + +msgid "Mixed filament gradient range" +msgstr "" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "" + +msgid "Mixed filament gradient curve" +msgstr "" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "" + +msgid "Mixed filament per-part gradient" +msgstr "" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "" + msgid "Filament printable" msgstr "" @@ -14394,6 +14576,7 @@ msgstr "" msgid "The allowed maximum output force of Y axis" msgstr "" +msgctxt "Newton" msgid "N" msgstr "" @@ -14403,6 +14586,7 @@ msgstr "" msgid "The machine bed mass load of Y axis" msgstr "" +msgctxt "gram" msgid "g" msgstr "" @@ -14671,7 +14855,7 @@ msgstr "" msgid "Reduce infill retraction" msgstr "" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -14708,6 +14892,15 @@ msgstr "" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "" +msgid "Print unsupported walls last" +msgstr "" + +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" + msgid "Outer walls" msgstr "" @@ -14827,7 +15020,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" @@ -14870,7 +15063,7 @@ msgstr "" msgid "Z-hop height" msgstr "" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "" msgid "Z-hop lower boundary" @@ -15117,6 +15310,27 @@ msgstr "" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "" +msgid "Wipe inward" +msgstr "" + +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" + +msgid "Wipe inward distance" +msgstr "" + +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" + msgid "Wipe before external loop" msgstr "" @@ -15357,7 +15571,7 @@ msgstr "" msgid "No sparse layers (beta)" msgstr "" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." msgstr "" msgid "Prime all printing extruders" @@ -15378,6 +15592,24 @@ msgstr "" msgid "Cyclic" msgstr "" +msgid "Cyclic order" +msgstr "" + +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" + +msgid "Apply cyclic order to first layer" +msgstr "" + +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" + msgid "Slice gap closing radius" msgstr "" @@ -15387,9 +15619,6 @@ msgstr "" msgid "Slicing Mode" msgstr "" -msgid "Other" -msgstr "" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "" @@ -15830,6 +16059,12 @@ msgid "" "Setting a value in the retract amount before wipe setting below will perform any excess retraction before the wipe, else it will be performed after." msgstr "" +msgid "Mixed color sublayer" +msgstr "" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "" @@ -16286,6 +16521,12 @@ msgstr "" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "" +msgid "Strict mode" +msgstr "" + +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "" + msgid "Normative check" msgstr "" @@ -16298,10 +16539,22 @@ msgstr "" msgid "This outputs the model’s information." msgstr "" +msgid "Inspect mesh (JSON to stdout)" +msgstr "" + +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "" + +msgid "Inspect paint (JSON to stdout)" +msgstr "" + +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "" + msgid "Export Settings" msgstr "" -msgid "This exports settings to a file." +msgid "This exports settings to a file. Use - to write them to stdout." msgstr "" msgid "Send progress to pipe" @@ -16358,6 +16611,24 @@ msgstr "" msgid "Rotation angle around the Y axis in degrees." msgstr "" +msgid "Ground largest face" +msgstr "" + +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + +msgid "Ground face by normal" +msgstr "" + +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + +msgid "Ground face at point" +msgstr "" + +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "" + msgid "Scale the model by a float factor." msgstr "" @@ -16857,6 +17128,9 @@ msgstr "" msgid "The supplied file couldn't be read because it's empty." msgstr "" +msgid "The file format is incompatible and cannot be parsed." +msgstr "" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "" @@ -18187,17 +18461,17 @@ msgstr "" msgid "Only display the filament names with changes to filament presets." msgstr "" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" msgid "Please select at least one printer or filament." @@ -18412,7 +18686,7 @@ msgstr "" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "" -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "" msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -18454,7 +18728,7 @@ msgstr "" msgid "Stored logs" msgstr "" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "" msgid "Profiles" @@ -18519,7 +18793,7 @@ msgstr "" msgid "Authorizing..." msgstr "" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "" msgid "Could not parse server response." @@ -18957,7 +19231,7 @@ msgstr "" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "" -msgid "Fila Saving" +msgid "File Saving" msgstr "" msgid "Don't remind me again" @@ -19240,6 +19514,15 @@ msgstr "" msgid "Skipping objects." msgstr "" +msgid "Material Ratio" +msgstr "" + +msgid "Model Height" +msgstr "" + +msgid "Ratio" +msgstr "" + msgid "Select Filament" msgstr "" @@ -19317,6 +19600,9 @@ msgstr "" msgid "NO RAMMING AT ALL" msgstr "" +msgid "s" +msgstr "" + msgid "Volumetric speed" msgstr "" @@ -19473,10 +19759,12 @@ msgstr "" msgid "Drying-Dehumidifying" msgstr "" -msgid " maximum drying temperature is " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." msgstr "" -msgid " minimum drying temperature is " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." msgstr "" msgid "This filament may not be completely dried." diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 9c5127e50a..56132eb970 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: Ian A. Bassi <>\n" "Language-Team: \n" @@ -2356,15 +2356,6 @@ msgstr "Hay una actualización disponible. Abra el cuadro de diálogo del paquet msgid "%s has been removed." msgstr "Se ha eliminado %s." -msgid "Switching application language" -msgstr "Cambiando el idioma de la aplicación" - -msgid "Select the language" -msgstr "Seleccionar el idioma" - -msgid "Language" -msgstr "Idioma" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "No se pudo cambiar Orca Slicer al idioma %s." @@ -2832,6 +2823,9 @@ msgstr "Editar" msgid "Merge with" msgstr "Fusionar con" +msgid "Decompose Color" +msgstr "Descomponer color" + msgid "Delete this filament" msgstr "Eliminar este filamento" @@ -3113,6 +3107,9 @@ msgstr "Ensamblaje" msgid "Merge parts to an object" msgstr "Fusionar piezas en un objeto" +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Usar altura de capa variable junto con la subcapa de color mezclado puede reducir la calidad de la mezcla de colores." + msgid "Add layers" msgstr "Añadir capas" @@ -3556,11 +3553,15 @@ msgstr "Retirar el filamento actual en el Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Cambiar de vía en el Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "La temperatura máxima no puede superar " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "La temperatura máxima no puede superar %d" -msgid "The minmum temperature should not be less than " -msgstr "La temperatura mínima no debe ser inferior a " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "La temperatura mínima no debe ser inferior a %d" msgid "Type to filter..." msgstr "Escribe para filtrar..." @@ -4420,6 +4421,15 @@ msgstr "" "Error al copiar el G-Code temporal en el G-Code de salida. ¿Quizás la tarjeta SD está protegida contra escritura?\n" "Mensaje de error: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Error al copiar el código G temporal al código G de salida.\n" +"Mensaje de error: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "La copia del G-Code temporal al G-Code de salida ha fallado. Puede haber un problema con el dispositivo de destino, intenta exportar nuevamente o usa un dispositivo diferente. El G-Code de salida dañado está en %1%.tmp." @@ -4629,7 +4639,7 @@ msgstr "" "\n" "El valor se restablecerá a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Perímetro adicional alternado no funciona bien cuando \"Garantizar el grosor vertical de las cubiertas\" se establece en Todos." msgid "" @@ -4675,7 +4685,7 @@ msgstr "" "NO - Mantener la altura de capa de soportes independiente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height debe ser menor que layer_height.\n" @@ -4683,7 +4693,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profundidad de bloqueo debe ser menor que la profundidad de piel.\n" @@ -4723,6 +4733,9 @@ msgstr "" "Sí - Cambiar estos ajustes y activar el modo espiral automáticamente\n" "No - Dejar de usar el modo espiral esta vez" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Imprimiendo" @@ -5147,14 +5160,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "El valor %s está fuera de rango. El rango válido es de %d a %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"¿Es %s%% o %s %s?\n" -"SÍ para %s%%, \n" -"NO para %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "¿Es %s%% o %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5176,24 +5186,18 @@ msgstr "Patrón inválido. Use N, N#K, o una lista separada por comas con #K opc msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vector esperado: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Agentes del sistema" -msgid "No plugin selected" -msgstr "Ningún plugin seleccionado" - msgid "Add plugin" msgstr "Añadir plugin" -msgid "Select plugin" -msgstr "Seleccionar plugin" - msgid "Remove plugin" msgstr "Eliminar plugin" +msgid "No plugin selected" +msgstr "Ningún plugin seleccionado" + msgid "Configure" msgstr "Configurar" @@ -5447,14 +5451,20 @@ msgstr "Ajustar a óptimo" msgid "Regroup filament" msgstr "Reagrupar filamentos" -msgid "up to" -msgstr "hasta" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "hasta %1% mm" -msgid "above" -msgstr "sobre" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "por encima de %1% mm" -msgid "from" -msgstr "desde" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "de %1% a %2% mm" msgid "Usage" msgstr "Uso" @@ -5811,7 +5821,7 @@ msgstr "Volumen:" msgid "Size:" msgstr "Tamaño:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Se han encontrado conflictos de rutas G-Code en la capa %d, Z = %.2lfmm. Por favor, separe más los objetos en conflicto (%s <-> %s)." @@ -6123,16 +6133,24 @@ msgstr "Guardar proyecto como" msgid "Save current project as" msgstr "Guardar el proyecto actual como" +# AI Translated +msgid "Publish 3MF" +msgstr "Publicar 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exportar un archivo 3MF con los ajustes seleccionados incrustados" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Cargar un modelo" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importar archivo Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Cargar modelos contenidos en un archivo zip" msgid "Import Configs" @@ -7380,6 +7398,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Este ajuste no especifica un tipo de capacidad de plugin." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Este ajuste especifica un tipo de capacidad de plugin no reconocido: " + msgid "Plugin Selection" msgstr "Selección de plugins" @@ -7613,6 +7639,9 @@ msgstr "Personalizar cama actual" msgid "The %s nozzle can not print %s." msgstr "La boquilla %s no puede imprimir %s." +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filamento de color mezclado en una impresora de un solo extrusor requiere cambios de filamento y purgas frecuentes, lo que puede aumentar considerablemente el desperdicio y el riesgo de obstrucción de la boquilla o del conducto de residuos." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "No se recomienda mezclar %1% con %2% en la impresión.\n" @@ -7735,12 +7764,36 @@ msgstr "Sicronizar filamentos de la lista AMS" msgid "Set filaments to use" msgstr "Elegir filamentos para usar" +msgid "Add Mixed Filament" +msgstr "Añadir filamento mixto" + +msgid "Mixed Filament" +msgstr "Filamento mixto" + +msgid "Remove last mixed filament" +msgstr "Eliminar el último filamento mixto" + +msgid "Add mixed filament" +msgstr "Añadir filamento mixto" + +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "El filamento mixto tiene componentes no válidos o incoherentes. Vuelva a editar las entradas afectadas." + msgid "Search plate, object and part." msgstr "Buscar cama, objeto y parte." msgid "Pellets" msgstr "Pellets" +msgid "Mixed filament has broken component references" +msgstr "El filamento mixto tiene referencias de componentes rotas" + +msgid "Edit / Delete / Merge" +msgstr "Editar / Borrar / Fusionar" + +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "El filamento mixto de destino usa este filamento físico como componente. Al fusionarlos se eliminará este filamento físico y el filamento mixto puede quedar no válido. ¿Continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completar la operación, el proyecto %s se cerrará y se creará un nuevo proyecto." @@ -7877,8 +7930,16 @@ msgstr "¡Por favor, confirme que el G-Code dentro de los perfiles son seguros p msgid "Customized Preset" msgstr "Perfil Personalizado" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF8!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Algunos ajustes publicados no se han podido aplicar:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Se han cambiado algunas ranuras de filamento:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "¡El nombre de los componentes dentro del archivo de pasos no tiene formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "¡El nombre puede mostrar caracteres no válidos!" @@ -7899,10 +7960,10 @@ msgstr "El volumen del objeto es cero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "El objeto del archivo %s es demasiado pequeño, tal vez en metros o pulgadas.\n" -" ¿Quiere escalar a milímetros?" +"¿Quiere escalar a milímetros?" msgid "Object too small" msgstr "Objeto demasiado pequeño" @@ -7919,6 +7980,12 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multipieza detectado" +msgid "Matching textures to filaments" +msgstr "Asociando texturas a los filamentos" + +msgid "Texture Import Warning" +msgstr "Aviso de importación de texturas" + msgid "Load these files as a single object with multiple parts?\n" msgstr "¿Cargar estos archivos como un objeto único con múltiples piezas?\n" @@ -8123,6 +8190,18 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar ahora" +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "No se ha podido importar la textura. El modelo parece contener datos de textura, pero no se ha podido completar el proceso de importación. El modelo se importará solo como geometría." + +msgid "Applying texture colors..." +msgstr "Aplicando colores de textura..." + +msgid "Updating 3D view..." +msgstr "Actualizando la vista 3D..." + +msgid "Texture colors applied." +msgstr "Colores de textura aplicados." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Puedes mantener los perfiles modificados en el nuevo proyecto o descartarlos" @@ -8254,6 +8333,21 @@ msgstr "Guardar el archivo laminado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "El archivo %s ha sido mandado al almacenamiento de la impresora y puede ser visualizado en la impresora." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publicar archivo 3MF como:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"No se ha podido exportar el archivo 3MF publicado.\n" +"Compruebe si la carpeta existe en línea o si otros programas tienen el archivo abierto." + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "El tipo de boquilla no está establecido. Configure la boquilla e inténtelo de nuevo." @@ -8455,9 +8549,6 @@ msgstr "¿Quieres continuar?" msgid "Language selection" msgstr "Selección de idiomas" -msgid "Switching application language while some presets are modified." -msgstr "Cambiando idioma de la aplicación mientras se modifican algunos perfiles." - msgid "Asia-Pacific" msgstr "Asia-Pacífico" @@ -8562,6 +8653,9 @@ msgstr "Ruta de Instancia Actual: " msgid "General" msgstr "General" +msgid "Language" +msgstr "Idioma" + msgid "Metric" msgstr "Métrico" @@ -8987,9 +9081,6 @@ msgstr "Al desplazar el control deslizante de capas en la vista previa laminada, msgid "Dimmed layer brightness" msgstr "Brillo de las capas atenuadas" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9338,6 +9429,9 @@ msgstr "Vaso en espiral" msgid "First layer filament sequence" msgstr "Secuencia de primera capa de filamento" +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La lista de filamentos contiene filamentos mixtos. La secuencia de filamentos personalizada no tendrá efecto." + msgid "By Layer" msgstr "Por Capa" @@ -9365,9 +9459,6 @@ msgstr "Ir a la página web de publicación de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: La preparación puede llevar varios minutos. Por favor, sea paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "La publicación fue cancelada" @@ -9383,6 +9474,81 @@ msgstr "Cargando datos" msgid "Jump to webpage" msgstr "Ir a la página web" +# AI Translated +msgid "Material" +msgstr "Material" + +# AI Translated +msgid "Mixed filament" +msgstr "Filamento mixto" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Algunos filamentos mixtos dependen de filamentos que no se publicarán:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filamento %d (mixto)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% necesita %2%, que no está habilitado." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% necesita %2%, cuyo material no se publicará." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Para publicar un filamento mixto, habilite todos los filamentos que utiliza y elija Publicación completa o cumpla su requisito de Tipo." + +# AI Translated +msgid "Publish anyway" +msgstr "Publicar de todos modos" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publicar 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Seleccione qué ajustes se publicarán en el archivo 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki de Publicar 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Guía en vídeo de Publicar 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filamento mixto - se publica como un conjunto cuando se selecciona \"Habilitar\" arriba" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publicar este filamento mixto y habilitar + publicar completamente sus filamentos componentes" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publicar esta ranura de filamento en el archivo 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Publicación completa" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Incrustar el filamento completo de esta ranura en el archivo 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrar no seleccionados" + #, c-format, boost-format msgid "Save %s as" msgstr "Guardar %s como" @@ -9400,6 +9566,10 @@ msgstr "Copia en este perfil todos los valores heredados del perfil padre y elim msgid "Detach from parent" msgstr "Separar del elemento padre" +# AI Translated +msgid "Save without parent" +msgstr "Guardar sin elemento padre" + # AI Translated msgid "Unique preset" msgstr "Perfil único" @@ -10060,9 +10230,17 @@ msgstr "La torre de purga es necesaria para la detección de aglomeraciones. Pue msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Habilitar tanto la altura Z precisa como la torre de purga puede causar errores de laminado. ¿Desea habilitar la altura Z precisa?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "El timelapse suave necesita una torre de purga en cada capa, lo que no es compatible con \"Sin capas de baja densidad\". Se ha desactivado \"Sin capas de baja densidad\"." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "La torre de purga es necesaria para que el timelapse sea suave. Puede haber defectos en el modelo sin torre de purga. ¿Desea activar la torre de purga?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Sin capas de baja densidad\" no es compatible con el timelapse suave, que necesita una torre de purga en cada capa. El timelapse ha cambiado al modo tradicional." + msgid "Still print by object?" msgstr "¿Seguir imprimiendo por objeto?" @@ -10427,9 +10605,6 @@ msgstr "Perfiles de proceso compatibles" msgid "Printable space" msgstr "Espacio imprimible" -msgid "Printer Agent" -msgstr "Agente de impresora" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Seleccione la implementación del agente de red para la comunicación con la impresora. Los agentes disponibles se registran al iniciar el sistema." @@ -10670,11 +10845,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "No hay modificaciones que copiar." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar parámetros" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar parámetros de %s" #, c-format, boost-format @@ -10828,12 +11003,6 @@ msgstr "Número de extrusores" msgid "Capabilities" msgstr "Capacidades" -msgid "Left: " -msgstr "Izquierda: " - -msgid "Right: " -msgstr "Derecha: " - msgid "Show all presets (including incompatible)" msgstr "Mostrar todos los perfiles (incluyendo los compatibles)" @@ -11181,27 +11350,6 @@ msgstr "Volúmenes de purgado para el cambio de filamentos" msgid "Please choose the filament colour" msgstr "Por favor, elija el color del filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La función de visualización en directo nativa de Wayland requiere el receptor de vídeo GTK de GStreamer. Instale el plugin gtksink para GStreamer y, a continuación, reinicie OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "No se pudo inicializar el receptor de vídeo nativo de Wayland GStreamer. Compruebe la instalación del plugin GTK de GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Para esta tarea se necesita el Reproductor de Windows Media. ¿Desea activar el \"Reproductor de Windows Media\" en su sistema operativo?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource no se ha registrado correctamente para la reproducción multimedia. Pulse Sí para volver a registrarlo. Será promocionado dos veces" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "¡Falta el componente BambuSource para la reproducción de medios! Reinstale OrcaSlicer o busque ayuda en la comunidad." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Si utiliza una BambuSource de una instalación diferente, es posible que la reproducción de vídeo no funcione correctamente. Pulsa Sí para solucionarlo." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "A tu sistema le faltan los codecs H.264 para GStreamer, necesarios para reproducir vídeo. (Prueba a instalar los paquetes gstreamer1.0-plugins-bad o gstreamer1.0-libav y, a continuación, reinicia Orca Slicer...)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "El proveedor de servicios en la nube no está disponible. Reinicia OrcaSlicer e inténtalo de nuevo." @@ -11672,15 +11820,22 @@ msgstr "Reparación cancelada" msgid "Copying of file %1% to %2% failed: %3%" msgstr "La copia del archivo %1% a %2% falló: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Descargando nuevos perfiles de fabricante: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Paquete de configuración: %1% actualizado a %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "No se han podido descargar los perfiles de fabricante: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Es necesario comprobar los cambios no guardados antes de actualizar la configuración." -msgid "Configuration package: " -msgstr "Paquete de configuración: " - -msgid " updated to " -msgstr " Actualizado a " - msgid "Open G-code file:" msgstr "Abrir archivo G-Code:" @@ -11740,11 +11895,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping solo es compatible con Klipper, RepRapFirmware y Marlin 2." -msgid "Grouping error: " -msgstr "Error de agrupación: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Error de agrupación: %1% no se puede colocar en la boquilla izquierda" -msgid " can not be placed in the " -msgstr " no se puede colocar en el " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Error de agrupación: %1% no se puede colocar en la boquilla derecha" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Error de agrupación en modo manual. Compruebe el número de boquillas o vuelva a agrupar." @@ -11857,6 +12016,10 @@ msgstr "%1% está demasiado cerca de otros, y pueden producirse colisiones." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% es demasiado alto, y se producirán colisiones." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "La posición relativa del modelo y la torre de purga no cumple los requisitos de la función \"Sin capas de baja densidad\". Ajuste sus posiciones relativas, reduzca la altura del modelo o desactive \"Sin capas de baja densidad\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " está muy cerca del área de exclusión, puede conllevar colisiones cuando se imprime." @@ -11891,6 +12054,9 @@ msgstr "Si aún así quieres imprimir, puedes activar la opción en Preferencias msgid "No extrusions under current settings." msgstr "No hay extrusiones con los ajustes actuales." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Se está usando un filamento mixto con degradado, pero 'Subcapa de color mezclado' está desactivado. El degradado no se imprimirá." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Modo de timelapse suave no está soportado cuando la secuencia \"por objeto\" está activada." @@ -11927,6 +12093,9 @@ msgstr "Es posible que desee reducir el tamaño de su modelo o cambiar la config msgid "Variable layer height is not supported with Organic supports." msgstr "La altura de capa adaptativa no es compatible con los soportes orgánicos." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "El filamento de la torre de purga no puede ser un filamento mixto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diámetros de boquillas y diámetros de filamento diferentes pueden no funcionar correctamente cuando la torre de purga está activada. Esta función es experimental, así que proceda con cautela." @@ -12186,6 +12355,9 @@ msgstr "Utiliza 3MF en lugar de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activa esta opción si la impresora admite un archivo 3MF como trabajo de impresión. Cuando está activada, Orca Slicer envía el archivo cortado como un archivo .gcode.3mf, en lugar de como un archivo .gcode convencional." +msgid "Printer Agent" +msgstr "Agente de impresora" + msgid "Select the network agent implementation for printer communication." msgstr "Seleccione la implementación del agente de red para la comunicación con la impresora." @@ -12267,8 +12439,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Otras capas" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura de la cama para las capas, excepto la inicial. Un valor de 0 significa que el filamento no es compatible con la Cama Fría SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Esta es la temperatura de la cama para las capas excepto la inicial. Un valor de 0 significa que el filamento no es compatible con la Cama Fría SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Esta es la temperatura de la cama para las capas excepto la inicial. Un valor de 0 significa que el filamento no admite la impresión en la Cama Fría." @@ -13231,6 +13403,10 @@ msgstr "Rectilíneo Alineado" msgid "Concentric" msgstr "Concéntrico" +# AI Translated +msgid "Spiral Inset" +msgstr "Espiral interior" + msgid "Hilbert Curve" msgstr "Curva de Hilbert" @@ -13310,26 +13486,28 @@ msgstr "" msgid "Top surface fill order" msgstr "Orden de relleno de la superficie superior" +# AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Dirección en la que se rellenan las superficies superiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n" -"Hacia afuera comienza en el centro de la superficie, de modo que cualquier exceso de material se empuja hacia el borde, donde es menos visible. Hacia adentro comienza en el borde y termina con las curvas cerradas del centro.\n" -"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección." +"Dirección en la que se rellenan las superficies superiores cuando se usa un patrón basado en el centro (Concéntrico, Espiral interior, Espiral de Arquímedes, Espiral Octagonal).\n" +"Hacia fuera empieza en el centro de la superficie, de modo que el material sobrante se empuja hacia el borde, donde resulta menos visible. Hacia dentro empieza en el borde y termina con las curvas cerradas del centro.\n" +"Por defecto usa el orden de ruta más corta, que puede recorrerse en cualquiera de los dos sentidos." msgid "Bottom surface fill order" msgstr "Orden de relleno de la superficie inferior" +# AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Dirección en la que se rellenan las superficies inferiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n" -"Hacia adentro comienza cada superficie con las curvas exteriores más amplias, lo que mejora la adherencia de la primera capa en las camas donde las curvas cerradas del centro pueden no adherirse. Hacia afuera comienza en el centro, empujando cualquier exceso de material hacia el borde.\n" -"Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección." +"Dirección en la que se rellenan las superficies inferiores cuando se usa un patrón basado en el centro (Concéntrico, Espiral interior, Espiral de Arquímedes, Espiral Octagonal).\n" +"Hacia dentro empieza cada superficie por las curvas exteriores más amplias, lo que mejora la adhesión de la capa inicial en camas donde las curvas cerradas del centro pueden no agarrar. Hacia fuera empieza en el centro y empuja el material sobrante hacia el borde.\n" +"Por defecto usa el orden de ruta más corta, que puede recorrerse en cualquiera de los dos sentidos." msgid "Internal solid infill pattern" msgstr "Patrón de relleno sólido interno" @@ -13428,6 +13606,14 @@ msgstr "En sentido contrario a las agujas del reloj" msgid "Clockwise" msgstr "En el sentido de las agujas del reloj" +# AI Translated +msgid "Distance to rod" +msgstr "Distancia a la varilla" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Distancia horizontal de la punta de la boquilla al borde más alejado de la varilla. Se usa para evitar colisiones en la impresión por objeto." + msgid "Height to rod" msgstr "Altura a la barra" @@ -13611,6 +13797,7 @@ msgstr "Tiempo de capa" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "El ventilador de refrigeración de la pieza se activará para las capas cuyo tiempo estimado sea inferior a este valor. La velocidad del ventilador se interpola entre las velocidades mínima y máxima del ventilador en función del tiempo de impresión de cada capa." +msgctxt "second" msgid "s" msgstr "s" @@ -13916,6 +14103,50 @@ msgstr "Material de soporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "El material de soporte se utiliza habitualmente para imprimir soportes y la interfaz de los soportes." +msgid "Is mixed filament" +msgstr "Es filamento mixto" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica si esta ranura de filamento es un filamento mixto compuesto por varios filamentos físicos" + +msgid "Mixed filament components" +msgstr "Componentes del filamento mixto" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índices (empezando en 1) de los filamentos componentes, separados por comas; p. ej. \"1,3\"" + +msgid "Mixed filament sublayer ratios" +msgstr "Proporciones de subcapa del filamento mixto" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valores de proporción separados por comas cuya suma sea 1.0; p. ej. \"0.7,0.3\"" + +msgid "Mixed filament gradient" +msgstr "Degradado del filamento mixto" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Activa el modo de degradado en dirección Z para las subcapas del filamento mixto. Al activarlo, las proporciones de las subcapas varían linealmente entre capas." + +msgid "Mixed filament gradient range" +msgstr "Rango del degradado del filamento mixto" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporciones inicial y final del primer componente en el modo de degradado. Par separado por comas; p. ej. \"0.10,0.90\" significa del 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Curva del degradado del filamento mixto" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizada opcional, al estilo de Photoshop, que asigna el progreso en Z a la proporción del primer componente. Se codifica como puntos de control separados por barras verticales, con el formato \"x,y\" (heredado) o \"x,y,m_in,m_out\" cuando se necesita anular la tangente (un valor vacío o \"nan\" usa el valor PCHIP predeterminado). x está en [0,1]; y se limita al rango de proporciones configurado; p. ej. \"0,0.15|0.5,0.50|1,0.85\". Si se deja vacío, se usa el gradient_range lineal." + +msgid "Mixed filament per-part gradient" +msgstr "Degradado por pieza del filamento mixto" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Cuando el modo de degradado está activado, aplica el degradado a cada pieza de un ensamblaje de forma independiente en lugar de tratar todo el ensamblaje como un único rango Z." + msgid "Filament printable" msgstr "Filamento imprimible" @@ -15150,6 +15381,7 @@ msgstr "Fuerza máxima del eje Y" msgid "The allowed maximum output force of Y axis" msgstr "La fuerza máxima permitida del eje Y" +msgctxt "Newton" msgid "N" msgstr "N" @@ -15159,6 +15391,7 @@ msgstr "Masa de la cama del eje Y" msgid "The machine bed mass load of Y axis" msgstr "La carga de la masa de la cama de la máquina del eje Y" +msgctxt "gram" msgid "g" msgstr "g" @@ -15470,7 +15703,7 @@ msgstr "Los puntos de inicio y fin, desde la zona de corte al cubo de basura." msgid "Reduce infill retraction" msgstr "Reducir la retracción del relleno" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Desactiva la retracción cuando el desplazamiento se realiza en su totalidad dentro de un área de relleno, donde los artefactos causados por un rezumado no son visibles. Puede reducir el número de retracciones y por ende el tiempo total de retracción al imprimir modelos complejos, reduciendo el tiempo total de impresión. Sin embargo, puede que las operaciones de laminado y de generación del archivo G-Code sean más lentas." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15507,6 +15740,20 @@ msgstr "Detectar perímetros en voladizo" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Detecta el porcentaje de voladizo en relación con el ancho de línea y utiliza diferentes velocidades para imprimir. Para el 100%% de voladizo, se utiliza la velocidad de puente." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Imprimir al final los perímetros sin soporte" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Los bucles de perímetro que quedan completamente en el aire se imprimen cuando algo puede sostenerlos:\n" +"se extruyen después de los demás perímetros de su isla, empezando por el más interno, sea cual sea el orden de perímetros.\n" +"Un bucle que solo pueden anclar los puentes de esta capa espera a que se impriman esos puentes, mientras que un bucle que discurre junto a un perímetro con soporte mantiene su lugar antes del relleno, que lo necesita como anclaje." + msgid "Outer walls" msgstr "Paredes exteriores" @@ -15635,7 +15882,7 @@ msgstr "Cantidad de retracción después de la limpieza" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La longitud de la retracción rápida después de la limpieza, relativa a la longitud de retracción.\n" @@ -15682,7 +15929,7 @@ msgstr "Cuando se activa la retracción antes de un cambio de herramienta, el fi msgid "Z-hop height" msgstr "Altura de Salto en Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Cada vez que se realiza una retracción, la boquilla se levanta un poco para crear un pequeño margen entre la boquilla y la impresión. Esto evita que la boquilla golpee la pieza cuando se desplaza. El uso de la línea espiral para levantar z puede evitar la aparición de hilos." msgid "Z-hop lower boundary" @@ -15934,6 +16181,39 @@ msgstr "Purgado en contornos curvos" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Para minimizar la visibilidad de la costura en un contorno curvo cerrado, se ejecuta un pequeño movimiento hacia dentro antes de que el extrusor abandone la curva." +# AI Translated +msgid "Wipe inward" +msgstr "Purgado hacia dentro" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Se aplica solo a los perímetros externos, incluidos los contornos de los agujeros. Durante el purgado mueve la boquilla caliente hacia los perímetros internos ya impresos para reducir el recalentamiento del plástico recién depositado y las marcas de costura.\n" +"\n" +"Es especialmente útil con alturas de capa por debajo de 0,1 mm, donde las marcas de purgado se ven más.\n" +"\n" +"Usa el purgado normal si no hay ningún perímetro interno contiguo ya impreso (zonas de un solo perímetro u orden de perímetros Exterior/Interior) o si no se encuentra ninguna trayectoria hacia dentro con apoyo, por ejemplo en esquinas cerradas o huecos de costura." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Distancia de purgado hacia dentro" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Distancia que se desplaza la trayectoria de purgado alejándose del perímetro externo, indicada en milímetros o como porcentaje del ancho de extrusión real del perímetro externo.\n" +"\n" +"Por ejemplo, 50% desplaza la trayectoria la mitad del ancho del perímetro externo. El desplazamiento efectivo está limitado tanto por el ancho real del perímetro externo como por el espacio disponible hasta el perímetro contiguo, por lo que valores por encima de 100% o una distancia absoluta equivalente no tienen ningún efecto adicional. Ponga 0 para desactivar el desplazamiento." + msgid "Wipe before external loop" msgstr "Purgado antes del bucle externo" @@ -16193,8 +16473,9 @@ msgstr "Recoge la nueva herramienta sin esperar a que alcance la temperatura de msgid "No sparse layers (beta)" msgstr "Sin capas de baja densidad (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Sí está activado, la torre de purga no se imprimirá en las capa sin cambio de cabezal. En las capas con cambio de cabezal, viajará hacía abajo para imprimir la torre de purga. El usuario es responsable de asegurarse que no hay colisiones con la impresión." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Si se habilita, la torre de purga no se imprimirá en las capas sin cambios de herramienta. En las capas con un cambio de herramienta, el extrusor bajará para imprimir la torre de purga, de modo que la torre queda por debajo del modelo y el cabezal tiene que descender hasta ella. Se rechazan las disposiciones en las que eso chocaría con un objeto ya impreso. No tiene efecto con el timelapse suave ni con la detección de atascos en la boquilla, que necesitan una torre en cada capa." msgid "Prime all printing extruders" msgstr "Purgar todos los extrusores" @@ -16217,6 +16498,34 @@ msgstr "" msgid "Cyclic" msgstr "Cíclico" +# AI Translated +msgid "Cyclic order" +msgstr "Orden cíclico" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Secuencia de filamentos personalizada que usa el orden cíclico de cambios de herramienta, como números de filamento separados por comas (p. ej. \"3,2,1,4\").\n" +"Cada capa imprime sus filamentos siguiendo esta secuencia; los filamentos no incluidos se imprimen al final, en orden ascendente.\n" +"Déjelo vacío para recorrer los filamentos en orden ascendente." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Aplicar el orden cíclico a la capa inicial" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Aplica el orden cíclico de cambios de herramienta también a la capa inicial.\n" +"Por defecto está desactivado, porque la capa inicial se ordena en su lugar para lograr la mejor adhesión a la cama: los filamentos que imprimen detalles pequeños y frágiles de la capa inicial se imprimen al final, de modo que los cambios de herramienta y desplazamientos posteriores tienen menos probabilidad de arrancar esas piezas mal ancladas. Este orden de la capa inicial también respeta una secuencia de filamentos personalizada para la capa inicial cuando se ha definido. La ventaja del orden cíclico (los cambios de herramienta adicionales dan a cada capa más tiempo para enfriarse) no se aplica a la capa inicial, que se imprime despacio y caliente para favorecer la adhesión.\n" +"Active esta opción solo si necesita exactamente la misma secuencia de herramientas en todas las capas, incluida la primera, a costa de esa optimización de la adhesión." + msgid "Slice gap closing radius" msgstr "Radio de cierre de laminado" @@ -16226,9 +16535,6 @@ msgstr "Las grietas más pequeñas que 2x el radio de cierre se rellenan durante msgid "Slicing Mode" msgstr "Modo de laminado" -msgid "Other" -msgstr "Otro" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Utilice \"Par-impar\" para los modelos de avión de 3DLabPrint. Utilice \"Cerrar orificios\" para cerrar todos los orificios del modelo." @@ -16715,6 +17021,14 @@ msgstr "" "\n" "Fijando un valor en la cantidad de retracción antes del purgado se realizará cualquier exceso de retracción antes del purgado, de lo contrario se realizará después." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Subcapa de color mezclado" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Activa la división en subcapas de color mezclado. Al activarlo, las capas que contienen filamentos de color mezclado se dividen en subcapas para lograr efectos de mezcla de colores." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre de purga puede utilizarse para limpiar los residuos de la boquilla y estabilizar la presión de la recámara en el interior de la boquilla, con el fin de evitar defectos visuales al imprimir objetos." @@ -17194,6 +17508,14 @@ msgstr "No comprobar" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "No ejecute ninguna comprobación de validez, como la comprobación de conflictos de ruta de G-Code." +# AI Translated +msgid "Strict mode" +msgstr "Modo estricto" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Sale con un código distinto de cero cuando el laminado genera un aviso no crítico que de otro modo solo se registraría, como un modelo que necesita soportes mientras los soportes están desactivados. Úselo en CI o en procesos automatizados que nunca deban entregar un laminado sutilmente defectuoso. Cada uno de esos avisos también aparece con una clase estable en el array `warnings` de result.json, que solo se escribe en Linux. No se puede combinar con --no-check, que omite la comprobación de soportes." + msgid "Normative check" msgstr "Comprobación de normativa" @@ -17206,11 +17528,28 @@ msgstr "Información del modelo de salida" msgid "This outputs the model’s information." msgstr "Salida de la información del modelo." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Inspeccionar malla (JSON por stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Imprime por stdout un resumen JSON de cada objeto cargado y después sale: sus cajas envolventes y las caras de su envolvente convexa sobre las que puede apoyarse, con sus normales, áreas y centros. Estas son las caras entre las que eligen las opciones --ground-*. Alternativa legible por máquina a --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Inspeccionar pintado (JSON por stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Imprime un resumen JSON estructurado de cada capa pintada (soportes, costura, color MMU, piel rugosa) ya guardada en el modelo cargado — número de facetas, área de superficie y caja envolvente local a la malla por cada estado — y después sale. Alternativa legible por máquina a abrir las herramientas de pintado en la interfaz." + msgid "Export Settings" msgstr "Ajustes de exportación" -msgid "This exports settings to a file." -msgstr "Exporta los ajustes a un archivo." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Esto exporta los ajustes a un archivo. Use - para escribirlos por stdout." msgid "Send progress to pipe" msgstr "Enviar el progreso a la tubería" @@ -17266,6 +17605,30 @@ msgstr "Rotar alrededor de Y" msgid "Rotation angle around the Y axis in degrees." msgstr "El ángulo de rotación alrededor del eje Y en grados." +# AI Translated +msgid "Ground largest face" +msgstr "Apoyar sobre la cara mayor" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoya cada objeto sobre la cara mayor de su envolvente convexa y lo deja caer sobre la cama. Entre caras igual de grandes se conserva la que ya mira hacia abajo. Los objetos sin una cara lo bastante grande para apoyarse se dejan como están. Las transformaciones se aplican en el orden de la línea de órdenes, por lo que se respetan las rotaciones indicadas antes de esta opción. --orient 1 se ejecuta después de todas las transformaciones y sustituye la orientación." + +# AI Translated +msgid "Ground face by normal" +msgstr "Apoyar sobre la cara según la normal" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoya cada objeto sobre la cara de su envolvente convexa cuya normal exterior sea la más próxima a la dirección NX,NY,NZ y lo deja caer sobre la cama. La dirección está en coordenadas del objeto, que incluyen las rotaciones indicadas antes de esta opción y coinciden con los ejes de la bandeja salvo que el archivo de entrada rote el objeto. Por ejemplo, 1,0,0 apoya el objeto sobre su lado +X. --orient 1 se ejecuta después de todas las transformaciones y sustituye la orientación." + +# AI Translated +msgid "Ground face at point" +msgstr "Apoyar sobre la cara en un punto" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoya cada objeto sobre la cara de su envolvente convexa que contiene el punto X,Y,Z y lo deja caer sobre la cama. El punto está en coordenadas del objeto, que incluyen las rotaciones indicadas antes de esta opción; --inspect-mesh indica los centros de las caras en esas coordenadas. Los objetos sin una cara así se dejan como están, y la ejecución falla si ningún objeto tiene una. --orient 1 se ejecuta después de todas las transformaciones y sustituye la orientación." + msgid "Scale the model by a float factor." msgstr "Escala el modelo por un factor de flotación." @@ -17423,7 +17786,7 @@ msgid "Current Z-hop" msgstr "Z-Hop actual" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Contiene el z-hop presente al principio del bloque de G-Code personalizado." +msgstr "Contiene el Z-hop presente al principio del bloque de G-Code personalizado." msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Posición del extrusor al comienzo del bloque de G-Code personalizado. Si el G-Code personalizado viaja a otro lugar, debe escribir en esta variable para que OrcaSlicer sepa desde dónde viaja cuando recupere el control." @@ -17771,6 +18134,10 @@ msgstr "La generación de la malla del archivo del modelo falló o no hay una fo msgid "The supplied file couldn't be read because it's empty." msgstr "No se ha podido leer el archivo proporcionado porque está vacío." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "El formato del archivo es incompatible y no se puede analizar." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de archivo desconocido: el archivo de entrada debe tener extensión .STL, .obj o .amf (.xml)." @@ -19233,17 +19600,17 @@ msgstr "Mostrar sólo los nombres de impresora con cambios en los perfiles de im msgid "Only display the filament names with changes to filament presets." msgstr "Mostrar sólo los nombres de impresora con cambios en los perfiles de filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Sólo se mostrarán los nombres de impresoras con perfiles de impresora de usuario, y cada perfil que elija se exportará como un archivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "Sólo se mostrarán los nombres de filamento con perfiles de filamento de usuario, y todos los perfiles de filamento de usuario de cada nombre de filamento que seleccione se exportarán como un archivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Sólo se mostrarán los nombres de impresoras con perfiles de procesos modificados, \n" "y todos los perfiles de procesos de usuario de cada nombre de impresora que seleccione se exportarán como un archivo zip." @@ -19472,7 +19839,7 @@ msgstr "Copiar información del sistema al portapapeles" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Necesitamos información para diagnosticar el origen del problema. Consulta la página wiki para una guía detallada." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "El botón Empaquetar recopila el archivo del proyecto y los registros de la sesión actual en un archivo zip." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19514,7 +19881,7 @@ msgstr "Nivel de registro" msgid "Stored logs" msgstr "Registros almacenados" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Empaqueta todos los registros almacenados en un archivo zip." msgid "Profiles" @@ -19581,7 +19948,7 @@ msgstr "No se ha encontrado el tipo de impresora; selecciónelo manualmente." msgid "Authorizing..." msgstr "Autorizando..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Error. No se puede obtener el token de la API para la autorización" msgid "Could not parse server response." @@ -20027,8 +20394,9 @@ msgstr "Eliminado" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Activar la asignación inteligente de filamento: asigna un filamento a varias boquillas para maximizar el ahorro" -msgid "Fila Saving" -msgstr "Ahorro de filamento" +# AI Translated +msgid "File Saving" +msgstr "Guardado de archivo" msgid "Don't remind me again" msgstr "No me recuerdes de nuevo" @@ -20310,6 +20678,18 @@ msgstr "Esta acción no se puede deshacer. ¿Continuar?" msgid "Skipping objects." msgstr "Omitiendo objetos." +# AI Translated +msgid "Material Ratio" +msgstr "Proporción de material" + +# AI Translated +msgid "Model Height" +msgstr "Altura del modelo" + +# AI Translated +msgid "Ratio" +msgstr "Proporción" + msgid "Select Filament" msgstr "Seleccionar Filamento" @@ -20387,6 +20767,9 @@ msgstr "Reiniciar ahora" msgid "NO RAMMING AT ALL" msgstr "NO CHOCAR EN ABSOLUTO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocidad volumétrica" @@ -20546,11 +20929,15 @@ msgstr "Secado - Calentamiento" msgid "Drying-Dehumidifying" msgstr "Secado - Deshumidificación" -msgid " maximum drying temperature is " -msgstr " la temperatura máxima de secado es " +# AI Translated +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "La temperatura máxima de secado de %s es %d°C." -msgid " minimum drying temperature is " -msgstr " la temperatura mínima de secado es " +# AI Translated +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "La temperatura mínima de secado de %s es %d°C." msgid "This filament may not be completely dried." msgstr "Es posible que este filamento no esté completamente seco." @@ -20963,6 +21350,120 @@ msgstr "" "Evita la deformación\n" "¿Sabías que al imprimir materiales propensos a la deformación como el ABS, aumentar adecuadamente la temperatura de la cama térmica puede reducir la probabilidad de deformaciones?" +#~ msgid "Other" +#~ msgstr "Otro" + +#~ msgid "Left: " +#~ msgstr "Izquierda: " + +#~ msgid "Right: " +#~ msgstr "Derecha: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "La temperatura máxima no puede superar " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "La temperatura mínima no debe ser inferior a " + +#~ msgid "up to" +#~ msgstr "hasta" + +#~ msgid "above" +#~ msgstr "sobre" + +#~ msgid "from" +#~ msgstr "desde" + +#~ msgid "Configuration package: " +#~ msgstr "Paquete de configuración: " + +#~ msgid " updated to " +#~ msgstr " Actualizado a " + +#~ msgid "Grouping error: " +#~ msgstr "Error de agrupación: " + +#~ msgid " can not be placed in the " +#~ msgstr " no se puede colocar en el " + +#~ msgid " maximum drying temperature is " +#~ msgstr " la temperatura máxima de secado es " + +#~ msgid " minimum drying temperature is " +#~ msgstr " la temperatura mínima de secado es " + +# AI Translated +#~ msgid "needs" +#~ msgstr "necesita" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "no habilitado" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "material no publicado" + +#~ msgid "Select the language" +#~ msgstr "Seleccionar el idioma" + +#~ msgid "Select plugin" +#~ msgstr "Seleccionar plugin" + +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Dirección en la que se rellenan las superficies superiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n" +#~ "Hacia afuera comienza en el centro de la superficie, de modo que cualquier exceso de material se empuja hacia el borde, donde es menos visible. Hacia adentro comienza en el borde y termina con las curvas cerradas del centro.\n" +#~ "Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección." + +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Dirección en la que se rellenan las superficies inferiores al usar un patrón basado en el centro (Concéntrico, Cuerdas de Arquímedes, Espiral de octograma).\n" +#~ "Hacia adentro comienza cada superficie con las curvas exteriores más amplias, lo que mejora la adherencia de la primera capa en las camas donde las curvas cerradas del centro pueden no adherirse. Hacia afuera comienza en el centro, empujando cualquier exceso de material hacia el borde.\n" +#~ "Por defecto usa el orden de ruta más corta, que puede ir en cualquier dirección." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Sí está activado, la torre de purga no se imprimirá en las capa sin cambio de cabezal. En las capas con cambio de cabezal, viajará hacía abajo para imprimir la torre de purga. El usuario es responsable de asegurarse que no hay colisiones con la impresión." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exporta los ajustes a un archivo." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La función de visualización en directo nativa de Wayland requiere el receptor de vídeo GTK de GStreamer. Instale el plugin gtksink para GStreamer y, a continuación, reinicie OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "No se pudo inicializar el receptor de vídeo nativo de Wayland GStreamer. Compruebe la instalación del plugin GTK de GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Para esta tarea se necesita el Reproductor de Windows Media. ¿Desea activar el \"Reproductor de Windows Media\" en su sistema operativo?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource no se ha registrado correctamente para la reproducción multimedia. Pulse Sí para volver a registrarlo. Será promocionado dos veces" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "¡Falta el componente BambuSource para la reproducción de medios! Reinstale OrcaSlicer o busque ayuda en la comunidad." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Si utiliza una BambuSource de una instalación diferente, es posible que la reproducción de vídeo no funcione correctamente. Pulsa Sí para solucionarlo." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "A tu sistema le faltan los codecs H.264 para GStreamer, necesarios para reproducir vídeo. (Prueba a instalar los paquetes gstreamer1.0-plugins-bad o gstreamer1.0-libav y, a continuación, reinicia Orca Slicer...)." + +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "g" + +#~ msgid "Fila Saving" +#~ msgstr "Ahorro de filamento" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -21042,7 +21543,7 @@ msgstr "" #~ msgid "Select Filament && Hotends" #~ msgstr "Seleccionar Filamento && Hotends" -#~ msgid "External spools is not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it." +#~ msgid "External spools are not supported since Filament Track Switch has been installed. If you want to use external spool, please uninstall it." #~ msgstr "Los carretes externos no son compatibles porque se ha instalado el Filament Track Switch. Si desea utilizar un carrete externo, desinstálelo." #, c-format, boost-format diff --git a/localization/i18n/eu/OrcaSlicer_eu.po b/localization/i18n/eu/OrcaSlicer_eu.po index 03e6d6685d..a510fcd436 100644 --- a/localization/i18n/eu/OrcaSlicer_eu.po +++ b/localization/i18n/eu/OrcaSlicer_eu.po @@ -3,12 +3,11 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-07-20 13:33+0200\n" "Last-Translator: Manu Goiogana \n" "Language-Team: \n" @@ -2391,15 +2390,6 @@ msgstr "Eguneratze bat dago erabilgarri. Ireki aurrezarpen-paketeen elkarrizketa msgid "%s has been removed." msgstr "%s kendu da." -msgid "Switching application language" -msgstr "Aplikazioaren hizkuntza aldatzen" - -msgid "Select the language" -msgstr "Hautatu hizkuntza" - -msgid "Language" -msgstr "Hizkuntza" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "Ezin izan da OrcaSlicer %s hizkuntzara aldatu." @@ -2869,6 +2859,10 @@ msgstr "Editatu" msgid "Merge with" msgstr "Batu honekin" +# AI Translated +msgid "Decompose Color" +msgstr "Deskonposatu kolorea" + msgid "Delete this filament" msgstr "Ezabatu filamentu hau" @@ -3150,6 +3144,10 @@ msgstr "Multzoa" msgid "Merge parts to an object" msgstr "Batu piezak objektu batean" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Geruza-altuera aldakorra kolore nahasiaren azpigeruzarekin batera erabiltzeak kolore-nahasketaren kalitatea okertu dezake." + msgid "Add layers" msgstr "Geruzak gehitu" @@ -3594,11 +3592,15 @@ msgstr "Atzera erakarri uneko filamentua Filament Track Switch-en" msgid "Switch track at Filament Track Switch" msgstr "Aldatu bidea Filament Track Switch-en" -msgid "The maximum temperature cannot exceed " -msgstr "Gehieneko tenperaturak ezin du hau gainditu: " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Gehieneko tenperaturak ezin du %d gainditu" -msgid "The minmum temperature should not be less than " -msgstr "Gutxieneko tenperaturak ezin du hau baino txikiagoa izan: " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Gutxieneko tenperaturak ezin du %d baino txikiagoa izan" msgid "Type to filter..." msgstr "Idatzi iragazteko..." @@ -4465,6 +4467,15 @@ msgstr "" "Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Agian SD txartela idazteko blokeatuta dago?\n" "Errore- mezua: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Huts egin du aldi baterako G-kodea irteerako G-kodera kopiatzeak.\n" +"Errore-mezua: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Aldi baterako G-code-a irteerako G-code-an kopiatzeak huts egin du. Arazoak egon daitezke helburuko gailuarekin, saiatu berriro esportatzen edo beste gailu bat erabiltzen. Hondatutako irteerako G-code-a hemen da: %1%.tmp." @@ -4670,7 +4681,7 @@ msgstr "" "\n" "Balioa 0ra berrezarriko da." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Horma gehigarri txandakatuak ez du ondo funtzionatzen \"Bermatu oskolaren lodiera bertikala\" Guztiak gisa ezarrita dagoenean." msgid "" @@ -4716,7 +4727,7 @@ msgstr "" "NO - 'Euskarrien Geruza-Altuera Independentea' mantendu" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height txigiagoa izan behar da layer_height baino.\n" @@ -4724,7 +4735,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Blokeo-sakonera gainazalaren sakonera baino txikiagoa izan behar da.\n" @@ -4764,6 +4775,9 @@ msgstr "" "Bai - Aldatu ezarpen hauek eta gaitu espiral/loreontzi modua automatikoki\n" "Ez - Utzi bertan behera espiral modua gaitzea" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Inprimatzen" @@ -5194,14 +5208,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "%s balioa tartetik kanpo dago. Baliozko tartea %d eta %d artekoa da." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%% edo %s %s da?\n" -"BAI %s%%-(r)entzat,\n" -"EZ %s %s-(r)entzat." +msgid "Is it %s%% or %s %s?" +msgstr "%s%% edo %s %s da?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5224,24 +5235,18 @@ msgstr "Patroi baliogabea. Erabili N, N#K edo komaz bereizitako zerrenda bat, sa msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formatuak ez du balio. Espero den formatu bektoriala: \"%1%\"" -msgid "N/A" -msgstr "N/A" - msgid "System agents" msgstr "Sistema-agenteak" -msgid "No plugin selected" -msgstr "Ez da pluginik hautatu" - msgid "Add plugin" msgstr "Gehitu plugina" -msgid "Select plugin" -msgstr "Hautatu plugina" - msgid "Remove plugin" msgstr "Kendu plugina" +msgid "No plugin selected" +msgstr "Ez da pluginik hautatu" + msgid "Configure" msgstr "Konfiguratu" @@ -5495,14 +5500,20 @@ msgstr "Ezarri optimo gisa" msgid "Regroup filament" msgstr "Taldekatu berriro filamentua" -msgid "up to" -msgstr "honaino" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "%1% mm arte" -msgid "above" -msgstr "honen gainean" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "%1% mm-tik gora" -msgid "from" -msgstr "hemendik" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "%1% mm-tik %2% mm-ra" msgid "Usage" msgstr "Erabilera" @@ -5860,7 +5871,7 @@ msgstr "Bolumena:" msgid "Size:" msgstr "Tamaina:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "G-code ibilbideen gatazkak aurkitu dira %d geruzan, Z = %.2lf mm. Urrundu gehiago gatazkan dauden objektuak (%s <-> %s)." @@ -6168,16 +6179,24 @@ msgstr "Gorde proiektua honela" msgid "Save current project as" msgstr "Gorde uneko proiektua honela" +# AI Translated +msgid "Publish 3MF" +msgstr "Argitaratu 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Esportatu 3MF fitxategi bat hautatutako ezarpenak kapsulatuta dituela" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Inportatu 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modeloa kargatu" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Inportatu ZIP fitxategia" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Kargatu ZIP fitxategi baten barnean dauden modeloak" msgid "Import Configs" @@ -7426,6 +7445,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Behea" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Ezarpen honek ez du plugin-gaitasun motarik zehazten." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Ezarpen honek ezagutzen ez den plugin-gaitasun mota bat zehazten du: " + msgid "Plugin Selection" msgstr "Plugin-hautaketa" @@ -7680,6 +7707,10 @@ msgstr "Pertsonalizatu uneko plaka" msgid "The %s nozzle can not print %s." msgstr "%s pitak ezin du %s inprimatu." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Kolore nahasiko filamentua estrusore bakarreko inprimagailu batean inprimatzeak filamentu-aldaketa eta purgatze ugari eskatzen ditu, eta horrek nabarmen handitu ditzake hondakinak eta pita edo hondakin-hodia buxatzeko arriskua." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Ez da gomendatzen inprimatzean %1% eta %2% nahastea.\n" @@ -7802,12 +7833,44 @@ msgstr "Sinkronizatu filamentuen zerrenda AMSarekin" msgid "Set filaments to use" msgstr "Ezarri erabili beharreko filamentuak" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Gehitu filamentu nahasia" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamentu nahasia" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Kendu azken filamentu nahasia" + +# AI Translated +msgid "Add mixed filament" +msgstr "Gehitu filamentu nahasia" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filamentu nahasiak baliogabeko edo bat ez datozen osagaiak ditu. Editatu berriro kaltetutako sarrerak." + msgid "Search plate, object and part." msgstr "Bilatu plaka, objektua eta pieza." msgid "Pellets" msgstr "Pelletak" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filamentu nahasiak hautsitako osagai-erreferentziak ditu" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editatu / Ezabatu / Batu" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Helburuko filamentu nahasiak filamentu fisiko hau erabiltzen du osagai gisa. Batzeak filamentu fisiko hau ezabatuko du eta filamentu nahasia baliogabetu dezake. Jarraitu?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Eragiketa amaitzean, %s proiektua itxi eta proiektu berri bat sortuko da." @@ -7945,7 +8008,15 @@ msgstr "Berretsi aurrezarpen hauetako G-codea segurua dela, makinari kalterik ez msgid "Customized Preset" msgstr "Aurrezarpen pertsonalizatua" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Argitaratutako ezarpen batzuk ezin izan dira aplikatu:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Filamentu-erreten batzuk aldatu dira:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP fitxategiko osagai-izena(k) ez dago/daude UTF-8 formatuan!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7967,10 +8038,10 @@ msgstr "Objektuaren bolumena zero da" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s fitxategiko objektua txikiegia da, eta baliteke metrotan edo hazbetetan egotea.\n" -" Milimetroetara eskalatu nahi duzu?" +"Milimetroetara eskalatu nahi duzu?" msgid "Object too small" msgstr "Objektua txikiegia da" @@ -7986,6 +8057,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Pieza anitzeko objektua detektatu da" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Testurak filamentuekin parekatzen" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Testura inportatzeko abisua" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Kargatu fitxategi hauek pieza anitzeko objektu bakar gisa?\n" @@ -8190,6 +8269,22 @@ msgstr "" msgid "Sync now" msgstr "Sinkronizatu orain" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Testura inportatzeak huts egin du. Badirudi modeloak testura-datuak dituela, baina ezin izan da inportatze-prozesua osatu. Modeloa geometria gisa soilik inportatuko da." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Testura-koloreak aplikatzen..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D ikuspegia eguneratzen..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Testura-koloreak aplikatuta." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Aldatutako aurrezarpenak proiektu berrirako gorde edo baztertu ditzakezu" @@ -8321,6 +8416,21 @@ msgstr "Gorde xerratutako fitxategia honela:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s fitxategia inprimagailuaren biltegiratze-eremura bidali da eta inprimagailuan ikus daiteke." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Argitaratu 3MF fitxategia honela:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Huts egin du argitaratutako 3MF fitxategia esportatzeak.\n" +"Egiaztatu karpeta linean dagoen edo beste programa batzuek fitxategia irekita duten." + +msgid "Publish" +msgstr "Argitaratu" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Pita mota ez dago ezarrita. Ezarri pita eta saiatu berriro." @@ -8520,9 +8630,6 @@ msgstr "Jarraitu nahi duzu?" msgid "Language selection" msgstr "Hizkuntza-hautaketa" -msgid "Switching application language while some presets are modified." -msgstr "Aplikazioaren hizkuntza aldatzen ari da aurrezarpen batzuk aldatuta dauden bitartean." - msgid "Asia-Pacific" msgstr "Asia-Pazifikoa" @@ -8627,6 +8734,9 @@ msgstr "Uneko instantziaren bide-izena: " msgid "General" msgstr "Orokorra" +msgid "Language" +msgstr "Hizkuntza" + msgid "Metric" msgstr "Metrikoa" @@ -9055,9 +9165,6 @@ msgstr "Xerratutako aurrebistan geruza-graduatzailea mugitzean, unekoaren azpiko msgid "Dimmed layer brightness" msgstr "Ilundutako geruzen distira" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9407,6 +9514,10 @@ msgstr "Espiral formako loreontzia" msgid "First layer filament sequence" msgstr "Lehen geruzako filamentuen sekuentzia" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filamentu-zerrendak filamentu nahasiak ditu. Filamentu-sekuentzia pertsonalizatuak ez du eraginik izango." + msgid "By Layer" msgstr "Geruzaren arabera" @@ -9434,9 +9545,6 @@ msgstr "Joan modeloa argitaratzeko web-orrira" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Oharra: prestaketak minutu batzuk iraun ditzake. Izan pazientzia." -msgid "Publish" -msgstr "Argitaratu" - msgid "Publish was canceled" msgstr "Argitaratzea bertan behera utzi da" @@ -9452,6 +9560,81 @@ msgstr "Datuak igotzen" msgid "Jump to webpage" msgstr "Joan web-orrira" +# AI Translated +msgid "Material" +msgstr "Materiala" + +# AI Translated +msgid "Mixed filament" +msgstr "Filamentu nahasia" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Filamentu nahasi batzuk argitaratuko ez diren filamentuen mende daude:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "%d filamentua (nahasia)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% filamentuak %2% behar du, baina ez dago gaituta." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% filamentuak %2% behar du, baina haren materiala ez da argitaratuko." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Filamentu nahasi bat argitaratzeko, gaitu erabiltzen dituen filamentu guztiak eta hautatu Argitalpen osoa edo bete bere Mota baldintza." + +# AI Translated +msgid "Publish anyway" +msgstr "Argitaratu hala ere" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Argitaratu 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Hautatu zein ezarpen argitaratuko diren 3MF fitxategian" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF argitaratzeko wikia" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF argitaratzeko bideo-gida" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filamentu nahasia - osorik argitaratzen da goian \"Gaitu\" hautatuta dagoenean" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Argitaratu filamentu nahasi hau eta gaitu + argitaratu osorik bere osagai diren filamentuak" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Argitaratu filamentu-erreten hau 3MF fitxategian" + +# AI Translated +msgid "Full Publish" +msgstr "Argitalpen osoa" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Kapsulatu erreten honetako filamentu osoa 3MF fitxategian" + +# AI Translated +msgid "Filter non-selected" +msgstr "Iragazi hautatu gabeak" + #, c-format, boost-format msgid "Save %s as" msgstr "Gorde %s honela" @@ -9469,6 +9652,10 @@ msgstr "Aurrezarpen honetara gurasoaren balio heredatu guztiak kopiatzen ditu et msgid "Detach from parent" msgstr "Bereizi gurasotik" +# AI Translated +msgid "Save without parent" +msgstr "Gorde gurasorik gabe" + # AI Translated msgid "Unique preset" msgstr "Aurrezarpen bakarra" @@ -10150,9 +10337,17 @@ msgstr "Purgatze-dorrea behar da material-metaketa detektatzeko. Modeloak akatsa msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Z altuera zehatza eta purgatze-dorrea batera gaitzeak xerratze-erroreak eragin ditzake. Hala ere Z altuera zehatza gaitu nahi duzu?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Timelapse leunak purgatze-dorrea behar du geruza guztietan, eta hori ez da bateragarria \"Geruza bakandurik ez\" aukerarekin. \"Geruza bakandurik ez\" desaktibatu da." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Purgatze-dorrea behar da timelapse leunaren modurako. Modeloak akatsak izan ditzake purgatze-dorrerik gabe. Purgatze-dorrea gaitu nahi duzu?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Geruza bakandurik ez\" ez da bateragarria timelapse leunarekin, horrek purgatze-dorrea behar baitu geruza guztietan. Timelapsea modu tradizionalera aldatu da." + msgid "Still print by object?" msgstr "Objektuka inprimatu hala ere?" @@ -10522,9 +10717,6 @@ msgstr "Prozesu-profil bateragarriak" msgid "Printable space" msgstr "Inprimatzeko espazioa" -msgid "Printer Agent" -msgstr "Inprimagailu-agentea" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Hautatu sare-agentearen inplementazioa inprimagailuarekin komunikatzeko. Erabilgarri dauden agenteak abioan erregistratzen dira." @@ -10765,11 +10957,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Ez dago kopiatu beharreko aldaketarik." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiatu parametroak" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Aldatu %s-(r)en parametroak" #, c-format, boost-format @@ -10918,12 +11110,6 @@ msgstr "Estrusore kopurua" msgid "Capabilities" msgstr "Gaitasunak" -msgid "Left: " -msgstr "Ezkerra: " - -msgid "Right: " -msgstr "Eskuina: " - msgid "Show all presets (including incompatible)" msgstr "Erakutsi aurrezarpen guztiak (bateraezinak barne)" @@ -11274,27 +11460,6 @@ msgstr "Filamentua aldatzeko purgatze-bolumenak" msgid "Please choose the filament colour" msgstr "Hautatu filamentuen kolorea" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Waylanden jatorrizko zuzeneko ikuspegiak GStreamer GTK bideo-hustubidea behar du. Instalatu GStreamerrerako gtksink plugina eta berrabiarazi OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Ezin izan da Waylanden jatorrizko GStreamer bideo-hustubidea hasieratu. Egiaztatu GStreamer GTK pluginaren instalazioa." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player behar da zeregin honetarako! 'Windows Media Player' gaitu nahi duzu zure sistema eragilean?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource ez da behar bezala erregistratu multimedia erreproduzitzeko! Sakatu Bai berriro erregistratzeko. Bi aldiz galdetuko zaizu" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Multimedia erreproduzitzeko erregistratutako BambuSource osagaia falta da! Berrinstalatu OrcaSlicer edo eskatu laguntza komunitateari." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Beste instalazio bateko BambuSource erabiltzen ari zara; baliteke bideo-erreprodukzioak behar bezala ez funtzionatzea! Sakatu Bai konpontzeko." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Zure sisteman GStreamer-erako H.264 kodekak falta dira, eta beharrezkoak dira bideoa erreproduzitzeko. (Saiatu gstreamer1.0-plugins-bad edo gstreamer1.0-libav paketeak instalatzen, eta berrabiarazi OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Hodeiko agentea ez dago erabilgarri. Berrabiarazi OrcaSlicer eta saiatu berriro." @@ -11775,15 +11940,22 @@ msgstr "Konponketa bertan behera utzi da" msgid "Copying of file %1% to %2% failed: %3%" msgstr "%1% fitxategia %2% helmugara kopiatzeak huts egin du: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Hornitzaileen profil berriak deskargatzen: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigurazio-paketea: %1% %2% bertsiora eguneratu da" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Huts egin du hornitzaileen profilak deskargatzeak: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Egiaztatu gorde gabeko aldaketarik dagoen konfigurazioa eguneratu aurretik." -msgid "Configuration package: " -msgstr "Konfigurazio-paketea: " - -msgid " updated to " -msgstr " hona eguneratu da: " - msgid "Open G-code file:" msgstr "Ireki G-code fitxategia:" @@ -11843,11 +12015,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Sarrera-moldaketa Klipperrek, RepRapFirmwarek eta Marlin 2k soilik onartzen dute." -msgid "Grouping error: " -msgstr "Taldekatze-errorea: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Taldekatze-errorea: %1% ezin da ezkerreko pitan jarri" -msgid " can not be placed in the " -msgstr " ezin da hemen kokatu: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Taldekatze-errorea: %1% ezin da eskuineko pitan jarri" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Taldekatze-errorea eskuzko moduan. Egiaztatu pita kopurua edo taldekatu berriro." @@ -11960,6 +12136,10 @@ msgstr "%1% besteetatik gertuegi dago, eta talkak sor daitezke." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% altuegia da, eta talkak sortuko dira." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Modeloaren eta purgatze-dorrearen kokapen erlatiboak ez ditu betetzen \"Geruza bakandurik ez\" funtzioaren baldintzak. Doitu haien kokapen erlatiboa, jaitsi modeloaren altuera edo desaktibatu \"Geruza bakandurik ez\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " baztertze-eremutik gertuegi dago; talkak egon daitezke inprimatzean." @@ -11994,6 +12174,10 @@ msgstr "Hala ere inprimatu nahi baduzu, aukera hau gaitu dezakezu: Hobespenak / msgid "No extrusions under current settings." msgstr "Uneko ezarpenekin ez dago estrusiorik." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Gradientedun filamentu nahasi bat erabiltzen ari da, baina 'Kolore nahasiaren azpigeruza' desgaituta dago. Gradientea ez da inprimatuko." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Timelapsearen modu leuna ez da onartzen \"objektuka\" sekuentzia gaituta dagoenean." @@ -12030,6 +12214,10 @@ msgstr "Modeloaren tamaina txikitu edo uneko inprimatze-ezarpenak aldatu eta ber msgid "Variable layer height is not supported with Organic supports." msgstr "Geruza-altuera aldakorra ez da onartzen euskarri organikoekin." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Purgatze-dorrearen filamentua ezin da filamentu nahasia izan." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Pitaren diametro eta filamentu-diametro desberdinek agian ez dute ondo funtzionatuko purgatze-dorrea gaituta dagoenean. Oso esperimentala da; jarraitu kontuz." @@ -12298,6 +12486,9 @@ msgstr "Erabili 3MF G-codearen ordez" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Gaitu aukera hau inprimagailuak 3MF fitxategi bat inprimatze-lan gisa onartzen badu. Gaituta dagoenean, OrcaSlicerrek xerratutako fitxategia .gcode.3mf gisa bidaltzen du, .gcode fitxategi arrunt baten ordez." +msgid "Printer Agent" +msgstr "Inprimagailu-agentea" + msgid "Select the network agent implementation for printer communication." msgstr "Hautatu inprimagailuarekin komunikatzeko sare-agentearen inplementazioa." @@ -12379,8 +12570,8 @@ msgstr "mm edo %" msgid "Other layers" msgstr "Beste geruzak" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Hasierakoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak SuperTack Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Hau da lehenengoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak SuperTack Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Hau da lehenengoa ez den geruzetarako ohearen tenperatura. 0 balioak filamentuak Plaka hotzaren gainean inprimatzea ez duela onartzen esan nahi du." @@ -13345,6 +13536,10 @@ msgstr "Lerrozuzen lerrokatua" msgid "Concentric" msgstr "Kontzentrikoa" +# AI Translated +msgid "Spiral Inset" +msgstr "Kiribil-barneratzea" + msgid "Hilbert Curve" msgstr "Hilbert kurba" @@ -13430,26 +13625,26 @@ msgstr "Goiko gainazala betetzeko ordena" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Goiko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" -"Kanporanzkoa erdialdean hasten da, beraz, gehiegizko materiala gutxien ikusten den ertzera bultzatzen da. Barruranzkoa ertzean hasten da eta erdian kurba estuekin amaitzen da.\n" -"Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." +"Goiko gainazalak zein norabidetan betetzen diren erdigunetik abiatzen den patroi bat erabiltzean (Kontzentrikoa, Kiribil-barneratzea, Arkimedesen kordak, Oktagrama-kiribila).\n" +"Kanporantz gainazalaren erdigunean hasten da, eta, hala, soberako materiala ertzerantz bultzatzen da, non gutxien ikusten den. Barrurantz ertzean hasten da eta erdiguneko kurba estuekin amaitzen da.\n" +"Lehenetsia bide laburrenaren ordena erabiltzen du, eta bi norabideetako edozeinetan joan daiteke." msgid "Bottom surface fill order" msgstr "Beheko gainazala betetzeko ordena" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" -"Barruranzkoa hasten da gainazal bakoitza kanpoko kurba zabalagoekin, eta horrek lehen geruzaren atxikimendua hobetzen du erdiko kurba estuak itsatsi ez daitezkeen inprimatze-plaketan. Kanporanzkoa erdialdean hasten da, gehiegizko materiala ertzera bultzatuz.\n" -"Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." +"Beheko gainazalak zein norabidetan betetzen diren erdigunetik abiatzen den patroi bat erabiltzean (Kontzentrikoa, Kiribil-barneratzea, Arkimedesen kordak, Oktagrama-kiribila).\n" +"Barrurantz gainazal bakoitza kanpoko kurba zabalagoekin hasten da, eta horrek lehen geruzaren itsaspena hobetzen du erdiguneko kurba estuak ondo itsasten ez diren oheetan. Kanporantz erdigunean hasten da, eta soberako materiala ertzerantz bultzatzen du.\n" +"Lehenetsia bide laburrenaren ordena erabiltzen du, eta bi norabideetako edozeinetan joan daiteke." # AI Translated msgid "Internal solid infill pattern" @@ -13551,6 +13746,14 @@ msgstr "Erlojuaren kontrako noranzkoa" msgid "Clockwise" msgstr "Erlojuaren noranzkoa" +# AI Translated +msgid "Distance to rod" +msgstr "Barrarainoko distantzia" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Pitaren muturretik barraren urrunen dagoen ertzerainoko distantzia horizontala. Objektuka inprimatzean talkak saihesteko erabiltzen da." + msgid "Height to rod" msgstr "Hagaxkarainoko altuera" @@ -13730,6 +13933,8 @@ msgstr "Geruza-denbora" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Piezaren hozte-haizagailua gaituko da estimatutako denbora balio hau baino laburragoa duten geruzetan. Haizagailuaren abiadura gutxienekoaren eta gehienekoaren artean interpolatuko da geruzaren inprimatze-denboraren arabera." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14035,6 +14240,62 @@ msgstr "Euskarri-materiala" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Euskarri-materiala euskarriak eta euskarri-interfazeak inprimatzeko erabiltzen da normalean." +# AI Translated +msgid "Is mixed filament" +msgstr "Filamentu nahasia da" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Filamentu-zirrikitu hau hainbat filamentu fisikoz osatutako filamentu nahasia den adierazten du" + +# AI Translated +msgid "Mixed filament components" +msgstr "Filamentu nahasiaren osagaiak" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Osagai-filamentuen indizeak, komaz bereizita eta 1etik hasita; adib. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Filamentu nahasiaren azpigeruza-ratioak" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Komaz bereizitako ratio-balioak, guztira 1.0 ematen dutenak; adib. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Filamentu nahasiaren gradientea" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Z norabideko gradiente modua gaitzen du filamentu nahasiaren azpigeruzetarako. Gaituta dagoenean, azpigeruzen ratioak linealki aldatzen dira geruzaz geruza." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Filamentu nahasiaren gradiente-barrutia" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Lehen osagaiaren hasierako eta amaierako ratioak gradiente moduan. Komaz bereizitako parea; adib. \"0.10,0.90\" %10etik %90era esan nahi du." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Filamentu nahasiaren gradiente-kurba" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Aukerako Photoshop estiloko kurba pertsonalizatua, Z progresioa lehen osagaiaren ratioarekin lotzen duena. Barra bertikalez bereizitako kontrol-puntu gisa kodetzen da, \"x,y\" (zaharra) edo \"x,y,m_in,m_out\" formatuan, tangentea gainidatzi behar denean (balio hutsak edo \"nan\" balioak PCHIP lehenetsia erabiltzen du). x [0,1] tartean dago; y konfiguratutako ratio-barrutira mugatzen da; adib. \"0,0.15|0.5,0.50|1,0.85\". Hutsik uzten bada, gradient_range lineala erabiltzen da haren ordez." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Filamentu nahasiaren gradientea pieza bakoitzeko" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gradiente modua gaituta dagoenean, gradientea multzoko pieza bakoitzari modu independentean aplikatzen zaio, multzo osoa Z barruti bakar gisa hartu beharrean." + msgid "Filament printable" msgstr "Filamentua inprimagarria" @@ -15286,6 +15547,8 @@ msgstr "Y ardatzaren gehieneko indarra" msgid "The allowed maximum output force of Y axis" msgstr "Y ardatzaren gehieneko irteera-indar baimendua" +# AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15295,6 +15558,8 @@ msgstr "Y ardatzeko ohearen masa" msgid "The machine bed mass load of Y axis" msgstr "Y ardatzeko makinaren oheak jasaten duen masa-karga" +# AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15606,8 +15871,8 @@ msgstr "Mozteko eremutik hondakin-ontzira doazen hasierako eta amaierako puntuak msgid "Reduce infill retraction" msgstr "Murriztu betegarriaren atzera-egitea" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Ez egin atzera-egiterik mugimendua guztiz betegarriaren eremuan dagoenean. Horrek esan nahi du jarioa ez dela ikusiko. Honek modelo konplexuetan atzera-egite kopurua murriztu eta inprimatze-denbora aurreztu dezake, baina xerraketa eta G-codearen sorrera motelduko ditu. Kontuan izan z-hop mugimendua ez dela egiten atzera-egitea saihesten den eremuetan." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Ez egin atzera-egiterik mugimendua guztiz betegarriaren eremuan dagoenean. Horrek esan nahi du jarioa ez dela ikusiko. Honek modelo konplexuetan atzera-egite kopurua murriztu eta inprimatze-denbora aurreztu dezake, baina xerraketa eta G-codearen sorrera motelduko ditu. Kontuan izan Z-hop mugimendua ez dela egiten atzera-egitea saihesten den eremuetan." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Aukera honek aktibo ez dauden estrusoreen tenperatura jaitsiko du, jarioa saihesteko." @@ -15643,6 +15908,20 @@ msgstr "Detektatu irtengune-hormak" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Honek irtenguneen ehunekoa detektatzen du lerro-zabalerarekiko eta abiadura desberdina erabiltzen du. 100%%-eko irtengunean zubi-abiadura erabiltzen da." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Inprimatu azkenik euskarririk gabeko hormak" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Erabat airean dauden hormako begiztak zerbaitek eutsi diezaiekeenean inprimatzen dira:\n" +"beren uhartearen gainerako hormen ondoren estruitzen dira, barrukoenetik hasita, hormen ordena edozein dela ere.\n" +"Geruza honetako zubiek soilik ainguratu dezaketen begizta batek zubi horiek inprimatu arte itxaroten du; euskarria duen horma baten ondotik doan begiztak, berriz, betegarriaren aurreko lekuari eusten dio, betegarriak aingura gisa behar baitu." + msgid "Outer walls" msgstr "Kanpoko hormak" @@ -15771,7 +16050,7 @@ msgstr "Garbitu ondorengo atzera-egite kantitatea" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Garbiketa-mugimenduaren ondorengo atzera-egite azkarraren luzera, atzera-egitearen luzerari dagokionez.\n" @@ -15818,7 +16097,7 @@ msgstr "Erreminta aldatu aurretik atzera-egitea abiarazten denean, filamentua ze msgid "Z-hop height" msgstr "Z jauziaren altuera" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Atzera-egite bakoitzean pita apur bat altxatzen da pitaren eta inprimaketaren artean tartea sortzeko. Horrela, mugimenduetan pitak pieza jotzea saihesten da. Z altxatzeko espiral-lerroak erabiltzeak hariak sortzea murriztu dezake." msgid "Z-hop lower boundary" @@ -16072,6 +16351,39 @@ msgstr "Garbitu begiztetan" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Begizta itxiko estrusio batean josturaren ikusgarritasuna minimizatzeko, barruranzko mugimendu txiki bat egiten da estrusoreak begizta utzi aurretik." +# AI Translated +msgid "Wipe inward" +msgstr "Purgatu barrurantz" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Kanpoko hormei soilik aplikatzen zaie, zuloen mugak barne. Purgatzean pita beroa jada inprimatutako barruko hormetarantz mugitzen du, inprimatu berri den plastikoa berriro berotzea eta jostura-markak murrizteko.\n" +"\n" +"Bereziki erabilgarria da 0,1 mm-tik beherako geruza-altueretan, non purgatze-markak nabarmenago ikusten diren.\n" +"\n" +"Purgatze arrunta erabiltzen du ondoko barruko hormarik jada inprimatuta ez badago (horma bakarreko eremuak edo Kanpokoa/Barrukoa hormen ordena) edo euskarria duen barrurako biderik aurkitzen ez bada, adibidez izkina estuetan edo josturako hutsuneetan." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Barrurako purgatze-distantzia" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Purgatze-bidea kanpoko perimetrotik zenbat desplazatzen den, milimetrotan edo kanpoko hormaren benetako estrusio-zabaleraren ehuneko gisa adierazita.\n" +"\n" +"Adibidez, 50% bideak kanpoko hormaren zabaleraren erdia desplazatzen du. Desplazamendu eraginkorra mugatuta dago bai kanpoko hormaren benetako zabaleragatik bai ondoko hormarainoko tarte erabilgarriagatik; beraz, 100% baino handiagoko balioek edo baliokidea den distantzia absolutu batek ez dute eragin gehigarririk. Ezarri 0 desplazamendua desgaitzeko." + msgid "Wipe before external loop" msgstr "Garbitu kanpoko begizta baino lehen" @@ -16331,8 +16643,9 @@ msgstr "Hartu erreminta berria inprimatze-tenperaturara iritsi arte itxaron gabe msgid "No sparse layers (beta)" msgstr "Geruza bakandurik ez (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Gaituta badago, purgatze-dorrea ez da inprimatuko tresna-aldaketarik ez duten geruzetan. Tresna-aldaketa duten geruzetan, estrusorea beherantz mugituko da purgatze-dorrea inprimatzeko. Erabiltzailearen ardura da inprimaketarekin talkarik ez dagoela ziurtatzea." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Gaituz gero, purgatze-dorrea ez da inprimatuko erreminta-aldaketarik ez duten geruzetan. Erreminta-aldaketa duten geruzetan, estrusorea behera joango da purgatze-dorrea inprimatzera; beraz, dorrea modeloaren azpian geratzen da eta inprimatze-buruak beheraino iritsi behar du. Jada inprimatutako objektu batekin talka egingo luketen antolamenduak baztertu egiten dira. Ez du eraginik timelapse leunarekin edo pitaren pilaketa-detekzioarekin, horiek geruza guztietan dorrea behar baitute." msgid "Prime all printing extruders" msgstr "Primatu inprimatzeko estrusore guztiak" @@ -16355,6 +16668,34 @@ msgstr "" msgid "Cyclic" msgstr "Ziklikoa" +# AI Translated +msgid "Cyclic order" +msgstr "Ordena ziklikoa" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Erreminta-aldaketen ordena ziklikoak erabiltzen duen filamentu-sekuentzia pertsonalizatua, filamentu-zenbakiak komaz bereizita (adib. \"3,2,1,4\").\n" +"Geruza bakoitzak sekuentzia horri jarraituz inprimatzen ditu bere filamentuak; zerrendatu gabeko filamentuak azkenik inprimatzen dira, gorantz ordenatuta.\n" +"Utzi hutsik filamentuak gorantz ordenatuta zeharkatzeko." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Aplikatu ordena ziklikoa lehen geruzari" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Erreminta-aldaketen ordena ziklikoa lehen geruzari ere aplikatzen dio.\n" +"Lehenespenez desgaituta dago, lehen geruza ohean ahalik eta ondoen itsasteko ordenatzen baita: lehen geruzako elementu txiki eta hauskorrak inprimatzen dituzten filamentuak azkenik inprimatzen dira, hala ondorengo erreminta-aldaketek eta desplazamenduek nekezago askatuko baitituzte ahul ainguratutako zati horiek. Lehen geruzaren ordena horrek lehen geruzarako filamentu-sekuentzia pertsonalizatua ere errespetatzen du, ezarrita badago. Ordena ziklikoaren onura (erreminta-aldaketa gehigarriek geruza bakoitzari hozteko denbora gehiago ematen diote) ez da lehen geruzari aplikatzen, itsaspenagatik astiro eta bero inprimatzen baita.\n" +"Gaitu hau soilik geruza guztietan, lehena barne, erreminta-sekuentzia zehatz-mehatz bera behar baduzu, itsaspen-optimizazio hori galtzearen truke." + msgid "Slice gap closing radius" msgstr "Xerraketan tartea ixteko erradioa" @@ -16364,9 +16705,6 @@ msgstr "Tartea ixteko erradioaren bikoitza baino txikiagoak diren pitzadurak bet msgid "Slicing Mode" msgstr "Xerratze-modua" -msgid "Other" -msgstr "Bestelakoak" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Erabili \"Bikoiti-bakoiti\" 3DLabPrint hegazkin-modeloetarako. Erabili \"Itxi zuloak\" modeloko zulo guztiak ixteko." @@ -16860,6 +17198,14 @@ msgstr "" "\n" "Beheko garbitu aurreko atzera-egite kantitatearen ezarpenean balio batezarriz gero, gehiegizko atzera-egitea garbiketa baino lehen egingo da; bestela, ondoren egingo da." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Kolore nahasiaren azpigeruza" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Kolore nahasiaren azpigeruzatan zatitzea gaitzen du. Gaituta dagoenean, kolore nahasiko filamentuak dituzten geruzak azpigeruzatan zatitzen dira kolore-nahasketa efektuak lortzeko." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Purgatze-dorrea pitaren hondarrak garbitzeko eta pitaren barruko ganbera-presioa egonkortzeko erabil daiteke, objektuetan itxura-akatsak saihesteko." @@ -17341,6 +17687,14 @@ msgstr "Egiaztapenik ez" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Ez exekutatu baliozkotasun-egiaztapenik, hala nola G-code bideen gatazken egiaztapena." +# AI Translated +msgid "Strict mode" +msgstr "Modu zorrotza" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Zerorik bestelako kode batekin irteten da xerratzeak larria ez den abisu bat sortzen duenean, bestela erregistroan soilik jasoko litzatekeena; adibidez, euskarria behar duen modelo bat euskarria desgaituta dagoenean. Erabili hau inoiz ezkutuko akatsik duen xerratzerik eman behar ez duten CI edo script bidezko prozesuetan. Horrelako abisu bakoitza result.json fitxategiko `warnings` array-an ere zerrendatzen da klase egonkor batekin; fitxategi hori Linuxen soilik idazten da. Ezin da --no-check aukerarekin konbinatu, horrek euskarrien egiaztapena saltatzen baitu." + msgid "Normative check" msgstr "Arauzko egiaztapena" @@ -17353,11 +17707,28 @@ msgstr "Irteerako modeloaren informazioa" msgid "This outputs the model’s information." msgstr "Atera modeloaren informazioa ateratzen du honek." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Aztertu sarea (JSON stdout-era)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Kargatutako objektu bakoitzaren JSON laburpena stdout-era idazten du eta gero irten egiten da: bere muga-kutxak eta jarri daitekeen oskol ganbileko aurpegiak, haien normalak, azalerak eta erdiguneak barne. --ground-* aukerek aurpegi horien artean egiten dute hautua. --info aukeraren ordezko makina-irakurgarria." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Aztertu margoketa (JSON stdout-era)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Kargatutako modeloan jada gordeta dagoen margotutako geruza bakoitzaren (euskarriak, jostura, MMU kolorea, gainazal zimurra) JSON laburpen egituratua idazten du — egoera bakoitzeko aurpegi kopurua, gainazal-azalera eta sarearekiko muga-kutxa — eta gero irten egiten da. Interfazean margoketa-tresnak irekitzearen ordezko makina-irakurgarria." + msgid "Export Settings" msgstr "Esportatu ezarpenak" -msgid "This exports settings to a file." -msgstr "Honek ezarpenak fitxategi batera esportatzen ditu." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Honek ezarpenak fitxategi batera esportatzen ditu. Erabili - stdout-era idazteko." msgid "Send progress to pipe" msgstr "Bidali aurrerapena pipe-ra" @@ -17413,6 +17784,30 @@ msgstr "Biratu Y inguruan" msgid "Rotation angle around the Y axis in degrees." msgstr "Y ardatzaren inguruko biraketa-angelua, gradutan." +# AI Translated +msgid "Ground largest face" +msgstr "Jarri aurpegirik handienaren gainean" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Objektu bakoitza bere oskol ganbileko aurpegirik handienaren gainean jartzen du eta ohera erortzen uzten du. Tamaina bereko aurpegien artean, jada beherantz begira dagoena mantentzen da. Bermatzeko behar bezain aurpegi handirik ez duten objektuak dauden bezala uzten dira. Eraldaketak komando-lerroaren ordenan exekutatzen dira; beraz, aukera honen aurretik emandako biraketak errespetatzen dira. --orient 1 eraldaketa guztien ondoren exekutatzen da eta orientazioa ordezkatzen du." + +# AI Translated +msgid "Ground face by normal" +msgstr "Jarri aurpegiaren gainean normalaren arabera" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Objektu bakoitza kanporako normala NX,NY,NZ norabidetik hurbilen duen oskol ganbileko aurpegiaren gainean jartzen du eta ohera erortzen uzten du. Norabidea objektuaren koordenatuetan adierazten da; horiek aukera honen aurretik emandako biraketak barne hartzen dituzte eta plataformaren ardatzekin bat datoz, sarrerako fitxategiak objektua biratzen ez badu behintzat. Adibidez, 1,0,0 balioak objektua bere +X aldearen gainean jartzen du zutik. --orient 1 eraldaketa guztien ondoren exekutatzen da eta orientazioa ordezkatzen du." + +# AI Translated +msgid "Ground face at point" +msgstr "Jarri puntu bateko aurpegiaren gainean" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Objektu bakoitza X,Y,Z puntua duen oskol ganbileko aurpegiaren gainean jartzen du eta ohera erortzen uzten du. Puntua objektuaren koordenatuetan adierazten da; horiek aukera honen aurretik emandako biraketak barne hartzen dituzte, eta --inspect-mesh aukerak koordenatu horietan ematen ditu aurpegien erdiguneak. Horrelako aurpegirik ez duten objektuak dauden bezala uzten dira, eta exekuzioak huts egiten du objektu bakar batek ere ez badu horrelakorik. --orient 1 eraldaketa guztien ondoren exekutatzen da eta orientazioa ordezkatzen du." + msgid "Scale the model by a float factor." msgstr "Eskalatu modeloa koma mugikorreko faktore baten bidez." @@ -17918,6 +18313,10 @@ msgstr "Modelo-fitxategiaren sareztatzeak huts egin du edo ez dago baliozko form msgid "The supplied file couldn't be read because it's empty." msgstr "Emandako fitxategia ezin izan da irakurri hutsik dagoelako." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Fitxategi-formatua bateraezina da eta ezin da analizatu." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Fitxategi-formatu ezezaguna: sarrerako fitxategiak .stl, .obj edo .amf(.xml) luzapena izan behar du." @@ -19379,19 +19778,19 @@ msgstr "Inprimagailuaren, filamentuen edo prozesuen aurrezarpenetan aldaketak di msgid "Only display the filament names with changes to filament presets." msgstr "Bistaratu soilik filamentu-aurrezarpenetan aldaketak dituzten filamentu-izenak." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Erabiltzailearen inprimagailu-aurrezarpenak dituzten inprimagailu-izenak soilik bistaratuko dira, eta hautatzen duzun aurrezarpen bakoitza zip gisa esportatuko da." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Erabiltzailearen filamentu-aurrezarpenak dituzten filamentu-izenak soilik bistaratuko dira, \n" "eta hautatzen duzun filamentu-izen bakoitzeko erabiltzailearen filamentu-aurrezarpen guztiak zip gisa esportatuko dira." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Prozesu-aurrezarpen aldatuak dituzten inprimagailu-izenak soilik bistaratuko dira, \n" "eta hautatzen duzun inprimagailu-izen bakoitzeko erabiltzailearen prozesu-aurrezarpen guztiak zip gisa esportatuko dira." @@ -19620,7 +20019,7 @@ msgstr "Kopiatu sistemaren informazioa arbelera" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Arazoaren jatorria diagnostikatzeko informazioa behar dugu. Begiratu wiki-orria gida xehatua ikusteko." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketatu botoiak proiektu-fitxategia eta uneko saioko erregistroak ZIP fitxategi batean biltzen ditu." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19662,7 +20061,7 @@ msgstr "Erregistro-maila" msgid "Stored logs" msgstr "Gordetako erregistroak" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Gordetako erregistro guztiak ZIP fitxategi batean paketatzen ditu." msgid "Profiles" @@ -19729,7 +20128,7 @@ msgstr "Ez da inprimagailu mota aurkitu; hautatu eskuz." msgid "Authorizing..." msgstr "Baimena ematen..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Errorea. Ezin da baimenerako API tokena lortu" msgid "Could not parse server response." @@ -20180,8 +20579,9 @@ msgstr "Ezabatuta" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Gaitu filamentuen esleipen adimenduna: esleitu filamentua hainbat pitatara aurrezpena maximizatzeko" -msgid "Fila Saving" -msgstr "Filamentu-aurrezpena" +# AI Translated +msgid "File Saving" +msgstr "Fitxategia gordetzea" msgid "Don't remind me again" msgstr "Ez gogorarazi berriro" @@ -20463,6 +20863,18 @@ msgstr "Ekintza hau ezin da desegin. Jarraitu?" msgid "Skipping objects." msgstr "Objektuak saltatzen." +# AI Translated +msgid "Material Ratio" +msgstr "Material-proportzioa" + +# AI Translated +msgid "Model Height" +msgstr "Modeloaren altuera" + +# AI Translated +msgid "Ratio" +msgstr "Proportzioa" + msgid "Select Filament" msgstr "Hautatu filamentua" @@ -20542,6 +20954,9 @@ msgstr "Berrabiarazi orain" msgid "NO RAMMING AT ALL" msgstr "MUTURRAREN MOLDAKETARIK EZ INONDIK INORA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Abiadura bolumetrikoa" @@ -20701,11 +21116,15 @@ msgstr "Lehortzen-Berotzen" msgid "Drying-Dehumidifying" msgstr "Lehortzen-Hezetasuna kentzen" -msgid " maximum drying temperature is " -msgstr " lehortze-tenperatura maximoa da " +# AI Translated +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s: gehieneko lehortze-tenperatura %d°C da." -msgid " minimum drying temperature is " -msgstr " lehortze-tenperatura minimoa da " +# AI Translated +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s: gutxieneko lehortze-tenperatura %d°C da." msgid "This filament may not be completely dried." msgstr "Baliteke filamentu hau erabat lehortuta ez egotea." @@ -21118,6 +21537,122 @@ msgstr "" "Saihestu okertzea\n" "Ba al zenekien ABS bezalako okertzeko joera duten materialak inprimatzean ohe beroaren tenperatura egoki igotzeak okertzeko probabilitatea murriztu dezakeela?" +#~ msgid "Other" +#~ msgstr "Bestelakoak" + +#~ msgid "Left: " +#~ msgstr "Ezkerra: " + +#~ msgid "Right: " +#~ msgstr "Eskuina: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Gehieneko tenperaturak ezin du hau gainditu: " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Gutxieneko tenperaturak ezin du hau baino txikiagoa izan: " + +#~ msgid "up to" +#~ msgstr "honaino" + +#~ msgid "above" +#~ msgstr "honen gainean" + +#~ msgid "from" +#~ msgstr "hemendik" + +#~ msgid "Configuration package: " +#~ msgstr "Konfigurazio-paketea: " + +#~ msgid " updated to " +#~ msgstr " hona eguneratu da: " + +#~ msgid "Grouping error: " +#~ msgstr "Taldekatze-errorea: " + +#~ msgid " can not be placed in the " +#~ msgstr " ezin da hemen kokatu: " + +#~ msgid " maximum drying temperature is " +#~ msgstr " lehortze-tenperatura maximoa da " + +#~ msgid " minimum drying temperature is " +#~ msgstr " lehortze-tenperatura minimoa da " + +# AI Translated +#~ msgid "needs" +#~ msgstr "honakoa behar du:" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "ez dago gaituta" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materiala ez dago argitaratuta" + +#~ msgid "Select the language" +#~ msgstr "Hautatu hizkuntza" + +#~ msgid "Select plugin" +#~ msgstr "Hautatu plugina" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Goiko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" +#~ "Kanporanzkoa erdialdean hasten da, beraz, gehiegizko materiala gutxien ikusten den ertzera bultzatzen da. Barruranzkoa ertzean hasten da eta erdian kurba estuekin amaitzen da.\n" +#~ "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Beheko gainazalak betetzen diren noranzkoa zentroan oinarritutako patroia erabiltzen denean (Kontzentrikoa, Arkimedesen kordak, Oktagrama-kiribila).\n" +#~ "Barruranzkoa hasten da gainazal bakoitza kanpoko kurba zabalagoekin, eta horrek lehen geruzaren atxikimendua hobetzen du erdiko kurba estuak itsatsi ez daitezkeen inprimatze-plaketan. Kanporanzkoa erdialdean hasten da, gehiegizko materiala ertzera bultzatuz.\n" +#~ "Lehenetsiak bide laburreneko ordena erabiltzen du, zeina norabide batean zein bestean ibil daitekeen." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Gaituta badago, purgatze-dorrea ez da inprimatuko tresna-aldaketarik ez duten geruzetan. Tresna-aldaketa duten geruzetan, estrusorea beherantz mugituko da purgatze-dorrea inprimatzeko. Erabiltzailearen ardura da inprimaketarekin talkarik ez dagoela ziurtatzea." + +#~ msgid "This exports settings to a file." +#~ msgstr "Honek ezarpenak fitxategi batera esportatzen ditu." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Waylanden jatorrizko zuzeneko ikuspegiak GStreamer GTK bideo-hustubidea behar du. Instalatu GStreamerrerako gtksink plugina eta berrabiarazi OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Ezin izan da Waylanden jatorrizko GStreamer bideo-hustubidea hasieratu. Egiaztatu GStreamer GTK pluginaren instalazioa." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player behar da zeregin honetarako! 'Windows Media Player' gaitu nahi duzu zure sistema eragilean?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource ez da behar bezala erregistratu multimedia erreproduzitzeko! Sakatu Bai berriro erregistratzeko. Bi aldiz galdetuko zaizu" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Multimedia erreproduzitzeko erregistratutako BambuSource osagaia falta da! Berrinstalatu OrcaSlicer edo eskatu laguntza komunitateari." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Beste instalazio bateko BambuSource erabiltzen ari zara; baliteke bideo-erreprodukzioak behar bezala ez funtzionatzea! Sakatu Bai konpontzeko." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Zure sisteman GStreamer-erako H.264 kodekak falta dira, eta beharrezkoak dira bideoa erreproduzitzeko. (Saiatu gstreamer1.0-plugins-bad edo gstreamer1.0-libav paketeak instalatzen, eta berrabiarazi OrcaSlicer?)" + +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "g" + +#~ msgid "Fila Saving" +#~ msgstr "Filamentu-aurrezpena" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -22259,20 +22794,12 @@ msgstr "" #~ msgid "The 3mf has the following customized filament or printer presets:" #~ msgstr "3mf-ak pertsonalizatutako filamentuen edo inprimagailuaren aurrezarpen hauek dauzka:" -#~ msgid "Name of components inside step file is not UTF8 format!" -#~ msgstr "Step fitxategiko osagaien izena ez dago UTF8 formatuan!" +#~ msgid "Name of components inside step file is not UTF-8 format!" +#~ msgstr "Step fitxategiko osagaien izena ez dago UTF-8 formatuan!" #~ msgid "The name may show garbage characters!" #~ msgstr "Izenak karaktere ulergaitzak erakuts ditzake!" -#, c-format, boost-format -#~ msgid "" -#~ "The object from file %s is too small, and maybe in meters or inches.\n" -#~ " Do you want to scale to millimeters?" -#~ msgstr "" -#~ "%s fitxategiko objektua txikiegia da, eta baliteke metroetan edo hazbetetan egotea.\n" -#~ " Milimetrotara eskalatu nahi duzu?" - #~ msgid "" #~ "This file contains several objects positioned at multiple heights.\n" #~ "Instead of considering them as multiple objects, should \n" @@ -23123,24 +23650,6 @@ msgstr "" #~ msgid "Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable." #~ msgstr "Hormak gurutzatzea saihesteko gehieneko desbideratze-distantzia. Ez desbideratu distantzia balio hau baino handiagoa bada. Desbideratze-luzera balio absolutu gisa edo lekualdatze-ibilbide zuzenaren ehuneko gisa zehaztu daiteke (adibidez, 50%). Zero, desgaitzeko." -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela plaka hotzean inprimatzea onartzen." - -#~ msgid "°C" -#~ msgstr "°C" - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured Cool Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela testuradun plaka hotzean inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Engineering Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela ingeniaritza-plakan inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the High Temp Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela tenperatura altuko plakan inprimatzea onartzen." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -#~ msgstr "Ohearen tenperatura hasierakoa ez diren geruzetarako. 0 balioak esan nahi du filamentuak ez duela testuradun PEI plakan inprimatzea onartzen." - #~ msgid "Initial layer" #~ msgstr "Hasierako geruza" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index fc58381106..3d410daf6e 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: Guislain Cyril, Thomas Lété\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n==0 || n==1) ? 0 : 1;\n" -"X-Generator: Poedit 3.6\n" +"X-Generator: Poedit 3.9\n" # AI Translated msgid "Main Extruder" @@ -2414,15 +2414,6 @@ msgstr "Une mise à jour est disponible. Ouvrez la boîte de dialogue du paquet msgid "%s has been removed." msgstr "%s a été supprimé." -msgid "Switching application language" -msgstr "Changer la langue de l'application" - -msgid "Select the language" -msgstr "Sélectionner la langue" - -msgid "Language" -msgstr "Langue" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "Le passage d’Orca Slicer à la langue %s a échoué." @@ -2896,6 +2887,10 @@ msgstr "Éditer" msgid "Merge with" msgstr "Fusionner avec" +# AI Translated +msgid "Decompose Color" +msgstr "Décomposer la couleur" + msgid "Delete this filament" msgstr "Supprimer ce filament" @@ -3178,6 +3173,10 @@ msgstr "Assemblé" msgid "Merge parts to an object" msgstr "Fusionner les pièces en un objet" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "L’utilisation d’une hauteur de couche variable avec la sous-couche de couleur mixte peut dégrader la qualité du mélange des couleurs." + msgid "Add layers" msgstr "Ajouter des couches" @@ -3629,11 +3628,15 @@ msgstr "Rétracter le filament actuel au Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Changer de voie au Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "La température maximale ne peut pas dépasser " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "La température maximale ne peut pas dépasser %d" -msgid "The minmum temperature should not be less than " -msgstr "La température minimale ne doit pas être inférieure à " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "La température minimale ne doit pas être inférieure à %d" msgid "Type to filter..." msgstr "Saisissez du texte pour filtrer…" @@ -4501,6 +4504,15 @@ msgstr "" "La copie du G-code temporaire vers le G-code de sortie a échoué. La carte SD est peut-être bloquée en écriture ?\n" "Message d’erreur : %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"La copie du G-code temporaire vers le G-code de sortie a échoué.\n" +"Message d'erreur : %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "La copie du G-code temporaire vers le G-code de sortie a échoué. Il se peut qu’il y ait un problème avec le dispositif cible, veuillez essayer d’exporter à nouveau ou d’utiliser un autre périphérique. Le G-code de sortie corrompu se trouve dans %1%.tmp." @@ -4707,7 +4719,7 @@ msgstr "" "\n" "La valeur sera remise à 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "La paroi supplémentaire alternée ne fonctionne pas bien lorsque le paramètre Assurer l’épaisseur de la coque verticale est réglée sur Tous." msgid "" @@ -4753,7 +4765,7 @@ msgstr "" "NON - Conserver la hauteur de la couche de support indépendante" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height doit être inférieur à la hauteur de couche.\n" @@ -4761,7 +4773,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profondeur de verrouillage doit être inférieure à la profondeur de la peau.\n" @@ -4801,6 +4813,9 @@ msgstr "" "Oui - Modifiez ces paramètres et activez automatiquement le mode spirale/vase\n" "Non - Annuler l'activation du mode spirale" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Impression" @@ -5231,14 +5246,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "La valeur %s est hors plage. La plage valide est comprise entre %d et %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Est-ce %s%% ou %s %s ?\n" -"OUI pour %s%%, \n" -"NON pour %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Est-ce %s%% ou %s %s ?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5260,29 +5272,22 @@ msgstr "Motif invalide. Utilisez N, N#K, ou une liste séparée par des virgules msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Format invalide. Format vectoriel attendu : \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Agents système" -# AI Translated -msgid "No plugin selected" -msgstr "Aucun plugin sélectionné" - # AI Translated msgid "Add plugin" msgstr "Ajouter un plugin" -# AI Translated -msgid "Select plugin" -msgstr "Sélectionner un plugin" - # AI Translated msgid "Remove plugin" msgstr "Supprimer le plugin" +# AI Translated +msgid "No plugin selected" +msgstr "Aucun plugin sélectionné" + # AI Translated msgid "Configure" msgstr "Configurer" @@ -5538,14 +5543,20 @@ msgstr "Définir comme optimal" msgid "Regroup filament" msgstr "Regrouper les filaments" -msgid "up to" -msgstr "jusqu’à" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "jusqu’à %1% mm" -msgid "above" -msgstr "plus que" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "au-dessus de %1% mm" -msgid "from" -msgstr "de" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "de %1% à %2% mm" msgid "Usage" msgstr "Utilisation" @@ -5903,7 +5914,7 @@ msgstr "Volume :" msgid "Size:" msgstr "Taille :" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Des conflits de chemins G-code ont été trouvés au niveau de la couche %d, z = %.2lfmm. Veuillez séparer davantage les objets en conflit (%s <-> %s)." @@ -6215,16 +6226,24 @@ msgstr "Enregistrer le projet sous" msgid "Save current project as" msgstr "Enregistrer le projet actuel sous" +# AI Translated +msgid "Publish 3MF" +msgstr "Publier 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exporter un fichier 3MF avec les réglages sélectionnés intégrés" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importer des fichiers 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Charger un modèle" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importer une archive Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Charger les modèles contenus dans une archive zip" msgid "Import Configs" @@ -7476,6 +7495,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inférieur" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Ce réglage ne précise pas de type de capacité de plugin." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Ce réglage précise un type de capacité de plugin non reconnu : " + # AI Translated msgid "Plugin Selection" msgstr "Sélection des plugins" @@ -7733,6 +7760,10 @@ msgstr "Personnaliser le plateau actuel" msgid "The %s nozzle can not print %s." msgstr "La buse %s ne peut pas imprimer %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "L’impression d’un filament de couleur mixte sur une imprimante à extrudeur unique nécessite des changements de filament et des purges fréquents, ce qui peut augmenter considérablement les déchets et le risque d’obstruction de la buse ou de la goulotte à déchets." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Le mélange de %1% avec %2% lors de l'impression n'est pas recommandé.\n" @@ -7858,12 +7889,44 @@ msgstr "Synchroniser la liste des filaments depuis l'AMS" msgid "Set filaments to use" msgstr "Définir les filaments à utiliser" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Ajouter un filament mixte" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mixte" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Supprimer le dernier filament mixte" + +# AI Translated +msgid "Add mixed filament" +msgstr "Ajouter un filament mixte" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Le filament mixte comporte des composants invalides ou incohérents. Veuillez modifier à nouveau les entrées concernées." + msgid "Search plate, object and part." msgstr "Recherche de plaque, d'objet et de pièce." msgid "Pellets" msgstr "Granulés" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Le filament mixte comporte des références de composants invalides" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Éditer / Supprimer / Fusionner" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Le filament mixte cible utilise ce filament physique comme composant. La fusion supprimera ce filament physique et risque de rendre le filament mixte invalide. Continuer ?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Une fois votre opération terminée, le projet %s sera fermé et un nouveau projet sera créé." @@ -8000,7 +8063,15 @@ msgstr "Veuillez vous assurer que les G-codes de ces préréglages sont sûrs af msgid "Customized Preset" msgstr "Préréglage personnalisé" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Certains réglages publiés n'ont pas pu être appliqués :" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Certains emplacements de filament ont été modifiés :" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Le nom des composants dans le fichier STEP n'est pas au format UTF-8 !" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8022,10 +8093,10 @@ msgstr "Le volume de l'objet est nul" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L’objet du fichier %s est trop petit, et est peut-être en mètres ou en pouces.\n" -" Voulez-vous le mettre à l’échelle en millimètres ?" +"Voulez-vous le mettre à l’échelle en millimètres ?" msgid "Object too small" msgstr "Objet trop petit" @@ -8042,6 +8113,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objet en plusieurs pièces détecté" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Association des textures aux filaments" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avertissement d’importation de texture" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Charger ces fichiers en tant qu'objet unique avec plusieurs parties ?\n" @@ -8246,6 +8325,22 @@ msgstr "" msgid "Sync now" msgstr "Synchroniser maintenant" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Échec de l’importation de la texture. Le modèle semble contenir des données de texture, mais le processus d’importation n’a pas pu être mené à son terme. Le modèle sera importé en tant que géométrie uniquement." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Application des couleurs de texture..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Mise à jour de la vue 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Couleurs de texture appliquées." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Vous pouvez conserver les préréglages modifiés dans le nouveau projet ou les supprimer" @@ -8377,6 +8472,21 @@ msgstr "Enregistrer le fichier découpé sous :" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Le fichier %s a été envoyé vers l'espace de stockage de l'imprimante et peut être visualisé sur l'imprimante." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publier le fichier 3MF sous :" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Échec de l'exportation du fichier 3MF publié.\n" +"Veuillez vérifier si le dossier existe en ligne ou si d'autres programmes ont le fichier ouvert." + +msgid "Publish" +msgstr "Publier" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Le type de buse n'est pas défini. Veuillez définir la buse et réessayer." @@ -8587,9 +8697,6 @@ msgstr "Voulez-vous continuer ?" msgid "Language selection" msgstr "Sélection de la langue" -msgid "Switching application language while some presets are modified." -msgstr "Changement de langue de l’application alors que certains préréglages sont modifiés." - msgid "Asia-Pacific" msgstr "Asie-Pacifique" @@ -8694,6 +8801,9 @@ msgstr "Chemin d’accès à l’instance courante : " msgid "General" msgstr "Général" +msgid "Language" +msgstr "Langue" + msgid "Metric" msgstr "Métrique" @@ -9124,9 +9234,6 @@ msgstr "Lors du défilement du curseur de couche dans l'aperçu découpé, affic msgid "Dimmed layer brightness" msgstr "Luminosité des couches assombries" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9477,6 +9584,10 @@ msgstr "Vase spirale" msgid "First layer filament sequence" msgstr "Séquence d’impression de la première couche" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "La liste des filaments contient des filaments mixtes. La séquence de filaments personnalisée ne sera pas appliquée." + msgid "By Layer" msgstr "Par Couche" @@ -9504,9 +9615,6 @@ msgstr "Accéder à la page internet de publication des modèles" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Remarque : La préparation peut prendre plusieurs minutes. Veuillez patienter." -msgid "Publish" -msgstr "Publier" - msgid "Publish was canceled" msgstr "La publication a été annulée" @@ -9522,6 +9630,81 @@ msgstr "Téléversement des données" msgid "Jump to webpage" msgstr "Ouvrir la page internet" +# AI Translated +msgid "Material" +msgstr "Matériau" + +# AI Translated +msgid "Mixed filament" +msgstr "Filament mixte" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Certains filaments mixtes dépendent de filaments qui ne seront pas publiés :" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (mixte)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% nécessite %2%, qui n'est pas activé." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% nécessite %2%, dont le matériau ne sera pas publié." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Pour publier un filament mixte, activez chacun des filaments qu'il utilise et choisissez Publication complète ou satisfaites son exigence de Type." + +# AI Translated +msgid "Publish anyway" +msgstr "Publier quand même" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publier 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Sélectionnez les réglages à publier dans le fichier 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki de Publier 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Guide vidéo de Publier 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filament mixte - publié dans son ensemble lorsque « Activer » est coché ci-dessus" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publier ce filament mixte, puis activer + publier entièrement ses filaments composants" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publier cet emplacement de filament dans le fichier 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Publication complète" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Intégrer l'ensemble du filament de cet emplacement dans le fichier 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrer les éléments non sélectionnés" + #, c-format, boost-format msgid "Save %s as" msgstr "Enregistrer %s sous" @@ -9539,6 +9722,10 @@ msgstr "Copie dans ce préréglage toutes les valeurs héritées du préréglage msgid "Detach from parent" msgstr "Détacher du parent" +# AI Translated +msgid "Save without parent" +msgstr "Enregistrer sans parent" + # AI Translated msgid "Unique preset" msgstr "Préréglage unique" @@ -10240,9 +10427,17 @@ msgstr "Une tour d'amorçage est requise pour la détection d'agglomération. Il msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "L'activation simultanée de la hauteur Z précise et de la tour d'amorçage peut provoquer des erreurs de tranchage. Voulez-vous quand même activer la hauteur Z précise ?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Le timelapse fluide nécessite une tour d’amorçage à chaque couche, ce qui est incompatible avec « Pas de couches éparses ». « Pas de couches éparses » a été désactivé." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Une tour d’amorçage est requise pour le mode timelapse fluide. Le modèle peut présenter des défauts sans tour d’amorçage. Voulez-vous activer la tour d’amorçage ?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "« Pas de couches éparses » est incompatible avec le timelapse fluide, qui nécessite une tour d’amorçage à chaque couche. Le timelapse est repassé en mode traditionnel." + msgid "Still print by object?" msgstr "Vous imprimez toujours par objet ?" @@ -10611,9 +10806,6 @@ msgstr "Profils de traitement compatibles" msgid "Printable space" msgstr "Espace imprimable" -msgid "Printer Agent" -msgstr "Agent d'imprimante" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Sélectionner l'implémentation de l'agent réseau pour la communication avec l'imprimante. Les agents disponibles sont enregistrés au démarrage." @@ -10707,7 +10899,7 @@ msgid "Acceleration limitation" msgstr "Limitation d'accélération" msgid "Jerk limitation" -msgstr "Limitation des secousses" +msgstr "Limitation du jerk" msgid "Single extruder multi-material setup" msgstr "Configuration multi-matériaux pour extrudeur unique" @@ -10854,11 +11046,11 @@ msgstr "%s : %s" msgid "No modifications need to be copied." msgstr "Aucune modification à copier." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copier les paramètres" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifier les paramètres de %s" #, c-format, boost-format @@ -11012,12 +11204,6 @@ msgstr "Nombre d'extrudeurs" msgid "Capabilities" msgstr "Fonctionnalités" -msgid "Left: " -msgstr "Gauche : " - -msgid "Right: " -msgstr "Droite : " - msgid "Show all presets (including incompatible)" msgstr "Afficher tous les préréglages (y compris incompatibles)" @@ -11369,27 +11555,6 @@ msgstr "Volumes de purge pour le changement de filament" msgid "Please choose the filament colour" msgstr "Veuillez choisir la couleur du filament" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "L’aperçu en direct natif sous Wayland nécessite le récepteur vidéo GStreamer GTK. Veuillez installer le plugin gtksink pour GStreamer, puis redémarrer OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Échec de l’initialisation du récepteur vidéo GStreamer natif sous Wayland. Veuillez vérifier l’installation de votre plugin GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player est nécessaire pour cette tâche ! Voulez-vous activer ‘Windows Media Player’ pour votre système d’exploitation ?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource n’a pas été correctement enregistré pour la lecture de médias ! Appuyez sur Oui pour le réenregistrer. Vous recevrez deux fois la demande de permission" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Composant BambuSource manquant pour la lecture multimédia ! Veuillez réinstaller OrcaSlicer ou demander de l'aide à la communauté." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Si vous utilisez une BambuSource provenant d’une autre installation, la lecture de la vidéo peut ne pas fonctionner correctement ! Appuyez sur Oui pour résoudre le problème." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Il manque à votre système les codecs H.264 pour GStreamer, qui sont nécessaires pour lire la vidéo. (Essayez d’installer les paquets gstreamer1.0-plugins-bad ou gstreamer1.0-libav, puis redémarrez Orca Slicer)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "L’agent cloud n’est pas disponible. Veuillez redémarrer OrcaSlicer et réessayer." @@ -11872,15 +12037,22 @@ msgstr "Réparation annulée" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Échec de la copie du fichier %1% vers %2% : %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Téléchargement des nouveaux profils de fabricant : " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Paquet de configuration : %1% mis à jour en %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Échec du téléchargement des profils de fabricant : " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Besoin de vérifier les modifications non enregistrées avant les mises à jour de configuration." -msgid "Configuration package: " -msgstr "Paquet de configuration : " - -msgid " updated to " -msgstr " mis à jour en " - msgid "Open G-code file:" msgstr "Ouvrir un fichier G-code :" @@ -11940,11 +12112,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "La mise en forme du signal n’est prise en charge que par Klipper, RepRapFirmware et Marlin 2" -msgid "Grouping error: " -msgstr "Erreur de regroupement : " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Erreur de regroupement : %1% ne peut pas être placé dans la buse gauche" -msgid " can not be placed in the " -msgstr " ne peut pas être placé dans le/la " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Erreur de regroupement : %1% ne peut pas être placé dans la buse droite" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12058,6 +12234,10 @@ msgstr "%1% est trop proche des autres, cela pourrait provoquer des collisions." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% est trop grand, cela pourrait provoquer des collisions." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "La position relative du modèle et de la tour d’amorçage ne répond pas aux exigences de la fonction « Pas de couches éparses ». Veuillez ajuster leurs positions relatives, réduire la hauteur du modèle ou désactiver « Pas de couches éparses »." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " est trop proche d'une zone d'exclusion, il peut y avoir des collisions lors de l'impression." @@ -12092,6 +12272,10 @@ msgstr "Si vous souhaitez tout de même imprimer, vous pouvez activer l’option msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Un filament mixte avec dégradé est utilisé, mais « Sous-couche de couleur mixte » est désactivé. Le dégradé ne sera pas imprimé." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Le mode fluide du timelapse n'est pas pris en charge lorsque le mode d'impression « par objet » est activé." @@ -12128,6 +12312,10 @@ msgstr "Vous devez réduire la taille de votre modèle ou modifier les paramètr msgid "Variable layer height is not supported with Organic supports." msgstr "La hauteur de couche variable n’est pas prise en charge avec les supports organiques." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Le filament de la tour d’essuyage ne peut pas être un filament mixte." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Différents diamètres de buses et de filaments peuvent ne pas fonctionner correctement lorsque la tour d’amorçage est activée. Il s’agit d’un projet très expérimental, il convient donc de procéder avec prudence." @@ -12226,7 +12414,7 @@ msgid "Plate %d: %s does not support filament %s" msgstr "Plaque %d : %s ne prend pas en charge le filament %s" msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" -msgstr "Un réglage trop bas de la vitesse de saccade peut entraîner des artefacts sur les surfaces courbes" +msgstr "Un réglage trop bas de la vitesse de jerk peut entraîner des artefacts sur les surfaces courbes" msgid "" "The jerk setting exceeds the printer's maximum jerk (machine_max_jerk_x/machine_max_jerk_y).\n" @@ -12234,7 +12422,7 @@ msgid "" "You can adjust the maximum jerk setting in your printer's configuration to get higher speeds." msgstr "" "Le réglage du jerk dépasse le jerk maximum de l’imprimante (machine_max_jerk_x/machine_max_jerk_y).\n" -"Orca plafonne automatiquement la vitesse de l’impulsion pour s’assurer qu’elle ne dépasse pas les capacités de l’imprimante.\n" +"Orca plafonne automatiquement la vitesse du jerk pour s’assurer qu’elle ne dépasse pas les capacités de l’imprimante.\n" "Vous pouvez ajuster le réglage du jerk maximum dans la configuration de votre imprimante pour obtenir des vitesses plus élevées." msgid "" @@ -12393,6 +12581,9 @@ msgstr "Utiliser le 3MF au lieu du G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Activez ceci si l’imprimante accepte un fichier 3MF comme tâche d’impression. Lorsque cette option est activée, Orca Slicer envoie le fichier découpé au format .gcode.3mf au lieu d’un simple fichier .gcode." +msgid "Printer Agent" +msgstr "Agent d'imprimante" + msgid "Select the network agent implementation for printer communication." msgstr "Sélectionner l'implémentation de l'agent réseau pour la communication avec l'imprimante." @@ -12475,7 +12666,7 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Autres couches" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Température du plateau pour les couches sauf la première. Une valeur de 0 signifie que le filament ne prend pas en charge l'impression sur la Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13438,6 +13629,10 @@ msgstr "Rectiligne Aligné" msgid "Concentric" msgstr "Concentrique" +# AI Translated +msgid "Spiral Inset" +msgstr "Spirale décalée" + msgid "Hilbert Curve" msgstr "Courbe de Hilbert" @@ -13529,13 +13724,13 @@ msgstr "Ordre de remplissage de la surface supérieure" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direction dans laquelle les surfaces supérieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n" -"Vers l'extérieur commence au centre de la surface, de sorte que tout excès de matière est poussé vers le bord où il est le moins visible. Vers l'intérieur commence au bord et se termine par les courbes serrées au centre.\n" -"Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens." +"Sens dans lequel les surfaces supérieures sont remplies avec un motif partant du centre (Concentrique, Spirale décalée, Spirale d'Archimède, Spirale Octagramme).\n" +"Vers l'extérieur commence au centre de la surface, ce qui repousse l'excédent de matière vers le bord, là où il est le moins visible. Vers l'intérieur commence au bord et se termine par les courbes serrées du centre.\n" +"Défaut utilise l'ordre du chemin le plus court, qui peut aller dans un sens comme dans l'autre." # AI Translated msgid "Bottom surface fill order" @@ -13543,13 +13738,13 @@ msgstr "Ordre de remplissage de la surface inférieure" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direction dans laquelle les surfaces inférieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n" -"Vers l'intérieur commence chaque surface par les courbes extérieures plus larges, ce qui améliore l'adhérence de la première couche sur les plateaux où les courbes serrées au centre peuvent ne pas adhérer. Vers l'extérieur commence au centre, poussant tout excès de matière vers le bord.\n" -"Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens." +"Sens dans lequel les surfaces inférieures sont remplies avec un motif partant du centre (Concentrique, Spirale décalée, Spirale d'Archimède, Spirale Octagramme).\n" +"Vers l'intérieur commence chaque surface par les courbes extérieures les plus larges, ce qui améliore l'adhérence de la couche initiale sur les plateaux où les courbes serrées du centre risquent de ne pas accrocher. Vers l'extérieur commence au centre et repousse l'excédent de matière vers le bord.\n" +"Défaut utilise l'ordre du chemin le plus court, qui peut aller dans un sens comme dans l'autre." msgid "Internal solid infill pattern" msgstr "Motif de remplissage plein interne" @@ -13648,6 +13843,14 @@ msgstr "Sens inverse des aiguilles d’une montre" msgid "Clockwise" msgstr "Dans le sens des aiguilles d’une montre" +# AI Translated +msgid "Distance to rod" +msgstr "Distance à la tige" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Distance horizontale entre la pointe de la buse et le bord le plus éloigné de la tige. Utilisée pour éviter les collisions lors de l'impression par objet." + msgid "Height to rod" msgstr "Hauteur jusqu’à la tige" @@ -13831,6 +14034,8 @@ msgstr "Temps de couche" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Le ventilateur de refroidissement des pièces sera activé pour les couches dont le temps estimé est inférieur à cette valeur. La vitesse du ventilateur est interpolée entre les vitesses minimale et maximale du ventilateur en fonction du temps d'impression de la couche" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14137,6 +14342,62 @@ msgstr "Supports" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Le matériau de support est généralement utilisé pour imprimer le support et les interfaces de support" +# AI Translated +msgid "Is mixed filament" +msgstr "Est un filament mixte" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indique si cet emplacement de filament est un filament mixte composé de plusieurs filaments physiques" + +# AI Translated +msgid "Mixed filament components" +msgstr "Composants du filament mixte" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Indices (à partir de 1) des filaments composants, séparés par des virgules ; par ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proportions des sous-couches du filament mixte" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valeurs de proportion séparées par des virgules dont la somme vaut 1.0 ; par ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Dégradé du filament mixte" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Active le mode dégradé dans la direction Z pour les sous-couches du filament mixte. Lorsqu’il est activé, les proportions des sous-couches varient linéairement d’une couche à l’autre." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Plage du dégradé du filament mixte" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proportions de début et de fin du premier composant en mode dégradé. Paire séparée par une virgule ; par ex. \"0.10,0.90\" signifie de 10% à 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Courbe du dégradé du filament mixte" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Courbe personnalisée facultative, de style Photoshop, associant la progression en Z à la proportion du premier composant. Encodée sous forme de points de contrôle séparés par des barres verticales, au format \"x,y\" (ancien) ou \"x,y,m_in,m_out\" lorsqu’une tangente doit être forcée (une valeur vide ou \"nan\" utilise la valeur PCHIP par défaut). x est compris dans [0,1] ; y est limité à la plage de proportions configurée ; par ex. \"0,0.15|0.5,0.50|1,0.85\". Si le champ est vide, le gradient_range linéaire est utilisé à la place." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Dégradé par pièce du filament mixte" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Lorsque le mode dégradé est activé, applique le dégradé à chaque pièce d’un assemblage indépendamment au lieu de traiter l’assemblage entier comme une seule plage Z." + msgid "Filament printable" msgstr "Filament imprimable" @@ -15382,6 +15643,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Force de sortie maximale autorisée sur l'axe Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15392,6 +15654,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Charge massique du plateau de la machine sur l'axe Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15703,7 +15966,7 @@ msgstr "Les points de départ et d'arrivée qui se situent entre la zone de coup msgid "Reduce infill retraction" msgstr "Réduire la rétraction du remplissage" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Ne pas effectuer de rétraction lors de déplacement en zone de remplissage car même si l’extrudeur suinte, les coulures ne seraient pas visibles. Cela peut réduire les rétractions pour les modèles complexes et économiser du temps d’impression, mais ralentit la découpe et la génération du G-code" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15740,6 +16003,20 @@ msgstr "Détecter les parois en surplomb" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Détectez le pourcentage de surplomb par rapport à la largeur de la ligne et utilisez une vitesse différente pour imprimer. Pour un surplomb de 100%% la vitesse du pont est utilisée." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Imprimer les parois sans support en dernier" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Les boucles de paroi entièrement en l'air ne sont imprimées qu'une fois que quelque chose peut les soutenir :\n" +"elles sont extrudées après les autres parois de leur îlot, la plus intérieure d'abord, quel que soit l'ordre des parois.\n" +"Une boucle que seuls les ponts de cette couche peuvent ancrer attend que ces ponts soient imprimés, tandis qu'une boucle longeant une paroi soutenue garde sa place avant le remplissage, qui en a besoin comme ancrage." + msgid "Outer walls" msgstr "Parois extérieures" @@ -15873,7 +16150,7 @@ msgstr "Quantité de rétraction après essuyage" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La longueur de la rétraction rapide après l'essuyage, relative à la longueur de rétraction.\n" @@ -15920,7 +16197,7 @@ msgstr "Lorsque la rétraction est déclenchée avant un changement d’outil, l msgid "Z-hop height" msgstr "Hauteur du saut en Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Chaque fois que la rétraction est effectuée, la buse est légèrement soulevée pour créer un espace entre la buse et l'impression. Il empêche la buse de toucher l'impression lors du déplacement. L'utilisation d'une ligne en spirale pour soulever z peut empêcher l'enfilage" msgid "Z-hop lower boundary" @@ -16176,6 +16453,39 @@ msgstr "Essuyer sur les boucles" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Pour minimiser la visibilité de la couture dans une extrusion en boucle fermée, un petit mouvement vers l’intérieur est exécuté avant que la buse ne quitte la boucle." +# AI Translated +msgid "Wipe inward" +msgstr "Essuyage vers l'intérieur" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"S'applique uniquement aux parois extérieures, contours des trous compris. Déplace la buse chaude vers les parois intérieures déjà imprimées pendant l'essuyage, afin de limiter le réchauffement du plastique fraîchement déposé et les marques de couture.\n" +"\n" +"Particulièrement utile pour des hauteurs de couche inférieures à 0,1 mm, où les marques d'essuyage sont plus visibles.\n" +"\n" +"Utilise l'essuyage normal si aucune paroi intérieure adjacente n'est déjà imprimée (zones à paroi unique ou ordre des parois Extérieur/Intérieur), ou si aucun chemin vers l'intérieur soutenu n'est trouvé, par exemple dans les angles serrés ou aux interruptions de couture." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Distance d'essuyage vers l'intérieur" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Distance dont le chemin d'essuyage est décalé par rapport au périmètre extérieur, exprimée en millimètres ou en pourcentage de la largeur d'extrusion réelle de la paroi extérieure.\n" +"\n" +"Par exemple, 50% décale le chemin de la moitié de la largeur de la paroi extérieure. Le décalage effectif est limité à la fois par la largeur réelle de la paroi extérieure et par l'espace disponible jusqu'à la paroi adjacente : les valeurs supérieures à 100% ou une distance absolue équivalente n'ont donc aucun effet supplémentaire. Mettez 0 pour désactiver le décalage." + msgid "Wipe before external loop" msgstr "Essuyer avant la boucle externe" @@ -16437,8 +16747,9 @@ msgstr "Prend le nouvel outil sans attendre qu’il atteigne la température d msgid "No sparse layers (beta)" msgstr "Pas de couches éparses (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Si cette option est activée, la tour d’essuyage ne sera pas imprimée sur les couches sans changement d’outil. Sur les couches avec changement d’outil, l’extrudeur se déplacera vers le bas pour imprimer la tour d’essuyage. L’utilisateur est responsable de s’assurer qu’il n’y a pas de collision avec l’impression." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Si cette option est activée, la tour d'essuyage n'est pas imprimée sur les couches sans changement d'outil. Sur les couches comportant un changement d'outil, l'extrudeur descend pour imprimer la tour d'essuyage : la tour se retrouve donc sous le modèle et la tête d'outil doit descendre jusqu'à elle. Les dispositions où cela entrerait en collision avec un objet déjà imprimé sont rejetées. Sans effet avec le timelapse fluide ou la détection d'agglomération de la buse, qui nécessitent une tour à chaque couche." msgid "Prime all printing extruders" msgstr "Amorcer tous les extrudeurs d’impression" @@ -16464,6 +16775,34 @@ msgstr "" msgid "Cyclic" msgstr "Cyclique" +# AI Translated +msgid "Cyclic order" +msgstr "Ordre cyclique" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Séquence de filaments personnalisée utilisée par l'ordre cyclique des changements d'outil, sous forme de numéros de filament séparés par des virgules (par ex. « 3,2,1,4 »).\n" +"Chaque couche imprime ses filaments en suivant cette séquence ; les filaments non listés sont imprimés en dernier, par ordre croissant.\n" +"Laissez vide pour parcourir les filaments par ordre croissant." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Appliquer l'ordre cyclique à la couche initiale" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Applique également l'ordre cyclique des changements d'outil à la couche initiale.\n" +"Cette option est désactivée par défaut, car la couche initiale est au contraire ordonnée pour la meilleure adhérence au plateau : les filaments qui impriment de petits détails fragiles de la couche initiale sont imprimés en dernier, si bien que les changements d'outil et déplacements suivants risquent moins de décoller ces parties faiblement ancrées. Cet ordre de la couche initiale respecte aussi une séquence de filaments personnalisée pour la couche initiale lorsqu'elle est définie. L'avantage de l'ordre cyclique (les changements d'outil supplémentaires laissent à chaque couche plus de temps pour refroidir) ne s'applique pas à la couche initiale, imprimée lentement et à chaud pour l'adhérence.\n" +"N'activez cette option que si vous avez besoin exactement de la même séquence d'outils sur chaque couche, y compris la première, au prix de cette optimisation de l'adhérence." + msgid "Slice gap closing radius" msgstr "Rayon de fermeture de l’écart des tranches" @@ -16473,9 +16812,6 @@ msgstr "Les fissures plus petites que 2x le rayon de fermeture de l’espace son msgid "Slicing Mode" msgstr "Mode de découpe" -msgid "Other" -msgstr "Autre" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez « Fermer les trous » pour fermer tous les trous du modèle." @@ -16965,6 +17301,14 @@ msgstr "" "\n" "Le réglage d’une valeur dans le paramètre de quantité de rétraction avant essuyage ci-dessous permet d’effectuer toute rétraction excédentaire avant l’essuyage, sinon elle sera effectuée après l’essuyage." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sous-couche de couleur mixte" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Active la division en sous-couches de couleur mixte. Lorsqu’elle est activée, les couches contenant des filaments de couleur mixte sont divisées en sous-couches afin d’obtenir des effets de mélange de couleurs." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La tour de purge peut être utilisée pour nettoyer les résidus sur la buse et stabiliser la pression du caisson à l'intérieur de la buse afin d'éviter les défauts d'apparence lors de l'impression d'objets." @@ -17454,6 +17798,14 @@ msgstr "Pas de vérification" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Ne pas effectuer de contrôle de validité, tel que le contrôle des conflits de parcours de G-code." +# AI Translated +msgid "Strict mode" +msgstr "Mode strict" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Termine avec un code de retour non nul lorsque le découpage émet un avertissement non critique qui ne serait autrement que consigné, par exemple un modèle nécessitant des supports alors que les supports sont désactivés. À utiliser en intégration continue ou dans des chaînes de traitement automatisées qui ne doivent jamais livrer un découpage subtilement défectueux. Chacun de ces avertissements est également listé avec une classe stable dans le tableau `warnings` de result.json, écrit uniquement sous Linux. Ne peut pas être combiné avec --no-check, qui saute la vérification des supports." + msgid "Normative check" msgstr "Contrôle normatif" @@ -17466,11 +17818,28 @@ msgstr "Information du Modèle de Sortie" msgid "This outputs the model’s information." msgstr "Sortie des informations du modèle." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Inspecter le maillage (JSON sur stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Affiche sur stdout un résumé JSON de chaque objet chargé, puis quitte : ses boîtes englobantes et les faces de son enveloppe convexe sur lesquelles il peut reposer, avec leurs normales, aires et centres. Ce sont les faces parmi lesquelles choisissent les options --ground-*. Alternative exploitable par une machine à --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Inspecter la peinture (JSON sur stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Affiche un résumé JSON structuré de chaque couche peinte (supports, couture, couleur MMU, surface irrégulière) déjà enregistrée sur le modèle chargé — nombre de facettes, aire de surface et boîte englobante locale au maillage pour chaque état — puis quitte. Alternative exploitable par une machine à l'ouverture des gizmos de peinture dans l'interface." + msgid "Export Settings" msgstr "Paramètres d'exportation" -msgid "This exports settings to a file." -msgstr "Exporter les paramètres vers un fichier." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Exporte les réglages vers un fichier. Utilisez - pour les écrire sur stdout." msgid "Send progress to pipe" msgstr "Envoyer la progression à la queue" @@ -17526,6 +17895,30 @@ msgstr "Rotation autour de l’axe Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Angle de rotation autour de l’axe Y en degrés." +# AI Translated +msgid "Ground largest face" +msgstr "Poser sur la plus grande face" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Pose chaque objet sur la plus grande face de son enveloppe convexe et le fait tomber sur le plateau. Parmi des faces de même taille, celle déjà tournée vers le bas est conservée. Les objets dépourvus d'une face assez grande pour reposer dessus sont laissés tels quels. Les transformations s'appliquent dans l'ordre de la ligne de commande : les rotations indiquées avant cette option sont donc respectées. --orient 1 s'exécute après toutes les transformations et remplace l'orientation." + +# AI Translated +msgid "Ground face by normal" +msgstr "Poser sur la face selon la normale" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Pose chaque objet sur la face de son enveloppe convexe dont la normale extérieure est la plus proche de la direction NX,NY,NZ et le fait tomber sur le plateau. La direction est exprimée dans les coordonnées de l'objet, qui incluent les rotations indiquées avant cette option et correspondent aux axes du plateau, sauf si le fichier d'entrée fait pivoter l'objet. Par exemple, 1,0,0 pose l'objet sur sa face +X. --orient 1 s'exécute après toutes les transformations et remplace l'orientation." + +# AI Translated +msgid "Ground face at point" +msgstr "Poser sur la face en un point" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Pose chaque objet sur la face de son enveloppe convexe qui contient le point X,Y,Z et le fait tomber sur le plateau. Le point est exprimé dans les coordonnées de l'objet, qui incluent les rotations indiquées avant cette option ; --inspect-mesh donne les centres des faces dans ces coordonnées. Les objets dépourvus d'une telle face sont laissés tels quels, et l'exécution échoue si aucun objet n'en possède. --orient 1 s'exécute après toutes les transformations et remplace l'orientation." + msgid "Scale the model by a float factor." msgstr "Mettre à l'échelle le modèle par un facteur flottant" @@ -18031,6 +18424,10 @@ msgstr "Le maillage d'un fichier modèle a échoué ou la forme n'est pas valide msgid "The supplied file couldn't be read because it's empty." msgstr "Le fichier fourni n'a pas pu être lu car il est vide" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Le format du fichier est incompatible et ne peut pas être analysé." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Format de fichier inconnu : le fichier d'entrée doit porter l'extension .stl, .obj ou .amf (.xml)." @@ -19492,19 +19889,19 @@ msgstr "N’afficher que les noms d’imprimantes avec les modifications apport msgid "Only display the filament names with changes to filament presets." msgstr "N’affichez que les noms des filaments lorsque vous modifiez les préréglages des filaments." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Seuls les noms d’imprimantes avec des préréglages d’imprimante utilisateur seront affichés, et chaque préréglage que vous choisissez sera exporté sous forme de fichier zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Seuls les noms de filaments contenant des préréglages de filaments utilisateur seront affichés, \n" "et tous les préréglages de filament d’utilisateur dans chaque nom de filament que vous sélectionnez seront exportés sous forme de fichier zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Seuls les noms d’imprimantes dont les préréglages de traitement ont été modifiés seront affichés, \n" "et tous les préréglages de processus de l’utilisateur dans chaque nom d’imprimante que vous sélectionnez seront exportés sous forme de fichier zip." @@ -19733,7 +20130,7 @@ msgstr "Copier les informations système dans le presse-papiers" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Nous avons besoin d’informations pour diagnostiquer l’origine du problème. Consultez la page wiki pour un guide détaillé." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Le bouton Compresser rassemble le fichier de projet et les journaux de la session actuelle dans un fichier ZIP." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19775,7 +20172,7 @@ msgstr "Niveau de journalisation" msgid "Stored logs" msgstr "Journaux stockés" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Compresse tous les journaux stockés dans un fichier ZIP." msgid "Profiles" @@ -19842,7 +20239,7 @@ msgstr "Type d’imprimante introuvable, veuillez le sélectionner manuellement. msgid "Authorizing..." msgstr "Autorisation en cours…" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Erreur : impossible d’obtenir le jeton d’API pour l’autorisation" msgid "Could not parse server response." @@ -20290,8 +20687,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Activer l'attribution intelligente de filament : attribuer un filament à plusieurs buses pour maximiser les économies" # AI Translated -msgid "Fila Saving" -msgstr "Économie de filament" +msgid "File Saving" +msgstr "Enregistrement du fichier" msgid "Don't remind me again" msgstr "Ne plus me rappeler" @@ -20577,6 +20974,18 @@ msgstr "Cette action ne peut pas être annulée. Continuer ?" msgid "Skipping objects." msgstr "Ignorer des objets." +# AI Translated +msgid "Material Ratio" +msgstr "Proportion de matériau" + +# AI Translated +msgid "Model Height" +msgstr "Hauteur du modèle" + +# AI Translated +msgid "Ratio" +msgstr "Proportion" + msgid "Select Filament" msgstr "Sélectionner le filament" @@ -20656,6 +21065,9 @@ msgstr "Redémarrer maintenant" msgid "NO RAMMING AT ALL" msgstr "AUCUN BOURRAGE" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Vitesse volumétrique" @@ -20828,12 +21240,14 @@ msgid "Drying-Dehumidifying" msgstr "Séchage - Déshumidification" # AI Translated -msgid " maximum drying temperature is " -msgstr " la température de séchage maximale est de " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "La température de séchage maximale de %s est de %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " la température de séchage minimale est de " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "La température de séchage minimale de %s est de %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21278,6 +21692,128 @@ msgstr "" "Éviter la déformation\n" "Saviez-vous que lors de l’impression de matériaux susceptibles de se déformer, tels que l’ABS, une augmentation appropriée de la température du plateau chauffant peut réduire la probabilité de déformation?" +#~ msgid "Other" +#~ msgstr "Autre" + +#~ msgid "Left: " +#~ msgstr "Gauche : " + +#~ msgid "Right: " +#~ msgstr "Droite : " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "La température maximale ne peut pas dépasser " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "La température minimale ne doit pas être inférieure à " + +#~ msgid "up to" +#~ msgstr "jusqu’à" + +#~ msgid "above" +#~ msgstr "plus que" + +#~ msgid "from" +#~ msgstr "de" + +#~ msgid "Configuration package: " +#~ msgstr "Paquet de configuration : " + +#~ msgid " updated to " +#~ msgstr " mis à jour en " + +#~ msgid "Grouping error: " +#~ msgstr "Erreur de regroupement : " + +#~ msgid " can not be placed in the " +#~ msgstr " ne peut pas être placé dans le/la " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " la température de séchage maximale est de " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " la température de séchage minimale est de " + +# AI Translated +#~ msgid "needs" +#~ msgstr "nécessite" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "non activé" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "matériau non publié" + +#~ msgid "Select the language" +#~ msgstr "Sélectionner la langue" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Sélectionner un plugin" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direction dans laquelle les surfaces supérieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n" +#~ "Vers l'extérieur commence au centre de la surface, de sorte que tout excès de matière est poussé vers le bord où il est le moins visible. Vers l'intérieur commence au bord et se termine par les courbes serrées au centre.\n" +#~ "Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direction dans laquelle les surfaces inférieures sont remplies lors de l'utilisation d'un motif centré (Concentrique, Cordes d'Archimède, Spirale d'octogramme).\n" +#~ "Vers l'intérieur commence chaque surface par les courbes extérieures plus larges, ce qui améliore l'adhérence de la première couche sur les plateaux où les courbes serrées au centre peuvent ne pas adhérer. Vers l'extérieur commence au centre, poussant tout excès de matière vers le bord.\n" +#~ "Par défaut utilise un ordonnancement par chemin le plus court, qui peut aller dans les deux sens." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Si cette option est activée, la tour d’essuyage ne sera pas imprimée sur les couches sans changement d’outil. Sur les couches avec changement d’outil, l’extrudeur se déplacera vers le bas pour imprimer la tour d’essuyage. L’utilisateur est responsable de s’assurer qu’il n’y a pas de collision avec l’impression." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exporter les paramètres vers un fichier." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "L’aperçu en direct natif sous Wayland nécessite le récepteur vidéo GStreamer GTK. Veuillez installer le plugin gtksink pour GStreamer, puis redémarrer OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Échec de l’initialisation du récepteur vidéo GStreamer natif sous Wayland. Veuillez vérifier l’installation de votre plugin GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player est nécessaire pour cette tâche ! Voulez-vous activer ‘Windows Media Player’ pour votre système d’exploitation ?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource n’a pas été correctement enregistré pour la lecture de médias ! Appuyez sur Oui pour le réenregistrer. Vous recevrez deux fois la demande de permission" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Composant BambuSource manquant pour la lecture multimédia ! Veuillez réinstaller OrcaSlicer ou demander de l'aide à la communauté." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Si vous utilisez une BambuSource provenant d’une autre installation, la lecture de la vidéo peut ne pas fonctionner correctement ! Appuyez sur Oui pour résoudre le problème." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Il manque à votre système les codecs H.264 pour GStreamer, qui sont nécessaires pour lire la vidéo. (Essayez d’installer les paquets gstreamer1.0-plugins-bad ou gstreamer1.0-libav, puis redémarrez Orca Slicer)." + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Économie de filament" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -22161,8 +22697,8 @@ msgstr "" #~ msgid "The 3mf has the following customized filament or printer presets:" #~ msgstr "Le 3mf dispose de filaments personnalisés ou de préréglages d'imprimante :" -#~ msgid "Name of components inside step file is not UTF8 format!" -#~ msgstr "Le nom des composants à l'intérieur du fichier .step n'est pas au format UTF8 !" +#~ msgid "Name of components inside step file is not UTF-8 format!" +#~ msgstr "Le nom des composants à l'intérieur du fichier .step n'est pas au format UTF-8 !" #~ msgid "Should printer/filament/process settings be loaded when opening a .3mf?" #~ msgstr "Les paramètres de l’imprimante/du filament/du processus doivent-ils être chargés lors de l’ouverture d’un fichier .3mf ?" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 9f8a849884..bc65ceef4b 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2460,15 +2460,6 @@ msgstr "Frissítés érhető el. Nyisd meg a beállításcsomag párbeszédablak msgid "%s has been removed." msgstr "%s eltávolítva." -msgid "Switching application language" -msgstr "Alkalmazás nyelvének váltása" - -msgid "Select the language" -msgstr "Válaszd ki a nyelvet" - -msgid "Language" -msgstr "Nyelv" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2948,6 +2939,10 @@ msgstr "Szerkesztés" msgid "Merge with" msgstr "Egyesítés ezzel" +# AI Translated +msgid "Decompose Color" +msgstr "Szín szétbontása" + msgid "Delete this filament" msgstr "Filament törlése" @@ -3247,6 +3242,10 @@ msgstr "Összeállítás" msgid "Merge parts to an object" msgstr "Tárgyak egyesítése egy objektummá" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "A változó rétegmagasság és a kevert színű alréteg együttes használata ronthatja a színkeverés minőségét." + # AI Translated msgid "Add layers" msgstr "Rétegek hozzáadása" @@ -3704,11 +3703,15 @@ msgstr "Az aktuális filament visszahúzása a Filament Track Switch-nél" msgid "Switch track at Filament Track Switch" msgstr "Sáv váltása a Filament Track Switch-nél" -msgid "The maximum temperature cannot exceed " -msgstr "A maximális hőmérséklet nem haladhatja meg ezt: " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "A maximális hőmérséklet nem haladhatja meg ezt: %d" -msgid "The minmum temperature should not be less than " -msgstr "A minimális hőmérséklet nem lehet kevesebb ennél: " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "A minimális hőmérséklet nem lehet kevesebb ennél: %d" # AI Translated msgid "Type to filter..." @@ -4595,6 +4598,15 @@ msgstr "" "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Lehet, hogy az SD-kártya írásvédett?\n" "Hibaüzenet: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Az ideiglenes G-kód másolása a kimeneti G-kódba nem sikerült.\n" +"Hibaüzenet: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Nem sikerült az ideiglenes G-kódot a kimeneti G-kódba másolni. Probléma lehet a céleszközzel. Kérlek, exportáld újra, vagy használj másik eszközt. A sérült kimeneti G-kód helye: %1%.tmp." @@ -4803,7 +4815,7 @@ msgstr "" "\n" "Az érték 0-ra áll vissza." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "A váltakozó extra fal nem működik jól, ha a függőleges héjvastagság biztosítása \"Mind\" értékre van állítva." msgid "" @@ -4849,7 +4861,7 @@ msgstr "" "NEM - Független támasz rétegmagasság megtartása" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "A seam_slope_start_height értékének kisebbnek kell lennie, mint a layer_height.\n" @@ -4857,7 +4869,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "A rögzítési mélységnek kisebbnek kell lennie, mint a felületi réteg mélysége.\n" @@ -4897,6 +4909,10 @@ msgstr "" "Igen - Módosítsd ezeket a beállításokat, és automatikusan kapcsold be a spirál módot\n" "Nem - Most ne kapcsold be a spirál módot" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Nyomtatás" @@ -5327,14 +5343,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "%s érték tartományon kívül van. Az érvényes tartomány: %d - %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%% vagy %s %s?\n" -"IGEN %s%%, \n" -"NEM %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "%s%% vagy %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5356,30 +5369,22 @@ msgstr "Érvénytelen minta. Használj N, N#K formátumot, vagy vesszővel elvá msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Érvénytelen formátum. Elvárt vektor formátum: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Rendszerügynökök" -# AI Translated -msgid "No plugin selected" -msgstr "Nincs kiválasztott bővítmény" - # AI Translated msgid "Add plugin" msgstr "Bővítmény hozzáadása" -# AI Translated -msgid "Select plugin" -msgstr "Bővítmény kiválasztása" - # AI Translated msgid "Remove plugin" msgstr "Bővítmény eltávolítása" +# AI Translated +msgid "No plugin selected" +msgstr "Nincs kiválasztott bővítmény" + # AI Translated msgid "Configure" msgstr "Konfigurálás" @@ -5635,14 +5640,20 @@ msgstr "Beállítás optimálisra" msgid "Regroup filament" msgstr "Filamentek újracsoportosítása" -msgid "up to" -msgstr "legfeljebb" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "legfeljebb %1% mm" -msgid "above" -msgstr "felett" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "%1% mm felett" -msgid "from" -msgstr "ettől" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "%1% mm-től %2% mm-ig" msgid "Usage" msgstr "Használat" @@ -6003,7 +6014,7 @@ msgstr "Térfogat:" msgid "Size:" msgstr "Méret:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "G-kód útvonalütközés található a(z) %d. rétegen, Z = %.2lfmm. Helyezd távolabb egymástól az ütköző objektumokat (%s <-> %s)." @@ -6317,16 +6328,24 @@ msgstr "Projekt mentése másként" msgid "Save current project as" msgstr "Jelenlegi projekt mentése másként" +# AI Translated +msgid "Publish 3MF" +msgstr "3MF közzététele" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "3MF fájl exportálása a kiválasztott beállítások beágyazásával" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importálás 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Modell betöltése" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip archívum importálása" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Zip archívumban található modellek betöltése" msgid "Import Configs" @@ -7590,6 +7609,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Alsó" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Ez a beállítás nem ad meg bővítményképesség-típust." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Ez a beállítás ismeretlen bővítményképesség-típust ad meg: " + # AI Translated msgid "Plugin Selection" msgstr "Bővítmény kiválasztása" @@ -7847,6 +7874,10 @@ msgstr "Aktuális tálca testreszabása" msgid "The %s nozzle can not print %s." msgstr "A(z) %s fúvóka nem tudja nyomtatni ezt: %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "A kevert színű filament nyomtatása egyextruderes nyomtatón gyakori filamentcserét és öblítést igényel, ami jelentősen növelheti a hulladék mennyiségét, valamint a fúvóka vagy a hulladékcsúszda eltömődésének kockázatát." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "A(z) %1% és %2% keverése nyomtatás közben nem ajánlott.\n" @@ -7972,12 +8003,44 @@ msgstr "Filamentlista szinkronizálása az AMS-ből" msgid "Set filaments to use" msgstr "Használni kívánt filament beállítása" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Kevert filament hozzáadása" + +# AI Translated +msgid "Mixed Filament" +msgstr "Kevert filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Utolsó kevert filament eltávolítása" + +# AI Translated +msgid "Add mixed filament" +msgstr "Kevert filament hozzáadása" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "A kevert filament érvénytelen vagy nem egyező összetevőket tartalmaz. Szerkessze újra az érintett bejegyzéseket." + msgid "Search plate, object and part." msgstr "Tálca, objektum és tárgy keresése." msgid "Pellets" msgstr "Pelletek" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "A kevert filament hibás összetevő-hivatkozásokat tartalmaz" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Szerkesztés / Törlés / Egyesítés" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "A cél kevert filament ezt a fizikai filamentet használja összetevőként. Az egyesítés eltávolítja ezt a fizikai filamentet, és a kevert filament érvénytelenné válhat. Folytatja?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "A művelet befejezésekor a(z) %s projekt bezárul, majd új projekt jön létre." @@ -8115,7 +8178,15 @@ msgstr "Kérlek, győződj meg arról, hogy a beállításokban található G-k msgid "Customized Preset" msgstr "Egyedi beállítás" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Néhány közzétett beállítást nem sikerült alkalmazni:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Néhány filamenthely megváltozott:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "A STEP fájlon belüli komponens neve nem UTF-8 formátumban van!" # AI Translated @@ -8139,10 +8210,10 @@ msgstr "Az objektum térfogata nulla" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "A(z) %s fájlból származó objektum túl kicsi, lehet, hogy méterben vagy hüvelykben lett létrehozva.\n" -" Szeretnéd milliméterre méretezni?" +"Szeretnéd milliméterre méretezni?" msgid "Object too small" msgstr "Objektum túl kicsi" @@ -8160,6 +8231,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Több részből álló objektum észlelve" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Textúrák hozzárendelése a filamentekhez" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Textúraimportálási figyelmeztetés" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Betöltöd ezeket a fájlokat több részből álló egyetlen objektumként?\n" @@ -8371,6 +8450,22 @@ msgstr "" msgid "Sync now" msgstr "Szinkronizálás most" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "A textúra importálása sikertelen. Úgy tűnik, hogy a modell textúraadatokat tartalmaz, de az importálási folyamatot nem sikerült befejezni. A modell csak geometriaként lesz importálva." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Textúraszínek alkalmazása..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D nézet frissítése..." + +# AI Translated +msgid "Texture colors applied." +msgstr "A textúraszínek alkalmazva." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Megtarthatod az új projekt módosított beállításait, vagy elvetheted őket" @@ -8503,6 +8598,21 @@ msgstr "Szeletelt fájl mentése mint:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "A(z) %s fájlt elküldtük a nyomtató tárhelyére. A fájl a nyomtatón tekinthető meg." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MF fájl közzététele mint:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"A közzétett 3MF fájl exportálása nem sikerült.\n" +"Ellenőrizd, hogy a mappa elérhető-e online, illetve hogy más program nem tartja-e nyitva a fájlt." + +msgid "Publish" +msgstr "Közzététel" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "A fúvókatípus nincs beállítva. Állítsd be a fúvókát, majd próbáld újra." @@ -8715,9 +8825,6 @@ msgstr "Szeretnéd folytatni?" msgid "Language selection" msgstr "Nyelv kiválasztása" -msgid "Switching application language while some presets are modified." -msgstr "Alkalmazás nyelvének átváltása, miközben egyes beállítások módosultak." - msgid "Asia-Pacific" msgstr "Ázsia-Csendes-óceáni térség" @@ -8822,6 +8929,9 @@ msgstr "Jelenlegi példány útvonala: " msgid "General" msgstr "Általános" +msgid "Language" +msgstr "Nyelv" + msgid "Metric" msgstr "Metrikus" @@ -9266,9 +9376,6 @@ msgstr "A rétegcsúszka mozgatásakor a szeletelt előnézetben az aktuális r msgid "Dimmed layer brightness" msgstr "Elhalványított rétegek fényereje" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9633,6 +9740,10 @@ msgstr "Spirál (váza)" msgid "First layer filament sequence" msgstr "Kezdőréteg filament sorrendje" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "A filamentlista kevert filamenteket tartalmaz. Az egyéni filamentsorrend nem lép érvénybe." + # AI Translated msgid "By Layer" msgstr "Rétegenként" @@ -9664,9 +9775,6 @@ msgstr "Ugrás a modell közzététele weboldalra" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Megjegyzés: Az előkészítés több percig is eltarthat. Kérlek, várj." -msgid "Publish" -msgstr "Közzététel" - msgid "Publish was canceled" msgstr "A közzététel törlésre került" @@ -9682,6 +9790,81 @@ msgstr "Adatok feltöltése" msgid "Jump to webpage" msgstr "Ugrás a weboldalra" +# AI Translated +msgid "Material" +msgstr "Anyag" + +# AI Translated +msgid "Mixed filament" +msgstr "Kevert filament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Néhány kevert filament olyan filamentektől függ, amelyek nem lesznek közzétéve:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "%d. filament (kevert)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% a következőt igényli: %2%, amely nincs engedélyezve." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% a következőt igényli: %2%, amelynek az anyaga nem lesz közzétéve." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Kevert filament közzétételéhez engedélyezd az összes általa használt filamentet, és válaszd a Teljes közzétételt, vagy teljesítsd a Típus követelményét." + +# AI Translated +msgid "Publish anyway" +msgstr "Közzététel mindenképp" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MF közzététele..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Válaszd ki, mely beállítások kerüljenek közzétételre a 3MF fájlban" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF közzététele wiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF közzététele videós útmutató" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Kevert filament - egészében kerül közzétételre, ha fent az \"Engedélyezve\" be van jelölve" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Ennek a kevert filamentnek a közzététele, valamint az összetevő filamentjeinek engedélyezése + teljes közzététele" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Ennek a filamenthelynek a közzététele a 3MF fájlban" + +# AI Translated +msgid "Full Publish" +msgstr "Teljes közzététel" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Ennek a helynek a teljes filamentjét beágyazza a 3MF fájlba" + +# AI Translated +msgid "Filter non-selected" +msgstr "Nem kijelöltek szűrése" + #, c-format, boost-format msgid "Save %s as" msgstr "%s mentése" @@ -9699,6 +9882,10 @@ msgstr "Az összes örökölt értéket átmásolja a szülő előbeállításb msgid "Detach from parent" msgstr "Leválasztás a szülőről" +# AI Translated +msgid "Save without parent" +msgstr "Mentés szülő nélkül" + # AI Translated msgid "Unique preset" msgstr "Önálló előbeállítás" @@ -10405,9 +10592,17 @@ msgstr "A csomósodás-észleléshez szükség van a törlőtoronyra. Nélküle msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "A pontos Z magasság és a törlőtorony egyidejű engedélyezése szeletelési hibákat okozhat. Továbbra is engedélyezi a pontos Z magasságot?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "A sima Timelapse-hez minden rétegen törlőtorony kell, ami nem használható a \"Nincsenek ritka rétegek\" beállítással együtt. A \"Nincsenek ritka rétegek\" kikapcsolva." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "A sima Timelapse módhoz törlőtorony szükséges. Nélküle hibák jelenhetnek meg a nyomtatott tárgyon. Bekapcsolod a törlőtornyot?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "A \"Nincsenek ritka rétegek\" nem használható a sima Timelapse-szel, amelyhez minden rétegen törlőtorony kell. A Timelapse hagyományos módra váltott." + msgid "Still print by object?" msgstr "Továbbra is tárgyanként szeretnél nyomtatni?" @@ -10783,9 +10978,6 @@ msgstr "Kompatibilis folyamatprofilok" msgid "Printable space" msgstr "Nyomtatási terület" -msgid "Printer Agent" -msgstr "Nyomtatóügynök" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Válaszd ki a nyomtatóval való kommunikációhoz használt hálózati ügynököt. Az elérhető ügynököket indításkor regisztrálja a rendszer." @@ -11030,12 +11222,12 @@ msgid "No modifications need to be copied." msgstr "Nincs másolandó módosítás." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Paraméterek másolása" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "A(z) %s paramétereinek módosítása" # AI Translated @@ -11190,14 +11382,6 @@ msgstr "Extruderek száma" msgid "Capabilities" msgstr "Képességek" -# AI Translated -msgid "Left: " -msgstr "Bal: " - -# AI Translated -msgid "Right: " -msgstr "Jobb: " - msgid "Show all presets (including incompatible)" msgstr "Minden beállítás megjelenítése (beleértve az inkompatibiliseket is)" @@ -11552,27 +11736,6 @@ msgstr "Filamentcsere öblítési mennyisége" msgid "Please choose the filament colour" msgstr "Kérlek, válaszd ki a filament színét" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "A natív Wayland élőképhez a GStreamer GTK videonyelő szükséges. Telepítsd a gtksink beépülő modult a GStreamerhez, majd indítsd újra az OrcaSlicert." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nem sikerült inicializálni a natív Wayland GStreamer videonyelőt. Ellenőrizd a GStreamer GTK bővítmény telepítését." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Ehhez a művelethez Windows Media Player szükséges. Szeretnéd engedélyezni a \"Windows Media Player\"-t az operációs rendszerben?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "A BambuSource nincs megfelelően regisztrálva médialejátszáshoz. Kattints az Igen gombra az újbóli regisztráláshoz. Kétszer kapsz majd megerősítési kérést." - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "A médialejátszáshoz szükséges BambuSource-összetevő hiányzik. Kérlek, telepítsd újra az OrcaSlicert, vagy kérj segítséget a közösségtől." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Ha egy másik telepítésből származó BambuSource van használatban, előfordulhat, hogy a videólejátszás nem működik megfelelően. Kattints az Igen gombra a javításhoz." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "A rendszerből hiányoznak a GStreamer H.264 kodekjei, amelyek szükségesek a videolejátszáshoz. (Próbáld telepíteni a gstreamer1.0-plugins-bad vagy a gstreamer1.0-libav csomagokat, majd indítsd újra az Orca Slicert.)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "A felhőszolgáltatás nem érhető el. Indítsd újra az OrcaSlicert, majd próbáld újra." @@ -12062,15 +12225,22 @@ msgstr "Javítás megszakítva" msgid "Copying of file %1% to %2% failed: %3%" msgstr "%1% fájl másolása sikertelen a következő helyre: %2% Hiba: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Új gyártói profilok letöltése: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigurációs csomag: %1% frissítve erre: %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Nem sikerült letölteni a gyártói profilokat: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Kérlek, ellenőrizd a nem mentett módosításokat a konfiguráció frissítése előtt." -msgid "Configuration package: " -msgstr "Konfigurációs csomag: " - -msgid " updated to " -msgstr " frissítve erre: " - msgid "Open G-code file:" msgstr "G-kód fájl megnyitása:" @@ -12130,11 +12300,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "A rezgéskompenzációt csak a Klipper, a RepRapFirmware és a Marlin 2 támogatja" -msgid "Grouping error: " -msgstr "Csoportosítási hiba: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Csoportosítási hiba: %1% nem helyezhető a bal fúvókába" -msgid " can not be placed in the " -msgstr " nem helyezhető ide: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Csoportosítási hiba: %1% nem helyezhető a jobb fúvókába" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12248,6 +12422,10 @@ msgstr "%1% túl közel van más tárgyakhoz, a nyomtatás során előfordulhatn msgid "%1% is too tall, and collisions will be caused." msgstr "%1% túl magas, a nyomtatás során előfordulhatnak ütközések." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "A modell és a törlőtorony egymáshoz viszonyított helyzete nem felel meg a \"Nincsenek ritka rétegek\" funkció követelményeinek. Módosítsd az egymáshoz viszonyított helyzetüket, csökkentsd a modell magasságát, vagy kapcsold ki a \"Nincsenek ritka rétegek\" beállítást." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " túl közel van a tiltott területhez, a nyomtatás során előfordulhatnak ütközések." @@ -12282,6 +12460,10 @@ msgstr "Ha továbbra is szeretnél nyomtatni, engedélyezheted az opciót itt: B msgid "No extrusions under current settings." msgstr "A jelenlegi beállításokkal nincsenek extrudálások." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Színátmenetes kevert filament van használatban, de a 'Kevert színű alréteg' ki van kapcsolva. A színátmenet nem lesz kinyomtatva." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "A sima Timelapse nem használható, ha a nyomtatási sorrend \"Tárgyanként\"." @@ -12318,6 +12500,10 @@ msgstr "Próbáld meg csökkenteni a modell méretét vagy módosítani a jelenl msgid "Variable layer height is not supported with Organic supports." msgstr "A változó rétegmagasság nem működik az organikus támaszokkal." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "A törlőtorony filamentje nem lehet kevert filament." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Eltérő fúvókaátmérők és eltérő filamentátmérők mellett a törlőtorony nem biztos, hogy megfelelően működik. Ez nagyon kísérleti funkció, ezért körültekintően használd." @@ -12600,6 +12786,9 @@ msgstr "3MF használata G-kód helyett" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Kapcsold be, ha a nyomtató 3MF fájlt fogad el nyomtatási feladatként. Bekapcsolva az Orca Slicer a szeletelt fájlt .gcode.3mf formátumban küldi el egyszerű .gcode fájl helyett." +msgid "Printer Agent" +msgstr "Nyomtatóügynök" + msgid "Select the network agent implementation for printer communication." msgstr "Válaszd ki a nyomtató kommunikációjához használt hálózati ügynök implementációját." @@ -12685,7 +12874,7 @@ msgstr "mm vagy %" msgid "Other layers" msgstr "Többi réteg" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "A kezdőréteg utáni asztalhőmérséklet. A 0 azt jelenti, hogy a filament nem nyomtatható a SuperTack hűvös tálcára." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13661,6 +13850,10 @@ msgstr "Igazított vonal" msgid "Concentric" msgstr "Koncentrikus" +# AI Translated +msgid "Spiral Inset" +msgstr "Spirális behúzás" + msgid "Hilbert Curve" msgstr "Hilbert-görbe" @@ -13752,13 +13945,13 @@ msgstr "Felső felület kitöltési sorrendje" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Az az irány, amelyben a felső felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n" -"A Kifelé a felület közepén kezd, így a felesleges anyag a szélek felé tolódik, ahol a legkevésbé látszik. A Befelé a szélén kezd, és a középen lévő szűk ívekkel fejeződik be.\n" -"Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat." +"Az az irány, amelyben a felső felületek kitöltése történik középpontból induló mintázat esetén (Koncentrikus, Spirális behúzás, Archimédeszi vonalak, Nyolcágú spirál).\n" +"A Kifelé a felület közepén indul, így a felesleges anyag a szélek felé tolódik, ahol a legkevésbé látszik. A Befelé a szélen indul, és a középen lévő szűk ívekkel ér véget.\n" +"Az Alapértelmezett a legrövidebb út szerinti sorrendet használja, amely bármelyik irányba haladhat." # AI Translated msgid "Bottom surface fill order" @@ -13766,13 +13959,13 @@ msgstr "Alsó felület kitöltési sorrendje" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Az az irány, amelyben az alsó felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n" -"A Befelé minden felületet a szélesebb külső ívekkel kezd, ami javítja az első réteg tapadását azokon az asztalokon, ahol a középen lévő szűk ívek nem tapadnak meg jól. A Kifelé a közepén kezd, a felesleges anyagot a szélek felé tolva.\n" -"Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat." +"Az az irány, amelyben az alsó felületek kitöltése történik középpontból induló mintázat esetén (Koncentrikus, Spirális behúzás, Archimédeszi vonalak, Nyolcágú spirál).\n" +"A Befelé minden felületet a szélesebb külső ívekkel kezd, ami javítja a kezdőréteg tapadását azokon az asztalokon, amelyeken a középen lévő szűk ívek esetleg nem tapadnak meg. A Kifelé a közepén indul, és a felesleges anyagot a szélek felé tolja.\n" +"Az Alapértelmezett a legrövidebb út szerinti sorrendet használja, amely bármelyik irányba haladhat." # AI Translated msgid "Internal solid infill pattern" @@ -13876,6 +14069,14 @@ msgstr "Óramutató járásával ellentétes" msgid "Clockwise" msgstr "Óramutató járásával megegyező" +# AI Translated +msgid "Distance to rod" +msgstr "Távolság a rúdtól" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "A fúvóka hegyének vízszintes távolsága a rúd távolabbi élétől. Ütközés elkerülésére szolgál tárgyankénti nyomtatás esetén." + msgid "Height to rod" msgstr "Magasság a rúdig" @@ -14063,6 +14264,8 @@ msgstr "Rétegidő" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "A tárgyhűtő ventilátor azon rétegek esetében lesz engedélyezve, amelyek becsült ideje rövidebb ennél az értéknél. A ventilátor fordulatszáma a rétegnyomtatási időnek megfelelően skálázódik a minimális és maximális ventilátor fordulatszám között" +# AI Translated +msgctxt "second" msgid "s" msgstr "mp" @@ -14370,6 +14573,62 @@ msgstr "Támaszanyag" msgid "Support material is commonly used to print supports and support interfaces." msgstr "A támaszanyagot általában a támaszok és azok érintkező felületeinek nyomtatására használják." +# AI Translated +msgid "Is mixed filament" +msgstr "Kevert filament-e" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Megadja, hogy ez a filamenthely több fizikai filamentből álló kevert filament-e" + +# AI Translated +msgid "Mixed filament components" +msgstr "Kevert filament összetevői" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Az összetevő filamentek vesszővel elválasztott, 1-től induló indexei, pl. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Kevert filament alréteg-arányai" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Vesszővel elválasztott arányértékek, amelyek összege 1.0, pl. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Kevert filament színátmenete" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Bekapcsolja a Z irányú színátmenet módot a kevert filament alrétegeihez. Bekapcsolva az alrétegek arányai lineárisan változnak a rétegek mentén." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Kevert filament színátmenetének tartománya" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Az első összetevő kezdő és záró aránya színátmenet módban. Vesszővel elválasztott számpár, pl. a \"0.10,0.90\" 10%-tól 90%-ig tartót jelent." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Kevert filament színátmenet-görbéje" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Opcionális, Photoshop stílusú egyéni görbe, amely a Z irányú haladást az első összetevő arányához rendeli. Függőleges vonallal elválasztott vezérlőpontokként van kódolva, \"x,y\" (régi) vagy \"x,y,m_in,m_out\" formában, ha az érintő felülbírálására van szükség (üres érték vagy \"nan\" esetén a PCHIP alapértelmezés érvényes). x a [0,1] tartományban van; y a beállított aránytartományra van korlátozva, pl. \"0,0.15|0.5,0.50|1,0.85\". Ha üresen marad, helyette a lineáris gradient_range kerül felhasználásra." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Kevert filament színátmenete tárgyanként" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Ha a színátmenet mód be van kapcsolva, a színátmenet az összeállítás minden tárgyára külön-külön érvényesül, ahelyett hogy az egész összeállítást egyetlen Z tartományként kezelné." + msgid "Filament printable" msgstr "Filament nyomtatható" @@ -15633,6 +15892,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Az Y tengely megengedett maximális kimeneti ereje" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15643,6 +15903,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Az Y tengely gépasztaltömeg-terhelése" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15957,7 +16218,7 @@ msgid "Reduce infill retraction" msgstr "Csökkentett visszahúzás kitöltésnél" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Nem történik visszahúzás, amikor a fej csak kitöltés felett halad el, mert az itt történő szivárgás egyébként sem látható. Ez az opció lerövidítheti a nyomtatási időt a visszahúzások csökkentésével komplex modelleknél, de egyúttal lassabbá teszi a szeletelést és a G-kód generálást. Vedd figyelembe, hogy a Z-emelés sem történik meg azokon a területeken, ahol a visszahúzás ki van hagyva." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15994,6 +16255,20 @@ msgstr "Túlnyúló falak felismerése" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Felismeri a túlnyúlás százalékos arányát a vonalszélességhez viszonyítva, és más sebességet használ. A 100%%-os túlnyúlás esetén az áthidaláshoz beállított sebességet használja." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Alátámasztatlan falak nyomtatása utoljára" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"A teljesen a levegőben lévő falhurkok csak akkor kerülnek nyomtatásra, amikor már van, ami megtartsa őket:\n" +"a szigetük többi fala után kerülnek extrudálásra, a legbelsővel kezdve, függetlenül a falak sorrendjétől.\n" +"Az a hurok, amelyet csak az adott réteg áthidalásai tudnak rögzíteni, megvárja, amíg ezek az áthidalások kinyomtatásra kerülnek, míg egy alátámasztott fal mellett futó hurok megtartja a helyét a kitöltés előtt, amelynek rögzítésként szüksége van rá." + # AI Translated msgid "Outer walls" msgstr "Külső falak" @@ -16131,7 +16406,7 @@ msgstr "Visszahúzás mértéke törlés után" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "A törlés utáni gyors visszahúzás hossza a visszahúzási hosszhoz viszonyítva.\n" @@ -16178,7 +16453,7 @@ msgstr "Amikor a visszahúzás eszközváltás előtt aktiválódik, a filament msgid "Z-hop height" msgstr "Z-emelés magassága" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Visszahúzáskor a fúvóka egy kicsit megemelkedik, hogy a fúvóka és a nyomtatott tárgy között rés keletkezzen. Ez megakadályozza, hogy a fúvóka nagyobb mozgás közben a tárgynak ütközzön. A Z tengely emelésekor használt körkörös mozgás megelőzheti a szálazást." msgid "Z-hop lower boundary" @@ -16434,6 +16709,39 @@ msgstr "Törlés hurkokon" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "A varrat láthatóságának csökkentéséhez zárt hurok extrudálásnál egy kis befelé irányuló mozgás történik, mielőtt az extruder elhagyná a hurkot." +# AI Translated +msgid "Wipe inward" +msgstr "Törlés befelé" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Csak a külső falakra vonatkozik, beleértve a furatok kontúrjait is. Törlés közben a forró fúvókát a már kinyomtatott belső falak felé mozgatja, hogy csökkentse a frissen nyomtatott műanyag újramelegedését és a varratnyomokat.\n" +"\n" +"Különösen hasznos 0,1 mm alatti rétegmagasságnál, ahol a törlésnyomok jobban látszanak.\n" +"\n" +"A szokásos törlést használja, ha nincs még kinyomtatott szomszédos belső fal (egyfalú területek vagy Külső/Belső falsorrend), illetve ha nem található alátámasztott befelé vezető útvonal, például szűk sarkoknál vagy varrathézagoknál." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Törlés befelé távolsága" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Az a távolság, amennyivel a törlési útvonal eltolódik a külső kerülettől, milliméterben vagy a külső fal tényleges extrudálási szélességének százalékában megadva.\n" +"\n" +"Például az 50% a külső fal szélességének felével tolja el az útvonalat. A tényleges eltolást korlátozza a külső fal tényleges szélessége és a szomszédos falig rendelkezésre álló hely is, ezért a 100% feletti értékeknek vagy az ezzel egyenértékű abszolút távolságnak nincs további hatása. Az eltolás kikapcsolásához állítsd 0-ra." + msgid "Wipe before external loop" msgstr "Törlés a külső hurok előtt" @@ -16699,8 +17007,9 @@ msgstr "Felveszi az új szerszámot anélkül, hogy megvárná a nyomtatási hő msgid "No sparse layers (beta)" msgstr "Nincsenek ritka rétegek (béta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Ha engedélyezed, nem készül törlőtorony azokon a rétegeken, ahol nincs szerszámváltás. A szerszámváltást tartalmazó rétegeknél az extruder az aktuális magasság alá süllyed a törlőtorony nyomtatásához. Ügyelj arra, hogy ez ne okozzon ütközést a nyomtatás során." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Ha be van kapcsolva, a törlőtorony nem kerül nyomtatásra azokon a rétegeken, ahol nincs eszközváltás. Az eszközváltást tartalmazó rétegeken az extruder lefelé mozdul, hogy kinyomtassa a törlőtornyot, így a torony a modell alá kerül, és a szerszámfejnek le kell nyúlnia hozzá. Azok az elrendezések, ahol ez ütközne egy már kinyomtatott tárggyal, elutasításra kerülnek. Nincs hatása sima Timelapse vagy fúvókalerakódás-érzékelés esetén, mert ezekhez minden rétegen kell torony." msgid "Prime all printing extruders" msgstr "Az összes nyomtató extruder előkészítése" @@ -16726,6 +17035,34 @@ msgstr "" msgid "Cyclic" msgstr "Ciklikus" +# AI Translated +msgid "Cyclic order" +msgstr "Ciklikus sorrend" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"A ciklikus eszközváltási sorrend által használt egyéni filamentsorrend, vesszővel elválasztott filamentszámokként (pl. \"3,2,1,4\").\n" +"Minden réteg ezt a sorrendet követve nyomtatja a filamentjeit; a fel nem sorolt filamentek utoljára kerülnek nyomtatásra, növekvő sorrendben.\n" +"Hagyd üresen, ha a filamenteket növekvő sorrendben szeretnéd végigjárni." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Ciklikus sorrend alkalmazása a kezdőrétegre" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"A ciklikus eszközváltási sorrendet a kezdőrétegre is alkalmazza.\n" +"Alapértelmezés szerint ki van kapcsolva, mert a kezdőréteg helyette a legjobb asztalra tapadás érdekében kerül sorba rendezésre: azok a filamentek, amelyek kicsi, törékeny kezdőréteg-elemeket nyomtatnak, utoljára kerülnek sorra, így a következő eszközváltások és mozgások kisebb eséllyel szakítják le ezeket a gyengén rögzített részeket. Ez a kezdőréteg-sorrend figyelembe veszi a kezdőréteghez beállított egyéni filamentsorrendet is, ha van ilyen. A ciklikus sorrend előnye (a további eszközváltások több időt adnak minden rétegnek a hűlésre) nem érvényes a kezdőrétegre, amely a tapadás érdekében lassan és forrón készül.\n" +"Csak akkor kapcsold be, ha pontosan ugyanarra az eszközsorrendre van szükséged minden rétegen, beleértve az elsőt is, ezen tapadásoptimalizálás rovására." + msgid "Slice gap closing radius" msgstr "Szeletelési hézag lezárási sugara" @@ -16735,9 +17072,6 @@ msgstr "A háromszögháló szeletelésekor kitölti a hézagzárási sugár ké msgid "Slicing Mode" msgstr "Szeletelési mód" -msgid "Other" -msgstr "Egyéb" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Használd a \"Páros-páratlan\" opciót a 3DLabPrint repülőgépmodellekhez. Használd a \"Hézagok lezárása\" lehetőséget a modell összes házagának lezárásához." @@ -17233,6 +17567,14 @@ msgstr "" "\n" "Ha az alábbi \"visszahúzási mennyiség törlés előtt\" beállításban értéket adsz meg, akkor az esetleges többletvisszahúzás a törlés előtt történik meg, különben utána." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Kevert színű alréteg" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Bekapcsolja a kevert színű alrétegekre bontást. Bekapcsolva a kevert színű filamentet tartalmazó rétegek alrétegekre lesznek bontva a színkeverési hatás eléréséhez." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A törlőtorony a fúvókán lévő maradék eltávolítására és a fúvóka belsejében lévő nyomás stabilizálására szolgál, hogy elkerülhetők legyenek a megjelenésbeli hibák az objektumok nyomtatásakor." @@ -17727,6 +18069,14 @@ msgstr "Nincs ellenőrzés" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Ne futtass érvényességi ellenőrzéseket, például G-kód útvonalütközés-ellenőrzést." +# AI Translated +msgid "Strict mode" +msgstr "Szigorú mód" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Nem nulla kilépési kóddal lép ki, ha a szeletelés olyan nem kritikus figyelmeztetést ad, amely egyébként csak naplózásra kerülne, például ha egy modellhez támasz kellene, miközben a támasz ki van kapcsolva. Használd CI-ben vagy szkriptelt folyamatokban, amelyek soha nem adhatnak ki észrevétlenül hibás szeletelést. Minden ilyen figyelmeztetés stabil osztállyal szerepel a result.json `warnings` tömbjében is, amely csak Linuxon készül el. Nem használható a --no-check kapcsolóval együtt, amely kihagyja a támaszellenőrzést." + msgid "Normative check" msgstr "Normatív ellenőrzés" @@ -17739,11 +18089,28 @@ msgstr "Kimeneti modell információ" msgid "This outputs the model’s information." msgstr "Kimeneti modell információ." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Háló vizsgálata (JSON a stdout-ra)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Kiír a stdout-ra egy JSON összegzést minden betöltött tárgyról, majd kilép: a befoglaló dobozait és a konvex burok azon lapjait, amelyekre lefektethető, ezek normálisaival, területével és középpontjával együtt. Ezek közül a lapok közül választanak a --ground-* kapcsolók. Az --info géppel olvasható alternatívája." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Festés vizsgálata (JSON a stdout-ra)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Kiír egy strukturált JSON összegzést a betöltött modellen már tárolt minden festett rétegről (támaszok, varrat, MMU-szín, barázdált felület) — állapotonkénti lapszám, felület és a hálóhoz viszonyított befoglaló doboz —, majd kilép. A festőeszközök felületen történő megnyitásának géppel olvasható alternatívája." + msgid "Export Settings" msgstr "Beállítások exportálása" -msgid "This exports settings to a file." -msgstr "Beállítások exportálása egy fájlba." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Ez fájlba exportálja a beállításokat. A - használatával a stdout-ra írja őket." msgid "Send progress to pipe" msgstr "Folyamat elküldése" @@ -17799,6 +18166,30 @@ msgstr "Forgatás Y körül" msgid "Rotation angle around the Y axis in degrees." msgstr "Az Y tengely körüli forgatási szög fokban." +# AI Translated +msgid "Ground largest face" +msgstr "Fektetés a legnagyobb lapra" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Minden tárgyat a konvex burkának legnagyobb lapjára fektet, és ráejti az asztalra. Az egyforma méretű lapok közül a már lefelé néző marad. Azok a tárgyak, amelyeknek nincs elég nagy lapjuk a megtámaszkodáshoz, változatlanok maradnak. Az átalakítások a parancssori sorrendben futnak, így az ezen kapcsoló előtt megadott forgatások érvényesülnek. Az --orient 1 az összes átalakítás után fut, és felülírja a tájolást." + +# AI Translated +msgid "Ground face by normal" +msgstr "Fektetés lapra normális szerint" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Minden tárgyat a konvex burok azon lapjára fektet, amelynek kifelé mutató normálisa a legközelebb van az NX,NY,NZ irányhoz, és ráejti az asztalra. Az irány a tárgy koordinátáiban értendő, amelyek tartalmazzák az ezen kapcsoló előtt megadott forgatásokat, és megegyeznek az asztal tengelyeivel, hacsak a bemeneti fájl el nem forgatja a tárgyat. Például az 1,0,0 a +X oldalára állítja a tárgyat. Az --orient 1 az összes átalakítás után fut, és felülírja a tájolást." + +# AI Translated +msgid "Ground face at point" +msgstr "Fektetés pontban lévő lapra" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Minden tárgyat a konvex burok azon lapjára fektet, amely tartalmazza az X,Y,Z pontot, és ráejti az asztalra. A pont a tárgy koordinátáiban értendő, amelyek tartalmazzák az ezen kapcsoló előtt megadott forgatásokat; az --inspect-mesh ezekben adja meg a lapok középpontját. Azok a tárgyak, amelyeknek nincs ilyen lapjuk, változatlanok maradnak, és a futás hibával áll le, ha egyetlen tárgynak sincs ilyen lapja. Az --orient 1 az összes átalakítás után fut, és felülírja a tájolást." + msgid "Scale the model by a float factor." msgstr "A modell méretezése egy lebegő tényezővel" @@ -18306,6 +18697,10 @@ msgstr "A modellfájl hálósítása sikertelen volt, vagy nincs érvényes alak msgid "The supplied file couldn't be read because it's empty." msgstr "A megadott fájl nem olvasható be, mert üres" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "A fájlformátum nem kompatibilis, ezért nem értelmezhető." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Ismeretlen fájlformátum. A bemeneti fájlnak .stl, .obj vagy .amf(.xml) kiterjesztésűnek kell lennie." @@ -19796,19 +20191,19 @@ msgstr "Csak azok a nyomtatók jelennek meg, amelyeknél változtak a nyomtató- msgid "Only display the filament names with changes to filament presets." msgstr "Csak azok a filamentnevek jelennek meg, ahol változtak a filamentbeállítások." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Csak azok a nyomtatónevek jelennek meg, amelyekhez tartoznak felhasználói beállítások. A kiválasztott beállítások ZIP fájlként kerülnek exportálásra." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Csak azok a filamentnevek jelennek meg, amelyekhez tartoznak felhasználói filamentbeállítások,\n" "és a kiválasztott filamentnevekhez tartozó összes felhasználói filamentbeállítás ZIP-fájlként lesz exportálva." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Csak azok a nyomtatónevek jelennek meg, amelyekhez módosított folyamatbeállítások tartoznak,\n" "és a kiválasztott nyomtatónevekhez tartozó összes felhasználói folyamatbeállítás ZIP-fájlként lesz exportálva." @@ -20054,7 +20449,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Információra van szükségünk a probléma forrásának feltárásához. A részletes útmutatót a wiki oldalon találod." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "A Csomagolás gomb egy zip fájlba gyűjti a projektfájlt és az aktuális munkamenet naplóit." # AI Translated @@ -20110,7 +20505,7 @@ msgid "Stored logs" msgstr "Tárolt naplók" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Az összes tárolt naplót egy zip fájlba csomagolja." # AI Translated @@ -20198,7 +20593,7 @@ msgid "Authorizing..." msgstr "Engedélyezés..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Hiba. Nem sikerült API-tokent szerezni az engedélyezéshez" # AI Translated @@ -20654,8 +21049,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Intelligens filament-hozzárendelés bekapcsolása: egy filament több fúvókához rendelése a megtakarítás maximalizálásához" # AI Translated -msgid "Fila Saving" -msgstr "Filamentmegtakarítás" +msgid "File Saving" +msgstr "Fájl mentése" msgid "Don't remind me again" msgstr "Ne emlékeztessen újra" @@ -20979,6 +21374,18 @@ msgstr "Ez a művelet nem vonható vissza. Folytatod?" msgid "Skipping objects." msgstr "Objektumok kihagyása." +# AI Translated +msgid "Material Ratio" +msgstr "Anyagarány" + +# AI Translated +msgid "Model Height" +msgstr "Modellmagasság" + +# AI Translated +msgid "Ratio" +msgstr "Arány" + msgid "Select Filament" msgstr "Filament kiválasztása" @@ -21058,6 +21465,9 @@ msgstr "Újraindítás most" msgid "NO RAMMING AT ALL" msgstr "EGYÁLTALÁN NINCS TÖMÖRÍTÉS" +msgid "s" +msgstr "mp" + msgid "Volumetric speed" msgstr "Volumetrikus sebesség" @@ -21258,12 +21668,14 @@ msgid "Drying-Dehumidifying" msgstr "Szárítás – páramentesítés" # AI Translated -msgid " maximum drying temperature is " -msgstr " maximális szárítási hőmérséklete " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s maximális szárítási hőmérséklete %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " minimális szárítási hőmérséklete " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s minimális szárítási hőmérséklete %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21709,6 +22121,130 @@ msgstr "" "Kunkorodás elkerülése\n" "Tudtad, hogy a kunkorodásra hajlamos anyagok (például ABS) nyomtatásakor az asztal hőmérsékletének növelése csökkentheti a kunkorodás valószínűségét?" +#~ msgid "Other" +#~ msgstr "Egyéb" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Bal: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Jobb: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "A maximális hőmérséklet nem haladhatja meg ezt: " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "A minimális hőmérséklet nem lehet kevesebb ennél: " + +#~ msgid "up to" +#~ msgstr "legfeljebb" + +#~ msgid "above" +#~ msgstr "felett" + +#~ msgid "from" +#~ msgstr "ettől" + +#~ msgid "Configuration package: " +#~ msgstr "Konfigurációs csomag: " + +#~ msgid " updated to " +#~ msgstr " frissítve erre: " + +#~ msgid "Grouping error: " +#~ msgstr "Csoportosítási hiba: " + +#~ msgid " can not be placed in the " +#~ msgstr " nem helyezhető ide: " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " maximális szárítási hőmérséklete " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " minimális szárítási hőmérséklete " + +# AI Translated +#~ msgid "needs" +#~ msgstr "ehhez kell" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "nincs engedélyezve" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "az anyag nincs közzétéve" + +#~ msgid "Select the language" +#~ msgstr "Válaszd ki a nyelvet" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Bővítmény kiválasztása" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Az az irány, amelyben a felső felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n" +#~ "A Kifelé a felület közepén kezd, így a felesleges anyag a szélek felé tolódik, ahol a legkevésbé látszik. A Befelé a szélén kezd, és a középen lévő szűk ívekkel fejeződik be.\n" +#~ "Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Az az irány, amelyben az alsó felületek kitöltése történik középpont alapú mintázat (Koncentrikus, Archimédeszi vonalak, Nyolcágú spirál) használatakor.\n" +#~ "A Befelé minden felületet a szélesebb külső ívekkel kezd, ami javítja az első réteg tapadását azokon az asztalokon, ahol a középen lévő szűk ívek nem tapadnak meg jól. A Kifelé a közepén kezd, a felesleges anyagot a szélek felé tolva.\n" +#~ "Az Alapértelmezett a legrövidebb útvonal szerinti sorrendet használja, amely bármelyik irányba haladhat." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Ha engedélyezed, nem készül törlőtorony azokon a rétegeken, ahol nincs szerszámváltás. A szerszámváltást tartalmazó rétegeknél az extruder az aktuális magasság alá süllyed a törlőtorony nyomtatásához. Ügyelj arra, hogy ez ne okozzon ütközést a nyomtatás során." + +#~ msgid "This exports settings to a file." +#~ msgstr "Beállítások exportálása egy fájlba." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "A natív Wayland élőképhez a GStreamer GTK videonyelő szükséges. Telepítsd a gtksink beépülő modult a GStreamerhez, majd indítsd újra az OrcaSlicert." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nem sikerült inicializálni a natív Wayland GStreamer videonyelőt. Ellenőrizd a GStreamer GTK bővítmény telepítését." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Ehhez a művelethez Windows Media Player szükséges. Szeretnéd engedélyezni a \"Windows Media Player\"-t az operációs rendszerben?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "A BambuSource nincs megfelelően regisztrálva médialejátszáshoz. Kattints az Igen gombra az újbóli regisztráláshoz. Kétszer kapsz majd megerősítési kérést." + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "A médialejátszáshoz szükséges BambuSource-összetevő hiányzik. Kérlek, telepítsd újra az OrcaSlicert, vagy kérj segítséget a közösségtől." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Ha egy másik telepítésből származó BambuSource van használatban, előfordulhat, hogy a videólejátszás nem működik megfelelően. Kattints az Igen gombra a javításhoz." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "A rendszerből hiányoznak a GStreamer H.264 kodekjei, amelyek szükségesek a videolejátszáshoz. (Próbáld telepíteni a gstreamer1.0-plugins-bad vagy a gstreamer1.0-libav csomagokat, majd indítsd újra az Orca Slicert.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentmegtakarítás" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index bc36e08d25..a28bfe7c7e 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2466,15 +2466,6 @@ msgstr "È disponibile un aggiornamento. Apri la finestra di dialogo del bundle msgid "%s has been removed." msgstr "%s è stato rimosso." -msgid "Switching application language" -msgstr "Cambio lingua applicazione" - -msgid "Select the language" -msgstr "Seleziona la lingua" - -msgid "Language" -msgstr "Lingua" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2953,6 +2944,10 @@ msgstr "Modifica" msgid "Merge with" msgstr "Unisci con" +# AI Translated +msgid "Decompose Color" +msgstr "Scomponi colore" + msgid "Delete this filament" msgstr "Elimina questo filamento" @@ -3252,6 +3247,10 @@ msgstr "Assemblaggio" msgid "Merge parts to an object" msgstr "Unisci parti in un oggetto" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "L'uso dell'altezza strato variabile insieme al sottostrato di colore misto può ridurre la qualità della miscelazione dei colori." + # AI Translated msgid "Add layers" msgstr "Aggiungi strati" @@ -3707,11 +3706,15 @@ msgstr "Ritira il filamento attuale sul Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Cambia traccia sul Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "La temperatura massima non può superare " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "La temperatura massima non può superare %d" -msgid "The minmum temperature should not be less than " -msgstr "La temperatura minima non deve essere inferiore a " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "La temperatura minima non deve essere inferiore a %d" # AI Translated msgid "Type to filter..." @@ -4597,6 +4600,15 @@ msgstr "" "Copia del G-code temporaneo sul G-code di uscita non riuscita. Forse la scheda SD è protetta da scrittura?\n" "Messaggio di errore: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Copia del G-code temporaneo nel G-code di output non riuscita.\n" +"Messaggio di errore: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Copia del G-code temporaneo nel G-code di uscita non riuscita. Potrebbe esserci un problema nel dispositivo di destinazione. Prova ad esportare di nuovo o usa un dispositivo diverso. Il file G-code corrotto è su %1%.tmp." @@ -4805,7 +4817,7 @@ msgstr "" "\n" "Il valore verrà reimpostato a 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Parete aggiuntiva alternativa non funziona bene quando \"Garantisci spessore verticale del guscio\" è impostato su Tutto." msgid "" @@ -4851,7 +4863,7 @@ msgstr "" "NO - Mantieni Altezza strato di supporto indipendente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height deve essere inferiore a layer_height.\n" @@ -4859,7 +4871,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "La profondità di intersezione deve essere inferiore alla profondità della pelle.\n" @@ -4899,6 +4911,9 @@ msgstr "" "Sì - Modifica queste impostazioni ed abilita la modalità spirale automaticamente\n" "No - Annulla l'attivazione della modalità a spirale" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Stampa" @@ -5329,14 +5344,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Il valore %s è fuori intervallo. L'intervallo valido è da %d a %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"È %s%% o %s %s?\n" -"Sì per %s%%, \n" -"NO per %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "È %s%% o %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5358,29 +5370,22 @@ msgstr "Schema non valido. Utilizzare N, N#K o un elenco separato da virgole con msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato non valido. Formato vettoriale previsto: \"%1%\"" -msgid "N/A" -msgstr "N/D" - # AI Translated msgid "System agents" msgstr "Agenti di sistema" -# AI Translated -msgid "No plugin selected" -msgstr "Nessun plugin selezionato" - # AI Translated msgid "Add plugin" msgstr "Aggiungi plugin" -# AI Translated -msgid "Select plugin" -msgstr "Seleziona plugin" - # AI Translated msgid "Remove plugin" msgstr "Rimuovi plugin" +# AI Translated +msgid "No plugin selected" +msgstr "Nessun plugin selezionato" + # AI Translated msgid "Configure" msgstr "Configura" @@ -5636,14 +5641,20 @@ msgstr "Imposta al valore ottimale" msgid "Regroup filament" msgstr "Raggruppa nuovamente i filamenti" -msgid "up to" -msgstr "fino a" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "fino a %1% mm" -msgid "above" -msgstr "sopra" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "sopra %1% mm" -msgid "from" -msgstr "da" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "da %1% a %2% mm" msgid "Usage" msgstr "Utilizzo" @@ -6005,7 +6016,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Dimensione:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Sono stati trovati conflitti di percorsi nel G-code sullo strato %d, Z = %.2lfmm. Si prega di separare gli oggetti in conflitto (%s <-> %s)." @@ -6319,16 +6330,24 @@ msgstr "Salva progetto con nome" msgid "Save current project as" msgstr "Salva progetto corrente con nome" +# AI Translated +msgid "Publish 3MF" +msgstr "Pubblica 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Esporta un file 3MF con le impostazioni selezionate incorporate" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importa 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carica modello" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importa archivio Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Carica i modelli contenuti in un archivio zip" msgid "Import Configs" @@ -7594,6 +7613,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferiore" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Questa impostazione non specifica un tipo di funzionalità del plugin." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Questa impostazione specifica un tipo di funzionalità del plugin non riconosciuto: " + # AI Translated msgid "Plugin Selection" msgstr "Selezione plugin" @@ -7851,6 +7878,10 @@ msgstr "Personalizza il piatto corrente" msgid "The %s nozzle can not print %s." msgstr "L'ugello %s non può stampare %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "La stampa di filamento a colore misto su una stampante a estrusore singolo richiede frequenti cambi di filamento e spurghi, il che può aumentare notevolmente gli scarti e il rischio di intasamento dell'ugello o dello scivolo di scarto." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Non è consigliato miscelare %1% con %2% nella stampa.\n" @@ -7976,12 +8007,44 @@ msgstr "Sincronizza l'elenco filamenti dall'AMS" msgid "Set filaments to use" msgstr "Imposta filamenti da usare" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Aggiungi filamento misto" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamento misto" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Rimuovi l'ultimo filamento misto" + +# AI Translated +msgid "Add mixed filament" +msgstr "Aggiungi filamento misto" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Il filamento misto ha componenti non validi o incoerenti. Modificare nuovamente le voci interessate." + msgid "Search plate, object and part." msgstr "Cerca piatto, oggetto e parte." msgid "Pellets" msgstr "Granuli" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Il filamento misto ha riferimenti a componenti non validi" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Modifica / Elimina / Unisci" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Il filamento misto di destinazione utilizza questo filamento fisico come componente. L'unione rimuoverà questo filamento fisico e potrebbe invalidare il filamento misto. Continuare?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Al completamento dell'operazione, il progetto %s verrà chiuso e ne verrà creato uno nuovo." @@ -8119,8 +8182,16 @@ msgstr "Si prega di confermare che i G-code all'interno di questi profili sono s msgid "Customized Preset" msgstr "Profilo personalizzato" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF8!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Alcune impostazioni pubblicate non sono state applicate:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Alcuni slot filamento sono stati modificati:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Il nome dei componenti all'interno del file STEP non è in formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "A causa di una codifica del testo non supportata, potrebbero apparire caratteri inutili!" @@ -8141,10 +8212,10 @@ msgstr "Il volume dell'oggetto è zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "L'oggetto del file %s è troppo piccolo e può essere in metri o pollici.\n" -" Si desidera scalare in millimetri?" +"Si desidera scalare in millimetri?" msgid "Object too small" msgstr "Oggetto troppo piccolo" @@ -8161,6 +8232,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Rilevato oggetto in più parti" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associazione delle trame ai filamenti" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Avviso di importazione trama" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Caricare questi file come un singolo oggetto con più parti?\n" @@ -8371,6 +8450,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronizza ora" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Importazione della trama non riuscita. Il modello sembra contenere dati di trama, ma non è stato possibile completare il processo di importazione. Il modello verrà importato solo come geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Applicazione dei colori della trama..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aggiornamento della vista 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Colori della trama applicati." + msgid "You can keep the modified presets for the new project or discard them" msgstr "È possibile conservare i profili modificati per il nuovo progetto o scartarli" @@ -8502,6 +8597,21 @@ msgstr "Salva file elaborato con nome:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Il file %s è stato inviato alla memoria della stampante e può essere visualizzato da lì." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Pubblica il file 3MF come:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Esportazione del file 3MF pubblicato non riuscita.\n" +"Verifica se la cartella esiste online o se altri programmi hanno il file aperto." + +msgid "Publish" +msgstr "Pubblica" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Il tipo di ugello non è impostato. Impostare l'ugello e riprovare." @@ -8716,9 +8826,6 @@ msgstr "Vuoi continuare?" msgid "Language selection" msgstr "Selezione lingua" -msgid "Switching application language while some presets are modified." -msgstr "Cambio lingua applicazione durante la modifica di alcuni profili." - msgid "Asia-Pacific" msgstr "Asia-Pacifico" @@ -8824,6 +8931,9 @@ msgstr "Percorso istanza attuale: " msgid "General" msgstr "Generale" +msgid "Language" +msgstr "Lingua" + msgid "Metric" msgstr "Metrico" @@ -9285,9 +9395,6 @@ msgstr "Quando si scorre il cursore degli strati nell'anteprima elaborata, gli s msgid "Dimmed layer brightness" msgstr "Luminosità degli strati attenuati" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9654,6 +9761,10 @@ msgstr "Vaso a spirale" msgid "First layer filament sequence" msgstr "Sequenza filamenti primo strato" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "L'elenco dei filamenti contiene filamenti misti. La sequenza di filamenti personalizzata non avrà effetto." + msgid "By Layer" msgstr "Per strato" @@ -9682,9 +9793,6 @@ msgstr "Vai alla pagina web di pubblicazione del modello" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: la preparazione può richiedere alcuni minuti. Si prega di avere pazienza." -msgid "Publish" -msgstr "Pubblica" - msgid "Publish was canceled" msgstr "La pubblicazione è stata annullata" @@ -9700,6 +9808,81 @@ msgstr "Caricamento dati" msgid "Jump to webpage" msgstr "Vai alla pagina web" +# AI Translated +msgid "Material" +msgstr "Materiale" + +# AI Translated +msgid "Mixed filament" +msgstr "Filamento misto" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Alcuni filamenti misti dipendono da filamenti che non verranno pubblicati:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filamento %d (misto)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% richiede %2%, che non è abilitato." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% richiede %2%, il cui materiale non verrà pubblicato." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Per pubblicare un filamento misto, abilita ogni filamento che utilizza e scegli Pubblicazione completa oppure soddisfa il suo requisito Tipo." + +# AI Translated +msgid "Publish anyway" +msgstr "Pubblica comunque" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Pubblica 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Seleziona quali impostazioni pubblicare nel file 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki di Pubblica 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Guida video di Pubblica 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filamento misto - pubblicato per intero quando sopra è selezionato \"Abilita\"" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Pubblica questo filamento misto e abilita + pubblica per intero i suoi filamenti componenti" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Pubblica questo slot filamento nel file 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Pubblicazione completa" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Incorpora l'intero filamento di questo slot nel file 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtra non selezionati" + #, c-format, boost-format msgid "Save %s as" msgstr "Salva %s con nome" @@ -9717,6 +9900,10 @@ msgstr "Copia in questo profilo tutti i valori ereditati dal profilo padre e rim msgid "Detach from parent" msgstr "Scollega dal genitore" +# AI Translated +msgid "Save without parent" +msgstr "Salva senza genitore" + # AI Translated msgid "Unique preset" msgstr "Profilo unico" @@ -10421,9 +10608,17 @@ msgstr "È necessaria una torre di spurgo per il rilevamento degli ammassi. Potr msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "L'abilitazione sia dell'altezza Z precisa che della torre di spurgo potrebbe causare errori di slicing. Vuoi comunque abilitare l'altezza Z precisa?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Il timelapse fluido richiede una torre di spurgo su ogni strato, il che non è compatibile con \"Nessuno strato sparso\". \"Nessuno strato sparso\" è stato disattivato." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "È necessaria una torre di spurgo per una modalità timelapse fluida. Potrebbero esserci dei difetti sul modello senza una torre di spurgo. Vuoi abilitare la torre di spurgo?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Nessuno strato sparso\" non è compatibile con il timelapse fluido, che richiede una torre di spurgo su ogni strato. Il timelapse è passato alla modalità tradizionale." + msgid "Still print by object?" msgstr "Stampare ancora per oggetto?" @@ -10797,9 +10992,6 @@ msgstr "Profili di processo compatibili" msgid "Printable space" msgstr "Spazio di stampa" -msgid "Printer Agent" -msgstr "Agente stampante" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Selezionare l'implementazione dell'agente di rete per la comunicazione con la stampante. Gli agenti disponibili vengono registrati all'avvio." @@ -11044,12 +11236,12 @@ msgid "No modifications need to be copied." msgstr "Non è necessario copiare alcuna modifica." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copia parametri" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifica i parametri di %s" # AI Translated @@ -11208,14 +11400,6 @@ msgstr "Numero di estrusori" msgid "Capabilities" msgstr "Caratteristiche" -# AI Translated -msgid "Left: " -msgstr "Sinistra: " - -# AI Translated -msgid "Right: " -msgstr "Destra: " - msgid "Show all presets (including incompatible)" msgstr "Mostra tutti i profili (compresi quelli non compatibili)" @@ -11571,27 +11755,6 @@ msgstr "Volumi di spurgo per cambio filamento" msgid "Please choose the filament colour" msgstr "Scegliere il colore del filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "La funzione di visualizzazione in tempo reale nativa di Wayland richiede il ricevitore video GTK di GStreamer. Installare il modulo gtksink per GStreamer e riavviare OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Impossibile inizializzare il ricevitore video nativo di Wayland GStreamer. Verificare l'installazione del modulo GTK di GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Per questa operazione è necessario Windows Media Player! Desideri abilitare 'Windows Media Player' sul il tuo sistema operativo?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource non è stato registrato correttamente per la riproduzione multimediale! Fare clic su Sì per effettuare nuovamente la registrazione. Sarai promosso due volte" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Componente BambuSource mancante per la riproduzione multimediale! Reinstallare OrcaSlicer o cercare aiuto nella comunità." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "È in uso una versione di BambuSource da un'installazione diversa. La riproduzione video potrebbe non funzionare correttamente! Fare clic su Sì per risolvere il problema." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Nel tuo sistema mancano i codec H.264 per GStreamer, necessari per riprodurre i video. (Provare a installare i pacchetti gstreamer1.0-plugins-bad o gstreamer1.0-libav e riavviare OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Il fornitore di servizi cloud non è disponibile. Riavviare OrcaSlicer e riprovare." @@ -12083,15 +12246,22 @@ msgstr "Riparazione annullata" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Copia del file %1% su %2% non riuscita: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Download dei nuovi profili produttore: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Pacchetto di configurazione: %1% aggiornato a %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Download dei profili produttore non riuscito: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Controllare le modifiche non salvate prima di aggiornare la configurazione." -msgid "Configuration package: " -msgstr "Pacchetto di configurazione: " - -msgid " updated to " -msgstr " aggiornato a " - msgid "Open G-code file:" msgstr "Apri un file G-code:" @@ -12151,11 +12321,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "La compensazione della risonanza è supportata solo da Klipper, RepRapFirmware e Marlin 2" -msgid "Grouping error: " -msgstr "Errore di raggruppamento: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Errore di raggruppamento: %1% non può essere collocato nell'ugello sinistro" -msgid " can not be placed in the " -msgstr " non può essere posizionato nel " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Errore di raggruppamento: %1% non può essere collocato nell'ugello destro" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12269,6 +12443,10 @@ msgstr "%1% è troppo vicino ad altri oggetti e potrebbe causare collisioni." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% è troppo alto e si verificheranno collisioni." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "La posizione relativa del modello e della torre di spurgo non soddisfa i requisiti della funzione \"Nessuno strato sparso\". Modifica le loro posizioni relative, riduci l'altezza del modello oppure disattiva \"Nessuno strato sparso\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " è troppo vicino all'area di esclusione e potrebbero verificarsi collisioni durante la stampa." @@ -12303,6 +12481,10 @@ msgstr "Se desideri comunque stampare, puoi abilitare l'opzione in Preferenze / msgid "No extrusions under current settings." msgstr "Nessuna estrusione con le impostazioni attuali." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "È in uso un filamento misto con gradiente, ma 'Sottostrato di colore misto' è disattivato. Il gradiente non verrà stampato." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "La modalità fluida del timelapse non è supportata quando è abilitata la sequenza \"Per oggetto\"." @@ -12339,6 +12521,10 @@ msgstr "È possibile ridurre le dimensioni del modello o modificare le impostazi msgid "Variable layer height is not supported with Organic supports." msgstr "Altezza strato adattiva non è compatibile con i Supporti organici." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Il filamento della torre di spurgo non può essere un filamento misto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Ugelli e filamenti di diverso diametro potrebbero non funzionare correttamente quando è abilitata la torre di spurgo. Questa funzione è sperimentale, quindi procedere con cautela." @@ -12620,6 +12806,9 @@ msgstr "Usa 3MF invece di G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Abilita questa opzione se la stampante accetta un file 3MF come processo di stampa. Quando è abilitata, Orca Slicer invia il file elaborato come .gcode.3mf, invece di un semplice file .gcode." +msgid "Printer Agent" +msgstr "Agente stampante" + msgid "Select the network agent implementation for printer communication." msgstr "Selezionare l'implementazione dell'agente di rete per la comunicazione con la stampante." @@ -12705,8 +12894,8 @@ msgstr "mm o %" msgid "Other layers" msgstr "Altri strati" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." -msgstr "Temperatura del piatto per gli strati diversi dal primo. Un valore di 0 significa che il filamento non supporta la stampa su Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgstr "Indica la temperatura del piatto per tutti gli strati eccetto il primo. Un valore di 0 significa che il filamento non supporta la stampa su Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Indica la temperatura del piatto per tutti gli strati eccetto il primo. Un valore pari a 0 indica che il filamento non supporta la stampa su Piatto a bassa temperatura." @@ -13681,6 +13870,10 @@ msgstr "Rettilineo allineato" msgid "Concentric" msgstr "Concentrico" +# AI Translated +msgid "Spiral Inset" +msgstr "Spirale interna" + msgid "Hilbert Curve" msgstr "Curva di Hilbert" @@ -13772,13 +13965,13 @@ msgstr "Ordine di riempimento della superficie superiore" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direzione in cui vengono riempite le superfici superiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n" -"Verso l'esterno inizia dal centro della superficie, in modo che il materiale in eccesso venga spinto verso il bordo dove è meno visibile. Verso l'interno inizia dal bordo e termina con le curve strette al centro.\n" -"L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni." +"Direzione in cui vengono riempite le superfici superiori quando si usa un motivo che parte dal centro (Concentrico, Spirale interna, Corde di Archimede, Spirale a ottogramma).\n" +"Verso l'esterno parte dal centro della superficie, così il materiale in eccesso viene spinto verso il bordo, dove è meno visibile. Verso l'interno parte dal bordo e termina con le curve strette al centro.\n" +"Predefinito usa l'ordinamento del percorso più breve, che può procedere in entrambe le direzioni." # AI Translated msgid "Bottom surface fill order" @@ -13786,13 +13979,13 @@ msgstr "Ordine di riempimento della superficie inferiore" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direzione in cui vengono riempite le superfici inferiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n" -"Verso l'interno inizia ogni superficie con le curve esterne più ampie, il che migliora l'adesione del primo strato sui piatti di stampa dove le curve strette al centro potrebbero non aderire. Verso l'esterno inizia dal centro, spingendo il materiale in eccesso verso il bordo.\n" -"L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni." +"Direzione in cui vengono riempite le superfici inferiori quando si usa un motivo che parte dal centro (Concentrico, Spirale interna, Corde di Archimede, Spirale a ottogramma).\n" +"Verso l'interno inizia ogni superficie con le curve esterne più ampie, migliorando l'adesione del primo strato sui piatti su cui le curve strette al centro potrebbero non aderire. Verso l'esterno parte dal centro e spinge il materiale in eccesso verso il bordo.\n" +"Predefinito usa l'ordinamento del percorso più breve, che può procedere in entrambe le direzioni." msgid "Internal solid infill pattern" msgstr "Motivo riempimento solido interno" @@ -13895,6 +14088,14 @@ msgstr "Senso antiorario" msgid "Clockwise" msgstr "Senso orario" +# AI Translated +msgid "Distance to rod" +msgstr "Distanza dall'asta" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Distanza orizzontale tra la punta dell'ugello e il bordo più lontano dell'asta. Usata per evitare collisioni nella stampa per oggetto." + msgid "Height to rod" msgstr "Altezza asta" @@ -14082,6 +14283,8 @@ msgstr "Durata strato" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "La ventola di raffreddamento verrà attivata per gli strati in cui il tempo stimato è inferiore a questo valore. La velocità della ventola varierà tra la velocità minima e massima in base alla durata stimata di stampa dello strato." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14388,6 +14591,62 @@ msgstr "Materiale di supporto" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Il materiale di supporto viene comunemente utilizzato per stampare supporti e interfacce di supporto." +# AI Translated +msgid "Is mixed filament" +msgstr "È filamento misto" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Indica se questo slot di filamento è un filamento misto composto da più filamenti fisici" + +# AI Translated +msgid "Mixed filament components" +msgstr "Componenti del filamento misto" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Indici (a partire da 1) dei filamenti componenti, separati da virgole; es. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporzioni dei sottostrati del filamento misto" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valori di proporzione separati da virgole la cui somma sia 1.0; es. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradiente del filamento misto" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Attiva la modalità gradiente in direzione Z per i sottostrati del filamento misto. Se attivata, le proporzioni dei sottostrati variano linearmente tra gli strati." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Intervallo del gradiente del filamento misto" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporzioni iniziale e finale del primo componente in modalità gradiente. Coppia separata da virgola; es. \"0.10,0.90\" significa dal 10% al 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Curva del gradiente del filamento misto" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizzata opzionale, in stile Photoshop, che mappa l'avanzamento in Z sulla proporzione del primo componente. Codificata come punti di controllo separati da barre verticali, nel formato \"x,y\" (legacy) oppure \"x,y,m_in,m_out\" quando è necessario forzare la tangente (un valore vuoto o \"nan\" usa il valore PCHIP predefinito). x è compreso in [0,1]; y viene limitato all'intervallo di proporzioni configurato; es. \"0,0.15|0.5,0.50|1,0.85\". Se vuoto, viene usato il gradient_range lineare." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradiente per parte del filamento misto" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quando la modalità gradiente è attiva, applica il gradiente a ciascuna parte di un assemblaggio in modo indipendente anziché trattare l'intero assemblaggio come un unico intervallo Z." + msgid "Filament printable" msgstr "Filamento stampabile" @@ -15655,6 +15914,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "La forza di uscita massima consentita dell'asse Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15665,6 +15925,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Il carico di massa del piano della macchina sull'asse Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15976,7 +16237,7 @@ msgid "Reduce infill retraction" msgstr "Evita retrazione nel riempimento" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Non ritrarre quando gli spostamenti si trovano interamente in un'area di riempimento. Ciò significa che il trasudo del materiale non è visibile. Questo può ridurre i tempi di retrazione per i modelli complessi e far risparmiare tempo di stampa, ma rende più lente l'elaborazione e la generazione del G-code. Nota che anche il sollevamento Z non viene eseguito nelle aree in cui la retrazione viene saltata." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16013,6 +16274,20 @@ msgstr "Rileva pareti sporgenti" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Rileva la percentuale di sporgenza rispetto alla larghezza della parete e utilizza un velocità di stampa differente. Per una sporgenza del 100%%, viene utilizzata la velocità dei ponti." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Stampa per ultime le pareti non supportate" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"I perimetri di stampa che si trovano interamente in aria vengono stampati solo quando qualcosa può sostenerli:\n" +"sono estrusi dopo le altre pareti della loro isola, partendo dalla più interna, qualunque sia l'ordine delle pareti.\n" +"Un perimetro che solo i ponti di questo strato possono ancorare attende che tali ponti siano stampati, mentre un perimetro che corre accanto a una parete supportata mantiene il suo posto prima del riempimento, che lo richiede come ancoraggio." + # AI Translated msgid "Outer walls" msgstr "Pareti esterne" @@ -16150,7 +16425,7 @@ msgstr "Quantità di retrazione dopo la pulizia" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "La lunghezza della retrazione rapida dopo la pulizia, relativa alla lunghezza di retrazione.\n" @@ -16197,7 +16472,7 @@ msgstr "Quando la retrazione viene attivata prima di un cambio testina, il filam msgid "Z-hop height" msgstr "Altezza sollevamento Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Ogni volta che si verifica una retrazione, l'ugello viene sollevato leggermente per creare spazio tra ugello e stampa. Ciò impedisce all'ugello di colpire la stampa negli spostamenti. L'uso di linee a spirale per il sollevamento sull'asse Z può evitare gli sfilacciamenti sulla stampa." msgid "Z-hop lower boundary" @@ -16457,6 +16732,39 @@ msgstr "Spurgo sui perimetri di stampa" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Per ridurre al minimo la visibilità della cucitura in un'estrusione ad anello chiuso, viene eseguito un piccolo movimento verso l'interno prima che l'estrusore lasci il perimetro." +# AI Translated +msgid "Wipe inward" +msgstr "Spurgo verso l'interno" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Si applica solo alle pareti esterne, inclusi i contorni dei fori. Durante lo spurgo sposta l'ugello caldo verso le pareti interne già stampate, per ridurre il riscaldamento della plastica appena depositata e i segni di cucitura.\n" +"\n" +"Particolarmente utile con altezze strato inferiori a 0,1 mm, dove i segni di spurgo sono più visibili.\n" +"\n" +"Usa lo spurgo normale se nessuna parete interna adiacente è già stata stampata (zone a parete singola oppure ordine delle pareti Esterna/Interna) o se non si trova un percorso verso l'interno che sia supportato, ad esempio in angoli stretti o in corrispondenza di interruzioni della cucitura." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Distanza di spurgo verso l'interno" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Distanza di cui il percorso di spurgo viene spostato rispetto al perimetro esterno, espressa in millimetri o in percentuale della larghezza di estrusione effettiva della parete esterna.\n" +"\n" +"Ad esempio, 50% sposta il percorso di metà della larghezza della parete esterna. Lo spostamento effettivo è limitato sia dalla larghezza effettiva della parete esterna sia dallo spazio disponibile fino alla parete adiacente, perciò valori superiori a 100% o una distanza assoluta equivalente non hanno alcun effetto aggiuntivo. Imposta 0 per disattivare lo spostamento." + msgid "Wipe before external loop" msgstr "Spurgo prima del perimetro esterno" @@ -16723,8 +17031,9 @@ msgstr "Preleva la nuova testina senza attendere che raggiunga la temperatura di msgid "No sparse layers (beta)" msgstr "Nessuno strato sparso (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Se abilitata, la torre di spurgo non verrà stampata sugli strati in cui non viene effettuato alcun cambio di testina. Sui strati con un cambio di testina, l'estrusore si sposterà verso il basso per stampare la torre di spurgo. L'utente dovrà accertarsi che non avvengano collisioni con la stampa." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Se abilitata, la torre di spurgo non viene stampata sugli strati senza cambi testina. Sugli strati con un cambio testina l'estrusore scende per stampare la torre di spurgo, perciò la torre finisce sotto il modello e la testa di stampa deve abbassarsi fino ad essa. Le disposizioni in cui ciò comporterebbe una collisione con un oggetto già stampato vengono rifiutate. Non ha effetto con il timelapse fluido o con il rilevamento degli ammassi sull'ugello, che richiedono una torre su ogni strato." msgid "Prime all printing extruders" msgstr "Prepara tutti gli estrusori di stampa" @@ -16750,6 +17059,34 @@ msgstr "" msgid "Cyclic" msgstr "Ciclico" +# AI Translated +msgid "Cyclic order" +msgstr "Ordine ciclico" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Sequenza di filamenti personalizzata usata dall'ordinamento ciclico dei cambi testina, come numeri di filamento separati da virgole (ad es. \"3,2,1,4\").\n" +"Ogni strato stampa i suoi filamenti seguendo questa sequenza; i filamenti non elencati vengono stampati per ultimi, in ordine crescente.\n" +"Lascia vuoto per scorrere i filamenti in ordine crescente." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Applica l'ordine ciclico al primo strato" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Applica l'ordine ciclico dei cambi testina anche al primo strato.\n" +"Per impostazione predefinita è disattivato, perché il primo strato viene invece ordinato per la migliore adesione al piatto: i filamenti che stampano dettagli piccoli e fragili del primo strato vengono stampati per ultimi, così i cambi testina e gli spostamenti successivi hanno meno probabilità di staccare quelle parti ancorate debolmente. Questo ordine del primo strato rispetta anche una sequenza di filamenti personalizzata per il primo strato, quando ne è impostata una. Il vantaggio dell'ordine ciclico (i cambi testina aggiuntivi danno a ogni strato più tempo per raffreddarsi) non si applica al primo strato, che viene stampato lentamente e caldo per l'adesione.\n" +"Abilita questa opzione solo se ti serve esattamente la stessa sequenza di testine su ogni strato, incluso il primo, a scapito di quell'ottimizzazione dell'adesione." + msgid "Slice gap closing radius" msgstr "Raggio di chiusura spazi vuoti" @@ -16759,9 +17096,6 @@ msgstr "Le fessure più piccole di 2 volte il raggio di chiusura degli spazi vuo msgid "Slicing Mode" msgstr "Modalità elaborazione" -msgid "Other" -msgstr "Altro" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Usa \"Pari-dispari\" per modelli di aeroplano 3DLabPrint. Utilizza \"Chiudi fori\" per chiudere tutti i fori del modello." @@ -17258,6 +17592,14 @@ msgstr "" "\n" "Impostando un valore di quantità di retrazione prima dell'impostazione di spurgo di seguito, verra eseguita qualsiasi retrazione in eccesso prima dello spurgo. Altrimenti verrà eseguita dopo." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sottostrato di colore misto" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Attiva la suddivisione in sottostrati di colore misto. Se attivata, gli strati che contengono filamenti a colore misto vengono suddivisi in sottostrati per ottenere effetti di miscelazione dei colori." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "La torre di spurgo può essere utilizzata per pulire i residui presenti sull'ugello e stabilizzare la pressione della camera all'interno dell'ugello, al fine di evitare difetti estetici durante la stampa." @@ -17750,6 +18092,14 @@ msgstr "Nessun controllo" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Non eseguire alcun controllo di validità, come il controllo dei conflitti di percorso del G-code." +# AI Translated +msgid "Strict mode" +msgstr "Modalità rigorosa" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Termina con un codice di uscita diverso da zero quando l'elaborazione genera un avviso non critico che altrimenti verrebbe solo registrato, ad esempio un modello che richiede supporti mentre i supporti sono disattivati. Usala in CI o in pipeline automatizzate che non devono mai consegnare un'elaborazione sottilmente difettosa. Ciascuno di questi avvisi è inoltre elencato con una classe stabile nell'array `warnings` di result.json, che viene scritto solo su Linux. Non può essere combinata con --no-check, che salta il controllo dei supporti." + msgid "Normative check" msgstr "Controllo normativo" @@ -17762,11 +18112,28 @@ msgstr "Informazioni modello di output" msgid "This outputs the model’s information." msgstr "Fornisce le informazioni del modello." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Ispeziona mesh (JSON su stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Stampa su stdout un riepilogo JSON di ogni oggetto caricato, poi esce: i suoi riquadri di delimitazione e le facce dell'inviluppo convesso su cui può appoggiarsi, con le relative normali, aree e centri. Sono queste le facce tra cui scelgono le opzioni --ground-*. Alternativa leggibile da una macchina a --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Ispeziona pittura (JSON su stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Stampa un riepilogo JSON strutturato di ogni livello dipinto (supporti, cucitura, colore MMU, superficie ruvida) già memorizzato nel modello caricato — numero di facce, area della superficie e riquadro di delimitazione locale alla mesh per ciascuno stato — poi esce. Alternativa leggibile da una macchina all'apertura degli strumenti di pittura nell'interfaccia." + msgid "Export Settings" msgstr "Esporta impostazioni" -msgid "This exports settings to a file." -msgstr "Esporta le impostazioni in un file." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Esporta le impostazioni in un file. Usa - per scriverle su stdout." msgid "Send progress to pipe" msgstr "Invia l'avanzamento al pipe" @@ -17822,6 +18189,30 @@ msgstr "Ruota attorno ad Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Angolo di rotazione attorno all'asse Y in gradi." +# AI Translated +msgid "Ground largest face" +msgstr "Appoggia sulla faccia più grande" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Appoggia ogni oggetto sulla faccia più grande del suo inviluppo convesso e lo fa cadere sul piatto. Tra facce di uguale dimensione viene mantenuta quella già rivolta verso il basso. Gli oggetti privi di una faccia abbastanza grande su cui appoggiarsi restano invariati. Le trasformazioni vengono applicate nell'ordine della riga di comando, perciò le rotazioni indicate prima di questa opzione sono rispettate. --orient 1 viene eseguito dopo tutte le trasformazioni e sostituisce l'orientamento." + +# AI Translated +msgid "Ground face by normal" +msgstr "Appoggia sulla faccia per normale" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Appoggia ogni oggetto sulla faccia dell'inviluppo convesso la cui normale esterna è più vicina alla direzione NX,NY,NZ e lo fa cadere sul piatto. La direzione è espressa nelle coordinate dell'oggetto, che includono le rotazioni indicate prima di questa opzione e coincidono con gli assi del piatto a meno che il file di input non ruoti l'oggetto. Ad esempio, 1,0,0 appoggia l'oggetto sul suo lato +X. --orient 1 viene eseguito dopo tutte le trasformazioni e sostituisce l'orientamento." + +# AI Translated +msgid "Ground face at point" +msgstr "Appoggia sulla faccia in un punto" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Appoggia ogni oggetto sulla faccia dell'inviluppo convesso che contiene il punto X,Y,Z e lo fa cadere sul piatto. Il punto è espresso nelle coordinate dell'oggetto, che includono le rotazioni indicate prima di questa opzione; --inspect-mesh riporta i centri delle facce in tali coordinate. Gli oggetti privi di una faccia simile restano invariati e l'esecuzione fallisce se nessun oggetto ne ha una. --orient 1 viene eseguito dopo tutte le trasformazioni e sostituisce l'orientamento." + msgid "Scale the model by a float factor." msgstr "Ridimensiona il modello in base a un fattore decimale." @@ -18329,6 +18720,10 @@ msgstr "La generazione della mesh del file del modello è fallita o la forma non msgid "The supplied file couldn't be read because it's empty." msgstr "Impossibile leggere il file fornito perché è vuoto" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Il formato del file non è compatibile e non può essere interpretato." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato file sconosciuto: il file di input deve avere un'estensione .stl, .obj o .amf(.xml)." @@ -19813,21 +20208,21 @@ msgstr "Vengono visualizzate solo le stampanti con modifiche ai profili di stamp msgid "Only display the filament names with changes to filament presets." msgstr "Nomi dei filamenti con modifiche ai profili di filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" "Nomi delle stampanti con profili creati dell'utente.\n" "Tutti i profili selezionati saranno esportati come file zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Nomi dei filamenti con profili creati dell'utente.\n" "Tutti i profili selezionati saranno esportati come file zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Nomi delle stampanti con profili di processo modificati.\n" "Tutti i profili selezionati saranno esportati come file zip." @@ -20072,7 +20467,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Abbiamo bisogno di informazioni per diagnosticare l'origine del problema. Consulta la pagina wiki per una guida dettagliata." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Il pulsante Comprimi raccoglie il file di progetto e i log della sessione corrente in un file zip." # AI Translated @@ -20128,7 +20523,7 @@ msgid "Stored logs" msgstr "Log memorizzati" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Comprime tutti i log memorizzati in un file zip." # AI Translated @@ -20216,7 +20611,7 @@ msgid "Authorizing..." msgstr "Autorizzazione in corso..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Errore. Impossibile ottenere il token API per l'autorizzazione" # AI Translated @@ -20672,8 +21067,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Abilita l'assegnazione intelligente del filamento: assegna un filamento a più ugelli per massimizzare il risparmio" # AI Translated -msgid "Fila Saving" -msgstr "Risparmio filamento" +msgid "File Saving" +msgstr "Salvataggio file" msgid "Don't remind me again" msgstr "Non ricordarmelo più" @@ -21003,6 +21398,18 @@ msgstr "Questa azione non può essere annullata. Continuare?" msgid "Skipping objects." msgstr "Salto degli oggetti." +# AI Translated +msgid "Material Ratio" +msgstr "Proporzione materiale" + +# AI Translated +msgid "Model Height" +msgstr "Altezza modello" + +# AI Translated +msgid "Ratio" +msgstr "Proporzione" + msgid "Select Filament" msgstr "Seleziona filamento" @@ -21082,6 +21489,9 @@ msgstr "Riavvia ora" msgid "NO RAMMING AT ALL" msgstr "NESSUNA SPINTA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocità volumetrica" @@ -21282,12 +21692,14 @@ msgid "Drying-Dehumidifying" msgstr "Essiccazione - Deumidificazione" # AI Translated -msgid " maximum drying temperature is " -msgstr " la temperatura massima di essiccazione è " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "La temperatura massima di essiccazione di %s è %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " la temperatura minima di essiccazione è " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "La temperatura minima di essiccazione di %s è %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21733,6 +22145,130 @@ msgstr "" "Evita le deformazioni\n" "Sapevi che quando si stampano materiali soggetti a deformazioni come l'ABS, aumentare in modo appropriato la temperatura del piano riscaldato può ridurre la probabilità di deformazione?" +#~ msgid "Other" +#~ msgstr "Altro" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Sinistra: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Destra: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "La temperatura massima non può superare " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "La temperatura minima non deve essere inferiore a " + +#~ msgid "up to" +#~ msgstr "fino a" + +#~ msgid "above" +#~ msgstr "sopra" + +#~ msgid "from" +#~ msgstr "da" + +#~ msgid "Configuration package: " +#~ msgstr "Pacchetto di configurazione: " + +#~ msgid " updated to " +#~ msgstr " aggiornato a " + +#~ msgid "Grouping error: " +#~ msgstr "Errore di raggruppamento: " + +#~ msgid " can not be placed in the " +#~ msgstr " non può essere posizionato nel " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " la temperatura massima di essiccazione è " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " la temperatura minima di essiccazione è " + +# AI Translated +#~ msgid "needs" +#~ msgstr "richiede" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "non abilitato" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materiale non pubblicato" + +#~ msgid "Select the language" +#~ msgstr "Seleziona la lingua" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Seleziona plugin" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direzione in cui vengono riempite le superfici superiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n" +#~ "Verso l'esterno inizia dal centro della superficie, in modo che il materiale in eccesso venga spinto verso il bordo dove è meno visibile. Verso l'interno inizia dal bordo e termina con le curve strette al centro.\n" +#~ "L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direzione in cui vengono riempite le superfici inferiori quando si utilizza un motivo basato sul centro (Concentrico, Corde di Archimede, Spirale a ottagramma).\n" +#~ "Verso l'interno inizia ogni superficie con le curve esterne più ampie, il che migliora l'adesione del primo strato sui piatti di stampa dove le curve strette al centro potrebbero non aderire. Verso l'esterno inizia dal centro, spingendo il materiale in eccesso verso il bordo.\n" +#~ "L'impostazione predefinita utilizza l'ordinamento a percorso più breve, che può procedere in entrambe le direzioni." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Se abilitata, la torre di spurgo non verrà stampata sugli strati in cui non viene effettuato alcun cambio di testina. Sui strati con un cambio di testina, l'estrusore si sposterà verso il basso per stampare la torre di spurgo. L'utente dovrà accertarsi che non avvengano collisioni con la stampa." + +#~ msgid "This exports settings to a file." +#~ msgstr "Esporta le impostazioni in un file." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "La funzione di visualizzazione in tempo reale nativa di Wayland richiede il ricevitore video GTK di GStreamer. Installare il modulo gtksink per GStreamer e riavviare OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Impossibile inizializzare il ricevitore video nativo di Wayland GStreamer. Verificare l'installazione del modulo GTK di GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Per questa operazione è necessario Windows Media Player! Desideri abilitare 'Windows Media Player' sul il tuo sistema operativo?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource non è stato registrato correttamente per la riproduzione multimediale! Fare clic su Sì per effettuare nuovamente la registrazione. Sarai promosso due volte" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Componente BambuSource mancante per la riproduzione multimediale! Reinstallare OrcaSlicer o cercare aiuto nella comunità." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "È in uso una versione di BambuSource da un'installazione diversa. La riproduzione video potrebbe non funzionare correttamente! Fare clic su Sì per risolvere il problema." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Nel tuo sistema mancano i codec H.264 per GStreamer, necessari per riprodurre i video. (Provare a installare i pacchetti gstreamer1.0-plugins-bad o gstreamer1.0-libav e riavviare OrcaSlicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Risparmio filamento" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index 1b70ddbf67..68691d6700 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2473,15 +2473,6 @@ msgstr "アップデートが利用可能です。プリセットバンドルの msgid "%s has been removed." msgstr "%sを削除しました。" -msgid "Switching application language" -msgstr "アプリケーション言語の切り替え" - -msgid "Select the language" -msgstr "言語を選択" - -msgid "Language" -msgstr "言語" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2969,6 +2960,10 @@ msgstr "編集" msgid "Merge with" msgstr "結合" +# AI Translated +msgid "Decompose Color" +msgstr "色を分解" + msgid "Delete this filament" msgstr "このフィラメントを削除" @@ -3266,6 +3261,10 @@ msgstr "アセンブリ" msgid "Merge parts to an object" msgstr "パーツをオブジェクトに結合" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "可変積層ピッチと混色サブレイヤーを併用すると、混色の品質が低下する場合があります。" + # AI Translated msgid "Add layers" msgstr "積層を追加" @@ -3721,11 +3720,15 @@ msgstr "Filament Track Switchで現在のフィラメントを引き戻す" msgid "Switch track at Filament Track Switch" msgstr "Filament Track Switchでトラックを切り替える" -msgid "The maximum temperature cannot exceed " -msgstr "最高温度は次の値を超えることはできません " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "最高温度は %d を超えることはできません" -msgid "The minmum temperature should not be less than " -msgstr "最低温度は次の値を下回ることはできません " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "最低温度は %d を下回ることはできません" # AI Translated msgid "Type to filter..." @@ -4604,6 +4607,15 @@ msgstr "" "一時的なGコードの出力Gコードへのコピーに失敗しました。 もしかしたらSDカードが書き込みロックされていませんか?\n" "エラーメッセージ:%1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"一時G-codeから出力G-codeへのコピーに失敗しました。\n" +"エラーメッセージ: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "一時Gコードの出力Gコードへのコピーに失敗しました。 ターゲットデバイスに問題がある可能性があります。もう一度エクスポートするか、別のデバイスを使用してみてください。 破損した出力Gコードは%1%.tmpにあります。" @@ -4818,7 +4830,7 @@ msgstr "" "\n" "値は0にリセットされます。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "垂直シェル厚さを「すべて」に設定すると、交互追加壁が適切に機能しません。" msgid "" @@ -4864,7 +4876,7 @@ msgstr "" "いいえ - 「独立サポート積層ピッチ」を有効にする" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_heightはlayer_heightより小さくする必要があります。\n" @@ -4872,7 +4884,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "ロック深さはスキン深さより小さくする必要があります。\n" @@ -4912,6 +4924,10 @@ msgstr "" "はい - 変更して、スパイラルモードを有効にします\n" "いいえ - 変更せず、スパイラルモードを有効しません" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "造形中" @@ -5342,13 +5358,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "値%sは範囲外です。有効な範囲は%dから%dです。" #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%% か、それとも %s %sですか?\n" -"%s%% の場合ははい、 %s %s はいいえ。" +msgid "Is it %s%% or %s %s?" +msgstr "%s%% か、それとも %s %sですか?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5370,30 +5384,22 @@ msgstr "無効なパターンです。N、N#K、またはオプション#K付き msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無効なフォーマット、%1%であるはずです。" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "システムエージェント" -# AI Translated -msgid "No plugin selected" -msgstr "プラグインが選択されていません" - # AI Translated msgid "Add plugin" msgstr "プラグインを追加" -# AI Translated -msgid "Select plugin" -msgstr "プラグインを選択" - # AI Translated msgid "Remove plugin" msgstr "プラグインを削除" +# AI Translated +msgid "No plugin selected" +msgstr "プラグインが選択されていません" + # AI Translated msgid "Configure" msgstr "設定" @@ -5650,14 +5656,20 @@ msgstr "最適に設定" msgid "Regroup filament" msgstr "フィラメントを再グルーピング" -msgid "up to" -msgstr "最大" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "%1% mm まで" -msgid "above" -msgstr "以上" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "%1% mm 以上" -msgid "from" -msgstr "から" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "%1% mm から %2% mm まで" msgid "Usage" msgstr "使用量" @@ -6020,7 +6032,7 @@ msgstr "ボリューム" msgid "Size:" msgstr "サイズ:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "レイヤー%d、Z = %.2lfmmでG-codeパスの衝突が検出されました。衝突するオブジェクトをもっと離してください(%s <-> %s)。" @@ -6328,16 +6340,24 @@ msgstr "プロジェクトを名前を付けて保存" msgid "Save current project as" msgstr "プロジェクトを名前を付けて保存" +# AI Translated +msgid "Publish 3MF" +msgstr "3MFを公開" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "選択した設定を埋め込んだ3MFファイルをエクスポートします" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMFをインポート" msgid "Load a model" msgstr "モデルを読み込む" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIPアーカイブをインポート" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "ZIPアーカイブ内のモデルをロード" msgid "Import Configs" @@ -7600,6 +7620,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "底面" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "この設定にはプラグイン機能タイプが指定されていません。" + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "この設定には認識できないプラグイン機能タイプが指定されています: " + # AI Translated msgid "Plugin Selection" msgstr "プラグインの選択" @@ -7859,6 +7887,10 @@ msgstr "現在のプレートをカスタマイズ" msgid "The %s nozzle can not print %s." msgstr "%sノズルは%sを印刷できません。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "単一押出機のプリンターで混色フィラメントを印刷すると、フィラメント交換とフラッシュが頻繁に発生し、廃材やノズル/廃棄シュートの詰まりのリスクが大幅に増加する可能性があります。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%と%2%を混合して印刷することは推奨されません。\n" @@ -7984,12 +8016,44 @@ msgstr "AMSと素材を同期" msgid "Set filaments to use" msgstr "フィラメントを選択" +# AI Translated +msgid "Add Mixed Filament" +msgstr "混合フィラメントを追加" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合フィラメント" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "最後の混合フィラメントを削除" + +# AI Translated +msgid "Add mixed filament" +msgstr "混合フィラメントを追加" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合フィラメントのコンポーネントが無効か一致していません。該当する項目を編集し直してください。" + msgid "Search plate, object and part." msgstr "プレート、オブジェクト、パーツを検索。" msgid "Pellets" msgstr "ペレット" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合フィラメントのコンポーネント参照が壊れています" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "編集 / 削除 / 結合" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "対象の混合フィラメントはこの物理フィラメントをコンポーネントとして使用しています。結合するとこの物理フィラメントは削除され、混合フィラメントが無効になる可能性があります。続行しますか?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "操作完了後、%sプロジェクトが閉じられ、新しいプロジェクトが作成されます。" @@ -8133,8 +8197,16 @@ msgstr "これらのプリセット内のG-codeがマシンに損傷を与えな msgid "Customized Preset" msgstr "カスタマイズされたプリセット" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "ファイルのエンコーディング方式はUTF8形式ではありません" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "一部の公開された設定を適用できませんでした:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "一部のフィラメントスロットが変更されました:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "ファイルのエンコーディング方式はUTF-8形式ではありません" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "文字化けがあるようです、ご確認ください" @@ -8155,7 +8227,7 @@ msgstr "オブジェクトの体積が0です" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "ファイル %s 中のオブジェクトが小さいすぎます、ファイルの単位をご確認ください。\n" "mm単位に変換しますか?" @@ -8176,6 +8248,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "マルチパーツ検出" +# AI Translated +msgid "Matching textures to filaments" +msgstr "テクスチャをフィラメントに対応付けています" + +# AI Translated +msgid "Texture Import Warning" +msgstr "テクスチャインポートの警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "これらのファイルを一つのオブジェクトとしてロードしますか?\n" @@ -8389,6 +8469,22 @@ msgstr "" msgid "Sync now" msgstr "今すぐ同期" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "テクスチャのインポートに失敗しました。モデルにテクスチャデータが含まれているようですが、インポート処理を完了できませんでした。モデルはジオメトリのみとしてインポートされます。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "テクスチャの色を適用しています..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3Dビューを更新しています..." + +# AI Translated +msgid "Texture colors applied." +msgstr "テクスチャの色を適用しました。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "変更したプリセットをプロジェクト内に保存するか、破棄もできます" @@ -8521,6 +8617,21 @@ msgstr "名前を付けて保存:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%sを送信しました、プリンターにて確認できます" +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MFファイルを次の名前で公開:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"公開する3MFファイルのエクスポートに失敗しました。\n" +"フォルダーがオンラインで存在するか、他のプログラムがファイルを開いていないか確認してください。" + +msgid "Publish" +msgstr "公開する" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ノズルタイプが設定されていません。ノズルを設定して再試行してください。" @@ -8734,9 +8845,6 @@ msgstr "続行しますか?" msgid "Language selection" msgstr "言語選択" -msgid "Switching application language while some presets are modified." -msgstr "アプリケーション言語を切り替える時に、プリセットの変更があります" - msgid "Asia-Pacific" msgstr "アジア太平洋地域" @@ -8841,6 +8949,9 @@ msgstr "現在のインスタンスのパス: " msgid "General" msgstr "一般" +msgid "Language" +msgstr "言語" + msgid "Metric" msgstr "メートル" @@ -9305,9 +9416,6 @@ msgstr "スライスプレビューで積層スライダーを操作する際、 msgid "Dimmed layer brightness" msgstr "暗くした積層の明るさ" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9676,6 +9784,10 @@ msgstr "スパイラル" msgid "First layer filament sequence" msgstr "初期レイヤーフィラメント順序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "フィラメントリストに混合フィラメントが含まれています。カスタムフィラメント順序は適用されません。" + msgid "By Layer" msgstr "レイヤー別" @@ -9704,9 +9816,6 @@ msgstr "モデル公開ページに移動" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "注意: 準備するには数分かかる場合があります、暫くお待ち下さい。" -msgid "Publish" -msgstr "公開する" - msgid "Publish was canceled" msgstr "公開は取り消しました" @@ -9722,6 +9831,81 @@ msgstr "データをアップロード中" msgid "Jump to webpage" msgstr "ウェブページに移動" +# AI Translated +msgid "Material" +msgstr "材料" + +# AI Translated +msgid "Mixed filament" +msgstr "混合フィラメント" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "一部の混合フィラメントは、公開されないフィラメントに依存しています:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "フィラメント %d (混合)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1%には%2%が必要ですが、有効化されていません。" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1%には%2%が必要ですが、その材料は公開されません。" + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "混合フィラメントを公開するには、使用しているすべてのフィラメントを有効にし、完全公開を選ぶか、タイプの要件を満たしてください。" + +# AI Translated +msgid "Publish anyway" +msgstr "それでも公開" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MFを公開..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "3MFファイルで公開する設定を選択してください" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF公開のWiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF公開のビデオガイド" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "混合フィラメント - 上の「有効化」を選択すると全体が公開されます" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "この混合フィラメントを公開し、その構成フィラメントを有効化+完全公開します" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "このフィラメントスロットを3MFファイルで公開します" + +# AI Translated +msgid "Full Publish" +msgstr "完全公開" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "このスロットのフィラメント全体を3MFファイルに埋め込みます" + +# AI Translated +msgid "Filter non-selected" +msgstr "未選択を絞り込み" + #, c-format, boost-format msgid "Save %s as" msgstr "%sを名前つけて保存" @@ -9739,6 +9923,10 @@ msgstr "親プリセットから継承したすべての値をこのプリセッ msgid "Detach from parent" msgstr "親から分離" +# AI Translated +msgid "Save without parent" +msgstr "親なしで保存" + # AI Translated msgid "Unique preset" msgstr "独立したプリセット" @@ -10445,9 +10633,17 @@ msgstr "クランピング検出にはプライムタワーが必要です。プ msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "正確なZ高さとプライムタワーの両方を有効にすると、スライスエラーが発生する可能性があります。それでも正確なZ高さを有効にしますか?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "スムーズタイムラプスは全積層にプライムタワーが必要なため、「スパース層なし」とは併用できません。「スパース層なし」をオフにしました。" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "スムーズタイムラプスビデオを作成するにはプライムタワーが必要です。プライムタワーを有効にしますか?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "「スパース層なし」は、全積層にプライムタワーが必要なスムーズタイムラプスとは併用できません。タイムラプスを通常モードに切り替えました。" + msgid "Still print by object?" msgstr "それでもオブジェクト別に印刷しますか?" @@ -10617,7 +10813,7 @@ msgid "Junction Deviation" msgstr "接合偏差" msgid "Jerk(XY)" -msgstr "ジャーク(XY)" +msgstr "Jerk(XY)" msgid "Raft" msgstr "ラフト" @@ -10814,9 +11010,6 @@ msgstr "互換性のあるプロセスプロファイル" msgid "Printable space" msgstr "造形可能領域" -msgid "Printer Agent" -msgstr "プリンターエージェント" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "プリンター通信用のネットワークエージェント実装を選択します。使用可能なエージェントは起動時に登録されます。" @@ -10914,7 +11107,7 @@ msgid "Acceleration limitation" msgstr "加速制限" msgid "Jerk limitation" -msgstr "振動特性" +msgstr "Jerk制限" msgid "Single extruder multi-material setup" msgstr "シングルエクストルーダー マルチマテリアル設定" @@ -11068,12 +11261,12 @@ msgid "No modifications need to be copied." msgstr "コピーが必要な変更はありません。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "パラメータをコピー" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%sのパラメータを変更" # AI Translated @@ -11229,14 +11422,6 @@ msgstr "エクストルーダー数" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "全てのプリセットを表示" @@ -11591,33 +11776,6 @@ msgstr "フィラメントを入替える為のフラッシュ量" msgid "Please choose the filament colour" msgstr "フィラメントの色を選択してください" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "ネイティブWaylandのライブビューにはGStreamer GTKビデオシンクが必要です。GStreamer用のgtksinkプラグインをインストールし、OrcaSlicerを再起動してください。" - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "ネイティブWaylandのGStreamerビデオシンクの初期化に失敗しました。GStreamer GTKプラグインのインストール状況をご確認ください。" - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "このタスクにはWindows Media Playerが必要です!お使いのOSで「Windows Media Player」を有効にしますか?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "メディア再生用のBambuSourceが正しく登録されていません!「はい」を押して再登録してください。確認が2回表示されます" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "メディア再生用のBambuSourceコンポーネントが見つかりません!OrcaSlicerを再インストールするかコミュニティに助けを求めてください。" - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "別のインストール環境のBambuSourceを使用しているため、動画が正しく再生されない可能性があります!「はい」を押して修正してください。" - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "お使いのシステムには、動画再生に必要なGStreamer用のH.264コーデックがありません。(gstreamer1.0-plugins-badまたはgstreamer1.0-libavパッケージをインストールし、Orca Slicerを再起動してみてください)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "クラウドエージェントが利用できません。OrcaSlicerを再起動して再試行してください。" @@ -12115,15 +12273,22 @@ msgstr "修復を取消しました" msgid "Copying of file %1% to %2% failed: %3%" msgstr "ファイル %1% を %2% へのコピーが失敗しました (%3%)" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "新しいベンダープロファイルをダウンロード中: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "設定パッケージ: %1% を %2% に更新しました" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "ベンダープロファイルのダウンロードに失敗しました: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "構成を更新する前に、未保存の変更をご確認ください" -msgid "Configuration package: " -msgstr "設定パッケージ: " - -msgid " updated to " -msgstr " を更新しました " - msgid "Open G-code file:" msgstr "G-codeファイルを開く" @@ -12187,11 +12352,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "インプットシェーピングはKlipper、RepRapFirmware、Marlin 2のみが対応しています。" -msgid "Grouping error: " -msgstr "グルーピングエラー: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "グルーピングエラー: %1% は左ノズルに配置できません" -msgid " can not be placed in the " -msgstr " に配置できません " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "グルーピングエラー: %1% は右ノズルに配置できません" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12305,6 +12474,10 @@ msgstr "%1% は他のオブジェクトと近すぎるため、衝突の可能 msgid "%1% is too tall, and collisions will be caused." msgstr "%1% は高すぎます、衝突の可能性があります。" +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "モデルとプライムタワーの相対位置が「スパース層なし」機能の要件を満たしていません。相対位置を調整するか、モデルの高さを下げるか、「スパース層なし」をオフにしてください。" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "が除外領域に近すぎます。衝突の可能性があります。" @@ -12343,6 +12516,10 @@ msgstr "それでも印刷する場合は、環境設定 / 制御 / スライス msgid "No extrusions under current settings." msgstr "現在の設定では造形しません" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "グラデーション付きの混合フィラメントが使用されていますが、「混色サブレイヤー」が無効です。グラデーションは印刷されません。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "オブジェクト順で造形するでは、この機能を使用できません。" @@ -12379,6 +12556,10 @@ msgstr "モデルのサイズを小さくするか、現在のプリント設定 msgid "Variable layer height is not supported with Organic supports." msgstr "可変レイヤー高さはオーガニックサポートではサポートされていません。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "ワイプタワーのフィラメントに混合フィラメントは使用できません。" + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "ノズル径やフィラメント径が異なる場合、プライムタワーを有効にすると正しく動作しないことがあります。非常に実験的な機能ですので、慎重にお進みください。" @@ -12485,7 +12666,7 @@ msgid "Plate %d: %s does not support filament %s" msgstr "プレート %d: %s がフィラメント %s を使用できません" msgid "Setting the jerk speed too low could lead to artifacts on curved surfaces" -msgstr "ジャーク速度を低く設定しすぎると曲面にアーティファクトが発生する可能性があります" +msgstr "Jerk速度を低く設定しすぎると曲面にアーティファクトが発生する可能性があります" # AI Translated msgid "" @@ -12669,6 +12850,9 @@ msgstr "G-codeの代わりに3MFを使用" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "プリンターが印刷ジョブとして3MFファイルを受け付ける場合に有効にします。有効にすると、Orca Slicerはスライス済みファイルを通常の.gcodeファイルではなく.gcode.3mfとして送信します。" +msgid "Printer Agent" +msgstr "プリンターエージェント" + msgid "Select the network agent implementation for printer communication." msgstr "プリンター通信用のネットワークエージェント実装を選択します。" @@ -12756,14 +12940,12 @@ msgstr "mm 或は %" msgid "Other layers" msgstr "他の層" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはCool Plate SuperTackでの印刷に対応していません。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが常温プレートで使用できないという意味です。" -# AI Translated msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはTextured Cool Plateでの印刷に対応していません。" @@ -12774,7 +12956,7 @@ msgid "This is the bed temperature for layers except for the first one. A value msgstr "ベッドの温度です(1層目以外)。値が0の場合、フィラメントが高温プレートで使用できないという意味です。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -msgstr "1層目以外のベッド温度。値が0の場合、フィラメントがPEIプレートをサポートしない意味をします。" +msgstr "1層目を除く各層のベッド温度です。0の場合、そのフィラメントはTextured PEI Plateでの印刷に対応していません。" msgid "First layer" msgstr "1層目" @@ -13780,6 +13962,10 @@ msgstr "整列直線" msgid "Concentric" msgstr "同心" +# AI Translated +msgid "Spiral Inset" +msgstr "スパイラルインセット" + msgid "Hilbert Curve" msgstr "ヒルベルト曲線" @@ -13873,13 +14059,13 @@ msgstr "上面の充填順序" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、上面を充填する方向です。\n" -"外向きは面の中心から始まるため、余分な材料が最も目立たない縁へ押し出されます。内向きは縁から始まり、中心の細かいカーブで終わります。\n" -"デフォルトは最短経路順で、どちらの方向にもなり得ます。" +"中心を起点とするパターン(同心、スパイラルインセット、アルキメデス螺旋、オクタグラムスパイラル)を使用する場合の、トップ面を充填する方向です。\n" +"外側は面の中心から始まるため、余分な材料は最も目立たない縁へ押し出されます。内側は縁から始まり、中心の細かいカーブで終わります。\n" +"デフォルトは最短経路順を使用し、どちらの方向にも進むことがあります。" # AI Translated msgid "Bottom surface fill order" @@ -13887,13 +14073,13 @@ msgstr "底面の充填順序" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、底面を充填する方向です。\n" -"内向きは各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも1層目の密着性が向上します。外向きは中心から始まり、余分な材料を縁へ押し出します。\n" -"デフォルトは最短経路順で、どちらの方向にもなり得ます。" +"中心を起点とするパターン(同心、スパイラルインセット、アルキメデス螺旋、オクタグラムスパイラル)を使用する場合の、底面を充填する方向です。\n" +"内側は各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも1層目の接着が改善します。外側は中心から始まり、余分な材料を縁へ押し出します。\n" +"デフォルトは最短経路順を使用し、どちらの方向にも進むことがあります。" msgid "Internal solid infill pattern" msgstr "内部ソリッドインフィルパターン" @@ -14002,6 +14188,14 @@ msgstr "反時計回り" msgid "Clockwise" msgstr "時計回り" +# AI Translated +msgid "Distance to rod" +msgstr "ロッドまでの距離" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "ノズル先端からロッドの遠い側の端までの水平距離です。オブジェクト順の造形で衝突を回避するために使用されます。" + msgid "Height to rod" msgstr "レールまでの高さ" @@ -14200,6 +14394,8 @@ msgstr "積層時間" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "パーツ冷却ファンは、積層造形時間がこの値より短い時に作動します。" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14518,6 +14714,62 @@ msgstr "サポート材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "サポート素材は、サポート又はサポート接触面の造形によく使われます。" +# AI Translated +msgid "Is mixed filament" +msgstr "混合フィラメントかどうか" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "このフィラメントスロットが複数の物理フィラメントで構成される混合フィラメントかどうか" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合フィラメントのコンポーネント" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "構成フィラメントの番号(1 始まり)をカンマ区切りで指定します。例: \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合フィラメントのサブレイヤー比率" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "合計が 1.0 になる比率をカンマ区切りで指定します。例: \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合フィラメントのグラデーション" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "混合フィラメントのサブレイヤーに対して Z 方向のグラデーションモードを有効にします。有効にすると、サブレイヤーの比率が積層ごとに直線的に変化します。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合フィラメントのグラデーション範囲" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "グラデーションモードにおける最初のコンポーネントの開始比率と終了比率。カンマ区切りの 2 つの値で指定します。例: \"0.10,0.90\" は 10% から 90% を意味します。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合フィラメントのグラデーションカーブ" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z 方向の進行度を最初のコンポーネントの比率に対応付ける、Photoshop 風のカスタムカーブ(省略可)。制御点を縦棒区切りでエンコードし、\"x,y\"(旧形式)または接線を上書きする場合は \"x,y,m_in,m_out\" の形式で指定します(空欄または \"nan\" は PCHIP の既定値を使用します)。x は [0,1] の範囲で、y は設定された比率範囲に制限されます。例: \"0,0.15|0.5,0.50|1,0.85\"。空欄の場合は線形の gradient_range が使用されます。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合フィラメントのパーツ別グラデーション" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "グラデーションモードが有効な場合、アセンブリ全体を 1 つの Z 範囲として扱うのではなく、アセンブリ内の各パーツに個別にグラデーションを適用します。" + msgid "Filament printable" msgstr "フィラメント印刷可能" @@ -14750,7 +15002,7 @@ msgid "Klipper's max_accel_to_decel will be adjusted to this %% of acceleration. msgstr "Klipperのmax_accel_to_decelが、加速度のこの%%に調整されます。" msgid "Default jerk." -msgstr "デフォルトジャーク。" +msgstr "デフォルトのJerkです。" # AI Translated msgid "Marlin Firmware Junction Deviation (replaces the traditional XY Jerk setting)." @@ -15841,28 +16093,28 @@ msgid "Maximum acceleration of the E axis" msgstr "E軸最大加速度" msgid "Maximum jerk X" -msgstr "最大振動 X" +msgstr "最大Jerk X" msgid "Maximum jerk Y" -msgstr "最大振動 Y" +msgstr "最大Jerk Y" msgid "Maximum jerk Z" -msgstr "最大振動 Z" +msgstr "最大Jerk Z" msgid "Maximum jerk E" -msgstr "最大振動 E" +msgstr "最大Jerk E" msgid "Maximum jerk of the X axis" -msgstr "最大振動 X" +msgstr "X軸最大Jerk" msgid "Maximum jerk of the Y axis" -msgstr "最大振動 Y" +msgstr "Y軸最大Jerk" msgid "Maximum jerk of the Z axis" -msgstr "最大振動 Z" +msgstr "Z軸最大Jerk" msgid "Maximum jerk of the E axis" -msgstr "最大振動 E" +msgstr "E軸最大Jerk" msgid "Maximum Junction Deviation" msgstr "最大接合偏差" @@ -15894,6 +16146,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y軸の許容最大出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15904,6 +16157,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y軸のマシンベッド質量" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16238,7 +16492,7 @@ msgstr "カッター領域から廃料排出口までの終始点" msgid "Reduce infill retraction" msgstr "インフィルのリトラクション低減" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "インフィル領域内の移動はリトラクションしません。造形時間を節約できます。" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16281,6 +16535,20 @@ msgstr "オーバーハングを検出" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "この設定により、線幅に対するオーバーハングの割合を検出し、異なる速度で造形します。100%%のオーバーハングの場合、ブリッジの速度が使用されます。" +# AI Translated +msgid "Print unsupported walls last" +msgstr "支えのない壁を最後に造形" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"完全に宙に浮いている壁面ループは、支えとなるものができてから造形されます。\n" +"壁の順序にかかわらず、同じアイランドの他の壁の後に、最も内側から順に押し出されます。\n" +"この積層のブリッジだけが固定できるループは、それらのブリッジが造形されるまで待ちます。一方、支えのある壁に沿って走るループは、それをアンカーとして必要とするインフィルの前という位置を保ちます。" + # AI Translated msgid "Outer walls" msgstr "外壁" @@ -16423,7 +16691,7 @@ msgstr "ワイプ後のリトラクション量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "ワイプ後の高速リトラクションの長さで、リトラクション長に対する割合です。\n" @@ -16474,7 +16742,7 @@ msgstr "ツール交換の前にリトラクションが行われるとき、指 msgid "Z-hop height" msgstr "Zホップの高さ" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "リトラクション時に、ノズルを少し上げてから移動します。この動作でモデルとの衝突を回避できます。" # AI Translated @@ -16773,6 +17041,39 @@ msgstr "ループ上でワイプ" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "閉ループ押出における継ぎ目を目立たなくするため、押出機がループを離れる前にわずかに内側へ移動します。" +# AI Translated +msgid "Wipe inward" +msgstr "内側へ拭き上げ" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"穴の輪郭を含む外壁にのみ適用されます。拭き上げ中に高温のノズルを造形済みの内壁へ向かって動かし、造形したばかりの樹脂の再加熱と継ぎ目の跡を抑えます。\n" +"\n" +"拭き上げの跡が目立ちやすい積層ピッチ0.1 mm未満で特に有効です。\n" +"\n" +"隣接する内壁がまだ造形されていない場合(壁が1本のみの領域や、壁の順序が外側/内側の場合)、または細かい角や継ぎ目の隙間などで支えのある内向きの経路が見つからない場合は、通常の拭き上げを使用します。" + +# AI Translated +msgid "Wipe inward distance" +msgstr "内側への拭き上げ距離" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"拭き上げ経路を外周から離す距離で、ミリメートルまたは実際の外壁の押出線幅に対する割合で指定します。\n" +"\n" +"例えば50%では、経路を外壁幅の半分だけずらします。実効オフセットは実際の外壁幅と隣接する壁までの利用可能な間隔の両方で制限されるため、100%を超える値や同等の絶対距離を指定しても追加の効果はありません。0に設定するとオフセットは無効になります。" + # AI Translated msgid "Wipe before external loop" msgstr "外周ループ前のワイプ" @@ -17075,8 +17376,9 @@ msgstr "印刷温度に達するのを待たずに新しいツールを取り付 msgid "No sparse layers (beta)" msgstr "スパース層なし (ベータ)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "有効にすると、ツール変更がない場合にワイプタワーをプリントしなくなります。 ワイプタワーの高さが同期しなくなりますので、ツールチェンジのあるレイヤーでは、エクストルーダーがプリント面より下方に移動してワイプタワーをプリントするケースもあります。 この場合、プリントした部分との衝突がないことをご自身で確認しておく必要があります。" +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "有効にすると、ツール交換のない積層ではワイプタワーを造形しません。ツール交換のある積層では押出機が下降してワイプタワーを造形するため、タワーはモデルより下に位置し、ツールヘッドがそこまで下りる必要があります。造形済みのオブジェクトと衝突するような配置は拒否されます。全積層にタワーが必要なスムーズタイムラプスやノズル付着検出では効果がありません。" msgid "Prime all printing extruders" msgstr "全てのエクストルーダーでプライムを実施" @@ -17102,6 +17404,34 @@ msgstr "" msgid "Cyclic" msgstr "循環" +# AI Translated +msgid "Cyclic order" +msgstr "循環順" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"循環ツール交換順で使用するカスタムフィラメント順序です。フィラメント番号をカンマ区切りで指定します(例: 「3,2,1,4」)。\n" +"各積層はこの順序に従ってフィラメントを造形します。記載のないフィラメントは最後に、昇順で造形されます。\n" +"空欄のままにすると、フィラメントを昇順で巡回します。" + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "循環順を1層目にも適用" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"循環ツール交換順を1層目にも適用します。\n" +"既定では無効です。1層目は代わりにベッド接着が最良になるよう並べ替えられるためです。1層目の小さく壊れやすい部分を造形するフィラメントを最後に回すことで、その後のツール交換や移動が、弱く固定された部分を剥がしにくくなります。この1層目の順序は、1層目用のカスタムフィラメント順序が設定されていればそれも尊重します。循環順の利点(ツール交換が増えることで各積層の冷却時間が長くなる)は、接着のために低速かつ高温で造形される1層目には当てはまりません。\n" +"接着の最適化を犠牲にしてでも、1層目を含む全積層でまったく同じツール順序が必要な場合にのみ有効にしてください。" + msgid "Slice gap closing radius" msgstr "隙間充填半径" @@ -17112,9 +17442,6 @@ msgstr "三角メッシュのスライス時に、隙間閉じ半径の2倍よ msgid "Slicing Mode" msgstr "スライシングモード" -msgid "Other" -msgstr "その他" - # AI Translated msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "3DLabPrintの飛行機モデルには「偶奇」を使用してください。モデル内のすべての穴を閉じるには「穴を閉じる」を使用してください。" @@ -17633,6 +17960,14 @@ msgstr "" "\n" "下の「ワイプ前のリトラクション量」設定に値を設定すると、超過分のリトラクションはワイプの前に行われます。それ以外の場合はワイプの後に行われます。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色サブレイヤー" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "混色サブレイヤーへの分割を有効にします。有効にすると、混色フィラメントを含む積層がサブレイヤーに分割され、色を混ぜる効果が得られます。" + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "ワイプタワーは、ノズルに残った樹脂を除去し、ノズル内のチャンバー圧力を安定させることで、オブジェクト印刷時の外観不良を防ぐために使用できます。" @@ -18167,6 +18502,14 @@ msgstr "チェックなし" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "G-codeパスの競合チェックなど、いかなる妥当性チェックも実行しません。" +# AI Translated +msgid "Strict mode" +msgstr "厳格モード" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "サポートが無効なのにサポートが必要なモデルなど、通常はログに記録されるだけの重大でない警告がスライス時に発生した場合、ゼロ以外の終了コードで終了します。わずかに壊れたスライス結果を決して出荷してはならないCIやスクリプト処理で使用してください。そうした警告はいずれも、Linuxでのみ書き出されるresult.jsonの`warnings`配列に、安定したクラス名とともに列挙されます。サポート確認を省略する--no-checkとは併用できません。" + # AI Translated msgid "Normative check" msgstr "規範チェック" @@ -18181,11 +18524,28 @@ msgstr "出力モデル情報" msgid "This outputs the model’s information." msgstr "出力するモデル情報です。" +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "メッシュを検査 (JSONをstdoutへ)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "読み込んだ各オブジェクトのJSON要約をstdoutに出力して終了します。バウンディングボックスと、設置できる凸包の面、およびそれらの法線・面積・中心が含まれます。--ground-*オプションはこれらの面から選択します。--infoの機械可読版です。" + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "ペイントを検査 (JSONをstdoutへ)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "読み込んだモデルに保存済みの各ペイント層(サポート、継ぎ目、MMUカラー、ファジー壁面)について、状態ごとの面数・表面積・メッシュ座標系のバウンディングボックスを構造化JSONで出力して終了します。GUIでペイントギズモを開く操作の機械可読版です。" + msgid "Export Settings" msgstr "エクスポート設定" -msgid "This exports settings to a file." -msgstr "設定をファイルにエクスポートします。" +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "設定をファイルにエクスポートします。- を指定するとstdoutに書き出します。" msgid "Send progress to pipe" msgstr "パイプに進捗を送信" @@ -18246,6 +18606,30 @@ msgstr "Y軸周りの回転" msgid "Rotation angle around the Y axis in degrees." msgstr "Y軸を中心とした回転角(度単位)。" +# AI Translated +msgid "Ground largest face" +msgstr "最大面を接地" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "各オブジェクトを凸包の最大面で接地させ、ベッドへ落とします。同じ大きさの面が複数ある場合は、すでに下を向いている面が保持されます。載せられるだけの大きさの面がないオブジェクトはそのまま残ります。変換はコマンドラインの順に実行されるため、このオプションより前に指定した回転は尊重されます。--orient 1 はすべての変換の後に実行され、向きを置き換えます。" + +# AI Translated +msgid "Ground face by normal" +msgstr "法線で面を接地" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "各オブジェクトを、外向き法線が方向 NX,NY,NZ に最も近い凸包の面で接地させ、ベッドへ落とします。方向はオブジェクト座標系で指定します。この座標系はこのオプションより前に指定した回転を含み、入力ファイルがオブジェクトを回転していない限りプレートの軸と一致します。例えば 1,0,0 はオブジェクトを +X 側で立たせます。--orient 1 はすべての変換の後に実行され、向きを置き換えます。" + +# AI Translated +msgid "Ground face at point" +msgstr "指定点の面を接地" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "各オブジェクトを、点 X,Y,Z を含む凸包の面で接地させ、ベッドへ落とします。点はオブジェクト座標系で指定します。この座標系はこのオプションより前に指定した回転を含み、--inspect-mesh はこの座標系で面の中心を報告します。該当する面がないオブジェクトはそのまま残り、どのオブジェクトにも該当面がない場合は実行が失敗します。--orient 1 はすべての変換の後に実行され、向きを置き換えます。" + msgid "Scale the model by a float factor." msgstr "指定した比率で伸縮する" @@ -18439,10 +18823,10 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "新しいバージョンの3MFのスライスを許可します。" msgid "Current Z-hop" -msgstr "現在のz-hop" +msgstr "現在のZ-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "カスタムGコードブロックの先頭に存在するz-hopを含む。" +msgstr "カスタムGコードブロックの先頭に存在するZ-hopを含む。" msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "カスタム G コード ブロックの先頭のエクストルーダーのモーターの位置。 カスタム G コードで動かしたとき、PrusaSlicer が制御を取り戻したときにどこから移動したかを認識できるように、この変数に書き込む必要があります。" @@ -18804,6 +19188,10 @@ msgstr "モデルファイルのメッシュ処理に失敗したか、有効な msgid "The supplied file couldn't be read because it's empty." msgstr "提供されたファイルは空であるため読み込めませんでした。" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "ファイル形式に互換性がないため、解析できません。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "ファイル形式が不明です。入力ファイルの拡張子は .stl、.obj、.amf(.xml)である必要があります。" @@ -20340,19 +20728,19 @@ msgstr "プリンタ、フィラメント、加工プリセットに変更があ msgid "Only display the filament names with changes to filament presets." msgstr "フィラメントプリセットを変更したフィラメント名のみを表示します。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "ユーザープリンタプリセットを持つプリンタ名のみが表示され、選択した各プリセットがZIPとしてエクスポートされます。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "ユーザーフィラメントプリセットを含むフィラメント名のみが表示されます、 \n" "選択した各フィラメント名に含まれるすべてのユーザーフィラメントプリセットがZIP形式でエクスポートされます。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "変更されたプロセスプリセットがあるプリンタ名のみが表示され、選択した各プリンタ名にあるすべてのユーザープロセスプリセットがZIP形式でエクスポートされます。" msgid "Please select at least one printer or filament." @@ -20596,7 +20984,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "問題の原因を特定するために情報が必要です。詳しい手順はWikiページをご覧ください。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "「パック」ボタンは、現在のセッションのプロジェクトファイルとログをzipファイルにまとめます。" # AI Translated @@ -20652,7 +21040,7 @@ msgid "Stored logs" msgstr "保存されたログ" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "保存されたすべてのログをzipファイルにまとめます。" # AI Translated @@ -20740,7 +21128,7 @@ msgid "Authorizing..." msgstr "認証中..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "エラー。認証用のAPIトークンを取得できません" # AI Translated @@ -21226,8 +21614,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "スマートフィラメント割り当てを有効にする: 1つのフィラメントを複数のノズルに割り当てて節約を最大化します" # AI Translated -msgid "Fila Saving" -msgstr "フィラ節約" +msgid "File Saving" +msgstr "ファイル保存" msgid "Don't remind me again" msgstr "再度通知しない" @@ -21555,6 +21943,18 @@ msgstr "この操作は元に戻せません。続行しますか?" msgid "Skipping objects." msgstr "オブジェクトをスキップ中。" +# AI Translated +msgid "Material Ratio" +msgstr "材料比率" + +# AI Translated +msgid "Model Height" +msgstr "モデル高さ" + +# AI Translated +msgid "Ratio" +msgstr "比率" + msgid "Select Filament" msgstr "フィラメントを選択" @@ -21634,6 +22034,9 @@ msgstr "今すぐ再起動" msgid "NO RAMMING AT ALL" msgstr "ラミングなし" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "体積速度" @@ -21834,12 +22237,14 @@ msgid "Drying-Dehumidifying" msgstr "乾燥 - 除湿" # AI Translated -msgid " maximum drying temperature is " -msgstr " の最高乾燥温度は " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s の最高乾燥温度は %d°C です。" # AI Translated -msgid " minimum drying temperature is " -msgstr " の最低乾燥温度は " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s の最低乾燥温度は %d°C です。" # AI Translated msgid "This filament may not be completely dried." @@ -22296,6 +22701,136 @@ msgstr "" "反りを避ける\n" "ABSのような反りやすい素材を印刷する場合、ヒートベッドの温度を適切に上げることで、反りが発生する確率を下げることができることをご存知ですか?" +#~ msgid "Other" +#~ msgstr "その他" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "左: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "右: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "最高温度は次の値を超えることはできません " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "最低温度は次の値を下回ることはできません " + +#~ msgid "up to" +#~ msgstr "最大" + +#~ msgid "above" +#~ msgstr "以上" + +#~ msgid "from" +#~ msgstr "から" + +#~ msgid "Configuration package: " +#~ msgstr "設定パッケージ: " + +#~ msgid " updated to " +#~ msgstr " を更新しました " + +#~ msgid "Grouping error: " +#~ msgstr "グルーピングエラー: " + +#~ msgid " can not be placed in the " +#~ msgstr " に配置できません " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " の最高乾燥温度は " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " の最低乾燥温度は " + +# AI Translated +#~ msgid "needs" +#~ msgstr "が必要" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "未有効" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "材料が未公開" + +#~ msgid "Select the language" +#~ msgstr "言語を選択" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "プラグインを選択" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、上面を充填する方向です。\n" +#~ "外向きは面の中心から始まるため、余分な材料が最も目立たない縁へ押し出されます。内向きは縁から始まり、中心の細かいカーブで終わります。\n" +#~ "デフォルトは最短経路順で、どちらの方向にもなり得ます。" + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "中心を基準とするパターン (同心円、アルキメデス弦、八芒星スパイラル) を使用する場合に、底面を充填する方向です。\n" +#~ "内向きは各面を幅の広い外側のカーブから始めるため、中心の細かいカーブが定着しにくいベッドでも1層目の密着性が向上します。外向きは中心から始まり、余分な材料を縁へ押し出します。\n" +#~ "デフォルトは最短経路順で、どちらの方向にもなり得ます。" + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "有効にすると、ツール変更がない場合にワイプタワーをプリントしなくなります。 ワイプタワーの高さが同期しなくなりますので、ツールチェンジのあるレイヤーでは、エクストルーダーがプリント面より下方に移動してワイプタワーをプリントするケースもあります。 この場合、プリントした部分との衝突がないことをご自身で確認しておく必要があります。" + +#~ msgid "This exports settings to a file." +#~ msgstr "設定をファイルにエクスポートします。" + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "ネイティブWaylandのライブビューにはGStreamer GTKビデオシンクが必要です。GStreamer用のgtksinkプラグインをインストールし、OrcaSlicerを再起動してください。" + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "ネイティブWaylandのGStreamerビデオシンクの初期化に失敗しました。GStreamer GTKプラグインのインストール状況をご確認ください。" + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "このタスクにはWindows Media Playerが必要です!お使いのOSで「Windows Media Player」を有効にしますか?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "メディア再生用のBambuSourceが正しく登録されていません!「はい」を押して再登録してください。確認が2回表示されます" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "メディア再生用のBambuSourceコンポーネントが見つかりません!OrcaSlicerを再インストールするかコミュニティに助けを求めてください。" + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "別のインストール環境のBambuSourceを使用しているため、動画が正しく再生されない可能性があります!「はい」を押して修正してください。" + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "お使いのシステムには、動画再生に必要なGStreamer用のH.264コーデックがありません。(gstreamer1.0-plugins-badまたはgstreamer1.0-libavパッケージをインストールし、Orca Slicerを再起動してみてください)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "フィラ節約" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 767674e525..dccc289f47 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2025-06-02 17:12+0900\n" "Last-Translator: crwusiz \n" "Language-Team: \n" @@ -2481,15 +2481,6 @@ msgstr "사용 가능한 업데이트가 있습니다. 사전 설정 번들 대 msgid "%s has been removed." msgstr "%s이(가) 제거되었습니다." -msgid "Switching application language" -msgstr "응용 프로그램 언어 전환" - -msgid "Select the language" -msgstr "언어 선택" - -msgid "Language" -msgstr "언어" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2970,6 +2961,10 @@ msgstr "편집" msgid "Merge with" msgstr "병합" +# AI Translated +msgid "Decompose Color" +msgstr "색상 분해" + msgid "Delete this filament" msgstr "이 필라멘트 삭제" @@ -3266,6 +3261,10 @@ msgstr "조립" msgid "Merge parts to an object" msgstr "부품을 하나의 객체로 병합" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "가변 레이어 높이를 혼색 서브레이어와 함께 사용하면 색상 혼합 품질이 떨어질 수 있습니다." + # AI Translated msgid "Add layers" msgstr "레이어 추가" @@ -3721,11 +3720,15 @@ msgstr "Filament Track Switch에서 현재 필라멘트 되감기" msgid "Switch track at Filament Track Switch" msgstr "Filament Track Switch에서 트랙 전환" -msgid "The maximum temperature cannot exceed " -msgstr "최대 온도는 다음 값을 초과할 수 없습니다 " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "최대 온도는 %d을(를) 초과할 수 없습니다" -msgid "The minmum temperature should not be less than " -msgstr "최소 온도는 다음 값보다 낮아서는 안 됩니다 " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "최소 온도는 %d보다 낮을 수 없습니다" # AI Translated msgid "Type to filter..." @@ -4619,6 +4622,15 @@ msgstr "" "임시 Gcode를 출력 Gcode로 복사하지 못했습니다. SD 카드가 쓰기 잠겨 있나요?\n" "오류 메시지입니다: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"임시 G-code를 출력 G-code로 복사하지 못했습니다.\n" +"오류 메시지: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "임시 Gcode를 출력 Gcode로 복사하지 못했습니다. 대상 장치에 문제가 있을 수 있으니 다시 내보내거나 다른 장치를 사용해 보세요. 손상된 출력 Gcode는 %1%.tmp에 있습니다." @@ -4829,7 +4841,7 @@ msgstr "" "\n" "값이 0으로 재설정됩니다." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "세로 쉘 두께가 모두로 설정된 경우 대체 여분의 벽이 제대로 작동하지 않습니다." msgid "" @@ -4875,7 +4887,7 @@ msgstr "" "아니요 - 독립적 서포트 레이어 높이 유지" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "심_경사_시작_높이는 레이어_높이보다 작아야 합니다.\n" @@ -4883,7 +4895,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "잠금 깊이는 스킨 깊이보다 작아야 합니다.\n" @@ -4923,6 +4935,10 @@ msgstr "" "예 - 이 설정을 변경하고 나선 모드를 자동으로 활성화합니다\n" "아니오 - 이번에는 나선 모드 사용을 포기합니다" +# AI Translated +msgid "N/A" +msgstr "해당 없음" + msgid "Printing" msgstr "출력 중" @@ -5353,14 +5369,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "값 %s이 범위를 벗어났습니다. 유효한 범위는 %d에서 %d까지입니다." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%% 또는 %s %s입니까?\n" -"%s%%에 대해 예,\n" -"%s %s에 대해 아니요." +msgid "Is it %s%% or %s %s?" +msgstr "%s%% 또는 %s %s입니까?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5382,30 +5395,22 @@ msgstr "잘못된 패턴입니다. N, N#K 또는 항목당 선택적 #K가 있 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "잘못된 형식입니다. 필요한 벡터 형식: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "해당 없음" - # AI Translated msgid "System agents" msgstr "시스템 에이전트" -# AI Translated -msgid "No plugin selected" -msgstr "선택된 플러그인 없음" - # AI Translated msgid "Add plugin" msgstr "플러그인 추가" -# AI Translated -msgid "Select plugin" -msgstr "플러그인 선택" - # AI Translated msgid "Remove plugin" msgstr "플러그인 제거" +# AI Translated +msgid "No plugin selected" +msgstr "선택된 플러그인 없음" + # AI Translated msgid "Configure" msgstr "구성" @@ -5662,14 +5667,20 @@ msgstr "최적으로 설정" msgid "Regroup filament" msgstr "필라멘트 재그룹핑" -msgid "up to" -msgstr "까지" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "%1% mm까지" -msgid "above" -msgstr "위에" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "%1% mm 이상" -msgid "from" -msgstr "부터" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "%1% mm에서 %2% mm까지" msgid "Usage" msgstr "사용량" @@ -6033,7 +6044,7 @@ msgstr "용량:" msgid "Size:" msgstr "크기:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "레이어 %d, Z = %.2lf mm에서 Gcode 경로 충돌이 발견되었습니다. 충돌하는 객체를 더 멀리 분리하세요 (%s <-> %s)." @@ -6342,16 +6353,24 @@ msgstr "프로젝트 다른 이름으로 저장" msgid "Save current project as" msgstr "현재 프로젝트 다른 이름으로 저장" +# AI Translated +msgid "Publish 3MF" +msgstr "3MF 게시" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "선택한 설정이 포함된 3MF 파일을 내보냅니다" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF 가져오기" msgid "Load a model" msgstr "모델 불러오기" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIP 압축파일 가져오기" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "ZIP 압축파일에 포함된 모델 로드" msgid "Import Configs" @@ -7613,6 +7632,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "하부" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "이 설정은 플러그인 기능 유형을 지정하지 않습니다." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "이 설정은 인식할 수 없는 플러그인 기능 유형을 지정합니다: " + # AI Translated msgid "Plugin Selection" msgstr "플러그인 선택" @@ -7871,6 +7898,10 @@ msgstr "사용자 정의 플레이트" msgid "The %s nozzle can not print %s." msgstr "%s 노즐은 %s 을 인쇄할 수 없습니다." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "단일 압출기 프린터에서 혼색 필라멘트를 출력하면 필라멘트 교체와 플러시가 자주 발생하여 낭비되는 재료와 노즐 / 폐기물 슈트 막힘 위험이 크게 늘어날 수 있습니다." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "%1%와 %2% 혼합 출력을 권장하지 않습니다.\n" @@ -7997,12 +8028,44 @@ msgstr "AMS에서 필라멘트 목록 동기화" msgid "Set filaments to use" msgstr "사용할 필라멘트 설정" +# AI Translated +msgid "Add Mixed Filament" +msgstr "혼합 필라멘트 추가" + +# AI Translated +msgid "Mixed Filament" +msgstr "혼합 필라멘트" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "마지막 혼합 필라멘트 제거" + +# AI Translated +msgid "Add mixed filament" +msgstr "혼합 필라멘트 추가" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "혼합 필라멘트의 구성 요소가 잘못되었거나 일치하지 않습니다. 해당 항목을 다시 편집하세요." + msgid "Search plate, object and part." msgstr "플레이트, 객체 및 부품을 검색합니다." msgid "Pellets" msgstr "펠릿" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "혼합 필라멘트의 구성 요소 참조가 손상되었습니다" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "편집 / 삭제 / 병합" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "대상 혼합 필라멘트가 이 물리 필라멘트를 구성 요소로 사용합니다. 병합하면 이 물리 필라멘트가 제거되어 혼합 필라멘트가 무효가 될 수 있습니다. 계속할까요?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "작업을 완료하면 %s 프로젝트가 닫히고 새 프로젝트가 만들어집니다." @@ -8152,8 +8215,16 @@ msgid "Customized Preset" msgstr "사용자 정의 프리셋" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "STEP 파일 내부의 구성 요소 이름이 UTF8 형식이 아닙니다!" +msgid "Some published settings could not be applied:" +msgstr "일부 게시된 설정을 적용할 수 없습니다:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "일부 필라멘트 슬롯이 변경되었습니다:" + +# AI Translated +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "STEP 파일 내부의 구성 요소 이름이 UTF-8 형식이 아닙니다!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8175,7 +8246,7 @@ msgstr "물체의 부피는 0입니다" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s 파일의 객체가 너무 작습니다. 단위가 미터나 인치일 수 있습니다.\n" " mm 단위로 확장하시겠습니까?" @@ -8195,6 +8266,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "여러 부품으로 구성된 객체 감지됨" +# AI Translated +msgid "Matching textures to filaments" +msgstr "텍스처를 필라멘트에 매칭하는 중" + +# AI Translated +msgid "Texture Import Warning" +msgstr "텍스처 가져오기 경고" + msgid "Load these files as a single object with multiple parts?\n" msgstr "이 파일을 여러 부품이 있는 단일 객체로 로드하시겠습니까?\n" @@ -8423,6 +8502,22 @@ msgstr "" msgid "Sync now" msgstr "지금 동기화" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "텍스처 가져오기에 실패했습니다. 모델에 텍스처 데이터가 포함된 것으로 보이지만 텍스처 가져오기 과정을 완료하지 못했습니다. 모델은 형상만 가져옵니다." + +# AI Translated +msgid "Applying texture colors..." +msgstr "텍스처 색상 적용 중..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D 뷰 업데이트 중..." + +# AI Translated +msgid "Texture colors applied." +msgstr "텍스처 색상이 적용되었습니다." + msgid "You can keep the modified presets for the new project or discard them" msgstr "수정된 사전 설정을 새 프로젝트에 유지하거나 삭제할 수 있습니다" @@ -8554,6 +8649,21 @@ msgstr "슬라이스 파일을 다음으로 저장:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s 파일이 프린터의 저장 공간으로 전송되었으며 프린터에서 볼 수 있습니다." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MF 파일을 다음 이름으로 게시:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"게시할 3MF 파일을 내보내지 못했습니다.\n" +"폴더가 온라인에 있는지, 또는 다른 프로그램이 해당 파일을 열어 두었는지 확인하세요." + +msgid "Publish" +msgstr "게시" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "노즐 유형이 설정되지 않았습니다. 노즐을 설정하고 다시 시도하세요." @@ -8769,9 +8879,6 @@ msgstr "계속하시겠습니까?" msgid "Language selection" msgstr "언어 선택" -msgid "Switching application language while some presets are modified." -msgstr "일부 사전 설정이 수정되는 동안 응용 프로그램 언어를 전환합니다." - msgid "Asia-Pacific" msgstr "아시아 태평양" @@ -8885,6 +8992,9 @@ msgstr "현재 인스턴스 경로: " msgid "General" msgstr "일반" +msgid "Language" +msgstr "언어" + msgid "Metric" msgstr "미터법" @@ -9380,9 +9490,6 @@ msgstr "슬라이스된 미리보기에서 레이어 슬라이더를 움직일 msgid "Dimmed layer brightness" msgstr "어둡게 표시된 레이어의 밝기" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9766,6 +9873,10 @@ msgstr "나선형 꽃병 모드" msgid "First layer filament sequence" msgstr "첫 번째 레이어 필라멘트 순서" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "필라멘트 목록에 혼합 필라멘트가 있습니다. 사용자 지정 필라멘트 순서는 적용되지 않습니다." + msgid "By Layer" msgstr "레이어별" @@ -9793,9 +9904,6 @@ msgstr "모델 게시 웹 페이지로 이동" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "참고: 준비하는 데 몇 분 정도 걸릴 수 있습니다. 조금만 기다려 주십시오." -msgid "Publish" -msgstr "게시" - msgid "Publish was canceled" msgstr "게시가 취소되었습니다" @@ -9812,6 +9920,81 @@ msgstr "데이터 업로드 중" msgid "Jump to webpage" msgstr "웹 페이지로 이동" +# AI Translated +msgid "Material" +msgstr "재료" + +# AI Translated +msgid "Mixed filament" +msgstr "혼합 필라멘트" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "일부 혼합 필라멘트는 게시되지 않을 필라멘트에 의존합니다:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "필라멘트 %d (혼합)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1%에는 %2%이(가) 필요하지만 활성화되어 있지 않습니다." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1%에는 %2%이(가) 필요하지만 해당 재료는 게시되지 않습니다." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "혼합 필라멘트를 게시하려면 사용하는 모든 필라멘트를 활성화하고 전체 게시를 선택하거나 유형 요구 사항을 충족하세요." + +# AI Translated +msgid "Publish anyway" +msgstr "그래도 게시" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MF 게시..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "3MF 파일에 게시할 설정을 선택하세요" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF 게시 위키" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF 게시 비디오 가이드" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "혼합 필라멘트 - 위에서 \"활성화\"를 선택하면 전체가 게시됩니다" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "이 혼합 필라멘트를 게시하고 구성 필라멘트를 활성화 + 전체 게시합니다" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "이 필라멘트 슬롯을 3MF 파일에 게시합니다" + +# AI Translated +msgid "Full Publish" +msgstr "전체 게시" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "이 슬롯의 필라멘트 전체를 3MF 파일에 포함합니다" + +# AI Translated +msgid "Filter non-selected" +msgstr "선택되지 않은 항목 필터링" + #, c-format, boost-format msgid "Save %s as" msgstr "%s을(를) 다음으로 저장" @@ -9830,6 +10013,10 @@ msgstr "상위 사전 설정에서 상속한 모든 값을 이 사전 설정으 msgid "Detach from parent" msgstr "상위 항목에서 분리" +# AI Translated +msgid "Save without parent" +msgstr "상위 항목 없이 저장" + # AI Translated msgid "Unique preset" msgstr "독립 사전 설정" @@ -10544,10 +10731,18 @@ msgstr "뭉침 감지에는 프라임 타워가 필요합니다. 프라임 타 msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "정밀 Z 높이와 프라임 타워를 함께 활성화하면 슬라이싱 오류가 발생할 수 있습니다. 그래도 정밀 Z 높이를 활성화하시겠습니까?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "스무드 타임랩스는 모든 레이어에 프라임 타워가 필요하므로 \"희소 레이어 없음\"과 함께 사용할 수 없습니다. \"희소 레이어 없음\"이 해제되었습니다." + # AI Translated msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "유연 모드 타임랩스를 위해서는 프라임 타워가 필요합니다. 프라임 타워가 없는 모델에는 결함이 있을 수 있습니다. 프라임 타워를 활성화하시겠습니까?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"희소 레이어 없음\"은 모든 레이어에 프라임 타워가 필요한 스무드 타임랩스와 함께 사용할 수 없습니다. 타임랩스가 기존 모드로 전환되었습니다." + msgid "Still print by object?" msgstr "아직도 객체별로 출력하시나요?" @@ -10924,10 +11119,6 @@ msgstr "호환 프로세스 사전설정" msgid "Printable space" msgstr "출력 가능 공간" -# AI Translated -msgid "Printer Agent" -msgstr "프린터 에이전트" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "프린터 통신에 사용할 네트워크 에이전트 구현을 선택합니다. 사용 가능한 에이전트는 시작 시 등록됩니다." @@ -11188,12 +11379,12 @@ msgid "No modifications need to be copied." msgstr "복사할 변경 사항이 없습니다." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "매개변수 복사" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%s의 매개변수 수정" # AI Translated @@ -11352,14 +11543,6 @@ msgstr "익스트루더 수" msgid "Capabilities" msgstr "성능" -# AI Translated -msgid "Left: " -msgstr "왼쪽: " - -# AI Translated -msgid "Right: " -msgstr "오른쪽: " - msgid "Show all presets (including incompatible)" msgstr "모든 사전 설정 표시(호환되지 않는 설정 포함)" @@ -11723,30 +11906,6 @@ msgstr "필라멘트 교체를 위한 버리기 볼륨" msgid "Please choose the filament colour" msgstr "필라멘트 색상을 선택하세요" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "네이티브 Wayland 실시간 보기에는 GStreamer GTK 비디오 싱크가 필요합니다. GStreamer용 gtksink 플러그인을 설치한 후 OrcaSlicer를 다시 시작하십시오." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "네이티브 Wayland GStreamer 비디오 싱크를 초기화하지 못했습니다. GStreamer GTK 플러그인 설치 상태를 확인하십시오." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "이 작업에는 Windows Media Player가 필요합니다! 운영 체제에서 Windows Media Player를 활성화하시겠습니까?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "뱀부소스가 미디어 재생에 올바르게 등록되지 않았습니다! 다시 등록하려면 예를 누르세요. 두 번 승격됩니다" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "미디어 재생용으로 등록된 BambuSource 구성 요소가 없습니다! OrcaSlicer를 다시 설치하거나 커뮤니티에 도움을 요청하십시오." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "다른 설치 버전의 뱀부소스를 사용하면 동영상 재생이 제대로 작동하지 않을 수 있습니다! 예를 눌러 문제를 해결하세요." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "시스템에 동영상 재생을 위해 필요한 GStreamer용 H.264 코덱이 존재하지 않습니다. (gstreamer1.0-plugins-bad 또는 gstreamer1.0-libav 패키지를 설치한 다음 Orca Slicer를 다시 실행하십시오.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "클라우드 에이전트를 사용할 수 없습니다. OrcaSlicer를 다시 시작한 후 다시 시도하십시오." @@ -12246,15 +12405,22 @@ msgstr "수리 취소됨" msgid "Copying of file %1% to %2% failed: %3%" msgstr "파일 %1%를 %2%으로 복사 실패: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "새 제조사 프로파일 다운로드 중: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "구성 패키지: %1%이(가) %2%(으)로 업데이트되었습니다" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "제조사 프로파일을 다운로드하지 못했습니다: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "구성 업데이트 전에 저장되지 않은 변경 사항을 확인해야 합니다." -msgid "Configuration package: " -msgstr "구성 패키지: " - -msgid " updated to " -msgstr " 로 업데이트되었습니다 " - msgid "Open G-code file:" msgstr "Gcode 파일 열기:" @@ -12319,11 +12485,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "인풋 셰이핑은 Klipper, RepRapFirmware, Marlin 2에서만 지원됩니다." -msgid "Grouping error: " -msgstr "그룹화 오류입니다:" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "그룹화 오류: %1%은(는) 왼쪽 노즐에 배치할 수 없습니다" -msgid " can not be placed in the " -msgstr " 에 배치할 수 없습니다" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "그룹화 오류: %1%은(는) 오른쪽 노즐에 배치할 수 없습니다" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12438,6 +12608,10 @@ msgstr "%1% 이(가) 다른 객체와 너무 가까워 출력 시 충돌이 발 msgid "%1% is too tall, and collisions will be caused." msgstr "%1% 이(가) 너무 높아서 충돌이 출력 시 발생할 수 있습니다." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "모델과 프라임 타워의 상대 위치가 \"희소 레이어 없음\" 기능의 요구 사항을 충족하지 않습니다. 상대 위치를 조정하거나 모델 높이를 낮추거나 \"희소 레이어 없음\"을 해제하세요." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " 이(가) 제외 영역에 너무 가깝습니다. 출력 시 충돌이 발생 할 수 있습니다." @@ -12475,6 +12649,10 @@ msgstr "그래도 출력하려면 기본 설정 / 제어 / 슬라이싱 / 혼합 msgid "No extrusions under current settings." msgstr "현재 설정에 압출기가 없습니다." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "그라데이션 혼합 필라멘트가 사용 중이지만 '혼색 서브레이어'가 비활성화되어 있습니다. 그라데이션은 출력되지 않습니다." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "타임랩스의 유연 모드는 \"객체별\" 출력순서가 활성화된 경우 지원되지 않습니다." @@ -12513,6 +12691,10 @@ msgstr "모델 크기를 줄이거나 현재 출력 설정을 변경하고 다 msgid "Variable layer height is not supported with Organic supports." msgstr "유기체 서포트에서는 가변 레이어 높이가 지원되지 않습니다." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "프라임 타워 필라멘트는 혼합 필라멘트일 수 없습니다." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "프라임 타워를 활성화하면 노즐 직경과 필라멘트 직경이 다르면 제대로 작동하지 않을 수 있습니다. 매우 실험적인 기능이므로 주의해서 사용하시기 바랍니다." @@ -12804,6 +12986,10 @@ msgstr "G-code 대신 3MF 사용" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "프린터가 출력 작업으로 3MF 파일을 허용하는 경우 이 옵션을 활성화하십시오. 활성화하면 Orca Slicer가 슬라이스된 파일을 일반 .gcode 파일 대신 .gcode.3mf로 전송합니다." +# AI Translated +msgid "Printer Agent" +msgstr "프린터 에이전트" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "프린터 통신에 사용할 네트워크 에이전트 구현을 선택합니다." @@ -12889,8 +13075,7 @@ msgstr "mm 또는 %" msgid "Other layers" msgstr "다른 레이어" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "초기 레이어를 제외한 레이어의 베드 온도입니다. 값이 0이면 해당 필라멘트가 쿨 플레이트 슈퍼택에서의 출력을 지원하지 않음을 의미합니다." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13904,6 +14089,10 @@ msgstr "정렬된 직선" msgid "Concentric" msgstr "동심" +# AI Translated +msgid "Spiral Inset" +msgstr "나선형 인셋" + msgid "Hilbert Curve" msgstr "힐베르트 곡선" @@ -13997,13 +14186,13 @@ msgstr "상단 표면 채우기 순서" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 상단 표면을 채우는 방향입니다.\n" -"바깥쪽은 표면 중앙에서 시작하므로 남는 재료가 가장 눈에 덜 띄는 가장자리로 밀려납니다. 안쪽은 가장자리에서 시작하여 중앙의 좁은 곡선에서 끝납니다.\n" -"기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다." +"중심에서 시작하는 패턴(동심, 나선형 인셋, 아르키메데스 코드, 팔각 나선형)을 사용할 때 상단 표면을 채우는 방향입니다.\n" +"바깥쪽은 표면 중앙에서 시작하므로 남는 재료가 가장 눈에 덜 띄는 가장자리로 밀려납니다. 안쪽은 가장자리에서 시작해 중앙의 좁은 곡선으로 끝납니다.\n" +"기본값은 최단 경로 순서를 사용하며, 어느 방향으로든 진행될 수 있습니다." # AI Translated msgid "Bottom surface fill order" @@ -14011,13 +14200,13 @@ msgstr "하단 표면 채우기 순서" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 하단 표면을 채우는 방향입니다.\n" -"안쪽은 각 표면을 더 넓은 바깥쪽 곡선에서 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 빌드 플레이트에서 초기 레이어 접착력이 향상됩니다. 바깥쪽은 중앙에서 시작하여 남는 재료를 가장자리로 밀어냅니다.\n" -"기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다." +"중심에서 시작하는 패턴(동심, 나선형 인셋, 아르키메데스 코드, 팔각 나선형)을 사용할 때 하단 표면을 채우는 방향입니다.\n" +"안쪽은 각 표면을 더 넓은 바깥쪽 곡선부터 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 베드에서 초기 레이어 안착이 개선됩니다. 바깥쪽은 중앙에서 시작해 남는 재료를 가장자리로 밀어냅니다.\n" +"기본값은 최단 경로 순서를 사용하며, 어느 방향으로든 진행될 수 있습니다." msgid "Internal solid infill pattern" msgstr "꽉찬 내부 채우기 패턴" @@ -14121,6 +14310,14 @@ msgstr "시계 반대 방향" msgid "Clockwise" msgstr "시계방향" +# AI Translated +msgid "Distance to rod" +msgstr "로드까지의 거리" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "노즐 끝에서 로드의 먼 쪽 가장자리까지의 수평 거리입니다. 객체별 출력에서 충돌을 피하는 데 사용됩니다." + msgid "Height to rod" msgstr "레일까지의 높이" @@ -14307,6 +14504,8 @@ msgstr "레이어 시간" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "예상 시간이 이 값보다 짧은 레이어에 대해 출력물 냉각 팬이 활성화됩니다. 팬 속도는 레이어 출력 시간에 따라 최소 및 최대 팬 속도 사이에서 보간됩니다" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14620,6 +14819,62 @@ msgstr "서포트 재료" msgid "Support material is commonly used to print supports and support interfaces." msgstr "서포트 재료는 일반적으로 서포트 및 서포트 접점을 출력하는 데 사용됩니다" +# AI Translated +msgid "Is mixed filament" +msgstr "혼합 필라멘트 여부" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "이 필라멘트 슬롯이 여러 물리 필라멘트로 구성된 혼합 필라멘트인지 여부" + +# AI Translated +msgid "Mixed filament components" +msgstr "혼합 필라멘트 구성 요소" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "구성 필라멘트의 1부터 시작하는 인덱스를 쉼표로 구분하여 입력합니다. 예: \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "혼합 필라멘트 서브레이어 비율" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "합이 1.0이 되는 비율 값을 쉼표로 구분하여 입력합니다. 예: \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "혼합 필라멘트 그라데이션" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "혼합 필라멘트 서브레이어에 대해 Z 방향 그라데이션 모드를 활성화합니다. 활성화하면 서브레이어 비율이 레이어에 따라 선형으로 변합니다." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "혼합 필라멘트 그라데이션 범위" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "그라데이션 모드에서 첫 번째 구성 요소의 시작 및 종료 비율입니다. 쉼표로 구분된 한 쌍이며, 예를 들어 \"0.10,0.90\"은 10%에서 90%를 의미합니다." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "혼합 필라멘트 그라데이션 곡선" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z 진행도를 첫 번째 구성 요소의 비율에 매핑하는 선택적 Photoshop 스타일 사용자 지정 곡선입니다. 제어점을 세로줄로 구분하여 \"x,y\"(레거시) 또는 접선을 재정의해야 할 때는 \"x,y,m_in,m_out\" 형식으로 인코딩합니다(빈 값 또는 \"nan\"은 PCHIP 기본값을 사용). x는 [0,1] 범위이며, y는 설정된 비율 범위로 제한됩니다. 예: \"0,0.15|0.5,0.50|1,0.85\". 비워 두면 대신 선형 gradient_range가 사용됩니다." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "혼합 필라멘트 부품별 그라데이션" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "그라데이션 모드가 활성화되면 조립 전체를 하나의 Z 범위로 처리하지 않고 조립의 각 부품에 그라데이션을 개별적으로 적용합니다." + msgid "Filament printable" msgstr "필라멘트 출력 가능" @@ -15938,6 +16193,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y축의 허용 최대 출력 힘" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15948,6 +16204,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y축 장비 베드 질량 하중" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16276,7 +16533,7 @@ msgid "Reduce infill retraction" msgstr "채우기 후퇴 감소" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "이동 경로가 완전히 채우기 영역 안에 있으면 후퇴하지 않습니다. 흘러내림이 보이지 않기 때문입니다. 복잡한 모델에서 후퇴 횟수를 줄여 출력 시간을 절약할 수 있지만 슬라이싱과 G-code 생성 속도는 느려집니다. 후퇴를 건너뛴 영역에서는 Z 올리기도 수행되지 않습니다." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16313,6 +16570,20 @@ msgstr "오버행 벽 감지" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "선 너비에 비례하여 오버행 백분율을 감지하고 다른 속도를 사용하여 출력합니다. 100%% 오버행의 경우 브릿지 속도가 사용됩니다." +# AI Translated +msgid "Print unsupported walls last" +msgstr "지지되지 않는 벽을 마지막에 출력" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"완전히 공중에 떠 있는 벽 루프는 이를 받쳐 줄 것이 생긴 뒤에 출력됩니다.\n" +"벽 순서와 관계없이 같은 섬의 다른 벽들보다 나중에, 가장 안쪽부터 압출됩니다.\n" +"이 레이어의 브릿지만이 고정할 수 있는 루프는 해당 브릿지가 출력될 때까지 기다리고, 지지되는 벽을 따라 지나가는 루프는 이를 고정점으로 필요로 하는 채우기보다 앞선 자리를 유지합니다." + # AI Translated msgid "Outer walls" msgstr "외벽" @@ -16453,7 +16724,7 @@ msgstr "노즐 청소 후 후퇴량" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "노즐 청소 후 빠른 후퇴의 길이로, 후퇴 길이를 기준으로 합니다.\n" @@ -16500,7 +16771,7 @@ msgstr "툴 체인지 전에 후퇴가 실행되면 지정한 양만큼 필라 msgid "Z-hop height" msgstr "Z올리기 높이" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "후퇴가 완료될 때마다 노즐이 약간 올라가서 노즐과 출력물 사이에 간격이 생깁니다. 이동 시 노즐이 출력물에 닿는 것을 방지합니다. 나선형 선을 사용하여 z를 들어 올리면 스트링 현상을 방지할 수 있습니다" msgid "Z-hop lower boundary" @@ -16764,6 +17035,39 @@ msgstr "루프에서 노즐 청소" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "폐쇄 루프 압출에서 재봉선의 가시성을 최소화하기 위해 압출기가 루프를 떠나기 전에 안쪽으로의 작은 이동이 실행됩니다." +# AI Translated +msgid "Wipe inward" +msgstr "안쪽으로 노즐 청소" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"구멍 경계를 포함한 외벽에만 적용됩니다. 노즐 청소 중 뜨거운 노즐을 이미 출력된 내벽 쪽으로 이동시켜, 갓 출력된 플라스틱의 재가열과 재봉선 자국을 줄입니다.\n" +"\n" +"청소 자국이 더 잘 보이는 0.1 mm 미만의 레이어 높이에서 특히 유용합니다.\n" +"\n" +"인접한 내벽이 아직 출력되지 않았거나(벽이 하나뿐인 영역 또는 외벽/내벽 순서), 좁은 모서리나 재봉선 간격 등에서 지지되는 안쪽 경로를 찾을 수 없는 경우에는 일반 노즐 청소를 사용합니다." + +# AI Translated +msgid "Wipe inward distance" +msgstr "안쪽 노즐 청소 거리" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"노즐 청소 경로를 외곽 둘레에서 밀어내는 거리로, 밀리미터 또는 실제 외벽 압출 너비에 대한 백분율로 지정합니다.\n" +"\n" +"예를 들어 50%는 경로를 외벽 너비의 절반만큼 이동시킵니다. 실제 오프셋은 실제 외벽 너비와 인접한 벽까지의 여유 간격 모두에 의해 제한되므로, 100%를 넘는 값이나 그에 상응하는 절대 거리를 지정해도 추가 효과가 없습니다. 오프셋을 끄려면 0으로 설정하세요." + msgid "Wipe before external loop" msgstr "외부 루프 전 닦아내기" @@ -17034,8 +17338,9 @@ msgstr "출력 온도에 도달할 때까지 기다리지 않고 새 툴을 집 msgid "No sparse layers (beta)" msgstr "희소 레이어 없음(베타)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "활성화되면 툴 체인지 없이 레이어에 프라임 타워가 출력되지 않습니다. 툴 체인지가 있는 레이어에서는 압출기가 아래쪽으로 이동하여 프라임 타워를 출력합니다. 출력물과의 충돌이 없는지 확인하는 것은 사용자의 책임입니다." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "활성화하면 툴체인지가 없는 레이어에서는 프라임 타워가 출력되지 않습니다. 툴체인지가 있는 레이어에서는 압출기가 아래로 이동해 프라임 타워를 출력하므로, 타워가 모델보다 아래에 놓이고 툴헤드가 거기까지 내려가야 합니다. 이미 출력된 객체와 충돌하게 되는 배치는 거부됩니다. 모든 레이어에 타워가 필요한 스무드 타임랩스나 노즐 클럼핑 감지에서는 효과가 없습니다." msgid "Prime all printing extruders" msgstr "모든 활성화된 압출기 프라이밍" @@ -17061,6 +17366,34 @@ msgstr "" msgid "Cyclic" msgstr "순환" +# AI Translated +msgid "Cyclic order" +msgstr "순환 순서" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"순환 툴체인지 순서에서 사용하는 사용자 지정 필라멘트 순서로, 필라멘트 번호를 쉼표로 구분해 지정합니다(예: \"3,2,1,4\").\n" +"각 레이어는 이 순서에 따라 필라멘트를 출력하며, 목록에 없는 필라멘트는 오름차순으로 마지막에 출력됩니다.\n" +"비워 두면 필라멘트를 오름차순으로 순환합니다." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "초기 레이어에도 순환 순서 적용" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"순환 툴체인지 순서를 초기 레이어에도 적용합니다.\n" +"기본적으로 꺼져 있는데, 초기 레이어는 대신 베드 안착이 가장 잘 되도록 정렬되기 때문입니다. 초기 레이어의 작고 약한 형상을 출력하는 필라멘트를 마지막에 출력하면, 이어지는 툴체인지와 이동 동작이 약하게 고정된 부분을 떨어뜨릴 가능성이 줄어듭니다. 이 초기 레이어 순서는 초기 레이어용 사용자 지정 필라멘트 순서가 설정되어 있으면 그것도 따릅니다. 순환 순서의 이점(툴체인지가 늘어나 각 레이어의 냉각 시간이 길어지는 것)은 안착을 위해 느리고 뜨겁게 출력되는 초기 레이어에는 해당하지 않습니다.\n" +"안착 최적화를 포기하더라도 초기 레이어를 포함한 모든 레이어에서 정확히 같은 툴 순서가 필요한 경우에만 활성화하세요." + msgid "Slice gap closing radius" msgstr "슬라이스 간격 폐쇄 반경" @@ -17070,9 +17403,6 @@ msgstr "간격 폐쇄 반경의 2배보다 작은 균열은 삼각형 메시 슬 msgid "Slicing Mode" msgstr "슬라이싱 모드" -msgid "Other" -msgstr "기타" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "3DLabPrint 비행기 모델에는 \"짝수-홀수\"를 사용하세요. \"구멍 닫기\"를 사용하여 모델의 모든 구멍을 닫습니다." @@ -17579,6 +17909,14 @@ msgstr "" "\n" "아래의 와이프 전 후퇴량 설정에서 값을 설정하면 와이프 전에 초과 후퇴가 수행되고, 그렇지 않으면 와이프 후에 수행됩니다." +# AI Translated +msgid "Mixed color sublayer" +msgstr "혼색 서브레이어" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "혼색 서브레이어 분할을 활성화합니다. 활성화하면 혼색 필라멘트가 포함된 레이어가 서브레이어로 분할되어 색상 혼합 효과를 얻습니다." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "프라임 타워는 객체를 출력할 때 외관 결함을 방지하기 위해 노즐의 잔류물을 청소하고 노즐 내부의 압력을 안정화하는 데 사용할 수 있습니다." @@ -18086,6 +18424,14 @@ msgstr "확인 안 함" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Gcode 경로 충돌 검사와 같은 유효성 검사를 실행하지 마십시오." +# AI Translated +msgid "Strict mode" +msgstr "엄격 모드" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "서포트가 꺼져 있는데 서포트가 필요한 모델처럼, 평소에는 로그에만 남는 치명적이지 않은 경고가 슬라이싱 중에 발생하면 0이 아닌 코드로 종료합니다. 미묘하게 잘못된 슬라이싱 결과를 절대 내보내면 안 되는 CI나 스크립트 파이프라인에서 사용하세요. 그러한 경고는 Linux에서만 기록되는 result.json의 `warnings` 배열에도 고정된 분류와 함께 나열됩니다. 서포트 검사를 건너뛰는 --no-check와 함께 사용할 수 없습니다." + msgid "Normative check" msgstr "표준 검사" @@ -18098,11 +18444,28 @@ msgstr "모델 정보 출력" msgid "This outputs the model’s information." msgstr "모델 정보를 출력합니다." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "메시 검사 (JSON을 stdout으로)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "불러온 각 객체의 JSON 요약을 stdout으로 출력한 뒤 종료합니다: 경계 상자와 올려놓을 수 있는 볼록 껍질 면, 그리고 각 면의 법선, 면적, 중심이 포함됩니다. --ground-* 옵션이 선택하는 대상이 바로 이 면들입니다. --info의 기계 판독용 대안입니다." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "페인팅 검사 (JSON을 stdout으로)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "불러온 모델에 이미 저장된 모든 페인팅 레이어(서포트, 재봉선, MMU 색상, 퍼지 스킨)에 대해 상태별 면 개수, 표면적, 메시 기준 경계 상자를 구조화된 JSON으로 출력한 뒤 종료합니다. GUI에서 페인팅 도구를 여는 작업의 기계 판독용 대안입니다." + msgid "Export Settings" msgstr "설정 내보내기" -msgid "This exports settings to a file." -msgstr "설정을 파일로 내보내기." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "설정을 파일로 내보냅니다. -를 사용하면 stdout으로 출력합니다." msgid "Send progress to pipe" msgstr "진행 상황을 파이프로 보내기" @@ -18158,6 +18521,30 @@ msgstr "Y를 중심으로 회전" msgid "Rotation angle around the Y axis in degrees." msgstr "Y축을 중심으로 한 회전 각도입니다." +# AI Translated +msgid "Ground largest face" +msgstr "가장 큰 면으로 안착" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "각 객체를 볼록 껍질의 가장 큰 면으로 눕히고 베드로 떨어뜨립니다. 크기가 같은 면이 여럿이면 이미 아래를 향한 면이 유지됩니다. 올려놓을 만큼 큰 면이 없는 객체는 그대로 둡니다. 변환은 명령줄 순서대로 실행되므로 이 옵션보다 앞에 지정한 회전은 유지됩니다. --orient 1은 모든 변환 뒤에 실행되어 방향을 대체합니다." + +# AI Translated +msgid "Ground face by normal" +msgstr "법선 기준 면으로 안착" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "각 객체를 바깥쪽 법선이 방향 NX,NY,NZ에 가장 가까운 볼록 껍질 면으로 눕히고 베드로 떨어뜨립니다. 방향은 객체 좌표계 기준이며, 이 좌표계는 이 옵션보다 앞에 지정한 회전을 포함하고, 입력 파일이 객체를 회전시키지 않는 한 플레이트 축과 일치합니다. 예를 들어 1,0,0은 객체를 +X 쪽으로 세웁니다. --orient 1은 모든 변환 뒤에 실행되어 방향을 대체합니다." + +# AI Translated +msgid "Ground face at point" +msgstr "지정 지점의 면으로 안착" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "각 객체를 점 X,Y,Z를 포함하는 볼록 껍질 면으로 눕히고 베드로 떨어뜨립니다. 점은 객체 좌표계 기준이며, 이 좌표계는 이 옵션보다 앞에 지정한 회전을 포함합니다. --inspect-mesh는 이 좌표계로 면 중심을 알려줍니다. 그러한 면이 없는 객체는 그대로 두며, 어떤 객체에도 해당 면이 없으면 실행이 실패합니다. --orient 1은 모든 변환 뒤에 실행되어 방향을 대체합니다." + msgid "Scale the model by a float factor." msgstr "부동 소수점 계수로 모델 크기 조정" @@ -18682,6 +19069,10 @@ msgstr "모델 파일의 메싱이 실패했거나 유효한 형태가 없습니 msgid "The supplied file couldn't be read because it's empty." msgstr "제공된 파일이 비어 있어 읽을 수 없습니다" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "파일 형식이 호환되지 않아 해석할 수 없습니다." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "알 수 없는 파일 형식: 입력 파일의 확장자는 .stl, .obj 또는 .amf(.xml)여야 합니다." @@ -20213,19 +20604,19 @@ msgstr "프린터, 필라멘트 및 프로세스 사전 설정이 변경된 경 msgid "Only display the filament names with changes to filament presets." msgstr "필라멘트 사전 설정이 변경된 경우에만 필라멘트 이름을 표시합니다." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "사용자 프린터 사전 설정이 있는 프린터 이름만 표시되며, 선택한 각 사전 설정은 zip으로 내보내집니다." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "사용자 필라멘트 사전 설정이 있는 필라멘트 이름만 표시됩니다.\n" "선택한 각 필라멘트 이름의 모든 사용자 필라멘트 사전 설정은 zip으로 내보내집니다." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "프로세스 사전 설정이 변경된 프린터 이름만 표시됩니다.\n" "선택한 각 프린터 이름의 모든 사용자 프로세스 사전 설정은 zip으로 내보내집니다." @@ -20469,7 +20860,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "문제의 원인을 진단하려면 정보가 필요합니다. 자세한 안내는 위키 페이지를 확인하십시오." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "패키지 버튼은 현재 세션의 프로젝트 파일과 로그를 zip 파일로 모읍니다." # AI Translated @@ -20525,7 +20916,7 @@ msgid "Stored logs" msgstr "저장된 로그" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "저장된 모든 로그를 zip 파일로 묶습니다." # AI Translated @@ -20613,7 +21004,7 @@ msgid "Authorizing..." msgstr "인증 중..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "오류. 인증용 API 토큰을 가져올 수 없습니다" # AI Translated @@ -21075,8 +21466,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "스마트 필라멘트 할당 활성화: 하나의 필라멘트를 여러 노즐에 할당하여 절약을 극대화합니다" # AI Translated -msgid "Fila Saving" -msgstr "필라멘트 절약" +msgid "File Saving" +msgstr "파일 저장" msgid "Don't remind me again" msgstr "다시 알리지 마세요" @@ -21409,6 +21800,18 @@ msgstr "이 작업은 취소할 수 없습니다. 계속하시겠습니까?" msgid "Skipping objects." msgstr "물체 건너뛰기" +# AI Translated +msgid "Material Ratio" +msgstr "재료 비율" + +# AI Translated +msgid "Model Height" +msgstr "모델 높이" + +# AI Translated +msgid "Ratio" +msgstr "비율" + msgid "Select Filament" msgstr "필라멘트 선택" @@ -21506,6 +21909,9 @@ msgstr "지금 다시 시작" msgid "NO RAMMING AT ALL" msgstr "채워넣기 전혀 없음" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "압출 속도" @@ -21707,12 +22113,14 @@ msgid "Drying-Dehumidifying" msgstr "건조-제습" # AI Translated -msgid " maximum drying temperature is " -msgstr " 최대 건조 온도는 " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s의 최대 건조 온도는 %d°C입니다." # AI Translated -msgid " minimum drying temperature is " -msgstr " 최소 건조 온도는 " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s의 최소 건조 온도는 %d°C입니다." # AI Translated msgid "This filament may not be completely dried." @@ -22159,6 +22567,133 @@ msgstr "" "뒤틀림 방지\n" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#~ msgid "Other" +#~ msgstr "기타" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "왼쪽: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "오른쪽: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "최대 온도는 다음 값을 초과할 수 없습니다 " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "최소 온도는 다음 값보다 낮아서는 안 됩니다 " + +#~ msgid "up to" +#~ msgstr "까지" + +#~ msgid "above" +#~ msgstr "위에" + +#~ msgid "from" +#~ msgstr "부터" + +#~ msgid "Configuration package: " +#~ msgstr "구성 패키지: " + +#~ msgid " updated to " +#~ msgstr " 로 업데이트되었습니다 " + +#~ msgid "Grouping error: " +#~ msgstr "그룹화 오류입니다:" + +#~ msgid " can not be placed in the " +#~ msgstr " 에 배치할 수 없습니다" + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " 최대 건조 온도는 " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " 최소 건조 온도는 " + +# AI Translated +#~ msgid "needs" +#~ msgstr "필요" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "활성화되지 않음" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "재료 미게시" + +#~ msgid "Select the language" +#~ msgstr "언어 선택" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "플러그인 선택" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 상단 표면을 채우는 방향입니다.\n" +#~ "바깥쪽은 표면 중앙에서 시작하므로 남는 재료가 가장 눈에 덜 띄는 가장자리로 밀려납니다. 안쪽은 가장자리에서 시작하여 중앙의 좁은 곡선에서 끝납니다.\n" +#~ "기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "중심 기반 패턴(동심원, 아르키메데스 현, 팔각별 나선)을 사용할 때 하단 표면을 채우는 방향입니다.\n" +#~ "안쪽은 각 표면을 더 넓은 바깥쪽 곡선에서 시작하므로, 중앙의 좁은 곡선이 잘 붙지 않는 빌드 플레이트에서 초기 레이어 접착력이 향상됩니다. 바깥쪽은 중앙에서 시작하여 남는 재료를 가장자리로 밀어냅니다.\n" +#~ "기본값은 최단 경로 순서를 사용하며 어느 방향으로든 진행될 수 있습니다." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "활성화되면 툴 체인지 없이 레이어에 프라임 타워가 출력되지 않습니다. 툴 체인지가 있는 레이어에서는 압출기가 아래쪽으로 이동하여 프라임 타워를 출력합니다. 출력물과의 충돌이 없는지 확인하는 것은 사용자의 책임입니다." + +#~ msgid "This exports settings to a file." +#~ msgstr "설정을 파일로 내보내기." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "네이티브 Wayland 실시간 보기에는 GStreamer GTK 비디오 싱크가 필요합니다. GStreamer용 gtksink 플러그인을 설치한 후 OrcaSlicer를 다시 시작하십시오." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "네이티브 Wayland GStreamer 비디오 싱크를 초기화하지 못했습니다. GStreamer GTK 플러그인 설치 상태를 확인하십시오." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "이 작업에는 Windows Media Player가 필요합니다! 운영 체제에서 Windows Media Player를 활성화하시겠습니까?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "뱀부소스가 미디어 재생에 올바르게 등록되지 않았습니다! 다시 등록하려면 예를 누르세요. 두 번 승격됩니다" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "미디어 재생용으로 등록된 BambuSource 구성 요소가 없습니다! OrcaSlicer를 다시 설치하거나 커뮤니티에 도움을 요청하십시오." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "다른 설치 버전의 뱀부소스를 사용하면 동영상 재생이 제대로 작동하지 않을 수 있습니다! 예를 눌러 문제를 해결하세요." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "시스템에 동영상 재생을 위해 필요한 GStreamer용 H.264 코덱이 존재하지 않습니다. (gstreamer1.0-plugins-bad 또는 gstreamer1.0-libav 패키지를 설치한 다음 Orca Slicer를 다시 실행하십시오.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "필라멘트 절약" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index 1614bc453b..fbc718cae8 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -136,6 +136,7 @@ src/slic3r/GUI/BackgroundSlicingProcess.cpp src/slic3r/GUI/BedShapeDialog.cpp src/slic3r/GUI/BedShapeDialog.hpp src/slic3r/GUI/ConfigManipulation.cpp +src/slic3r/GUI/ConfigValueFormatter.cpp src/slic3r/GUI/DeviceManager.cpp src/slic3r/GUI/DeviceErrorDialog.cpp src/slic3r/GUI/ExtraRenderers.cpp @@ -175,6 +176,7 @@ src/slic3r/GUI/ProgressStatusBar.cpp src/slic3r/GUI/PlateSettingsDialog.cpp src/slic3r/GUI/PrivacyUpdateDialog.cpp src/slic3r/GUI/PublishDialog.cpp +src/slic3r/GUI/PublishSettingsDialog.cpp src/slic3r/GUI/SavePresetDialog.cpp src/slic3r/GUI/Search.cpp src/slic3r/GUI/Selection.cpp @@ -193,7 +195,6 @@ src/slic3r/GUI/ObjColorDialog.cpp src/slic3r/GUI/SyncAmsInfoDialog.cpp src/slic3r/GUI/WipeTowerDialog.cpp src/slic3r/GUI/wxExtensions.cpp -src/slic3r/GUI/wxMediaCtrl2.cpp src/slic3r/GUI/WebUserLoginDialog.cpp src/slic3r/GUI/WebGuideDialog.cpp src/slic3r/GUI/KBShortcutsDialog.hpp @@ -290,3 +291,7 @@ src/slic3r/GUI/PrinterWebViewHandler.cpp src/slic3r/GUI/AMSDryControl.cpp src/slic3r/GUI/AMSDryControl.hpp src/libslic3r/PresetBundle.cpp +src/slic3r/GUI/CAD/DesignPanel.cpp +src/slic3r/GUI/CAD/SketchInlineEditor.cpp +src/slic3r/GUI/Gizmos/GLGizmoPrimitive.cpp +src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp diff --git a/localization/i18n/lt/OrcaSlicer_lt.po b/localization/i18n/lt/OrcaSlicer_lt.po index ad5edffc9a..7798105df7 100644 --- a/localization/i18n/lt/OrcaSlicer_lt.po +++ b/localization/i18n/lt/OrcaSlicer_lt.po @@ -3,12 +3,11 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-07-02 14:13+0300\n" "Last-Translator: Gintaras Kučinskas \n" "Language-Team: \n" @@ -2450,15 +2449,6 @@ msgstr "Yra prieinamas atnaujinimas. Atidarykite profilių paketo dialogo langą msgid "%s has been removed." msgstr "%s buvo pašalintas." -msgid "Switching application language" -msgstr "Perjungiama programos kalba" - -msgid "Select the language" -msgstr "Pasirinkite kalbą" - -msgid "Language" -msgstr "Kalba" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2937,6 +2927,10 @@ msgstr "Redaguoti" msgid "Merge with" msgstr "Sujungti su" +# AI Translated +msgid "Decompose Color" +msgstr "Išskaidyti spalvą" + msgid "Delete this filament" msgstr "Ištrinti šią giją" @@ -3238,6 +3232,10 @@ msgstr "Surinkimas" msgid "Merge parts to an object" msgstr "Sujungti dalis į objektą" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Kintamo sluoksnio aukščio naudojimas kartu su mišrios spalvos posluoksniu gali pabloginti spalvų maišymo kokybę." + # AI Translated msgid "Add layers" msgstr "Pridėti sluoksnių" @@ -3696,11 +3694,15 @@ msgstr "Ištraukite dabartinę giją ties Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Perjunkite takelį ties Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "Maksimali temperatūra negali viršyti " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Maksimali temperatūra negali viršyti %d" -msgid "The minmum temperature should not be less than " -msgstr "Minimali temperatūra neturi būti mažesnė nei " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Minimali temperatūra neturi būti mažesnė nei %d" msgid "Type to filter..." msgstr "Įveskite tekstą filtravimui..." @@ -4582,6 +4584,15 @@ msgstr "" "Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gal draudžiama įrašinėti į SD kortelę?\n" "Klaidos pranešimas: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Nepavyko nukopijuoti laikinojo G kodo į išvesties G kodą.\n" +"Klaidos pranešimas: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Nepavyko nukopijuoti laikinojo G-kodo į išvesties G-kodą. Gali kilti problemų dėl tikslinio įrenginio. Bandykite eksportuoti dar kartą arba naudokite kitą įrenginį. Sugadintas išvesties G-kodas yra %1%.tmp." @@ -4792,7 +4803,7 @@ msgstr "" "\n" "Reikšmė bus atstatyta į 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatyvi papildoma sienelė veikia prastai, kai vertikalaus apvalkalo storio užtikrinimas nustatytas į „Visi“." msgid "" @@ -4838,7 +4849,7 @@ msgstr "" "NE – palikti nepriklausomą atramų sluoksnio aukštį" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "„seam_slope_start_height“ turi būti mažesnis už „layer_height“\n" @@ -4846,7 +4857,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Fiksavimo gylis turėtų būti mažesnis už išorinio sluoksnio gylį.\n" @@ -4886,6 +4897,9 @@ msgstr "" "Taip – pakeisti šiuos nustatymus ir automatiškai įjungti spiralinį režimą\n" "Ne – nenaudoti spiralinio režimo" +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Spausdinimas" @@ -5316,14 +5330,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Reikšmė %s yra už ribų. Galimas diapazonas yra nuo %d iki %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Ar tai %s%% ar %s %s?\n" -"TAIP %s%%, \n" -"NE %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Ar tai %s%% ar %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5345,29 +5356,22 @@ msgstr "Neteisingas šablonas. Naudokite N, N#K arba kableliais atskirtą sąra msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Netinkamas formatas. Tinkamas vektorinis formatas: \"%1%\"" -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Sisteminiai agentai" -# AI Translated -msgid "No plugin selected" -msgstr "Nepasirinktas joks papildinys" - # AI Translated msgid "Add plugin" msgstr "Pridėti papildinį" -# AI Translated -msgid "Select plugin" -msgstr "Pasirinkti papildinį" - # AI Translated msgid "Remove plugin" msgstr "Pašalinti papildinį" +# AI Translated +msgid "No plugin selected" +msgstr "Nepasirinktas joks papildinys" + # AI Translated msgid "Configure" msgstr "Konfigūruoti" @@ -5623,14 +5627,20 @@ msgstr "Nustatyti į optimalų" msgid "Regroup filament" msgstr "Pergrupuoti gijas" -msgid "up to" -msgstr "iki" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "iki %1% mm" -msgid "above" -msgstr "virš" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "virš %1% mm" -msgid "from" -msgstr "nuo" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "nuo %1% iki %2% mm" msgid "Usage" msgstr "Naudojimas" @@ -5993,7 +6003,7 @@ msgstr "Tūris:" msgid "Size:" msgstr "Dydis:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Rasta G-kodo trajektorijų konfliktų %d sluoksnyje, Z = %.2lfmm. Prašome labiau atskirti konfliktuojančius objektus (%s <-> %s)." @@ -6305,16 +6315,24 @@ msgstr "Įrašyti projektą kaip" msgid "Save current project as" msgstr "Įrašyti dabartinį projektą kaip" +# AI Translated +msgid "Publish 3MF" +msgstr "Talpinti 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Eksportuoti 3MF failą su įterptais pasirinktais parametrais" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuoti 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Įkelti modelį" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importuoti Zip archyvą" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Įkelti modelius iš ZIP archyvo" msgid "Import Configs" @@ -7578,6 +7596,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Apatinis" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Šis parametras nenurodo papildinio gebos tipo." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Šis parametras nurodo neatpažintą papildinio gebos tipą: " + # AI Translated msgid "Plugin Selection" msgstr "Papildinio pasirinkimas" @@ -7835,6 +7861,10 @@ msgstr "Individualizuoti esamą plokštę" msgid "The %s nozzle can not print %s." msgstr "%s purkštukas negali spausdinti %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Spausdinant mišrios spalvos giją vieno ekstruderio spausdintuvu reikia dažnai keisti giją ir pravalyti, todėl gali gerokai padidėti atliekų kiekis ir purkštuko arba atliekų latako užsikimšimo rizika." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "" @@ -7968,12 +7998,44 @@ msgstr "Sinchronizuoti gijų sąrašą iš AMS" msgid "Set filaments to use" msgstr "Nustatyti gijas naudojimui" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Pridėti mišrią giją" + +# AI Translated +msgid "Mixed Filament" +msgstr "Mišri gija" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Pašalinti paskutinę mišrią giją" + +# AI Translated +msgid "Add mixed filament" +msgstr "Pridėti mišrią giją" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Mišri gija turi netinkamų arba neatitinkančių komponentų. Iš naujo suredaguokite susijusius įrašus." + msgid "Search plate, object and part." msgstr "Plokštės, objekto ir dalies paieška." msgid "Pellets" msgstr "Granulės" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Mišri gija turi sugadintų komponentų nuorodų" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Redaguoti / Ištrinti / Sujungti" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Paskirties mišri gija naudoja šią fizinę giją kaip komponentą. Sujungus ši fizinė gija bus pašalinta ir mišri gija gali tapti netinkama. Tęsti?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Baigus šią operaciją, projektas „%s“ bus uždarytas ir bus sukurtas naujas projektas." @@ -8110,7 +8172,15 @@ msgstr "Patvirtinkite, kad šiuose profiliuose esantis G-kodas yra saugus, kad i msgid "Customized Preset" msgstr "Pritaikytas profilis" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Kai kurių patalpintų parametrų pritaikyti nepavyko:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Kai kurie gijų lizdai buvo pakeisti:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8132,7 +8202,7 @@ msgstr "Objekto tūris nulinis" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objektas iš failo „%s“ yra per mažas ir galimai nurodytas metrais arba coliais.\n" "Ar norite mastelį pakeisti į milimetrus?" @@ -8152,6 +8222,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Aptiktas kelių dalių objektas" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Tekstūros priskiriamos gijoms" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Tekstūros importavimo įspėjimas" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ar įkelti šiuos failus kaip vieną objektą su keliomis detalėmis?\n" @@ -8366,6 +8444,22 @@ msgstr "" msgid "Sync now" msgstr "Sinchronizuoti dabar" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Tekstūros importuoti nepavyko. Panašu, kad modelyje yra tekstūros duomenų, tačiau importavimo proceso nepavyko užbaigti. Modelis bus importuotas tik kaip geometrija." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Taikomos tekstūros spalvos..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Atnaujinamas 3D vaizdas..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Tekstūros spalvos pritaikytos." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Pakeistus profilius galite išsaugoti naujam projektui arba juos atmesti" @@ -8497,6 +8591,21 @@ msgstr "Išsaugoti susluoksniuotą failą kaip:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Failas %s išsiųstas į spausdintuvo laikmeną ir gali būti peržiūrimas spausdintuve." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Talpinti 3MF failą kaip:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Nepavyko eksportuoti patalpinto 3MF failo.\n" +"Patikrinkite, ar aplankas pasiekiamas internete ir ar failo neturi atvėrusios kitos programos." + +msgid "Publish" +msgstr "Talpinti" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Purkštuko tipas nenustatytas. Nustatykite purkštuką ir bandykite dar kartą." @@ -8707,9 +8816,6 @@ msgstr "Ar norite tęsti?" msgid "Language selection" msgstr "Kalbos pasirinkimas" -msgid "Switching application language while some presets are modified." -msgstr "Keičiama programos kalba, kai yra pakeistų profilių." - msgid "Asia-Pacific" msgstr "Azija-Ramusis vandenynas" @@ -8814,6 +8920,9 @@ msgstr "Dabartinės versijos kelias: " msgid "General" msgstr "Bendras" +msgid "Language" +msgstr "Kalba" + msgid "Metric" msgstr "Metrinė" @@ -9242,9 +9351,6 @@ msgstr "Slenkant sluoksnių slankiklį pjaustytoje peržiūroje, atvaizduoti že msgid "Dimmed layer brightness" msgstr "Pritemdytų sluoksnių ryškumas" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9595,6 +9701,10 @@ msgstr "Spiralinė vaza" msgid "First layer filament sequence" msgstr "Pirmojo sluoksnio gijos eiga" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Gijų sąraše yra mišrių gijų. Pasirinktinė gijų seka nebus taikoma." + msgid "By Layer" msgstr "Pagal sluoksnį" @@ -9622,9 +9732,6 @@ msgstr "Pereiti į modelio talpinimo interneto puslapį" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Pastaba: paruošimas gali užtrukti kelias minutes. Būkite kantrūs." -msgid "Publish" -msgstr "Talpinti" - msgid "Publish was canceled" msgstr "Publikavimas buvo atšauktas" @@ -9640,6 +9747,81 @@ msgstr "Įkeliami duomenys" msgid "Jump to webpage" msgstr "Pereiti į interneto puslapį" +# AI Translated +msgid "Material" +msgstr "Medžiaga" + +# AI Translated +msgid "Mixed filament" +msgstr "Mišri gija" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Kai kurios mišrios gijos priklauso nuo gijų, kurios nebus patalpintos:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Gija %d (mišri)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% reikalauja %2%, kuri nėra įjungta." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% reikalauja %2%, kurios medžiaga nebus paskelbta." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Norėdami patalpinti mišrią giją, įjunkite kiekvieną jos naudojamą giją ir pasirinkite Pilną talpinimą arba įvykdykite jos Tipo reikalavimą." + +# AI Translated +msgid "Publish anyway" +msgstr "Vis tiek talpinti" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Talpinti 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Pasirinkite, kuriuos parametrus talpinti 3MF faile" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF talpinimo wiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF talpinimo vaizdo vadovas" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Mišri gija - talpinama kaip visuma, kai viršuje pasirinkta \"Įjungti\"" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Talpinti šią mišrią giją ir įjungti + pilnai patalpinti jos sudedamąsias gijas" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Talpinti šį gijos lizdą 3MF faile" + +# AI Translated +msgid "Full Publish" +msgstr "Pilnas talpinimas" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Įterpti visą šio lizdo giją į 3MF failą" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtruoti nepasirinktus" + #, c-format, boost-format msgid "Save %s as" msgstr "Išsaugoti %s kaip" @@ -9657,6 +9839,10 @@ msgstr "Nukopijuoja į šį profilį visas iš pirminio profilio paveldėtas rei msgid "Detach from parent" msgstr "Atskirti nuo tėvinio profilio" +# AI Translated +msgid "Save without parent" +msgstr "Išsaugoti be tėvinio profilio" + # AI Translated msgid "Unique preset" msgstr "Savarankiškas profilis" @@ -10359,9 +10545,17 @@ msgstr "Norint aptikti gumbų susidarymą, reikalingas valymo bokštas. Be valym msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Įjungus ir tikslų Z aukštį, ir valymo bokštą, gali kilti sluoksniavimo klaidų. Ar vis tiek norite įjungti tikslų Z aukštį?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Sklandžiam pakadriniam filmavimui (timelapse) reikia valymo bokšto kiekviename sluoksnyje, o tai nesuderinama su parinktimi \"Nėra retų sluoksnių\". Parinktis \"Nėra retų sluoksnių\" buvo išjungta." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Norint sklandžiai įrašyti laiko tarpų (timelapse) vaizdo įrašą, reikalingas valymo bokštas. Be valymo bokšto modelyje gali atsirasti defektų. Ar norite įjungti valymo bokštą?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "Parinktis \"Nėra retų sluoksnių\" nesuderinama su sklandžiu pakadriniu filmavimu (timelapse), kuriam reikia valymo bokšto kiekviename sluoksnyje. Pakadrinis filmavimas perjungtas į tradicinį režimą." + msgid "Still print by object?" msgstr "Vis dar spausdinti pagal objektą?" @@ -10734,9 +10928,6 @@ msgstr "Suderinami apdorojimo profiliai" msgid "Printable space" msgstr "Erdvė spausdinimui" -msgid "Printer Agent" -msgstr "Spausdintuvo agentas" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Pasirinkite tinklo agento modulį ryšiui su spausdintuvu palaikyti. Prieinami agentai užregistruojami paleidimo metu." @@ -10981,11 +11172,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Nereikia kopijuoti jokių modifikacijų" -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopijuoti parametrus" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modifikuoti %s parametrus" #, c-format, boost-format @@ -11139,12 +11330,6 @@ msgstr "Ekstruderių skaičius" msgid "Capabilities" msgstr "Galimybės" -msgid "Left: " -msgstr "Kairė:" - -msgid "Right: " -msgstr "Dešinė:" - msgid "Show all presets (including incompatible)" msgstr "Rodyti visus profilius (įskaitant nesuderinamus)" @@ -11498,27 +11683,6 @@ msgstr "Išmetimo tūris keičiant gijas" msgid "Please choose the filament colour" msgstr "Pasirinkite gijos spalvą" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Tiesioginei „Native Wayland“ peržiūrai reikalingas „GStreamer GTK“ vaizdo sinchronizatorius (video sink). Įdiekite „GStreamer“ skirtą „gtksink“ papildinį, tada iš naujo paleiskite „OrcaSlicer“." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nepavyko inicijuoti „native Wayland GStreamer“ vaizdo sinchronizatoriaus (video sink). Patikrinkite „GStreamer GTK“ papildinio įdiegimą." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Šiai užduočiai atlikti reikalingas \"Windows Media Player\"! Ar norite įjungti \"Windows Media Player\" savo operacinėje sistemoje?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "„BambuSource“ neteisingai užregistruotas medijos atkūrimui! Paspauskite „Taip“, kad jį perregistruotumėte. Jums reikės patvirtinti du kartus." - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Trūksta BambuSource komponento, užregistruoto medijos atkūrimui! Iš naujo įdiekite OrcaSlicer arba kreipkitės pagalbos į bendruomenę." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Naudojant \"BambuSource\" iš kito diegimo šaltinio, vaizdo įrašų atkūrimas gali būti neteisingas! Paspauskite Taip, kad tai ištaisytumėte." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Jūsų sistemoje nėra \"GStreamer\" H.264 kodekų, reikalingų vaizdo įrašams atkurti. (Pabandykite įdiegti gstreamer1.0-plugins-bad arba gstreamer1.0-libav paketus, tada iš naujo paleiskite \"Orca Slicer\")" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Debesies agentas nepasiekiamas. Iš naujo paleiskite „OrcaSlicer“ ir bandykite vėl." @@ -12004,15 +12168,22 @@ msgstr "Taisymas atšauktas" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Failo %1% kopijavimas į %2% nepavyko: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Atsisiunčiami nauji gamintojų profiliai: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigūracijos paketas: %1% atnaujintas į %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Nepavyko atsisiųsti gamintojų profilių: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Prieš atnaujinant konfigūraciją reikia patikrinti neišsaugotus pakeitimus." -msgid "Configuration package: " -msgstr "Konfigūracijos paketas: " - -msgid " updated to " -msgstr " atnaujintas į " - msgid "Open G-code file:" msgstr "Atidaryti G-kodo failą:" @@ -12072,11 +12243,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "„Input shaping“ funkcija palaikoma tik „Klipper“, „RepRapFirmware“ ir „Marlin 2“ programinėje aparatinėje įrangoje" -msgid "Grouping error: " -msgstr "Grupavimo klaida: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Grupavimo klaida: %1% negalima įdėti į kairįjį purkštuką" -msgid " can not be placed in the " -msgstr "negali būti įkeltas į " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Grupavimo klaida: %1% negalima įdėti į dešinįjį purkštuką" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12190,6 +12365,10 @@ msgstr "%1% yra per arti kitų, todėl gali įvykti susidūrimas." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% yra per aukštas, todėl įvyks susidūrimai." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Modelio ir valymo bokšto tarpusavio padėtis neatitinka funkcijos \"Nėra retų sluoksnių\" reikalavimų. Pakoreguokite jų tarpusavio padėtį, sumažinkite modelio aukštį arba išjunkite parinktį \"Nėra retų sluoksnių\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " yra per arti uždraustosios zonos, spausdinant gali įvykti susidūrimų." @@ -12226,6 +12405,10 @@ msgstr "Jei vis tiek norite spausdinti, galite įjungti šią parinktį skiltyje msgid "No extrusions under current settings." msgstr "Pagal dabartinius nustatymus nėra išspaudimų." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Naudojama mišri gija su gradientu, tačiau 'Mišrios spalvos posluoksnis' yra išjungtas. Gradientas nebus atspausdintas." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Sklandus pakadrinio filmavimo (timelapse) režimas nepalaikomas, kai įjungta spausdinimo seka „pagal objektą“." @@ -12262,6 +12445,10 @@ msgstr "Galbūt norėsite sumažinti modelio dydį arba pakeisti esamus spausdin msgid "Variable layer height is not supported with Organic supports." msgstr "Kintamas sluoksnio aukštis nepalaikomas su \" Organinėmis atramomis\"." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Valymo bokšto gija negali būti mišri gija." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Skirtingo skersmens purkštukai ir skirtingo skersmens gijos gali neveikti gerai, kai įjungtas valymo bokštas. Tai labai eksperimentinė priemonė, todėl elkitės atsargiai." @@ -12527,6 +12714,9 @@ msgstr "Vietoj G-kodo naudoti 3MF" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Įjunkite, jei spausdintuvas spausdinimo užduotims priima 3MF failus. Kai įjungta, „Orca Slicer“ sugeneruotą failą siunčia kaip „.gcode.3mf“, o ne kaip paprastą „.gcode“ failą." +msgid "Printer Agent" +msgstr "Spausdintuvo agentas" + msgid "Select the network agent implementation for printer communication." msgstr "Pasirinkite tinklo agento modulį ryšiui su spausdintuvu palaikyti." @@ -12609,7 +12799,7 @@ msgstr "mm arba %" msgid "Other layers" msgstr "Kiti sluoksniai" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant „Cool Plate SuperTack“ pagrindo." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13571,6 +13761,10 @@ msgstr "Sulygiuotas tiesiaeigis" msgid "Concentric" msgstr "Koncentrinis" +# AI Translated +msgid "Spiral Inset" +msgstr "Spiralinis poslinkis" + msgid "Hilbert Curve" msgstr "Hilberto kreivė" @@ -13662,13 +13856,13 @@ msgstr "Viršutinio paviršiaus užpildymo tvarka" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Kryptis, kuria užpildomi viršutiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n" -"„Į išorę“ prasideda paviršiaus centre, todėl bet koks perteklinė medžiaga stumiama link krašto, kur ji mažiausiai matoma. „Į vidų“ prasideda nuo krašto ir baigiasi ankštomis kreivėmis centre.\n" -"Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi." +"Kryptis, kuria užpildomi viršutiniai paviršiai naudojant nuo centro einantį raštą (Koncentrinis, Spiralinis poslinkis, Archimedo akordai, Oktagramos spiralė).\n" +"Į išorę pradeda nuo paviršiaus centro, todėl medžiagos perteklius stumiamas link krašto, kur jis mažiausiai matomas. Į vidų pradeda nuo krašto ir baigia ankštais posūkiais centre.\n" +"Numatytasis naudoja trumpiausio kelio eiliškumą, kuris gali eiti bet kuria kryptimi." # AI Translated msgid "Bottom surface fill order" @@ -13676,13 +13870,13 @@ msgstr "Apatinio paviršiaus užpildymo tvarka" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Kryptis, kuria užpildomi apatiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n" -"„Į vidų“ pradeda kiekvieną paviršių platesnėmis išorinėmis kreivėmis, o tai pagerina pirmojo sluoksnio sukibimą ant pagrindų, kur ankštos kreivės centre gali nesilaikyti. „Į išorę“ prasideda centre, stumdama bet kokią perteklinę medžiagą link krašto.\n" -"Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi." +"Kryptis, kuria užpildomi apatiniai paviršiai naudojant nuo centro einantį raštą (Koncentrinis, Spiralinis poslinkis, Archimedo akordai, Oktagramos spiralė).\n" +"Į vidų pradeda kiekvieną paviršių nuo platesnių išorinių posūkių, o tai pagerina pirmojo sluoksnio sukibimą su pagrindais, prie kurių ankšti posūkiai centre gali nepriliptų. Į išorę pradeda nuo centro ir stumia medžiagos perteklių link krašto.\n" +"Numatytasis naudoja trumpiausio kelio eiliškumą, kuris gali eiti bet kuria kryptimi." msgid "Internal solid infill pattern" msgstr "Vidinio tvirto užpildo raštas" @@ -13781,6 +13975,14 @@ msgstr "Prieš laikrodžio rodyklę" msgid "Clockwise" msgstr "Pagal laikrodžio rodyklę" +# AI Translated +msgid "Distance to rod" +msgstr "Atstumas iki strypo" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Horizontalus atstumas nuo purkštuko galiuko iki tolimesnio strypo krašto. Naudojamas susidūrimams išvengti spausdinant objektą po objekto." + msgid "Height to rod" msgstr "Aukštis iki ašies (strypo)" @@ -13962,6 +14164,8 @@ msgstr "Sluoksnio laikas" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Detalės aušinimo ventiliatorius bus suaktyvintas tiems sluoksniams, kurių preliminarus spausdinimo laikas yra trumpesnis už šią reikšmę. Ventiliatoriaus sūkiai bus interpoliuojami tarp minimalaus ir maksimalaus greičio, priklausomai nuo sluoksnio spausdinimo trukmės." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14269,6 +14473,62 @@ msgstr "Atramų gija" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Atramų gija paprastai naudojama atramoms ir atramų skiriamiesiems sluoksniams spausdinti." +# AI Translated +msgid "Is mixed filament" +msgstr "Yra mišri gija" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Nurodo, ar ši gijos vieta yra mišri gija, sudaryta iš kelių fizinių gijų" + +# AI Translated +msgid "Mixed filament components" +msgstr "Mišrios gijos komponentai" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Kableliais atskirti komponentinių gijų indeksai, skaičiuojami nuo 1, pvz. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Mišrios gijos posluoksnių santykiai" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Kableliais atskirtos santykio reikšmės, kurių suma lygi 1.0, pvz. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Mišrios gijos gradientas" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Įjungia gradiento režimą Z kryptimi mišrios gijos posluoksniams. Įjungus posluoksnių santykiai tarp sluoksnių kinta tiesiškai." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Mišrios gijos gradiento intervalas" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Pirmojo komponento pradinis ir galutinis santykis gradiento režimu. Kableliu atskirta pora, pvz. \"0.10,0.90\" reiškia nuo 10% iki 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Mišrios gijos gradiento kreivė" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Neprivaloma pasirinktinė Photoshop stiliaus kreivė, susiejanti Z eigą su pirmojo komponento santykiu. Užrašoma kaip vertikaliais brūkšniais atskirti valdymo taškai, formatu \"x,y\" (senasis) arba \"x,y,m_in,m_out\", kai reikia nustatyti liestinę (tuščia reikšmė arba \"nan\" reiškia numatytąjį PCHIP). x priklauso [0,1]; y apribojamas iki nustatyto santykių intervalo, pvz. \"0,0.15|0.5,0.50|1,0.85\". Jei palikta tuščia, naudojamas tiesinis gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Mišrios gijos gradientas kiekvienai daliai" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Kai gradiento režimas įjungtas, gradientas taikomas kiekvienai surinkimo daliai atskirai, o ne visam surinkimui kaip vienam Z intervalui." + msgid "Filament printable" msgstr "Gija tinkama spausdinti" @@ -15519,6 +15779,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Leidžiama didžiausia Y ašies išvesties jėga" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15531,6 +15792,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Įrenginio pagrindo masės apkrova Y ašiai" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15839,7 +16101,7 @@ msgstr "Pradžios ir pabaigos taškai, esantys tarp gijos kirpimo zonos ir atlie msgid "Reduce infill retraction" msgstr "Sumažinti užpildo įtraukimą (Retraction)" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Neatlikti gijos įtraukimo, kai tuščioji eiga vyksta tik užpildo zonoje. Tokiu atveju gijos varvėjimas (oozing) išorėje bus nematomas. Tai leidžia sumažinti įtraukimų skaičių sudėtingiems modeliams ir sutaupyti spausdinimo laiko, tačiau sulėtina sluoksniavimą bei G-kodo (G-code) generavimą. Pastaba: zonose, kuriose įtraukimas praleidžiamas, „Z-hop“ judesys taip pat neatliekamas." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15876,6 +16138,20 @@ msgstr "Aptikti iškyšų sieneles" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Nustatykite iškyšos procentinę dalį, palyginti su linijos pločiu, ir naudokite skirtingą spausdinimo greitį. Jei iškyša 100%%, naudojamas tilto greitis." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Neatremtas sieneles spausdinti paskutines" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Sienelės kontūrai, esantys visiškai ore, spausdinami tik tada, kai juos yra kam palaikyti:\n" +"jie išspaudžiami po kitų savo salos sienelių, pradedant nuo vidinės, nepriklausomai nuo sienelių eiliškumo.\n" +"Kontūras, kurį gali įtvirtinti tik šio sluoksnio tiltai, laukia, kol tie tiltai bus atspausdinti, o kontūras, einantis šalia atremtos sienelės, išlaiko savo vietą prieš užpildą, kuriam jis reikalingas kaip įtvirtinimas." + msgid "Outer walls" msgstr "Išorinės sienelės" @@ -16005,7 +16281,7 @@ msgstr "Atitraukimo kiekis po nubraukimo" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Greito atitraukimo ilgis po nubraukimo, atsižvelgiant į atitraukimo ilgį.\n" @@ -16052,7 +16328,7 @@ msgstr "Kai atitraukimas suaktyvinamas prieš įrankio keitimą, gija atitraukia msgid "Z-hop height" msgstr "„Z-hop“ (pakėlimo) aukštis" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Kaskart atliekant atitraukimą, purkštukas šiek tiek pakeliamas, kad tarp jo ir spaudinio atsirastų tarpas. Tai apsaugo nuo purkštuko užkliudymo už spaudinio judėjimo metu. „Spiralinių“ linijų naudojimas Z ašies kėlimui gali padėti išvengti „tįstančių siūlų“ (angl. \"stringing\")." msgid "Z-hop lower boundary" @@ -16309,6 +16585,39 @@ msgstr "Nuvalyti kilpas" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Siekiant sumažinti siūlės matomumą uždaroje ekstruzijos kilpoje, prieš ekstruderiui išeinant iš kilpos atliekamas nedidelis judesys į vidų." +# AI Translated +msgid "Wipe inward" +msgstr "Valymas į vidų" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Taikoma tik išorinėms sienelėms, įskaitant skylių kontūrus. Valymo metu karštą purkštuką patraukia link jau atspausdintų vidinių sienelių, kad sumažintų ką tik atspausdinto plastiko pakartotinį įkaitimą ir siūlės žymes.\n" +"\n" +"Ypač naudinga esant mažesniam nei 0,1 mm sluoksnio aukščiui, kai valymo žymės labiau matomos.\n" +"\n" +"Naudoja įprastą valymą, jei nėra jau atspausdintos gretimos vidinės sienelės (vienos sienelės sritys arba sienelių eiliškumas Išorinis / vidinis) arba jei nepavyksta rasti atremto kelio į vidų, pavyzdžiui, ankštuose kampuose ar siūlės tarpuose." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Valymo į vidų atstumas" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Atstumas, kuriuo valymo kelias pastumiamas nuo išorinio kontūro, nurodomas milimetrais arba procentais nuo faktinio išorinės sienelės išspaudimo pločio.\n" +"\n" +"Pavyzdžiui, 50% pastumia kelią per pusę išorinės sienelės pločio. Faktinį poslinkį riboja tiek tikrasis išorinės sienelės plotis, tiek laisvas tarpas iki gretimos sienelės, todėl didesnės nei 100% reikšmės ar joms lygiavertis absoliutus atstumas papildomo poveikio neturi. Nustatykite 0, kad poslinkis būtų išjungtas." + msgid "Wipe before external loop" msgstr "Valymas prieš išorinį kontūrą" @@ -16570,8 +16879,9 @@ msgstr "Paima naują įrankį nelaukdamas, kol jis pasieks spausdinimo temperat msgid "No sparse layers (beta)" msgstr "Nėra retų sluoksnių (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Jei įjungta, valymo bokštas nebus spausdinamas tuose sluoksniuose, kur įrankis nekeičiamas. Sluoksniuose, kur įrankis keičiamas, ekstruderis nusileis žemyn atspausdinti valymo bokšto dalies. Naudotojas pats atsako už tai, kad ekstruderis nesusidurtų su spaudiniu." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Jei įjungta, valymo bokštas nebus spausdinamas sluoksniuose be įrankio keitimų. Sluoksniuose su įrankio keitimu ekstruderis nusileis žemyn, kad atspausdintų valymo bokštą, todėl bokštas atsiduria žemiau modelio ir spausdinimo galvutė turi prie jo pasiekti žemyn. Išdėstymai, kuriuose tai susidurtų su jau atspausdintu objektu, atmetami. Neveikia esant sklandžiam pakadriniam filmavimui ar purkštuko apnašų aptikimui, nes jiems reikia bokšto kiekviename sluoksnyje." msgid "Prime all printing extruders" msgstr "Paruošti (prime) visus spausdinimo ekstruderius" @@ -16597,6 +16907,34 @@ msgstr "" msgid "Cyclic" msgstr "Ciklinė" +# AI Translated +msgid "Cyclic order" +msgstr "Ciklinis eiliškumas" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Pasirinktinė gijų seka, naudojama cikliniame įrankių keitimo eiliškume, kaip kableliais atskirti gijų numeriai (pvz., \"3,2,1,4\").\n" +"Kiekvienas sluoksnis spausdina savo gijas pagal šią seką; nenurodytos gijos spausdinamos paskutinės, didėjimo tvarka.\n" +"Palikite tuščią, kad gijos būtų perrenkamos didėjimo tvarka." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Taikyti ciklinį eiliškumą pirmajam sluoksniui" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Taiko ciklinį įrankių keitimo eiliškumą ir pirmajam sluoksniui.\n" +"Pagal numatytuosius nustatymus tai išjungta, nes pirmasis sluoksnis vietoj to išdėstomas siekiant geriausio sukibimo su pagrindu: gijos, kuriomis spausdinamos mažos, trapios pirmojo sluoksnio detalės, spausdinamos paskutinės, todėl tolesni įrankių keitimai ir tuščiosios eigos rečiau nuplėšia tas silpnai įtvirtintas dalis. Šis pirmojo sluoksnio eiliškumas taip pat atsižvelgia į pirmojo sluoksnio pasirinktinę gijų seką, jei ji nustatyta. Ciklinio eiliškumo nauda (papildomi įrankių keitimai kiekvienam sluoksniui suteikia daugiau laiko atvėsti) pirmajam sluoksniui negalioja, nes jis spausdinamas lėtai ir karštas dėl sukibimo.\n" +"Įjunkite tai tik tuomet, jei jums reikia tiksliai tokios pačios įrankių sekos kiekviename sluoksnyje, įskaitant pirmąjį, aukojant šį sukibimo optimizavimą." + msgid "Slice gap closing radius" msgstr "Sluoksniavimo tarpo uždarymo spindulys" @@ -16606,9 +16944,6 @@ msgstr "Plyšiai, mažesni nei 2x tarpo uždarymo spindulys, užpildomi trikampi msgid "Slicing Mode" msgstr "Sluoksniavimo režimas" -msgid "Other" -msgstr "Kita" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "„3DLabPrint“ lėktuvų modeliams naudokite „Lyginis-nelyginis“. Naudokite „Uždaryti kiaurymes“, kad uždarytumėte visas modelio kiaurymes." @@ -17099,6 +17434,14 @@ msgstr "" "\n" "Jei žemiau esančiame nustatyme „Įtraukimo kiekis prieš nuvalymą“ nurodysite reikšmę, perteklinis gijos įtraukimas bus atliktas prieš nuvalymą, kitu atveju – po jo." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Mišrios spalvos posluoksnis" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Įjungia skaidymą į mišrios spalvos posluoksnius. Įjungus sluoksniai, kuriuose yra mišrios spalvos gijų, skaidomi į posluoksnius, kad būtų pasiektas spalvų maišymo efektas." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Valymo bokštelis (angl. \"wiping tower\") gali būti naudojamas likučiams nuo purkštuko nuvalyti ir purkštuko viduje esančiam slėgiui stabilizuoti, siekiant išvengti išvaizdos defektų spausdinant objektus." @@ -17603,6 +17946,14 @@ msgstr "Netikrinama" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Nevykdyti jokių tinkamumo patikrinimų, pavyzdžiui, G-kodo (G-code) trajektorijų konfliktų patikros." +# AI Translated +msgid "Strict mode" +msgstr "Griežtas režimas" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Baigia darbą su ne nuliniu kodu, kai sluoksniuojant pateikiamas nekritinis įspėjimas, kuris kitu atveju būtų tik užregistruotas žurnale, pavyzdžiui, modelis, kuriam reikia atramų, kai atramos išjungtos. Naudokite tai CI arba scenarijais valdomuose procesuose, kurie niekada neturėtų pateikti nepastebimai sugadinto rezultato. Kiekvienas toks įspėjimas taip pat nurodomas su pastoviu klasės vardu result.json masyve `warnings`, kuris rašomas tik Linux sistemoje. Negalima derinti su --no-check, kuris praleidžia atramų patikrą." + msgid "Normative check" msgstr "Normatyvinė patikra" @@ -17615,11 +17966,28 @@ msgstr "Išvesti modelio informaciją" msgid "This outputs the model’s information." msgstr "Tai išveda modelio informaciją." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Tikrinti tinklelį (JSON į stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Išveda į stdout JSON santrauką apie kiekvieną įkeltą objektą ir baigia darbą: jo ribojančius gretasienius ir iškiliojo apvalkalo sienas, ant kurių jį galima paguldyti, su jų normalėmis, plotais ir centrais. Būtent iš šių sienų renkasi --ground-* parinktys. Kompiuterio skaitoma alternatyva --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Tikrinti piešinį (JSON į stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Išveda struktūrizuotą JSON santrauką apie kiekvieną piešimo sluoksnį (atramos, siūlė, MMU spalva, grublėtas paviršius), jau įrašytą į įkeltą modelį — sienelių skaičių, paviršiaus plotą ir ribojantį gretasienį tinklelio koordinatėmis kiekvienai būsenai — ir baigia darbą. Kompiuterio skaitoma alternatyva piešimo įrankių atvėrimui sąsajoje." + msgid "Export Settings" msgstr "Eksportavimo nustatymai" -msgid "This exports settings to a file." -msgstr "Tai eksportuoja nustatymus į failą." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Tai eksportuoja parametrus į failą. Naudokite -, kad jie būtų įrašyti į stdout." msgid "Send progress to pipe" msgstr "Siųsti pažangą į kanalą" @@ -17675,6 +18043,30 @@ msgstr "Pasukti aplink Y ašį" msgid "Rotation angle around the Y axis in degrees." msgstr "Sukimosi kampas aplink Y ašį laipsniais." +# AI Translated +msgid "Ground largest face" +msgstr "Guldyti ant didžiausios sienos" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Paguldo kiekvieną objektą ant didžiausios jo iškiliojo apvalkalo sienos ir nuleidžia jį ant pagrindo. Iš vienodo dydžio sienų paliekama ta, kuri jau nukreipta žemyn. Objektai, neturintys pakankamai didelės sienos atsiremti, paliekami tokie, kokie yra. Transformacijos vykdomos komandų eilutės tvarka, todėl prieš šią parinktį nurodyti pasukimai išlaikomi. --orient 1 vykdoma po visų transformacijų ir pakeičia orientaciją." + +# AI Translated +msgid "Ground face by normal" +msgstr "Guldyti ant sienos pagal normalę" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Paguldo kiekvieną objektą ant tos iškiliojo apvalkalo sienos, kurios išorinė normalė arčiausia krypties NX,NY,NZ, ir nuleidžia jį ant pagrindo. Kryptis nurodoma objekto koordinatėmis, kurios apima prieš šią parinktį nurodytus pasukimus ir sutampa su pagrindo ašimis, nebent įvesties failas objektą pasuka. Pavyzdžiui, 1,0,0 pastato objektą ant jo +X pusės. --orient 1 vykdoma po visų transformacijų ir pakeičia orientaciją." + +# AI Translated +msgid "Ground face at point" +msgstr "Guldyti ant sienos taške" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Paguldo kiekvieną objektą ant tos iškiliojo apvalkalo sienos, kurioje yra taškas X,Y,Z, ir nuleidžia jį ant pagrindo. Taškas nurodomas objekto koordinatėmis, kurios apima prieš šią parinktį nurodytus pasukimus; --inspect-mesh pateikia sienų centrus būtent jomis. Objektai, neturintys tokios sienos, paliekami tokie, kokie yra, o vykdymas nepavyksta, jei tokios sienos neturi nė vienas objektas. --orient 1 vykdoma po visų transformacijų ir pakeičia orientaciją." + msgid "Scale the model by a float factor." msgstr "Keisti modelio mastelį pagal slankiojo kablelio koeficientą." @@ -18182,6 +18574,10 @@ msgstr "Nepavyko suformuoti modelio failo poligonažo arba jame nėra tinkamos g msgid "The supplied file couldn't be read because it's empty." msgstr "Pateikto failo nepavyko nuskaityti, nes jis yra tuščias." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Failo formatas nesuderinamas ir jo nepavyksta perskaityti." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nežinomas failo formatas: įvesties failas privalo turėti .stl, .obj arba .amf(.xml) plėtinį." @@ -19649,19 +20045,19 @@ msgstr "Rodomi tik tie spausdintuvai, kurių spausdintuvo, kaitinamojo siūlo ir msgid "Only display the filament names with changes to filament presets." msgstr "Rodyti tik tuos gijų pavadinimus, kurių gijos profiliai buvo pakeisti." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Bus rodomi tik tie spausdintuvų pavadinimai, kurie turi naudotojo sukurtų profilių, o kiekvienas pasirinktas profilis bus eksportuotas kaip ZIP failas." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Bus rodomi tik tie gijų pavadinimai, kurie turi naudotojo sukurtų profilių, \n" "o visi pasirinkto pavadinimo naudotojo gijos profiliai bus eksportuoti kaip ZIP failas." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Bus rodomi tik tie spausdintuvų pavadinimai, kurie turi pakeistų proceso profilių, \n" "o visi pasirinkto spausdintuvo naudotojo proceso profiliai bus eksportuoti kaip ZIP failas." @@ -19891,7 +20287,7 @@ msgstr "Kopijuoti sistemos informaciją į iškarpinę" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Mums reikia informacijos problemos šaltiniui diagnozuoti. Išsamų vadovą rasite „Wiki“ puslapyje." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Mygtukas „Supakuoti“ (Pack) surenka projekto failą ir dabartinės sesijos žurnalus į ZIP failą." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19933,7 +20329,7 @@ msgstr "Žurnalo lygis" msgid "Stored logs" msgstr "Saugomi žurnalai" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Supakuoja visus saugomus žurnalus į ZIP failą." msgid "Profiles" @@ -20000,7 +20396,7 @@ msgstr "Spausdintuvo tipas nerastas, pasirinkite rankiniu būdu." msgid "Authorizing..." msgstr "Autorizuojama..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Klaida. Nepavyko gauti API žetono (token) autorizacijai" msgid "Could not parse server response." @@ -20448,8 +20844,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Įjungti išmanųjį gijos priskyrimą: priskirkite vieną giją keliems purkštukams, kad sutaupytumėte kuo daugiau" # AI Translated -msgid "Fila Saving" -msgstr "Gijos taupymas" +msgid "File Saving" +msgstr "Failo įrašymas" msgid "Don't remind me again" msgstr "Daugiau neberodyti šio priminimo" @@ -20735,6 +21131,18 @@ msgstr "Šio veiksmo atšaukti nebus galima. Tęsti?" msgid "Skipping objects." msgstr "Praleidžiami objektai." +# AI Translated +msgid "Material Ratio" +msgstr "Medžiagos santykis" + +# AI Translated +msgid "Model Height" +msgstr "Modelio aukštis" + +# AI Translated +msgid "Ratio" +msgstr "Santykis" + msgid "Select Filament" msgstr "Pasirinkti giją" @@ -20814,6 +21222,9 @@ msgstr "Paleisti iš naujo dabar" msgid "NO RAMMING AT ALL" msgstr "VISIŠKAI NENAUDOTI SUTANKINIMO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Tūrinis greitis" @@ -20986,12 +21397,14 @@ msgid "Drying-Dehumidifying" msgstr "Džiovinimas – sausinimas" # AI Translated -msgid " maximum drying temperature is " -msgstr " didžiausia džiovinimo temperatūra yra " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Didžiausia %s džiovinimo temperatūra yra %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " mažiausia džiovinimo temperatūra yra " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Mažiausia %s džiovinimo temperatūra yra %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -21436,6 +21849,128 @@ msgstr "" "Venkite deformacijų (warping)\n" "Ar žinojote, kad spausdinant medžiagas, kurios yra linkusios trauktis ir riestis (pvz., ABS), tinkamas kaitinamojo pagrindo temperatūros padidinimas gali sumažinti deformacijų (warping) tikimybę?" +#~ msgid "Other" +#~ msgstr "Kita" + +#~ msgid "Left: " +#~ msgstr "Kairė:" + +#~ msgid "Right: " +#~ msgstr "Dešinė:" + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Maksimali temperatūra negali viršyti " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Minimali temperatūra neturi būti mažesnė nei " + +#~ msgid "up to" +#~ msgstr "iki" + +#~ msgid "above" +#~ msgstr "virš" + +#~ msgid "from" +#~ msgstr "nuo" + +#~ msgid "Configuration package: " +#~ msgstr "Konfigūracijos paketas: " + +#~ msgid " updated to " +#~ msgstr " atnaujintas į " + +#~ msgid "Grouping error: " +#~ msgstr "Grupavimo klaida: " + +#~ msgid " can not be placed in the " +#~ msgstr "negali būti įkeltas į " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " didžiausia džiovinimo temperatūra yra " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " mažiausia džiovinimo temperatūra yra " + +# AI Translated +#~ msgid "needs" +#~ msgstr "reikalauja" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "neįjungta" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "medžiaga nepatalpinta" + +#~ msgid "Select the language" +#~ msgstr "Pasirinkite kalbą" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Pasirinkti papildinį" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Kryptis, kuria užpildomi viršutiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n" +#~ "„Į išorę“ prasideda paviršiaus centre, todėl bet koks perteklinė medžiaga stumiama link krašto, kur ji mažiausiai matoma. „Į vidų“ prasideda nuo krašto ir baigiasi ankštomis kreivėmis centre.\n" +#~ "Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Kryptis, kuria užpildomi apatiniai paviršiai naudojant į centrą orientuotą raštą (koncentrinį, Archimedo stygų, Oktogramos spiralės).\n" +#~ "„Į vidų“ pradeda kiekvieną paviršių platesnėmis išorinėmis kreivėmis, o tai pagerina pirmojo sluoksnio sukibimą ant pagrindų, kur ankštos kreivės centre gali nesilaikyti. „Į išorę“ prasideda centre, stumdama bet kokią perteklinę medžiagą link krašto.\n" +#~ "Numatytoji tvarka naudoja trumpiausio kelio rikiavimą, kuris gali vykti bet kuria kryptimi." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Jei įjungta, valymo bokštas nebus spausdinamas tuose sluoksniuose, kur įrankis nekeičiamas. Sluoksniuose, kur įrankis keičiamas, ekstruderis nusileis žemyn atspausdinti valymo bokšto dalies. Naudotojas pats atsako už tai, kad ekstruderis nesusidurtų su spaudiniu." + +#~ msgid "This exports settings to a file." +#~ msgstr "Tai eksportuoja nustatymus į failą." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Tiesioginei „Native Wayland“ peržiūrai reikalingas „GStreamer GTK“ vaizdo sinchronizatorius (video sink). Įdiekite „GStreamer“ skirtą „gtksink“ papildinį, tada iš naujo paleiskite „OrcaSlicer“." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nepavyko inicijuoti „native Wayland GStreamer“ vaizdo sinchronizatoriaus (video sink). Patikrinkite „GStreamer GTK“ papildinio įdiegimą." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Šiai užduočiai atlikti reikalingas \"Windows Media Player\"! Ar norite įjungti \"Windows Media Player\" savo operacinėje sistemoje?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "„BambuSource“ neteisingai užregistruotas medijos atkūrimui! Paspauskite „Taip“, kad jį perregistruotumėte. Jums reikės patvirtinti du kartus." + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Trūksta BambuSource komponento, užregistruoto medijos atkūrimui! Iš naujo įdiekite OrcaSlicer arba kreipkitės pagalbos į bendruomenę." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Naudojant \"BambuSource\" iš kito diegimo šaltinio, vaizdo įrašų atkūrimas gali būti neteisingas! Paspauskite Taip, kad tai ištaisytumėte." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Jūsų sistemoje nėra \"GStreamer\" H.264 kodekų, reikalingų vaizdo įrašams atkurti. (Pabandykite įdiegti gstreamer1.0-plugins-bad arba gstreamer1.0-libav paketus, tada iš naujo paleiskite \"Orca Slicer\")" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Gijos taupymas" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -22206,20 +22741,12 @@ msgstr "" #~ msgid "Please correct them in the param tabs" #~ msgstr "Prašome juos ištaisyti parametrų skirtukuose" -#~ msgid "Name of components inside STEP file is not UTF8 format!" +#~ msgid "Name of components inside STEP file is not UTF-8 format!" #~ msgstr "Komponentų pavadinimai STEP faile nėra UTF-8 formato!" #~ msgid "The name may show garbage characters!" #~ msgstr "Pavadinimas gali rodyti neskaitomus simbolius!" -#, c-format, boost-format -#~ msgid "" -#~ "The object from file %s is too small, and maybe in meters or inches.\n" -#~ " Do you want to scale to millimeters?" -#~ msgstr "" -#~ "Objektas iš failo „%s“ yra per mažas ir galimai nurodytas metrais arba coliais.\n" -#~ "Ar norite mastelį pakeisti į milimetrus?" - #~ msgid "" #~ "This file contains several objects positioned at multiple heights.\n" #~ "Instead of considering them as multiple objects, should \n" @@ -22609,21 +23136,6 @@ msgstr "" #~ msgid "Maximum detour distance for avoiding crossing wall. Don't detour if the detour distance is larger than this value. Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path. Zero to disable." #~ msgstr "Maksimalus apylankos atstumas sienelių kirtimui išvengti. Apylanka nedaroma, jei jos atstumas viršija šią reikšmę. Apylankos ilgis gali būti nurodomas absoliučia verte arba procentais (pavyzdžiui, 50 %) nuo tiesioginio judėjimo trajektorijos. Įrašius 0 – funkcija išjungiama." -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant šalto pagrindo (Cool Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured Cool Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant tekstūruoto šalto pagrindo (Textured Cool Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Engineering Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant inžinerinio pagrindo (Engineering Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the High Temp Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant aukštos temperatūros pagrindo (High Temp Plate)." - -#~ msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Textured PEI Plate." -#~ msgstr "Pagrindo temperatūra visiems sluoksniams, išskyrus pirmąjį. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant tekstūruoto PEI pagrindo (Textured PEI Plate)." - #~ msgid "Bed temperature of the first layer. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." #~ msgstr "Pirmojo sluoksnio pagrindo temperatūra. Reikšmė 0 reiškia, kad ši gija nepritaikyta spausdinti ant „Cool Plate SuperTack“ pagrindo." diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index 28ad63d455..24d2f3a322 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -2679,15 +2679,6 @@ msgstr "Er is een update beschikbaar. Open het dialoogvenster voor de voorinstel msgid "%s has been removed." msgstr "%s is verwijderd." -msgid "Switching application language" -msgstr "De taal van de applicatie wordt aangepast" - -msgid "Select the language" -msgstr "Kies de taal" - -msgid "Language" -msgstr "Taal" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -3197,6 +3188,10 @@ msgstr "Bewerken" msgid "Merge with" msgstr "Samenvoegen met" +# AI Translated +msgid "Decompose Color" +msgstr "Kleur ontleden" + # AI Translated msgid "Delete this filament" msgstr "Dit filament verwijderen" @@ -3519,6 +3514,10 @@ msgstr "Montage" msgid "Merge parts to an object" msgstr "Onderdelen samenvoegen tot een object" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Het gebruik van variabele laaghoogte in combinatie met de sublaag met gemengde kleur kan de kwaliteit van de kleurmenging verslechteren." + # AI Translated msgid "Add layers" msgstr "Lagen toevoegen" @@ -4025,12 +4024,14 @@ msgid "Switch track at Filament Track Switch" msgstr "Van baan wisselen bij de Filament Track Switch" # AI Translated -msgid "The maximum temperature cannot exceed " -msgstr "De maximumtemperatuur mag niet hoger zijn dan " +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "De maximumtemperatuur mag niet hoger zijn dan %d" # AI Translated -msgid "The minmum temperature should not be less than " -msgstr "De minimumtemperatuur mag niet lager zijn dan " +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "De minimumtemperatuur mag niet lager zijn dan %d" # AI Translated msgid "Type to filter..." @@ -5002,6 +5003,15 @@ msgstr "" "Fout bij het exporteren naar output-G-code. Is de SD-kaart geblokkeerd tegen schrijven?\n" "Foutbericht: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Het kopiëren van de tijdelijke G-code naar de uitvoer-G-code is mislukt.\n" +"Foutmelding: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Fout bij het exporteren naar output-G-code. Het probleem ligt mogelijk bij het doelapparaat. Probeer het opnieuw te exporteren of gebruik een ander apparat. De beschadigde G-code is opgeslagen als %1%.tmp." @@ -5217,7 +5227,7 @@ msgstr "" "De waarde wordt teruggezet naar 0." # AI Translated -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Afwisselende extra wand werkt niet goed wanneer 'verticale wanddikte waarborgen' op Alles is ingesteld." # AI Translated @@ -5265,7 +5275,7 @@ msgstr "" # AI Translated msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height moet kleiner zijn dan layer_height.\n" @@ -5274,7 +5284,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "De vergrendeldiepte moet kleiner zijn dan de huiddiepte.\n" @@ -5317,6 +5327,9 @@ msgstr "" "Ja - Pas de instellingen aan en zet de vaas modus automatisch aan\n" "Nee - Pas de vaas modus deze keer niet toe" +msgid "N/A" +msgstr "N/B" + msgid "Printing" msgstr "Printen" @@ -5821,14 +5834,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Waarde %s valt buiten het bereik. Het geldige bereik loopt van %d tot %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Is het %s%% or %s %s?\n" -"JA voor %s%%, \n" -"NEE voor %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Is het %s%% or %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5853,29 +5863,22 @@ msgstr "Ongeldig patroon. Gebruik N, N#K of een door komma's gescheiden lijst me msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Onjuist formaat. Het Vector formaat wordt verwacht: \"%1%\"" -msgid "N/A" -msgstr "N/B" - # AI Translated msgid "System agents" msgstr "Systeemagenten" -# AI Translated -msgid "No plugin selected" -msgstr "Geen plug-in geselecteerd" - # AI Translated msgid "Add plugin" msgstr "Plug-in toevoegen" -# AI Translated -msgid "Select plugin" -msgstr "Plug-in selecteren" - # AI Translated msgid "Remove plugin" msgstr "Plug-in verwijderen" +# AI Translated +msgid "No plugin selected" +msgstr "Geen plug-in geselecteerd" + # AI Translated msgid "Configure" msgstr "Configureren" @@ -6152,14 +6155,20 @@ msgstr "Op optimaal instellen" msgid "Regroup filament" msgstr "Filamenten opnieuw groeperen" -msgid "up to" -msgstr "tot" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "tot %1% mm" -msgid "above" -msgstr "Boven" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "boven %1% mm" -msgid "from" -msgstr "Van" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "van %1% tot %2% mm" msgid "Usage" msgstr "Gebruik" @@ -6545,7 +6554,7 @@ msgid "Size:" msgstr "Maat:" # AI Translated -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Er zijn conflicten tussen G-code-paden gevonden op laag %d, Z = %.2lfmm. Plaats de conflicterende objecten verder uit elkaar (%s <-> %s)." @@ -6880,6 +6889,14 @@ msgstr "Bewaar project als" msgid "Save current project as" msgstr "Bewaar huidig project als" +# AI Translated +msgid "Publish 3MF" +msgstr "3MF publiceren" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Een 3MF-bestand exporteren met de geselecteerde instellingen erin ingesloten" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF importeren" @@ -6887,11 +6904,11 @@ msgid "Load a model" msgstr "Laad een model" # AI Translated -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "ZIP-archief importeren" # AI Translated -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Laad modellen uit een ZIP-archief" msgid "Import Configs" @@ -8265,6 +8282,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Onderste" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Deze instelling geeft geen type plug-infunctionaliteit op." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Deze instelling geeft een niet-herkend type plug-infunctionaliteit op: " + # AI Translated msgid "Plugin Selection" msgstr "Plug-inselectie" @@ -8552,6 +8577,10 @@ msgstr "Huidig printbed aanpassen" msgid "The %s nozzle can not print %s." msgstr "Het %s-mondstuk kan %s niet printen." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Het printen van filament met gemengde kleur op een printer met één extruder vereist frequente filamentwissels en spoelbeurten, wat het afval en het risico op verstopping van het mondstuk of de afvalgoot aanzienlijk kan vergroten." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8695,6 +8724,26 @@ msgstr "Synchroniseer filamentlijst vanuit AMS" msgid "Set filaments to use" msgstr "Stel filamenten in om te gebruiken" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Gemengd filament toevoegen" + +# AI Translated +msgid "Mixed Filament" +msgstr "Gemengd filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Laatste gemengde filament verwijderen" + +# AI Translated +msgid "Add mixed filament" +msgstr "Gemengd filament toevoegen" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Het gemengde filament bevat ongeldige of niet-overeenkomende componenten. Bewerk de betrokken items opnieuw." + msgid "Search plate, object and part." msgstr "Zoek plaat, object en onderdeel." @@ -8702,6 +8751,18 @@ msgstr "Zoek plaat, object en onderdeel." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Het gemengde filament bevat ongeldige componentverwijzingen" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Bewerken / Verwijderen / Samenvoegen" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Het gemengde doelfilament gebruikt dit fysieke filament als component. Bij het samenvoegen wordt dit fysieke filament verwijderd en kan het gemengde filament ongeldig worden. Doorgaan?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8860,8 +8921,16 @@ msgstr "Controleer of de G-codes in deze presets veilig zijn om schade aan de ma msgid "Customized Preset" msgstr "Aangepaste voorinstelling" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Naam van componenten in step-bestand is niet UTF8-formaat!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Sommige gepubliceerde instellingen konden niet worden toegepast:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Sommige filamentsleuven zijn gewijzigd:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Naam van componenten in step-bestand is niet UTF-8-formaat!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Vanwege niet-ondersteunde tekstcodering kunnen er onjuiste tekens verschijnen!" @@ -8883,10 +8952,10 @@ msgstr "Het volume van het object is 0" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Het object uit bestand %s is erg klein, en misschien in meters of inches.\n" -" Wil je schalen naar millimeters?" +"Wil je schalen naar millimeters?" msgid "Object too small" msgstr "He tobject is te klein" @@ -8903,6 +8972,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Object met meerdere onderdelen gedetecteerd" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Texturen aan filamenten koppelen" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Waarschuwing bij importeren van textuur" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Wilt u deze bestanden laden als een enkel object bestaande uit meerdere onderdelen?\n" @@ -9134,6 +9211,22 @@ msgstr "" msgid "Sync now" msgstr "Nu synchroniseren" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Het importeren van de textuur is mislukt. Het model lijkt textuurgegevens te bevatten, maar het importproces kon niet worden voltooid. Het model wordt alleen als geometrie geïmporteerd." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Textuurkleuren toepassen..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D-weergave bijwerken..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Textuurkleuren toegepast." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Je kunt de aangepaste voorinstellingen bewaren voor het nieuwe project of ze laten vervallen" @@ -9271,6 +9364,21 @@ msgstr "Bewaar het geslicede bestand als:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Het bestand %s is naar de opslagruimte van de printer gestuurd en kan op de printer worden bekeken." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MF-bestand publiceren als:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Het exporteren van het gepubliceerde 3MF-bestand is mislukt.\n" +"Controleer of de map online bestaat of dat andere programma's het bestand geopend hebben." + +msgid "Publish" +msgstr "Publiceren" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Het mondstuktype is niet ingesteld. Stel het mondstuk in en probeer het opnieuw." @@ -9511,9 +9619,6 @@ msgstr "Wilt u doorgaan?" msgid "Language selection" msgstr "Taal selectie" -msgid "Switching application language while some presets are modified." -msgstr "De taal van de toepassing aanpaasen terwijl sommige voorinstellingen zijn aangepast." - msgid "Asia-Pacific" msgstr "Azië-Pacific" @@ -9628,6 +9733,9 @@ msgstr "Huidig instancepad: " msgid "General" msgstr "Algemeen" +msgid "Language" +msgstr "Taal" + msgid "Metric" msgstr "Metrisch" @@ -10132,9 +10240,6 @@ msgstr "Bij het verschuiven van de laagschuifregelaar in de slicevoorvertoning w msgid "Dimmed layer brightness" msgstr "Helderheid van gedimde lagen" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -10527,6 +10632,10 @@ msgstr "Spiraalvaas" msgid "First layer filament sequence" msgstr "Eerste laag filamentvolgorde" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "De filamentlijst bevat gemengde filamenten. De aangepaste filamentvolgorde wordt niet toegepast." + msgid "By Layer" msgstr "Op laag" @@ -10554,9 +10663,6 @@ msgstr "Ga naar de website om het model te publiceren" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notitie: het voorbereiden kan enkele minuten duren. Even geduld alstublieft." -msgid "Publish" -msgstr "Publiceren" - msgid "Publish was canceled" msgstr "Het publiceren is geannuleerd" @@ -10573,6 +10679,81 @@ msgstr "Gegevens uploaden" msgid "Jump to webpage" msgstr "Ga naar de website" +# AI Translated +msgid "Material" +msgstr "Materiaal" + +# AI Translated +msgid "Mixed filament" +msgstr "Gemengd filament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Sommige gemengde filamenten zijn afhankelijk van filamenten die niet worden gepubliceerd:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (gemengd)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% heeft %2% nodig, dat niet is ingeschakeld." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% heeft %2% nodig, waarvan het materiaal niet wordt gepubliceerd." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Om een gemengd filament te publiceren, schakel je elk filament in dat het gebruikt en kies je Volledig publiceren of voldoe je aan de Type-vereiste ervan." + +# AI Translated +msgid "Publish anyway" +msgstr "Toch publiceren" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MF publiceren..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Selecteer welke instellingen in het 3MF-bestand worden gepubliceerd" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki over 3MF publiceren" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Videohandleiding over 3MF publiceren" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Gemengd filament - wordt als geheel gepubliceerd wanneer hierboven \"Inschakelen\" is geselecteerd" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Dit gemengde filament publiceren en de samenstellende filamenten inschakelen + volledig publiceren" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Deze filamentsleuf publiceren in het 3MF-bestand" + +# AI Translated +msgid "Full Publish" +msgstr "Volledig publiceren" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Het volledige filament van deze sleuf insluiten in het 3MF-bestand" + +# AI Translated +msgid "Filter non-selected" +msgstr "Niet-geselecteerde filteren" + #, c-format, boost-format msgid "Save %s as" msgstr "Bewaar %s als" @@ -10591,6 +10772,10 @@ msgstr "Kopieert alle overgeërfde waarden van de bovenliggende voorinstelling n msgid "Detach from parent" msgstr "Losmaken van bovenliggend element" +# AI Translated +msgid "Save without parent" +msgstr "Opslaan zonder bovenliggend element" + # AI Translated msgid "Unique preset" msgstr "Unieke voorinstelling" @@ -11361,9 +11546,17 @@ msgstr "Voor klontdetectie is een prime toren vereist. Zonder prime toren kunnen msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Het inschakelen van zowel precieze Z-hoogte als de spoeltoren kan slicefouten veroorzaken. Wilt u precieze Z-hoogte nog steeds inschakelen?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Vloeiende timelapse heeft op elke laag een prime toren nodig, wat niet samengaat met \"Geen dunne lagen\". \"Geen dunne lagen\" is uitgeschakeld." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Een prime-toren is vereist voor een vloeiende timelapse-modus. Er kunnen gebreken ontstaan aan het model zonder prime-toren. Wilt u de prime-toren inschakelen?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Geen dunne lagen\" gaat niet samen met vloeiende timelapse, die op elke laag een prime toren nodig heeft. De timelapse is overgeschakeld naar de traditionele modus." + msgid "Still print by object?" msgstr "Print je nog steeds per object?" @@ -11752,10 +11945,6 @@ msgstr "Geschikte proces profielen" msgid "Printable space" msgstr "Ruimte waarbinnen geprint kan worden" -# AI Translated -msgid "Printer Agent" -msgstr "Printeragent" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Selecteer de implementatie van de netwerkagent voor de communicatie met de printer. Beschikbare agenten worden bij het opstarten geregistreerd." @@ -12027,12 +12216,12 @@ msgid "No modifications need to be copied." msgstr "Er hoeven geen wijzigingen te worden gekopieerd." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parameters kopiëren" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Parameters van %s wijzigen" # AI Translated @@ -12196,14 +12385,6 @@ msgstr "Aantal extruders" msgid "Capabilities" msgstr "Mogelijkheden" -# AI Translated -msgid "Left: " -msgstr "Links: " - -# AI Translated -msgid "Right: " -msgstr "Rechts: " - msgid "Show all presets (including incompatible)" msgstr "Toon alle presets (inclusief incompatibele)" @@ -12618,33 +12799,6 @@ msgstr "Volumes reinigen voor filament wijziging" msgid "Please choose the filament colour" msgstr "Kies de filamentkleur" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Voor de native Wayland-liveview is de GStreamer GTK-videosink nodig. Installeer de gtksink-plug-in voor GStreamer en start OrcaSlicer opnieuw." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Initialiseren van de native Wayland GStreamer-videosink is mislukt. Controleer de installatie van uw GStreamer GTK-plug-in." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Voor deze taak is Windows Media Player vereist! Wilt u 'Windows Media Player' inschakelen voor uw besturingssysteem?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource is niet correct geregistreerd voor het afspelen van media! Klik op Ja om het opnieuw te registreren. U krijgt twee keer een melding" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Ontbrekend BambuSource-component geregistreerd voor media afspelen! Installeer OrcaSlicer opnieuw of zoek hulp in de community." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Er wordt een BambuSource van een andere installatie gebruikt; het afspelen van video werkt mogelijk niet correct! Klik op Ja om dit te herstellen." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Op uw systeem ontbreken H.264-codecs voor GStreamer, die nodig zijn om video af te spelen. (Probeer de pakketten gstreamer1.0-plugins-bad of gstreamer1.0-libav te installeren en Orca Slicer opnieuw te starten.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "De cloudagent is niet beschikbaar. Start OrcaSlicer opnieuw en probeer het nogmaals." @@ -13173,17 +13327,22 @@ msgstr "Repareren geannuleerd" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Het kopieeren van bestand %1% naar %2% is mislukt: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Nieuwe leveranciersprofielen downloaden: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Configuratiepakket: %1% bijgewerkt naar %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Downloaden van leveranciersprofielen mislukt: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Controleer niet-opgeslagen wijzigingen voordat u de configuratie bijwerkt." -# AI Translated -msgid "Configuration package: " -msgstr "Configuratiepakket: " - -# AI Translated -msgid " updated to " -msgstr " bijgewerkt naar " - msgid "Open G-code file:" msgstr "Open G-code bestand:" @@ -13251,12 +13410,14 @@ msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping wordt alleen ondersteund door Klipper, RepRapFirmware en Marlin 2." # AI Translated -msgid "Grouping error: " -msgstr "Groeperingsfout: " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Groeperingsfout: %1% kan niet in de linker nozzle worden geplaatst" # AI Translated -msgid " can not be placed in the " -msgstr " kan niet worden geplaatst in de " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Groeperingsfout: %1% kan niet in de rechter nozzle worden geplaatst" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -13371,6 +13532,10 @@ msgstr "%1% staat te dicht bij anderen en er kunnen botsingen ontstaan." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% is te hoog en er kunnen botsingen ontstaan." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "De onderlinge positie van het model en de prime toren voldoet niet aan de eisen van de functie \"Geen dunne lagen\". Pas hun onderlinge posities aan, verlaag de modelhoogte of schakel \"Geen dunne lagen\" uit." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "is te dicht bij het uitsluitingsgebied, er botsingen optreden tijdens het printen." @@ -13410,6 +13575,10 @@ msgstr "Als u toch wilt printen, kunt u de optie inschakelen via Voorkeuren / Be msgid "No extrusions under current settings." msgstr "Geen extrusion onder de huidige instellingen" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Er wordt een gemengd filament met verloop gebruikt, maar 'Sublaag met gemengde kleur' is uitgeschakeld. Het verloop wordt niet geprint." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Vloeiende modus van timelapse wordt niet ondersteund wanneer \"per object\" sequentie is ingeschakeld." @@ -13452,6 +13621,10 @@ msgstr "Verklein eventueel uw model of wijzig de huidige printinstellingen en pr msgid "Variable layer height is not supported with Organic supports." msgstr "Variabele laaghoogte wordt niet ondersteund met organische steunen." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Het filament van het afveegblok mag geen gemengd filament zijn." + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Verschillende mondstukdiameters en verschillende filamentdiameters werken mogelijk niet goed wanneer de prime toren is ingeschakeld. Dit is zeer experimenteel; ga daarom voorzichtig te werk." @@ -13758,6 +13931,10 @@ msgstr "3MF gebruiken in plaats van G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Schakel dit in als de printer een 3MF-bestand als printopdracht accepteert. Indien ingeschakeld verzendt Orca Slicer het geslicede bestand als een .gcode.3mf in plaats van als een gewoon .gcode-bestand." +# AI Translated +msgid "Printer Agent" +msgstr "Printeragent" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Selecteer de implementatie van de netwerkagent voor de communicatie met de printer." @@ -13843,14 +14020,12 @@ msgstr "mm of %" msgid "Other layers" msgstr "Andere lagen" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Cool Plate SuperTack niet ondersteunt." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament het afdrukken op de Cool Plate niet ondersteunt." -# AI Translated msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Dit is de bedtemperatuur voor alle lagen behalve de eerste. Een waarde van 0 betekent dat het filament printen op de Textured Cool Plate niet ondersteunt." @@ -14924,6 +15099,10 @@ msgstr "Uitgelijnd Rechtlijnig" msgid "Concentric" msgstr "Concentrisch" +# AI Translated +msgid "Spiral Inset" +msgstr "Spiraalinzet" + # AI Translated msgid "Hilbert Curve" msgstr "Hilbertkromme" @@ -15021,12 +15200,12 @@ msgstr "Vulvolgorde bovenoppervlak" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Richting waarin bovenoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n" -"Naar buiten begint in het midden van het oppervlak, zodat overtollig materiaal naar de rand wordt geduwd, waar het het minst zichtbaar is. Naar binnen begint aan de rand en eindigt met de krappe bochten in het midden.\n" +"Richting waarin bovenvlakken worden gevuld bij een patroon dat vanuit het midden werkt (Concentrisch, Spiraalinzet, Archimedische koorden, Octagram Spiraal).\n" +"Naar buiten begint in het midden van het vlak, zodat overtollig materiaal naar de rand wordt geduwd, waar het het minst opvalt. Naar binnen begint aan de rand en eindigt met de krappe bochten in het midden.\n" "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen." # AI Translated @@ -15035,12 +15214,12 @@ msgstr "Vulvolgorde onderoppervlak" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Richting waarin onderoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n" -"Naar binnen begint elk oppervlak met de bredere buitenbochten, wat de hechting van de eerste laag verbetert op printbedden waar de krappe bochten in het midden mogelijk niet hechten. Naar buiten begint in het midden en duwt overtollig materiaal naar de rand.\n" +"Richting waarin ondervlakken worden gevuld bij een patroon dat vanuit het midden werkt (Concentrisch, Spiraalinzet, Archimedische koorden, Octagram Spiraal).\n" +"Naar binnen begint elk vlak met de bredere buitenste bochten, wat de hechting van de eerste laag verbetert op printbedden waar de krappe bochten in het midden mogelijk niet plakken. Naar buiten begint in het midden en duwt overtollig materiaal naar de rand.\n" "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen." msgid "Internal solid infill pattern" @@ -15158,6 +15337,14 @@ msgstr "Tegen de klok in" msgid "Clockwise" msgstr "Met de klok mee" +# AI Translated +msgid "Distance to rod" +msgstr "Afstand tot de stang" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Horizontale afstand van de punt van het mondstuk tot de verste rand van de stang. Wordt gebruikt om botsingen te vermijden bij printen op basis van object." + msgid "Height to rod" msgstr "Hoogte tot geleider" @@ -15365,6 +15552,8 @@ msgstr "Laag tijd" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "De printkop ventilator wordt ingeschakeld voor lagen waarvan de geschatte printtijd korter is dan deze waarde. Ventilatorsnelheid wordt geïnterpoleerd tussen de minimale en maximale ventilatorsnelheden volgens de printtijd van de laag" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15724,6 +15913,62 @@ msgstr "Support materiaal" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support materiaal wordt vaak gebruikt om support en support interfaces af te drukken." +# AI Translated +msgid "Is mixed filament" +msgstr "Is gemengd filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Geeft aan of dit filamentslot een gemengd filament is dat uit meerdere fysieke filamenten bestaat" + +# AI Translated +msgid "Mixed filament components" +msgstr "Componenten van gemengd filament" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Door komma's gescheiden indexen van de componentfilamenten, beginnend bij 1, bijv. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Sublaagverhoudingen van gemengd filament" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Door komma's gescheiden verhoudingswaarden die samen 1.0 zijn, bijv. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Verloop van gemengd filament" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Schakelt de verloopmodus in Z-richting in voor de sublagen van gemengd filament. Wanneer ingeschakeld variëren de sublaagverhoudingen lineair over de lagen." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Verloopbereik van gemengd filament" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Begin- en eindverhouding van de eerste component in de verloopmodus. Door een komma gescheiden paar, bijv. \"0.10,0.90\" betekent 10% tot 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Verloopcurve van gemengd filament" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Optionele aangepaste curve in Photoshop-stijl die de Z-voortgang koppelt aan de verhouding van de eerste component. Gecodeerd als door verticale strepen gescheiden controlepunten, in de vorm \"x,y\" (verouderd) of \"x,y,m_in,m_out\" wanneer de raaklijn moet worden overschreven (een lege waarde of \"nan\" gebruikt de PCHIP-standaard). x ligt in [0,1]; y wordt begrensd tot het ingestelde verhoudingsbereik, bijv. \"0,0.15|0.5,0.50|1,0.85\". Wanneer het veld leeg is, wordt het lineaire gradient_range gebruikt." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Verloop per onderdeel van gemengd filament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Wanneer de verloopmodus is ingeschakeld, wordt het verloop op elk onderdeel van een montage afzonderlijk toegepast in plaats van de hele montage als één Z-bereik te behandelen." + # AI Translated msgid "Filament printable" msgstr "Filament printbaar" @@ -17162,6 +17407,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "De maximaal toegestane uitgangskracht van de Y-as" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -17172,6 +17418,7 @@ msgid "The machine bed mass load of Y axis" msgstr "De massabelasting van het machinebed op de Y-as" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17510,8 +17757,8 @@ msgid "Reduce infill retraction" msgstr "Reduceer terugtrekken (retraction) bij vulling (infill)" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Trek niet terug als de beweging zich volledig in een opvulgebied bevindt. Dat betekent dat het sijpelen niet zichtbaar is. Dit kan de retraction times voor complexe modellen verkorten en printtijd besparen, maar het segmenteren en het genereren van G-codes langzamer maken. Let op: z-hop wordt ook niet uitgevoerd in gebieden waar het terugtrekken wordt overgeslagen." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Trek niet terug als de beweging zich volledig in een opvulgebied bevindt. Dat betekent dat het sijpelen niet zichtbaar is. Dit kan de retraction times voor complexe modellen verkorten en printtijd besparen, maar het segmenteren en het genereren van G-codes langzamer maken. Let op: Z-hop wordt ook niet uitgevoerd in gebieden waar het terugtrekken wordt overgeslagen." # AI Translated msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -17554,6 +17801,20 @@ msgstr "Overhange wand detecteren" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Dit maakt het mogelijk om het overhangpercentage ten opzichte van de lijnbreedte te detecteren en gebruikt verschillende snelheden om af te drukken. Voor 100%% overhang wordt de brugsnelheid gebruikt." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Niet-ondersteunde wanden als laatste printen" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Wandlussen die volledig in de lucht liggen, worden pas geprint zodra iets ze kan dragen:\n" +"ze worden geëxtrudeerd na de andere wanden van hun eiland, de binnenste eerst, ongeacht de wandvolgorde.\n" +"Een lus die alleen de bruggen van deze laag kunnen verankeren, wacht tot die bruggen geprint zijn, terwijl een lus die langs een ondersteunde wand loopt zijn plek vóór de vulling behoudt, die hem als verankering nodig heeft." + # AI Translated msgid "Outer walls" msgstr "Buitenste wanden" @@ -17700,7 +17961,7 @@ msgstr "Terugtrekhoeveelheid na vegen" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "De lengte van de snelle terugtrekking na het vegen, relatief ten opzichte van de terugtreklengte.\n" @@ -17754,7 +18015,7 @@ msgstr "Wanneer het terugtrekken vóór een gereedschapswissel wordt geactiveerd msgid "Z-hop height" msgstr "Z-hop-hoogte" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Wanneer er een terugtrekking (retraction) is, wordt het mondstuk een beetje opgetild om ruimte te creëren tussen het mondstuk en de print. Dit voorkomt dat het mondstuk de print raakt bij verplaatsen. Het gebruik van spiraallijnen om Z op te tillen kan stringing voorkomen." msgid "Z-hop lower boundary" @@ -18061,6 +18322,39 @@ msgstr "Vegen bij lussen" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Om de zichtbaarheid van de naad bij een gesloten lusextrusie te minimaliseren, wordt er een kleine beweging naar binnen uitgevoerd voordat de extruder de lus verlaat." +# AI Translated +msgid "Wipe inward" +msgstr "Naar binnen vegen" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Geldt alleen voor buitenwanden, inclusief gatcontouren. Beweegt het hete mondstuk tijdens het vegen naar reeds geprinte binnenwanden, om het opnieuw opwarmen van vers geprint plastic en naadsporen te beperken.\n" +"\n" +"Vooral nuttig bij laaghoogtes onder 0,1 mm, waar veegsporen beter zichtbaar zijn.\n" +"\n" +"Gebruikt het gewone vegen als er nog geen aangrenzende binnenwand geprint is (gebieden met één wand of de wandvolgorde Buiten/Binnen), of als er geen ondersteund pad naar binnen gevonden kan worden, bijvoorbeeld bij krappe hoeken of onderbrekingen in de naad." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Afstand voor naar binnen vegen" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"De afstand waarover het veegpad van de buitenste omtrek af wordt verschoven, opgegeven in millimeters of als percentage van de werkelijke extrusiebreedte van de buitenwand.\n" +"\n" +"Bijvoorbeeld: 50% verschuift het pad over de helft van de breedte van de buitenwand. De effectieve verschuiving wordt begrensd door zowel de werkelijke breedte van de buitenwand als de beschikbare ruimte tot de aangrenzende wand, dus waarden boven 100% of een gelijkwaardige absolute afstand hebben geen extra effect. Stel in op 0 om de verschuiving uit te schakelen." + # AI Translated msgid "Wipe before external loop" msgstr "Vegen vóór de externe lus" @@ -18368,8 +18662,9 @@ msgstr "Pakt het nieuwe gereedschap op zonder te wachten tot het de printtempera msgid "No sparse layers (beta)" msgstr "Geen dunne lagen (bèta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Het afveegblok wordt niet geprint bij lagen zonder toolwisselingen als dit is ingeschakeld. Op lagen met een toolwissel zal de extruder neerwaarts bewegen naar het afveegblok. De gebruiker is verantwoordelijk voor eventuele botsingen met de print." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Indien ingeschakeld wordt het afveegblok niet geprint op lagen zonder gereedschapswissels. Op lagen met een gereedschapswissel beweegt de extruder omlaag om het afveegblok te printen, zodat het blok onder het model uitkomt en de printkop ernaartoe omlaag moet reiken. Opstellingen waarbij dat zou botsen met een al geprint voorwerp worden afgewezen. Heeft geen effect bij vloeiende timelapse of klontdetectie, die op elke laag een blok nodig hebben." msgid "Prime all printing extruders" msgstr "Veeg alle printextruders af" @@ -18395,6 +18690,34 @@ msgstr "" msgid "Cyclic" msgstr "Cyclisch" +# AI Translated +msgid "Cyclic order" +msgstr "Cyclische volgorde" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Aangepaste filamentvolgorde die door de cyclische gereedschapswisselvolgorde wordt gebruikt, als filamentnummers gescheiden door komma's (bijv. \"3,2,1,4\").\n" +"Elke laag print zijn filamenten volgens deze volgorde; niet vermelde filamenten worden als laatste geprint, in oplopende volgorde.\n" +"Laat leeg om de filamenten in oplopende volgorde te doorlopen." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Cyclische volgorde toepassen op de eerste laag" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Past de cyclische gereedschapswisselvolgorde ook toe op de eerste laag.\n" +"Standaard staat dit uit, omdat de eerste laag juist wordt geordend voor de beste printbed hechting: filamenten die kleine, kwetsbare details van de eerste laag printen, worden als laatste geprint, zodat de daaropvolgende gereedschapswissels en verplaatsingen die zwak verankerde delen minder snel losstoten. Deze volgorde van de eerste laag houdt ook rekening met een aangepaste filamentvolgorde voor de eerste laag, als die is ingesteld. Het voordeel van de cyclische volgorde (extra gereedschapswissels geven elke laag meer tijd om af te koelen) geldt niet voor de eerste laag, die langzaam en heet wordt geprint voor de hechting.\n" +"Schakel dit alleen in als je op elke laag, inclusief de eerste, exact dezelfde gereedschapsvolgorde nodig hebt, ten koste van die hechtingsoptimalisatie." + msgid "Slice gap closing radius" msgstr "Sluitingsradius van de gap" @@ -18404,9 +18727,6 @@ msgstr "Scheuren kleiner dan 2x de sluitradius van de spleet worden opgevuld tij msgid "Slicing Mode" msgstr "Slicing-modus" -msgid "Other" -msgstr "Anders" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Gebruik „Even-Oneven” voor 3DLabPrint-vliegtuigmodellen. Gebruik „Gaten sluiten” om alle gaten in het model te sluiten." @@ -18947,6 +19267,14 @@ msgstr "" "\n" "Als u hieronder een waarde instelt bij de terugtrekhoeveelheid vóór het vegen, wordt de overtollige terugtrekking vóór het vegen uitgevoerd; anders gebeurt dat erna." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Sublaag met gemengde kleur" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Schakelt het opsplitsen in sublagen met gemengde kleur in. Wanneer ingeschakeld worden lagen die filamenten met gemengde kleur bevatten opgesplitst in sublagen om kleurmengeffecten te bereiken." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "De veegtoren kan worden gebruikt om resten op het mondstuk te verwijderen en de druk in het mondstuk te stabiliseren om uiterlijke gebreken bij het printen van objecten te voorkomen." @@ -19495,6 +19823,14 @@ msgstr "Geen controle" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Voer geen geldigheidscontroles uit, zoals de controle op conflicten tussen G-code-paden." +# AI Translated +msgid "Strict mode" +msgstr "Strikte modus" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Sluit af met een andere waarde dan nul wanneer het slicen een niet-kritieke waarschuwing oplevert die anders alleen gelogd wordt, zoals een model dat ondersteuning nodig heeft terwijl ondersteuning uitstaat. Gebruik dit in CI of in geautomatiseerde pipelines die nooit een subtiel kapotte slice mogen opleveren. Elke zo'n waarschuwing staat ook met een stabiele klasse in de array `warnings` van result.json, die alleen op Linux wordt geschreven. Kan niet worden gecombineerd met --no-check, dat de ondersteuningscontrole overslaat." + # AI Translated msgid "Normative check" msgstr "Normatieve controle" @@ -19509,11 +19845,28 @@ msgstr "Model informatie weergeven" msgid "This outputs the model’s information." msgstr "Dit geeft de informatie van het model weer." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Mesh inspecteren (JSON naar stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Print een JSON-samenvatting van elk geladen voorwerp naar stdout en sluit dan af: de begrenzingskaders en de vlakken van de convexe omhulling waarop het kan rusten, met hun normalen, oppervlakten en middelpunten. Dit zijn de vlakken waaruit de opties --ground-* kiezen. Machineleesbaar alternatief voor --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Beschildering inspecteren (JSON naar stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Print een gestructureerde JSON-samenvatting van elke beschilderde laag (ondersteuning, naad, MMU-kleur, vage buitenkant) die al op het geladen model is opgeslagen — aantal facetten, oppervlakte en mesh-lokaal begrenzingskader per toestand — en sluit dan af. Machineleesbaar alternatief voor het openen van de schildergizmo's in de interface." + msgid "Export Settings" msgstr "Exporteer instellingen" -msgid "This exports settings to a file." -msgstr "Exporteer instellingen naar een bestand" +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Dit exporteert instellingen naar een bestand. Gebruik - om ze naar stdout te schrijven." msgid "Send progress to pipe" msgstr "Stuur voortgang naar pipe" @@ -19572,6 +19925,30 @@ msgstr "Draai over de Y-as" msgid "Rotation angle around the Y axis in degrees." msgstr "Rotatiehoek rond de Y-as in graden." +# AI Translated +msgid "Ground largest face" +msgstr "Op grootste vlak leggen" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt elk voorwerp op het grootste vlak van zijn convexe omhulling en laat het op het printbed zakken. Van even grote vlakken blijft het vlak dat al omlaag wijst behouden. Voorwerpen zonder een vlak dat groot genoeg is om op te rusten, blijven zoals ze zijn. Transformaties worden uitgevoerd in de volgorde van de opdrachtregel, dus rotaties die vóór deze optie zijn opgegeven worden gerespecteerd. --orient 1 draait na alle transformaties en vervangt de oriëntatie." + +# AI Translated +msgid "Ground face by normal" +msgstr "Op vlak volgens normaal leggen" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt elk voorwerp op het vlak van de convexe omhulling waarvan de naar buiten gerichte normaal het dichtst bij de richting NX,NY,NZ ligt, en laat het op het printbed zakken. De richting is in voorwerpcoördinaten, die de vóór deze optie opgegeven rotaties bevatten en overeenkomen met de assen van het printbed, tenzij het invoerbestand het voorwerp draait. Bijvoorbeeld: 1,0,0 zet het voorwerp op zijn +X-zijde. --orient 1 draait na alle transformaties en vervangt de oriëntatie." + +# AI Translated +msgid "Ground face at point" +msgstr "Op vlak bij punt leggen" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Legt elk voorwerp op het vlak van de convexe omhulling dat het punt X,Y,Z bevat, en laat het op het printbed zakken. Het punt is in voorwerpcoördinaten, die de vóór deze optie opgegeven rotaties bevatten; --inspect-mesh geeft de middelpunten van vlakken in die coördinaten. Voorwerpen zonder zo'n vlak blijven zoals ze zijn, en de uitvoering mislukt als geen enkel voorwerp er een heeft. --orient 1 draait na alle transformaties en vervangt de oriëntatie." + msgid "Scale the model by a float factor." msgstr "Schaal het model met een float-factor" @@ -19764,7 +20141,7 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "Sta toe dat een 3MF met een nieuwere versie wordt geslicet." msgid "Current Z-hop" -msgstr "Huidige z-hop" +msgstr "Huidige Z-hop" # AI Translated msgid "Contains Z-hop present at the beginning of the custom G-code block." @@ -20213,6 +20590,10 @@ msgstr "Het meshen van een modelbestand is mislukt of er is geen geldige vorm." msgid "The supplied file couldn't be read because it's empty." msgstr "Het opgegeven bestand kon niet worden gelezen omdat het leeg is." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "De bestandsindeling is niet compatibel en kan niet worden gelezen." + # AI Translated msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Onbekende bestandsindeling: het invoerbestand moet de extensie .stl, .obj of .amf(.xml) hebben." @@ -21801,19 +22182,19 @@ msgstr "Alleen printers met wijzigingen in printer-, filament- en proces presets msgid "Only display the filament names with changes to filament presets." msgstr "Geef alleen de filamentnamen weer met wijzigingen in filament presets." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Alleen printernamen met gebruikersprinter presets worden weergegeven en elke preset die je kiest, wordt als zip geëxporteerd." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Alleen de filamentnamen met gebruikers presets worden weergegeven, \n" "en alle gebruikers presets in elke filamentnaam die u selecteert, worden geëxporteerd als zip-bestand." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Alleen printernamen met gewijzigde proces presets worden weergegeven, \n" "en alle gebruikersproces presets in elke printernaam die u selecteert, worden als zip geëxporteerd." @@ -22068,7 +22449,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "We hebben informatie nodig om de oorzaak van het probleem te achterhalen. Raadpleeg de wikipagina voor een uitgebreide handleiding." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "De knop Inpakken verzamelt het projectbestand en de logboeken van de huidige sessie in een zipbestand." # AI Translated @@ -22124,7 +22505,7 @@ msgid "Stored logs" msgstr "Opgeslagen logboeken" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Pakt alle opgeslagen logboeken in een zipbestand." # AI Translated @@ -22212,7 +22593,7 @@ msgid "Authorizing..." msgstr "Autoriseren..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fout. Kan geen API-token voor autorisatie ophalen" # AI Translated @@ -22761,8 +23142,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Slimme filamenttoewijzing inschakelen: wijs één filament aan meerdere mondstukken toe om de besparing te maximaliseren" # AI Translated -msgid "Fila Saving" -msgstr "Filamentbesparing" +msgid "File Saving" +msgstr "Bestand opslaan" # AI Translated msgid "Don't remind me again" @@ -23122,6 +23503,18 @@ msgstr "Deze actie kan niet ongedaan worden gemaakt. Doorgaan?" msgid "Skipping objects." msgstr "Objecten worden overgeslagen." +# AI Translated +msgid "Material Ratio" +msgstr "Materiaalverhouding" + +# AI Translated +msgid "Model Height" +msgstr "Modelhoogte" + +# AI Translated +msgid "Ratio" +msgstr "Verhouding" + msgid "Select Filament" msgstr "Selecteer filament" @@ -23217,6 +23610,9 @@ msgstr "Nu opnieuw starten" msgid "NO RAMMING AT ALL" msgstr "HELEMAAL GEEN RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Volumetrische snelheid" @@ -23427,12 +23823,14 @@ msgid "Drying-Dehumidifying" msgstr "Drogen - ontvochtigen" # AI Translated -msgid " maximum drying temperature is " -msgstr " de maximale droogtemperatuur is " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "De maximale droogtemperatuur van %s is %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " de minimale droogtemperatuur is " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "De minimale droogtemperatuur van %s is %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -23883,6 +24281,142 @@ msgstr "" "Kromtrekken voorkomen\n" "Wist je dat bij het printen van materialen die gevoelig zijn voor kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het warmtebed de kans op kromtrekken kan verkleinen?" +#~ msgid "Other" +#~ msgstr "Anders" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Links: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Rechts: " + +# AI Translated +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "De maximumtemperatuur mag niet hoger zijn dan " + +# AI Translated +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "De minimumtemperatuur mag niet lager zijn dan " + +#~ msgid "up to" +#~ msgstr "tot" + +#~ msgid "above" +#~ msgstr "Boven" + +#~ msgid "from" +#~ msgstr "Van" + +# AI Translated +#~ msgid "Configuration package: " +#~ msgstr "Configuratiepakket: " + +# AI Translated +#~ msgid " updated to " +#~ msgstr " bijgewerkt naar " + +# AI Translated +#~ msgid "Grouping error: " +#~ msgstr "Groeperingsfout: " + +# AI Translated +#~ msgid " can not be placed in the " +#~ msgstr " kan niet worden geplaatst in de " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " de maximale droogtemperatuur is " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " de minimale droogtemperatuur is " + +# AI Translated +#~ msgid "needs" +#~ msgstr "heeft nodig" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "niet ingeschakeld" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materiaal niet gepubliceerd" + +#~ msgid "Select the language" +#~ msgstr "Kies de taal" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Plug-in selecteren" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Richting waarin bovenoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n" +#~ "Naar buiten begint in het midden van het oppervlak, zodat overtollig materiaal naar de rand wordt geduwd, waar het het minst zichtbaar is. Naar binnen begint aan de rand en eindigt met de krappe bochten in het midden.\n" +#~ "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Richting waarin onderoppervlakken worden gevuld bij gebruik van een patroon dat vanuit het midden werkt (Concentrisch, Archimedische koorden, Octagramspiraal).\n" +#~ "Naar binnen begint elk oppervlak met de bredere buitenbochten, wat de hechting van de eerste laag verbetert op printbedden waar de krappe bochten in het midden mogelijk niet hechten. Naar buiten begint in het midden en duwt overtollig materiaal naar de rand.\n" +#~ "Standaard gebruikt de volgorde van het kortste pad, die beide kanten op kan lopen." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Het afveegblok wordt niet geprint bij lagen zonder toolwisselingen als dit is ingeschakeld. Op lagen met een toolwissel zal de extruder neerwaarts bewegen naar het afveegblok. De gebruiker is verantwoordelijk voor eventuele botsingen met de print." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exporteer instellingen naar een bestand" + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Voor de native Wayland-liveview is de GStreamer GTK-videosink nodig. Installeer de gtksink-plug-in voor GStreamer en start OrcaSlicer opnieuw." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Initialiseren van de native Wayland GStreamer-videosink is mislukt. Controleer de installatie van uw GStreamer GTK-plug-in." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Voor deze taak is Windows Media Player vereist! Wilt u 'Windows Media Player' inschakelen voor uw besturingssysteem?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource is niet correct geregistreerd voor het afspelen van media! Klik op Ja om het opnieuw te registreren. U krijgt twee keer een melding" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Ontbrekend BambuSource-component geregistreerd voor media afspelen! Installeer OrcaSlicer opnieuw of zoek hulp in de community." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Er wordt een BambuSource van een andere installatie gebruikt; het afspelen van video werkt mogelijk niet correct! Klik op Ja om dit te herstellen." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Op uw systeem ontbreken H.264-codecs voor GStreamer, die nodig zijn om video af te spelen. (Probeer de pakketten gstreamer1.0-plugins-bad of gstreamer1.0-libav te installeren en Orca Slicer opnieuw te starten.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentbesparing" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index e8acc62a9b..8f66233eb3 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer 2.3.0-rc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: \n" "Last-Translator: Krzysztof Morga <>\n" "Language-Team: \n" @@ -2512,15 +2512,6 @@ msgstr "Dostępna jest aktualizacja. Otwórz okno pakietu profili, aby ją zains msgid "%s has been removed." msgstr "%s został usunięty." -msgid "Switching application language" -msgstr "Zmiana języka aplikacji" - -msgid "Select the language" -msgstr "Wybierz język" - -msgid "Language" -msgstr "Język" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -3012,6 +3003,10 @@ msgstr "Edytuj" msgid "Merge with" msgstr "Scal z" +# AI Translated +msgid "Decompose Color" +msgstr "Rozłóż kolor" + msgid "Delete this filament" msgstr "Usuń ten filament" @@ -3319,6 +3314,10 @@ msgstr "Złożenie" msgid "Merge parts to an object" msgstr "Scal części w obiekt" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Użycie zmiennej wysokości warstwy razem z podwarstwą mieszanego koloru może pogorszyć jakość mieszania kolorów." + # AI Translated msgid "Add layers" msgstr "Dodaj warstwy" @@ -3783,11 +3782,15 @@ msgstr "Wycofaj bieżący filament na Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Przełącz tor na Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "Maksymalna temperatura nie może przekroczyć " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Maksymalna temperatura nie może przekroczyć %d" -msgid "The minmum temperature should not be less than " -msgstr "Minimalna temperatura nie powinna być mniejsza niż " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Minimalna temperatura nie powinna być mniejsza niż %d" # AI Translated msgid "Type to filter..." @@ -4696,6 +4699,15 @@ msgstr "" "Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Być może karta SD jest zablokowana do zapisu?\n" "Komunikat błędu: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Skopiowanie tymczasowego G-code do wyjściowego G-code nie powiodło się.\n" +"Komunikat błędu: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Kopiowanie tymczasowego G-code do wyjściowego pliku G-code nie powiodło się. Może być problem z urządzeniem docelowym, spróbuj ponownie wyeksportować lub użyć innego urządzenia. Uszkodzony plik wyjściowego G-code znajduje się w pliku %1%.tmp." @@ -4907,7 +4919,7 @@ msgstr "" "\n" "Wartość zostanie zresetowana do 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatywna dodatkowa ściana działa tylko wtedy, gdy jest wyłączona opcja „zapewnij stałą grubość pionowej powłoki”." msgid "" @@ -4953,7 +4965,7 @@ msgstr "" "NIE - Zachowaj Niezależną wysokość warstwy podpory" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height musi być mniejsza niż wysokość warstwy.\n" @@ -4962,7 +4974,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Głębokość blokady powinna być mniejsza niż głębokość skóry.\n" @@ -5005,6 +5017,10 @@ msgstr "" "Tak - Zmień te ustawienia automatycznie i włącz tryb Wazy\n" "Nie - Zrezygnuj tym razem z używania trybu Wazy" +# AI Translated +msgid "N/A" +msgstr "Nie dotyczy" + msgid "Printing" msgstr "Drukowanie" @@ -5441,14 +5457,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Wartość %s jest spoza zakresu. Poprawny zakres wynosi od %d do %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Czy to %s%% czy %s %s?\n" -"TAK dla %s%%,\n" -"NIE dla %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Czy to %s%% czy %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5472,30 +5485,22 @@ msgstr "Nieprawidłowy wzorzec. Użyj N, N#K lub listy rozdzielonej przecinkami msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Nieprawidłowy format. Oczekiwano formatu wektorowego: „%1%”" -# AI Translated -msgid "N/A" -msgstr "Nie dotyczy" - # AI Translated msgid "System agents" msgstr "Agenci systemowi" -# AI Translated -msgid "No plugin selected" -msgstr "Nie wybrano wtyczki" - # AI Translated msgid "Add plugin" msgstr "Dodaj wtyczkę" -# AI Translated -msgid "Select plugin" -msgstr "Wybierz wtyczkę" - # AI Translated msgid "Remove plugin" msgstr "Usuń wtyczkę" +# AI Translated +msgid "No plugin selected" +msgstr "Nie wybrano wtyczki" + # AI Translated msgid "Configure" msgstr "Konfiguruj" @@ -5759,14 +5764,20 @@ msgstr "Ustaw na optymalne" msgid "Regroup filament" msgstr "Zmień grupowanie filamentu" -msgid "up to" -msgstr "do" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "do %1% mm" -msgid "above" -msgstr "powyżej" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "powyżej %1% mm" -msgid "from" -msgstr "od" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "od %1% do %2% mm" # AI Translated msgid "Usage" @@ -6141,7 +6152,7 @@ msgstr "Objętość:" msgid "Size:" msgstr "Rozmiar:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Wykryto konflikty ścieżek G-code na warstwie %d, Z = %.2lfmm. Proszę oddalić od siebie obiekty będące w konflikcie (%s <-> %s)." @@ -6461,16 +6472,24 @@ msgstr "Zapisz projekt jako" msgid "Save current project as" msgstr "Zapisz bieżący projekt jako" +# AI Translated +msgid "Publish 3MF" +msgstr "Opublikuj 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Eksportuj plik 3MF z osadzonymi wybranymi ustawieniami" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importuj 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Wczytaj model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importuj archiwum ZIP" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Wczytaj modele zawarte w archiwum ZIP" msgid "Import Configs" @@ -7771,6 +7790,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Dół" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "To ustawienie nie określa typu funkcji wtyczki." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "To ustawienie określa nierozpoznany typ funkcji wtyczki: " + # AI Translated msgid "Plugin Selection" msgstr "Wybór wtyczek" @@ -8030,6 +8057,10 @@ msgstr "Dostosuj bieżący stół" msgid "The %s nozzle can not print %s." msgstr "Dysza %s nie może drukować %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Drukowanie filamentu o mieszanym kolorze na drukarce z jednym ekstruderem wymaga częstych zmian filamentu i płukania, co może znacznie zwiększyć ilość odpadów oraz ryzyko zatkania dyszy lub rynny na odpady." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Mieszanie %1% z %2% podczas druku nie jest zalecane.\n" @@ -8156,12 +8187,44 @@ msgstr "Synchronizuj listę filamentów z AMS" msgid "Set filaments to use" msgstr "Wybierz filamenty do użycia" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Dodaj filament mieszany" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament mieszany" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Usuń ostatni filament mieszany" + +# AI Translated +msgid "Add mixed filament" +msgstr "Dodaj filament mieszany" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filament mieszany ma nieprawidłowe lub niezgodne składniki. Proszę ponownie edytować odpowiednie pozycje." + msgid "Search plate, object and part." msgstr "Szukaj stołu, obiektu i części." msgid "Pellets" msgstr "Granulat" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filament mieszany ma uszkodzone odwołania do składników" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Edytuj / Usuń / Scal" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Docelowy filament mieszany używa tego fizycznego filamentu jako składnika. Scalenie usunie ten fizyczny filament i może unieważnić filament mieszany. Kontynuować?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Po zakończeniu operacji projekt %s zostanie zamknięty i zostanie utworzony nowy projekt." @@ -8309,8 +8372,16 @@ msgstr "Proszę potwierdź, że G-code w tych profilach jest bezpieczny, aby zap msgid "Customized Preset" msgstr "Dostosowany profil" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF8!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Niektórych opublikowanych ustawień nie udało się zastosować:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Niektóre gniazda filamentu zostały zmienione:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Nazwa komponentów w pliku step nie jest w formacie UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Nazwa może zawierać nieczytelne znaki!" @@ -8331,10 +8402,10 @@ msgstr "Objętość tego obiektu wynosi zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Obiekt z pliku %s jest zbyt mały i możliwe, że jest określony w metrach lub calach.\n" -" Czy przeskalować na milimetry?" +"Czy przeskalować na milimetry?" msgid "Object too small" msgstr "Zbyt mały obiekt" @@ -8351,6 +8422,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Wykryto obiekt składający się z wielu części" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Dopasowywanie tekstur do filamentów" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Ostrzeżenie importu tekstury" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Czy wczytać te pliki jako pojedynczy obiekt składający się z wielu części?\n" @@ -8579,6 +8658,22 @@ msgstr "" msgid "Sync now" msgstr "Synchronizuj teraz" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Import tekstury nie powiódł się. Model zdaje się zawierać dane tekstury, ale nie udało się ukończyć procesu importu. Model zostanie zaimportowany wyłącznie jako geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Stosowanie kolorów tekstury..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Aktualizowanie widoku 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Zastosowano kolory tekstury." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Można zachować zmodyfikowane profile w nowym projekcie lub je odrzucić." @@ -8711,6 +8806,21 @@ msgstr "Zapisz plik po wykonaniu cięcia jako:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Plik %s został wysłany do pamięci drukarki i można go obejrzeć na urządzeniu." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Opublikuj plik 3MF jako:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Nie udało się wyeksportować opublikowanego pliku 3MF.\n" +"Sprawdź, czy folder istnieje w trybie online lub czy inne programy nie mają otwartego tego pliku." + +msgid "Publish" +msgstr "Opublikuj" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nie ustawiono typu dyszy Wprowadź ustawienia dyszy i spróbuj ponownie." @@ -8925,9 +9035,6 @@ msgstr "Czy kontynuować?" msgid "Language selection" msgstr "Wybór języka" -msgid "Switching application language while some presets are modified." -msgstr "Zmiana języka aplikacji przy jednoczesnym istniejących zmodyfikowanych ustawieniach." - msgid "Asia-Pacific" msgstr "Azja i Pacyfik" @@ -9041,6 +9148,9 @@ msgstr "Aktualna ścieżka instancji: " msgid "General" msgstr "Ogólne" +msgid "Language" +msgstr "Język" + msgid "Metric" msgstr "Metryczne" @@ -9535,9 +9645,6 @@ msgstr "Podczas przewijania suwaka warstw w podglądzie po cięciu renderuj wars msgid "Dimmed layer brightness" msgstr "Jasność przyciemnionych warstw" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9922,6 +10029,10 @@ msgstr "Tryb wazy" msgid "First layer filament sequence" msgstr "Sekwencja koloru pierwszej warstwy" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Lista filamentów zawiera filamenty mieszane. Niestandardowa kolejność filamentów nie zostanie zastosowana." + msgid "By Layer" msgstr "Wg warstwy" @@ -9949,9 +10060,6 @@ msgstr "Przejdź do strony publikacji modelu" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Uwaga: Przygotowanie może zająć kilka minut. Proszę o cierpliwość." -msgid "Publish" -msgstr "Opublikuj" - msgid "Publish was canceled" msgstr "Publikacja została anulowana" @@ -9968,6 +10076,81 @@ msgstr "Przesyłanie danych" msgid "Jump to webpage" msgstr "Przejdź na stronę" +# AI Translated +msgid "Material" +msgstr "Materiał" + +# AI Translated +msgid "Mixed filament" +msgstr "Filament mieszany" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Niektóre filamenty mieszane zależą od filamentów, które nie zostaną opublikowane:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (mieszany)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% wymaga %2%, który nie jest włączony." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% wymaga %2%, którego materiał nie zostanie opublikowany." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Aby opublikować filament mieszany, włącz każdy filament, którego używa, i wybierz Pełną publikację lub spełnij jego wymaganie Rodzaju." + +# AI Translated +msgid "Publish anyway" +msgstr "Opublikuj mimo to" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Opublikuj 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Wybierz, które ustawienia zostaną opublikowane w pliku 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki publikowania 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Poradnik wideo publikowania 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filament mieszany - publikowany w całości, gdy powyżej zaznaczono \"Włącz\"" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Opublikuj ten filament mieszany oraz włącz + opublikuj w całości jego filamenty składowe" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Opublikuj to gniazdo filamentu w pliku 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Pełna publikacja" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Osadź cały filament z tego gniazda w pliku 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtruj niezaznaczone" + #, c-format, boost-format msgid "Save %s as" msgstr "Zapisz %s jako" @@ -9986,6 +10169,10 @@ msgstr "Kopiuje do tego profilu wszystkie wartości odziedziczone z profilu nadr msgid "Detach from parent" msgstr "Odłącz od elementu nadrzędnego" +# AI Translated +msgid "Save without parent" +msgstr "Zapisz bez elementu nadrzędnego" + # AI Translated msgid "Unique preset" msgstr "Profil niezależny" @@ -10709,9 +10896,17 @@ msgstr "Wykrywanie zlepiania wymaga wieży czyszczącej. Bez wieży czyszczącej msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Jednoczesne włączenie precyzyjnej wysokości Z i wieży czyszczącej może powodować błędy cięcia. Czy nadal chcesz włączyć precyzyjną wysokość Z?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Płynny timelapse wymaga wieży czyszczącej na każdej warstwie, co nie jest zgodne z opcją \"Warstwy bez czyszczenia\". Opcja \"Warstwy bez czyszczenia\" została wyłączona." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Wieża czyszcząca jest wymagana dla płynnego timelapse. Możliwe są wady na modelu bez wieży czyszczącej. Czy włączyć wieżę czyszczącą?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "Opcja \"Warstwy bez czyszczenia\" nie jest zgodna z płynnym timelapse, który wymaga wieży czyszczącej na każdej warstwie. Timelapse został przełączony w tryb tradycyjny." + msgid "Still print by object?" msgstr "Czy nadal drukować według obiektu?" @@ -11096,10 +11291,6 @@ msgstr "Kompatybilne profile procesów" msgid "Printable space" msgstr "Przestrzeń do druku" -# AI Translated -msgid "Printer Agent" -msgstr "Agent drukarki" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Wybierz implementację agenta sieciowego do komunikacji z drukarką. Dostępni agenci są rejestrowani przy uruchamianiu." @@ -11363,12 +11554,12 @@ msgid "No modifications need to be copied." msgstr "Nie ma modyfikacji do skopiowania." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiuj parametry" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Zmodyfikuj parametry %s" # AI Translated @@ -11528,14 +11719,6 @@ msgstr "Liczba ekstruderów" msgid "Capabilities" msgstr "Możliwości" -# AI Translated -msgid "Left: " -msgstr "Lewy: " - -# AI Translated -msgid "Right: " -msgstr "Prawy: " - msgid "Show all presets (including incompatible)" msgstr "Pokaż wszystkie profile (łącznie z niekompatybilnymi)" @@ -11896,30 +12079,6 @@ msgstr "Objętości płukania przy zmianie filamentu" msgid "Please choose the filament colour" msgstr "Proszę wybrać kolor filamentu" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Natywny podgląd na żywo w Wayland wymaga ujścia wideo GStreamer GTK. Zainstaluj wtyczkę gtksink dla GStreamer, a następnie uruchom ponownie OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Nie udało się zainicjować natywnego ujścia wideo GStreamer dla Wayland. Sprawdź instalację wtyczki GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Do wykonania tego zadania wymagany jest Windows Media Player! Czy włączyć „Windows Media Player” dla systemu operacyjnego?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Brak zarejestrowanego komponentu BambuSource do odtwarzania multimediów! Zainstaluj ponownie OrcaSlicer lub poszukaj pomocy w społeczności." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Jeśli używasz BambuSource z innej instalacji programu, odtwarzanie wideo może nie działać poprawnie! Naciśnij Tak, aby to naprawić." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Agent chmury jest niedostępny. Uruchom ponownie OrcaSlicer i spróbuj jeszcze raz." @@ -12418,15 +12577,22 @@ msgstr "Naprawa anulowana" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Nie udało się skopiować pliku %1% do %2%: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Pobieranie nowych profili producentów: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Pakiet konfiguracyjny: %1% zaktualizowany do %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Nie udało się pobrać profili producentów: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Należy sprawdzić niezapisane zmiany przed aktualizacją konfiguracji." -msgid "Configuration package: " -msgstr "Pakiet konfiguracyjny:" - -msgid " updated to " -msgstr " aktualizacja do " - msgid "Open G-code file:" msgstr "Otwórz plik G-code:" @@ -12490,11 +12656,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping jest obsługiwany tylko przez Klipper, RepRapFirmware i Marlin 2." -msgid "Grouping error: " -msgstr "Błąd grupowania: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Błąd grupowania: %1% nie może zostać umieszczony w lewej dyszy" -msgid " can not be placed in the " -msgstr " nie może być umieszczony w " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Błąd grupowania: %1% nie może zostać umieszczony w prawej dyszy" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12609,6 +12779,10 @@ msgstr "%1% jest zbyt blisko innych, mogą wystąpić kolizje." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% jest zbyt wysoki, mogą wystąpić kolizje." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Wzajemne położenie modelu i wieży czyszczącej nie spełnia wymagań funkcji \"Warstwy bez czyszczenia\". Zmień ich wzajemne położenie, zmniejsz wysokość modelu albo wyłącz opcję \"Warstwy bez czyszczenia\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " jest zbyt blisko obszaru wykluczenia, mogą wystąpić kolizje podczas drukowania." @@ -12646,6 +12820,10 @@ msgstr "Jeśli mimo to chcesz drukować, możesz włączyć opcję w Preferencje msgid "No extrusions under current settings." msgstr "Brak ekstruzji przy obecnych ustawieniach." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Używany jest filament mieszany z gradientem, ale opcja 'Podwarstwa mieszanego koloru' jest wyłączona. Gradient nie zostanie wydrukowany." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Tryb „Wygładzony” timelapse nie jest obsługiwany, gdy włączona jest sekwencja druku „według obiektu”." @@ -12684,6 +12862,10 @@ msgstr "Może być konieczne zmniejszenie rozmiaru modelu lub zmiana bieżących msgid "Variable layer height is not supported with Organic supports." msgstr "Zmienna wysokość warstwy nie jest dostępna w przypadku podpór organicznych." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament wieży czyszczącej nie może być filamentem mieszanym." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Różne średnice dysz i filamentu mogą nie działać poprawnie, gdy włączona jest wieża czyszcząca. Jest to mocno eksperymentalna funkcja, więc zaleca się ostrożność." @@ -12973,6 +13155,10 @@ msgstr "Użyj 3MF zamiast G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Włącz tę opcję, jeśli drukarka przyjmuje plik 3MF jako zadanie druku. Po włączeniu Orca Slicer wysyła plik po cięciu jako .gcode.3mf zamiast zwykłego pliku .gcode." +# AI Translated +msgid "Printer Agent" +msgstr "Agent drukarki" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Wybierz implementację agenta sieciowego do komunikacji z drukarką." @@ -13060,8 +13246,7 @@ msgstr "mm lub %" msgid "Other layers" msgstr "Pozostałe warstwy" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Temperatura stołu dla warstw poza pierwszą. Wartość 0 oznacza, że filament nie obsługuje druku na Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -14077,6 +14262,10 @@ msgstr "Wyrównany prostoliniowy" msgid "Concentric" msgstr "Koncentryczny" +# AI Translated +msgid "Spiral Inset" +msgstr "Spirala do wewnątrz" + msgid "Hilbert Curve" msgstr "Krzywa Hilberta" @@ -14170,13 +14359,13 @@ msgstr "Kolejność wypełniania górnej powierzchni" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Kierunek wypełniania górnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n" +"Kierunek wypełniania górnych powierzchni przy wzorze rozchodzącym się od środka (Koncentryczny, Spirala do wewnątrz, Struny Archimedesa, Spirala oktagramu).\n" "Na zewnątrz zaczyna od środka powierzchni, dzięki czemu nadmiar materiału jest wypychany ku krawędzi, gdzie jest najmniej widoczny. Do wewnątrz zaczyna od krawędzi i kończy ciasnymi łukami na środku.\n" -"Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." +"Domyślny używa kolejności najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." # AI Translated msgid "Bottom surface fill order" @@ -14184,13 +14373,13 @@ msgstr "Kolejność wypełniania dolnej powierzchni" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Kierunek wypełniania dolnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n" -"Do wewnątrz rozpoczyna każdą powierzchnię od szerszych łuków zewnętrznych, co poprawia przyczepność pierwszej warstwy na stołach, do których ciasne łuki na środku mogą nie przylegać. Na zewnątrz zaczyna od środka, wypychając nadmiar materiału ku krawędzi.\n" -"Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." +"Kierunek wypełniania dolnych powierzchni przy wzorze rozchodzącym się od środka (Koncentryczny, Spirala do wewnątrz, Struny Archimedesa, Spirala oktagramu).\n" +"Do wewnątrz zaczyna każdą powierzchnię od szerszych łuków zewnętrznych, co poprawia przyczepność pierwszej warstwy na stołach, na których ciasne łuki na środku mogą się nie przykleić. Na zewnątrz zaczyna od środka i wypycha nadmiar materiału ku krawędzi.\n" +"Domyślny używa kolejności najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." msgid "Internal solid infill pattern" msgstr "Wzór wewnętrznego pełnego wypełnienia" @@ -14293,6 +14482,14 @@ msgstr "Przeciwnie" msgid "Clockwise" msgstr "Zgodnie" +# AI Translated +msgid "Distance to rod" +msgstr "Odległość do pręta" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Odległość pozioma czubka dyszy od dalszej krawędzi pręta. Używana do unikania kolizji przy druku wg obiektu." + msgid "Height to rod" msgstr "Odległość od prowadnicy" @@ -14477,6 +14674,8 @@ msgstr "Czas warstwy" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Wentylator chłodzący części zostanie włączony dla warstw, których szacowany czas jest krótszy niż ta wartość. Prędkość wentylatora jest interpolowana między minimalną a maksymalną prędkością wentylatora zgodnie z czasem druku warstwy" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14787,6 +14986,62 @@ msgstr "Materiał podporowy" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Materiał podporowy jest powszechnie używany do drukowania podpór i warstw łączących podpory z modelem" +# AI Translated +msgid "Is mixed filament" +msgstr "Jest filamentem mieszanym" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Określa, czy to gniazdo filamentu jest filamentem mieszanym złożonym z kilku fizycznych filamentów" + +# AI Translated +msgid "Mixed filament components" +msgstr "Składniki filamentu mieszanego" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Rozdzielone przecinkami indeksy filamentów składowych liczone od 1, np. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Proporcje podwarstw filamentu mieszanego" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Rozdzielone przecinkami wartości proporcji sumujące się do 1.0, np. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient filamentu mieszanego" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Włącza tryb gradientu w kierunku Z dla podwarstw filamentu mieszanego. Po włączeniu proporcje podwarstw zmieniają się liniowo między warstwami." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Zakres gradientu filamentu mieszanego" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Początkowa i końcowa proporcja pierwszego składnika w trybie gradientu. Para rozdzielona przecinkiem, np. \"0.10,0.90\" oznacza od 10% do 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Krzywa gradientu filamentu mieszanego" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Opcjonalna własna krzywa w stylu Photoshopa odwzorowująca postęp w osi Z na proporcję pierwszego składnika. Zapisywana jako punkty kontrolne rozdzielone pionowymi kreskami, w postaci \"x,y\" (starszy format) lub \"x,y,m_in,m_out\", gdy potrzebne jest nadpisanie stycznej (pusta wartość lub \"nan\" oznacza domyślną wartość PCHIP). x należy do [0,1]; y jest ograniczane do skonfigurowanego zakresu proporcji, np. \"0,0.15|0.5,0.50|1,0.85\". Gdy pole jest puste, używany jest liniowy gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient filamentu mieszanego dla każdej części" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gdy tryb gradientu jest włączony, gradient jest stosowany do każdej części złożenia niezależnie, zamiast traktować całe złożenie jako jeden zakres Z." + msgid "Filament printable" msgstr "Filament do druku" @@ -16107,6 +16362,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Dopuszczalna maksymalna siła wyjściowa na osi Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -16117,6 +16373,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Obciążenie masowe stołu maszyny na osi Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16448,7 +16705,7 @@ msgstr "Punkty początkowe i końcowe, od obszaru cięcia do kanału wyrzutowego msgid "Reduce infill retraction" msgstr "Zmniejszanie retrakcji wypełnienia" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Nie wykonuj retrakcji, gdy ruch odbywa się całkowicie w obszarze wypełnienia. Oznacza to, że wyciek nie będzie widoczny. Może to zmniejszyć liczbę retrakcji dla skomplikowanego modelu i zaoszczędzić czas druku, ale spowolnić krojenie i generowanie G-code" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -16485,6 +16742,20 @@ msgstr "Wykrywanie ścian nawisu" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Określ procentowy udział nawisów w stosunku do szerokości ekstruzji i użyj różnych prędkości do druku. Dla 100%% nawisów, zostanie użyta prędkość mostu." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Drukuj niepodparte ściany na końcu" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Pętle ścian leżące w całości w powietrzu są drukowane dopiero wtedy, gdy coś może je utrzymać:\n" +"są wytłaczane po pozostałych ścianach swojej wyspy, począwszy od najbardziej wewnętrznej, niezależnie od kolejności ścian.\n" +"Pętla, którą mogą zakotwiczyć tylko mosty tej warstwy, czeka na wydrukowanie tych mostów, natomiast pętla biegnąca wzdłuż podpartej ściany zachowuje swoje miejsce przed wypełnieniem, które potrzebuje jej jako zakotwiczenia." + # AI Translated msgid "Outer walls" msgstr "Ściany zewnętrzne" @@ -16624,7 +16895,7 @@ msgstr "Wartość retrakcji po czyszczeniu" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Długość szybkiej retrakcji po czyszczeniu, względem długości retrakcji.\n" @@ -16671,7 +16942,7 @@ msgstr "Gdy retrakcja jest wyzwalana przed zmianą narzędzia, filament zostaje msgid "Z-hop height" msgstr "Wysokość Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Zawsze gdy wykonana jest retrakcja, dysza jest nieco podnoszona, aby stworzyć odstęp między dyszą a wydrukiem. Zapobiega to uderzeniu dyszy w wydruk podczas przemieszczania. Użycie linii spiralnej do podniesienia Z może zapobiec powstawaniu strun" msgid "Z-hop lower boundary" @@ -16935,6 +17206,39 @@ msgstr "Czyszczenie na pętlach" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Aby zminimalizować widoczność szwu w ekstruzji zamkniętej pętli, przed opuszczeniem pętli przez extruder wykonuje się mały ruch do wewnątrz." +# AI Translated +msgid "Wipe inward" +msgstr "Wycieranie do wewnątrz" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Dotyczy wyłącznie ścian zewnętrznych, w tym obrysów otworów. Podczas wycierania przesuwa gorącą dyszę w stronę wydrukowanych już ścian wewnętrznych, aby ograniczyć ponowne nagrzewanie świeżo wydrukowanego tworzywa i ślady szwu.\n" +"\n" +"Szczególnie przydatne przy wysokościach warstwy poniżej 0,1 mm, gdzie ślady wycierania są bardziej widoczne.\n" +"\n" +"Używa zwykłego wycierania, jeśli żadna sąsiednia ściana wewnętrzna nie została jeszcze wydrukowana (obszary o pojedynczej ścianie lub kolejność ścian Zewnętrzna/wewnętrzna) albo jeśli nie można znaleźć podpartej ścieżki do wewnątrz, na przykład w ciasnych narożnikach lub przerwach szwu." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Odległość wycierania do wewnątrz" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Odległość, o jaką ścieżka wycierania zostaje przesunięta od zewnętrznego obrysu, podana w milimetrach lub jako procent rzeczywistej szerokości ekstruzji zewnętrznej ściany.\n" +"\n" +"Na przykład 50% przesuwa ścieżkę o połowę szerokości zewnętrznej ściany. Skuteczne przesunięcie jest ograniczone zarówno rzeczywistą szerokością zewnętrznej ściany, jak i dostępnym odstępem do sąsiedniej ściany, więc wartości powyżej 100% lub równoważna odległość bezwzględna nie dają dodatkowego efektu. Ustaw 0, aby wyłączyć przesunięcie." + msgid "Wipe before external loop" msgstr "Wycieranie przed zewnętrzną pętlą" @@ -17211,8 +17515,9 @@ msgstr "Pobiera nowe narzędzie bez czekania, aż osiągnie temperaturę druku, msgid "No sparse layers (beta)" msgstr "Warstwy bez czyszczenia (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Jeśli włączone to wieża czyszcząca nie będzie drukowana na warstwach, na których nie ma zmian koloru. Na kolejnych warstwach ze zmianami koloru ekstruder zjedzie w dół, aby kontynuować czyszczenie na wieży. Pamiętaj, że to użytkownik musi upewnić się, że nie dojdzie do kolizji głowicy z wydrukiem." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Jeśli opcja jest włączona, wieża czyszcząca nie będzie drukowana na warstwach bez zmian narzędzia. Na warstwach ze zmianą narzędzia ekstruder zjedzie w dół, aby wydrukować wieżę czyszczącą, przez co wieża znajdzie się poniżej modelu, a głowica musi po nią sięgnąć w dół. Układy, w których doszłoby przy tym do kolizji z już wydrukowanym obiektem, są odrzucane. Nie działa przy płynnym timelapse ani przy wykrywaniu nalotu na dyszy, które wymagają wieży na każdej warstwie." msgid "Prime all printing extruders" msgstr "Wyczyść wszystkie używane ekstrudery" @@ -17238,6 +17543,34 @@ msgstr "" msgid "Cyclic" msgstr "Cykliczna" +# AI Translated +msgid "Cyclic order" +msgstr "Kolejność cykliczna" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Własna sekwencja filamentów używana przez cykliczną kolejność zmian narzędzia, jako numery filamentów oddzielone przecinkami (np. \"3,2,1,4\").\n" +"Każda warstwa drukuje swoje filamenty zgodnie z tą sekwencją; filamenty niewymienione są drukowane na końcu, w kolejności rosnącej.\n" +"Pozostaw puste, aby przechodzić przez filamenty w kolejności rosnącej." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Zastosuj kolejność cykliczną do pierwszej warstwy" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Stosuje cykliczną kolejność zmian narzędzia również do pierwszej warstwy.\n" +"Domyślnie jest to wyłączone, ponieważ pierwsza warstwa jest zamiast tego układana pod kątem najlepszej przyczepności do podłoża: filamenty drukujące małe, delikatne elementy pierwszej warstwy są drukowane na końcu, dzięki czemu kolejne zmiany narzędzia i przemieszczenia rzadziej odrywają te słabo zakotwiczone fragmenty. Ta kolejność pierwszej warstwy uwzględnia też własną sekwencję filamentów dla pierwszej warstwy, jeśli została ustawiona. Korzyść z kolejności cyklicznej (dodatkowe zmiany narzędzia dają każdej warstwie więcej czasu na ostygnięcie) nie dotyczy pierwszej warstwy, która jest drukowana wolno i gorąco dla przyczepności.\n" +"Włącz tę opcję tylko wtedy, gdy potrzebujesz dokładnie tej samej sekwencji narzędzi na każdej warstwie, łącznie z pierwszą, kosztem tej optymalizacji przyczepności." + msgid "Slice gap closing radius" msgstr "Promień zamykania szpar" @@ -17247,9 +17580,6 @@ msgstr "Szpary mniejsze niż dwukrotność wartości parametru „promień zamyk msgid "Slicing Mode" msgstr "Tryb cięcia" -msgid "Other" -msgstr "Inne" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Użyj „Parzysto-nieparzysty” dla modeli samolotów 3DLabPrint. Użyj „Zamknij otwory” do zamknięcia wszystkich otworów w modelu." @@ -17757,6 +18087,14 @@ msgstr "" "\n" "Ustawienie wartości w ilości cofania przed ustawieniem czyszczenia poniżej spowoduje wykonanie nadmiernego cofania przed czyszczeniem, w przeciwnym razie zostanie wykonane po nim." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Podwarstwa mieszanego koloru" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Włącza podział na podwarstwy mieszanego koloru. Po włączeniu warstwy zawierające filamenty o mieszanym kolorze są dzielone na podwarstwy w celu uzyskania efektu mieszania kolorów." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wieża czyszcząca może być używana do czyszczenia resztek na dyszy i stabilizacji ciśnienia w komorze wewnątrz dyszy, aby uniknąć defektów wyglądu podczas drukowania obiektów." @@ -18265,6 +18603,14 @@ msgstr "Brak sprawdzania" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Nie uruchamiaj żadnych testów poprawności, takich jak sprawdzanie konfliktów ścieżek G-code." +# AI Translated +msgid "Strict mode" +msgstr "Tryb ścisły" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Kończy działanie z kodem różnym od zera, gdy cięcie zgłosi niekrytyczne ostrzeżenie, które w przeciwnym razie trafiłoby tylko do dziennika, na przykład model wymagający podpór przy wyłączonych podporach. Używaj tego w CI lub w zautomatyzowanych procesach, które nigdy nie powinny wypuścić subtelnie wadliwego cięcia. Każde takie ostrzeżenie jest też wymienione ze stabilną klasą w tablicy `warnings` pliku result.json, zapisywanego wyłącznie w systemie Linux. Nie można łączyć z --no-check, które pomija kontrolę podpór." + msgid "Normative check" msgstr "Kontrola normatywna" @@ -18277,11 +18623,28 @@ msgstr "Informacje o modelu wyjściowym" msgid "This outputs the model’s information." msgstr "Wyświetl informacje o modelu." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Sprawdź siatkę (JSON na stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Wypisuje na stdout podsumowanie JSON każdego wczytanego obiektu, a następnie kończy działanie: jego prostopadłościany otaczające oraz ściany otoczki wypukłej, na których może spoczywać, wraz z ich normalnymi, polami i środkami. To właśnie spośród tych ścian wybierają opcje --ground-*. Czytelna maszynowo alternatywa dla --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Sprawdź malowanie (JSON na stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Wypisuje ustrukturyzowane podsumowanie JSON każdej malowanej warstwy (podpory, szew, kolor MMU, skóra fuzzy) już zapisanej we wczytanym modelu — liczba ścianek, pole powierzchni i prostopadłościan otaczający w układzie siatki dla każdego stanu — a następnie kończy działanie. Czytelna maszynowo alternatywa dla otwierania narzędzi malowania w interfejsie." + msgid "Export Settings" msgstr "Ustawienia eksportu" -msgid "This exports settings to a file." -msgstr "Eksportuj ustawienia do pliku." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "To eksportuje ustawienia do pliku. Użyj -, aby zapisać je na stdout." msgid "Send progress to pipe" msgstr "Wyślij postęp do rury" @@ -18337,6 +18700,30 @@ msgstr "Obróć wokół osi Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Kąt obrotu wokół osi Y w stopniach." +# AI Translated +msgid "Ground largest face" +msgstr "Oprzyj na największej ścianie" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Kładzie każdy obiekt na największej ścianie jego otoczki wypukłej i opuszcza go na stół. Spośród ścian o równej wielkości zachowywana jest ta, która już jest skierowana w dół. Obiekty bez ściany wystarczająco dużej, by na niej spocząć, pozostają bez zmian. Przekształcenia wykonywane są w kolejności z wiersza poleceń, więc obroty podane przed tą opcją są respektowane. --orient 1 działa po wszystkich przekształceniach i zastępuje orientację." + +# AI Translated +msgid "Ground face by normal" +msgstr "Oprzyj na ścianie wg normalnej" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Kładzie każdy obiekt na tej ścianie otoczki wypukłej, której normalna zewnętrzna jest najbliższa kierunkowi NX,NY,NZ, i opuszcza go na stół. Kierunek podawany jest we współrzędnych obiektu, które uwzględniają obroty podane przed tą opcją i pokrywają się z osiami stołu, o ile plik wejściowy nie obraca obiektu. Na przykład 1,0,0 stawia obiekt na jego stronie +X. --orient 1 działa po wszystkich przekształceniach i zastępuje orientację." + +# AI Translated +msgid "Ground face at point" +msgstr "Oprzyj na ścianie w punkcie" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Kładzie każdy obiekt na tej ścianie otoczki wypukłej, która zawiera punkt X,Y,Z, i opuszcza go na stół. Punkt podawany jest we współrzędnych obiektu, które uwzględniają obroty podane przed tą opcją; --inspect-mesh podaje środki ścian w tych współrzędnych. Obiekty bez takiej ściany pozostają bez zmian, a przebieg kończy się niepowodzeniem, jeśli żaden obiekt jej nie ma. --orient 1 działa po wszystkich przekształceniach i zastępuje orientację." + msgid "Scale the model by a float factor." msgstr "Skaluj model przez czynnik zmiennoprzecinkowy" @@ -18504,7 +18891,7 @@ msgid "Current Z-hop" msgstr "Bieżący Z-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Zawiera z-hop obecny na początku bloku niestandardowego G-code" +msgstr "Zawiera Z-hop obecny na początku bloku niestandardowego G-code" msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Pozycja ekstrudera na początku bloku niestandardowego G-kodu. Jeśli niestandardowy G-code przemieszcza się gdzieś indziej, powinien zostać zapisany do tej zmiennej, aby OrcaSlicer wiedział, skąd się przemieszcza, gdy odzyska kontrolę." @@ -18858,6 +19245,10 @@ msgstr "Siatkowanie pliku modelu nie powiodło się lub nie ma prawidłowego ksz msgid "The supplied file couldn't be read because it's empty." msgstr "Dostarczony plik nie mógł być odczytany, ponieważ jest pusty" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Format pliku jest niezgodny i nie można go odczytać." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Nieznany format pliku. Plik wejściowy musi mieć rozszerzenie .stl, .obj, .amf(.xml)." @@ -20394,19 +20785,19 @@ msgstr "Wyświetlane są jedynie drukarki ze zmienionymi profilami drukarki, fil msgid "Only display the filament names with changes to filament presets." msgstr "Wyświetlone są jedynie nazwy filamentów, które zostały zmodyfikowane w ustawieniach." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Wyświetlane są tylko nazwy drukarek z ustawieniami użytkownika, wybrany zestaw zostanie wyeksportowany jako plik zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Na liście widoczne są tylko nazwy filamentów ze zmodyfikowanymi ustawieniami, \n" "a dla każdej wybranej nazwy filamentu zostaną wyeksportowane wszystkie ustawienia jako archiwum zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Na liście widoczne są tylko nazwy drukarek ze zmodyfikowanymi ustawieniami procesu, \n" "a dla każdej wybranej nazwy drukarki zostaną wyeksportowane wszystkie \n" @@ -20653,7 +21044,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Potrzebujemy informacji do zdiagnozowania źródła problemu. Szczegółowy przewodnik znajdziesz na stronie wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Przycisk Spakuj zbiera plik projektu i dzienniki bieżącej sesji do pliku zip." # AI Translated @@ -20709,7 +21100,7 @@ msgid "Stored logs" msgstr "Zapisane dzienniki" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Pakuje wszystkie zapisane dzienniki do pliku zip." # AI Translated @@ -20797,7 +21188,7 @@ msgid "Authorizing..." msgstr "Autoryzowanie..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Błąd. Nie można uzyskać tokenu API do autoryzacji" # AI Translated @@ -21259,8 +21650,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Włącz inteligentne przypisywanie filamentu: przypisz jeden filament do wielu dysz, aby zmaksymalizować oszczędności" # AI Translated -msgid "Fila Saving" -msgstr "Oszczędność fil." +msgid "File Saving" +msgstr "Zapisywanie pliku" msgid "Don't remind me again" msgstr "Nie przypominaj mi ponownie" @@ -21596,6 +21987,18 @@ msgstr "Tego działania nie będzie można cofnąć. Kontynuować?" msgid "Skipping objects." msgstr "Pomijanie obiektów." +# AI Translated +msgid "Material Ratio" +msgstr "Udział materiału" + +# AI Translated +msgid "Model Height" +msgstr "Wysokość modelu" + +# AI Translated +msgid "Ratio" +msgstr "Udział" + msgid "Select Filament" msgstr "Wybierz filament" @@ -21691,6 +22094,9 @@ msgstr "Uruchom ponownie teraz" msgid "NO RAMMING AT ALL" msgstr "BRAK WYCISKANIA" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Prędkości Przepływu" @@ -21885,12 +22291,14 @@ msgid "Drying-Dehumidifying" msgstr "Suszenie — osuszanie" # AI Translated -msgid " maximum drying temperature is " -msgstr " maksymalna temperatura suszenia to " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Maksymalna temperatura suszenia dla %s to %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " minimalna temperatura suszenia to " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Minimalna temperatura suszenia dla %s to %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -22336,6 +22744,133 @@ msgstr "" "Unikaj odkształceń\n" "Czy wiesz, że podczas drukowania filamentami podatnymi na odkształcenia, takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może zmniejszyć prawdopodobieństwo odkształceń?" +#~ msgid "Other" +#~ msgstr "Inne" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Lewy: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Prawy: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Maksymalna temperatura nie może przekroczyć " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Minimalna temperatura nie powinna być mniejsza niż " + +#~ msgid "up to" +#~ msgstr "do" + +#~ msgid "above" +#~ msgstr "powyżej" + +#~ msgid "from" +#~ msgstr "od" + +#~ msgid "Configuration package: " +#~ msgstr "Pakiet konfiguracyjny:" + +#~ msgid " updated to " +#~ msgstr " aktualizacja do " + +#~ msgid "Grouping error: " +#~ msgstr "Błąd grupowania: " + +#~ msgid " can not be placed in the " +#~ msgstr " nie może być umieszczony w " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " maksymalna temperatura suszenia to " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " minimalna temperatura suszenia to " + +# AI Translated +#~ msgid "needs" +#~ msgstr "wymaga" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "nie włączony" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materiał nieopublikowany" + +#~ msgid "Select the language" +#~ msgstr "Wybierz język" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Wybierz wtyczkę" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Kierunek wypełniania górnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n" +#~ "Na zewnątrz zaczyna od środka powierzchni, dzięki czemu nadmiar materiału jest wypychany ku krawędzi, gdzie jest najmniej widoczny. Do wewnątrz zaczyna od krawędzi i kończy ciasnymi łukami na środku.\n" +#~ "Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Kierunek wypełniania dolnych powierzchni przy użyciu wzoru opartego na środku (Koncentryczny, Cięciwy Archimedesa, Spirala Octagram).\n" +#~ "Do wewnątrz rozpoczyna każdą powierzchnię od szerszych łuków zewnętrznych, co poprawia przyczepność pierwszej warstwy na stołach, do których ciasne łuki na środku mogą nie przylegać. Na zewnątrz zaczyna od środka, wypychając nadmiar materiału ku krawędzi.\n" +#~ "Domyślnie używana jest kolejność najkrótszej ścieżki, która może przebiegać w dowolnym kierunku." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Jeśli włączone to wieża czyszcząca nie będzie drukowana na warstwach, na których nie ma zmian koloru. Na kolejnych warstwach ze zmianami koloru ekstruder zjedzie w dół, aby kontynuować czyszczenie na wieży. Pamiętaj, że to użytkownik musi upewnić się, że nie dojdzie do kolizji głowicy z wydrukiem." + +#~ msgid "This exports settings to a file." +#~ msgstr "Eksportuj ustawienia do pliku." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Natywny podgląd na żywo w Wayland wymaga ujścia wideo GStreamer GTK. Zainstaluj wtyczkę gtksink dla GStreamer, a następnie uruchom ponownie OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Nie udało się zainicjować natywnego ujścia wideo GStreamer dla Wayland. Sprawdź instalację wtyczki GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Do wykonania tego zadania wymagany jest Windows Media Player! Czy włączyć „Windows Media Player” dla systemu operacyjnego?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource nie został poprawnie zarejestrowany do odtwarzania mediów! Naciśnij Tak, aby ponownie go zarejestrować. Będziesz poproszony dwa razy." + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Brak zarejestrowanego komponentu BambuSource do odtwarzania multimediów! Zainstaluj ponownie OrcaSlicer lub poszukaj pomocy w społeczności." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Jeśli używasz BambuSource z innej instalacji programu, odtwarzanie wideo może nie działać poprawnie! Naciśnij Tak, aby to naprawić." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Twój system nie posiada kodeków H.264 dla GStreamer, które są wymagane do odtwarzania wideo. (Spróbuj zainstalować pakiety gstreamer1.0-plugins-bad lub gstreamer1.0-libav, a następnie zrestartuj Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Oszczędność fil." + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -25187,15 +25722,6 @@ msgstr "" #~ msgid "Low-temperature filament (PLA/PETG/TPU) is loaded in the extruder. In order to avoid extruder clogging, it is not allowed to set the chamber temperature above 45℃." #~ msgstr "W ekstruzorze jest załadowany filament o niskiej temperaturze (PLA/PETG/TPU). Aby uniknąć zatkania ekstruzora, nie wolno ustawiać temperatury komory powyżej 45℃." -#~ msgid "" -#~ "Is it %s%% or %s %s?\n" -#~ "YES for %s%%,\n" -#~ "NO for %s %s." -#~ msgstr "" -#~ "Czy to %s%% czy %s %s?\n" -#~ "TAK dla %s%%,\n" -#~ "NIE dla %s %s." - #~ msgid "Allow multiple materials on the same plate" #~ msgstr "Pozwól na kilka filamentów na tej samej płycie" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 1b39d4a159..dd701176a7 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-07-26 11:14-0300\n" "Last-Translator: Alexandre Folle de Menezes\n" "Language-Team: Portuguese, Brazilian\n" @@ -2128,7 +2128,7 @@ msgid "" "OrcaSlicer has attempted to recreate the configuration file.\n" "Please note, application settings will be lost, but printer profiles will not be affected." msgstr "" -"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser analisado.\n" +"O arquivo de configuração do OrcaSlicer pode estar corrompido e não pode ser processado.\n" "O OrcaSlicer tentou recriar o arquivo de configuração.\n" "Por favor, note que as configurações do aplicativo serão perdidas, mas os perfis de impressora não serão afetados." @@ -2356,15 +2356,6 @@ msgstr "Há uma atualização disponível. Abra a caixa de diálogo do pacote de msgid "%s has been removed." msgstr "%s foi removido." -msgid "Switching application language" -msgstr "Alternando o idioma do aplicativo" - -msgid "Select the language" -msgstr "Selecione o idioma" - -msgid "Language" -msgstr "Idioma" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "Falha ao mudar o idioma do OrcaSlicer para %s." @@ -2836,6 +2827,10 @@ msgstr "Editar" msgid "Merge with" msgstr "Mesclar com" +# AI Translated +msgid "Decompose Color" +msgstr "Decompor Cor" + msgid "Delete this filament" msgstr "Apagar este filamento" @@ -3118,6 +3113,10 @@ msgstr "Montagem" msgid "Merge parts to an object" msgstr "Mesclar peças com um objeto" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Usar altura de camada variável junto com a subcamada de cor mista pode resultar em uma mistura de cores de baixa qualidade." + msgid "Add layers" msgstr "Adicionar camadas" @@ -3565,11 +3564,15 @@ msgstr "Recuar o filamento atual no Filament Track Switch" msgid "Switch track at Filament Track Switch" msgstr "Trocar de trilha no Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "A temperatura máxima não pode exceder " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "A temperatura máxima não pode exceder %d" -msgid "The minmum temperature should not be less than " -msgstr "A temperatura mínima não pode ser menor do que " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "A temperatura mínima não pode ser menor do que %d" msgid "Type to filter..." msgstr "Digite para filtrar…" @@ -4435,6 +4438,15 @@ msgstr "" "A cópia do G-code temporário para o G-code de saída falhou. Talvez o cartão SD esteja travado pra escrita?\n" "Mensagem de erro: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Falha ao copiar o G-code temporário para o G-code de saída.\n" +"Mensagem de erro: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "A cópia do G-code temporário para o G-code de saída falhou. Pode haver problema com o dispositivo de destino, por favor tente exportar novamente ou usar outro dispositivo. O G-code de saída corrompido está em %1%.tmp." @@ -4641,7 +4653,7 @@ msgstr "" "\n" "O valor será redefinido para 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "A parede extra alternada não funciona bem quando a espessura vertical da casca está definida para Todos." msgid "" @@ -4687,7 +4699,7 @@ msgstr "" "NÃO — Manter a Altura da Camada de Suporte Independente" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height precisa ser menor que layer_height.\n" @@ -4695,7 +4707,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "A profundidade do travamento deve ser menor que a profundidade da textura.\n" @@ -4735,6 +4747,9 @@ msgstr "" "Sim - Alterar essas configurações e ativar o modo espiral/vaso automaticamente\n" "Não - Cancelar ativação do modo espiral" +msgid "N/A" +msgstr "N/D" + msgid "Printing" msgstr "Imprimindo" @@ -5159,14 +5174,12 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Valor %s está fora do intervalo. O intervalo válido é de %d para %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"É %s%% ou %s %s?\n" -"SIM para %s%%, \n" -"NÃO para %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "É %s%% ou %s %s?" + +# AI Translated +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5188,24 +5201,18 @@ msgstr "Padrão inválido. Use N, N#K, ou uma lista separa por vírgulas com #K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Formato inválido. Formato de vetor esperado: \"%1%\"" -msgid "N/A" -msgstr "N/D" - msgid "System agents" msgstr "Agentes do sistema" -msgid "No plugin selected" -msgstr "Nenhum plugin selecionado" - msgid "Add plugin" msgstr "Adicionar plugin" -msgid "Select plugin" -msgstr "Selecionar plugin" - msgid "Remove plugin" msgstr "Remover plugin" +msgid "No plugin selected" +msgstr "Nenhum plugin selecionado" + msgid "Configure" msgstr "Configurar" @@ -5460,14 +5467,20 @@ msgstr "Definir para Ideal" msgid "Regroup filament" msgstr "Reagrupar filamento" -msgid "up to" -msgstr "até" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "até %1% mm" -msgid "above" -msgstr "acima" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "acima de %1% mm" -msgid "from" -msgstr "de" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "de %1% a %2% mm" msgid "Usage" msgstr "Uso" @@ -5825,7 +5838,7 @@ msgstr "Volume:" msgid "Size:" msgstr "Tamanho:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Foram encontrados conflitos de caminhos de G-code na camada %d, Z = %.2lfmm. Por favor, separe mais os objetos em conflito (%s <-> %s)." @@ -6137,17 +6150,25 @@ msgstr "Salvar projeto como" msgid "Save current project as" msgstr "Salvar o projeto atual como" +# AI Translated +msgid "Publish 3MF" +msgstr "Publicar 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exportar um arquivo 3MF com as configurações selecionadas incorporadas" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importar 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Carregar um modelo" -msgid "Import Zip Archive" -msgstr "Importar Arquivo Zip" +msgid "Import ZIP Archive" +msgstr "Importar Arquivo ZIP" -msgid "Load models contained within a zip archive" -msgstr "Carregar modelos contidos em um arquivo zip" +msgid "Load models contained within a ZIP archive" +msgstr "Carregar modelos contidos em um arquivo ZIP" msgid "Import Configs" msgstr "Importar Configurações" @@ -6663,7 +6684,7 @@ msgid "Failed to fetch model information from printer." msgstr "Falha ao obter informação do modelo da impressora." msgid "Failed to parse model information." -msgstr "Falha ao analisar a informação do modelo." +msgstr "Falha ao processar a informação do modelo." msgid "The .gcode.3mf file contains no G-code data. Please slice it with Orca Slicer and export a new .gcode.3mf file." msgstr "O arquivo .gcode.3mf não contém dados de G-code. Por favor, fatie com Orca Slicer e exporte um novo arquivo .gcode.3mf." @@ -7396,6 +7417,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Inferior" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Esta configuração não especifica um tipo de recurso de plugin." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Esta configuração especifica um tipo de recurso de plugin não reconhecido: " + msgid "Plugin Selection" msgstr "Seleção de plugins" @@ -7631,6 +7660,10 @@ msgstr "Personalizar a placa atual" msgid "The %s nozzle can not print %s." msgstr "O bico %s não pode imprimir %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Imprimir filamento de cor mista em uma impressora de extrusora única exige trocas de filamento e purgas frequentes, o que pode aumentar significativamente o desperdício e o risco de entupimento do bico ou da calha de resíduos." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Misturar %1% com %2% na impressão não é recomendado.\n" @@ -7755,12 +7788,44 @@ msgstr "Sincronizar lista de filamentos do AMS" msgid "Set filaments to use" msgstr "Definir filamentos para usar" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Adicionar Filamento Misto" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filamento Misto" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Remover o último filamento misto" + +# AI Translated +msgid "Add mixed filament" +msgstr "Adicionar filamento misto" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "O filamento misto tem componentes inválidos ou incompatíveis. Edite novamente as entradas afetadas." + msgid "Search plate, object and part." msgstr "Pesquisar placa, objeto e peça." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "O filamento misto tem referências de componentes quebradas" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Editar / Excluir / Mesclar" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "O filamento misto de destino usa este filamento físico como componente. Mesclar removerá este filamento físico e poderá invalidar o filamento misto. Continuar?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "Após a conclusão da sua operação, o projeto %s será encerrado e um novo projeto será criado." @@ -7897,7 +7962,15 @@ msgstr "Por favor, confirme se o G-code dentro dessas predefinições é seguro msgid "Customized Preset" msgstr "Predefinição Personalizada" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Algumas configurações publicadas não puderam ser aplicadas:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Alguns espaços de filamento foram alterados:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "Os nomes dos componentes dentro do arquivo STEP não estão no formato UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7919,7 +7992,7 @@ msgstr "O volume do objeto é zero" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "O objeto do arquivo %s é muito pequeno, e pode estar em metros ou polegadas.\n" "Deseja redimensioná-lo para milímetros?" @@ -7939,6 +8012,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objeto multi-peça detectado" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Associando texturas aos filamentos" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Aviso de Importação de Textura" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Carregar esses arquivos como um único objeto com múltiplas peças?\n" @@ -8146,6 +8227,22 @@ msgstr "" msgid "Sync now" msgstr "Sincronizar agora" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Falha ao importar a textura. O modelo parece conter dados de textura, mas o processo de importação não pôde ser concluído. O modelo será importado apenas como geometria." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Aplicando cores de textura..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Atualizando a visualização 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Cores de textura aplicadas." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Você pode manter as predefinições modificadas no novo projeto ou descartá-las" @@ -8277,6 +8374,21 @@ msgstr "Salvar arquivo fatiado como:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "O arquivo %s foi enviado para o espaço de armazenamento da impressora e pode ser visualizado na impressora." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publicar arquivo 3MF como:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Falha ao exportar o arquivo 3MF publicado.\n" +"Verifique se a pasta existe online ou se outros programas estão com o arquivo aberto." + +msgid "Publish" +msgstr "Publicar" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "O tipo de bico não está configurado. Configure o bico e tente novamente." @@ -8481,9 +8593,6 @@ msgstr "Você deseja continuar?" msgid "Language selection" msgstr "Seleção de idioma" -msgid "Switching application language while some presets are modified." -msgstr "Alternando idioma do aplicativo enquanto algumas predefinições são modificadas." - msgid "Asia-Pacific" msgstr "Ásia-Pacífico" @@ -8550,7 +8659,7 @@ msgstr "" "\n" "Deseja baixar e instalar esta versão agora?\n" "\n" -"Observação: o aplicativo pode precisar ser reiniciado após a instalação." +"Nota: o aplicativo pode precisar ser reiniciado após a instalação." msgid "Download Network Plug-in" msgstr "Baixar Plug-in de Rede" @@ -8588,6 +8697,9 @@ msgstr "Caminho da Instância Atual: " msgid "General" msgstr "Geral" +msgid "Language" +msgstr "Idioma" + msgid "Metric" msgstr "Métrico" @@ -9025,10 +9137,6 @@ msgstr "Ao mover o controle deslizante de camadas na pré-visualização fatiada msgid "Dimmed layer brightness" msgstr "Brilho das camadas escurecidas" -# AI Translated -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9048,7 +9156,7 @@ msgid "" "Note: When Stealth Mode is enabled, your user profiles will not be backed up to Orca Cloud." msgstr "" "Isso desativa todos os recursos da nuvem, incluindo a sincronização de perfis do Orca Cloud. Usuários que preferem trabalhar totalmente offline podem ativar esta opção.\n" -"Observação: quando o Modo Furtivo está ativado, seus perfis de usuário não serão copiados para o Orca Cloud." +"Nota: quando o Modo Furtivo está ativado, seus perfis de usuário não serão copiados para o Orca Cloud." msgid "Hide login side panel" msgstr "Ocultar painel lateral de autenticação" @@ -9379,6 +9487,10 @@ msgstr "Vaso espiral" msgid "First layer filament sequence" msgstr "Sequência de filamento da primeira camada" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "A lista de filamentos contém filamentos mistos. A sequência de filamentos personalizada não terá efeito." + msgid "By Layer" msgstr "Por Camada" @@ -9406,9 +9518,6 @@ msgstr "Ir para a página web de publicação de modelos" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Nota: A preparação pode levar vários minutos. Por favor, seja paciente." -msgid "Publish" -msgstr "Publicar" - msgid "Publish was canceled" msgstr "Publicação cancelada" @@ -9424,6 +9533,81 @@ msgstr "Enviando dados" msgid "Jump to webpage" msgstr "Ir para a página web" +# AI Translated +msgid "Material" +msgstr "Material" + +# AI Translated +msgid "Mixed filament" +msgstr "Filamento misto" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Alguns filamentos mistos dependem de filamentos que não serão publicados:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filamento %d (misto)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% precisa de %2%, que não está ativado." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% precisa de %2%, cujo material não será publicado." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Para publicar um filamento misto, ative todos os filamentos que ele usa e escolha Publicação completa ou atenda ao seu requisito de Tipo." + +# AI Translated +msgid "Publish anyway" +msgstr "Publicar mesmo assim" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publicar 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Selecione quais configurações serão publicadas no arquivo 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Documentação de Publicar 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Guia em vídeo de Publicar 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filamento misto - publicado por inteiro quando \"Ativar\" acima está selecionado" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publicar este filamento misto e ativar + publicar por inteiro seus filamentos componentes" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publicar este espaço de filamento no arquivo 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Publicação completa" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Incorporar o filamento inteiro deste espaço no arquivo 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrar não selecionados" + #, c-format, boost-format msgid "Save %s as" msgstr "Salvar %s como" @@ -9441,6 +9625,10 @@ msgstr "Copia para esta predefinição todos os valores herdados da predefiniç msgid "Detach from parent" msgstr "Separar do pai" +# AI Translated +msgid "Save without parent" +msgstr "Salvar sem pai" + # AI Translated msgid "Unique preset" msgstr "Predefinição única" @@ -9629,7 +9817,6 @@ msgstr "A impressora falhou ao gerar a tabela de mapeamento automático do bico msgid "The current nozzle mapping may produce an extra %0.2f g of waste." msgstr "O mapeamento de bicos atual pode gerar um desperdício adicional de %0.2f g." -# AI Translated #, c-format, boost-format msgid "Recommended filament arrangement saves %s->" msgstr "A disposição de filamento recomendada economiza %s->" @@ -9688,7 +9875,6 @@ msgstr "Este processo determina os valores de fluxo dinâmico para melhorar a qu msgid "Internal" msgstr "Interno" -# AI Translated #, c-format, boost-format msgid "%s space less than 20MB. Timelapse may not save properly. You can turn it off or" msgstr "%s com espaço inferior a 20MB. O timelapse pode não ser salvo corretamente. Você pode desativá-lo ou" @@ -9696,15 +9882,12 @@ msgstr "%s com espaço inferior a 20MB. O timelapse pode não ser salvo corretam msgid "Clean up files" msgstr "Limpar arquivos" -# AI Translated msgid "Low internal storage. This timelapse will overwrite the oldest video files." msgstr "Armazenamento interno baixo. Este timelapse substituirá os arquivos de vídeo mais antigos." -# AI Translated msgid "Low external storage. This timelapse will overwrite the oldest video files." msgstr "Armazenamento externo baixo. Este timelapse substituirá os arquivos de vídeo mais antigos." -# AI Translated msgid "Insufficient external storage for time-lapse photography. Connect to computer to delete files, or use a larger memory card." msgstr "Armazenamento externo insuficiente para fotografia time-lapse. Conecte ao computador para excluir arquivos ou use um cartão de memória maior." @@ -9740,7 +9923,6 @@ msgstr "Atualizando informações dos hotends (%d/%d)." msgid "There are not enough available hotends currently." msgstr "Não há hotends disponíveis em quantidade suficiente no momento." -# AI Translated msgid "Please complete the hotend rack setup and try again." msgstr "Por favor, conclua a configuração do rack de hotend e tente novamente." @@ -9757,11 +9939,9 @@ msgstr "As informações reportadas sobre o hotend podem não ser confiáveis." msgid "The printer has no nozzle matching the slicing file (%s)." msgstr "A impressora não possui um bico compatível com o arquivo de fatiamento (%s)." -# AI Translated msgid "Please install a matching nozzle in the hotend rack, or set the corresponding printer preset while slicing." msgstr "Por favor, instale um bico compatível no rack de hotend, ou defina a predefinição de impressora correspondente ao fatiar." -# AI Translated msgid "The toolhead and hotend rack are full. Please remove at least one hotend before printing." msgstr "A cabeça da ferramenta e o rack de hotend estão cheios. Por favor, remova pelo menos um hotend antes de imprimir." @@ -9787,24 +9967,19 @@ msgstr "ambas extrusoras" msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). Please verify the nozzle or material settings and try again." msgstr "A dureza do material atual (%s) excede a dureza de %s(%s). Verifique as configurações do bico ou do material e tente novamente." -# AI Translated msgid "Your current firmware version cannot start this print job. Please update to the latest version and try again." msgstr "Sua versão atual do firmware não pode iniciar este trabalho de impressão. Atualize para a versão mais recente e tente novamente." -# AI Translated #, c-format, boost-format msgid "The hardness of current material (%s) exceeds the hardness of %s(%s). It may cause nozzle wear, leading to material leakage and unstable flow. Please exercise caution when using it." msgstr "A dureza do material atual (%s) excede a dureza de %s(%s). Isso pode causar desgaste do bico, levando a vazamento de material e fluxo instável. Tenha cuidado ao usá-lo." -# AI Translated msgid "Some filaments may switch between extruders during printing. Manual K-value calibration cannot be applied throughout the entire print, which may affect print quality. Enabling Flow Dynamics Calibration is recommended." msgstr "Alguns filamentos podem alternar entre extrusoras durante a impressão. A calibração manual do valor K não pode ser aplicada durante toda a impressão, o que pode afetar a qualidade da impressão. Recomenda-se ativar a Calibração de Dinâmica de Fluxo." -# AI Translated msgid "There is stringing-prone filament in this file. For best print quality, we recommend switching nozzle clumping detection to Auto mode." -msgstr "Há filamento propenso a fiapos neste arquivo. Para a melhor qualidade de impressão, recomendamos alternar a detecção de aglomeração no bico para o modo Automático." +msgstr "Há filamento propenso a criar fios neste arquivo. Para a melhor qualidade de impressão, recomendamos alternar a detecção de aglomeração no bico para o modo Automático." -# AI Translated msgid "If 'Dynamic Flow Calibration' is set to Auto/On, the system will use the manual calibration value or the default value and skip the flow calibration process. You can perform a manual flow calibration for TPU filament on the 'Calibration' page." msgstr "Se a 'Calibração de Fluxo Dinâmico' estiver definida como Automático/Ativado, o sistema usará o valor de calibração manual ou o valor padrão e ignorará o processo de calibração de fluxo. Você pode realizar uma calibração de fluxo manual para filamento TPU na página 'Calibração'." @@ -9911,7 +10086,6 @@ msgstr "Desative a calibração de fluxo dinâmico para habilitar o valor de flu msgid "This printer does not support printing all plates." msgstr "Esta impressora não suporta a imprimir todas as placas." -# AI Translated #, c-format, boost-format msgid "The current firmware supports a maximum of %s materials. You can either reduce the number of materials to %s or fewer on the Preparation Page, or try updating the firmware. If you are still restricted after the update, please wait for subsequent firmware support." msgstr "O firmware atual suporta no máximo %s materiais. Você pode reduzir o número de materiais para %s ou menos na Página de Preparação, ou tentar atualizar o firmware. Se ainda estiver restrito após a atualização, aguarde o suporte de firmware subsequente." @@ -9919,11 +10093,9 @@ msgstr "O firmware atual suporta no máximo %s materiais. Você pode reduzir o n msgid "The type of external filament is unknown or does not match with the filament type in the slicing file. Please make sure you have installed the correct filament in the external spool." msgstr "O tipo de filamento externo é desconhecido ou não corresponde ao tipo de filamento no arquivo de fatiamento. Certifique-se de ter instalado o filamento correto no carretel externo." -# AI Translated msgid "TPU 90A/TPU 85A are too soft. It is recommended to perform manual flow calibration on the 'Calibration' page. If 'Dynamic Flow Calibration' is set to auto/on, the system will use the previous calibration value and skip the flow calibration process." msgstr "TPU 90A/TPU 85A são muito macios. Recomenda-se realizar a calibração de fluxo manual na página 'Calibração'. Se a 'Calibração de Fluxo Dinâmico' estiver definida como automático/ativado, o sistema usará o valor de calibração anterior e ignorará o processo de calibração de fluxo." -# AI Translated msgid "The filament in the AMS may be insufficient for this print. Please refill or replace it." msgstr "O filamento no AMS pode ser insuficiente para esta impressão. Por favor, reabasteça ou substitua-o." @@ -10000,7 +10172,7 @@ msgid "Failed to post ticket to server" msgstr "Falha ao enviar o ticket para o servidor" msgid "Failed to parse login report reason" -msgstr "Falha ao analisar o motivo do relatório de login" +msgstr "Falha ao processar o motivo do relatório de login" msgid "Receive login report timeout" msgstr "Limite de tempo excedido ao receber o relatório de login" @@ -10096,11 +10268,9 @@ msgstr "Excluir esta predefinição" msgid "Search in preset" msgstr "Pesquisar nas predefinições" -# AI Translated msgid "Synchronization of different extruder drives or nozzle volume types is not supported." msgstr "A sincronização de diferentes acionamentos de extrusora ou tipos de volume do bico não é suportada." -# AI Translated msgid "Synchronize the modification of parameters to the corresponding parameters of another extruder." msgstr "Sincroniza a modificação de parâmetros com os parâmetros correspondentes de outra extrusora." @@ -10125,9 +10295,17 @@ msgstr "Uma torre de purga é necessária para a detecção de aglomeração. Po msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Habilitar a altura Z precisa e a torre de preparação juntas pode causar erros de fatiamento. Deseja habilitar a altura Z precisa mesmo assim?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "O timelapse suave precisa de uma torre de purga em todas as camadas, o que não é compatível com \"Sem camadas esparsas\". \"Sem camadas esparsas\" foi desativado." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Uma torre de purga é necessária para um timelapse suave. Pode haver falhas no modelo sem a torre de purga. Deseja ativar a torre de purga?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Sem camadas esparsas\" não é compatível com o timelapse suave, que precisa de uma torre de purga em todas as camadas. O timelapse foi alterado para o modo tradicional." + msgid "Still print by object?" msgstr "Ainda imprimir por objeto?" @@ -10170,7 +10348,7 @@ msgid "Are you sure you want to enable this option?" msgstr "Tem certeza de que deseja habilitar esta opção?" msgid "Infill patterns are typically designed to handle rotation automatically to ensure proper printing and achieve their intended effects (e.g., Gyroid, Cubic). Rotating the current sparse infill pattern may lead to insufficient support. Please proceed with caution and thoroughly check for any potential printing issues. Are you sure you want to enable this option?" -msgstr "Padrões de preenchimento são projetados para lidar com a rotação automaticamente para garantir a impressão adequada e atingir os efeitos pretendidos (Ex. Giroide, Cúbico). Girar o padrão de preenchimento esparso atual pode causar suporte insuficiente. Prossiga com cautela e verifique cuidadosamente se há possíveis problemas de impressão. Tem certeza de que deseja habilitar esta opção?" +msgstr "Padrões de preenchimento são projetados para lidar com a rotação automaticamente para garantir a impressão adequada e atingir os efeitos pretendidos (ex.: Giroide, Cúbico). Girar o padrão de preenchimento esparso atual pode causar suporte insuficiente. Prossiga com cautela e verifique cuidadosamente se há possíveis problemas de impressão. Tem certeza de que deseja habilitar esta opção?" msgid "Experimental feature: Retracting and cutting off the filament at a greater distance during filament changes to minimize flush. Although it can notably reduce flush, it may also elevate the risk of nozzle clogs or other printing complications." msgstr "Funcionalidade experimental: Retrair e cortar o filamento a uma distância maior durante mudanças de filamento para minimizar a purga. Embora possa reduzir notavelmente a purga, ele também pode elevar o risco de bolhas no bico ou outras complicações de impressão." @@ -10333,7 +10511,6 @@ msgstr "G-code de mudança de tipo de extrusão" msgid "Post-processing Scripts" msgstr "Scripts de pós-processamento" -# AI Translated msgid "Slicing Pipeline Plugin" msgstr "Plugin de Pipeline de Fatiamento" @@ -10387,9 +10564,8 @@ msgstr "Temperatura da câmara de impressão" msgid "Chamber temperature" msgstr "Temperatura da câmara" -# AI Translated msgid "Target chamber temperature, and the minimal chamber temperature at which printing should start" -msgstr "Temperatura da câmara alvo, e a temperatura mínima da câmara na qual a impressão deve começar" +msgstr "Temperatura alvo da câmara, e a temperatura mínima da câmara na qual a impressão deve começar" msgid "Target" msgstr "Alvo" @@ -10496,9 +10672,6 @@ msgstr "Perfis de processo compatíveis" msgid "Printable space" msgstr "Espaço de impressão" -msgid "Printer Agent" -msgstr "Agente de Impressora" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Selecione a implementação do agente de rede para comunicação com a impressora. Os agentes disponíveis são registrados na inicialização." @@ -10627,7 +10800,6 @@ msgstr "Limites de altura da camada" msgid "Z-Hop" msgstr "Z-Hop" -# AI Translated msgid "" "The Retract before wipe option could be only 100% when using the Firmware Retraction mode.\n" "\n" @@ -10740,11 +10912,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Nenhuma modificação precisa ser copiada." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Copiar parâmetros" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Modificar parâmetros de %s" #, c-format, boost-format @@ -10898,12 +11070,6 @@ msgstr "Número de extrusoras" msgid "Capabilities" msgstr "Capacidades" -msgid "Left: " -msgstr "Esquerda: " - -msgid "Right: " -msgstr "Direita: " - msgid "Show all presets (including incompatible)" msgstr "Mostrar todas as predefinições (incluindo as incompatíveis)" @@ -10935,7 +11101,6 @@ msgstr "Se ativo, este diálogo pode ser usado para transferir valores seleciona msgid "One of the presets does not exist" msgstr "Uma das predefinições não existe" -# AI Translated msgid "Compared presets has different printer technology" msgstr "As predefinições comparadas têm tecnologia de impressora diferente" @@ -11255,27 +11420,6 @@ msgstr "Volumes de purga para troca de filamento" msgid "Please choose the filament colour" msgstr "Escolha a cor do filamento" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "A visualização ao vivo nativa do Wayland requer o receptor de vídeo GTK do GStreamer. Instale o plugin gtksink para GStreamer e reinicie o OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Falha ao inicializar o receptor de vídeo nativo do Wayland GStreamer. Verifique a instalação do plugin GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "O Windows Media Player é necessário para esta tarefa! Você quer habilitar o 'Windows Media Player' para seu sistema operacional?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource não foi registrado corretamente para reprodução de mídia! Pressione Sim para registrá-lo novamente. Você será promovido duas vezes" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Componente BambuSource registrado para reprodução de mídia não encontrado! Por favor, reinstale o OrcaSlicer ou procure ajuda da comunidade." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Usando um BambuSource de uma instalação diferente, a reprodução de vídeo pode não funcionar corretamente! Pressione Sim para consertar." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Seu sistema não possui codecs H.264 para o GStreamer, que são necessários para reproduzir vídeos. (Tente instalar os pacotes gstreamer1.0-plugins-bad ou gstreamer1.0-libav e depois reinicie o OrcaSlicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "O agente na nuvem não está disponível. Reinicie o OrcaSlicer e tente novamente." @@ -11291,9 +11435,8 @@ msgstr "Entrar" msgid "Login failed. Please try again." msgstr "Falha no login. Tente novamente." -# AI Translated msgid "parse json failed" -msgstr "falha ao analisar o json" +msgstr "falha ao processar o json" msgid "[Action Required] " msgstr "[Ação Necessária] " @@ -11484,7 +11627,6 @@ msgctxt "Keyboard Shortcut" msgid "Space" msgstr "Espaço" -# AI Translated msgid "Open actions speed dial" msgstr "Abrir menu rápido de ações" @@ -11566,11 +11708,9 @@ msgstr "informações de atualização da versão %s:" msgid "Network plug-in update" msgstr "Atualização do plug-in de rede" -# AI Translated msgid "Click OK to update the Network plug-in now. If a file is in use, the update will be applied the next time Orca Slicer launches." msgstr "Clique em OK para atualizar o plug-in de Rede agora. Se um arquivo estiver em uso, a atualização será aplicada na próxima vez que o Orca Slicer for iniciado." -# AI Translated msgid "A new Network plug-in is available. Do you want to install it?" msgstr "Um novo plug-in de Rede está disponível. Deseja instalá-lo?" @@ -11630,7 +11770,6 @@ msgstr "Nome da impressora" msgid "Where to find your printer's IP and Access Code?" msgstr "Onde encontrar o IP e o Código de Acesso da sua impressora?" -# AI Translated msgid "How to trouble shooting" msgstr "Como solucionar problemas" @@ -11752,15 +11891,22 @@ msgstr "Reparo cancelado" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Falha ao copiar o arquivo %1% para %2%: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Baixando novos perfis de fornecedor: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Pacote de configuração: %1% atualizado para %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Falha ao baixar os perfis de fornecedor: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Verifique as alterações não salvas antes de atualizar a configuração." -msgid "Configuration package: " -msgstr "Pacote de configuração: " - -msgid " updated to " -msgstr " atualizado para " - msgid "Open G-code file:" msgstr "Abrir arquivo G-code:" @@ -11778,11 +11924,9 @@ msgstr "Objeto: %1%" msgid "Parts of the object at these heights may be too thin or the object may have a faulty mesh." msgstr "Partes do objeto nessas alturas podem ser muito finas, ou o objeto pode ter uma malha com falhas." -# AI Translated msgid "Process change extrusion role G-code" msgstr "G-code de mudança de tipo de extrusão do processo" -# AI Translated msgid "Filament change extrusion role G-code" msgstr "G-code de mudança de tipo de extrusão do filamento" @@ -11822,11 +11966,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "O controle de entrada é suportado apenas pelo Klipper, RepRapFirmware e Marlin 2." -msgid "Grouping error: " -msgstr "Erro de agrupamento: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Erro de agrupamento: %1% não pode ser colocado no bico esquerdo" -msgid " can not be placed in the " -msgstr " não pode ser colocado na " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Erro de agrupamento: %1% não pode ser colocado no bico direito" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Erro de agrupamento no modo manual. Por favor, verifique o número de bicos ou reagrupe." @@ -11939,6 +12087,10 @@ msgstr "%1% está muito perto de outros, e colisões podem ocorrer." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% está muito alto, e ocorrerão colisões." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "A posição relativa do modelo e da torre de purga não atende aos requisitos do recurso \"Sem camadas esparsas\". Ajuste as posições relativas, reduza a altura do modelo ou desative \"Sem camadas esparsas\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " está muito perto da área de exclusão, pode haver colisões durante a impressão." @@ -11957,7 +12109,6 @@ msgstr " está muito perto de uma área de exclusão, e colisões vão ocorrer.\ msgid " is too close to clumping detection area, and collisions will be caused.\n" msgstr " está muito perto da área de detecção de aglomeração, e ocorrerão colisões.\n" -# AI Translated msgid " is partially outside the printable area, and it cannot be printed.\n" msgstr " está parcialmente fora da área imprimível, e não pode ser impresso.\n" @@ -11973,6 +12124,9 @@ msgstr "Se ainda assim desejar imprimir, você pode ativar a opção em Preferê msgid "No extrusions under current settings." msgstr "Nenhuma extrusão com as configurações atuais." +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Um filamento misto com gradiente está em uso, mas 'Subcamada de cor mista' está desativado. O gradiente não será impresso." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "O modo suave do timelapse não é suportado quando a sequência \"por objeto\" está ativada." @@ -12009,6 +12163,9 @@ msgstr "Você pode querer reduzir o tamanho do seu modelo ou alterar as configur msgid "Variable layer height is not supported with Organic supports." msgstr "A altura de camada variável não é suportada com suportes Orgânicos." +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "O filamento da torre de purga não pode ser um filamento misto." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Diferentes diâmetros de bico e diferentes diâmetros de filamento podem não funcionar bem quando a torre de purga estiver habilitada. É muito experimental, então prossiga com cautela." @@ -12274,6 +12431,9 @@ msgstr "Usar 3MF em vez de G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Ative esta opção se a impressora aceitar um arquivo 3MF como trabalho de impressão. Quando ativada, o OrcaSlicer envia o arquivo fatiado como .gcode.3mf, em vez de um arquivo .gcode comum." +msgid "Printer Agent" +msgstr "Agente de Impressora" + msgid "Select the network agent implementation for printer communication." msgstr "Selecione a implementação do agente de rede para comunicação com a impressora." @@ -12355,7 +12515,7 @@ msgstr "mm ou %" msgid "Other layers" msgstr "Outras camadas" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Essa é a temperatura da mesa para camadas exceto a inicial. O valor 0 significa que o filamento não suporta a impressão na Placa Fria SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -12642,7 +12802,6 @@ msgstr "" msgid "Internal bridge flow ratio" msgstr "Taxa de fluxo em ponte interna" -# AI Translated msgid "" "This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill so increasing it may increase strength and upper layer quality.\n" "Values above 1.0: Increase the amount of material while maintaining line spacing. This can improve line contact and strength.\n" @@ -13032,11 +13191,9 @@ msgstr "" "A geometria será decimada antes de detectar ângulos agudos. Este parâmetro indica o comprimento mínimo da divergência para a decimação.\n" "0 para desativar." -# AI Translated msgid "Brim ears outer only" -msgstr "Orelhas da borda apenas externas" +msgstr "Apenas orelhas da borda externas" -# AI Translated msgid "Generate mouse ears only on the outer contour of the model, excluding holes and enclosed sections." msgstr "Gera orelhas de rato apenas no contorno externo do modelo, excluindo furos e seções fechadas." @@ -13064,7 +13221,6 @@ msgstr "Por objeto" msgid "Intra-layer order" msgstr "Ordem intra-camada" -# AI Translated msgid "" "Order in which object instances are visited within a single layer, which controls how much travel is spent moving between them.\n" "\n" @@ -13122,7 +13278,7 @@ msgid "mm/s² or %" msgstr "mm/s² ou %" msgid "Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration." -msgstr "Aceleração das pontes. Se o valor for expresso como uma porcentagem (por exemplo, 50%), será calculado com base na aceleração da parede externa." +msgstr "Aceleração das pontes. Se o valor for expresso como uma porcentagem (ex.: 50%), será calculado com base na aceleração da parede externa." msgid "Default filament profile" msgstr "Perfil de filamento padrão" @@ -13322,6 +13478,10 @@ msgstr "Retilíneo alinhado" msgid "Concentric" msgstr "Concêntrico" +# AI Translated +msgid "Spiral Inset" +msgstr "Espiral interna" + msgid "Hilbert Curve" msgstr "Curva de Hilbert" @@ -13401,26 +13561,28 @@ msgstr "" msgid "Top surface fill order" msgstr "Ordem de preenchimento da superfície superior" +# AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" -"Para fora começa no centro da superfície, de modo que qualquer excesso de material seja empurrado em direção à borda, onde é menos visível. Para dentro começa na borda e termina com as curvas fechadas no centro.\n" -"O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." +"Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Espiral interna, Cordas Arquimedeanas, Espiral de Octagrama).\n" +"Para Fora começa no centro da superfície, de modo que o material excedente é empurrado para a borda, onde fica menos visível. Para Dentro começa na borda e termina com as curvas fechadas do centro.\n" +"Padrão usa a ordenação pelo caminho mais curto, que pode seguir em qualquer uma das direções." msgid "Bottom surface fill order" msgstr "Ordem de preenchimento da superfície inferior" +# AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" -"Para dentro começa cada superfície com as curvas externas mais largas, o que melhora a aderência da primeira camada em mesas onde as curvas fechadas no centro podem não aderir. Para fora começa no centro, empurrando qualquer excesso de material em direção à borda.\n" -"O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." +"Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Espiral interna, Cordas Arquimedeanas, Espiral de Octagrama).\n" +"Para Dentro começa cada superfície pelas curvas externas mais amplas, o que melhora a adesão da primeira camada em mesas nas quais as curvas fechadas do centro podem não grudar. Para Fora começa no centro, empurrando o material excedente para a borda.\n" +"Padrão usa a ordenação pelo caminho mais curto, que pode seguir em qualquer uma das direções." msgid "Internal solid infill pattern" msgstr "Padrão de preenchimento sólido interno" @@ -13519,6 +13681,14 @@ msgstr "Anti-horário" msgid "Clockwise" msgstr "Horário" +# AI Translated +msgid "Distance to rod" +msgstr "Distância até a haste" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Distância horizontal da ponta do bico até a borda mais distante da haste. Usada para evitar colisões na impressão por objeto." + msgid "Height to rod" msgstr "Altura até a haste" @@ -13702,6 +13872,7 @@ msgstr "Tempo da camada" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "A ventoinha de resfriamento de peças será ativado para camadas cujo tempo estimado seja mais curto que esse valor. A velocidade da ventoinha é interpolada entre as velocidades mínima e máxima da ventoinha de acordo com o tempo de impressão da camada." +msgctxt "second" msgid "s" msgstr "s" @@ -14007,6 +14178,48 @@ msgstr "Material de suporte" msgid "Support material is commonly used to print supports and support interfaces." msgstr "O material de suporte é comumente usado para imprimir suportes e interfaces de suporte." +msgid "Is mixed filament" +msgstr "É filamento misto" + +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Define se este slot de filamento é um filamento misto composto por vários filamentos físicos" + +msgid "Mixed filament components" +msgstr "Componentes do filamento misto" + +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Índices (começando em 1) dos filamentos componentes, separados por vírgulas; ex.: \"1,3\"" + +msgid "Mixed filament sublayer ratios" +msgstr "Proporções de subcamada do filamento misto" + +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Valores de proporção separados por vírgulas cuja soma seja 1.0; ex.: \"0.7,0.3\"" + +msgid "Mixed filament gradient" +msgstr "Gradiente do filamento misto" + +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Ativa o modo de gradiente na direção Z para as subcamadas do filamento misto. Quando ativo, as proporções das subcamadas variam linearmente ao longo das camadas." + +msgid "Mixed filament gradient range" +msgstr "Faixa do gradiente do filamento misto" + +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Proporções inicial e final do primeiro componente no modo de gradiente. Par separado por vírgula; ex.: \"0.10,0.90\" significa de 10% a 90%." + +msgid "Mixed filament gradient curve" +msgstr "Curva do gradiente do filamento misto" + +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Curva personalizada opcional no estilo do Photoshop, mapeando o progresso em Z para a proporção do primeiro componente. Codificada como pontos de controle separados por barras verticais, no formato \"x,y\" (legado) ou \"x,y,m_in,m_out\" quando é necessário substituir a tangente (um valor vazio ou \"nan\" usa o padrão PCHIP). X em [0,1]; Y é limitado à faixa de proporção configurada; ex.: \"0,0.15|0.5,0.50|1,0.85\". Quando vazio, o gradient_range linear é usado no lugar." + +msgid "Mixed filament per-part gradient" +msgstr "Gradiente por peça do filamento misto" + +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Quando o modo de gradiente está ativado, aplica o gradiente a cada peça de uma montagem de forma independente em vez de tratar toda a montagem como uma única faixa Z." + msgid "Filament printable" msgstr "Filamento imprimível" @@ -14096,7 +14309,7 @@ msgid "Insert solid layers" msgstr "Inserir camadas sólidas" msgid "Insert solid infill at specific layers. Use N to insert every Nth layer, N#K to insert K consecutive solid layers every N layers (K is optional, e.g. '5#' equals '5#1'), or a comma-separated list (e.g. 1,7,9) to insert at explicit layers. Layers are 1-based." -msgstr "Insere preenchimento sólido em camadas específicas. Use N para inserir a cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada enésima camada (K é opcional, ou seja, '5#' é igual a '5#1'), ou uma lista separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas são baseadas em 1." +msgstr "Insere preenchimento sólido em camadas específicas. Use N para inserir a cada enésima camada, N#K para inserir K camadas sólidas consecutivas a cada enésima camada (K é opcional, ex.: '5#' é igual a '5#1'), ou uma lista separada por vírgulas (Ex. 1,7,9) para inserir em camadas esplícitas. Camadas são baseadas em 1." msgid "Fill Multiline" msgstr "Multilinhas de Preenchimento" @@ -14174,11 +14387,9 @@ msgstr "TPMS-FK" msgid "Gyroid" msgstr "Giroide" -# AI Translated msgid "Sparse infill smooth factor" msgstr "Fator de suavização do preenchimento esparso" -# AI Translated msgid "Controls how strongly sparse infill corners are rounded. 0% keeps the original sharp path, while 100% produces the largest possible curves between adjacent infill lines." msgstr "Controla o quanto os cantos do preenchimento esparso são arredondados. 0% mantém o trajeto original com cantos vivos, enquanto 100% produz as maiores curvas possíveis entre linhas de preenchimento adjacentes." @@ -14192,10 +14403,10 @@ msgid "Acceleration of inner walls." msgstr "Aceleração das paredes internas." msgid "Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento esparso. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgstr "Aceleração do preenchimento esparso. Se o valor for expresso como uma porcentagem (ex.: 100%), será calculado com base na aceleração padrão." msgid "Acceleration of internal solid infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration." -msgstr "Aceleração do preenchimento sólido interno. Se o valor for expresso como uma porcentagem (por exemplo, 100%), será calculado com base na aceleração padrão." +msgstr "Aceleração do preenchimento sólido interno. Se o valor for expresso como uma porcentagem (ex.: 100%), será calculado com base na aceleração padrão." msgid "This is the printing acceleration for the first layer. Using limited acceleration can improve build plate adhesion." msgstr "Esta é a aceleração para a primeira camada. Usar aceleração limitada melhorar a adesão à placa de impressão." @@ -14299,7 +14510,7 @@ msgid "" "Only available when \"No cooling for the first\" is 0.\n" "Set to -1 to disable it." msgstr "" -"Define uma velocidade exata da ventoinha para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (por exemplo, dutos ABS/ASA no estilo Voron) de uma mesa aquecida. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" +"Define uma velocidade exata da ventoinha para a primeira camada, substituindo todas as outras configurações de resfriamento. Útil para proteger peças impressas em 3D da cabeça da ferramenta (ex.: dutos ABS/ASA no estilo Voron) de uma mesa aquecida. Uma pequena quantidade de fluxo de ar resfria os dutos, sem usar o resfriamento total que pode, em certas condições, prejudicar a aderência da primeira camada.\n" "A partir da segunda camada, o resfriamento normal é retomado.\n" "Se \"Velocidade total da ventoinha na camada\" também estiver definida, a ventoinha aumenta suavemente deste valor na primeira camada até o seu alvo na camada escolhida.\n" "Disponível apenas quando \"Sem resfriamento nas primeiras\" é 0.\n" @@ -14670,7 +14881,7 @@ msgid "" "Set to 0 to deactivate." msgstr "" "Algumas ventoinhas de resfriamento de componentes não conseguem iniciar a rotação quando comandadas abaixo de um determinado ciclo de trabalho PWM. Quando definido acima de 0, qualquer comando de ventoinha de resfriamento de componentes diferente de zero será elevado para pelo menos essa porcentagem, para que a ventoinha inicie de forma confiável. Um comando de ventoinha de 0 (ventoinha desligada) é sempre atendido exatamente. Essa limitação é aplicada após cada outro cálculo da ventoinha (rampa da primeira camada, interpolação do tempo da camada, substituições de saliência/ponte/interface de suporte/alisamento), para que o dimensionamento ainda opere dentro do intervalo [este valor, 100%].\n" -"Se o seu firmware já desativa a ventoinha abaixo de um limite (por exemplo, [fan] off_below: 0.10 do Klipper desliga a ventoinha sempre que o ciclo de trabalho comandado for inferior a 10%), esta opção e o limite do firmware devem idealmente ser definidos com o mesmo valor. A correspondência entre eles (por exemplo, off_below: 0.10 no Klipper e 10% aqui) garante que o fatiador nunca emita um valor diferente de zero que o firmware emitiria a velocidade cai silenciosamente e a ventoinha nunca recebe um valor abaixo daquele que você sabe que ela pode realmente atingir.\n" +"Se o seu firmware já desativa a ventoinha abaixo de um limite (por exemplo, [fan] off_below: 0.10 do Klipper desliga a ventoinha sempre que o ciclo de trabalho comandado for inferior a 10%), esta opção e o limite do firmware devem idealmente ser definidos com o mesmo valor. A correspondência entre eles (ex.: off_below: 0.10 no Klipper e 10% aqui) garante que o fatiador nunca emita um valor diferente de zero que o firmware emitiria a velocidade cai silenciosamente e a ventoinha nunca recebe um valor abaixo daquele que você sabe que ela pode realmente atingir.\n" "Defina como 0 para desativar." msgid "Time cost" @@ -14717,13 +14928,11 @@ msgstr "Com que tipo de G-code a impressora é compatível." msgid "Klipper" msgstr "Klipper" -# AI Translated msgid "Skip G-code config block" msgstr "Omitir o bloco de configuração do G-code" -# AI Translated msgid "Do not write the CONFIG_BLOCK (slicer configuration key/value pairs) into the G-code file. This can help with printers whose firmware crashes when parsing these comment lines (e.g. Anycubic go-klipper). Note: the G-code file will no longer contain slicer settings, so importing it back into OrcaSlicer will not restore the configuration." -msgstr "Não grava o CONFIG_BLOCK (os pares chave/valor da configuração do fatiador) no arquivo G-code. Isso pode ajudar com impressoras cujo firmware trava ao interpretar essas linhas de comentário (por exemplo, Anycubic go-klipper). Observação: o arquivo G-code não conterá mais as configurações do fatiador, então importá-lo de volta no OrcaSlicer não restaurará a configuração." +msgstr "Não grava o CONFIG_BLOCK (os pares chave/valor da configuração do fatiador) no arquivo G-code. Isso pode ajudar com impressoras cujo firmware trava ao interpretar essas linhas de comentário (ex.: Anycubic go-klipper). Nota: o arquivo G-code não conterá mais as configurações do fatiador, então importá-lo de volta no OrcaSlicer não restaurará a configuração." msgid "Pellet Modded Printer" msgstr "Impressora Modificada para Pellets" @@ -14771,13 +14980,13 @@ msgid "Sparse infill rotation template" msgstr "Gabarito de rotação de preenchimento esparso" msgid "Rotate the sparse infill direction per layer using a template of angles. Enter comma-separated degrees (e.g., '0,30,60,90'). Angles are applied in order by layer and repeat when the list ends. Advanced syntax is supported: '+5' rotates +5° every layer; '+5#5' rotates +5° every 5 layers. See the Wiki for details. When a template is set, the standard infill direction setting is ignored. Note: some infill patterns (e.g., Gyroid) control rotation themselves; use with care." -msgstr "Gira a direção do preenchimento esparso por camada usando um gabarito de ângulos. Insira graus separados por vírgula (por exemplo, '0, 30, 60, 90'). Os ângulos são aplicados em ordem por camada e repetidos quando a lista termina. Sintaxe avançada suportada: '+5' gira +5° a cada camada; '+5#5' gira +5° a cada 5 camadas. Consulte a Wiki para obter detalhes. Quando um modelo é definido, a configuração padrão de direção do preenchimento é ignorada. Observação: alguns padrões de preenchimento (por exemplo, Giróide) tem seu próprio controle de rotação, use com cuidado." +msgstr "Gira a direção do preenchimento esparso por camada usando um gabarito de ângulos. Insira graus separados por vírgula (ex.: '0,30,60,90'). Os ângulos são aplicados em ordem por camada e repetidos quando a lista termina. Sintaxe avançada suportada: '+5' gira +5° a cada camada; '+5#5' gira +5° a cada 5 camadas. Consulte a Wiki para obter detalhes. Quando um modelo é definido, a configuração padrão de direção do preenchimento é ignorada. Nota: alguns padrões de preenchimento (ex.: Giróide) tem seu próprio controle de rotação, use com cuidado." msgid "Solid infill rotation template" msgstr "Gabarito de rotação de preenchimento sólido" msgid "This parameter adds a rotation of solid infill direction to each layer according to the specified template. The template is a comma-separated list of angles in degrees, e.g. '0,90'. The first angle is applied to the first layer, the second angle to the second layer, and so on. If there are more layers than angles, the angles will be repeated. Note that not all solid infill patterns support rotation." -msgstr "Este parâmetro adiciona uma rotação da direção do preenchimento sólido a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, por exemplo, '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento sólido suportam rotação." +msgstr "Este parâmetro adiciona uma rotação da direção do preenchimento sólido a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, como '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento sólido suportam rotação." msgid "Skeleton infill density" msgstr "Densidade de preenchimento de esqueleto" @@ -15243,6 +15452,7 @@ msgstr "Força máxima do eixo Y" msgid "The allowed maximum output force of Y axis" msgstr "A força máxima de saída permitida do eixo Y" +msgctxt "Newton" msgid "N" msgstr "N" @@ -15252,7 +15462,7 @@ msgstr "Massa da mesa do eixo Y" msgid "The machine bed mass load of Y axis" msgstr "A carga de massa da mesa do equipamento no eixo Y" -# AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15565,7 +15775,7 @@ msgstr "Os pontos de início e fim que vão da área do cortador até a calha de msgid "Reduce infill retraction" msgstr "Reduzir retração durante o preenchimento" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "Não retrair quando o movimento está completamente na área de preenchimento. Isso significa que o vazamento não pode ser visto. Isso pode reduzir o número de retratações para modelos complexos e economizar tempo de impressão, mas torna a geração de fatiamento e G-code mais lenta. Note que o Z-Hop também não é realizado em áreas onde a retração é omitida." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15602,6 +15812,20 @@ msgstr "Detectar paredes salientes" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Isso detecta a porcentagem relativa de saliência em relação a largura do perímetro e usa uma velocidade diferente de impressão. Para saliências 100%%, a velocidade de ponte é usada." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Imprimir por último as paredes sem suporte" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Voltas de parede que ficam inteiramente no ar só são impressas quando algo pode sustentá-las:\n" +"elas são extrudadas depois das demais paredes da sua ilha, da mais interna para fora, seja qual for a ordem das paredes.\n" +"Uma volta que somente as pontes desta camada conseguem ancorar aguarda até que essas pontes sejam impressas, enquanto uma volta que corre ao lado de uma parede apoiada mantém seu lugar antes do preenchimento, que precisa dela como ancoragem." + msgid "Outer walls" msgstr "Paredes externas" @@ -15730,7 +15954,7 @@ msgstr "Quantidade de retração depois da limpeza" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Este é o comprimento da retração rápida antes de uma limpeza, em relação ao comprimento da retração.\n" @@ -15766,19 +15990,17 @@ msgstr "Retração longa na troca de extrusora" msgid "Retraction distance when extruder change" msgstr "Distância de retração na troca de extrusora" -# AI Translated msgid "Retraction Length (Toolchange)" -msgstr "Comprimento da retração (Troca de ferramenta)" +msgstr "Comprimento da Retração (Troca de ferramenta)" -# AI Translated msgid "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder)." msgstr "Quando a retração é acionada antes da troca de ferramenta, o filamento é puxado de volta na quantidade especificada (o comprimento é medido no filamento bruto, antes de entrar na extrusora)." msgid "Z-hop height" msgstr "Altura de Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." -msgstr "Sempre que há uma retração, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linhas em espiral para levantar Z pode evitar stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." +msgstr "Sempre que há uma retração, o bico é levantado um pouco para criar folga entre o bico e a impressão. Isso evita que o bico atinja a impressão ao se mover. Usar linhas em espiral para levantar Z pode evitar criação de fios." msgid "Z-hop lower boundary" msgstr "Limite inferior do Z-hop" @@ -15859,7 +16081,7 @@ msgid "Has filament switcher" msgstr "Tem trocador de filamentos" msgid "Printer has a filament switcher hardware (e.g., AMS)." -msgstr "A impressora tem um sistema de troca de filamentos (Ex.: AMS)." +msgstr "A impressora tem um sistema de troca de filamentos (ex.: AMS)." msgid "Extra length on restart" msgstr "Comprimento extra na retração" @@ -15867,9 +16089,8 @@ msgstr "Comprimento extra na retração" msgid "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed." msgstr "Quando a retração é compensada após o movimento de deslocamento, a extrusora empurrará essa quantidade adicional de filamento. Esta configuração é raramente necessária." -# AI Translated msgid "Extra length on restart (Toolchange)" -msgstr "Comprimento extra na retração (Troca de ferramenta)" +msgstr "Comprimento extra no reinício (Troca de ferramenta)" msgid "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament." msgstr "Quando a retração é compensada após a troca de ferramenta, a extrusora empurrará essa quantidade adicional de filamento." @@ -15977,7 +16198,7 @@ msgid "Scarf joint speed" msgstr "Velocidade da costura em bisel" msgid "This option sets the printing speed for scarf joints. It is recommended to print scarf joints at a slow speed (less than 100 mm/s). It's also advisable to enable 'Extrusion rate smoothing' if the set speed varies significantly from the speed of the outer or inner walls. If the speed specified here is higher than the speed of the outer or inner walls, the printer will default to the slower of the two speeds. When specified as a percentage (e.g., 80%), the speed is calculated based on the respective outer or inner wall speed. The default value is set to 100%." -msgstr "Esta opção define a velocidade de impressão para as costuras em bisel. É recomendável imprimir as costuras em bisel em uma velocidade baixa (menor que 100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a velocidade definida variar significativamente da velocidade das paredes externas ou internas. Se a velocidade especificada aqui for maior que a velocidade das paredes externas ou internas, a impressora utilizará a mais lenta das duas velocidades. Quando especificado como uma porcentagem (por exemplo, 80%), a velocidade é calculada com base na velocidade do perímetro externo ou interna respectiva. O valor padrão é definido como 100%." +msgstr "Esta opção define a velocidade de impressão para as costuras em bisel. É recomendável imprimir as costuras em bisel em uma velocidade baixa (menor que 100 mm/s). Também é aconselhável habilitar 'Suavização da taxa de extrusão' se a velocidade definida variar significativamente da velocidade das paredes externas ou internas. Se a velocidade especificada aqui for maior que a velocidade das paredes externas ou internas, a impressora utilizará a mais lenta das duas velocidades. Quando especificado como uma porcentagem (ex.: 80%), a velocidade é calculada com base na velocidade do perímetro externo ou interna respectiva. O valor padrão é definido como 100%." msgid "Scarf joint flow ratio" msgstr "Taxa de fluxo da costura em bisel" @@ -16031,6 +16252,39 @@ msgstr "Limpeza em voltas" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Para minimizar a visibilidade da costura em uma extrusão de volta fechada, é executado um pequeno movimento para dentro antes que a extrusora saia da volta." +# AI Translated +msgid "Wipe inward" +msgstr "Limpeza para dentro" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Aplica-se apenas às paredes externas, incluindo os contornos dos furos. Durante a limpeza, move o bico quente em direção às paredes internas já impressas, para reduzir o reaquecimento do plástico recém-depositado e as marcas de costura.\n" +"\n" +"Especialmente útil em alturas de camada abaixo de 0,1 mm, nas quais as marcas de limpeza ficam mais visíveis.\n" +"\n" +"Usa a limpeza normal se nenhuma parede interna adjacente já tiver sido impressa (áreas de parede única ou ordem de paredes Exterior/Interior) ou se nenhum caminho apoiado para dentro puder ser encontrado, por exemplo em cantos fechados ou em falhas da costura." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Distância de limpeza para dentro" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Distância pela qual o caminho de limpeza é deslocado para longe do perímetro externo, indicada em milímetros ou como porcentagem da largura de extrusão real da parede externa.\n" +"\n" +"Por exemplo, 50% desloca o caminho pela metade da largura da parede externa. O deslocamento efetivo é limitado tanto pela largura real da parede externa quanto pelo espaço disponível até a parede adjacente, de modo que valores acima de 100% ou uma distância absoluta equivalente não têm efeito adicional. Defina 0 para desativar o deslocamento." + msgid "Wipe before external loop" msgstr "Limpeza antes da volta externa" @@ -16047,7 +16301,7 @@ msgid "Wipe speed" msgstr "Velocidade de limpeza" msgid "The wipe speed is determined by the speed setting specified in this configuration. If the value is expressed as a percentage (e.g. 80%), it will be calculated based on the travel speed setting above. The default value for this parameter is 80%." -msgstr "A velocidade de limpeza é determinada pela velocidade especificada nesta configuração. Se o valor for expresso como uma porcentagem (por exemplo, 80%), será calculado com base na configuração de velocidade de deslocamento acima. O valor padrão para este parâmetro é 80%." +msgstr "A velocidade de limpeza é determinada pela velocidade especificada nesta configuração. Se o valor for expresso como uma porcentagem (ex.: 80%), será calculado com base na configuração de velocidade de deslocamento acima. O valor padrão para este parâmetro é 80%." msgid "Skirt distance" msgstr "Distância da saia" @@ -16085,7 +16339,7 @@ msgstr "" "Um escudo de ar é útil para proteger uma impressão ABS ou ASA de deformações e desprendimento da mesa de impressão devido à corrente de ar. Geralmente, ele é necessário apenas com impressoras de estrutura aberta, ou seja, sem um gabinete.\n" "\n" "Habilitado = a saia é tão alta quanto o objeto impresso mais alto. Caso contrário, 'Altura da saia' é usada.\n" -"Observação: com o escudo de ar ativo, a saia será impressa na distância da saia do objeto. Portanto, se as bordas estiverem ativas, ela pode se cruzar com elas. Para evitar isso, aumente o valor da distância da saia.\n" +"Nota: com o escudo de ar ativo, a saia será impressa na distância da saia do objeto. Portanto, se as bordas estiverem ativas, ela pode se cruzar com elas. Para evitar isso, aumente o valor da distância da saia.\n" msgid "Enabled" msgstr "Ativado" @@ -16226,10 +16480,10 @@ msgid "Preheat steps" msgstr "Passos de pré-aquecimento" msgid "Insert multiple preheat commands (e.g. M104.1). Only useful for Prusa XL. For other printers, please set it to 1." -msgstr "Insire múltiplos comandos de pré-aquecimento (por exemplo, M104.1). Útil apenas para Prusa XL. Para outras impressoras, defina como 1." +msgstr "Insire múltiplos comandos de pré-aquecimento (ex.: M104.1). Útil apenas para Prusa XL. Para outras impressoras, defina como 1." msgid "G-code written at the very top of the output file, before any other content. Useful for adding metadata that printer firmware reads from the first lines of the file (e.g. estimated print time, filament usage). Supports placeholders like {print_time_sec} and {used_filament_length}." -msgstr "Código G escrito no início do arquivo de saída, antes de qualquer outro conteúdo. Útil para adicionar metadados que o firmware da impressora lê das primeiras linhas do arquivo (por exemplo, tempo estimado de impressão, consumo de filamento). Suporta marcadores como {print_time_sec} e {used_filament_length}." +msgstr "Código G escrito no início do arquivo de saída, antes de qualquer outro conteúdo. Útil para adicionar metadados que o firmware da impressora lê das primeiras linhas do arquivo (ex.: tempo estimado de impressão, consumo de filamento). Suporta marcadores como {print_time_sec} e {used_filament_length}." msgid "Start G-code" msgstr "G-code Inicial" @@ -16250,7 +16504,7 @@ msgid "Manual Filament Change" msgstr "Troca Manual de Filamento" msgid "Enable this option to omit the custom Change filament G-code only at the beginning of the print. The tool change command (e.g., T0) will be skipped throughout the entire print. This is useful for manual multi-material printing, where we use M600/PAUSE to trigger the manual filament change action." -msgstr "Ative esta opção para omitir o G-code de troca de filamento personalizado apenas no início da impressão. O comando de troca de ferramenta (por exemplo, T0) será ignorado durante toda a impressão. Isso é útil para impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a ação de troca manual de filamento." +msgstr "Ative esta opção para omitir o G-code de troca de filamento personalizado apenas no início da impressão. O comando de troca de ferramenta (ex.: T0) será ignorado durante toda a impressão. Isso é útil para impressão manual de vários materiais, onde usamos M600/PAUSE para acionar a ação de troca manual de filamento." msgid "Wipe tower type" msgstr "Tipo de torre de purga" @@ -16279,19 +16533,18 @@ msgstr "Troca de ferramenta na torre de purga" msgid "Force the toolhead to travel to the wipe tower before issuing the tool change command (Tx). Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. By default Orca skips the travel on multi-toolhead machines because the firmware handles the head swap, which can result in the Tx command being issued above the printed part. Enable this option if you want the tool change to always be issued above the wipe tower instead." msgstr "Força o cabeçote de impressão a se deslocar até a torre de purga antes de emitir o comando de troca de ferramenta (Tx). Relevante apenas para impressoras com múltiplas extrusoras (múltiplos cabeçotes de impressão) que utilizam uma torre de purga Tipo 2. Por padrão, o Orca ignora o deslocamento em máquinas com múltiplos cabeçotes de impressão, pois o firmware gerencia a troca do cabeçote, o que pode resultar na emissão do comando Tx acima da peça impressa. Habilite esta opção se desejar que a troca de ferramenta seja sempre emitida acima da torre de purga." -# AI Translated msgid "Wait for temperature on wipe tower" msgstr "Aguardar a temperatura na torre de purga" -# AI Translated msgid "Pick up the new tool without waiting for it to reach printing temperature, travel to the wipe tower, and wait for the temperature there, right before purging. Ooze from the heat-up lands on the tower instead of the model, and the travel overlaps with the heating. Only relevant for multi-extruder (multi-toolhead) printers using a Type 2 wipe tower. The firmware or tool change macro must not wait for the temperature itself. When disabled, the temperature wait is issued right after the tool change command." -msgstr "Pega a nova ferramenta sem esperar que ela atinja a temperatura de impressão, desloca-se até a torre de purga e aguarda a temperatura ali, logo antes de purgar. O vazamento causado pelo aquecimento cai na torre em vez do modelo, e o deslocamento acontece durante o aquecimento. Relevante apenas para impressoras multiextrusora (multicabeça) que usam uma torre de purga do tipo 2. O firmware ou a macro de troca de ferramenta não devem aguardar a temperatura por conta própria. Quando desativado, a espera de temperatura é emitida logo após o comando de troca de ferramenta." +msgstr "Pega a nova ferramenta sem esperar que ela atinja a temperatura de impressão, desloca-se até a torre de purga e aguarda a temperatura ali, logo antes de purgar. O vazamento causado pelo aquecimento cai na torre em vez do modelo, e o deslocamento acontece junto com o aquecimento. Relevante apenas para impressoras multiextrusora (multicabeça) que usam uma torre de purga do Tipo 2. O firmware ou a macro de troca de ferramenta não devem aguardar a temperatura por conta própria. Quando desativado, a espera de temperatura é emitida logo após o comando de troca de ferramenta." msgid "No sparse layers (beta)" msgstr "Sem camadas esparsas (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Se ativado, a torre de purga não será impressa em camadas sem troca de ferramenta. Em camadas com uma troca de ferramenta, a extrusora deslocará para baixo para imprimir a torre de purga. O usuário é responsável por garantir que não haja colisão com a impressão." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Se ativado, a torre de purga não será impressa nas camadas sem mudanças de ferramenta. Nas camadas com mudança de ferramenta, a extrusora descerá para imprimir a torre de purga, de modo que a torre fica abaixo do modelo e a cabeça da ferramenta precisa descer até ela. Disposições em que isso colidiria com um objeto já impresso são rejeitadas. Não tem efeito com o timelapse suave nem com a detecção de aglomeração no bico, que precisam de uma torre em todas as camadas." msgid "Prime all printing extruders" msgstr "Preparar todas as extrusoras de impressão" @@ -16314,6 +16567,34 @@ msgstr "" msgid "Cyclic" msgstr "Cíclico" +# AI Translated +msgid "Cyclic order" +msgstr "Ordem cíclica" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Sequência de filamentos personalizada usada pela ordenação cíclica de mudanças de ferramenta, como números de filamento separados por vírgulas (p. ex. \"3,2,1,4\").\n" +"Cada camada imprime seus filamentos seguindo esta sequência; os filamentos não listados são impressos por último, em ordem crescente.\n" +"Deixe em branco para percorrer os filamentos em ordem crescente." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Aplicar a ordem cíclica à primeira camada" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Aplica a ordem cíclica de mudanças de ferramenta também à primeira camada.\n" +"Por padrão isso fica desativado, porque a primeira camada é, em vez disso, ordenada para a melhor adesão à mesa: os filamentos que imprimem detalhes pequenos e frágeis da primeira camada são impressos por último, de modo que as mudanças de ferramenta e os deslocamentos seguintes têm menos chance de soltar essas partes fracamente ancoradas. Essa ordem da primeira camada também respeita uma sequência de filamentos personalizada para a primeira camada, quando definida. O benefício da ordem cíclica (as mudanças de ferramenta extras dão a cada camada mais tempo para esfriar) não se aplica à primeira camada, que é impressa devagar e quente para favorecer a adesão.\n" +"Ative isto apenas se você precisar exatamente da mesma sequência de ferramentas em todas as camadas, inclusive a primeira, ao custo dessa otimização de adesão." + msgid "Slice gap closing radius" msgstr "Raio de fechamento de vãos de fatiamento" @@ -16323,9 +16604,6 @@ msgstr "Frestas menores que 2x o vão de fatiamento serão preenchidas durante o msgid "Slicing Mode" msgstr "Modo de Fatiamento" -msgid "Other" -msgstr "Outro" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Usar \"Par-impar\" para modelos de avião 3DLabPrint. Use \"Fechar buracos\" para fechar todos os buracos no modelo." @@ -16808,6 +17086,12 @@ msgstr "" "\n" "Definir um valor na configuração de quantidade de retração antes da limpeza abaixo executará qualquer retração em excesso antes da limpeza, caso contrário, será realizada após." +msgid "Mixed color sublayer" +msgstr "Subcamada de cor mista" + +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Ativa a divisão em subcamadas de cor mista. Quando ativado, as camadas que contêm filamentos de cor mista são divididas em subcamadas para obter efeitos de mistura de cores." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "A torre de purga pode ser usada para limpar o resíduo no bico e estabilizar a pressão na câmara dentro do bico, a fim de evitar defeitos de aparência ao imprimir objetos." @@ -17287,6 +17571,14 @@ msgstr "Sem verificação" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Não execute nenhuma verificação de validade, como a verificação de conflitos de caminho do G-code." +# AI Translated +msgid "Strict mode" +msgstr "Modo estrito" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Sai com código diferente de zero quando o fatiamento gera um aviso não crítico que, de outro modo, seria apenas registrado, como um modelo que precisa de suporte enquanto o suporte está desativado. Use isto em CI ou em pipelines automatizadas que nunca devem entregar um fatiamento sutilmente defeituoso. Cada um desses avisos também é listado com uma classe estável no array `warnings` do result.json, que é gravado apenas no Linux. Não pode ser combinado com --no-check, que ignora a verificação de suporte." + msgid "Normative check" msgstr "Verificação normativa" @@ -17299,11 +17591,28 @@ msgstr "Emitir Informações do Modelo" msgid "This outputs the model’s information." msgstr "Isso emite as informações do modelo." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Inspecionar malha (JSON para stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Imprime no stdout um resumo JSON de cada objeto carregado e então sai: suas caixas delimitadoras e as faces do fecho convexo sobre as quais ele pode ser apoiado, com suas normais, áreas e centros. Essas são as faces entre as quais as opções --ground-* escolhem. Alternativa legível por máquina ao --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Inspecionar pintura (JSON para stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Imprime um resumo JSON estruturado de cada camada pintada (suportes, costura, cor MMU, textura difusa) já armazenada no modelo carregado — contagem de facetas, área de superfície e caixa delimitadora local à malha por estado — e então sai. Alternativa legível por máquina a abrir as ferramentas de pintura na interface." + msgid "Export Settings" msgstr "Exportar Configurações" -msgid "This exports settings to a file." -msgstr "Isso exporta configurações para um arquivo." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Isto exporta as configurações para um arquivo. Use - para gravá-las no stdout." msgid "Send progress to pipe" msgstr "Enviar o progresso para a fila" @@ -17359,6 +17668,30 @@ msgstr "Rotacionar ao redor de Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Ângulo de rotação ao redor do Eixo Y em graus." +# AI Translated +msgid "Ground largest face" +msgstr "Apoiar na maior face" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoia cada objeto na maior face do seu fecho convexo e o solta sobre a mesa. Entre faces de mesmo tamanho, mantém-se a que já está voltada para baixo. Objetos sem uma face grande o bastante para se apoiar são deixados como estão. As transformações são aplicadas na ordem da linha de comando, portanto rotações indicadas antes desta opção são respeitadas. --orient 1 é executado depois de todas as transformações e substitui a orientação." + +# AI Translated +msgid "Ground face by normal" +msgstr "Apoiar na face pela normal" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoia cada objeto na face do fecho convexo cuja normal externa é a mais próxima da direção NX,NY,NZ e o solta sobre a mesa. A direção está em coordenadas do objeto, que incluem as rotações indicadas antes desta opção e coincidem com os eixos da mesa, a menos que o arquivo de entrada gire o objeto. Por exemplo, 1,0,0 apoia o objeto sobre o lado +X. --orient 1 é executado depois de todas as transformações e substitui a orientação." + +# AI Translated +msgid "Ground face at point" +msgstr "Apoiar na face em um ponto" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Apoia cada objeto na face do fecho convexo que contém o ponto X,Y,Z e o solta sobre a mesa. O ponto está em coordenadas do objeto, que incluem as rotações indicadas antes desta opção; --inspect-mesh informa os centros das faces nessas coordenadas. Objetos sem uma face assim são deixados como estão, e a execução falha se nenhum objeto tiver uma. --orient 1 é executado depois de todas as transformações e substitui a orientação." + msgid "Scale the model by a float factor." msgstr "Escalar o modelo por um fator decimal." @@ -17864,6 +18197,9 @@ msgstr "A geração da malha do arquivo do modelo falhou ou não há forma váli msgid "The supplied file couldn't be read because it's empty." msgstr "O arquivo fornecido não pôde ser lido porque está vazio." +msgid "The file format is incompatible and cannot be parsed." +msgstr "O formato do arquivo é incompatível e não pode ser processado." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .stl, .obj, .amf(.xml)." @@ -17871,10 +18207,10 @@ msgid "Unknown file format: input file must have .3mf or .zip.amf extension." msgstr "Formato de arquivo desconhecido: o arquivo de entrada deve ter extensão .3mf ou .zip.amf." msgid "load_obj: failed to parse" -msgstr "load_obj: falha ao analisar" +msgstr "load_obj: falha ao processar" msgid "load mtl in obj: failed to parse" -msgstr "carregar mtl em obj: falha ao analisar" +msgstr "carregar mtl em obj: falha ao processsar" msgid "The file contains polygons with more than 4 vertices." msgstr "O arquivo contém polígonos com mais de 4 vértices." @@ -18988,7 +19324,7 @@ msgid "Serial" msgstr "Série" msgid "e.g. Basic, Matte, Silk, Marble" -msgstr "por exemplo, Básico, Fosco, Seda, Mármore" +msgstr "Ex.: Básico, Fosco, Seda, Mármore" msgid "Filament Preset" msgstr "Predefinição de Filamento" @@ -19315,19 +19651,19 @@ msgstr "Apenas impressoras com alterações nas predefinições de impressora, f msgid "Only display the filament names with changes to filament presets." msgstr "Exibir apenas os nomes dos filamentos com alterações nas predefinições de filamento." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Apenas os nomes das impressoras com predefinições de impressora do usuário serão exibidos, e cada predefinição escolhida será exportada como um arquivo zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Apenas os nomes dos filamentos com predefinições de filamento do usuário serão exibidos, \n" "e todas as predefinições de filamento do usuário em cada nome de filamento selecionadas serão exportadas como um arquivo zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Apenas os nomes das impressoras com predefinições de processo alterados serão exibidos, \n" "e todas os predefinições de processo do usuário em cada nome de impressora selecionadas serão exportados como um arquivo zip." @@ -19556,7 +19892,7 @@ msgstr "Copiar informações do sistema para a área de transferência" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Precisamos de informações para diagnosticar a origem do problema. Consulte a página da wiki para obter um guia detalhado." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "O botão \"Empacotar\" reúne o arquivo do projeto e os logs da sessão atual em um arquivo ZIP." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -19598,7 +19934,7 @@ msgstr "Nível de log" msgid "Stored logs" msgstr "Logs armazenados" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Compacta todos os logs armazenados em um arquivo ZIP." msgid "Profiles" @@ -19665,11 +20001,11 @@ msgstr "Tipo de impressora não encontrado, selecione manualmente." msgid "Authorizing..." msgstr "Autorizando…" -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Erro. ​​Não foi possível obter o token de API para autorização" msgid "Could not parse server response." -msgstr "Não foi possível decifrar a resposta do servidor." +msgstr "Não foi possível processar a resposta do servidor." msgid "Error saving session to file" msgstr "Erro salvando sessão para arquivo" @@ -19737,7 +20073,7 @@ msgstr "O host respondeu, mas não parece ser o Moonraker (falta o result.klippy #, c-format, boost-format msgid "Could not parse Moonraker server response: %s" -msgstr "Não foi possível analisar a resposta do servidor Moonraker: %s" +msgstr "Não foi possível processar a resposta do servidor Moonraker: %s" msgid "Connection to OctoPrint is working correctly." msgstr "A conexão com o OctoPrint funciona corretamente." @@ -20111,8 +20447,8 @@ msgstr "Removido" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Ativar atribuição inteligente de filamento: Atribui um filamento a vários bicos para maximizar a economia" -msgid "Fila Saving" -msgstr "Econo Filamento" +msgid "File Saving" +msgstr "Salvamento de Arquivo" msgid "Don't remind me again" msgstr "Não me avise novamente" @@ -20297,7 +20633,7 @@ msgid "Connection timed out. Please check if the printer and computer network ar msgstr "Limite de tempo de conexão esgotado. Verifique se a impressora e a rede do computador estão funcionando corretamente e confirme se estão na mesma rede." msgid "The Hostname/IP/URL could not be parsed, please check it and try again." -msgstr "Não foi possível decifrar o Hostname/IP/URL; verifique-o e tente novamente." +msgstr "Não foi possível processar o Hostname/IP/URL; verifique-o e tente novamente." msgid "File/data transfer interrupted. Please check the printer and network, then try it again." msgstr "Transferência de arquivo/dados interrompida. Verifique a impressora e a rede e tente novamente." @@ -20394,6 +20730,18 @@ msgstr "Esta ação não pode ser desfeita. Continuar?" msgid "Skipping objects." msgstr "Ignorando objetos." +# AI Translated +msgid "Material Ratio" +msgstr "Proporção de Material" + +# AI Translated +msgid "Model Height" +msgstr "Altura do Modelo" + +# AI Translated +msgid "Ratio" +msgstr "Proporção" + msgid "Select Filament" msgstr "Selecionar Filamento" @@ -20471,6 +20819,9 @@ msgstr "Reiniciar Agora" msgid "NO RAMMING AT ALL" msgstr "SEM NENHUM MOLDEAMENTO" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Velocidade volumétrica" @@ -20630,11 +20981,15 @@ msgstr "Secando-Aquecendo" msgid "Drying-Dehumidifying" msgstr "Secando-Desumidificando" -msgid " maximum drying temperature is " -msgstr " temperatura máxima de secagem é " +# AI Translated +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "A temperatura máxima de secagem de %s é %d°C." -msgid " minimum drying temperature is " -msgstr " temperatura mínima de secagem é " +# AI Translated +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "A temperatura mínima de secagem de %s é %d°C." msgid "This filament may not be completely dried." msgstr "Este filamento pode não estar completamente seco." @@ -21047,6 +21402,111 @@ msgstr "" "Evitar empenamento\n" "Você sabia que ao imprimir materiais propensos ao empenamento como ABS, aumentar adequadamente a temperatura da mesa aquecida pode reduzir a probabilidade de empenamento?" +#~ msgid "Other" +#~ msgstr "Outro" + +#~ msgid "Left: " +#~ msgstr "Esquerda: " + +#~ msgid "Right: " +#~ msgstr "Direita: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "A temperatura máxima não pode exceder " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "A temperatura mínima não pode ser menor do que " + +#~ msgid "up to" +#~ msgstr "até" + +#~ msgid "above" +#~ msgstr "acima" + +#~ msgid "from" +#~ msgstr "de" + +#~ msgid "Configuration package: " +#~ msgstr "Pacote de configuração: " + +#~ msgid " updated to " +#~ msgstr " atualizado para " + +#~ msgid "Grouping error: " +#~ msgstr "Erro de agrupamento: " + +#~ msgid " can not be placed in the " +#~ msgstr " não pode ser colocado na " + +#~ msgid " maximum drying temperature is " +#~ msgstr " temperatura máxima de secagem é " + +#~ msgid " minimum drying temperature is " +#~ msgstr " temperatura mínima de secagem é " + +# AI Translated +#~ msgid "needs" +#~ msgstr "precisa de" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "não ativado" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "material não publicado" + +#~ msgid "Select the language" +#~ msgstr "Selecione o idioma" + +#~ msgid "Select plugin" +#~ msgstr "Selecionar plugin" + +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direção em que as superfícies superiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" +#~ "Para fora começa no centro da superfície, de modo que qualquer excesso de material seja empurrado em direção à borda, onde é menos visível. Para dentro começa na borda e termina com as curvas fechadas no centro.\n" +#~ "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." + +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Direção em que as superfícies inferiores são preenchidas ao usar um padrão baseado no centro (Concêntrico, Cordas de Arquimedes, Espiral de Octograma).\n" +#~ "Para dentro começa cada superfície com as curvas externas mais largas, o que melhora a aderência da primeira camada em mesas onde as curvas fechadas no centro podem não aderir. Para fora começa no centro, empurrando qualquer excesso de material em direção à borda.\n" +#~ "O padrão usa a ordenação de caminho mais curto, que pode seguir em qualquer direção." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Se ativado, a torre de purga não será impressa em camadas sem troca de ferramenta. Em camadas com uma troca de ferramenta, a extrusora deslocará para baixo para imprimir a torre de purga. O usuário é responsável por garantir que não haja colisão com a impressão." + +#~ msgid "This exports settings to a file." +#~ msgstr "Isso exporta configurações para um arquivo." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "A visualização ao vivo nativa do Wayland requer o receptor de vídeo GTK do GStreamer. Instale o plugin gtksink para GStreamer e reinicie o OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Falha ao inicializar o receptor de vídeo nativo do Wayland GStreamer. Verifique a instalação do plugin GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "O Windows Media Player é necessário para esta tarefa! Você quer habilitar o 'Windows Media Player' para seu sistema operacional?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource não foi registrado corretamente para reprodução de mídia! Pressione Sim para registrá-lo novamente. Você será promovido duas vezes" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Componente BambuSource registrado para reprodução de mídia não encontrado! Por favor, reinstale o OrcaSlicer ou procure ajuda da comunidade." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Usando um BambuSource de uma instalação diferente, a reprodução de vídeo pode não funcionar corretamente! Pressione Sim para consertar." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Seu sistema não possui codecs H.264 para o GStreamer, que são necessários para reproduzir vídeos. (Tente instalar os pacotes gstreamer1.0-plugins-bad ou gstreamer1.0-libav e depois reinicie o OrcaSlicer?)" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" @@ -21374,7 +21834,7 @@ msgstr "" #~ "Pontes externas de menor densidade podem ajudar a melhorar a confiabilidade, pois há mais espaço para o ar circular ao redor da ponte extrudada, melhorando sua velocidade de resfriamento. O mínimo é 10%.\n" #~ "\n" #~ "Densidades mais altas podem produzir superfícies de ponte mais lisas, pois as linhas sobrepostas fornecem suporte adicional durante a impressão. O máximo é 120%.\n" -#~ "Observação: Densidade de ponte muito alta pode causar deformação ou sobrextrusão." +#~ "Nota: Densidade de ponte muito alta pode causar deformação ou sobrextrusão." #~ msgid "" #~ "Controls the density (spacing) of internal bridge lines. 100% means solid bridge. Default is 100%.\n" @@ -21419,7 +21879,7 @@ msgstr "" #~ "\n" #~ "Geralmente, é recomendável ter esta opção ativada, a menos que o resfriamento da impressora seja potente o suficiente ou a velocidade de impressão lenta o suficiente para que a curvatura do perímetro não aconteça. Se estiver imprimindo com uma alta velocidade de perímetro externo, este parâmetro pode introduzir pequenos artefatos ao desacelerar devido à grande variação nas velocidades de impressão. Se você notar artefatos, certifique-se de que seu pressure advance esteja ajustado corretamente.\n" #~ "\n" -#~ "Observação: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." +#~ "Nota: quando esta opção estiver habilitada, os perímetros de saliência são tratados como saliências, o que significa que a velocidade de saliência é aplicada mesmo se o perímetro de saliência for parte de uma ponte. Por exemplo, quando os perímetros estiverem 100% salientes, sem nenhuma parede apoiando-os por baixo, a velocidade de saliência de 100% será aplicada." #~ msgid "If enabled, bridges are more reliable, can bridge longer distances, but may look worse. If disabled, bridges look better but are reliable just for shorter bridged distances." #~ msgstr "Se ativado, as pontes são mais confiáveis, podem cobrir distâncias maiores, mas podem parecer piores. Se desativado, as pontes ficam melhores, mas são confiáveis apenas para distâncias de ponte mais curtas." @@ -22339,7 +22799,7 @@ msgstr "" #~ msgstr "Contagem máxima de projetos recentes" #~ msgid "This parameter adds a rotation of sparse infill direction to each layer according to the specified template. The template is a comma-separated list of angles in degrees, e.g. '0,90'. The first angle is applied to the first layer, the second angle to the second layer, and so on. If there are more layers than angles, the angles will be repeated. Note that not all sparse infill patterns support rotation." -#~ msgstr "Este parâmetro adiciona uma rotação na direção do preenchimento esparso a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, por exemplo, '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento esparso suportam rotação." +#~ msgstr "Este parâmetro adiciona uma rotação na direção do preenchimento esparso a cada camada, de acordo com o gabarito especificado. O gabarito é uma lista de ângulos em graus separados por vírgulas, como '0,90'. O primeiro ângulo é aplicado à primeira camada, o segundo ângulo à segunda camada e assim por diante. Se houver mais camadas do que ângulos, os ângulos serão repetidos. Observe que nem todos os padrões de preenchimento esparso suportam rotação." #~ msgid "Set Position" #~ msgstr "Definir Posição" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 2372471707..97c1830426 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OrcaSlicer V2.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-02-25 13:38+0300\n" "Last-Translator: Felix14_v2\n" "Language-Team: Felix14_v2 (ДС/ТГ: @felix14_v2, почта: aleks111001@list.ru), Andylg \n" @@ -2431,15 +2431,6 @@ msgstr "Доступно обновление. Проверьте меню па msgid "%s has been removed." msgstr "%s был удалён." -msgid "Switching application language" -msgstr "Изменение языка приложения" - -msgid "Select the language" -msgstr "Выбор языка" - -msgid "Language" -msgstr "Язык" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "Не удалось переключить язык на %s." @@ -2911,6 +2902,10 @@ msgstr "Правка" msgid "Merge with" msgstr "Объединить с" +# AI Translated +msgid "Decompose Color" +msgstr "Разложить цвет" + msgid "Delete this filament" msgstr "Удалить материал" @@ -3222,6 +3217,10 @@ msgstr "Сборка" msgid "Merge parts to an object" msgstr "Сборка моделей" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Использование переменной высоты слоя вместе с подслоем смешанного цвета может ухудшить качество смешивания цветов." + # Запись в истории действий msgid "Add layers" msgstr "Добавление слоёв" @@ -3690,11 +3689,15 @@ msgstr "Втянуть текущий материал на Filament Track Switc msgid "Switch track at Filament Track Switch" msgstr "Переключить подачу на Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "Температура не должна превышать " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Температура не должна превышать %d" -msgid "The minmum temperature should not be less than " -msgstr "Температура не должна быть ниже " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Температура не должна быть ниже %d" msgid "Type to filter..." msgstr "Поиск..." @@ -4571,6 +4574,15 @@ msgstr "" "Не удалось скопировать временный G-код в целевое расположение. Возможно, накопитель защищён от записи?\n" "Сообщение об ошибке: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Не удалось скопировать временный G-код в выходной G-код.\n" +"Сообщение об ошибке: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Не удалось скопировать временный G-код в целевое расположение. Возможно, проблема с устройством хранения, попробуйте выполнить экспорт снова или использовать другое устройство. Повреждённый выходной файл G-кода находится в %1%.tmp." @@ -4780,7 +4792,7 @@ msgstr "" "\n" "Значение будет сброшено до 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Чередующаяся дополнительная стенка не работает, если для «Сохранение толщины вертикальной оболочки» установлено значение «Все»." msgid "" @@ -4833,7 +4845,7 @@ msgstr "" "Нет – отключить черновую башню" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "Начальная высота не должна превышать высоту слоя.\n" @@ -4841,7 +4853,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Перекрытие должно быть меньше внутренней оболочки.\n" @@ -4883,6 +4895,11 @@ msgid "" "No - Cancel enabling spiral mode" msgstr "Использовать эти настройки и режим вазы?" +# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо +# символов +msgid "N/A" +msgstr "–" + msgid "Printing" msgstr "Печать" @@ -5323,14 +5340,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Значение %s выходит за пределы допустимого диапазона. Допустимый диапазон - от %d до %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Имелось ввиду %s%%? (введено %s %s)\n" -"Да – изменить на %s%%\n" -"Нет – оставить %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Имелось ввиду %s%% или %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5352,26 +5366,18 @@ msgstr "Недопустимый шаблон. Используйте N, N#K и msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Недопустимый формат. Ожидаемый векторный формат: \"%1%\"" -# Не знаю, как и почему, но это, похоже, исправляет "вопросики" вместо -# символов -msgid "N/A" -msgstr "–" - msgid "System agents" msgstr "Системные агенты" -msgid "No plugin selected" -msgstr "Плагины не выбраны" - msgid "Add plugin" msgstr "Добавить плагин" -msgid "Select plugin" -msgstr "Выбрать плагин" - msgid "Remove plugin" msgstr "Удалить плагин" +msgid "No plugin selected" +msgstr "Плагины не выбраны" + msgid "Configure" msgstr "Настроить" @@ -5654,14 +5660,20 @@ msgstr "Оптимизировать" msgid "Regroup filament" msgstr "Изменить" -msgid "up to" -msgstr "до" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "до %1% мм" -msgid "above" -msgstr "после" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "выше %1% мм" -msgid "from" -msgstr "с" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "от %1% до %2% мм" msgid "Usage" msgstr "Расход" @@ -6023,7 +6035,7 @@ msgstr "Объём:" msgid "Size:" msgstr "Размер:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "В G-коде на %d слое (z = %.2lf мм) обнаружен конфликт путей. Пожалуйста, разместите конфликтующие модели дальше друг от друга (%s <-> %s)." @@ -6370,16 +6382,24 @@ msgstr "Сохранить проект как" msgid "Save current project as" msgstr "Сохранить текущий проект как" +# AI Translated +msgid "Publish 3MF" +msgstr "Опубликовать 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Экспорт файла 3MF со встроенными выбранными настройками" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Импорт 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Загрузка модели" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Импорт ZIP-архива" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Загрузка моделей, содержащихся в ZIP-архиве" msgid "Import Configs" @@ -7654,6 +7674,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Снизу" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Эта настройка не указывает тип возможности плагина." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Эта настройка указывает нераспознанный тип возможности плагина: " + msgid "Plugin Selection" msgstr "Выбор плагинов" @@ -7891,6 +7919,10 @@ msgstr "Настроить стол" msgid "The %s nozzle can not print %s." msgstr "Внимание: «%s» экструдер не может печатать %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Печать материала смешанного цвета на принтере с одним экструдером требует частой смены материала и прочистки, что может значительно увеличить количество отходов и риск засорения сопла или жёлоба для отходов." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Совмещение %1% с %2% при печати не рекомендуется.\n" @@ -8021,12 +8053,44 @@ msgstr "Синхронизировать материалы" msgid "Set filaments to use" msgstr "Выбрать материал" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Добавить смешанный материал" + +# AI Translated +msgid "Mixed Filament" +msgstr "Смешанный материал" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Удалить последний смешанный материал" + +# AI Translated +msgid "Add mixed filament" +msgstr "Добавить смешанный материал" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "У смешанного материала недопустимые или несовпадающие компоненты. Пожалуйста, отредактируйте затронутые записи заново." + msgid "Search plate, object and part." msgstr "Поиск стола, модели или части..." msgid "Pellets" msgstr "Гранулы" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "У смешанного материала нарушены ссылки на компоненты" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Изменить / Удалить / Объединить" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Целевой смешанный материал использует этот физический материал в качестве компонента. Объединение удалит этот физический материал и может сделать смешанный материал недействительным. Продолжить?" + # Порядок слов сильно зависит от контекста; не могу воспроизвести в интерфейсе. По идее, выводится при bool Sidebar::is_new_project_in_gcode3mf(), но что-либо менять в нарезанном .gcode.3mf вообще нельзя #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8168,8 +8232,16 @@ msgstr "Во избежание повреждения принтера убед msgid "Customized Preset" msgstr "Пользовательский профиль" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Имена компонентов внутри файла STEP не в формате UTF8." +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Некоторые опубликованные настройки не удалось применить:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Некоторые слоты материалов были изменены:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Имена компонентов внутри файла STEP не в формате UTF-8." msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Из-за неподдерживаемой кодировки в названии могут присутствовать ошибочные символы." @@ -8190,7 +8262,7 @@ msgstr "Объём модели равен нулю" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Модель из файла %s слишком мала. Возможно, её размеры \n" "в метрах или дюймах. Внутренней единицей программы \n" @@ -8211,6 +8283,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Обнаружена модель, состоящая из нескольких частей" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Сопоставление текстур с материалами" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Предупреждение при импорте текстуры" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Загрузить эти файлы как единую модель, состоящую из нескольких частей?\n" @@ -8425,6 +8505,22 @@ msgstr "" msgid "Sync now" msgstr "Синхронизировать" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Не удалось импортировать текстуру. Похоже, модель содержит данные текстуры, но завершить импорт не удалось. Модель будет импортирована только как геометрия." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Применение цветов текстуры..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Обновление 3D-вида..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Цвета текстуры применены." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Вы можете перенести сделанные изменения в новый проект или отказаться от их сохранения" @@ -8556,6 +8652,21 @@ msgstr "Сохранить нарезанный файл как:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s отправлен в память принтера и может быть просмотрен на нём." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Опубликовать файл 3MF как:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Не удалось экспортировать опубликованный файл 3MF.\n" +"Проверьте, доступна ли папка в сети и не открыт ли файл в других программах." + +msgid "Publish" +msgstr "Опубликовать" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Не указан тип сопла. Укажите его и попробуйте ещё раз." @@ -8761,9 +8872,6 @@ msgstr "Хотите продолжить?" msgid "Language selection" msgstr "Выбор языка" -msgid "Switching application language while some presets are modified." -msgstr "Смена языка приложения при изменении некоторых профилей." - msgid "Asia-Pacific" msgstr "Азиатско-Тихоокеанский" @@ -8869,6 +8977,9 @@ msgstr "Расположение: " msgid "General" msgstr "Общие" +msgid "Language" +msgstr "Язык" + msgid "Metric" msgstr "Метрическая СИ" @@ -9309,9 +9420,6 @@ msgstr "Затемнять слои, находящиеся ниже текущ msgid "Dimmed layer brightness" msgstr "Яркость затемнённых слоёв" -msgid "%" -msgstr "%" - msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" "99% is barely darkened, 0% renders them black. Capped at 99% because 100% would be the same as disabling the option." @@ -9671,6 +9779,10 @@ msgstr "Режим вазы" msgid "First layer filament sequence" msgstr "Очерёдность материалов на первом слое" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Список материалов содержит смешанные материалы. Пользовательская последовательность материалов не будет применена." + msgid "By Layer" msgstr "Послойно" @@ -9698,9 +9810,6 @@ msgstr "Перейти на веб-страницу публикации мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примечание: подготовка может занять несколько минут. Пожалуйста, наберитесь терпения." -msgid "Publish" -msgstr "Опубликовать" - msgid "Publish was canceled" msgstr "Публикация была отменена" @@ -9716,6 +9825,81 @@ msgstr "Отправка данных" msgid "Jump to webpage" msgstr "Перейти на страницу" +# AI Translated +msgid "Material" +msgstr "Материал" + +# AI Translated +msgid "Mixed filament" +msgstr "Смешанный материал" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Некоторые смешанные материалы зависят от материалов, которые не будут опубликованы:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Материал %d (смешанный)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% требует %2%, но он не включён." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% требует %2%, но его материал не будет опубликован." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Чтобы опубликовать смешанный материал, включите каждый используемый им материал и выберите «Полная публикация» либо выполните требование «Тип»." + +# AI Translated +msgid "Publish anyway" +msgstr "Всё равно опубликовать" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Опубликовать 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Выберите, какие настройки будут опубликованы в файле 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki по публикации 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Видеоруководство по публикации 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Смешанный материал — публикуется целиком, когда выше выбрано «Включить»" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Опубликовать этот смешанный материал и включить + полностью опубликовать его составляющие материалы" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Опубликовать этот слот материала в файле 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Полная публикация" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Встроить материал этого слота целиком в файл 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Фильтровать невыбранные" + #, c-format, boost-format msgid "Save %s as" msgstr "Сохранить %s как" @@ -9733,6 +9917,10 @@ msgstr "Копирует в этот профиль все значения, у msgid "Detach from parent" msgstr "Сделать независимым" +# AI Translated +msgid "Save without parent" +msgstr "Сохранить без родителя" + # AI Translated msgid "Unique preset" msgstr "Независимый профиль" @@ -10409,9 +10597,17 @@ msgstr "Для обнаружения налипаний на сопле тре msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Включение «Точной высоты по Z» совместно с черновой башней может привести к ошибкам нарезки. Продолжить?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Для плавного таймлапса требуется черновая башня на каждом слое, что несовместимо с параметром «Без разреженных слоёв». Параметр «Без разреженных слоёв» отключён." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Для сглаженного таймлапса требуется черновая башня, без неё на модели могут возникнуть дефекты. Включить черновую башню?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "Параметр «Без разреженных слоёв» несовместим с плавным таймлапсом, которому требуется черновая башня на каждом слое. Таймлапс переключён в обычный режим." + msgid "Still print by object?" msgstr "Продолжить печать по очереди?" @@ -10816,9 +11012,6 @@ msgstr "Совместимые настройки" msgid "Printable space" msgstr "Область печати" -msgid "Printer Agent" -msgstr "Сетевой агент" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Реализация сетевого агента для обмена информацией с принтером. Доступные реализации определяются при запуске." @@ -11072,11 +11265,11 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Перенос изменений не требуется." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Копировать настройки" #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Изменить настройки %s" #, c-format, boost-format @@ -11221,12 +11414,6 @@ msgstr "Количество экструдеров" msgid "Capabilities" msgstr "Возможности" -msgid "Left: " -msgstr "Левый: " - -msgid "Right: " -msgstr "Правый: " - msgid "Show all presets (including incompatible)" msgstr "Показать все профили (включая несовместимые)" @@ -11586,27 +11773,6 @@ msgstr "Объёмы прочистки при смене материала" msgid "Please choose the filament colour" msgstr "Изменение цвета" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Для нативного отображения трансляции в Wayland требуется gtksink (плагин для GStreamer). Установите необходимый пакет плагинов и перезапустите OrcaSlicer." - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Не удалось запустить нативную трансляцию GSteramer через Wayland. Проверьте наличие установленного пакета плагинов GStreamer." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Для этой задачи требуется Windows Media Player! Хотите включить его в своей ОС?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "Компонент BambuSource неправильно зарегистрирован для воспроизведения медиафайлов! Нажмите «Да», чтобы повторно зарегистрировать его" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Отсутствует компонент BambuSource для воспроизведения медиа. Переустановите OrcaSlicer или обратитесь за помощью к сообществу." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "При использовании компонентов BambuSource из другого инсталлятора, воспроизведение видео может работать некорректно! Нажмите «Да», чтобы исправить это." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "В вашей системе отсутствуют кодеки H.264 для GStreamer, которые необходимы для воспроизведения видео (попробуйте установить пакеты gstreamer1.0-plugins-bad или gstreamer1.0-libav, а затем перезапустить Orca Slicer)." - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Облачный агент недоступен. Перезапустите OrcaSlicer и повторите попытку." @@ -12082,15 +12248,22 @@ msgstr "Восстановление отменено" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Не удалось скопировать файл %1% в %2%: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Загрузка новых профилей производителей: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Пакет профилей: %1% обновлён до %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Не удалось загрузить профили производителей: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Перед обновлением профилей необходимо проверить несохранённые изменения." -msgid "Configuration package: " -msgstr "Пакет профилей: " - -msgid " updated to " -msgstr " обновлён до " - msgid "Open G-code file:" msgstr "Выберите G-код файл:" @@ -12150,12 +12323,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping поддерживается только в Klipper, RepRapFirmware и Marlin 2." -msgid "Grouping error: " -msgstr "Ошибка группировки: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Ошибка группировки: %1% нельзя разместить в левом сопле" -# filament_type + <перевод> + extruder_name -msgid " can not be placed in the " -msgstr " нельзя заправить в " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Ошибка группировки: %1% нельзя разместить в правом сопле" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Ошибка группировки в ручном режиме. Проверьте количество сопел или измените группировку." @@ -12268,6 +12444,10 @@ msgstr "%1% находится слишком близко к другим, чт msgid "%1% is too tall, and collisions will be caused." msgstr "Модель «%1%» слишком высокая, что приведёт к столкновению механики." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Взаимное расположение модели и черновой башни не отвечает требованиям функции «Без разреженных слоёв». Измените их взаимное расположение, уменьшите высоту модели или отключите параметр «Без разреженных слоёв»." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " находится слишком близко к области исключения, что может привести к столкновению при печати." @@ -12303,6 +12483,10 @@ msgstr "Если вас это не пугает, эту проверку мож msgid "No extrusions under current settings." msgstr "При текущих настройках экструзия отсутствует." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Используется смешанный материал с градиентом, но параметр «Подслой смешанного цвета» отключён. Градиент не будет напечатан." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавный режим таймлапса не поддерживается, когда включена последовательность печати моделей по очереди." @@ -12341,6 +12525,10 @@ msgstr "Попробуйте уменьшить размер модели или msgid "Variable layer height is not supported with Organic supports." msgstr "Функция переменной высоты слоя несовместима с органическим стилем древовидных поддержек." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Материал черновой башни не может быть смешанным материалом." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Совместное использование черновой башни с разными диаметрами сопел и прутков может привести к некорректной нарезке при включённой черновой башне. Этот метод работы экспериментальный, поэтому будьте осторожны при использовании." @@ -12611,6 +12799,9 @@ msgstr "Сжатие G-кода перед отправкой" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Рекомендуется для принтеров, поддерживающих печать из архивов 3MF. Файлы печати будут отправляться с расширением \".gcode.3mf\"." +msgid "Printer Agent" +msgstr "Сетевой агент" + msgid "Select the network agent implementation for printer communication." msgstr "Реализация сетевого агента для обмена информацией с принтером." @@ -12694,7 +12885,7 @@ msgstr "мм или %" msgid "Other layers" msgstr "Основная" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Температура стола для всех остальных слоёв. 0 – материал не поддерживает это покрытие." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13717,6 +13908,10 @@ msgstr "Ровный зигзаг" msgid "Concentric" msgstr "Эквидистанты" +# AI Translated +msgid "Spiral Inset" +msgstr "Спиральный отступ" + msgid "Hilbert Curve" msgstr "Кривая Гильберта" @@ -13810,28 +14005,28 @@ msgstr "" msgid "Top surface fill order" msgstr "Направление печати" +# AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Направление печати спирали/эквидистант на верхних поверхностях. Позволяет управляемо распределять избыток материала.\n" -"• По умолчанию: использовать кратчайший путь.\n" -"• Наружу: от центра шаблона к краю модели.\n" -"• Внутрь: от края модели к центру шаблона." +"Направление заполнения верхних поверхностей при использовании шаблона, идущего от центра (Эквидистанты, Спиральный отступ, Спираль Архимеда, Спиральная октаграмма).\n" +"Наружу начинает от центра поверхности, поэтому излишек материала вытесняется к краю, где он менее заметен. Внутрь начинает от края и заканчивается тесными изгибами в центре.\n" +"По умолчанию используется порядок по кратчайшему пути, который может идти в любом направлении." msgid "Bottom surface fill order" msgstr "Направление печати" +# AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Направление печати спирали/эквидистант на нижних поверхностях. Позволяет управляемо распределять избыток материала.\n" -"• По умолчанию: использовать кратчайший путь.\n" -"• Наружу: от центра шаблона к краю модели.\n" -"• Внутрь: от края модели к центру шаблона." +"Направление заполнения нижних поверхностей при использовании шаблона, идущего от центра (Эквидистанты, Спиральный отступ, Спираль Архимеда, Спиральная октаграмма).\n" +"Внутрь начинает каждую поверхность с более широких внешних изгибов, что улучшает адгезию первого слоя на столах, к которым тесные изгибы в центре могут не прилипать. Наружу начинает от центра, вытесняя излишек материала к краю.\n" +"По умолчанию используется порядок по кратчайшему пути, который может идти в любом направлении." msgid "Internal solid infill pattern" msgstr "Шаблон сплошного заполнения" @@ -13949,6 +14144,14 @@ msgstr "Против часовой стрелки" msgid "Clockwise" msgstr "По часовой стрелке" +# AI Translated +msgid "Distance to rod" +msgstr "Расстояние до штанги" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Расстояние по горизонтали от кончика сопла до дальнего края штанги. Используется для предотвращения столкновений при печати моделей по очереди." + msgid "Height to rod" msgstr "Высота до вала" @@ -14159,6 +14362,8 @@ msgstr "Время слоя" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Вентилятор охлаждения моделей будет включён для слоёв, расчётное время которых меньше этого значения. Скорость вентилятора интерполируется между минимальной и максимальной скоростями зависимости от времени печати слоя." +# AI Translated +msgctxt "second" msgid "s" msgstr "с" @@ -14488,6 +14693,62 @@ msgstr "Материал поддержки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Обычно используется для печати поддержки и связующего слоя (интерфейса)." +# AI Translated +msgid "Is mixed filament" +msgstr "Является смешанным материалом" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Определяет, является ли этот слот материала смешанным материалом, состоящим из нескольких физических материалов" + +# AI Translated +msgid "Mixed filament components" +msgstr "Компоненты смешанного материала" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Разделённые запятыми индексы материалов-компонентов, начиная с 1, например \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Доли подслоёв смешанного материала" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Разделённые запятыми значения долей, дающие в сумме 1.0, например \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Градиент смешанного материала" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Включает режим градиента по оси Z для подслоёв смешанного материала. При включении доли подслоёв линейно меняются от слоя к слою." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Диапазон градиента смешанного материала" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Начальная и конечная доли первого компонента в режиме градиента. Пара значений через запятую, например \"0.10,0.90\" означает от 10% до 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Кривая градиента смешанного материала" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Необязательная пользовательская кривая в стиле Photoshop, сопоставляющая прогресс по оси Z с долей первого компонента. Задаётся как контрольные точки, разделённые вертикальной чертой, в виде \"x,y\" (устаревший формат) или \"x,y,m_in,m_out\", если требуется переопределить касательную (пустое значение или \"nan\" означает использование значения PCHIP по умолчанию). x лежит в [0,1]; y ограничивается заданным диапазоном долей, например \"0,0.15|0.5,0.50|1,0.85\". Если поле пустое, вместо этого используется линейный gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Градиент смешанного материала по частям" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Если включён режим градиента, градиент применяется к каждой части сборки отдельно, а не ко всей сборке как к единому диапазону Z." + # ??? Настройка в режиме разработчика. Должна отображаться где-то в настройках # профиля, но поиском не ищется. msgid "Filament printable" @@ -15878,6 +16139,8 @@ msgstr "Максимальное усилие оси Y" msgid "The allowed maximum output force of Y axis" msgstr "Максимально допустимое усилие по оси Y." +# AI Translated +msgctxt "Newton" msgid "N" msgstr "Н" @@ -15887,6 +16150,8 @@ msgstr "Масса стола (оси Y)" msgid "The machine bed mass load of Y axis" msgstr "Пассивная нагрузка механики оси Y массой стола." +# AI Translated +msgctxt "gram" msgid "g" msgstr "г" @@ -16223,7 +16488,7 @@ msgstr "Начальная и конечная точки траектории msgid "Reduce infill retraction" msgstr "Откат только при пересечении периметров" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "" "Отключает откат (и подъём по Z), когда перемещения совершаются полностью над заполнением (где любые подтёки, вероятно, будут скрыты). Это поможет снизить количество откатов при печати сложных моделей и немного сэкономить время, но увеличит время нарезки и генерации G-кода.\n" "\n" @@ -16263,6 +16528,20 @@ msgstr "Обнаруживать нависающие периметры" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Использовать разную скорость печати в зависимости от выноса линии относительно её опоры. Для нависаний без опоры используется скорость печати мостов." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Печатать неподдерживаемые периметры последними" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Контуры периметров, полностью висящие в воздухе, печатаются только тогда, когда их есть чему удержать:\n" +"они выдавливаются после остальных периметров своего острова, начиная с самого внутреннего, независимо от порядка периметров.\n" +"Контур, который могут закрепить только мосты этого слоя, ждёт, пока эти мосты будут напечатаны, а контур, идущий вдоль опирающегося периметра, сохраняет своё место перед заполнением, которому он нужен как якорь." + # В секции "Материал для линий" msgid "Outer walls" msgstr "Внешние периметры" @@ -16401,7 +16680,7 @@ msgstr "Вторичный откат" #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Быстрый откат после очистки, выраженный в процентах от общей длины отката. В некоторых случаях позволяет значительно снизить количество «паутины».\n" @@ -16449,7 +16728,7 @@ msgstr "При срабатывании отката перед сменой и msgid "Z-hop height" msgstr "Высота подъёма" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "При каждом откате печатная голова немного приподнимается, создавая зазор между соплом и моделью. Это предотвращает столкновение сопла с моделью при перемещении. Использование спирального подъёма может помочь сократить образование \"паутины\"." msgid "Z-hop lower boundary" @@ -16773,6 +17052,39 @@ msgstr "" "\n" "Примечание: при отключении настройки зазор не будет заполняться остатками материала, что также может уменьшить заметность шва в сочетании с быстрым переходом к внутренним периметрам." +# AI Translated +msgid "Wipe inward" +msgstr "Очистка внутрь" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Применяется только к внешним периметрам, включая контуры отверстий. Во время очистки перемещает горячее сопло к уже напечатанным внутренним периметрам, чтобы уменьшить повторный нагрев только что напечатанного пластика и следы шва.\n" +"\n" +"Особенно полезно при высоте слоя менее 0,1 мм, где следы очистки заметнее.\n" +"\n" +"Использует обычную очистку, если рядом нет уже напечатанного внутреннего периметра (области с одним периметром или порядок периметров «Снаружи внутрь») либо если не удаётся найти опирающийся путь внутрь, например в тесных углах или разрывах шва." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Расстояние очистки внутрь" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Расстояние, на которое путь очистки смещается от внешнего периметра, задаётся в миллиметрах или в процентах от фактической ширины линии внешнего периметра.\n" +"\n" +"Например, 50% смещает путь на половину ширины внешнего периметра. Фактическое смещение ограничено как реальной шириной внешнего периметра, так и доступным промежутком до соседнего периметра, поэтому значения выше 100% или эквивалентное абсолютное расстояние не дают дополнительного эффекта. Задайте 0, чтобы отключить смещение." + # Подворот начала линии на шве, упреждающая подача перед внешним периметром, # заглубление подачи ..., смещённая подача msgid "Wipe before external loop" @@ -17064,9 +17376,9 @@ msgstr "Забирает новый инструмент, не дожидаяс msgid "No sparse layers (beta)" msgstr "Без разреженных слоёв (beta)" -# Requires refactoring -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Если включено, черновая башня не будет печататься на слоях, где не происходит смена материала/инструмента. На слоях, где происходит смена материала, экструдер будет опускаться вниз до верхней части черновой башни, чтобы напечатать её. Слайсер не проверяет столкновения при перемещении, и пользователь сам несет ответственность за правильную настройку всех соответствующих параметров." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Если включено, черновая башня не будет печататься на слоях без смены инструмента. На слоях со сменой инструмента экструдер опустится вниз, чтобы напечатать черновую башню, поэтому башня оказывается ниже модели, и печатающей голове приходится тянуться к ней вниз. Компоновки, при которых это привело бы к столкновению с уже напечатанной моделью, отклоняются. Не действует при плавном таймлапсе и при обнаружении налипаний, которым нужна башня на каждом слое." msgid "Prime all printing extruders" msgstr "Подготовка всех печатающих экструдеров" @@ -17091,6 +17403,34 @@ msgstr "" msgid "Cyclic" msgstr "Цикличный" +# AI Translated +msgid "Cyclic order" +msgstr "Циклический порядок" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Пользовательская последовательность материалов, используемая циклическим порядком смены инструмента, в виде номеров материалов через запятую (например, «3,2,1,4»).\n" +"Каждый слой печатает свои материалы в этой последовательности; не указанные материалы печатаются последними, по возрастанию.\n" +"Оставьте пустым, чтобы перебирать материалы по возрастанию." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Применять циклический порядок к первому слою" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Применяет циклический порядок смены инструмента и к первому слою.\n" +"По умолчанию отключено, поскольку первый слой вместо этого упорядочивается для наилучшей адгезии к столу: материалы, которыми печатаются мелкие хрупкие элементы первого слоя, печатаются последними, поэтому последующие смены инструмента и перемещения реже отрывают эти слабо закреплённые части. Этот порядок первого слоя учитывает также заданную пользователем последовательность материалов для первого слоя, если она указана. Преимущество циклического порядка (дополнительные смены инструмента дают каждому слою больше времени на остывание) к первому слою не относится, так как он печатается медленно и горячим ради адгезии.\n" +"Включайте это, только если вам нужна в точности одна и та же последовательность инструментов на каждом слое, включая первый, ценой такой оптимизации адгезии." + msgid "Slice gap closing radius" msgstr "Радиус закрытия зазоров полигональной сетки" @@ -17101,9 +17441,6 @@ msgstr "Часто в импортируемых в программу моде msgid "Slicing Mode" msgstr "Режим нарезки" -msgid "Other" -msgstr "Прочее" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "" "Режим нарезки «Чётный-нечётный» применяется для моделей с намеренно нарушенной целостностью. Например, для моделей самолётов с ресурса 3DLabPrint.\n" @@ -17660,6 +17997,14 @@ msgstr "" "\n" "Внимание: процент первичного отката будет увеличен, если длины очистки окажется недостаточно при текущей скорости отката (или из-за иных ограничений)." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Подслой смешанного цвета" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Включает разбиение на подслои смешанного цвета. При включении слои, содержащие материалы смешанного цвета, разбиваются на подслои для получения эффекта смешивания цветов." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Черновая башня – специальная структура, которая используется для прочистки сопла от остатков материала и стабилизации давления внутри сопла при смене экструдера, чтобы избежать дефектов на поверхности печатаемой модели." @@ -18199,6 +18544,14 @@ msgstr "Без проверки" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Не запускать никакие проверки валидности, такие как проверка на конфликт путей в G-коде." +# AI Translated +msgid "Strict mode" +msgstr "Строгий режим" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Завершает работу с ненулевым кодом, если при нарезке возникает некритическое предупреждение, которое иначе только записывается в журнал, например модель, которой нужны поддержки, когда поддержки отключены. Используйте это в CI или скриптовых конвейерах, которые никогда не должны выдавать незаметно испорченную нарезку. Каждое такое предупреждение также перечисляется с устойчивым классом в массиве `warnings` файла result.json, который создаётся только в Linux. Нельзя сочетать с --no-check, который пропускает проверку поддержек." + msgid "Normative check" msgstr "Нормативная проверка" @@ -18213,12 +18566,29 @@ msgstr "Информация о модели" msgid "This outputs the model’s information." msgstr "Вывод информации о модели." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Проверить полисетку (JSON в stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Выводит в stdout сводку JSON по каждой загруженной модели и завершает работу: её ограничивающие параллелепипеды и грани выпуклой оболочки, на которые её можно положить, с их нормалями, площадями и центрами. Именно из этих граней выбирают параметры --ground-*. Машиночитаемая альтернатива --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Проверить покраску (JSON в stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Выводит структурированную сводку JSON по каждому окрашенному слою (поддержки, шов, цвет MMU, нечёткая оболочка), уже сохранённому в загруженной модели, — количество граней, площадь поверхности и ограничивающий параллелепипед в координатах полисетки для каждого состояния — и завершает работу. Машиночитаемая альтернатива открытию инструментов покраски в интерфейсе." + # ??? msgid "Export Settings" msgstr "Экспорт настроек" -msgid "This exports settings to a file." -msgstr "Экспорт настроек в файл." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Экспортирует настройки в файл. Используйте -, чтобы записать их в stdout." # командная строка? нужен ли пеевод? msgid "Send progress to pipe" @@ -18278,6 +18648,30 @@ msgstr "Поворот вокруг оси Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Угол поворота вокруг оси Y в градусах." +# AI Translated +msgid "Ground largest face" +msgstr "Положить на наибольшую грань" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладёт каждую модель на наибольшую грань её выпуклой оболочки и опускает на стол. Из одинаковых по площади граней сохраняется та, что уже обращена вниз. Модели без достаточно большой грани для опоры остаются без изменений. Преобразования выполняются в порядке командной строки, поэтому повороты, заданные до этого параметра, учитываются. --orient 1 выполняется после всех преобразований и заменяет ориентацию." + +# AI Translated +msgid "Ground face by normal" +msgstr "Положить на грань по нормали" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладёт каждую модель на ту грань выпуклой оболочки, внешняя нормаль которой ближе всего к направлению NX,NY,NZ, и опускает её на стол. Направление задаётся в координатах модели, которые включают повороты, указанные до этого параметра, и совпадают с осями стола, если входной файл не поворачивает модель. Например, 1,0,0 ставит модель на сторону +X. --orient 1 выполняется после всех преобразований и заменяет ориентацию." + +# AI Translated +msgid "Ground face at point" +msgstr "Положить на грань в точке" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладёт каждую модель на ту грань выпуклой оболочки, которая содержит точку X,Y,Z, и опускает её на стол. Точка задаётся в координатах модели, которые включают повороты, указанные до этого параметра; --inspect-mesh выводит центры граней именно в них. Модели без такой грани остаются без изменений, а запуск завершается ошибкой, если такой грани нет ни у одной модели. --orient 1 выполняется после всех преобразований и заменяет ориентацию." + msgid "Scale the model by a float factor." msgstr "Масштабировать модель с помощью коэффициента." @@ -18818,6 +19212,10 @@ msgstr "Не удалось обнаружить форму или создат msgid "The supplied file couldn't be read because it's empty." msgstr "Невозможно прочитать файл, так как он пуст." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Формат файла несовместим и не может быть прочитан." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Неизвестный формат файла: входной файл должен иметь расширение *.stl, *.obj или *.amf(.xml)." @@ -20306,21 +20704,21 @@ msgstr "Будут отображаться только изменённые п msgid "Only display the filament names with changes to filament presets." msgstr "Будут отображаться только изменённые профили материалов." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "" "Будут отображаться только изменённые профили принтеров.\n" "Все они будут экспортированы в единый zip-файл." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Будут отображаться только изменённые профили материалов.\n" "Все они будут экспортированы в единый zip-файл." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Будут отображаться только профили принтеров с изменёнными настройками печати.\n" "Все изменённые профили настроек будут экспортированы в единый zip-файл." @@ -20560,7 +20958,7 @@ msgstr "Копировать в буфер обмена" msgid "We need information for diagnosing source of the issue. Check wiki page for detailed guide." msgstr "Эта информация требуется для диагностики проблем. Ознакомьтесь с руководством для получения подробностей." -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Нажмите «Экспорт», чтобы сохранить текущий проект и журнал сессии в ZIP-архив." msgid "Any additional visual examples like images or screen recordings might be helpful while reporting the issue." @@ -20602,7 +21000,7 @@ msgstr "Уровень ведения журнала" msgid "Stored logs" msgstr "Сохранённые журналы" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Нажмите «Экспорт», чтобы упаковать все сохранённые журналы в единый ZIP-архив" msgid "Profiles" @@ -20669,7 +21067,7 @@ msgstr "Требуется указать принтер вручную" msgid "Authorizing..." msgstr "Авторизация..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Ошибка получения токена авторизации" msgid "Could not parse server response." @@ -21120,8 +21518,9 @@ msgstr "Удалено" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Включить умное назначение материалов: назначить один материал нескольким соплам для максимальной экономии" -msgid "Fila Saving" -msgstr "Экономия материала" +# AI Translated +msgid "File Saving" +msgstr "Сохранение файла" msgid "Don't remind me again" msgstr "Больше не показывать" @@ -21407,6 +21806,18 @@ msgstr "Это действие необратимо. Продолжить?" msgid "Skipping objects." msgstr "Исключение объектов." +# AI Translated +msgid "Material Ratio" +msgstr "Доля материала" + +# AI Translated +msgid "Model Height" +msgstr "Высота модели" + +# AI Translated +msgid "Ratio" +msgstr "Доля" + msgid "Select Filament" msgstr "Выбрать материал" @@ -21486,6 +21897,9 @@ msgstr "Перезапустить сейчас" msgid "NO RAMMING AT ALL" msgstr "Рэмминг отключён" +msgid "s" +msgstr "с" + # Тянется только в окно настроек рэмминга msgid "Volumetric speed" msgstr "Объёмный расход" @@ -21652,11 +22066,15 @@ msgstr "Сушка — нагрев" msgid "Drying-Dehumidifying" msgstr "Сушка — вывод влаги" -msgid " maximum drying temperature is " -msgstr " максимальная температура сушки — " +# AI Translated +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Максимальная температура сушки для %s — %d°C." -msgid " minimum drying temperature is " -msgstr " минимальная температура сушки — " +# AI Translated +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Минимальная температура сушки для %s — %d°C." msgid "This filament may not be completely dried." msgstr "Сушка этого материала может не быть эффективной." @@ -22081,6 +22499,124 @@ msgstr "" "Предотвращение коробления материала\n" "Знаете ли вы, что при печати материалами, склонными к короблению, таких как ABS, повышение температуры подогреваемого стола может снизить эту вероятность?" +#~ msgid "Other" +#~ msgstr "Прочее" + +#~ msgid "Left: " +#~ msgstr "Левый: " + +#~ msgid "Right: " +#~ msgstr "Правый: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Температура не должна превышать " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Температура не должна быть ниже " + +#~ msgid "up to" +#~ msgstr "до" + +#~ msgid "above" +#~ msgstr "после" + +#~ msgid "from" +#~ msgstr "с" + +#~ msgid "Configuration package: " +#~ msgstr "Пакет профилей: " + +#~ msgid " updated to " +#~ msgstr " обновлён до " + +#~ msgid "Grouping error: " +#~ msgstr "Ошибка группировки: " + +# filament_type + <перевод> + extruder_name +#~ msgid " can not be placed in the " +#~ msgstr " нельзя заправить в " + +#~ msgid " maximum drying temperature is " +#~ msgstr " максимальная температура сушки — " + +#~ msgid " minimum drying temperature is " +#~ msgstr " минимальная температура сушки — " + +# AI Translated +#~ msgid "needs" +#~ msgstr "требует" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "не включён" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "материал не опубликован" + +#~ msgid "Select the language" +#~ msgstr "Выбор языка" + +#~ msgid "Select plugin" +#~ msgstr "Выбрать плагин" + +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Направление печати спирали/эквидистант на верхних поверхностях. Позволяет управляемо распределять избыток материала.\n" +#~ "• По умолчанию: использовать кратчайший путь.\n" +#~ "• Наружу: от центра шаблона к краю модели.\n" +#~ "• Внутрь: от края модели к центру шаблона." + +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Направление печати спирали/эквидистант на нижних поверхностях. Позволяет управляемо распределять избыток материала.\n" +#~ "• По умолчанию: использовать кратчайший путь.\n" +#~ "• Наружу: от центра шаблона к краю модели.\n" +#~ "• Внутрь: от края модели к центру шаблона." + +# Requires refactoring +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Если включено, черновая башня не будет печататься на слоях, где не происходит смена материала/инструмента. На слоях, где происходит смена материала, экструдер будет опускаться вниз до верхней части черновой башни, чтобы напечатать её. Слайсер не проверяет столкновения при перемещении, и пользователь сам несет ответственность за правильную настройку всех соответствующих параметров." + +#~ msgid "This exports settings to a file." +#~ msgstr "Экспорт настроек в файл." + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Для нативного отображения трансляции в Wayland требуется gtksink (плагин для GStreamer). Установите необходимый пакет плагинов и перезапустите OrcaSlicer." + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Не удалось запустить нативную трансляцию GSteramer через Wayland. Проверьте наличие установленного пакета плагинов GStreamer." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Для этой задачи требуется Windows Media Player! Хотите включить его в своей ОС?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "Компонент BambuSource неправильно зарегистрирован для воспроизведения медиафайлов! Нажмите «Да», чтобы повторно зарегистрировать его" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Отсутствует компонент BambuSource для воспроизведения медиа. Переустановите OrcaSlicer или обратитесь за помощью к сообществу." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "При использовании компонентов BambuSource из другого инсталлятора, воспроизведение видео может работать некорректно! Нажмите «Да», чтобы исправить это." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "В вашей системе отсутствуют кодеки H.264 для GStreamer, которые необходимы для воспроизведения видео (попробуйте установить пакеты gstreamer1.0-plugins-bad или gstreamer1.0-libav, а затем перезапустить Orca Slicer)." + +#~ msgid "N" +#~ msgstr "Н" + +#~ msgid "g" +#~ msgstr "г" + +#~ msgid "Fila Saving" +#~ msgstr "Экономия материала" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index 432000f96d..ce0d5f5034 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -2767,15 +2767,6 @@ msgstr "Det finns en uppdatering tillgänglig. Öppna dialogrutan för förinst msgid "%s has been removed." msgstr "%s har tagits bort." -msgid "Switching application language" -msgstr "Byt applikationsspråk" - -msgid "Select the language" -msgstr "Välj språk" - -msgid "Language" -msgstr "Språk" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -3289,6 +3280,10 @@ msgstr "Redigera" msgid "Merge with" msgstr "Slå ihop med" +# AI Translated +msgid "Decompose Color" +msgstr "Dela upp färg" + # AI Translated msgid "Delete this filament" msgstr "Radera detta filament" @@ -3610,6 +3605,10 @@ msgstr "Montering" msgid "Merge parts to an object" msgstr "Slå ihop delar till ett objekt" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Att använda variabel lagerhöjd tillsammans med underlager med blandad färg kan ge sämre färgblandningskvalitet." + # AI Translated msgid "Add layers" msgstr "Lägg till lager" @@ -4098,12 +4097,14 @@ msgid "Switch track at Filament Track Switch" msgstr "Byt spår vid Filament Track Switch" # AI Translated -msgid "The maximum temperature cannot exceed " -msgstr "Maxtemperaturen får inte överstiga " +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Maxtemperaturen får inte överstiga %d" # AI Translated -msgid "The minmum temperature should not be less than " -msgstr "Minimitemperaturen bör inte vara lägre än " +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Minimitemperaturen bör inte vara lägre än %d" # AI Translated msgid "Type to filter..." @@ -5060,6 +5061,15 @@ msgstr "" "Det gick inte att kopiera den tillfälliga G-code-filen till utdatafilen. Kanske är SD-kortet skrivskyddat?\n" "Felmeddelande: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Kopieringen av den tillfälliga G-koden till utdata-G-koden misslyckades.\n" +"Felmeddelande: %1%" + # AI Translated #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." @@ -5279,7 +5289,7 @@ msgstr "" "Värdet kommer att återställas till 0." # AI Translated -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternerande extra vägg fungerar inte bra när säkerställ vertikal skaltjocklek är inställt på Alla." # AI Translated @@ -5327,7 +5337,7 @@ msgstr "" # AI Translated msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height måste vara mindre än layer_height.\n" @@ -5336,7 +5346,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Låsdjupet bör vara mindre än ytskiktets djup.\n" @@ -5379,6 +5389,10 @@ msgstr "" "JA -Ändra dessa inställningar och möjliggör Spiral läge automatiskt\n" "NEJ -Avbryt Spiral läge denna gång" +# AI Translated +msgid "N/A" +msgstr "Ej tillämpligt" + msgid "Printing" msgstr "Utskrift pågår" @@ -5894,14 +5908,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Värdet %s ligger utanför intervallet. Giltigt intervall är från %d till %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Det är %s%% eller %s %s?\n" -"JA för %s%%, \n" -"NEJ för %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Det är %s%% eller %s %s?" + +msgid "%" +msgstr "%" # AI Translated #, boost-format @@ -5928,30 +5939,22 @@ msgstr "Ogiltigt mönster. Använd N, N#K eller en kommaseparerad lista med valf msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Ogiltligt format. Förväntat vector format: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Ej tillämpligt" - # AI Translated msgid "System agents" msgstr "Systemagenter" -# AI Translated -msgid "No plugin selected" -msgstr "Ingen insticksmodul vald" - # AI Translated msgid "Add plugin" msgstr "Lägg till insticksmodul" -# AI Translated -msgid "Select plugin" -msgstr "Välj insticksmodul" - # AI Translated msgid "Remove plugin" msgstr "Ta bort insticksmodul" +# AI Translated +msgid "No plugin selected" +msgstr "Ingen insticksmodul vald" + # AI Translated msgid "Configure" msgstr "Konfigurera" @@ -6232,14 +6235,20 @@ msgstr "Ställ in på optimal" msgid "Regroup filament" msgstr "Gruppera om filament" -msgid "up to" -msgstr "upp till" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "upp till %1% mm" -msgid "above" -msgstr "över" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "över %1% mm" -msgid "from" -msgstr "från" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "från %1% till %2% mm" msgid "Usage" msgstr "Användning" @@ -6628,7 +6637,7 @@ msgid "Size:" msgstr "Storlek:" # AI Translated -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Konflikter mellan G-code-banor hittades på lager %d, Z = %.2lfmm. Placera de objekt som krockar längre ifrån varandra (%s <-> %s)." @@ -6964,6 +6973,14 @@ msgstr "Spara Projekt som" msgid "Save current project as" msgstr "Spara nuvarande projekt som" +# AI Translated +msgid "Publish 3MF" +msgstr "Publicera 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Exportera en 3MF-fil med de valda inställningarna inbäddade" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Importera 3MF/STL/STEP/SVG/OBJ/AMF" @@ -6971,11 +6988,11 @@ msgid "Load a model" msgstr "Ladda modell" # AI Translated -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Importera ZIP-arkiv" # AI Translated -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Läs in modeller som finns i ett ZIP-arkiv" msgid "Import Configs" @@ -8352,6 +8369,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Bottenlager" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Den här inställningen anger ingen typ av insticksmodulsfunktion." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Den här inställningen anger en okänd typ av insticksmodulsfunktion: " + # AI Translated msgid "Plugin Selection" msgstr "Val av insticksmodul" @@ -8644,6 +8669,10 @@ msgstr "Anpassa aktuell platta" msgid "The %s nozzle can not print %s." msgstr "Nozzeln %s kan inte skriva ut %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Att skriva ut filament med blandad färg på en skrivare med en enda extruder kräver täta filamentbyten och rensningar, vilket kan öka spillet och risken för stopp i nozzeln eller avfallsrännan avsevärt." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8787,6 +8816,26 @@ msgstr "Synkronisera filament listan från AMS" msgid "Set filaments to use" msgstr "Ställ in filament som ska användas" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Lägg till blandat filament" + +# AI Translated +msgid "Mixed Filament" +msgstr "Blandat filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Ta bort det senaste blandade filamentet" + +# AI Translated +msgid "Add mixed filament" +msgstr "Lägg till blandat filament" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Det blandade filamentet har ogiltiga eller inkompatibla komponenter. Redigera de berörda posterna igen." + msgid "Search plate, object and part." msgstr "Sök platta, objekt och del." @@ -8794,6 +8843,18 @@ msgstr "Sök platta, objekt och del." msgid "Pellets" msgstr "Pellets" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Det blandade filamentet har trasiga komponentreferenser" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Redigera / Radera / Slå ihop" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Det blandade målfilamentet använder detta fysiska filament som komponent. Sammanslagningen tar bort det fysiska filamentet och kan göra det blandade filamentet ogiltigt. Fortsätt?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8952,8 +9013,16 @@ msgstr "Bekräfta att G-koderna i dessa inställningar är säkra för att förh msgid "Customized Preset" msgstr "Anpassad inställning" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Komponent namnet i STEP filen är inte UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Vissa publicerade inställningar kunde inte tillämpas:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Vissa filamentplatser har ändrats:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Komponent namnet i STEP filen är inte UTF-8 format!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "På grund av textkodning som inte stöds så kan skräptecken visas!" @@ -8974,7 +9043,7 @@ msgstr "Objektet är utan volym" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Objektets fil %s är för litet, det är kanske i meter eller inches.\n" "Skala om till millimeter?" @@ -8994,6 +9063,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Objekt i flera delar har upptäckts" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Matchar texturer mot filament" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Varning vid texturimport" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ladda dessa filer som ett enkelt objekt med multipla delar?\n" @@ -9223,6 +9300,22 @@ msgstr "" msgid "Sync now" msgstr "Synkronisera nu" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Texturimporten misslyckades. Modellen verkar innehålla texturdata, men importprocessen kunde inte slutföras. Modellen importeras endast som geometri." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Tillämpar texturfärger..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Uppdaterar 3D-vyn..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Texturfärger tillämpade." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Fortsätt med redigerings inställningarna till nytt projekt eller avfärda dem" @@ -9364,6 +9457,21 @@ msgstr "Spara beredningen som:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Filen %s har skickats till skrivarens lagringsutrymme och kan visas på skrivaren." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Publicera 3MF-filen som:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Det gick inte att exportera den publicerade 3MF-filen.\n" +"Kontrollera om mappen finns online eller om andra program har filen öppen." + +msgid "Publish" +msgstr "Publicera" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozzeltypen är inte angiven. Ange nozzeln och försök igen." @@ -9603,9 +9711,6 @@ msgstr "Fortsätta?" msgid "Language selection" msgstr "Språkval" -msgid "Switching application language while some presets are modified." -msgstr "Byter språk medans inställningarna ändras." - msgid "Asia-Pacific" msgstr "Asien-Stillahavsområdet" @@ -9725,6 +9830,9 @@ msgstr "Sökväg till aktuell instans: " msgid "General" msgstr "Allmän" +msgid "Language" +msgstr "Språk" + msgid "Metric" msgstr "Metrisk" @@ -10243,9 +10351,6 @@ msgstr "När du drar i lagerreglaget i den beredda förhandsgranskningen rendera msgid "Dimmed layer brightness" msgstr "Ljusstyrka för dämpade lager" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -10641,6 +10746,10 @@ msgstr "Spiral vas" msgid "First layer filament sequence" msgstr "Första lagrets filament sekvens" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filamentlistan innehåller blandade filament. Den anpassade filamentordningen får ingen effekt." + msgid "By Layer" msgstr "Per lager" @@ -10668,9 +10777,6 @@ msgstr "Växla till modell publicerings hemsidan" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Notera: Förberedelserna kan ta flera minuter. Vänligen vänta." -msgid "Publish" -msgstr "Publicera" - msgid "Publish was canceled" msgstr "Publiceringen avbröts" @@ -10687,6 +10793,81 @@ msgstr "Laddar upp data" msgid "Jump to webpage" msgstr "Växla till hemsidan" +# AI Translated +msgid "Material" +msgstr "Material" + +# AI Translated +msgid "Mixed filament" +msgstr "Blandat filament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Vissa blandade filament är beroende av filament som inte kommer att publiceras:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (blandat)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% behöver %2%, som inte är aktiverat." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% behöver %2%, vars material inte kommer att publiceras." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "För att publicera ett blandat filament, aktivera varje filament det använder och välj Fullständig publicering eller uppfyll dess Typ-krav." + +# AI Translated +msgid "Publish anyway" +msgstr "Publicera ändå" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Publicera 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Välj vilka inställningar som ska publiceras i 3MF-filen" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki för Publicera 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Videoguide för Publicera 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Blandat filament - publiceras i sin helhet när \"Aktivera\" ovan är valt" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Publicera det här blandade filamentet och aktivera + publicera dess ingående filament fullständigt" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Publicera den här filamentplatsen i 3MF-filen" + +# AI Translated +msgid "Full Publish" +msgstr "Fullständig publicering" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Bädda in hela filamentet från den här platsen i 3MF-filen" + +# AI Translated +msgid "Filter non-selected" +msgstr "Filtrera ej valda" + #, c-format, boost-format msgid "Save %s as" msgstr "Spara %s som" @@ -10705,6 +10886,10 @@ msgstr "Kopierar alla ärvda värden från den överordnade förinställningen t msgid "Detach from parent" msgstr "Koppla loss från överordnad" +# AI Translated +msgid "Save without parent" +msgstr "Spara utan överordnad" + # AI Translated msgid "Unique preset" msgstr "Unik förinställning" @@ -11482,9 +11667,17 @@ msgstr "Ett prime torn krävs för klumpdetektering. Utan prime torn kan modelle msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Att aktivera både exakt Z-höjd och rengöringstornet kan orsaka skärningsfel. Vill du fortfarande aktivera exakt Z-höjd?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Jämn timelapse kräver ett prime torn på varje lager, vilket inte fungerar ihop med \"Inga glesa lager\". \"Inga glesa lager\" har stängts av." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Prime tower krävs för Smooth timelapse-läge. Det kan bli fel på modellen utan prime tower. Vill du aktivera prime tower?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Inga glesa lager\" fungerar inte ihop med jämn timelapse, som kräver ett prime torn på varje lager. Timelapse har växlat till traditionellt läge." + msgid "Still print by object?" msgstr "Fortfarande utskrift per objekt?" @@ -11910,10 +12103,6 @@ msgstr "Kompatibla process profiler" msgid "Printable space" msgstr "Utskriftsbar yta" -# AI Translated -msgid "Printer Agent" -msgstr "Skrivaragent" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Välj vilken nätverksagentimplementation som ska användas för kommunikation med skrivaren. Tillgängliga agenter registreras vid start." @@ -12190,12 +12379,12 @@ msgid "No modifications need to be copied." msgstr "Inga ändringar behöver kopieras." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Kopiera parametrar" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Ändra parametrar för %s" # AI Translated @@ -12359,14 +12548,6 @@ msgstr "Antal extruders" msgid "Capabilities" msgstr "Förmågor" -# AI Translated -msgid "Left: " -msgstr "Vänster: " - -# AI Translated -msgid "Right: " -msgstr "Höger: " - msgid "Show all presets (including incompatible)" msgstr "Visa alla inställningar (inklusive inkompatibla)" @@ -12783,33 +12964,6 @@ msgstr "Rensnings volym för filament byte" msgid "Please choose the filament colour" msgstr "Välj filamentfärg" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Liveview i Wayland kräver GStreamers GTK-videosink. Installera insticksmodulen gtksink för GStreamer och starta sedan om OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Det gick inte att initiera Waylands GStreamer-videosink. Kontrollera installationen av din GStreamer GTK-insticksmodul." - -# AI Translated -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player krävs för den här uppgiften! Vill du aktivera 'Windows Media Player' i ditt operativsystem?" - -# AI Translated -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource har inte registrerats korrekt för mediauppspelning! Tryck på Ja för att registrera om den. Du får två frågor" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Saknad BambuSource-komponent registrerad för mediauppspelning! Installera om OrcaSlicer eller sök hjälp i gemenskapen." - -# AI Translated -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Du använder en BambuSource från en annan installation, videouppspelningen kanske inte fungerar korrekt! Tryck på Ja för att åtgärda det." - -# AI Translated -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Ditt system saknar H.264-kodekar för GStreamer, som krävs för att spela upp video. (Prova att installera paketen gstreamer1.0-plugins-bad eller gstreamer1.0-libav och starta sedan om Orca Slicer.)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Molnagenten är inte tillgänglig. Starta om OrcaSlicer och försök igen." @@ -13335,17 +13489,22 @@ msgstr "Reparation avbruten" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Kopierar fil %1% till %2% misslyckade: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Laddar ner nya leverantörsprofiler: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Konfigurationspaket: %1% uppdaterat till %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Det gick inte att ladda ner leverantörsprofiler: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Kontrollera ej sparade ändringar innan konfigureringen uppdateras." -# AI Translated -msgid "Configuration package: " -msgstr "Konfigurationspaket: " - -# AI Translated -msgid " updated to " -msgstr " uppdaterat till " - msgid "Open G-code file:" msgstr "Öppna G-kod fil:" @@ -13413,12 +13572,14 @@ msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping stöds endast av Klipper, RepRapFirmware och Marlin 2." # AI Translated -msgid "Grouping error: " -msgstr "Grupperingsfel: " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Grupperingsfel: %1% kan inte placeras i vänster nozzel" # AI Translated -msgid " can not be placed in the " -msgstr " kan inte placeras i " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Grupperingsfel: %1% kan inte placeras i höger nozzel" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -13533,6 +13694,10 @@ msgstr "%1% är för nära andra och kan orsaka kollisioner." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% är för hög, och kollisioner kommer att uppstå." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Modellens och prime tornets inbördes placering uppfyller inte kraven för funktionen \"Inga glesa lager\". Justera deras inbördes placering, sänk modellens höjd eller stäng av \"Inga glesa lager\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " är för nära undantagsområdet, det kan förekomma kollisioner vid utskrift." @@ -13572,6 +13737,10 @@ msgstr "Om du ändå vill skriva ut kan du aktivera alternativet i Inställninga msgid "No extrusions under current settings." msgstr "Nuvarande inställning har ingen extrudering." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Ett blandat filament med gradient används, men 'Underlager med blandad färg' är inaktiverat. Gradienten kommer inte att skrivas ut." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Smooth läge för timelapse stöds inte när ”per objekt” -sekvens är aktiverad." @@ -13614,6 +13783,10 @@ msgstr "Du kan behöva minska modellens storlek eller ändra de aktuella utskrif msgid "Variable layer height is not supported with Organic supports." msgstr "Variabel lagerhöjd stöds inte med organiska support." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filamentet för prime tornet kan inte vara ett blandat filament." + # AI Translated msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Olika nozzeldiametrar och olika filamentdiametrar kanske inte fungerar bra när prime tornet är aktiverat. Det är mycket experimentellt, så var försiktig." @@ -13927,6 +14100,10 @@ msgstr "Använd 3MF i stället för G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Aktivera detta om skrivaren tar emot en 3MF-fil som utskriftsjobb. När det är aktiverat skickar Orca Slicer den beredda filen som en .gcode.3mf i stället för en vanlig .gcode-fil." +# AI Translated +msgid "Printer Agent" +msgstr "Skrivaragent" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Välj vilken nätverksagentimplementation som ska användas för kommunikation med skrivaren." @@ -14012,14 +14189,12 @@ msgstr "mm eller %" msgid "Other layers" msgstr "Andra lager" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Byggplattans temperatur för alla lager utom det första. Värdet 0 innebär att filamentet inte stöder utskrift på Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Cool Plate." -# AI Translated msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Textured Cool Plate." msgstr "Detta är byggplattans temperatur för lager förutom det första. Värdet 0 betyder att filamentet inte stöder utskrift på Textured Cool Plate." @@ -15093,6 +15268,10 @@ msgstr "Justerade Rätlinjig" msgid "Concentric" msgstr "Koncentrisk" +# AI Translated +msgid "Spiral Inset" +msgstr "Spiralinsättning" + msgid "Hilbert Curve" msgstr "Hilbert kurvan" @@ -15190,13 +15369,13 @@ msgstr "Fyllordning för ovansidan" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Riktning i vilken ovansidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n" -"Utåt börjar i ytans mitt, så att överskottsmaterial trycks ut mot kanten där det syns minst. Inåt börjar vid kanten och slutar med de trånga kurvorna i mitten.\n" -"Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen." +"Riktningen som toppytor fylls i när ett mönster som utgår från mitten används (Koncentrisk, Spiralinsättning, Arkimediska kordor, Oktagramspiral).\n" +"Utåt börjar i ytans mitt, så att överflödigt material trycks ut mot kanten där det syns minst. Inåt börjar vid kanten och slutar med de trånga kurvorna i mitten.\n" +"Standard använder ordningen efter kortaste väg, som kan gå åt vilket håll som helst." # AI Translated msgid "Bottom surface fill order" @@ -15204,13 +15383,13 @@ msgstr "Fyllordning för undersidan" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Riktning i vilken undersidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n" -"Inåt börjar varje yta med de bredare yttre kurvorna, vilket förbättrar det första lagrets vidhäftning på byggplattor där de trånga kurvorna i mitten kanske inte fastnar. Utåt börjar i mitten och trycker överskottsmaterial mot kanten.\n" -"Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen." +"Riktningen som bottenytor fylls i när ett mönster som utgår från mitten används (Koncentrisk, Spiralinsättning, Arkimediska kordor, Oktagramspiral).\n" +"Inåt börjar varje yta med de bredare yttre kurvorna, vilket förbättrar första lagrets vidhäftning på byggplattor där de trånga kurvorna i mitten kanske inte fäster. Utåt börjar i mitten och trycker ut överflödigt material mot kanten.\n" +"Standard använder ordningen efter kortaste väg, som kan gå åt vilket håll som helst." msgid "Internal solid infill pattern" msgstr "Invändigt mönster för fyllning av solida ytor" @@ -15327,6 +15506,14 @@ msgstr "Moturs" msgid "Clockwise" msgstr "Medurs" +# AI Translated +msgid "Distance to rod" +msgstr "Avstånd till stången" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Vågrätt avstånd från nozzelns spets till stångens bortre kant. Används för att undvika kollisioner vid utskrift per objekt." + msgid "Height to rod" msgstr "Höjd till axel" @@ -15534,6 +15721,8 @@ msgstr "Lager tid" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Del kylfläkten kommer att aktiveras för lager vars beräknade tid är kortare än detta värde. Fläkthastigheten interpoleras mellan den lägsta och högsta fläkthastigheten enligt utskriftstiden för lager" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15912,6 +16101,62 @@ msgstr "Supportmaterial" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Support material används ofta för att skriva ut support och stödja gränssnittet" +# AI Translated +msgid "Is mixed filament" +msgstr "Är blandat filament" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Anger om denna filamentplats är ett blandat filament som består av flera fysiska filament" + +# AI Translated +msgid "Mixed filament components" +msgstr "Komponenter i blandat filament" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Kommaseparerade index för komponentfilamenten, med start på 1, t.ex. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Underlagerandelar för blandat filament" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Kommaseparerade andelsvärden vars summa är 1.0, t.ex. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient för blandat filament" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Aktiverar gradientläge i Z-riktningen för det blandade filamentets underlager. När det är aktiverat varierar underlagrens andelar linjärt över lagren." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Gradientintervall för blandat filament" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Start- och slutandel för den första komponenten i gradientläge. Kommaseparerat par, t.ex. \"0.10,0.90\" betyder 10% till 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Gradientkurva för blandat filament" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Valfri anpassad kurva i Photoshop-stil som mappar Z-förloppet till den första komponentens andel. Kodas som kontrollpunkter separerade med lodstreck, antingen \"x,y\" (äldre format) eller \"x,y,m_in,m_out\" när tangenten behöver åsidosättas (ett tomt värde eller \"nan\" använder PCHIP-standarden). x ligger i [0,1]; y begränsas till det konfigurerade andelsintervallet, t.ex. \"0,0.15|0.5,0.50|1,0.85\". Om fältet är tomt används det linjära gradient_range i stället." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient per del för blandat filament" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "När gradientläget är aktiverat tillämpas gradienten på varje del i en montering separat i stället för att behandla hela monteringen som ett enda Z-intervall." + # AI Translated msgid "Filament printable" msgstr "Filament utskrivbart" @@ -17359,6 +17604,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Den maximalt tillåtna utgående kraften för Y-axeln" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -17369,6 +17615,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Maskinbäddens massbelastning på Y-axeln" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -17720,8 +17967,8 @@ msgid "Reduce infill retraction" msgstr "Minska ifyllnads retraktionen" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Dra inte tillbaka när förflyttningen är helt i ett utfyllnadsområde. Det betyder att läckage av filament inte kan ses. Detta kan minska tiderna för indragning för komplexa modeller och spara utskriftstid, men gör beredning och generering av G-kod långsammare. Observera att z-hop inte heller utförs i områden där retraktionen hoppas över." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Dra inte tillbaka när förflyttningen är helt i ett utfyllnadsområde. Det betyder att läckage av filament inte kan ses. Detta kan minska tiderna för indragning för komplexa modeller och spara utskriftstid, men gör beredning och generering av G-kod långsammare. Observera att Z-hop inte heller utförs i områden där retraktionen hoppas över." # AI Translated msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -17764,6 +18011,20 @@ msgstr "Upptäck överhängs vägg" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Upptäck överhängs procenten i förhållande till linjebredden och använd olika hastigheter för att skriva ut. Vid 100%% överhäng, bridge/brygg hastighet användas." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Skriv ut väggar utan stöd sist" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Väggvarv som ligger helt i luften skrivs ut först när något kan hålla upp dem:\n" +"de extruderas efter de andra väggarna på sin ö, den innersta först, oavsett väggordning.\n" +"Ett varv som bara det här lagrets bridges kan förankra väntar tills dessa bridges är utskrivna, medan ett varv som löper längs en vägg med stöd behåller sin plats före ifyllnaden, som behöver det som förankring." + # AI Translated msgid "Outer walls" msgstr "Ytterväggar" @@ -17913,7 +18174,7 @@ msgstr "Reduktionsmängd efter avtorkning" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Längden på den snabba reduktionen efter avtorkning, i förhållande till reduktionslängden.\n" @@ -17968,7 +18229,7 @@ msgstr "När reduktionen utlöses före ett verktygsbyte dras filamentet tillbak msgid "Z-hop height" msgstr "Z-hop-höjd" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "När det är en retraktion lyfts nozzel en aning för att skapa ett spel mellan nozzel och utskriften. Detta förhindrar att nozzel träffar utskriften när den förflyttas. Att använda spirallinjer för att lyfta z kan förhindra strängning" msgid "Z-hop lower boundary" @@ -18282,6 +18543,39 @@ msgstr "Torka på varv" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "För att minimera sömmens synlighet i en sluten varvextrudering görs en liten rörelse inåt innan extrudern lämnar varvet." +# AI Translated +msgid "Wipe inward" +msgstr "Torka inåt" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Gäller endast yttre väggar, inklusive hålkonturer. Flyttar den heta nozzeln mot redan utskrivna inre väggar under avtorkningen, för att minska återuppvärmningen av nyss utskriven plast och sömmärken.\n" +"\n" +"Särskilt användbart vid lagerhöjder under 0,1 mm, där avtorkningsmärken syns tydligare.\n" +"\n" +"Använder vanlig avtorkning om ingen angränsande inre vägg redan är utskriven (områden med en enda vägg eller väggordningen Yttre/Inre), eller om ingen understödd väg inåt kan hittas, till exempel i trånga hörn eller vid sömglapp." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Avstånd för torka inåt" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Avståndet som avtorkningsvägen förskjuts bort från den yttre perimetern, angivet i millimeter eller som procent av den yttre väggens faktiska extruderingsbredd.\n" +"\n" +"Till exempel förskjuter 50% vägen med halva den yttre väggens bredd. Den verkliga förskjutningen begränsas både av den yttre väggens faktiska bredd och av det tillgängliga utrymmet till den angränsande väggen, så värden över 100% eller ett motsvarande absolut avstånd har ingen ytterligare effekt. Ange 0 för att stänga av förskjutningen." + # AI Translated msgid "Wipe before external loop" msgstr "Torka före yttre varv" @@ -18590,8 +18884,8 @@ msgid "No sparse layers (beta)" msgstr "Inga glesa lager (beta)" # AI Translated -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Om detta är aktiverat skrivs prime tornet inte ut på lager utan verktygsbyten. På lager med verktygsbyte flyttar extrudern nedåt för att skriva ut prime tornet. Användaren ansvarar för att det inte uppstår kollision med utskriften." +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Om detta är aktiverat skrivs prime tornet inte ut på lager utan verktygsbyten. På lager med ett verktygsbyte färdas extrudern nedåt för att skriva ut prime tornet, så att tornet hamnar under modellen och verktygshuvudet måste sträcka sig ned till det. Placeringar där detta skulle kollidera med ett redan utskrivet objekt avvisas. Har ingen effekt med jämn timelapse eller detektering av avlagringar på nozzeln, som kräver ett torn på varje lager." # AI Translated msgid "Prime all printing extruders" @@ -18619,6 +18913,34 @@ msgstr "" msgid "Cyclic" msgstr "Cyklisk" +# AI Translated +msgid "Cyclic order" +msgstr "Cyklisk ordning" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Anpassad filamentsekvens som används av den cykliska verktygsbytesordningen, som filamentnummer åtskilda med kommatecken (t.ex. \"3,2,1,4\").\n" +"Varje lager skriver ut sina filament enligt den här sekvensen; filament som inte anges skrivs ut sist, i stigande ordning.\n" +"Lämna tomt för att gå igenom filamenten i stigande ordning." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Tillämpa cyklisk ordning på första lagret" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Tillämpar den cykliska verktygsbytesordningen även på första lagret.\n" +"Detta är avstängt som standard, eftersom första lagret i stället ordnas för bästa vidhäftning mot byggplattan: filament som skriver ut små, ömtåliga detaljer i första lagret skrivs ut sist, så att efterföljande verktygsbyten och förflyttningar är mindre benägna att slå loss de svagt förankrade delarna. Den här ordningen för första lagret följer också en anpassad filamentsekvens för första lagret när en sådan är angiven. Fördelen med den cykliska ordningen (extra verktygsbyten ger varje lager mer tid att svalna) gäller inte första lagret, som skrivs ut långsamt och varmt för vidhäftningens skull.\n" +"Aktivera detta endast om du behöver exakt samma verktygssekvens på varje lager, inklusive det första, på bekostnad av den vidhäftningsoptimeringen." + msgid "Slice gap closing radius" msgstr "Bered spaltens stängningsradie" @@ -18628,9 +18950,6 @@ msgstr "Sprickor mindre än 2 x gap stängningsradie fylls under triangeln mesh msgid "Slicing Mode" msgstr "Berednings läge" -msgid "Other" -msgstr "Andra" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Använd ”Jämn-Udda” för 3DLabPrint flygplans modeller. Använd ”Stäng hål” för att stänga alla hål i modellen." @@ -19168,6 +19487,14 @@ msgstr "" "\n" "Om du anger ett värde i inställningen reduktionsmängd före avtorkning nedan utförs eventuell överskjutande reduktion före avtorkningen, annars utförs den efteråt." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Underlager med blandad färg" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Aktiverar uppdelning i underlager med blandad färg. När det är aktiverat delas lager som innehåller filament med blandad färg upp i underlager för att skapa färgblandningseffekter." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Avstryknings tornet kan användas för att avlägsna rester på munstycket och stabilisera kammartrycket inuti munstycket för att undvika utseendefel vid utskrift av objekt." @@ -19722,6 +20049,14 @@ msgstr "Ingen kontroll" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Utför inga giltighets kontroller, t.ex. kontroll av konflikter mellan G-kod och banor." +# AI Translated +msgid "Strict mode" +msgstr "Strikt läge" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Avslutar med en kod skild från noll när beredningen ger en icke-kritisk varning som annars bara loggas, till exempel en modell som behöver support medan support är avstängt. Använd detta i CI eller skriptade flöden som aldrig ska leverera en omärkligt trasig beredning. Varje sådan varning listas också med en stabil klass i arrayen `warnings` i result.json, som bara skrivs på Linux. Kan inte kombineras med --no-check, som hoppar över supportkontrollen." + msgid "Normative check" msgstr "Normativ kontroll" @@ -19734,11 +20069,28 @@ msgstr "Mata ut modell information" msgid "This outputs the model’s information." msgstr "Mata ut modellens information." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Inspektera mesh (JSON till stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Skriver en JSON-sammanfattning av varje inläst objekt till stdout och avslutar sedan: dess begränsningsboxar och de ytor på det konvexa höljet som det kan vila på, med deras normaler, areor och mittpunkter. Det är bland dessa ytor som alternativen --ground-* väljer. Maskinläsbart alternativ till --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Inspektera målning (JSON till stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Skriver en strukturerad JSON-sammanfattning av varje målat lager (support, söm, MMU-färg, ojämn yta) som redan är sparat på den inlästa modellen — antal facetter, ytarea och begränsningsbox i meshens koordinater per tillstånd — och avslutar sedan. Maskinläsbart alternativ till att öppna målningsverktygen i gränssnittet." + msgid "Export Settings" msgstr "Exportera inställningar" -msgid "This exports settings to a file." -msgstr "Exportera inställningar till en fil." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Detta exporterar inställningar till en fil. Använd - för att skriva dem till stdout." msgid "Send progress to pipe" msgstr "Skicka framsteg till röret (SLA)" @@ -19804,6 +20156,30 @@ msgstr "Rotera kring Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Rotationsvinkel kring Y-axeln i grader." +# AI Translated +msgid "Ground largest face" +msgstr "Lägg på största ytan" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Lägger varje objekt på den största ytan av dess konvexa hölje och släpper ned det på byggplattan. Av lika stora ytor behålls den som redan vetter nedåt. Objekt utan en yta som är stor nog att vila på lämnas som de är. Transformationer körs i kommandoradens ordning, så rotationer som anges före det här alternativet respekteras. --orient 1 körs efter alla transformationer och ersätter orienteringen." + +# AI Translated +msgid "Ground face by normal" +msgstr "Lägg på yta efter normal" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Lägger varje objekt på den yta av det konvexa höljet vars utåtriktade normal ligger närmast riktningen NX,NY,NZ och släpper ned det på byggplattan. Riktningen anges i objektets koordinater, som innefattar de rotationer som angetts före det här alternativet och som sammanfaller med byggplattans axlar om inte indatafilen roterar objektet. Till exempel ställer 1,0,0 objektet på sin +X-sida. --orient 1 körs efter alla transformationer och ersätter orienteringen." + +# AI Translated +msgid "Ground face at point" +msgstr "Lägg på yta vid punkt" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Lägger varje objekt på den yta av det konvexa höljet som innehåller punkten X,Y,Z och släpper ned det på byggplattan. Punkten anges i objektets koordinater, som innefattar de rotationer som angetts före det här alternativet; --inspect-mesh anger ytornas mittpunkter i dessa. Objekt utan en sådan yta lämnas som de är, och körningen misslyckas om inget objekt har någon. --orient 1 körs efter alla transformationer och ersätter orienteringen." + msgid "Scale the model by a float factor." msgstr "Skala modellen med en plus faktor" @@ -20441,6 +20817,10 @@ msgstr "Det gick inte att skapa mesh från modellfilen, eller så saknas en gilt msgid "The supplied file couldn't be read because it's empty." msgstr "Den medföljande filen kunde inte läsas eftersom den är tom." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Filformatet är inkompatibelt och kan inte tolkas." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Okänt filformat: indata filen måste ha tillägget .stl, .obj eller .amf(.xml)." @@ -22041,19 +22421,19 @@ msgstr "Endast printer med ändringar av inställningar för printer, filament o msgid "Only display the filament names with changes to filament presets." msgstr "Visa endast filament namnen vid ändringar av filament inställningar." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Endast printer namn med inställningar för printer visas, och varje inställning du väljer exporteras som zip-fil." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Endast filament namn med inställningar för användar filament visas, \n" "och alla inställningar för användar filament i varje filament namn du väljer exporteras som en zip-fil." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Endast printer namn med ändrade process inställningar visas, \n" "och alla användarprocess inställningar i varje printer namn som du väljer exporteras som zip-fil." @@ -22312,7 +22692,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Vi behöver information för att diagnostisera orsaken till problemet. Se wiki-sidan för en detaljerad guide." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketera-knappen samlar projektfilen och loggarna från den aktuella sessionen i en zip-fil." # AI Translated @@ -22368,7 +22748,7 @@ msgid "Stored logs" msgstr "Sparade loggar" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Paketerar alla sparade loggar i en zip-fil." # AI Translated @@ -22456,7 +22836,7 @@ msgid "Authorizing..." msgstr "Auktoriserar..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Fel. Det går inte att hämta api-token för auktorisering" # AI Translated @@ -23017,8 +23397,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Aktivera smart filamenttilldelning: Tilldela ett filament till flera nozzlar för att maximera besparingen" # AI Translated -msgid "Fila Saving" -msgstr "Filamentbesparing" +msgid "File Saving" +msgstr "Filsparande" # AI Translated msgid "Don't remind me again" @@ -23390,6 +23770,18 @@ msgstr "Åtgärden kan inte ångras. Vill du fortsätta?" msgid "Skipping objects." msgstr "Hoppar över objekt." +# AI Translated +msgid "Material Ratio" +msgstr "Materialandel" + +# AI Translated +msgid "Model Height" +msgstr "Modellhöjd" + +# AI Translated +msgid "Ratio" +msgstr "Andel" + msgid "Select Filament" msgstr "Välj filament" @@ -23491,6 +23883,9 @@ msgstr "Starta om nu" msgid "NO RAMMING AT ALL" msgstr "INGEN RAMMING ALLS" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Volymetrisk hastighet" @@ -23701,12 +24096,14 @@ msgid "Drying-Dehumidifying" msgstr "Torkning – avfuktning" # AI Translated -msgid " maximum drying temperature is " -msgstr " maximal torktemperatur är " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Maximal torktemperatur för %s är %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " minimal torktemperatur är " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Minimal torktemperatur för %s är %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -24171,6 +24568,143 @@ msgstr "" "Undvik vridning\n" "Visste du att när du skriver ut material som är benägna att vrida, såsom ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten för vridning?" +#~ msgid "Other" +#~ msgstr "Andra" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Vänster: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Höger: " + +# AI Translated +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Maxtemperaturen får inte överstiga " + +# AI Translated +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Minimitemperaturen bör inte vara lägre än " + +#~ msgid "up to" +#~ msgstr "upp till" + +#~ msgid "above" +#~ msgstr "över" + +#~ msgid "from" +#~ msgstr "från" + +# AI Translated +#~ msgid "Configuration package: " +#~ msgstr "Konfigurationspaket: " + +# AI Translated +#~ msgid " updated to " +#~ msgstr " uppdaterat till " + +# AI Translated +#~ msgid "Grouping error: " +#~ msgstr "Grupperingsfel: " + +# AI Translated +#~ msgid " can not be placed in the " +#~ msgstr " kan inte placeras i " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " maximal torktemperatur är " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " minimal torktemperatur är " + +# AI Translated +#~ msgid "needs" +#~ msgstr "behöver" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "inte aktiverad" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "materialet är inte publicerat" + +#~ msgid "Select the language" +#~ msgstr "Välj språk" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Välj insticksmodul" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Riktning i vilken ovansidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n" +#~ "Utåt börjar i ytans mitt, så att överskottsmaterial trycks ut mot kanten där det syns minst. Inåt börjar vid kanten och slutar med de trånga kurvorna i mitten.\n" +#~ "Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Riktning i vilken undersidor fylls när ett centrumbaserat mönster används (Koncentrisk, Arkimediska kordor, Oktagramspiral).\n" +#~ "Inåt börjar varje yta med de bredare yttre kurvorna, vilket förbättrar det första lagrets vidhäftning på byggplattor där de trånga kurvorna i mitten kanske inte fastnar. Utåt börjar i mitten och trycker överskottsmaterial mot kanten.\n" +#~ "Standard använder ordning efter kortaste väg, vilken kan gå i endera riktningen." + +# AI Translated +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Om detta är aktiverat skrivs prime tornet inte ut på lager utan verktygsbyten. På lager med verktygsbyte flyttar extrudern nedåt för att skriva ut prime tornet. Användaren ansvarar för att det inte uppstår kollision med utskriften." + +#~ msgid "This exports settings to a file." +#~ msgstr "Exportera inställningar till en fil." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Liveview i Wayland kräver GStreamers GTK-videosink. Installera insticksmodulen gtksink för GStreamer och starta sedan om OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Det gick inte att initiera Waylands GStreamer-videosink. Kontrollera installationen av din GStreamer GTK-insticksmodul." + +# AI Translated +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player krävs för den här uppgiften! Vill du aktivera 'Windows Media Player' i ditt operativsystem?" + +# AI Translated +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource har inte registrerats korrekt för mediauppspelning! Tryck på Ja för att registrera om den. Du får två frågor" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Saknad BambuSource-komponent registrerad för mediauppspelning! Installera om OrcaSlicer eller sök hjälp i gemenskapen." + +# AI Translated +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Du använder en BambuSource från en annan installation, videouppspelningen kanske inte fungerar korrekt! Tryck på Ja för att åtgärda det." + +# AI Translated +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Ditt system saknar H.264-kodekar för GStreamer, som krävs för att spela upp video. (Prova att installera paketen gstreamer1.0-plugins-bad eller gstreamer1.0-libav och starta sedan om Orca Slicer.)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filamentbesparing" + # AI Translated #~ msgid "" #~ "Layer height is too small.\n" diff --git a/localization/i18n/th/OrcaSlicer_th.po b/localization/i18n/th/OrcaSlicer_th.po index a0c0079125..410e3899dc 100644 --- a/localization/i18n/th/OrcaSlicer_th.po +++ b/localization/i18n/th/OrcaSlicer_th.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-06-19 13:40+0700\n" "Last-Translator: Icezaza\n" "Language-Team: Thai\n" @@ -2456,15 +2456,6 @@ msgstr "มีอัปเดตพร้อมใช้งาน เปิด msgid "%s has been removed." msgstr "ลบ %s แล้ว" -msgid "Switching application language" -msgstr "การเปลี่ยนภาษาของแอปพลิเคชัน" - -msgid "Select the language" -msgstr "เลือกภาษา" - -msgid "Language" -msgstr "ภาษา" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2942,6 +2933,10 @@ msgstr "แก้ไข" msgid "Merge with" msgstr "รวมกับ" +# AI Translated +msgid "Decompose Color" +msgstr "แยกสี" + msgid "Delete this filament" msgstr "ลบเส้นพลาสติกนี้" @@ -3237,6 +3232,10 @@ msgstr "การประกอบ" msgid "Merge parts to an object" msgstr "รวมชิ้นส่วนเป็นวัตถุเดียว" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "การใช้ความสูงเลเยอร์แบบแปรผันร่วมกับซับเลเยอร์สีผสมอาจทำให้คุณภาพการผสมสีไม่ดี" + # AI Translated msgid "Add layers" msgstr "เพิ่มเลเยอร์" @@ -3690,11 +3689,15 @@ msgstr "ดึงเส้นพลาสติกปัจจุบันกล msgid "Switch track at Filament Track Switch" msgstr "สลับแทร็กที่ Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "อุณหภูมิสูงสุดต้องไม่เกิน " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "อุณหภูมิสูงสุดต้องไม่เกิน %d" -msgid "The minmum temperature should not be less than " -msgstr "อุณหภูมิต่ำสุดไม่ควรต่ำกว่า" +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "อุณหภูมิต่ำสุดไม่ควรต่ำกว่า %d" msgid "Type to filter..." msgstr "พิมพ์เพื่อกรอง..." @@ -4576,6 +4579,15 @@ msgstr "" "การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว บางทีการ์ด SD อาจถูกล็อคการเขียน?\n" "ข้อความแสดงข้อผิดพลาด: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"การคัดลอก G-code ชั่วคราวไปยัง G-code ผลลัพธ์ล้มเหลว\n" +"ข้อความแสดงข้อผิดพลาด: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "การคัดลอก G-code ชั่วคราวไปยังเอาต์พุต G-code ล้มเหลว อาจมีปัญหากับอุปกรณ์เป้าหมาย โปรดลองส่งออกอีกครั้งหรือใช้อุปกรณ์อื่น G-code เอาต์พุตที่เสียหายอยู่ที่ %1%.tmp" @@ -4785,7 +4797,7 @@ msgstr "" "\n" "ค่าจะถูกรีเซ็ตเป็น 0" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "ผนังเสริมสำรองทำงานได้ไม่ดีเมื่อตั้งค่าความหนาของเปลือกแนวตั้งเป็นทั้งหมด" msgid "" @@ -4831,7 +4843,7 @@ msgstr "" "ไม่ - รักษาความสูงของชั้นรองรับที่เป็นอิสระ" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height ต้องเล็กกว่า layer_height\n" @@ -4839,7 +4851,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "ความลึกของล็อคควรน้อยกว่าความลึกของผิวหนัง\n" @@ -4879,6 +4891,9 @@ msgstr "" "ใช่ - เปลี่ยนการตั้งค่าเหล่านี้และเปิดใช้งานโหมดเกลียวโดยอัตโนมัติ\n" "ไม่ - เลิกใช้โหมดเกลียวในครั้งนี้" +msgid "N/A" +msgstr "ไม่มี" + msgid "Printing" msgstr "กำลังพิมพ์" @@ -5309,14 +5324,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "ค่า %s อยู่นอกช่วง ช่วงที่ถูกต้องคือตั้งแต่ %d ถึง %d" #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"มันคือ %s%% หรือ %s %s?\n" -"ใช่สำหรับ %s%% \n" -"ไม่ สำหรับ %s %s" +msgid "Is it %s%% or %s %s?" +msgstr "มันคือ %s%% หรือ %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5338,29 +5350,22 @@ msgstr "รูปแบบไม่ถูกต้อง ใช้ N, N#K หร msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "รูปแบบไม่ถูกต้อง รูปแบบเวกเตอร์ที่ต้องการ: \"%1%\"" -msgid "N/A" -msgstr "ไม่มี" - # AI Translated msgid "System agents" msgstr "เอเจนต์ระบบ" -# AI Translated -msgid "No plugin selected" -msgstr "ไม่ได้เลือกปลั๊กอิน" - # AI Translated msgid "Add plugin" msgstr "เพิ่มปลั๊กอิน" -# AI Translated -msgid "Select plugin" -msgstr "เลือกปลั๊กอิน" - # AI Translated msgid "Remove plugin" msgstr "ลบปลั๊กอิน" +# AI Translated +msgid "No plugin selected" +msgstr "ไม่ได้เลือกปลั๊กอิน" + # AI Translated msgid "Configure" msgstr "กำหนดค่า" @@ -5616,14 +5621,20 @@ msgstr "ตั้งค่าให้เหมาะสมที่สุด" msgid "Regroup filament" msgstr "จัดกลุ่มเส้นพลาสติกใหม่" -msgid "up to" -msgstr "สูงสุด" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "สูงสุด %1% มม." -msgid "above" -msgstr "ข้างบน" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "สูงกว่า %1% มม." -msgid "from" -msgstr "จาก" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "จาก %1% ถึง %2% มม." msgid "Usage" msgstr "การใช้งาน" @@ -5984,7 +5995,7 @@ msgstr "ปริมาณ:" msgid "Size:" msgstr "ขนาด:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "พบความขัดแย้งของเส้นทางรหัส G ที่เลเยอร์ %d, Z = %.2lfmm โปรดแยกวัตถุที่ขัดแย้งกันให้ไกลออกไป (%s <-> %s)" @@ -6296,16 +6307,24 @@ msgstr "บันทึกโปรเจกต์เป็น" msgid "Save current project as" msgstr "บันทึกโครงการปัจจุบันเป็น" +# AI Translated +msgid "Publish 3MF" +msgstr "เผยแพร่ 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "ส่งออกไฟล์ 3MF ที่ฝังการตั้งค่าที่เลือกไว้" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "นำเข้า 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "โหลดโมเดล" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "นำเข้าไฟล์ Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "โหลดโมเดลที่มีอยู่ในไฟล์ zip" msgid "Import Configs" @@ -7550,6 +7569,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "ล่าง" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "การตั้งค่านี้ไม่ได้ระบุชนิดความสามารถของปลั๊กอิน" + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "การตั้งค่านี้ระบุชนิดความสามารถของปลั๊กอินที่ไม่รู้จัก: " + # AI Translated msgid "Plugin Selection" msgstr "การเลือกปลั๊กอิน" @@ -7807,6 +7834,10 @@ msgstr "ปรับแต่งแผ่นปัจจุบัน" msgid "The %s nozzle can not print %s." msgstr "หัวฉีด %s ไม่สามารถพิมพ์ %s ได้" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "การพิมพ์เส้นพลาสติกสีผสมบนเครื่องพิมพ์ที่มีชุดดันเส้นเดียวต้องเปลี่ยนเส้นพลาสติกและไล่เส้นบ่อยครั้ง ซึ่งอาจเพิ่มเศษวัสดุและความเสี่ยงที่หัวฉีดหรือช่องทิ้งเศษวัสดุจะอุดตันอย่างมาก" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "ไม่แนะนำให้ผสม %1% กับ %2% ในการพิมพ์\n" @@ -7932,12 +7963,44 @@ msgstr "ประสานรายการเส้นพลาสติกจ msgid "Set filaments to use" msgstr "ตั้งค่าเส้นพลาสติกที่จะใช้" +# AI Translated +msgid "Add Mixed Filament" +msgstr "เพิ่มเส้นพลาสติกผสม" + +# AI Translated +msgid "Mixed Filament" +msgstr "เส้นพลาสติกผสม" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "ลบเส้นพลาสติกผสมล่าสุด" + +# AI Translated +msgid "Add mixed filament" +msgstr "เพิ่มเส้นพลาสติกผสม" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "เส้นพลาสติกผสมมีส่วนประกอบที่ไม่ถูกต้องหรือไม่ตรงกัน กรุณาแก้ไขรายการที่ได้รับผลกระทบอีกครั้ง" + msgid "Search plate, object and part." msgstr "ค้นหาจาน วัตถุ และชิ้นส่วน" msgid "Pellets" msgstr "เม็ด" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "เส้นพลาสติกผสมมีการอ้างอิงส่วนประกอบที่เสียหาย" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "แก้ไข / ลบ / รวม" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "เส้นพลาสติกผสมปลายทางใช้เส้นพลาสติกจริงนี้เป็นส่วนประกอบ การรวมจะลบเส้นพลาสติกจริงนี้และอาจทำให้เส้นพลาสติกผสมใช้ไม่ได้ ดำเนินการต่อหรือไม่?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "หลังจากเสร็จสิ้นการดำเนินการของคุณ โครงการ %s จะถูกปิดและสร้างโครงการใหม่" @@ -8074,8 +8137,16 @@ msgstr "โปรดยืนยันว่ารหัส G ภายในค msgid "Customized Preset" msgstr "ค่าที่ตั้งไว้ล่วงหน้าที่กำหนดเอง" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF8!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "ไม่สามารถใช้การตั้งค่าที่เผยแพร่บางรายการได้:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "ช่องเส้นพลาสติกบางช่องถูกเปลี่ยนแปลง:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "ชื่อของส่วนประกอบภายในไฟล์ STEP ไม่ใช่รูปแบบ UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "ชื่ออาจแสดงตัวอักษรขยะ!" @@ -8096,7 +8167,7 @@ msgstr "ปริมาตรของวัตถุเป็นศูนย์ #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "วัตถุจากไฟล์ %s มีขนาดเล็กเกินไป และอาจมีหน่วยเป็นเมตรหรือนิ้ว\n" " คุณต้องการขยายขนาดเป็นมิลลิเมตรหรือไม่?" @@ -8116,6 +8187,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "ตรวจพบวัตถุที่มีหลายส่วน" +# AI Translated +msgid "Matching textures to filaments" +msgstr "กำลังจับคู่พื้นผิวกับเส้นพลาสติก" + +# AI Translated +msgid "Texture Import Warning" +msgstr "คำเตือนการนำเข้าพื้นผิว" + msgid "Load these files as a single object with multiple parts?\n" msgstr "โหลดไฟล์เหล่านี้เป็นออบเจ็กต์เดียวที่มีหลายส่วนใช่ไหม\n" @@ -8326,6 +8405,22 @@ msgstr "" msgid "Sync now" msgstr "ซิงค์เลย" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "การนำเข้าพื้นผิวล้มเหลว โมเดลดูเหมือนจะมีข้อมูลพื้นผิว แต่ไม่สามารถดำเนินการนำเข้าพื้นผิวจนเสร็จสิ้นได้ โมเดลจะถูกนำเข้าเป็นเรขาคณิตเท่านั้น" + +# AI Translated +msgid "Applying texture colors..." +msgstr "กำลังใช้สีพื้นผิว..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "กำลังอัปเดตมุมมอง 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "ใช้สีพื้นผิวแล้ว" + msgid "You can keep the modified presets for the new project or discard them" msgstr "คุณสามารถเก็บค่าที่ตั้งไว้ล่วงหน้าที่แก้ไขแล้วไว้ในโปรเจ็กต์ใหม่หรือทิ้งก็ได้" @@ -8457,6 +8552,21 @@ msgstr "บันทึกไฟล์ที่สไลซ์เป็น:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "ไฟล์ %s ถูกส่งไปยังพื้นที่เก็บข้อมูลของเครื่องพิมพ์แล้ว และสามารถดูได้บนเครื่องพิมพ์" +# AI Translated +msgid "Publish 3MF file as:" +msgstr "เผยแพร่ไฟล์ 3MF เป็น:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"ส่งออกไฟล์ 3MF ที่เผยแพร่ล้มเหลว\n" +"โปรดตรวจสอบว่าโฟลเดอร์นั้นมีอยู่บนออนไลน์หรือมีโปรแกรมอื่นเปิดไฟล์นี้ค้างไว้หรือไม่" + +msgid "Publish" +msgstr "เผยแพร่" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "ไม่ได้ตั้งค่าประเภทหัวฉีด โปรดตั้งหัวฉีดแล้วลองอีกครั้ง" @@ -8667,9 +8777,6 @@ msgstr "ต้องการดำเนินการต่อหรือไ msgid "Language selection" msgstr "การเลือกภาษา" -msgid "Switching application language while some presets are modified." -msgstr "การสลับภาษาของแอปพลิเคชันในขณะที่มีการแก้ไขค่าที่ตั้งไว้บางส่วน" - msgid "Asia-Pacific" msgstr "เอเชียแปซิฟิก" @@ -8774,6 +8881,9 @@ msgstr "เส้นทางอินสแตนซ์ปัจจุบัน msgid "General" msgstr "ทั่วไป" +msgid "Language" +msgstr "ภาษา" + msgid "Metric" msgstr "เมตริก" @@ -9212,9 +9322,6 @@ msgstr "เมื่อเลื่อนแถบเลเยอร์ในต msgid "Dimmed layer brightness" msgstr "ความสว่างของเลเยอร์ที่หรี่" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9568,6 +9675,10 @@ msgstr "แจกันเกลียว" msgid "First layer filament sequence" msgstr "ลำดับเส้นพลาสติกชั้นแรก" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "รายการเส้นพลาสติกมีเส้นพลาสติกผสมอยู่ ลำดับเส้นพลาสติกที่กำหนดเองจะไม่มีผล" + msgid "By Layer" msgstr "โดยเลเยอร์" @@ -9595,9 +9706,6 @@ msgstr "ข้ามไปที่โมเดลเผยแพร่หน้ msgid "Note: The preparation may take several minutes. Please be patient." msgstr "หมายเหตุ: การเตรียมการอาจใช้เวลาหลายนาที กรุณาอดทน." -msgid "Publish" -msgstr "เผยแพร่" - msgid "Publish was canceled" msgstr "การเผยแพร่ถูกยกเลิก" @@ -9613,6 +9721,81 @@ msgstr "กำลังอัพโหลดข้อมูล" msgid "Jump to webpage" msgstr "ข้ามไปที่หน้าเว็บ" +# AI Translated +msgid "Material" +msgstr "วัสดุ" + +# AI Translated +msgid "Mixed filament" +msgstr "เส้นพลาสติกผสม" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "เส้นพลาสติกผสมบางรายการต้องอาศัยเส้นพลาสติกที่จะไม่ถูกเผยแพร่:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "เส้นพลาสติก %d (ผสม)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% ต้องใช้ %2% แต่ยังไม่ได้เปิดใช้" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% ต้องใช้ %2% แต่วัสดุของมันจะไม่ถูกเผยแพร่" + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "หากต้องการเผยแพร่เส้นพลาสติกผสม ให้เปิดใช้เส้นพลาสติกทุกเส้นที่ใช้ แล้วเลือกการเผยแพร่แบบเต็ม หรือทำตามข้อกำหนดชนิดของมัน" + +# AI Translated +msgid "Publish anyway" +msgstr "เผยแพร่ต่อไป" + +# AI Translated +msgid "Publish 3MF..." +msgstr "เผยแพร่ 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "เลือกว่าจะเผยแพร่การตั้งค่าใดในไฟล์ 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "วิกิการเผยแพร่ 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "คู่มือวีดีโอการเผยแพร่ 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "เส้นพลาสติกผสม - เผยแพร่ทั้งชุดเมื่อเลือก \"เปิดใช้\" ด้านบน" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "เผยแพร่เส้นพลาสติกผสมนี้ และเปิดใช้ + เผยแพร่แบบเต็มสำหรับเส้นพลาสติกที่เป็นส่วนประกอบ" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "เผยแพร่ช่องเส้นพลาสติกนี้ในไฟล์ 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "การเผยแพร่แบบเต็ม" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "ฝังเส้นพลาสติกทั้งหมดของช่องนี้ลงในไฟล์ 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "กรองรายการที่ไม่ได้เลือก" + #, c-format, boost-format msgid "Save %s as" msgstr "บันทึก %s เป็น" @@ -9630,6 +9813,10 @@ msgstr "คัดลอกค่าที่สืบทอดมาจากพ msgid "Detach from parent" msgstr "แยกออกจากพรีเซ็ตแม่" +# AI Translated +msgid "Save without parent" +msgstr "บันทึกโดยไม่มีพรีเซ็ตแม่" + # AI Translated msgid "Unique preset" msgstr "พรีเซ็ตอิสระ" @@ -10334,9 +10521,17 @@ msgstr "จำเป็นต้องใช้ Prime Tower ในการต msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "การเปิดใช้งานทั้งความสูง Z ที่แม่นยำและ Prime Tower อาจทำให้เกิดข้อผิดพลาดในการแบ่งส่วน คุณยังต้องการเปิดใช้งานความสูง Z ที่แม่นยำหรือไม่" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "ไทม์แลปส์แบบราบรื่นต้องมี Prime Tower ในทุกเลเยอร์ ซึ่งใช้ร่วมกับ \"ไม่มีชั้นกระจัดกระจาย\" ไม่ได้ จึงปิด \"ไม่มีชั้นกระจัดกระจาย\" แล้ว" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "จำเป็นต้องใช้ Prime Tower สำหรับโหมดไทม์แลปส์แบบราบรื่น หากไม่มี Prime Tower อาจเกิดตำหนิบนโมเดลได้ ต้องการเปิดใช้ Prime Tower หรือไม่?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"ไม่มีชั้นกระจัดกระจาย\" ใช้ร่วมกับไทม์แลปส์แบบราบรื่นไม่ได้ เพราะไทม์แลปส์แบบราบรื่นต้องมี Prime Tower ในทุกเลเยอร์ ไทม์แลปส์จึงถูกสลับเป็นโหมดแบบดั้งเดิม" + msgid "Still print by object?" msgstr "ยังคงพิมพ์ตามวัตถุใช่ไหม" @@ -10705,9 +10900,6 @@ msgstr "โปรไฟล์กระบวนการที่เข้าก msgid "Printable space" msgstr "พื้นที่ที่สามารถพิมพ์ได้" -msgid "Printer Agent" -msgstr "ตัวแทนเครื่องพิมพ์" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "เลือกการใช้งานตัวแทนเครือข่ายสำหรับการสื่อสารของเครื่องพิมพ์ ตัวแทนที่มีอยู่จะได้รับการลงทะเบียนเมื่อเริ่มต้น" @@ -10948,12 +11140,12 @@ msgid "No modifications need to be copied." msgstr "ไม่มีการแก้ไขที่ต้องคัดลอก" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "คัดลอกพารามิเตอร์" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "แก้ไขพารามิเตอร์ของ %s" # AI Translated @@ -11108,14 +11300,6 @@ msgstr "จำนวนชุดดันเส้น" msgid "Capabilities" msgstr "ความสามารถ" -# AI Translated -msgid "Left: " -msgstr "ซ้าย: " - -# AI Translated -msgid "Right: " -msgstr "ขวา: " - msgid "Show all presets (including incompatible)" msgstr "แสดงค่าที่ตั้งล่วงหน้าทั้งหมด (รวมทั้งเข้ากันไม่ได้)" @@ -11469,27 +11653,6 @@ msgstr "ปริมาณการไล่เส้นชิ่งสำหร msgid "Please choose the filament colour" msgstr "กรุณาเลือกสีเส้นพลาสติก" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Native Wayland liveview ต้องใช้ GStreamer GTK video sink โปรดติดตั้งปลั๊กอิน gtksink สำหรับ GStreamer จากนั้นรีสตาร์ท OrcaSlicer" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "ไม่สามารถเริ่มต้น sink วิดีโอ Wayland GStreamer ดั้งเดิมได้ โปรดตรวจสอบการติดตั้งปลั๊กอิน GStreamer GTK ของคุณ" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "งานนี้ต้องใช้ Windows Media Player! คุณต้องการเปิดใช้งาน 'Windows Media Player' สำหรับระบบปฏิบัติการของคุณหรือไม่?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource ยังไม่ได้รับการลงทะเบียนอย่างถูกต้องสำหรับการเล่นสื่อ! กดใช่เพื่อลงทะเบียนใหม่ คุณจะได้รับการเลื่อนตำแหน่งสองครั้ง" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "ไม่มีส่วนประกอบ BambuSource ที่ลงทะเบียนสำหรับการเล่นสื่อ! โปรดติดตั้ง OrcaSlicer ใหม่หรือขอความช่วยเหลือจากชุมชน" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "การใช้ BambuSource จากการติดตั้งอื่น การเล่นวิดีโออาจทำงานไม่ถูกต้อง! กดใช่เพื่อแก้ไข" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "ระบบของคุณไม่มีตัวแปลงสัญญาณ H.264 สำหรับ GStreamer ซึ่งจำเป็นในการเล่นวิดีโอ (ลองติดตั้งแพ็คเกจ gstreamer1.0-plugins-bad หรือ gstreamer1.0-libav จากนั้นรีสตาร์ท Orca Slicer หรือไม่)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "ตัวแทนระบบคลาวด์ไม่พร้อมใช้งาน โปรดรีสตาร์ท OrcaSlicer แล้วลองอีกครั้ง" @@ -11975,15 +12138,22 @@ msgstr "ยกเลิกการซ่อมแล้ว" msgid "Copying of file %1% to %2% failed: %3%" msgstr "การคัดลอกไฟล์ %1% ถึง %2% ล้มเหลว: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "กำลังดาวน์โหลดโปรไฟล์ผู้ขายใหม่: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "แพคเกจการกำหนดค่า: %1% อัปเดตเป็น %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "ดาวน์โหลดโปรไฟล์ผู้ขายล้มเหลว: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "โปรดตรวจสอบการเปลี่ยนแปลงที่ยังไม่ได้บันทึกก่อนอัปเดตการกำหนดค่า" -msgid "Configuration package: " -msgstr "แพคเกจการกำหนดค่า:" - -msgid " updated to " -msgstr "อัปเดตเป็น" - msgid "Open G-code file:" msgstr "เปิดไฟล์ G-code:" @@ -12041,11 +12211,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "รูปร่างอินพุตรองรับเฉพาะ Klipper, RepRapFirmware และ Marlin 2 เท่านั้น" -msgid "Grouping error: " -msgstr "ข้อผิดพลาดในการจัดกลุ่ม:" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "ข้อผิดพลาดในการจัดกลุ่ม: %1% ไม่สามารถวางในหัวฉีดซ้ายได้" -msgid " can not be placed in the " -msgstr "ไม่สามารถวางใน" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "ข้อผิดพลาดในการจัดกลุ่ม: %1% ไม่สามารถวางในหัวฉีดขวาได้" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12159,6 +12333,10 @@ msgstr "%1% อยู่ใกล้ผู้อื่นมากเกิน msgid "%1% is too tall, and collisions will be caused." msgstr "%1% สูงเกินไป และจะเกิดการชนกัน" +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "ตำแหน่งสัมพัทธ์ของโมเดลกับ Prime Tower ไม่เป็นไปตามข้อกำหนดของฟังก์ชัน \"ไม่มีชั้นกระจัดกระจาย\" โปรดปรับตำแหน่งสัมพัทธ์ของทั้งสอง ลดความสูงของโมเดล หรือปิด \"ไม่มีชั้นกระจัดกระจาย\"" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "อยู่ใกล้พื้นที่แยกมากเกินไป อาจเกิดการชนกันเมื่อพิมพ์" @@ -12193,6 +12371,10 @@ msgstr "หากคุณยังต้องการพิมพ์ คุ msgid "No extrusions under current settings." msgstr "ไม่มีการอัดขึ้นรูปภายใต้การตั้งค่าปัจจุบัน" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "มีการใช้เส้นพลาสติกผสมแบบเกรเดียนต์ แต่ 'ซับเลเยอร์สีผสม' ถูกปิดใช้งาน เกรเดียนต์จะไม่ถูกพิมพ์" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "ไม่รองรับโหมดไทม์แลปส์แบบราบรื่นเมื่อเปิดใช้งานลำดับ \"ตามวัตถุ\"" @@ -12229,6 +12411,10 @@ msgstr "คุณอาจต้องการลดขนาดแบบจำ msgid "Variable layer height is not supported with Organic supports." msgstr "ไม่รองรับความสูงของเลเยอร์ที่แปรผันได้ด้วยการรองรับแบบออร์แกนิก" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "เส้นพลาสติกของ Wipe Tower ไม่สามารถเป็นเส้นพลาสติกผสมได้" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "เส้นผ่านศูนย์กลางของหัวฉีดที่แตกต่างกันและเส้นผ่านศูนย์กลางของเส้นพลาสติกที่แตกต่างกันอาจทำงานได้ไม่ดีนักเมื่อเปิดใช้งาน Prime Tower ยังเป็นการทดลองอยู่มาก ดังนั้นโปรดดำเนินการด้วยความระมัดระวัง" @@ -12496,6 +12682,9 @@ msgstr "ใช้ 3MF แทน G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "เปิดใช้งานหากเครื่องพิมพ์รับไฟล์ 3MF เป็นงานพิมพ์ เมื่อเปิดใช้งาน OrcaSlicer จะส่งไฟล์ที่สไลซ์แล้วเป็น .gcode.3mf แทนไฟล์ .gcode ธรรมดา" +msgid "Printer Agent" +msgstr "ตัวแทนเครื่องพิมพ์" + msgid "Select the network agent implementation for printer communication." msgstr "เลือกการใช้งานตัวแทนเครือข่ายสำหรับการสื่อสารของเครื่องพิมพ์" @@ -12578,7 +12767,7 @@ msgstr "มม. หรือ %" msgid "Other layers" msgstr "ชั้นอื่นๆ" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "อุณหภูมิฐานพิมพ์สำหรับชั้นต่างๆ ยกเว้นอุณหภูมิเริ่มต้น ค่า 0 หมายความว่าเส้นพลาสติกไม่รองรับการพิมพ์บน Cool Plate SuperTack" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13541,6 +13730,10 @@ msgstr "จัดแนวเป็นเส้นตรง" msgid "Concentric" msgstr "ศูนย์กลาง" +# AI Translated +msgid "Spiral Inset" +msgstr "เกลียวเข้าใน" + msgid "Hilbert Curve" msgstr "ฮิลเบิร์ต เคิร์ฟ" @@ -13632,13 +13825,13 @@ msgstr "ลำดับการเติมพื้นผิวด้านบ # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"ทิศทางที่พื้นผิวด้านบนถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n" -"ออกด้านนอกเริ่มที่กึ่งกลางของพื้นผิว ดังนั้นวัสดุส่วนเกินจะถูกดันไปทางขอบซึ่งมองเห็นได้น้อยที่สุด เข้าด้านในเริ่มที่ขอบและจบด้วยเส้นโค้งแคบที่กึ่งกลาง\n" -"ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้" +"ทิศทางการเติมผิวด้านบนเมื่อใช้รูปแบบที่เริ่มจากศูนย์กลาง (ศูนย์กลาง, เกลียวเข้าใน, คอร์ดอาร์คิมีดีน, เกลียวแปดเหลี่ยม)\n" +"ออกด้านนอกจะเริ่มที่กึ่งกลางของผิว วัสดุส่วนเกินจึงถูกดันไปทางขอบซึ่งมองเห็นได้น้อยที่สุด เข้าด้านในจะเริ่มที่ขอบและจบด้วยเส้นโค้งแคบตรงกึ่งกลาง\n" +"ค่าเริ่มต้นใช้การเรียงตามเส้นทางที่สั้นที่สุด ซึ่งอาจเดินไปทางใดก็ได้" # AI Translated msgid "Bottom surface fill order" @@ -13646,13 +13839,13 @@ msgstr "ลำดับการเติมพื้นผิวด้านล # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"ทิศทางที่พื้นผิวด้านล่างถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n" -"เข้าด้านในเริ่มแต่ละพื้นผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยเพิ่มการยึดเกาะเลเยอร์แรกบนฐานพิมพ์ที่เส้นโค้งแคบตรงกลางอาจไม่ติด ออกด้านนอกเริ่มที่กึ่งกลาง โดยดันวัสดุส่วนเกินไปทางขอบ\n" -"ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้" +"ทิศทางการเติมผิวด้านล่างเมื่อใช้รูปแบบที่เริ่มจากศูนย์กลาง (ศูนย์กลาง, เกลียวเข้าใน, คอร์ดอาร์คิมีดีน, เกลียวแปดเหลี่ยม)\n" +"เข้าด้านในจะเริ่มแต่ละผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยให้ชั้นแรกยึดเกาะดีขึ้นบนฐานพิมพ์ที่เส้นโค้งแคบตรงกึ่งกลางอาจไม่ติด ออกด้านนอกจะเริ่มที่กึ่งกลางและดันวัสดุส่วนเกินไปทางขอบ\n" +"ค่าเริ่มต้นใช้การเรียงตามเส้นทางที่สั้นที่สุด ซึ่งอาจเดินไปทางใดก็ได้" msgid "Internal solid infill pattern" msgstr "รูปแบบไส้ในของแข็งภายใน" @@ -13755,6 +13948,14 @@ msgstr "ทวนเข็มนาฬิกา" msgid "Clockwise" msgstr "ตามเข็มนาฬิกา" +# AI Translated +msgid "Distance to rod" +msgstr "ระยะถึงแกน" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "ระยะในแนวนอนจากปลายหัวฉีดถึงขอบด้านไกลของแกน ใช้สำหรับหลีกเลี่ยงการชนในการพิมพ์ตามวัตถุ" + msgid "Height to rod" msgstr "ความสูงถึงก้าน" @@ -13941,6 +14142,8 @@ msgstr "เวลาเลเยอร์" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "พัดลมระบายความร้อนบางส่วนจะถูกเปิดใช้งานสำหรับเลเยอร์ที่เวลาโดยประมาณสั้นกว่าค่านี้ ความเร็วพัดลมจะถูกประมาณค่าระหว่างความเร็วพัดลมขั้นต่ำและสูงสุดตามเวลาการพิมพ์เลเยอร์" +# AI Translated +msgctxt "second" msgid "s" msgstr "วินาที" @@ -14248,6 +14451,62 @@ msgstr "วัสดุส่วนรองรับ" msgid "Support material is commonly used to print supports and support interfaces." msgstr "วัสดุรองรับมักใช้ในการพิมพ์ส่วนรองรับและอินเทอร์เฟซรองรับ" +# AI Translated +msgid "Is mixed filament" +msgstr "เป็นเส้นพลาสติกผสมหรือไม่" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "กำหนดว่าช่องเส้นพลาสติกนี้เป็นเส้นพลาสติกผสมที่ประกอบด้วยเส้นพลาสติกจริงหลายเส้นหรือไม่" + +# AI Translated +msgid "Mixed filament components" +msgstr "ส่วนประกอบของเส้นพลาสติกผสม" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "ลำดับของเส้นพลาสติกส่วนประกอบโดยเริ่มจาก 1 คั่นด้วยเครื่องหมายจุลภาค เช่น \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "สัดส่วนซับเลเยอร์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "ค่าสัดส่วนที่คั่นด้วยเครื่องหมายจุลภาคและรวมกันได้ 1.0 เช่น \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "เกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "เปิดใช้โหมดเกรเดียนต์ในแนวแกน Z สำหรับซับเลเยอร์ของเส้นพลาสติกผสม เมื่อเปิดใช้ สัดส่วนของซับเลเยอร์จะเปลี่ยนแปลงเชิงเส้นตามเลเยอร์" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "ช่วงเกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "สัดส่วนเริ่มต้นและสิ้นสุดของส่วนประกอบแรกในโหมดเกรเดียนต์ เป็นคู่ค่าที่คั่นด้วยเครื่องหมายจุลภาค เช่น \"0.10,0.90\" หมายถึง 10% ถึง 90%" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "เส้นโค้งเกรเดียนต์ของเส้นพลาสติกผสม" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "เส้นโค้งกำหนดเองสไตล์ Photoshop (ไม่บังคับ) ที่แมปความคืบหน้าในแกน Z กับสัดส่วนของส่วนประกอบแรก เข้ารหัสเป็นจุดควบคุมที่คั่นด้วยเครื่องหมายขีดตั้ง ในรูปแบบ \"x,y\" (รูปแบบเดิม) หรือ \"x,y,m_in,m_out\" เมื่อจำเป็นต้องกำหนดค่าแทนเจนต์เอง (ค่าว่างหรือ \"nan\" หมายถึงใช้ค่าเริ่มต้นของ PCHIP) x อยู่ในช่วง [0,1] ส่วน y จะถูกจำกัดให้อยู่ในช่วงสัดส่วนที่ตั้งค่าไว้ เช่น \"0,0.15|0.5,0.50|1,0.85\" หากเว้นว่างไว้ จะใช้ gradient_range แบบเชิงเส้นแทน" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "เกรเดียนต์แยกตามชิ้นส่วนของเส้นพลาสติกผสม" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "เมื่อเปิดใช้โหมดเกรเดียนต์ จะใช้เกรเดียนต์กับแต่ละชิ้นส่วนของการประกอบแยกกัน แทนที่จะถือว่าการประกอบทั้งหมดเป็นช่วง Z เดียว" + msgid "Filament printable" msgstr "พิมพ์เส้นพลาสติกได้" @@ -15502,8 +15761,9 @@ msgid "The allowed maximum output force of Y axis" msgstr "แรงขับออกสูงสุดที่อนุญาตของแกน Y" # AI Translated +msgctxt "Newton" msgid "N" -msgstr "N" +msgstr "นิวตัน" # AI Translated msgid "Bed mass of the Y axis" @@ -15514,8 +15774,9 @@ msgid "The machine bed mass load of Y axis" msgstr "ภาระมวลฐานของเครื่องบนแกน Y" # AI Translated +msgctxt "gram" msgid "g" -msgstr "g" +msgstr "กรัม" # AI Translated msgid "The allowed max printed mass" @@ -15827,8 +16088,8 @@ msgstr "จุดเริ่มต้นและจุดสิ้นสุด msgid "Reduce infill retraction" msgstr "ลดการดึงกลับในไส้ใน" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "อย่าถอยกลับเมื่อการเดินทางอยู่ภายในพื้นที่ที่ไส้ในเข้าไปทั้งหมด นั่นหมายความว่าไม่สามารถมองเห็นการรั่วไหลได้ วิธีนี้จะช่วยลดเวลาในการดึงกลับสำหรับโมเดลที่ซับซ้อนและประหยัดเวลาในการพิมพ์ แต่จะทำให้การแบ่งส่วนและการสร้าง G-code ช้าลง โปรดทราบว่า z-hop จะไม่ดำเนินการในพื้นที่ที่มีการข้ามการถอนกลับ" +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "อย่าถอยกลับเมื่อการเดินทางอยู่ภายในพื้นที่ที่ไส้ในเข้าไปทั้งหมด นั่นหมายความว่าไม่สามารถมองเห็นการรั่วไหลได้ วิธีนี้จะช่วยลดเวลาในการดึงกลับสำหรับโมเดลที่ซับซ้อนและประหยัดเวลาในการพิมพ์ แต่จะทำให้การแบ่งส่วนและการสร้าง G-code ช้าลง โปรดทราบว่า Z-hop จะไม่ดำเนินการในพื้นที่ที่มีการข้ามการถอนกลับ" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "ตัวเลือกนี้จะทำให้อุณหภูมิของชุดดันเส้นที่ไม่ใช้งานลดลงเพื่อป้องกันการไหลซึม" @@ -15864,6 +16125,20 @@ msgstr "ตรวจจับผนังส่วนยื่น" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "ตรวจจับเปอร์เซ็นต์ระยะยื่นที่สัมพันธ์กับความกว้างของเส้น และใช้ความเร็วที่แตกต่างกันในการพิมพ์ สำหรับระยะยื่น 100%% จะใช้ความเร็วบริดจ์" +# AI Translated +msgid "Print unsupported walls last" +msgstr "พิมพ์ผนังที่ไม่มีส่วนรองรับเป็นลำดับสุดท้าย" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"รอบผนังที่ลอยอยู่กลางอากาศทั้งวงจะถูกพิมพ์ก็ต่อเมื่อมีสิ่งที่รองรับมันได้แล้ว:\n" +"โดยจะถูกอัดขึ้นรูปหลังผนังอื่น ๆ ของเกาะเดียวกัน เริ่มจากวงในสุด ไม่ว่าลำดับผนังจะเป็นแบบใด\n" +"รอบที่มีเพียงสะพานของเลเยอร์นี้เท่านั้นที่ยึดไว้ได้จะรอจนกว่าสะพานเหล่านั้นจะถูกพิมพ์ ส่วนรอบที่วิ่งขนานไปกับผนังที่มีส่วนรองรับจะยังคงอยู่ก่อนไส้ใน ซึ่งต้องใช้มันเป็นจุดยึด" + msgid "Outer walls" msgstr "ผนังชั้นนอก" @@ -15997,7 +16272,7 @@ msgstr "ปริมาณการดึงกลับหลังเช็ด # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "ความยาวของการดึงกลับอย่างเร็วหลังเช็ดหัว สัมพันธ์กับความยาวการดึงกลับ\n" @@ -16044,7 +16319,7 @@ msgstr "เมื่อการดึงกลับทำงานก่อน msgid "Z-hop height" msgstr "ความสูงยกแกน Z" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "เมื่อใดก็ตามที่การดึงกลับเสร็จสิ้น หัวฉีดจะถูกยกขึ้นเล็กน้อยเพื่อสร้างระยะห่างระหว่างหัวฉีดและงานพิมพ์ ป้องกันไม่ให้หัวฉีดชนกับงานพิมพ์ขณะเคลื่อนตัว การใช้เส้นเกลียวเพื่อยก Z สามารถป้องกันการร้อยสายได้" msgid "Z-hop lower boundary" @@ -16301,6 +16576,39 @@ msgstr "เช็ดบนลูป" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "เพื่อลดการมองเห็นรอยต่อในการอัดรีดแบบวงปิด จะมีการเคลื่อนตัวเข้าด้านในเล็กน้อยก่อนที่ชุดดันเส้นจะออกจากวง" +# AI Translated +msgid "Wipe inward" +msgstr "เช็ดเข้าด้านใน" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"ใช้กับผนังด้านนอกเท่านั้น รวมถึงขอบรู โดยจะขยับหัวฉีดที่ร้อนเข้าหาผนังด้านในที่พิมพ์ไปแล้วระหว่างการเช็ด เพื่อลดการให้ความร้อนซ้ำแก่พลาสติกที่เพิ่งพิมพ์และลดรอยตะเข็บ\n" +"\n" +"มีประโยชน์เป็นพิเศษที่ความสูงเลเยอร์ต่ำกว่า 0.1 มม. ซึ่งรอยเช็ดจะเห็นได้ชัดกว่า\n" +"\n" +"จะใช้การเช็ดแบบปกติหากยังไม่มีผนังด้านในที่อยู่ติดกันถูกพิมพ์ (พื้นที่ผนังเดี่ยว หรือลำดับผนังแบบด้านนอก/ด้านใน) หรือหากหาเส้นทางเข้าด้านในที่มีส่วนรองรับไม่ได้ เช่น ที่มุมแคบหรือช่องว่างของรอยตะเข็บ" + +# AI Translated +msgid "Wipe inward distance" +msgstr "ระยะเช็ดเข้าด้านใน" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"ระยะที่เส้นทางการเช็ดถูกเลื่อนออกจากเส้นรอบรูปด้านนอก ระบุเป็นมิลลิเมตรหรือเป็นเปอร์เซ็นต์ของความกว้างการอัดขึ้นรูปจริงของผนังด้านนอก\n" +"\n" +"ตัวอย่างเช่น 50% จะเลื่อนเส้นทางไปครึ่งหนึ่งของความกว้างผนังด้านนอก ระยะเลื่อนที่มีผลจริงถูกจำกัดทั้งโดยความกว้างจริงของผนังด้านนอกและโดยช่องว่างที่มีถึงผนังที่อยู่ติดกัน ดังนั้นค่าที่เกิน 100% หรือระยะสัมบูรณ์ที่เทียบเท่าจะไม่ให้ผลเพิ่มเติม ตั้งเป็น 0 เพื่อปิดการเลื่อน" + msgid "Wipe before external loop" msgstr "เช็ดก่อนวนรอบภายนอก" @@ -16562,8 +16870,9 @@ msgstr "รับเครื่องมือใหม่โดยไม่ร msgid "No sparse layers (beta)" msgstr "ไม่มีชั้นกระจัดกระจาย (เบต้า)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "หากเปิดใช้งาน Wipe Tower จะไม่ถูกพิมพ์บนเลเยอร์โดยไม่มีการเปลี่ยนแปลงเครื่องมือ บนเลเยอร์ที่มีการเปลี่ยนเครื่องมือ ชุดดันเส้นจะเคลื่อนลงด้านล่างเพื่อพิมพ์ Wipe Tower ผู้ใช้มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าไม่มีการชนกันกับงานพิมพ์" +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "หากเปิดใช้ Wipe Tower จะไม่ถูกพิมพ์ในเลเยอร์ที่ไม่มีการเปลี่ยนเครื่องมือ ในเลเยอร์ที่มีการเปลี่ยนเครื่องมือ ชุดดันเส้นจะเคลื่อนลงไปพิมพ์ Wipe Tower ทำให้หอคอยอยู่ต่ำกว่าโมเดลและหัวพิมพ์ต้องยื่นลงไปหามัน การจัดวางที่จะทำให้ชนกับวัตถุที่พิมพ์ไปแล้วจะถูกปฏิเสธ ไม่มีผลเมื่อใช้ไทม์แลปส์แบบราบรื่นหรือการตรวจจับการจับตัวเป็นก้อนที่หัวฉีด ซึ่งต้องมีหอคอยในทุกเลเยอร์" msgid "Prime all printing extruders" msgstr "ใช้ชุดดันเส้นการพิมพ์ทั้งหมด" @@ -16589,6 +16898,34 @@ msgstr "" msgid "Cyclic" msgstr "Cyclic" +# AI Translated +msgid "Cyclic order" +msgstr "ลำดับแบบวนรอบ" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"ลำดับเส้นพลาสติกที่กำหนดเอง ซึ่งใช้โดยการจัดลำดับการเปลี่ยนเครื่องมือแบบวนรอบ ระบุเป็นหมายเลขเส้นพลาสติกคั่นด้วยเครื่องหมายจุลภาค (เช่น \"3,2,1,4\")\n" +"แต่ละเลเยอร์จะพิมพ์เส้นพลาสติกของตนตามลำดับนี้ ส่วนเส้นพลาสติกที่ไม่ได้ระบุไว้จะถูกพิมพ์เป็นลำดับสุดท้ายโดยเรียงจากน้อยไปมาก\n" +"เว้นว่างไว้เพื่อวนใช้เส้นพลาสติกโดยเรียงจากน้อยไปมาก" + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "ใช้ลำดับแบบวนรอบกับชั้นแรก" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"ใช้ลำดับการเปลี่ยนเครื่องมือแบบวนรอบกับชั้นแรกด้วย\n" +"โดยค่าเริ่มต้นจะปิดอยู่ เพราะชั้นแรกจะถูกจัดลำดับเพื่อการยึดเกาะฐานพิมพ์ที่ดีที่สุดแทน กล่าวคือ เส้นพลาสติกที่พิมพ์รายละเอียดเล็กและเปราะบางของชั้นแรกจะถูกพิมพ์เป็นลำดับสุดท้าย การเปลี่ยนเครื่องมือและการเดินหัวเปล่าที่ตามมาจึงมีโอกาสน้อยลงที่จะกระแทกชิ้นส่วนที่ยึดเกาะไม่แน่นเหล่านั้นให้หลุด ลำดับของชั้นแรกนี้ยังเคารพลำดับเส้นพลาสติกของชั้นแรกที่กำหนดเองด้วย หากมีการตั้งค่าไว้ ข้อดีของลำดับแบบวนรอบ (การเปลี่ยนเครื่องมือที่เพิ่มขึ้นทำให้แต่ละเลเยอร์มีเวลาเย็นตัวมากขึ้น) ไม่ใช้กับชั้นแรก ซึ่งพิมพ์อย่างช้าและร้อนเพื่อการยึดเกาะ\n" +"เปิดใช้สิ่งนี้เฉพาะเมื่อคุณต้องการลำดับเครื่องมือที่เหมือนกันทุกประการในทุกเลเยอร์รวมถึงชั้นแรก โดยยอมแลกกับการปรับแต่งการยึดเกาะดังกล่าว" + msgid "Slice gap closing radius" msgstr "รัศมีการปิดช่องว่างของ Slice" @@ -16598,9 +16935,6 @@ msgstr "รอยแตกร้าวที่มีขนาดเล็กก msgid "Slicing Mode" msgstr "โหมดการแบ่งส่วน" -msgid "Other" -msgstr "อื่นๆ" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "ใช้ \"เลขคู่\" สำหรับโมเดลเครื่องบิน 3DLabPrint ใช้ \"ปิดรู\" เพื่อปิดรูทั้งหมดในโมเดล" @@ -17088,6 +17422,14 @@ msgstr "" "\n" "การตั้งค่าในจำนวนการถอนก่อนการล้างการตั้งค่าด้านล่างจะทำการถอนส่วนที่เกินก่อนการล้าง มิฉะนั้นจะดำเนินการหลังจากนั้น" +# AI Translated +msgid "Mixed color sublayer" +msgstr "ซับเลเยอร์สีผสม" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "เปิดใช้การแบ่งซับเลเยอร์สีผสม เมื่อเปิดใช้ เลเยอร์ที่มีเส้นพลาสติกสีผสมจะถูกแบ่งเป็นซับเลเยอร์เพื่อให้เกิดเอฟเฟกต์การผสมสี" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe Tower สามารถใช้เพื่อทำความสะอาดสิ่งตกค้างบนหัวฉีด และทำให้แรงดันในห้องภายในหัวฉีดคงที่ เพื่อหลีกเลี่ยงข้อบกพร่องในลักษณะที่ปรากฏเมื่อพิมพ์วัตถุ" @@ -17594,6 +17936,14 @@ msgstr "ไม่มีเช็ค" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "อย่าทำการตรวจสอบความถูกต้องใดๆ เช่น การตรวจสอบข้อขัดแย้งของเส้นทาง G-code" +# AI Translated +msgid "Strict mode" +msgstr "โหมดเข้มงวด" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "ออกจากโปรแกรมด้วยค่าที่ไม่ใช่ศูนย์เมื่อการสไลซ์เกิดคำเตือนที่ไม่ร้ายแรง ซึ่งปกติจะถูกบันทึกลงล็อกเท่านั้น เช่น โมเดลที่ต้องการส่วนรองรับขณะที่ปิดส่วนรองรับไว้ ใช้สิ่งนี้ใน CI หรือไปป์ไลน์ที่ทำงานด้วยสคริปต์ซึ่งต้องไม่ส่งมอบผลการสไลซ์ที่เสียหายแบบสังเกตยาก คำเตือนแต่ละรายการดังกล่าวยังถูกแสดงพร้อมคลาสที่คงที่ในอาร์เรย์ `warnings` ของ result.json ซึ่งเขียนเฉพาะบน Linux เท่านั้น ใช้ร่วมกับ --no-check ไม่ได้ เพราะตัวเลือกนั้นข้ามการตรวจสอบส่วนรองรับ" + msgid "Normative check" msgstr "การตรวจสอบเชิงบรรทัดฐาน" @@ -17606,11 +17956,28 @@ msgstr "ข้อมูลรุ่นเอาท์พุต" msgid "This outputs the model’s information." msgstr "ส่งออกข้อมูลของโมเดล" +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "ตรวจสอบเมช (JSON ไปยัง stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "พิมพ์สรุป JSON ของแต่ละวัตถุที่โหลดไว้ไปยัง stdout แล้วออกจากโปรแกรม: กล่องขอบเขตของวัตถุและหน้าของเปลือกนูนที่วัตถุสามารถวางลงได้ พร้อมเวกเตอร์ตั้งฉาก พื้นที่ และจุดศูนย์กลางของหน้าเหล่านั้น หน้าเหล่านี้คือหน้าที่ตัวเลือก --ground-* เลือกใช้ เป็นทางเลือกที่เครื่องอ่านได้แทน --info" + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "ตรวจสอบการระบาย (JSON ไปยัง stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "พิมพ์สรุป JSON แบบมีโครงสร้างของทุกเลเยอร์ที่ระบายไว้ (ส่วนรองรับ, รอยตะเข็บ, สี MMU, ผิวฟัซซี) ซึ่งถูกเก็บไว้ในโมเดลที่โหลดแล้ว — จำนวนหน้า พื้นที่ผิว และกล่องขอบเขตในพิกัดของเมชในแต่ละสถานะ — แล้วออกจากโปรแกรม เป็นทางเลือกที่เครื่องอ่านได้แทนการเปิดเครื่องมือระบายในหน้าจอ" + msgid "Export Settings" msgstr "ส่งออกการตั้งค่า" -msgid "This exports settings to a file." -msgstr "ส่งออกการตั้งค่าไปยังไฟล์" +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "คำสั่งนี้ส่งออกการตั้งค่าไปยังไฟล์ ใช้ - เพื่อเขียนไปยัง stdout" msgid "Send progress to pipe" msgstr "ส่งความคืบหน้าไปป์" @@ -17666,6 +18033,30 @@ msgstr "หมุนรอบ Y" msgid "Rotation angle around the Y axis in degrees." msgstr "มุมการหมุนรอบแกน Y มีหน่วยเป็นองศา" +# AI Translated +msgid "Ground largest face" +msgstr "วางบนหน้าที่ใหญ่ที่สุด" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "วางแต่ละวัตถุลงบนหน้าที่ใหญ่ที่สุดของเปลือกนูน แล้วปล่อยลงบนฐานพิมพ์ ในบรรดาหน้าที่ใหญ่เท่ากัน จะคงหน้าที่หันลงอยู่แล้วไว้ วัตถุที่ไม่มีหน้าใหญ่พอให้วางได้จะถูกปล่อยไว้ตามเดิม การแปลงรูปทำงานตามลำดับในบรรทัดคำสั่ง การหมุนที่ระบุไว้ก่อนตัวเลือกนี้จึงถูกนำมาใช้ด้วย --orient 1 ทำงานหลังการแปลงรูปทั้งหมดและจะแทนที่การจัดวางแนว" + +# AI Translated +msgid "Ground face by normal" +msgstr "วางบนหน้าตามเวกเตอร์ตั้งฉาก" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "วางแต่ละวัตถุลงบนหน้าของเปลือกนูนที่มีเวกเตอร์ตั้งฉากด้านนอกใกล้เคียงทิศทาง NX,NY,NZ มากที่สุด แล้วปล่อยลงบนฐานพิมพ์ ทิศทางนี้อยู่ในพิกัดของวัตถุ ซึ่งรวมการหมุนที่ระบุไว้ก่อนตัวเลือกนี้ และตรงกับแกนของฐานพิมพ์ เว้นแต่ไฟล์นำเข้าจะหมุนวัตถุไว้ ตัวอย่างเช่น 1,0,0 จะตั้งวัตถุขึ้นบนด้าน +X --orient 1 ทำงานหลังการแปลงรูปทั้งหมดและจะแทนที่การจัดวางแนว" + +# AI Translated +msgid "Ground face at point" +msgstr "วางบนหน้าที่จุดที่ระบุ" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "วางแต่ละวัตถุลงบนหน้าของเปลือกนูนที่มีจุด X,Y,Z อยู่ แล้วปล่อยลงบนฐานพิมพ์ จุดนี้อยู่ในพิกัดของวัตถุ ซึ่งรวมการหมุนที่ระบุไว้ก่อนตัวเลือกนี้ โดย --inspect-mesh รายงานจุดศูนย์กลางของหน้าในพิกัดเดียวกันนี้ วัตถุที่ไม่มีหน้าดังกล่าวจะถูกปล่อยไว้ตามเดิม และการทำงานจะล้มเหลวหากไม่มีวัตถุใดมีหน้าเช่นนั้นเลย --orient 1 ทำงานหลังการแปลงรูปทั้งหมดและจะแทนที่การจัดวางแนว" + msgid "Scale the model by a float factor." msgstr "ปรับขนาดโมเดลตามปัจจัยโฟลต" @@ -18171,6 +18562,10 @@ msgstr "การประสานไฟล์โมเดลล้มเหล msgid "The supplied file couldn't be read because it's empty." msgstr "ไม่สามารถอ่านไฟล์ที่ให้มาได้เนื่องจากไฟล์ว่างเปล่า" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "รูปแบบไฟล์ไม่รองรับ จึงไม่สามารถอ่านข้อมูลได้" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "รูปแบบไฟล์ที่ไม่รู้จัก ไฟล์อินพุตต้องมีนามสกุล .stl, .obj, .amf(.xml)" @@ -19632,19 +20027,19 @@ msgstr "แสดงเฉพาะชื่อเครื่องพิมพ msgid "Only display the filament names with changes to filament presets." msgstr "แสดงเฉพาะชื่อเส้นพลาสติกที่มีการเปลี่ยนแปลงการตั้งค่าล่วงหน้าของเส้นพลาสติก" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "เฉพาะชื่อเครื่องพิมพ์ที่มีการตั้งค่าเครื่องพิมพ์ล่วงหน้าของผู้ใช้เท่านั้นที่จะแสดง และการตั้งค่าล่วงหน้าแต่ละรายการที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "เฉพาะชื่อเส้นพลาสติกที่มีการตั้งค่าล่วงหน้าของเส้นพลาสติกผู้ใช้เท่านั้นที่จะถูกแสดง \n" "และค่าฟิลาเมนต์ของผู้ใช้ทั้งหมดที่กำหนดไว้ล่วงหน้าในแต่ละชื่อฟิลาเมนต์ที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "เฉพาะชื่อเครื่องพิมพ์ที่มีการตั้งค่าล่วงหน้าของกระบวนการที่เปลี่ยนแปลงเท่านั้นที่จะปรากฏขึ้น \n" "และกระบวนการของผู้ใช้ที่ตั้งไว้ล่วงหน้าในชื่อเครื่องพิมพ์แต่ละเครื่องที่คุณเลือกจะถูกส่งออกเป็นไฟล์ ZIP" @@ -19885,7 +20280,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "เราต้องการข้อมูลเพื่อวินิจฉัยแหล่งที่มาของปัญหา ตรวจสอบหน้า wiki สำหรับคำแนะนำโดยละเอียด" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "ปุ่ม Pack จะรวบรวมไฟล์โปรเจกต์และบันทึกของเซสชันปัจจุบันลงในไฟล์ zip" # AI Translated @@ -19941,7 +20336,7 @@ msgid "Stored logs" msgstr "บันทึกที่จัดเก็บ" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "รวมบันทึกที่จัดเก็บทั้งหมดลงในไฟล์ zip" # AI Translated @@ -20021,7 +20416,7 @@ msgstr "ไม่พบประเภทเครื่องพิมพ์ msgid "Authorizing..." msgstr "กำลังอนุญาต..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "ข้อผิดพลาด ไม่สามารถรับโทเคน API สำหรับการอนุญาตได้" msgid "Could not parse server response." @@ -20473,8 +20868,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "เปิดใช้การกำหนดเส้นพลาสติกอัจฉริยะ: กำหนดเส้นพลาสติกหนึ่งชนิดให้กับหัวฉีดหลายตัวเพื่อประหยัดสูงสุด" # AI Translated -msgid "Fila Saving" -msgstr "การประหยัดเส้นพลาสติก" +msgid "File Saving" +msgstr "การบันทึกไฟล์" msgid "Don't remind me again" msgstr "ไม่ต้องเตือนฉันอีก" @@ -20760,6 +21155,18 @@ msgstr "การทำงานนี้ไม่สามารถย้อน msgid "Skipping objects." msgstr "ข้ามวัตถุ" +# AI Translated +msgid "Material Ratio" +msgstr "สัดส่วนวัสดุ" + +# AI Translated +msgid "Model Height" +msgstr "ความสูงโมเดล" + +# AI Translated +msgid "Ratio" +msgstr "สัดส่วน" + msgid "Select Filament" msgstr "เลือกเส้นพลาสติก" @@ -20839,6 +21246,9 @@ msgstr "เริ่มใหม่ตอนนี้" msgid "NO RAMMING AT ALL" msgstr "ไม่มีการกระแทกเลย" +msgid "s" +msgstr "วินาที" + msgid "Volumetric speed" msgstr "ความเร็วปริมาตร" @@ -21013,12 +21423,14 @@ msgid "Drying-Dehumidifying" msgstr "อบแห้ง-ลดความชื้น" # AI Translated -msgid " maximum drying temperature is " -msgstr " อุณหภูมิอบแห้งสูงสุดคือ " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "อุณหภูมิอบแห้งสูงสุดของ %s คือ %d°C" # AI Translated -msgid " minimum drying temperature is " -msgstr " อุณหภูมิอบแห้งต่ำสุดคือ " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "อุณหภูมิอบแห้งต่ำสุดของ %s คือ %d°C" # AI Translated msgid "This filament may not be completely dried." @@ -21463,6 +21875,130 @@ msgstr "" "หลีกเลี่ยงการบิดเบี้ยว\n" "คุณรู้หรือไม่ว่าเมื่อพิมพ์วัสดุที่มีแนวโน้มที่จะเกิดการบิดเบี้ยว เช่น ABS การเพิ่มอุณหภูมิฐานพิมพ์อย่างเหมาะสมสามารถลดความน่าจะเป็นของการบิดเบี้ยวได้" +#~ msgid "Other" +#~ msgstr "อื่นๆ" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "ซ้าย: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "ขวา: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "อุณหภูมิสูงสุดต้องไม่เกิน " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "อุณหภูมิต่ำสุดไม่ควรต่ำกว่า" + +#~ msgid "up to" +#~ msgstr "สูงสุด" + +#~ msgid "above" +#~ msgstr "ข้างบน" + +#~ msgid "from" +#~ msgstr "จาก" + +#~ msgid "Configuration package: " +#~ msgstr "แพคเกจการกำหนดค่า:" + +#~ msgid " updated to " +#~ msgstr "อัปเดตเป็น" + +#~ msgid "Grouping error: " +#~ msgstr "ข้อผิดพลาดในการจัดกลุ่ม:" + +#~ msgid " can not be placed in the " +#~ msgstr "ไม่สามารถวางใน" + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " อุณหภูมิอบแห้งสูงสุดคือ " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " อุณหภูมิอบแห้งต่ำสุดคือ " + +# AI Translated +#~ msgid "needs" +#~ msgstr "ต้องการ" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "ไม่ได้เปิดใช้" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "วัสดุยังไม่ถูกเผยแพร่" + +#~ msgid "Select the language" +#~ msgstr "เลือกภาษา" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "เลือกปลั๊กอิน" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "ทิศทางที่พื้นผิวด้านบนถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n" +#~ "ออกด้านนอกเริ่มที่กึ่งกลางของพื้นผิว ดังนั้นวัสดุส่วนเกินจะถูกดันไปทางขอบซึ่งมองเห็นได้น้อยที่สุด เข้าด้านในเริ่มที่ขอบและจบด้วยเส้นโค้งแคบที่กึ่งกลาง\n" +#~ "ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้" + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "ทิศทางที่พื้นผิวด้านล่างถูกเติมเมื่อใช้ลวดลายแบบอิงจุดศูนย์กลาง (Concentric, Archimedean Chords, Octagram Spiral)\n" +#~ "เข้าด้านในเริ่มแต่ละพื้นผิวด้วยเส้นโค้งด้านนอกที่กว้างกว่า ซึ่งช่วยเพิ่มการยึดเกาะเลเยอร์แรกบนฐานพิมพ์ที่เส้นโค้งแคบตรงกลางอาจไม่ติด ออกด้านนอกเริ่มที่กึ่งกลาง โดยดันวัสดุส่วนเกินไปทางขอบ\n" +#~ "ค่าเริ่มต้นใช้การเรียงลำดับเส้นทางสั้นที่สุด ซึ่งอาจทำงานในทิศทางใดก็ได้" + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "หากเปิดใช้งาน Wipe Tower จะไม่ถูกพิมพ์บนเลเยอร์โดยไม่มีการเปลี่ยนแปลงเครื่องมือ บนเลเยอร์ที่มีการเปลี่ยนเครื่องมือ ชุดดันเส้นจะเคลื่อนลงด้านล่างเพื่อพิมพ์ Wipe Tower ผู้ใช้มีหน้าที่รับผิดชอบในการตรวจสอบให้แน่ใจว่าไม่มีการชนกันกับงานพิมพ์" + +#~ msgid "This exports settings to a file." +#~ msgstr "ส่งออกการตั้งค่าไปยังไฟล์" + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Native Wayland liveview ต้องใช้ GStreamer GTK video sink โปรดติดตั้งปลั๊กอิน gtksink สำหรับ GStreamer จากนั้นรีสตาร์ท OrcaSlicer" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "ไม่สามารถเริ่มต้น sink วิดีโอ Wayland GStreamer ดั้งเดิมได้ โปรดตรวจสอบการติดตั้งปลั๊กอิน GStreamer GTK ของคุณ" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "งานนี้ต้องใช้ Windows Media Player! คุณต้องการเปิดใช้งาน 'Windows Media Player' สำหรับระบบปฏิบัติการของคุณหรือไม่?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource ยังไม่ได้รับการลงทะเบียนอย่างถูกต้องสำหรับการเล่นสื่อ! กดใช่เพื่อลงทะเบียนใหม่ คุณจะได้รับการเลื่อนตำแหน่งสองครั้ง" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "ไม่มีส่วนประกอบ BambuSource ที่ลงทะเบียนสำหรับการเล่นสื่อ! โปรดติดตั้ง OrcaSlicer ใหม่หรือขอความช่วยเหลือจากชุมชน" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "การใช้ BambuSource จากการติดตั้งอื่น การเล่นวิดีโออาจทำงานไม่ถูกต้อง! กดใช่เพื่อแก้ไข" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "ระบบของคุณไม่มีตัวแปลงสัญญาณ H.264 สำหรับ GStreamer ซึ่งจำเป็นในการเล่นวิดีโอ (ลองติดตั้งแพ็คเกจ gstreamer1.0-plugins-bad หรือ gstreamer1.0-libav จากนั้นรีสตาร์ท Orca Slicer หรือไม่)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "การประหยัดเส้นพลาสติก" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index c3deff8bd8..39ca72ae0f 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-08-21 23:18+0300\n" "Last-Translator: GlauTech\n" "Language-Team: \n" @@ -2480,15 +2480,6 @@ msgstr "Kullanılabilir bir güncelleme var. Güncellemek için ön ayar paketi msgid "%s has been removed." msgstr "%s kaldırıldı." -msgid "Switching application language" -msgstr "Uygulama dilini değiştirme" - -msgid "Select the language" -msgstr "Dili seçin" - -msgid "Language" -msgstr "Dil" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2969,6 +2960,10 @@ msgstr "Düzenle" msgid "Merge with" msgstr "Şununla birleştir" +# AI Translated +msgid "Decompose Color" +msgstr "Rengi ayrıştır" + msgid "Delete this filament" msgstr "Bu filamenti sil" @@ -3269,6 +3264,10 @@ msgstr "Birleştir" msgid "Merge parts to an object" msgstr "Parçaları bir nesnede birleştir" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Değişken katman yüksekliğinin karışık renk alt katmanı ile birlikte kullanılması renk karışımının kalitesini düşürebilir." + # AI Translated msgid "Add layers" msgstr "Katman ekle" @@ -3728,11 +3727,15 @@ msgstr "Geçerli filamenti Filament Track Switch'te geri çek" msgid "Switch track at Filament Track Switch" msgstr "Filament Track Switch'te hattı değiştir" -msgid "The maximum temperature cannot exceed " -msgstr "Maksimum sıcaklık şu değeri aşamaz: " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Maksimum sıcaklık %d değerini aşamaz" -msgid "The minmum temperature should not be less than " -msgstr "Minimum sıcaklık şu değerden az olamaz: " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Minimum sıcaklık %d değerinden az olamaz" # AI Translated msgid "Type to filter..." @@ -4635,6 +4638,15 @@ msgstr "" "Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Belki SD kart yazma kilitlidir.\n" "Hata mesajı: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Geçici G-code'un çıktı G-code'a kopyalanması başarısız oldu.\n" +"Hata mesajı: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Geçici G-code'un çıkış G-code'a kopyalanması başarısız oldu. Hedef cihazda sorun olabilir, lütfen tekrar dışa aktarmayı veya farklı bir cihaz kullanmayı deneyin. Bozuk çıktı G-code %1%.tmp konumunda." @@ -4847,7 +4859,7 @@ msgstr "" "\n" "Değer 0'a sıfırlanacaktır." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Alternatif ekstra duvar, dikey kabuk kalınlığının Tümü olarak ayarlandığından emin olunduğunda iyi çalışmaz." msgid "" @@ -4893,7 +4905,7 @@ msgstr "" "HAYIR - Bağımsız Destek Katmanı Yüksekliğini Koruyun" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height, layer_height değerinden küçük olmalıdır.\n" @@ -4901,7 +4913,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Kilit derinliği cilt derinliğinden daha küçük olmalıdır.\n" @@ -4941,6 +4953,10 @@ msgstr "" "Evet - Bu ayarları değiştirin ve spiral modunu otomatik olarak etkinleştirin\n" "Hayır - Bu sefer spiral modunu kullanmaktan vazgeçin" +# AI Translated +msgid "N/A" +msgstr "Yok" + msgid "Printing" msgstr "Baskı" @@ -5371,14 +5387,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Değer %s aralık dışında. Geçerli aralık %d ile %d arasındadır." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%% mi yoksa %s %s mi?\n" -"%s%% için EVET,\n" -"%s %s için HAYIR." +msgid "Is it %s%% or %s %s?" +msgstr "%s%% mi yoksa %s %s mi?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5400,30 +5413,22 @@ msgstr "Geçersiz kalıp. N, N#K veya giriş başına isteğe bağlı #K ile vir msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Geçersiz format. Beklenen vektör formatı: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "Yok" - # AI Translated msgid "System agents" msgstr "Sistem aracıları" -# AI Translated -msgid "No plugin selected" -msgstr "Eklenti seçilmedi" - # AI Translated msgid "Add plugin" msgstr "Eklenti ekle" -# AI Translated -msgid "Select plugin" -msgstr "Eklenti seç" - # AI Translated msgid "Remove plugin" msgstr "Eklentiyi kaldır" +# AI Translated +msgid "No plugin selected" +msgstr "Eklenti seçilmedi" + # AI Translated msgid "Configure" msgstr "Yapılandır" @@ -5681,14 +5686,20 @@ msgstr "Optimum'a Ayarla" msgid "Regroup filament" msgstr "Filamenti yeniden gruplandır" -msgid "up to" -msgstr "kadar" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "%1% mm'ye kadar" -msgid "above" -msgstr "üstünde" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "%1% mm üzerinde" -msgid "from" -msgstr "itibaren" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "%1% mm ile %2% mm arasında" msgid "Usage" msgstr "Kullan" @@ -6051,7 +6062,7 @@ msgstr "Hacim:" msgid "Size:" msgstr "Boyut:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "%d katmanında G-code yollarında çakışmalar bulundu, Z = %.2lfmm. Lütfen çakışan nesneleri daha uzağa ayırın (%s <-> %s)." @@ -6364,16 +6375,24 @@ msgstr "Projeyi farklı kaydet" msgid "Save current project as" msgstr "Mevcut projeyi farklı kaydet" +# AI Translated +msgid "Publish 3MF" +msgstr "3MF Yayınla" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Seçilen ayarların gömülü olduğu bir 3MF dosyası dışa aktar" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "3MF/STL/STEP/SVG/OBJ/AMF'yi içe aktar" msgid "Load a model" msgstr "Model yükle" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Zip Arşivini İçe Aktar" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Zip arşivindeki modelleri yükle" msgid "Import Configs" @@ -7639,6 +7658,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Alt" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Bu ayar bir eklenti yeteneği türü belirtmiyor." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Bu ayar tanınmayan bir eklenti yeteneği türü belirtiyor: " + # AI Translated msgid "Plugin Selection" msgstr "Eklenti Seçimi" @@ -7897,6 +7924,10 @@ msgstr "Mevcut plakayı özelleştir" msgid "The %s nozzle can not print %s." msgstr "%s püskürtme ucu %s'yi yazdıramıyor." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Karışık renkli filamenti tek ekstruderli bir yazıcıda basmak sık filament değişimi ve yıkama gerektirir; bu da atığı ve nozul ya da atık oluğu tıkanma riskini önemli ölçüde artırabilir." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Yazdırmada %1% ile %2%'nin karıştırılması önerilmez.\n" @@ -8022,12 +8053,44 @@ msgstr "Filament listesini AMS'den senkronize edin" msgid "Set filaments to use" msgstr "Kullanılacak filamentleri ayarla" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Karışık Filament Ekle" + +# AI Translated +msgid "Mixed Filament" +msgstr "Karışık Filament" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Son karışık filamenti kaldır" + +# AI Translated +msgid "Add mixed filament" +msgstr "Karışık filament ekle" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Karışık filamentte geçersiz veya uyumsuz bileşenler var. Lütfen etkilenen girdileri yeniden düzenleyin." + msgid "Search plate, object and part." msgstr "Arama plakası, nesne ve parça." msgid "Pellets" msgstr "Peletler" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Karışık filamentin bileşen referansları bozuk" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Düzenle / Sil / Birleştir" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Hedef karışık filament bu fiziksel filamenti bileşen olarak kullanıyor. Birleştirme bu fiziksel filamenti kaldıracak ve karışık filamenti geçersiz kılabilir. Devam edilsin mi?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "İşleminizi tamamladıktan sonra %s projesi kapatılacak ve yeni bir proje oluşturulacak." @@ -8171,8 +8234,16 @@ msgstr "Lütfen bu ön ayarlar içindeki G-code'larının makineye herhangi bir msgid "Customized Preset" msgstr "Özel Ayar" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Step dosyasındaki bileşenlerin adı UTF8 formatında değil!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Bazı yayınlanan ayarlar uygulanamadı:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Bazı filament yuvaları değiştirildi:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Step dosyasındaki bileşenlerin adı UTF-8 formatında değil!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8194,10 +8265,10 @@ msgstr "Cismin hacmi sıfır" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "%s dosyasındaki nesne çok küçük; metre veya inç cinsinden olabilir.\n" -" Milimetreye ölçeklendirmek istiyor musunuz?" +"Milimetreye ölçeklendirmek istiyor musunuz?" msgid "Object too small" msgstr "Nesne çok küçük" @@ -8214,6 +8285,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Çok parçalı nesne algılandı" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Dokular filamentlerle eşleştiriliyor" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Doku İçe Aktarma Uyarısı" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Bu dosyalar birden fazla parçadan oluşan tek bir nesne olarak mı yüklensin?\n" @@ -8425,6 +8504,22 @@ msgstr "" msgid "Sync now" msgstr "Şimdi senkronize et" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Doku içe aktarılamadı. Model doku verisi içeriyor gibi görünüyor, ancak içe aktarma işlemi tamamlanamadı. Model yalnızca geometri olarak içe aktarılacak." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Doku renkleri uygulanıyor..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "3D görünüm güncelleniyor..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Doku renkleri uygulandı." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Değiştirilen ön ayarları yeni projede tutabilir veya silebilirsiniz" @@ -8556,6 +8651,21 @@ msgstr "Dilimlenmiş dosyayı şu şekilde kaydedin:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "%s dosyası yazıcının depolama alanına gönderildi ve yazıcıda görüntülenebiliyor." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "3MF dosyasını şu adla yayınla:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Yayınlanan 3MF dosyası dışa aktarılamadı.\n" +"Lütfen klasörün çevrimiçi olarak var olup olmadığını veya dosyanın başka programlarda açık olup olmadığını kontrol edin." + +msgid "Publish" +msgstr "Yayınla" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Nozul tipi ayarlanmamış. Lütfen nozulu ayarlayın ve tekrar deneyin." @@ -8769,9 +8879,6 @@ msgstr "Devam etmek istiyor musun?" msgid "Language selection" msgstr "Dil seçimi" -msgid "Switching application language while some presets are modified." -msgstr "Bazı ön ayarlar değiştirilirken uygulama dilinin değiştirilmesi." - msgid "Asia-Pacific" msgstr "Asya Pasifik" @@ -8876,6 +8983,9 @@ msgstr "Mevcut Örnek Yolu: " msgid "General" msgstr "Genel" +msgid "Language" +msgstr "Dil" + msgid "Metric" msgstr "Metrik" @@ -9340,9 +9450,6 @@ msgstr "Dilimlenmiş önizlemede katman kaydırıcısı gezdirilirken, geçerli msgid "Dimmed layer brightness" msgstr "Karartılmış katman parlaklığı" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9712,6 +9819,10 @@ msgstr "Spiral vazo" msgid "First layer filament sequence" msgstr "İlk katman filament dizisi" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Filament listesi karışık filamentler içeriyor. Özel filament sırası etkili olmayacak." + msgid "By Layer" msgstr "Katmana göre" @@ -9739,9 +9850,6 @@ msgstr "Model yayınlama web sayfasına git" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Not: Hazırlık birkaç dakika sürebilir. Lütfen sabırlı olun." -msgid "Publish" -msgstr "Yayınla" - msgid "Publish was canceled" msgstr "Yayınlama iptal edildi" @@ -9757,6 +9865,81 @@ msgstr "Veriler yükleniyor" msgid "Jump to webpage" msgstr "Web sayfasına atla" +# AI Translated +msgid "Material" +msgstr "Malzeme" + +# AI Translated +msgid "Mixed filament" +msgstr "Karışık filament" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Bazı karışık filamentler, yayınlanmayacak filamentlere bağlıdır:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (karışık)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% için %2% gerekiyor, ancak o etkin değil." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% için %2% gerekiyor, ancak malzemesi yayınlanmayacak." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Bir karışık filamenti yayınlamak için kullandığı her filamenti etkinleştirin ve Tam Yayınlama'yı seçin ya da Tür gereksinimini karşılayın." + +# AI Translated +msgid "Publish anyway" +msgstr "Yine de yayınla" + +# AI Translated +msgid "Publish 3MF..." +msgstr "3MF Yayınla..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "3MF dosyasında hangi ayarların yayınlanacağını seçin" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "3MF Yayınlama Wiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "3MF Yayınlama Video Kılavuzu" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Karışık filament - yukarıdaki \"Aktif et\" seçildiğinde bir bütün olarak yayınlanır" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Bu karışık filamenti yayınla ve bileşen filamentlerini etkinleştir + tam olarak yayınla" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Bu filament yuvasını 3MF dosyasında yayınla" + +# AI Translated +msgid "Full Publish" +msgstr "Tam Yayınlama" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Bu yuvadaki filamentin tamamını 3MF dosyasına göm" + +# AI Translated +msgid "Filter non-selected" +msgstr "Seçilmeyenleri filtrele" + #, c-format, boost-format msgid "Save %s as" msgstr "%s'yi farklı kaydet" @@ -9774,6 +9957,10 @@ msgstr "Üst ön ayardan devralınan tüm değerleri bu ön ayara kopyalar ve ü msgid "Detach from parent" msgstr "Ebeveynden ayrıl" +# AI Translated +msgid "Save without parent" +msgstr "Ebeveyn olmadan kaydet" + # AI Translated msgid "Unique preset" msgstr "Bağımsız ön ayar" @@ -10488,9 +10675,17 @@ msgstr "Topaklanma tespiti için bir ana kule gereklidir. Prime tower olmayan mo msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Hem hassas Z yüksekliğini hem de hazırlık kulesini etkinleştirmek dilimleme hatalarına neden olabilir. Yine de hassas Z yüksekliğini etkinleştirmek istiyor musunuz?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Pürüzsüz timelapse her katmanda bir prime kulesi gerektirir; bu da \"Seyrek katman yok\" ile bağdaşmaz. \"Seyrek katman yok\" kapatıldı." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Sorunsuz hızlandırılmış çekim için Prime Tower gereklidir. Prime tower olmayan modelde kusurlar olabilir. Prime tower'ı etkinleştirmek istiyor musunuz?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Seyrek katman yok\", her katmanda bir prime kulesi gerektiren pürüzsüz timelapse ile bağdaşmaz. Timelapse geleneksel moda geçirildi." + msgid "Still print by object?" msgstr "Hala nesneye göre yazdırıyor musunuz?" @@ -10869,9 +11064,6 @@ msgstr "Uyumlu süreç profilleri" msgid "Printable space" msgstr "Plaka Ayarı" -msgid "Printer Agent" -msgstr "Yazıcı Aracısı" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Yazıcı iletişimi için ağ aracısı uygulamasını seçin. Kullanılabilir aracılar başlangıçta kaydedilir." @@ -11128,12 +11320,12 @@ msgid "No modifications need to be copied." msgstr "Kopyalanması gereken değişiklik yok." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Parametreleri kopyala" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "%s parametrelerini değiştir" # AI Translated @@ -11292,14 +11484,6 @@ msgstr "Ekstruder sayısı" msgid "Capabilities" msgstr "Yetenekler" -# AI Translated -msgid "Left: " -msgstr "Sol: " - -# AI Translated -msgid "Right: " -msgstr "Sağ: " - msgid "Show all presets (including incompatible)" msgstr "Tüm ön ayarları göster (uyumsuz olanlar dahil)" @@ -11653,29 +11837,6 @@ msgstr "Filament değişimi için temizleme hacmi" msgid "Please choose the filament colour" msgstr "Lütfen filament rengini seçin" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Yerel Wayland canlı görüntüsü, GStreamer GTK video alıcısını gerektirir. Lütfen GStreamer için gtksink eklentisini yükleyin ve ardından OrcaSlicer'ı yeniden başlatın." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Yerel Wayland GStreamer video alıcısı başlatılamadı. Lütfen GStreamer GTK eklentisi kurulumunuzu denetleyin." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için ‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden kaydetmek için Evet’e basın" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen OrcaSlicer'ı yeniden yükleyin veya topluluk yardımı isteyin." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Farklı bir kurulumdan bir BambuSource kullanıyorsunuz, video oynatma doğru çalışmayabilir! Düzeltmek için Evet’e basın." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav paketlerini kurmayı deneyin, ardından Orca Slicer’ı yeniden başlatın)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Bulut aracısı kullanılamıyor. Lütfen OrcaSlicer'ı yeniden başlatıp yeniden deneyin." @@ -12172,15 +12333,22 @@ msgstr "Onarım iptal edildi" msgid "Copying of file %1% to %2% failed: %3%" msgstr "%1% dosyasının %2% dosyasına kopyalanması başarısız oldu: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Yeni satıcı profilleri indiriliyor: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Yapılandırma paketi: %1% sürüm %2% olarak güncellendi" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Satıcı profilleri indirilemedi: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Yapılandırma güncellemelerinden önce kaydedilmemiş değişiklikleri kontrol etmeniz gerekir." -msgid "Configuration package: " -msgstr "Yapılandırma paketi: " - -msgid " updated to " -msgstr " güncellendi " - msgid "Open G-code file:" msgstr "G-code dosyasını açın:" @@ -12245,11 +12413,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping yalnızca Klipper, RepRapFirmware ve Marlin 2 tarafından desteklenir." -msgid "Grouping error: " -msgstr "Gruplama hatası: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Gruplama hatası: %1% sol nozula yerleştirilemez" -msgid " can not be placed in the " -msgstr " içine yerleştirilemez " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Gruplama hatası: %1% sağ nozula yerleştirilemez" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12364,6 +12536,10 @@ msgstr "%1% diğerlerine çok yakın ve çarpışmalara neden olabilir." msgid "%1% is too tall, and collisions will be caused." msgstr "%1% çok uzun ve çarpışmalara neden olacak." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Modelin ve prime kulesinin göreli konumu \"Seyrek katman yok\" özelliğinin gereksinimlerini karşılamıyor. Lütfen göreli konumlarını ayarlayın, model yüksekliğini azaltın veya \"Seyrek katman yok\" seçeneğini kapatın." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " Hariç tutma alanına çok yakın olduğundan yazdırma sırasında çarpışmalar meydana gelebilir." @@ -12401,6 +12577,10 @@ msgstr "Yine de yazdırmak istiyorsanız Tercihler / Denetim / Dilimleme / Karı msgid "No extrusions under current settings." msgstr "Mevcut ayarlarda ekstrüzyon yok." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Gradyanlı bir karışık filament kullanılıyor ancak 'Karışık renk alt katmanı' devre dışı. Gradyan basılmayacak." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "\"Nesneye göre\" dizisi etkinleştirildiğinde, hızlandırılmış çekimin yumuşak modu desteklenmez." @@ -12437,6 +12617,10 @@ msgstr "Modelinizin boyutunu küçültmek veya mevcut yazdırma ayarlarını de msgid "Variable layer height is not supported with Organic supports." msgstr "Değişken katman yüksekliği Organik desteklerle desteklenmez." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Silme kulesi filamenti karışık filament olamaz." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Farklı püskürtme ucu çapları ve farklı filament çapları, ana kule etkinleştirildiğinde iyi çalışmayabilir. Oldukça deneysel olduğundan lütfen dikkatli ilerleyin." @@ -12721,6 +12905,9 @@ msgstr "G-code yerine 3MF kullan" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Yazıcı, baskı işi olarak 3MF dosyası kabul ediyorsa bunu etkinleştirin. Etkinleştirildiğinde Orca Slicer, dilimlenmiş dosyayı düz bir .gcode dosyası yerine .gcode.3mf olarak gönderir." +msgid "Printer Agent" +msgstr "Yazıcı Aracısı" + msgid "Select the network agent implementation for printer communication." msgstr "Yazıcı iletişimi için ağ aracısı uygulamasını seçin." @@ -12805,7 +12992,7 @@ msgstr "mm veya %" msgid "Other layers" msgstr "Diğer katmanlar" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "İlk katman hariç tüm katmanlar için yatak sıcaklığı. 0 değeri, filamentin Cool Plate SuperTack üzerine baskıyı desteklemediği anlamına gelir." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13791,6 +13978,10 @@ msgstr "Hizalanmış doğrusal" msgid "Concentric" msgstr "Konsantrik" +# AI Translated +msgid "Spiral Inset" +msgstr "Spiral içe" + msgid "Hilbert Curve" msgstr "Hilbert eğrisi" @@ -13882,12 +14073,12 @@ msgstr "Üst yüzey doldurma sırası" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken üst yüzeylerin doldurulma yönü.\n" -"Dışarı, yüzeyin merkezinden başlar; böylece fazla malzeme en az göründüğü kenara doğru itilir. İçeri kenardan başlar ve merkezdeki dar kavislerle biter.\n" +"Merkezden başlayan bir desen kullanıldığında üst yüzeylerin doldurulma yönü (Konsantrik, Spiral içe, Arşimet akorları, Sekizgen spiral).\n" +"Dışarı, yüzeyin merkezinden başlar; böylece fazla malzeme, en az göründüğü kenara doğru itilir. İçeri, kenardan başlar ve merkezdeki dar kavislerle biter.\n" "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır." # AI Translated @@ -13896,12 +14087,12 @@ msgstr "Alt yüzey doldurma sırası" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken alt yüzeylerin doldurulma yönü.\n" -"İçeri, her yüzeye daha geniş dış kavislerle başlar; bu da merkezdeki dar kavislerin yapışmayabileceği yapı plakalarında ilk katman yapışmasını iyileştirir. Dışarı merkezden başlar ve fazla malzemeyi kenara doğru iter.\n" +"Merkezden başlayan bir desen kullanıldığında alt yüzeylerin doldurulma yönü (Konsantrik, Spiral içe, Arşimet akorları, Sekizgen spiral).\n" +"İçeri, her yüzeye daha geniş dış kavislerle başlar; bu da merkezdeki dar kavislerin tutunamayabileceği yataklarda ilk katman yapışmasını iyileştirir. Dışarı, merkezden başlar ve fazla malzemeyi kenara doğru iter.\n" "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır." msgid "Internal solid infill pattern" @@ -14007,6 +14198,14 @@ msgstr "Saat yönünün tersine" msgid "Clockwise" msgstr "Saat yönünde" +# AI Translated +msgid "Distance to rod" +msgstr "Mile mesafe" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Nozul ucunun milin uzak kenarına olan yatay mesafesi. Nesneye göre baskıda çarpışmalardan kaçınmak için kullanılır." + msgid "Height to rod" msgstr "Çubuğa kadar olan yükseklik" @@ -14193,6 +14392,8 @@ msgstr "Katman süresi" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Tahmini süresi bu değerden kısa olan katlarda parça soğutma fanı devreye girecektir. Fan hızı, katman yazdırma süresine göre minimum ve maksimum fan hızları arasında enterpole edilir." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14502,6 +14703,62 @@ msgstr "Destek malzemesi" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Destek malzemesi yaygın olarak destek ve destek arayüzünü yazdırmak için kullanılır." +# AI Translated +msgid "Is mixed filament" +msgstr "Karışık filament mi" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Bu filament yuvasının birden fazla fiziksel filamentten oluşan bir karışık filament olup olmadığını belirler" + +# AI Translated +msgid "Mixed filament components" +msgstr "Karışık filament bileşenleri" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Bileşen filamentlerin virgülle ayrılmış, 1'den başlayan sıra numaraları; ör. \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Karışık filament alt katman oranları" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Toplamı 1.0 olan, virgülle ayrılmış oran değerleri; ör. \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Karışık filament gradyanı" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Karışık filamentin alt katmanları için Z yönünde gradyan modunu etkinleştirir. Etkinleştirildiğinde alt katman oranları katmanlar boyunca doğrusal olarak değişir." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Karışık filament gradyan aralığı" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Gradyan modunda ilk bileşenin başlangıç ve bitiş oranları. Virgülle ayrılmış çift; ör. \"0.10,0.90\" %10 ile %90 arasını ifade eder." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Karışık filament gradyan eğrisi" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Z ilerlemesini ilk bileşenin oranına eşleyen, isteğe bağlı Photoshop tarzı özel eğri. Dikey çizgiyle ayrılmış kontrol noktaları olarak kodlanır; \"x,y\" (eski) veya teğetin geçersiz kılınması gerektiğinde \"x,y,m_in,m_out\" biçiminde (boş değer ya da \"nan\" varsayılan PCHIP değerini kullanır). x [0,1] aralığındadır; y yapılandırılmış oran aralığına kırpılır; ör. \"0,0.15|0.5,0.50|1,0.85\". Boş bırakıldığında bunun yerine doğrusal gradient_range kullanılır." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Karışık filamentte parça başına gradyan" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Gradyan modu etkinleştirildiğinde, gradyan montajın tamamı tek bir Z aralığı olarak ele alınmak yerine montajdaki her parçaya bağımsız olarak uygulanır." + msgid "Filament printable" msgstr "Filament yazdırılabilir" @@ -15793,6 +16050,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y ekseninin izin verilen maksimum çıkış kuvveti" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15805,6 +16063,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y ekseninin makine yatağı kütle yükü" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16129,8 +16388,8 @@ msgid "Reduce infill retraction" msgstr "Dolguda geri çekmeyi azalt" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Hareket tamamen dolgu alanı içindeyken geri çekme yapılmaz. Bu, sızıntının görülemeyeceği anlamına gelir. Bu, karmaşık modellerde geri çekme sayısını azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi ve G-code oluşturmayı yavaşlatır. Geri çekmenin atlandığı alanlarda z-hop'un da uygulanmadığını unutmayın." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Hareket tamamen dolgu alanı içindeyken geri çekme yapılmaz. Bu, sızıntının görülemeyeceği anlamına gelir. Bu, karmaşık modellerde geri çekme sayısını azaltabilir ve yazdırma süresinden tasarruf sağlayabilir, ancak dilimlemeyi ve G-code oluşturmayı yavaşlatır. Geri çekmenin atlandığı alanlarda Z-hop'un da uygulanmadığını unutmayın." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Bu seçenek sızıntıyı önlemek için aktif olmayan ekstrüderlerin sıcaklığını düşürecektir." @@ -16166,6 +16425,20 @@ msgstr "Çıkıntılı duvarı algıla" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Çizgi genişliğine göre çıkıntı yüzdesini tespit edin ve yazdırmak için farklı hızlar kullanın. %%100 çıkıntı için köprü hızı kullanılır." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Desteklenmeyen duvarları en son yazdır" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Tamamen havada kalan duvar döngüleri, ancak onları tutabilecek bir şey oluştuğunda yazdırılır:\n" +"duvar sırası ne olursa olsun, kendi adasındaki diğer duvarlardan sonra, en içtekinden başlayarak ekstrüde edilirler.\n" +"Yalnızca bu katmanın köprülerinin sabitleyebileceği bir döngü, o köprüler yazdırılana kadar bekler; desteklenen bir duvar boyunca uzanan bir döngü ise, kendisine sabitleme olarak ihtiyaç duyan dolgudan önceki yerini korur." + # AI Translated msgid "Outer walls" msgstr "Dış duvarlar" @@ -16305,7 +16578,7 @@ msgstr "Silme sonrası geri çekme miktarı" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Silme sonrasındaki hızlı geri çekmenin uzunluğu; geri çekme uzunluğuna göredir.\n" @@ -16352,7 +16625,7 @@ msgstr "Takım değişiminden önce geri çekme tetiklendiğinde, filament belir msgid "Z-hop height" msgstr "Z-Sıçrama yüksekliği" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Geri çekme işlemi her yapıldığında, nozul ile baskı arasında açıklık oluşturmak için nozul biraz kaldırılır. Hareket halindeyken nozulun baskıya çarpmasını önler. Z'yi kaldırmak için spiral çizgi kullanmak çekmeyi önleyebilir." msgid "Z-hop lower boundary" @@ -16614,6 +16887,39 @@ msgstr "Döngülerde temizleme" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Kapalı döngü ekstrüzyonda dikişin görünürlüğünü en aza indirmek için, ekstruder döngüden ayrılmadan önce içeriye doğru küçük bir hareket gerçekleştirilir." +# AI Translated +msgid "Wipe inward" +msgstr "İçeri temizleme" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Yalnızca delik sınırları dahil olmak üzere dış duvarlara uygulanır. Temizleme sırasında sıcak nozulu yazdırılmış iç duvarlara doğru hareket ettirerek yeni yazdırılmış plastiğin yeniden ısınmasını ve dikiş izlerini azaltır.\n" +"\n" +"Özellikle temizleme izlerinin daha belirgin olduğu 0,1 mm'nin altındaki katman yüksekliklerinde yararlıdır.\n" +"\n" +"Yazdırılmış bitişik bir iç duvar yoksa (tek duvarlı alanlar veya Dış/İç duvar sırası) ya da örneğin dar köşelerde veya dikiş boşluklarında desteklenen bir içeri yol bulunamazsa normal temizlemeyi kullanır." + +# AI Translated +msgid "Wipe inward distance" +msgstr "İçeri temizleme mesafesi" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Temizleme yolunun dış çevreden uzağa kaydırıldığı mesafe; milimetre cinsinden veya dış duvarın gerçek ekstrüzyon genişliğinin yüzdesi olarak belirtilir.\n" +"\n" +"Örneğin 50%, yolu dış duvar genişliğinin yarısı kadar kaydırır. Etkin kaydırma, hem dış duvarın gerçek genişliğiyle hem de bitişik duvara olan mevcut boşlukla sınırlıdır; bu nedenle 100% üzerindeki değerlerin veya buna denk bir mutlak mesafenin ek bir etkisi olmaz. Kaydırmayı devre dışı bırakmak için 0 girin." + msgid "Wipe before external loop" msgstr "Harici döngüden önce silin" @@ -16880,8 +17186,9 @@ msgstr "Yeni takımı baskı sıcaklığına ulaşmasını beklemeden alır, sil msgid "No sparse layers (beta)" msgstr "Seyrek katman yok (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda yazdırılmayacaktır. Araç değişimi olan katmanlarda, ekstruder silme kulesini yazdırmak için aşağı doğru hareket edecektir. Baskı ile çarpışma olmamasını sağlamak kullanıcının sorumluluğundadır." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda yazdırılmaz. Araç değişimi olan katmanlarda ekstruder silme kulesini yazdırmak için aşağı doğru hareket eder; böylece kule modelin altında kalır ve baskı kafasının ona uzanması gerekir. Bunun daha önce yazdırılmış bir nesneyle çarpışmasına yol açacak yerleşimler reddedilir. Her katmanda bir kule gerektiren pürüzsüz timelapse veya nozul birikme algılamayla birlikte etkisi yoktur." msgid "Prime all printing extruders" msgstr "Tüm ekstruderleri temizle" @@ -16907,6 +17214,34 @@ msgstr "" msgid "Cyclic" msgstr "Döngüsel" +# AI Translated +msgid "Cyclic order" +msgstr "Döngüsel sıra" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Döngüsel araç değiştirme sıralamasının kullandığı özel filament dizisi; virgülle ayrılmış filament numaraları olarak (örn. \"3,2,1,4\").\n" +"Her katman filamentlerini bu diziye göre yazdırır; listelenmeyen filamentler en son, artan sırada yazdırılır.\n" +"Filamentleri artan sırada dolaşmak için boş bırakın." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Döngüsel sırayı ilk katmana uygula" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Döngüsel araç değiştirme sırasını ilk katmana da uygular.\n" +"Varsayılan olarak kapalıdır, çünkü ilk katman bunun yerine en iyi tabla yapışması için sıralanır: ilk katmanın küçük, kırılgan ayrıntılarını yazdıran filamentler en son yazdırılır; böylece sonraki araç değişimleri ve seyahat hareketlerinin bu zayıf tutunan parçaları koparma olasılığı azalır. Bu ilk katman sırası, ayarlanmışsa özel bir ilk katman filament dizisini de dikkate alır. Döngüsel sıranın faydası (fazladan araç değişimleri her katmana soğuması için daha fazla süre tanır) yapışma için yavaş ve sıcak yazdırılan ilk katman için geçerli değildir.\n" +"Bunu yalnızca her katmanda, ilki dahil, tam olarak aynı araç dizisine ihtiyaç duyuyorsanız, söz konusu yapışma optimizasyonundan vazgeçerek etkinleştirin." + msgid "Slice gap closing radius" msgstr "Dilim aralığı kapanma yarıçapı" @@ -16916,9 +17251,6 @@ msgstr "Üçgen mesh dilimleme sırasında 2x boşluk kapatma yarıçapından k msgid "Slicing Mode" msgstr "Dilimleme modu" -msgid "Other" -msgstr "Diğer" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "3DLabPrint uçak modelleri için \"Çift-tek\" seçeneğini kullanın. Modeldeki tüm delikleri kapatmak için \"Delikleri kapat\"ı kullanın." @@ -17417,6 +17749,14 @@ msgstr "" "\n" "Aşağıdaki silme ayarından önce geri çekme miktarına bir değer ayarlamak, silme işleminden önce aşırı geri çekme işlemini gerçekleştirecektir, aksi takdirde silme işleminden sonra gerçekleştirilecektir." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Karışık renk alt katmanı" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Karışık renk alt katmanlarına bölmeyi etkinleştirir. Etkinleştirildiğinde, karışık renkli filament içeren katmanlar renk karışımı efektleri elde etmek için alt katmanlara bölünür." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Temizleme kulesi, nesneleri yazdırırken görünüm kusurlarını önlemek amacıyla nozul üzerindeki kalıntıları temizlemek ve nozul içindeki oda basıncını dengelemek için kullanılabilir." @@ -17926,6 +18266,14 @@ msgstr "Kontrol yok" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "G-code yol çakışmaları kontrolü gibi herhangi bir geçerlilik kontrolü çalıştırmayın." +# AI Translated +msgid "Strict mode" +msgstr "Katı mod" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Dilimleme, aksi halde yalnızca günlüğe yazılacak kritik olmayan bir uyarı verdiğinde sıfırdan farklı bir kodla çıkar; örneğin destek kapalıyken desteğe ihtiyaç duyan bir model. Bunu, fark edilmesi güç biçimde bozuk bir dilimlemeyi asla teslim etmemesi gereken CI veya betikli iş akışlarında kullanın. Bu tür her uyarı ayrıca, yalnızca Linux'ta yazılan result.json dosyasının `warnings` dizisinde kararlı bir sınıfla listelenir. Destek kontrolünü atlayan --no-check ile birlikte kullanılamaz." + msgid "Normative check" msgstr "Normatif kontrol" @@ -17938,11 +18286,28 @@ msgstr "Çıktı Model Bilgileri" msgid "This outputs the model’s information." msgstr "Modelin bilgilerini çıktıla." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Ağı incele (stdout'a JSON)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Yüklenen her nesnenin JSON özetini stdout'a yazar ve ardından çıkar: sınırlayıcı kutuları ve üzerine yatırılabileceği dışbükey kabuk yüzleri ile bunların normalleri, alanları ve merkezleri. --ground-* seçeneklerinin arasından seçim yaptığı yüzler bunlardır. --info seçeneğinin makine tarafından okunabilir alternatifi." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Boyamayı incele (stdout'a JSON)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Yüklenen modelde halihazırda saklanan her boyalı katmanın (destekler, dikiş, MMU rengi, pütürlü yüzey) yapılandırılmış bir JSON özetini — duruma göre yüzey sayısı, yüzey alanı ve ağa göre sınırlayıcı kutu — yazar ve ardından çıkar. Arayüzde boyama araçlarını açmanın makine tarafından okunabilir alternatifi." + msgid "Export Settings" msgstr "Dışa Aktarma Ayarları" -msgid "This exports settings to a file." -msgstr "Ayarları bir dosyaya aktarın." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Bu, ayarları bir dosyaya aktarır. stdout'a yazmak için - kullanın." msgid "Send progress to pipe" msgstr "İlerlemeyi kanala gönder" @@ -17998,6 +18363,30 @@ msgstr "Y etrafında döndür" msgid "Rotation angle around the Y axis in degrees." msgstr "Y ekseni etrafında derece cinsinden dönüş açısı." +# AI Translated +msgid "Ground largest face" +msgstr "En büyük yüze yatır" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Her nesneyi dışbükey kabuğunun en büyük yüzüne yatırır ve yatağa bırakır. Eşit büyüklükteki yüzler arasından zaten aşağı bakan yüz korunur. Üzerine oturacak kadar büyük bir yüzü olmayan nesneler olduğu gibi bırakılır. Dönüşümler komut satırı sırasına göre çalışır; bu nedenle bu seçenekten önce verilen döndürmeler dikkate alınır. --orient 1 tüm dönüşümlerden sonra çalışır ve yönlendirmeyi değiştirir." + +# AI Translated +msgid "Ground face by normal" +msgstr "Normale göre yüze yatır" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Her nesneyi, dışa bakan normali NX,NY,NZ yönüne en yakın olan dışbükey kabuk yüzüne yatırır ve yatağa bırakır. Yön, bu seçenekten önce verilen döndürmeleri içeren ve giriş dosyası nesneyi döndürmediği sürece tabla eksenleriyle örtüşen nesne koordinatlarındadır. Örneğin 1,0,0 nesneyi +X tarafına dikey olarak oturtur. --orient 1 tüm dönüşümlerden sonra çalışır ve yönlendirmeyi değiştirir." + +# AI Translated +msgid "Ground face at point" +msgstr "Noktadaki yüze yatır" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Her nesneyi, X,Y,Z noktasını içeren dışbükey kabuk yüzüne yatırır ve yatağa bırakır. Nokta, bu seçenekten önce verilen döndürmeleri içeren nesne koordinatlarındadır; --inspect-mesh yüz merkezlerini bu koordinatlarda bildirir. Böyle bir yüzü olmayan nesneler olduğu gibi bırakılır ve hiçbir nesnede böyle bir yüz yoksa çalışma başarısız olur. --orient 1 tüm dönüşümlerden sonra çalışır ve yönlendirmeyi değiştirir." + msgid "Scale the model by a float factor." msgstr "Modeli kayan nokta faktörüne göre ölçeklendirin." @@ -18155,10 +18544,10 @@ msgid "Allow 3MF with newer version to be sliced." msgstr "Daha yeni sürüme sahip 3mf’nin dilimlenmesine izin ver." msgid "Current Z-hop" -msgstr "Mevcut z-hop" +msgstr "Mevcut Z-hop" msgid "Contains Z-hop present at the beginning of the custom G-code block." -msgstr "Özel G-code bloğunun başında bulunan z-hop'u içerir." +msgstr "Özel G-code bloğunun başında bulunan Z-hop'u içerir." msgid "Position of the extruder at the beginning of the custom G-code block. If the custom G-code travels somewhere else, it should write to this variable so OrcaSlicer knows where it travels from when it gets control back." msgstr "Ekstruderin özel G-code bloğunun başlangıcındaki konumu. Özel G-code başka bir yere seyahat ederse, Slicer'ın kontrolü geri aldığında nereden seyahat ettiğini bilmesi için bu değişkene yazması gerekir." @@ -18505,6 +18894,10 @@ msgstr "Bir model dosyasının meshlenmesi başarısız oldu veya geçerli bir msgid "The supplied file couldn't be read because it's empty." msgstr "Seçilen dosya boş olduğundan okunamıyor." +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Dosya biçimi uyumsuz olduğundan ayrıştırılamıyor." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Bilinmeyen dosya formatı. Giriş dosyası .stl, .obj, .amf(.xml) uzantılı olmalıdır." @@ -20003,19 +20396,19 @@ msgstr "Yazıcı adlarını yalnızca yazıcı, filament ve işlem ön ayarları msgid "Only display the filament names with changes to filament presets." msgstr "Filament adlarını yalnızca filament ön ayarlarında yapılan değişikliklerle görüntüleyin." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Yalnızca kullanıcı yazıcı ön ayarlarına sahip yazıcı adları görüntülenecek ve seçtiğiniz her ön ayar zip olarak dışa aktarılacaktır." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Yalnızca kullanıcı filamenti ön ayarlarına sahip filament adları \n" "görüntülenecek ve seçtiğiniz her filament adındaki tüm kullanıcı filamenti ön ayarları zip olarak dışa aktarılacaktır." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Yalnızca işlem ön ayarları değiştirilen yazıcı adları görüntülenecek \n" "ve seçtiğiniz her yazıcı adındaki tüm kullanıcı işlem ön ayarları zip olarak dışa aktarılacaktır." @@ -20260,7 +20653,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Sorunun kaynağını teşhis etmek için bilgiye ihtiyacımız var. Ayrıntılı kılavuz için wiki sayfasına bakın." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Paketle düğmesi, geçerli oturumun proje dosyasını ve günlüklerini bir zip dosyasında toplar." # AI Translated @@ -20316,7 +20709,7 @@ msgid "Stored logs" msgstr "Saklanan günlükler" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Saklanan tüm günlükleri bir zip dosyasında paketler." # AI Translated @@ -20402,7 +20795,7 @@ msgid "Authorizing..." msgstr "Yetkilendiriliyor..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Hata. Yetkilendirme için api belirteci alınamıyor" # AI Translated @@ -20859,8 +21252,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Akıllı filament atamasını etkinleştir: Tasarrufu en üst düzeye çıkarmak için bir filamenti birden çok nozula atayın" # AI Translated -msgid "Fila Saving" -msgstr "Filament Tasarrufu" +msgid "File Saving" +msgstr "Dosya Kaydetme" msgid "Don't remind me again" msgstr "Bana bir daha hatırlatma" @@ -21189,6 +21582,18 @@ msgstr "Bu eylem geri alınamaz. Devam etmek?" msgid "Skipping objects." msgstr "Nesneleri atlama." +# AI Translated +msgid "Material Ratio" +msgstr "Malzeme Oranı" + +# AI Translated +msgid "Model Height" +msgstr "Model Yüksekliği" + +# AI Translated +msgid "Ratio" +msgstr "Oran" + msgid "Select Filament" msgstr "Filament Seçin" @@ -21268,6 +21673,9 @@ msgstr "Şimdi Yeniden Başlat" msgid "NO RAMMING AT ALL" msgstr "HİÇBİR ŞEKİLDE ÇARPMA YOK" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "Hacimsel hız" @@ -21468,12 +21876,14 @@ msgid "Drying-Dehumidifying" msgstr "Kurutma-Nem Alma" # AI Translated -msgid " maximum drying temperature is " -msgstr " için maksimum kurutma sıcaklığı " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s için maksimum kurutma sıcaklığı %d°C'dir." # AI Translated -msgid " minimum drying temperature is " -msgstr " için minimum kurutma sıcaklığı " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s için minimum kurutma sıcaklığı %d°C'dir." # AI Translated msgid "This filament may not be completely dried." @@ -21829,7 +22239,8 @@ msgstr "" "Baskılarınızı plakalara ayırın\n" "Çok sayıda parçası olan bir modeli baskıya hazır ayrı kalıplara bölebileceğinizi biliyor muydunuz? Bu, tüm parçaları takip etme sürecini basitleştirecektir." -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] +#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer +#: Height] msgid "" "Speed up your print with Adaptive Layer Height\n" "Did you know that you can print a model even faster by using the Adaptive Layer Height option? Check it out!" @@ -21902,7 +22313,8 @@ msgstr "" "Gücü artırın\n" "Modelin gücünü artırmak için daha fazla duvar halkası ve daha yüksek seyrek dolgu yoğunluğu kullanabileceğinizi biliyor muydunuz?" -#: resources/data/hints.ini: [hint:When do you need to print with the printer door opened] +#: resources/data/hints.ini: [hint:When do you need to print with the printer +#: door opened] msgid "" "When do you need to print with the printer door opened?\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature? There is more info about this in the Wiki." @@ -21918,6 +22330,132 @@ msgstr "" "Eğilmeyi önleyin\n" "ABS gibi bükülmeye yatkın malzemelere baskı yaparken, ısıtma yatağı sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını azaltabileceğini biliyor muydunuz?" +#~ msgid "Other" +#~ msgstr "Diğer" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Sol: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Sağ: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Maksimum sıcaklık şu değeri aşamaz: " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Minimum sıcaklık şu değerden az olamaz: " + +#~ msgid "up to" +#~ msgstr "kadar" + +#~ msgid "above" +#~ msgstr "üstünde" + +#~ msgid "from" +#~ msgstr "itibaren" + +#~ msgid "Configuration package: " +#~ msgstr "Yapılandırma paketi: " + +#~ msgid " updated to " +#~ msgstr " güncellendi " + +#~ msgid "Grouping error: " +#~ msgstr "Gruplama hatası: " + +#~ msgid " can not be placed in the " +#~ msgstr " içine yerleştirilemez " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " için maksimum kurutma sıcaklığı " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " için minimum kurutma sıcaklığı " + +# AI Translated +#~ msgid "needs" +#~ msgstr "şunu gerektirir" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "etkin değil" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "malzeme yayınlanmadı" + +#~ msgid "Select the language" +#~ msgstr "Dili seçin" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Eklenti seç" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken üst yüzeylerin doldurulma yönü.\n" +#~ "Dışarı, yüzeyin merkezinden başlar; böylece fazla malzeme en az göründüğü kenara doğru itilir. İçeri kenardan başlar ve merkezdeki dar kavislerle biter.\n" +#~ "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Merkez tabanlı bir desen (Konsantrik, Arşimet akorları, Sekizgen spiral) kullanılırken alt yüzeylerin doldurulma yönü.\n" +#~ "İçeri, her yüzeye daha geniş dış kavislerle başlar; bu da merkezdeki dar kavislerin yapışmayabileceği yapı plakalarında ilk katman yapışmasını iyileştirir. Dışarı merkezden başlar ve fazla malzemeyi kenara doğru iter.\n" +#~ "Varsayılan, her iki yönde de ilerleyebilen en kısa yol sıralamasını kullanır." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Etkinleştirilirse, silme kulesi araç değişimi olmayan katmanlarda yazdırılmayacaktır. Araç değişimi olan katmanlarda, ekstruder silme kulesini yazdırmak için aşağı doğru hareket edecektir. Baskı ile çarpışma olmamasını sağlamak kullanıcının sorumluluğundadır." + +#~ msgid "This exports settings to a file." +#~ msgstr "Ayarları bir dosyaya aktarın." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Yerel Wayland canlı görüntüsü, GStreamer GTK video alıcısını gerektirir. Lütfen GStreamer için gtksink eklentisini yükleyin ve ardından OrcaSlicer'ı yeniden başlatın." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Yerel Wayland GStreamer video alıcısı başlatılamadı. Lütfen GStreamer GTK eklentisi kurulumunuzu denetleyin." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Bu görev için Windows Media Player gereklidir! İşletim sisteminiz için ‘Windows Media Player’ı etkinleştirmek istiyor musunuz?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource medya oynatımı için doğru şekilde kaydedilmemiş! Yeniden kaydetmek için Evet’e basın" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Medya oynatma için kayıtlı BambuSource bileşeni eksik! Lütfen OrcaSlicer'ı yeniden yükleyin veya topluluk yardımı isteyin." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Farklı bir kurulumdan bir BambuSource kullanıyorsunuz, video oynatma doğru çalışmayabilir! Düzeltmek için Evet’e basın." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Sisteminizde video oynatmak için gerekli olan GStreamer H.264 codec bileşenleri eksik. (gstreamer1.0-plugins-bad veya gstreamer1.0-libav paketlerini kurmayı deneyin, ardından Orca Slicer’ı yeniden başlatın)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Filament Tasarrufu" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 9f57b6b71a..9232201869 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: orcaslicerua\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-07-17 16:25+0300\n" "Last-Translator: Andrij Mizyk \n" "Language-Team: Ukrainian\n" @@ -2424,15 +2424,6 @@ msgstr "Доступне оновлення. Відкрийте вікно на msgid "%s has been removed." msgstr "%s вилучено." -msgid "Switching application language" -msgstr "Зміна мови програми" - -msgid "Select the language" -msgstr "Вибрати мову" - -msgid "Language" -msgstr "Мова" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "Не вдалося перемкнути Orca Slicer на мову %s." @@ -2906,6 +2897,10 @@ msgstr "Змінити" msgid "Merge with" msgstr "Обʼєднати з" +# AI Translated +msgid "Decompose Color" +msgstr "Розкласти колір" + msgid "Delete this filament" msgstr "Видалити цей філамент" @@ -3197,6 +3192,10 @@ msgstr "Збірка" msgid "Merge parts to an object" msgstr "Обʼєднати частини в обʼєкт" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Використання змінної висоти шару разом із підшаром змішаного кольору може погіршити якість змішування кольорів." + msgid "Add layers" msgstr "Додати шари" @@ -3660,11 +3659,15 @@ msgstr "Відвести назад поточний філамент на Filam msgid "Switch track at Filament Track Switch" msgstr "Перемкнути доріжку на Filament Track Switch" -msgid "The maximum temperature cannot exceed " -msgstr "Максимальна температура не повинна перевищувати " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Максимальна температура не повинна перевищувати %d" -msgid "The minmum temperature should not be less than " -msgstr "Мінімальна температура не повинна бути нижчою ніж " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Мінімальна температура не повинна бути нижчою ніж %d" msgid "Type to filter..." msgstr "Вводьте для фільтру..." @@ -4571,6 +4574,15 @@ msgstr "" "Не вдалося скопіювати тимчасовий G-код у місцезнаходження вихідного файлу G-коду. Чи може ваша SD карта захищена від запису?\n" "Повідомлення про помилку: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Не вдалося скопіювати тимчасовий G-код у вихідний G-код.\n" +"Повідомлення про помилку: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Не вдалося скопіювати тимчасовий G-код у вихідний G-код. Можливо, проблема з цільовим пристроєм, спробуйте експортувати ще раз або використати інший пристрій. Пошкоджений вихідний G-код - %1% .tmp." @@ -4781,7 +4793,7 @@ msgstr "" "\n" "Значення буде скинуто на 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Чергування додаткової стінки не працює добре, якщо для параметра \"Забезпечити товщину вертикальної оболонки\" встановлено значення \"Всі\"." msgid "" @@ -4827,7 +4839,7 @@ msgstr "" "НІ - Залишити незалежну висоту шарів підтримки" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height має бути менше висоти шару.\n" @@ -4836,7 +4848,7 @@ msgstr "" # AI Translated #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Глибина зчеплення має бути меншою за глибину оболонки.\n" @@ -4879,6 +4891,9 @@ msgstr "" "Так – змінити ці налаштування та автоматично включити режим спіральна ваза\n" "Ні - цього разу відмовитися від використання режиму спіральна ваза" +msgid "N/A" +msgstr "Н/Д" + msgid "Printing" msgstr "Друк" @@ -5320,14 +5335,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Значення %s знаходиться за межами діапазону. Дійсний діапазон від %d до %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Це %s%% або %s %s?\n" -"ТАК для %s%%, \n" -"НІ для %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Це %s%% або %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5350,29 +5362,22 @@ msgstr "Некоректний шаблон. Використовуйте N, N#K msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Невірний формат. Очікуваний векторний формат: \"%1%\"" -msgid "N/A" -msgstr "Н/Д" - # AI Translated msgid "System agents" msgstr "Системні агенти" -# AI Translated -msgid "No plugin selected" -msgstr "Плагін не вибрано" - # AI Translated msgid "Add plugin" msgstr "Додати плагін" -# AI Translated -msgid "Select plugin" -msgstr "Вибрати плагін" - # AI Translated msgid "Remove plugin" msgstr "Вилучити плагін" +# AI Translated +msgid "No plugin selected" +msgstr "Плагін не вибрано" + # AI Translated msgid "Configure" msgstr "Налаштувати" @@ -5638,14 +5643,20 @@ msgstr "Встановити до оптимального" msgid "Regroup filament" msgstr "Перегрупувати філамент" -msgid "up to" -msgstr "аж до" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "до %1% мм" -msgid "above" -msgstr "вище" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "вище %1% мм" -msgid "from" -msgstr "від" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "від %1% до %2% мм" msgid "Usage" msgstr "Використання" @@ -6010,7 +6021,7 @@ msgid "Size:" msgstr "Розмір:" # AI Translated -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Виявлено конфлікти шляхів G-коду на шарі %d, Z = %.2lf мм. Будь ласка, рознесіть конфліктуючі обʼєкти далі один від одного (%s <-> %s)." @@ -6333,16 +6344,24 @@ msgstr "Зберегти проєкт як" msgid "Save current project as" msgstr "Зберегти поточний проєкт як" +# AI Translated +msgid "Publish 3MF" +msgstr "Публікувати 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Експортувати файл 3MF із вбудованими вибраними налаштуваннями" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Імпорт 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Завантажте модель" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Імпорт Zip-архіву" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Завантажити моделі, що містяться в zip-архіві" msgid "Import Configs" @@ -7623,6 +7642,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Низ" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Це налаштування не вказує тип можливості плагіна." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Це налаштування вказує нерозпізнаний тип можливості плагіна: " + # AI Translated msgid "Plugin Selection" msgstr "Вибір плагіна" @@ -7891,6 +7918,10 @@ msgstr "Пристосувати поточну пластину" msgid "The %s nozzle can not print %s." msgstr "Сопло %s не може друкувати %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Друк філаменту змішаного кольору на принтері з одним екструдером потребує частої зміни філаменту та промивок, що може суттєво збільшити кількість відходів і ризик засмічення сопла або жолоба для відходів." + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "Змішування %1% з %2% в друці не рекомендується.\n" @@ -8019,12 +8050,44 @@ msgstr "Синхронізувати список ниток з AMS" msgid "Set filaments to use" msgstr "Встановити філаменти для використання" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Додати змішаний філамент" + +# AI Translated +msgid "Mixed Filament" +msgstr "Змішаний філамент" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Вилучити останній змішаний філамент" + +# AI Translated +msgid "Add mixed filament" +msgstr "Додати змішаний філамент" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "У змішаного філаменту недійсні або невідповідні компоненти. Будь ласка, відредагуйте відповідні записи ще раз." + msgid "Search plate, object and part." msgstr "Пошук пластини, об’єкта і деталі." msgid "Pellets" msgstr "Гранули" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "У змішаного філаменту пошкоджені посилання на компоненти" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Редагувати / Видалити / Обʼєднати" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Цільовий змішаний філамент використовує цей фізичний філамент як компонент. Обʼєднання вилучить цей фізичний філамент і може зробити змішаний філамент недійсним. Продовжити?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8180,8 +8243,16 @@ msgid "Customized Preset" msgstr "Пристосований пресет" # AI Translated -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Назви компонентів усередині файлу STEP не у форматі UTF8!" +msgid "Some published settings could not be applied:" +msgstr "Деякі опубліковані налаштування не вдалося застосувати:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Деякі слоти філаменту було змінено:" + +# AI Translated +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Назви компонентів усередині файлу STEP не у форматі UTF-8!" msgid "Because of unsupported text encoding, garbage characters may appear!" msgstr "Через непідтримуване кодування тексту можуть зʼявлятися непотрібні символи!" @@ -8202,7 +8273,7 @@ msgstr "Обʼєм обʼєкта дорівнює нулю" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Обʼєкт із файлу %s занадто малий, можливо, в метрах або дюймах.\n" "Ви хочете масштабувати до міліметрів?" @@ -8223,6 +8294,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Виявлено обʼєкт, що складається з кількох частин" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Зіставлення текстур із філаментами" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Попередження під час імпорту текстури" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Завантажити ці файли як єдиний обʼєкт з кількома частинами?\n" @@ -8433,6 +8512,22 @@ msgstr "" msgid "Sync now" msgstr "Синхронізувати зараз" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Не вдалося імпортувати текстуру. Схоже, модель містить дані текстури, але завершити процес імпорту не вдалося. Модель буде імпортовано лише як геометрію." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Застосування кольорів текстури..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Оновлення 3D-вигляду..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Кольори текстури застосовано." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Ви можете зберегти змінені пресети у новому проекті або відмовитися від них" @@ -8567,6 +8662,21 @@ msgstr "Зберегти нарізаний файл як:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "Файл %s надіслано до памʼяті принтера та доступний для перегляду на принтері." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Публікувати файл 3MF як:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Не вдалося експортувати опублікований файл 3MF.\n" +"Перевірте, чи доступна тека онлайн і чи не відкрито файл в інших програмах." + +msgid "Publish" +msgstr "Публікувати" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Тип сопла не встановлений. Будь ласка, оберіть сопло та спробуйте ще раз." @@ -8783,9 +8893,6 @@ msgstr "Ви хочете продовжувати?" msgid "Language selection" msgstr "Вибір мови" -msgid "Switching application language while some presets are modified." -msgstr "Зміна мови програми при зміні деяких профілів." - msgid "Asia-Pacific" msgstr "Азіатсько-Тихоокеанський регіон" @@ -8893,6 +9000,9 @@ msgstr "Шлях Поточної Інсталяції: " msgid "General" msgstr "Загальні" +msgid "Language" +msgstr "Мова" + msgid "Metric" msgstr "Метрика" @@ -9353,9 +9463,6 @@ msgstr "Під час прокручування повзунка шарів у msgid "Dimmed layer brightness" msgstr "Яскравість затемнених шарів" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9714,6 +9821,10 @@ msgstr "Спіральна ваза" msgid "First layer filament sequence" msgstr "Послідовність філаменту першого шару" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Список філаментів містить змішані філаменти. Власна послідовність філаментів не діятиме." + msgid "By Layer" msgstr "По шарах" @@ -9742,9 +9853,6 @@ msgstr "Перейти на веб-сторінку публікації мод msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Примітка. Підготовка може тривати кілька хвилин. Будь ласка, будьте терплячі." -msgid "Publish" -msgstr "Публікувати" - msgid "Publish was canceled" msgstr "Публікація скасована" @@ -9760,6 +9868,81 @@ msgstr "Відвантаження даних" msgid "Jump to webpage" msgstr "Перейти на вебсторінку" +# AI Translated +msgid "Material" +msgstr "Матеріал" + +# AI Translated +msgid "Mixed filament" +msgstr "Змішаний філамент" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Деякі змішані філаменти залежать від філаментів, які не будуть опубліковані:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Філамент %d (змішаний)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% потребує %2%, але його не ввімкнено." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% потребує %2%, але його матеріал не буде опубліковано." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Щоб опублікувати змішаний філамент, увімкніть кожен філамент, який він використовує, і виберіть «Повна публікація» або виконайте його вимогу «Тип»." + +# AI Translated +msgid "Publish anyway" +msgstr "Опублікувати попри це" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Публікувати 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Виберіть, які налаштування буде опубліковано у файлі 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Енциклопедія з публікації 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Відеопосібник з публікації 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Змішаний філамент — публікується цілком, коли вище вибрано «Увімкнути»" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Опублікувати цей змішаний філамент та увімкнути + повністю опублікувати його складові філаменти" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Опублікувати цей слот філаменту у файлі 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Повна публікація" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Вбудувати весь філамент цього слота у файл 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Фільтрувати невибрані" + #, c-format, boost-format msgid "Save %s as" msgstr "Зберегти %s як" @@ -9778,6 +9961,10 @@ msgstr "Копіює в цей пресет усі значення, успад msgid "Detach from parent" msgstr "Відʼєднати від батьківського" +# AI Translated +msgid "Save without parent" +msgstr "Зберегти без батьківського" + # AI Translated msgid "Unique preset" msgstr "Незалежний пресет" @@ -10517,10 +10704,18 @@ msgstr "Для виявлення налипання потрібна підго msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Одночасне увімкнення точної висоти Z та підготовчої вежі може спричинити помилки нарізки. Ви все одно хочете увімкнути точну висоту Z?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Плавний таймлапс потребує підготовчої вежі на кожному шарі, що несумісно з параметром «Без розріджених шарів». Параметр «Без розріджених шарів» вимкнено." + # AI Translated msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Для плавного таймлапсу потрібна підготовча вежа. Без підготовчої вежі на моделі можуть виникати дефекти. Ви хочете увімкнути підготовчу вежу?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "Параметр «Без розріджених шарів» несумісний із плавним таймлапсом, який потребує підготовчої вежі на кожному шарі. Таймлапс перемкнено в традиційний режим." + msgid "Still print by object?" msgstr "Все одно друкувати кожен обʼєкт окремо?" @@ -10911,9 +11106,6 @@ msgstr "Сумісні профілі процесів" msgid "Printable space" msgstr "Місце для друку" -msgid "Printer Agent" -msgstr "Агент принтера" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Виберіть реалізацію мережевого агента для звʼязку з принтером. Доступні агенти реєструються під час запуску." @@ -11173,12 +11365,12 @@ msgstr "%s: %s" msgid "No modifications need to be copied." msgstr "Немає змін для копіювання." -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Параметри копіювання" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Змінити параметри %s" # AI Translated @@ -11337,12 +11529,6 @@ msgstr "Кількість екструдерів" msgid "Capabilities" msgstr "Можливості" -msgid "Left: " -msgstr "Лівий: " - -msgid "Right: " -msgstr "Правий: " - msgid "Show all presets (including incompatible)" msgstr "Показувати всі профілі (включаючи несумісні)" @@ -11717,30 +11903,6 @@ msgstr "Обʼєми промивки для зміни філаменту" msgid "Please choose the filament colour" msgstr "Будь ласка, виберіть колір філаменту" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Нативний перегляд у Wayland потребує відеоприймача GStreamer GTK. Встановіть плагін gtksink для GStreamer, а потім перезапустіть OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Не вдалося ініціалізувати нативний відеоприймач GStreamer для Wayland. Перевірте встановлення плагіна GStreamer GTK." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Для виконання цього завдання потрібен Windows Media Player! Бажаєте увімкнути 'Windows Media Player' для вашої операційної системи?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource не було правильно зареєстровано для відтворення медіафайлів! Натисніть \"Так\", щоб зареєструвати його повторно. Вас буде сповіщено двічі" - -# AI Translated -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Відсутній компонент BambuSource, зареєстрований для відтворення медіа! Перевстановіть OrcaSlicer або зверніться по допомогу до спільноти." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Використовується BambuSource з іншої інсталяції, відтворення відео може працювати неправильно! Натисніть \"Так\", щоб виправити це." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Вашій системі бракує кодеків H.264 для GStreamer, які необхідні для відтворення відео. (Спробуйте встановити пакети gstreamer1.0-plugins-bad або gstreamer1.0-libav, а потім перезапустіть Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Хмарний агент недоступний. Перезапустіть OrcaSlicer і спробуйте ще раз." @@ -12231,16 +12393,23 @@ msgstr "Ремонт скасовано" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Копіювання %1% у %2% не вдалося: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Завантаження нових профілів виробників: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Пакет конфігурації: %1% оновлено до %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Не вдалося завантажити профілі виробників: " + # AI Translated msgid "Please check any unsaved changes before updating the configuration." msgstr "Будь ласка, перевірте незбережені зміни перед оновленням конфігурації." -msgid "Configuration package: " -msgstr "Пакет конфігурації: " - -msgid " updated to " -msgstr " оновлено до " - msgid "Open G-code file:" msgstr "Відкрити файл G-коду:" @@ -12305,11 +12474,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input Shaping підтримується лише Klipper, RepRapFirmware і Marlin 2." -msgid "Grouping error: " -msgstr "Помилка групування: " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Помилка групування: %1% не можна розмістити в лівому соплі" -msgid " can not be placed in the " -msgstr " не можливо помістити у " +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Помилка групування: %1% не можна розмістити в правому соплі" msgid "Group error in manual mode. Please check nozzle count or regroup." msgstr "Помилка групування в ручному режимі. Перевірте кількість сопел або перегрупуйте." @@ -12423,6 +12596,10 @@ msgstr "%1% знаходиться надто близько до інших, щ msgid "%1% is too tall, and collisions will be caused." msgstr "%1% занадто високий, і можуть виникнути зіткнення." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Взаємне розташування моделі та підготовчої вежі не відповідає вимогам функції «Без розріджених шарів». Змініть їхнє взаємне розташування, зменште висоту моделі або вимкніть параметр «Без розріджених шарів»." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " знаходиться надто близько до зони відчуження, при друку можуть виникати колізії." @@ -12462,6 +12639,10 @@ msgstr "Якщо ви все одно хочете друкувати, може msgid "No extrusions under current settings." msgstr "Немає екструзій під час поточних налаштувань." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Використовується змішаний філамент із градієнтом, але параметр «Підшар змішаного кольору» вимкнено. Градієнт не буде надруковано." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Плавний режим таймлапсу не підтримується, коли послідовність \"по обʼєкт\" увімкнено." @@ -12502,6 +12683,10 @@ msgstr "Можливо, ви захочете зменшити розмір мо msgid "Variable layer height is not supported with Organic supports." msgstr "Змінна висота шару не підтримується з Органічними підтримками." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Філамент вежі протирання не може бути змішаним філаментом." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Різні діаметри сопел та різні діаметри філаменту можуть працювати некоректно коли ввімкнена підготовча вежа. Це експериментальна функція, тому використовуйте її з обережністю." @@ -12793,6 +12978,9 @@ msgstr "Використовувати 3MF замість G-коду" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Увімкніть, якщо принтер приймає файл 3MF як завдання друку. Якщо увімкнено, Orca Slicer надсилає нарізаний файл як .gcode.3mf замість звичайного файлу .gcode." +msgid "Printer Agent" +msgstr "Агент принтера" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Виберіть реалізацію мережевого агента для звʼязку з принтером." @@ -12881,8 +13069,7 @@ msgstr "мм або %" msgid "Other layers" msgstr "Інші шари" -# AI Translated -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Температура столу для всіх шарів, крім першого. Значення 0 означає, що філамент не підтримує друк на Cool Plate SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13889,6 +14076,10 @@ msgstr "Вирівняний прямолінійний" msgid "Concentric" msgstr "Концентричний" +# AI Translated +msgid "Spiral Inset" +msgstr "Спіральний відступ" + msgid "Hilbert Curve" msgstr "Крива Гільберта" @@ -13979,13 +14170,13 @@ msgstr "Порядок заповнення верхньої поверхні" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Напрямок, у якому заповнюються верхні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n" -"Назовні починає з центру поверхні, тож надлишок матеріалу виштовхується до краю, де він найменш помітний. Усередину починає з краю та завершується щільними кривими в центрі.\n" -"Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку." +"Напрямок заповнення верхніх поверхонь під час використання шаблону, що йде від центру (Концентричний, Спіральний відступ, Хорди Архімеда, Спіральна октограма).\n" +"Назовні починає від центру поверхні, тож надлишок матеріалу виштовхується до краю, де він найменш помітний. Всередину починає від краю й завершується тісними вигинами в центрі.\n" +"Типово використовується порядок за найкоротшим шляхом, який може йти в будь-якому напрямку." # AI Translated msgid "Bottom surface fill order" @@ -13993,13 +14184,13 @@ msgstr "Порядок заповнення нижньої поверхні" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Напрямок, у якому заповнюються нижні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n" -"Усередину починає кожну поверхню з ширших зовнішніх кривих, що покращує зчеплення першого шару на столах, де щільні криві в центрі можуть не прилипати. Назовні починає з центру, виштовхуючи надлишок матеріалу до краю.\n" -"Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку." +"Напрямок заповнення нижніх поверхонь під час використання шаблону, що йде від центру (Концентричний, Спіральний відступ, Хорди Архімеда, Спіральна октограма).\n" +"Всередину починає кожну поверхню з ширших зовнішніх вигинів, що поліпшує прилипання першого шару до столів, до яких тісні вигини в центрі можуть не приставати. Назовні починає від центру, виштовхуючи надлишок матеріалу до краю.\n" +"Типово використовується порядок за найкоротшим шляхом, який може йти в будь-якому напрямку." msgid "Internal solid infill pattern" msgstr "Шаблон внутрішнього суцільного заповнення" @@ -14104,6 +14295,14 @@ msgstr "Проти годинникової стрілки" msgid "Clockwise" msgstr "За годинниковою стрілкою" +# AI Translated +msgid "Distance to rod" +msgstr "Відстань до штанги" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Горизонтальна відстань від кінчика сопла до дальшого краю штанги. Використовується для уникнення зіткнень під час друку по обʼєктах." + msgid "Height to rod" msgstr "Висота до сопла" @@ -14296,8 +14495,10 @@ msgstr "Час шару" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Вентилятор охолодження деталей вмикається для шарів, розрахунковий час яких менший за це значення. Швидкість вентилятора інтерполюється між мінімальною та максимальною швидкістю вентилятора відповідно до часу друку шару" +# AI Translated +msgctxt "second" msgid "s" -msgstr "c" +msgstr "с" msgid "Default color" msgstr "Типовий колір" @@ -14627,6 +14828,62 @@ msgstr "Матеріал підтримки" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Допоміжний матеріал зазвичай використовується для друку підтримки" +# AI Translated +msgid "Is mixed filament" +msgstr "Є змішаним філаментом" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Визначає, чи є цей слот філаменту змішаним філаментом, складеним з кількох фізичних філаментів" + +# AI Translated +msgid "Mixed filament components" +msgstr "Компоненти змішаного філаменту" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Розділені комами індекси філаментів-компонентів, починаючи з 1, наприклад \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Частки підшарів змішаного філаменту" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Розділені комами значення часток, сума яких дорівнює 1.0, наприклад \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Градієнт змішаного філаменту" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Вмикає режим градієнта за віссю Z для підшарів змішаного філаменту. Коли увімкнено, частки підшарів змінюються лінійно від шару до шару." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Діапазон градієнта змішаного філаменту" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Початкова та кінцева частки першого компонента в режимі градієнта. Пара значень через кому, наприклад \"0.10,0.90\" означає від 10% до 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Крива градієнта змішаного філаменту" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Необовʼязкова власна крива у стилі Photoshop, що зіставляє поступ за віссю Z із часткою першого компонента. Записується як контрольні точки, розділені вертикальними рисками, у вигляді \"x,y\" (застарілий формат) або \"x,y,m_in,m_out\", коли потрібно перевизначити дотичну (порожнє значення або \"nan\" означає типове значення PCHIP). x належить до [0,1]; y обмежується налаштованим діапазоном часток, наприклад \"0,0.15|0.5,0.50|1,0.85\". Якщо поле порожнє, замість цього використовується лінійний gradient_range." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Градієнт змішаного філаменту для кожної частини" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Коли режим градієнта увімкнено, градієнт застосовується до кожної частини збірки окремо, а не до всієї збірки як до єдиного діапазону Z." + msgid "Filament printable" msgstr "Філамент придатний для друку" @@ -15973,8 +16230,9 @@ msgid "The allowed maximum output force of Y axis" msgstr "Максимальна дозволена вихідна сила осі Y" # AI Translated +msgctxt "Newton" msgid "N" -msgstr "N" +msgstr "Н" msgid "Bed mass of the Y axis" msgstr "Маса столу осі Y" @@ -15982,6 +16240,8 @@ msgstr "Маса столу осі Y" msgid "The machine bed mass load of Y axis" msgstr "Маса навантаження столу машини на вісь Y" +# AI Translated +msgctxt "gram" msgid "g" msgstr "г" @@ -16313,8 +16573,8 @@ msgid "Reduce infill retraction" msgstr "Зменшити втягування заповнення" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Не втягувати, коли переміщення повністю проходить у зоні заповнення. Це означає, що витікання не буде видно. Це може зменшити кількість втягувань для складних моделей і заощадити час друку, але сповільнює нарізку та генерацію G-коду. Зверніть увагу, що z-hop також не виконується в зонах, де втягування пропускається." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Не втягувати, коли переміщення повністю проходить у зоні заповнення. Це означає, що витікання не буде видно. Це може зменшити кількість втягувань для складних моделей і заощадити час друку, але сповільнює нарізку та генерацію G-коду. Зверніть увагу, що Z-hop також не виконується в зонах, де втягування пропускається." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Цей параметр знижує температуру неактивних екструдерів, щоб запобігти підтіканням." @@ -16350,6 +16610,20 @@ msgstr "Виявлення стінок що нависають" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Визначити відсоток нависання відносно до ширини лінії та використовувати для друку іншу швидкість. Для 100%%-вого нависання використовується швидкість моста." +# AI Translated +msgid "Print unsupported walls last" +msgstr "Друкувати неопорні стінки останніми" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Контури стінок, що повністю висять у повітрі, друкуються лише тоді, коли їх є чим утримати:\n" +"вони екструдуються після інших стінок свого острова, починаючи з найвнутрішнішої, незалежно від порядку стінок.\n" +"Контур, який можуть закріпити лише мости цього шару, чекає, доки ці мости буде надруковано, тоді як контур, що йде вздовж опертої стінки, зберігає своє місце перед заповненням, якому він потрібен як якір." + # AI Translated msgid "Outer walls" msgstr "Зовнішні стінки" @@ -16489,7 +16763,7 @@ msgstr "Величина втягування після протирання" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Довжина швидкого втягування після протирання, відносно довжини втягування.\n" @@ -16538,7 +16812,7 @@ msgstr "Коли втягування спрацьовує перед зміно msgid "Z-hop height" msgstr "Висота Z-підйому" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Під час кожного втягування сопло трохи піднімається, щоб створити зазор між соплом та об’єктом друку. Це запобігає зіткненню сопла з об’єктом друку під час переміщення. Використання спіральної лінії підняття по осі Z може запобігти появі ниток" msgid "Z-hop lower boundary" @@ -16796,6 +17070,39 @@ msgstr "Протирати на контурах" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Щоб звести до мінімуму видимість шва при екструзії із замкнутим контуром,Невеликий рух усередину виконується до виходу екструдера з контуру." +# AI Translated +msgid "Wipe inward" +msgstr "Протирання всередину" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Застосовується лише до зовнішніх стінок, зокрема до контурів отворів. Під час протирання переміщує гаряче сопло до вже надрукованих внутрішніх стінок, щоб зменшити повторне нагрівання щойно надрукованого пластику та сліди шва.\n" +"\n" +"Особливо корисно за висоти шару менше 0,1 мм, де сліди протирання помітніші.\n" +"\n" +"Використовує звичайне протирання, якщо поруч немає вже надрукованої внутрішньої стінки (ділянки з однією стінкою або порядок стінок Зовнішня/Внутрішня) або якщо не вдається знайти опертий шлях усередину, наприклад у тісних кутах чи розривах шва." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Відстань протирання всередину" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Відстань, на яку шлях протирання зміщується від зовнішнього контуру, задається в міліметрах або у відсотках від фактичної ширини екструзії зовнішньої стінки.\n" +"\n" +"Наприклад, 50% зміщує шлях на половину ширини зовнішньої стінки. Фактичне зміщення обмежується як реальною шириною зовнішньої стінки, так і доступним проміжком до сусідньої стінки, тому значення понад 100% або еквівалентна абсолютна відстань не дають додаткового ефекту. Задайте 0, щоб вимкнути зміщення." + msgid "Wipe before external loop" msgstr "Протирати перед зовнішнім контуром" @@ -17072,8 +17379,9 @@ msgstr "Бере новий інструмент, не чекаючи, доки msgid "No sparse layers (beta)" msgstr "Без розріджених шарів (бета)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Якщо увімкнено, вежа витирання не друкується на шарах без змін інструментів. На шарах із зміною інструменту екструдер рухатиметься вниз, щоб надрукувати вежу витирання. Користувач несе відповідальність за те, щоб не було зіткнення з друком." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Якщо увімкнено, вежу протирання не буде надруковано на шарах без змін інструменту. На шарах зі зміною інструменту екструдер опуститься вниз, щоб надрукувати вежу протирання, тож вежа опиняється нижче моделі, і головці доводиться тягнутися до неї вниз. Компонування, за яких це призвело б до зіткнення з уже надрукованим обʼєктом, відхиляються. Не діє за плавного таймлапсу чи виявлення налипань на соплі, яким потрібна вежа на кожному шарі." msgid "Prime all printing extruders" msgstr "Підготовка всіх друкуючих екструдерів" @@ -17098,6 +17406,34 @@ msgstr "" msgid "Cyclic" msgstr "Циклічно" +# AI Translated +msgid "Cyclic order" +msgstr "Циклічний порядок" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Власна послідовність філаментів, яку використовує циклічний порядок змін інструменту, у вигляді номерів філаментів через кому (напр. «3,2,1,4»).\n" +"Кожен шар друкує свої філаменти за цією послідовністю; філаменти, яких немає в переліку, друкуються останніми, за зростанням.\n" +"Залиште порожнім, щоб перебирати філаменти за зростанням." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Застосовувати циклічний порядок до першого шару" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Застосовує циклічний порядок змін інструменту також і до першого шару.\n" +"Типово це вимкнено, оскільки перший шар натомість упорядковується для найкращого прилипання до столу: філаменти, якими друкуються дрібні крихкі елементи першого шару, друкуються останніми, тож наступні зміни інструменту та переміщення рідше зривають ці слабко закріплені частини. Цей порядок першого шару враховує також власну послідовність філаментів для першого шару, якщо її задано. Перевага циклічного порядку (додаткові зміни інструменту дають кожному шару більше часу на охолодження) до першого шару не стосується, бо він друкується повільно й гарячим задля прилипання.\n" +"Вмикайте це, лише якщо вам потрібна точно та сама послідовність інструментів на кожному шарі, зокрема на першому, ціною цієї оптимізації прилипання." + msgid "Slice gap closing radius" msgstr "Радіус закриття пробілів під час нарізування" @@ -17107,9 +17443,6 @@ msgstr "Під час розрізання тріщини на трикутну msgid "Slicing Mode" msgstr "Режим нарізки" -msgid "Other" -msgstr "Інший" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Використовуйте «парний-непарний» для моделей літаків 3DLabPrint. Використовуйте «Закрити отвори», щоб закрити всі отвори в моделі." @@ -17622,6 +17955,14 @@ msgstr "" "\n" "Якщо встановити значення у параметрі \"Кількість втягування перед витиранням\" нижче, надлишкове втягування буде виконано перед витиранням, інакше воно буде виконано після нього." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Підшар змішаного кольору" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Вмикає розбиття на підшари змішаного кольору. Коли увімкнено, шари, що містять філаменти змішаного кольору, розбиваються на підшари для отримання ефекту змішування кольорів." + # AI Translated msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Вежа протирання може використовуватися для очищення залишків на соплі та стабілізації тиску в камері всередині сопла, щоб уникнути дефектів зовнішнього вигляду під час друку обʼєктів." @@ -18137,6 +18478,14 @@ msgstr "Без перевірки" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Не виконувати жодних перевірок дійсності, наприклад перевірку конфліктів шляхів G-коду." +# AI Translated +msgid "Strict mode" +msgstr "Суворий режим" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Завершує роботу з ненульовим кодом, коли нарізка видає некритичне попередження, яке інакше лише записується в журнал, наприклад модель, що потребує підтримок, коли підтримки вимкнено. Використовуйте це в CI або скриптових конвеєрах, які ніколи не мають видавати непомітно зіпсовану нарізку. Кожне таке попередження також наводиться зі сталим класом у масиві `warnings` файлу result.json, який створюється лише в Linux. Не можна поєднувати з --no-check, який пропускає перевірку підтримок." + msgid "Normative check" msgstr "Нормативна перевірка" @@ -18149,11 +18498,28 @@ msgstr "Вихідна інформація про модель" msgid "This outputs the model’s information." msgstr "Виведіть інформацію про модель." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Перевірити сітку (JSON у stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "Виводить у stdout зведення JSON щодо кожного завантаженого обʼєкта й завершує роботу: його обмежувальні паралелепіпеди та грані опуклої оболонки, на які його можна покласти, з їхніми нормалями, площами й центрами. Саме з цих граней вибирають параметри --ground-*. Машиночитна альтернатива --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Перевірити малювання (JSON у stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "Виводить структуроване зведення JSON щодо кожного намальованого шару (підтримки, шов, колір MMU, шорстка поверхня), уже збереженого в завантаженій моделі, — кількість граней, площу поверхні та обмежувальний паралелепіпед у координатах сітки для кожного стану — і завершує роботу. Машиночитна альтернатива відкриттю інструментів малювання в інтерфейсі." + msgid "Export Settings" msgstr "Експортувати налаштування" -msgid "This exports settings to a file." -msgstr "Експортувати налаштування у файл." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Це експортує налаштування у файл. Використовуйте -, щоб записати їх у stdout." msgid "Send progress to pipe" msgstr "Надіслати прогрес до каналу" @@ -18209,6 +18575,30 @@ msgstr "Обертати навколо осі Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Кут обертання навколо осі Y у градусах." +# AI Translated +msgid "Ground largest face" +msgstr "Покласти на найбільшу грань" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладе кожен обʼєкт на найбільшу грань його опуклої оболонки й опускає його на стіл. З однакових за площею граней зберігається та, що вже обернена донизу. Обʼєкти без достатньо великої грані для опори лишаються без змін. Перетворення виконуються в порядку командного рядка, тож повороти, задані до цього параметра, враховуються. --orient 1 виконується після всіх перетворень і замінює орієнтацію." + +# AI Translated +msgid "Ground face by normal" +msgstr "Покласти на грань за нормаллю" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладе кожен обʼєкт на ту грань опуклої оболонки, зовнішня нормаль якої найближча до напрямку NX,NY,NZ, і опускає його на стіл. Напрямок задається в координатах обʼєкта, які включають повороти, задані до цього параметра, і збігаються з осями столу, якщо вхідний файл не повертає обʼєкт. Наприклад, 1,0,0 ставить обʼєкт на його бік +X. --orient 1 виконується після всіх перетворень і замінює орієнтацію." + +# AI Translated +msgid "Ground face at point" +msgstr "Покласти на грань у точці" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Кладе кожен обʼєкт на ту грань опуклої оболонки, що містить точку X,Y,Z, і опускає його на стіл. Точка задається в координатах обʼєкта, які включають повороти, задані до цього параметра; --inspect-mesh подає центри граней саме в них. Обʼєкти без такої грані лишаються без змін, а запуск завершується помилкою, якщо такої грані немає в жодного обʼєкта. --orient 1 виконується після всіх перетворень і замінює орієнтацію." + msgid "Scale the model by a float factor." msgstr "Масштабуйте модель за допомогою плаваючого коефіцієнта" @@ -18728,6 +19118,10 @@ msgstr "Не вдалося побудувати сітку файлу моде msgid "The supplied file couldn't be read because it's empty." msgstr "Наданий файл не вдалося прочитати, оскільки він порожній" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Формат файлу несумісний, і його не вдається прочитати." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Невідомий формат файлу: вхідний файл повинен мати розширення .stl, .obj або .amf (.xml)." @@ -20244,12 +20638,12 @@ msgstr "Показувати лише назви принтерів зі змі msgid "Only display the filament names with changes to filament presets." msgstr "Показувати лише назви філаментів зі змінами у пресетах філаменту." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Будуть відображатися лише назви принтерів з пресетами принтера користувача, і кожен обраний пресет буде експортовано у форматі ZIP." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Будуть відображатися лише назви філаментів з налаштуваннями філаменту користувача, \n" "і всі налаштування філаменту користувача для кожної вибраної назви філаменту \n" @@ -20257,7 +20651,7 @@ msgstr "" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Будуть відображатися лише назви принтерів зі зміненими налаштуваннями процесу, \n" "і всі налаштування процесу користувача для кожної вибраної назви принтера будуть \n" @@ -20499,7 +20893,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Нам потрібна інформація для встановлення джерела проблеми. Докладний посібник дивіться на сторінці wiki." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Кнопка «Пакувати» збирає файл проєкту та журнали поточного сеансу в один zip-файл." # AI Translated @@ -20543,7 +20937,7 @@ msgstr "Рівень журналу" msgid "Stored logs" msgstr "Збережені логи" -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Запаковує всі збережені логи у файл zip." msgid "Profiles" @@ -20610,7 +21004,7 @@ msgstr "Тип принтера не знайдено, будь ласка ви msgid "Authorizing..." msgstr "Авторизування..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Помилка. Не вдалося отримати api-токен для авторизування" msgid "Could not parse server response." @@ -21074,8 +21468,9 @@ msgstr "Вилучено" msgid "Enable smart filament assign: Assign one filament to multiple nozzles to maximize savings" msgstr "Дозволити розумне призначення філаменту: Призначте одну нитку до кількох сопел, щоб максимально заощадити" -msgid "Fila Saving" -msgstr "Збереження філаменту" +# AI Translated +msgid "File Saving" +msgstr "Збереження файлу" msgid "Don't remind me again" msgstr "Не нагадувати мені більше" @@ -21366,6 +21761,18 @@ msgstr "Дію не можливо завершити. Продовжити?" msgid "Skipping objects." msgstr "Пропускання обʼєктів." +# AI Translated +msgid "Material Ratio" +msgstr "Частка матеріалу" + +# AI Translated +msgid "Model Height" +msgstr "Висота моделі" + +# AI Translated +msgid "Ratio" +msgstr "Частка" + msgid "Select Filament" msgstr "Вибрати філамент" @@ -21445,6 +21852,9 @@ msgstr "Перезапустити зараз" msgid "NO RAMMING AT ALL" msgstr "ВЗАГАЛІ БЕЗ УТРАМБУВАННЯ" +msgid "s" +msgstr "c" + msgid "Volumetric speed" msgstr "Обʼємна швидкість" @@ -21626,12 +22036,14 @@ msgid "Drying-Dehumidifying" msgstr "Сушіння — осушення" # AI Translated -msgid " maximum drying temperature is " -msgstr " максимальна температура сушіння — " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Максимальна температура сушіння для %s — %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " мінімальна температура сушіння — " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Мінімальна температура сушіння для %s — %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -22081,6 +22493,129 @@ msgstr "" "Уникнення деформації\n" "Чи знаєте ви, що при друку матеріалами, схильними до деформації, такими як ABS, відповідне підвищення температури столу може зменшити ймовірність деформації?" +#~ msgid "Other" +#~ msgstr "Інший" + +#~ msgid "Left: " +#~ msgstr "Лівий: " + +#~ msgid "Right: " +#~ msgstr "Правий: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Максимальна температура не повинна перевищувати " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Мінімальна температура не повинна бути нижчою ніж " + +#~ msgid "up to" +#~ msgstr "аж до" + +#~ msgid "above" +#~ msgstr "вище" + +#~ msgid "from" +#~ msgstr "від" + +#~ msgid "Configuration package: " +#~ msgstr "Пакет конфігурації: " + +#~ msgid " updated to " +#~ msgstr " оновлено до " + +#~ msgid "Grouping error: " +#~ msgstr "Помилка групування: " + +#~ msgid " can not be placed in the " +#~ msgstr " не можливо помістити у " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " максимальна температура сушіння — " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " мінімальна температура сушіння — " + +# AI Translated +#~ msgid "needs" +#~ msgstr "потребує" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "не увімкнено" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "матеріал не опубліковано" + +#~ msgid "Select the language" +#~ msgstr "Вибрати мову" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Вибрати плагін" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Напрямок, у якому заповнюються верхні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n" +#~ "Назовні починає з центру поверхні, тож надлишок матеріалу виштовхується до краю, де він найменш помітний. Усередину починає з краю та завершується щільними кривими в центрі.\n" +#~ "Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Напрямок, у якому заповнюються нижні поверхні при використанні шаблону з центром (Концентричний, Хорди Архімеда, Спіральна октограма).\n" +#~ "Усередину починає кожну поверхню з ширших зовнішніх кривих, що покращує зчеплення першого шару на столах, де щільні криві в центрі можуть не прилипати. Назовні починає з центру, виштовхуючи надлишок матеріалу до краю.\n" +#~ "Типово використовується впорядкування за найкоротшим шляхом, яке може йти в будь-якому напрямку." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Якщо увімкнено, вежа витирання не друкується на шарах без змін інструментів. На шарах із зміною інструменту екструдер рухатиметься вниз, щоб надрукувати вежу витирання. Користувач несе відповідальність за те, щоб не було зіткнення з друком." + +#~ msgid "This exports settings to a file." +#~ msgstr "Експортувати налаштування у файл." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Нативний перегляд у Wayland потребує відеоприймача GStreamer GTK. Встановіть плагін gtksink для GStreamer, а потім перезапустіть OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Не вдалося ініціалізувати нативний відеоприймач GStreamer для Wayland. Перевірте встановлення плагіна GStreamer GTK." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Для виконання цього завдання потрібен Windows Media Player! Бажаєте увімкнути 'Windows Media Player' для вашої операційної системи?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource не було правильно зареєстровано для відтворення медіафайлів! Натисніть \"Так\", щоб зареєструвати його повторно. Вас буде сповіщено двічі" + +# AI Translated +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Відсутній компонент BambuSource, зареєстрований для відтворення медіа! Перевстановіть OrcaSlicer або зверніться по допомогу до спільноти." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Використовується BambuSource з іншої інсталяції, відтворення відео може працювати неправильно! Натисніть \"Так\", щоб виправити це." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Вашій системі бракує кодеків H.264 для GStreamer, які необхідні для відтворення відео. (Спробуйте встановити пакети gstreamer1.0-plugins-bad або gstreamer1.0-libav, а потім перезапустіть Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +#~ msgid "g" +#~ msgstr "г" + +#~ msgid "Fila Saving" +#~ msgstr "Збереження філаменту" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/vi/OrcaSlicer_vi.po b/localization/i18n/vi/OrcaSlicer_vi.po index 00a9a558ba..65ad344552 100644 --- a/localization/i18n/vi/OrcaSlicer_vi.po +++ b/localization/i18n/vi/OrcaSlicer_vi.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2025-10-02 17:43+0700\n" "Last-Translator: \n" "Language-Team: hainguyen.ts13@gmail.com\n" @@ -2568,15 +2568,6 @@ msgstr "Có bản cập nhật khả dụng. Hãy mở hộp thoại gói cài msgid "%s has been removed." msgstr "%s đã bị xóa." -msgid "Switching application language" -msgstr "Đang chuyển ngôn ngữ ứng dụng" - -msgid "Select the language" -msgstr "Chọn ngôn ngữ" - -msgid "Language" -msgstr "Ngôn ngữ" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -3077,6 +3068,10 @@ msgstr "Chỉnh sửa" msgid "Merge with" msgstr "Gộp với" +# AI Translated +msgid "Decompose Color" +msgstr "Phân tách màu" + # AI Translated msgid "Delete this filament" msgstr "Xóa filament này" @@ -3389,6 +3384,10 @@ msgstr "Lắp ráp" msgid "Merge parts to an object" msgstr "Gộp các phần thành một vật thể" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "Sử dụng chiều cao lớp biến đổi cùng với lớp con màu pha trộn có thể làm giảm chất lượng pha màu." + # AI Translated msgid "Add layers" msgstr "Thêm lớp" @@ -3872,12 +3871,14 @@ msgid "Switch track at Filament Track Switch" msgstr "Chuyển đường dẫn tại Filament Track Switch" # AI Translated -msgid "The maximum temperature cannot exceed " -msgstr "Nhiệt độ tối đa không được vượt quá " +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "Nhiệt độ tối đa không được vượt quá %d" # AI Translated -msgid "The minmum temperature should not be less than " -msgstr "Nhiệt độ tối thiểu không được thấp hơn " +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "Nhiệt độ tối thiểu không được thấp hơn %d" # AI Translated msgid "Type to filter..." @@ -4828,6 +4829,15 @@ msgstr "" "Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể thẻ SD bị khóa ghi?\n" "Thông báo lỗi: %1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"Sao chép G-code tạm sang G-code đầu ra thất bại.\n" +"Thông báo lỗi: %1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "Sao chép G-code tạm thời sang G-code đầu ra thất bại. Có thể có vấn đề với thiết bị đích, vui lòng thử xuất lại hoặc dùng thiết bị khác. G-code đầu ra bị hỏng ở %1%.tmp." @@ -5040,7 +5050,7 @@ msgstr "" "\n" "Giá trị sẽ được đặt lại về 0." -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "Luân phiên wall phụ không hoạt động tốt khi đảm bảo độ dày shell dọc được đặt thành Tất cả." msgid "" @@ -5086,7 +5096,7 @@ msgstr "" "NO - Giữ chiều cao lớp support độc lập" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height cần nhỏ hơn layer_height.\n" @@ -5094,7 +5104,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "Độ sâu khóa phải nhỏ hơn độ sâu skin.\n" @@ -5135,6 +5145,10 @@ msgstr "" "Yes - Thay đổi các cài đặt này và bật chế độ spiral tự động\n" "No - Từ bỏ dùng chế độ spiral lần này" +# AI Translated +msgid "N/A" +msgstr "N/A" + msgid "Printing" msgstr "Đang in" @@ -5624,14 +5638,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "Giá trị %s nằm ngoài phạm vi. Phạm vi hợp lệ từ %d đến %d." #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"Là %s%% hay %s %s?\n" -"YES cho %s%%, \n" -"NO cho %s %s." +msgid "Is it %s%% or %s %s?" +msgstr "Là %s%% hay %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5653,30 +5664,22 @@ msgstr "Mẫu không hợp lệ. Dùng N, N#K, hoặc danh sách phân cách d msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "Định dạng không hợp lệ. Mong đợi định dạng vector: \"%1%\"" -# AI Translated -msgid "N/A" -msgstr "N/A" - # AI Translated msgid "System agents" msgstr "Tác nhân hệ thống" -# AI Translated -msgid "No plugin selected" -msgstr "Chưa chọn plugin" - # AI Translated msgid "Add plugin" msgstr "Thêm plugin" -# AI Translated -msgid "Select plugin" -msgstr "Chọn plugin" - # AI Translated msgid "Remove plugin" msgstr "Xóa plugin" +# AI Translated +msgid "No plugin selected" +msgstr "Chưa chọn plugin" + # AI Translated msgid "Configure" msgstr "Cấu hình" @@ -5958,14 +5961,20 @@ msgstr "Đặt về mức tối ưu" msgid "Regroup filament" msgstr "Nhóm lại filament" -msgid "up to" -msgstr "lên đến" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "lên đến %1% mm" -msgid "above" -msgstr "trên" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "trên %1% mm" -msgid "from" -msgstr "từ" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "từ %1% đến %2% mm" msgid "Usage" msgstr "Sử dụng" @@ -6349,7 +6358,7 @@ msgstr "Thể tích:" msgid "Size:" msgstr "Kích thước:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "Đã tìm thấy xung đột đường đi G-code tại lớp %d, Z = %.2lfmm. Vui lòng tách các vật thể xung đột ra xa hơn (%s <-> %s)." @@ -6681,16 +6690,24 @@ msgstr "Lưu dự án thành" msgid "Save current project as" msgstr "Lưu dự án hiện tại thành" +# AI Translated +msgid "Publish 3MF" +msgstr "Xuất bản 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "Xuất một tệp 3MF có nhúng các cài đặt đã chọn" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "Nhập 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "Tải model" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "Nhập lưu trữ Zip" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "Tải các model chứa trong lưu trữ zip" msgid "Import Configs" @@ -8008,6 +8025,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "Dưới" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "Cài đặt này không chỉ định loại năng lực plugin." + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "Cài đặt này chỉ định một loại năng lực plugin không nhận dạng được: " + # AI Translated msgid "Plugin Selection" msgstr "Chọn plugin" @@ -8288,6 +8313,10 @@ msgstr "Tùy chỉnh bản hiện tại" msgid "The %s nozzle can not print %s." msgstr "Đầu phun %s không thể in %s." +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "Việc in filament màu pha trộn trên máy in một extruder đòi hỏi thay filament và xả thường xuyên, điều này có thể làm tăng đáng kể lượng phế liệu và nguy cơ tắc đầu phun / máng chứa phế liệu." + # AI Translated #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" @@ -8430,12 +8459,44 @@ msgstr "Đồng bộ danh sách filament từ AMS" msgid "Set filaments to use" msgstr "Đặt filament để sử dụng" +# AI Translated +msgid "Add Mixed Filament" +msgstr "Thêm filament pha trộn" + +# AI Translated +msgid "Mixed Filament" +msgstr "Filament pha trộn" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "Xóa filament pha trộn cuối cùng" + +# AI Translated +msgid "Add mixed filament" +msgstr "Thêm filament pha trộn" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "Filament pha trộn có thành phần không hợp lệ hoặc không khớp. Vui lòng chỉnh sửa lại các mục bị ảnh hưởng." + msgid "Search plate, object and part." msgstr "Tìm kiếm bản, đối tượng và phần." msgid "Pellets" msgstr "Viên" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "Filament pha trộn có tham chiếu thành phần bị lỗi" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "Chỉnh sửa / Xóa / Gộp" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "Filament pha trộn đích sử dụng filament vật lý này làm thành phần. Việc gộp sẽ xóa filament vật lý này và có thể làm filament pha trộn không còn hợp lệ. Tiếp tục?" + # AI Translated #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." @@ -8585,8 +8646,16 @@ msgstr "Vui lòng xác nhận G-code trong các preset này an toàn để ngăn msgid "Customized Preset" msgstr "Preset tùy chỉnh" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF8!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "Không thể áp dụng một số cài đặt đã xuất bản:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "Một số khe filament đã bị thay đổi:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "Tên của các thành phần bên trong file STEP không phải định dạng UTF-8!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -8608,10 +8677,10 @@ msgstr "Thể tích của đối tượng bằng không" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "Đối tượng từ file %s quá nhỏ, và có thể đang ở đơn vị mét hoặc inch.\n" -" Bạn có muốn chuyển đổi sang milimét?" +"Bạn có muốn chuyển đổi sang milimét?" msgid "Object too small" msgstr "Đối tượng quá nhỏ" @@ -8628,6 +8697,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "Phát hiện đối tượng nhiều phần" +# AI Translated +msgid "Matching textures to filaments" +msgstr "Đang khớp kết cấu với filament" + +# AI Translated +msgid "Texture Import Warning" +msgstr "Cảnh báo nhập kết cấu" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Tải các file này như một đối tượng đơn với nhiều phần?\n" @@ -8857,6 +8934,22 @@ msgstr "" msgid "Sync now" msgstr "Đồng bộ ngay" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "Nhập kết cấu thất bại. Mô hình có vẻ chứa dữ liệu kết cấu, nhưng không thể hoàn tất quá trình nhập kết cấu. Mô hình sẽ chỉ được nhập dưới dạng hình học." + +# AI Translated +msgid "Applying texture colors..." +msgstr "Đang áp dụng màu kết cấu..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "Đang cập nhật khung nhìn 3D..." + +# AI Translated +msgid "Texture colors applied." +msgstr "Đã áp dụng màu kết cấu." + msgid "You can keep the modified presets for the new project or discard them" msgstr "Bạn có thể giữ các preset đã chỉnh sửa cho dự án mới hoặc loại bỏ chúng" @@ -8988,6 +9081,21 @@ msgstr "Lưu file đã slice dưới dạng:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "File %s đã được gửi đến không gian lưu trữ của máy in và có thể được xem trên máy in." +# AI Translated +msgid "Publish 3MF file as:" +msgstr "Xuất bản tệp 3MF thành:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"Xuất tệp 3MF đã xuất bản thất bại.\n" +"Vui lòng kiểm tra xem thư mục có tồn tại trực tuyến không, hoặc có chương trình khác đang mở tệp này không." + +msgid "Publish" +msgstr "Xuất bản" + # AI Translated msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "Chưa đặt loại đầu phun. Vui lòng đặt đầu phun rồi thử lại." @@ -9218,9 +9326,6 @@ msgstr "Bạn có muốn tiếp tục?" msgid "Language selection" msgstr "Chọn ngôn ngữ" -msgid "Switching application language while some presets are modified." -msgstr "Đang chuyển đổi ngôn ngữ ứng dụng trong khi một số preset đã được chỉnh sửa." - msgid "Asia-Pacific" msgstr "Châu Á-Thái Bình Dương" @@ -9336,6 +9441,9 @@ msgstr "Đường dẫn phiên bản hiện tại: " msgid "General" msgstr "Chung" +msgid "Language" +msgstr "Ngôn ngữ" + msgid "Metric" msgstr "Hệ mét" @@ -9835,9 +9943,6 @@ msgstr "Khi kéo thanh trượt lớp trong bản xem trước đã slice, kết msgid "Dimmed layer brightness" msgstr "Độ sáng của lớp bị làm mờ" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -10227,6 +10332,10 @@ msgstr "Bình xoắn ốc" msgid "First layer filament sequence" msgstr "Trình tự filament lớp đầu tiên" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "Danh sách filament có chứa filament pha trộn. Trình tự filament tùy chỉnh sẽ không có hiệu lực." + msgid "By Layer" msgstr "Theo lớp" @@ -10254,9 +10363,6 @@ msgstr "Chuyển đến trang web xuất bản model" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "Lưu ý: Chuẩn bị có thể mất vài phút. Vui lòng kiên nhẫn." -msgid "Publish" -msgstr "Xuất bản" - msgid "Publish was canceled" msgstr "Xuất bản đã bị hủy" @@ -10273,6 +10379,81 @@ msgstr "Đang tải dữ liệu lên" msgid "Jump to webpage" msgstr "Chuyển đến trang web" +# AI Translated +msgid "Material" +msgstr "Vật liệu" + +# AI Translated +msgid "Mixed filament" +msgstr "Filament pha trộn" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "Một số filament pha trộn phụ thuộc vào các filament sẽ không được xuất bản:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "Filament %d (pha trộn)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% cần %2%, nhưng filament này chưa được bật." + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% cần %2%, nhưng vật liệu của nó sẽ không được xuất bản." + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "Để xuất bản một filament pha trộn, hãy bật mọi filament mà nó sử dụng rồi chọn Xuất bản đầy đủ, hoặc đáp ứng yêu cầu Loại của nó." + +# AI Translated +msgid "Publish anyway" +msgstr "Vẫn xuất bản" + +# AI Translated +msgid "Publish 3MF..." +msgstr "Xuất bản 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "Chọn những cài đặt sẽ được xuất bản trong tệp 3MF" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "Wiki về Xuất bản 3MF" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "Hướng dẫn video về Xuất bản 3MF" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "Filament pha trộn - được xuất bản trọn bộ khi chọn \"Bật\" ở trên" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "Xuất bản filament pha trộn này và bật + xuất bản đầy đủ các filament thành phần của nó" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "Xuất bản khe filament này trong tệp 3MF" + +# AI Translated +msgid "Full Publish" +msgstr "Xuất bản đầy đủ" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "Nhúng toàn bộ filament của khe này vào tệp 3MF" + +# AI Translated +msgid "Filter non-selected" +msgstr "Lọc mục chưa chọn" + #, c-format, boost-format msgid "Save %s as" msgstr "Lưu %s dưới dạng" @@ -10291,6 +10472,10 @@ msgstr "Sao chép tất cả các giá trị kế thừa từ preset cha vào pr msgid "Detach from parent" msgstr "Tách khỏi vật thể cha" +# AI Translated +msgid "Save without parent" +msgstr "Lưu không kèm vật thể cha" + # AI Translated msgid "Unique preset" msgstr "Preset độc lập" @@ -11053,9 +11238,17 @@ msgstr "Prime tower là bắt buộc để phát hiện vón cục. Nếu không msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "Bật cả chiều cao Z chính xác và tháp mồi có thể gây ra lỗi cắt lớp. Bạn vẫn muốn bật chiều cao Z chính xác?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "Timelapse mượt cần prime tower ở mọi lớp, điều này không tương thích với \"Không có lớp thưa\". \"Không có lớp thưa\" đã được tắt." + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "Cần có prime tower để timelapse mượt. Có thể có khuyết điểm trên model nếu không có prime tower. Bạn có muốn bật prime tower?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "\"Không có lớp thưa\" không tương thích với timelapse mượt, vốn cần prime tower ở mọi lớp. Timelapse đã chuyển sang chế độ truyền thống." + msgid "Still print by object?" msgstr "Vẫn in theo đối tượng?" @@ -11429,10 +11622,6 @@ msgstr "Hồ sơ quy trình tương thích" msgid "Printable space" msgstr "Không gian in" -# AI Translated -msgid "Printer Agent" -msgstr "Tác nhân máy in" - # AI Translated msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "Chọn cách triển khai tác nhân mạng cho việc giao tiếp với máy in. Các tác nhân khả dụng được đăng ký khi khởi động." @@ -11692,12 +11881,12 @@ msgid "No modifications need to be copied." msgstr "Không có thay đổi nào cần sao chép." # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "Sao chép tham số" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "Sửa tham số của %s" # AI Translated @@ -11856,14 +12045,6 @@ msgstr "Số lượng đầu đùn" msgid "Capabilities" msgstr "Khả năng" -# AI Translated -msgid "Left: " -msgstr "Trái: " - -# AI Translated -msgid "Right: " -msgstr "Phải: " - msgid "Show all presets (including incompatible)" msgstr "Hiển thị tất cả preset (bao gồm cả không tương thích)" @@ -12266,29 +12447,6 @@ msgstr "Khối lượng xả khi thay filament" msgid "Please choose the filament colour" msgstr "Vui lòng chọn màu filament" -# AI Translated -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "Xem trực tiếp trên Wayland thuần cần GStreamer GTK video sink. Vui lòng cài đặt plugin gtksink cho GStreamer, sau đó khởi động lại OrcaSlicer." - -# AI Translated -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "Khởi tạo GStreamer video sink trên Wayland thuần thất bại. Vui lòng kiểm tra việc cài đặt plugin GStreamer GTK của bạn." - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "Windows Media Player là cần thiết cho tác vụ này! Bạn có muốn bật 'Windows Media Player' cho hệ điều hành của bạn?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource chưa được đăng ký chính xác để phát media! Nhấn Có để đăng ký lại. Bạn sẽ được nhắc hai lần" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "Thiếu thành phần BambuSource đã đăng ký để phát media! Vui lòng cài đặt lại OrcaSlicer hoặc tìm kiếm sự giúp đỡ từ cộng đồng." - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "Đang sử dụng BambuSource từ cài đặt khác, phát video có thể không hoạt động đúng! Nhấn Có để sửa nó." - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "Hệ thống của bạn thiếu codec H.264 cho GStreamer, cần thiết để phát video. (Hãy thử cài đặt gói gstreamer1.0-plugins-bad hoặc gstreamer1.0-libav, sau đó khởi động lại Orca Slicer?)" - # AI Translated msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "Tác nhân cloud không khả dụng. Vui lòng khởi động lại OrcaSlicer rồi thử lại." @@ -12802,15 +12960,22 @@ msgstr "Sửa chữa đã hủy" msgid "Copying of file %1% to %2% failed: %3%" msgstr "Sao chép file %1% sang %2% thất bại: %3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "Đang tải xuống hồ sơ nhà cung cấp mới: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "Gói cấu hình: %1% đã cập nhật lên %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "Tải xuống hồ sơ nhà cung cấp thất bại: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "Cần kiểm tra các thay đổi chưa lưu trước khi cập nhật cấu hình." -msgid "Configuration package: " -msgstr "Gói cấu hình: " - -msgid " updated to " -msgstr " đã cập nhật lên " - msgid "Open G-code file:" msgstr "Mở file G-code:" @@ -12877,12 +13042,14 @@ msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "Input shaping chỉ được Klipper, RepRapFirmware và Marlin 2 hỗ trợ." # AI Translated -msgid "Grouping error: " -msgstr "Lỗi nhóm: " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "Lỗi nhóm: %1% không thể đặt vào đầu phun trái" # AI Translated -msgid " can not be placed in the " -msgstr " không thể được đặt vào " +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "Lỗi nhóm: %1% không thể đặt vào đầu phun phải" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12997,6 +13164,10 @@ msgstr "%1% quá gần các đối tượng khác, và có thể gây va chạm. msgid "%1% is too tall, and collisions will be caused." msgstr "%1% quá cao, và sẽ gây va chạm." +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "Vị trí tương đối giữa mô hình và prime tower không đáp ứng yêu cầu của tính năng \"Không có lớp thưa\". Vui lòng điều chỉnh vị trí tương đối của chúng, hạ chiều cao mô hình, hoặc tắt \"Không có lớp thưa\"." + msgid " is too close to exclusion area, there may be collisions when printing." msgstr " quá gần vùng loại trừ, có thể có va chạm khi in." @@ -13037,6 +13208,10 @@ msgstr "Nếu bạn vẫn muốn in, bạn có thể bật tùy chọn trong Tù msgid "No extrusions under current settings." msgstr "Không có đùn dưới cài đặt hiện tại." +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "Đang dùng filament pha trộn có gradient, nhưng 'Lớp con màu pha trộn' đã bị tắt. Gradient sẽ không được in." + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "Chế độ mượt của timelapse không được hỗ trợ khi trình tự \"theo đối tượng\" được bật." @@ -13075,6 +13250,10 @@ msgstr "Bạn có thể muốn giảm kích thước model của mình hoặc th msgid "Variable layer height is not supported with Organic supports." msgstr "Chiều cao lớp thay đổi không được hỗ trợ với support hữu cơ." +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "Filament của wipe tower không thể là filament pha trộn." + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "Đường kính đầu phun khác nhau và đường kính filament khác nhau có thể không hoạt động tốt khi prime tower được bật. Nó rất thử nghiệm, vì vậy vui lòng tiến hành thận trọng." @@ -13363,6 +13542,10 @@ msgstr "Dùng 3MF thay cho G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "Bật tùy chọn này nếu máy in nhận file 3MF làm tác vụ in. Khi bật, Orca Slicer sẽ gửi file đã slice dưới dạng .gcode.3mf thay vì file .gcode thuần." +# AI Translated +msgid "Printer Agent" +msgstr "Tác nhân máy in" + # AI Translated msgid "Select the network agent implementation for printer communication." msgstr "Chọn cách triển khai tác nhân mạng cho việc giao tiếp với máy in." @@ -13449,7 +13632,7 @@ msgstr "mm hoặc %" msgid "Other layers" msgstr "Lớp khác" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "Nhiệt độ bàn cho các lớp ngoại trừ lớp đầu tiên. Giá trị 0 có nghĩa là filament không hỗ trợ in trên bản Cool SuperTack." msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -14454,6 +14637,10 @@ msgstr "Thẳng hàng căn chỉnh" msgid "Concentric" msgstr "Đồng tâm" +# AI Translated +msgid "Spiral Inset" +msgstr "Xoắn ốc thụt vào" + msgid "Hilbert Curve" msgstr "Đường cong Hilbert" @@ -14545,13 +14732,13 @@ msgstr "Thứ tự lấp bề mặt trên" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Hướng lấp các bề mặt trên khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n" -"Ra ngoài bắt đầu từ tâm bề mặt, nhờ đó vật liệu dư bị đẩy về phía mép nơi ít nhìn thấy nhất. Vào trong bắt đầu từ mép và kết thúc bằng các đường cong hẹp ở tâm.\n" -"Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ." +"Hướng lấp đầy các bề mặt trên khi dùng mẫu xuất phát từ tâm (Đồng tâm, Xoắn ốc thụt vào, Dây cung Archimedes, Xoắn ốc bát giác).\n" +"Ra ngoài bắt đầu từ tâm bề mặt, nên vật liệu dư bị đẩy về phía mép, nơi ít lộ nhất. Vào trong bắt đầu từ mép và kết thúc bằng những đường cong hẹp ở tâm.\n" +"Mặc định dùng thứ tự theo đường đi ngắn nhất, có thể chạy theo hướng nào cũng được." # AI Translated msgid "Bottom surface fill order" @@ -14559,13 +14746,13 @@ msgstr "Thứ tự lấp bề mặt dưới" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"Hướng lấp các bề mặt dưới khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n" -"Vào trong bắt đầu mỗi bề mặt bằng các đường cong ngoài rộng hơn, giúp cải thiện độ bám lớp đầu tiên trên những bàn in mà các đường cong hẹp ở tâm có thể không dính. Ra ngoài bắt đầu từ tâm, đẩy vật liệu dư về phía mép.\n" -"Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ." +"Hướng lấp đầy các bề mặt dưới khi dùng mẫu xuất phát từ tâm (Đồng tâm, Xoắn ốc thụt vào, Dây cung Archimedes, Xoắn ốc bát giác).\n" +"Vào trong bắt đầu mỗi bề mặt bằng những đường cong ngoài rộng hơn, giúp lớp đầu tiên bám tốt hơn trên các bàn in mà những đường cong hẹp ở tâm có thể không dính. Ra ngoài bắt đầu từ tâm, đẩy vật liệu dư về phía mép.\n" +"Mặc định dùng thứ tự theo đường đi ngắn nhất, có thể chạy theo hướng nào cũng được." msgid "Internal solid infill pattern" msgstr "Mẫu infill đặc bên trong" @@ -14669,6 +14856,14 @@ msgstr "Ngược chiều kim đồng hồ" msgid "Clockwise" msgstr "Cùng chiều kim đồng hồ" +# AI Translated +msgid "Distance to rod" +msgstr "Khoảng cách tới thanh" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "Khoảng cách ngang từ mũi đầu phun tới mép xa hơn của thanh. Dùng để tránh va chạm khi in theo đối tượng." + msgid "Height to rod" msgstr "Chiều cao đến thanh" @@ -14857,6 +15052,8 @@ msgstr "Thời gian lớp" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "Quạt làm mát phần sẽ được bật cho các lớp có thời gian ước tính ngắn hơn giá trị này. Tốc độ quạt được nội suy giữa tốc độ quạt tối thiểu và tối đa theo thời gian in lớp." +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -15196,6 +15393,62 @@ msgstr "Vật liệu support" msgid "Support material is commonly used to print supports and support interfaces." msgstr "Vật liệu support thường được sử dụng để in support và giao diện support." +# AI Translated +msgid "Is mixed filament" +msgstr "Là filament pha trộn" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "Xác định xem khe filament này có phải là filament pha trộn gồm nhiều filament vật lý hay không" + +# AI Translated +msgid "Mixed filament components" +msgstr "Thành phần của filament pha trộn" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "Chỉ số của các filament thành phần, bắt đầu từ 1, phân tách bằng dấu phẩy, ví dụ \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "Tỷ lệ lớp con của filament pha trộn" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "Các giá trị tỷ lệ phân tách bằng dấu phẩy, có tổng bằng 1.0, ví dụ \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "Gradient của filament pha trộn" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "Bật chế độ gradient theo phương Z cho các lớp con của filament pha trộn. Khi bật, tỷ lệ các lớp con thay đổi tuyến tính qua các lớp." + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "Phạm vi gradient của filament pha trộn" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "Tỷ lệ đầu và cuối của thành phần thứ nhất ở chế độ gradient. Cặp giá trị phân tách bằng dấu phẩy, ví dụ \"0.10,0.90\" nghĩa là từ 10% đến 90%." + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "Đường cong gradient của filament pha trộn" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "Đường cong tùy chỉnh kiểu Photoshop (tùy chọn) ánh xạ tiến trình theo Z sang tỷ lệ của thành phần thứ nhất. Được mã hóa dưới dạng các điểm điều khiển phân tách bằng dấu gạch đứng, theo dạng \"x,y\" (kiểu cũ) hoặc \"x,y,m_in,m_out\" khi cần ghi đè tiếp tuyến (giá trị trống hoặc \"nan\" nghĩa là dùng mặc định PCHIP). x nằm trong [0,1]; y bị giới hạn trong phạm vi tỷ lệ đã cấu hình, ví dụ \"0,0.15|0.5,0.50|1,0.85\". Khi để trống, gradient_range tuyến tính sẽ được dùng thay thế." + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "Gradient theo từng phần của filament pha trộn" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "Khi chế độ gradient được bật, áp dụng gradient cho từng phần của một cụm lắp ráp một cách độc lập thay vì coi toàn bộ cụm lắp ráp là một phạm vi Z duy nhất." + # AI Translated msgid "Filament printable" msgstr "Filament in được" @@ -16508,6 +16761,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Lực đầu ra tối đa cho phép của trục Y" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -16520,6 +16774,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Tải khối lượng bàn máy của trục Y" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -16846,8 +17101,8 @@ msgid "Reduce infill retraction" msgstr "Giảm rút infill" # AI Translated -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." -msgstr "Không rút khi di chuyển ở vùng infill hoàn toàn. Điều đó có nghĩa là chảy nhựa không thể nhìn thấy. Điều này có thể giảm số lần rút cho model phức tạp và tiết kiệm thời gian in, nhưng làm cho slice và tạo G-code chậm hơn. Lưu ý rằng z-hop cũng không được thực hiện ở những vùng bỏ qua việc rút." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." +msgstr "Không rút khi di chuyển ở vùng infill hoàn toàn. Điều đó có nghĩa là chảy nhựa không thể nhìn thấy. Điều này có thể giảm số lần rút cho model phức tạp và tiết kiệm thời gian in, nhưng làm cho slice và tạo G-code chậm hơn. Lưu ý rằng Z-hop cũng không được thực hiện ở những vùng bỏ qua việc rút." msgid "This option will drop the temperature of the inactive extruders to prevent oozing." msgstr "Tùy chọn này sẽ giảm nhiệt độ của các extruder không hoạt động để ngăn chảy nhựa." @@ -16883,6 +17138,20 @@ msgstr "Phát hiện thành nhô" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "Phát hiện phần trăm nhô tương đối với độ rộng đường và sử dụng tốc độ khác nhau để in. Đối với phần nhô 100%%, tốc độ cầu được sử dụng." +# AI Translated +msgid "Print unsupported walls last" +msgstr "In các thành không được đỡ sau cùng" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"Các vòng wall nằm hoàn toàn lơ lửng trên không chỉ được in khi đã có thứ gì đó giữ được chúng:\n" +"chúng được đùn sau các thành khác trong cùng đảo, bắt đầu từ vòng trong cùng, bất kể thứ tự thành là gì.\n" +"Một vòng mà chỉ các cầu của lớp này mới neo được sẽ đợi cho tới khi các cầu đó được in, trong khi một vòng chạy dọc theo một thành có điểm tựa vẫn giữ vị trí của nó trước infill, vốn cần nó làm điểm neo." + # AI Translated msgid "Outer walls" msgstr "Thành ngoài" @@ -17022,7 +17291,7 @@ msgstr "Lượng rút sau khi lau" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "Độ dài rút nhanh sau khi lau, tương đối so với độ dài rút.\n" @@ -17071,7 +17340,7 @@ msgstr "Khi rút được kích hoạt trước khi đổi công cụ, filament msgid "Z-hop height" msgstr "Chiều cao Z-hop" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "Bất cứ khi nào rút được thực hiện, đầu phun được nâng lên một chút để tạo khoảng trống giữa đầu phun và bản in. Nó ngăn đầu phun va vào bản in khi di chuyển. Sử dụng đường xoắn ốc để nâng Z có thể ngăn dây kéo." msgid "Z-hop lower boundary" @@ -17332,6 +17601,39 @@ msgstr "Lau trên vòng" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "Để giảm thiểu khả năng nhìn thấy đường nối trong đùn vòng kín, một chuyển động vào trong nhỏ được thực hiện trước khi extruder rời khỏi vòng." +# AI Translated +msgid "Wipe inward" +msgstr "Lau vào trong" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"Chỉ áp dụng cho các thành ngoài, kể cả biên của lỗ. Trong lúc lau, đầu phun nóng được đưa về phía các thành trong đã in để giảm việc nung lại phần nhựa vừa in và giảm vết đường nối.\n" +"\n" +"Đặc biệt hữu ích ở chiều cao lớp dưới 0,1 mm, nơi vết lau dễ thấy hơn.\n" +"\n" +"Dùng cách lau thông thường nếu chưa có thành trong liền kề nào được in (vùng chỉ có một thành hoặc thứ tự thành Ngoài/Trong), hoặc nếu không tìm được đường đi vào trong có điểm tựa, ví dụ ở các góc hẹp hay khe hở đường nối." + +# AI Translated +msgid "Wipe inward distance" +msgstr "Khoảng cách lau vào trong" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"Khoảng cách mà đường lau được dịch ra xa khỏi chu vi ngoài, tính bằng milimét hoặc theo phần trăm độ rộng đùn thực tế của thành ngoài.\n" +"\n" +"Ví dụ, 50% dịch đường đi một nửa độ rộng thành ngoài. Độ dịch thực tế bị giới hạn bởi cả độ rộng thật của thành ngoài lẫn khoảng trống còn lại tới thành liền kề, nên các giá trị trên 100% hoặc khoảng cách tuyệt đối tương đương sẽ không có thêm tác dụng. Đặt 0 để tắt việc dịch chuyển." + msgid "Wipe before external loop" msgstr "Lau trước vòng ngoài" @@ -17601,8 +17903,9 @@ msgstr "Lấy công cụ mới mà không chờ nó đạt nhiệt độ in, di msgid "No sparse layers (beta)" msgstr "Không có lớp thưa (beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "Nếu được bật, wipe tower sẽ không được in trên các lớp không có thay đổi công cụ. Trên các lớp có thay đổi công cụ, extruder sẽ di chuyển xuống để in wipe tower. Người dùng chịu trách nhiệm đảm bảo không có va chạm với bản in." +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "Nếu bật, wipe tower sẽ không được in ở những lớp không có đổi công cụ. Ở những lớp có đổi công cụ, extruder sẽ đi xuống để in wipe tower, nên tháp nằm thấp hơn mô hình và đầu công cụ phải với xuống tới đó. Những bố trí khiến điều này va chạm với một vật thể đã in sẽ bị từ chối. Không có tác dụng với timelapse mượt hoặc phát hiện đóng cục ở đầu phun, vì chúng cần có tháp ở mọi lớp." msgid "Prime all printing extruders" msgstr "Nạp tất cả extruder in" @@ -17628,6 +17931,34 @@ msgstr "" msgid "Cyclic" msgstr "Tuần hoàn" +# AI Translated +msgid "Cyclic order" +msgstr "Thứ tự vòng lặp" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"Trình tự filament tùy chỉnh mà thứ tự đổi công cụ theo vòng lặp sử dụng, viết dưới dạng các số filament ngăn cách bằng dấu phẩy (ví dụ \"3,2,1,4\").\n" +"Mỗi lớp in các filament của nó theo trình tự này; các filament không được liệt kê sẽ in sau cùng, theo thứ tự tăng dần.\n" +"Để trống để luân phiên các filament theo thứ tự tăng dần." + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "Áp dụng thứ tự vòng lặp cho lớp đầu tiên" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"Áp dụng thứ tự đổi công cụ theo vòng lặp cho cả lớp đầu tiên.\n" +"Mặc định tùy chọn này tắt, vì lớp đầu tiên được sắp xếp theo hướng bám dính đế tốt nhất: những filament in các chi tiết nhỏ, mỏng manh của lớp đầu tiên sẽ được in sau cùng, nhờ đó các lần đổi công cụ và di chuyển tiếp theo ít có khả năng làm bong những phần bám yếu đó. Thứ tự lớp đầu tiên này cũng tôn trọng trình tự filament tùy chỉnh cho lớp đầu tiên nếu có thiết lập. Lợi ích của thứ tự vòng lặp (thêm lần đổi công cụ giúp mỗi lớp có nhiều thời gian nguội hơn) không áp dụng cho lớp đầu tiên, vốn được in chậm và nóng để bám dính.\n" +"Chỉ bật tùy chọn này nếu bạn cần đúng cùng một trình tự công cụ ở mọi lớp, kể cả lớp đầu, đánh đổi bằng việc mất tối ưu bám dính nói trên." + msgid "Slice gap closing radius" msgstr "Bán kính đóng khe slice" @@ -17637,9 +17968,6 @@ msgstr "Vết nứt nhỏ hơn 2x bán kính đóng khe được lấp trong sli msgid "Slicing Mode" msgstr "Chế độ slice" -msgid "Other" -msgstr "Khác" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "Sử dụng \"Chẵn-lẻ\" cho model máy bay 3DLabPrint. Sử dụng \"Đóng lỗ\" để đóng tất cả các lỗ trong model." @@ -18140,6 +18468,14 @@ msgstr "" "\n" "Đặt giá trị trong cài đặt lượng rút trước khi lau bên dưới sẽ thực hiện bất kỳ rút dư nào trước khi lau, nếu không nó sẽ được thực hiện sau." +# AI Translated +msgid "Mixed color sublayer" +msgstr "Lớp con màu pha trộn" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "Bật việc chia thành lớp con màu pha trộn. Khi bật, các lớp có chứa filament màu pha trộn sẽ được chia thành các lớp con để tạo hiệu ứng pha màu." + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "Wipe tower có thể được sử dụng để làm sạch cặn trên đầu phun và ổn định áp suất buồng bên trong đầu phun, để tránh khuyết điểm bề ngoài khi in đối tượng." @@ -18664,6 +19000,14 @@ msgstr "Không kiểm tra" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "Không chạy bất kỳ kiểm tra tính hợp lệ nào, chẳng hạn như kiểm tra xung đột đường dẫn G-code." +# AI Translated +msgid "Strict mode" +msgstr "Chế độ nghiêm ngặt" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "Thoát với mã khác 0 khi việc slice phát sinh một cảnh báo không nghiêm trọng mà bình thường chỉ được ghi log, chẳng hạn mô hình cần support trong khi support đang tắt. Hãy dùng trong CI hoặc các quy trình chạy bằng script vốn không bao giờ được xuất ra kết quả slice hỏng một cách khó nhận ra. Mỗi cảnh báo như vậy cũng được liệt kê kèm một lớp ổn định trong mảng `warnings` của result.json, tệp chỉ được ghi trên Linux. Không thể kết hợp với --no-check, tùy chọn bỏ qua việc kiểm tra support." + msgid "Normative check" msgstr "Kiểm tra quy chuẩn" @@ -18676,11 +19020,28 @@ msgstr "Xuất thông tin model" msgid "This outputs the model’s information." msgstr "Xuất thông tin của model." +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "Kiểm tra lưới (JSON ra stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "In ra stdout bản tóm tắt JSON của từng vật thể đã nạp rồi thoát: các hộp bao của nó và các mặt bao lồi mà nó có thể nằm lên, kèm pháp tuyến, diện tích và tâm của chúng. Đây chính là những mặt mà các tùy chọn --ground-* lựa chọn. Lựa chọn thay thế đọc được bằng máy cho --info." + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "Kiểm tra phần vẽ (JSON ra stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "In bản tóm tắt JSON có cấu trúc của mọi lớp đã vẽ (support, đường nối, màu MMU, fuzzy skin) đang được lưu trên mô hình đã nạp — số mặt, diện tích bề mặt và hộp bao theo tọa độ lưới cho từng trạng thái — rồi thoát. Lựa chọn thay thế đọc được bằng máy cho việc mở các gizmo vẽ trong giao diện." + msgid "Export Settings" msgstr "Xuất cài đặt" -msgid "This exports settings to a file." -msgstr "Xuất cài đặt vào file." +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "Lệnh này xuất cài đặt ra một tệp. Dùng - để ghi chúng ra stdout." msgid "Send progress to pipe" msgstr "Gửi tiến trình đến pipe" @@ -18736,6 +19097,30 @@ msgstr "Xoay xung quanh Y" msgid "Rotation angle around the Y axis in degrees." msgstr "Góc xoay xung quanh trục Y tính bằng độ." +# AI Translated +msgid "Ground largest face" +msgstr "Đặt lên mặt lớn nhất" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Đặt mỗi vật thể lên mặt lớn nhất của bao lồi rồi thả xuống bàn in. Trong số các mặt lớn bằng nhau, mặt đang hướng xuống sẽ được giữ lại. Những vật thể không có mặt đủ lớn để nằm lên sẽ được giữ nguyên. Các phép biến đổi chạy theo thứ tự trên dòng lệnh, nên các phép xoay đặt trước tùy chọn này vẫn được tôn trọng. --orient 1 chạy sau tất cả các phép biến đổi và thay thế hướng đặt." + +# AI Translated +msgid "Ground face by normal" +msgstr "Đặt lên mặt theo pháp tuyến" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Đặt mỗi vật thể lên mặt của bao lồi có pháp tuyến hướng ra ngoài gần nhất với hướng NX,NY,NZ rồi thả xuống bàn in. Hướng này tính theo tọa độ vật thể, vốn đã bao gồm các phép xoay đặt trước tùy chọn này và trùng với các trục của bàn in trừ khi tệp đầu vào có xoay vật thể. Ví dụ, 1,0,0 dựng vật thể lên mặt +X của nó. --orient 1 chạy sau tất cả các phép biến đổi và thay thế hướng đặt." + +# AI Translated +msgid "Ground face at point" +msgstr "Đặt lên mặt tại điểm" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "Đặt mỗi vật thể lên mặt của bao lồi có chứa điểm X,Y,Z rồi thả xuống bàn in. Điểm này tính theo tọa độ vật thể, vốn đã bao gồm các phép xoay đặt trước tùy chọn này; --inspect-mesh báo tâm các mặt theo đúng hệ tọa độ đó. Những vật thể không có mặt như vậy sẽ được giữ nguyên, và lần chạy sẽ thất bại nếu không vật thể nào có mặt đó. --orient 1 chạy sau tất cả các phép biến đổi và thay thế hướng đặt." + msgid "Scale the model by a float factor." msgstr "Tỷ lệ model theo hệ số số thực." @@ -19260,6 +19645,10 @@ msgstr "Tạo lưới cho file mô hình thất bại hoặc không có hình d msgid "The supplied file couldn't be read because it's empty." msgstr "File được cung cấp không thể đọc được vì nó trống" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "Định dạng tệp không tương thích nên không thể phân tích." + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "Định dạng file không xác định. File đầu vào phải có phần mở rộng .stl, .obj, .amf(.xml)." @@ -20793,19 +21182,19 @@ msgstr "Chỉ hiển thị tên máy in có thay đổi đối với cài đặt msgid "Only display the filament names with changes to filament presets." msgstr "Chỉ hiển thị tên filament có thay đổi đối với cài đặt sẵn filament." -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "Chỉ tên máy in có cài đặt sẵn máy in người dùng sẽ được hiển thị, và mỗi cài đặt sẵn bạn chọn sẽ được xuất dưới dạng zip." msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "Chỉ tên filament có cài đặt sẵn filament người dùng sẽ được hiển thị, \n" "và tất cả cài đặt sẵn filament người dùng trong mỗi tên filament bạn chọn sẽ được xuất dưới dạng zip." msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "Chỉ tên máy in có cài đặt sẵn quy trình đã thay đổi sẽ được hiển thị, \n" "và tất cả cài đặt sẵn quy trình người dùng trong mỗi tên máy in bạn chọn sẽ được xuất dưới dạng zip." @@ -21057,7 +21446,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "Chúng tôi cần thông tin để chẩn đoán nguồn gốc vấn đề. Hãy xem trang wiki để có hướng dẫn chi tiết." # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "Nút Đóng gói thu thập file dự án và nhật ký của phiên hiện tại vào một file zip." # AI Translated @@ -21113,7 +21502,7 @@ msgid "Stored logs" msgstr "Nhật ký đã lưu" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "Đóng gói toàn bộ nhật ký đã lưu vào một file zip." # AI Translated @@ -21201,7 +21590,7 @@ msgid "Authorizing..." msgstr "Đang xác thực..." # AI Translated -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "Lỗi. Không lấy được token api để xác thực" # AI Translated @@ -21681,8 +22070,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "Bật gán filament thông minh: Gán một filament cho nhiều đầu phun để tối đa hóa tiết kiệm" # AI Translated -msgid "Fila Saving" -msgstr "Tiết kiệm fila" +msgid "File Saving" +msgstr "Lưu tệp" # AI Translated msgid "Don't remind me again" @@ -22036,6 +22425,18 @@ msgstr "Thao tác này không thể hoàn tác. Tiếp tục?" msgid "Skipping objects." msgstr "Đang bỏ qua các vật thể." +# AI Translated +msgid "Material Ratio" +msgstr "Tỉ lệ vật liệu" + +# AI Translated +msgid "Model Height" +msgstr "Chiều cao mô hình" + +# AI Translated +msgid "Ratio" +msgstr "Tỉ lệ" + # AI Translated msgid "Select Filament" msgstr "Chọn filament" @@ -22138,6 +22539,9 @@ msgstr "Khởi động lại ngay" msgid "NO RAMMING AT ALL" msgstr "HOÀN TOÀN KHÔNG RAMMING" +msgid "s" +msgstr "s" + # AI Translated msgid "Volumetric speed" msgstr "Tốc độ thể tích" @@ -22348,12 +22752,14 @@ msgid "Drying-Dehumidifying" msgstr "Sấy - Hút ẩm" # AI Translated -msgid " maximum drying temperature is " -msgstr " nhiệt độ sấy tối đa là " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "Nhiệt độ sấy tối đa của %s là %d°C." # AI Translated -msgid " minimum drying temperature is " -msgstr " nhiệt độ sấy tối thiểu là " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "Nhiệt độ sấy tối thiểu của %s là %d°C." # AI Translated msgid "This filament may not be completely dried." @@ -22804,6 +23210,136 @@ msgstr "" "Tránh cong vênh\n" "Bạn có biết rằng khi in vật liệu dễ cong vênh như ABS, tăng nhiệt độ bàn nóng một cách thích hợp có thể giảm xác suất cong vênh không?" +#~ msgid "Other" +#~ msgstr "Khác" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "Trái: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "Phải: " + +# AI Translated +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "Nhiệt độ tối đa không được vượt quá " + +# AI Translated +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "Nhiệt độ tối thiểu không được thấp hơn " + +#~ msgid "up to" +#~ msgstr "lên đến" + +#~ msgid "above" +#~ msgstr "trên" + +#~ msgid "from" +#~ msgstr "từ" + +#~ msgid "Configuration package: " +#~ msgstr "Gói cấu hình: " + +#~ msgid " updated to " +#~ msgstr " đã cập nhật lên " + +# AI Translated +#~ msgid "Grouping error: " +#~ msgstr "Lỗi nhóm: " + +# AI Translated +#~ msgid " can not be placed in the " +#~ msgstr " không thể được đặt vào " + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " nhiệt độ sấy tối đa là " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " nhiệt độ sấy tối thiểu là " + +# AI Translated +#~ msgid "needs" +#~ msgstr "cần" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "chưa bật" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "vật liệu chưa xuất bản" + +#~ msgid "Select the language" +#~ msgstr "Chọn ngôn ngữ" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "Chọn plugin" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Hướng lấp các bề mặt trên khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n" +#~ "Ra ngoài bắt đầu từ tâm bề mặt, nhờ đó vật liệu dư bị đẩy về phía mép nơi ít nhìn thấy nhất. Vào trong bắt đầu từ mép và kết thúc bằng các đường cong hẹp ở tâm.\n" +#~ "Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ." + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "Hướng lấp các bề mặt dưới khi dùng mẫu dựa trên tâm (Đồng tâm, Dây cung Archimedes, Xoắn ốc bát giác).\n" +#~ "Vào trong bắt đầu mỗi bề mặt bằng các đường cong ngoài rộng hơn, giúp cải thiện độ bám lớp đầu tiên trên những bàn in mà các đường cong hẹp ở tâm có thể không dính. Ra ngoài bắt đầu từ tâm, đẩy vật liệu dư về phía mép.\n" +#~ "Mặc định dùng thứ tự đường đi ngắn nhất, có thể chạy theo hướng bất kỳ." + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "Nếu được bật, wipe tower sẽ không được in trên các lớp không có thay đổi công cụ. Trên các lớp có thay đổi công cụ, extruder sẽ di chuyển xuống để in wipe tower. Người dùng chịu trách nhiệm đảm bảo không có va chạm với bản in." + +#~ msgid "This exports settings to a file." +#~ msgstr "Xuất cài đặt vào file." + +# AI Translated +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "Xem trực tiếp trên Wayland thuần cần GStreamer GTK video sink. Vui lòng cài đặt plugin gtksink cho GStreamer, sau đó khởi động lại OrcaSlicer." + +# AI Translated +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "Khởi tạo GStreamer video sink trên Wayland thuần thất bại. Vui lòng kiểm tra việc cài đặt plugin GStreamer GTK của bạn." + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "Windows Media Player là cần thiết cho tác vụ này! Bạn có muốn bật 'Windows Media Player' cho hệ điều hành của bạn?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource chưa được đăng ký chính xác để phát media! Nhấn Có để đăng ký lại. Bạn sẽ được nhắc hai lần" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "Thiếu thành phần BambuSource đã đăng ký để phát media! Vui lòng cài đặt lại OrcaSlicer hoặc tìm kiếm sự giúp đỡ từ cộng đồng." + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "Đang sử dụng BambuSource từ cài đặt khác, phát video có thể không hoạt động đúng! Nhấn Có để sửa nó." + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "Hệ thống của bạn thiếu codec H.264 cho GStreamer, cần thiết để phát video. (Hãy thử cài đặt gói gstreamer1.0-plugins-bad hoặc gstreamer1.0-libav, sau đó khởi động lại Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "Tiết kiệm fila" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index 133e0815a4..84df96d57c 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2026-06-11 12:37-0300\n" "Last-Translator: Handle \n" "Language-Team: \n" @@ -2361,15 +2361,6 @@ msgstr "有更新可用。打开预设包对话框进行更新。" msgid "%s has been removed." msgstr "%s 已被移除。" -msgid "Switching application language" -msgstr "切换应用程序语言" - -msgid "Select the language" -msgstr "选择语言" - -msgid "Language" -msgstr "语言" - #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." msgstr "切换 Orca Slicer 语言到 %s 失败。" @@ -2843,6 +2834,10 @@ msgstr "编辑" msgid "Merge with" msgstr "与其合并" +# AI Translated +msgid "Decompose Color" +msgstr "分解颜色" + msgid "Delete this filament" msgstr "移除此耗材" @@ -3124,6 +3119,10 @@ msgstr "组合体" msgid "Merge parts to an object" msgstr "合并零件到对象" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "同时使用可变层高与混色子层可能导致混色质量不佳。" + msgid "Add layers" msgstr "添加层" @@ -3566,11 +3565,15 @@ msgstr "退回变轨器的当前耗材" msgid "Switch track at Filament Track Switch" msgstr "变轨器开关切换" -msgid "The maximum temperature cannot exceed " -msgstr "最高温度不可超过 " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "最高温度不可超过 %d" -msgid "The minmum temperature should not be less than " -msgstr "最低温度不可低于 " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "最低温度不可低于 %d" msgid "Type to filter..." msgstr "输入以筛选……" @@ -4431,6 +4434,15 @@ msgstr "" "将临时 G-Code 复制到输出 G-Code 失败。也许 SD 卡被写锁定了?\n" "错误消息:%1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"将临时 G-code 复制到输出 G-code 失败。\n" +"错误信息:%1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "将临时 G-Code 复制到输出 G-Code 失败。目标设备可能有问题,请再次尝试导出或使用其他设备。损坏的输出 G-Code 在 %1%.tmp。" @@ -4641,7 +4653,7 @@ msgstr "" "\n" "这个数值将被重置为0。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "“交替添加额外”与“确保垂直外壳厚度”的”全部“选项不兼容。" msgid "" @@ -4687,7 +4699,7 @@ msgstr "" "否 - 选择保留支撑独立层高" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height需要小于layer_height。\n" @@ -4695,7 +4707,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "锁定深度应小于表皮深度。\n" @@ -4735,6 +4747,9 @@ msgstr "" "是 - 自动调整这些设置并开启旋转模式\n" "否 - 暂不使用旋转模式" +msgid "N/A" +msgstr "不适用" + msgid "Printing" msgstr "打印中" @@ -5165,14 +5180,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "值 %s 超出了范围,有效的范围是从 %d 到 %d 。" #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"%s%%还是%s %s?\n" -"是:%s%%\n" -"否:%s %s" +msgid "Is it %s%% or %s %s?" +msgstr "%s%%还是%s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5194,29 +5206,22 @@ msgstr "无效的模式。请使用 N、N#K 或逗号分隔的列表(每个条 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "无效格式,应该是\"%1%\"这种数组格式" -msgid "N/A" -msgstr "不适用" - # AI Translated msgid "System agents" msgstr "系统代理" -# AI Translated -msgid "No plugin selected" -msgstr "未选择插件" - # AI Translated msgid "Add plugin" msgstr "添加插件" -# AI Translated -msgid "Select plugin" -msgstr "选择插件" - # AI Translated msgid "Remove plugin" msgstr "移除插件" +# AI Translated +msgid "No plugin selected" +msgstr "未选择插件" + # AI Translated msgid "Configure" msgstr "配置" @@ -5472,14 +5477,20 @@ msgstr "设置为最佳" msgid "Regroup filament" msgstr "重新组合耗材丝" -msgid "up to" -msgstr "达到" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "最高 %1% mm" -msgid "above" -msgstr "高于" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "高于 %1% mm" -msgid "from" -msgstr "从" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "从 %1% mm 到 %2% mm" msgid "Usage" msgstr "用法" @@ -5839,7 +5850,7 @@ msgstr "体积:" msgid "Size:" msgstr "尺寸:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "发现G-code路径在层%d,高度为%.2lf mm处有冲突。请将有冲突的对象分离得更远(%s <-> %s)。" @@ -6151,16 +6162,24 @@ msgstr "项目另存为" msgid "Save current project as" msgstr "项目另存为" +# AI Translated +msgid "Publish 3MF" +msgstr "发布 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "导出内嵌所选设置的 3MF 文件" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "导入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "加载模型" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "导入 ZIP 压缩文件" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "从 ZIP 压缩文件中导入一个或多个模型" msgid "Import Configs" @@ -7403,6 +7422,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "底部" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "此设置未指定插件能力类型。" + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "此设置指定了无法识别的插件能力类型: " + msgid "Plugin Selection" msgstr "插件选择" @@ -7638,6 +7665,10 @@ msgstr "自定义当前盘" msgid "The %s nozzle can not print %s." msgstr "%s 喷嘴无法打印 %s。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "在单挤出机打印机上打印混色耗材丝需要频繁换料和冲刷,可能显著增加废料以及喷嘴/废料槽堵塞的风险。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建议在打印时将 %1% 与 %2% 混合。\n" @@ -7763,12 +7794,44 @@ msgstr "从AMS同步材料列表" msgid "Set filaments to use" msgstr "配置可选择的材料" +# AI Translated +msgid "Add Mixed Filament" +msgstr "添加混合耗材丝" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合耗材丝" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "移除最后一个混合耗材丝" + +# AI Translated +msgid "Add mixed filament" +msgstr "添加混合耗材丝" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合耗材丝的组分无效或不匹配。请重新编辑受影响的条目。" + msgid "Search plate, object and part." msgstr "搜索盘、模型和零件。" msgid "Pellets" msgstr "颗粒" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合耗材丝的组分引用已失效" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "编辑 / 删除 / 合并" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "目标混合耗材丝将此物理耗材丝用作组分。合并将移除此物理耗材丝,并可能使该混合耗材丝失效。是否继续?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作后,%s 项目将关闭并创建一个新项目。" @@ -7905,8 +7968,16 @@ msgstr "请确认这些预设中的G-codes是否安全,以防止对机器造 msgid "Customized Preset" msgstr "自定义的预设" -msgid "Component name(s) inside step file not in UTF8 format!" -msgstr "STEP 文件中的部件名称不是 UTF8 格式!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "部分已发布的设置无法应用:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "部分耗材丝槽位已更改:" + +msgid "Component name(s) inside step file not in UTF-8 format!" +msgstr "STEP 文件中的部件名称不是 UTF-8 格式!" # AI Translated msgid "Because of unsupported text encoding, garbage characters may appear!" @@ -7928,7 +7999,7 @@ msgstr "对象的体积为零" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "文件 %s 中对象的尺寸过小,似乎是以米(m)或者英寸(inch)为单位定义的。\n" "OrcaSlicer的内部单位为毫米(mm)。是否要转换成毫米(mm)?" @@ -7949,6 +8020,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "检测到多部分对象" +# AI Translated +msgid "Matching textures to filaments" +msgstr "正在将纹理匹配到耗材丝" + +# AI Translated +msgid "Texture Import Warning" +msgstr "纹理导入警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "将这些文件加载为一个多零件对象?\n" @@ -8154,6 +8233,22 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "纹理导入失败。模型中似乎包含纹理数据,但纹理导入过程未能完成。将仅导入模型的几何数据。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "正在应用纹理颜色..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "正在更新 3D 视图..." + +# AI Translated +msgid "Texture colors applied." +msgstr "纹理颜色已应用。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以保留修改的预设到新项目中或者忽略这些修改" @@ -8286,6 +8381,21 @@ msgstr "切片文件另存为:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "文件%s已经发送到打印机的存储空间,可以在打印机上浏览。" +# AI Translated +msgid "Publish 3MF file as:" +msgstr "发布 3MF 文件为:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"导出发布的 3MF 文件失败。\n" +"请检查该文件夹是否在线可用,或文件是否被其他程序打开。" + +msgid "Publish" +msgstr "发布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "未设置喷嘴类型。请设置喷嘴并重试。" @@ -8496,9 +8606,6 @@ msgstr "是否继续?" msgid "Language selection" msgstr "语言选择" -msgid "Switching application language while some presets are modified." -msgstr "在切换应用语言之前发现某些参数预设有更改。" - msgid "Asia-Pacific" msgstr "亚太" @@ -8596,6 +8703,9 @@ msgstr "当前实例路径" msgid "General" msgstr "常规" +msgid "Language" +msgstr "语言" + msgid "Metric" msgstr "公制(Metric)" @@ -9034,9 +9144,6 @@ msgstr "在切片预览中拖动图层滑块时,将当前图层下方的图层 msgid "Dimmed layer brightness" msgstr "调暗图层的亮度" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9389,6 +9496,10 @@ msgstr "旋转花瓶" msgid "First layer filament sequence" msgstr "首层耗材打印顺序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "耗材丝列表中包含混合耗材丝。自定义耗材丝顺序将不会生效。" + msgid "By Layer" msgstr "逐层" @@ -9417,9 +9528,6 @@ msgstr "跳转到发布页面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:发布前需要一些准备时间,请耐心等待。" -msgid "Publish" -msgstr "发布" - msgid "Publish was canceled" msgstr "发布已取消" @@ -9435,6 +9543,81 @@ msgstr "正在上传数据" msgid "Jump to webpage" msgstr "跳转到网页" +# AI Translated +msgid "Material" +msgstr "材料" + +# AI Translated +msgid "Mixed filament" +msgstr "混合耗材丝" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "部分混合耗材丝依赖于不会被发布的耗材丝:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "耗材丝 %d(混合)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% 需要 %2%,但它未开启。" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% 需要 %2%,但其材料不会被发布。" + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "要发布混合耗材丝,请开启它所使用的每一种耗材丝,并选择“完整发布”或满足其“类型”要求。" + +# AI Translated +msgid "Publish anyway" +msgstr "仍然发布" + +# AI Translated +msgid "Publish 3MF..." +msgstr "发布 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "选择要在 3MF 文件中发布的设置" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "发布 3MF Wiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "发布 3MF 视频指南" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "混合耗材丝 - 在上方选择“开启”后将整体发布" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "发布此混合耗材丝,并开启 + 完整发布其组成耗材丝" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "在 3MF 文件中发布此耗材丝槽位" + +# AI Translated +msgid "Full Publish" +msgstr "完整发布" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "将此槽位的整条耗材丝内嵌到 3MF 文件中" + +# AI Translated +msgid "Filter non-selected" +msgstr "筛选未选项" + #, c-format, boost-format msgid "Save %s as" msgstr "另存%s为" @@ -9452,6 +9635,10 @@ msgstr "将父预设继承的所有数值复制到当前预设,并解除继承 msgid "Detach from parent" msgstr "与父级分离" +# AI Translated +msgid "Save without parent" +msgstr "不保留父级另存" + # AI Translated msgid "Unique preset" msgstr "独立预设" @@ -10122,9 +10309,17 @@ msgstr "结块检测需要 Prime 塔。没有主塔的模型可能存在缺陷 msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "同时启用精确Z高度和擦拭塔可能会导致切片错误。您仍然要启用精确Z高度吗?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "平滑模式的延时摄影需要每层都有擦拭塔,因此与“无稀疏层”不兼容。“无稀疏层”已关闭。" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "平滑模式的延时摄影需要擦料塔,否则打印件上可能会有瑕疵。您想打开擦料塔吗?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "“无稀疏层”与平滑模式的延时摄影不兼容,后者需要每层都有擦拭塔。延时摄影已切换为传统模式。" + msgid "Still print by object?" msgstr "仍然按对象打印吗?" @@ -10494,9 +10689,6 @@ msgstr "兼容的切片配置" msgid "Printable space" msgstr "可打印区域" -msgid "Printer Agent" -msgstr "打印机代理" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "为打印机通信选择网络代理。可用的代理将在启动时列出。" @@ -10738,12 +10930,12 @@ msgid "No modifications need to be copied." msgstr "没有需要复制的修改。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "复制参数" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "修改 %s 的参数" # AI Translated @@ -10898,14 +11090,6 @@ msgstr "挤出机数量" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "显示所有预设(包括不兼容的)" @@ -11258,27 +11442,6 @@ msgstr "耗材丝更换时的冲刷体积" msgid "Please choose the filament colour" msgstr "请选择耗材丝颜色" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "原生 Wayland 实时画面需要 GStreamer GTK 视频接收器。请安装 GStreamer 的 gtksink 插件,然后重启 OrcaSlicer。" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "原生 Wayland GStreamer 视频接收器初始化失败。请检查您的 GStreamer GTK 插件安装情况。" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "此任务需要 Windows Media Player!您是否要为您的操作系统启用'Windows Media Player'?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "BambuSource 未正确注册用于媒体播放!按是重新注册它。您将被提示两次" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "缺少用于媒体播放的已注册 BambuSource 组件!请重新安装 OrcaSlicer 或寻求社区帮助。" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "使用来自不同安装的 BambuSource,视频播放可能无法正常工作!按是修复它。" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "您的系统缺少 GStreamer 所需的 H.264 编解码器,这是播放视频所必需的。(尝试安装 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 软件包,然后重新启动 Orca Slicer?)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "云代理不可用。请重启 OrcaSlicer 后重试。" @@ -11771,15 +11934,22 @@ msgstr "修复被取消" msgid "Copying of file %1% to %2% failed: %3%" msgstr "从%1%拷贝文件到%2%失败:%3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "正在下载新的供应商配置: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "配置包:%1% 已更新到 %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "下载供应商配置失败: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "需要在配置更新之前检查没有保存的参数修改。" -msgid "Configuration package: " -msgstr "配置包:" - -msgid " updated to " -msgstr "更新到" - msgid "Open G-code file:" msgstr "打开G-code文件:" @@ -11839,11 +12009,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "输入整形仅受 Klipper、RepRapFirmware 和 Marlin 2 支持" -msgid "Grouping error: " -msgstr "分组错误:" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "分组错误:%1% 无法放入左喷嘴" -msgid " can not be placed in the " -msgstr "不能放置在" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "分组错误:%1% 无法放入右喷嘴" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -11957,6 +12131,10 @@ msgstr "%1%离其它对象太近,可能会发生碰撞。" msgid "%1% is too tall, and collisions will be caused." msgstr "%1%太高,会发生碰撞。" +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "模型与擦拭塔的相对位置不满足“无稀疏层”功能的要求。请调整两者的相对位置、降低模型高度,或关闭“无稀疏层”。" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "离不可打印区域太近,打印时可能会发生碰撞。" @@ -11991,6 +12169,10 @@ msgstr "如果您仍要打印,可以在 偏好设置 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根据当前设置,不会生成任何打印。" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "使用了渐变混合耗材丝,但“混色子层”已关闭。渐变将不会被打印。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "平滑模式的延时摄影不支持在逐件打印模式下使用。" @@ -12027,6 +12209,10 @@ msgstr "或许您想要缩小模型的尺寸,或者更改当前打印设置, msgid "Variable layer height is not supported with Organic supports." msgstr "Organic支撑不支持可变层高。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "擦拭塔耗材丝不能是混合耗材丝。" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "当启用擦拭塔时,不同的喷嘴直径和不同的耗材丝直径可能无法很好地工作。这是非常实验性的,所以请谨慎操作。" @@ -12292,6 +12478,9 @@ msgstr "使用 3MF 代替 G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "如果打印机接受 3MF 文件作为打印任务,请启用此选项。启用后,Orca Slicer 将以 .gcode.3mf 格式发送切片文件,而不是普通的 .gcode 文件。" +msgid "Printer Agent" +msgstr "打印机代理" + msgid "Select the network agent implementation for printer communication." msgstr "选择打印机通信的网络代理实施。" @@ -12374,7 +12563,7 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它层" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首层外的其他层的热床温度。0值表示该耗材丝不支持在Cool Plate SuperTack上打印。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13298,6 +13487,10 @@ msgstr "直线排列" msgid "Concentric" msgstr "同心" +# AI Translated +msgid "Spiral Inset" +msgstr "螺旋内缩" + msgid "Hilbert Curve" msgstr "希尔伯特曲线" @@ -13393,13 +13586,13 @@ msgstr "顶面填充顺序" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充顶面的方向。\n" -"向外从表面中心开始,因此多余的材料会被推向边缘等最不显眼的位置。向内从边缘开始,并以中心处的紧密曲线结束。\n" -"默认使用最短路径排序,可能沿任一方向进行。" +"使用以中心为起点的图案(同心、螺旋内缩、阿基米德和弦、八角螺旋)时,顶面的填充方向。\n" +"向外从表面中心开始,多余的材料会被推向边缘,在那里最不显眼。向内从边缘开始,以中心处的紧密曲线结束。\n" +"默认使用最短路径排序,方向可能是两者中的任意一种。" # AI Translated msgid "Bottom surface fill order" @@ -13407,13 +13600,13 @@ msgstr "底面填充顺序" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充底面的方向。\n" -"向内以较宽的外侧曲线开始每个表面,这可以改善在热床上的首层附着,因为中心处的紧密曲线可能无法粘牢。向外从中心开始,将多余的材料推向边缘。\n" -"默认使用最短路径排序,可能沿任一方向进行。" +"使用以中心为起点的图案(同心、螺旋内缩、阿基米德和弦、八角螺旋)时,底面的填充方向。\n" +"向内让每个表面从较宽的外侧曲线开始,可改善首层在热床上的粘接,尤其当中心处的紧密曲线不易粘牢时。向外从中心开始,将多余的材料推向边缘。\n" +"默认使用最短路径排序,方向可能是两者中的任意一种。" msgid "Internal solid infill pattern" msgstr "内部实心填充图案" @@ -13516,6 +13709,14 @@ msgstr "逆时针" msgid "Clockwise" msgstr "顺时针" +# AI Translated +msgid "Distance to rod" +msgstr "到杆的距离" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "喷嘴尖端到杆较远一侧边缘的水平距离。用于逐件打印时的避障。" + msgid "Height to rod" msgstr "到横杆高度" @@ -13695,6 +13896,8 @@ msgstr "层时间" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "当层预估打印时间小于该数值时,部件冷却风扇将会被开启。风扇转速将根据层打印时间在最大和最小风扇转速之间插值获得" +# AI Translated +msgctxt "second" msgid "s" msgstr "s" @@ -14013,6 +14216,62 @@ msgstr "支撑材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撑材料通常用于打印支撑体和支撑接触面" +# AI Translated +msgid "Is mixed filament" +msgstr "是否为混合耗材丝" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "该耗材丝槽位是否为由多种物理耗材丝组成的混合耗材丝" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合耗材丝组分" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "以逗号分隔的组分耗材丝序号(从 1 开始),例如 \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合耗材丝子层比例" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "以逗号分隔、总和为 1.0 的比例值,例如 \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合耗材丝渐变" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "为混合耗材丝的子层启用 Z 方向渐变模式。启用后,子层比例会随层数线性变化。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合耗材丝渐变范围" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "渐变模式下第一个组分的起始和结束比例。以逗号分隔的一对数值,例如 \"0.10,0.90\" 表示从 10% 到 90%。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合耗材丝渐变曲线" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "可选的 Photoshop 风格自定义曲线,将 Z 方向进度映射到第一个组分的比例。以竖线分隔的控制点进行编码,格式为 \"x,y\"(旧格式)或在需要覆盖切线时使用 \"x,y,m_in,m_out\"(留空或填 \"nan\" 表示使用 PCHIP 默认值)。x 取值范围为 [0,1];y 会被限制在所配置的比例范围内,例如 \"0,0.15|0.5,0.50|1,0.85\"。留空时改用线性的 gradient_range。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合耗材丝逐零件渐变" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "启用渐变模式时,对组合体中的每个零件分别应用渐变,而不是将整个组合体视为一个 Z 范围。" + msgid "Filament printable" msgstr "可打印耗材" @@ -15264,6 +15523,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y 轴允许的最大输出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15276,6 +15536,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y 轴的机器热床质量负载" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15583,7 +15844,7 @@ msgstr "从切割区域到垃圾桶的起始和结束点。" msgid "Reduce infill retraction" msgstr "减小填充回抽" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "当空驶完全在填充区域内时不触发回抽。这意味着即使漏料也是不可见的。对于复杂模型,该设置能够减少回抽次数以及打印时长,但是会造成G-code生成变慢" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15620,6 +15881,20 @@ msgstr "识别悬垂外墙" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "检测悬垂相对于线宽的百分比,并应用不同的速度打印。100%%的悬垂将使用桥接速度。" +# AI Translated +msgid "Print unsupported walls last" +msgstr "最后打印无支撑的墙" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"完全悬空的墙闭环会等到有东西能够承托它们时才打印:\n" +"无论墙的顺序如何,它们都在同一岛屿的其他墙之后挤出,从最内侧开始。\n" +"只能由本层桥接锚定的闭环会等待这些桥接打印完成;而沿着有支撑的墙延伸的闭环则保持在填充之前的位置,因为填充需要它作为锚点。" + msgid "Outer walls" msgstr "外墙" @@ -15754,7 +16029,7 @@ msgstr "擦拭后的回抽量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "擦拭后快速回抽的长度,相对于回抽长度。\n" @@ -15801,7 +16076,7 @@ msgstr "在换工具头之前触发回抽时,耗材丝会按指定的长度回 msgid "Z-hop height" msgstr "Z抬升高度" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "回抽完成之后,喷嘴轻微抬升,和打印件之间产生一定间隙。这能够避免空驶时喷嘴和打印件剐蹭和碰撞。使用螺旋线抬升z能够减少拉丝。" msgid "Z-hop lower boundary" @@ -16059,6 +16334,39 @@ msgstr "闭环擦拭" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "为了最大限度地减少闭环挤出中接缝的可见性,在挤出机离开环之前,会向内执行一个小小的移动。" +# AI Translated +msgid "Wipe inward" +msgstr "向内擦拭" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"仅适用于外墙,包括孔洞边界。擦拭时将高温喷嘴移向已打印的内墙,以减少刚打印塑料的二次受热和接缝痕迹。\n" +"\n" +"在层高低于 0.1 mm 时尤其有用,此时擦拭痕迹更明显。\n" +"\n" +"若相邻内墙尚未打印(单墙区域或外墙/内墙顺序),或找不到有支撑的向内路径(例如在锐角或接缝间隙处),则使用常规擦拭。" + +# AI Translated +msgid "Wipe inward distance" +msgstr "向内擦拭距离" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"擦拭路径偏离外墙轮廓的距离,以毫米或实际外墙挤出宽度的百分比指定。\n" +"\n" +"例如,50% 会将路径偏移外墙宽度的一半。实际偏移量同时受实际外墙宽度和到相邻墙的可用间距限制,因此超过 100% 的值或等效的绝对距离不会产生额外效果。设为 0 可禁用偏移。" + msgid "Wipe before external loop" msgstr "额外的外墙打印前擦拭" @@ -16320,8 +16628,9 @@ msgstr "拾取新工具头后不等待其达到打印温度,直接移动到擦 msgid "No sparse layers (beta)" msgstr "无稀疏层 (实验功能)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "如果启用,将不会在没有换色的层打印擦拭塔。存在换色的层时,挤出机将降低高度打印擦拭塔。用户应该确保不会与打印内容发生冲突。" +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "启用后,擦拭塔不会在没有换料的层上打印。在有换料的层上,挤出机会向下移动去打印擦拭塔,因此塔会低于模型,工具头必须向下伸到它那里。若这样会与已打印的对象发生碰撞,则该布局会被拒绝。对平滑模式的延时摄影或喷嘴结块检测无效,因为它们需要每层都有塔。" msgid "Prime all printing extruders" msgstr "所有挤出机画线" @@ -16347,6 +16656,34 @@ msgstr "" msgid "Cyclic" msgstr "循环" +# AI Translated +msgid "Cyclic order" +msgstr "循环顺序" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"循环换料排序所使用的自定义耗材丝序列,以逗号分隔的耗材丝编号表示(例如“3,2,1,4”)。\n" +"每一层按此序列打印其耗材丝;未列出的耗材丝最后打印,并按升序排列。\n" +"留空则按升序循环使用各耗材丝。" + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "对首层应用循环顺序" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"将循环换料顺序同样应用于首层。\n" +"默认关闭,因为首层改为按最佳热床粘接排序:打印首层细小脆弱特征的耗材丝会最后打印,这样后续的换料和空驶就不易将这些附着薄弱的部分蹭掉。若设置了自定义首层耗材丝序列,该首层顺序也会遵循它。循环顺序的好处(额外的换料让每层有更多冷却时间)并不适用于首层,因为首层为了粘接会以慢速高温打印。\n" +"仅当你需要包括首层在内的每一层都使用完全相同的换料顺序时才启用此项,代价是失去上述粘接优化。" + msgid "Slice gap closing radius" msgstr "切片间隙闭合半径" @@ -16356,9 +16693,6 @@ msgstr "在三角形网格切片过程中,小于2倍间隙闭合半径的裂 msgid "Slicing Mode" msgstr "切片模式" -msgid "Other" -msgstr "其他" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "对3DLabPrint的飞机模型使用 \"奇偶\"。使用 \"闭孔 \"来关闭模型上的所有孔。" @@ -16847,6 +17181,14 @@ msgstr "" "\n" "在下方的擦拭前回抽量设置中输入一个数值,将在擦拭动作之前执行任何超出部分的回抽,否则超出部分的回抽将在擦拭之后执行。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色子层" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "启用混色子层拆分。启用后,含有混色耗材丝的层将被拆分为子层,以实现混色效果。" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "擦拭塔可以用来清理喷嘴上的残留料和让喷嘴内部的腔压达到稳定状态,以避免打印物体时出现外观瑕疵。" @@ -17344,6 +17686,14 @@ msgstr "不进行检查" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "不运行任何有效性检查,例如G-code路径冲突检查。" +# AI Translated +msgid "Strict mode" +msgstr "严格模式" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "当切片产生原本仅记入日志的非严重警告时(例如禁用支撑却需要支撑的模型),以非零状态码退出。请在绝不能交付存在隐蔽缺陷切片结果的 CI 或脚本流程中使用。每条此类警告还会以稳定的类别列在 result.json 的 `warnings` 数组中,该文件仅在 Linux 上生成。不能与 --no-check 同时使用,后者会跳过支撑检查。" + msgid "Normative check" msgstr "规范性检查" @@ -17356,11 +17706,28 @@ msgstr "输出模型信息" msgid "This outputs the model’s information." msgstr "输出模型的信息。" +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "检查网格(JSON 输出到 stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "将每个已加载对象的 JSON 摘要输出到 stdout,然后退出:包括其包围盒,以及可供放置的凸包面及其法线、面积和中心。--ground-* 选项正是从这些面中选择。--info 的机器可读替代方案。" + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "检查绘制(JSON 输出到 stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "输出已加载模型上已保存的每个绘制图层(支撑、接缝、MMU 颜色、绒毛表面)的结构化 JSON 摘要 — 每种状态的面片数量、表面积和网格局部包围盒 — 然后退出。在图形界面中打开绘制工具的机器可读替代方案。" + msgid "Export Settings" msgstr "导出配置" -msgid "This exports settings to a file." -msgstr "导出配置到文件。" +# AI Translated +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "将设置导出到文件。使用 - 可将其写入 stdout。" msgid "Send progress to pipe" msgstr "将进度发送到管道" @@ -17416,6 +17783,30 @@ msgstr "绕 Y 旋转" msgid "Rotation angle around the Y axis in degrees." msgstr "绕 Y 轴的旋转角度(以度为单位)" +# AI Translated +msgid "Ground largest face" +msgstr "以最大面着床" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "将每个对象以其凸包的最大面放置,并落到热床上。若有多个同样大的面,则保留已经朝下的那一个。没有足够大可供放置的面的对象保持原样。变换按命令行中的先后顺序执行,因此在此选项之前给出的旋转会被保留。--orient 1 在所有变换之后执行,并会替换朝向。" + +# AI Translated +msgid "Ground face by normal" +msgstr "按法线以指定面着床" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "将每个对象以其凸包中外法线最接近方向 NX,NY,NZ 的面放置,并落到热床上。该方向使用对象坐标系,其中包含在此选项之前给出的旋转;除非输入文件旋转了该对象,否则它与打印板的坐标轴一致。例如,1,0,0 会让对象以 +X 面站立。--orient 1 在所有变换之后执行,并会替换朝向。" + +# AI Translated +msgid "Ground face at point" +msgstr "以指定点所在面着床" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "将每个对象以其凸包中包含点 X,Y,Z 的面放置,并落到热床上。该点使用对象坐标系,其中包含在此选项之前给出的旋转;--inspect-mesh 报告的面中心也使用该坐标系。没有此类面的对象保持原样;若所有对象都没有此类面,则本次运行失败。--orient 1 在所有变换之后执行,并会替换朝向。" + msgid "Scale the model by a float factor." msgstr "根据因数缩放模型" @@ -17922,6 +18313,10 @@ msgstr "模型文件的网格划分失败,或缺少有效的形状。" msgid "The supplied file couldn't be read because it's empty." msgstr "无法读取提供的文件,因为该文件内容为空。" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "文件格式不兼容,无法解析。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "未知的文件格式。输入文件的扩展名必须为 .stl、.obj 或 .amf(.xml)。" @@ -19386,17 +19781,17 @@ msgstr "仅显示对打印机、耗材和工艺预设有改动的打印机名称 msgid "Only display the filament names with changes to filament presets." msgstr "仅显示对耗材预设有改动的耗材名称。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "只显示带有用户打印机预设的打印机名称,并且您选择的每个预设都将导出为一个 ZIP 文件。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "只显示带有用户耗材预设的耗材名称,您选择的每个耗材名称中的所有用户耗材预设都将导出为一个 ZIP 文件。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "只显示带有更改的工艺预设的打印机名称,您选择的每个打印机名称中的所有用户工艺预设都将导出为一个 ZIP 文件。" msgid "Please select at least one printer or filament." @@ -19635,7 +20030,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "我们需要相关信息来诊断问题的根源。请查看 wiki 页面获取详细指南。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "“打包”按钮会将当前会话的项目文件和日志收集到一个 zip 文件中。" # AI Translated @@ -19691,7 +20086,7 @@ msgid "Stored logs" msgstr "已存储的日志" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "将所有已存储的日志打包到一个 zip 文件中。" # AI Translated @@ -19771,7 +20166,7 @@ msgstr "未找到打印机类型,请手动选择。" msgid "Authorizing..." msgstr "正在授权..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "错误。无法获取用于授权的 API 令牌" msgid "Could not parse server response." @@ -20221,8 +20616,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "启用智能耗材分配:将一种耗材分配给多个喷嘴以最大化节省" # AI Translated -msgid "Fila Saving" -msgstr "耗材节省" +msgid "File Saving" +msgstr "文件保存" msgid "Don't remind me again" msgstr "不再提醒" @@ -20508,6 +20903,18 @@ msgstr "此操作无法撤消。继续?" msgid "Skipping objects." msgstr "跳过对象。" +# AI Translated +msgid "Material Ratio" +msgstr "材料比例" + +# AI Translated +msgid "Model Height" +msgstr "模型高度" + +# AI Translated +msgid "Ratio" +msgstr "比例" + msgid "Select Filament" msgstr "选择耗材" @@ -20587,6 +20994,9 @@ msgstr "立即重启" msgid "NO RAMMING AT ALL" msgstr "完全不挤压" +msgid "s" +msgstr "s" + msgid "Volumetric speed" msgstr "体积流量" @@ -20761,12 +21171,14 @@ msgid "Drying-Dehumidifying" msgstr "干燥-除湿" # AI Translated -msgid " maximum drying temperature is " -msgstr " 最高干燥温度为 " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s 的最高干燥温度为 %d°C。" # AI Translated -msgid " minimum drying temperature is " -msgstr " 最低干燥温度为 " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s 的最低干燥温度为 %d°C。" # AI Translated msgid "This filament may not be completely dried." @@ -21211,6 +21623,130 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#~ msgid "Other" +#~ msgstr "其他" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "左: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "右: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "最高温度不可超过 " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "最低温度不可低于 " + +#~ msgid "up to" +#~ msgstr "达到" + +#~ msgid "above" +#~ msgstr "高于" + +#~ msgid "from" +#~ msgstr "从" + +#~ msgid "Configuration package: " +#~ msgstr "配置包:" + +#~ msgid " updated to " +#~ msgstr "更新到" + +#~ msgid "Grouping error: " +#~ msgstr "分组错误:" + +#~ msgid " can not be placed in the " +#~ msgstr "不能放置在" + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " 最高干燥温度为 " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " 最低干燥温度为 " + +# AI Translated +#~ msgid "needs" +#~ msgstr "需要" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "未开启" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "材料未发布" + +#~ msgid "Select the language" +#~ msgstr "选择语言" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "选择插件" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充顶面的方向。\n" +#~ "向外从表面中心开始,因此多余的材料会被推向边缘等最不显眼的位置。向内从边缘开始,并以中心处的紧密曲线结束。\n" +#~ "默认使用最短路径排序,可能沿任一方向进行。" + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "使用基于中心的图案(同心、阿基米德和弦、八角螺旋)时填充底面的方向。\n" +#~ "向内以较宽的外侧曲线开始每个表面,这可以改善在热床上的首层附着,因为中心处的紧密曲线可能无法粘牢。向外从中心开始,将多余的材料推向边缘。\n" +#~ "默认使用最短路径排序,可能沿任一方向进行。" + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "如果启用,将不会在没有换色的层打印擦拭塔。存在换色的层时,挤出机将降低高度打印擦拭塔。用户应该确保不会与打印内容发生冲突。" + +#~ msgid "This exports settings to a file." +#~ msgstr "导出配置到文件。" + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "原生 Wayland 实时画面需要 GStreamer GTK 视频接收器。请安装 GStreamer 的 gtksink 插件,然后重启 OrcaSlicer。" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "原生 Wayland GStreamer 视频接收器初始化失败。请检查您的 GStreamer GTK 插件安装情况。" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "此任务需要 Windows Media Player!您是否要为您的操作系统启用'Windows Media Player'?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "BambuSource 未正确注册用于媒体播放!按是重新注册它。您将被提示两次" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "缺少用于媒体播放的已注册 BambuSource 组件!请重新安装 OrcaSlicer 或寻求社区帮助。" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "使用来自不同安装的 BambuSource,视频播放可能无法正常工作!按是修复它。" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "您的系统缺少 GStreamer 所需的 H.264 编解码器,这是播放视频所必需的。(尝试安装 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 软件包,然后重新启动 Orca Slicer?)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "耗材节省" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index cf6a2519c3..b60602ca38 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-08-19 14:07-0300\n" +"POT-Creation-Date: 2026-09-17 12:41-0300\n" "PO-Revision-Date: 2025-11-28 13:48-0600\n" "Last-Translator: tntchn <15895303+tntchn@users.noreply.github.com>\n" "Language-Team: \n" @@ -2425,15 +2425,6 @@ msgstr "有可用的更新。請開啟預設組合對話框進行更新。" msgid "%s has been removed." msgstr "%s 已移除。" -msgid "Switching application language" -msgstr "切換應用程式語言" - -msgid "Select the language" -msgstr "選擇語言" - -msgid "Language" -msgstr "語言" - # AI Translated #, c-format, boost-format msgid "Switching Orca Slicer to language %s failed." @@ -2913,6 +2904,10 @@ msgstr "編輯" msgid "Merge with" msgstr "合併到" +# AI Translated +msgid "Decompose Color" +msgstr "分解顏色" + msgid "Delete this filament" msgstr "刪除此線材" @@ -3209,6 +3204,10 @@ msgstr "組合體" msgid "Merge parts to an object" msgstr "合併零件為物件" +# AI Translated +msgid "Using variable layer height together with mixed color sublayer may result in poor color mixing quality." +msgstr "同時使用可變層高與混色子層可能導致混色品質不佳。" + # AI Translated msgid "Add layers" msgstr "新增層" @@ -3664,11 +3663,15 @@ msgstr "在 Filament Track Switch 退回目前線材" msgid "Switch track at Filament Track Switch" msgstr "在 Filament Track Switch 切換軌道" -msgid "The maximum temperature cannot exceed " -msgstr "最高溫度不能超過 " +# AI Translated +#, c-format, boost-format +msgid "The maximum temperature cannot exceed %d" +msgstr "最高溫度不能超過 %d" -msgid "The minmum temperature should not be less than " -msgstr "最低溫度不應低於 " +# AI Translated +#, c-format, boost-format +msgid "The minimum temperature should not be less than %d" +msgstr "最低溫度不應低於 %d" msgid "Type to filter..." msgstr "輸入以篩選..." @@ -4544,6 +4547,15 @@ msgstr "" "錯誤訊息:%1%將臨時的 G-code 複製到輸出的 G-code 失敗 ,也許 SD 卡寫入被鎖定?\n" "錯誤訊息:%1%" +# AI Translated +#, boost-format +msgid "" +"Copying of the temporary G-code to the output G-code failed.\n" +"Error message: %1%" +msgstr "" +"將暫存 G-code 複製到輸出 G-code 失敗。\n" +"錯誤訊息:%1%" + #, boost-format msgid "Copying of the temporary G-code to the output G-code failed. There might be problem with target device, please try exporting again or using different device. The corrupted output G-code is at %1%.tmp." msgstr "將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。將臨時 G-code 複製到輸出 G-code 時失敗。目標裝置可能存在問題,請嘗試再次匯出或使用不同的裝置。損壞的 G-code 已輸出為 %1%.tmp。" @@ -4758,7 +4770,7 @@ msgstr "" "\n" "該值將會重設為 0。" -msgid "Alternate extra wall does't work well when ensure vertical shell thickness is set to All." +msgid "Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All." msgstr "當確保垂直外殼厚度設為『全部』時,交錯額外牆壁效果不佳。" msgid "" @@ -4815,7 +4827,7 @@ msgstr "" "否 - 選擇保留獨立支撐層高" msgid "" -"seam_slope_start_height need to be smaller than layer_height.\n" +"seam_slope_start_height needs to be smaller than layer_height.\n" "Reset to 0." msgstr "" "seam_slope_start_height 必須小於 layer_height。\n" @@ -4824,7 +4836,7 @@ msgstr "" #, no-c-format, no-boost-format msgid "" -"Lock depth should smaller than skin depth.\n" +"Lock depth should be smaller than skin depth.\n" "Reset to 50% of skin depth." msgstr "" "鎖定深度應小於表皮深度。\n" @@ -4864,6 +4876,9 @@ msgstr "" "是 - 自動調整這些設定並啟用花瓶模式\n" "否 - 不使用花瓶模式" +msgid "N/A" +msgstr "不適用" + msgid "Printing" msgstr "列印中" @@ -5294,14 +5309,11 @@ msgid "Value %s is out of range. The valid range is from %d to %d." msgstr "數值 %s 超出範圍。有效範圍是從 %d 到 %d。" #, c-format, boost-format -msgid "" -"Is it %s%% or %s %s?\n" -"YES for %s%%, \n" -"NO for %s %s." -msgstr "" -"是 %s%% 還是 %s %s?\n" -"選『是』代表 %s%%,\n" -"選『否』代表 %s %s。" +msgid "Is it %s%% or %s %s?" +msgstr "是 %s%% 還是 %s %s?" + +msgid "%" +msgstr "%" #, boost-format msgid "Invalid input format. Expected vector of dimensions in the following format: \"%1%\"" @@ -5323,29 +5335,22 @@ msgstr "無效的格式。請使用 N、N#K 或逗號分隔的清單,每個項 msgid "Invalid format. Expected vector format: \"%1%\"" msgstr "無效格式,應該是「%1%」這種格式" -msgid "N/A" -msgstr "不適用" - # AI Translated msgid "System agents" msgstr "系統代理程式" -# AI Translated -msgid "No plugin selected" -msgstr "未選擇外掛" - # AI Translated msgid "Add plugin" msgstr "新增外掛" -# AI Translated -msgid "Select plugin" -msgstr "選擇外掛" - # AI Translated msgid "Remove plugin" msgstr "移除外掛" +# AI Translated +msgid "No plugin selected" +msgstr "未選擇外掛" + # AI Translated msgid "Configure" msgstr "設定" @@ -5601,14 +5606,20 @@ msgstr "設為最佳" msgid "Regroup filament" msgstr "重新分組線材" -msgid "up to" -msgstr "達到" +# AI Translated +#, boost-format +msgid "up to %1% mm" +msgstr "最高 %1% mm" -msgid "above" -msgstr "高於" +# AI Translated +#, boost-format +msgid "above %1% mm" +msgstr "高於 %1% mm" -msgid "from" -msgstr "從" +# AI Translated +#, boost-format +msgid "from %1% to %2% mm" +msgstr "從 %1% mm 到 %2% mm" msgid "Usage" msgstr "使用情況" @@ -5968,7 +5979,7 @@ msgstr "體積:" msgid "Size:" msgstr "尺寸:" -#, boost-format +#, c-format, boost-format msgid "Conflicts of G-code paths have been found at layer %d, Z = %.2lfmm. Please separate the conflicted objects farther (%s <-> %s)." msgstr "發現 G-code 路徑在 %d 層,Z = %.2lf mm 處的衝突。請將有衝突的物件分離得更遠(%s <-> %s)。" @@ -6281,16 +6292,24 @@ msgstr "另存專案為" msgid "Save current project as" msgstr "將目前專案另存為" +# AI Translated +msgid "Publish 3MF" +msgstr "發布 3MF" + +# AI Translated +msgid "Export a 3MF file with the selected settings embedded" +msgstr "匯出內嵌所選設定的 3MF 檔案" + msgid "Import 3MF/STL/STEP/SVG/OBJ/AMF" msgstr "匯入 3MF/STL/STEP/SVG/OBJ/AMF" msgid "Load a model" msgstr "載入模型" -msgid "Import Zip Archive" +msgid "Import ZIP Archive" msgstr "匯入壓縮檔" -msgid "Load models contained within a zip archive" +msgid "Load models contained within a ZIP archive" msgstr "載入壓縮檔中的模型" msgid "Import Configs" @@ -7542,6 +7561,14 @@ msgctxt "Layers" msgid "Bottom" msgstr "底部" +# AI Translated +msgid "This setting does not specify a plugin capability type." +msgstr "此設定未指定外掛能力類型。" + +# AI Translated +msgid "This setting specifies an unrecognized plugin capability type: " +msgstr "此設定指定了無法識別的外掛能力類型: " + # AI Translated msgid "Plugin Selection" msgstr "外掛選擇" @@ -7799,6 +7826,10 @@ msgstr "自訂列印板參數" msgid "The %s nozzle can not print %s." msgstr "%s 噴嘴無法列印 %s。" +# AI Translated +msgid "Printing mixed-color filament on a single-extruder printer requires frequent filament changes and flushing, which may significantly increase waste and the risk of nozzle / waste-chute clogging." +msgstr "在單擠出機列印裝置上列印混色線材需要頻繁換料與清理,可能大幅增加廢料以及噴嘴/廢料槽堵塞的風險。" + #, boost-format msgid "Mixing %1% with %2% in printing is not recommended.\n" msgstr "不建議在列印時混用 %1% 和 %2%。\n" @@ -7924,12 +7955,44 @@ msgstr "從 AMS 同步線材清單" msgid "Set filaments to use" msgstr "設定可選擇的線材" +# AI Translated +msgid "Add Mixed Filament" +msgstr "新增混合線材" + +# AI Translated +msgid "Mixed Filament" +msgstr "混合線材" + +# AI Translated +msgid "Remove last mixed filament" +msgstr "移除最後一個混合線材" + +# AI Translated +msgid "Add mixed filament" +msgstr "新增混合線材" + +# AI Translated +msgid "Mixed filament has invalid or mismatched components. Please re-edit affected entries." +msgstr "混合線材的成分無效或不相符。請重新編輯受影響的項目。" + msgid "Search plate, object and part." msgstr "搜尋列印板、物件和零件。" msgid "Pellets" msgstr "顆粒" +# AI Translated +msgid "Mixed filament has broken component references" +msgstr "混合線材的成分參照已失效" + +# AI Translated +msgid "Edit / Delete / Merge" +msgstr "編輯 / 刪除 / 合併" + +# AI Translated +msgid "The target mixed filament uses this physical filament as a component. Merging will remove this physical filament and may invalidate the mixed filament. Continue?" +msgstr "目標混合線材使用此實體線材作為成分。合併將移除此實體線材,並可能使該混合線材失效。是否繼續?" + #, c-format, boost-format msgid "After completing your operation, %s project will be closed and create a new project." msgstr "完成操作後,%s 專案將關閉並建立新專案。" @@ -8066,7 +8129,15 @@ msgstr "請確認這些預設中的 G-code 是安全的,以防止對列印裝 msgid "Customized Preset" msgstr "自訂預設" -msgid "Component name(s) inside step file not in UTF8 format!" +# AI Translated +msgid "Some published settings could not be applied:" +msgstr "部分已發布的設定無法套用:" + +# AI Translated +msgid "Some filament slots were changed:" +msgstr "部分線材槽位已變更:" + +msgid "Component name(s) inside step file not in UTF-8 format!" msgstr "STEP 檔案內部元件的名稱不是 UTF-8 格式!" # AI Translated @@ -8089,7 +8160,7 @@ msgstr "物件的體積為零" #, c-format, boost-format msgid "" "The object from file %s is too small, and may be in meters or inches.\n" -" Do you want to scale to millimeters?" +"Do you want to scale to millimeters?" msgstr "" "檔案 %s 中的物件太小,可能以公尺(M)或英吋(Inches)為單位。\n" "是否要轉換成毫米(mm)?" @@ -8110,6 +8181,14 @@ msgstr "" msgid "Multi-part object detected" msgstr "偵測到多部分物件" +# AI Translated +msgid "Matching textures to filaments" +msgstr "正在將紋理對應到線材" + +# AI Translated +msgid "Texture Import Warning" +msgstr "紋理匯入警告" + msgid "Load these files as a single object with multiple parts?\n" msgstr "將這些檔案載入為一個多零件物件?\n" @@ -8320,6 +8399,22 @@ msgstr "" msgid "Sync now" msgstr "立即同步" +# AI Translated +msgid "Texture import failed. The model appears to contain texture data, but the texture import process could not be completed. The model will be imported as geometry only." +msgstr "紋理匯入失敗。模型中似乎包含紋理資料,但紋理匯入程序未能完成。將僅匯入模型的幾何資料。" + +# AI Translated +msgid "Applying texture colors..." +msgstr "正在套用紋理顏色..." + +# AI Translated +msgid "Updating 3D view..." +msgstr "正在更新 3D 檢視..." + +# AI Translated +msgid "Texture colors applied." +msgstr "紋理顏色已套用。" + msgid "You can keep the modified presets for the new project or discard them" msgstr "您可以將修改後的預設檔保留到新專案中或者忽略這些修改" @@ -8452,6 +8547,21 @@ msgstr "切片檔案另存為:" msgid "The file %s has been sent to the printer's storage space and can be viewed on the printer." msgstr "檔案 %s 已經傳送到列印裝置的儲存空間,可以在列印裝置上瀏覽。" +# AI Translated +msgid "Publish 3MF file as:" +msgstr "發布 3MF 檔案為:" + +# AI Translated +msgid "" +"Failed to export the published 3MF file.\n" +"Please check whether the folder exists online or if other programs have the file open." +msgstr "" +"匯出已發布的 3MF 檔案失敗。\n" +"請檢查該資料夾是否在線上可用,或檔案是否被其他程式開啟。" + +msgid "Publish" +msgstr "發布" + msgid "The nozzle type is not set. Please set the nozzle and try again." msgstr "噴嘴類型尚未設定。請設定噴嘴後再試一次。" @@ -8662,9 +8772,6 @@ msgstr "是否繼續?" msgid "Language selection" msgstr "語言選擇" -msgid "Switching application language while some presets are modified." -msgstr "在切換應用程式語言之前發現某些參數預設有更改。" - msgid "Asia-Pacific" msgstr "亞太" @@ -8769,6 +8876,9 @@ msgstr "目前實例路徑:" msgid "General" msgstr "一般" +msgid "Language" +msgstr "語言" + msgid "Metric" msgstr "公制" @@ -9207,9 +9317,6 @@ msgstr "在切片預覽中拖曳層滑桿時,將目前層以下的各層算繪 msgid "Dimmed layer brightness" msgstr "變暗層的亮度" -msgid "%" -msgstr "%" - # AI Translated msgid "" "How brightly the dimmed layers are rendered when \"Dim lower layers\" is enabled.\n" @@ -9563,6 +9670,10 @@ msgstr "螺旋花瓶模式" msgid "First layer filament sequence" msgstr "首層線材列印順序" +# AI Translated +msgid "The filament list contains mixed filaments. Custom filament sequence will not take effect." +msgstr "線材清單中包含混合線材。自訂線材順序將不會生效。" + msgid "By Layer" msgstr "逐層" @@ -9590,9 +9701,6 @@ msgstr "發布頁面" msgid "Note: The preparation may take several minutes. Please be patient." msgstr "提示:發布前需要一些準備時間,請耐心等待。" -msgid "Publish" -msgstr "發布" - msgid "Publish was canceled" msgstr "發布已取消" @@ -9608,6 +9716,81 @@ msgstr "正在上傳資料" msgid "Jump to webpage" msgstr "跳至網頁" +# AI Translated +msgid "Material" +msgstr "材料" + +# AI Translated +msgid "Mixed filament" +msgstr "混合線材" + +# AI Translated +msgid "Some mixed filaments rely on filaments that will not be published:" +msgstr "部分混合線材依賴不會被發布的線材:" + +# AI Translated +#, c-format, boost-format +msgid "Filament %d (mixed)" +msgstr "線材 %d(混合)" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, which is not enabled." +msgstr "%1% 需要 %2%,但它未啟用。" + +# AI Translated +#, boost-format +msgid "%1% needs %2%, whose material will not be published." +msgstr "%1% 需要 %2%,但其材料不會被發布。" + +# AI Translated +msgid "To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement." +msgstr "若要發布混合線材,請啟用它所使用的每一種線材,並選擇「完整發布」或滿足其「類型」需求。" + +# AI Translated +msgid "Publish anyway" +msgstr "仍要發布" + +# AI Translated +msgid "Publish 3MF..." +msgstr "發布 3MF..." + +# AI Translated +msgid "Select which settings to be published in the 3MF file" +msgstr "選擇要在 3MF 檔案中發布的設定" + +# AI Translated +msgid "Publish 3MF Wiki" +msgstr "發布 3MF Wiki" + +# AI Translated +msgid "Publish 3MF Video Guide" +msgstr "發布 3MF 影片指南" + +# AI Translated +msgid "Mixed filament - published as a whole when \"Enable\" above is selected" +msgstr "混合線材 - 在上方選擇「啟用」後將整體發布" + +# AI Translated +msgid "Publish this mixed filament and enable + Full Publish its component filaments" +msgstr "發布此混合線材,並啟用 + 完整發布其組成線材" + +# AI Translated +msgid "Publish this filament slot in the 3MF file" +msgstr "在 3MF 檔案中發布此線材槽位" + +# AI Translated +msgid "Full Publish" +msgstr "完整發布" + +# AI Translated +msgid "Embed the entire filament of this slot in the 3MF file" +msgstr "將此槽位的整條線材內嵌到 3MF 檔案中" + +# AI Translated +msgid "Filter non-selected" +msgstr "篩選未選項" + #, c-format, boost-format msgid "Save %s as" msgstr "另存 %s 為" @@ -9625,6 +9808,10 @@ msgstr "將父配置繼承的所有數值複製到目前的配置,並解除繼 msgid "Detach from parent" msgstr "從父預設分離" +# AI Translated +msgid "Save without parent" +msgstr "不保留父預設另存" + # AI Translated msgid "Unique preset" msgstr "獨立配置" @@ -10328,9 +10515,17 @@ msgstr "堵塞偵測需要換料塔。若沒有換料塔,列印物件上可能 msgid "Enabling both precise Z height and the prime tower may cause slicing errors. Do you still want to enable precise Z height?" msgstr "同時啟用精確 Z 高度和擦拭塔可能會導致切片錯誤。您仍然要啟用精確 Z 高度嗎?" +# AI Translated +msgid "Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". \"No sparse layers\" has been turned off." +msgstr "平滑模式的縮時攝影需要每層都有換料塔,因此與「取消稀疏層」不相容。「取消稀疏層」已關閉。" + msgid "A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower?" msgstr "平滑模式的縮時錄影需要換料塔,否則列印物件上可能會有瑕疵。您是否要啟用換料塔?" +# AI Translated +msgid "\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. Timelapse has been switched to traditional mode." +msgstr "「取消稀疏層」與平滑模式的縮時攝影不相容,後者需要每層都有換料塔。縮時攝影已切換為傳統模式。" + msgid "Still print by object?" msgstr "持續逐件列印?" @@ -10700,9 +10895,6 @@ msgstr "相容的切片設定" msgid "Printable space" msgstr "可列印區域" -msgid "Printer Agent" -msgstr "列印裝置代理" - msgid "Select the network agent implementation for printer communication. Available agents are registered at startup." msgstr "選擇列印裝置通訊的網路代理實施。可用代理在啟動時註冊。" @@ -10944,12 +11136,12 @@ msgid "No modifications need to be copied." msgstr "沒有需要複製的修改。" # AI Translated -msgid "Copy paramters" +msgid "Copy parameters" msgstr "複製參數" # AI Translated #, c-format, boost-format -msgid "Modify paramters of %s" +msgid "Modify parameters of %s" msgstr "修改 %s 的參數" # AI Translated @@ -11104,14 +11296,6 @@ msgstr "擠出機數量" msgid "Capabilities" msgstr "能力" -# AI Translated -msgid "Left: " -msgstr "左: " - -# AI Translated -msgid "Right: " -msgstr "右: " - msgid "Show all presets (including incompatible)" msgstr "顯示所有預設(包括不相容的)" @@ -11466,27 +11650,6 @@ msgstr "線材更換時產生的廢料體積" msgid "Please choose the filament colour" msgstr "請選擇線材顏色" -msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." -msgstr "原生 Wayland 即時檢視需要 GStreamer GTK 視訊接收器。請為 GStreamer 安裝 gtksink 外掛程式,然後重新啟動 OrcaSlicer。" - -msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." -msgstr "無法初始化原生 Wayland GStreamer 視訊接收器。請檢查您的 GStreamer GTK 外掛程式安裝。" - -msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" -msgstr "執行此設定需要 Windows Media Player!您是否要啟用 Windows Media Player?" - -msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" -msgstr "「BambuSource 未正確註冊為媒體播放模組!請點選『是』進行重新註冊,過程中會有兩次提示" - -msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." -msgstr "缺少用於媒體播放的已註冊 BambuSource 元件!請重新安裝 OrcaSlicer 或尋求社群協助。" - -msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." -msgstr "BambuSource 來自其他安裝版本,可能導致影片播放異常!請點選『是』進行修復。" - -msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" -msgstr "您的系統缺少 GStreamer 的 H.264 編解碼器,這是播放影片所必需的。(請嘗試安裝 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 套件,然後重新啟動 Orca Slicer。)" - msgid "Cloud agent is not available. Please restart OrcaSlicer and try again." msgstr "雲端代理無法使用。請重新啟動 OrcaSlicer 後再試一次。" @@ -11975,15 +12138,22 @@ msgstr "修復被取消" msgid "Copying of file %1% to %2% failed: %3%" msgstr "從 %1% 複製檔案到 %2% 失敗:%3%" +# AI Translated +msgid "Downloading new vendor profile(s): " +msgstr "正在下載新的廠牌設定檔: " + +# AI Translated +#, boost-format +msgid "Configuration package: %1% updated to %2%" +msgstr "設定檔:%1% 已更新到 %2%" + +# AI Translated +msgid "Failed to download vendor profile(s): " +msgstr "下載廠牌設定檔失敗: " + msgid "Please check any unsaved changes before updating the configuration." msgstr "在設定更新之前需要檢查未儲存的設定變更。" -msgid "Configuration package: " -msgstr "設定檔:" - -msgid " updated to " -msgstr "更新到 " - msgid "Open G-code file:" msgstr "開啟 G-code 檔案:" @@ -12043,11 +12213,15 @@ msgstr "" msgid "Input shaping is only supported by Klipper, RepRapFirmware and Marlin 2." msgstr "輸入整形僅受 Klipper、RepRapFirmware 和 Marlin 2 支援" -msgid "Grouping error: " -msgstr "分組錯誤:" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the left nozzle" +msgstr "分組錯誤:%1% 無法放入左噴嘴" -msgid " can not be placed in the " -msgstr "無法放置於" +# AI Translated +#, boost-format +msgid "Grouping error: %1% cannot be placed in the right nozzle" +msgstr "分組錯誤:%1% 無法放入右噴嘴" # AI Translated msgid "Group error in manual mode. Please check nozzle count or regroup." @@ -12161,6 +12335,10 @@ msgstr "%1% 離其它物件太近,可能會發生碰撞。" msgid "%1% is too tall, and collisions will be caused." msgstr "%1% 太高,會發生碰撞。" +# AI Translated +msgid "The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"." +msgstr "模型與換料塔的相對位置不符合「取消稀疏層」功能的需求。請調整兩者的相對位置、降低模型高度,或關閉「取消稀疏層」。" + msgid " is too close to exclusion area, there may be collisions when printing." msgstr "離淨空區域太近,列印時可能會發生碰撞。" @@ -12195,6 +12373,10 @@ msgstr "如果您仍想列印,可以在「偏好設定 / 控制 / 切片 / 移 msgid "No extrusions under current settings." msgstr "根據目前設定,不會進行任何列印。" +# AI Translated +msgid "A gradient mixed filament is used, but 'Mixed color sublayer' is disabled. The gradient will not be printed." +msgstr "使用了漸層混合線材,但「混色子層」已停用。漸層將不會列印。" + msgid "Smooth mode of timelapse is not supported when \"by object\" sequence is enabled." msgstr "逐件列印模式下不支援使用平滑模式的縮時錄影。" @@ -12231,6 +12413,10 @@ msgstr "您可能想要減小模型的尺寸或更改目前的列印設定並重 msgid "Variable layer height is not supported with Organic supports." msgstr "有機樹支撐不支持可變層高。" +# AI Translated +msgid "The wipe tower filament cannot be a mixed filament." +msgstr "換料塔線材不能是混合線材。" + msgid "Different nozzle diameters and different filament diameters may not work well when the prime tower is enabled. It's very experimental, so please proceed with caution." msgstr "當啟用換料時,不同的噴嘴直徑和線材直徑可能無法正常配合。此功能屬於實驗性階段,請小心使用。" @@ -12496,6 +12682,9 @@ msgstr "使用 3MF 取代 G-code" msgid "Enable this if the printer accepts a 3MF file as the print job. When enabled, Orca Slicer sends the sliced file as a .gcode.3mf, instead of a plain .gcode file." msgstr "若列印裝置接受 3MF 檔案作為列印作業,請啟用此選項。啟用後,Orca Slicer 會將切片後的檔案以 .gcode.3mf 形式傳送,而非單純的 .gcode 檔案。" +msgid "Printer Agent" +msgstr "列印裝置代理" + msgid "Select the network agent implementation for printer communication." msgstr "選擇用於列印裝置通訊的網路代理實作。" @@ -12578,7 +12767,7 @@ msgstr "mm 或 %" msgid "Other layers" msgstr "其它層" -msgid "Bed temperature for layers except the initial one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." +msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack." msgstr "除首層外的其他層的熱床溫度。0值表示該線材不支援在低溫增穩列印板上列印。" msgid "This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate." @@ -13513,6 +13702,10 @@ msgstr "直線排列" msgid "Concentric" msgstr "同心" +# AI Translated +msgid "Spiral Inset" +msgstr "螺旋內縮" + msgid "Hilbert Curve" msgstr "希爾伯特曲線" @@ -13604,13 +13797,13 @@ msgstr "頂面填充順序" # AI Translated msgid "" -"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which top surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,頂面填充的方向。\n" -"「向外」從表面中心開始,因此多餘的材料會被推向最不明顯的邊緣。「向內」從邊緣開始,並以中心的緊密曲線結束。\n" -"預設使用最短路徑排序,方向可能為任一種。" +"使用以中心為起點的圖案(同心、螺旋內縮、阿基米德和弦、八角螺旋)時,頂面的填充方向。\n" +"向外從表面中心開始,多餘的材料會被推向邊緣,在該處最不明顯。向內從邊緣開始,並以中心處的緊密曲線結束。\n" +"預設使用最短路徑排序,方向可能為兩者之一。" # AI Translated msgid "Bottom surface fill order" @@ -13618,13 +13811,13 @@ msgstr "底面填充順序" # AI Translated msgid "" -"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +"Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" "Default uses shortest-path ordering, which may run in either direction." msgstr "" -"使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,底面填充的方向。\n" -"「向內」讓每個表面從較寬的外側曲線開始,可改善中心緊密曲線可能無法附著的列印板上的第一層附著。「向外」從中心開始,將多餘的材料推向邊緣。\n" -"預設使用最短路徑排序,方向可能為任一種。" +"使用以中心為起點的圖案(同心、螺旋內縮、阿基米德和弦、八角螺旋)時,底面的填充方向。\n" +"向內讓每個表面從較寬的外側曲線開始,可改善首層在列印板上的黏著,尤其當中心處的緊密曲線不易黏牢時。向外從中心開始,將多餘的材料推向邊緣。\n" +"預設使用最短路徑排序,方向可能為兩者之一。" msgid "Internal solid infill pattern" msgstr "內部實心填充圖案" @@ -13723,6 +13916,14 @@ msgstr "逆時針" msgid "Clockwise" msgstr "順時針" +# AI Translated +msgid "Distance to rod" +msgstr "至桿件的距離" + +# AI Translated +msgid "Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing." +msgstr "噴嘴尖端到桿件較遠一側邊緣的水平距離。用於逐件列印時的避障。" + msgid "Height to rod" msgstr "到橫杆高度" @@ -13908,6 +14109,8 @@ msgstr "每一層列印時間" msgid "The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time." msgstr "當層預估列印時間小於該數值時,物件冷卻風扇將會被開啟。風扇轉速將根據層列印時間在最大和最小風扇轉速之間自動調整" +# AI Translated +msgctxt "second" msgid "s" msgstr "秒" @@ -14213,6 +14416,62 @@ msgstr "支撐材料" msgid "Support material is commonly used to print supports and support interfaces." msgstr "支撐材料通常用於列印支撐體和支撐接觸面" +# AI Translated +msgid "Is mixed filament" +msgstr "是否為混合線材" + +# AI Translated +msgid "Whether this filament slot is a mixed filament composed of multiple physical filaments" +msgstr "此線材槽是否為由多種實體線材組成的混合線材" + +# AI Translated +msgid "Mixed filament components" +msgstr "混合線材成分" + +# AI Translated +msgid "Comma-separated 1-based indices of component filaments, e.g. \"1,3\"" +msgstr "以逗號分隔的成分線材序號(從 1 開始),例如 \"1,3\"" + +# AI Translated +msgid "Mixed filament sublayer ratios" +msgstr "混合線材子層比例" + +# AI Translated +msgid "Comma-separated ratio values summing to 1.0, e.g. \"0.7,0.3\"" +msgstr "以逗號分隔、總和為 1.0 的比例值,例如 \"0.7,0.3\"" + +# AI Translated +msgid "Mixed filament gradient" +msgstr "混合線材漸層" + +# AI Translated +msgid "Enable Z-direction gradient mode for mixed filament sub-layers. When enabled, the sub-layer ratios vary linearly across layers." +msgstr "為混合線材的子層啟用 Z 方向漸層模式。啟用後,子層比例會隨層數線性變化。" + +# AI Translated +msgid "Mixed filament gradient range" +msgstr "混合線材漸層範圍" + +# AI Translated +msgid "Start and end ratios for the first component in gradient mode. Comma-separated pair, e.g. \"0.10,0.90\" means 10% to 90%." +msgstr "漸層模式下第一個成分的起始與結束比例。以逗號分隔的一對數值,例如 \"0.10,0.90\" 表示從 10% 到 90%。" + +# AI Translated +msgid "Mixed filament gradient curve" +msgstr "混合線材漸層曲線" + +# AI Translated +msgid "Optional Photoshop-style custom curve mapping Z progress to the first component ratio. Encoded as pipe-separated control points, either \"x,y\" (legacy) or \"x,y,m_in,m_out\" when a tangent override is needed (empty token or \"nan\" means use PCHIP default). x in [0,1]; y is clamped to the configured ratio range, e.g. \"0,0.15|0.5,0.50|1,0.85\". When empty, the linear gradient_range is used instead." +msgstr "選用的 Photoshop 風格自訂曲線,將 Z 方向進度對應到第一個成分的比例。以直立線分隔的控制點進行編碼,格式為 \"x,y\"(舊格式)或在需要覆寫切線時使用 \"x,y,m_in,m_out\"(留空或填入 \"nan\" 表示使用 PCHIP 預設值)。x 的取值範圍為 [0,1];y 會被限制在所設定的比例範圍內,例如 \"0,0.15|0.5,0.50|1,0.85\"。留空時改用線性的 gradient_range。" + +# AI Translated +msgid "Mixed filament per-part gradient" +msgstr "混合線材逐零件漸層" + +# AI Translated +msgid "When gradient mode is enabled, apply the gradient to each part of an assembly independently rather than treating the whole assembly as one Z range." +msgstr "啟用漸層模式時,對組合體中的每個零件分別套用漸層,而不是將整個組合體視為單一 Z 範圍。" + msgid "Filament printable" msgstr "線材可列印" @@ -15465,6 +15724,7 @@ msgid "The allowed maximum output force of Y axis" msgstr "Y 軸允許的最大輸出力" # AI Translated +msgctxt "Newton" msgid "N" msgstr "N" @@ -15477,6 +15737,7 @@ msgid "The machine bed mass load of Y axis" msgstr "Y 軸的機器床台質量負載" # AI Translated +msgctxt "gram" msgid "g" msgstr "g" @@ -15790,7 +16051,7 @@ msgstr "從切割區域到垃圾桶的起始和結束點。" msgid "Reduce infill retraction" msgstr "減小填充回抽" -msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped." +msgid "Don't retract when the travel is entirely within an infill area. That means the oozing can't been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped." msgstr "當空駛完全在填充區域內時不觸發回抽。這意味著即使漏料也是不可見的。對於複雜模型,該設定能夠減少回抽次數以及列印時長,但是會造成 G-code 產生變慢" msgid "This option will drop the temperature of the inactive extruders to prevent oozing." @@ -15827,6 +16088,20 @@ msgstr "偵測懸空外牆" msgid "This detects the overhang percentage relative to line width and uses a different speed to print. For 100%% overhang, bridging speed is used." msgstr "偵測懸空相對於線寬的百分比,並套用不同的速度列印。100%% 的懸空將使用橋接速度。" +# AI Translated +msgid "Print unsupported walls last" +msgstr "最後列印無支撐的牆" + +# AI Translated +msgid "" +"Wall loops that lie entirely in mid air are printed once something can hold them:\n" +"they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" +"A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running alongside a supported wall keeps its place before the infill, which needs it as an anchor." +msgstr "" +"完全懸空的牆迴圈會等到有東西能夠承托它們時才列印:\n" +"無論牆的順序為何,它們都在同一島嶼的其他牆之後擠出,從最內側開始。\n" +"只能由本層橋接錨定的迴圈會等待這些橋接列印完成;而沿著有支撐的牆延伸的迴圈則保持在填充之前的位置,因為填充需要它作為錨點。" + msgid "Outer walls" msgstr "外牆" @@ -15961,7 +16236,7 @@ msgstr "擦拭後的回抽量" # AI Translated #, no-c-format, no-boost-format msgid "" -"The length of fast retraction after wipe, relative to retraction length.\n" +"This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value." msgstr "" "擦拭後快速回抽的長度,相對於回抽長度。\n" @@ -16008,7 +16283,7 @@ msgstr "在換工具之前觸發回抽時,線材會依指定的長度回抽( msgid "Z-hop height" msgstr "Z 抬升高度" -msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing." +msgid "Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing." msgstr "回抽完成之後,噴嘴輕微抬升,和列印物件之間產生一定間隙。這能夠避免空駛時噴嘴和列印物件剮蹭和碰撞。使用螺旋線抬升z能夠減少拉絲" msgid "Z-hop lower boundary" @@ -16262,6 +16537,39 @@ msgstr "閉環擦拭" msgid "To minimize the visibility of the seam in a closed loop extrusion, a small inward movement is executed before the extruder leaves the loop." msgstr "為了降低閉環擠出中接縫的可見性,在擠出機退出閉環前會進行一次微小的內縮移動。" +# AI Translated +msgid "Wipe inward" +msgstr "向內擦拭" + +# AI Translated +msgid "" +"Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n" +"\n" +"Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n" +"\n" +"Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or Outer/Inner wall order), or if no supported inward path can be found, for example at tight corners or seam gaps." +msgstr "" +"僅適用於外牆,包括孔洞邊界。擦拭時將高溫噴嘴移向已列印的內牆,以減少剛列印塑膠的二次受熱與接縫痕跡。\n" +"\n" +"在層高低於 0.1 mm 時特別有用,此時擦拭痕跡更明顯。\n" +"\n" +"若相鄰內牆尚未列印(單牆區域或外牆/內牆順序),或找不到有支撐的向內路徑(例如在銳角或接縫間隙處),則使用一般擦拭。" + +# AI Translated +msgid "Wipe inward distance" +msgstr "向內擦拭距離" + +# AI Translated +#, no-c-format, no-boost-format +msgid "" +"The distance the wipe path is shifted away from the external perimeter, specified in millimeters or as a percentage of the actual outer-wall extrusion width.\n" +"\n" +"For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited by both the actual outer-wall width and the available spacing to the adjacent wall, so values above 100% or an equivalent absolute distance have no additional effect. Set to 0 to disable the offset." +msgstr "" +"擦拭路徑偏離外牆輪廓的距離,以公釐或實際外牆擠出寬度的百分比指定。\n" +"\n" +"例如,50% 會將路徑偏移外牆寬度的一半。實際偏移量同時受實際外牆寬度與到相鄰牆的可用間距限制,因此超過 100% 的值或等效的絕對距離不會產生額外效果。設為 0 可停用偏移。" + msgid "Wipe before external loop" msgstr "外牆迴圈前的擦拭動作" @@ -16516,8 +16824,9 @@ msgstr "取用新工具時不等待其達到列印溫度,先移動到換料塔 msgid "No sparse layers (beta)" msgstr "取消稀疏層(Beta)" -msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." -msgstr "啟用此選項後,換料塔將不會在沒有工具更換的層中列印。在有工具更換的層中,擠出機將向下移動以列印換料塔。請使用者自行確保清洗塔與列印物之間不會發生碰撞。" +# AI Translated +msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower, so the tower ends up below the model and the toolhead has to reach down to it. Layouts where that would collide with an already printed object are rejected. Has no effect with smooth timelapse or clumping detection, which need a tower on every layer." +msgstr "啟用後,換料塔不會在沒有換工具的層上列印。在有換工具的層上,擠出機會向下移動去列印換料塔,因此塔會低於模型,工具頭必須向下伸到該處。若這樣會與已列印的物件發生碰撞,該配置將被拒絕。對平滑模式的縮時攝影或噴嘴結塊偵測無效,因為它們需要每層都有塔。" msgid "Prime all printing extruders" msgstr "所有擠出機畫線" @@ -16543,6 +16852,34 @@ msgstr "" msgid "Cyclic" msgstr "循環" +# AI Translated +msgid "Cyclic order" +msgstr "循環順序" + +# AI Translated +msgid "" +"Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" +"Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" +"Leave empty to cycle through the filaments in ascending order." +msgstr "" +"循環換工具排序所使用的自訂線材序列,以逗號分隔的線材編號表示(例如「3,2,1,4」)。\n" +"每一層依此序列列印其線材;未列出的線材最後列印,並依遞增順序排列。\n" +"留空則依遞增順序循環使用各線材。" + +# AI Translated +msgid "Apply cyclic order to first layer" +msgstr "對首層套用循環順序" + +# AI Translated +msgid "" +"Applies the cyclic toolchange order to the first layer as well.\n" +"By default this is disabled, because the first layer is instead ordered for the best bed adhesion: filaments that print small, fragile first-layer features are printed last, so the following tool changes and travel moves are less likely to knock those weakly anchored parts loose. This first-layer order also honors a custom first layer filament sequence when one is set. The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply to the first layer, which is printed slowly and hot for adhesion.\n" +"Enable this only if you need the exact same tool sequence on every layer, including the first, at the cost of that adhesion optimization." +msgstr "" +"將循環換工具順序同樣套用於首層。\n" +"預設為關閉,因為首層改為依最佳列印板黏著排序:列印首層細小脆弱特徵的線材會最後列印,如此後續的換工具與空駛就不易將這些附著薄弱的部分蹭掉。若已設定自訂首層線材序列,此首層順序也會遵循它。循環順序的好處(額外的換工具讓每層有更多冷卻時間)並不適用於首層,因為首層為了黏著會以慢速高溫列印。\n" +"僅當你需要包含首層在內的每一層都使用完全相同的換工具順序時才啟用此項,代價是失去上述黏著最佳化。" + msgid "Slice gap closing radius" msgstr "切片間隙閉合半徑" @@ -16552,9 +16889,6 @@ msgstr "在三角網格切片過程中,寬度小於 2 倍間隙閉合半徑的 msgid "Slicing Mode" msgstr "切片模式" -msgid "Other" -msgstr "其他" - msgid "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model." msgstr "針對 3DLabPrint 飛機模型,請選擇『奇偶』模式。若需閉合模型中的所有孔洞,請啟用『閉合孔洞』選項。" @@ -17041,6 +17375,14 @@ msgstr "" "\n" "在以下的『擦拭前的回抽量』設定中設定一個值,將在擦拭之前執行任何額外的回抽操作;否則,將在擦拭之後執行。" +# AI Translated +msgid "Mixed color sublayer" +msgstr "混色子層" + +# AI Translated +msgid "Enable mixed color sublayer splitting. When enabled, layers containing mixed color filaments will be split into sub-layers to achieve color mixing effects." +msgstr "啟用混色子層分割。啟用後,含有混色線材的層將被分割為子層,以達成混色效果。" + msgid "The wiping tower can be used to clean up residue on the nozzle and stabilize the chamber pressure inside the nozzle in order to avoid appearance defects when printing objects." msgstr "換料塔的功能是用於清除噴嘴上的殘留物,同時穩定噴嘴內的壓力,從而避免列印物件時出現外觀瑕疵。" @@ -17532,6 +17874,14 @@ msgstr "不檢查" msgid "Do not run any validity checks, such as G-code path conflicts check." msgstr "不要執行任何有效性檢查,如 G-code 路徑衝突檢查。" +# AI Translated +msgid "Strict mode" +msgstr "嚴格模式" + +# AI Translated +msgid "Exit non-zero when slicing raises a non-critical warning that is otherwise only logged, such as a model that needs support while support is disabled. Use this in CI or scripted pipelines that should never ship a subtly broken slice. Each such warning is also listed with a stable class in the `warnings` array of result.json, which is written on Linux only. Cannot be combined with --no-check, which skips the support check." +msgstr "當切片產生原本僅記入日誌的非嚴重警告時(例如停用支撐卻需要支撐的模型),以非零狀態碼結束。請在絕不能交付存在隱蔽缺陷切片結果的 CI 或指令碼流程中使用。每一則此類警告還會以穩定的類別列在 result.json 的 `warnings` 陣列中,該檔案僅在 Linux 上產生。不能與 --no-check 同時使用,後者會略過支撐檢查。" + msgid "Normative check" msgstr "規範符合性偵測" @@ -17544,12 +17894,28 @@ msgstr "輸出模型資訊" msgid "This outputs the model’s information." msgstr "輸出模型資訊。" +# AI Translated +msgid "Inspect mesh (JSON to stdout)" +msgstr "檢查網格(JSON 輸出至 stdout)" + +# AI Translated +msgid "Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the convex hull faces it can be laid on, with their normals, areas and centers. These are the faces the --ground-* options choose from. Machine-readable alternative to --info." +msgstr "將每個已載入物件的 JSON 摘要輸出至 stdout,然後結束:包括其邊界框,以及可供放置的凸包面及其法線、面積與中心。--ground-* 選項正是從這些面中選擇。--info 的機器可讀替代方案。" + +# AI Translated +msgid "Inspect paint (JSON to stdout)" +msgstr "檢查繪製(JSON 輸出至 stdout)" + +# AI Translated +msgid "Print a structured JSON summary of every painted layer (supports, seam, MMU color, fuzzy-skin) already stored on the loaded model — per-state facet count, surface area, and mesh-local bounding box — then exit. Machine-readable alternative to opening the paint gizmos in the GUI." +msgstr "輸出已載入模型上已儲存的每個繪製圖層(支撐、接縫、MMU 顏色、絨毛表面)的結構化 JSON 摘要 — 每種狀態的面片數量、表面積與網格局部邊界框 — 然後結束。在圖形介面中開啟繪製工具的機器可讀替代方案。" + msgid "Export Settings" msgstr "匯出設定" # AI Translated -msgid "This exports settings to a file." -msgstr "將設定匯出至檔案。" +msgid "This exports settings to a file. Use - to write them to stdout." +msgstr "將設定匯出至檔案。使用 - 可將其寫入 stdout。" msgid "Send progress to pipe" msgstr "將進度傳送到 Pipe" @@ -17605,6 +17971,30 @@ msgstr "繞 Y 旋轉" msgid "Rotation angle around the Y axis in degrees." msgstr "繞 Y 軸的旋轉角度(以度為單位)。" +# AI Translated +msgid "Ground largest face" +msgstr "以最大面著床" + +# AI Translated +msgid "Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large faces, the one already facing down is kept. Objects without a face large enough to rest on are left as they are. Transforms run in command-line order, so rotations given before this option are respected. --orient 1 runs after all transforms and replaces the orientation." +msgstr "將每個物件以其凸包的最大面放置,並落到列印板上。若有多個同樣大的面,則保留已經朝下的那一個。沒有足夠大可供放置的面的物件維持原狀。變換依命令列中的先後順序執行,因此在此選項之前給定的旋轉會被保留。--orient 1 在所有變換之後執行,並會取代定向。" + +# AI Translated +msgid "Ground face by normal" +msgstr "依法線以指定面著床" + +# AI Translated +msgid "Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ and drop it onto the bed. The direction is in object coordinates, which include the rotations given before this option and match the plate axes unless the input file rotates the object. For example, 1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation." +msgstr "將每個物件以其凸包中外法線最接近方向 NX,NY,NZ 的面放置,並落到列印板上。該方向使用物件座標系,其中包含在此選項之前給定的旋轉;除非輸入檔案旋轉了該物件,否則它與列印板的座標軸一致。例如,1,0,0 會讓物件以 +X 面站立。--orient 1 在所有變換之後執行,並會取代定向。" + +# AI Translated +msgid "Ground face at point" +msgstr "以指定點所在面著床" + +# AI Translated +msgid "Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. The point is in object coordinates, which include the rotations given before this option; --inspect-mesh reports face centers in them. Objects without such a face are left as they are, and the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation." +msgstr "將每個物件以其凸包中包含點 X,Y,Z 的面放置,並落到列印板上。該點使用物件座標系,其中包含在此選項之前給定的旋轉;--inspect-mesh 回報的面中心也使用該座標系。沒有此類面的物件維持原狀;若所有物件都沒有此類面,則本次執行失敗。--orient 1 在所有變換之後執行,並會取代定向。" + msgid "Scale the model by a float factor." msgstr "依浮點數比例縮放模型" @@ -18110,6 +18500,10 @@ msgstr "模型檔案網格化失敗或沒有有效形狀" msgid "The supplied file couldn't be read because it's empty." msgstr "無法讀取提供的檔案,因為該檔案為空" +# AI Translated +msgid "The file format is incompatible and cannot be parsed." +msgstr "檔案格式不相容,無法解析。" + msgid "Unknown file format: input file must have .stl, .obj, or .amf(.xml) extension." msgstr "檔案格式未知。輸入的檔案必須是 .stl、.obj 或 .amf(.xml) 格式。" @@ -19573,19 +19967,19 @@ msgstr "僅顯示對列印裝置、線材和處理預設設定有變更的列印 msgid "Only display the filament names with changes to filament presets." msgstr "僅顯示對線材預設設定有變更的線材名稱。" -msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip." +msgid "Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive." msgstr "只有具有使用者列印裝置預設設定的列印裝置名稱會顯示,您選擇的每個預設設定將以 zip 檔案格式匯出。" msgid "" "Only the filament names with user filament presets will be displayed, \n" -"and all user filament presets in each filament name you select will be exported as a zip." +"and all user filament presets in each filament name you select will be exported as a ZIP archive." msgstr "" "只有具有使用者線材預設設定的線材名稱會顯示,\n" "您選擇的每個線材名稱中的所有使用者線材預設設定將以 zip 檔案格式匯出。" msgid "" "Only printer names with changed process presets will be displayed, \n" -"and all user process presets in each printer name you select will be exported as a zip." +"and all user process presets in each printer name you select will be exported as a ZIP archive." msgstr "" "只有具有變更過處理預設設定的列印裝置名稱會顯示,\n" "您選擇的每個列印裝置名稱中的所有使用者處理預設設定將以 zip 檔案格式匯出。" @@ -19826,7 +20220,7 @@ msgid "We need information for diagnosing source of the issue. Check wiki page f msgstr "我們需要相關資訊以診斷問題來源。請查看 wiki 頁面以取得詳細指南。" # AI Translated -msgid "Pack button collects project file and logs of current session onto a zip file." +msgid "Pack button collects project file and logs of current session onto a ZIP archive." msgstr "「打包」按鈕會將目前工作階段的專案檔案與記錄收集到一個 zip 檔案中。" # AI Translated @@ -19882,7 +20276,7 @@ msgid "Stored logs" msgstr "已儲存的記錄" # AI Translated -msgid "Packs all stored logs onto a zip file." +msgid "Packs all stored logs onto a ZIP archive." msgstr "將所有已儲存的記錄打包成一個 zip 檔案。" # AI Translated @@ -19962,7 +20356,7 @@ msgstr "找不到列印裝置類型,請手動選取。" msgid "Authorizing..." msgstr "授權中..." -msgid "Error. Can't get api token for authorization" +msgid "Error. Can't get API token for authorization" msgstr "錯誤。無法取得用於授權的 API token。" msgid "Could not parse server response." @@ -20414,8 +20808,8 @@ msgid "Enable smart filament assign: Assign one filament to multiple nozzles to msgstr "啟用智慧線材指派:將一種線材指派給多個噴嘴以最大化節省" # AI Translated -msgid "Fila Saving" -msgstr "線材節省" +msgid "File Saving" +msgstr "檔案儲存" msgid "Don't remind me again" msgstr "不要再提醒我" @@ -20701,6 +21095,18 @@ msgstr "此操作無法撤消。繼續?" msgid "Skipping objects." msgstr "跳過物件。" +# AI Translated +msgid "Material Ratio" +msgstr "材料比例" + +# AI Translated +msgid "Model Height" +msgstr "模型高度" + +# AI Translated +msgid "Ratio" +msgstr "比例" + msgid "Select Filament" msgstr "選擇線材" @@ -20780,6 +21186,9 @@ msgstr "立即重新啟動" msgid "NO RAMMING AT ALL" msgstr "完全不擠壓" +msgid "s" +msgstr "秒" + msgid "Volumetric speed" msgstr "體積速度" @@ -20954,12 +21363,14 @@ msgid "Drying-Dehumidifying" msgstr "烘乾—除濕" # AI Translated -msgid " maximum drying temperature is " -msgstr " 最高烘乾溫度為 " +#, c-format, boost-format +msgid "%s maximum drying temperature is %d°C." +msgstr "%s 的最高烘乾溫度為 %d°C。" # AI Translated -msgid " minimum drying temperature is " -msgstr " 最低烘乾溫度為 " +#, c-format, boost-format +msgid "%s minimum drying temperature is %d°C." +msgstr "%s 的最低烘乾溫度為 %d°C。" # AI Translated msgid "This filament may not be completely dried." @@ -21425,6 +21836,131 @@ msgstr "" "避免翹曲\n" "您知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" +#~ msgid "Other" +#~ msgstr "其他" + +# AI Translated +#~ msgid "Left: " +#~ msgstr "左: " + +# AI Translated +#~ msgid "Right: " +#~ msgstr "右: " + +#~ msgid "The maximum temperature cannot exceed " +#~ msgstr "最高溫度不能超過 " + +#~ msgid "The minmum temperature should not be less than " +#~ msgstr "最低溫度不應低於 " + +#~ msgid "up to" +#~ msgstr "達到" + +#~ msgid "above" +#~ msgstr "高於" + +#~ msgid "from" +#~ msgstr "從" + +#~ msgid "Configuration package: " +#~ msgstr "設定檔:" + +#~ msgid " updated to " +#~ msgstr "更新到 " + +#~ msgid "Grouping error: " +#~ msgstr "分組錯誤:" + +#~ msgid " can not be placed in the " +#~ msgstr "無法放置於" + +# AI Translated +#~ msgid " maximum drying temperature is " +#~ msgstr " 最高烘乾溫度為 " + +# AI Translated +#~ msgid " minimum drying temperature is " +#~ msgstr " 最低烘乾溫度為 " + +# AI Translated +#~ msgid "needs" +#~ msgstr "需要" + +# AI Translated +#~ msgid "not enabled" +#~ msgstr "未啟用" + +# AI Translated +#~ msgid "material not published" +#~ msgstr "材料未發布" + +#~ msgid "Select the language" +#~ msgstr "選擇語言" + +# AI Translated +#~ msgid "Select plugin" +#~ msgstr "選擇外掛" + +# AI Translated +#~ msgid "" +#~ "Direction in which top surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Outward starts at the center of the surface, so any excess material is pushed towards the edge where it is least visible. Inward starts at the edge and ends with the tight curves at the center.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,頂面填充的方向。\n" +#~ "「向外」從表面中心開始,因此多餘的材料會被推向最不明顯的邊緣。「向內」從邊緣開始,並以中心的緊密曲線結束。\n" +#~ "預設使用最短路徑排序,方向可能為任一種。" + +# AI Translated +#~ msgid "" +#~ "Direction in which bottom surfaces are filled when using a center-based pattern (Concentric, Archimedean Chords, Octagram Spiral).\n" +#~ "Inward starts each surface with the wider outer curves, which improves first layer adhesion on build plates where the tight curves at the center may not stick. Outward starts at the center, pushing any excess material towards the edge.\n" +#~ "Default uses shortest-path ordering, which may run in either direction." +#~ msgstr "" +#~ "使用以中心為基礎的圖樣(同心、阿基米德弦線、八角星螺旋)時,底面填充的方向。\n" +#~ "「向內」讓每個表面從較寬的外側曲線開始,可改善中心緊密曲線可能無法附著的列印板上的第一層附著。「向外」從中心開始,將多餘的材料推向邊緣。\n" +#~ "預設使用最短路徑排序,方向可能為任一種。" + +#~ msgid "If enabled, the wipe tower will not be printed on layers with no tool changes. On layers with a tool change, extruder will travel downward to print the wipe tower. User is responsible for ensuring there is no collision with the print." +#~ msgstr "啟用此選項後,換料塔將不會在沒有工具更換的層中列印。在有工具更換的層中,擠出機將向下移動以列印換料塔。請使用者自行確保清洗塔與列印物之間不會發生碰撞。" + +# AI Translated +#~ msgid "This exports settings to a file." +#~ msgstr "將設定匯出至檔案。" + +#~ msgid "Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer." +#~ msgstr "原生 Wayland 即時檢視需要 GStreamer GTK 視訊接收器。請為 GStreamer 安裝 gtksink 外掛程式,然後重新啟動 OrcaSlicer。" + +#~ msgid "Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation." +#~ msgstr "無法初始化原生 Wayland GStreamer 視訊接收器。請檢查您的 GStreamer GTK 外掛程式安裝。" + +#~ msgid "Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?" +#~ msgstr "執行此設定需要 Windows Media Player!您是否要啟用 Windows Media Player?" + +#~ msgid "BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice" +#~ msgstr "「BambuSource 未正確註冊為媒體播放模組!請點選『是』進行重新註冊,過程中會有兩次提示" + +#~ msgid "Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help." +#~ msgstr "缺少用於媒體播放的已註冊 BambuSource 元件!請重新安裝 OrcaSlicer 或尋求社群協助。" + +#~ msgid "Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it." +#~ msgstr "BambuSource 來自其他安裝版本,可能導致影片播放異常!請點選『是』進行修復。" + +#~ msgid "Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)" +#~ msgstr "您的系統缺少 GStreamer 的 H.264 編解碼器,這是播放影片所必需的。(請嘗試安裝 gstreamer1.0-plugins-bad 或 gstreamer1.0-libav 套件,然後重新啟動 Orca Slicer。)" + +# AI Translated +#~ msgid "N" +#~ msgstr "N" + +# AI Translated +#~ msgid "g" +#~ msgstr "g" + +# AI Translated +#~ msgid "Fila Saving" +#~ msgstr "線材節省" + #~ msgid "" #~ "Layer height is too small.\n" #~ "It will set to min_layer_height\n" diff --git a/resources/data/hints.ini b/resources/data/hints.ini index 15d2758551..a71fb868f9 100644 --- a/resources/data/hints.ini +++ b/resources/data/hints.ini @@ -75,7 +75,7 @@ documentation_link = https://www.orcaslicer.com/wiki/material_temperatures#print [hint:Calibration] text = Calibration\nDid you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer. -documentation_link = https://www.orcaslicer.com/wiki/calibration +documentation_link = https://www.orcaslicer.com/wiki/calibration_guide [hint:Auxiliary fan] text = Auxiliary fan\nDid you know that OrcaSlicer supports Auxiliary part cooling fan? diff --git a/resources/images/color_palette.svg b/resources/images/color_palette.svg new file mode 100644 index 0000000000..8448a364aa --- /dev/null +++ b/resources/images/color_palette.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/images/design_arc3pt.svg b/resources/images/design_arc3pt.svg new file mode 100644 index 0000000000..1b40569b4f --- /dev/null +++ b/resources/images/design_arc3pt.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_arc_center.svg b/resources/images/design_arc_center.svg new file mode 100644 index 0000000000..e4c85febfc --- /dev/null +++ b/resources/images/design_arc_center.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_array.svg b/resources/images/design_array.svg new file mode 100644 index 0000000000..d29da47bd7 --- /dev/null +++ b/resources/images/design_array.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_boolean.svg b/resources/images/design_boolean.svg new file mode 100644 index 0000000000..97813cf2eb --- /dev/null +++ b/resources/images/design_boolean.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/design_bspline.svg b/resources/images/design_bspline.svg new file mode 100644 index 0000000000..16a5dc9b31 --- /dev/null +++ b/resources/images/design_bspline.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_angle.svg b/resources/images/design_c_angle.svg new file mode 100644 index 0000000000..2359b23b6a --- /dev/null +++ b/resources/images/design_c_angle.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_coincident.svg b/resources/images/design_c_coincident.svg new file mode 100644 index 0000000000..83ab602eca --- /dev/null +++ b/resources/images/design_c_coincident.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_collinear.svg b/resources/images/design_c_collinear.svg new file mode 100644 index 0000000000..28b8b6a8cd --- /dev/null +++ b/resources/images/design_c_collinear.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_concentric.svg b/resources/images/design_c_concentric.svg new file mode 100644 index 0000000000..9861381b58 --- /dev/null +++ b/resources/images/design_c_concentric.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_diameter.svg b/resources/images/design_c_diameter.svg new file mode 100644 index 0000000000..8e3766c4dc --- /dev/null +++ b/resources/images/design_c_diameter.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_dist_x.svg b/resources/images/design_c_dist_x.svg new file mode 100644 index 0000000000..e811a58df6 --- /dev/null +++ b/resources/images/design_c_dist_x.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_dist_y.svg b/resources/images/design_c_dist_y.svg new file mode 100644 index 0000000000..5aefec85ee --- /dev/null +++ b/resources/images/design_c_dist_y.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_equal.svg b/resources/images/design_c_equal.svg new file mode 100644 index 0000000000..f0657b74b0 --- /dev/null +++ b/resources/images/design_c_equal.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_equal_radius.svg b/resources/images/design_c_equal_radius.svg new file mode 100644 index 0000000000..4d7ccf2c5c --- /dev/null +++ b/resources/images/design_c_equal_radius.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_fix.svg b/resources/images/design_c_fix.svg new file mode 100644 index 0000000000..b64024286e --- /dev/null +++ b/resources/images/design_c_fix.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_horizontal.svg b/resources/images/design_c_horizontal.svg new file mode 100644 index 0000000000..9804a8ad82 --- /dev/null +++ b/resources/images/design_c_horizontal.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_midpoint.svg b/resources/images/design_c_midpoint.svg new file mode 100644 index 0000000000..6646a6cc1e --- /dev/null +++ b/resources/images/design_c_midpoint.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_parallel.svg b/resources/images/design_c_parallel.svg new file mode 100644 index 0000000000..cc78f9c452 --- /dev/null +++ b/resources/images/design_c_parallel.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_perpendicular.svg b/resources/images/design_c_perpendicular.svg new file mode 100644 index 0000000000..9a67cebb2b --- /dev/null +++ b/resources/images/design_c_perpendicular.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_radius.svg b/resources/images/design_c_radius.svg new file mode 100644 index 0000000000..5e1f1cdadf --- /dev/null +++ b/resources/images/design_c_radius.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_sym_h.svg b/resources/images/design_c_sym_h.svg new file mode 100644 index 0000000000..4e152787b1 --- /dev/null +++ b/resources/images/design_c_sym_h.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_sym_v.svg b/resources/images/design_c_sym_v.svg new file mode 100644 index 0000000000..f4cd99371a --- /dev/null +++ b/resources/images/design_c_sym_v.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_symmetric.svg b/resources/images/design_c_symmetric.svg new file mode 100644 index 0000000000..7a539be9a3 --- /dev/null +++ b/resources/images/design_c_symmetric.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_tangent.svg b/resources/images/design_c_tangent.svg new file mode 100644 index 0000000000..e82d23240d --- /dev/null +++ b/resources/images/design_c_tangent.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_c_vertical.svg b/resources/images/design_c_vertical.svg new file mode 100644 index 0000000000..98526e93d7 --- /dev/null +++ b/resources/images/design_c_vertical.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_chamfer.svg b/resources/images/design_chamfer.svg new file mode 100644 index 0000000000..861f7b819a --- /dev/null +++ b/resources/images/design_chamfer.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_check.svg b/resources/images/design_check.svg new file mode 100644 index 0000000000..82d5edd48e --- /dev/null +++ b/resources/images/design_check.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_circle.svg b/resources/images/design_circle.svg new file mode 100644 index 0000000000..edc74b13ea --- /dev/null +++ b/resources/images/design_circle.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_circle2pt.svg b/resources/images/design_circle2pt.svg new file mode 100644 index 0000000000..844b0797eb --- /dev/null +++ b/resources/images/design_circle2pt.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_circle3pt.svg b/resources/images/design_circle3pt.svg new file mode 100644 index 0000000000..6fdbab2474 --- /dev/null +++ b/resources/images/design_circle3pt.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_constrain.svg b/resources/images/design_constrain.svg new file mode 100644 index 0000000000..cc9be6ca9b --- /dev/null +++ b/resources/images/design_constrain.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_construction.svg b/resources/images/design_construction.svg new file mode 100644 index 0000000000..89d10f424d --- /dev/null +++ b/resources/images/design_construction.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_crect.svg b/resources/images/design_crect.svg new file mode 100644 index 0000000000..9e2ece0c24 --- /dev/null +++ b/resources/images/design_crect.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_cut.svg b/resources/images/design_cut.svg new file mode 100644 index 0000000000..3f68a7002e --- /dev/null +++ b/resources/images/design_cut.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/design_delete.svg b/resources/images/design_delete.svg new file mode 100644 index 0000000000..f5d5c6a1c7 --- /dev/null +++ b/resources/images/design_delete.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_dimension.svg b/resources/images/design_dimension.svg new file mode 100644 index 0000000000..f456abb6fc --- /dev/null +++ b/resources/images/design_dimension.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_draft.svg b/resources/images/design_draft.svg new file mode 100644 index 0000000000..2957584cb8 --- /dev/null +++ b/resources/images/design_draft.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_dressup.svg b/resources/images/design_dressup.svg new file mode 100644 index 0000000000..cc2a09250e --- /dev/null +++ b/resources/images/design_dressup.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_edit.svg b/resources/images/design_edit.svg new file mode 100644 index 0000000000..4de84fc390 --- /dev/null +++ b/resources/images/design_edit.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_ellipse.svg b/resources/images/design_ellipse.svg new file mode 100644 index 0000000000..1f946eb5fa --- /dev/null +++ b/resources/images/design_ellipse.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_ellipse_arc.svg b/resources/images/design_ellipse_arc.svg new file mode 100644 index 0000000000..e9cd4aa66a --- /dev/null +++ b/resources/images/design_ellipse_arc.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_extend.svg b/resources/images/design_extend.svg new file mode 100644 index 0000000000..9d4934fada --- /dev/null +++ b/resources/images/design_extend.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_extrude.svg b/resources/images/design_extrude.svg new file mode 100644 index 0000000000..8137336fb2 --- /dev/null +++ b/resources/images/design_extrude.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_eye.svg b/resources/images/design_eye.svg new file mode 100644 index 0000000000..97296c7465 --- /dev/null +++ b/resources/images/design_eye.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_filletedge.svg b/resources/images/design_filletedge.svg new file mode 100644 index 0000000000..435d7c2cb9 --- /dev/null +++ b/resources/images/design_filletedge.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_hole.svg b/resources/images/design_hole.svg new file mode 100644 index 0000000000..35128ef51e --- /dev/null +++ b/resources/images/design_hole.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_line.svg b/resources/images/design_line.svg new file mode 100644 index 0000000000..afb644ba3f --- /dev/null +++ b/resources/images/design_line.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_loft.svg b/resources/images/design_loft.svg new file mode 100644 index 0000000000..4529b52554 --- /dev/null +++ b/resources/images/design_loft.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_mirror.svg b/resources/images/design_mirror.svg new file mode 100644 index 0000000000..0a9642f8f3 --- /dev/null +++ b/resources/images/design_mirror.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_move.svg b/resources/images/design_move.svg new file mode 100644 index 0000000000..dba4f4f4c2 --- /dev/null +++ b/resources/images/design_move.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_movedown.svg b/resources/images/design_movedown.svg new file mode 100644 index 0000000000..89c442dc6e --- /dev/null +++ b/resources/images/design_movedown.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_moveup.svg b/resources/images/design_moveup.svg new file mode 100644 index 0000000000..b2fe5ec127 --- /dev/null +++ b/resources/images/design_moveup.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_offset.svg b/resources/images/design_offset.svg new file mode 100644 index 0000000000..74758ad0ba --- /dev/null +++ b/resources/images/design_offset.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_pattern.svg b/resources/images/design_pattern.svg new file mode 100644 index 0000000000..c07708509b --- /dev/null +++ b/resources/images/design_pattern.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_plane.svg b/resources/images/design_plane.svg new file mode 100644 index 0000000000..8a3886158f --- /dev/null +++ b/resources/images/design_plane.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_point.svg b/resources/images/design_point.svg new file mode 100644 index 0000000000..dd5d750545 --- /dev/null +++ b/resources/images/design_point.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_polararray.svg b/resources/images/design_polararray.svg new file mode 100644 index 0000000000..5e91d49f73 --- /dev/null +++ b/resources/images/design_polararray.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_polygon.svg b/resources/images/design_polygon.svg new file mode 100644 index 0000000000..de5cfd6f20 --- /dev/null +++ b/resources/images/design_polygon.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_polyline.svg b/resources/images/design_polyline.svg new file mode 100644 index 0000000000..96538abea7 --- /dev/null +++ b/resources/images/design_polyline.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_rect.svg b/resources/images/design_rect.svg new file mode 100644 index 0000000000..67b70cc6a1 --- /dev/null +++ b/resources/images/design_rect.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_rect_oblique.svg b/resources/images/design_rect_oblique.svg new file mode 100644 index 0000000000..5d252ca677 --- /dev/null +++ b/resources/images/design_rect_oblique.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_rect_rounded.svg b/resources/images/design_rect_rounded.svg new file mode 100644 index 0000000000..a8c7022c87 --- /dev/null +++ b/resources/images/design_rect_rounded.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_revolve.svg b/resources/images/design_revolve.svg new file mode 100644 index 0000000000..3a0e87f6f4 --- /dev/null +++ b/resources/images/design_revolve.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_rib.svg b/resources/images/design_rib.svg new file mode 100644 index 0000000000..b481e38d23 --- /dev/null +++ b/resources/images/design_rib.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_rotate.svg b/resources/images/design_rotate.svg new file mode 100644 index 0000000000..5a9b48ebfe --- /dev/null +++ b/resources/images/design_rotate.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_scale.svg b/resources/images/design_scale.svg new file mode 100644 index 0000000000..5a53562ba3 --- /dev/null +++ b/resources/images/design_scale.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_select.svg b/resources/images/design_select.svg new file mode 100644 index 0000000000..6f2e4f4ae9 --- /dev/null +++ b/resources/images/design_select.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_shell.svg b/resources/images/design_shell.svg new file mode 100644 index 0000000000..aa11b572e6 --- /dev/null +++ b/resources/images/design_shell.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_sketch.svg b/resources/images/design_sketch.svg new file mode 100644 index 0000000000..102a9fe493 --- /dev/null +++ b/resources/images/design_sketch.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_slot.svg b/resources/images/design_slot.svg new file mode 100644 index 0000000000..f1c72f8c54 --- /dev/null +++ b/resources/images/design_slot.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_slot_arc.svg b/resources/images/design_slot_arc.svg new file mode 100644 index 0000000000..f17ab89144 --- /dev/null +++ b/resources/images/design_slot_arc.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_step.svg b/resources/images/design_step.svg new file mode 100644 index 0000000000..4bdf7811ff --- /dev/null +++ b/resources/images/design_step.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_surface.svg b/resources/images/design_surface.svg new file mode 100644 index 0000000000..1299dd1a97 --- /dev/null +++ b/resources/images/design_surface.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_svg.svg b/resources/images/design_svg.svg new file mode 100644 index 0000000000..34a0685153 --- /dev/null +++ b/resources/images/design_svg.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_sweep.svg b/resources/images/design_sweep.svg new file mode 100644 index 0000000000..f1cc301b1e --- /dev/null +++ b/resources/images/design_sweep.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_tangentarc.svg b/resources/images/design_tangentarc.svg new file mode 100644 index 0000000000..9e53da5c8e --- /dev/null +++ b/resources/images/design_tangentarc.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_text.svg b/resources/images/design_text.svg new file mode 100644 index 0000000000..78da223f62 --- /dev/null +++ b/resources/images/design_text.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_thicken.svg b/resources/images/design_thicken.svg new file mode 100644 index 0000000000..bfcd356cfa --- /dev/null +++ b/resources/images/design_thicken.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_thread.svg b/resources/images/design_thread.svg new file mode 100644 index 0000000000..9bff4d778b --- /dev/null +++ b/resources/images/design_thread.svg @@ -0,0 +1 @@ + diff --git a/resources/images/design_trim.svg b/resources/images/design_trim.svg new file mode 100644 index 0000000000..405e9fe3c4 --- /dev/null +++ b/resources/images/design_trim.svg @@ -0,0 +1 @@ + diff --git a/resources/images/live_stream_default.png b/resources/images/live_stream_default.png index 326ceaf994..c1aa90bf17 100644 Binary files a/resources/images/live_stream_default.png and b/resources/images/live_stream_default.png differ diff --git a/resources/images/menu_publish.svg b/resources/images/menu_publish.svg new file mode 100644 index 0000000000..e444623e33 --- /dev/null +++ b/resources/images/menu_publish.svg @@ -0,0 +1 @@ + diff --git a/resources/images/param_add.svg b/resources/images/param_add.svg index 71ea5092af..b00140b68a 100644 --- a/resources/images/param_add.svg +++ b/resources/images/param_add.svg @@ -1,8 +1,4 @@ - - - - Layer 1 - - - - + + + + \ No newline at end of file diff --git a/resources/images/param_spiralinset.svg b/resources/images/param_spiralinset.svg new file mode 100644 index 0000000000..6ec1ab36aa --- /dev/null +++ b/resources/images/param_spiralinset.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/tab_design_active.svg b/resources/images/tab_design_active.svg new file mode 100644 index 0000000000..36ffc87ee5 --- /dev/null +++ b/resources/images/tab_design_active.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/toolbar_modifier_cube_dark.svg b/resources/images/toolbar_modifier_cube_dark.svg new file mode 100644 index 0000000000..7e20cd0dd5 --- /dev/null +++ b/resources/images/toolbar_modifier_cube_dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/toolbar_sketch.svg b/resources/images/toolbar_sketch.svg new file mode 100644 index 0000000000..351b3e7924 --- /dev/null +++ b/resources/images/toolbar_sketch.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/toolbar_sketch_dark.svg b/resources/images/toolbar_sketch_dark.svg new file mode 100644 index 0000000000..e5cf8d6859 --- /dev/null +++ b/resources/images/toolbar_sketch_dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/printers/bambu_filament_ids.json b/resources/printers/bambu_filament_ids.json new file mode 100644 index 0000000000..b21946f1a3 --- /dev/null +++ b/resources/printers/bambu_filament_ids.json @@ -0,0 +1,607 @@ +{ + "bambustudio_commit": "66e405477", + "filaments": { + "OF0UJcb6": { + "bambu_id": "GFG60", + "name": "PolyLite PETG", + "type": "PETG", + "vendor": "Polymaker" + }, + "OF0wBGNx": { + "bambu_id": "GFB51", + "name": "Bambu ASA-CF", + "type": "ASA-CF", + "vendor": "Bambu Lab" + }, + "OF1UNk9P": { + "bambu_id": "GFP97", + "name": "Generic PP", + "type": "PP", + "vendor": "Generic" + }, + "OF2GCW1l": { + "bambu_id": "GFSNL08", + "name": "SUNLU PETG", + "type": "PETG", + "vendor": "SUNLU" + }, + "OF2VFe4J": { + "bambu_id": "GFN04", + "name": "Bambu PAHT-CF", + "type": "PA-CF", + "vendor": "Bambu Lab" + }, + "OF342jVN": { + "bambu_id": "GFA10", + "name": "Bambu PLA Tough+", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OF4RvVuU": { + "bambu_id": "GFT02", + "name": "Bambu PPS-CF", + "type": "PPS-CF", + "vendor": "Bambu Lab" + }, + "OF54B0S0": { + "bambu_id": "GFN06", + "name": "Bambu PPA-CF", + "type": "PPA-CF", + "vendor": "Bambu Lab" + }, + "OF5CgdDq": { + "bambu_id": "GFL00", + "name": "PolyLite PLA", + "type": "PLA", + "vendor": "Polymaker" + }, + "OF6rdQ6M": { + "bambu_id": "GFT98", + "name": "Generic PPS-CF", + "type": "PPS-CF", + "vendor": "Generic" + }, + "OF74KeQR": { + "bambu_id": "GFR98", + "name": "Generic PHA", + "type": "PHA", + "vendor": "Generic" + }, + "OF7lOgYF": { + "bambu_id": "GFG96", + "name": "Generic PETG HF", + "type": "PETG", + "vendor": "Generic" + }, + "OF8Tlg47": { + "bambu_id": "GFN96", + "name": "Generic PPA-GF", + "type": "PPA-GF", + "vendor": "Generic" + }, + "OF8tPByX": { + "bambu_id": "GFN97", + "name": "Generic PPA-CF", + "type": "PPA-CF", + "vendor": "Generic" + }, + "OF9OlTWH": { + "bambu_id": "GFA07", + "name": "Bambu PLA Marble", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFAnyRUI": { + "bambu_id": "GFS02", + "name": "Bambu Support For PLA", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFBSW57R": { + "bambu_id": "GFA11", + "name": "Bambu PLA Aero", + "type": "PLA-AERO", + "vendor": "Bambu Lab" + }, + "OFBw6eEG": { + "bambu_id": "GFL05", + "name": "Overture Matte PLA", + "type": "PLA", + "vendor": "Overture" + }, + "OFCD8qiU": { + "bambu_id": "GFR99", + "name": "Generic EVA", + "type": "EVA", + "vendor": "Generic" + }, + "OFDGigEI": { + "bambu_id": "GFA13", + "name": "Bambu PLA Dynamic", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFDSrzZ8": { + "bambu_id": "GFL99", + "name": "Generic PLA", + "type": "PLA", + "vendor": "Generic" + }, + "OFDvXujf": { + "bambu_id": "GFS99", + "name": "Generic PVA", + "type": "PVA", + "vendor": "Generic" + }, + "OFDxfPgH": { + "bambu_id": "GFA08", + "name": "Bambu PLA Sparkle", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEGNJD4": { + "bambu_id": "GFA05", + "name": "Bambu PLA Silk", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEkPBwx": { + "bambu_id": "GFA12", + "name": "Bambu PLA Glow", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFEswT5W": { + "bambu_id": "GFA50", + "name": "Bambu PLA-CF", + "type": "PLA-CF", + "vendor": "Bambu Lab" + }, + "OFFNYwWR": { + "bambu_id": "GFN03", + "name": "Bambu PA-CF", + "type": "PA-CF", + "vendor": "Bambu Lab" + }, + "OFFbSnCD": { + "bambu_id": "GFA17", + "name": "Bambu PLA Translucent", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFFvzqcd": { + "bambu_id": "GFG00", + "name": "Bambu PETG Basic", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFHWSM21": { + "bambu_id": "GFL54", + "name": "Fiberon PET-CF", + "type": "PET-CF", + "vendor": "Polymaker" + }, + "OFHa48An": { + "bambu_id": "GFT01", + "name": "Bambu PET-CF", + "type": "PET-CF", + "vendor": "Bambu Lab" + }, + "OFHmPYRy": { + "bambu_id": "GFSNL04", + "name": "SUNLU PLA+ 2.0", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFIBbYO5": { + "bambu_id": "GFU02", + "name": "Bambu TPU for AMS", + "type": "TPU-AMS", + "vendor": "Bambu Lab" + }, + "OFIfnzxC": { + "bambu_id": "GFS05", + "name": "Bambu Support For PLA/PETG", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFKhMPeX": { + "bambu_id": "GFC00", + "name": "Bambu PC", + "type": "PC", + "vendor": "Bambu Lab" + }, + "OFLJ8S6I": { + "bambu_id": "GFSNL07", + "name": "SUNLU Wood PLA", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFLPAxz3": { + "bambu_id": "GFB98", + "name": "Generic ASA", + "type": "ASA", + "vendor": "Generic" + }, + "OFLakOUI": { + "bambu_id": "GFC99", + "name": "Generic PC", + "type": "PC", + "vendor": "Generic" + }, + "OFMTK0UC": { + "bambu_id": "GFS03", + "name": "Bambu Support For PA/PET", + "type": "PA", + "vendor": "Bambu Lab" + }, + "OFMUWNkp": { + "bambu_id": "GFSNL03", + "name": "SUNLU PLA+", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFMjtqTC": { + "bambu_id": "GFA16", + "name": "Bambu PLA Wood", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFNk8bxk": { + "bambu_id": "GFN08", + "name": "Bambu PA6-GF", + "type": "PA-GF", + "vendor": "Bambu Lab" + }, + "OFOvv91M": { + "bambu_id": "GFB60", + "name": "PolyLite ABS", + "type": "ABS", + "vendor": "Polymaker" + }, + "OFPklMI1": { + "bambu_id": "GFP99", + "name": "Generic PE", + "type": "PE", + "vendor": "Generic" + }, + "OFQ3e56w": { + "bambu_id": "GFA15", + "name": "Bambu PLA Galaxy", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFQHiNJs": { + "bambu_id": "GFS01", + "name": "Bambu Support G", + "type": "PA", + "vendor": "Bambu Lab" + }, + "OFQLcbps": { + "bambu_id": "GFN98", + "name": "Generic PA-CF", + "type": "PA-CF", + "vendor": "Generic" + }, + "OFS2tn6G": { + "bambu_id": "GFL53", + "name": "Fiberon PA612-CF", + "type": "PA", + "vendor": "Polymaker" + }, + "OFTHDCqA": { + "bambu_id": "GFA19", + "name": "Bambu PLA Pure", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFTRZ8Y4": { + "bambu_id": "GFG50", + "name": "Bambu PETG-CF", + "type": "PETG-CF", + "vendor": "Bambu Lab" + }, + "OFUanySo": { + "bambu_id": "GFA06", + "name": "Bambu PLA Silk+", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFVCkX5w": { + "bambu_id": "GFU01", + "name": "Bambu TPU 95A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFW29a9R": { + "bambu_id": "GFL01", + "name": "PolyTerra PLA", + "type": "PLA", + "vendor": "Polymaker" + }, + "OFWbdGsC": { + "bambu_id": "GFL98", + "name": "Generic PLA-CF", + "type": "PLA-CF", + "vendor": "Generic" + }, + "OFX0ycRQ": { + "bambu_id": "GFL52", + "name": "Fiberon PA12-CF", + "type": "PA-CF", + "vendor": "Polymaker" + }, + "OFXIbw5D": { + "bambu_id": "GFA01", + "name": "Bambu PLA Matte", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFXkm8q1": { + "bambu_id": "GFP96", + "name": "Generic PP-CF", + "type": "PP-CF", + "vendor": "Generic" + }, + "OFXzQ4yL": { + "bambu_id": "GFB02", + "name": "Bambu ASA-Aero", + "type": "ASA-AERO", + "vendor": "Bambu Lab" + }, + "OFY9muEs": { + "bambu_id": "GFB99", + "name": "Generic ABS", + "type": "ABS", + "vendor": "Generic" + }, + "OFYPdQJh": { + "bambu_id": "GFG99", + "name": "Generic PETG", + "type": "PETG", + "vendor": "Generic" + }, + "OFaQMgRH": { + "bambu_id": "GFA09", + "name": "Bambu PLA Tough", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFc3xdm9": { + "bambu_id": "GFL04", + "name": "Overture PLA", + "type": "PLA", + "vendor": "Overture" + }, + "OFcytyoA": { + "bambu_id": "GFL06", + "name": "Fiberon PETG-ESD", + "type": "PETG", + "vendor": "Polymaker" + }, + "OFd0Fv0k": { + "bambu_id": "GFP98", + "name": "Generic PE-CF", + "type": "PE-CF", + "vendor": "Generic" + }, + "OFdyfQvU": { + "bambu_id": "GFG03", + "name": "Bambu PETG Matte", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFesA6rF": { + "bambu_id": "GFL96", + "name": "Generic PLA Silk", + "type": "PLA", + "vendor": "Generic" + }, + "OFf6mfQO": { + "bambu_id": "GFS06", + "name": "Bambu Support for ABS", + "type": "ABS", + "vendor": "Bambu Lab" + }, + "OFfBpSRI": { + "bambu_id": "GFB01", + "name": "Bambu ASA", + "type": "ASA", + "vendor": "Bambu Lab" + }, + "OFg57Nmc": { + "bambu_id": "GFC01", + "name": "Bambu PC FR", + "type": "PC", + "vendor": "Bambu Lab" + }, + "OFg8ndtj": { + "bambu_id": "GFN99", + "name": "Generic PA", + "type": "PA", + "vendor": "Generic" + }, + "OFgbpcy9": { + "bambu_id": "GFU99", + "name": "Generic TPU", + "type": "TPU", + "vendor": "Generic" + }, + "OFhuaUQB": { + "bambu_id": "GFB00", + "name": "Bambu ABS", + "type": "ABS", + "vendor": "Bambu Lab" + }, + "OFk8t9mz": { + "bambu_id": "GFL55", + "name": "Fiberon PETG-rCF", + "type": "PETG-CF", + "vendor": "Polymaker" + }, + "OFkOviHk": { + "bambu_id": "GFL50", + "name": "Fiberon PA6-CF", + "type": "PA6-CF", + "vendor": "Polymaker" + }, + "OFknl9Iz": { + "bambu_id": "GFB50", + "name": "Bambu ABS-GF", + "type": "ABS-GF", + "vendor": "Bambu Lab" + }, + "OFlfuj2k": { + "bambu_id": "GFU04", + "name": "Bambu TPU 85A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFmN2lvw": { + "bambu_id": "GFU98", + "name": "Generic TPU for AMS", + "type": "TPU-AMS", + "vendor": "Generic" + }, + "OFmpMwxS": { + "bambu_id": "GFL95", + "name": "Generic PLA High Speed", + "type": "PLA", + "vendor": "Generic" + }, + "OFnfxTvi": { + "bambu_id": "GFA18", + "name": "Bambu PLA Lite", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFniMuTN": { + "bambu_id": "GFN05", + "name": "Bambu PA6-CF", + "type": "PA6-CF", + "vendor": "Bambu Lab" + }, + "OFo2UF2C": { + "bambu_id": "GFS97", + "name": "Generic BVOH", + "type": "BVOH", + "vendor": "Generic" + }, + "OFoYSJKi": { + "bambu_id": "GFG98", + "name": "Generic PETG-CF", + "type": "PETG-CF", + "vendor": "Generic" + }, + "OFoiVqVM": { + "bambu_id": "GFA00", + "name": "Bambu PLA Basic", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFovEIbw": { + "bambu_id": "GFG02", + "name": "Bambu PETG HF", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFpPGSKG": { + "bambu_id": "GFSNL05", + "name": "SUNLU Silk PLA+", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFpW4gdi": { + "bambu_id": "GFSNL02", + "name": "SUNLU PLA Matte", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFq9svOz": { + "bambu_id": "GFT97", + "name": "Generic PPS", + "type": "PPS", + "vendor": "Generic" + }, + "OFqINlYj": { + "bambu_id": "GFL03", + "name": "eSUN PLA+", + "type": "PLA", + "vendor": "eSUN" + }, + "OFrKLeE3": { + "bambu_id": "GFA02", + "name": "Bambu PLA Metal", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFsFon5l": { + "bambu_id": "GFS98", + "name": "Generic HIPS", + "type": "HIPS", + "vendor": "Generic" + }, + "OFsHSVZc": { + "bambu_id": "GFS00", + "name": "Bambu Support W", + "type": "PLA", + "vendor": "Bambu Lab" + }, + "OFsijjtH": { + "bambu_id": "GFP95", + "name": "Generic PP-GF", + "type": "PP-GF", + "vendor": "Generic" + }, + "OFtkLO6q": { + "bambu_id": "GFU03", + "name": "Bambu TPU 90A", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFu1evlr": { + "bambu_id": "GFG97", + "name": "Generic PCTG", + "type": "PCTG", + "vendor": "Generic" + }, + "OFvKUnLh": { + "bambu_id": "GFU00", + "name": "Bambu TPU 95A HF", + "type": "TPU", + "vendor": "Bambu Lab" + }, + "OFvrXuV7": { + "bambu_id": "GFB61", + "name": "PolyLite ASA", + "type": "ASA", + "vendor": "Polymaker" + }, + "OFwPrlCM": { + "bambu_id": "GFG01", + "name": "Bambu PETG Translucent", + "type": "PETG", + "vendor": "Bambu Lab" + }, + "OFwaYjL6": { + "bambu_id": "GFL51", + "name": "Fiberon PA6-GF", + "type": "PA-GF", + "vendor": "Polymaker" + }, + "OFxUwUeW": { + "bambu_id": "GFSNL06", + "name": "SUNLU PLA Marble", + "type": "PLA", + "vendor": "SUNLU" + }, + "OFzyIxba": { + "bambu_id": "GFS04", + "name": "Bambu PVA", + "type": "PVA", + "vendor": "Bambu Lab" + } + }, + "generated": "2026-09-04", + "source": "https://github.com/bambulab/BambuStudio" +} diff --git a/resources/profiles/Afinia.json b/resources/profiles/Afinia.json index a11cc0ecf6..e65ced0f68 100644 --- a/resources/profiles/Afinia.json +++ b/resources/profiles/Afinia.json @@ -1,6 +1,6 @@ { "name": "Afinia", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Afinia configurations", "machine_model_list": [ diff --git a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json index 79a5b294b9..77fc0deee9 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS+@HS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS+@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFLfywkp", "setting_id": "wAJTMxtCY7EoavRi", "name": "Afinia ABS+@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia ABS@HS.json b/resources/profiles/Afinia/filament/Afinia ABS@HS.json index 90c4f9610a..e905e002bd 100644 --- a/resources/profiles/Afinia/filament/Afinia ABS@HS.json +++ b/resources/profiles/Afinia/filament/Afinia ABS@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFV5wEMe", "setting_id": "qCDnb2iBaz4hd4vX", "name": "Afinia ABS@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia PLA@HS.json b/resources/profiles/Afinia/filament/Afinia PLA@HS.json index 6f37a09ac3..cfd15a574b 100644 --- a/resources/profiles/Afinia/filament/Afinia PLA@HS.json +++ b/resources/profiles/Afinia/filament/Afinia PLA@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OF9HCdyQ", "setting_id": "N3sCgjdjvp6FTtw9", "name": "Afinia PLA@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia TPU@HS.json b/resources/profiles/Afinia/filament/Afinia TPU@HS.json index c2590ff9ef..56992bf983 100644 --- a/resources/profiles/Afinia/filament/Afinia TPU@HS.json +++ b/resources/profiles/Afinia/filament/Afinia TPU@HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zUqTgAEbqTN1EdRl", - "filament_id": "GFU01_01", + "filament_id": "OFDJU6R3", "instantiation": "true", "filament_vendor": [ "Afinia" diff --git a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json index 79b0ea9db3..f98da8225d 100644 --- a/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value ABS@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFXi59OX", "setting_id": "OxIiEYjbhEvSykaQ", "name": "Afinia Value ABS@HS", "from": "system", diff --git a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json index 20dceb0249..1d9f669bd0 100644 --- a/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json +++ b/resources/profiles/Afinia/filament/Afinia Value PLA@HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OFgHh8ly", "setting_id": "BASsUdyvElEVJ9AA", "name": "Afinia Value PLA@HS", "from": "system", diff --git a/resources/profiles/Afinia/machine/Afinia H+1(HS).json b/resources/profiles/Afinia/machine/Afinia H+1(HS).json index fc724895ef..87e6a0e6a6 100644 --- a/resources/profiles/Afinia/machine/Afinia H+1(HS).json +++ b/resources/profiles/Afinia/machine/Afinia H+1(HS).json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "Afinia ABS;Afinia PLA" + "default_materials": "Afinia ABS@HS;Afinia PLA@HS" } diff --git a/resources/profiles/Afinia/machine/fdm_afinia_common.json b/resources/profiles/Afinia/machine/fdm_afinia_common.json index 9a567074ca..2ddf8bbd40 100644 --- a/resources/profiles/Afinia/machine/fdm_afinia_common.json +++ b/resources/profiles/Afinia/machine/fdm_afinia_common.json @@ -1,9 +1,9 @@ { "type": "machine", "name": "fdm_afinia_common", + "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", - "inherits": "fdm_machine_common", "gcode_flavor": "klipper", "machine_max_acceleration_e": [ "5000", @@ -117,15 +117,12 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" ], - "default_filament_profile": [ - "" - ], + "default_filament_profile": [], "default_print_profile": "0.20mm Standard @Afinia H+1(HS)", "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/Afinia/machine/fdm_machine_common.json b/resources/profiles/Afinia/machine/fdm_machine_common.json index d4a5c3be25..fbe40f97e3 100644 --- a/resources/profiles/Afinia/machine/fdm_machine_common.json +++ b/resources/profiles/Afinia/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Afinia/process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json index 571fdf3e01..8f1a939266 100644 --- a/resources/profiles/Afinia/process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.18mm Fine @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a smaller layer height and results in smoother surface and higher printing quality.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Afinia H+1(HS) 0.6 nozzle" ] diff --git a/resources/profiles/Afinia/process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json index 1d984a149d..3a3c297454 100644 --- a/resources/profiles/Afinia/process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.24mm Standard @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a balanced layer height for good quality and reasonable printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Afinia H+1(HS) 0.6 nozzle" ] diff --git a/resources/profiles/Afinia/process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json index 187bb12009..ed544ebe3f 100644 --- a/resources/profiles/Afinia/process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.30mm Standard @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Afinia H+1(HS) 0.6 nozzle" ] diff --git a/resources/profiles/Afinia/process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json index 63fc4df090..6a87a835c9 100644 --- a/resources/profiles/Afinia/process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.30mm Strength @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height with optimized settings for stronger parts.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "sparse_infill_density": "25%", "wall_loops": "3", "compatible_printers": [ diff --git a/resources/profiles/Afinia/process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json index c693fc468b..0417c687ec 100644 --- a/resources/profiles/Afinia/process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.36mm Draft @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a bigger layer height for faster printing but with more visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Afinia H+1(HS) 0.6 nozzle" ] diff --git a/resources/profiles/Afinia/process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json b/resources/profiles/Afinia/process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json index e9f4057178..5dcb70660c 100644 --- a/resources/profiles/Afinia/process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json +++ b/resources/profiles/Afinia/process/0.42mm Extra Draft @Afinia H+1(HS) 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has the biggest layer height for fastest printing but with very visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Afinia H+1(HS) 0.6 nozzle" ] diff --git a/resources/profiles/Afinia/process/fdm_process_afinia_common.json b/resources/profiles/Afinia/process/fdm_process_afinia_common.json index 04c0e678ec..803080ada3 100644 --- a/resources/profiles/Afinia/process/fdm_process_afinia_common.json +++ b/resources/profiles/Afinia/process/fdm_process_afinia_common.json @@ -21,7 +21,6 @@ "top_surface_acceleration": "2000", "initial_layer_acceleration": "500", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_line_width": "0.5", "initial_layer_speed": "50", "initial_layer_infill_speed": "90", diff --git a/resources/profiles/Afinia/process/fdm_process_common.json b/resources/profiles/Afinia/process/fdm_process_common.json index ca4d181e78..26eb3a50a0 100644 --- a/resources/profiles/Afinia/process/fdm_process_common.json +++ b/resources/profiles/Afinia/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "50", diff --git a/resources/profiles/Anker.json b/resources/profiles/Anker.json index 544d889b4f..945378db9c 100644 --- a/resources/profiles/Anker.json +++ b/resources/profiles/Anker.json @@ -1,6 +1,6 @@ { "name": "Anker", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "0", "description": "Anker configurations", "machine_model_list": [ @@ -161,172 +161,172 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Anker Generic ABS @base", - "sub_path": "filament/Anker Generic ABS @base.json" + "name": "Generic ABS @Anker base", + "sub_path": "filament/Generic ABS @Anker base.json" }, { - "name": "Anker Generic ASA @base", - "sub_path": "filament/Anker Generic ASA @base.json" + "name": "Generic ASA @Anker base", + "sub_path": "filament/Generic ASA @Anker base.json" }, { - "name": "Anker Generic PA @base", - "sub_path": "filament/Anker Generic PA @base.json" + "name": "Generic PA @Anker base", + "sub_path": "filament/Generic PA @Anker base.json" }, { - "name": "Anker Generic PA-CF @base", - "sub_path": "filament/Anker Generic PA-CF @base.json" + "name": "Generic PA-CF @Anker base", + "sub_path": "filament/Generic PA-CF @Anker base.json" }, { - "name": "Anker Generic PC @base", - "sub_path": "filament/Anker Generic PC @base.json" + "name": "Generic PC @Anker base", + "sub_path": "filament/Generic PC @Anker base.json" }, { - "name": "Anker Generic PETG @base", - "sub_path": "filament/Anker Generic PETG @base.json" + "name": "Generic PETG @Anker base", + "sub_path": "filament/Generic PETG @Anker base.json" }, { - "name": "Anker Generic PETG-CF @base", - "sub_path": "filament/Anker Generic PETG-CF @base.json" + "name": "Generic PETG-CF @Anker base", + "sub_path": "filament/Generic PETG-CF @Anker base.json" }, { - "name": "Anker Generic PLA @base", - "sub_path": "filament/Anker Generic PLA @base.json" + "name": "Generic PLA @Anker base", + "sub_path": "filament/Generic PLA @Anker base.json" }, { - "name": "Anker Generic PLA Silk @base", - "sub_path": "filament/Anker Generic PLA Silk @base.json" + "name": "Generic PLA Silk @Anker base", + "sub_path": "filament/Generic PLA Silk @Anker base.json" }, { - "name": "Anker Generic PLA+ @base", - "sub_path": "filament/Anker Generic PLA+ @base.json" + "name": "Generic PLA+ @Anker base", + "sub_path": "filament/Generic PLA+ @Anker base.json" }, { - "name": "Anker Generic PLA-CF @base", - "sub_path": "filament/Anker Generic PLA-CF @base.json" + "name": "Generic PLA-CF @Anker base", + "sub_path": "filament/Generic PLA-CF @Anker base.json" }, { - "name": "Anker Generic PVA @base", - "sub_path": "filament/Anker Generic PVA @base.json" + "name": "Generic PVA @Anker base", + "sub_path": "filament/Generic PVA @Anker base.json" }, { - "name": "Anker Generic TPU @base", - "sub_path": "filament/Anker Generic TPU @base.json" + "name": "Generic TPU @Anker base", + "sub_path": "filament/Generic TPU @Anker base.json" }, { - "name": "Anker Generic ABS", - "sub_path": "filament/Anker Generic ABS.json" + "name": "Generic ABS @Anker", + "sub_path": "filament/Generic ABS @Anker.json" }, { - "name": "Anker Generic ABS 0.2 nozzle", - "sub_path": "filament/Anker Generic ABS 0.2 nozzle.json" + "name": "Generic ABS @Anker 0.2 nozzle", + "sub_path": "filament/Generic ABS @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic ABS 0.25 nozzle", - "sub_path": "filament/Anker Generic ABS 0.25 nozzle.json" + "name": "Generic ABS @Anker 0.25 nozzle", + "sub_path": "filament/Generic ABS @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic ASA", - "sub_path": "filament/Anker Generic ASA.json" + "name": "Generic ASA @Anker", + "sub_path": "filament/Generic ASA @Anker.json" }, { - "name": "Anker Generic ASA 0.2 nozzle", - "sub_path": "filament/Anker Generic ASA 0.2 nozzle.json" + "name": "Generic ASA @Anker 0.2 nozzle", + "sub_path": "filament/Generic ASA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic ASA 0.25 nozzle", - "sub_path": "filament/Anker Generic ASA 0.25 nozzle.json" + "name": "Generic ASA @Anker 0.25 nozzle", + "sub_path": "filament/Generic ASA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PA", - "sub_path": "filament/Anker Generic PA.json" + "name": "Generic PA @Anker", + "sub_path": "filament/Generic PA @Anker.json" }, { - "name": "Anker Generic PA 0.2 nozzle", - "sub_path": "filament/Anker Generic PA 0.2 nozzle.json" + "name": "Generic PA @Anker 0.2 nozzle", + "sub_path": "filament/Generic PA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PA 0.25 nozzle", - "sub_path": "filament/Anker Generic PA 0.25 nozzle.json" + "name": "Generic PA @Anker 0.25 nozzle", + "sub_path": "filament/Generic PA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PA-CF", - "sub_path": "filament/Anker Generic PA-CF.json" + "name": "Generic PA-CF @Anker", + "sub_path": "filament/Generic PA-CF @Anker.json" }, { - "name": "Anker Generic PC", - "sub_path": "filament/Anker Generic PC.json" + "name": "Generic PC @Anker", + "sub_path": "filament/Generic PC @Anker.json" }, { - "name": "Anker Generic PC 0.2 nozzle", - "sub_path": "filament/Anker Generic PC 0.2 nozzle.json" + "name": "Generic PC @Anker 0.2 nozzle", + "sub_path": "filament/Generic PC @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PC 0.25 nozzle", - "sub_path": "filament/Anker Generic PC 0.25 nozzle.json" + "name": "Generic PC @Anker 0.25 nozzle", + "sub_path": "filament/Generic PC @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PETG", - "sub_path": "filament/Anker Generic PETG.json" + "name": "Generic PETG @Anker", + "sub_path": "filament/Generic PETG @Anker.json" }, { - "name": "Anker Generic PETG 0.2 nozzle", - "sub_path": "filament/Anker Generic PETG 0.2 nozzle.json" + "name": "Generic PETG @Anker 0.2 nozzle", + "sub_path": "filament/Generic PETG @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PETG 0.25 nozzle", - "sub_path": "filament/Anker Generic PETG 0.25 nozzle.json" + "name": "Generic PETG @Anker 0.25 nozzle", + "sub_path": "filament/Generic PETG @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PETG-CF", - "sub_path": "filament/Anker Generic PETG-CF.json" + "name": "Generic PETG-CF @Anker", + "sub_path": "filament/Generic PETG-CF @Anker.json" }, { - "name": "Anker Generic PLA", - "sub_path": "filament/Anker Generic PLA.json" + "name": "Generic PLA @Anker", + "sub_path": "filament/Generic PLA @Anker.json" }, { - "name": "Anker Generic PLA 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA 0.2 nozzle.json" + "name": "Generic PLA @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA 0.25 nozzle.json" + "name": "Generic PLA @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA Silk", - "sub_path": "filament/Anker Generic PLA Silk.json" + "name": "Generic PLA Silk @Anker", + "sub_path": "filament/Generic PLA Silk @Anker.json" }, { - "name": "Anker Generic PLA Silk 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA Silk 0.2 nozzle.json" + "name": "Generic PLA Silk @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA Silk @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA Silk 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA Silk 0.25 nozzle.json" + "name": "Generic PLA Silk @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA Silk @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA+", - "sub_path": "filament/Anker Generic PLA+.json" + "name": "Generic PLA+ @Anker", + "sub_path": "filament/Generic PLA+ @Anker.json" }, { - "name": "Anker Generic PLA+ 0.2 nozzle", - "sub_path": "filament/Anker Generic PLA+ 0.2 nozzle.json" + "name": "Generic PLA+ @Anker 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Anker 0.2 nozzle.json" }, { - "name": "Anker Generic PLA+ 0.25 nozzle", - "sub_path": "filament/Anker Generic PLA+ 0.25 nozzle.json" + "name": "Generic PLA+ @Anker 0.25 nozzle", + "sub_path": "filament/Generic PLA+ @Anker 0.25 nozzle.json" }, { - "name": "Anker Generic PLA-CF", - "sub_path": "filament/Anker Generic PLA-CF.json" + "name": "Generic PLA-CF @Anker", + "sub_path": "filament/Generic PLA-CF @Anker.json" }, { - "name": "Anker Generic PVA", - "sub_path": "filament/Anker Generic PVA.json" + "name": "Generic PVA @Anker", + "sub_path": "filament/Generic PVA @Anker.json" }, { - "name": "Anker Generic TPU", - "sub_path": "filament/Anker Generic TPU.json" + "name": "Generic TPU @Anker", + "sub_path": "filament/Generic TPU @Anker.json" } ], "machine_list": [ diff --git a/resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json deleted file mode 100644 index aaa175bacd..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ABS 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ABS 0.2 nozzle", - "inherits": "Anker Generic ABS @base", - "from": "system", - "setting_id": "BD5ODYVM90Ig44C5", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json deleted file mode 100644 index 76c10b1018..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ABS 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ABS 0.25 nozzle", - "inherits": "Anker Generic ABS @base", - "from": "system", - "setting_id": "WS5wXckNuiQqSVwO", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ABS @base.json b/resources/profiles/Anker/filament/Anker Generic ABS @base.json deleted file mode 100644 index 1f6ad45f63..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ABS @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ABS @base", - "inherits": "fdm_filament_abs", - "from": "system", - "filament_id": "GFB99", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic ABS.json b/resources/profiles/Anker/filament/Anker Generic ABS.json deleted file mode 100644 index 5588d39ff3..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ABS.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ABS", - "inherits": "Anker Generic ABS @base", - "from": "system", - "setting_id": "axEspGzFJnrnidm4", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json deleted file mode 100644 index b13a09de2a..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ASA 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ASA 0.2 nozzle", - "inherits": "Anker Generic ASA @base", - "from": "system", - "setting_id": "G7pzEyyhPFDnae3R", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json deleted file mode 100644 index fad3cb2a20..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ASA 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ASA 0.25 nozzle", - "inherits": "Anker Generic ASA @base", - "from": "system", - "setting_id": "ErUUDTQ7h1wNHAKT", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic ASA @base.json b/resources/profiles/Anker/filament/Anker Generic ASA @base.json deleted file mode 100644 index fb0ef78ee7..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ASA @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ASA @base", - "inherits": "fdm_filament_asa", - "from": "system", - "filament_id": "GFB98", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic ASA.json b/resources/profiles/Anker/filament/Anker Generic ASA.json deleted file mode 100644 index 66041c0463..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic ASA.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic ASA", - "inherits": "Anker Generic ASA @base", - "from": "system", - "setting_id": "QiFoBW5WuDUJGmFZ", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json deleted file mode 100644 index 3e7a0b85d1..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA 0.2 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA 0.2 nozzle", - "inherits": "Anker Generic PA @base", - "from": "system", - "setting_id": "NZB26MSD9WbOeY2S", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json deleted file mode 100644 index 8c0233d67e..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA 0.25 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA 0.25 nozzle", - "inherits": "Anker Generic PA @base", - "from": "system", - "setting_id": "Wj7oXTGUxo8lie1B", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA @base.json b/resources/profiles/Anker/filament/Anker Generic PA @base.json deleted file mode 100644 index 9215733825..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA @base", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN99", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json deleted file mode 100644 index 7f23645d43..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA-CF @base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA-CF @base", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN98", - "instantiation": "false", - "filament_type": [ - "PA-CF" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_cost": [ - "55" - ], - "filament_max_volumetric_speed": [ - "6" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA-CF.json b/resources/profiles/Anker/filament/Anker Generic PA-CF.json deleted file mode 100644 index b821bede88..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA-CF.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA-CF", - "inherits": "Anker Generic PA-CF @base", - "from": "system", - "setting_id": "qdsEps11ugFHJkn7", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PA.json b/resources/profiles/Anker/filament/Anker Generic PA.json deleted file mode 100644 index 43f3724ea9..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PA.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PA", - "inherits": "Anker Generic PA @base", - "from": "system", - "setting_id": "QbIiX554Yee6vb32", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json deleted file mode 100644 index 87f09622b9..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PC 0.2 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PC 0.2 nozzle", - "inherits": "Anker Generic PC @base", - "from": "system", - "setting_id": "GhIOAidtgDkzh9Aj", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json deleted file mode 100644 index 38794a6a44..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PC 0.25 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PC 0.25 nozzle", - "inherits": "Anker Generic PC @base", - "from": "system", - "setting_id": "TQm9EPdenyGJMvgP", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PC @base.json b/resources/profiles/Anker/filament/Anker Generic PC @base.json deleted file mode 100644 index 1947ecdd35..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PC @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PC @base", - "inherits": "fdm_filament_pc", - "from": "system", - "filament_id": "GFC99", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PC.json b/resources/profiles/Anker/filament/Anker Generic PC.json deleted file mode 100644 index 3be5d34b71..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PC.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PC", - "inherits": "Anker Generic PC @base", - "from": "system", - "setting_id": "xY25QcIsR9pWai3n", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json deleted file mode 100644 index 18686402e1..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG 0.2 nozzle", - "inherits": "Anker Generic PETG @base", - "from": "system", - "setting_id": "VItvDP6zmenWXwPO", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json deleted file mode 100644 index 689836eae3..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG 0.25 nozzle", - "inherits": "Anker Generic PETG @base", - "from": "system", - "setting_id": "UgKfPuleh1xnoJLT", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG @base.json b/resources/profiles/Anker/filament/Anker Generic PETG @base.json deleted file mode 100644 index c7b85e701a..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG @base.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG @base", - "inherits": "fdm_filament_pet", - "from": "system", - "filament_id": "GFG99", - "instantiation": "false", - "filament_type": [ - "PETG" - ], - "filament_retraction_speed": "20", - "filament_deretraction_speed": "60", - "filament_retract_when_changing_layer": "1", - "filament_wipe": "1", - "filament_retract_before_wipe": "100" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json deleted file mode 100644 index 4a36c58a86..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG-CF @base.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG-CF @base", - "inherits": "fdm_filament_pet", - "from": "system", - "filament_id": "GFG98", - "instantiation": "false", - "filament_type": [ - "PETG-CF" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_cost": [ - "35" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retraction_speed": "20", - "filament_deretraction_speed": "60", - "filament_retract_when_changing_layer": "1", - "filament_wipe": "1", - "filament_retract_before_wipe": "100" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG-CF.json b/resources/profiles/Anker/filament/Anker Generic PETG-CF.json deleted file mode 100644 index 3f0dd59e94..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG-CF.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG-CF", - "inherits": "Anker Generic PETG-CF @base", - "from": "system", - "setting_id": "j8PLF6AZD0R0oVs8", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PETG.json b/resources/profiles/Anker/filament/Anker Generic PETG.json deleted file mode 100644 index ed70b54983..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PETG.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PETG", - "inherits": "Anker Generic PETG @base", - "from": "system", - "setting_id": "FMnK9qOMiqDcGqhd", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json deleted file mode 100644 index 6c31b3949c..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA 0.2 nozzle", - "inherits": "Anker Generic PLA @base", - "from": "system", - "setting_id": "j6QmCITPJoP7bWHq", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json deleted file mode 100644 index d3775b07e2..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA 0.25 nozzle", - "inherits": "Anker Generic PLA @base", - "from": "system", - "setting_id": "uKfcnPWdXxAGB5Ls", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA @base.json b/resources/profiles/Anker/filament/Anker Generic PLA @base.json deleted file mode 100644 index 4dbfca4e28..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL99", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json deleted file mode 100644 index 90c78475bd..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk 0.2 nozzle", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "A1l6NiwRrasdV556", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json deleted file mode 100644 index 45032d46c3..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk 0.25 nozzle", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "yzHmKTOtA9JamlNf", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json deleted file mode 100644 index aac1e8e86b..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk @base.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL96", - "instantiation": "false", - "filament_cost": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature": [ - "225" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA Silk.json b/resources/profiles/Anker/filament/Anker Generic PLA Silk.json deleted file mode 100644 index df8b1d7cdb..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA Silk.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA Silk", - "inherits": "Anker Generic PLA Silk @base", - "from": "system", - "setting_id": "BGttYO9m2rGcnrEG", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json deleted file mode 100644 index 9923efcd6f..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.2 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+ 0.2 nozzle", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "6IcMSjyxt0szdUuY", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Anker M5 0.2 nozzle", - "Anker M5 All-Metal 0.2 nozzle", - "Anker M5C 0.2 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json b/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json deleted file mode 100644 index 809b57ef69..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ 0.25 nozzle.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+ 0.25 nozzle", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "a2Rf07ZUhpTPONN1", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "compatible_printers": [ - "Anker M5 0.25 nozzle", - "Anker M5 All-Metal 0.25 nozzle", - "Anker M5C 0.25 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json b/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json deleted file mode 100644 index 39b4ecdfee..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+ @base.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+ @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL95", - "instantiation": "false", - "filament_cost": [ - "25" - ], - "temperature_vitrification": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "filament_max_volumetric_speed": [ - "16" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA+.json b/resources/profiles/Anker/filament/Anker Generic PLA+.json deleted file mode 100644 index 4c4ded7c11..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA+.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA+", - "inherits": "Anker Generic PLA+ @base", - "from": "system", - "setting_id": "0yQN44WNvLVjQu2b", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json b/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json deleted file mode 100644 index d8eb0f56d9..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA-CF @base.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA-CF @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL98", - "instantiation": "false", - "filament_type": [ - "PLA-CF" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_cost": [ - "25" - ], - "temperature_vitrification": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature": [ - "220" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "hot_plate_temp": [ - "65" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA-CF.json b/resources/profiles/Anker/filament/Anker Generic PLA-CF.json deleted file mode 100644 index 7a2d6d5e97..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA-CF.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA-CF", - "inherits": "Anker Generic PLA-CF @base", - "from": "system", - "setting_id": "diNUVM7UcHLnOr9J", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PLA.json b/resources/profiles/Anker/filament/Anker Generic PLA.json deleted file mode 100644 index 1c4b7bc5fb..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PLA.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PLA", - "inherits": "Anker Generic PLA @base", - "from": "system", - "setting_id": "qfKC91VAAFZSExhm", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic PVA @base.json b/resources/profiles/Anker/filament/Anker Generic PVA @base.json deleted file mode 100644 index 5c7775c2d2..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PVA @base.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PVA @base", - "inherits": "fdm_filament_pva", - "from": "system", - "filament_id": "GFS99", - "instantiation": "false" -} diff --git a/resources/profiles/Anker/filament/Anker Generic PVA.json b/resources/profiles/Anker/filament/Anker Generic PVA.json deleted file mode 100644 index 97039a12d6..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic PVA.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic PVA", - "inherits": "Anker Generic PVA @base", - "from": "system", - "setting_id": "GRtdOKUkQfZ5eDH4", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Anker Generic TPU @base.json b/resources/profiles/Anker/filament/Anker Generic TPU @base.json deleted file mode 100644 index 3ca7c49029..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic TPU @base.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic TPU @base", - "inherits": "fdm_filament_tpu", - "from": "system", - "filament_id": "GFU99", - "instantiation": "false", - "filament_retraction_speed": "90", - "filament_deretraction_speed": "50", - "filament_retract_when_changing_layer": "1", - "filament_wipe": "1", - "filament_retract_before_wipe": "70" -} diff --git a/resources/profiles/Anker/filament/Anker Generic TPU.json b/resources/profiles/Anker/filament/Anker Generic TPU.json deleted file mode 100644 index fb99d95f0d..0000000000 --- a/resources/profiles/Anker/filament/Anker Generic TPU.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Anker Generic TPU", - "inherits": "Anker Generic TPU @base", - "from": "system", - "setting_id": "YyTaPGGiEyAzmh9A", - "instantiation": "true", - "compatible_printers": [ - "Anker M5 0.4 nozzle", - "Anker M5 0.6 nozzle", - "Anker M5 All-Metal 0.4 nozzle", - "Anker M5 All-Metal 0.6 nozzle", - "Anker M5C 0.4 nozzle", - "Anker M5C 0.6 nozzle" - ] -} diff --git a/resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..c3e47c80a3 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ABS @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ABS @Anker 0.2 nozzle", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS 0.2 nozzle", + "from": "system", + "setting_id": "iOCt7x95XbWYMe5q", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..64fd62eb64 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ABS @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ABS @Anker 0.25 nozzle", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS 0.25 nozzle", + "from": "system", + "setting_id": "7Q2pr70SpSjK7v7Y", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ABS @Anker base.json b/resources/profiles/Anker/filament/Generic ABS @Anker base.json new file mode 100644 index 0000000000..fe24d081e4 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ABS @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic ABS @Anker base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "OFY9muEs", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic ABS @Anker.json b/resources/profiles/Anker/filament/Generic ABS @Anker.json new file mode 100644 index 0000000000..978bc00e31 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ABS @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ABS @Anker", + "inherits": "Generic ABS @Anker base", + "renamed_from": "Anker Generic ABS", + "from": "system", + "setting_id": "x3IBYtgKBx6Mszzk", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..1a40e93730 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ASA @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ASA @Anker 0.2 nozzle", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA 0.2 nozzle", + "from": "system", + "setting_id": "lTR8QLbuttyVs5UW", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..0b85eef27c --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ASA @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ASA @Anker 0.25 nozzle", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA 0.25 nozzle", + "from": "system", + "setting_id": "FU4BiMydEyo7zxq5", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic ASA @Anker base.json b/resources/profiles/Anker/filament/Generic ASA @Anker base.json new file mode 100644 index 0000000000..f2349d13ab --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ASA @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic ASA @Anker base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "OFLPAxz3", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic ASA @Anker.json b/resources/profiles/Anker/filament/Generic ASA @Anker.json new file mode 100644 index 0000000000..53b84223df --- /dev/null +++ b/resources/profiles/Anker/filament/Generic ASA @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic ASA @Anker", + "inherits": "Generic ASA @Anker base", + "renamed_from": "Anker Generic ASA", + "from": "system", + "setting_id": "aDADuxiEKt2dVKOJ", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..6460721e2f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA @Anker 0.2 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PA @Anker 0.2 nozzle", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA 0.2 nozzle", + "from": "system", + "setting_id": "tYAT7xnNFD6gY84A", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..ee2514e92c --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA @Anker 0.25 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PA @Anker 0.25 nozzle", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA 0.25 nozzle", + "from": "system", + "setting_id": "Zlv65wLA94PbevRG", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA @Anker base.json b/resources/profiles/Anker/filament/Generic PA @Anker base.json new file mode 100644 index 0000000000..b4a45b1e66 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PA @Anker base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OFg8ndtj", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic PA @Anker.json b/resources/profiles/Anker/filament/Generic PA @Anker.json new file mode 100644 index 0000000000..e9acc2d7f6 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA @Anker.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PA @Anker", + "inherits": "Generic PA @Anker base", + "renamed_from": "Anker Generic PA", + "from": "system", + "setting_id": "sLWVtBxpAC53eUwo", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA-CF @Anker base.json b/resources/profiles/Anker/filament/Generic PA-CF @Anker base.json new file mode 100644 index 0000000000..fc0740ee53 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA-CF @Anker base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Anker base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OFQLcbps", + "instantiation": "false", + "filament_type": [ + "PA-CF" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_cost": [ + "55" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PA-CF @Anker.json b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json new file mode 100644 index 0000000000..6c3b2d1860 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PA-CF @Anker.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Anker", + "inherits": "Generic PA-CF @Anker base", + "renamed_from": "Anker Generic PA-CF", + "from": "system", + "setting_id": "K4LcpR0zBp5klSpb", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..0126f9f893 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PC @Anker 0.2 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PC @Anker 0.2 nozzle", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC 0.2 nozzle", + "from": "system", + "setting_id": "2sSOgctcnVh9bGbQ", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..50aca840aa --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PC @Anker 0.25 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PC @Anker 0.25 nozzle", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC 0.25 nozzle", + "from": "system", + "setting_id": "h7IRuq5uekjNw4vg", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PC @Anker base.json b/resources/profiles/Anker/filament/Generic PC @Anker base.json new file mode 100644 index 0000000000..90ded72d2f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PC @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PC @Anker base", + "inherits": "fdm_filament_pc", + "from": "system", + "filament_id": "OFLakOUI", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic PC @Anker.json b/resources/profiles/Anker/filament/Generic PC @Anker.json new file mode 100644 index 0000000000..5433518c5a --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PC @Anker.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PC @Anker", + "inherits": "Generic PC @Anker base", + "renamed_from": "Anker Generic PC", + "from": "system", + "setting_id": "ffufXVvW95sunH1B", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..2ff7eca4d1 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG @Anker 0.2 nozzle", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG 0.2 nozzle", + "from": "system", + "setting_id": "67ZHuiXPyCP6Tdtr", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..9f9ae2da35 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG @Anker 0.25 nozzle", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG 0.25 nozzle", + "from": "system", + "setting_id": "aLuRALDt0Otbd2So", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PETG @Anker base.json b/resources/profiles/Anker/filament/Generic PETG @Anker base.json new file mode 100644 index 0000000000..9a0ccc2fe4 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG @Anker base.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PETG @Anker base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFYPdQJh", + "instantiation": "false", + "filament_type": [ + "PETG" + ], + "filament_retraction_speed": "20", + "filament_deretraction_speed": "60", + "filament_retract_when_changing_layer": "1", + "filament_wipe": "1", + "filament_retract_before_wipe": "100" +} diff --git a/resources/profiles/Anker/filament/Generic PETG @Anker.json b/resources/profiles/Anker/filament/Generic PETG @Anker.json new file mode 100644 index 0000000000..cdb08f8671 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG @Anker", + "inherits": "Generic PETG @Anker base", + "renamed_from": "Anker Generic PETG", + "from": "system", + "setting_id": "hvV0rmnzRHJk9sMz", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json b/resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json new file mode 100644 index 0000000000..3c0f59949a --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG-CF @Anker base.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Anker base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFoYSJKi", + "instantiation": "false", + "filament_type": [ + "PETG-CF" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_cost": [ + "35" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retraction_speed": "20", + "filament_deretraction_speed": "60", + "filament_retract_when_changing_layer": "1", + "filament_wipe": "1", + "filament_retract_before_wipe": "100" +} diff --git a/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json b/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json new file mode 100644 index 0000000000..e5a265c40f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PETG-CF @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Anker", + "inherits": "Generic PETG-CF @Anker base", + "renamed_from": "Anker Generic PETG-CF", + "from": "system", + "setting_id": "vCAuQeQLoXUk28ph", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..e8ffdb8c57 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA @Anker 0.2 nozzle", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA 0.2 nozzle", + "from": "system", + "setting_id": "rCvmCzPgi4KA6nmI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..5e4e3e0f0b --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA @Anker 0.25 nozzle", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA 0.25 nozzle", + "from": "system", + "setting_id": "C0hNEbEueKrcYojS", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA @Anker base.json b/resources/profiles/Anker/filament/Generic PLA @Anker base.json new file mode 100644 index 0000000000..d9cc2b2641 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PLA @Anker base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFDSrzZ8", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic PLA @Anker.json b/resources/profiles/Anker/filament/Generic PLA @Anker.json new file mode 100644 index 0000000000..5049571bcb --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA @Anker", + "inherits": "Generic PLA @Anker base", + "renamed_from": "Anker Generic PLA", + "from": "system", + "setting_id": "GfVhcxRmt6mHSemI", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..e28ab1c79a --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker 0.2 nozzle", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk 0.2 nozzle", + "from": "system", + "setting_id": "NWGiPWYmLVktDMJt", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..2699cb1aea --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker 0.25 nozzle", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk 0.25 nozzle", + "from": "system", + "setting_id": "4thKBCnYgDtnAtF5", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json new file mode 100644 index 0000000000..2db35d21c1 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFesA6rF", + "instantiation": "false", + "filament_cost": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature": [ + "225" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json b/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json new file mode 100644 index 0000000000..9629ba4f0b --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA Silk @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Anker", + "inherits": "Generic PLA Silk @Anker base", + "renamed_from": "Anker Generic PLA Silk", + "from": "system", + "setting_id": "URRIeNXIiIPjxbKL", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json new file mode 100644 index 0000000000..f32fb75a92 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.2 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker 0.2 nozzle", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+ 0.2 nozzle", + "from": "system", + "setting_id": "5m3xLxdReqLlE2Jp", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Anker M5 0.2 nozzle", + "Anker M5 All-Metal 0.2 nozzle", + "Anker M5C 0.2 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json new file mode 100644 index 0000000000..291773e546 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker 0.25 nozzle", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+ 0.25 nozzle", + "from": "system", + "setting_id": "wwkWVDsg6SoeCS0F", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3" + ], + "compatible_printers": [ + "Anker M5 0.25 nozzle", + "Anker M5 All-Metal 0.25 nozzle", + "Anker M5C 0.25 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker base.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker base.json new file mode 100644 index 0000000000..0ec8e81392 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker base.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFEWYR89", + "instantiation": "false", + "filament_cost": [ + "25" + ], + "temperature_vitrification": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA+ @Anker.json b/resources/profiles/Anker/filament/Generic PLA+ @Anker.json new file mode 100644 index 0000000000..1381c839da --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA+ @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Anker", + "inherits": "Generic PLA+ @Anker base", + "renamed_from": "Anker Generic PLA+", + "from": "system", + "setting_id": "MDb4CH02FxbgPNjS", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json b/resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json new file mode 100644 index 0000000000..d1faf47a16 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA-CF @Anker base.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Anker base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFWbdGsC", + "instantiation": "false", + "filament_type": [ + "PLA-CF" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_cost": [ + "25" + ], + "temperature_vitrification": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature": [ + "220" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json new file mode 100644 index 0000000000..7be034702f --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PLA-CF @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Anker", + "inherits": "Generic PLA-CF @Anker base", + "renamed_from": "Anker Generic PLA-CF", + "from": "system", + "setting_id": "5AdjHUxRi8LCU4E9", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic PVA @Anker base.json b/resources/profiles/Anker/filament/Generic PVA @Anker base.json new file mode 100644 index 0000000000..d52cd9b729 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PVA @Anker base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PVA @Anker base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "OFDvXujf", + "instantiation": "false" +} diff --git a/resources/profiles/Anker/filament/Generic PVA @Anker.json b/resources/profiles/Anker/filament/Generic PVA @Anker.json new file mode 100644 index 0000000000..35a7dd456a --- /dev/null +++ b/resources/profiles/Anker/filament/Generic PVA @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PVA @Anker", + "inherits": "Generic PVA @Anker base", + "renamed_from": "Anker Generic PVA", + "from": "system", + "setting_id": "HXERDaP3AgzWtmiu", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/filament/Generic TPU @Anker base.json b/resources/profiles/Anker/filament/Generic TPU @Anker base.json new file mode 100644 index 0000000000..233d7c8bc6 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic TPU @Anker base.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic TPU @Anker base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFgbpcy9", + "instantiation": "false", + "filament_retraction_speed": "90", + "filament_deretraction_speed": "50", + "filament_retract_when_changing_layer": "1", + "filament_wipe": "1", + "filament_retract_before_wipe": "70" +} diff --git a/resources/profiles/Anker/filament/Generic TPU @Anker.json b/resources/profiles/Anker/filament/Generic TPU @Anker.json new file mode 100644 index 0000000000..44204f1113 --- /dev/null +++ b/resources/profiles/Anker/filament/Generic TPU @Anker.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Anker", + "inherits": "Generic TPU @Anker base", + "renamed_from": "Anker Generic TPU", + "from": "system", + "setting_id": "5YigkBBSP2RM1MbK", + "instantiation": "true", + "compatible_printers": [ + "Anker M5 0.4 nozzle", + "Anker M5 0.6 nozzle", + "Anker M5 All-Metal 0.4 nozzle", + "Anker M5 All-Metal 0.6 nozzle", + "Anker M5C 0.4 nozzle", + "Anker M5C 0.6 nozzle" + ] +} diff --git a/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json index e4543fa084..6389fba7bc 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json index 88662e7bab..3feda012a3 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json index 42810014ea..593cc53888 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json index 11d8b3cf62..3e3dc25c62 100644 --- a/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json index 0240748426..ba4083b2be 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json index 8a5600df05..21201c4147 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json index 6434e3c76b..948cc7a3b8 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json index 4c5c7a82ef..2dcb107d93 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json b/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json index e6944177ad..d88abdbda4 100644 --- a/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json +++ b/resources/profiles/Anker/machine/Anker M5 All-Metal Hot End.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V8111v2", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker;Generic PLA @Anker 0.2 nozzle;Generic PLA @Anker 0.25 nozzle" } diff --git a/resources/profiles/Anker/machine/Anker M5.json b/resources/profiles/Anker/machine/Anker M5.json index 489151a669..6cafaebd42 100644 --- a/resources/profiles/Anker/machine/Anker M5.json +++ b/resources/profiles/Anker/machine/Anker M5.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V8111", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker;Generic PLA @Anker 0.2 nozzle;Generic PLA @Anker 0.25 nozzle" } diff --git a/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json index b88d21dae3..a5db1517a7 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.2 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.2mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json index 7aec134ac4..fd5c40ea05 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.25 nozzle.json @@ -16,7 +16,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.10mm Standard 0.25mm nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json index 573784f2f3..7dd6f8036b 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.4 nozzle.json @@ -13,7 +13,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.20mm Standard @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json b/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json index d6d1212b63..5323967ae2 100644 --- a/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json +++ b/resources/profiles/Anker/machine/Anker M5C 0.6 nozzle.json @@ -19,7 +19,7 @@ "auxiliary_fan": "0", "bed_exclude_area": [], "default_filament_profile": [ - "Anker Generic PLA+" + "Generic PLA+ @Anker" ], "default_print_profile": "0.30mm Standard 0.6 nozzle @Anker", "extruder_clearance_height_to_lid": "250", diff --git a/resources/profiles/Anker/machine/Anker M5C.json b/resources/profiles/Anker/machine/Anker M5C.json index d709bfc4c3..91cd139cd8 100644 --- a/resources/profiles/Anker/machine/Anker M5C.json +++ b/resources/profiles/Anker/machine/Anker M5C.json @@ -7,5 +7,5 @@ "family": "Anker", "machine_tech": "FFF", "model_id": "V81101C3", - "default_materials": "Anker Generic PLA;Anker Generic PLA+;Anker Generic PLA Silk;Anker Generic TPU;Anker Generic PETG" + "default_materials": "Generic PLA @Anker;Generic PLA+ @Anker;Generic PLA Silk @Anker;Generic TPU @Anker;Generic PETG @Anker;Generic PLA @Anker 0.2 nozzle;Generic PLA @Anker 0.25 nozzle" } diff --git a/resources/profiles/Anker/machine/fdm_machine_common.json b/resources/profiles/Anker/machine/fdm_machine_common.json index 76e4568f42..b486b69bc1 100644 --- a/resources/profiles/Anker/machine/fdm_machine_common.json +++ b/resources/profiles/Anker/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "extruder_offset": [ "0x0" ], - "silent_mode": "0", "machine_max_acceleration_e": [ "4000" ], diff --git a/resources/profiles/Anycubic.json b/resources/profiles/Anycubic.json index d0a5ad0852..85dce20a81 100644 --- a/resources/profiles/Anycubic.json +++ b/resources/profiles/Anycubic.json @@ -1,1234 +1,1226 @@ -{ - "name": "Anycubic", - "version": "02.04.00.02", - "force_update": "0", - "description": "Anycubic configurations", - "machine_model_list": [ - { - "name": "Anycubic 4Max Pro", - "sub_path": "machine/Anycubic 4Max Pro.json" - }, - { - "name": "Anycubic 4Max Pro 2", - "sub_path": "machine/Anycubic 4Max Pro 2.json" - }, - { - "name": "Anycubic Chiron", - "sub_path": "machine/Anycubic Chiron.json" - }, - { - "name": "Anycubic Kobra", - "sub_path": "machine/Anycubic Kobra.json" - }, - { - "name": "Anycubic Kobra 2", - "sub_path": "machine/Anycubic Kobra 2.json" - }, - { - "name": "Anycubic Kobra 2 Max", - "sub_path": "machine/Anycubic Kobra 2 Max.json" - }, - { - "name": "Anycubic Kobra 2 Neo", - "sub_path": "machine/Anycubic Kobra 2 Neo.json" - }, - { - "name": "Anycubic Kobra 2 Plus", - "sub_path": "machine/Anycubic Kobra 2 Plus.json" - }, - { - "name": "Anycubic Kobra 2 Pro", - "sub_path": "machine/Anycubic Kobra 2 Pro.json" - }, - { - "name": "Anycubic Kobra 3", - "sub_path": "machine/Anycubic Kobra 3.json" - }, - { - "name": "Anycubic Kobra 3 Max", - "sub_path": "machine/Anycubic Kobra 3 Max.json" - }, - { - "name": "Anycubic Kobra Max", - "sub_path": "machine/Anycubic Kobra Max.json" - }, - { - "name": "Anycubic Kobra Neo", - "sub_path": "machine/Anycubic Kobra Neo.json" - }, - { - "name": "Anycubic Kobra Plus", - "sub_path": "machine/Anycubic Kobra Plus.json" - }, - { - "name": "Anycubic Kobra S1", - "sub_path": "machine/Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Kobra S1 Max", - "sub_path": "machine/Anycubic Kobra S1 Max.json" - }, - { - "name": "Anycubic Kobra X", - "sub_path": "machine/Anycubic Kobra X.json" - }, - { - "name": "Anycubic Predator", - "sub_path": "machine/Anycubic Predator.json" - }, - { - "name": "Anycubic Vyper", - "sub_path": "machine/Anycubic Vyper.json" - }, - { - "name": "Anycubic i3 Mega S", - "sub_path": "machine/Anycubic i3 Mega S.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra X", - "sub_path": "process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.10mm Detail @Anycubic Kobra 3 0.2 nozzle", - "sub_path": "process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.12mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra X", - "sub_path": "process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.15mm Optimal @Anycubic 4MaxPro2", - "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" - }, - { - "name": "0.15mm Optimal @Anycubic Chiron", - "sub_path": "process/0.15mm Optimal @Anycubic Chiron.json" - }, - { - "name": "0.15mm Optimal @Anycubic Kobra", - "sub_path": "process/0.15mm Optimal @Anycubic Kobra.json" - }, - { - "name": "0.15mm Optimal @Anycubic Kobra2", - "sub_path": "process/0.15mm Optimal @Anycubic Kobra2.json" - }, - { - "name": "0.15mm Optimal @Anycubic KobraMax", - "sub_path": "process/0.15mm Optimal @Anycubic KobraMax.json" - }, - { - "name": "0.15mm Optimal @Anycubic KobraPlus", - "sub_path": "process/0.15mm Optimal @Anycubic KobraPlus.json" - }, - { - "name": "0.15mm Optimal @Anycubic Vyper", - "sub_path": "process/0.15mm Optimal @Anycubic Vyper.json" - }, - { - "name": "0.15mm Optimal @Anycubic i3MegaS", - "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.json" - }, - { - "name": "0.16mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra X", - "sub_path": "process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.20mm High Quality @Anycubic Kobra X", - "sub_path": "process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic 4MaxPro", - "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro.json" - }, - { - "name": "0.20mm Standard @Anycubic 4MaxPro2", - "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro2.json" - }, - { - "name": "0.20mm Standard @Anycubic Chiron", - "sub_path": "process/0.20mm Standard @Anycubic Chiron.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra", - "sub_path": "process/0.20mm Standard @Anycubic Kobra.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra X", - "sub_path": "process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra2", - "sub_path": "process/0.20mm Standard @Anycubic Kobra2.json" - }, - { - "name": "0.20mm Standard @Anycubic KobraMax", - "sub_path": "process/0.20mm Standard @Anycubic KobraMax.json" - }, - { - "name": "0.20mm Standard @Anycubic KobraPlus", - "sub_path": "process/0.20mm Standard @Anycubic KobraPlus.json" - }, - { - "name": "0.20mm Standard @Anycubic Predator", - "sub_path": "process/0.20mm Standard @Anycubic Predator.json" - }, - { - "name": "0.20mm Standard @Anycubic Vyper", - "sub_path": "process/0.20mm Standard @Anycubic Vyper.json" - }, - { - "name": "0.20mm Standard @Anycubic i3MegaS", - "sub_path": "process/0.20mm Standard @Anycubic i3MegaS.json" - }, - { - "name": "0.24mm Draft @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra X", - "sub_path": "process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra X", - "sub_path": "process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "0.30mm Draft @Anycubic 4MaxPro2", - "sub_path": "process/0.30mm Draft @Anycubic 4MaxPro2.json" - }, - { - "name": "0.30mm Draft @Anycubic Chiron", - "sub_path": "process/0.30mm Draft @Anycubic Chiron.json" - }, - { - "name": "0.30mm Draft @Anycubic Kobra", - "sub_path": "process/0.30mm Draft @Anycubic Kobra.json" - }, - { - "name": "0.30mm Draft @Anycubic Kobra2", - "sub_path": "process/0.30mm Draft @Anycubic Kobra2.json" - }, - { - "name": "0.30mm Draft @Anycubic KobraMax", - "sub_path": "process/0.30mm Draft @Anycubic KobraMax.json" - }, - { - "name": "0.30mm Draft @Anycubic KobraPlus", - "sub_path": "process/0.30mm Draft @Anycubic KobraPlus.json" - }, - { - "name": "0.30mm Draft @Anycubic Vyper", - "sub_path": "process/0.30mm Draft @Anycubic Vyper.json" - }, - { - "name": "0.30mm Draft @Anycubic i3MegaS", - "sub_path": "process/0.30mm Draft @Anycubic i3MegaS.json" - }, - { - "name": "0.30mm Standard @Anycubic Kobra 3 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Anycubic Kobra 3 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - - { - "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - - { - "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - - { - "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" - } - - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic ABS", - "sub_path": "filament/Anycubic Generic ABS.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic ASA", - "sub_path": "filament/Anycubic Generic ASA.json" - }, - { - "name": "Anycubic Generic PA", - "sub_path": "filament/Anycubic Generic PA.json" - }, - { - "name": "Anycubic Generic PA-CF", - "sub_path": "filament/Anycubic Generic PA-CF.json" - }, - { - "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Generic PC", - "sub_path": "filament/Anycubic Generic PC.json" - }, - { - "name": "Anycubic Generic PETG", - "sub_path": "filament/Anycubic Generic PETG.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic PLA", - "sub_path": "filament/Anycubic Generic PLA.json" - }, - { - "name": "Anycubic Generic PLA-CF", - "sub_path": "filament/Anycubic Generic PLA-CF.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Panchroma PLA @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json" - }, - { - "name": "Polymaker PLA Pro @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json" - }, - { - "name": "Polymaker PLA Pro Metallic @Anycubic Kobra S1", - "sub_path": "filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json" - }, - { - "name": "Anycubic Generic PVA", - "sub_path": "filament/Anycubic Generic PVA.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Generic TPU", - "sub_path": "filament/Anycubic Generic TPU.json" - }, - { - "name": "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", - "sub_path": "filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", - "sub_path": "filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - - { - "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json" - } - - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "Anycubic 4Max Pro 0.4 nozzle", - "sub_path": "machine/Anycubic 4Max Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic 4Max Pro 2 0.4 nozzle", - "sub_path": "machine/Anycubic 4Max Pro 2 0.4 nozzle.json" - }, - { - "name": "Anycubic Chiron 0.4 nozzle", - "sub_path": "machine/Anycubic Chiron 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Neo 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Plus 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 2 Pro 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 2 Pro 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.2 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.2 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra 3 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra 3 Max 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra 3 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra Neo 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Neo 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra Plus 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra Plus 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra S1 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.4 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.25 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.25 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.6 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.6 nozzle.json" - }, - { - "name": "Anycubic Kobra S1 Max 0.8 nozzle", - "sub_path": "machine/Anycubic Kobra S1 Max 0.8 nozzle.json" - }, - { - "name": "Anycubic Kobra X 0.4 nozzle", - "sub_path": "machine/Anycubic Kobra X 0.4 nozzle.json" - }, - { - "name": "Anycubic Predator 0.4 nozzle", - "sub_path": "machine/Anycubic Predator 0.4 nozzle.json" - }, - { - "name": "Anycubic Vyper 0.4 nozzle", - "sub_path": "machine/Anycubic Vyper 0.4 nozzle.json" - }, - { - "name": "Anycubic i3 Mega S 0.4 nozzle", - "sub_path": "machine/Anycubic i3 Mega S 0.4 nozzle.json" - } - ] -} +{ + "name": "Anycubic", + "version": "02.04.00.05", + "force_update": "0", + "description": "Anycubic configurations", + "machine_model_list": [ + { + "name": "Anycubic 4Max Pro", + "sub_path": "machine/Anycubic 4Max Pro.json" + }, + { + "name": "Anycubic 4Max Pro 2", + "sub_path": "machine/Anycubic 4Max Pro 2.json" + }, + { + "name": "Anycubic Chiron", + "sub_path": "machine/Anycubic Chiron.json" + }, + { + "name": "Anycubic Kobra", + "sub_path": "machine/Anycubic Kobra.json" + }, + { + "name": "Anycubic Kobra 2", + "sub_path": "machine/Anycubic Kobra 2.json" + }, + { + "name": "Anycubic Kobra 2 Max", + "sub_path": "machine/Anycubic Kobra 2 Max.json" + }, + { + "name": "Anycubic Kobra 2 Neo", + "sub_path": "machine/Anycubic Kobra 2 Neo.json" + }, + { + "name": "Anycubic Kobra 2 Plus", + "sub_path": "machine/Anycubic Kobra 2 Plus.json" + }, + { + "name": "Anycubic Kobra 2 Pro", + "sub_path": "machine/Anycubic Kobra 2 Pro.json" + }, + { + "name": "Anycubic Kobra 3", + "sub_path": "machine/Anycubic Kobra 3.json" + }, + { + "name": "Anycubic Kobra 3 Max", + "sub_path": "machine/Anycubic Kobra 3 Max.json" + }, + { + "name": "Anycubic Kobra Max", + "sub_path": "machine/Anycubic Kobra Max.json" + }, + { + "name": "Anycubic Kobra Neo", + "sub_path": "machine/Anycubic Kobra Neo.json" + }, + { + "name": "Anycubic Kobra Plus", + "sub_path": "machine/Anycubic Kobra Plus.json" + }, + { + "name": "Anycubic Kobra S1", + "sub_path": "machine/Anycubic Kobra S1.json" + }, + { + "name": "Anycubic Kobra S1 Max", + "sub_path": "machine/Anycubic Kobra S1 Max.json" + }, + { + "name": "Anycubic Kobra X", + "sub_path": "machine/Anycubic Kobra X.json" + }, + { + "name": "Anycubic Predator", + "sub_path": "machine/Anycubic Predator.json" + }, + { + "name": "Anycubic Vyper", + "sub_path": "machine/Anycubic Vyper.json" + }, + { + "name": "Anycubic i3 Mega S", + "sub_path": "machine/Anycubic i3 Mega S.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.08mm Standard @Anycubic Kobra X", + "sub_path": "process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.10mm Detail @Anycubic Kobra 3 0.2 nozzle", + "sub_path": "process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.12mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Standard @Anycubic Kobra X", + "sub_path": "process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "0.15mm Optimal @Anycubic 4MaxPro2", + "sub_path": "process/0.15mm Optimal @Anycubic 4MaxPro2.json" + }, + { + "name": "0.15mm Optimal @Anycubic Chiron", + "sub_path": "process/0.15mm Optimal @Anycubic Chiron.json" + }, + { + "name": "0.15mm Optimal @Anycubic Kobra", + "sub_path": "process/0.15mm Optimal @Anycubic Kobra.json" + }, + { + "name": "0.15mm Optimal @Anycubic Kobra2", + "sub_path": "process/0.15mm Optimal @Anycubic Kobra2.json" + }, + { + "name": "0.15mm Optimal @Anycubic KobraMax", + "sub_path": "process/0.15mm Optimal @Anycubic KobraMax.json" + }, + { + "name": "0.15mm Optimal @Anycubic KobraPlus", + "sub_path": "process/0.15mm Optimal @Anycubic KobraPlus.json" + }, + { + "name": "0.15mm Optimal @Anycubic Vyper", + "sub_path": "process/0.15mm Optimal @Anycubic Vyper.json" + }, + { + "name": "0.15mm Optimal @Anycubic i3MegaS", + "sub_path": "process/0.15mm Optimal @Anycubic i3MegaS.json" + }, + { + "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Standard @Anycubic Kobra X", + "sub_path": "process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm High Quality @Anycubic Kobra X", + "sub_path": "process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic 4MaxPro", + "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro.json" + }, + { + "name": "0.20mm Standard @Anycubic 4MaxPro2", + "sub_path": "process/0.20mm Standard @Anycubic 4MaxPro2.json" + }, + { + "name": "0.20mm Standard @Anycubic Chiron", + "sub_path": "process/0.20mm Standard @Anycubic Chiron.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra", + "sub_path": "process/0.20mm Standard @Anycubic Kobra.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra X", + "sub_path": "process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Anycubic Kobra2", + "sub_path": "process/0.20mm Standard @Anycubic Kobra2.json" + }, + { + "name": "0.20mm Standard @Anycubic KobraMax", + "sub_path": "process/0.20mm Standard @Anycubic KobraMax.json" + }, + { + "name": "0.20mm Standard @Anycubic KobraPlus", + "sub_path": "process/0.20mm Standard @Anycubic KobraPlus.json" + }, + { + "name": "0.20mm Standard @Anycubic Predator", + "sub_path": "process/0.20mm Standard @Anycubic Predator.json" + }, + { + "name": "0.20mm Standard @Anycubic Vyper", + "sub_path": "process/0.20mm Standard @Anycubic Vyper.json" + }, + { + "name": "0.20mm Standard @Anycubic i3MegaS", + "sub_path": "process/0.20mm Standard @Anycubic i3MegaS.json" + }, + { + "name": "0.24mm Draft @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Standard @Anycubic Kobra X", + "sub_path": "process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Standard @Anycubic Kobra X", + "sub_path": "process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "0.30mm Draft @Anycubic 4MaxPro2", + "sub_path": "process/0.30mm Draft @Anycubic 4MaxPro2.json" + }, + { + "name": "0.30mm Draft @Anycubic Chiron", + "sub_path": "process/0.30mm Draft @Anycubic Chiron.json" + }, + { + "name": "0.30mm Draft @Anycubic Kobra", + "sub_path": "process/0.30mm Draft @Anycubic Kobra.json" + }, + { + "name": "0.30mm Draft @Anycubic Kobra2", + "sub_path": "process/0.30mm Draft @Anycubic Kobra2.json" + }, + { + "name": "0.30mm Draft @Anycubic KobraMax", + "sub_path": "process/0.30mm Draft @Anycubic KobraMax.json" + }, + { + "name": "0.30mm Draft @Anycubic KobraPlus", + "sub_path": "process/0.30mm Draft @Anycubic KobraPlus.json" + }, + { + "name": "0.30mm Draft @Anycubic Vyper", + "sub_path": "process/0.30mm Draft @Anycubic Vyper.json" + }, + { + "name": "0.30mm Draft @Anycubic i3MegaS", + "sub_path": "process/0.30mm Draft @Anycubic i3MegaS.json" + }, + { + "name": "0.30mm Standard @Anycubic Kobra 3 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Anycubic Kobra 3 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ABS @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Anycubic", + "sub_path": "filament/Generic ABS @Anycubic.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic ASA @Anycubic", + "sub_path": "filament/Generic ASA @Anycubic.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Fiberon PA6-CF20 @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json" + }, + { + "name": "Generic PA @Anycubic", + "sub_path": "filament/Generic PA @Anycubic.json" + }, + { + "name": "Generic PA-CF @Anycubic", + "sub_path": "filament/Generic PA-CF @Anycubic.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Generic PC @Anycubic", + "sub_path": "filament/Generic PC @Anycubic.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Anycubic", + "sub_path": "filament/Generic PETG @Anycubic.json" + }, + { + "name": "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Anycubic", + "sub_path": "filament/Generic PLA @Anycubic.json" + }, + { + "name": "Generic PLA-CF @Anycubic", + "sub_path": "filament/Generic PLA-CF @Anycubic.json" + }, + { + "name": "Panchroma PLA @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json" + }, + { + "name": "Polymaker PLA Pro @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json" + }, + { + "name": "Polymaker PLA Pro Metallic @Anycubic Kobra S1", + "sub_path": "filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PVA @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic PVA @Anycubic", + "sub_path": "filament/Generic PVA @Anycubic.json" + }, + { + "name": "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle", + "sub_path": "filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", + "sub_path": "filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Generic TPU @Anycubic", + "sub_path": "filament/Generic TPU @Anycubic.json" + }, + { + "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", + "sub_path": "filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "Anycubic 4Max Pro 0.4 nozzle", + "sub_path": "machine/Anycubic 4Max Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic 4Max Pro 2 0.4 nozzle", + "sub_path": "machine/Anycubic 4Max Pro 2 0.4 nozzle.json" + }, + { + "name": "Anycubic Chiron 0.4 nozzle", + "sub_path": "machine/Anycubic Chiron 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Neo 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Plus 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 2 Pro 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 2 Pro 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.2 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.2 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra 3 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra 3 Max 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra 3 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra Neo 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Neo 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra Plus 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra Plus 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra S1 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.25 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.25 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.4 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.6 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.6 nozzle.json" + }, + { + "name": "Anycubic Kobra S1 Max 0.8 nozzle", + "sub_path": "machine/Anycubic Kobra S1 Max 0.8 nozzle.json" + }, + { + "name": "Anycubic Kobra X 0.4 nozzle", + "sub_path": "machine/Anycubic Kobra X 0.4 nozzle.json" + }, + { + "name": "Anycubic Predator 0.4 nozzle", + "sub_path": "machine/Anycubic Predator 0.4 nozzle.json" + }, + { + "name": "Anycubic Vyper 0.4 nozzle", + "sub_path": "machine/Anycubic Vyper 0.4 nozzle.json" + }, + { + "name": "Anycubic i3 Mega S 0.4 nozzle", + "sub_path": "machine/Anycubic i3 Mega S 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json index f560328d28..884c07a791 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "RDI26qeSRSTe0PDg", - "filament_id": "GFB99", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "ABS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json index 4e5b8117bc..1a67149acc 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Moc1cylP6mmSQjlb", - "filament_id": "GFB99", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -204,9 +201,6 @@ "filament_type": [ "ABS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json index 5b5dbd88a8..644fbe9f06 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "2xgfnUKyOUQwYWPa", - "filament_id": "GFB99", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "ABS" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json index 762dee8f05..4aaf07851e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "NOiAgxA0BbvLhR1v", - "filament_id": "GFB99", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.95" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json index a37305a1bd..10b81c21b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "MDWaiSjl89E6Edsn", - "filament_id": "GFABS", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json index 5638f4c226..ea9295b1e5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "wZjVYc7dBDSKRusJ", - "filament_id": "GFABS", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json index 37cd31a19e..db2517faac 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AbB6JtoPRsNgmxyy", - "filament_id": "GFABS", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json index 8a9663981c..841d07300a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "exX565xnrLPkYkvu", - "filament_id": "GFABS", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json index 5443dacb34..c37ebcb971 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ABS @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "KeEk3yQZrKmJY9Q0", - "filament_id": "GFABS", + "filament_id": "OF223rZv", "instantiation": "true", "filament_settings_id": [ "Anycubic ABS @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json index 56f4d8957a..2356b2b46f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic ASA @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic ASA", + "inherits": "Generic ASA @Anycubic", "from": "system", "setting_id": "U66DGcpZeZ24VfPe", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json index af221cecff..6e4a5981cf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "06j8OTuYw3Sh9BxL", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -204,9 +201,6 @@ "filament_type": [ "ASA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json index 0c2d38c349..44aecae10a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "s2XJm0JghCSUDzhh", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "ASA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json index 7395073bce..a86f5cf27f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "rf792xZNR7tRGKNg", - "filament_id": "GFA99", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.98" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json index 59113ee018..fff937f65e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "wqK6AVf1mNkIOmnt", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.25 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_type": [ "ASA" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json index 6ee5e7d750..b682258829 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "aMgpooFosBBvlKKR", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json index 8dc0f96a2c..af3076163a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Isk7NkdH7GxsEZkS", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json index 3ca00083f5..f2c2c816d8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Ew0Lg6u3e5Xj19Bz", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json index cf04fda679..36c2d4a7da 100644 --- a/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic ASA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "PEg6aLXcyUc70p9F", - "filament_id": "GFASA", + "filament_id": "OF0yFLkY", "instantiation": "true", "filament_settings_id": [ "Anycubic ASA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json b/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json deleted file mode 100644 index c2863fd513..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ABS.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "az6wmXeWSCKcUEsK", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle", - "Anycubic Kobra 3 Max 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json b/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json deleted file mode 100644 index 6bddb8f194..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic ASA.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "qKcef8t7nj8nBjPu", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra 3 Max 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json b/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json deleted file mode 100644 index ed1cf5e236..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA-CF.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "j2PXsJyI9YyoE8lc", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PA.json deleted file mode 100644 index 5c93bd4a56..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PA.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "xzI6EgoKa3DFYyoZ", - "filament_id": "GFN99", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json b/resources/profiles/Anycubic/filament/Anycubic Generic PC.json deleted file mode 100644 index 20d83e1d1f..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PC.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "3zgBtEkj1fQpDkxO", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json b/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json deleted file mode 100644 index cfda82354d..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PETG.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "CEd987NP90bPdkW7", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle", - "Anycubic Kobra 3 Max 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json b/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json deleted file mode 100644 index 8246ddafb0..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA-CF.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9gFgyEJelaCIVwAH", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json deleted file mode 100644 index 3fb18f36a3..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PLA.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "2MiX54GMiZjFzwBI", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.2 nozzle", - "Anycubic Kobra 3 0.4 nozzle", - "Anycubic Kobra 3 0.6 nozzle", - "Anycubic Kobra 3 0.8 nozzle", - "Anycubic Kobra 3 Max 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json b/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json deleted file mode 100644 index 5cc9abce40..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic PVA.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "I1GMbOsMYktU7EbM", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json b/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json deleted file mode 100644 index 25d961c5e8..0000000000 --- a/resources/profiles/Anycubic/filament/Anycubic Generic TPU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Anycubic Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "xrbLc7y1AInpumtv", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Anycubic i3 Mega S 0.4 nozzle", - "Anycubic Chiron 0.4 nozzle", - "Anycubic Vyper 0.4 nozzle", - "Anycubic Kobra 0.4 nozzle", - "Anycubic Kobra Max 0.4 nozzle", - "Anycubic Kobra Plus 0.4 nozzle", - "Anycubic 4Max Pro 0.4 nozzle", - "Anycubic 4Max Pro 2 0.4 nozzle", - "Anycubic Kobra 2 0.4 nozzle", - "Anycubic Kobra 3 0.4 nozzle", - "Anycubic Kobra 3 Max 0.4 nozzle" - ] -} diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json index 66428b6c93..ad40090b9e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "hcL5OHthGzApICTk", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json index be313bf621..27b3bba016 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "OJbFCKoG5DtVGT9J", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json index 077e222d49..55756b72f7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "6mMIVw8iheDn1OuV", - "filament_id": "GFPA", + "filament_id": "OFzS7zt4", "instantiation": "true", "filament_settings_id": [ "Anycubic PA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index a67c82ac59..1484c7b6f9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "epl6B2WNjV1dxG5Z", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 6a58147c35..c6a01fd874 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "eMUXd3PFKHl41TIq", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 553f17901d..9fab6c40b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "y9XYrUJrUYKcBhCI", - "filament_id": "GFPA6-CF", + "filament_id": "OFQe7sAx", "instantiation": "true", "filament_settings_id": [ "Anycubic PA6-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index bdc62ab11a..24ac67340d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "nO6m8EaBKREWUi3f", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 04cd241a06..fcc33a27cf 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ebKput7Vyn4IQez1", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 429647426e..a292502096 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "jzrflGdwy9U8kl1c", - "filament_id": "GFPAHT-CF", + "filament_id": "OFaEuvNF", "instantiation": "true", "filament_settings_id": [ "Anycubic PAHT-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json index cfe5743cb9..1fadd8ce20 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "7F0I28djSlDopbIp", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json index c8ed72562f..05523149be 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "wF10XxL2tNXh8C1p", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json index 76e21e1ed2..e1cdbd5d6d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "t3VfcIKMk0ELiPP7", - "filament_id": "GFPC", + "filament_id": "OFZtkHRq", "instantiation": "true", "filament_settings_id": [ "Anycubic PC @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 3321afd452..133f388fa1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "dOOXRvGwMe3NeUj0", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 73378f1ffd..fb7b6e3e98 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "H0IECyfsMaCMdefe", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 11ac6e7bec..96792e69de 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "7nu7lbiAHMeFBIJc", - "filament_id": "GFPC-CF", + "filament_id": "OFeIyhUx", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json index 53e4aba120..9f60de8562 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "puSuSfNyKlYlmLjL", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json index 183655a8a9..9a168b8331 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "1Qdmjm0MNJKU7aCD", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json index 61de49c647..033135697d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "Z0qp7SdwN9luxLFO", - "filament_id": "GFPC-GF", + "filament_id": "OFxJRuVF", "instantiation": "true", "filament_settings_id": [ "Anycubic PC-GF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json index 035648964d..61c9ae06bb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "gmni9H2Du5nxBqQu", - "filament_id": "GFU99", + "filament_id": "OFUaHEO9", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PEBA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json index 93b2dd3423..ae51a2b31f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "zCqTTjac3ydSAw3q", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json index 1abbe033ae..171c1f085c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "1bCJcP2RcDlvIqEo", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json index 5f2fbc693c..65d1e762b4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "5v6coSKjAl220Cnq", - "filament_id": "GFPEBA", + "filament_id": "OFjLAYgO", "instantiation": "true", "filament_settings_id": [ "Anycubic PEBA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 852d9be237..b4ab737c8e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "saRQ24o8KHgc1YnM", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 688d699495..b8bdfac90f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "hYFR2CtiXab9KZUp", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 95fd9fd80e..1f21b4144f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "RCaf3c84JsWkuJzd", - "filament_id": "GFPET-CF", + "filament_id": "OFRhCTUg", "instantiation": "true", "filament_settings_id": [ "Anycubic PET-CF @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index cc24576ed0..271c2cbd31 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PETG @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PETG", + "inherits": "Generic PETG @Anycubic", "from": "system", "setting_id": "qe2wYLf7CEMjmfxj", - "filament_id": "GFG99", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json index bd02903dcc..ae2c4ea617 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uNktFymJ3RbGa7k0", - "filament_id": "GFG99", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json index e7f271b6a4..21a6dab470 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "EaW663aw4torYXG8", - "filament_id": "GFG99", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -204,9 +201,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json index a0e8481d7f..b170d4234f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "lgVEMmBHMen0sWsI", - "filament_id": "GFG99", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json index d513cdd1d4..a1ea9ea067 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uLRMTzyJIara4Hr2", - "filament_id": "GFG99", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json index 9c59bd3643..4852093cda 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "FAyFkKpV5w6G5dU2", - "filament_id": "GFPETG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.25 nozzle" @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index d97f7fc564..16d4b54568 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "duduwoswLHk9I9sY", - "filament_id": "GFPETG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.4 nozzle" @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json index bd1a1768c0..ebc7e8e514 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "b3GU7ytZPEYNNyne", - "filament_id": "GFPETG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.6 nozzle" @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json index d8913fe29e..978c51007e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrHKJh6prBzMz4Se", - "filament_id": "GFPETG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra S1 Max 0.8 nozzle" @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json index a14c08e5c4..e2c6e84c1b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "HyTi93UGno6uAJEO", - "filament_id": "GFPETG", + "filament_id": "OFo6n2pB", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG @Anycubic Kobra X 0.4 nozzle" @@ -309,12 +309,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index 6263a4c033..0774881a2b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ajFzrQq9AvGtZCui", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.4 nozzle" @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index d374e345e0..e3a405e192 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "VOV59iBwqwMtmi48", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.6 nozzle" @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 1e4342272a..e28e2d859e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "L6GIF36jbXf5NVOw", - "filament_id": "GFPETG-CF", + "filament_id": "OF9UJOGF", "instantiation": "true", "filament_settings_id": [ "Anycubic PETG-CF @Anycubic Kobra S1 Max 0.8 nozzle" @@ -324,12 +324,6 @@ "slow_down_min_speed": [ "10" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json index 7e8a8b189b..3d41b19d51 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "XIq1GeZdHqOl9Gtr", - "filament_id": "GFL92", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json index 2e2c0d094a..427d09ec0b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Neo 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "EaVdXQHAyocYUCez", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json index e96d1b0884..fdbd1987cb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "UpC1Qut0kjYRD9po", - "filament_id": "GFL92", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json index c60020dfda..c06ecd26e7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "ELCOJflyY3DfpPAH", - "filament_id": "GFL92", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json index 4e058c6f74..8263451aa2 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.2 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "enkHPcq0yYHsRk7g", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json index 42d757d7e9..36149ebfcb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "qw4uL96miCLTNE7b", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json index f01ded111e..8de722c472 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.6 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "KrlWgkC2kVdSRNUx", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json index 0a12e310b4..35173c7c21 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra 3 0.8 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "gK0NhTnxz1VBNHbu", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json index c94f05a52f..3c612d7aca 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4nCPU0WS74OXowyr", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json index 3fc828b305..2a33fab35f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "0Ae57Dt0KXnpQUJu", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json index 7f862c1b1c..e08e57acf0 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "otxG4N1WrXHUw8Z9", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json index 03627128bc..7c49813853 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "GblA3LvgCL63V7Qx", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json index 717e533526..bb8d9f2424 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zYYM5Fznkiz0UgHN", - "filament_id": "GFL99", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.98" ], @@ -108,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json index 13a4eccfc2..0f53f104b5 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Z0T8Mul8Ta7zqRjS", - "filament_id": "GFPLA", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json index f4a7632c12..cddede3f5a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "61KPHMw1fRcuaGHk", - "filament_id": "GFPLA", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json index 82691cd80f..398befabb4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RQJLrGtzvbP2PksP", - "filament_id": "GFPLA", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json index d00931d974..fd949e041a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "50Ailboxk7bEclVp", - "filament_id": "GFPLA", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json index 795805eb82..f4e9e91f6f 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "1hyHPSJZgUpLcW7u", - "filament_id": "GFPLA", + "filament_id": "OFmjN2bc", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json index 3df60b8a89..ee4ba7f373 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "m7o0ek6sbOavVUpG", - "filament_id": "GFL98", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json index 5bb37daa1f..968eba0ec4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,339 +1,339 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "NVrxrFGYkHRyzrFq", - "filament_id": "GFPLA Glow", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "1" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0,0,0\n0,0,0" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "85" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "30" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "fan_p2_speed_before_x_layers": [ - "50" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode " - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "-1" - ], - "nozzle_temperature": [ - "190" - ], - "nozzle_temperature_BRASS": [ - "220" - ], - "nozzle_temperature_HS": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "NVrxrFGYkHRyzrFq", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "85" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "30" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "fan_p2_speed_before_x_layers": [ + "50" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode " + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "nozzle_temperature": [ + "190" + ], + "nozzle_temperature_BRASS": [ + "220" + ], + "nozzle_temperature_HS": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json index 284a1f93fd..7d8be15657 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "swLSkqq7X3PhbRiQ", - "filament_id": "GFPLA Glow", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "210" - ], - "nozzle_temperature_HS": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "swLSkqq7X3PhbRiQ", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "210" + ], + "nozzle_temperature_HS": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json index 26d53a4f72..26181302ec 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "Anycubic Generic PLA", - "from": "system", - "setting_id": "rsOyKXt6G37Ze51l", - "filament_id": "GFPLA Glow", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "210" - ], - "nozzle_temperature_HS": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "210" - ], - "nozzle_temperature_initial_layer_HS": [ - "210" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "Generic PLA @Anycubic", + "from": "system", + "setting_id": "rsOyKXt6G37Ze51l", + "filament_id": "OF5PtjTp", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA Glow @Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "210" + ], + "nozzle_temperature_HS": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "210" + ], + "nozzle_temperature_initial_layer_HS": [ + "210" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json index 0050079b0d..97c2eff0d6 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "7GISZDRG9YilzBXM", - "filament_id": "GFPLA Glow", + "filament_id": "OF5PtjTp", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json index d36e50bf95..4a8f9c4fff 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "Sio4qE22N2krNjx1", - "filament_id": "GFL96", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json index c5e434f90f..18baed2def 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4FQaTeouNl9pL4Vl", - "filament_id": "GFL99", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json index d996d2d84b..dab5df7d46 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AEKT5WgqOTAVYijs", - "filament_id": "GFL99", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json index ad8be5c9f1..1c5babfe87 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "xTuh6dk8MdeAovdB", - "filament_id": "GFPLA High Speed", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json index 4f2a9b55e4..4db8e137e9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BpBYwZqt4ik1XIFp", - "filament_id": "GFPLA High Speed", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json index 809c243223..0deb583eaa 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "2Rk0UA3rtW53ECqo", - "filament_id": "GFPLA High Speed", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json index 12ba8b6984..75fb882984 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "hQ90rvCLS2rVEPVJ", - "filament_id": "GFPLA High Speed", + "filament_id": "OFjVOWfJ", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json index 18450cf484..50ab8dc649 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wi26Yq5bX8oGt4CA", - "filament_id": "GFL99", + "filament_id": "OFIgbDHq", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json index 88dc0be839..c0b72e9dc8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "kVOaVF3YyfGrXTdW", - "filament_id": "GFL95", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json index 74e41f42aa..ddd4e1d96c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qSpZJ4cRcg3xb2b2", - "filament_id": "GFL99", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json index 64a690ea12..6797adcb5d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "WvmwXnXSDPPtXS8S", - "filament_id": "GFPLA Matte", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json index bf2a4dfa91..9580807a70 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jFKsrMeqeUAcMAyf", - "filament_id": "GFPLA Matte", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json index 6b0be29514..3d87a20b63 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ueznw2fLdjN2EbIC", - "filament_id": "GFPLA Matte", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json index dc79a8b11f..ef72f06ca1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JxYmWTeCtw0VvUcC", - "filament_id": "GFPLA Matte", + "filament_id": "OFIE3vOf", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json index f7a73c748c..655ce81b7c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "1EID0A7FceyLzja5", - "filament_id": "GFL97", + "filament_id": "OFCp3Bgo", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json index 51dbc781fa..48fa611ab1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Fszb00FtQHFOcDmz", - "filament_id": "GFL99", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json index 24db6eab18..89813c64cc 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "wnt68LydXcNxhGhN", - "filament_id": "GFL99", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json index 269f5acf24..2998b7d2eb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AzEerDakdHs9Rj3I", - "filament_id": "GFPLA Silk", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json index aeaed4784e..2b685352b9 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "pUB5V3n7yAbPxFQC", - "filament_id": "GFPLA Silk", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json index 91edc58d3c..a1ec3be6e4 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N96XNT6EoNVVFYz0", - "filament_id": "GFPLA Silk", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json index 426ea3744d..79a96e1143 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Yc1P4D9Z42Abjfut", - "filament_id": "GFPLA Silk", + "filament_id": "OFFwJWea", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json index f29c6e2674..ab7642a285 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "zAUNjIY9cGOO3Np5", - "filament_id": "GFL94", + "filament_id": "OFrGJ4tR", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json index 74b39048ee..ea42c44729 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "DkuffHU9VM48p50f", - "filament_id": "GFPLA Translucent", + "filament_id": "OF7c9fln", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA Translucent @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json index 836edf10c5..9f28aa798a 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic PLA", + "inherits": "Generic PLA @Anycubic", "from": "system", "setting_id": "1va1bLu3J0b5GQt3", - "filament_id": "GFL93", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_vendor": [ "Anycubic" @@ -111,9 +111,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -183,9 +180,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json index 625e0ddad2..fd51691282 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XN8zwImhwbZCkl6m", - "filament_id": "GFL99", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json index a7b7d4f595..a44bbfac9d 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Vs1ZyZJWHFue8Vc8", - "filament_id": "GFL99", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "0.96" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json index e437edc973..ad437f2cab 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CjXfeHJpdOaSEzN0", - "filament_id": "GFPLA+", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json index 7bd1cded91..7b8dd55359 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "ol5UhwlAQy7yrXYU", - "filament_id": "GFPLA+", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json index 087e7e479c..3256b90dd3 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "u9nOmt30hBeZoN2w", - "filament_id": "GFPLA+", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json index 9bddef96ad..e5db637d98 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lehlBFE2WVyi24s0", - "filament_id": "GFPLA+", + "filament_id": "OFnmp6rt", "instantiation": "true", "filament_settings_id": [ "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json index ee6ea50ef1..bbee6ae226 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,336 +1,336 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "Y9mFng36B2vAnP19", - "filament_id": "GFPLA-CF", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0,0,0\n0,0,0" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "85" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "0%" - ], - "filament_retract_lift_above": [ - "0" - ], - "filament_retract_lift_below": [ - "349" - ], - "filament_retract_lift_enforce": [ - "All Surfaces" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Auto Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "-1" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_BRASS": [ - "230" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "240" - ], - "nozzle_temperature_initial_layer_HS": [ - "240" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "45" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "Y9mFng36B2vAnP19", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "85" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retract_lift_above": [ + "0" + ], + "filament_retract_lift_below": [ + "349" + ], + "filament_retract_lift_enforce": [ + "All Surfaces" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Auto Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_BRASS": [ + "230" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "240" + ], + "nozzle_temperature_initial_layer_HS": [ + "240" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json index 91927df4a8..ab96e9fca8 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "9XGVjrGzNa4Br8kB", - "filament_id": "GFPLA-CF", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "100" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "230" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "230" - ], - "nozzle_temperature_initial_layer_HS": [ - "230" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "9XGVjrGzNa4Br8kB", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "100" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "230" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "230" + ], + "nozzle_temperature_initial_layer_HS": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json index 7619db9764..b1db8876da 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,351 +1,351 @@ -{ - "type": "filament", - "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "Anycubic Generic PLA-CF", - "from": "system", - "setting_id": "vPSse40nqlQ0xBnp", - "filament_id": "GFPLA-CF", - "instantiation": "true", - "filament_settings_id": [ - "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_vendor": [ - "Anycubic" - ], - "filament_type": [ - "PLA-CF" - ], - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance": [ - "0" - ], - "adaptive_pressure_advance_bridges": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "adaptive_pressure_advance_overhangs": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "5" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "dont_slow_down_outer_wall": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "5" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_cooling_layer_time_BRASS": [ - "100" - ], - "fan_cooling_layer_time_HS": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_max_speed_BRASS": [ - "100" - ], - "fan_max_speed_HS": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "fan_min_speed_BRASS": [ - "100" - ], - "fan_min_speed_HS": [ - "100" - ], - "filament_adhesiveness_category": [ - "0" - ], - "filament_change_length": [ - "10" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flush_temp": [ - "nil" - ], - "filament_flush_volumetric_speed": [ - "nil" - ], - "filament_is_support": [ - "0" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_prime_volume": [ - "45" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_ramming_volumetric_speed": [ - "-1" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_shrinkage_compensation_z": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_stamping_distance": [ - "0" - ], - "filament_stamping_loading_speed": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "0" - ], - "internal_bridge_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_BRASS": [ - "220" - ], - "nozzle_temperature_HS": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_initial_layer_BRASS": [ - "220" - ], - "nozzle_temperature_initial_layer_HS": [ - "230" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pellet_flow_coefficient": [ - "0.4157" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_layer_time_BRASS": [ - "8" - ], - "slow_down_layer_time_HS": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_cool_plate_temp": [ - "40" - ], - "textured_cool_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} +{ + "type": "filament", + "name": "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "Generic PLA-CF @Anycubic", + "from": "system", + "setting_id": "vPSse40nqlQ0xBnp", + "filament_id": "OFZ0mR5b", + "instantiation": "true", + "filament_settings_id": [ + "Anycubic PLA-CF @Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_vendor": [ + "Anycubic" + ], + "filament_type": [ + "PLA-CF" + ], + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "5" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "5" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_cooling_layer_time_BRASS": [ + "100" + ], + "fan_cooling_layer_time_HS": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_max_speed_BRASS": [ + "100" + ], + "fan_max_speed_HS": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "fan_min_speed_BRASS": [ + "100" + ], + "fan_min_speed_HS": [ + "100" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flush_temp": [ + "nil" + ], + "filament_flush_volumetric_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_prime_volume": [ + "45" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_ramming_volumetric_speed": [ + "-1" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_BRASS": [ + "220" + ], + "nozzle_temperature_HS": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_initial_layer_BRASS": [ + "220" + ], + "nozzle_temperature_initial_layer_HS": [ + "230" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_layer_time_BRASS": [ + "8" + ], + "slow_down_layer_time_HS": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "35" + ], + "supertack_plate_temp_initial_layer": [ + "35" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json index 30c1a36997..52a7741b59 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "RXGVKThses3TsFql", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json index 388a395309..e24dff10cb 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1QcMzxPPVVj8k9Zy", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json index 9ffe3a4047..df978e5c9c 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "70hdDTET074FJB0W", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json index f166aa4a6f..7013b6e7d7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PVA @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "uZIHFQ0GxFemfZUN", - "filament_id": "GFPVA", + "filament_id": "OFTkj6DR", "instantiation": "true", "filament_settings_id": [ "Anycubic PVA @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json index 9579f701eb..d20d995486 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "V130y2Wie3uJtzho", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json index ababa2bbb9..77a2e2fbcc 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "BAYwaV7mcaLAo1uD", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.6 nozzle" @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "PEBA" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json index 70fc1e02d7..26f7745b9e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "FvdMeI7MlR1OEt0y", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json index a7067cc8a7..c20722ad8e 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "9zwUSJcKXHTuDM1i", - "filament_id": "GFTPU 95A", + "filament_id": "OFML2aVd", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json index dbf66104c0..9831c55484 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "CdtZIoH8bvFOFU6l", - "filament_id": "GFU99", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "TPU" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json index 13f0c712e3..d38d83684b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "F3l2tNcFwp9qG7W6", - "filament_id": "GFU99", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -204,9 +201,6 @@ "filament_type": [ "TPU" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json index 4310aba363..5972bc0d37 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "WkMd8rjotz7XNLDM", - "filament_id": "GFU99", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "TPU" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json index 85252f7057..e1649e5b0b 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU @Anycubic Kobra S1 0.4 nozzle.json @@ -4,11 +4,14 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "ias4IbNNwygyeow9", - "filament_id": "GFU99", + "filament_id": "OFMsDGbs", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU @Anycubic Kobra S1 0.4 nozzle" ], + "filament_vendor": [ + "Anycubic" + ], "filament_flow_ratio": [ "1" ], @@ -105,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "31.925" - ], "filament_loading_speed": [ "0" ], @@ -177,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "24.75" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json index 7f8d97a333..a9d3339d48 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "9UgHz7Bgv8GpydSE", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.4 nozzle" @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "TPU for ACE" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json index e9b2079dff..da5f869cdd 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "IcPG0rhSw4AuIcPl", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.6 nozzle" @@ -13,7 +13,7 @@ "Anycubic" ], "filament_type": [ - "PEBA" + "TPU" ], "compatible_printers": [ "Anycubic Kobra S1 Max 0.6 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json index d3b82264a5..64e303eda7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "fVVxpwKdzpOMntDc", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra S1 Max 0.8 nozzle" diff --git a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json index 7ac3014639..65c41524b7 100644 --- a/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "Z6f3hM30bVcmttUo", - "filament_id": "GFTPU for ACE", + "filament_id": "OF0FfcAG", "instantiation": "true", "filament_settings_id": [ "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json index 71e7beac0e..0f273afbef 100644 --- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Generic ABS @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic ABS", + "inherits": "Generic ABS @Anycubic", "from": "system", "setting_id": "W3GiC5YLzxbbjXLY", - "filament_id": "GFB99", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_vendor": [ "Generic" @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json new file mode 100644 index 0000000000..cc7334fa34 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic ABS @Anycubic", + "inherits": "fdm_filament_abs", + "renamed_from": "Anycubic Generic ABS", + "from": "system", + "setting_id": "jKvjWU6rcHvWblWC", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle", + "Anycubic Kobra 3 Max 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json new file mode 100644 index 0000000000..282f590739 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic ASA @Anycubic.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic ASA @Anycubic", + "inherits": "fdm_filament_asa", + "renamed_from": "Anycubic Generic ASA", + "from": "system", + "setting_id": "o2Cr8cBtE4OKsTqm", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra 3 Max 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle", + "Anycubic Kobra 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json new file mode 100644 index 0000000000..da5d2424e2 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PA @Anycubic.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA @Anycubic", + "inherits": "fdm_filament_pa", + "renamed_from": "Anycubic Generic PA", + "from": "system", + "setting_id": "5MJsYpJIimshIDZm", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json new file mode 100644 index 0000000000..a360cfea1a --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PA-CF @Anycubic.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Anycubic", + "inherits": "fdm_filament_pa", + "renamed_from": "Anycubic Generic PA-CF", + "from": "system", + "setting_id": "j1uioy0lCnm4AKrm", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json new file mode 100644 index 0000000000..e2da18b155 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PC @Anycubic.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PC @Anycubic", + "inherits": "fdm_filament_pc", + "renamed_from": "Anycubic Generic PC", + "from": "system", + "setting_id": "3jP8aWkWw2dT2fNM", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json index 0c49ed86e1..b44b6ecc11 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -4,13 +4,13 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "aFlpGq8eSJQEO1Ie", - "filament_id": "GFPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_settings_id": [ "Generic PETG @Anycubic Kobra S1 Max 0.4 nozzle" ], "filament_vendor": [ - "Anycubic" + "Generic" ], "filament_type": [ "PETG" @@ -318,12 +318,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json index 36d7edc211..0f238e5a5b 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic Kobra X 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "9hdOsLCrVX3dkem2", - "filament_id": "GFPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_settings_id": [ "Generic PETG @Anycubic Kobra X 0.4 nozzle" @@ -309,12 +309,6 @@ "slow_down_min_speed": [ "20" ], - "supertack_plate_temp": [ - "35" - ], - "supertack_plate_temp_initial_layer": [ - "35" - ], "support_material_interface_fan_speed": [ "-1" ], diff --git a/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json new file mode 100644 index 0000000000..697caad9d7 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PETG @Anycubic.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "Generic PETG @Anycubic", + "inherits": "fdm_filament_pet", + "renamed_from": "Anycubic Generic PETG", + "from": "system", + "setting_id": "ddafY4oOvEc6L6Ej", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle", + "Anycubic Kobra 3 0.4 nozzle", + "Anycubic Kobra 3 Max 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json index cb51a5a339..1a2368dcfd 100644 --- a/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "tUSAvzLu6pVk37kn", - "filament_id": "GFG99", + "filament_id": "OF112FvY", "instantiation": "true", "filament_settings_id": [ "Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle" @@ -120,9 +120,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "28" ], @@ -204,9 +201,6 @@ "filament_type": [ "PETG" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json new file mode 100644 index 0000000000..e7fe864b7e --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PLA @Anycubic.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PLA @Anycubic", + "inherits": "fdm_filament_pla", + "renamed_from": "Anycubic Generic PLA", + "from": "system", + "setting_id": "qoYfeBQCSt15O9ye", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle", + "Anycubic Kobra 3 0.2 nozzle", + "Anycubic Kobra 3 0.4 nozzle", + "Anycubic Kobra 3 0.6 nozzle", + "Anycubic Kobra 3 0.8 nozzle", + "Anycubic Kobra 3 Max 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json new file mode 100644 index 0000000000..0f0bd4462a --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PLA-CF @Anycubic.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Anycubic", + "inherits": "fdm_filament_pla", + "renamed_from": "Anycubic Generic PLA-CF", + "from": "system", + "setting_id": "mLENUT39vBcQiLpm", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json new file mode 100644 index 0000000000..7f6603b6db --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic PVA @Anycubic.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PVA @Anycubic", + "inherits": "fdm_filament_pva", + "renamed_from": "Anycubic Generic PVA", + "from": "system", + "setting_id": "ae5ljmDsW7uauLz8", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index 42739229b1..6b5dc78c98 100644 --- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Generic TPU @Anycubic Kobra 3 0.4 nozzle", - "inherits": "Anycubic Generic TPU", + "inherits": "Generic TPU @Anycubic", "from": "system", "setting_id": "kHB2rrxkyz4Clu3N", - "filament_id": "GFU99", + "filament_id": "OFgbpcy9", "instantiation": "true", "filament_vendor": [ "Generic" @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json new file mode 100644 index 0000000000..d52428e4e5 --- /dev/null +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic TPU @Anycubic", + "inherits": "fdm_filament_tpu", + "renamed_from": "Anycubic Generic TPU", + "from": "system", + "setting_id": "z0FSikhD8ZHv2UYt", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Anycubic i3 Mega S 0.4 nozzle", + "Anycubic Chiron 0.4 nozzle", + "Anycubic Vyper 0.4 nozzle", + "Anycubic Kobra 0.4 nozzle", + "Anycubic Kobra Max 0.4 nozzle", + "Anycubic Kobra Plus 0.4 nozzle", + "Anycubic 4Max Pro 0.4 nozzle", + "Anycubic 4Max Pro 2 0.4 nozzle", + "Anycubic Kobra 2 0.4 nozzle", + "Anycubic Kobra 3 Max 0.4 nozzle" + ] +} diff --git a/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json index 0400c26a1d..b359d010b2 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Fiberon PA6-CF20 @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "DmRzQzlSf2KdWwKu", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json index 21be878b04..b6c5123b8f 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Panchroma PLA @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gsXcm0Q6TdKW0GBx", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json index a594a3fe92..679c45f1c7 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "R7XUcQ4LSZA2i4PG", - "filament_id": "GFL79", + "filament_id": "OF5oXk4M", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json index 008247a00a..430ea6c816 100644 --- a/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/filament/Polymaker/Polymaker PLA Pro Metallic @Anycubic Kobra S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "iFJbVP8Ui0h5sv5X", - "filament_id": "GFL80", + "filament_id": "OFHknN4v", "instantiation": "true", "compatible_printers": [ "Anycubic Kobra S1 0.4 nozzle" diff --git a/resources/profiles/Anycubic/filament/fdm_filament_pet.json b/resources/profiles/Anycubic/filament/fdm_filament_pet.json index 62af7c89ed..56671ade0d 100644 --- a/resources/profiles/Anycubic/filament/fdm_filament_pet.json +++ b/resources/profiles/Anycubic/filament/fdm_filament_pet.json @@ -25,6 +25,12 @@ "hot_plate_temp_initial_layer": [ "80" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "slow_down_for_layer_cooling": [ "1" ], diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json index 40b4613eb8..fde1113344 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ; metric values\nG90 ; absolute positioning\nM82 ; set extruder to absolute mode\nM140 S[first_layer_bed_temperature] ; set bed temp\nG28 X0 Y0 ; home X and Y\nG28 Z0 ; home Z\nG1 Z30 F{machine_max_speed_z[0]*60} ; move Z a bit down to not blow on the bed edge while heating\nG1 X10 F3900 ; let some space on x to prevent the filament cooling exhaust from beeing blocked by the servo motor\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM106 S80 ; turn on fan to prevent air nozzle melt while heating up\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nM107 ; start with the fan off\nG28 X0 ; goto X home again\nG92 E0 ; zero the extruded length\nG1 Z0.2 F360 ; move plattform upwards\n; extrude material next to the plattform (comment or remove following lines to disable)\nG1 F180 E20 ; extrude some material next to the plattform\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG92 E0 ; zero the extruded length again\nG1 X5 F3900 ; move sideways to get rid of that string\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\nG92 E0 ; zero the extruded length again\n; draw intro line (comment or remove following lines to disable)\nG1 X30 E5 F700 ; draw intro line\nG92 E0 ; zero the extruded length\nG1 E-[retraction_length] F{retraction_speed[0]*60} ; do a filament retract\nG1 X40 Z2.0 ; move away from the introline\nG92 E0 ; zero the extruded length again\nG1 E[retraction_length] F{retraction_speed[0]*60} ; do a filament deretract with retract parameters\n; end of intro line code\nM117 Printing...\nG5", "machine_end_gcode": "M104 S0 ; turn off extruder heating\nM140 S0 ; turn off bed heating\nM107 ; turn off fans\nG91 ; relative positioning\nG0 Z+0.5 ; move Z up a tiny bit\nG90 ; absolute positioning\nG0 X135 Y105 F{machine_max_speed_x[0]*60} ; move extruder to center position\nG0 Z190.5 F{machine_max_speed_z[0]*60} ; lower the plattform to Z min\nM84 ; steppers off\nG90 ; absolute positioning\n", diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json index e54851b41c..56f6c5332d 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro2_buildplate_model.stl", "bed_texture": "anycubic_4maxpro2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json index 95144dab59..54ee3a238d 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_4maxpro_buildplate_model.stl", "bed_texture": "anycubic_4maxpro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json index d79bebdf71..9222ef6619 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107 ;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single]; set wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z15.0 F3600 ;move the platform down 15mm\nG92 E0;zero the extruded length\nG1 F200 E40;extrude 40mm of feed stock\nG92 E0;zero the extruded length again\nG1 F3600", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91;relative positioning\nG1 E-4 F300;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X-10 F3000; get the head off the bed\nG1 F3000 Y400;kick the bed out\nM84;steppers off", diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron.json b/resources/profiles/Anycubic/machine/Anycubic Chiron.json index 2772464526..d7b1303de6 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_chiron_buildplate_model.stl", "bed_texture": "anycubic_chiron_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json index e32ed5b2fb..d529794295 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index cadcce6d5a..a804761c28 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -104,7 +104,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ;Use absolute coordinates\nM83 ;Extruder relative mode\nM104 S[first_layer_temperature] ;Set extruder temp\nM140 S[first_layer_bed_temperature] ;Set bed temp\nM190 S[first_layer_bed_temperature] ;Wait for bed temp\nM109 S[first_layer_temperature] ;Wait for extruder temp\nG28 ;Move X/Y/Z to min endstops\nG1 Z0.28 ;Lift nozzle a bit\nG92 E0 ;Specify current extruder position as zero\nG1 Y3 F1800 ;Move Y to purge point\nG1 X60 E25 F500 ;Extrude 25mm of filament in a 5cm line\nG92 E0 ;Zero the extruded length again\nG1 E-2 F500 ;Retract a little\nG1 X70 F4000 ;Quickly wipe away from the filament line\nM117", "machine_end_gcode": "M104 S0 ;Extruder off\nM140 S0 ;Heatbed off\nM107 ;Fan off\nG91 ;Relative positioning\nG1 E-5 F3000 ;Retract filament\nG1 Z+0.3 F3000 ;Lift print head\nG28 X0 F3000 ;Home X axis\nM84 ;Disable stepper motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max 0.4 nozzle.json index 9497594f62..663294b14b 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max 0.4 nozzle.json @@ -197,7 +197,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max.json index f28ac191b3..c0d013f4ae 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Max.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra 2 Max_buildplate_model.stl", "bed_texture": "Anycubic Kobra 2 Max_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra 2 Max 0.4 nozzle;Generic ABS @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PETG @Anycubic Kobra 2 Max 0.4 nozzle;Generic TPU @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra 2 Max 0.4 nozzle;Anycubic PLA Slik @Anycubic Kobra 2 Max 0.4 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra 2 Max 0.4 nozzle;Generic ABS @System;Generic TPU @System" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Neo 0.4 nozzle.json index f3d67776af..43e6d317ef 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -201,7 +201,6 @@ "100" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus 0.4 nozzle.json index 1cce9bddff..bbf71349cf 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -204,7 +204,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus.json index 9db9eec174..30b4b2c084 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Plus.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra 2 Plus_buildplate_model.stl", "bed_texture": "Anycubic Kobra 2 Plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra 2 Plus 0.4 nozzle;Generic ABS @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PETG @Anycubic Kobra 2 Plus 0.4 nozzle;Generic TPU @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra 2 Plus 0.4 nozzle;Anycubic PLA Slik @Anycubic Kobra 2 Plus 0.4 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra 2 Plus 0.4 nozzle;Generic ABS @System;Generic TPU @System" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro 0.4 nozzle.json index 690f77a01c..64e1da1fb9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -202,7 +202,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro.json index 87a629fea2..e278a2357f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 Pro.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra 2 Pro_buildplate_model.stl", "bed_texture": "Anycubic Kobra 2 Pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra 2 Pro 0.4 nozzle;Generic ABS @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PETG @Anycubic Kobra 2 Pro 0.4 nozzle;Generic TPU @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra 2 Pro 0.4 nozzle;Anycubic PLA Slik @Anycubic Kobra 2 Pro 0.4 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra 2 Pro 0.4 nozzle;Generic ABS @System;Generic TPU @System" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json index 545ea61e1d..9f2e29a0d9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobra2_buildplate_model.stl", "bed_texture": "anycubic_kobra2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json index cbd4a67cfb..0543b1818f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.2 nozzle.json @@ -208,7 +208,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json index 624233053e..e3cc91d26b 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.4 nozzle.json @@ -210,7 +210,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json index d613138128..ec4e3ef986 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.6 nozzle.json @@ -208,7 +208,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json index 60b3864454..4e67d80ac1 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 0.8 nozzle.json @@ -208,7 +208,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.4 nozzle.json index dbb112bfae..ed52a91b21 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.4 nozzle.json @@ -20,15 +20,15 @@ "Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle", "Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", "Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle", - "Generic PLA @Anycubic Kobra 3 Max 0.4 nozzle", - "Generic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle", + "Generic PLA @Anycubic", + "Generic PLA Silk @System", "Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle", "Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle", "Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle", "Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle", - "Generic ABS @Anycubic Kobra 3 Max 0.4 nozzle", - "Generic PETG @Anycubic Kobra 3 Max 0.4 nozzle", - "Generic TPU @Anycubic Kobra 3 Max 0.4 nozzle" + "Generic ABS @Anycubic", + "Generic PETG @Anycubic", + "Generic TPU @Anycubic" ], "disable_m73": "0", "gcode_flavor": "klipper", @@ -252,7 +252,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "1", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.6 nozzle.json index 272d19cd75..811abb2d5f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.6 nozzle.json @@ -222,7 +222,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "1", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.8 nozzle.json index 993258d59b..41c5a6c2a3 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max 0.8 nozzle.json @@ -225,7 +225,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "1", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max.json index 03047b45ea..990c65bae9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3 Max.json @@ -9,5 +9,5 @@ "bed_texture": "Anycubic Kobra 3 Max_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle;Generic PLA @Anycubic Kobra 3 Max 0.4 nozzle;Generic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle;Generic ABS @Anycubic Kobra 3 Max 0.4 nozzle;Generic PETG @Anycubic Kobra 3 Max 0.4 nozzle;Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle;Generic TPU @Anycubic Kobra 3 Max 0.4 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic PLA @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic PLA High Speed @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Luminous @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 3 Max 0.4 nozzle;Generic PLA @Anycubic;Generic PLA Silk @System;Anycubic ABS @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic ABS @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic ABS @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic ASA @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic ASA @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic PEBA 95A @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic PETG @Anycubic Kobra 3 Max 0.8 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.4 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.6 nozzle;Anycubic TPU @Anycubic Kobra 3 Max 0.8 nozzle;Generic ABS @Anycubic;Generic PETG @Anycubic;Generic PETG Basic @Anycubic Kobra 3 Max 0.4 nozzle;Generic TPU @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 3.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 3.json index b33c096a26..f87f47ad68 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 3.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 3.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra 3_buildplate_model.stl", "bed_texture": "Anycubic Kobra 3_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle;Generic ABS @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra 3 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 0.4 nozzle;Generic TPU @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle;Anycubic ASA @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA @Anycubic Kobra 3 0.2 nozzle;Anycubic PLA @Anycubic Kobra 3 0.6 nozzle;Anycubic PLA @Anycubic Kobra 3 0.8 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra 3 0.4 nozzle;Generic ABS @Anycubic Kobra 3 0.4 nozzle;Anycubic PETG @Anycubic Kobra 3 0.4 nozzle;Generic TPU @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA Slik @Anycubic Kobra 3 0.4 nozzle;Anycubic ASA @Anycubic Kobra 3 0.4 nozzle;Anycubic PLA @Anycubic Kobra 3 0.2 nozzle;Anycubic PLA @Anycubic Kobra 3 0.6 nozzle;Anycubic PLA @Anycubic Kobra 3 0.8 nozzle" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json index 58ce426f05..36033222d7 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single] ; set wait for bed temp\nM355 S1;turn on the case light\nM109 S[nozzle_temperature_initial_layer]; wait for extruder temp\nG1 Z15.0 F1000 ;move the nozzle up 15mm\nG92 E0;zero the extruded length\nG1 F100 E60;extrude 60mm of feed stock\nG92 E0;zero the extruded length again", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0;heated bed heater off (if you have it)\nG91;relative positioning\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X10 F3000; get the head off the bed\nG1 F3000 Y400 ;kick the bed out\nM84;steppers off\nM355 S0;turn off the case light", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json index fd3939620e..b4b0c4f17b 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobramax_buildplate_model.stl", "bed_texture": "anycubic_kobramax_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json index ab8a4a0e2b..fc99bbd49f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo 0.4 nozzle.json @@ -14,7 +14,7 @@ ], "default_print_profile": "0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "disable_m73": "1", "gcode_flavor": "marlin2", @@ -201,7 +201,6 @@ "100" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json index 80effe6e8b..d940eeb745 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Neo.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra Neo_buildplate_model.stl", "bed_texture": "Anycubic Kobra Neo_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic PLA" + "default_materials": "Generic PLA @Anycubic;Anycubic PLA @Anycubic Kobra Neo 0.4 nozzle" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json index 9b700b7a5f..1ab26d5c8c 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "M104 S140;start the nozzle preheat and don't wait\nG21;metric values\nG90;absolute positioning\nM82;set extruder to absolute mode\nM107;start with the fan off\nG28;home all\nM190 S[bed_temperature_initial_layer_single] ; set wait for bed temp\nM355 S1;turn on the case light\nM109 S[nozzle_temperature_initial_layer]; wait for extruder temp\nG1 Z15.0 F1000 ;move the nozzle up 15mm\nG92 E0;zero the extruded length\nG1 F100 E60;extrude 60mm of feed stock\nG92 E0;zero the extruded length again", "machine_end_gcode": "M104 S0;extruder heater off\nM140 S0;heated bed heater off (if you have it)\nG91;relative positioning\nG1 Z+10 F3600 ;move Z up a bit\nG90;absolute positioning\nG1 X10 F3000; get the head off the bed\nG1 F3000 Y400 ;kick the bed out\nM84;steppers off\nM355 S0;turn off the case light", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json index 6a30264849..cf90e73021 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobraplus_buildplate_model.stl", "bed_texture": "anycubic_kobraplus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json index 9ca15821da..94d82b7c27 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 0.4 nozzle.json @@ -201,7 +201,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.25 nozzle.json index 7e6195aca7..8786b75afa 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,252 +1,251 @@ -{ - "type": "machine", - "name": "Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_machine_common", - "from": "system", - "setting_id": "Puudpg2z8v7I6IQA", - "instantiation": "true", - "printer_technology": "FFF", - "printer_settings_id": "Anycubic Kobra S1 Max 0.25 nozzle", - "printer_model": "Anycubic Kobra S1 Max", - "printer_variant": "0.25", - "nozzle_diameter": [ - "0.25" - ], - "default_print_profile": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "default_filament_profile": [ - "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle" - ], - "disable_m73": "0", - "gcode_flavor": "klipper", - "printable_area": [ - "0x0", - "350x0", - "350x350", - "0x350" - ], - "printable_height": "350", - "thumbnails": "230x110/PNG", - "thumbnails_format": "PNG", - "thumbnails_internal": "512x512/PNG/top", - "thumbnails_internal_switch": "1", - "adaptive_bed_mesh_margin": "0", - "auxiliary_fan": "1", - "bbl_use_printhost": "0", - "bed_custom_model": "", - "bed_custom_texture": "", - "bed_exclude_area": [], - "bed_mesh_max": "0,0", - "bed_mesh_min": "0,0", - "bed_mesh_probe_distance": "0,0", - "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", - "best_object_pos": "0.5,0.5", - "change_extrusion_role_gcode": "", - "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", - "cooling_tube_length": "0", - "cooling_tube_retraction": "0", - "deretraction_speed": [ - "0" - ], - "emit_machine_limits_to_gcode": "1", - "enable_filament_ramming": "0", - "enable_long_retraction_when_cut": "0", - "extra_loading_move": "0", - "extruder_clearance_height_to_lid": "340", - "extruder_clearance_height_to_rod": "30", - "extruder_clearance_radius": "55", - "extruder_colour": [ - "FF4D4F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "head_wrap_detect_zone": [], - "high_current_on_filament_swap": "0", - "host_type": "octoprint", - "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", - "long_retractions_when_cut": [ - "0" - ], - "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "400", - "400", - "400" - ], - "machine_max_jerk_e": [ - "1", - "1", - "1" - ], - "machine_max_jerk_x": [ - "15", - "15", - "15" - ], - "machine_max_jerk_y": [ - "15", - "15", - "15" - ], - "machine_max_jerk_z": [ - "1", - "1", - "1" - ], - "machine_max_speed_e": [ - "80", - "40", - "104" - ], - "machine_max_speed_x": [ - "600", - "300", - "780" - ], - "machine_max_speed_y": [ - "600", - "300", - "780" - ], - "machine_max_speed_z": [ - "10", - "5", - "13" - ], - "machine_min_extruding_rate": [ - "0", - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0", - "0" - ], - "machine_pause_gcode": "M600", - "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", - "machine_tool_change_time": "0", - "machine_unload_filament_time": "0", - "manual_filament_change": "0", - "max_layer_height": [ - "0.18" - ], - "min_layer_height": [ - "0.05" - ], - "nozzle_height": "4", - "nozzle_hrc": "0", - "nozzle_type": "brass", - "nozzle_volume": "107", - "parking_pos_retraction": "0", - "pellet_modded_printer": "0", - "preferred_orientation": "0", - "printer_flush_multiplier": "1", - "printer_notes": "", - "printer_structure": "corexy", - "printhost_authorization_type": "key", - "printhost_ssl_ignore_revoke": "0", - "printing_by_object_gcode": "", - "purge_in_prime_tower": "0", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "348" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_on_top_layer": [ - "1" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_distances_when_cut": [ - "0" - ], - "retraction_length": [ - "0.4" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "1", - "single_extruder_multi_material": "1", - "support_air_filtration": "1", - "support_chamber_temp_control": "1", - "support_multi_bed_types": "1", - "template_custom_gcode": "", - "time_cost": "0", - "time_lapse_gcode": "", - "travel_slope": [ - "3" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Slope Lift" - ], - "z_offset": "0" -} +{ + "type": "machine", + "name": "Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_machine_common", + "from": "system", + "setting_id": "Puudpg2z8v7I6IQA", + "instantiation": "true", + "printer_technology": "FFF", + "printer_settings_id": "Anycubic Kobra S1 Max 0.25 nozzle", + "printer_model": "Anycubic Kobra S1 Max", + "printer_variant": "0.25", + "nozzle_diameter": [ + "0.25" + ], + "default_print_profile": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "default_filament_profile": [ + "Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle" + ], + "disable_m73": "0", + "gcode_flavor": "klipper", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "350", + "thumbnails": "230x110/PNG", + "thumbnails_format": "PNG", + "thumbnails_internal": "512x512/PNG/top", + "thumbnails_internal_switch": "1", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [], + "bed_mesh_max": "0,0", + "bed_mesh_min": "0,0", + "bed_mesh_probe_distance": "0,0", + "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "deretraction_speed": [ + "0" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "340", + "extruder_clearance_height_to_rod": "30", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "FF4D4F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "400", + "400", + "400" + ], + "machine_max_jerk_e": [ + "1", + "1", + "1" + ], + "machine_max_jerk_x": [ + "15", + "15", + "15" + ], + "machine_max_jerk_y": [ + "15", + "15", + "15" + ], + "machine_max_jerk_z": [ + "1", + "1", + "1" + ], + "machine_max_speed_e": [ + "80", + "40", + "104" + ], + "machine_max_speed_x": [ + "600", + "300", + "780" + ], + "machine_max_speed_y": [ + "600", + "300", + "780" + ], + "machine_max_speed_z": [ + "10", + "5", + "13" + ], + "machine_min_extruding_rate": [ + "0", + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.18" + ], + "min_layer_height": [ + "0.05" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "brass", + "nozzle_volume": "107", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printer_flush_multiplier": "1", + "printer_notes": "", + "printer_structure": "corexy", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "348" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "0" + ], + "retraction_length": [ + "0.4" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Slope Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.4 nozzle.json index 482534d2de..f0ba840124 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,252 +1,251 @@ -{ - "type": "machine", - "name": "Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_machine_common", - "from": "system", - "setting_id": "gI3IJRLKNc1fyiO6", - "instantiation": "true", - "printer_technology": "FFF", - "printer_settings_id": "Anycubic Kobra S1 Max 0.4 nozzle", - "printer_model": "Anycubic Kobra S1 Max", - "printer_variant": "0.4", - "nozzle_diameter": [ - "0.4" - ], - "default_print_profile": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "default_filament_profile": [ - "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" - ], - "disable_m73": "0", - "gcode_flavor": "klipper", - "printable_area": [ - "0x0", - "350x0", - "350x350", - "0x350" - ], - "printable_height": "350", - "thumbnails": "230x110/PNG", - "thumbnails_format": "PNG", - "thumbnails_internal": "512x512/PNG/top", - "thumbnails_internal_switch": "1", - "adaptive_bed_mesh_margin": "0", - "auxiliary_fan": "1", - "bbl_use_printhost": "0", - "bed_custom_model": "", - "bed_custom_texture": "", - "bed_exclude_area": [], - "bed_mesh_max": "0,0", - "bed_mesh_min": "0,0", - "bed_mesh_probe_distance": "0,0", - "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", - "best_object_pos": "0.5,0.5", - "change_extrusion_role_gcode": "", - "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", - "cooling_tube_length": "0", - "cooling_tube_retraction": "0", - "deretraction_speed": [ - "0" - ], - "emit_machine_limits_to_gcode": "1", - "enable_filament_ramming": "0", - "enable_long_retraction_when_cut": "0", - "extra_loading_move": "0", - "extruder_clearance_height_to_lid": "340", - "extruder_clearance_height_to_rod": "30", - "extruder_clearance_radius": "55", - "extruder_colour": [ - "FF4D4F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "head_wrap_detect_zone": [], - "high_current_on_filament_swap": "0", - "host_type": "octoprint", - "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", - "long_retractions_when_cut": [ - "0" - ], - "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "400", - "400", - "400" - ], - "machine_max_jerk_e": [ - "1", - "1", - "1" - ], - "machine_max_jerk_x": [ - "15", - "15", - "15" - ], - "machine_max_jerk_y": [ - "15", - "15", - "15" - ], - "machine_max_jerk_z": [ - "1", - "1", - "1" - ], - "machine_max_speed_e": [ - "80", - "40", - "104" - ], - "machine_max_speed_x": [ - "600", - "300", - "780" - ], - "machine_max_speed_y": [ - "600", - "300", - "780" - ], - "machine_max_speed_z": [ - "10", - "5", - "13" - ], - "machine_min_extruding_rate": [ - "0", - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0", - "0" - ], - "machine_pause_gcode": "M600", - "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", - "machine_tool_change_time": "0", - "machine_unload_filament_time": "0", - "manual_filament_change": "0", - "max_layer_height": [ - "0.28" - ], - "min_layer_height": [ - "0.08" - ], - "nozzle_height": "4", - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "107", - "parking_pos_retraction": "0", - "pellet_modded_printer": "0", - "preferred_orientation": "0", - "printer_flush_multiplier": "1", - "printer_notes": "", - "printer_structure": "corexy", - "printhost_authorization_type": "key", - "printhost_ssl_ignore_revoke": "0", - "printing_by_object_gcode": "", - "purge_in_prime_tower": "0", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "348" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_on_top_layer": [ - "1" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_distances_when_cut": [ - "0" - ], - "retraction_length": [ - "0.4" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "1", - "single_extruder_multi_material": "1", - "support_air_filtration": "1", - "support_chamber_temp_control": "1", - "support_multi_bed_types": "1", - "template_custom_gcode": "", - "time_cost": "0", - "time_lapse_gcode": "", - "travel_slope": [ - "3" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Slope Lift" - ], - "z_offset": "0" -} +{ + "type": "machine", + "name": "Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_machine_common", + "from": "system", + "setting_id": "gI3IJRLKNc1fyiO6", + "instantiation": "true", + "printer_technology": "FFF", + "printer_settings_id": "Anycubic Kobra S1 Max 0.4 nozzle", + "printer_model": "Anycubic Kobra S1 Max", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "default_print_profile": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "default_filament_profile": [ + "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" + ], + "disable_m73": "0", + "gcode_flavor": "klipper", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "350", + "thumbnails": "230x110/PNG", + "thumbnails_format": "PNG", + "thumbnails_internal": "512x512/PNG/top", + "thumbnails_internal_switch": "1", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [], + "bed_mesh_max": "0,0", + "bed_mesh_min": "0,0", + "bed_mesh_probe_distance": "0,0", + "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "deretraction_speed": [ + "0" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "340", + "extruder_clearance_height_to_rod": "30", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "FF4D4F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "400", + "400", + "400" + ], + "machine_max_jerk_e": [ + "1", + "1", + "1" + ], + "machine_max_jerk_x": [ + "15", + "15", + "15" + ], + "machine_max_jerk_y": [ + "15", + "15", + "15" + ], + "machine_max_jerk_z": [ + "1", + "1", + "1" + ], + "machine_max_speed_e": [ + "80", + "40", + "104" + ], + "machine_max_speed_x": [ + "600", + "300", + "780" + ], + "machine_max_speed_y": [ + "600", + "300", + "780" + ], + "machine_max_speed_z": [ + "10", + "5", + "13" + ], + "machine_min_extruding_rate": [ + "0", + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "107", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printer_flush_multiplier": "1", + "printer_notes": "", + "printer_structure": "corexy", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "348" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "0" + ], + "retraction_length": [ + "0.4" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Slope Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.6 nozzle.json index 0feeec8104..604d488bdb 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,252 +1,251 @@ -{ - "type": "machine", - "name": "Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_machine_common", - "from": "system", - "setting_id": "p7ilBBLpGn5OYr2e", - "instantiation": "true", - "printer_technology": "FFF", - "printer_settings_id": "Anycubic Kobra S1 Max 0.6 nozzle", - "printer_model": "Anycubic Kobra S1 Max", - "printer_variant": "0.6", - "nozzle_diameter": [ - "0.6" - ], - "default_print_profile": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "default_filament_profile": [ - "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle" - ], - "disable_m73": "0", - "gcode_flavor": "klipper", - "printable_area": [ - "0x0", - "350x0", - "350x350", - "0x350" - ], - "printable_height": "350", - "thumbnails": "230x110/PNG", - "thumbnails_format": "PNG", - "thumbnails_internal": "512x512/PNG/top", - "thumbnails_internal_switch": "1", - "adaptive_bed_mesh_margin": "0", - "auxiliary_fan": "1", - "bbl_use_printhost": "0", - "bed_custom_model": "", - "bed_custom_texture": "", - "bed_exclude_area": [], - "bed_mesh_max": "0,0", - "bed_mesh_min": "0,0", - "bed_mesh_probe_distance": "0,0", - "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", - "best_object_pos": "0.5,0.5", - "change_extrusion_role_gcode": "", - "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", - "cooling_tube_length": "0", - "cooling_tube_retraction": "0", - "deretraction_speed": [ - "0" - ], - "emit_machine_limits_to_gcode": "1", - "enable_filament_ramming": "0", - "enable_long_retraction_when_cut": "0", - "extra_loading_move": "0", - "extruder_clearance_height_to_lid": "340", - "extruder_clearance_height_to_rod": "30", - "extruder_clearance_radius": "55", - "extruder_colour": [ - "FF4D4F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "head_wrap_detect_zone": [], - "high_current_on_filament_swap": "0", - "host_type": "octoprint", - "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", - "long_retractions_when_cut": [ - "0" - ], - "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "400", - "400", - "400" - ], - "machine_max_jerk_e": [ - "1", - "1", - "1" - ], - "machine_max_jerk_x": [ - "15", - "15", - "15" - ], - "machine_max_jerk_y": [ - "15", - "15", - "15" - ], - "machine_max_jerk_z": [ - "1", - "1", - "1" - ], - "machine_max_speed_e": [ - "80", - "40", - "104" - ], - "machine_max_speed_x": [ - "600", - "300", - "780" - ], - "machine_max_speed_y": [ - "600", - "300", - "780" - ], - "machine_max_speed_z": [ - "10", - "5", - "13" - ], - "machine_min_extruding_rate": [ - "0", - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0", - "0" - ], - "machine_pause_gcode": "M600", - "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", - "machine_tool_change_time": "0", - "machine_unload_filament_time": "0", - "manual_filament_change": "0", - "max_layer_height": [ - "0.42" - ], - "min_layer_height": [ - "0.12" - ], - "nozzle_height": "4", - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "107", - "parking_pos_retraction": "0", - "pellet_modded_printer": "0", - "preferred_orientation": "0", - "printer_flush_multiplier": "1", - "printer_notes": "", - "printer_structure": "corexy", - "printhost_authorization_type": "key", - "printhost_ssl_ignore_revoke": "0", - "printing_by_object_gcode": "", - "purge_in_prime_tower": "0", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "348" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_on_top_layer": [ - "1" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_distances_when_cut": [ - "0" - ], - "retraction_length": [ - "0.4" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "1", - "single_extruder_multi_material": "1", - "support_air_filtration": "1", - "support_chamber_temp_control": "1", - "support_multi_bed_types": "1", - "template_custom_gcode": "", - "time_cost": "0", - "time_lapse_gcode": "", - "travel_slope": [ - "3" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Slope Lift" - ], - "z_offset": "0" -} +{ + "type": "machine", + "name": "Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_machine_common", + "from": "system", + "setting_id": "p7ilBBLpGn5OYr2e", + "instantiation": "true", + "printer_technology": "FFF", + "printer_settings_id": "Anycubic Kobra S1 Max 0.6 nozzle", + "printer_model": "Anycubic Kobra S1 Max", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "default_print_profile": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "default_filament_profile": [ + "Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle" + ], + "disable_m73": "0", + "gcode_flavor": "klipper", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "350", + "thumbnails": "230x110/PNG", + "thumbnails_format": "PNG", + "thumbnails_internal": "512x512/PNG/top", + "thumbnails_internal_switch": "1", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [], + "bed_mesh_max": "0,0", + "bed_mesh_min": "0,0", + "bed_mesh_probe_distance": "0,0", + "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "deretraction_speed": [ + "0" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "340", + "extruder_clearance_height_to_rod": "30", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "FF4D4F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "400", + "400", + "400" + ], + "machine_max_jerk_e": [ + "1", + "1", + "1" + ], + "machine_max_jerk_x": [ + "15", + "15", + "15" + ], + "machine_max_jerk_y": [ + "15", + "15", + "15" + ], + "machine_max_jerk_z": [ + "1", + "1", + "1" + ], + "machine_max_speed_e": [ + "80", + "40", + "104" + ], + "machine_max_speed_x": [ + "600", + "300", + "780" + ], + "machine_max_speed_y": [ + "600", + "300", + "780" + ], + "machine_max_speed_z": [ + "10", + "5", + "13" + ], + "machine_min_extruding_rate": [ + "0", + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.12" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "107", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printer_flush_multiplier": "1", + "printer_notes": "", + "printer_structure": "corexy", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "348" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "0" + ], + "retraction_length": [ + "0.4" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Slope Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.8 nozzle.json index 172c30885e..d51a6fc560 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,252 +1,251 @@ -{ - "type": "machine", - "name": "Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_machine_common", - "from": "system", - "setting_id": "eD3ZKZ62sl6JMvUr", - "instantiation": "true", - "printer_technology": "FFF", - "printer_settings_id": "Anycubic Kobra S1 Max 0.8 nozzle", - "printer_model": "Anycubic Kobra S1 Max", - "printer_variant": "0.8", - "nozzle_diameter": [ - "0.8" - ], - "default_print_profile": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "default_filament_profile": [ - "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" - ], - "disable_m73": "0", - "gcode_flavor": "klipper", - "printable_area": [ - "0x0", - "350x0", - "350x350", - "0x350" - ], - "printable_height": "350", - "thumbnails": "230x110/PNG", - "thumbnails_format": "PNG", - "thumbnails_internal": "512x512/PNG/top", - "thumbnails_internal_switch": "1", - "adaptive_bed_mesh_margin": "0", - "auxiliary_fan": "1", - "bbl_use_printhost": "0", - "bed_custom_model": "", - "bed_custom_texture": "", - "bed_exclude_area": [], - "bed_mesh_max": "0,0", - "bed_mesh_min": "0,0", - "bed_mesh_probe_distance": "0,0", - "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", - "best_object_pos": "0.5,0.5", - "change_extrusion_role_gcode": "", - "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", - "cooling_tube_length": "0", - "cooling_tube_retraction": "0", - "deretraction_speed": [ - "0" - ], - "emit_machine_limits_to_gcode": "1", - "enable_filament_ramming": "0", - "enable_long_retraction_when_cut": "0", - "extra_loading_move": "0", - "extruder_clearance_height_to_lid": "340", - "extruder_clearance_height_to_rod": "30", - "extruder_clearance_radius": "55", - "extruder_colour": [ - "FF4D4F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "head_wrap_detect_zone": [], - "high_current_on_filament_swap": "0", - "host_type": "octoprint", - "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", - "long_retractions_when_cut": [ - "0" - ], - "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "400", - "400", - "400" - ], - "machine_max_jerk_e": [ - "1", - "1", - "1" - ], - "machine_max_jerk_x": [ - "15", - "15", - "15" - ], - "machine_max_jerk_y": [ - "15", - "15", - "15" - ], - "machine_max_jerk_z": [ - "1", - "1", - "1" - ], - "machine_max_speed_e": [ - "80", - "40", - "104" - ], - "machine_max_speed_x": [ - "600", - "300", - "780" - ], - "machine_max_speed_y": [ - "600", - "300", - "780" - ], - "machine_max_speed_z": [ - "10", - "5", - "13" - ], - "machine_min_extruding_rate": [ - "0", - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0", - "0" - ], - "machine_pause_gcode": "M600", - "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", - "machine_tool_change_time": "0", - "machine_unload_filament_time": "0", - "manual_filament_change": "0", - "max_layer_height": [ - "0.56" - ], - "min_layer_height": [ - "0.16" - ], - "nozzle_height": "4", - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "107", - "parking_pos_retraction": "0", - "pellet_modded_printer": "0", - "preferred_orientation": "0", - "printer_flush_multiplier": "1", - "printer_notes": "", - "printer_structure": "corexy", - "printhost_authorization_type": "key", - "printhost_ssl_ignore_revoke": "0", - "printing_by_object_gcode": "", - "purge_in_prime_tower": "0", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "348" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_on_top_layer": [ - "1" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_distances_when_cut": [ - "0" - ], - "retraction_length": [ - "0.4" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "1", - "single_extruder_multi_material": "1", - "support_air_filtration": "0", - "support_chamber_temp_control": "1", - "support_multi_bed_types": "1", - "template_custom_gcode": "", - "time_cost": "0", - "time_lapse_gcode": "", - "travel_slope": [ - "3" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Slope Lift" - ], - "z_offset": "0" -} +{ + "type": "machine", + "name": "Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_machine_common", + "from": "system", + "setting_id": "eD3ZKZ62sl6JMvUr", + "instantiation": "true", + "printer_technology": "FFF", + "printer_settings_id": "Anycubic Kobra S1 Max 0.8 nozzle", + "printer_model": "Anycubic Kobra S1 Max", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "default_print_profile": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "default_filament_profile": [ + "Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" + ], + "disable_m73": "0", + "gcode_flavor": "klipper", + "printable_area": [ + "0x0", + "350x0", + "350x350", + "0x350" + ], + "printable_height": "350", + "thumbnails": "230x110/PNG", + "thumbnails_format": "PNG", + "thumbnails_internal": "512x512/PNG/top", + "thumbnails_internal_switch": "1", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [], + "bed_mesh_max": "0,0", + "bed_mesh_min": "0,0", + "bed_mesh_probe_distance": "0,0", + "before_layer_change_gcode": "{if layer_num==0} ; PURGE LINE\nM204 P500\nSET_VELOCITY_LIMIT SQUARE_CORNER_VELOCITY=9\nG1 Z0.75 F900 ; for object exclusion\nG1 X135 Y352 F18000\nG1 Z.25 F900\nG1 E0.8 F2400\nG1 E0.6 F2400\nG1 F3000\nG1 X205 Y352 E3.72454\nG1 X205 Y352.45 E.0252\nG1 X135 Y352.45 E3.72454\nG1 X135 Y352.02 E.02305\nG1 Z0.5 F600\n{endif}\n", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "; FLUSH_START\n;@2026-04-03 S1M\n;;; M400 P0\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n{local flush_length_= flush_length}\n{local loops_=max(1,int((flush_length_+89.9) / 90))}\n{local extrude_length_=flush_length_ / loops_}\n{local time_flush_=int(extrude_length_ * loops_ * 300)}\n;;; M400 P{time_flush_} ; ={flush_length_}*300\n\n; retract and z hop\n; G1 E-0.4 F2400\n; G1 Z{toolchange_z+0.6} F600\n\n; MOVE_TO_IMPACT_POSITION\n;;; G1 X352 Y23 F18000\n;;; G1 X356.5 F6000\n;;; M400\n\n; cut filament\n;;; G1 Y13\n;;; G1 Y23 F600\n;;; M400 P76250\n;;; M400 P35780\n\nT[next_extruder] ; change extruder\n\n; MOVE_TO_PRE_SWEEP_POSITION_SAFE\n;;; G1 Y0 F12000\n;;; G1 X0 F12000\n\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; MOVE_TO_PRE_SWEEP_POSITION\n;;; G1 Y375 F12000\n;;; G1 X105 F12000\n;;; M400\n\n; MOVE_TO_SWEEP_POSITION\n;;; G1 X87 F6000\n;;; G1 Y375 F12000\n;;; M400\n\n; EXIT_THROW_POSITION\n;;; G1 Z{toolchange_z+2.1} F6000\n;;; G1 X105 F12000\n;;; G1 Y352 F12000\n;;; G1 Z{toolchange_z} F600\n;;; G1 E0.4 F2400\n;;; M400\n;_GP_INLINE_ESTIMATED_PRINTING_TIME_PLACEHOLDER\n; FLUSH_END\n", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "deretraction_speed": [ + "0" + ], + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "340", + "extruder_clearance_height_to_rod": "30", + "extruder_clearance_radius": "55", + "extruder_colour": [ + "FF4D4F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": "; AFTER_LAYER_CHANGE [layer_num] @ [layer_z]mm", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "M400\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM141 S0 ; turn off box temperature\nM106 P1 S0 ; turn off fan\nM106 P2 S0\nM106 P3 S0\nM84; disable motors \n; disable stepper motors", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "400", + "400", + "400" + ], + "machine_max_jerk_e": [ + "1", + "1", + "1" + ], + "machine_max_jerk_x": [ + "15", + "15", + "15" + ], + "machine_max_jerk_y": [ + "15", + "15", + "15" + ], + "machine_max_jerk_z": [ + "1", + "1", + "1" + ], + "machine_max_speed_e": [ + "80", + "40", + "104" + ], + "machine_max_speed_x": [ + "600", + "300", + "780" + ], + "machine_max_speed_y": [ + "600", + "300", + "780" + ], + "machine_max_speed_z": [ + "10", + "5", + "13" + ], + "machine_min_extruding_rate": [ + "0", + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0", + "0" + ], + "machine_pause_gcode": "M600", + "machine_start_gcode": "G9111 bedTemp=[first_layer_bed_temperature] extruderTemp=[first_layer_temperature[initial_tool]]\nM117\n; print_bed_min = {print_bed_min[0]},{print_bed_min[1]}\n; print_bed_max = {print_bed_max[0]},{print_bed_max[1]}\n; print_bed_size = {print_bed_size[0]},{print_bed_size[1]}\n; first_layer_print_min = {first_layer_print_min[0]},{first_layer_print_min[1]}\n; first_layer_print_max = {first_layer_print_max[0]},{first_layer_print_max[1]}\n; first_layer_print_size = {first_layer_print_size[0]},{first_layer_print_size[1]}\n; first_layer_fan_speed = 2, {int(additional_cooling_fan_speed[initial_tool] * 255 / 100)}", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.56" + ], + "min_layer_height": [ + "0.16" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "107", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printer_flush_multiplier": "1", + "printer_notes": "", + "printer_structure": "corexy", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "348" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "0" + ], + "retraction_length": [ + "0.4" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "1", + "support_air_filtration": "0", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Slope Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max.json index c47f2e7fa2..0f35afd33f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1 Max.json @@ -1,12 +1,12 @@ -{ - "type": "machine_model", - "machine_tech": "FFF", - "family": "Anycubic", - "name": "Anycubic Kobra S1 Max", - "model_id": "Anycubic Kobra S1 Max", - "nozzle_diameter": "0.4;0.25;0.6;0.8", - "bed_model": "Anycubic Kobra S1 Max_buildplate_model.stl", - "bed_texture": "Anycubic Kobra S1 Max_buildplate_texture.svg", - "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle" -} +{ + "type": "machine_model", + "machine_tech": "FFF", + "family": "Anycubic", + "name": "Anycubic Kobra S1 Max", + "model_id": "Anycubic Kobra S1 Max", + "nozzle_diameter": "0.4;0.25;0.6;0.8", + "bed_model": "Anycubic Kobra S1 Max_buildplate_model.stl", + "bed_texture": "Anycubic Kobra S1 Max_buildplate_texture.svg", + "hotend_model": "", + "default_materials": "Anycubic PLA @Anycubic Kobra S1 Max 0.4 nozzle;Anycubic PLA @Anycubic Kobra S1 Max 0.25 nozzle;Anycubic PLA @Anycubic Kobra S1 Max 0.6 nozzle;Anycubic PLA @Anycubic Kobra S1 Max 0.8 nozzle" +} diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra S1.json b/resources/profiles/Anycubic/machine/Anycubic Kobra S1.json index 07b3b61536..45a7404183 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra S1.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra S1.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Kobra S1_buildplate_model.stl", "bed_texture": "Anycubic Kobra S1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA SE @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle;Anycubic PETG @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra S1 0.4 nozzle;Anycubic ASA @Anycubic Kobra S1 0.4 nozzle;Anycubic ABS @Anycubic Kobra S1 0.4 nozzle;Anycubic ASA @Anycubic Kobra S1 0.4 nozzle;Anycubic PA @Anycubic Kobra S1 0.4 nozzle;Anycubic PC @Anycubic Kobra S1 0.4 nozzle;Anycubic PETG @Anycubic Kobra S1 0.4 nozzle;Anycubic PVA @Anycubic Kobra S1 0.4 nozzle;Anycubic TPU @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" + "default_materials": "Anycubic PLA @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra S1 0.4 nozzle;Anycubic PETG @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle;Anycubic ASA @Anycubic Kobra S1 0.4 nozzle;Anycubic ABS @Anycubic Kobra S1 0.4 nozzle;Anycubic ASA @Anycubic Kobra S1 0.4 nozzle;Anycubic PETG @Anycubic Kobra S1 0.4 nozzle;Anycubic TPU @Anycubic Kobra S1 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra S1 0.4 nozzle" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra X 0.4 nozzle.json index 5dc35e5584..8e2952b123 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra X 0.4 nozzle.json @@ -14,7 +14,19 @@ ], "default_print_profile": "0.20mm Standard @Anycubic Kobra X 0.4 nozzle;0.08mm Standard @Anycubic Kobra X 0.4 nozzle", "default_filament_profile": [ - "Anycubic PLA @Anycubic Kobra X 0.4 nozzle;Anycubic ABS @Anycubic Kobra X 0.4 nozzle;Anycubic ASA @Anycubic Kobra X 0.4 nozzle;Anycubic PETG @Anycubic Kobra X 0.4 nozzle;Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle;Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle;Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle;Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle;Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle;Anycubic PVA @Anycubic Kobra X 0.4 nozzle;Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle;Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle;Anycubic Generetic PETG @Anycubic Kobra X 0.4 nozzle" + "Anycubic PLA @Anycubic Kobra X 0.4 nozzle", + "Anycubic ABS @Anycubic Kobra X 0.4 nozzle", + "Anycubic ASA @Anycubic Kobra X 0.4 nozzle", + "Anycubic PETG @Anycubic Kobra X 0.4 nozzle", + "Anycubic PLA+ @Anycubic Kobra X 0.4 nozzle", + "Anycubic PLA Glow @Anycubic Kobra X 0.4 nozzle", + "Anycubic PLA High Speed @Anycubic Kobra X 0.4 nozzle", + "Anycubic PLA Matte @Anycubic Kobra X 0.4 nozzle", + "Anycubic PLA Silk @Anycubic Kobra X 0.4 nozzle", + "Anycubic PVA @Anycubic Kobra X 0.4 nozzle", + "Anycubic TPU 95A @Anycubic Kobra X 0.4 nozzle", + "Anycubic TPU for ACE @Anycubic Kobra X 0.4 nozzle", + "Generic PETG @Anycubic Kobra X 0.4 nozzle" ], "disable_m73": "0", "gcode_flavor": "klipper", @@ -188,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "1", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra.json b/resources/profiles/Anycubic/machine/Anycubic Kobra.json index bbc1f460c3..6309b569e0 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_kobra_buildplate_model.stl", "bed_texture": "anycubic_kobra_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Predator.json b/resources/profiles/Anycubic/machine/Anycubic Predator.json index 4b6076ee89..b4490d79f9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Predator.json +++ b/resources/profiles/Anycubic/machine/Anycubic Predator.json @@ -8,5 +8,5 @@ "bed_model": "Anycubic Predator_buildplate_model.stl", "bed_texture": "Anycubic Predator_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic;Generic PLA @System" } diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json index 5bcd1fd942..03da852642 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG0 Z0.2 F1800 ; move nozzle to print position\nG92 E0 ; specify current extruder position as zero\nG1 Y10 X180 E50 F1200 ; extrude a line in front of the printer\nG92 E0 ; specify current extruder position as zero\nG0 Z20 F6000 ; move head up\nG1 E-7 F2400 ; retract\nG04 S2 ; wait 2s\nG0 X0 F6000 ; wipe from oozed filament\nG1 E-1 F2400 ; undo some of the retraction to avoid oozing\nG1 F6000 ; set travel speed to move to start printing point\nM117", "machine_end_gcode": "G4 ; wait\nG92 E0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} ; move print head up\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y200 F3000 ; home X axis\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper.json b/resources/profiles/Anycubic/machine/Anycubic Vyper.json index 862af26c4a..75a16dbca5 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_vyper_buildplate_model.stl", "bed_texture": "anycubic_vyper_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json index 9d35099001..d3b14b475c 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Anycubic Generic PLA" + "Generic PLA @Anycubic" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json index 76192d1e21..a98cd9ac46 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S.json @@ -8,5 +8,5 @@ "bed_model": "anycubic_i3megas_buildplate_model.stl", "bed_texture": "anycubic_i3megas_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Anycubic Generic ABS;Anycubic Generic PLA;Anycubic Generic PLA-CF;Anycubic Generic PETG;Anycubic Generic TPU;Anycubic Generic ASA;Anycubic Generic PC;Anycubic Generic PVA;Anycubic Generic PA;Anycubic Generic PA-CF" + "default_materials": "Generic ABS @Anycubic;Generic PLA @Anycubic;Generic PLA-CF @Anycubic;Generic PETG @Anycubic;Generic TPU @Anycubic;Generic ASA @Anycubic;Generic PC @Anycubic;Generic PVA @Anycubic;Generic PA @Anycubic;Generic PA-CF @Anycubic" } diff --git a/resources/profiles/Anycubic/machine/fdm_machine_common.json b/resources/profiles/Anycubic/machine/fdm_machine_common.json index c4ff46a6bf..ac44b6a964 100644 --- a/resources/profiles/Anycubic/machine/fdm_machine_common.json +++ b/resources/profiles/Anycubic/machine/fdm_machine_common.json @@ -126,7 +126,6 @@ "deretraction_speed": [ "30" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", diff --git a/resources/profiles/Anycubic/process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json index 6ba2afe3b3..80fd42d391 100644 --- a/resources/profiles/Anycubic/process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/process/0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "bZRQrVuJgsKO0PYK", - "instantiation": "true", - "print_settings_id": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "layer_height": "0.06", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.25 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "50", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.3", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.15", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.3", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "2000", - "internal_solid_infill_line_width": "0.27", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.27", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.27", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.3", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.06", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.27", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.06", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.27", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "4", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "bZRQrVuJgsKO0PYK", + "instantiation": "true", + "print_settings_id": "0.06mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "layer_height": "0.06", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.25 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.3", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.27", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.27", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.27", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.3", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.06", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.27", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.06", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.27", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "4", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json index 54a0df5369..5670e7a135 100644 --- a/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm HighDetail @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "7", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index a4a88b3149..6c8575201a 100644 --- a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json index 5626bb449c..7b045f6b74 100644 --- a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "bfq9DtBsHIrbsZfD", - "instantiation": "true", - "print_settings_id": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "layer_height": "0.08", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.25 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "50", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.3", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.15", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.3", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "2000", - "internal_solid_infill_line_width": "0.27", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.27", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.27", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.3", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.08", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.27", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.08", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.27", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "4", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "bfq9DtBsHIrbsZfD", + "instantiation": "true", + "print_settings_id": "0.08mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "layer_height": "0.08", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.25 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.3", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.27", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.27", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.27", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.3", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.08", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.27", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.08", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.27", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "4", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index e49ba929c0..386505ff8e 100644 --- a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "E2tI71ShF3oOgMME", - "instantiation": "true", - "print_settings_id": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.08", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "7", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "80", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "120", - "ironing_angle": "-1", - "ironing_flow": "8%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "60", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.08", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "15", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.08", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "9", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "E2tI71ShF3oOgMME", + "instantiation": "true", + "print_settings_id": "0.08mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.08", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "7", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "80", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "120", + "ironing_angle": "-1", + "ironing_flow": "8%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "60", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.08", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "15", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.08", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "9", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json index 2b02de44b3..ec1137ad11 100644 --- a/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.08mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json b/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json index 1e8c4a2c90..b508189668 100644 --- a/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json +++ b/resources/profiles/Anycubic/process/0.10mm Detail @Anycubic Kobra 3 0.2 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "5", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json index 14fe54d530..58a70cf403 100644 --- a/resources/profiles/Anycubic/process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/process/0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "OmytVExIkdNyyyKT", - "instantiation": "true", - "print_settings_id": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "layer_height": "0.1", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.25 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "50", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.3", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.15", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.3", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "2000", - "internal_solid_infill_line_width": "0.27", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.27", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.27", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.3", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.1", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.27", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.1", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.27", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "4", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "OmytVExIkdNyyyKT", + "instantiation": "true", + "print_settings_id": "0.10mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "layer_height": "0.1", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.25 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.3", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.27", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.27", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.27", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.3", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.1", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.27", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.1", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.27", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "4", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json index 6fd6f1ace7..95a383016b 100644 --- a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json index a33932e016..d6f37a93c0 100644 --- a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "5", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json index c8d7c6f284..39acfedd36 100644 --- a/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Detail @Anycubic Kobra Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json index 0a67e8371a..1ffa05956a 100644 --- a/resources/profiles/Anycubic/process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm High Quality @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index 38fd80bfae..7bd3131f87 100644 --- a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json index b20feba94a..f01d005bf4 100644 --- a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "z8TDucaoilYiK8V1", - "instantiation": "true", - "print_settings_id": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "layer_height": "0.12", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.25 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "50", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.3", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.15", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.3", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "2000", - "internal_solid_infill_line_width": "0.27", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.27", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.27", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.3", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.12", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.27", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.12", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.27", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "4", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "z8TDucaoilYiK8V1", + "instantiation": "true", + "print_settings_id": "0.12mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "layer_height": "0.12", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.25 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.3", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.27", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.27", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.27", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.3", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.12", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.27", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.12", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.27", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "4", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index 99957845b8..33fcd005e4 100644 --- a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "D1bJFkXoVSZ2QLSA", - "instantiation": "true", - "print_settings_id": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.12", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "180", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "180", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "60", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "180", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.12", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "20", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.12", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "D1bJFkXoVSZ2QLSA", + "instantiation": "true", + "print_settings_id": "0.12mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.12", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "180", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "180", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "60", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "180", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.12", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "20", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.12", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json index 29dd4e03f9..73acca4322 100644 --- a/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.12mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json b/resources/profiles/Anycubic/process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json index b31c2c5af4..15b3b89ad7 100644 --- a/resources/profiles/Anycubic/process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json +++ b/resources/profiles/Anycubic/process/0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "Hl64YdObrtpqJM2s", - "instantiation": "true", - "print_settings_id": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", - "layer_height": "0.14", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.25 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "5", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "50", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.3", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.15", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.3", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "2000", - "internal_solid_infill_line_width": "0.27", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.27", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.27", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.3", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.14", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.27", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.14", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "7", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.27", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "120", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "4", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "Hl64YdObrtpqJM2s", + "instantiation": "true", + "print_settings_id": "0.14mm Standard @Anycubic Kobra S1 Max 0.25 nozzle", + "layer_height": "0.14", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.25 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "50", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.3", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.15", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.3", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "2000", + "internal_solid_infill_line_width": "0.27", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.27", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.27", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.3", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.14", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.27", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.14", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "7", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.27", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "120", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "4", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json index 35c1d4b30a..be2f8b3e9a 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic 4MaxPro2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "2Qq27PfeoCqMAZKw", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json index ff48fca663..0facf331d1 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Chiron.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fcqsKbEsGbAs6rUU", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra.json index e74fae9dad..ae5f046053 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "E1VHkuwE0sHTzmb2", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json index 3618dac281..84b0eb87fe 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Kobra2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7H2BzvHgy0o9nc1g", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json index a14a4961dd..8b6af27046 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ukTEpT2XRtJyGKUp", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json index e974680931..27c3ca627f 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic KobraPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "3Gu40CNOXnzDsZfD", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json index 0da034eeb7..0cfc8e7463 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic Vyper.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ln2Zw2E5e3Azq3nc", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json index b4647a7c39..15a208302e 100644 --- a/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.15mm Optimal @Anycubic i3MegaS.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "zKGotAmWJTB14cT8", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json index 04c0b4d8e5..e8180a0034 100644 --- a/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "Hiz2L1qh67izjl1e", - "instantiation": "true", - "print_settings_id": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.16", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "4000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "250", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "0", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "200", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "2000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "60", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "gyroid", - "sparse_infill_speed": "200", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.16", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "25", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.16", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "6", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "Hiz2L1qh67izjl1e", + "instantiation": "true", + "print_settings_id": "0.16mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.16", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "4000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "250", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "0", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "200", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "2000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "60", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "200", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.16", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "25", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.16", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "6", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json index 055dc89ed1..d195a61226 100644 --- a/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm High Quality @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json index 13f0e7e127..283d8c72b4 100644 --- a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json index 469c3c4ba3..8d8e8222e5 100644 --- a/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Optimal @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "4", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json index aab5a3f23c..e4d3bc3a19 100644 --- a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "4", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index 09ff8e393c..02f7fccb93 100644 --- a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json index 4b83264a1d..596f35c405 100644 --- a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "4", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index edf43e2875..eeee68080f 100644 --- a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "Yl10d32pjposFVu9", - "instantiation": "true", - "print_settings_id": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.16", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "4", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "250", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "300", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "250", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "30", - "overhang_3_4_speed": "10", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "350", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.16", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "25", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.16", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "6", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "200", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "Yl10d32pjposFVu9", + "instantiation": "true", + "print_settings_id": "0.16mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.16", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "250", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "250", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "30", + "overhang_3_4_speed": "10", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "350", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.16", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "25", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.16", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "6", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json index 664f118e3d..0b682648d7 100644 --- a/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.16mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json index ac80f014ab..f6c96e3155 100644 --- a/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json index 4b2fd1df30..bcd1decabe 100644 --- a/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "Y55zuAyFSNMHZlCt", - "instantiation": "true", - "print_settings_id": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "layer_height": "0.18", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "5000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.62", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.3", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.62", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.62", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.62", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.62", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.18", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.62", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.18", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.62", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "5000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "Y55zuAyFSNMHZlCt", + "instantiation": "true", + "print_settings_id": "0.18mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "layer_height": "0.18", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "5000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.62", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.62", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.62", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.62", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.18", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.62", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.18", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.62", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "5000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json index f276232436..2f639acd63 100644 --- a/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "M7CigEUqzwefI8ed", - "instantiation": "true", - "print_settings_id": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.2", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "250", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "250", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "250", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.2", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "5", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "200", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0.05" -} +{ + "type": "process", + "name": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "M7CigEUqzwefI8ed", + "instantiation": "true", + "print_settings_id": "0.20mm High Quality @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.2", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "250", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "250", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "250", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.2", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0.05" +} diff --git a/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json index 75fb6457ea..425e43b467 100644 --- a/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm High Quality @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json index f0e718b0ff..d446d567b7 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic 4MaxPro2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "4fNa2Y66ms9j0vdh", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json index b92ce992ca..6f1b6475cf 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Chiron.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "4tYPv79lny7OAesb", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json index 0e65291255..4180755994 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json index dc555a5838..ca551062d5 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json index 863a0a0af9..747646cb59 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Plus 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json index 96fa4642c9..7476d37ea1 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json index 5573902ecf..8e94d72687 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index 58b0b90e5e..827ef63836 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json index b1af0fb13d..48307606ae 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json index 0626025cc4..8c1a97ff5e 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json index 6a02522e0e..f345acb65d 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 0.4 nozzle.json @@ -127,8 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "1", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index 4a00460633..2fef8f1bb5 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "h9txQrwg5GiCgORR", - "instantiation": "true", - "print_settings_id": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.2", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "250", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "300", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "250", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "300", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.2", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "5", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "200", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0.05" -} +{ + "type": "process", + "name": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "h9txQrwg5GiCgORR", + "instantiation": "true", + "print_settings_id": "0.20mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.2", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "250", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "300", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "250", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "300", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.2", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0.05" +} diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json index cbe349b771..3afbbb25f8 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra.json index c9d3e750a3..393233a992 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "PCsMHJ36HdywhVBA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json index b68731cb78..c0a529e50c 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Kobra2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dd3a8DNtunKVpWWY", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json index 77e3b32b80..b1a00dda27 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pqXeGE9OxboQGBMi", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json index 326db3295d..365a863cb5 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic KobraPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ZnZf41QpEAXorp2U", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json index 341ece7bef..e6e5f5ab8a 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic Vyper.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jvz2LYWpcGJVgzZn", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json index d0eb582143..d6ffbab4a9 100644 --- a/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.20mm Standard @Anycubic i3MegaS.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lI7dHvKmsEmoSw1k", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json index 2ac098d8a7..48a7d490b4 100644 --- a/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Draft @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index 587aaecfe8..63324007cc 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json index 548f9050fc..fdebb701a7 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json index aef03dc9b2..a367b48df4 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index 28aeb2a4a6..338d36d1ac 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "NDu3QAQvTHNboRRR", - "instantiation": "true", - "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.24", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "230", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "230", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "230", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "35", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "230", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "35", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.2", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "4", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "200", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "NDu3QAQvTHNboRRR", + "instantiation": "true", + "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.24", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "230", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "230", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "230", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "230", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "35", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.2", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json index de6d9f4c09..4363919787 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "ehgM1Fri1VLP8d2m", - "instantiation": "true", - "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "layer_height": "0.24", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "5000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.62", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.3", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.62", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.62", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.62", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.62", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.62", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.62", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "5000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "ehgM1Fri1VLP8d2m", + "instantiation": "true", + "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "layer_height": "0.24", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "5000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.62", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.62", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.62", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.62", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.62", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.62", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "5000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json index 8d42e7ab86..48b693bb69 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "9oyIahCs4Md5T140", - "instantiation": "true", - "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "layer_height": "0.24", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.15", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "100", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "50", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.82", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.4", - "initial_layer_speed": "30", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.82", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.82", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.82", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "0", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.82", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "5", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "5", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "50", - "support_interface_top_layers": "2", - "support_line_width": "0.82", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "9oyIahCs4Md5T140", + "instantiation": "true", + "print_settings_id": "0.24mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "layer_height": "0.24", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.15", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "100", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.82", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.4", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.82", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.82", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "0", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.82", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "5", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.82", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_top_layers": "2", + "support_line_width": "0.82", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json index e4ca7f3027..33f4c80798 100644 --- a/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.24mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json index dcb8ee9848..f314b9f3b4 100644 --- a/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Draft @Anycubic Kobra 2 Pro 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json index a256d2e635..893f1af1e3 100644 --- a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 2 Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json index 5deb25af55..255b805b88 100644 --- a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra 3 Max 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -136,8 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -198,7 +195,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json index 7b19ca18ba..108a9202ab 100644 --- a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra Neo 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0.6", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json index 213c1bd438..e4839e61bb 100644 --- a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle.json @@ -1,320 +1,317 @@ -{ - "type": "process", - "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "P21QEQqy7DYRu61b", - "instantiation": "true", - "print_settings_id": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", - "layer_height": "0.28", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.4 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "200", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "100", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.5", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.45", - "inner_wall_speed": "200", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "50%", - "internal_solid_infill_line_width": "0.42", - "internal_solid_infill_pattern": "zig-zag", - "internal_solid_infill_speed": "200", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.42", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.42", - "outer_wall_speed": "200", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "35", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "1", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.45", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "200", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "0", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.42", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "150", - "support_style": "default", - "support_threshold_angle": "40", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.2", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "1", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "4", - "top_shell_thickness": "1", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.42", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "200", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_bridging": "10", - "wipe_tower_cone_angle": "15", - "wipe_tower_extra_flow": "100%", - "wipe_tower_extra_spacing": "120%", - "wipe_tower_filament": "0", - "wipe_tower_max_purge_speed": "90", - "wipe_tower_no_sparse_layers": "0", - "wipe_tower_rotation_angle": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "P21QEQqy7DYRu61b", + "instantiation": "true", + "print_settings_id": "0.28mm Standard @Anycubic Kobra S1 Max 0.4 nozzle", + "layer_height": "0.28", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.4 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "200", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.5", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.45", + "inner_wall_speed": "200", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "50%", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_pattern": "zig-zag", + "internal_solid_infill_speed": "200", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.42", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "200", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "35", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "1", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.45", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "200", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "0", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.42", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "150", + "support_style": "default", + "support_threshold_angle": "40", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.2", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "1", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "4", + "top_shell_thickness": "1", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.42", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_bridging": "10", + "wipe_tower_cone_angle": "15", + "wipe_tower_extra_flow": "100%", + "wipe_tower_extra_spacing": "120%", + "wipe_tower_filament": "0", + "wipe_tower_max_purge_speed": "90", + "wipe_tower_no_sparse_layers": "0", + "wipe_tower_rotation_angle": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json index debbe6e0cf..d22e3ef4f4 100644 --- a/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm Standard @Anycubic Kobra X 0.4 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json index fa16040b96..46dd14c923 100644 --- a/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/process/0.28mm SuperDraft @Anycubic Kobra 3 0.4 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "0%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json index 974306bcd2..0b3e4b84c8 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic 4MaxPro2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "SnMGK6A5jGzj9KAm", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json index 0fd1a8efeb..d4d629ba75 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Chiron.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "B0Ar6gbysEbWId84", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra.json index 3ec6a42418..505c1f10b6 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jzWHjr9rKzgX2mbz", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json index 18456d7b99..9193fc6aaa 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Kobra2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "IWsii200XlEuhz3n", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json index bb3ddf9389..0535084c51 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "IB9gk84SYRkMza9u", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json index 4190064c90..33f3822993 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic KobraPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lSoaR17JUQSesbgG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json index e72286dd06..a21298d85c 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic Vyper.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pXawQlRvbdiJJANG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json index 70bb8ad91e..d1a4fc798a 100644 --- a/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json +++ b/resources/profiles/Anycubic/process/0.30mm Draft @Anycubic i3MegaS.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7PNQ3S9tucM5wFyj", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json index 03ed5252c7..2b4da65c06 100644 --- a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 0.6 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json index 4820247cd2..c76f636af6 100644 --- a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json index 1c8042a175..02a1b0466f 100644 --- a/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "O8vKonzzc8WA5pYY", - "instantiation": "true", - "print_settings_id": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "layer_height": "0.3", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "5000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.62", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.3", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.62", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.62", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.62", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.62", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "4", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.62", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "0", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.62", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "O8vKonzzc8WA5pYY", + "instantiation": "true", + "print_settings_id": "0.30mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "layer_height": "0.3", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "5000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.62", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.62", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.62", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.62", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.62", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "0", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.62", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json index 745f784736..0faa168582 100644 --- a/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json index 10b86fe268..34542cfb19 100644 --- a/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "0bCUIOLe0kqiwAIZ", - "instantiation": "true", - "print_settings_id": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "layer_height": "0.32", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.15", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "100", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "50", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.82", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.4", - "initial_layer_speed": "30", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.82", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.82", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.82", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.82", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "5", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "5", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "50", - "support_interface_top_layers": "2", - "support_line_width": "0.82", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "0bCUIOLe0kqiwAIZ", + "instantiation": "true", + "print_settings_id": "0.32mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "layer_height": "0.32", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.15", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "100", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.82", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.4", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.82", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.82", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.82", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "5", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.82", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_top_layers": "2", + "support_line_width": "0.82", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json index 93ff4febe6..62bce8d582 100644 --- a/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json index 66eb279711..81d042d0e8 100644 --- a/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "ii1Ycsf3xI93uZy9", - "instantiation": "true", - "print_settings_id": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "layer_height": "0.36", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "5000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.62", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.3", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.62", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.62", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.62", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.62", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.62", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.62", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "5000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "ii1Ycsf3xI93uZy9", + "instantiation": "true", + "print_settings_id": "0.36mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "layer_height": "0.36", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "5000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.62", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.62", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.62", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.62", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.62", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.62", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "5000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json index 1130f63061..b29ffd16ef 100644 --- a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 0.8 nozzle.json @@ -13,7 +13,6 @@ ], "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "1", "alternate_extra_wall": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", @@ -128,7 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json index fadd6675d3..0002ce4d9b 100644 --- a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json index 1085832db4..0c68a35165 100644 --- a/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "O5xBpGApHGyVlyLw", - "instantiation": "true", - "print_settings_id": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "layer_height": "0.4", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.15", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "0", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "0", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "100", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "50", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.82", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.4", - "initial_layer_speed": "30", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.82", - "inner_wall_speed": "120", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.82", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.82", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.82", - "outer_wall_speed": "60", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "5", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "5", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "40", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "50", - "support_interface_top_layers": "2", - "support_line_width": "0.82", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "O5xBpGApHGyVlyLw", + "instantiation": "true", + "print_settings_id": "0.40mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "layer_height": "0.4", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.15", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "0", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "0", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "100", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.82", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.4", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.82", + "inner_wall_speed": "120", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.82", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.82", + "outer_wall_speed": "60", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "5", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.82", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_top_layers": "2", + "support_line_width": "0.82", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json index 12b7ec1ebf..f890e66ae7 100644 --- a/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra 3 Max 0.6 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "80", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json b/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json index f11acb406f..7233849603 100644 --- a/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json +++ b/resources/profiles/Anycubic/process/0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "rPalfYXk0fCx0yjv", - "instantiation": "true", - "print_settings_id": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", - "layer_height": "0.42", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.6 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.1", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "5000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "50", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "60", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.62", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.3", - "initial_layer_speed": "40", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.62", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.62", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.62", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "1", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.62", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "10", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.62", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "80", - "support_interface_top_layers": "2", - "support_line_width": "0.62", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.62", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "5000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "rPalfYXk0fCx0yjv", + "instantiation": "true", + "print_settings_id": "0.42mm Standard @Anycubic Kobra S1 Max 0.6 nozzle", + "layer_height": "0.42", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.6 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.1", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "5000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "50", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "60", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.62", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.3", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.62", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.62", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.62", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "1", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.62", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "10", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.62", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_interface_top_layers": "2", + "support_line_width": "0.62", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.62", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "5000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json index 98b75e6a31..4ae39e9b01 100644 --- a/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra 3 Max 0.8 nozzle.json @@ -146,8 +146,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", @@ -209,7 +207,6 @@ ], "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "40", "smooth_speed_discontinuity_area": "1", "solid_infill_direction": "45", "internal_solid_filament_id": "0", diff --git a/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json index 88705184ec..34cd6518ab 100644 --- a/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "y0r7Q7PMNRH8ujFF", - "instantiation": "true", - "print_settings_id": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "layer_height": "0.48", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.15", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "100", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "50", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.82", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.4", - "initial_layer_speed": "30", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.82", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.82", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.82", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "0", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.82", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "5", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "5", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "50", - "support_interface_top_layers": "2", - "support_line_width": "0.82", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "y0r7Q7PMNRH8ujFF", + "instantiation": "true", + "print_settings_id": "0.48mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "layer_height": "0.48", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.15", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "100", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.82", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.4", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.82", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.82", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "0", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.82", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "5", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.82", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_top_layers": "2", + "support_line_width": "0.82", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json b/resources/profiles/Anycubic/process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json index 84ab9fa483..bdd7741e0b 100644 --- a/resources/profiles/Anycubic/process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json +++ b/resources/profiles/Anycubic/process/0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle.json @@ -1,323 +1,320 @@ -{ - "type": "process", - "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "inherits": "fdm_process_common", - "from": "system", - "setting_id": "rOL0gJh6Y7pDsBnk", - "instantiation": "true", - "print_settings_id": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", - "layer_height": "0.56", - "compatible_printers": [ - "Anycubic Kobra S1 Max 0.8 nozzle" - ], - "accel_to_decel_enable": "1", - "accel_to_decel_factor": "50%", - "alternate_extra_wall": "0", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "bottom_solid_infill_flow_ratio": "1", - "bottom_surface_pattern": "monotonic", - "bridge_acceleration": "50%", - "bridge_angle": "0", - "bridge_density": "100%", - "bridge_flow": "1", - "bridge_no_support": "0", - "bridge_speed": "30", - "brim_ears_detection_length": "1", - "brim_ears_max_angle": "125", - "brim_object_gap": "0.15", - "brim_type": "auto_brim", - "brim_width": "5", - "compatible_printers_condition": "", - "counterbore_hole_bridging": "none", - "default_acceleration": "10000", - "default_jerk": "9", - "detect_narrow_internal_solid_infill": "1", - "detect_overhang_wall": "1", - "detect_thin_wall": "1", - "dont_filter_internal_bridges": "disabled", - "draft_shield": "disabled", - "elefant_foot_compensation": "0.1", - "elefant_foot_compensation_layers": "1", - "enable_arc_fitting": "0", - "enable_extra_bridge_layer": "disabled", - "enable_overhang_speed": "1", - "enable_prime_tower": "1", - "enable_support": "0", - "enforce_support_layers": "0", - "ensure_vertical_shell_thickness": "ensure_all", - "exclude_object": "1", - "extra_perimeters_on_overhangs": "1", - "extrusion_rate_smoothing_external_perimeter_only": "0", - "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", - "filter_out_gap_fill": "0", - "flush_into_infill": "0", - "flush_into_objects": "0", - "flush_into_support": "1", - "fuzzy_skin": "none", - "fuzzy_skin_first_layer": "0", - "fuzzy_skin_noise_type": "classic", - "fuzzy_skin_octaves": "4", - "fuzzy_skin_persistence": "0.5", - "fuzzy_skin_point_distance": "0.8", - "fuzzy_skin_scale": "1", - "fuzzy_skin_thickness": "0.3", - "gap_fill_target": "topbottom", - "gap_infill_speed": "100", - "gcode_add_line_number": "0", - "gcode_comments": "0", - "gcode_label_objects": "1", - "hole_to_polyhole": "0", - "hole_to_polyhole_threshold": "0.01", - "hole_to_polyhole_twisted": "1", - "independent_support_layer_height": "1", - "infill_anchor": "400%", - "infill_anchor_max": "20", - "infill_combination": "0", - "infill_combination_max_layer_height": "100%", - "infill_direction": "45", - "infill_jerk": "9", - "infill_wall_overlap": "15%", - "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "50", - "initial_layer_jerk": "9", - "initial_layer_line_width": "0.82", - "initial_layer_min_bead_width": "85%", - "initial_layer_print_height": "0.4", - "initial_layer_speed": "30", - "initial_layer_travel_speed": "100%", - "inner_wall_acceleration": "5000", - "inner_wall_jerk": "9", - "inner_wall_line_width": "0.82", - "inner_wall_speed": "150", - "interface_shells": "0", - "interlocking_beam": "0", - "interlocking_beam_layer_count": "2", - "interlocking_beam_width": "0.8", - "interlocking_boundary_avoidance": "2", - "interlocking_depth": "2", - "interlocking_orientation": "22.5", - "internal_bridge_angle": "0", - "internal_bridge_density": "100%", - "internal_bridge_flow": "1", - "internal_bridge_speed": "150%", - "internal_solid_infill_acceleration": "5000", - "internal_solid_infill_line_width": "0.82", - "internal_solid_infill_pattern": "monotonic", - "internal_solid_infill_speed": "150", - "ironing_angle": "-1", - "ironing_flow": "10%", - "ironing_inset": "0", - "ironing_pattern": "zig-zag", - "ironing_spacing": "0.15", - "ironing_speed": "30", - "ironing_type": "no ironing", - "is_infill_first": "0", - "lattice_angle_1": "-45", - "lattice_angle_2": "45", - "line_width": "0.82", - "make_overhang_printable": "0", - "make_overhang_printable_angle": "55", - "make_overhang_printable_hole_size": "0", - "max_bridge_length": "10", - "max_travel_detour_distance": "0", - "max_volumetric_extrusion_rate_slope": "0", - "max_volumetric_extrusion_rate_slope_segment_length": "3", - "min_bead_width": "85%", - "min_feature_size": "25%", - "min_length_factor": "0.5", - "min_skirt_length": "0", - "min_width_top_surface": "300%", - "minimum_sparse_infill_area": "15", - "mmu_segmented_region_interlocking_depth": "0", - "mmu_segmented_region_max_width": "0", - "notes": "", - "only_one_wall_first_layer": "0", - "only_one_wall_top": "0", - "ooze_prevention": "0", - "outer_wall_acceleration": "5000", - "outer_wall_jerk": "9", - "outer_wall_line_width": "0.82", - "outer_wall_speed": "120", - "overhang_1_4_speed": "0", - "overhang_2_4_speed": "40", - "overhang_3_4_speed": "15", - "overhang_4_4_speed": "5", - "overhang_reverse": "0", - "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "5", - "post_process": [], - "precise_outer_wall": "0", - "precise_z_height": "0", - "preheat_steps": "1", - "preheat_time": "0", - "prime_tower_brim_width": "5", - "prime_tower_extra_rib_length": "0", - "prime_tower_fillet_wall": "1", - "prime_tower_flat_ironing": "0", - "prime_tower_infill_gap": "150%", - "prime_tower_max_speed": "90", - "prime_tower_rib_wall": "1", - "prime_tower_rib_width": "8", - "prime_tower_skip_points": "1", - "prime_tower_width": "30", - "prime_volume": "30", - "print_flow_ratio": "1", - "print_order": "default", - "print_sequence": "by layer", - "raft_contact_distance": "0.1", - "raft_expansion": "1.5", - "raft_first_layer_density": "90%", - "raft_first_layer_expansion": "5", - "raft_layers": "0", - "reduce_crossing_wall": "0", - "reduce_infill_retraction": "1", - "resolution": "0.012", - "role_based_wipe_speed": "1", - "rotate_solid_infill_direction": "1", - "scarf_angle_threshold": "155", - "scarf_joint_flow_ratio": "1", - "scarf_joint_speed": "30", - "scarf_overhang_threshold": "40%", - "seam_gap": "10%", - "seam_position": "aligned", - "seam_slope_conditional": "1", - "seam_slope_entire_loop": "0", - "seam_slope_inner_walls": "1", - "seam_slope_min_length": "10", - "seam_slope_start_height": "10%", - "seam_slope_steps": "10", - "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", - "single_loop_draft_shield": "0", - "skirt_distance": "2", - "skirt_height": "1", - "skirt_loops": "0", - "skirt_speed": "50", - "skirt_start_angle": "-135", - "skirt_type": "combined", - "slice_closing_radius": "0.049", - "slicing_mode": "regular", - "slow_down_layers": "0", - "slowdown_for_curled_perimeters": "0", - "small_area_infill_flow_compensation": "0", - "small_area_infill_flow_compensation_model": [ - "0,0", - "\n0.2,0.4444", - "\n0.4,0.6145", - "\n0.6,0.7059", - "\n0.8,0.7619", - "\n1.5,0.8571", - "\n2,0.8889", - "\n3,0.9231", - "\n5,0.9520", - "\n10,1" - ], - "small_perimeter_speed": "50%", - "small_perimeter_threshold": "0", - "smooth_coefficient": "80", - "smooth_speed_discontinuity_area": "1", - "solid_infill_direction": "45", - "solid_infill_filament": "1", - "sparse_infill_acceleration": "100%", - "sparse_infill_density": "15%", - "sparse_infill_filament": "1", - "sparse_infill_line_width": "0.82", - "sparse_infill_pattern": "grid", - "sparse_infill_speed": "100", - "spiral_finishing_flow_ratio": "0", - "spiral_mode": "0", - "spiral_mode_max_xy_smoothing": "200%", - "spiral_mode_smooth": "0", - "spiral_starting_flow_ratio": "0", - "staggered_inner_seams": "0", - "standby_temperature_delta": "-5", - "support_angle": "0", - "support_base_pattern": "default", - "support_base_pattern_spacing": "2.5", - "support_bottom_interface_spacing": "0.5", - "support_bottom_z_distance": "0.2", - "support_critical_regions_only": "0", - "support_expansion": "0", - "support_filament": "0", - "support_interface_bottom_layers": "2", - "support_interface_filament": "0", - "support_interface_loop_pattern": "0", - "support_interface_not_for_body": "1", - "support_interface_pattern": "auto", - "support_interface_spacing": "0.5", - "support_interface_speed": "50", - "support_interface_top_layers": "2", - "support_line_width": "0.82", - "support_object_first_layer_gap": "0.2", - "support_object_xy_distance": "0.35", - "support_on_build_plate_only": "1", - "support_remove_small_overhang": "1", - "support_speed": "100", - "support_style": "default", - "support_threshold_angle": "30", - "support_threshold_overlap": "50%", - "support_top_z_distance": "0.25", - "support_type": "tree(auto)", - "thick_bridges": "0", - "thick_internal_bridges": "0", - "timelapse_type": "0", - "top_bottom_infill_wall_overlap": "15%", - "top_shell_layers": "3", - "top_shell_thickness": "0.8", - "top_solid_infill_flow_ratio": "1", - "top_surface_acceleration": "2000", - "top_surface_jerk": "9", - "top_surface_line_width": "0.82", - "top_surface_pattern": "monotonicline", - "top_surface_speed": "150", - "travel_acceleration": "10000", - "travel_jerk": "9", - "travel_speed": "300", - "travel_speed_z": "0", - "tree_support_adaptive_layer_height": "1", - "tree_support_angle_slow": "25", - "tree_support_auto_brim": "1", - "tree_support_branch_angle": "45", - "tree_support_branch_angle_organic": "40", - "tree_support_branch_diameter": "2", - "tree_support_branch_diameter_angle": "5", - "tree_support_branch_diameter_organic": "2", - "tree_support_branch_distance": "5", - "tree_support_branch_distance_organic": "1", - "tree_support_brim_width": "3", - "tree_support_tip_diameter": "0.8", - "tree_support_top_rate": "30%", - "tree_support_wall_count": "0", - "wall_direction": "auto", - "wall_distribution_count": "1", - "wall_filament": "1", - "wall_generator": "classic", - "wall_loops": "2", - "wall_sequence": "inner wall/outer wall", - "wall_transition_angle": "10", - "wall_transition_filter_deviation": "25%", - "wall_transition_length": "100%", - "wipe_before_external_loop": "0", - "wipe_on_loops": "0", - "wipe_speed": "80%", - "wipe_tower_extra_flow": "100%", - "wipe_tower_filament": "0", - "wipe_tower_no_sparse_layers": "0", - "wiping_volumes_extruders": [ - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70", - "70" - ], - "xy_contour_compensation": "0", - "xy_hole_compensation": "0" -} +{ + "type": "process", + "name": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "inherits": "fdm_process_common", + "from": "system", + "setting_id": "rOL0gJh6Y7pDsBnk", + "instantiation": "true", + "print_settings_id": "0.56mm Standard @Anycubic Kobra S1 Max 0.8 nozzle", + "layer_height": "0.56", + "compatible_printers": [ + "Anycubic Kobra S1 Max 0.8 nozzle" + ], + "accel_to_decel_enable": "1", + "accel_to_decel_factor": "50%", + "alternate_extra_wall": "0", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "bottom_solid_infill_flow_ratio": "1", + "bottom_surface_pattern": "monotonic", + "bridge_acceleration": "50%", + "bridge_angle": "0", + "bridge_density": "100%", + "bridge_flow": "1", + "bridge_no_support": "0", + "bridge_speed": "30", + "brim_ears_detection_length": "1", + "brim_ears_max_angle": "125", + "brim_object_gap": "0.15", + "brim_type": "auto_brim", + "brim_width": "5", + "compatible_printers_condition": "", + "counterbore_hole_bridging": "none", + "default_acceleration": "10000", + "default_jerk": "9", + "detect_narrow_internal_solid_infill": "1", + "detect_overhang_wall": "1", + "detect_thin_wall": "1", + "dont_filter_internal_bridges": "disabled", + "draft_shield": "disabled", + "elefant_foot_compensation": "0.1", + "elefant_foot_compensation_layers": "1", + "enable_arc_fitting": "0", + "enable_extra_bridge_layer": "disabled", + "enable_overhang_speed": "1", + "enable_prime_tower": "1", + "enable_support": "0", + "enforce_support_layers": "0", + "ensure_vertical_shell_thickness": "ensure_all", + "exclude_object": "1", + "extra_perimeters_on_overhangs": "1", + "extrusion_rate_smoothing_external_perimeter_only": "0", + "filename_format": "{timestamp}-{if plate_name==\"\" then input_filename_base+\"_plate\" else plate_name endif}{\"(\"+plate_number+\")\"}_{filament_type[initial_tool]}_{layer_height}_{print_time}.gcode", + "filter_out_gap_fill": "0", + "flush_into_infill": "0", + "flush_into_objects": "0", + "flush_into_support": "1", + "fuzzy_skin": "none", + "fuzzy_skin_first_layer": "0", + "fuzzy_skin_noise_type": "classic", + "fuzzy_skin_octaves": "4", + "fuzzy_skin_persistence": "0.5", + "fuzzy_skin_point_distance": "0.8", + "fuzzy_skin_scale": "1", + "fuzzy_skin_thickness": "0.3", + "gap_fill_target": "topbottom", + "gap_infill_speed": "100", + "gcode_add_line_number": "0", + "gcode_comments": "0", + "gcode_label_objects": "1", + "hole_to_polyhole": "0", + "hole_to_polyhole_threshold": "0.01", + "hole_to_polyhole_twisted": "1", + "independent_support_layer_height": "1", + "infill_anchor": "400%", + "infill_anchor_max": "20", + "infill_combination": "0", + "infill_combination_max_layer_height": "100%", + "infill_direction": "45", + "infill_jerk": "9", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "50", + "initial_layer_jerk": "9", + "initial_layer_line_width": "0.82", + "initial_layer_min_bead_width": "85%", + "initial_layer_print_height": "0.4", + "initial_layer_speed": "30", + "initial_layer_travel_speed": "100%", + "inner_wall_acceleration": "5000", + "inner_wall_jerk": "9", + "inner_wall_line_width": "0.82", + "inner_wall_speed": "150", + "interface_shells": "0", + "interlocking_beam": "0", + "interlocking_beam_layer_count": "2", + "interlocking_beam_width": "0.8", + "interlocking_boundary_avoidance": "2", + "interlocking_depth": "2", + "interlocking_orientation": "22.5", + "internal_bridge_angle": "0", + "internal_bridge_density": "100%", + "internal_bridge_flow": "1", + "internal_bridge_speed": "150%", + "internal_solid_infill_acceleration": "5000", + "internal_solid_infill_line_width": "0.82", + "internal_solid_infill_pattern": "monotonic", + "internal_solid_infill_speed": "150", + "ironing_angle": "-1", + "ironing_flow": "10%", + "ironing_inset": "0", + "ironing_pattern": "zig-zag", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "is_infill_first": "0", + "lattice_angle_1": "-45", + "lattice_angle_2": "45", + "line_width": "0.82", + "make_overhang_printable": "0", + "make_overhang_printable_angle": "55", + "make_overhang_printable_hole_size": "0", + "max_bridge_length": "10", + "max_travel_detour_distance": "0", + "max_volumetric_extrusion_rate_slope": "0", + "max_volumetric_extrusion_rate_slope_segment_length": "3", + "min_bead_width": "85%", + "min_feature_size": "25%", + "min_length_factor": "0.5", + "min_skirt_length": "0", + "min_width_top_surface": "300%", + "minimum_sparse_infill_area": "15", + "mmu_segmented_region_interlocking_depth": "0", + "mmu_segmented_region_max_width": "0", + "notes": "", + "only_one_wall_first_layer": "0", + "only_one_wall_top": "0", + "ooze_prevention": "0", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "9", + "outer_wall_line_width": "0.82", + "outer_wall_speed": "120", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "15", + "overhang_4_4_speed": "5", + "overhang_reverse": "0", + "overhang_reverse_internal_only": "0", + "overhang_reverse_threshold": "50%", + "post_process": [], + "precise_outer_wall": "0", + "precise_z_height": "0", + "preheat_steps": "1", + "preheat_time": "0", + "prime_tower_brim_width": "5", + "prime_tower_extra_rib_length": "0", + "prime_tower_fillet_wall": "1", + "prime_tower_flat_ironing": "0", + "prime_tower_infill_gap": "150%", + "prime_tower_max_speed": "90", + "prime_tower_rib_wall": "1", + "prime_tower_rib_width": "8", + "prime_tower_skip_points": "1", + "prime_tower_width": "30", + "prime_volume": "30", + "print_flow_ratio": "1", + "print_order": "default", + "print_sequence": "by layer", + "raft_contact_distance": "0.1", + "raft_expansion": "1.5", + "raft_first_layer_density": "90%", + "raft_first_layer_expansion": "5", + "raft_layers": "0", + "reduce_crossing_wall": "0", + "reduce_infill_retraction": "1", + "resolution": "0.012", + "role_based_wipe_speed": "1", + "rotate_solid_infill_direction": "1", + "scarf_angle_threshold": "155", + "scarf_joint_flow_ratio": "1", + "scarf_joint_speed": "30", + "scarf_overhang_threshold": "40%", + "seam_gap": "10%", + "seam_position": "aligned", + "seam_slope_conditional": "1", + "seam_slope_entire_loop": "0", + "seam_slope_inner_walls": "1", + "seam_slope_min_length": "10", + "seam_slope_start_height": "10%", + "seam_slope_steps": "10", + "seam_slope_type": "none", + "single_extruder_multi_material_priming": "0", + "single_loop_draft_shield": "0", + "skirt_distance": "2", + "skirt_height": "1", + "skirt_loops": "0", + "skirt_speed": "50", + "skirt_start_angle": "-135", + "skirt_type": "combined", + "slice_closing_radius": "0.049", + "slicing_mode": "regular", + "slow_down_layers": "0", + "slowdown_for_curled_perimeters": "0", + "small_area_infill_flow_compensation": "0", + "small_area_infill_flow_compensation_model": [ + "0,0", + "\n0.2,0.4444", + "\n0.4,0.6145", + "\n0.6,0.7059", + "\n0.8,0.7619", + "\n1.5,0.8571", + "\n2,0.8889", + "\n3,0.9231", + "\n5,0.9520", + "\n10,1" + ], + "small_perimeter_speed": "50%", + "small_perimeter_threshold": "0", + "smooth_speed_discontinuity_area": "1", + "solid_infill_direction": "45", + "solid_infill_filament": "1", + "sparse_infill_acceleration": "100%", + "sparse_infill_density": "15%", + "sparse_infill_filament": "1", + "sparse_infill_line_width": "0.82", + "sparse_infill_pattern": "grid", + "sparse_infill_speed": "100", + "spiral_finishing_flow_ratio": "0", + "spiral_mode": "0", + "spiral_mode_max_xy_smoothing": "200%", + "spiral_mode_smooth": "0", + "spiral_starting_flow_ratio": "0", + "staggered_inner_seams": "0", + "standby_temperature_delta": "-5", + "support_angle": "0", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_bottom_interface_spacing": "0.5", + "support_bottom_z_distance": "0.2", + "support_critical_regions_only": "0", + "support_expansion": "0", + "support_filament": "0", + "support_interface_bottom_layers": "2", + "support_interface_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_not_for_body": "1", + "support_interface_pattern": "auto", + "support_interface_spacing": "0.5", + "support_interface_speed": "50", + "support_interface_top_layers": "2", + "support_line_width": "0.82", + "support_object_first_layer_gap": "0.2", + "support_object_xy_distance": "0.35", + "support_on_build_plate_only": "1", + "support_remove_small_overhang": "1", + "support_speed": "100", + "support_style": "default", + "support_threshold_angle": "30", + "support_threshold_overlap": "50%", + "support_top_z_distance": "0.25", + "support_type": "tree(auto)", + "thick_bridges": "0", + "thick_internal_bridges": "0", + "timelapse_type": "0", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "3", + "top_shell_thickness": "0.8", + "top_solid_infill_flow_ratio": "1", + "top_surface_acceleration": "2000", + "top_surface_jerk": "9", + "top_surface_line_width": "0.82", + "top_surface_pattern": "monotonicline", + "top_surface_speed": "150", + "travel_acceleration": "10000", + "travel_jerk": "9", + "travel_speed": "300", + "travel_speed_z": "0", + "tree_support_adaptive_layer_height": "1", + "tree_support_angle_slow": "25", + "tree_support_auto_brim": "1", + "tree_support_branch_angle": "45", + "tree_support_branch_angle_organic": "40", + "tree_support_branch_diameter": "2", + "tree_support_branch_diameter_angle": "5", + "tree_support_branch_diameter_organic": "2", + "tree_support_branch_distance": "5", + "tree_support_branch_distance_organic": "1", + "tree_support_brim_width": "3", + "tree_support_tip_diameter": "0.8", + "tree_support_top_rate": "30%", + "tree_support_wall_count": "0", + "wall_direction": "auto", + "wall_distribution_count": "1", + "wall_filament": "1", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "inner wall/outer wall", + "wall_transition_angle": "10", + "wall_transition_filter_deviation": "25%", + "wall_transition_length": "100%", + "wipe_before_external_loop": "0", + "wipe_on_loops": "0", + "wipe_speed": "80%", + "wipe_tower_extra_flow": "100%", + "wipe_tower_filament": "0", + "wipe_tower_no_sparse_layers": "0", + "wiping_volumes_extruders": [ + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70", + "70" + ], + "xy_contour_compensation": "0", + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Anycubic/process/fdm_process_common.json b/resources/profiles/Anycubic/process/fdm_process_common.json index 868bbc1a2e..f813b8fa7f 100644 --- a/resources/profiles/Anycubic/process/fdm_process_common.json +++ b/resources/profiles/Anycubic/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -78,7 +77,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Artillery.json b/resources/profiles/Artillery.json index a610fdbaf6..180622cf3a 100644 --- a/resources/profiles/Artillery.json +++ b/resources/profiles/Artillery.json @@ -1,6 +1,6 @@ { "name": "Artillery", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Artillery configurations", "machine_model_list": [ @@ -389,28 +389,28 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Artillery Generic ABS", - "sub_path": "filament/Artillery Generic ABS.json" + "name": "Generic ABS @Artillery", + "sub_path": "filament/Generic ABS @Artillery.json" }, { - "name": "Artillery Generic ASA", - "sub_path": "filament/Artillery Generic ASA.json" + "name": "Generic ASA @Artillery", + "sub_path": "filament/Generic ASA @Artillery.json" }, { - "name": "Artillery Generic PETG", - "sub_path": "filament/Artillery Generic PETG.json" + "name": "Generic PETG @Artillery", + "sub_path": "filament/Generic PETG @Artillery.json" }, { - "name": "Artillery Generic PLA", - "sub_path": "filament/Artillery Generic PLA.json" + "name": "Generic PLA @Artillery", + "sub_path": "filament/Generic PLA @Artillery.json" }, { - "name": "Artillery Generic PLA-CF", - "sub_path": "filament/Artillery Generic PLA-CF.json" + "name": "Generic PLA-CF @Artillery", + "sub_path": "filament/Generic PLA-CF @Artillery.json" }, { - "name": "Artillery Generic TPU", - "sub_path": "filament/Artillery Generic TPU.json" + "name": "Generic TPU @Artillery", + "sub_path": "filament/Generic TPU @Artillery.json" }, { "name": "Artillery ABS", diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json index b468e95d51..115f53a962 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "m023Z8IkkHMHxuag", - "filament_id": "P39db358", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json index f21c7a5a31..2c9940db39 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery ABS @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "QGbNWGw8rqvq025W", + "filament_id": "OFgXgt98", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json index 8516077d0a..4443359064 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PxGFsoMcfFrTDqzL", - "filament_id": "P39db358", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json index 1bd222ade6..d3bdb2afe2 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ABS @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ABS @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "o4JZKQmCdnO0hCXZ", - "filament_id": "P39db358", + "filament_id": "OFgXgt98", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ABS.json b/resources/profiles/Artillery/filament/Artillery ABS.json index 111c2c39a1..006b37ca31 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS.json +++ b/resources/profiles/Artillery/filament/Artillery ABS.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery ABS", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "fsbfMiamVemzRxkG", + "filament_id": "OFgXgt98", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json index 9894337b5c..089e3d118a 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "AE7wKVIZXHXSXzL5", - "filament_id": "P87436f6", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json index eb4a720cc3..3f353f3784 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery ASA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "eSwM3ZfSBWqR8Gcf", + "filament_id": "OF5YVJXH", "instantiation": "true", "chamber_temperature": [ "55" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json index 422b050df8..40db5fa796 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.6 nozzle", "from": "User", "setting_id": "znMfTFfxvJC7a732", - "filament_id": "P87436f6", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json index 16a9ff7c3d..9769f1d363 100644 --- a/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery ASA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery ASA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "y2DU36j0slaHzg04", - "filament_id": "P87436f6", + "filament_id": "OF5YVJXH", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery Generic ABS.json b/resources/profiles/Artillery/filament/Artillery Generic ABS.json deleted file mode 100644 index df06b7f844..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic ABS.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "C4oiu2SBLwfTEcXu", - "name": "Artillery Generic ABS", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery Generic ASA.json b/resources/profiles/Artillery/filament/Artillery Generic ASA.json deleted file mode 100644 index e3b8cc1f93..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic ASA.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB98", - "setting_id": "1gls4zCclgN68Hlc", - "name": "Artillery Generic ASA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_asa", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery Generic PETG.json b/resources/profiles/Artillery/filament/Artillery Generic PETG.json deleted file mode 100644 index cc2f29e875..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic PETG.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFG99", - "setting_id": "Ou4NR5DVvalg5kCe", - "name": "Artillery Generic PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json b/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json deleted file mode 100644 index 7c1a231dbc..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA-CF.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL98", - "setting_id": "h23GL00BFCliLh9N", - "name": "Artillery Generic PLA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "nozzle_temperature": [ - "200" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery Generic PLA.json b/resources/profiles/Artillery/filament/Artillery Generic PLA.json deleted file mode 100644 index 1211c22b3c..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic PLA.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "Bpy4tAvspysDWosL", - "name": "Artillery Generic PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "nozzle_temperature": [ - "200" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery Generic TPU.json b/resources/profiles/Artillery/filament/Artillery Generic TPU.json deleted file mode 100644 index ff724d1925..0000000000 --- a/resources/profiles/Artillery/filament/Artillery Generic TPU.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFU99", - "setting_id": "u8YE6r4sGJ0jvqBn", - "name": "Artillery Generic TPU", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Artillery Sidewinder X1 0.4 nozzle", - "Artillery Genius 0.4 nozzle", - "Artillery Sidewinder X2 0.4 nozzle", - "Artillery Genius Pro 0.4 nozzle", - "Artillery Hornet 0.4 nozzle" - ] -} diff --git a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json index 756e67a5e2..18c889b939 100644 --- a/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "lOsH1teHe8Pgzx2g", + "filament_id": "OFMSvS8z", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json index ec9009a5e1..abef802ea7 100644 --- a/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PA-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "b4BKJMUxArvLuEOh", + "filament_id": "OFtGC1ye", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json index 4fa54353f0..24fd12b55c 100644 --- a/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PC @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PC @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "WawbnfhWn4MT6Hz7", + "filament_id": "OFfb10SK", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json index 6fd06c0d66..8e40f27f5b 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "a5jwQ6nyffW1Vqv1", - "filament_id": "P11851ba", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json index a82b3b7948..078786ed5f 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PET @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "QeiSAakfMW7HyhJ7", + "filament_id": "OFb5EEM3", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json index 26e71cefc8..426ec21706 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "VGu7C3uk8d6ibIg4", - "filament_id": "P11851ba", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json index b5461ec03c..2a103c381a 100644 --- a/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PET @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PET @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "Oj11BhU0QajmDrh3", - "filament_id": "P11851ba", + "filament_id": "OFb5EEM3", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json index 5ed45d7e7d..1ffe8a243e 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "kAlZ7nCYo53UVVx3", - "filament_id": "P284941e", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json index f6bbdd3cef..9cc9fa81ac 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PETG @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "g7UIfJTOPzMQzfrH", + "filament_id": "OFilnglt", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json index 3fcc8e175b..952e738ff8 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "uuPf0MfNTZ2lihtG", - "filament_id": "P284941e", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json index 4842427a49..b1f14d1aac 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dQBp2T4ap90uAOYs", - "filament_id": "P284941e", + "filament_id": "OFilnglt", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json index 03fc583bfa..9af4f2eeef 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "GrdWgUGdXt23jnBu", - "filament_id": "P284941e", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json index b8a3c33acd..8ae5612c31 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "RTQvSwJBWnut5aBo", + "filament_id": "OF8wE5l7", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json index 3ab0575058..bcfb9cefb9 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "Wkt1IClO4nwH3Xa7", - "filament_id": "P284941e", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json index 2b83852a34..4231ec86d4 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PETG Basic @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "Zlvodz3cris0hmof", - "filament_id": "P284941e", + "filament_id": "OF8wE5l7", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json index 22d124da46..8321236cb4 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "JvmeW29kHCp7HiA6", + "filament_id": "OFOnSNt3", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Artillery/filament/Artillery PETG.json b/resources/profiles/Artillery/filament/Artillery PETG.json index ecea0ae80b..bb2227c04a 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG.json +++ b/resources/profiles/Artillery/filament/Artillery PETG.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PETG", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "1MyhYGMxJCmZnJRP", + "filament_id": "OFilnglt", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json index 258f94de1a..625dbdf8e6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "sqlU8YRYqavJBap3", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json index 573a888662..a5270921bd 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "7V8Vj5ykHmTYtxcC", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json index 340947ce24..fddc6cd71b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "J8rOxOcsB6HN00HI", - "filament_id": "Pfcf9c4c", + "filament_id": "OFzY7N3Z", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json index cee58991c8..936afae087 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "N3iYnDshA5ruihVE", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json index 56498727fa..b892fd3101 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "zBUD1JyuZF9MOncA", + "filament_id": "OFXk1emJ", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json index 884e7d428e..07ce00f7d6 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "NKkZjEtDjxOMLjoo", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json index cffdcde5ed..d7d64ef75b 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "c9BAMzt2w30nB2rC", + "filament_id": "OFXk1emJ", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json index 18e7f77ad4..0544a27107 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Basic+ @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "2VIrSoq3kufjHMXj", + "filament_id": "OF4Nhggz", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "100" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic.json b/resources/profiles/Artillery/filament/Artillery PLA Basic.json index 052ceac5e5..1a54f28da4 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Basic", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "DcGBMRjdcgLx6pWG", + "filament_id": "OFXk1emJ", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json index aff1bcb3cb..398d8d6477 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "tgmFMdyhSX05kuxw", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json index abd44e77d1..cee07d65d7 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "9zqAIfywiv9zm77X", + "filament_id": "OFAC7Wyu", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json index a1fc1e5999..97e72d2b39 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "W6ipHAoCgHIUIT3g", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Matte @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json index 4217f6836d..8d5aa70714 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "HggSuUWe1zWOlQIK", + "filament_id": "OFAC7Wyu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte.json b/resources/profiles/Artillery/filament/Artillery PLA Matte.json index 83e40133aa..c74c1d0717 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Matte", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "kt8uKXpMqxrFrHaG", + "filament_id": "OFAC7Wyu", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json index d2f3184864..ac3b82dc53 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "TDwRIGXkpJIW38jG", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.2 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json index e8d65f465b..f0a8424a18 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "BWMjPUWXwumQoY5H", + "filament_id": "OFLbXwoL", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json index ce102bb364..3ab80c6fe4 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "PpuiGWbDlVZwBIxb", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_settings_id": [ "Artillery PLA Silk @Artillery M1 Pro 0.6 nozzle" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json index 6fb25927e3..00227f72e8 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk @Artillery M1 Pro 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Artillery PLA @Artillery M1 Pro 0.8 nozzle", "from": "User", "setting_id": "dr2wlzDc1AC3tciI", + "filament_id": "OFLbXwoL", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk.json b/resources/profiles/Artillery/filament/Artillery PLA Silk.json index 85cd2eec08..024d9b885f 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Silk", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "rd0U4uP6mM8S8lDg", + "filament_id": "OFLbXwoL", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA Tough.json b/resources/profiles/Artillery/filament/Artillery PLA Tough.json index 8f1ce758b5..9fc7df83be 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Tough.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Tough.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA Tough", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "hLFvQXsyyUrguGEp", + "filament_id": "OF0R5Wc7", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json index 36c7d69b83..10df36a947 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "oT12s9CEV1CTD6eB", + "filament_id": "OFAZllAN", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json index f7f700fa96..7dec8693bf 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.2 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.2 nozzle", "from": "system", "setting_id": "FIcb3cOIanxmvHe2", - "filament_id": "P8163162", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json index 4c558166c5..5fb34feb1f 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery PVA @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "r2q4QIlfTUCIz43f", + "filament_id": "OFkx5MEe", "instantiation": "true", "chamber_temperature": [ "50" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json index b15f191878..9f3dcbb2b8 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "h5xquKMT9l0rwcTU", - "filament_id": "P8163162", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json index 1e682947c2..753f9c9dd9 100644 --- a/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery PVA @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery PVA @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "cElJlbCAgAqSQiPZ", - "filament_id": "P8163162", + "filament_id": "OFkx5MEe", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json index d722aa592f..730690bba2 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.4 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery TPU @Artillery M1 Pro 0.4 nozzle", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "p6vnCneuwtM0PzL7", + "filament_id": "OFcJDtTx", "instantiation": "true", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json index 9d29c06e42..16b2485862 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.6 nozzle", "from": "system", "setting_id": "QIgpIamYbSdI4DPW", - "filament_id": "P2fbf0c0", + "filament_id": "OFcJDtTx", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json index d323279979..f0b83d6e6f 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/filament/Artillery TPU @Artillery M1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "Artillery TPU @Artillery M1 Pro 0.8 nozzle", "from": "system", "setting_id": "W22GbPPOgtH4NAAH", - "filament_id": "P2fbf0c0", + "filament_id": "OFcJDtTx", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Artillery/filament/Artillery TPU.json b/resources/profiles/Artillery/filament/Artillery TPU.json index b769e8c61a..407051c138 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU.json +++ b/resources/profiles/Artillery/filament/Artillery TPU.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Artillery TPU", - "inherits": "Artillery Generic PLA", + "inherits": "Generic PLA @Artillery", "from": "system", "setting_id": "IcV1jLJaS5rmdNOY", + "filament_id": "OFcJDtTx", "instantiation": "true", "compatible_printers": [ "Artillery Sidewinder X3 Pro 0.4 nozzle", diff --git a/resources/profiles/Artillery/filament/Generic ABS @Artillery.json b/resources/profiles/Artillery/filament/Generic ABS @Artillery.json new file mode 100644 index 0000000000..caf687b95e --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic ABS @Artillery.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "OFY9muEs", + "setting_id": "DNgTEZpEz8bJoobJ", + "name": "Generic ABS @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "renamed_from": "Artillery Generic ABS", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/filament/Generic ASA @Artillery.json b/resources/profiles/Artillery/filament/Generic ASA @Artillery.json new file mode 100644 index 0000000000..74ef4c775f --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic ASA @Artillery.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "OFLPAxz3", + "setting_id": "xWHuScm0fPJCqjVx", + "name": "Generic ASA @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "renamed_from": "Artillery Generic ASA", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/filament/Generic PETG @Artillery.json b/resources/profiles/Artillery/filament/Generic PETG @Artillery.json new file mode 100644 index 0000000000..aa354e517d --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic PETG @Artillery.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "filament_id": "OFYPdQJh", + "setting_id": "6wZKfV2XvuJSUSwl", + "name": "Generic PETG @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "renamed_from": "Artillery Generic PETG", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/filament/Generic PLA @Artillery.json b/resources/profiles/Artillery/filament/Generic PLA @Artillery.json new file mode 100644 index 0000000000..d691a9b470 --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic PLA @Artillery.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "filament_id": "OFDSrzZ8", + "setting_id": "T0sW3uMBr94Y1X1G", + "name": "Generic PLA @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "renamed_from": "Artillery Generic PLA", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "nozzle_temperature": [ + "200" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json b/resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json new file mode 100644 index 0000000000..08fd583e18 --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic PLA-CF @Artillery.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "filament_id": "OFWbdGsC", + "setting_id": "Gxafdb0zYnf9kPwa", + "name": "Generic PLA-CF @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "renamed_from": "Artillery Generic PLA-CF", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "nozzle_temperature": [ + "200" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/filament/Generic TPU @Artillery.json b/resources/profiles/Artillery/filament/Generic TPU @Artillery.json new file mode 100644 index 0000000000..f1270d0afb --- /dev/null +++ b/resources/profiles/Artillery/filament/Generic TPU @Artillery.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "filament_id": "OFgbpcy9", + "setting_id": "dWhysRiE5GrAGyME", + "name": "Generic TPU @Artillery", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "renamed_from": "Artillery Generic TPU", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Artillery Sidewinder X1 0.4 nozzle", + "Artillery Genius 0.4 nozzle", + "Artillery Sidewinder X2 0.4 nozzle", + "Artillery Genius Pro 0.4 nozzle", + "Artillery Hornet 0.4 nozzle" + ] +} diff --git a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json index d9b85067a1..fec7ef73d3 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "M83; extruder relative mode\nG28; home all axes\nM109 S[nozzle_temperature_initial_layer]; hotend temperature\nM140 S[bed_temperature_initial_layer_single]; heatbed temperature\nM190 S[bed_temperature_initial_layer_single]; wait for the bed to heat up\nM109 S[nozzle_temperature_initial_layer]; wait for the extruder to heat up\nG92 E0; reset extruder\nG1 X20 Y5 Z0.3 F5000.0; move to start-line position\nG1 Z0.3 F1000; print height\nG1 X200 Y5 F1500.0 E15; draw 1st line\nG1 X200 Y5.3 Z0.3 F5000.0; move to side a little\nG1 X5.3 Y5.3 Z0.3 F1500.0 E30; draw 2nd line\nG1 Z3 F3000; move z up little to prevent scratching of surface", "machine_end_gcode": "G91; Relative positionning\nG1 E-2 Z0.2 F2400; Retract and raise Z\nG1 X5 Y5 F3000; Wipe out\nG1 Z10; Raise Z more\nG90; Absolute positionning\nG1 X0 Y100; Present print\nM106 S0; Turn-off fan\nM104 S0; Turn-off hotend\nM140 S0; Turn-off bed\nM84 X Y E; Disable all steppers but Z", diff --git a/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json index 07beadf546..abac060832 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Genius Pro 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "M83; extruder relative mode\nG28; home all axes\nG29 S12000; bed mesh leveling\nM104 S[nozzle_temperature_initial_layer]; set hotend temperature\nM140 S[bed_temperature_initial_layer_single]; set heatbed temperature\nG90; Absolute Positioning\nG1 Y0 F5000; Move to front\nG1 X0 F5000; Move to origin\nM190 S[bed_temperature_initial_layer_single]; wait for the bed to heat up\nM109 S[nozzle_temperature_initial_layer]; wait for the extruder to heat up\nG92 E0; reset extruder\nG1 X20 Y5 Z0.3 F5000.0; move to start-line position\nG1 Z0.3 F1000; print height\nG1 X200 Y5 F1500.0 E15; draw 1st line\nG1 X200 Y5.3 Z0.3 F5000.0; move to side a little\nG1 X5.3 Y5.3 Z0.3 F1500.0 E30; draw 2nd line\nG1 Z3 F3000; move z up little to prevent scratching of surface", "machine_end_gcode": "G91; Relative positionning\nG1 E-2 Z0.2 F2400; Retract and raise Z\nG1 X5 Y5 F3000; Wipe out\nG1 Z10; Raise Z more\nG90; Absolute positionning\nG1 X0 Y100; Present print\nM106 S0; Turn-off fan\nM104 S0; Turn-off hotend\nM140 S0; Turn-off bed\nM84 X Y E; Disable all steppers but Z", diff --git a/resources/profiles/Artillery/machine/Artillery Genius Pro.json b/resources/profiles/Artillery/machine/Artillery Genius Pro.json index 6af35f73a6..6581266380 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius Pro.json +++ b/resources/profiles/Artillery/machine/Artillery Genius Pro.json @@ -8,5 +8,5 @@ "bed_model": "artillery_geniuspro_buildplate_model.stl", "bed_texture": "artillery_geniuspro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Genius.json b/resources/profiles/Artillery/machine/Artillery Genius.json index 31c021230b..27fe494d24 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius.json +++ b/resources/profiles/Artillery/machine/Artillery Genius.json @@ -8,5 +8,5 @@ "bed_model": "artillery_genius_buildplate_model.stl", "bed_texture": "artillery_genius_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json index 4aa9f9d9a4..232b68d62e 100644 --- a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing and auto bed leveling\nM140 S{hot_plate_temp_initial_layer[0]} ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG29 ; auto bed levelling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{nozzle_temperature_initial_layer[0]} ; set final nozzle temp\nM190 S{hot_plate_temp_initial_layer[0]} ; wait for bed temp to stabilize\nM109 S{nozzle_temperature_initial_layer[0]} ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.85} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < printable_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Artillery/machine/Artillery Hornet.json b/resources/profiles/Artillery/machine/Artillery Hornet.json index c0e680e039..79e48b3487 100644 --- a/resources/profiles/Artillery/machine/Artillery Hornet.json +++ b/resources/profiles/Artillery/machine/Artillery Hornet.json @@ -8,5 +8,5 @@ "bed_model": "artillery_hornet_buildplate_model.stl", "bed_texture": "artillery_hornet_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.2 nozzle.json index e5617c4fe6..f168beb458 100644 --- a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.2 nozzle.json @@ -439,7 +439,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.4 nozzle.json index a265906570..626b3d23ab 100644 --- a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.4 nozzle.json @@ -199,7 +199,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.6 nozzle.json index 85be2e70be..c052fb721f 100644 --- a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.6 nozzle.json @@ -439,7 +439,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.8 nozzle.json index db91e5320b..1a0d950914 100644 --- a/resources/profiles/Artillery/machine/Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery M1 Pro 0.8 nozzle.json @@ -439,7 +439,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery M1 Pro.json b/resources/profiles/Artillery/machine/Artillery M1 Pro.json index b7e4c1baaa..9b1e63a89d 100644 --- a/resources/profiles/Artillery/machine/Artillery M1 Pro.json +++ b/resources/profiles/Artillery/machine/Artillery M1 Pro.json @@ -10,5 +10,5 @@ "hotend_model": "", "default_bed_type": "Textured PEI Plate", "not_support_bed_type": "Engineering Plate;Textured Cool Plate;Smooth PEI Plate", - "default_materials": "Artillery PLA Basic;Artillery ABS;Artillery ASA;Artillery PA;Artillery PA-CF;Artillery PC;Artillery PET;Artillery PETG Basic;Artillery PETG-CF;Artillery PLA Basic;Artillery PLA Matte;Artillery PLA Silk;Artillery PLA-CF;Artillery PVA;Artillery TPU;Artillery PLA" + "default_materials": "Artillery PLA Basic @Artillery M1 Pro 0.4 nozzle;Artillery ABS @Artillery M1 Pro 0.4 nozzle;Artillery ASA @Artillery M1 Pro 0.4 nozzle;Artillery PA @Artillery M1 Pro 0.4 nozzle;Artillery PA-CF @Artillery M1 Pro 0.4 nozzle;Artillery PC @Artillery M1 Pro 0.4 nozzle;Artillery PET @Artillery M1 Pro 0.4 nozzle;Artillery PETG Basic @Artillery M1 Pro 0.4 nozzle;Artillery PETG-CF @Artillery M1 Pro 0.4 nozzle;Artillery PLA Matte @Artillery M1 Pro 0.4 nozzle;Artillery PLA Silk @Artillery M1 Pro 0.4 nozzle;Artillery PLA-CF @Artillery M1 Pro 0.4 nozzle;Artillery PVA @Artillery M1 Pro 0.4 nozzle;Artillery TPU @Artillery M1 Pro 0.4 nozzle;Artillery PLA Basic @Artillery M1 Pro 0.2 nozzle;Artillery PLA Basic @Artillery M1 Pro 0.6 nozzle;Artillery PLA Basic @Artillery M1 Pro 0.8 nozzle" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json index 81e96a2593..ab83e7d429 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "; Initial setups\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Set the heating\nM190 S[bed_temperature_initial_layer_single] ; wait for bed to heat up\nM104 S[nozzle_temperature_initial_layer] ; start nozzle heating but don't wait\n\n; Home\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG28 ; home all axes\nG1 X3 Y3 F5000 ; move to corner of the bed to avoid ooze over centre\n\n; Wait for final heating\nM109 S[nozzle_temperature_initial_layer] ; wait for the nozzle to heat up\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed to heat up\n\n; Return to prime position, Prime line routine\nG92 E0 ; Reset Extruder\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG1 X10 Y.5 Z0.25 F5000.0 ; Move to start position\nG1 X100 Y.5 Z0.25 F1500.0 E15 ; Draw the first line\nG1 X100 Y.2 Z0.25 F5000.0 ; Move to side a little\nG1 X10 Y.2 Z0.25 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nM221 S{if layer_height<0.075}100{else}95{endif}", "machine_end_gcode": "G4 ; wait\nG92 E0 ; prepare to retract\nG1 E-0.5 F3000; retract to avoid stringing\n\n; Anti-stringing end wiggle\nG91 ; use relative coordinates\nG1 X1 Y1 F1200\n\n; Raise nozzle and present bed\n{if layer_z < printable_height}G1 Z{z_offset+min(layer_z+120, printable_height)}{endif} ; Move print head up\nG90 ; use absolute coordinates\n\n; Reset print setting overrides\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Shut down printer\nM106 S0 ; turn-off fan\nM104 S0 ; turn-off hotend\nM140 S0 ; turn-off bed\nM150 P0 ; turn off led\nM85 S0 ; deactivate idle timeout\nM84 ; disable motors\n", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json index 5d5f13f511..195b01f873 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X1.json @@ -8,5 +8,5 @@ "bed_model": "artillery_sidewinderx1_buildplate_model.stl", "bed_texture": "artillery_sidewinderx1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json index b3100851fb..416ddfb056 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Artillery Generic PLA" + "Generic PLA @Artillery" ], "machine_start_gcode": "; Initial setups\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM900 K0.12 ; K factor\nM900 W[line_width] H[layer_height] D[filament_diameter]\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Set the heating\nM190 S[bed_temperature_initial_layer_single] ; wait for bed to heat up\nM104 S[nozzle_temperature_initial_layer] ; start nozzle heating but don't wait\n\n; Home\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG28 ; home all axes\nG1 X3 Y3 F5000 ; move to corner of the bed to avoid ooze over centre\n\n; Wait for final heating\nM109 S[nozzle_temperature_initial_layer] ; wait for the nozzle to heat up\nM190 S[bed_temperature_initial_layer_single] ; wait for the bed to heat up\n\n;Auto bed Leveling\n@BEDLEVELVISUALIZER\nG29 ; ABL T\nM420 S1 Z3 ; reload and fade mesh bed leveling until it reach 3mm Z\n\n; Return to prime position, Prime line routine\nG92 E0 ; Reset Extruder\nG1 Z3 F3000 ; move z up little to prevent scratching of surface\nG1 X10 Y.5 Z0.25 F5000.0 ; Move to start position\nG1 X100 Y.5 Z0.25 F1500.0 E15 ; Draw the first line\nG1 X100 Y.2 Z0.25 F5000.0 ; Move to side a little\nG1 X10 Y.2 Z0.25 F1500.0 E30 ; Draw the second line\nG92 E0 ; Reset Extruder\nM221 S{if layer_height<0.075}100{else}95{endif}", "machine_end_gcode": "G4 ; wait\nG92 E0 ; prepare to retract\nG1 E-0.5 F3000; retract to avoid stringing\n\n; Anti-stringing end wiggle\nG91 ; use relative coordinates\nG1 X1 Y1 F1200\n\n; Raise nozzle and present bed\n{if layer_z < printable_height}G1 Z{z_offset+min(layer_z+120, printable_height)}{endif} ; Move print head up\nG90 ; use absolute coordinates\n\n; Reset print setting overrides\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extrusion rate to 100%\n\n; Shut down printer\nM106 S0 ; turn-off fan\nM104 S0 ; turn-off hotend\nM140 S0 ; turn-off bed\nM150 P0 ; turn off led\nM85 S0 ; deactivate idle timeout\nM84 ; disable motors\n", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json index 79922cfe8b..2009958308 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X2.json @@ -8,5 +8,5 @@ "bed_model": "artillery_sidewinderx2_buildplate_model.stl", "bed_texture": "artillery_sidewinderx2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Artillery Generic ABS;Artillery Generic PLA;Artillery Generic PLA-CF;Artillery Generic PETG;Artillery Generic TPU;Artillery Generic ASA" + "default_materials": "Generic ABS @Artillery;Generic PLA @Artillery;Generic PLA-CF @Artillery;Generic PETG @Artillery;Generic TPU @Artillery;Generic ASA @Artillery" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json index 42e66ff875..98af67eaa7 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json @@ -196,7 +196,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json index 3b12ce6ede..4a961d2113 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json @@ -196,7 +196,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json index b9013a99bf..0e2d82e209 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json @@ -196,7 +196,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json index 4642e015a1..2102a9e857 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json @@ -196,7 +196,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Artillery/machine/fdm_machine_common.json b/resources/profiles/Artillery/machine/fdm_machine_common.json index fcf2e2670b..e5e5341b22 100644 --- a/resources/profiles/Artillery/machine/fdm_machine_common.json +++ b/resources/profiles/Artillery/machine/fdm_machine_common.json @@ -126,7 +126,6 @@ "deretraction_speed": [ "30" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", diff --git a/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json index a1175a96f5..a336001bbe 100644 --- a/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm Extra Fine @Artillery M1 Pro 0.4 nozzle.json @@ -137,7 +137,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json index 929fafed81..17279f7852 100644 --- a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.2 nozzle.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json index 5a53fa08fd..d2c323a468 100644 --- a/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.08mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json index a7647a1f00..2f6d888558 100644 --- a/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.12mm Fine @Artillery M1 Pro 0.4 nozzle.json @@ -135,7 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json index b6f6ae5347..e5f12b7fb4 100644 --- a/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.12mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -134,7 +134,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json index 8112e2e609..6490399347 100644 --- a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius Pro.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "lF4fXJjfALsU4vVF", "name": "0.15mm Optimal @Artillery Genius Pro", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "lF4fXJjfALsU4vVF", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json index 9a6cac5bec..7c54deaa45 100644 --- a/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.15mm Optimal @Artillery Genius.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "vo47lgntuWkTLKZb", "name": "0.15mm Optimal @Artillery Genius", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "vo47lgntuWkTLKZb", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.15", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json index 238359be48..b2a81b40fa 100644 --- a/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.16mm High Quality @Artillery M1 Pro 0.4 nozzle.json @@ -135,7 +135,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json index 25d53a28f7..9617aac2c8 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery Hornet.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "XEpSP538KuWRSmGA", "name": "0.16mm Optimal @Artillery Hornet", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "XEpSP538KuWRSmGA", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json index a31ce771ad..adacdcf7fd 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery M1 Pro 0.4 nozzle.json @@ -138,7 +138,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json index 06244e2d4a..355c6078d5 100644 --- a/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.16mm Optimal @Artillery X1.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "3bBfTCC809w3YcXr", "name": "0.16mm Optimal @Artillery X1", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "3bBfTCC809w3YcXr", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json index 99516c7732..9a91eb82a4 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius Pro.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "CsTy51kncEm8X0yJ", "name": "0.20mm Standard @Artillery Genius Pro", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "CsTy51kncEm8X0yJ", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json index 0a36259661..6ef1ed280e 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Genius.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "lzsTJzIBChXesgUG", "name": "0.20mm Standard @Artillery Genius", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "lzsTJzIBChXesgUG", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json index b8eecf1f0f..8c846f2996 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery Hornet.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "i2UAXXKCEaBJmX5R", "name": "0.20mm Standard @Artillery Hornet", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "i2UAXXKCEaBJmX5R", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json index 3baeec4a3b..02851bc832 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery M1 Pro 0.4 nozzle.json @@ -141,7 +141,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json index fcb3b2fea1..a32ba399ff 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X1.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "A2tF591xYPxvYPYn", "name": "0.20mm Standard @Artillery X1", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "A2tF591xYPxvYPYn", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json index 815e9b00c0..bff0dadb1a 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X2.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "Uuco1eKObqt1aypG", "name": "0.20mm Standard @Artillery X2", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "Uuco1eKObqt1aypG", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json index b13efe200b..4a18b18ad0 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json index 264a3e5f15..472b2cdb30 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json index 8bf69da267..0df8955ecd 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json index 56f172e941..3462f3c7f3 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json index 837e4eb6a7..f74639343a 100644 --- a/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Strength @Artillery M1 Pro 0.4 nozzle.json @@ -136,7 +136,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json index 33893b53df..c01ebe2271 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery Hornet.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "vK3z8VB7eFi5wSEy", "name": "0.24mm Draft @Artillery Hornet", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "vK3z8VB7eFi5wSEy", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json index d175fb9f9d..6c3911a578 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.4 nozzle.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json index 5f3c183e51..d6d80212ce 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.6 nozzle.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json index 38a240bad5..4b2d68d114 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery M1 Pro 0.8 nozzle.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json b/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json index 6abc742265..fee39f4d0b 100644 --- a/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json +++ b/resources/profiles/Artillery/process/0.24mm Draft @Artillery X1.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "pMfIpILEXxTfa574", "name": "0.24mm Draft @Artillery X1", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "pMfIpILEXxTfa574", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json index 500c492659..851b63d27d 100644 --- a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json +++ b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius Pro.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "OGYrkEdpgzTfzZLw", "name": "0.25mm Draft @Artillery Genius Pro", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "OGYrkEdpgzTfzZLw", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json index f17fd83593..1489269c39 100644 --- a/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json +++ b/resources/profiles/Artillery/process/0.25mm Draft @Artillery Genius.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "UditC85gTRgxvpSp", "name": "0.25mm Draft @Artillery Genius", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_common", - "adaptive_layer_height": "1", + "from": "system", + "setting_id": "UditC85gTRgxvpSp", + "instantiation": "true", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json index 6540876295..efee8340aa 100644 --- a/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.28mm Extra Draft @Artillery M1 Pro 0.4 nozzle.json @@ -136,7 +136,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Artillery/process/fdm_process_common.json b/resources/profiles/Artillery/process/fdm_process_common.json index c74a84adbb..976ff7cf68 100644 --- a/resources/profiles/Artillery/process/fdm_process_common.json +++ b/resources/profiles/Artillery/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -78,7 +77,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index a2e72e00cb..7491f4064d 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "02.01.00.23", + "version": "02.01.00.28", "force_update": "0", "description": "BBL configurations", "machine_model_list": [ @@ -251,6 +251,10 @@ "name": "0.08mm Extra Fine @BBL H2DP 0.2 nozzle", "sub_path": "process/0.08mm Extra Fine @BBL H2DP 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @BBL H2C 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @BBL H2C 0.2 nozzle.json" + }, { "name": "0.08mm High Quality @BBL X2D 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL X2D 0.2 nozzle.json" @@ -263,10 +267,18 @@ "name": "0.08mm Extra Fine @BBL H2DP", "sub_path": "process/0.08mm Extra Fine @BBL H2DP.json" }, + { + "name": "0.08mm High Quality @BBL H2C", + "sub_path": "process/0.08mm High Quality @BBL H2C.json" + }, { "name": "0.08mm High Quality @BBL X2D", "sub_path": "process/0.08mm High Quality @BBL X2D.json" }, + { + "name": "0.10mm Standard @BBL H2C 0.2 nozzle", + "sub_path": "process/0.10mm Standard @BBL H2C 0.2 nozzle.json" + }, { "name": "0.10mm Standard @BBL H2D 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL H2D 0.2 nozzle.json" @@ -279,6 +291,10 @@ "name": "0.10mm Standard @BBL X2D 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL X2D 0.2 nozzle.json" }, + { + "name": "0.12mm Balanced Quality @BBL H2C 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @BBL H2C 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @BBL H2D 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @BBL H2D 0.2 nozzle.json" @@ -299,6 +315,10 @@ "name": "0.12mm Fine @BBL H2DP", "sub_path": "process/0.12mm Fine @BBL H2DP.json" }, + { + "name": "0.12mm High Quality @BBL H2C", + "sub_path": "process/0.12mm High Quality @BBL H2C.json" + }, { "name": "0.12mm High Quality @BBL X2D", "sub_path": "process/0.12mm High Quality @BBL X2D.json" @@ -311,10 +331,18 @@ "name": "0.16mm Balanced Quality @BBL H2DP", "sub_path": "process/0.16mm Balanced Quality @BBL H2DP.json" }, + { + "name": "0.16mm High Quality @BBL H2C", + "sub_path": "process/0.16mm High Quality @BBL H2C.json" + }, { "name": "0.16mm High Quality @BBL X2D", "sub_path": "process/0.16mm High Quality @BBL X2D.json" }, + { + "name": "0.16mm Standard @BBL H2C", + "sub_path": "process/0.16mm Standard @BBL H2C.json" + }, { "name": "0.16mm Standard @BBL H2D", "sub_path": "process/0.16mm Standard @BBL H2D.json" @@ -327,6 +355,10 @@ "name": "0.16mm Standard @BBL X2D", "sub_path": "process/0.16mm Standard @BBL X2D.json" }, + { + "name": "0.18mm Balanced Quality @BBL H2C 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @BBL H2C 0.6 nozzle.json" + }, { "name": "0.18mm Balanced Quality @BBL H2D 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @BBL H2D 0.6 nozzle.json" @@ -347,10 +379,18 @@ "name": "0.20mm Balanced Strength @BBL H2DP", "sub_path": "process/0.20mm Balanced Strength @BBL H2DP.json" }, + { + "name": "0.20mm High Quality @BBL H2C", + "sub_path": "process/0.20mm High Quality @BBL H2C.json" + }, { "name": "0.20mm High Quality @BBL X2D", "sub_path": "process/0.20mm High Quality @BBL X2D.json" }, + { + "name": "0.20mm Standard @BBL H2C", + "sub_path": "process/0.20mm Standard @BBL H2C.json" + }, { "name": "0.20mm Standard @BBL H2D", "sub_path": "process/0.20mm Standard @BBL H2D.json" @@ -363,6 +403,10 @@ "name": "0.20mm Standard @BBL X2D", "sub_path": "process/0.20mm Standard @BBL X2D.json" }, + { + "name": "0.24mm Standard @BBL H2C", + "sub_path": "process/0.24mm Standard @BBL H2C.json" + }, { "name": "0.24mm Standard @BBL H2D", "sub_path": "process/0.24mm Standard @BBL H2D.json" @@ -379,6 +423,10 @@ "name": "0.24mm Balanced Quality @BBL X2D 0.6 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL X2D 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Strength @BBL H2C 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Strength @BBL H2C 0.6 nozzle.json" + }, { "name": "0.24mm Balanced Strength @BBL H2D 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @BBL H2D 0.6 nozzle.json" @@ -387,6 +435,10 @@ "name": "0.24mm Balanced Strength @BBL H2DP 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @BBL H2DP 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @BBL H2C 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL H2C 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2D 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2D 0.8 nozzle.json" @@ -399,6 +451,10 @@ "name": "0.24mm Balanced Quality @BBL X2D 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL X2D 0.8 nozzle.json" }, + { + "name": "0.30mm Standard @BBL H2C 0.6 nozzle", + "sub_path": "process/0.30mm Standard @BBL H2C 0.6 nozzle.json" + }, { "name": "0.30mm Standard @BBL H2D 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL H2D 0.6 nozzle.json" @@ -415,6 +471,10 @@ "name": "0.32mm Balanced Quality @BBL X2D 0.8 nozzle", "sub_path": "process/0.32mm Balanced Quality @BBL X2D 0.8 nozzle.json" }, + { + "name": "0.32mm Balanced Strength @BBL H2C 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Strength @BBL H2C 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Strength @BBL H2D 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @BBL H2D 0.8 nozzle.json" @@ -423,6 +483,10 @@ "name": "0.32mm Balanced Strength @BBL H2DP 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @BBL H2DP 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @BBL H2C 0.8 nozzle", + "sub_path": "process/0.40mm Standard @BBL H2C 0.8 nozzle.json" + }, { "name": "0.40mm Standard @BBL H2D 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL H2D 0.8 nozzle.json" @@ -491,6 +555,10 @@ "name": "0.08mm High Quality @BBL A1M", "sub_path": "process/0.08mm High Quality @BBL A1M.json" }, + { + "name": "0.08mm High Quality @BBL A2L", + "sub_path": "process/0.08mm High Quality @BBL A2L.json" + }, { "name": "0.08mm High Quality @BBL H2S", "sub_path": "process/0.08mm High Quality @BBL H2S.json" @@ -515,6 +583,10 @@ "name": "0.08mm High Quality @BBL A1M 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL A1M 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @BBL A2L 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @BBL A2L 0.2 nozzle.json" + }, { "name": "0.08mm High Quality @BBL H2S 0.2 nozzle", "sub_path": "process/0.08mm High Quality @BBL H2S 0.2 nozzle.json" @@ -571,6 +643,10 @@ "name": "0.10mm Standard @BBL A1M 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL A1M 0.2 nozzle.json" }, + { + "name": "0.10mm Standard @BBL A2L 0.2 nozzle", + "sub_path": "process/0.10mm Standard @BBL A2L 0.2 nozzle.json" + }, { "name": "0.10mm Standard @BBL H2S 0.2 nozzle", "sub_path": "process/0.10mm Standard @BBL H2S 0.2 nozzle.json" @@ -611,6 +687,10 @@ "name": "0.12mm High Quality @BBL A1M", "sub_path": "process/0.12mm High Quality @BBL A1M.json" }, + { + "name": "0.12mm High Quality @BBL A2L", + "sub_path": "process/0.12mm High Quality @BBL A2L.json" + }, { "name": "0.12mm High Quality @BBL H2S", "sub_path": "process/0.12mm High Quality @BBL H2S.json" @@ -627,6 +707,10 @@ "name": "0.12mm High Quality @BBL X1C", "sub_path": "process/0.12mm High Quality @BBL X1C.json" }, + { + "name": "0.12mm Balanced Quality @BBL A2L 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @BBL H2S 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json" @@ -675,6 +759,10 @@ "name": "0.16mm High Quality @BBL A1M", "sub_path": "process/0.16mm High Quality @BBL A1M.json" }, + { + "name": "0.16mm High Quality @BBL A2L", + "sub_path": "process/0.16mm High Quality @BBL A2L.json" + }, { "name": "0.16mm High Quality @BBL H2S", "sub_path": "process/0.16mm High Quality @BBL H2S.json" @@ -707,6 +795,10 @@ "name": "0.16mm Optimal @BBL X1C", "sub_path": "process/0.16mm Optimal @BBL X1C.json" }, + { + "name": "0.16mm Standard @BBL A2L", + "sub_path": "process/0.16mm Standard @BBL A2L.json" + }, { "name": "0.16mm Standard @BBL H2S", "sub_path": "process/0.16mm Standard @BBL H2S.json" @@ -715,6 +807,10 @@ "name": "0.16mm Standard @BBL P2S", "sub_path": "process/0.16mm Standard @BBL P2S.json" }, + { + "name": "0.18mm Balanced Quality @BBL A2L 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json" + }, { "name": "0.18mm Balanced Quality @BBL H2S 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json" @@ -739,6 +835,10 @@ "name": "0.18mm Standard @BBL X1C 0.6 nozzle", "sub_path": "process/0.18mm Standard @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.20mm High Quality @BBL A2L", + "sub_path": "process/0.20mm High Quality @BBL A2L.json" + }, { "name": "0.20mm High Quality @BBL H2S", "sub_path": "process/0.20mm High Quality @BBL H2S.json" @@ -755,6 +855,10 @@ "name": "0.20mm Standard @BBL A1M", "sub_path": "process/0.20mm Standard @BBL A1M.json" }, + { + "name": "0.20mm Standard @BBL A2L", + "sub_path": "process/0.20mm Standard @BBL A2L.json" + }, { "name": "0.20mm Standard @BBL H2S", "sub_path": "process/0.20mm Standard @BBL H2S.json" @@ -771,6 +875,10 @@ "name": "0.20mm Standard @BBL X1C", "sub_path": "process/0.20mm Standard @BBL X1C.json" }, + { + "name": "0.20mm Steady @BBL A2L", + "sub_path": "process/0.20mm Steady @BBL A2L.json" + }, { "name": "0.20mm Strength @BBL A1", "sub_path": "process/0.20mm Strength @BBL A1.json" @@ -803,6 +911,10 @@ "name": "0.24mm Draft @BBL X1C", "sub_path": "process/0.24mm Draft @BBL X1C.json" }, + { + "name": "0.24mm Standard @BBL A2L", + "sub_path": "process/0.24mm Standard @BBL A2L.json" + }, { "name": "0.24mm Standard @BBL H2S", "sub_path": "process/0.24mm Standard @BBL H2S.json" @@ -811,6 +923,10 @@ "name": "0.24mm Standard @BBL P2S", "sub_path": "process/0.24mm Standard @BBL P2S.json" }, + { + "name": "0.24mm Balanced Quality @BBL A2L 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2S 0.6 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json" @@ -835,6 +951,10 @@ "name": "0.24mm Standard @BBL X1C 0.6 nozzle", "sub_path": "process/0.24mm Standard @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @BBL A2L 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Quality @BBL H2S 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json" @@ -883,6 +1003,10 @@ "name": "0.30mm Standard @BBL A1M 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL A1M 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @BBL A2L 0.6 nozzle", + "sub_path": "process/0.30mm Standard @BBL A2L 0.6 nozzle.json" + }, { "name": "0.30mm Standard @BBL H2S 0.6 nozzle", "sub_path": "process/0.30mm Standard @BBL H2S 0.6 nozzle.json" @@ -919,6 +1043,10 @@ "name": "0.30mm Strength @BBL X1C 0.6 nozzle", "sub_path": "process/0.30mm Strength @BBL X1C 0.6 nozzle.json" }, + { + "name": "0.32mm Balanced Quality @BBL A2L 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Quality @BBL H2S 0.8 nozzle", "sub_path": "process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json" @@ -967,6 +1095,10 @@ "name": "0.40mm Standard @BBL A1M 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL A1M 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @BBL A2L 0.8 nozzle", + "sub_path": "process/0.40mm Standard @BBL A2L 0.8 nozzle.json" + }, { "name": "0.40mm Standard @BBL H2S 0.8 nozzle", "sub_path": "process/0.40mm Standard @BBL H2S 0.8 nozzle.json" @@ -1034,138 +1166,6 @@ { "name": "0.56mm Standard @BBL X1C 0.8 nozzle", "sub_path": "process/0.56mm Standard @BBL X1C 0.8 nozzle.json" - }, - { - "name": "0.08mm High Quality @BBL A2L", - "sub_path": "process/0.08mm High Quality @BBL A2L.json" - }, - { - "name": "0.08mm High Quality @BBL A2L 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.08mm High Quality @BBL H2C", - "sub_path": "process/0.08mm High Quality @BBL H2C.json" - }, - { - "name": "0.08mm High Quality @BBL H2C 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @BBL A2L 0.2 nozzle", - "sub_path": "process/0.10mm Standard @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @BBL H2C 0.2 nozzle", - "sub_path": "process/0.10mm Standard @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @BBL A2L 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @BBL H2C 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @BBL H2C 0.2 nozzle.json" - }, - { - "name": "0.12mm High Quality @BBL A2L", - "sub_path": "process/0.12mm High Quality @BBL A2L.json" - }, - { - "name": "0.12mm High Quality @BBL H2C", - "sub_path": "process/0.12mm High Quality @BBL H2C.json" - }, - { - "name": "0.16mm High Quality @BBL A2L", - "sub_path": "process/0.16mm High Quality @BBL A2L.json" - }, - { - "name": "0.16mm High Quality @BBL H2C", - "sub_path": "process/0.16mm High Quality @BBL H2C.json" - }, - { - "name": "0.16mm Standard @BBL A2L", - "sub_path": "process/0.16mm Standard @BBL A2L.json" - }, - { - "name": "0.16mm Standard @BBL H2C", - "sub_path": "process/0.16mm Standard @BBL H2C.json" - }, - { - "name": "0.18mm Balanced Quality @BBL A2L 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.18mm Balanced Quality @BBL H2C 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.20mm High Quality @BBL A2L", - "sub_path": "process/0.20mm High Quality @BBL A2L.json" - }, - { - "name": "0.20mm High Quality @BBL H2C", - "sub_path": "process/0.20mm High Quality @BBL H2C.json" - }, - { - "name": "0.20mm Standard @BBL A2L", - "sub_path": "process/0.20mm Standard @BBL A2L.json" - }, - { - "name": "0.20mm Standard @BBL H2C", - "sub_path": "process/0.20mm Standard @BBL H2C.json" - }, - { - "name": "0.20mm Steady @BBL A2L", - "sub_path": "process/0.20mm Steady @BBL A2L.json" - }, - { - "name": "0.24mm Balanced Quality @BBL A2L 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @BBL A2L 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @BBL H2C 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @BBL H2C 0.8 nozzle.json" - }, - { - "name": "0.24mm Balanced Strength @BBL H2C 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Strength @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.24mm Standard @BBL A2L", - "sub_path": "process/0.24mm Standard @BBL A2L.json" - }, - { - "name": "0.24mm Standard @BBL H2C", - "sub_path": "process/0.24mm Standard @BBL H2C.json" - }, - { - "name": "0.30mm Standard @BBL A2L 0.6 nozzle", - "sub_path": "process/0.30mm Standard @BBL A2L 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @BBL H2C 0.6 nozzle", - "sub_path": "process/0.30mm Standard @BBL H2C 0.6 nozzle.json" - }, - { - "name": "0.32mm Balanced Quality @BBL A2L 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.32mm Balanced Strength @BBL H2C 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Strength @BBL H2C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @BBL A2L 0.8 nozzle", - "sub_path": "process/0.40mm Standard @BBL A2L 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @BBL H2C 0.8 nozzle", - "sub_path": "process/0.40mm Standard @BBL H2C 0.8 nozzle.json" } ], "filament_list": [ @@ -1733,6 +1733,10 @@ "name": "Bambu PLA Metal @base", "sub_path": "filament/Bambu PLA Metal @base.json" }, + { + "name": "Bambu PLA Pure @base", + "sub_path": "filament/Bambu PLA Pure @base.json" + }, { "name": "Bambu PLA Silk @base", "sub_path": "filament/Bambu PLA Silk @base.json" @@ -2077,6 +2081,22 @@ "name": "Bambu ABS @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu ABS @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu ABS @BBL H2C", + "sub_path": "filament/Bambu ABS @BBL H2C.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu ABS @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu ABS @BBL H2D", "sub_path": "filament/Bambu ABS @BBL H2D.json" @@ -2193,6 +2213,14 @@ "name": "Bambu ABS-GF @BBL A1", "sub_path": "filament/Bambu ABS-GF @BBL A1.json" }, + { + "name": "Bambu ABS-GF @BBL H2C", + "sub_path": "filament/Bambu ABS-GF @BBL H2C.json" + }, + { + "name": "Bambu ABS-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ABS-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ABS-GF @BBL H2D", "sub_path": "filament/Bambu ABS-GF @BBL H2D.json" @@ -2229,6 +2257,14 @@ "name": "Bambu Support for ABS @BBL A1", "sub_path": "filament/Bambu Support for ABS @BBL A1.json" }, + { + "name": "Bambu Support for ABS @BBL H2C", + "sub_path": "filament/Bambu Support for ABS @BBL H2C.json" + }, + { + "name": "Bambu Support for ABS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support for ABS @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support for ABS @BBL H2D", "sub_path": "filament/Bambu Support for ABS @BBL H2D.json" @@ -2273,6 +2309,18 @@ "name": "Generic ABS @BBL A1 0.2 nozzle", "sub_path": "filament/Generic ABS @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic ABS @BBL H2C", + "sub_path": "filament/Generic ABS @BBL H2C.json" + }, + { + "name": "Generic ABS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic ABS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic ABS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic ABS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic ABS @BBL H2D", "sub_path": "filament/Generic ABS @BBL H2D.json" @@ -2385,6 +2433,22 @@ "name": "Bambu ASA @BBL A1 0.6 nozzle", "sub_path": "filament/Bambu ASA @BBL A1 0.6 nozzle.json" }, + { + "name": "Bambu ASA @BBL H2C", + "sub_path": "filament/Bambu ASA @BBL H2C.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu ASA @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu ASA @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu ASA @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu ASA @BBL H2D 0.2 nozzle.json" @@ -2497,6 +2561,14 @@ "name": "Bambu ASA-Aero @BBL A1", "sub_path": "filament/Bambu ASA-Aero @BBL A1.json" }, + { + "name": "Bambu ASA-Aero @BBL H2C", + "sub_path": "filament/Bambu ASA-Aero @BBL H2C.json" + }, + { + "name": "Bambu ASA-Aero @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ASA-Aero @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ASA-Aero @BBL H2D", "sub_path": "filament/Bambu ASA-Aero @BBL H2D.json" @@ -2537,6 +2609,14 @@ "name": "Bambu ASA-CF @BBL A1 0.6 nozzle", "sub_path": "filament/Bambu ASA-CF @BBL A1 0.6 nozzle.json" }, + { + "name": "Bambu ASA-CF @BBL H2C", + "sub_path": "filament/Bambu ASA-CF @BBL H2C.json" + }, + { + "name": "Bambu ASA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu ASA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu ASA-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu ASA-CF @BBL H2D 0.4 nozzle.json" @@ -2605,6 +2685,18 @@ "name": "Generic ASA @BBL A1 0.2 nozzle", "sub_path": "filament/Generic ASA @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic ASA @BBL H2C", + "sub_path": "filament/Generic ASA @BBL H2C.json" + }, + { + "name": "Generic ASA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic ASA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic ASA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic ASA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic ASA @BBL H2D", "sub_path": "filament/Generic ASA @BBL H2D.json" @@ -2693,6 +2785,18 @@ "name": "Generic BVOH @BBL A1M", "sub_path": "filament/Generic BVOH @BBL A1M.json" }, + { + "name": "Generic BVOH @BBL A2L", + "sub_path": "filament/Generic BVOH @BBL A2L.json" + }, + { + "name": "Generic BVOH @BBL H2C", + "sub_path": "filament/Generic BVOH @BBL H2C.json" + }, + { + "name": "Generic BVOH @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic BVOH @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic BVOH @BBL H2D", "sub_path": "filament/Generic BVOH @BBL H2D.json" @@ -2729,6 +2833,18 @@ "name": "Generic EVA @BBL A1M", "sub_path": "filament/Generic EVA @BBL A1M.json" }, + { + "name": "Generic EVA @BBL A2L", + "sub_path": "filament/Generic EVA @BBL A2L.json" + }, + { + "name": "Generic EVA @BBL H2C", + "sub_path": "filament/Generic EVA @BBL H2C.json" + }, + { + "name": "Generic EVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic EVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic EVA @BBL H2D", "sub_path": "filament/Generic EVA @BBL H2D.json" @@ -2781,6 +2897,26 @@ "name": "Generic HIPS @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic HIPS @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic HIPS @BBL A2L", + "sub_path": "filament/Generic HIPS @BBL A2L.json" + }, + { + "name": "Generic HIPS @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic HIPS @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic HIPS @BBL H2C", + "sub_path": "filament/Generic HIPS @BBL H2C.json" + }, + { + "name": "Generic HIPS @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic HIPS @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic HIPS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic HIPS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic HIPS @BBL H2D", "sub_path": "filament/Generic HIPS @BBL H2D.json" @@ -2849,6 +2985,14 @@ "name": "Bambu PA-CF @BBL A1", "sub_path": "filament/Bambu PA-CF @BBL A1.json" }, + { + "name": "Bambu PA-CF @BBL H2C", + "sub_path": "filament/Bambu PA-CF @BBL H2C.json" + }, + { + "name": "Bambu PA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA-CF @BBL H2D", "sub_path": "filament/Bambu PA-CF @BBL H2D.json" @@ -2889,6 +3033,14 @@ "name": "Bambu PA6-CF @BBL A1", "sub_path": "filament/Bambu PA6-CF @BBL A1.json" }, + { + "name": "Bambu PA6-CF @BBL H2C", + "sub_path": "filament/Bambu PA6-CF @BBL H2C.json" + }, + { + "name": "Bambu PA6-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA6-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA6-CF @BBL H2D", "sub_path": "filament/Bambu PA6-CF @BBL H2D.json" @@ -2925,6 +3077,14 @@ "name": "Bambu PA6-GF @BBL A1", "sub_path": "filament/Bambu PA6-GF @BBL A1.json" }, + { + "name": "Bambu PA6-GF @BBL H2C", + "sub_path": "filament/Bambu PA6-GF @BBL H2C.json" + }, + { + "name": "Bambu PA6-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PA6-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PA6-GF @BBL H2D", "sub_path": "filament/Bambu PA6-GF @BBL H2D.json" @@ -2961,6 +3121,14 @@ "name": "Bambu PAHT-CF @BBL A1", "sub_path": "filament/Bambu PAHT-CF @BBL A1.json" }, + { + "name": "Bambu PAHT-CF @BBL H2C", + "sub_path": "filament/Bambu PAHT-CF @BBL H2C.json" + }, + { + "name": "Bambu PAHT-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PAHT-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PAHT-CF @BBL H2D", "sub_path": "filament/Bambu PAHT-CF @BBL H2D.json" @@ -2997,6 +3165,14 @@ "name": "Bambu Support For PA/PET @BBL A1", "sub_path": "filament/Bambu Support For PA PET @BBL A1.json" }, + { + "name": "Bambu Support For PA/PET @BBL H2C", + "sub_path": "filament/Bambu Support For PA PET @BBL H2C.json" + }, + { + "name": "Bambu Support For PA/PET @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PA PET @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PA/PET @BBL H2D", "sub_path": "filament/Bambu Support For PA PET @BBL H2D.json" @@ -3033,6 +3209,14 @@ "name": "Bambu Support G @BBL A1", "sub_path": "filament/Bambu Support G @BBL A1.json" }, + { + "name": "Bambu Support G @BBL H2C", + "sub_path": "filament/Bambu Support G @BBL H2C.json" + }, + { + "name": "Bambu Support G @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support G @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support G @BBL H2D", "sub_path": "filament/Bambu Support G @BBL H2D.json" @@ -3121,6 +3305,14 @@ "name": "Generic PA", "sub_path": "filament/Generic PA.json" }, + { + "name": "Generic PA @BBL H2C", + "sub_path": "filament/Generic PA @BBL H2C.json" + }, + { + "name": "Generic PA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PA @BBL H2D", "sub_path": "filament/Generic PA @BBL H2D.json" @@ -3201,6 +3393,22 @@ "name": "Bambu PC @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu PC @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu PC @BBL H2C", + "sub_path": "filament/Bambu PC @BBL H2C.json" + }, + { + "name": "Bambu PC @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PC @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PC @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PC @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PC @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PC @BBL H2D 0.2 nozzle.json" @@ -3321,6 +3529,18 @@ "name": "Bambu PC FR @BBL A1 0.2 nozzle", "sub_path": "filament/Bambu PC FR @BBL A1 0.2 nozzle.json" }, + { + "name": "Bambu PC FR @BBL H2C", + "sub_path": "filament/Bambu PC FR @BBL H2C.json" + }, + { + "name": "Bambu PC FR @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PC FR @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PC FR @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PC FR @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PC FR @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PC FR @BBL H2D 0.2 nozzle.json" @@ -3457,6 +3677,18 @@ "name": "Generic PC @BBL A1 0.2 nozzle", "sub_path": "filament/Generic PC @BBL A1 0.2 nozzle.json" }, + { + "name": "Generic PC @BBL H2C", + "sub_path": "filament/Generic PC @BBL H2C.json" + }, + { + "name": "Generic PC @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PC @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PC @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PC @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PC @BBL H2D", "sub_path": "filament/Generic PC @BBL H2D.json" @@ -3505,6 +3737,18 @@ "name": "Generic PCTG @BBL A1M", "sub_path": "filament/Generic PCTG @BBL A1M.json" }, + { + "name": "Generic PCTG @BBL A2L", + "sub_path": "filament/Generic PCTG @BBL A2L.json" + }, + { + "name": "Generic PCTG @BBL H2C", + "sub_path": "filament/Generic PCTG @BBL H2C.json" + }, + { + "name": "Generic PCTG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PCTG @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PCTG @BBL H2D", "sub_path": "filament/Generic PCTG @BBL H2D.json" @@ -3541,6 +3785,18 @@ "name": "Generic PE @BBL A1M", "sub_path": "filament/Generic PE @BBL A1M.json" }, + { + "name": "Generic PE @BBL A2L", + "sub_path": "filament/Generic PE @BBL A2L.json" + }, + { + "name": "Generic PE @BBL H2C", + "sub_path": "filament/Generic PE @BBL H2C.json" + }, + { + "name": "Generic PE @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PE @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PE @BBL H2D", "sub_path": "filament/Generic PE @BBL H2D.json" @@ -3577,6 +3833,18 @@ "name": "Generic PE-CF @BBL A1M", "sub_path": "filament/Generic PE-CF @BBL A1M.json" }, + { + "name": "Generic PE-CF @BBL A2L", + "sub_path": "filament/Generic PE-CF @BBL A2L.json" + }, + { + "name": "Generic PE-CF @BBL H2C", + "sub_path": "filament/Generic PE-CF @BBL H2C.json" + }, + { + "name": "Generic PE-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PE-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PE-CF @BBL H2D", "sub_path": "filament/Generic PE-CF @BBL H2D.json" @@ -3841,6 +4109,14 @@ "name": "Bambu PET-CF @BBL A1", "sub_path": "filament/Bambu PET-CF @BBL A1.json" }, + { + "name": "Bambu PET-CF @BBL H2C", + "sub_path": "filament/Bambu PET-CF @BBL H2C.json" + }, + { + "name": "Bambu PET-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PET-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PET-CF @BBL H2D", "sub_path": "filament/Bambu PET-CF @BBL H2D.json" @@ -3901,6 +4177,34 @@ "name": "Bambu PETG Basic @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG Basic @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG Basic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C", + "sub_path": "filament/Bambu PETG Basic @BBL H2C.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Basic @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG Basic @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG Basic @BBL H2D 0.2 nozzle.json" @@ -3997,6 +4301,38 @@ "name": "Bambu PETG HF @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG HF @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG HF @BBL A2L", + "sub_path": "filament/Bambu PETG HF @BBL A2L.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C", + "sub_path": "filament/Bambu PETG HF @BBL H2C.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PETG HF @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PETG HF @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PETG HF @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG HF @BBL H2D 0.2 nozzle.json" @@ -4105,6 +4441,34 @@ "name": "Bambu PETG Translucent @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PETG Translucent @BBL A2L", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PETG Translucent @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG Translucent @BBL H2D 0.2 nozzle", "sub_path": "filament/Bambu PETG Translucent @BBL H2D 0.2 nozzle.json" @@ -4189,6 +4553,26 @@ "name": "Bambu PETG-CF @BBL A1M", "sub_path": "filament/Bambu PETG-CF @BBL A1M.json" }, + { + "name": "Bambu PETG-CF @BBL A2L", + "sub_path": "filament/Bambu PETG-CF @BBL A2L.json" + }, + { + "name": "Bambu PETG-CF @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PETG-CF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PETG-CF @BBL H2C", + "sub_path": "filament/Bambu PETG-CF @BBL H2C.json" + }, + { + "name": "Bambu PETG-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PETG-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PETG-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu PETG-CF @BBL H2D 0.4 nozzle.json" @@ -4305,6 +4689,26 @@ "name": "Generic PETG @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PETG @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PETG @BBL A2L", + "sub_path": "filament/Generic PETG @BBL A2L.json" + }, + { + "name": "Generic PETG @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PETG @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PETG @BBL H2C", + "sub_path": "filament/Generic PETG @BBL H2C.json" + }, + { + "name": "Generic PETG @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PETG @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PETG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG @BBL H2D", "sub_path": "filament/Generic PETG @BBL H2D.json" @@ -4397,6 +4801,26 @@ "name": "Generic PETG HF @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PETG HF @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PETG HF @BBL A2L", + "sub_path": "filament/Generic PETG HF @BBL A2L.json" + }, + { + "name": "Generic PETG HF @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PETG HF @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PETG HF @BBL H2C", + "sub_path": "filament/Generic PETG HF @BBL H2C.json" + }, + { + "name": "Generic PETG HF @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PETG HF @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PETG HF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG HF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG HF @BBL H2D", "sub_path": "filament/Generic PETG HF @BBL H2D.json" @@ -4469,6 +4893,18 @@ "name": "Generic PETG-CF @BBL A1M", "sub_path": "filament/P1P/Generic PETG-CF @BBL A1M.json" }, + { + "name": "Generic PETG-CF @BBL A2L", + "sub_path": "filament/Generic PETG-CF @BBL A2L.json" + }, + { + "name": "Generic PETG-CF @BBL H2C", + "sub_path": "filament/Generic PETG-CF @BBL H2C.json" + }, + { + "name": "Generic PETG-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PETG-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PETG-CF @BBL H2D", "sub_path": "filament/Generic PETG-CF @BBL H2D.json" @@ -4593,6 +5029,18 @@ "name": "Generic PHA @BBL A1M", "sub_path": "filament/Generic PHA @BBL A1M.json" }, + { + "name": "Generic PHA @BBL A2L", + "sub_path": "filament/Generic PHA @BBL A2L.json" + }, + { + "name": "Generic PHA @BBL H2C", + "sub_path": "filament/Generic PHA @BBL H2C.json" + }, + { + "name": "Generic PHA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PHA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PHA @BBL H2D", "sub_path": "filament/Generic PHA @BBL H2D.json" @@ -5049,6 +5497,26 @@ "name": "Bambu PLA Aero @BBL A1M", "sub_path": "filament/Bambu PLA Aero @BBL A1M.json" }, + { + "name": "Bambu PLA Aero @BBL A2L", + "sub_path": "filament/Bambu PLA Aero @BBL A2L.json" + }, + { + "name": "Bambu PLA Aero @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Aero @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Aero @BBL H2C", + "sub_path": "filament/Bambu PLA Aero @BBL H2C.json" + }, + { + "name": "Bambu PLA Aero @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Aero @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Aero @BBL H2D", "sub_path": "filament/Bambu PLA Aero @BBL H2D.json" @@ -5101,6 +5569,38 @@ "name": "Bambu PLA Basic @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Basic @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Basic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C", + "sub_path": "filament/Bambu PLA Basic @BBL H2C.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Basic @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Basic @BBL H2D", "sub_path": "filament/Bambu PLA Basic @BBL H2D.json" @@ -5217,6 +5717,34 @@ "name": "Bambu PLA Dynamic @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Dynamic @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Dynamic @BBL A2L", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Dynamic @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Dynamic @BBL H2D", "sub_path": "filament/Bambu PLA Dynamic @BBL H2D.json" @@ -5309,6 +5837,34 @@ "name": "Bambu PLA Galaxy @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Galaxy @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Galaxy @BBL A2L", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Galaxy @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Galaxy @BBL H2D", "sub_path": "filament/Bambu PLA Galaxy @BBL H2D.json" @@ -5401,6 +5957,26 @@ "name": "Bambu PLA Glow @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Glow @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Glow @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Glow @BBL H2C", + "sub_path": "filament/Bambu PLA Glow @BBL H2C.json" + }, + { + "name": "Bambu PLA Glow @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Glow @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Glow @BBL H2D", "sub_path": "filament/Bambu PLA Glow @BBL H2D.json" @@ -5477,6 +6053,34 @@ "name": "Bambu PLA Lite @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Lite @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Lite @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C", + "sub_path": "filament/Bambu PLA Lite @BBL H2C.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Lite @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Lite @BBL H2D", "sub_path": "filament/Bambu PLA Lite @BBL H2D.json" @@ -5569,6 +6173,26 @@ "name": "Bambu PLA Marble @BBL A1M", "sub_path": "filament/Bambu PLA Marble @BBL A1M.json" }, + { + "name": "Bambu PLA Marble @BBL A2L", + "sub_path": "filament/Bambu PLA Marble @BBL A2L.json" + }, + { + "name": "Bambu PLA Marble @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Marble @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Marble @BBL H2C", + "sub_path": "filament/Bambu PLA Marble @BBL H2C.json" + }, + { + "name": "Bambu PLA Marble @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Marble @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Marble @BBL H2D", "sub_path": "filament/Bambu PLA Marble @BBL H2D.json" @@ -5625,6 +6249,38 @@ "name": "Bambu PLA Matte @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Matte @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Matte @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C", + "sub_path": "filament/Bambu PLA Matte @BBL H2C.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Matte @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Matte @BBL H2D", "sub_path": "filament/Bambu PLA Matte @BBL H2D.json" @@ -5741,6 +6397,34 @@ "name": "Bambu PLA Metal @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Metal @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Metal @BBL A2L", + "sub_path": "filament/Bambu PLA Metal @BBL A2L.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C", + "sub_path": "filament/Bambu PLA Metal @BBL H2C.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Metal @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Metal @BBL H2D", "sub_path": "filament/Bambu PLA Metal @BBL H2D.json" @@ -5813,6 +6497,62 @@ "name": "Bambu PLA Metal @BBL X2D 0.4 nozzle", "sub_path": "filament/Bambu PLA Metal @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PLA Pure @BBL A2L", + "sub_path": "filament/Bambu PLA Pure @BBL A2L.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2C", + "sub_path": "filament/Bambu PLA Pure @BBL H2C.json" + }, + { + "name": "Bambu PLA Pure @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D", + "sub_path": "filament/Bambu PLA Pure @BBL H2D.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2D 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2DP 0.8 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Pure @BBL H2S", + "sub_path": "filament/Bambu PLA Pure @BBL H2S.json" + }, + { + "name": "Bambu PLA Pure @BBL H2S 0.2 nozzle", + "sub_path": "filament/Bambu PLA Pure @BBL H2S 0.2 nozzle.json" + }, { "name": "Bambu PLA Silk @BBL A1", "sub_path": "filament/Bambu PLA Silk @BBL A1.json" @@ -5829,6 +6569,34 @@ "name": "Bambu PLA Silk @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Silk @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Silk @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C", + "sub_path": "filament/Bambu PLA Silk @BBL H2C.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Silk @BBL H2D", "sub_path": "filament/Bambu PLA Silk @BBL H2D.json" @@ -5917,6 +6685,34 @@ "name": "Bambu PLA Silk+ @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Silk+ @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Silk+ @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Silk+ @BBL H2D", "sub_path": "filament/Bambu PLA Silk+ @BBL H2D.json" @@ -5997,6 +6793,26 @@ "name": "Bambu PLA Sparkle @BBL A1M", "sub_path": "filament/Bambu PLA Sparkle @BBL A1M.json" }, + { + "name": "Bambu PLA Sparkle @BBL A2L", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L.json" + }, + { + "name": "Bambu PLA Sparkle @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Sparkle @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Sparkle @BBL H2C", + "sub_path": "filament/Bambu PLA Sparkle @BBL H2C.json" + }, + { + "name": "Bambu PLA Sparkle @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Sparkle @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Sparkle @BBL H2D", "sub_path": "filament/Bambu PLA Sparkle @BBL H2D.json" @@ -6057,6 +6873,26 @@ "name": "Bambu PLA Tough @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Tough @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Tough @BBL A2L", + "sub_path": "filament/Bambu PLA Tough @BBL A2L.json" + }, + { + "name": "Bambu PLA Tough @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C", + "sub_path": "filament/Bambu PLA Tough @BBL H2C.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Tough @BBL H2D", "sub_path": "filament/Bambu PLA Tough @BBL H2D.json" @@ -6137,6 +6973,38 @@ "name": "Bambu PLA Tough+ @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PLA Tough+ @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.4 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.4 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.6 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Tough+ @BBL H2C 0.8 nozzle", + "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.8 nozzle.json" + }, { "name": "Bambu PLA Tough+ @BBL H2D", "sub_path": "filament/Bambu PLA Tough+ @BBL H2D.json" @@ -6261,6 +7129,30 @@ "name": "Bambu PLA Translucent @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PLA Translucent @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PLA Translucent @BBL A2L", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Translucent @BBL H2C", + "sub_path": "filament/Bambu PLA Translucent @BBL H2C.json" + }, + { + "name": "Bambu PLA Translucent @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu PLA Translucent @BBL H2C 0.2 nozzle.json" + }, { "name": "Bambu PLA Translucent @BBL H2D", "sub_path": "filament/Bambu PLA Translucent @BBL H2D.json" @@ -6357,6 +7249,26 @@ "name": "Bambu PLA Wood @BBL A1M", "sub_path": "filament/Bambu PLA Wood @BBL A1M.json" }, + { + "name": "Bambu PLA Wood @BBL A2L", + "sub_path": "filament/Bambu PLA Wood @BBL A2L.json" + }, + { + "name": "Bambu PLA Wood @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA Wood @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA Wood @BBL H2C", + "sub_path": "filament/Bambu PLA Wood @BBL H2C.json" + }, + { + "name": "Bambu PLA Wood @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA Wood @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA Wood @BBL H2D", "sub_path": "filament/Bambu PLA Wood @BBL H2D.json" @@ -6429,6 +7341,26 @@ "name": "Bambu PLA-CF @BBL A1M 0.8 nozzle", "sub_path": "filament/Bambu PLA-CF @BBL A1M 0.8 nozzle.json" }, + { + "name": "Bambu PLA-CF @BBL A2L", + "sub_path": "filament/Bambu PLA-CF @BBL A2L.json" + }, + { + "name": "Bambu PLA-CF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu PLA-CF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu PLA-CF @BBL H2C", + "sub_path": "filament/Bambu PLA-CF @BBL H2C.json" + }, + { + "name": "Bambu PLA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PLA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PLA-CF @BBL H2D 0.4 nozzle", "sub_path": "filament/Bambu PLA-CF @BBL H2D 0.4 nozzle.json" @@ -6497,6 +7429,34 @@ "name": "Bambu Support For PLA @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support For PLA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support For PLA @BBL A2L", + "sub_path": "filament/Bambu Support For PLA @BBL A2L.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C", + "sub_path": "filament/Bambu Support For PLA @BBL H2C.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PLA @BBL H2D", "sub_path": "filament/Bambu Support For PLA @BBL H2D.json" @@ -6573,6 +7533,26 @@ "name": "Bambu Support For PLA/PETG @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support For PLA-PETG @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support For PLA/PETG @BBL A2L", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support For PLA/PETG @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support For PLA/PETG @BBL H2D", "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2D.json" @@ -6649,6 +7629,26 @@ "name": "Bambu Support W @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu Support W @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu Support W @BBL A2L", + "sub_path": "filament/Bambu Support W @BBL A2L.json" + }, + { + "name": "Bambu Support W @BBL A2L 0.2 nozzle", + "sub_path": "filament/Bambu Support W @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Support W @BBL H2C", + "sub_path": "filament/Bambu Support W @BBL H2C.json" + }, + { + "name": "Bambu Support W @BBL H2C 0.2 nozzle", + "sub_path": "filament/Bambu Support W @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Support W @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu Support W @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu Support W @BBL H2D", "sub_path": "filament/Bambu Support W @BBL H2D.json" @@ -6737,6 +7737,26 @@ "name": "Generic PLA @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PLA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PLA @BBL A2L", + "sub_path": "filament/Generic PLA @BBL A2L.json" + }, + { + "name": "Generic PLA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PLA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PLA @BBL H2C", + "sub_path": "filament/Generic PLA @BBL H2C.json" + }, + { + "name": "Generic PLA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PLA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA @BBL H2D", "sub_path": "filament/Generic PLA @BBL H2D.json" @@ -6829,6 +7849,26 @@ "name": "Generic PLA High Speed @BBL A1M", "sub_path": "filament/Generic PLA High Speed @BBL A1M.json" }, + { + "name": "Generic PLA High Speed @BBL A2L", + "sub_path": "filament/Generic PLA High Speed @BBL A2L.json" + }, + { + "name": "Generic PLA High Speed @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C", + "sub_path": "filament/Generic PLA High Speed @BBL H2C.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PLA High Speed @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA High Speed @BBL H2D", "sub_path": "filament/Generic PLA High Speed @BBL H2D.json" @@ -6893,6 +7933,18 @@ "name": "Generic PLA Silk @BBL A1M", "sub_path": "filament/Generic PLA Silk @BBL A1M.json" }, + { + "name": "Generic PLA Silk @BBL A2L", + "sub_path": "filament/Generic PLA Silk @BBL A2L.json" + }, + { + "name": "Generic PLA Silk @BBL H2C", + "sub_path": "filament/Generic PLA Silk @BBL H2C.json" + }, + { + "name": "Generic PLA Silk @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA Silk @BBL H2D", "sub_path": "filament/Generic PLA Silk @BBL H2D.json" @@ -6937,6 +7989,18 @@ "name": "Generic PLA-CF @BBL A1M", "sub_path": "filament/Generic PLA-CF @BBL A1M.json" }, + { + "name": "Generic PLA-CF @BBL A2L", + "sub_path": "filament/Generic PLA-CF @BBL A2L.json" + }, + { + "name": "Generic PLA-CF @BBL H2C", + "sub_path": "filament/Generic PLA-CF @BBL H2C.json" + }, + { + "name": "Generic PLA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PLA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PLA-CF @BBL H2D", "sub_path": "filament/Generic PLA-CF @BBL H2D.json" @@ -8401,6 +9465,18 @@ "name": "Generic PP @BBL A1M", "sub_path": "filament/Generic PP @BBL A1M.json" }, + { + "name": "Generic PP @BBL A2L", + "sub_path": "filament/Generic PP @BBL A2L.json" + }, + { + "name": "Generic PP @BBL H2C", + "sub_path": "filament/Generic PP @BBL H2C.json" + }, + { + "name": "Generic PP @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP @BBL H2D", "sub_path": "filament/Generic PP @BBL H2D.json" @@ -8433,6 +9509,14 @@ "name": "Generic PP-CF @BBL A1", "sub_path": "filament/Generic PP-CF @BBL A1.json" }, + { + "name": "Generic PP-CF @BBL H2C", + "sub_path": "filament/Generic PP-CF @BBL H2C.json" + }, + { + "name": "Generic PP-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP-CF @BBL H2D", "sub_path": "filament/Generic PP-CF @BBL H2D.json" @@ -8465,6 +9549,14 @@ "name": "Generic PP-GF @BBL A1", "sub_path": "filament/Generic PP-GF @BBL A1.json" }, + { + "name": "Generic PP-GF @BBL H2C", + "sub_path": "filament/Generic PP-GF @BBL H2C.json" + }, + { + "name": "Generic PP-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PP-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PP-GF @BBL H2D", "sub_path": "filament/Generic PP-GF @BBL H2D.json" @@ -8493,6 +9585,14 @@ "name": "Generic PP-GF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PP-GF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PPA-CF @BBL H2C", + "sub_path": "filament/Bambu PPA-CF @BBL H2C.json" + }, + { + "name": "Bambu PPA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PPA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PPA-CF @BBL H2D", "sub_path": "filament/Bambu PPA-CF @BBL H2D.json" @@ -8525,6 +9625,14 @@ "name": "Bambu PPA-CF @BBL X2D 0.4 nozzle", "sub_path": "filament/Bambu PPA-CF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Generic PPA-CF @BBL H2C", + "sub_path": "filament/Generic PPA-CF @BBL H2C.json" + }, + { + "name": "Generic PPA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPA-CF @BBL H2D", "sub_path": "filament/Generic PPA-CF @BBL H2D.json" @@ -8557,6 +9665,14 @@ "name": "Generic PPA-CF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PPA-CF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Generic PPA-GF @BBL H2C", + "sub_path": "filament/Generic PPA-GF @BBL H2C.json" + }, + { + "name": "Generic PPA-GF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPA-GF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPA-GF @BBL H2D", "sub_path": "filament/Generic PPA-GF @BBL H2D.json" @@ -8589,6 +9705,14 @@ "name": "Generic PPA-GF @BBL X2D 0.4 nozzle", "sub_path": "filament/Generic PPA-GF @BBL X2D 0.4 nozzle.json" }, + { + "name": "Bambu PPS-CF @BBL H2C", + "sub_path": "filament/Bambu PPS-CF @BBL H2C.json" + }, + { + "name": "Bambu PPS-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PPS-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PPS-CF @BBL H2D", "sub_path": "filament/Bambu PPS-CF @BBL H2D.json" @@ -8605,6 +9729,14 @@ "name": "Bambu PPS-CF @BBL X1E", "sub_path": "filament/Bambu PPS-CF @BBL X1E.json" }, + { + "name": "Generic PPS @BBL H2C", + "sub_path": "filament/Generic PPS @BBL H2C.json" + }, + { + "name": "Generic PPS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPS @BBL H2D", "sub_path": "filament/Generic PPS @BBL H2D.json" @@ -8621,6 +9753,14 @@ "name": "Generic PPS @BBL X1E", "sub_path": "filament/Generic PPS @BBL X1E.json" }, + { + "name": "Generic PPS-CF @BBL H2C", + "sub_path": "filament/Generic PPS-CF @BBL H2C.json" + }, + { + "name": "Generic PPS-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PPS-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PPS-CF @BBL H2D", "sub_path": "filament/Generic PPS-CF @BBL H2D.json" @@ -8653,6 +9793,18 @@ "name": "Bambu PVA @BBL A1M 0.2 nozzle", "sub_path": "filament/Bambu PVA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Bambu PVA @BBL A2L", + "sub_path": "filament/Bambu PVA @BBL A2L.json" + }, + { + "name": "Bambu PVA @BBL H2C", + "sub_path": "filament/Bambu PVA @BBL H2C.json" + }, + { + "name": "Bambu PVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu PVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu PVA @BBL H2D", "sub_path": "filament/Bambu PVA @BBL H2D.json" @@ -8717,6 +9869,26 @@ "name": "Generic PVA @BBL A1M 0.2 nozzle", "sub_path": "filament/Generic PVA @BBL A1M 0.2 nozzle.json" }, + { + "name": "Generic PVA @BBL A2L", + "sub_path": "filament/Generic PVA @BBL A2L.json" + }, + { + "name": "Generic PVA @BBL A2L 0.2 nozzle", + "sub_path": "filament/Generic PVA @BBL A2L 0.2 nozzle.json" + }, + { + "name": "Generic PVA @BBL H2C", + "sub_path": "filament/Generic PVA @BBL H2C.json" + }, + { + "name": "Generic PVA @BBL H2C 0.2 nozzle", + "sub_path": "filament/Generic PVA @BBL H2C 0.2 nozzle.json" + }, + { + "name": "Generic PVA @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PVA @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PVA @BBL H2D", "sub_path": "filament/Generic PVA @BBL H2D.json" @@ -8861,6 +10033,18 @@ "name": "BETA TPU Matte @BBL X1C", "sub_path": "filament/BETA/BETA TPU Matte @BBL X1C.json" }, + { + "name": "Bambu TPU 85A @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 85A @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 85A @BBL H2C", + "sub_path": "filament/Bambu TPU 85A @BBL H2C.json" + }, { "name": "Bambu TPU 85A @BBL H2D", "sub_path": "filament/Bambu TPU 85A @BBL H2D.json" @@ -8921,6 +10105,26 @@ "name": "Bambu TPU 90A @BBL A1M", "sub_path": "filament/Bambu TPU 90A @BBL A1M.json" }, + { + "name": "Bambu TPU 90A @BBL A2L", + "sub_path": "filament/Bambu TPU 90A @BBL A2L.json" + }, + { + "name": "Bambu TPU 90A @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 90A @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 90A @BBL H2C", + "sub_path": "filament/Bambu TPU 90A @BBL H2C.json" + }, + { + "name": "Bambu TPU 90A @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 90A @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 90A @BBL H2D", "sub_path": "filament/Bambu TPU 90A @BBL H2D.json" @@ -8997,6 +10201,18 @@ "name": "Bambu TPU 95A @BBL A1M", "sub_path": "filament/Bambu TPU 95A @BBL A1M.json" }, + { + "name": "Bambu TPU 95A @BBL A2L", + "sub_path": "filament/Bambu TPU 95A @BBL A2L.json" + }, + { + "name": "Bambu TPU 95A @BBL H2C", + "sub_path": "filament/Bambu TPU 95A @BBL H2C.json" + }, + { + "name": "Bambu TPU 95A @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 95A @BBL H2D", "sub_path": "filament/Bambu TPU 95A @BBL H2D.json" @@ -9041,22 +10257,34 @@ "name": "Bambu TPU 95A HF @BBL A1M", "sub_path": "filament/Bambu TPU 95A HF @BBL A1M.json" }, + { + "name": "Bambu TPU 95A HF @BBL A2L", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L.json" + }, + { + "name": "Bambu TPU 95A HF @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2C", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2C.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU 95A HF @BBL H2D", "sub_path": "filament/Bambu TPU 95A HF @BBL H2D.json" }, - { - "name": "Bambu TPU 95A HF @BBL H2D 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2D 0.4 nozzle.json" - }, { "name": "Bambu TPU 95A HF @BBL H2DP", "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP.json" }, - { - "name": "Bambu TPU 95A HF @BBL H2DP 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP 0.4 nozzle.json" - }, { "name": "Bambu TPU 95A HF @BBL H2S", "sub_path": "filament/Bambu TPU 95A HF @BBL H2S.json" @@ -9101,6 +10329,26 @@ "name": "Bambu TPU for AMS @BBL A1M", "sub_path": "filament/Bambu TPU for AMS @BBL A1M.json" }, + { + "name": "Bambu TPU for AMS @BBL A2L", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L.json" + }, + { + "name": "Bambu TPU for AMS @BBL A2L 0.6 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.6 nozzle.json" + }, + { + "name": "Bambu TPU for AMS @BBL A2L 0.8 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.8 nozzle.json" + }, + { + "name": "Bambu TPU for AMS @BBL H2C", + "sub_path": "filament/Bambu TPU for AMS @BBL H2C.json" + }, + { + "name": "Bambu TPU for AMS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Bambu TPU for AMS @BBL H2C 0.4 nozzle.json" + }, { "name": "Bambu TPU for AMS @BBL H2D", "sub_path": "filament/Bambu TPU for AMS @BBL H2D.json" @@ -9137,6 +10385,14 @@ "name": "Generic TPU", "sub_path": "filament/Generic TPU.json" }, + { + "name": "Generic TPU @BBL H2C", + "sub_path": "filament/Generic TPU @BBL H2C.json" + }, + { + "name": "Generic TPU @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic TPU @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic TPU @BBL H2D", "sub_path": "filament/Generic TPU @BBL H2D.json" @@ -9181,6 +10437,18 @@ "name": "Generic TPU for AMS @BBL A1M", "sub_path": "filament/Generic TPU for AMS @BBL A1M.json" }, + { + "name": "Generic TPU for AMS @BBL A2L", + "sub_path": "filament/Generic TPU for AMS @BBL A2L.json" + }, + { + "name": "Generic TPU for AMS @BBL H2C", + "sub_path": "filament/Generic TPU for AMS @BBL H2C.json" + }, + { + "name": "Generic TPU for AMS @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic TPU for AMS @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic TPU for AMS @BBL H2D", "sub_path": "filament/Generic TPU for AMS @BBL H2D.json" @@ -9273,6 +10541,14 @@ "name": "Generic PA-CF @BBL A1", "sub_path": "filament/Generic PA-CF @BBL A1.json" }, + { + "name": "Generic PA-CF @BBL H2C", + "sub_path": "filament/Generic PA-CF @BBL H2C.json" + }, + { + "name": "Generic PA-CF @BBL H2C 0.4 nozzle", + "sub_path": "filament/Generic PA-CF @BBL H2C 0.4 nozzle.json" + }, { "name": "Generic PA-CF @BBL H2D", "sub_path": "filament/Generic PA-CF @BBL H2D.json" @@ -9425,6 +10701,14 @@ "name": "PolyTerra PLA @BBL X1C 0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra PLA @BBL X1C 0.2 nozzle.json" }, + { + "name": "Bambu TPU 95A HF @BBL H2D 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2D 0.4 nozzle.json" + }, + { + "name": "Bambu TPU 95A HF @BBL H2DP 0.4 nozzle", + "sub_path": "filament/Bambu TPU 95A HF @BBL H2DP 0.4 nozzle.json" + }, { "name": "Generic TPU @BBL A1", "sub_path": "filament/Generic TPU @BBL A1.json" @@ -9433,6 +10717,10 @@ "name": "Generic TPU @BBL A1M", "sub_path": "filament/Generic TPU @BBL A1M.json" }, + { + "name": "Generic TPU @BBL A2L", + "sub_path": "filament/Generic TPU @BBL A2L.json" + }, { "name": "Generic TPU @BBL H2S", "sub_path": "filament/Generic TPU @BBL H2S.json" @@ -9510,7 +10798,7 @@ "sub_path": "filament/COEX/COEX NYLEX PA6-CF @BBL X1C.json" }, { - "name": "COEX NYLEX UNFILLED @BBL X1C", + "name": "COEX NYLEX UNFILLED @BBL X1C", "sub_path": "filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json" }, { @@ -9992,1294 +11280,6 @@ { "name": "fdm_filament_dual_common", "sub_path": "filament/fdm_filament_dual_common.json" - }, - { - "name": "Bambu ABS @BBL H2C", - "sub_path": "filament/Bambu ABS @BBL H2C.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu ABS @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu ABS @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu ABS-GF @BBL H2C", - "sub_path": "filament/Bambu ABS-GF @BBL H2C.json" - }, - { - "name": "Bambu ABS-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ABS-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C", - "sub_path": "filament/Bambu ASA @BBL H2C.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu ASA @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu ASA @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu ASA-Aero @BBL H2C", - "sub_path": "filament/Bambu ASA-Aero @BBL H2C.json" - }, - { - "name": "Bambu ASA-Aero @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ASA-Aero @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu ASA-CF @BBL H2C", - "sub_path": "filament/Bambu ASA-CF @BBL H2C.json" - }, - { - "name": "Bambu ASA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu ASA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA-CF @BBL H2C", - "sub_path": "filament/Bambu PA-CF @BBL H2C.json" - }, - { - "name": "Bambu PA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA6-CF @BBL H2C", - "sub_path": "filament/Bambu PA6-CF @BBL H2C.json" - }, - { - "name": "Bambu PA6-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA6-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PA6-GF @BBL H2C", - "sub_path": "filament/Bambu PA6-GF @BBL H2C.json" - }, - { - "name": "Bambu PA6-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PA6-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PAHT-CF @BBL H2C", - "sub_path": "filament/Bambu PAHT-CF @BBL H2C.json" - }, - { - "name": "Bambu PAHT-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PAHT-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C", - "sub_path": "filament/Bambu PC @BBL H2C.json" - }, - { - "name": "Bambu PC @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PC @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PC @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PC FR @BBL H2C", - "sub_path": "filament/Bambu PC FR @BBL H2C.json" - }, - { - "name": "Bambu PC FR @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PC FR @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PC FR @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PC FR @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PET-CF @BBL H2C", - "sub_path": "filament/Bambu PET-CF @BBL H2C.json" - }, - { - "name": "Bambu PET-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PET-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C", - "sub_path": "filament/Bambu PETG Basic @BBL H2C.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Basic @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG Basic @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L", - "sub_path": "filament/Bambu PETG HF @BBL A2L.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C", - "sub_path": "filament/Bambu PETG HF @BBL H2C.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PETG HF @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PETG HF @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PETG Translucent @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG Translucent @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L", - "sub_path": "filament/Bambu PETG-CF @BBL A2L.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PETG-CF @BBL H2C", - "sub_path": "filament/Bambu PETG-CF @BBL H2C.json" - }, - { - "name": "Bambu PETG-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PETG-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L", - "sub_path": "filament/Bambu PLA Aero @BBL A2L.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Aero @BBL H2C", - "sub_path": "filament/Bambu PLA Aero @BBL H2C.json" - }, - { - "name": "Bambu PLA Aero @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Aero @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C", - "sub_path": "filament/Bambu PLA Basic @BBL H2C.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Basic @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Basic @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Dynamic @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Dynamic @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Galaxy @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Galaxy @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Glow @BBL H2C", - "sub_path": "filament/Bambu PLA Glow @BBL H2C.json" - }, - { - "name": "Bambu PLA Glow @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Glow @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C", - "sub_path": "filament/Bambu PLA Lite @BBL H2C.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Lite @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Lite @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L", - "sub_path": "filament/Bambu PLA Marble @BBL A2L.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Marble @BBL H2C", - "sub_path": "filament/Bambu PLA Marble @BBL H2C.json" - }, - { - "name": "Bambu PLA Marble @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Marble @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C", - "sub_path": "filament/Bambu PLA Matte @BBL H2C.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Matte @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Matte @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L", - "sub_path": "filament/Bambu PLA Metal @BBL A2L.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C", - "sub_path": "filament/Bambu PLA Metal @BBL H2C.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Metal @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Metal @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Pure @base", - "sub_path": "filament/Bambu PLA Pure @base.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L", - "sub_path": "filament/Bambu PLA Pure @BBL A2L.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2C", - "sub_path": "filament/Bambu PLA Pure @BBL H2C.json" - }, - { - "name": "Bambu PLA Pure @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D", - "sub_path": "filament/Bambu PLA Pure @BBL H2D.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2D 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2D 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2DP 0.8 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2DP 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Pure @BBL H2S", - "sub_path": "filament/Bambu PLA Pure @BBL H2S.json" - }, - { - "name": "Bambu PLA Pure @BBL H2S 0.2 nozzle", - "sub_path": "filament/Bambu PLA Pure @BBL H2S 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C", - "sub_path": "filament/Bambu PLA Silk @BBL H2C.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Silk+ @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Silk+ @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Sparkle @BBL H2C", - "sub_path": "filament/Bambu PLA Sparkle @BBL H2C.json" - }, - { - "name": "Bambu PLA Sparkle @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Sparkle @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL A2L", - "sub_path": "filament/Bambu PLA Tough @BBL A2L.json" - }, - { - "name": "Bambu PLA Tough @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C", - "sub_path": "filament/Bambu PLA Tough @BBL H2C.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Tough @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.4 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.4 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.6 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Tough+ @BBL H2C 0.8 nozzle", - "sub_path": "filament/Bambu PLA Tough+ @BBL H2C 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Translucent @BBL H2C", - "sub_path": "filament/Bambu PLA Translucent @BBL H2C.json" - }, - { - "name": "Bambu PLA Translucent @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu PLA Translucent @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L", - "sub_path": "filament/Bambu PLA Wood @BBL A2L.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA Wood @BBL H2C", - "sub_path": "filament/Bambu PLA Wood @BBL H2C.json" - }, - { - "name": "Bambu PLA Wood @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA Wood @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L", - "sub_path": "filament/Bambu PLA-CF @BBL A2L.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu PLA-CF @BBL H2C", - "sub_path": "filament/Bambu PLA-CF @BBL H2C.json" - }, - { - "name": "Bambu PLA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PLA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PPA-CF @BBL H2C", - "sub_path": "filament/Bambu PPA-CF @BBL H2C.json" - }, - { - "name": "Bambu PPA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PPA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PPS-CF @BBL H2C", - "sub_path": "filament/Bambu PPS-CF @BBL H2C.json" - }, - { - "name": "Bambu PPS-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PPS-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu PVA @BBL A2L", - "sub_path": "filament/Bambu PVA @BBL A2L.json" - }, - { - "name": "Bambu PVA @BBL H2C", - "sub_path": "filament/Bambu PVA @BBL H2C.json" - }, - { - "name": "Bambu PVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu PVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PA/PET @BBL H2C", - "sub_path": "filament/Bambu Support For PA PET @BBL H2C.json" - }, - { - "name": "Bambu Support For PA/PET @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PA PET @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L", - "sub_path": "filament/Bambu Support For PLA @BBL A2L.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C", - "sub_path": "filament/Bambu Support For PLA @BBL H2C.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PLA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL A2L", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support For PLA/PETG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support For PLA-PETG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support G @BBL H2C", - "sub_path": "filament/Bambu Support G @BBL H2C.json" - }, - { - "name": "Bambu Support G @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support G @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support W @BBL A2L", - "sub_path": "filament/Bambu Support W @BBL A2L.json" - }, - { - "name": "Bambu Support W @BBL A2L 0.2 nozzle", - "sub_path": "filament/Bambu Support W @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Support W @BBL H2C", - "sub_path": "filament/Bambu Support W @BBL H2C.json" - }, - { - "name": "Bambu Support W @BBL H2C 0.2 nozzle", - "sub_path": "filament/Bambu Support W @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Support W @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support W @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Support for ABS @BBL H2C", - "sub_path": "filament/Bambu Support for ABS @BBL H2C.json" - }, - { - "name": "Bambu Support for ABS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu Support for ABS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 85A @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 85A @BBL H2C", - "sub_path": "filament/Bambu TPU 85A @BBL H2C.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L", - "sub_path": "filament/Bambu TPU 90A @BBL A2L.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 90A @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 90A @BBL H2C", - "sub_path": "filament/Bambu TPU 90A @BBL H2C.json" - }, - { - "name": "Bambu TPU 90A @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 90A @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 95A @BBL A2L", - "sub_path": "filament/Bambu TPU 95A @BBL A2L.json" - }, - { - "name": "Bambu TPU 95A @BBL H2C", - "sub_path": "filament/Bambu TPU 95A @BBL H2C.json" - }, - { - "name": "Bambu TPU 95A @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU 95A HF @BBL H2C", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2C.json" - }, - { - "name": "Bambu TPU 95A HF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU 95A HF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L 0.6 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.6 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL A2L 0.8 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL A2L 0.8 nozzle.json" - }, - { - "name": "Bambu TPU for AMS @BBL H2C", - "sub_path": "filament/Bambu TPU for AMS @BBL H2C.json" - }, - { - "name": "Bambu TPU for AMS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Bambu TPU for AMS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic ABS @BBL H2C", - "sub_path": "filament/Generic ABS @BBL H2C.json" - }, - { - "name": "Generic ABS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic ABS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic ABS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic ABS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic ASA @BBL H2C", - "sub_path": "filament/Generic ASA @BBL H2C.json" - }, - { - "name": "Generic ASA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic ASA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic ASA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic ASA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic BVOH @BBL A2L", - "sub_path": "filament/Generic BVOH @BBL A2L.json" - }, - { - "name": "Generic BVOH @BBL H2C", - "sub_path": "filament/Generic BVOH @BBL H2C.json" - }, - { - "name": "Generic BVOH @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic BVOH @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic EVA @BBL A2L", - "sub_path": "filament/Generic EVA @BBL A2L.json" - }, - { - "name": "Generic EVA @BBL H2C", - "sub_path": "filament/Generic EVA @BBL H2C.json" - }, - { - "name": "Generic EVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic EVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic HIPS @BBL A2L", - "sub_path": "filament/Generic HIPS @BBL A2L.json" - }, - { - "name": "Generic HIPS @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic HIPS @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic HIPS @BBL H2C", - "sub_path": "filament/Generic HIPS @BBL H2C.json" - }, - { - "name": "Generic HIPS @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic HIPS @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic HIPS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic HIPS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PA @BBL H2C", - "sub_path": "filament/Generic PA @BBL H2C.json" - }, - { - "name": "Generic PA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PA-CF @BBL H2C", - "sub_path": "filament/Generic PA-CF @BBL H2C.json" - }, - { - "name": "Generic PA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PC @BBL H2C", - "sub_path": "filament/Generic PC @BBL H2C.json" - }, - { - "name": "Generic PC @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PC @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PC @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PC @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PCTG @BBL A2L", - "sub_path": "filament/Generic PCTG @BBL A2L.json" - }, - { - "name": "Generic PCTG @BBL H2C", - "sub_path": "filament/Generic PCTG @BBL H2C.json" - }, - { - "name": "Generic PCTG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PCTG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PE @BBL A2L", - "sub_path": "filament/Generic PE @BBL A2L.json" - }, - { - "name": "Generic PE @BBL H2C", - "sub_path": "filament/Generic PE @BBL H2C.json" - }, - { - "name": "Generic PE @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PE @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PE-CF @BBL A2L", - "sub_path": "filament/Generic PE-CF @BBL A2L.json" - }, - { - "name": "Generic PE-CF @BBL H2C", - "sub_path": "filament/Generic PE-CF @BBL H2C.json" - }, - { - "name": "Generic PE-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PE-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG @BBL A2L", - "sub_path": "filament/Generic PETG @BBL A2L.json" - }, - { - "name": "Generic PETG @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PETG @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PETG @BBL H2C", - "sub_path": "filament/Generic PETG @BBL H2C.json" - }, - { - "name": "Generic PETG @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PETG @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PETG @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL A2L", - "sub_path": "filament/Generic PETG HF @BBL A2L.json" - }, - { - "name": "Generic PETG HF @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PETG HF @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL H2C", - "sub_path": "filament/Generic PETG HF @BBL H2C.json" - }, - { - "name": "Generic PETG HF @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PETG HF @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PETG HF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG HF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PETG-CF @BBL A2L", - "sub_path": "filament/Generic PETG-CF @BBL A2L.json" - }, - { - "name": "Generic PETG-CF @BBL H2C", - "sub_path": "filament/Generic PETG-CF @BBL H2C.json" - }, - { - "name": "Generic PETG-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PETG-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PHA @BBL A2L", - "sub_path": "filament/Generic PHA @BBL A2L.json" - }, - { - "name": "Generic PHA @BBL H2C", - "sub_path": "filament/Generic PHA @BBL H2C.json" - }, - { - "name": "Generic PHA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PHA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA @BBL A2L", - "sub_path": "filament/Generic PLA @BBL A2L.json" - }, - { - "name": "Generic PLA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PLA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PLA @BBL H2C", - "sub_path": "filament/Generic PLA @BBL H2C.json" - }, - { - "name": "Generic PLA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PLA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PLA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL A2L", - "sub_path": "filament/Generic PLA High Speed @BBL A2L.json" - }, - { - "name": "Generic PLA High Speed @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C", - "sub_path": "filament/Generic PLA High Speed @BBL H2C.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PLA High Speed @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA High Speed @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA Silk @BBL A2L", - "sub_path": "filament/Generic PLA Silk @BBL A2L.json" - }, - { - "name": "Generic PLA Silk @BBL H2C", - "sub_path": "filament/Generic PLA Silk @BBL H2C.json" - }, - { - "name": "Generic PLA Silk @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA Silk @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PLA-CF @BBL A2L", - "sub_path": "filament/Generic PLA-CF @BBL A2L.json" - }, - { - "name": "Generic PLA-CF @BBL H2C", - "sub_path": "filament/Generic PLA-CF @BBL H2C.json" - }, - { - "name": "Generic PLA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PLA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP @BBL A2L", - "sub_path": "filament/Generic PP @BBL A2L.json" - }, - { - "name": "Generic PP @BBL H2C", - "sub_path": "filament/Generic PP @BBL H2C.json" - }, - { - "name": "Generic PP @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP-CF @BBL H2C", - "sub_path": "filament/Generic PP-CF @BBL H2C.json" - }, - { - "name": "Generic PP-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PP-GF @BBL H2C", - "sub_path": "filament/Generic PP-GF @BBL H2C.json" - }, - { - "name": "Generic PP-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PP-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPA-CF @BBL H2C", - "sub_path": "filament/Generic PPA-CF @BBL H2C.json" - }, - { - "name": "Generic PPA-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPA-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPA-GF @BBL H2C", - "sub_path": "filament/Generic PPA-GF @BBL H2C.json" - }, - { - "name": "Generic PPA-GF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPA-GF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPS @BBL H2C", - "sub_path": "filament/Generic PPS @BBL H2C.json" - }, - { - "name": "Generic PPS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPS @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PPS-CF @BBL H2C", - "sub_path": "filament/Generic PPS-CF @BBL H2C.json" - }, - { - "name": "Generic PPS-CF @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PPS-CF @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic PVA @BBL A2L", - "sub_path": "filament/Generic PVA @BBL A2L.json" - }, - { - "name": "Generic PVA @BBL A2L 0.2 nozzle", - "sub_path": "filament/Generic PVA @BBL A2L 0.2 nozzle.json" - }, - { - "name": "Generic PVA @BBL H2C", - "sub_path": "filament/Generic PVA @BBL H2C.json" - }, - { - "name": "Generic PVA @BBL H2C 0.2 nozzle", - "sub_path": "filament/Generic PVA @BBL H2C 0.2 nozzle.json" - }, - { - "name": "Generic PVA @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic PVA @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic TPU @BBL A2L", - "sub_path": "filament/Generic TPU @BBL A2L.json" - }, - { - "name": "Generic TPU @BBL H2C", - "sub_path": "filament/Generic TPU @BBL H2C.json" - }, - { - "name": "Generic TPU @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic TPU @BBL H2C 0.4 nozzle.json" - }, - { - "name": "Generic TPU for AMS @BBL A2L", - "sub_path": "filament/Generic TPU for AMS @BBL A2L.json" - }, - { - "name": "Generic TPU for AMS @BBL H2C", - "sub_path": "filament/Generic TPU for AMS @BBL H2C.json" - }, - { - "name": "Generic TPU for AMS @BBL H2C 0.4 nozzle", - "sub_path": "filament/Generic TPU for AMS @BBL H2C 0.4 nozzle.json" } ], "machine_list": [ @@ -11303,6 +11303,10 @@ "name": "Bambu Lab A1 mini 0.4 nozzle", "sub_path": "machine/Bambu Lab A1 mini 0.4 nozzle.json" }, + { + "name": "Bambu Lab A2L 0.4 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json" + }, { "name": "Bambu Lab H2S 0.4 nozzle", "sub_path": "machine/Bambu Lab H2S 0.4 nozzle.json" @@ -11331,6 +11335,10 @@ "name": "Bambu Lab X1E 0.4 nozzle", "sub_path": "machine/Bambu Lab X1E 0.4 nozzle.json" }, + { + "name": "Bambu Lab H2C 0.4 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json" + }, { "name": "Bambu Lab H2D 0.4 nozzle", "sub_path": "machine/Bambu Lab H2D 0.4 nozzle.json" @@ -11367,6 +11375,18 @@ "name": "Bambu Lab A1 mini 0.8 nozzle", "sub_path": "machine/Bambu Lab A1 mini 0.8 nozzle.json" }, + { + "name": "Bambu Lab A2L 0.2 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json" + }, + { + "name": "Bambu Lab A2L 0.6 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json" + }, + { + "name": "Bambu Lab A2L 0.8 nozzle", + "sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json" + }, { "name": "Bambu Lab H2S 0.2 nozzle", "sub_path": "machine/Bambu Lab H2S 0.2 nozzle.json" @@ -11451,6 +11471,18 @@ "name": "Bambu Lab X1E 0.8 nozzle", "sub_path": "machine/Bambu Lab X1E 0.8 nozzle.json" }, + { + "name": "Bambu Lab H2C 0.2 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json" + }, + { + "name": "Bambu Lab H2C 0.6 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json" + }, + { + "name": "Bambu Lab H2C 0.8 nozzle", + "sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json" + }, { "name": "Bambu Lab H2D 0.2 nozzle", "sub_path": "machine/Bambu Lab H2D 0.2 nozzle.json" @@ -11486,38 +11518,6 @@ { "name": "Bambu Lab X2D 0.8 nozzle", "sub_path": "machine/Bambu Lab X2D 0.8 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.4 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.4 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.2 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.2 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.6 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.6 nozzle.json" - }, - { - "name": "Bambu Lab A2L 0.8 nozzle", - "sub_path": "machine/Bambu Lab A2L 0.8 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.4 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.4 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.2 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.2 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.6 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.6 nozzle.json" - }, - { - "name": "Bambu Lab H2C 0.8 nozzle", - "sub_path": "machine/Bambu Lab H2C 0.8 nozzle.json" } ] } diff --git a/resources/profiles/BBL/filament/BETA/BETA ABS @base.json b/resources/profiles/BBL/filament/BETA/BETA ABS @base.json index 38e7aa5c12..bbed068703 100644 --- a/resources/profiles/BBL/filament/BETA/BETA ABS @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA ABS @base.json @@ -3,7 +3,7 @@ "name": "BETA ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "BABB00", + "filament_id": "OFjUXn67", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA ASA @base.json b/resources/profiles/BBL/filament/BETA/BETA ASA @base.json index a36f654b02..a525f16bb1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA ASA @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA ASA @base.json @@ -3,7 +3,7 @@ "name": "BETA ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "BASB00", + "filament_id": "OFZqZMuv", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json b/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json index 2647bc3397..4d244f9fe1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA HIPS @base.json @@ -3,7 +3,7 @@ "name": "BETA HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "BHIB00", + "filament_id": "OFlmxlDG", "instantiation": "false", "filament_is_support": [ "1" diff --git a/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json index c0116f418c..1c140e3720 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "BPAB00", + "filament_id": "OF6qw3Wb", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json b/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json index d92ceb29b1..fe1d3cd5b6 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PEBA 90A @base.json @@ -3,7 +3,7 @@ "name": "BETA PEBA 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BPBB00", + "filament_id": "OFI2MKy7", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG @base.json index 9d15c065f5..07a25f9233 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB00", + "filament_id": "OFrqMlGt", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json index b9b0032612..b79699b9fc 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Fluorescence @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Fluorescence @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB02", + "filament_id": "OFYGrfHY", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json index 70d84d21d3..c6b7b96de5 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Glitter @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Glitter @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB03", + "filament_id": "OFjogeYN", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json index 7da99e23fc..30c8cc2783 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Glow @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Glow @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB04", + "filament_id": "OFFfJ09N", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json index 6f6e891503..cff77a0d6c 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Gradient @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Gradient @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB05", + "filament_id": "OFNk8AvA", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json index 1ce6e4299e..b7aa43b6b5 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG HF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB06", + "filament_id": "OFxqf79Q", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json index 32a62c63b7..254cf9e4c1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Heat Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Heat Color Change @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB01", + "filament_id": "OFyPTnSk", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json index 30c79b2db5..335a3f59b2 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Marble @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Marble @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB07", + "filament_id": "OF4XTfoI", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json index c7278e20dd..52a838f323 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Matte @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB08", + "filament_id": "OFnpX8uh", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json index b2d9ce8524..9c276bcf4d 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Metallic @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Metallic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB09", + "filament_id": "OFz1a1fy", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json index 6378e0cfdd..781d69af3a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG Transparent @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG Transparent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB10", + "filament_id": "OFmt513L", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json index 53717f5be3..42fa3bd62b 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG UV Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG UV Color Change @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB11", + "filament_id": "OFKyNkQz", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json index 165d5a56b8..8e3514f0ad 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB12", + "filament_id": "OFtndTHe", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json b/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json index 6261eaa7d2..d530f7a1d7 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PETG-GF @base.json @@ -3,7 +3,7 @@ "name": "BETA PETG-GF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "BPGB13", + "filament_id": "OFSiCZP3", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json index 1653813bc1..429ecceda1 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB00", + "filament_id": "OFuvOt0r", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json index cb618e7bd0..5054237514 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Chameleon @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Chameleon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB02", + "filament_id": "OFW8M3CY", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json index 684ce8866f..d9198287aa 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Fluorescence @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Fluorescence @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB04", + "filament_id": "OF4PKvem", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json index d180d4fb04..545a34dd92 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Glitter @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Glitter @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB05", + "filament_id": "OFcnWTJB", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json index 05657ebd86..6be0a9da33 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB06", + "filament_id": "OFGc9l16", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json index f6cb4e3193..9609ff08d3 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Gradient @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Gradient @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB07", + "filament_id": "OF5LAnla", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json index 6f55ffdab8..958b999d91 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Heat Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Heat Color Change @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB03", + "filament_id": "OFSfm8iP", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json index 604604cb04..7b93695099 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA High Speed @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA High Speed @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB20", + "filament_id": "OF3PDEw3", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json index 7ac72d59fa..d900b28794 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA High Temp @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA High Temp @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB18", + "filament_id": "OF5BXhHF", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json index c27f1b4fd1..a472446d9a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB08", + "filament_id": "OFKYBAWe", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json index d67331d549..32bd79b43b 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB09", + "filament_id": "OFwc74ck", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json index 3a5668800d..607e20fa4e 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB10", + "filament_id": "OF03RK6r", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json index 5c1c8f3ddf..c03bc0a8c7 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB11", + "filament_id": "OFkHbjUv", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json index 340b2c88ec..6938382062 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA PRO @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA PRO @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB12", + "filament_id": "OFMzRg65", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json index fb445eed6b..a0c61acd51 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB13", + "filament_id": "OFeF4UNh", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json index 3320396323..0bedc9186a 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB01", + "filament_id": "OF8QdQwS", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json index ce0c342852..be62c10734 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Transparent @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Transparent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB14", + "filament_id": "OFJnEaCp", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json index 033d1ef2ce..d95a0d8411 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA UV Color Change @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA UV Color Change @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB15", + "filament_id": "OFpdjFI3", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json index 471c5709cd..c5eeae9995 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB19", + "filament_id": "OFGVxj2A", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json index b63dc707e0..5fa118d566 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA Youth @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA Youth @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB16", + "filament_id": "OFF5o7b2", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json b/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json index 88028090da..f0f632adfa 100644 --- a/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "BETA PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "BPLB17", + "filament_id": "OFLqgSuX", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json index 6664874f99..bba256fd74 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 90A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB00", + "filament_id": "OF6Yn69v", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json index 2ec4a56075..87f7757c3f 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB02", + "filament_id": "OFK7830e", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json index 58ef5a5c21..cd106a6bf6 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU 98A @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU 98A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB03", + "filament_id": "OFzaq7Yg", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json b/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json index 20d773373f..272e9be1ed 100644 --- a/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json +++ b/resources/profiles/BBL/filament/BETA/BETA TPU Matte @base.json @@ -3,7 +3,7 @@ "name": "BETA TPU Matte @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "BTUB01", + "filament_id": "OF4QZANi", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu ABS @base.json b/resources/profiles/BBL/filament/Bambu ABS @base.json index 4940032f5e..5f395440eb 100644 --- a/resources/profiles/BBL/filament/Bambu ABS @base.json +++ b/resources/profiles/BBL/filament/Bambu ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB00", + "filament_id": "OFhuaUQB", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu ABS-GF @base.json b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json index b93c7e82cf..a14581034d 100644 --- a/resources/profiles/BBL/filament/Bambu ABS-GF @base.json +++ b/resources/profiles/BBL/filament/Bambu ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB50", + "filament_id": "OFknl9Iz", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA @base.json b/resources/profiles/BBL/filament/Bambu ASA @base.json index 31d4c2d758..5e66d50419 100644 --- a/resources/profiles/BBL/filament/Bambu ASA @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB01", + "filament_id": "OFfBpSRI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json index 1a36118d7f..43c69be716 100644 --- a/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA-Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-Aero @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB02", + "filament_id": "OFXzQ4yL", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: ASA Aero Printing Guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu ASA-CF @base.json b/resources/profiles/BBL/filament/Bambu ASA-CF @base.json index 69624032bb..bf957889b6 100644 --- a/resources/profiles/BBL/filament/Bambu ASA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu ASA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB51", + "filament_id": "OF0wBGNx", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/BBL/filament/Bambu PA-CF @base.json b/resources/profiles/BBL/filament/Bambu PA-CF @base.json index 587812d37b..47e1cc6ae1 100644 --- a/resources/profiles/BBL/filament/Bambu PA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN03", + "filament_id": "OFFNYwWR", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PA6-CF @base.json b/resources/profiles/BBL/filament/Bambu PA6-CF @base.json index 10737491fe..0bb143c6ef 100644 --- a/resources/profiles/BBL/filament/Bambu PA6-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN05", + "filament_id": "OFniMuTN", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PA6-GF @base.json b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json index 1997ec6a1e..2f9a674e54 100644 --- a/resources/profiles/BBL/filament/Bambu PA6-GF @base.json +++ b/resources/profiles/BBL/filament/Bambu PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN08", + "filament_id": "OFNk8bxk", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json index 28b1391f84..80c0599caa 100644 --- a/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN04", + "filament_id": "OF2VFe4J", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu PC @base.json b/resources/profiles/BBL/filament/Bambu PC @base.json index 4bf37c3adb..ee235b17d6 100644 --- a/resources/profiles/BBL/filament/Bambu PC @base.json +++ b/resources/profiles/BBL/filament/Bambu PC @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC00", + "filament_id": "OFKhMPeX", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/BBL/filament/Bambu PC FR @base.json b/resources/profiles/BBL/filament/Bambu PC FR @base.json index 5c10a4e424..0ee463d08f 100644 --- a/resources/profiles/BBL/filament/Bambu PC FR @base.json +++ b/resources/profiles/BBL/filament/Bambu PC FR @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC FR @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC01", + "filament_id": "OFg57Nmc", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PET-CF @base.json b/resources/profiles/BBL/filament/Bambu PET-CF @base.json index ff8b40070f..c84d423f0e 100644 --- a/resources/profiles/BBL/filament/Bambu PET-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFT01", + "filament_id": "OFHa48An", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json index fd33eb2191..619483a4b4 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG00", + "filament_id": "OFFvzqcd", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG HF @base.json b/resources/profiles/BBL/filament/Bambu PETG HF @base.json index e05c34035b..1c12d679fd 100644 --- a/resources/profiles/BBL/filament/Bambu PETG HF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG02", + "filament_id": "OFovEIbw", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json index 8cb30c5583..372c2e5c26 100644 --- a/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Translucent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG01", + "filament_id": "OFwPrlCM", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json index da39340dcb..9c1d80768d 100644 --- a/resources/profiles/BBL/filament/Bambu PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG50", + "filament_id": "OFTRZ8Y4", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PLA Aero @base.json b/resources/profiles/BBL/filament/Bambu PLA Aero @base.json index ea1315636a..b941bed495 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Aero @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Aero @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA11", + "filament_id": "OFBSW57R", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: Instructions for printing RC model with foaming PLA (PLA Aero).", "fan_min_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json index f05bdb20e4..6d25d0ece0 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Basic @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA00", + "filament_id": "OFoiVqVM", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json b/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json index a5a1306eef..b21b156082 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Dynamic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Dynamic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA13", + "filament_id": "OFDGigEI", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json b/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json index 046610b2e2..baeb6a1ab8 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA15", + "filament_id": "OFQ3e56w", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Glow @base.json b/resources/profiles/BBL/filament/Bambu PLA Glow @base.json index 005d759df2..7556361f81 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA12", + "filament_id": "OFEkPBwx", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Lite @base.json b/resources/profiles/BBL/filament/Bambu PLA Lite @base.json index 72c3bb4e4f..4a21717d9e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Lite @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Lite @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Lite @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA18", + "filament_id": "OFnfxTvi", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PLA Marble @base.json b/resources/profiles/BBL/filament/Bambu PLA Marble @base.json index 6dd5f815dc..4c9ecb2ff5 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA07", + "filament_id": "OF9OlTWH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json index 15fb527bde..e98b6c3633 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Matte @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA01", + "filament_id": "OFXIbw5D", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json index 630ffcd61f..9a12d97f4d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Metal @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA02", + "filament_id": "OFrKLeE3", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Pure @base.json b/resources/profiles/BBL/filament/Bambu PLA Pure @base.json index ae1b796a47..f947b2efaa 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Pure @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Pure @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Pure @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA19", + "filament_id": "OFTHDCqA", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json index cfe83dabdd..da20a689ee 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA05", + "filament_id": "OFEGNJD4", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json b/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json index c81147eb58..17a7e21b79 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA06", + "filament_id": "OFUanySo", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json b/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json index ae49d594fd..6ecad9584e 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA08", + "filament_id": "OFDxfPgH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough @base.json b/resources/profiles/BBL/filament/Bambu PLA Tough @base.json index 9710767264..09b71a842d 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA09", + "filament_id": "OFaQMgRH", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json b/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json index 9b1b0b167e..ccc534d02f 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Tough+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA10", + "filament_id": "OF342jVN", "instantiation": "false", "additional_cooling_fan_speed": [ "80" diff --git a/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json b/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json index d32d781e70..ada0a501fc 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA17", + "filament_id": "OFFbSnCD", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA Wood @base.json b/resources/profiles/BBL/filament/Bambu PLA Wood @base.json index 882e00dc0a..3ba638569b 100644 --- a/resources/profiles/BBL/filament/Bambu PLA Wood @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA16", + "filament_id": "OFMjtqTC", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json index e24e6a11af..5567889cae 100644 --- a/resources/profiles/BBL/filament/Bambu PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA50", + "filament_id": "OFEswT5W", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/Bambu PPA-CF @base.json b/resources/profiles/BBL/filament/Bambu PPA-CF @base.json index a7efc6a3c3..48355afad1 100644 --- a/resources/profiles/BBL/filament/Bambu PPA-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN06", + "filament_id": "OF54B0S0", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "impact_strength_z": [ diff --git a/resources/profiles/BBL/filament/Bambu PPS-CF @base.json b/resources/profiles/BBL/filament/Bambu PPS-CF @base.json index a94234bb34..3985fcbe02 100644 --- a/resources/profiles/BBL/filament/Bambu PPS-CF @base.json +++ b/resources/profiles/BBL/filament/Bambu PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT02", + "filament_id": "OF4RvVuU", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu PVA @base.json b/resources/profiles/BBL/filament/Bambu PVA @base.json index fea0298ccc..1c6e0f2201 100644 --- a/resources/profiles/BBL/filament/Bambu PVA @base.json +++ b/resources/profiles/BBL/filament/Bambu PVA @base.json @@ -3,7 +3,7 @@ "name": "Bambu PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS04", + "filament_id": "OFzyIxba", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json b/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json index d199cdb0a0..70724ff11f 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PA PET @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PA/PET @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS03", + "filament_id": "OFMTK0UC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA @base.json b/resources/profiles/BBL/filament/Bambu Support For PLA @base.json index 9bfdef5bf9..495291a3cf 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PLA @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PLA @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS02", + "filament_id": "OFAnyRUI", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json index 38443f5be3..6a6ff6aa6b 100644 --- a/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json +++ b/resources/profiles/BBL/filament/Bambu Support For PLA-PETG @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA/PETG @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS05", + "filament_id": "OFIfnzxC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support G @base.json b/resources/profiles/BBL/filament/Bambu Support G @base.json index 9cb01972b8..38c7f500f5 100644 --- a/resources/profiles/BBL/filament/Bambu Support G @base.json +++ b/resources/profiles/BBL/filament/Bambu Support G @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS01", + "filament_id": "OFQHiNJs", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Bambu Support W @base.json b/resources/profiles/BBL/filament/Bambu Support W @base.json index e847cd1865..1391587ef0 100644 --- a/resources/profiles/BBL/filament/Bambu Support W @base.json +++ b/resources/profiles/BBL/filament/Bambu Support W @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS00", + "filament_id": "OFsHSVZc", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Bambu Support for ABS @base.json b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json index bc8867db2a..25f62a07c3 100644 --- a/resources/profiles/BBL/filament/Bambu Support for ABS @base.json +++ b/resources/profiles/BBL/filament/Bambu Support for ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support for ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFS06", + "filament_id": "OFf6mfQO", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 85A @base.json b/resources/profiles/BBL/filament/Bambu TPU 85A @base.json index bc8c9f698c..fc7f67bc45 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 85A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 85A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 85A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU04", + "filament_id": "OFlfuj2k", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 90A @base.json b/resources/profiles/BBL/filament/Bambu TPU 90A @base.json index 191d06e562..2f2ae95b02 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 90A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 90A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 90A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU03", + "filament_id": "OFtkLO6q", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json index 2670e250e9..7d94b0256c 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU01", + "filament_id": "OFVCkX5w", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json index 7610fa2bf3..9f977eb5b2 100644 --- a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A HF @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU00", + "filament_id": "OFvKUnLh", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json b/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json index 21a1e70fea..5f0b03329f 100644 --- a/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json +++ b/resources/profiles/BBL/filament/Bambu TPU for AMS @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU for AMS @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU02", + "filament_id": "OFIBbYO5", "instantiation": "false", "description": "If you are to print a kind of soft TPU, please don't slice with this profile, and it is only for TPU that has high enough hardness (not less than 55D) and is compatible with the AMS. To get better printing quality, please refer to this wiki: TPU printing guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json index 507a7050fb..082948c7ec 100644 --- a/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json +++ b/resources/profiles/BBL/filament/COEX/COEX NYLEX UNFILLED @BBL X1C.json @@ -1,6 +1,7 @@ { "type": "filament", - "name": "COEX NYLEX UNFILLED @BBL X1C", + "name": "COEX NYLEX UNFILLED @BBL X1C", + "renamed_from": "COEX NYLEX UNFILLED @BBL X1C", "inherits": "COEX NYLEX UNFILLED @base", "from": "system", "setting_id": "CXPAUB21_01", diff --git a/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json b/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json index e9e45915f4..95a8fd47ea 100644 --- a/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json +++ b/resources/profiles/BBL/filament/FusRock/FusRock ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "FusRock ABS-GF @base", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFR00", + "filament_id": "OFmn9NZL", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).", "filament_extruder_variant": [ diff --git a/resources/profiles/BBL/filament/Generic ABS @base.json b/resources/profiles/BBL/filament/Generic ABS @base.json index 4a30d790f8..d15a7cdfea 100644 --- a/resources/profiles/BBL/filament/Generic ABS @base.json +++ b/resources/profiles/BBL/filament/Generic ABS @base.json @@ -3,7 +3,7 @@ "name": "Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFY9muEs", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic ASA @base.json b/resources/profiles/BBL/filament/Generic ASA @base.json index e1acd0504d..699fc64f7c 100644 --- a/resources/profiles/BBL/filament/Generic ASA @base.json +++ b/resources/profiles/BBL/filament/Generic ASA @base.json @@ -3,7 +3,7 @@ "name": "Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB98", + "filament_id": "OFLPAxz3", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/BBL/filament/Generic BVOH @base.json b/resources/profiles/BBL/filament/Generic BVOH @base.json index 848e67c6c9..4a0fdf358e 100644 --- a/resources/profiles/BBL/filament/Generic BVOH @base.json +++ b/resources/profiles/BBL/filament/Generic BVOH @base.json @@ -3,7 +3,7 @@ "name": "Generic BVOH @base", "inherits": "fdm_filament_bvoh", "from": "system", - "filament_id": "GFS97", + "filament_id": "OFo2UF2C", "instantiation": "false", "filament_adhesiveness_category": [ "797" diff --git a/resources/profiles/BBL/filament/Generic EVA @base.json b/resources/profiles/BBL/filament/Generic EVA @base.json index 8799903ab5..79308d5d37 100644 --- a/resources/profiles/BBL/filament/Generic EVA @base.json +++ b/resources/profiles/BBL/filament/Generic EVA @base.json @@ -3,7 +3,7 @@ "name": "Generic EVA @base", "inherits": "fdm_filament_eva", "from": "system", - "filament_id": "GFR99", + "filament_id": "OFCD8qiU", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/BBL/filament/Generic HIPS @base.json b/resources/profiles/BBL/filament/Generic HIPS @base.json index c4147f8098..a0df005ecc 100644 --- a/resources/profiles/BBL/filament/Generic HIPS @base.json +++ b/resources/profiles/BBL/filament/Generic HIPS @base.json @@ -3,7 +3,7 @@ "name": "Generic HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "GFS98", + "filament_id": "OFsFon5l", "instantiation": "false", "filament_is_support": [ "1" diff --git a/resources/profiles/BBL/filament/Generic PA @base.json b/resources/profiles/BBL/filament/Generic PA @base.json index fe819487b0..e6dad20449 100644 --- a/resources/profiles/BBL/filament/Generic PA @base.json +++ b/resources/profiles/BBL/filament/Generic PA @base.json @@ -3,7 +3,7 @@ "name": "Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN99", + "filament_id": "OFg8ndtj", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "chamber_temperatures": [ diff --git a/resources/profiles/BBL/filament/Generic PA-CF @base.json b/resources/profiles/BBL/filament/Generic PA-CF @base.json index 6fdbd0c8bb..7c77ffe482 100644 --- a/resources/profiles/BBL/filament/Generic PA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN98", + "filament_id": "OFQLcbps", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/BBL/filament/Generic PC @base.json b/resources/profiles/BBL/filament/Generic PC @base.json index a98c5a4183..b61c2296b5 100644 --- a/resources/profiles/BBL/filament/Generic PC @base.json +++ b/resources/profiles/BBL/filament/Generic PC @base.json @@ -3,7 +3,7 @@ "name": "Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC99", + "filament_id": "OFLakOUI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PCTG @base.json b/resources/profiles/BBL/filament/Generic PCTG @base.json index e8b7c1ce0a..2eea3496a3 100644 --- a/resources/profiles/BBL/filament/Generic PCTG @base.json +++ b/resources/profiles/BBL/filament/Generic PCTG @base.json @@ -3,7 +3,7 @@ "name": "Generic PCTG @base", "inherits": "fdm_filament_pctg", "from": "system", - "filament_id": "GFG97", + "filament_id": "OFu1evlr", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PE @base.json b/resources/profiles/BBL/filament/Generic PE @base.json index 22a5162c90..d9bdfc84a5 100644 --- a/resources/profiles/BBL/filament/Generic PE @base.json +++ b/resources/profiles/BBL/filament/Generic PE @base.json @@ -3,7 +3,7 @@ "name": "Generic PE @base", "inherits": "fdm_filament_pe", "from": "system", - "filament_id": "GFP99", + "filament_id": "OFPklMI1", "instantiation": "false", "filament_cost": [ "40.99" diff --git a/resources/profiles/BBL/filament/Generic PE-CF @base.json b/resources/profiles/BBL/filament/Generic PE-CF @base.json index 6dafa3535a..655a30e41e 100644 --- a/resources/profiles/BBL/filament/Generic PE-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PE-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PE-CF @base", "inherits": "fdm_filament_pe", "from": "system", - "filament_id": "GFP98", + "filament_id": "OFd0Fv0k", "instantiation": "false", "filament_cost": [ "65.99" diff --git a/resources/profiles/BBL/filament/Generic PETG @base.json b/resources/profiles/BBL/filament/Generic PETG @base.json index 8d59f692a3..9fce0893ce 100644 --- a/resources/profiles/BBL/filament/Generic PETG @base.json +++ b/resources/profiles/BBL/filament/Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFYPdQJh", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PETG HF @base.json b/resources/profiles/BBL/filament/Generic PETG HF @base.json index 6a5ce9f063..c756285013 100644 --- a/resources/profiles/BBL/filament/Generic PETG HF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG96", + "filament_id": "OF7lOgYF", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PETG-CF @base.json b/resources/profiles/BBL/filament/Generic PETG-CF @base.json index c1d7338bd4..4f2f6ed3f9 100644 --- a/resources/profiles/BBL/filament/Generic PETG-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG98", + "filament_id": "OFoYSJKi", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PHA @base.json b/resources/profiles/BBL/filament/Generic PHA @base.json index 8e3a7e5f6a..fe2373ff7c 100644 --- a/resources/profiles/BBL/filament/Generic PHA @base.json +++ b/resources/profiles/BBL/filament/Generic PHA @base.json @@ -3,6 +3,6 @@ "name": "Generic PHA @base", "inherits": "fdm_filament_pha", "from": "system", - "filament_id": "GFR98", + "filament_id": "OF74KeQR", "instantiation": "false" } diff --git a/resources/profiles/BBL/filament/Generic PLA @base.json b/resources/profiles/BBL/filament/Generic PLA @base.json index f5c584bc3e..8e166fe212 100644 --- a/resources/profiles/BBL/filament/Generic PLA @base.json +++ b/resources/profiles/BBL/filament/Generic PLA @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFDSrzZ8", "instantiation": "false", "description": "The generic presets are conservatively tuned for compatibility with a wider range of filaments. For higher printing quality and speeds, please use Bambu filaments with Bambu presets.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PLA High Speed @base.json b/resources/profiles/BBL/filament/Generic PLA High Speed @base.json index f03e30f5ec..9fd751ae44 100644 --- a/resources/profiles/BBL/filament/Generic PLA High Speed @base.json +++ b/resources/profiles/BBL/filament/Generic PLA High Speed @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA High Speed @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL95", + "filament_id": "OFmpMwxS", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/Generic PLA Silk @base.json b/resources/profiles/BBL/filament/Generic PLA Silk @base.json index 4dfe033cb3..41bc486e88 100644 --- a/resources/profiles/BBL/filament/Generic PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Generic PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL96", + "filament_id": "OFesA6rF", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic PLA-CF @base.json b/resources/profiles/BBL/filament/Generic PLA-CF @base.json index 8f59df41a8..ffbcaad864 100644 --- a/resources/profiles/BBL/filament/Generic PLA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL98", + "filament_id": "OFWbdGsC", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/BBL/filament/Generic PP @base.json b/resources/profiles/BBL/filament/Generic PP @base.json index 14c266404a..94847d67e9 100644 --- a/resources/profiles/BBL/filament/Generic PP @base.json +++ b/resources/profiles/BBL/filament/Generic PP @base.json @@ -3,6 +3,6 @@ "name": "Generic PP @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP97", + "filament_id": "OF1UNk9P", "instantiation": "false" } diff --git a/resources/profiles/BBL/filament/Generic PP-CF @base.json b/resources/profiles/BBL/filament/Generic PP-CF @base.json index 307793d371..e04ee56b6d 100644 --- a/resources/profiles/BBL/filament/Generic PP-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PP-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PP-CF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP96", + "filament_id": "OFXkm8q1", "instantiation": "false", "filament_cost": [ "77.99" diff --git a/resources/profiles/BBL/filament/Generic PP-GF @base.json b/resources/profiles/BBL/filament/Generic PP-GF @base.json index d17fa31d68..5d82e8223a 100644 --- a/resources/profiles/BBL/filament/Generic PP-GF @base.json +++ b/resources/profiles/BBL/filament/Generic PP-GF @base.json @@ -3,7 +3,7 @@ "name": "Generic PP-GF @base", "inherits": "fdm_filament_pp", "from": "system", - "filament_id": "GFP95", + "filament_id": "OFsijjtH", "instantiation": "false", "filament_cost": [ "59.99" diff --git a/resources/profiles/BBL/filament/Generic PPA-CF @base.json b/resources/profiles/BBL/filament/Generic PPA-CF @base.json index 6287533414..78ad9bca5e 100644 --- a/resources/profiles/BBL/filament/Generic PPA-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN97", + "filament_id": "OF8tPByX", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/BBL/filament/Generic PPA-GF @base.json b/resources/profiles/BBL/filament/Generic PPA-GF @base.json index 6220abbeef..72ff99cd16 100644 --- a/resources/profiles/BBL/filament/Generic PPA-GF @base.json +++ b/resources/profiles/BBL/filament/Generic PPA-GF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPA-GF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "GFN96", + "filament_id": "OF8Tlg47", "instantiation": "false", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/BBL/filament/Generic PPS @base.json b/resources/profiles/BBL/filament/Generic PPS @base.json index 882fea94e0..08ba73cba8 100644 --- a/resources/profiles/BBL/filament/Generic PPS @base.json +++ b/resources/profiles/BBL/filament/Generic PPS @base.json @@ -3,7 +3,7 @@ "name": "Generic PPS @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT97", + "filament_id": "OFq9svOz", "instantiation": "false", "filament_dev_chamber_drying_bed_temperature": [ "90" diff --git a/resources/profiles/BBL/filament/Generic PPS-CF @base.json b/resources/profiles/BBL/filament/Generic PPS-CF @base.json index f003a7b470..76aab2de8b 100644 --- a/resources/profiles/BBL/filament/Generic PPS-CF @base.json +++ b/resources/profiles/BBL/filament/Generic PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Generic PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "GFT98", + "filament_id": "OF6rdQ6M", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/BBL/filament/Generic PVA @base.json b/resources/profiles/BBL/filament/Generic PVA @base.json index ca3dae82a4..4021f07f45 100644 --- a/resources/profiles/BBL/filament/Generic PVA @base.json +++ b/resources/profiles/BBL/filament/Generic PVA @base.json @@ -3,7 +3,7 @@ "name": "Generic PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "GFS99", + "filament_id": "OFDvXujf", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_flow_ratio": [ diff --git a/resources/profiles/BBL/filament/Generic SBS @base.json b/resources/profiles/BBL/filament/Generic SBS @base.json index 6decbf2213..fbf9b8a403 100644 --- a/resources/profiles/BBL/filament/Generic SBS @base.json +++ b/resources/profiles/BBL/filament/Generic SBS @base.json @@ -3,7 +3,7 @@ "name": "Generic SBS @base", "inherits": "fdm_filament_sbs", "from": "system", - "filament_id": "GFLSBS99", + "filament_id": "OFhQfUQY", "instantiation": "false", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/BBL/filament/Generic SBS.json b/resources/profiles/BBL/filament/Generic SBS.json index 2e38a46fde..ffa36a9abb 100644 --- a/resources/profiles/BBL/filament/Generic SBS.json +++ b/resources/profiles/BBL/filament/Generic SBS.json @@ -4,7 +4,7 @@ "inherits": "Generic SBS @base", "from": "system", "setting_id": "BFLSBS99-1", - "filament_id": "BFLSBS99", + "filament_id": "OFhQfUQY", "instantiation": "true", "compatible_printers": [ "Bambu Lab X1 Carbon 0.4 nozzle", diff --git a/resources/profiles/BBL/filament/Generic TPU @base.json b/resources/profiles/BBL/filament/Generic TPU @base.json index 78fe4c1b1a..f2bc7049aa 100644 --- a/resources/profiles/BBL/filament/Generic TPU @base.json +++ b/resources/profiles/BBL/filament/Generic TPU @base.json @@ -3,7 +3,7 @@ "name": "Generic TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU99", + "filament_id": "OFgbpcy9", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_max_volumetric_speed": [ diff --git a/resources/profiles/BBL/filament/Generic TPU for AMS @base.json b/resources/profiles/BBL/filament/Generic TPU for AMS @base.json index eb42aa3df2..1432bdfbe2 100644 --- a/resources/profiles/BBL/filament/Generic TPU for AMS @base.json +++ b/resources/profiles/BBL/filament/Generic TPU for AMS @base.json @@ -3,7 +3,7 @@ "name": "Generic TPU for AMS @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU98", + "filament_id": "OFmN2lvw", "instantiation": "false", "description": "If you are to print a kind of soft TPU, please don't slice with this profile, and it is only for TPU that has high enough hardness (not less than 55D) and is compatible with the AMS. To get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json b/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json index 91080469cd..b77157064b 100644 --- a/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json +++ b/resources/profiles/BBL/filament/Numakers/Numakers PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Numakers PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFNMK00", + "filament_id": "OFqGRZyH", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json b/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json index 469116c778..bccfb1f17b 100644 --- a/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture Matte PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Matte PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL05", + "filament_id": "OFBw6eEG", "instantiation": "false", "filament_cost": [ "24.52" diff --git a/resources/profiles/BBL/filament/Overture/Overture PLA @base.json b/resources/profiles/BBL/filament/Overture/Overture PLA @base.json index c31f99f8c8..0f302d4798 100644 --- a/resources/profiles/BBL/filament/Overture/Overture PLA @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL04", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_cost": [ "24.15" diff --git a/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json b/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json index 80525e03b2..454c36e7b0 100644 --- a/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json +++ b/resources/profiles/BBL/filament/Overture/Overture PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT001", + "filament_id": "OFxA1p01", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json index d98490f1d7..a5aa03bf9b 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL52", + "filament_id": "OFX0ycRQ", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json index 368abf5570..674d5acb38 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA12-CF10 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF10 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL56", + "filament_id": "OFvxIS9g", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json index d0424d164b..823e8a0ff1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL50", + "filament_id": "OFkOviHk", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json index 65fee6a5bb..f28ee154b8 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-CF20 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF20 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json index 6ad501fdfc..607b1c8e00 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL51", + "filament_id": "OFwaYjL6", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json index af2b6d92e1..426e4175db 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA6-GF25 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF25 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL58", + "filament_id": "OF5B9sUc", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json index bd7d52f415..3765f754f5 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL53", + "filament_id": "OFS2tn6G", "instantiation": "false", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json index dc7194aad0..310a2229d9 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PA612-CF15 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF15 @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL59", + "filament_id": "OFcBl0nJ", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json index 365ebb2fd7..2ca2a42d04 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL54", + "filament_id": "OFHWSM21", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json index adcbf5c9ef..d55b7d2daf 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PET-CF17 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF17 @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL60", + "filament_id": "OFAc0Pr3", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json index 11c846ff78..b459cc68a1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-ESD @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json index f5674437e8..f052304624 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL55", + "filament_id": "OFk8t9mz", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json index da9cdeb43c..fe8eca06cb 100644 --- a/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Fiberon PETG-rCF08 @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF08 @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFL61", + "filament_id": "OFw4WD4T", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json index b79b34db77..e3e21d17a1 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma CoPE @base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json index 284ad94032..5f4c2682db 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json index 5a1bfdd22a..18382eb7a0 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json index 6cc9094d1a..bf84a536a4 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json index c1ded4c198..ab3032ad57 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json index 8c9a74ad88..14a805212e 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json index cf1574fa9c..63680ba1b7 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json index 71dda06b1e..33d880ac08 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json index 6cda256ff4..89ce745162 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json index 3d8f857e56..bd8f5fc0d6 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json index 6af2ad1bbe..c8ef69cf88 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Satin @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Satin @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json index b21d127b41..94c2cb7c0b 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json index 57ddbd09b3..8622a109f2 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json index 322f91be2b..d0d6f6b057 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json index 7c7e5eedb7..ac8842d912 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json index 5ab8d5b81c..986b46fd5d 100644 --- a/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json index 8e1ec42a79..11be66397d 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite ABS @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB60", + "filament_id": "OFOvv91M", "instantiation": "false", "filament_cost": [ "26.9" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json index 88e453e0e5..026efbfb61 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite ASA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFB61", + "filament_id": "OFvrXuV7", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json index 18f38f0c68..92739d13bb 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite CosPLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite CosPLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL62", + "filament_id": "OFJgijky", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json index 87e9a1194a..365f5f1460 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PETG @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json index cbfe608b4e..55ea664946 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json index 9480b33392..90996083f1 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL63", + "filament_id": "OFvyB0Bz", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json index ab4b717dbb..3a70d3a83f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL64", + "filament_id": "OF5umxxT", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json index a6bb2746c1..14131c0348 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL65", + "filament_id": "OFBoSWxb", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json index 5a0ec60465..b9fc01a700 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL66", + "filament_id": "OFitS8al", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json index bf2867a702..93c6cf8c9f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json index ecc73602c3..3c8a79ed3f 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL67", + "filament_id": "OFIxOuOu", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json index f5f9c89720..9a6155e283 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyLite PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL68", + "filament_id": "OFy02QHU", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json index e844afc545..3b13c5b55c 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json index 2b64adc51c..ea65b41ec4 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL69", + "filament_id": "OFxe4rXr", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json index 15fccef9e3..1d322a6c3e 100644 --- a/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json +++ b/resources/profiles/BBL/filament/Polymaker/PolyTerra PLA+ @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL70", + "filament_id": "OFEjbwqG", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json index 22b1a0d5ce..94ab2b2fd9 100644 --- a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json index 55173547e9..585a6dd554 100644 --- a/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json +++ b/resources/profiles/BBL/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "filament_cost": [ "32.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json index 099f90ce9c..d2f34323a0 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Marble PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json index 523468391e..6e3eaf356e 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json index f99bbc84bf..f3b92cdb2f 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index 47f103af84..d2b1087f28 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json index ffe454c74f..c46fb9affc 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json index e83ae1a411..22e7994783 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json index 8cc3cd97a7..e13c06ceb8 100644 --- a/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/BBL/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json index 2889bc0a39..5d6b376e47 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth ABS rABS.json @@ -4,7 +4,7 @@ "inherits": "Generic ABS @base", "from": "system", "setting_id": "GF_ANRA_00", - "filament_id": "GF_ANRA", + "filament_id": "OFzk5oAo", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "105" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json index 9da0cc2b6e..703389a687 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura FDA.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANAF_00", - "filament_id": "GF_ANAF", + "filament_id": "OFSw6Mor", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json index 037ae82eed..beba3c51de 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA Adura.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANAD_00", - "filament_id": "GF_ANAD", + "filament_id": "OFWK0Y9A", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json b/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json index 3b8f50c799..f4894e3e6a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA-CF Adura X.json @@ -4,7 +4,7 @@ "inherits": "Generic PA-CF @base", "from": "system", "setting_id": "GF_ANAX_00", - "filament_id": "GF_ANAX", + "filament_id": "OFBsbMMF", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json index dc5e815df5..5cb61738c8 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PA6 Addlantis.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANLA_00", - "filament_id": "GF_ANLA", + "filament_id": "OF1ID4N1", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json b/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json index e1e67fbb71..b94065e44d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PC BLend HT LCF.json @@ -4,7 +4,7 @@ "inherits": "Generic PC @base", "from": "system", "setting_id": "GF_ANPBX_00", - "filament_id": "GF_ANPBX", + "filament_id": "OFhN09f0", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json index 288368dd07..eb1ffaf48c 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Base.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPE_00", - "filament_id": "GF_ANPE", + "filament_id": "OFHHwrd1", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json index 060ffe6b56..de07353b97 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG ESD.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANEG_00", - "filament_id": "GF_ANEG", + "filament_id": "OFUtiVRn", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "70" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json index c83d353302..f3df226774 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Economy.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANGE_00", - "filament_id": "GF_ANGE", + "filament_id": "OFZGrQTU", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json index 96aec4f471..08ad97161a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG Flame v0.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPF_00", - "filament_id": "GF_ANPF", + "filament_id": "OF0EYBWQ", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "70" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json index a73d5ae48a..0948d9f9c7 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG PRO Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANPM_00", - "filament_id": "GF_ANPM", + "filament_id": "OFU5JPDy", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "80" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json index 1c4f092d54..0396c6578d 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG rPETG Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "GF_ANRM_00", - "filament_id": "GF_ANRM", + "filament_id": "OFqTwtXM", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json b/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json index 927ef1ca6e..a0f78bb956 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PETG-CF Rigid X.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG-CF @base", "from": "system", "setting_id": "GF_ANRX_00", - "filament_id": "GF_ANRX", + "filament_id": "OFAcJkl1", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "80" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json index d008217fcf..3a35d16b29 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA E-PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANEP_00", - "filament_id": "GF_ANEP", + "filament_id": "OF71b7qO", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json index 51b2924577..77a86797f0 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Economy.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANPL_00", - "filament_id": "GF_ANPL", + "filament_id": "OFZJft47", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json index 5ab0cc036a..5327b8a083 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA HT-PLA PRO Matte.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANHTP_00", - "filament_id": "GF_ANHTP", + "filament_id": "OFVDWuxl", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "75" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json index caa3fb10ed..1487f567cd 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Premium Silk.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA Silk @base", "from": "system", "setting_id": "GF_ANPS_00", - "filament_id": "GF_ANPS", + "filament_id": "OFOQCfVa", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json index 97c7026910..789d2bd096 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Textura.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANTE_00", - "filament_id": "GF_ANTE", + "filament_id": "OFRFhdqy", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json index faa711ee14..aed77a1a1a 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA Wood.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANPLW_00", - "filament_id": "GF_ANPLW", + "filament_id": "OFN8QBhu", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "60" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json index 3ffec96061..6e0a0952d5 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA High Speed.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA High Speed @base", "from": "system", "setting_id": "GF_ANXPH_00", - "filament_id": "GF_ANXPH", + "filament_id": "OFLjDYxH", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json index b8016af159..d785327ee7 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA X-PLA.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANXP_00", - "filament_id": "GF_ANXP", + "filament_id": "OFtdVZpV", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json index ad47884179..c530f3fa7c 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA rPLA RE-ADD.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @base", "from": "system", "setting_id": "GF_ANRPL_00", - "filament_id": "GF_ANRPL", + "filament_id": "OFnBvPhb", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "65" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json b/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json index 608be46906..32debd4c18 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PLA-CF Carbon Fiber.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA-CF @base", "from": "system", "setting_id": "GF_ANPCF_00", - "filament_id": "GF_ANPCF", + "filament_id": "OFcpa50Z", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -315,6 +323,5 @@ ], "textured_plate_temp_initial_layer": [ "55" - ], - "version": "2.0.0.87" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json index 8ca7e5e5ab..88258976f2 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth PVDF Adamant S1.json @@ -4,7 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "GF_ANPV_00", - "filament_id": "GF_ANPV", + "filament_id": "OFQ5TxZ2", "instantiation": "true", "activate_air_filtration": [ "1" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "100" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json index 05c7af8947..afdcb43296 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU EasyFlex.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANEF_00", - "filament_id": "GF_ANEF", + "filament_id": "OFO6GMJ3", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json index e6236ed79a..81d08c4681 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 85A.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANTA_00", - "filament_id": "GF_ANTA", + "filament_id": "OFvcIGee", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -334,6 +342,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json index 6b971b7d5c..0b4e7c3fcd 100644 --- a/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json +++ b/resources/profiles/BBL/filament/addnorth/addnorth TPU Pro Matte 95A.json @@ -4,7 +4,7 @@ "inherits": "Generic TPU @base", "from": "system", "setting_id": "GF_ANTM_00", - "filament_id": "GF_ANTM", + "filament_id": "OFyJjkek", "instantiation": "true", "activate_air_filtration": [ "0" @@ -58,7 +58,15 @@ "Bambu Lab X2D 0.2 nozzle", "Bambu Lab X2D 0.4 nozzle", "Bambu Lab X2D 0.6 nozzle", - "Bambu Lab X2D 0.8 nozzle" + "Bambu Lab X2D 0.8 nozzle", + "Bambu Lab H2C 0.2 nozzle", + "Bambu Lab H2C 0.4 nozzle", + "Bambu Lab H2C 0.6 nozzle", + "Bambu Lab H2C 0.8 nozzle", + "Bambu Lab A2L 0.2 nozzle", + "Bambu Lab A2L 0.4 nozzle", + "Bambu Lab A2L 0.6 nozzle", + "Bambu Lab A2L 0.8 nozzle" ], "compatible_printers_condition": "", "compatible_prints": [], @@ -335,6 +343,5 @@ ], "textured_plate_temp_initial_layer": [ "35" - ], - "version": "2.0.0.77" + ] } diff --git a/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json b/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json index 544608b91a..6820e79489 100644 --- a/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json +++ b/resources/profiles/BBL/filament/eSUN/eSUN PLA+ @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL03", + "filament_id": "OFqINlYj", "instantiation": "false", "filament_cost": [ "22.99" diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 mini.json b/resources/profiles/BBL/machine/Bambu Lab A1 mini.json index 6ebecc0ecf..33cf76e05b 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1 mini.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1 mini.json @@ -11,5 +11,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "N1", - "default_materials": "Bambu PLA Matte @BBL A1M;Bambu PLA Basic @BBL A1M;Bambu PLA Silk @BBL A1M;Bambu Support For PLA @BBL A1M;Bambu TPU 95A @BBL A1M;Generic PLA @BBL A1M;Generic PLA High Speed @BBL A1M;Bambu PLA Metal @BBL A1M;Generic PETG @BBL A1M;Bambu PLA Marble @BBL A1M;Bambu PLA-CF @BBL A1M;Bambu PETG-CF @BBL A1M;Bambu PETG HF @BBL A1M" + "default_materials": "Bambu PLA Matte @BBL A1M;Bambu PLA Basic @BBL A1M;Bambu PLA Silk @BBL A1M;Bambu Support For PLA @BBL A1M;Bambu TPU 95A @BBL A1M;Generic PLA @BBL A1M;Generic PLA High Speed @BBL A1M;Bambu PLA Metal @BBL A1M;Generic PETG @BBL A1M;Bambu PLA Marble @BBL A1M;Bambu PLA-CF @BBL A1M;Bambu PETG-CF @BBL A1M;Bambu PETG HF @BBL A1M;Bambu PLA Basic @BBL A1M 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab A1.json b/resources/profiles/BBL/machine/Bambu Lab A1.json index efade2a7d2..1ce5f24296 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A1.json +++ b/resources/profiles/BBL/machine/Bambu Lab A1.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "N2S", - "default_materials": "Bambu PLA Matte @BBL A1;Bambu PLA Basic @BBL A1;Bambu PLA Silk @BBL A1;Bambu Support For PA/PET @BBL A1;Bambu ABS @BBL A1;Bambu TPU 95A @BBL A1;Bambu PLA Tough @BBL A1;Generic PLA @BBL A1;Generic PLA High Speed @BBL A1;Generic PETG @BBL A1;Generic PVA @BBL A1;Bambu PETG HF @BBL A1" + "default_materials": "Bambu PLA Matte @BBL A1;Bambu PLA Basic @BBL A1;Bambu PLA Silk @BBL A1;Bambu Support For PA/PET @BBL A1;Bambu ABS @BBL A1;Bambu TPU 95A @BBL A1;Bambu PLA Tough @BBL A1;Generic PLA @BBL A1;Generic PLA High Speed @BBL A1;Generic PETG @BBL A1;Generic PVA @BBL A1;Bambu PETG HF @BBL A1;Bambu PLA Basic @BBL A1 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab A2L.json b/resources/profiles/BBL/machine/Bambu Lab A2L.json index b9ad344d22..62a9a0fddf 100644 --- a/resources/profiles/BBL/machine/Bambu Lab A2L.json +++ b/resources/profiles/BBL/machine/Bambu Lab A2L.json @@ -13,5 +13,5 @@ "model_id": "N9", "not_support_bed_type": "Cool Plate", "use_double_extruder_default_texture": "true", - "default_materials": "Bambu PLA Matte @BBL A2L;Bambu PLA Basic @BBL A2L;Bambu PLA Silk @BBL A2L;Bambu Support For PLA/PETG @BBL A2L;Bambu TPU 95A @BBL A2L;Bambu PLA Tough @BBL A2L;Generic PLA @BBL A2L;Generic PLA High Speed @BBL A2L;Generic PETG @BBL A2L;Generic PVA @BBL A2L;Bambu PETG HF @BBL A2L" + "default_materials": "Bambu PLA Matte @BBL A2L 0.4 nozzle;Bambu PLA Basic @BBL A2L 0.4 nozzle;Bambu PLA Silk @BBL A2L 0.4 nozzle;Bambu Support For PLA/PETG @BBL A2L;Bambu TPU 95A @BBL A2L;Bambu PLA Tough @BBL A2L;Generic PLA @BBL A2L;Generic PLA High Speed @BBL A2L;Generic PETG @BBL A2L;Generic PVA @BBL A2L;Bambu PETG HF @BBL A2L;Bambu PLA Basic @BBL A2L 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab H2C.json b/resources/profiles/BBL/machine/Bambu Lab H2C.json index 92645a5933..b9734a34c5 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2C.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2C.json @@ -12,5 +12,5 @@ "machine_tech": "FFF", "model_id": "O1C2", "not_support_bed_type": "Cool Plate;Smooth PEI Plate / High Temp Plate", - "default_materials": "Bambu PLA Basic @BBL H2C;Bambu PLA-CF @BBL H2C;Bambu PETG Basic @BBL H2C;Bambu ABS @BBL H2C;Bambu PETG HF @BBL H2C;Bambu PLA Silk @BBL H2C;Bambu PLA Matte @BBL H2C;Bambu PC @BBL H2C;Bambu PA-CF @BBL H2C;Bambu PLA Pure @BBL H2C" + "default_materials": "Bambu PLA Basic @BBL H2C;Bambu PLA-CF @BBL H2C;Bambu PETG Basic @BBL H2C;Bambu ABS @BBL H2C;Bambu PETG HF @BBL H2C;Bambu PLA Silk @BBL H2C;Bambu PLA Matte @BBL H2C;Bambu PC @BBL H2C;Bambu PA-CF @BBL H2C;Bambu PLA Pure @BBL H2C;Bambu PLA Basic @BBL H2C 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab H2D Pro.json b/resources/profiles/BBL/machine/Bambu Lab H2D Pro.json index 8fd12972e7..d2be50fe67 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2D Pro.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2D Pro.json @@ -11,5 +11,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "O1E", - "default_materials": "Bambu PLA Basic @BBL H2DP;Bambu PLA-CF @BBL H2DP;Bambu PETG Basic @BBL H2DP;Bambu ABS @BBL H2DP;Bambu PETG HF @BBL H2DP;Bambu PLA Silk @BBL H2DP;Bambu PLA Matte @BBL H2DP;Bambu PC @BBL H2DP;Bambu PA-CF @BBL H2DP;Bambu PLA Pure @BBL H2DP" + "default_materials": "Bambu PLA Basic @BBL H2DP;Bambu PLA-CF @BBL H2DP 0.4 nozzle;Bambu PETG Basic @BBL H2DP 0.4 nozzle;Bambu ABS @BBL H2DP;Bambu PETG HF @BBL H2DP 0.4 nozzle;Bambu PLA Silk @BBL H2DP;Bambu PLA Matte @BBL H2DP;Bambu PC @BBL H2DP 0.4 nozzle;Bambu PA-CF @BBL H2DP;Bambu PLA Pure @BBL H2DP;Bambu PLA Basic @BBL H2DP 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab H2D.json b/resources/profiles/BBL/machine/Bambu Lab H2D.json index 9a277c4b7e..a264365c94 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2D.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2D.json @@ -12,5 +12,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "O1D", - "default_materials": "Bambu PLA Basic @BBL H2D;Bambu PLA-CF @BBL H2D;Bambu PETG Basic @BBL H2D;Bambu ABS @BBL H2D;Bambu PETG HF @BBL H2D;Bambu PLA Silk @BBL H2D;Bambu PLA Matte @BBL H2D;Bambu PC @BBL H2D;Bambu PA-CF @BBL H2D;Bambu PLA Pure @BBL H2D" + "default_materials": "Bambu PLA Basic @BBL H2D;Bambu PLA-CF @BBL H2D 0.4 nozzle;Bambu PETG Basic @BBL H2D 0.4 nozzle;Bambu ABS @BBL H2D;Bambu PETG HF @BBL H2D 0.4 nozzle;Bambu PLA Silk @BBL H2D;Bambu PLA Matte @BBL H2D;Bambu PC @BBL H2D 0.4 nozzle;Bambu PA-CF @BBL H2D;Bambu PLA Pure @BBL H2D;Bambu PLA Basic @BBL H2D 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab H2S.json b/resources/profiles/BBL/machine/Bambu Lab H2S.json index 11c2cde471..2ead7abc09 100644 --- a/resources/profiles/BBL/machine/Bambu Lab H2S.json +++ b/resources/profiles/BBL/machine/Bambu Lab H2S.json @@ -14,5 +14,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "O1S", - "default_materials": "Bambu PLA Basic @BBL H2S;Bambu PLA Matte @BBL H2S;Bambu PLA Tough @BBL H2S;Bambu PLA Marble @BBL H2S;Bambu PLA Metal @BBL H2S;Bambu PLA Silk @BBL H2S;Bambu TPU 95A HF @BBL H2S;Bambu PETG Basic @BBL H2S;Bambu PLA Pure @BBL H2S" + "default_materials": "Bambu PLA Basic @BBL H2S;Bambu PLA Matte @BBL H2S;Bambu PLA Tough @BBL H2S;Bambu PLA Marble @BBL H2S;Bambu PLA Metal @BBL H2S;Bambu PLA Silk @BBL H2S;Bambu TPU 95A HF @BBL H2S;Bambu PETG Basic @BBL H2S;Bambu PLA Pure @BBL H2S;Bambu PLA Basic @BBL H2S 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P.json b/resources/profiles/BBL/machine/Bambu Lab P1P.json index c5062699d6..7365599b1c 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C11", - "default_materials": "Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu PLA-CF @BBL P1P;Bambu PETG-CF @BBL P1P;Bambu ABS @BBL P1P;Bambu PLA Silk @BBL P1P;Bambu PAHT-CF @BBL P1P;Bambu Support For PA/PET @BBL P1P;Bambu Support For PLA @BBL P1P;Generic PLA @BBL P1P;Generic PLA High Speed @BBL P1P;Generic PETG @BBL P1P;Bambu PETG HF @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL P1P;Bambu PLA Basic @BBL P1P;Bambu PLA-CF @BBL P1P;Bambu PETG-CF @BBL P1P;Bambu ABS @BBL P1P;Bambu PLA Silk @BBL P1P;Bambu PAHT-CF @BBL P1P;Bambu Support For PA/PET @BBL P1P;Bambu Support For PLA @BBL P1P;Generic PLA @BBL P1P;Generic PLA High Speed @BBL P1P;Generic PETG @BBL P1P;Bambu PETG HF @BBL X1C;Bambu PLA Basic @BBL P1P 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S.json b/resources/profiles/BBL/machine/Bambu Lab P1S.json index f5e81affe6..76d1a92839 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1S.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1S.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C12", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C;Bambu PLA Basic @BBL X1C 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab P2S.json b/resources/profiles/BBL/machine/Bambu Lab P2S.json index 19939adeff..869cb56016 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P2S.json +++ b/resources/profiles/BBL/machine/Bambu Lab P2S.json @@ -12,5 +12,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "N7", - "default_materials": "Bambu PLA Matte @BBL P2S;Bambu PLA Basic @BBL P2S;Bambu PLA Silk @BBL P2S;Bambu PLA Marble @BBL P2S;Bambu PLA Sparkle @BBL P2S;Generic PLA @BBL P2S;Bambu TPU 95A @BBL P2S;Bambu ABS @BBL P2S;Bambu PC @BBL P2S 0.4 nozzle" + "default_materials": "Bambu PLA Matte @BBL P2S;Bambu PLA Basic @BBL P2S;Bambu PLA Silk @BBL P2S;Bambu PLA Marble @BBL P2S;Bambu PLA Sparkle @BBL P2S;Generic PLA @BBL P2S;Bambu TPU 95A @BBL P2S;Bambu ABS @BBL P2S;Bambu PC @BBL P2S 0.4 nozzle;Bambu PLA Basic @BBL P2S 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json index 6a504195c7..a3a89c14de 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P001", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu TPU 95A @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Bambu PETG HF @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu TPU 95A @BBL X1C;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Bambu PETG HF @BBL X1C;Bambu PLA Basic @BBL X1C 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1.json b/resources/profiles/BBL/machine/Bambu Lab X1.json index 843ddcf3a7..23a90ded95 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "BL-P002", - "default_materials": "Bambu PLA Matte @BBL X1;Bambu PLA Basic @BBL X1;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL X1;Bambu PLA Basic @BBL X1;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1C;Bambu PLA Silk @BBL X1;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PLA;Generic PLA High Speed @BBL X1C;Generic PETG;Bambu PETG HF @BBL X1C;Bambu PLA Basic @BBL X1C 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E.json b/resources/profiles/BBL/machine/Bambu Lab X1E.json index d0c5f3660c..0c4d6faf76 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1E.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1E.json @@ -9,5 +9,5 @@ "family": "BBL-3DP", "machine_tech": "FFF", "model_id": "C13", - "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1E;Bambu ASA @BBL X1E;Bambu PC @BBL X1E;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PPA-CF @BBL X1E;Generic PPS @BBL X1E;Generic PPS-CF @BBL X1E;Bambu PETG HF @BBL X1C" + "default_materials": "Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu PLA-CF @BBL X1C;Bambu PETG-CF @BBL X1C;Bambu ABS @BBL X1E;Bambu ASA @BBL X1E;Bambu PC @BBL X1E;Bambu PAHT-CF @BBL X1C;Bambu Support For PLA @BBL X1C;Bambu Support For PA/PET @BBL X1C;Generic PPA-CF @BBL X1E;Generic PPS @BBL X1E;Generic PPS-CF @BBL X1E;Bambu PETG HF @BBL X1C;Bambu PLA Basic @BBL X1C 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X2D.json b/resources/profiles/BBL/machine/Bambu Lab X2D.json index df2ca2c45b..95e65f3b1e 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X2D.json +++ b/resources/profiles/BBL/machine/Bambu Lab X2D.json @@ -14,5 +14,5 @@ "machine_tech": "FFF", "model_id": "N6", "not_support_bed_type": "Cool Plate", - "default_materials": "Bambu PLA Matte @BBL X2D;Bambu PLA Matte @BBL X2D 0.4 nozzle;Bambu PLA Basic @BBL X2D;Bambu PLA Basic @BBL X2D 0.4 nozzle;Bambu TPU 95A @BBL X2D;Bambu TPU 95A @BBL X2D 0.4 nozzle;Generic TPU @BBL X2D;Generic TPU @BBL X2D 0.4 nozzle;Bambu PETG Basic @BBL X2D;Bambu PETG Basic @BBL X2D 0.4 nozzle;Bambu PETG HF @BBL X2D;Bambu PETG HF @BBL X2D 0.4 nozzle;Bambu ABS @BBL X2D;Bambu ABS @BBL X2D 0.4 nozzle;Bambu PC @BBL X2D;Bambu PC @BBL X2D 0.4 nozzle" + "default_materials": "Bambu PLA Matte @BBL X2D;Bambu PLA Matte @BBL X2D 0.4 nozzle;Bambu PLA Basic @BBL X2D;Bambu PLA Basic @BBL X2D 0.4 nozzle;Bambu TPU 95A @BBL X2D;Bambu TPU 95A @BBL X2D 0.4 nozzle;Generic TPU @BBL X2D;Generic TPU @BBL X2D 0.4 nozzle;Bambu PETG Basic @BBL X2D;Bambu PETG Basic @BBL X2D 0.4 nozzle;Bambu PETG HF @BBL X2D;Bambu PETG HF @BBL X2D 0.4 nozzle;Bambu ABS @BBL X2D;Bambu ABS @BBL X2D 0.4 nozzle;Bambu PC @BBL X2D;Bambu PC @BBL X2D 0.4 nozzle;Bambu PLA Basic @BBL X2D 0.2 nozzle" } diff --git a/resources/profiles/BBL/machine/fdm_machine_common.json b/resources/profiles/BBL/machine/fdm_machine_common.json index f793f3bc1d..b10072a284 100644 --- a/resources/profiles/BBL/machine/fdm_machine_common.json +++ b/resources/profiles/BBL/machine/fdm_machine_common.json @@ -137,7 +137,6 @@ ], "scan_first_layer": "0", "enable_power_loss_recovery": "printer_configuration", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_cooling_filter": "0", diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json index 7a2803376a..7eae54fd49 100644 --- a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json index 49cc379d96..9ccca5434e 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json index 946d06033d..80edd032c6 100644 --- a/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -92,7 +88,6 @@ "Direct Drive High Flow" ], "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json index 904a4c36b3..b1bfc9052a 100644 --- a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json index fb11c1a4bf..0c9ed0c2d3 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json index 4894472048..60ba1abfa7 100644 --- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json +++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "450", "450" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L 0.2 nozzle.json index 18c97c02a0..c87e2d5d0e 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L 0.2 nozzle.json @@ -33,7 +33,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "travel_acceleration": [ "8000" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L.json index 1c1c67efdd..1d1eb841da 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A2L.json @@ -48,7 +48,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "sparse_infill_speed": [ "150" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S 0.2 nozzle.json index a7b0dd5cdf..521f97aad2 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S 0.2 nozzle.json @@ -124,10 +124,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -144,7 +140,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S.json index 74424205a8..d30d85cdc6 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL H2S.json @@ -120,10 +120,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -140,7 +136,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json index 6dffdd807a..1d72dc8bc2 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json index 6449810abc..ab50f11c4d 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S 0.2 nozzle.json index ef8582cf08..fba6cdf18b 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S 0.2 nozzle.json @@ -80,10 +80,6 @@ "20", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -94,7 +90,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "sparse_infill_speed": [ "100", diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S.json index 33bcdcb417..89bca9df5b 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P2S.json @@ -79,10 +79,6 @@ "20", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "150", "150" ], - "smooth_coefficient": "1", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json index 2d4a5a4aa9..9ecb07315c 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -92,7 +88,6 @@ "Direct Drive High Flow" ], "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json index d43fa0b542..46391c740a 100644 --- a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -95,7 +91,6 @@ "150", "150" ], - "smooth_coefficient": "150", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json index 1ac71a0e27..748fa47e60 100644 --- a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json index e63c318451..de2043ca5f 100644 --- a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json index 9e79020dde..88b2bc08df 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json index dda11fcea8..5dcdb588f1 100644 --- a/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -92,7 +88,6 @@ "Direct Drive High Flow" ], "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL A2L 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL A2L 0.2 nozzle.json index 3eeeae65e0..c122c78e09 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL A2L 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL A2L 0.2 nozzle.json @@ -30,9 +30,6 @@ "overhang_4_4_speed": [ "35" ], - "overhang_totally_speed": [ - "25" - ], "prime_tower_brim_width": "-1", "slowdown_end_acc": [ "1000" @@ -40,7 +37,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "support_line_width": "0.4", "travel_acceleration": [ "8000" diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL H2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL H2S 0.2 nozzle.json index 594822c2fa..698c0ba106 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL H2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL H2S 0.2 nozzle.json @@ -79,10 +79,6 @@ "100", "100" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_flat_ironing": "1", "prime_tower_width": "60", "print_extruder_id": [ @@ -117,7 +113,6 @@ "80", "80" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json index 9d65e320a6..8c7c9415a1 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL P2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL P2S 0.2 nozzle.json index 8d545a01f4..51fcbc71d4 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL P2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL P2S 0.2 nozzle.json @@ -80,10 +80,6 @@ "20", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -92,7 +88,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json index e1078c5844..5145c45b42 100644 --- a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json index e1fbd88049..3fd94d41ca 100644 --- a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL A2L 0.2 nozzle.json @@ -27,7 +27,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json index 62b5351a18..f35eccf500 100644 --- a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL H2S 0.2 nozzle.json @@ -123,10 +123,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -143,7 +139,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL P2S 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL P2S 0.2 nozzle.json index e1b48ac5b8..f7a7639857 100644 --- a/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL P2S 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Balanced Quality @BBL P2S 0.2 nozzle.json @@ -79,10 +79,6 @@ "20", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -93,7 +89,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json index 1a99892c5f..83afb88fd8 100644 --- a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json index ee9683d868..96047bf831 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json b/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json index 24ff340202..1758049a79 100644 --- a/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json +++ b/resources/profiles/BBL/process/0.12mm Fine @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "430", "430" diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL A2L.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL A2L.json index dd64b185c9..9b7a3a9504 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL A2L.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL A2L.json @@ -48,7 +48,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "sparse_infill_speed": [ "180" diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL H2S.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL H2S.json index eadb61d48f..99aa118b84 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL H2S.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL H2S.json @@ -120,10 +120,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -140,7 +136,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json index ea4c5fc5a0..6cdae36ed1 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL P2S.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL P2S.json index d1464e4305..6f86d4824b 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL P2S.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL P2S.json @@ -79,10 +79,6 @@ "20", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "180", "180" ], - "smooth_coefficient": "1", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json index d7784db216..94f8634116 100644 --- a/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -95,7 +91,6 @@ "180", "180" ], - "smooth_coefficient": "150", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json index d3640ed715..b0186048dd 100644 --- a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json index 218a787534..437f17bf44 100644 --- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json index 54ed08993e..8e36589ccd 100644 --- a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json +++ b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL A2L.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL A2L.json index 9b6218b86c..5c75e20bdd 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL A2L.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL A2L.json @@ -48,7 +48,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "sparse_infill_speed": [ "200" diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL H2S.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL H2S.json index 890ce852c5..903eb3749d 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL H2S.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL H2S.json @@ -120,10 +120,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -140,7 +136,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json index 38b6bb521b..b7b7d2bd55 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL P2S.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL P2S.json index e8c99baf95..65e4674832 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL P2S.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL P2S.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -99,7 +95,6 @@ "200", "200" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json index 4906acb367..0e281022a3 100644 --- a/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json +++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -95,7 +91,6 @@ "200", "200" ], - "smooth_coefficient": "150", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json index d9b1741a52..4f536ba2cf 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json index 6d73a50989..867d939dce 100644 --- a/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json +++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "330", "330" diff --git a/resources/profiles/BBL/process/0.16mm Standard @BBL A2L.json b/resources/profiles/BBL/process/0.16mm Standard @BBL A2L.json index cfe8b823aa..b3eef2ee33 100644 --- a/resources/profiles/BBL/process/0.16mm Standard @BBL A2L.json +++ b/resources/profiles/BBL/process/0.16mm Standard @BBL A2L.json @@ -33,7 +33,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.16mm Standard @BBL H2S.json b/resources/profiles/BBL/process/0.16mm Standard @BBL H2S.json index 34db04a866..ec829b7ee4 100644 --- a/resources/profiles/BBL/process/0.16mm Standard @BBL H2S.json +++ b/resources/profiles/BBL/process/0.16mm Standard @BBL H2S.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -129,7 +125,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.16mm Standard @BBL P2S.json b/resources/profiles/BBL/process/0.16mm Standard @BBL P2S.json index 3936f388e6..ba295d7a52 100644 --- a/resources/profiles/BBL/process/0.16mm Standard @BBL P2S.json +++ b/resources/profiles/BBL/process/0.16mm Standard @BBL P2S.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json index 2a76dd472d..8995eeb48f 100644 --- a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL A2L 0.6 nozzle.json @@ -21,7 +21,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json index afb20240c5..c0061a0b41 100644 --- a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL H2S 0.6 nozzle.json @@ -124,10 +124,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -144,7 +140,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL P2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL P2S 0.6 nozzle.json index 1357450ea1..74dccd56d7 100644 --- a/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL P2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Balanced Quality @BBL P2S 0.6 nozzle.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json index f763af69b5..9598dfcfea 100644 --- a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json index 2d4396b050..b865adf071 100644 --- a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.20mm High Quality @BBL A2L.json b/resources/profiles/BBL/process/0.20mm High Quality @BBL A2L.json index 86e4fdd103..d7c3d6468d 100644 --- a/resources/profiles/BBL/process/0.20mm High Quality @BBL A2L.json +++ b/resources/profiles/BBL/process/0.20mm High Quality @BBL A2L.json @@ -53,7 +53,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "sparse_infill_density": "25%", "sparse_infill_speed": [ "200" diff --git a/resources/profiles/BBL/process/0.20mm High Quality @BBL H2S.json b/resources/profiles/BBL/process/0.20mm High Quality @BBL H2S.json index 6c26a52279..0e6064052d 100644 --- a/resources/profiles/BBL/process/0.20mm High Quality @BBL H2S.json +++ b/resources/profiles/BBL/process/0.20mm High Quality @BBL H2S.json @@ -119,10 +119,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -139,7 +135,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.20mm High Quality @BBL P2S.json b/resources/profiles/BBL/process/0.20mm High Quality @BBL P2S.json index fc29792372..d6170c2c44 100644 --- a/resources/profiles/BBL/process/0.20mm High Quality @BBL P2S.json +++ b/resources/profiles/BBL/process/0.20mm High Quality @BBL P2S.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "200", "200" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "slowdown_start_height": [ "0", diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL A2L.json b/resources/profiles/BBL/process/0.20mm Standard @BBL A2L.json index b26ff6f9e6..9eee3748dc 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL A2L.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL A2L.json @@ -33,7 +33,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL H2S.json b/resources/profiles/BBL/process/0.20mm Standard @BBL H2S.json index ea157f757c..d807f16450 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL H2S.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL H2S.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_flat_ironing": "1", "prime_tower_width": "60", "print_extruder_id": [ @@ -92,7 +88,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "350", "600" diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json b/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json index c3fec1fa83..2d96c4fc4d 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL P2S.json b/resources/profiles/BBL/process/0.20mm Standard @BBL P2S.json index 2c4de0d7bc..b1696e1fa5 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL P2S.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL P2S.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -92,7 +88,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "270", "600" diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json b/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json index 57646a32c1..c5528cf17a 100644 --- a/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json +++ b/resources/profiles/BBL/process/0.20mm Standard @BBL X1C.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "270", "270" diff --git a/resources/profiles/BBL/process/0.20mm Steady @BBL A2L.json b/resources/profiles/BBL/process/0.20mm Steady @BBL A2L.json index d41f51faf1..cee984c300 100644 --- a/resources/profiles/BBL/process/0.20mm Steady @BBL A2L.json +++ b/resources/profiles/BBL/process/0.20mm Steady @BBL A2L.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "print_extruder_id": [ "1", @@ -125,7 +121,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json index 9008bd79e2..932890cad3 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json b/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json index dcb64e1ec5..3cb1ff5984 100644 --- a/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json +++ b/resources/profiles/BBL/process/0.20mm Strength @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_density": "25%", "skeleton_infill_density": "25%", "skin_infill_density": "25%", diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json index 74c9994732..fe0d6589ac 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.6 nozzle.json @@ -21,7 +21,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json index 83900ad084..d776a52d25 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL A2L 0.8 nozzle.json @@ -21,7 +21,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json index 0cdc5bb25e..373149f7ee 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.6 nozzle.json @@ -124,10 +124,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -144,7 +140,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json index 098cce840c..f9b4a1ab8d 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL H2S 0.8 nozzle.json @@ -124,10 +124,6 @@ "50", "50" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -144,7 +140,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.6 nozzle.json index 7b7f633040..6ec3215684 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.6 nozzle.json @@ -80,10 +80,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.8 nozzle.json index 4a303b27d9..1a925b86c3 100644 --- a/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Balanced Quality @BBL P2S 0.8 nozzle.json @@ -80,10 +80,6 @@ "50", "50" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json index 6d716dfdbf..f59e06d60b 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json b/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json index 17cd1d829c..5a32b21d55 100644 --- a/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json +++ b/resources/profiles/BBL/process/0.24mm Draft @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "230", "230" diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json index 963d8945ad..dc80b360fa 100644 --- a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json index 5cae9a0bf0..a8eb1b516b 100644 --- a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL A2L.json b/resources/profiles/BBL/process/0.24mm Standard @BBL A2L.json index f99e4ec24f..920c0743fd 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL A2L.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL A2L.json @@ -33,7 +33,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL H2S.json b/resources/profiles/BBL/process/0.24mm Standard @BBL H2S.json index 1807668e08..11717ad604 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL H2S.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL H2S.json @@ -118,10 +118,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -138,7 +134,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL P2S.json b/resources/profiles/BBL/process/0.24mm Standard @BBL P2S.json index a6dae0a6dd..b0655b0f55 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL P2S.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL P2S.json @@ -79,10 +79,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -97,7 +93,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json index 2cf71d9ad9..7b3f2d2293 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json index 1a639b0ad3..9f3bd73c59 100644 --- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json index ca4b6a55c1..92fadb9054 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL P1P.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json index d3560f7224..255d2a806a 100644 --- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json +++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL X1C.json @@ -78,10 +78,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -90,7 +86,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "200", "200" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL A2L 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL A2L 0.6 nozzle.json index 4fa0523bb4..800dad889c 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL A2L 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL A2L 0.6 nozzle.json @@ -30,7 +30,6 @@ "slowdown_start_speed": [ "500" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL H2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL H2S 0.6 nozzle.json index c3f1962e55..1e4493c397 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL H2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL H2S 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "500" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_flat_ironing": "1", "prime_tower_width": "60", "print_extruder_id": [ @@ -141,7 +137,6 @@ "80", "80" ], - "smooth_coefficient": "4", "travel_speed": [ "1000", "1000" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json index b8993d012d..66a2c3a007 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL P2S 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL P2S 0.6 nozzle.json index 9f4c86e17a..b10573aa5e 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL P2S 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL P2S 0.6 nozzle.json @@ -81,10 +81,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -93,7 +89,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "270", "600" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json index a960492fdc..f4f72db014 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json index a76b7f9bd5..7b04010bf2 100644 --- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json index fb8c7de72b..4394c363d0 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json index ab0e52733c..99b2f43361 100644 --- a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -94,7 +90,6 @@ "sparse_infill_density": "25%", "skeleton_infill_density": "25%", "skin_infill_density": "25%", - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json index 20b865e2cd..1e60033ace 100644 --- a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL A2L 0.8 nozzle.json @@ -21,7 +21,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json index c7c44a1b1f..cd60ebe8af 100644 --- a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL H2S 0.8 nozzle.json @@ -124,10 +124,6 @@ "50", "50" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -144,7 +140,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%" diff --git a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL P2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL P2S 0.8 nozzle.json index ffa69df36b..f0049b42e3 100644 --- a/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL P2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Balanced Quality @BBL P2S 0.8 nozzle.json @@ -80,10 +80,6 @@ "50", "50" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_brim_width": "-1", "prime_tower_width": "60", "print_extruder_id": [ @@ -98,7 +94,6 @@ "270", "270" ], - "smooth_coefficient": "4", "slowdown_start_height": [ "0", "0" diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json index 84d042d8b0..8100421664 100644 --- a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json index b8f052e179..304b99974a 100644 --- a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json index 6a34e7b93b..a36c99978a 100644 --- a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json index bdae37307f..9103a177a7 100644 --- a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL A2L 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL A2L 0.8 nozzle.json index c0af67dba9..74c452d588 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL A2L 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL A2L 0.8 nozzle.json @@ -21,7 +21,6 @@ "slowdown_end_height": [ "225" ], - "smooth_coefficient": "4", "travel_acceleration": [ "8000" ], diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL H2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL H2S 0.8 nozzle.json index 2c4d4b26e5..9f8035e903 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL H2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL H2S 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "500" ], - "overhang_totally_speed": [ - "10", - "10" - ], "prime_tower_flat_ironing": "1", "prime_tower_width": "60", "print_extruder_id": [ @@ -141,7 +137,6 @@ "80", "80" ], - "smooth_coefficient": "4", "travel_speed": [ "1000", "1000" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json index 74ab7c414e..b6596c47d5 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL P1P 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL P2S 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL P2S 0.8 nozzle.json index e1fe009797..eee70ed075 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL P2S 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL P2S 0.8 nozzle.json @@ -81,10 +81,6 @@ "50", "50" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -93,7 +89,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "270", "600" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json index ce865a363b..dabf9e5308 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json index 8777997db3..f15e9e7a91 100644 --- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json index 54d9bb8666..e4a31d3d12 100644 --- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json index f136450576..ebc423cf93 100644 --- a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json +++ b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json index 31ede55d0c..cf788c3832 100644 --- a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json index 62122ff25d..12de9a8108 100644 --- a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json index e98fa844d7..1b4d5ee0c3 100644 --- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" diff --git a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json index 255af5a125..2745935c6c 100644 --- a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json +++ b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json @@ -79,10 +79,6 @@ "120", "120" ], - "overhang_totally_speed": [ - "10", - "10" - ], "print_extruder_id": [ "1", "1" @@ -91,7 +87,6 @@ "Direct Drive Standard", "Direct Drive High Flow" ], - "smooth_coefficient": "150", "sparse_infill_speed": [ "100", "100" diff --git a/resources/profiles/BBL/process/fdm_process_common.json b/resources/profiles/BBL/process/fdm_process_common.json index 6f715882cc..5af292b424 100644 --- a/resources/profiles/BBL/process/fdm_process_common.json +++ b/resources/profiles/BBL/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "bottom_shell_layers": "3", "bottom_color_penetration_layers": "3", "bottom_shell_thickness": "0", @@ -47,7 +46,6 @@ "40" ], "interface_shells": "0", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": [ "40" @@ -77,9 +75,6 @@ "outer_wall_speed": [ "120" ], - "overhang_totally_speed": [ - "10" - ], "override_filament_scarf_seam_setting": "0", "pre_start_fan_time": [ "0" @@ -105,7 +100,6 @@ "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", - "smooth_coefficient": "80", "sparse_infill_density": "15%", "skeleton_infill_density": "15%", "skin_infill_density": "15%", diff --git a/resources/profiles/BBL/process/fdm_process_dual_common.json b/resources/profiles/BBL/process/fdm_process_dual_common.json index 95a58bfb78..b247f2ffb1 100644 --- a/resources/profiles/BBL/process/fdm_process_dual_common.json +++ b/resources/profiles/BBL/process/fdm_process_dual_common.json @@ -113,12 +113,6 @@ "10", "10" ], - "overhang_totally_speed": [ - "10", - "10", - "10", - "10" - ], "print_extruder_id": [ "1", "1", @@ -180,7 +174,6 @@ "0", "0" ], - "smooth_coefficient": "4", "sparse_infill_acceleration": [ "100%", "100%", diff --git a/resources/profiles/BIQU.json b/resources/profiles/BIQU.json index 6c28578e82..2dd4115290 100644 --- a/resources/profiles/BIQU.json +++ b/resources/profiles/BIQU.json @@ -1,6 +1,6 @@ { "name": "BIQU", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "BIQU configurations", "machine_model_list": [ diff --git a/resources/profiles/BIQU/machine/BIQU Hurakan (0.4 nozzle).json b/resources/profiles/BIQU/machine/BIQU Hurakan (0.4 nozzle).json index cc0e00d7e0..93ad734a32 100644 --- a/resources/profiles/BIQU/machine/BIQU Hurakan (0.4 nozzle).json +++ b/resources/profiles/BIQU/machine/BIQU Hurakan (0.4 nozzle).json @@ -134,7 +134,6 @@ "40" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE\n", diff --git a/resources/profiles/BIQU/machine/fdm_biqu_common.json b/resources/profiles/BIQU/machine/fdm_biqu_common.json index 45c676c60b..8adf13d5f9 100644 --- a/resources/profiles/BIQU/machine/fdm_biqu_common.json +++ b/resources/profiles/BIQU/machine/fdm_biqu_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", diff --git a/resources/profiles/BIQU/machine/fdm_klipper_common.json b/resources/profiles/BIQU/machine/fdm_klipper_common.json index ad76cd3c5b..5ec9283827 100644 --- a/resources/profiles/BIQU/machine/fdm_klipper_common.json +++ b/resources/profiles/BIQU/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "40" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE\n", diff --git a/resources/profiles/BIQU/machine/fdm_machine_common.json b/resources/profiles/BIQU/machine/fdm_machine_common.json index 22ba444121..5355d94467 100644 --- a/resources/profiles/BIQU/machine/fdm_machine_common.json +++ b/resources/profiles/BIQU/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" diff --git a/resources/profiles/BIQU/process/fdm_process_biqu_common.json b/resources/profiles/BIQU/process/fdm_process_biqu_common.json index 901b90ae08..b2aebda8a5 100644 --- a/resources/profiles/BIQU/process/fdm_process_biqu_common.json +++ b/resources/profiles/BIQU/process/fdm_process_biqu_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/BIQU/process/fdm_process_common.json b/resources/profiles/BIQU/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/BIQU/process/fdm_process_common.json +++ b/resources/profiles/BIQU/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json index a5e106f0ed..fcd275537c 100644 --- a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json +++ b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_biqu_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Blocks.json b/resources/profiles/Blocks.json index 269391c4c3..f24bcb81da 100644 --- a/resources/profiles/Blocks.json +++ b/resources/profiles/Blocks.json @@ -1,6 +1,6 @@ { "name": "Blocks", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "Blocks configurations", "machine_model_list": [ @@ -249,48 +249,48 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Blocks Generic ABS", - "sub_path": "filament/Blocks Generic ABS.json" + "name": "Generic ABS @Blocks", + "sub_path": "filament/Generic ABS @Blocks.json" }, { - "name": "Blocks Generic ASA", - "sub_path": "filament/Blocks Generic ASA.json" + "name": "Generic ASA @Blocks", + "sub_path": "filament/Generic ASA @Blocks.json" }, { - "name": "Blocks Generic ASA-CF", - "sub_path": "filament/Blocks Generic ASA-CF.json" + "name": "Generic ASA-CF @Blocks", + "sub_path": "filament/Generic ASA-CF @Blocks.json" }, { - "name": "Blocks Generic PA", - "sub_path": "filament/Blocks Generic PA.json" + "name": "Generic PA @Blocks", + "sub_path": "filament/Generic PA @Blocks.json" }, { - "name": "Blocks Generic PA-CF", - "sub_path": "filament/Blocks Generic PA-CF.json" + "name": "Generic PA-CF @Blocks", + "sub_path": "filament/Generic PA-CF @Blocks.json" }, { - "name": "Blocks Generic PC", - "sub_path": "filament/Blocks Generic PC.json" + "name": "Generic PC @Blocks", + "sub_path": "filament/Generic PC @Blocks.json" }, { - "name": "Blocks Generic PETG", - "sub_path": "filament/Blocks Generic PETG.json" + "name": "Generic PETG @Blocks", + "sub_path": "filament/Generic PETG @Blocks.json" }, { - "name": "Blocks Generic PLA", - "sub_path": "filament/Blocks Generic PLA.json" + "name": "Generic PLA @Blocks", + "sub_path": "filament/Generic PLA @Blocks.json" }, { - "name": "Blocks Generic PLA-CF", - "sub_path": "filament/Blocks Generic PLA-CF.json" + "name": "Generic PLA-CF @Blocks", + "sub_path": "filament/Generic PLA-CF @Blocks.json" }, { - "name": "Blocks Generic PVA", - "sub_path": "filament/Blocks Generic PVA.json" + "name": "Generic PVA @Blocks", + "sub_path": "filament/Generic PVA @Blocks.json" }, { - "name": "Blocks Generic TPU", - "sub_path": "filament/Blocks Generic TPU.json" + "name": "Generic TPU @Blocks", + "sub_path": "filament/Generic TPU @Blocks.json" } ], "machine_list": [ diff --git a/resources/profiles/Blocks/filament/Blocks Generic ABS.json b/resources/profiles/Blocks/filament/Blocks Generic ABS.json deleted file mode 100644 index db6ee6f3c9..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic ABS.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "QhLaLEkxhvIMa3Ik", - "filament_id": "BSFI004", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_density": [ - "1.04" - ], - "filament_shrink": [ - "99.5%" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "hot_plate_temp": [ - "90" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "30" - ], - "slow_down_layer_time": [ - "10" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_min_speed": [ - "30" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "100%" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json deleted file mode 100644 index 6836bee45e..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA-CF.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic ASA-CF", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "FF6D7i492XTrb8AO", - "filament_id": "BSFI010", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_density": [ - "1.04" - ], - "filament_shrink": [ - "99.5%" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp_initial_layer": [ - "95" - ], - "hot_plate_temp": [ - "95" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "45" - ], - "fan_cooling_layer_time": [ - "35" - ], - "slow_down_layer_time": [ - "3" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "50%" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic ASA.json b/resources/profiles/Blocks/filament/Blocks Generic ASA.json deleted file mode 100644 index 5601ef2264..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic ASA.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "DcgqA071S6MRVbKI", - "filament_id": "BSFI005", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_density": [ - "1.04" - ], - "filament_shrink": [ - "99.5%" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "hot_plate_temp": [ - "90" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "30" - ], - "slow_down_layer_time": [ - "10" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_min_speed": [ - "30" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "100%" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json deleted file mode 100644 index a145a7f31d..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PA-CF.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "B254XDRQzysz7YUd", - "filament_id": "BSFI007", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "filament_density": [ - "1.25" - ], - "nozzle_temperature": [ - "250" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "hot_plate_temp": [ - "90" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_z_hop": [ - "0.0" - ], - "fan_min_speed": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "4" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "95%" - ], - "overhang_fan_speed": [ - "80%" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "80" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PA.json b/resources/profiles/Blocks/filament/Blocks Generic PA.json deleted file mode 100644 index 9c385d7cdb..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "3L5IYVTlkt8V0EiW", - "filament_id": "BSFI006", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PC.json b/resources/profiles/Blocks/filament/Blocks Generic PC.json deleted file mode 100644 index 9d4e153f27..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PC.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "VUPeelf61TmTQrun", - "filament_id": "BSFI008", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PETG.json b/resources/profiles/Blocks/filament/Blocks Generic PETG.json deleted file mode 100644 index 8bfeaed6b9..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PETG.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PETG", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "FKkbjL1V4ZEjXB0H", - "filament_id": "BSFI002", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_density": [ - "1.24" - ], - "filament_shrink": [ - "99.9%" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_min_speed": [ - "30" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "100%" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_min_speed": [ - "40" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "BLOCKS Pro S100 0.4 nozzle", - "BLOCKS Pro S100 0.6 nozzle", - "BLOCKS Pro S100 0.8 nozzle", - "BLOCKS Pro S100 1.0 nozzle", - "BLOCKS Pro S100 1.2 nozzle", - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json b/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json deleted file mode 100644 index 5928bc953e..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA-CF.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "RHKPeXZiv4E2p4lP", - "filament_id": "BSFI010", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_type": [ - "PLA-CF" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PLA.json b/resources/profiles/Blocks/filament/Blocks Generic PLA.json deleted file mode 100644 index bc8c34fc26..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PLA.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "N3wDUqmBETfelOoG", - "filament_id": "BSFI001", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "slow_down_min_speed": [ - "30" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "compatible_printers": [ - "BLOCKS Pro S100 0.4 nozzle", - "BLOCKS Pro S100 0.6 nozzle", - "BLOCKS Pro S100 0.8 nozzle", - "BLOCKS Pro S100 1.0 nozzle", - "BLOCKS Pro S100 1.2 nozzle", - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic PVA.json b/resources/profiles/Blocks/filament/Blocks Generic PVA.json deleted file mode 100644 index becd53db6c..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic PVA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "J74KgdSzf503Tk9p", - "filament_id": "BSFI009", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "compatible_printers": [ - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Blocks Generic TPU.json b/resources/profiles/Blocks/filament/Blocks Generic TPU.json deleted file mode 100644 index decdf2eaf1..0000000000 --- a/resources/profiles/Blocks/filament/Blocks Generic TPU.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Blocks Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "xFRwN8ZEwEGlLFwo", - "filament_id": "BSFI003", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "4" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_density": [ - "1.25" - ], - "filament_shrink": [ - "99.5%" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "hot_plate_temp": [ - "90" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "80" - ], - "compatible_printers": [ - "BLOCKS Pro S100 0.4 nozzle", - "BLOCKS Pro S100 0.6 nozzle", - "BLOCKS Pro S100 0.8 nozzle", - "BLOCKS Pro S100 1.0 nozzle", - "BLOCKS Pro S100 1.2 nozzle", - "BLOCKS RD50 V2 0.4 nozzle", - "BLOCKS RD50 V2 0.6 nozzle", - "BLOCKS RD50 V2 0.8 nozzle", - "BLOCKS RF50 0.4 nozzle", - "BLOCKS RF50 0.6 nozzle", - "BLOCKS RF50 0.8 nozzle" - ] -} diff --git a/resources/profiles/Blocks/filament/Generic ABS @Blocks.json b/resources/profiles/Blocks/filament/Generic ABS @Blocks.json new file mode 100644 index 0000000000..c3d09cfd18 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic ABS @Blocks.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "name": "Generic ABS @Blocks", + "inherits": "fdm_filament_abs", + "renamed_from": "Blocks Generic ABS", + "from": "system", + "setting_id": "TL1Q1kA4t36GGObG", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_density": [ + "1.04" + ], + "filament_shrink": [ + "99.5%" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "30" + ], + "slow_down_layer_time": [ + "10" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_min_speed": [ + "30" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "100%" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic ASA @Blocks.json b/resources/profiles/Blocks/filament/Generic ASA @Blocks.json new file mode 100644 index 0000000000..0c1ee32085 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic ASA @Blocks.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "name": "Generic ASA @Blocks", + "inherits": "fdm_filament_asa", + "renamed_from": "Blocks Generic ASA", + "from": "system", + "setting_id": "xP7cB4RHgbm4cYDD", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_density": [ + "1.04" + ], + "filament_shrink": [ + "99.5%" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "30" + ], + "slow_down_layer_time": [ + "10" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_min_speed": [ + "30" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "100%" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json b/resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json new file mode 100644 index 0000000000..0d9f0aa862 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic ASA-CF @Blocks.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "Generic ASA-CF @Blocks", + "inherits": "fdm_filament_asa", + "renamed_from": "Blocks Generic ASA-CF", + "from": "system", + "setting_id": "ju4ue7yJoz3ujny6", + "filament_id": "OF53eLVD", + "instantiation": "true", + "filament_type": [ + "ASA-CF" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_density": [ + "1.04" + ], + "filament_shrink": [ + "99.5%" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "hot_plate_temp": [ + "95" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "45" + ], + "fan_cooling_layer_time": [ + "35" + ], + "slow_down_layer_time": [ + "3" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "50%" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PA @Blocks.json b/resources/profiles/Blocks/filament/Generic PA @Blocks.json new file mode 100644 index 0000000000..e624226ded --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PA @Blocks.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PA @Blocks", + "inherits": "fdm_filament_pa", + "renamed_from": "Blocks Generic PA", + "from": "system", + "setting_id": "hL3p8gAeciwDkjNK", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json b/resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json new file mode 100644 index 0000000000..7ec957f6d1 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PA-CF @Blocks.json @@ -0,0 +1,99 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Blocks", + "inherits": "fdm_filament_pa", + "renamed_from": "Blocks Generic PA-CF", + "from": "system", + "setting_id": "T6SO0WRdnG6wcyG8", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "filament_density": [ + "1.25" + ], + "nozzle_temperature": [ + "250" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_z_hop": [ + "0.0" + ], + "fan_min_speed": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "4" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "80%" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "80" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PC @Blocks.json b/resources/profiles/Blocks/filament/Generic PC @Blocks.json new file mode 100644 index 0000000000..7b5df77bc5 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PC @Blocks.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PC @Blocks", + "inherits": "fdm_filament_pc", + "renamed_from": "Blocks Generic PC", + "from": "system", + "setting_id": "Xhs8PjtmwwVj0ksE", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PETG @Blocks.json b/resources/profiles/Blocks/filament/Generic PETG @Blocks.json new file mode 100644 index 0000000000..45a2a13e9b --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PETG @Blocks.json @@ -0,0 +1,98 @@ +{ + "type": "filament", + "name": "Generic PETG @Blocks", + "inherits": "fdm_filament_petg", + "renamed_from": "Blocks Generic PETG", + "from": "system", + "setting_id": "NgzPlYItKHbmGgv3", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_density": [ + "1.24" + ], + "filament_shrink": [ + "99.9%" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_min_speed": [ + "30" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "100%" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_min_speed": [ + "40" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "BLOCKS Pro S100 0.4 nozzle", + "BLOCKS Pro S100 0.6 nozzle", + "BLOCKS Pro S100 0.8 nozzle", + "BLOCKS Pro S100 1.0 nozzle", + "BLOCKS Pro S100 1.2 nozzle", + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PLA @Blocks.json b/resources/profiles/Blocks/filament/Generic PLA @Blocks.json new file mode 100644 index 0000000000..3a5c942899 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PLA @Blocks.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "name": "Generic PLA @Blocks", + "inherits": "fdm_filament_pla", + "renamed_from": "Blocks Generic PLA", + "from": "system", + "setting_id": "kjhuttx4T8OtTNmV", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "30" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "compatible_printers": [ + "BLOCKS Pro S100 0.4 nozzle", + "BLOCKS Pro S100 0.6 nozzle", + "BLOCKS Pro S100 0.8 nozzle", + "BLOCKS Pro S100 1.0 nozzle", + "BLOCKS Pro S100 1.2 nozzle", + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json b/resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json new file mode 100644 index 0000000000..3a3ac5daba --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PLA-CF @Blocks.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Blocks", + "inherits": "fdm_filament_pla", + "renamed_from": "Blocks Generic PLA-CF", + "from": "system", + "setting_id": "oKUqzwAWMrpiyGLf", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_type": [ + "PLA-CF" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic PVA @Blocks.json b/resources/profiles/Blocks/filament/Generic PVA @Blocks.json new file mode 100644 index 0000000000..5b6a3ad368 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic PVA @Blocks.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PVA @Blocks", + "inherits": "fdm_filament_pva", + "renamed_from": "Blocks Generic PVA", + "from": "system", + "setting_id": "tNw3oe7VovLkgUbB", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "compatible_printers": [ + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/filament/Generic TPU @Blocks.json b/resources/profiles/Blocks/filament/Generic TPU @Blocks.json new file mode 100644 index 0000000000..8b5873a745 --- /dev/null +++ b/resources/profiles/Blocks/filament/Generic TPU @Blocks.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "name": "Generic TPU @Blocks", + "inherits": "fdm_filament_tpu", + "renamed_from": "Blocks Generic TPU", + "from": "system", + "setting_id": "6iVYOCZo8ugs4JA0", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "4" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_density": [ + "1.25" + ], + "filament_shrink": [ + "99.5%" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "80" + ], + "compatible_printers": [ + "BLOCKS Pro S100 0.4 nozzle", + "BLOCKS Pro S100 0.6 nozzle", + "BLOCKS Pro S100 0.8 nozzle", + "BLOCKS Pro S100 1.0 nozzle", + "BLOCKS Pro S100 1.2 nozzle", + "BLOCKS RD50 V2 0.4 nozzle", + "BLOCKS RD50 V2 0.6 nozzle", + "BLOCKS RD50 V2 0.8 nozzle", + "BLOCKS RF50 0.4 nozzle", + "BLOCKS RF50 0.6 nozzle", + "BLOCKS RF50 0.8 nozzle" + ] +} diff --git a/resources/profiles/Blocks/machine/BLOCKS Pro S100.json b/resources/profiles/Blocks/machine/BLOCKS Pro S100.json index abd474d3f1..de9ea3756c 100644 --- a/resources/profiles/Blocks/machine/BLOCKS Pro S100.json +++ b/resources/profiles/Blocks/machine/BLOCKS Pro S100.json @@ -8,5 +8,5 @@ "bed_model": "PRO S100 HotBed model.stl", "bed_texture": "PRO S100 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json b/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json index b3b82c876c..76dafd429e 100644 --- a/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json +++ b/resources/profiles/Blocks/machine/BLOCKS RD50 V2.json @@ -8,5 +8,5 @@ "bed_model": "RD50 V2 HotBed model.stl", "bed_texture": "RD50 V2 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/BLOCKS RF50.json b/resources/profiles/Blocks/machine/BLOCKS RF50.json index acc4e95f63..14ae8bc5f4 100644 --- a/resources/profiles/Blocks/machine/BLOCKS RF50.json +++ b/resources/profiles/Blocks/machine/BLOCKS RF50.json @@ -8,5 +8,5 @@ "bed_model": "RF50 HotBed model.stl", "bed_texture": "RF50 HotBed texture.svg", "hotend_model": "BLOCKS PrintCore.stl", - "default_materials": "Blocks Generic PLA;Blocks Generic PETG;Blocks Generic TPU" + "default_materials": "Generic PLA @Blocks;Generic PETG @Blocks;Generic TPU @Blocks" } diff --git a/resources/profiles/Blocks/machine/fdm_klipper_common.json b/resources/profiles/Blocks/machine/fdm_klipper_common.json index 7415366d39..5372b42547 100644 --- a/resources/profiles/Blocks/machine/fdm_klipper_common.json +++ b/resources/profiles/Blocks/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "35" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "CHANGE_FILAMENT", "machine_pause_gcode": "PAUSE", @@ -125,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Blocks Generic PLA" + "Generic PLA @Blocks" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/Blocks/machine/fdm_machine_common.json b/resources/profiles/Blocks/machine/fdm_machine_common.json index 27cde99c12..e250ba2e3c 100644 --- a/resources/profiles/Blocks/machine/fdm_machine_common.json +++ b/resources/profiles/Blocks/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Blocks/process/0.12mm Fine 0.4 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.12mm Fine 0.4 nozzle @Blocks_RF50.json index 86f9cb5adb..315256dcab 100644 --- a/resources/profiles/Blocks/process/0.12mm Fine 0.4 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.12mm Fine 0.4 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json index ae773410b3..ca6facb720 100644 --- a/resources/profiles/Blocks/process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.16mm Optimal 0.4 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.20mm Optimal 0.6 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.20mm Optimal 0.6 nozzle @Blocks_RF50.json index 7c02d847bc..b80b051a71 100644 --- a/resources/profiles/Blocks/process/0.20mm Optimal 0.6 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.20mm Optimal 0.6 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json index 32beb61fe9..5c88e00c2a 100644 --- a/resources/profiles/Blocks/process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.20mm Standard 0.4 nozzle @Blocks_RF50.json @@ -41,7 +41,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.24mm Draft 0.4 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.24mm Draft 0.4 nozzle @Blocks_RF50.json index d9d6895c3d..edb1bfcc2d 100644 --- a/resources/profiles/Blocks/process/0.24mm Draft 0.4 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.24mm Draft 0.4 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json index 6744554909..d2f853b638 100644 --- a/resources/profiles/Blocks/process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.26mm Standard 0.6 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json index 0b3b324664..dd6b60d371 100644 --- a/resources/profiles/Blocks/process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.28mm Extra Draft 0.4 nozzle @Blocks_RF50.json @@ -38,7 +38,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.30mm Optimal 0.8 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.30mm Optimal 0.8 nozzle @Blocks_RF50.json index 704d355221..9d909c1dd4 100644 --- a/resources/profiles/Blocks/process/0.30mm Optimal 0.8 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.30mm Optimal 0.8 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.32mm Draft 0.6 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.32mm Draft 0.6 nozzle @Blocks_RF50.json index 05c4c06e22..60c6eae19e 100644 --- a/resources/profiles/Blocks/process/0.32mm Draft 0.6 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.32mm Draft 0.6 nozzle @Blocks_RF50.json @@ -38,7 +38,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json index 18d38c7c34..f28a975208 100644 --- a/resources/profiles/Blocks/process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.38mm Extra Draft 0.6 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json index b4359ae990..7b94febc1c 100644 --- a/resources/profiles/Blocks/process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.38mm Standard 0.8 nozzle @Blocks_RF50.json @@ -38,7 +38,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json index 6e286f3309..d49633e89d 100644 --- a/resources/profiles/Blocks/process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.46mm Draft 0.8 nozzle @Blocks_RF50.json @@ -38,7 +38,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json b/resources/profiles/Blocks/process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json index e0d5a486de..a0e9121ceb 100644 --- a/resources/profiles/Blocks/process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json +++ b/resources/profiles/Blocks/process/0.54mm Extra Draft 0.8 nozzle @Blocks_RF50.json @@ -37,7 +37,6 @@ "support_speed": "300", "detect_overhang_wall": "1", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "0", "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", diff --git a/resources/profiles/Blocks/process/fdm_process_blocks_common.json b/resources/profiles/Blocks/process/fdm_process_blocks_common.json index 2e9e81b262..4eac1c83d7 100644 --- a/resources/profiles/Blocks/process/fdm_process_blocks_common.json +++ b/resources/profiles/Blocks/process/fdm_process_blocks_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Blocks/process/fdm_process_common 0.6 nozzle.json b/resources/profiles/Blocks/process/fdm_process_common 0.6 nozzle.json index 51ecf6c306..ef7dcc12bf 100644 --- a/resources/profiles/Blocks/process/fdm_process_common 0.6 nozzle.json +++ b/resources/profiles/Blocks/process/fdm_process_common 0.6 nozzle.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_blocks_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "brim_width": "5", diff --git a/resources/profiles/Blocks/process/fdm_process_common 0.8 nozzle.json b/resources/profiles/Blocks/process/fdm_process_common 0.8 nozzle.json index 10089234ee..6a32e4abb4 100644 --- a/resources/profiles/Blocks/process/fdm_process_common 0.8 nozzle.json +++ b/resources/profiles/Blocks/process/fdm_process_common 0.8 nozzle.json @@ -18,7 +18,6 @@ "internal_solid_infill_line_width": "0.82", "support_line_width": "0.82", "top_surface_line_width": "0.82", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "brim_width": "5", diff --git a/resources/profiles/Blocks/process/fdm_process_common 1.0 nozzle.json b/resources/profiles/Blocks/process/fdm_process_common 1.0 nozzle.json index c1e7f74673..a09804b95d 100644 --- a/resources/profiles/Blocks/process/fdm_process_common 1.0 nozzle.json +++ b/resources/profiles/Blocks/process/fdm_process_common 1.0 nozzle.json @@ -14,7 +14,6 @@ "internal_solid_infill_line_width": "1.02", "support_line_width": "1.02", "top_surface_line_width": "1.02", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "brim_width": "5", diff --git a/resources/profiles/Blocks/process/fdm_process_common 1.2 nozzle.json b/resources/profiles/Blocks/process/fdm_process_common 1.2 nozzle.json index 292d413e96..4764a600fd 100644 --- a/resources/profiles/Blocks/process/fdm_process_common 1.2 nozzle.json +++ b/resources/profiles/Blocks/process/fdm_process_common 1.2 nozzle.json @@ -14,7 +14,6 @@ "internal_solid_infill_line_width": "1.22", "support_line_width": "1.22", "top_surface_line_width": "1.22", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "brim_width": "5", diff --git a/resources/profiles/Blocks/process/fdm_process_common.json b/resources/profiles/Blocks/process/fdm_process_common.json index e6614cb911..2caa139d1f 100644 --- a/resources/profiles/Blocks/process/fdm_process_common.json +++ b/resources/profiles/Blocks/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/CONSTRUCT3D.json b/resources/profiles/CONSTRUCT3D.json index ba2652f724..55845903b0 100644 --- a/resources/profiles/CONSTRUCT3D.json +++ b/resources/profiles/CONSTRUCT3D.json @@ -1,6 +1,6 @@ { "name": "CONSTRUCT3D", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Construct3D configurations", "machine_model_list": [ @@ -65,16 +65,16 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "C1 Generic High Flow PETG", - "sub_path": "filament/C1 Generic High Flow PETG.json" + "name": "Generic High Flow PETG @C1", + "sub_path": "filament/Generic High Flow PETG @C1.json" }, { - "name": "C1 Generic PETG", - "sub_path": "filament/C1 Generic PETG.json" + "name": "Generic PETG @C1", + "sub_path": "filament/Generic PETG @C1.json" }, { - "name": "C1 Generic PLA", - "sub_path": "filament/C1 Generic PLA.json" + "name": "Generic PLA @C1", + "sub_path": "filament/Generic PLA @C1.json" } ], "machine_list": [ diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json deleted file mode 100644 index 355637d63c..0000000000 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic High Flow PETG.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "type": "filament", - "name": "C1 Generic High Flow PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "3IxBZSWFfFGmKAQ7", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "6" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "43" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "275" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Construct 1 0.4 nozzle", - "Construct 1 XL 0.6 nozzle" - ] -} diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json deleted file mode 100644 index 7579260e16..0000000000 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PETG.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "filament", - "name": "C1 Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "jZBfhlf6VX5r3KHb", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "20" - ], - "overhang_fan_speed": [ - "80" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "6" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Construct 1 0.4 nozzle", - "Construct 1 XL 0.6 nozzle" - ] -} diff --git a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json b/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json deleted file mode 100644 index dd50bdd607..0000000000 --- a/resources/profiles/CONSTRUCT3D/filament/C1 Generic PLA.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "name": "C1 Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Uv3kcMO5qNwkrMPV", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "slow_down_layer_time": [ - "4" - ], - "hot_plate_temp": [ - "62" - ], - "hot_plate_temp_initial_layer": [ - "68" - ], - "compatible_printers": [ - "Construct 1 0.4 nozzle", - "Construct 1 XL 0.6 nozzle" - ] -} diff --git a/resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json b/resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json new file mode 100644 index 0000000000..11a7df0903 --- /dev/null +++ b/resources/profiles/CONSTRUCT3D/filament/Generic High Flow PETG @C1.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "Generic High Flow PETG @C1", + "inherits": "fdm_filament_pet", + "renamed_from": "C1 Generic High Flow PETG", + "from": "system", + "setting_id": "STRDBlNRWBGfRctE", + "filament_id": "OFNjku08", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "6" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "43" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "275" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Construct 1 0.4 nozzle", + "Construct 1 XL 0.6 nozzle" + ] +} diff --git a/resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json b/resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json new file mode 100644 index 0000000000..dfb510e993 --- /dev/null +++ b/resources/profiles/CONSTRUCT3D/filament/Generic PETG @C1.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Generic PETG @C1", + "inherits": "fdm_filament_pet", + "renamed_from": "C1 Generic PETG", + "from": "system", + "setting_id": "v0b4nWyzRw5z5EfK", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "20" + ], + "overhang_fan_speed": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "6" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Construct 1 0.4 nozzle", + "Construct 1 XL 0.6 nozzle" + ] +} diff --git a/resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json b/resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json new file mode 100644 index 0000000000..4c8a90b1de --- /dev/null +++ b/resources/profiles/CONSTRUCT3D/filament/Generic PLA @C1.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic PLA @C1", + "inherits": "fdm_filament_pla", + "renamed_from": "C1 Generic PLA", + "from": "system", + "setting_id": "mCKOBqN6Y92a9nHV", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "slow_down_layer_time": [ + "4" + ], + "hot_plate_temp": [ + "62" + ], + "hot_plate_temp_initial_layer": [ + "68" + ], + "compatible_printers": [ + "Construct 1 0.4 nozzle", + "Construct 1 XL 0.6 nozzle" + ] +} diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json index bee8ab1e73..7d6ad32ce1 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1 XL.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "CONSTRUCT3D", "bed_model": "construct_1_xl_buildplate_model.stl", - "default_materials": "C1 Generic PLA;C1 Generic PETG;C1 Generic High Flow PETG" + "default_materials": "Generic PLA @C1;Generic PETG @C1;Generic High Flow PETG @C1" } diff --git a/resources/profiles/CONSTRUCT3D/machine/Construct 1.json b/resources/profiles/CONSTRUCT3D/machine/Construct 1.json index 152a1e5bb2..4839166da6 100644 --- a/resources/profiles/CONSTRUCT3D/machine/Construct 1.json +++ b/resources/profiles/CONSTRUCT3D/machine/Construct 1.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "CONSTRUCT3D", "bed_model": "construct_1_buildplate_model.stl", - "default_materials": "C1 Generic PLA;C1 Generic PETG;C1 Generic High Flow PETG" + "default_materials": "Generic PLA @C1;Generic PETG @C1;Generic High Flow PETG @C1" } diff --git a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json index 7459504984..ff5aca073b 100644 --- a/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json +++ b/resources/profiles/CONSTRUCT3D/machine/fdm_machine_common.json @@ -22,7 +22,6 @@ "printhost_port": "", "printhost_ssl_ignore_revoke": "0", "printhost_user": "", - "silent_mode": "0", "machine_max_acceleration_e": [ "8000" ], @@ -121,7 +120,6 @@ "thumbnails": [ "160x160" ], - "z_lift_type": "Auto Lift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", diff --git a/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json b/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json index baaf57a50b..1378aca57f 100644 --- a/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json +++ b/resources/profiles/CONSTRUCT3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -81,7 +80,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Chuanying.json b/resources/profiles/Chuanying.json index 19d5c9b7b5..5434e13bb8 100644 --- a/resources/profiles/Chuanying.json +++ b/resources/profiles/Chuanying.json @@ -1,7 +1,7 @@ { "name": "Chuanying", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Chuanying configurations", "machine_model_list": [ @@ -46,72 +46,72 @@ ], "filament_list": [ { - "name": "Chuanying Generic ABS", - "sub_path": "filament/Chuanying Generic ABS.json" + "name": "Generic ABS @Chuanying", + "sub_path": "filament/Generic ABS @Chuanying.json" }, { - "name": "Chuanying Generic ASA", - "sub_path": "filament/Chuanying Generic ASA.json" + "name": "Generic ASA @Chuanying", + "sub_path": "filament/Generic ASA @Chuanying.json" }, { - "name": "Chuanying Generic HS PLA", - "sub_path": "filament/Chuanying Generic HS PLA.json" + "name": "Generic HS PLA @Chuanying", + "sub_path": "filament/Generic HS PLA @Chuanying.json" }, { - "name": "Chuanying Generic PETG", - "sub_path": "filament/Chuanying Generic PETG.json" + "name": "Generic PETG @Chuanying", + "sub_path": "filament/Generic PETG @Chuanying.json" }, { - "name": "Chuanying Generic PLA", - "sub_path": "filament/Chuanying Generic PLA.json" + "name": "Generic PLA @Chuanying", + "sub_path": "filament/Generic PLA @Chuanying.json" }, { - "name": "Chuanying Generic PLA-Silk", - "sub_path": "filament/Chuanying Generic PLA-Silk.json" + "name": "Generic PLA-Silk @Chuanying", + "sub_path": "filament/Generic PLA-Silk @Chuanying.json" }, { - "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json" + "name": "Generic ABS @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic ABS @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic HIPS", - "sub_path": "filament/Chuanying Generic HIPS.json" + "name": "Generic HIPS @Chuanying", + "sub_path": "filament/Generic HIPS @Chuanying.json" }, { - "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic ASA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic ASA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic HS PLA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying PETG @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PETG @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PETG @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic PVA", - "sub_path": "filament/Chuanying Generic PVA.json" + "name": "Generic PLA @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PLA @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PVA @Chuanying", + "sub_path": "filament/Generic PVA @Chuanying.json" }, { - "name": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", - "sub_path": "filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json" + "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", + "sub_path": "filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json" }, { - "name": "Chuanying Generic PETG-CF10", - "sub_path": "filament/Chuanying Generic PETG-CF10.json" + "name": "Generic PETG-CF10 @Chuanying", + "sub_path": "filament/Generic PETG-CF10 @Chuanying.json" }, { - "name": "Chuanying Generic PLA-CF10", - "sub_path": "filament/Chuanying Generic PLA-CF10.json" + "name": "Generic PLA-CF10 @Chuanying", + "sub_path": "filament/Generic PLA-CF10 @Chuanying.json" }, { - "name": "Chuanying Generic TPU", - "sub_path": "filament/Chuanying Generic TPU.json" + "name": "Generic TPU @Chuanying", + "sub_path": "filament/Generic TPU @Chuanying.json" } ], "machine_list": [ diff --git a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index e8067f4945..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying ABS @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying ABS @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic ABS", - "from": "system", - "setting_id": "VkCgo0e4KR24DX28", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying ABS @Chuanying X1 0.25 Nozzle" - ], - "fan_max_speed": [ - "50" - ], - "filament_cost": [ - "40" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "pressure_advance": [ - "0.1" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index 10415dcb72..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying ASA @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying ASA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic ASA", - "from": "system", - "setting_id": "px1EPCDgOG8eE81V", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying ASA @Chuanying X1 0.25 Nozzle" - ], - "fan_max_speed": [ - "50" - ], - "filament_cost": [ - "40" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: ASA\n" - ], - "pressure_advance": [ - "0.1" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json b/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json deleted file mode 100644 index 201155e883..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ABS.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "XslWGeEo1Okicu28", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "8" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: ABS\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_density": [ - "1.04" - ], - "temperature_vitrification": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json b/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json deleted file mode 100644 index b95df151c5..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic ASA.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "wBBQiy8JV2LrnIav", - "filament_id": "GFL99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "20" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying ASA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode \n;right_extruder_material:ASA" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_type": [ - "ASA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.04" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json b/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json deleted file mode 100644 index 1087346c34..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HIPS.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic HIPS", - "inherits": "Chuanying Generic ABS", - "from": "system", - "setting_id": "bBNozld07rP6mV3d", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.01" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying Generic HIPS" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "HIPS" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json b/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json deleted file mode 100644 index f53cf22703..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic HS PLA.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic HS PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "YZT1Uv73b8ArVoX3", - "filament_id": "GFL99", - "instantiation": "true", - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying HS PLA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:HS PLA\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "90" - ], - "filament_unloading_speed_start": [ - "100" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json deleted file mode 100644 index c7b8e6008d..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG-CF10.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PETG-CF10", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "S2vCGI7sqN8FwodT", - "filament_id": "GFG99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying PETG-CF10" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PETG-CF10\n" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.035" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json b/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json deleted file mode 100644 index a3532b9e5b..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PETG.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "judDupafROrSnVv8", - "filament_id": "GFG99", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "slow_down_min_speed": [ - "30" - ], - "overhang_fan_speed": [ - "80" - ], - "support_material_interface_fan_speed": [ - "90" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode \n;right_extruder_material:PETG" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.046" - ], - "filament_density": [ - "1.27" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature": [ - "255" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "25%" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json deleted file mode 100644 index f001e5b391..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-CF10.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PLA-CF10", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "EZA59VPwew1cpyUJ", - "filament_id": "GFL99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying PLA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA-CF10\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "90" - ], - "filament_unloading_speed_start": [ - "100" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json deleted file mode 100644 index ca9a1398ed..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA-Silk.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PLA-Silk", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "M9wzNVOPRQlayQH1", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA Silk\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json b/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json deleted file mode 100644 index 831c14dafe..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PLA.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "nnyBm7dlrz3OsVQz", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json b/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json deleted file mode 100644 index a68d62d485..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic PVA.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic PVA", - "inherits": "Chuanying Generic PLA", - "from": "system", - "setting_id": "ePZFnkgBiyFuKvji", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "50" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying Generic PVA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PVA" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PVA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "10" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json b/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json deleted file mode 100644 index 5ff81a93e1..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying Generic TPU.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "HYciEf4160uMYGnH", - "filament_id": "GFG99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Chuanying X1 0.4 Nozzle", - "Chuanying X1 0.6 Nozzle", - "Chuanying X1 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Chuanying TPU" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:TPU\n" - ], - "filament_type": [ - "TPU" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.035" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index e4a7a6eba5..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying HS PLA @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic HS PLA", - "from": "system", - "setting_id": "CAdli5S8JIFafvRG", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying HS PLA @Chuanying X1 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: HS PLA\n" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index f162434556..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying PETG @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying PETG @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PETG", - "from": "system", - "setting_id": "9xxP8YWj4hnWQoVZ", - "filament_id": "GFG99", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying PETG @Chuanying X1 0.25 Nozzle" - ], - "fan_max_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "1.5" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index c8ba7cc5e6..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying PLA @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying PLA @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PLA", - "from": "system", - "setting_id": "3WDFe1uKTOTiRtPE", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying PLA @Chuanying X1 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2.8" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json deleted file mode 100644 index 3008059f68..0000000000 --- a/resources/profiles/Chuanying/filament/Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle", - "inherits": "Chuanying Generic PLA-Silk", - "from": "system", - "setting_id": "kph5feBjhPi0oo0G", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Chuanying X1 0.25 Nozzle" - ], - "filament_settings_id": [ - "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2.8" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA-Silk\n" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "217" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..f54d17ef0d --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic ABS @Chuanying X1 0.25 Nozzle", + "inherits": "Generic ABS @Chuanying", + "renamed_from": "Chuanying ABS @Chuanying X1 0.25 Nozzle;Chuanying ABS Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "uHqfv6eUDzoxEkEj", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic ABS @Chuanying X1 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.1" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json new file mode 100644 index 0000000000..570cd814df --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic ABS @Chuanying.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS @Chuanying", + "inherits": "fdm_filament_abs", + "renamed_from": "Chuanying Generic ABS", + "from": "system", + "setting_id": "iOgVkaYF0sixbb9x", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "8" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ABS\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_density": [ + "1.04" + ], + "temperature_vitrification": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "hot_plate_temp": [ + "105" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..690f31669a --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic ASA @Chuanying X1 0.25 Nozzle", + "inherits": "Generic ASA @Chuanying", + "renamed_from": "Chuanying ASA @Chuanying X1 0.25 Nozzle;Chuanying ASA Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "bVxY01TC9sAM9KQW", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic ASA @Chuanying X1 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ASA\n" + ], + "pressure_advance": [ + "0.1" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json new file mode 100644 index 0000000000..3196464cc2 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic ASA @Chuanying.json @@ -0,0 +1,187 @@ +{ + "type": "filament", + "name": "Generic ASA @Chuanying", + "renamed_from": "Chuanying Generic ASA", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "39OBrSE3RugtTPPR", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Chuanying ASA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode \n;right_extruder_material:ASA" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_type": [ + "ASA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.04" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json new file mode 100644 index 0000000000..25910a1f55 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic HIPS @Chuanying.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "Generic HIPS @Chuanying", + "renamed_from": "Chuanying Generic HIPS", + "inherits": "Generic ABS @Chuanying", + "from": "system", + "setting_id": "TV3UktlnP0aTLsOZ", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.01" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic HIPS @Chuanying" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "HIPS" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..339fae8619 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "name": "Generic HS PLA @Chuanying X1 0.25 Nozzle", + "inherits": "Generic HS PLA @Chuanying", + "renamed_from": "Chuanying HS PLA @Chuanying X1 0.25 Nozzle;Chuanying HS PLA Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "gdW1LIVf6BecAtpa", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic HS PLA @Chuanying X1 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: HS PLA\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json new file mode 100644 index 0000000000..c209ab1022 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic HS PLA @Chuanying.json @@ -0,0 +1,237 @@ +{ + "type": "filament", + "name": "Generic HS PLA @Chuanying", + "renamed_from": "Chuanying Generic HS PLA", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "uw7SQpFnhFiO8i1N", + "filament_id": "OFvxghTE", + "instantiation": "true", + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Chuanying HS PLA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:HS PLA\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..88eaf57c01 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PETG @Chuanying X1 0.25 Nozzle", + "inherits": "Generic PETG @Chuanying", + "renamed_from": "Chuanying PETG @Chuanying X1 0.25 Nozzle;Chuanying PETG Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "YQ0HAxEDmMQgqNGY", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic PETG @Chuanying X1 0.25 Nozzle" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "1.5" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json new file mode 100644 index 0000000000..ae84fb2982 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PETG @Chuanying.json @@ -0,0 +1,90 @@ +{ + "type": "filament", + "name": "Generic PETG @Chuanying", + "inherits": "fdm_filament_pet", + "renamed_from": "Chuanying Generic PETG", + "from": "system", + "setting_id": "Mq3uwHDMub81SuRG", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "80" + ], + "support_material_interface_fan_speed": [ + "90" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode \n;right_extruder_material:PETG" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.046" + ], + "filament_density": [ + "1.27" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "25%" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json new file mode 100644 index 0000000000..e8c812c7d5 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PETG-CF10 @Chuanying.json @@ -0,0 +1,187 @@ +{ + "type": "filament", + "name": "Generic PETG-CF10 @Chuanying", + "renamed_from": "Chuanying Generic PETG-CF10", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "Pr70SnbXDjOF9EvU", + "filament_id": "OFO5djrM", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Chuanying PETG-CF10" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PETG-CF10\n" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..cea064f9da --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "name": "Generic PLA @Chuanying X1 0.25 Nozzle", + "inherits": "Generic PLA @Chuanying", + "renamed_from": "Chuanying PLA @Chuanying X1 0.25 Nozzle;Chuanying PLA Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "XsPEVGHYiyAX4YXy", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic PLA @Chuanying X1 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json new file mode 100644 index 0000000000..3fcf7cf873 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PLA @Chuanying.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PLA @Chuanying", + "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic PLA", + "from": "system", + "setting_id": "PRk8NAihEzwi5Dqd", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json new file mode 100644 index 0000000000..46be8ddf90 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PLA-CF10 @Chuanying.json @@ -0,0 +1,237 @@ +{ + "type": "filament", + "name": "Generic PLA-CF10 @Chuanying", + "renamed_from": "Chuanying Generic PLA-CF10", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "I4FjaXNkWl8Mr4ie", + "filament_id": "OFX2zcrM", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Chuanying PLA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PLA-CF10\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json new file mode 100644 index 0000000000..66d057cbf1 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying X1 0.25 Nozzle.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "name": "Generic PLA-Silk @Chuanying X1 0.25 Nozzle", + "inherits": "Generic PLA-Silk @Chuanying", + "renamed_from": "Chuanying PLA-SILK @Chuanying X1 0.25 Nozzle;Chuanying PLA-SILK Chuanying X1 0.25 Nozzle", + "from": "system", + "setting_id": "XaGDKARkuGTTabMN", + "instantiation": "true", + "compatible_printers": [ + "Chuanying X1 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic PLA-Silk @Chuanying X1 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA-Silk\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "217" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json new file mode 100644 index 0000000000..0739646658 --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PLA-Silk @Chuanying.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PLA-Silk @Chuanying", + "inherits": "fdm_filament_pla", + "renamed_from": "Chuanying Generic PLA-Silk", + "from": "system", + "setting_id": "tSCou6bWg8eY1TFn", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA Silk\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json new file mode 100644 index 0000000000..0c6abd3c0f --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic PVA @Chuanying.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "Generic PVA @Chuanying", + "renamed_from": "Chuanying Generic PVA", + "inherits": "Generic PLA @Chuanying", + "from": "system", + "setting_id": "UTutnObeQqlZxe0B", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PVA @Chuanying" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PVA" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PVA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json new file mode 100644 index 0000000000..b9a325ce8c --- /dev/null +++ b/resources/profiles/Chuanying/filament/Generic TPU @Chuanying.json @@ -0,0 +1,187 @@ +{ + "type": "filament", + "name": "Generic TPU @Chuanying", + "renamed_from": "Chuanying Generic TPU", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "gYsq1HqkgyfmVpvz", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Chuanying X1 0.4 Nozzle", + "Chuanying X1 0.6 Nozzle", + "Chuanying X1 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Chuanying TPU" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:TPU\n" + ], + "filament_type": [ + "TPU" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.035" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Chuanying/machine/Chuanying X1.json b/resources/profiles/Chuanying/machine/Chuanying X1.json index c3debcfa76..c62df68589 100644 --- a/resources/profiles/Chuanying/machine/Chuanying X1.json +++ b/resources/profiles/Chuanying/machine/Chuanying X1.json @@ -8,5 +8,5 @@ "bed_model": "chuanying_x1_buildplate_model.STL", "bed_texture": "chuanying_x1_buildplate_texture.svg", "hotend_model": "chuanying_x1_hotend.STL", - "default_materials": "Chuanying Generic PETG;Chuanying Generic PLA" + "default_materials": "Generic PETG @Chuanying;Generic PLA @Chuanying;Generic PLA @Chuanying X1 0.25 Nozzle" } diff --git a/resources/profiles/Chuanying/machine/fdm_chuanying_common.json b/resources/profiles/Chuanying/machine/fdm_chuanying_common.json index 7e6cf041bd..406b6045d0 100644 --- a/resources/profiles/Chuanying/machine/fdm_chuanying_common.json +++ b/resources/profiles/Chuanying/machine/fdm_chuanying_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25", @@ -124,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Chuanying Generic PLA" + "Generic PLA @Chuanying" ], "default_print_profile": "0.20mm Standard @Chuanying X1", "bed_exclude_area": [ diff --git a/resources/profiles/Chuanying/machine/fdm_klipper_common.json b/resources/profiles/Chuanying/machine/fdm_klipper_common.json index fc879d8977..93631dfa17 100644 --- a/resources/profiles/Chuanying/machine/fdm_klipper_common.json +++ b/resources/profiles/Chuanying/machine/fdm_klipper_common.json @@ -116,8 +116,6 @@ "deretraction_speed": [ "80" ], - "z_lift_type": "NormalLift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25", @@ -125,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Chuanying Generic ABS" + "Generic ABS @Chuanying" ], "default_print_profile": "0.20mm Standard @Chuanying X1", "bed_exclude_area": [ diff --git a/resources/profiles/Chuanying/machine/fdm_machine_common.json b/resources/profiles/Chuanying/machine/fdm_machine_common.json index a751c264bb..3adc42a1ff 100644 --- a/resources/profiles/Chuanying/machine/fdm_machine_common.json +++ b/resources/profiles/Chuanying/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "0.20mm Standard @Chuanying X1", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/Chuanying/machine/fdm_x1_common.json b/resources/profiles/Chuanying/machine/fdm_x1_common.json index 0d2b163b3b..a32177b1d2 100644 --- a/resources/profiles/Chuanying/machine/fdm_x1_common.json +++ b/resources/profiles/Chuanying/machine/fdm_x1_common.json @@ -93,7 +93,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Chuanying Generic PLA" + "Generic PLA @Chuanying" ], "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", diff --git a/resources/profiles/Chuanying/process/fdm_process_chuanying_0.20.json b/resources/profiles/Chuanying/process/fdm_process_chuanying_0.20.json index 82e196aa1e..e4ad2518a3 100644 --- a/resources/profiles/Chuanying/process/fdm_process_chuanying_0.20.json +++ b/resources/profiles/Chuanying/process/fdm_process_chuanying_0.20.json @@ -11,7 +11,6 @@ "gap_infill_speed": "200", "sparse_infill_speed": "270", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "internal_solid_infill_acceleration": "7000", "accel_to_decel_enable": "0", diff --git a/resources/profiles/Chuanying/process/fdm_process_chuanying_0.30.json b/resources/profiles/Chuanying/process/fdm_process_chuanying_0.30.json index 1a722cc07c..e2c36526ce 100644 --- a/resources/profiles/Chuanying/process/fdm_process_chuanying_0.30.json +++ b/resources/profiles/Chuanying/process/fdm_process_chuanying_0.30.json @@ -19,7 +19,6 @@ "top_surface_speed": "120", "gap_infill_speed": "150", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "internal_solid_infill_acceleration": "7000", "accel_to_decel_enable": "0", diff --git a/resources/profiles/Chuanying/process/fdm_process_chuanying_common.json b/resources/profiles/Chuanying/process/fdm_process_chuanying_common.json index 6254ffd087..ccad22dca3 100644 --- a/resources/profiles/Chuanying/process/fdm_process_chuanying_common.json +++ b/resources/profiles/Chuanying/process/fdm_process_chuanying_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "travel_acceleration": "10000", "inner_wall_acceleration": "5000", diff --git a/resources/profiles/Chuanying/process/fdm_process_common.json b/resources/profiles/Chuanying/process/fdm_process_common.json index 362b69213e..fc96799afe 100644 --- a/resources/profiles/Chuanying/process/fdm_process_common.json +++ b/resources/profiles/Chuanying/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Co Print.json b/resources/profiles/Co Print.json index 8e7d9ec990..2e1ad809eb 100644 --- a/resources/profiles/Co Print.json +++ b/resources/profiles/Co Print.json @@ -1,6 +1,6 @@ { "name": "Co Print", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "CoPrint configurations", "machine_model_list": [ @@ -37,20 +37,20 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "CoPrint Generic PLA", - "sub_path": "filament/CoPrint Generic PLA.json" + "name": "Generic PLA @CoPrint", + "sub_path": "filament/Generic PLA @CoPrint.json" }, { - "name": "CoPrint Generic ABS", - "sub_path": "filament/CoPrint Generic ABS.json" + "name": "Generic ABS @CoPrint", + "sub_path": "filament/Generic ABS @CoPrint.json" }, { - "name": "CoPrint Generic PETG", - "sub_path": "filament/CoPrint Generic PETG.json" + "name": "Generic PETG @CoPrint", + "sub_path": "filament/Generic PETG @CoPrint.json" }, { - "name": "CoPrint Generic TPU", - "sub_path": "filament/CoPrint Generic TPU.json" + "name": "Generic TPU @CoPrint", + "sub_path": "filament/Generic TPU @CoPrint.json" } ], "machine_list": [ diff --git a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json b/resources/profiles/Co Print/filament/CoPrint Generic ABS.json deleted file mode 100644 index 930950d68e..0000000000 --- a/resources/profiles/Co Print/filament/CoPrint Generic ABS.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "filament", - "name": "CoPrint Generic ABS", - "inherits": "CoPrint Generic PLA", - "from": "system", - "setting_id": "xW2rHuxT9o7MG8qB", - "filament_id": "GFL99", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.04" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_type": [ - "ABS" - ], - "full_fan_speed_layer": [ - "5" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.02" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", - "Co Print ChromaSet 0.4 nozzle fast" - ] -} diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json b/resources/profiles/Co Print/filament/CoPrint Generic PETG.json deleted file mode 100644 index f4540a98b2..0000000000 --- a/resources/profiles/Co Print/filament/CoPrint Generic PETG.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "filament", - "name": "CoPrint Generic PETG", - "inherits": "CoPrint Generic PLA", - "from": "system", - "setting_id": "k4m484S1samBGEVb", - "filament_id": "GFL99", - "instantiation": "true", - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_deretraction_speed": [ - "50" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_speed": [ - "50" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", - "Co Print ChromaSet 0.4 nozzle fast" - ] -} diff --git a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json b/resources/profiles/Co Print/filament/CoPrint Generic PLA.json deleted file mode 100644 index c6db574a42..0000000000 --- a/resources/profiles/Co Print/filament/CoPrint Generic PLA.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "CoPrint Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Hv40GsmNozxOJ38T", - "filament_id": "GFL99", - "instantiation": "true", - "filament_load_time": [ - "9.75" - ], - "filament_unload_time": [ - "9.75" - ], - "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", - "Co Print ChromaSet 0.4 nozzle fast" - ] -} diff --git a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json b/resources/profiles/Co Print/filament/CoPrint Generic TPU.json deleted file mode 100644 index b4e28ee73b..0000000000 --- a/resources/profiles/Co Print/filament/CoPrint Generic TPU.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "CoPrint Generic TPU", - "inherits": "CoPrint Generic PLA", - "from": "system", - "setting_id": "2mWqeih012I5D2CK", - "filament_id": "GFL99", - "instantiation": "true", - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_deretraction_speed": [ - "20" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "1.8" - ], - "filament_retraction_speed": [ - "20" - ], - "filament_type": [ - "TPU" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Co Print ChromaSet 0.4 nozzle", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", - "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", - "Co Print ChromaSet 0.4 nozzle fast" - ] -} diff --git a/resources/profiles/Co Print/filament/Generic ABS @CoPrint.json b/resources/profiles/Co Print/filament/Generic ABS @CoPrint.json new file mode 100644 index 0000000000..f047afc265 --- /dev/null +++ b/resources/profiles/Co Print/filament/Generic ABS @CoPrint.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic ABS @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic ABS", + "from": "system", + "setting_id": "T6mJwfI7n1YDmDzv", + "filament_id": "OFY9muEs", + "instantiation": "true", + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.04" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_type": [ + "ABS" + ], + "full_fan_speed_layer": [ + "5" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.02" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "compatible_printers": [ + "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "Co Print ChromaSet 0.4 nozzle fast" + ] +} diff --git a/resources/profiles/Co Print/filament/Generic PETG @CoPrint.json b/resources/profiles/Co Print/filament/Generic PETG @CoPrint.json new file mode 100644 index 0000000000..dd2d03af04 --- /dev/null +++ b/resources/profiles/Co Print/filament/Generic PETG @CoPrint.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "name": "Generic PETG @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic PETG", + "from": "system", + "setting_id": "99zIrGIXC9RUGDlM", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_deretraction_speed": [ + "50" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_speed": [ + "50" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "compatible_printers": [ + "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "Co Print ChromaSet 0.4 nozzle fast" + ] +} diff --git a/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json new file mode 100644 index 0000000000..5a6c5287c0 --- /dev/null +++ b/resources/profiles/Co Print/filament/Generic PLA @CoPrint.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic PLA", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "9tNsM3FhIDgKJ05R", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "Co Print ChromaSet 0.4 nozzle fast" + ] +} diff --git a/resources/profiles/Co Print/filament/Generic TPU @CoPrint.json b/resources/profiles/Co Print/filament/Generic TPU @CoPrint.json new file mode 100644 index 0000000000..c25896fe55 --- /dev/null +++ b/resources/profiles/Co Print/filament/Generic TPU @CoPrint.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic TPU @CoPrint", + "inherits": "Generic PLA @CoPrint", + "renamed_from": "CoPrint Generic TPU", + "from": "system", + "setting_id": "0V6UoaCfNUIwYwah", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "1.8" + ], + "filament_retraction_speed": [ + "20" + ], + "filament_type": [ + "TPU" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Co Print ChromaSet 0.4 nozzle", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3", + "Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus", + "Co Print ChromaSet 0.4 nozzle fast" + ] +} diff --git a/resources/profiles/Co Print/filament/fdm_filament_pla.json b/resources/profiles/Co Print/filament/fdm_filament_pla.json index 203e643a85..d83834504f 100644 --- a/resources/profiles/Co Print/filament/fdm_filament_pla.json +++ b/resources/profiles/Co Print/filament/fdm_filament_pla.json @@ -173,12 +173,6 @@ "filament_unloading_speed": [ "90" ], - "filament_load_time": [ - "9.75" - ], - "filament_unload_time": [ - "9.75" - ], "filament_toolchange_delay": [ "0" ], diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json index 355ba1eca8..f032c9bf6e 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3 Plus.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json index 52fa36bc5d..a36e231d94 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle - Ender-3 V3.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json index 57f2e507c4..2d206c1734 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle fast.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json index efa52a34f4..72116fcd70 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet 0.4 nozzle.json @@ -108,7 +108,7 @@ "machine_end_gcode": "end_print", "change_filament_gcode": "FILAMENT_CHANGE LAYER_NUM=[layer_num] NEXT_EXTRUDER=[next_extruder]", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/Co Print ChromaSet.json b/resources/profiles/Co Print/machine/Co Print ChromaSet.json index 883ee91c93..5ce0287757 100644 --- a/resources/profiles/Co Print/machine/Co Print ChromaSet.json +++ b/resources/profiles/Co Print/machine/Co Print ChromaSet.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "Co_Print_ChromaSet_buildplate_texture.svg", "hotend_model": "", - "default_materials": "CoPrint Generic PLA" + "default_materials": "Generic PLA @CoPrint" } diff --git a/resources/profiles/Co Print/machine/fdm_coprint_common.json b/resources/profiles/Co Print/machine/fdm_coprint_common.json index f7911c2a94..ecb6bd1ac2 100644 --- a/resources/profiles/Co Print/machine/fdm_coprint_common.json +++ b/resources/profiles/Co Print/machine/fdm_coprint_common.json @@ -100,7 +100,7 @@ "machine_start_gcode": "start_print EXTRUDER=[initial_extruder] EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "end_print", "default_filament_profile": [ - "CoPrint Generic PLA" + "Generic PLA @CoPrint" ], "extruder_clearance_radius": [ "65" diff --git a/resources/profiles/Co Print/machine/fdm_machine_common.json b/resources/profiles/Co Print/machine/fdm_machine_common.json index 4b04bfff04..2d0acb2170 100644 --- a/resources/profiles/Co Print/machine/fdm_machine_common.json +++ b/resources/profiles/Co Print/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Co Print/process/fdm_process_common.json b/resources/profiles/Co Print/process/fdm_process_common.json index 5d6760a85b..72aa53a2a2 100644 --- a/resources/profiles/Co Print/process/fdm_process_common.json +++ b/resources/profiles/Co Print/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "bridge_flow": "0.9031", "bridge_speed": "25", diff --git a/resources/profiles/Co Print/process/fdm_process_coprint_common.json b/resources/profiles/Co Print/process/fdm_process_coprint_common.json index c6d5478a6d..6c1b1a99ee 100644 --- a/resources/profiles/Co Print/process/fdm_process_coprint_common.json +++ b/resources/profiles/Co Print/process/fdm_process_coprint_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "bridge_flow": "0.9031", "bridge_speed": "25", diff --git a/resources/profiles/CoLiDo.json b/resources/profiles/CoLiDo.json index 972ffd396b..f27623c7bc 100644 --- a/resources/profiles/CoLiDo.json +++ b/resources/profiles/CoLiDo.json @@ -1,6 +1,6 @@ { "name": "CoLiDo", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "CoLiDo configurations", "machine_model_list": [ @@ -189,32 +189,24 @@ "sub_path": "filament/CoLiDo ABS @CoLiDo SR1.json" }, { - "name": "CoLiDo Generic ABS @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json" + "name": "Generic ABS @CoLiDo DIY 4.0", + "sub_path": "filament/Generic ABS @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic ABS @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic ABS @CoLiDo X16.json" - }, - { - "name": "CoLiDo Generic PETG @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json" - }, - { - "name": "CoLiDo Generic PETG @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic PETG @CoLiDo X16.json" + "name": "Generic ABS @CoLiDo X16", + "sub_path": "filament/Generic ABS @CoLiDo X16.json" }, { "name": "CoLiDo PETG @CoLiDo SR1", "sub_path": "filament/CoLiDo PETG @CoLiDo SR1.json" }, { - "name": "CoLiDo Generic PLA @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json" + "name": "Generic PETG @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PETG @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic PLA @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic PLA @CoLiDo X16.json" + "name": "Generic PETG @CoLiDo X16", + "sub_path": "filament/Generic PETG @CoLiDo X16.json" }, { "name": "CoLiDo PLA @CoLiDo SR1", @@ -229,12 +221,20 @@ "sub_path": "filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json" }, { - "name": "CoLiDo Generic TPU @CoLiDo DIY 4.0", - "sub_path": "filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json" + "name": "Generic PLA @CoLiDo DIY 4.0", + "sub_path": "filament/Generic PLA @CoLiDo DIY 4.0.json" }, { - "name": "CoLiDo Generic TPU @CoLiDo X16", - "sub_path": "filament/CoLiDo Generic TPU @CoLiDo X16.json" + "name": "Generic PLA @CoLiDo X16", + "sub_path": "filament/Generic PLA @CoLiDo X16.json" + }, + { + "name": "Generic TPU @CoLiDo DIY 4.0", + "sub_path": "filament/Generic TPU @CoLiDo DIY 4.0.json" + }, + { + "name": "Generic TPU @CoLiDo X16", + "sub_path": "filament/Generic TPU @CoLiDo X16.json" } ], "machine_list": [ diff --git a/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json index 55259a5459..25b69d8c2d 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo ABS @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ZztaHKdQ4dmOgAXr", - "filament_id": "GFB99", + "filament_id": "OFneOFWe", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json deleted file mode 100644 index 94c529c9fe..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo DIY 4.0.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic ABS @CoLiDo DIY 4.0", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "acWqrAFyi2SIkNwa", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "80" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "CoLiDo DIY 4.0 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json deleted file mode 100644 index 5dc279ffe6..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic ABS @CoLiDo X16.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic ABS @CoLiDo X16", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "l44ioMidpUECbGYF", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "20" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "95" - ], - "hot_plate_temp_initial_layer": [ - "95" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "CoLiDo X16 0.4 nozzle", - "CoLiDo 160 V2 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json deleted file mode 100644 index 1c0751457e..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo DIY 4.0.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic PETG @CoLiDo DIY 4.0", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "IBtIS8bwcIWhiCow", - "filament_id": "GFG99", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_vendor": [ - "CoLiDo" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "compatible_printers": [ - "CoLiDo DIY 4.0 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json deleted file mode 100644 index e09df95679..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PETG @CoLiDo X16.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic PETG @CoLiDo X16", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "AovAvrEzGiZqFRpc", - "filament_id": "GFG99", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_vendor": [ - "CoLiDo" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "compatible_printers": [ - "CoLiDo X16 0.4 nozzle", - "CoLiDo 160 V2 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json deleted file mode 100644 index 1848216904..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo DIY 4.0.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic PLA @CoLiDo DIY 4.0", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "foEeUk6PK78QXleQ", - "filament_id": "GFA99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "60" - ], - "filament_flow_ratio": [ - "1.05" - ], - "filament_max_volumetric_speed": [ - "19.5" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "pressure_advance": [ - "0.03686" - ], - "slow_down_layer_time": [ - "4" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ], - "compatible_printers": [ - "CoLiDo DIY 4.0 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json deleted file mode 100644 index 8d9877cfa3..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic PLA @CoLiDo X16.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic PLA @CoLiDo X16", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "HY8RFWOKRptC2YVt", - "filament_id": "GFA99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "nozzle_temperature": [ - "200" - ], - "slow_down_layer_time": [ - "6" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "compatible_printers": [ - "CoLiDo X16 0.4 nozzle", - "CoLiDo 160 V2 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json deleted file mode 100644 index 96912962de..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo DIY 4.0.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic TPU @CoLiDo DIY 4.0", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "ZgbaHhRSK8AW38MB", - "filament_id": "GFU99", - "instantiation": "true", - "filament_density": [ - "1.22" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "compatible_printers": [ - "CoLiDo DIY 4.0 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json deleted file mode 100644 index 3bbea681d1..0000000000 --- a/resources/profiles/CoLiDo/filament/CoLiDo Generic TPU @CoLiDo X16.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "CoLiDo Generic TPU @CoLiDo X16", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "f6yTiUiYYLckJBTQ", - "filament_id": "GFU99", - "instantiation": "true", - "filament_density": [ - "1.22" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_vendor": [ - "CoLiDo" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature_initial_layer": [ - "180" - ], - "nozzle_temperature": [ - "180" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "compatible_printers": [ - "CoLiDo X16 0.4 nozzle", - "CoLiDo 160 V2 0.4 nozzle" - ] -} diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json index 5b93fc1460..0fd7c49f94 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PETG @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "z1ffOb3jPP1GVXnD", - "filament_id": "GFG99", + "filament_id": "OF7lwj52", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json index 40e871c663..374321236c 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Gj0o6Rmn4qWXDLov", - "filament_id": "GFA99", + "filament_id": "OFm70lLt", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json index b9a15b3e1b..6d3067d72a 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA Silk @CoLiDo SR1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "mLgBNw0OzvJSS8IG", - "filament_id": "GFA99", + "filament_id": "OFnSeLHk", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json b/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json index de34110826..c02f7be129 100644 --- a/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json +++ b/resources/profiles/CoLiDo/filament/CoLiDo PLA+ @CoLiDo DIY 4.0 V2.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "IDGh5vNSqKSOVn3z", - "filament_id": "GFA99", + "filament_id": "OFctg8r1", "instantiation": "true", "filament_vendor": [ "CoLiDo" diff --git a/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json new file mode 100644 index 0000000000..acb6033883 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo DIY 4.0.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic ABS @CoLiDo DIY 4.0", + "inherits": "fdm_filament_abs", + "renamed_from": "CoLiDo Generic ABS @CoLiDo DIY 4.0;CoLiDo Generic ABS CoLiDo DIY 4.0", + "from": "system", + "setting_id": "XLTLGUPGcCZnX5XA", + "filament_id": "OFY9muEs", + "instantiation": "true", + "fan_max_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "CoLiDo DIY 4.0 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json new file mode 100644 index 0000000000..aa567b7ba8 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic ABS @CoLiDo X16.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic ABS @CoLiDo X16", + "inherits": "fdm_filament_abs", + "renamed_from": "CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic ABS CoLiDo X16", + "from": "system", + "setting_id": "LE7jeYUNsBZEKQpJ", + "filament_id": "OFY9muEs", + "instantiation": "true", + "fan_max_speed": [ + "20" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "95" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "CoLiDo X16 0.4 nozzle", + "CoLiDo 160 V2 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json new file mode 100644 index 0000000000..d70dd4d511 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo DIY 4.0.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "Generic PETG @CoLiDo DIY 4.0", + "inherits": "fdm_filament_pet", + "renamed_from": "CoLiDo Generic PETG @CoLiDo DIY 4.0;CoLiDo Generic PETG CoLiDo DIY 4.0", + "from": "system", + "setting_id": "FV2MjDSWlg3kolp3", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_vendor": [ + "Generic" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "compatible_printers": [ + "CoLiDo DIY 4.0 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json new file mode 100644 index 0000000000..5f68b5600b --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic PETG @CoLiDo X16.json @@ -0,0 +1,86 @@ +{ + "type": "filament", + "name": "Generic PETG @CoLiDo X16", + "inherits": "fdm_filament_pet", + "renamed_from": "CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic PETG CoLiDo X16", + "from": "system", + "setting_id": "eX4i0rDwO3rAlQ2y", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_vendor": [ + "Generic" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "compatible_printers": [ + "CoLiDo X16 0.4 nozzle", + "CoLiDo 160 V2 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json new file mode 100644 index 0000000000..9bd8db3357 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo DIY 4.0.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic PLA @CoLiDo DIY 4.0", + "inherits": "fdm_filament_pla", + "renamed_from": "CoLiDo Generic PLA @CoLiDo DIY 4.0;CoLiDo Generic PLA CoLiDo DIY 4.0", + "from": "system", + "setting_id": "POF6nKughZF8OsBF", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "60" + ], + "filament_flow_ratio": [ + "1.05" + ], + "filament_max_volumetric_speed": [ + "19.5" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "pressure_advance": [ + "0.03686" + ], + "slow_down_layer_time": [ + "4" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "compatible_printers": [ + "CoLiDo DIY 4.0 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json new file mode 100644 index 0000000000..f437702111 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic PLA @CoLiDo X16.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Generic PLA @CoLiDo X16", + "inherits": "fdm_filament_pla", + "renamed_from": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic PLA CoLiDo X16", + "from": "system", + "setting_id": "38SFNLJEVBeAVL3B", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "nozzle_temperature": [ + "200" + ], + "slow_down_layer_time": [ + "6" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "compatible_printers": [ + "CoLiDo X16 0.4 nozzle", + "CoLiDo 160 V2 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json new file mode 100644 index 0000000000..0422f6b4c6 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo DIY 4.0.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic TPU @CoLiDo DIY 4.0", + "inherits": "fdm_filament_tpu", + "renamed_from": "CoLiDo Generic TPU @CoLiDo DIY 4.0;CoLiDo Generic TPU CoLiDo DIY 4.0", + "from": "system", + "setting_id": "5tJNn6c6RXqJUT2z", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_density": [ + "1.22" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ], + "compatible_printers": [ + "CoLiDo DIY 4.0 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json new file mode 100644 index 0000000000..ccf0d405b1 --- /dev/null +++ b/resources/profiles/CoLiDo/filament/Generic TPU @CoLiDo X16.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic TPU @CoLiDo X16", + "inherits": "fdm_filament_tpu", + "renamed_from": "CoLiDo Generic TPU @CoLiDo X16;CoLiDo Generic TPU CoLiDo X16", + "from": "system", + "setting_id": "wylEuYSIKlzSVnoQ", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_density": [ + "1.22" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature_initial_layer": [ + "180" + ], + "nozzle_temperature": [ + "180" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ], + "compatible_printers": [ + "CoLiDo X16 0.4 nozzle", + "CoLiDo 160 V2 0.4 nozzle" + ] +} diff --git a/resources/profiles/CoLiDo/filament/fdm_filament_pla.json b/resources/profiles/CoLiDo/filament/fdm_filament_pla.json index 5939811113..92db5ad83c 100644 --- a/resources/profiles/CoLiDo/filament/fdm_filament_pla.json +++ b/resources/profiles/CoLiDo/filament/fdm_filament_pla.json @@ -85,9 +85,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -163,9 +160,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json index 65f2db78eb..b02f431b3e 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo X16" + "Generic PLA @CoLiDo X16" ], "default_print_profile": "0.20mm Standard @CoLiDo X16", "deretraction_speed": [ @@ -189,7 +189,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json index 4c18236e07..6f6985d46e 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo 160 V2.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic TPU @CoLiDo X16" + "default_materials": "Generic PLA @CoLiDo X16;Generic ABS @CoLiDo X16;Generic PETG @CoLiDo X16;Generic TPU @CoLiDo X16" } diff --git a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json index d0e1a2abc6..3c35344e79 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo DIY 4.0" + "Generic PLA @CoLiDo DIY 4.0" ], "default_print_profile": "0.20mm Standard @CoLiDo DIY 4.0", "deretraction_speed": [ @@ -203,7 +203,6 @@ "20" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json index f774672974..693937a8cb 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo DIY 4.0.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo DIY 4.0;CoLiDo Generic ABS @CoLiDo DIY 4.0;CoLiDo Generic PETG @CoLiDo DIY 4.0;CoLiDo Generic TPU @CoLiDo DIY 4.0" + "default_materials": "Generic PLA @CoLiDo DIY 4.0;Generic ABS @CoLiDo DIY 4.0;Generic PETG @CoLiDo DIY 4.0;Generic TPU @CoLiDo DIY 4.0" } diff --git a/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json index cfdfd38571..4110cbe15d 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo X16 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "CoLiDo Generic PLA @CoLiDo X16" + "Generic PLA @CoLiDo X16" ], "default_print_profile": "0.20mm Standard @CoLiDo X16", "deretraction_speed": [ @@ -189,7 +189,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/CoLiDo/machine/CoLiDo X16.json b/resources/profiles/CoLiDo/machine/CoLiDo X16.json index e95b6ea56b..e1633e083f 100644 --- a/resources/profiles/CoLiDo/machine/CoLiDo X16.json +++ b/resources/profiles/CoLiDo/machine/CoLiDo X16.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "CoLiDo Generic PLA @CoLiDo X16;CoLiDo Generic ABS @CoLiDo X16;CoLiDo Generic PETG @CoLiDo X16;CoLiDo Generic TPU @CoLiDo X16" + "default_materials": "Generic PLA @CoLiDo X16;Generic ABS @CoLiDo X16;Generic PETG @CoLiDo X16;Generic TPU @CoLiDo X16" } diff --git a/resources/profiles/CoLiDo/machine/fdm_klipper_common.json b/resources/profiles/CoLiDo/machine/fdm_klipper_common.json index 25eeb1c066..76dbed1936 100644 --- a/resources/profiles/CoLiDo/machine/fdm_klipper_common.json +++ b/resources/profiles/CoLiDo/machine/fdm_klipper_common.json @@ -117,14 +117,13 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" ], "default_filament_profile": [ - "My Generic ABS" + "Generic ABS @CoLiDo X16" ], "default_print_profile": "0.20mm Standard @MyKlipper", "bed_exclude_area": [ diff --git a/resources/profiles/CoLiDo/machine/fdm_machine_common.json b/resources/profiles/CoLiDo/machine/fdm_machine_common.json index d4a5c3be25..fbe40f97e3 100644 --- a/resources/profiles/CoLiDo/machine/fdm_machine_common.json +++ b/resources/profiles/CoLiDo/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/CoLiDo/process/fdm_process_colido_common.json b/resources/profiles/CoLiDo/process/fdm_process_colido_common.json index 86621b85e2..ac0b89ecf6 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colido_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colido_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "30", diff --git a/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json index b1a9fbe2b2..ade45d3c30 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40_common.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/CoLiDo/process/fdm_process_colidodiy40v2_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40v2_common.json index 63cb950583..89f7687d09 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidodiy40v2_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidodiy40v2_common.json @@ -38,7 +38,6 @@ "gap_infill_speed": "100", "sparse_infill_speed": "200", "exclude_object": "1", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -103,7 +102,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/CoLiDo/process/fdm_process_colidosr1_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidosr1_common.json index ab06f6a756..7b12f463d5 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidosr1_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidosr1_common.json @@ -37,7 +37,6 @@ "gap_infill_speed": "100", "sparse_infill_speed": "200", "exclude_object": "1", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -102,7 +101,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json b/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json index ac5b507cce..66c147c002 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_colidox16_common.json @@ -133,7 +133,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/CoLiDo/process/fdm_process_common.json b/resources/profiles/CoLiDo/process/fdm_process_common.json index 916ca91f84..21b6c070fa 100644 --- a/resources/profiles/CoLiDo/process/fdm_process_common.json +++ b/resources/profiles/CoLiDo/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", @@ -69,7 +68,5 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [], - "smooth_coefficient": "80", - "overhang_totally_speed": "19", "scarf_angle_threshold": "155" } diff --git a/resources/profiles/Comgrow.json b/resources/profiles/Comgrow.json index da7d0e29f6..e3eb237518 100644 --- a/resources/profiles/Comgrow.json +++ b/resources/profiles/Comgrow.json @@ -1,6 +1,6 @@ { "name": "Comgrow", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "Comgrow configurations", "machine_model_list": [ @@ -105,20 +105,20 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Comgrow Generic ABS", - "sub_path": "filament/Comgrow Generic ABS.json" + "name": "Generic ABS @Comgrow", + "sub_path": "filament/Generic ABS @Comgrow.json" }, { - "name": "Comgrow Generic PETG", - "sub_path": "filament/Comgrow Generic PETG.json" + "name": "Generic PETG @Comgrow", + "sub_path": "filament/Generic PETG @Comgrow.json" }, { - "name": "Comgrow Generic PLA", - "sub_path": "filament/Comgrow Generic PLA.json" + "name": "Generic PLA @Comgrow", + "sub_path": "filament/Generic PLA @Comgrow.json" }, { - "name": "Comgrow T300 PLA", - "sub_path": "filament/Comgrow T300 PLA.json" + "name": "Generic PLA @Comgrow T300", + "sub_path": "filament/Generic PLA @Comgrow T300.json" } ], "machine_list": [ diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json b/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json deleted file mode 100644 index 0dbfbdf5af..0000000000 --- a/resources/profiles/Comgrow/filament/Comgrow Generic ABS.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Comgrow Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "7xmGiJHgiD5KKTXt", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_retraction_length": [ - "0.5" - ], - "compatible_printers": [ - "Comgrow T500 0.4 nozzle", - "Comgrow T500 0.6 nozzle", - "Comgrow T500 0.8 nozzle" - ] -} diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json b/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json deleted file mode 100644 index 18f1ea232a..0000000000 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PETG.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Comgrow Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "FJjkU2RhAZD10Cw8", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "25" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Comgrow T500 0.4 nozzle", - "Comgrow T500 0.6 nozzle", - "Comgrow T500 0.8 nozzle" - ] -} diff --git a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json b/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json deleted file mode 100644 index d3aed1e46d..0000000000 --- a/resources/profiles/Comgrow/filament/Comgrow Generic PLA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Comgrow Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "sGAn6RP69saYSqcY", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_retraction_length": [ - "0.5" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Comgrow T500 0.4 nozzle", - "Comgrow T500 0.6 nozzle", - "Comgrow T500 0.8 nozzle" - ] -} diff --git a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json b/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json deleted file mode 100644 index e0785fd57f..0000000000 --- a/resources/profiles/Comgrow/filament/Comgrow T300 PLA.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Comgrow T300 PLA", - "inherits": "Comgrow Generic PLA", - "from": "system", - "setting_id": "TnHaf2TSHVfuwbVg", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "filament_retraction_length": [ - "0.5" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Comgrow T300 0.4 nozzle" - ], - "fan_min_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "50" - ], - "fan_max_speed": [ - "100" - ], - "slow_down_layer_time": [ - "6" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "hot_plate_temp": [ - "65" - ] -} diff --git a/resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json b/resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json new file mode 100644 index 0000000000..0494418d88 --- /dev/null +++ b/resources/profiles/Comgrow/filament/Generic ABS @Comgrow.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic ABS @Comgrow", + "inherits": "fdm_filament_abs", + "renamed_from": "Comgrow Generic ABS", + "from": "system", + "setting_id": "jprGDn9oZEZu4N97", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "filament_retraction_length": [ + "0.5" + ], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json b/resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json new file mode 100644 index 0000000000..12b29d0b1d --- /dev/null +++ b/resources/profiles/Comgrow/filament/Generic PETG @Comgrow.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic PETG @Comgrow", + "inherits": "fdm_filament_pet", + "renamed_from": "Comgrow Generic PETG", + "from": "system", + "setting_id": "xi0S7KdXD7lwr3H8", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json new file mode 100644 index 0000000000..bde24b8ba0 --- /dev/null +++ b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow T300.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PLA @Comgrow T300", + "inherits": "Generic PLA @Comgrow", + "renamed_from": "Comgrow T300 PLA", + "from": "system", + "setting_id": "3N6gPGkzpE9CvkVz", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_retraction_length": [ + "0.5" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Comgrow T300 0.4 nozzle" + ], + "fan_min_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "6" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "200" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ] +} diff --git a/resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json new file mode 100644 index 0000000000..21b8e19d42 --- /dev/null +++ b/resources/profiles/Comgrow/filament/Generic PLA @Comgrow.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Comgrow", + "inherits": "fdm_filament_pla", + "renamed_from": "Comgrow Generic PLA", + "from": "system", + "setting_id": "oxIMSlkJ8C40mJIv", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "filament_retraction_length": [ + "0.5" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Comgrow T500 0.4 nozzle", + "Comgrow T500 0.6 nozzle", + "Comgrow T500 0.8 nozzle" + ] +} diff --git a/resources/profiles/Comgrow/machine/Comgrow T300.json b/resources/profiles/Comgrow/machine/Comgrow T300.json index 41c94aa193..558c4338b6 100644 --- a/resources/profiles/Comgrow/machine/Comgrow T300.json +++ b/resources/profiles/Comgrow/machine/Comgrow T300.json @@ -8,5 +8,5 @@ "bed_model": "comgrow_t300_buildplate_model.stl", "bed_texture": "comgrow_t300_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Comgrow T300 PLA" + "default_materials": "Generic PLA @Comgrow T300" } diff --git a/resources/profiles/Comgrow/machine/Comgrow T500.json b/resources/profiles/Comgrow/machine/Comgrow T500.json index e7945de67a..6714a5a4b0 100644 --- a/resources/profiles/Comgrow/machine/Comgrow T500.json +++ b/resources/profiles/Comgrow/machine/Comgrow T500.json @@ -8,5 +8,5 @@ "bed_model": "comgrow_t500_buildplate_model.stl", "bed_texture": "comgrow_t500_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Comgrow Generic PLA;Comgrow Generic PETG;Comgrow Generic ABS" + "default_materials": "Generic PLA @Comgrow;Generic PETG @Comgrow;Generic ABS @Comgrow" } diff --git a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json index b256b09306..f01aca4c88 100644 --- a/resources/profiles/Comgrow/machine/fdm_comgrow_common.json +++ b/resources/profiles/Comgrow/machine/fdm_comgrow_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", @@ -131,7 +130,7 @@ "thumbnails_format": "PNG", "nozzle_type": "hardened_steel", "default_filament_profile": [ - "Comgrow Generic PETG" + "Generic PETG @Comgrow" ], "default_print_profile": "0.20mm Standard @Comgrow T500", "bed_exclude_area": [ diff --git a/resources/profiles/Comgrow/machine/fdm_machine_common.json b/resources/profiles/Comgrow/machine/fdm_machine_common.json index 7bddc2a449..6c15932ff6 100644 --- a/resources/profiles/Comgrow/machine/fdm_machine_common.json +++ b/resources/profiles/Comgrow/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json index f9fe24a86e..5d63eecaeb 100644 --- a/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.16mm Opitmal @Comgrow T500 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "VXNVLkCAnWrWUyuq", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json index 75b32fd2bc..6c716b7448 100644 --- a/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.16mm Optimal @Comgrow T500 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fHx55sqqkzl0l6vD", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json b/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json index 9ea2e4419a..82c4edfd04 100644 --- a/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json +++ b/resources/profiles/Comgrow/process/0.18mm Optimal @Comgrow T500.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "s2ySRT9zoN0MzFMG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.20mm Optimal @Comgrow T300 0.4 - official.json b/resources/profiles/Comgrow/process/0.20mm Optimal @Comgrow T300 0.4 - official.json index a19f2568d7..85e1eb5eb8 100644 --- a/resources/profiles/Comgrow/process/0.20mm Optimal @Comgrow T300 0.4 - official.json +++ b/resources/profiles/Comgrow/process/0.20mm Optimal @Comgrow T300 0.4 - official.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "VFKy39bkuifq4aEz", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json index 4d428aca40..ad93a3003b 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "zwEXxLeBYeJlVsrU", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json index a50b6ac485..9683ba86ef 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "MwfGKEFTGptYVgVg", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json index 1ef23da2af..3db25ca6c5 100644 --- a/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json +++ b/resources/profiles/Comgrow/process/0.20mm Standard @Comgrow T500.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "D15fxV5mACh2XWMT", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json index d79d7afe4c..8fcbf04693 100644 --- a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "INYjczFN5gWflgRJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json index 326c4c7d26..bb7fc4f905 100644 --- a/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.24mm Draft @Comgrow T500 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "CDKsOIpM74w1NhsA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json index 7118e614d2..3b51d2b5aa 100644 --- a/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.24mm Optimal @Comgrow T500 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "gHH8QHbtpAr7iSj3", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json index 82140f2a11..012d382d6d 100644 --- a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QU9R8iFuvSrnijkO", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json index 2088fd5d01..1b345c51d8 100644 --- a/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json +++ b/resources/profiles/Comgrow/process/0.28mm SuperDraft @Comgrow T500 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "oQkDbf0FdMb4nV0i", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json index 1f9ad6050d..f24b345690 100644 --- a/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.32mm Standard @Comgrow T500 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1IxP6FaNbkCM6bz8", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.32", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json index 515bcfdde8..32958ee493 100644 --- a/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.40mm Draft @Comgrow T500 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "67PM6ka97wMVLSJV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.40", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json index bdae66b5e8..21009bb931 100644 --- a/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.48mm Draft @Comgrow T500 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7fJumwUT4xqMSvYo", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.48", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json index fae10074b2..6a4d439820 100644 --- a/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json +++ b/resources/profiles/Comgrow/process/0.56mm SuperDraft @Comgrow T500 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "407WH0SRTXRCg7Gz", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.56", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json index b926f2ee86..04b9a6bd06 100644 --- a/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_comgrow_common.json @@ -107,7 +107,6 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Comgrow/process/fdm_process_common.json b/resources/profiles/Comgrow/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Comgrow/process/fdm_process_common.json +++ b/resources/profiles/Comgrow/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 077ee827e5..a870a8d7d6 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.76", + "version": "02.03.02.80", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ @@ -116,10 +116,6 @@ "name": "Creality K1", "sub_path": "machine/Creality K1.json" }, - { - "name": "Creality K1_CFS-C", - "sub_path": "machine/Creality K1_CFS-C.json" - }, { "name": "Creality K1 Max", "sub_path": "machine/Creality K1 Max.json" @@ -145,12 +141,12 @@ "sub_path": "machine/Creality K1C_CFS-C.json" }, { - "name": "Creality K2", - "sub_path": "machine/Creality K2.json" + "name": "Creality K1_CFS-C", + "sub_path": "machine/Creality K1_CFS-C.json" }, { - "name": "Creality K2 SE", - "sub_path": "machine/Creality K2 SE.json" + "name": "Creality K2", + "sub_path": "machine/Creality K2.json" }, { "name": "Creality K2 Plus", @@ -160,6 +156,10 @@ "name": "Creality K2 Pro", "sub_path": "machine/Creality K2 Pro.json" }, + { + "name": "Creality K2 SE", + "sub_path": "machine/Creality K2 SE.json" + }, { "name": "Creality SPARKX i7", "sub_path": "machine/Creality SPARKX i7.json" @@ -178,10 +178,82 @@ "name": "fdm_process_creality_common", "sub_path": "process/fdm_process_creality_common.json" }, + { + "name": "0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality Hi 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.08mm HueForge @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.08mm SuperDetail @Creality CR-6 0.2", "sub_path": "process/0.08mm SuperDetail @Creality CR-6 0.2.json" }, + { + "name": "0.08mm SuperDetail @Creality Hi", + "sub_path": "process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.10mm HighDetail @Creality 0.4 CR-6 0.4", "sub_path": "process/0.10mm HighDetail @Creality CR-6 0.4.json" @@ -190,6 +262,14 @@ "name": "0.10mm HighDetail @Creality CR-M4", "sub_path": "process/0.10mm HighDetail @Creality CR-M4.json" }, + { + "name": "0.10mm HighDetail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle", + "sub_path": "process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json" + }, { "name": "0.12mm Detail @Creality 0.4 CR-6", "sub_path": "process/0.12mm Detail @Creality CR-6 0.4.json" @@ -198,6 +278,22 @@ "name": "0.12mm Detail @Creality CR-6 0.2", "sub_path": "process/0.12mm Detail @Creality CR-6 0.2.json" }, + { + "name": "0.12mm Detail @Creality K2 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Detail @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json" + }, { "name": "0.12mm Fine @Creality CR10Max", "sub_path": "process/0.12mm Fine @Creality CR10Max.json" @@ -262,6 +358,18 @@ "name": "0.12mm Fine @Creality Ender5Pro (2019)", "sub_path": "process/0.12mm Fine @Creality Ender5Pro (2019).json" }, + { + "name": "0.12mm Fine @Creality Hi", + "sub_path": "process/0.12mm Fine @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json" + }, + { + "name": "0.14mm Optimal @Creality K2 Plus 0.2 nozzle", + "sub_path": "process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json" + }, { "name": "0.15mm Detail @Creality CR-M4", "sub_path": "process/0.15mm Detail @Creality CR-M4.json" @@ -278,6 +386,10 @@ "name": "0.15mm Optimal @Creality Ender5Pro (2019)", "sub_path": "process/0.15mm Optimal @Creality Ender5Pro (2019).json" }, + { + "name": "0.16mm Fine @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.16mm Optimal @Creality CR-6 0.2", "sub_path": "process/0.16mm Optimal @Creality CR-6 0.2.json" @@ -390,10 +502,78 @@ "name": "0.16mm Optimal @Creality Ender6", "sub_path": "process/0.16mm Optimal @Creality Ender6.json" }, + { + "name": "0.16mm Optimal @Creality Hi", + "sub_path": "process/0.16mm Optimal @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 SE", + "sub_path": "process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1C", + "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.16mm Optimal @Creality Sermoon V1", "sub_path": "process/0.16mm Optimal @Creality Sermoon V1.json" }, + { + "name": "0.16mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json" + }, + { + "name": "0.18mm Detail @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.1mm Standard @Creality Hi 0.2 nozzle", + "sub_path": "process/0.1mm Standard @Creality Hi 0.2 nozzle.json" + }, + { + "name": "0.20mm High Quality @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality CR-6 0.4", "sub_path": "process/0.20mm Standard @Creality CR-6 0.4.json" @@ -422,6 +602,10 @@ "name": "0.20mm Standard @Creality CR10V3 0.6", "sub_path": "process/0.20mm Standard @Creality CR10V3 0.6.json" }, + { + "name": "0.20mm Standard @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality Ender3", "sub_path": "process/0.20mm Standard @Creality Ender3.json" @@ -530,14 +714,74 @@ "name": "0.20mm Standard @Creality Ender6", "sub_path": "process/0.20mm Standard @Creality Ender6.json" }, + { + "name": "0.20mm Standard @Creality Hi", + "sub_path": "process/0.20mm Standard @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1 SE", + "sub_path": "process/0.20mm Standard @Creality K1 SE 0.4.json" + }, + { + "name": "0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1C", + "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.20mm Standard @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality K2 0.4 nozzle", "sub_path": "process/0.20mm Standard @Creality K2 0.4 nozzle.json" }, + { + "name": "0.20mm Standard @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.20mm Standard @Creality Sermoon V1", "sub_path": "process/0.20mm Standard @Creality Sermoon V1.json" }, + { + "name": "0.20mm Strength @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.24mm Draft @Creality CR-6 0.4", "sub_path": "process/0.24mm Draft @Creality CR-6 0.4.json" @@ -550,6 +794,10 @@ "name": "0.24mm Draft @Creality CR10Max", "sub_path": "process/0.24mm Draft @Creality CR10Max.json" }, + { + "name": "0.24mm Draft @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json" + }, { "name": "0.24mm Draft @Creality Ender3 0.2", "sub_path": "process/0.24mm Draft @Creality Ender3 0.2.json" @@ -626,10 +874,70 @@ "name": "0.24mm Draft @Creality Ender5Pro (2019)", "sub_path": "process/0.24mm Draft @Creality Ender5Pro (2019).json" }, + { + "name": "0.24mm Draft @Creality Hi", + "sub_path": "process/0.24mm Draft @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 SE", + "sub_path": "process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1C", + "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", + "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" + }, + { + "name": "0.24mm Draft @Creality K1_CFS-C 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json" + }, { "name": "0.24mm Optimal @Creality CR-6 0.8", "sub_path": "process/0.24mm Optimal @Creality CR-6 0.8.json" }, + { + "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Standard @Creality K2 SE 0.4 nozzle", + "sub_path": "process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json" + }, { "name": "0.28mm Draft @Creality Ender3 0.2", "sub_path": "process/0.28mm SuperDraft @Creality Ender3 0.2.json" @@ -674,18 +982,98 @@ "name": "0.28mm SuperDraft @Creality CR-6 0.6", "sub_path": "process/0.28mm SuperDraft @Creality CR-6 0.6.json" }, + { + "name": "0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality Hi 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle", + "sub_path": "process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json" + }, + { + "name": "0.2mm Standard @Creality Ender-5 Max 0.4 nozzle", + "sub_path": "process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json" + }, + { + "name": "0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle", + "sub_path": "process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality Ender-5 Max 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality Hi", + "sub_path": "process/0.30mm Standard @Creality Hi 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" + }, + { + "name": "0.30mm Standard @Creality K1 SE 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1C", + "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", + "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" + }, { "name": "0.30mm Standard @Creality K2 0.6 nozzle", "sub_path": "process/0.30mm Standard @Creality K2 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality K2 Pro 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Creality SPARKX i7 0.6 nozzle", + "sub_path": "process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.32mm Chunky @Creality CR-6 0.6", "sub_path": "process/0.32mm Chunky @Creality CR-6 0.6.json" }, + { + "name": "0.32mm Optimal @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.32mm Standard @Creality CR-6 0.8", "sub_path": "process/0.32mm Standard @Creality CR-6 0.8.json" }, + { + "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.36mm SuperChunky @Creality CR-6 0.6", "sub_path": "process/0.36mm SuperChunky @Creality CR-6 0.6.json" @@ -694,10 +1082,54 @@ "name": "0.40mm Draft @Creality CR-6 0.8", "sub_path": "process/0.40mm Draft @Creality CR-6 0.8.json" }, + { + "name": "0.40mm Standard @Creality Ender-5 Max 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality Hi 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality Hi 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" + }, + { + "name": "0.40mm Standard @Creality K1 SE 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1C", + "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", + "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" + }, { "name": "0.40mm Standard @Creality K2 0.8 nozzle", "sub_path": "process/0.40mm Standard @Creality K2 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality K2 Pro 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Creality SPARKX i7 0.8 nozzle", + "sub_path": "process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json" + }, + { + "name": "0.40mm Strength @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json" + }, + { + "name": "0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle", + "sub_path": "process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json" + }, { "name": "0.44mm SuperExtraChunky @Creality CR-6 0.6", "sub_path": "process/0.44mm SuperExtraChunky @Creality CR-6 0.6.json" @@ -710,10 +1142,18 @@ "name": "0.48mm Draft @Creality CR-6 0.8", "sub_path": "process/0.48mm Draft @Creality CR-6 0.8.json" }, + { + "name": "0.48mm Draft @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "0.56mm SuperChunky @Creality CR-6 0.8", "sub_path": "process/0.56mm SuperChunky @Creality CR-6 0.8.json" }, + { + "name": "0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle", + "sub_path": "process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json" + }, { "name": "fdm_process_common_klipper", "sub_path": "process/fdm_process_common_klipper.json" @@ -746,46 +1186,18 @@ "name": "fdm_process_creality_common_1_0", "sub_path": "process/fdm_process_creality_common_1_0.json" }, - { - "name": "0.08mm SuperDetail @Creality Hi", - "sub_path": "process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json" - }, { "name": "0.08mm SuperDetail @Creality K2 0.2 nozzle", "sub_path": "process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.08mm SuperDetail @Creality K2 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json" - }, { "name": "0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json" }, - { - "name": "0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.10mm HighDetail @Creality K2 0.2 nozzle", "sub_path": "process/0.10mm HighDetail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.10mm HighDetail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json" - }, { "name": "0.10mm HighDetail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json" @@ -794,26 +1206,10 @@ "name": "0.12mm Detail @Creality K2 0.2 nozzle", "sub_path": "process/0.12mm Detail @Creality K2 0.2 nozzle.json" }, - { - "name": "0.12mm Detail @Creality K2 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.12mm Detail @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Detail @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json" - }, { "name": "0.12mm Detail @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json" }, - { - "name": "0.12mm Detail @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.12mm Fine @Creality CR10SE 0.2", "sub_path": "process/0.12mm Fine @Creality CR10SE 0.2.json" @@ -842,10 +1238,6 @@ "name": "0.12mm Fine @Creality Ender3V3KE", "sub_path": "process/0.12mm Fine @Creality Ender3V3KE.json" }, - { - "name": "0.12mm Fine @Creality Hi", - "sub_path": "process/0.12mm Fine @Creality Hi 0.4 nozzle.json" - }, { "name": "0.12mm Fine @Creality K1 (0.4 nozzle)", "sub_path": "process/0.12mm Fine @Creality K1 (0.4 nozzle).json" @@ -866,10 +1258,6 @@ "name": "0.14mm Optimal @Creality K2 0.2 nozzle", "sub_path": "process/0.14mm Optimal @Creality K2 0.2 nozzle.json" }, - { - "name": "0.14mm Optimal @Creality K2 Plus 0.2 nozzle", - "sub_path": "process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json" - }, { "name": "0.14mm Optimal @Creality K2 Pro 0.2 nozzle", "sub_path": "process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json" @@ -902,46 +1290,10 @@ "name": "0.16mm Optimal @Creality Ender3V3KE", "sub_path": "process/0.16mm Optimal @Creality Ender3V3KE.json" }, - { - "name": "0.16mm Optimal @Creality Hi", - "sub_path": "process/0.16mm Optimal @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K1 SE", - "sub_path": "process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1C", - "sub_path": "process/0.16mm Optimal @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.16mm Optimal @Creality K2 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.18mm Detail @Creality K2 0.6 nozzle", "sub_path": "process/0.18mm Detail @Creality K2 0.6 nozzle.json" }, - { - "name": "0.18mm Detail @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.18mm Detail @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json" @@ -978,34 +1330,6 @@ "name": "0.20mm Standard @Creality Ender3V3KE", "sub_path": "process/0.20mm Standard @Creality Ender3V3KE.json" }, - { - "name": "0.20mm Standard @Creality Hi", - "sub_path": "process/0.20mm Standard @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K1 SE", - "sub_path": "process/0.20mm Standard @Creality K1 SE 0.4.json" - }, - { - "name": "0.20mm Standard @Creality K1C", - "sub_path": "process/0.20mm Standard @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.20mm Standard @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.20mm Standard @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle", "sub_path": "process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json" @@ -1014,10 +1338,6 @@ "name": "0.24mm Detail @Creality K2 0.8 nozzle", "sub_path": "process/0.24mm Detail @Creality K2 0.8 nozzle.json" }, - { - "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.24mm Detail @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json" @@ -1050,38 +1370,6 @@ "name": "0.24mm Draft @Creality Ender3V3KE", "sub_path": "process/0.24mm Draft @Creality Ender3V3KE.json" }, - { - "name": "0.24mm Draft @Creality Hi", - "sub_path": "process/0.24mm Draft @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K1 SE", - "sub_path": "process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1C", - "sub_path": "process/0.24mm Draft @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.24mm Draft @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.24mm Draft @Creality K2 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.24mm Optimal @Creality Ender-3 V3", "sub_path": "process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json" @@ -1110,26 +1398,10 @@ "name": "0.24mm Optimal @Creality K2 0.6 nozzle", "sub_path": "process/0.24mm Optimal @Creality K2 0.6 nozzle.json" }, - { - "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.24mm Optimal @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json" }, - { - "name": "0.28mm SuperDraft @Creality K2 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json" - }, { "name": "0.30mm Standard @Creality Ender-3 V3", "sub_path": "process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json" @@ -1138,30 +1410,6 @@ "name": "0.30mm Standard @Creality Ender-3 V3 Plus", "sub_path": "process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json" }, - { - "name": "0.30mm Standard @Creality Hi", - "sub_path": "process/0.30mm Standard @Creality Hi 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1 (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1 (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K1C", - "sub_path": "process/0.30mm Standard @Creality K1C 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1Max (0.6 nozzle)", - "sub_path": "process/0.30mm Standard @Creality K1Max (0.6 nozzle).json" - }, - { - "name": "0.30mm Standard @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K2 Pro 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json" - }, { "name": "0.32mm Optimal @Creality K1 (0.8 nozzle)", "sub_path": "process/0.32mm Optimal @Creality K1 (0.8 nozzle).json" @@ -1178,10 +1426,6 @@ "name": "0.32mm Optimal @Creality K2 0.8 nozzle", "sub_path": "process/0.32mm Optimal @Creality K2 0.8 nozzle.json" }, - { - "name": "0.32mm Optimal @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.32mm Optimal @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json" @@ -1214,46 +1458,14 @@ "name": "0.36mm Draft @Creality K2 0.6 nozzle", "sub_path": "process/0.36mm Draft @Creality K2 0.6 nozzle.json" }, - { - "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.36mm Draft @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json" }, - { - "name": "0.40mm Standard @Creality K1 (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1 (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K1C", - "sub_path": "process/0.40mm Standard @Creality K1C 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1 SE 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K1Max (0.8 nozzle)", - "sub_path": "process/0.40mm Standard @Creality K1Max (0.8 nozzle).json" - }, - { - "name": "0.40mm Standard @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality K2 Pro 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json" - }, { "name": "0.42mm SuperDraft @Creality K2 0.6 nozzle", "sub_path": "process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json" }, - { - "name": "0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json" - }, { "name": "0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle", "sub_path": "process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json" @@ -1274,10 +1486,6 @@ "name": "0.48mm Draft @Creality K2 0.8 nozzle", "sub_path": "process/0.48mm Draft @Creality K2 0.8 nozzle.json" }, - { - "name": "0.48mm Draft @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.48mm Draft @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json" @@ -1286,10 +1494,6 @@ "name": "0.56mm SuperDraft @Creality K2 0.8 nozzle", "sub_path": "process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json" }, - { - "name": "0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json" - }, { "name": "0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle", "sub_path": "process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json" @@ -1421,210 +1625,6 @@ { "name": "0.36mm Chunky @Creality Ender5Pro (2019) 1.0", "sub_path": "process/0.36mm Chunky @Creality Ender5Pro (2019) 1.0.json" - }, - { - "name": "0.20mm Standard @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality K1 SE 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality SPARKX i7 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality SPARKX i7 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 0.4 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality Hi 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality Hi 0.8 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality Hi 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.1mm Standard @Creality Hi 0.2 nozzle", - "sub_path": "process/0.1mm Standard @Creality Hi 0.2 nozzle.json" - }, - { - "name": "0.16mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.24mm Standard @Creality K2 SE 0.4 nozzle", - "sub_path": "process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 Pro 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.40mm Strength @Creality K2 Plus 0.8 nozzle", - "sub_path": "process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Creality K2 Plus 0.6 nozzle", - "sub_path": "process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json" - }, - { - "name": "0.08mm HueForge @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm High Quality @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Creality K2 Plus 0.4 nozzle", - "sub_path": "process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json" - }, - { - "name": "0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle", - "sub_path": "process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1 (0.4 nozzle)", - "sub_path": "process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json" - }, - { - "name": "0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.08mm SuperDetail @Creality K1Max (0.4 nozzle)", - "sub_path": "process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json" - }, - { - "name": "0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Fine @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Creality K1_CFS-C 0.4 nozzle", - "sub_path": "process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json" - }, - { - "name": "0.28mm SuperDraft @Creality Hi 0.4 nozzle", - "sub_path": "process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json" - }, - { - "name": "0.2mm Standard @Creality Ender-5 Max 0.4 nozzle", - "sub_path": "process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json" - }, - { - "name": "0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle", - "sub_path": "process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Creality Ender-5 Max 0.6 nozzle", - "sub_path": "process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Creality Ender-5 Max 0.8 nozzle", - "sub_path": "process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json" } ], "filament_list": [ @@ -1633,28 +1633,20 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Creality Generic ABS @Ender-5Max-all", - "sub_path": "filament/Creality Generic ABS @Ender-5Max-all.json" + "name": "fdm_filament_hips", + "sub_path": "filament/fdm_filament_hips.json" }, { - "name": "Creality Generic ASA @Ender-5Max-all", - "sub_path": "filament/Creality Generic ASA @Ender-5Max-all.json" + "name": "fdm_filament_petg", + "sub_path": "filament/fdm_filament_petg.json" }, { - "name": "Creality Generic PA @Ender-5Max-all", - "sub_path": "filament/Creality Generic PA @Ender-5Max-all.json" + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" }, { - "name": "Creality Generic PETG @Ender-5Max-all", - "sub_path": "filament/Creality Generic PETG @Ender-5Max-all.json" - }, - { - "name": "Creality Generic PLA @Ender-5Max-all", - "sub_path": "filament/Creality Generic PLA @Ender-5Max-all.json" - }, - { - "name": "Creality Generic TPU @Ender-5Max-all", - "sub_path": "filament/Creality Generic TPU @Ender-5Max-all.json" + "name": "fdm_filament_pps", + "sub_path": "filament/fdm_filament_pps.json" }, { "name": "Creality Hyper ABS @Ender-5Max-all", @@ -1672,6 +1664,138 @@ "name": "Creality Silk PLA @Ender-5Max-all", "sub_path": "filament/Creality Silk PLA @Ender-5Max-all.json" }, + { + "name": "Generic ABS @Creality Ender-5Max-all", + "sub_path": "filament/Generic ABS @Creality Ender-5Max-all.json" + }, + { + "name": "Generic ASA @Creality Ender-5Max-all", + "sub_path": "filament/Generic ASA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic ASA-CF @K2 Plus-all", + "sub_path": "filament/Generic ASA-CF @K2 Plus-all.json" + }, + { + "name": "Generic BVOH @Hi-all", + "sub_path": "filament/Generic BVOH @Hi-all.json" + }, + { + "name": "Generic BVOH @K1 Max_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K1C-all", + "sub_path": "filament/Generic BVOH @K1C-all.json" + }, + { + "name": "Generic BVOH @K1C_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1C_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K1_CFS-C-all", + "sub_path": "filament/Generic BVOH @K1_CFS-C-all.json" + }, + { + "name": "Generic BVOH @K2 Plus-all", + "sub_path": "filament/Generic BVOH @K2 Plus-all.json" + }, + { + "name": "Generic BVOH @K2 Pro-all", + "sub_path": "filament/Generic BVOH @K2 Pro-all.json" + }, + { + "name": "Generic BVOH @K2-all", + "sub_path": "filament/Generic BVOH @K2-all.json" + }, + { + "name": "Generic PA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PA6-GF @K2 Plus-all", + "sub_path": "filament/Generic PA6-GF @K2 Plus-all.json" + }, + { + "name": "Generic PCTG @K2 Plus-all", + "sub_path": "filament/Generic PCTG @K2 Plus-all.json" + }, + { + "name": "Generic PETG @Creality Ender-5Max-all", + "sub_path": "filament/Generic PETG @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PETG-GF @K2 Plus-all", + "sub_path": "filament/Generic PETG-GF @K2 Plus-all.json" + }, + { + "name": "Generic PETG-GF @K2 Pro-all", + "sub_path": "filament/Generic PETG-GF @K2 Pro-all.json" + }, + { + "name": "Generic PETG-GF @K2-all", + "sub_path": "filament/Generic PETG-GF @K2-all.json" + }, + { + "name": "Generic PLA @Creality Ender-5Max-all", + "sub_path": "filament/Generic PLA @Creality Ender-5Max-all.json" + }, + { + "name": "Generic PP-CF @K2 Plus-all", + "sub_path": "filament/Generic PP-CF @K2 Plus-all.json" + }, + { + "name": "Generic PVA @Hi-all", + "sub_path": "filament/Generic PVA @Hi-all.json" + }, + { + "name": "Generic PVA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PVA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PVA @K1C-all", + "sub_path": "filament/Generic PVA @K1C-all.json" + }, + { + "name": "Generic PVA @K1C_CFS-C-all", + "sub_path": "filament/Generic PVA @K1C_CFS-C-all.json" + }, + { + "name": "Generic PVA @K1_CFS-C-all", + "sub_path": "filament/Generic PVA @K1_CFS-C-all.json" + }, + { + "name": "Generic PVA @K2 Plus-all", + "sub_path": "filament/Generic PVA @K2 Plus-all.json" + }, + { + "name": "Generic PVA @K2 Pro-all", + "sub_path": "filament/Generic PVA @K2 Pro-all.json" + }, + { + "name": "Generic PVA @K2-all", + "sub_path": "filament/Generic PVA @K2-all.json" + }, + { + "name": "Generic TPU @Creality Ender-5Max-all", + "sub_path": "filament/Generic TPU @Creality Ender-5Max-all.json" + }, + { + "name": "Hyper PETG-GF @K1C-all", + "sub_path": "filament/Hyper PETG-GF @K1C-all.json" + }, + { + "name": "Hyper PETG-GF @K2 Plus-all", + "sub_path": "filament/Hyper PETG-GF @K2 Plus-all.json" + }, + { + "name": "Hyper PETG-GF @K2 Pro-all", + "sub_path": "filament/Hyper PETG-GF @K2 Pro-all.json" + }, + { + "name": "Hyper PETG-GF @K2-all", + "sub_path": "filament/Hyper PETG-GF @K2-all.json" + }, { "name": "fdm_filament_abs", "sub_path": "filament/fdm_filament_abs.json" @@ -1701,300 +1825,24 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Creality Generic ABS", - "sub_path": "filament/Creality Generic ABS.json" + "name": "Generic HIPS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1 Max_CFS-C-all.json" }, { - "name": "Creality Generic ASA", - "sub_path": "filament/Creality Generic ASA.json" + "name": "Generic HIPS @K1C-all", + "sub_path": "filament/Generic HIPS @K1C-all.json" }, { - "name": "Creality Generic PA-CF", - "sub_path": "filament/Creality Generic PA-CF.json" + "name": "Generic HIPS @K1C_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1C_CFS-C-all.json" }, { - "name": "Creality Generic PC", - "sub_path": "filament/Creality Generic PC.json" + "name": "Generic HIPS @K1_CFS-C-all", + "sub_path": "filament/Generic HIPS @K1_CFS-C-all.json" }, { - "name": "Creality Generic PETG", - "sub_path": "filament/Creality Generic PETG.json" - }, - { - "name": "Creality Generic PLA", - "sub_path": "filament/Creality Generic PLA.json" - }, - { - "name": "Creality Generic PLA-CF", - "sub_path": "filament/Creality Generic PLA-CF.json" - }, - { - "name": "Creality HF Generic PLA", - "sub_path": "filament/Creality HF Generic PLA.json" - }, - { - "name": "Creality HF Generic Speed PLA", - "sub_path": "filament/Creality HF Generic Speed PLA.json" - }, - { - "name": "Creality Generic TPU", - "sub_path": "filament/Creality Generic TPU.json" - }, - { - "name": "Creality Generic ABS @Ender-3V3-all", - "sub_path": "filament/Creality Generic ABS @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ABS @Hi-all", - "sub_path": "filament/Creality Generic ABS @Hi-all.json" - }, - { - "name": "Creality Generic ABS @K1-all", - "sub_path": "filament/Creality Generic ABS @K1-all.json" - }, - { - "name": "Creality Generic ABS @K2-all", - "sub_path": "filament/Creality Generic ABS @K2-all.json" - }, - { - "name": "Creality Generic ASA @Ender-3V3-all", - "sub_path": "filament/Creality Generic ASA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic ASA @Hi-all", - "sub_path": "filament/Creality Generic ASA @Hi-all.json" - }, - { - "name": "Creality Generic ASA @K1-all", - "sub_path": "filament/Creality Generic ASA @K1-all.json" - }, - { - "name": "Creality Generic ASA @K2-all", - "sub_path": "filament/Creality Generic ASA @K2-all.json" - }, - { - "name": "Creality Generic PA-CF @Ender-3V3-all", - "sub_path": "filament/Creality Generic PA-CF @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PA-CF @K1-all", - "sub_path": "filament/Creality Generic PA-CF @K1-all.json" - }, - { - "name": "Creality Generic PA-CF @K2-all", - "sub_path": "filament/Creality Generic PA-CF @K2-all.json" - }, - { - "name": "Creality Generic PC @K1-all", - "sub_path": "filament/Creality Generic PC @K1-all.json" - }, - { - "name": "Creality Generic PETG @Ender-3V3-all", - "sub_path": "filament/Creality Generic PETG @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PETG @Hi-all", - "sub_path": "filament/Creality Generic PETG @Hi-all.json" - }, - { - "name": "Creality Generic PETG @K1-all", - "sub_path": "filament/Creality Generic PETG @K1-all.json" - }, - { - "name": "Creality Generic PETG @K2-all", - "sub_path": "filament/Creality Generic PETG @K2-all.json" - }, - { - "name": "Creality Generic PLA @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA @Hi-all", - "sub_path": "filament/Creality Generic PLA @Hi-all.json" - }, - { - "name": "Creality Generic PLA @K1-all", - "sub_path": "filament/Creality Generic PLA @K1-all.json" - }, - { - "name": "Creality Generic PLA @K2-all", - "sub_path": "filament/Creality Generic PLA @K2-all.json" - }, - { - "name": "Creality Generic PLA-CF @Hi-all", - "sub_path": "filament/Creality Generic PLA-CF @Hi-all.json" - }, - { - "name": "Creality Generic PLA-CF @K1-all", - "sub_path": "filament/Creality Generic PLA-CF @K1-all.json" - }, - { - "name": "Creality Generic PLA-CF @K2-all", - "sub_path": "filament/Creality Generic PLA-CF @K2-all.json" - }, - { - "name": "Creality Generic TPU @Ender-3V3-all", - "sub_path": "filament/Creality Generic TPU @Ender-3V3-all.json" - }, - { - "name": "Creality Generic TPU @Hi-all", - "sub_path": "filament/Creality Generic TPU @Hi-all.json" - }, - { - "name": "Creality Generic TPU @K1-all", - "sub_path": "filament/Creality Generic TPU @K1-all.json" - }, - { - "name": "Creality Generic TPU @K2-all", - "sub_path": "filament/Creality Generic TPU @K2-all.json" - }, - { - "name": "Creality Generic ASA-CF @Hi-all", - "sub_path": "filament/Creality Generic ASA-CF @Hi-all.json" - }, - { - "name": "Creality Generic PETG-CF @Hi-all", - "sub_path": "filament/Creality Generic PETG-CF @Hi-all.json" - }, - { - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA High Speed @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Matte @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "sub_path": "filament/Creality Generic PLA Silk @Ender-3V3-all.json" - }, - { - "name": "Creality Generic PLA High Speed @Hi-all", - "sub_path": "filament/Creality Generic PLA High Speed @Hi-all.json" - }, - { - "name": "Creality Generic PLA Matte @Hi-all", - "sub_path": "filament/Creality Generic PLA Matte @Hi-all.json" - }, - { - "name": "Creality Generic PLA Silk @Hi-all", - "sub_path": "filament/Creality Generic PLA Silk @Hi-all.json" - }, - { - "name": "Creality Generic PLA Wood @Hi-all", - "sub_path": "filament/Creality Generic PLA Wood @Hi-all.json" - }, - { - "name": "Creality Generic PLA High Speed @K1-all", - "sub_path": "filament/Creality Generic PLA High Speed @K1-all.json" - }, - { - "name": "Creality Generic PLA Matte @K1-all", - "sub_path": "filament/Creality Generic PLA Matte @K1-all.json" - }, - { - "name": "Creality Generic PLA Silk @K1-all", - "sub_path": "filament/Creality Generic PLA Silk @K1-all.json" - }, - { - "name": "Creality Generic PLA High Speed @K2-all", - "sub_path": "filament/Creality Generic PLA High Speed @K2-all.json" - }, - { - "name": "Creality Generic PLA Matte @K2-all", - "sub_path": "filament/Creality Generic PLA Matte @K2-all.json" - }, - { - "name": "Creality Generic PLA Silk @K2-all", - "sub_path": "filament/Creality Generic PLA Silk @K2-all.json" - }, - { - "name": "fdm_filament_pp", - "sub_path": "filament/fdm_filament_pp.json" - }, - { - "name": "fdm_filament_pps", - "sub_path": "filament/fdm_filament_pps.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_petg", - "sub_path": "filament/fdm_filament_petg.json" - }, - { - "name": "fdm_filament_hips", - "sub_path": "filament/fdm_filament_hips.json" - }, - { - "name": "CR-ABS @Ender-3 V4-all", - "sub_path": "filament/CR-ABS @Ender-3 V4-all.json" - }, - { - "name": "CR-ABS @Hi-all", - "sub_path": "filament/CR-ABS @Hi-all.json" - }, - { - "name": "CR-ABS @K1 Max_CFS-C-all", - "sub_path": "filament/CR-ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1 SE-all", - "sub_path": "filament/CR-ABS @K1 SE-all.json" - }, - { - "name": "CR-ABS @K1 SE_CFS-C-all", - "sub_path": "filament/CR-ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1C-all", - "sub_path": "filament/CR-ABS @K1C-all.json" - }, - { - "name": "CR-ABS @K1C_CFS-C-all", - "sub_path": "filament/CR-ABS @K1C_CFS-C-all.json" - }, - { - "name": "CR-ABS @K1_CFS-C-all", - "sub_path": "filament/CR-ABS @K1_CFS-C-all.json" - }, - { - "name": "CR-ABS @K2 Plus-all", - "sub_path": "filament/CR-ABS @K2 Plus-all.json" - }, - { - "name": "CR-ABS @K2 Pro-all", - "sub_path": "filament/CR-ABS @K2 Pro-all.json" - }, - { - "name": "CR-ABS @K2 SE-all", - "sub_path": "filament/CR-ABS @K2 SE-all.json" - }, - { - "name": "CR-ABS @K2-all", - "sub_path": "filament/CR-ABS @K2-all.json" - }, - { - "name": "CR-Nylon @K1 Max_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K1C-all", - "sub_path": "filament/CR-Nylon @K1C-all.json" - }, - { - "name": "CR-Nylon @K1C_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1C_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K1_CFS-C-all", - "sub_path": "filament/CR-Nylon @K1_CFS-C-all.json" - }, - { - "name": "CR-Nylon @K2 Plus-all", - "sub_path": "filament/CR-Nylon @K2 Plus-all.json" + "name": "Generic HIPS @K2 Plus-all", + "sub_path": "filament/Generic HIPS @K2 Plus-all.json" }, { "name": "CR-PETG @Ender-3 V4-all", @@ -2048,6 +1896,798 @@ "name": "CR-PETG @SPARKX i7-all", "sub_path": "filament/CR-PETG @SPARKX i7-all.json" }, + { + "name": "Generic PETG @Ender-3 V4-all", + "sub_path": "filament/Generic PETG @Ender-3 V4-all.json" + }, + { + "name": "Generic PETG @Hi-all", + "sub_path": "filament/Generic PETG @Hi-all.json" + }, + { + "name": "Generic PETG @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PETG @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1 SE-all", + "sub_path": "filament/Generic PETG @K1 SE-all.json" + }, + { + "name": "Generic PETG @K1 SE_CFS-C-all", + "sub_path": "filament/Generic PETG @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1C-all", + "sub_path": "filament/Generic PETG @K1C-all.json" + }, + { + "name": "Generic PETG @K1C_CFS-C-all", + "sub_path": "filament/Generic PETG @K1C_CFS-C-all.json" + }, + { + "name": "Generic PETG @K1_CFS-C-all", + "sub_path": "filament/Generic PETG @K1_CFS-C-all.json" + }, + { + "name": "Generic PETG @K2 Plus-all", + "sub_path": "filament/Generic PETG @K2 Plus-all.json" + }, + { + "name": "Generic PETG @K2 Pro-all", + "sub_path": "filament/Generic PETG @K2 Pro-all.json" + }, + { + "name": "Generic PETG @K2 SE-all", + "sub_path": "filament/Generic PETG @K2 SE-all.json" + }, + { + "name": "Generic PETG @K2-all", + "sub_path": "filament/Generic PETG @K2-all.json" + }, + { + "name": "Generic PETG @SPARKX i7-all", + "sub_path": "filament/Generic PETG @SPARKX i7-all.json" + }, + { + "name": "Generic PETG-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K1C-all", + "sub_path": "filament/Generic PETG-CF @K1C-all.json" + }, + { + "name": "Generic PETG-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PETG-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PETG-CF @K2 Plus-all", + "sub_path": "filament/Generic PETG-CF @K2 Plus-all.json" + }, + { + "name": "Generic PETG-CF @K2 Pro-all", + "sub_path": "filament/Generic PETG-CF @K2 Pro-all.json" + }, + { + "name": "Generic PETG-CF @K2-all", + "sub_path": "filament/Generic PETG-CF @K2-all.json" + }, + { + "name": "Generic PETG-CF @SPARKX i7-all", + "sub_path": "filament/Generic PETG-CF @SPARKX i7-all.json" + }, + { + "name": "Hyper PETG @Ender-3 V4-all", + "sub_path": "filament/Hyper PETG @Ender-3 V4-all.json" + }, + { + "name": "Hyper PETG @Hi-all", + "sub_path": "filament/Hyper PETG @Hi-all.json" + }, + { + "name": "Hyper PETG @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1 SE-all", + "sub_path": "filament/Hyper PETG @K1 SE-all.json" + }, + { + "name": "Hyper PETG @K1 SE_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1 SE_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1C-all", + "sub_path": "filament/Hyper PETG @K1C-all.json" + }, + { + "name": "Hyper PETG @K1C_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K1_CFS-C-all", + "sub_path": "filament/Hyper PETG @K1_CFS-C-all.json" + }, + { + "name": "Hyper PETG @K2 Plus-all", + "sub_path": "filament/Hyper PETG @K2 Plus-all.json" + }, + { + "name": "Hyper PETG @K2 Pro-all", + "sub_path": "filament/Hyper PETG @K2 Pro-all.json" + }, + { + "name": "Hyper PETG @K2 SE-all", + "sub_path": "filament/Hyper PETG @K2 SE-all.json" + }, + { + "name": "Hyper PETG @K2-all", + "sub_path": "filament/Hyper PETG @K2-all.json" + }, + { + "name": "Hyper PETG @SPARKX i7-all", + "sub_path": "filament/Hyper PETG @SPARKX i7-all.json" + }, + { + "name": "Hyper PETG-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K1C-all", + "sub_path": "filament/Hyper PETG-CF @K1C-all.json" + }, + { + "name": "Hyper PETG-CF @K1C_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K1_CFS-C-all", + "sub_path": "filament/Hyper PETG-CF @K1_CFS-C-all.json" + }, + { + "name": "Hyper PETG-CF @K2 Plus-all", + "sub_path": "filament/Hyper PETG-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PETG-CF @K2 Pro-all", + "sub_path": "filament/Hyper PETG-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PETG-CF @K2-all", + "sub_path": "filament/Hyper PETG-CF @K2-all.json" + }, + { + "name": "Hyper PETG-CF @SPARKX i7-all", + "sub_path": "filament/Hyper PETG-CF @SPARKX i7-all.json" + }, + { + "name": "Soleyin Basic PETG @Hi-all", + "sub_path": "filament/Soleyin Basic PETG @Hi-all.json" + }, + { + "name": "Soleyin Basic PETG @K1C-all", + "sub_path": "filament/Soleyin Basic PETG @K1C-all.json" + }, + { + "name": "Soleyin Basic PETG @K2 Plus-all", + "sub_path": "filament/Soleyin Basic PETG @K2 Plus-all.json" + }, + { + "name": "Soleyin Basic PETG @K2 Pro-all", + "sub_path": "filament/Soleyin Basic PETG @K2 Pro-all.json" + }, + { + "name": "Soleyin Basic PETG @K2-all", + "sub_path": "filament/Soleyin Basic PETG @K2-all.json" + }, + { + "name": "Soleyin Basic PETG @SPARKX i7-all", + "sub_path": "filament/Soleyin Basic PETG @SPARKX i7-all.json" + }, + { + "name": "eSUN PETG @K2 Plus-all", + "sub_path": "filament/eSUN PETG @K2 Plus-all.json" + }, + { + "name": "eSUN PETG+HS @K2 Plus-all", + "sub_path": "filament/eSUN PETG+HS @K2 Plus-all.json" + }, + { + "name": "eSUN PETG-Basic @K2 Plus-all", + "sub_path": "filament/eSUN PETG-Basic @K2 Plus-all.json" + }, + { + "name": "Generic PP @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PP @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PP @K1C-all", + "sub_path": "filament/Generic PP @K1C-all.json" + }, + { + "name": "Generic PP @K1C_CFS-C-all", + "sub_path": "filament/Generic PP @K1C_CFS-C-all.json" + }, + { + "name": "Generic PP @K1_CFS-C-all", + "sub_path": "filament/Generic PP @K1_CFS-C-all.json" + }, + { + "name": "Generic PP @K2 Plus-all", + "sub_path": "filament/Generic PP @K2 Plus-all.json" + }, + { + "name": "Generic PP @K2 Pro-all", + "sub_path": "filament/Generic PP @K2 Pro-all.json" + }, + { + "name": "Generic PP @K2-all", + "sub_path": "filament/Generic PP @K2-all.json" + }, + { + "name": "Generic PPS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PPS @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PPS @K1C-all", + "sub_path": "filament/Generic PPS @K1C-all.json" + }, + { + "name": "Generic PPS @K1C_CFS-C-all", + "sub_path": "filament/Generic PPS @K1C_CFS-C-all.json" + }, + { + "name": "Generic PPS @K1_CFS-C-all", + "sub_path": "filament/Generic PPS @K1_CFS-C-all.json" + }, + { + "name": "Generic PPS @K2 Plus-all", + "sub_path": "filament/Generic PPS @K2 Plus-all.json" + }, + { + "name": "Generic PPS-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K1C-all", + "sub_path": "filament/Generic PPS-CF @K1C-all.json" + }, + { + "name": "Generic PPS-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PPS-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PPS-CF @K2 Plus-all", + "sub_path": "filament/Generic PPS-CF @K2 Plus-all.json" + }, + { + "name": "CR-ABS @Ender-3 V4-all", + "sub_path": "filament/CR-ABS @Ender-3 V4-all.json" + }, + { + "name": "CR-ABS @Hi-all", + "sub_path": "filament/CR-ABS @Hi-all.json" + }, + { + "name": "CR-ABS @K1 Max_CFS-C-all", + "sub_path": "filament/CR-ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1 SE-all", + "sub_path": "filament/CR-ABS @K1 SE-all.json" + }, + { + "name": "CR-ABS @K1 SE_CFS-C-all", + "sub_path": "filament/CR-ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1C-all", + "sub_path": "filament/CR-ABS @K1C-all.json" + }, + { + "name": "CR-ABS @K1C_CFS-C-all", + "sub_path": "filament/CR-ABS @K1C_CFS-C-all.json" + }, + { + "name": "CR-ABS @K1_CFS-C-all", + "sub_path": "filament/CR-ABS @K1_CFS-C-all.json" + }, + { + "name": "CR-ABS @K2 Plus-all", + "sub_path": "filament/CR-ABS @K2 Plus-all.json" + }, + { + "name": "CR-ABS @K2 Pro-all", + "sub_path": "filament/CR-ABS @K2 Pro-all.json" + }, + { + "name": "CR-ABS @K2 SE-all", + "sub_path": "filament/CR-ABS @K2 SE-all.json" + }, + { + "name": "CR-ABS @K2-all", + "sub_path": "filament/CR-ABS @K2-all.json" + }, + { + "name": "Generic ABS @Creality", + "sub_path": "filament/Generic ABS @Creality.json" + }, + { + "name": "Generic ABS @Ender-3 V4-all", + "sub_path": "filament/Generic ABS @Ender-3 V4-all.json" + }, + { + "name": "Generic ABS @Hi-all", + "sub_path": "filament/Generic ABS @Hi-all.json" + }, + { + "name": "Generic ABS @K1 Max_CFS-C-all", + "sub_path": "filament/Generic ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1 SE-all", + "sub_path": "filament/Generic ABS @K1 SE-all.json" + }, + { + "name": "Generic ABS @K1 SE_CFS-C-all", + "sub_path": "filament/Generic ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1C-all", + "sub_path": "filament/Generic ABS @K1C-all.json" + }, + { + "name": "Generic ABS @K1C_CFS-C-all", + "sub_path": "filament/Generic ABS @K1C_CFS-C-all.json" + }, + { + "name": "Generic ABS @K1_CFS-C-all", + "sub_path": "filament/Generic ABS @K1_CFS-C-all.json" + }, + { + "name": "Generic ABS @K2 Plus-all", + "sub_path": "filament/Generic ABS @K2 Plus-all.json" + }, + { + "name": "Generic ABS @K2 Pro-all", + "sub_path": "filament/Generic ABS @K2 Pro-all.json" + }, + { + "name": "Generic ABS @K2 SE-all", + "sub_path": "filament/Generic ABS @K2 SE-all.json" + }, + { + "name": "Generic ABS @K2-all", + "sub_path": "filament/Generic ABS @K2-all.json" + }, + { + "name": "Hyper ABS @Ender-3 V4-all", + "sub_path": "filament/Hyper ABS @Ender-3 V4-all.json" + }, + { + "name": "Hyper ABS @Hi-all", + "sub_path": "filament/Hyper ABS @Hi-all.json" + }, + { + "name": "Hyper ABS @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1 SE-all", + "sub_path": "filament/Hyper ABS @K1 SE-all.json" + }, + { + "name": "Hyper ABS @K1 SE_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1 SE_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1C-all", + "sub_path": "filament/Hyper ABS @K1C-all.json" + }, + { + "name": "Hyper ABS @K1C_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1C_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K1_CFS-C-all", + "sub_path": "filament/Hyper ABS @K1_CFS-C-all.json" + }, + { + "name": "Hyper ABS @K2 Plus-all", + "sub_path": "filament/Hyper ABS @K2 Plus-all.json" + }, + { + "name": "Hyper ABS @K2 Pro-all", + "sub_path": "filament/Hyper ABS @K2 Pro-all.json" + }, + { + "name": "Hyper ABS @K2 SE-all", + "sub_path": "filament/Hyper ABS @K2 SE-all.json" + }, + { + "name": "Hyper ABS @K2-all", + "sub_path": "filament/Hyper ABS @K2-all.json" + }, + { + "name": "eSUN ABS+ @K2 Plus-all", + "sub_path": "filament/eSUN ABS+ @K2 Plus-all.json" + }, + { + "name": "Generic ASA @Creality", + "sub_path": "filament/Generic ASA @Creality.json" + }, + { + "name": "Generic ASA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic ASA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1 SE-all", + "sub_path": "filament/Generic ASA @K1 SE-all.json" + }, + { + "name": "Generic ASA @K1 SE_CFS-C-all", + "sub_path": "filament/Generic ASA @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1C-all", + "sub_path": "filament/Generic ASA @K1C-all.json" + }, + { + "name": "Generic ASA @K1C_CFS-C-all", + "sub_path": "filament/Generic ASA @K1C_CFS-C-all.json" + }, + { + "name": "Generic ASA @K1_CFS-C-all", + "sub_path": "filament/Generic ASA @K1_CFS-C-all.json" + }, + { + "name": "Generic ASA @K2 Plus-all", + "sub_path": "filament/Generic ASA @K2 Plus-all.json" + }, + { + "name": "Generic ASA @K2 Pro-all", + "sub_path": "filament/Generic ASA @K2 Pro-all.json" + }, + { + "name": "Generic ASA @K2 SE-all", + "sub_path": "filament/Generic ASA @K2 SE-all.json" + }, + { + "name": "Generic ASA @K2-all", + "sub_path": "filament/Generic ASA @K2-all.json" + }, + { + "name": "HP-ASA @K1 Max_CFS-C-all", + "sub_path": "filament/HP-ASA @K1 Max_CFS-C-all.json" + }, + { + "name": "HP-ASA @K1C-all", + "sub_path": "filament/HP-ASA @K1C-all.json" + }, + { + "name": "HP-ASA @K1C_CFS-C-all", + "sub_path": "filament/HP-ASA @K1C_CFS-C-all.json" + }, + { + "name": "HP-ASA @K1_CFS-C-all", + "sub_path": "filament/HP-ASA @K1_CFS-C-all.json" + }, + { + "name": "HP-ASA @K2 Plus-all", + "sub_path": "filament/HP-ASA @K2 Plus-all.json" + }, + { + "name": "HP-ASA @K2 Pro-all", + "sub_path": "filament/HP-ASA @K2 Pro-all.json" + }, + { + "name": "HP-ASA @K2 SE-all", + "sub_path": "filament/HP-ASA @K2 SE-all.json" + }, + { + "name": "HP-ASA @K2-all", + "sub_path": "filament/HP-ASA @K2-all.json" + }, + { + "name": "eSUN ASA+ @K2 Plus-all", + "sub_path": "filament/eSUN ASA+ @K2 Plus-all.json" + }, + { + "name": "CR-Nylon @K1 Max_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K1C-all", + "sub_path": "filament/CR-Nylon @K1C-all.json" + }, + { + "name": "CR-Nylon @K1C_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1C_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K1_CFS-C-all", + "sub_path": "filament/CR-Nylon @K1_CFS-C-all.json" + }, + { + "name": "CR-Nylon @K2 Plus-all", + "sub_path": "filament/CR-Nylon @K2 Plus-all.json" + }, + { + "name": "Generic PA @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA @K1C-all", + "sub_path": "filament/Generic PA @K1C-all.json" + }, + { + "name": "Generic PA @K1C_CFS-C-all", + "sub_path": "filament/Generic PA @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA @K1_CFS-C-all", + "sub_path": "filament/Generic PA @K1_CFS-C-all.json" + }, + { + "name": "Generic PA @K2 Plus-all", + "sub_path": "filament/Generic PA @K2 Plus-all.json" + }, + { + "name": "Generic PA @K2 Pro-all", + "sub_path": "filament/Generic PA @K2 Pro-all.json" + }, + { + "name": "Generic PA @K2-all", + "sub_path": "filament/Generic PA @K2-all.json" + }, + { + "name": "Generic PA-CF @Creality", + "sub_path": "filament/Generic PA-CF @Creality.json" + }, + { + "name": "Generic PA-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K1C-all", + "sub_path": "filament/Generic PA-CF @K1C-all.json" + }, + { + "name": "Generic PA-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PA-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PA-CF @K2 Plus-all", + "sub_path": "filament/Generic PA-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA12-CF @K2 Plus-all", + "sub_path": "filament/Generic PA12-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA6-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K1C-all", + "sub_path": "filament/Generic PA6-CF @K1C-all.json" + }, + { + "name": "Generic PA6-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PA6-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PA6-CF @K2 Plus-all", + "sub_path": "filament/Generic PA6-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA6-CF @K2 Pro-all", + "sub_path": "filament/Generic PA6-CF @K2 Pro-all.json" + }, + { + "name": "Generic PA612-CF @K2 Plus-all", + "sub_path": "filament/Generic PA612-CF @K2 Plus-all.json" + }, + { + "name": "Generic PA612-CF @K2 Pro-all", + "sub_path": "filament/Generic PA612-CF @K2 Pro-all.json" + }, + { + "name": "Generic PAHT-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K1C-all", + "sub_path": "filament/Generic PAHT-CF @K1C-all.json" + }, + { + "name": "Generic PAHT-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PAHT-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PAHT-CF @K2 Plus-all", + "sub_path": "filament/Generic PAHT-CF @K2 Plus-all.json" + }, + { + "name": "Generic PAHT-CF @K2 Pro-all", + "sub_path": "filament/Generic PAHT-CF @K2 Pro-all.json" + }, + { + "name": "Generic PAHT-CF @K2-all", + "sub_path": "filament/Generic PAHT-CF @K2-all.json" + }, + { + "name": "Generic Support for PA @K2 Plus-all", + "sub_path": "filament/Generic Support for PA @K2 Plus-all.json" + }, + { + "name": "Hyper PA6-CF @K2 Plus-all", + "sub_path": "filament/Hyper PA6-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PA6-CF @K2 Pro-all", + "sub_path": "filament/Hyper PA6-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PA612-CF @K2 Plus-all", + "sub_path": "filament/Hyper PA612-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PA612-CF @K2 Pro-all", + "sub_path": "filament/Hyper PA612-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1C-all", + "sub_path": "filament/Hyper PAHT-CF @K1C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1C_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1C_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K1_CFS-C-all", + "sub_path": "filament/Hyper PAHT-CF @K1_CFS-C-all.json" + }, + { + "name": "Hyper PAHT-CF @K2 Plus-all", + "sub_path": "filament/Hyper PAHT-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PAHT-CF @K2 Pro-all", + "sub_path": "filament/Hyper PAHT-CF @K2 Pro-all.json" + }, + { + "name": "Hyper PAHT-CF @K2-all", + "sub_path": "filament/Hyper PAHT-CF @K2-all.json" + }, + { + "name": "Hyper PPA-CF @K2 Plus-all", + "sub_path": "filament/Hyper PPA-CF @K2 Plus-all.json" + }, + { + "name": "Hyper PPA-CF @K2 Pro-all", + "sub_path": "filament/Hyper PPA-CF @K2 Pro-all.json" + }, + { + "name": "Generic PC @Creality", + "sub_path": "filament/Generic PC @Creality.json" + }, + { + "name": "Generic PC @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PC @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PC @K1C-all", + "sub_path": "filament/Generic PC @K1C-all.json" + }, + { + "name": "Generic PC @K1C_CFS-C-all", + "sub_path": "filament/Generic PC @K1C_CFS-C-all.json" + }, + { + "name": "Generic PC @K1_CFS-C-all", + "sub_path": "filament/Generic PC @K1_CFS-C-all.json" + }, + { + "name": "Generic PC @K2 Plus-all", + "sub_path": "filament/Generic PC @K2 Plus-all.json" + }, + { + "name": "Generic PC @K2 Pro-all", + "sub_path": "filament/Generic PC @K2 Pro-all.json" + }, + { + "name": "Hyper PC @K2 Plus-all", + "sub_path": "filament/Hyper PC @K2 Plus-all.json" + }, + { + "name": "Hyper PC @K2 Pro-all", + "sub_path": "filament/Hyper PC @K2 Pro-all.json" + }, + { + "name": "Generic PET @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PET @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PET @K1C-all", + "sub_path": "filament/Generic PET @K1C-all.json" + }, + { + "name": "Generic PET @K1C_CFS-C-all", + "sub_path": "filament/Generic PET @K1C_CFS-C-all.json" + }, + { + "name": "Generic PET @K1_CFS-C-all", + "sub_path": "filament/Generic PET @K1_CFS-C-all.json" + }, + { + "name": "Generic PET @K2 Plus-all", + "sub_path": "filament/Generic PET @K2 Plus-all.json" + }, + { + "name": "Generic PET @K2 Pro-all", + "sub_path": "filament/Generic PET @K2 Pro-all.json" + }, + { + "name": "Generic PET @K2-all", + "sub_path": "filament/Generic PET @K2-all.json" + }, + { + "name": "Generic PET-CF @K1 Max_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K1C-all", + "sub_path": "filament/Generic PET-CF @K1C-all.json" + }, + { + "name": "Generic PET-CF @K1C_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1C_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K1_CFS-C-all", + "sub_path": "filament/Generic PET-CF @K1_CFS-C-all.json" + }, + { + "name": "Generic PET-CF @K2 Plus-all", + "sub_path": "filament/Generic PET-CF @K2 Plus-all.json" + }, + { + "name": "Generic PET-CF @K2 Pro-all", + "sub_path": "filament/Generic PET-CF @K2 Pro-all.json" + }, + { + "name": "Generic PETG @Creality", + "sub_path": "filament/Generic PETG @Creality.json" + }, + { + "name": "eSUN PET-Basic @K2 Plus-all", + "sub_path": "filament/eSUN PET-Basic @K2 Plus-all.json" + }, { "name": "CR-PLA @Ender-3 V4-all", "sub_path": "filament/CR-PLA @Ender-3 V4-all.json" @@ -2240,38 +2880,6 @@ "name": "CR-Silk @SPARKX i7-all", "sub_path": "filament/CR-Silk @SPARKX i7-all.json" }, - { - "name": "CR-TPU @K1 Max_CFS-C-all", - "sub_path": "filament/CR-TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "CR-TPU @K1C-all", - "sub_path": "filament/CR-TPU @K1C-all.json" - }, - { - "name": "CR-TPU @K1C_CFS-C-all", - "sub_path": "filament/CR-TPU @K1C_CFS-C-all.json" - }, - { - "name": "CR-TPU @K1_CFS-C-all", - "sub_path": "filament/CR-TPU @K1_CFS-C-all.json" - }, - { - "name": "CR-TPU @K2 Plus-all", - "sub_path": "filament/CR-TPU @K2 Plus-all.json" - }, - { - "name": "CR-TPU @K2 Pro-all", - "sub_path": "filament/CR-TPU @K2 Pro-all.json" - }, - { - "name": "CR-TPU @K2-all", - "sub_path": "filament/CR-TPU @K2-all.json" - }, - { - "name": "CR-TPU @SPARKX i7-all", - "sub_path": "filament/CR-TPU @SPARKX i7-all.json" - }, { "name": "CR-Wood @K1 Max_CFS-C-all", "sub_path": "filament/CR-Wood @K1 Max_CFS-C-all.json" @@ -2385,440 +2993,8 @@ "sub_path": "filament/Ender-PLA @SPARKX i7-all.json" }, { - "name": "Generic ABS @Ender-3 V4-all", - "sub_path": "filament/Generic ABS @Ender-3 V4-all.json" - }, - { - "name": "Generic ABS @Hi-all", - "sub_path": "filament/Generic ABS @Hi-all.json" - }, - { - "name": "Generic ABS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1 SE-all", - "sub_path": "filament/Generic ABS @K1 SE-all.json" - }, - { - "name": "Generic ABS @K1 SE_CFS-C-all", - "sub_path": "filament/Generic ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1C-all", - "sub_path": "filament/Generic ABS @K1C-all.json" - }, - { - "name": "Generic ABS @K1C_CFS-C-all", - "sub_path": "filament/Generic ABS @K1C_CFS-C-all.json" - }, - { - "name": "Generic ABS @K1_CFS-C-all", - "sub_path": "filament/Generic ABS @K1_CFS-C-all.json" - }, - { - "name": "Generic ABS @K2 Plus-all", - "sub_path": "filament/Generic ABS @K2 Plus-all.json" - }, - { - "name": "Generic ABS @K2 Pro-all", - "sub_path": "filament/Generic ABS @K2 Pro-all.json" - }, - { - "name": "Generic ABS @K2 SE-all", - "sub_path": "filament/Generic ABS @K2 SE-all.json" - }, - { - "name": "Generic ABS @K2-all", - "sub_path": "filament/Generic ABS @K2-all.json" - }, - { - "name": "Generic ASA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic ASA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1 SE-all", - "sub_path": "filament/Generic ASA @K1 SE-all.json" - }, - { - "name": "Generic ASA @K1 SE_CFS-C-all", - "sub_path": "filament/Generic ASA @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1C-all", - "sub_path": "filament/Generic ASA @K1C-all.json" - }, - { - "name": "Generic ASA @K1C_CFS-C-all", - "sub_path": "filament/Generic ASA @K1C_CFS-C-all.json" - }, - { - "name": "Generic ASA @K1_CFS-C-all", - "sub_path": "filament/Generic ASA @K1_CFS-C-all.json" - }, - { - "name": "Generic ASA @K2 Plus-all", - "sub_path": "filament/Generic ASA @K2 Plus-all.json" - }, - { - "name": "Generic ASA @K2 Pro-all", - "sub_path": "filament/Generic ASA @K2 Pro-all.json" - }, - { - "name": "Generic ASA @K2 SE-all", - "sub_path": "filament/Generic ASA @K2 SE-all.json" - }, - { - "name": "Generic ASA @K2-all", - "sub_path": "filament/Generic ASA @K2-all.json" - }, - { - "name": "Generic ASA-CF @K2 Plus-all", - "sub_path": "filament/Generic ASA-CF @K2 Plus-all.json" - }, - { - "name": "Generic BVOH @Hi-all", - "sub_path": "filament/Generic BVOH @Hi-all.json" - }, - { - "name": "Generic BVOH @K1 Max_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K1C-all", - "sub_path": "filament/Generic BVOH @K1C-all.json" - }, - { - "name": "Generic BVOH @K1C_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1C_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K1_CFS-C-all", - "sub_path": "filament/Generic BVOH @K1_CFS-C-all.json" - }, - { - "name": "Generic BVOH @K2 Plus-all", - "sub_path": "filament/Generic BVOH @K2 Plus-all.json" - }, - { - "name": "Generic BVOH @K2 Pro-all", - "sub_path": "filament/Generic BVOH @K2 Pro-all.json" - }, - { - "name": "Generic BVOH @K2-all", - "sub_path": "filament/Generic BVOH @K2-all.json" - }, - { - "name": "Generic HIPS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K1C-all", - "sub_path": "filament/Generic HIPS @K1C-all.json" - }, - { - "name": "Generic HIPS @K1C_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1C_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K1_CFS-C-all", - "sub_path": "filament/Generic HIPS @K1_CFS-C-all.json" - }, - { - "name": "Generic HIPS @K2 Plus-all", - "sub_path": "filament/Generic HIPS @K2 Plus-all.json" - }, - { - "name": "Generic PA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA @K1C-all", - "sub_path": "filament/Generic PA @K1C-all.json" - }, - { - "name": "Generic PA @K1C_CFS-C-all", - "sub_path": "filament/Generic PA @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA @K1_CFS-C-all", - "sub_path": "filament/Generic PA @K1_CFS-C-all.json" - }, - { - "name": "Generic PA @K2 Plus-all", - "sub_path": "filament/Generic PA @K2 Plus-all.json" - }, - { - "name": "Generic PA @K2 Pro-all", - "sub_path": "filament/Generic PA @K2 Pro-all.json" - }, - { - "name": "Generic PA @K2-all", - "sub_path": "filament/Generic PA @K2-all.json" - }, - { - "name": "Generic PA-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K1C-all", - "sub_path": "filament/Generic PA-CF @K1C-all.json" - }, - { - "name": "Generic PA-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PA-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PA-CF @K2 Plus-all", - "sub_path": "filament/Generic PA-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA12-CF @K2 Plus-all", - "sub_path": "filament/Generic PA12-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA6-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K1C-all", - "sub_path": "filament/Generic PA6-CF @K1C-all.json" - }, - { - "name": "Generic PA6-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PA6-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PA6-CF @K2 Plus-all", - "sub_path": "filament/Generic PA6-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA6-CF @K2 Pro-all", - "sub_path": "filament/Generic PA6-CF @K2 Pro-all.json" - }, - { - "name": "Generic PA6-GF @K2 Plus-all", - "sub_path": "filament/Generic PA6-GF @K2 Plus-all.json" - }, - { - "name": "Generic PA612-CF @K2 Plus-all", - "sub_path": "filament/Generic PA612-CF @K2 Plus-all.json" - }, - { - "name": "Generic PA612-CF @K2 Pro-all", - "sub_path": "filament/Generic PA612-CF @K2 Pro-all.json" - }, - { - "name": "Generic PAHT-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K1C-all", - "sub_path": "filament/Generic PAHT-CF @K1C-all.json" - }, - { - "name": "Generic PAHT-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PAHT-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PAHT-CF @K2 Plus-all", - "sub_path": "filament/Generic PAHT-CF @K2 Plus-all.json" - }, - { - "name": "Generic PAHT-CF @K2 Pro-all", - "sub_path": "filament/Generic PAHT-CF @K2 Pro-all.json" - }, - { - "name": "Generic PAHT-CF @K2-all", - "sub_path": "filament/Generic PAHT-CF @K2-all.json" - }, - { - "name": "Generic PC @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PC @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PC @K1C-all", - "sub_path": "filament/Generic PC @K1C-all.json" - }, - { - "name": "Generic PC @K1C_CFS-C-all", - "sub_path": "filament/Generic PC @K1C_CFS-C-all.json" - }, - { - "name": "Generic PC @K1_CFS-C-all", - "sub_path": "filament/Generic PC @K1_CFS-C-all.json" - }, - { - "name": "Generic PC @K2 Plus-all", - "sub_path": "filament/Generic PC @K2 Plus-all.json" - }, - { - "name": "Generic PC @K2 Pro-all", - "sub_path": "filament/Generic PC @K2 Pro-all.json" - }, - { - "name": "Generic PCTG @K2 Plus-all", - "sub_path": "filament/Generic PCTG @K2 Plus-all.json" - }, - { - "name": "Generic PET @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PET @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PET @K1C-all", - "sub_path": "filament/Generic PET @K1C-all.json" - }, - { - "name": "Generic PET @K1C_CFS-C-all", - "sub_path": "filament/Generic PET @K1C_CFS-C-all.json" - }, - { - "name": "Generic PET @K1_CFS-C-all", - "sub_path": "filament/Generic PET @K1_CFS-C-all.json" - }, - { - "name": "Generic PET @K2 Plus-all", - "sub_path": "filament/Generic PET @K2 Plus-all.json" - }, - { - "name": "Generic PET @K2 Pro-all", - "sub_path": "filament/Generic PET @K2 Pro-all.json" - }, - { - "name": "Generic PET @K2-all", - "sub_path": "filament/Generic PET @K2-all.json" - }, - { - "name": "Generic PET-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K1C-all", - "sub_path": "filament/Generic PET-CF @K1C-all.json" - }, - { - "name": "Generic PET-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PET-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PET-CF @K2 Plus-all", - "sub_path": "filament/Generic PET-CF @K2 Plus-all.json" - }, - { - "name": "Generic PET-CF @K2 Pro-all", - "sub_path": "filament/Generic PET-CF @K2 Pro-all.json" - }, - { - "name": "Generic PETG @Ender-3 V4-all", - "sub_path": "filament/Generic PETG @Ender-3 V4-all.json" - }, - { - "name": "Generic PETG @Hi-all", - "sub_path": "filament/Generic PETG @Hi-all.json" - }, - { - "name": "Generic PETG @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PETG @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1 SE-all", - "sub_path": "filament/Generic PETG @K1 SE-all.json" - }, - { - "name": "Generic PETG @K1 SE_CFS-C-all", - "sub_path": "filament/Generic PETG @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1C-all", - "sub_path": "filament/Generic PETG @K1C-all.json" - }, - { - "name": "Generic PETG @K1C_CFS-C-all", - "sub_path": "filament/Generic PETG @K1C_CFS-C-all.json" - }, - { - "name": "Generic PETG @K1_CFS-C-all", - "sub_path": "filament/Generic PETG @K1_CFS-C-all.json" - }, - { - "name": "Generic PETG @K2 Plus-all", - "sub_path": "filament/Generic PETG @K2 Plus-all.json" - }, - { - "name": "Generic PETG @K2 Pro-all", - "sub_path": "filament/Generic PETG @K2 Pro-all.json" - }, - { - "name": "Generic PETG @K2 SE-all", - "sub_path": "filament/Generic PETG @K2 SE-all.json" - }, - { - "name": "Generic PETG @K2-all", - "sub_path": "filament/Generic PETG @K2-all.json" - }, - { - "name": "Generic PETG @SPARKX i7-all", - "sub_path": "filament/Generic PETG @SPARKX i7-all.json" - }, - { - "name": "Generic PETG-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K1C-all", - "sub_path": "filament/Generic PETG-CF @K1C-all.json" - }, - { - "name": "Generic PETG-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PETG-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PETG-CF @K2 Plus-all", - "sub_path": "filament/Generic PETG-CF @K2 Plus-all.json" - }, - { - "name": "Generic PETG-CF @K2 Pro-all", - "sub_path": "filament/Generic PETG-CF @K2 Pro-all.json" - }, - { - "name": "Generic PETG-CF @K2-all", - "sub_path": "filament/Generic PETG-CF @K2-all.json" - }, - { - "name": "Generic PETG-CF @SPARKX i7-all", - "sub_path": "filament/Generic PETG-CF @SPARKX i7-all.json" - }, - { - "name": "Generic PETG-GF @K2 Plus-all", - "sub_path": "filament/Generic PETG-GF @K2 Plus-all.json" - }, - { - "name": "Generic PETG-GF @K2 Pro-all", - "sub_path": "filament/Generic PETG-GF @K2 Pro-all.json" - }, - { - "name": "Generic PETG-GF @K2-all", - "sub_path": "filament/Generic PETG-GF @K2-all.json" + "name": "Generic PLA @Creality", + "sub_path": "filament/Generic PLA @Creality.json" }, { "name": "Generic PLA @Ender-3 V4-all", @@ -2872,6 +3048,14 @@ "name": "Generic PLA @SPARKX i7-all", "sub_path": "filament/Generic PLA @SPARKX i7-all.json" }, + { + "name": "Generic PLA HF @Creality", + "sub_path": "filament/Generic PLA HF @Creality.json" + }, + { + "name": "Generic PLA-CF @Creality", + "sub_path": "filament/Generic PLA-CF @Creality.json" + }, { "name": "Generic PLA-CF @Ender-3 V4-all", "sub_path": "filament/Generic PLA-CF @Ender-3 V4-all.json" @@ -2973,173 +3157,13 @@ "sub_path": "filament/Generic PLA-Silk @SPARKX i7-all.json" }, { - "name": "Generic PP @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PP @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PP @K1C-all", - "sub_path": "filament/Generic PP @K1C-all.json" - }, - { - "name": "Generic PP @K1C_CFS-C-all", - "sub_path": "filament/Generic PP @K1C_CFS-C-all.json" - }, - { - "name": "Generic PP @K1_CFS-C-all", - "sub_path": "filament/Generic PP @K1_CFS-C-all.json" - }, - { - "name": "Generic PP @K2 Plus-all", - "sub_path": "filament/Generic PP @K2 Plus-all.json" - }, - { - "name": "Generic PP @K2 Pro-all", - "sub_path": "filament/Generic PP @K2 Pro-all.json" - }, - { - "name": "Generic PP @K2-all", - "sub_path": "filament/Generic PP @K2-all.json" - }, - { - "name": "Generic PP-CF @K2 Plus-all", - "sub_path": "filament/Generic PP-CF @K2 Plus-all.json" - }, - { - "name": "Generic PPS @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PPS @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PPS @K1C-all", - "sub_path": "filament/Generic PPS @K1C-all.json" - }, - { - "name": "Generic PPS @K1C_CFS-C-all", - "sub_path": "filament/Generic PPS @K1C_CFS-C-all.json" - }, - { - "name": "Generic PPS @K1_CFS-C-all", - "sub_path": "filament/Generic PPS @K1_CFS-C-all.json" - }, - { - "name": "Generic PPS @K2 Plus-all", - "sub_path": "filament/Generic PPS @K2 Plus-all.json" - }, - { - "name": "Generic PPS-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K1C-all", - "sub_path": "filament/Generic PPS-CF @K1C-all.json" - }, - { - "name": "Generic PPS-CF @K1C_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1C_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K1_CFS-C-all", - "sub_path": "filament/Generic PPS-CF @K1_CFS-C-all.json" - }, - { - "name": "Generic PPS-CF @K2 Plus-all", - "sub_path": "filament/Generic PPS-CF @K2 Plus-all.json" - }, - { - "name": "Generic PVA @Hi-all", - "sub_path": "filament/Generic PVA @Hi-all.json" - }, - { - "name": "Generic PVA @K1 Max_CFS-C-all", - "sub_path": "filament/Generic PVA @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic PVA @K1C-all", - "sub_path": "filament/Generic PVA @K1C-all.json" - }, - { - "name": "Generic PVA @K1C_CFS-C-all", - "sub_path": "filament/Generic PVA @K1C_CFS-C-all.json" - }, - { - "name": "Generic PVA @K1_CFS-C-all", - "sub_path": "filament/Generic PVA @K1_CFS-C-all.json" - }, - { - "name": "Generic PVA @K2 Plus-all", - "sub_path": "filament/Generic PVA @K2 Plus-all.json" - }, - { - "name": "Generic PVA @K2 Pro-all", - "sub_path": "filament/Generic PVA @K2 Pro-all.json" - }, - { - "name": "Generic PVA @K2-all", - "sub_path": "filament/Generic PVA @K2-all.json" - }, - { - "name": "Generic Support for PA @K2 Plus-all", - "sub_path": "filament/Generic Support for PA @K2 Plus-all.json" + "name": "Generic Speed PLA @Creality HF", + "sub_path": "filament/Generic Speed PLA @Creality HF.json" }, { "name": "Generic Support for PLA @K2 Plus-all", "sub_path": "filament/Generic Support for PLA @K2 Plus-all.json" }, - { - "name": "Generic TPU 64D @K2 Plus-all", - "sub_path": "filament/Generic TPU 64D @K2 Plus-all.json" - }, - { - "name": "Generic TPU 64D @SPARKX i7-all", - "sub_path": "filament/Generic TPU 64D @SPARKX i7-all.json" - }, - { - "name": "Generic TPU @Ender-3 V4-all", - "sub_path": "filament/Generic TPU @Ender-3 V4-all.json" - }, - { - "name": "Generic TPU @K1 Max_CFS-C-all", - "sub_path": "filament/Generic TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1 SE-all", - "sub_path": "filament/Generic TPU @K1 SE-all.json" - }, - { - "name": "Generic TPU @K1 SE_CFS-C-all", - "sub_path": "filament/Generic TPU @K1 SE_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1C-all", - "sub_path": "filament/Generic TPU @K1C-all.json" - }, - { - "name": "Generic TPU @K1C_CFS-C-all", - "sub_path": "filament/Generic TPU @K1C_CFS-C-all.json" - }, - { - "name": "Generic TPU @K1_CFS-C-all", - "sub_path": "filament/Generic TPU @K1_CFS-C-all.json" - }, - { - "name": "Generic TPU @K2 Plus-all", - "sub_path": "filament/Generic TPU @K2 Plus-all.json" - }, - { - "name": "Generic TPU @K2 Pro-all", - "sub_path": "filament/Generic TPU @K2 Pro-all.json" - }, - { - "name": "Generic TPU @K2 SE-all", - "sub_path": "filament/Generic TPU @K2 SE-all.json" - }, - { - "name": "Generic TPU @K2-all", - "sub_path": "filament/Generic TPU @K2-all.json" - }, - { - "name": "Generic TPU @SPARKX i7-all", - "sub_path": "filament/Generic TPU @SPARKX i7-all.json" - }, { "name": "HP Ultra PLA @K1 Max_CFS-C-all", "sub_path": "filament/HP Ultra PLA @K1 Max_CFS-C-all.json" @@ -3160,138 +3184,6 @@ "name": "HP Ultra PLA @K2 Plus-all", "sub_path": "filament/HP Ultra PLA @K2 Plus-all.json" }, - { - "name": "HP-ASA @K1 Max_CFS-C-all", - "sub_path": "filament/HP-ASA @K1 Max_CFS-C-all.json" - }, - { - "name": "HP-ASA @K1C-all", - "sub_path": "filament/HP-ASA @K1C-all.json" - }, - { - "name": "HP-ASA @K1C_CFS-C-all", - "sub_path": "filament/HP-ASA @K1C_CFS-C-all.json" - }, - { - "name": "HP-ASA @K1_CFS-C-all", - "sub_path": "filament/HP-ASA @K1_CFS-C-all.json" - }, - { - "name": "HP-ASA @K2 Plus-all", - "sub_path": "filament/HP-ASA @K2 Plus-all.json" - }, - { - "name": "HP-ASA @K2 Pro-all", - "sub_path": "filament/HP-ASA @K2 Pro-all.json" - }, - { - "name": "HP-ASA @K2 SE-all", - "sub_path": "filament/HP-ASA @K2 SE-all.json" - }, - { - "name": "HP-ASA @K2-all", - "sub_path": "filament/HP-ASA @K2-all.json" - }, - { - "name": "HP-TPU @Ender-3 V4-all", - "sub_path": "filament/HP-TPU @Ender-3 V4-all.json" - }, - { - "name": "HP-TPU @Hi-all", - "sub_path": "filament/HP-TPU @Hi-all.json" - }, - { - "name": "HP-TPU @K1 Max_CFS-C-all", - "sub_path": "filament/HP-TPU @K1 Max_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1 SE-all", - "sub_path": "filament/HP-TPU @K1 SE-all.json" - }, - { - "name": "HP-TPU @K1 SE_CFS-C-all", - "sub_path": "filament/HP-TPU @K1 SE_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1C-all", - "sub_path": "filament/HP-TPU @K1C-all.json" - }, - { - "name": "HP-TPU @K1C_CFS-C-all", - "sub_path": "filament/HP-TPU @K1C_CFS-C-all.json" - }, - { - "name": "HP-TPU @K1_CFS-C-all", - "sub_path": "filament/HP-TPU @K1_CFS-C-all.json" - }, - { - "name": "HP-TPU @K2 Plus-all", - "sub_path": "filament/HP-TPU @K2 Plus-all.json" - }, - { - "name": "HP-TPU @K2 Pro-all", - "sub_path": "filament/HP-TPU @K2 Pro-all.json" - }, - { - "name": "HP-TPU @K2 SE-all", - "sub_path": "filament/HP-TPU @K2 SE-all.json" - }, - { - "name": "HP-TPU @K2-all", - "sub_path": "filament/HP-TPU @K2-all.json" - }, - { - "name": "HP-TPU @SPARKX i7-all", - "sub_path": "filament/HP-TPU @SPARKX i7-all.json" - }, - { - "name": "Hyper ABS @Ender-3 V4-all", - "sub_path": "filament/Hyper ABS @Ender-3 V4-all.json" - }, - { - "name": "Hyper ABS @Hi-all", - "sub_path": "filament/Hyper ABS @Hi-all.json" - }, - { - "name": "Hyper ABS @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1 SE-all", - "sub_path": "filament/Hyper ABS @K1 SE-all.json" - }, - { - "name": "Hyper ABS @K1 SE_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1 SE_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1C-all", - "sub_path": "filament/Hyper ABS @K1C-all.json" - }, - { - "name": "Hyper ABS @K1C_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1C_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K1_CFS-C-all", - "sub_path": "filament/Hyper ABS @K1_CFS-C-all.json" - }, - { - "name": "Hyper ABS @K2 Plus-all", - "sub_path": "filament/Hyper ABS @K2 Plus-all.json" - }, - { - "name": "Hyper ABS @K2 Pro-all", - "sub_path": "filament/Hyper ABS @K2 Pro-all.json" - }, - { - "name": "Hyper ABS @K2 SE-all", - "sub_path": "filament/Hyper ABS @K2 SE-all.json" - }, - { - "name": "Hyper ABS @K2-all", - "sub_path": "filament/Hyper ABS @K2-all.json" - }, { "name": "Hyper L-W PLA @Hi-all", "sub_path": "filament/Hyper L-W PLA @Hi-all.json" @@ -3396,158 +3288,6 @@ "name": "Hyper Marble @SPARKX i7-all", "sub_path": "filament/Hyper Marble @SPARKX i7-all.json" }, - { - "name": "Hyper PA6-CF @K2 Plus-all", - "sub_path": "filament/Hyper PA6-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PA6-CF @K2 Pro-all", - "sub_path": "filament/Hyper PA6-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PA612-CF @K2 Plus-all", - "sub_path": "filament/Hyper PA612-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PA612-CF @K2 Pro-all", - "sub_path": "filament/Hyper PA612-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1C-all", - "sub_path": "filament/Hyper PAHT-CF @K1C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1C_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K1_CFS-C-all", - "sub_path": "filament/Hyper PAHT-CF @K1_CFS-C-all.json" - }, - { - "name": "Hyper PAHT-CF @K2 Plus-all", - "sub_path": "filament/Hyper PAHT-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PAHT-CF @K2 Pro-all", - "sub_path": "filament/Hyper PAHT-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PAHT-CF @K2-all", - "sub_path": "filament/Hyper PAHT-CF @K2-all.json" - }, - { - "name": "Hyper PC @K2 Plus-all", - "sub_path": "filament/Hyper PC @K2 Plus-all.json" - }, - { - "name": "Hyper PC @K2 Pro-all", - "sub_path": "filament/Hyper PC @K2 Pro-all.json" - }, - { - "name": "Hyper PETG @Ender-3 V4-all", - "sub_path": "filament/Hyper PETG @Ender-3 V4-all.json" - }, - { - "name": "Hyper PETG @Hi-all", - "sub_path": "filament/Hyper PETG @Hi-all.json" - }, - { - "name": "Hyper PETG @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1 SE-all", - "sub_path": "filament/Hyper PETG @K1 SE-all.json" - }, - { - "name": "Hyper PETG @K1 SE_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1 SE_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1C-all", - "sub_path": "filament/Hyper PETG @K1C-all.json" - }, - { - "name": "Hyper PETG @K1C_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K1_CFS-C-all", - "sub_path": "filament/Hyper PETG @K1_CFS-C-all.json" - }, - { - "name": "Hyper PETG @K2 Plus-all", - "sub_path": "filament/Hyper PETG @K2 Plus-all.json" - }, - { - "name": "Hyper PETG @K2 Pro-all", - "sub_path": "filament/Hyper PETG @K2 Pro-all.json" - }, - { - "name": "Hyper PETG @K2 SE-all", - "sub_path": "filament/Hyper PETG @K2 SE-all.json" - }, - { - "name": "Hyper PETG @K2-all", - "sub_path": "filament/Hyper PETG @K2-all.json" - }, - { - "name": "Hyper PETG @SPARKX i7-all", - "sub_path": "filament/Hyper PETG @SPARKX i7-all.json" - }, - { - "name": "Hyper PETG-CF @K1 Max_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1 Max_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K1C-all", - "sub_path": "filament/Hyper PETG-CF @K1C-all.json" - }, - { - "name": "Hyper PETG-CF @K1C_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1C_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K1_CFS-C-all", - "sub_path": "filament/Hyper PETG-CF @K1_CFS-C-all.json" - }, - { - "name": "Hyper PETG-CF @K2 Plus-all", - "sub_path": "filament/Hyper PETG-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PETG-CF @K2 Pro-all", - "sub_path": "filament/Hyper PETG-CF @K2 Pro-all.json" - }, - { - "name": "Hyper PETG-CF @K2-all", - "sub_path": "filament/Hyper PETG-CF @K2-all.json" - }, - { - "name": "Hyper PETG-CF @SPARKX i7-all", - "sub_path": "filament/Hyper PETG-CF @SPARKX i7-all.json" - }, - { - "name": "Hyper PETG-GF @K1C-all", - "sub_path": "filament/Hyper PETG-GF @K1C-all.json" - }, - { - "name": "Hyper PETG-GF @K2 Plus-all", - "sub_path": "filament/Hyper PETG-GF @K2 Plus-all.json" - }, - { - "name": "Hyper PETG-GF @K2 Pro-all", - "sub_path": "filament/Hyper PETG-GF @K2 Pro-all.json" - }, - { - "name": "Hyper PETG-GF @K2-all", - "sub_path": "filament/Hyper PETG-GF @K2-all.json" - }, { "name": "Hyper PLA @Ender-3 V4-all", "sub_path": "filament/Hyper PLA @Ender-3 V4-all.json" @@ -3652,14 +3392,6 @@ "name": "Hyper PLA-CF @SPARKX i7-all", "sub_path": "filament/Hyper PLA-CF @SPARKX i7-all.json" }, - { - "name": "Hyper PPA-CF @K2 Plus-all", - "sub_path": "filament/Hyper PPA-CF @K2 Plus-all.json" - }, - { - "name": "Hyper PPA-CF @K2 Pro-all", - "sub_path": "filament/Hyper PPA-CF @K2 Pro-all.json" - }, { "name": "Hyper Stardust @Hi-all", "sub_path": "filament/Hyper Stardust @Hi-all.json" @@ -3716,30 +3448,6 @@ "name": "PolySonic PLA Pro @K2 Plus-all", "sub_path": "filament/PolySonic PLA Pro @K2 Plus-all.json" }, - { - "name": "Soleyin Basic PETG @Hi-all", - "sub_path": "filament/Soleyin Basic PETG @Hi-all.json" - }, - { - "name": "Soleyin Basic PETG @K1C-all", - "sub_path": "filament/Soleyin Basic PETG @K1C-all.json" - }, - { - "name": "Soleyin Basic PETG @K2 Plus-all", - "sub_path": "filament/Soleyin Basic PETG @K2 Plus-all.json" - }, - { - "name": "Soleyin Basic PETG @K2 Pro-all", - "sub_path": "filament/Soleyin Basic PETG @K2 Pro-all.json" - }, - { - "name": "Soleyin Basic PETG @K2-all", - "sub_path": "filament/Soleyin Basic PETG @K2-all.json" - }, - { - "name": "Soleyin Basic PETG @SPARKX i7-all", - "sub_path": "filament/Soleyin Basic PETG @SPARKX i7-all.json" - }, { "name": "Soleyin Ultra PLA @Ender-3 V4-all", "sub_path": "filament/Soleyin Ultra PLA @Ender-3 V4-all.json" @@ -3784,30 +3492,6 @@ "name": "Soleyin Ultra PLA @SPARKX i7-all", "sub_path": "filament/Soleyin Ultra PLA @SPARKX i7-all.json" }, - { - "name": "eSUN ABS+ @K2 Plus-all", - "sub_path": "filament/eSUN ABS+ @K2 Plus-all.json" - }, - { - "name": "eSUN ASA+ @K2 Plus-all", - "sub_path": "filament/eSUN ASA+ @K2 Plus-all.json" - }, - { - "name": "eSUN PET-Basic @K2 Plus-all", - "sub_path": "filament/eSUN PET-Basic @K2 Plus-all.json" - }, - { - "name": "eSUN PETG @K2 Plus-all", - "sub_path": "filament/eSUN PETG @K2 Plus-all.json" - }, - { - "name": "eSUN PETG+HS @K2 Plus-all", - "sub_path": "filament/eSUN PETG+HS @K2 Plus-all.json" - }, - { - "name": "eSUN PETG-Basic @K2 Plus-all", - "sub_path": "filament/eSUN PETG-Basic @K2 Plus-all.json" - }, { "name": "eSUN PLA+ @K2 Plus-all", "sub_path": "filament/eSUN PLA+ @K2 Plus-all.json" @@ -3835,6 +3519,322 @@ { "name": "eSUN PLA-Silk @K2 Plus-all", "sub_path": "filament/eSUN PLA-Silk @K2 Plus-all.json" + }, + { + "name": "CR-TPU @K1 Max_CFS-C-all", + "sub_path": "filament/CR-TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "CR-TPU @K1C-all", + "sub_path": "filament/CR-TPU @K1C-all.json" + }, + { + "name": "CR-TPU @K1C_CFS-C-all", + "sub_path": "filament/CR-TPU @K1C_CFS-C-all.json" + }, + { + "name": "CR-TPU @K1_CFS-C-all", + "sub_path": "filament/CR-TPU @K1_CFS-C-all.json" + }, + { + "name": "CR-TPU @K2 Plus-all", + "sub_path": "filament/CR-TPU @K2 Plus-all.json" + }, + { + "name": "CR-TPU @K2 Pro-all", + "sub_path": "filament/CR-TPU @K2 Pro-all.json" + }, + { + "name": "CR-TPU @K2-all", + "sub_path": "filament/CR-TPU @K2-all.json" + }, + { + "name": "CR-TPU @SPARKX i7-all", + "sub_path": "filament/CR-TPU @SPARKX i7-all.json" + }, + { + "name": "Generic TPU 64D @K2 Plus-all", + "sub_path": "filament/Generic TPU 64D @K2 Plus-all.json" + }, + { + "name": "Generic TPU 64D @SPARKX i7-all", + "sub_path": "filament/Generic TPU 64D @SPARKX i7-all.json" + }, + { + "name": "Generic TPU @Creality", + "sub_path": "filament/Generic TPU @Creality.json" + }, + { + "name": "Generic TPU @Ender-3 V4-all", + "sub_path": "filament/Generic TPU @Ender-3 V4-all.json" + }, + { + "name": "Generic TPU @K1 Max_CFS-C-all", + "sub_path": "filament/Generic TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1 SE-all", + "sub_path": "filament/Generic TPU @K1 SE-all.json" + }, + { + "name": "Generic TPU @K1 SE_CFS-C-all", + "sub_path": "filament/Generic TPU @K1 SE_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1C-all", + "sub_path": "filament/Generic TPU @K1C-all.json" + }, + { + "name": "Generic TPU @K1C_CFS-C-all", + "sub_path": "filament/Generic TPU @K1C_CFS-C-all.json" + }, + { + "name": "Generic TPU @K1_CFS-C-all", + "sub_path": "filament/Generic TPU @K1_CFS-C-all.json" + }, + { + "name": "Generic TPU @K2 Plus-all", + "sub_path": "filament/Generic TPU @K2 Plus-all.json" + }, + { + "name": "Generic TPU @K2 Pro-all", + "sub_path": "filament/Generic TPU @K2 Pro-all.json" + }, + { + "name": "Generic TPU @K2 SE-all", + "sub_path": "filament/Generic TPU @K2 SE-all.json" + }, + { + "name": "Generic TPU @K2-all", + "sub_path": "filament/Generic TPU @K2-all.json" + }, + { + "name": "Generic TPU @SPARKX i7-all", + "sub_path": "filament/Generic TPU @SPARKX i7-all.json" + }, + { + "name": "HP-TPU @Ender-3 V4-all", + "sub_path": "filament/HP-TPU @Ender-3 V4-all.json" + }, + { + "name": "HP-TPU @Hi-all", + "sub_path": "filament/HP-TPU @Hi-all.json" + }, + { + "name": "HP-TPU @K1 Max_CFS-C-all", + "sub_path": "filament/HP-TPU @K1 Max_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1 SE-all", + "sub_path": "filament/HP-TPU @K1 SE-all.json" + }, + { + "name": "HP-TPU @K1 SE_CFS-C-all", + "sub_path": "filament/HP-TPU @K1 SE_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1C-all", + "sub_path": "filament/HP-TPU @K1C-all.json" + }, + { + "name": "HP-TPU @K1C_CFS-C-all", + "sub_path": "filament/HP-TPU @K1C_CFS-C-all.json" + }, + { + "name": "HP-TPU @K1_CFS-C-all", + "sub_path": "filament/HP-TPU @K1_CFS-C-all.json" + }, + { + "name": "HP-TPU @K2 Plus-all", + "sub_path": "filament/HP-TPU @K2 Plus-all.json" + }, + { + "name": "HP-TPU @K2 Pro-all", + "sub_path": "filament/HP-TPU @K2 Pro-all.json" + }, + { + "name": "HP-TPU @K2 SE-all", + "sub_path": "filament/HP-TPU @K2 SE-all.json" + }, + { + "name": "HP-TPU @K2-all", + "sub_path": "filament/HP-TPU @K2-all.json" + }, + { + "name": "HP-TPU @SPARKX i7-all", + "sub_path": "filament/HP-TPU @SPARKX i7-all.json" + }, + { + "name": "Generic ABS @Creality Ender-3V3-all", + "sub_path": "filament/Generic ABS @Creality Ender-3V3-all.json" + }, + { + "name": "Generic ABS @Creality Hi-all", + "sub_path": "filament/Generic ABS @Creality Hi-all.json" + }, + { + "name": "Generic ABS @Creality K1-all", + "sub_path": "filament/Generic ABS @Creality K1-all.json" + }, + { + "name": "Generic ABS @Creality K2-all", + "sub_path": "filament/Generic ABS @Creality K2-all.json" + }, + { + "name": "Generic ASA @Creality Ender-3V3-all", + "sub_path": "filament/Generic ASA @Creality Ender-3V3-all.json" + }, + { + "name": "Generic ASA @Creality Hi-all", + "sub_path": "filament/Generic ASA @Creality Hi-all.json" + }, + { + "name": "Generic ASA @Creality K1-all", + "sub_path": "filament/Generic ASA @Creality K1-all.json" + }, + { + "name": "Generic ASA @Creality K2-all", + "sub_path": "filament/Generic ASA @Creality K2-all.json" + }, + { + "name": "Generic PA-CF @Creality Ender-3V3-all", + "sub_path": "filament/Generic PA-CF @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PA-CF @Creality K1-all", + "sub_path": "filament/Generic PA-CF @Creality K1-all.json" + }, + { + "name": "Generic PA-CF @Creality K2-all", + "sub_path": "filament/Generic PA-CF @Creality K2-all.json" + }, + { + "name": "Generic PC @Creality K1-all", + "sub_path": "filament/Generic PC @Creality K1-all.json" + }, + { + "name": "Generic PETG @Creality Ender-3V3-all", + "sub_path": "filament/Generic PETG @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PETG @Creality Hi-all", + "sub_path": "filament/Generic PETG @Creality Hi-all.json" + }, + { + "name": "Generic PETG @Creality K1-all", + "sub_path": "filament/Generic PETG @Creality K1-all.json" + }, + { + "name": "Generic PETG @Creality K2-all", + "sub_path": "filament/Generic PETG @Creality K2-all.json" + }, + { + "name": "Generic PLA @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA @Creality Hi-all", + "sub_path": "filament/Generic PLA @Creality Hi-all.json" + }, + { + "name": "Generic PLA @Creality K1-all", + "sub_path": "filament/Generic PLA @Creality K1-all.json" + }, + { + "name": "Generic PLA @Creality K2-all", + "sub_path": "filament/Generic PLA @Creality K2-all.json" + }, + { + "name": "Generic PLA-CF @Creality Hi-all", + "sub_path": "filament/Generic PLA-CF @Creality Hi-all.json" + }, + { + "name": "Generic PLA-CF @Creality K1-all", + "sub_path": "filament/Generic PLA-CF @Creality K1-all.json" + }, + { + "name": "Generic PLA-CF @Creality K2-all", + "sub_path": "filament/Generic PLA-CF @Creality K2-all.json" + }, + { + "name": "Generic TPU @Creality Ender-3V3-all", + "sub_path": "filament/Generic TPU @Creality Ender-3V3-all.json" + }, + { + "name": "Generic TPU @Creality Hi-all", + "sub_path": "filament/Generic TPU @Creality Hi-all.json" + }, + { + "name": "Generic TPU @Creality K1-all", + "sub_path": "filament/Generic TPU @Creality K1-all.json" + }, + { + "name": "Generic TPU @Creality K2-all", + "sub_path": "filament/Generic TPU @Creality K2-all.json" + }, + { + "name": "Generic ASA-CF @Creality Hi-all", + "sub_path": "filament/Generic ASA-CF @Creality Hi-all.json" + }, + { + "name": "Generic PETG-CF @Creality Hi-all", + "sub_path": "filament/Generic PETG-CF @Creality Hi-all.json" + }, + { + "name": "Generic PLA High Speed @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA High Speed @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA Matte @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Matte @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA Silk @Creality Ender-3V3-all", + "sub_path": "filament/Generic PLA Silk @Creality Ender-3V3-all.json" + }, + { + "name": "Generic PLA High Speed @Creality Hi-all", + "sub_path": "filament/Generic PLA High Speed @Creality Hi-all.json" + }, + { + "name": "Generic PLA Matte @Creality Hi-all", + "sub_path": "filament/Generic PLA Matte @Creality Hi-all.json" + }, + { + "name": "Generic PLA Silk @Creality Hi-all", + "sub_path": "filament/Generic PLA Silk @Creality Hi-all.json" + }, + { + "name": "Generic PLA Wood @Creality Hi-all", + "sub_path": "filament/Generic PLA Wood @Creality Hi-all.json" + }, + { + "name": "Generic PLA High Speed @Creality K1-all", + "sub_path": "filament/Generic PLA High Speed @Creality K1-all.json" + }, + { + "name": "Generic PLA Matte @Creality K1-all", + "sub_path": "filament/Generic PLA Matte @Creality K1-all.json" + }, + { + "name": "Generic PLA Silk @Creality K1-all", + "sub_path": "filament/Generic PLA Silk @Creality K1-all.json" + }, + { + "name": "Generic PLA High Speed @Creality K2-all", + "sub_path": "filament/Generic PLA High Speed @Creality K2-all.json" + }, + { + "name": "Generic PLA Matte @Creality K2-all", + "sub_path": "filament/Generic PLA Matte @Creality K2-all.json" + }, + { + "name": "Generic PLA Silk @Creality K2-all", + "sub_path": "filament/Generic PLA Silk @Creality K2-all.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" } ], "machine_list": [ @@ -4122,10 +4122,6 @@ "name": "Creality K1 (0.8 nozzle)", "sub_path": "machine/Creality K1 (0.8 nozzle).json" }, - { - "name": "Creality K1_CFS-C 0.4 nozzle", - "sub_path": "machine/Creality K1_CFS-C 0.4 nozzle.json" - }, { "name": "Creality K1 Max (0.4 nozzle)", "sub_path": "machine/Creality K1 Max (0.4 nozzle).json" @@ -4174,6 +4170,10 @@ "name": "Creality K1C_CFS-C 0.4 nozzle", "sub_path": "machine/Creality K1C_CFS-C 0.4 nozzle.json" }, + { + "name": "Creality K1_CFS-C 0.4 nozzle", + "sub_path": "machine/Creality K1_CFS-C 0.4 nozzle.json" + }, { "name": "Creality K2 0.2 nozzle", "sub_path": "machine/Creality K2 0.2 nozzle.json" @@ -4226,10 +4226,6 @@ "name": "Creality K2 SE 0.4 nozzle", "sub_path": "machine/Creality K2 SE 0.4 nozzle.json" }, - { - "name": "Creality Sermoon V1 0.4 nozzle", - "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" - }, { "name": "Creality SPARKX i7 0.2 nozzle", "sub_path": "machine/Creality SPARKX i7 0.2 nozzle.json" @@ -4245,6 +4241,10 @@ { "name": "Creality SPARKX i7 0.8 nozzle", "sub_path": "machine/Creality SPARKX i7 0.8 nozzle.json" + }, + { + "name": "Creality Sermoon V1 0.4 nozzle", + "sub_path": "machine/Creality Sermoon V1 0.4 nozzle.json" } ] -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json index 33b6514886..fe03c214e1 100644 --- a/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @Ender-3 V4-all.json @@ -1,177 +1,175 @@ { - "type": "filament", - "name": "CR-ABS @Ender-3 V4-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "3MchJTc47Au6MkZ0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", - "pressure_advance": "0.024", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @Ender-3 V4-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "3MchJTc47Au6MkZ0", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", + "pressure_advance": "0.024", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json deleted file mode 100644 index 53d18bfeda..0000000000 --- a/resources/profiles/Creality/filament/CR-ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "type": "filament", - "name": "CR-ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "iCeI2obXsgQdrmmd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "30" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "60" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-ABS @Hi-all.json b/resources/profiles/Creality/filament/CR-ABS @Hi-all.json index e4620945d8..98cb5ccd2a 100644 --- a/resources/profiles/Creality/filament/CR-ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @Hi-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "CR-ABS @Hi-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "OkztCpBxncDuPVQP", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @Hi-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "OkztCpBxncDuPVQP", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json index 070110cef4..9ce194cf28 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 Max_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-ABS @K1 Max_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "IuBXEntaBaPVFQXh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1 Max_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "IuBXEntaBaPVFQXh", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json index 1d7cd3dade..c463f498c8 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 SE-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "CR-ABS @K1 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "yhGkKM6yZnFFn8IW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "yhGkKM6yZnFFn8IW", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json index f6ea93b388..f482eba998 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1 SE_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "CR-ABS @K1 SE_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "ERk97K6VotgHJfWy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1 SE_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "ERk97K6VotgHJfWy", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1C-all.json index d592d9d18f..b61bdae377 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-ABS @K1C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "HaRbfdv0e9gKF3Qp", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "HaRbfdv0e9gKF3Qp", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json index a0451ea1ba..8707ea2a53 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1C_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-ABS @K1C_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "jhNERXYu8aq28Ppb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1C_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "jhNERXYu8aq28Ppb", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json index 6f3bbe777e..73b8b024d1 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K1_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-ABS @K1_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "3irrf86tjxODkbIf", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K1_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "3irrf86tjxODkbIf", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json index 55a2fe9a80..10bdfa06e1 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-ABS @K2 Plus-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "5CD3YjRfabJ1lA6a", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K2 Plus-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "5CD3YjRfabJ1lA6a", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json index cea39dba0e..ea99164d21 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 Pro-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "CR-ABS @K2 Pro-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "QuBAuyBqoGyFHMpP", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K2 Pro-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "QuBAuyBqoGyFHMpP", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json b/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json index 8edabb85be..07b9274321 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2 SE-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "CR-ABS @K2 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "8hrvutX54fd4gUGn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K2 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "8hrvutX54fd4gUGn", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-ABS @K2-all.json b/resources/profiles/Creality/filament/CR-ABS @K2-all.json index ec6591b352..2ffd9662f3 100644 --- a/resources/profiles/Creality/filament/CR-ABS @K2-all.json +++ b/resources/profiles/Creality/filament/CR-ABS @K2-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "CR-ABS @K2-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "rvItkEWAJNGXJrVF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle" - ], - "filament_id": "07001" -} \ No newline at end of file + "type": "filament", + "name": "CR-ABS @K2-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "rvItkEWAJNGXJrVF", + "filament_id": "OFGwZmgS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json deleted file mode 100644 index e4e5cad0e8..0000000000 --- a/resources/profiles/Creality/filament/CR-Nylon @Ender-5 Max-all.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "type": "filament", - "name": "CR-Nylon @Ender-5 Max-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "HHnHotIUIBzTdckU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.9" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "5" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json index cc25eecbca..30c7842edb 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1 Max_CFS-C-all.json @@ -1,191 +1,189 @@ { - "type": "filament", - "name": "CR-Nylon @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "vRp7fYNhHQuLUArq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "52" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "11001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Nylon @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "vRp7fYNhHQuLUArq", + "filament_id": "OFvLppPU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "52" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json index 9782134aaf..a95d8b9b3b 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1C-all.json @@ -1,192 +1,190 @@ { - "type": "filament", - "name": "CR-Nylon @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "IAXnmE8e2ADhcMZG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "52" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "11001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Nylon @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "IAXnmE8e2ADhcMZG", + "filament_id": "OFvLppPU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "52" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json index 8c1c7a27c6..71b5cceb41 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1C_CFS-C-all.json @@ -1,192 +1,190 @@ { - "type": "filament", - "name": "CR-Nylon @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "vIpGcKrZM6vbICRT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "52" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "11001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Nylon @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "vIpGcKrZM6vbICRT", + "filament_id": "OFvLppPU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "52" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json index 7be6522dd1..e3b4dc6f21 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K1_CFS-C-all.json @@ -1,192 +1,190 @@ { - "type": "filament", - "name": "CR-Nylon @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "eb1T3avlK6EzZ5NT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "52" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "11001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Nylon @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "eb1T3avlK6EzZ5NT", + "filament_id": "OFvLppPU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "52" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json index 7466949b1a..ba322bd8c7 100644 --- a/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Nylon @K2 Plus-all.json @@ -1,198 +1,196 @@ { - "type": "filament", - "name": "CR-Nylon @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "LLuS5zOOxSWnZoyb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "52" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "16" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.064", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "11001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Nylon @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "LLuS5zOOxSWnZoyb", + "filament_id": "OFvLppPU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "52" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "16" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.064", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json index ded5f2b093..82d0370573 100644 --- a/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "CR-PETG @Ender-3 V4-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "ZucTDurgG1yttTTE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,230],[1.0,230],[1.2,250]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @Ender-3 V4-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "ZucTDurgG1yttTTE", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,230],[1.0,230],[1.2,250]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json deleted file mode 100644 index 0514484af8..0000000000 --- a/resources/profiles/Creality/filament/CR-PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "CR-PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "jMfevCqhjSPahBHJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,220],[5.0,240],[10.0,250]]", - "pressure_advance": "0.05", - "filament_id": "06101", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PETG @Hi-all.json b/resources/profiles/Creality/filament/CR-PETG @Hi-all.json index 6e8dde0750..6a37e9a7e3 100644 --- a/resources/profiles/Creality/filament/CR-PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @Hi-all.json @@ -1,152 +1,150 @@ { - "type": "filament", - "name": "CR-PETG @Hi-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "DGnnBUZoF5EJdo8y", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[4.0,225],[7.0,230],[10.0,240]]", - "pressure_advance": "0.072", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.2 nozzle", - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle", - "Creality Hi 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @Hi-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "DGnnBUZoF5EJdo8y", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[4.0,225],[7.0,230],[10.0,240]]", + "pressure_advance": "0.072", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.2 nozzle", + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle", + "Creality Hi 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json index 65165f30ea..873e8c8174 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 Max_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PETG @K1 Max_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "7zmI8UK4VCbkrHth", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", - "pressure_advance": "0.078", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1 Max_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "7zmI8UK4VCbkrHth", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", + "pressure_advance": "0.078", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json index fa3c9922d0..18de1bb62f 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 SE-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "CR-PETG @K1 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "oR9hRU1vmcDXuEdN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "85" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,250]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "oR9hRU1vmcDXuEdN", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "85" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,250]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json index a388228d10..4732ece2ae 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1 SE_CFS-C-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "CR-PETG @K1 SE_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "O5oj2seoJOMoRQeH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "85" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,250]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1 SE_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "O5oj2seoJOMoRQeH", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "85" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,250]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1C-all.json index 57482693fa..6bb86df975 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PETG @K1C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "TCoincnHkpTkdbgr", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", - "pressure_advance": "0.062", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "TCoincnHkpTkdbgr", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", + "pressure_advance": "0.062", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json index 222a850feb..537ab817e9 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1C_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "CR-PETG @K1C_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "tEizEoyTjR2jsMjb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", - "pressure_advance": "0.062", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1C_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "tEizEoyTjR2jsMjb", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", + "pressure_advance": "0.062", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json index 38be118853..936ec3ba8c 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K1_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PETG @K1_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "GyuPdDlFigxqfNdh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "1" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", - "pressure_advance": "0.072", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K1_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "GyuPdDlFigxqfNdh", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "1" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220], [1.2,220], [1.3,250]]", + "pressure_advance": "0.072", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json index 0c9fcef567..4a9e23750b 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 Plus-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "CR-PETG @K2 Plus-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "L9YgZiTMEbGueIUB", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K2 Plus-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "L9YgZiTMEbGueIUB", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json index ec8cb70475..a7a5eec9be 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 Pro-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "CR-PETG @K2 Pro-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "cpZpusYQklJHwF7C", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K2 Pro-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "cpZpusYQklJHwF7C", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json b/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json index e03a34d210..6c2a833714 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2 SE-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PETG @K2 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "wszfgAr4wGMhfak4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K2 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "wszfgAr4wGMhfak4", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @K2-all.json b/resources/profiles/Creality/filament/CR-PETG @K2-all.json index 3c328bf7ef..c53735d1d4 100644 --- a/resources/profiles/Creality/filament/CR-PETG @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @K2-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "CR-PETG @K2-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "twFraQUSFLNuYrQd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @K2-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "twFraQUSFLNuYrQd", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json index 6bbbc65e9f..a5ae82bc50 100644 --- a/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PETG @SPARKX i7-all.json @@ -1,139 +1,137 @@ { - "type": "filament", - "name": "CR-PETG @SPARKX i7-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "RFW04K7trMKi3cYq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[1.0,205],[1.2,220]]", - "pressure_advance": "0.3", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.2 nozzle", - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "06001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PETG @SPARKX i7-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "RFW04K7trMKi3cYq", + "filament_id": "OF3WQaKK", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[1.0,205],[1.2,220]]", + "pressure_advance": "0.3", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.2 nozzle", + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json index 175f304ef7..5b3868f3be 100644 --- a/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "CR-PLA @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "hy5Zpwpkx46UQlFy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "hy5Zpwpkx46UQlFy", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json deleted file mode 100644 index 68fa08da55..0000000000 --- a/resources/profiles/Creality/filament/CR-PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "type": "filament", - "name": "CR-PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "sU0HCPjQoOLHPmPc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "1", - "material_flow_temp_graph": "[[0.5,190],[1.0,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-PLA @Hi-all.json b/resources/profiles/Creality/filament/CR-PLA @Hi-all.json index dd543fda9a..89c8609ea5 100644 --- a/resources/profiles/Creality/filament/CR-PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @Hi-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "CR-PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "2g9MEZ7yniK64tVA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.2 nozzle", - "Creality Hi 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "2g9MEZ7yniK64tVA", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.2 nozzle", + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json index 6fd4e736e7..b606e1ba81 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 Max_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "rkd11EbVutxkB4Yy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "rkd11EbVutxkB4Yy", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json index 0b31dd3075..37191e5b4b 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 SE-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "CR-PLA @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dFig6q8KlgjU4stK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "70%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "dFig6q8KlgjU4stK", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json index 3abde8df57..cf13c1845e 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1 SE_CFS-C-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "CR-PLA @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "2sTv8VK78NAkgv22", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "70%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "2sTv8VK78NAkgv22", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1C-all.json index d98582cf9c..e5f40ce73b 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "3chsaV1fugQudOqC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "3chsaV1fugQudOqC", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json index e8a7ab0ad6..8e3aff7029 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1C_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Xu46QkbGLqe9nSxT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Xu46QkbGLqe9nSxT", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json index 722c4978c2..a9bb576d9a 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K1_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dDLVUGD8AqxJuSb2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "dDLVUGD8AqxJuSb2", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json index 172d39a11b..48d6542c23 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 Plus-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "CR-PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "FsNcay7aLjZKGih8", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "FsNcay7aLjZKGih8", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json index fff8741bec..c97cda56fa 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 Pro-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yXWDlqzGqqIg2tbx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "yXWDlqzGqqIg2tbx", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json b/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json index cbb2931fbd..c3fe4a1f36 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2 SE-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "CR-PLA @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "j8Iaz6y4iiOw2I5n", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "j8Iaz6y4iiOw2I5n", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @K2-all.json b/resources/profiles/Creality/filament/CR-PLA @K2-all.json index 75c085137d..fbcb4cfb49 100644 --- a/resources/profiles/Creality/filament/CR-PLA @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @K2-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "7f0r4XOgIhVG2OPH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "7f0r4XOgIhVG2OPH", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json index 4727ca270a..a4cbf4f3f9 100644 --- a/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA @SPARKX i7-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "CR-PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "G1KqKgylj61LrtiS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[1.2,220]]", - "pressure_advance": "0.032", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "04001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "G1KqKgylj61LrtiS", + "filament_id": "OFp4ETDP", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[1.2,220]]", + "pressure_advance": "0.032", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json index 18f928308c..09421321fe 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1 Max_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Carbon @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "VzHBAqKC0WWSEga0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "13001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Carbon @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "VzHBAqKC0WWSEga0", + "filament_id": "OFrM4hdm", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json index 071cdb3945..ec102d33a4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Carbon @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "2ve6KpyKswcbHPJi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "13001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Carbon @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "2ve6KpyKswcbHPJi", + "filament_id": "OFrM4hdm", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json index 85bdd7bb41..1b363a0c68 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1C_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Carbon @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "MbgilTqqbN9QZvtq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "13001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Carbon @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "MbgilTqqbN9QZvtq", + "filament_id": "OFrM4hdm", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json index 5118f3b015..4847bc1620 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K1_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Carbon @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "e5ACy8cJonV9q1pe", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "13001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Carbon @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "e5ACy8cJonV9q1pe", + "filament_id": "OFrM4hdm", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json index f3efa4d2ac..3a8c3cf1ca 100644 --- a/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Carbon @K2 Plus-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Carbon @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ua3BCvZtfYAgH7nN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "13001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Carbon @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ua3BCvZtfYAgH7nN", + "filament_id": "OFrM4hdm", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json index b84b651e68..761fd855b4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1 Max_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "njQE4bpSlZHrCqrg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "njQE4bpSlZHrCqrg", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json index 12834e2b63..4bc597182f 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "eCuLoIdPsTEiLxZB", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "eCuLoIdPsTEiLxZB", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json index 4944e61627..384e74eb75 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1C_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "5vTZFUcLv6DL06Nr", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "5vTZFUcLv6DL06Nr", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json index 3c288db1e6..ae580ced18 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K1_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "HDRiQNtbO8jZR6tW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "HDRiQNtbO8jZR6tW", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json index cb2e84fa5b..fc0b3e724a 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Plus-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gKRZWt2XVBGFoQ6t", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "gKRZWt2XVBGFoQ6t", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json index c320654960..b54f3e6745 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2 Pro-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yGc6fpse4MyUXWXa", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "yGc6fpse4MyUXWXa", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json index f0d35f90da..179e2c9421 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @K2-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Fluo @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "BJwFbpJ8baT3vyEU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "BJwFbpJ8baT3vyEU", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json index b2cf047a8a..69dd52a125 100644 --- a/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Fluo @SPARKX i7-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Fluo @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "0xviyTPYLAxrpVGK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "15001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Fluo @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "0xviyTPYLAxrpVGK", + "filament_id": "OFgpQwkk", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json index f341ed0ee4..2ec7cab65d 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @Ender-3 V4-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "CR-PLA Matte @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "0edq8qWqKaGPZc1t", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "0edq8qWqKaGPZc1t", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json index 5f94d3a21b..c18a9dc8c4 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1 Max_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Matte @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ZFXelUe4vcYytBIg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ZFXelUe4vcYytBIg", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json index 68c02594da..cde0fa3c9b 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Matte @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "mQDyxAEILwLuFWAw", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "mQDyxAEILwLuFWAw", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json index c19a940780..4773356cc7 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1C_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Matte @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "38NjxetvurFFPPEy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "38NjxetvurFFPPEy", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json index 20477243e6..76654b9172 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K1_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Matte @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "KFNeCYp4ck8diZRG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "KFNeCYp4ck8diZRG", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.1,190], [1.5,190], [1.6,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json index e62afb4ad3..ae46802d71 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-PLA Matte @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "WXOXHiNp1tvh4Y5T", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "WXOXHiNp1tvh4Y5T", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json index 62ab04db20..adc321314c 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2 Pro-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Matte @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "LNN1w66GDTFxTCMq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "LNN1w66GDTFxTCMq", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json index 0b5efb1f62..9569a1ce13 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @K2-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "CR-PLA Matte @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "nk9dxS7bcChQ26pZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "nk9dxS7bcChQ26pZ", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json index 23fd3380c4..7ada0c085a 100644 --- a/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-PLA Matte @SPARKX i7-all.json @@ -1,170 +1,168 @@ { - "type": "filament", - "name": "CR-PLA Matte @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NNx1aU5NjcyeKPec", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.23", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.2 nozzle", - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "14001" -} \ No newline at end of file + "type": "filament", + "name": "CR-PLA Matte @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "NNx1aU5NjcyeKPec", + "filament_id": "OFM0xjBG", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", + "pressure_advance": "0.23", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.2 nozzle", + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json b/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json index 0b6c2422b3..9f62ca07bc 100644 --- a/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "CR-Silk @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "96xBgfns6PJljRBO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "96xBgfns6PJljRBO", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json b/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json deleted file mode 100644 index 41047d385c..0000000000 --- a/resources/profiles/Creality/filament/CR-Silk @Ender-5 Max-all.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "type": "filament", - "name": "CR-Silk @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "vFgKdtdiuqqrL9rk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/CR-Silk @Hi-all.json b/resources/profiles/Creality/filament/CR-Silk @Hi-all.json index 838ffa205c..2d811b10f5 100644 --- a/resources/profiles/Creality/filament/CR-Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @Hi-all.json @@ -1,145 +1,143 @@ { - "type": "filament", - "name": "CR-Silk @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "tCMjuQOR2yj66jPW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", - "pressure_advance": "0.026", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "tCMjuQOR2yj66jPW", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", + "pressure_advance": "0.026", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json index ef4503c7f0..23e8a0762d 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 Max_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Silk @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ljLSobQ4S3BAkBNk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ljLSobQ4S3BAkBNk", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json index 6261b0607b..04624cfc25 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 SE-all.json @@ -1,147 +1,145 @@ { - "type": "filament", - "name": "CR-Silk @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "jHEDkgKkZAy21Ali", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "jHEDkgKkZAy21Ali", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json index a5e4bf6b40..0755c45631 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1 SE_CFS-C-all.json @@ -1,147 +1,145 @@ { - "type": "filament", - "name": "CR-Silk @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GbHXYf8i8km1Ox5r", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GbHXYf8i8km1Ox5r", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1C-all.json index ce4e3be3ee..ea9fad8877 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1C-all.json @@ -1,162 +1,160 @@ { - "type": "filament", - "name": "CR-Silk @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "I4LxzBtRIwagIQUJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "I4LxzBtRIwagIQUJ", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json index c44216537a..6150166773 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1C_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Silk @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "JMpBkMELewelYBDU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "JMpBkMELewelYBDU", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json index 164cadd6cd..47b4468887 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K1_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Silk @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dVxmGRP36D3lampi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "dVxmGRP36D3lampi", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json index 83927ba13b..d1d211884e 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 Plus-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "CR-Silk @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "8mKZzYS3ykGEMqjH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "8mKZzYS3ykGEMqjH", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json index 401753cdbd..75c276d993 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 Pro-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "CR-Silk @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "KBVdrZA7bYRpGztN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "KBVdrZA7bYRpGztN", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json b/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json index 2151efcec7..b598e9df65 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2 SE-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "CR-Silk @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "0bvCEevcKO0uubLD", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,190],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "0bvCEevcKO0uubLD", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[1.2,190],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @K2-all.json b/resources/profiles/Creality/filament/CR-Silk @K2-all.json index dc5301be79..49486812c4 100644 --- a/resources/profiles/Creality/filament/CR-Silk @K2-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @K2-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "CR-Silk @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "MXAd3uHJUNHLFA4i", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "MXAd3uHJUNHLFA4i", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json index 3e62f7680c..e3c2ae9f62 100644 --- a/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-Silk @SPARKX i7-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "CR-Silk @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "A30ICaD1Lz0cWkEH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.13", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.2 nozzle", - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "05001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Silk @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "A30ICaD1Lz0cWkEH", + "filament_id": "OF3OMgrI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", + "pressure_advance": "0.13", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.2 nozzle", + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json index d27ed62681..8e5ab63281 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1 Max_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "CR-TPU @K1 Max_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "KkOkqdyd9DekhhNx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K1 Max_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "KkOkqdyd9DekhhNx", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K1C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1C-all.json index 490e293ab9..5740a6c8fb 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "CR-TPU @K1C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "7IDbEU7GXQfJbFQz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K1C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "7IDbEU7GXQfJbFQz", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json index 8186e5a558..60f72ca75e 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1C_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "CR-TPU @K1C_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "m33d4hGzs5ZC1faF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K1C_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "m33d4hGzs5ZC1faF", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json index 34343ecff5..526fc9daad 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K1_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "CR-TPU @K1_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "kt3VziPx3umU4Q5R", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K1_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "kt3VziPx3umU4Q5R", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json index bcc65299d1..c68afd06dc 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2 Plus-all.json @@ -1,170 +1,168 @@ { - "type": "filament", - "name": "CR-TPU @K2 Plus-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "KioNr9VhBOnLMtnm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.02" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.34", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K2 Plus-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "KioNr9VhBOnLMtnm", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.34", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json index abd8207f32..5e1ca5fef1 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2 Pro-all.json @@ -1,175 +1,173 @@ { - "type": "filament", - "name": "CR-TPU @K2 Pro-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "8akFfk1Evt6aKtRL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "24" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.02" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.34", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K2 Pro-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "8akFfk1Evt6aKtRL", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "24" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.34", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @K2-all.json b/resources/profiles/Creality/filament/CR-TPU @K2-all.json index 9f0e96c015..5ba623ff46 100644 --- a/resources/profiles/Creality/filament/CR-TPU @K2-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @K2-all.json @@ -1,175 +1,173 @@ { - "type": "filament", - "name": "CR-TPU @K2-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "ZXIOQXEGhsUn2x8j", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "24" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @K2-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "ZXIOQXEGhsUn2x8j", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "24" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json index 7181fce5e0..ca5cb0fbfc 100644 --- a/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/CR-TPU @SPARKX i7-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "CR-TPU @SPARKX i7-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "mCfhjDYJc8oh3k2X", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.12" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "1.8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.34", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "16001" -} \ No newline at end of file + "type": "filament", + "name": "CR-TPU @SPARKX i7-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "mCfhjDYJc8oh3k2X", + "filament_id": "OFG2RkhN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.12" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.34", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json index 54c9f99ea0..3b695ef493 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1 Max_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "CR-Wood @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "vIzshYLqN5j6pkDn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "17001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Wood @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "vIzshYLqN5j6pkDn", + "filament_id": "OFGxC8gB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Wood @K1C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1C-all.json index 7def3b58f7..ee30ee419d 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Wood @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zSfzwta4F6MAXAn7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "17001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Wood @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zSfzwta4F6MAXAn7", + "filament_id": "OFGxC8gB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json index 59364bfce5..a36e476dd4 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1C_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Wood @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "5n4iNCttBHmnXKaT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "17001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Wood @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "5n4iNCttBHmnXKaT", + "filament_id": "OFGxC8gB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json b/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json index ce6631705f..eac27b5a22 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K1_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "CR-Wood @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "kBGvS0Npk3V5eY8j", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "17001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Wood @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "kBGvS0Npk3V5eY8j", + "filament_id": "OFGxC8gB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json b/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json index 9d5910633b..160a0cd258 100644 --- a/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/CR-Wood @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "CR-Wood @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NFRGg9wmbojJ0Ye9", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "17001" -} \ No newline at end of file + "type": "filament", + "name": "CR-Wood @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "NFRGg9wmbojJ0Ye9", + "filament_id": "OFGxC8gB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json deleted file mode 100644 index ef6884e069..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-3V3-all.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS @Ender-3V3-all", - "inherits": "Creality Generic ABS", - "from": "system", - "setting_id": "Jvnq628y3IlGGHK6", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json deleted file mode 100644 index 2e7d34794d..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "mriWPwWZUKmr7ws0", - "filament_id": "07001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "35", - "close_fan_the_first_x_layers": "3", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "80", - "cool_plate_temp": "90", - "cool_plate_temp_initial_layer": "90", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "60", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "eng_plate_temp": "105", - "eng_plate_temp_initial_layer": "105", - "fan_cooling_layer_time": "30", - "fan_max_speed": "20", - "fan_min_speed": "20", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": "nil", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "0.85", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "35" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "0", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "nil", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "nil", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "ABS" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Creality" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "nil", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "90", - "hot_plate_temp_initial_layer": "90", - "nozzle_temperature": "260", - "nozzle_temperature_initial_layer": "260", - "nozzle_temperature_range_high": "260", - "nozzle_temperature_range_low": "230", - "overhang_fan_speed": "20", - "overhang_fan_threshold": "25%", - "pressure_advance": "0.03", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "0", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "5", - "slow_down_min_speed": "10", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": "90", - "textured_plate_temp_initial_layer": "90" -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json deleted file mode 100644 index 10fe49d23e..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS @Hi-all", - "inherits": "Creality Generic ABS", - "from": "system", - "setting_id": "mKgdNahVCaxQLMJE", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json deleted file mode 100644 index 369b92c304..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS @K1-all", - "inherits": "Creality Generic ABS", - "from": "system", - "setting_id": "lbMWwEM2Rb9ylrkA", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json deleted file mode 100644 index 15229ac4eb..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS @K2-all.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS @K2-all", - "inherits": "Creality Generic ABS", - "from": "system", - "setting_id": "jl0usGdbqac1xcGN", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ABS.json b/resources/profiles/Creality/filament/Creality Generic ABS.json deleted file mode 100644 index 5fc04c19ac..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ABS.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "fv5g33ofjgyjVexC", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Sermoon V1 0.4 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.2 nozzle", - "Creality Ender-3 S1 Plus 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.6 nozzle", - "Creality Ender-3 S1 Plus 0.8 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle", - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle", - "Creality CR-M4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json deleted file mode 100644 index 3da4bd0531..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-3V3-all.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA @Ender-3V3-all", - "inherits": "Creality Generic ASA", - "from": "system", - "setting_id": "3KXcINpeRKqx9Hhw", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json deleted file mode 100644 index d93db9edb5..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "4muzPKAzy8FJKM5D", - "filament_id": "19001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "55", - "close_fan_the_first_x_layers": "1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "80", - "cool_plate_temp": "90", - "cool_plate_temp_initial_layer": "90", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "60", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "eng_plate_temp": "50", - "eng_plate_temp_initial_layer": "50", - "fan_cooling_layer_time": "30", - "fan_max_speed": "20", - "fan_min_speed": "20", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": "nil", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "0.85", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "35" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "nil", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "nil", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "nil", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "ASA" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Creality" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "nil", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "90", - "hot_plate_temp_initial_layer": "90", - "nozzle_temperature": "260", - "nozzle_temperature_initial_layer": "260", - "nozzle_temperature_range_high": "280", - "nozzle_temperature_range_low": "240", - "overhang_fan_speed": "20", - "overhang_fan_threshold": "50%", - "pressure_advance": "0.032", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "0", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "5", - "slow_down_min_speed": "10", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": "90", - "textured_plate_temp_initial_layer": "90" -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json deleted file mode 100644 index aff57be93d..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA @Hi-all", - "inherits": "Creality Generic ASA", - "from": "system", - "setting_id": "DaPUW1rMtWyZLo3H", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json deleted file mode 100644 index 2248ac6818..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA @K1-all", - "inherits": "Creality Generic ASA", - "from": "system", - "setting_id": "nq4sPDBNWLOnU5pD", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json deleted file mode 100644 index 5e1f0c9a18..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA @K2-all.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA @K2-all", - "inherits": "Creality Generic ASA", - "from": "system", - "setting_id": "OAYGhucg52H8nPIF", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json deleted file mode 100644 index 4c11ce042b..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA-CF @Hi-all.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA-CF @Hi-all", - "inherits": "Creality Generic ASA @Hi-all", - "from": "system", - "setting_id": "C7IB6HSJxW598zFA", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic ASA.json b/resources/profiles/Creality/filament/Creality Generic ASA.json deleted file mode 100644 index ddf812b5ce..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic ASA.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "jHgcISP1UXOPsGH0", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle", - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json deleted file mode 100644 index f72b006d9b..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PA @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PA @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "8caHexyoeQW9p1NF", - "filament_id": "11001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "35", - "close_fan_the_first_x_layers": "1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "100", - "cool_plate_temp": "45", - "cool_plate_temp_initial_layer": "45", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "eng_plate_temp": "100", - "eng_plate_temp_initial_layer": "100", - "fan_cooling_layer_time": "100", - "fan_max_speed": "100", - "fan_min_speed": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": "nil", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "0.9", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "0", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "1.5", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "nil", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "PA" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Creality" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "0.2", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "45", - "hot_plate_temp_initial_layer": "45", - "nozzle_temperature": "250", - "nozzle_temperature_initial_layer": "250", - "nozzle_temperature_range_high": "280", - "nozzle_temperature_range_low": "250", - "overhang_fan_speed": "50", - "overhang_fan_threshold": "50%", - "pressure_advance": "0.042", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "40", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "8", - "slow_down_min_speed": "5", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "108" - ], - "textured_plate_temp": "45", - "textured_plate_temp_initial_layer": "45" -} diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json deleted file mode 100644 index f7990f9e99..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @Ender-3V3-all.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PA-CF @Ender-3V3-all", - "inherits": "Creality Generic PA-CF", - "from": "system", - "setting_id": "PxYQg8A9aHBV0wKU", - "instantiation": "true", - "compatible_printers": [ - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json deleted file mode 100644 index 80ff499716..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @K1-all.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PA-CF @K1-all", - "inherits": "Creality Generic PA-CF", - "from": "system", - "setting_id": "3j6MMw59d8UigcH7", - "instantiation": "true", - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json deleted file mode 100644 index 04ace3d4f4..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF @K2-all.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PA-CF @K2-all", - "inherits": "Creality Generic PA-CF", - "from": "system", - "setting_id": "08QXVyyDDpDPhOoJ", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "fan_min_speed": [ - "30" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PA-CF.json b/resources/profiles/Creality/filament/Creality Generic PA-CF.json deleted file mode 100644 index 92a2c25893..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PA-CF.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "hBNsuwMzm7ZZn15D", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature": [ - "290" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "0%" - ], - "overhang_fan_speed": [ - "40" - ], - "fan_cooling_layer_time": [ - "5" - ], - "full_fan_speed_layer": [ - "2" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PC @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PC @K1-all.json deleted file mode 100644 index 9098360594..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PC @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PC @K1-all", - "inherits": "Creality Generic PC", - "from": "system", - "setting_id": "NZ93pDkjFnCyAVZW", - "instantiation": "true", - "chamber_temperatures": [ - "60" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PC.json b/resources/profiles/Creality/filament/Creality Generic PC.json deleted file mode 100644 index 305de9f580..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PC.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "filament_id": "GFC99", - "instantiation": "false", - "filament_max_volumetric_speed": [ - "16" - ], - "filament_flow_ratio": [ - "0.94" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json deleted file mode 100644 index b1e47e12c9..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-3V3-all.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG @Ender-3V3-all", - "inherits": "Creality Generic PETG", - "from": "system", - "setting_id": "VsfDu1bl3N1EaXrw", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "250" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json deleted file mode 100644 index 63700d9207..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "vRVsTatkrE46rzRB", - "filament_id": "06001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "35", - "close_fan_the_first_x_layers": "1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "80", - "cool_plate_temp": "70", - "cool_plate_temp_initial_layer": "70", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "60", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "eng_plate_temp": "0", - "eng_plate_temp_initial_layer": "0", - "fan_cooling_layer_time": "30", - "fan_max_speed": "100", - "fan_min_speed": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": "nil", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "0.85", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "30" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "0", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "nil", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "nil", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "PETG" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Creality" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "nil", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "70", - "hot_plate_temp_initial_layer": "70", - "nozzle_temperature": "250", - "nozzle_temperature_initial_layer": "250", - "nozzle_temperature_range_high": "270", - "nozzle_temperature_range_low": "220", - "overhang_fan_speed": "100", - "overhang_fan_threshold": "25%", - "pressure_advance": "0.038", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "0", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "8", - "slow_down_min_speed": "10", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": "70", - "textured_plate_temp_initial_layer": "70" -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json deleted file mode 100644 index 6889cf3cf3..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG @Hi-all", - "inherits": "Creality Generic PETG", - "from": "system", - "setting_id": "ZGI0yhD4lB10uUOd", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "5" - ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "250" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json deleted file mode 100644 index 67a901d8db..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K1-all.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG @K1-all", - "inherits": "Creality Generic PETG", - "from": "system", - "setting_id": "zk1Typ98hZMZLn68", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "250" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json deleted file mode 100644 index 55ab9051b4..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG @K2-all.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG @K2-all", - "inherits": "Creality Generic PETG", - "from": "system", - "setting_id": "FhtlimihjuAe2pbs", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "cool_plate_temp": [ - "70" - ], - "eng_plate_temp": [ - "50" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "250" - ], - "fan_max_speed": [ - "80" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json deleted file mode 100644 index 28f6f07150..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG-CF @Hi-all.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG-CF @Hi-all", - "inherits": "Creality Generic PETG @Hi-all", - "from": "system", - "setting_id": "G4ZIJDNOpQvutOfs", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "filament_flow_ratio": [ - "0.95" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PETG.json b/resources/profiles/Creality/filament/Creality Generic PETG.json deleted file mode 100644 index 28c70a1f6a..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PETG.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "ixhOwyMvBCpI8nQs", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Sermoon V1 0.4 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.2 nozzle", - "Creality Ender-3 S1 Plus 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.6 nozzle", - "Creality Ender-3 S1 Plus 0.8 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle", - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle", - "Creality CR-M4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json deleted file mode 100644 index 5e28b48844..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-3V3-all.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA @Ender-3V3-all", - "inherits": "Creality Generic PLA", - "from": "system", - "setting_id": "d9awwT21ZLo1iXoh", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_min_speed": [ - "20" - ], - "cool_plate_temp": [ - "55" - ], - "eng_plate_temp": [ - "55" - ], - "hot_plate_temp": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json deleted file mode 100644 index 23b15169e9..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "zQiwnlxGlX4pFOHR", - "filament_id": "04001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "35", - "close_fan_the_first_x_layers": "1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "80", - "cool_plate_temp": "45", - "cool_plate_temp_initial_layer": "45", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "60", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "eng_plate_temp": "50", - "eng_plate_temp_initial_layer": "50", - "fan_cooling_layer_time": "100", - "fan_max_speed": "100", - "fan_min_speed": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": "nil", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "0.9", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "40" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "0", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "nil", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "nil", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "PLA" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Generic" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "nil", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "45", - "hot_plate_temp_initial_layer": "45", - "nozzle_temperature": "220", - "nozzle_temperature_initial_layer": "220", - "nozzle_temperature_range_high": "240", - "nozzle_temperature_range_low": "190", - "overhang_fan_speed": "100", - "overhang_fan_threshold": "25%", - "pressure_advance": "0.03", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "0", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "5", - "slow_down_min_speed": "10", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": "45", - "textured_plate_temp_initial_layer": "45" -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json deleted file mode 100644 index 3247f38500..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA @Hi-all", - "inherits": "Creality Generic PLA", - "from": "system", - "setting_id": "3gf0CImK4nJwfXrB", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_min_speed": [ - "20" - ], - "cool_plate_temp": [ - "55" - ], - "eng_plate_temp": [ - "55" - ], - "hot_plate_temp": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "90" - ], - "filament_unloading_speed_start": [ - "100" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json deleted file mode 100644 index d5ea668c68..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K1-all.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA @K1-all", - "inherits": "Creality Generic PLA", - "from": "system", - "setting_id": "c5ArCv3qjuKjBwEQ", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_min_speed": [ - "20" - ], - "cool_plate_temp": [ - "55" - ], - "eng_plate_temp": [ - "55" - ], - "hot_plate_temp": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json deleted file mode 100644 index 2c6000111f..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA @K2-all.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA @K2-all", - "inherits": "Creality Generic PLA", - "from": "system", - "setting_id": "bnqvzgmJYbLraBWC", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "4" - ], - "cool_plate_temp": [ - "50" - ], - "eng_plate_temp": [ - "50" - ], - "hot_plate_temp": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json deleted file mode 100644 index 7538ad118c..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Ender-3V3-all.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA High Speed @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", - "from": "system", - "setting_id": "4F3dZWvsniH9QHtr", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "23" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json deleted file mode 100644 index f1748f5d81..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @Hi-all.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA High Speed @Hi-all", - "inherits": "Creality Generic PLA @Hi-all", - "from": "system", - "setting_id": "KzaopZGQPw5OJFFD", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json deleted file mode 100644 index c810abe5e9..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA High Speed @K1-all", - "inherits": "Creality Generic PLA @K1-all", - "from": "system", - "setting_id": "ptxV78rC6wevH916", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "23" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json deleted file mode 100644 index 559cb6c0d8..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA High Speed @K2-all.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA High Speed @K2-all", - "inherits": "Creality Generic PLA @K2-all", - "from": "system", - "setting_id": "ozHstwkc3N5LGWLV", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "23" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json deleted file mode 100644 index 8386488fcd..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Ender-3V3-all.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Matte @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", - "from": "system", - "setting_id": "xF1B593frol5PWVw", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json deleted file mode 100644 index fe7c08e6c5..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @Hi-all.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Matte @Hi-all", - "inherits": "Creality Generic PLA @Hi-all", - "from": "system", - "setting_id": "R7Jo7NhjsR1iU2Fd", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json deleted file mode 100644 index 9869ee37fa..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Matte @K1-all", - "inherits": "Creality Generic PLA @K1-all", - "from": "system", - "setting_id": "3hreTG3DjcgmwZC2", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json deleted file mode 100644 index 1659fed28f..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Matte @K2-all.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Matte @K2-all", - "inherits": "Creality Generic PLA @K2-all", - "from": "system", - "setting_id": "fxZf5E6IHWWq3dsu", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json deleted file mode 100644 index d4e1b1f7aa..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Ender-3V3-all.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Silk @Ender-3V3-all", - "inherits": "Creality Generic PLA @Ender-3V3-all", - "from": "system", - "setting_id": "uPFnSMh7WoXmMAoy", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7.5" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json deleted file mode 100644 index 17b55e5202..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @Hi-all.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Silk @Hi-all", - "inherits": "Creality Generic PLA @Hi-all", - "from": "system", - "setting_id": "RPDVqZcn8EZizd1U", - "instantiation": "true", - "filament_flow_ratio": [ - "0.97" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json deleted file mode 100644 index 13cd1e7c93..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Silk @K1-all", - "inherits": "Creality Generic PLA @K1-all", - "from": "system", - "setting_id": "pxvc0ICvqc0M3wYV", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7.5" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json deleted file mode 100644 index 3b9a3d242c..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Silk @K2-all.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Silk @K2-all", - "inherits": "Creality Generic PLA @K2-all", - "from": "system", - "setting_id": "qS0Mlt24iz1k4P7n", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json deleted file mode 100644 index 53637dd460..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA Wood @Hi-all.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA Wood @Hi-all", - "inherits": "Creality Generic PLA @Hi-all", - "from": "system", - "setting_id": "OEc7Bc7WG99tuO5D", - "instantiation": "true", - "filament_flow_ratio": [ - "0.88" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json deleted file mode 100644 index 42eaf2c36c..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @Hi-all.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA-CF @Hi-all", - "inherits": "Creality Generic PLA-CF", - "from": "system", - "setting_id": "9nAovlPz0SEUcovr", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json deleted file mode 100644 index 7eca9d5dc0..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K1-all.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA-CF @K1-all", - "inherits": "Creality Generic PLA-CF", - "from": "system", - "setting_id": "zCnOLIfwhfZIDYLC", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json deleted file mode 100644 index 7b2b7212e8..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF @K2-all.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA-CF @K2-all", - "inherits": "Creality Generic PLA-CF", - "from": "system", - "setting_id": "wfZgLrH8dafxsNyZ", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "8" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json b/resources/profiles/Creality/filament/Creality Generic PLA-CF.json deleted file mode 100644 index 83fa21d7d6..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA-CF.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "DCCWPQGMsvDOucwx", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "filament_cost": [ - "30" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic PLA.json b/resources/profiles/Creality/filament/Creality Generic PLA.json deleted file mode 100644 index 6791ec64c4..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic PLA.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "rUYYpB3GkiNCVyfY", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Creality CR-10 V2 0.4 nozzle", - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality CR-10 Max 0.4 nozzle", - "Creality CR-6 SE 0.2 nozzle", - "Creality CR-6 SE 0.4 nozzle", - "Creality CR-6 SE 0.6 nozzle", - "Creality CR-6 SE 0.8 nozzle", - "Creality CR-6 Max 0.2 nozzle", - "Creality CR-6 Max 0.4 nozzle", - "Creality CR-6 Max 0.6 nozzle", - "Creality CR-6 Max 0.8 nozzle", - "Creality Sermoon V1 0.4 nozzle", - "Creality Ender-3 0.2 nozzle", - "Creality Ender-3 0.4 nozzle", - "Creality Ender-3 0.6 nozzle", - "Creality Ender-3 0.8 nozzle", - "Creality Ender-3 Pro 0.2 nozzle", - "Creality Ender-3 Pro 0.4 nozzle", - "Creality Ender-3 Pro 0.6 nozzle", - "Creality Ender-3 Pro 0.8 nozzle", - "Creality Ender-3 V2 0.4 nozzle", - "Creality Ender-3 V2 Neo 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.2 nozzle", - "Creality Ender-3 S1 Plus 0.4 nozzle", - "Creality Ender-3 S1 Plus 0.6 nozzle", - "Creality Ender-3 S1 Plus 0.8 nozzle", - "Creality Ender-5 0.4 nozzle", - "Creality Ender-5 Plus 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.2 nozzle", - "Creality Ender-5 Pro (2019) 0.25 nozzle", - "Creality Ender-5 Pro (2019) 0.3 nozzle", - "Creality Ender-5 Pro (2019) 0.4 nozzle", - "Creality Ender-5 Pro (2019) 0.5 nozzle", - "Creality Ender-5 Pro (2019) 0.6 nozzle", - "Creality Ender-5 Pro (2019) 0.8 nozzle", - "Creality Ender-5 Pro (2019) 1.0 nozzle", - "Creality Ender-5S 0.4 nozzle", - "Creality Ender-5 S1 0.4 nozzle", - "Creality Ender-6 0.4 nozzle", - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle", - "Creality CR-M4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json deleted file mode 100644 index 11b24086b2..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-3V3-all.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU @Ender-3V3-all", - "inherits": "Creality Generic TPU", - "from": "system", - "setting_id": "0fDkYNB91MiqbAS0", - "instantiation": "true", - "hot_plate_temp": [ - "30" - ], - "hot_plate_temp_initial_layer": [ - "30" - ], - "textured_plate_temp": [ - "30" - ], - "textured_plate_temp_initial_layer": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Creality Ender-3 V3 SE 0.2 nozzle", - "Creality Ender-3 V3 SE 0.4 nozzle", - "Creality Ender-3 V3 SE 0.6 nozzle", - "Creality Ender-3 V3 SE 0.8 nozzle", - "Creality Ender-3 V3 KE 0.4 nozzle", - "Creality Ender-3 V3 0.4 nozzle", - "Creality Ender-3 V3 0.6 nozzle", - "Creality Ender-3 V3 Plus 0.4 nozzle", - "Creality Ender-3 V3 Plus 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json deleted file mode 100644 index 20b4033ed4..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Ender-5Max-all.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU @Ender-5Max-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "aaiFHjbveXabDAMr", - "filament_id": "10001", - "instantiation": "true", - "activate_air_filtration": "0", - "activate_chamber_temp_control": "0", - "additional_cooling_fan_speed": "0", - "chamber_temperature": "35", - "close_fan_the_first_x_layers": "1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ], - "complete_print_exhaust_fan_speed": "80", - "cool_plate_temp": "45", - "cool_plate_temp_initial_layer": "45", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "during_print_exhaust_fan_speed": "60", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "eng_plate_temp": "35", - "eng_plate_temp_initial_layer": "35", - "fan_cooling_layer_time": "100", - "fan_max_speed": "100", - "fan_min_speed": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": "30", - "filament_diameter": "1.75", - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": "1", - "filament_is_support": "0", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_before_wipe": "nil", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_retract_restart_extra": "nil", - "filament_retract_when_changing_layer": "nil", - "filament_retraction_length": "3", - "filament_retraction_minimum_travel": "nil", - "filament_retraction_speed": "30", - "filament_shrink": "100%", - "filament_soluble": "0", - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": "0", - "filament_type": [ - "TPU" - ], - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "filament_vendor": [ - "Creality" - ], - "filament_wipe": "nil", - "filament_wipe_distance": "nil", - "filament_z_hop": "nil", - "filament_z_hop_types": "nil", - "full_fan_speed_layer": "0", - "hot_plate_temp": "45", - "hot_plate_temp_initial_layer": "45", - "nozzle_temperature": "195", - "nozzle_temperature_initial_layer": "195", - "nozzle_temperature_range_high": "220", - "nozzle_temperature_range_low": "200", - "overhang_fan_speed": "100", - "overhang_fan_threshold": "50%", - "pressure_advance": "0.02", - "reduce_fan_stop_start_freq": "1", - "required_nozzle_HRC": "0", - "slow_down_for_layer_cooling": "1", - "slow_down_layer_time": "8", - "slow_down_min_speed": "5", - "support_material_interface_fan_speed": "-1", - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": "45", - "textured_plate_temp_initial_layer": "45" -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json deleted file mode 100644 index c3b5905d96..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU @Hi-all", - "inherits": "Creality Generic TPU", - "from": "system", - "setting_id": "aF2isnhJKc3hoq8r", - "instantiation": "true", - "hot_plate_temp": [ - "30" - ], - "hot_plate_temp_initial_layer": [ - "30" - ], - "textured_plate_temp": [ - "30" - ], - "textured_plate_temp_initial_layer": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "slow_down_layer_time": [ - "5" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" - ], - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json deleted file mode 100644 index c8d4b63a69..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K1-all.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU @K1-all", - "inherits": "Creality Generic TPU", - "from": "system", - "setting_id": "isJCGG1B672xyX4l", - "instantiation": "true", - "hot_plate_temp": [ - "30" - ], - "hot_plate_temp_initial_layer": [ - "30" - ], - "textured_plate_temp": [ - "30" - ], - "textured_plate_temp_initial_layer": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "slow_down_layer_time": [ - "5" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle", - "Creality K1 SE 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json deleted file mode 100644 index db2138db73..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU @K2-all.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU @K2-all", - "inherits": "Creality Generic TPU", - "from": "system", - "setting_id": "60PiyJbkRFDzr7b5", - "instantiation": "true", - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "slow_down_layer_time": [ - "8" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "compatible_printers": [ - "Creality K2 0.2 nozzle", - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle", - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle", - "Creality K2 Pro 0.2 nozzle", - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Generic TPU.json b/resources/profiles/Creality/filament/Creality Generic TPU.json deleted file mode 100644 index 904768bb5e..0000000000 --- a/resources/profiles/Creality/filament/Creality Generic TPU.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Creality Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "mKCynAMC7cjY03c0", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Creality CR-10 V3 0.4 nozzle", - "Creality CR-10 V3 0.6 nozzle", - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality Sermoon V1 0.4 nozzle", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle", - "Creality Ender-3 S1 Pro 0.4 nozzle", - "Creality Ender-3 S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality HF Generic PLA.json b/resources/profiles/Creality/filament/Creality HF Generic PLA.json deleted file mode 100644 index 0b0c7d7d70..0000000000 --- a/resources/profiles/Creality/filament/Creality HF Generic PLA.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Creality HF Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "p07b7w0HDxavGLdd", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json b/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json deleted file mode 100644 index dabcf7cdba..0000000000 --- a/resources/profiles/Creality/filament/Creality HF Generic Speed PLA.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Creality HF Generic Speed PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Jp93uqYennsWVAKe", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Creality K1 (0.4 nozzle)", - "Creality K1 (0.6 nozzle)", - "Creality K1 (0.8 nozzle)", - "Creality K1 Max (0.4 nozzle)", - "Creality K1 Max (0.6 nozzle)", - "Creality K1 Max (0.8 nozzle)", - "Creality CR-10 SE 0.2 nozzle", - "Creality CR-10 SE 0.4 nozzle", - "Creality CR-10 SE 0.6 nozzle", - "Creality CR-10 SE 0.8 nozzle" - ] -} diff --git a/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json index 8dc6b98afb..91bd548a37 100644 --- a/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper ABS @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "9Ek7KtQF2kgJbeXg", - "filament_id": "03001", + "filament_id": "OFFP4ORR", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", @@ -43,7 +43,6 @@ ], "filament_flow_ratio": "0.92", "filament_is_support": "0", - "filament_load_time": "0", "filament_loading_speed": "28", "filament_loading_speed_start": "3", "filament_max_volumetric_speed": [ @@ -73,7 +72,6 @@ "filament_type": [ "ABS" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ diff --git a/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json index 7880478750..3333526fd3 100644 --- a/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper PLA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "YUtnpJsC9o1D3NUR", - "filament_id": "01001", + "filament_id": "OFAIrQXu", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", @@ -43,7 +43,6 @@ ], "filament_flow_ratio": "0.97", "filament_is_support": "0", - "filament_load_time": "0", "filament_loading_speed": "28", "filament_loading_speed_start": "3", "filament_max_volumetric_speed": [ @@ -74,7 +73,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ diff --git a/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json index 9c5a06621b..eed4198aea 100644 --- a/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Hyper PLA-CF @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "fZvWZ9kfPN8MU6cX", - "filament_id": "02001", + "filament_id": "OFGwT5Av", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", @@ -43,7 +43,6 @@ ], "filament_flow_ratio": "0.9", "filament_is_support": "0", - "filament_load_time": "0", "filament_loading_speed": "28", "filament_loading_speed_start": "3", "filament_max_volumetric_speed": [ @@ -73,7 +72,6 @@ "filament_type": [ "PLA-CF" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ diff --git a/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json b/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json index 8211036350..24b7aec597 100644 --- a/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json +++ b/resources/profiles/Creality/filament/Creality Silk PLA @Ender-5Max-all.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "S4nzxbjE4DmkoS7p", - "filament_id": "05001", + "filament_id": "OFfuih8e", "instantiation": "true", "activate_air_filtration": "0", "activate_chamber_temp_control": "0", @@ -43,7 +43,6 @@ ], "filament_flow_ratio": "0.85", "filament_is_support": "0", - "filament_load_time": "0", "filament_loading_speed": "28", "filament_loading_speed_start": "3", "filament_max_volumetric_speed": [ @@ -73,7 +72,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": "0", "filament_unloading_speed": "90", "filament_unloading_speed_start": "100", "filament_vendor": [ diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json index bd67446620..6a01014a09 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1 Max_CFS-C-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "EN-PLA+ @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "158lgUy4NWVKp625", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "90" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "158lgUy4NWVKp625", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "90" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json index 20e1c80d6c..68a1c41f23 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1C-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "EN-PLA+ @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GGgjz1BfWVm9G9oO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "90" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GGgjz1BfWVm9G9oO", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "90" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json index 36b97a2268..fac99aa191 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1C_CFS-C-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "EN-PLA+ @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gZVVoUCJ7QRhAHjO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "90" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "gZVVoUCJ7QRhAHjO", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "90" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json index eab3e35431..6ff1d73bc7 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K1_CFS-C-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "EN-PLA+ @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Av0kmRfBxzfEtFMI", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "90" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Av0kmRfBxzfEtFMI", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "90" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json index 10971264e8..7df41a79d8 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2 Plus-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "EN-PLA+ @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "8jntA1DA7UKpFB5D", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "8jntA1DA7UKpFB5D", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json index 1b6b372fd5..45ac03cfdc 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2 Pro-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "EN-PLA+ @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "xIghXweOHDN6eUJA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "xIghXweOHDN6eUJA", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json b/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json index e70da1c59e..1b3877c95f 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @K2-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "EN-PLA+ @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "knIpfA9wHBoyClD9", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "knIpfA9wHBoyClD9", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json b/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json index 415263d110..22552b9ec9 100644 --- a/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/EN-PLA+ @SPARKX i7-all.json @@ -1,170 +1,168 @@ { - "type": "filament", - "name": "EN-PLA+ @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "noCevEGFMtClqvDZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "09001" -} \ No newline at end of file + "type": "filament", + "name": "EN-PLA+ @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "noCevEGFMtClqvDZ", + "filament_id": "OFks6esg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json index 8b2802939b..4c3854163c 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @Hi-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "ENDER FAST PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ZK9la4OwCbY6P1Ka", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "24" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.3" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "09002" -} \ No newline at end of file + "type": "filament", + "name": "ENDER FAST PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ZK9la4OwCbY6P1Ka", + "filament_id": "OFfSqS4R", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "24" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.3" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json index 0d353b5b00..cf7a5ef46a 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Plus-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "ENDER FAST PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "aX5GTeSuTe2xMM6U", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "53" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "09002" -} \ No newline at end of file + "type": "filament", + "name": "ENDER FAST PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "aX5GTeSuTe2xMM6U", + "filament_id": "OFfSqS4R", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "53" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json index ce9f2f0186..f9d5b70345 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2 Pro-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "ENDER FAST PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "rPu8RtmT8ketxiKn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "24" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "09002" -} \ No newline at end of file + "type": "filament", + "name": "ENDER FAST PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "rPu8RtmT8ketxiKn", + "filament_id": "OFfSqS4R", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "24" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json index b3178db08d..cc020aeb91 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @K2-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "ENDER FAST PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "KXmnvtnGjZiXVYVs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "24" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "09002" -} \ No newline at end of file + "type": "filament", + "name": "ENDER FAST PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "KXmnvtnGjZiXVYVs", + "filament_id": "OFfSqS4R", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "24" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json index 33d7a84e98..e365bffac4 100644 --- a/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/ENDER FAST PLA @SPARKX i7-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "ENDER FAST PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "EOJUiD8x2hx3y4HO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "53" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "09002" -} \ No newline at end of file + "type": "filament", + "name": "ENDER FAST PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "EOJUiD8x2hx3y4HO", + "filament_id": "OFfSqS4R", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "53" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json index 0c911f30cb..bfd0581d4a 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @Ender-3 V4-all.json @@ -1,147 +1,145 @@ { - "type": "filament", - "name": "Ender-PLA @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4ZsPBPTcW7Nbud94", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", - "pressure_advance": "0.024", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "4ZsPBPTcW7Nbud94", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", + "pressure_advance": "0.024", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json b/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json index a7ff4e7247..011f599d96 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @Hi-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "Ender-PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "3cpofydFoBjnKdNH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "3cpofydFoBjnKdNH", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json index 7a70d00077..88a1f5a286 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1 Max_CFS-C-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "Ender-PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CHtytKAUVFpAy8Qm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "CHtytKAUVFpAy8Qm", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json index a9bd4373e6..20407c7014 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1C-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "Ender-PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "xnFY6LUmvd7zH1kQ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "xnFY6LUmvd7zH1kQ", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json index 258c51c0d0..2c5af7fd59 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1C_CFS-C-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "Ender-PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Q3cb72JAry8Nj9Jc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Q3cb72JAry8Nj9Jc", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json index 98e13e5899..5e3bbc2075 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K1_CFS-C-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "Ender-PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "tITLcxwReOtBn4un", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "tITLcxwReOtBn4un", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200], [1.1,210], [1.4,220]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json index 625795d82b..2215821808 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2 Plus-all.json @@ -1,152 +1,150 @@ { - "type": "filament", - "name": "Ender-PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CZfEiMPan3Lz1qK6", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "CZfEiMPan3Lz1qK6", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json index 096baea484..f2bd325441 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2 Pro-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Ender-PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "QqeD0acLtTx3o8hq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "QqeD0acLtTx3o8hq", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.2,195],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @K2-all.json b/resources/profiles/Creality/filament/Ender-PLA @K2-all.json index e7f978e6cb..364a6e25a8 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @K2-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Ender-PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "r81gYSIP0AGeFowj", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "r81gYSIP0AGeFowj", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json index a4f9b7c7ce..7cf95acc28 100644 --- a/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Ender-PLA @SPARKX i7-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Ender-PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "I8mV3hBRdyGTSqgt", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.034", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "08001" -} \ No newline at end of file + "type": "filament", + "name": "Ender-PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "I8mV3hBRdyGTSqgt", + "filament_id": "OFWao3Ic", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.034", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..fcd8548620 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-3V3-all.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality Ender-3V3-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @Ender-3V3-all;Creality Generic ABS Ender-3V3-all", + "from": "system", + "setting_id": "RqMPGyaU3l17zFrA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..f385b23057 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality Ender-5Max-all", + "renamed_from": "Creality Generic ABS @Ender-5Max-all;Creality Generic ABS Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "qurtvw5OhkVfgpaC", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "35", + "close_fan_the_first_x_layers": "3", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "80", + "cool_plate_temp": "90", + "cool_plate_temp_initial_layer": "90", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "60", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "eng_plate_temp": "105", + "eng_plate_temp_initial_layer": "105", + "fan_cooling_layer_time": "30", + "fan_max_speed": "20", + "fan_min_speed": "20", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": "nil", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "0.85", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "35" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "0", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "nil", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "nil", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "ABS" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "nil", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "90", + "hot_plate_temp_initial_layer": "90", + "nozzle_temperature": "260", + "nozzle_temperature_initial_layer": "260", + "nozzle_temperature_range_high": "260", + "nozzle_temperature_range_low": "230", + "overhang_fan_speed": "20", + "overhang_fan_threshold": "25%", + "pressure_advance": "0.03", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "0", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "5", + "slow_down_min_speed": "10", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": "90", + "textured_plate_temp_initial_layer": "90" +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json new file mode 100644 index 0000000000..aba8475a20 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality Hi-all.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality Hi-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @Hi-all;Creality Generic ABS Hi-all", + "from": "system", + "setting_id": "W2NhLx7Lw4NxWJY6", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" + ], + "compatible_printers": [ + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json new file mode 100644 index 0000000000..0ea7629f24 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality K1-all.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality K1-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @K1-all;Creality Generic ABS K1-all", + "from": "system", + "setting_id": "9hr2XywDT7lTehYd", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json b/resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json new file mode 100644 index 0000000000..4aab7d7d0d --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality K2-all.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality K2-all", + "inherits": "Generic ABS @Creality", + "renamed_from": "Creality Generic ABS @K2-all;Creality Generic ABS K2-all", + "from": "system", + "setting_id": "39krWtacUjDnf03V", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Creality.json b/resources/profiles/Creality/filament/Generic ABS @Creality.json new file mode 100644 index 0000000000..cb2c1a6f9c --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ABS @Creality.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "name": "Generic ABS @Creality", + "inherits": "fdm_filament_abs", + "renamed_from": "Creality Generic ABS", + "from": "system", + "setting_id": "My3UvJeg30wW7hLq", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.2 nozzle", + "Creality Ender-3 S1 Plus 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.6 nozzle", + "Creality Ender-3 S1 Plus 0.8 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle", + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle", + "Creality CR-M4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json index 6690a03676..0c1700464a 100644 --- a/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Ender-3 V4-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "Generic ABS @Ender-3 V4-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "4uYoekJTerUnoYl8", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", - "pressure_advance": "0.026", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @Ender-3 V4-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "4uYoekJTerUnoYl8", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "90", + "customized_plate_temp_initial_layer": "90", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", + "pressure_advance": "0.026", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json deleted file mode 100644 index ca7518e9b3..0000000000 --- a/resources/profiles/Creality/filament/Generic ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Generic ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "3BjyaE4hGrz7tqnk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "30" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "60" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.034", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Generic ABS @Hi-all.json index e64f47d466..dad6fd75a7 100644 --- a/resources/profiles/Creality/filament/Generic ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @Hi-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic ABS @Hi-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "9z0uoXnHksedYsyq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @Hi-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "9z0uoXnHksedYsyq", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json index 4c78f3881a..47623ecde9 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 Max_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic ABS @K1 Max_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "VF8DUfOECtADXXXT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1 Max_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "VF8DUfOECtADXXXT", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json index 0841cb593a..f69924da6e 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 SE-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic ABS @K1 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "6tqh2NX6hGdsR8Gy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "6tqh2NX6hGdsR8Gy", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json index 8c297b397d..7c54336fe3 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1 SE_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic ABS @K1 SE_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "D95cc9TGmWbPC8em", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1 SE_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "D95cc9TGmWbPC8em", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1C-all.json index 2f21834dc7..5f883ca259 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic ABS @K1C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "CGDrkpaby0ZdpoSH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "CGDrkpaby0ZdpoSH", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json index 4135ea39ac..1877f70bc7 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1C_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic ABS @K1C_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "eMQXlXLK9wyeqYEx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1C_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "eMQXlXLK9wyeqYEx", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json index eb71fa7e64..2621ca7398 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K1_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic ABS @K1_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "3YcpDd1XsJKf2T02", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K1_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "3YcpDd1XsJKf2T02", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json index d6f73b5e64..93a01f5a2d 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 Plus-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Generic ABS @K2 Plus-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "ju8Vp3ee2mBYGzKr", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K2 Plus-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "ju8Vp3ee2mBYGzKr", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json index e3c1674f0b..7b20d35951 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 Pro-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "Generic ABS @K2 Pro-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "CKz3942iA5I2gfaA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K2 Pro-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "CKz3942iA5I2gfaA", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json b/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json index e895bc8ab8..b711a5eefd 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2 SE-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "Generic ABS @K2 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "PdjEPWVOSloevfUZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K2 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "PdjEPWVOSloevfUZ", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ABS @K2-all.json b/resources/profiles/Creality/filament/Generic ABS @K2-all.json index f9949a0dc5..15ecff7328 100644 --- a/resources/profiles/Creality/filament/Generic ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ABS @K2-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic ABS @K2-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "v8K9u7osBIzsrQCh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00004" -} \ No newline at end of file + "type": "filament", + "name": "Generic ABS @K2-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "v8K9u7osBIzsrQCh", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..27ee572384 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-3V3-all.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality Ender-3V3-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @Ender-3V3-all;Creality Generic ASA Ender-3V3-all", + "from": "system", + "setting_id": "LXPKRyWzBzo9nU8k", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..66cb8a6eb8 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality Ender-5Max-all", + "renamed_from": "Creality Generic ASA @Ender-5Max-all;Creality Generic ASA Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "7qyRWm8KXa1YUPpl", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "55", + "close_fan_the_first_x_layers": "1", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "80", + "cool_plate_temp": "90", + "cool_plate_temp_initial_layer": "90", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "60", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "eng_plate_temp": "50", + "eng_plate_temp_initial_layer": "50", + "fan_cooling_layer_time": "30", + "fan_max_speed": "20", + "fan_min_speed": "20", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": "nil", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "0.85", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "35" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "nil", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "nil", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "nil", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "ASA" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "nil", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "90", + "hot_plate_temp_initial_layer": "90", + "nozzle_temperature": "260", + "nozzle_temperature_initial_layer": "260", + "nozzle_temperature_range_high": "280", + "nozzle_temperature_range_low": "240", + "overhang_fan_speed": "20", + "overhang_fan_threshold": "50%", + "pressure_advance": "0.032", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "0", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "5", + "slow_down_min_speed": "10", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": "90", + "textured_plate_temp_initial_layer": "90" +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json new file mode 100644 index 0000000000..e706078d18 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality Hi-all.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality Hi-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @Hi-all;Creality Generic ASA Hi-all", + "from": "system", + "setting_id": "kcMcMJUiRgTRFe8P", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json new file mode 100644 index 0000000000..91feecf436 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality K1-all.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality K1-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @K1-all;Creality Generic ASA K1-all", + "from": "system", + "setting_id": "GQVdb7ZBWA55Ld0m", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json b/resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json new file mode 100644 index 0000000000..510e1d7660 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality K2-all.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality K2-all", + "inherits": "Generic ASA @Creality", + "renamed_from": "Creality Generic ASA @K2-all;Creality Generic ASA K2-all", + "from": "system", + "setting_id": "XJKLmHYbW2ReKSKs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Creality.json b/resources/profiles/Creality/filament/Generic ASA @Creality.json new file mode 100644 index 0000000000..0ef5d15433 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA @Creality.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic ASA @Creality", + "inherits": "fdm_filament_asa", + "renamed_from": "Creality Generic ASA", + "from": "system", + "setting_id": "dCUxfG2JXDg56zTK", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle", + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json deleted file mode 100644 index 85251468b0..0000000000 --- a/resources/profiles/Creality/filament/Generic ASA @Ender-5 Max-all.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "type": "filament", - "name": "Generic ASA @Ender-5 Max-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "1cOFjktr0dBTbYS4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json index 1b8af0ce94..f4b1fd74fb 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 Max_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic ASA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "JS8oDrWmlTmmZ9VJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "JS8oDrWmlTmmZ9VJ", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json index 9ffdccc2f3..81854fca9b 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 SE-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "Generic ASA @K1 SE-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "XK0E9L6nEGz9410w", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1 SE-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "XK0E9L6nEGz9410w", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "55", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json index 7e83bc3c50..450ccb9a72 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1 SE_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "Generic ASA @K1 SE_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "U4HDFaHTS7EtgCJj", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1 SE_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "U4HDFaHTS7EtgCJj", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "55", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K1C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1C-all.json index eaf1f69185..3d8bdcc19e 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic ASA @K1C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "Yya6SGcDEMvAKLYs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "Yya6SGcDEMvAKLYs", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json index 338fc4981a..46af0e1676 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1C_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic ASA @K1C_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "1nVS1yN0psDyFajd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1C_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "1nVS1yN0psDyFajd", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json index e2db7afa6e..f94d0c06f5 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K1_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic ASA @K1_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "62EZvOkMH6gWc6CU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K1_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "62EZvOkMH6gWc6CU", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json index f9aa956e15..d67a15b081 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 Plus-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic ASA @K2 Plus-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "bPiPJ2MrgMOq01jX", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K2 Plus-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "bPiPJ2MrgMOq01jX", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json index 2723557aa6..6ed2f4deed 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 Pro-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "Generic ASA @K2 Pro-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "RScrAM7qssIS1RQC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "90" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "100" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.032", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K2 Pro-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "RScrAM7qssIS1RQC", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "90" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "100" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.032", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json b/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json index 79cd23a4f4..ef2fe096e9 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2 SE-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "Generic ASA @K2 SE-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "B3KqWjy2YfMDxjbS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K2 SE-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "B3KqWjy2YfMDxjbS", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA @K2-all.json b/resources/profiles/Creality/filament/Generic ASA @K2-all.json index cb18ef79a4..0b12417aa3 100644 --- a/resources/profiles/Creality/filament/Generic ASA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic ASA @K2-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Generic ASA @K2-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "nmVYYCCRebt7sRKj", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "20" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00007" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA @K2-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "nmVYYCCRebt7sRKj", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "20" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json new file mode 100644 index 0000000000..7a462cc250 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic ASA-CF @Creality Hi-all.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic ASA-CF @Creality Hi-all", + "inherits": "Generic ASA @Creality Hi-all", + "renamed_from": "Creality Generic ASA-CF @Hi-all;Creality Generic ASA-CF Hi-all", + "from": "system", + "setting_id": "MwKV8Lh4XzvMUVYA", + "filament_id": "OF53eLVD", + "instantiation": "true", + "filament_type": [ + "ASA-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json index 6736c660a2..c31060aa30 100644 --- a/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic ASA-CF @K2 Plus-all.json @@ -1,148 +1,146 @@ { - "type": "filament", - "name": "Generic ASA-CF @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "DnKtg4yCiafeDBIu", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.2" - ], - "filament_flow_ratio": [ - "0.92" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_type": [ - "ASA-CF" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00033" -} \ No newline at end of file + "type": "filament", + "name": "Generic ASA-CF @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "DnKtg4yCiafeDBIu", + "filament_id": "OF53eLVD", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_type": [ + "ASA-CF" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json b/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json index decbb3e4a1..3395945ad0 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @Hi-all.json @@ -1,131 +1,129 @@ { - "type": "filament", - "name": "Generic BVOH @Hi-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "5HO5PysrHUKqReVb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "150" - ], - "filament_density": [ - "1.138" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @Hi-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "5HO5PysrHUKqReVb", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "150" + ], + "filament_density": [ + "1.138" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json index 81dc3b2ac4..62b0ea6edd 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1 Max_CFS-C-all.json @@ -1,162 +1,160 @@ { - "type": "filament", - "name": "Generic BVOH @K1 Max_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "rzpKPYQdPjzN3oVS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.138" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K1 Max_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "rzpKPYQdPjzN3oVS", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.138" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json index ac52221e0e..e1c3414cd5 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1C-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic BVOH @K1C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "sBNRrUUShVPgFlD2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.138" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K1C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "sBNRrUUShVPgFlD2", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.138" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json index 35d6581e85..e068c8e767 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1C_CFS-C-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic BVOH @K1C_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "F35hv7Jv8sdPpHuG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.138" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K1C_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "F35hv7Jv8sdPpHuG", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.138" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json index db50bb2d68..34418ac001 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K1_CFS-C-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic BVOH @K1_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "quzQIkhGomoTlGMy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.138" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K1_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "quzQIkhGomoTlGMy", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.138" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json index 2dde38b996..efbf6d921a 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2 Plus-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic BVOH @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "s7taqaFnDhBFXnJQ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.138" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "s7taqaFnDhBFXnJQ", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.138" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json index c9e4552fed..671072f839 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2 Pro-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic BVOH @K2 Pro-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "WN4gUC7lL433UeUa", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "150" - ], - "filament_density": [ - "1.138" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K2 Pro-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "WN4gUC7lL433UeUa", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "150" + ], + "filament_density": [ + "1.138" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic BVOH @K2-all.json b/resources/profiles/Creality/filament/Generic BVOH @K2-all.json index 6bb308253a..bd5c265ca3 100644 --- a/resources/profiles/Creality/filament/Generic BVOH @K2-all.json +++ b/resources/profiles/Creality/filament/Generic BVOH @K2-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic BVOH @K2-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "appeb6xRpTFbyGsM", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "150" - ], - "filament_density": [ - "1.138" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "BVOH" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "filament_adhesiveness_category": "797", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00010" -} \ No newline at end of file + "type": "filament", + "name": "Generic BVOH @K2-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "appeb6xRpTFbyGsM", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "150" + ], + "filament_density": [ + "1.138" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "BVOH" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "filament_adhesiveness_category": "797", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json index b4b0fc15c4..68517664f2 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1 Max_CFS-C-all.json @@ -1,173 +1,171 @@ { - "type": "filament", - "name": "Generic HIPS @K1 Max_CFS-C-all", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "un4bn2cxbFdGO3DR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "HIPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00012" -} \ No newline at end of file + "type": "filament", + "name": "Generic HIPS @K1 Max_CFS-C-all", + "inherits": "fdm_filament_hips", + "from": "system", + "setting_id": "un4bn2cxbFdGO3DR", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "HIPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json index 78fde3f1ab..1b5d0ceaaf 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic HIPS @K1C-all", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "e1wQQnbsFK0eOT76", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "HIPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00012" -} \ No newline at end of file + "type": "filament", + "name": "Generic HIPS @K1C-all", + "inherits": "fdm_filament_hips", + "from": "system", + "setting_id": "e1wQQnbsFK0eOT76", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "HIPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json index f63576c7cf..21f3ff5869 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1C_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic HIPS @K1C_CFS-C-all", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "5ZZon4W5GRf2ilKk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "HIPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00012" -} \ No newline at end of file + "type": "filament", + "name": "Generic HIPS @K1C_CFS-C-all", + "inherits": "fdm_filament_hips", + "from": "system", + "setting_id": "5ZZon4W5GRf2ilKk", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "HIPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json index 23a86958eb..20dac07db8 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K1_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic HIPS @K1_CFS-C-all", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "81vAelQ8KbUPkNAL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "HIPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00012" -} \ No newline at end of file + "type": "filament", + "name": "Generic HIPS @K1_CFS-C-all", + "inherits": "fdm_filament_hips", + "from": "system", + "setting_id": "81vAelQ8KbUPkNAL", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "HIPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json index d004f30737..e24516c121 100644 --- a/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic HIPS @K2 Plus-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic HIPS @K2 Plus-all", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "eaR3AeSZnfqfAKaX", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "HIPS" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00012" -} \ No newline at end of file + "type": "filament", + "name": "Generic HIPS @K2 Plus-all", + "inherits": "fdm_filament_hips", + "from": "system", + "setting_id": "eaR3AeSZnfqfAKaX", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "HIPS" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..ce836188d0 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PA @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic PA @Creality Ender-5Max-all", + "renamed_from": "Creality Generic PA @Ender-5Max-all;Creality Generic PA Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "ChQOX6JlKujFwFcB", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "35", + "close_fan_the_first_x_layers": "1", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "100", + "cool_plate_temp": "45", + "cool_plate_temp_initial_layer": "45", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "eng_plate_temp": "100", + "eng_plate_temp_initial_layer": "100", + "fan_cooling_layer_time": "100", + "fan_max_speed": "100", + "fan_min_speed": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": "nil", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "0.9", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "0", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "1.5", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "nil", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "PA" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "0.2", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "45", + "hot_plate_temp_initial_layer": "45", + "nozzle_temperature": "250", + "nozzle_temperature_initial_layer": "250", + "nozzle_temperature_range_high": "280", + "nozzle_temperature_range_low": "250", + "overhang_fan_speed": "50", + "overhang_fan_threshold": "50%", + "pressure_advance": "0.042", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "40", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "8", + "slow_down_min_speed": "5", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "108" + ], + "textured_plate_temp": "45", + "textured_plate_temp_initial_layer": "45" +} diff --git a/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json index 9fd3eb7324..2485bd9622 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1 Max_CFS-C-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Generic PA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "kJAlbLyNyUBh772X", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "kJAlbLyNyUBh772X", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K1C-all.json b/resources/profiles/Creality/filament/Generic PA @K1C-all.json index ef8e035867..95bc3ec40d 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PA @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "Y68qR47SYWUENSKm", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "Y68qR47SYWUENSKm", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json index 91bdcf21c7..c398f7f3ac 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1C_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PA @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "VtABl7yMx0yDOnz0", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "VtABl7yMx0yDOnz0", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json index 7f077d59a8..58121767fa 100644 --- a/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K1_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PA @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ivl9C3evnuPMgB0F", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "ivl9C3evnuPMgB0F", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json index 59e941c60f..61984bcc11 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2 Plus-all.json @@ -1,183 +1,181 @@ { - "type": "filament", - "name": "Generic PA @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "E5tvF6Xpv7jZzLgm", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "E5tvF6Xpv7jZzLgm", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json index c9df3bc667..7eb34e526c 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2 Pro-all.json @@ -1,196 +1,194 @@ { - "type": "filament", - "name": "Generic PA @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "0139pzgdlOAScB7g", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.058", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "0139pzgdlOAScB7g", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.058", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA @K2-all.json b/resources/profiles/Creality/filament/Generic PA @K2-all.json index 8579386858..8993af315d 100644 --- a/resources/profiles/Creality/filament/Generic PA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PA @K2-all.json @@ -1,196 +1,194 @@ { - "type": "filament", - "name": "Generic PA @K2-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "gxCrQfCHpKO4p5IT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.12" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.058", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00008" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA @K2-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "gxCrQfCHpKO4p5IT", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.12" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.058", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..a73077a6e9 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality Ender-3V3-all.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Creality Ender-3V3-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @Ender-3V3-all;Creality Generic PA-CF Ender-3V3-all", + "from": "system", + "setting_id": "L9lg0gKfwuz9xcs4", + "instantiation": "true", + "compatible_printers": [ + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json new file mode 100644 index 0000000000..72519b07f2 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality K1-all.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Creality K1-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @K1-all;Creality Generic PA-CF K1-all", + "from": "system", + "setting_id": "BkM0CVxYrvFPAbpQ", + "instantiation": "true", + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 SE 0.4 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json new file mode 100644 index 0000000000..932c37b2a2 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality K2-all.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Creality K2-all", + "inherits": "Generic PA-CF @Creality", + "renamed_from": "Creality Generic PA-CF @K2-all;Creality Generic PA-CF K2-all", + "from": "system", + "setting_id": "jCFh6dGbNQt7YHNB", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "fan_min_speed": [ + "30" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @Creality.json b/resources/profiles/Creality/filament/Generic PA-CF @Creality.json new file mode 100644 index 0000000000..964672343a --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PA-CF @Creality.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Creality", + "inherits": "fdm_filament_pa", + "renamed_from": "Creality Generic PA-CF", + "from": "system", + "setting_id": "JDbda1VeHrPKR0NN", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature": [ + "290" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "40" + ], + "fan_cooling_layer_time": [ + "5" + ], + "full_fan_speed_layer": [ + "2" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json index b457a527a5..7ec3b0c3e8 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1 Max_CFS-C-all.json @@ -1,152 +1,150 @@ { - "type": "filament", - "name": "Generic PA-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "jEl76gFz2QQyvW6A", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "45" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00009" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "jEl76gFz2QQyvW6A", + "filament_id": "OFQLcbps", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "45" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json index 2d4f9cb2bf..c4eeb50de9 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1C-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PA-CF @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "eGoj7kJxL2NfqY5o", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "45" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00009" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA-CF @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "eGoj7kJxL2NfqY5o", + "filament_id": "OFQLcbps", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "45" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json index 8263c9d426..ac5d2c00c8 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1C_CFS-C-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PA-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "zbiMNXMvHACEqLfK", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "45" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00009" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "zbiMNXMvHACEqLfK", + "filament_id": "OFQLcbps", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "45" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json index 49173fecd4..8e3ed28c4d 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K1_CFS-C-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PA-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "DB1549abK4ZDVWG2", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "45" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "2" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.01", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00009" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "DB1549abK4ZDVWG2", + "filament_id": "OFQLcbps", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "45" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "2" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.01", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json index 56c2aeed8a..f8a9f12be6 100644 --- a/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA-CF @K2 Plus-all.json @@ -1,182 +1,180 @@ { - "type": "filament", - "name": "Generic PA-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "aBR3ODfDoxJOLx8k", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "45" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "00009" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "aBR3ODfDoxJOLx8k", + "filament_id": "OFQLcbps", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "45" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json index 3fc6fa4644..309c16cda1 100644 --- a/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA12-CF @K2 Plus-all.json @@ -1,182 +1,180 @@ { - "type": "filament", - "name": "Generic PA12-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "rZP36BUTvc68sHWI", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "120" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00025" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA12-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "rZP36BUTvc68sHWI", + "filament_id": "OFM4iJlv", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "120" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json index c9aa3f2918..23230df015 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1 Max_CFS-C-all.json @@ -1,188 +1,186 @@ { - "type": "filament", - "name": "Generic PA6-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "QSCyT35VNEEMhvud", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "QSCyT35VNEEMhvud", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json index c3108d354a..0189d06e7b 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PA6-CF @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "fhFfYR7jZE4EbV0j", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "fhFfYR7jZE4EbV0j", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json index d745af0009..905c209072 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1C_CFS-C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PA6-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "Go0O3gXzk3QyyBGk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "Go0O3gXzk3QyyBGk", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json index 6eb1569816..f0fc90ad44 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K1_CFS-C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PA6-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "dOmhoYus5mupLjle", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "dOmhoYus5mupLjle", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json index 162ec5e7d1..dbfa45091c 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Plus-all.json @@ -1,191 +1,189 @@ { - "type": "filament", - "name": "Generic PA6-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "3UftFI9726wU6cBK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "3UftFI9726wU6cBK", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json index 6049b3b882..91f79c1377 100644 --- a/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-CF @K2 Pro-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Generic PA6-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "p6hDaLrNJvnvejQv", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "50" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00015" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "p6hDaLrNJvnvejQv", + "filament_id": "OFhTPf6L", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "50" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA6-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json index d113edd116..927a1c8016 100644 --- a/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA6-GF @K2 Plus-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PA6-GF @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "Snwr9UFekvFcj8lx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "42" - ], - "filament_density": [ - "1.2" - ], - "filament_flow_ratio": [ - "0.88" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_type": [ - "PA-GF" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "60" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00034" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA6-GF @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "Snwr9UFekvFcj8lx", + "filament_id": "OFh9u9c0", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "42" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "0.88" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_type": [ + "PA-GF" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "60" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json index 25956f1c1c..f4e776ceae 100644 --- a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Plus-all.json @@ -1,182 +1,180 @@ { - "type": "filament", - "name": "Generic PA612-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "Od0K6cY5fZtDAOOF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.17" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00022" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA612-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "Od0K6cY5fZtDAOOF", + "filament_id": "OF8eaY7j", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.17" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json index 5a29d469ef..972a0ccd17 100644 --- a/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PA612-CF @K2 Pro-all.json @@ -1,184 +1,182 @@ { - "type": "filament", - "name": "Generic PA612-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "YZr7lxLJZjL71WzO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.17" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00022" -} \ No newline at end of file + "type": "filament", + "name": "Generic PA612-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "YZr7lxLJZjL71WzO", + "filament_id": "OF8eaY7j", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.17" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json index 3fee83483f..d8b314ffdb 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1 Max_CFS-C-all.json @@ -1,197 +1,195 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "Q6f7jvJqw2gyNBFZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "Q6f7jvJqw2gyNBFZ", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json index 100798cac6..559df69e3a 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C-all.json @@ -1,198 +1,196 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "Rt7TNUSJlBGzxbcN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "Rt7TNUSJlBGzxbcN", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json index 71dff576e2..7d1ea509cb 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1C_CFS-C-all.json @@ -1,198 +1,196 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "CbUS1kiIgsHTZa28", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "CbUS1kiIgsHTZa28", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json index 956496c6a1..c42e41adf4 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K1_CFS-C-all.json @@ -1,198 +1,196 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "71tO55hudcpbpReV", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "71tO55hudcpbpReV", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json index 2b21d3680c..05d9ace84a 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Plus-all.json @@ -1,197 +1,195 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "p3nXM3BSnsmS2XHO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "p3nXM3BSnsmS2XHO", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json index cd4b5491a9..d752fdf84d 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2 Pro-all.json @@ -1,184 +1,182 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "gwXDISorxlzhqE2L", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "gwXDISorxlzhqE2L", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json index 0c507bc83d..4756391f64 100644 --- a/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PAHT-CF @K2-all.json @@ -1,184 +1,182 @@ { - "type": "filament", - "name": "Generic PAHT-CF @K2-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "OK8a49qQ1ooSpYKe", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00016" -} \ No newline at end of file + "type": "filament", + "name": "Generic PAHT-CF @K2-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "OK8a49qQ1ooSpYKe", + "filament_id": "OFH7b12v", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PC @Creality K1-all.json new file mode 100644 index 0000000000..a73499e2e9 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PC @Creality K1-all.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PC @Creality K1-all", + "inherits": "Generic PC @Creality", + "renamed_from": "Creality Generic PC @K1-all;Creality Generic PC K1-all", + "from": "system", + "setting_id": "Jk9yNMEqu4M92edj", + "instantiation": "true", + "chamber_temperatures": [ + "60" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 SE 0.4 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @Creality.json b/resources/profiles/Creality/filament/Generic PC @Creality.json new file mode 100644 index 0000000000..5212f6c052 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PC @Creality.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PC @Creality", + "inherits": "fdm_filament_pc", + "from": "system", + "filament_id": "OFLakOUI", + "instantiation": "false", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.94" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json index b2e4a4cc1a..65f146c1f4 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1 Max_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PC @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "Dh2hSCE4xEmmv601", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "Dh2hSCE4xEmmv601", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K1C-all.json b/resources/profiles/Creality/filament/Generic PC @K1C-all.json index c23127714d..fc13d05730 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PC @K1C-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "KWaWn7qw5WFhxP6u", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K1C-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "KWaWn7qw5WFhxP6u", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json index 5a775566d2..19b0ebd6e6 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1C_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PC @K1C_CFS-C-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "YXZbtzq7xTHm1L1k", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K1C_CFS-C-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "YXZbtzq7xTHm1L1k", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json index 11d4aa54b0..9788c706b6 100644 --- a/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K1_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PC @K1_CFS-C-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "ZzPtJF9WrqfZa29N", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K1_CFS-C-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "ZzPtJF9WrqfZa29N", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json index a4fd7b8e17..5a489077b9 100644 --- a/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K2 Plus-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PC @K2 Plus-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "3knMGS1s49r6Z9eL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "cool_plate_temp_initial_layer": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K2 Plus-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "3knMGS1s49r6Z9eL", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "cool_plate_temp_initial_layer": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json index 17b8f5ba3c..d2e6e6bc9c 100644 --- a/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PC @K2 Pro-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Generic PC @K2 Pro-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "CSAIxm75n407CqTG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "1.18" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00021" -} \ No newline at end of file + "type": "filament", + "name": "Generic PC @K2 Pro-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "CSAIxm75n407CqTG", + "filament_id": "OFLakOUI", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "1.18" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json index 5e82819e32..c83a904526 100644 --- a/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PCTG @K2 Plus-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic PCTG @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "zmSP0G2uQvugDqZs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PCTG" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.13", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00032" -} \ No newline at end of file + "type": "filament", + "name": "Generic PCTG @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "zmSP0G2uQvugDqZs", + "filament_id": "OFu1evlr", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PCTG" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.13", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json index f2bd3dde2b..e50ac427e6 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1 Max_CFS-C-all.json @@ -1,188 +1,186 @@ { - "type": "filament", - "name": "Generic PET @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "rbuxBWsJ43mXgEIi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "rbuxBWsJ43mXgEIi", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K1C-all.json b/resources/profiles/Creality/filament/Generic PET @K1C-all.json index b855b18446..c07ef2c0d9 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PET @K1C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "yblsYcRQlWMPyE2X", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K1C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "yblsYcRQlWMPyE2X", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json index fef797ee4b..cb81e6743c 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1C_CFS-C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PET @K1C_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "Yhi1n5iQJpQPQQAp", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K1C_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "Yhi1n5iQJpQPQQAp", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json index 6de2eb826d..0dca9e321e 100644 --- a/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K1_CFS-C-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "Generic PET @K1_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "HrEHGzilsq8F3ne7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K1_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "HrEHGzilsq8F3ne7", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json index d23ec6c681..6ea61d280b 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2 Plus-all.json @@ -1,192 +1,190 @@ { - "type": "filament", - "name": "Generic PET @K2 Plus-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "OFMSlAPXoITrhmPG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K2 Plus-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "OFMSlAPXoITrhmPG", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json index ff35401f39..8d19366d15 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2 Pro-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Generic PET @K2 Pro-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "fIxga8QpAboN7reJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.13", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K2 Pro-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "fIxga8QpAboN7reJ", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.13", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET @K2-all.json b/resources/profiles/Creality/filament/Generic PET @K2-all.json index 52aaa6e18c..13dbc77901 100644 --- a/resources/profiles/Creality/filament/Generic PET @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PET @K2-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Generic PET @K2-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "K7DNfNNpWlGriQip", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00020" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET @K2-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "K7DNfNNpWlGriQip", + "filament_id": "OF6MOPWx", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json index c42769fe11..55792e2c7d 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1 Max_CFS-C-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "Generic PET-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "iAykK8PMYs9LdxrP", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "iAykK8PMYs9LdxrP", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json index a293723722..e8a239cf78 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1C-all.json @@ -1,177 +1,175 @@ { - "type": "filament", - "name": "Generic PET-CF @K1C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "WhGF57kMBW9hM9zv", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K1C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "WhGF57kMBW9hM9zv", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json index 5e49cbdb77..87742e819e 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1C_CFS-C-all.json @@ -1,177 +1,175 @@ { - "type": "filament", - "name": "Generic PET-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "IiR1UEHx5RrOeAWM", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "IiR1UEHx5RrOeAWM", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json index 72bec3d1ba..db7b7602d8 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K1_CFS-C-all.json @@ -1,177 +1,175 @@ { - "type": "filament", - "name": "Generic PET-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "2a9xvwlw1X0qsA26", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "2a9xvwlw1X0qsA26", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json index 627620e2e0..d35cb1556c 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K2 Plus-all.json @@ -1,195 +1,193 @@ { - "type": "filament", - "name": "Generic PET-CF @K2 Plus-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "srmb3jsHHpFDnfsp", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.034", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K2 Plus-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "srmb3jsHHpFDnfsp", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.034", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json index ab8839dd7e..30a47753d0 100644 --- a/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PET-CF @K2 Pro-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Generic PET-CF @K2 Pro-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "5tjKAfZmtCNClyrd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "40", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00013" -} \ No newline at end of file + "type": "filament", + "name": "Generic PET-CF @K2 Pro-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "5tjKAfZmtCNClyrd", + "filament_id": "OFQdaVZS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "40", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..9d2c3a5529 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-3V3-all.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality Ender-3V3-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @Ender-3V3-all;Creality Generic PETG Ender-3V3-all", + "from": "system", + "setting_id": "sX2aMXNynDp6VKSR", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "250" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..e9a463bd1a --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality Ender-5Max-all", + "renamed_from": "Creality Generic PETG @Ender-5Max-all;Creality Generic PETG Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "TFS4Fi1PuE7WgnPr", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "35", + "close_fan_the_first_x_layers": "1", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "80", + "cool_plate_temp": "70", + "cool_plate_temp_initial_layer": "70", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "60", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "eng_plate_temp": "0", + "eng_plate_temp_initial_layer": "0", + "fan_cooling_layer_time": "30", + "fan_max_speed": "100", + "fan_min_speed": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": "nil", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "0.85", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "30" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "0", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "nil", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "nil", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "PETG" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "nil", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "70", + "hot_plate_temp_initial_layer": "70", + "nozzle_temperature": "250", + "nozzle_temperature_initial_layer": "250", + "nozzle_temperature_range_high": "270", + "nozzle_temperature_range_low": "220", + "overhang_fan_speed": "100", + "overhang_fan_threshold": "25%", + "pressure_advance": "0.038", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "0", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "8", + "slow_down_min_speed": "10", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": "70", + "textured_plate_temp_initial_layer": "70" +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json new file mode 100644 index 0000000000..0092cf5d12 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality Hi-all.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality Hi-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @Hi-all;Creality Generic PETG Hi-all", + "from": "system", + "setting_id": "QcMkrViYBKh4oISG", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "5" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" + ], + "compatible_printers": [ + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json new file mode 100644 index 0000000000..06fb485fd0 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality K1-all.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality K1-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @K1-all;Creality Generic PETG K1-all", + "from": "system", + "setting_id": "YEB1keha4rhCSmq8", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "250" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "compatible_printers": [ + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json new file mode 100644 index 0000000000..87e82d3eb5 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality K2-all.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality K2-all", + "inherits": "Generic PETG @Creality", + "renamed_from": "Creality Generic PETG @K2-all;Creality Generic PETG K2-all", + "from": "system", + "setting_id": "IrbPRxkyhiUXaPEu", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp": [ + "50" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "250" + ], + "fan_max_speed": [ + "80" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Creality.json b/resources/profiles/Creality/filament/Generic PETG @Creality.json new file mode 100644 index 0000000000..7bd45cd910 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG @Creality.json @@ -0,0 +1,101 @@ +{ + "type": "filament", + "name": "Generic PETG @Creality", + "inherits": "fdm_filament_pet", + "renamed_from": "Creality Generic PETG", + "from": "system", + "setting_id": "B8lWG3jJQ4ar4j70", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.2 nozzle", + "Creality Ender-3 S1 Plus 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.6 nozzle", + "Creality Ender-3 S1 Plus 0.8 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle", + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle", + "Creality CR-M4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json index 74e49dfb40..072a4e3f7e 100644 --- a/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic PETG @Ender-3 V4-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "P9ZP95oPCCBeXhGC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.24" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "16" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,230],[1.0,230],[1.2,250]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @Ender-3 V4-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "P9ZP95oPCCBeXhGC", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "16" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,230],[1.0,230],[1.2,250]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json deleted file mode 100644 index 229ac91f2b..0000000000 --- a/resources/profiles/Creality/filament/Generic PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Generic PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "yNgF407ERXuU7LHE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,230],[1.0,240]]", - "pressure_advance": "0.064", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Generic PETG @Hi-all.json index f855fb8217..a36395f952 100644 --- a/resources/profiles/Creality/filament/Generic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @Hi-all.json @@ -1,151 +1,149 @@ { - "type": "filament", - "name": "Generic PETG @Hi-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "1N9muT0ILCJ7pdQq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220],[1.1,220],[1.3,250]]", - "pressure_advance": "0.078", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @Hi-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "1N9muT0ILCJ7pdQq", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220],[1.1,220],[1.3,250]]", + "pressure_advance": "0.078", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json index 2cba8d0911..1666762dad 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 Max_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Generic PETG @K1 Max_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "j2R2SrPu6U5fde21", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe": [ - "1" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1 Max_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "j2R2SrPu6U5fde21", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe": [ + "1" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json index 2626c596da..c1d8612475 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 SE-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PETG @K1 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "ktn07NL2acbf4FzZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,240]]", - "pressure_advance": "0.086", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "ktn07NL2acbf4FzZ", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,240]]", + "pressure_advance": "0.086", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json index af8cb7d371..917188d870 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1 SE_CFS-C-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PETG @K1 SE_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "8isRtWlMhY6f6OTg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,240]]", - "pressure_advance": "0.086", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1 SE_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "8isRtWlMhY6f6OTg", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,230],[6.0,240],[10.0,240]]", + "pressure_advance": "0.086", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1C-all.json index 1122d81c46..2e368f0e59 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Generic PETG @K1C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "983sxUds4Bih3OCl", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe": [ - "1" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "983sxUds4Bih3OCl", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe": [ + "1" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json index 48b6087734..a614803613 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1C_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Generic PETG @K1C_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "rMTi8mSKdtnzsMbr", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe": [ - "1" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1C_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "rMTi8mSKdtnzsMbr", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe": [ + "1" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json index 5d518fde42..6c81dc803e 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K1_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Generic PETG @K1_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "9Ay01Nq2Dv2SfQVR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe": [ - "1" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K1_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "9Ay01Nq2Dv2SfQVR", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe": [ + "1" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,235], [1.3,250]]", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json index 1bb9217b84..4704b0e89c 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 Plus-all.json @@ -1,142 +1,140 @@ { - "type": "filament", - "name": "Generic PETG @K2 Plus-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "z4vClzn8RViHNLgk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K2 Plus-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "z4vClzn8RViHNLgk", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json index e50a03cb28..d819485f07 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 Pro-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PETG @K2 Pro-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "huEA8Ry63opxcD4n", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_type": [ - "PETG" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220],[1.1,220],[1.3,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K2 Pro-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "huEA8Ry63opxcD4n", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_type": [ + "PETG" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,220],[1.1,220],[1.3,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json index 1b56e51679..1de0675bdb 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2 SE-all.json @@ -1,152 +1,150 @@ { - "type": "filament", - "name": "Generic PETG @K2 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "awADayXExBihbXgS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.24" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K2 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "awADayXExBihbXgS", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.24" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @K2-all.json b/resources/profiles/Creality/filament/Generic PETG @K2-all.json index 9df2e83d3d..3d1e74f03b 100644 --- a/resources/profiles/Creality/filament/Generic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @K2-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Generic PETG @K2-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "7iDx59I7g14YDF8w", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "16" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.0,220],[1.2,250]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @K2-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "7iDx59I7g14YDF8w", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "16" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.0,220],[1.2,250]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json index 2fee02a703..a7c58188b0 100644 --- a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic PETG @SPARKX i7-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "5jgqjcjpqHPzxm6H", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "14" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,240],[1.2,250]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "00003" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG @SPARKX i7-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "5jgqjcjpqHPzxm6H", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "14" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,240],[1.2,250]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json new file mode 100644 index 0000000000..5049c12c57 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PETG-CF @Creality Hi-all.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Creality Hi-all", + "inherits": "Generic PETG @Creality Hi-all", + "renamed_from": "Creality Generic PETG-CF @Hi-all;Creality Generic PETG-CF Hi-all", + "from": "system", + "setting_id": "dWEGZoSVFzj7e9m1", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "filament_type": [ + "PETG-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "filament_flow_ratio": [ + "0.95" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json index e4ab498063..38eea406a6 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1 Max_CFS-C-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Generic PETG-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "4aNmHiMKdF9f0qdK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "4aNmHiMKdF9f0qdK", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json index 8bbacdd073..43d2d6d056 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PETG-CF @K1C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "J9U6OONEnIpwmjf1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K1C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "J9U6OONEnIpwmjf1", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json index d5a0981341..055dc6c674 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1C_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PETG-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "WaKz2m5F97gq2Lm2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "WaKz2m5F97gq2Lm2", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json index 1414ef10c2..8c516d09b8 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K1_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PETG-CF @K1_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "37j0QrLekeU2z2q6", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K1_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "37j0QrLekeU2z2q6", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json index 7114550576..eb1bb1e4eb 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Plus-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Generic PETG-CF @K2 Plus-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "OEzFehmwiMscMC7x", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K2 Plus-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "OEzFehmwiMscMC7x", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json index d4f5068e4d..6c85e2d3e4 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2 Pro-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Generic PETG-CF @K2 Pro-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "XNo4wgLuyPeOqInw", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K2 Pro-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "XNo4wgLuyPeOqInw", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json index d9c52ea4d4..72452d8af0 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @K2-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Generic PETG-CF @K2-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "LrzCY2ZsMGzQ9hZW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.26" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @K2-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "LrzCY2ZsMGzQ9hZW", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.26" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json index 349f5d2418..5dd48f17a3 100644 --- a/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-CF @SPARKX i7-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PETG-CF @SPARKX i7-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "0UI0C81wu0FTlutg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "90" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", - "pressure_advance": "0.024", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "00014" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-CF @SPARKX i7-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "0UI0C81wu0FTlutg", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "90" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", + "pressure_advance": "0.024", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json index 09c26dc704..de7c1c7cbe 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Plus-all.json @@ -1,152 +1,150 @@ { - "type": "filament", - "name": "Generic PETG-GF @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "Bn3MV8VSTFbpxsJK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "17" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG-GF" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00027" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-GF @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "Bn3MV8VSTFbpxsJK", + "filament_id": "OFyLWVF3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "17" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PETG-GF" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json index dda8a48f06..fc176da918 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2 Pro-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Generic PETG-GF @K2 Pro-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "Q5qYSWKf0YGbomey", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "17" - ], - "filament_density": [ - "1.28" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00027" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-GF @K2 Pro-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "Q5qYSWKf0YGbomey", + "filament_id": "OFyLWVF3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "17" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json index 2505b3ccc8..8a5ffa2ac2 100644 --- a/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PETG-GF @K2-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Generic PETG-GF @K2-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "mirtPgYBmAcUOLCg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "17" - ], - "filament_density": [ - "1.28" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00027" -} \ No newline at end of file + "type": "filament", + "name": "Generic PETG-GF @K2-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "mirtPgYBmAcUOLCg", + "filament_id": "OFyLWVF3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "17" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..4bc29d5df2 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-3V3-all.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @Ender-3V3-all;Creality Generic PLA Ender-3V3-all", + "from": "system", + "setting_id": "uGq3aWYUI2sLJORU", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_min_speed": [ + "20" + ], + "cool_plate_temp": [ + "55" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..f4714b8acc --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality Ender-5Max-all", + "renamed_from": "Creality Generic PLA @Ender-5Max-all;Creality Generic PLA Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "xGTd14Qwc0JbI6kg", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "35", + "close_fan_the_first_x_layers": "1", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "80", + "cool_plate_temp": "45", + "cool_plate_temp_initial_layer": "45", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "60", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "eng_plate_temp": "50", + "eng_plate_temp_initial_layer": "50", + "fan_cooling_layer_time": "100", + "fan_max_speed": "100", + "fan_min_speed": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": "nil", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "0.9", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "40" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "0", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "nil", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "nil", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "nil", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "45", + "hot_plate_temp_initial_layer": "45", + "nozzle_temperature": "220", + "nozzle_temperature_initial_layer": "220", + "nozzle_temperature_range_high": "240", + "nozzle_temperature_range_low": "190", + "overhang_fan_speed": "100", + "overhang_fan_threshold": "25%", + "pressure_advance": "0.03", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "0", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "5", + "slow_down_min_speed": "10", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": "45", + "textured_plate_temp_initial_layer": "45" +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json new file mode 100644 index 0000000000..9bdc93548b --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality Hi-all.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality Hi-all", + "renamed_from": "Creality Generic PLA @Hi-all;Creality Generic PLA Hi-all", + "inherits": "Generic PLA @Creality", + "from": "system", + "setting_id": "6rwK4GqvNrgaw4kF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_min_speed": [ + "20" + ], + "cool_plate_temp": [ + "55" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json new file mode 100644 index 0000000000..ac6f727f02 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality K1-all.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality K1-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @K1-all;Creality Generic PLA K1-all", + "from": "system", + "setting_id": "oO2HaneRPfqxNQsP", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_min_speed": [ + "20" + ], + "cool_plate_temp": [ + "55" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "compatible_printers": [ + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json new file mode 100644 index 0000000000..bf98b76c5a --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality K2-all.json @@ -0,0 +1,60 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality K2-all", + "inherits": "Generic PLA @Creality", + "renamed_from": "Creality Generic PLA @K2-all;Creality Generic PLA K2-all", + "from": "system", + "setting_id": "EC0PPocMp0c4O0dK", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ], + "cool_plate_temp": [ + "50" + ], + "eng_plate_temp": [ + "50" + ], + "hot_plate_temp": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Creality.json b/resources/profiles/Creality/filament/Generic PLA @Creality.json new file mode 100644 index 0000000000..f3d807d76b --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA @Creality.json @@ -0,0 +1,74 @@ +{ + "type": "filament", + "name": "Generic PLA @Creality", + "inherits": "fdm_filament_pla", + "renamed_from": "Creality Generic PLA", + "from": "system", + "setting_id": "UNUCEjCpe1e4ICT9", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Sermoon V1 0.4 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.2 nozzle", + "Creality Ender-3 S1 Plus 0.4 nozzle", + "Creality Ender-3 S1 Plus 0.6 nozzle", + "Creality Ender-3 S1 Plus 0.8 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle", + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle", + "Creality CR-M4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json index 6bb5cef8b2..112c869ae8 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Ender-3 V4-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PLA @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "prD5vMrpYGccWzdn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "prD5vMrpYGccWzdn", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json deleted file mode 100644 index 54783f5efc..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ubfcxetXGj6agAoi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190],[1.0,210]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json index 831a63dc03..25ca83f1c6 100644 --- a/resources/profiles/Creality/filament/Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @Hi-all.json @@ -1,144 +1,140 @@ { - "type": "filament", - "name": "Generic PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "eza77EPrdoTvZdw7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle", - "Creality Hi 0.8 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "eza77EPrdoTvZdw7", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json index a2757b6400..291aca3b0d 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 Max_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "Generic PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ARsPmEmVZlsfqy4L", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "45" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ARsPmEmVZlsfqy4L", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "45" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json index fe66c9659f..4b4e3e0125 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 SE-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "Generic PLA @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ZzKNiMtyn93fR8Hq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ZzKNiMtyn93fR8Hq", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json index c4b6a70d4e..60212b6a51 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1 SE_CFS-C-all.json @@ -1,141 +1,139 @@ { - "type": "filament", - "name": "Generic PLA @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "grHcTUEdjD6jxza1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,230]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "grHcTUEdjD6jxza1", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,230]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1C-all.json index 87b5d0554c..d242a5b389 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "Generic PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "qSoHwF6RKEDk9oy0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "45" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "qSoHwF6RKEDk9oy0", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "45" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json index a8e2ea3433..80affeffc9 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1C_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "Generic PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "5oIZY7x0t6ORAd5y", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "45" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "5oIZY7x0t6ORAd5y", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "45" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json index 9ad9f4d172..ab014109f1 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K1_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "Generic PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "LVSGrfS4cac3vRgQ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "45" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "LVSGrfS4cac3vRgQ", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "45" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json index 9b4f832744..530e929d3a 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zgZhX3yZ3m9HZ8AF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zgZhX3yZ3m9HZ8AF", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json index 97bfa85e57..a4d6fb7509 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 Pro-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "umMGfkURWkPH7wY2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "umMGfkURWkPH7wY2", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json index 8c2f352b62..a229efd77e 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2 SE-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Generic PLA @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "03mMqzkFvH7rS8wz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "03mMqzkFvH7rS8wz", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @K2-all.json b/resources/profiles/Creality/filament/Generic PLA @K2-all.json index 5773b09d4a..ab794d1dec 100644 --- a/resources/profiles/Creality/filament/Generic PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @K2-all.json @@ -1,162 +1,160 @@ { - "type": "filament", - "name": "Generic PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "WD6bTDOOwBE72RaU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190],[1.2,190],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "WD6bTDOOwBE72RaU", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190],[1.2,190],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json index c0d5e84f04..bfa143866e 100644 --- a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "09RAKy1b3XyRqJlV", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.2,210],[0.6,220]]", - "pressure_advance": "0.12", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.2 nozzle", - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "00001" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "09RAKy1b3XyRqJlV", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.2,210],[0.6,220]]", + "pressure_advance": "0.12", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.2 nozzle", + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA HF @Creality.json b/resources/profiles/Creality/filament/Generic PLA HF @Creality.json new file mode 100644 index 0000000000..235e113a59 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA HF @Creality.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Creality", + "inherits": "fdm_filament_pla", + "renamed_from": "Creality HF Generic PLA", + "from": "system", + "setting_id": "YXqIFmq63jGbN8aZ", + "filament_id": "OFZr862X", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..21d1029a5d --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Ender-3V3-all.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA High Speed Ender-3V3-all", + "from": "system", + "setting_id": "MOH1B7U4Ipv8jw0s", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "23" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json new file mode 100644 index 0000000000..cb184a432a --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality Hi-all.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Creality Hi-all", + "inherits": "Generic PLA @Creality Hi-all", + "renamed_from": "Creality Generic PLA High Speed @Hi-all;Creality Generic PLA High Speed Hi-all", + "from": "system", + "setting_id": "KJZ1ztg3jL2Cg4fi", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json new file mode 100644 index 0000000000..c7b2bbb03a --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K1-all.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA High Speed @K1-all;Creality Generic PLA High Speed K1-all", + "from": "system", + "setting_id": "5HgGIzGuma2z6vD8", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "23" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 SE 0.4 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json new file mode 100644 index 0000000000..9df651b17d --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA High Speed @Creality K2-all.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA High Speed @K2-all;Creality Generic PLA High Speed K2-all", + "from": "system", + "setting_id": "Lxp4EwuEZKFHZXWR", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "23" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..2e561af6b5 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Ender-3V3-all.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Matte Ender-3V3-all", + "from": "system", + "setting_id": "JlvUB8GxzpAOlgkz", + "filament_id": "OFmY0l6t", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json new file mode 100644 index 0000000000..1cff84c8bf --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality Hi-all.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @Creality Hi-all", + "inherits": "Generic PLA @Creality Hi-all", + "renamed_from": "Creality Generic PLA Matte @Hi-all;Creality Generic PLA Matte Hi-all", + "from": "system", + "setting_id": "pFxJgjam0WAeSKqf", + "filament_id": "OFmY0l6t", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json new file mode 100644 index 0000000000..2a584450f8 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K1-all.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA Matte @K1-all;Creality Generic PLA Matte K1-all", + "from": "system", + "setting_id": "JJRpJQcHUhelwD02", + "filament_id": "OFmY0l6t", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 SE 0.4 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json new file mode 100644 index 0000000000..27607938a5 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Matte @Creality K2-all.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA Matte @K2-all;Creality Generic PLA Matte K2-all", + "from": "system", + "setting_id": "VVcXNl0Y6B0mLlrb", + "filament_id": "OFmY0l6t", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..1f528f79fb --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Ender-3V3-all.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Creality Ender-3V3-all", + "inherits": "Generic PLA @Creality Ender-3V3-all", + "renamed_from": "Creality Generic PLA Silk @Ender-3V3-all;Creality Generic PLA Silk Ender-3V3-all", + "from": "system", + "setting_id": "vPrmBiuBCC8843Jb", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7.5" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json new file mode 100644 index 0000000000..3358b98c75 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality Hi-all.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Creality Hi-all", + "inherits": "Generic PLA @Creality Hi-all", + "renamed_from": "Creality Generic PLA Silk @Hi-all;Creality Generic PLA Silk Hi-all", + "from": "system", + "setting_id": "k1ofgUXqhHGSPDPY", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json new file mode 100644 index 0000000000..4e8adb2b35 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K1-all.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Creality K1-all", + "inherits": "Generic PLA @Creality K1-all", + "renamed_from": "Creality Generic PLA Silk @K1-all;Creality Generic PLA Silk K1-all", + "from": "system", + "setting_id": "JcSq9nar8x5BjFss", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7.5" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 SE 0.4 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json new file mode 100644 index 0000000000..850ea2704b --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Silk @Creality K2-all.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Creality K2-all", + "inherits": "Generic PLA @Creality K2-all", + "renamed_from": "Creality Generic PLA Silk @K2-all;Creality Generic PLA Silk K2-all", + "from": "system", + "setting_id": "fRyhLWAQiCOaAxKA", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json new file mode 100644 index 0000000000..62f6ddf42c --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA Wood @Creality Hi-all.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Wood @Creality Hi-all", + "inherits": "Generic PLA @Creality Hi-all", + "renamed_from": "Creality Generic PLA Wood @Hi-all;Creality Generic PLA Wood Hi-all", + "from": "system", + "setting_id": "PNqfF5ecYqqpobdh", + "filament_id": "OFIKZxPF", + "instantiation": "true", + "filament_flow_ratio": [ + "0.88" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json new file mode 100644 index 0000000000..9bbc7a4433 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality Hi-all.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Creality Hi-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @Hi-all;Creality Generic PLA-CF Hi-all", + "from": "system", + "setting_id": "MH2pm9wTHLgX9fyq", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json new file mode 100644 index 0000000000..2e3ed94cb7 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K1-all.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Creality K1-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @K1-all;Creality Generic PLA-CF K1-all", + "from": "system", + "setting_id": "DoyvqW51z3o1vBSa", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json new file mode 100644 index 0000000000..4cc99c0ff5 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality K2-all.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Creality K2-all", + "inherits": "Generic PLA-CF @Creality", + "renamed_from": "Creality Generic PLA-CF @K2-all;Creality Generic PLA-CF K2-all", + "from": "system", + "setting_id": "6KqkLBBYBA59h5TA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "8" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Creality.json b/resources/profiles/Creality/filament/Generic PLA-CF @Creality.json new file mode 100644 index 0000000000..e35a839035 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Creality.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Creality", + "inherits": "fdm_filament_pla", + "renamed_from": "Creality Generic PLA-CF", + "from": "system", + "setting_id": "Fn5Z3ccrrRYFkiwT", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "filament_cost": [ + "30" + ], + "compatible_printers": [ + "Creality CR-10 V2 0.4 nozzle", + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality CR-10 Max 0.4 nozzle", + "Creality CR-6 SE 0.2 nozzle", + "Creality CR-6 SE 0.4 nozzle", + "Creality CR-6 SE 0.6 nozzle", + "Creality CR-6 SE 0.8 nozzle", + "Creality CR-6 Max 0.2 nozzle", + "Creality CR-6 Max 0.4 nozzle", + "Creality CR-6 Max 0.6 nozzle", + "Creality CR-6 Max 0.8 nozzle", + "Creality Ender-3 0.2 nozzle", + "Creality Ender-3 0.4 nozzle", + "Creality Ender-3 0.6 nozzle", + "Creality Ender-3 0.8 nozzle", + "Creality Ender-3 Pro 0.2 nozzle", + "Creality Ender-3 Pro 0.4 nozzle", + "Creality Ender-3 Pro 0.6 nozzle", + "Creality Ender-3 Pro 0.8 nozzle", + "Creality Ender-3 V2 0.4 nozzle", + "Creality Ender-3 V2 Neo 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-5 0.4 nozzle", + "Creality Ender-5 Plus 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.2 nozzle", + "Creality Ender-5 Pro (2019) 0.25 nozzle", + "Creality Ender-5 Pro (2019) 0.3 nozzle", + "Creality Ender-5 Pro (2019) 0.4 nozzle", + "Creality Ender-5 Pro (2019) 0.5 nozzle", + "Creality Ender-5 Pro (2019) 0.6 nozzle", + "Creality Ender-5 Pro (2019) 0.8 nozzle", + "Creality Ender-5 Pro (2019) 1.0 nozzle", + "Creality Ender-5S 0.4 nozzle", + "Creality Ender-5 S1 0.4 nozzle", + "Creality Ender-6 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json index c651861af8..92e04c7694 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-3 V4-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Generic PLA-CF @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9EtBYoxLtP3BuplP", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", - "pressure_advance": "0.028", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "9EtBYoxLtP3BuplP", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", + "pressure_advance": "0.028", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json deleted file mode 100644 index ed024bf161..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA-CF @Ender-5 Max-all.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA-CF @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "AHrCSGRui6sRCmQx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json index 8721ebfd57..1cddecd143 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 Max_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gMlu34zMrx0IX0GY", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "gMlu34zMrx0IX0GY", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json index 9b686f0f9a..74e0bd293d 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "kCiZBqAiO5Jc8RgA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "kCiZBqAiO5Jc8RgA", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json index a606564c5d..0757355a82 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1 SE_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dCS3zA3Z3QmsUMav", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "dCS3zA3Z3QmsUMav", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json index f0bd1b2659..062866dce8 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "6p7VGPRhpUjCVmrs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "6p7VGPRhpUjCVmrs", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json index 9e1ed31ae4..0c4ef3d146 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1C_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "eL5STunwFpRYoNwx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "eL5STunwFpRYoNwx", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json index aa6a91936f..088a22bf9c 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K1_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "RGCRo5t8SRI85Oyz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "RGCRo5t8SRI85Oyz", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json index be755fcebb..f6adbdd926 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Plus-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Generic PLA-CF @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "nZoZ1KL4YYwCdBYo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "nZoZ1KL4YYwCdBYo", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json index 2e54d39334..c9a217569f 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 Pro-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "eXbFz3H9NBjDv3fy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "eXbFz3H9NBjDv3fy", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json index 64c621680e..f0da0a4507 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2 SE-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Generic PLA-CF @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4PnBWB1vn3jXYDcV", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "4PnBWB1vn3jXYDcV", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json index c754999f33..e234a96124 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @K2-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic PLA-CF @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Vp7iPE7R08sUpbNM", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Vp7iPE7R08sUpbNM", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json index 60fa4e2bee..3f01d3a846 100644 --- a/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-CF @SPARKX i7-all.json @@ -1,183 +1,181 @@ { - "type": "filament", - "name": "Generic PLA-CF @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "KnXh5yN3mZ1zFs7t", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210][1.2,230]]", - "pressure_advance": "0.023", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "00006" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-CF @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "KnXh5yN3mZ1zFs7t", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210][1.2,230]]", + "pressure_advance": "0.023", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json index 1cf6f9ecd9..b1f9ee266f 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-3 V4-all.json @@ -1,147 +1,145 @@ { - "type": "filament", - "name": "Generic PLA-Silk @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4oKiaxCpzOVuq7JT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "16" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.068", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "4oKiaxCpzOVuq7JT", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "16" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.068", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json deleted file mode 100644 index 250c387982..0000000000 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Ender-5 Max-all.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "type": "filament", - "name": "Generic PLA-Silk @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zIrKl9P6Aer6sbiS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "55", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190],[1.0,220]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json index d2dab74d67..c793b2490e 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @Hi-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PLA-Silk @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yiXBAJwZHe0yW8MN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", - "pressure_advance": "0.026", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "yiXBAJwZHe0yW8MN", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,195],[1.0,195],[1.2,220]]", + "pressure_advance": "0.026", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json index 53f97c21f1..e0a29c56c5 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 Max_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "a8WrKJxnm4xNe1HK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "a8WrKJxnm4xNe1HK", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json index 92dc9c7f22..4f67885551 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "inmumMkeEas0Maw3", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "inmumMkeEas0Maw3", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json index 683eb16c4d..8f6c7fdadc 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1 SE_CFS-C-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "WaWMHS0yaaoiG98Q", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "WaWMHS0yaaoiG98Q", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[12.0,210],[18.0,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json index 7210792495..9d1700be22 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GpGBUE0LBkVKGtO1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GpGBUE0LBkVKGtO1", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json index 70e41a8078..2b2d9151a3 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1C_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "cZIEiMZQbIcvP57r", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "cZIEiMZQbIcvP57r", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json index 71b992c1fc..2fe542ff60 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K1_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "jJ8kRNXq2iz98qTh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "jJ8kRNXq2iz98qTh", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,205], [1.1,205], [1.4,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json index ba03b66ddd..406d0e71d7 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "8DTZKlZEArr9Exd7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "8DTZKlZEArr9Exd7", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json index 9e03746797..3c7d1e7373 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 Pro-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "hzbRwh2RichDUBMU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "hzbRwh2RichDUBMU", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.4,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json index 074fde8bfe..bbd1c2802e 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2 SE-all.json @@ -1,137 +1,135 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GdPDY6XouAmn2Sw4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GdPDY6XouAmn2Sw4", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json index 953edaba8b..3806eba238 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @K2-all.json @@ -1,162 +1,160 @@ { - "type": "filament", - "name": "Generic PLA-Silk @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "VhDF33Mt4h0SUIZH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "95" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "VhDF33Mt4h0SUIZH", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "95" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json index 30e6a20ebd..730f709814 100644 --- a/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA-Silk @SPARKX i7-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Generic PLA-Silk @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "veZcyFoa3uiS0oel", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.3,215],[1.6,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "00002" -} \ No newline at end of file + "type": "filament", + "name": "Generic PLA-Silk @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "veZcyFoa3uiS0oel", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.3,215],[1.6,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json index 59f53cbb9d..91c5497f52 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1 Max_CFS-C-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Generic PP @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "SpL486LVpIbISfQj", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PP" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "SpL486LVpIbISfQj", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PP" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K1C-all.json b/resources/profiles/Creality/filament/Generic PP @K1C-all.json index 4c8ac4d0d0..a417e0d801 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic PP @K1C-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "iY30mqnBJOeybNin", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PP" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K1C-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "iY30mqnBJOeybNin", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PP" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json index 1668dd04fa..e4d01f17b1 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1C_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic PP @K1C_CFS-C-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "27bAcMgt0jDcUvLF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PP" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K1C_CFS-C-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "27bAcMgt0jDcUvLF", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PP" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json index f82a464fe5..bc2e1342f4 100644 --- a/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K1_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic PP @K1_CFS-C-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "8c9klBh6C7O76Lgc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PP" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K1_CFS-C-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "8c9klBh6C7O76Lgc", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PP" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json index 9a5f2f3e53..9c04230e2a 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2 Plus-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PP @K2 Plus-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "sevgawCx7xvOFLXm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PP" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K2 Plus-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "sevgawCx7xvOFLXm", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PP" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json index 38ba4abe64..df4168d24e 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2 Pro-all.json @@ -1,142 +1,140 @@ { - "type": "filament", - "name": "Generic PP @K2 Pro-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "bAxYHHsv8COKiIFG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PP" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "45", - "customized_plate_temp_initial_layer": "45", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "35", - "epoxy_resin_plate_temp_initial_layer": "35", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K2 Pro-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "bAxYHHsv8COKiIFG", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PP" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "45", + "customized_plate_temp_initial_layer": "45", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "35", + "epoxy_resin_plate_temp_initial_layer": "35", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP @K2-all.json b/resources/profiles/Creality/filament/Generic PP @K2-all.json index 8f97f08d6b..5b033c2bb7 100644 --- a/resources/profiles/Creality/filament/Generic PP @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PP @K2-all.json @@ -1,142 +1,140 @@ { - "type": "filament", - "name": "Generic PP @K2-all", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "dMhTxpF3ipepME4p", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "40" - ], - "filament_density": [ - "0.91" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PP" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "45", - "customized_plate_temp_initial_layer": "45", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "35", - "epoxy_resin_plate_temp_initial_layer": "35", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.08", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00019" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP @K2-all", + "inherits": "fdm_filament_pp", + "from": "system", + "setting_id": "dMhTxpF3ipepME4p", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "40" + ], + "filament_density": [ + "0.91" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PP" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "45", + "customized_plate_temp_initial_layer": "45", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "35", + "epoxy_resin_plate_temp_initial_layer": "35", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.08", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json index 3f35f96343..53df078b03 100644 --- a/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PP-CF @K2 Plus-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic PP-CF @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "lHJWTFXiSKzWrX1A", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "23" - ], - "filament_density": [ - "1.01" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PP-CF" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00031" -} \ No newline at end of file + "type": "filament", + "name": "Generic PP-CF @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "lHJWTFXiSKzWrX1A", + "filament_id": "OFXkm8q1", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "23" + ], + "filament_density": [ + "1.01" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PP-CF" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json index 37176e53e1..68a2c3a2d9 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1 Max_CFS-C-all.json @@ -1,173 +1,171 @@ { - "type": "filament", - "name": "Generic PPS @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "OCjDOWQ5tgZgZB0R", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.38" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "320" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "320" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00017" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "OCjDOWQ5tgZgZB0R", + "filament_id": "OFq9svOz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.38" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "320" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "320" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS @K1C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1C-all.json index d15aeef469..e29921dab2 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS @K1C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "9HAL1MdIgM7fyklo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.38" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "320" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "320" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00017" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS @K1C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "9HAL1MdIgM7fyklo", + "filament_id": "OFq9svOz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.38" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "320" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "320" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json index d2af02918e..440948c387 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1C_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS @K1C_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "DVtMTnkEsr8o5Vzh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.38" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "320" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "320" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00017" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS @K1C_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "DVtMTnkEsr8o5Vzh", + "filament_id": "OFq9svOz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.38" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "320" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "320" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json index 69f7f95046..6b2cd34fc7 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K1_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS @K1_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "2HTODPgc4aIZ3XG8", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.38" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "320" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "320" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00017" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS @K1_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "2HTODPgc4aIZ3XG8", + "filament_id": "OFq9svOz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.38" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "320" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "320" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json index 964d010a97..a48497fb88 100644 --- a/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PPS @K2 Plus-all.json @@ -1,151 +1,149 @@ { - "type": "filament", - "name": "Generic PPS @K2 Plus-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "nGEhRfiizC0emg2M", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.38" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_length": [ - "0.4" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_threshold": [ - "0%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00017" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS @K2 Plus-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "nGEhRfiizC0emg2M", + "filament_id": "OFq9svOz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.38" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "310" + ], + "nozzle_temperature_initial_layer": [ + "310" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_threshold": [ + "0%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json index 47c8c9dc0e..c845f5cc04 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1 Max_CFS-C-all.json @@ -1,173 +1,171 @@ { - "type": "filament", - "name": "Generic PPS-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "Lo64lIBBBOVC7X0f", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "130" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "305" - ], - "nozzle_temperature_initial_layer": [ - "305" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "305" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00018" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "Lo64lIBBBOVC7X0f", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "130" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "305" + ], + "nozzle_temperature_initial_layer": [ + "305" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "305" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json index c8e56eb45b..69ea7be859 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS-CF @K1C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "IGMvRXBFMXKpLJmO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "130" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "305" - ], - "nozzle_temperature_initial_layer": [ - "305" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "305" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00018" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS-CF @K1C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "IGMvRXBFMXKpLJmO", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "130" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "305" + ], + "nozzle_temperature_initial_layer": [ + "305" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "305" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json index 5a937397ac..dc0e63e0b1 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1C_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "TaXzrJiCydy8MS3f", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "130" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "305" - ], - "nozzle_temperature_initial_layer": [ - "305" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "305" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00018" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "TaXzrJiCydy8MS3f", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "130" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "305" + ], + "nozzle_temperature_initial_layer": [ + "305" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "305" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json index ae80e3823a..4d4d30a0a7 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K1_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic PPS-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "KqN1ZnjnbBaLjVK5", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "130" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_flow_ratio": [ - "0.926" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PPS-CF" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "305" - ], - "nozzle_temperature_initial_layer": [ - "305" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "305" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "3" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00018" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "KqN1ZnjnbBaLjVK5", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "130" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_type": [ + "PPS-CF" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "305" + ], + "nozzle_temperature_initial_layer": [ + "305" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "305" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "3" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json index a538bfb7a1..e45f769de2 100644 --- a/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PPS-CF @K2 Plus-all.json @@ -1,144 +1,142 @@ { - "type": "filament", - "name": "Generic PPS-CF @K2 Plus-all", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "tIoEmhVZ47jiEg2Q", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "105" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "130" - ], - "filament_density": [ - "1.27" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PPS-CF" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "105" - ], - "textured_plate_temp_initial_layer": [ - "105" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.058", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00018" -} \ No newline at end of file + "type": "filament", + "name": "Generic PPS-CF @K2 Plus-all", + "inherits": "fdm_filament_pps", + "from": "system", + "setting_id": "tIoEmhVZ47jiEg2Q", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "105" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "130" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PPS-CF" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "310" + ], + "nozzle_temperature_initial_layer": [ + "310" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "105" + ], + "textured_plate_temp_initial_layer": [ + "105" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.058", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @Hi-all.json b/resources/profiles/Creality/filament/Generic PVA @Hi-all.json index a327524d0b..ff30a27f95 100644 --- a/resources/profiles/Creality/filament/Generic PVA @Hi-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @Hi-all.json @@ -1,136 +1,134 @@ { - "type": "filament", - "name": "Generic PVA @Hi-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "M3oK19GPHF4pXnE1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @Hi-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "M3oK19GPHF4pXnE1", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json index 468d910190..a2bb83f510 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1 Max_CFS-C-all.json @@ -1,128 +1,126 @@ { - "type": "filament", - "name": "Generic PVA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "GVvpekUbUn6UPw2h", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "4" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "GVvpekUbUn6UPw2h", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K1C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1C-all.json index 208b12d48e..2f949f1e05 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1C-all.json @@ -1,129 +1,127 @@ { - "type": "filament", - "name": "Generic PVA @K1C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "DnCH1X6KBNi1m0LO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "4" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K1C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "DnCH1X6KBNi1m0LO", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json index 5f2d2d535a..6e9b038448 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1C_CFS-C-all.json @@ -1,129 +1,127 @@ { - "type": "filament", - "name": "Generic PVA @K1C_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "16V0liTfFopXs9hz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "4" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K1C_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "16V0liTfFopXs9hz", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json index e527dfaddf..b698258f50 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K1_CFS-C-all.json @@ -1,129 +1,127 @@ { - "type": "filament", - "name": "Generic PVA @K1_CFS-C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "tomLVSBIaoZzTLo0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "4" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K1_CFS-C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "tomLVSBIaoZzTLo0", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json index 4e76a603d2..c34bf5aa64 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2 Plus-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Generic PVA @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "rCyivt0j7lJ11Obc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "rCyivt0j7lJ11Obc", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json index 3902a813d5..c6c4771162 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2 Pro-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Generic PVA @K2 Pro-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "Q3FPysmnAH6EI5QJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K2 Pro-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "Q3FPysmnAH6EI5QJ", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic PVA @K2-all.json b/resources/profiles/Creality/filament/Generic PVA @K2-all.json index 9d6376abe7..246340a80c 100644 --- a/resources/profiles/Creality/filament/Generic PVA @K2-all.json +++ b/resources/profiles/Creality/filament/Generic PVA @K2-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Generic PVA @K2-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "8ZOmE6qGjxxL8H0b", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "80" - ], - "filament_density": [ - "1.37" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_soluble": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "225" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00011" -} \ No newline at end of file + "type": "filament", + "name": "Generic PVA @K2-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "8ZOmE6qGjxxL8H0b", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "80" + ], + "filament_density": [ + "1.37" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_soluble": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "225" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json b/resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json new file mode 100644 index 0000000000..80e07cfff0 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic Speed PLA @Creality HF.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic Speed PLA @Creality HF", + "inherits": "fdm_filament_pla", + "renamed_from": "Creality HF Generic Speed PLA", + "from": "system", + "setting_id": "pklu1YSwmDOj6gRq", + "filament_id": "OFXmv5p0", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json index 65431307ec..f862a9cefd 100644 --- a/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic Support for PA @K2 Plus-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "Generic Support for PA @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "jqyOG2srSFDU3HCN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "38" - ], - "filament_density": [ - "1.17" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "0%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.034", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00023" -} \ No newline at end of file + "type": "filament", + "name": "Generic Support for PA @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "jqyOG2srSFDU3HCN", + "filament_id": "OFDtop41", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "38" + ], + "filament_density": [ + "1.17" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "0%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.034", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json index 130d40baff..e70cab2e96 100644 --- a/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic Support for PLA @K2 Plus-all.json @@ -1,162 +1,160 @@ { - "type": "filament", - "name": "Generic Support for PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "W6AEYBcheMyorkN1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "36" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "1" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00024" -} \ No newline at end of file + "type": "filament", + "name": "Generic Support for PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "W6AEYBcheMyorkN1", + "filament_id": "OFin64Qg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "36" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "1" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json index 2d59a7a434..8351d1d3db 100644 --- a/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic TPU 64D @K2 Plus-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Generic TPU 64D @K2 Plus-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "0qV6lVuaNDT3U2HK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00026" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU 64D @K2 Plus-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "0qV6lVuaNDT3U2HK", + "filament_id": "OFF3cuzT", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json index 5b50b540bf..2cbfbc8335 100644 --- a/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic TPU 64D @SPARKX i7-all.json @@ -1,185 +1,183 @@ { - "type": "filament", - "name": "Generic TPU 64D @SPARKX i7-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "MCElfOpYpjeuwZju", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "40" - ], - "eng_plate_temp_initial_layer": [ - "40" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "215" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.28", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "00026" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU 64D @SPARKX i7-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "MCElfOpYpjeuwZju", + "filament_id": "OFF3cuzT", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "40" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.28", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json new file mode 100644 index 0000000000..89fa6b290b --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-3V3-all.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality Ender-3V3-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @Ender-3V3-all;Creality Generic TPU Ender-3V3-all", + "from": "system", + "setting_id": "ZufJdJseoFNQC66B", + "instantiation": "true", + "hot_plate_temp": [ + "30" + ], + "hot_plate_temp_initial_layer": [ + "30" + ], + "textured_plate_temp": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Creality Ender-3 V3 SE 0.2 nozzle", + "Creality Ender-3 V3 SE 0.4 nozzle", + "Creality Ender-3 V3 SE 0.6 nozzle", + "Creality Ender-3 V3 SE 0.8 nozzle", + "Creality Ender-3 V3 KE 0.4 nozzle", + "Creality Ender-3 V3 0.4 nozzle", + "Creality Ender-3 V3 0.6 nozzle", + "Creality Ender-3 V3 Plus 0.4 nozzle", + "Creality Ender-3 V3 Plus 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json new file mode 100644 index 0000000000..c90e9ddcd4 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Ender-5Max-all.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality Ender-5Max-all", + "renamed_from": "Creality Generic TPU @Ender-5Max-all;Creality Generic TPU Ender-5Max-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "XqW2iYrRTVlXuCwD", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": "0", + "activate_chamber_temp_control": "0", + "additional_cooling_fan_speed": "0", + "chamber_temperature": "35", + "close_fan_the_first_x_layers": "1", + "compatible_printers": [ + "Creality Ender-5 Max 0.4 nozzle" + ], + "complete_print_exhaust_fan_speed": "80", + "cool_plate_temp": "45", + "cool_plate_temp_initial_layer": "45", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "during_print_exhaust_fan_speed": "60", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "eng_plate_temp": "35", + "eng_plate_temp_initial_layer": "35", + "fan_cooling_layer_time": "100", + "fan_max_speed": "100", + "fan_min_speed": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": "30", + "filament_diameter": "1.75", + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": "1", + "filament_is_support": "0", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_before_wipe": "nil", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_retract_restart_extra": "nil", + "filament_retract_when_changing_layer": "nil", + "filament_retraction_length": "3", + "filament_retraction_minimum_travel": "nil", + "filament_retraction_speed": "30", + "filament_shrink": "100%", + "filament_soluble": "0", + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": "0", + "filament_type": [ + "TPU" + ], + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "filament_vendor": [ + "Generic" + ], + "filament_wipe": "nil", + "filament_wipe_distance": "nil", + "filament_z_hop": "nil", + "filament_z_hop_types": "nil", + "full_fan_speed_layer": "0", + "hot_plate_temp": "45", + "hot_plate_temp_initial_layer": "45", + "nozzle_temperature": "195", + "nozzle_temperature_initial_layer": "195", + "nozzle_temperature_range_high": "220", + "nozzle_temperature_range_low": "200", + "overhang_fan_speed": "100", + "overhang_fan_threshold": "50%", + "pressure_advance": "0.02", + "reduce_fan_stop_start_freq": "1", + "required_nozzle_HRC": "0", + "slow_down_for_layer_cooling": "1", + "slow_down_layer_time": "8", + "slow_down_min_speed": "5", + "support_material_interface_fan_speed": "-1", + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": "45", + "textured_plate_temp_initial_layer": "45" +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json new file mode 100644 index 0000000000..1a46bfc0b5 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality Hi-all.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality Hi-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @Hi-all;Creality Generic TPU Hi-all", + "from": "system", + "setting_id": "P42mcGCETNdcZchS", + "instantiation": "true", + "hot_plate_temp": [ + "30" + ], + "hot_plate_temp_initial_layer": [ + "30" + ], + "textured_plate_temp": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n" + ], + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json new file mode 100644 index 0000000000..d2cd19bb7c --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality K1-all.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality K1-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @K1-all;Creality Generic TPU K1-all", + "from": "system", + "setting_id": "7zTgnS8bIEkkhqtB", + "instantiation": "true", + "hot_plate_temp": [ + "30" + ], + "hot_plate_temp_initial_layer": [ + "30" + ], + "textured_plate_temp": [ + "30" + ], + "textured_plate_temp_initial_layer": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "slow_down_layer_time": [ + "5" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "compatible_printers": [ + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json b/resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json new file mode 100644 index 0000000000..9a8896ea23 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality K2-all.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality K2-all", + "inherits": "Generic TPU @Creality", + "renamed_from": "Creality Generic TPU @K2-all;Creality Generic TPU K2-all", + "from": "system", + "setting_id": "C9PAmCIDhCAthMuK", + "instantiation": "true", + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "slow_down_layer_time": [ + "8" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "compatible_printers": [ + "Creality K2 0.2 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle", + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle", + "Creality K2 Pro 0.2 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Creality.json b/resources/profiles/Creality/filament/Generic TPU @Creality.json new file mode 100644 index 0000000000..0277d14563 --- /dev/null +++ b/resources/profiles/Creality/filament/Generic TPU @Creality.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic TPU @Creality", + "inherits": "fdm_filament_tpu", + "renamed_from": "Creality Generic TPU", + "from": "system", + "setting_id": "eCzlxPg3piTZEui4", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Creality CR-10 V3 0.4 nozzle", + "Creality CR-10 V3 0.6 nozzle", + "Creality K1 (0.4 nozzle)", + "Creality K1 (0.6 nozzle)", + "Creality K1 (0.8 nozzle)", + "Creality K1 Max (0.4 nozzle)", + "Creality K1 Max (0.6 nozzle)", + "Creality K1 Max (0.8 nozzle)", + "Creality Sermoon V1 0.4 nozzle", + "Creality CR-10 SE 0.2 nozzle", + "Creality CR-10 SE 0.4 nozzle", + "Creality CR-10 SE 0.6 nozzle", + "Creality CR-10 SE 0.8 nozzle", + "Creality Ender-3 S1 Pro 0.4 nozzle", + "Creality Ender-3 S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json index d5582bb484..6daccee813 100644 --- a/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @Ender-3 V4-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Generic TPU @Ender-3 V4-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "iJozGH7KvOHz8smj", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "1.6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.46", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @Ender-3 V4-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "iJozGH7KvOHz8smj", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "1.6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.46", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json deleted file mode 100644 index 940f0bdb03..0000000000 --- a/resources/profiles/Creality/filament/Generic TPU @Ender-5 Max-all.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "type": "filament", - "name": "Generic TPU @Ender-5 Max-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "KPUcdZyegXYeyHOL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json index cb08115e87..a1bc6f0e61 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 Max_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Generic TPU @K1 Max_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "h9xCBpYO0jR5I5PG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1 Max_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "h9xCBpYO0jR5I5PG", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json index 46e2de4629..b8083ab997 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 SE-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic TPU @K1 SE-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "euSJIgcrA95IBrYT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.8", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1 SE-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "euSJIgcrA95IBrYT", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.8", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json index 45926b0b66..d3bf797574 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1 SE_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Generic TPU @K1 SE_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "nHZN4EVW9T6dcG2v", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.8", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1 SE_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "nHZN4EVW9T6dcG2v", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.8", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K1C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1C-all.json index bcfcbd4836..36e01b8138 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1C-all.json @@ -1,151 +1,149 @@ { - "type": "filament", - "name": "Generic TPU @K1C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "170MDhVcDn1dM9eK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "170MDhVcDn1dM9eK", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json index 7d929554a8..a62959b7e3 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1C_CFS-C-all.json @@ -1,151 +1,149 @@ { - "type": "filament", - "name": "Generic TPU @K1C_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "XyaRiGJD4khUkwUe", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1C_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "XyaRiGJD4khUkwUe", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json index 56491b9100..2b0def8d3f 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K1_CFS-C-all.json @@ -1,151 +1,149 @@ { - "type": "filament", - "name": "Generic TPU @K1_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "5e2FELlHtgaCc0K3", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "0" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "0" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Normal Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K1_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "5e2FELlHtgaCc0K3", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "0" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "0" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Normal Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json index 46aee6149c..b1b97a4e9a 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Generic TPU @K2 Plus-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "kcwtAbqZkxRwtCE3", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.3", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K2 Plus-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "kcwtAbqZkxRwtCE3", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.3", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json index 62451e782a..f30cb1b863 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 Pro-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic TPU @K2 Pro-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "AZzxNf1i5qruVcBL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.3", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K2 Pro-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "AZzxNf1i5qruVcBL", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.3", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json b/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json index 04348049b8..237974d0ae 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2 SE-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Generic TPU @K2 SE-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "pjhl2ytSAdJgb8tc", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K2 SE-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "pjhl2ytSAdJgb8tc", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @K2-all.json b/resources/profiles/Creality/filament/Generic TPU @K2-all.json index 4967c237e0..5b72422498 100644 --- a/resources/profiles/Creality/filament/Generic TPU @K2-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @K2-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Generic TPU @K2-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "sjSoPLBLcYw8AJKV", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.3", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @K2-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "sjSoPLBLcYw8AJKV", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.3", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json index cd8b519c2e..9bcc5709be 100644 --- a/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic TPU @SPARKX i7-all.json @@ -1,172 +1,170 @@ { - "type": "filament", - "name": "Generic TPU @SPARKX i7-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "v6uEvu5qbKX9kE7T", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "40" - ], - "eng_plate_temp_initial_layer": [ - "40" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "1.8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "00005" -} \ No newline at end of file + "type": "filament", + "name": "Generic TPU @SPARKX i7-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "v6uEvu5qbKX9kE7T", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "40" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "1.8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json index c7ae970179..c6e0cee888 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1 Max_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "HP Ultra PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "mNVwdo8Tu3M8MAMQ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "18001" -} \ No newline at end of file + "type": "filament", + "name": "HP Ultra PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "mNVwdo8Tu3M8MAMQ", + "filament_id": "OFCJpR7a", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json index e02b477267..a960581182 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "HP Ultra PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "7mN3GsHHQb2sziH9", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "18001" -} \ No newline at end of file + "type": "filament", + "name": "HP Ultra PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "7mN3GsHHQb2sziH9", + "filament_id": "OFCJpR7a", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json index c6bb9bd547..933b225962 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1C_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "HP Ultra PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "xYIC2SFJ9IeGcVuC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "18001" -} \ No newline at end of file + "type": "filament", + "name": "HP Ultra PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "xYIC2SFJ9IeGcVuC", + "filament_id": "OFCJpR7a", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json index 1eb74d0999..326ae95b43 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K1_CFS-C-all.json @@ -1,160 +1,158 @@ { - "type": "filament", - "name": "HP Ultra PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "HfPCXm8gwCtZnkjJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "18001" -} \ No newline at end of file + "type": "filament", + "name": "HP Ultra PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "HfPCXm8gwCtZnkjJ", + "filament_id": "OFCJpR7a", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json index 399c357b29..fb92b41577 100644 --- a/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP Ultra PLA @K2 Plus-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "HP Ultra PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yHu1ZjX5BoH8dw5z", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "18001" -} \ No newline at end of file + "type": "filament", + "name": "HP Ultra PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "yHu1ZjX5BoH8dw5z", + "filament_id": "OFCJpR7a", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json deleted file mode 100644 index b2d283fae0..0000000000 --- a/resources/profiles/Creality/filament/HP-ASA @Ender-5 Max-all.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "type": "filament", - "name": "HP-ASA @Ender-5 Max-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "JzsojF2Um23vm2qT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.88" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "55", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,240],[8.0,250],[12.0,260]]", - "pressure_advance": "0.032", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json index 3118bd2d96..92f0630114 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1 Max_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "HP-ASA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "RInV2wT54da08tvW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "100", - "epoxy_resin_plate_temp_initial_layer": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.046", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "RInV2wT54da08tvW", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "100", + "epoxy_resin_plate_temp_initial_layer": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.046", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K1C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1C-all.json index 95e31de6b3..abf38f523a 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "HP-ASA @K1C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "Iw7dIqafCnOnBgDE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "100", - "epoxy_resin_plate_temp_initial_layer": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.046", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K1C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "Iw7dIqafCnOnBgDE", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "100", + "epoxy_resin_plate_temp_initial_layer": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.046", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json index 6ea06b5eb7..bb6bc6e1bd 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1C_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "HP-ASA @K1C_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "A5zG0GNhQnOlhTOU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "100", - "epoxy_resin_plate_temp_initial_layer": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.046", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K1C_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "A5zG0GNhQnOlhTOU", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "100", + "epoxy_resin_plate_temp_initial_layer": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.046", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json index 30411e4028..50c39a8f96 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K1_CFS-C-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "HP-ASA @K1_CFS-C-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "umNqcyYhx49DC2Ki", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "100", - "epoxy_resin_plate_temp_initial_layer": "100", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.046", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K1_CFS-C-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "umNqcyYhx49DC2Ki", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "100", + "epoxy_resin_plate_temp_initial_layer": "100", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.046", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json index 3babd544ef..6aadd53bf2 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 Plus-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "HP-ASA @K2 Plus-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "cH8oKyQX9jde7Bf8", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "100" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K2 Plus-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "cH8oKyQX9jde7Bf8", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "100" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json index a508566f74..e4c917d083 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 Pro-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "HP-ASA @K2 Pro-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "HxNkP2GYbTD7yrUZ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "100" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K2 Pro-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "HxNkP2GYbTD7yrUZ", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "100" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json b/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json index 68cbfb27d7..3ef8e7467e 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2 SE-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "HP-ASA @K2 SE-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "TbIud8JJSMQ0nYz0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K2 SE-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "TbIud8JJSMQ0nYz0", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-ASA @K2-all.json b/resources/profiles/Creality/filament/HP-ASA @K2-all.json index b7d3829cda..da6c53d8a3 100644 --- a/resources/profiles/Creality/filament/HP-ASA @K2-all.json +++ b/resources/profiles/Creality/filament/HP-ASA @K2-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "HP-ASA @K2-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "j9EXhFUKSE3c2awm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "29" - ], - "filament_density": [ - "1.15" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "20" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "19001" -} \ No newline at end of file + "type": "filament", + "name": "HP-ASA @K2-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "j9EXhFUKSE3c2awm", + "filament_id": "OFPHLnoe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "29" + ], + "filament_density": [ + "1.15" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "20" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json b/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json index e627f5c5e8..87a84f8781 100644 --- a/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @Ender-3 V4-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "HP-TPU @Ender-3 V4-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "x7fQ7w2dCpvVfOLw", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "28" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.36", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @Ender-3 V4-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "x7fQ7w2dCpvVfOLw", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "28" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.36", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json b/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json deleted file mode 100644 index c25294789b..0000000000 --- a/resources/profiles/Creality/filament/HP-TPU @Ender-5 Max-all.json +++ /dev/null @@ -1,168 +0,0 @@ -{ - "type": "filament", - "name": "HP-TPU @Ender-5 Max-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "7Y7KjqVEXrce3jKO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/HP-TPU @Hi-all.json b/resources/profiles/Creality/filament/HP-TPU @Hi-all.json index 244f173f41..fa70245521 100644 --- a/resources/profiles/Creality/filament/HP-TPU @Hi-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @Hi-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "HP-TPU @Hi-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "x5v3sNNZYWbPIsPN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.36", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @Hi-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "x5v3sNNZYWbPIsPN", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.36", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json index 8ed2212fa9..402f2ee5aa 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 Max_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "HP-TPU @K1 Max_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "eY1DCIW7WyTnmRYP", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.32", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1 Max_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "eY1DCIW7WyTnmRYP", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.32", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json index 5c83cda993..10df3a7aac 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 SE-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "HP-TPU @K1 SE-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "3YN3jfV75qyfUZWm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "28" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Auto Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "215" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1 SE-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "3YN3jfV75qyfUZWm", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "28" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Auto Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json index f251c2e7db..5c684617fd 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1 SE_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "HP-TPU @K1 SE_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "WnGZuBiSGSoGru8C", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_cost": [ - "28" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Auto Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "215" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1 SE_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "WnGZuBiSGSoGru8C", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_cost": [ + "28" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Auto Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1C-all.json index 6559456723..b05e59eef3 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "HP-TPU @K1C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "USI47rUnoJXanAFI", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.32", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "USI47rUnoJXanAFI", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.32", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json index 825d30d323..fbc05c1853 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1C_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "HP-TPU @K1C_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "rCn7lAeHr77FziYn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.32", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1C_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "rCn7lAeHr77FziYn", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.32", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json b/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json index 9a950cce1d..27315ae2b3 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K1_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "HP-TPU @K1_CFS-C-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "N3NDaZzc5XyUm3b1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.32", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K1_CFS-C-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "N3NDaZzc5XyUm3b1", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.32", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json index 19195696be..06c8959858 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 Plus-all.json @@ -1,172 +1,170 @@ { - "type": "filament", - "name": "HP-TPU @K2 Plus-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "CNm35YCN42NAgbU1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K2 Plus-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "CNm35YCN42NAgbU1", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json index 07423945cb..5207b1fb9a 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 Pro-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "HP-TPU @K2 Pro-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "tfrclH3VqZ4nPzi7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K2 Pro-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "tfrclH3VqZ4nPzi7", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json b/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json index df44f03a65..27161d5505 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2 SE-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "HP-TPU @K2 SE-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "IgniOuVC4DtRnxS0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "40" - ], - "eng_plate_temp_initial_layer": [ - "40" - ], - "filament_cost": [ - "28" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.4", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,190],[1.3,220]]", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K2 SE-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "IgniOuVC4DtRnxS0", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "40" + ], + "filament_cost": [ + "28" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.4", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[1.2,190],[1.3,220]]", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @K2-all.json b/resources/profiles/Creality/filament/HP-TPU @K2-all.json index 4d1285f815..6e2f542b0c 100644 --- a/resources/profiles/Creality/filament/HP-TPU @K2-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @K2-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "HP-TPU @K2-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "l9E5f6JLwfKo4aG9", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "overhang_fan_threshold": [ - "95%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @K2-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "l9E5f6JLwfKo4aG9", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "overhang_fan_threshold": [ + "95%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json b/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json index 796ce1e78f..fd4b842959 100644 --- a/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/HP-TPU @SPARKX i7-all.json @@ -1,183 +1,181 @@ { - "type": "filament", - "name": "HP-TPU @SPARKX i7-all", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "oINMsmmxspqPOW8b", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "35" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "28" - ], - "filament_density": [ - "1.26" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1.1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "40" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "50%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "textured_plate_temp": [ - "40" - ], - "textured_plate_temp_initial_layer": [ - "40" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "40", - "customized_plate_temp_initial_layer": "40", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "30", - "epoxy_resin_plate_temp_initial_layer": "30", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.4", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "10001" -} \ No newline at end of file + "type": "filament", + "name": "HP-TPU @SPARKX i7-all", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "oINMsmmxspqPOW8b", + "filament_id": "OFGcMkEB", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "35" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "28" + ], + "filament_density": [ + "1.26" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1.1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "40" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_threshold": [ + "50%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "textured_plate_temp": [ + "40" + ], + "textured_plate_temp_initial_layer": [ + "40" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "40", + "customized_plate_temp_initial_layer": "40", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "30", + "epoxy_resin_plate_temp_initial_layer": "30", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.4", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json index 3f038190b1..f0b164f891 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @Ender-3 V4-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Hyper ABS @Ender-3 V4-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "utCV4AwQPV4Ums35", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "90", - "customized_plate_temp_initial_layer": "90", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", - "pressure_advance": "0.038", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @Ender-3 V4-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "utCV4AwQPV4Ums35", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "90", + "customized_plate_temp_initial_layer": "90", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,240],[0.8,240],[1.0,260]]", + "pressure_advance": "0.038", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json deleted file mode 100644 index 097434bdc4..0000000000 --- a/resources/profiles/Creality/filament/Hyper ABS @Ender-5 Max-all.json +++ /dev/null @@ -1,166 +0,0 @@ -{ - "type": "filament", - "name": "Hyper ABS @Ender-5 Max-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "jPfMyNBquP31h2Eb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "20" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.92" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "20" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "5" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,230],[5.0,250],[10.0,260]]", - "pressure_advance": "0.025", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json b/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json index 5e3b9d7de7..cea3dbeaf2 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @Hi-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Hyper ABS @Hi-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "LO4MgYNCtAlMyD11", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @Hi-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "LO4MgYNCtAlMyD11", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json index f2a095c235..5ebb98f5ec 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 Max_CFS-C-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Hyper ABS @K1 Max_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "PjT9gDai5g9iVBf3", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1 Max_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "PjT9gDai5g9iVBf3", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json index 35871f8ac5..41d9eb71e1 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 SE-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Hyper ABS @K1 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "dWKTm246jz7e4QRy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "dWKTm246jz7e4QRy", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json index f160827598..2e144ab3f0 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1 SE_CFS-C-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Hyper ABS @K1 SE_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "GCj4hOsf9S9DqFdh", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1 SE_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "GCj4hOsf9S9DqFdh", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,20],[6.0,240],[10.0,250]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json index 0d57ad0380..4892e7f33e 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1C-all.json @@ -1,170 +1,168 @@ { - "type": "filament", - "name": "Hyper ABS @K1C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "DlsL5Ex7MQ54Yje6", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "DlsL5Ex7MQ54Yje6", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json index 78b1d7d719..a94b9da7d7 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1C_CFS-C-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Hyper ABS @K1C_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "psgahhKiXE7koRWY", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1C_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "psgahhKiXE7koRWY", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json index e6ef2cfb6c..3d2ad45efd 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K1_CFS-C-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Hyper ABS @K1_CFS-C-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "YbYUo1FfZlLJg4zm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K1_CFS-C-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "YbYUo1FfZlLJg4zm", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json index bbef4b2148..3b7f42cf81 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 Plus-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Hyper ABS @K2 Plus-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "lGXmZiCrrwfTeERC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K2 Plus-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "lGXmZiCrrwfTeERC", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json index edd4f7a352..90e79e46fd 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 Pro-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Hyper ABS @K2 Pro-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "01z4QYF33KN1OsBM", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K2 Pro-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "01z4QYF33KN1OsBM", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json index 4710c1f7b1..06a397761f 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2 SE-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "Hyper ABS @K2 SE-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "X3WH0zaUg8WyahsO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "1" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K2 SE-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "X3WH0zaUg8WyahsO", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "1" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper ABS @K2-all.json b/resources/profiles/Creality/filament/Hyper ABS @K2-all.json index 6aa0b2f736..7b0696e39c 100644 --- a/resources/profiles/Creality/filament/Hyper ABS @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper ABS @K2-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Hyper ABS @K2-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "B0mfi4oxoUIDW2Lv", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "22" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "03001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper ABS @K2-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "B0mfi4oxoUIDW2Lv", + "filament_id": "OF8GnyFU", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "22" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json index efafa60017..f33623ab68 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @Hi-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Hyper L-W PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "snqNKAAquQRA20Ik", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.84" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "snqNKAAquQRA20Ik", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.84" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json index 4b8ed94936..6627a67132 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 Max_CFS-C-all.json @@ -1,170 +1,168 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "nhmKUDLK6wxVO1vH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_long_retractions_when_cut": "nil", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_retraction_distances_when_cut": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_stamping_distance": "0", - "filament_stamping_loading_speed": "0", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "idle_temperature": "0", - "material_flow_dependent_temperature": "0", - "pellet_flow_coefficient": "0.4157", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "nhmKUDLK6wxVO1vH", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_long_retractions_when_cut": "nil", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_retraction_distances_when_cut": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_stamping_distance": "0", + "filament_stamping_loading_speed": "0", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "idle_temperature": "0", + "material_flow_dependent_temperature": "0", + "pellet_flow_coefficient": "0.4157", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json index c07d9981db..fe2b9f7363 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE-all.json @@ -1,148 +1,146 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "MEaOGHy3pWSd1Gj3", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "MEaOGHy3pWSd1Gj3", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json index 3d69f8e7ae..8327a3c474 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1 SE_CFS-C-all.json @@ -1,148 +1,146 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "xCioj1jNunIX2GBK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "xCioj1jNunIX2GBK", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json index 7193bf835b..2e44a0a1e1 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "xye2OhGeKqg44ya7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "xye2OhGeKqg44ya7", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json index 0757ec1fc8..7aee7bad01 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1C_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "EXxV0Fo4rexuxidn", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "EXxV0Fo4rexuxidn", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json index 387a549dbc..b104bf3181 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K1_CFS-C-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "lfP5u92yfXRedGuy", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.09", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "lfP5u92yfXRedGuy", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.09", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json index 2f3c64a6e1..8a6a13f3d5 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Plus-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "U1kZq5P21qnFe5NC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "U1kZq5P21qnFe5NC", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json index 902e373f86..22fa11fcbd 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2 Pro-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4O7avB3eSA1pKDxz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.76" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "4O7avB3eSA1pKDxz", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.76" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json b/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json index a0f31de0c4..36aa61a725 100644 --- a/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper L-W PLA @K2-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Hyper L-W PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gkzTfze1OQmP8zgE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "48.9" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.85" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "01002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper L-W PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "gkzTfze1OQmP8zgE", + "filament_id": "OF70zbGS", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "48.9" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json b/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json index a6873b4dc2..c73ae6faaf 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @Hi-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Hyper Luminous @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "8PNVp96HmPvjOBVq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "299", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.052", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle", - "Creality Hi 0.8 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "8PNVp96HmPvjOBVq", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "299", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.052", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle", + "Creality Hi 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json index df72136acc..33bbebc96c 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K1C-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Hyper Luminous @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "MHaJR8CAtuSwUOIx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,210], [1.2,210], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "MHaJR8CAtuSwUOIx", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,210], [1.2,210], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json index 13670be4d9..c1db54775e 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2 Plus-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Luminous @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zY0hIYvTg3v2wyOJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.2,210],[1.5,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zY0hIYvTg3v2wyOJ", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.2,210],[1.5,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json index eb7d7f3f03..04cf190fe5 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2 Pro-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Luminous @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "14znq0LtaUx1RUP5", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.2,210],[1.5,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "14znq0LtaUx1RUP5", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.2,210],[1.5,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json b/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json index 86a72078c6..d1f28127d9 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @K2-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Luminous @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zD3EOJFcZOuhQHmk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zD3EOJFcZOuhQHmk", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json index b4991bc3ff..c15cf1eb24 100644 --- a/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Luminous @SPARKX i7-all.json @@ -1,183 +1,181 @@ { - "type": "filament", - "name": "Hyper Luminous @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "DKQgoZvvkOBsEJCA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "28.9" - ], - "filament_density": [ - "1.3" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.028", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "01003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Luminous @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "DKQgoZvvkOBsEJCA", + "filament_id": "OFC1PzXz", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "28.9" + ], + "filament_density": [ + "1.3" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.028", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json b/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json index 7576185076..8e9c401520 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @Hi-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper Marble @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "K6SS7X2jvyXsEgaR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.5,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "K6SS7X2jvyXsEgaR", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.5,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json index 3475d6f5aa..03b8df1632 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1 Max_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "8dYJk1STVIRB2JWw", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "299", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "8dYJk1STVIRB2JWw", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "299", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json index fb9bc8c08c..442f07f967 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "SWzt8p5UBfgMauNE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "SWzt8p5UBfgMauNE", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json index 63ab61c68e..faf5d0decc 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1C_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gZLo5W0F3NLFCkvg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "gZLo5W0F3NLFCkvg", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json index 0e3f217669..3431ed9ef6 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K1_CFS-C-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "JDAiAZKjxEoWKDwW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "JDAiAZKjxEoWKDwW", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json index bce1cbb5f0..90d07ec109 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 Plus-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "X2fgUYasv7lNEoqK", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "3" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.2,200],[1.1,200],[1.2,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "X2fgUYasv7lNEoqK", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "35" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "3" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.2,200],[1.1,200],[1.2,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json index 4c77e3e4ab..5713b0658d 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 Pro-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CITMYaFiwchQ3xoo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "CITMYaFiwchQ3xoo", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json index 706230c0b9..3173e61657 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2 SE-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Hyper Marble @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "PyazquNRWsPUM2bt", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "3" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "244", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "PyazquNRWsPUM2bt", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "3" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "244", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @K2-all.json b/resources/profiles/Creality/filament/Hyper Marble @K2-all.json index 527ec67332..db38166659 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @K2-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper Marble @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "YxvU7wRdgrtckCa7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "YxvU7wRdgrtckCa7", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json index 0746b42880..5b053dbfb6 100644 --- a/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Marble @SPARKX i7-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "Hyper Marble @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "teddd8l8D8ASmYQs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "23.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "29001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Marble @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "teddd8l8D8ASmYQs", + "filament_id": "OFLzx3J4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "23.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json index 01aeb86cdf..8898401856 100644 --- a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Plus-all.json @@ -1,199 +1,197 @@ { - "type": "filament", - "name": "Hyper PA6-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ns7xy8v6L92XsDy2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "45.9" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "12005" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PA6-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "ns7xy8v6L92XsDy2", + "filament_id": "OFn2GlhY", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "45.9" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json index 40139cf279..3b38cfe77c 100644 --- a/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PA6-CF @K2 Pro-all.json @@ -1,199 +1,197 @@ { - "type": "filament", - "name": "Hyper PA6-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "FNuPosBKWyq79bjR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "45.9" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "12005" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PA6-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "FNuPosBKWyq79bjR", + "filament_id": "OFn2GlhY", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "45.9" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json index 2f8bcbbacb..23cdb0975c 100644 --- a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Plus-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Hyper PA612-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "2xgxuOoGNlO9lEs4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "59.9" - ], - "filament_density": [ - "1.03" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "12004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PA612-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "2xgxuOoGNlO9lEs4", + "filament_id": "OFhkN0a7", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "59.9" + ], + "filament_density": [ + "1.03" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json index 3f4be12bf3..08b65aaff2 100644 --- a/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PA612-CF @K2 Pro-all.json @@ -1,193 +1,191 @@ { - "type": "filament", - "name": "Hyper PA612-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "sDTzKRsBAaiOxA5I", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "59.9" - ], - "filament_density": [ - "1.03" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "12004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PA612-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "sDTzKRsBAaiOxA5I", + "filament_id": "OFhkN0a7", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "59.9" + ], + "filament_density": [ + "1.03" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.048", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json index 3311a96082..9b72dd5cb9 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1 Max_CFS-C-all.json @@ -1,196 +1,194 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "98Dhy7By3Sp6lISa", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "98Dhy7By3Sp6lISa", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json index b06066ce46..47b8eac520 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C-all.json @@ -1,197 +1,195 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K1C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "SpXh27tlQXEbxDUk", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K1C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "SpXh27tlQXEbxDUk", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json index 1e89fbaa08..c2f554abca 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1C_CFS-C-all.json @@ -1,197 +1,195 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ShD1PW5HWkjnHXrd", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "ShD1PW5HWkjnHXrd", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json index bf05bb6310..564d6b08e9 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K1_CFS-C-all.json @@ -1,197 +1,195 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "wzYQ0bizO8RDWjSX", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "wzYQ0bizO8RDWjSX", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "105" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json index df43ebb973..57a1904fdd 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Plus-all.json @@ -1,194 +1,192 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "NneN5bFLYVXNPzlM", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "90" - ], - "cool_plate_temp_initial_layer": [ - "90" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "90" - ], - "textured_plate_temp_initial_layer": [ - "90" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "NneN5bFLYVXNPzlM", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json index 60e6f6e84e..0e9eb9a6c1 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2 Pro-all.json @@ -1,184 +1,182 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "wl8JhmCp9Be3cYMJ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.042", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "wl8JhmCp9Be3cYMJ", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.042", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json index 39fc5e217b..7077971f51 100644 --- a/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PAHT-CF @K2-all.json @@ -1,184 +1,182 @@ { - "type": "filament", - "name": "Hyper PAHT-CF @K2-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "jtElnQJxHKLDQSHo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "74.9" - ], - "filament_density": [ - "1.06" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "100", - "customized_plate_temp_initial_layer": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "12003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PAHT-CF @K2-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "jtElnQJxHKLDQSHo", + "filament_id": "OF4APyxe", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "74.9" + ], + "filament_density": [ + "1.06" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "100", + "customized_plate_temp_initial_layer": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json index 43f1d53cdc..a1c7e7d72f 100644 --- a/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PC @K2 Plus-all.json @@ -1,171 +1,169 @@ { - "type": "filament", - "name": "Hyper PC @K2 Plus-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "zhN9dkzeJWtsAKj8", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "110" - ], - "cool_plate_temp_initial_layer": [ - "110" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "100" - ], - "filament_density": [ - "1.19" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.03", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "07002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PC @K2 Plus-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "zhN9dkzeJWtsAKj8", + "filament_id": "OFUF7oA4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "110" + ], + "cool_plate_temp_initial_layer": [ + "110" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "100" + ], + "filament_density": [ + "1.19" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.03", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json index 3668981c2b..d0d64e7b44 100644 --- a/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PC @K2 Pro-all.json @@ -1,173 +1,171 @@ { - "type": "filament", - "name": "Hyper PC @K2 Pro-all", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "6NMso8XW9632vz5s", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "37" - ], - "filament_density": [ - "1.19" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "70%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "07002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PC @K2 Pro-all", + "inherits": "fdm_filament_pc", + "from": "system", + "setting_id": "6NMso8XW9632vz5s", + "filament_id": "OFUF7oA4", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "37" + ], + "filament_density": [ + "1.19" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json index aa4a1da8b8..0ee32c0b6b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Hyper PETG @Ender-3 V4-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "EDl8nfZRP1T8CBOs", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,230],[1.2,250]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @Ender-3 V4-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "EDl8nfZRP1T8CBOs", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,230],[1.2,250]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json deleted file mode 100644 index fe1f0fbded..0000000000 --- a/resources/profiles/Creality/filament/Hyper PETG @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PETG @Ender-5 Max-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "nr57CpZ5PwPmcOCR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,220],[1.0,240]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json b/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json index fdc782abad..ad9fd276d2 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @Hi-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Hyper PETG @Hi-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "ZKLZLxxyjfbdAYZ4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", - "pressure_advance": "0.066", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @Hi-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "ZKLZLxxyjfbdAYZ4", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", + "pressure_advance": "0.066", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json index 89090724f4..0a066f747d 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 Max_CFS-C-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Hyper PETG @K1 Max_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "Bcgdo3fx6xntQ68t", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1 Max_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "Bcgdo3fx6xntQ68t", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json index 85d9b0fc2d..cc22c69934 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 SE-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper PETG @K1 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "huvZfn5aMetsY1qr", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.068", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "huvZfn5aMetsY1qr", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.068", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json index afd34c32d2..226e28d3b5 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1 SE_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper PETG @K1 SE_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "cyl9yuFghMkUh21u", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.068", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1 SE_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "cyl9yuFghMkUh21u", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.068", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json index b4f548e7d8..db25402dd2 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1C-all.json @@ -1,155 +1,153 @@ { - "type": "filament", - "name": "Hyper PETG @K1C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "HYCr4pafWTw3btkg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.072", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "HYCr4pafWTw3btkg", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.072", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json index a132ab6ba7..f7407295d3 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1C_CFS-C-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Hyper PETG @K1C_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "6vOJLefZfaXZTSae", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.072", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1C_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "6vOJLefZfaXZTSae", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.072", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json index 1d4207f047..ce72e4463d 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K1_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper PETG @K1_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "FeLhYkEwkavAVWlq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.5" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", - "pressure_advance": "0.068", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K1_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "FeLhYkEwkavAVWlq", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.5" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,220],[5.0,230],[14.0,240],[23.0,250]]", + "pressure_advance": "0.068", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json index 2b65adafad..18a4380b95 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 Plus-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Hyper PETG @K2 Plus-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "LLehESBAwc7JG1sb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "24.99" - ], - "filament_density": [ - "1.28" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "74.3" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K2 Plus-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "LLehESBAwc7JG1sb", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "74.3" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json index 25acc10afb..ab7da092fd 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 Pro-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Hyper PETG @K2 Pro-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "FEZohKnhkTIWLIGo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K2 Pro-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "FEZohKnhkTIWLIGo", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json index f00003218e..cd1a81f895 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2 SE-all.json @@ -1,158 +1,156 @@ { - "type": "filament", - "name": "Hyper PETG @K2 SE-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "YKt97IZEOlPbNE45", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", - "pressure_advance": "0.07", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K2 SE-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "YKt97IZEOlPbNE45", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,240],[1.2,240],[1.3,250]]", + "pressure_advance": "0.07", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG @K2-all.json index f0f86795ec..a65c05ac70 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @K2-all.json @@ -1,148 +1,146 @@ { - "type": "filament", - "name": "Hyper PETG @K2-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "tA9uY8ONg89tnmBS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @K2-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "tA9uY8ONg89tnmBS", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,220],[1.2,220],[1.2,250]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json index 26b6def656..6f13c7f91b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG @SPARKX i7-all.json @@ -1,164 +1,162 @@ { - "type": "filament", - "name": "Hyper PETG @SPARKX i7-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "KCinMkKfbIlmgNY5", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "25" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "06002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG @SPARKX i7-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "KCinMkKfbIlmgNY5", + "filament_id": "OFujZSdh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "25" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json index 459f8fcd55..9eb34dc9bf 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1 Max_CFS-C-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "Xas7n19K71hs4LDE", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "Xas7n19K71hs4LDE", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json index 05fe909fb4..8f75ada3bd 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C-all.json @@ -1,139 +1,137 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K1C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "Qb08ZrBwuO8zt4AH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K1C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "Qb08ZrBwuO8zt4AH", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json index 9fa1a032be..452436bc5f 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1C_CFS-C-all.json @@ -1,139 +1,137 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "DoTcUw5GMoTHQg7e", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "DoTcUw5GMoTHQg7e", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json index 3f99330c5b..57d1162f5c 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K1_CFS-C-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K1_CFS-C-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "CcmwXMNgZWg8VguD", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "80", - "epoxy_resin_plate_temp_initial_layer": "80", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K1_CFS-C-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "CcmwXMNgZWg8VguD", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "80", + "epoxy_resin_plate_temp_initial_layer": "80", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json index 544ae5fb6f..cbc2e8a34c 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Plus-all.json @@ -1,142 +1,140 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K2 Plus-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "DyG4SbAXKKPcZtrz", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K2 Plus-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "DyG4SbAXKKPcZtrz", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json index ec260e76f3..55789a7c2e 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2 Pro-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K2 Pro-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "kit5JfJiicLJF4zF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K2 Pro-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "kit5JfJiicLJF4zF", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json index e178e47042..953587853c 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @K2-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper PETG-CF @K2-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "sqyA1OhRFwfJdaQC", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "75" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @K2-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "sqyA1OhRFwfJdaQC", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "75" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json index f88b59d4d7..f0feb6547b 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-CF @SPARKX i7-all.json @@ -1,167 +1,165 @@ { - "type": "filament", - "name": "Hyper PETG-CF @SPARKX i7-all", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "ysPPxXtL5M7eQwOp", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "70" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "80", - "customized_plate_temp_initial_layer": "80", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "70", - "epoxy_resin_plate_temp_initial_layer": "70", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", - "pressure_advance": "0.028", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "06003" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-CF @SPARKX i7-all", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "ysPPxXtL5M7eQwOp", + "filament_id": "OFusbWjj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "70" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n{if(initial_extruder != current_extruder || layer_z > first_layer_height)}\n{if (layer_z +0.4 < printable_height) }\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X205 Y345 F20000\nG1 Z{layer_z } F1200\n{else}\nG1 X205 Y345 F20000\n{endif}\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "80", + "customized_plate_temp_initial_layer": "80", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "70", + "epoxy_resin_plate_temp_initial_layer": "70", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,240],[1.2,260]]", + "pressure_advance": "0.028", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json index 0c1d8e5c2a..39f76b7763 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K1C-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Hyper PETG-GF @K1C-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "nEDeotPVKPCQe8Nb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.32" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "06004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-GF @K1C-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "nEDeotPVKPCQe8Nb", + "filament_id": "OFLgwqp2", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.32" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json index 4b719767d0..ec871d7de8 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Plus-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper PETG-GF @K2 Plus-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "usQ7v9aSP9GkBJlW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.32" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "70", - "customized_plate_temp_initial_layer": "70", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "06004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-GF @K2 Plus-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "usQ7v9aSP9GkBJlW", + "filament_id": "OFLgwqp2", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.32" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "70", + "customized_plate_temp_initial_layer": "70", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json index 346247a4aa..37cf3dfdc2 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2 Pro-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper PETG-GF @K2 Pro-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "9cVMYbupJs6RNOy7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.32" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "06004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-GF @K2 Pro-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "9cVMYbupJs6RNOy7", + "filament_id": "OFLgwqp2", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.32" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json b/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json index 9f28d154fb..6e883d6663 100644 --- a/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PETG-GF @K2-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper PETG-GF @K2-all", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "LFtfaG6s8REfWmjg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "29.9" - ], - "filament_density": [ - "1.32" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_type": [ - "PETG-GF" - ], - "filament_vendor": [ - "Creality" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "temperature_vitrification": [ - "80" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "06004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PETG-GF @K2-all", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "LFtfaG6s8REfWmjg", + "filament_id": "OFLgwqp2", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "29.9" + ], + "filament_density": [ + "1.32" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_type": [ + "PETG-GF" + ], + "filament_vendor": [ + "Creality" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "temperature_vitrification": [ + "80" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json index aa981c3a30..ed04e85cd6 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @Ender-3 V4-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Hyper PLA @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "jO61I2nsJ2yY0WG4", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "jO61I2nsJ2yY0WG4", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,210],[1.0,210],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json deleted file mode 100644 index 6c5bac864d..0000000000 --- a/resources/profiles/Creality/filament/Hyper PLA @Ender-5 Max-all.json +++ /dev/null @@ -1,160 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PLA @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Nb1H9jKg8CPQXLVI", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "45", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "55", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.5,220]]", - "pressure_advance": "0.048", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle", - "Creality Ender-5 Max 0.6 nozzle", - "Creality Ender-5 Max 0.8 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json b/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json index 9b1ec357b7..231c96f808 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @Hi-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Hyper PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "AG1UL48Bof1wFYDF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[2.2,200],[3.0,210],[10.0,215],[23.0,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.2 nozzle", - "Creality Hi 0.4 nozzle", - "Creality Hi 0.6 nozzle", - "Creality Hi 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "AG1UL48Bof1wFYDF", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[2.2,200],[3.0,210],[10.0,215],[23.0,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.2 nozzle", + "Creality Hi 0.4 nozzle", + "Creality Hi 0.6 nozzle", + "Creality Hi 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json index c3e7bed7f8..131fc6166d 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 Max_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "lRYhcdi64EmFem40", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "lRYhcdi64EmFem40", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json index 717c0835dc..c9a1c2ec02 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 SE-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Hyper PLA @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "w22rt5ipwYogeRyf", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.038", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle", - "Creality K1 SE 0.6 nozzle", - "Creality K1 SE 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "w22rt5ipwYogeRyf", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.038", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle", + "Creality K1 SE 0.6 nozzle", + "Creality K1 SE 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json index 3679080841..edb0299bd1 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1 SE_CFS-C-all.json @@ -1,138 +1,136 @@ { - "type": "filament", - "name": "Hyper PLA @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "qV4HvI6OV80255YA", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.038", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "qV4HvI6OV80255YA", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.038", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json index fa5a7a6ac2..1b5cb0960a 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "TnpXw6J6vdHtcI0m", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle", - "Creality K1C 0.6 nozzle", - "Creality K1C 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "TnpXw6J6vdHtcI0m", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "35" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle", + "Creality K1C 0.6 nozzle", + "Creality K1C 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json index 7626dae835..545ca6d21e 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1C_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NkW5cDCzmoseCFmO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "NkW5cDCzmoseCFmO", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "35" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json index f95f80a5a4..363e4d1fff 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K1_CFS-C-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Q74GgG8YgUE29949", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Q74GgG8YgUE29949", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,190], [1.2,190], [1.3,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json index 2d4608e32f..a56f03f226 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 Plus-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CCn1pBWY533DPO2I", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.2 nozzle", - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "CCn1pBWY533DPO2I", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.2 nozzle", + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json index 973044ff35..8a7ba55748 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 Pro-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "1KX2t8HgeGnCF4Mt", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "30", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle", - "Creality K2 Pro 0.6 nozzle", - "Creality K2 Pro 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "1KX2t8HgeGnCF4Mt", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "30", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,195],[1.2,195],[1.5,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle", + "Creality K2 Pro 0.6 nozzle", + "Creality K2 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json index 6480fb0dad..ff07932212 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2 SE-all.json @@ -1,140 +1,138 @@ { - "type": "filament", - "name": "Hyper PLA @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zTFbjztyji63caxW", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zTFbjztyji63caxW", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @K2-all.json b/resources/profiles/Creality/filament/Hyper PLA @K2-all.json index 910f9888fe..ff2f92dafc 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @K2-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "Hyper PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "klq59FDTiu0dk3WO", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "30", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle", - "Creality K2 0.6 nozzle", - "Creality K2 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "klq59FDTiu0dk3WO", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "30", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle", + "Creality K2 0.6 nozzle", + "Creality K2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json index 8e9b21749f..8487bf8565 100644 --- a/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA @SPARKX i7-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Hyper PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "pvnoJu0FPBxRAX6w", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "30" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "0", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,205],[1.2,220]]", - "pressure_advance": "0.28", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.2 nozzle", - "Creality SPARKX i7 0.4 nozzle", - "Creality SPARKX i7 0.6 nozzle", - "Creality SPARKX i7 0.8 nozzle" - ], - "filament_id": "01001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "pvnoJu0FPBxRAX6w", + "filament_id": "OFCZsqXg", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "30" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "0", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,205],[1.2,220]]", + "pressure_advance": "0.28", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.2 nozzle", + "Creality SPARKX i7 0.4 nozzle", + "Creality SPARKX i7 0.6 nozzle", + "Creality SPARKX i7 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json index f55de5ef56..6aa016c0a5 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-3 V4-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper PLA-CF @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "30n5mJl8L6az4Ugt", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", - "pressure_advance": "0.028", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "30n5mJl8L6az4Ugt", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", + "pressure_advance": "0.028", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json deleted file mode 100644 index 7592840259..0000000000 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Ender-5 Max-all.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "type": "filament", - "name": "Hyper PLA-CF @Ender-5 Max-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "pW3AHx1VemLWSa7q", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-5 Max 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json index ac7a413888..87a03604c7 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @Hi-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Hyper PLA-CF @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "l4gTfu7FrFCXseZR", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "l4gTfu7FrFCXseZR", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json index f15929e486..eef42d1c01 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 Max_CFS-C-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "jNMBQgVxJOyIVLcq", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "jNMBQgVxJOyIVLcq", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json index af9c28e809..b6fa3185df 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "qmyerfbWbH0wbbk7", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "qmyerfbWbH0wbbk7", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json index b44b0ceb3d..b205835d92 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1 SE_CFS-C-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1 SE_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "l8sx6lH2mvQLZObS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", - "pressure_advance": "0.036", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 SE_CFS-C 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1 SE_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "l8sx6lH2mvQLZObS", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,190],[5.0,200],[14.0,210],[23.0,220]]", + "pressure_advance": "0.036", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 SE_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json index f4f4b2e536..89a64caad9 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "23SZfDiYXhm9hn5G", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "23SZfDiYXhm9hn5G", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json index 952822e040..7c2ebcd7fa 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1C_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ITQgXSnjWFeY68wT", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ITQgXSnjWFeY68wT", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json index f65f1b5ec5..5947f13e5c 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K1_CFS-C-all.json @@ -1,157 +1,155 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9rf6iQ0xQuReogCt", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "0", - "filament_retract_lift_enforce": "All Surfaces", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", - "pressure_advance": "0.02", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "9rf6iQ0xQuReogCt", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "0", + "filament_retract_lift_enforce": "All Surfaces", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210], [10.0,220], [12.0,230]]", + "pressure_advance": "0.02", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json index ebb185aabc..078a075008 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GjpBicP4kPE8flGx", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GjpBicP4kPE8flGx", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json index b32297ee79..2e1f5752d6 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 Pro-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Y4er7SRg27NLBiG1", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Y4er7SRg27NLBiG1", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json index 758086354d..a22777631f 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2 SE-all.json @@ -1,149 +1,147 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NBqaRVKwrOk8znjG", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "40" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "NBqaRVKwrOk8znjG", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "40" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json index b280582803..ef5c46b673 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @K2-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Hyper PLA-CF @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "L7pciawKG1j3Q543", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "L7pciawKG1j3Q543", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json index ccb1e5a690..7427735721 100644 --- a/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper PLA-CF @SPARKX i7-all.json @@ -1,176 +1,174 @@ { - "type": "filament", - "name": "Hyper PLA-CF @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "18bK3EZVaHGwGmsL", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "32" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "02001" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PLA-CF @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "18bK3EZVaHGwGmsL", + "filament_id": "OFTnWzBs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "32" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json index e13b1c8420..11b26eae81 100644 --- a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Plus-all.json @@ -1,185 +1,183 @@ { - "type": "filament", - "name": "Hyper PPA-CF @K2 Plus-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ltnrZwbu4XXaDTkF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "89.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle", - "Creality K2 Plus 0.6 nozzle", - "Creality K2 Plus 0.8 nozzle" - ], - "filament_id": "12002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PPA-CF @K2 Plus-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "ltnrZwbu4XXaDTkF", + "filament_id": "OFNvBIL0", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "89.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle", + "Creality K2 Plus 0.6 nozzle", + "Creality K2 Plus 0.8 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json index 314b8641aa..1c76caff66 100644 --- a/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper PPA-CF @K2 Pro-all.json @@ -1,181 +1,179 @@ { - "type": "filament", - "name": "Hyper PPA-CF @K2 Pro-all", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "wrCqzQPdSReyJSfo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "89.9" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_is_support": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature": [ - "300" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "10%" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "110" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "0", - "epoxy_resin_plate_temp_initial_layer": "0", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.044", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "12002" -} \ No newline at end of file + "type": "filament", + "name": "Hyper PPA-CF @K2 Pro-all", + "inherits": "fdm_filament_pa", + "from": "system", + "setting_id": "wrCqzQPdSReyJSfo", + "filament_id": "OFNvBIL0", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "89.9" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_is_support": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "10%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "110" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "0", + "epoxy_resin_plate_temp_initial_layer": "0", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.044", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json b/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json index fd0c47db8e..05abf81f1d 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @Hi-all.json @@ -1,156 +1,154 @@ { - "type": "filament", - "name": "Hyper Stardust @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Jg5EAOLRZBLTvozN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.5,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Jg5EAOLRZBLTvozN", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200],[1.2,200],[1.5,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json index e822a0fa7a..9a050ee4b8 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1 Max_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "hwto2aYfebw6i6sm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "hwto2aYfebw6i6sm", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json index 8e9d53c893..37d9c6b652 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GC5jc2gUOL34TtA2", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GC5jc2gUOL34TtA2", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json index 416ee437c0..6a55b510b4 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1C_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zqZR6xEtm9Gokib0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "0" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "0", - "filament_retract_lift_below": "249", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zqZR6xEtm9Gokib0", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "0" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "0.4" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "0", + "filament_retract_lift_below": "249", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json index d8dcb3862b..c61f91d90a 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K1_CFS-C-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "fWmKrIlCzeemGvXQ", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "30" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "fWmKrIlCzeemGvXQ", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "30" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.8,200], [1.2,200], [1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json index b74711cd62..d33ce12919 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 Plus-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Q0hz1XpiWQeZhcjF", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "35" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "35" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "3" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.2,200],[1.1,200],[1.2,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "Q0hz1XpiWQeZhcjF", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "35" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "3" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.2,200],[1.1,200],[1.2,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json index a0fdc30bab..b6fa563aa5 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 Pro-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "SjkfsdLhjA5CFsCl", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "SjkfsdLhjA5CFsCl", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json index 84a8a22de5..5781afd1cd 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2 SE-all.json @@ -1,143 +1,141 @@ { - "type": "filament", - "name": "Hyper Stardust @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "O2BLGgWwKLgovOmm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "3" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "O2BLGgWwKLgovOmm", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "3" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json b/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json index 95f30eb149..3ff2394a43 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @K2-all.json @@ -1,161 +1,159 @@ { - "type": "filament", - "name": "Hyper Stardust @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4OC4zOZaAUUsyu27", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "4OC4zOZaAUUsyu27", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,200],[1.0,200],[1.2,220]]", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json b/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json index bc3de91594..8d0475a9e7 100644 --- a/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Hyper Stardust @SPARKX i7-all.json @@ -1,179 +1,177 @@ { - "type": "filament", - "name": "Hyper Stardust @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "flyQf6Emi8ND7BDe", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "filament_cost": [ - "26.9" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "2" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", - "pressure_advance": "0.028", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "01004" -} \ No newline at end of file + "type": "filament", + "name": "Hyper Stardust @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "flyQf6Emi8ND7BDe", + "filament_id": "OFXnToSX", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "filament_cost": [ + "26.9" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.6,210],[1.2,220]]", + "pressure_advance": "0.028", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json index 05b64e3648..5eddb9e5dd 100644 --- a/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Panchroma PLA Matte @K2 Plus-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "Panchroma PLA Matte @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ArTNQCA0xnqZKZk9", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "20.99" - ], - "filament_density": [ - "1.31" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "55" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "P1003" -} \ No newline at end of file + "type": "filament", + "name": "Panchroma PLA Matte @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "ArTNQCA0xnqZKZk9", + "filament_id": "OFrOh600", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "20.99" + ], + "filament_density": [ + "1.31" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json b/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json index c290ac0748..8016cb164e 100644 --- a/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Panchroma PLA Satin @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "Panchroma PLA Satin @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dK0jvrB1WOFjPf7g", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19.99" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "55" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "P1001" -} \ No newline at end of file + "type": "filament", + "name": "Panchroma PLA Satin @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "dK0jvrB1WOFjPf7g", + "filament_id": "OFPkCJKE", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19.99" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json index bee02a0f14..f6ca211c24 100644 --- a/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/PolySonic PLA @K2 Plus-all.json @@ -1,172 +1,170 @@ { - "type": "filament", - "name": "PolySonic PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "K3kUZYddQO8SUKKa", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "24.99" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "55" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "P1004" -} \ No newline at end of file + "type": "filament", + "name": "PolySonic PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "K3kUZYddQO8SUKKa", + "filament_id": "OF66KUAN", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "24.99" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json b/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json index 47e17257bd..384df90aea 100644 --- a/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/PolySonic PLA Pro @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "PolySonic PLA Pro @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "DEU6e8l8Gbz616Fi", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "29.99" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "55" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "P1002" -} \ No newline at end of file + "type": "filament", + "name": "PolySonic PLA Pro @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "DEU6e8l8Gbz616Fi", + "filament_id": "OFKbdiiJ", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "29.99" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json index 66fb01a064..1e77a28ccf 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @Hi-all.json @@ -123,5 +123,5 @@ "Creality Hi 0.6 nozzle", "Creality Hi 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json index 208583adff..626d34362d 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K1C-all.json @@ -126,5 +126,5 @@ "Creality K1C 0.6 nozzle", "Creality K1C 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json index f9d68e033a..8d1dc8a1c0 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Plus-all.json @@ -128,5 +128,5 @@ "Creality K2 Plus 0.6 nozzle", "Creality K2 Plus 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json index d88e732e2f..fca00e01ab 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2 Pro-all.json @@ -128,5 +128,5 @@ "Creality K2 Pro 0.6 nozzle", "Creality K2 Pro 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json index 5c62188c93..da86d9e27e 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @K2-all.json @@ -128,5 +128,5 @@ "Creality K2 0.6 nozzle", "Creality K2 0.8 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json index 5b73363f5d..79b83b8e69 100644 --- a/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Soleyin Basic PETG @SPARKX i7-all.json @@ -118,5 +118,5 @@ "compatible_printers": [ "Creality SPARKX i7 0.4 nozzle" ], - "filament_id": "06005" + "filament_id": "OFBLktDy" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json index 0abc37c050..d8da599f2e 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Ender-3 V4-all.json @@ -1,153 +1,151 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @Ender-3 V4-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "lMmOE3j5nMNIukQN", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "60", - "customized_plate_temp_initial_layer": "60", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", - "pressure_advance": "0.024", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Ender-3 V4 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @Ender-3 V4-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "lMmOE3j5nMNIukQN", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "60", + "customized_plate_temp_initial_layer": "60", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,220]]", + "pressure_advance": "0.024", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Ender-3 V4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json index 8340313872..3e8218631a 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @Hi-all.json @@ -1,146 +1,144 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @Hi-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "DzjjhzaPhKF7olJU", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - " ; filament end gcode" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "dont_slow_down_outer_wall": "1", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", - "pressure_advance": "0.068", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality Hi 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @Hi-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "DzjjhzaPhKF7olJU", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + " ; filament end gcode" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "dont_slow_down_outer_wall": "1", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", + "pressure_advance": "0.068", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality Hi 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json index b32740a47c..02f2e4e522 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1 Max_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K1 Max_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9dhggId2Cg5oR8Qo", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.066", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1 Max_CFS-C 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K1 Max_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "9dhggId2Cg5oR8Qo", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > initial_layer_print_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.066", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1 Max_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json index 2b0d1058cc..9bf300cddd 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K1C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "XP2BDRK5jZOC4TYv", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.066", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K1C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "XP2BDRK5jZOC4TYv", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.066", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json index 9cfa3eb9e9..f679fcd5cf 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1C_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K1C_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "98NLzuVoD8d35zrm", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.066", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1C_CFS-C 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K1C_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "98NLzuVoD8d35zrm", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.066", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1C_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json index 4cb9bfa4ff..511b5d54c5 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K1_CFS-C-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K1_CFS-C-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "zovui7ZsQ26KEgYY", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "50", - "epoxy_resin_plate_temp_initial_layer": "50", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.074", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K1_CFS-C 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K1_CFS-C-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "zovui7ZsQ26KEgYY", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + ";filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "50", + "epoxy_resin_plate_temp_initial_layer": "50", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.074", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K1_CFS-C 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json index b4e93a4aea..95cf3dce88 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Plus-all.json @@ -1,165 +1,163 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "QJjtgwE6G4TS3V6y", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "QJjtgwE6G4TS3V6y", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json index 63b6a48fa2..bae012fbbf 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 Pro-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K2 Pro-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "cprQoD8o6UmetOxS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "95" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Pro 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K2 Pro-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "cprQoD8o6UmetOxS", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "95" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json index 590e345f39..8c52ebabe2 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2 SE-all.json @@ -1,150 +1,148 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K2 SE-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "vAzjJYRL4Swmyq0z", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "90%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "customized_plate_temp": "0", - "customized_plate_temp_initial_layer": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 SE 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K2 SE-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "vAzjJYRL4Swmyq0z", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "customized_plate_temp": "0", + "customized_plate_temp_initial_layer": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,200],[1.2,200],[1.3,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 SE 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json index 3e8753160b..b8eb3d503b 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @K2-all.json @@ -1,168 +1,166 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @K2-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "UhE9df2kH6LealCb", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "95" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", - "pressure_advance": "0.06", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @K2-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "UhE9df2kH6LealCb", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "95" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[0.5,190],[1.0,190],[1.2,220]]", + "pressure_advance": "0.06", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json index 3c15bcb7d0..c7f54e1c4b 100644 --- a/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Soleyin Ultra PLA @SPARKX i7-all.json @@ -1,174 +1,172 @@ { - "type": "filament", - "name": "Soleyin Ultra PLA @SPARKX i7-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "SlwK2b9m8ZQJY4nH", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "55" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.25" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "0.6" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "Creality" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "14" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - ";filament start gcode" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "1", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", - "pressure_advance": "0.05", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality SPARKX i7 0.4 nozzle" - ], - "filament_id": "01601" -} \ No newline at end of file + "type": "filament", + "name": "Soleyin Ultra PLA @SPARKX i7-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "SlwK2b9m8ZQJY4nH", + "filament_id": "OF02UAVh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "55" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.25" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "Creality" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + ";filament start gcode" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "1", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[1.0,210],[1.2,220]]", + "pressure_advance": "0.05", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality SPARKX i7 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json index 449aed7663..7e5976dfdf 100644 --- a/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN ABS+ @K2 Plus-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "eSUN ABS+ @K2 Plus-all", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "7plEfQUFL6qclQ8B", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_max_speed": [ - "60" - ], - "filament_cost": [ - "15" - ], - "filament_density": [ - "1.08" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "60", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E3001" -} \ No newline at end of file + "type": "filament", + "name": "eSUN ABS+ @K2 Plus-all", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "7plEfQUFL6qclQ8B", + "filament_id": "OFTXduCM", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_max_speed": [ + "60" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.08" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "60", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json index d9e439ef2b..01e9994985 100644 --- a/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN ASA+ @K2 Plus-all.json @@ -1,159 +1,157 @@ { - "type": "filament", - "name": "eSUN ASA+ @K2 Plus-all", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "WjM4WIPAamvbee7G", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.1" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_layer": "2", - "activate_chamber_temp_control": "1", - "chamber_temperature": "50", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "90", - "epoxy_resin_plate_temp_initial_layer": "90", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E4001" -} \ No newline at end of file + "type": "filament", + "name": "eSUN ASA+ @K2 Plus-all", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "WjM4WIPAamvbee7G", + "filament_id": "OFUmS5z5", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.1" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_layer": "2", + "activate_chamber_temp_control": "1", + "chamber_temperature": "50", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "90", + "epoxy_resin_plate_temp_initial_layer": "90", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json index 0befedf49f..f7822a2487 100644 --- a/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PET-Basic @K2 Plus-all.json @@ -1,189 +1,187 @@ { - "type": "filament", - "name": "eSUN PET-Basic @K2 Plus-all", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "fJJfZCZc5MrXX1Lg", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "70" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "40" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.28" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PET" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "temperature_vitrification": [ - "110" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "60", - "epoxy_resin_plate_temp_initial_layer": "60", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E8001" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PET-Basic @K2 Plus-all", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "fJJfZCZc5MrXX1Lg", + "filament_id": "OFHaYaB1", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "40" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.28" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PET" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "temperature_vitrification": [ + "110" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "60", + "epoxy_resin_plate_temp_initial_layer": "60", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json index abbc6f48cc..745ca87011 100644 --- a/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG @K2 Plus-all.json @@ -83,5 +83,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2001" + "filament_id": "OF3kBrdA" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json index 2ac796d298..db95688083 100644 --- a/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG+HS @K2 Plus-all.json @@ -80,5 +80,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2002" + "filament_id": "OFrdZ0cK" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json index 5803a71cef..4885eb89a0 100644 --- a/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PETG-Basic @K2 Plus-all.json @@ -83,5 +83,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E2003" + "filament_id": "OFFbQscs" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json index a5bdfb25cd..83240e0283 100644 --- a/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA+ @K2 Plus-all.json @@ -1,163 +1,161 @@ { - "type": "filament", - "name": "eSUN PLA+ @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "AW7HLQJ78DAEUjge", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "80%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "53" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "55", - "customized_plate_temp_initial_layer": "55", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "45", - "epoxy_resin_plate_temp_initial_layer": "45", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E1001" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PLA+ @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "AW7HLQJ78DAEUjge", + "filament_id": "OFqINlYj", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "80%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "53" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "55", + "customized_plate_temp_initial_layer": "55", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "45", + "epoxy_resin_plate_temp_initial_layer": "45", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json index 3712719e47..e76dc3d1fa 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-CF @K2 Plus-all.json @@ -74,5 +74,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1005" + "filament_id": "OFnHc3D6" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json index a5a1e52d46..0c540de90b 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-HS @K2 Plus-all.json @@ -65,5 +65,5 @@ "compatible_printers": [ "Creality K2 Plus 0.4 nozzle" ], - "filament_id": "E1006" + "filament_id": "OFOHOf2F" } \ No newline at end of file diff --git a/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json index 99550707a2..6db1c4631d 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-LW @K2 Plus-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "eSUN PLA-LW @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9lAD1qJIwwtcSvk0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "45" - ], - "eng_plate_temp_initial_layer": [ - "45" - ], - "fan_min_speed": [ - "50" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.86" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "1" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "0", - "chamber_temperature": "0", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "0", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_shrinkage_compensation_z": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", - "pressure_advance": "0.1", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "00035" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PLA-LW @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "9lAD1qJIwwtcSvk0", + "filament_id": "OFi5RSve", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "fan_min_speed": [ + "50" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.86" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "1" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "0", + "chamber_temperature": "0", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "0", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_shrinkage_compensation_z": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", + "pressure_advance": "0.1", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json index 07fdbcd5b2..b9be49bb1c 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Lite @K2 Plus-all.json @@ -1,169 +1,167 @@ { - "type": "filament", - "name": "eSUN PLA-Lite @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "om2444MoWYK7ZCqS", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "13" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "53" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E1004" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PLA-Lite @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "om2444MoWYK7ZCqS", + "filament_id": "OFhbolij", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "53" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json index 5a1f80d5de..3bdb36e816 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Matte @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "eSUN PLA-Matte @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "BYYGdJpoZG5BXr1r", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_density": [ - "1.33" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "51" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode \n" - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E1003" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PLA-Matte @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "BYYGdJpoZG5BXr1r", + "filament_id": "OFDETOM6", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_density": [ + "1.33" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "51" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode \n" + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json b/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json index d09abc2625..2d41fc01a8 100644 --- a/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json +++ b/resources/profiles/Creality/filament/eSUN PLA-Silk @K2 Plus-all.json @@ -1,166 +1,164 @@ { - "type": "filament", - "name": "eSUN PLA-Silk @K2 Plus-all", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "IfZwVzcyYM0D5XR0", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "50" - ], - "cool_plate_temp_initial_layer": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "filament_cost": [ - "19" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "100%" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_soluble": [ - "0" - ], - "filament_vendor": [ - "eSUN" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "50" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" - ], - "filament_end_gcode": [ - ";filament end gcode " - ], - "activate_chamber_temp_control": "1", - "chamber_temperature": "35", - "cool_cds_fan_start_at_height": "0.5", - "cool_special_cds_fan_speed": "100", - "customized_plate_temp": "50", - "customized_plate_temp_initial_layer": "50", - "default_filament_colour": "\"\"", - "enable_overhang_bridge_fan": "1", - "enable_pressure_advance": "0", - "enable_special_area_additional_cooling_fan": "0", - "epoxy_resin_plate_temp": "40", - "epoxy_resin_plate_temp_initial_layer": "40", - "filament_cooling_final_speed": "3.4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_moves": "4", - "filament_load_time": "0", - "filament_loading_speed": "28", - "filament_loading_speed_start": "3", - "filament_multitool_ramming": "0", - "filament_multitool_ramming_flow": "10", - "filament_multitool_ramming_volume": "10", - "filament_notes": "\"\"", - "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", - "filament_retract_lift_above": "nil", - "filament_retract_lift_below": "nil", - "filament_retract_lift_enforce": "nil", - "filament_shrink": "100%", - "filament_toolchange_delay": "0", - "filament_unload_time": "0", - "filament_unloading_speed": "90", - "filament_unloading_speed_start": "100", - "material_flow_dependent_temperature": "0", - "pressure_advance": "0.04", - "support_material_interface_fan_speed": "-1", - "compatible_printers": [ - "Creality K2 Plus 0.4 nozzle" - ], - "filament_id": "E1002" -} \ No newline at end of file + "type": "filament", + "name": "eSUN PLA-Silk @K2 Plus-all", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "IfZwVzcyYM0D5XR0", + "filament_id": "OFIRUqWi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "eng_plate_temp": [ + "50" + ], + "eng_plate_temp_initial_layer": [ + "50" + ], + "filament_cost": [ + "19" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "100%" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_soluble": [ + "0" + ], + "filament_vendor": [ + "eSUN" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "50" + ], + "textured_plate_temp": [ + "50" + ], + "textured_plate_temp_initial_layer": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (layer_z > first_layer_height) }\nM104 S[nozzle_temperature]\n{else} \nM104 S[first_layer_temperature]\n{endif}" + ], + "filament_end_gcode": [ + ";filament end gcode " + ], + "activate_chamber_temp_control": "1", + "chamber_temperature": "35", + "cool_cds_fan_start_at_height": "0.5", + "cool_special_cds_fan_speed": "100", + "customized_plate_temp": "50", + "customized_plate_temp_initial_layer": "50", + "default_filament_colour": "\"\"", + "enable_overhang_bridge_fan": "1", + "enable_pressure_advance": "0", + "enable_special_area_additional_cooling_fan": "0", + "epoxy_resin_plate_temp": "40", + "epoxy_resin_plate_temp_initial_layer": "40", + "filament_cooling_final_speed": "3.4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_moves": "4", + "filament_loading_speed": "28", + "filament_loading_speed_start": "3", + "filament_multitool_ramming": "0", + "filament_multitool_ramming_flow": "10", + "filament_multitool_ramming_volume": "10", + "filament_notes": "\"\"", + "filament_ramming_parameters": "\"120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6\"", + "filament_retract_lift_above": "nil", + "filament_retract_lift_below": "nil", + "filament_retract_lift_enforce": "nil", + "filament_shrink": "100%", + "filament_toolchange_delay": "0", + "filament_unloading_speed": "90", + "filament_unloading_speed_start": "100", + "material_flow_dependent_temperature": "0", + "pressure_advance": "0.04", + "support_material_interface_fan_speed": "-1", + "compatible_printers": [ + "Creality K2 Plus 0.4 nozzle" + ] +} diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json index 73687d8be7..e9cadc9124 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-10 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR10Max", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-10 Max.json b/resources/profiles/Creality/machine/Creality CR-10 Max.json index 5922576073..82a5d1d760 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 Max.json +++ b/resources/profiles/Creality/machine/Creality CR-10 Max.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10max_buildplate_model.stl", "bed_texture": "creality_cr10max_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json index 34ae5f05e3..9dc1ae8962 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.2 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json index 99ddf4e2e2..12805d5e86 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.4 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json index 32bec9dd85..60ae6d2db8 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.6 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json index 25d0d2a2df..1ae4e24163 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE 0.8 nozzle.json @@ -116,7 +116,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "M220 S100 ;Reset feed rate \nM221 S100 ;Reset flow rate \n\nM140 S[bed_temperature_initial_layer_single] ;Set final bed temp\nG28 ;Home \nG92 E0 ;Reset extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position \nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 X10.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X10.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", "machine_end_gcode": "G91 ;Relative positioning \nG1 E-2 F2700 ;Retract a bit \nG1 E-2 Z0.2 F2400 ;Retract and raise Z \nG1 X5 Y5 F3000 ;Wipe out \nG1 Z3 ;Raise Z more \nG90 ;Absolute positioning \nG1 X2 Y218 F3000 ;Present print \nM106 S0 ;Turn-off fan \nM104 S0 ;Turn-off hotend \nM140 S0 ;Turn-off bed \nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality CR-10 SE.json b/resources/profiles/Creality/machine/Creality CR-10 SE.json index 6e57e38c0c..56af1ec8a6 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 SE.json +++ b/resources/profiles/Creality/machine/Creality CR-10 SE.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10se_buildplate_model.stl", "bed_texture": "creality_cr10se_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PETG;Creality Generic TPU;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PETG @Creality;Generic TPU @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json index af449cd705..7b70121bef 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json @@ -106,7 +106,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG28 ; home all\nG1 Z2 F240\nG1 X2 Y10 F3000\nG1 Z0.28 F240\nG92 E0\nG1 Y190 E15 F1500 ; intro line\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E15 F1200 ; intro line\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2.json b/resources/profiles/Creality/machine/Creality CR-10 V2.json index a709fe2309..6098003c41 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10v2_buildplate_model.stl", "bed_texture": "creality_cr10v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json index 10837d9271..6eee0b7357 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3 0.4 nozzle.json @@ -109,7 +109,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 X2 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json index 6b518c35a5..8ec571442d 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3 0.6 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S{first_layer_temperature[0]} ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG1 Z0.28 F240\nG92 E0\nG1 X2 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print head up\nG1 X5 Y170 F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600{endif} ; Move print head further up\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality CR-10 V3.json b/resources/profiles/Creality/machine/Creality CR-10 V3.json index 37cfe67f05..39958036b8 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V3.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V3.json @@ -8,5 +8,5 @@ "bed_model": "creality_cr10v3_buildplate_model.stl", "bed_texture": "creality_cr10v3_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json index 1a91139859..db3d5f8ac1 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.2 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality CR-6 0.2", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json index 0c8ce148a6..5f0d68af0c 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-6 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json index aeea306f78..eb2b0bfb2a 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality CR-6 0.6", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json index 417eba9589..fc9adbc8b6 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 Max", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.32mm Standard @Creality CR-6 0.8", diff --git a/resources/profiles/Creality/machine/Creality CR-6 Max.json b/resources/profiles/Creality/machine/Creality CR-6 Max.json index aa1925da6e..af7f785051 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 Max.json +++ b/resources/profiles/Creality/machine/Creality CR-6 Max.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_CR_6_Max", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json index 757ee910bf..d738e8569c 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.2 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality CR-6 0.2", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json index 8c862ad0c1..8ad215b2f5 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-6 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json index d5f40f373f..f5f19131b8 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality CR-6 0.6", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json index a38fa30329..8afdf0d906 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality CR-6 SE", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.32mm Standard @Creality CR-6 0.8", diff --git a/resources/profiles/Creality/machine/Creality CR-6 SE.json b/resources/profiles/Creality/machine/Creality CR-6 SE.json index 2d7026c31d..63fc2fc19b 100644 --- a/resources/profiles/Creality/machine/Creality CR-6 SE.json +++ b/resources/profiles/Creality/machine/Creality CR-6 SE.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_CR_6_SE", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json index 165a332297..9d1de682c3 100644 --- a/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-M4 0.4 nozzle.json @@ -9,7 +9,7 @@ "gcode_flavor": "marlin", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality CR-M4", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality CR-M4.json b/resources/profiles/Creality/machine/Creality CR-M4.json index 0cb519eec9..d4df994d2c 100644 --- a/resources/profiles/Creality/machine/Creality CR-M4.json +++ b/resources/profiles/Creality/machine/Creality CR-M4.json @@ -8,5 +8,5 @@ "bed_model": "creality_crm4_buildplate_model.stl", "bed_texture": "creality_crm4_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json index 29762960b6..ce445321ed 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.2 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json index 59497d500b..7e6a63ab18 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json index a33329652b..5becaffc5d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.6 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json index d77ba1063f..03beab016f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 0.8 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json index d6715bb636..d7305a3b9e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.2 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json index ac1a04a609..a2bf0df0ad 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.4 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json index f0377efa29..66c1f038ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.6 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json index b8371d1770..f42b8f288d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro 0.8 nozzle.json @@ -112,7 +112,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 Pro.json b/resources/profiles/Creality/machine/Creality Ender-3 Pro.json index 982a2256bf..407f2d9833 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 Pro.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 Pro.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json index c8ee1f7a0f..72e1aeb855 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json @@ -106,7 +106,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json index 66d9161841..6f61fc3c0b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.2 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling \nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json index a871bc6d03..08579e0a00 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.4 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json index 53d5923358..9b688aae93 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.6 nozzle.json @@ -110,7 +110,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json index 29735d253d..73f2340b40 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus 0.8 nozzle.json @@ -111,7 +111,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nM420 S1; Enable mesh leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json index 134df7200d..68badab1c3 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1plus_buildplate_model.stl", "bed_texture": "creality_ender3s1plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json index fa9f815d66..d7cbb9292d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json @@ -109,7 +109,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json index 2ce3d35e19..e47e3ab7ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1pro_buildplate_model.stl", "bed_texture": "creality_ender3s1pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1.json b/resources/profiles/Creality/machine/Creality Ender-3 S1.json index aec61a4289..fb405f39f4 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3s1_buildplate_model.stl", "bed_texture": "creality_ender3s1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json index 2e7787e04e..47e5f72147 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-3 V2", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender3V2", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json index e07ac17f02..7cddabe415 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Creality Ender-3 V2 Neo", "printer_structure": "i3", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender3V2 Neo", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json index 827ae40bc3..b22add48ea 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2 Neo.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2neo_buildplate_model.stl", "bed_texture": "creality_ender3v2neo_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PLA;Creality Generic PETG" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PLA @Creality;Generic PETG @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V2.json b/resources/profiles/Creality/machine/Creality Ender-3 V2.json index 88665f5892..a5ef1d123d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V2.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V2.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json index 4bc5a8a963..de3c4286dc 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.4 nozzle.json @@ -126,7 +126,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json index 317b7b3499..75ceca6c79 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 0.6 nozzle.json @@ -126,7 +126,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json index 9b1fa97ba2..e27b0b3c54 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.2 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json index a0a2f1fe1b..1607a8bd4e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.4 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json index 7141b3088f..cbc3d0cc58 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.6 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json index da6689b46d..d4eadbf772 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE 0.8 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "SET_GCODE_VARIABLE MACRO=PRINTER_PARAM VARIABLE=fan0_min VALUE=30 ;compensate for fan speed\nSET_VELOCITY_LIMIT ACCEL_TO_DECEL=2500 ;revert accel_to_decel back to 2500\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nM140 S[bed_temperature_initial_layer_single] ;Set bed temp\nG28 X Y ;Home XY axes\nM190 S[bed_temperature_initial_layer_single] ;Wait for bed temp to stabilize\nG28 Z ;Home Z axis & load bed mesh\nBED_MESH_CALIBRATE PROBE_COUNT=5,5 ;Auto bed level\n\nM104 S[nozzle_temperature_initial_layer] ;Set nozzle temp\nG92 E0 ;Reset Extruder\nG1 X-2.0 Y20 Z0.3 F5000.0 ;Move to start position\nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize\nG1 Z0.2 ;Lower nozzle to printing height\nG1 Y145.0 F1500.0 E15 ;Draw the first line\nG1 X-1.7 F5000.0 ;Move to side a little\nG1 Y30 F1500.0 E15 ;Draw the second line\nG92 E0 ;Reset Extruder", "machine_end_gcode": "G92 E0 ;Reset Extruder\nG1 E-1.2 Z{max_layer_z + 0.5} F1800 ;Retract and raise Z\n{if max_layer_z < 50}\nG1 Z{max_layer_z + 25} F900 ;Raise Z more\n{endif}\n\nG1 X2 Y218 F3000 ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json index 63ac65eec6..f28e3fc7a6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 KE.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3ke_buildplate_model.stl", "bed_texture": "creality_ender3v3ke_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all;Generic PLA @System" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json index ac9f51f5cb..f9b91395ba 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.4 nozzle.json @@ -123,7 +123,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json index 52db2b831d..d0c4bee18a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus 0.6 nozzle.json @@ -123,7 +123,7 @@ "change_filament_gcode": "PAUSE", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "machine_start_gcode": "M140 S0\nM104 S0\nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]", "machine_end_gcode": "END_PRINT", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json index b471a9ab08..919076763b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3plus_buildplate_model.stl", "bed_texture": "creality_ender3v3plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json index e75a79ce23..dc04436c04 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.2 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json index 59c207b62a..22df39dd1d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.4 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json index 713e8e7332..881a46fc3a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.6 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json index b904c4b7f3..44e9b97afb 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE 0.8 nozzle.json @@ -118,7 +118,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA @Ender-3V3-all" + "Generic PLA @Creality Ender-3V3-all" ], "file_start_gcode": ";FLAVOR:Marlin\\n;TIME:{print_time_sec}\\n;Filament used:{used_filament_length}m\\n;Layer height:{layer_height}", "machine_start_gcode": "M220 S100 ;Reset Feedrate \nM221 S100 ;Reset Flowrate \n \nM104 S[nozzle_temperature_initial_layer] ;Set final nozzle temp \nM190 S[bed_temperature_initial_layer_single] ;Set and wait for bed temp to stabilize \nG28 ;Home \nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X-2.1 Y20 Z0.28 F5000.0 ;Move to start position \nM109 S[nozzle_temperature_initial_layer] ;Wait for nozzle temp to stabilize \nG1 X-2.1 Y145.0 Z0.28 F1500.0 E15 ;Draw the first line \nG1 X-2.4 Y145.0 Z0.28 F5000.0 ;Move to side a little \nG1 X-2.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line \nG92 E0 ;Reset Extruder \nG1 E-1.0000 F1800 ;Retract a bit \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 E0.0000 F1800", diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json index 2ceb56c108..71786a500d 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3 SE.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3se_buildplate_model.stl", "bed_texture": "creality_ender3v3se_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V3.json b/resources/profiles/Creality/machine/Creality Ender-3 V3.json index 74f5c275fc..5650e068aa 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V3.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V3.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v3_buildplate_model.stl", "bed_texture": "creality_ender3v3_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @Ender-3V3-all;Creality Generic ASA @Ender-3V3-all;Creality Generic PETG @Ender-3V3-all;Creality Generic PLA @Ender-3V3-all;Creality Generic PLA High Speed @Ender-3V3-all;Creality Generic PLA Matte @Ender-3V3-all;Creality Generic PLA Silk @Ender-3V3-all;Creality Generic TPU @Ender-3V3-all" + "default_materials": "Generic ABS @Creality Ender-3V3-all;Generic ASA @Creality Ender-3V3-all;Generic PETG @Creality Ender-3V3-all;Generic PLA @Creality Ender-3V3-all;Generic PLA High Speed @Creality Ender-3V3-all;Generic PLA Matte @Creality Ender-3V3-all;Generic PLA Silk @Creality Ender-3V3-all;Generic TPU @Creality Ender-3V3-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json index 3c1fcae969..5829268d2e 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality Ender-3 V4 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "R96v98fNsXyf9HXq", + "instantiation": "true", "printer_model": "Creality Ender-3 V4", "auxiliary_fan": "0", "bbl_use_printhost": "0", @@ -69,7 +71,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -105,7 +106,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality Ender-3 V4 0.4 nozzle", - "setting_id": "R96v98fNsXyf9HXq" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V4.json b/resources/profiles/Creality/machine/Creality Ender-3 V4.json index 22fc2a9c6a..3229f33792 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V4.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V4.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_Ender_3_V4", - "default_materials": "Creality Generic ABS @Ender-3 V4-all;Creality Generic ASA @Ender-3 V4-all;Creality Generic PETG @Ender-3 V4-all;Creality Generic PLA @Ender-3 V4-all;Creality Generic PLA Matte @Ender-3 V4-all;Creality Generic PLA Silk @Ender-3 V4-all;Creality Generic TPU @Ender-3 V4-all" + "default_materials": "Generic ABS @Ender-3 V4-all;Generic ASA @System;Generic PETG @Ender-3 V4-all;Generic PLA @Ender-3 V4-all;Generic PLA Matte @System;Generic PLA-Silk @Ender-3 V4-all;Generic TPU @Ender-3 V4-all" } diff --git a/resources/profiles/Creality/machine/Creality Ender-3.json b/resources/profiles/Creality/machine/Creality Ender-3.json index 66a234e378..70bdb03d55 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3.json +++ b/resources/profiles/Creality/machine/Creality Ender-3.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender3v2_buildplate_model.stl", "bed_texture": "creality_ender3v2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json index c04de58097..44434bbf93 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.4 nozzle.json index fb15db7ab3..496a977127 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.4 nozzle.json @@ -72,7 +72,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.6 nozzle.json index f895c93b42..59d08460d5 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.6 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality Ender-5 Max 0.6 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "1idSrUiK9hZwCJNy", + "instantiation": "true", "printer_model": "Creality Ender-5 Max", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -74,7 +76,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -113,7 +114,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality Ender-5 Max 0.6 nozzle", - "setting_id": "1idSrUiK9hZwCJNy" -} \ No newline at end of file + "z_hop_types": "Slope Lift" +} diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.8 nozzle.json index 2fad99bcea..fcfa26e790 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Max 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Max 0.8 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality Ender-5 Max 0.8 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "mPvxCeNkSTMYta2L", + "instantiation": "true", "printer_model": "Creality Ender-5 Max", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -74,7 +76,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -113,7 +114,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality Ender-5 Max 0.8 nozzle", - "setting_id": "mPvxCeNkSTMYta2L" -} \ No newline at end of file + "z_hop_types": "Slope Lift" +} diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Max.json b/resources/profiles/Creality/machine/Creality Ender-5 Max.json index 8c5354fea2..08079fdfca 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Max.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Max.json @@ -9,5 +9,5 @@ "bed_texture": "creality_ender5max_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Hyper PLA-CF @Ender-5Max-all;Creality Hyper PLA @Ender-5Max-all;Creality Hyper ABS @Ender-5Max-all;Creality Generic TPU @Ender-5Max-all;Creality Generic ASA @Ender-5Max-all;Creality Silk PLA @Ender-5Max-all;Creality Generic PLA @Ender-5Max-all;Creality Generic PETG @Ender-5Max-all;Creality Generic ABS @Ender-5Max-all;Creality Generic PA @Ender-5Max-all" + "default_materials": "Creality Hyper PLA-CF @Ender-5Max-all;Creality Hyper PLA @Ender-5Max-all;Creality Hyper ABS @Ender-5Max-all;Generic TPU @Creality Ender-5Max-all;Generic ASA @Creality Ender-5Max-all;Creality Silk PLA @Ender-5Max-all;Generic PLA @Creality Ender-5Max-all;Generic PETG @Creality Ender-5Max-all;Generic ABS @Creality Ender-5Max-all;Generic PA @Creality Ender-5Max-all;Generic PLA @System" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json index bcca726c1b..66fea8f254 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json @@ -108,7 +108,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json index 2950cdacf5..f672b4db0a 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5plus_buildplate_model.stl", "bed_texture": "creality_ender5plus_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json index 285297c0df..435b89d3c9 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.2 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.2", "default_print_profile": "0.16mm Optimal @Creality Ender5Pro (2019) 0.2", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json index 375ad54f20..a2bffd1951 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.25", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.25", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json index fc273af47e..62c133018f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.3", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.3", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json index 860e1dcc05..87e58181e4 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019)", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json index 47ad87824a..e46303cd0b 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.5", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.5", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json index 11a71495b2..ca4875c1eb 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.6", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.6", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json index 45332a9788..d3597d37af 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "0.8", "default_print_profile": "0.20mm Standard @Creality Ender5Pro (2019) 0.8", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json index 5d5230f5af..841bab4eab 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019) 1.0 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Ender-5 Pro (2019)", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "printer_variant": "1.0", "default_print_profile": "0.28mm SuperDraft @Creality Ender5Pro (2019) 1.0", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json index 1863dd03c6..e8185a0458 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Pro (2019).json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5pro_buildplate_model.stl", "bed_texture": "creality_ender5pro_buildplate_texture.svg", "hotend_model": "hotend.stl", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json index 6ef5e99e94..58a98c2064 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nG4 S30 ; allow partial nozzle warmup\nG28 ; home all axis and restore leveling\nG1 Z50 F240\nG1 X2.0 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 X2.0 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 Y140 F5000\nG92 E0\nG1 X2.3 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1.json b/resources/profiles/Creality/machine/Creality Ender-5 S1.json index 23ec29b299..8ef8baed2f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s1_buildplate_model.stl", "bed_texture": "creality_ender5s1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5.json b/resources/profiles/Creality/machine/Creality Ender-5.json index f43c00b81b..72f2f30680 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5.json +++ b/resources/profiles/Creality/machine/Creality Ender-5.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5_buildplate_model.stl", "bed_texture": "creality_ender5_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json index 5b9fbe6a66..c6068c5e24 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json @@ -101,7 +101,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600 ; Move print head up{endif}\nG1 X5 Y{print_bed_max[1]*0.8} F{travel_speed*60} ; present print\n{if max_layer_z < printable_height-10}G1 Z{z_offset+min(max_layer_z+70, printable_height-10)} F600 ; Move print head further up{endif}\n{if max_layer_z < max_print_height*0.6}G1 Z{printable_height*0.6} F600 ; Move print head further up{endif}\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-5S.json b/resources/profiles/Creality/machine/Creality Ender-5S.json index ff1f2633fa..a3dfb27ff6 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender5s_buildplate_model.stl", "bed_texture": "creality_ender5s_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json index 3e8b6f1216..d61f549c7f 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json @@ -105,7 +105,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM140 S[bed_temperature_initial_layer_single] ; set final bed temp\nM104 S150 ; set temporary nozzle temp to prevent oozing during homing\nG4 S10 ; allow partial nozzle warmup\nG28 ; home all axis\nG1 Z50 F240\nG1 X2 Y10 F3000\nM104 S[nozzle_temperature_initial_layer] ; set final nozzle temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp to stabilize\nM109 S[nozzle_temperature_initial_layer] ; wait for nozzle temp to stabilize\nG1 Z0.28 F240\nG92 E0\nG1 Y140 E10 F1500 ; prime the nozzle\nG1 X2.3 F5000\nG92 E0\nG1 Y10 E10 F1200 ; prime the nozzle\nG92 E0", "machine_end_gcode": "{if max_layer_z < printable_height}G1 Z{z_offset+min(max_layer_z+2, printable_height)} F600{endif} ; Move print bed down\nG1 X50 Y50 F{travel_speed*60} ; move print head out of the way\n{if max_layer_z < printable_height-10}G1 Z{z_offset+ printable_height-10} F600{endif} ; Move print bed close to the bottom\nM140 S0 ; turn off heatbed\nM104 S0 ; turn off temperature\nM107 ; turn off fan\nM84 X Y E ; disable motors", diff --git a/resources/profiles/Creality/machine/Creality Ender-6.json b/resources/profiles/Creality/machine/Creality Ender-6.json index f327bd97b0..9f3b5e2cc8 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6.json +++ b/resources/profiles/Creality/machine/Creality Ender-6.json @@ -8,5 +8,5 @@ "bed_model": "creality_ender6_buildplate_model.stl", "bed_texture": "creality_ender6_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality" } diff --git a/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json index b7a1676baa..2acc80fe3d 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.2 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality Hi 0.2 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "Qr6oR8AJNy1QmytY", + "instantiation": "true", "printer_model": "Creality Hi", "printer_structure": "i3", "default_print_profile": "0.1mm Standard @Creality Hi 0.2 nozzle", @@ -78,7 +80,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "1", @@ -91,7 +92,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @System" ], "deretraction_speed": "40", "extruder_colour": "#018001", @@ -118,7 +119,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Auto Lift", - "name": "Creality Hi 0.2 nozzle", - "setting_id": "Qr6oR8AJNy1QmytY" -} \ No newline at end of file + "z_hop_types": "Auto Lift" +} diff --git a/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json index 74cd4559d5..613089a72c 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.4 nozzle.json @@ -135,7 +135,7 @@ "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X260 Y180 F30000\nG1 Z{z_after_toolchange} F600", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Creality Hi-all" ], "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM104 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 E0.8 F300\nG1 X0 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X150 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "G1 X0 Y180 F8000\nEND_PRINT", @@ -178,7 +178,6 @@ "printer_technology": "FFF", "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", - "silent_mode": "0", "support_chamber_temp_control": "1", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json index 402771c410..95d55f0a56 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.6 nozzle.json @@ -135,7 +135,7 @@ "machine_pause_gcode": "PAUSE", "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X260 Y180 F30000\nG1 Z{z_after_toolchange} F600", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Creality Hi-all" ], "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM104 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 E0.8 F300\nG1 X0 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X150 Y0 E9 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "G1 X0 Y180 F8000\nEND_PRINT", @@ -178,7 +178,6 @@ "printer_technology": "FFF", "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", - "silent_mode": "0", "support_chamber_temp_control": "1", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json index 5f43c0992c..dcf32371d4 100644 --- a/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Hi 0.8 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality Hi 0.8 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "Q7M2ihdHisSVLDGF", + "instantiation": "true", "printer_model": "Creality Hi", "printer_structure": "i3", "default_print_profile": "0.40mm Standard @Creality Hi 0.8 nozzle", @@ -73,7 +75,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "1", @@ -86,7 +87,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @Hi-all" + "Generic PLA @Hi-all" ], "deretraction_speed": "40", "extruder_colour": "#018001", @@ -110,7 +111,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Auto Lift", - "name": "Creality Hi 0.8 nozzle", - "setting_id": "Q7M2ihdHisSVLDGF" -} \ No newline at end of file + "z_hop_types": "Auto Lift" +} diff --git a/resources/profiles/Creality/machine/Creality Hi.json b/resources/profiles/Creality/machine/Creality Hi.json index c1b5173f32..8bb1244b8d 100644 --- a/resources/profiles/Creality/machine/Creality Hi.json +++ b/resources/profiles/Creality/machine/Creality Hi.json @@ -9,5 +9,5 @@ "bed_texture": "creality_hi_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Creality Generic ABS @Hi-all;Creality Generic ASA @Hi-all;Creality Generic ASA-CF @Hi-all;Creality Generic PETG @Hi-all;Creality Generic PETG-CF @Hi-all;Creality Generic PLA @Hi-all;Creality Generic PLA High Speed @Hi-all;Creality Generic PLA Matte @Hi-all;Creality Generic PLA Silk @Hi-all;Creality Generic PLA-CF @Hi-all;Creality Generic PLA Wood @Hi-all;Creality Generic TPU @Hi-all" + "default_materials": "Generic ABS @Creality Hi-all;Generic ABS @Hi-all;Generic ASA @Creality Hi-all;Generic ASA-CF @Creality Hi-all;Generic PETG @Creality Hi-all;Generic PETG @Hi-all;Generic PETG-CF @Creality Hi-all;Generic PLA @Creality Hi-all;Generic PLA @Hi-all;Generic PLA High Speed @Creality Hi-all;Generic PLA Matte @Creality Hi-all;Generic PLA Silk @Creality Hi-all;Generic PLA-CF @Creality Hi-all;Generic PLA Wood @Creality Hi-all;Generic TPU @Creality Hi-all;Hyper PLA @Hi-all" } diff --git a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json index 4b1fad646b..01a3bc7d5d 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -167,7 +167,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_air_filtration": "1", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", diff --git a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json index 1a849f15d9..fdb83b032e 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -172,7 +172,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_air_filtration": "1", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", diff --git a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json index efc77b1623..8cb8e6f169 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -121,7 +121,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -172,7 +172,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_air_filtration": "1", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index d41f4b8ec9..291affba77 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -168,7 +168,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 8c0f630a43..523abd4de4 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -173,7 +173,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index 2593be039b..c67622c90b 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X0 Y245 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -173,7 +173,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 Max.json b/resources/profiles/Creality/machine/Creality K1 Max.json index af8379ad83..5680990e70 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max.json +++ b/resources/profiles/Creality/machine/Creality K1 Max.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1max_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json index 0ffbbb8fc2..6d382f4c09 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1 Max_CFS-C 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "zx1WGvi1Ff3X3RpP", + "instantiation": "true", "printer_model": "Creality K1 Max_CFS-C", "auxiliary_fan": "1", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality HF Generic PLA" + "Generic PLA HF @Creality" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Auto Lift", - "name": "Creality K1 Max_CFS-C 0.4 nozzle", - "setting_id": "zx1WGvi1Ff3X3RpP" + "z_hop_types": "Auto Lift" } diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json index 426f93e8be..7170d6b6fb 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_Max_CFS_C", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality;Generic PLA @K1 Max_CFS-C-all" } diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json index fc50432dd0..f8aa68f3c0 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json @@ -121,7 +121,7 @@ "manual_filament_change": "0", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -168,7 +168,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "time_cost": "0", "use_firmware_retraction": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json index 93a4641702..bbc97a8f5a 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1 SE 0.6 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "x2DzbcUOES62gJTj", + "instantiation": "true", "printer_model": "Creality K1 SE", "auxiliary_fan": "0", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "1", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality K1 SE 0.6 nozzle", - "setting_id": "x2DzbcUOES62gJTj" -} \ No newline at end of file + "z_hop_types": "Slope Lift" +} diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json index aa98cb2b00..00282be149 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1 SE 0.8 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "sJR1oCXnOEQ2HZ5O", + "instantiation": "true", "printer_model": "Creality K1 SE", "auxiliary_fan": "0", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "1", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality K1 SE 0.8 nozzle", - "setting_id": "sJR1oCXnOEQ2HZ5O" -} \ No newline at end of file + "z_hop_types": "Slope Lift" +} diff --git a/resources/profiles/Creality/machine/Creality K1 SE.json b/resources/profiles/Creality/machine/Creality K1 SE.json index 82a8d97b63..5d6d0dd51d 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE.json +++ b/resources/profiles/Creality/machine/Creality K1 SE.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1se_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ABS @K1 SE-all;Generic ASA @Creality K1-all;Generic ASA @K1 SE-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PETG @K1 SE-all;Generic PLA @Creality K1-all;Generic PLA @K1 SE-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic PLA-CF @K1 SE-all;Generic TPU @Creality K1-all;Generic TPU @K1 SE-all;Hyper PLA @K1 SE-all" } diff --git a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json index 14077b6693..8fda2c9f43 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1 SE_CFS-C 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "jAWMfHFcVBnqEqb1", + "instantiation": "true", "printer_model": "Creality K1 SE_CFS-C", "auxiliary_fan": "0", "bbl_use_printhost": "0", @@ -70,7 +72,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -82,7 +83,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", @@ -106,7 +107,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality K1 SE_CFS-C 0.4 nozzle", - "setting_id": "jAWMfHFcVBnqEqb1" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json index 7c41c72dff..4c9ed70211 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_SE_CFS_C", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all;Generic PLA @K1 SE_CFS-C-all" } diff --git a/resources/profiles/Creality/machine/Creality K1.json b/resources/profiles/Creality/machine/Creality K1.json index 4892cfbaca..a70046460a 100644 --- a/resources/profiles/Creality/machine/Creality K1.json +++ b/resources/profiles/Creality/machine/Creality K1.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index 87ccb311bf..ac6fd03393 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -168,7 +168,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json index b00db3d173..58e7fa841f 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -173,7 +173,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json index 069b665e5f..82edb57d82 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "G2 Z{z_after_toolchange + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\nG1 X42 Y180 F30000\nG1 Z{z_after_toolchange} F600", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", @@ -173,7 +173,6 @@ "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", - "silent_mode": "0", "support_chamber_temp_control": "0", "thumbnails_format": "PNG", "time_cost": "0", diff --git a/resources/profiles/Creality/machine/Creality K1C.json b/resources/profiles/Creality/machine/Creality K1C.json index 7db363a7d7..18e80dab92 100644 --- a/resources/profiles/Creality/machine/Creality K1C.json +++ b/resources/profiles/Creality/machine/Creality K1C.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k1c_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ABS @K1C-all;Generic ASA @Creality K1-all;Generic ASA @K1C-all;Generic PA-CF @Creality K1-all;Generic PA-CF @K1C-all;Generic PC @Creality K1-all;Generic PC @K1C-all;Generic PETG @Creality K1-all;Generic PETG @K1C-all;Generic PLA @Creality K1-all;Generic PLA @K1C-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic PLA-CF @K1C-all;Generic TPU @Creality K1-all;Generic TPU @K1C-all" } diff --git a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json index 225b760c9c..a49967f597 100644 --- a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1C_CFS-C 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "ZhdzT48wvUDLGpPp", + "instantiation": "true", "printer_model": "Creality K1C_CFS-C", "auxiliary_fan": "1", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Auto Lift", - "name": "Creality K1C_CFS-C 0.4 nozzle", - "setting_id": "ZhdzT48wvUDLGpPp" + "z_hop_types": "Auto Lift" } diff --git a/resources/profiles/Creality/machine/Creality K1C_CFS-C.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C.json index 9cf7839332..d68987dd16 100644 --- a/resources/profiles/Creality/machine/Creality K1C_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1C_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1C_CFS_C", - "default_materials": "Creality Generic ABS @K1-all;Creality Generic ASA @K1-all;Creality Generic PA-CF @K1-all;Creality Generic PC @K1-all;Creality Generic PETG @K1-all;Creality Generic PLA @K1-all;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PLA-CF @K1-all;Creality Generic TPU @K1-all" + "default_materials": "Generic ABS @Creality K1-all;Generic ASA @Creality K1-all;Generic PA-CF @Creality K1-all;Generic PC @Creality K1-all;Generic PETG @Creality K1-all;Generic PLA @Creality K1-all;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PLA-CF @Creality K1-all;Generic TPU @Creality K1-all;Generic PLA @K1C_CFS-C-all" } diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json index d4a7d9e913..4da0be155c 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K1_CFS-C 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "AnvSIapWvZ2Jpc3T", + "instantiation": "true", "printer_model": "Creality K1_CFS-C", "auxiliary_fan": "1", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K1-all" + "Generic PLA @Creality K1-all" ], "deretraction_speed": "40", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Auto Lift", - "name": "Creality K1_CFS-C 0.4 nozzle", - "setting_id": "AnvSIapWvZ2Jpc3T" + "z_hop_types": "Auto Lift" } diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C.json b/resources/profiles/Creality/machine/Creality K1_CFS-C.json index 268a48e994..70ea42818a 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K1_CFS_C", - "default_materials": "Creality Generic ABS;Creality Generic ASA;Creality Generic PC @K1-all;Creality Generic PLA;Creality HF Generic PLA;Creality HF Generic Speed PLA;Creality Generic PLA High Speed @K1-all;Creality Generic PLA Matte @K1-all;Creality Generic PLA Silk @K1-all;Creality Generic PETG;Creality Generic TPU" + "default_materials": "Generic ABS @Creality;Generic ASA @Creality;Generic PC @Creality K1-all;Generic PLA @Creality;Generic PLA HF @Creality;Generic Speed PLA @Creality HF;Generic PLA High Speed @Creality K1-all;Generic PLA Matte @Creality K1-all;Generic PLA Silk @Creality K1-all;Generic PETG @Creality;Generic TPU @Creality;Generic PLA @K1_CFS-C-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json index a0a342d406..7c12aeadf0 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.2 nozzle.json @@ -1,9 +1,10 @@ { "type": "machine", + "name": "Creality K2 0.2 nozzle", + "inherits": "fdm_creality_common", "from": "system", "setting_id": "8aX66GbijkwrT7DY", "instantiation": "true", - "inherits": "fdm_creality_common", "printer_model": "Creality K2", "printer_settings_id": "Creality", "auxiliary_fan": "1", @@ -108,7 +109,6 @@ "printhost_authorization_type": "key", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -122,7 +122,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "40" @@ -181,6 +181,5 @@ "z_hop": [ "0.4" ], - "name": "Creality K2 0.2 nozzle", "nozzle_height": "4" } diff --git a/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json index c3d6488839..867cc80255 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K2 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "XiWyoJJ90uesQMGs", + "instantiation": "true", "printer_model": "Creality K2", "printer_settings_id": "Creality", "auxiliary_fan": "1", @@ -104,7 +106,6 @@ "printhost_authorization_type": "key", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -118,7 +119,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "40" @@ -177,7 +178,6 @@ "z_hop": [ "0.4" ], - "name": "Creality K2 0.4 nozzle", "bbl_use_printhost": "0", "bed_exclude_area": "0x0", "bed_mesh_max": "99999,99999", @@ -201,6 +201,5 @@ "long_retractions_when_cut": "1", "retract_lift_enforce": "All Surfaces", "retraction_distances_when_cut": "30", - "z_hop_types": "Auto Lift", - "setting_id": "XiWyoJJ90uesQMGs" + "z_hop_types": "Auto Lift" } diff --git a/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json index b17c6f479a..65b7831c56 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "machine", + "name": "Creality K2 0.6 nozzle", + "inherits": "fdm_creality_common", "from": "system", "setting_id": "xjllrWDeH0ABMI8K", "instantiation": "true", - "inherits": "fdm_creality_common", "printer_model": "Creality K2", "printer_settings_id": "Creality", "auxiliary_fan": "1", @@ -106,7 +107,6 @@ "printhost_authorization_type": "key", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -120,7 +120,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "30" @@ -179,7 +179,6 @@ "z_hop": [ "0.4" ], - "name": "Creality K2 0.6 nozzle", "adaptive_bed_mesh_margin": "0", "bbl_use_printhost": "0", "bed_exclude_area": "0x0", diff --git a/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json index 9d13607569..cfebdec178 100644 --- a/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 0.8 nozzle.json @@ -1,9 +1,10 @@ { "type": "machine", + "name": "Creality K2 0.8 nozzle", + "inherits": "fdm_creality_common", "from": "system", "setting_id": "O1ardlnBQ2nqCs07", "instantiation": "true", - "inherits": "fdm_creality_common", "printer_model": "Creality K2", "printer_settings_id": "Creality", "auxiliary_fan": "1", @@ -106,7 +107,6 @@ "printhost_authorization_type": "key", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", @@ -120,7 +120,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": [ "30" @@ -179,7 +179,6 @@ "z_hop": [ "0.4" ], - "name": "Creality K2 0.8 nozzle", "adaptive_bed_mesh_margin": "0", "bbl_use_printhost": "0", "bed_exclude_area": "0x0", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json index 52e7d360e9..356e6f571a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.2 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json index 93472b4dea..e74b47a143 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.4 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json index 3b9009eb0c..9faca356d9 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.6 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json index 285613858f..df47686765 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus 0.8 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Plus.json b/resources/profiles/Creality/machine/Creality K2 Plus.json index 68cde06cfe..ea4430128a 100644 --- a/resources/profiles/Creality/machine/Creality K2 Plus.json +++ b/resources/profiles/Creality/machine/Creality K2 Plus.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2plus_buildplate_texture.svg", "hotend_model": "", "default_bed_type": "Textured PEI Plate", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2 Plus-all;Generic ASA @Creality K2-all;Generic ASA @K2 Plus-all;Generic PETG @Creality K2-all;Generic PETG @K2 Plus-all;Generic PLA @Creality K2-all;Generic PLA @K2 Plus-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json index 08249a6136..c8c34d0b39 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.2 nozzle.json @@ -136,7 +136,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json index c9d74994d7..9f7b11b43f 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.4 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", @@ -181,7 +181,6 @@ "printer_technology": "FFF", "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", - "silent_mode": "0", "time_cost": "0", "use_firmware_retraction": "0", "use_relative_e_distances": "1", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json index b364acf29f..e43f1ab2b5 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.6 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", @@ -181,7 +181,6 @@ "printer_technology": "FFF", "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", - "silent_mode": "0", "time_cost": "0", "use_firmware_retraction": "0", "use_relative_e_distances": "1", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json index 207c059d24..423aaf9373 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro 0.8 nozzle.json @@ -134,7 +134,7 @@ "single_extruder_multi_material": "1", "manual_filament_change": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "_comment": "the generated by Creality_Print start gcode removes a warning/error message when printing with Orca because it thinks its sliced with CrealityPrint ", "machine_start_gcode": "; HEADER_BLOCK_START\n; generated by Creality_Print V7.0.1.4212 on [year]-[month]-[day] at [hour]:[minute]:[second]\n; total layer number: [total_layer_count]\n; HEADER_BLOCK_END\n; SET PRINT AREA MIN AND MAX COORDINATES TO ENABLE ADAPTIVE PROBING\n; MINX = {first_layer_print_min[0]}\n; MINY = {first_layer_print_min[1]}\n; MAXX = {first_layer_print_max[0]}\n; MAXY = {first_layer_print_max[1]}\nM140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y150 F12000\nG1 X0 F12000\nG1 Z0.2 F600\nG1 X0 Y150 F6000\nG1 X0 Y0 E15 F6000\nG1 X150 Y0 E15 F6000\nG92 E0\nG1 Z1 F600", @@ -181,7 +181,6 @@ "printer_technology": "FFF", "printhost_authorization_type": "key", "printhost_ssl_ignore_revoke": "0", - "silent_mode": "0", "time_cost": "0", "use_firmware_retraction": "0", "use_relative_e_distances": "1", diff --git a/resources/profiles/Creality/machine/Creality K2 Pro.json b/resources/profiles/Creality/machine/Creality K2 Pro.json index d50ec5384a..937117d11d 100644 --- a/resources/profiles/Creality/machine/Creality K2 Pro.json +++ b/resources/profiles/Creality/machine/Creality K2 Pro.json @@ -9,5 +9,5 @@ "bed_texture": "creality_k2pro_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2 Pro-all;Generic ASA @Creality K2-all;Generic ASA @K2 Pro-all;Generic PETG @Creality K2-all;Generic PETG @K2 Pro-all;Generic PLA @Creality K2-all;Generic PLA @K2 Pro-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json index ebe24f655f..a1c33a0026 100644 --- a/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K2 SE 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality K2 SE 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "Blm3dYf9xWwUoaYJ", + "instantiation": "true", "printer_model": "Creality K2 SE", "auxiliary_fan": "0", "bbl_use_printhost": "0", @@ -71,7 +73,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "1", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -83,7 +84,7 @@ "use_relative_e_distances": "1", "z_offset": "0", "default_filament_profile": [ - "Creality Generic PLA @K2-all" + "Generic PLA @Creality K2-all" ], "deretraction_speed": "30", "extruder_colour": "#FCE94F", @@ -107,7 +108,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality K2 SE 0.4 nozzle", - "setting_id": "Blm3dYf9xWwUoaYJ" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality K2 SE.json b/resources/profiles/Creality/machine/Creality K2 SE.json index 701d32c06e..1a0c0901b1 100644 --- a/resources/profiles/Creality/machine/Creality K2 SE.json +++ b/resources/profiles/Creality/machine/Creality K2 SE.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_K2_SE", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ASA @Creality K2-all;Generic PETG @Creality K2-all;Generic PLA @Creality K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all;Generic PLA @K2 SE-all" } diff --git a/resources/profiles/Creality/machine/Creality K2.json b/resources/profiles/Creality/machine/Creality K2.json index 3baf9e4126..cc852576fe 100644 --- a/resources/profiles/Creality/machine/Creality K2.json +++ b/resources/profiles/Creality/machine/Creality K2.json @@ -9,5 +9,5 @@ "default_bed_type": "Textured PEI Plate", "bed_texture": "creality_k2_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Creality Generic ABS @K2-all;Creality Generic ASA @K2-all;Creality Generic PETG @K2-all;Creality Generic PLA @K2-all;Creality Generic PLA High Speed @K2-all;Creality Generic PLA Matte @K2-all;Creality Generic PLA Silk @K2-all" + "default_materials": "Generic ABS @Creality K2-all;Generic ABS @K2-all;Generic ASA @Creality K2-all;Generic ASA @K2-all;Generic PETG @Creality K2-all;Generic PETG @K2-all;Generic PLA @Creality K2-all;Generic PLA @K2-all;Generic PLA High Speed @Creality K2-all;Generic PLA Matte @Creality K2-all;Generic PLA Silk @Creality K2-all" } diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json index c2ea633914..6a499942bf 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality SPARKX i7 0.2 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "I4qasXKWnIbPgYbu", + "instantiation": "true", "printer_model": "Creality SPARKX i7", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -78,7 +80,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -118,7 +119,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality SPARKX i7 0.2 nozzle", - "setting_id": "I4qasXKWnIbPgYbu" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json index 8ee1efeebd..68dedf568b 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality SPARKX i7 0.4 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "4usBaKppjmBSZy8N", + "instantiation": "true", "printer_model": "Creality SPARKX i7", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -78,7 +80,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -118,7 +119,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality SPARKX i7 0.4 nozzle", - "setting_id": "4usBaKppjmBSZy8N" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json index 70c72ec78f..f13761fa81 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality SPARKX i7 0.6 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "6R7l1V4liyafB0lf", + "instantiation": "true", "printer_model": "Creality SPARKX i7", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -78,7 +80,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -118,7 +119,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality SPARKX i7 0.6 nozzle", - "setting_id": "6R7l1V4liyafB0lf" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json index d8358eb9dc..053f23fd77 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json @@ -1,8 +1,10 @@ { "type": "machine", - "from": "system", - "instantiation": "true", + "name": "Creality SPARKX i7 0.8 nozzle", "inherits": "fdm_creality_common", + "from": "system", + "setting_id": "kwyQHmNESgzBBCr0", + "instantiation": "true", "printer_model": "Creality SPARKX i7", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", @@ -78,7 +80,6 @@ "printhost_ssl_ignore_revoke": "0", "purge_in_prime_tower": "0", "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -118,7 +119,5 @@ "wipe": "1", "wipe_distance": "2", "z_hop": "0.4", - "z_hop_types": "Slope Lift", - "name": "Creality SPARKX i7 0.8 nozzle", - "setting_id": "kwyQHmNESgzBBCr0" + "z_hop_types": "Slope Lift" } diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7.json b/resources/profiles/Creality/machine/Creality SPARKX i7.json index 73a5e85ead..4ec6a2a935 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7.json @@ -9,5 +9,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Creality_SPARKX_i7", - "default_materials": "Generic PETG @SPARKX i7-all;Generic PLA @SPARKX i7-all;CR-PLA Matte @SPARKX i7-all;Generic PLA Silk @SPARKX i7-all" + "default_materials": "Generic PETG @SPARKX i7-all;Generic PLA @SPARKX i7-all;CR-PLA Matte @SPARKX i7-all;Generic PLA-Silk @SPARKX i7-all" } diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json index a3a6bfbfb1..2d7f0a63d8 100644 --- a/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Sermoon V1 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "printer_model": "Creality Sermoon V1", "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality Sermoon V1", "nozzle_diameter": [ diff --git a/resources/profiles/Creality/machine/Creality Sermoon V1.json b/resources/profiles/Creality/machine/Creality Sermoon V1.json index 1f7f26c390..7b14e8256e 100644 --- a/resources/profiles/Creality/machine/Creality Sermoon V1.json +++ b/resources/profiles/Creality/machine/Creality Sermoon V1.json @@ -11,5 +11,5 @@ "Spiral Lift" ], "hotend_model": "", - "default_materials": "Creality Generic PLA;Creality Generic PETG;Creality Generic ABS;Creality Generic TPU" + "default_materials": "Generic PLA @Creality;Generic PETG @Creality;Generic ABS @Creality;Generic TPU @Creality" } diff --git a/resources/profiles/Creality/machine/fdm_creality_common.json b/resources/profiles/Creality/machine/fdm_creality_common.json index f3021ae1ed..1defbe311e 100644 --- a/resources/profiles/Creality/machine/fdm_creality_common.json +++ b/resources/profiles/Creality/machine/fdm_creality_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", @@ -124,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Creality Generic PLA" + "Generic PLA @Creality" ], "default_print_profile": "0.20mm Standard @Creality", "bed_exclude_area": [ diff --git a/resources/profiles/Creality/machine/fdm_machine_common.json b/resources/profiles/Creality/machine/fdm_machine_common.json index 26e3032451..88b73d03e3 100644 --- a/resources/profiles/Creality/machine/fdm_machine_common.json +++ b/resources/profiles/Creality/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "support_chamber_temp_control": "0", "support_air_filtration": "0", "machine_max_acceleration_e": [ diff --git a/resources/profiles/Creality/process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json index 0ff5143efe..fa3f86d8c1 100644 --- a/resources/profiles/Creality/process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "5FeO8mZypv8CHDpj", "name": "0.06mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "5FeO8mZypv8CHDpj", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,100,6000], [1.0,1.5,80,5500], [1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm HueForge @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm HueForge @Creality Hi 0.4 nozzle.json index e993c77b6c..1ee91f8cad 100644 --- a/resources/profiles/Creality/process/0.08mm HueForge @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm HueForge @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "peqHRWTyVxZ2w5WU", "name": "0.08mm HueForge @Creality Hi 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "peqHRWTyVxZ2w5WU", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,100,6000,210],[1.0,1.5,80,5500,200],[1.5,2.0,60,5000,190]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", diff --git a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 0.4 nozzle.json index 3f0ff3b207..d5f49f7674 100644 --- a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "rWpJRnZscjXyKngw", "name": "0.08mm HueForge @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "rWpJRnZscjXyKngw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json index 6ddf78e2d2..1570aed7cc 100644 --- a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "nOd96z5QquzKG3iu", "name": "0.08mm HueForge @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "nOd96z5QquzKG3iu", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json index ab5c252c2b..cfbba070ec 100644 --- a/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm HueForge @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "uUPLPuPdvODZdBSU", "name": "0.08mm HueForge @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "uUPLPuPdvODZdBSU", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json index f584a86449..95593ff7f2 100644 --- a/resources/profiles/Creality/process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm HueForge @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "KQXt6EPU3DFJ4xLr", "name": "0.08mm HueForge @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "KQXt6EPU3DFJ4xLr", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "20", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -176,7 +174,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "1", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "80%", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json index 05da7204cf..121b745758 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "Gzis5yvHXQD9PnSf", "name": "0.08mm SuperDetail @Creality Hi", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "Gzis5yvHXQD9PnSf", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,100,6000,210],[1.0,1.5,80,5500,200],[1.5,2.0,60,5000,190]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", @@ -244,4 +242,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json index 7300c45c8d..df9ee89c29 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "jgP5JZdbxUbg8lfB", "name": "0.08mm SuperDetail @Creality K1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "jgP5JZdbxUbg8lfB", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json index adc86b4768..31523e47f4 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "715XKCccsul5FKvC", "name": "0.08mm SuperDetail @Creality K1 Max_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "715XKCccsul5FKvC", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json index 976756a212..626636bc5d 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "OhhZPXABlfjJun3o", "name": "0.08mm SuperDetail @Creality K1C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "OhhZPXABlfjJun3o", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json index 6748914ae7..b16583d310 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "DMPF0xf2yvEWmu4L", "name": "0.08mm SuperDetail @Creality K1C_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "DMPF0xf2yvEWmu4L", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json index f3f37caca7..c857595ddb 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1Max (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "CaqcNDTSGWeJ81xw", "name": "0.08mm SuperDetail @Creality K1Max (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "CaqcNDTSGWeJ81xw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json index 0144a35372..474a37c964 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "ZqIhsxrzqVs6cFvM", "name": "0.08mm SuperDetail @Creality K1_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "ZqIhsxrzqVs6cFvM", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json index 7690eb0206..8bf4ce990c 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json index 229c5be38a..7edb449976 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "VK8qeRg8ZEHRo2Rk", "name": "0.08mm SuperDetail @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "VK8qeRg8ZEHRo2Rk", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,7 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -242,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json index 26e877b4bf..3db7735d91 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "d22VPSF1SXi5gPOI", "name": "0.08mm SuperDetail @Creality K2 Plus 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "d22VPSF1SXi5gPOI", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json index f9b00d5283..cd8fe57a81 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "T181USiYx4xlKGI9", "name": "0.08mm SuperDetail @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "T181USiYx4xlKGI9", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json index 11833d41bc..822b4ce721 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json index 2edfea780c..de6729076e 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "Qq07eSaIWdVHr9mr", "name": "0.08mm SuperDetail @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "Qq07eSaIWdVHr9mr", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,7 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -242,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json index 94b622d674..ae638706d1 100644 --- a/resources/profiles/Creality/process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "1PSmepdqo0eFyI23", "name": "0.08mm SuperDetail @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "1PSmepdqo0eFyI23", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "20", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -154,7 +152,6 @@ "slowdown_for_curled_perimeters": "0", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "1", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "80%", diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 0.2 nozzle.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 0.2 nozzle.json index fbf0043f01..262ad0538c 100644 --- a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json index 6bf1baf2d2..c8e196966b 100644 --- a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Plus 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "V2oWbmagKmmoxbv3", "name": "0.10mm HighDetail @Creality K2 Plus 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "V2oWbmagKmmoxbv3", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json index d104a68e6a..d25fe06205 100644 --- a/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality K2 Pro 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json b/resources/profiles/Creality/process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json index 16bc203a9c..bcdad2f20e 100644 --- a/resources/profiles/Creality/process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "GqPrfjfOMnakeSmK", "name": "0.10mm HighDetail @Creality SPARKX i7 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "GqPrfjfOMnakeSmK", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -176,7 +174,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "4", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "100%", diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.2 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.2 nozzle.json index d8e1f7255d..db8752f98d 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.4 nozzle.json index 2003ecc36d..27e4e5d21a 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "RxVB6dYHB7XghTJM", "name": "0.12mm Detail @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "RxVB6dYHB7XghTJM", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json index d2c0488bd9..b33edd07d6 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "4QIsAhoHoAXDecGF", "name": "0.12mm Detail @Creality K2 Plus 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "4QIsAhoHoAXDecGF", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json index 6abaf12607..7571ba459e 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "fY34NxARSSe2qjvw", "name": "0.12mm Detail @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "fY34NxARSSe2qjvw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json index 3936bfee46..569f61bcd5 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json index 0c06c325fa..8220879a98 100644 --- a/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Detail @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "g1QZLRXoH1joFYs3", "name": "0.12mm Detail @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "g1QZLRXoH1joFYs3", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json index b753d5d697..dc15cc7123 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "eeiPSOyL4ergqQ07", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json index 420946637a..63bf9e3041 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "wrSsDTXZmqGP7jI6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json index 080d492adb..0060f44220 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cDZYl2hgnh7Cc99L", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json index fdac5e080f..7ae0e8f685 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "tSCiJ9olpnfuFwwH", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json index e6d532895c..0b0eaa5cb6 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QheGOjs9kbqt0RIz", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json index 9d3526378a..41f8e5b490 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "TduEizRFdShIDRcm", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json index e54dac4c6f..10c03ba2a4 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Vkv3aPxQr9VEJvaF", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json index dc47420779..8be588c2d6 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Oc6OFEFHUMPYMB63", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json index 25c255507a..b87ff8fad8 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "UntNzp8KmgY2dJp5", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json index bdbcde0c09..2abe6f6862 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "29EqYizz07WCqLH6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json index e094dec366..cd3243dc7d 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Ud8sbqOYEtSQQT6z", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json index f04f45f8fb..93e4e9b816 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "NZt7TVAsYcO4KVUO", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json index 4a98444b8b..0dfcd85243 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3 Pro 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "hYyzb4pWqSMccfku", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json index 0c89db070e..1ef7613160 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "BYotUlZcqUXYiUJD", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json index f5f2c12992..111278f30e 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2Neo.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cRgPV5JRbPRakGVF", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json index 311aa9f18b..f48c53a417 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Rs3jP38ZEjdPihGT", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json index a9beb01fcf..332c15154f 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3KE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "EJAHGtrssuw5Z6ul", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json index 82c3f7e5f9..b31ed27ee6 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3Plus 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "qPcJyOUL611jQfcb", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json index 812595bf28..411ea32b28 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "JM7OGS3Cjxqg6wFn", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json index c01491ecfa..9e4bb3c054 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.4.json @@ -6,7 +6,6 @@ "from": "system", "setting_id": "W68mSPdmat2rCXuD", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json index 797cbcafc9..66a4aa97e0 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "WS8Z9BGDgjWP3pQJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json index 202ac828bc..5bcec917a2 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V3SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "kkfspmZozKFg5BA4", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json index d452d0e75e..753f7dee03 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pMT5vO5IBWX9wZLG", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Hi 0.4 nozzle.json index d332eeaf3b..13ab3bb638 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "BqQTYLbb22LCHEJN", "name": "0.12mm Fine @Creality Hi", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "BqQTYLbb22LCHEJN", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,180,5000],[1.0,1.5,160,4000],[1.5,2.0,150,3000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json index 56e76e7a03..b871ea6cdb 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 (0.4 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "g6zPlZ8mKj4YHC9l", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 SE 0.4 nozzle.json index 0d9c5f4f5b..b54cb6302f 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1 SE 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cAcjLnedHgi2zJ05", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", @@ -116,4 +114,4 @@ "xy_contour_compensation": "0", "gcode_label_objects": "0", "precise_outer_wall": "1" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json index 00e10594e3..cf08bcd873 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1C 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "G93LbyixXNXBiA0c", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", @@ -115,4 +113,4 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json index 0afe3367a5..fc5daba4ac 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality K1Max (0.4 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "hfAhnivnymhUKkuS", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -31,7 +30,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.12", diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json index db05c36733..97da9d42d5 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "gHnRFCfQOiqEOQhq", "name": "0.12mm Fine @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "gHnRFCfQOiqEOQhq", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "20", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -174,7 +172,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "1", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "80%", diff --git a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 0.2 nozzle.json b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 0.2 nozzle.json index 23ee07ff02..dca59ca762 100644 --- a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json index acdb2c2403..59fc3954db 100644 --- a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Plus 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "AgwKETM82R6PNW8u", "name": "0.14mm Optimal @Creality K2 Plus 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "AgwKETM82R6PNW8u", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,100,6000], [1.0,1.5,80,5500], [1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json index dc2ded50f4..af11446856 100644 --- a/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.14mm Optimal @Creality K2 Pro 0.2 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.25", "initial_layer_print_height": "0.1", diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json index e04a25a2e7..997f874554 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "AhVlBBKSgNv8gtzF", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json index 91fa465acc..979f70e7a5 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ZlLapzGj5AcZJW7n", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json index cae991ff76..f731a0fbac 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ysg14LXoki3gnanY", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json index aeb29cee0a..f85c92a4e5 100644 --- a/resources/profiles/Creality/process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Fine @Creality Ender-3 V4 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "cFlbPrdjMi4CLWZF", "name": "0.16mm Fine @Creality Ender-3 V4 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "cFlbPrdjMi4CLWZF", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -263,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json index 44e22d33e9..c5dc0794c6 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR-6 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "hB2b43wb6zlKNwM7", "instantiation": "true", - "adaptive_layer_height": "1", "brim_object_gap": "0", "brim_width": "0", "default_acceleration": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json index 77f4e754f6..9f69042388 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "KJS40SDSHBwiqODl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json index 336e78ac1c..866a2c05d9 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "0MJLzTqNgW25Uheg", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json index 1f1a708b4b..d3a63e4193 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "N8cFrOUSa1yfMrv0", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json index b98f76289e..82c26510c7 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cjrvnlS7gkkm0pNy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json index 067aa42760..a0c88be82a 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality CR10V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QussxQZJlCnscRO8", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json index a41f412f45..1664978e87 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cply3AO1zRZSsHgR", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json index 9a42f54448..ac767b8490 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "11bH6lpigIvL8u8f", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json index 0c74372dee..2a5050d2b7 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Fke1V31Lx19EoKIA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json index 0ecee26eb0..329db47286 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "9fSweJ4F7gua7Uc7", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json index e2ab351bc7..4096165c24 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "DwpNJnb8eEz7L9Bb", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json index c21dcdd143..ed65a2fb18 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "43mtG5xlkphvMKKd", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json index c8f9692039..9425a012a8 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Jhb6GdIOKHntN1Ya", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json index a90a14ce26..4dd044f031 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3 Pro 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fxgj9J397IulykPl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json index 1adc7edee9..16ef9d5d29 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "O0dOiNS7TEZtCZ8R", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json index 6ec52bb438..90151f2c75 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "eWDWBHYshBLl925f", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json index dc0b13a54d..de800c7b94 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "HjQX9RTDFKq7QGtA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json index 4dca077fd8..9030c8abe9 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "sFUH487ulcosG1Aj", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json index 0b360bbdf5..95b568b104 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Plus 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dDjBGlXptHbFRkZe", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json index dc75dd8a6b..42661ac38d 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3S1Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "XL3fQRXNDiWlirhY", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json index ee244e17c8..423c828055 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V2Neo.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "aoBTpFYHhbpg1kuj", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json index c3487fcff2..e361cd3784 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "2Nrbq8PxssUPBLza", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.16", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json index 3ae447f19b..ab29d7af18 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3KE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ujKrpcMbGeL1pnX6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json index 9139a9ab80..63a173201c 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3Plus 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "eni3OChSXVGLB0NB", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.16", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json index b7113edd45..9691a8e555 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "CSSjT637cJ1BSrDa", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json index 052142f6ec..7970cd9ec4 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.4.json @@ -6,7 +6,6 @@ "from": "system", "setting_id": "jvnrh3jh6Btbs1Ja", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json index 1bc4ed673f..5a8f264e9b 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "oFqTILkrvntT8uHM", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json index 676751fa1e..a9e589bf62 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender3V3SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "kLTt1KBtPskehSHv", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json index 8912d61ace..837a2b1a56 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dIPbjfE0UjFaq6YU", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json index 704cd3756a..569e6c021f 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "A7RB0AQ0t1UkCN5G", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json index fb485bbf21..d59abbd109 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "qVu6mv4sVrVzWxvy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json index 45d61838d5..a5ce9a6b3a 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender5S1.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "03w4e0cMfUFjZcv6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json index 4669bff842..8e1c2e74f8 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Ender6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cjGhLiKivneRnlNJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Hi 0.4 nozzle.json index 77b1295186..6f7f4a0154 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "NtD3nnUvAO8aSUDJ", "name": "0.16mm Optimal @Creality Hi", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "NtD3nnUvAO8aSUDJ", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,180,5000],[1.0,1.5,160,4000],[1.5,2.0,150,3000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index d6caa5e775..7c9548b0f5 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "A0a8psWEQGdmYiPj", "name": "0.16mm Optimal @Creality K1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "A0a8psWEQGdmYiPj", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json index a1896fa377..f3b0e35677 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "BQiQnQJpN2Yy4c7u", "name": "0.16mm Optimal @Creality K1 Max_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "BQiQnQJpN2Yy4c7u", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json index 087d90a584..bece32d26b 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "xHoh6Y8AfDzNA5Mf", "name": "0.16mm Optimal @Creality K1 SE", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "xHoh6Y8AfDzNA5Mf", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,8 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json index 62708a822a..07778ded42 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "ZhEEAnJ5eh6QES40", "name": "0.16mm Optimal @Creality K1 SE_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "ZhEEAnJ5eh6QES40", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -263,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json index 5deb17002e..c4952f98a6 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "i25lsWBmZF21XcdV", "name": "0.16mm Optimal @Creality K1C", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "i25lsWBmZF21XcdV", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json index 2365a82d31..3165987f20 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "CpdVjCmJkN3pWssv", "name": "0.16mm Optimal @Creality K1C_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "CpdVjCmJkN3pWssv", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json index 02507c806f..dd4772c4d0 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "IN9EjcbeLmwzyIrt", "name": "0.16mm Optimal @Creality K1Max (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "IN9EjcbeLmwzyIrt", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json index cda928b2e7..8c67647925 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "a76Q90iyWf1az7Fv", "name": "0.16mm Optimal @Creality K1_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "a76Q90iyWf1az7Fv", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 0.4 nozzle.json index d8e00651f2..61d916d5ba 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "xcJYMZt1N40vmszc", "name": "0.16mm Optimal @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "xcJYMZt1N40vmszc", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json index 1f9b68b300..e4337f090c 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "Qh4PUdesKrjSUXFm", "name": "0.16mm Optimal @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "Qh4PUdesKrjSUXFm", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json index 80277008a0..df397e484f 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "FCUUtHpYIxeokc0a", "name": "0.16mm Optimal @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "FCUUtHpYIxeokc0a", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json index c23d00fba0..a5baecce55 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "8z63KIGeDgitLqPe", "name": "0.16mm Optimal @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "8z63KIGeDgitLqPe", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "30", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -174,7 +172,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "2", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "100%", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json index 1500b58edd..8a5cb6d850 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality Sermoon V1.json @@ -34,7 +34,6 @@ "inner_wall_acceleration": "6000", "inner_wall_line_width": "0.61", "inner_wall_speed": "195", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.32", "internal_solid_infill_speed": "195", "ironing_flow": "10%", diff --git a/resources/profiles/Creality/process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json index 4511db51d8..e21d0b231a 100644 --- a/resources/profiles/Creality/process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.16mm Standard @Creality K2 SE 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "KopqA4S2dMBSCBSD", "name": "0.16mm Standard @Creality K2 SE 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "KopqA4S2dMBSCBSD", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 0.6 nozzle.json b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 0.6 nozzle.json index c6aff2c46c..62262e67cc 100644 --- a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json index 9111e8a395..84c61a1cf3 100644 --- a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Plus 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "3wVXi8pXkGNmKm53", "name": "0.18mm Detail @Creality K2 Plus 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "3wVXi8pXkGNmKm53", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json index d2299f536e..ec97ecf362 100644 --- a/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.18mm Detail @Creality K2 Pro 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.1mm Standard @Creality Hi 0.2 nozzle.json b/resources/profiles/Creality/process/0.1mm Standard @Creality Hi 0.2 nozzle.json index 40475733fd..6d1c733aaf 100644 --- a/resources/profiles/Creality/process/0.1mm Standard @Creality Hi 0.2 nozzle.json +++ b/resources/profiles/Creality/process/0.1mm Standard @Creality Hi 0.2 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "tkSkduU7S0ysAtM7", "name": "0.1mm Standard @Creality Hi 0.2 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "tkSkduU7S0ysAtM7", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,180,5000],[1.0,1.5,160,4000],[1.5,2.0,150,3000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", diff --git a/resources/profiles/Creality/process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json index 422e928cc0..422d65d29a 100644 --- a/resources/profiles/Creality/process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm High Quality @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "UR1b2Z2o4t2uXsDO", "name": "0.20mm High Quality @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "UR1b2Z2o4t2uXsDO", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json index 702fcf8ea8..dd416019bd 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ZShSFfwlxaYTLPyk", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json index d540f01b05..c632f50d4e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "SUpsCvktcGgKFOwG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json index 2ed8c6707f..d9fb92fa07 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Mi0CWgKQO5QtCUgX", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json index 36616153a4..62e00bd7c9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ogY513sf2Ht92CNe", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json index fe5cba1347..36c9f430d3 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "athOsWrvUS4bdchK", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json index 4a37e7aed6..339f526068 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pRsZ1fGFRb5LxTi6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.4.json index 8d5f34c010..6a21dbbb0f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "oThS7cBtZl2ycbIR", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.6.json index d468da293f..17fc2be073 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10V3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "BDjZsZ3Eron3yC6o", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json index b6d6703693..5f373ce662 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-3 V4 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "V6277KGs62IwLGt2", "name": "0.20mm Standard @Creality Ender-3 V4 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "V6277KGs62IwLGt2", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json index c8decdadad..2e08e610f9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender-5 Max 0.4mm nozzle.json @@ -126,7 +126,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json index 84722ac71c..f1cfbfe8f3 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "NUOwkxvz6bzH12be", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json index 9e7ec845b1..b27666455f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "aPYE2hHFn4jp6hHd", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json index b24bac30e1..ee6e2ed895 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "iuwxYTfWfZ4RyZEg", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json index e85725b2db..0a9358e108 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fhwVxG08WJloBcrL", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json index 6912aaebab..0c2b09e737 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "V3Ik8iTHlZh5QNKm", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json index 3e1b899446..b93111451e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "g5sSMikMlHAPS2go", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json index 9ddf750136..c190f844a8 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "vuh1vEUnXIvFGssp", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json index 537fff135e..260cb03123 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3 Pro 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "l6niLUptIm4MfRTB", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json index 9abea8d074..dc1e84e791 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "XzSinPHka1JNcgdc", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json index c8e6b39c19..1c2f7de443 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "6n6QHp6IAmmgmTy7", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json index 9aba5bb71d..6d9ab2fe28 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "BmsBXICyG0DusAHS", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json index 219119b0b9..cd152d2d75 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "FFWB7dkbWTGsR5a1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json index 71fadd1ded..e97c038247 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Fo07KIkbZydVaBgi", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json index 4ce194a79e..49582a273f 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Plus 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "FiSvC283VqqMpr41", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json index 022e911acc..19346b5d19 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3S1Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dPims9blQsZMrtnN", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json index 0e16e788ef..c20ff406ed 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pmPzGC04PU62qjcz", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json index 89c4f56fa8..1862dc394d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2Neo.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "bVXaGFQ7f2jkilWk", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json index 0f5aae0bd6..1cf983d9bd 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "wG01ybBcp59pX5lB", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json index 4041987d50..f01fbe0a46 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3KE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "H198VcahxwpEdma0", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json index 97892cc203..74a046068b 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3Plus 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "rG5BalEQ9WpjxWXr", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json index cdd841907d..05e6f8075d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "JrWxHTh4DZ7zRaog", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json index a5ea94dfcc..12caa25379 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.4.json @@ -6,7 +6,6 @@ "from": "system", "setting_id": "YLkw9eyyK7cm97ek", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json index 694492b626..52c9d083dc 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "8xefmMVdxxfX5MTl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json index ec49bea8c6..f9776005d8 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V3SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "DLABbffpOkmSzZrG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json index 7d4eef8be2..efaba44268 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "8Ok1ykiLVdEftiJO", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json index 4de5bed1c6..a1ad472270 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "y5dNuwrcPQ1xUKOM", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json index 3abc3478f3..4c9413c6e1 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jy8Ih6XxbX6mY2Z2", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json index 9dfdc2bc12..761c7164c8 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5x3ZLLMD1JScujiM", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json index 5546e8b916..fac00205d0 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5S1.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lRpMOtyu8tTd4q5C", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json index 98e7815784..3ffeed2563 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "HWmFUQgTTKxAkHnA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Hi 0.4 nozzle.json index 5a5b6096a0..36e31c387e 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Hi 0.4 nozzle.json @@ -187,8 +187,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", "prime_volume": "45", @@ -266,4 +264,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "90", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index eaaeb4529f..0a1aa84ab7 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json @@ -182,8 +182,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "30", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -264,4 +262,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json index 1a4bd4a3f3..1d3aaa5305 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "aBAXeSGAYu5QgS8m", "name": "0.20mm Standard @Creality K1 Max_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "aBAXeSGAYu5QgS8m", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json index 19b01a9964..343dc08735 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE 0.4.json @@ -179,8 +179,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", "prime_volume": "45", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json index b7365760f4..020d100487 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "RBEfIJsnl68JBPDc", "name": "0.20mm Standard @Creality K1 SE_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "RBEfIJsnl68JBPDc", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json index aa8e7b440a..cc45207d21 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C 0.4 nozzle.json @@ -182,8 +182,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -264,4 +262,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json index 882703434d..d5f8e9f5a9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "KXIWcAo9MAwFwT70", "name": "0.20mm Standard @Creality K1C_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "KXIWcAo9MAwFwT70", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json index 51ada298d8..b49612f90d 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json @@ -182,8 +182,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "30", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -264,4 +262,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json index 85dd6bbf3d..6a48c91240 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "x8wjQRt9jfXwd6cJ", "name": "0.20mm Standard @Creality K1_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "x8wjQRt9jfXwd6cJ", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 0.4 nozzle.json index ab4c3c4581..f0678f0fb0 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "4xypdknoIfLrsbrs", "name": "0.20mm Standard @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "4xypdknoIfLrsbrs", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -270,6 +269,5 @@ "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", - "xy_hole_compensation": "0", - "overhang_totally_speed": "25" -} \ No newline at end of file + "xy_hole_compensation": "0" +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json index 9faaa2515e..b3270bcfc1 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Plus 0.4 nozzle.json @@ -172,8 +172,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "prime_tower_brim_width": "3", "prime_volume": "45", "print_flow_ratio": "1", @@ -243,4 +241,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json index d46a33f97e..7ef44f3d9a 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 Pro 0.4 nozzle.json @@ -180,8 +180,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", "prime_volume": "45", @@ -266,4 +264,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json index 39876b77dd..debcf747fb 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K2 SE 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "eXLuYlHmWAomEpIp", "name": "0.20mm Standard @Creality K2 SE 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "eXLuYlHmWAomEpIp", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json index 11e1f6ed45..19e58926e3 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "VxY2jazB2Kn4930i", "name": "0.20mm Standard @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "VxY2jazB2Kn4930i", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -176,7 +174,6 @@ "small_area_infill_flow_compensation_model": "0,0;\n0.2,0.4444;\n0.4,0.6145;\n0.6,0.7059;\n0.8,0.7619;\n1.5,0.8571;\n2,0.8889;\n3,0.9231;\n5,0.9520;\n10,1", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "2", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "100%", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json index d06447035a..35a4cab279 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Sermoon V1.json @@ -34,7 +34,6 @@ "inner_wall_acceleration": "6000", "inner_wall_line_width": "0.61", "inner_wall_speed": "195", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.32", "internal_solid_infill_speed": "195", "ironing_flow": "10%", diff --git a/resources/profiles/Creality/process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json index e98933167c..68eb579518 100644 --- a/resources/profiles/Creality/process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Strength @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "wApX9tYxw2iElGhq", "name": "0.20mm Strength @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "wApX9tYxw2iElGhq", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", diff --git a/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json b/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json index d84217d2ff..944efd7c84 100644 --- a/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json +++ b/resources/profiles/Creality/process/0.20mm Ultrafast @Creality Ender-5 Max 0.4mm nozzle.json @@ -128,7 +128,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 0.8 nozzle.json b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 0.8 nozzle.json index 010b4aecbf..ee41e3758a 100644 --- a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json index 0d11e5ac33..87c0158459 100644 --- a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Plus 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "fIlqMCEz5fbmGHKW", "name": "0.24mm Detail @Creality K2 Plus 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "fIlqMCEz5fbmGHKW", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json index 4e6400fb7c..a7ac8696b2 100644 --- a/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Detail @Creality K2 Pro 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json index 0b24f4d0b7..30dceb8779 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5RGkaM3sTHAC90DK", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json index 5b1ef5fde1..995a5865a4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "mEhTPVNyKIXwHM6R", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json index 19d6768727..7d9b92f31e 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "qZkT2BU9Kg4n9tnF", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json index 68257a4de4..6da20505ee 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "g0NQSWW3BZbgAMRl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json index 0c9c307c6b..528033e0ff 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ZdimPQfRwZ0VDiZM", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json index 494a97b4e4..65d672322e 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender-3 V4 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "JxRqFqk1obhdGIKZ", "name": "0.24mm Draft @Creality Ender-3 V4 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "JxRqFqk1obhdGIKZ", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -263,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json index 6f950b8905..321a209d41 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5bb8SQOestc8UdQe", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json index 5458a1290e..a7eeb4b431 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "sP41jQScaMnkdanj", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json index c2cffefbc8..0f72e86f78 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5z5F9heoZFK48zCY", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json index 5b0b8ef11a..bb97f10bd8 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "61RvRyfbHgGvr6eQ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json index 6dfcdc172a..ae13bbdc2e 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "nDVndS7HUxU2wT2D", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json index f0e543f232..b75a5f183d 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jGm1nCGpwxxtCtvT", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json index 80ee65edbd..435d40e856 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "2eTryig3fd51wgQ3", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json index ad27324794..80677ecbe6 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3 Pro 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "3Q7LIYMDI349jST9", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json index 653d012433..40969e1d77 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ZLzHZO4Db6sjb1f1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json index 231e7a82ff..2366b2862a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "mxnyxP2RYe284OB7", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json index a55b4541b3..5889b22d33 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5sa2VFy1tjN907oW", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json index e20cc6741e..2790d07d1b 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3S1Plus 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "MadcYvntjYi46IDu", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json index 5b8482f537..af0c60205c 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "u9TtIf0XBhnWrwND", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json index 73c5f253ce..d7ad5c5844 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2Neo.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "De7wK4KBVZ2BzRx5", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json index c4669560cf..67dd47f057 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "O0jM8sqvBLR5aNfE", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json index f4374f84d0..7e6bde3e85 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3KE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7ZtffBsXW6wPWj7k", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json index 0c781beb53..de48c92b5a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3Plus 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lH3j14miQE62zlSj", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -34,7 +33,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json index 93a2507428..27b156c5d7 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "0SJNhii84pYiz380", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json index beefae6aa5..94e6d6d0f6 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.4.json @@ -6,7 +6,6 @@ "from": "system", "setting_id": "Hg10EUNCLMEYYBN1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json index 17015f12de..a40edcd2e2 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "6F8olUrpFz6cSOfX", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json index f0c9c02f7e..d5970f77bc 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V3SE 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "L6Qdsyt0yW2TCRyk", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json index 0d210f5c9f..389f793d31 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "k1Qi7hPIAi1qp7cA", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Hi 0.4 nozzle.json index 1fce19f64e..1cc8cfed58 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "csR8yY0OEnt7SU6T", "name": "0.24mm Draft @Creality Hi", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "csR8yY0OEnt7SU6T", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,180,5000],[1.0,1.5,160,4000],[1.5,2.0,150,3000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index ce0abbf5ac..1c72943250 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "NGQAnSKnUVHcq0sR", "name": "0.24mm Draft @Creality K1 (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "NGQAnSKnUVHcq0sR", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json index afd921a54b..a4bde680d7 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "Lxyn5qXHZh4GIGS1", "name": "0.24mm Draft @Creality K1 Max_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "Lxyn5qXHZh4GIGS1", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json index 34a577c896..53e2e515f4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "KJc1HuWgcYJkoy32", "name": "0.24mm Draft @Creality K1 SE", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "KJc1HuWgcYJkoy32", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,8 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json index 3522e46d5a..dd17499dfd 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "dPPC73WnlF20wbsm", "name": "0.24mm Draft @Creality K1 SE_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "dPPC73WnlF20wbsm", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -263,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json index 697593d8c4..685f7fb7a3 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "POMxfD8I0LnZO9CB", "name": "0.24mm Draft @Creality K1C", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "POMxfD8I0LnZO9CB", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json index b3bf816290..c081aa886a 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "wGXybdgPzFWozZLw", "name": "0.24mm Draft @Creality K1C_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "wGXybdgPzFWozZLw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json index 9f886804e3..eeccdcc58e 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "rIeugRR6BYXplcpT", "name": "0.24mm Draft @Creality K1Max (0.4 nozzle)", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "rIeugRR6BYXplcpT", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json index 16ebf21b9a..28c0573cff 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1_CFS-C 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "vGw6lrXZLHRNpR6r", "name": "0.24mm Draft @Creality K1_CFS-C 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "vGw6lrXZLHRNpR6r", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,7 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "0", "prime_tower_enhance_type": "chamfer", @@ -265,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 0.4 nozzle.json index cb761dd7cd..263a8b2c80 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "G1PKSuPoCcbIA7Yh", "name": "0.24mm Draft @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "G1PKSuPoCcbIA7Yh", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json index 4676faab10..ab8447edf4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "sPONNeyRg4CxHD1r", "name": "0.24mm Draft @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "sPONNeyRg4CxHD1r", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json index 7c1f71451e..51e23a19c6 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "7V16er03IuXDpO4U", "name": "0.24mm Draft @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "7V16er03IuXDpO4U", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json index f8c9f5dea6..caf35701c4 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "1E0byJ2cjuoubstC", "name": "0.24mm Draft @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "1E0byJ2cjuoubstC", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "30", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -174,7 +172,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "6", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "100%", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json index 5d8dd67e1f..478422242f 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "s3qAAYV2gY2x4rrB", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -31,7 +30,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json index 1d9da9088e..ffe2624415 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Ender3V3Plus 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "w5MuLpLSpMMuLXwf", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -31,7 +30,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality Hi 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality Hi 0.6 nozzle.json index edb3f7e2db..c4f3b2f024 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality Hi 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7uxCpPqUS9Lz1TK8", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -33,7 +32,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json index 3af9088dcd..f8e4b74c0c 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "GDs3Z2oIlW5O1tCx", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json index 9e582fad28..1595bb641e 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1C 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "eF3su8pOiDbEHiOy", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json index cf81e4557b..95dc5074d5 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "IZxO4Gmrh0sqyiC8", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.24", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 0.6 nozzle.json index d57ff66332..cf188dace1 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json index 7cefcf50f9..0cb962d8f0 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Plus 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "rFcFwPDRfrVVWCmp", "name": "0.24mm Optimal @Creality K2 Plus 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "rFcFwPDRfrVVWCmp", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json index 8a246c2245..4255d84839 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K2 Pro 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json b/resources/profiles/Creality/process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json index ab6b0843f4..ae766b65ff 100644 --- a/resources/profiles/Creality/process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.24mm Standard @Creality K2 SE 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "7DN0tghSeRVYQcde", "name": "0.24mm Standard @Creality K2 SE 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "7DN0tghSeRVYQcde", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json b/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json index b67ba120ee..0a403950b9 100644 --- a/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json +++ b/resources/profiles/Creality/process/0.28mm Standard @Creality Sermoon V1.json @@ -34,7 +34,6 @@ "inner_wall_acceleration": "6000", "inner_wall_line_width": "0.61", "inner_wall_speed": "195", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.32", "internal_solid_infill_speed": "195", "ironing_flow": "10%", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json index fcd0453ca2..c3f66146d0 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "nuR9SZ4PCShEC1Cw", "name": "0.28mm SuperDraft @Creality Ender-3 V4 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "nuR9SZ4PCShEC1Cw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -263,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json index 4ca758ed55..4c2962dd26 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "aQmsfZyAfVbBZ9Lh", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json index 79a99fa000..9eba8aff2a 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "oFne48238nyyTRRV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json index 9b6cbd3e33..6ac861cab4 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1ByZYdK7bEtBcJGG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json index 59bd2ac292..3ae69265a6 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "3uR1DRElzIYQ9TDK", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json index 700148dc36..ee377bed8a 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "OWrIrHWU7qzlQyqs", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json index 5a871b4730..ce72fbf16b 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "yMRcZG70S3Vgb3Qh", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json index 2693520fa5..6231185dad 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "N90MCWu17jFkXr2H", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json index 992fc85d7e..364fab8fa5 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Ender3 Pro 0.8.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jFWnCrXEW5bNSLzq", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json index a416d5e082..a7f11d9c78 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality Hi 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "XLp864DPRIWcjHvv", "name": "0.28mm SuperDraft @Creality Hi 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "XLp864DPRIWcjHvv", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,180,5000],[1.0,1.5,160,4000],[1.5,2.0,150,3000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", @@ -264,4 +262,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json index 5686279f27..f6589c4826 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "ELCUvdTCSg4N4HVC", "name": "0.28mm SuperDraft @Creality K2 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "ELCUvdTCSg4N4HVC", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json index 3b2f7e5cc1..2311278057 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "lFZeFNWUsNRW3bvN", "name": "0.28mm SuperDraft @Creality K2 Plus 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "lFZeFNWUsNRW3bvN", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "50", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json index 39760a5c12..6d7f955897 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "KO1MgETYTo42CfhQ", "name": "0.28mm SuperDraft @Creality K2 Pro 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "KO1MgETYTo42CfhQ", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -131,8 +131,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -266,4 +264,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json index e0538e6868..142f71e8bb 100644 --- a/resources/profiles/Creality/process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "ruhDJCxvTN1nB60Z", "name": "0.28mm SuperDraft @Creality SPARKX i7 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "ruhDJCxvTN1nB60Z", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "30", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -174,7 +172,6 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", - "smooth_coefficient": "6", "smooth_speed_discontinuity_area": "1", "solid_infill_filament": "1", "sparse_infill_acceleration": "100%", diff --git a/resources/profiles/Creality/process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json b/resources/profiles/Creality/process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json index b3499fa406..32a280fd55 100644 --- a/resources/profiles/Creality/process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.2mm Standard @Creality Ender-5 Max 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "bG25lTbxHzhcGGQg", "name": "0.2mm Standard @Creality Ender-5 Max 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "bG25lTbxHzhcGGQg", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -128,7 +128,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json b/resources/profiles/Creality/process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json index 248cfee870..75bd7bb2e1 100644 --- a/resources/profiles/Creality/process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json +++ b/resources/profiles/Creality/process/0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "7i9DCEZHvxgrYciY", "name": "0.2mm Ultrafast @Creality Ender-5 Max 0.4 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "7i9DCEZHvxgrYciY", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "25%", "acceleration_limit_mess_enable": "0", @@ -130,7 +130,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json index 14950f486e..f13e0672f3 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender-5 Max 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "eoPcs8fDihwCYFUB", "name": "0.30mm Standard @Creality Ender-5 Max 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "eoPcs8fDihwCYFUB", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -128,7 +128,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json index 92a4a8fc48..87930f8456 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "KZjGEI0aqppw5c55", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json index f1f3d5ce1a..9d192b3877 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Ender3V3Plus 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "MX5VSmoPcOiBESP3", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality Hi 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality Hi 0.6 nozzle.json index a0bce0af8a..d77680e241 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality Hi 0.6 nozzle.json @@ -185,7 +185,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", "prime_volume": "45", @@ -263,4 +262,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "90", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index a4bd5b2abc..9370ba6586 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json @@ -181,8 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -262,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json index d4073f4221..29e07b4305 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 SE 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "qd4AsuXVsp5pvPg4", "name": "0.30mm Standard @Creality K1 SE 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "qd4AsuXVsp5pvPg4", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -128,8 +128,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json index 3f86d9e613..e8dbe2f076 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1C 0.6 nozzle.json @@ -181,8 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -262,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index 54ac0870a4..07539ae51a 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json @@ -181,8 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "15", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -262,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 0.6 nozzle.json index 71facd89ff..fa678432b0 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "nRmO47B1VhqIi2KU", "name": "0.30mm Standard @Creality K2 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "nRmO47B1VhqIi2KU", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess_enable": "0", @@ -123,7 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -254,7 +253,6 @@ "material_flow_dependent_temperature": "0", "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", "min_length_factor": "0.5", - "overhang_totally_speed": "25", "prime_tower_enhance_type": "chamfer", "print_order": "default", "scarf_angle_threshold": "155", @@ -272,4 +270,4 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "speed_limit_to_height": "[[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]", "wall_direction": "auto" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json index 216d964e6e..b414b50315 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Plus 0.6 nozzle.json @@ -171,8 +171,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "prime_tower_brim_width": "3", "prime_volume": "45", "print_flow_ratio": "1", @@ -241,4 +239,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json index 2bf82bc989..677f36d515 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K2 Pro 0.6 nozzle.json @@ -180,8 +180,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", "prime_volume": "45", @@ -266,4 +264,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json index 4da92d3732..b0ff7dc5aa 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality SPARKX i7 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "obWYPAVrLuKr93Xe", "name": "0.30mm Standard @Creality SPARKX i7 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "obWYPAVrLuKr93Xe", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json index c9a7069a2a..8af2bedd6f 100644 --- a/resources/profiles/Creality/process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.30mm Strength @Creality K2 Plus 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "h9vwxtNQGvgHVldi", "name": "0.30mm Strength @Creality K2 Plus 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "h9vwxtNQGvgHVldi", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json index 24fedd0965..3f0410b08f 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Rc7DUtP8slk0zORl", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.32", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json index 2823947840..ba7e74b9a4 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1C 0.8 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "8Yz1tYKgOhlRhEFw", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.32", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json index 40f87281de..2f03446779 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "yDUagPaIFkVkQ7aL", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.32", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 0.8 nozzle.json index e376b9dfe3..cd7aaf30b1 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json index ca58516410..969f802a02 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Plus 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "wUXKe2HJBnrZhwCJ", "name": "0.32mm Optimal @Creality K2 Plus 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "wUXKe2HJBnrZhwCJ", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000], [1.0,1.5,80,5500], [1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json index 0308bb49f6..d0566f4bc1 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K2 Pro 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json index f12fb8b016..1886dd1561 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "5L1oQB22HBdoaocC", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json index 7a1a3c401d..b3e49730a3 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Ender3V3Plus 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "r3dweAtprgzF0jON", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality Hi 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality Hi 0.6 nozzle.json index 0ada896430..929f9951eb 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality Hi 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality Hi 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lD86ZxmhqaFLOXs7", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -33,7 +32,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json index d3de4eb889..002d380f9f 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "XCDNFQBF7Kx54Z2Y", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json index 86e132abb4..620d9cc2df 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1C 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "3yO02rZelrUrGct2", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json index 69d90fbef6..d4f253fa0c 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "OzKdcW8QjYz9Ekfg", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.36", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 0.6 nozzle.json index da7ca48be3..5e4b57e685 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json index 8edd6e869f..81191f9511 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Plus 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "psLMoG691hQ5PSrK", "name": "0.36mm Draft @Creality K2 Plus 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "psLMoG691hQ5PSrK", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -241,4 +239,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json index 955f1332ed..55a9d77ea2 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K2 Pro 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json index 15943f5c2c..c51f64becf 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality Ender-5 Max 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "7HQvsdltfdC8N5Hw", "name": "0.40mm Standard @Creality Ender-5 Max 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "7HQvsdltfdC8N5Hw", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess_enable": "0", @@ -128,7 +128,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality Hi 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality Hi 0.8 nozzle.json index aa0efb8f49..5f625055bc 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality Hi 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality Hi 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "1xCIS6DBlkVcCLSf", "name": "0.40mm Standard @Creality Hi 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "1xCIS6DBlkVcCLSf", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -129,7 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "1", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "cone", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json index 2de391b8ad..ba5420a888 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json @@ -181,7 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -261,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json index 88bc46add2..4d73fdaa0c 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 SE 0.8 nozzle.json @@ -181,7 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json index 5cd1a9cb6a..e8b1548947 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1C 0.8 nozzle.json @@ -181,7 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -261,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index c1c968cbb6..e245d5acd2 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json @@ -181,7 +181,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", @@ -261,4 +260,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 0.8 nozzle.json index b084f1cf47..00160429ce 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "mvjFUBLuSrZ1fm1e", "name": "0.40mm Standard @Creality K2 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "mvjFUBLuSrZ1fm1e", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100", "acceleration_limit_mess_enable": "0", @@ -123,7 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "40", @@ -254,7 +253,6 @@ "material_flow_dependent_temperature": "0", "material_flow_temp_graph": "[[3.0,210],[10.0,220],[12.0,230]]", "min_length_factor": "0.5", - "overhang_totally_speed": "20", "prime_tower_enhance_type": "chamfer", "print_order": "default", "scarf_angle_threshold": "155", @@ -272,4 +270,4 @@ "small_area_infill_flow_compensation_model": "0,0;\"\\n0.2,0.4444\";\"\\n0.4,0.6145\";\"\\n0.6,0.7059\";\"\\n0.8,0.7619\";\"\\n1.5,0.8571\";\"\\n2,0.8889\";\"\\n3,0.9231\";\"\\n5,0.9520\";\"\\n10,1\"", "speed_limit_to_height": "[[100,150,100,6000],[150,200,80,5500],[200,250,60,5000]]", "wall_direction": "auto" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json index 3baf52acf5..4452d1a7bb 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Plus 0.8 nozzle.json @@ -171,8 +171,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "prime_tower_brim_width": "3", "prime_volume": "45", "print_flow_ratio": "1", @@ -241,4 +239,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json index df23b1f46c..64c18db3e6 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K2 Pro 0.8 nozzle.json @@ -180,8 +180,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "20", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", "prime_volume": "45", @@ -266,4 +264,4 @@ "wipe_tower_extra_spacing": "100%", "wipe_tower_rotation_angle": "0", "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json index 13c3d5986f..675dabd694 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality SPARKX i7 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "auHhZ5g7PonLi942", "name": "0.40mm Standard @Creality SPARKX i7 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "auHhZ5g7PonLi942", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "acceleration_limit_mess": "[[1,1.2,150,5000]]", @@ -129,8 +129,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "20", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_enhance_type": "chamfer", diff --git a/resources/profiles/Creality/process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json index c164cd88d4..aabb6ed9b2 100644 --- a/resources/profiles/Creality/process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.40mm Strength @Creality K2 Plus 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "DPs3K2D8t8dGscqK", "name": "0.40mm Strength @Creality K2 Plus 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "DPs3K2D8t8dGscqK", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess_enable": "0", @@ -123,8 +123,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", diff --git a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json index d732c7015c..d131d479a0 100644 --- a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json index d3076515c9..836a7a1bac 100644 --- a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "kaJFaxUX6gSqC3Y7", "name": "0.42mm SuperDraft @Creality K2 Plus 0.6 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "kaJFaxUX6gSqC3Y7", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json index 78bd43a0d9..d4ef78cc34 100644 --- a/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json +++ b/resources/profiles/Creality/process/0.42mm SuperDraft @Creality K2 Pro 0.6 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.62", "initial_layer_print_height": "0.3", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json index 3fa885318e..6c008ce9e1 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "VMUL5DemqZSKkMEJ", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.48", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json index 600550ddc5..d7192ac77c 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1C 0.8 nozzle.json @@ -6,7 +6,6 @@ "from": "system", "setting_id": "qaiff3f8gSQ1GVj1", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -31,7 +30,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.48", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json index 6041d4c030..70a73e2f58 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dIWKOSX80OJ6ixTT", "instantiation": "true", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -30,7 +29,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.7", "initial_layer_print_height": "0.48", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 0.8 nozzle.json index b3508aab5c..6ce76e1469 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json index 97da7fe92e..afb293a330 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Plus 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "s3FIq2ua0ODDqxtm", "name": "0.48mm Draft @Creality K2 Plus 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "s3FIq2ua0ODDqxtm", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json index 0cd49b9a89..ac12558c55 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K2 Pro 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json index 5f97213187..f10bb8ddfb 100644 --- a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json index 8113cadf74..17fdbca6e3 100644 --- a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "process", - "setting_id": "OUVOMZEwJDilvXiO", "name": "0.56mm SuperDraft @Creality K2 Plus 0.8 nozzle", - "from": "system", - "instantiation": "true", "inherits": "fdm_process_creality_common", + "from": "system", + "setting_id": "OUVOMZEwJDilvXiO", + "instantiation": "true", "accel_to_decel_enable": "1", "accel_to_decel_factor": "100%", "acceleration_limit_mess": "[[0.5,1.0,100,6000],[1.0,1.5,80,5500],[1.5,2.0,60,5000]]", @@ -124,8 +124,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "overhang_totally_speed": "25", "precise_outer_wall": "0", "prime_tower_brim_width": "3", "prime_tower_width": "60", @@ -243,4 +241,4 @@ "wiping_volumes_extruders": "70,70,70,70,70,70,70,70,70,70", "xy_contour_compensation": "0", "xy_hole_compensation": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json index 3b12ac6944..db588cb657 100644 --- a/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json +++ b/resources/profiles/Creality/process/0.56mm SuperDraft @Creality K2 Pro 0.8 nozzle.json @@ -31,7 +31,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.82", "initial_layer_print_height": "0.4", diff --git a/resources/profiles/Creality/process/fdm_process_common.json b/resources/profiles/Creality/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Creality/process/fdm_process_common.json +++ b/resources/profiles/Creality/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Creality/process/fdm_process_creality_common.json b/resources/profiles/Creality/process/fdm_process_creality_common.json index 7ec48d4800..2fccc865d8 100644 --- a/resources/profiles/Creality/process/fdm_process_creality_common.json +++ b/resources/profiles/Creality/process/fdm_process_creality_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index 9f2100a187..f70517a0b1 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json index ca0143d65c..93949a7c80 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon ABS @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS @base", + "renamed_from": "Cubicon ABS @base", "setting_id": "VJEyK87ZYvHmamB9", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json index 72b2c51e50..ea320b01e4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABS @base", "from": "system", "setting_id": "Kz41mb2M9xLbEJ97", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json index 38a00a4624..1f4da6c3f8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS @base", "setting_id": "A5FQdwh0Xo7aTRpq", + "filament_id": "OFpDo5Ix", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index 55fbd40ee4..31efe73b11 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABS @base", "inherits": "fdm_filament_abs", - "setting_id": "aZRVIlDze62Bbw81", - "filament_id": "P510cfb0", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFpDo5Ix", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABS @base" - ], "filament_vendor": [ "Cubicon" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json index 897f3cceff..2788688e1b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon ABS-A100 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", + "renamed_from": "Cubicon ABS-A100 @base", "setting_id": "OfiOryklf7FDVCz8", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json index f0d3715d32..5c85efa062 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABS-A100 @base", "from": "system", "setting_id": "pIyU9uXQ5V3hsg5F", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json index c6965435a0..765f1ce75c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABS-A100 @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABS-A100 @base", "setting_id": "xhYh9x1vescinfbF", + "filament_id": "OFy8tYJE", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index dddc147ff2..5c64ed0fa5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABS-A100 @base", "inherits": "Cubicon ABS @base", - "setting_id": "vGIT4KZvqojIh2up", - "filament_id": "P510cfb1", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFy8tYJE", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABS-A100 @base" - ], "filament_type": [ "ABS" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json index 7596fa618a..cdb6324af1 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon ABSk @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon ABSk @base", + "renamed_from": "Cubicon ABSk @base", "setting_id": "TXcodZkab4fofnEn", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json index 63c827c034..1a2e21517c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon ABSk @base", "from": "system", "setting_id": "CsthNnKn8WlBbkP4", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json index 586982ea51..1295c2189e 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon ABSk @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon ABSk @base", "setting_id": "UVitMFMxvdf34qZw", + "filament_id": "OForhBi4", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index e1546d3bae..46a8f2d48c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon ABSk @base", "inherits": "Cubicon ABS @base", - "setting_id": "UbOUO0K3Y2iRPBtf", - "filament_id": "P510cfb2", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OForhBi4", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon ABSk @base" - ], "filament_type": [ "ABS" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json index c8af313f4f..09a5d917f4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon PA-CF @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PA-CF @base", + "renamed_from": "Cubicon PA-CF @base", "setting_id": "nupuIJggdc1EKDqG", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json index 40aa29b577..7cb486c4e8 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PA-CF @base", "from": "system", "setting_id": "NPjuy4deP6Ly7u9s", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json index 6e307bed78..4279540ac4 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PA-CF @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PA-CF @base", "setting_id": "ygB1Uf9Vbw9LJZc8", + "filament_id": "OFiEz2XI", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json index 51c89949f6..b9ac6cf4c9 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PA-CF @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PA-CF @base", "inherits": "fdm_filament_pa", - "setting_id": "55cJDyCoEudfOePY", - "filament_id": "P510cfd0", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFiEz2XI", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PA-CF @base" - ], "filament_type": [ "PA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json index b83d690fff..e37f5f063c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon PC @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PC @base", + "renamed_from": "Cubicon PC @base", "setting_id": "c0sUPS0SRYUNjEpB", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json index 868ec82e34..9890ed585f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PC @base", "from": "system", "setting_id": "XGXjHwuHUjtAJGl1", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json index 07a2308add..63be065b85 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PC @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PC @base", "setting_id": "jbYKOK1A0Oxm9t0f", + "filament_id": "OFEj7sca", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index de42989e84..001434a2b1 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PC @base", "inherits": "fdm_filament_pc", - "setting_id": "Mzg6jfwb2nqfGkdV", - "filament_id": "P510cfd0", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFEj7sca", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PC @base" - ], "filament_type": [ "PC" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json index 62a4f58c53..db9a90c42d 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-I 0.4 nozzle.json @@ -2,7 +2,9 @@ "type": "filament", "name": "Cubicon PETG @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PETG @base", + "renamed_from": "Cubicon PETG @base", "setting_id": "dsX01tCkd2Usk104", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json index 9c1108a73f..b87bc4b3e5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PETG @base", "from": "system", "setting_id": "2hYoCR5qUXCWIAxZ", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json index 14a23cc728..1b46fe6d64 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle.json @@ -3,6 +3,7 @@ "name": "Cubicon PETG @Cubicon xCeler-Plus 0.4 nozzle", "inherits": "Cubicon PETG @base", "setting_id": "5pfiRdyNz9dvT4Q6", + "filament_id": "OFoBTKmn", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index 2242ba36ca..61fc5c647a 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PETG @base", "inherits": "fdm_filament_pet", - "setting_id": "bGfz4phwIdqSz0Hx", - "filament_id": "P510cfc0", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFoBTKmn", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PETG @base" - ], "filament_type": [ "PETG" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json index bca40b2814..3b3c9b1d4c 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-I 0.4 nozzle.json @@ -2,8 +2,10 @@ "type": "filament", "name": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLA @base", + "renamed_from": "Cubicon PLA @base", "from": "system", "setting_id": "xXJgHAeNf1JdCitr", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json index 54ffbd694c..940152ae16 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "o2BQL6OKtxDmBkWV", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json index 04cac6ab7d..ee5a5a1d3d 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA @base", "from": "system", "setting_id": "WkZrzDlGvb25OtrF", + "filament_id": "OFEwRwmL", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 665ba58d59..53df18afc5 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -3,17 +3,9 @@ "name": "Cubicon PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "setting_id": "ypwdJAu0NlEsWpf4", - "filament_id": "P510cfa0", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFEwRwmL", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "CBC_MTC_0" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json index 7442cf2490..3674c61e3f 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle.json @@ -2,8 +2,10 @@ "type": "filament", "name": "Cubicon PLA+ @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLA+ @base", + "renamed_from": "Cubicon PLA+ @base", "from": "system", "setting_id": "fNR2Bw3e4TGcWhq0", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json index 76a31d14c1..32a6607377 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "wukhnaCJaOLUUdiU", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json index 2f37996fe3..823e0e51ca 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLA+ @base", "from": "system", "setting_id": "JVShu8DKQ3euGHec", + "filament_id": "OF7tt7DO", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index cb916a9410..5e7c8dc10b 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -2,19 +2,11 @@ "type": "filament", "name": "Cubicon PLA+ @base", "inherits": "Cubicon PLA @base", - "setting_id": "ETnuhiOZRh1jxrVk", - "filament_id": "P510cfa1", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OF7tt7DO", + "instantiation": "false", "default_filament_colour": [ "" ], - "filament_settings_id": [ - "Cubicon PLA+ @base" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json index 10d2a2e6ae..74bff5f995 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle.json @@ -2,8 +2,10 @@ "type": "filament", "name": "Cubicon PLAi21 @Cubicon xCeler-I 0.4 nozzle", "inherits": "Cubicon PLAi21 @base", + "renamed_from": "Cubicon PLAi21 @base", "from": "system", "setting_id": "vcLVF3cglagBfVAF", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json index 73404c4729..999da52ede 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Mini 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "3TbOucKB5TGk8sXG", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Mini 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json index 0769e1fa3d..637cdb87f2 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @Cubicon xCeler-Plus 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Cubicon PLAi21 @base", "from": "system", "setting_id": "Vm1oDASHoFUfDrzQ", + "filament_id": "OFRhBryT", "instantiation": "true", "compatible_printers": [ "Cubicon xCeler-Plus 0.4 nozzle" diff --git a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json index 831450deef..39b5b31430 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLAi21 @base.json @@ -2,17 +2,9 @@ "type": "filament", "name": "Cubicon PLAi21 @base", "inherits": "Cubicon PLA @base", - "setting_id": "mnwC7ijXXV72lBOt", - "filament_id": "P510cfa2", - "instantiation": "true", - "compatible_printers": [ - "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" - ], + "filament_id": "OFRhBryT", + "instantiation": "false", "default_filament_colour": "", - "filament_settings_id": [ - "Cubicon PLAi21 @base" - ], "filament_type": [ "PLA" ], diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pa.json b/resources/profiles/Cubicon/filament/fdm_filament_pa.json index c2e4cf86df..b75ab9a8c9 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pa.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN99", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pc.json b/resources/profiles/Cubicon/filament/fdm_filament_pc.json index 0f550063ad..120689c074 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pc.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFC99", "instantiation": "false", "supertack_plate_temp": [ "0" diff --git a/resources/profiles/Cubicon/filament/fdm_filament_pet.json b/resources/profiles/Cubicon/filament/fdm_filament_pet.json index 250915a07b..63996fb69a 100644 --- a/resources/profiles/Cubicon/filament/fdm_filament_pet.json +++ b/resources/profiles/Cubicon/filament/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG99", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json index 140b31986c..60ab5eac11 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-I" + "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ @@ -213,7 +213,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json index 0377e94716..64d00c37c4 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-I.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-I" + "default_materials": "Cubicon PLA @Cubicon xCeler-I 0.4 nozzle" } diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json index 451e4716d2..8020cac27e 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-Mini" + "Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ @@ -213,7 +213,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json index af43717058..bb55969134 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Mini.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-Mini" + "default_materials": "Cubicon PLA @Cubicon xCeler-Mini 0.4 nozzle" } diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json index 483c82be07..398f4e3457 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Cubicon PLA @Cubicon xCeler-Plus" + "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle" ], "default_print_profile": "cubicon default @base", "deretraction_speed": [ @@ -213,7 +213,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json index 28bdd1ce65..41bac9acc1 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus.json @@ -6,5 +6,5 @@ "bed_texture": "Cubicon xCeler-I_bed_texture.svg", "family": "Cubicon", "machine_tech": "FFF", - "default_materials": "Cubicon PLA @Cubicon xCeler-Plus" + "default_materials": "Cubicon PLA @Cubicon xCeler-Plus 0.4 nozzle" } diff --git a/resources/profiles/Cubicon/machine/fdm_machine_common.json b/resources/profiles/Cubicon/machine/fdm_machine_common.json index 1264456731..2654ef5927 100644 --- a/resources/profiles/Cubicon/machine/fdm_machine_common.json +++ b/resources/profiles/Cubicon/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "support_chamber_temp_control": "0", "support_air_filtration": "0", "machine_max_acceleration_e": [ diff --git a/resources/profiles/Cubicon/process/fdm_process_common.json b/resources/profiles/Cubicon/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Cubicon/process/fdm_process_common.json +++ b/resources/profiles/Cubicon/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Cubicon/process/process template @base.json b/resources/profiles/Cubicon/process/process template @base.json index 74ddfa11d6..073bf4ea23 100644 --- a/resources/profiles/Cubicon/process/process template @base.json +++ b/resources/profiles/Cubicon/process/process template @base.json @@ -147,7 +147,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "precise_z_height": "0", diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 7eba013111..aceecc557a 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json index bf48e0488b..615d3aafa4 100644 --- a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json @@ -15,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -30,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json index ad26608bff..cef361767f 100644 --- a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json @@ -15,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -30,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json index d710282360..f8a3f9d4ff 100644 --- a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json @@ -15,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -30,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json index 481fd04152..3db93c2e10 100644 --- a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json @@ -15,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -30,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json index 47f175c277..8fbc18b513 100644 --- a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PC @System", "from": "system", "setting_id": "HMOa2jbj19Xjipt5", - "filament_id": "GFC99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" @@ -16,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -31,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index 95e47a32a8..faba4cf7cb 100644 --- a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "4qShNrl9EWAVBfeG", - "filament_id": "GFG99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" @@ -16,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -31,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index b8fe088325..5f20b83ec5 100644 --- a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "WbAYFZdqFwEZnNAX", - "filament_id": "GFL99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" @@ -16,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -31,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 4a766aa3ef..ccfc71ebb7 100644 --- a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "53UFt3Q63NB0ztlP", - "filament_id": "GFL98", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" @@ -16,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -31,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index 6fe168abcc..67a46e0129 100644 --- a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "dyOUyXNOKP1VmSal", - "filament_id": "GFS99", "instantiation": "true", "filament_cooling_final_speed": [ "3.5" @@ -16,9 +15,6 @@ "filament_cooling_moves": [ "2" ], - "filament_load_time": [ - "10.5" - ], "filament_loading_speed": [ "10" ], @@ -31,9 +27,6 @@ "filament_stamping_loading_speed": [ "29" ], - "filament_unload_time": [ - "8.5" - ], "filament_unloading_speed": [ "100" ], diff --git a/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json index c88ee2da7d..2527ff824e 100644 --- a/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json @@ -5,7 +5,6 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "H45dfn4BGdLAx9nN", - "filament_id": "GFU99", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Custom/machine/fdm_klipper_common.json b/resources/profiles/Custom/machine/fdm_klipper_common.json index a0ee0f1a47..0080d0ebb0 100644 --- a/resources/profiles/Custom/machine/fdm_klipper_common.json +++ b/resources/profiles/Custom/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Slope Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Custom/machine/fdm_machine_common.json b/resources/profiles/Custom/machine/fdm_machine_common.json index 963f39c9d8..bf8f2249cf 100644 --- a/resources/profiles/Custom/machine/fdm_machine_common.json +++ b/resources/profiles/Custom/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Custom/machine/fdm_repetier_common.json b/resources/profiles/Custom/machine/fdm_repetier_common.json index b36b716e4e..27b4dd7741 100644 --- a/resources/profiles/Custom/machine/fdm_repetier_common.json +++ b/resources/profiles/Custom/machine/fdm_repetier_common.json @@ -119,7 +119,6 @@ "30" ], "z_hop_types": "Slope Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ @@ -140,4 +139,4 @@ "scan_first_layer": "0", "nozzle_type": "undefine", "auxiliary_fan": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Custom/machine/fdm_rrf_common.json b/resources/profiles/Custom/machine/fdm_rrf_common.json index 2fc9df9a3d..e9a1301622 100644 --- a/resources/profiles/Custom/machine/fdm_rrf_common.json +++ b/resources/profiles/Custom/machine/fdm_rrf_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Slope Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Custom/process/fdm_process_common.json b/resources/profiles/Custom/process/fdm_process_common.json index b8e882770a..0d558129af 100644 --- a/resources/profiles/Custom/process/fdm_process_common.json +++ b/resources/profiles/Custom/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -83,7 +82,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Custom/process/fdm_process_marlin_common.json b/resources/profiles/Custom/process/fdm_process_marlin_common.json index 6b1b1434a7..5f5c10f173 100644 --- a/resources/profiles/Custom/process/fdm_process_marlin_common.json +++ b/resources/profiles/Custom/process/fdm_process_marlin_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Custom/process/fdm_process_repetier_common.json b/resources/profiles/Custom/process/fdm_process_repetier_common.json index 3a9bc23306..66df7ad018 100644 --- a/resources/profiles/Custom/process/fdm_process_repetier_common.json +++ b/resources/profiles/Custom/process/fdm_process_repetier_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -105,4 +104,4 @@ "compatible_printers": [ "MyRepetier 0.4 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/profiles/Custom/process/fdm_process_rrf_common.json b/resources/profiles/Custom/process/fdm_process_rrf_common.json index e22df25aab..469ca6ecfd 100644 --- a/resources/profiles/Custom/process/fdm_process_rrf_common.json +++ b/resources/profiles/Custom/process/fdm_process_rrf_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json index c583fa9a16..6ef943d248 100755 --- a/resources/profiles/DeltaMaker.json +++ b/resources/profiles/DeltaMaker.json @@ -1,7 +1,7 @@ { "name": "DeltaMaker", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "DeltaMaker configurations", "machine_model_list": [ @@ -58,20 +58,20 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "DeltaMaker Generic PETG", - "sub_path": "filament/DeltaMaker Generic PETG.json" + "name": "Generic PETG @DeltaMaker", + "sub_path": "filament/Generic PETG @DeltaMaker.json" }, { "name": "DeltaMaker Brand PLA", "sub_path": "filament/DeltaMaker Brand PLA.json" }, { - "name": "DeltaMaker Generic PLA", - "sub_path": "filament/DeltaMaker Generic PLA.json" + "name": "Generic PLA @DeltaMaker", + "sub_path": "filament/Generic PLA @DeltaMaker.json" }, { - "name": "DeltaMaker Generic TPU", - "sub_path": "filament/DeltaMaker Generic TPU.json" + "name": "Generic TPU @DeltaMaker", + "sub_path": "filament/Generic TPU @DeltaMaker.json" } ], "machine_list": [ diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json index 2d905807fb..713eac979d 100755 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "bvZOHe5ejWqBALPQ", - "filament_id": "GFL99", + "filament_id": "OFRpAZ1P", "instantiation": "true", "filament_flow_ratio": [ "0.987" diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json deleted file mode 100755 index 32980cb53e..0000000000 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "filament", - "name": "DeltaMaker Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "qlQo6a93esZv2l9a", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "20" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "DeltaMaker 2 0.35 nozzle", - "DeltaMaker 2T 0.5 nozzle", - "DeltaMaker 2XT 0.5 nozzle" - ] -} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json deleted file mode 100755 index d4b8ab071c..0000000000 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "DeltaMaker Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "gfxr3MiE4uI2Xxy7", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.987" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "DeltaMaker 2 0.35 nozzle", - "DeltaMaker 2T 0.5 nozzle", - "DeltaMaker 2XT 0.5 nozzle" - ] -} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json deleted file mode 100755 index e971b6884c..0000000000 --- a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "DeltaMaker Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "2L1U33wC0LofrMWs", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "4.5" - ], - "compatible_printers": [ - "DeltaMaker 2 0.35 nozzle", - "DeltaMaker 2T 0.5 nozzle", - "DeltaMaker 2XT 0.5 nozzle" - ] -} diff --git a/resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json b/resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json new file mode 100755 index 0000000000..a31ad9aec5 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/Generic PETG @DeltaMaker.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "name": "Generic PETG @DeltaMaker", + "inherits": "fdm_filament_pet", + "renamed_from": "DeltaMaker Generic PETG", + "from": "system", + "setting_id": "XmKr3I3RjeI3hm6F", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json b/resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json new file mode 100755 index 0000000000..2e2b626feb --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/Generic PLA @DeltaMaker.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PLA @DeltaMaker", + "inherits": "fdm_filament_pla", + "renamed_from": "DeltaMaker Generic PLA", + "from": "system", + "setting_id": "ITJo0Cig9myqk1uB", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.987" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json b/resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json new file mode 100755 index 0000000000..edfc8a1cd2 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/Generic TPU @DeltaMaker.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic TPU @DeltaMaker", + "inherits": "fdm_filament_tpu", + "renamed_from": "DeltaMaker Generic TPU", + "from": "system", + "setting_id": "uWHBbbhFzvWq0qUP", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "4.5" + ], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json index f28c54eedc..8e7f98c81d 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json index e7693bc7ce..7b57c1956b 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json index 4f83ddb32e..2b622e3c68 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json index 37b989997b..88846595bf 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json index 5ce9d45438..1767cda770 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json @@ -22,6 +22,6 @@ ], "default_filament_profile": [ "DeltaMaker Brand PLA", - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ] } diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json index 9d10697dd8..0b3870e4ac 100755 --- a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json @@ -7,5 +7,5 @@ "family": "DeltaMaker", "bed_model": "deltamaker_2_buildplate_model.stl", "bed_texture": "deltamaker_2_buildplate_texture.svg", - "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" + "default_materials": "DeltaMaker Brand PLA;Generic PLA @DeltaMaker" } diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json index 1033551ca9..653ec60927 100755 --- a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json +++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json @@ -117,14 +117,13 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "1", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" ], "default_filament_profile": [ - "DeltaMaker Generic PLA" + "Generic PLA @DeltaMaker" ], "default_print_profile": "0.20mm Standard @DeltaMaker 2 0.35 nozzle", "bed_exclude_area": [ diff --git a/resources/profiles/DeltaMaker/machine/fdm_machine_common.json b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json index 12c0e7d104..7e49364d76 100755 --- a/resources/profiles/DeltaMaker/machine/fdm_machine_common.json +++ b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json @@ -11,7 +11,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "1", "machine_max_acceleration_e": [ "5000" ], @@ -102,7 +101,6 @@ ], "single_extruder_multi_material": "0", "change_filament_gcode": "", - "z_lift_type": "NormalLift", "default_print_profile": "", "nozzle_type": "undefine", "auxiliary_fan": "0", diff --git a/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json index a5a64bfede..3587ef7e7d 100755 --- a/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json +++ b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "CPkjzrLXDcdnT5u1", "instantiation": "true", - "adaptive_layer_height": "1", "layer_height": "0.25", "bottom_shell_layers": "3", "bridge_speed": "60", diff --git a/resources/profiles/DeltaMaker/process/fdm_process_common.json b/resources/profiles/DeltaMaker/process/fdm_process_common.json index 80c74007f0..09d47aab9d 100755 --- a/resources/profiles/DeltaMaker/process/fdm_process_common.json +++ b/resources/profiles/DeltaMaker/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "20.0", "bottom_surface_pattern": "monotonic", @@ -82,7 +81,6 @@ "support_object_xy_distance": "0.8", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Dremel.json b/resources/profiles/Dremel.json index c8462f0414..3d804f6a1b 100644 --- a/resources/profiles/Dremel.json +++ b/resources/profiles/Dremel.json @@ -1,6 +1,6 @@ { "name": "Dremel", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Dremel configurations", "machine_model_list": [ @@ -89,20 +89,16 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Dremel Generic PLA", - "sub_path": "filament/Dremel Generic PLA.json" + "name": "Generic PLA @Dremel 3D20 all", + "sub_path": "filament/Generic PLA @Dremel 3D20 all.json" }, { - "name": "Dremel Generic PLA @3D20 all", - "sub_path": "filament/Dremel Generic PLA @3D20 all.json" + "name": "Generic PLA @Dremel 3D40 all", + "sub_path": "filament/Generic PLA @Dremel 3D40 all.json" }, { - "name": "Dremel Generic PLA @3D40 all", - "sub_path": "filament/Dremel Generic PLA @3D40 all.json" - }, - { - "name": "Dremel Generic PLA @3D45 all", - "sub_path": "filament/Dremel Generic PLA @3D45 all.json" + "name": "Generic PLA @Dremel 3D45 all", + "sub_path": "filament/Generic PLA @Dremel 3D45 all.json" } ], "machine_list": [ diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json deleted file mode 100644 index 7e76e2404b..0000000000 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D20 all.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Dremel Generic PLA @3D20 all", - "inherits": "Dremel Generic PLA", - "from": "system", - "setting_id": "weKWPiNIe3TmOXRn", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_retraction_length": [ - "3" - ], - "filament_retraction_speed": [ - "60" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "compatible_printers": [ - "Dremel 3D20 0.4 nozzle" - ] -} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json deleted file mode 100644 index 8074c6f0a3..0000000000 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D40 all.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "filament", - "name": "Dremel Generic PLA @3D40 all", - "inherits": "Dremel Generic PLA", - "from": "system", - "setting_id": "kZAEjhLS29WQeyf1", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_retraction_length": [ - "3" - ], - "filament_retraction_speed": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "compatible_printers": [ - "Dremel 3D40 0.4 nozzle" - ] -} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json b/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json deleted file mode 100644 index fb9c31fe0e..0000000000 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA @3D45 all.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Dremel Generic PLA @3D45 all", - "inherits": "Dremel Generic PLA", - "from": "system", - "setting_id": "pIlkZjNrXnHJDszp", - "instantiation": "true", - "slow_down_min_speed": "10", - "close_fan_the_first_x_layers": "3", - "filament_loading_speed_start": "3", - "filament_loading_speed": "28", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "90", - "filament_cooling_moves": "4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_final_speed": "3.4", - "filament_retraction_length": [ - "3" - ], - "filament_retraction_speed": [ - "60" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "compatible_printers": [ - "Dremel 3D45 0.4 nozzle" - ] -} diff --git a/resources/profiles/Dremel/filament/Dremel Generic PLA.json b/resources/profiles/Dremel/filament/Dremel Generic PLA.json deleted file mode 100644 index b5263d20f3..0000000000 --- a/resources/profiles/Dremel/filament/Dremel Generic PLA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Dremel Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "blJERdJqaaRmRdD4", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Dremel 3D45 0.4 nozzle", - "Dremel 3D40 0.4 nozzle", - "Dremel 3D20 0.4 nozzle" - ] -} diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json new file mode 100644 index 0000000000..2dbcc6184e --- /dev/null +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D20 all.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Generic PLA @Dremel 3D20 all", + "inherits": "fdm_filament_pla", + "renamed_from": "Dremel Generic PLA @3D20 all;Dremel Generic PLA 3D20 all", + "from": "system", + "setting_id": "UggXEvCig0b6S8Vx", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "compatible_printers": [ + "Dremel 3D20 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json new file mode 100644 index 0000000000..03704ce5e9 --- /dev/null +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D40 all.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic PLA @Dremel 3D40 all", + "inherits": "fdm_filament_pla", + "renamed_from": "Dremel Generic PLA @3D40 all;Dremel Generic PLA 3D40 all", + "from": "system", + "setting_id": "VUOtsWfy46cvAyBT", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "compatible_printers": [ + "Dremel 3D40 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json new file mode 100644 index 0000000000..78f747e0f9 --- /dev/null +++ b/resources/profiles/Dremel/filament/Generic PLA @Dremel 3D45 all.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic PLA @Dremel 3D45 all", + "inherits": "fdm_filament_pla", + "renamed_from": "Dremel Generic PLA @3D45 all;Dremel Generic PLA 3D45 all", + "from": "system", + "setting_id": "qEeBb3Pix2iDT3SD", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": "10", + "close_fan_the_first_x_layers": "3", + "filament_loading_speed_start": "3", + "filament_loading_speed": "28", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "90", + "filament_cooling_moves": "4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_final_speed": "3.4", + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "60" + ], + "nozzle_temperature": [ + "200" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "compatible_printers": [ + "Dremel 3D45 0.4 nozzle" + ] +} diff --git a/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json index ea9490971a..02d513000c 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D20 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_structure": "hbot", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D20 all" + "Generic PLA @Dremel 3D20 all" ], "default_print_profile": ".20mm Standard @Dremel 3D20 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D20.json b/resources/profiles/Dremel/machine/Dremel 3D20.json index ec37c0d8df..8aa43be862 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D20.json +++ b/resources/profiles/Dremel/machine/Dremel 3D20.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D20", - "default_materials": "Dremel Generic PLA @3D20 all" + "default_materials": "Generic PLA @Dremel 3D20 all" } diff --git a/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json index d37a785099..db8a20003a 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D40 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_structure": "hbot", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D40 all" + "Generic PLA @Dremel 3D40 all" ], "default_print_profile": ".20mm Standard @Dremel 3D40 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D40.json b/resources/profiles/Dremel/machine/Dremel 3D40.json index 3e3a003f2a..0223ced4d8 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D40.json +++ b/resources/profiles/Dremel/machine/Dremel 3D40.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D40", - "default_materials": "Dremel Generic PLA @3D40 all" + "default_materials": "Generic PLA @Dremel 3D40 all" } diff --git a/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json index 8d6b26f34b..c8cf0666d0 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json +++ b/resources/profiles/Dremel/machine/Dremel 3D45 0.4 nozzle.json @@ -10,7 +10,7 @@ "printer_settings_id": "Dremel", "gcode_flavor": "marlin", "default_filament_profile": [ - "Dremel Generic PLA @3D45 all" + "Generic PLA @Dremel 3D45 all" ], "default_print_profile": ".20mm Standard @Dremel 3D45 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Dremel/machine/Dremel 3D45.json b/resources/profiles/Dremel/machine/Dremel 3D45.json index d32aac4977..f701b83188 100644 --- a/resources/profiles/Dremel/machine/Dremel 3D45.json +++ b/resources/profiles/Dremel/machine/Dremel 3D45.json @@ -8,5 +8,5 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Dremel_3D45", - "default_materials": "Dremel Generic PLA @3D45 all" + "default_materials": "Generic PLA @Dremel 3D45 all" } diff --git a/resources/profiles/Dremel/machine/fdm_dremel_common.json b/resources/profiles/Dremel/machine/fdm_dremel_common.json index 194559cdcf..d032e63646 100644 --- a/resources/profiles/Dremel/machine/fdm_dremel_common.json +++ b/resources/profiles/Dremel/machine/fdm_dremel_common.json @@ -116,16 +116,12 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", "wipe": [ "1" ], - "default_filament_profile": [ - "Dremel Generic PLA" - ], "bed_exclude_area": [ "0x0" ], diff --git a/resources/profiles/Dremel/machine/fdm_machine_common.json b/resources/profiles/Dremel/machine/fdm_machine_common.json index 1264456731..2654ef5927 100644 --- a/resources/profiles/Dremel/machine/fdm_machine_common.json +++ b/resources/profiles/Dremel/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "support_chamber_temp_control": "0", "support_air_filtration": "0", "machine_max_acceleration_e": [ diff --git a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json index 6b97a85444..377d1a67a7 100644 --- a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json +++ b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D40 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "9KpA5yblUW2rVLZY", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "40", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json index 734b6e5c69..1b4090e8fc 100644 --- a/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json +++ b/resources/profiles/Dremel/process/.05mm Super Detail @Dremel 3D45 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "wSAun08YCT9u9pOY", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "40", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json index 716b2ca2dc..b757aa1bb0 100644 --- a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D20 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "n2k8VXfPE45lzxmq", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "5000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "45", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json index 6089ca8f5b..b2a12da6ab 100644 --- a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D40 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1dgGvgPtncRPdWVX", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json index ad07216741..e48ad6212f 100644 --- a/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json +++ b/resources/profiles/Dremel/process/.10mm Detail @Dremel 3D45 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "DXivoqKpf6E0edQV", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "40", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json index 358fef4448..06ffde36b7 100644 --- a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D20 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1EacU2rT7gdsnkP4", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "0.95", "bridge_speed": "25", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "5000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "15%", "ironing_spacing": "0.1", diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json index 4c083240de..ac92266b97 100644 --- a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D40 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "iraCyWuqWZ9D0Zw1", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json index a974c3097b..7ff03cb876 100644 --- a/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json +++ b/resources/profiles/Dremel/process/.20mm Standard @Dremel 3D45 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "DU8Yd6C1GF2uIuNF", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "50", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json index 5d16155453..601268bac0 100644 --- a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D20 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "iX1Z2gHIGCWuZAJC", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "5000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json index 27175afdf2..19719d7008 100644 --- a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D40 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "N3x1hdUv74ecskhv", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json index ca224bf687..24be67d78e 100644 --- a/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json +++ b/resources/profiles/Dremel/process/.30mm Draft @Dremel 3D45 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "O6ulsZPXdb1dpOTB", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.4", "internal_solid_infill_speed": "50", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json index 8db1965a59..eca0dfe6ff 100644 --- a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json +++ b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D40 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "WMm4Yxia1QjZCK3h", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "60", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json index d7a6db964e..3801591ebc 100644 --- a/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json +++ b/resources/profiles/Dremel/process/.34mm SuperDraft @Dremel 3D45 0.4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "verN5otUrqpeDtY4", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50", "brim_width": "5", @@ -30,7 +29,6 @@ "inner_wall_acceleration": "2000", "internal_solid_infill_line_width": "0.56", "internal_solid_infill_speed": "50", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "2000", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Dremel/process/fdm_process_common.json b/resources/profiles/Dremel/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Dremel/process/fdm_process_common.json +++ b/resources/profiles/Dremel/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Dremel/process/fdm_process_dremel_common.json b/resources/profiles/Dremel/process/fdm_process_dremel_common.json index b68c7230b3..92358dc814 100644 --- a/resources/profiles/Dremel/process/fdm_process_dremel_common.json +++ b/resources/profiles/Dremel/process/fdm_process_dremel_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Elegoo.json b/resources/profiles/Elegoo.json index 077c264b84..b2e2c21f14 100644 --- a/resources/profiles/Elegoo.json +++ b/resources/profiles/Elegoo.json @@ -1,2454 +1,2546 @@ { - "name": "Elegoo", - "version": "02.04.00.06", - "force_update": "0", - "description": "Elegoo configurations", - "machine_model_list": [ - { - "name": "Elegoo Centauri Carbon 2", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2.json" - }, - { - "name": "Elegoo Centauri 2", - "sub_path": "machine/EC2/Elegoo Centauri 2.json" - }, - { - "name": "Elegoo Centauri Carbon", - "sub_path": "machine/ECC/Elegoo Centauri Carbon.json" - }, - { - "name": "Elegoo Centauri", - "sub_path": "machine/EC/Elegoo Centauri.json" - }, - { - "name": "Elegoo OrangeStorm Giga", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga.json" - }, - { - "name": "Elegoo Neptune 4 Max", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max.json" - }, - { - "name": "Elegoo Neptune 4 Plus", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus.json" - }, - { - "name": "Elegoo Neptune 4 Pro", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro.json" - }, - { - "name": "Elegoo Neptune 4", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4.json" - }, - { - "name": "Elegoo Neptune 3 Max", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max.json" - }, - { - "name": "Elegoo Neptune 3 Plus", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus.json" - }, - { - "name": "Elegoo Neptune 3 Pro", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro.json" - }, - { - "name": "Elegoo Neptune 3", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3.json" - }, - { - "name": "Elegoo Neptune X", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X.json" - }, - { - "name": "Elegoo Neptune 2S", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S.json" - }, - { - "name": "Elegoo Neptune 2D", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D.json" - }, - { - "name": "Elegoo Neptune 2", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2.json" - }, - { - "name": "Elegoo Neptune", - "sub_path": "machine/EN2SERIES/Elegoo Neptune.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_elegoo_common", - "sub_path": "process/fdm_process_elegoo_common.json" - }, - { - "name": "fdm_process_elegoo_02010", - "sub_path": "process/fdm_process_elegoo_02010.json" - }, - { - "name": "fdm_process_elegoo_04020", - "sub_path": "process/fdm_process_elegoo_04020.json" - }, - { - "name": "fdm_process_elegoo_06030", - "sub_path": "process/fdm_process_elegoo_06030.json" - }, - { - "name": "fdm_process_elegoo_08040", - "sub_path": "process/fdm_process_elegoo_08040.json" - }, - { - "name": "fdm_process_elegoo_10050", - "sub_path": "process/fdm_process_elegoo_10050.json" - }, - { - "name": "0.20mm Standard @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.20mm Standard @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.10mm Standard @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.30mm Standard @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.40mm Standard @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.48mm Draft @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.42mm Extra Draft @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.36mm Draft @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.32mm Optimal @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.30mm Strength @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.28mm Extra Draft @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.24mm Optimal @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.24mm Fine @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.24mm Draft @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.20mm Strength @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", - "sub_path": "process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo C2 0.6 nozzle", - "sub_path": "process/EC2/0.18mm Fine @Elegoo C2 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.16mm Optimal @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", - "sub_path": "process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo C2 0.8 nozzle", - "sub_path": "process/EC2/0.16mm Extra Fine @Elegoo C2 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.14mm Extra Draft @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", - "sub_path": "process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo C2 0.4 nozzle", - "sub_path": "process/EC2/0.12mm Fine @Elegoo C2 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.12mm Draft @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", - "sub_path": "process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo C2 0.2 nozzle", - "sub_path": "process/EC2/0.08mm Optimal @Elegoo C2 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.20mm Standard @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.10mm Standard @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.30mm Standard @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.40mm Standard @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.48mm Draft @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.42mm Extra Draft @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.36mm Draft @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.32mm Optimal @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.30mm Strength @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.28mm Extra Draft @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.24mm Optimal @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.24mm Fine @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.24mm Draft @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.20mm Strength @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo CC 0.6 nozzle", - "sub_path": "process/ECC/0.18mm Fine @Elegoo CC 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.16mm Optimal @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo CC 0.8 nozzle", - "sub_path": "process/ECC/0.16mm Extra Fine @Elegoo CC 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.14mm Extra Draft @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo CC 0.4 nozzle", - "sub_path": "process/ECC/0.12mm Fine @Elegoo CC 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.12mm Draft @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo CC 0.2 nozzle", - "sub_path": "process/ECC/0.08mm Optimal @Elegoo CC 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.20mm Standard @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.10mm Standard @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.30mm Standard @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.40mm Standard @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.48mm Draft @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.42mm Extra Draft @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.36mm Draft @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.32mm Optimal @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.30mm Strength @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.28mm Extra Draft @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.24mm Optimal @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.24mm Fine @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.24mm Draft @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.20mm Strength @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo C 0.6 nozzle", - "sub_path": "process/EC/0.18mm Fine @Elegoo C 0.6 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.16mm Optimal @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.16mm Extra Fine @Elegoo C 0.8 nozzle", - "sub_path": "process/EC/0.16mm Extra Fine @Elegoo C 0.8 nozzle.json" - }, - { - "name": "0.14mm Extra Draft @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.14mm Extra Draft @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo C 0.4 nozzle", - "sub_path": "process/EC/0.12mm Fine @Elegoo C 0.4 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.12mm Draft @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo C 0.2 nozzle", - "sub_path": "process/EC/0.08mm Optimal @Elegoo C 0.2 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Pro 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Pro 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Pro 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Pro 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Pro 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Pro 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Plus 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Plus 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Plus 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Plus 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Plus 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Plus 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle", - "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N4Max 0.2 nozzle", - "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Max 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle", - "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N4Max 0.8 nozzle", - "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Max 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N4Max 1.0 nozzle", - "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Max 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Pro 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Pro 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Pro 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Pro 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Pro 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Pro 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Plus 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Plus 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Plus 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Plus 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Plus 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Plus 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle", - "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle.json" - }, - { - "name": "0.10mm Standard @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.08mm Optimal @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.12mm Draft @Elegoo N3Max 0.2 nozzle", - "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Max 0.2 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle", - "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo N3Max 0.8 nozzle", - "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Max 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo N3Max 1.0 nozzle", - "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Max 1.0 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.20mm Standard @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.12mm Fine @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.12mm Fine @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.16mm Optimal @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.20mm Strength @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Draft @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle", - "sub_path": "process/EN2SERIES/0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.30mm Standard @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Optimal @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.36mm Draft @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle", - "sub_path": "process/EN2SERIES/0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.40mm Standard @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.24mm Fine @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo Neptune 0.8 nozzle", - "sub_path": "process/EN2SERIES/0.32mm Optimal @Elegoo Neptune 0.8 nozzle.json" - }, - { - "name": "0.20mm Standard @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.20mm Standard @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.40mm Standard @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.40mm Standard @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.50mm Standard @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.50mm Standard @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.20mm Strength @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.20mm Strength @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.16mm Optimal @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.16mm Optimal @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.24mm Draft @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Draft @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.28mm Extra Draft @Elegoo Giga 0.4 nozzle", - "sub_path": "process/EOSGIGA/0.28mm Extra Draft @Elegoo Giga 0.4 nozzle.json" - }, - { - "name": "0.30mm Strength @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Strength @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.18mm Fine @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.18mm Fine @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.24mm Optimal @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Optimal @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.36mm Draft @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.36mm Draft @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.42mm Extra Draft @Elegoo Giga 0.6 nozzle", - "sub_path": "process/EOSGIGA/0.42mm Extra Draft @Elegoo Giga 0.6 nozzle.json" - }, - { - "name": "0.24mm Fine @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.24mm Fine @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.32mm Optimal @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.32mm Optimal @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.48mm Draft @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.48mm Draft @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.56mm Extra Draft @Elegoo Giga 0.8 nozzle", - "sub_path": "process/EOSGIGA/0.56mm Extra Draft @Elegoo Giga 0.8 nozzle.json" - }, - { - "name": "0.60mm Draft @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.60mm Draft @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.40mm Optimal @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.40mm Optimal @Elegoo Giga 1.0 nozzle.json" - }, - { - "name": "0.30mm Fine @Elegoo Giga 1.0 nozzle", - "sub_path": "process/EOSGIGA/0.30mm Fine @Elegoo Giga 1.0 nozzle.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "fdm_filament_hips", - "sub_path": "filament/fdm_filament_hips.json" - }, - { - "name": "fdm_filament_pps", - "sub_path": "filament/fdm_filament_pps.json" - }, - { - "name": "fdm_filament_ppa", - "sub_path": "filament/fdm_filament_ppa.json" - }, - { - "name": "Generic ABS @base", - "sub_path": "filament/BASE/Generic ABS @base.json" - }, - { - "name": "Generic PA @base", - "sub_path": "filament/BASE/Generic PA @base.json" - }, - { - "name": "Generic PETG @base", - "sub_path": "filament/BASE/Generic PETG @base.json" - }, - { - "name": "Generic PET @base", - "sub_path": "filament/BASE/Generic PET @base.json" - }, - { - "name": "Generic PLA @base", - "sub_path": "filament/BASE/Generic PLA @base.json" - }, - { - "name": "Generic PC @base", - "sub_path": "filament/BASE/Generic PC @base.json" - }, - { - "name": "Generic ASA @base", - "sub_path": "filament/BASE/Generic ASA @base.json" - }, - { - "name": "Elegoo TPU @base", - "sub_path": "filament/BASE/Elegoo TPU @base.json" - }, - { - "name": "Elegoo PETG @base", - "sub_path": "filament/BASE/Elegoo PETG @base.json" - }, - { - "name": "Elegoo PLA @base", - "sub_path": "filament/BASE/Elegoo PLA @base.json" - }, - { - "name": "Elegoo ASA @base", - "sub_path": "filament/BASE/Elegoo ASA @base.json" - }, - { - "name": "Elegoo ABS @base", - "sub_path": "filament/BASE/Elegoo ABS @base.json" - }, - { - "name": "Elegoo PAHT @base", - "sub_path": "filament/BASE/Elegoo PAHT @base.json" - }, - { - "name": "Elegoo PC @base", - "sub_path": "filament/BASE/Elegoo PC @base.json" - }, - { - "name": "Elegoo ASA @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ASA @0.2 nozzle.json" - }, - { - "name": "Elegoo PETG @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG @0.2 nozzle.json" - }, - { - "name": "Elegoo PETG PRO @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA Matte @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA PRO @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA Silk @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA+ @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json" - }, - { - "name": "Elegoo Rapid PLA+ @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json" - }, - { - "name": "Elegoo Rapid PETG @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json" - }, - { - "name": "Elegoo ABS @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ABS @0.2 nozzle.json" - }, - { - "name": "Elegoo PC @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC @0.2 nozzle.json" - }, - { - "name": "Elegoo PC-FR @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA Basic @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json" - }, - { - "name": "Elegoo PETG Translucent @0.2 nozzle", - "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json" - }, - { - "name": "Elegoo PLA @ECC", - "sub_path": "filament/ECC/Elegoo PLA @ECC.json" - }, - { - "name": "Elegoo PLA PRO @ECC", - "sub_path": "filament/ECC/Elegoo PLA PRO @ECC.json" - }, - { - "name": "Elegoo PLA+ @ECC", - "sub_path": "filament/ECC/Elegoo PLA+ @ECC.json" - }, - { - "name": "Elegoo Rapid PLA+ @ECC", - "sub_path": "filament/ECC/Elegoo Rapid PLA+ @ECC.json" - }, - { - "name": "Elegoo PLA Silk @ECC", - "sub_path": "filament/ECC/Elegoo PLA Silk @ECC.json" - }, - { - "name": "Elegoo PLA Matte @ECC", - "sub_path": "filament/ECC/Elegoo PLA Matte @ECC.json" - }, - { - "name": "Elegoo PLA-CF @ECC", - "sub_path": "filament/ECC/Elegoo PLA-CF @ECC.json" - }, - { - "name": "Elegoo PETG @ECC", - "sub_path": "filament/ECC/Elegoo PETG @ECC.json" - }, - { - "name": "Elegoo PETG PRO @ECC", - "sub_path": "filament/ECC/Elegoo PETG PRO @ECC.json" - }, - { - "name": "Elegoo Rapid PETG @ECC", - "sub_path": "filament/ECC/Elegoo Rapid PETG @ECC.json" - }, - { - "name": "Elegoo TPU 95A @ECC", - "sub_path": "filament/ECC/Elegoo TPU 95A @ECC.json" - }, - { - "name": "Elegoo ASA @ECC", - "sub_path": "filament/ECC/Elegoo ASA @ECC.json" - }, - { - "name": "Elegoo ABS @ECC", - "sub_path": "filament/ECC/Elegoo ABS @ECC.json" - }, - { - "name": "Elegoo PLA Galaxy @ECC", - "sub_path": "filament/ECC/Elegoo PLA Galaxy @ECC.json" - }, - { - "name": "Elegoo PLA Basic @ECC", - "sub_path": "filament/ECC/Elegoo PLA Basic @ECC.json" - }, - { - "name": "Elegoo PLA Marble @ECC", - "sub_path": "filament/ECC/Elegoo PLA Marble @ECC.json" - }, - { - "name": "Elegoo PLA Sparkle @ECC", - "sub_path": "filament/ECC/Elegoo PLA Sparkle @ECC.json" - }, - { - "name": "Elegoo PLA Wood @ECC", - "sub_path": "filament/ECC/Elegoo PLA Wood @ECC.json" - }, - { - "name": "Elegoo PAHT-CF @ECC", - "sub_path": "filament/ECC/Elegoo PAHT-CF @ECC.json" - }, - { - "name": "Elegoo PC @ECC", - "sub_path": "filament/ECC/Elegoo PC @ECC.json" - }, - { - "name": "Elegoo PC-FR @ECC", - "sub_path": "filament/ECC/Elegoo PC-FR @ECC.json" - }, - { - "name": "Elegoo PETG-CF @ECC", - "sub_path": "filament/ECC/Elegoo PETG-CF @ECC.json" - }, - { - "name": "Elegoo PETG-GF @ECC", - "sub_path": "filament/ECC/Elegoo PETG-GF @ECC.json" - }, - { - "name": "Elegoo PETG Translucent @ECC", - "sub_path": "filament/ECC/Elegoo PETG Translucent @ECC.json" - }, - { - "name": "Elegoo Rapid TPU 95A @ECC", - "sub_path": "filament/ECC/Elegoo Rapid TPU 95A @ECC.json" - }, - { - "name": "Elegoo PLA @EC", - "sub_path": "filament/EC/Elegoo PLA @EC.json" - }, - { - "name": "Elegoo PLA PRO @EC", - "sub_path": "filament/EC/Elegoo PLA PRO @EC.json" - }, - { - "name": "Elegoo PLA+ @EC", - "sub_path": "filament/EC/Elegoo PLA+ @EC.json" - }, - { - "name": "Elegoo Rapid PLA+ @EC", - "sub_path": "filament/EC/Elegoo Rapid PLA+ @EC.json" - }, - { - "name": "Elegoo PLA Silk @EC", - "sub_path": "filament/EC/Elegoo PLA Silk @EC.json" - }, - { - "name": "Elegoo PLA Matte @EC", - "sub_path": "filament/EC/Elegoo PLA Matte @EC.json" - }, - { - "name": "Elegoo PETG @EC", - "sub_path": "filament/EC/Elegoo PETG @EC.json" - }, - { - "name": "Elegoo PETG PRO @EC", - "sub_path": "filament/EC/Elegoo PETG PRO @EC.json" - }, - { - "name": "Elegoo Rapid PETG @EC", - "sub_path": "filament/EC/Elegoo Rapid PETG @EC.json" - }, - { - "name": "Elegoo TPU 95A @EC", - "sub_path": "filament/EC/Elegoo TPU 95A @EC.json" - }, - { - "name": "Elegoo ASA @EC", - "sub_path": "filament/EC/Elegoo ASA @EC.json" - }, - { - "name": "Elegoo ABS @EC", - "sub_path": "filament/EC/Elegoo ABS @EC.json" - }, - { - "name": "Elegoo PLA Galaxy @EC", - "sub_path": "filament/EC/Elegoo PLA Galaxy @EC.json" - }, - { - "name": "Elegoo PLA Basic @EC", - "sub_path": "filament/EC/Elegoo PLA Basic @EC.json" - }, - { - "name": "Elegoo PLA Marble @EC", - "sub_path": "filament/EC/Elegoo PLA Marble @EC.json" - }, - { - "name": "Elegoo PLA Sparkle @EC", - "sub_path": "filament/EC/Elegoo PLA Sparkle @EC.json" - }, - { - "name": "Elegoo PLA Wood @EC", - "sub_path": "filament/EC/Elegoo PLA Wood @EC.json" - }, - { - "name": "Elegoo PAHT-CF @EC", - "sub_path": "filament/EC/Elegoo PAHT-CF @EC.json" - }, - { - "name": "Elegoo PC @EC", - "sub_path": "filament/EC/Elegoo PC @EC.json" - }, - { - "name": "Elegoo PC-FR @EC", - "sub_path": "filament/EC/Elegoo PC-FR @EC.json" - }, - { - "name": "Elegoo PETG-CF @EC", - "sub_path": "filament/EC/Elegoo PETG-CF @EC.json" - }, - { - "name": "Elegoo PETG-GF @EC", - "sub_path": "filament/EC/Elegoo PETG-GF @EC.json" - }, - { - "name": "Elegoo PETG Translucent @EC", - "sub_path": "filament/EC/Elegoo PETG Translucent @EC.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EC", - "sub_path": "filament/EC/Elegoo Rapid TPU 95A @EC.json" - }, - { - "name": "Elegoo PLA @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA @ECC2.json" - }, - { - "name": "Elegoo PLA @EC2", - "sub_path": "filament/EC2/Elegoo PLA @EC2.json" - }, - { - "name": "Elegoo PLA PRO @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA PRO @ECC2.json" - }, - { - "name": "Elegoo PLA PRO @EC2", - "sub_path": "filament/EC2/Elegoo PLA PRO @EC2.json" - }, - { - "name": "Elegoo PLA+ @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA+ @ECC2.json" - }, - { - "name": "Elegoo PLA+ @EC2", - "sub_path": "filament/EC2/Elegoo PLA+ @EC2.json" - }, - { - "name": "Elegoo Rapid PLA+ @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid PLA+ @ECC2.json" - }, - { - "name": "Elegoo Rapid PLA+ @EC2", - "sub_path": "filament/EC2/Elegoo Rapid PLA+ @EC2.json" - }, - { - "name": "Elegoo PLA Silk @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Silk @ECC2.json" - }, - { - "name": "Elegoo PLA Silk @EC2", - "sub_path": "filament/EC2/Elegoo PLA Silk @EC2.json" - }, - { - "name": "Elegoo PLA Matte @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Matte @ECC2.json" - }, - { - "name": "Elegoo PLA Matte @EC2", - "sub_path": "filament/EC2/Elegoo PLA Matte @EC2.json" - }, - { - "name": "Elegoo PLA-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA-CF @ECC2.json" - }, - { - "name": "Elegoo PLA-CF @EC2", - "sub_path": "filament/EC2/Elegoo PLA-CF @EC2.json" - }, - { - "name": "Elegoo PETG @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG @ECC2.json" - }, - { - "name": "Elegoo PETG @EC2", - "sub_path": "filament/EC2/Elegoo PETG @EC2.json" - }, - { - "name": "Elegoo PETG PRO @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG PRO @ECC2.json" - }, - { - "name": "Elegoo PETG PRO @EC2", - "sub_path": "filament/EC2/Elegoo PETG PRO @EC2.json" - }, - { - "name": "Elegoo Rapid PETG @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid PETG @ECC2.json" - }, - { - "name": "Elegoo Rapid PETG @EC2", - "sub_path": "filament/EC2/Elegoo Rapid PETG @EC2.json" - }, - { - "name": "Elegoo TPU 95A @ECC2", - "sub_path": "filament/ECC2/Elegoo TPU 95A @ECC2.json" - }, - { - "name": "Elegoo TPU 95A @EC2", - "sub_path": "filament/EC2/Elegoo TPU 95A @EC2.json" - }, - { - "name": "Elegoo ASA @ECC2", - "sub_path": "filament/ECC2/Elegoo ASA @ECC2.json" - }, - { - "name": "Elegoo ASA @EC2", - "sub_path": "filament/EC2/Elegoo ASA @EC2.json" - }, - { - "name": "Elegoo ABS @ECC2", - "sub_path": "filament/ECC2/Elegoo ABS @ECC2.json" - }, - { - "name": "Elegoo ABS @EC2", - "sub_path": "filament/EC2/Elegoo ABS @EC2.json" - }, - { - "name": "Elegoo PLA Galaxy @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Galaxy @ECC2.json" - }, - { - "name": "Elegoo PLA Galaxy @EC2", - "sub_path": "filament/EC2/Elegoo PLA Galaxy @EC2.json" - }, - { - "name": "Elegoo PLA Basic @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Basic @ECC2.json" - }, - { - "name": "Elegoo PLA Basic @EC2", - "sub_path": "filament/EC2/Elegoo PLA Basic @EC2.json" - }, - { - "name": "Elegoo PLA Marble @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Marble @ECC2.json" - }, - { - "name": "Elegoo PLA Marble @EC2", - "sub_path": "filament/EC2/Elegoo PLA Marble @EC2.json" - }, - { - "name": "Elegoo PLA Sparkle @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Sparkle @ECC2.json" - }, - { - "name": "Elegoo PLA Sparkle @EC2", - "sub_path": "filament/EC2/Elegoo PLA Sparkle @EC2.json" - }, - { - "name": "Elegoo PLA Wood @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Wood @ECC2.json" - }, - { - "name": "Elegoo PLA Wood @EC2", - "sub_path": "filament/EC2/Elegoo PLA Wood @EC2.json" - }, - { - "name": "Elegoo PAHT-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PAHT-CF @ECC2.json" - }, - { - "name": "Elegoo PAHT-CF @EC2", - "sub_path": "filament/EC2/Elegoo PAHT-CF @EC2.json" - }, - { - "name": "Elegoo PC @ECC2", - "sub_path": "filament/ECC2/Elegoo PC @ECC2.json" - }, - { - "name": "Elegoo PC @EC2", - "sub_path": "filament/EC2/Elegoo PC @EC2.json" - }, - { - "name": "Elegoo PC-FR @ECC2", - "sub_path": "filament/ECC2/Elegoo PC-FR @ECC2.json" - }, - { - "name": "Elegoo PC-FR @EC2", - "sub_path": "filament/EC2/Elegoo PC-FR @EC2.json" - }, - { - "name": "Elegoo PETG-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG-CF @ECC2.json" - }, - { - "name": "Elegoo PETG-CF @EC2", - "sub_path": "filament/EC2/Elegoo PETG-CF @EC2.json" - }, - { - "name": "Elegoo PETG-GF @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG-GF @ECC2.json" - }, - { - "name": "Elegoo PETG-GF @EC2", - "sub_path": "filament/EC2/Elegoo PETG-GF @EC2.json" - }, - { - "name": "Elegoo PETG Translucent @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG Translucent @ECC2.json" - }, - { - "name": "Elegoo PETG Translucent @EC2", - "sub_path": "filament/EC2/Elegoo PETG Translucent @EC2.json" - }, - { - "name": "Elegoo ASA-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo ASA-CF @ECC2.json" - }, - { - "name": "Elegoo ASA-CF @EC2", - "sub_path": "filament/EC2/Elegoo ASA-CF @EC2.json" - }, - { - "name": "Elegoo PET-CF @ECC2", - "sub_path": "filament/ECC2/Elegoo PET-CF @ECC2.json" - }, - { - "name": "Elegoo PET-CF @EC2", - "sub_path": "filament/EC2/Elegoo PET-CF @EC2.json" - }, - { - "name": "Elegoo PETG HF @ECC2", - "sub_path": "filament/ECC2/Elegoo PETG HF @ECC2.json" - }, - { - "name": "Elegoo PETG HF @EC2", - "sub_path": "filament/EC2/Elegoo PETG HF @EC2.json" - }, - { - "name": "Elegoo PLA Glow @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Glow @ECC2.json" - }, - { - "name": "Elegoo PLA Glow @EC2", - "sub_path": "filament/EC2/Elegoo PLA Glow @EC2.json" - }, - { - "name": "Elegoo PLA Translucent2 @ECC2", - "sub_path": "filament/ECC2/Elegoo PLA Translucent2 @ECC2.json" - }, - { - "name": "Elegoo PLA Translucent2 @EC2", - "sub_path": "filament/EC2/Elegoo PLA Translucent2 @EC2.json" - }, - { - "name": "Elegoo Rapid TPU 95A @ECC2", - "sub_path": "filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EC2", - "sub_path": "filament/EC2/Elegoo Rapid TPU 95A @EC2.json" - }, - { - "name": "Elegoo PLA @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA @EN4 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json" - }, - { - "name": "Elegoo PLA+ @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json" - }, - { - "name": "Elegoo PETG @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG @EN4 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json" - }, - { - "name": "Elegoo TPU 95A @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json" - }, - { - "name": "Elegoo ASA @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo ASA @EN4 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN4 Series", - "sub_path": "filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json" - }, - { - "name": "Elegoo PLA @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA @EN3 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json" - }, - { - "name": "Elegoo PLA+ @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json" - }, - { - "name": "Elegoo PETG @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG @EN3 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json" - }, - { - "name": "Elegoo TPU 95A @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json" - }, - { - "name": "Elegoo ASA @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo ASA @EN3 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN3 Series", - "sub_path": "filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json" - }, - { - "name": "Elegoo PLA @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA @EN2 Series.json" - }, - { - "name": "Elegoo PLA PRO @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json" - }, - { - "name": "Elegoo PLA+ @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json" - }, - { - "name": "Elegoo Rapid PLA+ @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json" - }, - { - "name": "Elegoo PLA Silk @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json" - }, - { - "name": "Elegoo PLA Matte @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json" - }, - { - "name": "Elegoo PLA-CF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json" - }, - { - "name": "Elegoo PETG @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG @EN2 Series.json" - }, - { - "name": "Elegoo PETG PRO @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json" - }, - { - "name": "Elegoo Rapid PETG @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json" - }, - { - "name": "Elegoo ASA @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo ASA @EN2 Series.json" - }, - { - "name": "Elegoo PLA Galaxy @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json" - }, - { - "name": "Elegoo PLA Basic @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json" - }, - { - "name": "Elegoo PLA Marble @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json" - }, - { - "name": "Elegoo PLA Sparkle @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json" - }, - { - "name": "Elegoo PLA Wood @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json" - }, - { - "name": "Elegoo PETG-CF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json" - }, - { - "name": "Elegoo PETG-GF @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json" - }, - { - "name": "Elegoo PETG Translucent @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json" - }, - { - "name": "Elegoo Rapid TPU 95A @EN2 Series", - "sub_path": "filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json" - }, - { - "name": "Elegoo ASA @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo ASA @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG PRO @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Matte @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid PETG @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid PLA+ @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Galaxy @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Basic @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Marble @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Sparkle @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json" - }, - { - "name": "Elegoo PLA Wood @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG-CF @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG-GF @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json" - }, - { - "name": "Elegoo PETG Translucent @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json" - }, - { - "name": "Elegoo Rapid TPU 95A @Elegoo Giga", - "sub_path": "filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json" - }, - { - "name": "Generic ABS @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ABS @Elegoo Centauri.json" - }, - { - "name": "Generic ABS @Elegoo", - "sub_path": "filament/Generic/Generic ABS @Elegoo.json" - }, - { - "name": "Generic ABS-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ABS-CF @Elegoo Centauri.json" - }, - { - "name": "Generic ASA @Elegoo", - "sub_path": "filament/Generic/Generic ASA @Elegoo.json" - }, - { - "name": "Generic ASA-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic ASA-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PA @Elegoo", - "sub_path": "filament/Generic/Generic PA @Elegoo.json" - }, - { - "name": "Generic PA6-CF @Elegoo", - "sub_path": "filament/Generic/Generic PA6-CF @Elegoo.json" - }, - { - "name": "Generic PC @Elegoo", - "sub_path": "filament/Generic/Generic PC @Elegoo.json" - }, - { - "name": "Generic PC-CF @Elegoo", - "sub_path": "filament/Generic/Generic PC-CF @Elegoo.json" - }, - { - "name": "Generic PET @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PET @Elegoo Centauri.json" - }, - { - "name": "Generic PET-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PET-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PETG @Elegoo", - "sub_path": "filament/Generic/Generic PETG @Elegoo.json" - }, - { - "name": "Generic PETG PRO @Elegoo", - "sub_path": "filament/Generic/Generic PETG PRO @Elegoo.json" - }, - { - "name": "Generic PETG-CF @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PETG-CF @Elegoo Centauri.json" - }, - { - "name": "Generic PLA @Elegoo Centauri", - "sub_path": "filament/Generic/Generic PLA @Elegoo Centauri.json" - }, - { - "name": "Generic PLA @Elegoo", - "sub_path": "filament/Generic/Generic PLA @Elegoo.json" - }, - { - "name": "Generic PLA Matte @Elegoo", - "sub_path": "filament/Generic/Generic PLA Matte @Elegoo.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_elegoo_common", - "sub_path": "machine/fdm_elegoo_common.json" - }, - { - "name": "fdm_elegoo_3dp_001_common", - "sub_path": "machine/fdm_elegoo_3dp_001_common.json" - }, - { - "name": "Elegoo Centauri Carbon 0.4 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.2 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.6 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 0.8 nozzle", - "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.4 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.2 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.6 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri 0.8 nozzle", - "sub_path": "machine/EC/Elegoo Centauri 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.4 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.4 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.2 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.2 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.2 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.6 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.6 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Centauri Carbon 2 0.8 nozzle", - "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Centauri 2 0.8 nozzle", - "sub_path": "machine/EC2/Elegoo Centauri 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Pro 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Plus 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.4 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.2 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.6 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 0.8 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 4 Max 1.0 nozzle", - "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 1.0 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.4 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.4 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.6 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.6 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 0.8 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.8 nozzle.json" - }, - { - "name": "Elegoo OrangeStorm Giga 1.0 nozzle", - "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Pro 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Plus 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.4 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.2 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.2 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.6 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 0.8 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 Max 1.0 nozzle", - "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 1.0 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 3 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune X 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2S 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 2D 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.8 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.4 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.4 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.6 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.6 nozzle.json" - }, - { - "name": "Elegoo Neptune 0.8 nozzle", - "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.8 nozzle.json" - } - ] -} \ No newline at end of file + "name": "Elegoo", + "version": "02.04.00.09", + "force_update": "0", + "description": "Elegoo configurations", + "machine_model_list": [ + { + "name": "Elegoo Centauri", + "sub_path": "machine/EC/Elegoo Centauri.json" + }, + { + "name": "Elegoo Centauri 2", + "sub_path": "machine/EC2/Elegoo Centauri 2.json" + }, + { + "name": "Elegoo Centauri Carbon", + "sub_path": "machine/ECC/Elegoo Centauri Carbon.json" + }, + { + "name": "Elegoo Centauri Carbon 2", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2.json" + }, + { + "name": "Elegoo Neptune", + "sub_path": "machine/EN2SERIES/Elegoo Neptune.json" + }, + { + "name": "Elegoo Neptune 2", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2.json" + }, + { + "name": "Elegoo Neptune 2D", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D.json" + }, + { + "name": "Elegoo Neptune 2S", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S.json" + }, + { + "name": "Elegoo Neptune 3", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3.json" + }, + { + "name": "Elegoo Neptune 3 Max", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max.json" + }, + { + "name": "Elegoo Neptune 3 Plus", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus.json" + }, + { + "name": "Elegoo Neptune 3 Pro", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro.json" + }, + { + "name": "Elegoo Neptune 4", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4.json" + }, + { + "name": "Elegoo Neptune 4 Max", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max.json" + }, + { + "name": "Elegoo Neptune 4 Plus", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus.json" + }, + { + "name": "Elegoo Neptune 4 Pro", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro.json" + }, + { + "name": "Elegoo Neptune X", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X.json" + }, + { + "name": "Elegoo OrangeStorm Giga", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_elegoo_common", + "sub_path": "process/fdm_process_elegoo_common.json" + }, + { + "name": "fdm_process_elegoo_02010", + "sub_path": "process/fdm_process_elegoo_02010.json" + }, + { + "name": "fdm_process_elegoo_04020", + "sub_path": "process/fdm_process_elegoo_04020.json" + }, + { + "name": "fdm_process_elegoo_06030", + "sub_path": "process/fdm_process_elegoo_06030.json" + }, + { + "name": "fdm_process_elegoo_08040", + "sub_path": "process/fdm_process_elegoo_08040.json" + }, + { + "name": "fdm_process_elegoo_10050", + "sub_path": "process/fdm_process_elegoo_10050.json" + }, + { + "name": "0.10mm Standard @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.10mm Standard @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.10mm Standard @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.10mm Standard @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.10mm Standard @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.10mm Standard @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.10mm Standard @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.10mm Standard @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.20mm Standard @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.20mm Standard @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.20mm Standard @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.20mm Standard @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.20mm Standard @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Standard @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Standard @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Standard @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.20mm Standard @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.30mm Standard @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.30mm Standard @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.30mm Standard @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.30mm Standard @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Standard @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Standard @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.30mm Standard @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.30mm Standard @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.40mm Standard @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.40mm Standard @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.40mm Standard @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.40mm Standard @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.40mm Standard @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Standard @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Standard @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.40mm Standard @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.40mm Standard @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.50mm Standard @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.50mm Standard @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.50mm Standard @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.50mm Standard @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.08mm Optimal @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.12mm Draft @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo C 0.2 nozzle", + "sub_path": "process/EC/0.14mm Extra Draft @Elegoo C 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.08mm Optimal @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.12mm Draft @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo C2 0.2 nozzle", + "sub_path": "process/EC2/0.14mm Extra Draft @Elegoo C2 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.08mm Optimal @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.12mm Draft @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo CC 0.2 nozzle", + "sub_path": "process/ECC/0.14mm Extra Draft @Elegoo CC 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.08mm Optimal @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.12mm Draft @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.14mm Extra Draft @Elegoo CC2 0.2 nozzle", + "sub_path": "process/ECC2/0.14mm Extra Draft @Elegoo CC2 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Max 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Max 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Plus 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.08mm Optimal @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N3Pro 0.2 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Draft @Elegoo N3Pro 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Max 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Max 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Plus 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Plus 0.2 nozzle.json" + }, + { + "name": "0.08mm Optimal @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.08mm Optimal @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Draft @Elegoo N4Pro 0.2 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Draft @Elegoo N4Pro 0.2 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.12mm Fine @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.16mm Optimal @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.20mm Strength @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.24mm Draft @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo C 0.4 nozzle", + "sub_path": "process/EC/0.28mm Extra Draft @Elegoo C 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.12mm Fine @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.16mm Optimal @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.20mm Strength @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.24mm Draft @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo C2 0.4 nozzle", + "sub_path": "process/EC2/0.28mm Extra Draft @Elegoo C2 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.12mm Fine @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.16mm Optimal @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.20mm Strength @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.24mm Draft @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo CC 0.4 nozzle", + "sub_path": "process/ECC/0.28mm Extra Draft @Elegoo CC 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.12mm Fine @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.16mm Optimal @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.20mm Strength @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.24mm Draft @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo CC2 0.4 nozzle", + "sub_path": "process/ECC2/0.28mm Extra Draft @Elegoo CC2 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.16mm Optimal @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.20mm Strength @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Draft @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo Giga 0.4 nozzle", + "sub_path": "process/EOSGIGA/0.28mm Extra Draft @Elegoo Giga 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.12mm Fine @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.16mm Optimal @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.20mm Strength @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Draft @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle", + "sub_path": "process/EN3SERIES/0.28mm Extra Draft @Elegoo N3Pro 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Max 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Plus 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.12mm Fine @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.16mm Optimal @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.20mm Strength @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Draft @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle", + "sub_path": "process/EN4SERIES/0.28mm Extra Draft @Elegoo N4Pro 0.4 nozzle.json" + }, + { + "name": "0.12mm Fine @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.12mm Fine @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.16mm Optimal @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.16mm Optimal @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.20mm Strength @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.20mm Strength @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.24mm Draft @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Draft @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle", + "sub_path": "process/EN2SERIES/0.28mm Extra Draft @Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.18mm Fine @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.24mm Optimal @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.30mm Strength @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.36mm Draft @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo C 0.6 nozzle", + "sub_path": "process/EC/0.42mm Extra Draft @Elegoo C 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.18mm Fine @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.24mm Optimal @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.30mm Strength @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.36mm Draft @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo C2 0.6 nozzle", + "sub_path": "process/EC2/0.42mm Extra Draft @Elegoo C2 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.18mm Fine @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.24mm Optimal @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.30mm Strength @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.36mm Draft @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo CC 0.6 nozzle", + "sub_path": "process/ECC/0.42mm Extra Draft @Elegoo CC 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.18mm Fine @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.24mm Optimal @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.30mm Strength @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.36mm Draft @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo CC2 0.6 nozzle", + "sub_path": "process/ECC2/0.42mm Extra Draft @Elegoo CC2 0.6 nozzle.json" + }, + { + "name": "0.18mm Fine @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.18mm Fine @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Optimal @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.30mm Strength @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Strength @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.36mm Draft @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo Giga 0.6 nozzle", + "sub_path": "process/EOSGIGA/0.42mm Extra Draft @Elegoo Giga 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Optimal @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.36mm Draft @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle", + "sub_path": "process/EN3SERIES/0.42mm Extra Draft @Elegoo N3Pro 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Max 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Plus 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Optimal @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.36mm Draft @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle", + "sub_path": "process/EN4SERIES/0.42mm Extra Draft @Elegoo N4Pro 0.6 nozzle.json" + }, + { + "name": "0.24mm Optimal @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Optimal @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.36mm Draft @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.36mm Draft @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle", + "sub_path": "process/EN2SERIES/0.42mm Extra Draft @Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.16mm Extra Fine @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.24mm Fine @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.32mm Optimal @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo C 0.8 nozzle", + "sub_path": "process/EC/0.48mm Draft @Elegoo C 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.16mm Extra Fine @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.24mm Fine @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.32mm Optimal @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo C2 0.8 nozzle", + "sub_path": "process/EC2/0.48mm Draft @Elegoo C2 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.16mm Extra Fine @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.24mm Fine @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.32mm Optimal @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo CC 0.8 nozzle", + "sub_path": "process/ECC/0.48mm Draft @Elegoo CC 0.8 nozzle.json" + }, + { + "name": "0.16mm Extra Fine @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.16mm Extra Fine @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.24mm Fine @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.32mm Optimal @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo CC2 0.8 nozzle", + "sub_path": "process/ECC2/0.48mm Draft @Elegoo CC2 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.24mm Fine @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.32mm Optimal @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.48mm Draft @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.56mm Extra Draft @Elegoo Giga 0.8 nozzle", + "sub_path": "process/EOSGIGA/0.56mm Extra Draft @Elegoo Giga 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Max 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Plus 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Plus 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.24mm Fine @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.32mm Optimal @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N3Pro 0.8 nozzle", + "sub_path": "process/EN3SERIES/0.48mm Draft @Elegoo N3Pro 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Max 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Max 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Plus 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Plus 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.24mm Fine @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.32mm Optimal @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.48mm Draft @Elegoo N4Pro 0.8 nozzle", + "sub_path": "process/EN4SERIES/0.48mm Draft @Elegoo N4Pro 0.8 nozzle.json" + }, + { + "name": "0.24mm Fine @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.24mm Fine @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.32mm Optimal @Elegoo Neptune 0.8 nozzle", + "sub_path": "process/EN2SERIES/0.32mm Optimal @Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.30mm Fine @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.40mm Optimal @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo Giga 1.0 nozzle", + "sub_path": "process/EOSGIGA/0.60mm Draft @Elegoo Giga 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Max 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Max 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Plus 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Plus 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.30mm Fine @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.40mm Optimal @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N3Pro 1.0 nozzle", + "sub_path": "process/EN3SERIES/0.60mm Draft @Elegoo N3Pro 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Max 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Max 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Plus 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Plus 1.0 nozzle.json" + }, + { + "name": "0.30mm Fine @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.30mm Fine @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.40mm Optimal @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.40mm Optimal @Elegoo N4Pro 1.0 nozzle.json" + }, + { + "name": "0.60mm Draft @Elegoo N4Pro 1.0 nozzle", + "sub_path": "process/EN4SERIES/0.60mm Draft @Elegoo N4Pro 1.0 nozzle.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_hips", + "sub_path": "filament/fdm_filament_hips.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_ppa", + "sub_path": "filament/fdm_filament_ppa.json" + }, + { + "name": "fdm_filament_pps", + "sub_path": "filament/fdm_filament_pps.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "Elegoo ABS @base", + "sub_path": "filament/BASE/Elegoo ABS @base.json" + }, + { + "name": "Generic ABS @base", + "sub_path": "filament/BASE/Generic ABS @base.json" + }, + { + "name": "Elegoo ASA @base", + "sub_path": "filament/BASE/Elegoo ASA @base.json" + }, + { + "name": "Generic ASA @base", + "sub_path": "filament/BASE/Generic ASA @base.json" + }, + { + "name": "Elegoo PAHT-CF @base", + "sub_path": "filament/BASE/Elegoo PAHT-CF @base.json" + }, + { + "name": "Generic PA @base", + "sub_path": "filament/BASE/Generic PA @base.json" + }, + { + "name": "Elegoo PC @base", + "sub_path": "filament/BASE/Elegoo PC @base.json" + }, + { + "name": "Generic PC @base", + "sub_path": "filament/BASE/Generic PC @base.json" + }, + { + "name": "Elegoo PETG @base", + "sub_path": "filament/BASE/Elegoo PETG @base.json" + }, + { + "name": "Generic PET @base", + "sub_path": "filament/BASE/Generic PET @base.json" + }, + { + "name": "Generic PETG @base", + "sub_path": "filament/BASE/Generic PETG @base.json" + }, + { + "name": "Elegoo PLA @base", + "sub_path": "filament/BASE/Elegoo PLA @base.json" + }, + { + "name": "Generic PLA @base", + "sub_path": "filament/BASE/Generic PLA @base.json" + }, + { + "name": "Elegoo TPU 95A @base", + "sub_path": "filament/BASE/Elegoo TPU 95A @base.json" + }, + { + "name": "Elegoo ABS @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ABS @0.2 nozzle.json" + }, + { + "name": "Elegoo ABS @EC", + "sub_path": "filament/EC/Elegoo ABS @EC.json" + }, + { + "name": "Elegoo ABS @EC2", + "sub_path": "filament/EC2/Elegoo ABS @EC2.json" + }, + { + "name": "Elegoo ABS @ECC", + "sub_path": "filament/ECC/Elegoo ABS @ECC.json" + }, + { + "name": "Elegoo ABS @ECC2", + "sub_path": "filament/ECC2/Elegoo ABS @ECC2.json" + }, + { + "name": "Generic ABS @Elegoo", + "sub_path": "filament/Generic/Generic ABS @Elegoo.json" + }, + { + "name": "Generic ABS @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ABS @Elegoo Centauri.json" + }, + { + "name": "Generic ABS-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ABS-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo ASA @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo ASA @0.2 nozzle.json" + }, + { + "name": "Elegoo ASA @EC", + "sub_path": "filament/EC/Elegoo ASA @EC.json" + }, + { + "name": "Elegoo ASA @EC2", + "sub_path": "filament/EC2/Elegoo ASA @EC2.json" + }, + { + "name": "Elegoo ASA @ECC", + "sub_path": "filament/ECC/Elegoo ASA @ECC.json" + }, + { + "name": "Elegoo ASA @ECC2", + "sub_path": "filament/ECC2/Elegoo ASA @ECC2.json" + }, + { + "name": "Elegoo ASA @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo ASA @EN2 Series.json" + }, + { + "name": "Elegoo ASA @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo ASA @EN3 Series.json" + }, + { + "name": "Elegoo ASA @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo ASA @EN4 Series.json" + }, + { + "name": "Elegoo ASA @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo ASA @Elegoo Giga.json" + }, + { + "name": "Elegoo ASA-CF @base", + "sub_path": "filament/BASE/Elegoo ASA-CF @base.json" + }, + { + "name": "Generic ASA @Elegoo", + "sub_path": "filament/Generic/Generic ASA @Elegoo.json" + }, + { + "name": "Generic ASA-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic ASA-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo PAHT-CF @EC", + "sub_path": "filament/EC/Elegoo PAHT-CF @EC.json" + }, + { + "name": "Elegoo PAHT-CF @EC2", + "sub_path": "filament/EC2/Elegoo PAHT-CF @EC2.json" + }, + { + "name": "Elegoo PAHT-CF @ECC", + "sub_path": "filament/ECC/Elegoo PAHT-CF @ECC.json" + }, + { + "name": "Elegoo PAHT-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PAHT-CF @ECC2.json" + }, + { + "name": "Generic PA @Elegoo", + "sub_path": "filament/Generic/Generic PA @Elegoo.json" + }, + { + "name": "Generic PA6-CF @Elegoo", + "sub_path": "filament/Generic/Generic PA6-CF @Elegoo.json" + }, + { + "name": "Elegoo PC @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC @0.2 nozzle.json" + }, + { + "name": "Elegoo PC @EC", + "sub_path": "filament/EC/Elegoo PC @EC.json" + }, + { + "name": "Elegoo PC @EC2", + "sub_path": "filament/EC2/Elegoo PC @EC2.json" + }, + { + "name": "Elegoo PC @ECC", + "sub_path": "filament/ECC/Elegoo PC @ECC.json" + }, + { + "name": "Elegoo PC @ECC2", + "sub_path": "filament/ECC2/Elegoo PC @ECC2.json" + }, + { + "name": "Elegoo PC-FR @base", + "sub_path": "filament/BASE/Elegoo PC-FR @base.json" + }, + { + "name": "Generic PC @Elegoo", + "sub_path": "filament/Generic/Generic PC @Elegoo.json" + }, + { + "name": "Generic PC-CF @Elegoo", + "sub_path": "filament/Generic/Generic PC-CF @Elegoo.json" + }, + { + "name": "Elegoo PET-CF @base", + "sub_path": "filament/BASE/Elegoo PET-CF @base.json" + }, + { + "name": "Elegoo PETG @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG @EC", + "sub_path": "filament/EC/Elegoo PETG @EC.json" + }, + { + "name": "Elegoo PETG @EC2", + "sub_path": "filament/EC2/Elegoo PETG @EC2.json" + }, + { + "name": "Elegoo PETG @ECC", + "sub_path": "filament/ECC/Elegoo PETG @ECC.json" + }, + { + "name": "Elegoo PETG @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG @ECC2.json" + }, + { + "name": "Elegoo PETG @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG @EN2 Series.json" + }, + { + "name": "Elegoo PETG @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG @EN3 Series.json" + }, + { + "name": "Elegoo PETG @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG @EN4 Series.json" + }, + { + "name": "Elegoo PETG @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG HF @base", + "sub_path": "filament/BASE/Elegoo PETG HF @base.json" + }, + { + "name": "Elegoo PETG PRO @base", + "sub_path": "filament/BASE/Elegoo PETG PRO @base.json" + }, + { + "name": "Elegoo PETG Translucent @base", + "sub_path": "filament/BASE/Elegoo PETG Translucent @base.json" + }, + { + "name": "Elegoo PETG-CF @base", + "sub_path": "filament/BASE/Elegoo PETG-CF @base.json" + }, + { + "name": "Elegoo PETG-GF @base", + "sub_path": "filament/BASE/Elegoo PETG-GF @base.json" + }, + { + "name": "Elegoo Rapid PETG @base", + "sub_path": "filament/BASE/Elegoo Rapid PETG @base.json" + }, + { + "name": "Generic PET @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PET @Elegoo Centauri.json" + }, + { + "name": "Generic PET-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PET-CF @Elegoo Centauri.json" + }, + { + "name": "Generic PETG @Elegoo", + "sub_path": "filament/Generic/Generic PETG @Elegoo.json" + }, + { + "name": "Generic PETG PRO @Elegoo", + "sub_path": "filament/Generic/Generic PETG PRO @Elegoo.json" + }, + { + "name": "Generic PETG-CF @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PETG-CF @Elegoo Centauri.json" + }, + { + "name": "Elegoo PLA @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA @EC", + "sub_path": "filament/EC/Elegoo PLA @EC.json" + }, + { + "name": "Elegoo PLA @EC2", + "sub_path": "filament/EC2/Elegoo PLA @EC2.json" + }, + { + "name": "Elegoo PLA @ECC", + "sub_path": "filament/ECC/Elegoo PLA @ECC.json" + }, + { + "name": "Elegoo PLA @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA @ECC2.json" + }, + { + "name": "Elegoo PLA @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA @EN2 Series.json" + }, + { + "name": "Elegoo PLA @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA @EN3 Series.json" + }, + { + "name": "Elegoo PLA @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA @EN4 Series.json" + }, + { + "name": "Elegoo PLA @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Basic @base", + "sub_path": "filament/BASE/Elegoo PLA Basic @base.json" + }, + { + "name": "Elegoo PLA Galaxy @base", + "sub_path": "filament/BASE/Elegoo PLA Galaxy @base.json" + }, + { + "name": "Elegoo PLA Glow @base", + "sub_path": "filament/BASE/Elegoo PLA Glow @base.json" + }, + { + "name": "Elegoo PLA Marble @base", + "sub_path": "filament/BASE/Elegoo PLA Marble @base.json" + }, + { + "name": "Elegoo PLA Matte @base", + "sub_path": "filament/BASE/Elegoo PLA Matte @base.json" + }, + { + "name": "Elegoo PLA PRO @base", + "sub_path": "filament/BASE/Elegoo PLA PRO @base.json" + }, + { + "name": "Elegoo PLA Silk @base", + "sub_path": "filament/BASE/Elegoo PLA Silk @base.json" + }, + { + "name": "Elegoo PLA Sparkle @base", + "sub_path": "filament/BASE/Elegoo PLA Sparkle @base.json" + }, + { + "name": "Elegoo PLA Translucent2 @base", + "sub_path": "filament/BASE/Elegoo PLA Translucent2 @base.json" + }, + { + "name": "Elegoo PLA Wood @base", + "sub_path": "filament/BASE/Elegoo PLA Wood @base.json" + }, + { + "name": "Elegoo PLA+ @base", + "sub_path": "filament/BASE/Elegoo PLA+ @base.json" + }, + { + "name": "Elegoo PLA-CF @base", + "sub_path": "filament/BASE/Elegoo PLA-CF @base.json" + }, + { + "name": "Elegoo Rapid PLA+ @base", + "sub_path": "filament/BASE/Elegoo Rapid PLA+ @base.json" + }, + { + "name": "Generic PLA @Elegoo", + "sub_path": "filament/Generic/Generic PLA @Elegoo.json" + }, + { + "name": "Generic PLA @Elegoo Centauri", + "sub_path": "filament/Generic/Generic PLA @Elegoo Centauri.json" + }, + { + "name": "Generic PLA Matte @Elegoo", + "sub_path": "filament/Generic/Generic PLA Matte @Elegoo.json" + }, + { + "name": "Elegoo Rapid TPU 95A @base", + "sub_path": "filament/BASE/Elegoo Rapid TPU 95A @base.json" + }, + { + "name": "Elegoo TPU 95A @EC", + "sub_path": "filament/EC/Elegoo TPU 95A @EC.json" + }, + { + "name": "Elegoo TPU 95A @EC2", + "sub_path": "filament/EC2/Elegoo TPU 95A @EC2.json" + }, + { + "name": "Elegoo TPU 95A @ECC", + "sub_path": "filament/ECC/Elegoo TPU 95A @ECC.json" + }, + { + "name": "Elegoo TPU 95A @ECC2", + "sub_path": "filament/ECC2/Elegoo TPU 95A @ECC2.json" + }, + { + "name": "Elegoo TPU 95A @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json" + }, + { + "name": "Elegoo TPU 95A @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json" + }, + { + "name": "Elegoo ASA-CF @EC2", + "sub_path": "filament/EC2/Elegoo ASA-CF @EC2.json" + }, + { + "name": "Elegoo ASA-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo ASA-CF @ECC2.json" + }, + { + "name": "Elegoo PC-FR @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json" + }, + { + "name": "Elegoo PC-FR @EC", + "sub_path": "filament/EC/Elegoo PC-FR @EC.json" + }, + { + "name": "Elegoo PC-FR @EC2", + "sub_path": "filament/EC2/Elegoo PC-FR @EC2.json" + }, + { + "name": "Elegoo PC-FR @ECC", + "sub_path": "filament/ECC/Elegoo PC-FR @ECC.json" + }, + { + "name": "Elegoo PC-FR @ECC2", + "sub_path": "filament/ECC2/Elegoo PC-FR @ECC2.json" + }, + { + "name": "Elegoo PET-CF @EC2", + "sub_path": "filament/EC2/Elegoo PET-CF @EC2.json" + }, + { + "name": "Elegoo PET-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PET-CF @ECC2.json" + }, + { + "name": "Elegoo PETG HF @EC2", + "sub_path": "filament/EC2/Elegoo PETG HF @EC2.json" + }, + { + "name": "Elegoo PETG HF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG HF @ECC2.json" + }, + { + "name": "Elegoo PETG PRO @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG PRO @EC", + "sub_path": "filament/EC/Elegoo PETG PRO @EC.json" + }, + { + "name": "Elegoo PETG PRO @EC2", + "sub_path": "filament/EC2/Elegoo PETG PRO @EC2.json" + }, + { + "name": "Elegoo PETG PRO @ECC", + "sub_path": "filament/ECC/Elegoo PETG PRO @ECC.json" + }, + { + "name": "Elegoo PETG PRO @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG PRO @ECC2.json" + }, + { + "name": "Elegoo PETG PRO @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json" + }, + { + "name": "Elegoo PETG PRO @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json" + }, + { + "name": "Elegoo PETG PRO @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json" + }, + { + "name": "Elegoo PETG PRO @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG Translucent @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json" + }, + { + "name": "Elegoo PETG Translucent @EC", + "sub_path": "filament/EC/Elegoo PETG Translucent @EC.json" + }, + { + "name": "Elegoo PETG Translucent @EC2", + "sub_path": "filament/EC2/Elegoo PETG Translucent @EC2.json" + }, + { + "name": "Elegoo PETG Translucent @ECC", + "sub_path": "filament/ECC/Elegoo PETG Translucent @ECC.json" + }, + { + "name": "Elegoo PETG Translucent @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG Translucent @ECC2.json" + }, + { + "name": "Elegoo PETG Translucent @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json" + }, + { + "name": "Elegoo PETG Translucent @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json" + }, + { + "name": "Elegoo PETG Translucent @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json" + }, + { + "name": "Elegoo PETG Translucent @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG-CF @EC", + "sub_path": "filament/EC/Elegoo PETG-CF @EC.json" + }, + { + "name": "Elegoo PETG-CF @EC2", + "sub_path": "filament/EC2/Elegoo PETG-CF @EC2.json" + }, + { + "name": "Elegoo PETG-CF @ECC", + "sub_path": "filament/ECC/Elegoo PETG-CF @ECC.json" + }, + { + "name": "Elegoo PETG-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-CF @ECC2.json" + }, + { + "name": "Elegoo PETG-CF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json" + }, + { + "name": "Elegoo PETG-CF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json" + }, + { + "name": "Elegoo PETG-CF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json" + }, + { + "name": "Elegoo PETG-CF @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json" + }, + { + "name": "Elegoo PETG-GF @EC", + "sub_path": "filament/EC/Elegoo PETG-GF @EC.json" + }, + { + "name": "Elegoo PETG-GF @EC2", + "sub_path": "filament/EC2/Elegoo PETG-GF @EC2.json" + }, + { + "name": "Elegoo PETG-GF @ECC", + "sub_path": "filament/ECC/Elegoo PETG-GF @ECC.json" + }, + { + "name": "Elegoo PETG-GF @ECC2", + "sub_path": "filament/ECC2/Elegoo PETG-GF @ECC2.json" + }, + { + "name": "Elegoo PETG-GF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json" + }, + { + "name": "Elegoo PETG-GF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json" + }, + { + "name": "Elegoo PETG-GF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json" + }, + { + "name": "Elegoo PETG-GF @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json" + }, + { + "name": "Elegoo Rapid PETG @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json" + }, + { + "name": "Elegoo Rapid PETG @EC", + "sub_path": "filament/EC/Elegoo Rapid PETG @EC.json" + }, + { + "name": "Elegoo Rapid PETG @EC2", + "sub_path": "filament/EC2/Elegoo Rapid PETG @EC2.json" + }, + { + "name": "Elegoo Rapid PETG @ECC", + "sub_path": "filament/ECC/Elegoo Rapid PETG @ECC.json" + }, + { + "name": "Elegoo Rapid PETG @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid PETG @ECC2.json" + }, + { + "name": "Elegoo Rapid PETG @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json" + }, + { + "name": "Elegoo Rapid PETG @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json" + }, + { + "name": "Elegoo Rapid PETG @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PETG @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Basic @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Basic @EC", + "sub_path": "filament/EC/Elegoo PLA Basic @EC.json" + }, + { + "name": "Elegoo PLA Basic @EC2", + "sub_path": "filament/EC2/Elegoo PLA Basic @EC2.json" + }, + { + "name": "Elegoo PLA Basic @ECC", + "sub_path": "filament/ECC/Elegoo PLA Basic @ECC.json" + }, + { + "name": "Elegoo PLA Basic @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Basic @ECC2.json" + }, + { + "name": "Elegoo PLA Basic @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json" + }, + { + "name": "Elegoo PLA Basic @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json" + }, + { + "name": "Elegoo PLA Basic @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json" + }, + { + "name": "Elegoo PLA Basic @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Galaxy @EC", + "sub_path": "filament/EC/Elegoo PLA Galaxy @EC.json" + }, + { + "name": "Elegoo PLA Galaxy @EC2", + "sub_path": "filament/EC2/Elegoo PLA Galaxy @EC2.json" + }, + { + "name": "Elegoo PLA Galaxy @ECC", + "sub_path": "filament/ECC/Elegoo PLA Galaxy @ECC.json" + }, + { + "name": "Elegoo PLA Galaxy @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Galaxy @ECC2.json" + }, + { + "name": "Elegoo PLA Galaxy @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json" + }, + { + "name": "Elegoo PLA Galaxy @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Glow @EC2", + "sub_path": "filament/EC2/Elegoo PLA Glow @EC2.json" + }, + { + "name": "Elegoo PLA Glow @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Glow @ECC2.json" + }, + { + "name": "Elegoo PLA Marble @EC", + "sub_path": "filament/EC/Elegoo PLA Marble @EC.json" + }, + { + "name": "Elegoo PLA Marble @EC2", + "sub_path": "filament/EC2/Elegoo PLA Marble @EC2.json" + }, + { + "name": "Elegoo PLA Marble @ECC", + "sub_path": "filament/ECC/Elegoo PLA Marble @ECC.json" + }, + { + "name": "Elegoo PLA Marble @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Marble @ECC2.json" + }, + { + "name": "Elegoo PLA Marble @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json" + }, + { + "name": "Elegoo PLA Marble @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json" + }, + { + "name": "Elegoo PLA Marble @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json" + }, + { + "name": "Elegoo PLA Marble @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Matte @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Matte @EC", + "sub_path": "filament/EC/Elegoo PLA Matte @EC.json" + }, + { + "name": "Elegoo PLA Matte @EC2", + "sub_path": "filament/EC2/Elegoo PLA Matte @EC2.json" + }, + { + "name": "Elegoo PLA Matte @ECC", + "sub_path": "filament/ECC/Elegoo PLA Matte @ECC.json" + }, + { + "name": "Elegoo PLA Matte @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Matte @ECC2.json" + }, + { + "name": "Elegoo PLA Matte @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json" + }, + { + "name": "Elegoo PLA Matte @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json" + }, + { + "name": "Elegoo PLA Matte @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json" + }, + { + "name": "Elegoo PLA Matte @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA PRO @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA PRO @EC", + "sub_path": "filament/EC/Elegoo PLA PRO @EC.json" + }, + { + "name": "Elegoo PLA PRO @EC2", + "sub_path": "filament/EC2/Elegoo PLA PRO @EC2.json" + }, + { + "name": "Elegoo PLA PRO @ECC", + "sub_path": "filament/ECC/Elegoo PLA PRO @ECC.json" + }, + { + "name": "Elegoo PLA PRO @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA PRO @ECC2.json" + }, + { + "name": "Elegoo PLA PRO @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json" + }, + { + "name": "Elegoo PLA PRO @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json" + }, + { + "name": "Elegoo PLA PRO @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json" + }, + { + "name": "Elegoo PLA Silk @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA Silk @EC", + "sub_path": "filament/EC/Elegoo PLA Silk @EC.json" + }, + { + "name": "Elegoo PLA Silk @EC2", + "sub_path": "filament/EC2/Elegoo PLA Silk @EC2.json" + }, + { + "name": "Elegoo PLA Silk @ECC", + "sub_path": "filament/ECC/Elegoo PLA Silk @ECC.json" + }, + { + "name": "Elegoo PLA Silk @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Silk @ECC2.json" + }, + { + "name": "Elegoo PLA Silk @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json" + }, + { + "name": "Elegoo PLA Silk @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json" + }, + { + "name": "Elegoo PLA Silk @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EC", + "sub_path": "filament/EC/Elegoo PLA Sparkle @EC.json" + }, + { + "name": "Elegoo PLA Sparkle @EC2", + "sub_path": "filament/EC2/Elegoo PLA Sparkle @EC2.json" + }, + { + "name": "Elegoo PLA Sparkle @ECC", + "sub_path": "filament/ECC/Elegoo PLA Sparkle @ECC.json" + }, + { + "name": "Elegoo PLA Sparkle @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Sparkle @ECC2.json" + }, + { + "name": "Elegoo PLA Sparkle @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json" + }, + { + "name": "Elegoo PLA Sparkle @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA Translucent2 @EC2", + "sub_path": "filament/EC2/Elegoo PLA Translucent2 @EC2.json" + }, + { + "name": "Elegoo PLA Translucent2 @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Translucent2 @ECC2.json" + }, + { + "name": "Elegoo PLA Wood @EC", + "sub_path": "filament/EC/Elegoo PLA Wood @EC.json" + }, + { + "name": "Elegoo PLA Wood @EC2", + "sub_path": "filament/EC2/Elegoo PLA Wood @EC2.json" + }, + { + "name": "Elegoo PLA Wood @ECC", + "sub_path": "filament/ECC/Elegoo PLA Wood @ECC.json" + }, + { + "name": "Elegoo PLA Wood @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA Wood @ECC2.json" + }, + { + "name": "Elegoo PLA Wood @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json" + }, + { + "name": "Elegoo PLA Wood @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json" + }, + { + "name": "Elegoo PLA Wood @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json" + }, + { + "name": "Elegoo PLA Wood @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json" + }, + { + "name": "Elegoo PLA+ @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json" + }, + { + "name": "Elegoo PLA+ @EC", + "sub_path": "filament/EC/Elegoo PLA+ @EC.json" + }, + { + "name": "Elegoo PLA+ @EC2", + "sub_path": "filament/EC2/Elegoo PLA+ @EC2.json" + }, + { + "name": "Elegoo PLA+ @ECC", + "sub_path": "filament/ECC/Elegoo PLA+ @ECC.json" + }, + { + "name": "Elegoo PLA+ @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA+ @ECC2.json" + }, + { + "name": "Elegoo PLA+ @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json" + }, + { + "name": "Elegoo PLA+ @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json" + }, + { + "name": "Elegoo PLA+ @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json" + }, + { + "name": "Elegoo PLA-CF @EC2", + "sub_path": "filament/EC2/Elegoo PLA-CF @EC2.json" + }, + { + "name": "Elegoo PLA-CF @ECC", + "sub_path": "filament/ECC/Elegoo PLA-CF @ECC.json" + }, + { + "name": "Elegoo PLA-CF @ECC2", + "sub_path": "filament/ECC2/Elegoo PLA-CF @ECC2.json" + }, + { + "name": "Elegoo PLA-CF @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json" + }, + { + "name": "Elegoo PLA-CF @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json" + }, + { + "name": "Elegoo PLA-CF @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @0.2 nozzle", + "sub_path": "filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json" + }, + { + "name": "Elegoo Rapid PLA+ @EC", + "sub_path": "filament/EC/Elegoo Rapid PLA+ @EC.json" + }, + { + "name": "Elegoo Rapid PLA+ @EC2", + "sub_path": "filament/EC2/Elegoo Rapid PLA+ @EC2.json" + }, + { + "name": "Elegoo Rapid PLA+ @ECC", + "sub_path": "filament/ECC/Elegoo Rapid PLA+ @ECC.json" + }, + { + "name": "Elegoo Rapid PLA+ @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid PLA+ @ECC2.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json" + }, + { + "name": "Elegoo Rapid PLA+ @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EC", + "sub_path": "filament/EC/Elegoo Rapid TPU 95A @EC.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EC2", + "sub_path": "filament/EC2/Elegoo Rapid TPU 95A @EC2.json" + }, + { + "name": "Elegoo Rapid TPU 95A @ECC", + "sub_path": "filament/ECC/Elegoo Rapid TPU 95A @ECC.json" + }, + { + "name": "Elegoo Rapid TPU 95A @ECC2", + "sub_path": "filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN2 Series", + "sub_path": "filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN3 Series", + "sub_path": "filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @EN4 Series", + "sub_path": "filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json" + }, + { + "name": "Elegoo Rapid TPU 95A @Elegoo Giga", + "sub_path": "filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_elegoo_3dp_001_common", + "sub_path": "machine/fdm_elegoo_3dp_001_common.json" + }, + { + "name": "fdm_elegoo_common", + "sub_path": "machine/fdm_elegoo_common.json" + }, + { + "name": "Elegoo Centauri 0.4 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.4 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.4 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.4 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.4 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.4 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.4 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.2 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.6 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri 0.8 nozzle", + "sub_path": "machine/EC/Elegoo Centauri 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.2 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.6 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri 2 0.8 nozzle", + "sub_path": "machine/EC2/Elegoo Centauri 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.2 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.6 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 0.8 nozzle", + "sub_path": "machine/ECC/Elegoo Centauri Carbon 0.8 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.2 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.2 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.6 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Centauri Carbon 2 0.8 nozzle", + "sub_path": "machine/ECC2/Elegoo Centauri Carbon 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.4 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.4 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.6 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.6 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 0.8 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 0.8 nozzle.json" + }, + { + "name": "Elegoo OrangeStorm Giga 1.0 nozzle", + "sub_path": "machine/EOSGIGA/Elegoo OrangeStorm Giga 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.4 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2S 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2S 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.4 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.4 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Pro 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Pro 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune X 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune X 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Max 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Max 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Plus 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Plus 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.2 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.6 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 0.8 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 4 Pro 1.0 nozzle", + "sub_path": "machine/EN4SERIES/Elegoo Neptune 4 Pro 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 2D 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 2D 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.6 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 0.8 nozzle", + "sub_path": "machine/EN2SERIES/Elegoo Neptune 3 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Max 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Max 1.0 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.2 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.2 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.6 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.6 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 0.8 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 0.8 nozzle.json" + }, + { + "name": "Elegoo Neptune 3 Plus 1.0 nozzle", + "sub_path": "machine/EN3SERIES/Elegoo Neptune 3 Plus 1.0 nozzle.json" + } + ] +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json index 86b533bba1..43c786705e 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ABS @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "EABSB00", + "filament_id": "OFxOHhZw", "instantiation": "false", "filament_vendor": [ "Elegoo" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json index c48b5e5671..ea910dec86 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "EASAB00", + "filament_id": "OFobDOW5", "instantiation": "false", "filament_vendor": [ "Elegoo" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json new file mode 100644 index 0000000000..155d6f8290 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo ASA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo ASA-CF @base", + "inherits": "Elegoo ASA @base", + "from": "system", + "filament_id": "OFryjl35", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json deleted file mode 100644 index 87907a36f8..0000000000 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT @base.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "type": "filament", - "name": "Elegoo PAHT @base", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "EPAHTB00", - "instantiation": "false", - "filament_density": [ - "1.25" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "cool_plate_temp": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "45" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "slow_down_min_speed": [ - "20" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_vendor": [ - "Elegoo" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json new file mode 100644 index 0000000000..95bc595f90 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PAHT-CF @base.json @@ -0,0 +1,83 @@ +{ + "type": "filament", + "name": "Elegoo PAHT-CF @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OF20kXr5", + "instantiation": "false", + "filament_density": [ + "1.25" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "cool_plate_temp": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "45" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "slow_down_min_speed": [ + "20" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_vendor": [ + "Elegoo" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json index d60048b30a..ecaac93aaf 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PC @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "EPCB00", + "filament_id": "OFUyDDNv", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json new file mode 100644 index 0000000000..91034fda41 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PC-FR @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @base", + "inherits": "Elegoo PC @base", + "from": "system", + "filament_id": "OFlsTpJG", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json new file mode 100644 index 0000000000..5f9561f5a9 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PET-CF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Elegoo PET-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFe98A1y", + "instantiation": "false", + "filament_type": [ + "PET-CF" + ] +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json index 29d83df77a..ec92793955 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "EPETGB00", + "filament_id": "OFLcd093", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json new file mode 100644 index 0000000000..9645c4572f --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG HF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFlP3KWq", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json new file mode 100644 index 0000000000..ec604d722c --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG PRO @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFOsHDnB", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json new file mode 100644 index 0000000000..2d7d0f9777 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG Translucent @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OF6Ll8lK", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json new file mode 100644 index 0000000000..60a643b2a3 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFuUuIhR", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json new file mode 100644 index 0000000000..3ff4b96375 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PETG-GF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-GF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFmveLWz", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json index 40e594ee62..8965bae8e1 100644 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "EPLAB00", + "filament_id": "OFvgE0Zh", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json new file mode 100644 index 0000000000..93c52a3382 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Basic @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFm06H6V", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json new file mode 100644 index 0000000000..a25fcf8daa --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Galaxy @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Galaxy @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFU1zPxE", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json new file mode 100644 index 0000000000..a07012d83b --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Glow @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Glow @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFjPXrXO", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json new file mode 100644 index 0000000000..b8990a7c1b --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Marble @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Marble @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFfuhviw", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json new file mode 100644 index 0000000000..0394308e99 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Matte @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFsB2lxm", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json new file mode 100644 index 0000000000..731f5c5ca4 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA PRO @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF1hznGB", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json new file mode 100644 index 0000000000..e708794eea --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Silk @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Silk @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFXz7Mwx", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json new file mode 100644 index 0000000000..cc292ac240 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Sparkle @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Sparkle @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFhcYzR8", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json new file mode 100644 index 0000000000..c0e2e23dfe --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Translucent2 @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Translucent2 @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFn1QaY3", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json new file mode 100644 index 0000000000..4e3362a5d3 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA Wood @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Wood @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFWYtgCa", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json new file mode 100644 index 0000000000..f90355d85c --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFBUIlZ7", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json new file mode 100644 index 0000000000..4f4979d95f --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo PLA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA-CF @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFln72PT", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json new file mode 100644 index 0000000000..e328cf0a75 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PETG @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFLXvuMr", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json new file mode 100644 index 0000000000..06fd489c41 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFkhhUS0", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json new file mode 100644 index 0000000000..3ffd591fdc --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo Rapid TPU 95A @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid TPU 95A @base", + "inherits": "Elegoo TPU 95A @base", + "from": "system", + "filament_id": "OF30Ftju", + "instantiation": "false" +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json new file mode 100644 index 0000000000..70cdc0faa0 --- /dev/null +++ b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU 95A @base.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Elegoo TPU 95A @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFqHQNoZ", + "instantiation": "false", + "filament_max_volumetric_speed": [ + "3.6" + ], + "filament_vendor": [ + "Elegoo" + ], + "filament_density": [ + "1.21" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json b/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json deleted file mode 100644 index 99ed8dc8e9..0000000000 --- a/resources/profiles/Elegoo/filament/BASE/Elegoo TPU @base.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Elegoo TPU @base", - "inherits": "fdm_filament_tpu", - "from": "system", - "filament_id": "ETPUB00", - "instantiation": "false", - "filament_max_volumetric_speed": [ - "3.6" - ], - "filament_vendor": [ - "Elegoo" - ], - "filament_density": [ - "1.21" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json b/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json index 5607709da7..1c6c0dffaf 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic ABS @base.json @@ -3,7 +3,7 @@ "name": "Generic ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GABSB00", + "filament_id": "OFY9muEs", "instantiation": "false", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json index d2f0c4672b..5c1ac04bd9 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic ASA @base.json @@ -3,7 +3,7 @@ "name": "Generic ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GASAB00", + "filament_id": "OFLPAxz3", "instantiation": "false", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json index e130cbf2e2..c9cae649dc 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PA @base.json @@ -3,7 +3,7 @@ "name": "Generic PA @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GPAB00", + "filament_id": "OFg8ndtj", "instantiation": "false", "chamber_temperatures": [ "60" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json index 71850f98a9..b07248a643 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PC @base.json @@ -3,7 +3,7 @@ "name": "Generic PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GPCB00", + "filament_id": "OFLakOUI", "instantiation": "false", "filament_max_volumetric_speed": [ "16" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json index 61a6f03b96..e3af7115ae 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PET @base.json @@ -3,7 +3,7 @@ "name": "Generic PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GPETB00", + "filament_id": "OF6MOPWx", "instantiation": "false", "filament_vendor": [ "Generic" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json index 046d0dab90..e22cd697f8 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PETG @base.json @@ -3,7 +3,7 @@ "name": "Generic PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GPETGB00", + "filament_id": "OFYPdQJh", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json b/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json index b9b1b0299c..0116649a9b 100644 --- a/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json +++ b/resources/profiles/Elegoo/filament/BASE/Generic PLA @base.json @@ -3,7 +3,7 @@ "name": "Generic PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GPLAB00", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json index d1e05a1372..0b01b2feb3 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PAHT-CF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @EC", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "ZRd4WPQrh8nC8n7G", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json index 8fae500404..85c449d63d 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PC-FR @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @EC", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "DOX4jdBlUuiFx27J", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json index e86269bb09..a31310c99e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG PRO @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "ADLcWU2wDYdXUM0F", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json index 28f8027a7a..82cf5984ce 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG Translucent @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "bkdR8uTPqu0nMTMW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json index 1875a4b76d..40c06c2ea6 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-CF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "bNOqwg4q2TE94jEj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json index fcfd9e3ed8..978d44137c 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PETG-GF @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "jDvyk3UkeiNb2U9m", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json index a69e1b0daa..53fb8da44e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Basic @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "hO0eeJKhhc9aWSqV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json index cb692d090b..9e4e4e75fa 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Galaxy @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "F55l4bPdEauXI3Zf", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json index 521d677ac9..5f15585557 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Marble @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "lZOlnGqn1G7V5NBY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json index ba0cdcff72..2ebc1acdcb 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Matte @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "GC7p8OUHQheNbsms", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json index 59b3d04f4b..96e4da2470 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA PRO @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "23RCuAK92MPaxyqe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json index 1641f49732..3de7272685 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Silk @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "vSomzlfdeel8Fkkc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json index cea1875a1e..ccb945dea0 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Sparkle @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "XbPbopAAmos9Fhe5", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json index 329eca7704..c023839c9e 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA Wood @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "4cqc0qMp58PbLivG", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json index 4b02ef0ff2..e4f500e3d9 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo PLA+ @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "TtRiwCEgVej4q1bD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json index 5651aabd4e..aaa6b6ed57 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PETG @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EC", "renamed_from": "Elegoo RAPID PETG @EC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "BIkMBzPkBJNZtn9I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json index 441e1c1844..f91163b60b 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid PLA+ @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EC", "renamed_from": "Elegoo RAPID PLA+ @EC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "SdBul5AmPj8ZwaKm", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json index b698d51e37..1bb675bcad 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo Rapid TPU 95A @EC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EC", "renamed_from": "Elegoo RAPID TPU 95A @EC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "XWoU9g1mRLapDWmY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json b/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json index 6e9944b30c..ef850ee0d8 100644 --- a/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json +++ b/resources/profiles/Elegoo/filament/EC/Elegoo TPU 95A @EC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "hqmWADQDYWBuniTB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json index d448a14146..09a741f456 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo ASA-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @EC2", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "12kyjckYS59VKuJr", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json index 10d7202698..e1da626c9a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PAHT-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @EC2", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "miv95d8rXD4CAgjC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json index e27e485702..fef1cd2942 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PC-FR @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @EC2", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "4y2nFqOY9OLYQT4I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json index 0e73748900..9cfd0df698 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PET-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "YuxImosRqvxeXky9", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json index db3eac6a9b..3cc09b1253 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG HF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "JXAbqQk05wQC2ZsV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json index f443590f79..19f171099d 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG PRO @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "7eE7wOnwAMmDk3N8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json index e5d38ae804..117eff2f6c 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG Translucent @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "c62Io0F7o3YY9UfY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json index 521e3f54d6..ef5bc10365 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "H5b1oB4xwcsOGVYG", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json index 0376628dd7..78f93ab630 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PETG-GF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "UXEBZHN5QuEKg2dX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json index bf2e6de3d6..5ca3f673a6 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Basic @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "YBylnOIc1QhV45N0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json index 485a267cc4..f907a9add4 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Galaxy @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "BZ67cDxyhlFdrNPf", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json index d9cd47f31e..5942a1353b 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Glow @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "X18eV3oo6N3xDJXN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json index 819bcc8fb7..41e18aac91 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Marble @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "D4UWZLfsmnwQSQP0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json index 5713ef1094..fa490188d9 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Matte @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "EMVja9n1ZwI2Lq3R", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json index 128866138d..3f52d014e1 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA PRO @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "TXUB904pAsT5napV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json index def1a54169..6b334b031a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Silk @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "9M8QYAJcLTyKLgNL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json index 17abe488dc..76efd87383 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Sparkle @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "l7NSciXWqkFqbTgB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json index 8bd5e92dea..6e09760383 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Translucent2 @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "RKBHiiO580ou2vr1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json index 1071c52353..153ace7d5d 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA Wood @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "ym42CllFezpl1XEg", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json index cbf217cae1..5dfd3d5218 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA+ @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "vf5ap9MNwVgptsvO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json index e148759647..7f77984b7b 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo PLA-CF @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "UpGOamlqBkqj71bx", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json index 7242ba793e..c6973a9316 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PETG @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EC2", "renamed_from": "Elegoo RAPID PETG @EC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "1qDXoSeuwBcAbZmk", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json index e3d33b2243..b44278d6e2 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid PLA+ @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EC2", "renamed_from": "Elegoo RAPID PLA+ @EC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "lfHbQa7hrJ7wg4oC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json index 7195e17e93..14b585d079 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo Rapid TPU 95A @EC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EC2", "renamed_from": "Elegoo RAPID TPU 95A @EC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "siG31sp4DyxsrhAc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json b/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json index 1389221bce..255eaf6a1a 100644 --- a/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json +++ b/resources/profiles/Elegoo/filament/EC2/Elegoo TPU 95A @EC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "6LUQGjzmx0y5A6Qn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json index bf0363b0d7..de12de0612 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PAHT-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @ECC", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "iDRlRpUzPNVYv0lY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json index 4fc22048cb..739780ead3 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PC-FR @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @ECC", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "nCZkQRo7hh7vwwbL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json index 49692dd335..95beb0642f 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG PRO @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "VfYr5aZoseuXcbN6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json index de9d234ce4..d5e37e6443 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG Translucent @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "X5cTMTTWd0GWWj6d", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json index a2f6620a79..4f71ace3fa 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "WNaFMeStUh8INJGx", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json index 68df019a74..ad02614622 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PETG-GF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "s5zG5lNveft4RPEX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json index 2470cead83..0b6855e93b 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Basic @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "zCxfCnJcHoGLipVy", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json index 5e0e0819c1..a60319429e 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Galaxy @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "M5uv0mruFXpkbauD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json index d9104d271f..c436f05881 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Marble @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "BFEnBt0IBILLmhri", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json index 79e4a2b076..d8259d1668 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Matte @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "niMCkAjPd2bJdjZs", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json index bbd35a7c58..4405d9eabc 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA PRO @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "JfYUDBI0wNnLpEsL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json index 7d135cd9fd..d67e21299f 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Silk @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "n4hPXKakxN4xmQsj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json index 6143048aa1..b26a6d0486 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Sparkle @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "kn34IfbyhDKllxwq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json index 92842d8fbf..4160c5a11a 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA Wood @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "kI7ZFyzYkMcrKrM1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json index 06c833d7b2..3d96576667 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA+ @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "UbOYgGsK00v3gLL8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json index 4743d13a9f..a7ff2af7ea 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo PLA-CF @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "rvrpVcpcUAtwXgsn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json index 6ea852850d..78be9ad0c5 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PETG @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @ECC", "renamed_from": "Elegoo RAPID PETG @ECC", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "r4F3n71ajBUlmLgN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json index 859b66e8ad..e331dcb593 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid PLA+ @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @ECC", "renamed_from": "Elegoo RAPID PLA+ @ECC", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "OvdHgrXbSulHkLWz", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json index 6faef1d73a..af4902d2a0 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo Rapid TPU 95A @ECC.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @ECC", "renamed_from": "Elegoo RAPID TPU 95A @ECC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "uVpRY8TCq9S6kr8M", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json b/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json index 870f4dc8ac..7f707f2371 100644 --- a/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json +++ b/resources/profiles/Elegoo/filament/ECC/Elegoo TPU 95A @ECC.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @ECC", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "cOI05FCm8wrkqtDD", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json index 0974b25503..9e9de44980 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo ASA-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @ECC2", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "X7ugJOOrWixpeke8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json index 5c41f76588..7d52aface9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PAHT-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @ECC2", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "hmTwVvyCAIZI7rSY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json index 5875d26411..e179a2fae0 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PC-FR @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @ECC2", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "M86WAPT5jr5ge7Ni", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json index 9519266c2d..57de3396b7 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PET-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "sIwAf2oRC7VqYjIR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json index 27ad64e1b5..06551d42b3 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG HF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "EAt1AJX3ZupILYWV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json index bb535d3213..52621252b8 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG PRO @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "YjUFi1BuigQdJGfe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json index de86ebaae6..81f11bb3cf 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG Translucent @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "Nk21n7x4I5xjwNqV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json index 1e40c2a305..a8f66ceb18 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "TsJJG9mgzBt5GWPZ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json index 13060e74ba..a80a50283a 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PETG-GF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Po38QP4RqkGBZTHq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json index e301741c27..e0e19454e5 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Basic @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "CG6nOQRYTWN0jJNV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json index 638fef599c..1f4c3a24ea 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Galaxy @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "jieMxZQRwSJ8lOQK", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json index 7944c67d88..9d44f32e96 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Glow @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "S6c2IXcIWDpViP2T", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json index 297ac4fcd0..4a1592daef 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Marble @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "vBkiE3Uh1LdCiOig", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json index 025d40e19d..5522f8f92f 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Matte @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "C3IdNUQ5dSe1wQua", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json index f1b8a7a1d2..b3ed52adae 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA PRO @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "nIBhL1ZCxYZSMZTO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json index 62efb49b53..970a859a26 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Silk @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "R20HD2TcTFmVt8ei", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json index da6927987e..7357f57dd7 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Sparkle @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "RoM3TYRuszinvW6b", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json index 8a81ff7ccf..4119a7c009 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Translucent2 @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "K1pIYbrCCJUBwAOt", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json index 0b794f78a6..c1ee9ccb34 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA Wood @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "7D7QoTRo7U4HGaZB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json index 7b6e068061..bad7a5e25d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA+ @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "GCMagCIZUPjPBpuH", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json index a95b21ddba..1c7d88298d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo PLA-CF @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "0pllUBj7uWuhIr0v", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json index fe19d98291..f550c51ee9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PETG @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @ECC2", "renamed_from": "Elegoo RAPID PETG @ECC2", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "oVp14HbITUsNcgvp", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json index c173221004..4baa2ba58d 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid PLA+ @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @ECC2", "renamed_from": "Elegoo RAPID PLA+ @ECC2", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "qXybozVO1oL7MEud", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json index ebbdefb767..267956ac99 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo Rapid TPU 95A @ECC2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @ECC2", "renamed_from": "Elegoo RAPID TPU 95A @ECC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "5osmvljNWBUEc9Kc", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json index 86eccaff03..215b9beec9 100644 --- a/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json +++ b/resources/profiles/Elegoo/filament/ECC2/Elegoo TPU 95A @ECC2.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @ECC2", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "v0Qj3xMBkUGnxZPi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json index 88c968cf23..734234a7e5 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PC-FR @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @0.2 nozzle", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "Q6LfquCFYpzmrILa", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json index 9978fb863b..f8cc2b9fc2 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG PRO @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "TBkoABUqBy51TLtW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json index 7b11b3b54e..82e74b3448 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PETG Translucent @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "3zgNnsZ5SmrldddZ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json index c606063a33..9f9b494683 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Basic @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "cBFHhPKahRBGfAg6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json index f5bb2921b3..cb1dbf6ebd 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Matte @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "TyHg4K4ZNiYKgaso", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json index 80f9b0cab9..9514bef332 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA PRO @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "ed7EP0Fx9X6WoP8q", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json index e6a61535b3..7cd383baf0 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA Silk @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "9cy4zu57LxlFIrLB", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json index 7bab03c3c0..960d70e8b4 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo PLA+ @0.2 nozzle.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "IODCNDnNbt1xXMQR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json index 4f9d3ddacd..a2c6a17ee8 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PETG @0.2 nozzle.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @0.2 nozzle", "renamed_from": "Elegoo RAPID PETG @0.2 nozzle", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "Vn71U93sqvxWaq5J", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json index f7d3bf2b8b..5677780b04 100644 --- a/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json +++ b/resources/profiles/Elegoo/filament/ELEGOO_02_NOZZLE/Elegoo Rapid PLA+ @0.2 nozzle.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @0.2 nozzle", "renamed_from": "Elegoo RAPID PLA+ @0.2 nozzle", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "52q6GSMo16aOU2a0", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json index 2d540432f1..ee33397b89 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG PRO @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "47TFK2SdXkanFany", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json index ec6735ee45..9cc8d43f42 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG Translucent @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "PG4cLzHQ2okqwTVi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json index f4cb06df03..15c6fe281b 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-CF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "xVvTmdiPx4DqsoSt", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json index 1d4376f603..655a9b4ff0 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PETG-GF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Wuj48uGxkjtu1k0E", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json index 1625d88ade..02f95a30e4 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Basic @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "rKMXIa1T57ARSSew", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json index 969338f3fb..5ce5cb9b03 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Galaxy @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "dK5fXHKyvXbajhfU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json index 49de0c172a..e65cfd721a 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Marble @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "vcJBgxGVh5Rl3dRy", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json index b526d88f8a..4ba71c6f1c 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Matte @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "pFzHY2WtgjYBAq1c", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json index bbca38423a..fc4a9de6d7 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA PRO @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "AP6zWYwNv7aXdT4e", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json index b75a9105f7..1100589ce7 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Silk @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "AquzfXzcf6CxPLmL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json index a63d22f72b..309f296c35 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Sparkle @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "sYpjo9kbuDSM5YXe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json index 1f52f7a951..10ee31a860 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA Wood @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "FCCgNMxR3m3CtWBL", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json index aa2afe2789..cdbb0a9336 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA+ @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "qn1N6b1JCgut6S69", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json index 51be7c9afc..d90f5a7d86 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo PLA-CF @EN2 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "vmxHMRDkf1EpLGx1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json index 66e35e0448..b60d3aa948 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PETG @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN2 Series", "renamed_from": "Elegoo RAPID PETG @EN2 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "7Nqa8yKgcpoRnMhS", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json index 16f84c1480..a2e29df5f2 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid PLA+ @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN2 Series", "renamed_from": "Elegoo RAPID PLA+ @EN2 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "GRiM2kKnyW0xiFoS", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json index f7fd820319..5c3a6c4bd8 100644 --- a/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json +++ b/resources/profiles/Elegoo/filament/EN2SERIES/Elegoo Rapid TPU 95A @EN2 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN2 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN2 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "NcE57l7rlZXMQqqO", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json index d7b7d77e88..68076528bc 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG PRO @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "hcpl3lUmYmocda9K", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json index a5df1863a2..3b3c367d85 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG Translucent @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "vvE6QSdUAwZyExFq", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json index 85b4e262ce..d47880e700 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-CF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "w31T0qj9YkyNYfXR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json index a0c6dffa1e..74e80e0306 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PETG-GF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "Ss1cK4Mg4Qsmq60H", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json index d322e76d4a..c7008362e1 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Basic @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "HuzVgg6RrpAtYYEv", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json index 70a9903ae6..213d2cdd80 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Galaxy @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "BpZZWJcuFxWOCCnw", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json index b6e4d20992..4ccc34dbc8 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Marble @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "BxsWsE3wgE9wgBmm", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json index 8360ac8d5c..511c9d9677 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Matte @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "L3da64GFIKUFdDJA", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json index 114e264047..a62506cc92 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA PRO @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "V7HUl0gBvGKwKD1A", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json index d7fa7b836b..8498c99ccb 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Silk @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "ik0YrrrI6oUpXz79", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json index b40ed87cf6..990ab62ced 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Sparkle @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "5NjKDHvQ2r1kxHGU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json index 3d3ac38460..22f0c6486c 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA Wood @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "aieihLgO1a0ZdWfJ", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json index 00844dd1e8..02b51855fc 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA+ @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "LqnrFp0vDbiCMJ8I", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json index ab7ccd7730..8284fd2279 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo PLA-CF @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "1NWIyM71opgpoto1", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json index 30ca32476f..bbbb7a044b 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PETG @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN3 Series", "renamed_from": "Elegoo RAPID PETG @EN3 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "WrjA1jFlRkBjm8sV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json index a8755142d5..2e79376216 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid PLA+ @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN3 Series", "renamed_from": "Elegoo RAPID PLA+ @EN3 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "HLIz2ghBgZEcM67x", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json index 0a9d3251b0..11370d1342 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo Rapid TPU 95A @EN3 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN3 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN3 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "q51os4xSncl4kA7h", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json index 864845cb2f..8d4c0d5976 100644 --- a/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json +++ b/resources/profiles/Elegoo/filament/EN3SERIES/Elegoo TPU 95A @EN3 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EN3 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "4W6ZheJxNPUPxe1s", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json index 3f514f290c..b3bf57532d 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG PRO @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "9vWaWFD7kELXCz9k", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json index 9d4befe58d..64d7fe70b4 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG Translucent @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "MGNtc9J7whLEQzfo", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json index 6b6d93b07e..570205ae49 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-CF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "OqmWX74QvP3luz8T", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json index 9c60c02542..14c7c8cd16 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PETG-GF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "l9VHRBqMe9jvI5x6", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json index a35c8b06f3..3393aa3998 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Basic @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "djQpscbgnpi9yeDU", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json index 3b8b23e8d2..510ef8199f 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Galaxy @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "rDOS8SneslZCJyiY", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json index 6aaaa87311..81be94abca 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Marble @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "EXITbaYE2JGd9m6w", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json index b05ed89beb..5240be0bad 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Matte @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "PKKBmF1QUn3byAbe", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json index d993878b35..d8852e7c62 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA PRO @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "912jZphbXGIftHOj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json index 0f01fc1e0e..9e87cd98c4 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Silk @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "3Gwsgkj54YfChaTX", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json index 50750bf2cb..da863b088e 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Sparkle @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "fpSoENagRf6Xkgtr", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json index 3e84f6da3f..cadcf8122c 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA Wood @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "9HTUZ0mmSCp2asTR", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json index 569f2e4a73..270d303450 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA+ @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "aFHpETdqnjrmKoh2", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json index 174db0000f..3eba08c02a 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo PLA-CF @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "tRWzBsYXsnpNVsQ4", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json index 5355c6c52f..855ce546c9 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PETG @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @EN4 Series", "renamed_from": "Elegoo RAPID PETG @EN4 Series", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "fvbwrYR63t9NnL8m", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json index 024aa42f17..5ec149fee7 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid PLA+ @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @EN4 Series", "renamed_from": "Elegoo RAPID PLA+ @EN4 Series", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "Eu5Ao6aTdlnV5o7e", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json index bcf333c319..0c3389a1d2 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo Rapid TPU 95A @EN4 Series.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @EN4 Series", "renamed_from": "Elegoo RAPID TPU 95A @EN4 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "0FWDHJF7V9rGXugP", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json index 392812ff9a..60f5b55a19 100644 --- a/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json +++ b/resources/profiles/Elegoo/filament/EN4SERIES/Elegoo TPU 95A @EN4 Series.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @EN4 Series", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "6pp381J3ahRYYtFE", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json index e5a75475c3..bf3942c6c9 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG PRO @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "cO87yMETWbUTIweN", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json index 61c21f7d5f..89b17d0d8c 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG Translucent @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "fkE2LCMu63t1NQtI", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json index 8f90166c6b..633fee4d01 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-CF @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "uGF6puqnX1jW2pmn", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json index 0d280b37cb..085eba8e80 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PETG-GF @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @Elegoo Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "S4ZpKZDyr5g5HMPi", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json index d49474bcfe..345eb9b131 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Basic @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "vdtyGUjloveBjsGV", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json index c9ba6949ab..4c6df1a2ac 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Galaxy @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "Nq1YaFeJ6Osr7OZ9", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json index 435e05d0ab..a76087fb41 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Marble @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "6mfjc7t9ntuG1ZKW", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json index 9ab372abee..ebc4a86a33 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Matte @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "mHbvYB78eds96SH8", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json index 9b11bc2cae..68ad38e31a 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Sparkle @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "pgsOuYMxtcm3Fkar", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json index 9dd74672fc..2d3118d9f9 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo PLA Wood @Elegoo Giga.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @Elegoo Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "BI2euv7xwM9F2hKC", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json index b91444664e..41aaa430e8 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PETG @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PETG @Elegoo Giga", "renamed_from": "Elegoo RAPID PETG @Elegoo Giga;Elegoo Rapid PETG @EOS Giga;Elegoo RAPID PETG @EOS Giga", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "4ut2mjKopnW6tfxj", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json index da6b0baf35..e42850d3e8 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid PLA+ @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid PLA+ @Elegoo Giga", "renamed_from": "Elegoo RAPID PLA+ @Elegoo Giga;Elegoo Rapid PLA+ @EOS Giga;Elegoo RAPID PLA+ @EOS Giga", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "9I2DPoLgiCzn1S3i", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json index f634875fd5..01ccd899d4 100644 --- a/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json +++ b/resources/profiles/Elegoo/filament/EOSGIGA/Elegoo Rapid TPU 95A @Elegoo Giga.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Elegoo Rapid TPU 95A @Elegoo Giga", "renamed_from": "Elegoo RAPID TPU 95A @Elegoo Giga;Elegoo Rapid TPU 95A @EOS Giga;Elegoo RAPID TPU 95A @EOS Giga", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "i0PeAUTlls9DGtRK", "instantiation": "true", diff --git a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json index 2ebff4843e..4f1fd0d973 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic ABS-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic ABS @base", "from": "system", "setting_id": "fRiriEvlcxDDO5tc", + "filament_id": "OFAIBCLJ", "instantiation": "true", "nozzle_temperature": [ "260" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json index 1fe2791869..b51663338a 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic ASA-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic ASA @base", "from": "system", "setting_id": "S5kHIMcORjlPRnVs", + "filament_id": "OF53eLVD", "instantiation": "true", "filament_type": [ "ASA-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json index 46b8157cf4..a0a9f7705f 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PA6-CF @Elegoo.json @@ -4,6 +4,7 @@ "inherits": "Generic PA @base", "from": "system", "setting_id": "TPgpyakWZ7NjVnj5", + "filament_id": "OFhTPf6L", "instantiation": "true", "fan_min_speed": [ "10" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json index da160366dd..a06d9fec40 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PC-CF @Elegoo.json @@ -4,6 +4,7 @@ "inherits": "Generic PC @base", "from": "system", "setting_id": "KMhdBJbiUeXxKgPS", + "filament_id": "OFafO6VM", "instantiation": "true", "filament_type": [ "PC-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json index 4e9aa92be9..a3b8082643 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PET-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic PET @base", "from": "system", "setting_id": "Q6wiKjigmzkcMxFz", + "filament_id": "OFQdaVZS", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json index c2ba7dfa97..f122066617 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PETG PRO @Elegoo.json @@ -4,6 +4,7 @@ "name": "Generic PETG PRO @Elegoo", "renamed_from": "Elegoo Generic PETG PRO", "from": "system", + "filament_id": "OFllmFhT", "instantiation": "true", "inherits": "Generic PETG @base", "cool_plate_temp": [ diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json b/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json index 5e5e84e3dd..a57b29cbb6 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PETG-CF @Elegoo Centauri.json @@ -4,6 +4,7 @@ "inherits": "Generic PETG @base", "from": "system", "setting_id": "bWUrg1tIttzhMYlr", + "filament_id": "OFoYSJKi", "instantiation": "true", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json index db84f78382..33561c23bc 100644 --- a/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json +++ b/resources/profiles/Elegoo/filament/Generic/Generic PLA Matte @Elegoo.json @@ -3,6 +3,7 @@ "setting_id": "dH2Yf92iqsOj5XYo", "name": "Generic PLA Matte @Elegoo", "from": "system", + "filament_id": "OFmY0l6t", "instantiation": "true", "inherits": "Generic PLA @base", "cool_plate_temp": [ diff --git a/resources/profiles/Elegoo/filament/fdm_filament_paht.json b/resources/profiles/Elegoo/filament/fdm_filament_paht.json deleted file mode 100644 index 058469ff71..0000000000 --- a/resources/profiles/Elegoo/filament/fdm_filament_paht.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_paht", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PAHT" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "0" - ], - "cool_plate_temp": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "45" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "slow_down_min_speed": [ - "20" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_vendor": [ - "Generic" - ] -} diff --git a/resources/profiles/Elegoo/machine/fdm_elegoo_common.json b/resources/profiles/Elegoo/machine/fdm_elegoo_common.json index fffd18ea44..5bbfacf133 100644 --- a/resources/profiles/Elegoo/machine/fdm_elegoo_common.json +++ b/resources/profiles/Elegoo/machine/fdm_elegoo_common.json @@ -1,9 +1,9 @@ { "type": "machine", "name": "fdm_elegoo_common", + "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", - "inherits": "fdm_machine_common", "gcode_flavor": "marlin", "printer_technology": "FFF", "nozzle_diameter": [ @@ -141,7 +141,6 @@ "thumbnails_format": "PNG", "nozzle_type": "brass", "machine_end_gcode": "G90 ;Absolute positionning\nM83 ; extruder relative mode\nG1 X10 Y{print_bed_max[1]*0.8} Z{min(max_layer_z+100, printable_height)} E-8 F{travel_speed*60} ; Move print head up\nG1 Z{min(max_layer_z+100, printable_height-2)} F600\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\nM106 S0 ; turn off fan\nM84 ;Disable all steppers", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M600", diff --git a/resources/profiles/Elegoo/machine/fdm_machine_common.json b/resources/profiles/Elegoo/machine/fdm_machine_common.json index 249e760920..283197aa4e 100644 --- a/resources/profiles/Elegoo/machine/fdm_machine_common.json +++ b/resources/profiles/Elegoo/machine/fdm_machine_common.json @@ -20,7 +20,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json b/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json index e6a04bb40a..9577a8e2db 100644 --- a/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json +++ b/resources/profiles/Elegoo/process/EOSGIGA/0.30mm Standard @Elegoo Giga 0.6 nozzle.json @@ -1,15 +1,14 @@ { "type": "process", "name": "0.30mm Standard @Elegoo Giga 0.6 nozzle", + "renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle", "inherits": "fdm_process_elegoo_06030", "from": "system", "setting_id": "mMP6cZhv9TYjYlEh", "instantiation": "true", - "renamed_from": "0.30mm Standard @EOS Giga 0.6 nozzle", "default_acceleration": "3000", "filename_format": "EOGiga1_{nozzle_diameter[0]}_{input_filename_base}_{filament_name}_{layer_height}_{print_time}.gcode", "initial_layer_acceleration": "1000", - "is_custom_defined": "0", "make_overhang_printable_angle": "90", "outer_wall_acceleration": "2000", "resolution": "0.05", diff --git a/resources/profiles/Elegoo/process/fdm_process_common.json b/resources/profiles/Elegoo/process/fdm_process_common.json index a2bd0ea5f1..01b285b7f0 100644 --- a/resources/profiles/Elegoo/process/fdm_process_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", @@ -28,7 +27,6 @@ "sparse_infill_line_width": "0.45", "infill_wall_overlap": "15%", "sparse_infill_speed": "50", - "overhang_speed_classic": "1", "interface_shells": "0", "detect_overhang_wall": "0", "reduce_infill_retraction": "1", diff --git a/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json index 30fa79753b..615c0eeccd 100644 --- a/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json +++ b/resources/profiles/Elegoo/process/fdm_process_elegoo_02010.json @@ -24,7 +24,6 @@ "sparse_infill_speed": "100", "inner_wall_speed": "100", "internal_solid_infill_speed": "100", - "is_custom_defined": "0", "outer_wall_speed": "60", "top_surface_speed": "80" } diff --git a/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json b/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json index 2ca6daf45b..1e61b87f49 100644 --- a/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json +++ b/resources/profiles/Elegoo/process/fdm_process_elegoo_common.json @@ -16,7 +16,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "30", diff --git a/resources/profiles/Eryone.json b/resources/profiles/Eryone.json index b3bec6e892..1ee1f88ed8 100644 --- a/resources/profiles/Eryone.json +++ b/resources/profiles/Eryone.json @@ -1,6 +1,6 @@ { "name": "Eryone", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Eryone configurations", "machine_model_list": [ diff --git a/resources/profiles/Eryone/filament/Eryone ABS-CF.json b/resources/profiles/Eryone/filament/Eryone ABS-CF.json index bb976dcd88..a6cc92c15d 100644 --- a/resources/profiles/Eryone/filament/Eryone ABS-CF.json +++ b/resources/profiles/Eryone/filament/Eryone ABS-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "f4VPJtNcZOIIKyDz", - "filament_id": "EFL81", + "filament_id": "OFQ1zgm3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ABS.json b/resources/profiles/Eryone/filament/Eryone ABS.json index c09a35d34e..1d42db775b 100644 --- a/resources/profiles/Eryone/filament/Eryone ABS.json +++ b/resources/profiles/Eryone/filament/Eryone ABS.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "JfQiR5qK9Ue3JDt5", - "filament_id": "EFL91", + "filament_id": "OFOzwywz", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ASA-CF.json b/resources/profiles/Eryone/filament/Eryone ASA-CF.json index afe2d3b33e..c95302c16a 100644 --- a/resources/profiles/Eryone/filament/Eryone ASA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone ASA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "wSiMHM1kTIgJ2gCt", - "filament_id": "EFL82", + "filament_id": "OFwyt1xt", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone ASA.json b/resources/profiles/Eryone/filament/Eryone ASA.json index 88afccbe26..7c2b9d9c91 100644 --- a/resources/profiles/Eryone/filament/Eryone ASA.json +++ b/resources/profiles/Eryone/filament/Eryone ASA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "hu9uQy9zFgemTBjQ", - "filament_id": "EFL92", + "filament_id": "OFVtIasg", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA-CF.json b/resources/profiles/Eryone/filament/Eryone PA-CF.json index abaf44eb7d..d91ea8a490 100644 --- a/resources/profiles/Eryone/filament/Eryone PA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "LIXTvjHAxtaHIO8s", - "filament_id": "EFL72", + "filament_id": "OFp9wdmf", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA-GF.json b/resources/profiles/Eryone/filament/Eryone PA-GF.json index 15ae055010..657d86b291 100644 --- a/resources/profiles/Eryone/filament/Eryone PA-GF.json +++ b/resources/profiles/Eryone/filament/Eryone PA-GF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "4srMOoPcAlQygIY8", - "filament_id": "EFL73", + "filament_id": "OFkq7rPy", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PA.json b/resources/profiles/Eryone/filament/Eryone PA.json index efcbc94393..b03dccd32f 100644 --- a/resources/profiles/Eryone/filament/Eryone PA.json +++ b/resources/profiles/Eryone/filament/Eryone PA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "oqzAdvvf6jdQTb4M", - "filament_id": "EFL71", + "filament_id": "OFS4jbj3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PETG-CF.json b/resources/profiles/Eryone/filament/Eryone PETG-CF.json index 76eca543b5..3dc02ddf00 100644 --- a/resources/profiles/Eryone/filament/Eryone PETG-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "Xp95jFFK5QSP3OoR", - "filament_id": "EFL43", + "filament_id": "OFNstOna", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PETG.json b/resources/profiles/Eryone/filament/Eryone PETG.json index 3f0644565a..ee6b20423a 100644 --- a/resources/profiles/Eryone/filament/Eryone PETG.json +++ b/resources/profiles/Eryone/filament/Eryone PETG.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "rJCPgQiIXRsfQwWY", - "filament_id": "EFL93", + "filament_id": "OF8kJys9", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PLA-CF.json b/resources/profiles/Eryone/filament/Eryone PLA-CF.json index 3e7e8fa3d7..a3186cee9f 100644 --- a/resources/profiles/Eryone/filament/Eryone PLA-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "t726eLsJ87OjqUYk", - "filament_id": "EFL40", + "filament_id": "OFilAA3b", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PLA.json b/resources/profiles/Eryone/filament/Eryone PLA.json index 6da685ff2f..8e23c19ade 100644 --- a/resources/profiles/Eryone/filament/Eryone PLA.json +++ b/resources/profiles/Eryone/filament/Eryone PLA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "nTSleDxF7HWxBeK9", - "filament_id": "EFL90", + "filament_id": "OFmKU2Ha", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PP-CF.json b/resources/profiles/Eryone/filament/Eryone PP-CF.json index e2a9c492cf..1f5e155b55 100644 --- a/resources/profiles/Eryone/filament/Eryone PP-CF.json +++ b/resources/profiles/Eryone/filament/Eryone PP-CF.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "GuuXzP9ILCWG5cxt", - "filament_id": "EFL33", + "filament_id": "OFbh7HcA", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone PP.json b/resources/profiles/Eryone/filament/Eryone PP.json index 835f8fc5a0..abd35e11e3 100644 --- a/resources/profiles/Eryone/filament/Eryone PP.json +++ b/resources/profiles/Eryone/filament/Eryone PP.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "sZF6qOPqqu88Yu5e", - "filament_id": "EFL43", + "filament_id": "OF5oNRED", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone Silk PLA.json b/resources/profiles/Eryone/filament/Eryone Silk PLA.json index 2edfd832c1..40a6bd252b 100644 --- a/resources/profiles/Eryone/filament/Eryone Silk PLA.json +++ b/resources/profiles/Eryone/filament/Eryone Silk PLA.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "S3s3NQAoScvfyHh3", - "filament_id": "EFL941", + "filament_id": "OF7nBAd3", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/filament/Eryone Standard PLA.json b/resources/profiles/Eryone/filament/Eryone Standard PLA.json index 103bb592d5..5b06b12ef6 100644 --- a/resources/profiles/Eryone/filament/Eryone Standard PLA.json +++ b/resources/profiles/Eryone/filament/Eryone Standard PLA.json @@ -90,9 +90,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -165,9 +162,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Eryone/filament/Eryone TPU.json b/resources/profiles/Eryone/filament/Eryone TPU.json index 6bfd555337..c44d357c84 100644 --- a/resources/profiles/Eryone/filament/Eryone TPU.json +++ b/resources/profiles/Eryone/filament/Eryone TPU.json @@ -4,7 +4,7 @@ "inherits": "Eryone Standard PLA", "from": "system", "setting_id": "ci6MWQPZNf09qrOJ", - "filament_id": "EFL95", + "filament_id": "OFhUjPA5", "instantiation": "true", "compatible_printers": [ "Thinker X400 0.4 nozzle" diff --git a/resources/profiles/Eryone/machine/ER20/Eryone ER20.json b/resources/profiles/Eryone/machine/ER20/Eryone ER20.json index 26d223d2f1..c555d904dc 100644 --- a/resources/profiles/Eryone/machine/ER20/Eryone ER20.json +++ b/resources/profiles/Eryone/machine/ER20/Eryone ER20.json @@ -5,6 +5,7 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Eryone ER20", + "default_materials": "Generic PLA @System", "name": "Eryone ER20", "nozzle_diameter": "0.4;0.2;0.5;0.6;0.8", "type": "machine_model" diff --git a/resources/profiles/Eryone/machine/ER20_Klipper/Eryone ER20 Klipper.json b/resources/profiles/Eryone/machine/ER20_Klipper/Eryone ER20 Klipper.json index 2dcf3d7882..11d48a7859 100644 --- a/resources/profiles/Eryone/machine/ER20_Klipper/Eryone ER20 Klipper.json +++ b/resources/profiles/Eryone/machine/ER20_Klipper/Eryone ER20 Klipper.json @@ -6,6 +6,7 @@ "hotend_model": "", "machine_tech": "FFF", "model_id": "Eryone ER20 Klipper", + "default_materials": "Generic PLA @System", "name": "Eryone ER20 Klipper", "nozzle_diameter": "0.4;0.2;0.5;0.6;0.8", "type": "machine_model", diff --git a/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json b/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json index f45febbdbb..20f82b5fa9 100644 --- a/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json +++ b/resources/profiles/Eryone/machine/Thinker X400 0.4 nozzle.json @@ -182,7 +182,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Eryone/machine/Thinker X400.json b/resources/profiles/Eryone/machine/Thinker X400.json index 8293d5693e..66bd0888de 100644 --- a/resources/profiles/Eryone/machine/Thinker X400.json +++ b/resources/profiles/Eryone/machine/Thinker X400.json @@ -8,5 +8,5 @@ "bed_model": "X400_bed.stl", "bed_texture": "Thinker_texture.svg", "hotend_model": "", - "default_materials": "Eryone PLA;Eryone ABS;Eryone ASA;Eryone PETG;Eryone Silk PLA;Eryone TPU;Eryone ABS-CF;Eryone ASA-CF;Eryone PA;Eryone PA-CF;Eryone PA-GF;Eryone PETG-CF;Eryone PLA-CF;Eryone PP;Eryone PP-CF" + "default_materials": "Eryone PLA;Eryone ABS;Eryone ASA;Eryone PETG;Eryone Silk PLA;Eryone TPU;Eryone ABS-CF;Eryone ASA-CF;Eryone PA;Eryone PA-CF;Eryone PA-GF;Eryone PETG-CF;Eryone PLA-CF;Eryone PP;Eryone PP-CF;Eryone PLA @0.2 nozzle" } diff --git a/resources/profiles/Eryone/machine/fdm_machine_common.json b/resources/profiles/Eryone/machine/fdm_machine_common.json index 517cbdd10d..5d0c5e680c 100644 --- a/resources/profiles/Eryone/machine/fdm_machine_common.json +++ b/resources/profiles/Eryone/machine/fdm_machine_common.json @@ -141,7 +141,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_Klipper_common.json b/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_Klipper_common.json index e6cb922e70..82df729a08 100644 --- a/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_Klipper_common.json +++ b/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_Klipper_common.json @@ -115,7 +115,6 @@ "retraction_speed": [ "25" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_common.json b/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_common.json index 6e0d263b6a..3152866ae3 100644 --- a/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_common.json +++ b/resources/profiles/Eryone/machine/fdm_machine_eryone_ER20_common.json @@ -132,7 +132,6 @@ "50" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json index 588628cfab..311167c579 100644 --- a/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json +++ b/resources/profiles/Eryone/process/0.20mm Standard @Thinker X400.json @@ -113,7 +113,6 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Eryone/process/eryone_ER20/0.12mm High Quality @Eryone ER20.json b/resources/profiles/Eryone/process/eryone_ER20/0.12mm High Quality @Eryone ER20.json index bb5638f010..158064d7bb 100644 --- a/resources/profiles/Eryone/process/eryone_ER20/0.12mm High Quality @Eryone ER20.json +++ b/resources/profiles/Eryone/process/eryone_ER20/0.12mm High Quality @Eryone ER20.json @@ -1,12 +1,13 @@ { + "type": "process", + "name": "0.12mm High Quality @Eryone ER20", + "inherits": "fdm_process_ER20_0.12", + "from": "system", + "setting_id": "H7ODK5fAAYDUoeSH", + "instantiation": "true", "compatible_printers": [ "Eryone ER20 0.4 nozzle" ], - "from": "system", - "inherits": "fdm_process_ER20_0.12", - "setting_id": "H7ODK5fAAYDUoeSH", - "instantiation": "true", - "name": "0.12mm High Quality @Eryone ER20", "sparse_infill_pattern": "gyroid", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", @@ -14,7 +15,5 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "type": "process" + "overhang_reverse_threshold": "50%" } diff --git a/resources/profiles/Eryone/process/eryone_ER20/0.16mm Optimal @Eryone ER20.json b/resources/profiles/Eryone/process/eryone_ER20/0.16mm Optimal @Eryone ER20.json index c59e1da21f..413d651249 100644 --- a/resources/profiles/Eryone/process/eryone_ER20/0.16mm Optimal @Eryone ER20.json +++ b/resources/profiles/Eryone/process/eryone_ER20/0.16mm Optimal @Eryone ER20.json @@ -1,12 +1,13 @@ { + "type": "process", + "name": "0.16mm Optimal @Eryone ER20", + "inherits": "fdm_process_ER20_0.16", + "from": "system", + "setting_id": "T7CLbKpkDxOdqBWk", + "instantiation": "true", "compatible_printers": [ "Eryone ER20 0.4 nozzle" ], - "from": "system", - "inherits": "fdm_process_ER20_0.16", - "setting_id": "T7CLbKpkDxOdqBWk", - "instantiation": "true", - "name": "0.16mm Optimal @Eryone ER20", "sparse_infill_pattern": "gyroid", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", @@ -14,7 +15,5 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "type": "process" + "overhang_reverse_threshold": "50%" } diff --git a/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.12mm High Quality @Eryone ER20 Klipper.json b/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.12mm High Quality @Eryone ER20 Klipper.json index bd685a42c6..8fb5c24641 100644 --- a/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.12mm High Quality @Eryone ER20 Klipper.json +++ b/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.12mm High Quality @Eryone ER20 Klipper.json @@ -1,12 +1,13 @@ { + "type": "process", + "name": "0.12mm High Quality @Eryone ER20 Klipper", + "inherits": "fdm_process_ER20_Klipper_0.12", + "from": "system", + "setting_id": "FdNIlqPmjcMxniJL", + "instantiation": "true", "compatible_printers": [ "Eryone ER20 Klipper 0.4 nozzle" ], - "from": "system", - "inherits": "fdm_process_ER20_Klipper_0.12", - "setting_id": "FdNIlqPmjcMxniJL", - "instantiation": "true", - "name": "0.12mm High Quality @Eryone ER20 Klipper", "sparse_infill_pattern": "gyroid", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", @@ -14,7 +15,5 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "type": "process" + "overhang_reverse_threshold": "50%" } diff --git a/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.16mm Optimal @Eryone ER20 Klipper.json b/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.16mm Optimal @Eryone ER20 Klipper.json index 0526d10668..8c3faa69d7 100644 --- a/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.16mm Optimal @Eryone ER20 Klipper.json +++ b/resources/profiles/Eryone/process/eryone_ER20_Klipper/0.16mm Optimal @Eryone ER20 Klipper.json @@ -1,12 +1,13 @@ { + "type": "process", + "name": "0.16mm Optimal @Eryone ER20 Klipper", + "inherits": "fdm_process_ER20_Klipper_0.16", + "from": "system", + "setting_id": "T6D9ljLTeYJNh7LY", + "instantiation": "true", "compatible_printers": [ "Eryone ER20 Klipper 0.4 nozzle" ], - "from": "system", - "inherits": "fdm_process_ER20_Klipper_0.16", - "setting_id": "T6D9ljLTeYJNh7LY", - "instantiation": "true", - "name": "0.16mm Optimal @Eryone ER20 Klipper", "sparse_infill_pattern": "gyroid", "overhang_1_4_speed": "60", "overhang_2_4_speed": "30", @@ -14,7 +15,5 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_internal_only": "0", - "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", - "type": "process" + "overhang_reverse_threshold": "50%" } diff --git a/resources/profiles/Eryone/process/fdm_process_common.json b/resources/profiles/Eryone/process/fdm_process_common.json index 3fd9decf3f..d724d1b629 100644 --- a/resources/profiles/Eryone/process/fdm_process_common.json +++ b/resources/profiles/Eryone/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -78,7 +77,6 @@ "support_object_xy_distance": "2.5", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Eryone/process/fdm_process_eryone_ER20_common.json b/resources/profiles/Eryone/process/fdm_process_eryone_ER20_common.json index c4d744f31e..c628cbd726 100644 --- a/resources/profiles/Eryone/process/fdm_process_eryone_ER20_common.json +++ b/resources/profiles/Eryone/process/fdm_process_eryone_ER20_common.json @@ -5,7 +5,6 @@ "instantiation": "false", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", - "adaptive_layer_height": "0", "alternate_extra_wall": "0", "bottom_shell_layers": "4", "bottom_shell_thickness": "0", @@ -62,7 +61,6 @@ "inner_wall_line_width": "0.45", "inner_wall_speed": "80", "interface_shells": "0", - "internal_bridge_support_thickness": "0.8", "internal_bridge_angle": "0", "internal_bridge_density": "100%", "internal_bridge_flow": "1", @@ -99,7 +97,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "precise_outer_wall": "1", "precise_z_height": "1", "preheat_time": "30", @@ -131,7 +128,6 @@ "single_extruder_multi_material_priming": "1", "single_loop_draft_shield": "0", "skirt_loops": "0", - "smooth_coefficient": "80", "slow_down_layers": "1", "small_perimeter_speed": "50%", "small_perimeter_threshold": "0", diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 8e234dffca..36d0129015 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,6 +1,6 @@ { "name": "FLSun", - "version": "02.04.00.02", + "version": "02.04.00.04", "force_update": "0", "description": "FLSun configurations", "machine_model_list": [ @@ -177,100 +177,100 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "FLSun Generic ABS", - "sub_path": "filament/FLSun Generic ABS.json" + "name": "Generic ABS @FLSun", + "sub_path": "filament/Generic ABS @FLSun.json" }, { - "name": "FLSun Generic ASA", - "sub_path": "filament/FLSun Generic ASA.json" + "name": "Generic ASA @FLSun", + "sub_path": "filament/Generic ASA @FLSun.json" }, { - "name": "FLSun Generic PA", - "sub_path": "filament/FLSun Generic PA.json" + "name": "Generic PA @FLSun", + "sub_path": "filament/Generic PA @FLSun.json" }, { - "name": "FLSun Generic PA-CF", - "sub_path": "filament/FLSun Generic PA-CF.json" + "name": "Generic PA-CF @FLSun", + "sub_path": "filament/Generic PA-CF @FLSun.json" }, { - "name": "FLSun Generic PC", - "sub_path": "filament/FLSun Generic PC.json" + "name": "Generic PC @FLSun", + "sub_path": "filament/Generic PC @FLSun.json" }, { - "name": "FLSun Generic PETG", - "sub_path": "filament/FLSun Generic PETG.json" + "name": "Generic PETG @FLSun", + "sub_path": "filament/Generic PETG @FLSun.json" }, { - "name": "FLSun Generic PLA", - "sub_path": "filament/FLSun Generic PLA.json" + "name": "Generic PLA @FLSun", + "sub_path": "filament/Generic PLA @FLSun.json" }, { - "name": "FLSun Generic PLA-CF", - "sub_path": "filament/FLSun Generic PLA-CF.json" + "name": "Generic PLA-CF @FLSun", + "sub_path": "filament/Generic PLA-CF @FLSun.json" }, { - "name": "FLSun Generic PVA", - "sub_path": "filament/FLSun Generic PVA.json" + "name": "Generic PVA @FLSun", + "sub_path": "filament/Generic PVA @FLSun.json" }, { - "name": "FLSun Generic TPU", - "sub_path": "filament/FLSun Generic TPU.json" + "name": "Generic TPU @FLSun", + "sub_path": "filament/Generic TPU @FLSun.json" }, { - "name": "FLSun S1 ABS", - "sub_path": "filament/FLSun S1 ABS.json" + "name": "Generic ABS @FLSun S1", + "sub_path": "filament/Generic ABS @FLSun S1.json" }, { - "name": "FLSun T1 ABS", - "sub_path": "filament/FLSun T1 ABS.json" + "name": "Generic ABS @FLSun T1", + "sub_path": "filament/Generic ABS @FLSun T1.json" }, { - "name": "FLSun S1 ASA", - "sub_path": "filament/FLSun S1 ASA.json" + "name": "Generic ASA @FLSun S1", + "sub_path": "filament/Generic ASA @FLSun S1.json" }, { - "name": "FLSun T1 ASA", - "sub_path": "filament/FLSun T1 ASA.json" + "name": "Generic ASA @FLSun T1", + "sub_path": "filament/Generic ASA @FLSun T1.json" }, { - "name": "FLSun S1 PETG", - "sub_path": "filament/FLSun S1 PETG.json" + "name": "Generic PETG @FLSun S1", + "sub_path": "filament/Generic PETG @FLSun S1.json" }, { - "name": "FLSun T1 PETG", - "sub_path": "filament/FLSun T1 PETG.json" + "name": "Generic PETG @FLSun T1", + "sub_path": "filament/Generic PETG @FLSun T1.json" }, { - "name": "FLSun S1 PLA Generic", - "sub_path": "filament/FLSun S1 PLA Generic.json" + "name": "Generic PLA @FLSun S1", + "sub_path": "filament/Generic PLA @FLSun S1.json" }, { - "name": "FLSun S1 PLA High Speed", - "sub_path": "filament/FLSun S1 PLA High Speed.json" + "name": "Generic PLA @FLSun T1", + "sub_path": "filament/Generic PLA @FLSun T1.json" }, { - "name": "FLSun S1 PLA Silk", - "sub_path": "filament/FLSun S1 PLA Silk.json" + "name": "Generic TPU @FLSun S1", + "sub_path": "filament/Generic TPU @FLSun S1.json" }, { - "name": "FLSun T1 PLA Generic", - "sub_path": "filament/FLSun T1 PLA Generic.json" + "name": "Generic TPU @FLSun T1", + "sub_path": "filament/Generic TPU @FLSun T1.json" }, { - "name": "FLSun T1 PLA High Speed", - "sub_path": "filament/FLSun T1 PLA High Speed.json" + "name": "Generic PLA High Speed @FLSun S1", + "sub_path": "filament/Generic PLA High Speed @FLSun S1.json" }, { - "name": "FLSun T1 PLA Silk", - "sub_path": "filament/FLSun T1 PLA Silk.json" + "name": "Generic PLA High Speed @FLSun T1", + "sub_path": "filament/Generic PLA High Speed @FLSun T1.json" }, { - "name": "FLSun S1 TPU", - "sub_path": "filament/FLSun S1 TPU.json" + "name": "Generic PLA Silk @FLSun S1", + "sub_path": "filament/Generic PLA Silk @FLSun S1.json" }, { - "name": "FLSun T1 TPU", - "sub_path": "filament/FLSun T1 TPU.json" + "name": "Generic PLA Silk @FLSun T1", + "sub_path": "filament/Generic PLA Silk @FLSun T1.json" } ], "machine_list": [ diff --git a/resources/profiles/FLSun/filament/FLSun Generic ABS.json b/resources/profiles/FLSun/filament/FLSun Generic ABS.json deleted file mode 100644 index 82d91d891c..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic ABS.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "2f9nYaR0PUMkGvDD", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic ASA.json b/resources/profiles/FLSun/filament/FLSun Generic ASA.json deleted file mode 100644 index 650953c7b0..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic ASA.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "9GPCRihSQTBRxkm3", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json deleted file mode 100644 index 0b3441d866..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PA-CF.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "2JOA0YeYZHj0lFmA", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PA.json b/resources/profiles/FLSun/filament/FLSun Generic PA.json deleted file mode 100644 index e24fbbd966..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PA.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ek14AgskfJXeZ84u", - "filament_id": "GFN99", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PC.json b/resources/profiles/FLSun/filament/FLSun Generic PC.json deleted file mode 100644 index 2d03d67063..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PC.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "wluYSRtaCqajFCYT", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PETG.json b/resources/profiles/FLSun/filament/FLSun Generic PETG.json deleted file mode 100644 index 6b81b49092..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PETG.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "FCjlzoLFYn3IVxxD", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json deleted file mode 100644 index 690c4427f9..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-CF.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "FEdplifUKOSUA4XX", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA.json b/resources/profiles/FLSun/filament/FLSun Generic PLA.json deleted file mode 100644 index 85233e1285..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ltWBfkc84nszWS19", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic PVA.json b/resources/profiles/FLSun/filament/FLSun Generic PVA.json deleted file mode 100644 index 106aa001e0..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PVA.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "IohayLPyRIsZJ0GY", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun Generic TPU.json b/resources/profiles/FLSun/filament/FLSun Generic TPU.json deleted file mode 100644 index 60b05b8134..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic TPU.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "FLSun Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "hewisceC8FmSwzF4", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "FLSun Q5 0.4 nozzle", - "FLSun QQ-S Pro 0.4 nozzle", - "FLSun Super Racer 0.4 nozzle", - "FLSun V400 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 ABS.json b/resources/profiles/FLSun/filament/FLSun S1 ABS.json deleted file mode 100644 index d9a3922199..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 ABS.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 ABS", - "inherits": "FLSun Generic ABS", - "from": "system", - "setting_id": "tvpZ28Oe4Al7hlgj", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": "0.95", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "30" - ], - "temperature_vitrification": [ - "100" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 ASA.json b/resources/profiles/FLSun/filament/FLSun S1 ASA.json deleted file mode 100644 index a82c9179a4..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 ASA.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 ASA", - "inherits": "FLSun Generic ASA", - "from": "system", - "setting_id": "C5oyaWw3YVEz0CgE", - "filament_id": "GFB98", - "instantiation": "true", - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "35" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": "0.95", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_min_speed": [ - "80" - ], - "temperature_vitrification": [ - "100" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PETG.json b/resources/profiles/FLSun/filament/FLSun S1 PETG.json deleted file mode 100644 index 3b477c6335..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 PETG.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 PETG", - "inherits": "FLSun Generic PETG", - "from": "system", - "setting_id": "Ac6q0FtMFMLesFdU", - "filament_id": "GFG99", - "instantiation": "true", - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "50" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_min_speed": [ - "30" - ], - "temperature_vitrification": [ - "70" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json deleted file mode 100644 index f6324b0bc3..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 PLA Generic", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "z0Y9rQVZairHqwbi", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.32" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json deleted file mode 100644 index 4cb721859e..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 PLA High Speed", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "v2clpNXXo8m6dV33", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "110" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json deleted file mode 100644 index af4d4b9379..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 PLA Silk", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "164Bn4YchxJAaLsa", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.32" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun S1 TPU.json b/resources/profiles/FLSun/filament/FLSun S1 TPU.json deleted file mode 100644 index 7a02ed84cf..0000000000 --- a/resources/profiles/FLSun/filament/FLSun S1 TPU.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "filament", - "name": "FLSun S1 TPU", - "inherits": "FLSun Generic TPU", - "from": "system", - "setting_id": "yzPvNqIo7mfWAwNS", - "filament_id": "GFU99", - "instantiation": "true", - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_density": [ - "1.22" - ], - "filament_flow_ratio": "1", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "35" - ], - "hot_plate_temp_initial_layer": [ - "35" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "30" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 ABS.json b/resources/profiles/FLSun/filament/FLSun T1 ABS.json deleted file mode 100644 index e7d8bea77a..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 ABS.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 ABS", - "inherits": "FLSun Generic ABS", - "from": "system", - "setting_id": "GP8VqRfidKOdj0ZJ", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": "0.95", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "30" - ], - "temperature_vitrification": [ - "100" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 ASA.json b/resources/profiles/FLSun/filament/FLSun T1 ASA.json deleted file mode 100644 index c34c34a213..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 ASA.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 ASA", - "inherits": "FLSun Generic ASA", - "from": "system", - "setting_id": "YmJbWfCQpNk9nxB7", - "filament_id": "GFB98", - "instantiation": "true", - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "35" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": "0.95", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "90" - ], - "hot_plate_temp_initial_layer": [ - "90" - ], - "nozzle_temperature": [ - "280" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_min_speed": [ - "80" - ], - "temperature_vitrification": [ - "100" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PETG.json b/resources/profiles/FLSun/filament/FLSun T1 PETG.json deleted file mode 100644 index 9b753af05b..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 PETG.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 PETG", - "inherits": "FLSun Generic PETG", - "from": "system", - "setting_id": "A2aA7xcmqgz8ERyY", - "filament_id": "GFG99", - "instantiation": "true", - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "50" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "2" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "2" - ], - "slow_down_min_speed": [ - "30" - ], - "temperature_vitrification": [ - "70" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json deleted file mode 100644 index e266687037..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 PLA Generic", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "aUMHmlsPMYDicnPp", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.32" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json deleted file mode 100644 index 95b2ba75a5..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 PLA High Speed", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "E4lpSLLlAxUW04ik", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json deleted file mode 100644 index 04c82ce071..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 PLA Silk", - "inherits": "FLSun Generic PLA", - "from": "system", - "setting_id": "gElUb4GnCoEfVlEd", - "filament_id": "GFL99", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "1.32" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "overhang_fan_speed": [ - "35" - ], - "slow_down_layer_time": [ - "1" - ], - "slow_down_min_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/FLSun T1 TPU.json b/resources/profiles/FLSun/filament/FLSun T1 TPU.json deleted file mode 100644 index feb8326a22..0000000000 --- a/resources/profiles/FLSun/filament/FLSun T1 TPU.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "filament", - "name": "FLSun T1 TPU", - "inherits": "FLSun Generic TPU", - "from": "system", - "setting_id": "34Ux18VB4d6R6G40", - "filament_id": "GFU99", - "instantiation": "true", - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_density": [ - "1.22" - ], - "filament_flow_ratio": "1", - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_cost": [ - "0" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "35" - ], - "hot_plate_temp_initial_layer": [ - "35" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "30" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "dont_slow_down_outer_wall": [ - "1" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} diff --git a/resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json new file mode 100644 index 0000000000..3a57d47404 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun S1.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic ABS @FLSun S1", + "inherits": "Generic ABS @FLSun", + "renamed_from": "FLSun S1 ABS", + "from": "system", + "setting_id": "a7U3u888FlJ6CSFb", + "instantiation": "true", + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": "0.95", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "30" + ], + "temperature_vitrification": [ + "100" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json new file mode 100644 index 0000000000..36c684cdc6 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun T1.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic ABS @FLSun T1", + "inherits": "Generic ABS @FLSun", + "renamed_from": "FLSun T1 ABS", + "from": "system", + "setting_id": "j185WWfVulPxWJvQ", + "instantiation": "true", + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": "0.95", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "30" + ], + "temperature_vitrification": [ + "100" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic ABS @FLSun.json b/resources/profiles/FLSun/filament/Generic ABS @FLSun.json new file mode 100644 index 0000000000..2daf007fe9 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ABS @FLSun.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ABS @FLSun", + "inherits": "fdm_filament_abs", + "renamed_from": "FLSun Generic ABS", + "from": "system", + "setting_id": "1lPapSrZbKMLBx6k", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json new file mode 100644 index 0000000000..d605ac5519 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun S1.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic ASA @FLSun S1", + "inherits": "Generic ASA @FLSun", + "renamed_from": "FLSun S1 ASA", + "from": "system", + "setting_id": "qJeJII6CgHuaC4Iz", + "instantiation": "true", + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "35" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": "0.95", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json new file mode 100644 index 0000000000..c27f9e34dd --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun T1.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic ASA @FLSun T1", + "inherits": "Generic ASA @FLSun", + "renamed_from": "FLSun T1 ASA", + "from": "system", + "setting_id": "kj4PPnvuvvGDrDwA", + "instantiation": "true", + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "35" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": "0.95", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic ASA @FLSun.json b/resources/profiles/FLSun/filament/Generic ASA @FLSun.json new file mode 100644 index 0000000000..e86f82f441 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic ASA @FLSun.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ASA @FLSun", + "inherits": "fdm_filament_asa", + "renamed_from": "FLSun Generic ASA", + "from": "system", + "setting_id": "22OH64Yfg5sdyEmz", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PA @FLSun.json b/resources/profiles/FLSun/filament/Generic PA @FLSun.json new file mode 100644 index 0000000000..49fe8c01fc --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PA @FLSun.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PA @FLSun", + "inherits": "fdm_filament_pa", + "renamed_from": "FLSun Generic PA", + "from": "system", + "setting_id": "hlHGTLqHjaRfMkqC", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json b/resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json new file mode 100644 index 0000000000..b6dc311dcf --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PA-CF @FLSun.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PA-CF @FLSun", + "inherits": "fdm_filament_pa", + "renamed_from": "FLSun Generic PA-CF", + "from": "system", + "setting_id": "xiLUY07SM81i1pPs", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PC @FLSun.json b/resources/profiles/FLSun/filament/Generic PC @FLSun.json new file mode 100644 index 0000000000..e4d81857d3 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PC @FLSun.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @FLSun", + "inherits": "fdm_filament_pc", + "renamed_from": "FLSun Generic PC", + "from": "system", + "setting_id": "Ok08F2LxNjxor6ph", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json new file mode 100644 index 0000000000..02506525dd --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun S1.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @FLSun S1", + "inherits": "Generic PETG @FLSun", + "renamed_from": "FLSun S1 PETG", + "from": "system", + "setting_id": "LxDenrdsmz0QjMDE", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "50" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "30" + ], + "temperature_vitrification": [ + "70" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json new file mode 100644 index 0000000000..64651bea1d --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun T1.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @FLSun T1", + "inherits": "Generic PETG @FLSun", + "renamed_from": "FLSun T1 PETG", + "from": "system", + "setting_id": "n9wpUe32lTtq2iSS", + "instantiation": "true", + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "50" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "2" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "2" + ], + "slow_down_min_speed": [ + "30" + ], + "temperature_vitrification": [ + "70" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PETG @FLSun.json b/resources/profiles/FLSun/filament/Generic PETG @FLSun.json new file mode 100644 index 0000000000..84eaee1c7c --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PETG @FLSun.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @FLSun", + "inherits": "fdm_filament_pet", + "renamed_from": "FLSun Generic PETG", + "from": "system", + "setting_id": "pWuJLjWhYMutD92n", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json new file mode 100644 index 0000000000..5674ba8c27 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun S1.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PLA @FLSun S1", + "inherits": "Generic PLA @FLSun", + "renamed_from": "FLSun S1 PLA Generic", + "from": "system", + "setting_id": "4f9vGTYsHDbZoVjs", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.32" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json new file mode 100644 index 0000000000..93b9ac08d4 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun T1.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PLA @FLSun T1", + "inherits": "Generic PLA @FLSun", + "renamed_from": "FLSun T1 PLA Generic", + "from": "system", + "setting_id": "5aJUZ6r6jtnvck19", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.32" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA @FLSun.json b/resources/profiles/FLSun/filament/Generic PLA @FLSun.json new file mode 100644 index 0000000000..a4f8655ff9 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA @FLSun.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA @FLSun", + "inherits": "fdm_filament_pla", + "renamed_from": "FLSun Generic PLA", + "from": "system", + "setting_id": "JcpwaJCVC9MoJrPB", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json new file mode 100644 index 0000000000..af00b2272d --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun S1.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @FLSun S1", + "inherits": "Generic PLA High Speed @System", + "renamed_from": "FLSun S1 PLA High Speed", + "from": "system", + "setting_id": "ONz6C8a3AMGWxqdK", + "instantiation": "true", + "filament_multitool_ramming_flow": [ + "10" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "110" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json new file mode 100644 index 0000000000..7468aadd31 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA High Speed @FLSun T1.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @FLSun T1", + "inherits": "Generic PLA High Speed @System", + "renamed_from": "FLSun T1 PLA High Speed", + "from": "system", + "setting_id": "en1l0jgFX97t6qUi", + "instantiation": "true", + "filament_multitool_ramming_flow": [ + "10" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "60" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json new file mode 100644 index 0000000000..0ec0d28da4 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun S1.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @FLSun S1", + "inherits": "Generic PLA Silk @System", + "renamed_from": "FLSun S1 PLA Silk", + "from": "system", + "setting_id": "NTJw0fbcn3JoOr0R", + "instantiation": "true", + "filament_retraction_length": [ + "nil" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.32" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json new file mode 100644 index 0000000000..891697aa01 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA Silk @FLSun T1.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @FLSun T1", + "inherits": "Generic PLA Silk @System", + "renamed_from": "FLSun T1 PLA Silk", + "from": "system", + "setting_id": "y2p7TTGI8XWIeiQY", + "instantiation": "true", + "filament_retraction_length": [ + "nil" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "1.32" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "overhang_fan_speed": [ + "35" + ], + "slow_down_layer_time": [ + "1" + ], + "slow_down_min_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json b/resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json new file mode 100644 index 0000000000..87b301513e --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PLA-CF @FLSun.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @FLSun", + "inherits": "fdm_filament_pla", + "renamed_from": "FLSun Generic PLA-CF", + "from": "system", + "setting_id": "teBJEScAMecyn3JU", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic PVA @FLSun.json b/resources/profiles/FLSun/filament/Generic PVA @FLSun.json new file mode 100644 index 0000000000..9279ece682 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic PVA @FLSun.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PVA @FLSun", + "inherits": "fdm_filament_pva", + "renamed_from": "FLSun Generic PVA", + "from": "system", + "setting_id": "hyVWJBubfQl497iO", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json new file mode 100644 index 0000000000..76e27d9be3 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun S1.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "Generic TPU @FLSun S1", + "inherits": "Generic TPU @FLSun", + "renamed_from": "FLSun S1 TPU", + "from": "system", + "setting_id": "xDnQih17nXmGPoPc", + "instantiation": "true", + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_density": [ + "1.22" + ], + "filament_flow_ratio": "1", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "30" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json new file mode 100644 index 0000000000..25f60f10e1 --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun T1.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "Generic TPU @FLSun T1", + "inherits": "Generic TPU @FLSun", + "renamed_from": "FLSun T1 TPU", + "from": "system", + "setting_id": "TEakmydLXxrHti3G", + "instantiation": "true", + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_density": [ + "1.22" + ], + "filament_flow_ratio": "1", + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_cost": [ + "0" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "35" + ], + "hot_plate_temp_initial_layer": [ + "35" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "30" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "dont_slow_down_outer_wall": [ + "1" + ], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/Generic TPU @FLSun.json b/resources/profiles/FLSun/filament/Generic TPU @FLSun.json new file mode 100644 index 0000000000..70d1b8c42a --- /dev/null +++ b/resources/profiles/FLSun/filament/Generic TPU @FLSun.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic TPU @FLSun", + "inherits": "fdm_filament_tpu", + "renamed_from": "FLSun Generic TPU", + "from": "system", + "setting_id": "gJ3UZr4n4K8DPdBz", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "FLSun Q5 0.4 nozzle", + "FLSun QQ-S Pro 0.4 nozzle", + "FLSun Super Racer 0.4 nozzle", + "FLSun V400 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json index 66fb95ccc6..3642cce4fb 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json @@ -180,7 +180,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM107\nG28 ;Home\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\n\nG92 E0\nG1 X-98 Y0 Z0.2 F4000 ; move to arc start\nG3 X0 Y-98 I98 Z0.2 E40 F400 ; lay arc stripe 90deg\nG0 Z1 \nG92 E0.0\n", "machine_end_gcode": "M107\nM104 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\n;M84\nM18 S180 ;disable motors after 180s\n", diff --git a/resources/profiles/FLSun/machine/FLSun Q5.json b/resources/profiles/FLSun/machine/FLSun Q5.json index f7825cb4fa..001c4cb149 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5.json +++ b/resources/profiles/FLSun/machine/FLSun Q5.json @@ -8,5 +8,5 @@ "bed_model": "flsun_q5_buildplate_model.stl", "bed_texture": "flsun_q5_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json index ef1dd22c15..e2444d404c 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json @@ -180,7 +180,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "machine_start_gcode": ";STARTGCODE\nM117 Initializing\n; Set coordinate modes\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; Reset speed and extrusion rates\nM200 D0 ; disable volumetric E\nM220 S100 ; reset speed\n; Set initial warmup temps\nM117 Nozzle preheat\nM104 S100 ; preheat extruder to no ooze temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S40 P10 ; Bip\n; Home\nM117 Homing\nG28 ; home all with default mesh bed level\n; For ABL users put G29 for a leveling request\n; Final warmup routine\nM117 Final warmup\nM104 S[nozzle_temperature_initial_layer] ; set extruder final temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder final temp\nM190 S[bed_temperature_initial_layer_single] ; wait for bed final temp\nM300 S440 P200; 1st beep for printer ready and allow some time to clean nozzle\nM300 S0 P250; wait between dual beep\nM300 S440 P200; 2nd beep for printer ready\nG4 S10; wait to clean the nozzle\nM300 S440 P200; 3rd beep for ready to start printing\n; Prime line routine\nM117 Printing prime line\n;M900 K0; Disable Linear Advance (Marlin) for prime line\nG92 E0.0; reset extrusion distance\nG1 X-54.672 Y-95.203 Z0.3 F4000; go outside print area\nG92 E0.0; reset extrusion distance\nG1 E2 F1000 ; de-retract and push ooze\nG3 X38.904 Y-102.668 I54.672 J95.105 E20.999\nG3 X54.671 Y-95.203 I-38.815 J102.373 E5.45800\nG92 E0.0\nG1 E-5 F3000 ; retract 5mm\nG1 X52.931 Y-96.185 F1000 ; wipe\nG1 X50.985 Y-97.231 F1000 ; wipe\nG1 X49.018 Y-98.238 F1000 ; wipe\nG1 X0 Y-109.798 F1000\nG1 E4.8 F1500; de-retract\nG92 E0.0 ; reset extrusion distance\n; Final print adjustments\nM117 Preparing to print\n;M82 ; extruder absolute mode\nM221 S{if layer_height<0.075}100{else}95{endif}\nM300 S40 P10 ; chirp\nM117 Print [input_filename_base]; Display: Printing started...", "machine_end_gcode": "; printing object ENDGCODE\nG92 E0.0 ; prepare to retract\nG1 E-6 F3000; retract to avoid stringing\n; Anti-stringing end wiggle\n{if layer_z < max_print_height}G1 Z{min(layer_z+100, max_print_height)}{endif} F4000 ; Move print head up\nG1 X0 Y120 F3000 ; present print\n; Reset print setting overrides\nG92 E0\nM200 D0 ; disable volumetric e\nM220 S100 ; reset speed factor to 100%\nM221 S100 ; reset extruder factor to 100%\n;M900 K0 ; reset linear acceleration(Marlin)\n; Shut down printer\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM18 S180 ;disable motors after 180s\nM300 S40 P10 ; Bip\nM117 Print finish.", diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json index 3b3cf86676..f360405471 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro.json @@ -8,5 +8,5 @@ "bed_model": "flsun_qqspro_buildplate_model.stl", "bed_texture": "flsun_qqspro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun S1.json b/resources/profiles/FLSun/machine/FLSun S1.json index 5b730f3c3b..eac676cd09 100644 --- a/resources/profiles/FLSun/machine/FLSun S1.json +++ b/resources/profiles/FLSun/machine/FLSun S1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_s1_buildplate_model.stl", "bed_texture": "FLSun_S1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun S1 PLA High Speed;FLSun S1 PLA Silk;FLSun S1 PLA Generic;FLSun S1 PETG;FLSun S1 ASA;FLSun S1 TPU;FLSun S1 ABS" + "default_materials": "Generic PLA High Speed @FLSun S1;Generic PLA Silk @FLSun S1;Generic PLA @FLSun S1;Generic PETG @FLSun S1;Generic ASA @FLSun S1;Generic TPU @FLSun S1;Generic ABS @FLSun S1" } diff --git a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json index b6fac6caa7..78731a1481 100644 --- a/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun SR 0.4 nozzle.json @@ -13,7 +13,7 @@ ], "nozzle_type": "brass", "default_filament_profile": [ - "FLSun Generic PLA" + "Generic PLA @FLSun" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/FLSun/machine/FLSun SR.json b/resources/profiles/FLSun/machine/FLSun SR.json index 54e40302e2..6a26773ece 100644 --- a/resources/profiles/FLSun/machine/FLSun SR.json +++ b/resources/profiles/FLSun/machine/FLSun SR.json @@ -8,5 +8,5 @@ "bed_model": "flsun_SR_buildplate_model.stl", "bed_texture": "flsun_SR_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/FLSun T1.json b/resources/profiles/FLSun/machine/FLSun T1.json index 8fda638772..25a788a60e 100644 --- a/resources/profiles/FLSun/machine/FLSun T1.json +++ b/resources/profiles/FLSun/machine/FLSun T1.json @@ -8,5 +8,5 @@ "bed_model": "flsun_T1_buildplate_model.stl", "bed_texture": "FLSun_T1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun T1 PLA High Speed;FLSun T1 PLA Silk;FLSun T1 PLA Generic;FLSun T1 PETG;FLSun T1 ASA;FLSun T1 TPU;FLSun T1 ABS" + "default_materials": "Generic PLA High Speed @FLSun T1;Generic PLA Silk @FLSun T1;Generic PLA @FLSun T1;Generic PETG @FLSun T1;Generic ASA @FLSun T1;Generic TPU @FLSun T1;Generic ABS @FLSun T1" } diff --git a/resources/profiles/FLSun/machine/FLSun V400.json b/resources/profiles/FLSun/machine/FLSun V400.json index 605e51e229..33fc9981ed 100644 --- a/resources/profiles/FLSun/machine/FLSun V400.json +++ b/resources/profiles/FLSun/machine/FLSun V400.json @@ -8,5 +8,5 @@ "bed_model": "flsun_v400_buildplate_model.stl", "bed_texture": "flsun_v400_buildplate_texture.svg", "hotend_model": "", - "default_materials": "FLSun Generic ABS;FLSun Generic PLA;FLSun Generic PLA-CF;FLSun Generic PETG;FLSun Generic TPU;FLSun Generic ASA;FLSun Generic PC;FLSun Generic PVA;FLSun Generic PA;FLSun Generic PA-CF" + "default_materials": "Generic ABS @FLSun;Generic PLA @FLSun;Generic PLA-CF @FLSun;Generic PETG @FLSun;Generic TPU @FLSun;Generic ASA @FLSun;Generic PC @FLSun;Generic PVA @FLSun;Generic PA @FLSun;Generic PA-CF @FLSun" } diff --git a/resources/profiles/FLSun/machine/fdm_machine_common.json b/resources/profiles/FLSun/machine/fdm_machine_common.json index df5041bb50..11f5a9e934 100644 --- a/resources/profiles/FLSun/machine/fdm_machine_common.json +++ b/resources/profiles/FLSun/machine/fdm_machine_common.json @@ -126,7 +126,6 @@ "deretraction_speed": [ "30" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json index 6279861202..0b5512970a 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun Q5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "pIcVuwwQ8EWmPKgZ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.08", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json index 391b7743a1..90320d5dc3 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun QQSPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Ypz6DmDfVK0nHsGe", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.08", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json index 03a66178ad..9b4585d43c 100644 --- a/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.08mm Fine @FLSun SR.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "WMx2mtWIuLTNAPHS", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.08", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json index 5c9f752ee6..a28bf094f4 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun Q5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "TZdqXwp7bC2m9tpO", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json index 2d5e2ab82b..45f0558cae 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun QQSPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "HVdXArEX5vgTZkQK", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json index 6b33217ea2..df47580b4d 100644 --- a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun SR.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "tqesgSzTbrfXG1mY", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json index d9c7f3799b..f6796345a4 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun Q5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "CUzDbhgZMATkwFSg", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json index a4ec969711..692b394d94 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun QQSPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "FV3PZ6zjZP5chJlp", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json index 478126620d..41627d8ab0 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun SR.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "EzioqGPSbnBNftNw", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json index 66b5bc2fe6..f6a220ad6c 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun Q5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "PjpsLsUYSt1jfY7G", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json index 92ef6cc2e4..578adb54ee 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun QQSPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "9mHQwwo6UoNaD07z", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json index 3ab6730d9c..db0a84e5f7 100644 --- a/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun SR.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ehSWBo2Q9G7QS3Wt", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.24", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json index 2c2f123e71..c729094bb6 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun Q5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "iEXqwmSaxdLWpN8K", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json index e1e50c074e..356c2830c9 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun QQSPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fJPwsjRdFJRka84X", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json index 1c1917adc2..387fe3edb3 100644 --- a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun SR.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "kOtY4iPbqQlkQPef", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/FLSun/process/fdm_process_common.json b/resources/profiles/FLSun/process/fdm_process_common.json index 8371968b2e..47666d8d16 100644 --- a/resources/profiles/FLSun/process/fdm_process_common.json +++ b/resources/profiles/FLSun/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -78,7 +77,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 661d171771..5bccaf9dfb 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.04", + "version": "02.04.00.08", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -511,6 +511,22 @@ "name": "0.42mm Draft @FF AD5X 0.6 nozzle", "sub_path": "process/0.42mm Draft @FF AD5X 0.6 nozzle.json" }, + { + "name": "0.08mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.08mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.10mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.10mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.12mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.12mm Standard @FF C5 0.25 nozzle.json" + }, + { + "name": "0.14mm Standard @FF C5 0.25 nozzle", + "sub_path": "process/0.14mm Standard @FF C5 0.25 nozzle.json" + }, { "name": "0.24mm Fine @FF AD5X 0.8 nozzle", "sub_path": "process/0.24mm Fine @FF AD5X 0.8 nozzle.json" @@ -550,53 +566,53 @@ "sub_path": "filament/Flashforge/Flashforge ABS @FF AD3.json" }, { - "name": "Flashforge Generic ABS", - "sub_path": "filament/Flashforge Generic ABS.json" + "name": "Generic ABS @Flashforge", + "sub_path": "filament/Generic ABS @Flashforge.json" }, { - "name": "Flashforge Generic ASA", - "sub_path": "filament/Flashforge Generic ASA.json" - }, - { - "name": "Flashforge Generic PETG", - "sub_path": "filament/Flashforge Generic PETG.json" - }, - { - "name": "Flashforge Generic PETG-CF10", - "sub_path": "filament/Flashforge Generic PETG-CF10.json" + "name": "Generic ASA @Flashforge", + "sub_path": "filament/Generic ASA @Flashforge.json" }, { "name": "Flashforge PETG", "sub_path": "filament/Flashforge/Flashforge PETG @FF AD3.json" }, + { + "name": "Generic PETG @Flashforge", + "sub_path": "filament/Generic PETG @Flashforge.json" + }, { "name": "Generic PETG @Flashforge Artemis", "sub_path": "filament/Flashforge Generic PETG @Flashforge Artemis.json" }, + { + "name": "Generic PETG-CF10 @Flashforge", + "sub_path": "filament/Generic PETG-CF10 @Flashforge.json" + }, { "name": "SUNLU PETG @base", "sub_path": "filament/SUNLU/SUNLU PETG @base.json" }, - { - "name": "Flashforge Generic HS PLA", - "sub_path": "filament/Flashforge Generic HS PLA.json" - }, - { - "name": "Flashforge Generic PLA", - "sub_path": "filament/Flashforge Generic PLA.json" - }, - { - "name": "Flashforge Generic PLA-CF10", - "sub_path": "filament/Flashforge Generic PLA-CF10.json" - }, - { - "name": "Flashforge Generic PLA-Silk", - "sub_path": "filament/Flashforge Generic PLA-Silk.json" - }, { "name": "Flashforge PLA", "sub_path": "filament/Flashforge/Flashforge PLA @FF AD3.json" }, + { + "name": "Generic HS PLA @Flashforge", + "sub_path": "filament/Generic HS PLA @Flashforge.json" + }, + { + "name": "Generic PLA @Flashforge", + "sub_path": "filament/Generic PLA @Flashforge.json" + }, + { + "name": "Generic PLA-CF10 @Flashforge", + "sub_path": "filament/Generic PLA-CF10 @Flashforge.json" + }, + { + "name": "Generic PLA-Silk @Flashforge", + "sub_path": "filament/Generic PLA-Silk @Flashforge.json" + }, { "name": "SUNLU PLA Marble @base", "sub_path": "filament/SUNLU/SUNLU PLA Marble @base.json" @@ -622,8 +638,8 @@ "sub_path": "filament/SUNLU/SUNLU Wood PLA @base.json" }, { - "name": "Flashforge Generic TPU", - "sub_path": "filament/Flashforge Generic TPU.json" + "name": "Generic TPU @Flashforge", + "sub_path": "filament/Generic TPU @Flashforge.json" }, { "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", @@ -690,33 +706,33 @@ "sub_path": "filament/Flashforge ASA-CF @FF G4P.json" }, { - "name": "Flashforge Generic ABS @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Flashforge Generic ABS @G3U", - "sub_path": "filament/Flashforge Generic ABS @G3U.json" - }, - { - "name": "Flashforge Generic ABS @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json" - }, - { - "name": "Flashforge Generic ASA @G3U", - "sub_path": "filament/Flashforge Generic ASA @G3U.json" - }, - { - "name": "Flashforge Generic HIPS", - "sub_path": "filament/Flashforge Generic HIPS.json" - }, - { - "name": "Flashforge Generic HIPS @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json" + "name": "Generic ABS @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic ABS @FF AD5M 0.25 Nozzle.json" }, { "name": "Generic ABS @Flashforge AD4", "sub_path": "filament/Generic ABS @Flashforge AD4.json" }, + { + "name": "Generic ABS @Flashforge G3U", + "sub_path": "filament/Generic ABS @Flashforge G3U.json" + }, + { + "name": "Generic ABS @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic ASA @Flashforge G3U", + "sub_path": "filament/Generic ASA @Flashforge G3U.json" + }, + { + "name": "Generic HIPS @Flashforge", + "sub_path": "filament/Generic HIPS @Flashforge.json" + }, + { + "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json" + }, { "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json" @@ -726,44 +742,16 @@ "sub_path": "filament/Flashforge ASA Basic.json" }, { - "name": "Flashforge Generic ASA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Flashforge Generic ASA @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json" + "name": "Generic ASA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic ASA @FF AD5M 0.25 Nozzle.json" }, { "name": "Generic ASA @Flashforge AD4", "sub_path": "filament/Generic ASA @Flashforge AD4.json" }, { - "name": "Flashforge Generic PETG @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Flashforge Generic PETG @G3U", - "sub_path": "filament/Flashforge Generic PETG @G3U.json" - }, - { - "name": "Flashforge Generic PETG @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json" - }, - { - "name": "Flashforge Generic PETG @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json" - }, - { - "name": "Flashforge Generic PETG-CF @G3U", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U.json" - }, - { - "name": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json" - }, - { - "name": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json" + "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json" }, { "name": "Flashforge HS PETG", @@ -854,45 +842,73 @@ "sub_path": "filament/Flashforge PETG-CF @FF G4P.json" }, { - "name": "FusRock Generic NexPA-CF25", - "sub_path": "filament/FusRock/FusRock Generic NexPA-CF25.json" + "name": "FusRock NexPA-CF25", + "sub_path": "filament/FusRock/FusRock NexPA-CF25.json" }, { - "name": "FusRock Generic PAHT-CF", - "sub_path": "filament/FusRock/FusRock Generic PAHT-CF.json" + "name": "FusRock PAHT-CF", + "sub_path": "filament/FusRock/FusRock PAHT-CF.json" }, { - "name": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json" + "name": "FusRock PAHT-CF @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic PET-CF", - "sub_path": "filament/FusRock/FusRock Generic PET-CF.json" + "name": "FusRock PET-CF", + "sub_path": "filament/FusRock/FusRock PET-CF.json" }, { - "name": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json" + "name": "FusRock PET-CF @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic S-Multi", - "sub_path": "filament/FusRock/FusRock Generic S-Multi.json" + "name": "FusRock S-Multi", + "sub_path": "filament/FusRock/FusRock S-Multi.json" }, { - "name": "FusRock Generic S-Multi @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json" + "name": "FusRock S-Multi @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json" }, { - "name": "FusRock Generic S-PAHT", - "sub_path": "filament/FusRock/FusRock Generic S-PAHT.json" + "name": "FusRock S-PAHT", + "sub_path": "filament/FusRock/FusRock S-PAHT.json" }, { - "name": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "sub_path": "filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json" + "name": "FusRock S-PAHT @G3U 0.6 Nozzle", + "sub_path": "filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PETG @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PETG @FF AD5M 0.25 Nozzle.json" }, { "name": "Generic PETG @Flashforge AD4", "sub_path": "filament/Generic PETG @Flashforge AD4.json" }, + { + "name": "Generic PETG @Flashforge G3U", + "sub_path": "filament/Generic PETG @Flashforge G3U.json" + }, + { + "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PETG-CF @Flashforge G3U", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U.json" + }, + { + "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json" + }, { "name": "Flashforge PETG-CF", "sub_path": "filament/Flashforge PETG-CF.json" @@ -929,10 +945,6 @@ "name": "SUNLU PETG @FF AD5M 0.8 Nozzle", "sub_path": "filament/SUNLU/SUNLU PETG @FF AD5M 0.8 nozzle.json" }, - { - "name": "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json" - }, { "name": "Flashforge HIPS @FF G4", "sub_path": "filament/Flashforge HIPS @FF G4.json" @@ -1033,42 +1045,14 @@ "name": "Flashforge PLA-CF @FF G4P", "sub_path": "filament/Flashforge PLA-CF @FF G4P.json" }, + { + "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Generic PLA High Speed @Flashforge AD4", "sub_path": "filament/Generic PLA High Speed @Flashforge AD4.json" }, - { - "name": "Flashforge Generic PLA @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json" - }, - { - "name": "Flashforge Generic PLA @G3U", - "sub_path": "filament/Flashforge Generic PLA @G3U.json" - }, - { - "name": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json" - }, - { - "name": "Flashforge Generic PLA @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json" - }, - { - "name": "Flashforge Generic PLA-CF @G3U", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U.json" - }, - { - "name": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json" - }, - { - "name": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json" - }, - { - "name": "Flashforge Generic PVA", - "sub_path": "filament/Flashforge Generic PVA.json" - }, { "name": "Flashforge HS PLA", "sub_path": "filament/Flashforge HS PLA.json" @@ -1217,17 +1201,49 @@ "name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json" }, + { + "name": "Generic PLA @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" + }, { "name": "Generic PLA @Flashforge AD4", "sub_path": "filament/Generic PLA @Flashforge AD4.json" }, { - "name": "Polymaker Generic CoPA", - "sub_path": "filament/Polymaker/Polymaker Generic CoPA.json" + "name": "Generic PLA @Flashforge G3U", + "sub_path": "filament/Generic PLA @Flashforge G3U.json" }, { - "name": "Polymaker Generic S1", - "sub_path": "filament/Polymaker/Polymaker Generic S1.json" + "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json" + }, + { + "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "sub_path": "filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json" + }, + { + "name": "Generic PVA @Flashforge", + "sub_path": "filament/Generic PVA @Flashforge.json" + }, + { + "name": "Polymaker CoPA", + "sub_path": "filament/Polymaker/Polymaker CoPA.json" + }, + { + "name": "Polymaker S1", + "sub_path": "filament/Polymaker/Polymaker S1.json" }, { "name": "Flashforge PA-CF @FF G4", @@ -1237,14 +1253,6 @@ "name": "Flashforge PA-CF @FF G4P", "sub_path": "filament/Flashforge PA-CF @FF G4P.json" }, - { - "name": "Flashforge PAHT-CF @FF G4", - "sub_path": "filament/Flashforge PAHT-CF @FF G4.json" - }, - { - "name": "Flashforge PAHT-CF @FF G4P", - "sub_path": "filament/Flashforge PAHT-CF @FF G4P.json" - }, { "name": "Flashforge PLA-CF", "sub_path": "filament/Flashforge PLA-CF.json" @@ -1289,10 +1297,6 @@ "name": "Generic PLA-CF10 @Flashforge AD4", "sub_path": "filament/Generic PLA-CF10 @Flashforge AD4.json" }, - { - "name": "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "sub_path": "filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json" - }, { "name": "Flashforge PLA Silk", "sub_path": "filament/Flashforge PLA Silk.json" @@ -1317,6 +1321,10 @@ "name": "Generic PLA Silk @Flashforge AD4", "sub_path": "filament/Generic PLA Silk @Flashforge AD4.json" }, + { + "name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "sub_path": "filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json" + }, { "name": "SUNLU PLA Marble @FF AD3", "sub_path": "filament/SUNLU/SUNLU PLA Marble @FF AD3.json" @@ -1701,6 +1709,246 @@ "name": "Flashforge ASA Basic @FF AD5X 0.25 nozzle", "sub_path": "filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json" }, + { + "name": "Flashforge HS PETG @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Basic @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json" + }, + { + "name": "Flashforge ASA-CF", + "sub_path": "filament/Flashforge ASA-CF.json" + }, + { + "name": "Flashforge PPA-CF", + "sub_path": "filament/Flashforge PPA-CF.json" + }, + { + "name": "Flashforge PPA-GF", + "sub_path": "filament/Flashforge PPA-GF.json" + }, + { + "name": "Flashforge PPS-CF", + "sub_path": "filament/Flashforge PPS-CF.json" + }, + { + "name": "FusRock PAHT-GF", + "sub_path": "filament/FusRock/FusRock PAHT-GF.json" + }, + { + "name": "FusRock PAHT-CF @FF G4 0.6 nozzle", + "sub_path": "filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json" + }, + { + "name": "FusRock PAHT-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PA12-CF", + "sub_path": "filament/Flashforge PA12-CF.json" + }, + { + "name": "Flashforge PA6-CF", + "sub_path": "filament/Flashforge PA6-CF.json" + }, + { + "name": "Flashforge PA66-CF", + "sub_path": "filament/Flashforge PA66-CF.json" + }, + { + "name": "Flashforge PET-CF", + "sub_path": "filament/Flashforge PET-CF.json" + }, + { + "name": "FusRock PET-GF", + "sub_path": "filament/FusRock/FusRock PET-GF.json" + }, + { + "name": "Flashforge PPS @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PPS @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PPS @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PPS @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PPS @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PPS @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PPS-CF @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PPS-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json" + }, + { + "name": "FusRock PET @FF G4P 0.8 HF nozzle", + "sub_path": "filament/FusRock PET @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "FusRock PET-CF @FF G4 0.6 nozzle", + "sub_path": "filament/FusRock PET-CF @FF G4 0.6 nozzle.json" + }, + { + "name": "FusRock PET-CF @FF G4P 0.6 nozzle", + "sub_path": "filament/FusRock PET-CF @FF G4P 0.6 nozzle.json" + }, + { + "name": "Generic PET @FF G4 0.6 HF nozzle", + "sub_path": "filament/Generic PET @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Generic PET @FF G4 0.6 nozzle", + "sub_path": "filament/Generic PET @FF G4 0.6 nozzle.json" + }, + { + "name": "Generic PET @FF G4 0.8 HF nozzle", + "sub_path": "filament/Generic PET @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Generic PET @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Generic PET @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Generic PET @FF G4P 0.6 nozzle", + "sub_path": "filament/Generic PET @FF G4P 0.6 nozzle.json" + }, + { + "name": "Generic PET @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Generic PET @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PC @FF G4 0.6 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PC @FF G4 0.6 nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.6 nozzle.json" + }, + { + "name": "Flashforge PC @FF G4 0.8 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Flashforge PC @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Flashforge PC @FF G4P 0.6 nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.6 nozzle.json" + }, + { + "name": "Flashforge PC @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Flashforge PC @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4 0.6 HF nozzle", + "sub_path": "filament/FusRock PAHT @FF G4 0.6 HF nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4 0.6 nozzle", + "sub_path": "filament/FusRock PAHT @FF G4 0.6 nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4 0.8 HF nozzle", + "sub_path": "filament/FusRock PAHT @FF G4 0.8 HF nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4P 0.6 HF nozzle", + "sub_path": "filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4P 0.6 nozzle", + "sub_path": "filament/FusRock PAHT @FF G4P 0.6 nozzle.json" + }, + { + "name": "FusRock PAHT @FF G4P 0.8 HF nozzle", + "sub_path": "filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4 0.6 HF nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4 0.6 nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4 0.6 nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4 0.8 HF nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4P 0.6 HF nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4P 0.6 nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4P 0.6 nozzle.json" + }, + { + "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", + "sub_path": "filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json" + }, { "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json" @@ -1798,244 +2046,156 @@ "sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json" }, { - "name": "Flashforge HS PETG @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json" + "name": "Flashforge HS PLA @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json" }, { - "name": "Flashforge HS PETG @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json" + "name": "Flashforge HS PLA @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json" }, { - "name": "Flashforge HS PETG @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4 0.25 nozzle.json" + "name": "Flashforge HS PLA @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json" }, { - "name": "Flashforge HS PETG @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json" + "name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json" }, { - "name": "Flashforge PETG Basic @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json" + "name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json" }, { - "name": "Flashforge PETG Pro @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json" + "name": "Flashforge PLA Basic @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json" }, { - "name": "Flashforge PETG Pro @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json" + "name": "Flashforge PLA Basic @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json" }, { - "name": "Flashforge PETG Pro @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json" + "name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json" }, { - "name": "Flashforge PETG Pro @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json" + "name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json" }, { - "name": "Flashforge PETG Transparent @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json" + "name": "Flashforge PLA Color Change @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json" }, { - "name": "Flashforge PETG Transparent @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json" + "name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json" }, { - "name": "Flashforge PETG Transparent @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json" + "name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json" }, { - "name": "Flashforge PETG Transparent @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json" + "name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json" }, { - "name": "Flashforge ASA-CF", - "sub_path": "filament/Flashforge ASA-CF.json" + "name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json" }, { - "name": "Flashforge PPA-CF", - "sub_path": "filament/Flashforge PPA-CF.json" + "name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json" }, { - "name": "Flashforge PPA-GF", - "sub_path": "filament/Flashforge PPA-GF.json" + "name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json" }, { - "name": "Flashforge PPS-CF", - "sub_path": "filament/Flashforge PPS-CF.json" + "name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json" }, { - "name": "FusRock Generic PAHT-GF", - "sub_path": "filament/FusRock/FusRock Generic PAHT-GF.json" + "name": "Flashforge PLA Luminous @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json" }, { - "name": "FusRock PAHT-CF @FF G4 0.6 nozzle", - "sub_path": "filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json" + "name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json" }, { - "name": "FusRock PAHT-CF @FF G4P 0.6 nozzle", - "sub_path": "filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json" + "name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json" }, { - "name": "Flashforge PA12-CF", - "sub_path": "filament/Flashforge PA12-CF.json" + "name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json" }, { - "name": "Flashforge PA6-CF", - "sub_path": "filament/Flashforge PA6-CF.json" + "name": "Flashforge PLA Matte @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json" }, { - "name": "Flashforge PA66-CF", - "sub_path": "filament/Flashforge PA66-CF.json" + "name": "Flashforge PLA Matte @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json" }, { - "name": "Flashforge PET-CF", - "sub_path": "filament/Flashforge PET-CF.json" + "name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json" }, { - "name": "FusRock Generic PET-GF", - "sub_path": "filament/FusRock/FusRock Generic PET-GF.json" + "name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4 0.6 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.6 HF nozzle.json" + "name": "Flashforge PLA Metal @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.6 nozzle.json" + "name": "Flashforge PLA Metal @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4 0.8 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4 0.8 HF nozzle.json" + "name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.6 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json" + "name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.6 nozzle.json" + "name": "Flashforge PLA Pro @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json" }, { - "name": "FlashForge PPS @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json" + "name": "Flashforge PLA Pro @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json" }, { - "name": "FlashForge PPS-CF @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json" + "name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json" }, { - "name": "FlashForge PPS-CF @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json" + "name": "Flashforge PLA Silk @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json" }, { - "name": "FusRock PET @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FusRock PET @FF G4P 0.8 HF nozzle.json" + "name": "Flashforge PLA Silk @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json" }, { - "name": "FusRock PET-CF @FF G4 0.6 nozzle", - "sub_path": "filament/FusRock PET-CF @FF G4 0.6 nozzle.json" + "name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json" }, { - "name": "FusRock PET-CF @FF G4P 0.6 nozzle", - "sub_path": "filament/FusRock PET-CF @FF G4P 0.6 nozzle.json" + "name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json" }, { - "name": "Generic PET @FF G4 0.6 HF nozzle", - "sub_path": "filament/Generic PET @FF G4 0.6 HF nozzle.json" + "name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json" }, { - "name": "Generic PET @FF G4 0.6 nozzle", - "sub_path": "filament/Generic PET @FF G4 0.6 nozzle.json" - }, - { - "name": "Generic PET @FF G4 0.8 HF nozzle", - "sub_path": "filament/Generic PET @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Generic PET @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Generic PET @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Generic PET @FF G4P 0.6 nozzle", - "sub_path": "filament/Generic PET @FF G4P 0.6 nozzle.json" - }, - { - "name": "Generic PET @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Generic PET @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "FlashForge PC @FF G4 0.6 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.6 HF nozzle.json" - }, - { - "name": "FlashForge PC @FF G4 0.6 nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.6 nozzle.json" - }, - { - "name": "FlashForge PC @FF G4 0.8 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4 0.8 HF nozzle.json" - }, - { - "name": "FlashForge PC @FF G4P 0.6 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "FlashForge PC @FF G4P 0.6 nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.6 nozzle.json" - }, - { - "name": "FlashForge PC @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FlashForge PC @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4 0.6 HF nozzle", - "sub_path": "filament/FusRock PAHT @FF G4 0.6 HF nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4 0.6 nozzle", - "sub_path": "filament/FusRock PAHT @FF G4 0.6 nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4 0.8 HF nozzle", - "sub_path": "filament/FusRock PAHT @FF G4 0.8 HF nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4P 0.6 HF nozzle", - "sub_path": "filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4P 0.6 nozzle", - "sub_path": "filament/FusRock PAHT @FF G4P 0.6 nozzle.json" - }, - { - "name": "FusRock PAHT @FF G4P 0.8 HF nozzle", - "sub_path": "filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4 0.6 HF nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4 0.6 nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4 0.6 nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4 0.8 HF nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4P 0.6 HF nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4P 0.6 nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4P 0.6 nozzle.json" - }, - { - "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", - "sub_path": "filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json" + "name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json" }, { "name": "Flashforge HS PLA @FF G4 0.6 HF nozzle", @@ -2117,14 +2277,6 @@ "name": "Flashforge PLA Basic @FF G4P 0.8 HF nozzle", "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json" }, - { - "name": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "sub_path": "filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json" - }, - { - "name": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", - "sub_path": "filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json" - }, { "name": "Flashforge PLA Color Change @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json" @@ -2341,158 +2493,6 @@ "name": "Flashforge PLA-CF @FF G4P 0.6 nozzle", "sub_path": "filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json" }, - { - "name": "Flashforge HS PLA @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge HS PLA @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge HS PLA @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Basic @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Color Change @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Luminous @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Matte @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Metal @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Pro @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Silk @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF AD5X 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF G4 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json" - }, - { - "name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle", - "sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json" - }, { "name": "Flashforge PLA Silk @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json" @@ -2569,14 +2569,6 @@ "name": "Flashforge PA-CF @FF C5P", "sub_path": "filament/Flashforge PA-CF @FF C5P.json" }, - { - "name": "Flashforge PAHT-CF @FF C5", - "sub_path": "filament/Flashforge PAHT-CF @FF C5.json" - }, - { - "name": "Flashforge PAHT-CF @FF C5P", - "sub_path": "filament/Flashforge PAHT-CF @FF C5P.json" - }, { "name": "Flashforge PET-CF @FF C5", "sub_path": "filament/Flashforge PET-CF @FF C5.json" @@ -2609,30 +2601,6 @@ "name": "Flashforge PETG-CF @FF C5P", "sub_path": "filament/Flashforge PETG-CF @FF C5P.json" }, - { - "name": "Flashforge PLA Matte @FF C5", - "sub_path": "filament/Flashforge PLA Matte @FF C5.json" - }, - { - "name": "Flashforge PLA Matte @FF C5P", - "sub_path": "filament/Flashforge PLA Matte @FF C5P.json" - }, - { - "name": "Flashforge PLA Metal @FF C5", - "sub_path": "filament/Flashforge PLA Metal @FF C5.json" - }, - { - "name": "Flashforge PLA Metal @FF C5P", - "sub_path": "filament/Flashforge PLA Metal @FF C5P.json" - }, - { - "name": "Flashforge PLA Pro @FF C5", - "sub_path": "filament/Flashforge PLA Pro @FF C5.json" - }, - { - "name": "Flashforge PLA Pro @FF C5P", - "sub_path": "filament/Flashforge PLA Pro @FF C5P.json" - }, { "name": "Flashforge PLA Basic @FF C5", "sub_path": "filament/Flashforge PLA Basic @FF C5.json" @@ -2665,6 +2633,30 @@ "name": "Flashforge PLA Luminous @FF C5P", "sub_path": "filament/Flashforge PLA Luminous @FF C5P.json" }, + { + "name": "Flashforge PLA Matte @FF C5", + "sub_path": "filament/Flashforge PLA Matte @FF C5.json" + }, + { + "name": "Flashforge PLA Matte @FF C5P", + "sub_path": "filament/Flashforge PLA Matte @FF C5P.json" + }, + { + "name": "Flashforge PLA Metal @FF C5", + "sub_path": "filament/Flashforge PLA Metal @FF C5.json" + }, + { + "name": "Flashforge PLA Metal @FF C5P", + "sub_path": "filament/Flashforge PLA Metal @FF C5P.json" + }, + { + "name": "Flashforge PLA Pro @FF C5", + "sub_path": "filament/Flashforge PLA Pro @FF C5.json" + }, + { + "name": "Flashforge PLA Pro @FF C5P", + "sub_path": "filament/Flashforge PLA Pro @FF C5P.json" + }, { "name": "Flashforge PLA Silk @FF C5", "sub_path": "filament/Flashforge PLA Silk @FF C5.json" @@ -2927,6 +2919,10 @@ "name": "Flashforge AD5X 0.4 nozzle", "sub_path": "machine/Flashforge AD5X 0.4 nozzle.json" }, + { + "name": "Flashforge Creator 5 0.25 nozzle", + "sub_path": "machine/Flashforge Creator 5 0.25 nozzle.json" + }, { "name": "Flashforge Creator 5 0.4 nozzle", "sub_path": "machine/Flashforge Creator 5 0.4 nozzle.json" @@ -2939,6 +2935,10 @@ "name": "Flashforge Creator 5 0.8 nozzle", "sub_path": "machine/Flashforge Creator 5 0.8 nozzle.json" }, + { + "name": "Flashforge Creator 5 Pro 0.25 nozzle", + "sub_path": "machine/Flashforge Creator 5 Pro 0.25 nozzle.json" + }, { "name": "Flashforge Creator 5 Pro 0.4 nozzle", "sub_path": "machine/Flashforge Creator 5 Pro 0.4 nozzle.json" diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json deleted file mode 100644 index 83e1c85730..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 HF nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "M9HM8tihJzV4crs8", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4 0.6 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 0.6 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json deleted file mode 100644 index f94eafbe9d..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.6 nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "08VjBSha6gjhJYgk", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json deleted file mode 100644 index d5c6c3c33d..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4 0.8 HF nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "JqgkmxnjlnQ3uw1u", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4 0.8 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json deleted file mode 100644 index 2bf41bc64b..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 HF nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "vvLLPvSeb5PYbT1R", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4P 0.6 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.6 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json deleted file mode 100644 index e8806df046..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.6 nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "mPJMPfFCyfWdKzMO", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4P 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json deleted file mode 100644 index 56562e51e7..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PC @FF G4P 0.8 HF nozzle.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PC @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "HTgqTUTznOlfCRAd", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_density": [ - "1.04" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PC @FF G4P 0.8 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PC" - ], - "filament_type": [ - "PC" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "50" - ], - "temperature_vitrification": [ - "120" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json deleted file mode 100644 index e5b251acab..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 HF nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "3w8fnDjkoFaJ6Nhw", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4 0.6 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 0.6 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json deleted file mode 100644 index 7394511a16..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.6 nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "owHbDqY55rFtSegz", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json deleted file mode 100644 index 87e74372e5..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4 0.8 HF nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "eFK1zzT1JY9ZnEl9", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4 0.8 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json deleted file mode 100644 index 7d6d3c1a95..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 HF nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "E8CcstoHzax78ZJY", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.6 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.6 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json deleted file mode 100644 index 01672b8f65..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.6 nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "xa22FD8bRVGsLiPJ", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "320" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json deleted file mode 100644 index ff77d7095a..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS @FF G4P 0.8 HF nozzle.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "bZ9dbA8dIu9mjWyN", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_density": [ - "1.36" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS @FF G4P 0.8 HF nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "125" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json deleted file mode 100644 index b1cb0787b5..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4 0.6 nozzle.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "4w0oK3F50O1DUqsu", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS-CF @FF G4 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "220" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json deleted file mode 100644 index fc6f6e975a..0000000000 --- a/resources/profiles/Flashforge/filament/FlashForge PPS-CF @FF G4P 0.6 nozzle.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "type": "filament", - "name": "FlashForge PPS-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "94vPnztRcpnbfAKx", - "instantiation": "true", - "close_fan_the_first_x_layers": [ - "2" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "110" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "175" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "FlashForge PPS-CF @FF G4P 0.6 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PPS" - ], - "filament_type": [ - "PPS-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.6 nozzle" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "nozzle_temperature": [ - "315" - ], - "nozzle_temperature_initial_layer": [ - "315" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "overhang_fan_speed": [ - "40" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "5" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "220" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json index 97970235e4..faa456baad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS @FF AD5M 0.25 Nozzle.json @@ -1,10 +1,13 @@ { "type": "filament", "name": "Flashforge ABS @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", - "filament_id": "GFB99", + "filament_id": "OF5SJ3jz", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json index dc0989bbc4..93b640c5f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SuEfcE6AYK8N1FI4", + "filament_id": "OFibWuBd", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge ABS Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json index 0deb98db56..6245bcf02c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gmkc6fRLMI73Iut8", + "filament_id": "OFibWuBd", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "cool_plate_temp": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json index 7f8ec43e72..7ba9ffc527 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "fgEYZ1Mgyp1AvtwU", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json index 0f95b37aad..d797114137 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "cIxbQMVdG5K85rJr", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json index 4b533b00a7..82e08e3f49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF AD5X", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "9GXBeuCUrScJfmJB", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json index d53b5cc2c1..5e5ce18eea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ds0GgE1jssl4IbF3", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json index eb4ee53f53..9ea370b14b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UTWbwTYuXYbBx3uw", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json index fe13cbb5cb..6be9c9ac5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "CuckX5MsN69806ow", + "filament_id": "OFibWuBd", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json index 4a3bd054b2..c38639dd89 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NttDJCrfB01uwMDl", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json index 594f291957..9709d11e22 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJd6dG6OdEffEFC7", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json index 34d1f4e94c..2f3d072baf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8yFCuCnEuI3dUvQy", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json index 60847876a0..a6badb7396 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "np4fP5kghRlczOTT", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json index f267e9bc74..c70351a9b1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "8o2maTFOXq0XR6Dm", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json index 1ec700928b..ebacfbe35c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "MBo02hFXn0ebDRdb", + "filament_id": "OFibWuBd", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json index baa7e84ede..d6be224ddc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vCsjC0UnKenzIR0O", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json index d4b2a75adb..9ff2f3f54a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xhxVdlmh5r7meoHo", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json index ce8cb40ddc..d2c5c73541 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "6dlQN4Xhd6kGZ0Qn", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json index 9518e3fb1c..c4b58df04c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "r8WVFPozL8f5oLVJ", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json index 80ad9a2da8..ebf003f20d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "xw0pZNmhw1K4tPQ1", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json index 3e93a31243..8be3cb0913 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS Basic", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "m6QLC2UaS3fW298i", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ABS Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json index 3b7c0a2db6..398f80f8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nx3Px0Zu356IKShT", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json index a17e48af0d..3fd0dc97ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "d4EGsmMeEDCOUBF2", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" @@ -38,6 +42,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material: ABS-CF\n" ], + "filament_type": [ + "ABS-CF" + ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json index ed4c177d18..043e0ea208 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9ziPFKsjESbw1pXL", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json index dd952e95a1..77148bf480 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-CF @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ABS-CF @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "NzJJs6yrSik5xuyX", + "filament_id": "OFYTIMbj", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" @@ -38,6 +42,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material: ABS-CF\n" ], + "filament_type": [ + "ABS-CF" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json index 3b1b422c33..8cb591fa47 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UinlbuXNbad2kN0s", + "filament_id": "OFojbdhR", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json index 72364ebe47..3fefbd7a96 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ABS-GF @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "ycgiXY41kqNgslE3", + "filament_id": "OFojbdhR", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json index 0f80d06af9..f7d1332ec2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA @FF AD5M 0.25 Nozzle.json @@ -1,9 +1,12 @@ { "type": "filament", "name": "Flashforge ASA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFJS560n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json index fcdb3faedd..0f99d476fc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5M 0.25 nozzle.json @@ -4,6 +4,10 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "kjS4k8nrIdNNNoWw", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json index 3294344bd4..9a3aac8573 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.25 nozzle.json @@ -4,6 +4,10 @@ "inherits": "Flashforge ASA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "Y647IFVkk5JIXzte", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json index 9904aea39c..7a199389af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "vaOyXUcrJ97KE7ZW", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" @@ -26,6 +30,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X 0.6 nozzle" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json index 4353992934..3c2e7173bf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "iLWq5pJ3ox9EAM1Z", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" @@ -26,6 +30,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X 0.8 nozzle" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.8 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json index cb4a543dbd..68f66a1f6b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF AD5X", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "i7PUPYxy0Z9weyyA", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" @@ -26,6 +30,9 @@ "filament_settings_id": [ "Flashforge ASA Basic @FF AD5X" ], + "filament_type": [ + "ASA" + ], "compatible_printers": [ "Flashforge AD5X 0.4 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json index 485f06e046..5aec1c1d8b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "UUSDyOetXSOuBIUd", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json index 4af0b8b47c..18ae2c78f1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "2r0kwhklE24Hp94O", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json index dae515a9aa..051b069550 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XWta5jJFsCxBdEPd", + "filament_id": "OFFFg2Pf", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json index 4c35d0a62b..66ae12c06c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "w8O6oenp0NymzCqf", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json index e4435448ae..166d3a01ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "thhmWRzNYLYJOeR2", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json index 86d4e12b4c..54e47a5e64 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g5jiz6Q6or23BIo7", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json index 890dd75f0f..01db10d49d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "7xmWlHHNMvXBKdYS", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json index 4826e42eba..9cdc87b1e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "r0B8KfZ1mNWMvGqE", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json index 76cd89a82a..f989622957 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge ABS @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "quOwRRLcNfOy0sYf", + "filament_id": "OFFFg2Pf", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "50" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json index 324c9eec04..d8801abca8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CBLZqLhkwf5XKO12", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json index 461aa7bd0a..1cc08eabb3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Df3anJxiRXLVO9hw", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json index 0c0cc1aab1..30787c9de1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Nu4WvBWuEhazZfh5", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json index 9a59d625d2..5b73e31a49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "hF0h4ye3hMDtEba1", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json index 3a10f337b9..05223314f5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "3isZCWr4CBjFtGDX", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json index 7ccef601f3..2500eacd3f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge ASA Basic", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", "setting_id": "SU6r879TbQMUFCij", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge ASA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json index 9956e193ee..5cd421f15c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "TqU1elqwuVr9EhTA", + "filament_id": "OFq0TY7C", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json index c2a78c9e11..c61eb8159b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "nMczAtoc5W0J2WkS", + "filament_id": "OFq0TY7C", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json index 846cf4c76a..fed88f120e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge ASA-CF @FF G4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "ap7X4nWKfFR53NT0", + "filament_id": "OFq0TY7C", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], @@ -36,7 +40,7 @@ "; filament start gcode\n;right_extruder_material: ASA-CF\n" ], "filament_type": [ - "ASA" + "ASA-CF" ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json index d0ad27e1cd..ddd4c96ba2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF @FF G4P.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge ASA-CF @FF G4P", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "kZXg6odPm5iW79Qn", + "filament_id": "OFq0TY7C", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], @@ -36,7 +40,7 @@ "; filament start gcode\n;right_extruder_material: ASA-CF\n" ], "filament_type": [ - "ASA" + "ASA-CF" ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json index 02db6bfea9..9a37c4c7d1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge ASA-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "CI5dvVrCNk2XTU82", + "filament_id": "OFq0TY7C", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], @@ -15,7 +19,7 @@ "Flashforge ASA-CF" ], "filament_type": [ - "ASA" + "ASA-CF" ], "hot_plate_temp": [ "100" diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json index 3a328388df..de98bbdf41 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "941E5MaAyFY3iv4V", + "filament_id": "OFrZDhVt", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json index 46857c2b13..0bff2a9e2c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge ASA-GF @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic ABS @System", "from": "system", "setting_id": "RdmsxyUGUX8Ot4oj", + "filament_id": "OFrZDhVt", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index 0504844ed6..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ABS @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge ABS @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "NWEY6ZxkUS8jqNU2", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle", - "Flashforge AD5X 0.25 nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic ABS @FF AD5M 0.25 Nozzle" - ], - "fan_max_speed": [ - "50" - ], - "filament_cost": [ - "40" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "pressure_advance": [ - "0.1" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json deleted file mode 100644 index ada3f13582..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ABS @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "OaXiy7DI5bOAiaYb", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_flow_ratio": [ - "1.03" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic ABS @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json deleted file mode 100644 index 1f6b35db19..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ABS @G3U", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "Cfd7Q1nGwqxI5Ngh", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.03" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic ABS @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "ABS" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json b/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json deleted file mode 100644 index 38d58ba346..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ABS.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "uygAzLWRQiCIJ8jh", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "8" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "slow_down_min_speed": [ - "20" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: ABS\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_density": [ - "1.04" - ], - "temperature_vitrification": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index d5b0d17c25..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ASA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge ASA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic ASA", - "from": "system", - "setting_id": "spSRbidSN2yeZLhD", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle", - "Flashforge AD5X 0.25 nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic ASA @FF AD5M 0.25 Nozzle" - ], - "fan_max_speed": [ - "50" - ], - "filament_cost": [ - "40" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: ASA\n" - ], - "pressure_advance": [ - "0.1" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json deleted file mode 100644 index c0819fa0b1..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ASA @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ASA", - "from": "system", - "setting_id": "gVLGkoCoyrWL4DQr", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "20" - ], - "filament_density": [ - "1.09" - ], - "filament_flow_ratio": [ - "1.03" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "10" - ], - "filament_settings_id": [ - "Flashforge Generic ASA @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_type": [ - "ASA" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json deleted file mode 100644 index fcce2738f5..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ASA @G3U", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "c6IMgUyqOeS2HFWw", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.02" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "10" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic ASA @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "ASA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json b/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json deleted file mode 100644 index d7b6844c78..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic ASA.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "jMCunppmYOH5QIra", - "filament_id": "GFL99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "20" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge ASA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode \n;right_extruder_material:ASA" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_type": [ - "ASA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.04" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json deleted file mode 100644 index baf6514cd9..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic HIPS @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "b3CFhGGnZLzpyAWa", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "15" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "20" - ], - "filament_density": [ - "1.05" - ], - "filament_flow_ratio": [ - "1.01" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic HIPS @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_type": [ - "HIPS" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json b/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json deleted file mode 100644 index 18f52c4f1f..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HIPS.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic HIPS", - "inherits": "Flashforge Generic ABS", - "from": "system", - "setting_id": "n68nw5tzKZ0rq43O", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "80" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.04" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.01" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic HIPS" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "HIPS" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "40" - ], - "temperature_vitrification": [ - "100" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index 93ee8f80cb..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge HS PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic HS PLA", - "from": "system", - "setting_id": "1cvcaoBFNbg2GucE", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle", - "Flashforge AD5X 0.25 nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: HS PLA\n" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json deleted file mode 100644 index c67de4ecd3..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic HS PLA.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic HS PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "foG37d7HZKgt6l43", - "filament_id": "GFL99", - "instantiation": "true", - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge HS PLA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:HS PLA\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "90" - ], - "filament_unloading_speed_start": [ - "100" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index 4d02d458d0..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PETG @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "KerUxwPsSEKDO6jL", - "filament_id": "GFG99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle", - "Flashforge AD5X 0.25 nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic PETG @FF AD5M 0.25 Nozzle" - ], - "fan_max_speed": [ - "80" - ], - "filament_max_volumetric_speed": [ - "1.5" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json index 20a08fe28e..4c4f2b43cc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json +++ b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @Flashforge Artemis.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YflkaS7NfBE5XiSH", - "filament_id": "FFF03", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json deleted file mode 100644 index 2183965821..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "W7pWKQ2EWAB5viV1", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_flow_ratio": [ - "1.01" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PETG @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "pressure_advance": [ - "0.042" - ], - "slow_down_min_speed": [ - "12" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json deleted file mode 100644 index 3e61f73029..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U 0.8 Nozzle.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "eDQb2WfDsUTvj2Nf", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.8 Nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PETG @G3U 0.8 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "slow_down_min_speed": [ - "12" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json deleted file mode 100644 index 075e2e4923..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG @G3U", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "yo4uc7TxQbqnlRUY", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic PETG @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PETG" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "250" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "90" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json deleted file mode 100644 index 385ec94b64..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "u2OzNKIQIKUrOT9k", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "pressure_advance": [ - "0.042" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "12" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json deleted file mode 100644 index 4efa8a0a0f..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U 0.8 Nozzle.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "7Qq8eY1kcFHTgzW3", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.8 Nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U 0.8 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_unloading_speed": [ - "40" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "12" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json deleted file mode 100644 index d3fb0d6590..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG-CF @G3U", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "gLrecba33jDI9PeI", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic PETG-CF @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.036" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "90" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json deleted file mode 100644 index 934ba831ef..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG-CF10.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG-CF10", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "PlC4Ek7d09ytYZqJ", - "filament_id": "GFG99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge PETG-CF10" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PETG-CF10\n" - ], - "filament_type": [ - "PETG-CF" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.035" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json b/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json deleted file mode 100644 index 28ed60ccf7..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PETG.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "YqiSgA018CdflfT9", - "filament_id": "GFG99", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "temperature_vitrification": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "slow_down_min_speed": [ - "30" - ], - "overhang_fan_speed": [ - "80" - ], - "support_material_interface_fan_speed": [ - "90" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode \n;right_extruder_material:PETG" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.046" - ], - "filament_density": [ - "1.27" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature": [ - "255" - ], - "fan_cooling_layer_time": [ - "30" - ], - "slow_down_layer_time": [ - "8" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "25%" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index 769d2f16d5..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "o1CHzasJ7x3CKjue", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle", - "Flashforge AD5X 0.25 nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic PLA @FF AD5M 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2.8" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json deleted file mode 100644 index 72add60440..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PLA", - "from": "system", - "instantiation": "false", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "fan_cooling_layer_time": [ - "50" - ], - "filament_flow_ratio": [ - "0.99" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n\n\n" - ], - "filament_unloading_speed": [ - "40" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "55" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "pressure_advance": [ - "0.042" - ], - "slow_down_layer_time": [ - "15" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json deleted file mode 100644 index ccc07ccec3..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U 0.8 Nozzle.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PLA", - "from": "system", - "instantiation": "false", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.8 Nozzle" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "fan_cooling_layer_time": [ - "50" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_max_volumetric_speed": [ - "23" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PLA @G3U 0.8 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n\n\n" - ], - "filament_unloading_speed": [ - "40" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "55" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "pressure_advance": [ - "0.042" - ], - "slow_down_layer_time": [ - "15" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json deleted file mode 100644 index 4154eed45e..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA @G3U", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "gjIdhPTLOr17mz5B", - "filament_id": "FFG01", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic PLA @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n\n\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json deleted file mode 100644 index 57b925762b..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "KR0LUSD7wd55oNI6", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "fan_cooling_layer_time": [ - "50" - ], - "fan_min_speed": [ - "70" - ], - "filament_density": [ - "1.28" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_unloading_speed": [ - "40" - ], - "filament_unloading_speed_start": [ - "40" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "pressure_advance": [ - "0.044" - ], - "slow_down_layer_time": [ - "15" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json deleted file mode 100644 index 7300eb4bf4..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U 0.8 Nozzle.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "rQSFNxuuqUVzsSV2", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.8 Nozzle" - ], - "fan_cooling_layer_time": [ - "50" - ], - "fan_min_speed": [ - "90" - ], - "filament_density": [ - "1.28" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_max_volumetric_speed": [ - "22" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U 0.8 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_unloading_speed": [ - "40" - ], - "filament_unloading_speed_start": [ - "40" - ], - "nozzle_temperature": [ - "215" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "pressure_advance": [ - "0.044" - ], - "slow_down_layer_time": [ - "15" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json deleted file mode 100644 index f236a9a83b..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF @G3U.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-CF @G3U", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "S1UTm2oMRoQ4yM4R", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "50" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.02" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic PLA-CF @G3U" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.026" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json deleted file mode 100644 index 29b86ed5b1..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-CF10.json +++ /dev/null @@ -1,248 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-CF10", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "qH3l3p0yvZHqHnwG", - "filament_id": "GFL99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge PLA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA-CF10\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "90" - ], - "filament_unloading_speed_start": [ - "100" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json deleted file mode 100644 index d04d5eb4cf..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", - "renamed_from": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA-Silk", - "from": "system", - "setting_id": "WOl0JsKxAQFo2WnW", - "filament_id": "GFL99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Adventurer 5M 0.25 Nozzle", - "Flashforge Adventurer 5M Pro 0.25 Nozzle" - ], - "filament_settings_id": [ - "Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "100" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "2.8" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA-Silk\n" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "217" - ], - "pressure_advance": [ - "0.1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json deleted file mode 100644 index bb3acc4145..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA-Silk.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA-Silk", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NryK9oIg8wMDKVHW", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA Silk\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json deleted file mode 100644 index 61b5276051..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PLA.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "DwAgYHepesazDUjN", - "filament_id": "FFG01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp": [ - "50" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PLA\n" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_diameter": [ - "1.75" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json b/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json deleted file mode 100644 index 6adaf46d6e..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic PVA.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic PVA", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "NA0PhaTNDvEH38lF", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "80" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "50" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge Generic PVA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material: PVA" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PVA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "10" - ], - "support_material_interface_fan_speed": [ - "80" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json b/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json deleted file mode 100644 index 473ba6ac33..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge Generic TPU.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "zQEeIIKWSgsDqlpI", - "filament_id": "GFG99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "100" - ], - "bed_temperature_difference": [ - "10" - ], - "chamber_temperature": "0", - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Adventurer 5M 0.4 Nozzle", - "Flashforge Adventurer 5M 0.6 Nozzle", - "Flashforge Adventurer 5M 0.8 Nozzle", - "Flashforge Adventurer 5M Pro 0.4 Nozzle", - "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "default_filament_colour": [ - "" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "0" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "1.2" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Flashforge TPU" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:TPU\n" - ], - "filament_type": [ - "TPU" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.035" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "100" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json index b9a10c1f18..608d143031 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "ckwc7U0Q2eKHmCxY", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json index 8a61df2fe2..14a3d39616 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic HIPS @System", "from": "system", "setting_id": "AEQYrT7e4Q5J2G6C", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json index 81c501eee9..bb2f4387b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "jUNUZhE0BJyB64fC", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json index 34dacd8f8d..597e24ade7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "0qMEqo9YMDLSVafs", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json index 756f4ddbf2..5b17792267 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ek749gIdUAPq6WxT", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json index 9ca5d033bd..b79fa3d0d2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "tEohTtyHofD6l6o3", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json index 2e977fd084..96b5849040 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "oLeLrIjFJzoZha3E", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json index 6ae4e562a2..cb385fd395 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HXGUlYY4X5IHhL3R", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json index 9354f7ede7..a32508d8b0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "g22Cv3zy3h5BhJYK", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json index 980ab69f11..b2958e0032 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic ABS @G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aDzBXuvN7IuSP5sa", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +66,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:HIPS" ], + "filament_type": [ + "HIPS" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json index 6f7493a72b..bbbaebe8b8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CIj24REX7BA8zPHQ", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "complete_print_exhaust_fan_speed": [ "50" diff --git a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json index 7d0d9befb3..bc52c94e5b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HIPS @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HIPS @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "yAGyGjF6uDrjfjLn", + "filament_id": "OFvaLVML", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json index fbb47b2d7f..b9eb0a335b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "1NFhtEvvvgZiHcto", + "filament_id": "OFDxxTpW", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge HS PETG @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json index fc0e4c7cee..fb96e1e846 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "eNOkWn5PT8rDpA0g", + "filament_id": "OFDxxTpW", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "cool_plate_temp": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json index a6a28ae753..c1dd59623c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "vOqAGzaYLz0XdRvC", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json index 28c7208fad..21198590ac 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "KSuxZ3fpQz0khDSz", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json index 3b495aebe8..23703621f3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "o4B1kAToVny7jw0M", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json index 5c0421a23e..a48606e3c0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "kpRved5M3NktqIYn", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json index ca2dcd370c..9ceca02a50 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG HF @System", "from": "system", "setting_id": "ypxgjHl9uIMyZIce", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json index b8f6997d97..5b64fa0f61 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "uXGuyvVxfdQW22vu", + "filament_id": "OFDxxTpW", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json index 785fd2495b..28565a5c3b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q9UbakUmZPzG3xU0", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json index 57c2e5ca72..592b3fe094 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IL18Lu0qHx1RVqKD", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json index f8cfba7acd..e4b953f089 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2FQib7fZjcwfCnm2", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json index 16e88eeb42..3534f1a60b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "CtwOm90WWD4S7U6j", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -83,6 +87,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json index bc806c44d8..5a47b94941 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "kvULpm0WhKiSPj8V", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json index b14a0b44ba..9875a638ff 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bFVYSPkynBBapFjq", + "filament_id": "OFDxxTpW", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json index dfb79c840d..26df92ae7b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CUU7knzm4cbe1giE", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json index 6c36ff1fbb..b936141d13 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "gcYvL572cumWZdnl", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json index a58ddca149..f53c9c41e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "cx99AH0C575XxAj9", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json index 35a01b21ce..263224a1ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "RrrKoR7MVD8IFQlq", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -89,6 +93,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json index a30f562b42..ff09b6e445 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "7VEPGuR16wNukAX2", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json index 38054ea5ae..3ee8ed9e42 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PETG.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PETG", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "H9uwlPw6m6Nf7qH5", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge HS PETG" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json index 0ee65ec44f..d511cdafe6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5M 0.25 Nozzle.json @@ -1,10 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5M 0.25 nozzle", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OmDped3weZ4uHAtY", - "filament_id": "GFL99", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json index 266200739a..c7060c9f4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "bfPaqPGaR5zpTsLk", + "filament_id": "OFIK2H3G", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json index 7169a76fdf..082b03f19b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oD592bif4ra0ADco", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json index 94da672d0f..6571d871b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ldhMY6F7v6nK8wwf", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json index edf25222de..a5b788402d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5vzOmbjHbkJXrgYM", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json index 310fc73a32..85c0b17327 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xSJk7LFpYKmckPQh", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json index 87c4ffd656..667e4045b9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xdFZUsj1cNLXdvT6", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json index ff783fbf10..15551e3faa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "JCQtuv8Abfz4jVRV", + "filament_id": "OFIK2H3G", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json index 7f4547dc19..ba4f6bc6d9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hzxRPyH1fqarsMuN", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json index ba5f92ca7c..4e69e17253 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oJsLlIIpxwGSoJTv", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json index f0fcb415c6..ad8f07ef26 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "hJbNZ381ERkZ0KUB", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json index eb253a97db..f202e50f11 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "BqavrNpwhXDXcZ3r", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json index a1acf9af42..7472f78b02 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "cgf4Qk4iHZh7zHN5", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json index b399b0cf77..3d97511a29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jFUS6233aq4XPgrn", + "filament_id": "OFIK2H3G", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json index 0c14a75478..2bc30165fc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "p31K69Srld6o4sQ2", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json index 5b4e2d04d4..b5308a0f8c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MwbYvnRIzlNmH81h", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json index 40c2ae337a..2c2ee97348 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rKhHmkqXYD2xN4K9", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json index 8871c32fc4..88184f5a92 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Dshsi3O7NvYYjXJt", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json index 82b514d1af..cd59be156d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mfnL6QEevCmTmOL0", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json index a5326ae2b7..3281932fe8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AGLHrHKWye0YTtNK", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json index e7f97301bd..f5de82a8bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px8qzmB2yFLoNl83", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json index 9d8e653cec..da6fd90d98 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "mwuIEsBz5bXEV68w", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json index 7b61a8668d..bb2d6256b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "TielygFT88owWg4J", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json index b15214f50b..149406f025 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "It2NI6OFhNEUvulz", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json index 4320a3fce3..22b1a35dcb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle.json @@ -1,9 +1,14 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "renamed_from": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle;Flashforge PLA Buint Ti FF G4 0.8 nozzle", "from": "system", "setting_id": "Qt3huWxoYpMEqEN6", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +67,12 @@ "nozzle_temperature_initial_layer": [ "205" ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], "overhang_fan_threshold": [ "25%" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json index c5a76c1d85..6fb09f1458 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y3XuavnnOMoHLGHA", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json index 034a1ee969..dccc672613 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle.json @@ -1,9 +1,14 @@ { "type": "filament", "name": "Flashforge HS PLA Burnt Ti@FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "renamed_from": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle;Flashforge PLA Buint Ti FF G4P 0.8 nozzle", "from": "system", "setting_id": "2HUxAWeolJIlxPs1", + "filament_id": "OF8O09RG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -62,6 +67,12 @@ "nozzle_temperature_initial_layer": [ "205" ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], "overhang_fan_threshold": [ "25%" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json index 355d9f6d1e..8002ac7ba9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge HS PLA.json +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge HS PLA", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vdaZBnDsmUC1fhDp", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge HS PLA" @@ -14,9 +18,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json index bf571e2ea3..f5d60553e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "u7rolQaTQz9U6veH", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json index 4672cfc77c..8b10616a83 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qTGTwiliWj3dSo9y", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json index 5576d9ff98..ec1ded13ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "wAkuJRTLWxGyBU0b", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json index c80656c59f..bc05757132 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "dbs29hQSQl9zuWis", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json index ad3daa8504..1e5eb664ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "XGNPvS2ps7Xn2fpx", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json index 8946fa929c..21ee8da2a6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "h33iEGZ7wPeBYKYQ", + "filament_id": "OFEvEfw5", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json index 80326684a6..2b4f6fc95a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "e58C9MdOWikIbbVR", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json index 8134b2b258..b75438e584 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "RX2Tg8KpwQpCbkLI", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json index 952162aaa2..3379bd5c39 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "C4DfYuQgDXIgK7mk", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json index ae3207a7b1..07653a9002 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA-CF @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PA-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "Yu7hL4izNsgDVqMT", + "filament_id": "OFGxuI0n", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json index 8fe4514502..3fe0018654 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA12-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PA12-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "1CevPV960sQWT3NF", + "filament_id": "OFgeM7nD", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json index 8dbd624a6e..8364fc4f3b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA6-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PA6-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "NGbZ8pQVTRKw28kp", + "filament_id": "OFZtOQtl", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json index bcaea09005..f3c1a27c16 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PA66-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PA66-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "5pVoGBvbiUlrJSwR", + "filament_id": "OFuV79ru", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json deleted file mode 100644 index 7437791891..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF C5", - "inherits": "Generic PA-CF @System", - "from": "system", - "setting_id": "8ZR8o3MKYxXLd70k", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Creator 5 0.4 nozzle", - "Flashforge Creator 5 0.6 nozzle", - "Flashforge Creator 5 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF C5" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PAHT-CF" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json deleted file mode 100644 index e83a93e113..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF C5P.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF C5P", - "inherits": "Generic PA-CF @System", - "from": "system", - "setting_id": "FSfGFl7FCutxXN2l", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "chamber_temperature": [ - "60" - ], - "compatible_printers": [ - "Flashforge Creator 5 Pro 0.4 nozzle", - "Flashforge Creator 5 Pro 0.6 nozzle", - "Flashforge Creator 5 Pro 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "80" - ], - "eng_plate_temp_initial_layer": [ - "80" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF C5P" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PAHT-CF" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "310" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature_range_high": [ - "320" - ], - "nozzle_temperature_range_low": [ - "300" - ], - "textured_cool_plate_temp": [ - "0" - ], - "textured_cool_plate_temp_initial_layer": [ - "0" - ], - "textured_plate_temp": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json deleted file mode 100644 index 1758aa7657..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", - "from": "system", - "setting_id": "ZlpBAM9uaS01sWAJ", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "50" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "30" - ], - "filament_density": [ - "1.06" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF G4" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PA-CF\n" - ], - "filament_type": [ - "PA-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 0.4 nozzle" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "overhang_fan_speed": [ - "60" - ], - "pressure_advance": [ - "0.02" - ], - "slow_down_layer_time": [ - "2" - ], - "support_material_interface_fan_speed": [ - "60" - ], - "temperature_vitrification": [ - "180" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json deleted file mode 100644 index c17b5eeed1..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PAHT-CF @FF G4P.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PAHT-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", - "from": "system", - "setting_id": "9DaSYBA2OI7Jj5zS", - "instantiation": "true", - "activate_chamber_temp_control": [ - "1" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "50" - ], - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "30" - ], - "filament_density": [ - "1.06" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_settings_id": [ - "Flashforge PAHT-CF @FF G4P" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PA-CF\n" - ], - "filament_type": [ - "PA-CF" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.4 nozzle" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "overhang_fan_speed": [ - "60" - ], - "pressure_advance": [ - "0.02" - ], - "slow_down_layer_time": [ - "2" - ], - "support_material_interface_fan_speed": [ - "60" - ], - "temperature_vitrification": [ - "180" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json new file mode 100644 index 0000000000..e88cbb31c3 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 HF nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4 0.6 HF nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.6 HF nozzle;FlashForge PC FF G4 0.6 HF nozzle", + "from": "system", + "setting_id": "Tj504IYSj6mUDR6E", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4 0.6 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 0.6 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json new file mode 100644 index 0000000000..6b1decef09 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.6 nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4 0.6 nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.6 nozzle;FlashForge PC FF G4 0.6 nozzle", + "from": "system", + "setting_id": "VfhBf8676qCWatKP", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json new file mode 100644 index 0000000000..e1740fb30d --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4 0.8 HF nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4 0.8 HF nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4 0.8 HF nozzle;FlashForge PC FF G4 0.8 HF nozzle", + "from": "system", + "setting_id": "ILBm9zXX5U4Oh82h", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4 0.8 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 0.8 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json new file mode 100644 index 0000000000..11ec475184 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 HF nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4P 0.6 HF nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.6 HF nozzle;FlashForge PC FF G4P 0.6 HF nozzle", + "from": "system", + "setting_id": "Kj6KWBfSuFALX2sd", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4P 0.6 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.6 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json new file mode 100644 index 0000000000..38ca36a685 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.6 nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4P 0.6 nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.6 nozzle;FlashForge PC FF G4P 0.6 nozzle", + "from": "system", + "setting_id": "XjAM4PMXLCBwdgQf", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4P 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json new file mode 100644 index 0000000000..dfdda7bfe2 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PC @FF G4P 0.8 HF nozzle.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Flashforge PC @FF G4P 0.8 HF nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PC @FF G4P 0.8 HF nozzle;FlashForge PC FF G4P 0.8 HF nozzle", + "from": "system", + "setting_id": "icAIkgRCZAjz6apM", + "filament_id": "OFWXCbVF", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_density": [ + "1.04" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PC @FF G4P 0.8 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PC" + ], + "filament_type": [ + "PC" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.8 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "120" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json index 1036a51c4b..7157336d3f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "3bguiaEtUsS8ULHW", + "filament_id": "OFrjacXf", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json index 9b0c2204a3..b550ae743f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "W6i9E22BVo11TeCm", + "filament_id": "OFrjacXf", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json index eac6f732f4..bc5485875b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PET-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PET-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PET-CF", - "inherits": "FusRock Generic PET-CF", + "inherits": "FusRock PET-CF", "from": "system", "setting_id": "vflpXTS9GwnODQDH", + "filament_id": "OFrjacXf", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_density": [ "1.1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json index 568a8f3adb..978245b58c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG @FF AD5M 0.25 Nozzle.json @@ -1,10 +1,13 @@ { "type": "filament", "name": "Flashforge PETG @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFMpxamb", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json index 656e7c3203..5dc78f3cdb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xOZQvdZa1YCcnjor", + "filament_id": "OFYYeMyQ", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PETG Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json index 9b1e4c0dff..3d5c4f4b0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Basic", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "YLLJ4xZI704GReej", + "filament_id": "OFYYeMyQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json index 712f68eb71..614ac50225 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8EUg1hTLfsyDPbnG", + "filament_id": "OFXiArjA", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PETG Pro @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json index 8d400e1b23..0ab5b18b04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "UKhV8A2DBc1xyNWc", + "filament_id": "OFXiArjA", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json index 0d98e07a7a..e15f011f1f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "dFZ1MmHjj1AAIaMm", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json index 0d59fd73fe..a3d431030f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ro3rt7IAJrA5aZD6", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json index e48a6c5082..7cc361d89d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "cTxrnqzr2wVt4Nj7", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json index d2f664b108..0a1b47b916 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "QA1KD03F0zj2zsVi", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json index 3c11370099..69cb6ee5e8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "EU8Q0XLjED23MNer", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json index 77cbe8d5b5..fcb6cbcaad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "XFSgx95whLw5FD08", + "filament_id": "OFXiArjA", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json index ea6f2e9f9c..746eb1cc61 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8x6yU2U8d5f67N73", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json index 78f83738b2..ecafe03349 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W0nfaSSZdg2HQkh", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json index e41dd59589..94b757887a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "AJcugKx4qHPJ3JAT", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json index 915bbb6753..8308064c52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "R0nZuLXEo5qA6Mt8", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -86,6 +90,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json index 825a5b8fed..8c1de1d947 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ql2BBBymzqEG7GKk", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json index 28c0815822..387adc60c7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "8Jc4eedkknqNB87s", + "filament_id": "OFXiArjA", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json index 23bdac347c..60bb0ae243 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "KU5tDHAKja1sCoHm", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json index 54ed2d165a..24ed205273 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "sb6jD3UZmb0DNIsC", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json index 19f6034de1..d993d05592 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4BB1wJLtsXus5eyY", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json index a2848c8bc6..d8bdc53caa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "m7oJx47UMlFctMkX", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -92,6 +96,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json index 0079505531..1bd2c4cdbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ozD2wU5UiORTtJsa", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json index 13da0b478b..df9948d863 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Pro", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "IQfUoy7gTmVmBDL5", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json index a199aa5af8..b1352eecc1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "W59yTyPnVv4LYiah", + "filament_id": "OFwjMiKL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PETG Transparent @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json index a623c9288d..697cd7b714 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "NRY4fsPNtnqs0kyH", + "filament_id": "OFwjMiKL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json index 65ff48dac6..2d29ad79b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "Ht7wzk8l0b1kv5tZ", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json index f3b8f3859b..f1b7a3b4ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "NJFHpa5HFHIyHSWu", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json index 56c3f5e1e5..252e51750d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF AD5X", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "UaObrRNSTwitC6jr", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json index 67a5179794..ed8c6fd0bb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "TtXy042wtT6nF3WB", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json index 1d26593dc4..b6395b0325 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "66OWHhGyuaFISu6v", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json index e2c1e5a662..3f0f32fc0a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "p5c6XJ1VD8cn2Meh", + "filament_id": "OFwjMiKL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json index 827d4fe8af..2ab27e8567 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "K8WkJmFy2V1zhYQO", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json index a92d725a2b..b3c10e9970 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LLK1hwKZhDU8SaGJ", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json index 1020d428d7..8c29f5a466 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LaUF2HJtBnpZF7Cd", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json index 63ba03680d..f38a075dea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "OUToXk8ddS1RPPUK", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -86,6 +90,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ] diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json index f88a28c989..d907e48ab5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "ywff8rI39XKjcocY", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json index 50e0bb7150..61db117e30 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PETG @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "C0VV5Uzsl4icRgKa", + "filament_id": "OFwjMiKL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_air_filtration": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json index 9d2ad17397..0dfa3dfee2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "kuCvwo6Phr6Ywhm4", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json index 1e1717f741..91c49b1c85 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Z2E69w9AevYg15tl", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json index 0e2202e3dd..0ac80ad83a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RkQaxwTjhJK0A3zr", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json index 087167a1a3..c920f757e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "YBQTMes2S9iJjKDf", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -92,6 +96,12 @@ "support_material_interface_fan_speed": [ "90" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json index 938ea5875a..0213d9e14b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "lCngVWG3q0FWsnrG", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json index f06fa5258b..7502aa35b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG Transparent", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "3Gv6MJ3RRja5pbOM", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json index e335c18107..a516f371a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "bcqYod61blJRzhK2", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json index 58c69dbf09..7a51f2615a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "CnFKOi7fFyS8QlKK", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json index 55f8d200b1..e401baa389 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF AD5X", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "eKWJW36I5fVHwjWD", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json index 2939916d3c..52901dd534 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "RXRERfs2oQKewpPS", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json index cc565d4999..dda9226bcd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "8Ns75F5n2fdQ8sDk", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "compatible_printers": [ "Flashforge Creator 5 Pro 0.4 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json index 514ce0d360..71c68991d0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4EgMPzlVo1rTeQ1e", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json index b44d204d6b..b0b2ec7360 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "K9ME1F4oJkPi8jRu", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json index 5a6548fd04..668e1af37a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9jCp0gTjB3Mt95Mj", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json index 796e883fd8..a0200ebe49 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF @FF G4P", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "d5OleuNNZBJK9vxH", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json index 78eef9b46a..57b297768c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PETG-CF", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "MpG61mwVUtJ7t602", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PETG-CF" @@ -14,9 +18,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json deleted file mode 100644 index 7a0caeba59..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Matte @FF C5", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "UQF0kAaXnZgJGK4o", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 0.4 nozzle", - "Flashforge Creator 5 0.6 nozzle", - "Flashforge Creator 5 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "65" - ], - "eng_plate_temp_initial_layer": [ - "65" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Matte @FF C5" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json deleted file mode 100644 index 36782a176c..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Matte @FF C5P", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "FpLoe6QrPXnrH019", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 Pro 0.4 nozzle", - "Flashforge Creator 5 Pro 0.6 nozzle", - "Flashforge Creator 5 Pro 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Matte @FF C5P" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json deleted file mode 100644 index 632ffa476f..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Metal @FF C5", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "YFbZ472BRNga6OpQ", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 0.4 nozzle", - "Flashforge Creator 5 0.6 nozzle", - "Flashforge Creator 5 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "65" - ], - "eng_plate_temp_initial_layer": [ - "65" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Metal @FF C5" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json deleted file mode 100644 index 01c9b77fe3..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Metal @FF C5P", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "AtVxriSKOrFZzUun", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 Pro 0.4 nozzle", - "Flashforge Creator 5 Pro 0.6 nozzle", - "Flashforge Creator 5 Pro 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Metal @FF C5P" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json deleted file mode 100644 index b5fddb2af6..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Pro @FF C5", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "47Q7YXoJ7rD7Vu21", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 0.4 nozzle", - "Flashforge Creator 5 0.6 nozzle", - "Flashforge Creator 5 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "65" - ], - "eng_plate_temp_initial_layer": [ - "65" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Pro @FF C5" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json deleted file mode 100644 index 913081a778..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Pro @FF C5P", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "v7vYsiPVka4c1CUW", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "compatible_printers": [ - "Flashforge Creator 5 Pro 0.4 nozzle", - "Flashforge Creator 5 Pro 0.6 nozzle", - "Flashforge Creator 5 Pro 0.8 nozzle" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_max_speed": [ - "70" - ], - "fan_min_speed": [ - "70" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_settings_id": [ - "Flashforge PLA Pro @FF C5P" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "nozzle_temperature": [ - "210" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "supertack_plate_temp": [ - "40" - ], - "supertack_plate_temp_initial_layer": [ - "40" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json index f799be321a..2db42a7b5a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json @@ -1,9 +1,12 @@ { "type": "filament", "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "instantiation": "false", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", "Flashforge Adventurer 5M Pro 0.25 Nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json index 15aa47eada..9a4844d6ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "3fuVuyVcn8U0bRJQ", + "filament_id": "OFJ3F2jm", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Basic @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json index 7632049ce6..1a56e9f162 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "FrRRUl5OT773uCju", + "filament_id": "OFJ3F2jm", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json index 8b80f0ab26..7c929b1363 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "gMmhMDqjmJfAYcbV", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json index ce1a822ce3..7f66423bbe 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "0OsrtqfIxrEJMwac", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json index 70f3451691..f698b05b32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "fuzWVrfZqekMETLK", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json index 4596bb8286..6893946556 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "FmUnckQofjunAtwr", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json index b4ee22beee..9a7c7080a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "Q0RsVOPLuMByur9c", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json index 02897b8eec..bd42e42f74 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "QXJgY8OPyaoYUI1D", + "filament_id": "OFJ3F2jm", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json index cc6a2a104e..4ed8203529 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R54l7TcwsjdPHvNB", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json index 036357790a..731b59748d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "MELEwYupDkT2DPxL", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json index 5612c00943..24eb70b646 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uGLvOoPAfksLO43M", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json index 3a96df6696..b9ab2a97ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "gGpKvk3rnLuTjOwo", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json index 690066aefa..2d81ff10df 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Yopqnj4b5ZVwigGx", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json index f1b070e45e..eedd218625 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "GrwiA2dArUGV9x2g", + "filament_id": "OFJ3F2jm", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json index 094f397950..9c6d20e0e0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QEfQrqMwApuSMqih", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json index fdf52ed1e2..1285b05257 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "BAPIn3eJAPGpscRJ", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json index e4e1359133..784f6dfd17 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "44BmRNRb6vlPq8qe", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json index 24871a3b60..4fdcf94869 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "ltJbhoAeAec9gxrS", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json index 3d09c85a7d..57305d4cc5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "GxdZiXdqns72ibQl", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json index df86f44ed6..12a8f6cd79 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Basic", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "5XKGaHUjxHECbnHO", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Basic" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json deleted file mode 100644 index ba9fa780ed..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4 0.8 nozzle.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Buint Ti @FF G4 0.8 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "H8IStdO8zEfSLYVE", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "Flashforge PLA Buint Ti @FF G4 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA\n\n" - ], - "compatible_printers": [ - "Flashforge Guider4 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "9" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "45" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json deleted file mode 100644 index 281d88bca0..0000000000 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Buint Ti @FF G4P 0.8 nozzle.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", - "from": "system", - "setting_id": "4wlkoKnU2bA7xhYO", - "instantiation": "true", - "activate_air_filtration": [ - "1" - ], - "additional_cooling_fan_speed": [ - "40" - ], - "complete_print_exhaust_fan_speed": [ - "40" - ], - "cool_plate_temp": [ - "40" - ], - "cool_plate_temp_initial_layer": [ - "40" - ], - "during_print_exhaust_fan_speed": [ - "40" - ], - "eng_plate_temp": [ - "50" - ], - "eng_plate_temp_initial_layer": [ - "50" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_settings_id": [ - "Flashforge PLA Buint Ti @FF G4P 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n;right_extruder_material:PLA\n\n" - ], - "compatible_printers": [ - "Flashforge Guider4 Pro 0.8 HF nozzle" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.025" - ], - "slow_down_layer_time": [ - "9" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "45" - ], - "textured_plate_temp": [ - "50" - ], - "textured_plate_temp_initial_layer": [ - "50" - ] -} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json index 82f569aaf8..6947f2afbf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "KXy0WyQp06VC2ICh", + "filament_id": "OFMkAW6r", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Color Change @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json index a9b9532a59..9e644f1006 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "9cGw7tXD8YJHEi1H", + "filament_id": "OFMkAW6r", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json index deb0deaa91..4f5eca6889 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "TF6BeOl0patjpPaa", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json index a46c00c184..950effa7cd 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "nkYeEBo8NdkJulAP", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json index 2e019a2a16..bf6dfb230f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "yEDfsOsogfZbNBVX", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json index 1c348e66cd..23bfa9be0c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "xZmQdh487UMtvBRu", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json index 378c5fce63..6f5e1afb0e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "rc00SOyIg30uE3Da", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json index 1de1fa9904..a465a78ea6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k1OiugasUs7baG1f", + "filament_id": "OFMkAW6r", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json index c31f2c817e..31a99ea10e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "G2Et7kPHptMESzQ0", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json index 0b16a42ba2..07fe12f973 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zsOdmFGBSF9UySMN", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json index b7801aaf6b..3a778e5472 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "oxRMuvBMu9qdQWUQ", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json index 45edb3fe4c..8657a4010e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "5hwNJvvLtb75XBBg", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json index 90a0c47630..c185b26f3d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "mGj8VEyOnnogpkmF", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json index 09f4c73aaf..0709fa3e08 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "HXVX4mDeUSfW2RgL", + "filament_id": "OFMkAW6r", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json index 8a51ee4c0f..9742b8aefc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "JDcRA6apekWLXPvH", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json index 6ba6fb73f3..4d3681736e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "b5GJpvKYktP4vZpj", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json index 4962ce6694..6eb75a8f52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "RjUpQV6iQxTircwj", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json index f48156cb07..26609fd995 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "9DEZ6SmFdgfluhsR", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json index fecaa9f06e..e660d0f569 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "girTMkusNTfY04rz", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json index 552c55d640..29f68b0f62 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Color Change", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "pCQ2qmeXUyJzP7kS", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Color Change" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json index 79ae2f6c94..b0f7d6bf89 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "a1jTbQsflD7SDFih", + "filament_id": "OFJJ0Ar3", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json index 95f1514864..df9cc2d3e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zyCRsy0mHRgyuQqt", + "filament_id": "OFJJ0Ar3", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json index d6cd08474c..d66bf2b24c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "y8TNaRebTrmFem10", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json index 2df9a04c0a..65dffd3601 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "qju0AMvvq0B5Glny", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json index ed84105332..1067b50067 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8gGBOEcNvlbZxGW", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json index 798abe1a32..2ce8486cb0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "0RkkIcIUFgwOFTBY", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json index 904ceb7fc0..373a81bcdc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "9qVabnSl8xfKSIYX", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json index e18d7b94f3..e44bbe16e5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DL7lxDI35YErCTWX", + "filament_id": "OFJJ0Ar3", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json index da3b64cd0f..efb7dad130 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "koEC7DteUoXHUd2z", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json index 88ccddeb08..64b442938c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "D69fWcXioFcpoUjC", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json index ca7ba95268..d20dc55d41 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "rfiQUncdSExEaK0U", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json index 1783f4d0f8..346dfad0a0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "WX8lK8efXIVcpjFf", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json index fdf44498b8..3b999c0734 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Tzvo3oILQJc4SQko", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json index 6115ca4780..b29877be60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZQYrljZtu3es26hB", + "filament_id": "OFJJ0Ar3", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json index f62409f28a..1b8e75eb32 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Y5gm20O4yCCDIoC0", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json index a91a4252cf..d39114697f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "80vSQxnHfd5ZUy5h", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json index da7d433275..185440fba4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UZi7T5VoasmXWyH5", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json index b915367cb3..ec0581df11 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "6UlSb4fqHIMdMxkO", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json index c77a90240b..c1818186cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "H2Cr4B5VUaxyYsN0", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json index 45ca21acee..785e26ace5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Galaxy", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "NJrc0UZ54Fq8MaqF", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Galaxy" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json index 7116bb03b2..5702843039 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "k8iibCO2EnlTSRyi", + "filament_id": "OFdqkWtz", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Luminous @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json index acda8964fa..44a6f663ef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "pACct3L7duMh3hfx", + "filament_id": "OFdqkWtz", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json index dcc6311055..3e106a6eda 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "GdvXL8SrKrYHxSgZ", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json index 23d5a93a94..446137267f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SLYD2YcQTQgbSjIF", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json index 32a027e5f2..d605b1e444 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "kOobFSlqEG9Qe0d1", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json index 43a46d9f06..5efeada6af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "4sE1LTVVuRglRbpD", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json index 9fb04c73d9..485a3b51a2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "jEUZyaEIBf2eXXeh", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json index fa64b028ed..3019fb194c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "qZ6kKjRCMfe4Ql3F", + "filament_id": "OFdqkWtz", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json index 7b6a3404bc..0b58399215 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "xPPSRmadqfqCtRF2", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json index 773aa67d02..792049300a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "aWVXIk1xVa9URR1D", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json index 042492ab8f..a218752f68 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "KhBF7hHHVPzqiAca", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json index baeabf324a..615e05d2e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "sTplnj3gMAzwtLWE", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json index be4f7f3ed7..cc630d58ab 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "zJFUJKDJRYi1pRL7", + "filament_id": "OFdqkWtz", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json index 8a7622fb59..65e6995584 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "vXPXOKD8vNJlujM1", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json index b544994aeb..7704d5f2b8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "purqxjmWiflDrnik", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json index e9a26e8c2a..b9f94e604e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "qraQ97uusigB63hv", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json index 0fae0389cc..5ce6582146 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "Z1NCX8XMyIVlOlWn", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json index 4393acab05..46151a4496 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Luminous", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "s620OFLTgFT4Ds2A", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Luminous" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json index 252743e5f2..30c0a43a1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DcbISTLvKNMZRzKx", + "filament_id": "OF6qAuyi", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Matte @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json index e302c58bfe..98964015a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4fwlIrzy6O2EsyBZ", + "filament_id": "OF6qAuyi", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json index b461ab7c4d..2774450e57 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "BVmVfNCuy8HDhcEI", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json index b70192398e..f03dc70fd1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "WRMePGzDGdEGiqNv", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json index 0648d80a38..f009759cad 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "thnbuaLDDlGrkrdY", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json new file mode 100644 index 0000000000..230a723624 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5.json @@ -0,0 +1,87 @@ +{ + "type": "filament", + "name": "Flashforge PLA Matte @FF C5", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Matte @FF C5;Flashforge PLA Matte FF C5", + "from": "system", + "setting_id": "ct3nO6w9j58gqDI0", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 0.4 nozzle", + "Flashforge Creator 5 0.6 nozzle", + "Flashforge Creator 5 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Matte @FF C5" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json new file mode 100644 index 0000000000..0d7543cc09 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF C5P.json @@ -0,0 +1,78 @@ +{ + "type": "filament", + "name": "Flashforge PLA Matte @FF C5P", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Matte @FF C5P;Flashforge PLA Matte FF C5P", + "from": "system", + "setting_id": "Bn2BaG7f1tkvlyYI", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 Pro 0.4 nozzle", + "Flashforge Creator 5 Pro 0.6 nozzle", + "Flashforge Creator 5 Pro 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Matte @FF C5P" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json index 67b9a2c858..4898587111 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "cnPwhLyBq6JL8gEA", + "filament_id": "OF6qAuyi", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json index 6f03f6b8cb..2ff2a07363 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8b9q1FfVljPmKoEt", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json index fe1ca45413..f49e19c292 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o9dOrLgL6efF19O1", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json index 45fe70381f..98e44f21f4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "QoRmDvhoeGi6Z2xv", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json index d1e83cd7b3..7eda7a4b62 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "dHyuoORAUGLtlGkJ", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json index 9090bf2287..698511967d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "OgqVyIHfy3U8Dc6d", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json index 682ba2be12..c9a63d60cb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "g1gnICJ3u6hpGazQ", + "filament_id": "OF6qAuyi", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json index cf6436ad19..c868aa0137 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "feXpVbDM5ON5mwg0", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json index ef02344293..fc205bb684 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XMnZQ1AxXPJqpqRX", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json index d9fcfcc693..42dc4c9c15 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Ke0bRKPNKSsVMO1Y", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json index 57ac007de8..1d76131870 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IRC2n4GaofxvvyTt", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json index 185d66e796..63d6f372e3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RN4wdTL0qccM4huZ", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json index b6a9949867..781357b1a1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Matte", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "ipMevDMORKqZYdvD", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_max_volumetric_speed": [ "22" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json index 758de4bbdc..1adef03eef 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vwwb5nfO63U1ErCn", + "filament_id": "OFAebKg8", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Metal @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json index 7685f4ea90..e786ecd378 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ekq4MRPyzlYxRhbX", + "filament_id": "OFAebKg8", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json index bb880ea106..27caf06739 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "uusF7Vz94HOwoQF0", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json index e34f8d298e..4f01562a04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "sHZWzrZO8PP0QYZR", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json index 5d6a2fe948..f85391cb2b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "bxwjEFI8HmNY8JI6", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json new file mode 100644 index 0000000000..d382637556 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5.json @@ -0,0 +1,84 @@ +{ + "type": "filament", + "name": "Flashforge PLA Metal @FF C5", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Metal @FF C5;Flashforge PLA Metal FF C5", + "from": "system", + "setting_id": "AdjRSTc9RZG6mJ1e", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 0.4 nozzle", + "Flashforge Creator 5 0.6 nozzle", + "Flashforge Creator 5 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Metal @FF C5" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json new file mode 100644 index 0000000000..965b6fe595 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF C5P.json @@ -0,0 +1,75 @@ +{ + "type": "filament", + "name": "Flashforge PLA Metal @FF C5P", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Metal @FF C5P;Flashforge PLA Metal FF C5P", + "from": "system", + "setting_id": "k0AQO2dGbk0qvxzO", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 Pro 0.4 nozzle", + "Flashforge Creator 5 Pro 0.6 nozzle", + "Flashforge Creator 5 Pro 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Metal @FF C5P" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json index 89436d242d..bf884cf46e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "VvMaIJwFk4Q6KX4p", + "filament_id": "OFAebKg8", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json index 6239ad2bad..8fcf56e6b6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "5xqdqoj2l50FegPF", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json index 5f91a2f652..352adaa681 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "R79SbWA9i2OAu2ee", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json index 8c25b77b20..8d78236629 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "zjIN4KzIOwI1VwOc", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json index add7f82214..aaabcaac60 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "UxMNNil2KnWvAJ4q", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json index f972d75cae..b1035a4629 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "57i6iKrVYUS5UiBT", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json index 9563f42a78..d7697ccb8e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "vVKalJViJuBvlHkK", + "filament_id": "OFAebKg8", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json index ae0bb23e05..bf06971c23 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "IYPw8a9tkpuf95uH", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json index d33ab097f3..7d85d6e56f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "I0bULoVAbtVfQoCy", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json index 97b47d1fc6..9c6e1b92b0 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "DbPo3ay2e4a002AB", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json index eb7cdfc00b..a79ce03a5b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "uztv4hhm2O3T93zZ", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json index 627883c18c..82bf12c247 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "UFWWrhfgS7N36Y8W", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json index fc1ca9b02d..90d419bfa5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Metal", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "UD5i0ijsirfieUvb", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Metal" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json index 04aeb1f095..c956e6a5ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "DIMoIGOGedN17WbO", + "filament_id": "OFm4SivL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Pro @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json index 7101090b3f..eda5f5745f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "SC5LJcecBaEG5by3", + "filament_id": "OFm4SivL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json index fcbcbdf68b..d56ed06c1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "t9lPSFnwLDk0ARIp", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json index 890831fd51..423b8743a7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "SBSlOEwZSvZHeX4r", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json index 425052368c..0ab1f650f2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "DbWTm2H71izMWmpx", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json new file mode 100644 index 0000000000..e02f21dbd3 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5.json @@ -0,0 +1,87 @@ +{ + "type": "filament", + "name": "Flashforge PLA Pro @FF C5", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Pro @FF C5;Flashforge PLA Pro FF C5", + "from": "system", + "setting_id": "30eBjTZFg6vDZkc0", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 0.4 nozzle", + "Flashforge Creator 5 0.6 nozzle", + "Flashforge Creator 5 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Pro @FF C5" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json new file mode 100644 index 0000000000..fedd74b2c5 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF C5P.json @@ -0,0 +1,78 @@ +{ + "type": "filament", + "name": "Flashforge PLA Pro @FF C5P", + "inherits": "Generic PLA @System", + "renamed_from": "Flashforge PLA Pro @FF C5P;Flashforge PLA Pro FF C5P", + "from": "system", + "setting_id": "xOvxorpWP37CQCfi", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "activate_air_filtration": [ + "1" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "compatible_printers": [ + "Flashforge Creator 5 Pro 0.4 nozzle", + "Flashforge Creator 5 Pro 0.6 nozzle", + "Flashforge Creator 5 Pro 0.8 nozzle" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_max_speed": [ + "70" + ], + "fan_min_speed": [ + "70" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_settings_id": [ + "Flashforge PLA Pro @FF C5P" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "40" + ], + "supertack_plate_temp_initial_layer": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json index 4cd37e4758..a2ea5e43ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ZENqqRqvEOeloAgs", + "filament_id": "OFm4SivL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json index 72234ddfd2..f3dd8e04cf 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YcXuvz3qYHtVoWxv", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json index b8ad354879..7dc8528606 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "prItyXNphhuPCAce", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json index 6bfe5cb3cd..57e815ab25 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "83zDmjaAgxxIt7KU", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json index 5a9918addf..35bce9d866 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "px3O28Olb9LExqfT", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json index ed66794aab..b04f49d81b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "QYgsCCHP3Khqrzh3", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json index cbc1d80955..4e1e4c5ac7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "wV01bqvZ6MRaEibZ", + "filament_id": "OFm4SivL", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json index 549f5a1562..07b82edf7f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1ro9wHPYhuMHNiYe", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json index 856389e1e2..433318fc86 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "4W4a7c9ugUVwvvmn", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json index 6da7732f58..87031ba66b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "CloRo3qxvzxHZuIP", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json index dd788c5a94..281a34a2c5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "QgUbP07tIXmFysEb", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json index 61522df2c7..8d29d1823c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "6mvGOtkPZT6ROboo", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json index 2cb335b80e..e70b87f9a9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Pro", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "vI875WYbMyQeMwlh", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Pro" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json index b028494888..b232f00632 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json @@ -4,6 +4,10 @@ "inherits": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "gxl3i7jTwkzrKxF4", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk @FF AD5M 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json index a2fae947b8..1a604e9250 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "mx6NWRkqyo2U12XQ", + "filament_id": "OFgjgN35", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], @@ -30,7 +34,7 @@ "Flashforge PLA Silk @FF AD5X 0.25 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.25 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json index 645ecbc0c0..3bbc1afcb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "YH9IHXOFMKwcTLyA", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" @@ -21,7 +25,7 @@ "Flashforge PLA Silk @FF AD5X 0.6 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.6 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json index 4f7e3d3014..36a3c15a4f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "IfAieG0OAG807xlu", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" @@ -21,7 +25,7 @@ "Flashforge PLA Silk @FF AD5X 0.8 nozzle" ], "filament_type": [ - "SILK" + "PLA" ], "compatible_printers": [ "Flashforge AD5X 0.8 nozzle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json index 4e74bdb6cc..ce5ecdb2aa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF AD5X", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "N6J7QqQ7TIgM3MyW", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "50" @@ -21,7 +25,7 @@ "Flashforge PLA Silk @FF AD5X" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "60" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json index 9c0eec6844..de9c9be46a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "OIsfpi49wEoF0ekO", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" @@ -53,7 +57,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "65" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json index 405b1c46c0..f82bc5efc4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA Silk @System", "from": "system", "setting_id": "xxeZ6VPjRFevxDnK", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" @@ -56,7 +60,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json index a8bbced435..84ee8494b5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "x5m17Z5UpqpTtwgF", + "filament_id": "OFgjgN35", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json index a3475428a1..ec7a71f35f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "2GZp8yjrY1OioFDi", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json index 19a2957ccc..36090afaf7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "U0XtCVUhIMnidhbR", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json index 7cb6dc67bd..558015cb87 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8j9kaYy3ghkF81Cu", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json index a838f359d4..c37e0f6341 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "E0LeJwSxaniDkB0b", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json index 718ad9c32c..b7f4f619ec 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "8rggqgJ9kg9yLE28", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json index fb38d8488a..7e2cbef575 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "hnWRLUwnfXiwnqBM", + "filament_id": "OFgjgN35", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json index 4bccc9c4ac..047cdcf879 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "uY4OWhIytHMz4rWq", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json index 4906f57d2c..b5f36b7483 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YSkkXd9EhhEHvGpf", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json index 135192e979..a41d10e40a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "XlxXZj9Wi1D6IwCE", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json index f05f9f8e57..e95f7ad1de 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "IPyXBSnMCAikjI9V", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json index 240fae4d59..df4894cdb1 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "f3gJsovSmDKoA7BP", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json index 205dc244a6..15239129d4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Silk", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "vZb7BvbyVWkZv3rR", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Silk" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json index 16dfdcf81c..c6e10f3502 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5M 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "ojYsAanAPqYhgFoe", + "filament_id": "OFV5c8hG", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_settings_id": [ "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json index 29b57abe19..e90f5c1545 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "xVYaNvQwM2chTkPe", + "filament_id": "OFV5c8hG", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "complete_print_exhaust_fan_speed": [ "80" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json index 3cf5581d40..3786cf7abb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "o8lsEnMIiHHorJhb", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json index 09bf6a4f97..c7fb93bca2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "oXlxQJY0K6Dnri7e", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json index 303ab7f286..b6802db1b4 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF AD5X", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "XKpFulrvvrfE56va", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json index 3bfa2b7a10..3d35049e4e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "jmVmKMUCcowszvVp", + "filament_id": "OFV5c8hG", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json index c8810e8348..5cf32f2c38 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "yeh5cd0tAHtHzdoQ", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json index a00dcdc264..27380eb9e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "q2Zi0YluaYpG3Ktf", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json index 8f226d79ad..42df4a0ea9 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4 HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4 HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "1qXV6AJqPpAwX1YK", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json index 43fff03323..7a11476c06 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "YsyGGOGqUVkEqkIr", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json index c53e5bc830..013e84740b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json @@ -4,7 +4,11 @@ "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", "from": "system", "setting_id": "4L3Zm1YIxs8J8dp9", + "filament_id": "OFV5c8hG", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json index 7027ffab33..4a975e6f20 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "UVvd018dTbygqTgy", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json index 64ffa609af..0781dd641f 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "F0k8kkgWM5FkLAzo", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json index f61281e75d..9b4065c982 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P HF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P HF", - "inherits": "Flashforge Generic ABS @G3U", + "inherits": "Generic ABS @Flashforge G3U", "from": "system", "setting_id": "Oapl8InwbkwNSIDl", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json index b887d42ff2..35ccf42632 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "NiB6Yb4b0auyn9KQ", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json index c000cb76e4..4be3dba6ea 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA Sparkle", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "LYtdPgec1hBLhoQA", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA Sparkle" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json index a9527280aa..245e401283 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "QRyISvTy06kCwxKo", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json index 6e4cbcfdfe..f456d8c7db 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "rmnF24E3SuwzRscH", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json index 23b1230036..a39646f621 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF AD5X", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "BXPI5Pkp7a6pLrCh", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json index de99144bf5..a1b271569e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "rBm25DRY1PAkEJ4r", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json index 896f61dd93..189dba715a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PLA-CF @System", "from": "system", "setting_id": "xReo12oteZ4ECNJN", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json index 42ddb83ec2..292cf5972c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "9PgjgxU7pLl2Dfpe", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json index 74d834e078..0faba78623 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "RuNKzuIsw7F1ogmG", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json index e588dbdf2c..77a590f1d6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle", + "inherits": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "YPuMCHNGDWh0FpIB", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json index 9a8e75a439..3bd2e72000 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF @FF G4P", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "3uC056Y171ZjnQE6", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json index 391c0e86ec..10f87a860a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PLA-CF", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "JxNlb64lTODaaQhU", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge PLA-CF" @@ -14,9 +18,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json index 48ba8894c7..4242f0f8a5 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -1,9 +1,12 @@ { "type": "filament", "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFV8Mxqx", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "false", "compatible_printers": [ "Flashforge Adventurer 5M 0.25 Nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json index 2e049a81f2..e559b22a88 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "DhC7iFgNKCAq4Zkt", + "filament_id": "OFLC1oRH", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json index d55cb8d4b3..96fa32ad12 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "Jws2AaLWaNyZhqX4", + "filament_id": "OFLC1oRH", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json index 1808ab60c8..51578f824a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PPA-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "MFItX51zZO0KYjdk", + "filament_id": "OFLC1oRH", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json index b7cb615d2a..e6f3519e1e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPA-GF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PPA-GF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "KITjZXcyM4N8cVyu", + "filament_id": "OF5BN24W", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "fan_max_speed": [ "40" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json new file mode 100644 index 0000000000..3df5398f11 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 HF nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4 0.6 HF nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.6 HF nozzle;FlashForge PPS FF G4 0.6 HF nozzle", + "from": "system", + "setting_id": "5x1ye2DAm3GvzmZJ", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4 0.6 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 0.6 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json new file mode 100644 index 0000000000..1de4d51745 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.6 nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4 0.6 nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.6 nozzle;FlashForge PPS FF G4 0.6 nozzle", + "from": "system", + "setting_id": "yZoLC24CeKEyvkgA", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json new file mode 100644 index 0000000000..e8014ddfec --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4 0.8 HF nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4 0.8 HF nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4 0.8 HF nozzle;FlashForge PPS FF G4 0.8 HF nozzle", + "from": "system", + "setting_id": "EsrSpDB3Kx35qb76", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4 0.8 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 0.8 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json index 4cc5686f67..fd2f854067 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PPS @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "6NjEQ6RJKUAOrSLw", + "filament_id": "OFlgMgNM", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json new file mode 100644 index 0000000000..f731181d65 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 HF nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4P 0.6 HF nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.6 HF nozzle;FlashForge PPS FF G4P 0.6 HF nozzle", + "from": "system", + "setting_id": "Uu82gm86ESeidnRT", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4P 0.6 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.6 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json new file mode 100644 index 0000000000..3eab34befc --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.6 nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4P 0.6 nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.6 nozzle;FlashForge PPS FF G4P 0.6 nozzle", + "from": "system", + "setting_id": "G6pIMZA5RC15kJoC", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4P 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "320" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json new file mode 100644 index 0000000000..a2662d8cc9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P 0.8 HF nozzle.json @@ -0,0 +1,121 @@ +{ + "type": "filament", + "name": "Flashforge PPS @FF G4P 0.8 HF nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS @FF G4P 0.8 HF nozzle;FlashForge PPS FF G4P 0.8 HF nozzle", + "from": "system", + "setting_id": "SsK15iSJxrQWI5wy", + "filament_id": "OFlgMgNM", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "activate_chamber_temp_control": [ + "1" + ], + "chamber_temperature": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS @FF G4P 0.8 HF nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.8 HF nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "125" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json index 940f6e85f8..b841f62e6c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge PPS @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "vFMKqNjQjlNxwvDI", + "filament_id": "OFlgMgNM", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_chamber_temp_control": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json index 0492ebe524..58b2d242a8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "ihXPnFERMjbBgrP5", + "filament_id": "OFTSXxzE", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json index e11ff56c17..5f261953b3 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic PPA-GF @System", "from": "system", "setting_id": "UWFjBmSpUkZLBvoO", + "filament_id": "OFTSXxzE", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json new file mode 100644 index 0000000000..b33fcb95c9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4 0.6 nozzle.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "Flashforge PPS-CF @FF G4 0.6 nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS-CF @FF G4 0.6 nozzle;FlashForge PPS-CF FF G4 0.6 nozzle", + "from": "system", + "setting_id": "mMTi9QaW5xVch3an", + "filament_id": "OFTSXxzE", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS-CF @FF G4 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS-CF" + ], + "compatible_printers": [ + "Flashforge Guider4 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "220" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json index 374063554b..e4ee9e483e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PPS-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "oSGlx5mtGh07BnOz", + "filament_id": "OFTSXxzE", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json new file mode 100644 index 0000000000..48edb216c5 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P 0.6 nozzle.json @@ -0,0 +1,109 @@ +{ + "type": "filament", + "name": "Flashforge PPS-CF @FF G4P 0.6 nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", + "renamed_from": "FlashForge PPS-CF @FF G4P 0.6 nozzle;FlashForge PPS-CF FF G4P 0.6 nozzle", + "from": "system", + "setting_id": "dSI79hoaa9jLGvhz", + "filament_id": "OFTSXxzE", + "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "40" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "40" + ], + "eng_plate_temp": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "fan_cooling_layer_time": [ + "5" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "175" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PPS-CF @FF G4P 0.6 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PPS" + ], + "filament_type": [ + "PPS-CF" + ], + "compatible_printers": [ + "Flashforge Guider4 Pro 0.6 nozzle" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "nozzle_temperature": [ + "315" + ], + "nozzle_temperature_initial_layer": [ + "315" + ], + "nozzle_temperature_range_high": [ + "320" + ], + "nozzle_temperature_range_low": [ + "300" + ], + "overhang_fan_speed": [ + "40" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "5" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "220" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json index fe1b4c1f6b..dce01c64a7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF @FF G4P.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PPS-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "i5DllSvYjVPO04Su", + "filament_id": "OFTSXxzE", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json index c46bfe3da4..ba10c3fadc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json +++ b/resources/profiles/Flashforge/filament/Flashforge PPS-CF.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Flashforge PPS-CF", - "inherits": "FusRock Generic PAHT-CF", + "inherits": "FusRock PAHT-CF", "from": "system", "setting_id": "l3dYtVM52X0UMRix", + "filament_id": "OFTSXxzE", "instantiation": "true", + "filament_vendor": [ + "Flashforge" + ], "filament_flow_ratio": [ "0.99" ], diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json index a913609484..90d94b9c29 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "rSYGG2ni41NDVw6l", + "filament_id": "OFaaddbQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json index c40ba42a92..03fdb6117e 100644 --- a/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge PVA @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic PVA @System", "from": "system", "setting_id": "nwgbMjLRJLtJ04ri", + "filament_id": "OFaaddbQ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json index 528998a24c..1514862e44 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "f75oElm4zB0hukIj", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json index 0e23841975..d6fda96505 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "o4KYTpJF6KksX2mg", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json index 749a00856c..27d6515ccb 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "HUSkDZL6rCpz0lRk", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json index 085cf59c5b..7db519170a 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "8xgu0AnMuKbPWyVd", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json index a5b488fc99..2123c33993 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "Rgqt3MjxOye5EaFt", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json index 3f901a03a4..a5ce644702 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 65D @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 65D @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "PBFsW5qhVbQteYh5", + "filament_id": "OFSDfduA", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json index 489c5fb15f..897054d8ee 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "TPbHmcFyPyjvoERv", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json index a959585cd8..adb4820faa 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "zLMgsyDmdoXHhqFv", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json index 33834e19e3..5c5f690cd2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF AD5X.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF AD5X", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "ThakVhjfpgnAlEVH", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json index 4aad5af360..b67887cc8b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "M0ozqaD3jSKoD6fm", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json index 0fd54408ca..ae6049673b 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "ob8IkvzNt9CWCzbk", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json index 31b83ce172..37bef9c3f6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "NzxX1lyRJ7wLUihV", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json index 430ac28bd4..c5b24e9e04 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "4FIGiheSGvSJPw3s", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json index f5bff06851..23cd8d6326 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.6 HF nozzle", - "inherits": "Flashforge Generic PETG @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "1GNqSBaQitzhYSx7", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json index cb901a9bcc..eb2a423bca 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.6 nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.6 nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "eOhMygyxaccdov7o", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json index f5c8f2c553..f4b91222e7 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P 0.8 HF nozzle", - "inherits": "Flashforge Generic PLA @G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge G3U 0.6 Nozzle", "from": "system", "setting_id": "LxooKiOkRncktNLf", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json index e4f518e648..9e675ccd52 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF G4P.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "HdoJfbQr0uwQ6Vwb", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json index d9f7ec4840..aa2f6251dc 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A.json @@ -1,9 +1,13 @@ { "type": "filament", "name": "Flashforge TPU 95A", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "J4EaFhnpkLDcl5wH", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "filament_settings_id": [ "Flashforge TPU 95A" @@ -14,9 +18,6 @@ "Flashforge Adventurer 5M 0.8 Nozzle", "Flashforge Adventurer 5M Pro 0.4 Nozzle", "Flashforge Adventurer 5M Pro 0.6 Nozzle", - "Flashforge Adventurer 5M Pro 0.8 Nozzle", - "Flashforge AD5X 0.4 nozzle", - "Flashforge AD5X 0.6 nozzle", - "Flashforge AD5X 0.8 nozzle" + "Flashforge Adventurer 5M Pro 0.8 Nozzle" ] } diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json index b7cd53996e..5a4e304862 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "fd5bACFa33J7aTdp", + "filament_id": "OF8GtyKJ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json index 14bf91e144..428afe7f1c 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-64D @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "hrcELA2qEMkZ6Wvj", + "filament_id": "OF8GtyKJ", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json index 30a92209c4..407e92aed8 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "Lis7BZ3lMkoX5KQt", + "filament_id": "OFwlZ7gH", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json index dd8ddf201b..611724b460 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-90A @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "xY03Hiidu5YNSUyZ", + "filament_id": "OFwlZ7gH", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json index 6d5d7a0455..0c27bb94c6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "AHu6wNV3zcPBusOF", + "filament_id": "OFx0WlzS", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json index f52588da65..e3b05721e6 100644 --- a/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Flashforge TPU-95A @FF C5P.json @@ -4,6 +4,10 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "8MBRqfLIRdhxk1dF", + "filament_id": "OFx0WlzS", + "filament_vendor": [ + "Flashforge" + ], "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json index c4ebf2a360..0ac23a453d 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge ABS @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "9pxqGyfi52tuVmZ1", - "filament_id": "FFF02", + "filament_id": "OF5SJ3jz", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json index ca504e0e95..7576c467af 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PETG @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "tYidxo83oreZoecT", - "filament_id": "FFF03", + "filament_id": "OFMpxamb", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json index 8234e6f07a..8f3483dce2 100644 --- a/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json +++ b/resources/profiles/Flashforge/filament/Flashforge/Flashforge PLA @FF AD3.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "qnKvMRUvJ7tRJ4dX", - "filament_id": "FFF01", + "filament_id": "OFDKgoqx", "instantiation": "true", "filament_vendor": [ "Flashforge" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json index 163a76b62f..8aadbbd478 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 HF nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "2JQjReK012FHpHIt", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" @@ -35,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json index 539b153d74..08fd04115d 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "3SCkpXXK8VcQBMQn", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json index 70ed04fc55..093175981e 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4 0.8 HF nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "dgpcOrf7282LTh1d", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" @@ -35,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json index d5ce57aeee..0fd54aa769 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 HF nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "e85SCr6SV9kQD2hm", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" @@ -35,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.6 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json index 85a4492107..b3f46d40f3 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "eGXsHN5B9BZViVNe", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json index c7c38d13bb..1b4848c0d8 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "8JSb4JqZ7zLi8uPI", + "filament_id": "OF7pjCsO", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" @@ -35,6 +36,9 @@ "filament_start_gcode": [ "; filament start gcode\n;right_extruder_material:PA" ], + "filament_type": [ + "PAHT" + ], "compatible_printers": [ "Flashforge Guider4 Pro 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json index a81bd9fe8c..5ad0cca8f6 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5.json @@ -2,9 +2,14 @@ "type": "filament", "name": "FusRock PAHT-CF @FF C5", "inherits": "Generic PA-CF @System", + "renamed_from": "Flashforge PAHT-CF @FF C5;Flashforge PAHT-CF FF C5", "from": "system", "setting_id": "gZqAGVOlWR79n7hN", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json index 542cced451..b23f871add 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF C5P.json @@ -2,9 +2,14 @@ "type": "filament", "name": "FusRock PAHT-CF @FF C5P", "inherits": "Generic PA-CF @System", + "renamed_from": "Flashforge PAHT-CF @FF C5P;Flashforge PAHT-CF FF C5P", "from": "system", "setting_id": "nJF1lCOavNNh4yHs", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json index 37dcd0816f..5e18b7b64c 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "TZ0nKqxoIYk2mPh8", + "filament_id": "OFKW5hEW", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json index 75094206d5..2fb2e00e21 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4.json @@ -1,13 +1,24 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", + "renamed_from": "Flashforge PAHT-CF @FF G4;Flashforge PAHT-CF FF G4", "from": "system", "setting_id": "nH6pwFYsPyBzL1EB", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "activate_chamber_temp_control": [ + "1" + ], "additional_cooling_fan_speed": [ "0" ], + "chamber_temperature": [ + "60" + ], "close_fan_the_first_x_layers": [ "3" ], @@ -54,7 +65,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json index 6dee0fbd50..adc2063edd 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PAHT-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "yok12IOGZzGot5Ll", + "filament_id": "OFKW5hEW", "instantiation": "true", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json index 9beb4e6e38..263323a60a 100644 --- a/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PAHT-CF @FF G4P.json @@ -1,13 +1,24 @@ { "type": "filament", "name": "FusRock PAHT-CF @FF G4P", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", + "renamed_from": "Flashforge PAHT-CF @FF G4P;Flashforge PAHT-CF FF G4P", "from": "system", "setting_id": "wmWMf3MfmbfZx2o8", + "filament_id": "OFKW5hEW", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "activate_chamber_temp_control": [ + "1" + ], "additional_cooling_fan_speed": [ "0" ], + "chamber_temperature": [ + "60" + ], "close_fan_the_first_x_layers": [ "3" ], @@ -54,7 +65,7 @@ "; filament start gcode\n;right_extruder_material:PA-CF\n" ], "filament_type": [ - "PA-CF" + "PAHT-CF" ], "compatible_printers": [ "Flashforge Guider4 Pro 0.4 nozzle" diff --git a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json index de609cdc0b..6d4221e732 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET @FF G4P 0.8 HF nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PET @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Xqb0GQluin2jUQyL", + "filament_id": "OFKTGKJU", "instantiation": "true", "close_fan_the_first_x_layers": [ "3" @@ -14,9 +15,6 @@ "during_print_exhaust_fan_speed": [ "40" ], - "filament_load_time": [ - "29" - ], "filament_max_volumetric_speed": [ "12" ], @@ -32,9 +30,6 @@ "filament_type": [ "PET" ], - "filament_unload_time": [ - "29" - ], "compatible_printers": [ "Flashforge Guider4 Pro 0.8 HF nozzle" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json index c20763c836..97aaccc69f 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "A8PDgw1jZE2m3bem", + "filament_id": "OFDu1qE7", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json index 3c7f3b0e91..3e7c8023ad 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "Iy5lHY4ihEKPgJ5x", + "filament_id": "OFDu1qE7", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json index a727da25ee..c88a329872 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Kdeg55RzLMYhqYMC", + "filament_id": "OFDu1qE7", "instantiation": "true", "complete_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json index 62279c4084..d2e10d6c41 100644 --- a/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json +++ b/resources/profiles/Flashforge/filament/FusRock PET-CF @FF G4P.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "FusRock PET-CF @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "JXf7KCy4KY65xuzO", + "filament_id": "OFDu1qE7", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "additional_cooling_fan_speed": [ "0" ], diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json index 4502c8e0d8..c5d429456d 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "O3tz36NNMoagELL0", + "filament_id": "OF0AquDh", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", @@ -56,7 +60,7 @@ "; filament start gcode" ], "filament_type": [ - "S-Multi" + "PA" ], "nozzle_temperature": [ "280" diff --git a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json index df0f4c4cc6..bb1ccc7292 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-Multi @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic PETG-CF @System", "from": "system", "setting_id": "Gg9H6I32fOqoLSqE", + "filament_id": "OF0AquDh", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], @@ -62,7 +66,7 @@ "; filament start gcode" ], "filament_type": [ - "S-Multi" + "PA" ], "nozzle_temperature": [ "280" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json index 9ab78ced38..b895fd4370 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5.json @@ -4,7 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "pV5QERvRuROIZTOa", + "filament_id": "OFCn83wF", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "compatible_printers": [ "Flashforge Creator 5 0.4 nozzle", "Flashforge Creator 5 0.6 nozzle", @@ -50,7 +54,7 @@ "; filament start gcode" ], "filament_type": [ - "S-PAHT" + "PAHT" ], "hot_plate_temp": [ "80" diff --git a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json index 521a764406..6845961090 100644 --- a/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json +++ b/resources/profiles/Flashforge/filament/FusRock S-PAHT @FF C5P.json @@ -4,7 +4,11 @@ "inherits": "Generic PA-CF @System", "from": "system", "setting_id": "0i7VkquM4n0uFaXH", + "filament_id": "OFCn83wF", "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], "activate_chamber_temp_control": [ "1" ], @@ -56,7 +60,7 @@ "; filament start gcode" ], "filament_type": [ - "S-PAHT" + "PAHT" ], "hot_plate_temp": [ "80" diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json deleted file mode 100644 index 1675096c7e..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic NexPA-CF25.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic NexPA-CF25", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "TZDKsooodaGVkM4m", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "300" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "FusRock Generic NexPA-CF25" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "FusRock" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "295" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "305" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json deleted file mode 100644 index 37dc9b7723..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "NdNRNhmsHgHRnz1Z", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "15" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "15" - ], - "filament_cost": [ - "300" - ], - "filament_density": [ - "1.15" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "FusRock Generic PAHT-CF @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PAHT-CF" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "295" - ], - "nozzle_temperature_initial_layer": [ - "295" - ], - "nozzle_temperature_range_high": [ - "305" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "30" - ], - "pressure_advance": [ - "0.04" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json deleted file mode 100644 index 953b71d9e3..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-CF.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PAHT-CF", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "fR7maJwWmteJ7bWY", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "300" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "FusRock Generic PAHT-CF" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PA-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "FusRock" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "295" - ], - "nozzle_temperature_initial_layer": [ - "300" - ], - "nozzle_temperature_range_high": [ - "305" - ], - "nozzle_temperature_range_low": [ - "290" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json deleted file mode 100644 index 7241cf2afd..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PAHT-GF.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PAHT-GF", - "inherits": "FusRock Generic PAHT-CF", - "from": "system", - "setting_id": "gLG1R5gtdliSlnZJ", - "filament_id": "GFB99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "15" - ], - "filament_settings_id": [ - "FusRock Generic PAHT-GF" - ], - "filament_type": [ - "PAHT-GF" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "support_material_interface_fan_speed": [ - "20" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json deleted file mode 100644 index d6de1c2af8..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PET-CF @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "AaGdNgYaIIZyZBiW", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "300" - ], - "filament_density": [ - "1.3" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "FusRock Generic PET-CF @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PET-CF" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "30" - ], - "pressure_advance": [ - "0.04" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json deleted file mode 100644 index 95995868fb..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-CF.json +++ /dev/null @@ -1,255 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PET-CF", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "jJVDAlGTt1QJlbn8", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 3 Ultra 0.6 Nozzle", - "Flashforge Guider 3 Ultra 0.8 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "300" - ], - "filament_density": [ - "1.27" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "FusRock Generic PET-CF" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PET-CF" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "FusRock" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "nozzle_temperature": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "280" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json deleted file mode 100644 index 8fb6eb9b70..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic PET-GF.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic PET-GF", - "inherits": "FusRock Generic PET-CF", - "from": "system", - "setting_id": "IEpmsltdjoCu2txJ", - "filament_id": "GFB99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "15" - ], - "filament_settings_id": [ - "FusRock Generic PET-GF" - ], - "filament_type": [ - "PET-GF" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "support_material_interface_fan_speed": [ - "20" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json deleted file mode 100644 index d09c7dd01f..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic S-Multi @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "foH2sa61cDy12TzH", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "15" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.2" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "FusRock Generic S-Multi @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PET-CF" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "265" - ], - "overhang_fan_speed": [ - "30" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json deleted file mode 100644 index 789b77ea27..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-Multi.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic S-Multi", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "gQLoSJ7xGEdOd8kr", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.21" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.97" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "FusRock Generic S-Multi" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "S-Multi" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "FusRock" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "265" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json deleted file mode 100644 index 3f42fa9f24..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT @G3U 0.6 Nozzle.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "6Z5vce5YKlCGox8v", - "filament_id": "GFB99", - "instantiation": "true", - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.6 Nozzle" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_density": [ - "1.15" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_settings_id": [ - "FusRock Generic S-PAHT @G3U 0.6 Nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_type": [ - "PA-CF" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "275" - ], - "nozzle_temperature_initial_layer": [ - "275" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "overhang_fan_speed": [ - "30" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_min_speed": [ - "12" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json deleted file mode 100644 index 9e2336a574..0000000000 --- a/resources/profiles/Flashforge/filament/FusRock/FusRock Generic S-PAHT.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "type": "filament", - "name": "FusRock Generic S-PAHT", - "inherits": "Flashforge Generic PETG", - "from": "system", - "setting_id": "kMYDFSwivzTjFo2L", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "85" - ], - "cool_plate_temp_initial_layer": [ - "85" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "85" - ], - "eng_plate_temp_initial_layer": [ - "85" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "30" - ], - "filament_density": [ - "1.16" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "FusRock Generic S-PAHT" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "S-PAHT" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "35" - ], - "filament_unloading_speed_start": [ - "40" - ], - "filament_vendor": [ - "FusRock" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature": [ - "275" - ], - "nozzle_temperature_initial_layer": [ - "275" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "30" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "85" - ], - "textured_plate_temp_initial_layer": [ - "85" - ] -} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json new file mode 100644 index 0000000000..f228bdd769 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock NexPA-CF25.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "FusRock NexPA-CF25", + "renamed_from": "FusRock Generic NexPA-CF25", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "sVoga8454H2oKuKI", + "filament_id": "OFjt8dDO", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "300" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "FusRock NexPA-CF25" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PA-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "FusRock" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "295" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "305" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..b1112d508d --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF @G3U 0.6 Nozzle.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "FusRock PAHT-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PAHT-CF @G3U 0.6 Nozzle;FusRock Generic PAHT-CF G3U 0.6 Nozzle", + "from": "system", + "setting_id": "axB3SEA3AC7rmxiZ", + "filament_id": "OFKW5hEW", + "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "15" + ], + "filament_cost": [ + "300" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "FusRock PAHT-CF @G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PAHT-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "295" + ], + "nozzle_temperature_initial_layer": [ + "295" + ], + "nozzle_temperature_range_high": [ + "305" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "30" + ], + "pressure_advance": [ + "0.04" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json new file mode 100644 index 0000000000..3666353817 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-CF.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "FusRock PAHT-CF", + "renamed_from": "FusRock Generic PAHT-CF", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "OGhhxVvR4O4VYuCK", + "filament_id": "OFKW5hEW", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "300" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "FusRock PAHT-CF" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PAHT-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "FusRock" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "295" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "305" + ], + "nozzle_temperature_range_low": [ + "290" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json new file mode 100644 index 0000000000..0e29324831 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PAHT-GF.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "FusRock PAHT-GF", + "inherits": "FusRock PAHT-CF", + "renamed_from": "FusRock Generic PAHT-GF", + "from": "system", + "setting_id": "yJJEULB0ra4GAS8Q", + "filament_id": "OFcVLpNA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "filament_settings_id": [ + "FusRock PAHT-GF" + ], + "filament_type": [ + "PAHT-GF" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "20" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..b82f7ef4a9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF @G3U 0.6 Nozzle.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "FusRock PET-CF @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic PET-CF @G3U 0.6 Nozzle;FusRock Generic PET-CF G3U 0.6 Nozzle", + "from": "system", + "setting_id": "Gyw0XH6UtYQqtgx9", + "filament_id": "OFDu1qE7", + "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "300" + ], + "filament_density": [ + "1.3" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "FusRock PET-CF @G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PET-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "30" + ], + "pressure_advance": [ + "0.04" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json new file mode 100644 index 0000000000..5de8912224 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-CF.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "FusRock PET-CF", + "renamed_from": "FusRock Generic PET-CF", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "nGtsrswmS2Fj4Uev", + "filament_id": "OFDu1qE7", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "300" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "FusRock PET-CF" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PET-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "FusRock" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "nozzle_temperature": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "280" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json new file mode 100644 index 0000000000..6a224aded2 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock PET-GF.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "FusRock PET-GF", + "inherits": "FusRock PET-CF", + "renamed_from": "FusRock Generic PET-GF", + "from": "system", + "setting_id": "ZFIkUVZOklX8jUrT", + "filament_id": "OFzwA5Z9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "filament_settings_id": [ + "FusRock PET-GF" + ], + "filament_type": [ + "PET-GF" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "20" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..80f5577529 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi @G3U 0.6 Nozzle.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "FusRock S-Multi @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-Multi @G3U 0.6 Nozzle;FusRock Generic S-Multi G3U 0.6 Nozzle", + "from": "system", + "setting_id": "HvimUHzfNcDRrUBq", + "filament_id": "OF0AquDh", + "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.2" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "FusRock S-Multi @G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "265" + ], + "overhang_fan_speed": [ + "30" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json new file mode 100644 index 0000000000..e6f32aace1 --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-Multi.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "FusRock S-Multi", + "renamed_from": "FusRock Generic S-Multi", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "zAqGdmTsz4Z0qbaa", + "filament_id": "OF0AquDh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.21" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "FusRock S-Multi" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "FusRock" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "265" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..858da9c1bb --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT @G3U 0.6 Nozzle.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "FusRock S-PAHT @G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "FusRock Generic S-PAHT @G3U 0.6 Nozzle;FusRock Generic S-PAHT G3U 0.6 Nozzle", + "from": "system", + "setting_id": "JUiz70mbp7RRSPia", + "filament_id": "OFCn83wF", + "instantiation": "true", + "filament_vendor": [ + "FusRock" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_density": [ + "1.15" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "FusRock S-PAHT @G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PAHT" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "275" + ], + "nozzle_temperature_initial_layer": [ + "275" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "overhang_fan_speed": [ + "30" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ] +} diff --git a/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json new file mode 100644 index 0000000000..ebe48dc6dd --- /dev/null +++ b/resources/profiles/Flashforge/filament/FusRock/FusRock S-PAHT.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "FusRock S-PAHT", + "renamed_from": "FusRock Generic S-PAHT", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "mBQzgKKsV8Qo3gAr", + "filament_id": "OFCn83wF", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.16" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "FusRock S-PAHT" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PAHT" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "FusRock" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "275" + ], + "nozzle_temperature_initial_layer": [ + "275" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "30" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..cae13c67c1 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ABS @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic ABS @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge ABS @FF AD5M 0.25 Nozzle;Flashforge Generic ABS @FF AD5M 0.25 Nozzle", + "inherits": "Generic ABS @Flashforge", + "from": "system", + "setting_id": "1ourI1GmgyKWFsnl", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "Flashforge AD5X 0.25 nozzle" + ], + "filament_settings_id": [ + "Generic ABS @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.1" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json index a526cc23ff..3af6c25d2b 100644 --- a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge AD4.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Generic ABS @Flashforge AD4", - "inherits": "Flashforge Generic ABS", + "inherits": "Generic ABS @Flashforge", "from": "system", "setting_id": "lS237JRDRMQgJFzd", - "filament_id": "GFB99", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_flow_ratio": [ "1.093" diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..0176ef471f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic ABS @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic ABS @G3U 0.6 Nozzle;Flashforge Generic ABS G3U 0.6 Nozzle", + "from": "system", + "setting_id": "tzuKCtXYbGw6WB2c", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_flow_ratio": [ + "1.03" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic ABS @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json new file mode 100644 index 0000000000..a429c5be48 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge G3U.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "Generic ABS @Flashforge G3U", + "renamed_from": "Flashforge Generic ABS @G3U;Flashforge Generic ABS G3U", + "inherits": "Generic ABS @Flashforge", + "from": "system", + "setting_id": "dxCNYDhcaJqAfDpR", + "filament_id": "OFY9muEs", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.03" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic ABS @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "ABS" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json new file mode 100644 index 0000000000..a7cfc16967 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ABS @Flashforge.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "name": "Generic ABS @Flashforge", + "inherits": "fdm_filament_abs", + "renamed_from": "Flashforge Generic ABS", + "from": "system", + "setting_id": "CJXM3PoVEjf4kYnz", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "8" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ABS\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_density": [ + "1.04" + ], + "temperature_vitrification": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "hot_plate_temp": [ + "105" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..863936bc35 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ASA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "Generic ASA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge ASA @FF AD5M 0.25 Nozzle;Flashforge Generic ASA @FF AD5M 0.25 Nozzle", + "inherits": "Generic ASA @Flashforge", + "from": "system", + "setting_id": "aVpIQgRllsYZKRg0", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "Flashforge AD5X 0.25 nozzle" + ], + "filament_settings_id": [ + "Generic ASA @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "50" + ], + "filament_cost": [ + "40" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: ASA\n" + ], + "pressure_advance": [ + "0.1" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json index 12d944617f..07aae7b634 100644 --- a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge AD4.json @@ -2,17 +2,14 @@ "type": "filament", "name": "Generic ASA @Flashforge AD4", "renamed_from": "Generic ASA @AD4", - "inherits": "Flashforge Generic ASA", + "inherits": "Generic ASA @Flashforge", "from": "system", "setting_id": "tq7YmJohYaNiPplE", - "filament_id": "GFL99", + "filament_id": "OFLPAxz3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "40", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..3ecb1b1c67 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic ASA @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ASA @Flashforge", + "renamed_from": "Flashforge Generic ASA @G3U 0.6 Nozzle;Flashforge Generic ASA G3U 0.6 Nozzle", + "from": "system", + "setting_id": "9wfcw1ifKVGOXx5G", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "filament_density": [ + "1.09" + ], + "filament_flow_ratio": [ + "1.03" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "10" + ], + "filament_settings_id": [ + "Generic ASA @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_type": [ + "ASA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json new file mode 100644 index 0000000000..cfb156dd52 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge G3U.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "Generic ASA @Flashforge G3U", + "renamed_from": "Flashforge Generic ASA @G3U;Flashforge Generic ASA G3U", + "inherits": "Generic ABS @Flashforge", + "from": "system", + "setting_id": "N1vm5hhMHdSNvUwk", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "10" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic ASA @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "ASA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json new file mode 100644 index 0000000000..cc73a2a479 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic ASA @Flashforge.json @@ -0,0 +1,193 @@ +{ + "type": "filament", + "name": "Generic ASA @Flashforge", + "renamed_from": "Flashforge Generic ASA", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "tzs0HcyEZow99A2J", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Flashforge ASA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode \n;right_extruder_material:ASA" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_type": [ + "ASA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.04" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..84c43def44 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic HIPS @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic ABS @Flashforge", + "renamed_from": "Flashforge Generic HIPS @G3U 0.6 Nozzle;Flashforge Generic HIPS G3U 0.6 Nozzle", + "from": "system", + "setting_id": "wsAmSziSQ4UEHucg", + "filament_id": "OFsFon5l", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_density": [ + "1.05" + ], + "filament_flow_ratio": [ + "1.01" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic HIPS @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_type": [ + "HIPS" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "slow_down_min_speed": [ + "12" + ], + "support_material_interface_fan_speed": [ + "40" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json new file mode 100644 index 0000000000..54badf52ae --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic HIPS @Flashforge.json @@ -0,0 +1,249 @@ +{ + "type": "filament", + "name": "Generic HIPS @Flashforge", + "renamed_from": "Flashforge Generic HIPS", + "inherits": "Generic ABS @Flashforge", + "from": "system", + "setting_id": "zMQa7Squ3p3jKYwB", + "filament_id": "OFsFon5l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.01" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic HIPS @Flashforge" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "HIPS" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "40" + ], + "temperature_vitrification": [ + "100" + ], + "textured_plate_temp": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..558a420640 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic HS PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "name": "Generic HS PLA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge HS PLA @FF AD5M 0.25 Nozzle;Flashforge Generic HS PLA @FF AD5M 0.25 Nozzle", + "inherits": "Generic HS PLA @Flashforge", + "from": "system", + "setting_id": "DWsED5ish5gru5mt", + "filament_id": "OFvxghTE", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "Flashforge AD5X 0.25 nozzle" + ], + "filament_settings_id": [ + "Generic HS PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: HS PLA\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "210" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json new file mode 100644 index 0000000000..7fabff8e93 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic HS PLA @Flashforge.json @@ -0,0 +1,243 @@ +{ + "type": "filament", + "name": "Generic HS PLA @Flashforge", + "renamed_from": "Flashforge Generic HS PLA", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "GTqLzBcGP2Rmmc9X", + "filament_id": "OFvxghTE", + "instantiation": "true", + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Flashforge HS PLA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:HS PLA\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json index ed788fa452..366dd8ec5a 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "cvJIaPzb0uJLipX1", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json index bd6fbfb0e1..7e4f3adacc 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.6 nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "wguPruY9M7GcMt6q", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json index 1b8c0864fb..33a832c216 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4 0.8 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "EhobwmFIEg5Cs5Ki", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json index f7bdfc0830..82ddf2067c 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Generic PET @FF G4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "JvdxJyy7xCm3F0xH", + "filament_id": "OF6MOPWx", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json index 7bf0850fe8..6075390527 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "FtwGLcPMQqKw5uKW", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json index a95278c719..c26ba6d204 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.6 nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "lrnsjoh8DtnTcT7g", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json index ca22248030..731a8b0a27 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P 0.8 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Generic PET @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic PET-CF @G3U 0.6 Nozzle", + "inherits": "FusRock PET-CF @G3U 0.6 Nozzle", "from": "system", "setting_id": "Th8rzyWoINHBwgcw", + "filament_id": "OF6MOPWx", "instantiation": "true", + "filament_vendor": [ + "Generic" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json index 45eb6c20a5..f1d33a0d09 100644 --- a/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json +++ b/resources/profiles/Flashforge/filament/Generic PET @FF G4P.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Generic PET @FF G4P", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "1Lyq9gOfcZ5hPIdW", + "filament_id": "OF6MOPWx", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..0a54e7aeff --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PETG @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PETG @FF AD5M 0.25 Nozzle;Flashforge Generic PETG @FF AD5M 0.25 Nozzle", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "RyssSqtvE99XGdpZ", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "Flashforge AD5X 0.25 nozzle" + ], + "filament_settings_id": [ + "Generic PETG @FF AD5M 0.25 Nozzle" + ], + "fan_max_speed": [ + "80" + ], + "filament_max_volumetric_speed": [ + "1.5" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json index 8122a7e3b5..3308abfa38 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge AD4.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Generic PETG @Flashforge AD4", - "inherits": "Flashforge Generic PETG", + "inherits": "Generic PETG @Flashforge", "from": "system", "setting_id": "6vtyYCWYY10OPMbz", - "filament_id": "GFG99", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_flow_ratio": [ "1.09" diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..77095049c2 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic PETG @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG @G3U 0.6 Nozzle;Flashforge Generic PETG G3U 0.6 Nozzle", + "from": "system", + "setting_id": "ptfqxSWRVMFXRqzD", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_flow_ratio": [ + "1.01" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PETG @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_min_speed": [ + "12" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json new file mode 100644 index 0000000000..f0ebbde186 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U 0.8 Nozzle.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic PETG @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG @G3U 0.8 Nozzle;Flashforge Generic PETG G3U 0.8 Nozzle", + "from": "system", + "setting_id": "UhrHMgzzppLirT8M", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.8 Nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PETG @Flashforge G3U 0.8 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "slow_down_min_speed": [ + "12" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json new file mode 100644 index 0000000000..9c37ea85a7 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge G3U.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Generic PETG @Flashforge G3U", + "renamed_from": "Flashforge Generic PETG @G3U;Flashforge Generic PETG G3U", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "umrO2bL7ihLROx0B", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PETG @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PETG" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "90" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json new file mode 100644 index 0000000000..b53946e06c --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @Flashforge.json @@ -0,0 +1,96 @@ +{ + "type": "filament", + "name": "Generic PETG @Flashforge", + "inherits": "fdm_filament_pet", + "renamed_from": "Flashforge Generic PETG", + "from": "system", + "setting_id": "pd9YWgt8IGXdiiUV", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "temperature_vitrification": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "80" + ], + "support_material_interface_fan_speed": [ + "90" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode \n;right_extruder_material:PETG" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.046" + ], + "filament_density": [ + "1.27" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "fan_cooling_layer_time": [ + "30" + ], + "slow_down_layer_time": [ + "8" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..a44330253e --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF @G3U 0.6 Nozzle;Flashforge Generic PETG-CF G3U 0.6 Nozzle", + "from": "system", + "setting_id": "xYtwo7Ddkfh5PLIz", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PETG-CF @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "12" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json new file mode 100644 index 0000000000..3f5f92e8bc --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U 0.8 Nozzle.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PETG @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF @G3U 0.8 Nozzle;Flashforge Generic PETG-CF G3U 0.8 Nozzle", + "from": "system", + "setting_id": "v3HCxK10mQARiRTZ", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.8 Nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PETG-CF @Flashforge G3U 0.8 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "12" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json new file mode 100644 index 0000000000..2464363ce9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF @Flashforge G3U.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Flashforge G3U", + "renamed_from": "Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG-CF G3U", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "XXoNSerT8aqG5dlL", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "85" + ], + "cool_plate_temp_initial_layer": [ + "85" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "85" + ], + "eng_plate_temp_initial_layer": [ + "85" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PETG-CF @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.036" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "90" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "85" + ], + "textured_plate_temp_initial_layer": [ + "85" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json index ff84af740f..b310bf8d5b 100644 --- a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge AD4.json @@ -1,17 +1,14 @@ { "type": "filament", "name": "Generic PETG-CF10 @Flashforge AD4", - "inherits": "Flashforge Generic PETG-CF10", + "inherits": "Generic PETG-CF10 @Flashforge", "from": "system", "setting_id": "fWM9WLGV9mUQOtHh", - "filament_id": "GFG99", + "filament_id": "OFO5djrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json new file mode 100644 index 0000000000..8908c41081 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG-CF10 @Flashforge.json @@ -0,0 +1,190 @@ +{ + "type": "filament", + "name": "Generic PETG-CF10 @Flashforge", + "renamed_from": "Flashforge Generic PETG-CF10", + "inherits": "fdm_filament_pet", + "from": "system", + "setting_id": "0oCfWHsyqpBCbD62", + "filament_id": "OFO5djrM", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "filament_cost": [ + "30" + ], + "filament_density": [ + "1.27" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Flashforge PETG-CF10" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PETG-CF10\n" + ], + "filament_type": [ + "PETG-CF" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.035" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..d0cf9d305f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Generic PLA @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PLA @FF AD5M 0.25 Nozzle;Flashforge Generic PLA @FF AD5M 0.25 Nozzle", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "tPulq0o2HEsicj3g", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "Flashforge AD5X 0.25 nozzle" + ], + "filament_settings_id": [ + "Generic PLA @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json index 39afe0a2c2..5de4a77e3c 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge AD4.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "Generic PLA @Flashforge AD4", - "inherits": "Flashforge Generic PLA", + "inherits": "Generic PLA @Flashforge", "from": "system", "setting_id": "48NJ34G6Uo7VgzD4", - "filament_id": "GFL99", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "1.07" diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..20f0ba7403 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Generic PLA @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "YSbpdZWmgTvjJmZZ", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "fan_cooling_layer_time": [ + "50" + ], + "filament_flow_ratio": [ + "0.99" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PLA @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n\n\n" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "55" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json new file mode 100644 index 0000000000..6a9af67be1 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U 0.8 Nozzle.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "Generic PLA @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "CsPPXQWXhwz5fUww", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.8 Nozzle" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "fan_cooling_layer_time": [ + "50" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PLA @Flashforge G3U 0.8 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n\n\n" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "40" + ], + "hot_plate_temp": [ + "55" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.042" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json new file mode 100644 index 0000000000..630c4c723b --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge G3U.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Generic PLA @Flashforge G3U", + "renamed_from": "Flashforge Generic PLA @G3U;Flashforge Generic PLA G3U", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "8ZlELnZzCa3UsztB", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PLA @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n\n\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json new file mode 100644 index 0000000000..2a7b642470 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @Flashforge.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PLA @Flashforge", + "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic PLA", + "from": "system", + "setting_id": "keWbSonGBWos68ag", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json index 77e0ed35fd..eb4e1ec0ec 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA High Speed @Flashforge AD4.json @@ -1,14 +1,11 @@ { "type": "filament", "name": "Generic PLA High Speed @Flashforge AD4", - "inherits": "Flashforge Generic HS PLA", + "inherits": "Generic HS PLA @Flashforge", "from": "system", "setting_id": "B4EWBUa9G36lZUd7", - "filament_id": "GFL99", + "filament_id": "OFmpMwxS", "instantiation": "true", - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": [ "0" ], @@ -84,9 +81,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -159,9 +153,6 @@ "filament_type": [ "PLA" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json index 16e1f0d278..2087257bcb 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5.json @@ -53,7 +53,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "hot_plate_temp": [ "65" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json index eb0aa584da..a5de4c8f4a 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @FF C5P.json @@ -56,7 +56,7 @@ "; filament start gcode" ], "filament_type": [ - "SILK" + "PLA" ], "nozzle_temperature": [ "230" diff --git a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json index 199e64cc2b..39a2a4cfe8 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA Silk @Flashforge AD4.json @@ -2,10 +2,10 @@ "type": "filament", "name": "Generic PLA Silk @Flashforge AD4", "renamed_from": "PLA Silk @Flashforge AD4", - "inherits": "Flashforge Generic PLA-Silk", + "inherits": "Generic PLA-Silk @Flashforge", "from": "system", "setting_id": "9FrKIXABj3yedXri", - "filament_id": "GFL99", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_flow_ratio": [ "1.07" diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json new file mode 100644 index 0000000000..af864f7f8e --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.6 Nozzle.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Flashforge G3U 0.6 Nozzle", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF @G3U 0.6 Nozzle;Flashforge Generic PLA-CF G3U 0.6 Nozzle", + "from": "system", + "setting_id": "3vXm1hn43igE1xww", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.6 Nozzle" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_min_speed": [ + "70" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PLA-CF @Flashforge G3U 0.6 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "40" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.044" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json new file mode 100644 index 0000000000..798dff9458 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U 0.8 Nozzle.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Flashforge G3U 0.8 Nozzle", + "inherits": "Generic PLA @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF @G3U 0.8 Nozzle;Flashforge Generic PLA-CF G3U 0.8 Nozzle", + "from": "system", + "setting_id": "f1rqvqunGS94fw7q", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.8 Nozzle" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_min_speed": [ + "90" + ], + "filament_density": [ + "1.28" + ], + "filament_flow_ratio": [ + "0.97" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_settings_id": [ + "Generic PLA-CF @Flashforge G3U 0.8 Nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_unloading_speed": [ + "40" + ], + "filament_unloading_speed_start": [ + "40" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "pressure_advance": [ + "0.044" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json new file mode 100644 index 0000000000..595ca9e63d --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF @Flashforge G3U.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Flashforge G3U", + "renamed_from": "Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA-CF G3U", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "J2zu45Q3zu7Tor3W", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PLA-CF @Flashforge G3U" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.026" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json index 39a1a6d188..d1c860e830 100644 --- a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge AD4.json @@ -1,17 +1,14 @@ { "type": "filament", "name": "Generic PLA-CF10 @Flashforge AD4", - "inherits": "Flashforge Generic PLA-CF10", + "inherits": "Generic PLA-CF10 @Flashforge", "from": "system", "setting_id": "F8r0b3G228QEK53U", - "filament_id": "GFL99", + "filament_id": "OFX2zcrM", "instantiation": "true", "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": [ "0" ], @@ -86,9 +83,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -161,9 +155,6 @@ "filament_type": [ "PLA-CF" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json new file mode 100644 index 0000000000..06307637e7 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-CF10 @Flashforge.json @@ -0,0 +1,240 @@ +{ + "type": "filament", + "name": "Generic PLA-CF10 @Flashforge", + "renamed_from": "Flashforge Generic PLA-CF10", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "cckB4CXjFwZKC0l0", + "filament_id": "OFX2zcrM", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Flashforge PLA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:PLA-CF10\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_unloading_speed": [ + "90" + ], + "filament_unloading_speed_start": [ + "100" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json new file mode 100644 index 0000000000..c2e5210f3a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-SILK @FF AD5M 0.25 Nozzle.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "renamed_from": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle;Flashforge Generic PLA-SILK @FF AD5M 0.25 Nozzle", + "inherits": "Generic PLA-Silk @Flashforge", + "from": "system", + "setting_id": "gsOqWqaxtcrTm9JE", + "filament_id": "OFkf1HHw", + "instantiation": "true", + "compatible_printers": [ + "Flashforge Adventurer 5M 0.25 Nozzle", + "Flashforge Adventurer 5M Pro 0.25 Nozzle" + ], + "filament_settings_id": [ + "Generic PLA-SILK @FF AD5M 0.25 Nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "100" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "2.8" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA-Silk\n" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature": [ + "217" + ], + "pressure_advance": [ + "0.1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json new file mode 100644 index 0000000000..d8eabacaa0 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA-Silk @Flashforge.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PLA-Silk @Flashforge", + "inherits": "fdm_filament_pla", + "renamed_from": "Flashforge Generic PLA-Silk", + "from": "system", + "setting_id": "TPRkxgDXxVhPC1ws", + "filament_id": "OFi6PfUM", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "50" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PLA Silk\n" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_diameter": [ + "1.75" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "Flashforge AD5X 0.4 nozzle", + "Flashforge AD5X 0.6 nozzle", + "Flashforge AD5X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json new file mode 100644 index 0000000000..92c2a5e54a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PVA @Flashforge.json @@ -0,0 +1,250 @@ +{ + "type": "filament", + "name": "Generic PVA @Flashforge", + "renamed_from": "Flashforge Generic PVA", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "yiCXuEb87vNMhytL", + "filament_id": "OFDvXujf", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "80" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 3 Ultra 0.6 Nozzle", + "Flashforge Guider 3 Ultra 0.8 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "50" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Generic PVA @Flashforge" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material: PVA" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PVA" + ], + "filament_unloading_speed": [ + "35" + ], + "filament_unloading_speed_start": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json index 9d91f3746b..320aa2ad8d 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.6 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X 0.6 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "WQyJHZpkl9Dz6Yo3", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json index d109f87d0e..0731ca82a6 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X 0.8 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X 0.8 nozzle", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "qRqhbOYn5TMfccem", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "45" diff --git a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json index 3f79dcf3a5..a93bdb8c2e 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json +++ b/resources/profiles/Flashforge/filament/Generic TPU 85A @FF AD5X.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "Generic TPU 85A @FF AD5X", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "LTZCFxkzkGCnUMAR", + "filament_id": "OFulOdT2", "instantiation": "true", "cool_plate_temp": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json index a5bfa9cdd5..4fb3c96b08 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge AD4.json @@ -1,17 +1,14 @@ { "type": "filament", "name": "Generic TPU @Flashforge AD4", - "inherits": "Flashforge Generic TPU", + "inherits": "Generic TPU @Flashforge", "from": "system", "setting_id": "DW9Ck6xMK00Ry2iE", - "filament_id": "GFG99", + "filament_id": "OFgbpcy9", "instantiation": "true", "additional_cooling_fan_speed": [ "100" ], - "bed_temperature_difference": [ - "10" - ], "chamber_temperature": "0", "close_fan_the_first_x_layers": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json new file mode 100644 index 0000000000..5ebb19eb68 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic TPU @Flashforge.json @@ -0,0 +1,190 @@ +{ + "type": "filament", + "name": "Generic TPU @Flashforge", + "renamed_from": "Flashforge Generic TPU", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "luh9xN4STlD0sTyt", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "100" + ], + "chamber_temperature": "0", + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Adventurer 5M 0.4 Nozzle", + "Flashforge Adventurer 5M 0.6 Nozzle", + "Flashforge Adventurer 5M 0.8 Nozzle", + "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "Flashforge Adventurer 5M Pro 0.8 Nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "default_filament_colour": [ + "" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Flashforge TPU" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n;right_extruder_material:TPU\n" + ], + "filament_type": [ + "TPU" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "45" + ], + "hot_plate_temp_initial_layer": [ + "45" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.035" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json index 659d896a04..d34dc09ee4 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "i59KgPtnplOJ8ZBh", + "filament_id": "OF5c6nq3", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json index 76399618fc..7b90c39711 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-64D @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ERMhwufaef91KJ1d", + "filament_id": "OF5c6nq3", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json index 43b69e32e3..de84158ff1 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ZGmi7NF6Rn4idKjT", + "filament_id": "OFJYpVAQ", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json index 5b11df4081..dae60389c1 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-90A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "3SRFjKR5ezAukLYW", + "filament_id": "OFJYpVAQ", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json index ddfcc5c1af..66f0535b0b 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "ULqB7JfqebS8d00l", + "filament_id": "OFy48TOp", "instantiation": "true", "additional_cooling_fan_speed": [ "40" diff --git a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json index 1eb7a0bf80..f44c131661 100644 --- a/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json +++ b/resources/profiles/Flashforge/filament/Generic TPU-95A @FF C5P.json @@ -4,6 +4,7 @@ "inherits": "Generic TPU @System", "from": "system", "setting_id": "EQzyVOtOJjpKyRMM", + "filament_id": "OFy48TOp", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json index e0e410486c..73d0c5de35 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "lALS0WwvUo5AYOq3", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json index b005039c27..3f1f866e13 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.6 nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "tgRrYwnp5nr1yr9w", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json index eb7577cfe5..58a29d1466 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4 0.8 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "yom6iIUUwU1MsZwF", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json index 933d1ff7d3..9d896b6896 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.6 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "ysj5nD1op08U8rUT", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json index 34959d59ec..153456f8da 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.6 nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.6 nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "HBtkC3BfEpBGEWc5", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json index d4285329e3..cd5d838b69 100644 --- a/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json @@ -1,10 +1,14 @@ { "type": "filament", "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", - "inherits": "FusRock Generic S-PAHT @G3U 0.6 Nozzle", + "inherits": "FusRock S-PAHT @G3U 0.6 Nozzle", "from": "system", "setting_id": "zsW4MCpeL5qfzNfg", + "filament_id": "OFQyyO0l", "instantiation": "true", + "filament_vendor": [ + "Polymaker" + ], "close_fan_the_first_x_layers": [ "2" ], diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json new file mode 100644 index 0000000000..77a59b4bbf --- /dev/null +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker CoPA.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Polymaker CoPA", + "renamed_from": "Polymaker Generic CoPA", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "5Dt1APJ8qd5pzmzK", + "filament_id": "OFQyyO0l", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.16" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Polymaker CoPA" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PA" + ], + "filament_unloading_speed": [ + "30" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "250" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.03" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "support_material_interface_fan_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json deleted file mode 100644 index 49196701fa..0000000000 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic CoPA.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "type": "filament", - "name": "Polymaker Generic CoPA", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "t6CWYU3ZSddIjwhS", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "50" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.16" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1.02" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Polymaker Generic CoPA" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "30" - ], - "filament_unloading_speed_start": [ - "35" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "250" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.03" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "support_material_interface_fan_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json deleted file mode 100644 index 8a8b8fe94b..0000000000 --- a/resources/profiles/Flashforge/filament/Polymaker/Polymaker Generic S1.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "type": "filament", - "name": "Polymaker Generic S1", - "inherits": "Flashforge Generic PLA", - "from": "system", - "setting_id": "NXQtHvtO4tyQ1ueu", - "filament_id": "GFB99", - "instantiation": "true", - "activate_air_filtration": [ - "0" - ], - "activate_chamber_temp_control": [ - "0" - ], - "additional_cooling_fan_speed": [ - "50" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Flashforge Guider 3 Ultra 0.4 Nozzle", - "Flashforge Guider 2s 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "55" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_cooling_final_speed": [ - "3.4" - ], - "filament_cooling_initial_speed": [ - "2.2" - ], - "filament_cooling_moves": [ - "4" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.2" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_load_time": [ - "0" - ], - "filament_loading_speed": [ - "28" - ], - "filament_loading_speed_start": [ - "3" - ], - "filament_max_volumetric_speed": [ - "5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "5" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "10" - ], - "filament_multitool_ramming_volume": [ - "10" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "Polymaker Generic S1" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_type": [ - "PA" - ], - "filament_unload_time": [ - "0" - ], - "filament_unloading_speed": [ - "30" - ], - "filament_unloading_speed_start": [ - "35" - ], - "filament_vendor": [ - "Polymaker" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "overhang_fan_speed": [ - "80" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.025" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "0" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "16" - ], - "slow_down_min_speed": [ - "5" - ], - "support_material_interface_fan_speed": [ - "60" - ], - "temperature_vitrification": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json new file mode 100644 index 0000000000..91e636a3d4 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Polymaker/Polymaker S1.json @@ -0,0 +1,248 @@ +{ + "type": "filament", + "name": "Polymaker S1", + "renamed_from": "Polymaker Generic S1", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "auChFegT1xViXxGe", + "filament_id": "OFaDsTE0", + "instantiation": "true", + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "additional_cooling_fan_speed": [ + "50" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Flashforge Guider 3 Ultra 0.4 Nozzle", + "Flashforge Guider 2s 0.4 nozzle" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "55" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_cooling_final_speed": [ + "3.4" + ], + "filament_cooling_initial_speed": [ + "2.2" + ], + "filament_cooling_moves": [ + "4" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.2" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_loading_speed": [ + "28" + ], + "filament_loading_speed_start": [ + "3" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "5" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "Polymaker S1" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_type": [ + "PA" + ], + "filament_unloading_speed": [ + "30" + ], + "filament_unloading_speed_start": [ + "35" + ], + "filament_vendor": [ + "Polymaker" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.025" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "0" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "16" + ], + "slow_down_min_speed": [ + "5" + ], + "support_material_interface_fan_speed": [ + "60" + ], + "temperature_vitrification": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json index a29d5448ae..7e75980d63 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json index 84d20b77c5..c74353803b 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Marble @base.json @@ -1,10 +1,9 @@ { "type": "filament", "name": "SUNLU PLA Marble @base", - "renamed_from": "SUNLU Marble PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json index 542dda9c1f..4445f8007a 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index c631debf6c..f343841042 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json index f9eb2fe68d..98a628daeb 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json index d4d6e8d0cb..60fa90f91a 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json index f81d0dfdfb..5617754e9e 100644 --- a/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/Flashforge/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/Flashforge/filament/fdm_filament_pet.json b/resources/profiles/Flashforge/filament/fdm_filament_pet.json index 678ab77822..a19e1faece 100644 --- a/resources/profiles/Flashforge/filament/fdm_filament_pet.json +++ b/resources/profiles/Flashforge/filament/fdm_filament_pet.json @@ -28,6 +28,12 @@ "textured_plate_temp_initial_layer": [ "85" ], + "supertack_plate_temp": [ + "60" + ], + "supertack_plate_temp_initial_layer": [ + "60" + ], "slow_down_for_layer_cooling": [ "1" ], diff --git a/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json b/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json index ba5fc5f554..6d03066d38 100644 --- a/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/FlashForge AD5X 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M 0.25 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json index 8db76b0cd5..682594f99a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json index 4955930d7c..ff7251562e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "35" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json index ef7b50bbdb..806e5cda1f 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "35" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge AD5X.json b/resources/profiles/Flashforge/machine/Flashforge AD5X.json index 3ed31ba385..cd36362249 100644 --- a/resources/profiles/Flashforge/machine/Flashforge AD5X.json +++ b/resources/profiles/Flashforge/machine/Flashforge AD5X.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_ad5x_buildplate_texture.svg", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", "url": "", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge;Generic PLA @FF AD5M 0.25 Nozzle" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 4 Series.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 4 Series.json index 8c5f7ec4bf..d9864c599d 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 4 Series.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 4 Series.json @@ -2,6 +2,7 @@ "type": "machine_model", "name": "Flashforge Adventurer 4 Series", "model_id": "Flashforge Adventurer 4 Series", + "default_materials": "Generic PLA @Flashforge AD4;Generic PLA High Speed @Flashforge AD4", "nozzle_diameter": "0.3;0.4;0.6;0.4HS", "machine_tech": "FFF", "family": "Flashforge", diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json index fbc164e0e0..45023ac132 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M Pro.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_adventurer5m_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge;Generic PLA @FF AD5M 0.25 Nozzle" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json index c0822d3d73..9d4de80c6e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer 5M.json @@ -9,5 +9,5 @@ "bed_texture": "flashforge_adventurer5m_buildplate_texture.svg", "default_bed_type": "Textured PEI Plate", "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", - "default_materials": "Flashforge Generic ABS;Flashforge Generic PETG;Flashforge Generic PLA" + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge;Generic PLA @FF AD5M 0.25 Nozzle" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Artemis.json b/resources/profiles/Flashforge/machine/Flashforge Artemis.json index 7bab45b82a..069a71de70 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Artemis.json +++ b/resources/profiles/Flashforge/machine/Flashforge Artemis.json @@ -2,6 +2,7 @@ "type": "machine_model", "name": "Flashforge Artemis", "model_id": "Flashforge-Artemis", + "default_materials": "Generic PETG @Flashforge Artemis", "nozzle_diameter": "0.4", "machine_tech": "FFF", "family": "Flashforge", @@ -9,5 +10,5 @@ "bed_model": "flashforge_artemis_buildplate_model.stl", "bed_texture": "flashforge_artemis_buildplate_texture.svg", "hotend_model": "", - "default_filament_profile": "Flashforge Generic PETG; Flashforge Generic PLA" + "default_filament_profile": "Generic PETG @Flashforge; Generic PLA @Flashforge" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json new file mode 100644 index 0000000000..c3cb7aa570 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.25 nozzle.json @@ -0,0 +1,310 @@ +{ + "type": "machine", + "name": "Flashforge Creator 5 0.25 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "xp3cpTEGYdWjcrMM", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_bed_type": "", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.12mm Standard @FF C5 0.25 nozzle", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "disable_m73": "1", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "360", + "extruder_clearance_height_to_rod": "60", + "extruder_clearance_radius": "92", + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";end_gcode\nG1 X150 Y150 E-1.2 F12000", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "30000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "30000", + "20000" + ], + "machine_max_acceleration_y": [ + "30000", + "20000" + ], + "machine_max_acceleration_z": [ + "300", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_junction_deviation": [ + "0", + "0" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M25", + "machine_start_gcode": ";start_gcode\nM140 S[bed_temperature_initial_layer_single]\nM106 P101 S0 ; L+R_PLA_Turbo_Fan_0-255\nM106 P2 S0 ; Center_Fresch_Air_Input_Fan_for_PLA30%_(80_0-255) \nM191 S0 ; Chamber temp. max65C\nM106 S0 ; Model_Fan_(Heat_Break_Cooler_80-255)100%=255\nM106 P3 S0 ; Filter_Unit_Fan_0-255(ABS=255)\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F2400\nT[initial_extruder]\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nG1 X256 Y0 Z0.2 F6000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\nG1 X216 E10 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n;start_gcode end", + "machine_tool_change_time": "7", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.14", + "0.14", + "0.14", + "0.14" + ], + "max_resonance_avoidance_speed": "120", + "min_layer_height": [ + "0.08", + "0.08", + "0.08", + "0.08" + ], + "min_resonance_avoidance_speed": "70", + "nozzle_diameter": [ + "0.25", + "0.25", + "0.25", + "0.25" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "0x0", + "256x0", + "256x256", + "0x256" + ], + "printable_height": "256", + "printer_model": "Flashforge Creator 5", + "printer_notes": "", + "printer_settings_id": "Flashforge Creator 5 0.25 nozzle", + "printer_structure": "corexy", + "printer_technology": "FFF", + "printer_variant": "0.25", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "resonance_avoidance": "0", + "retract_before_wipe": [ + "100%", + "100%", + "100%", + "100%" + ], + "retract_length_toolchange": [ + "3", + "3", + "3", + "3" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "-0.8", + "-0.8", + "-0.8", + "-0.8" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.8", + "0.8", + "0.8", + "0.8" + ], + "retraction_minimum_travel": [ + "2", + "2", + "2", + "2" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "0", + "support_chamber_temp_control": "0", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json index 59c227c431..474e697fa1 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.4 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json index 9af2bb705b..a10c65d83e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.6 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json index e25ed9f229..0e3a29a2ad 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json new file mode 100644 index 0000000000..911c09f29c --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.25 nozzle.json @@ -0,0 +1,310 @@ +{ + "type": "machine", + "name": "Flashforge Creator 5 Pro 0.25 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "rpmib7bIKa85LNMR", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_bed_type": "", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.12mm Standard @FF C5 0.25 nozzle", + "deretraction_speed": [ + "30", + "30", + "30", + "30" + ], + "disable_m73": "1", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "360", + "extruder_clearance_height_to_rod": "60", + "extruder_clearance_radius": "92", + "extruder_colour": [ + "#FCE94F", + "#FCE94F", + "#FCE94F", + "#FCE94F" + ], + "extruder_offset": [ + "0x0", + "0x0", + "0x0", + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0", + "0", + "0", + "0" + ], + "machine_end_gcode": ";end_gcode\nG1 X150 Y150 E-1.2 F12000", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "30000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "30000", + "20000" + ], + "machine_max_acceleration_y": [ + "30000", + "20000" + ], + "machine_max_acceleration_z": [ + "300", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_junction_deviation": [ + "0", + "0" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "M25", + "machine_start_gcode": ";start_gcode\nM140 S[bed_temperature_initial_layer_single]\nM106 P101 S0 ; L+R_PLA_Turbo_Fan_0-255\nM106 P2 S0 ; Center_Fresch_Air_Input_Fan_for_PLA30%_(80_0-255) \nM191 S0 ; Chamber temp. max65C\nM106 S0 ; Model_Fan_(Heat_Break_Cooler_80-255)100%=255\nM106 P3 S0 ; Filter_Unit_Fan_0-255(ABS=255)\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F2400\nT[initial_extruder]\nM109 S[nozzle_temperature_initial_layer] T[initial_extruder]\nG1 X256 Y0 Z0.2 F6000\nG1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\nG1 X216 E10 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n;start_gcode end", + "machine_tool_change_time": "7", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.14", + "0.14", + "0.14", + "0.14" + ], + "max_resonance_avoidance_speed": "120", + "min_layer_height": [ + "0.08", + "0.08", + "0.08", + "0.08" + ], + "min_resonance_avoidance_speed": "70", + "nozzle_diameter": [ + "0.25", + "0.25", + "0.25", + "0.25" + ], + "nozzle_height": "4", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "0x0", + "256x0", + "256x256", + "0x256" + ], + "printable_height": "256", + "printer_model": "Flashforge Creator 5 Pro", + "printer_notes": "", + "printer_settings_id": "Flashforge Creator 5 Pro 0.25 nozzle", + "printer_structure": "corexy", + "printer_technology": "FFF", + "printer_variant": "0.25", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "0", + "resonance_avoidance": "0", + "retract_before_wipe": [ + "100%", + "100%", + "100%", + "100%" + ], + "retract_length_toolchange": [ + "3", + "3", + "3", + "3" + ], + "retract_lift_above": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_below": [ + "0", + "0", + "0", + "0" + ], + "retract_lift_enforce": [ + "All Surfaces", + "All Surfaces", + "All Surfaces", + "All Surfaces" + ], + "retract_restart_extra": [ + "0", + "0", + "0", + "0" + ], + "retract_restart_extra_toolchange": [ + "-0.8", + "-0.8", + "-0.8", + "-0.8" + ], + "retract_when_changing_layer": [ + "1", + "1", + "1", + "1" + ], + "retraction_distances_when_cut": [ + "18", + "18", + "18", + "18" + ], + "retraction_length": [ + "0.8", + "0.8", + "0.8", + "0.8" + ], + "retraction_minimum_travel": [ + "2", + "2", + "2", + "2" + ], + "retraction_speed": [ + "30", + "30", + "30", + "30" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3", + "3", + "3", + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1", + "1", + "1", + "1" + ], + "wipe_distance": [ + "2", + "2", + "2", + "2" + ], + "z_hop": [ + "0.4", + "0.4", + "0.4", + "0.4" + ], + "z_hop_types": [ + "Auto Lift", + "Auto Lift", + "Auto Lift", + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json index fb960b8d27..ec69837a3a 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.4 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json index b9343cf430..d3d189d4e9 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.6 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json index 7111452aa9..e596675ad0 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro 0.8 nozzle.json @@ -24,7 +24,7 @@ "cooling_tube_retraction": "0", "default_bed_type": "", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -264,7 +264,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "0", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json index bf8cbf3702..c33735a4bb 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5 Pro.json @@ -2,11 +2,11 @@ "type": "machine_model", "name": "Flashforge Creator 5 Pro", "model_id": "Flashforge-Creator-5-Pro", - "nozzle_diameter": "0.4;0.6;0.8", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_c5_buildplate_model.stl", "bed_texture": "flashforge_c5_buildplate_texture.png", "hotend_model": "", - "default_materials": "" + "default_materials": "Generic PLA @System;Generic PLA @FF C5P" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Creator 5.json b/resources/profiles/Flashforge/machine/Flashforge Creator 5.json index 8d5ac253b7..358cd4aaee 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Creator 5.json +++ b/resources/profiles/Flashforge/machine/Flashforge Creator 5.json @@ -2,11 +2,11 @@ "type": "machine_model", "name": "Flashforge Creator 5", "model_id": "Flashforge-Creator-5", - "nozzle_diameter": "0.4;0.6;0.8", + "nozzle_diameter": "0.25;0.4;0.6;0.8", "machine_tech": "FFF", "family": "Flashforge", "bed_model": "flashforge_c5_buildplate_model.stl", "bed_texture": "flashforge_c5_buildplate_texture.png", "hotend_model": "", - "default_materials": "" + "default_materials": "Generic PLA @System;Generic PLA @FF C5" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json index 4456789cce..54e03d72fe 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s 0.4 nozzle.json @@ -117,7 +117,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M25", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "machine_start_gcode": "M118 X10 Y10 Z10\nM140 S[bed_temperature_initial_layer_single]; set initial bed temp\nM104 S[nozzle_temperature_initial_layer] T0; set initial extruder temp\nM107; disable cooling fan\nG90; set to absolute positioning\nG28; home axes\nM132 X Y A B; recall home offsets from EPROM\nG1 Z50.0 F420; adjust Z\nG161 X Y F3300\nM7; wait for bed to stabilize\nM6 T0; wait for extruder to stabilize\nM651 S255; start case fan\nG1 Z0.3 F3600; move down to purge\nG92 E0; zero extruders\nG1 X120 Y-125 E20 F2000; extrude a line of filament across the front edge of the bed\nG1 X130 Y-125 F180; wait for ooze\nG1 X140 Y-125 F5000; fast wipe\nG1 Z1 F100; lift\nG92 E0; zero extruders again\nG1 E-1.0000 F1800", "machine_end_gcode": "M104 S0 T0; cool down extruder\nM140 S0 T0; cool down bed\nG162 Z F1800\nG28 X Y; home axes\nM132 X Y A B; recall home offsets from EPROM\nM652; turn off rear fan\nG91; set to relative positioning\nM18; disable stepper motors", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json index 38c0f3c667..4c99585c03 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 2s.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g2s_buildplate_model.stl", "bed_texture": "flashforge_g2s_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json index b8388ba7c4..aeb84117fd 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.4 Nozzle.json @@ -18,7 +18,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Generic PLA @Flashforge G3U" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ @@ -186,7 +186,6 @@ "35" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json index f2b89e3585..2736b59737 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.6 Nozzle.json @@ -12,7 +12,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Generic PLA @Flashforge G3U 0.6 Nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json index 1076239de4..684474af9d 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra 0.8 Nozzle.json @@ -12,7 +12,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.8 Nozzle" + "Generic PLA @Flashforge G3U 0.8 Nozzle" ], "default_print_profile": "0.40mm Standard @Flashforge G3U 0.8 Nozzle", "deretraction_speed": [ diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json index a3bc7d0b68..3b3aa553e7 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider 3 Ultra.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g3u_buildplate_model.stl", "bed_texture": "flashforge_g3u_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "FusRock NexPA-CF25;FusRock PAHT-CF;FusRock PAHT-CF @G3U 0.6 Nozzle;FusRock PET-CF;FusRock PET-CF @G3U 0.6 Nozzle;FusRock S-Multi;FusRock S-PAHT;Generic ABS @Flashforge G3U;Generic ABS @Flashforge G3U 0.6 Nozzle;Generic ASA @Flashforge G3U;Generic ASA @Flashforge G3U 0.6 Nozzle;Generic HIPS @Flashforge;Generic HIPS @Flashforge G3U 0.6 Nozzle;Generic PETG @Flashforge G3U;Generic PETG @Flashforge G3U 0.6 Nozzle;Generic PETG @Flashforge G3U 0.8 Nozzle;Generic PETG-CF @Flashforge G3U;Generic PETG-CF @Flashforge G3U 0.6 Nozzle;Generic PETG-CF @Flashforge G3U 0.8 Nozzle;Generic PLA @Flashforge G3U;Generic PLA @Flashforge G3U 0.6 Nozzle;Generic PLA @Flashforge G3U 0.8 Nozzle;Generic PLA-CF @Flashforge G3U;Generic PLA-CF @Flashforge G3U 0.6 Nozzle;Generic PLA-CF @Flashforge G3U 0.8 Nozzle;Generic PVA @Flashforge;Polymaker CoPA;Polymaker S1" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json index 2ee3538c7a..85efedf8f9 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Flashforge PLA Basic @FF G4 0.25 nozzle" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json index b20d6ce763..b8e60f92d3 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Flashforge PLA Basic @FF G4 HF" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json index 452673eb55..f60d1df816 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Flashforge PLA Basic @FF G4" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json index 92bee1b7dc..38d0321592 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4 0.6 HF nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json index 3570045562..ceece27959 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json index f61d3d7e77..35c85dc400 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 0.8 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4 0.8 HF nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json index 3eee06cb24..fdddbe17ed 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.25 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Flashforge PLA Basic @FF G4P 0.25 nozzle" ], "default_print_profile": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json index 35e7f5b067..7b3566197e 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U" + "Flashforge PLA Basic @FF G4P HF" ], "default_print_profile": "0.20mm Standard @Flashforge G3U 0.4 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json index e355db941c..3ea39fdb11 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.4 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA" + "Flashforge PLA Basic @FF G4P" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", "deretraction_speed": [ @@ -199,7 +199,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json index 5ea36cfca8..0a7d2dd29b 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4P 0.6 HF nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json index 21ae8e77fa..6b9031f8fe 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.6 nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4P 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json index 660d3c342b..37efacacde 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro 0.8 HF nozzle.json @@ -23,7 +23,7 @@ "cooling_tube_length": "0", "cooling_tube_retraction": "0", "default_filament_profile": [ - "Flashforge Generic PLA @G3U 0.6 Nozzle" + "Flashforge PLA Basic @FF G4P 0.8 HF nozzle" ], "default_print_profile": "0.30mm Standard @Flashforge G3U 0.6 Nozzle", "deretraction_speed": [ @@ -200,7 +200,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json index 14ce7cead3..cac18081f6 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4 Pro.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g4pro_buildplate_model.stl", "bed_texture": "flashforge_g4pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1;Flashforge PLA Basic @FF G4P 0.25 nozzle;Flashforge PLA Basic @FF G4P HF;Flashforge PLA Basic @FF G4P;Flashforge PLA Basic @FF G4P 0.6 HF nozzle;Flashforge PLA Basic @FF G4P 0.6 nozzle;Flashforge PLA Basic @FF G4P 0.8 HF nozzle" } diff --git a/resources/profiles/Flashforge/machine/Flashforge Guider4.json b/resources/profiles/Flashforge/machine/Flashforge Guider4.json index 7b5248e14b..6633eb093f 100644 --- a/resources/profiles/Flashforge/machine/Flashforge Guider4.json +++ b/resources/profiles/Flashforge/machine/Flashforge Guider4.json @@ -8,5 +8,5 @@ "bed_model": "flashforge_g4pro_buildplate_model.stl", "bed_texture": "flashforge_g4pro_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Flashforge Generic PVA;Flashforge Generic HIPS;Flashforge Generic PETG-CF @G3U;Flashforge Generic PETG @G3U;Flashforge Generic PLA-CF @G3U;Flashforge Generic PLA @G3U;Flashforge Generic ASA @G3U;Flashforge Generic ABS @G3U;FusRock Generic PET-CF;FusRock Generic PAHT-CF;FusRock Generic NexPA-CF25;FusRock Generic S-Multi;FusRock Generic S-PAHT;Polymaker Generic CoPA;Polymaker Generic S1" + "default_materials": "Generic PVA @Flashforge;Generic HIPS @Flashforge;Generic PETG-CF @Flashforge G3U;Generic PETG @Flashforge G3U;Generic PLA-CF @Flashforge G3U;Generic PLA @Flashforge G3U;Generic ASA @Flashforge G3U;Generic ABS @Flashforge G3U;FusRock PET-CF;FusRock PAHT-CF;FusRock NexPA-CF25;FusRock S-Multi;FusRock S-PAHT;Polymaker CoPA;Polymaker S1;Flashforge PLA Basic @FF G4 0.25 nozzle;Flashforge PLA Basic @FF G4 HF;Flashforge PLA Basic @FF G4;Flashforge PLA Basic @FF G4 0.6 HF nozzle;Flashforge PLA Basic @FF G4 0.6 nozzle;Flashforge PLA Basic @FF G4 0.8 HF nozzle" } diff --git a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json index 6002dfb72e..2808e866e3 100644 --- a/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json +++ b/resources/profiles/Flashforge/machine/fdm_adventurer5m_common.json @@ -94,7 +94,7 @@ "machine_pause_gcode": "M25", "support_multi_bed_types": "1", "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", diff --git a/resources/profiles/Flashforge/machine/fdm_flashforge_common.json b/resources/profiles/Flashforge/machine/fdm_flashforge_common.json index ea865c4387..1c71c396eb 100644 --- a/resources/profiles/Flashforge/machine/fdm_flashforge_common.json +++ b/resources/profiles/Flashforge/machine/fdm_flashforge_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25", @@ -124,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Flashforge Generic PLA" + "Generic PLA @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M", "bed_exclude_area": [ diff --git a/resources/profiles/Flashforge/machine/fdm_klipper_common.json b/resources/profiles/Flashforge/machine/fdm_klipper_common.json index 237f4b54c7..d11eb22558 100644 --- a/resources/profiles/Flashforge/machine/fdm_klipper_common.json +++ b/resources/profiles/Flashforge/machine/fdm_klipper_common.json @@ -116,8 +116,6 @@ "deretraction_speed": [ "80" ], - "z_lift_type": "NormalLift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25", @@ -125,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Flashforge Generic ABS" + "Generic ABS @Flashforge" ], "default_print_profile": "0.20mm Standard @Flashforge AD5M", "bed_exclude_area": [ diff --git a/resources/profiles/Flashforge/machine/fdm_machine_common.json b/resources/profiles/Flashforge/machine/fdm_machine_common.json index d4bef57491..6361133d45 100644 --- a/resources/profiles/Flashforge/machine/fdm_machine_common.json +++ b/resources/profiles/Flashforge/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "0.20mm Standard @Flashforge AD5M", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..09221f10b2 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.08mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.08mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "KrOSCGKyvNy9v08u", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.08", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.08mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..47ea8c6322 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.10mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,27 @@ +{ + "type": "process", + "name": "0.10mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "0Mep1gVTvD4RwK53", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.10mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json index 1b85975878..38862d967c 100644 --- a/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.12mm Detail @Flashforge Guider 2s 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1VeWY2d3H1hYEkzL", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "80%", "brim_width": "5", @@ -33,7 +32,6 @@ "inner_wall_speed": "200", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "200", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..df33cdf344 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.12mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "rcKQBKZJvCfrfzqV", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.12", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.12mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json new file mode 100644 index 0000000000..fd6f8f560d --- /dev/null +++ b/resources/profiles/Flashforge/process/0.14mm Standard @FF C5 0.25 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "process", + "name": "0.14mm Standard @FF C5 0.25 nozzle", + "inherits": "0.10mm Standard @FF AD5X 0.25 nozzle", + "from": "system", + "setting_id": "749mQY3CU2jk0MOd", + "instantiation": "true", + "bottom_solid_infill_flow_ratio": "1", + "compatible_printers": [ + "Flashforge Creator 5 0.25 nozzle", + "Flashforge Creator 5 Pro 0.25 nozzle" + ], + "initial_layer_print_height": "0.1", + "internal_bridge_flow": "1", + "layer_height": "0.14", + "ooze_prevention": "1", + "preheat_time": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "print_settings_id": "0.14mm Standard @FF C5 0.25 nozzle", + "small_perimeter_speed": "30", + "standby_temperature_delta": "-100", + "top_solid_infill_flow_ratio": "1" +} diff --git a/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json index 577586baaf..1dde9465a0 100644 --- a/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.16mm Optimal @Flashforge Guider 2s 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "VPKIYFY99e6eS9Nd", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "25", "internal_bridge_speed": "150%", @@ -34,7 +33,6 @@ "inner_wall_speed": "60", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "200", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Flashforge/process/0.20mm High-Speed @Flashforge AD4 HS Nozzle.json b/resources/profiles/Flashforge/process/0.20mm High-Speed @Flashforge AD4 HS Nozzle.json index ad89354ae1..176e4c0031 100644 --- a/resources/profiles/Flashforge/process/0.20mm High-Speed @Flashforge AD4 HS Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm High-Speed @Flashforge AD4 HS Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "60", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json index 619014c8a4..54cb9bd666 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD3 0.4 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "48", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD4 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD4 0.4 Nozzle.json index 2e81b9758f..a2867c886b 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD4 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge AD4 0.4 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Artemis 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Artemis 0.4 Nozzle.json index 1b9fd03771..cb003b72c7 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Artemis 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Artemis 0.4 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "80%", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json index aeb81d2dd9..fd4dda1aea 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge G3U 0.4 Nozzle.json @@ -116,7 +116,6 @@ "overhang_4_4_speed": "10", "overhang_reverse": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "5", diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json index 97d51bec7f..c3d5382f70 100644 --- a/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.20mm Standard @Flashforge Guider 2s 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "uknnclg0sGPLeGcN", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50%", "internal_bridge_speed": "70%", @@ -34,7 +33,6 @@ "inner_wall_speed": "200", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "200", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Flashforge/process/0.25mm Standard @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.25mm Standard @FF G4P 0.6 nozzle.json index a2b3f3db1d..12f44410c9 100644 --- a/resources/profiles/Flashforge/process/0.25mm Standard @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/process/0.25mm Standard @FF G4P 0.6 nozzle.json @@ -40,7 +40,6 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "12", - "overhang_speed_classic": "1", "prime_tower_width": "45", "prime_volume": "45", "print_settings_id": "0.25mm Standard @FF G4P 0.6 nozzle", diff --git a/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json index 3eda3c3d34..b7cbce9215 100644 --- a/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Draft @Flashforge Guider 2s 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "twWwqkfSRYeAkuzT", "instantiation": "true", - "adaptive_layer_height": "0", "bridge_flow": "1", "bridge_speed": "50%", "internal_bridge_speed": "70%", @@ -34,7 +33,6 @@ "inner_wall_speed": "200", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "200", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "200", "ironing_flow": "10%", "ironing_spacing": "0.15", diff --git a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json index e17b0e8d9f..6520c4fb48 100644 --- a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD3 0.4 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "64", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD4 0.4 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD4 0.4 Nozzle.json index ea65c7de1b..52155fcc22 100644 --- a/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD4 0.4 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Fast @Flashforge AD4 0.4 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @FF G4P 0.6 nozzle.json index 238d3e3330..03dc328fd6 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @FF G4P 0.6 nozzle.json @@ -35,7 +35,6 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "12", - "overhang_speed_classic": "1", "prime_tower_width": "45", "prime_volume": "45", "print_settings_id": "0.30mm Standard @FF G4P 0.6 nozzle", diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json index 65f1ad351a..5485ef51e7 100644 --- a/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json +++ b/resources/profiles/Flashforge/process/0.30mm Standard @Flashforge AD3 0.6 Nozzle.json @@ -45,7 +45,6 @@ "min_bead_width": "100", "elefant_foot_compensation": "0.15", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "accel_to_decel_enable": "0", "filter_out_gap_fill": "0.5", diff --git a/resources/profiles/Flashforge/process/0.36mm Standard @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.36mm Standard @FF G4P 0.6 nozzle.json index 7c7e132ac3..8f7bd267cb 100644 --- a/resources/profiles/Flashforge/process/0.36mm Standard @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/process/0.36mm Standard @FF G4P 0.6 nozzle.json @@ -36,7 +36,6 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "12", - "overhang_speed_classic": "1", "prime_tower_width": "45", "prime_volume": "45", "print_settings_id": "0.36mm Standard @FF G4P 0.6 nozzle", diff --git a/resources/profiles/Flashforge/process/0.42mm Standard @FF G4P 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.42mm Standard @FF G4P 0.6 nozzle.json index 66a91699de..054f652ea8 100644 --- a/resources/profiles/Flashforge/process/0.42mm Standard @FF G4P 0.6 nozzle.json +++ b/resources/profiles/Flashforge/process/0.42mm Standard @FF G4P 0.6 nozzle.json @@ -36,7 +36,6 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "12", - "overhang_speed_classic": "1", "prime_tower_width": "45", "prime_volume": "45", "print_settings_id": "0.42mm Standard @FF G4P 0.6 nozzle", diff --git a/resources/profiles/Flashforge/process/fdm_process_common.json b/resources/profiles/Flashforge/process/fdm_process_common.json index 362b69213e..fc96799afe 100644 --- a/resources/profiles/Flashforge/process/fdm_process_common.json +++ b/resources/profiles/Flashforge/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.20.json b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.20.json index 8d5afce023..1288ef847e 100644 --- a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.20.json +++ b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.20.json @@ -11,7 +11,6 @@ "gap_infill_speed": "200", "sparse_infill_speed": "270", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "internal_solid_infill_acceleration": "7000", "accel_to_decel_enable": "0", diff --git a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.30.json b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.30.json index c55ea16d6b..9ef898d154 100644 --- a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.30.json +++ b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.30.json @@ -19,7 +19,6 @@ "top_surface_speed": "120", "gap_infill_speed": "150", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "internal_solid_infill_acceleration": "7000", "accel_to_decel_enable": "0", diff --git a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.40.json b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.40.json index 570bc9b175..12571d7331 100644 --- a/resources/profiles/Flashforge/process/fdm_process_flashforge_0.40.json +++ b/resources/profiles/Flashforge/process/fdm_process_flashforge_0.40.json @@ -19,7 +19,6 @@ "top_surface_speed": "120", "gap_infill_speed": "150", "small_perimeter_speed": "50%", - "overhang_speed_classic": "0", "internal_bridge_speed": "50", "internal_solid_infill_acceleration": "7000", "accel_to_decel_enable": "0", diff --git a/resources/profiles/Flashforge/process/fdm_process_flashforge_common.json b/resources/profiles/Flashforge/process/fdm_process_flashforge_common.json index 09beed2646..9149caaef1 100644 --- a/resources/profiles/Flashforge/process/fdm_process_flashforge_common.json +++ b/resources/profiles/Flashforge/process/fdm_process_flashforge_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "travel_acceleration": "10000", "inner_wall_acceleration": "5000", diff --git a/resources/profiles/FlyingBear.json b/resources/profiles/FlyingBear.json index d93bc00e57..8c09e115e2 100644 --- a/resources/profiles/FlyingBear.json +++ b/resources/profiles/FlyingBear.json @@ -1,6 +1,6 @@ { "name": "FlyingBear", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "1", "description": "FlyingBear configurations", "machine_model_list": [ @@ -245,32 +245,32 @@ "sub_path": "filament/S1/fdm_filament_tpu_other @S1.json" }, { - "name": "FlyingBear Generic ABS", - "sub_path": "filament/FlyingBear Generic ABS.json" + "name": "Generic ABS @FlyingBear", + "sub_path": "filament/Generic ABS @FlyingBear.json" }, { - "name": "FlyingBear Generic PA-CF", - "sub_path": "filament/FlyingBear Generic PA-CF.json" + "name": "Generic PA-CF @FlyingBear", + "sub_path": "filament/Generic PA-CF @FlyingBear.json" }, { - "name": "FlyingBear Generic PC", - "sub_path": "filament/FlyingBear Generic PC.json" + "name": "Generic PC @FlyingBear", + "sub_path": "filament/Generic PC @FlyingBear.json" }, { - "name": "FlyingBear Generic PETG", - "sub_path": "filament/FlyingBear Generic PETG.json" + "name": "Generic PETG @FlyingBear", + "sub_path": "filament/Generic PETG @FlyingBear.json" }, { - "name": "FlyingBear Generic PLA", - "sub_path": "filament/FlyingBear Generic PLA.json" + "name": "Generic PLA @FlyingBear", + "sub_path": "filament/Generic PLA @FlyingBear.json" }, { "name": "FlyingBear PLA Hyper", "sub_path": "filament/FlyingBear PLA Hyper.json" }, { - "name": "FlyingBear Generic TPU", - "sub_path": "filament/FlyingBear Generic TPU.json" + "name": "Generic TPU @FlyingBear", + "sub_path": "filament/Generic TPU @FlyingBear.json" }, { "name": "FlyingBear ABS @Ghost7", diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json deleted file mode 100644 index 7a296fea35..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic ABS.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "TDBNmmGSexhJjBVm", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.058" - ], - "filament_retraction_length": [ - "0.8" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json deleted file mode 100644 index 4fe521fcce..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PA-CF.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "lpa58hsu9IB697v8", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "4" - ], - "filament_retract_before_wipe": [ - "0%" - ], - "filament_retraction_length": [ - "0.8" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json deleted file mode 100644 index 92227f4254..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PC.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "MkIN95sonzI0vNXT", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.058" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json deleted file mode 100644 index 2bd49d16a1..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PETG.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "id0y4kfJciWjOwh6", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.084" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json deleted file mode 100644 index d41a0cdaa6..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic PLA.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yCGisctQQwASw8kc", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "0" - ], - "pressure_advance": [ - "0.032" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json b/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json deleted file mode 100644 index 1ae309f9e9..0000000000 --- a/resources/profiles/FlyingBear/filament/FlyingBear Generic TPU.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "FlyingBear Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "84YwyW2C94NdN1zl", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "filament_flow_ratio": [ - "0.94" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.13" - ], - "compatible_printers": [ - "FlyingBear Reborn3 0.4 nozzle", - "FlyingBear Ghost 6 0.4 nozzle" - ] -} diff --git a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json index 6d3f9019b2..a125ff3ad2 100644 --- a/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json +++ b/resources/profiles/FlyingBear/filament/FlyingBear PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "72RZHGo7eACm2tN5", - "filament_id": "GFL99", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json new file mode 100644 index 0000000000..b0de37a64b --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic ABS @FlyingBear.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic ABS @FlyingBear", + "inherits": "fdm_filament_abs", + "renamed_from": "FlyingBear Generic ABS", + "from": "system", + "setting_id": "2aW5bka7pvQhHGqF", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.058" + ], + "filament_retraction_length": [ + "0.8" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json new file mode 100644 index 0000000000..37448910ed --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic PA-CF @FlyingBear.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PA-CF @FlyingBear", + "inherits": "fdm_filament_pa", + "renamed_from": "FlyingBear Generic PA-CF", + "from": "system", + "setting_id": "5hw49IVGTMbie2Zr", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_type": [ + "PA-CF" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "4" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retraction_length": [ + "0.8" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json new file mode 100644 index 0000000000..926494718b --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic PC @FlyingBear.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic PC @FlyingBear", + "inherits": "fdm_filament_pc", + "renamed_from": "FlyingBear Generic PC", + "from": "system", + "setting_id": "HU6kkNtEXGubYV0U", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.058" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json new file mode 100644 index 0000000000..77079afc33 --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic PETG @FlyingBear.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "Generic PETG @FlyingBear", + "inherits": "fdm_filament_pet", + "renamed_from": "FlyingBear Generic PETG", + "from": "system", + "setting_id": "D5Zk6ykY8TX3gs0Z", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.084" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json new file mode 100644 index 0000000000..159f3da22b --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic PLA @FlyingBear.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic PLA @FlyingBear", + "inherits": "fdm_filament_pla", + "renamed_from": "FlyingBear Generic PLA", + "from": "system", + "setting_id": "g7zPgD6P3bbwm5gv", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "0" + ], + "pressure_advance": [ + "0.032" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json b/resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json new file mode 100644 index 0000000000..c33b3757be --- /dev/null +++ b/resources/profiles/FlyingBear/filament/Generic TPU @FlyingBear.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic TPU @FlyingBear", + "inherits": "fdm_filament_tpu", + "renamed_from": "FlyingBear Generic TPU", + "from": "system", + "setting_id": "Xdx2FIIQiqSz7DpN", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_flow_ratio": [ + "0.94" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.13" + ], + "compatible_printers": [ + "FlyingBear Reborn3 0.4 nozzle", + "FlyingBear Ghost 6 0.4 nozzle" + ] +} diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json index 814a100880..bfb316494f 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear ABS @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @Ghost7", "from": "system", "setting_id": "UyTzid0zVMCxSrgx", - "filament_id": "GFB99", + "filament_id": "OFm4ysMO", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json index ecbff8839e..f8c0bcde19 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PA-CF @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @Ghost7", "from": "system", "setting_id": "NZwDOWmMdBYEejNQ", - "filament_id": "GFN98", + "filament_id": "OFQEGL7z", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json index 5a72ae3680..6dd9a695bf 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PC @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @Ghost7", "from": "system", "setting_id": "QYOEUrnmNMUcVOVF", - "filament_id": "GFC99", + "filament_id": "OFFX1DRD", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json index 6c727db151..c03f7a09ee 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PETG Basic @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @Ghost7", "from": "system", "setting_id": "k2os2FPNl8K7vTZN", - "filament_id": "GFG99", + "filament_id": "OFf6ynfH", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json index 41f16faf65..85a926f7e9 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Basic @Ghost7.json @@ -5,7 +5,7 @@ "renamed_from": "FlyingBear PLA @Ghost7", "from": "system", "setting_id": "3JBTG6IDrBCnvIhf", - "filament_id": "GFL99", + "filament_id": "OF3fwO8b", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json index 488cda963c..eb744fd971 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear PLA Hyper @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @Ghost7", "from": "system", "setting_id": "qQZUolZHgJxgLo17", - "filament_id": "GFL99", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json index 8b66f6d1ca..6c7ebbab2e 100644 --- a/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json +++ b/resources/profiles/FlyingBear/filament/Ghost7/FlyingBear TPU Basic @Ghost7.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @Ghost7", "from": "system", "setting_id": "wQQncT0OCAktGyHr", - "filament_id": "GFU99", + "filament_id": "OFHf2lKK", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json index a04e655f4b..7c2a4dc745 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @S1", "from": "system", "setting_id": "7dtepGnoDDAdPtUh", - "filament_id": "GFB99", + "filament_id": "OFm4ysMO", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json index f24c0d882e..852af29fdd 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @S1", "from": "system", "setting_id": "CLggyaDcebZSbqIH", - "filament_id": "GFN98", + "filament_id": "OFQEGL7z", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json index 54fb8a7ca1..a546a5ed5b 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @S1", "from": "system", "setting_id": "bPeSARy9AGqM8Y32", - "filament_id": "GFC99", + "filament_id": "OFFX1DRD", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json index 77bc4b151f..206929433a 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @S1", "from": "system", "setting_id": "yKU5mMW0nKvNH98B", - "filament_id": "GFG99", + "filament_id": "OFDgQaca", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json index 3c3fbd5af8..4f8637c29d 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @S1", "from": "system", "setting_id": "k58jL17n8cOla3Gd", - "filament_id": "GFL99", + "filament_id": "OFilD4bP", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json index 06148f4f70..82978a61be 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @S1", "from": "system", "setting_id": "h8XGgMBjEwxNkldf", - "filament_id": "GFL99", + "filament_id": "OFD9taow", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json index 2cd4a9e943..27bc1a6ba5 100644 --- a/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/FlyingBear TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @S1", "from": "system", "setting_id": "IVFpAlGo8KButueJ", - "filament_id": "GFU99", + "filament_id": "OFYezc6s", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json index 7e37ab1996..7dedb1f5cf 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other ABS @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @S1", "from": "system", "setting_id": "Nadd5NX7eDvEnlKO", - "filament_id": "GFB99", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json index 8eff7046ea..0e4cace2f1 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PA-CF @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @S1", "from": "system", "setting_id": "sSKkzXv1cn33fF7p", - "filament_id": "GFN98", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json index 9a09e1c0d5..a2dfa6158b 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PC @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @S1", "from": "system", "setting_id": "mHuxaHppNFZbldHD", - "filament_id": "GFC99", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json index b610388077..f2e5665dc4 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PETG @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @S1", "from": "system", "setting_id": "Ko5q6BgADth36RJC", - "filament_id": "GFG99", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json index 1df8312686..7b767cf298 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @S1", "from": "system", "setting_id": "sayo3sMQKH4ZdhEk", - "filament_id": "GFL99", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json index b9913afec4..1104767ce9 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other PLA Hyper @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @S1", "from": "system", "setting_id": "2QHCKH0yDmBzpQnY", - "filament_id": "GFL99", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json index aa56b7f0f7..4202a54091 100644 --- a/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json +++ b/resources/profiles/FlyingBear/filament/S1/Other TPU @S1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @S1", "from": "system", "setting_id": "wh8PHrEbFYKsQxo0", - "filament_id": "GFU99", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json index 633e17dd93..c5ac0140a5 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6 0.4 nozzle.json @@ -122,7 +122,7 @@ "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "machine_start_gcode": "M220 S100 ;reset feedrate\nM221 S100 ;reset flowrate\nG21 ;set units to millimeters\nG90 ;use absolute coordinates\nM82 ;absolute extrusion mode\nM107 ;turn off colling fan\n\nM140 S[bed_temperature_initial_layer] ;set bed temperature continue without waiting\nM104 S[nozzle_temperature_initial_layer] ;set hotend temperature continue without waiting\n\nG28 ;home\nG1 Z2 F1500 ;raise z\nG92 E0 ;reset extruder\n\nM190 S[bed_temperature_initial_layer] ;wait for bed temperature\nM109 S[nozzle_temperature_initial_layer] ;wait for hotend temperature\n\nG1 X20 Y20 F5000 ;start position \nG1 Z0.28 F1500 ;lower z\nG1 E4 F500 ;prime the filament\n\nG1 X20 Y20.0 Z0.28 F3000.0 ;start position \nG1 X20 Y170.0 Z0.28 F1500.0 E12 ;1st line\nG1 X20.3 F1500\nG1 X20.3 Y20.0 Z0.28 F1500.0 E18 ;2nd line\n\nG92 E0 ;reset extruder\nG1 Z2 F1500 ;raise z\nG92 E0 ;reset extruder\n", "machine_end_gcode": "G91 ;use relative coordinates\nG1 E-4 F1500 ;retract the filament\nG1 X5 Y5 Z0.2 F5000 ;wipe\nG1 Z5 F1500 ;raise z\nG90 ;use absolute coordinates\nG1 X10 Y210 F5000 ;park print head\n\nM107 ;turn off fan\nM104 S0 ;turn off hotend\nM140 S0 ;turn off heatbed\nM84 ;disable motors", diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json index 3b1968c724..18a5c27f14 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Ghost 6.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Ghost 6-bed.stl", "bed_texture": "FlyingBear Ghost 6-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json b/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json index e75b8d0697..43dd2de3d4 100644 --- a/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/machine/FlyingBear Reborn3.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Reborn3-bed.stl", "bed_texture": "FlyingBear Reborn3-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear" } diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json index 4da21780a1..fd14f77ebf 100644 --- a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7 0.4 nozzle.json @@ -180,7 +180,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json index 959a8f1193..67d3d6181a 100644 --- a/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json +++ b/resources/profiles/FlyingBear/machine/Ghost7/FlyingBear Ghost7.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear Ghost7-bed.stl", "bed_texture": "FlyingBear Ghost7-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear;FlyingBear PLA Basic @Ghost7" } diff --git a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json index 4e176dca31..442050312c 100644 --- a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json +++ b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1 0.4 nozzle.json @@ -177,7 +177,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json index 2063aab681..0e0627029b 100644 --- a/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json +++ b/resources/profiles/FlyingBear/machine/S1/FlyingBear S1.json @@ -8,5 +8,5 @@ "bed_model": "FlyingBear S1-bed.stl", "bed_texture": "FlyingBear S1-texture.png", "hotend_model": "", - "default_materials": "FlyingBear Generic ABS;FlyingBear Generic PA-CF;FlyingBear Generic PC;FlyingBear Generic PETG;FlyingBear Generic PLA;FlyingBear Generic TPU" + "default_materials": "Generic ABS @FlyingBear;Generic PA-CF @FlyingBear;Generic PC @FlyingBear;Generic PETG @FlyingBear;Generic PLA @FlyingBear;Generic TPU @FlyingBear;FlyingBear PLA @S1" } diff --git a/resources/profiles/FlyingBear/machine/fdm_klipper_common.json b/resources/profiles/FlyingBear/machine/fdm_klipper_common.json index 8053ff22d0..f70809115f 100644 --- a/resources/profiles/FlyingBear/machine/fdm_klipper_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_klipper_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "default_print_profile": "0.20mm Standard @FlyingBear Reborn3", "deretraction_speed": [ @@ -176,7 +176,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/FlyingBear/machine/fdm_machine_common.json b/resources/profiles/FlyingBear/machine/fdm_machine_common.json index 28e9665346..c6309bb273 100644 --- a/resources/profiles/FlyingBear/machine/fdm_machine_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_machine_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "FlyingBear Generic PLA" + "Generic PLA @FlyingBear" ], "default_print_profile": "0.20mm Standard @FlyingBear Reborn3", "deretraction_speed": [ @@ -172,7 +172,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/FlyingBear/machine/fdm_marlin_common.json b/resources/profiles/FlyingBear/machine/fdm_marlin_common.json index 41ac0f91ca..d3c1abf330 100644 --- a/resources/profiles/FlyingBear/machine/fdm_marlin_common.json +++ b/resources/profiles/FlyingBear/machine/fdm_marlin_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json b/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json index b8200ed6aa..4f4f7c8ae5 100644 --- a/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json +++ b/resources/profiles/FlyingBear/process/0.16mm Optimal @FlyingBear Reborn3.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json index 36f8e3705c..70b79e5397 100644 --- a/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json +++ b/resources/profiles/FlyingBear/process/Ghost7/0.16mm Optimal @FlyingBear Ghost7.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json index 9b34de8437..5c020a7a1e 100644 --- a/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json +++ b/resources/profiles/FlyingBear/process/Ghost7/fdm_process_common_Ghost7.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "150", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json b/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json index 27c9643f05..965f71c7f4 100644 --- a/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json +++ b/resources/profiles/FlyingBear/process/S1/0.16mm Optimal @FlyingBear S1.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json index d922fcf3dc..3b7cdda9e9 100644 --- a/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json +++ b/resources/profiles/FlyingBear/process/S1/fdm_process_common_S1.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/FlyingBear/process/fdm_process_common.json b/resources/profiles/FlyingBear/process/fdm_process_common.json index 7e7bc9ddb1..bfd2a604e6 100644 --- a/resources/profiles/FlyingBear/process/fdm_process_common.json +++ b/resources/profiles/FlyingBear/process/fdm_process_common.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/FlyingBear/process/fdm_process_marlin_common.json b/resources/profiles/FlyingBear/process/fdm_process_marlin_common.json index 6dd6b765be..72d4365446 100644 --- a/resources/profiles/FlyingBear/process/fdm_process_marlin_common.json +++ b/resources/profiles/FlyingBear/process/fdm_process_marlin_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -83,7 +82,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "45", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Folgertech.json b/resources/profiles/Folgertech.json index 125cba3d46..24f68067e7 100644 --- a/resources/profiles/Folgertech.json +++ b/resources/profiles/Folgertech.json @@ -1,6 +1,6 @@ { "name": "Folgertech", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Folgertech configurations", "machine_model_list": [ diff --git a/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json b/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json index 40cf5fbf82..59fb023448 100644 --- a/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json +++ b/resources/profiles/Folgertech/machine/Folgertech i3 0.6 nozzle.json @@ -12,7 +12,7 @@ "printer_variant": "0.6", "printable_area": [ "0x0", - "20x0", + "200x0", "200x200", "0x200" ], diff --git a/resources/profiles/Folgertech/machine/fdm_folgertech_common.json b/resources/profiles/Folgertech/machine/fdm_folgertech_common.json index 035e434afe..c534b9cacb 100644 --- a/resources/profiles/Folgertech/machine/fdm_folgertech_common.json +++ b/resources/profiles/Folgertech/machine/fdm_folgertech_common.json @@ -115,7 +115,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", diff --git a/resources/profiles/Folgertech/machine/fdm_machine_common.json b/resources/profiles/Folgertech/machine/fdm_machine_common.json index 04ab524f9c..f7f0f31d7e 100644 --- a/resources/profiles/Folgertech/machine/fdm_machine_common.json +++ b/resources/profiles/Folgertech/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", diff --git a/resources/profiles/Folgertech/process/fdm_process_common.json b/resources/profiles/Folgertech/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Folgertech/process/fdm_process_common.json +++ b/resources/profiles/Folgertech/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json index d04362b5af..caecb87a65 100644 --- a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json +++ b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Geeetech.json b/resources/profiles/Geeetech.json index cdd862e161..26651c6109 100644 --- a/resources/profiles/Geeetech.json +++ b/resources/profiles/Geeetech.json @@ -1,6 +1,6 @@ { "name": "Geeetech", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Geeetech configurations", "machine_model_list": [ diff --git a/resources/profiles/Geeetech/machine/fdm_geeetech_common.json b/resources/profiles/Geeetech/machine/fdm_geeetech_common.json index 341fe0a126..8113b62d4c 100644 --- a/resources/profiles/Geeetech/machine/fdm_geeetech_common.json +++ b/resources/profiles/Geeetech/machine/fdm_geeetech_common.json @@ -117,7 +117,6 @@ "deretraction_speed": [ "20" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", diff --git a/resources/profiles/Geeetech/machine/fdm_machine_common.json b/resources/profiles/Geeetech/machine/fdm_machine_common.json index 97e8b60691..e08af83a05 100644 --- a/resources/profiles/Geeetech/machine/fdm_machine_common.json +++ b/resources/profiles/Geeetech/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -111,7 +110,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", "before_layer_change_gcode": "G92 E0", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", diff --git a/resources/profiles/Geeetech/process/fdm_process_common.json b/resources/profiles/Geeetech/process/fdm_process_common.json index ef52351d98..b7313353c8 100644 --- a/resources/profiles/Geeetech/process/fdm_process_common.json +++ b/resources/profiles/Geeetech/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Ginger Additive.json b/resources/profiles/Ginger Additive.json index ff4c3bec09..d9a38ccfba 100644 --- a/resources/profiles/Ginger Additive.json +++ b/resources/profiles/Ginger Additive.json @@ -1,6 +1,6 @@ { "name": "Ginger Additive", - "version": "02.04.00.03", + "version": "02.04.00.05", "force_update": "1", "description": "Ginger configuration", "machine_model_list": [ @@ -67,12 +67,12 @@ "sub_path": "filament/fdm_filament_common.json" }, { - "name": "Ginger Generic PETG", - "sub_path": "filament/Ginger Generic PETG.json" + "name": "Generic PETG @Ginger", + "sub_path": "filament/Generic PETG @Ginger.json" }, { - "name": "Ginger Generic PLA", - "sub_path": "filament/Ginger Generic PLA.json" + "name": "Generic PLA @Ginger", + "sub_path": "filament/Generic PLA @Ginger.json" } ] } diff --git a/resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json b/resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json new file mode 100644 index 0000000000..b9e6ce122c --- /dev/null +++ b/resources/profiles/Ginger Additive/filament/Generic PETG @Ginger.json @@ -0,0 +1,130 @@ +{ + "type": "filament", + "name": "Generic PETG @Ginger", + "renamed_from": "Ginger Generic rPETG;Ginger Generic PETG", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "rogjLzHbtvooz2lw", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "enable_overhang_bridge_fan": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "0" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.23" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "200" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "PETG" + ], + "filament_start_gcode": [ + "SET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.5" + ], + "filament_type": [ + "PETG" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.3" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "30" + ], + "slow_down_min_speed": [ + "1" + ], + "temperature_vitrification": [ + "75" + ], + "compatible_printers": [ + "Ginger G1 1.2 nozzle", + "Ginger G1 3.0 nozzle", + "Ginger G1 5.0 nozzle", + "Ginger G1 8.0 nozzle" + ] +} diff --git a/resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json b/resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json new file mode 100644 index 0000000000..61e91d1f1e --- /dev/null +++ b/resources/profiles/Ginger Additive/filament/Generic PLA @Ginger.json @@ -0,0 +1,130 @@ +{ + "type": "filament", + "name": "Generic PLA @Ginger", + "renamed_from": "Ginger Generic rPLA;Ginger Generic PLA", + "inherits": "fdm_filament_common", + "from": "system", + "setting_id": "tu6pOYYSBlZCvmbH", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "enable_overhang_bridge_fan": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "0" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "6" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "250" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "PLA" + ], + "filament_start_gcode": [ + "SET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.5" + ], + "filament_type": [ + "PLA" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "180" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.3" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "50" + ], + "slow_down_min_speed": [ + "1" + ], + "temperature_vitrification": [ + "55" + ], + "compatible_printers": [ + "Ginger G1 1.2 nozzle", + "Ginger G1 3.0 nozzle", + "Ginger G1 5.0 nozzle", + "Ginger G1 8.0 nozzle" + ] +} diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json deleted file mode 100644 index a84183df4d..0000000000 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PETG.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "type": "filament", - "name": "Ginger Generic PETG", - "renamed_from": "Ginger Generic rPETG", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "ue95N2e65rdp5K6c", - "instantiation": "true", - "filament_vendor": [ - "Generic" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "enable_overhang_bridge_fan": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "0" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.23" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_max_volumetric_speed": [ - "200" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "PETG" - ], - "filament_start_gcode": [ - "SET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.5" - ], - "filament_type": [ - "PETG" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.3" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_layer_time": [ - "30" - ], - "slow_down_min_speed": [ - "1" - ], - "temperature_vitrification": [ - "75" - ], - "compatible_printers": [ - "Ginger G1 1.2 nozzle", - "Ginger G1 3.0 nozzle", - "Ginger G1 5.0 nozzle", - "Ginger G1 8.0 nozzle" - ] -} diff --git a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json b/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json deleted file mode 100644 index 1aaacd7e1e..0000000000 --- a/resources/profiles/Ginger Additive/filament/Ginger Generic PLA.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "type": "filament", - "name": "Ginger Generic PLA", - "renamed_from": "Ginger Generic rPLA", - "inherits": "fdm_filament_common", - "from": "system", - "setting_id": "Z1scjKDBFoDaTa2C", - "instantiation": "true", - "filament_vendor": [ - "Generic" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "enable_overhang_bridge_fan": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "0" - ], - "fan_min_speed": [ - "0" - ], - "filament_cost": [ - "6" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_max_volumetric_speed": [ - "250" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "PLA" - ], - "filament_start_gcode": [ - "SET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.5" - ], - "filament_type": [ - "PLA" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "180" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.3" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_layer_time": [ - "50" - ], - "slow_down_min_speed": [ - "1" - ], - "temperature_vitrification": [ - "55" - ], - "compatible_printers": [ - "Ginger G1 1.2 nozzle", - "Ginger G1 3.0 nozzle", - "Ginger G1 5.0 nozzle", - "Ginger G1 8.0 nozzle" - ] -} diff --git a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json index 8c906528a0..d6603a932e 100644 --- a/resources/profiles/Ginger Additive/filament/fdm_filament_common.json +++ b/resources/profiles/Ginger Additive/filament/fdm_filament_common.json @@ -2,7 +2,6 @@ "type": "filament", "name": "fdm_filament_common", "from": "system", - "filament_id": "P510eff9", "instantiation": "false", "activate_air_filtration": [ "0" @@ -94,9 +93,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -166,9 +162,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/Ginger Additive/machine/Ginger G1.json b/resources/profiles/Ginger Additive/machine/Ginger G1.json index 54756fd549..e379f536e4 100644 --- a/resources/profiles/Ginger Additive/machine/Ginger G1.json +++ b/resources/profiles/Ginger Additive/machine/Ginger G1.json @@ -8,5 +8,5 @@ "family": "Ginger", "bed_model": "Ginger_G1.stl", "bed_texture": "Ginger_One_texture.svg", - "default_materials": "Ginger Generic PETG;Ginger Generic PLA" + "default_materials": "Generic PETG @Ginger;Generic PLA @Ginger" } diff --git a/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json b/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json index 8b218915d1..a6fcccb284 100644 --- a/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json +++ b/resources/profiles/Ginger Additive/machine/Ginger_G1_common.json @@ -1,13 +1,12 @@ { "type": "machine", "name": "Ginger_G1_common", - "renamed_from": "ginger_one_common", "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", "printer_settings_id": "Ginger_G1_common", "default_filament_profile": [ - "Ginger Generic PLA" + "Generic PLA @Ginger" ], "default_print_profile": "1.50mm Standard @Ginger G1", "deretraction_speed": [ diff --git a/resources/profiles/Ginger Additive/machine/fdm_machine_common.json b/resources/profiles/Ginger Additive/machine/fdm_machine_common.json index 751c0e71f4..60cbb522c5 100644 --- a/resources/profiles/Ginger Additive/machine/fdm_machine_common.json +++ b/resources/profiles/Ginger Additive/machine/fdm_machine_common.json @@ -191,7 +191,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/Ginger Additive/process/fdm_process_common.json b/resources/profiles/Ginger Additive/process/fdm_process_common.json index cd590b710e..3a582c6bc3 100644 --- a/resources/profiles/Ginger Additive/process/fdm_process_common.json +++ b/resources/profiles/Ginger Additive/process/fdm_process_common.json @@ -122,7 +122,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/InfiMech.json b/resources/profiles/InfiMech.json index 7ae4c46fb4..78c54e0b4d 100644 --- a/resources/profiles/InfiMech.json +++ b/resources/profiles/InfiMech.json @@ -1,6 +1,6 @@ { "name": "InfiMech", - "version": "02.04.00.02", + "version": "02.04.00.06", "force_update": "1", "description": "InfiMech configurations", "machine_model_list": [ @@ -305,40 +305,40 @@ "sub_path": "filament/HSN/fdm_filament_tpu_other @HSN.json" }, { - "name": "InfiMech Generic ABS", - "sub_path": "filament/InfiMech Generic ABS.json" + "name": "Generic ABS @InfiMech", + "sub_path": "filament/Generic ABS @InfiMech.json" }, { "name": "Other ABS", "sub_path": "filament/Other ABS.json" }, { - "name": "InfiMech Generic PA-CF", - "sub_path": "filament/InfiMech Generic PA-CF.json" + "name": "Generic PA-CF @InfiMech", + "sub_path": "filament/Generic PA-CF @InfiMech.json" }, { "name": "Other PA-CF", "sub_path": "filament/Other PA-CF.json" }, { - "name": "InfiMech Generic PC", - "sub_path": "filament/InfiMech Generic PC.json" + "name": "Generic PC @InfiMech", + "sub_path": "filament/Generic PC @InfiMech.json" }, { "name": "Other PC", "sub_path": "filament/Other PC.json" }, { - "name": "InfiMech Generic PETG", - "sub_path": "filament/InfiMech Generic PETG.json" + "name": "Generic PETG @InfiMech", + "sub_path": "filament/Generic PETG @InfiMech.json" }, { "name": "Other PETG", "sub_path": "filament/Other PETG.json" }, { - "name": "InfiMech Generic PLA", - "sub_path": "filament/InfiMech Generic PLA.json" + "name": "Generic PLA @InfiMech", + "sub_path": "filament/Generic PLA @InfiMech.json" }, { "name": "InfiMech PLA Hyper", @@ -353,8 +353,8 @@ "sub_path": "filament/Other PLA.json" }, { - "name": "InfiMech Generic TPU", - "sub_path": "filament/InfiMech Generic TPU.json" + "name": "Generic TPU @InfiMech", + "sub_path": "filament/Generic TPU @InfiMech.json" }, { "name": "Other TPU", @@ -476,11 +476,11 @@ "machine_list": [ { "name": "fdm_machine_common", - "sub_path": "machine/HSN/fdm_machine_common.json" + "sub_path": "machine/fdm_machine_common.json" }, { "name": "fdm_klipper_common", - "sub_path": "machine/HSN/fdm_klipper_common.json" + "sub_path": "machine/fdm_klipper_common.json" }, { "name": "InfiMech EX 0.4 nozzle", diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json index ab07650434..715649fabd 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech ABS @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX+APS", "from": "system", "setting_id": "3EdHfL9KE4oRVHB7", - "filament_id": "GFB99", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json index 0173f7ee05..677e39587e 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PA-CF @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX+APS", "from": "system", "setting_id": "6YMXdKicP2hGUUJn", - "filament_id": "GFN98", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json index c68955287b..3ce073a006 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PC @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX+APS", "from": "system", "setting_id": "GsYpyooWb6ymAb36", - "filament_id": "GFC99", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json index 39d510f085..993574d86c 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PETG @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX+APS", "from": "system", "setting_id": "sNsRp3vHhcWAxp7d", - "filament_id": "GFG99", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json index 8d715771b9..12b79b7722 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Basic @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX+APS", "from": "system", "setting_id": "UTrjyqqetOSYNZxJ", - "filament_id": "GFL99", + "filament_id": "OFObG16Q", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json index cbc94ccedd..b857cabc2b 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech PLA Hyper @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX+APS", "from": "system", "setting_id": "p08bW50lbzMjwL5B", - "filament_id": "GFL99", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json index 9632d002fb..1396c07546 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/InfiMech TPU Basic @EX+APS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @EX+APS", "from": "system", "setting_id": "fy9sPlaVkaXHBxbH", - "filament_id": "GFU99", + "filament_id": "OFbSZBOi", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json b/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json index 396373accc..0d8b7f36ef 100644 --- a/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json +++ b/resources/profiles/InfiMech/filament/EX+APS/fdm_filament_pet @EX+APS.json @@ -44,7 +44,7 @@ "12" ], "filament_type": [ - "PETG Basic" + "PETG" ], "filament_density": [ "1.27" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json index 05b1f4e017..4aa2e82fd8 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech ABS @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @EX", "from": "system", "setting_id": "e6st01mMFr98LVEH", - "filament_id": "GFB99", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json index 3042fe20f8..e328da4f73 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PA-CF @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @EX", "from": "system", "setting_id": "qPCd5oTrCmZi63Ng", - "filament_id": "GFN98", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json index b1c46585e0..438743bac4 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PC @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @EX", "from": "system", "setting_id": "Uc2o223YSyShp7EI", - "filament_id": "GFC99", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json index 47172fa13a..30c38c5a07 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PETG @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @EX", "from": "system", "setting_id": "5vqLJrKLKv40sT7y", - "filament_id": "GFG99", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json index 071d0eb53c..f0ab2e094d 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Basic @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @EX", "from": "system", "setting_id": "bGOpriWvEFZOmqR4", - "filament_id": "GFL99", + "filament_id": "OFObG16Q", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json index 1fab11094e..3c88c1af03 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech PLA Hyper @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @EX", "from": "system", "setting_id": "y8A92Dw8EMplnZAM", - "filament_id": "GFL99", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json b/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json index b72767fc58..fc78851c8b 100644 --- a/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json +++ b/resources/profiles/InfiMech/filament/EX/InfiMech TPU Basic @EX.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @EX", "from": "system", "setting_id": "vAMeXNwHNVMKYWz3", - "filament_id": "GFU99", + "filament_id": "OFbSZBOi", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json b/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json index c718df9d89..0213942153 100644 --- a/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json +++ b/resources/profiles/InfiMech/filament/EX/fdm_filament_pet @EX.json @@ -44,7 +44,7 @@ "12" ], "filament_type": [ - "PETG Basic" + "PETG" ], "filament_density": [ "1.27" diff --git a/resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json b/resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json new file mode 100644 index 0000000000..80b479de75 --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic ABS @InfiMech.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic ABS @InfiMech", + "inherits": "fdm_filament_abs", + "renamed_from": "InfiMech Generic ABS", + "from": "system", + "setting_id": "HRLECASD9Ko4Xxof", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.058" + ], + "filament_retraction_length": [ + "0.8" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json b/resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json new file mode 100644 index 0000000000..0c202c609c --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic PA-CF @InfiMech.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Generic PA-CF @InfiMech", + "inherits": "fdm_filament_pa", + "renamed_from": "InfiMech Generic PA-CF", + "from": "system", + "setting_id": "IRYJpvGGjpF4ofY1", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_type": [ + "PA-CF" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "4" + ], + "filament_retract_before_wipe": [ + "0%" + ], + "filament_retraction_length": [ + "0.8" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/Generic PC @InfiMech.json b/resources/profiles/InfiMech/filament/Generic PC @InfiMech.json new file mode 100644 index 0000000000..a37d5db2b7 --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic PC @InfiMech.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PC @InfiMech", + "inherits": "fdm_filament_pc", + "renamed_from": "InfiMech Generic PC", + "from": "system", + "setting_id": "W0oujcCps06G6yNB", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.058" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json b/resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json new file mode 100644 index 0000000000..55162d9852 --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic PETG @InfiMech.json @@ -0,0 +1,58 @@ +{ + "type": "filament", + "name": "Generic PETG @InfiMech", + "inherits": "fdm_filament_pet", + "renamed_from": "InfiMech Generic PETG", + "from": "system", + "setting_id": "sAi8oKez7NGKo1wy", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.084" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json b/resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json new file mode 100644 index 0000000000..4d2d7dc402 --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic PLA @InfiMech.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @InfiMech", + "inherits": "fdm_filament_pla", + "renamed_from": "InfiMech Generic PLA", + "from": "system", + "setting_id": "tdnlzJyNB6zpQS8w", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "0" + ], + "pressure_advance": [ + "0.032" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json b/resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json new file mode 100644 index 0000000000..bc2b0c37a8 --- /dev/null +++ b/resources/profiles/InfiMech/filament/Generic TPU @InfiMech.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic TPU @InfiMech", + "inherits": "fdm_filament_tpu", + "renamed_from": "InfiMech Generic TPU", + "from": "system", + "setting_id": "kK1S7YP8vgTJeFPO", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_vendor": [ + "Generic" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_flow_ratio": [ + "0.94" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.13" + ], + "compatible_printers": [ + "InfiMech TX 0.4 nozzle" + ] +} diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json index 202565b819..fd57e1f375 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs @HSN", "from": "system", "setting_id": "QnEhnvxibr6g1nou", - "filament_id": "GFB99", + "filament_id": "OF0c7mnL", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json index 3f6524b54c..d798d7803c 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa @HSN", "from": "system", "setting_id": "L1j3mDKXjE2RKO1B", - "filament_id": "GFN98", + "filament_id": "OFnXrkhA", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json index 35a3314a90..41bf6e142f 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc @HSN", "from": "system", "setting_id": "HBNOABPFLninXsW6", - "filament_id": "GFC99", + "filament_id": "OFf6ZEvu", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json index 1997c1b375..7102e440cd 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet @HSN", "from": "system", "setting_id": "DJyFBjQ5n9n1UHv0", - "filament_id": "GFG99", + "filament_id": "OFrLiqiM", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json index f3118fe1d6..d2803e44b4 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla @HSN", "from": "system", "setting_id": "NWKMG5q4ITfHcYOD", - "filament_id": "GFL99", + "filament_id": "OFUYCqtB", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json index a7988eaa70..6f91f0f360 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper @HSN", "from": "system", "setting_id": "fAw5pB53L8ZT1Fkm", - "filament_id": "GFL99", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json index 098ed99ae0..7ba202db61 100644 --- a/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/InfiMech TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu @HSN", "from": "system", "setting_id": "CvTHZpKuTaGS186F", - "filament_id": "GFU99", + "filament_id": "OFIVWJPm", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json index c7b6451fab..7ba69d8119 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other ABS @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other @HSN", "from": "system", "setting_id": "IuZcFrVQ2rJoMDLP", - "filament_id": "GFB99", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json index fe5f2097d5..091152a3e2 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PA-CF @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other @HSN", "from": "system", "setting_id": "4I0FW5meyC53Xf8n", - "filament_id": "GFN98", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json index e87712a278..d0319e1a8d 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PC @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other @HSN", "from": "system", "setting_id": "vUuSuioOUXsg2P3p", - "filament_id": "GFC99", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json index 0a4f102aa3..f9adba5c1e 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PETG @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other @HSN", "from": "system", "setting_id": "lWYq9XssEyY3uWEe", - "filament_id": "GFG99", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json index c775f37bfc..1bc6c1a439 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other @HSN", "from": "system", "setting_id": "wOExDniXvR7CcF1w", - "filament_id": "GFL99", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json index b3cc531849..53fa4de6e6 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other PLA Hyper @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other @HSN", "from": "system", "setting_id": "154azDg7YNNWCkNK", - "filament_id": "GFL99", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json index adbf1cc254..71c277b924 100644 --- a/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json +++ b/resources/profiles/InfiMech/filament/HSN/Other TPU @HSN.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other @HSN", "from": "system", "setting_id": "0bU2fl92vCQobYnt", - "filament_id": "GFU99", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json b/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json deleted file mode 100644 index 688f43673d..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic ABS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "gtJ2ZoV8fxqqOXuv", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.058" - ], - "filament_retraction_length": [ - "0.8" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json b/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json deleted file mode 100644 index 74be583957..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PA-CF.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "k2NSIB3vVUoXGW9F", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_wipe": [ - "1" - ], - "filament_wipe_distance": [ - "4" - ], - "filament_retract_before_wipe": [ - "0%" - ], - "filament_retraction_length": [ - "0.8" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json b/resources/profiles/InfiMech/filament/InfiMech Generic PC.json deleted file mode 100644 index 2d2223271c..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PC.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "emj9YLXtmKmeoYJa", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.058" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json b/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json deleted file mode 100644 index 4837c0eb9e..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PETG.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "rhXq50q3u2YxNRcE", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.084" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json b/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json deleted file mode 100644 index 0fa96a3fca..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic PLA.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "BHNIPk7Nbl7hXZY1", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "0" - ], - "pressure_advance": [ - "0.032" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json b/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json deleted file mode 100644 index f942042dfd..0000000000 --- a/resources/profiles/InfiMech/filament/InfiMech Generic TPU.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "InfiMech Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "pHS9IcwvsPCnkpaO", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3" - ], - "filament_flow_ratio": [ - "0.94" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.13" - ], - "compatible_printers": [ - "InfiMech TX 0.4 nozzle" - ] -} diff --git a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json index dee081317f..d90023a4bf 100644 --- a/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/InfiMech PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper", "from": "system", "setting_id": "j86QMTif4fGujRbg", - "filament_id": "GFL99", + "filament_id": "OF3ydJTT", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other ABS.json b/resources/profiles/InfiMech/filament/Other ABS.json index a120f2dda6..897962d0a1 100644 --- a/resources/profiles/InfiMech/filament/Other ABS.json +++ b/resources/profiles/InfiMech/filament/Other ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs_other", "from": "system", "setting_id": "nDLB3RZq23limiBn", - "filament_id": "GFB99", + "filament_id": "OFYuowge", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PA-CF.json b/resources/profiles/InfiMech/filament/Other PA-CF.json index 1829ec16bb..43be7b9024 100644 --- a/resources/profiles/InfiMech/filament/Other PA-CF.json +++ b/resources/profiles/InfiMech/filament/Other PA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa_other", "from": "system", "setting_id": "rgz4LjU9KyvbLhRQ", - "filament_id": "GFN98", + "filament_id": "OFkAltI8", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/InfiMech/filament/Other PC.json b/resources/profiles/InfiMech/filament/Other PC.json index dda6d2def7..be8f684ebf 100644 --- a/resources/profiles/InfiMech/filament/Other PC.json +++ b/resources/profiles/InfiMech/filament/Other PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc_other", "from": "system", "setting_id": "VXkW5oukQdBX6B6T", - "filament_id": "GFC99", + "filament_id": "OFyRCIMh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/InfiMech/filament/Other PETG.json b/resources/profiles/InfiMech/filament/Other PETG.json index 552e3e4fe7..216c4a964c 100644 --- a/resources/profiles/InfiMech/filament/Other PETG.json +++ b/resources/profiles/InfiMech/filament/Other PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet_other", "from": "system", "setting_id": "onLEWi8GYK0avard", - "filament_id": "GFG99", + "filament_id": "OFDRpXLZ", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/InfiMech/filament/Other PLA Hyper.json b/resources/profiles/InfiMech/filament/Other PLA Hyper.json index 4d1aa6c742..9ddd68581a 100644 --- a/resources/profiles/InfiMech/filament/Other PLA Hyper.json +++ b/resources/profiles/InfiMech/filament/Other PLA Hyper.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_Hyper_other", "from": "system", "setting_id": "Iop52BLp5ou8u4QG", - "filament_id": "GFL99", + "filament_id": "OFklJcWK", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other PLA.json b/resources/profiles/InfiMech/filament/Other PLA.json index aa1fa0a091..62c32ee9ef 100644 --- a/resources/profiles/InfiMech/filament/Other PLA.json +++ b/resources/profiles/InfiMech/filament/Other PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla_other", "from": "system", "setting_id": "2Bl4sfgGJBjNMk37", - "filament_id": "GFL99", + "filament_id": "OFGJ1nxs", "instantiation": "true", "filament_flow_ratio": [ "0.94" diff --git a/resources/profiles/InfiMech/filament/Other TPU.json b/resources/profiles/InfiMech/filament/Other TPU.json index edbee9b887..1af02b2659 100644 --- a/resources/profiles/InfiMech/filament/Other TPU.json +++ b/resources/profiles/InfiMech/filament/Other TPU.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu_other", "from": "system", "setting_id": "nqDc2q94Q2hwMi7B", - "filament_id": "GFU99", + "filament_id": "OFwVVKEV", "instantiation": "true", "filament_max_volumetric_speed": [ "3" diff --git a/resources/profiles/InfiMech/machine/EX+APS/InfiMech EX+APS 0.4 nozzle.json b/resources/profiles/InfiMech/machine/EX+APS/InfiMech EX+APS 0.4 nozzle.json index 149177562f..a77186c2fd 100644 --- a/resources/profiles/InfiMech/machine/EX+APS/InfiMech EX+APS 0.4 nozzle.json +++ b/resources/profiles/InfiMech/machine/EX+APS/InfiMech EX+APS 0.4 nozzle.json @@ -180,7 +180,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/InfiMech/machine/EX/InfiMech EX 0.4 nozzle.json b/resources/profiles/InfiMech/machine/EX/InfiMech EX 0.4 nozzle.json index 2bf51ab627..a018e3f8a3 100644 --- a/resources/profiles/InfiMech/machine/EX/InfiMech EX 0.4 nozzle.json +++ b/resources/profiles/InfiMech/machine/EX/InfiMech EX 0.4 nozzle.json @@ -180,7 +180,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json b/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json index fff3371aba..87fd816638 100644 --- a/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json +++ b/resources/profiles/InfiMech/machine/HSN/InfiMech TX Hardened Steel Nozzle.json @@ -8,5 +8,5 @@ "bed_model": "InfiMech TX-bed.stl", "bed_texture": "InfiMech TX-texture.svg", "hotend_model": "", - "default_materials": "InfiMech Generic ABS;InfiMech Generic PA-CF;InfiMech Generic PC;InfiMech Generic PETG;InfiMech Generic PLA;InfiMech Generic TPU" + "default_materials": "Generic ABS @InfiMech;Generic PA-CF @InfiMech;Generic PC @InfiMech;Generic PETG @InfiMech;Generic PLA @InfiMech;Generic TPU @InfiMech;InfiMech PLA @HSN" } diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json deleted file mode 100644 index 68b3b30e45..0000000000 --- a/resources/profiles/InfiMech/machine/HSN/fdm_klipper_common.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "type": "machine", - "name": "fdm_klipper_common", - "inherits": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "gcode_flavor": "klipper", - "auxiliary_fan": "1", - "bed_exclude_area": [ - "0x0" - ], - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", - "change_filament_gcode": "", - "cooling_tube_length": "5", - "cooling_tube_retraction": "91.5", - "default_filament_profile": [ - "InfiMech Generic PLA" - ], - "default_print_profile": "0.20mm Standard @InfiMech TX", - "deretraction_speed": [ - "30" - ], - "enable_filament_ramming": "1", - "extra_loading_move": "-2", - "extruder_clearance_height_to_lid": "69", - "extruder_clearance_height_to_rod": "69", - "extruder_clearance_radius": "49", - "extruder_colour": [ - "#FCE94F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "high_current_on_filament_swap": "0", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_end_gcode": "PRINT_END", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "20000", - "20000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], - "machine_max_jerk_z": [ - "3", - "0.4" - ], - "machine_max_speed_e": [ - "30", - "25" - ], - "machine_max_speed_x": [ - "600", - "200" - ], - "machine_max_speed_y": [ - "600", - "200" - ], - "machine_max_speed_z": [ - "20", - "12" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9.2-20240814;\n;wiping nozzle start\nM106 P3 S0\nM140 S[bed_temperature_initial_layer_single]\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F10000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nG1 Z5\nM190 S[bed_temperature_initial_layer_single]\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F8000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0 F400\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\n;G1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E3 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", - "machine_unload_filament_time": "0", - "max_layer_height": [ - "0.28" - ], - "min_layer_height": [ - "0.08" - ], - "nozzle_diameter": [ - "0.4" - ], - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "151.32", - "parking_pos_retraction": "92", - "print_host_webui": "", - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "printer_model": "Generic Klipper Printer", - "printer_notes": "", - "printer_settings_id": "InfiMech TX 0.4 nozzle", - "printer_technology": "FFF", - "printer_variant": "0.4", - "printhost_apikey": "", - "printhost_authorization_type": "key", - "printhost_cafile": "", - "printhost_password": "", - "printhost_port": "", - "printhost_ssl_ignore_revoke": "0", - "printhost_user": "", - "purge_in_prime_tower": "1", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "249" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.5" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "0", - "single_extruder_multi_material": "1", - "template_custom_gcode": "", - "thumbnails": [ - "300x300" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Normal Lift" - ] -} diff --git a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json b/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json deleted file mode 100644 index 570a6aaf2f..0000000000 --- a/resources/profiles/InfiMech/machine/HSN/fdm_machine_common.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "printer_technology": "FFF", - "gcode_flavor": "klipper", - "auxiliary_fan": "1", - "bed_exclude_area": [ - "0x0" - ], - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", - "change_filament_gcode": "", - "cooling_tube_length": "5", - "cooling_tube_retraction": "91.5", - "default_filament_profile": [ - "InfiMech Generic PLA" - ], - "default_print_profile": "0.20mm Standard @InfiMech TX", - "deretraction_speed": [ - "30" - ], - "enable_filament_ramming": "1", - "extra_loading_move": "-2", - "extruder_clearance_height_to_lid": "69", - "extruder_clearance_height_to_rod": "69", - "extruder_clearance_radius": "49", - "extruder_colour": [ - "#FCE94F" - ], - "extruder_offset": [ - "0x0" - ], - "fan_kickstart": "0", - "fan_speedup_overhangs": "1", - "fan_speedup_time": "0", - "high_current_on_filament_swap": "0", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_end_gcode": "PRINT_END", - "machine_load_filament_time": "0", - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "20000", - "20000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "9000", - "9000" - ], - "machine_max_acceleration_x": [ - "20000", - "20000" - ], - "machine_max_acceleration_y": [ - "20000", - "20000" - ], - "machine_max_acceleration_z": [ - "500", - "200" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], - "machine_max_jerk_z": [ - "3", - "0.4" - ], - "machine_max_speed_e": [ - "30", - "25" - ], - "machine_max_speed_x": [ - "600", - "200" - ], - "machine_max_speed_y": [ - "600", - "200" - ], - "machine_max_speed_z": [ - "20", - "12" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "machine_pause_gcode": "PAUSE", - "machine_start_gcode": ";v2.9.2-20240814;\n;wiping nozzle start\nM106 P3 S0\nM140 S[bed_temperature_initial_layer_single]\nclean_nozzle_position\n;wiping nozzle end\n;*************preheat nozzle and hotbed for Z_TILT_ADJUST*************\nM140 S[bed_temperature_initial_layer_single]\nM104 S130\nG1 X110 Y110 F10000 \nG4 P200\nprobe\nSET_KINEMATIC_POSITION Z=0 ;Z homing\nG1 Z5\nM190 S[bed_temperature_initial_layer_single]\nZ_TILT_ADJUST \n;*************Z_TILT_ADJUST end*************\nM140 S[bed_temperature_initial_layer_single] ;heat hotbed temp set by user\nG1 X5 Y5 F8000 \nG28 \nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0 F400\nM104 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user\nM106 S100 ;close head_nozzle fan\nG4 P3000\nM106 S255 ;close head_nozzle fan\nG4 P3000\nM106 S100 ;close head_nozzle fan\n;*************PRINT START*************\nM109 S[nozzle_temperature_initial_layer] ;heat nozzle temp set by user and wait \nM190 S[bed_temperature_initial_layer_single];heat bed temp set by user and wait \nM106 S0 ;close head_nozzle fan\nBED_MESH_CLEAR \nBED_MESH_PROFILE LOAD=default # bedmesh load\nG92 E0 ;Reset Extruder\n;G1 Z4.0 F200 ;Move Z Axis up\nG90 ;absolute position\n ; ; ; ; ; ; ; ; ; draw line along model\n;G92 E0 ;reset extruder\nG1 E3 F300 ;extrude filament\nG1 X{first_layer_print_min[0]-1.5} Y{min(first_layer_print_min[1] + 100,print_bed_max[0])} F6000 \nG1 Z0.22 F600\nG1 X{first_layer_print_min[0]-1.5} Y{max(0, first_layer_print_min[1]-1.5)} F2000 E10\nG1 Z0.22 F600\nG1 X{min(first_layer_print_min[0] + 60,print_bed_max[0])} F1200 E12\n ; ; ; ; ; ; ; ; ;draw line along model end \nG4 P200\nG1 Z2\nG92 E0 ;Reset Extruder\nCLEAR_PAUSE\n;***********model start************\n", - "machine_unload_filament_time": "0", - "max_layer_height": [ - "0.28" - ], - "min_layer_height": [ - "0.08" - ], - "nozzle_hrc": "0", - "nozzle_type": "hardened_steel", - "nozzle_volume": "151.32", - "parking_pos_retraction": "92", - "print_host_webui": "", - "printable_area": [ - "0x0", - "220x0", - "220x220", - "0x220" - ], - "printable_height": "250", - "printer_model": "Generic Klipper Printer", - "printer_notes": "", - "printer_settings_id": "InfiMech TX 0.4 nozzle", - "printer_variant": "0.4", - "printhost_apikey": "", - "printhost_authorization_type": "key", - "printhost_cafile": "", - "printhost_password": "", - "printhost_port": "", - "printhost_ssl_ignore_revoke": "0", - "printhost_user": "", - "purge_in_prime_tower": "1", - "retract_before_wipe": [ - "0%" - ], - "retract_length_toolchange": [ - "0" - ], - "retract_lift_above": [ - "0" - ], - "retract_lift_below": [ - "249" - ], - "retract_lift_enforce": [ - "All Surfaces" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.5" - ], - "retraction_minimum_travel": [ - "1" - ], - "retraction_speed": [ - "30" - ], - "scan_first_layer": "0", - "silent_mode": "0", - "single_extruder_multi_material": "1", - "template_custom_gcode": "", - "thumbnails": [ - "300x300" - ], - "upward_compatible_machine": [], - "use_firmware_retraction": "0", - "use_relative_e_distances": "1", - "wipe": [ - "1" - ], - "wipe_distance": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "z_hop_types": [ - "Normal Lift" - ] -} diff --git a/resources/profiles/InfiMech/machine/InfiMech TX.json b/resources/profiles/InfiMech/machine/InfiMech TX.json index abb93dfe09..c040efcfbb 100644 --- a/resources/profiles/InfiMech/machine/InfiMech TX.json +++ b/resources/profiles/InfiMech/machine/InfiMech TX.json @@ -8,5 +8,5 @@ "bed_model": "InfiMech TX-bed.stl", "bed_texture": "InfiMech TX-texture.svg", "hotend_model": "", - "default_materials": "InfiMech Generic ABS;InfiMech Generic PA-CF;InfiMech Generic PC;InfiMech Generic PETG;InfiMech Generic PLA;InfiMech Generic TPU" + "default_materials": "Generic ABS @InfiMech;Generic PA-CF @InfiMech;Generic PC @InfiMech;Generic PETG @InfiMech;Generic PLA @InfiMech;Generic TPU @InfiMech" } diff --git a/resources/profiles/InfiMech/machine/fdm_klipper_common.json b/resources/profiles/InfiMech/machine/fdm_klipper_common.json index adcb60145f..457c3b1d9d 100644 --- a/resources/profiles/InfiMech/machine/fdm_klipper_common.json +++ b/resources/profiles/InfiMech/machine/fdm_klipper_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ @@ -119,7 +119,7 @@ "0.4" ], "nozzle_hrc": "0", - "nozzle_type": "brass", + "nozzle_type": "hardened_steel", "nozzle_volume": "151.32", "parking_pos_retraction": "92", "print_host_webui": "", @@ -177,7 +177,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/InfiMech/machine/fdm_machine_common.json b/resources/profiles/InfiMech/machine/fdm_machine_common.json index 2462c8f803..c6847d7db3 100644 --- a/resources/profiles/InfiMech/machine/fdm_machine_common.json +++ b/resources/profiles/InfiMech/machine/fdm_machine_common.json @@ -14,7 +14,7 @@ "cooling_tube_length": "5", "cooling_tube_retraction": "91.5", "default_filament_profile": [ - "InfiMech Generic PLA" + "Generic PLA @InfiMech" ], "default_print_profile": "0.20mm Standard @InfiMech TX", "deretraction_speed": [ @@ -116,7 +116,7 @@ "0.08" ], "nozzle_hrc": "0", - "nozzle_type": "brass", + "nozzle_type": "hardened_steel", "nozzle_volume": "151.32", "parking_pos_retraction": "92", "print_host_webui": "", @@ -173,7 +173,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "template_custom_gcode": "", "thumbnails": [ diff --git a/resources/profiles/InfiMech/process/0.16mm Optimal @InfiMech TX.json b/resources/profiles/InfiMech/process/0.16mm Optimal @InfiMech TX.json index c3fb83348f..1886e33d56 100644 --- a/resources/profiles/InfiMech/process/0.16mm Optimal @InfiMech TX.json +++ b/resources/profiles/InfiMech/process/0.16mm Optimal @InfiMech TX.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/InfiMech/process/EX+APS/0.16mm Optimal @InfiMech EX+APS.json b/resources/profiles/InfiMech/process/EX+APS/0.16mm Optimal @InfiMech EX+APS.json index 783db122a4..9ca14195f7 100644 --- a/resources/profiles/InfiMech/process/EX+APS/0.16mm Optimal @InfiMech EX+APS.json +++ b/resources/profiles/InfiMech/process/EX+APS/0.16mm Optimal @InfiMech EX+APS.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/InfiMech/process/EX+APS/fdm_process_common_EX+APS.json b/resources/profiles/InfiMech/process/EX+APS/fdm_process_common_EX+APS.json index 6a755b74f1..1529d65ac8 100644 --- a/resources/profiles/InfiMech/process/EX+APS/fdm_process_common_EX+APS.json +++ b/resources/profiles/InfiMech/process/EX+APS/fdm_process_common_EX+APS.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "150", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/InfiMech/process/EX/0.16mm Optimal @InfiMech EX.json b/resources/profiles/InfiMech/process/EX/0.16mm Optimal @InfiMech EX.json index d95e84cedc..99dfa56787 100644 --- a/resources/profiles/InfiMech/process/EX/0.16mm Optimal @InfiMech EX.json +++ b/resources/profiles/InfiMech/process/EX/0.16mm Optimal @InfiMech EX.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/InfiMech/process/EX/fdm_process_common_EX.json b/resources/profiles/InfiMech/process/EX/fdm_process_common_EX.json index e5846e2cc4..888a67861a 100644 --- a/resources/profiles/InfiMech/process/EX/fdm_process_common_EX.json +++ b/resources/profiles/InfiMech/process/EX/fdm_process_common_EX.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "150", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/InfiMech/process/HSN/0.16mm Optimal @InfiMech TX HSN.json b/resources/profiles/InfiMech/process/HSN/0.16mm Optimal @InfiMech TX HSN.json index 546464ce49..57f844d7f5 100644 --- a/resources/profiles/InfiMech/process/HSN/0.16mm Optimal @InfiMech TX HSN.json +++ b/resources/profiles/InfiMech/process/HSN/0.16mm Optimal @InfiMech TX HSN.json @@ -24,7 +24,6 @@ "layer_height": "0.16", "line_width": "0.42", "outer_wall_line_width": "0.42", - "overhang_speed_classic": "0", "precise_outer_wall": "0", "print_flow_ratio": "0.95", "seam_gap": "10%", diff --git a/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json b/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json index dc9e9ace24..8b53078f6d 100644 --- a/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json +++ b/resources/profiles/InfiMech/process/HSN/fdm_process_common_HSN.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/InfiMech/process/fdm_process_common.json b/resources/profiles/InfiMech/process/fdm_process_common.json index 7e7bc9ddb1..bfd2a604e6 100644 --- a/resources/profiles/InfiMech/process/fdm_process_common.json +++ b/resources/profiles/InfiMech/process/fdm_process_common.json @@ -64,7 +64,6 @@ "inner_wall_line_width": "0.45", "interface_shells": "0", "internal_bridge_speed": "50%", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_pattern": "monotonic", @@ -92,7 +91,6 @@ "outer_wall_line_width": "0.42", "outer_wall_speed": "200", "overhang_4_4_speed": "10", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/Kingroon.json b/resources/profiles/Kingroon.json index 0d0f98e733..4c9a128ead 100644 --- a/resources/profiles/Kingroon.json +++ b/resources/profiles/Kingroon.json @@ -1,7 +1,7 @@ { "name": "Kingroon", "url": "https://kingroon.com/", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "1", "description": "Kingroon configuration files", "machine_model_list": [ diff --git a/resources/profiles/Kingroon/machine/fdm_machine_common.json b/resources/profiles/Kingroon/machine/fdm_machine_common.json index ab1a5d4253..6e7afe6f63 100644 --- a/resources/profiles/Kingroon/machine/fdm_machine_common.json +++ b/resources/profiles/Kingroon/machine/fdm_machine_common.json @@ -156,7 +156,6 @@ "deretraction_speed": [ "30" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "wipe": [ diff --git a/resources/profiles/Kingroon/process/0.20mm Standard @Kingroon KP3S V1.json b/resources/profiles/Kingroon/process/0.20mm Standard @Kingroon KP3S V1.json index f91fc639a0..a29141daf1 100644 --- a/resources/profiles/Kingroon/process/0.20mm Standard @Kingroon KP3S V1.json +++ b/resources/profiles/Kingroon/process/0.20mm Standard @Kingroon KP3S V1.json @@ -24,7 +24,6 @@ "overhang_reverse": "1", "overhang_reverse_internal_only": "1", "overhang_reverse_threshold": "0%", - "overhang_speed_classic": "1", "seam_gap": "0.1", "seam_position": "back", "slow_down_layers": "2", diff --git a/resources/profiles/Kingroon/process/fdm_process_common.json b/resources/profiles/Kingroon/process/fdm_process_common.json index ed478c1aaa..48f60ee2ab 100644 --- a/resources/profiles/Kingroon/process/fdm_process_common.json +++ b/resources/profiles/Kingroon/process/fdm_process_common.json @@ -10,7 +10,6 @@ "bottom_solid_infill_flow_ratio": "1", "bottom_surface_pattern": "monotonic", "bridge_acceleration": "50%", - "adaptive_layer_height": "0", "bridge_flow": "0.9", "brim_object_gap": "0.1", "brim_type": "auto_brim", @@ -44,7 +43,6 @@ "fuzzy_skin_point_distance": "0.8", "fuzzy_skin_thickness": "0.3", "gap_infill_speed": "100", - "tree_support_with_infill": "0", "overhang_1_4_speed": "50", "overhang_2_4_speed": "40", "overhang_3_4_speed": "20", @@ -70,7 +68,6 @@ "inner_wall_line_width": "0.45", "inner_wall_speed": "100", "interface_shells": "0", - "internal_bridge_support_thickness": "0", "internal_solid_infill_acceleration": "100%", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "100", @@ -90,7 +87,6 @@ "outer_wall_jerk": "9", "outer_wall_line_width": "0.42", "outer_wall_speed": "80", - "overhang_speed_classic": "0", "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", diff --git a/resources/profiles/LH.json b/resources/profiles/LH.json index 12f8c4cbda..7784b42bed 100644 --- a/resources/profiles/LH.json +++ b/resources/profiles/LH.json @@ -1,7 +1,7 @@ { "name": "LH", "url": "https://github.com/lhndo/LH-Stinger", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "LH 3D Printer Configuration", "machine_model_list": [ diff --git a/resources/profiles/LH/filament/LHS ABS.json b/resources/profiles/LH/filament/LHS ABS.json index 28fe82243d..2e7ee48e32 100644 --- a/resources/profiles/LH/filament/LHS ABS.json +++ b/resources/profiles/LH/filament/LHS ABS.json @@ -1,7 +1,7 @@ { "name": "LHS ABS", "type": "filament", - "filament_id": "LHF_abs", + "filament_id": "OFztQ7rO", "setting_id": "EQxNYC7BdGEA2iiD", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS ASA.json b/resources/profiles/LH/filament/LHS ASA.json index 8d8de19dfa..4cc096cb90 100644 --- a/resources/profiles/LH/filament/LHS ASA.json +++ b/resources/profiles/LH/filament/LHS ASA.json @@ -1,6 +1,6 @@ { "name": "LHS ASA", - "filament_id": "LHF_asa", + "filament_id": "OFaP2SsH", "setting_id": "hoq5bKHUb9DE1ezj", "type": "filament", "from": "system", diff --git a/resources/profiles/LH/filament/LHS PC CF.json b/resources/profiles/LH/filament/LHS PC CF.json index e565b5a9ab..54db9bf7fa 100644 --- a/resources/profiles/LH/filament/LHS PC CF.json +++ b/resources/profiles/LH/filament/LHS PC CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "FOQLD0UX6hUhJBQ0", - "filament_id": "LHF_pccf", + "filament_id": "OFu0fjPJ", "instantiation": "true", "compatible_printers": [ "LH Stinger 0.4 nozzle", diff --git a/resources/profiles/LH/filament/LHS PCTG.json b/resources/profiles/LH/filament/LHS PCTG.json index a2593c22b7..2f2a7d2fd6 100644 --- a/resources/profiles/LH/filament/LHS PCTG.json +++ b/resources/profiles/LH/filament/LHS PCTG.json @@ -1,7 +1,7 @@ { "name": "LHS PCTG", "type": "filament", - "filament_id": "LHF_pctg", + "filament_id": "OFBJAdLw", "setting_id": "dKWttiAQNwymKsIC", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS PETG.json b/resources/profiles/LH/filament/LHS PETG.json index 2c960c477c..2956267dab 100644 --- a/resources/profiles/LH/filament/LHS PETG.json +++ b/resources/profiles/LH/filament/LHS PETG.json @@ -1,7 +1,7 @@ { "name": "LHS PETG", "type": "filament", - "filament_id": "LHF_petg", + "filament_id": "OFRJ325z", "setting_id": "aZdY1M44ui7Rtj8r", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS PLA.json b/resources/profiles/LH/filament/LHS PLA.json index 285fd76c13..87ef788b7d 100644 --- a/resources/profiles/LH/filament/LHS PLA.json +++ b/resources/profiles/LH/filament/LHS PLA.json @@ -1,7 +1,7 @@ { "name": "LHS PLA", "type": "filament", - "filament_id": "LHF_pla", + "filament_id": "OFyoBZdm", "setting_id": "M8WSwqD1iQkQntpy", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS TPU Foamy 78A.json b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json index 47e4c606c6..3be659400a 100644 --- a/resources/profiles/LH/filament/LHS TPU Foamy 78A.json +++ b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json @@ -1,7 +1,7 @@ { "name": "LHS TPU Foamy 78A", "type": "filament", - "filament_id": "LHF_ftpuf", + "filament_id": "OFngcE81", "setting_id": "FWyg21qHmAKeihMn", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/filament/LHS TPU.json b/resources/profiles/LH/filament/LHS TPU.json index fc877eb084..f503425bd4 100644 --- a/resources/profiles/LH/filament/LHS TPU.json +++ b/resources/profiles/LH/filament/LHS TPU.json @@ -1,7 +1,7 @@ { "name": "LHS TPU", "type": "filament", - "filament_id": "LHF_ptpu_pl", + "filament_id": "OFIZMQwM", "setting_id": "ILgpZYIqYGH6mqdI", "from": "system", "instantiation": "true", diff --git a/resources/profiles/LH/machine/fdm_lh_common.json b/resources/profiles/LH/machine/fdm_lh_common.json index 277e0762eb..02a4412838 100644 --- a/resources/profiles/LH/machine/fdm_lh_common.json +++ b/resources/profiles/LH/machine/fdm_lh_common.json @@ -128,7 +128,6 @@ "z_hop_types": [ "Auto Lift" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "manual_filament_change": "1", @@ -136,7 +135,7 @@ "1" ], "default_filament_profile": [ - "LH Generic PLA" + "LHS PLA" ], "enable_filament_ramming": "0", "default_print_profile": "0.20mm Daily @LH Stinger", @@ -154,4 +153,4 @@ ], "bed_temperature_formula": "by_first_filament", "auxiliary_fan": "1" -} \ No newline at end of file +} diff --git a/resources/profiles/LH/machine/fdm_machine_common.json b/resources/profiles/LH/machine/fdm_machine_common.json index a46315dc8c..bf8f2249cf 100644 --- a/resources/profiles/LH/machine/fdm_machine_common.json +++ b/resources/profiles/LH/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -116,4 +115,4 @@ "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_pause_gcode": "M601" -} \ No newline at end of file +} diff --git a/resources/profiles/LH/process/fdm_process_common.json b/resources/profiles/LH/process/fdm_process_common.json index df8283904a..f09e319bd6 100644 --- a/resources/profiles/LH/process/fdm_process_common.json +++ b/resources/profiles/LH/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -83,7 +82,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", @@ -105,4 +103,4 @@ "top_surface_speed": "50", "gap_infill_speed": "30", "travel_speed": "200" -} \ No newline at end of file +} diff --git a/resources/profiles/LONGER.json b/resources/profiles/LONGER.json index 723bb43e91..b4d6c3a1fb 100644 --- a/resources/profiles/LONGER.json +++ b/resources/profiles/LONGER.json @@ -1,6 +1,6 @@ { "name": "LONGER", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "0", "description": "LONGER configurations", "machine_model_list": [ diff --git a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json index c27280bf49..af61062d28 100644 --- a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json +++ b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10 Plus.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "F6pgS8fPQFnN4R0n", - "filament_id": "GFLLK10PPETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json index 48343c508d..114c1aa3f8 100644 --- a/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json +++ b/resources/profiles/LONGER/filament/Generic PETG @LONGER LK10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "hWuf5kvAA5dXSd8f", - "filament_id": "GFLLK10PETG", + "filament_id": "OFYPdQJh", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json index 7eccd144bd..01f5024a14 100644 --- a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json +++ b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10 Plus.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "N4pabxIYPI8KHgVp", - "filament_id": "GFLLK10PPLA", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json index fe91a5388b..9827cce1db 100644 --- a/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json +++ b/resources/profiles/LONGER/filament/Generic PLA @LONGER LK10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "BLf7EiZ9yayoKwJy", - "filament_id": "GFLLK10PLA", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/LONGER/machine/LONGER LK10 Plus.json b/resources/profiles/LONGER/machine/LONGER LK10 Plus.json index 609ed74444..69dd7c11c0 100644 --- a/resources/profiles/LONGER/machine/LONGER LK10 Plus.json +++ b/resources/profiles/LONGER/machine/LONGER LK10 Plus.json @@ -12,5 +12,5 @@ "0x0" ], "hotend_model": "", - "default_materials": "Generic PLA @System;Generic PETG @System" + "default_materials": "Generic PLA @LONGER LK10 Plus;Generic PETG @LONGER LK10 Plus" } diff --git a/resources/profiles/LONGER/machine/LONGER LK10.json b/resources/profiles/LONGER/machine/LONGER LK10.json index 7bc3ab48d4..99d27e4506 100644 --- a/resources/profiles/LONGER/machine/LONGER LK10.json +++ b/resources/profiles/LONGER/machine/LONGER LK10.json @@ -12,5 +12,5 @@ "0x0" ], "hotend_model": "", - "default_materials": "Generic PLA @System;Generic PETG @System" + "default_materials": "Generic PLA @LONGER LK10;Generic PETG @LONGER LK10" } diff --git a/resources/profiles/LONGER/machine/fdm_machine_common.json b/resources/profiles/LONGER/machine/fdm_machine_common.json index 61af4026c0..159c2c0f37 100644 --- a/resources/profiles/LONGER/machine/fdm_machine_common.json +++ b/resources/profiles/LONGER/machine/fdm_machine_common.json @@ -5,7 +5,6 @@ "instantiation": "false", "printer_technology": "FFF", "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/LONGER/process/fdm_process_common.json b/resources/profiles/LONGER/process/fdm_process_common.json index a1c777bc4b..fa3d9c97eb 100644 --- a/resources/profiles/LONGER/process/fdm_process_common.json +++ b/resources/profiles/LONGER/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Lulzbot.json b/resources/profiles/Lulzbot.json index 31836580f0..1ca47d7cba 100644 --- a/resources/profiles/Lulzbot.json +++ b/resources/profiles/Lulzbot.json @@ -1,7 +1,7 @@ { "name": "Lulzbot", "url": "https://ohai.lulzbot.com/group/taz-6/", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "0", "description": "Lulzbot configurations", "machine_model_list": [ @@ -62,16 +62,16 @@ ], "filament_list": [ { - "name": "Lulzbot 2.85mm ABS", - "sub_path": "filament/Lulzbot 2.85mm ABS.json" + "name": "Generic ABS @Lulzbot", + "sub_path": "filament/Generic ABS @Lulzbot.json" }, { - "name": "Lulzbot 2.85mm PETG", - "sub_path": "filament/Lulzbot 2.85mm PETG.json" + "name": "Generic PETG @Lulzbot", + "sub_path": "filament/Generic PETG @Lulzbot.json" }, { - "name": "Lulzbot 2.85mm PLA", - "sub_path": "filament/Lulzbot 2.85mm PLA.json" + "name": "Generic PLA @Lulzbot", + "sub_path": "filament/Generic PLA @Lulzbot.json" } ], "machine_list": [ diff --git a/resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json b/resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json new file mode 100644 index 0000000000..95d8a2274c --- /dev/null +++ b/resources/profiles/Lulzbot/filament/Generic ABS @Lulzbot.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic ABS @Lulzbot", + "inherits": "Generic ABS @System", + "renamed_from": "Lulzbot 2.85mm ABS", + "from": "system", + "setting_id": "Mtn4Fh3Lp6KlAxjo", + "instantiation": "true", + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Lulzbot Taz 6 0.5 nozzle", + "Lulzbot Taz 4 or 5 0.5 nozzle", + "Lulzbot Taz Pro Dual 0.5 nozzle" + ] +} diff --git a/resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json b/resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json new file mode 100644 index 0000000000..825df8bdc8 --- /dev/null +++ b/resources/profiles/Lulzbot/filament/Generic PETG @Lulzbot.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PETG @Lulzbot", + "inherits": "Generic PETG @System", + "renamed_from": "Lulzbot 2.85mm PETG", + "from": "system", + "setting_id": "dqj6O9NIPAaq8wWz", + "instantiation": "true", + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "compatible_printers": [ + "Lulzbot Taz 6 0.5 nozzle", + "Lulzbot Taz 4 or 5 0.5 nozzle", + "Lulzbot Taz Pro Dual 0.5 nozzle" + ] +} diff --git a/resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json b/resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json new file mode 100644 index 0000000000..d08d72ee53 --- /dev/null +++ b/resources/profiles/Lulzbot/filament/Generic PLA @Lulzbot.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA @Lulzbot", + "inherits": "Generic PLA @System", + "renamed_from": "Lulzbot 2.85mm PLA", + "from": "system", + "setting_id": "3evRjso1wNxd9nV3", + "instantiation": "true", + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "Lulzbot Taz 6 0.5 nozzle", + "Lulzbot Taz 4 or 5 0.5 nozzle", + "Lulzbot Taz Pro Dual 0.5 nozzle" + ] +} diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json deleted file mode 100644 index c91c38c8e9..0000000000 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm ABS.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Lulzbot 2.85mm ABS", - "inherits": "Generic ABS @System", - "from": "system", - "setting_id": "XwsWBVH2xIwyRMm4", - "filament_id": "GFB99", - "instantiation": "true", - "filament_diameter": [ - "2.85" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "compatible_printers": [ - "Lulzbot Taz 6 0.5 nozzle", - "Lulzbot Taz 4 or 5 0.5 nozzle", - "Lulzbot Taz Pro Dual 0.5 nozzle" - ] -} diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json deleted file mode 100644 index 748d8de25b..0000000000 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PETG.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Lulzbot 2.85mm PETG", - "inherits": "Generic PETG @System", - "from": "system", - "setting_id": "7aS9fdn94lEOU1gJ", - "filament_id": "GFG99", - "instantiation": "true", - "filament_diameter": [ - "2.85" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "compatible_printers": [ - "Lulzbot Taz 6 0.5 nozzle", - "Lulzbot Taz 4 or 5 0.5 nozzle", - "Lulzbot Taz Pro Dual 0.5 nozzle" - ] -} diff --git a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json b/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json deleted file mode 100644 index 23547bfafc..0000000000 --- a/resources/profiles/Lulzbot/filament/Lulzbot 2.85mm PLA.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Lulzbot 2.85mm PLA", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "1pyzsOWeVPCxWlqQ", - "filament_id": "GFL99", - "instantiation": "true", - "filament_diameter": [ - "2.85" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "Lulzbot Taz 6 0.5 nozzle", - "Lulzbot Taz 4 or 5 0.5 nozzle", - "Lulzbot Taz Pro Dual 0.5 nozzle" - ] -} diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json index cc1224b635..5fe1dc64e7 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5 0.5 nozzle.json @@ -104,7 +104,7 @@ ], "single_extruder_multi_material": "1", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been generated specifically for the Lulzbot Taz 4 and 5 - translated from CuraLE 4.13.10 by Wrathernaut\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM140 S{bed_temperature_initial_layer[0]}; start bed heating up\nG90; absolute positioning\nM107; disable fans\nM82; set extruder to absolute mode\nG28 X0 Y0; home X and Y\nG28 Z0; home Z\nG1 Z15.0 F175; move extruder up\nM117 Heating...; progress indicator message on LCD\nM109 R{nozzle_temperature_initial_layer[0]}; wait for extruder to reach printing temp\nM190 R{bed_temperature_initial_layer[0]}; wait for bed to reach printing temp\nG92 E0; set extruder position to 0\nG1 F200 E0; prime the nozzle with filament\nG92 E0; re-set extruder position to 0\nG1 F175; set travel speed\nM203 X192 Y208 Z3; set limits on travel speed\nM117 TAZ Printing...; progress indicator message on LCD\n;Start G-Code End", "machine_end_gcode": ";End G-Code Begin\nM400; wait for moves to finish\nM140 S0; disable hotend\nM104 S0; disable bed heater\nM107; disable fans\nG91; relative positioning\nG1 E-1 F300; filament retraction to release pressure\nG1 Z0.5 E-5 X-20 Y-20 F3000; lift up and retract even more filament\nM77;stopGLCD timer\nG90;absolute positioning\nG1 X0 Y250;move to cooling position\nM84;disable steppers\nM117 Print Complete.;print complete message", diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json index c00c1cc2e3..f7b77690b4 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 4 or 5.json @@ -8,5 +8,5 @@ "bed_model": "taz_4_or_5_build_plate.stl", "bed_texture": "lulzbot_logo.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json index 4a7aa978fb..23a74064b6 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6 0.5 nozzle.json @@ -100,7 +100,7 @@ ], "single_extruder_multi_material": "1", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been translated from LulzBot's CuraLE (v4.13.10) startup GCODE for Taz 6 Single Extruder by Wrathernaut\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM107; disable fans\nM420 S; disable leveling matrix\nG90; absolute positioning\nM82; set extruder to absolute mode\nG92 E0; set extruder position to 0\nM140 S{bed_temperature_initial_layer[0]}; start bed heating up (w)\nG28 XY; home X and Y\nG1 X-19 Y258 F1000; move to safe homing position\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R170\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R190; unknown filament type soften temp before homing Z{endif}\nG28 Z; home Z\nG1 E-15 F100; retract filament\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R190\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R180\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R170; unknown filament type wipe temp{endif}\n;M206 X0 Y0 Z0; uncomment to adjust wipe position (+X ~ nozzle moves left)(+Y ~ nozzle moves forward)(+Z ~ nozzle moves down)\nG12; wiping sequence\nM206 X0 Y0 Z0; reseting stock nozzle position ### CAUTION: changing this line can affect print quality ###\nG1 Z10 F5000; raise nozzle after wipe\nM109 {if filament_type[0] == \"PLA\"}R160\n{elsif filament_type[0] == \"ABS\"}R170\n{elsif filament_type[0] == \"ABS-GF\"}R170\n{elsif filament_type[0] == \"ASA\"}R170\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R200\n{elsif filament_type[0] == \"PA-CF\"}R200\n{elsif filament_type[0] == \"PA-GF\"}R170\n{elsif filament_type[0] == \"PA6-CF\"}R170\n{elsif filament_type[0] == \"PA11-CF\"}R200\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R200\n{elsif filament_type[0] == \"PC-CF\"}R200\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R180\n{elsif filament_type[0] == \"PE-CF\"}R180\n{elsif filament_type[0] == \"PET-CF\"}R170\n{elsif filament_type[0] == \"PETG\"}R170\n{elsif filament_type[0] == \"PETG-CF10\"}R170\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R160\n{elsif filament_type[0] == \"PVB\"}R160\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R160\n{elsif filament_type[0] == \"FLEX\"}R160\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R160\n{elsif filament_type[0] == \"NYLON\"}R200\n{else}R170; unknown filament type probe temp{endif}\nG1 X-10 Y293 F4000; move above first probe point\nM204 S100; set probing acceleration\nG29; start auto-leveling sequence\nM420 S1; enable leveling matrix\nM204 S500; restore standard acceleration\nG1 X0 Y0 Z15 F5000; move up off last probe point\nG4 S1; pause\nM400; wait for moves to finish\nM117 Heating...; progress indicator message on LCD\nM109 R{nozzle_temperature_initial_layer[0]}; wait for extruder to reach printing temp (w)\nM190 R{bed_temperature_initial_layer[0]}; wait for bed to reach printing temp\nG1 Z2 E0 F75; prime tiny bit of filament into the nozzle\nM117 TAZ 6 Printing...; progress indicator message on LCD\n;Start G-Code End", "machine_end_gcode": ";End G-Code Begin\nM400; wait for moves to finish\nM140 S0; start bed cooling\nM104 S0; disable hotend\nM107; disable fans\nG91; relative positioning\nG1 E-1 F300; filament retraction to release pressure\nG1 Z20 E-5 X-20 Y-20 F3000; lift up and retract even more filament\nG1 E6; re-prime extruder\nG90; absolute positioning\nG1 Y280 F3000; present finished print\nM77; stop GLCD timer\nM84; disable steppers\nG90; absolute positioning\nM117 Print Complete.; print complete message\n;End G-Code End", diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json index fdf3c0b056..46772a73b0 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz 6.json @@ -8,5 +8,5 @@ "bed_model": "taz_6_build_plate.stl", "bed_texture": "lulzbot_logo.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json index dccf5c21a9..ad04dec32a 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual 0.5 nozzle.json @@ -15,7 +15,7 @@ ], "printer_settings_id": "LulzbotPro-Dual", "default_filament_profile": [ - "Lulzbot 2.85mm PLA" + "Generic PLA @Lulzbot" ], "machine_start_gcode": ";This G-Code has been translated from Cura startup from CuraLE 4.13.10 to OrcaSlicer by Wrathernaut\nT0\nM82; absolute extrusion mode\nM73 P0; clear GLCD progress bar\nM75; start GLCD timer\nM107; disable fans\nG90; absolute positioning\nM420 S0; disable previous leveling matrix\nM140 S{bed_temperature_initial_layer[initial_tool]}; begin bed temping up (w)\nM104 {if filament_type[initial_tool] == \"PLA\"}S180\n{elsif filament_type[initial_tool] == \"ABS\"}S190\n{elsif filament_type[initial_tool] == \"ABS-GF\"}S190\n{elsif filament_type[initial_tool] == \"ASA\"}S190\n{elsif filament_type[initial_tool] == \"ASA-Aero\"}S190\n{elsif filament_type[initial_tool] == \"BVOH\"}S170\n{elsif filament_type[initial_tool] == \"EVA\"}S170\n{elsif filament_type[initial_tool] == \"PA\"}R220\n{elsif filament_type[initial_tool] == \"PA-CF\"}R220\n{elsif filament_type[initial_tool] == \"PA-GF\"}R220\n{elsif filament_type[initial_tool] == \"PA6-CF\"}R220\n{elsif filament_type[initial_tool] == \"PA11-CF\"}R220\n{elsif filament_type[initial_tool] == \"ASA-Aero\"}S170\n{elsif filament_type[initial_tool] == \"PC\"}R220\n{elsif filament_type[initial_tool] == \"PC-CF\"}R220\n{elsif filament_type[initial_tool] == \"PCTG\"}S180\n{elsif filament_type[initial_tool] == \"PE\"}S190\n{elsif filament_type[initial_tool] == \"PE-CF\"}S190\n{elsif filament_type[initial_tool] == \"PET-CF\"}S190\n{elsif filament_type[initial_tool] == \"PETG\"}S190\n{elsif filament_type[initial_tool] == \"PETG-CF10\"}S190\n{elsif filament_type[initial_tool] == \"PHA\"}S180\n{elsif filament_type[initial_tool] == \"PLA-AERO\"}S180\n{elsif filament_type[initial_tool] == \"PLA-CF\"}S180\n{elsif filament_type[initial_tool] == \"PP\"}S180\n{elsif filament_type[initial_tool] == \"PP-CF\"}S180\n{elsif filament_type[initial_tool] == \"PP-GF\"}S180\n{elsif filament_type[initial_tool] == \"PPS\"}S180\n{elsif filament_type[initial_tool] == \"PPS-CF\"}S180\n{elsif filament_type[initial_tool] == \"PVA\"}S180\n{elsif filament_type[initial_tool] == \"PVB\"}S180\n{elsif filament_type[initial_tool] == \"SBS\"}S180\n{elsif filament_type[initial_tool] == \"TPU\"}S180\n{elsif filament_type[initial_tool] == \"FLEX\"}S180\n{elsif filament_type[initial_tool] == \"PET\"}S170\n{elsif filament_type[initial_tool] == \"HIPS\"}S170\n{elsif filament_type[initial_tool] == \"NYLON\"}R220\n{else}S190; unknown filament type soften temp before homing Z\n{endif}G28; home\nG0 X50 Y25 Z10 F2000\nM117 Heating...\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R170\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R190; unknown filament type soften temp before homing Z{endif}\nM82; set extruder to absolute mode\nG92 E0; set extruder to zero\nG1 E-7 F100; retract 7mm of filament on first extruder\nM106; turn on fans to speed cooling\nM117 Wiping...\nM109 {if filament_type[0] == \"PLA\"}R180\n{elsif filament_type[0] == \"ABS\"}R190\n{elsif filament_type[0] == \"ABS-GF\"}R190\n{elsif filament_type[0] == \"ASA\"}R190\n{elsif filament_type[0] == \"ASA-Aero\"}R190\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R220\n{elsif filament_type[0] == \"PA-CF\"}R220\n{elsif filament_type[0] == \"PA-GF\"}R220\n{elsif filament_type[0] == \"PA6-CF\"}R220\n{elsif filament_type[0] == \"PA11-CF\"}R220\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R220\n{elsif filament_type[0] == \"PC-CF\"}R220\n{elsif filament_type[0] == \"PCTG\"}R190\n{elsif filament_type[0] == \"PE\"}R190\n{elsif filament_type[0] == \"PE-CF\"}R190\n{elsif filament_type[0] == \"PET-CF\"}R190\n{elsif filament_type[0] == \"PETG\"}R190\n{elsif filament_type[0] == \"PETG-CF10\"}R190\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R180\n{elsif filament_type[0] == \"PVB\"}R180\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R180\n{elsif filament_type[0] == \"FLEX\"}R180\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R180\n{elsif filament_type[0] == \"NYLON\"}R220\n{else}R170; unknown filament type wipe temp{endif}\nM109 {if filament_type[0] == \"PLA\"}R160\n{elsif filament_type[0] == \"ABS\"}R170\n{elsif filament_type[0] == \"ABS-GF\"}R170\n{elsif filament_type[0] == \"ASA\"}R170\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"BVOH\"}R170\n{elsif filament_type[0] == \"EVA\"}R170\n{elsif filament_type[0] == \"PA\"}R200\n{elsif filament_type[0] == \"PA-CF\"}R200\n{elsif filament_type[0] == \"PA-GF\"}R170\n{elsif filament_type[0] == \"PA6-CF\"}R170\n{elsif filament_type[0] == \"PA11-CF\"}R200\n{elsif filament_type[0] == \"ASA-Aero\"}R170\n{elsif filament_type[0] == \"PC\"}R200\n{elsif filament_type[0] == \"PC-CF\"}R200\n{elsif filament_type[0] == \"PCTG\"}R180\n{elsif filament_type[0] == \"PE\"}R180\n{elsif filament_type[0] == \"PE-CF\"}R180\n{elsif filament_type[0] == \"PET-CF\"}R170\n{elsif filament_type[0] == \"PETG\"}R170\n{elsif filament_type[0] == \"PETG-CF10\"}R170\n{elsif filament_type[0] == \"PHA\"}R180\n{elsif filament_type[0] == \"PLA-AERO\"}R180\n{elsif filament_type[0] == \"PLA-CF\"}R180\n{elsif filament_type[0] == \"PP\"}R180\n{elsif filament_type[0] == \"PP-CF\"}R180\n{elsif filament_type[0] == \"PP-GF\"}R180\n{elsif filament_type[0] == \"PPS\"}R180\n{elsif filament_type[0] == \"PPS-CF\"}R180\n{elsif filament_type[0] == \"PVA\"}R160\n{elsif filament_type[0] == \"PVB\"}R160\n{elsif filament_type[0] == \"SBS\"}R180\n{elsif filament_type[0] == \"TPU\"}R160\n{elsif filament_type[0] == \"FLEX\"}R160\n{elsif filament_type[0] == \"PET\"}R170\n{elsif filament_type[0] == \"HIPS\"}R160\n{elsif filament_type[0] == \"NYLON\"}R200\n{else}R170; unknown filament type probe temp{endif}; cool to probe temp\nG12; wipe sequence\nM107; turn off fan\nG29; probe sequence (for auto-leveling)\nM420 S1; enable leveling matrix\nT{initial_tool}; ensure we're using the first extruder\nM104 S{first_layer_temperature[initial_tool]}; set extruder temp\nG0 X5 Y15 Z10 F5000; move to start location\nM400; clear buffer\nM117 Heating...\nM109 R{first_layer_temperature[initial_tool]}; set extruder temp and waitnM190 R{bed_temperature_initial_layer[initial_tool]}; get bed temping up during first layer\nG1 Z2 E0 F75; raise head and 0 extruder\nM82; set to absolute mode\nM400; clear buffer\nM300 T; play sound at start of first layer\nM117 Printing ...\n;Start G-Code End", "machine_end_gcode": "M400; wait for moves to finish\nM140 S0; start cooling bed\nM107; fans off\nG91 ; relative positioning\nG1 E-1 F300 ; retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z25 E-1 X20 Y20 F2000; move Z up a bit and retract filament even more\nM104 S{nozzle_temperature[0]} T0 ; T0 to print temp\nM104 S{nozzle_temperature[1]} T1 ; T1 to print temp\nG90 ; absolute positioning\nG0 X285 Y-30 F3000; move to cooling position\nG91 ; relative positioning\nM117 Purging for next print;progress indicator message\nT0\nM109 S{nozzle_temperature[0]}; wait for temp\nG92 E0; set extruder position to purge amount\nG1 E15 F75; purge\nM400; wait for purge\nM104 S0 ; T0 hotend off\nT1\nM109 S{nozzle_temperature[1]}; wait for temp\nG92 E0; set extruder position to purge amount\nG1 E15 F75; purge\nM400; wait for purge\nM104 S0 ; T1 hotend off\nT0\nM117 Cooling, please wait;progress indicator message\nM190 S0; cool off bed\nG0 Y280 F3000 ; present finished print\nM77; stop GLCD timer\nM18 X Y E; turn off x y and e axis\nG90 ; absolute positioning\nM117 Print complete; progress indicator message" diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json index b5157e0925..ca7afe7d9f 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro Dual.json @@ -8,5 +8,5 @@ "bed_model": "taz_pro_dual_build_plate.stl", "bed_texture": "Taz_Pro_Dual_printbed.svg", "hotend_model": "", - "default_materials": "Lulzbot 2.85mm ABS;Lulzbot 2.85mm PETG;Lulzbot 2.85mm PLA" + "default_materials": "Generic ABS @Lulzbot;Generic PETG @Lulzbot;Generic PLA @Lulzbot" } diff --git a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro S.json b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro S.json index ebb151d2b0..115d886301 100644 --- a/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro S.json +++ b/resources/profiles/Lulzbot/machine/Lulzbot Taz Pro S.json @@ -15,5 +15,5 @@ "machine_load_filament_time": "20", "machine_unload_filament_time": "20", "machine_tool_change_time": "5", - "default_materials": "Generic PLA @System, Generic PETG @System, Generic ABS @System" + "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System" } diff --git a/resources/profiles/Lulzbot/machine/fdm_machine_common.json b/resources/profiles/Lulzbot/machine/fdm_machine_common.json index b376e28164..2874e7b0fb 100644 --- a/resources/profiles/Lulzbot/machine/fdm_machine_common.json +++ b/resources/profiles/Lulzbot/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin2", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 4 or 5.json b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 4 or 5.json index 8114e206de..e1bf7498eb 100644 --- a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 4 or 5.json +++ b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 4 or 5.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7AJRQW7g8u7CnKhZ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 6.json b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 6.json index 5cf84c2791..5b5d4fa70b 100644 --- a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 6.json +++ b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz 6.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "K4uIiLjmRJfy0GZv", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro Dual.json b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro Dual.json index f6f88cee34..c1b93d4fed 100644 --- a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro Dual.json +++ b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro Dual.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jEDhBnfwOyj5oEO8", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro S.json b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro S.json index 05bf1ecca0..e70182aa1a 100644 --- a/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro S.json +++ b/resources/profiles/Lulzbot/process/0.25mm Standard @Lulzbot Taz Pro S.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "uAws1KNEUyrcJTSy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Lulzbot/process/fdm_process_common.json b/resources/profiles/Lulzbot/process/fdm_process_common.json index 7c4803ab96..1437b79995 100644 --- a/resources/profiles/Lulzbot/process/fdm_process_common.json +++ b/resources/profiles/Lulzbot/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/M3D.json b/resources/profiles/M3D.json index cb24edb886..17d760face 100644 --- a/resources/profiles/M3D.json +++ b/resources/profiles/M3D.json @@ -1,6 +1,6 @@ { "name": "M3D", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Configuration for M3D printers", "machine_model_list": [ diff --git a/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json b/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json index 941348c128..d661bed3d1 100644 --- a/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json +++ b/resources/profiles/M3D/machine/M3D Enabler D8500 MM Model.json @@ -7,6 +7,6 @@ "nozzle_diameter": "0.4", "bed_model": "M3D Enabler D8500 MM Model_bed_model.stl", "bed_texture": "M3D Enabler D8500 MM Model_bed_texture.svg", - "default_materials": "Generic PLA @system", + "default_materials": "Generic PLA @System", "scan_folder": "1" } diff --git a/resources/profiles/MagicMaker.json b/resources/profiles/MagicMaker.json index ede555b66c..08e5774547 100644 --- a/resources/profiles/MagicMaker.json +++ b/resources/profiles/MagicMaker.json @@ -1,6 +1,6 @@ { "name": "MagicMaker", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "MagicMaker configurations", "machine_model_list": [ @@ -141,8 +141,8 @@ "sub_path": "filament/fdm_filament_peek.json" }, { - "name": "MM Generic PEEK", - "sub_path": "filament/MM Generic PEEK.json" + "name": "Generic PEEK @MM", + "sub_path": "filament/Generic PEEK @MM.json" } ], "machine_list": [ diff --git a/resources/profiles/MagicMaker/filament/Generic PEEK @MM.json b/resources/profiles/MagicMaker/filament/Generic PEEK @MM.json new file mode 100644 index 0000000000..6915058856 --- /dev/null +++ b/resources/profiles/MagicMaker/filament/Generic PEEK @MM.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Generic PEEK @MM", + "inherits": "fdm_filament_peek", + "renamed_from": "MM Generic PEEK", + "from": "system", + "setting_id": "2xiVNAQTwBaiLjJn", + "filament_id": "OFz5oHgf", + "instantiation": "true", + "fan_max_speed": [ + "40" + ], + "filament_cost": [ + "1000" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "full_fan_speed_layer": [ + "5" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "420" + ], + "nozzle_temperature_initial_layer": [ + "420" + ], + "nozzle_temperature_range_high": [ + "460" + ], + "nozzle_temperature_range_low": [ + "380" + ], + "temperature_vitrification": [ + "340" + ], + "compatible_printers": [ + "MM hj SK 0.4 nozzle", + "MM BoneKing 0.4 nozzle" + ] +} diff --git a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json b/resources/profiles/MagicMaker/filament/MM Generic PEEK.json deleted file mode 100644 index 75b905476e..0000000000 --- a/resources/profiles/MagicMaker/filament/MM Generic PEEK.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "type": "filament", - "name": "MM Generic PEEK", - "inherits": "fdm_filament_peek", - "from": "system", - "setting_id": "iznBAOK0m6dO7SCh", - "filament_id": "GFG99", - "instantiation": "true", - "fan_max_speed": [ - "40" - ], - "filament_cost": [ - "1000" - ], - "filament_diameter": [ - "1.75" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "full_fan_speed_layer": [ - "5" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "420" - ], - "nozzle_temperature_initial_layer": [ - "420" - ], - "nozzle_temperature_range_high": [ - "460" - ], - "nozzle_temperature_range_low": [ - "380" - ], - "temperature_vitrification": [ - "340" - ], - "compatible_printers": [ - "MM hj SK 0.4 nozzle", - "MM BoneKing 0.4 nozzle" - ] -} diff --git a/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json b/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json index 59f622953b..91054a666d 100644 --- a/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json +++ b/resources/profiles/MagicMaker/machine/MM BoneKing 0.4 nozzle.json @@ -73,7 +73,7 @@ "30" ], "default_filament_profile": [ - "MM Generic PLA" + "Generic PLA @System" ], "machine_max_acceleration_e": [ "10000" diff --git a/resources/profiles/MagicMaker/machine/MM BoneKing.json b/resources/profiles/MagicMaker/machine/MM BoneKing.json index a7b80100be..ab257957a6 100644 --- a/resources/profiles/MagicMaker/machine/MM BoneKing.json +++ b/resources/profiles/MagicMaker/machine/MM BoneKing.json @@ -8,5 +8,5 @@ "bed_model": "310_buildplate_model.stl", "bed_texture": "MM_buildplate_texture.svg", "hotend_model": "MM_hotend.stl", - "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System;Generic TPU @System;Generic PC @System;Generic PA @System;MM Generic PEEK" + "default_materials": "Generic PLA @System;Generic PETG @System;Generic ABS @System;Generic TPU @System;Generic PC @System;Generic PA @System;Generic PEEK @MM" } diff --git a/resources/profiles/MagicMaker/machine/fdm_machine_common.json b/resources/profiles/MagicMaker/machine/fdm_machine_common.json index 256eca42de..64d90f6246 100644 --- a/resources/profiles/MagicMaker/machine/fdm_machine_common.json +++ b/resources/profiles/MagicMaker/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "10000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "0.10mm Fine @MM hj", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json index d980bd9ffa..e15e8a8268 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "JoLMVPh4bNahqirV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json index a27ed5c8ac..7c3ca0f4c7 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "m6Y453vyMDxFz4c7", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json index 263c3c7e02..46feed3806 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QI9sXxzUoh2A8c0S", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json index f04d1862e1..be0c7fa9f2 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM hqs hj.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "vCIBhcj3X7d07y9G", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json index 740aa73f40..8431418656 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine @MM slb.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "BLrg8vEj3xZyxNTo", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json index fab1e63f1d..dea3d51d65 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "fIzlKlmcI4pDKviy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json index f7cbb71eda..331e13b30e 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "xngBXACjTNqOZNyB", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json index e24e6c7fd3..4039971a72 100644 --- a/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.10mm Fine Fast @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "wHOzdPcMWYZNhny2", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json index ad71011496..f9c45c30f9 100644 --- a/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.12mm Fine BestFast @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "PVbARB8V8JUBbIZG", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json index ffabaed092..cae9a2f15a 100644 --- a/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.12mm Fine SuperFast @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "gR34Ioeioizl1UXy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json index 2c252a73e3..a308842d2c 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ON1x9dQTQTgGNLCw", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json index be5f745572..487aba341c 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "JoTnXrNSnHKraaeB", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json index 5e8078a0ca..02cbfacae2 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "J9s3XNTCUjsYusKD", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json index 1fa581bbde..f749464d1c 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM hqs hj.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "MPfzxLi2GBioXdOp", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json index 59d7797359..d52e01a20e 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard @MM slb.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Ivz7U0RTrX558HQ4", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json index b3e9571756..6073685cc6 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "OZKDJHIsKAZtJTeq", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json index 20ab75cbc9..8e80392ab7 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "RL1Irvbsm9Fh3jNz", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json index b56e29914f..85edf0082d 100644 --- a/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.20mm Standard Fast @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "TkBYOyBebm3pMHrl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json index 318575eb72..3a65f152ad 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QuoLlC961atuxMnn", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json index 19ac9c25a5..f9775b7624 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "aXpG4y73oeV4p4by", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json index e5cc84d0fb..4931eba26c 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lZ3guqhwMGxBFtIh", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json index 1a3d053cd2..611002258a 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM hqs hj.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "yBdZW946qhSKDU4w", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json index fdf6c572e6..b02add4e63 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft @MM slb.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Clfnw7cqNtWmzjB1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json index ef49cf7d48..82fbed8b1f 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM BoneKing.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "g2unBNIOfILyLrLQ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json index 4488948238..f9e8ebcf1d 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hj SK.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "bVabJjzFcaYFQ77o", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json index adb7fe1465..b27c6f994a 100644 --- a/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json +++ b/resources/profiles/MagicMaker/process/0.30mm Draft Fast @MM hqs SF.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "G2b2NRdM3geucH0v", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/MagicMaker/process/fdm_process_common.json b/resources/profiles/MagicMaker/process/fdm_process_common.json index 99fcd508d0..45c9bcf236 100644 --- a/resources/profiles/MagicMaker/process/fdm_process_common.json +++ b/resources/profiles/MagicMaker/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Mellow.json b/resources/profiles/Mellow.json index f0b81c832c..6f34f757a7 100644 --- a/resources/profiles/Mellow.json +++ b/resources/profiles/Mellow.json @@ -1,6 +1,6 @@ { "name": "Mellow", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Mellow Printer Profiles", "machine_model_list": [ diff --git a/resources/profiles/Mellow/machine/fdm_common_M1.json b/resources/profiles/Mellow/machine/fdm_common_M1.json index 0d7a37436a..1556cf630a 100644 --- a/resources/profiles/Mellow/machine/fdm_common_M1.json +++ b/resources/profiles/Mellow/machine/fdm_common_M1.json @@ -117,7 +117,6 @@ "40" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Mellow/machine/fdm_machine_common.json b/resources/profiles/Mellow/machine/fdm_machine_common.json index 11833be972..a07212bae7 100644 --- a/resources/profiles/Mellow/machine/fdm_machine_common.json +++ b/resources/profiles/Mellow/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Mellow/process/fdm_process_common.json b/resources/profiles/Mellow/process/fdm_process_common.json index feb86df0e1..f37dc52e73 100644 --- a/resources/profiles/Mellow/process/fdm_process_common.json +++ b/resources/profiles/Mellow/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -84,7 +83,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/OpenEYE.json b/resources/profiles/OpenEYE.json index e29674323e..36f4ae9fac 100644 --- a/resources/profiles/OpenEYE.json +++ b/resources/profiles/OpenEYE.json @@ -1,7 +1,7 @@ { "name": "OpenEYE", "url": "http://www.openeye.tech", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "OpenEYE Printers Configurations", "machine_model_list": [ diff --git a/resources/profiles/OpenEYE/machine/fdm_machine_common.json b/resources/profiles/OpenEYE/machine/fdm_machine_common.json index 86cbf26376..d8845ab892 100644 --- a/resources/profiles/OpenEYE/machine/fdm_machine_common.json +++ b/resources/profiles/OpenEYE/machine/fdm_machine_common.json @@ -1,4 +1,8 @@ { + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "best_object_pos": "0.5x0.5", "change_filament_gcode": "", @@ -16,9 +20,7 @@ "extruder_offset": [ "0x0" ], - "from": "system", "gcode_flavor": "marlin", - "instantiation": "false", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end", "machine_max_acceleration_e": [ @@ -77,7 +79,6 @@ "min_layer_height": [ "0.08" ], - "name": "fdm_machine_common", "nozzle_diameter": [ "0.4" ], @@ -109,9 +110,7 @@ "retraction_speed": [ "60" ], - "silent_mode": "0", "single_extruder_multi_material": "1", - "type": "machine", "wipe": [ "1" ], diff --git a/resources/profiles/OpenEYE/machine/fdm_openeye_common.json b/resources/profiles/OpenEYE/machine/fdm_openeye_common.json index 8af6ea96eb..6bfd69da55 100644 --- a/resources/profiles/OpenEYE/machine/fdm_openeye_common.json +++ b/resources/profiles/OpenEYE/machine/fdm_openeye_common.json @@ -1,4 +1,9 @@ { + "type": "machine", + "name": "fdm_openeye_common", + "inherits": "fdm_machine_common", + "from": "system", + "instantiation": "false", "adaptive_bed_mesh_margin": "0", "auxiliary_fan": "0", "bed_exclude_area": [ @@ -38,14 +43,11 @@ "fan_kickstart": "0", "fan_speedup_overhangs": "1", "fan_speedup_time": "0", - "from": "system", "gcode_flavor": "klipper", "head_wrap_detect_zone": [], "high_current_on_filament_swap": "0", "host_type": "octoprint", "printer_agent": "moonraker", - "inherits": "fdm_machine_common", - "instantiation": "false", "layer_change_gcode": "SET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1}\n_MMU_UPDATE_HEIGHT", "long_retractions_when_cut": [ "0" @@ -137,7 +139,6 @@ "0.08" ], "min_resonance_avoidance_speed": "70", - "name": "fdm_openeye_common", "nozzle_diameter": [ "0.4", "0.4" @@ -195,7 +196,6 @@ "40" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "0", "support_chamber_temp_control": "0", @@ -208,7 +208,6 @@ "travel_slope": [ "3" ], - "type": "machine", "use_firmware_retraction": "0", "use_relative_e_distances": "1", "wipe": [ diff --git a/resources/profiles/OpenEYE/process/fdm_process_common.json b/resources/profiles/OpenEYE/process/fdm_process_common.json index a1e9d13605..9ac1223f30 100644 --- a/resources/profiles/OpenEYE/process/fdm_process_common.json +++ b/resources/profiles/OpenEYE/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "bottom_shell_layers": "3", "bottom_shell_thickness": "0", "bottom_surface_pattern": "monotonic", @@ -33,7 +32,6 @@ "inner_wall_line_width": "0.45", "inner_wall_speed": "40", "interface_shells": "0", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": "40", "ironing_flow": "10%", diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index c649cf3e6b..dd5f307a95 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ @@ -242,12 +242,12 @@ "sub_path": "filament/Arena ABS @base.json" }, { - "name": "OrcaArena Generic ABS @base", - "sub_path": "filament/OrcaArena Generic ABS @base.json" + "name": "Generic ABS @OrcaArena base", + "sub_path": "filament/Generic ABS @OrcaArena base.json" }, { - "name": "OrcaArena Generic ASA @base", - "sub_path": "filament/OrcaArena Generic ASA @base.json" + "name": "Generic ASA @OrcaArena base", + "sub_path": "filament/Generic ASA @OrcaArena base.json" }, { "name": "Arena PA-CF @base", @@ -262,20 +262,20 @@ "sub_path": "filament/Arena Support G @base.json" }, { - "name": "OrcaArena Generic PA", - "sub_path": "filament/OrcaArena Generic PA.json" + "name": "Generic PA @OrcaArena", + "sub_path": "filament/Generic PA @OrcaArena.json" }, { - "name": "OrcaArena Generic PA-CF", - "sub_path": "filament/OrcaArena Generic PA-CF.json" + "name": "Generic PA-CF @OrcaArena", + "sub_path": "filament/Generic PA-CF @OrcaArena.json" }, { "name": "Arena PC @base", "sub_path": "filament/Arena PC @base.json" }, { - "name": "OrcaArena Generic PC @base", - "sub_path": "filament/OrcaArena Generic PC @base.json" + "name": "Generic PC @OrcaArena base", + "sub_path": "filament/Generic PC @OrcaArena base.json" }, { "name": "Arena PET-CF @base", @@ -290,12 +290,12 @@ "sub_path": "filament/Arena PETG-CF @base.json" }, { - "name": "OrcaArena Generic PETG @base", - "sub_path": "filament/OrcaArena Generic PETG @base.json" + "name": "Generic PETG @OrcaArena base", + "sub_path": "filament/Generic PETG @OrcaArena base.json" }, { - "name": "OrcaArena Generic PETG-CF @base", - "sub_path": "filament/OrcaArena Generic PETG-CF @base.json" + "name": "Generic PETG-CF @OrcaArena base", + "sub_path": "filament/Generic PETG-CF @OrcaArena base.json" }, { "name": "Arena PLA Basic @base", @@ -338,16 +338,16 @@ "sub_path": "filament/Arena Support W @base.json" }, { - "name": "OrcaArena Generic PLA @base", - "sub_path": "filament/OrcaArena Generic PLA @base.json" + "name": "Generic PLA @OrcaArena base", + "sub_path": "filament/Generic PLA @OrcaArena base.json" }, { - "name": "OrcaArena Generic PLA Silk @base", - "sub_path": "filament/OrcaArena Generic PLA Silk @base.json" + "name": "Generic PLA Silk @OrcaArena base", + "sub_path": "filament/Generic PLA Silk @OrcaArena base.json" }, { - "name": "OrcaArena Generic PLA-CF @base", - "sub_path": "filament/OrcaArena Generic PLA-CF @base.json" + "name": "Generic PLA-CF @OrcaArena base", + "sub_path": "filament/Generic PLA-CF @OrcaArena base.json" }, { "name": "PolyLite PLA @base", @@ -358,16 +358,16 @@ "sub_path": "filament/PolyTerra PLA @base.json" }, { - "name": "OrcaArena Generic PVA @base", - "sub_path": "filament/OrcaArena Generic PVA @base.json" + "name": "Generic PVA @OrcaArena base", + "sub_path": "filament/Generic PVA @OrcaArena base.json" }, { "name": "Arena TPU 95A @base", "sub_path": "filament/Arena TPU 95A @base.json" }, { - "name": "OrcaArena Generic TPU", - "sub_path": "filament/OrcaArena Generic TPU.json" + "name": "Generic TPU @OrcaArena", + "sub_path": "filament/Generic TPU @OrcaArena.json" }, { "name": "Arena ABS @Arena X1C", @@ -382,20 +382,20 @@ "sub_path": "filament/Arena ABS @Arena X1C 0.8 nozzle.json" }, { - "name": "OrcaArena Generic ABS", - "sub_path": "filament/OrcaArena Generic ABS.json" + "name": "Generic ABS @OrcaArena", + "sub_path": "filament/Generic ABS @OrcaArena.json" }, { - "name": "OrcaArena Generic ABS @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic ABS @0.2 nozzle.json" + "name": "Generic ABS @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic ABS @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic ASA", - "sub_path": "filament/OrcaArena Generic ASA.json" + "name": "Generic ASA @OrcaArena", + "sub_path": "filament/Generic ASA @OrcaArena.json" }, { - "name": "OrcaArena Generic ASA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic ASA @0.2 nozzle.json" + "name": "Generic ASA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic ASA @OrcaArena 0.2 nozzle.json" }, { "name": "Arena PA-CF @Arena X1C", @@ -426,12 +426,12 @@ "sub_path": "filament/Arena PC @Arena X1C 0.8 nozzle.json" }, { - "name": "OrcaArena Generic PC", - "sub_path": "filament/OrcaArena Generic PC.json" + "name": "Generic PC @OrcaArena", + "sub_path": "filament/Generic PC @OrcaArena.json" }, { - "name": "OrcaArena Generic PC @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PC @0.2 nozzle.json" + "name": "Generic PC @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PC @OrcaArena 0.2 nozzle.json" }, { "name": "Arena PET-CF @Arena X1C", @@ -454,16 +454,16 @@ "sub_path": "filament/Arena PETG-CF @Arena X1C.json" }, { - "name": "OrcaArena Generic PETG", - "sub_path": "filament/OrcaArena Generic PETG.json" + "name": "Generic PETG @OrcaArena", + "sub_path": "filament/Generic PETG @OrcaArena.json" }, { - "name": "OrcaArena Generic PETG @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PETG @0.2 nozzle.json" + "name": "Generic PETG @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PETG @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PETG-CF @Arena X1C", - "sub_path": "filament/OrcaArena Generic PETG-CF @Arena X1C.json" + "name": "Generic PETG-CF @Arena X1C", + "sub_path": "filament/Generic PETG-CF @Arena X1C.json" }, { "name": "Arena PLA Basic @Arena X1C", @@ -542,20 +542,20 @@ "sub_path": "filament/Arena Support W @Arena X1C 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PLA", - "sub_path": "filament/OrcaArena Generic PLA.json" + "name": "Generic PLA @OrcaArena", + "sub_path": "filament/Generic PLA @OrcaArena.json" }, { - "name": "OrcaArena Generic PLA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PLA @0.2 nozzle.json" + "name": "Generic PLA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PLA @OrcaArena 0.2 nozzle.json" }, { - "name": "OrcaArena Generic PLA Silk", - "sub_path": "filament/OrcaArena Generic PLA Silk.json" + "name": "Generic PLA Silk @OrcaArena", + "sub_path": "filament/Generic PLA Silk @OrcaArena.json" }, { - "name": "OrcaArena Generic PLA-CF", - "sub_path": "filament/OrcaArena Generic PLA-CF.json" + "name": "Generic PLA-CF @OrcaArena", + "sub_path": "filament/Generic PLA-CF @OrcaArena.json" }, { "name": "PolyLite PLA @Arena X1C", @@ -566,12 +566,12 @@ "sub_path": "filament/PolyTerra PLA @Arena X1C.json" }, { - "name": "OrcaArena Generic PVA", - "sub_path": "filament/OrcaArena Generic PVA.json" + "name": "Generic PVA @OrcaArena", + "sub_path": "filament/Generic PVA @OrcaArena.json" }, { - "name": "OrcaArena Generic PVA @0.2 nozzle", - "sub_path": "filament/OrcaArena Generic PVA @0.2 nozzle.json" + "name": "Generic PVA @OrcaArena 0.2 nozzle", + "sub_path": "filament/Generic PVA @OrcaArena 0.2 nozzle.json" }, { "name": "Arena TPU 95A @Arena X1C", diff --git a/resources/profiles/OrcaArena/filament/Arena ABS @base.json b/resources/profiles/OrcaArena/filament/Arena ABS @base.json index 6b8bffc802..e2ae90f59d 100644 --- a/resources/profiles/OrcaArena/filament/Arena ABS @base.json +++ b/resources/profiles/OrcaArena/filament/Arena ABS @base.json @@ -3,7 +3,7 @@ "name": "Arena ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFB00", + "filament_id": "OFJ3HRsR", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json index 3cca273276..dfd447f93d 100644 --- a/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN03", + "filament_id": "OFA026vt", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json index bd91f8f92b..e792d76bdc 100644 --- a/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFN04", + "filament_id": "OFtOPlK6", "instantiation": "false", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/OrcaArena/filament/Arena PC @base.json b/resources/profiles/OrcaArena/filament/Arena PC @base.json index 912971768d..5af0a9af69 100644 --- a/resources/profiles/OrcaArena/filament/Arena PC @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PC @base.json @@ -3,7 +3,7 @@ "name": "Arena PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "GFC00", + "filament_id": "OFrr67nG", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json index ec29afee99..a17488fff1 100644 --- a/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFT01", + "filament_id": "OFc87pL3", "instantiation": "false", "temperature_vitrification": [ "185" diff --git a/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json b/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json index ca09ce05bd..ed01353b35 100644 --- a/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Arena PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG00", + "filament_id": "OFNBlAPT", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json index 06a32d1956..b3b69c736f 100644 --- a/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "GFG50", + "filament_id": "OFuO0cAP", "instantiation": "false", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json index 15fee6343b..c42ca761e0 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA00", + "filament_id": "OFSbGfsz", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json index d049672842..04c28f1ec2 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Impact @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Impact @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA03", + "filament_id": "OFjXrKFO", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json index 95a18a2e21..58a7efc0e7 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA07", + "filament_id": "OFuehn62", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json index d90b362299..b2293d70c8 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA01", + "filament_id": "OFgptDSf", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json index 3071459e05..5e71a14838 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA02", + "filament_id": "OFOAdMCB", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json index d3929f3c24..93554f77df 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA05", + "filament_id": "OFmfizbq", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json index db96b66e28..dc823a97f5 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA08", + "filament_id": "OFyHgT60", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json b/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json index 6f2d30c051..38ae042314 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA09", + "filament_id": "OFtKeKa9", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json b/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json index c0783f0a03..c3acf67b7c 100644 --- a/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json +++ b/resources/profiles/OrcaArena/filament/Arena PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Arena PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFA50", + "filament_id": "OF2hfMcG", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena Support G @base.json b/resources/profiles/OrcaArena/filament/Arena Support G @base.json index 72a18d0edd..2ab8eb1932 100644 --- a/resources/profiles/OrcaArena/filament/Arena Support G @base.json +++ b/resources/profiles/OrcaArena/filament/Arena Support G @base.json @@ -3,7 +3,7 @@ "name": "Arena Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFS01", + "filament_id": "OFIPjqHt", "instantiation": "false", "required_nozzle_HRC": [ "3" diff --git a/resources/profiles/OrcaArena/filament/Arena Support W @base.json b/resources/profiles/OrcaArena/filament/Arena Support W @base.json index d51ee9c170..fa3733d2bc 100644 --- a/resources/profiles/OrcaArena/filament/Arena Support W @base.json +++ b/resources/profiles/OrcaArena/filament/Arena Support W @base.json @@ -3,7 +3,7 @@ "name": "Arena Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFS00", + "filament_id": "OFI6WZpn", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json b/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json index 0e6dec526f..b4069147be 100644 --- a/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json +++ b/resources/profiles/OrcaArena/filament/Arena TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Arena TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFU01", + "filament_id": "OFQGvU2G", "instantiation": "false", "filament_vendor": [ "Orca Arena" diff --git a/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..f98408fe0f --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ABS @OrcaArena 0.2 nozzle", + "inherits": "Generic ABS @OrcaArena base", + "renamed_from": "OrcaArena Generic ABS @0.2 nozzle;OrcaArena Generic ABS 0.2 nozzle", + "from": "system", + "setting_id": "mzx0hG9Xe9fIrkrW", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json new file mode 100644 index 0000000000..f2cd5abbf4 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena base.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic ABS @OrcaArena base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "OFY9muEs", + "instantiation": "false", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json new file mode 100644 index 0000000000..2a505d7ca1 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ABS @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic ABS @OrcaArena", + "inherits": "Generic ABS @OrcaArena base", + "renamed_from": "OrcaArena Generic ABS", + "from": "system", + "setting_id": "ftTPQmVmsaD0n1GF", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..77bd051b4e --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ASA @OrcaArena 0.2 nozzle", + "inherits": "Generic ASA @OrcaArena base", + "renamed_from": "OrcaArena Generic ASA @0.2 nozzle;OrcaArena Generic ASA 0.2 nozzle", + "from": "system", + "setting_id": "rtFj6gFceWHdzTmO", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json new file mode 100644 index 0000000000..772c708dd8 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena base.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic ASA @OrcaArena base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "OFLPAxz3", + "instantiation": "false", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json new file mode 100644 index 0000000000..0ee8d6cc20 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic ASA @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic ASA @OrcaArena", + "inherits": "Generic ASA @OrcaArena base", + "renamed_from": "OrcaArena Generic ASA", + "from": "system", + "setting_id": "V2Z1rxHqIqIuwP5O", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json new file mode 100644 index 0000000000..87b0a67ed8 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PA @OrcaArena.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PA @OrcaArena", + "inherits": "fdm_filament_pa", + "renamed_from": "OrcaArena Generic PA", + "from": "system", + "setting_id": "KScdeqdB3UR6uvxs", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "required_nozzle_HRC": [ + "3" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json new file mode 100644 index 0000000000..2d928201b7 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PA-CF @OrcaArena.json @@ -0,0 +1,45 @@ +{ + "type": "filament", + "name": "Generic PA-CF @OrcaArena", + "inherits": "fdm_filament_pa", + "renamed_from": "OrcaArena Generic PA-CF", + "from": "system", + "setting_id": "xANIesGhsXwbTn3J", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature": [ + "290" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "40" + ], + "fan_cooling_layer_time": [ + "5" + ], + "full_fan_speed_layer": [ + "2" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..ad15f49a69 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PC @OrcaArena 0.2 nozzle", + "inherits": "Generic PC @OrcaArena base", + "renamed_from": "OrcaArena Generic PC @0.2 nozzle;OrcaArena Generic PC 0.2 nozzle", + "from": "system", + "setting_id": "AEKvB4RVBo2zOkdg", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json new file mode 100644 index 0000000000..3ea8fd8bd4 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena base.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PC @OrcaArena base", + "inherits": "fdm_filament_pc", + "from": "system", + "filament_id": "OFLakOUI", + "instantiation": "false", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.94" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json new file mode 100644 index 0000000000..b4302c3c47 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PC @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PC @OrcaArena", + "inherits": "Generic PC @OrcaArena base", + "renamed_from": "OrcaArena Generic PC", + "from": "system", + "setting_id": "He4O4h8oEFsySDIJ", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..1be2988356 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PETG @OrcaArena 0.2 nozzle", + "inherits": "Generic PETG @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG @0.2 nozzle;OrcaArena Generic PETG 0.2 nozzle", + "from": "system", + "setting_id": "ZstQ3h8DGCpRWQJN", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json new file mode 100644 index 0000000000..4ec26aae2b --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena base.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "name": "Generic PETG @OrcaArena base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFYPdQJh", + "instantiation": "false", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "cool_plate_temp": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + " ; filament start gcode\n{if (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S180\n{endif}" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json new file mode 100644 index 0000000000..ad3260fe1c --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PETG @OrcaArena", + "inherits": "Generic PETG @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG", + "from": "system", + "setting_id": "3puaC0EwFLvEnGH2", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json b/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json new file mode 100644 index 0000000000..f8741a22a9 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG-CF @Arena X1C.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Arena X1C", + "inherits": "Generic PETG-CF @OrcaArena base", + "renamed_from": "OrcaArena Generic PETG-CF @Arena X1C;OrcaArena Generic PETG-CF Arena X1C", + "from": "system", + "setting_id": "MeIL8qLFZytjvYrF", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json new file mode 100644 index 0000000000..754407c32a --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PETG-CF @OrcaArena base.json @@ -0,0 +1,86 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @OrcaArena base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFoYSJKi", + "instantiation": "false", + "filament_flow_ratio": [ + "0.95" + ], + "temperature_vitrification": [ + "75" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "cool_plate_temp": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_vendor": [ + "Generic" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "255" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "0" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "6" + ], + "fan_cooling_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..074732db01 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena 0.2 nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic PLA @OrcaArena 0.2 nozzle", + "inherits": "Generic PLA @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA @0.2 nozzle;OrcaArena Generic PLA 0.2 nozzle", + "from": "system", + "setting_id": "HjJH9JT9x9sFtVES", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "2" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json new file mode 100644 index 0000000000..cec0b9cd19 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA @OrcaArena base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFDSrzZ8", + "instantiation": "false", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json new file mode 100644 index 0000000000..9018f24583 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PLA @OrcaArena", + "inherits": "Generic PLA @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA", + "from": "system", + "setting_id": "TfkkCc6rILxDiZhR", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json new file mode 100644 index 0000000000..f73d037385 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @OrcaArena base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFesA6rF", + "instantiation": "false", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json new file mode 100644 index 0000000000..6afb0e48a2 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA Silk @OrcaArena.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @OrcaArena", + "inherits": "Generic PLA Silk @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA Silk", + "from": "system", + "setting_id": "rvJjX9QsHM1O1CGD", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json new file mode 100644 index 0000000000..79a2b7ba88 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena base.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @OrcaArena base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFWbdGsC", + "instantiation": "false", + "required_nozzle_HRC": [ + "40" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "temperature_vitrification": [ + "55" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json new file mode 100644 index 0000000000..ced9245904 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PLA-CF @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @OrcaArena", + "inherits": "Generic PLA-CF @OrcaArena base", + "renamed_from": "OrcaArena Generic PLA-CF", + "from": "system", + "setting_id": "vexlQFuvVzpsYT0Z", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json new file mode 100644 index 0000000000..417ef65683 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena 0.2 nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic PVA @OrcaArena 0.2 nozzle", + "inherits": "Generic PVA @OrcaArena base", + "renamed_from": "OrcaArena Generic PVA @0.2 nozzle;OrcaArena Generic PVA 0.2 nozzle", + "from": "system", + "setting_id": "jX00tEZaqsJvpoBT", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "0.5" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.2 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json new file mode 100644 index 0000000000..f44bc7f46c --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena base.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PVA @OrcaArena base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "OFDvXujf", + "instantiation": "false", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json new file mode 100644 index 0000000000..bf9cbcda7a --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic PVA @OrcaArena.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic PVA @OrcaArena", + "inherits": "Generic PVA @OrcaArena base", + "renamed_from": "OrcaArena Generic PVA", + "from": "system", + "setting_id": "S9TMm0n7t54fKHoM", + "instantiation": "true", + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json b/resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json new file mode 100644 index 0000000000..75fcc13a79 --- /dev/null +++ b/resources/profiles/OrcaArena/filament/Generic TPU @OrcaArena.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic TPU @OrcaArena", + "inherits": "fdm_filament_tpu", + "renamed_from": "OrcaArena Generic TPU", + "from": "system", + "setting_id": "GBRnBtqYf9H8pQKU", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" + ], + "compatible_printers": [ + "Orca Arena X1 Carbon 0.4 nozzle", + "Orca Arena X1 Carbon 0.6 nozzle", + "Orca Arena X1 Carbon 0.8 nozzle" + ] +} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json deleted file mode 100644 index 37062950e4..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ABS @0.2 nozzle", - "inherits": "OrcaArena Generic ABS @base", - "from": "system", - "setting_id": "o9UpKuDWgaJT7sM5", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json deleted file mode 100644 index ea3357846a..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS @base.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ABS @base", - "inherits": "fdm_filament_abs", - "from": "system", - "filament_id": "GFB99", - "instantiation": "false", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json deleted file mode 100644 index 773f58289e..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ABS.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ABS", - "inherits": "OrcaArena Generic ABS @base", - "from": "system", - "setting_id": "5aN0QkAneu6yEWZh", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json deleted file mode 100644 index 2d3f9a5026..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ASA @0.2 nozzle", - "inherits": "OrcaArena Generic ASA @base", - "from": "system", - "setting_id": "rV2Uymwz7aoouqiN", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json deleted file mode 100644 index cd0856f13f..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA @base.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ASA @base", - "inherits": "fdm_filament_asa", - "from": "system", - "filament_id": "GFB98", - "instantiation": "false", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json deleted file mode 100644 index d092b1f64d..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic ASA.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic ASA", - "inherits": "OrcaArena Generic ASA @base", - "from": "system", - "setting_id": "8KdojTD3bygYDxwh", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json deleted file mode 100644 index caf87f47e9..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA-CF.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "XHOpI9EFQmYoJ3Sy", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature": [ - "290" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "0%" - ], - "overhang_fan_speed": [ - "40" - ], - "fan_cooling_layer_time": [ - "5" - ], - "full_fan_speed_layer": [ - "2" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json deleted file mode 100644 index 2f4438a82b..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "IintLqJOecQcKmA8", - "filament_id": "GFN99", - "instantiation": "true", - "required_nozzle_HRC": [ - "3" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json deleted file mode 100644 index 0a26869776..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PC @0.2 nozzle", - "inherits": "OrcaArena Generic PC @base", - "from": "system", - "setting_id": "THS8jolD0RsYaFzY", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json deleted file mode 100644 index d3b97beca6..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC @base.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PC @base", - "inherits": "fdm_filament_pc", - "from": "system", - "filament_id": "GFC99", - "instantiation": "false", - "filament_max_volumetric_speed": [ - "16" - ], - "filament_flow_ratio": [ - "0.94" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json deleted file mode 100644 index 024e76e0bc..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PC.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PC", - "inherits": "OrcaArena Generic PC @base", - "from": "system", - "setting_id": "WCiW1Yi88MEZIO2h", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json deleted file mode 100644 index 375031f137..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG @0.2 nozzle", - "inherits": "OrcaArena Generic PETG @base", - "from": "system", - "setting_id": "jcoeFJFmDil7U667", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json deleted file mode 100644 index 253c710014..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG @base.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG @base", - "inherits": "fdm_filament_pet", - "from": "system", - "filament_id": "GFG99", - "instantiation": "false", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - " ; filament start gcode\n{if (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S180\n{endif}" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json deleted file mode 100644 index 0a6e9a9dbc..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @Arena X1C.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG-CF @Arena X1C", - "inherits": "OrcaArena Generic PETG-CF @base", - "from": "system", - "setting_id": "2OI2L2q50nSxam2z", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json deleted file mode 100644 index b71f5d4536..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG-CF @base.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG-CF @base", - "inherits": "fdm_filament_pet", - "from": "system", - "filament_id": "GFG98", - "instantiation": "false", - "filament_flow_ratio": [ - "0.95" - ], - "temperature_vitrification": [ - "75" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "90" - ], - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_vendor": [ - "Orca Arena" - ], - "filament_type": [ - "PETG-CF" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature": [ - "255" - ], - "filament_cost": [ - "34.99" - ], - "filament_density": [ - "1.25" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "0" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "slow_down_layer_time": [ - "6" - ], - "fan_cooling_layer_time": [ - "20" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json deleted file mode 100644 index 8771a7b609..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PETG.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PETG", - "inherits": "OrcaArena Generic PETG @base", - "from": "system", - "setting_id": "1hFOFT9YOdnKBw1d", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json deleted file mode 100644 index 261cd931f6..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @0.2 nozzle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA @0.2 nozzle", - "inherits": "OrcaArena Generic PLA @base", - "from": "system", - "setting_id": "V1TMYgbxBLgciFa2", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json deleted file mode 100644 index d7618a6f97..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA @base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL99", - "instantiation": "false", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json deleted file mode 100644 index 7d6f5e3020..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk @base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA Silk @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFA05", - "instantiation": "false", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json deleted file mode 100644 index 3b6b96bb72..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA Silk.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA Silk", - "inherits": "OrcaArena Generic PLA Silk @base", - "from": "system", - "setting_id": "WRy8oYxZ542SX6jO", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json deleted file mode 100644 index e3e0efe224..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF @base.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA-CF @base", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL98", - "instantiation": "false", - "required_nozzle_HRC": [ - "40" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "temperature_vitrification": [ - "55" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json deleted file mode 100644 index 4a04e96360..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA-CF.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA-CF", - "inherits": "OrcaArena Generic PLA-CF @base", - "from": "system", - "setting_id": "qHV6B5JvmdtAQeNs", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json deleted file mode 100644 index 2a3aef423c..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PLA.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PLA", - "inherits": "OrcaArena Generic PLA @base", - "from": "system", - "setting_id": "jGG0BiyRGgPDP8rB", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json deleted file mode 100644 index 8892aac57f..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @0.2 nozzle.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PVA @0.2 nozzle", - "inherits": "OrcaArena Generic PVA @base", - "from": "system", - "setting_id": "N6p6wvNCjR4Lv0WC", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "0.5" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.2 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json deleted file mode 100644 index 42d91f10bc..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA @base.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PVA @base", - "inherits": "fdm_filament_pva", - "from": "system", - "filament_id": "GFS99", - "instantiation": "false", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json deleted file mode 100644 index 42a68b5fee..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic PVA.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic PVA", - "inherits": "OrcaArena Generic PVA @base", - "from": "system", - "setting_id": "Qh5TOtrBfOFul0OC", - "instantiation": "true", - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json b/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json deleted file mode 100644 index a1451c04fd..0000000000 --- a/resources/profiles/OrcaArena/filament/OrcaArena Generic TPU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "OrcaArena Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "uPHnZUr5Sb16uKZm", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif}" - ], - "compatible_printers": [ - "Orca Arena X1 Carbon 0.4 nozzle", - "Orca Arena X1 Carbon 0.6 nozzle", - "Orca Arena X1 Carbon 0.8 nozzle" - ] -} diff --git a/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json b/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json index 692492d21a..276bef31c5 100644 --- a/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json +++ b/resources/profiles/OrcaArena/filament/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_vendor": [ "Polymaker" diff --git a/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json b/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json index c572a15b91..6e167c7248 100644 --- a/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json +++ b/resources/profiles/OrcaArena/filament/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_vendor": [ "Polymaker" diff --git a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json index 362496ba28..aa166a4c90 100644 --- a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json +++ b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "OrcaArena Generic PLA Silk;OrcaArena Generic PLA;Arena PLA Matte @Arena X1C;Arena PLA Basic @Arena X1C;Arena ABS @Arena X1C;Arena PC @Arena X1C;Arena Support W @Arena X1C;Arena TPU 95A @Arena X1C;PolyTerra PLA @Arena X1C;PolyLite PLA @Arena X1C;" + "default_materials": "Generic PLA Silk @OrcaArena;Generic PLA @OrcaArena;Arena PLA Matte @Arena X1C;Arena PLA Basic @Arena X1C;Arena ABS @Arena X1C;Arena PC @Arena X1C;Arena Support W @Arena X1C;Arena TPU 95A @Arena X1C;PolyTerra PLA @Arena X1C;PolyLite PLA @Arena X1C;Generic PLA @OrcaArena 0.2 nozzle" } diff --git a/resources/profiles/OrcaArena/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/OrcaArena/machine/fdm_bbl_3dp_001_common.json index 84096e978c..0ce40a051a 100644 --- a/resources/profiles/OrcaArena/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/OrcaArena/machine/fdm_bbl_3dp_001_common.json @@ -144,7 +144,6 @@ "Spiral Lift" ], "nozzle_type": "hardened_steel", - "silent_mode": "0", "single_extruder_multi_material": "1", "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n", "machine_end_gcode": "PRINT_END", diff --git a/resources/profiles/OrcaArena/machine/fdm_machine_common.json b/resources/profiles/OrcaArena/machine/fdm_machine_common.json index 01ece7b8a0..84a8829a59 100644 --- a/resources/profiles/OrcaArena/machine/fdm_machine_common.json +++ b/resources/profiles/OrcaArena/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/OrcaArena/process/fdm_process_arena_common.json b/resources/profiles/OrcaArena/process/fdm_process_arena_common.json index 2fda69d729..f0171b1731 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_arena_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_arena_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -31,7 +30,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "crosshatch", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/OrcaArena/process/fdm_process_common.json b/resources/profiles/OrcaArena/process/fdm_process_common.json index abe5fe9e01..f78b43e241 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index 9701c6eb0d..3ce35d2623 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.04.00.04", + "version": "02.04.00.07", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ @@ -68,258 +68,6 @@ "name": "fdm_filament_pla", "sub_path": "filament/base/fdm_filament_pla.json" }, - { - "name": "FilAr PLA @base", - "sub_path": "filament/FilAr/FilAr PLA @base.json" - }, - { - "name": "FilAr PLA Bronce", - "sub_path": "filament/FilAr/FilAr PLA Bronce.json" - }, - { - "name": "FilAr PLA Gris Plata", - "sub_path": "filament/FilAr/FilAr PLA Gris Plata.json" - }, - { - "name": "FilAr PLA Cobre", - "sub_path": "filament/FilAr/FilAr PLA Cobre.json" - }, - { - "name": "FilAr PLA Titanio", - "sub_path": "filament/FilAr/FilAr PLA Titanio.json" - }, - { - "name": "FilAr PLA Tabaco", - "sub_path": "filament/FilAr/FilAr PLA Tabaco.json" - }, - { - "name": "FilAr PLA Cafe con Leche", - "sub_path": "filament/FilAr/FilAr PLA Cafe con Leche.json" - }, - { - "name": "FilAr PLA Manteca", - "sub_path": "filament/FilAr/FilAr PLA Manteca.json" - }, - { - "name": "FilAr PLA Marron Oxido", - "sub_path": "filament/FilAr/FilAr PLA Marron Oxido.json" - }, - { - "name": "FilAr PLA Carpincho", - "sub_path": "filament/FilAr/FilAr PLA Carpincho.json" - }, - { - "name": "FilAr PLA Rosa Amaranto", - "sub_path": "filament/FilAr/FilAr PLA Rosa Amaranto.json" - }, - { - "name": "FilAr PLA Rosa Flamenco", - "sub_path": "filament/FilAr/FilAr PLA Rosa Flamenco.json" - }, - { - "name": "FilAr PLA Piel", - "sub_path": "filament/FilAr/FilAr PLA Piel.json" - }, - { - "name": "FilAr PLA Verde FilAr", - "sub_path": "filament/FilAr/FilAr PLA Verde FilAr.json" - }, - { - "name": "FilAr PLA Verde Manzana", - "sub_path": "filament/FilAr/FilAr PLA Verde Manzana.json" - }, - { - "name": "FilAr PLA Verde Pixel", - "sub_path": "filament/FilAr/FilAr PLA Verde Pixel.json" - }, - { - "name": "FilAr PLA Verde Oliva", - "sub_path": "filament/FilAr/FilAr PLA Verde Oliva.json" - }, - { - "name": "FilAr PLA Blanco Antartida", - "sub_path": "filament/FilAr/FilAr PLA Blanco Antartida.json" - }, - { - "name": "FilAr PLA Blanco Calido", - "sub_path": "filament/FilAr/FilAr PLA Blanco Calido.json" - }, - { - "name": "FilAr PLA Negro Azabache", - "sub_path": "filament/FilAr/FilAr PLA Negro Azabache.json" - }, - { - "name": "FilAr PLA Naranja Tigre", - "sub_path": "filament/FilAr/FilAr PLA Naranja Tigre.json" - }, - { - "name": "FilAr PLA Rojo de Carreras", - "sub_path": "filament/FilAr/FilAr PLA Rojo de Carreras.json" - }, - { - "name": "FilAr PLA Amarillo Lirio", - "sub_path": "filament/FilAr/FilAr PLA Amarillo Lirio.json" - }, - { - "name": "FilAr PLA Violeta Jacaranda", - "sub_path": "filament/FilAr/FilAr PLA Violeta Jacaranda.json" - }, - { - "name": "FilAr PLA Gris Pizarra", - "sub_path": "filament/FilAr/FilAr PLA Gris Pizarra.json" - }, - { - "name": "FilAr PLA Gris Ceniza", - "sub_path": "filament/FilAr/FilAr PLA Gris Ceniza.json" - }, - { - "name": "FilAr PLA Azul Francia", - "sub_path": "filament/FilAr/FilAr PLA Azul Francia.json" - }, - { - "name": "FilAr PLA Celeste Cielo", - "sub_path": "filament/FilAr/FilAr PLA Celeste Cielo.json" - }, - { - "name": "FilAr PLA Oro", - "sub_path": "filament/FilAr/FilAr PLA Oro.json" - }, - { - "name": "FilAr PLA Dorado", - "sub_path": "filament/FilAr/FilAr PLA Dorado.json" - }, - { - "name": "FilAr PLA-mate @base", - "sub_path": "filament/FilAr/FilAr PLA-mate @base.json" - }, - { - "name": "FilAr PLA-mate Amarillo", - "sub_path": "filament/FilAr/FilAr PLA-mate Amarillo.json" - }, - { - "name": "FilAr PLA-mate Azul", - "sub_path": "filament/FilAr/FilAr PLA-mate Azul.json" - }, - { - "name": "FilAr PLA-mate Beige", - "sub_path": "filament/FilAr/FilAr PLA-mate Beige.json" - }, - { - "name": "FilAr PLA-mate Blanco", - "sub_path": "filament/FilAr/FilAr PLA-mate Blanco.json" - }, - { - "name": "FilAr PLA-mate Bordo", - "sub_path": "filament/FilAr/FilAr PLA-mate Bordo.json" - }, - { - "name": "FilAr PLA-mate Celeste Cielo", - "sub_path": "filament/FilAr/FilAr PLA-mate Celeste Cielo.json" - }, - { - "name": "FilAr PLA-mate Chocolate", - "sub_path": "filament/FilAr/FilAr PLA-mate Chocolate.json" - }, - { - "name": "FilAr PLA-mate Gris", - "sub_path": "filament/FilAr/FilAr PLA-mate Gris.json" - }, - { - "name": "FilAr PLA-mate Marron", - "sub_path": "filament/FilAr/FilAr PLA-mate Marron.json" - }, - { - "name": "FilAr PLA-mate Naranja", - "sub_path": "filament/FilAr/FilAr PLA-mate Naranja.json" - }, - { - "name": "FilAr PLA-mate Negro", - "sub_path": "filament/FilAr/FilAr PLA-mate Negro.json" - }, - { - "name": "FilAr PLA-mate Piel", - "sub_path": "filament/FilAr/FilAr PLA-mate Piel.json" - }, - { - "name": "FilAr PLA-mate Rojo", - "sub_path": "filament/FilAr/FilAr PLA-mate Rojo.json" - }, - { - "name": "FilAr PLA-mate Rosa", - "sub_path": "filament/FilAr/FilAr PLA-mate Rosa.json" - }, - { - "name": "FilAr PLA-mate Uva", - "sub_path": "filament/FilAr/FilAr PLA-mate Uva.json" - }, - { - "name": "FilAr PLA-mate Verde", - "sub_path": "filament/FilAr/FilAr PLA-mate Verde.json" - }, - { - "name": "FilAr PLA-mate Violeta", - "sub_path": "filament/FilAr/FilAr PLA-mate Violeta.json" - }, - { - "name": "FilAr PETG @base", - "sub_path": "filament/FilAr/FilAr PETG @base.json" - }, - { - "name": "FilAr PETG Amarillo Lima", - "sub_path": "filament/FilAr/FilAr PETG Amarillo Lima.json" - }, - { - "name": "FilAr PETG Amarillo Radiante", - "sub_path": "filament/FilAr/FilAr PETG Amarillo Radiante.json" - }, - { - "name": "FilAr PETG Azul Boreal", - "sub_path": "filament/FilAr/FilAr PETG Azul Boreal.json" - }, - { - "name": "FilAr PETG Azul Francia", - "sub_path": "filament/FilAr/FilAr PETG Azul Francia.json" - }, - { - "name": "FilAr PETG Azul Imperial", - "sub_path": "filament/FilAr/FilAr PETG Azul Imperial.json" - }, - { - "name": "FilAr PETG Blanco Antartida", - "sub_path": "filament/FilAr/FilAr PETG Blanco Antartida.json" - }, - { - "name": "FilAr PETG Cian", - "sub_path": "filament/FilAr/FilAr PETG Cian.json" - }, - { - "name": "FilAr PETG Coral", - "sub_path": "filament/FilAr/FilAr PETG Coral.json" - }, - { - "name": "FilAr PETG Cristal", - "sub_path": "filament/FilAr/FilAr PETG Cristal.json" - }, - { - "name": "FilAr PETG Gris Ceniza", - "sub_path": "filament/FilAr/FilAr PETG Gris Ceniza.json" - }, - { - "name": "FilAr PETG Gris Plata", - "sub_path": "filament/FilAr/FilAr PETG Gris Plata.json" - }, - { - "name": "FilAr PETG Magenta", - "sub_path": "filament/FilAr/FilAr PETG Magenta.json" - }, - { - "name": "FilAr PETG Negro Azabache", - "sub_path": "filament/FilAr/FilAr PETG Negro Azabache.json" - }, - { - "name": "FilAr PETG Rojo Carmesi", - "sub_path": "filament/FilAr/FilAr PETG Rojo Carmesi.json" - }, { "name": "fdm_filament_pp", "sub_path": "filament/base/fdm_filament_pp.json" @@ -525,8 +273,8 @@ "sub_path": "filament/DREMC/DREMC PA6-CF @base.json" }, { - "name": "Elegoo PAHT @base", - "sub_path": "filament/Elegoo/Elegoo PAHT @base.json" + "name": "Elegoo PAHT-CF @base", + "sub_path": "filament/Elegoo/Elegoo PAHT-CF @base.json" }, { "name": "FILL3D PA @base", @@ -585,8 +333,8 @@ "sub_path": "filament/Generic PE @System.json" }, { - "name": "Generic PE-CF @System", - "sub_path": "filament/Generic PE-CF @System.json" + "name": "Generic PE-CF @base", + "sub_path": "filament/Generic PE-CF @base.json" }, { "name": "AliZ PETG @base", @@ -668,22 +416,30 @@ "name": "Fiberon PETG-rCF @base", "sub_path": "filament/Polymaker/Fiberon PETG-rCF @base.json" }, + { + "name": "FilAr PETG @base", + "sub_path": "filament/FilAr/FilAr PETG @base.json" + }, { "name": "Generic PETG @System", "sub_path": "filament/Generic PETG @System.json" }, { - "name": "Generic PETG HF @System", - "sub_path": "filament/Generic PETG HF @System.json" + "name": "Generic PETG HF @base", + "sub_path": "filament/Generic PETG HF @base.json" }, { - "name": "Generic PETG-CF @System", - "sub_path": "filament/Generic PETG-CF @System.json" + "name": "Generic PETG-CF @base", + "sub_path": "filament/Generic PETG-CF @base.json" }, { "name": "GreenGate3D PETG @base", "sub_path": "filament/GreenGate3D/GreenGate3D PETG @base.json" }, + { + "name": "JAYO PETG @base", + "sub_path": "filament/JAYO/JAYO PETG @base.json" + }, { "name": "NIT PETG @base", "sub_path": "filament/NIT/NIT PETG @base.json" @@ -856,6 +612,14 @@ "name": "FILL3D PLA Turbo @base", "sub_path": "filament/FILL3D/FILL3D PLA Turbo @base.json" }, + { + "name": "FilAr PLA @base", + "sub_path": "filament/FilAr/FilAr PLA @base.json" + }, + { + "name": "FilAr PLA-mate @base", + "sub_path": "filament/FilAr/FilAr PLA-mate @base.json" + }, { "name": "Generic PLA @System", "sub_path": "filament/Generic PLA @System.json" @@ -865,13 +629,21 @@ "sub_path": "filament/Generic PLA High Speed @System.json" }, { - "name": "Generic PLA Matte @System", - "sub_path": "filament/Generic PLA Matte @System.json" + "name": "Generic PLA Matte @base", + "sub_path": "filament/Generic PLA Matte @base.json" }, { "name": "Generic PLA-CF @System", "sub_path": "filament/Generic PLA-CF @System.json" }, + { + "name": "JAYO PLA @base", + "sub_path": "filament/JAYO/JAYO PLA @base.json" + }, + { + "name": "JAYO PLA Classic @base", + "sub_path": "filament/JAYO/JAYO PLA Classic @base.json" + }, { "name": "NIT PLA @base", "sub_path": "filament/NIT/NIT PLA @base.json" @@ -1073,12 +845,12 @@ "sub_path": "filament/Generic PP @System.json" }, { - "name": "Generic PP-CF @System", - "sub_path": "filament/Generic PP-CF @System.json" + "name": "Generic PP-CF @base", + "sub_path": "filament/Generic PP-CF @base.json" }, { - "name": "Generic PP-GF @System", - "sub_path": "filament/Generic PP-GF @System.json" + "name": "Generic PP-GF @base", + "sub_path": "filament/Generic PP-GF @base.json" }, { "name": "Bambu PPA-CF @base", @@ -1145,8 +917,8 @@ "sub_path": "filament/DREMC/DREMC TPU 95A @base.json" }, { - "name": "Elegoo TPU @base", - "sub_path": "filament/Elegoo/Elegoo TPU @base.json" + "name": "Elegoo TPU 95A @base", + "sub_path": "filament/Elegoo/Elegoo TPU 95A @base.json" }, { "name": "Eolas Prints TPU D60 UV Resistant @System", @@ -1265,8 +1037,8 @@ "sub_path": "filament/Elegoo/Elegoo ASA @System.json" }, { - "name": "Elegoo ASA-CF @System", - "sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json" + "name": "Elegoo ASA-CF @base", + "sub_path": "filament/Elegoo/Elegoo ASA-CF @base.json" }, { "name": "Overture ASA @System", @@ -1357,13 +1129,17 @@ "sub_path": "filament/Elegoo/Elegoo PC @System.json" }, { - "name": "Elegoo PC-FR @System", - "sub_path": "filament/Elegoo/Elegoo PC-FR @System.json" + "name": "Elegoo PC-FR @base", + "sub_path": "filament/Elegoo/Elegoo PC-FR @base.json" }, { "name": "COEX PCTG PRIME @System", "sub_path": "filament/COEX/COEX PCTG PRIME @System.json" }, + { + "name": "Generic PE-CF @System", + "sub_path": "filament/Generic PE-CF @System.json" + }, { "name": "AliZ PETG @System", "sub_path": "filament/AliZ/AliZ PETG @System.json" @@ -1413,36 +1189,36 @@ "sub_path": "filament/Elas/Elas PETG Basic @System.json" }, { - "name": "Elegoo PET-CF @System", - "sub_path": "filament/Elegoo/Elegoo PET-CF @System.json" + "name": "Elegoo PET-CF @base", + "sub_path": "filament/Elegoo/Elegoo PET-CF @base.json" }, { "name": "Elegoo PETG @System", "sub_path": "filament/Elegoo/Elegoo PETG @System.json" }, { - "name": "Elegoo PETG HF @System", - "sub_path": "filament/Elegoo/Elegoo PETG HF @System.json" + "name": "Elegoo PETG HF @base", + "sub_path": "filament/Elegoo/Elegoo PETG HF @base.json" }, { - "name": "Elegoo PETG PRO @System", - "sub_path": "filament/Elegoo/Elegoo PETG PRO @System.json" + "name": "Elegoo PETG PRO @base", + "sub_path": "filament/Elegoo/Elegoo PETG PRO @base.json" }, { - "name": "Elegoo PETG Translucent @System", - "sub_path": "filament/Elegoo/Elegoo PETG Translucent @System.json" + "name": "Elegoo PETG Translucent @base", + "sub_path": "filament/Elegoo/Elegoo PETG Translucent @base.json" }, { - "name": "Elegoo PETG-CF @System", - "sub_path": "filament/Elegoo/Elegoo PETG-CF @System.json" + "name": "Elegoo PETG-CF @base", + "sub_path": "filament/Elegoo/Elegoo PETG-CF @base.json" }, { - "name": "Elegoo PETG-GF @System", - "sub_path": "filament/Elegoo/Elegoo PETG-GF @System.json" + "name": "Elegoo PETG-GF @base", + "sub_path": "filament/Elegoo/Elegoo PETG-GF @base.json" }, { - "name": "Elegoo Rapid PETG @System", - "sub_path": "filament/Elegoo/Elegoo Rapid PETG @System.json" + "name": "Elegoo Rapid PETG @base", + "sub_path": "filament/Elegoo/Elegoo Rapid PETG @base.json" }, { "name": "FDplast PETG @System", @@ -1468,10 +1244,90 @@ "name": "Fiberon PETG-rCF @System", "sub_path": "filament/Polymaker/Fiberon PETG-rCF @System.json" }, + { + "name": "FilAr PETG Amarillo Lima", + "sub_path": "filament/FilAr/FilAr PETG Amarillo Lima.json" + }, + { + "name": "FilAr PETG Amarillo Radiante", + "sub_path": "filament/FilAr/FilAr PETG Amarillo Radiante.json" + }, + { + "name": "FilAr PETG Azul Boreal", + "sub_path": "filament/FilAr/FilAr PETG Azul Boreal.json" + }, + { + "name": "FilAr PETG Azul Francia", + "sub_path": "filament/FilAr/FilAr PETG Azul Francia.json" + }, + { + "name": "FilAr PETG Azul Imperial", + "sub_path": "filament/FilAr/FilAr PETG Azul Imperial.json" + }, + { + "name": "FilAr PETG Blanco Antartida", + "sub_path": "filament/FilAr/FilAr PETG Blanco Antartida.json" + }, + { + "name": "FilAr PETG Cian", + "sub_path": "filament/FilAr/FilAr PETG Cian.json" + }, + { + "name": "FilAr PETG Coral", + "sub_path": "filament/FilAr/FilAr PETG Coral.json" + }, + { + "name": "FilAr PETG Cristal", + "sub_path": "filament/FilAr/FilAr PETG Cristal.json" + }, + { + "name": "FilAr PETG Gris Ceniza", + "sub_path": "filament/FilAr/FilAr PETG Gris Ceniza.json" + }, + { + "name": "FilAr PETG Gris Plata", + "sub_path": "filament/FilAr/FilAr PETG Gris Plata.json" + }, + { + "name": "FilAr PETG Magenta", + "sub_path": "filament/FilAr/FilAr PETG Magenta.json" + }, + { + "name": "FilAr PETG Negro Azabache", + "sub_path": "filament/FilAr/FilAr PETG Negro Azabache.json" + }, + { + "name": "FilAr PETG Rojo Carmesi", + "sub_path": "filament/FilAr/FilAr PETG Rojo Carmesi.json" + }, + { + "name": "Generic PETG HF @System", + "sub_path": "filament/Generic PETG HF @System.json" + }, + { + "name": "Generic PETG-CF @System", + "sub_path": "filament/Generic PETG-CF @System.json" + }, { "name": "GreenGate3D PETG @System", "sub_path": "filament/GreenGate3D/GreenGate3D PETG @System.json" }, + { + "name": "JAYO PETG @BBL A1 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PETG @BBL A1 0.4 nozzle.json" + }, + { + "name": "JAYO PETG @BBL P2S 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PETG @BBL P2S 0.4 nozzle.json" + }, + { + "name": "JAYO PETG @Creality K2 Pro 0.4 nozzle", + "sub_path": "filament/JAYO/Creality/JAYO PETG @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "JAYO PETG @System", + "sub_path": "filament/JAYO/JAYO PETG @System.json" + }, { "name": "NIT PETG @System", "sub_path": "filament/NIT/NIT PETG @System.json" @@ -1593,56 +1449,56 @@ "sub_path": "filament/Elegoo/Elegoo PLA @System.json" }, { - "name": "Elegoo PLA Basic @System", - "sub_path": "filament/Elegoo/Elegoo PLA Basic @System.json" + "name": "Elegoo PLA Basic @base", + "sub_path": "filament/Elegoo/Elegoo PLA Basic @base.json" }, { - "name": "Elegoo PLA Galaxy @System", - "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @System.json" + "name": "Elegoo PLA Galaxy @base", + "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @base.json" }, { - "name": "Elegoo PLA Glow @System", - "sub_path": "filament/Elegoo/Elegoo PLA Glow @System.json" + "name": "Elegoo PLA Glow @base", + "sub_path": "filament/Elegoo/Elegoo PLA Glow @base.json" }, { - "name": "Elegoo PLA Marble @System", - "sub_path": "filament/Elegoo/Elegoo PLA Marble @System.json" + "name": "Elegoo PLA Marble @base", + "sub_path": "filament/Elegoo/Elegoo PLA Marble @base.json" }, { - "name": "Elegoo PLA Matte @System", - "sub_path": "filament/Elegoo/Elegoo PLA Matte @System.json" + "name": "Elegoo PLA Matte @base", + "sub_path": "filament/Elegoo/Elegoo PLA Matte @base.json" }, { - "name": "Elegoo PLA PRO @System", - "sub_path": "filament/Elegoo/Elegoo PLA PRO @System.json" + "name": "Elegoo PLA PRO @base", + "sub_path": "filament/Elegoo/Elegoo PLA PRO @base.json" }, { - "name": "Elegoo PLA Silk @System", - "sub_path": "filament/Elegoo/Elegoo PLA Silk @System.json" + "name": "Elegoo PLA Silk @base", + "sub_path": "filament/Elegoo/Elegoo PLA Silk @base.json" }, { - "name": "Elegoo PLA Sparkle @System", - "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @System.json" + "name": "Elegoo PLA Sparkle @base", + "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @base.json" }, { - "name": "Elegoo PLA Translucent2 @System", - "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @System.json" + "name": "Elegoo PLA Translucent2 @base", + "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @base.json" }, { - "name": "Elegoo PLA Wood @System", - "sub_path": "filament/Elegoo/Elegoo PLA Wood @System.json" + "name": "Elegoo PLA Wood @base", + "sub_path": "filament/Elegoo/Elegoo PLA Wood @base.json" }, { - "name": "Elegoo PLA+ @System", - "sub_path": "filament/Elegoo/Elegoo PLA+ @System.json" + "name": "Elegoo PLA+ @base", + "sub_path": "filament/Elegoo/Elegoo PLA+ @base.json" }, { - "name": "Elegoo PLA-CF @System", - "sub_path": "filament/Elegoo/Elegoo PLA-CF @System.json" + "name": "Elegoo PLA-CF @base", + "sub_path": "filament/Elegoo/Elegoo PLA-CF @base.json" }, { - "name": "Elegoo Rapid PLA+ @System", - "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json" + "name": "Elegoo Rapid PLA+ @base", + "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @base.json" }, { "name": "FDplast PLA @System", @@ -1656,6 +1512,226 @@ "name": "FILL3D PLA Turbo @System", "sub_path": "filament/FILL3D/FILL3D PLA Turbo @System.json" }, + { + "name": "FilAr PLA Amarillo Lirio", + "sub_path": "filament/FilAr/FilAr PLA Amarillo Lirio.json" + }, + { + "name": "FilAr PLA Azul Francia", + "sub_path": "filament/FilAr/FilAr PLA Azul Francia.json" + }, + { + "name": "FilAr PLA Blanco Antartida", + "sub_path": "filament/FilAr/FilAr PLA Blanco Antartida.json" + }, + { + "name": "FilAr PLA Blanco Calido", + "sub_path": "filament/FilAr/FilAr PLA Blanco Calido.json" + }, + { + "name": "FilAr PLA Bronce", + "sub_path": "filament/FilAr/FilAr PLA Bronce.json" + }, + { + "name": "FilAr PLA Cafe con Leche", + "sub_path": "filament/FilAr/FilAr PLA Cafe con Leche.json" + }, + { + "name": "FilAr PLA Carpincho", + "sub_path": "filament/FilAr/FilAr PLA Carpincho.json" + }, + { + "name": "FilAr PLA Celeste Cielo", + "sub_path": "filament/FilAr/FilAr PLA Celeste Cielo.json" + }, + { + "name": "FilAr PLA Cobre", + "sub_path": "filament/FilAr/FilAr PLA Cobre.json" + }, + { + "name": "FilAr PLA Dorado", + "sub_path": "filament/FilAr/FilAr PLA Dorado.json" + }, + { + "name": "FilAr PLA Gris Ceniza", + "sub_path": "filament/FilAr/FilAr PLA Gris Ceniza.json" + }, + { + "name": "FilAr PLA Gris Pizarra", + "sub_path": "filament/FilAr/FilAr PLA Gris Pizarra.json" + }, + { + "name": "FilAr PLA Gris Plata", + "sub_path": "filament/FilAr/FilAr PLA Gris Plata.json" + }, + { + "name": "FilAr PLA Manteca", + "sub_path": "filament/FilAr/FilAr PLA Manteca.json" + }, + { + "name": "FilAr PLA Marron Oxido", + "sub_path": "filament/FilAr/FilAr PLA Marron Oxido.json" + }, + { + "name": "FilAr PLA Naranja Tigre", + "sub_path": "filament/FilAr/FilAr PLA Naranja Tigre.json" + }, + { + "name": "FilAr PLA Negro Azabache", + "sub_path": "filament/FilAr/FilAr PLA Negro Azabache.json" + }, + { + "name": "FilAr PLA Oro", + "sub_path": "filament/FilAr/FilAr PLA Oro.json" + }, + { + "name": "FilAr PLA Piel", + "sub_path": "filament/FilAr/FilAr PLA Piel.json" + }, + { + "name": "FilAr PLA Rojo de Carreras", + "sub_path": "filament/FilAr/FilAr PLA Rojo de Carreras.json" + }, + { + "name": "FilAr PLA Rosa Amaranto", + "sub_path": "filament/FilAr/FilAr PLA Rosa Amaranto.json" + }, + { + "name": "FilAr PLA Rosa Flamenco", + "sub_path": "filament/FilAr/FilAr PLA Rosa Flamenco.json" + }, + { + "name": "FilAr PLA Tabaco", + "sub_path": "filament/FilAr/FilAr PLA Tabaco.json" + }, + { + "name": "FilAr PLA Titanio", + "sub_path": "filament/FilAr/FilAr PLA Titanio.json" + }, + { + "name": "FilAr PLA Verde FilAr", + "sub_path": "filament/FilAr/FilAr PLA Verde FilAr.json" + }, + { + "name": "FilAr PLA Verde Manzana", + "sub_path": "filament/FilAr/FilAr PLA Verde Manzana.json" + }, + { + "name": "FilAr PLA Verde Oliva", + "sub_path": "filament/FilAr/FilAr PLA Verde Oliva.json" + }, + { + "name": "FilAr PLA Verde Pixel", + "sub_path": "filament/FilAr/FilAr PLA Verde Pixel.json" + }, + { + "name": "FilAr PLA Violeta Jacaranda", + "sub_path": "filament/FilAr/FilAr PLA Violeta Jacaranda.json" + }, + { + "name": "FilAr PLA-mate Amarillo", + "sub_path": "filament/FilAr/FilAr PLA-mate Amarillo.json" + }, + { + "name": "FilAr PLA-mate Azul", + "sub_path": "filament/FilAr/FilAr PLA-mate Azul.json" + }, + { + "name": "FilAr PLA-mate Beige", + "sub_path": "filament/FilAr/FilAr PLA-mate Beige.json" + }, + { + "name": "FilAr PLA-mate Blanco", + "sub_path": "filament/FilAr/FilAr PLA-mate Blanco.json" + }, + { + "name": "FilAr PLA-mate Bordo", + "sub_path": "filament/FilAr/FilAr PLA-mate Bordo.json" + }, + { + "name": "FilAr PLA-mate Celeste Cielo", + "sub_path": "filament/FilAr/FilAr PLA-mate Celeste Cielo.json" + }, + { + "name": "FilAr PLA-mate Chocolate", + "sub_path": "filament/FilAr/FilAr PLA-mate Chocolate.json" + }, + { + "name": "FilAr PLA-mate Gris", + "sub_path": "filament/FilAr/FilAr PLA-mate Gris.json" + }, + { + "name": "FilAr PLA-mate Marron", + "sub_path": "filament/FilAr/FilAr PLA-mate Marron.json" + }, + { + "name": "FilAr PLA-mate Naranja", + "sub_path": "filament/FilAr/FilAr PLA-mate Naranja.json" + }, + { + "name": "FilAr PLA-mate Negro", + "sub_path": "filament/FilAr/FilAr PLA-mate Negro.json" + }, + { + "name": "FilAr PLA-mate Piel", + "sub_path": "filament/FilAr/FilAr PLA-mate Piel.json" + }, + { + "name": "FilAr PLA-mate Rojo", + "sub_path": "filament/FilAr/FilAr PLA-mate Rojo.json" + }, + { + "name": "FilAr PLA-mate Rosa", + "sub_path": "filament/FilAr/FilAr PLA-mate Rosa.json" + }, + { + "name": "FilAr PLA-mate Uva", + "sub_path": "filament/FilAr/FilAr PLA-mate Uva.json" + }, + { + "name": "FilAr PLA-mate Verde", + "sub_path": "filament/FilAr/FilAr PLA-mate Verde.json" + }, + { + "name": "FilAr PLA-mate Violeta", + "sub_path": "filament/FilAr/FilAr PLA-mate Violeta.json" + }, + { + "name": "Generic PLA Matte @System", + "sub_path": "filament/Generic PLA Matte @System.json" + }, + { + "name": "JAYO PLA @BBL A1 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PLA @BBL A1 0.4 nozzle.json" + }, + { + "name": "JAYO PLA @BBL P2S 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PLA @BBL P2S 0.4 nozzle.json" + }, + { + "name": "JAYO PLA @Creality K2 Pro 0.4 nozzle", + "sub_path": "filament/JAYO/Creality/JAYO PLA @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "JAYO PLA @System", + "sub_path": "filament/JAYO/JAYO PLA @System.json" + }, + { + "name": "JAYO PLA Classic @BBL A1 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PLA Classic @BBL A1 0.4 nozzle.json" + }, + { + "name": "JAYO PLA Classic @BBL P2S 0.4 nozzle", + "sub_path": "filament/JAYO/BBL/JAYO PLA Classic @BBL P2S 0.4 nozzle.json" + }, + { + "name": "JAYO PLA Classic @Creality K2 Pro 0.4 nozzle", + "sub_path": "filament/JAYO/Creality/JAYO PLA Classic @Creality K2 Pro 0.4 nozzle.json" + }, + { + "name": "JAYO PLA Classic @System", + "sub_path": "filament/JAYO/JAYO PLA Classic @System.json" + }, { "name": "NIT PLA @System", "sub_path": "filament/NIT/NIT PLA @System.json" @@ -1761,8 +1837,8 @@ "sub_path": "filament/Polymaker/Panchroma PLA UV Shift @System.json" }, { - "name": "PolyLite Dual PLA @System", - "sub_path": "filament/Polymaker/PolyLite Dual PLA @System.json" + "name": "PolyLite Dual PLA @base", + "sub_path": "filament/Polymaker/PolyLite Dual PLA @base.json" }, { "name": "PolyLite PLA @System", @@ -1860,6 +1936,14 @@ "name": "FILL3D PPCF @System", "sub_path": "filament/FILL3D/FILL3D PPCF @System.json" }, + { + "name": "Generic PP-CF @System", + "sub_path": "filament/Generic PP-CF @System.json" + }, + { + "name": "Generic PP-GF @System", + "sub_path": "filament/Generic PP-GF @System.json" + }, { "name": "Bambu PPA-CF @System", "sub_path": "filament/Bambu/Bambu PPA-CF @System.json" @@ -1905,8 +1989,8 @@ "sub_path": "filament/DREMC/DREMC TPU 95A @System.json" }, { - "name": "Elegoo Rapid TPU 95A @System", - "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json" + "name": "Elegoo Rapid TPU 95A @base", + "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @base.json" }, { "name": "Elegoo TPU 95A @System", @@ -1920,6 +2004,14 @@ "name": "Overture TPU @System", "sub_path": "filament/Overture/Overture TPU @System.json" }, + { + "name": "Elegoo ASA-CF @System", + "sub_path": "filament/Elegoo/Elegoo ASA-CF @System.json" + }, + { + "name": "Elegoo PC-FR @System", + "sub_path": "filament/Elegoo/Elegoo PC-FR @System.json" + }, { "name": "AliZ PETG-CF @System", "sub_path": "filament/AliZ/AliZ PETG-CF @System.json" @@ -1928,9 +2020,97 @@ "name": "AliZ PETG-Metal @System", "sub_path": "filament/AliZ/AliZ PETG-Metal @System.json" }, + { + "name": "Elegoo PET-CF @System", + "sub_path": "filament/Elegoo/Elegoo PET-CF @System.json" + }, + { + "name": "Elegoo PETG HF @System", + "sub_path": "filament/Elegoo/Elegoo PETG HF @System.json" + }, + { + "name": "Elegoo PETG PRO @System", + "sub_path": "filament/Elegoo/Elegoo PETG PRO @System.json" + }, + { + "name": "Elegoo PETG Translucent @System", + "sub_path": "filament/Elegoo/Elegoo PETG Translucent @System.json" + }, + { + "name": "Elegoo PETG-CF @System", + "sub_path": "filament/Elegoo/Elegoo PETG-CF @System.json" + }, + { + "name": "Elegoo PETG-GF @System", + "sub_path": "filament/Elegoo/Elegoo PETG-GF @System.json" + }, + { + "name": "Elegoo Rapid PETG @System", + "sub_path": "filament/Elegoo/Elegoo Rapid PETG @System.json" + }, + { + "name": "Elegoo PLA Basic @System", + "sub_path": "filament/Elegoo/Elegoo PLA Basic @System.json" + }, + { + "name": "Elegoo PLA Galaxy @System", + "sub_path": "filament/Elegoo/Elegoo PLA Galaxy @System.json" + }, + { + "name": "Elegoo PLA Glow @System", + "sub_path": "filament/Elegoo/Elegoo PLA Glow @System.json" + }, + { + "name": "Elegoo PLA Marble @System", + "sub_path": "filament/Elegoo/Elegoo PLA Marble @System.json" + }, + { + "name": "Elegoo PLA Matte @System", + "sub_path": "filament/Elegoo/Elegoo PLA Matte @System.json" + }, + { + "name": "Elegoo PLA PRO @System", + "sub_path": "filament/Elegoo/Elegoo PLA PRO @System.json" + }, + { + "name": "Elegoo PLA Silk @System", + "sub_path": "filament/Elegoo/Elegoo PLA Silk @System.json" + }, + { + "name": "Elegoo PLA Sparkle @System", + "sub_path": "filament/Elegoo/Elegoo PLA Sparkle @System.json" + }, + { + "name": "Elegoo PLA Translucent2 @System", + "sub_path": "filament/Elegoo/Elegoo PLA Translucent2 @System.json" + }, + { + "name": "Elegoo PLA Wood @System", + "sub_path": "filament/Elegoo/Elegoo PLA Wood @System.json" + }, + { + "name": "Elegoo PLA+ @System", + "sub_path": "filament/Elegoo/Elegoo PLA+ @System.json" + }, + { + "name": "Elegoo PLA-CF @System", + "sub_path": "filament/Elegoo/Elegoo PLA-CF @System.json" + }, + { + "name": "Elegoo Rapid PLA+ @System", + "sub_path": "filament/Elegoo/Elegoo Rapid PLA+ @System.json" + }, + { + "name": "PolyLite Dual PLA @System", + "sub_path": "filament/Polymaker/PolyLite Dual PLA @System.json" + }, { "name": "COEX PLA+Silk @System", "sub_path": "filament/COEX/COEX PLA+Silk @System.json" + }, + { + "name": "Elegoo Rapid TPU 95A @System", + "sub_path": "filament/Elegoo/Elegoo Rapid TPU 95A @System.json" } ], "process_list": [], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json index 29d9f1c39c..22fcfceefa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PA-CF @base.json @@ -3,7 +3,7 @@ "name": "AliZ PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "AliZ003", + "filament_id": "OFd4zw5l", "instantiation": "false", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json index 463a0d954e..1796d82a77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "AliZ001", + "filament_id": "OFocyw69", "instantiation": "false", "close_fan_the_first_x_layers": [ "2" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json index ad96c2621f..5c5a0113d5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG-CF @base", "inherits": "AliZ PETG @base", "from": "system", - "filament_id": "AZ01-1", + "filament_id": "OFJOFnOZ", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json index f92cb73736..d6f9adc470 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PETG-Metal @base.json @@ -3,7 +3,7 @@ "name": "AliZ PETG-Metal @base", "inherits": "AliZ PETG @base", "from": "system", - "filament_id": "AZ01-2", + "filament_id": "OFOABq7t", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json index 6323f62cca..8bb139bdbb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/AliZ/AliZ PLA @base.json @@ -3,7 +3,7 @@ "name": "AliZ PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "AliZ002", + "filament_id": "OFyxayW4", "instantiation": "false", "enable_pressure_advance": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json index 6628007eef..62c2f3bc84 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB00", + "filament_id": "OFhuaUQB", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json index a34c88e45d..5cdd145c56 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB50", + "filament_id": "OFknl9Iz", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json index c06136e268..432f106879 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB01", + "filament_id": "OFfBpSRI", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json index 043335fe0d..8343f4f8cb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-Aero @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB02", + "filament_id": "OFXzQ4yL", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: ASA Aero Printing Guide.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json index 98d86450d2..66abe8195a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu ASA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu ASA-CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB51", + "filament_id": "OF0wBGNx", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json index f63213b0b1..00df3d58ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN03", + "filament_id": "OFFNYwWR", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json index 21d5b6c18b..578e30294c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN05", + "filament_id": "OFniMuTN", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json index cd54c4ac9b..c9eb830cad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN08", + "filament_id": "OFNk8bxk", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json index 9bde2b612b..a028b7f7dc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PAHT-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PAHT-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFN04", + "filament_id": "OF2VFe4J", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json index 577ae892f4..5ce775f0d0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OGFC00", + "filament_id": "OFKhMPeX", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json index 40527941a2..18c02b41a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PC FR @base.json @@ -3,7 +3,7 @@ "name": "Bambu PC FR @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OGFC01", + "filament_id": "OFg57Nmc", "instantiation": "false", "filament_cost": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json index c455832b9c..fe22a52a0a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFT01", + "filament_id": "OFHa48An", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json index 755f78cf08..117416a251 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG00", + "filament_id": "OFFvzqcd", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json index 7a829f34dc..ef4a817974 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG HF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG02", + "filament_id": "OFovEIbw", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json index 0026f408f2..09efd2d8b5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG Translucent @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG Translucent @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG01", + "filament_id": "OFwPrlCM", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json index 8112a1d025..89fe7b3dde 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PETG-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG50", + "filament_id": "OFTRZ8Y4", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json index 1f11ddcc54..1fb04ff6a9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Aero @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Aero @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA11", + "filament_id": "OFBSW57R", "instantiation": "false", "description": "This filament is only used to print models with a low density usually, and some special parameters are required. To get better printing quality, please refer to this wiki: Instructions for printing RC model with foaming PLA (PLA Aero).", "fan_min_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json index 379db35b99..d5614af65f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFoiVqVM", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json index abd30f6606..7b1290817d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Dynamic @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Dynamic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA13", + "filament_id": "OFDGigEI", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json index b52fc99f23..3ecc707ddf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA15", + "filament_id": "OFQ3e56w", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json index 9ab5d3b6ff..8395082e6d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA12", + "filament_id": "OFEkPBwx", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json index 11edaa9736..1ff6cb84cc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Impact @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Impact @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA03", + "filament_id": "OFTGHyNC", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json index 0f427b2047..0faa115520 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA07", + "filament_id": "OF9OlTWH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json index b1685a3aa1..ac7760f632 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA01", + "filament_id": "OFXIbw5D", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json index c24f1d8d9b..81a9c95c24 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA02", + "filament_id": "OFrKLeE3", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json index e4930ed9c3..f76daf5b77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA05", + "filament_id": "OFEGNJD4", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json index c4e44ff4ac..93e6e81148 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Silk+ @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Silk+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA06", + "filament_id": "OFUanySo", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json index 62ae9c7d6b..152b762069 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Sparkle @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Sparkle @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA08", + "filament_id": "OFDxfPgH", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json index d257a2bc53..a5aa15e8c1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Tough @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Tough @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA09", + "filament_id": "OFaQMgRH", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json index 3ebad53cd8..b9686af187 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA Wood @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA Wood @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA16", + "filament_id": "OFMjtqTC", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json index e5c0a31499..7bd37d40a4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA50", + "filament_id": "OFEswT5W", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json index 43b897ca86..8519203173 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "OGFN06", + "filament_id": "OF54B0S0", "instantiation": "false", "filament_vendor": [ "Bambu Lab" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json index d27c9164d1..b48f3b9300 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PPS-CF @base.json @@ -3,7 +3,7 @@ "name": "Bambu PPS-CF @base", "inherits": "fdm_filament_pps", "from": "system", - "filament_id": "OGFT02", + "filament_id": "OF4RvVuU", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "fan_max_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json index 8b73770499..1c6e0f2201 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu PVA @base.json @@ -3,7 +3,7 @@ "name": "Bambu PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "OGFS04", + "filament_id": "OFzyIxba", "instantiation": "false", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json index 2662d49840..7adbcb812d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PA PET @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PA/PET @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFS03", + "filament_id": "OFMTK0UC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json index 68d2468a07..9511f5c0cd 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS02", + "filament_id": "OFAnyRUI", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json index 1dea20d081..63802d3794 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support For PLA-PETG @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support For PLA/PETG @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS05", + "filament_id": "OFIfnzxC", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json index 5b7ce7f02b..35cc03e9b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support G @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support G @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFS01", + "filament_id": "OFQHiNJs", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_cooling_layer_time": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json index 2e1f1429c1..a922afd83e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support W @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support W @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFS00", + "filament_id": "OFsHSVZc", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json index bf714a0352..b844ac16c7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu Support for ABS @base.json @@ -3,7 +3,7 @@ "name": "Bambu Support for ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFS06", + "filament_id": "OFf6mfQO", "instantiation": "false", "description": "This is a non-water-soluble support filament, and usually it is only for the support structure and not for the model body. To get better printing quality, please refer to this wiki: Printing Tips for Support Filament and Support Function.", "fan_max_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json index a79d6a575e..5b71c52f81 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OGFU01", + "filament_id": "OFVCkX5w", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json index 00bef8980a..95263eb4ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Bambu/Bambu TPU 95A HF @base.json @@ -3,7 +3,7 @@ "name": "Bambu TPU 95A HF @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "OGFU00", + "filament_id": "OFvKUnLh", "instantiation": "false", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json index 201d230ad3..36849ed63d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS @base.json @@ -3,7 +3,7 @@ "name": "COEX ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "CXABSB01", + "filament_id": "OF99UMPq", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -23,12 +23,6 @@ "nozzle_temperature_initial_layer": [ "255" ], - "bed_temperature": [ - "100" - ], - "bed_temperature_initial_layer": [ - "100" - ], "temperature_vitrification": [ "100" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json index 08c5edfc25..833356e37a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ABS PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX ABS PRIME @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "CXABPB09", + "filament_id": "OFuWCQXN", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -23,12 +23,6 @@ "nozzle_temperature_initial_layer": [ "255" ], - "bed_temperature": [ - "100" - ], - "bed_temperature_initial_layer": [ - "100" - ], "temperature_vitrification": [ "100" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json index b5c2b540be..207c17790d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX ASA PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX ASA PRIME @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "CXASAB04", + "filament_id": "OFtpXCCv", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "265" ], - "bed_temperature": [ - "100" - ], - "bed_temperature_initial_layer": [ - "100" - ], "temperature_vitrification": [ "95" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json index 807e723f78..cc924787f8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "COEX NYLEX PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "CXPACB23", + "filament_id": "OF0NgY1y", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -23,12 +23,6 @@ "nozzle_temperature_initial_layer": [ "285" ], - "bed_temperature": [ - "100" - ], - "bed_temperature_initial_layer": [ - "100" - ], "temperature_vitrification": [ "170" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json index 34c323d800..504c6dde2b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX NYLEX UNFILLED @base.json @@ -3,7 +3,7 @@ "name": "COEX NYLEX UNFILLED @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "CXPAUB21", + "filament_id": "OFJs1ToM", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -23,12 +23,6 @@ "nozzle_temperature_initial_layer": [ "260" ], - "bed_temperature": [ - "100" - ], - "bed_temperature_initial_layer": [ - "100" - ], "temperature_vitrification": [ "100" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json index acecaf1737..f15437f295 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PCTG PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX PCTG PRIME @base", "inherits": "fdm_filament_pctg", "from": "system", - "filament_id": "CXPCTB15", + "filament_id": "OFwu7IAG", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "275" ], - "bed_temperature": [ - "80" - ], - "bed_temperature_initial_layer": [ - "85" - ], "temperature_vitrification": [ "80" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json index 09c882e777..39afcd6759 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PETG @base.json @@ -3,7 +3,7 @@ "name": "COEX PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "CXPETB13", + "filament_id": "OFvTVZc3", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "250" ], - "bed_temperature": [ - "80" - ], - "bed_temperature_initial_layer": [ - "85" - ], "temperature_vitrification": [ "70" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json index faabeaea75..cc9b7f8e54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "CXPLAB02", + "filament_id": "OFhlCNqq", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -23,12 +23,6 @@ "nozzle_temperature_initial_layer": [ "235" ], - "bed_temperature": [ - "60" - ], - "bed_temperature_initial_layer": [ - "60" - ], "temperature_vitrification": [ "55" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json index d2423972a7..b2cc99d390 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA PRIME @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA PRIME @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "CXPLAB08", + "filament_id": "OFd2vX0G", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "240" ], - "bed_temperature": [ - "60" - ], - "bed_temperature_initial_layer": [ - "60" - ], "temperature_vitrification": [ "60" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json index 40a9e1eb05..d5c9a7a87d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX PLA+Silk @base.json @@ -3,7 +3,7 @@ "name": "COEX PLA+Silk @base", "inherits": "fdm_filament_pla_silk", "from": "system", - "filament_id": "CXPLSB03", + "filament_id": "OF0pzFLc", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "245" ], - "bed_temperature": [ - "60" - ], - "bed_temperature_initial_layer": [ - "60" - ], "temperature_vitrification": [ "55" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json index 4f1f540a5f..35e3c75bc3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 30D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 30D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX30DB20", + "filament_id": "OFVptRxp", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "240" ], - "bed_temperature": [ - "30" - ], - "bed_temperature_initial_layer": [ - "35" - ], "temperature_vitrification": [ "60" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json index 6130ef11b2..b6f622635f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 40D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 40D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX40DB20", + "filament_id": "OFfnXFie", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "240" ], - "bed_temperature": [ - "30" - ], - "bed_temperature_initial_layer": [ - "35" - ], "temperature_vitrification": [ "60" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json index 0ab5886963..d1c1d2963f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPE 60D @base.json @@ -3,7 +3,7 @@ "name": "COEX TPE 60D @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX60DB19", + "filament_id": "OFfr4XNO", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "240" ], - "bed_temperature": [ - "30" - ], - "bed_temperature_initial_layer": [ - "35" - ], "temperature_vitrification": [ "60" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json index a4b0ebce09..0338bb2929 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/COEX/COEX TPU 60A @base.json @@ -3,7 +3,7 @@ "name": "COEX TPU 60A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "CX60AB17", + "filament_id": "OFE0NFRh", "instantiation": "false", "filament_vendor": [ "COEX 3D" @@ -24,12 +24,6 @@ "nozzle_temperature_initial_layer": [ "225" ], - "bed_temperature": [ - "0" - ], - "bed_temperature_initial_layer": [ - "0" - ], "temperature_vitrification": [ "60" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json index b4835fdeca..fbd2a32e8f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC003", + "filament_id": "OFzrUUxc", "instantiation": "false", "filament_cost": [ "24" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json index f9b2cd2c40..6817351573 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS+ @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC004", + "filament_id": "OF99vXPs", "instantiation": "false", "filament_cost": [ "24" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json index b5917c922e..046a015930 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ABS-GF @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "DREMC009", + "filament_id": "OFCidU7j", "instantiation": "false", "fan_cooling_layer_time": [ "12" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json index 324e484437..5e5e96b148 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC005", + "filament_id": "OFLNgV3C", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json index b15fa0f629..ef6c3bc7b5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA CF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC012", + "filament_id": "OFdI4zMo", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json index 11f4e56de4..b916335f2f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @base.json @@ -3,7 +3,7 @@ "name": "DREMC ASA GF @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "DREMC013", + "filament_id": "OF2xccEe", "instantiation": "false", "eng_plate_temp": [ "110" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json index aee897f402..3482ecedf6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "DREMC007", + "filament_id": "OFEhuUNq", "instantiation": "false", "fan_cooling_layer_time": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json index 7d693fc142..fe5ef518a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "DREMC006", + "filament_id": "OFsoykbm", "instantiation": "false", "fan_cooling_layer_time": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json index cc568e5ad6..9f7d27a1a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "DREMC008", + "filament_id": "OFwJ0qu2", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json index 840e0104f3..c67e185527 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @base.json @@ -3,7 +3,7 @@ "name": "DREMC PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "DREMC002", + "filament_id": "OFVBlUFH", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json index cb2f3e166d..1d7f1b47af 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @base.json @@ -3,7 +3,7 @@ "name": "DREMC PLA+ HS @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "DREMC011", + "filament_id": "OFJHBEGD", "instantiation": "false", "filament_cost": [ "26" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json index 698712e1dd..b989f6d59d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @base.json @@ -3,7 +3,7 @@ "name": "DREMC PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "DREMC001", + "filament_id": "OFSwbBWS", "instantiation": "false", "filament_cost": [ "26" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json index ec5cecd565..6a696177e7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PPA-CF @base.json @@ -3,7 +3,7 @@ "name": "DREMC PPA-CF @base", "inherits": "fdm_filament_ppa", "from": "system", - "filament_id": "DREMC010", + "filament_id": "OFiWaoqD", "instantiation": "false", "filament_vendor": [ "DREMC" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json index ba17ff46a8..63d4669b47 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @base.json @@ -3,7 +3,7 @@ "name": "DREMC TPU 95A @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "DREMC010", + "filament_id": "OFYd5uS3", "instantiation": "false", "filament_cost": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json index b4da81db72..fbdb790d67 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas ASA @base.json @@ -3,7 +3,7 @@ "name": "Elas ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB01", + "filament_id": "OFCoRobU", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "activate_air_filtration": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json index 8b6db5d3ad..bfed01a139 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PETG Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PETG Basic @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG00", + "filament_id": "OFXTPuqV", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "complete_print_exhaust_fan_speed": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json index d3f34beb80..152ada6bb7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Basic @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFMuXBmO", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json index 41fd91f011..098cd6ea04 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elas/Elas PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Elas PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFA00", + "filament_id": "OFaYz8iE", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json index af0dad8787..539b56876e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ABS @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OEABSB00", + "filament_id": "OFxOHhZw", "instantiation": "false", "eng_plate_temp": [ "90" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json index da502cf7b6..64875346e3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OEASAB00", + "filament_id": "OFobDOW5", "instantiation": "false", "eng_plate_temp": [ "90" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json index 13266c87b5..13ef86c2d9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo ASA-CF @System", - "inherits": "Elegoo ASA @base", + "inherits": "Elegoo ASA-CF @base", "from": "system", "setting_id": "XT1aUl4pe9t0Ijwg", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json new file mode 100644 index 0000000000..155d6f8290 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo ASA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo ASA-CF @base", + "inherits": "Elegoo ASA @base", + "from": "system", + "filament_id": "OFryjl35", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json deleted file mode 100644 index dd444cd846..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT @base.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Elegoo PAHT @base", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "OEPAHTB0", - "instantiation": "false", - "activate_air_filtration": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_min_speed": [ - "50" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_vendor": [ - "Elegoo" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "45" - ], - "textured_plate_temp": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "additional_cooling_fan_speed": [ - "0" - ] -} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json index 7d22d28387..d07ac1dd64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PAHT-CF @System", - "inherits": "Elegoo PAHT @base", + "inherits": "Elegoo PAHT-CF @base", "from": "system", "setting_id": "S073oXCeOlTEqh6L", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json new file mode 100644 index 0000000000..7c3abd1cdd --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PAHT-CF @base.json @@ -0,0 +1,92 @@ +{ + "type": "filament", + "name": "Elegoo PAHT-CF @base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OF20kXr5", + "instantiation": "false", + "activate_air_filtration": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_min_speed": [ + "50" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_vendor": [ + "Elegoo" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "45" + ], + "textured_plate_temp": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json index b7a5a62eda..ca5be19aa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PC @base", "inherits": "fdm_filament_pc", "from": "system", - "filament_id": "OEPCB00", + "filament_id": "OFUyDDNv", "instantiation": "false", "filament_density": [ "1.25" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json index 1fecee514c..7d2ab85058 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PC-FR @System", - "inherits": "Elegoo PC @base", + "inherits": "Elegoo PC-FR @base", "from": "system", "setting_id": "JcopkaXZ7YyLjIcw", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json new file mode 100644 index 0000000000..91034fda41 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PC-FR @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PC-FR @base", + "inherits": "Elegoo PC @base", + "from": "system", + "filament_id": "OFlsTpJG", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json index 0c1c4265b7..b7191e482b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PET-CF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PET-CF @base", "from": "system", "setting_id": "oloKoC4Bs8dXatMU", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json new file mode 100644 index 0000000000..5f9561f5a9 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PET-CF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Elegoo PET-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFe98A1y", + "instantiation": "false", + "filament_type": [ + "PET-CF" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json index 997f38ed4d..dc50cbe0dc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OEPETGB0", + "filament_id": "OFLcd093", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json index 35b941684a..d912550c88 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG HF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG HF @base", "from": "system", "setting_id": "d6gNuzrG00SXvMth", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json new file mode 100644 index 0000000000..9645c4572f --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG HF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFlP3KWq", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json index c16448b1e4..aa30920b7c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG PRO @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG PRO @base", "from": "system", "setting_id": "fdfCAYQEoYa9DN6I", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json new file mode 100644 index 0000000000..ec604d722c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG PRO @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFOsHDnB", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json index 0346a8eef0..edb04a6dce 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG Translucent @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG Translucent @base", "from": "system", "setting_id": "80Auuv3K7l8IptF3", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json new file mode 100644 index 0000000000..2d7d0f9777 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG Translucent @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG Translucent @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OF6Ll8lK", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json index 81e5b99afc..03de8dad0f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-CF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-CF @base", "from": "system", "setting_id": "bXRJMaXxB3V49x7R", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json new file mode 100644 index 0000000000..60a643b2a3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-CF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFuUuIhR", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json index 48cd287ba6..f315756987 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PETG-GF @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo PETG-GF @base", "from": "system", "setting_id": "9NXaejLGh1VFX8bg", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json new file mode 100644 index 0000000000..3ff4b96375 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PETG-GF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PETG-GF @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFmveLWz", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json index 6b4622c0ed..45456ab6d8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA @base.json @@ -3,7 +3,7 @@ "name": "Elegoo PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OEPLAB00", + "filament_id": "OFvgE0Zh", "instantiation": "false", "fan_cooling_layer_time": [ "80" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json index cdff566915..15d6f46a3f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Basic @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Basic @base", "from": "system", "setting_id": "qHDFHECwAInvpuk2", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json new file mode 100644 index 0000000000..93c52a3382 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Basic @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Basic @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFm06H6V", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json index 6874695462..6fd7f8f606 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Galaxy @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Galaxy @base", "from": "system", "setting_id": "WXEEksjWsTbRyCPh", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json new file mode 100644 index 0000000000..a25fcf8daa --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Galaxy @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Galaxy @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFU1zPxE", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json index 1cd70e904b..9c4c2075b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Glow @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Glow @base", "from": "system", "setting_id": "yFdF2YmEMeCHiPxl", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json new file mode 100644 index 0000000000..a07012d83b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Glow @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Glow @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFjPXrXO", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json index 825a6c0dd9..755e42e758 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Marble @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Marble @base", "from": "system", "setting_id": "kq7NS8IhIV4cBI1C", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json new file mode 100644 index 0000000000..b8990a7c1b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Marble @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Marble @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFfuhviw", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json index e1361a4b5b..a05c57216e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Matte @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Matte @base", "from": "system", "setting_id": "UykE255l5V0oS0Ca", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json new file mode 100644 index 0000000000..0394308e99 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Matte @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFsB2lxm", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json index 3526f87a69..fbc18fac42 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA PRO @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA PRO @base", "from": "system", "setting_id": "62GiUVVZd8kx21vw", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json new file mode 100644 index 0000000000..731f5c5ca4 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA PRO @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA PRO @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OF1hznGB", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json index 475354ca02..79ae01da5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Silk @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Silk @base", "from": "system", "setting_id": "VkXguNj79KADxuYn", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json new file mode 100644 index 0000000000..e708794eea --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Silk @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Silk @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFXz7Mwx", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json index fc4070bbe7..c7c030ff5a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Sparkle @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Sparkle @base", "from": "system", "setting_id": "VwZIFCojZLQLPrI1", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json new file mode 100644 index 0000000000..cc292ac240 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Sparkle @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Sparkle @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFhcYzR8", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json index 178976527f..28993f13b4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Translucent2 @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Translucent2 @base", "from": "system", "setting_id": "q0koYRlO9X8xLXPM", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json new file mode 100644 index 0000000000..c0e2e23dfe --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Translucent2 @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Translucent2 @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFn1QaY3", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json index 3d6c95ed00..1e86976608 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA Wood @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA Wood @base", "from": "system", "setting_id": "pMgazYJG8tyTpAVE", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json new file mode 100644 index 0000000000..4e3362a5d3 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA Wood @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA Wood @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFWYtgCa", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json index b2bd83416d..2315cd2ac4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA+ @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA+ @base", "from": "system", "setting_id": "q7NpDtaD9dTq1HIZ", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json new file mode 100644 index 0000000000..f90355d85c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFBUIlZ7", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json index 4ec26c71ba..9b79f54799 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo PLA-CF @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo PLA-CF @base", "from": "system", "setting_id": "cYxM93L2KZBnAuWu", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json new file mode 100644 index 0000000000..4f4979d95f --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo PLA-CF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo PLA-CF @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFln72PT", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json index 92b7cb43ef..7fd3f8d160 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid PETG @System", - "inherits": "Elegoo PETG @base", + "inherits": "Elegoo Rapid PETG @base", "from": "system", "setting_id": "uUQSVOvP8tAaDqvB", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json new file mode 100644 index 0000000000..e328cf0a75 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PETG @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PETG @base", + "inherits": "Elegoo PETG @base", + "from": "system", + "filament_id": "OFLXvuMr", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json index f19e51bcf3..4f3ee82ced 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid PLA+ @System", - "inherits": "Elegoo PLA @base", + "inherits": "Elegoo Rapid PLA+ @base", "from": "system", "setting_id": "HZ4nP67iAG7a243e", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json new file mode 100644 index 0000000000..06fd489c41 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid PLA+ @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid PLA+ @base", + "inherits": "Elegoo PLA @base", + "from": "system", + "filament_id": "OFkhhUS0", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json index 2006a6494b..3d15ba541c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo Rapid TPU 95A @System", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo Rapid TPU 95A @base", "from": "system", "setting_id": "WXLuO112bsdM37MI", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json new file mode 100644 index 0000000000..3ffd591fdc --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo Rapid TPU 95A @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Elegoo Rapid TPU 95A @base", + "inherits": "Elegoo TPU 95A @base", + "from": "system", + "filament_id": "OF30Ftju", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json index fb4260fae0..020bb85945 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Elegoo TPU 95A @System", - "inherits": "Elegoo TPU @base", + "inherits": "Elegoo TPU 95A @base", "from": "system", "setting_id": "SLcn59fIZPDl2brJ", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json new file mode 100644 index 0000000000..4380ee77ce --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU 95A @base.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Elegoo TPU 95A @base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFqHQNoZ", + "instantiation": "false", + "filament_density": [ + "1.21" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "filament_vendor": [ + "Elegoo" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "additional_cooling_fan_speed": [ + "0" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json deleted file mode 100644 index 28b8c921a6..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/Elegoo/Elegoo TPU @base.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "filament", - "name": "Elegoo TPU @base", - "inherits": "fdm_filament_tpu", - "from": "system", - "filament_id": "OETPUB00", - "instantiation": "false", - "filament_density": [ - "1.21" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "filament_vendor": [ - "Elegoo" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "additional_cooling_fan_speed": [ - "0" - ] -} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json index 6d5dd368bf..09fe0e6298 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ABS @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP017", + "filament_id": "OFXCBZTA", "setting_id": "R1lkPc60BdFq6i2Z", "name": "Eolas Prints ABS @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json index 8446ca6746..263752abf1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints ASA @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP018", + "filament_id": "OFlSNkhc", "setting_id": "JFXFsEzqXxNqxnsL", "name": "Eolas Prints ASA @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json index 104dd1e567..9f1c691c30 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP010", + "filament_id": "OFhWhL1i", "setting_id": "u9fzEmHRAACOHT6J", "name": "Eolas Prints PETG @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json index 8e1aa05628..47245f3f54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP012", + "filament_id": "OFRiFnfQ", "setting_id": "BY3z4yKW9PQZwgto", "name": "Eolas Prints PETG Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json index 8c4c299849..749b37cb54 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PETG UV Resistant @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP011", + "filament_id": "OFx8Lmsd", "setting_id": "eexjO9xiesNROPCK", "name": "Eolas Prints PETG UV Resistant @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json index 9ce7087dd2..a9cbc62ed2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Antibacterial @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP008", + "filament_id": "OFkzr35f", "setting_id": "LAihILsSxo3djWjq", "name": "Eolas Prints PLA Antibacterial @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json index 2f7d92c799..7488530282 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA High Speed @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP005", + "filament_id": "OFvzvwCu", "setting_id": "5g69jS4PRY0PbXvI", "name": "Eolas Prints PLA High Speed @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json index 7200a7d631..c4c66400e4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 850 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP006", + "filament_id": "OFH2nN08", "setting_id": "jdjLUTsIovrt3UAF", "name": "Eolas Prints PLA INGEO 850 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json index 4df9130980..f8ae8e662c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA INGEO 870 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP007", + "filament_id": "OFPc4zVY", "setting_id": "AafBj7XbFWaNhKHu", "name": "Eolas Prints PLA INGEO 870 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json index 4b14da901c..9489d9f0f7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Matte @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP002", + "filament_id": "OFf5awy4", "setting_id": "7LiJHuwirgABvbUa", "name": "Eolas Prints PLA Matte @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json index dff734c96d..d6619b629c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Neon @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP004", + "filament_id": "OFrFBEfd", "setting_id": "sKgUBhF3VvETDkwg", "name": "Eolas Prints PLA Neon @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json index b2455b02e3..03c332daa0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Premium @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP001", + "filament_id": "OFtudokz", "setting_id": "O2Ur7FIG2YlVEyZp", "name": "Eolas Prints PLA Premium @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json index 1c3184da11..b59d6ebf3d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Silk @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP003", + "filament_id": "OFbP8zEO", "setting_id": "WN0GdqBsjhvnyDmG", "name": "Eolas Prints PLA Silk @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json index 90e0b8d2f4..22bb2af20a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints PLA Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP009", + "filament_id": "OFHfzQXo", "setting_id": "o3RoG3NGSBlyBkfZ", "name": "Eolas Prints PLA Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json index c7b9c26180..c2252c5df8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex 93A @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP013", + "filament_id": "OFhfd722", "setting_id": "bQPvp6BCMzcG8FOi", "name": "Eolas Prints TPU Flex 93A @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json index c5a9a84ac3..f6b85ebd29 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D53 @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP014", + "filament_id": "OFIegjmD", "setting_id": "XIFP4KMuMtXF5bjQ", "name": "Eolas Prints TPU Flex D53 @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json index 169d681f39..4fc33c0d64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Flex D60 UV Resistant @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP015", + "filament_id": "OFvVy7yo", "setting_id": "rJmsm0zjvsk9Dy0G", "name": "Eolas Prints TPU D60 UV Resistant @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json index f5cd2eb40c..31dd33a87d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Eolas Prints/Eolas Prints TPU Transition @System.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFSEP016", + "filament_id": "OFTOPcx0", "setting_id": "CM24KGoHLt0yLH93", "name": "Eolas Prints TPU Transition @System", "from": "system", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json index be5c677c64..644ba0b1b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast ABS @base.json @@ -3,7 +3,7 @@ "name": "FDplast ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "FDPLAST01", + "filament_id": "OFjorDcx", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json index 41563b6208..60e86f17eb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast HIPS @base.json @@ -3,7 +3,7 @@ "name": "FDplast HIPS @base", "inherits": "fdm_filament_hips", "from": "system", - "filament_id": "FDPLAST02", + "filament_id": "OFmJAd3A", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json index a1cdfe34fc..9087e8afa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PETG @base.json @@ -3,7 +3,7 @@ "name": "FDplast PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "FDPLAST03", + "filament_id": "OFfJSCzm", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json index c2ce9ccd38..e98c3d22fb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast PLA @base.json @@ -3,7 +3,7 @@ "name": "FDplast PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FDPLAST04", + "filament_id": "OFtr8eZw", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json index e396fee0fb..1ae33c2990 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast SBS @base.json @@ -3,7 +3,7 @@ "name": "FDplast SBS @base", "inherits": "fdm_filament_sbs", "from": "system", - "filament_id": "FDPLAST05", + "filament_id": "OFtRn8X8", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json index 4db983cd87..bf288f545b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FDplast/FDplast TPU @base.json @@ -3,7 +3,7 @@ "name": "FDplast TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "FDPLAST06", + "filament_id": "OFfmZrI3", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json index 64800fce25..bb8f8905e3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PA @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PA @base", "from": "system", - "filament_id": "FILL3D006", + "filament_id": "OFJNeELv", "instantiation": "false", "inherits": "fdm_filament_pa", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json index c310be8cb2..f0a0e32f26 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PETG @base", "from": "system", - "filament_id": "FILL3D003", + "filament_id": "OFQbjX3s", "instantiation": "false", "inherits": "fdm_filament_pet", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json index 38214eec2c..0d1dc4a737 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PETG CF @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PETG CF @base", "from": "system", - "filament_id": "FILL3D007", + "filament_id": "OFOiJfLM", "instantiation": "false", "inherits": "fdm_filament_pet", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json index 8f2ee4ddf8..13d29eaaa8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Basic @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PLA Basic @base", "from": "system", - "filament_id": "FILL3D002", + "filament_id": "OFDpW3J8", "instantiation": "false", "inherits": "fdm_filament_pla", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json index f5ec5f906a..38be0d7078 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PLA Turbo @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PLA Turbo @base", "from": "system", - "filament_id": "FILL3D001", + "filament_id": "OFoSknDB", "instantiation": "false", "inherits": "fdm_filament_pla", "adaptive_pressure_advance": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json index 9e74676e50..708e4c50ec 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PP @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PP @base", "from": "system", - "filament_id": "FILL3D004", + "filament_id": "OFPWPlSC", "instantiation": "false", "inherits": "fdm_filament_pp", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json index 813eb8faf2..6d6aaf9e34 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FILL3D/FILL3D PPCF @base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "FILL3D PPCF @base", "from": "system", - "filament_id": "FILL3D005", + "filament_id": "OFg8hMzT", "instantiation": "false", "inherits": "fdm_filament_pp", "filament_vendor": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json index 5195e151e3..340dc5da23 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG @base.json @@ -3,7 +3,7 @@ "name": "FilAr PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "FILARB03", + "filament_id": "OF5rnhjh", "instantiation": "false", "filament_type": [ "PETG" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json index f63b93f11f..b1284f1d3d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Lima.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "QuJY74Af8ssl9uuB", - "filament_id": "FILAR0047", + "filament_id": "OFt6e0US", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json index 75b1bda3c7..00e5af59a1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Amarillo Radiante.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "aFO2PDBIQqvNlH9p", - "filament_id": "FILAR0048", + "filament_id": "OF0Vtzaw", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json index ccb0abfbfe..cbed2c3aa7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Boreal.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "JQsOaH7Zcs0cLLPY", - "filament_id": "FILAR0049", + "filament_id": "OFNU9YIW", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json index 135bea1c45..f2d8c16a43 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Francia.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "O24dTvHOzlbikvmq", - "filament_id": "FILAR0050", + "filament_id": "OF44VYzK", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json index af4921a5a8..8c917d750a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Azul Imperial.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "JAUmcvfO2lnmxGj5", - "filament_id": "FILAR0051", + "filament_id": "OF2Z1nT5", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json index 19ece09a31..c2bd7f3368 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Blanco Antartida.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "dd4fL2ztjz4UiTaG", - "filament_id": "FILAR0052", + "filament_id": "OFsXQXbs", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json index cc9e4d7422..ac1d1be6fe 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cian.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "kQFbBS3nxU7M2yPa", - "filament_id": "FILAR0053", + "filament_id": "OFnejEt4", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json index 779c773a3e..9b3e380b57 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Coral.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "fspbgXmAOWjFBQqh", - "filament_id": "FILAR0054", + "filament_id": "OFysxCep", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json index 00b2b360f5..1e7c947bea 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Cristal.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "MnA2FnHdIuViwo41", - "filament_id": "FILAR0055", + "filament_id": "OFJQDUk3", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json index 194848d1bb..c20eb5fcad 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Ceniza.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "oYjDczRs4U1JdteC", - "filament_id": "FILAR0056", + "filament_id": "OFybzvQN", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json index bfba887890..93335c7951 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Gris Plata.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "eCJ5aFcQ00m97U35", - "filament_id": "FILAR0057", + "filament_id": "OFgpLTMR", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json index a7bb2ee141..5a8ac777f5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Magenta.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "CEOhwBE63SWwuh6P", - "filament_id": "FILAR0058", + "filament_id": "OFurdQxc", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json index 6e51c8b275..5cba6c4a02 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Negro Azabache.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "OPZin7y48ZEeiH8D", - "filament_id": "FILAR0059", + "filament_id": "OFq8gfS4", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json index dc573cba91..3ed33ea0f9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PETG Rojo Carmesi.json @@ -4,7 +4,7 @@ "inherits": "FilAr PETG @base", "from": "system", "setting_id": "ok1h38XzyQXPBIMM", - "filament_id": "FILAR0060", + "filament_id": "OFPbyOSk", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json index 04426a96ca..c5ed35c1f1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA @base.json @@ -3,7 +3,7 @@ "name": "FilAr PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FILARB01", + "filament_id": "OF4KsW72", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json index 6ba4cbfb87..1d6c41003b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Amarillo Lirio.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "sZEY2QrlLsDkgZin", - "filament_id": "FILAR0022", + "filament_id": "OF8aFWfQ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json index ffc1c97a5a..a2f84470c4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Azul Francia.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "kOF3UfqKVqWKFwiH", - "filament_id": "FILAR0026", + "filament_id": "OFnYVFk2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json index a5bfa7d2d2..e9d68452dc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Antartida.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "9KxtnS1WoUAgH323", - "filament_id": "FILAR0017", + "filament_id": "OFHAccHz", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json index 2f03fc3ce8..1166928647 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Blanco Calido.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "pAToQatK3PVTMHrW", - "filament_id": "FILAR0018", + "filament_id": "OFKTSiYF", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json index 58eafa2f7c..599c64038c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Bronce.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "bJuNDmVGIF0TXvkk", - "filament_id": "FILAR0001", + "filament_id": "OFWTRJ1K", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json index 3e98bc7ebf..b70feb22d4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cafe con Leche.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "vlPu3T66cQhIr5nl", - "filament_id": "FILAR0006", + "filament_id": "OFWwF7K7", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json index 276d339eae..bdb948112a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Carpincho.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "dNsCH2BVjuq3jrN7", - "filament_id": "FILAR0009", + "filament_id": "OFKWWgyp", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json index 9294b3e0d5..f0ca1c323c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Celeste Cielo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "baAQZuzRZD0nwmqH", - "filament_id": "FILAR0027", + "filament_id": "OFaDOaNt", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json index 4fd0d180f7..44402e7b5a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Cobre.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "BpYgVH5d3LOdib3U", - "filament_id": "FILAR0003", + "filament_id": "OFNemJM6", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json index 77c31289ff..fd25d70050 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Dorado.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "KHIdy0oNw9YYDNOD", - "filament_id": "FILAR0029", + "filament_id": "OF5P4jgA", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json index acd8b8c9a0..d09d053c53 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Ceniza.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "LBpWNtHWPyZi96wr", - "filament_id": "FILAR0025", + "filament_id": "OFIamQnD", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json index 1bf3af9593..c6809d1104 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Pizarra.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "SeePXOShT3cge6TS", - "filament_id": "FILAR0024", + "filament_id": "OFTlRzpe", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json index 1cb23756fb..3748c83352 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Gris Plata.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "B6HABCdHSblZS7lQ", - "filament_id": "FILAR0002", + "filament_id": "OFKKajh6", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json index 00dbe089e4..81c6eb5928 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Manteca.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "tR4io22VQO0J8UsV", - "filament_id": "FILAR0007", + "filament_id": "OFexaZU2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json index bcd1b5ffb4..452b48010d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Marron Oxido.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "r9eviTeCeTW4rLuz", - "filament_id": "FILAR0008", + "filament_id": "OFAt6ec0", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json index ca76d328c1..dd5475f0c6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Naranja Tigre.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "zLZxXa78e1oiYWSg", - "filament_id": "FILAR0020", + "filament_id": "OFKZ9skj", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json index 06082ff8c6..aaf06f8833 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Negro Azabache.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "glc7ip75qjodcceS", - "filament_id": "FILAR0019", + "filament_id": "OFgMWJ8T", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json index 9cb39d2135..03e171b525 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Oro.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "hCv43F2tNJagwzC7", - "filament_id": "FILAR0028", + "filament_id": "OF5nlfKY", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json index b18da8d2e8..4ae2924081 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Piel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "6ZwTYvV27Oj3l33v", - "filament_id": "FILAR0012", + "filament_id": "OFsDXRpS", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json index 516ceb83f9..95c3c870bc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rojo de Carreras.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "5dINxIgy0kMYYNDT", - "filament_id": "FILAR0021", + "filament_id": "OFaEesXQ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json index 512340cfdf..62763f36a5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Amaranto.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "wgxgJfhOa2ZPikRH", - "filament_id": "FILAR0010", + "filament_id": "OFPqX3x2", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json index afe39634fe..9fb203bb0c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Rosa Flamenco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "FhROwdLMSz3cyRZo", - "filament_id": "FILAR0011", + "filament_id": "OFZ4QbfK", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json index 05e71143ca..6925843d95 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Tabaco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "6ax7ka7LBHqhBigT", - "filament_id": "FILAR0005", + "filament_id": "OFjT9PkZ", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json index fe00512045..f7b823fe5b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Titanio.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "ZRedeSWJhUayeJLw", - "filament_id": "FILAR0004", + "filament_id": "OFQWIKbV", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json index da619c819a..e3355ffa43 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde FilAr.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "SYWoimklLqx5O2Xh", - "filament_id": "FILAR0013", + "filament_id": "OFvPPMxL", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json index ac3fae3303..46772cf083 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Manzana.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "FlPRrQEcKnVKwJDM", - "filament_id": "FILAR0014", + "filament_id": "OFdb8YNz", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json index a1e594b840..6fe74aa2f3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Oliva.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "eWAcT15sDLZeV2uS", - "filament_id": "FILAR0016", + "filament_id": "OFkoLUtR", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json index c6932f6b22..9068b293f2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Verde Pixel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "Z7toK1R2GuzHVgfo", - "filament_id": "FILAR0015", + "filament_id": "OFkGvN4d", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json index 819187e0fe..fa12bcc077 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA Violeta Jacaranda.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA @base", "from": "system", "setting_id": "4VO2Qb2cTXQ1TJv2", - "filament_id": "FILAR0023", + "filament_id": "OFP26zNb", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json index d012487eb7..729e9d7b9c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json @@ -3,7 +3,7 @@ "name": "FilAr PLA-mate @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "FILARB02", + "filament_id": "OFtOoWIj", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json index e6e4811b6c..98a2349ac1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Amarillo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "f8DPrkYuTUPJ3cru", - "filament_id": "FILAR0030", + "filament_id": "OFj3bTjw", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json index d752c69555..7688708656 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Azul.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "QMBocqysEed86R9y", - "filament_id": "FILAR0031", + "filament_id": "OF5vgi2G", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json index 3d4c2eb19a..2324dadcc5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Beige.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "XoilIv3HqpDTVRwv", - "filament_id": "FILAR0032", + "filament_id": "OFGcLA5R", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json index d08673007a..92f10acf51 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Blanco.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "xkotTQheAIUUhPd7", - "filament_id": "FILAR0033", + "filament_id": "OFtefokm", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json index 8277b74545..4018c1d710 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Bordo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "zV2dKrknk0ThDv36", - "filament_id": "FILAR0034", + "filament_id": "OFiDpM1B", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json index fadf1b26ff..ff47203106 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Celeste Cielo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "UZW4F0aVz1TqstYi", - "filament_id": "FILAR0035", + "filament_id": "OFqtx549", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json index f184b6be29..b67e57db85 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Chocolate.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "DdW1XKqqRuLM1cAd", - "filament_id": "FILAR0036", + "filament_id": "OFdzlrhi", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json index b2740bc3b4..445a44b1e4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Gris.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "6OtKg1UxWuNCqsZy", - "filament_id": "FILAR0037", + "filament_id": "OFGVwfK0", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json index b3190c28d9..aa411c3d77 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Marron.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "lKOXMY37q8WpMdBA", - "filament_id": "FILAR0038", + "filament_id": "OF8jh0Lk", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json index b3fabc3603..2c382c085d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Naranja.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "MabNpNP8G9RqEruP", - "filament_id": "FILAR0039", + "filament_id": "OFmaeU4a", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json index d46222cad5..7ec4105a25 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Negro.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "Jwrm1uuCo7UjvgWn", - "filament_id": "FILAR0040", + "filament_id": "OFufTAK9", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json index 49fd32c1ac..6635fe8b78 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Piel.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "ifbCS3WypTUa1JHr", - "filament_id": "FILAR0041", + "filament_id": "OFfZcoKr", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json index 63a280b0c4..bed097ad9a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rojo.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "ak2QX0IS74Nmtyex", - "filament_id": "FILAR0042", + "filament_id": "OFIBXa0k", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json index 78208657c8..1767674916 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Rosa.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "GrEXuL6TYue238MK", - "filament_id": "FILAR0043", + "filament_id": "OFausr3F", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json index 860ac8347d..0e5bb137e1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Uva.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "PK1CsK7AS1p1IJaR", - "filament_id": "FILAR0044", + "filament_id": "OFEZ449N", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json index 7f49cb138e..67fe0ebfee 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Verde.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "rsLi8jr62hHPgERG", - "filament_id": "FILAR0045", + "filament_id": "OFCjG251", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json index f60b17b69e..e842875905 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate Violeta.json @@ -4,7 +4,7 @@ "inherits": "FilAr PLA-mate @base", "from": "system", "setting_id": "z2Pk06JzY9Tr1WjQ", - "filament_id": "FILAR0046", + "filament_id": "OF2EK9F1", "instantiation": "true", "filament_vendor": [ "FilAr" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json index bb09f036ff..95a8fd47ea 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FusRock/FusRock ABS-GF @base.json @@ -3,7 +3,7 @@ "name": "FusRock ABS-GF @base", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR00", + "filament_id": "OFmn9NZL", "instantiation": "false", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials(https://wiki.fusrock.com).", "filament_extruder_variant": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json index fa4788b45a..e499fa3a73 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "W0LP8Ah5MHMzogvV", - "filament_id": "OGFB99", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json index a4e10439c2..f55ee5e239 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "bcsNcj4DzLb4K5zN", - "filament_id": "OGFB98", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json index 96c3dc4f34..7b34746bb2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic BVOH @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_bvoh", "from": "system", "setting_id": "oUpbqz3uzQqND5DG", + "filament_id": "OFo2UF2C", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json index dbf10cf3f5..60c330fc39 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic CoPE @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_cope", "from": "system", "setting_id": "KlHtaJU2GM0uaRGM", + "filament_id": "OFjt9en1", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json index 6caf96f6b1..646bef3f28 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic EVA @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_eva", "from": "system", "setting_id": "cFGhkhQKiFilQ9gZ", + "filament_id": "OFCD8qiU", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json index 44cedfc810..c4acb079be 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic HIPS @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_hips", "from": "system", "setting_id": "A7gedcxip65DXKuf", + "filament_id": "OFsFon5l", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json index 2cf8b79680..4bea15a407 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "9DoeedUBMRPSCyu2", - "filament_id": "OGFN99", + "filament_id": "OFg8ndtj", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json index cf01ddf65b..0e653e5529 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "rchW8WI6gcXuAE0V", - "filament_id": "OGFN98", + "filament_id": "OFQLcbps", "instantiation": "true", "filament_type": [ "PA-CF" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json index fd5c80443c..f84c7fe7b6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "LNjv9LwZnbu7ZASC", - "filament_id": "OGFC99", + "filament_id": "OFLakOUI", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json index 967c5627cb..41ff08bd5c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PCTG @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pctg", "from": "system", "setting_id": "21dhMVBuVwR2lzIX", + "filament_id": "OFu1evlr", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json index 844ee902df..210c48b77a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pe", "from": "system", "setting_id": "8HpfeTNwthJ7L0XE", + "filament_id": "OFPklMI1", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json index 27ee56eb4b..8013a04973 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PE-CF @System", - "inherits": "fdm_filament_pe", + "inherits": "Generic PE-CF @base", "from": "system", "setting_id": "prroSXONXxaahNkq", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json new file mode 100644 index 0000000000..53ca2e0f9d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PE-CF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PE-CF @base", + "inherits": "fdm_filament_pe", + "from": "system", + "filament_id": "OFd0Fv0k", + "instantiation": "false", + "filament_type": [ + "PE-CF" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json index 2eb975f56c..f6fb133324 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YiQZfhL6hH0giSHL", - "filament_id": "OGFG99", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json index 25cf20c304..63472f65a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG HF @System", - "inherits": "fdm_filament_pet", + "inherits": "Generic PETG HF @base", "from": "system", "setting_id": "wNH8CohYIh9y6ayx", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json new file mode 100644 index 0000000000..173f397a49 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG HF @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PETG HF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OF7lOgYF", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json index 30884cf5a0..aea01d2740 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PETG-CF @System", - "inherits": "fdm_filament_pet", + "inherits": "Generic PETG-CF @base", "from": "system", "setting_id": "aRVqy4a3X1UTIKem", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json new file mode 100644 index 0000000000..8bf644a26d --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG-CF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFoYSJKi", + "instantiation": "false", + "filament_type": [ + "PETG-CF" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json index dab5219261..c50840c55a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PHA @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pha", "from": "system", "setting_id": "kks2z4JbypqY68RW", + "filament_id": "OF74KeQR", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json index c018544fa5..7bf0a0e72b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "RcBNzytWgwRrwXXz", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json index 1880ca2b21..ccd8205595 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA High Speed @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "L9wOwDxavVR7vrL7", - "filament_id": "OGFL95", + "filament_id": "OFmpMwxS", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json index 39c71d0d62..2bb0e98e58 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PLA Matte @System", - "inherits": "fdm_filament_pla", + "inherits": "Generic PLA Matte @base", "from": "system", "setting_id": "RFs9eCKYOMUSmvZf", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json new file mode 100644 index 0000000000..7fed10e48e --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Matte @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PLA Matte @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFmY0l6t", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json index 700b80761f..3bee7ccde6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA Silk @System.json @@ -5,6 +5,7 @@ "inherits": "fdm_filament_pla_silk", "from": "system", "setting_id": "oPkXDCBrTQB3SRm4", + "filament_id": "OFesA6rF", "instantiation": "true", "filament_max_volumetric_speed": [ "7.5" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json index d6a80ed8ee..972ef33800 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "l2LkEql1SVH0iRqY", - "filament_id": "OGFL98", + "filament_id": "OFWbdGsC", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json index e2c16e704f..14e38bc340 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_pp", "from": "system", "setting_id": "yos4oScjK83JuXJV", + "filament_id": "OF1UNk9P", "instantiation": "true", "description": "This is neither a commonly used filament, nor one of Bambu filaments, and it varies a lot from brand to brand. So, it's highly recommended to ask its vendor for suitable profile before printing and adjust some parameters according to its performances.", "compatible_printers": [] diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json index a7c1bbff00..3f2ee9f3f0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PP-CF @System", - "inherits": "fdm_filament_pp", + "inherits": "Generic PP-CF @base", "from": "system", "setting_id": "TDHYN3fs5wwakgsM", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json new file mode 100644 index 0000000000..1852185476 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-CF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PP-CF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "OFXkm8q1", + "instantiation": "false", + "filament_type": [ + "PP-CF" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json index cf9ea7ace2..d9bedf9316 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @System.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Generic PP-GF @System", - "inherits": "fdm_filament_pp", + "inherits": "Generic PP-GF @base", "from": "system", "setting_id": "xfVrCZ7ySzkpdzX0", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json new file mode 100644 index 0000000000..958fbc75a6 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PP-GF @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PP-GF @base", + "inherits": "fdm_filament_pp", + "from": "system", + "filament_id": "OFsijjtH", + "instantiation": "false", + "filament_type": [ + "PP-GF" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json index a5fdd90f9c..99ee7acda7 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-CF @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "rZpVQIyltFNiQyW3", + "filament_id": "OF8tPByX", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json index 9ebf9cb656..3b5e1b7583 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PPA-GF @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_ppa", "from": "system", "setting_id": "yJCAFLt5wstMgMAY", - "filament_id": "OGFN96", + "filament_id": "OF8Tlg47", "instantiation": "true", "filament_max_volumetric_speed": [ "6" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json index e1cf8643d1..c6300423ba 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1dlLnJKh1HzQCZVJ", - "filament_id": "OGFS99", + "filament_id": "OFDvXujf", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json index 082c4dd4bf..cf5aa1a8f6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic SBS @System.json @@ -4,6 +4,7 @@ "inherits": "fdm_filament_sbs", "from": "system", "setting_id": "fjVWcIfxaOAZHNU1", + "filament_id": "OFhQfUQY", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json index be4543b662..c8ae9f2562 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json @@ -5,7 +5,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "D6O8IcmSe8WGqOvb", - "filament_id": "OGFU99", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json index 284c63ab9c..a0ba8360d6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/GreenGate3D/GreenGate3D PETG @base.json @@ -3,7 +3,7 @@ "name": "GreenGate3D PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFGG300", + "filament_id": "OFhMO9Kh", "instantiation": "false", "filament_cost": [ "32" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL A1 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL A1 0.4 nozzle.json new file mode 100644 index 0000000000..ef377a0d6f --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL A1 0.4 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "JAYO PETG @BBL A1 0.4 nozzle", + "inherits": "JAYO PETG @base", + "from": "system", + "setting_id": "9m8nar2jAEnOTwhU", + "instantiation": "true", + "cool_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "24" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "10" + ], + "filament_retraction_length": [ + "1" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL P2S 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL P2S 0.4 nozzle.json new file mode 100644 index 0000000000..fc70479c7b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PETG @BBL P2S 0.4 nozzle.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "JAYO PETG @BBL P2S 0.4 nozzle", + "inherits": "JAYO PETG @base", + "from": "system", + "setting_id": "KZg12UDorfV5jmJI", + "instantiation": "true", + "filament_extruder_variant": [ + "Direct Drive Standard", + "Direct Drive High Flow" + ], + "filament_flow_ratio": [ + "0.98", + "0.98" + ], + "filament_max_volumetric_speed": [ + "12", + "12" + ], + "nozzle_temperature": [ + "245", + "245" + ], + "nozzle_temperature_initial_layer": [ + "245", + "245" + ], + "slow_down_min_speed": [ + "20", + "20" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "fan_cooling_layer_time": [ + "25" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Bambu Lab P2S 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL A1 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL A1 0.4 nozzle.json new file mode 100644 index 0000000000..861bb28955 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL A1 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "JAYO PLA @BBL A1 0.4 nozzle", + "inherits": "JAYO PLA @base", + "from": "system", + "setting_id": "6VnENC38MC1HwyQA", + "instantiation": "true", + "nozzle_temperature_range_low": [ + "190" + ], + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL P2S 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL P2S 0.4 nozzle.json new file mode 100644 index 0000000000..a1218f23b1 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA @BBL P2S 0.4 nozzle.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "JAYO PLA @BBL P2S 0.4 nozzle", + "inherits": "JAYO PLA @base", + "from": "system", + "setting_id": "f9OSor47gg9FjuVf", + "instantiation": "true", + "filament_extruder_variant": [ + "Direct Drive Standard", + "Direct Drive High Flow" + ], + "filament_flow_ratio": [ + "0.98", + "0.98" + ], + "filament_max_volumetric_speed": [ + "12", + "12" + ], + "nozzle_temperature": [ + "215", + "215" + ], + "nozzle_temperature_initial_layer": [ + "215", + "215" + ], + "nozzle_temperature_range_low": [ + "205", + "205" + ], + "nozzle_temperature_range_high": [ + "240", + "240" + ], + "slow_down_min_speed": [ + "20", + "20" + ], + "filament_retraction_length": [ + "1", + "1" + ], + "compatible_printers": [ + "Bambu Lab P2S 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL A1 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL A1 0.4 nozzle.json new file mode 100644 index 0000000000..7a7f23f693 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL A1 0.4 nozzle.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "JAYO PLA Classic @BBL A1 0.4 nozzle", + "inherits": "JAYO PLA Classic @base", + "from": "system", + "setting_id": "amKVKH8dJNln2WY0", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab A1 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL P2S 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL P2S 0.4 nozzle.json new file mode 100644 index 0000000000..99363bed01 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/BBL/JAYO PLA Classic @BBL P2S 0.4 nozzle.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "JAYO PLA Classic @BBL P2S 0.4 nozzle", + "inherits": "JAYO PLA Classic @base", + "from": "system", + "setting_id": "WW1QNGbRWfWLg9iC", + "instantiation": "true", + "filament_extruder_variant": [ + "Direct Drive Standard", + "Direct Drive High Flow" + ], + "filament_flow_ratio": [ + "0.98", + "0.98" + ], + "filament_max_volumetric_speed": [ + "12", + "12" + ], + "nozzle_temperature": [ + "210", + "210" + ], + "nozzle_temperature_initial_layer": [ + "210", + "210" + ], + "nozzle_temperature_range_low": [ + "200", + "200" + ], + "nozzle_temperature_range_high": [ + "260", + "260" + ], + "filament_retraction_length": [ + "1", + "1" + ], + "compatible_printers": [ + "Bambu Lab P2S 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PETG @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PETG @Creality K2 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..96bce142a5 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PETG @Creality K2 Pro 0.4 nozzle.json @@ -0,0 +1,62 @@ +{ + "type": "filament", + "name": "JAYO PETG @Creality K2 Pro 0.4 nozzle", + "inherits": "JAYO PETG @base", + "from": "system", + "setting_id": "81AMZOJZu6FNGKpk", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "fan_cooling_layer_time": [ + "10.2" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "overhang_fan_speed": [ + "80" + ], + "overhang_fan_threshold": [ + "25%" + ], + "slow_down_layer_time": [ + "6.2" + ], + "slow_down_min_speed": [ + "20" + ], + "enable_pressure_advance": [ + "0" + ], + "pressure_advance": [ + "0.04" + ], + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA @Creality K2 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..77fddfb8c8 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA @Creality K2 Pro 0.4 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "JAYO PLA @Creality K2 Pro 0.4 nozzle", + "inherits": "JAYO PLA @base", + "from": "system", + "setting_id": "dvYYAzrhSdIbJM8G", + "instantiation": "true", + "nozzle_temperature_range_low": [ + "210" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA Classic @Creality K2 Pro 0.4 nozzle.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA Classic @Creality K2 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..b2bb849405 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/Creality/JAYO PLA Classic @Creality K2 Pro 0.4 nozzle.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "JAYO PLA Classic @Creality K2 Pro 0.4 nozzle", + "inherits": "JAYO PLA Classic @base", + "from": "system", + "setting_id": "f78wXFT7Z8gZayws", + "instantiation": "true", + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "cool_plate_temp": [ + "50" + ], + "cool_plate_temp_initial_layer": [ + "50" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_retract_before_wipe": [ + "90%" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "compatible_printers": [ + "Creality K2 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @System.json new file mode 100644 index 0000000000..32a7b22cca --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @System.json @@ -0,0 +1,9 @@ +{ + "type": "filament", + "name": "JAYO PETG @System", + "inherits": "JAYO PETG @base", + "from": "system", + "setting_id": "tkxNRVsdQV1k2uXR", + "instantiation": "true", + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @base.json new file mode 100644 index 0000000000..87b44cbcc7 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PETG @base.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "JAYO PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OF63bToB", + "instantiation": "false", + "filament_vendor": [ + "JAYO" + ], + "filament_density": [ + "1.27" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "fan_min_speed": [ + "60" + ], + "fan_max_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "95%" + ], + "slow_down_for_layer_cooling": [ + "1" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @System.json new file mode 100644 index 0000000000..659e7bc775 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @System.json @@ -0,0 +1,9 @@ +{ + "type": "filament", + "name": "JAYO PLA @System", + "inherits": "JAYO PLA @base", + "from": "system", + "setting_id": "Q1VCAQ9NyhyPpzT3", + "instantiation": "true", + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @base.json new file mode 100644 index 0000000000..1c33f020b2 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA @base.json @@ -0,0 +1,86 @@ +{ + "type": "filament", + "name": "JAYO PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFeUeunN", + "instantiation": "false", + "filament_vendor": [ + "JAYO" + ], + "filament_density": [ + "1.23" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "215" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "60" + ], + "fan_max_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_retraction_length": [ + "1" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @System.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @System.json new file mode 100644 index 0000000000..3824bc22fd --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @System.json @@ -0,0 +1,9 @@ +{ + "type": "filament", + "name": "JAYO PLA Classic @System", + "inherits": "JAYO PLA Classic @base", + "from": "system", + "setting_id": "ZOO4OqyocWZNsoEE", + "instantiation": "true", + "compatible_printers": [] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json new file mode 100644 index 0000000000..8c3406ca66 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/JAYO/JAYO PLA Classic @base.json @@ -0,0 +1,89 @@ +{ + "type": "filament", + "name": "JAYO PLA Classic @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OF4E0SLW", + "instantiation": "false", + "filament_vendor": [ + "JAYO" + ], + "filament_density": [ + "1.36" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "60" + ], + "fan_max_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "filament_retraction_length": [ + "1" + ], + "nozzle_temperature_range_low": [ + "200" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json index 78d2166f9e..8fb4f4c187 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT ABS @base.json @@ -3,7 +3,7 @@ "name": "NIT ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "NIT01", + "filament_id": "OFhWc5Bv", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json index 8e84b68607..2fd955a1b1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PETG @base.json @@ -3,7 +3,7 @@ "name": "NIT PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "NIT03", + "filament_id": "OFJu1XwK", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json index 89b6842010..ff541d0239 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/NIT/NIT PLA @base.json @@ -3,7 +3,7 @@ "name": "NIT PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "NIT02", + "filament_id": "OFwRJ4g0", "instantiation": "false", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json index c0c2c86585..818b181355 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Numakers/Numakers PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Numakers PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFNMK00", + "filament_id": "OFqGRZyH", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json index 3ceb467a61..5029f42e5d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ABS Basic @base.json @@ -3,7 +3,7 @@ "name": "Overture ABS Basic @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OVTABS08", + "filament_id": "OFDvqJ6n", "instantiation": "false", "description": "Overture ABS settings from https://overture3d.com/.", "activate_air_filtration": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json index 415bf9e6d1..31357aadf6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture ASA @base.json @@ -3,7 +3,7 @@ "name": "Overture ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFOT009", + "filament_id": "OFM91vZs", "instantiation": "false", "fan_cooling_layer_time": [ "45" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json index 98d390e9b8..89bcc0e585 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Air PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Air PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT006", + "filament_id": "OFcfQk4h", "instantiation": "false", "filament_cost": [ "27.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json index a0c11e0a81..d4388a6c90 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Easy PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Easy PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT003", + "filament_id": "OF1Pke8t", "instantiation": "false", "filament_cost": [ "17.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json index 3f4dd854a3..43d4abe1d8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Matte PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Matte PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL05", + "filament_id": "OFBw6eEG", "instantiation": "false", "filament_cost": [ "24.52" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json index 486d34d0e5..45ae0ba24b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL04", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_cost": [ "24.15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json index 80525e03b2..454c36e7b0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "Overture PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT001", + "filament_id": "OFxA1p01", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json index 3317a8e0a9..5027f3ac01 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Rock PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Rock PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT004", + "filament_id": "OFMZvH0z", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json index 0fd19a6323..ca1a187fe0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Silk PLA @base.json @@ -3,7 +3,7 @@ "name": "Overture Silk PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT002", + "filament_id": "OFGkyftV", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json index 0bab3f81f0..776367ba06 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture Super PLA+ @base.json @@ -3,7 +3,7 @@ "name": "Overture Super PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFOT005", + "filament_id": "OF2pj5l5", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json index bdc7f4e236..20ff507393 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Overture/Overture TPU @base.json @@ -3,7 +3,7 @@ "name": "Overture TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "GFOT008", + "filament_id": "OFcvKkrs", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json index 7b5740c1df..a5aa03bf9b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA12-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL52", + "filament_id": "OFX0ycRQ", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json index d96e531b0d..96b913c738 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL50", + "filament_id": "OFkOviHk", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json index b5e9c57851..607b1c8e00 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA6-GF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-GF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL51", + "filament_id": "OFwaYjL6", "instantiation": "false", "eng_plate_temp": [ "40" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json index 4fa1bd200d..3765f754f5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PA612-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "OGFL53", + "filament_id": "OFS2tn6G", "instantiation": "false", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json index 1e74b59930..6946d6e0a3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PET-CF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PET-CF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL54", + "filament_id": "OFHWSM21", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json index 500fac4037..11d2f9023f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-ESD @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json index 12cc822453..489e03bc64 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Fiberon PETG-rCF @base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-rCF @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFL55", + "filament_id": "OFk8t9mz", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json index d856da86cc..52f2ed96f4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma CoPE @base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json index 2c4f278387..94d7383fef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "filament_cost": [ "19.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json index 10c999c3a8..123ba02747 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Celestial @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json index 40ae42e78c..d98e119c0b 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json index c5219dea65..9a162062a3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Glow @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json index 48158b336a..a6f61c9e5f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Luminous @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json index 11954166b9..e514df6f78 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Marble @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "filament_cost": [ "21.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json index 6e965f908d..87da70c021 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json index 3a7d3f93eb..820fc99703 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Metallic @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json index d9a68636c8..c57c976d11 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Neon @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json index 4e55dcd18c..ad1c0ef27e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Satin @base.json @@ -1,10 +1,9 @@ { "type": "filament", "name": "Panchroma PLA Satin @base", - "renamed_from": "Panchroma PLA Stain @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "filament_cost": [ "20.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json index 08fabb165e..d0df636abb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json index bed7d34e53..d271daa50a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Starlight @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json index 5d8adcda38..9de5e084b3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Temp Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json index e3c3355b43..d6da194349 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA Translucent @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json index 97009b894d..1a2662f1bc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Panchroma PLA UV Shift @base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json index 759c29892a..540a6b846d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ABS @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "OGFB60", + "filament_id": "OFOvv91M", "instantiation": "false", "filament_cost": [ "26.9" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json index 78340f6984..95b4d39c1a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite ASA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "OGFB61", + "filament_id": "OFvrXuV7", "instantiation": "false", "eng_plate_temp": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json index 4d17382a38..ab02a798fc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @System.json @@ -2,7 +2,7 @@ "type": "filament", "name": "PolyLite Dual PLA @System", "renamed_from": "PolyLite Dual PLA", - "inherits": "PolyLite PLA @base", + "inherits": "PolyLite Dual PLA @base", "from": "system", "setting_id": "ShKfsLXZ1EJ4HgKf", "instantiation": "true", diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json new file mode 100644 index 0000000000..814e641e1a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite Dual PLA @base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "PolyLite Dual PLA @base", + "inherits": "PolyLite PLA @base", + "from": "system", + "filament_id": "OFYGbPHX", + "instantiation": "false" +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json index 448bb2c66f..7e8312f282 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PETG @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json index 4fc233d3e6..00547fdbe8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @System.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @base", "from": "system", "setting_id": "MKxTIucBtfpUvIhZ", - "filament_id": "OGFL00", + "filament_id": "OF5CgdDq", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json index 65e8f261fb..55ea664946 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json index bdd34f2b03..0b21f98254 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyLite PLA Pro @base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json index 84b6fb4aea..05d3492408 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra Dual PLA @System.json @@ -5,7 +5,7 @@ "inherits": "PolyTerra PLA @base", "from": "system", "setting_id": "OajdcsUZSmrTA2vC", - "filament_id": "OGFL00-1", + "filament_id": "OFCccVrQ", "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json index d2bec7fcd5..3b13c5b55c 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/PolyTerra PLA @base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "filament_cost": [ "25.4" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json index 22b1106271..db7624e45a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json index 38a73bca9f..866ce490e9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Polymaker/Polymaker HT-PLA-GF @base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "filament_cost": [ "32.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json index 149a1dc107..aa1a2bab42 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Marble PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL06", + "filament_id": "OFxUwUeW", "instantiation": "false", "filament_cost": [ "31.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json index 4c564801df..e8152acbcf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PETG @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "OGFSNL08", + "filament_id": "OF2GCW1l", "instantiation": "false", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json index f99430b2f7..34035846fb 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL02", + "filament_id": "OFpW4gdi", "instantiation": "false", "filament_cost": [ "25.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json index 7424503b9f..832c2a4f06 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ 2.0 @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ 2.0 @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL04", + "filament_id": "OFHmPYRy", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json index f890c225be..1fffd42112 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL03", + "filament_id": "OFMUWNkp", "instantiation": "false", "filament_cost": [ "18.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json index ac28782615..35f599e125 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Silk PLA+ @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Silk PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL05", + "filament_id": "OFpPGSKG", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json index cd9bbec953..fc94c630a0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/SUNLU/SUNLU Wood PLA @base.json @@ -3,7 +3,7 @@ "name": "SUNLU Wood PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFSNL07", + "filament_id": "OFLJ8S6I", "instantiation": "false", "filament_cost": [ "26.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json index 77fa861c7b..6fa2f8a04d 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT01", + "filament_id": "OFDe8uyM", "instantiation": "false", "filament_cost": [ "670" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json index 9920f9a504..e181556086 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Galaxy @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA Galaxy @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT04", + "filament_id": "OFB5SmWk", "instantiation": "false", "filament_cost": [ "850" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json index 258f80fb15..98e6288ef4 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT02", + "filament_id": "OFpBlrvY", "instantiation": "false", "filament_cost": [ "710" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json index 4451cffadb..f498a6f162 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Valment/Valment PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Valment PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "VLMNT03", + "filament_id": "OFfq5YXA", "instantiation": "false", "filament_cost": [ "1400" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json index cd15600a52..a93e2d32fc 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_bvoh.json @@ -3,7 +3,6 @@ "name": "fdm_filament_bvoh", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFS97", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json index 798f560e01..425d3db652 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_cope.json @@ -3,7 +3,6 @@ "name": "fdm_filament_cope", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFLC99", "instantiation": "false", "filament_type": [ "CoPE" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json index 40498a05aa..4e591a4942 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_eva.json @@ -3,7 +3,6 @@ "name": "fdm_filament_eva", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR99", "instantiation": "false", "filament_type": [ "EVA" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json index f67709b4b2..03e46d38ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_hips.json @@ -3,7 +3,6 @@ "name": "fdm_filament_hips", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFS98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json index 185af32de7..512959b651 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN99", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json index d8fb7d00ae..a1fa18b707 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFC99", "instantiation": "false", "supertack_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json index e656fb7715..22b8842748 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pctg.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pctg", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG97", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json index a47543334b..a36be438fa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pe.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pe", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFP99", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json index 8b3fef2f2b..71b9d305c2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFG99", "instantiation": "false", "eng_plate_temp": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json index 7719c6563d..6dfd3f54c1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pha.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pha", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFR98", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json index 21b7c44365..be74bd622e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFL99", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json index a5fd601060..1fffb376ef 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pla_silk.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla_silk", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL96", "instantiation": "false", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_flow_ratio": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json index 4df7753132..854f7976db 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_pp.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pp", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFP97", "instantiation": "false", "additional_cooling_fan_speed": [ "70" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json index c250e588b0..b8993999f6 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_ppa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_ppa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OGFN97", "instantiation": "false", "activate_air_filtration": [ "0" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json index 9bc4d5ce36..8ce103d405 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/base/fdm_filament_sbs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_sbs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "OFLSBS99", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json index 576da66278..53a489aaf2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PETG @base.json @@ -3,7 +3,7 @@ "name": "eSUN PETG @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "ESN03", + "filament_id": "OF3kBrdA", "instantiation": "false", "filament_vendor": [ "eSUN" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json index 26bbba31d9..4e3ab1d49f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA+ @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA+ @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL03", + "filament_id": "OFqINlYj", "instantiation": "false", "filament_cost": [ "22.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json index a627a10a4d..16fc0dad97 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Basic @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Basic @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL04", + "filament_id": "OFTcE0nA", "instantiation": "false", "filament_cost": [ "11.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json index cbd4f84ed4..d3bfb06030 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Marble @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Marble @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL06", + "filament_id": "OF7H3VJM", "instantiation": "false", "filament_cost": [ "28.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json index 8d22168408..3d9712c218 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN PLA-Matte @base.json @@ -3,7 +3,7 @@ "name": "eSUN PLA-Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL05", + "filament_id": "OFDETOM6", "instantiation": "false", "filament_cost": [ "14.99" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json index 732eb3fd5b..f788d7e4c2 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/eSUN/eSUN ePLA-LW @System.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "pYoZnuVPPIlMbdT1", - "filament_id": "ESN02", + "filament_id": "OFRzR5mi", "instantiation": "true", "filament_type": [ "PLA-AERO" diff --git a/resources/profiles/Peopoly.json b/resources/profiles/Peopoly.json index ca6b59fb2b..9b95c24bb3 100644 --- a/resources/profiles/Peopoly.json +++ b/resources/profiles/Peopoly.json @@ -1,6 +1,6 @@ { "name": "Peopoly", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Peopoly configurations", "machine_model_list": [ @@ -105,8 +105,8 @@ "sub_path": "filament/fdm_filament_pla.json" }, { - "name": "Peopoly Generic ABS", - "sub_path": "filament/Peopoly Generic ABS.json" + "name": "Generic ABS @Peopoly", + "sub_path": "filament/Generic ABS @Peopoly.json" }, { "name": "Peopoly Lancer ABS-GF", @@ -117,16 +117,16 @@ "sub_path": "filament/Peopoly Lancer PET-CF.json" }, { - "name": "Peopoly Generic PETG", - "sub_path": "filament/Peopoly Generic PETG.json" + "name": "Generic PETG @Peopoly", + "sub_path": "filament/Generic PETG @Peopoly.json" }, { "name": "Peopoly Lancer PETG-C", "sub_path": "filament/Peopoly Lancer PETG-C.json" }, { - "name": "Peopoly Generic PLA", - "sub_path": "filament/Peopoly Generic PLA.json" + "name": "Generic PLA @Peopoly", + "sub_path": "filament/Generic PLA @Peopoly.json" }, { "name": "Peopoly Lancer PLA-C", diff --git a/resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json b/resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json new file mode 100644 index 0000000000..d9e2ae777c --- /dev/null +++ b/resources/profiles/Peopoly/filament/Generic ABS @Peopoly.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic ABS @Peopoly", + "inherits": "fdm_filament_abs", + "renamed_from": "Peopoly Generic ABS", + "from": "system", + "setting_id": "HLq9urLhPLW0du6x", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_type": [ + "ABS" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json b/resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json new file mode 100644 index 0000000000..fc4501866a --- /dev/null +++ b/resources/profiles/Peopoly/filament/Generic PETG @Peopoly.json @@ -0,0 +1,42 @@ +{ + "type": "filament", + "name": "Generic PETG @Peopoly", + "inherits": "fdm_filament_petg", + "renamed_from": "Peopoly Generic PETG", + "from": "system", + "setting_id": "dgMXFTyLovrMR56j", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature": [ + "235" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "fan_max_speed": [ + "40" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_type": [ + "PETG" + ], + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json b/resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json new file mode 100644 index 0000000000..42cc687493 --- /dev/null +++ b/resources/profiles/Peopoly/filament/Generic PLA @Peopoly.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "name": "Generic PLA @Peopoly", + "renamed_from": "Peopoly Generic PLA 0.8 nozzle;Peopoly Generic PLA", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "OVbRqCpU0SXiZmot", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "nozzle_temperature_initial_layer": [ + "225" + ], + "nozzle_temperature": [ + "220" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "fan_max_speed": [ + "60" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_type": [ + "PLA" + ], + "compatible_printers": [ + "Peopoly Magneto X 0.4 nozzle", + "Peopoly Magneto X 0.6 nozzle", + "Peopoly Magneto X 0.8 nozzle" + ] +} diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json b/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json deleted file mode 100644 index 7f38c6044a..0000000000 --- a/resources/profiles/Peopoly/filament/Peopoly Generic ABS.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Peopoly Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "ICnZH4LkPD7c6Lmm", - "filament_id": "GFSL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_type": [ - "ABS" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle", - "Peopoly Magneto X 0.6 nozzle", - "Peopoly Magneto X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json b/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json deleted file mode 100644 index add7c8e295..0000000000 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PETG.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "filament", - "name": "Peopoly Generic PETG", - "inherits": "fdm_filament_petg", - "from": "system", - "setting_id": "7LVGx2lNqhBDdYiJ", - "filament_id": "GFPETG-1", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "nozzle_temperature": [ - "235" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "hot_plate_temp": [ - "70" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "fan_max_speed": [ - "40" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_type": [ - "PETG" - ], - "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle", - "Peopoly Magneto X 0.6 nozzle", - "Peopoly Magneto X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json b/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json deleted file mode 100644 index 100057e25b..0000000000 --- a/resources/profiles/Peopoly/filament/Peopoly Generic PLA.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Peopoly Generic PLA", - "renamed_from": "Peopoly Generic PLA 0.8 nozzle", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "KNsVV4dvEWAAkzDE", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "nozzle_temperature_initial_layer": [ - "225" - ], - "nozzle_temperature": [ - "220" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "fan_max_speed": [ - "60" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_type": [ - "PLA" - ], - "compatible_printers": [ - "Peopoly Magneto X 0.4 nozzle", - "Peopoly Magneto X 0.6 nozzle", - "Peopoly Magneto X 0.8 nozzle" - ] -} diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json index c00354396c..fe53fb4651 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "ufcIVt3x0FqV69h4", - "filament_id": "GFL99", + "filament_id": "OFj64R5U", "instantiation": "true", "filament_flow_ratio": [ "0.91" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json index 3ec4ef2909..1629995edb 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "xSaZKOpjStJuKiM7", - "filament_id": "GFL99", + "filament_id": "OFPYDWgC", "instantiation": "true", "filament_flow_ratio": [ "0.90" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json index ccdc0fc0ba..483e7163ca 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PETG-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "aUX6OHQrKPghlPBb", - "filament_id": "GFL99", + "filament_id": "OFpPJSHE", "instantiation": "true", "fan_cooling_layer_time": [ "20" diff --git a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json index 7f417378eb..a4bd236a62 100644 --- a/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json +++ b/resources/profiles/Peopoly/filament/Peopoly Lancer PLA-C.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "EFHW4uKJCsBCjAEU", - "filament_id": "GFL99", + "filament_id": "OFEnbt6D", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json index 031c3b2484..02553f502d 100644 --- a/resources/profiles/Peopoly/machine/Peopoly Magneto X.json +++ b/resources/profiles/Peopoly/machine/Peopoly Magneto X.json @@ -8,5 +8,5 @@ "bed_model": "magnetox_model.stl", "bed_texture": "magnetox_model_texture.svg", "hotend_model": "", - "default_materials": "Peopoly Generic PLA" + "default_materials": "Generic PLA @Peopoly" } diff --git a/resources/profiles/Peopoly/machine/fdm_klipper_common.json b/resources/profiles/Peopoly/machine/fdm_klipper_common.json index f89d97d9a6..00e4209105 100644 --- a/resources/profiles/Peopoly/machine/fdm_klipper_common.json +++ b/resources/profiles/Peopoly/machine/fdm_klipper_common.json @@ -119,7 +119,6 @@ "z_hop_types": [ "Auto Lift" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", @@ -127,7 +126,7 @@ "1" ], "default_filament_profile": [ - "Peopoly Generic PLA" + "Generic PLA @Peopoly" ], "default_print_profile": "fdm_process_peopoly_common_0_2", "bed_exclude_area": [ diff --git a/resources/profiles/Peopoly/machine/fdm_machine_common.json b/resources/profiles/Peopoly/machine/fdm_machine_common.json index f6bd23139c..c47cfdced1 100644 --- a/resources/profiles/Peopoly/machine/fdm_machine_common.json +++ b/resources/profiles/Peopoly/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Peopoly/process/fdm_process_common.json b/resources/profiles/Peopoly/process/fdm_process_common.json index 5e2f73458e..9b48c69b28 100644 --- a/resources/profiles/Peopoly/process/fdm_process_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json b/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json index d4da354499..014fdb8ffb 100644 --- a/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_peopoly_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Peopoly/process/fdm_process_pply_common.json b/resources/profiles/Peopoly/process/fdm_process_pply_common.json index be008f5478..1bfb430465 100644 --- a/resources/profiles/Peopoly/process/fdm_process_pply_common.json +++ b/resources/profiles/Peopoly/process/fdm_process_pply_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "80", diff --git a/resources/profiles/Phrozen.json b/resources/profiles/Phrozen.json index bd4e6f1081..f07568bb29 100644 --- a/resources/profiles/Phrozen.json +++ b/resources/profiles/Phrozen.json @@ -1,6 +1,6 @@ { "name": "Phrozen", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Phrozen configurations", "machine_model_list": [ @@ -57,8 +57,8 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Phrozen PLA @Phrozen Arco 0.4 nozzle", - "sub_path": "filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json" + "name": "Generic PLA @Phrozen Arco 0.4 nozzle", + "sub_path": "filament/Generic PLA @Phrozen Arco 0.4 nozzle.json" } ], "machine_list": [ diff --git a/resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json new file mode 100644 index 0000000000..c53abee956 --- /dev/null +++ b/resources/profiles/Phrozen/filament/Generic PLA @Phrozen Arco 0.4 nozzle.json @@ -0,0 +1,252 @@ +{ + "type": "filament", + "name": "Generic PLA @Phrozen Arco 0.4 nozzle", + "renamed_from": "Phrozen PLA @Phrozen Arco 0.4 nozzle;Phrozen PLA Phrozen Arco 0.4 nozzle", + "inherits": "Generic PLA @System", + "from": "system", + "setting_id": "xTeHmDOY48Bik10J", + "instantiation": "true", + "filament_settings_id": [ + "Generic PLA @Phrozen Arco 0.4 nozzle" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "205" + ], + "compatible_printers": [ + "Phrozen Arco 0.4 nozzle" + ], + "activate_air_filtration": [ + "1" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" + ], + "additional_cooling_fan_speed": [ + "60" + ], + "bed_type": [ + "Cool Plate" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers_condition": "", + "compatible_prints": [], + "compatible_prints_condition": "", + "complete_print_exhaust_fan_speed": [ + "80" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "during_print_exhaust_fan_speed": [ + "60" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_ramming_parameters": [ + "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pressure_advance": [ + "0.035" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json deleted file mode 100644 index 6453756f9e..0000000000 --- a/resources/profiles/Phrozen/filament/Phrozen PLA @Phrozen Arco 0.4 nozzle.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "type": "filament", - "name": "Phrozen PLA @Phrozen Arco 0.4 nozzle", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Cc3ULDFzvoHwh8bV", - "filament_id": "GFL99", - "instantiation": "true", - "filament_settings_id": [ - "Phrozen PLA @Phrozen Arco 0.4 nozzle" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "nozzle_temperature": [ - "205" - ], - "compatible_printers": [ - "Phrozen Arco 0.4 nozzle" - ], - "activate_air_filtration": [ - "1" - ], - "activate_chamber_temp_control": [ - "0" - ], - "adaptive_pressure_advance_model": [ - "0.042,0.72,5000\n0.044,1.44,5000\n0.045,2.16,5000\n0.045,2.88,5000\n0.045,3.58,5000\n0.044,4.3,5000\n0.045,5.02,5000\n0.043,5.73,5000\n0.045,6.45,5000\n0.041,7.17,5000\n0.039,7.89,5000\n0.038,8.61,5000\n0.036,9.33,5000\n0.033,10.05,5000\n0.032,10.77,5000\n0.034,11.49,5000\n0.033,12.21,5000" - ], - "additional_cooling_fan_speed": [ - "60" - ], - "bed_type": [ - "Cool Plate" - ], - "chamber_temperature": [ - "0" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers_condition": "", - "compatible_prints": [], - "compatible_prints_condition": "", - "complete_print_exhaust_fan_speed": [ - "80" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "default_filament_colour": [ - "" - ], - "during_print_exhaust_fan_speed": [ - "60" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cooling_final_speed": [ - "0" - ], - "filament_cooling_initial_speed": [ - "0" - ], - "filament_cooling_moves": [ - "0" - ], - "filament_cost": [ - "20" - ], - "filament_density": [ - "1.24" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; filament end gcode\n" - ], - "filament_is_support": [ - "0" - ], - "filament_load_time": [ - "31.925" - ], - "filament_loading_speed": [ - "0" - ], - "filament_loading_speed_start": [ - "0" - ], - "filament_long_retractions_when_cut": [ - "nil" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_flow": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "0" - ], - "filament_notes": [ - "" - ], - "filament_ramming_parameters": [ - "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_lift_above": [ - "nil" - ], - "filament_retract_lift_below": [ - "nil" - ], - "filament_retract_lift_enforce": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_distances_when_cut": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_shrink": [ - "100%" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "; filament start gcode" - ], - "filament_toolchange_delay": [ - "0" - ], - "filament_unload_time": [ - "24.75" - ], - "filament_unloading_speed": [ - "0" - ], - "filament_unloading_speed_start": [ - "0" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "full_fan_speed_layer": [ - "0" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature_initial_layer": [ - "215" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "pressure_advance": [ - "0.035" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "temperature_vitrification": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json index 051f62fa6c..963b3b4727 100644 --- a/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/machine/Phrozen Arco 0.4 nozzle.json @@ -14,7 +14,7 @@ ], "default_print_profile": "0.20mm Standard @Phrozen Arco 0.4 nozzle", "default_filament_profile": [ - "Phrozen PLA @Phrozen Arco 0.4 nozzle" + "Generic PLA @Phrozen Arco 0.4 nozzle" ], "disable_m73": "1", "gcode_flavor": "klipper", @@ -202,7 +202,6 @@ "45" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "0", diff --git a/resources/profiles/Phrozen/machine/Phrozen Arco.json b/resources/profiles/Phrozen/machine/Phrozen Arco.json index 648b014ebd..be6c15bfe7 100644 --- a/resources/profiles/Phrozen/machine/Phrozen Arco.json +++ b/resources/profiles/Phrozen/machine/Phrozen Arco.json @@ -8,5 +8,5 @@ "bed_model": "Phrozen Arco_buildplate_model.stl", "bed_texture": "Phrozen Arco_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Phrozen PLA @Phrozen Arco 0.4 nozzle" + "default_materials": "Generic PLA @Phrozen Arco 0.4 nozzle" } diff --git a/resources/profiles/Phrozen/machine/_fdm_machine_common.json b/resources/profiles/Phrozen/machine/_fdm_machine_common.json deleted file mode 100644 index 823f9a173b..0000000000 --- a/resources/profiles/Phrozen/machine/_fdm_machine_common.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "type": "machine", - "name": "fdm_machine_common", - "from": "system", - "instantiation": "false", - "gcode_flavor": "marlin", - "machine_start_gcode": "", - "machine_end_gcode": "", - "extruder_colour": [ - "#018001" - ], - "extruder_offset": [ - "0x0" - ], - "machine_max_acceleration_e": [ - "5000", - "5000" - ], - "machine_max_acceleration_extruding": [ - "2000", - "2000" - ], - "machine_max_acceleration_retracting": [ - "5000", - "5000" - ], - "machine_max_acceleration_travel": [ - "3000", - "3000" - ], - "machine_max_acceleration_x": [ - "2000", - "2000" - ], - "machine_max_acceleration_y": [ - "2000", - "2000" - ], - "machine_max_acceleration_z": [ - "300", - "200" - ], - "machine_max_speed_e": [ - "25", - "25" - ], - "machine_max_speed_x": [ - "300", - "200" - ], - "machine_max_speed_y": [ - "300", - "200" - ], - "machine_max_speed_z": [ - "12", - "12" - ], - "machine_max_jerk_e": [ - "2.5", - "2.5" - ], - "machine_max_jerk_x": [ - "9", - "9" - ], - "machine_max_jerk_y": [ - "9", - "9" - ], - "machine_max_jerk_z": [ - "0.2", - "0.4" - ], - "machine_min_extruding_rate": [ - "0", - "0" - ], - "machine_min_travel_rate": [ - "0", - "0" - ], - "max_layer_height": [ - "0.3" - ], - "min_layer_height": [ - "0.08" - ], - "printable_height": "300", - "extruder_clearance_radius": "65", - "extruder_clearance_height_to_rod": "36", - "extruder_clearance_height_to_lid": "140", - "nozzle_diameter": [ - "0.4" - ], - "printer_settings_id": "", - "printer_technology": "FFF", - "printer_variant": "0.4", - "retraction_minimum_travel": [ - "1" - ], - "retract_before_wipe": [ - "70%" - ], - "retract_when_changing_layer": [ - "1" - ], - "retraction_length": [ - "0.8" - ], - "retract_length_toolchange": [ - "2" - ], - "z_hop": [ - "0.4" - ], - "retract_restart_extra": [ - "0" - ], - "retract_restart_extra_toolchange": [ - "0" - ], - "retraction_speed": [ - "30" - ], - "deretraction_speed": [ - "30" - ], - "silent_mode": "0", - "single_extruder_multi_material": "1", - "change_filament_gcode": "", - "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", - "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", - "machine_pause_gcode": "M400 U1\n", - "wipe": [ - "1" - ], - "z_hop_types": "Normal Lift" -} diff --git a/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json b/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json index 74be068c38..d4bb3d5479 100644 --- a/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json +++ b/resources/profiles/Phrozen/process/0.20mm Standard @Phrozen Arco 0.4 nozzle.json @@ -127,8 +127,6 @@ "overhang_reverse": "0", "overhang_reverse_internal_only": "0", "overhang_reverse_threshold": "50%", - "overhang_speed_classic": "1", - "overhang_totally_speed": "10", "post_process": [], "precise_outer_wall": "1", "precise_z_height": "0", diff --git a/resources/profiles/Phrozen/process/fdm_process_common.json b/resources/profiles/Phrozen/process/fdm_process_common.json index 868bbc1a2e..f813b8fa7f 100644 --- a/resources/profiles/Phrozen/process/fdm_process_common.json +++ b/resources/profiles/Phrozen/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -78,7 +77,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_surface_line_width": "0.4", diff --git a/resources/profiles/Positron3D.json b/resources/profiles/Positron3D.json index d8e066ce73..d8008abb55 100644 --- a/resources/profiles/Positron3D.json +++ b/resources/profiles/Positron3D.json @@ -1,6 +1,6 @@ { "name": "Positron 3D", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Positron 3D Printer Profile", "machine_model_list": [ diff --git a/resources/profiles/Positron3D/machine/fdm_common_the_positron.json b/resources/profiles/Positron3D/machine/fdm_common_the_positron.json index 4226a5a0e4..68e95b626e 100644 --- a/resources/profiles/Positron3D/machine/fdm_common_the_positron.json +++ b/resources/profiles/Positron3D/machine/fdm_common_the_positron.json @@ -117,7 +117,6 @@ "40" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Positron3D/machine/fdm_machine_common.json b/resources/profiles/Positron3D/machine/fdm_machine_common.json index 11833be972..a07212bae7 100644 --- a/resources/profiles/Positron3D/machine/fdm_machine_common.json +++ b/resources/profiles/Positron3D/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Positron3D/process/fdm_process_common.json b/resources/profiles/Positron3D/process/fdm_process_common.json index b8e882770a..0d558129af 100644 --- a/resources/profiles/Positron3D/process/fdm_process_common.json +++ b/resources/profiles/Positron3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -83,7 +82,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Prusa.json b/resources/profiles/Prusa.json index 113b085c96..723874f67d 100644 --- a/resources/profiles/Prusa.json +++ b/resources/profiles/Prusa.json @@ -1,6 +1,6 @@ { "name": "Prusa", - "version": "02.04.00.03", + "version": "02.04.00.06", "force_update": "0", "description": "Prusa configurations", "machine_model_list": [ @@ -1449,156 +1449,112 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Prusa Generic ABS", - "sub_path": "filament/Prusa Generic ABS.json" + "name": "Generic ABS @Prusa CORE One", + "sub_path": "filament/Generic ABS @Prusa CORE One.json" }, { - "name": "Prusa Generic ABS @CORE One", - "sub_path": "filament/Prusa Generic ABS @CORE One.json" + "name": "Generic ABS @Prusa MK3.5", + "sub_path": "filament/Generic ABS @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS @MINIIS", - "sub_path": "filament/Prusa Generic ABS @MINIIS.json" + "name": "Generic ABS @Prusa MK3.5 0.25", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.25", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.25.json" + "name": "Generic ABS @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.6.json" + "name": "Generic ABS @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ABS @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ABS @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ABS @MINIIS 0.8.json" + "name": "Generic ABS @Prusa MK4S", + "sub_path": "filament/Generic ABS @Prusa MK4S.json" }, { - "name": "Prusa Generic ABS @MK3.5", - "sub_path": "filament/Prusa Generic ABS @MK3.5.json" + "name": "Generic ABS @Prusa base", + "sub_path": "filament/Generic ABS @Prusa base.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.25", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.25.json" + "name": "Generic ABS HF @Prusa MK3.5", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.6.json" + "name": "Generic ABS HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ABS @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ABS @MK3.5 0.8.json" + "name": "Generic ABS HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ABS HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ABS @MK4", - "sub_path": "filament/Prusa Generic ABS @MK4.json" + "name": "Generic ABS HF @Prusa base", + "sub_path": "filament/Generic ABS HF @Prusa base.json" }, { - "name": "Prusa Generic ABS @MK4S", - "sub_path": "filament/Prusa Generic ABS @MK4S.json" + "name": "Generic ASA @Prusa", + "sub_path": "filament/Generic ASA @Prusa.json" }, { - "name": "Prusa Generic ABS @XL", - "sub_path": "filament/Prusa Generic ABS @XL.json" + "name": "Generic ASA @Prusa CORE One", + "sub_path": "filament/Generic ASA @Prusa CORE One.json" }, { - "name": "Prusa Generic ABS @XL 5T", - "sub_path": "filament/Prusa Generic ABS @XL 5T.json" + "name": "Generic ASA @Prusa MINIIS", + "sub_path": "filament/Generic ASA @Prusa MINIIS.json" }, { - "name": "Prusa Generic ABS HF @MINIIS", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS.json" + "name": "Generic ASA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic ABS HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS 0.6.json" + "name": "Generic ASA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ABS HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ABS HF @MINIIS 0.8.json" + "name": "Generic ASA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ASA @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ABS HF @MK3.5", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5.json" + "name": "Generic ASA @Prusa MK3.5", + "sub_path": "filament/Generic ASA @Prusa MK3.5.json" }, { - "name": "Prusa Generic ABS HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5 0.6.json" + "name": "Generic ASA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic ABS HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ABS HF @MK3.5 0.8.json" + "name": "Generic ASA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ASA", - "sub_path": "filament/Prusa Generic ASA.json" + "name": "Generic ASA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ASA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ASA @CORE One", - "sub_path": "filament/Prusa Generic ASA @CORE One.json" + "name": "Generic ASA @Prusa MK4", + "sub_path": "filament/Generic ASA @Prusa MK4.json" }, { - "name": "Prusa Generic ASA @MINIIS", - "sub_path": "filament/Prusa Generic ASA @MINIIS.json" + "name": "Generic ASA @Prusa MK4S", + "sub_path": "filament/Generic ASA @Prusa MK4S.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.25.json" + "name": "Generic ASA HF @Prusa MK3.5", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.6.json" + "name": "Generic ASA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic ASA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ASA @MINIIS 0.8.json" + "name": "Generic ASA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic ASA HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic ASA @MK3.5", - "sub_path": "filament/Prusa Generic ASA @MK3.5.json" - }, - { - "name": "Prusa Generic ASA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.25.json" - }, - { - "name": "Prusa Generic ASA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic ASA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ASA @MK3.5 0.8.json" - }, - { - "name": "Prusa Generic ASA @MK4", - "sub_path": "filament/Prusa Generic ASA @MK4.json" - }, - { - "name": "Prusa Generic ASA @MK4S", - "sub_path": "filament/Prusa Generic ASA @MK4S.json" - }, - { - "name": "Prusa Generic ASA HF @MINIIS", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS.json" - }, - { - "name": "Prusa Generic ASA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic ASA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic ASA HF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic ASA HF @MK3.5", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5.json" - }, - { - "name": "Prusa Generic ASA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic ASA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic ASA HF @MK3.5 0.8.json" + "name": "Generic ASA HF @Prusa base", + "sub_path": "filament/Generic ASA HF @Prusa base.json" }, { "name": "Prusament ASA @CORE One", @@ -1613,88 +1569,56 @@ "sub_path": "filament/Prusament ASA @XL 5T.json" }, { - "name": "Prusa Generic FLEX @XL", - "sub_path": "filament/Prusa Generic FLEX @XL.json" + "name": "Generic FLEX @Prusa XL", + "sub_path": "filament/Generic FLEX @Prusa XL.json" }, { - "name": "Prusa Generic FLEX @XL 5T", - "sub_path": "filament/Prusa Generic FLEX @XL 5T.json" + "name": "Generic FLEX @Prusa XL 5T", + "sub_path": "filament/Generic FLEX @Prusa XL 5T.json" }, { - "name": "Prusa Generic TPU @CORE One", - "sub_path": "filament/Prusa Generic TPU @CORE One.json" + "name": "Generic TPU @Prusa CORE One", + "sub_path": "filament/Generic TPU @Prusa CORE One.json" }, { - "name": "Prusa Generic PA", - "sub_path": "filament/Prusa Generic PA.json" + "name": "Generic PA @Prusa MK3.5", + "sub_path": "filament/Generic PA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PA @MINIIS", - "sub_path": "filament/Prusa Generic PA @MINIIS.json" + "name": "Generic PA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.25.json" + "name": "Generic PA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.6.json" + "name": "Generic PA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PA @MINIIS 0.8.json" + "name": "Generic PA @Prusa base", + "sub_path": "filament/Generic PA @Prusa base.json" }, { - "name": "Prusa Generic PA @MK3.5", - "sub_path": "filament/Prusa Generic PA @MK3.5.json" + "name": "Generic PA-CF @Prusa MK3.5", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.25.json" + "name": "Generic PA-CF @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.6.json" + "name": "Generic PA-CF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PA @MK3.5 0.8.json" + "name": "Generic PA-CF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PA-CF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PA-CF", - "sub_path": "filament/Prusa Generic PA-CF.json" - }, - { - "name": "Prusa Generic PA-CF @MINIIS", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS.json" - }, - { - "name": "Prusa Generic PA-CF @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.25.json" - }, - { - "name": "Prusa Generic PA-CF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic PA-CF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PA-CF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic PA-CF @MK3.5", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5.json" - }, - { - "name": "Prusa Generic PA-CF @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.25.json" - }, - { - "name": "Prusa Generic PA-CF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PA-CF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PA-CF @MK3.5 0.8.json" + "name": "Generic PA-CF @Prusa base", + "sub_path": "filament/Generic PA-CF @Prusa base.json" }, { "name": "Prusament PA-CF @CORE One", @@ -1709,64 +1633,56 @@ "sub_path": "filament/Prusament PA-CF @XL 5T.json" }, { - "name": "Prusa Generic PC", - "sub_path": "filament/Prusa Generic PC.json" + "name": "Generic PC @Prusa", + "sub_path": "filament/Generic PC @Prusa.json" }, { - "name": "Prusa Generic PC @MINIIS", - "sub_path": "filament/Prusa Generic PC @MINIIS.json" + "name": "Generic PC @Prusa MINIIS", + "sub_path": "filament/Generic PC @Prusa MINIIS.json" }, { - "name": "Prusa Generic PC @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.25.json" + "name": "Generic PC @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic PC @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.6.json" + "name": "Generic PC @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic PC @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PC @MINIIS 0.8.json" + "name": "Generic PC @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PC @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic PC @MK3.5", - "sub_path": "filament/Prusa Generic PC @MK3.5.json" + "name": "Generic PC @Prusa MK3.5", + "sub_path": "filament/Generic PC @Prusa MK3.5.json" }, { - "name": "Prusa Generic PC @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.25.json" + "name": "Generic PC @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PC @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.6.json" + "name": "Generic PC @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PC @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PC @MK3.5 0.8.json" + "name": "Generic PC @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PC @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PC HF @MINIIS", - "sub_path": "filament/Prusa Generic PC HF @MINIIS.json" + "name": "Generic PC HF @Prusa MK3.5", + "sub_path": "filament/Generic PC HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PC HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PC HF @MINIIS 0.6.json" + "name": "Generic PC HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PC HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PC HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PC HF @MINIIS 0.8.json" + "name": "Generic PC HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PC HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PC HF @MK3.5", - "sub_path": "filament/Prusa Generic PC HF @MK3.5.json" - }, - { - "name": "Prusa Generic PC HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PC HF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PC HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PC HF @MK3.5 0.8.json" + "name": "Generic PC HF @Prusa base", + "sub_path": "filament/Generic PC HF @Prusa base.json" }, { "name": "Prusament PC Blend @CORE One", @@ -1793,300 +1709,176 @@ "sub_path": "filament/Prusament PC-CF @XL 5T.json" }, { - "name": "Prusa Generic PETG", - "sub_path": "filament/Prusa Generic PETG.json" + "name": "Generic PETG @Prusa CORE One", + "sub_path": "filament/Generic PETG @Prusa CORE One.json" }, { - "name": "Prusa Generic PETG @CORE One", - "sub_path": "filament/Prusa Generic PETG @CORE One.json" + "name": "Generic PETG @Prusa MK3.5", + "sub_path": "filament/Generic PETG @Prusa MK3.5.json" }, { - "name": "Prusa Generic PETG @MINIIS", - "sub_path": "filament/Prusa Generic PETG @MINIIS.json" + "name": "Generic PETG @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.25.json" + "name": "Generic PETG @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.6.json" + "name": "Generic PETG @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PETG @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PETG @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PETG @MINIIS 0.8.json" + "name": "Generic PETG @Prusa MK4S", + "sub_path": "filament/Generic PETG @Prusa MK4S.json" }, { - "name": "Prusa Generic PETG @MK3.5", - "sub_path": "filament/Prusa Generic PETG @MK3.5.json" + "name": "Generic PETG @Prusa base", + "sub_path": "filament/Generic PETG @Prusa base.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.25.json" + "name": "Generic PETG HF @Prusa MK3.5", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.6.json" + "name": "Generic PETG HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PETG @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PETG @MK3.5 0.8.json" + "name": "Generic PETG HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PETG HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PETG @MK4", - "sub_path": "filament/Prusa Generic PETG @MK4.json" - }, - { - "name": "Prusa Generic PETG @MK4S", - "sub_path": "filament/Prusa Generic PETG @MK4S.json" - }, - { - "name": "Prusa Generic PETG @XL", - "sub_path": "filament/Prusa Generic PETG @XL.json" - }, - { - "name": "Prusa Generic PETG @XL 5T", - "sub_path": "filament/Prusa Generic PETG @XL 5T.json" - }, - { - "name": "Prusa Generic PETG HF @MINIIS", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS.json" - }, - { - "name": "Prusa Generic PETG HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic PETG HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PETG HF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic PETG HF @MK3.5", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5.json" - }, - { - "name": "Prusa Generic PETG HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PETG HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PETG HF @MK3.5 0.8.json" + "name": "Generic PETG HF @Prusa base", + "sub_path": "filament/Generic PETG HF @Prusa base.json" }, { "name": "Prusament PETG @CORE One", "sub_path": "filament/Prusament PETG @CORE One.json" }, { - "name": "Prusament PETG @XL", - "sub_path": "filament/Prusament PETG @XL.json" + "name": "Prusament PETG @base", + "sub_path": "filament/Prusament PETG @base.json" }, { - "name": "Prusament PETG @XL 5T", - "sub_path": "filament/Prusament PETG @XL 5T.json" + "name": "Generic PLA @Prusa CORE One", + "sub_path": "filament/Generic PLA @Prusa CORE One.json" }, { - "name": "Prusa Generic PLA", - "sub_path": "filament/Prusa Generic PLA.json" + "name": "Generic PLA @Prusa MK3.5", + "sub_path": "filament/Generic PLA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA @CORE One", - "sub_path": "filament/Prusa Generic PLA @CORE One.json" + "name": "Generic PLA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PLA @MINIIS", - "sub_path": "filament/Prusa Generic PLA @MINIIS.json" + "name": "Generic PLA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.25.json" + "name": "Generic PLA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.6.json" + "name": "Generic PLA @Prusa MK4S", + "sub_path": "filament/Generic PLA @Prusa MK4S.json" }, { - "name": "Prusa Generic PLA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA @MINIIS 0.8.json" + "name": "Generic PLA @Prusa base", + "sub_path": "filament/Generic PLA @Prusa base.json" }, { - "name": "Prusa Generic PLA @MK3.5", - "sub_path": "filament/Prusa Generic PLA @MK3.5.json" + "name": "Generic PLA HF @Prusa MK3.5", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.25.json" + "name": "Generic PLA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.6.json" + "name": "Generic PLA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PLA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA @MK3.5 0.8.json" + "name": "Generic PLA HF @Prusa base", + "sub_path": "filament/Generic PLA HF @Prusa base.json" }, { - "name": "Prusa Generic PLA @MK4", - "sub_path": "filament/Prusa Generic PLA @MK4.json" + "name": "Generic PLA Silk @Prusa CORE One", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One.json" }, { - "name": "Prusa Generic PLA @MK4S", - "sub_path": "filament/Prusa Generic PLA @MK4S.json" + "name": "Generic PLA-CF @Prusa MK3.5", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PLA @XL", - "sub_path": "filament/Prusa Generic PLA @XL.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PLA @XL 5T", - "sub_path": "filament/Prusa Generic PLA @XL 5T.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PLA HF @MINIIS", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS.json" + "name": "Generic PLA-CF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PLA-CF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PLA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic PLA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA HF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic PLA HF @MK3.5", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5.json" - }, - { - "name": "Prusa Generic PLA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PLA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA HF @MK3.5 0.8.json" - }, - { - "name": "Prusa Generic PLA Silk @CORE One", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One.json" - }, - { - "name": "Prusa Generic PLA-CF", - "sub_path": "filament/Prusa Generic PLA-CF.json" - }, - { - "name": "Prusa Generic PLA-CF @MINIIS", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS.json" - }, - { - "name": "Prusa Generic PLA-CF @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.25.json" - }, - { - "name": "Prusa Generic PLA-CF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic PLA-CF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PLA-CF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic PLA-CF @MK3.5", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5.json" - }, - { - "name": "Prusa Generic PLA-CF @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.25.json" - }, - { - "name": "Prusa Generic PLA-CF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PLA-CF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PLA-CF @MK3.5 0.8.json" + "name": "Generic PLA-CF @Prusa base", + "sub_path": "filament/Generic PLA-CF @Prusa base.json" }, { "name": "Prusament PLA @CORE One", "sub_path": "filament/Prusament PLA @CORE One.json" }, { - "name": "Prusament PLA @XL", - "sub_path": "filament/Prusament PLA @XL.json" - }, - { - "name": "Prusament PLA @XL 5T", - "sub_path": "filament/Prusament PLA @XL 5T.json" + "name": "Prusament PLA @base", + "sub_path": "filament/Prusament PLA @base.json" }, { "name": "Prusament rPLA @CORE One", "sub_path": "filament/Prusament rPLA @CORE One.json" }, { - "name": "Prusament rPLA @XL", - "sub_path": "filament/Prusament rPLA @XL.json" + "name": "Prusament rPLA @base", + "sub_path": "filament/Prusament rPLA @base.json" }, { - "name": "Prusament rPLA @XL 5T", - "sub_path": "filament/Prusament rPLA @XL 5T.json" + "name": "Generic PVA @Prusa MK3.5", + "sub_path": "filament/Generic PVA @Prusa MK3.5.json" }, { - "name": "Prusa Generic PVA", - "sub_path": "filament/Prusa Generic PVA.json" + "name": "Generic PVA @Prusa MK3.5 0.25", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.25.json" }, { - "name": "Prusa Generic PVA @MINIIS", - "sub_path": "filament/Prusa Generic PVA @MINIIS.json" + "name": "Generic PVA @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.25", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.25.json" + "name": "Generic PVA @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PVA @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.6.json" + "name": "Generic PVA @Prusa base", + "sub_path": "filament/Generic PVA @Prusa base.json" }, { - "name": "Prusa Generic PVA @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PVA @MINIIS 0.8.json" + "name": "Generic PVA HF @Prusa MK3.5", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic PVA @MK3.5", - "sub_path": "filament/Prusa Generic PVA @MK3.5.json" + "name": "Generic PVA HF @Prusa MK3.5 0.6", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5 0.6.json" }, { - "name": "Prusa Generic PVA @MK3.5 0.25", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.25.json" + "name": "Generic PVA HF @Prusa MK3.5 0.8", + "sub_path": "filament/Generic PVA HF @Prusa MK3.5 0.8.json" }, { - "name": "Prusa Generic PVA @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PVA @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PVA @MK3.5 0.8.json" - }, - { - "name": "Prusa Generic PVA HF @MINIIS", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS.json" - }, - { - "name": "Prusa Generic PVA HF @MINIIS 0.6", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS 0.6.json" - }, - { - "name": "Prusa Generic PVA HF @MINIIS 0.8", - "sub_path": "filament/Prusa Generic PVA HF @MINIIS 0.8.json" - }, - { - "name": "Prusa Generic PVA HF @MK3.5", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5.json" - }, - { - "name": "Prusa Generic PVA HF @MK3.5 0.6", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5 0.6.json" - }, - { - "name": "Prusa Generic PVA HF @MK3.5 0.8", - "sub_path": "filament/Prusa Generic PVA HF @MK3.5 0.8.json" + "name": "Generic PVA HF @Prusa base", + "sub_path": "filament/Generic PVA HF @Prusa base.json" }, { "name": "Prusament PVB @CORE One", @@ -2101,104 +1893,152 @@ "sub_path": "filament/Prusament PVB @XL 5T.json" }, { - "name": "Prusa Generic TPU", - "sub_path": "filament/Prusa Generic TPU.json" + "name": "Generic TPU @Prusa MK3.5", + "sub_path": "filament/Generic TPU @Prusa MK3.5.json" }, { - "name": "Prusa Generic TPU @MINIIS", - "sub_path": "filament/Prusa Generic TPU @MINIIS.json" + "name": "Generic TPU @Prusa MK4S", + "sub_path": "filament/Generic TPU @Prusa MK4S.json" }, { - "name": "Prusa Generic TPU @MK3.5", - "sub_path": "filament/Prusa Generic TPU @MK3.5.json" + "name": "Generic TPU @Prusa base", + "sub_path": "filament/Generic TPU @Prusa base.json" }, { - "name": "Prusa Generic TPU @MK4", - "sub_path": "filament/Prusa Generic TPU @MK4.json" + "name": "Generic TPU HF @Prusa MK3.5", + "sub_path": "filament/Generic TPU HF @Prusa MK3.5.json" }, { - "name": "Prusa Generic TPU @MK4S", - "sub_path": "filament/Prusa Generic TPU @MK4S.json" + "name": "Generic TPU HF @Prusa base", + "sub_path": "filament/Generic TPU HF @Prusa base.json" }, { - "name": "Prusa Generic TPU HF @MINIIS", - "sub_path": "filament/Prusa Generic TPU HF @MINIIS.json" + "name": "Generic ABS @Prusa CORE One 0.6", + "sub_path": "filament/Generic ABS @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic TPU HF @MK3.5", - "sub_path": "filament/Prusa Generic TPU HF @MK3.5.json" + "name": "Generic ABS @Prusa CORE One 0.8", + "sub_path": "filament/Generic ABS @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic ABS @CORE One 0.6", - "sub_path": "filament/Prusa Generic ABS @CORE One 0.6.json" + "name": "Generic ABS @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic ABS @CORE One 0.8", - "sub_path": "filament/Prusa Generic ABS @CORE One 0.8.json" + "name": "Generic ABS @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.4.json" + "name": "Generic ABS @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.5.json" + "name": "Generic ABS @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic ABS @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.6.json" + "name": "Generic ABS @Prusa MK4S 0.6", + "sub_path": "filament/Generic ABS @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic ABS @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic ABS @CORE One HF 0.8.json" + "name": "Generic ABS @Prusa MK4S 0.8", + "sub_path": "filament/Generic ABS @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic ABS @MK4S 0.6", - "sub_path": "filament/Prusa Generic ABS @MK4S 0.6.json" + "name": "Generic ABS @Prusa MK4S HF0.4", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.4.json" }, { - "name": "Prusa Generic ABS @MK4S 0.8", - "sub_path": "filament/Prusa Generic ABS @MK4S 0.8.json" + "name": "Generic ABS @Prusa", + "sub_path": "filament/Generic ABS @Prusa.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.4", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.4.json" + "name": "Generic ABS @Prusa MINIIS", + "sub_path": "filament/Generic ABS @Prusa MINIIS.json" }, { - "name": "Prusa Generic ASA @CORE One 0.6", - "sub_path": "filament/Prusa Generic ASA @CORE One 0.6.json" + "name": "Generic ABS @Prusa MINIIS 0.25", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.25.json" }, { - "name": "Prusa Generic ASA @CORE One 0.8", - "sub_path": "filament/Prusa Generic ASA @CORE One 0.8.json" + "name": "Generic ABS @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.4.json" + "name": "Generic ABS @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS @Prusa MINIIS 0.8.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.5.json" + "name": "Generic ABS @Prusa MK4", + "sub_path": "filament/Generic ABS @Prusa MK4.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.6.json" + "name": "Generic ABS @Prusa XL", + "sub_path": "filament/Generic ABS @Prusa XL.json" }, { - "name": "Prusa Generic ASA @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic ASA @CORE One HF 0.8.json" + "name": "Generic ABS @Prusa XL 5T", + "sub_path": "filament/Generic ABS @Prusa XL 5T.json" }, { - "name": "Prusa Generic ASA @MK4S 0.6", - "sub_path": "filament/Prusa Generic ASA @MK4S 0.6.json" + "name": "Generic ABS HF @Prusa MINIIS", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic ASA @MK4S 0.8", - "sub_path": "filament/Prusa Generic ASA @MK4S 0.8.json" + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.6.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.4", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.4.json" + "name": "Generic ABS HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ABS HF @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic ASA @Prusa CORE One 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.6.json" + }, + { + "name": "Generic ASA @Prusa CORE One 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One 0.8.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.4.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.5.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.6.json" + }, + { + "name": "Generic ASA @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic ASA @Prusa CORE One HF 0.8.json" + }, + { + "name": "Generic ASA @Prusa MK4S 0.6", + "sub_path": "filament/Generic ASA @Prusa MK4S 0.6.json" + }, + { + "name": "Generic ASA @Prusa MK4S 0.8", + "sub_path": "filament/Generic ASA @Prusa MK4S 0.8.json" + }, + { + "name": "Generic ASA @Prusa MK4S HF0.4", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.4.json" + }, + { + "name": "Generic ASA HF @Prusa MINIIS", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS.json" + }, + { + "name": "Generic ASA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic ASA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic ASA HF @Prusa MINIIS 0.8.json" }, { "name": "Prusament ASA @CORE One 0.6", @@ -2225,12 +2065,52 @@ "sub_path": "filament/Prusament ASA @CORE One HF 0.8.json" }, { - "name": "Prusa Generic TPU @CORE One 0.6", - "sub_path": "filament/Prusa Generic TPU @CORE One 0.6.json" + "name": "Generic TPU @Prusa CORE One 0.6", + "sub_path": "filament/Generic TPU @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic TPU @CORE One 0.8", - "sub_path": "filament/Prusa Generic TPU @CORE One 0.8.json" + "name": "Generic TPU @Prusa CORE One 0.8", + "sub_path": "filament/Generic TPU @Prusa CORE One 0.8.json" + }, + { + "name": "Generic PA @Prusa", + "sub_path": "filament/Generic PA @Prusa.json" + }, + { + "name": "Generic PA @Prusa MINIIS", + "sub_path": "filament/Generic PA @Prusa MINIIS.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PA-CF @Prusa", + "sub_path": "filament/Generic PA-CF @Prusa.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PA-CF @Prusa MINIIS 0.8.json" }, { "name": "Prusament PA-CF @CORE One 0.6", @@ -2240,6 +2120,18 @@ "name": "Prusament PA-CF @CORE One 0.8", "sub_path": "filament/Prusament PA-CF @CORE One 0.8.json" }, + { + "name": "Generic PC HF @Prusa MINIIS", + "sub_path": "filament/Generic PC HF @Prusa MINIIS.json" + }, + { + "name": "Generic PC HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PC HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PC HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PC Blend @CORE One 0.6", "sub_path": "filament/Prusament PC Blend @CORE One 0.6.json" @@ -2273,40 +2165,84 @@ "sub_path": "filament/Prusament PC-CF @CORE One 0.8.json" }, { - "name": "Prusa Generic PETG @CORE One 0.6", - "sub_path": "filament/Prusa Generic PETG @CORE One 0.6.json" + "name": "Generic PETG @Prusa CORE One 0.6", + "sub_path": "filament/Generic PETG @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic PETG @CORE One 0.8", - "sub_path": "filament/Prusa Generic PETG @CORE One 0.8.json" + "name": "Generic PETG @Prusa CORE One 0.8", + "sub_path": "filament/Generic PETG @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.4.json" + "name": "Generic PETG @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.5.json" + "name": "Generic PETG @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.6.json" + "name": "Generic PETG @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic PETG @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic PETG @CORE One HF 0.8.json" + "name": "Generic PETG @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic PETG @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic PETG @MK4S 0.6", - "sub_path": "filament/Prusa Generic PETG @MK4S 0.6.json" + "name": "Generic PETG @Prusa MK4S 0.6", + "sub_path": "filament/Generic PETG @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic PETG @MK4S 0.8", - "sub_path": "filament/Prusa Generic PETG @MK4S 0.8.json" + "name": "Generic PETG @Prusa MK4S 0.8", + "sub_path": "filament/Generic PETG @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.4", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.4.json" + "name": "Generic PETG @Prusa MK4S HF0.4", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.4.json" + }, + { + "name": "Generic PETG @Prusa", + "sub_path": "filament/Generic PETG @Prusa.json" + }, + { + "name": "Generic PETG @Prusa MINIIS", + "sub_path": "filament/Generic PETG @Prusa MINIIS.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PETG @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PETG @Prusa MK4", + "sub_path": "filament/Generic PETG @Prusa MK4.json" + }, + { + "name": "Generic PETG @Prusa XL", + "sub_path": "filament/Generic PETG @Prusa XL.json" + }, + { + "name": "Generic PETG @Prusa XL 5T", + "sub_path": "filament/Generic PETG @Prusa XL 5T.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PETG HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PETG HF @Prusa MINIIS 0.8.json" }, { "name": "Prusament PETG @CORE One 0.6", @@ -2333,52 +2269,124 @@ "sub_path": "filament/Prusament PETG @CORE One HF 0.8.json" }, { - "name": "Prusa Generic PLA @CORE One 0.6", - "sub_path": "filament/Prusa Generic PLA @CORE One 0.6.json" + "name": "Prusament PETG @XL", + "sub_path": "filament/Prusament PETG @XL.json" }, { - "name": "Prusa Generic PLA @CORE One 0.8", - "sub_path": "filament/Prusa Generic PLA @CORE One 0.8.json" + "name": "Prusament PETG @XL 5T", + "sub_path": "filament/Prusament PETG @XL 5T.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.4", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.4.json" + "name": "Generic PLA @Prusa CORE One 0.6", + "sub_path": "filament/Generic PLA @Prusa CORE One 0.6.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.5", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.5.json" + "name": "Generic PLA @Prusa CORE One 0.8", + "sub_path": "filament/Generic PLA @Prusa CORE One 0.8.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.6", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.6.json" + "name": "Generic PLA @Prusa CORE One HF 0.4", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.4.json" }, { - "name": "Prusa Generic PLA @CORE One HF 0.8", - "sub_path": "filament/Prusa Generic PLA @CORE One HF 0.8.json" + "name": "Generic PLA @Prusa CORE One HF 0.5", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.5.json" }, { - "name": "Prusa Generic PLA @MK4S 0.6", - "sub_path": "filament/Prusa Generic PLA @MK4S 0.6.json" + "name": "Generic PLA @Prusa CORE One HF 0.6", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.6.json" }, { - "name": "Prusa Generic PLA @MK4S 0.8", - "sub_path": "filament/Prusa Generic PLA @MK4S 0.8.json" + "name": "Generic PLA @Prusa CORE One HF 0.8", + "sub_path": "filament/Generic PLA @Prusa CORE One HF 0.8.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.4", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.4.json" + "name": "Generic PLA @Prusa MK4S 0.6", + "sub_path": "filament/Generic PLA @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic PLA Silk @MK4S", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S.json" + "name": "Generic PLA @Prusa MK4S 0.8", + "sub_path": "filament/Generic PLA @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic PLA Silk @CORE One 0.6", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One 0.6.json" + "name": "Generic PLA @Prusa MK4S HF0.4", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.4.json" }, { - "name": "Prusa Generic PLA Silk @CORE One 0.8", - "sub_path": "filament/Prusa Generic PLA Silk @CORE One 0.8.json" + "name": "Generic PLA Silk @Prusa MK4S", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S.json" + }, + { + "name": "Generic PLA @Prusa", + "sub_path": "filament/Generic PLA @Prusa.json" + }, + { + "name": "Generic PLA @Prusa MINIIS", + "sub_path": "filament/Generic PLA @Prusa MINIIS.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PLA @Prusa MK4", + "sub_path": "filament/Generic PLA @Prusa MK4.json" + }, + { + "name": "Generic PLA @Prusa XL", + "sub_path": "filament/Generic PLA @Prusa XL.json" + }, + { + "name": "Generic PLA @Prusa XL 5T", + "sub_path": "filament/Generic PLA @Prusa XL 5T.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA HF @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PLA Silk @Prusa CORE One 0.6", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.6.json" + }, + { + "name": "Generic PLA Silk @Prusa CORE One 0.8", + "sub_path": "filament/Generic PLA Silk @Prusa CORE One 0.8.json" + }, + { + "name": "Generic PLA-CF @Prusa", + "sub_path": "filament/Generic PLA-CF @Prusa.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PLA-CF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PLA-CF @Prusa MINIIS 0.8.json" }, { "name": "Prusament PLA @CORE One 0.6", @@ -2404,6 +2412,14 @@ "name": "Prusament PLA @CORE One HF 0.8", "sub_path": "filament/Prusament PLA @CORE One HF 0.8.json" }, + { + "name": "Prusament PLA @XL", + "sub_path": "filament/Prusament PLA @XL.json" + }, + { + "name": "Prusament PLA @XL 5T", + "sub_path": "filament/Prusament PLA @XL 5T.json" + }, { "name": "Prusament rPLA @CORE One 0.6", "sub_path": "filament/Prusament rPLA @CORE One 0.6.json" @@ -2412,6 +2428,46 @@ "name": "Prusament rPLA @CORE One 0.8", "sub_path": "filament/Prusament rPLA @CORE One 0.8.json" }, + { + "name": "Prusament rPLA @XL", + "sub_path": "filament/Prusament rPLA @XL.json" + }, + { + "name": "Prusament rPLA @XL 5T", + "sub_path": "filament/Prusament rPLA @XL 5T.json" + }, + { + "name": "Generic PVA @Prusa", + "sub_path": "filament/Generic PVA @Prusa.json" + }, + { + "name": "Generic PVA @Prusa MINIIS", + "sub_path": "filament/Generic PVA @Prusa MINIIS.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.25", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.25.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PVA @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA @Prusa MINIIS 0.8.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS 0.6", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.6.json" + }, + { + "name": "Generic PVA HF @Prusa MINIIS 0.8", + "sub_path": "filament/Generic PVA HF @Prusa MINIIS 0.8.json" + }, { "name": "Prusament PVB @CORE One 0.6", "sub_path": "filament/Prusament PVB @CORE One 0.6.json" @@ -2421,68 +2477,84 @@ "sub_path": "filament/Prusament PVB @CORE One 0.8.json" }, { - "name": "Prusa Generic TPU @MK4S 0.6", - "sub_path": "filament/Prusa Generic TPU @MK4S 0.6.json" + "name": "Generic TPU @Prusa MK4S 0.6", + "sub_path": "filament/Generic TPU @Prusa MK4S 0.6.json" }, { - "name": "Prusa Generic TPU @MK4S 0.8", - "sub_path": "filament/Prusa Generic TPU @MK4S 0.8.json" + "name": "Generic TPU @Prusa MK4S 0.8", + "sub_path": "filament/Generic TPU @Prusa MK4S 0.8.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.5", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.5.json" + "name": "Generic TPU @Prusa", + "sub_path": "filament/Generic TPU @Prusa.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.6", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.6.json" + "name": "Generic TPU @Prusa MINIIS", + "sub_path": "filament/Generic TPU @Prusa MINIIS.json" }, { - "name": "Prusa Generic ABS @MK4S HF0.8", - "sub_path": "filament/Prusa Generic ABS @MK4S HF0.8.json" + "name": "Generic TPU @Prusa MK4", + "sub_path": "filament/Generic TPU @Prusa MK4.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.5", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.5.json" + "name": "Generic TPU HF @Prusa MINIIS", + "sub_path": "filament/Generic TPU HF @Prusa MINIIS.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.6", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.6.json" + "name": "Generic ABS @Prusa MK4S HF0.5", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic ASA @MK4S HF0.8", - "sub_path": "filament/Prusa Generic ASA @MK4S HF0.8.json" + "name": "Generic ABS @Prusa MK4S HF0.6", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.5", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.5.json" + "name": "Generic ABS @Prusa MK4S HF0.8", + "sub_path": "filament/Generic ABS @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.6", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.6.json" + "name": "Generic ASA @Prusa MK4S HF0.5", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic PETG @MK4S HF0.8", - "sub_path": "filament/Prusa Generic PETG @MK4S HF0.8.json" + "name": "Generic ASA @Prusa MK4S HF0.6", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.5", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.5.json" + "name": "Generic ASA @Prusa MK4S HF0.8", + "sub_path": "filament/Generic ASA @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.6", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.6.json" + "name": "Generic PETG @Prusa MK4S HF0.5", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.5.json" }, { - "name": "Prusa Generic PLA @MK4S HF0.8", - "sub_path": "filament/Prusa Generic PLA @MK4S HF0.8.json" + "name": "Generic PETG @Prusa MK4S HF0.6", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.6.json" }, { - "name": "Prusa Generic PLA Silk @MK4S 0.6", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S 0.6.json" + "name": "Generic PETG @Prusa MK4S HF0.8", + "sub_path": "filament/Generic PETG @Prusa MK4S HF0.8.json" }, { - "name": "Prusa Generic PLA Silk @MK4S 0.8", - "sub_path": "filament/Prusa Generic PLA Silk @MK4S 0.8.json" + "name": "Generic PLA @Prusa MK4S HF0.5", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.5.json" + }, + { + "name": "Generic PLA @Prusa MK4S HF0.6", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.6.json" + }, + { + "name": "Generic PLA @Prusa MK4S HF0.8", + "sub_path": "filament/Generic PLA @Prusa MK4S HF0.8.json" + }, + { + "name": "Generic PLA Silk @Prusa MK4S 0.6", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S 0.6.json" + }, + { + "name": "Generic PLA Silk @Prusa MK4S 0.8", + "sub_path": "filament/Generic PLA Silk @Prusa MK4S 0.8.json" } ], "machine_list": [ diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..8ba18e9dde --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.6.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One 0.6", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One 0.6;Prusa Generic ABS CORE One 0.6", + "from": "system", + "setting_id": "PYQhstNvKFJ7qsxe", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..2981c2ef63 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One 0.8.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One 0.8", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One 0.8;Prusa Generic ABS CORE One 0.8", + "from": "system", + "setting_id": "ExG49agessyLCVpW", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "40" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json new file mode 100644 index 0000000000..f2e61055ab --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.4.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One HF 0.4", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.4;Prusa Generic ABS CORE One HF 0.4", + "from": "system", + "setting_id": "ASYz8yASE82tQDII", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json new file mode 100644 index 0000000000..14782a747a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.5.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One HF 0.5", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.5;Prusa Generic ABS CORE One HF 0.5", + "from": "system", + "setting_id": "mzZCm8XDmAR23YR6", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json new file mode 100644 index 0000000000..be46455a73 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One HF 0.6", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.6;Prusa Generic ABS CORE One HF 0.6", + "from": "system", + "setting_id": "gJhX2KBpk4wfXIj0", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "34" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json new file mode 100644 index 0000000000..f4d2954ad7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One HF 0.8.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One HF 0.8", + "inherits": "Generic ABS @Prusa CORE One", + "renamed_from": "Prusa Generic ABS @CORE One HF 0.8;Prusa Generic ABS CORE One HF 0.8", + "from": "system", + "setting_id": "JbGYSVdZTeFJXaVk", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "slow_down_layer_time": [ + "25" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json new file mode 100644 index 0000000000..7339d20a7c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa CORE One.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa CORE One", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @CORE One;Prusa Generic ABS CORE One", + "from": "system", + "setting_id": "0k31oXq1pLQsHvrj", + "filament_id": "OFY9muEs", + "instantiation": "true", + "chamber_temperature": [ + "40" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "20" + ], + "fan_min_speed": [ + "15" + ], + "filament_cost": [ + "27.82" + ], + "filament_density": [ + "1.04" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ], + "filament_notes": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "filament_type": [ + "ABS" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "idle_temperature": [ + "130" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "overhang_fan_speed": [ + "25" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "slow_down_layer_time": [ + "20" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..0fe673d854 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.25.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MINIIS 0.25", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.25;Prusa Generic ABS MINIIS 0.25", + "from": "system", + "setting_id": "T7U23i3I3ALV2oEd", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..3b9fa495e3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.6.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MINIIS 0.6", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.6;Prusa Generic ABS MINIIS 0.6", + "from": "system", + "setting_id": "iZdNxczgKBs0zIiI", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..e9d5d7554b --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS 0.8.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MINIIS 0.8", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS 0.8;Prusa Generic ABS MINIIS 0.8", + "from": "system", + "setting_id": "f6fZt6LNgXSHjInj", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json new file mode 100644 index 0000000000..9f6569d6e9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MINIIS.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MINIIS", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MINIIS;Prusa Generic ABS MINIIS", + "from": "system", + "setting_id": "ZqiVOVIYGAbB1SPk", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..0a36c04f02 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.25.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK3.5 0.25", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.25;Prusa Generic ABS MK3.5 0.25", + "from": "system", + "setting_id": "IjZS8VJrGg6fRiI2", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.09" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..04626e6ad8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK3.5 0.6", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.6;Prusa Generic ABS MK3.5 0.6", + "from": "system", + "setting_id": "iJ2u6LgWCZd2zaPJ", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..4e65b7e329 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK3.5 0.8", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5 0.8;Prusa Generic ABS MK3.5 0.8", + "from": "system", + "setting_id": "m8neIe1dfWt5Klbq", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json new file mode 100644 index 0000000000..075e055e72 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK3.5.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK3.5", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK3.5;Prusa Generic ABS MK3.5", + "from": "system", + "setting_id": "EEc6F9uzIkv6nFib", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json new file mode 100644 index 0000000000..9ab147b678 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS @MK4;Prusa Generic ABS MK4", + "from": "system", + "setting_id": "MVcRPldYJo5fnXh8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_start_gcode": [ + "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ], + "compatible_printers": [ + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..7371c1f2f9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.6.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S 0.6", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S 0.6;Prusa Generic ABS MK4S 0.6", + "from": "system", + "setting_id": "aNRfxkoYTEG3NPV1", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..bf0e8419cf --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S 0.8.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S 0.8", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S 0.8;Prusa Generic ABS MK4S 0.8", + "from": "system", + "setting_id": "sL7NL7GOf52fzxnj", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json new file mode 100644 index 0000000000..84aca85d1a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.4.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.4", + "inherits": "Generic ABS @Prusa MK4S", + "renamed_from": "Prusa Generic ABS @MK4S HF0.4;Prusa Generic ABS MK4S HF0.4", + "from": "system", + "setting_id": "usm5Dycg7z1b1o1v", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.4 nozzle" + ], + "fan_max_speed": "15", + "filament_max_volumetric_speed": [ + "26" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.015{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..cb9f3ccebc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.5", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.5;Prusa Generic ABS MK4S HF0.5", + "from": "system", + "setting_id": "EdrmoUsReFVn5EWW", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..2327e2d1cc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.6.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.6", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.6;Prusa Generic ABS MK4S HF0.6", + "from": "system", + "setting_id": "lcxvk4AN6z8NGdKv", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "34" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json new file mode 100644 index 0000000000..81bf85e41c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S HF0.8.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S HF0.8", + "inherits": "Generic ABS @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ABS @MK4S HF0.8;Prusa Generic ABS MK4S HF0.8", + "from": "system", + "setting_id": "VTSZGauVB9yGzOJD", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.8 nozzle" + ], + "fan_min_speed": "15", + "filament_max_volumetric_speed": [ + "36" + ], + "slow_down_layer_time": "25" +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json new file mode 100644 index 0000000000..c454e1d79b --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa MK4S.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa MK4S", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS @MK4S;Prusa Generic ABS MK4S", + "from": "system", + "setting_id": "6xkFvOyWtTQNXYAm", + "filament_id": "OFY9muEs", + "instantiation": "true", + "close_fan_the_first_x_layers": "4", + "compatible_printers": [ + "Prusa MK4S 0.25 nozzle", + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle" + ], + "default_filament_colour": "#FFF2EC", + "fan_max_speed": "10", + "filament_cost": [ + "27.82" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": "35", + "filament_notes": [ + "" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ], + "hot_plate_temp": "110", + "hot_plate_temp_initial_layer": "100", + "overhang_fan_speed": "20", + "reduce_fan_stop_start_freq": "0", + "slow_down_layer_time": "20", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json new file mode 100644 index 0000000000..ee328ff399 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL 5T.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa XL 5T", + "renamed_from": "Prusa Generic ABS @XL 5T;Prusa Generic ABS XL 5T", + "inherits": "Generic ABS @Prusa base", + "from": "system", + "setting_id": "XfavDzEzzrXDQVUC", + "instantiation": "true", + "nozzle_temperature_intial_layer": "255", + "nozzle_temperature": "255", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "20" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "overhang_fan_speed": [ + "25" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json new file mode 100644 index 0000000000..f6a0a45d88 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa XL.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa XL", + "renamed_from": "Prusa Generic ABS @XL;Prusa Generic ABS XL", + "inherits": "Generic ABS @Prusa base", + "from": "system", + "setting_id": "HYHkGEjr6Kid2Xg2", + "instantiation": "true", + "nozzle_temperature_intial_layer": "255", + "nozzle_temperature": "255", + "hot_plate_temp_initial_layer": "100", + "hot_plate_temp": "105", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "20" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "overhang_fan_speed": [ + "25" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "filament_loading_speed_start": "19", + "filament_loading_speed": "14", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "20", + "filament_cooling_moves": "5", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "50", + "filament_retract_lift_below": "1.5", + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa base.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa base.json new file mode 100644 index 0000000000..265216328f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "OFY9muEs", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic ABS @Prusa.json b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json new file mode 100644 index 0000000000..0c10f8f297 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS @Prusa.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic ABS @Prusa", + "inherits": "Generic ABS @Prusa base", + "renamed_from": "Prusa Generic ABS", + "from": "system", + "setting_id": "RBSSZVt1NCAz4x3V", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_start_gcode": [ + "; Filament gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..071e689280 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.6.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MINIIS 0.6", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS 0.6;Prusa Generic ABS HF MINIIS 0.6", + "from": "system", + "setting_id": "L6copDR26trR0D8B", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..ca0b250240 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS 0.8.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MINIIS 0.8", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS 0.8;Prusa Generic ABS HF MINIIS 0.8", + "from": "system", + "setting_id": "oxiwspATW960u3eZ", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json new file mode 100644 index 0000000000..6acc1844e7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MINIIS.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MINIIS", + "inherits": "Generic ABS HF @Prusa base", + "renamed_from": "Prusa Generic ABS HF @MINIIS;Prusa Generic ABS HF MINIIS", + "from": "system", + "setting_id": "KcRRWqB7hrovzBng", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "filament_retraction_length": [ + "2.7" + ], + "filament_retraction_minimum_travel": [ + "3" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..5e446b1507 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5 0.6;Prusa Generic ABS HF MK3.5 0.6", + "from": "system", + "setting_id": "ELwxwCcaOKeCUqoB", + "filament_id": "OF55jHAJ", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "34" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..e5f48f3390 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5 0.8;Prusa Generic ABS HF MK3.5 0.8", + "from": "system", + "setting_id": "xWMzscdlR6llxFKQ", + "filament_id": "OF55jHAJ", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json new file mode 100644 index 0000000000..9c1f224149 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa MK3.5.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa MK3.5", + "inherits": "fdm_filament_abs", + "renamed_from": "Prusa Generic ABS HF @MK3.5;Prusa Generic ABS HF MK3.5", + "from": "system", + "setting_id": "n9Xu8L69l5rs6VZF", + "filament_id": "OF55jHAJ", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json new file mode 100644 index 0000000000..adeb00182e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ABS HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic ABS HF @Prusa base", + "inherits": "fdm_filament_abs", + "from": "system", + "filament_id": "OF55jHAJ", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..0fa54a9d21 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One 0.6", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One 0.6;Prusa Generic ASA CORE One 0.6", + "from": "system", + "setting_id": "WJzGT568OrlSqxjt", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..db78ff7eeb --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One 0.8", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One 0.8;Prusa Generic ASA CORE One 0.8", + "from": "system", + "setting_id": "VtxVQIuWVkP6W3aN", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle" + ], + "fan_max_speed": [ + "30" + ], + "overhang_fan_speed": [ + "30" + ], + "slow_down_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json new file mode 100644 index 0000000000..18a1b68fb3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.4.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One HF 0.4", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.4;Prusa Generic ASA CORE One HF 0.4", + "from": "system", + "setting_id": "eKDfiVRE59itoppm", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "26" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json new file mode 100644 index 0000000000..dd7c08b25f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.5.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One HF 0.5", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.5;Prusa Generic ASA CORE One HF 0.5", + "from": "system", + "setting_id": "ZjHf5Vvtf4ESNnWb", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json new file mode 100644 index 0000000000..7ca03b1c37 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.6.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One HF 0.6", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.6;Prusa Generic ASA CORE One HF 0.6", + "from": "system", + "setting_id": "aRDgUgQJWdNDJx5c", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "34" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json new file mode 100644 index 0000000000..7fe2a7d8bf --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One HF 0.8.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One HF 0.8", + "inherits": "Generic ASA @Prusa CORE One", + "renamed_from": "Prusa Generic ASA @CORE One HF 0.8;Prusa Generic ASA CORE One HF 0.8", + "from": "system", + "setting_id": "UQYl8pGvqg2D9zJX", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.8 nozzle" + ], + "fan_max_speed": [ + "30" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "overhang_fan_speed": [ + "30" + ], + "slow_down_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json new file mode 100644 index 0000000000..84fe0fa3d9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa CORE One.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa CORE One", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @CORE One;Prusa Generic ASA CORE One", + "from": "system", + "setting_id": "Q7fgojkHRZI0floy", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "chamber_temperature": [ + "40" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "20" + ], + "filament_cost": [ + "35.28" + ], + "filament_density": [ + "1.07" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ], + "filament_notes": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "filament_type": [ + "ASA" + ], + "filament_vendor": [ + "Generic" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "idle_temperature": [ + "130" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "overhang_fan_speed": [ + "25" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..8aeaefd5c8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.25.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MINIIS 0.25", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.25;Prusa Generic ASA MINIIS 0.25", + "from": "system", + "setting_id": "3k53bfrhLAnuxHQo", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..46cf4ee835 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.6.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MINIIS 0.6", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.6;Prusa Generic ASA MINIIS 0.6", + "from": "system", + "setting_id": "NMILNvvq88zkz2Lf", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..2e96b0d886 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS 0.8.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MINIIS 0.8", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS 0.8;Prusa Generic ASA MINIIS 0.8", + "from": "system", + "setting_id": "lnjqcRttOW0XRGe2", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json new file mode 100644 index 0000000000..add2390249 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MINIIS.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MINIIS", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MINIIS;Prusa Generic ASA MINIIS", + "from": "system", + "setting_id": "53FptNgFYqTPZfkV", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..ddf9c2d380 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.25.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK3.5 0.25", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.25;Prusa Generic ASA MK3.5 0.25", + "from": "system", + "setting_id": "zyUCfzPlsqRZiUvj", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.09" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..0bcbf559e4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK3.5 0.6", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.6;Prusa Generic ASA MK3.5 0.6", + "from": "system", + "setting_id": "AjpsLZCJaPLfpGdv", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..2ca5decddd --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK3.5 0.8", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5 0.8;Prusa Generic ASA MK3.5 0.8", + "from": "system", + "setting_id": "UwiRVbIWfsSjXcwV", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json new file mode 100644 index 0000000000..61eed484a1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK3.5.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK3.5", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK3.5;Prusa Generic ASA MK3.5", + "from": "system", + "setting_id": "BA46zZsxlvH5bdbC", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json new file mode 100644 index 0000000000..bf6998903d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK4;Prusa Generic ASA MK4", + "from": "system", + "setting_id": "3HdBZTnRTu6aKN1e", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_start_gcode": [ + "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..15d5cb17a8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.6.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S 0.6", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S 0.6;Prusa Generic ASA MK4S 0.6", + "from": "system", + "setting_id": "gtPmGmeYUKi7hwVI", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ], + "nozzle_temperature": "255", + "slow_down_layer_time": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..5af8faecb8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S 0.8.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S 0.8", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S 0.8;Prusa Generic ASA MK4S 0.8", + "from": "system", + "setting_id": "a0IXdYic1FVnKaJg", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ], + "fan_max_speed": "15", + "fan_min_speed": "15", + "slow_down_layer_time": "18" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json new file mode 100644 index 0000000000..033ca2b942 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.4.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.4", + "inherits": "Generic ASA @Prusa MK4S", + "renamed_from": "Prusa Generic ASA @MK4S HF0.4;Prusa Generic ASA MK4S HF0.4", + "from": "system", + "setting_id": "INXVBsLNAkRQUlPU", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "26" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.015{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" + ], + "nozzle_temperature": "265", + "nozzle_temperature_initial_layer": "265", + "slow_down_layer_time": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..fe96876ce6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.5", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.5;Prusa Generic ASA MK4S HF0.5", + "from": "system", + "setting_id": "g7VYJJrBS9mmbJOi", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..56c2ff76e0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.6.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.6", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.6;Prusa Generic ASA MK4S HF0.6", + "from": "system", + "setting_id": "yDj1rzyRIOYJM4Pp", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "fan_max_speed": "15", + "fan_min_speed": "15", + "filament_max_volumetric_speed": [ + "34" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json new file mode 100644 index 0000000000..be3eeb1fe4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S HF0.8.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S HF0.8", + "inherits": "Generic ASA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic ASA @MK4S HF0.8;Prusa Generic ASA MK4S HF0.8", + "from": "system", + "setting_id": "HF59RnyQo2wt5act", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.8 nozzle" + ], + "fan_max_speed": "15", + "fan_min_speed": "15", + "filament_max_volumetric_speed": [ + "36" + ], + "nozzle_temperature": "270", + "nozzle_temperature_initial_layer": "270", + "slow_down_layer_time": "20" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json new file mode 100644 index 0000000000..80ba2d523b --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa MK4S.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa MK4S", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA @MK4S;Prusa Generic ASA MK4S", + "from": "system", + "setting_id": "THc7WYsGi7nwc5wv", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "close_fan_the_first_x_layers": "4", + "compatible_printers": [ + "Prusa MK4S 0.25 nozzle", + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle" + ], + "default_filament_colour": "#FFF2EC", + "fan_cooling_layer_time": "20", + "fan_max_speed": "12", + "fan_min_speed": "12", + "filament_cost": [ + "35.28" + ], + "filament_density": [ + "1.07" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": "35", + "filament_notes": [ + "" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" + ], + "hot_plate_temp": "110", + "overhang_fan_speed": "20", + "slow_down_layer_time": "10", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic ASA @Prusa.json b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json new file mode 100644 index 0000000000..19d7553977 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA @Prusa.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "name": "Generic ASA @Prusa", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA", + "from": "system", + "setting_id": "Uff8hd9OkoS2Yly7", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_start_gcode": [ + "; Filament gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..a8806ff0c6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.6.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MINIIS 0.6", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS 0.6;Prusa Generic ASA HF MINIIS 0.6", + "from": "system", + "setting_id": "Xswtt3GpBabtxN4h", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..cceae0087a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS 0.8.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MINIIS 0.8", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS 0.8;Prusa Generic ASA HF MINIIS 0.8", + "from": "system", + "setting_id": "z13Q2CqpzsnazYwI", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "35" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json new file mode 100644 index 0000000000..4a9bb2b877 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MINIIS.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MINIIS", + "inherits": "Generic ASA HF @Prusa base", + "renamed_from": "Prusa Generic ASA HF @MINIIS;Prusa Generic ASA HF MINIIS", + "from": "system", + "setting_id": "zzMFtHrjmImnj77f", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..e62013867c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.6.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5 0.6;Prusa Generic ASA HF MK3.5 0.6", + "from": "system", + "setting_id": "lhsnnKDQp3U8enP3", + "filament_id": "OFzRtFM9", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "34" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..74d0b8a4dc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5 0.8.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5 0.8;Prusa Generic ASA HF MK3.5 0.8", + "from": "system", + "setting_id": "Qb9bphdgmmLKHgnC", + "filament_id": "OFzRtFM9", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json new file mode 100644 index 0000000000..b5675c32a0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa MK3.5.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa MK3.5", + "inherits": "fdm_filament_asa", + "renamed_from": "Prusa Generic ASA HF @MK3.5;Prusa Generic ASA HF MK3.5", + "from": "system", + "setting_id": "C9YvhnKeHonpemK8", + "filament_id": "OFzRtFM9", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "cool_plate_temp": [ + "100" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "filament_max_volumetric_speed": [ + "26" + ], + "fan_max_speed": [ + "15" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json new file mode 100644 index 0000000000..8b6262282d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic ASA HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic ASA HF @Prusa base", + "inherits": "fdm_filament_asa", + "from": "system", + "filament_id": "OFzRtFM9", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json new file mode 100644 index 0000000000..9be4ea1ba0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL 5T.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic FLEX @Prusa XL 5T", + "renamed_from": "Prusa Generic FLEX @XL 5T;Prusa Generic FLEX XL 5T", + "inherits": "fdm_filament_flex", + "from": "system", + "setting_id": "ef8fSryRYselyr4G", + "filament_id": "OFbPuPKY", + "instantiation": "true", + "filament_loading_speed_start": "3", + "filament_loading_speed": "28", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "90", + "filament_cooling_moves": "4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_final_speed": "3.4", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "40" + ], + "filament_multitool_ramming_flow": [ + "2.5" + ], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json new file mode 100644 index 0000000000..24f34f49ab --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic FLEX @Prusa XL.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic FLEX @Prusa XL", + "renamed_from": "Prusa Generic FLEX @XL;Prusa Generic FLEX XL", + "inherits": "fdm_filament_flex", + "from": "system", + "setting_id": "qrFWrwgQSXgU7oCb", + "filament_id": "OFbPuPKY", + "instantiation": "true", + "filament_loading_speed_start": "3", + "filament_loading_speed": "28", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "90", + "filament_cooling_moves": "4", + "filament_cooling_initial_speed": "2.2", + "filament_cooling_final_speed": "3.4", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "40" + ], + "filament_multitool_ramming_flow": [ + "2.5" + ], + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..f887a7caca --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.25.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MINIIS 0.25", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.25;Prusa Generic PA MINIIS 0.25", + "from": "system", + "setting_id": "zONIDmAy6bC6rkBd", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..fce5c4f837 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.6.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MINIIS 0.6", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.6;Prusa Generic PA MINIIS 0.6", + "from": "system", + "setting_id": "Ib0bThHzZ0GXWgXv", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..35c7df7919 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS 0.8.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MINIIS 0.8", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS 0.8;Prusa Generic PA MINIIS 0.8", + "from": "system", + "setting_id": "WSCkyvdqYKalsLHg", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "pressure_advance": [ + "0.07" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json new file mode 100644 index 0000000000..67e59c92d9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MINIIS", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA @MINIIS;Prusa Generic PA MINIIS", + "from": "system", + "setting_id": "06VxUw37OfEzaSka", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..eebbafe187 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.25;Prusa Generic PA MK3.5 0.25", + "from": "system", + "setting_id": "htgSl4rIQ1smRBy4", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.09" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..6405d18e56 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.6;Prusa Generic PA MK3.5 0.6", + "from": "system", + "setting_id": "LPzPJN0XdHVQDEsd", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..d85d70d810 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5 0.8;Prusa Generic PA MK3.5 0.8", + "from": "system", + "setting_id": "WiO6dm6LbzJxOC9j", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "pressure_advance": [ + "0.01" + ], + "enable_pressure_advance": [ + "1" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json new file mode 100644 index 0000000000..f3309fd275 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa MK3.5.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa MK3.5", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA @MK3.5;Prusa Generic PA MK3.5", + "from": "system", + "setting_id": "YfGmmjqpxHcDcRsk", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa base.json b/resources/profiles/Prusa/filament/Generic PA @Prusa base.json new file mode 100644 index 0000000000..c74dce0514 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OFg8ndtj", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PA @Prusa.json b/resources/profiles/Prusa/filament/Generic PA @Prusa.json new file mode 100644 index 0000000000..1ebaec2fe2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA @Prusa.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic PA @Prusa", + "inherits": "Generic PA @Prusa base", + "renamed_from": "Prusa Generic PA", + "from": "system", + "setting_id": "zTnz1NYXoXxIHhRv", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle", + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..85ae694018 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.25.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MINIIS 0.25", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.25;Prusa Generic PA-CF MINIIS 0.25", + "from": "system", + "setting_id": "5OyMl43GFDPQHrx3", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "1.02" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..e986346eee --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.6.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MINIIS 0.6", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.6;Prusa Generic PA-CF MINIIS 0.6", + "from": "system", + "setting_id": "lvYPxwHzVnW29IKZ", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.22" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..1e3dd13b49 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS 0.8.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MINIIS 0.8", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS 0.8;Prusa Generic PA-CF MINIIS 0.8", + "from": "system", + "setting_id": "LlGpiQAvrrd5bMCs", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.15" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json new file mode 100644 index 0000000000..6c59be3227 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MINIIS.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MINIIS", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF @MINIIS;Prusa Generic PA-CF MINIIS", + "from": "system", + "setting_id": "AfQLoOulI6zwAZDg", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.36" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..8f0622e2cc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.25.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.25;Prusa Generic PA-CF MK3.5 0.25", + "from": "system", + "setting_id": "15pNQLVuXkSI3zjU", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.14" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..bb6fc654ad --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.6.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.6;Prusa Generic PA-CF MK3.5 0.6", + "from": "system", + "setting_id": "3ZKi2gcV6LgJwidS", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.022" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..2ad7d45932 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5 0.8.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5 0.8;Prusa Generic PA-CF MK3.5 0.8", + "from": "system", + "setting_id": "Ilehw0Za73eW1Z9v", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json new file mode 100644 index 0000000000..4150a3f625 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa MK3.5.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa MK3.5", + "inherits": "fdm_filament_pa", + "renamed_from": "Prusa Generic PA-CF @MK3.5;Prusa Generic PA-CF MK3.5", + "from": "system", + "setting_id": "yy2FgYPLARliAAmZ", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json new file mode 100644 index 0000000000..1e5c1936d4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa base", + "inherits": "fdm_filament_pa", + "from": "system", + "filament_id": "OFQLcbps", + "instantiation": "false", + "filament_type": [ + "PA-CF" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json new file mode 100644 index 0000000000..f60463913f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PA-CF @Prusa.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Prusa", + "inherits": "Generic PA-CF @Prusa base", + "renamed_from": "Prusa Generic PA-CF", + "from": "system", + "setting_id": "R2WthJ8gqw8xdajn", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle", + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..4c50bdca0c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.25.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MINIIS 0.25", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.25;Prusa Generic PC MINIIS 0.25", + "from": "system", + "setting_id": "v5LHPemQZ8fEQJrX", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..f6e67d5d5e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MINIIS 0.6", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.6;Prusa Generic PC MINIIS 0.6", + "from": "system", + "setting_id": "MOLOCn9YKfvHMmOu", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..ecfa0c6fea --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS 0.8.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MINIIS 0.8", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS 0.8;Prusa Generic PC MINIIS 0.8", + "from": "system", + "setting_id": "eJ9SwUbq1VyHBciM", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json new file mode 100644 index 0000000000..088f2be363 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MINIIS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MINIIS", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MINIIS;Prusa Generic PC MINIIS", + "from": "system", + "setting_id": "2QWF3WdcbA7ArFgt", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..dd823e700d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.25.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.25;Prusa Generic PC MK3.5 0.25", + "from": "system", + "setting_id": "MWiCzFnPAeMCWxHz", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.14" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..b33d32e71d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.6;Prusa Generic PC MK3.5 0.6", + "from": "system", + "setting_id": "KEgDSg0oQi1SQlst", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.022" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..a6fa27ed6d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5 0.8.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5 0.8;Prusa Generic PC MK3.5 0.8", + "from": "system", + "setting_id": "LHNmoFsylIuepyww", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json new file mode 100644 index 0000000000..1891e65703 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa MK3.5.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa MK3.5", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC @MK3.5;Prusa Generic PC MK3.5", + "from": "system", + "setting_id": "awF5u8ojSKhvSYud", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC @Prusa.json b/resources/profiles/Prusa/filament/Generic PC @Prusa.json new file mode 100644 index 0000000000..59b97e22e5 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC @Prusa.json @@ -0,0 +1,45 @@ +{ + "type": "filament", + "name": "Generic PC @Prusa", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC", + "from": "system", + "setting_id": "UJ5KpqIb5mpcNXzl", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "eng_plate_temp": [ + "100" + ], + "hot_plate_temp": [ + "100" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..dbd6cb209f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.6.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MINIIS 0.6", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS 0.6;Prusa Generic PC HF MINIIS 0.6", + "from": "system", + "setting_id": "W3G94E0IQo6Kaq8G", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "35" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..53bc9b96bd --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS 0.8.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MINIIS 0.8", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS 0.8;Prusa Generic PC HF MINIIS 0.8", + "from": "system", + "setting_id": "Fjwchj1gB62f7CUF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "29" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json new file mode 100644 index 0000000000..4d0785504f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MINIIS.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MINIIS", + "inherits": "Generic PC HF @Prusa base", + "renamed_from": "Prusa Generic PC HF @MINIIS;Prusa Generic PC HF MINIIS", + "from": "system", + "setting_id": "Wodqshgvx38zWaE2", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "24" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..cb2ad5f37c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5 0.6;Prusa Generic PC HF MK3.5 0.6", + "from": "system", + "setting_id": "Rm7U967jnpk74lPA", + "filament_id": "OFwwAQnA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "30" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.022" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..0f684bcca8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5 0.8.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5 0.8;Prusa Generic PC HF MK3.5 0.8", + "from": "system", + "setting_id": "zFkWWW3PTBvuUWqs", + "filament_id": "OFwwAQnA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "36" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json new file mode 100644 index 0000000000..aa007446ce --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa MK3.5.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa MK3.5", + "inherits": "fdm_filament_pc", + "renamed_from": "Prusa Generic PC HF @MK3.5;Prusa Generic PC HF MK3.5", + "from": "system", + "setting_id": "lvbcRP0xEru9jmms", + "filament_id": "OFwwAQnA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "24" + ], + "filament_flow_ratio": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json new file mode 100644 index 0000000000..131b45ea55 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PC HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PC HF @Prusa base", + "inherits": "fdm_filament_pc", + "from": "system", + "filament_id": "OFwwAQnA", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..a2f899e88f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.6.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One 0.6", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One 0.6;Prusa Generic PETG CORE One 0.6", + "from": "system", + "setting_id": "oPWpCDB3p6hQeY2F", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..669cf219fc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One 0.8.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One 0.8", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One 0.8;Prusa Generic PETG CORE One 0.8", + "from": "system", + "setting_id": "OmaayFCLuRLadur0", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "65" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_retract_before_wipe": [ + "50" + ], + "filament_z_hop": [ + "0.6" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "overhang_fan_speed": [ + "65" + ], + "slow_down_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json new file mode 100644 index 0000000000..6c9ff68c89 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.4.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One HF 0.4", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.4;Prusa Generic PETG CORE One HF 0.4", + "from": "system", + "setting_id": "7oUyjvRHLH4bJyX0", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json new file mode 100644 index 0000000000..8784e403ab --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.5.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One HF 0.5", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.5;Prusa Generic PETG CORE One HF 0.5", + "from": "system", + "setting_id": "6HiIOGURZWwman1l", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "27" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "slow_down_layer_time": [ + "10" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json new file mode 100644 index 0000000000..c0eb6a594f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.6.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One HF 0.6", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.6;Prusa Generic PETG CORE One HF 0.6", + "from": "system", + "setting_id": "KKiug7A9NOQPe1m7", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.6 nozzle" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "31" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json new file mode 100644 index 0000000000..99748978bf --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One HF 0.8.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One HF 0.8", + "inherits": "Generic PETG @Prusa CORE One", + "renamed_from": "Prusa Generic PETG @CORE One HF 0.8;Prusa Generic PETG CORE One HF 0.8", + "from": "system", + "setting_id": "vtiAC44hrmtap0Ou", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.8 nozzle" + ], + "fan_cooling_layer_time": [ + "35" + ], + "fan_max_speed": [ + "65" + ], + "filament_max_volumetric_speed": [ + "37" + ], + "filament_retract_before_wipe": [ + "50" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_z_hop": [ + "0.6" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "overhang_fan_speed": [ + "65" + ], + "slow_down_layer_time": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json new file mode 100644 index 0000000000..a086fb9336 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa CORE One.json @@ -0,0 +1,112 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa CORE One", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @CORE One;Prusa Generic PETG CORE One", + "from": "system", + "setting_id": "W71PW5bpf7CV16D4", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "chamber_temperature": [ + "35" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle" + ], + "fan_cooling_layer_time": [ + "25" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "27.82" + ], + "filament_density": [ + "1.27" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": [ + "35" + ], + "filament_notes": [ + "" + ], + "filament_retract_before_wipe": [ + "20" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.053{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_type": [ + "PETG" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "1" + ], + "filament_z_hop": [ + "1.5" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "5" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "idle_temperature": [ + "130" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "overhang_fan_speed": [ + "60" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "9" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..282048f6a3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.25.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MINIIS 0.25", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.25;Prusa Generic PETG MINIIS 0.25", + "from": "system", + "setting_id": "lKegAyiWytPNEXH0", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "1.02" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..40f6d0c685 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.6.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MINIIS 0.6", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.6;Prusa Generic PETG MINIIS 0.6", + "from": "system", + "setting_id": "7QT1EXl4qKoNBuqz", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "17" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.22" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..a578482dc0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS 0.8.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MINIIS 0.8", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS 0.8;Prusa Generic PETG MINIIS 0.8", + "from": "system", + "setting_id": "zl2HOUtcoIR2dFQH", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.15" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json new file mode 100644 index 0000000000..5a135dfd2d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MINIIS.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MINIIS", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MINIIS;Prusa Generic PETG MINIIS", + "from": "system", + "setting_id": "COQ9qpnYRGAFRBoq", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.4" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..e338514096 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.25.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.25;Prusa Generic PETG MK3.5 0.25", + "from": "system", + "setting_id": "M0vmzxmP3IVIUTuv", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.18" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..d57e0fdb3f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.6.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.6;Prusa Generic PETG MK3.5 0.6", + "from": "system", + "setting_id": "OvkhxGhjjRMjwb4C", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "17" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..59e45d94f6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5 0.8.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5 0.8;Prusa Generic PETG MK3.5 0.8", + "from": "system", + "setting_id": "kZSlkCTdghAi8LFG", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.018" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json new file mode 100644 index 0000000000..7d63599c7a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK3.5.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK3.5", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK3.5;Prusa Generic PETG MK3.5", + "from": "system", + "setting_id": "6PUbXHNUBfWjVvse", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.052" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json new file mode 100644 index 0000000000..68f627daa4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG @MK4;Prusa Generic PETG MK4", + "from": "system", + "setting_id": "ieo6hcpwnV0j76eo", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ], + "compatible_printers": [ + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..ddfbb665be --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S 0.6", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S 0.6;Prusa Generic PETG MK4S 0.6", + "from": "system", + "setting_id": "z5Ys1AU5ujQF9D5U", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ], + "fan_cooling_layer_time": "22", + "filament_max_volumetric_speed": [ + "17" + ], + "overhang_fan_speed": "45", + "slow_down_layer_time": "10" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..8e8fee1973 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S 0.8.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S 0.8", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S 0.8;Prusa Generic PETG MK4S 0.8", + "from": "system", + "setting_id": "LKUzA7cbyYL6kxar", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ], + "fan_cooling_layer_time": "25", + "fan_max_speed": "45", + "fan_min_speed": "25", + "filament_max_volumetric_speed": [ + "22" + ], + "filament_retract_before_wipe": "50", + "nozzle_temperature": "245", + "nozzle_temperature_initial_layer": "240", + "overhang_fan_speed": "45", + "slow_down_layer_time": "18" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json new file mode 100644 index 0000000000..ebbdb73717 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.4.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S HF0.4", + "inherits": "Generic PETG @Prusa MK4S", + "renamed_from": "Prusa Generic PETG @MK4S HF0.4;Prusa Generic PETG MK4S HF0.4", + "from": "system", + "setting_id": "lLapCyweW6Svj7cV", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.044{elsif nozzle_diameter[0]==0.6}0.035{elsif nozzle_diameter[0]==0.8}0.022{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ], + "nozzle_temperature": "245", + "nozzle_temperature_initial_layer": "235" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..e424f13c82 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.5.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S HF0.5", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.5;Prusa Generic PETG MK4S HF0.5", + "from": "system", + "setting_id": "lu9twhsjDkBT1kyn", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "29" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..c0d46b3ca1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.6.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S HF0.6", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.6;Prusa Generic PETG MK4S HF0.6", + "from": "system", + "setting_id": "d7ocKzA4YSAit63Z", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "fan_cooling_layer_time": "22", + "filament_max_volumetric_speed": [ + "33" + ], + "nozzle_temperature": "240", + "nozzle_temperature_initial_layer": "230", + "overhang_fan_speed": "45", + "slow_down_layer_time": "10" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json new file mode 100644 index 0000000000..237c3f116a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S HF0.8.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S HF0.8", + "inherits": "Generic PETG @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PETG @MK4S HF0.8;Prusa Generic PETG MK4S HF0.8", + "from": "system", + "setting_id": "HSBSswxwznxDClK5", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.8 nozzle" + ], + "fan_cooling_layer_time": "25", + "fan_max_speed": "45", + "filament_max_volumetric_speed": [ + "37" + ], + "filament_retract_before_wipe": "50", + "nozzle_temperature_initial_layer": "240", + "overhang_fan_speed": "45", + "slow_down_layer_time": "18" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json new file mode 100644 index 0000000000..b7bbc6094e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa MK4S.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa MK4S", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG @MK4S;Prusa Generic PETG MK4S", + "from": "system", + "setting_id": "t3ZCKWVct5d69cb8", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.25 nozzle", + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle" + ], + "default_filament_colour": "#FF8000", + "fan_max_speed": "40", + "filament_cost": [ + "27.82" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_minimal_purge_on_wipe_tower": "35", + "filament_notes": [ + "" + ], + "filament_retract_before_wipe": "20", + "filament_retraction_length": "0.8", + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.053{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" + ], + "filament_wipe": "1", + "filament_z_hop": "0.15", + "full_fan_speed_layer": "5", + "hot_plate_temp": "90", + "hot_plate_temp_initial_layer": "85", + "nozzle_temperature": "240", + "nozzle_temperature_initial_layer": "230", + "overhang_fan_speed": "40", + "slow_down_layer_time": "7", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json new file mode 100644 index 0000000000..52e208e7c9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL 5T.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa XL 5T", + "renamed_from": "Prusa Generic PETG @XL 5T;Prusa Generic PETG XL 5T", + "inherits": "Generic PETG @Prusa base", + "from": "system", + "setting_id": "DNJECSjW6zKYALxE", + "instantiation": "true", + "nozzle_temperature_intial_layer": "230", + "nozzle_temperature": "240", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json new file mode 100644 index 0000000000..78a3e589b2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa XL.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa XL", + "renamed_from": "Prusa Generic PETG @XL;Prusa Generic PETG XL", + "inherits": "Generic PETG @Prusa base", + "from": "system", + "setting_id": "8vcNv4b4H7aYA01G", + "instantiation": "true", + "nozzle_temperature_intial_layer": "230", + "nozzle_temperature": "240", + "hot_plate_temp_initial_layer": "80", + "hot_plate_temp": "80", + "full_fan_speed_layer": "5", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "9" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_cooling_moves": "3", + "filament_cooling_initial_speed": "5", + "filament_cooling_final_speed": "2.5", + "filament_retract_lift_below": "1.5", + "filament_wipe": "1", + "filament_retract_before_wipe": "20%", + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa base.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa base.json new file mode 100644 index 0000000000..c5b0abf34f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFYPdQJh", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PETG @Prusa.json b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json new file mode 100644 index 0000000000..6881507204 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG @Prusa.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PETG @Prusa", + "inherits": "Generic PETG @Prusa base", + "renamed_from": "Prusa Generic PETG", + "from": "system", + "setting_id": "Vwc0owmwoEYrLhuU", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..e8de400490 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.6.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MINIIS 0.6", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS 0.6;Prusa Generic PETG HF MINIIS 0.6", + "from": "system", + "setting_id": "nF8YzRMvaT4D8LBD", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "17" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.22" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..adc5401268 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS 0.8.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MINIIS 0.8", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS 0.8;Prusa Generic PETG HF MINIIS 0.8", + "from": "system", + "setting_id": "7itUjrAu9Oj9hxiU", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "32" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.15" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json new file mode 100644 index 0000000000..9148f5e849 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MINIIS.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MINIIS", + "inherits": "Generic PETG HF @Prusa base", + "renamed_from": "Prusa Generic PETG HF @MINIIS;Prusa Generic PETG HF MINIIS", + "from": "system", + "setting_id": "dPNOryBcrviemefo", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.4" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..71481537b1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.6.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5 0.6;Prusa Generic PETG HF MK3.5 0.6", + "from": "system", + "setting_id": "YqVidH7m1HXR3hHZ", + "filament_id": "OF7lOgYF", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "17" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..5dffe82d0b --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5 0.8.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5 0.8;Prusa Generic PETG HF MK3.5 0.8", + "from": "system", + "setting_id": "vfR067tK5WsrE4pw", + "filament_id": "OF7lOgYF", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "20" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "37" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.018" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json new file mode 100644 index 0000000000..e343519efd --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa MK3.5.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa MK3.5", + "inherits": "fdm_filament_pet", + "renamed_from": "Prusa Generic PETG HF @MK3.5;Prusa Generic PETG HF MK3.5", + "from": "system", + "setting_id": "grvZIUU79fxDOa3O", + "filament_id": "OF7lOgYF", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "10" + ], + "filament_flow_ratio": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.052" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json new file mode 100644 index 0000000000..c15595a97c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PETG HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PETG HF @Prusa base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OF7lOgYF", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..2e2f9275d4 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One 0.6", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One 0.6;Prusa Generic PLA CORE One 0.6", + "from": "system", + "setting_id": "IkmLxDwrdRkacHWw", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle" + ], + "nozzle_temperature": [ + "210" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..cfe88119de --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One 0.8.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One 0.8", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One 0.8;Prusa Generic PLA CORE One 0.8", + "from": "system", + "setting_id": "aBengWdqRXg9i2sx", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "19" + ], + "nozzle_temperature": [ + "225" + ], + "slow_down_layer_time": [ + "17" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json new file mode 100644 index 0000000000..c0969904c7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.4.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One HF 0.4", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.4;Prusa Generic PLA CORE One HF 0.4", + "from": "system", + "setting_id": "vniEPaoyABoAfLFa", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.4 nozzle", + "Prusa CORE One L HF 0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "225" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json new file mode 100644 index 0000000000..5d6e9fcba2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.5.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One HF 0.5", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.5;Prusa Generic PLA CORE One HF 0.5", + "from": "system", + "setting_id": "NPEs4gtBlKWupYZX", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "225" + ], + "slow_down_layer_time": [ + "11" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json new file mode 100644 index 0000000000..6575aebf8d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.6.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One HF 0.6", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.6;Prusa Generic PLA CORE One HF 0.6", + "from": "system", + "setting_id": "SnfULjrWGCiA7ljq", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "225" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json new file mode 100644 index 0000000000..64471ba72b --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One HF 0.8.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One HF 0.8", + "inherits": "Generic PLA @Prusa CORE One", + "renamed_from": "Prusa Generic PLA @CORE One HF 0.8;Prusa Generic PLA CORE One HF 0.8", + "from": "system", + "setting_id": "ZsIuxJUaBzoeWPDv", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One HF 0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "35" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": [ + "225" + ], + "slow_down_layer_time": [ + "19" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json new file mode 100644 index 0000000000..9bc9e086b0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa CORE One.json @@ -0,0 +1,104 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa CORE One", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @CORE One;Prusa Generic PLA CORE One", + "from": "system", + "setting_id": "r2i4c7DsYXYIMVCX", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "chamber_temperature": [ + "20" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle", + "Prusa CORE One L 0.4 nozzle" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "85" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.24" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_notes": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One|CORE One L).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.025{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.014{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_z_hop": [ + "0.6" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "150" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_speed": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..3682a6fcb0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.25.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MINIIS 0.25", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.25;Prusa Generic PLA MINIIS 0.25", + "from": "system", + "setting_id": "t7jm6WSfRqsdSZfz", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.85" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..ae982f46bc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.6.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MINIIS 0.6", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.6;Prusa Generic PLA MINIIS 0.6", + "from": "system", + "setting_id": "hWk01xYl6gu41B4w", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.17" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..8a5897d741 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS 0.8.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MINIIS 0.8", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS 0.8;Prusa Generic PLA MINIIS 0.8", + "from": "system", + "setting_id": "6A9NivZl5nMpNfsz", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json new file mode 100644 index 0000000000..cf2adda390 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MINIIS", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MINIIS;Prusa Generic PLA MINIIS", + "from": "system", + "setting_id": "3bPlO5U5udlu8eVv", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.27" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..b3f84dc4e1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.25.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.25;Prusa Generic PLA MK3.5 0.25", + "from": "system", + "setting_id": "IJsZsvdG7N8uwobX", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..49d75d5e31 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.6.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.6;Prusa Generic PLA MK3.5 0.6", + "from": "system", + "setting_id": "YLx95teMRy5UQWKN", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..6590e43c17 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5 0.8.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5 0.8;Prusa Generic PLA MK3.5 0.8", + "from": "system", + "setting_id": "bZ42VSqIaJlri1VH", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json new file mode 100644 index 0000000000..058e05e99e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK3.5.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK3.5", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK3.5;Prusa Generic PLA MK3.5", + "from": "system", + "setting_id": "5tDjTVPzE0lIEReK", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.035" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json new file mode 100644 index 0000000000..e7cc5df0d8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA @MK4;Prusa Generic PLA MK4", + "from": "system", + "setting_id": "cBqjSJcxcXvS8sY0", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.026{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.026{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" + ], + "compatible_printers": [ + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..bcc0847385 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.6.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S 0.6", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S 0.6;Prusa Generic PLA MK4S 0.6", + "from": "system", + "setting_id": "vLeTzdoXExkeNSdX", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle" + ], + "fan_cooling_layer_time": "22", + "nozzle_temperature": "210", + "slow_down_layer_time": "10" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..e574ce49a5 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S 0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S 0.8", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S 0.8;Prusa Generic PLA MK4S 0.8", + "from": "system", + "setting_id": "6fyFsevbPLYfgZRb", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle" + ], + "fan_cooling_layer_time": "25", + "fan_min_speed": "80", + "filament_max_volumetric_speed": [ + "19" + ], + "nozzle_temperature": "225", + "slow_down_layer_time": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json new file mode 100644 index 0000000000..10e37500a8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.4.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S HF0.4", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA @MK4S HF0.4;Prusa Generic PLA MK4S HF0.4", + "from": "system", + "setting_id": "BFvt90DhCobphEF9", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.4 nozzle" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_start_gcode": [ + "M572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.026{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.015{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 40 40| 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" + ], + "nozzle_temperature": "225" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json new file mode 100644 index 0000000000..ec1efb5aad --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.5.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S HF0.5", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.5;Prusa Generic PLA MK4S HF0.5", + "from": "system", + "setting_id": "IDv2UUR8EH7AVUIA", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.5 nozzle" + ], + "fan_cooling_layer_time": "20", + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": "8" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json new file mode 100644 index 0000000000..8ce85314dd --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.6.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S HF0.6", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.6;Prusa Generic PLA MK4S HF0.6", + "from": "system", + "setting_id": "t7cAPFNPWmeHBeuD", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.6 nozzle" + ], + "fan_cooling_layer_time": "22", + "filament_max_volumetric_speed": [ + "30" + ], + "slow_down_layer_time": "10", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json new file mode 100644 index 0000000000..968bf56356 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S HF0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S HF0.8", + "inherits": "Generic PLA @Prusa MK4S HF0.4", + "renamed_from": "Prusa Generic PLA @MK4S HF0.8;Prusa Generic PLA MK4S HF0.8", + "from": "system", + "setting_id": "t1a58q4l6Xo6kKCC", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S HF0.8 nozzle" + ], + "fan_cooling_layer_time": "25", + "fan_min_speed": "80", + "filament_max_volumetric_speed": [ + "35" + ], + "slow_down_layer_time": "15", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json new file mode 100644 index 0000000000..a847cf8334 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa MK4S.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa MK4S", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA @MK4S;Prusa Generic PLA MK4S", + "from": "system", + "setting_id": "lsjHMlvwZzImWgek", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.25 nozzle", + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle" + ], + "default_filament_colour": "#FF8000", + "fan_cooling_layer_time": "17", + "fan_min_speed": "70", + "filament_cost": [ + "25.4" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_notes": [ + "" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.025{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.014{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_ramming_parameters": [ + "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" + ], + "full_fan_speed_layer": "3", + "nozzle_temperature_initial_layer": "230", + "slow_down_layer_time": "6", + "slow_down_min_speed": "20" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json new file mode 100644 index 0000000000..532ccba57a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL 5T.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa XL 5T", + "renamed_from": "Prusa Generic PLA @XL 5T;Prusa Generic PLA XL 5T", + "inherits": "Generic PLA @Prusa base", + "from": "system", + "setting_id": "wDxtZLt5J2JODMBq", + "instantiation": "true", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "210", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_volume": [ + "5" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 5T 0.25 nozzle", + "Prusa XL 5T 0.3 nozzle", + "Prusa XL 5T 0.4 nozzle", + "Prusa XL 5T 0.5 nozzle", + "Prusa XL 5T 0.6 nozzle", + "Prusa XL 5T 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json new file mode 100644 index 0000000000..4e560f4bac --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa XL.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa XL", + "renamed_from": "Prusa Generic PLA @XL;Prusa Generic PLA XL", + "inherits": "Generic PLA @Prusa base", + "from": "system", + "setting_id": "27u5AiklUhmExsys", + "instantiation": "true", + "nozzle_temperature_intial_layer": "215", + "nozzle_temperature": "210", + "hot_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "full_fan_speed_layer": "3", + "slow_down_min_speed": "15", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "10" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_loading_speed_start": "50", + "filament_loading_speed": "10", + "filament_unloading_speed_start": "100", + "filament_unloading_speed": "100", + "filament_cooling_moves": "2", + "filament_cooling_initial_speed": "10", + "filament_cooling_final_speed": "3.5", + "filament_retract_lift_below": "0.6", + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "compatible_printers": [ + "Prusa XL 0.25 nozzle", + "Prusa XL 0.3 nozzle", + "Prusa XL 0.4 nozzle", + "Prusa XL 0.5 nozzle", + "Prusa XL 0.6 nozzle", + "Prusa XL 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa base.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa base.json new file mode 100644 index 0000000000..7246d710ab --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFDSrzZ8", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA @Prusa.json b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json new file mode 100644 index 0000000000..83951fb4ab --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA @Prusa.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Prusa", + "inherits": "Generic PLA @Prusa base", + "renamed_from": "Prusa Generic PLA", + "from": "system", + "setting_id": "SBviEhhXcdsIwj0y", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K18{elsif nozzle_diameter[0]==0.8};{else}M900 K30{endif} ; Filament gcode LA 1.0" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..56c2e823b0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.6.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MINIIS 0.6", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS 0.6;Prusa Generic PLA HF MINIIS 0.6", + "from": "system", + "setting_id": "eqBN6ykUB4csEMCR", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.17" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..be0722c134 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS 0.8.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MINIIS 0.8", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS 0.8;Prusa Generic PLA HF MINIIS 0.8", + "from": "system", + "setting_id": "FuCHQFBuP9yLUzT0", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "36" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json new file mode 100644 index 0000000000..656c756e6d --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MINIIS.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MINIIS", + "inherits": "Generic PLA HF @Prusa base", + "renamed_from": "Prusa Generic PLA HF @MINIIS;Prusa Generic PLA HF MINIIS", + "from": "system", + "setting_id": "cQJUt7LR5hkKT0Za", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.27" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..41dce0b5ed --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.6.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5 0.6;Prusa Generic PLA HF MK3.5 0.6", + "from": "system", + "setting_id": "5vgrugarZSgMZ6FT", + "filament_id": "OFZr862X", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..b6af02d8fb --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5 0.8.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5 0.8;Prusa Generic PLA HF MK3.5 0.8", + "from": "system", + "setting_id": "CM3EYkpRcWwsw7KB", + "filament_id": "OFZr862X", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "37" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.014" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json new file mode 100644 index 0000000000..46ed4d0752 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa MK3.5.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa MK3.5", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA HF @MK3.5;Prusa Generic PLA HF MK3.5", + "from": "system", + "setting_id": "4N82rUxi9Bbm2Cdd", + "filament_id": "OFZr862X", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.035" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json new file mode 100644 index 0000000000..aaf85ff4a7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PLA HF @Prusa base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFZr862X", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..aeeba4d5ee --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.6.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa CORE One 0.6", + "inherits": "Generic PLA Silk @Prusa CORE One", + "renamed_from": "Prusa Generic PLA Silk @CORE One 0.6;Prusa Generic PLA Silk CORE One 0.6", + "from": "system", + "setting_id": "nBWqKjSKw2UEAmkv", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle", + "Prusa CORE One HF 0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "nozzle_temperature": [ + "215" + ], + "slow_down_layer_time": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..82e3840d37 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One 0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa CORE One 0.8", + "inherits": "Generic PLA Silk @Prusa CORE One", + "renamed_from": "Prusa Generic PLA Silk @CORE One 0.8;Prusa Generic PLA Silk CORE One 0.8", + "from": "system", + "setting_id": "a2KWbhOMQrFTkAZh", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle", + "Prusa CORE One HF 0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "17" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json new file mode 100644 index 0000000000..c11965fc72 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa CORE One.json @@ -0,0 +1,105 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa CORE One", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA Silk @CORE One;Prusa Generic PLA Silk CORE One", + "from": "system", + "setting_id": "F9lNHyhZwZi7aD74", + "filament_id": "OFesA6rF", + "instantiation": "true", + "chamber_temperature": [ + "20" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle", + "Prusa CORE One HF 0.4 nozzle", + "Prusa CORE One HF 0.5 nozzle" + ], + "fan_cooling_layer_time": [ + "40" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "85" + ], + "filament_cost": [ + "25.4" + ], + "filament_density": [ + "1.24" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_notes": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "Generic" + ], + "filament_z_hop": [ + "0.6" + ], + "filament_z_hop_types": [ + "Slope Lift" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "150" + ], + "nozzle_temperature": [ + "225" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_speed": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "20" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..82413605dc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.6.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa MK4S 0.6", + "inherits": "Generic PLA Silk @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S 0.6;Prusa Generic PLA Silk MK4S 0.6", + "from": "system", + "setting_id": "lWYrhnu1MUizrdOB", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle", + "Prusa MK4S HF0.6 nozzle" + ], + "fan_cooling_layer_time": "22", + "filament_max_volumetric_speed": [ + "9" + ], + "nozzle_temperature": "215", + "slow_down_layer_time": "10" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..e94cbdf57a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S 0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa MK4S 0.8", + "inherits": "Generic PLA Silk @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S 0.8;Prusa Generic PLA Silk MK4S 0.8", + "from": "system", + "setting_id": "cyBdMwJ5sAZcQ7wP", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle", + "Prusa MK4S HF0.8 nozzle" + ], + "fan_cooling_layer_time": "25", + "fan_min_speed": "80", + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json new file mode 100644 index 0000000000..9a3830fd4a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA Silk @Prusa MK4S.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Prusa MK4S", + "inherits": "Generic PLA @Prusa MK4S", + "renamed_from": "Prusa Generic PLA Silk @MK4S;Prusa Generic PLA Silk MK4S", + "from": "system", + "setting_id": "9VQ1YVv9EZexIUoF", + "filament_id": "OFesA6rF", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.25 nozzle", + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle", + "Prusa MK4S HF0.4 nozzle", + "Prusa MK4S HF0.5 nozzle" + ], + "filament_max_volumetric_speed": [ + "7" + ], + "filament_start_gcode": [ + "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + ], + "nozzle_temperature": "225" +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..9432c36087 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.25.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MINIIS 0.25", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.25;Prusa Generic PLA-CF MINIIS 0.25", + "from": "system", + "setting_id": "uQJghHEl91slhmEP", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.85" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..7900e25ab2 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.6.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MINIIS 0.6", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.6;Prusa Generic PLA-CF MINIIS 0.6", + "from": "system", + "setting_id": "nZEIrx6XaOFsNyHS", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.17" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..97db4345c8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS 0.8.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MINIIS 0.8", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS 0.8;Prusa Generic PLA-CF MINIIS 0.8", + "from": "system", + "setting_id": "A3VUqeRysd3c5Txq", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.12" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json new file mode 100644 index 0000000000..4c08a4b23c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MINIIS", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF @MINIIS;Prusa Generic PLA-CF MINIIS", + "from": "system", + "setting_id": "cNZereL1ltFYG5FZ", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.27" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..436bf22209 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.25;Prusa Generic PLA-CF MK3.5 0.25", + "from": "system", + "setting_id": "eID2rl5MlHlkerrQ", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.18" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..db1973c5c8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.6;Prusa Generic PLA-CF MK3.5 0.6", + "from": "system", + "setting_id": "FGXPEP83zLoINOZy", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..bfcbcf2dbc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5 0.8;Prusa Generic PLA-CF MK3.5 0.8", + "from": "system", + "setting_id": "TM5JPaNUTlZTiuCe", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "15" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.018" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json new file mode 100644 index 0000000000..677bbc0d27 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa MK3.5.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa MK3.5", + "inherits": "fdm_filament_pla", + "renamed_from": "Prusa Generic PLA-CF @MK3.5;Prusa Generic PLA-CF MK3.5", + "from": "system", + "setting_id": "3qImFrQCon7iUj4c", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.052" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json new file mode 100644 index 0000000000..552a9139c5 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFWbdGsC", + "instantiation": "false", + "filament_type": [ + "PLA-CF" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json new file mode 100644 index 0000000000..c572b9f67c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PLA-CF @Prusa.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Prusa", + "inherits": "Generic PLA-CF @Prusa base", + "renamed_from": "Prusa Generic PLA-CF", + "from": "system", + "setting_id": "LIL5n1PzMoaNoJ84", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "filament_ramming_parameters": [ + "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle", + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json new file mode 100644 index 0000000000..f74228304a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.25.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MINIIS 0.25", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.25;Prusa Generic PVA MINIIS 0.25", + "from": "system", + "setting_id": "2TecWVXOXcxW37EN", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.55" + ], + "compatible_printers": [ + "Prusa MINIIS 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..f25c70a70c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.6.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MINIIS 0.6", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.6;Prusa Generic PVA MINIIS 0.6", + "from": "system", + "setting_id": "3UTClbjiwrQUCXsV", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..90c4fc2256 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS 0.8.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MINIIS 0.8", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS 0.8;Prusa Generic PVA MINIIS 0.8", + "from": "system", + "setting_id": "RKxewqskgDD2DQTk", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json new file mode 100644 index 0000000000..99014f18a3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MINIIS", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA @MINIIS;Prusa Generic PVA MINIIS", + "from": "system", + "setting_id": "XfJmxNhCJiWTWB9i", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json new file mode 100644 index 0000000000..a13990f6c7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.25.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MK3.5 0.25", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.25;Prusa Generic PVA MK3.5 0.25", + "from": "system", + "setting_id": "P9y77rdSQsCFcFwr", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.09" + ], + "compatible_printers": [ + "Prusa MK3.5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..8854a19282 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.6;Prusa Generic PVA MK3.5 0.6", + "from": "system", + "setting_id": "rvSzvHZL6FIiOQV1", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..718845dc9a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5 0.8;Prusa Generic PVA MK3.5 0.8", + "from": "system", + "setting_id": "E2sA3y3Cyp0UsQD4", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json new file mode 100644 index 0000000000..6e1e1c9381 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa MK3.5.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa MK3.5", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA @MK3.5;Prusa Generic PVA MK3.5", + "from": "system", + "setting_id": "UTyXSJox9HVdwfXR", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa base.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa base.json new file mode 100644 index 0000000000..8f442bc5b0 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "OFDvXujf", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic PVA @Prusa.json b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json new file mode 100644 index 0000000000..3ad6ba8337 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA @Prusa.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PVA @Prusa", + "inherits": "Generic PVA @Prusa base", + "renamed_from": "Prusa Generic PVA", + "from": "system", + "setting_id": "uVzUlzHkXz6rH1ml", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle", + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json new file mode 100644 index 0000000000..f4e03d791f --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.6.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MINIIS 0.6", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS 0.6;Prusa Generic PVA HF MINIIS 0.6", + "from": "system", + "setting_id": "qeWFOMhrKa1yezHw", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Prusa MINIIS 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json new file mode 100644 index 0000000000..e8935f9172 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS 0.8.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MINIIS 0.8", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS 0.8;Prusa Generic PVA HF MINIIS 0.8", + "from": "system", + "setting_id": "h0RQ3XME0UFEeZVA", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.07" + ], + "compatible_printers": [ + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json new file mode 100644 index 0000000000..a4a131da97 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MINIIS.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MINIIS", + "inherits": "Generic PVA HF @Prusa base", + "renamed_from": "Prusa Generic PVA HF @MINIIS;Prusa Generic PVA HF MINIIS", + "from": "system", + "setting_id": "VZcvmjCAtivpMepD", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.19" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json new file mode 100644 index 0000000000..1b78b6b0bc --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.6.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MK3.5 0.6", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5 0.6;Prusa Generic PVA HF MK3.5 0.6", + "from": "system", + "setting_id": "8R3yU9OjRFBIp1nU", + "filament_id": "OFDwBwO5", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "5" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.012" + ], + "compatible_printers": [ + "Prusa MK3.5 0.6 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json new file mode 100644 index 0000000000..94f635382e --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5 0.8.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MK3.5 0.8", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5 0.8;Prusa Generic PVA HF MK3.5 0.8", + "from": "system", + "setting_id": "OOUVHHPIB95wqeTB", + "filament_id": "OFDwBwO5", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "compatible_printers": [ + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json new file mode 100644 index 0000000000..c3749316e9 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa MK3.5.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa MK3.5", + "inherits": "fdm_filament_pva", + "renamed_from": "Prusa Generic PVA HF @MK3.5;Prusa Generic PVA HF MK3.5", + "from": "system", + "setting_id": "gTh9PfBYkibWdknz", + "filament_id": "OFDwBwO5", + "instantiation": "true", + "filament_flow_ratio": [ + "1" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.02" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json new file mode 100644 index 0000000000..bd599d74b3 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic PVA HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic PVA HF @Prusa base", + "inherits": "fdm_filament_pva", + "from": "system", + "filament_id": "OFDwBwO5", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json new file mode 100644 index 0000000000..dc68ea318c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.6.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa CORE One 0.6", + "inherits": "Generic TPU @Prusa CORE One", + "renamed_from": "Prusa Generic TPU @CORE One 0.6;Prusa Generic TPU CORE One 0.6", + "from": "system", + "setting_id": "VvvSk3OsXXxyerAX", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.6 nozzle", + "Prusa CORE One HF 0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "3.5" + ], + "filament_z_hop": [ + "0.6" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json new file mode 100644 index 0000000000..93b68e0afa --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One 0.8.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa CORE One 0.8", + "inherits": "Generic TPU @Prusa CORE One", + "renamed_from": "Prusa Generic TPU @CORE One 0.8;Prusa Generic TPU CORE One 0.8", + "from": "system", + "setting_id": "LUUEXi6UUk0Zs5Pf", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa CORE One 0.8 nozzle", + "Prusa CORE One HF 0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_z_hop": [ + "0.6" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json new file mode 100644 index 0000000000..3717f8586a --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa CORE One.json @@ -0,0 +1,114 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa CORE One", + "inherits": "fdm_filament_flex", + "renamed_from": "Prusa Generic TPU @CORE One;Prusa Generic TPU CORE One", + "from": "system", + "setting_id": "jsXqf9CeaXCvsrWM", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "chamber_temperature": [ + "30" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "compatible_printers": [ + "Prusa CORE One 0.25 nozzle", + "Prusa CORE One 0.3 nozzle", + "Prusa CORE One 0.4 nozzle", + "Prusa CORE One 0.5 nozzle", + "Prusa CORE One HF 0.4 nozzle", + "Prusa CORE One HF 0.5 nozzle" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "30" + ], + "filament_cost": [ + "82" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": [ + "1.08" + ], + "filament_max_volumetric_speed": [ + "2.5" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_notes": [ + "" + ], + "filament_retraction_length": [ + "2.5" + ], + "filament_retraction_minimum_travel": [ + "2" + ], + "filament_retraction_speed": [ + "60" + ], + "filament_soluble": [ + "0" + ], + "filament_start_gcode": [ + "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_type": [ + "TPU" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "0" + ], + "filament_z_hop": [ + "0" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "idle_temperature": [ + "150" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "overhang_fan_speed": [ + "70" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "10" + ], + "slow_down_min_speed": [ + "15" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json new file mode 100644 index 0000000000..85c60e64a8 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MINIIS.json @@ -0,0 +1,93 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MINIIS", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU @MINIIS;Prusa Generic TPU MINIIS", + "from": "system", + "setting_id": "bOai5Ib1dggl5Qlc", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.35" + ], + "filament_flow_ratio": [ + "1.15" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "filament_type": [ + "TPU" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "6" + ], + "filament_wipe": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "pressure_advance": [ + "0" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.25 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json new file mode 100644 index 0000000000..3e72481ea7 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK3.5.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK3.5", + "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU @MK3.5;Prusa Generic TPU MK3.5", + "from": "system", + "setting_id": "j6bDPJnwtsB16yBu", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.8" + ], + "filament_flow_ratio": [ + "1.15" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "filament_type": [ + "TPU" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "20" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "pressure_advance": [ + "0" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle", + "Prusa MK3.5 0.25 nozzle", + "Prusa MK3.5 0.6 nozzle", + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json new file mode 100644 index 0000000000..52c7ebf182 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU @MK4;Prusa Generic TPU MK4", + "from": "system", + "setting_id": "9wL3LAJZ7PyqBVEb", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "filament_flow_ratio": [ + "1.08" + ], + "compatible_printers": [ + "Prusa MK4 0.25 nozzle", + "Prusa MK4 0.4 nozzle", + "Prusa MK4 0.6 nozzle", + "Prusa MK4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json new file mode 100644 index 0000000000..4b5399bd89 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.6.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4S 0.6", + "inherits": "Generic TPU @Prusa MK4S", + "renamed_from": "Prusa Generic TPU @MK4S 0.6;Prusa Generic TPU MK4S 0.6", + "from": "system", + "setting_id": "XM427EDbbCgt2wNZ", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.6 nozzle", + "Prusa MK4S HF0.6 nozzle" + ], + "filament_max_volumetric_speed": [ + "6" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json new file mode 100644 index 0000000000..3a663958f1 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S 0.8.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4S 0.8", + "inherits": "Generic TPU @Prusa MK4S", + "renamed_from": "Prusa Generic TPU @MK4S 0.8;Prusa Generic TPU MK4S 0.8", + "from": "system", + "setting_id": "2UPIZFNertdlZ4o2", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "Prusa MK4S 0.8 nozzle", + "Prusa MK4S HF0.8 nozzle" + ], + "filament_max_volumetric_speed": [ + "9" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json new file mode 100644 index 0000000000..75f1895c87 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa MK4S.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa MK4S", + "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU @MK4S;Prusa Generic TPU MK4S", + "from": "system", + "setting_id": "wdopbtHBnMKC2rhj", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "close_fan_the_first_x_layers": "3", + "compatible_printers": [ + "Prusa MK4S 0.3 nozzle", + "Prusa MK4S 0.4 nozzle", + "Prusa MK4S 0.5 nozzle", + "Prusa MK4S HF0.4 nozzle", + "Prusa MK4S HF0.5 nozzle" + ], + "default_filament_colour": "#008000", + "fan_max_speed": "50", + "fan_min_speed": "30", + "filament_cost": [ + "82" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": "20", + "filament_end_gcode": [ + "; Filament-specific end gcode" + ], + "filament_flow_ratio": "1.08", + "filament_max_volumetric_speed": [ + "3" + ], + "filament_notes": [ + "" + ], + "filament_retraction_length": "2.5", + "filament_retraction_minimum_travel": "2", + "filament_retraction_speed": "60", + "filament_start_gcode": [ + "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" + ], + "filament_type": [ + "TPU" + ], + "filament_wipe": "0", + "filament_z_hop": "0", + "hot_plate_temp": "50", + "hot_plate_temp_initial_layer": "50", + "nozzle_temperature": "230", + "nozzle_temperature_initial_layer": "230", + "overhang_fan_speed": "70", + "slow_down_layer_time": "10", + "slow_down_min_speed": "15" +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa base.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa base.json new file mode 100644 index 0000000000..7b5668bfff --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFgbpcy9", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Generic TPU @Prusa.json b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json new file mode 100644 index 0000000000..95048f947c --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU @Prusa.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic TPU @Prusa", + "inherits": "Generic TPU @Prusa base", + "renamed_from": "Prusa Generic TPU", + "from": "system", + "setting_id": "bmtq13tfalfSTRrO", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Prusa MK3S 0.25 nozzle", + "Prusa MK3S 0.4 nozzle", + "Prusa MK3S 0.6 nozzle", + "Prusa MK3S 0.8 nozzle", + "Prusa MINI 0.25 nozzle", + "Prusa MINI 0.4 nozzle", + "Prusa MINI 0.6 nozzle", + "Prusa MINI 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json new file mode 100644 index 0000000000..4c4ab81b42 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MINIIS.json @@ -0,0 +1,92 @@ +{ + "type": "filament", + "name": "Generic TPU HF @Prusa MINIIS", + "inherits": "Generic TPU HF @Prusa base", + "renamed_from": "Prusa Generic TPU HF @MINIIS;Prusa Generic TPU HF MINIIS", + "from": "system", + "setting_id": "Jw1UjgrXtYG5rMDt", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10" + ], + "filament_flow_ratio": [ + "1.15" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "filament_type": [ + "TPU" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "3" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "16" + ], + "filament_retraction_minimum_travel": [ + "6" + ], + "filament_wipe": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "pressure_advance": [ + "0" + ], + "compatible_printers": [ + "Prusa MINIIS 0.4 nozzle", + "Prusa MINIIS 0.6 nozzle", + "Prusa MINIIS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json new file mode 100644 index 0000000000..f958cac588 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa MK3.5.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "Generic TPU HF @Prusa MK3.5", + "inherits": "fdm_filament_tpu", + "renamed_from": "Prusa Generic TPU HF @MK3.5;Prusa Generic TPU HF MK3.5", + "from": "system", + "setting_id": "W8pYAV5JMW70PKlw", + "filament_id": "OFnT7Qpb", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "1.15" + ], + "hot_plate_temp": [ + "50" + ], + "hot_plate_temp_initial_layer": [ + "50" + ], + "filament_type": [ + "TPU" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature": [ + "210" + ], + "filament_retraction_length": [ + "2" + ], + "filament_retraction_speed": [ + "45" + ], + "filament_deretraction_speed": [ + "20" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_min_speed": [ + "10" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "50" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "pressure_advance": [ + "0" + ], + "compatible_printers": [ + "Prusa MK3.5 0.4 nozzle", + "Prusa MK3.5 0.25 nozzle", + "Prusa MK3.5 0.6 nozzle", + "Prusa MK3.5 0.8 nozzle" + ] +} diff --git a/resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json new file mode 100644 index 0000000000..47b1b82c77 --- /dev/null +++ b/resources/profiles/Prusa/filament/Generic TPU HF @Prusa base.json @@ -0,0 +1,8 @@ +{ + "type": "filament", + "name": "Generic TPU HF @Prusa base", + "inherits": "fdm_filament_tpu", + "from": "system", + "filament_id": "OFnT7Qpb", + "instantiation": "false" +} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json deleted file mode 100644 index 0f666ab11b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One 0.6", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "AADElwBWs9fzeAKC", - "filament_id": "Prusa Generic ABS @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json deleted file mode 100644 index 6c046f232f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One 0.8.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One 0.8", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "QLaQiU2tF5ZFTVjP", - "filament_id": "Prusa Generic ABS @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle" - ], - "fan_cooling_layer_time": [ - "40" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json deleted file mode 100644 index f3c61471ed..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.4.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.4", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "Sp0sbcvt0EqZ59NT", - "filament_id": "Prusa Generic ABS @CORE One HF 0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json deleted file mode 100644 index b6892f7630..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.5.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.5", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "U1ih5tnkViqI3vya", - "filament_id": "Prusa Generic ABS @CORE One HF 0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json deleted file mode 100644 index 1354767857..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.6", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "MuqHvIoTlM1Pbs8j", - "filament_id": "Prusa Generic ABS @CORE One HF 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "34" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json deleted file mode 100644 index 513171ea52..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One HF 0.8.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One HF 0.8", - "inherits": "Prusa Generic ABS @CORE One", - "from": "system", - "setting_id": "Wbpc2Ddzc3zPnQVr", - "filament_id": "Prusa Generic ABS @CORE One HF 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.8 nozzle" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "slow_down_layer_time": [ - "25" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json deleted file mode 100644 index a5a1f6cce1..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @CORE One.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @CORE One", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "NajoyXhNAiyJyaRq", - "filament_id": "Prusa Generic ABS @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "40" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "20" - ], - "fan_min_speed": [ - "15" - ], - "filament_cost": [ - "27.82" - ], - "filament_density": [ - "1.04" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "35" - ], - "filament_notes": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "filament_type": [ - "ABS" - ], - "filament_vendor": [ - "Generic" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "idle_temperature": [ - "130" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "overhang_fan_speed": [ - "25" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "slow_down_layer_time": [ - "20" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json deleted file mode 100644 index 9cb0f8b001..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.25.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.25", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "NdGEi7BdP59bqz53", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.55" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json deleted file mode 100644 index e1d4f272ae..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.6.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.6", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "f8RXAaEZ13jSgN9u", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json deleted file mode 100644 index a867f7d6a6..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS 0.8.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MINIIS 0.8", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "0QdQCdtcKqM9HhpD", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json deleted file mode 100644 index c52dd45677..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MINIIS.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MINIIS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "LmdcShjNmbZ8E5fo", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json deleted file mode 100644 index e141e4925d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.25.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.25", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "bQgom9OdLzHf862f", - "filament_id": "GFB99_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.09" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json deleted file mode 100644 index 9108be7bd0..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.6.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.6", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "juio4SnE9x7bcYdO", - "filament_id": "GFB99_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json deleted file mode 100644 index 67c49bfe9a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5 0.8.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK3.5 0.8", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "dRt2nKkJ0saWba5s", - "filament_id": "GFB99_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json deleted file mode 100644 index c966113193..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK3.5.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK3.5", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "etTLu2Uk95XriBxT", - "filament_id": "GFB99_2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json deleted file mode 100644 index 3cbcf73b85..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "Yeqfgyq1l0b1tCaT", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_start_gcode": [ - "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ], - "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json deleted file mode 100644 index fb9f1a07e7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.6.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S 0.6", - "inherits": "Prusa Generic ABS @MK4S", - "from": "system", - "setting_id": "VVzzIN41B5ADTIeQ", - "filament_id": "Generic ABS @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json deleted file mode 100644 index 856f2cfe6b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S 0.8.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S 0.8", - "inherits": "Prusa Generic ABS @MK4S", - "from": "system", - "setting_id": "4705fRqWWP2GZOK8", - "filament_id": "Generic ABS @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json deleted file mode 100644 index 8faf91c1df..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.4.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.4", - "inherits": "Prusa Generic ABS @MK4S", - "from": "system", - "setting_id": "8iqhyZkLiVCvZYLa", - "filament_id": "Generic ABS @MK4S HF0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.4 nozzle" - ], - "fan_max_speed": "15", - "filament_max_volumetric_speed": [ - "26" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.015{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json deleted file mode 100644 index 27f7e69c16..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.5", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "bf8ANklVcC0xW1rT", - "filament_id": "Generic ABS @MK4S HF0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json deleted file mode 100644 index dd6439a0e4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.6", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "ZB9vO7AnRqMDCrOy", - "filament_id": "Generic ABS @MK4S HF0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "34" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json deleted file mode 100644 index 3b359aa2fd..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S HF0.8.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S HF0.8", - "inherits": "Prusa Generic ABS @MK4S HF0.4", - "from": "system", - "setting_id": "7cx9gZh2vUCR0ELG", - "filament_id": "Generic ABS @MK4S HF0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.8 nozzle" - ], - "fan_min_speed": "15", - "filament_max_volumetric_speed": [ - "36" - ], - "slow_down_layer_time": "25" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json deleted file mode 100644 index 6880c7850d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @MK4S.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @MK4S", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "mDDX6Hdt6Ee00Iqb", - "filament_id": "Generic ABS @MK4S", - "instantiation": "true", - "close_fan_the_first_x_layers": "4", - "compatible_printers": [ - "Prusa MK4S 0.25 nozzle", - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle" - ], - "default_filament_colour": "#FFF2EC", - "fan_max_speed": "10", - "filament_cost": [ - "27.82" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": "35", - "filament_notes": [ - "" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ], - "hot_plate_temp": "110", - "hot_plate_temp_initial_layer": "100", - "overhang_fan_speed": "20", - "reduce_fan_stop_start_freq": "0", - "slow_down_layer_time": "20", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json deleted file mode 100644 index 3aef5fc5e9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL 5T.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @XL 5T", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "BVYagI9PtDtO1Jhu", - "instantiation": "true", - "nozzle_temperature_intial_layer": "255", - "nozzle_temperature": "255", - "hot_plate_temp_initial_layer": "100", - "hot_plate_temp": "105", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "20" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "overhang_fan_speed": [ - "25" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "filament_loading_speed_start": "19", - "filament_loading_speed": "14", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", - "filament_cooling_moves": "5", - "filament_cooling_initial_speed": "10", - "filament_cooling_final_speed": "50", - "filament_retract_lift_below": "1.5", - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_volume": [ - "5" - ], - "filament_multitool_ramming_flow": [ - "40" - ], - "filament_stamping_distance": [ - "45" - ], - "filament_stamping_loading_speed": [ - "29" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 5T 0.25 nozzle", - "Prusa XL 5T 0.3 nozzle", - "Prusa XL 5T 0.4 nozzle", - "Prusa XL 5T 0.5 nozzle", - "Prusa XL 5T 0.6 nozzle", - "Prusa XL 5T 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json b/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json deleted file mode 100644 index 2abed48083..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS @XL.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS @XL", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "fN9NUlg8l5DWy4LN", - "instantiation": "true", - "nozzle_temperature_intial_layer": "255", - "nozzle_temperature": "255", - "hot_plate_temp_initial_layer": "100", - "hot_plate_temp": "105", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "20" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "overhang_fan_speed": [ - "25" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "filament_loading_speed_start": "19", - "filament_loading_speed": "14", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", - "filament_cooling_moves": "5", - "filament_cooling_initial_speed": "10", - "filament_cooling_final_speed": "50", - "filament_retract_lift_below": "1.5", - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 0.25 nozzle", - "Prusa XL 0.3 nozzle", - "Prusa XL 0.4 nozzle", - "Prusa XL 0.5 nozzle", - "Prusa XL 0.6 nozzle", - "Prusa XL 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json deleted file mode 100644 index 287f5d03f9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.6.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS 0.6", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "86pFdkE3ly08xst7", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json deleted file mode 100644 index 358d9a3c46..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS 0.8.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS 0.8", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "yn9imamHaXlFDsPr", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json deleted file mode 100644 index 1b72e67a4d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MINIIS.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MINIIS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "KFoCfgUW9k9Yglwj", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "filament_retraction_length": [ - "2.7" - ], - "filament_retraction_minimum_travel": [ - "3" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json deleted file mode 100644 index 1622abdbf8..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.6.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5 0.6", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "IF0vGesJrPxKZhhP", - "filament_id": "GFB99_6", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "34" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json deleted file mode 100644 index bb6fc8b41e..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5 0.8.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5 0.8", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "Bl3iXBs56hdXM9SE", - "filament_id": "GFB99_7", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json deleted file mode 100644 index b6a08a7c20..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS HF @MK3.5.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS HF @MK3.5", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "0luFxwjErjX80SXh", - "filament_id": "GFB99_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ABS.json b/resources/profiles/Prusa/filament/Prusa Generic ABS.json deleted file mode 100644 index 0f77dd0216..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ABS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "pqQMpMgbSN3XvTdK", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "filament_start_gcode": [ - "; Filament gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json deleted file mode 100644 index 5e47c117c6..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One 0.6", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "GB4mI21wSfo3jfnQ", - "filament_id": "Prusa Generic ASA @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json deleted file mode 100644 index 74cf13fd6a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One 0.8.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One 0.8", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "jwPZBZ4B116kCVu9", - "filament_id": "Prusa Generic ASA @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle" - ], - "fan_max_speed": [ - "30" - ], - "overhang_fan_speed": [ - "30" - ], - "slow_down_layer_time": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json deleted file mode 100644 index 8fdca4347e..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.4.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.4", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "3SHxmODIq9SCK4Kd", - "filament_id": "Prusa Generic ASA @CORE One HF 0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "26" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "265" - ], - "nozzle_temperature_initial_layer": [ - "265" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json deleted file mode 100644 index 5f8eaeca43..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.5.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.5", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "RBSMuMnrcTyregVJ", - "filament_id": "Prusa Generic ASA @CORE One HF 0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "265" - ], - "nozzle_temperature_initial_layer": [ - "265" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json deleted file mode 100644 index 39b37c3ed8..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.6.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.6", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "5ezNirZa3m7Oi1Ts", - "filament_id": "Prusa Generic ASA @CORE One HF 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "34" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "265" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json deleted file mode 100644 index 782ea4ce94..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One HF 0.8.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One HF 0.8", - "inherits": "Prusa Generic ASA @CORE One", - "from": "system", - "setting_id": "EtHBkeDF0LvudfBi", - "filament_id": "Prusa Generic ASA @CORE One HF 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.8 nozzle" - ], - "fan_max_speed": [ - "30" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.015{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "overhang_fan_speed": [ - "30" - ], - "slow_down_layer_time": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json deleted file mode 100644 index 2cffdfabe5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @CORE One.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @CORE One", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "Pg9KDqFB63PFJo3Q", - "filament_id": "Prusa Generic ASA @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "40" - ], - "close_fan_the_first_x_layers": [ - "4" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle" - ], - "fan_cooling_layer_time": [ - "20" - ], - "fan_max_speed": [ - "25" - ], - "fan_min_speed": [ - "20" - ], - "filament_cost": [ - "35.28" - ], - "filament_density": [ - "1.07" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "35" - ], - "filament_notes": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "filament_type": [ - "ASA" - ], - "filament_vendor": [ - "Prusa Polymers" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "idle_temperature": [ - "130" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "overhang_fan_speed": [ - "25" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json deleted file mode 100644 index 213f887ea8..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.25.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.25", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "oLhpDGV7BIMFqZZq", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.55" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json deleted file mode 100644 index f94c769d78..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.6.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.6", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "CN91PnsqqI5CTRhd", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json deleted file mode 100644 index 0ba51d264d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS 0.8.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MINIIS 0.8", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "Mg0Sh8QULakXYt0m", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json deleted file mode 100644 index 10aaaf1503..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MINIIS.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MINIIS", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "StIz1ZclM5WV6MCC", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json deleted file mode 100644 index ca315a91c4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.25.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.25", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "EVFkOOWqYWkUZRQG", - "filament_id": "GFB98_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.09" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json deleted file mode 100644 index f578c5e72a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.6.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.6", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "LW2yi7y86rJ59LMi", - "filament_id": "GFB98_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json deleted file mode 100644 index 20625fbc8d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5 0.8.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK3.5 0.8", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "5iwLdW6pq5Y4Aziw", - "filament_id": "GFB98_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json deleted file mode 100644 index b7825b00e3..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK3.5.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK3.5", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "UaLDui75hljyKAkI", - "filament_id": "GFB98_2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json deleted file mode 100644 index 10905e3a24..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "ubNQKQ8Ex6khEWaI", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_start_gcode": [ - "; Filament gcode\nM900 K{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json deleted file mode 100644 index 430313b6e5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.6.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S 0.6", - "inherits": "Prusa Generic ASA @MK4S", - "from": "system", - "setting_id": "j5YvdepMw4z29kzr", - "filament_id": "Prusament ASA @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ], - "nozzle_temperature": "255", - "slow_down_layer_time": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json deleted file mode 100644 index 5853f7bc3f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S 0.8.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S 0.8", - "inherits": "Prusa Generic ASA @MK4S", - "from": "system", - "setting_id": "FtVjP8q0MzM0vr2J", - "filament_id": "Prusament ASA @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ], - "fan_max_speed": "15", - "fan_min_speed": "15", - "slow_down_layer_time": "18" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json deleted file mode 100644 index 8055c5926b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.4.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.4", - "inherits": "Prusa Generic ASA @MK4S", - "from": "system", - "setting_id": "na3FnleO5uhDF7Yr", - "filament_id": "Prusament ASA @MK4S HF0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "26" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.015{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\nM142 S40 ; set heatbreak target temp" - ], - "nozzle_temperature": "265", - "nozzle_temperature_initial_layer": "265", - "slow_down_layer_time": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json deleted file mode 100644 index 6bf46c7fdc..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.5", - "inherits": "Prusa Generic ASA @MK4S HF0.4", - "from": "system", - "setting_id": "meEXtenGq7N4dWf3", - "filament_id": "Prusament ASA @MK4S HF0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json deleted file mode 100644 index bd0250e1e9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.6.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.6", - "inherits": "Prusa Generic ASA @MK4S HF0.4", - "from": "system", - "setting_id": "o0UhIK80Y28KX3AK", - "filament_id": "Prusament ASA @MK4S HF0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "fan_max_speed": "15", - "fan_min_speed": "15", - "filament_max_volumetric_speed": [ - "34" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json deleted file mode 100644 index 3c06463b06..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S HF0.8.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S HF0.8", - "inherits": "Prusa Generic ASA @MK4S HF0.4", - "from": "system", - "setting_id": "VDDgOXq5iphlyQ5U", - "filament_id": "Prusament ASA @MK4S HF0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.8 nozzle" - ], - "fan_max_speed": "15", - "fan_min_speed": "15", - "filament_max_volumetric_speed": [ - "36" - ], - "nozzle_temperature": "270", - "nozzle_temperature_initial_layer": "270", - "slow_down_layer_time": "20" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json deleted file mode 100644 index dfc2270174..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA @MK4S.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA @MK4S", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "5BZ0OsiwFPYGCcBg", - "filament_id": "Prusament ASA @MK4S", - "instantiation": "true", - "close_fan_the_first_x_layers": "4", - "compatible_printers": [ - "Prusa MK4S 0.25 nozzle", - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle" - ], - "default_filament_colour": "#FFF2EC", - "fan_cooling_layer_time": "20", - "fan_max_speed": "12", - "fan_min_speed": "12", - "filament_cost": [ - "35.28" - ], - "filament_density": [ - "1.07" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": "35", - "filament_notes": [ - "" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" - ], - "hot_plate_temp": "110", - "overhang_fan_speed": "20", - "slow_down_layer_time": "10", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json deleted file mode 100644 index 2f8cb00374..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.6.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS 0.6", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "uf2mhiPodkiOu8Ui", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json deleted file mode 100644 index 2a238156f7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS 0.8.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS 0.8", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "GMfOVAhKgKoiGZH5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "35" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json deleted file mode 100644 index 9f97b95631..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MINIIS.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MINIIS", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "o8mGAPApXYWIvPhm", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json deleted file mode 100644 index a2288b5602..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.6.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5 0.6", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "TwgQePxtpUic69Yw", - "filament_id": "GFB98_6", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "34" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json deleted file mode 100644 index 719e8c0d7a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5 0.8.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5 0.8", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "TC1QAhU8v7mruXHK", - "filament_id": "GFB98_7", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json deleted file mode 100644 index c514c44cef..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA HF @MK3.5.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA HF @MK3.5", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "1s3xgWuvTP6UvMG7", - "filament_id": "GFB98_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "cool_plate_temp": [ - "100" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "100" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "filament_max_volumetric_speed": [ - "26" - ], - "fan_max_speed": [ - "15" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_layer_time": [ - "20" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic ASA.json b/resources/profiles/Prusa/filament/Prusa Generic ASA.json deleted file mode 100644 index 85f1d08da6..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic ASA.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "i5Zm7qbFAtsgG4mF", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "filament_start_gcode": [ - "; Filament gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json deleted file mode 100644 index 467a0e7aad..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL 5T.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic FLEX @XL 5T", - "inherits": "fdm_filament_flex", - "from": "system", - "setting_id": "PaXKTb31IFVovWiK", - "instantiation": "true", - "filament_loading_speed_start": "3", - "filament_loading_speed": "28", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "90", - "filament_load_time": "0", - "filament_unload_time": "0", - "filament_cooling_moves": "4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_final_speed": "3.4", - "filament_retract_lift_below": "0.6", - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "40" - ], - "filament_multitool_ramming_flow": [ - "2.5" - ], - "compatible_printers": [ - "Prusa XL 5T 0.25 nozzle", - "Prusa XL 5T 0.3 nozzle", - "Prusa XL 5T 0.4 nozzle", - "Prusa XL 5T 0.5 nozzle", - "Prusa XL 5T 0.6 nozzle", - "Prusa XL 5T 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json b/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json deleted file mode 100644 index c6fd096196..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic FLEX @XL.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic FLEX @XL", - "inherits": "fdm_filament_flex", - "from": "system", - "setting_id": "b5AA45MlL14moY71", - "instantiation": "true", - "filament_loading_speed_start": "3", - "filament_loading_speed": "28", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "90", - "filament_load_time": "0", - "filament_unload_time": "0", - "filament_cooling_moves": "4", - "filament_cooling_initial_speed": "2.2", - "filament_cooling_final_speed": "3.4", - "filament_retract_lift_below": "0.6", - "filament_multitool_ramming": [ - "0" - ], - "filament_multitool_ramming_volume": [ - "40" - ], - "filament_multitool_ramming_flow": [ - "2.5" - ], - "compatible_printers": [ - "Prusa XL 0.25 nozzle", - "Prusa XL 0.3 nozzle", - "Prusa XL 0.4 nozzle", - "Prusa XL 0.5 nozzle", - "Prusa XL 0.6 nozzle", - "Prusa XL 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json deleted file mode 100644 index 7fdf301829..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.25.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.25", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "tGSqS5YX8FXkVAKa", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.55" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json deleted file mode 100644 index ada7470a27..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.6.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.6", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "u3ZeKEiAwme06ioU", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json deleted file mode 100644 index f08a354372..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS 0.8.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MINIIS 0.8", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "nE90oPuU8lRFVBCl", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "pressure_advance": [ - "0.07" - ], - "enable_pressure_advance": [ - "1" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json deleted file mode 100644 index 1f62ce1a85..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MINIIS.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MINIIS", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "hda5VGcBTJOFu6B0", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json deleted file mode 100644 index a7f7c13c96..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.25.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.25", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "4LeqziiUcsZFvsqn", - "filament_id": "GFN99_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.09" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json deleted file mode 100644 index 4a0860931c..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.6.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.6", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "FoUTZTxQNZRSUZqi", - "filament_id": "GFN99_2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json deleted file mode 100644 index ef6a9174fb..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5 0.8.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MK3.5 0.8", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "7Qe2dHRqSOhsuoPn", - "filament_id": "GFN99_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "pressure_advance": [ - "0.01" - ], - "enable_pressure_advance": [ - "1" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json deleted file mode 100644 index db9b97feff..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA @MK3.5.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA @MK3.5", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "HIOtwj2ImWrlXkld", - "filament_id": "GFN99_1", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json deleted file mode 100644 index c262a5fe97..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.25.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.25", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "R9H0mIGTEh4rxRag", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "1.02" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json deleted file mode 100644 index 61047938ef..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.6.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.6", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "qy8b2cQmrhmxfUfm", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.22" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json deleted file mode 100644 index e38f123038..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS 0.8.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS 0.8", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "PNdZVpjyekMxgAWx", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.15" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json deleted file mode 100644 index a41ec893e7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MINIIS.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MINIIS", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "B2SFfVrYjPnN9rw3", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.36" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json deleted file mode 100644 index db39929ab4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.25.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.25", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "BjLde5wICEYFSlu1", - "filament_id": "GFN98_4", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.14" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json deleted file mode 100644 index 0607f4afe2..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.6.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.6", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "XgIsgzltjlTU8ixC", - "filament_id": "GFN98_2", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.022" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json deleted file mode 100644 index 3d04097b7d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5 0.8.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5 0.8", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "b2fjpGuYwbeo7O9K", - "filament_id": "GFN98_3", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json deleted file mode 100644 index bf54572e72..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF @MK3.5.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF @MK3.5", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ko8pHTrnZTzz6LyX", - "filament_id": "GFN98_1", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json deleted file mode 100644 index 5144b143d6..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA-CF.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "bptwthfCtglFSoMw", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle", - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PA.json b/resources/profiles/Prusa/filament/Prusa Generic PA.json deleted file mode 100644 index 9893d5a390..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PA.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "lWO6oNoV0wjzRVja", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle", - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json deleted file mode 100644 index cb00cb55ac..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.25.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.25", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "P9dO2M6dPICX7rhQ", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.55" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json deleted file mode 100644 index f747f7e54f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.6.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.6", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "uAzPBVsMr6eS1XXS", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json deleted file mode 100644 index 0a59345eef..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS 0.8.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MINIIS 0.8", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "MZd6zhq1pvhDj6yz", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json deleted file mode 100644 index 8cbe33d5b7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MINIIS.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MINIIS", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "H7HoG0RfPLMTnCEo", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "7" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json deleted file mode 100644 index cf1046b78b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.25.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.25", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "365PSnHIwQoBabi7", - "filament_id": "GFC99_4", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.14" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json deleted file mode 100644 index 5641ffefea..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.6.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.6", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "zullllDHKByF2PMu", - "filament_id": "GFC99_2", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.022" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json deleted file mode 100644 index 2118c4dc43..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5 0.8.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MK3.5 0.8", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "TTIxalWBM5b6YTJ0", - "filament_id": "GFC99_3", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json deleted file mode 100644 index 06d150cddc..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC @MK3.5.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC @MK3.5", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "2h9EbPiUgE3BIHVb", - "filament_id": "GFC99_1", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json deleted file mode 100644 index bc82e730f2..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.6.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MINIIS 0.6", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "oj7iq8Bsz8lYyoG8", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "35" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json deleted file mode 100644 index d864903081..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS 0.8.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MINIIS 0.8", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "SK8h5tE5di3YWaJp", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "29" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json deleted file mode 100644 index 96720cc606..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MINIIS.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MINIIS", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "onMXXnQNjbSimzbW", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "24" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json deleted file mode 100644 index abcfde31e4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.6.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MK3.5 0.6", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "MAtF0WCx6uLte1Bq", - "filament_id": "GFC99_5", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "30" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.022" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json deleted file mode 100644 index d10c44bebe..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5 0.8.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MK3.5 0.8", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "Om8P3dn8wY6CbdQg", - "filament_id": "GFC99_6", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "36" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json deleted file mode 100644 index 6e6c9f3747..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC HF @MK3.5.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC HF @MK3.5", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "uGi7QoODY99zHuCt", - "filament_id": "GFC99_4", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "24" - ], - "filament_flow_ratio": [ - "1" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PC.json b/resources/profiles/Prusa/filament/Prusa Generic PC.json deleted file mode 100644 index 3cb8ec5c0d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PC.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "51vavWbGjxnBwH7e", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json deleted file mode 100644 index 6e1ac6e621..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.6.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One 0.6", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "plb6gY1isTp10Unr", - "filament_id": "Prusa Generic PETG @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "17" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json deleted file mode 100644 index 7d19ded509..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One 0.8.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One 0.8", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "WISyN9WbqoZW5bBy", - "filament_id": "Prusa Generic PETG @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "65" - ], - "filament_max_volumetric_speed": [ - "22" - ], - "filament_retract_before_wipe": [ - "50" - ], - "filament_z_hop": [ - "0.6" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "overhang_fan_speed": [ - "65" - ], - "slow_down_layer_time": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json deleted file mode 100644 index cb0eb3fb5b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.4.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.4", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "hMxEpxx9ERuIq28Z", - "filament_id": "Prusa Generic PETG @CORE One HF 0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "22" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json deleted file mode 100644 index 53e681186f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.5.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.5", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "HtW04UsVx5VpeLc9", - "filament_id": "Prusa Generic PETG @CORE One HF 0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "27" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "slow_down_layer_time": [ - "10" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json deleted file mode 100644 index a6a2b9fc55..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.6.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.6", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "29TFTfss7xVear5j", - "filament_id": "Prusa Generic PETG @CORE One HF 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.6 nozzle" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "31" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json deleted file mode 100644 index 05b926349b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One HF 0.8.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One HF 0.8", - "inherits": "Prusa Generic PETG @CORE One", - "from": "system", - "setting_id": "N91ct2U3Y3jOat0g", - "filament_id": "Prusa Generic PETG @CORE One HF 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.8 nozzle" - ], - "fan_cooling_layer_time": [ - "35" - ], - "fan_max_speed": [ - "65" - ], - "filament_max_volumetric_speed": [ - "37" - ], - "filament_retract_before_wipe": [ - "50" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.044{elsif nozzle_diameter[filament_extruder_id]==0.6}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.022{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_z_hop": [ - "0.6" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "overhang_fan_speed": [ - "65" - ], - "slow_down_layer_time": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json deleted file mode 100644 index 3e914c0ab9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @CORE One.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @CORE One", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "VbFWb2QCAMxcrTAW", - "filament_id": "Prusa Generic PETG @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "35" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle" - ], - "fan_cooling_layer_time": [ - "25" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "27.82" - ], - "filament_density": [ - "1.27" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "35" - ], - "filament_notes": [ - "" - ], - "filament_retract_before_wipe": [ - "20" - ], - "filament_retraction_length": [ - "0.8" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.053{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_type": [ - "PETG" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "1" - ], - "filament_z_hop": [ - "1.5" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "5" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "idle_temperature": [ - "130" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "overhang_fan_speed": [ - "60" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "9" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json deleted file mode 100644 index b804e798b1..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.25.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.25", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "u4zA4rasW1vfwG1o", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "1.02" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json deleted file mode 100644 index 8d4d00ea99..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.6.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.6", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "QJQIAwmRSZW3hNI4", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "17" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.22" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json deleted file mode 100644 index 81c4d41aaf..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS 0.8.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MINIIS 0.8", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "nXFZVAKBc3hkxbRt", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "20" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.15" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json deleted file mode 100644 index 8803f3e7fd..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MINIIS.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MINIIS", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "nXB864FJ4Dbz5oXc", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json deleted file mode 100644 index eccfa418a9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.25.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.25", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "g5YTLp0ZhzbpCD2h", - "filament_id": "GFG99_5", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.18" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json deleted file mode 100644 index beacc12d5f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.6.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.6", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "6FATkctkE3RaWnWQ", - "filament_id": "GFG99_3", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "17" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json deleted file mode 100644 index b543c2ffcf..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5 0.8.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK3.5 0.8", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "ITT0YpAms3lzeSBk", - "filament_id": "GFG99_4", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "20" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.018" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json deleted file mode 100644 index e52a1b8628..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK3.5.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK3.5", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "71gokqKp7e6fhhf4", - "filament_id": "GFG99_2", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.052" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json deleted file mode 100644 index b0e684dd68..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "Xk2dCGMzSaT73Gq5", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.035{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ], - "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json deleted file mode 100644 index 88d4bb1a2f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S 0.6", - "inherits": "Prusa Generic PETG @MK4S", - "from": "system", - "setting_id": "Pci5FyYkl7E87APR", - "filament_id": "Generic PETG @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ], - "fan_cooling_layer_time": "22", - "filament_max_volumetric_speed": [ - "17" - ], - "overhang_fan_speed": "45", - "slow_down_layer_time": "10" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json deleted file mode 100644 index 358eac5276..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S 0.8.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S 0.8", - "inherits": "Prusa Generic PETG @MK4S", - "from": "system", - "setting_id": "gBfDSTXrnY1HRyw7", - "filament_id": "Generic PETG @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ], - "fan_cooling_layer_time": "25", - "fan_max_speed": "45", - "fan_min_speed": "25", - "filament_max_volumetric_speed": [ - "22" - ], - "filament_retract_before_wipe": "50", - "nozzle_temperature": "245", - "nozzle_temperature_initial_layer": "240", - "overhang_fan_speed": "45", - "slow_down_layer_time": "18" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json deleted file mode 100644 index efbf8db0c7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.4.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.4", - "inherits": "Prusa Generic PETG @MK4S", - "from": "system", - "setting_id": "4pbIJVV1D2h5O3WZ", - "filament_id": "Generic PETG @MK4S HF0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.044{elsif nozzle_diameter[0]==0.6}0.035{elsif nozzle_diameter[0]==0.8}0.022{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ], - "nozzle_temperature": "245", - "nozzle_temperature_initial_layer": "235" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json deleted file mode 100644 index 3225bdfb2c..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.5.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.5", - "inherits": "Prusa Generic PETG @MK4S HF0.4", - "from": "system", - "setting_id": "vO26JgugJEsX5z6a", - "filament_id": "Generic PETG @MK4S HF0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "29" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json deleted file mode 100644 index 56e0d1b40d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.6.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.6", - "inherits": "Prusa Generic PETG @MK4S HF0.4", - "from": "system", - "setting_id": "tv7OUJ7pSPHTkE89", - "filament_id": "Generic PETG @MK4S HF0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "fan_cooling_layer_time": "22", - "filament_max_volumetric_speed": [ - "33" - ], - "nozzle_temperature": "240", - "nozzle_temperature_initial_layer": "230", - "overhang_fan_speed": "45", - "slow_down_layer_time": "10" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json deleted file mode 100644 index 21b47aca86..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S HF0.8.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S HF0.8", - "inherits": "Prusa Generic PETG @MK4S HF0.4", - "from": "system", - "setting_id": "wHfH0a2TgTYr9rWF", - "filament_id": "Generic PETG @MK4S HF0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.8 nozzle" - ], - "fan_cooling_layer_time": "25", - "fan_max_speed": "45", - "filament_max_volumetric_speed": [ - "37" - ], - "filament_retract_before_wipe": "50", - "nozzle_temperature_initial_layer": "240", - "overhang_fan_speed": "45", - "slow_down_layer_time": "18" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json deleted file mode 100644 index b807315eff..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @MK4S.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @MK4S", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "IGfvc0jGdG6evRj8", - "filament_id": "Generic PETG @MK4S", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.25 nozzle", - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle" - ], - "default_filament_colour": "#FF8000", - "fan_max_speed": "40", - "filament_cost": [ - "27.82" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": "35", - "filament_notes": [ - "" - ], - "filament_retract_before_wipe": "20", - "filament_retraction_length": "0.8", - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.053{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 42.4 42.4 42.4 42.4 42.4 | 0.05 42.4 0.45 42.4 0.95 42.4 1.45 42.4 1.95 42.4 2.45 42.4 2.95 42.4 3.45 42.4 3.95 42.4 4.45 42.4 4.95 42.4" - ], - "filament_wipe": "1", - "filament_z_hop": "0.15", - "full_fan_speed_layer": "5", - "hot_plate_temp": "90", - "hot_plate_temp_initial_layer": "85", - "nozzle_temperature": "240", - "nozzle_temperature_initial_layer": "230", - "overhang_fan_speed": "40", - "slow_down_layer_time": "7", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json deleted file mode 100644 index 3a90f36035..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL 5T.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @XL 5T", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "FbtB9og6yXm2ZktD", - "instantiation": "true", - "nozzle_temperature_intial_layer": "230", - "nozzle_temperature": "240", - "hot_plate_temp_initial_layer": "80", - "hot_plate_temp": "80", - "full_fan_speed_layer": "5", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "9" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_loading_speed_start": "50", - "filament_loading_speed": "10", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", - "filament_cooling_moves": "3", - "filament_cooling_initial_speed": "5", - "filament_cooling_final_speed": "2.5", - "filament_retract_lift_below": "1.5", - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_volume": [ - "5" - ], - "filament_multitool_ramming_flow": [ - "40" - ], - "filament_stamping_distance": [ - "45" - ], - "filament_stamping_loading_speed": [ - "29" - ], - "filament_wipe": "1", - "filament_retract_before_wipe": "20%", - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 5T 0.25 nozzle", - "Prusa XL 5T 0.3 nozzle", - "Prusa XL 5T 0.4 nozzle", - "Prusa XL 5T 0.5 nozzle", - "Prusa XL 5T 0.6 nozzle", - "Prusa XL 5T 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json deleted file mode 100644 index 14cb0f610b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG @XL.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG @XL", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "SQKcHBt6A4D8PwFZ", - "instantiation": "true", - "nozzle_temperature_intial_layer": "230", - "nozzle_temperature": "240", - "hot_plate_temp_initial_layer": "80", - "hot_plate_temp": "80", - "full_fan_speed_layer": "5", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "9" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_loading_speed_start": "50", - "filament_loading_speed": "10", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", - "filament_cooling_moves": "3", - "filament_cooling_initial_speed": "5", - "filament_cooling_final_speed": "2.5", - "filament_retract_lift_below": "1.5", - "filament_wipe": "1", - "filament_retract_before_wipe": "20%", - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.053{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 0.25 nozzle", - "Prusa XL 0.3 nozzle", - "Prusa XL 0.4 nozzle", - "Prusa XL 0.5 nozzle", - "Prusa XL 0.6 nozzle", - "Prusa XL 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json deleted file mode 100644 index 03675e06e7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.6.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS 0.6", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "tt7C6k90F51Q17NL", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "17" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.22" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json deleted file mode 100644 index 86b9431c5f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS 0.8.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS 0.8", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "hivI3u5bpGKEJuPR", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "20" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "32" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.15" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json deleted file mode 100644 index 8df215da56..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MINIIS.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MINIIS", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "SHIhEzb8wJonmulf", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "25" - ], - "filament_retraction_minimum_travel": [ - "1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json deleted file mode 100644 index 7459bccd56..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.6.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5 0.6", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "Hw54qxSSdBrcOr4r", - "filament_id": "GFG99_6", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "17" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json deleted file mode 100644 index 36582d0481..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5 0.8.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5 0.8", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "txhzOPQmzVqkcdnP", - "filament_id": "GFG99_7", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "20" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "37" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.018" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json deleted file mode 100644 index 6cd401b6c6..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG HF @MK3.5.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG HF @MK3.5", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "OjIQqC3uJdpcLqlG", - "filament_id": "GFG99_5", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "50" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "10" - ], - "filament_flow_ratio": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.052" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PETG.json b/resources/profiles/Prusa/filament/Prusa Generic PETG.json deleted file mode 100644 index 6963412e1c..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PETG.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "b55Rd5kKGP1A3BM2", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "nozzle_temperature": [ - "240" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.02{elsif nozzle_diameter[0]==0.6}0.04{else}0.08{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K24{elsif nozzle_diameter[0]==0.8};{else}M900 K45{endif} ; Filament gcode LA 1.0" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json deleted file mode 100644 index dbf1862382..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One 0.6", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "8kSIJx0dpaelcAos", - "filament_id": "Prusa Generic PLA @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle" - ], - "nozzle_temperature": [ - "210" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json deleted file mode 100644 index a10f1da37a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One 0.8.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One 0.8", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "qlG6J2sXs80HpkCl", - "filament_id": "Prusa Generic PLA @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "19" - ], - "nozzle_temperature": [ - "225" - ], - "slow_down_layer_time": [ - "17" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json deleted file mode 100644 index 19b8d0c4df..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.4.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.4", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "KzpBU6cAAqm7z0Sg", - "filament_id": "Prusa Generic PLA @CORE One HF 0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.4 nozzle", - "Prusa CORE One L HF 0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "22" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "225" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json deleted file mode 100644 index 786bf2adab..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.5.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.5", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "2G99enCGyOVjrOlt", - "filament_id": "Prusa Generic PLA @CORE One HF 0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "225" - ], - "slow_down_layer_time": [ - "11" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json deleted file mode 100644 index e325a17ac0..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.6.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.6", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "iNQhrPrIj4GphWxI", - "filament_id": "Prusa Generic PLA @CORE One HF 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "225" - ], - "slow_down_layer_time": [ - "15" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json deleted file mode 100644 index cb895cd542..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One HF 0.8.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One HF 0.8", - "inherits": "Prusa Generic PLA @CORE One", - "from": "system", - "setting_id": "YIm5w8btcXZqnNFB", - "filament_id": "Prusa Generic PLA @CORE One HF 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One HF 0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "35" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.026{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": [ - "225" - ], - "slow_down_layer_time": [ - "19" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json deleted file mode 100644 index faaa585e91..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @CORE One.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @CORE One", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NDBqFGNNvKxlmo3V", - "filament_id": "Prusa Generic PLA @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "20" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle", - "Prusa CORE One L 0.4 nozzle" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "85" - ], - "filament_cost": [ - "25.4" - ], - "filament_density": [ - "1.24" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_notes": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One|CORE One L).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.025{elsif nozzle_diameter[filament_extruder_id]==0.6}0.022{elsif nozzle_diameter[filament_extruder_id]==0.8}0.014{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_z_hop": [ - "0.6" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "150" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_speed": [ - "100" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json deleted file mode 100644 index 67a5bbca62..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.25.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.25", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GOomDjqbF1CGAy8O", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.85" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json deleted file mode 100644 index 7bb32fd4d9..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.6.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "rKRRhdLk0Heg3slz", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.17" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json deleted file mode 100644 index 96016b318a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS 0.8.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MINIIS 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "XC2NBSQXjiKIXnTi", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.12" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json deleted file mode 100644 index 2de81c0947..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MINIIS.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MINIIS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GUG6Ug0cZt0gs2Z2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.27" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json deleted file mode 100644 index ade1148e1d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.25.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.25", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "mQtIWbOJ2a4TMYxU", - "filament_id": "GFL99_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.12" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json deleted file mode 100644 index 6b4a104bd0..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.6.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "lSbYoT83cp2tQjk3", - "filament_id": "GFL99_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json deleted file mode 100644 index 13853813fb..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5 0.8.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK3.5 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "kZuzkEvYEluqlAfM", - "filament_id": "GFL99_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.014" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json deleted file mode 100644 index c1d96ae9ed..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK3.5.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK3.5", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "ojwcK3bKU2Jyosws", - "filament_id": "GFL99_2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.035" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json deleted file mode 100644 index 13a0df5f2b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "1aLBPgVpr7XZmmX6", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.026{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_MK4IS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.026{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" - ], - "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json deleted file mode 100644 index b8cffb4b74..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.6.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S 0.6", - "inherits": "Prusa Generic PLA @MK4S", - "from": "system", - "setting_id": "6pZohvVY1eUGi2k8", - "filament_id": "Generic PLA @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle" - ], - "fan_cooling_layer_time": "22", - "nozzle_temperature": "210", - "slow_down_layer_time": "10" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json deleted file mode 100644 index d7bf8889ea..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S 0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S 0.8", - "inherits": "Prusa Generic PLA @MK4S", - "from": "system", - "setting_id": "8z66T4ABcY8PLJMB", - "filament_id": "Generic PLA @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle" - ], - "fan_cooling_layer_time": "25", - "fan_min_speed": "80", - "filament_max_volumetric_speed": [ - "19" - ], - "nozzle_temperature": "225", - "slow_down_layer_time": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json deleted file mode 100644 index d9485b0a57..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.4.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.4", - "inherits": "Prusa Generic PLA @MK4S", - "from": "system", - "setting_id": "LV8qQ1t2CmhHaRSA", - "filament_id": "Generic PLA @MK4S HF0.4", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.4 nozzle" - ], - "filament_max_volumetric_speed": [ - "22" - ], - "filament_start_gcode": [ - "M572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.026{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.015{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 40 40| 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" - ], - "nozzle_temperature": "225" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json deleted file mode 100644 index 7cc2615b2b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.5.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.5", - "inherits": "Prusa Generic PLA @MK4S HF0.4", - "from": "system", - "setting_id": "WH3bJGQGSliMx6ta", - "filament_id": "Generic PLA @MK4S HF0.5", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.5 nozzle" - ], - "fan_cooling_layer_time": "20", - "filament_max_volumetric_speed": [ - "24" - ], - "slow_down_layer_time": "8" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json deleted file mode 100644 index a5f5e8b490..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.6.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.6", - "inherits": "Prusa Generic PLA @MK4S HF0.4", - "from": "system", - "setting_id": "du6Gy8TCxk5z7hPx", - "filament_id": "Generic PLA @MK4S HF0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.6 nozzle" - ], - "fan_cooling_layer_time": "22", - "filament_max_volumetric_speed": [ - "30" - ], - "slow_down_layer_time": "10", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json deleted file mode 100644 index f145d7c0d2..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S HF0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S HF0.8", - "inherits": "Prusa Generic PLA @MK4S HF0.4", - "from": "system", - "setting_id": "aLcAkl8Zt2D5lOTp", - "filament_id": "Generic PLA @MK4S HF0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S HF0.8 nozzle" - ], - "fan_cooling_layer_time": "25", - "fan_min_speed": "80", - "filament_max_volumetric_speed": [ - "35" - ], - "slow_down_layer_time": "15", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json deleted file mode 100644 index e0c8ceedd4..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @MK4S.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @MK4S", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CqlMmArE8Llbji7t", - "filament_id": "Generic PLA @MK4S", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.25 nozzle", - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle" - ], - "default_filament_colour": "#FF8000", - "fan_cooling_layer_time": "17", - "fan_min_speed": "70", - "filament_cost": [ - "25.4" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_notes": [ - "" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.025{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.014{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_ramming_parameters": [ - "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" - ], - "full_fan_speed_layer": "3", - "nozzle_temperature_initial_layer": "230", - "slow_down_layer_time": "6", - "slow_down_min_speed": "20" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json deleted file mode 100644 index 9264a2b0c1..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL 5T.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @XL 5T", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "orBUSq1sDBeMGMON", - "instantiation": "true", - "nozzle_temperature_intial_layer": "215", - "nozzle_temperature": "210", - "hot_plate_temp_initial_layer": "60", - "hot_plate_temp": "60", - "full_fan_speed_layer": "3", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "10" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "filament_loading_speed_start": "50", - "filament_loading_speed": "10", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", - "filament_cooling_moves": "2", - "filament_cooling_initial_speed": "10", - "filament_cooling_final_speed": "3.5", - "filament_retract_lift_below": "0.6", - "filament_multitool_ramming": [ - "1" - ], - "filament_multitool_ramming_volume": [ - "5" - ], - "filament_multitool_ramming_flow": [ - "40" - ], - "filament_stamping_distance": [ - "45" - ], - "filament_stamping_loading_speed": [ - "29" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 5T 0.25 nozzle", - "Prusa XL 5T 0.3 nozzle", - "Prusa XL 5T 0.4 nozzle", - "Prusa XL 5T 0.5 nozzle", - "Prusa XL 5T 0.6 nozzle", - "Prusa XL 5T 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json b/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json deleted file mode 100644 index fd1ffa1425..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA @XL.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA @XL", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "tGG7egsphB0I1i6Z", - "instantiation": "true", - "nozzle_temperature_intial_layer": "215", - "nozzle_temperature": "210", - "hot_plate_temp_initial_layer": "60", - "hot_plate_temp": "60", - "full_fan_speed_layer": "3", - "slow_down_min_speed": "15", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "slow_down_layer_time": [ - "10" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "filament_loading_speed_start": "50", - "filament_loading_speed": "10", - "filament_unloading_speed_start": "100", - "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", - "filament_cooling_moves": "2", - "filament_cooling_initial_speed": "10", - "filament_cooling_final_speed": "3.5", - "filament_retract_lift_below": "0.6", - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*PRINTER_MODEL_XLIS.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "compatible_printers": [ - "Prusa XL 0.25 nozzle", - "Prusa XL 0.3 nozzle", - "Prusa XL 0.4 nozzle", - "Prusa XL 0.5 nozzle", - "Prusa XL 0.6 nozzle", - "Prusa XL 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json deleted file mode 100644 index 7ae24d6fe7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.6.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "A6tgkt5mCN7hFzoU", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.17" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json deleted file mode 100644 index 10353f147e..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS 0.8.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "3MSF1ZEw3D7bVhEI", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "36" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.12" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json deleted file mode 100644 index ea67606d37..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MINIIS.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MINIIS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "eVuV41lUXe9SEmeh", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.27" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json deleted file mode 100644 index fe7364310d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.6.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "IHOsyOhMvOcpHGtG", - "filament_id": "GFL99_6", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "30" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json deleted file mode 100644 index 26f2f013e7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5 0.8.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "GYne0LPI8ooQJe08", - "filament_id": "GFL99_7", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "37" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.014" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json deleted file mode 100644 index 6d89453bd8..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA HF @MK3.5.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA HF @MK3.5", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Bq51JVrGGEktAqIh", - "filament_id": "GFL99_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.035" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json deleted file mode 100644 index 7ec1605d58..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.6.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One 0.6", - "inherits": "Prusa Generic PLA Silk @CORE One", - "from": "system", - "setting_id": "QUaunbCOoBxA8fyJ", - "filament_id": "Prusa Generic PLA Silk @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle", - "Prusa CORE One HF 0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "nozzle_temperature": [ - "215" - ], - "slow_down_layer_time": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json deleted file mode 100644 index fdce38720a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One 0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One 0.8", - "inherits": "Prusa Generic PLA Silk @CORE One", - "from": "system", - "setting_id": "y2IZMYPduRS1mEFL", - "filament_id": "Prusa Generic PLA Silk @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle", - "Prusa CORE One HF 0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "17" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json deleted file mode 100644 index 3cdf40ad50..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @CORE One.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @CORE One", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "CYztrVFVOPD3RHJx", - "filament_id": "Prusa Generic PLA Silk @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "20" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle", - "Prusa CORE One HF 0.4 nozzle", - "Prusa CORE One HF 0.5 nozzle" - ], - "fan_cooling_layer_time": [ - "40" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "85" - ], - "filament_cost": [ - "25.4" - ], - "filament_density": [ - "1.24" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_notes": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_z_hop": [ - "0.6" - ], - "filament_z_hop_types": [ - "Slope Lift" - ], - "full_fan_speed_layer": [ - "3" - ], - "hot_plate_temp": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "idle_temperature": [ - "150" - ], - "nozzle_temperature": [ - "225" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_speed": [ - "100" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "20" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json deleted file mode 100644 index a6597f5edf..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.6.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S 0.6", - "inherits": "Prusa Generic PLA Silk @MK4S", - "from": "system", - "setting_id": "e1pUu3Y5pDr7LzNu", - "filament_id": "Generic PLA Silk @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle", - "Prusa MK4S HF0.6 nozzle" - ], - "fan_cooling_layer_time": "22", - "filament_max_volumetric_speed": [ - "9" - ], - "nozzle_temperature": "215", - "slow_down_layer_time": "10" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json deleted file mode 100644 index f9e7154bdf..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S 0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S 0.8", - "inherits": "Prusa Generic PLA Silk @MK4S", - "from": "system", - "setting_id": "Yw5uZEeqmR9elIn6", - "filament_id": "Generic PLA Silk @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle", - "Prusa MK4S HF0.8 nozzle" - ], - "fan_cooling_layer_time": "25", - "fan_min_speed": "80", - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json deleted file mode 100644 index 1a7cb2de7f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA Silk @MK4S.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA Silk @MK4S", - "inherits": "Prusa Generic PLA @MK4S", - "from": "system", - "setting_id": "ngtF8hwv8cSubcR1", - "filament_id": "Generic PLA Silk @MK4S", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.25 nozzle", - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle", - "Prusa MK4S HF0.4 nozzle", - "Prusa MK4S HF0.5 nozzle" - ], - "filament_max_volumetric_speed": [ - "7" - ], - "filament_start_gcode": [ - "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" - ], - "nozzle_temperature": "225" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json deleted file mode 100644 index 8b41f21ce1..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.25.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.25", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Sv0IcpOJBk95F94d", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.85" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json deleted file mode 100644 index 642ec54a07..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.6.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "tKAu2YX7WADQuJqv", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.17" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json deleted file mode 100644 index 90be6a1703..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS 0.8.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dHVVnfZSJ6xEgzdQ", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.12" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json deleted file mode 100644 index 1be8101e9a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MINIIS.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MINIIS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "VESr5xWPvPIlhyKh", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.27" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json deleted file mode 100644 index 632de6b430..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.25.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.25", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Pi3x8Wj5sdB7TDDK", - "filament_id": "GFL98_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.18" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json deleted file mode 100644 index ec4bb6ee6a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.6.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.6", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "vtxoJOj2lc1qxV3H", - "filament_id": "GFL98_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.025" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json deleted file mode 100644 index eb7f730ef5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5 0.8.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5 0.8", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "9gYj4jTP6y4UmR9s", - "filament_id": "GFL98_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "15" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.018" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json deleted file mode 100644 index df82e01d98..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF @MK3.5.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF @MK3.5", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yQASt4Ej55vgeZAN", - "filament_id": "GFL98_1", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.052" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json b/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json deleted file mode 100644 index 8e24ebcd12..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA-CF.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "NqmFeHNZtfNefmvd", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "filament_ramming_parameters": [ - "250 100 40 40 40 40 40 | 0.05 40 0.45 40 0.95 40 1.45 40 1.95 40 2.45 40 2.95 40 3.45 40 3.95 40 4.45 40 4.95 40" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle", - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle", - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PLA.json b/resources/profiles/Prusa/filament/Prusa Generic PLA.json deleted file mode 100644 index ae5ca3e50c..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PLA.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "pKHhR3Hx6AUoyIO3", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.04{else}0.05{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K18{elsif nozzle_diameter[0]==0.8};{else}M900 K30{endif} ; Filament gcode LA 1.0" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json deleted file mode 100644 index 7391c7c004..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.25.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.25", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "B0Dmo1DvtrwBwM7U", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.55" - ], - "compatible_printers": [ - "Prusa MINIIS 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json deleted file mode 100644 index fadbdc53b2..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.6.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.6", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "yGTFSZeo1sUdCpeO", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json deleted file mode 100644 index 18e1965b76..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS 0.8.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MINIIS 0.8", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "ISdXFzAcVUj3ZIfQ", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json deleted file mode 100644 index 9598a6f09b..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MINIIS.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MINIIS", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "rhZNRY8BNI1TskG2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json deleted file mode 100644 index 440310acd7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.25.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.25", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "ciRHVEjYNqjT5EsD", - "filament_id": "GFS99_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.09" - ], - "compatible_printers": [ - "Prusa MK3.5 0.25 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json deleted file mode 100644 index 7f54ae1a7a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.6.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.6", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "G8TFM51vPvMbGSbX", - "filament_id": "GFS99_2", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json deleted file mode 100644 index 1b6798fd1a..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5 0.8.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MK3.5 0.8", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "hueUgJutZ71scT6F", - "filament_id": "GFS99_3", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json deleted file mode 100644 index 9ac04757e7..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA @MK3.5.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA @MK3.5", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "yaPlNuxryIpkxiOe", - "filament_id": "GFS99_1", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json deleted file mode 100644 index 3bc8a6b7aa..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.6.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS 0.6", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "4C7OAcG8LVPSTJsh", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Prusa MINIIS 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json deleted file mode 100644 index b26ca248ad..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS 0.8.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS 0.8", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "xj6xYUYJ0tAnfgao", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.07" - ], - "compatible_printers": [ - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json deleted file mode 100644 index cd7b4f7b7d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MINIIS.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MINIIS", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "9MNzR7N4A1k64jne", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.19" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json deleted file mode 100644 index bcd14e6b66..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.6.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5 0.6", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "NfhvtCbeYlQ3el2O", - "filament_id": "GFS99_5", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "5" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.012" - ], - "compatible_printers": [ - "Prusa MK3.5 0.6 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json deleted file mode 100644 index 8495914c13..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5 0.8.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5 0.8", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "J5PBEm3LvfpztfXU", - "filament_id": "GFS99_6", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "compatible_printers": [ - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json deleted file mode 100644 index 97b2d1ff89..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA HF @MK3.5.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA HF @MK3.5", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "X2k0n055aaG1zc0u", - "filament_id": "GFS99_4", - "instantiation": "true", - "filament_flow_ratio": [ - "1" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.02" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic PVA.json b/resources/profiles/Prusa/filament/Prusa Generic PVA.json deleted file mode 100644 index 17476b1ce5..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic PVA.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "yLrgUDS7cr4AkOed", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle", - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json deleted file mode 100644 index fff78aec9f..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.6.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @CORE One 0.6", - "inherits": "Prusa Generic TPU @CORE One", - "from": "system", - "setting_id": "OulnL3bWrEpRJbgJ", - "filament_id": "Prusa Generic TPU @CORE One 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.6 nozzle", - "Prusa CORE One HF 0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "3.5" - ], - "filament_z_hop": [ - "0.6" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json deleted file mode 100644 index 4ba3f08222..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One 0.8.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @CORE One 0.8", - "inherits": "Prusa Generic TPU @CORE One", - "from": "system", - "setting_id": "9fAhdX2hOAnUDn1I", - "filament_id": "Prusa Generic TPU @CORE One 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa CORE One 0.8 nozzle", - "Prusa CORE One HF 0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_z_hop": [ - "0.6" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json deleted file mode 100644 index 9cba165705..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @CORE One.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @CORE One", - "inherits": "fdm_filament_flex", - "from": "system", - "setting_id": "VR2WfERGWPIWTRha", - "filament_id": "Prusa Generic TPU @CORE One", - "instantiation": "true", - "chamber_temperature": [ - "30" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "compatible_printers": [ - "Prusa CORE One 0.25 nozzle", - "Prusa CORE One 0.3 nozzle", - "Prusa CORE One 0.4 nozzle", - "Prusa CORE One 0.5 nozzle", - "Prusa CORE One HF 0.4 nozzle", - "Prusa CORE One HF 0.5 nozzle" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "30" - ], - "filament_cost": [ - "82" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": [ - "20" - ], - "filament_diameter": [ - "1.75" - ], - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": [ - "1.08" - ], - "filament_max_volumetric_speed": [ - "2.5" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_notes": [ - "" - ], - "filament_retraction_length": [ - "2.5" - ], - "filament_retraction_minimum_travel": [ - "2" - ], - "filament_retraction_speed": [ - "60" - ], - "filament_soluble": [ - "0" - ], - "filament_start_gcode": [ - "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_type": [ - "FLEX" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "0" - ], - "filament_z_hop": [ - "0" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "idle_temperature": [ - "150" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "overhang_fan_speed": [ - "70" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "10" - ], - "slow_down_min_speed": [ - "15" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json deleted file mode 100644 index 8acb55983c..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MINIIS.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MINIIS", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "TUqkAb8i9HpFdiCy", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1.35" - ], - "filament_flow_ratio": [ - "1.15" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "filament_type": [ - "FLEX" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "210" - ], - "filament_retraction_length": [ - "3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "16" - ], - "filament_retraction_minimum_travel": [ - "6" - ], - "filament_wipe": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "full_fan_speed_layer": [ - "3" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "overhang_fan_speed": [ - "50" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "pressure_advance": [ - "0" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.25 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json deleted file mode 100644 index bc6d7ad126..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK3.5.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK3.5", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "wfxLtrIAOgG7TKib", - "filament_id": "GFU99_2", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "1.8" - ], - "filament_flow_ratio": [ - "1.15" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "filament_type": [ - "FLEX" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "210" - ], - "filament_retraction_length": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "20" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "full_fan_speed_layer": [ - "3" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "overhang_fan_speed": [ - "50" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "pressure_advance": [ - "0" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle", - "Prusa MK3.5 0.25 nozzle", - "Prusa MK3.5 0.6 nozzle", - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json deleted file mode 100644 index 01db48abbf..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "9KjaEcwnQA8CsnVy", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "filament_flow_ratio": [ - "1.08" - ], - "compatible_printers": [ - "Prusa MK4 0.25 nozzle", - "Prusa MK4 0.4 nozzle", - "Prusa MK4 0.6 nozzle", - "Prusa MK4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json deleted file mode 100644 index 89b8a94856..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.6.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4S 0.6", - "inherits": "Prusa Generic TPU @MK4S", - "from": "system", - "setting_id": "3zJSkjnxFgeAbkhY", - "filament_id": "Generic FLEX @MK4S 0.6", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.6 nozzle", - "Prusa MK4S HF0.6 nozzle" - ], - "filament_max_volumetric_speed": [ - "6" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json deleted file mode 100644 index 0230b22bea..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S 0.8.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4S 0.8", - "inherits": "Prusa Generic TPU @MK4S", - "from": "system", - "setting_id": "tRRHfIUwFo1C8Q3B", - "filament_id": "Generic FLEX @MK4S 0.8", - "instantiation": "true", - "compatible_printers": [ - "Prusa MK4S 0.8 nozzle", - "Prusa MK4S HF0.8 nozzle" - ], - "filament_max_volumetric_speed": [ - "9" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json b/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json deleted file mode 100644 index 3fec5776ec..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU @MK4S.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU @MK4S", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "JxNaZsG7Y2rQKATV", - "filament_id": "Generic FLEX @MK4S", - "instantiation": "true", - "close_fan_the_first_x_layers": "3", - "compatible_printers": [ - "Prusa MK4S 0.3 nozzle", - "Prusa MK4S 0.4 nozzle", - "Prusa MK4S 0.5 nozzle", - "Prusa MK4S HF0.4 nozzle", - "Prusa MK4S HF0.5 nozzle" - ], - "default_filament_colour": "#008000", - "fan_max_speed": "50", - "fan_min_speed": "30", - "filament_cost": [ - "82" - ], - "filament_density": [ - "1.22" - ], - "filament_deretraction_speed": "20", - "filament_end_gcode": [ - "; Filament-specific end gcode" - ], - "filament_flow_ratio": "1.08", - "filament_max_volumetric_speed": [ - "3" - ], - "filament_notes": [ - "" - ], - "filament_retraction_length": "2.5", - "filament_retraction_minimum_travel": "2", - "filament_retraction_speed": "60", - "filament_start_gcode": [ - "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" - ], - "filament_type": [ - "FLEX" - ], - "filament_wipe": "0", - "filament_z_hop": "0", - "hot_plate_temp": "50", - "hot_plate_temp_initial_layer": "50", - "nozzle_temperature": "230", - "nozzle_temperature_initial_layer": "230", - "overhang_fan_speed": "70", - "slow_down_layer_time": "10", - "slow_down_min_speed": "15" -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json deleted file mode 100644 index 271c36e183..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MINIIS.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU HF @MINIIS", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "a9fmPCI24EJoJ5OH", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "10" - ], - "filament_flow_ratio": [ - "1.15" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "filament_type": [ - "FLEX" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "210" - ], - "filament_retraction_length": [ - "3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "16" - ], - "filament_retraction_minimum_travel": [ - "6" - ], - "filament_wipe": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "full_fan_speed_layer": [ - "3" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "overhang_fan_speed": [ - "50" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "pressure_advance": [ - "0" - ], - "compatible_printers": [ - "Prusa MINIIS 0.4 nozzle", - "Prusa MINIIS 0.6 nozzle", - "Prusa MINIIS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json b/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json deleted file mode 100644 index 91e97c5324..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU HF @MK3.5.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU HF @MK3.5", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "Gfuy9ZSCpJw3Usa6", - "filament_id": "GFU99_3", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "1.15" - ], - "hot_plate_temp": [ - "50" - ], - "hot_plate_temp_initial_layer": [ - "50" - ], - "filament_type": [ - "FLEX" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature": [ - "210" - ], - "filament_retraction_length": [ - "2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "20" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "full_fan_speed_layer": [ - "3" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "slow_down_min_speed": [ - "10" - ], - "enable_overhang_bridge_fan": [ - "1" - ], - "overhang_fan_threshold": [ - "50%" - ], - "overhang_fan_speed": [ - "50" - ], - "support_material_interface_fan_speed": [ - "-1" - ], - "pressure_advance": [ - "0" - ], - "compatible_printers": [ - "Prusa MK3.5 0.4 nozzle", - "Prusa MK3.5 0.25 nozzle", - "Prusa MK3.5 0.6 nozzle", - "Prusa MK3.5 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusa Generic TPU.json b/resources/profiles/Prusa/filament/Prusa Generic TPU.json deleted file mode 100644 index 58324d477d..0000000000 --- a/resources/profiles/Prusa/filament/Prusa Generic TPU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Prusa Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "l9s40Rloq4urv3Y0", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Prusa MK3S 0.25 nozzle", - "Prusa MK3S 0.4 nozzle", - "Prusa MK3S 0.6 nozzle", - "Prusa MK3S 0.8 nozzle", - "Prusa MINI 0.25 nozzle", - "Prusa MINI 0.4 nozzle", - "Prusa MINI 0.6 nozzle", - "Prusa MINI 0.8 nozzle" - ] -} diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json index b3fe97133a..40bb6ee291 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "XlSISsmFlPbj3BOn", - "filament_id": "Prusament ASA @CORE One 0.6", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json index 330f3a7643..71c47268ba 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "89B204vxbuUqB3Os", - "filament_id": "Prusament ASA @CORE One 0.8", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json index ace3c0cb55..e7977e0c94 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "tXktQXr79am1s5UL", - "filament_id": "Prusament ASA @CORE One HF 0.4", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json index 365a4f56a7..26e053cd79 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "YbyojtjXvEtI4Tt3", - "filament_id": "Prusament ASA @CORE One HF 0.5", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json index 9f79b6842a..5bde9d8869 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "35H9TLr1p2Jy767g", - "filament_id": "Prusament ASA @CORE One HF 0.6", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json index b006ea74c1..ba5273d125 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament ASA @CORE One", "from": "system", "setting_id": "efgN1KmROfVKa86P", - "filament_id": "Prusament ASA @CORE One HF 0.8", + "filament_id": "OFmFwUWM", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json index 1ca5222859..b1f2dace26 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "UUTjJ4Y8St3c87jD", - "filament_id": "Prusament ASA @CORE One", + "filament_id": "OFmFwUWM", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json index 87d14f9e8f..43aed0f993 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "IQu91UAWOJOQcUq9", + "filament_id": "OFmFwUWM", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament ASA @XL.json b/resources/profiles/Prusa/filament/Prusament ASA @XL.json index 9f3df999d4..d118538809 100644 --- a/resources/profiles/Prusa/filament/Prusament ASA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament ASA @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "RaEoFoZdXkkOz9yh", + "filament_id": "OFmFwUWM", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "260", "nozzle_temperature": "260", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json index 8698746393..cbbd006468 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PA-CF @CORE One", "from": "system", "setting_id": "sEDEmqR4k65IhJ4D", - "filament_id": "Prusament PA-CF @CORE One 0.6", + "filament_id": "OF54SvEe", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json index c22f07ddb4..434c534282 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PA-CF @CORE One", "from": "system", "setting_id": "gwFsNIMKGU1f2vPS", - "filament_id": "Prusament PA-CF @CORE One 0.8", + "filament_id": "OF54SvEe", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json index c1c87b7041..33382b1974 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "08PdV2lMsSv1JeOt", - "filament_id": "Prusament PA-CF @CORE One", + "filament_id": "OF54SvEe", "instantiation": "true", "chamber_temperature": [ "40" @@ -60,7 +60,7 @@ "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" ], "filament_type": [ - "PA" + "PA11-CF" ], "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json index d287e59aa4..80a9653148 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pa11cf", "from": "system", "setting_id": "FYerOcjToJ3ABpu1", + "filament_id": "OF54SvEe", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json index 6735c31b8a..957a27f8cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PA-CF @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pa11cf", "from": "system", "setting_id": "IrL4iU2kkMBHIw3e", + "filament_id": "OF54SvEe", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json index c31c409a16..5aafb38b43 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "0ytT0Ro3sAjvUPN2", - "filament_id": "Prusament PC Blend @CORE One 0.6", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json index b27cac24c3..a3826bf7cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "WrAImqAV7odcGf8Y", - "filament_id": "Prusament PC Blend @CORE One 0.8", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json index e9431a4a94..4e5b5643bd 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "pEsP537TBR5kozQB", - "filament_id": "Prusament PC Blend @CORE One HF 0.4", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json index 824d9468ea..ab9a127df8 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "3IfLi1ZVCKKbEBUW", - "filament_id": "Prusament PC Blend @CORE One HF 0.5", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json index 707aff7532..642f421819 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "Q8qWw2G7l2UvxGut", - "filament_id": "Prusament PC Blend @CORE One HF 0.6", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json index f75f439c4a..f66f2521c5 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC Blend @CORE One", "from": "system", "setting_id": "LDvckXo1zpccnT4g", - "filament_id": "Prusament PC Blend @CORE One HF 0.8", + "filament_id": "OFvDbkFq", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json index 0fe031c276..34ecd1d759 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "x1SkWhSSkVVIPwCF", - "filament_id": "Prusament PC Blend @CORE One", + "filament_id": "OFvDbkFq", "instantiation": "true", "chamber_temperature": [ "40" diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json index 9e715f9e52..ff60e677cb 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "FOgpd4BtawBtmjPB", + "filament_id": "OFvDbkFq", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "275", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json index 8494169720..d3fdac3873 100644 --- a/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC Blend @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "DLTlxt04GREtOiec", + "filament_id": "OFvDbkFq", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "275", "nozzle_temperature": "275", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json index e12bc8db2b..f4722bb89a 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC-CF @CORE One", "from": "system", "setting_id": "DYPBEKeKBdTenG3S", - "filament_id": "Prusament PC-CF @CORE One 0.6", + "filament_id": "OFjz0a3m", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json index 90bbaf4217..2abf3ab8d7 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PC-CF @CORE One", "from": "system", "setting_id": "0J8ZuIRTB6EgSke8", - "filament_id": "Prusament PC-CF @CORE One 0.8", + "filament_id": "OFjz0a3m", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json index 2d860fe307..0d5622b7ab 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "IK6Z7DVevvmR96Or", - "filament_id": "Prusament PC-CF @CORE One", + "filament_id": "OFjz0a3m", "instantiation": "true", "chamber_temperature": [ "40" @@ -60,7 +60,7 @@ "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS|MK4S|MK3.9S|CORE One).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" ], "filament_type": [ - "PC" + "PC-CF" ], "filament_vendor": [ "Prusa Polymers" diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json index 482a0403df..7ef720791d 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "m1YND6uz3GWeVIBG", + "filament_id": "OFjz0a3m", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json index 7081cd9523..44abf2918e 100644 --- a/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PC-CF @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "Eq5x2CcEUUAZ5aof", + "filament_id": "OFjz0a3m", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "285", "nozzle_temperature": "285", "hot_plate_temp_initial_layer": "100", @@ -37,8 +41,6 @@ "filament_loading_speed": "14", "filament_unloading_speed_start": "100", "filament_unloading_speed": "20", - "filament_load_time": "15", - "filament_unload_time": "12", "filament_cooling_moves": "5", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "50", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json index 83ef41e09e..974cf5b0cc 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "JVKHdd0UyFqnVj9g", - "filament_id": "Prusament PETG @CORE One 0.6", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json index eb6cb9a8fa..c1f2e23890 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "0OCfuaF4u8wo5D20", - "filament_id": "Prusament PETG @CORE One 0.8", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json index f2f309b90c..f34dcd29a7 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "lwT1VxW5OkY36kUX", - "filament_id": "Prusament PETG @CORE One HF 0.4", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json index 08ed962fe6..71001294fa 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "XAgW7fElXxhaKaBT", - "filament_id": "Prusament PETG @CORE One HF 0.5", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json index cc1fe65500..cea5ef7809 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "6aTGEZj2EmpTR1mu", - "filament_id": "Prusament PETG @CORE One HF 0.6", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json index 0f2078b5b4..ec16eb9ef2 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PETG @CORE One", "from": "system", "setting_id": "EmrFLgk6ZkTHAvN8", - "filament_id": "Prusament PETG @CORE One HF 0.8", + "filament_id": "OFkR8E2c", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json index 1a03663b6d..00f78be204 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "LSvba9ds3XTwDMCG", - "filament_id": "Prusament PETG @CORE One", + "filament_id": "OFkR8E2c", "instantiation": "true", "chamber_temperature": [ "35" diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json index e127263ad7..95e9ecc79b 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PETG @XL 5T", - "inherits": "fdm_filament_pet", + "inherits": "Prusament PETG @base", "from": "system", "setting_id": "USigpRWuzpdkT6ZW", "instantiation": "true", @@ -36,8 +36,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "3", "filament_cooling_initial_speed": "5", "filament_cooling_final_speed": "2.5", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @XL.json b/resources/profiles/Prusa/filament/Prusament PETG @XL.json index b552f9ed09..56c2fa7a2b 100644 --- a/resources/profiles/Prusa/filament/Prusament PETG @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PETG @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PETG @XL", - "inherits": "fdm_filament_pet", + "inherits": "Prusament PETG @base", "from": "system", "setting_id": "vPPD8EkKFy5j8pg5", "instantiation": "true", @@ -36,8 +36,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "3", "filament_cooling_initial_speed": "5", "filament_cooling_final_speed": "2.5", diff --git a/resources/profiles/Prusa/filament/Prusament PETG @base.json b/resources/profiles/Prusa/filament/Prusament PETG @base.json new file mode 100644 index 0000000000..a2d5de2e53 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PETG @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Prusament PETG @base", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFkR8E2c", + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json index 647940d644..b699ba216f 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "jGHl1i9Y1oJsLQY8", - "filament_id": "Prusament PLA @CORE One 0.6", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json index 3af2846aa0..b1a3109180 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "ijkbGowmIm8uUYsf", - "filament_id": "Prusament PLA @CORE One 0.8", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json index a44a2fd1c4..8c1d806d98 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.4.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "mf4Muog4IcsgkYoA", - "filament_id": "Prusament PLA @CORE One HF 0.4", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.4 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json index ab7f5b3a37..b91fd4aae0 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.5.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "zJf1Y6eP81j3v8VV", - "filament_id": "Prusament PLA @CORE One HF 0.5", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.5 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json index 7c94b57456..200666edcf 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "UAvqLPGHYOT1B2lC", - "filament_id": "Prusament PLA @CORE One HF 0.6", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.6 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json index 3ba0a21670..84d55886d6 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One HF 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PLA @CORE One", "from": "system", "setting_id": "0N17rx4NFmuHYLQl", - "filament_id": "Prusament PLA @CORE One HF 0.8", + "filament_id": "OFnO4wnf", "instantiation": "true", "compatible_printers": [ "Prusa CORE One HF 0.8 nozzle" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json index 78b1f80425..ddf62b89ac 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "PuujUMjNKLZvZNAH", - "filament_id": "Prusament PLA @CORE One", + "filament_id": "OFnO4wnf", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json index d74ad3f865..ae302e09eb 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PLA @XL 5T", - "inherits": "fdm_filament_pla", + "inherits": "Prusament PLA @base", "from": "system", "setting_id": "3xyT73BMaAvbb1Ej", "instantiation": "true", @@ -33,8 +33,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @XL.json b/resources/profiles/Prusa/filament/Prusament PLA @XL.json index 60825e3109..b5d006dc46 100644 --- a/resources/profiles/Prusa/filament/Prusament PLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PLA @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament PLA @XL", - "inherits": "fdm_filament_pla", + "inherits": "Prusament PLA @base", "from": "system", "setting_id": "PlHq1KqHrreo5W8m", "instantiation": "true", @@ -33,8 +33,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament PLA @base.json b/resources/profiles/Prusa/filament/Prusament PLA @base.json new file mode 100644 index 0000000000..fad8c00435 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament PLA @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Prusament PLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFnO4wnf", + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] +} diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json index 8c979342b3..6516085280 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament PVB @CORE One", "from": "system", "setting_id": "GnslGWS97HuaWX76", - "filament_id": "Prusament PVB @CORE One 0.6", + "filament_id": "OFh7mvPO", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json index 2496ec966d..a001c24fe7 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament PVB @CORE One", "from": "system", "setting_id": "Nn7eVPawILDH4BRW", - "filament_id": "Prusament PVB @CORE One 0.8", + "filament_id": "OFh7mvPO", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json index c3c5cf16c8..4504aa77bf 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "085dGkrnPhatF07x", - "filament_id": "Prusament PVB @CORE One", + "filament_id": "OFh7mvPO", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json index 280a722bb3..2c689937cf 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL 5T.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "DIrPylH6rmu6YA43", + "filament_id": "OFh7mvPO", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", @@ -38,8 +42,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament PVB @XL.json b/resources/profiles/Prusa/filament/Prusament PVB @XL.json index 1ac285be6e..01df675ba1 100644 --- a/resources/profiles/Prusa/filament/Prusament PVB @XL.json +++ b/resources/profiles/Prusa/filament/Prusament PVB @XL.json @@ -4,7 +4,11 @@ "inherits": "fdm_filament_pvb", "from": "system", "setting_id": "RF55nfxQwqUqe00Q", + "filament_id": "OFh7mvPO", "instantiation": "true", + "filament_vendor": [ + "Prusa Polymers" + ], "nozzle_temperature_intial_layer": "215", "nozzle_temperature": "215", "hot_plate_temp_initial_layer": "75", @@ -38,8 +42,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json index 19f2eb0962..adbf76e56d 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.6.json @@ -4,7 +4,7 @@ "inherits": "Prusament rPLA @CORE One", "from": "system", "setting_id": "BY8gwU1VY0hFBPSc", - "filament_id": "Prusament rPLA @CORE One 0.6", + "filament_id": "OFWRITFw", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.6 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json index 23f10a2927..3c71431160 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One 0.8.json @@ -4,7 +4,7 @@ "inherits": "Prusament rPLA @CORE One", "from": "system", "setting_id": "dNK9a3tZOFeUZm60", - "filament_id": "Prusament rPLA @CORE One 0.8", + "filament_id": "OFWRITFw", "instantiation": "true", "compatible_printers": [ "Prusa CORE One 0.8 nozzle", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json index c32d3baf7f..b520bf4a22 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @CORE One.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Bw6H4vFnq7YExyLd", - "filament_id": "Prusament rPLA @CORE One", + "filament_id": "OFWRITFw", "instantiation": "true", "chamber_temperature": [ "20" diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json index cb1d9258c9..1b847cb1c8 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL 5T.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament rPLA @XL 5T", - "inherits": "fdm_filament_pla", + "inherits": "Prusament rPLA @base", "from": "system", "setting_id": "yAiHzmW4pa8deage", "instantiation": "true", @@ -36,8 +36,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json index ab5867979b..97c4f6d108 100644 --- a/resources/profiles/Prusa/filament/Prusament rPLA @XL.json +++ b/resources/profiles/Prusa/filament/Prusament rPLA @XL.json @@ -1,7 +1,7 @@ { "type": "filament", "name": "Prusament rPLA @XL", - "inherits": "fdm_filament_pla", + "inherits": "Prusament rPLA @base", "from": "system", "setting_id": "j2BSXHFa7D3Gze7C", "instantiation": "true", @@ -36,8 +36,6 @@ "filament_loading_speed": "10", "filament_unloading_speed_start": "100", "filament_unloading_speed": "100", - "filament_load_time": "10.5", - "filament_unload_time": "8.5", "filament_cooling_moves": "2", "filament_cooling_initial_speed": "10", "filament_cooling_final_speed": "3.5", diff --git a/resources/profiles/Prusa/filament/Prusament rPLA @base.json b/resources/profiles/Prusa/filament/Prusament rPLA @base.json new file mode 100644 index 0000000000..32df471fc6 --- /dev/null +++ b/resources/profiles/Prusa/filament/Prusament rPLA @base.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "name": "Prusament rPLA @base", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFWRITFw", + "instantiation": "false", + "filament_vendor": [ + "Prusa Polymers" + ] +} diff --git a/resources/profiles/Prusa/filament/fdm_filament_abs.json b/resources/profiles/Prusa/filament/fdm_filament_abs.json index 50945a12e0..35c4d94e0e 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_abs.json +++ b/resources/profiles/Prusa/filament/fdm_filament_abs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_abs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFB99", "instantiation": "false", "cool_plate_temp": [ "105" diff --git a/resources/profiles/Prusa/filament/fdm_filament_asa.json b/resources/profiles/Prusa/filament/fdm_filament_asa.json index 865b195578..1236ab3286 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_asa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_asa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_asa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFB98", "instantiation": "false", "cool_plate_temp": [ "105" diff --git a/resources/profiles/Prusa/filament/fdm_filament_flex.json b/resources/profiles/Prusa/filament/fdm_filament_flex.json index 4e0e96e59b..139c475174 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_flex.json +++ b/resources/profiles/Prusa/filament/fdm_filament_flex.json @@ -3,7 +3,6 @@ "name": "fdm_filament_flex", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFU99", "instantiation": "false", "hot_plate_temp_initial_layer": [ "50" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa.json b/resources/profiles/Prusa/filament/fdm_filament_pa.json index 050df1ed25..8e2337a0bd 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFN99", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json index 4a3d06afeb..8367e9dce3 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pa11cf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pa11cf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFN98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pc.json b/resources/profiles/Prusa/filament/fdm_filament_pc.json index 01a376d817..bc1b6a3a3a 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pc.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pc.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pc", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFC99", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pccf.json b/resources/profiles/Prusa/filament/fdm_filament_pccf.json index 50b33b2380..7903295158 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pccf.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pccf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pccf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFC98", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pet.json b/resources/profiles/Prusa/filament/fdm_filament_pet.json index b7d8b3d957..9d20738d06 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pet.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pet.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pet", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFT02", "instantiation": "false", "cool_plate_temp": [ "60" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pla.json b/resources/profiles/Prusa/filament/fdm_filament_pla.json index a00cd395a1..573c92fede 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pla.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFL99", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pva.json b/resources/profiles/Prusa/filament/fdm_filament_pva.json index b6bf5b64a1..b25a8332cc 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pva.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pva.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pva", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFS99", "instantiation": "false", "cool_plate_temp": [ "35" diff --git a/resources/profiles/Prusa/filament/fdm_filament_pvb.json b/resources/profiles/Prusa/filament/fdm_filament_pvb.json index a7365e16bd..ef5a5cdcd4 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_pvb.json +++ b/resources/profiles/Prusa/filament/fdm_filament_pvb.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pvb", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFS98", "instantiation": "false", "cool_plate_temp": [ "35" diff --git a/resources/profiles/Prusa/filament/fdm_filament_tpu.json b/resources/profiles/Prusa/filament/fdm_filament_tpu.json index cca57e64fa..dff9bf8f73 100644 --- a/resources/profiles/Prusa/filament/fdm_filament_tpu.json +++ b/resources/profiles/Prusa/filament/fdm_filament_tpu.json @@ -3,7 +3,6 @@ "name": "fdm_filament_tpu", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFU99", "instantiation": "false", "cool_plate_temp": [ "30" diff --git a/resources/profiles/Prusa/machine/Prusa CORE One HF.json b/resources/profiles/Prusa/machine/Prusa CORE One HF.json index cabd5b0cb4..2c75795ff5 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One HF.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One HF.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One HF", "bed_model": "coreone_bed.stl", "bed_texture": "coreone.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One;Generic PLA @Prusa CORE One HF 0.6;Generic PLA @Prusa CORE One HF 0.8", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One L HF.json b/resources/profiles/Prusa/machine/Prusa CORE One L HF.json index c176e5961b..08f23ca781 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One L HF.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One L HF.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One L HF", "bed_model": "coreonel_bed.stl", "bed_texture": "coreonel.svg", - "default_materials": "Prusa Generic PLA @CORE One", + "default_materials": "Generic PLA @Prusa CORE One;Generic PLA @Prusa CORE One HF 0.4;Generic PLA @System", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One L.json b/resources/profiles/Prusa/machine/Prusa CORE One L.json index 4ba199b10f..290659a2a4 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One L.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One L.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One L", "bed_model": "coreonel_bed.stl", "bed_texture": "coreonel.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One;Generic PLA @System", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa CORE One.json b/resources/profiles/Prusa/machine/Prusa CORE One.json index 7fbe05d11d..3388083a65 100644 --- a/resources/profiles/Prusa/machine/Prusa CORE One.json +++ b/resources/profiles/Prusa/machine/Prusa CORE One.json @@ -3,7 +3,7 @@ "name": "Prusa CORE One", "bed_model": "coreone_bed.stl", "bed_texture": "coreone.svg", - "default_materials": "Prusa Generic ABS @CORE One;Prusa Generic ASA @CORE One;Prusa Generic PETG @CORE One;Prusa Generic PLA @CORE One;Prusa Generic PLA Silk @CORE One;Prusa Generic TPU @CORE One", + "default_materials": "Generic ABS @Prusa CORE One;Generic ASA @Prusa CORE One;Generic PETG @Prusa CORE One;Generic PLA @Prusa CORE One;Generic PLA Silk @Prusa CORE One;Generic TPU @Prusa CORE One;Generic PLA @Prusa CORE One 0.6;Generic PLA @Prusa CORE One 0.8", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json index b5f9d8392b..dbfa34e816 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json index 488734582c..4bc7af6bab 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json index ea851b9dcf..6eed0480a6 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json index 30394e8eef..8168f195fa 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINI 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Standard @MINI 0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINI.json b/resources/profiles/Prusa/machine/Prusa MINI.json index 367b75a727..a7ce538229 100644 --- a/resources/profiles/Prusa/machine/Prusa MINI.json +++ b/resources/profiles/Prusa/machine/Prusa MINI.json @@ -8,5 +8,5 @@ "bed_model": "mini_bed.stl", "bed_texture": "mini.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json index c800a8a409..06b10cc244 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.25" + "Generic PLA @Prusa MINIIS 0.25" ], "default_print_profile": "0.12mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json index d2d6c18f39..18fe72ef3f 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS" + "Generic PLA @Prusa MINIIS" ], "default_print_profile": "0.20mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json index c7ebd42263..7dc21fb981 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.6" + "Generic PLA @Prusa MINIIS 0.6" ], "default_print_profile": "0.25mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json index 0ae5a7bbbd..4ab6daa76d 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MINI IS", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA @MINIIS 0.8" + "Generic PLA @Prusa MINIIS 0.8" ], "default_print_profile": "0.40mm Standard @MINIIS", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MINIIS.json b/resources/profiles/Prusa/machine/Prusa MINIIS.json index 123f0a3665..ae5282a129 100644 --- a/resources/profiles/Prusa/machine/Prusa MINIIS.json +++ b/resources/profiles/Prusa/machine/Prusa MINIIS.json @@ -8,5 +8,5 @@ "bed_model": "miniis_bed.stl", "bed_texture": "miniis.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF @MINIIS;Prusa Generic PC @MINIIS;Prusa Generic PVA @MINIIS;Prusa Generic PA @MINIIS;Prusa Generic PA-CF @MINIIS;Prusa Generic ABS @MINIIS;Prusa Generic PLA @MINIIS;Prusa Generic PLA @MINIIS 0.6;Prusa Generic PLA @MINIIS 0.8;Prusa Generic PETG @MINIIS;Prusa Generic PETG @MINIIS 0.6;Prusa Generic PETG @MINIIS 0.8;Prusa Generic TPU @MINIIS;Prusa Generic ASA @MINIIS;" + "default_materials": "Generic PLA-CF @Prusa MINIIS;Generic PC @Prusa MINIIS;Generic PVA @Prusa MINIIS;Generic PA @Prusa MINIIS;Generic PA-CF @Prusa MINIIS;Generic ABS @Prusa MINIIS;Generic PLA @Prusa MINIIS;Generic PLA @Prusa MINIIS 0.6;Generic PLA @Prusa MINIIS 0.8;Generic PETG @Prusa MINIIS;Generic PETG @Prusa MINIIS 0.6;Generic PETG @Prusa MINIIS 0.8;Generic TPU @Prusa MINIIS;Generic ASA @Prusa MINIIS;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json index d2fefedc6f..77ca6aa9e3 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.25 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.25" + "Generic PLA @Prusa MK3.5 0.25" ], "default_print_profile": "0.12mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json index 6d473ce765..ae7df2e583 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.4 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5" + "Generic PLA @Prusa MK3.5" ], "default_print_profile": "0.20mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json index 3631749c53..742b172254 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.6 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.6" + "Generic PLA @Prusa MK3.5 0.6" ], "default_print_profile": "0.25mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json index 1dd7d455d4..c67665fefa 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5 0.8 nozzle.json @@ -9,7 +9,7 @@ "printer_model": "Prusa MK3.5", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA @MK3.5 0.8" + "Generic PLA @Prusa MK3.5 0.8" ], "default_print_profile": "0.40mm Standard @MK3.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3.5.json b/resources/profiles/Prusa/machine/Prusa MK3.5.json index 4438d3d478..2893862789 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3.5.json +++ b/resources/profiles/Prusa/machine/Prusa MK3.5.json @@ -8,5 +8,5 @@ "bed_model": "mk3.5_bed.stl", "bed_texture": "mk3.5.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF @MK3.5;Prusa Generic PC @MK3.5;Prusa Generic PVA @MK3.5;Prusa Generic PA @MK3.5;Prusa Generic PA-CF @MK3.5;Prusa Generic ABS @MK3.5;Prusa Generic PLA @MK3.5;Prusa Generic PLA @MK3.5 0.6;Prusa Generic PLA @MK3.5 0.8;Prusa Generic PETG @MK3.5;Prusa Generic PETG @MK3.5 0.6;Prusa Generic PETG @MK3.5 0.8;Prusa Generic TPU @MK3.5;Prusa Generic ASA @MK3.5;" + "default_materials": "Generic PLA-CF @Prusa MK3.5;Generic PC @Prusa MK3.5;Generic PVA @Prusa MK3.5;Generic PA @Prusa MK3.5;Generic PA-CF @Prusa MK3.5;Generic ABS @Prusa MK3.5;Generic PLA @Prusa MK3.5;Generic PLA @Prusa MK3.5 0.6;Generic PLA @Prusa MK3.5 0.8;Generic PETG @Prusa MK3.5;Generic PETG @Prusa MK3.5 0.6;Generic PETG @Prusa MK3.5 0.8;Generic TPU @Prusa MK3.5;Generic ASA @Prusa MK3.5;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json index 28333578ff..31fd34848a 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.25 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.25", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Speed @MK3S 0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json index 5b86474541..036b901121 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.4", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.20mm Speed @MK3S 0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json index d94d5a0306..c3be2666b8 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.6 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.6", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.30mm Quality @MK3S 0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json index 92450e95fe..ac85e1db4c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S 0.8 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "Prusa MK3S", "printer_variant": "0.8", "default_filament_profile": [ - "Prusa Generic PLA" + "Generic PLA @Prusa" ], "default_print_profile": "0.15mm Detail @MK3S 0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK3S.json b/resources/profiles/Prusa/machine/Prusa MK3S.json index d5323b5f1f..ad27bb59f6 100644 --- a/resources/profiles/Prusa/machine/Prusa MK3S.json +++ b/resources/profiles/Prusa/machine/Prusa MK3S.json @@ -8,5 +8,5 @@ "bed_model": "mk3_bed.stl", "bed_texture": "mk3.svg", "hotend_model": "", - "default_materials": "Prusa Generic ABS;Prusa Generic PLA;Prusa Generic PLA-CF;Prusa Generic PETG;Prusa Generic TPU;Prusa Generic ASA;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF" + "default_materials": "Generic ABS @Prusa;Generic PLA @Prusa;Generic PLA-CF @Prusa;Generic PETG @Prusa;Generic TPU @Prusa;Generic ASA @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa" } diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json index 81b75a5098..ad8bdc7676 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.25 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.08mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json index 89aa893547..417a953aaa 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.4 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.20mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json index f5991e42a9..af4b985d28 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.6 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.32mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json index 91e64bdbb1..f6a151581c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4 0.8 nozzle.json @@ -8,7 +8,7 @@ "gcode_flavor": "marlin2", "printer_model": "Prusa MK4", "default_filament_profile": [ - "Prusa Generic PLA @MK4" + "Generic PLA @Prusa MK4" ], "default_print_profile": "0.40mm Standard @MK4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa MK4.json b/resources/profiles/Prusa/machine/Prusa MK4.json index dc14d1477c..a5a01b2f2e 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4.json +++ b/resources/profiles/Prusa/machine/Prusa MK4.json @@ -8,5 +8,5 @@ "bed_model": "mk4_bed.stl", "bed_texture": "mk4is.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA-CF;Prusa Generic PC;Prusa Generic PVA;Prusa Generic PA;Prusa Generic PA-CF;Prusa Generic ABS @MK4;Prusa Generic PLA @MK4;Prusa Generic PETG @MK4;Prusa Generic TPU @MK4;Prusa Generic ASA @MK4;" + "default_materials": "Generic PLA-CF @Prusa;Generic PC @Prusa;Generic PVA @Prusa;Generic PA @Prusa;Generic PA-CF @Prusa;Generic ABS @Prusa MK4;Generic PLA @Prusa MK4;Generic PETG @Prusa MK4;Generic TPU @Prusa MK4;Generic ASA @Prusa MK4;" } diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json index e9824d1ed6..4f0a79173a 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.4 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "8tL4SMT6bHqG2Ql1", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S", + "default_filament_profile": "Generic PLA @Prusa MK4S", "default_print_profile": "0.20mm SPEED @MK4S 0.4", "nozzle_diameter": [ "0.4" diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json index 0f454ca38f..22acff8dbe 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.6 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "m0ALiNI26ncFxsY2", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S 0.6", + "default_filament_profile": "Generic PLA @Prusa MK4S 0.6", "default_print_profile": "0.25mm SPEED @MK4S 0.6", "max_layer_height": "0.40", "min_layer_height": "0.15", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json index d460517983..8799a148b4 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S 0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "rMzjWvSpqLsRK0gP", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S 0.8", + "default_filament_profile": "Generic PLA @Prusa MK4S 0.8", "default_print_profile": "0.40mm QUALITY @MK4S 0.8", "deretraction_speed": "15", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF.json b/resources/profiles/Prusa/machine/Prusa MK4S HF.json index b49fde2dde..157766c122 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF.json @@ -3,7 +3,7 @@ "name": "Prusa MK4S HF", "bed_model": "mk4_bed.stl", "bed_texture": "mk4s.svg", - "default_materials": "Prusa Generic ABS @MK4S;Prusa Generic ASA @MK4S;Prusa Generic PETG @MK4S;Prusa Generic PLA @MK4S;Prusa Generic PLA Silk @MK4S;Prusa Generic TPU @MK4S", + "default_materials": "Generic ABS @Prusa MK4S;Generic ASA @Prusa MK4S;Generic PETG @Prusa MK4S;Generic PLA @Prusa MK4S;Generic PLA Silk @Prusa MK4S;Generic TPU @Prusa MK4S;Generic PLA @Prusa MK4S HF0.6;Generic PLA @Prusa MK4S HF0.8", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json index abc0f71d50..f417814bbd 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF0.4 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "zMYcZUEYGqFVXcPo", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S HF0.4", + "default_filament_profile": "Generic PLA @Prusa MK4S HF0.4", "default_print_profile": "0.20mm SPEED @MK4S HF0.4", "machine_start_gcode": [ "M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle check\nM862.3 P \"MK4S\" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P\"Input shaper\" ; FW feature check\nM115 U6.1.3+7898\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == \"PC\" or filament_type[0] == \"PA\") ? (first_layer_temperature[0] - 25) : (filament_type[0] == \"FLEX\") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X42 Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]==\"FLEX\"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == \"FLEX\" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X48 Z0.05 F8000 ; wipe, move close to the bed\nG0 X51 Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100%" diff --git a/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json index dd6cf098d4..37ea0e1f7c 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S HF0.8 nozzle.json @@ -5,7 +5,7 @@ "from": "system", "setting_id": "UygX2hdbWqKzY6Nn", "instantiation": "true", - "default_filament_profile": "Prusa Generic PLA @MK4S HF0.8", + "default_filament_profile": "Generic PLA @Prusa MK4S HF0.8", "default_print_profile": "0.40mm STRUCTURAL @MK4S HF0.8", "deretraction_speed": "15", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa MK4S.json b/resources/profiles/Prusa/machine/Prusa MK4S.json index 18f669594a..e3f598023b 100644 --- a/resources/profiles/Prusa/machine/Prusa MK4S.json +++ b/resources/profiles/Prusa/machine/Prusa MK4S.json @@ -3,7 +3,7 @@ "name": "Prusa MK4S", "bed_model": "mk4_bed.stl", "bed_texture": "mk4s.svg", - "default_materials": "Prusa Generic ABS @MK4S;Prusa Generic ASA @MK4S;Prusa Generic PETG @MK4S;Prusa Generic PLA @MK4S;Prusa Generic PLA Silk @MK4S;Prusa Generic TPU @MK4S", + "default_materials": "Generic ABS @Prusa MK4S;Generic ASA @Prusa MK4S;Generic PETG @Prusa MK4S;Generic PLA @Prusa MK4S;Generic PLA Silk @Prusa MK4S;Generic TPU @Prusa MK4S;Generic PLA @Prusa MK4S 0.6;Generic PLA @Prusa MK4S 0.8", "family": "Prusa", "hotend_model": "", "machine_tech": "FFF", diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json index 8a2ef4ecbb..e259346b94 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.15mm Speed @Prusa XL 0.25", "printer_variant": "0.25", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json index 7b6192e64c..afbd0b421c 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.20mm Speed @Prusa XL 0.3", "printer_variant": "0.3", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json index ae5add4f6a..20e8694545 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.20mm Speed @Prusa XL 0.4", "printer_variant": "0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json index 5d470138ca..d4dafc32a1 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.25mm Speed @Prusa XL 0.5", "printer_variant": "0.5", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json index 050b6b5106..4e43982b7d 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.32mm Speed @Prusa XL 0.6", "printer_variant": "0.6", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json index 3d64a2420d..2594b57060 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL", - "default_filament_profile": "Prusa Generic PLA @XL", + "default_filament_profile": "Generic PLA @Prusa XL", "default_print_profile": "0.40mm Quality @Prusa XL 0.8", "printer_variant": "0.8", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json index 42916b3a27..8a29e7dadf 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.25 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.15mm Speed @Prusa XL 5T 0.25", "printer_variant": "0.25", "max_layer_height": "0.15", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json index 7a07b277e2..d380fe5434 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.3 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.3", "printer_variant": "0.3", "max_layer_height": "0.22", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json index 8642ac9ac7..3b29778f29 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.4 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.20mm Speed @Prusa XL 5T 0.4", "printer_variant": "0.4", "nozzle_diameter": [ diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json index fe51f7f4f8..e795d8f8b0 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.5 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.25mm Speed @Prusa XL 5T 0.5", "printer_variant": "0.5", "max_layer_height": "0.32", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json index 1492cf6a6d..76569ca735 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.6 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.32mm Speed @Prusa XL 5T 0.6", "printer_variant": "0.6", "max_layer_height": "0.4", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json index 14277e59fe..d72bfeccad 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T 0.8 nozzle.json @@ -7,7 +7,7 @@ "instantiation": "true", "gcode_flavor": "marlin2", "printer_model": "Prusa XL 5T", - "default_filament_profile": "Prusa Generic PLA @XL 5T", + "default_filament_profile": "Generic PLA @Prusa XL 5T", "default_print_profile": "0.40mm Quality @Prusa XL 5T 0.8", "printer_variant": "0.8", "max_layer_height": "0.6", diff --git a/resources/profiles/Prusa/machine/Prusa XL 5T.json b/resources/profiles/Prusa/machine/Prusa XL 5T.json index 20dfce5046..02e93a78b5 100644 --- a/resources/profiles/Prusa/machine/Prusa XL 5T.json +++ b/resources/profiles/Prusa/machine/Prusa XL 5T.json @@ -8,5 +8,5 @@ "bed_model": "Prusa XL_bed.stl", "bed_texture": "Prusa XL.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA @XL 5T;Prusament PLA @XL 5T;Prusament rPLA @XL 5T;Prusa Generic PETG @XL 5T;Prusament PETG @XL 5T;Prusa Generic ABS @XL 5T;Prusament ASA @XL 5T;Prusament PC Blend @XL 5T;Prusament PC-CF @XL 5T;Prusament PVB @XL 5T;Prusament PA-CF @XL 5T;Prusa Generic FLEX @XL 5T" + "default_materials": "Generic PLA @Prusa XL 5T;Prusament PLA @XL 5T;Prusament rPLA @XL 5T;Generic PETG @Prusa XL 5T;Prusament PETG @XL 5T;Generic ABS @Prusa XL 5T;Prusament ASA @XL 5T;Prusament PC Blend @XL 5T;Prusament PC-CF @XL 5T;Prusament PVB @XL 5T;Prusament PA-CF @XL 5T;Generic FLEX @Prusa XL 5T" } diff --git a/resources/profiles/Prusa/machine/Prusa XL.json b/resources/profiles/Prusa/machine/Prusa XL.json index 9a7ba66066..17cc16e486 100644 --- a/resources/profiles/Prusa/machine/Prusa XL.json +++ b/resources/profiles/Prusa/machine/Prusa XL.json @@ -8,5 +8,5 @@ "bed_model": "Prusa XL_bed.stl", "bed_texture": "Prusa XL.svg", "hotend_model": "", - "default_materials": "Prusa Generic PLA @XL;Prusament PLA @XL;Prusament rPLA @XL;Prusa Generic PETG @XL;Prusament PETG @XL;Prusa Generic ABS @XL;Prusament ASA @XL;Prusament PC Blend @XL;Prusament PC-CF @XL;Prusament PVB @XL;Prusament PA-CF @XL;Prusa Generic FLEX @XL" + "default_materials": "Generic PLA @Prusa XL;Prusament PLA @XL;Prusament rPLA @XL;Generic PETG @Prusa XL;Prusament PETG @XL;Generic ABS @Prusa XL;Prusament ASA @XL;Prusament PC Blend @XL;Prusament PC-CF @XL;Prusament PVB @XL;Prusament PA-CF @XL;Generic FLEX @Prusa XL" } diff --git a/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json b/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json index daec78bc4e..0cbde13d89 100644 --- a/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json +++ b/resources/profiles/Prusa/machine/fdm_machine_common_mk4s.json @@ -10,7 +10,7 @@ "change_filament_gcode": [ "" ], - "default_filament_profile": "Prusa Generic PLA @MK4S", + "default_filament_profile": "Generic PLA @Prusa MK4S", "default_print_profile": "0.20mm SPEED @MK4IS 0.4", "deretraction_speed": "25", "extruder_clearance_height_to_lid": "220", diff --git a/resources/profiles/Prusa/process/fdm_process_common.json b/resources/profiles/Prusa/process/fdm_process_common.json index b8e882770a..0d558129af 100644 --- a/resources/profiles/Prusa/process/fdm_process_common.json +++ b/resources/profiles/Prusa/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -83,7 +82,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Qidi.json b/resources/profiles/Qidi.json index ecceff5a8a..25ffa10171 100644 --- a/resources/profiles/Qidi.json +++ b/resources/profiles/Qidi.json @@ -1,6 +1,6 @@ { "name": "Qidi", - "version": "02.04.00.11", + "version": "02.04.00.14", "force_update": "0", "description": "Qidi configurations", "machine_model_list": [ @@ -44,13 +44,13 @@ "name": "Qidi X-Plus 4", "sub_path": "machine/Qidi X-Plus 4.json" }, - { - "name": "Qidi X-Smart 3", - "sub_path": "machine/Qidi X-Smart 3.json" - }, { "name": "Qidi X-Plus 5", "sub_path": "machine/Qidi X-Plus 5.json" + }, + { + "name": "Qidi X-Smart 3", + "sub_path": "machine/Qidi X-Smart 3.json" } ], "process_list": [ @@ -78,42 +78,90 @@ "name": "0.08mm Extra Fine @X-Max 4 0.2 nozzle", "sub_path": "process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.08mm High Quality @X-Plus 5", + "sub_path": "process/0.08mm High Quality @X-Plus 5.json" + }, + { + "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.10mm Standard @X-Max 4 0.2 nozzle", "sub_path": "process/0.10mm Standard @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.10mm Standard @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.12mm Balanced Quality @X-Max 4 0.2 nozzle", "sub_path": "process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json" }, + { + "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", + "sub_path": "process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json" + }, { "name": "0.12mm Fine @X-Max 4", "sub_path": "process/0.12mm Fine @X-Max 4.json" }, + { + "name": "0.12mm High Quality @X-Plus 5", + "sub_path": "process/0.12mm High Quality @X-Plus 5.json" + }, { "name": "0.16mm Balanced Quality @X-Max 4", "sub_path": "process/0.16mm Balanced Quality @X-Max 4.json" }, + { + "name": "0.16mm High Quality @X-Plus 5", + "sub_path": "process/0.16mm High Quality @X-Plus 5.json" + }, { "name": "0.16mm Standard @X-Max 4", "sub_path": "process/0.16mm Standard @X-Max 4.json" }, + { + "name": "0.16mm Standard @X-Plus 5", + "sub_path": "process/0.16mm Standard @X-Plus 5.json" + }, { "name": "0.18mm Balanced Quality @X-Max 4 0.6 nozzle", "sub_path": "process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json" }, + { + "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, { "name": "0.20mm Balanced Strength @X-Max 4", "sub_path": "process/0.20mm Balanced Strength @X-Max 4.json" }, + { + "name": "0.20mm High Quality @X-Plus 5", + "sub_path": "process/0.20mm High Quality @X-Plus 5.json" + }, { "name": "0.20mm Standard @X-Max 4", "sub_path": "process/0.20mm Standard @X-Max 4.json" }, + { + "name": "0.20mm Standard @X-Plus 5", + "sub_path": "process/0.20mm Standard @X-Plus 5.json" + }, { "name": "0.24mm Balanced Quality @X-Max 4 0.8 nozzle", "sub_path": "process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json" }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.24mm Balanced Strength @X-Max 4 0.6 nozzle", "sub_path": "process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json" @@ -122,10 +170,22 @@ "name": "0.24mm Standard @X-Max 4", "sub_path": "process/0.24mm Standard @X-Max 4.json" }, + { + "name": "0.24mm Standard @X-Plus 5", + "sub_path": "process/0.24mm Standard @X-Plus 5.json" + }, { "name": "0.30mm Standard @X-Max 4 0.6 nozzle", "sub_path": "process/0.30mm Standard @X-Max 4 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", + "sub_path": "process/0.30mm Standard @X-Plus 5 0.6 nozzle.json" + }, + { + "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.32mm Balanced Strength @X-Max 4 0.8 nozzle", "sub_path": "process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json" @@ -134,6 +194,10 @@ "name": "0.40mm Standard @X-Max 4 0.8 nozzle", "sub_path": "process/0.40mm Standard @X-Max 4 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", + "sub_path": "process/0.40mm Standard @X-Plus 5 0.8 nozzle.json" + }, { "name": "0.12mm Fine @Qidi XCFPro", "sub_path": "process/0.12mm Fine @Qidi XCFPro.json" @@ -889,70 +953,6 @@ { "name": "0.56mm Standard @Qidi XSmart3 0.8 nozzle", "sub_path": "process/0.56mm Standard @Qidi XSmart3 0.8 nozzle.json" - }, - { - "name": "0.08mm High Quality @X-Plus 5", - "sub_path": "process/0.08mm High Quality @X-Plus 5.json" - }, - { - "name": "0.12mm High Quality @X-Plus 5", - "sub_path": "process/0.12mm High Quality @X-Plus 5.json" - }, - { - "name": "0.16mm High Quality @X-Plus 5", - "sub_path": "process/0.16mm High Quality @X-Plus 5.json" - }, - { - "name": "0.16mm Standard @X-Plus 5", - "sub_path": "process/0.16mm Standard @X-Plus 5.json" - }, - { - "name": "0.20mm High Quality @X-Plus 5", - "sub_path": "process/0.20mm High Quality @X-Plus 5.json" - }, - { - "name": "0.20mm Standard @X-Plus 5", - "sub_path": "process/0.20mm Standard @X-Plus 5.json" - }, - { - "name": "0.24mm Standard @X-Plus 5", - "sub_path": "process/0.24mm Standard @X-Plus 5.json" - }, - { - "name": "0.08mm High Quality @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.08mm High Quality @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.10mm Standard @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.10mm Standard @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.12mm Balanced Quality @X-Plus 5 0.2 nozzle", - "sub_path": "process/0.12mm Balanced Quality @X-Plus 5 0.2 nozzle.json" - }, - { - "name": "0.18mm Balanced Quality @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.18mm Balanced Quality @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.30mm Standard @X-Plus 5 0.6 nozzle", - "sub_path": "process/0.30mm Standard @X-Plus 5 0.6 nozzle.json" - }, - { - "name": "0.24mm Balanced Quality @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.24mm Balanced Quality @X-Plus 5 0.8 nozzle.json" - }, - { - "name": "0.32mm Balanced Quality @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.32mm Balanced Quality @X-Plus 5 0.8 nozzle.json" - }, - { - "name": "0.40mm Standard @X-Plus 5 0.8 nozzle", - "sub_path": "process/0.40mm Standard @X-Plus 5 0.8 nozzle.json" } ], "filament_list": [ @@ -968,6 +968,10 @@ "name": "fdm_filament_x4_common", "sub_path": "filament/X4/fdm_filament_x4_common.json" }, + { + "name": "fdm_filament_x5_common", + "sub_path": "filament/X5/fdm_filament_x5_common.json" + }, { "name": "QIDI ASA-CF", "sub_path": "filament/QIDI ASA-CF.json" @@ -1652,6 +1656,230 @@ "name": "QIDI WOOD Rapido@X-Max 4-Series", "sub_path": "filament/X4/QIDI WOOD Rapido @X-Max 4.json" }, + { + "name": "Bambu ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu ABS @X-Plus 5.json" + }, + { + "name": "Bambu PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PETG @X-Plus 5.json" + }, + { + "name": "Bambu PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Bambu PLA @X-Plus 5.json" + }, + { + "name": "Generic ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Generic ABS @X-Plus 5.json" + }, + { + "name": "Generic PC@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PC @X-Plus 5.json" + }, + { + "name": "Generic PETG@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PETG @X-Plus 5.json" + }, + { + "name": "Generic PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA Silk @X-Plus 5.json" + }, + { + "name": "Generic PLA+@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA+ @X-Plus 5.json" + }, + { + "name": "Generic PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Generic PLA @X-Plus 5.json" + }, + { + "name": "Generic TPU 95A@X-Plus 5-Series", + "sub_path": "filament/X5/Generic TPU 95A @X-Plus 5.json" + }, + { + "name": "HATCHBOX ABS@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX ABS @X-Plus 5.json" + }, + { + "name": "HATCHBOX PETG@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PETG @X-Plus 5.json" + }, + { + "name": "HATCHBOX PLA@X-Plus 5-Series", + "sub_path": "filament/X5/HATCHBOX PLA @X-Plus 5.json" + }, + { + "name": "Overture ABS@X-Plus 5-Series", + "sub_path": "filament/X5/Overture ABS @X-Plus 5.json" + }, + { + "name": "Overture PLA@X-Plus 5-Series", + "sub_path": "filament/X5/Overture PLA @X-Plus 5.json" + }, + { + "name": "PolyLite ABS@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite ABS @X-Plus 5.json" + }, + { + "name": "PolyLite PLA@X-Plus 5-Series", + "sub_path": "filament/X5/PolyLite PLA @X-Plus 5.json" + }, + { + "name": "Polymaker PLA-HT@X-Plus 5-Series", + "sub_path": "filament/X5/Polymaker PLA-HT @X-Plus 5.json" + }, + { + "name": "QIDI ABS Odorless@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Odorless @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI ABS Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS Rapido @X-Plus 5.json" + }, + { + "name": "QIDI ABS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ABS-GF @X-Plus 5.json" + }, + { + "name": "QIDI ASA-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-Aero @X-Plus 5.json" + }, + { + "name": "QIDI ASA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA-CF @X-Plus 5.json" + }, + { + "name": "QIDI ASA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI ASA @X-Plus 5.json" + }, + { + "name": "QIDI PA12-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA12-CF @X-Plus 5.json" + }, + { + "name": "QIDI PA6-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PA6-CF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-CF @X-Plus 5.json" + }, + { + "name": "QIDI PAHT-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PAHT-GF @X-Plus 5.json" + }, + { + "name": "QIDI PC/ABS-FR@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PC-ABS-FR @X-Plus 5.json" + }, + { + "name": "QIDI PEBA 95A@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PEBA 95A @X-Plus 5.json" + }, + { + "name": "QIDI PET-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-CF @X-Plus 5.json" + }, + { + "name": "QIDI PET-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PET-GF @X-Plus 5.json" + }, + { + "name": "QIDI PETG Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Basic @X-Plus 5.json" + }, + { + "name": "QIDI PETG Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PETG Tough@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Tough @X-Plus 5.json" + }, + { + "name": "QIDI PETG Translucent@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG Translucent @X-Plus 5.json" + }, + { + "name": "QIDI PETG-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-CF @X-Plus 5.json" + }, + { + "name": "QIDI PETG-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PETG-GF @X-Plus 5.json" + }, + { + "name": "QIDI PLA Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Matte Basic@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Matte Basic @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json" + }, + { + "name": "QIDI PLA Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Rapido @X-Plus 5.json" + }, + { + "name": "QIDI PLA Silk@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA Silk @X-Plus 5.json" + }, + { + "name": "QIDI PLA-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PLA-CF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-CF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-CF @X-Plus 5.json" + }, + { + "name": "QIDI PPS-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI PPS-GF @X-Plus 5.json" + }, + { + "name": "QIDI Support For PAHT@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PAHT @X-Plus 5.json" + }, + { + "name": "QIDI Support For PET/PA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI Support For PET-PA @X-Plus 5.json" + }, + { + "name": "QIDI TPU 95A-HF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU 95A-HF @X-Plus 5.json" + }, + { + "name": "QIDI TPU-Aero@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-Aero @X-Plus 5.json" + }, + { + "name": "QIDI TPU-GF@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI TPU-GF @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA-CF25@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json" + }, + { + "name": "QIDI UltraPA@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI UltraPA @X-Plus 5.json" + }, + { + "name": "QIDI WOOD Rapido@X-Plus 5-Series", + "sub_path": "filament/X5/QIDI WOOD Rapido @X-Plus 5.json" + }, { "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json" @@ -1716,6 +1944,10 @@ "name": "Bambu ABS", "sub_path": "filament/Bambu ABS.json" }, + { + "name": "Generic ABS @Qidi", + "sub_path": "filament/Generic ABS @Qidi.json" + }, { "name": "HATCHBOX ABS @Qidi", "sub_path": "filament/HATCHBOX ABS @Qidi.json" @@ -1752,14 +1984,14 @@ "name": "QIDI ABS-GF25", "sub_path": "filament/QIDI ABS-GF25.json" }, - { - "name": "Qidi Generic ABS", - "sub_path": "filament/Qidi Generic ABS.json" - }, { "name": "Qidi PC-ABS-FR", "sub_path": "filament/Qidi PC-ABS-FR.json" }, + { + "name": "Generic ASA @Qidi", + "sub_path": "filament/Generic ASA @Qidi.json" + }, { "name": "QIDI ASA", "sub_path": "filament/QIDI ASA.json" @@ -1769,8 +2001,12 @@ "sub_path": "filament/Qidi ASA-Aero.json" }, { - "name": "Qidi Generic ASA", - "sub_path": "filament/Qidi Generic ASA.json" + "name": "Generic PA @Qidi", + "sub_path": "filament/Generic PA @Qidi.json" + }, + { + "name": "Generic PA-CF @Qidi", + "sub_path": "filament/Generic PA-CF @Qidi.json" }, { "name": "QIDI PA-Ultra", @@ -1817,21 +2053,21 @@ "sub_path": "filament/QIDI UltraPA-CF25.json" }, { - "name": "Qidi Generic PA", - "sub_path": "filament/Qidi Generic PA.json" - }, - { - "name": "Qidi Generic PA-CF", - "sub_path": "filament/Qidi Generic PA-CF.json" - }, - { - "name": "Qidi Generic PC", - "sub_path": "filament/Qidi Generic PC.json" + "name": "Generic PC @Qidi", + "sub_path": "filament/Generic PC @Qidi.json" }, { "name": "Bambu PETG", "sub_path": "filament/Bambu PETG.json" }, + { + "name": "Generic PETG @Qidi", + "sub_path": "filament/Generic PETG @Qidi.json" + }, + { + "name": "Generic PETG-CF @Qidi", + "sub_path": "filament/Generic PETG-CF @Qidi.json" + }, { "name": "HATCHBOX PETG @Qidi", "sub_path": "filament/HATCHBOX PETG @Qidi.json" @@ -1860,14 +2096,6 @@ "name": "QIDI PETG-GF", "sub_path": "filament/QIDI PETG-GF.json" }, - { - "name": "Qidi Generic PETG", - "sub_path": "filament/Qidi Generic PETG.json" - }, - { - "name": "Qidi Generic PETG-CF", - "sub_path": "filament/Qidi Generic PETG-CF.json" - }, { "name": "Tinmorry PETG-ECO", "sub_path": "filament/Tinmorry PETG-ECO.json" @@ -1876,6 +2104,22 @@ "name": "Bambu PLA", "sub_path": "filament/Bambu PLA.json" }, + { + "name": "Generic PLA @Qidi", + "sub_path": "filament/Generic PLA @Qidi.json" + }, + { + "name": "Generic PLA Silk @Qidi", + "sub_path": "filament/Generic PLA Silk @Qidi.json" + }, + { + "name": "Generic PLA+ @Qidi", + "sub_path": "filament/Generic PLA+ @Qidi.json" + }, + { + "name": "Generic PLA-CF @Qidi", + "sub_path": "filament/Generic PLA-CF @Qidi.json" + }, { "name": "HATCHBOX PLA @Qidi", "sub_path": "filament/HATCHBOX PLA @Qidi.json" @@ -1916,29 +2160,21 @@ "name": "QIDI WOOD Rapido", "sub_path": "filament/QIDI WOOD Rapido.json" }, - { - "name": "Qidi Generic PLA", - "sub_path": "filament/Qidi Generic PLA.json" - }, - { - "name": "Qidi Generic PLA Silk", - "sub_path": "filament/Qidi Generic PLA Silk.json" - }, - { - "name": "Qidi Generic PLA+", - "sub_path": "filament/Qidi Generic PLA+.json" - }, - { - "name": "Qidi Generic PLA-CF", - "sub_path": "filament/Qidi Generic PLA-CF.json" - }, { "name": "Qidi PLA-CF", "sub_path": "filament/Qidi PLA-CF.json" }, { - "name": "Qidi Generic PVA", - "sub_path": "filament/Qidi Generic PVA.json" + "name": "Generic PVA @Qidi", + "sub_path": "filament/Generic PVA @Qidi.json" + }, + { + "name": "Generic TPU 95A @Qidi", + "sub_path": "filament/Generic TPU 95A @Qidi.json" + }, + { + "name": "Generic TPU @Qidi", + "sub_path": "filament/Generic TPU @Qidi.json" }, { "name": "QIDI PEBA 95A", @@ -1952,14 +2188,6 @@ "name": "QIDI TPU-GF", "sub_path": "filament/QIDI TPU-GF.json" }, - { - "name": "Qidi Generic TPU", - "sub_path": "filament/Qidi Generic TPU.json" - }, - { - "name": "Qidi Generic TPU 95A", - "sub_path": "filament/Qidi Generic TPU 95A.json" - }, { "name": "Qidi TPU 95A-HF", "sub_path": "filament/Qidi TPU 95A-HF.json" @@ -4172,6 +4400,770 @@ "name": "QIDI WOOD Rapido @Qidi X-Max 4 0.8 nozzle", "sub_path": "filament/X4/QIDI WOOD Rapido @Qidi X-Max 4 0.8 nozzle.json" }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", + "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json" + }, { "name": "Bambu ABS @0.2 nozzle", "sub_path": "filament/Bambu ABS @0.2 nozzle.json" @@ -4216,6 +5208,50 @@ "name": "Bambu ABS @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" + }, { "name": "HATCHBOX ABS @Qidi 0.2 nozzle", "sub_path": "filament/HATCHBOX ABS @Qidi 0.2 nozzle.json" @@ -4552,50 +5588,6 @@ "name": "QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json" - }, { "name": "Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json" @@ -4620,6 +5612,50 @@ "name": "Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" + }, { "name": "QIDI ASA @Qidi Q1 Pro 0.2 nozzle", "sub_path": "filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json" @@ -4672,50 +5708,6 @@ "name": "Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle", "sub_path": "filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json" }, - { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json" - }, { "name": "QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json" @@ -4981,44 +5973,44 @@ "sub_path": "filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @0.2 nozzle.json" + "name": "Generic PC @Qidi 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @0.8 nozzle.json" + "name": "Generic PC @Qidi 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json" + "name": "Generic PC @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json" + "name": "Generic PC @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json" }, { "name": "Bambu PETG @0.2 nozzle", @@ -5064,6 +6056,50 @@ "name": "Bambu PETG @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" + }, { "name": "HATCHBOX PETG @0.2 nozzle", "sub_path": "filament/HATCHBOX PETG @Qidi 0.2 nozzle.json" @@ -5332,50 +6368,6 @@ "name": "QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json" - }, { "name": "Bambu PLA @0.2 nozzle", "sub_path": "filament/Bambu PLA @0.2 nozzle.json" @@ -5420,6 +6412,150 @@ "name": "Bambu PLA @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Max 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "sub_path": "filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json" + }, + { + "name": "Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "sub_path": "filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json" + }, { "name": "HATCHBOX PLA @0.2 nozzle", "sub_path": "filament/HATCHBOX PLA @Qidi 0.2 nozzle.json" @@ -5824,150 +6960,6 @@ "name": "QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json" - }, - { - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json" - }, { "name": "QIDI PLA-CF @0.6 nozzle", "sub_path": "filament/QIDI PLA-CF @0.6 nozzle.json" @@ -6000,6 +6992,22 @@ "name": "QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json" }, + { + "name": "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "sub_path": "filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json" + }, + { + "name": "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json" + }, + { + "name": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "sub_path": "filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" + }, + { + "name": "Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json" + }, { "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json" @@ -6056,22 +7064,6 @@ "name": "QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle", "sub_path": "filament/QIDI TPU-GF @Qidi X-Plus 4 0.8 nozzle.json" }, - { - "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json" - }, - { - "name": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json" - }, - { - "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "sub_path": "filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json" - }, - { - "name": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json" - }, { "name": "Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle", "sub_path": "filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json" @@ -6089,1012 +7081,20 @@ "sub_path": "filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json" }, { - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "sub_path": "filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" - }, - { - "name": "fdm_filament_x5_common", - "sub_path": "filament/X5/fdm_filament_x5_common.json" - }, - { - "name": "Generic ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Generic ABS @X-Plus 5.json" - }, - { - "name": "QIDI ASA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA @X-Plus 5.json" - }, - { - "name": "Generic PETG@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PETG @X-Plus 5.json" - }, - { - "name": "Generic PLA Silk@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA Silk @X-Plus 5.json" - }, - { - "name": "Generic PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA @X-Plus 5.json" - }, - { - "name": "Generic PLA+@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PLA+ @X-Plus 5.json" - }, - { - "name": "PolyLite PLA@X-Plus 5-Series", - "sub_path": "filament/X5/PolyLite PLA @X-Plus 5.json" - }, - { - "name": "Polymaker PLA-HT@X-Plus 5-Series", - "sub_path": "filament/X5/Polymaker PLA-HT @X-Plus 5.json" - }, - { - "name": "QIDI PLA-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA-CF @X-Plus 5.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Rapido @X-Plus 5.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS Odorless@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS Odorless @X-Plus 5.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS Odorless @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Matte @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Silk@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Silk @X-Plus 5.json" - }, - { - "name": "QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Rapido Metal @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Tough@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Tough @X-Plus 5.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Tough @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PET-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PET-CF @X-Plus 5.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PET-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PA12-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PA12-CF @X-Plus 5.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PA12-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PA6-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PA6-CF @X-Plus 5.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PA6-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PAHT-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PAHT-CF @X-Plus 5.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PAHT-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PPS-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PPS-CF @X-Plus 5.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PPS-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ABS-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ABS-GF @X-Plus 5.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ABS-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI UltraPA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI UltraPA @X-Plus 5.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI UltraPA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic TPU 95A@X-Plus 5-Series", - "sub_path": "filament/X5/Generic TPU 95A @X-Plus 5.json" - }, - { - "name": "QIDI PC/ABS-FR@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PC-ABS-FR @X-Plus 5.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PC/ABS-FR @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PC-ABS-FR @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ASA-Aero@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA-Aero @X-Plus 5.json" - }, - { - "name": "QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA-Aero @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ASA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PLA+ @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PLA+ @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PLA Silk @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic TPU 95A @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU 95A-HF @X-Plus 5.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI TPU 95A-HF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "PolyLite PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/PolyLite PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Polymaker PLA-HT @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "PolyLite ABS@X-Plus 5-Series", - "sub_path": "filament/X5/PolyLite ABS @X-Plus 5.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "PolyLite ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/PolyLite ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Overture PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Overture PLA @X-Plus 5.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Overture PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Overture PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Overture ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Overture ABS @X-Plus 5.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Overture ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Overture ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu PLA@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu PLA @X-Plus 5.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu ABS@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu ABS @X-Plus 5.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Bambu PETG@X-Plus 5-Series", - "sub_path": "filament/X5/Bambu PETG @X-Plus 5.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Bambu PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Bambu PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX PLA@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX PLA @X-Plus 5.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX PLA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX ABS@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX ABS @X-Plus 5.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX ABS @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "HATCHBOX PETG@X-Plus 5-Series", - "sub_path": "filament/X5/HATCHBOX PETG @X-Plus 5.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/HATCHBOX PETG @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PAHT-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PAHT-GF @X-Plus 5.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PAHT-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PET-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PET-GF @X-Plus 5.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PET-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI UltraPA-CF25 @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI WOOD Rapido @X-Plus 5.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI WOOD Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Generic PC@X-Plus 5-Series", - "sub_path": "filament/X5/Generic PC @X-Plus 5.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Generic PC @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/Generic PC @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU-Aero@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU-Aero @X-Plus 5.json" - }, - { - "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU-Aero @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI Support For PET-PA @X-Plus 5.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PET/PA @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI Support For PET-PA @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI Support For PAHT@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI Support For PAHT @X-Plus 5.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI Support For PAHT @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Basic @X-Plus 5.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PLA Matte Basic @X-Plus 5.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PLA Matte Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Rapido@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Rapido @X-Plus 5.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Rapido @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Basic@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Basic @X-Plus 5.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Basic @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG Translucent@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG Translucent @X-Plus 5.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.2 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG Translucent @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG-CF @X-Plus 5.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PETG-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PETG-GF @X-Plus 5.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PETG-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PPS-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PPS-GF @X-Plus 5.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI PPS-GF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI PEBA 95A@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI PEBA 95A @X-Plus 5.json" - }, - { - "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI PEBA 95A @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA-CF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI ASA-CF @X-Plus 5.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI ASA-CF @Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "QIDI TPU-GF@X-Plus 5-Series", - "sub_path": "filament/X5/QIDI TPU-GF @X-Plus 5.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle", - "sub_path": "filament/X5/QIDI TPU-GF @Qidi X-Plus 5 0.8 nozzle.json" + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "sub_path": "filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json" } ], "machine_list": [ @@ -7214,6 +7214,10 @@ "name": "Qidi X-Max 4 0.4 nozzle", "sub_path": "machine/Qidi X-Max 4 0.4 nozzle.json" }, + { + "name": "Qidi X-Plus 5 0.4 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.4 nozzle.json" + }, { "name": "Qidi Q2 0.4 nozzle", "sub_path": "machine/Qidi Q2 0.4 nozzle.json" @@ -7234,6 +7238,18 @@ "name": "Qidi X-Max 4 0.8 nozzle", "sub_path": "machine/Qidi X-Max 4 0.8 nozzle.json" }, + { + "name": "Qidi X-Plus 5 0.2 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.2 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.6 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.6 nozzle.json" + }, + { + "name": "Qidi X-Plus 5 0.8 nozzle", + "sub_path": "machine/Qidi X-Plus 5 0.8 nozzle.json" + }, { "name": "Qidi Q2 0.2 nozzle", "sub_path": "machine/Qidi Q2 0.2 nozzle.json" @@ -7257,22 +7273,6 @@ { "name": "Qidi Q2C 0.8 nozzle", "sub_path": "machine/Qidi Q2C 0.8 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.4 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.4 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.6 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.6 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.8 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.8 nozzle.json" - }, - { - "name": "Qidi X-Plus 5 0.2 nozzle", - "sub_path": "machine/Qidi X-Plus 5 0.2 nozzle.json" } ] } diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json index 5a6b2f07b2..da2184d76f 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "UWRDko6WCvXczl33", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json index 1a6930ff43..933dddacde 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "LUEO7LVrgko3oXzg", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json index 9ceb5904ff..42c415e15b 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "NKhfqNQIcfKQBYAK", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json index c773f1f723..31d428337d 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "sZn12as9SQDNFDO3", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json index 1930af3ebd..3fb7ac7709 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "coopc46hemdV9QIv", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json index 2560aa37f1..09d445c402 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "qvYl7pfvtgF2y25O", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json index a27d0bbfb2..b5d438e789 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "AzHGQIE0dGXjOhqG", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json index bddac012dc..eb82b82579 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "CoYm8sbAVmpmJNIV", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json index f6f867f6b6..748e5e2919 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "FnQb4cNqORpQ3Wkq", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json index 35ed106798..8b0a54e060 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "94qvrRFOKOACTK2g", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json index 9fd1b1d878..077da196cf 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu ABS", "from": "system", "setting_id": "ehJ163zLubzIrWzf", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Bambu ABS.json b/resources/profiles/Qidi/filament/Bambu ABS.json index bc8e84d0d0..ee4586555a 100644 --- a/resources/profiles/Qidi/filament/Bambu ABS.json +++ b/resources/profiles/Qidi/filament/Bambu ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "aZylcH8GeCJOqtTy", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json index c1b4ec3fc1..ba65e6a896 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "cZhyWv8zbkM3fgAS", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +48,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json index e97ce167f1..984bf0ca94 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PfIdpsKf0Xw5admE", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json index ca2475da91..a5e6576981 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "czi4981YiirKP6Yy", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json index 123128a303..8745f9b7f4 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "1BV8aedNHRa3h7rp", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json index 2b3f40032f..ea82a7a259 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "eNHYNrSKn90P4GdZ", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json index 5c2b0ccecb..274d012a16 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "VU3PW2x6pfQ9Ayqo", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json index b3b16a0ef2..497cdc3212 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2ezevTOIexxkTBJ2", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json index 549a7c4055..855bdcc901 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "2vTNJwgFvUFq7oS9", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json index 63080da56e..5dce4c4998 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "Q5ToVl9Yb4GGoNXC", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json index 0ce417dc1d..77e61eb8b4 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "XpLJtB1WhRyb1C75", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json index 89e531f65e..ef8ff48a3c 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PETG", "from": "system", "setting_id": "PiYLOckPVRFKFTS6", - "filament_id": "GFB99", + "filament_id": "OFLYDngx", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/Bambu PETG.json b/resources/profiles/Qidi/filament/Bambu PETG.json index 70d61730fa..8f69df52f3 100644 --- a/resources/profiles/Qidi/filament/Bambu PETG.json +++ b/resources/profiles/Qidi/filament/Bambu PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5ZkReXpCOi19xuJg", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json index 95434aff3a..39c01a3e51 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "xY62JrDaYjjSb3lh", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json index ea5ef9b75d..6a5dc5dc2f 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "HjjvZoWwpjZ2gwDO", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json index 3d978affa5..a6c420c613 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5dZqeodmshu33k4e", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json index 5d51f1eafc..2c700d3b7b 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "6kHEv9BjLlJi4E9T", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json index 9451f422a2..83e71e07f2 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "G28Bah0iOaahWlPE", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json index 3e93b99515..afa945e307 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "ioH4lDHLbCw65TIg", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json index 02f5bab7f6..bdfdf0e47a 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "oAUHAhSZkmCjhJEP", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json index 9677e7fa31..cb39244927 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "mT6I8HUJsMgYCjb4", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json index d9a8aa89ab..26a45e77d9 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "5sr5ABQQzrYFUxtk", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json index c2611c3679..6d77933fc8 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "CNzhUsHWT2FOW2Qe", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json index dc770d61eb..df8c6b8a5e 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Bambu PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Bambu PLA", "from": "system", "setting_id": "8Mosuf8MExl0g3Tz", - "filament_id": "GFB99", + "filament_id": "OF1dpPrW", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Bambu PLA.json b/resources/profiles/Qidi/filament/Bambu PLA.json index ebdf2423d6..4061aca197 100644 --- a/resources/profiles/Qidi/filament/Bambu PLA.json +++ b/resources/profiles/Qidi/filament/Bambu PLA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "lweaPojzNVU2FJnO", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..2ca51212e7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "IQDYfIQsv6WlnA3z", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..7c22168a8e --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "YS0ov4dEWAJhRRvk", + "filament_id": "OFY9muEs", + "instantiation": "true", + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_settings_id": [ + "Generic ABS @Qidi Q1 Pro 0.4 nozzle" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "pressure_advance": [ + "0.035" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..b16d7783b2 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "LQTfTgV2MBEm6DDD", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.014" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..61f33e870a --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle;Qidi Generic ABS Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "ZWOlrWQQwvsDV8xa", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.011" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 0000000000..fcb9b9f547 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle;Qidi Generic ABS Qidi X-Max 3 0.2 nozzle", + "from": "system", + "setting_id": "v7w2dLJ1MtUjvy1l", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 0000000000..c52716ea4b --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle;Qidi Generic ABS Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "setting_id": "vH2jlch11zfDBUPP", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..521521c0fe --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "0bwmAx9OQYm5MwVE", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..b5bbbdbf47 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "Y3yAythmKXxr76Pg", + "filament_id": "OFY9muEs", + "instantiation": "true", + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "filament_settings_id": [ + "Generic ABS @Qidi X-Plus 4 0.4 nozzle" + ], + "pressure_advance": [ + "0.03" + ], + "nozzle_temperature": [ + "250" + ], + "overhang_fan_speed": [ + "80" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..27ef9809e8 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "Bt8ySpZn6WFWC00A", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.014" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..3dcc3d5889 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle;Qidi Generic ABS Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "7j3bweJutseUaoZQ", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.011" + ], + "filament_max_volumetric_speed": [ + "24.5" + ], + "nozzle_temperature": [ + "250" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 0000000000..7503ba737d --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic ABS @Qidi", + "renamed_from": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle;Qidi Generic ABS Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "setting_id": "StJpaMQKORYm7i94", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ABS @Qidi.json b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json new file mode 100644 index 0000000000..76a01a3fa6 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ABS @Qidi.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "name": "Generic ABS @Qidi", + "inherits": "fdm_filament_abs", + "renamed_from": "Qidi Generic ABS", + "from": "system", + "setting_id": "iO5utPsBKAo7cHop", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_type": [ + "ABS" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "80" + ], + "filament_density": [ + "1.04" + ], + "activate_chamber_temp_control": [ + "0" + ], + "activate_air_filtration": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "slow_down_min_speed": [ + "20" + ], + "nozzle_temperature": [ + "260" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..749dddc689 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "3LUibDTlv799Gy6r", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..f8ef61a4aa --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "EtjXhHzpmShNgIqj", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_settings_id": [ + "Generic ASA @Qidi Q1 Pro 0.4 nozzle" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..cef5172ed5 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "5hlUjx0YAFTR9TYr", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "Generic ASA @Qidi Q1 Pro 0.6 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.014" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..93b389d444 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic ASA Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "oArSgOFOlXLGkueW", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "Generic ASA @Qidi Q1 Pro 0.8 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 0000000000..38b0088adb --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle;Qidi Generic ASA Qidi X-Max 3 0.2 nozzle", + "from": "system", + "setting_id": "LfT1OaNir4KZevUP", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 0000000000..c0e92e8f7c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle;Qidi Generic ASA Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "setting_id": "S2aFIcoyiIsZ5TR8", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..1f7ec6918c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "aYowi3jA3nUcr5e8", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..1a42a6d075 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "Qaogxqa5Zw7i7n0a", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_settings_id": [ + "Generic ASA @Qidi X-Plus 4 0.4 nozzle" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.035" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..6700a02c94 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "aP2WrJLkjpGFtt8I", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "Generic ASA @Qidi X-Plus 4 0.6 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.014" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..3a1c923505 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic ASA Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "mx6C1Q73i0B7gpag", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "activate_chamber_temp_control": [ + "0" + ], + "chamber_temperature": [ + "55" + ], + "fan_cooling_layer_time": [ + "40" + ], + "filament_max_volumetric_speed": [ + "13" + ], + "filament_settings_id": [ + "Generic ASA @Qidi X-Plus 4 0.8 nozzle" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "pressure_advance": [ + "0.011" + ], + "slow_down_layer_time": [ + "4" + ], + "activate_air_filtration": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 0000000000..437ed6c7d8 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic ASA @Qidi", + "renamed_from": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle;Qidi Generic ASA Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "setting_id": "6jbwOYmS2ypqTshH", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.021" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic ASA @Qidi.json b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json new file mode 100644 index 0000000000..6057fbea4a --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic ASA @Qidi.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic ASA @Qidi", + "inherits": "fdm_filament_asa", + "renamed_from": "Qidi Generic ASA", + "from": "system", + "setting_id": "IO7E03K3t2sySCAM", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_type": [ + "ASA" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.92" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "270" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "pressure_advance": [ + "0.021" + ], + "activate_chamber_temp_control": [ + "0" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PA @Qidi.json b/resources/profiles/Qidi/filament/Generic PA @Qidi.json new file mode 100644 index 0000000000..c27771e405 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PA @Qidi.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic PA @Qidi", + "inherits": "fdm_filament_pa", + "renamed_from": "Qidi Generic PA", + "from": "system", + "setting_id": "la9e4F5ns9eWv7Lg", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "filament_type": [ + "PA" + ], + "required_nozzle_HRC": [ + "3" + ], + "nozzle_temperature_initial_layer": [ + "310" + ], + "nozzle_temperature": [ + "310" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle", + "Qidi Q2 0.4 nozzle", + "Qidi Q2 0.6 nozzle", + "Qidi Q2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json new file mode 100644 index 0000000000..bdf39e1630 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PA-CF @Qidi.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Qidi", + "inherits": "fdm_filament_pa", + "renamed_from": "Qidi Generic PA-CF", + "from": "system", + "setting_id": "qLuGt33iENH6QTjv", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature": [ + "290" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_threshold": [ + "0%" + ], + "overhang_fan_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "5" + ], + "full_fan_speed_layer": [ + "2" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle", + "Qidi Q2 0.4 nozzle", + "Qidi Q2 0.6 nozzle", + "Qidi Q2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json new file mode 100644 index 0000000000..8573598189 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.2 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @0.2 nozzle;Qidi Generic PC 0.2 nozzle", + "from": "system", + "setting_id": "Ei2Izb38mh4A4wgw", + "filament_id": "OFLakOUI", + "instantiation": "true", + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json new file mode 100644 index 0000000000..491f5917d3 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi 0.8 nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @0.8 nozzle;Qidi Generic PC 0.8 nozzle", + "from": "system", + "setting_id": "marM5nqtpl08NP9b", + "filament_id": "OFLakOUI", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..fb85345598 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PC Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "5sAcMTaVI41PCs3n", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..b7057b6c2f --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PC Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "QmaeYzkbcmKJCJSv", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.058" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..56a5a8e132 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PC Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "heIlhCMIZ9MXeDHE", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.025" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..13f13ea759 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PC Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "JlztE3hk1LB23o4h", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..29c7c1658b --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PC Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "2eI2cXfCN6vlk6UV", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..ba52effd22 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PC Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "kGhUT0TAXku3by9D", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..e3f9c180ba --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PC Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "HzAwEYvedOi3GRMY", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.03" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..e6c8d1586d --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PC @Qidi", + "renamed_from": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PC Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "iq1u1nPMi9GT31p9", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PC @Qidi.json b/resources/profiles/Qidi/filament/Generic PC @Qidi.json new file mode 100644 index 0000000000..c69f050f5c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PC @Qidi.json @@ -0,0 +1,63 @@ +{ + "type": "filament", + "name": "Generic PC @Qidi", + "inherits": "fdm_filament_pc", + "renamed_from": "Qidi Generic PC", + "from": "system", + "setting_id": "m1fBauBqqvKdIAAr", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_type": [ + "PC" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_flow_ratio": [ + "0.94" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "280" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "hot_plate_temp": [ + "110" + ], + "slow_down_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "60" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..02004cab28 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "D2QwO7VczuscejBF", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..10a2b2f080 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "GeV4szn47hD1UedT", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_settings_id": [ + "Generic PETG @Qidi Q1 Pro 0.4 nozzle" + ], + "overhang_fan_speed": [ + "90" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "pressure_advance": [ + "0.086" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..995b79eb68 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "hwVzOmBJL0wnhzVj", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..f1d1298d8d --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PETG Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "QKyHd7rHutldls1y", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 0000000000..9eb15c7a9c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle;Qidi Generic PETG Qidi X-Max 3 0.2 nozzle", + "from": "system", + "setting_id": "afJiGzHpK1vEgb0S", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 0000000000..7994ab710f --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PETG Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "setting_id": "grlFOKGDoAo075zz", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..f8de246245 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "hb1v0ytZ8KFm0KeO", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.056" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..0419f9669d --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "V8YvTFXnlItPw97m", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_settings_id": [ + "Generic PETG @Qidi X-Plus 4 0.4 nozzle" + ], + "overhang_fan_speed": [ + "90" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "pressure_advance": [ + "0.056" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..f4a3448c63 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "X9FiUfQBLABTKIKO", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..6bc15f85a2 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PETG Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "5XdW6h65aMPX61o9", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 0000000000..ac5c820791 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,52 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PETG @Qidi", + "renamed_from": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PETG Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "setting_id": "MynfKhfKlXwFaVOJ", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_max_volumetric_speed": [ + "1" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG @Qidi.json b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json new file mode 100644 index 0000000000..b4747dc9df --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG @Qidi.json @@ -0,0 +1,72 @@ +{ + "type": "filament", + "name": "Generic PETG @Qidi", + "inherits": "fdm_filament_pet", + "renamed_from": "Qidi Generic PETG", + "from": "system", + "setting_id": "zRfo4sbJ3auEJtiC", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "filament_type": [ + "PETG" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "12" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_density": [ + "1.27" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json new file mode 100644 index 0000000000..fbe5386405 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PETG-CF @Qidi.json @@ -0,0 +1,95 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Qidi", + "inherits": "fdm_filament_pet", + "renamed_from": "Qidi Generic PETG-CF", + "from": "system", + "setting_id": "1ehKRzcekplfoFdJ", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "temperature_vitrification": [ + "75" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "90" + ], + "required_nozzle_HRC": [ + "40" + ], + "filament_type": [ + "PETG-CF" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_flow_ratio": [ + "0.95" + ], + "pressure_advance": [ + "0.05" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.2 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..4c0c00e6ba --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "2TNFziuyxg2X4zgY", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.042" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..5b49e8560e --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "PNCPMC8uMY9h5SZr", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "filament_settings_id": [ + "Generic PLA @Qidi Q1 Pro 0.4 nozzle" + ], + "full_fan_speed_layer": [ + "3" + ], + "nozzle_temperature": [ + "210" + ], + "slow_down_min_speed": [ + "20" + ], + "pressure_advance": [ + "0.042" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..442f46e559 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "23t94qXoDPSdi7fS", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..d915ed03a8 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "aWIicFWyadhnYKfF", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 0000000000..52ee24c470 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle;Qidi Generic PLA Qidi X-Max 3 0.2 nozzle", + "from": "system", + "setting_id": "VhP4JYzAah2X1Kr3", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json new file mode 100644 index 0000000000..76521556dd --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Max 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle;Qidi Generic PLA Qidi X-Max 3 0.6 nozzle", + "from": "system", + "setting_id": "uhzFvazl2rWd0YN3", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json new file mode 100644 index 0000000000..4246b7fc19 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Max 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Max 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle;Qidi Generic PLA Qidi X-Max 3 0.8 nozzle", + "from": "system", + "setting_id": "t7bkbAgWCK7ObiK4", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 0000000000..7508b21dc3 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "setting_id": "1iUDRQmhNsb4Tlag", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json new file mode 100644 index 0000000000..fcdcb48de7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.6 nozzle", + "from": "system", + "setting_id": "qbT3T9cRjqK7aO4M", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json new file mode 100644 index 0000000000..d42c838771 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle;Qidi Generic PLA Qidi X-Plus 3 0.8 nozzle", + "from": "system", + "setting_id": "dMVLTDJInWMo2fMP", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..8124fb26b0 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "4OyCs9habQtGhoot", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.034" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..90d822953f --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "SU5XqpfPO5g87dfL", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "pressure_advance": [ + "0.034" + ], + "filament_settings_id": [ + "Generic PLA @Qidi X-Plus 4 0.4 nozzle" + ], + "full_fan_speed_layer": [ + "3" + ], + "nozzle_temperature": [ + "210" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..2cc9b574c1 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "7ALKguzkoK6KLHVv", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..2f0ab0b4c7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "jzfMNZP4WaNcNixD", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "nozzle_temperature": [ + "210" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 0000000000..c9af562ff6 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "setting_id": "gNbvzCkxedrQ7nQe", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json new file mode 100644 index 0000000000..497283dd4c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Smart 3 0.6 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.6 nozzle", + "from": "system", + "setting_id": "t8uPl9peXZRJbdLj", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json new file mode 100644 index 0000000000..6b125ee3aa --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi X-Smart 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi X-Smart 3 0.8 nozzle", + "inherits": "Generic PLA @Qidi", + "renamed_from": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle;Qidi Generic PLA Qidi X-Smart 3 0.8 nozzle", + "from": "system", + "setting_id": "VsoBEmU35N8eW3CO", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json new file mode 100644 index 0000000000..e3e1f6eb48 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA @Qidi.json @@ -0,0 +1,39 @@ +{ + "type": "filament", + "name": "Generic PLA @Qidi", + "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA", + "from": "system", + "setting_id": "illxClFj0LphvnHh", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_type": [ + "PLA" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..75f9a19364 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.2 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "ktWvoEzkA0mJ0Q5T", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..7067954ef5 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.4 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "lBa0yfqPsQgr4U3m", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "pressure_advance": [ + "0.034" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..d4bd50b020 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.6 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "Ls5CQx5Yf8QuC4T3", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..dd77278778 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA @Qidi X-Plus 4 0.8 nozzle", + "renamed_from": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA High Speed Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "VyCsuptxJnVw1KqD", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "slow_down_layer_time": [ + "6" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..fbf48ad575 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA Silk @Qidi", + "renamed_from": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA Silk Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "VusYzaMdLpjravVc", + "filament_id": "OFesA6rF", + "instantiation": "true", + "enable_pressure_advance": "1", + "pressure_advance": [ + "0.032" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..bbfd984880 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA Silk @Qidi", + "renamed_from": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA Silk Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "9GVORPqwLq0s3mlY", + "filament_id": "OFesA6rF", + "instantiation": "true", + "enable_pressure_advance": "1", + "pressure_advance": [ + "0.032" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json new file mode 100644 index 0000000000..c9fed29f60 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA Silk @Qidi.json @@ -0,0 +1,71 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Qidi", + "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA Silk", + "from": "system", + "setting_id": "qmNmFB6yN23u389x", + "filament_id": "OFesA6rF", + "instantiation": "true", + "enable_pressure_advance": "1", + "filament_type": [ + "PLA" + ], + "pressure_advance": [ + "0.014" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle" + ], + "eng_plate_temp": [ + "55" + ], + "hot_plate_temp": [ + "55" + ], + "textured_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json new file mode 100644 index 0000000000..e61e507c68 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.2 nozzle", + "from": "system", + "setting_id": "S5IihmYwqdoEXiOT", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.042" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..842010a166 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "iZYrNv7L15yrfAPR", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_settings_id": [ + "Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" + ], + "full_fan_speed_layer": [ + "3" + ], + "nozzle_temperature": [ + "220" + ], + "slow_down_min_speed": [ + "20" + ], + "pressure_advance": [ + "0.042" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json new file mode 100644 index 0000000000..1b48ab6b10 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.6 nozzle", + "from": "system", + "setting_id": "zDYfWdaJGDL64gzD", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..677620b7b7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA+ Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "eAtbANg8BCzaurOY", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "nozzle_temperature": [ + "220" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json new file mode 100644 index 0000000000..f3fa9ec4b4 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Max 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.2 nozzle", + "from": "system", + "setting_id": "ak1iDHwta1iV5CXw", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json new file mode 100644 index 0000000000..2e151c9e14 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Max 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.6 nozzle", + "from": "system", + "setting_id": "JwpYPwMfRZtymarF", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json new file mode 100644 index 0000000000..b829c40c1a --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Max 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Max 3 0.8 nozzle", + "from": "system", + "setting_id": "ZOuRUZf07g43ZV9u", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Max 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json new file mode 100644 index 0000000000..2a761a1946 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.2 nozzle", + "from": "system", + "setting_id": "DujfIhzIsPDdHZlg", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json new file mode 100644 index 0000000000..657b16a6a4 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.6 nozzle", + "from": "system", + "setting_id": "BA46FjbkAt4dhdfQ", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json new file mode 100644 index 0000000000..9455380809 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Plus 3 0.8 nozzle", + "from": "system", + "setting_id": "TEqTy5MhYC1CLkrr", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Plus 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json new file mode 100644 index 0000000000..ecfb501bb0 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.2 nozzle", + "from": "system", + "setting_id": "TO1cgOHqLFnimX9m", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.034" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..c0ff54ee65 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "Dyf2Y7pDd4UWIIJ5", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.034" + ], + "filament_settings_id": [ + "Generic PLA+ @Qidi X-Plus 4 0.4 nozzle" + ], + "full_fan_speed_layer": [ + "3" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json new file mode 100644 index 0000000000..5ddca086f7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.6 nozzle", + "from": "system", + "setting_id": "ty1M4Mik83FlDWKj", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.016" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..937e85aff4 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle;Qidi Generic PLA+ Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "Wyo0NeD4dPzA365C", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.008" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json new file mode 100644 index 0000000000..a32c884550 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.2 nozzle", + "from": "system", + "setting_id": "lypNmywVe3qfhs2q", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_max_volumetric_speed": [ + "2" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json new file mode 100644 index 0000000000..fe84ef4f8c --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.6 nozzle", + "from": "system", + "setting_id": "Hxpe6y8Xo37WmcQr", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.016" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json new file mode 100644 index 0000000000..59a6efb166 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", + "inherits": "Generic PLA+ @Qidi", + "renamed_from": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle;Qidi Generic PLA+ Qidi X-Smart 3 0.8 nozzle", + "from": "system", + "setting_id": "2jjI8l22cAXTuxMl", + "filament_id": "OFEWYR89", + "instantiation": "true", + "pressure_advance": [ + "0.008" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json new file mode 100644 index 0000000000..2c1e136f6b --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA+ @Qidi.json @@ -0,0 +1,45 @@ +{ + "type": "filament", + "name": "Generic PLA+ @Qidi", + "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA+", + "from": "system", + "setting_id": "JhZ9hP9n1gBNGwBq", + "filament_id": "OFEWYR89", + "instantiation": "true", + "filament_type": [ + "PLA" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.031" + ], + "filament_vendor": [ + "Generic" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json new file mode 100644 index 0000000000..1381442943 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PLA-CF @Qidi.json @@ -0,0 +1,65 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Qidi", + "inherits": "fdm_filament_pla", + "renamed_from": "Qidi Generic PLA-CF", + "from": "system", + "setting_id": "XspRlBSqR3DsiFBM", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "required_nozzle_HRC": [ + "40" + ], + "filament_flow_ratio": [ + "0.96" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "8" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "temperature_vitrification": [ + "55" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "240" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.2 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic PVA @Qidi.json b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json new file mode 100644 index 0000000000..ffd25855a1 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic PVA @Qidi.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic PVA @Qidi", + "inherits": "fdm_filament_pva", + "renamed_from": "Qidi Generic PVA", + "from": "system", + "setting_id": "dmGcoGkH9lvmgsJL", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_type": [ + "PVA" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Smart 3 0.2 nozzle", + "Qidi X-Plus 3 0.2 nozzle", + "Qidi X-Max 3 0.2 nozzle", + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.2 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.2 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle", + "Qidi Q2 0.2 nozzle", + "Qidi Q2 0.4 nozzle", + "Qidi Q2 0.6 nozzle", + "Qidi Q2 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json new file mode 100644 index 0000000000..3fab5170d7 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", + "inherits": "Generic TPU 95A @Qidi", + "renamed_from": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle;Qidi Generic TPU 95A Qidi Q1 Pro 0.8 nozzle", + "from": "system", + "setting_id": "lwRnIxnWLYp1Hww4", + "filament_id": "OFjiXpyf", + "instantiation": "true", + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json new file mode 100644 index 0000000000..7e964fd0b8 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", + "inherits": "Generic TPU 95A @Qidi", + "renamed_from": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle;Qidi Generic TPU 95A Qidi X-Plus 4 0.8 nozzle", + "from": "system", + "setting_id": "BPUUHxYPhHcPIWs9", + "filament_id": "OFjiXpyf", + "instantiation": "true", + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json new file mode 100644 index 0000000000..2c9602ee2e --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU 95A @Qidi.json @@ -0,0 +1,55 @@ +{ + "type": "filament", + "name": "Generic TPU 95A @Qidi", + "inherits": "fdm_filament_tpu", + "renamed_from": "Qidi Generic TPU 95A", + "from": "system", + "setting_id": "nXjylLuhXqtlLGEv", + "filament_id": "OFjiXpyf", + "instantiation": "true", + "filament_type": [ + "TPU" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_density": [ + "1.21" + ], + "filament_flow_ratio": [ + "1" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.4 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi X-Plus 4 0.4 nozzle", + "Qidi X-Plus 4 0.6 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json new file mode 100644 index 0000000000..93793f8d8e --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi Q1 Pro 0.4 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic TPU @Qidi Q1 Pro 0.4 nozzle", + "inherits": "Generic TPU @Qidi", + "renamed_from": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle;Qidi Generic TPU Qidi Q1 Pro 0.4 nozzle", + "from": "system", + "setting_id": "ToMKfKFZDCHyEHw9", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "Generic TPU @Qidi Q1 Pro 0.4 nozzle" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Qidi Q1 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json new file mode 100644 index 0000000000..f1c8117c47 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi X-Plus 4 0.4 nozzle.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic TPU @Qidi X-Plus 4 0.4 nozzle", + "inherits": "Generic TPU @Qidi", + "renamed_from": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle;Qidi Generic TPU Qidi X-Plus 4 0.4 nozzle", + "from": "system", + "setting_id": "AACIHxmLhuNAGo6d", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "fan_cooling_layer_time": [ + "60" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_settings_id": [ + "Generic TPU @Qidi X-Plus 4 0.4 nozzle" + ], + "nozzle_temperature": [ + "230" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "compatible_printers": [ + "Qidi X-Plus 4 0.4 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/Generic TPU @Qidi.json b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json new file mode 100644 index 0000000000..a525b49520 --- /dev/null +++ b/resources/profiles/Qidi/filament/Generic TPU @Qidi.json @@ -0,0 +1,49 @@ +{ + "type": "filament", + "name": "Generic TPU @Qidi", + "inherits": "fdm_filament_tpu", + "renamed_from": "Qidi Generic TPU", + "from": "system", + "setting_id": "0jwJs0mTFs0904VK", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_type": [ + "TPU" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "230" + ], + "filament_vendor": [ + "Generic" + ], + "compatible_printers": [ + "Qidi X-Plus 0.4 nozzle", + "Qidi X-Max 0.4 nozzle", + "Qidi X-CF Pro 0.4 nozzle", + "Qidi X-Smart 3 0.4 nozzle", + "Qidi X-Plus 3 0.4 nozzle", + "Qidi X-Max 3 0.4 nozzle", + "Qidi X-Smart 3 0.6 nozzle", + "Qidi X-Plus 3 0.6 nozzle", + "Qidi X-Max 3 0.6 nozzle", + "Qidi X-Smart 3 0.8 nozzle", + "Qidi X-Plus 3 0.8 nozzle", + "Qidi X-Max 3 0.8 nozzle", + "Qidi Q1 Pro 0.6 nozzle", + "Qidi Q1 Pro 0.8 nozzle", + "Qidi X-Plus 4 0.6 nozzle", + "Qidi X-Plus 4 0.8 nozzle" + ] +} diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json index 37749f7ca1..29a1578964 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "QASmOwd2vpLRwI9I", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json index 7aea599422..42e761ca25 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "FETCvNKTRyxJujEs", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json index 2a465f6e24..1186b13dad 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "ywzSdHmCxIwmIFVS", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json index b5c25a1bce..603023a014 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "EwhasEiqLRcN5gBN", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json index 4a0b67f0a0..6527685bab 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "0NVX3dTScYTIebm3", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json index 2c8d4bc22d..69ac1b6b11 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "HCU0TmDPYF39Gc3X", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json index 62bb876608..008671a374 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "Pf6oZn5QrYSbJhdm", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json index b6f03502b3..b777c29a9b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "6LSdExBaTT0Mc3rY", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json index a4ebcb6a7b..fbea89c0fb 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "vc2R90RYyDuY8vQn", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json index 1d4d13d416..6b612e4461 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "1HVRVgHeXWVj3T0v", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json index b16ce365f8..50b05d928d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX ABS @Qidi", "from": "system", "setting_id": "aJxjGxHK8UJOqYPV", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json index 5e4fd7cf10..7a3ee8c8ce 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0fchNQsqRqwI6whN", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json index ffb2cc0e34..5b63882b5b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "Cw3CaLrsjVfJKoWI", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -48,7 +48,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json index e6b90b25f2..88a9ffa985 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "eLmXN4kJvaoq5Ude", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json index 6a763393a7..8c4767360d 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "mndT3gxOniftGEEZ", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json index 8e0f9576fb..9737c4de7a 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "L8aHH2WqnlOYuyfd", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json index cf9da5b3c1..66da1ce3b3 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "LMva5CR9m19UAhcI", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json index 400f38d7fa..d5e9d135bf 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "5EfWTFx0dXRTREkj", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json index 44b77623c6..055b64956f 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "xeu1S6h53DRVM9Pw", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json index 0b09a46b90..d002a5db8c 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "UrZzA62PJDuvo9EC", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json index 696fddb2d8..62642bab11 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "jAykaomjQ4BS9Cg0", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json index c0203d9268..72f0ca2ae8 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "2QrBYfeT0mp048aY", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json index aee2e475e2..5f0d6a3e6b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PETG @Qidi", "from": "system", "setting_id": "9otX3aWO4xQA72DT", - "filament_id": "GFB99", + "filament_id": "OFIWMSGX", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json index 240181288d..02b6929088 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PETG @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "dqHKVy4ahTjpQFOJ", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json index 679eb2b2f1..4e21fb79ff 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "GrYmKcX6ghgUO8z0", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json index b891604161..d2b9e1f6b9 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "Fwd0BaBVmg2w9oBo", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json index af0f830e19..f09ce840a7 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "OjSAPfXD7c9LpDZI", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json index 8c0315ecd1..37e1982068 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "tNk1yBoRzuKtWamt", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json index 865f120bcb..f03e9c8053 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "oULA9qVGUD5izX9o", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json index 956fa88d62..8331e6dc6c 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "RK1LyCal04XMqidp", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json index 535b07b9b0..8eeaf11774 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "6ehhHeFIMe3KxHA1", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json index c6a9a6564a..5066c19ab1 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "i3bQYXjlGipOAop7", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json index 60b9f5318c..1dce884cfd 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "vknSksUeSeKFl8vB", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json index 89ffc6501a..7d5db3e2de 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "I5NFFjIYcoo3SkmC", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json index 6e28cd923e..16a1a42344 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "HATCHBOX PLA @Qidi", "from": "system", "setting_id": "gzDFMFaDnAVuDy3B", - "filament_id": "GFB99", + "filament_id": "OFeelsSM", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json index ee79175e43..2e6ed1140b 100644 --- a/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/HATCHBOX PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "jWtANauqr4Azj7fo", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json index 3fb6ca6406..6ca66cc671 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "PVJaNrzYRoafHb3k", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json index 403311644b..4815755a54 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "6dP4f482dvR9Ihhu", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json index 5d43601751..d3ef4ea036 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ol1pj7wlmGJlZHbA", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json index aa2cc8787c..7c9832acf5 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "d9bOxYmwJJ928QUm", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json index 451a97354e..56846eb0c1 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "3vOLIQxScIoHCUDQ", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json index 161cee6e4c..905d2cef0b 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "ninsIRmjQReutXjA", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json index e5e9652619..8692479cc1 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "m4sql22MWPed4UK9", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json index c6d97b1e42..9dca464248 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "SbIhXnMLo7UWLdmF", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json index ca632cb252..edba90fe27 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Hh22vTpUyqF09bma", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json index 4419ba6577..3663179029 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "10PSPCpiTcS92auy", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json index f203d3f536..fdea3d5aeb 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture ABS @Qidi", "from": "system", "setting_id": "Xevn2nrx7W5VQX6z", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json index 0ae10f9086..a422baae82 100644 --- a/resources/profiles/Qidi/filament/Overture ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "rRuO94f0PYlPR3yu", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json index 028e0adeb3..924362c286 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "YnRI4rYCHDIi7Q0w", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json index f6989b46b5..fbf2b78629 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "Jizherw9T9l0X76l", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json index c15b896bde..f265222c29 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "dHlHvcm2BjzlfUSk", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json index ad955edaeb..cd3c18c309 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "3jqdiWNWro7yFptW", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json index 9e4bad8df8..4d9a6ad8c9 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "tARHr87BkRknTQJI", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json index ae956faf9b..99a239670e 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "EEIdQ4XTkpQyRz3h", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json index c961b4b4d1..5836edcfd7 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "NBbNF6S5sQYIiS9T", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json index 299c10c9b0..8414abfcca 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "gk2D7WKoLK1xPqLC", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json index 3beb0aba29..8ee92ded5a 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "wtl6yNqJQUVhiBnB", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json index dc866429d0..c60980ba47 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "1fl42MjkwXbpjJ3r", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json index c87feb65e4..eff7da8211 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Overture PLA @Qidi", "from": "system", "setting_id": "vxGQSWw07PXnllwO", - "filament_id": "GFB99", + "filament_id": "OFc3xdm9", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json index f298c1f233..b3ce80842d 100644 --- a/resources/profiles/Qidi/filament/Overture PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/Overture PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XXJ4dSi48JuA54Iv", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json index 24c3e1cf0e..250eaa3223 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "5rbxArwT1VV5BOSq", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json index 13684caa4b..082f09ffea 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "EqpfLGTZXcdjm5BM", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json index 8112c07176..087808ff18 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ao01rvVFfkWlwpER", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json index c4a4120209..4325782ea0 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "dfni3lzB8GJldfQD", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json index 6abfb386db..48a586618e 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "iWq2EddKO6QAUJuG", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json index ba69bacdab..bf25f2c6da 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "0EswisPwFjFmk1GT", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json index 1b0506e8dc..98ed0be9af 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "t3DcJuJsNgXKW0dP", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json index 51c39b2aba..d669116cc3 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "Ino4r7XLgTCFh4YR", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json index 1f53c30903..c586125db1 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "7NXI13ejzocjD7TO", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json index 4bcdb6bcef..2dccc6f635 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "QEJ9knURmXAGsFib", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json index 8aa1c764f4..96ed3908e3 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite ABS @Qidi", "from": "system", "setting_id": "GzEXQzyKqqnCVUBh", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json index ef68eb12e1..ca0e5862fc 100644 --- a/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite ABS @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "Q9QYOF2UmsrK7Wof", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json index a52b240410..32839eb63d 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "uXrENPoTa7HWapCV", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "true", "pressure_advance": [ "0.057" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json index f18131f02b..5c81627600 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "XnU3X7A7kdRrfoTX", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json index 93bcd56559..874ae102f9 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "Q6H3JzOum8GYVRF9", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json index 4ef9af4534..4f2a9d85a0 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "tSR6NKHk3ietpsga", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json index 77d10b9be3..d4b17517bb 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "ZF5is6IpP0gGcqRE", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json index 1559c6d369..fe5165436d 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "bAqfoS751xDFHubU", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json index 6837abbfb2..d277bafea9 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "2rWOMrYc40ZRNLQi", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json index eabb962095..a1a970be54 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "4x8HlY906khbFsG0", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json index b4c8988c1d..3ee5d4697f 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "87QXnh5kCuQoPwjr", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json index 6a0d9383f8..4cfd0f3202 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "WsMzyALZrDylCkZ6", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json index 5d5cb7bf93..025770dea7 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "PolyLite PLA @Qidi", "from": "system", "setting_id": "sHVHjhH9FzhRjeHT", - "filament_id": "GFB99", + "filament_id": "OF5CgdDq", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json index b84cf7bfb4..d277778204 100644 --- a/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json +++ b/resources/profiles/Qidi/filament/PolyLite PLA @Qidi.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Kg6WHLbWxKAE8cCr", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json index e2d1d05e99..ba454d0083 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json index dfb6609b1c..6ef3859314 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json index d1898e4363..a677387d1b 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json index 6a28da194b..ac1ed2e4bc 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json index 1277eab3e3..1eee11b706 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json index b1f2cdde9f..398a45ac25 100644 --- a/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Bambu PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json index 9e42298338..1dc3825126 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Generic ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json index 88edeb6155..c3641af840 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json index 90d5f9150f..26abc6179b 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PC@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json index 55a834093d..148bc80d29 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PC @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PC@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json index 5a8d64615a..de56662460 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json index 88c5c926ab..13dc11da37 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json index 21ed221909..f8da1c0008 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json index 82423a614d..b33774304d 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json index a24a0f4d6f..23d04a049a 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json index 1254b1d53a..30588be03e 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA Silk @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json index 47107a8614..c3f6f6ede7 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json index 83d77e0781..fd06d75bd0 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic PLA+ @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json index 107d337155..189c740c72 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json index 8e867a26f2..bfb84c16de 100644 --- a/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Generic TPU 95A @Q2C.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json index c55ccaa1a9..429f7bc58d 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json index 81736dcccf..a06b63de6d 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json index 10f557a994..14cc4b1463 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json index fd739c1779..3922b8fbbb 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PETG @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json index 880ecddb29..0de43e0804 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json index 4af2d4f816..94fb13c4a3 100644 --- a/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/HATCHBOX PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json index 5c2067f362..cb96443ce7 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json index a6639b3999..2caa6342ff 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json index 2dbdffd469..2bb82adf5f 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json index 986e906c0c..e3db0ea728 100644 --- a/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/Overture PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "Overture PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json index b1af2354b5..98ea19925c 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json index 6d6c27b6b1..ed269d96be 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite ABS @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json index be89bf9696..8639ef5ff7 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json index c42c4aee25..366be7a6ba 100644 --- a/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/PolyLite PLA @Q2C.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json index 62dc85146b..19a568850c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json index be98105a39..2c2b667fd7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Odorless @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json index 9d7e3d0e7f..c5cb2aca78 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json index da40111dc4..4e68e02cf5 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json index 46ccb9e691..e123946376 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json index afd2b355cb..6589613879 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS Rapido Metal @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json index a20b7bb2c1..298e063e51 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json index 5e6df7914d..36ec082dc3 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ABS-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json index 88e5d964e7..4a64191f92 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json index c68044bfaf..11cbffc08f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json index b449906758..c32a28c5ff 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json index 3c810517f6..30835ce25e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-Aero @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json index 4d2165ffd1..44845f9c1c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json index 99e1043b46..5f100e18e7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI ASA-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json index c15cf5ca65..454bb935c1 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json index 3dbd928222..ae7dce989c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PA12-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json index fe908219a5..86d433078a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json index d76e92349e..d456e57eea 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json index e694512bc7..2f4d499ddd 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json index cb8c2640a3..c64465630c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PAHT-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json index d4639142de..67c1da6278 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PC-ABS-FR@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_34", + "filament_id": "OFFAWVf0", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json index b0e25aa480..b5ccaf706c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PC-ABS-FR @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PC-ABS-FR@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_34", + "filament_id": "OFFAWVf0", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json index 9dd9600bf9..23717031de 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json index e1c1441da1..ec065181d8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PEBA 95A @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json index 211f90a3a6..e6c29cea5c 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json index 59f7315e29..62461cb73a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json index 85fc6f5847..424b78379d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json index c7e66b7972..f178094458 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PET-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json index ba87c9a3b7..58a0fd7dbf 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json index a08ec8af68..8cb18721e2 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json index 9815a8eb64..2e3d793089 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json index 1c50f16b51..96a2ec23e6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json index b8f8c4ec5f..ed639e45a3 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json index 3f272efaee..f3886ffbdd 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Tough @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json index 64a56ca919..d996077b6e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json index 6010799fff..31a8543037 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG Translucent @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json index 475b8f2a78..8f424ae68d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json index 4ba3a94c25..3b0175abd0 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json index d510eb7fe8..cb45a7126e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json index 353d2eb3ee..2b37be4655 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PETG-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json index c2799f2f9e..9681191225 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json index 4597470db3..7b5d0b42e9 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json index 4a25bf91f3..86320677b5 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json index 824ff1d846..49a420c205 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Matte Basic @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json index 3f57b73a1f..3e61216161 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json index d3afa29ba4..6bcc1465f8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json index e4432822ad..3b0813506f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json index b8cf01a822..1fdd0cbfe0 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Matte @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json index 9728e57f4c..b06fcf26cb 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json index 2e3295cd86..ac5ef39d81 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Metal @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json index ae38a9189f..d74b31e3b6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json index 9d07d3375e..2cd6d5206b 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA Rapido Silk @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json index 4e1b88726e..68a6fe3591 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json index 67832cba33..1547635255 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PLA-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "filament_adhesiveness_category": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json index dc4e1fd221..6f4ec50f8b 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json index 2f27693f04..b582d662f8 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-CF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json index f1de945749..7d0507a4d7 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json index 3fda14c322..0412893632 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI PPS-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json index 7e12181e9d..36ef25367a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json index 1dfffa1bd7..1252ad814e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PAHT @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json index 25dca621ad..16dba7f79a 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json index f126a37f8e..759e704f3f 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI Support For PET-PA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json index b31512f047..ca94f5a4d1 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json index dd9b428fed..80bde58289 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU 95A-HF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json index 38a1c1883a..58c2776f6e 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json index 525aebb88f..580060e6fe 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-Aero @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json index 5e995b72be..c4a3c31413 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json index b17c65d3e7..887a0fa639 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI TPU-GF @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json index 5b9881cb9f..27942a7e1d 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json index 7f11a52b7c..925c18aa11 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json index 194fe42853..3c9c558f77 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json index 1593decfea..ebcabb0fa6 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI UltraPA-CF25 @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json index 380d48bcb1..5b31143e00 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@Q2-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_1_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json index 5a7882bd68..a4b1c223db 100644 --- a/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json +++ b/resources/profiles/Qidi/filament/Q2/QIDI WOOD Rapido @Q2C.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@Q2C-Series", "inherits": "fdm_filament_q_common", "from": "system", - "filament_id": "QD_2_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json index 9340c8b402..ac901e85ad 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Z0J9YPS8382vLms4", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json index 651828c165..0c5834be33 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "SA5qLMqlZg0lBV9u", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json index 951ebcacd6..9f276e1282 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "MzM45pddZsnN8jk4", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json index c59b3a85ee..4f5a081162 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tq1aLmF5jT1fx5mZ", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json index e68e7cf3fa..0cb80c93c1 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "1hhkoG2E1z6ya5hY", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json index 395f1dc934..98f2689236 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Vr1wXzAo5OR2PASA", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json index 5416a7b580..c8965e1ade 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "OCg8c9SWQrZP0SrH", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json index ac47e75f00..2d6cfd79a6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "3fkdGYKFpaJ8yjwg", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json index b0467052ef..228a2b7441 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "Tkh7jC3ZhD7qchMF", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json index e259f79655..e9139c0464 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "wOJOXhIjWFMUvDsB", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json index b3b3c6007f..c0934114e4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Odorless", "from": "system", "setting_id": "WqbBySroQTCBWMoz", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json index 9b2cc8c8fd..d53b7c2bee 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Odorless.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Odorless.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "5GyjZE2Ukzo3BDdg", - "filament_id": "GFB99", + "filament_id": "OFma5TXH", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json index eda2713729..1f30fa81e6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "CeOohxHZCLelVMCk", - "filament_id": "GFB99", + "filament_id": "OFOuEEvv", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json index 96ad8b214c..2ebe9f8df4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "VzAotqGZviabVuS4", - "filament_id": "GFB99", + "filament_id": "OF0wz84w", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json index 7678378711..aaa210c950 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "1hpYHzEDBeO8jwDr", - "filament_id": "GFB99", + "filament_id": "OF0w7OpJ", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json index 606a4e781d..0824c6eae0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "2ZB4CZPo7OnsVeFj", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json index 51d96df33d..f35f44ff48 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ANlmZnKFevlds1x9", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json index 832ace793f..2b516260c4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "qGAb3jPiiSZqPc0W", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json index 939c2fc5bd..b1ea6553b0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "zPlNGjze5nz0Sqtn", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json index a57fa1b64f..3ed4c50855 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "L6hmbX1bqdrGd9g2", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json index c05f92c7f4..b4cd47f8e0 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "ZKLPQIUecFL5GG2P", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json index a4838feb1d..5316755879 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "OlI3NRTSS4Vb9ABn", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json index f02644b876..8039f0046b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido", "from": "system", "setting_id": "7AXe36Wqh6uupouS", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json index 552acb8b6e..c3dc666461 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "CQa9Ke6ku0jK7juR", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json index 695dfa0702..7f5946f4d8 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "KBXExHIJGyOE02sr", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "enable_pressure_advance": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json index b3f2dbf64d..d114ce7ed2 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "QjDN8l4fq8nrEtZS", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index b7e9c56d7e..fc4a9099c9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "83M8HRLtzoEyAgdd", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index cd38da2783..fdf74d3fc5 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "JWNlbq8qmrVoCjJZ", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "during_print_exhaust_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 2cfbfdf4de..2d0850b58f 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "igcuTXhdFT9QEkki", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index ee01bbbb30..bc81c0f940 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "Rci7D9y258kLZl3F", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json index 98b64f2e92..1f1d71d6da 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "LClDGDpaf5l4XinA", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json index 71c73d5a26..c8e0675c3e 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "TbTSNtElyeqwuhI2", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json index a3bde06612..f7b91d1384 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "lRSAQSUdgEOvrWOZ", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json index fa0b2629ec..6aad4985d6 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS Rapido Metal", "from": "system", "setting_id": "sV1XN1EnDMTMC6eZ", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json index b3b7260b51..9c133650ab 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "EcvWsnEhikUy64mA", - "filament_id": "GFB99", + "filament_id": "OFeCJqxx", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json index 75518e19d5..b29a065b5a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI ABS Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "sru9yX08jyTVNmOz", - "filament_id": "GFB99", + "filament_id": "OFT2jon4", "instantiation": "true", "filament_type": [ "ABS" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json index ddcb0ad389..38bd8a9438 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "BG8J7FyU5Sn6pmGk", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json index 5a8cd10de2..59c267751c 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "87bAUrovoG3W1WZK", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json index 7714206d33..ca9e5f25a4 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "v0K7uK7rq54uGbrE", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json index 8aba17e819..92db726d5d 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "OD1YZ5gmmk39jI21", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json index af4a24396d..aaf74e228f 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "QzCAZozPOpv3IOzz", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json index ab0972598b..93b5abffd9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF", "from": "system", "setting_id": "fvB8ilSXksTr2ahl", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF.json b/resources/profiles/Qidi/filament/QIDI ABS-GF.json index a6d53698c7..f07b650913 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "FW543AnWfRtseB8W", - "filament_id": "GFB99", + "filament_id": "OFt3HtlG", "instantiation": "true", "filament_flow_ratio": [ "0.95" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json index 4e532d3a34..f52455998b 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "uskWZUmvzYkVgG0l", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json index 464b555e28..a9e4dc2f3a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "9laiuOlfZEWIjQ3u", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json index 92b8fbb036..7aba539d32 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "Jh3kEQrLdoGw4WLW", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json index 863ace51a5..13a7f6576c 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "3tblNpw8VgOlt8VU", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json index e22b325113..2dd3e667ff 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "tssoWES4nOoMEh90", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json index 64b7fd6f57..6f090ca606 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF10", "from": "system", "setting_id": "cgzmqzFT32UhNW5Q", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json index bffe8b53c8..39ac4a7119 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF10.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF10.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "hxsu8XybSxfesTJf", - "filament_id": "GFB99", + "filament_id": "OFQMsFfF", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json index 1d88686ecc..15314bf743 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "Do5JLiLyzue036L8", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json index df3f122417..c0f30133ce 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "hTEx7UgX2wWanON5", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json index 2c99858ffa..ee93a959e9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "shInwFwd1Yh5wUJB", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json index dcdb75359c..5c51beb27a 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "LQoXGFsJRpjCTBKm", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json index 43b86fdab1..0cf39c8240 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "5ONV5cuwTbSMWPMf", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json index 8f090308d5..e204c4e0c9 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ABS-GF25", "from": "system", "setting_id": "nvfnoGOwhELWArss", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json index 67eac5a65f..dbac9e9e47 100644 --- a/resources/profiles/Qidi/filament/QIDI ABS-GF25.json +++ b/resources/profiles/Qidi/filament/QIDI ABS-GF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "mFWkL9nlS289XAWu", - "filament_id": "GFB99", + "filament_id": "OFZLtWYs", "instantiation": "true", "filament_type": [ "ABS-GF" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json index 1f61623cb0..078e81b02b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPrwCFLO4P82f5lz", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json index fed39958bf..fc2d6d8ba6 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "zku756j16aST1ugn", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +19,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" + "Generic ASA @Qidi Q1 Pro 0.4 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json index 5dd51ba6e3..8a5be0dcd5 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "EcewU7mP5y2vDwRn", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json index 4595c5cb56..03b5748208 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "JPCSXfcIngQGTuOz", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json index 53d965df8f..64e213bd94 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Max 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "hhkWOEdIbQrB4IR0", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json index bf52b6954e..4578f2d1dc 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "QiV5OREyiy9cb2yA", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json index 8fa1de7e85..7723cdca74 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "yOWilrQPhpvcpWM4", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "chamber_temperature": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json index 3c259e858a..f9dfff9d99 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "tohpo42HW9BLvVcH", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" @@ -19,7 +19,7 @@ "16" ], "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle" + "Generic ASA @Qidi X-Plus 4 0.4 nozzle" ], "nozzle_temperature": [ "255" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json index 33505ecf75..0e0f51245b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "iDF5lahr0TRvLF8F", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json index ace413d4d2..71682bf82d 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "p371tUSbBj3WOi5M", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json index 8d1bb937b1..f0dd09ede0 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA @Qidi X-Smart 3 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA", "from": "system", "setting_id": "4NUwEIv3156HKgev", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json index d7fa79e31b..525810872c 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "UZg7s2SVhCGDcdkA", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json index 4f166dfd1a..dccb6eb9fa 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "x8avbSHn73PayVfR", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json index 7df6c822af..059390e58b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI ASA-CF", "setting_id": "FagCR4bLL1ctSXax", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "filament_settings_id": [ "QIDI ASA-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json index 33af36c33b..84035c06d3 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "T6U1oaEsA0T3ogMM", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json index c549a01bb3..7532ce7249 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "8Xm0AjRaktaNfo4o", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json index c62d7926f9..29a88f5e45 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Max 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "4p12RphItNlfwqwT", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json index ef993b3193..8e73a8d4f2 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "346HiaeZvs3BoFUb", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json index d768ca7ab5..203856fde8 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "LROz60JZsh6GN7CK", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json index 8eb7f15885..9bcccb476a 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Plus 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "5OR8LnFPipv3h4h8", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "during_print_exhaust_fan_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json index e3d8e010cd..fd6963ecb4 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "wyns97Rn3EVTl0v5", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json index 20348ce7cf..de52d4fea8 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "zituWsHG83yRR1lM", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json index ea8120a8d6..0c18c54f8e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF @Qidi X-Smart 3 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI ASA-CF", "from": "system", "setting_id": "2CgI1u8NrWGqxN1C", - "filament_id": "GFB99", + "filament_id": "OF1W7c76", "instantiation": "true", "additional_cooling_fan_speed_unseal": [ "0" diff --git a/resources/profiles/Qidi/filament/QIDI ASA-CF.json b/resources/profiles/Qidi/filament/QIDI ASA-CF.json index 9e1ac1c012..0b6906338b 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA-CF.json +++ b/resources/profiles/Qidi/filament/QIDI ASA-CF.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "QD_0_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/QIDI ASA.json b/resources/profiles/Qidi/filament/QIDI ASA.json index bfd6c00df7..5e0f08db8e 100644 --- a/resources/profiles/Qidi/filament/QIDI ASA.json +++ b/resources/profiles/Qidi/filament/QIDI ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "v2LrEujF68PPbrux", - "filament_id": "GFB99", + "filament_id": "OFTsHNQi", "instantiation": "true", "filament_type": [ "ASA" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json index 04cc184d19..e377cff6f9 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "rDi5X7jq3PrXGeSo", - "filament_id": "GFB99", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json index 12696f5c4a..6921a3ac20 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "tF0ym95Eo2WVjYrv", - "filament_id": "GFB99", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json index 3bde720ab2..6482c628bc 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "bWc3l0t1llvWvFei", - "filament_id": "GFB99", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json index 56512094ca..1d8276e697 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "qdecbUennyPdmB0A", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json index 3b0d9029c2..ebd5a74d26 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "oAp4leYdCEJY771O", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json index 795c6dbbfc..7f36d5973b 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA-Ultra", "from": "system", "setting_id": "d5wSCLXU0dhvtbM5", - "filament_id": "QD_0_1_24", + "filament_id": "OFlN6DL1", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json index a57e564ca4..3a7512ae98 100644 --- a/resources/profiles/Qidi/filament/QIDI PA-Ultra.json +++ b/resources/profiles/Qidi/filament/QIDI PA-Ultra.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Rp1vbScHgwAZAwNT", - "filament_id": "GFN99", + "filament_id": "OFlN6DL1", "instantiation": "true", "filament_type": [ "UltraPA" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json index 4c287235ef..8aae289040 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "Q3votaRX4HuxZl1j", - "filament_id": "GFB99", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json index 6b57b653e1..6fb1462acb 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "aaAKfscwITCW1cIY", - "filament_id": "GFB99", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json index ba8250d7b8..df40927a88 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "nsFoTEFnTCbVM5VS", - "filament_id": "GFB99", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json index 14e508b501..271abf03e1 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "e8Lz1jXDuBS8tzvW", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json index 8d024087cf..d82b9caf50 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "2DYXiTX67NfmBSCX", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json index a9f43cdaee..d291f54a00 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PA12-CF", "from": "system", "setting_id": "Kkj773eEVzhT6B7Q", - "filament_id": "QD_0_1_27", + "filament_id": "OFn6WpN7", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PA12-CF.json b/resources/profiles/Qidi/filament/QIDI PA12-CF.json index 7276593388..1c9670ae87 100644 --- a/resources/profiles/Qidi/filament/QIDI PA12-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PA12-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "tDdg0DlqE4Nle5Xo", - "filament_id": "GFN98", + "filament_id": "OFn6WpN7", "instantiation": "true", "filament_type": [ "PA12-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json index 483308828c..b4373b79b4 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "wBwy10qTZT9LPkX7", - "filament_id": "GFB99", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json index 559d626e6a..bb3e66d408 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "a7pcw1dTC3bXjkqQ", - "filament_id": "GFB99", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json index a70309e85a..c2a557e26f 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "pRBh7YZdJFYv4rED", - "filament_id": "GFB99", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json index 66bf7ff727..f8945441a6 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "3HTNW0nsdZy151mm", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json index 0e3da99aed..d403b161f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "t9VMvRmLwAT37YHm", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json index 1c5730c874..ab786208f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-CF", "from": "system", "setting_id": "F30WpUvosUoiAKry", - "filament_id": "QD_0_1_30", + "filament_id": "OFKgmsqE", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json index 62533cfa49..f366e23fc5 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Hws8EIuQkAfaCJGk", - "filament_id": "GFN98", + "filament_id": "OFKgmsqE", "instantiation": "true", "filament_type": [ "PAHT-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json index ea7f2a65c6..f365f39f31 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "jRV6kS5c49Jf0IBJ", - "filament_id": "GFL98", + "filament_id": "OFo15hcT", "instantiation": "true", "pressure_advance": [ "0.016" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json index 4496ed57ea..134232f846 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "ic09uwyOjmjgZhCY", - "filament_id": "GFL98", + "filament_id": "OFo15hcT", "instantiation": "true", "pressure_advance": [ "0.023" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json index 3202c6fce1..3d5b6136ba 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "BGwcBuMu2dcF1nGB", - "filament_id": "GFB99", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json index 35daa7f005..4139a0bb49 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "R8msB42rgbyfT0sG", - "filament_id": "GFB99", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json index 5c2461e535..3d10846072 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "D1nnJWlyUV0wvZnz", - "filament_id": "GFB99", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json index 0d83c21079..e2c869d923 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "xHG5cy5GGfu88GoC", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json index d90f8c3eec..fd0fe1f926 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "z1EQUUwgsLHYgeHG", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json index 4d1b97b8fd..3a56d3c6fa 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PAHT-GF", "from": "system", "setting_id": "yTNCP86ycfXgy8zV", - "filament_id": "QD_0_1_31", + "filament_id": "OFo15hcT", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json index 1ca4105b5b..2093825bbd 100644 --- a/resources/profiles/Qidi/filament/QIDI PAHT-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PAHT-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "A6BaDz936RbO2EW1", - "filament_id": "GFN98", + "filament_id": "OFo15hcT", "instantiation": "true", "filament_type": [ "PAHT-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json index 8ef70475b3..ffb254d8db 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "VNbCsg7HAvK02shi", - "filament_id": "GFB99", + "filament_id": "OFhiJE7Y", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json index 153b1c8543..41d449361d 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PEBA 95A", "setting_id": "SBJaM8xcxmruL8Sx", - "filament_id": "GFB99", + "filament_id": "OFhiJE7Y", "instantiation": "true", "filament_settings_id": [ "QIDI PEBA 95A @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PEBA 95A.json b/resources/profiles/Qidi/filament/QIDI PEBA 95A.json index 4695bcf9ae..937ef89808 100644 --- a/resources/profiles/Qidi/filament/QIDI PEBA 95A.json +++ b/resources/profiles/Qidi/filament/QIDI PEBA 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "qkErLCeMU5ufGB0k", - "filament_id": "QD_0_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "true", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json index fe24beddf7..ecab417416 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "sPox9vMaLAuoZoP2", - "filament_id": "GFB99", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json index beaa69e235..8263cd2cf9 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "6BLOwVDtDPvTqanQ", - "filament_id": "GFB99", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json index 38ba31b9c2..a1f15b927a 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "znZt3ns7eHGTA3sX", - "filament_id": "GFB99", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json index 5a9f9e7aa5..7ebb044048 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "3k9qy3LCbhnnRRad", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json index a6477c90bb..fcaf24fe9a 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "xYAAeJcC83x4RoIl", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json index 4670fe40bc..6fffac3277 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-CF", "from": "system", "setting_id": "JXE7r9nJqui21eJW", - "filament_id": "QD_0_1_37", + "filament_id": "OFKfJTwL", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-CF.json b/resources/profiles/Qidi/filament/QIDI PET-CF.json index 561c9f0929..e187e4550d 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "X4zXjt7t9eLbESzJ", - "filament_id": "GFN98", + "filament_id": "OFKfJTwL", "instantiation": "true", "filament_type": [ "PET-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json index 400337fbd8..e8bc3fc708 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "N9zX7M4yR8u5Jqjd", - "filament_id": "GFB99", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json index f87c252aa5..9a13f2e1c5 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "ATyJ8qPoYVqi7J3I", - "filament_id": "GFB99", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_settings_id": [ "QIDI PET-GF @0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json index d5e51c6102..bff7391a88 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "I48bgbR8Rq9DDxmR", - "filament_id": "GFB99", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json index ac877dc6ca..56f49905f9 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "hGLyYZ2WBTIFnWnc", - "filament_id": "GFB99", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json index 4554a3b574..39399a1915 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "XC3F1NLZxw1v5Bh3", - "filament_id": "GFB99", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json index e7131b8b4a..3614aa9ebc 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "zSjGCRFJPKjrnxXj", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json index 62eaf75e85..71d711d7f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "qKGOeBEUrafs1H1C", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json index 96112b4283..072689464e 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PET-GF", "from": "system", "setting_id": "S3VakjOmAENmBhoU", - "filament_id": "QD_0_1_38", + "filament_id": "OFhx4uOG", "instantiation": "true", "fan_cooling_layer_time": [ "10" diff --git a/resources/profiles/Qidi/filament/QIDI PET-GF.json b/resources/profiles/Qidi/filament/QIDI PET-GF.json index 444747342d..cef1774ed3 100644 --- a/resources/profiles/Qidi/filament/QIDI PET-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PET-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "nXZR8ykt6JdxvTCd", - "filament_id": "GFN98", + "filament_id": "OFhx4uOG", "instantiation": "true", "filament_type": [ "PET-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json index 9aa6df6a65..e1351c1452 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "U8Tz8l63gQMoW1TR", - "filament_id": "GFG99", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json index 5cc5b51fd3..e2f7f3eae4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "i5DnDzOFFFsd4ear", - "filament_id": "GFG99", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json index a4844774cc..1c38fa0a64 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "eqwWKpJur2oPzaig", - "filament_id": "GFG99", + "filament_id": "OFuJ49uH", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json index 1c7fb7e0d3..6427dfebe7 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "ZwdzHcsJbYBI04Yn", - "filament_id": "GFB99", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json index dbf88b47cc..bd55a96d95 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "wYE4aUeszHw1HJrZ", - "filament_id": "GFB99", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json index ae41acdb9e..81c9040a53 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "SbHnONYlR2WneAjS", - "filament_id": "GFB99", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json index 0880da2bef..03e5e299a9 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "EQrNIdbODkHki7pY", - "filament_id": "GFB99", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json index dd6e20b2ed..900c3e1f7e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "SaZRrBNZwbPUxSRv", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json index 853d55b506..8e63d3f56a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "33Anr90IUQGC3jJZ", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json index 8758f39eb5..2e8f4acbb4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "l4LT5GPolnkeEEK6", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json index 55db9aa126..741988239b 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Basic", "from": "system", "setting_id": "r6LnysrDaSyIserx", - "filament_id": "QD_0_1_39", + "filament_id": "OFuJ49uH", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Basic.json b/resources/profiles/Qidi/filament/QIDI PETG Basic.json index 1899fa6b7c..61f3784f74 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "7uiFWB9SSJvhXKt0", - "filament_id": "GFG99", + "filament_id": "OFuJ49uH", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json index d925f371b2..262479a3d5 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "17nQzSvxOhC8RqMv", - "filament_id": "GFG99", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json index e1636c5d4a..0668e88303 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "TJja29CvUqlXnhWM", - "filament_id": "GFG99", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json index ad4044f181..d4f9e92e17 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "6rVVNiYVHxsxqk0M", - "filament_id": "GFG99", + "filament_id": "OF4S3To3", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json index 3aff0af94f..5ede468e69 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "MoKlaB96ptTjnoa8", - "filament_id": "GFB99", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json index 45ba611152..ceff06761e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "S2CUnrPuZuvBo19K", - "filament_id": "GFB99", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json index 8f72cf31ed..5ce3194c0c 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "kEUCaWmAo3xZC09A", - "filament_id": "GFB99", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json index bf500050a6..a64c3fba4a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "4Tse2Ycxud3qX0aQ", - "filament_id": "GFB99", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json index a2098e7af1..c0b3eb3d2d 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "O2SmSJeOq2QkMawy", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json index c2a930616a..4df839e4d4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "UkzoaZIuBEwTCUYL", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json index fc64677656..00b3f5abeb 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "wMG9FBNFTJR3mI2Y", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json index da2dbce484..480da3bd6a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Rapido", "from": "system", "setting_id": "WF4EIoqqebSQYJCL", - "filament_id": "QD_0_1_41", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Rapido @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json index 67d19f82a2..991ee37f5a 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "YK77S7a06UMEQzum", - "filament_id": "GFG99", + "filament_id": "OF4S3To3", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json index 0dfd072089..cf42e76d85 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wl53hiPD7EGYabrt", - "filament_id": "GFG99", + "filament_id": "OFVHMFJX", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json index 2f5838b537..6c1de3e610 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "QUkztHAxlI1gg1xe", - "filament_id": "GFG99", + "filament_id": "OFe8yBMG", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json index 68706bbe3c..e25eac8748 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "vtQb2QBD5ongR7vC", - "filament_id": "GFG99", + "filament_id": "OFfr6JDF", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json index 26589c581e..89415a8dc8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "KHeb2TVAxtw6fbRm", - "filament_id": "GFB99", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json index 5317b9f51d..ad32ffa5d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "22HUqZbuYgOGNRfN", - "filament_id": "GFB99", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json index f32ca31314..76e0071f42 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "U35fhYtgLMsDXEws", - "filament_id": "GFB99", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json index 2a524dda6a..9229387ad6 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "wqzUWt3IiEURFRYL", - "filament_id": "GFB99", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json index 5a24596ad8..6aeaf4d124 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "Mu4RDxD4sVyJwRXc", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json index 20e2ce8605..0058311761 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "FJryx96xxfATPqls", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json index f0676efd80..1546b821fe 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "SmywHXjvv1Ju150F", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json index a669d37ca3..e4d84406f2 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Tough", "from": "system", "setting_id": "BwMkyVGyL0Pmqp1w", - "filament_id": "QD_0_1_40", + "filament_id": "OFQ40XeN", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Tough.json b/resources/profiles/Qidi/filament/QIDI PETG Tough.json index a9193be4b4..6a32ec5569 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Tough.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Tough.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "SrZXxBXWXda9boGv", - "filament_id": "GFG99", + "filament_id": "OFQ40XeN", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json index 126d86f7bb..719f4cb648 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "I8DmnTJey0BaBBAN", - "filament_id": "GFG99", + "filament_id": "OFf0MkD5", "instantiation": "true", "pressure_advance": [ "0.04" @@ -15,7 +15,6 @@ "compatible_printers": [ "Qidi X-Smart 3 0.2 nozzle", "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi Q1 Pro 0.2 nozzle" + "Qidi X-Max 3 0.2 nozzle" ] } diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json index 79d558d34f..6b5acc46d3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "0SbgoW822S43QDoX", - "filament_id": "GFG99", + "filament_id": "OFf0MkD5", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json index 02e4793b34..92cbd91012 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "rOakaeWOHKz9immU", - "filament_id": "GFG99", + "filament_id": "OFf0MkD5", "instantiation": "true", "pressure_advance": [ "0.04" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json index 2926cfa7d4..581e9b9107 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "RBy7wrl1ZQOdKe8i", - "filament_id": "GFB99", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json index 23ed635640..69f9916106 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "Y0jCXY0Ihd6eRlm4", - "filament_id": "GFB99", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json index b2397ddb33..3fca9fa3f8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "9yzSrCFgR00Lx8Ab", - "filament_id": "GFB99", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json index 8c86c18134..99edc43ac8 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "uMHHs1N1fLMq56FF", - "filament_id": "GFB99", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json index 5082d4d9f0..d1fc5490ca 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "6bASygXwTEKR4Twi", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json index 22d8ffe823..a629cb862f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "QL7Ob5qH7GBsl9ga", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json index e1fbad24e9..d6cbc67505 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "wwodlWk71rHgZ323", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json index 7ad9a35a0c..1ff04f026c 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG Translucent", "from": "system", "setting_id": "Nh88D1u7mMVGhqCU", - "filament_id": "QD_0_1_45", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_settings_id": [ "QIDI PETG Translucent @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json index a7e1a3f943..1b00da208d 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG Translucent.json +++ b/resources/profiles/Qidi/filament/QIDI PETG Translucent.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "5k6FnlL39pSbrei2", - "filament_id": "GFG99", + "filament_id": "OFf0MkD5", "instantiation": "true", "filament_type": [ "PETG" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json index 15e4f9f4c6..1de1163020 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "6EOvD75tBRyvffZF", - "filament_id": "GFB99", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json index 06118ac128..01483c22f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "ByHCLDgv1HFiA1Bb", - "filament_id": "GFB99", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json index aff00a2a31..1ff8be3c19 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "NBrZJME5Jt7jwU4W", - "filament_id": "GFB99", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json index 42fe672412..76176b1597 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "OSLMQVT2l2Yert5l", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json index a0b04d61be..fbeb10bf2e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "rpJAbHlG6bJhJoAs", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json index 91265bb6b3..92fafc92ca 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-CF", "from": "system", "setting_id": "yyB4FvX6mflpfiZd", - "filament_id": "QD_0_1_42", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-CF @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-CF.json b/resources/profiles/Qidi/filament/QIDI PETG-CF.json index 734b4722ca..e2b5316a51 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "vg3YJMhVaXTMTVLJ", - "filament_id": "GFN98", + "filament_id": "OF4iWKrE", "instantiation": "true", "filament_type": [ "PETG-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json index c6635252e2..4528379034 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "4kBE3NMTit44g7S1", - "filament_id": "GFB99", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json index 753888565d..acb59a4b53 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "SzH90qDpFuNpG7Ud", - "filament_id": "GFB99", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json index ff22c08ab9..cdb3ab339f 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "9XoDC8DHvxvgrRor", - "filament_id": "GFB99", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json index b7f85630bd..73b3a23fab 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "I6Tg5JVz1Q0RigOW", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json index 4b29595ea8..20d1de619e 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "RmitFKegDy89lNH4", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json index a7a0295a94..a67ef4d5a4 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PETG-GF", "from": "system", "setting_id": "AoO0ihxQmsL2up4w", - "filament_id": "QD_0_1_43", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_settings_id": [ "QIDI PETG-GF @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PETG-GF.json b/resources/profiles/Qidi/filament/QIDI PETG-GF.json index 060219b0b0..e9f7252039 100644 --- a/resources/profiles/Qidi/filament/QIDI PETG-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PETG-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bex5zSdkQThZQi0s", - "filament_id": "GFN98", + "filament_id": "OFdtPd9h", "instantiation": "true", "filament_type": [ "PETG-GF" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json index 52c98be3a0..8fffe5d1a9 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "hWJXKDKNjeBqYYFk", - "filament_id": "GFL99", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json index ab3cc9c974..9f5cfa548b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "LMfV673NzArmzY44", - "filament_id": "GFL99", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json index 0dc39007eb..444c03e6ea 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "CyXcxvEKE6gnCRm9", - "filament_id": "GFL99", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json index 449e7e207a..3dc9c3c692 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "g7OVjk2xNWWNQo9D", - "filament_id": "GFB99", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json index c2f7dab865..8e446f1f83 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "EdgtTQVIiPatR9Rt", - "filament_id": "GFB99", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json index ade21c62a6..198c392cd1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "UTbL94nFN0Cx30p6", - "filament_id": "GFB99", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json index 5648eb9fd5..ff845fb81c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "INxFTcta59v2Ukpy", - "filament_id": "GFB99", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json index e49360108e..34d98b4b1c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "AOa9WW2IN1VHGXGM", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json index 951227fba2..3dbeaf452f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "qdagUM7IIKyfHB2g", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json index c7f30d1c03..183fe2cf8f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "CwsM4SCrRAhAJVfN", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json index a255f2e368..878f91711e 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Basic", "from": "system", "setting_id": "HE3KK8QRsGrgLnr5", - "filament_id": "QD_0_1_7", + "filament_id": "OF4nQ62r", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Basic.json index c5e219dd3f..5456c83805 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "UlF92qvJnOYzq0mw", - "filament_id": "GFL99", + "filament_id": "OF4nQ62r", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json index 25eeab9475..4cce2a6f5c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "vzT3dsogzkZSegM0", - "filament_id": "GFL99", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json index bbea662f87..8fc9a37ed1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "rdGuWICdcIZ3fXJb", - "filament_id": "GFL99", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json index 6418a8fa5e..3acc12ff0a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "9z0BoiNtKlwPoCI4", - "filament_id": "GFL99", + "filament_id": "OFughwKn", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json index 86b7154e88..061f7526f3 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "Txg82qpCGVco78Ih", - "filament_id": "GFB99", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json index 9097ca2c19..1d921fecff 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "smHGcdmpWzQy1vW3", - "filament_id": "GFB99", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json index 69f09b85ca..8eb3335beb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "hGKQJNUIQR0srofE", - "filament_id": "GFB99", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json index f945029342..b5f8c2a48c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "kARyA9JRV7f6Wu3E", - "filament_id": "GFB99", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json index a6d7f3b66b..4074d5a1cd 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "8JEZpQeq7FEoUQQd", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json index 90b3876c66..ae55810f39 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "6Z2ery99xHlP2ciV", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json index 35d11757ce..bb1c7bd1d1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "27eKOPtsQZIRwQYo", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json index de7de4d803..59ffd6424f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Matte Basic", "from": "system", "setting_id": "nf5VwfZ4gpGG5ufO", - "filament_id": "QD_0_1_8", + "filament_id": "OFughwKn", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json index 6204fd0d38..d9d99e5029 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Matte Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "53yYF0gK91AQcKAy", - "filament_id": "GFL99", + "filament_id": "OFughwKn", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json index c316f431a1..a913878021 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "jpTA43XolFvODs9f", - "filament_id": "GFL99", + "filament_id": "OFhwiZ50", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json index 42556d2f6b..92819732f0 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "MGW0kfdHATaAzL1P", - "filament_id": "GFL99", + "filament_id": "OFglhKLM", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json index 93f8b8b239..17ecf6e992 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "eQOfNVt6OqCFj0bV", - "filament_id": "GFL99", + "filament_id": "OFKIQO2W", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json index f72a01ceda..adc3655403 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "tdL1kK6jLbREgYna", - "filament_id": "GFB99", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json index 05e66e91b6..0af8afe9a4 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "zfL5B7iAlx3PbJ1j", - "filament_id": "GFB99", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json index 29f2a5e350..5b8b3bd442 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "oZZn5VxcrwDJX9fE", - "filament_id": "GFB99", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json index 9aedb1f214..dadceacf8f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "o1lfFStVDZMsdFtr", - "filament_id": "GFB99", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json index 49115068c6..574c3f9f38 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "xaGFbFpbrZ9v3RKy", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json index 1a17ca5b69..466ff357d7 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "Vy1gTRsTAyLCcyTC", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json index 03d69431af..35654f4798 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "Rt3UcmwI8R8fxKUa", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json index e62b729ec9..ba7fd2b4b1 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido", "from": "system", "setting_id": "dWb415VG0AlqTWFD", - "filament_id": "QD_0_1_1", + "filament_id": "OFKIQO2W", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json index 0392403caf..fb1959a33d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "HK2fT6TYIIS94MZD", - "filament_id": "GFL99", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json index 34bcfbab7b..be4fc7fc47 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "syivJeR1eO6H8wsK", - "filament_id": "GFL99", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json index 8e168e3347..e002a51409 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "User", "setting_id": "WC8KpzKwpQcHOStJ", - "filament_id": "GFL99", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json index 8cef6a51f9..a31fa6c9a5 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "RccxOqWrkZljiU5Y", - "filament_id": "GFB99", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json index 8a6e89f667..4448e4e24d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "8KV7AfivVZHM6ReD", - "filament_id": "GFB99", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json index 648c46e717..7b9a1d8dc5 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "c5lFoguRq8sBwQ1K", - "filament_id": "GFB99", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json index 3cb87903ff..d90e8dbcdb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "95NdLwU31HQJthJE", - "filament_id": "GFB99", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json index 28111c4f07..2c89680ccc 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "9YVeedSIviWv3n9F", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json index dce300b652..5be44f4493 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "M7OXECFdZK4ZAoba", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json index b95ff5f588..55b3b75f4c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "zXKa67Oj1qSsHlct", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json index 14732dfba7..7f9c359004 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Matte", "from": "system", "setting_id": "iJ0geNRlmJkSPQfN", - "filament_id": "QD_0_1_2", + "filament_id": "OF3IKafc", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json index 0794ea2af4..d19017a05c 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Matte.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "gwmsxvv6cpmVlBDa", - "filament_id": "GFL99", + "filament_id": "OF3IKafc", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json index 92d6c1a902..9a56d85ace 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "oZC1FZ93158dUC0j", - "filament_id": "GFL99", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json index 26f96a21f6..6f37ee7eeb 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Ix7a15ABLu7ykbMb", - "filament_id": "GFL99", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json index 4a4f0ffd10..de4e1c62fe 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "NdUtpGmW1Rl2h1Xc", - "filament_id": "GFL99", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json index a4d88bd29c..60bf1985b3 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "6obXUws35j7OkE2v", - "filament_id": "GFB99", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json index 571decc29b..c2dd7afbd9 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "Z0YSeNJQ3rKDwzsp", - "filament_id": "GFB99", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json index 4119d9da15..5fa9b63ea7 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "BoVtyU2REc0Ayzc4", - "filament_id": "GFB99", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json index 17f7a4818b..ff220ecd05 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "EKWOHWk37Yn1jS5V", - "filament_id": "GFB99", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json index 0ac378e9e8..57af588669 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "PvK39S1OvklDcZiB", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json index 171ae933d8..4063f51d06 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "9CsEnbzkLosi8Y4Y", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json index 46940dd8b6..7966d19908 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "kQGl05whrHW2T43U", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json index b007ae0bf6..8b0517b09b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Metal", "from": "system", "setting_id": "m2ctHQXA57lyjj4Q", - "filament_id": "QD_0_1_3", + "filament_id": "OFANFm4x", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json index b118bcfd02..03c9200bd0 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "yrS51y3N1ooM5ULv", - "filament_id": "GFL99", + "filament_id": "OFANFm4x", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json index dbe2d57ace..5ca5b12e28 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "AaBBTIJSMkxxTPDt", - "filament_id": "GFL99", + "filament_id": "OFW5FqkL", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json index 63cfb9c6b0..d0382ee04f 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "hnWx5ZM2ecclYvKA", - "filament_id": "GFB99", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json index c81d897d30..5ea0e37bb8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "bQTjglDv2qjgrUNl", - "filament_id": "GFB99", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json index 0cb15c1cae..7e53839859 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "X0DxlkkldQnTUfLy", - "filament_id": "QD_0_1_4", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json index bacf625ed2..4fa2ca7198 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PLA Rapido Silk", "from": "system", "setting_id": "McXMhVyp029M56kU", - "filament_id": "QD_0_1_4", + "filament_id": "OFW5FqkL", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json index b877e50774..7c90a10971 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "zifqr9yiIZKivCNu", - "filament_id": "GFL99", + "filament_id": "OFW5FqkL", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json index 1add171288..f1ecaf7790 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI PLA Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "JdGWg2Kn3T2L2Ai2", - "filament_id": "GFL99", + "filament_id": "OFKIQO2W", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json index 6d266568a1..44ad31c806 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "BTqlIKpYFQCC8gJt", - "filament_id": "GFL98", + "filament_id": "OFhWrAuP", "instantiation": "true", "pressure_advance": [ "0.01" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json index ed91757e71..f3aa8a98ac 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "0Wr2y2a7rHYbk5fS", - "filament_id": "GFL98", + "filament_id": "OFhWrAuP", "instantiation": "true", "pressure_advance": [ "0.008" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json index 3b236b0420..a3256ff5c8 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "xGqY059EYGUevj9G", - "filament_id": "GFL98", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json index cf77b2cdf0..146170c42a 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "Fh7yuJKSeYs8doRG", - "filament_id": "GFL98", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json index 49c9d3c0f2..fa27094b4b 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "vs5bFF3r8Kid59u9", - "filament_id": "GFL98", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json index 890f9d3f5a..85c8e28574 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "Uue4WvW1uAwK2o0Y", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json index ed3f0d52ac..f77049928d 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "3SSQEk5a2vnHKG2g", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json index 29df7c92ea..01650e5b11 100644 --- a/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PLA-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PLA-CF", "from": "system", "setting_id": "jlUhowcsrMLKZBHH", - "filament_id": "QD_0_1_5", + "filament_id": "OFhWrAuP", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json index d90bd4e3c8..c56717e27a 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "E30t78jBGCkTztFC", - "filament_id": "GFB99", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json index 20cbb98a2d..f5ec65de8b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "pYmENqkzOsA9LRLW", - "filament_id": "GFB99", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json index d135252ac8..82f8ba4ac4 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "7ozi6TNb3ObLpD2v", - "filament_id": "GFB99", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json index eecd12264a..fddc4c3fe2 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "iNx7JrGG0r5s24dV", - "filament_id": "GFB99", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json index 50bc577d0e..510f62273a 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "tQnGlZa0FL2FpHho", - "filament_id": "GFB99", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json index 2060c98114..b0eba4d48b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "HVN6Bfz9FENqgw14", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json index 37cd2a368d..ebbadcecbc 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "T5f0IJeUy3XIzrVw", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json index 2910fe2bd7..eccaa7c066 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI PPS-CF", "from": "system", "setting_id": "eXV1ZPiBolFIU4Ub", - "filament_id": "QD_0_1_44", + "filament_id": "OFZOuWrO", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-CF.json b/resources/profiles/Qidi/filament/QIDI PPS-CF.json index 13db20b99f..b6465a1de8 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-CF.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "ODM3oXV1OSv3qTbZ", - "filament_id": "GFN98", + "filament_id": "OFZOuWrO", "instantiation": "true", "filament_type": [ "PPS-CF" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json index 6f520e1d27..be4cc6b611 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "VgQiY3csDj6bBWSk", - "filament_id": "GFB99", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json index d7e1fa61d5..cc450abf5f 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "8hFaMBYD7pnmsZWd", - "filament_id": "GFB99", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json index d3adec2da2..9245da8045 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI PPS-GF", "setting_id": "BcrvpHAPx0FBvOi3", - "filament_id": "GFB99", + "filament_id": "OFp57RRC", "instantiation": "true", "filament_settings_id": [ "QIDI PPS-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI PPS-GF.json b/resources/profiles/Qidi/filament/QIDI PPS-GF.json index 8688747e35..dcee07928b 100644 --- a/resources/profiles/Qidi/filament/QIDI PPS-GF.json +++ b/resources/profiles/Qidi/filament/QIDI PPS-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "uoOOXPpTEGa9bqhx", - "filament_id": "QD_0_1_46", + "filament_id": "OFp57RRC", "instantiation": "true", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json index 7093e58d9e..ad53eb97eb 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "aQUPvUd9uPbi7HEx", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json index 2d85b489c1..c214764ce8 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "2RpRJwkUVzHwU6Ts", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json index 77b6a34209..3ecffe9c54 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PAHT", "from": "system", "setting_id": "Arig0uL9inQi0NKf", - "filament_id": "QD_0_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PAHT @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json index 338628640c..465d3239fd 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PAHT.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PAHT.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "7cd7R9xbuNtLfCHa", - "filament_id": "GFN98", + "filament_id": "OFXn3Vd9", "instantiation": "true", "filament_type": [ "PAHT-S" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json index bd6310ae72..c5717ecee8 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "EzPLJJzV7W1GfAuZ", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json index 7899b0435f..4282ec8718 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "Nfu1o1YZL9zK1VNS", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json index 43ffafb5bb..3791f09e5a 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI Support For PET/PA", "from": "system", "setting_id": "xJQLw0SvSPItH0wa", - "filament_id": "QD_0_1_33", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_settings_id": [ "QIDI Support For PET/PA @Qidi X-Plus 4 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json index cf18d83f80..d0c8a33368 100644 --- a/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json +++ b/resources/profiles/Qidi/filament/QIDI Support For PET-PA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "Am158VMH3y6FDxON", - "filament_id": "GFN98", + "filament_id": "OFqcL5UF", "instantiation": "true", "filament_type": [ "PA-S" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json index a99ea32ca7..21cc9d864e 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "O7oxTgsH9q8jlqzd", - "filament_id": "GFB99", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json index 159561dbbd..8fd94ae68b 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "FR1LQ5DM0upGQQfs", - "filament_id": "GFB99", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json index 18134da7e2..193a5d327f 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "6PFep2VmiWoOZLSn", - "filament_id": "QD_0_1_49", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi X-Plus 4 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json index fc9b28c722..9ee1ce187e 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI TPU-Aero", "from": "system", "setting_id": "cqXDJN6nwBX3xVB7", - "filament_id": "QD_0_1_49", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-Aero @Qidi X-Plus 4 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json index 70f7e16ecd..9c8171b3b1 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-Aero.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "BARooxJKaDXbGd9B", - "filament_id": "GFU99", + "filament_id": "OFMDHOcT", "instantiation": "true", "filament_type": [ "TPU-AERO" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json index 897e274d70..323efc4494 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "GufOfCCphUDzeSo1", - "filament_id": "GFB99", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.4 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json index 0bd0d3ce6a..70c0b04f41 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "nY6q9vd6lpaXiQpc", - "filament_id": "GFB99", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.6 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json index 528ae87a68..4b2637fbcf 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle", "inherits": "QIDI TPU-GF", "setting_id": "67agKUajM0pFFhia", - "filament_id": "GFB99", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_settings_id": [ "QIDI TPU-GF @Qidi Q1 Pro 0.8 nozzle" diff --git a/resources/profiles/Qidi/filament/QIDI TPU-GF.json b/resources/profiles/Qidi/filament/QIDI TPU-GF.json index af3827eb77..3f2eef6661 100644 --- a/resources/profiles/Qidi/filament/QIDI TPU-GF.json +++ b/resources/profiles/Qidi/filament/QIDI TPU-GF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "r8sdMolKGn3b52NX", - "filament_id": "QD_0_1_15", + "filament_id": "OF9EHUKK", "instantiation": "true", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json index 1921fd982c..7c3f2912e3 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "RgmbbSJpyUyTXPO9", - "filament_id": "GFB99", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json index d800b11f70..22da9225ea 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "aiGnr6fBoUCuwPS5", - "filament_id": "GFB99", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json index 082b2893a3..5c89625458 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "G0qM351aUv23WFmP", - "filament_id": "GFB99", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json index 3871891090..fcaa74f9c7 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "5Two6xier5Pt2f8V", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json index 31b300d45f..8c8bc9d4f7 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "H011um5zj6afHdTI", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json index 8a2ce25ae4..fc03e055ef 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25 @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI UltraPA-CF25", "from": "system", "setting_id": "26BECX2hYZ6JNFRq", - "filament_id": "QD_0_1_26", + "filament_id": "OF9PELEb", "instantiation": "true", "fan_max_speed": [ "40" diff --git a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json index 9ae8202bce..3c84e2c8e5 100644 --- a/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json +++ b/resources/profiles/Qidi/filament/QIDI UltraPA-CF25.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "2AOnWEOsaS2w9Nmr", - "filament_id": "GFN98", + "filament_id": "OF9PELEb", "instantiation": "true", "filament_type": [ "UltraPA-CF25" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json index 60731be079..86ef520191 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "y4aq26TNkKEafwbN", - "filament_id": "GFL99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json index a33c51e4b6..96650a289e 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "1y0tvUmMkDHYmvWC", - "filament_id": "GFL99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json index 6a9b8b61f2..900ffdb085 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "n4ywS2KDL59hb8nA", - "filament_id": "GFB99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json index 2c556b42d6..be06885f90 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "AZB82l14yp3vT5sz", - "filament_id": "GFB99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json index 825fc4d3bd..37805be62a 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "0ZZ9ygXQqnKrrWlL", - "filament_id": "GFB99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json index ec46dd83ff..0bf0bc31f2 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "gfnllytSwMCbiB6b", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json index 1e7359636c..260d987ec0 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "PLrMThf2TXZGtp7N", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json index f184003ac0..d3fd897a93 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "QIDI WOOD Rapido", "from": "system", "setting_id": "ErWlv0gKexLj8wjB", - "filament_id": "QD_0_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "true", "activate_air_filtration": [ "1" diff --git a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json index b80cb7bbe8..22492ba0a8 100644 --- a/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json +++ b/resources/profiles/Qidi/filament/QIDI WOOD Rapido.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "NANyXYa8NOQ45Gy2", - "filament_id": "GFL99", + "filament_id": "OFvdZ2bx", "instantiation": "true", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json index 1002faa656..1ea1175292 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "OVQGLLS3QOoDEPNp", - "filament_id": "GFB99", + "filament_id": "OFG4do34", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json index e70b832791..56af153f3d 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi ASA-Aero", "from": "system", "setting_id": "FKWhpunDSV0iusbz", - "filament_id": "GFB99", + "filament_id": "OFG4do34", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json index 72e771f083..3095c0a964 100644 --- a/resources/profiles/Qidi/filament/Qidi ASA-Aero.json +++ b/resources/profiles/Qidi/filament/Qidi ASA-Aero.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "xTg8UPJXoXdyGccz", - "filament_id": "GFB99", + "filament_id": "OFG4do34", "instantiation": "true", "filament_type": [ "ASA-AERO" diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index 2e6b6d9089..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "BNOS859dmAw7GIZp", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 11fb8e0fad..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "XfuwzYZzTauK0ADk", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_settings_id": [ - "Qidi Generic ABS @Qidi Q1 Pro 0.4 nozzle" - ], - "nozzle_temperature": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "20" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "pressure_advance": [ - "0.035" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 05b680a74a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "ziWmRGMYOpjc7Hpo", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.014" - ], - "filament_max_volumetric_speed": [ - "24.5" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index b9e1f23232..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "lLXYczQE4YfPiyDO", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.011" - ], - "filament_max_volumetric_speed": [ - "24.5" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json deleted file mode 100644 index 576f73e044..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "o62pcRmFnj2mIXhf", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json deleted file mode 100644 index 10d886d12e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "UBWjZCCGQrpgmlpa", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index 7bb68abc19..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "qB4eDc7UuoKv5m2U", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 6da9142823..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "N3Ca9PN8nDnvhmak", - "filament_id": "GFB99", - "instantiation": "true", - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "filament_settings_id": [ - "Qidi Generic ABS @Qidi X-Plus 4 0.4 nozzle" - ], - "pressure_advance": [ - "0.03" - ], - "nozzle_temperature": [ - "250" - ], - "overhang_fan_speed": [ - "80" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "20" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index d499ccf490..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "UkNcVB3bJZqLN3fu", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.014" - ], - "filament_max_volumetric_speed": [ - "24.5" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index 0c76ed7e66..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "uK0zY0a6MpcFTZWr", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.011" - ], - "filament_max_volumetric_speed": [ - "24.5" - ], - "nozzle_temperature": [ - "250" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json deleted file mode 100644 index 06b75195a8..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic ABS", - "from": "system", - "setting_id": "veNBpzcNYa6TAMry", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ABS.json b/resources/profiles/Qidi/filament/Qidi Generic ABS.json deleted file mode 100644 index f0ced9aabb..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ABS.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "wcv9ZpNwvZ0ZcWKw", - "filament_id": "GFB99", - "instantiation": "true", - "filament_type": [ - "ABS" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "17" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "80" - ], - "filament_density": [ - "1.04" - ], - "activate_chamber_temp_control": [ - "0" - ], - "activate_air_filtration": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "slow_down_min_speed": [ - "20" - ], - "nozzle_temperature": [ - "260" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index 7e1c6c50f4..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "OLkg128vxsk27w03", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 4e79e3b9d4..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "pGOT3C5eREsHRylS", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.4 nozzle" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.035" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 95c9fa660c..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "QRlzPtO4mqLKcdws", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "13" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.6 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.014" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index 81a1153f11..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "vLLCDxhI2GR76M1p", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "13" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi Q1 Pro 0.8 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.011" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json deleted file mode 100644 index f68bcca3f0..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "6pY4I5kAFdSYPOte", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json deleted file mode 100644 index 4b2cbc742d..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "A85OmyjS63OgZa0V", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index e070398a5e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "1CBWjstSdMJLJWuv", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 28a74dadb1..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "UIsup1TGWKg0Fq72", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.4 nozzle" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.035" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 422c63c216..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "HQupWXd5yKceVrm4", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "13" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.6 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.014" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index e24a3519bf..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "R6FcpVRhnSp0i8bK", - "filament_id": "GFB99", - "instantiation": "true", - "activate_chamber_temp_control": [ - "0" - ], - "chamber_temperature": [ - "55" - ], - "fan_cooling_layer_time": [ - "40" - ], - "filament_max_volumetric_speed": [ - "13" - ], - "filament_settings_id": [ - "Qidi Generic ASA @Qidi X-Plus 4 0.8 nozzle" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "overhang_fan_speed": [ - "100" - ], - "pressure_advance": [ - "0.011" - ], - "slow_down_layer_time": [ - "4" - ], - "activate_air_filtration": [ - "0" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json deleted file mode 100644 index 2f3fa6a9d8..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic ASA", - "from": "system", - "setting_id": "sE2DGjOmcjRuuh0z", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.021" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic ASA.json b/resources/profiles/Qidi/filament/Qidi Generic ASA.json deleted file mode 100644 index e7878476b5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic ASA.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "WTOEo36YTIFcXDaI", - "filament_id": "GFB99", - "instantiation": "true", - "filament_type": [ - "ASA" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "filament_flow_ratio": [ - "0.92" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "270" - ], - "enable_pressure_advance": [ - "1" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "10" - ], - "pressure_advance": [ - "0.021" - ], - "activate_chamber_temp_control": [ - "0" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json deleted file mode 100644 index 880a914309..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PA-CF.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "aOVEazsct9L3eD2u", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature": [ - "290" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_threshold": [ - "0%" - ], - "overhang_fan_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "5" - ], - "full_fan_speed_layer": [ - "2" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle", - "Qidi Q2 0.4 nozzle", - "Qidi Q2 0.6 nozzle", - "Qidi Q2 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PA.json b/resources/profiles/Qidi/filament/Qidi Generic PA.json deleted file mode 100644 index 4e1f0d20ba..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PA.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "S6S5nM9zZbNCyhya", - "filament_id": "GFN99", - "instantiation": "true", - "filament_type": [ - "PA" - ], - "required_nozzle_HRC": [ - "3" - ], - "nozzle_temperature_initial_layer": [ - "310" - ], - "nozzle_temperature": [ - "310" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.01" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle", - "Qidi Q2 0.4 nozzle", - "Qidi Q2 0.6 nozzle", - "Qidi Q2 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json deleted file mode 100644 index 5b7bbeb84a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.2 nozzle.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @0.2 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "i4Nt0riiDwptxOIe", - "filament_id": "GFC99", - "instantiation": "true", - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json deleted file mode 100644 index d7a15d0bc0..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @0.8 nozzle.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @0.8 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "8mJysYABmQTBlWLw", - "filament_id": "GFC99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index 1e6313bc34..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "be2KpgVjm4APQtrt", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 0aee03bd65..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "9aGpKzNCjXDcfmqr", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.058" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 5b348523ab..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "1BjBpSDoLs6nTHeo", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.025" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index a551323664..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "8ptIGtXeMSwVqkVB", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.008" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index 8dcb9f5e4e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "IQCYG5yZFPsvTuHY", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 297315300a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "TPbG7zlsPowdKEVw", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 32c4f84112..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "mzsetSq0CzwqbGnP", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.03" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index e3b4be943f..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PC", - "from": "system", - "setting_id": "wlnm88gEKcNzvx7W", - "filament_id": "GFC99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.008" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PC.json b/resources/profiles/Qidi/filament/Qidi Generic PC.json deleted file mode 100644 index a0a745246e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PC.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "wd4PrqXE2um46ueW", - "filament_id": "GFC99", - "instantiation": "true", - "filament_type": [ - "PC" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_flow_ratio": [ - "0.94" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "activate_air_filtration": [ - "1" - ], - "during_print_exhaust_fan_speed": [ - "0" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "280" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "hot_plate_temp": [ - "110" - ], - "slow_down_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "60" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index f40180cc1f..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "GfDMSO3DjLxfMnUc", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 6d920bb982..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "SzQLWO8poDxEU0ez", - "filament_id": "GFB99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_settings_id": [ - "Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle" - ], - "overhang_fan_speed": [ - "90" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "pressure_advance": [ - "0.086" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 70b8be014e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "yyfoSMlQsvkmUGR5", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index 69c74caccb..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "ogHITGUcn1r2bHXc", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json deleted file mode 100644 index 1a55f38280..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "CVyv3PHeZaSGmD6E", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json deleted file mode 100644 index e820fe24b2..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "tNl6q6MadSoFZ3EH", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index 289b97e7e8..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "1xGw8fYiSf6YzBnk", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.056" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 3f3fdb2dae..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "MMSCic1l0b3e5qe3", - "filament_id": "GFB99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_settings_id": [ - "Qidi Generic PETG @Qidi X-Plus 4 0.4 nozzle" - ], - "overhang_fan_speed": [ - "90" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "pressure_advance": [ - "0.056" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 403177c5d7..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "KD0ABMKuQunww07p", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index adaf03f5de..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "ZFkH9oLkRWDVovLu", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json deleted file mode 100644 index 2afbdbde97..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PETG", - "from": "system", - "setting_id": "ixR5wIrehSmn8Inz", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_max_volumetric_speed": [ - "1" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json deleted file mode 100644 index 3a668823ca..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG-CF.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG-CF", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "kjmXKWCMonhYhy8U", - "filament_id": "GFG98", - "instantiation": "true", - "temperature_vitrification": [ - "75" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "90" - ], - "required_nozzle_HRC": [ - "40" - ], - "filament_type": [ - "PETG-CF" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_cost": [ - "34.99" - ], - "filament_density": [ - "1.25" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "slow_down_layer_time": [ - "6" - ], - "enable_pressure_advance": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_flow_ratio": [ - "0.95" - ], - "pressure_advance": [ - "0.05" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.2 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.2 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PETG.json b/resources/profiles/Qidi/filament/Qidi Generic PETG.json deleted file mode 100644 index 993b9764ba..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PETG.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "Yk3w834THlnAS3jr", - "filament_id": "GFG99", - "instantiation": "true", - "filament_type": [ - "PETG" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "20" - ], - "slow_down_layer_time": [ - "12" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_density": [ - "1.27" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index 2492a8ea78..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "6e0DHBzRkQvU0419", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.042" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 4569902a19..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "eCR3lbTRdkYcMZgl", - "filament_id": "GFB99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "14" - ], - "filament_settings_id": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" - ], - "full_fan_speed_layer": [ - "3" - ], - "nozzle_temperature": [ - "210" - ], - "slow_down_min_speed": [ - "20" - ], - "pressure_advance": [ - "0.042" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 7aa69c184d..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "JSQupeTNYtzE8l6q", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index 017b42a781..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "n4rp1Pooux07hwx1", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.008" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json deleted file mode 100644 index 46523499ee..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "P57Nm7E7KTnHMov0", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json deleted file mode 100644 index b10017757b..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "DWfVtYimjZxqyDzM", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json deleted file mode 100644 index e8d6372721..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Max 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "ausfQ4SuKLMuruFb", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json deleted file mode 100644 index b1b1b2e9e9..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "JJmzlY5XOz9eGO8n", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json deleted file mode 100644 index 6cd43b3246..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "EpYu1ME5tSsFYirK", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json deleted file mode 100644 index ce7016ad71..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "wZ8U1Ga1bQXbd2nN", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index b9c1fc36d1..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "M0JCDyI7icGyqs43", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.034" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 922bef83eb..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "tRztgu06hBi9IxSE", - "filament_id": "GFB99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "14" - ], - "pressure_advance": [ - "0.034" - ], - "filament_settings_id": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle" - ], - "full_fan_speed_layer": [ - "3" - ], - "nozzle_temperature": [ - "210" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 7c9a86cdde..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "8XzQCGoYi01mIjNY", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index 4bb1e59e0b..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "hkeictJYR1KDX7kB", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.008" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "nozzle_temperature": [ - "210" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json deleted file mode 100644 index f6131e0ca7..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "4YnRWwYLWMODUHXq", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json deleted file mode 100644 index 2289deef1e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.6 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "bKi57zeQX7mAw7kl", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json deleted file mode 100644 index 15336f706a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA @Qidi X-Smart 3 0.8 nozzle", - "inherits": "Qidi Generic PLA", - "from": "system", - "setting_id": "lscOLQTFf4Y3Ax1f", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index a27251d78a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle", - "from": "system", - "setting_id": "HaE0HFgjT8wysrVT", - "filament_id": "GFL99", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "pressure_advance": [ - "0.034" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 2f0e4b53b1..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle", - "from": "system", - "setting_id": "vxXEJP3C4k5Zjvsx", - "filament_id": "GFL99", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "pressure_advance": [ - "0.034" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 866b9b9707..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle", - "from": "system", - "setting_id": "VqVyXnU77CZCKsNy", - "filament_id": "GFL99", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index 47ac610743..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA High Speed @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle", - "from": "system", - "setting_id": "0504CZkoYLx6NMI0", - "filament_id": "GFL99", - "instantiation": "true", - "slow_down_layer_time": [ - "6" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.008" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index 08b2fd475b..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA Silk", - "from": "system", - "setting_id": "lRRlOS4Xd1pGLIEq", - "filament_id": "GFA05", - "instantiation": "true", - "enable_pressure_advance": "1", - "pressure_advance": [ - "0.032" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 0c9b1b3d15..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA Silk @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA Silk", - "from": "system", - "setting_id": "DaBZGfcdheWjNdgr", - "filament_id": "GFA05", - "instantiation": "true", - "enable_pressure_advance": "1", - "pressure_advance": [ - "0.032" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json b/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json deleted file mode 100644 index 128da01c7e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA Silk.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA Silk", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "OATeG6kIIRyViXbn", - "filament_id": "GFA05", - "instantiation": "true", - "enable_pressure_advance": "1", - "filament_type": [ - "PLA" - ], - "pressure_advance": [ - "0.014" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle" - ], - "eng_plate_temp": [ - "55" - ], - "hot_plate_temp": [ - "55" - ], - "textured_plate_temp": [ - "55" - ], - "eng_plate_temp_initial_layer": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json deleted file mode 100644 index 4ea48e5379..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.2 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "dmKDk6Yb4zQFCWIe", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.042" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index d7be267e76..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "vwFHzxD2MrRieUIw", - "filament_id": "GFB99", - "instantiation": "true", - "filament_settings_id": [ - "Qidi Generic PLA+ @Qidi Q1 Pro 0.4 nozzle" - ], - "full_fan_speed_layer": [ - "3" - ], - "nozzle_temperature": [ - "220" - ], - "slow_down_min_speed": [ - "20" - ], - "pressure_advance": [ - "0.042" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json deleted file mode 100644 index 9884783666..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "wlXNWvECV8ylNVFF", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index 751e859201..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "gR4NZ8mgTNVxxjhh", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.008" - ], - "nozzle_temperature": [ - "220" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json deleted file mode 100644 index 3ceedcf5da..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "wCdBhg6B4tQZw7dp", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json deleted file mode 100644 index 865f18fe1d..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "7Bxn8OUT1MJbNvxC", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json deleted file mode 100644 index 320e1a5e37..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Max 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "miQxMqjI3odS4V1O", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Max 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json deleted file mode 100644 index 96d49de862..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "WwUGv09h9thWkzMf", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json deleted file mode 100644 index 5942ed4406..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "oAIJyTMV5EnXTJDF", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json deleted file mode 100644 index 62529fb34e..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "Ya2viE6yXmdshs75", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Plus 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json deleted file mode 100644 index 88086dd8e5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.2 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "XUhGdonOGCUI34EH", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.034" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 7ed74cb2d5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "yvokLiCctDUmcDCR", - "filament_id": "GFB99", - "instantiation": "true", - "pressure_advance": [ - "0.034" - ], - "filament_settings_id": [ - "Qidi Generic PLA+ @Qidi X-Plus 4 0.4 nozzle" - ], - "full_fan_speed_layer": [ - "3" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json deleted file mode 100644 index 225c8203c7..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "gZxafcPwX1hqI7Dm", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.016" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index 662d6b70e9..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "j6fJ7L02mVcZ01fO", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.008" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json deleted file mode 100644 index 85de90bcfc..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.2 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "KTkq14RsduGBSdMZ", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_max_volumetric_speed": [ - "2" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json deleted file mode 100644 index 6d7b0c81e9..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.6 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "xiomvJqo2HAwsxT0", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.016" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json deleted file mode 100644 index d81651533a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+ @Qidi X-Smart 3 0.8 nozzle", - "inherits": "Qidi Generic PLA+", - "from": "system", - "setting_id": "3SemJWSvKeN7OXVy", - "filament_id": "GFL99", - "instantiation": "true", - "pressure_advance": [ - "0.008" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json b/resources/profiles/Qidi/filament/Qidi Generic PLA+.json deleted file mode 100644 index cf8733d478..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA+.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA+", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "LNjBixpjLg5i8P1d", - "filament_id": "GFL99", - "instantiation": "true", - "filament_type": [ - "PLA" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_vendor": [ - "Generic" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json b/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json deleted file mode 100644 index ced518b3a6..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA-CF.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "bJKgxsU0tR1NDtoN", - "filament_id": "GFL98", - "instantiation": "true", - "required_nozzle_HRC": [ - "40" - ], - "filament_flow_ratio": [ - "0.96" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "9" - ], - "slow_down_layer_time": [ - "8" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "temperature_vitrification": [ - "55" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "240" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.2 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.2 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PLA.json b/resources/profiles/Qidi/filament/Qidi Generic PLA.json deleted file mode 100644 index 2dc3b25203..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PLA.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "tmrmjsN8vDKGlNpX", - "filament_id": "GFL99", - "instantiation": "true", - "filament_type": [ - "PLA" - ], - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "14" - ], - "slow_down_layer_time": [ - "8" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.031" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic PVA.json b/resources/profiles/Qidi/filament/Qidi Generic PVA.json deleted file mode 100644 index 3479b4eb41..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic PVA.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "8450opPMJm6GG5Cq", - "filament_id": "GFS99", - "instantiation": "true", - "filament_type": [ - "PVA" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Smart 3 0.2 nozzle", - "Qidi X-Plus 3 0.2 nozzle", - "Qidi X-Max 3 0.2 nozzle", - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.2 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.2 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle", - "Qidi Q2 0.2 nozzle", - "Qidi Q2 0.4 nozzle", - "Qidi Q2 0.6 nozzle", - "Qidi Q2 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json deleted file mode 100644 index 15423913f8..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle", - "inherits": "Qidi Generic TPU 95A", - "from": "system", - "setting_id": "0gGSrFIulk4gPLSp", - "filament_id": "GFB99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "60" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_settings_id": [ - "Qidi Generic TPU 95A @Qidi Q1 Pro 0.8 nozzle" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json deleted file mode 100644 index f83e24e147..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle", - "inherits": "Qidi Generic TPU 95A", - "from": "system", - "setting_id": "5fkE2aGkghsMdZ1W", - "filament_id": "GFB99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "60" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_settings_id": [ - "Qidi Generic TPU 95A @Qidi X-Plus 4 0.8 nozzle" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json b/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json deleted file mode 100644 index d83d0599af..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU 95A.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU 95A", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "JWZrlYnOOlGpTEg6", - "filament_id": "GFU99", - "instantiation": "true", - "filament_type": [ - "TPU" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "filament_density": [ - "1.21" - ], - "filament_flow_ratio": [ - "1" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.4 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi X-Plus 4 0.4 nozzle", - "Qidi X-Plus 4 0.6 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json deleted file mode 100644 index ff81ed6743..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle", - "inherits": "Qidi Generic TPU", - "from": "system", - "setting_id": "s0MMbJlTt9Cbh8FQ", - "filament_id": "GFB99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "60" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_settings_id": [ - "Qidi Generic TPU @Qidi Q1 Pro 0.4 nozzle" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Qidi Q1 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json deleted file mode 100644 index 4e9f07c0c5..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle", - "inherits": "Qidi Generic TPU", - "from": "system", - "setting_id": "KqdGTkLW1x7oZpvj", - "filament_id": "GFB99", - "instantiation": "true", - "fan_cooling_layer_time": [ - "60" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "filament_settings_id": [ - "Qidi Generic TPU @Qidi X-Plus 4 0.4 nozzle" - ], - "nozzle_temperature": [ - "230" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "compatible_printers": [ - "Qidi X-Plus 4 0.4 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi Generic TPU.json b/resources/profiles/Qidi/filament/Qidi Generic TPU.json deleted file mode 100644 index 8c57a5d28a..0000000000 --- a/resources/profiles/Qidi/filament/Qidi Generic TPU.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "name": "Qidi Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "qvJXA6V5mxiOguUj", - "filament_id": "GFU99", - "instantiation": "true", - "filament_type": [ - "TPU" - ], - "filament_max_volumetric_speed": [ - "4" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "230" - ], - "filament_vendor": [ - "Generic" - ], - "compatible_printers": [ - "Qidi X-Plus 0.4 nozzle", - "Qidi X-Max 0.4 nozzle", - "Qidi X-CF Pro 0.4 nozzle", - "Qidi X-Smart 3 0.4 nozzle", - "Qidi X-Plus 3 0.4 nozzle", - "Qidi X-Max 3 0.4 nozzle", - "Qidi X-Smart 3 0.6 nozzle", - "Qidi X-Plus 3 0.6 nozzle", - "Qidi X-Max 3 0.6 nozzle", - "Qidi X-Smart 3 0.8 nozzle", - "Qidi X-Plus 3 0.8 nozzle", - "Qidi X-Max 3 0.8 nozzle", - "Qidi Q1 Pro 0.6 nozzle", - "Qidi Q1 Pro 0.8 nozzle", - "Qidi X-Plus 4 0.6 nozzle", - "Qidi X-Plus 4 0.8 nozzle" - ] -} diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json index 072f445d57..4036bc407c 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "0J1PKDesfiwmiXT3", - "filament_id": "GFB99", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json index 02776d5d00..70aff6d258 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "CYzutFjZzD3tLXwM", - "filament_id": "GFB99", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json index 60a8329be2..c0aaea29c7 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "YJvwrEo0BwfXMOqo", - "filament_id": "GFB99", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json index 6116b16149..458556f94c 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "WZuAmHHfdACv1F6k", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json index 859df30d32..296581a97a 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "JCCjjewJVs13S08j", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json index 63911a1567..ce939299ba 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi PC-ABS-FR", "from": "system", "setting_id": "lWfYhsmJo1Q8FmM8", - "filament_id": "QD_0_1_34", + "filament_id": "OFjD3YTW", "instantiation": "true", "activate_chamber_temp_control": [ "0" diff --git a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json index e6faf129d7..aac6e6f127 100644 --- a/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json +++ b/resources/profiles/Qidi/filament/Qidi PC-ABS-FR.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "0pBt0usHW6MGQZXl", - "filament_id": "GFB99", + "filament_id": "OFjD3YTW", "instantiation": "true", "filament_type": [ "PC-ABS-FR" diff --git a/resources/profiles/Qidi/filament/Qidi PLA-CF.json b/resources/profiles/Qidi/filament/Qidi PLA-CF.json index 6b8a3e8899..ce37e1b42c 100644 --- a/resources/profiles/Qidi/filament/Qidi PLA-CF.json +++ b/resources/profiles/Qidi/filament/Qidi PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "oqzsRA4OuCqTWPGM", - "filament_id": "GFL98", + "filament_id": "OFjoAe0R", "instantiation": "true", "filament_flow_ratio": [ "0.96" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json index aa18a6f5e7..1121d1a200 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "zqfVVsyY5ZMsfqjK", - "filament_id": "GFB99", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json index 7679296a7b..747a31d4bd 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi Q1 Pro 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "fZISb4jbF8jv60dL", - "filament_id": "GFB99", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json index 469f190953..9cce69fc3b 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "MQ5o43Gclt9U65x6", - "filament_id": "QD_0_1_50", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json index e56f67abf2..3c1e2d5987 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF @Qidi X-Plus 4 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Qidi TPU 95A-HF", "from": "system", "setting_id": "wNxGljiKmTzCPgzk", - "filament_id": "QD_0_1_50", + "filament_id": "OFzAWsca", "instantiation": "true", "fan_cooling_layer_time": [ "60" diff --git a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json index ba588dc809..ffbdbc9e5f 100644 --- a/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json +++ b/resources/profiles/Qidi/filament/Qidi TPU 95A-HF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "QCS6zw9BRMWWvrCo", - "filament_id": "GFU99", + "filament_id": "OFzAWsca", "instantiation": "true", "filament_type": [ "TPU" diff --git a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json index 4e4424936f..ce29e0a165 100644 --- a/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json +++ b/resources/profiles/Qidi/filament/Tinmorry PETG-ECO.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "uVa250OrqClMz41k", - "filament_id": "GFG99", + "filament_id": "OFYE7YZw", "instantiation": "true", "reduce_fan_stop_start_freq": [ "1" @@ -52,7 +52,7 @@ "235" ], "filament_vendor": [ - "Generic" + "Tinmorry" ], "compatible_printers": [ "Qidi X-Plus 0.4 nozzle", diff --git a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json index 62e6a4204e..e59aa7077f 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json index cdfabbe5a0..77ba79c419 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json index 9db6ab9698..cb14577cc5 100644 --- a/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Bambu PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Bambu PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json index e01dbb5296..90cac58dbe 100644 --- a/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_11", + "filament_id": "OFY9muEs", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json index 655713b891..6d10f9e6a6 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PC @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PC@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_23", + "filament_id": "OFLakOUI", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json index e855840148..3c470bad37 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_41", + "filament_id": "OFYPdQJh", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json index a4ee80e67d..5ce7036913 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_1", + "filament_id": "OFDSrzZ8", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json index e83be7d908..afa2c0b90b 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA Silk @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA Silk@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_4", + "filament_id": "OFesA6rF", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json index 924752466e..281538953a 100644 --- a/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic PLA+ @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic PLA+@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFEWYR89", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json index 10a520531d..4f96f760b2 100644 --- a/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Generic TPU 95A @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Generic TPU 95A@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_0_50", + "filament_id": "OFjiXpyf", "instantiation": "false", "filament_adhesiveness_category": [ "600" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json index d7e4f1c7ed..09f7e6a9a5 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json index 9e9abfbd09..89c266e681 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PETG @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PETG@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json index 2cb6be1fc3..844a9f0942 100644 --- a/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/HATCHBOX PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "HATCHBOX PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json index 485db36e9a..acc9a9f96d 100644 --- a/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json index 289af93715..91cf8d1e35 100644 --- a/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/Overture PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "Overture PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json index 215fb00a92..603dc9da52 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite ABS @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite ABS@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json index e8fe4ba7f5..01d5e352ef 100644 --- a/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/PolyLite PLA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json index 0b89883f41..ea38a66fe4 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Odorless @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Odorless@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_14", + "filament_id": "OFma5TXH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json index 3ba45a14dc..89647b53d5 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_11", + "filament_id": "OFT2jon4", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json index 64dc667a44..beb4d8f07b 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS Rapido Metal @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS Rapido Metal@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_13", + "filament_id": "OFeCJqxx", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json index 218e883448..e1ddebc083 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ABS-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ABS-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_12", + "filament_id": "OFt3HtlG", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json index c6937e0080..27a6187a1d 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_18", + "filament_id": "OFTsHNQi", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json index 3a66fdea86..8fc3684bfa 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA-Aero @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-Aero@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_19", + "filament_id": "OFu1E4ur", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json index 3cc72406a4..5da0ac2e10 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI ASA-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI ASA-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_20", + "filament_id": "OF1W7c76", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json index e268f6081c..5d03d0f486 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PA12-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PA12-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_27", + "filament_id": "OFn6WpN7", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json index 2bf1ca53fc..f76fe1157e 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PAHT-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_30", + "filament_id": "OFKgmsqE", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json index 37afc97c29..8a0c9f3324 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PAHT-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PAHT-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_31", + "filament_id": "OFo15hcT", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json index 7bffaf11b5..a3e381a55c 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PC-ABS-FR @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PC/ABS-FR@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_34", + "filament_id": "OFDIrhbu", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json index 4745e19ad2..a78fefa651 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PEBA 95A @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PEBA 95A@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_36", + "filament_id": "OFhiJE7Y", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json index 6322639eb3..6573bb507a 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PET-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PET-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_37", + "filament_id": "OFKfJTwL", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json index f18e2de950..8ee271de38 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PET-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PET-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_38", + "filament_id": "OFhx4uOG", "instantiation": "false", "box_temperature_range_high": [ "50" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json index c7261208cc..5dc9cc4cda 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_39", + "filament_id": "OFuJ49uH", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json index 3050d4abd6..1a888d7bc6 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_41", + "filament_id": "OF4S3To3", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json index 783925d2b5..885ff3c1c0 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Tough @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Tough@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_40", + "filament_id": "OFQ40XeN", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json index 21477a006f..a5f0628a80 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG Translucent @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG Translucent@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_45", + "filament_id": "OFf0MkD5", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json index f3aabb1ef5..4acccce76b 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_42", + "filament_id": "OF4iWKrE", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json index 9b0379ea52..f1501c1e7e 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PETG-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PETG-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_43", + "filament_id": "OFdtPd9h", "instantiation": "false", "box_temperature_range_high": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json index 2dd1d28dd4..1340cd0d03 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_7", + "filament_id": "OF4nQ62r", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json index dd407427ce..d23f66eede 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Matte Basic @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Matte Basic@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_8", + "filament_id": "OFughwKn", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json index 1e6ea5b8e0..b072ca8019 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_1", + "filament_id": "OFKIQO2W", "instantiation": "false", "cool_plate_temp_initial_layer": [ "45" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json index 95d0666c1d..9963e2418a 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Matte @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Matte@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_2", + "filament_id": "OF3IKafc", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json index 0f848e6d5b..89e966f907 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Metal @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Metal@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_3", + "filament_id": "OFANFm4x", "instantiation": "false", "filament_type": [ "PLA" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json index d5f3d83679..64620cdff7 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA Rapido Silk @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA Rapido Silk@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_4", + "filament_id": "OFW5FqkL", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json index 7331ce75ad..f5a72549cf 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PLA-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PLA-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_5", + "filament_id": "OFhWrAuP", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json index c5500bb3c0..a560f6933d 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PPS-CF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-CF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_44", + "filament_id": "OFZOuWrO", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json index 318920501f..de93c9e149 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI PPS-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI PPS-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_46", + "filament_id": "OFp57RRC", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json index 2a1eddd8a2..161f9bd4c3 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI Support For PAHT @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PAHT@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_32", + "filament_id": "OFXn3Vd9", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json index 64fbb1eb22..c437350e37 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI Support For PET-PA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI Support For PET/PA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_33", + "filament_id": "OFqcL5UF", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json index fea6c771ac..9a1cafaf3c 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU 95A-HF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU 95A-HF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_50", + "filament_id": "OFR1XLMN", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json index 7aeb542fec..a19ddd39ea 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU-Aero @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-Aero@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_49", + "filament_id": "OFMDHOcT", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json index 25a934fd19..2739b9f1a0 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI TPU-GF @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI TPU-GF@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_15", + "filament_id": "OF9EHUKK", "instantiation": "false", "fan_cooling_layer_time": [ "100" diff --git a/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json index 1194e6c03d..618b506251 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI UltraPA @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_24", + "filament_id": "OFWDe7YH", "instantiation": "false", "box_temperature_range_high": [ "55" diff --git a/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json index 21629d63c9..140dd98bdc 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI UltraPA-CF25 @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI UltraPA-CF25@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_26", + "filament_id": "OF9PELEb", "instantiation": "false", "box_temperature_range_high": [ "65" diff --git a/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json b/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json index d62533d44e..a8824c9917 100644 --- a/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json +++ b/resources/profiles/Qidi/filament/X4/QIDI WOOD Rapido @X-Max 4.json @@ -3,7 +3,7 @@ "name": "QIDI WOOD Rapido@X-Max 4-Series", "inherits": "fdm_filament_x4_common", "from": "system", - "filament_id": "QD_3_1_6", + "filament_id": "OFvdZ2bx", "instantiation": "false", "additional_cooling_fan_speed": [ "100" diff --git a/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json index 1464576f61..0e0fdb08b0 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFhuaUQB", "name": "Bambu ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json index 0a4d2ce22c..ef6ea57354 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFLYDngx", "name": "Bambu PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json index 7660c8174d..ad90cb8a81 100644 --- a/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Bambu PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF1dpPrW", "name": "Bambu PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json index 4bb0cbe387..79a52578a4 100644 --- a/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_11", + "filament_id": "OFY9muEs", "name": "Generic ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -8,6 +8,9 @@ "box_temperature_range_high": [ "45" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json index 360f0ee803..79745adfce 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PC @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_23", + "filament_id": "OFLakOUI", "name": "Generic PC@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json index ab1b23bb60..0e65fe68f7 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_41", + "filament_id": "OFYPdQJh", "name": "Generic PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json index e3939b7796..3b7690cc38 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_1", + "filament_id": "OFDSrzZ8", "name": "Generic PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json index 1c0d325a37..afa64cc602 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA Silk @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_4", + "filament_id": "OFesA6rF", "name": "Generic PLA Silk@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json index e1d40b179f..72d7b6f9c6 100644 --- a/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic PLA+ @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFEWYR89", "name": "Generic PLA+@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json index d5f56d408b..b98a3a0a2f 100644 --- a/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Generic TPU 95A @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_0_50", + "filament_id": "OFjiXpyf", "name": "Generic TPU 95A@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json index 3f5987240c..323fcf3e90 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFwLBAGf", "name": "HATCHBOX ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json index 5f794e561c..6f0495c45b 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PETG @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFIWMSGX", "name": "HATCHBOX PETG@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json index 094e540793..7ee05c27f7 100644 --- a/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/HATCHBOX PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFeelsSM", "name": "HATCHBOX PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json index ea12b78ead..82863e8d80 100644 --- a/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Overture ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFK8XHPn", "name": "Overture ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json index 571eb2bbeb..0dbb498feb 100644 --- a/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Overture PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFc3xdm9", "name": "Overture PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json index 48b6caa32b..1cf57f8ce3 100644 --- a/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/PolyLite ABS @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFOvv91M", "name": "PolyLite ABS@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json index 5b37f7ae8a..4702c9ba1c 100644 --- a/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/PolyLite PLA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF5CgdDq", "name": "PolyLite PLA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json index f3c54e81f1..233542bab1 100644 --- a/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/Polymaker PLA-HT @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFfYHK5z", "name": "Polymaker PLA-HT@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json index a2f14984a0..7a80b433df 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Odorless @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_14", + "filament_id": "OFma5TXH", "name": "QIDI ABS Odorless@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json index 0ecb9c656c..0afffa18f4 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_11", + "filament_id": "OFT2jon4", "name": "QIDI ABS Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json index f3603eda99..9614cab30f 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS Rapido Metal @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_13", + "filament_id": "OFeCJqxx", "name": "QIDI ABS Rapido Metal@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json index 2ab2fbfc84..5336842811 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ABS-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_12", + "filament_id": "OFt3HtlG", "name": "QIDI ABS-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json index 97127fe57b..b8fe444dd2 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_18", + "filament_id": "OFTsHNQi", "name": "QIDI ASA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json index 14423fd58c..73fb83834d 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-Aero @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_19", + "filament_id": "OFu1E4ur", "name": "QIDI ASA-Aero@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json index 9a8958c860..12606c993b 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI ASA-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_20", + "filament_id": "OF1W7c76", "name": "QIDI ASA-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json index 3464bed9a3..d4af23e160 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PA12-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_27", + "filament_id": "OFn6WpN7", "name": "QIDI PA12-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -14,9 +14,15 @@ "box_temperature": [ "55" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "60" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json index 9b6a66f61b..1c70ef53a0 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PA6-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_25", + "filament_id": "OFZ3K2cL", "name": "QIDI PA6-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json index fcfccfe0f6..fec939caa8 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_30", + "filament_id": "OFKgmsqE", "name": "QIDI PAHT-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -14,9 +14,15 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json index 3c0f1056ed..de72deb697 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PAHT-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_31", + "filament_id": "OFo15hcT", "name": "QIDI PAHT-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -14,9 +14,15 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], + "during_print_exhaust_fan_speed": [ + "0" + ], "cool_plate_temp_initial_layer": [ "80" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json index b6c6fb3b64..c7e407cd2e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PC-ABS-FR @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_34", + "filament_id": "OFDIrhbu", "name": "QIDI PC/ABS-FR@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json index 43410eabe1..bf56f12203 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PEBA 95A @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_36", + "filament_id": "OFhiJE7Y", "name": "QIDI PEBA 95A@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json index 162cbec691..9163c3344e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_37", + "filament_id": "OFKfJTwL", "name": "QIDI PET-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json index 84310856cc..83e68f579f 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PET-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_38", + "filament_id": "OFhx4uOG", "name": "QIDI PET-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json index 46810f49c3..7254fd50bb 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_39", + "filament_id": "OFuJ49uH", "name": "QIDI PETG Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json index fd506d8e74..01a3e6cabe 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_41", + "filament_id": "OF4S3To3", "name": "QIDI PETG Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json index 3e9f0a1cdf..ed1b218139 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Tough @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_40", + "filament_id": "OFQ40XeN", "name": "QIDI PETG Tough@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json index 62ea937028..94792b7a75 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG Translucent @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_45", + "filament_id": "OFf0MkD5", "name": "QIDI PETG Translucent@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json index fcddc636a8..19f7f473dd 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_42", + "filament_id": "OF4iWKrE", "name": "QIDI PETG-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json index fa65907d3d..3bed003091 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PETG-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_43", + "filament_id": "OFdtPd9h", "name": "QIDI PETG-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json index 0ee194dfb3..30e12990e3 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_7", + "filament_id": "OF4nQ62r", "name": "QIDI PLA Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json index 7796bf1faa..2843092024 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Matte Basic @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_8", + "filament_id": "OFughwKn", "name": "QIDI PLA Matte Basic@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json index 1aa1803258..6327908055 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_1", + "filament_id": "OFKIQO2W", "name": "QIDI PLA Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json index d8cbd06ea1..9e2380faea 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Matte @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_2", + "filament_id": "OF3IKafc", "name": "QIDI PLA Rapido Matte@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json index 404b7cd1e8..bc9f655538 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Rapido Metal @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_3", + "filament_id": "OFANFm4x", "name": "QIDI PLA Rapido Metal@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json index 57c0c3e1dc..2b6574b104 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA Silk @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_4", + "filament_id": "OF2TQpOO", "name": "QIDI PLA Silk@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json index 1c4d8c99e3..390b331556 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PLA-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_5", + "filament_id": "OFhWrAuP", "name": "QIDI PLA-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json index c6be7046f6..b482042819 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-CF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_44", + "filament_id": "OFZOuWrO", "name": "QIDI PPS-CF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json index 757d4dbf3d..f973121e62 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI PPS-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_46", + "filament_id": "OFp57RRC", "name": "QIDI PPS-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -14,8 +14,8 @@ "box_temperature": [ "65" ], - "chamber_temperatures": [ - "0" + "chamber_temperature": [ + "55" ], "close_fan_the_first_x_layers": [ "3" diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json index ed1222daa9..63941c851b 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PAHT @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_32", + "filament_id": "OFXn3Vd9", "name": "QIDI Support For PAHT@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json index 346c3cc3eb..969fc2bccc 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI Support For PET-PA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_33", + "filament_id": "OFqcL5UF", "name": "QIDI Support For PET/PA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json index 4721ab171c..7b06c92253 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU 95A-HF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_50", + "filament_id": "OFR1XLMN", "name": "QIDI TPU 95A-HF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json index b6eee90916..4ede2d7d6e 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-Aero @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_49", + "filament_id": "OFMDHOcT", "name": "QIDI TPU-Aero@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json index b3f2f71866..90de30cb02 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI TPU-GF @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_15", + "filament_id": "OF9EHUKK", "name": "QIDI TPU-GF@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json index 9d86c06f95..75a89479e2 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_24", + "filament_id": "OFWDe7YH", "name": "QIDI UltraPA@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json index 73379541b3..82c261fbd5 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI UltraPA-CF25 @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_26", + "filament_id": "OF9PELEb", "name": "QIDI UltraPA-CF25@X-Plus 5-Series", "from": "system", "instantiation": "false", @@ -14,6 +14,9 @@ "box_temperature": [ "60" ], + "chamber_temperature": [ + "55" + ], "close_fan_the_first_x_layers": [ "3" ], diff --git a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json index 30428c7422..efbe41d51d 100644 --- a/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json +++ b/resources/profiles/Qidi/filament/X5/QIDI WOOD Rapido @X-Plus 5.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "QD_4_1_6", + "filament_id": "OFvdZ2bx", "name": "QIDI WOOD Rapido@X-Plus 5-Series", "from": "system", "instantiation": "false", diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json index 8b4274e094..a097f39bab 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle" + "Generic PLA @Qidi Q1 Pro 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi Q1 Pro 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json index a97a66730b..a085ce6cfe 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.4 nozzle.json @@ -82,6 +82,6 @@ "machine_start_gcode": "PRINT_START BED=[hot_plate_temp_initial_layer] HOTEND=[nozzle_temperature_initial_layer] CHAMBER=[chamber_temperature]\nM83\nM140 S[hot_plate_temp_initial_layer]\nM104 S[nozzle_temperature_initial_layer]\nG4 P3000\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0)} Z5 F6000\nG0 Z[initial_layer_print_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0)} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 85} E{83 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 5, first_layer_print_min[1] + 80) - 85), 0) + 3} E{82 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85), 0) + 6}\nG1 Z1 F600\n", "thumbnails_format": "PNG", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle" + "Generic PLA @Qidi Q1 Pro 0.4 nozzle" ] } diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json index 3e2e07d54f..fb2d73df60 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle" + "Generic PLA @Qidi Q1 Pro 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Qidi Q1 Pro 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json index 5dea524660..4d99e1a77d 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi Q1 Pro", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle" + "Generic PLA @Qidi Q1 Pro 0.8 nozzle" ], "default_print_profile": "0.40mm Standard @Qidi Q1 Pro 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi Q1 Pro.json b/resources/profiles/Qidi/machine/Qidi Q1 Pro.json index d6102cf61f..ef9803cbd9 100644 --- a/resources/profiles/Qidi/machine/Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/machine/Qidi Q1 Pro.json @@ -8,5 +8,5 @@ "bed_model": "qidi_Q1Pro_buildplate_model.stl", "bed_texture": "qidi_Q1Pro_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle;QIDI ASA @Qidi Q1 Pro 0.4 nozzle;QIDI ASA @Qidi Q1 Pro 0.2 nozzle;QIDI ASA @Qidi Q1 Pro 0.6 nozzle;QIDI ASA @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PETG @Qidi Q1 Pro 0.8 nozzle;Qidi Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.4 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.2 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.6 nozzle;Qidi Generic PLA @Qidi Q1 Pro 0.8 nozzle" + "default_materials": "QIDI PLA Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.4 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.2 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.6 nozzle;QIDI ABS Rapido @Qidi Q1 Pro 0.8 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.4 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.2 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.6 nozzle;QIDI PETG Tough @Qidi Q1 Pro 0.8 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.4 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.2 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.6 nozzle;QIDI PLA Rapido Matte @Qidi Q1 Pro 0.8 nozzle;QIDI ASA @Qidi Q1 Pro 0.4 nozzle;QIDI ASA @Qidi Q1 Pro 0.2 nozzle;QIDI ASA @Qidi Q1 Pro 0.6 nozzle;QIDI ASA @Qidi Q1 Pro 0.8 nozzle;Generic PETG @Qidi Q1 Pro 0.4 nozzle;Generic PETG @Qidi Q1 Pro 0.2 nozzle;Generic PETG @Qidi Q1 Pro 0.6 nozzle;Generic PETG @Qidi Q1 Pro 0.8 nozzle;Generic PLA Silk @Qidi Q1 Pro 0.4 nozzle;Generic PLA @Qidi Q1 Pro 0.4 nozzle;Generic PLA @Qidi Q1 Pro 0.2 nozzle;Generic PLA @Qidi Q1 Pro 0.6 nozzle;Generic PLA @Qidi Q1 Pro 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi Q2.json b/resources/profiles/Qidi/machine/Qidi Q2.json index d7f9e8bf62..6b05ae57b0 100644 --- a/resources/profiles/Qidi/machine/Qidi Q2.json +++ b/resources/profiles/Qidi/machine/Qidi Q2.json @@ -8,5 +8,5 @@ "bed_model": "qidi_q2_buildplate_model.stl", "bed_texture": "qidi_q2_buildplate_texture.svg", "hotend_model": "X-Series_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;QIDI PET-CF" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;QIDI PET-CF;QIDI PLA Rapido @Qidi Q2 0.2 nozzle;QIDI PLA Rapido @Qidi Q2 0.4 nozzle;QIDI PLA Rapido @Qidi Q2 0.6 nozzle;QIDI PLA Rapido @Qidi Q2 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi Q2C.json b/resources/profiles/Qidi/machine/Qidi Q2C.json index cdc45e8f5e..462814d225 100644 --- a/resources/profiles/Qidi/machine/Qidi Q2C.json +++ b/resources/profiles/Qidi/machine/Qidi Q2C.json @@ -8,5 +8,5 @@ "bed_model": "qidi_q2c_buildplate_model.stl", "bed_texture": "qidi_q2c_buildplate_texture.svg", "hotend_model": "X-Series_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;QIDI PET-CF" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;QIDI PET-CF;QIDI PLA Rapido @Qidi Q2C 0.2 nozzle;QIDI PLA Rapido @Qidi Q2C 0.4 nozzle;QIDI PLA Rapido @Qidi Q2C 0.6 nozzle;QIDI PLA Rapido @Qidi Q2C 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json index c82db4969e..a41e2b6a11 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nM140 S[hot_plate_temp_initial_layer]\nM190 S[hot_plate_temp_initial_layer]\nM109 S[nozzle_temperature_initial_layer]\nG92 E-19\nG0 Y5 Z0.3 F3600\nG1 X5 E0 F2400\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json index b70c4bc480..7729b8612d 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xcfpro_buildplate_model.stl", "bed_texture": "qidi_xcfpro_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU 95A" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU 95A @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 76577d5f38..b1196c0e70 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nG92 E0\nG0 X300 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-19\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json index d6b10d422d..84ae0879fe 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Max 3 0.2 nozzle" + "Generic PLA @Qidi X-Max 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XMax3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index 655b4e32c8..d9ba740281 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -46,6 +46,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json index d0d5ac6e04..c10a1c0254 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XMax3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json index c8042e7e3a..4d04574c15 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Max 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XMax3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3.json b/resources/profiles/Qidi/machine/Qidi X-Max 3.json index 56fc955601..ce2cfe8c26 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xmax3_buildplate_model.stl", "bed_texture": "qidi_xmax3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA @Qidi X-Max 3 0.2 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 4.json b/resources/profiles/Qidi/machine/Qidi X-Max 4.json index 4d67f77537..5e1b05cc11 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 4.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 4.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xmax4_buildplate_model.stl", "bed_texture": "qidi_xmax4_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "Generic ABS @Qidi X-Max 4 0.4 nozzle;Generic PLA @Qidi X-Max 4 0.4 nozzle;QIDI ABS Odorless @Qidi X-Max 4 0.4 nozzle;QIDI ABS Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido Matte @Qidi X-Max 4 0.4 nozzle;QIDI PLA-CF @Qidi X-Max 4 0.4 nozzle;Generic PLA Silk @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido Silk @Qidi X-Max 4 0.4 nozzle;QIDI ASA @Qidi X-Max 4 0.4 nozzle;QIDI PETG Basic @Qidi X-Max 4 0.4 nozzle;QIDI PETG Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PETG Tough @Qidi X-Max 4 0.4 nozzle;QIDI PETG Translucent @Qidi X-Max 4 0.4 nozzle;QIDI PLA Basic @Qidi X-Max 4 0.4 nozzle;QIDI PLA Matte Basic @Qidi X-Max 4 0.4 nozzle;Generic PETG @Qidi X-Max 4 0.4 nozzle" + "default_materials": "Generic ABS @Qidi X-Max 4 0.4 nozzle;Generic PLA @Qidi X-Max 4 0.4 nozzle;QIDI ABS Odorless @Qidi X-Max 4 0.4 nozzle;QIDI ABS Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido Matte @Qidi X-Max 4 0.4 nozzle;QIDI PLA-CF @Qidi X-Max 4 0.4 nozzle;Generic PLA Silk @Qidi X-Max 4 0.4 nozzle;QIDI PLA Rapido Silk @Qidi X-Max 4 0.4 nozzle;QIDI ASA @Qidi X-Max 4 0.4 nozzle;QIDI PETG Basic @Qidi X-Max 4 0.4 nozzle;QIDI PETG Rapido @Qidi X-Max 4 0.4 nozzle;QIDI PETG Tough @Qidi X-Max 4 0.4 nozzle;QIDI PETG Translucent @Qidi X-Max 4 0.4 nozzle;QIDI PLA Basic @Qidi X-Max 4 0.4 nozzle;QIDI PLA Matte Basic @Qidi X-Max 4 0.4 nozzle;Generic PETG @Qidi X-Max 4 0.4 nozzle;Generic PLA @Qidi X-Max 4 0.2 nozzle;Generic PLA @Qidi X-Max 4 0.6 nozzle;Generic PLA @Qidi X-Max 4 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Max.json b/resources/profiles/Qidi/machine/Qidi X-Max.json index ac917aa5b7..26b0ad47d7 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xmax_buildplate_model.stl", "bed_texture": "qidi_xmax_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU 95A" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PET-CF;QIDI PA12-CF;QIDI PAHT-CF;QIDI ABS-GF25;QIDI PA-Ultra;Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU 95A @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index ed7f0c24a1..d4e1daee9e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json @@ -98,7 +98,7 @@ "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "machine_start_gcode": "G28\nG92 E0\nG0 X270 Y5 Z50 F3600\nM190 S[bed_temperature_initial_layer_single]\nM109 S[first_layer_temperature]\nG92 E-16\n", "machine_end_gcode": "M104 S0\nM140 S0\n;Retract the filament\nG92 E0\nG1 E-3 F300\nG28\nM84\n", diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json index 382cd364fd..c6a98fc3de 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 3 0.2 nozzle" + "Generic PLA @Qidi X-Plus 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XPlus3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index 03159944f0..5d39065f8c 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -42,6 +42,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json index 5af64f9934..959f8013e8 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XPlus3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json index 43aa1a2a2b..93aa435c52 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XPlus3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json index 535fc25aef..e527fe85b4 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus3_buildplate_model.stl", "bed_texture": "qidi_xplus3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA @Qidi X-Plus 3 0.2 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json index b16849ea80..fe66c4fc60 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.2 nozzle" + "Generic PLA @Qidi X-Plus 4 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XPlus4 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json index 82e9da78cb..a7d2f09195 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.4 nozzle.json @@ -97,7 +97,7 @@ "machine_start_gcode": "PRINT_START BED=[bed_temperature_initial_layer_single] HOTEND=[nozzle_temperature_initial_layer] CHAMBER=[chamber_temperature] EXTRUDER=[initial_no_support_extruder]\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nM141 S[chamber_temperature]\nG4 P3000\nT[initial_tool]\nG0 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0)} Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0)} Z5 F6000\nG0 Z[initial_layer_print_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0] - 12, first_layer_print_min[0] + 80))} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0)} E{85 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 85} E{83 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 2} E{2 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1] - 3, first_layer_print_min[1] + 80) - 85), 0) + 3} E{82 * 0.5 * initial_layer_print_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 3} Z0\nG1 X{max((min(print_bed_max[0] - 12, first_layer_print_min[0] + 80) - 85), 0) + 6}\nG1 Z1 F600\nSET_PRINT_STATS_INFO CURRENT_LAYER=1", "thumbnails_format": "PNG", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.4 nozzle" + "Generic PLA @Qidi X-Plus 4 0.4 nozzle" ], "printer_agent": "qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json index f33fbeb5dc..116c754002 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.6 nozzle" + "Generic PLA @Qidi X-Plus 4 0.6 nozzle" ], "default_print_profile": "0.30mm Standard @Qidi XPlus4 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json index e66c252d0f..d232221c5d 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Plus 4", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Plus 4 0.8 nozzle" + "Generic PLA @Qidi X-Plus 4 0.8 nozzle" ], "default_print_profile": "0.40mm Standard @Qidi XPlus4 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json index 82702cb7dc..69a757212e 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 4.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 4.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus4_buildplate_model.stl", "bed_texture": "qidi_xplus4_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;Qidi Generic PETG" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PETG Tough;QIDI PLA Rapido Matte;QIDI ASA;Generic PETG @Qidi;QIDI PLA Rapido @Qidi X-Plus 4 0.2 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.4 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.6 nozzle;QIDI PLA Rapido @Qidi X-Plus 4 0.8 nozzle" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus.json b/resources/profiles/Qidi/machine/Qidi X-Plus.json index 5aa0917d5e..bf30d976ac 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xplus_buildplate_model.stl", "bed_texture": "qidi_xplus_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen2_hotend.stl", - "default_materials": "Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PA-CF;Qidi Generic PA;Qidi Generic PC;Qidi Generic PETG-CF;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA;Qidi Generic PLA-CF;Qidi Generic PVA;Qidi Generic TPU" + "default_materials": "Generic ASA @Qidi;Generic ABS @Qidi;Generic PA-CF @Qidi;Generic PA @Qidi;Generic PC @Qidi;Generic PETG-CF @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA-CF @Qidi;Generic PVA @Qidi;Generic TPU @Qidi" } diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json index bd5d6b5bba..e3bc48c8ed 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.2 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.2", "default_filament_profile": [ - "Qidi Generic PLA @Qidi X-Smart 3 0.2 nozzle" + "Generic PLA @Qidi X-Smart 3 0.2 nozzle" ], "default_print_profile": "0.10mm Standard @Qidi XSmart3 0.2 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index d224dbf971..f76a264423 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -48,6 +48,6 @@ "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ] } diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json index 255f4d67db..97e5afc5d2 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.6 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.6", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.30mm Standard @Qidi XSmart3 0.6 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json index ef62543341..a3192db8a5 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.8 nozzle.json @@ -11,7 +11,7 @@ "printer_model": "Qidi X-Smart 3", "printer_variant": "0.8", "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.40mm Standard @Qidi XSmart3 0.8 nozzle", "max_layer_height": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json index 78cd91d3e4..7cacb82e87 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3.json @@ -8,5 +8,5 @@ "bed_model": "qidi_xsmart3_buildplate_model.stl", "bed_texture": "qidi_xsmart3_buildplate_texture.svg", "hotend_model": "qidi_xseries_gen3_hotend.stl", - "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Qidi Generic ASA;Qidi Generic ABS;Qidi Generic PETG;Qidi Generic PLA Silk;Qidi Generic PLA" + "default_materials": "QIDI PLA Rapido;QIDI ABS Rapido;QIDI PLA Rapido Matte;QIDI PETG Tough;QIDI ASA;Generic ASA @Qidi;Generic ABS @Qidi;Generic PETG @Qidi;Generic PLA Silk @Qidi;Generic PLA @Qidi;Generic PLA @Qidi X-Smart 3 0.2 nozzle" } diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index 2d5fc3ead3..50bcc2255c 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Qidi/machine/fdm_machine_x_common.json b/resources/profiles/Qidi/machine/fdm_machine_x_common.json index b8a14c80ec..b2b0359a39 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_x_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_x_common.json @@ -133,7 +133,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "wipe_tower_type": "type1", "support_air_filtration": [ diff --git a/resources/profiles/Qidi/machine/fdm_q_common.json b/resources/profiles/Qidi/machine/fdm_q_common.json index 94fbffd64d..a8915e8895 100644 --- a/resources/profiles/Qidi/machine/fdm_q_common.json +++ b/resources/profiles/Qidi/machine/fdm_q_common.json @@ -126,7 +126,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "wipe_tower_type": "type1", "support_air_filtration": [ diff --git a/resources/profiles/Qidi/machine/fdm_qidi_common.json b/resources/profiles/Qidi/machine/fdm_qidi_common.json index 99149558f9..69ca7c731f 100644 --- a/resources/profiles/Qidi/machine/fdm_qidi_common.json +++ b/resources/profiles/Qidi/machine/fdm_qidi_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "wipe_tower_type": "type1", "change_filament_gcode": "", @@ -125,7 +124,7 @@ "1" ], "default_filament_profile": [ - "Qidi Generic PLA" + "Generic PLA @Qidi" ], "default_print_profile": "0.20mm Standard @QIDI", "bed_exclude_area": [ diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json index 93be914bd5..ce87f787ca 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4 0.2 nozzle.json @@ -46,7 +46,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.22", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json index 499d8ad5cb..741e7b059d 100644 --- a/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.08mm Extra Fine @X-Max 4.json @@ -51,7 +51,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "450" ], diff --git a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json index 2f49cb3ba1..b80777804a 100644 --- a/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.10mm Standard @X-Max 4 0.2 nozzle.json @@ -37,7 +37,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.22", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json index 70d97f84ab..ab474d3b97 100644 --- a/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json +++ b/resources/profiles/Qidi/process/0.12mm Balanced Quality @X-Max 4 0.2 nozzle.json @@ -40,7 +40,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.22", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json index 7bafb22f06..170ab2c68d 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi X3.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_qidi_x3_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json index 993afe4898..1bb3d04914 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XCFPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "iQXhsvqnRSjNDxK1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json index 897fdb4504..5dfa794d9f 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Ls6f3OYdkl6qG2i2", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json index ab371384d3..3ec7004f02 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @Qidi XPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "4Gy3FqymogmRSeVq", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json index 932a708742..900f78219e 100644 --- a/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.12mm Fine @X-Max 4.json @@ -50,7 +50,6 @@ "small_perimeter_threshold": [ "50" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "430" ], diff --git a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json index d734a14634..9273f4b6b9 100644 --- a/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Balanced Quality @X-Max 4.json @@ -41,7 +41,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_pattern": "gyroid", "sparse_infill_speed": [ "200" diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json index 4b5aa16e59..242cce03cd 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi X3.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_qidi_x3_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json index 3f0504ddb3..e5154cf932 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XCFPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "HLcracgY90tIkYwN", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json index 7e058d924d..0546913457 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "6Be5iq2K9VppN5gE", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json index 7cb52d8cbc..fa3e8bf18a 100644 --- a/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.16mm Optimal @Qidi XPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "R1lqL3bMvvg6NMgD", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json index 91d939fec5..4d2d0ff172 100644 --- a/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.16mm Standard @X-Max 4.json @@ -44,7 +44,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "330" ], diff --git a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json index 8d281627ea..9fb86119f4 100644 --- a/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.18mm Balanced Quality @X-Max 4 0.6 nozzle.json @@ -56,7 +56,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.62", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json index 5c879d83ab..ab94482de0 100644 --- a/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Balanced Strength @X-Max 4.json @@ -39,7 +39,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "270" ], diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json index 2866bac399..490386d1a6 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XCFPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "WqYCTn83Ln11dpYC", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json index 74cc5c814f..edca0c62d1 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "2lJE6tuEIL22NBc2", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json index 4dd2935975..4e5922dd23 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @Qidi XPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "MDu610revkMyZze1", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json index 4bbea2ec6d..74d0ebc2d0 100644 --- a/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.20mm Standard @X-Max 4.json @@ -32,7 +32,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "270" ], diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json index 53429a10d1..f6a25ed90b 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Quality @X-Max 4 0.8 nozzle.json @@ -56,7 +56,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.82", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json index 646cf814e4..8579e2af21 100644 --- a/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.24mm Balanced Strength @X-Max 4 0.6 nozzle.json @@ -53,7 +53,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.62", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json b/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json index 787113e6c6..467be12aec 100644 --- a/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.24mm Draft @Qidi X3.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_qidi_x3_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json index 3aeb4203e4..ff6aba1a7a 100644 --- a/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json +++ b/resources/profiles/Qidi/process/0.24mm Standard @X-Max 4.json @@ -39,7 +39,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_speed": [ "230" ], diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json index c6e0b75c76..7a0387f859 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q1 Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "o9SQqZdG3BoviCAx", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json index 1aa6974b57..e59977ac1c 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QyCGFIxjMVprexDS", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json index 7a5d9d09aa..af40d35529 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi Q2C.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "e0Mbd6kjHG3Tc7Zm", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json index f29ef5d037..e8640beb97 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XCFPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QfqK00Ymn3ss9qtU", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json index 1eca5fc51b..c97620af69 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "YomLQtTbuHeQfrip", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json index 529864b872..16d7d96f97 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XMax3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "M8F4v1shW7h3QyzC", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json index a9026d4c86..93b6d30ab5 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "g73f1lIj9eH0MZjW", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json index 7767956bb8..c5adf500e1 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "tAV9akzom1NHWPNJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json index 75bf45cef6..b09aa82c4e 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XPlus4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QvbM5h9XXrvsmdX6", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.25", diff --git a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json index 4990f0d9f0..0bc4fd8252 100644 --- a/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.25mm Draft @Qidi XSmart3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "lag9UwMZ0uLbg6P2", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json index 555f8f19d0..3d88261b84 100644 --- a/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json +++ b/resources/profiles/Qidi/process/0.28mm Extra Draft @Qidi X3.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_qidi_x3_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json index aa4f96eb58..a9245997d2 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q1 Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "D5MjSxw3jZYf2Nja", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json index d9ea812425..fa5d74ece1 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "xV59wYWbrstGW5c5", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json index cc97b6c1b8..1565426d32 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi Q2C.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "96u0HvMr7kqleKBl", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json index d5237c4d37..0279d555da 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XCFPro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "gR2HeEDYyNSjL2K7", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json index a0dba6c233..f4f34baaa8 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "UA6RvPAtMfb2ryBL", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.30", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json index d4abe3eeb6..10a1ed451b 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XMax3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "QECWa3aznaYRN11W", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json index 72754c9145..d115d557cf 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "jjrl5R7LpUXnxA8d", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json index 732f5aa155..16e6bc8ee2 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "TPJTTWCWFbrVv0bx", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json index 9825272cce..dd498c072d 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XPlus4.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "PypLIvy1do9mp98q", "instantiation": "true", - "adaptive_layer_height": "1", "enable_arc_fitting": "0", "reduce_crossing_wall": "0", "layer_height": "0.3", diff --git a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json index 4e5d2e235c..462a355cf9 100644 --- a/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json +++ b/resources/profiles/Qidi/process/0.30mm Extra Draft @Qidi XSmart3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "gzZakw9J3bzbD5D8", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.3", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json index 7622dd4325..a57a8f3f24 100644 --- a/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json +++ b/resources/profiles/Qidi/process/0.30mm Standard @X-Max 4 0.6 nozzle.json @@ -53,7 +53,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.62", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json index 052f88bb4a..4e1a4b322f 100644 --- a/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.32mm Balanced Strength @X-Max 4 0.8 nozzle.json @@ -56,7 +56,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.82", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json index 4aa16d0e45..1589706881 100644 --- a/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json +++ b/resources/profiles/Qidi/process/0.40mm Standard @X-Max 4 0.8 nozzle.json @@ -56,7 +56,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "4", "sparse_infill_line_width": "0.82", "sparse_infill_speed": [ "100" diff --git a/resources/profiles/Qidi/process/fdm_process_common.json b/resources/profiles/Qidi/process/fdm_process_common.json index 134d389c22..2216d70bd0 100644 --- a/resources/profiles/Qidi/process/fdm_process_common.json +++ b/resources/profiles/Qidi/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Qidi/process/fdm_process_n_common.json b/resources/profiles/Qidi/process/fdm_process_n_common.json index 629d64338d..599becff50 100644 --- a/resources/profiles/Qidi/process/fdm_process_n_common.json +++ b/resources/profiles/Qidi/process/fdm_process_n_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "apply_top_surface_compensation": "0", "avoid_crossing_wall_includes_support": "0", "bottom_color_penetration_layers": "3", @@ -70,7 +69,6 @@ "150" ], "interface_shells": "0", - "internal_bridge_support_thickness": "0.8", "internal_solid_infill_line_width": "0.42", "internal_solid_infill_speed": [ "150" @@ -105,9 +103,6 @@ "overhang_4_4_speed": [ "10" ], - "overhang_totally_speed": [ - "10" - ], "override_filament_scarf_seam_setting": "0", "prime_tower_width": "35", "print_sequence": "by layer", @@ -149,7 +144,6 @@ "small_perimeter_threshold": [ "4" ], - "smooth_coefficient": "90", "smooth_speed_discontinuity_area": "1", "sparse_infill_density": "15%", "sparse_infill_line_width": "0.45", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_common.json index 3a7676e3fe..bf4d53c8ca 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json index 176add07f7..2f044b9790 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_x3_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -46,7 +45,6 @@ "infill_direction": "45", "sparse_infill_density": "15%", "sparse_infill_pattern": "grid", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_print_height": "0.2", diff --git a/resources/profiles/RH3D.json b/resources/profiles/RH3D.json index fc8aa57484..dbf9500ca0 100644 --- a/resources/profiles/RH3D.json +++ b/resources/profiles/RH3D.json @@ -1,6 +1,6 @@ { "name": "RH3D", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "RH3D - printer profiles", "machine_model_list": [ diff --git a/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json index 1c9cf63e43..045e04b689 100644 --- a/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic ABS @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "VNx6rdTN7OIIXVpC", - "filament_id": "Generic ABS @E3NG v1.2S", + "filament_id": "OFY9muEs", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json index 329de9f04d..fd22b91c19 100644 --- a/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic ASA @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "LK5M8q58HY86k9aX", - "filament_id": "Generic ASA @E3NG v1.2S", + "filament_id": "OFLPAxz3", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json index 49cff221dd..d3a2002f8f 100644 --- a/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PCCF @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pccf", "from": "system", "setting_id": "fnnja8VlKHWpuOjG", - "filament_id": "Generic PCCF @E3NG v1.2S", + "filament_id": "OFC5f4Ay", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.5 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json index 6bd5e940fe..1fd8ab22ed 100644 --- a/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PETG @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_petg", "from": "system", "setting_id": "IS3z7f5wnjsvv8vC", - "filament_id": "Generic PETG @E3NG v1.2S", + "filament_id": "OFYPdQJh", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json index 86e514521c..bbf58fe55a 100644 --- a/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic PLA @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "b1tuMVA0Hh27wYQH", - "filament_id": "Generic PLA @E3NG v1.2S", + "filament_id": "OFDSrzZ8", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.2 nozzle", diff --git a/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json b/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json index 7c308efd71..f6c8a7ca6e 100644 --- a/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json +++ b/resources/profiles/RH3D/filament/Generic TPU @E3NG v1.2S.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "kaTatels2H01rgeJ", - "filament_id": "Generic TPU @E3NG v1.2S", + "filament_id": "OFgbpcy9", "instantiation": "true", "compatible_printers": [ "E3NG v1.2S - 0.4 nozzle", diff --git a/resources/profiles/RH3D/filament/fdm_filament_abs.json b/resources/profiles/RH3D/filament/fdm_filament_abs.json index f68da37f19..f4ab005733 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_abs.json +++ b/resources/profiles/RH3D/filament/fdm_filament_abs.json @@ -3,7 +3,6 @@ "name": "fdm_filament_abs", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH01", "instantiation": "false", "cool_plate_temp": [ "100" diff --git a/resources/profiles/RH3D/filament/fdm_filament_asa.json b/resources/profiles/RH3D/filament/fdm_filament_asa.json index bc71167111..ac03beef13 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_asa.json +++ b/resources/profiles/RH3D/filament/fdm_filament_asa.json @@ -3,7 +3,6 @@ "name": "fdm_filament_asa", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH02", "instantiation": "false", "cool_plate_temp": [ "100" diff --git a/resources/profiles/RH3D/filament/fdm_filament_pccf.json b/resources/profiles/RH3D/filament/fdm_filament_pccf.json index b24ccd667e..4296da76c5 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pccf.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pccf.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pccf", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH06", "instantiation": "false", "cool_plate_temp": [ "0" diff --git a/resources/profiles/RH3D/filament/fdm_filament_petg.json b/resources/profiles/RH3D/filament/fdm_filament_petg.json index 646a682703..aaa0f62357 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_petg.json +++ b/resources/profiles/RH3D/filament/fdm_filament_petg.json @@ -3,7 +3,6 @@ "name": "fdm_filament_petg", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH03", "instantiation": "false", "cool_plate_temp": [ "70" diff --git a/resources/profiles/RH3D/filament/fdm_filament_pla.json b/resources/profiles/RH3D/filament/fdm_filament_pla.json index ad4f375e9d..873a78461b 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pla.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pla.json @@ -3,7 +3,6 @@ "name": "fdm_filament_pla", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH04", "instantiation": "false", "cool_plate_temp": [ "40" diff --git a/resources/profiles/RH3D/filament/fdm_filament_tpu.json b/resources/profiles/RH3D/filament/fdm_filament_tpu.json index e55e214275..dcf6f2c68d 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_tpu.json +++ b/resources/profiles/RH3D/filament/fdm_filament_tpu.json @@ -3,7 +3,6 @@ "name": "fdm_filament_tpu", "inherits": "fdm_filament_common", "from": "system", - "filament_id": "GFRH05", "instantiation": "false", "cool_plate_temp": [ "30" diff --git a/resources/profiles/RH3D/process/fdm_process_common.json b/resources/profiles/RH3D/process/fdm_process_common.json index 2cf6e41151..4f02e37fa6 100644 --- a/resources/profiles/RH3D/process/fdm_process_common.json +++ b/resources/profiles/RH3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonicline", @@ -86,7 +85,6 @@ "support_object_xy_distance": "0.4", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Raise3D.json b/resources/profiles/Raise3D.json index b224025f6d..5f98b967d4 100644 --- a/resources/profiles/Raise3D.json +++ b/resources/profiles/Raise3D.json @@ -1,7 +1,7 @@ { "name": "Raise3D", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Raise3D configurations", "machine_model_list": [ diff --git a/resources/profiles/Raise3D/machine/fdm_machine_common.json b/resources/profiles/Raise3D/machine/fdm_machine_common.json index b4aada4829..a2c7c89e17 100644 --- a/resources/profiles/Raise3D/machine/fdm_machine_common.json +++ b/resources/profiles/Raise3D/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json index 30d3f1cc61..8a6759c78a 100644 --- a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "mlb2242fJxu26dnV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.1", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json index 35e21d67e7..a288122e2e 100644 --- a/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.10mm Fine @Raise3D Pro3Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "u9vhB9uigwzA2mli", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.1", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json index bdcccf16fb..a027a6d90c 100644 --- a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ADqZgpU4D612lSnf", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json index 7f88195b88..981c91f39a 100644 --- a/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.20mm Standard @Raise3D Pro3Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "GhwsrGu8tZexCrOy", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json index 91e24b6ebf..4fd5df2d25 100644 --- a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json +++ b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "p0KdJttce5WMx30N", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json index d2d299ca64..ff1b0f158c 100644 --- a/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json +++ b/resources/profiles/Raise3D/process/0.25mm Draft @Raise3D Pro3Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "tgWE9Ph7i1F7OweA", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Raise3D/process/fdm_process_common.json b/resources/profiles/Raise3D/process/fdm_process_common.json index 164ff9d58a..d3568a9bec 100644 --- a/resources/profiles/Raise3D/process/fdm_process_common.json +++ b/resources/profiles/Raise3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "10", diff --git a/resources/profiles/Ratrig.json b/resources/profiles/Ratrig.json index 969794f578..743333f9aa 100644 --- a/resources/profiles/Ratrig.json +++ b/resources/profiles/Ratrig.json @@ -1,6 +1,6 @@ { "name": "RatRig", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "RatRig configurations", "machine_model_list": [ @@ -277,89 +277,77 @@ ], "filament_list": [ { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" + "name": "Generic ABS @RatRig", + "sub_path": "filament/Generic ABS @RatRig.json" }, { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" + "name": "Generic ABS BigNozzle @RatRig", + "sub_path": "filament/Generic ABS BigNozzle @RatRig.json" }, { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" + "name": "Generic ASA @RatRig", + "sub_path": "filament/Generic ASA @RatRig.json" }, { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" + "name": "Generic ASA BigNozzle @RatRig", + "sub_path": "filament/Generic ASA BigNozzle @RatRig.json" }, { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" + "name": "Generic PA @RatRig", + "sub_path": "filament/Generic PA @RatRig.json" }, { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" + "name": "Generic PA-CF @RatRig", + "sub_path": "filament/Generic PA-CF @RatRig.json" }, { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" + "name": "Generic PC @RatRig", + "sub_path": "filament/Generic PC @RatRig.json" }, { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" + "name": "Generic PCTG @RatRig", + "sub_path": "filament/Generic PCTG @RatRig.json" }, { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" + "name": "Generic PCTG BigNozzle @RatRig", + "sub_path": "filament/Generic PCTG BigNozzle @RatRig.json" }, { - "name": "RatRig BigNozzle ABS", - "sub_path": "filament/RatRig BigNozzle ABS.json" + "name": "Generic PETG @RatRig", + "sub_path": "filament/Generic PETG @RatRig.json" }, { - "name": "RatRig Generic ABS", - "sub_path": "filament/RatRig Generic ABS.json" + "name": "Generic PETG BigNozzle @RatRig", + "sub_path": "filament/Generic PETG BigNozzle @RatRig.json" + }, + { + "name": "Generic PLA @RatRig", + "sub_path": "filament/Generic PLA @RatRig.json" + }, + { + "name": "Generic PLA BigNozzle @RatRig", + "sub_path": "filament/Generic PLA BigNozzle @RatRig.json" + }, + { + "name": "Generic PLA-CF @RatRig", + "sub_path": "filament/Generic PLA-CF @RatRig.json" + }, + { + "name": "Generic PVA @RatRig", + "sub_path": "filament/Generic PVA @RatRig.json" + }, + { + "name": "Generic TPU @RatRig", + "sub_path": "filament/Generic TPU @RatRig.json" + }, + { + "name": "Generic TPU BigNozzle @RatRig", + "sub_path": "filament/Generic TPU BigNozzle @RatRig.json" }, { "name": "RatRig PunkFil ABS", "sub_path": "filament/RatRig PunkFil ABS.json" }, - { - "name": "RatRig BigNozzle ASA", - "sub_path": "filament/RatRig BigNozzle ASA.json" - }, - { - "name": "RatRig Generic ASA", - "sub_path": "filament/RatRig Generic ASA.json" - }, - { - "name": "RatRig Generic PA", - "sub_path": "filament/RatRig Generic PA.json" - }, - { - "name": "RatRig Generic PA-CF", - "sub_path": "filament/RatRig Generic PA-CF.json" - }, - { - "name": "RatRig Generic PC", - "sub_path": "filament/RatRig Generic PC.json" - }, - { - "name": "RatRig BigNozzle PCTG", - "sub_path": "filament/RatRig BigNozzle PCTG.json" - }, - { - "name": "RatRig BigNozzle PETG", - "sub_path": "filament/RatRig BigNozzle PETG.json" - }, - { - "name": "RatRig Generic PCTG", - "sub_path": "filament/RatRig Generic PCTG.json" - }, - { - "name": "RatRig Generic PETG", - "sub_path": "filament/RatRig Generic PETG.json" - }, { "name": "RatRig PunkFil PETG", "sub_path": "filament/RatRig PunkFil PETG.json" @@ -367,30 +355,6 @@ { "name": "RatRig PunkFil PETG CF", "sub_path": "filament/RatRig PunkFil PETG CF.json" - }, - { - "name": "RatRig BigNozzle PLA", - "sub_path": "filament/RatRig BigNozzle PLA.json" - }, - { - "name": "RatRig Generic PLA", - "sub_path": "filament/RatRig Generic PLA.json" - }, - { - "name": "RatRig Generic PLA-CF", - "sub_path": "filament/RatRig Generic PLA-CF.json" - }, - { - "name": "RatRig Generic PVA", - "sub_path": "filament/RatRig Generic PVA.json" - }, - { - "name": "RatRig BigNozzle TPU", - "sub_path": "filament/RatRig BigNozzle TPU.json" - }, - { - "name": "RatRig Generic TPU", - "sub_path": "filament/RatRig Generic TPU.json" } ], "machine_list": [ diff --git a/resources/profiles/Ratrig/filament/Generic ABS @RatRig.json b/resources/profiles/Ratrig/filament/Generic ABS @RatRig.json new file mode 100644 index 0000000000..d45720cf60 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic ABS @RatRig.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "Generic ABS @RatRig", + "inherits": "fdm_filament_abs", + "renamed_from": "RatRig Generic ABS", + "from": "system", + "setting_id": "0BepsauXBs5bxPYO", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.980" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "hot_plate_temp_initial_layer": [ + "108" + ], + "nozzle_temperature_initial_layer": [ + "248" + ], + "nozzle_temperature": [ + "243" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json new file mode 100644 index 0000000000..3d071c779a --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic ABS BigNozzle @RatRig.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "Generic ABS BigNozzle @RatRig", + "inherits": "fdm_filament_abs", + "renamed_from": "RatRig BigNozzle ABS", + "from": "system", + "setting_id": "4GJ4GHOuApWBbQoS", + "filament_id": "OFnyHfcv", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "hot_plate_temp_initial_layer": [ + "108" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic ASA @RatRig.json b/resources/profiles/Ratrig/filament/Generic ASA @RatRig.json new file mode 100644 index 0000000000..9b70da5bab --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic ASA @RatRig.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "Generic ASA @RatRig", + "inherits": "fdm_filament_asa", + "renamed_from": "RatRig Generic ASA", + "from": "system", + "setting_id": "cogJbKPAXzyCQgvf", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "19" + ], + "filament_density": [ + "1.1" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.033" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "25" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json new file mode 100644 index 0000000000..f6f85f78e7 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic ASA BigNozzle @RatRig.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "Generic ASA BigNozzle @RatRig", + "inherits": "fdm_filament_asa", + "renamed_from": "RatRig BigNozzle ASA", + "from": "system", + "setting_id": "n2V9gkhbqWJzsQBK", + "filament_id": "OF4GM5qX", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "19" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.033" + ], + "hot_plate_temp_initial_layer": [ + "108" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "28" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PA @RatRig.json b/resources/profiles/Ratrig/filament/Generic PA @RatRig.json new file mode 100644 index 0000000000..58d6757d78 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PA @RatRig.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic PA @RatRig", + "inherits": "fdm_filament_pa", + "renamed_from": "RatRig Generic PA", + "from": "system", + "setting_id": "5rpTzhFjS6Ar4Xy8", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "filament_density": [ + "1.24" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "50" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json b/resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json new file mode 100644 index 0000000000..5b0ea38d75 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PA-CF @RatRig.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "Generic PA-CF @RatRig", + "inherits": "fdm_filament_pa", + "renamed_from": "RatRig Generic PA-CF", + "from": "system", + "setting_id": "ps7duiwT8adNshEO", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "filament_density": [ + "1.24" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "50" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PC @RatRig.json b/resources/profiles/Ratrig/filament/Generic PC @RatRig.json new file mode 100644 index 0000000000..c6dc89cce5 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PC @RatRig.json @@ -0,0 +1,73 @@ +{ + "type": "filament", + "name": "Generic PC @RatRig", + "inherits": "fdm_filament_pc", + "renamed_from": "RatRig Generic PC", + "from": "system", + "setting_id": "7x5VtUIevdAmBqqA", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json b/resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json new file mode 100644 index 0000000000..d3e06685b5 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PCTG @RatRig.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic PCTG @RatRig", + "inherits": "fdm_filament_pet", + "renamed_from": "RatRig Generic PCTG", + "from": "system", + "setting_id": "JMTUqdhoQzCb6ZxJ", + "filament_id": "OFu1evlr", + "instantiation": "true", + "filament_type": [ + "PCTG" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_density": [ + "1.29" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "temperature_vitrification": [ + "90" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json new file mode 100644 index 0000000000..2e47eb6765 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PCTG BigNozzle @RatRig.json @@ -0,0 +1,106 @@ +{ + "type": "filament", + "name": "Generic PCTG BigNozzle @RatRig", + "inherits": "fdm_filament_pctg", + "renamed_from": "RatRig BigNozzle PCTG", + "from": "system", + "setting_id": "HPaol79uY9NdhasQ", + "filament_id": "OFXW4CDh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "15" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_density": [ + "1.29" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "275" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "temperature_vitrification": [ + "90" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PETG @RatRig.json b/resources/profiles/Ratrig/filament/Generic PETG @RatRig.json new file mode 100644 index 0000000000..b0182712b1 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PETG @RatRig.json @@ -0,0 +1,97 @@ +{ + "type": "filament", + "name": "Generic PETG @RatRig", + "inherits": "fdm_filament_pet", + "renamed_from": "RatRig Generic PETG", + "from": "system", + "setting_id": "6p3FfhhSIAOQGEzT", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json new file mode 100644 index 0000000000..213f41628c --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PETG BigNozzle @RatRig.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "Generic PETG BigNozzle @RatRig", + "inherits": "fdm_filament_pet", + "renamed_from": "RatRig BigNozzle PETG", + "from": "system", + "setting_id": "pRM6IVX5T3y6Ywj4", + "filament_id": "OFvD0Qqt", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PLA @RatRig.json b/resources/profiles/Ratrig/filament/Generic PLA @RatRig.json new file mode 100644 index 0000000000..b8a33f4da4 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PLA @RatRig.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic PLA @RatRig", + "inherits": "fdm_filament_pla", + "renamed_from": "RatRig Generic PLA", + "from": "system", + "setting_id": "BsQA6ChWHTDUSlii", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "slow_down_layer_time": [ + "8" + ], + "nozzle_temperature_initial_layer": [ + "205" + ], + "nozzle_temperature": [ + "200" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json new file mode 100644 index 0000000000..08d546aafc --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PLA BigNozzle @RatRig.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "name": "Generic PLA BigNozzle @RatRig", + "inherits": "fdm_filament_pla", + "renamed_from": "RatRig BigNozzle PLA", + "from": "system", + "setting_id": "WEI4QiKyANQOK7dG", + "filament_id": "OFqFRiLb", + "instantiation": "true", + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "slow_down_layer_time": [ + "8" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json b/resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json new file mode 100644 index 0000000000..288c892f09 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PLA-CF @RatRig.json @@ -0,0 +1,73 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @RatRig", + "inherits": "fdm_filament_pla", + "renamed_from": "RatRig Generic PLA-CF", + "from": "system", + "setting_id": "ai3I13fL5giqq5LW", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "slow_down_layer_time": [ + "7" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "205" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic PVA @RatRig.json b/resources/profiles/Ratrig/filament/Generic PVA @RatRig.json new file mode 100644 index 0000000000..016b146181 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic PVA @RatRig.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Generic PVA @RatRig", + "inherits": "fdm_filament_pva", + "renamed_from": "RatRig Generic PVA", + "from": "system", + "setting_id": "y6DJYhqAmxMng8Kf", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic TPU @RatRig.json b/resources/profiles/Ratrig/filament/Generic TPU @RatRig.json new file mode 100644 index 0000000000..e8ea6176b7 --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic TPU @RatRig.json @@ -0,0 +1,64 @@ +{ + "type": "filament", + "name": "Generic TPU @RatRig", + "inherits": "fdm_filament_tpu", + "renamed_from": "RatRig Generic TPU", + "from": "system", + "setting_id": "dAIGKmZctSRhP1Lu", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "5" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json b/resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json new file mode 100644 index 0000000000..4714f57d5a --- /dev/null +++ b/resources/profiles/Ratrig/filament/Generic TPU BigNozzle @RatRig.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic TPU BigNozzle @RatRig", + "inherits": "fdm_filament_tpu", + "renamed_from": "RatRig BigNozzle TPU", + "from": "system", + "setting_id": "9UWg2cO61XFdlWxo", + "filament_id": "OF5tX6va", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "5" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "compatible_printers": [ + "RatRig V-Core 3 200 0.4 nozzle", + "RatRig V-Core 3 300 0.4 nozzle", + "RatRig V-Core 3 400 0.4 nozzle", + "RatRig V-Core 3 500 0.4 nozzle", + "RatRig V-Minion 0.4 nozzle", + "RatRig V-Cast 0.4 nozzle", + "RatRig V-Cast 0.6 nozzle", + "RatRig V-Core 4 300 0.4 nozzle", + "RatRig V-Core 4 300 0.5 nozzle", + "RatRig V-Core 4 300 0.6 nozzle", + "RatRig V-Core 4 400 0.4 nozzle", + "RatRig V-Core 4 400 0.5 nozzle", + "RatRig V-Core 4 400 0.6 nozzle", + "RatRig V-Core 4 500 0.4 nozzle", + "RatRig V-Core 4 500 0.5 nozzle", + "RatRig V-Core 4 500 0.6 nozzle", + "RatRig V-Core 4 IDEX 300 0.4 nozzle", + "RatRig V-Core 4 IDEX 300 0.5 nozzle", + "RatRig V-Core 4 IDEX 300 0.6 nozzle", + "RatRig V-Core 4 IDEX 400 0.4 nozzle", + "RatRig V-Core 4 IDEX 400 0.5 nozzle", + "RatRig V-Core 4 IDEX 400 0.6 nozzle", + "RatRig V-Core 4 IDEX 500 0.4 nozzle", + "RatRig V-Core 4 IDEX 500 0.5 nozzle", + "RatRig V-Core 4 IDEX 500 0.6 nozzle", + "RatRig V-Core 4 HYBRID 300 0.4 nozzle", + "RatRig V-Core 4 HYBRID 300 0.5 nozzle", + "RatRig V-Core 4 HYBRID 300 0.6 nozzle", + "RatRig V-Core 4 HYBRID 400 0.4 nozzle", + "RatRig V-Core 4 HYBRID 400 0.5 nozzle", + "RatRig V-Core 4 HYBRID 400 0.6 nozzle", + "RatRig V-Core 4 HYBRID 500 0.4 nozzle", + "RatRig V-Core 4 HYBRID 500 0.5 nozzle", + "RatRig V-Core 4 HYBRID 500 0.6 nozzle" + ] +} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json deleted file mode 100644 index 8f601dba61..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ABS.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "oE39mwr3PCpeBxZN", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "hot_plate_temp_initial_layer": [ - "108" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "265" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "30" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json deleted file mode 100644 index a99d58ae34..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle ASA.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "GGkbwdd79jAXnwuf", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "filament_max_volumetric_speed": [ - "19" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.033" - ], - "hot_plate_temp_initial_layer": [ - "108" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "265" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "28" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json deleted file mode 100644 index 38db026fe4..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PCTG.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle PCTG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "uCKZhFAPvEa2wKnA", - "filament_id": "GFC99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "50" - ], - "fan_min_speed": [ - "15" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.92" - ], - "filament_density": [ - "1.29" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "275" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "temperature_vitrification": [ - "90" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json deleted file mode 100644 index e1cf036ece..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PETG.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "bf3YMNVRSE1i1E8N", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.92" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json deleted file mode 100644 index d734dce4b7..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle PLA.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dyG3zLuhX2qe8XJP", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "slow_down_layer_time": [ - "8" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json b/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json deleted file mode 100644 index 11dae068e0..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig BigNozzle TPU.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "filament", - "name": "RatRig BigNozzle TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "wLJ3X05Jnz1EqeOI", - "filament_id": "GFL99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "5" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json b/resources/profiles/Ratrig/filament/RatRig Generic ABS.json deleted file mode 100644 index b55a944e54..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic ABS.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "ovLAzbygn6JHqGk0", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.980" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "hot_plate_temp_initial_layer": [ - "108" - ], - "nozzle_temperature_initial_layer": [ - "248" - ], - "nozzle_temperature": [ - "243" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "30" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json b/resources/profiles/Ratrig/filament/RatRig Generic ASA.json deleted file mode 100644 index 5cee3f262c..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic ASA.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "pmxazFQdx5Oa7Pke", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "19" - ], - "filament_density": [ - "1.1" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.033" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "25" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json deleted file mode 100644 index 31c95abede..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA-CF.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "ZRrsXKPk8pY4yrwd", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "270" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "filament_density": [ - "1.24" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "50" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PA.json b/resources/profiles/Ratrig/filament/RatRig Generic PA.json deleted file mode 100644 index 52bfb6ea3c..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PA.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "fVGEV9t4w06LODgD", - "filament_id": "GFN99", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "270" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "filament_density": [ - "1.24" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "50" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PC.json b/resources/profiles/Ratrig/filament/RatRig Generic PC.json deleted file mode 100644 index 9f9cab8e38..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PC.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "XQ5VEJXu5X0L3Lbn", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json b/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json deleted file mode 100644 index 89031567bf..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PCTG.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PCTG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "SG4Gt87iS1ql3s8S", - "filament_id": "GFC99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_density": [ - "1.29" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "255" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "temperature_vitrification": [ - "90" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json b/resources/profiles/Ratrig/filament/RatRig Generic PETG.json deleted file mode 100644 index e64dfbe2f4..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PETG.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "u6diBMbHW2nnKKTm", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json deleted file mode 100644 index 2ce8c792e9..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA-CF.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Vwn22LQBChxWysmU", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "slow_down_layer_time": [ - "7" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature": [ - "205" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json b/resources/profiles/Ratrig/filament/RatRig Generic PLA.json deleted file mode 100644 index 91bc503ed8..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PLA.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "IY6qXVoQqhsKuMzP", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "slow_down_layer_time": [ - "8" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature": [ - "200" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json b/resources/profiles/Ratrig/filament/RatRig Generic PVA.json deleted file mode 100644 index 69fa53a0f5..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic PVA.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "9uJ3Rr6kn9jZZxPO", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json b/resources/profiles/Ratrig/filament/RatRig Generic TPU.json deleted file mode 100644 index 3e1594501d..0000000000 --- a/resources/profiles/Ratrig/filament/RatRig Generic TPU.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "type": "filament", - "name": "RatRig Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "zWOn983v5s2ujssj", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "5" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "compatible_printers": [ - "RatRig V-Core 3 200 0.4 nozzle", - "RatRig V-Core 3 300 0.4 nozzle", - "RatRig V-Core 3 400 0.4 nozzle", - "RatRig V-Core 3 500 0.4 nozzle", - "RatRig V-Minion 0.4 nozzle", - "RatRig V-Cast 0.4 nozzle", - "RatRig V-Cast 0.6 nozzle", - "RatRig V-Core 4 300 0.4 nozzle", - "RatRig V-Core 4 300 0.5 nozzle", - "RatRig V-Core 4 300 0.6 nozzle", - "RatRig V-Core 4 400 0.4 nozzle", - "RatRig V-Core 4 400 0.5 nozzle", - "RatRig V-Core 4 400 0.6 nozzle", - "RatRig V-Core 4 500 0.4 nozzle", - "RatRig V-Core 4 500 0.5 nozzle", - "RatRig V-Core 4 500 0.6 nozzle", - "RatRig V-Core 4 IDEX 300 0.4 nozzle", - "RatRig V-Core 4 IDEX 300 0.5 nozzle", - "RatRig V-Core 4 IDEX 300 0.6 nozzle", - "RatRig V-Core 4 IDEX 400 0.4 nozzle", - "RatRig V-Core 4 IDEX 400 0.5 nozzle", - "RatRig V-Core 4 IDEX 400 0.6 nozzle", - "RatRig V-Core 4 IDEX 500 0.4 nozzle", - "RatRig V-Core 4 IDEX 500 0.5 nozzle", - "RatRig V-Core 4 IDEX 500 0.6 nozzle", - "RatRig V-Core 4 HYBRID 300 0.4 nozzle", - "RatRig V-Core 4 HYBRID 300 0.5 nozzle", - "RatRig V-Core 4 HYBRID 300 0.6 nozzle", - "RatRig V-Core 4 HYBRID 400 0.4 nozzle", - "RatRig V-Core 4 HYBRID 400 0.5 nozzle", - "RatRig V-Core 4 HYBRID 400 0.6 nozzle", - "RatRig V-Core 4 HYBRID 500 0.4 nozzle", - "RatRig V-Core 4 HYBRID 500 0.5 nozzle", - "RatRig V-Core 4 HYBRID 500 0.6 nozzle" - ] -} diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json index 5fa20b8246..9308082af6 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "AzjpmeEXD6enWOG6", - "filament_id": "GFB99", + "filament_id": "OFhO5aEJ", "instantiation": "true", "filament_flow_ratio": [ "0.92" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json index 73a5920ee8..5f047c9b94 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "o2dP6EwooarikQ8R", - "filament_id": "GFB99", + "filament_id": "OFe61n6v", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json index 170b1e0c99..3863ddcd07 100644 --- a/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json +++ b/resources/profiles/Ratrig/filament/RatRig PunkFil PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "e1QXBJqpkhHxXor1", - "filament_id": "GFB99", + "filament_id": "OF9emAI9", "instantiation": "true", "filament_flow_ratio": [ "0.93" diff --git a/resources/profiles/Ratrig/filament/fdm_filament_abs.json b/resources/profiles/Ratrig/filament/fdm_filament_abs.json deleted file mode 100644 index 6232c6bf6d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_abs.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_abs", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "105" - ], - "eng_plate_temp": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "textured_plate_temp": [ - "105" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "textured_plate_temp_initial_layer": [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_asa.json b/resources/profiles/Ratrig/filament/fdm_filament_asa.json deleted file mode 100644 index 0b3ca804e8..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_asa.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_asa", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "105" - ], - "eng_plate_temp": [ - "105" - ], - "hot_plate_temp": [ - "105" - ], - "textured_plate_temp": [ - "105" - ], - "cool_plate_temp_initial_layer": [ - "105" - ], - "eng_plate_temp_initial_layer": [ - "105" - ], - "hot_plate_temp_initial_layer": [ - "105" - ], - "textured_plate_temp_initial_layer": [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ASA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_common.json b/resources/profiles/Ratrig/filament/fdm_filament_common.json deleted file mode 100644 index ab5b8305a6..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_common.json +++ /dev/null @@ -1,141 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "overhang_fan_threshold": [ - "95%" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "0" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "bed_type": [ - "Cool Plate" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "full_fan_speed_layer": [ - "0" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "35" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "nozzle_temperature": [ - "200" - ], - "temperature_vitrification": [ - "100" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pa.json b/resources/profiles/Ratrig/filament/fdm_filament_pa.json deleted file mode 100644 index 8b67678f9b..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pa.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pa", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "100" - ], - "hot_plate_temp": [ - "100" - ], - "textured_plate_temp": [ - "100" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "4" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_type": [ - "PA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "0" - ], - "overhang_fan_speed": [ - "30" - ], - "nozzle_temperature": [ - "290" - ], - "temperature_vitrification": [ - "108" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pc.json b/resources/profiles/Ratrig/filament/fdm_filament_pc.json deleted file mode 100644 index ec102017fc..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pc", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "0" - ], - "eng_plate_temp": [ - "110" - ], - "hot_plate_temp": [ - "110" - ], - "textured_plate_temp": [ - "110" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "textured_plate_temp_initial_layer": [ - "110" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "temperature_vitrification": [ - "140" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pet.json b/resources/profiles/Ratrig/filament/fdm_filament_pet.json deleted file mode 100644 index d056aa4e88..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pet.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "0" - ], - "hot_plate_temp": [ - "80" - ], - "textured_plate_temp": [ - "80" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "textured_plate_temp_initial_layer": [ - "80" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "255" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pla.json b/resources/profiles/Ratrig/filament/fdm_filament_pla.json deleted file mode 100644 index ef1a11694d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pla.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pla", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PLA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "cool_plate_temp": [ - "60" - ], - "eng_plate_temp": [ - "60" - ], - "hot_plate_temp": [ - "60" - ], - "textured_plate_temp": [ - "60" - ], - "cool_plate_temp_initial_layer": [ - "60" - ], - "eng_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "textured_plate_temp_initial_layer": [ - "60" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_pva.json b/resources/profiles/Ratrig/filament/fdm_filament_pva.json deleted file mode 100644 index 860cba12e1..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_pva.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pva", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "hot_plate_temp": [ - "45" - ], - "textured_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "hot_plate_temp_initial_layer": [ - "45" - ], - "textured_plate_temp_initial_layer": [ - "45" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_soluble": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "50" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/filament/fdm_filament_tpu.json b/resources/profiles/Ratrig/filament/fdm_filament_tpu.json deleted file mode 100644 index d781fc067d..0000000000 --- a/resources/profiles/Ratrig/filament/fdm_filament_tpu.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_tpu", - "inherits": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "cool_plate_temp": [ - "30" - ], - "eng_plate_temp": [ - "30" - ], - "hot_plate_temp": [ - "35" - ], - "textured_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "30" - ], - "eng_plate_temp_initial_layer": [ - "30" - ], - "hot_plate_temp_initial_layer": [ - "35" - ], - "textured_plate_temp_initial_layer": [ - "35" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "TPU" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "filament_retraction_length": [ - "0.4" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Ratrig/machine/RatRig V-Cast.json b/resources/profiles/Ratrig/machine/RatRig V-Cast.json index d4d2d51ce4..259a8fff94 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Cast.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Cast.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcast-bed.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json index 07e3e95a9c..1d0b05e4f5 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 200.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-200.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json index 830b0bded9..a82c91482c 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json index 5fb1292b86..97713f4417 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json index 4bce2ed0fe..08b6b2e59a 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 3 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json index 09a867b6e9..decababc1c 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json index 7cc76b3323..c6cea0faf6 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json index 1664aff7e3..e7b6ab132a 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json index 6d0e891a12..bbe022e658 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json index 9aa253bdea..8269490619 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json index bafe6879cf..87aa3dd70d 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 HYBRID 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json index 961e647009..9868dae17f 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json index 5efa6aea9f..26a3f7fb1f 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json index e2549c0416..ce26c28226 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 300.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-300.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json index a8710f8aaa..ad2080aa77 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json index cb5eb6f526..09e28665d4 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json index d3e08811f8..f37a7eabca 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 400.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-400.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json index 3e56953833..2169db2cbd 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 COPY MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500-clone-mode.stl", "bed_texture": "ratrig_logo_copy_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json index 336ed1ddd8..c8996519f6 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500 MIRROR MODE.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500-clone-mode.stl", "bed_texture": "ratrig_logo_mirror_mode.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json index 5766fb3953..3950a331e8 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Core 4 IDEX 500.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vcore-bed-500.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PCTG;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PCTG @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig;Generic PLA @System" } diff --git a/resources/profiles/Ratrig/machine/RatRig V-Minion.json b/resources/profiles/Ratrig/machine/RatRig V-Minion.json index 974a3aaa59..4134cadbf2 100644 --- a/resources/profiles/Ratrig/machine/RatRig V-Minion.json +++ b/resources/profiles/Ratrig/machine/RatRig V-Minion.json @@ -8,5 +8,5 @@ "bed_model": "ratrig-vminion-bed.stl", "bed_texture": "ratrig_logo.svg", "hotend_model": "", - "default_materials": "RatRig Generic ABS;RatRig Generic PLA;RatRig Generic PLA-CF;RatRig Generic PETG;RatRig Generic TPU;RatRig Generic ASA;RatRig Generic PC;RatRig Generic PVA;RatRig Generic PA;RatRig Generic PA-CF" + "default_materials": "Generic ABS @RatRig;Generic PLA @RatRig;Generic PLA-CF @RatRig;Generic PETG @RatRig;Generic TPU @RatRig;Generic ASA @RatRig;Generic PC @RatRig;Generic PVA @RatRig;Generic PA @RatRig;Generic PA-CF @RatRig" } diff --git a/resources/profiles/Ratrig/machine/fdm_klipper_common.json b/resources/profiles/Ratrig/machine/fdm_klipper_common.json index 8915fc1d4a..ecd93a2346 100644 --- a/resources/profiles/Ratrig/machine/fdm_klipper_common.json +++ b/resources/profiles/Ratrig/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "manual_filament_change": "1", "change_filament_gcode": "M600", @@ -126,7 +125,7 @@ "1" ], "default_filament_profile": [ - "RatRig Generic ABS" + "Generic ABS @RatRig" ], "default_print_profile": "0.20mm Standard @RatRig", "bed_exclude_area": [ diff --git a/resources/profiles/Ratrig/machine/fdm_machine_common.json b/resources/profiles/Ratrig/machine/fdm_machine_common.json index ad1efd697f..36f0b6ec55 100644 --- a/resources/profiles/Ratrig/machine/fdm_machine_common.json +++ b/resources/profiles/Ratrig/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Ratrig/process/fdm_process_common.json b/resources/profiles/Ratrig/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Ratrig/process/fdm_process_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json index 65ccb82fa2..486cc31dd5 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_common_idex.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_common_idex.json index d17f7836a1..cd96b51721 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_common_idex.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_common_idex.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_idex.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_idex.json index 120b8835a5..72aa3cf9bc 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_idex.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_idex.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/RolohaunDesign.json b/resources/profiles/RolohaunDesign.json index 398937c127..e0b7a33301 100644 --- a/resources/profiles/RolohaunDesign.json +++ b/resources/profiles/RolohaunDesign.json @@ -1,6 +1,6 @@ { "name": "RolohaunDesign", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "RolohaunDesign Printer Profiles", "machine_model_list": [ diff --git a/resources/profiles/RolohaunDesign/machine/fdm_common_Rook MK1 LDO.json b/resources/profiles/RolohaunDesign/machine/fdm_common_Rook MK1 LDO.json index 8438cea7a1..a3c418d16b 100644 --- a/resources/profiles/RolohaunDesign/machine/fdm_common_Rook MK1 LDO.json +++ b/resources/profiles/RolohaunDesign/machine/fdm_common_Rook MK1 LDO.json @@ -117,7 +117,6 @@ "40" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/RolohaunDesign/machine/fdm_machine_common.json b/resources/profiles/RolohaunDesign/machine/fdm_machine_common.json index 11833be972..a07212bae7 100644 --- a/resources/profiles/RolohaunDesign/machine/fdm_machine_common.json +++ b/resources/profiles/RolohaunDesign/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/RolohaunDesign/process/fdm_process_common.json b/resources/profiles/RolohaunDesign/process/fdm_process_common.json index feb86df0e1..f37dc52e73 100644 --- a/resources/profiles/RolohaunDesign/process/fdm_process_common.json +++ b/resources/profiles/RolohaunDesign/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -84,7 +83,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/SecKit.json b/resources/profiles/SecKit.json index 85d373fbc9..91804bff0a 100644 --- a/resources/profiles/SecKit.json +++ b/resources/profiles/SecKit.json @@ -1,6 +1,6 @@ { "name": "SecKit", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "SecKit configurations", "machine_model_list": [ @@ -89,44 +89,44 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "SecKit Generic ABS", - "sub_path": "filament/SecKit Generic ABS.json" + "name": "Generic ABS @SecKit", + "sub_path": "filament/Generic ABS @SecKit.json" }, { - "name": "SecKit Generic ASA", - "sub_path": "filament/SecKit Generic ASA.json" + "name": "Generic ASA @SecKit", + "sub_path": "filament/Generic ASA @SecKit.json" }, { - "name": "SecKit Generic PA", - "sub_path": "filament/SecKit Generic PA.json" + "name": "Generic PA @SecKit", + "sub_path": "filament/Generic PA @SecKit.json" }, { - "name": "SecKit Generic PA-CF", - "sub_path": "filament/SecKit Generic PA-CF.json" + "name": "Generic PA-CF @SecKit", + "sub_path": "filament/Generic PA-CF @SecKit.json" }, { - "name": "SecKit Generic PC", - "sub_path": "filament/SecKit Generic PC.json" + "name": "Generic PC @SecKit", + "sub_path": "filament/Generic PC @SecKit.json" }, { - "name": "SecKit Generic PETG", - "sub_path": "filament/SecKit Generic PETG.json" + "name": "Generic PETG @SecKit", + "sub_path": "filament/Generic PETG @SecKit.json" }, { - "name": "SecKit Generic PLA", - "sub_path": "filament/SecKit Generic PLA.json" + "name": "Generic PLA @SecKit", + "sub_path": "filament/Generic PLA @SecKit.json" }, { - "name": "SecKit Generic PLA-CF", - "sub_path": "filament/SecKit Generic PLA-CF.json" + "name": "Generic PLA-CF @SecKit", + "sub_path": "filament/Generic PLA-CF @SecKit.json" }, { - "name": "SecKit Generic PVA", - "sub_path": "filament/SecKit Generic PVA.json" + "name": "Generic PVA @SecKit", + "sub_path": "filament/Generic PVA @SecKit.json" }, { - "name": "SecKit Generic TPU", - "sub_path": "filament/SecKit Generic TPU.json" + "name": "Generic TPU @SecKit", + "sub_path": "filament/Generic TPU @SecKit.json" } ], "machine_list": [ diff --git a/resources/profiles/SecKit/filament/Generic ABS @SecKit.json b/resources/profiles/SecKit/filament/Generic ABS @SecKit.json new file mode 100644 index 0000000000..cdd9ce2f62 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic ABS @SecKit.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Generic ABS @SecKit", + "inherits": "fdm_filament_abs", + "renamed_from": "SecKit Generic ABS", + "from": "system", + "setting_id": "VSrXBQUNBQMwUc08", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.980" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "hot_plate_temp_initial_layer": [ + "108" + ], + "nozzle_temperature_initial_layer": [ + "248" + ], + "nozzle_temperature": [ + "243" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic ASA @SecKit.json b/resources/profiles/SecKit/filament/Generic ASA @SecKit.json new file mode 100644 index 0000000000..366b20172b --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic ASA @SecKit.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Generic ASA @SecKit", + "inherits": "fdm_filament_asa", + "renamed_from": "SecKit Generic ASA", + "from": "system", + "setting_id": "usCYRq4VuLqXvb0T", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "19" + ], + "filament_density": [ + "1.1" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.033" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "fan_cooling_layer_time": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "25" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PA @SecKit.json b/resources/profiles/SecKit/filament/Generic PA @SecKit.json new file mode 100644 index 0000000000..7746d8628a --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PA @SecKit.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Generic PA @SecKit", + "inherits": "fdm_filament_pa", + "renamed_from": "SecKit Generic PA", + "from": "system", + "setting_id": "uAuptETLwGxTsthC", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "filament_density": [ + "1.24" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "50" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json b/resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json new file mode 100644 index 0000000000..52c0bae450 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PA-CF @SecKit.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Generic PA-CF @SecKit", + "inherits": "fdm_filament_pa", + "renamed_from": "SecKit Generic PA-CF", + "from": "system", + "setting_id": "P6G8DjjyfAFgGaj2", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature": [ + "270" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "filament_density": [ + "1.24" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "overhang_fan_speed": [ + "50" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PC @SecKit.json b/resources/profiles/SecKit/filament/Generic PC @SecKit.json new file mode 100644 index 0000000000..689f3ea553 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PC @SecKit.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Generic PC @SecKit", + "inherits": "fdm_filament_pc", + "renamed_from": "SecKit Generic PC", + "from": "system", + "setting_id": "PxmBHXsdhZGR9bYv", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PETG @SecKit.json b/resources/profiles/SecKit/filament/Generic PETG @SecKit.json new file mode 100644 index 0000000000..05c5c753c6 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PETG @SecKit.json @@ -0,0 +1,65 @@ +{ + "type": "filament", + "name": "Generic PETG @SecKit", + "inherits": "fdm_filament_pet", + "renamed_from": "SecKit Generic PETG", + "from": "system", + "setting_id": "Qt4oXABB5Fukbz46", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "11" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.045" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PLA @SecKit.json b/resources/profiles/SecKit/filament/Generic PLA @SecKit.json new file mode 100644 index 0000000000..b3cd1c2ffc --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PLA @SecKit.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Generic PLA @SecKit", + "inherits": "fdm_filament_pla", + "renamed_from": "SecKit Generic PLA", + "from": "system", + "setting_id": "uWvI4RDQiYLFN7pp", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "slow_down_layer_time": [ + "8" + ], + "nozzle_temperature_initial_layer": [ + "205" + ], + "nozzle_temperature": [ + "200" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json b/resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json new file mode 100644 index 0000000000..507716caee --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PLA-CF @SecKit.json @@ -0,0 +1,41 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @SecKit", + "inherits": "fdm_filament_pla", + "renamed_from": "SecKit Generic PLA-CF", + "from": "system", + "setting_id": "znagqvEsDcHYse9M", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.92" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.05" + ], + "slow_down_layer_time": [ + "7" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature": [ + "205" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic PVA @SecKit.json b/resources/profiles/SecKit/filament/Generic PVA @SecKit.json new file mode 100644 index 0000000000..13f7d50673 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic PVA @SecKit.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PVA @SecKit", + "inherits": "fdm_filament_pva", + "renamed_from": "SecKit Generic PVA", + "from": "system", + "setting_id": "DIUaGXpIF3fUfxqg", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.03" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/Generic TPU @SecKit.json b/resources/profiles/SecKit/filament/Generic TPU @SecKit.json new file mode 100644 index 0000000000..96d9c38a60 --- /dev/null +++ b/resources/profiles/SecKit/filament/Generic TPU @SecKit.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Generic TPU @SecKit", + "inherits": "fdm_filament_tpu", + "renamed_from": "SecKit Generic TPU", + "from": "system", + "setting_id": "agKm2K9w4ZOmZN8c", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "5" + ], + "filament_z_hop": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.1" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "compatible_printers": [ + "SecKit SK-Tank 0.4 nozzle", + "SecKit Go3 0.4 nozzle" + ] +} diff --git a/resources/profiles/SecKit/filament/SecKit Generic ABS.json b/resources/profiles/SecKit/filament/SecKit Generic ABS.json deleted file mode 100644 index bac9887f55..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic ABS.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "gUrHIkj9GExYWVjh", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.980" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "hot_plate_temp_initial_layer": [ - "108" - ], - "nozzle_temperature_initial_layer": [ - "248" - ], - "nozzle_temperature": [ - "243" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "30" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic ASA.json b/resources/profiles/SecKit/filament/SecKit Generic ASA.json deleted file mode 100644 index c9fdf2bcfd..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic ASA.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "UwVF6VlxRg0IW9hB", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "19" - ], - "filament_density": [ - "1.1" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.033" - ], - "close_fan_the_first_x_layers": [ - "2" - ], - "fan_cooling_layer_time": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "25" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json b/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json deleted file mode 100644 index 569b174f1b..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PA-CF.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "0K4eQ2fbaasNdvsP", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "270" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "filament_density": [ - "1.24" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "50" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PA.json b/resources/profiles/SecKit/filament/SecKit Generic PA.json deleted file mode 100644 index bf70f90120..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PA.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "GlgeZsK719DDjaPo", - "filament_id": "GFN99", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "270" - ], - "nozzle_temperature": [ - "270" - ], - "hot_plate_temp": [ - "80" - ], - "hot_plate_temp_initial_layer": [ - "80" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "filament_density": [ - "1.24" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "overhang_fan_speed": [ - "50" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PC.json b/resources/profiles/SecKit/filament/SecKit Generic PC.json deleted file mode 100644 index c76b39ec41..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PC.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "8DHToBaqE7g5VNvN", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.93" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature_range_high": [ - "290" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PETG.json b/resources/profiles/SecKit/filament/SecKit Generic PETG.json deleted file mode 100644 index af3bd585ab..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PETG.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "mx45AbmzGkqYMSsW", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "11" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.045" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json b/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json deleted file mode 100644 index 6767fdc897..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA-CF.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "dPLE2CXMpmdtyiZK", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "slow_down_layer_time": [ - "7" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature": [ - "205" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PLA.json b/resources/profiles/SecKit/filament/SecKit Generic PLA.json deleted file mode 100644 index 62e073f2f2..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PLA.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "7cpNIx6GWUp95tLN", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.92" - ], - "filament_max_volumetric_speed": [ - "20" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.05" - ], - "slow_down_layer_time": [ - "8" - ], - "nozzle_temperature_initial_layer": [ - "205" - ], - "nozzle_temperature": [ - "200" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic PVA.json b/resources/profiles/SecKit/filament/SecKit Generic PVA.json deleted file mode 100644 index 6060d85690..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic PVA.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "jiHEC4uCmPQLINlO", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.03" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/filament/SecKit Generic TPU.json b/resources/profiles/SecKit/filament/SecKit Generic TPU.json deleted file mode 100644 index 25befa8256..0000000000 --- a/resources/profiles/SecKit/filament/SecKit Generic TPU.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "type": "filament", - "name": "SecKit Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "b5GGHwZlR5oOx4eH", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "5" - ], - "filament_z_hop": [ - "0" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.1" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "compatible_printers": [ - "SecKit SK-Tank 0.4 nozzle", - "SecKit Go3 0.4 nozzle" - ] -} diff --git a/resources/profiles/SecKit/machine/SecKit SK-Tank.json b/resources/profiles/SecKit/machine/SecKit SK-Tank.json index 88cd516037..171d979074 100644 --- a/resources/profiles/SecKit/machine/SecKit SK-Tank.json +++ b/resources/profiles/SecKit/machine/SecKit SK-Tank.json @@ -9,5 +9,5 @@ "bed_model": "SK-Tank_Bed.stl", "bed_texture": "seckit_logo.svg", "hotend_model": "hotend.stl", - "default_materials": "SecKit Generic ABS;SecKit Generic PLA;SecKit Generic PLA-CF;SecKit Generic PETG;SecKit Generic TPU;SecKit Generic ASA;SecKit Generic PC;SecKit Generic PVA;SecKit Generic PA;SecKit Generic PA-CF" + "default_materials": "Generic ABS @SecKit;Generic PLA @SecKit;Generic PLA-CF @SecKit;Generic PETG @SecKit;Generic TPU @SecKit;Generic ASA @SecKit;Generic PC @SecKit;Generic PVA @SecKit;Generic PA @SecKit;Generic PA-CF @SecKit" } diff --git a/resources/profiles/SecKit/machine/Seckit Go3.json b/resources/profiles/SecKit/machine/Seckit Go3.json index 9b5169b017..9882f8783e 100644 --- a/resources/profiles/SecKit/machine/Seckit Go3.json +++ b/resources/profiles/SecKit/machine/Seckit Go3.json @@ -9,5 +9,5 @@ "bed_model": "SK-Go3_Bed.stl", "bed_texture": "seckit_logo.svg", "hotend_model": "seckit-hotend.stl", - "default_materials": "SecKit Generic ABS;SecKit Generic PLA;SecKit Generic PLA-CF;SecKit Generic PETG;SecKit Generic TPU;SecKit Generic ASA;SecKit Generic PC;SecKit Generic PVA;SecKit Generic PA;SecKit Generic PA-CF" + "default_materials": "Generic ABS @SecKit;Generic PLA @SecKit;Generic PLA-CF @SecKit;Generic PETG @SecKit;Generic TPU @SecKit;Generic ASA @SecKit;Generic PC @SecKit;Generic PVA @SecKit;Generic PA @SecKit;Generic PA-CF @SecKit" } diff --git a/resources/profiles/SecKit/machine/fdm_klipper_common.json b/resources/profiles/SecKit/machine/fdm_klipper_common.json index 8b9cbf6efe..ed2826f9b4 100644 --- a/resources/profiles/SecKit/machine/fdm_klipper_common.json +++ b/resources/profiles/SecKit/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "120" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", @@ -125,7 +124,7 @@ "1" ], "default_filament_profile": [ - "SecKit Generic PETG" + "Generic PETG @SecKit" ], "default_print_profile": "0.20mm Standard @SecKit", "bed_exclude_area": [ diff --git a/resources/profiles/SecKit/machine/fdm_machine_common.json b/resources/profiles/SecKit/machine/fdm_machine_common.json index 010f5b7f8d..555c649235 100644 --- a/resources/profiles/SecKit/machine/fdm_machine_common.json +++ b/resources/profiles/SecKit/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "8000" ], diff --git a/resources/profiles/SecKit/process/fdm_process_common.json b/resources/profiles/SecKit/process/fdm_process_common.json index dc8cfe5838..11a4dc616e 100644 --- a/resources/profiles/SecKit/process/fdm_process_common.json +++ b/resources/profiles/SecKit/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/SecKit/process/fdm_process_seckit_common.json b/resources/profiles/SecKit/process/fdm_process_seckit_common.json index d5aca251f3..f29305479e 100644 --- a/resources/profiles/SecKit/process/fdm_process_seckit_common.json +++ b/resources/profiles/SecKit/process/fdm_process_seckit_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/SeeMeCNC.json b/resources/profiles/SeeMeCNC.json index e3674f8709..21db5e4e3e 100644 --- a/resources/profiles/SeeMeCNC.json +++ b/resources/profiles/SeeMeCNC.json @@ -1,6 +1,6 @@ { "name": "SeeMeCNC", - "version": "2.4.0.02", + "version": "2.4.0.05", "force_update": "1", "description": "SeeMeCNC configurations - Full profile set for Artemis, BOSSdelta, and RostockMAX printers", "machine_model_list": [ @@ -50,10 +50,6 @@ "name": "SeeMeCNC process base 1.0mm", "sub_path": "process/SeeMeCNC_process_base_1.0mm.json" }, - { - "name": "SeeMeCNC process base", - "sub_path": "process/SeeMeCNC_process_base.json" - }, { "name": "0.16mm Fine @SeeMeCNC Artemis 0.4", "sub_path": "process/0.16mm Fine @SeeMeCNC Artemis 0.4.json" @@ -86,34 +82,6 @@ "name": "0.20mm Draft @SeeMeCNC RostockMAX v3.2 0.4", "sub_path": "process/0.20mm Draft @SeeMeCNC RostockMAX v3.2 0.4.json" }, - { - "name": "0.20mm Fine @SeeMeCNC Artemis 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC Artemis 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5.json" - }, - { - "name": "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v4 0.5.json" - }, { "name": "0.20mm Standard @SeeMeCNC Artemis 0.4", "sub_path": "process/0.20mm Standard @SeeMeCNC Artemis 0.4.json" @@ -170,34 +138,6 @@ "name": "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", "sub_path": "process/0.24mm Draft @SeeMeCNC RostockMAX v4 0.4.json" }, - { - "name": "0.25mm Standard @SeeMeCNC Artemis 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC Artemis 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5.json" - }, - { - "name": "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v4 0.5.json" - }, { "name": "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", "sub_path": "process/0.28mm Extra Draft @SeeMeCNC Artemis 0.4.json" @@ -227,32 +167,60 @@ "sub_path": "process/0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4.json" }, { - "name": "0.28mm Fine @SeeMeCNC Artemis 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC Artemis 0.7.json" + "name": "0.20mm Fine @SeeMeCNC Artemis 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC Artemis 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7.json" + "name": "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7.json" + "name": "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5.json" }, { - "name": "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v4 0.7.json" + "name": "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", + "sub_path": "process/0.20mm Fine @SeeMeCNC RostockMAX v4 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC Artemis 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC Artemis 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5.json" + }, + { + "name": "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", + "sub_path": "process/0.25mm Standard @SeeMeCNC RostockMAX v4 0.5.json" }, { "name": "0.30mm Draft @SeeMeCNC Artemis 0.5", @@ -282,34 +250,6 @@ "name": "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", "sub_path": "process/0.30mm Draft @SeeMeCNC RostockMAX v4 0.5.json" }, - { - "name": "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC Artemis 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7.json" - }, - { - "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", - "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7.json" - }, { "name": "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", "sub_path": "process/0.35mm Extra Draft @SeeMeCNC Artemis 0.5.json" @@ -338,6 +278,62 @@ "name": "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5", "sub_path": "process/0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5.json" }, + { + "name": "0.28mm Fine @SeeMeCNC Artemis 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC Artemis 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7.json" + }, + { + "name": "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", + "sub_path": "process/0.28mm Fine @SeeMeCNC RostockMAX v4 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC Artemis 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7.json" + }, + { + "name": "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", + "sub_path": "process/0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7.json" + }, { "name": "0.35mm Standard @SeeMeCNC Artemis 0.7", "sub_path": "process/0.35mm Standard @SeeMeCNC Artemis 0.7.json" @@ -394,34 +390,6 @@ "name": "0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7", "sub_path": "process/0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7.json" }, - { - "name": "0.40mm Fine @SeeMeCNC Artemis 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC Artemis 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0.json" - }, - { - "name": "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v4 1.0.json" - }, { "name": "0.42mm Draft @SeeMeCNC Artemis 0.7", "sub_path": "process/0.42mm Draft @SeeMeCNC Artemis 0.7.json" @@ -478,6 +446,34 @@ "name": "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7", "sub_path": "process/0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7.json" }, + { + "name": "0.40mm Fine @SeeMeCNC Artemis 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC Artemis 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0.json" + }, + { + "name": "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", + "sub_path": "process/0.40mm Fine @SeeMeCNC RostockMAX v4 1.0.json" + }, { "name": "0.50mm Standard @SeeMeCNC Artemis 1.0", "sub_path": "process/0.50mm Standard @SeeMeCNC Artemis 1.0.json" @@ -561,6 +557,10 @@ { "name": "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0", "sub_path": "process/0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0.json" + }, + { + "name": "SeeMeCNC process base", + "sub_path": "process/SeeMeCNC_process_base.json" } ], "filament_list": [ diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json index f00df71cfd..bad8b3a774 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "jvmDQqgLy8vboFHw", - "filament_id": "SMCFB001", + "filament_id": "OFR0gODA", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC ABS" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json deleted file mode 100644 index d5df31d0aa..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.4 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "FOSiDadyHyp8WKTb", - "filament_id": "SMCFB00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json deleted file mode 100644 index 6cdf1850d4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.5 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "XzvEoqhK0cx7JieM", - "filament_id": "SMCFB00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json deleted file mode 100644 index 8bdd0003fc..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 0.7 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "RbmLGSWPaVvl0NNr", - "filament_id": "SMCFB00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json deleted file mode 100644 index 0d060b85f3..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_ABS_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC ABS 1.0 nozzle", - "inherits": "SeeMeCNC ABS", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC ABS 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "DTcAxACOOtdvD43R", - "filament_id": "SMCFB00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json index 25b2f84b7a..690a870c69 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA-CF.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "xaySfHS4rdZcWsqA", - "filament_id": "SMCFN001", + "filament_id": "OF0b7M1z", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PA-CF" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json deleted file mode 100644 index fcde530598..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.4 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "jf0puhp8kCuwL3jt", - "filament_id": "SMCFN00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json deleted file mode 100644 index 0439f58952..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.5 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "c3gXbtFjJn4aK7pL", - "filament_id": "SMCFN00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json deleted file mode 100644 index d14e219656..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 0.7 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "7sDIfUAs3Ftv7uUD", - "filament_id": "SMCFN00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json deleted file mode 100644 index aa760ceef2..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PA_CF_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PA-CF 1.0 nozzle", - "inherits": "SeeMeCNC PA-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PA-CF 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "nr7CBE99WoHXy4Dw", - "filament_id": "SMCFN00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json index f9cc79bcfd..9792260d36 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG-CF.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "UDoa6miFYGnCLiHc", - "filament_id": "SMCFG002", + "filament_id": "OFaRjiIm", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PETG-CF" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json index a186501902..c58047fa8a 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "wf9uGLhJeqRDZVR7", - "filament_id": "SMCFG001", + "filament_id": "OFxDHUX8", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PETG" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json deleted file mode 100644 index bb37dfdbd4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.4 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "kqCiusj7FAzbmnro", - "filament_id": "SMCFG00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json deleted file mode 100644 index a0dab684b8..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.5 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "85J1rc8KxOc7v2cF", - "filament_id": "SMCFG00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json deleted file mode 100644 index 3285e22d73..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 0.7 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "QI1p2Hi76cWlfRwC", - "filament_id": "SMCFG00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json deleted file mode 100644 index ac5455210d..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG 1.0 nozzle", - "inherits": "SeeMeCNC PETG", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "7" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "Njx1ZHccqqJzQ7AQ", - "filament_id": "SMCFG00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json deleted file mode 100644 index 01ef0f3562..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.4 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "ulVlpkQVbvkSpmli", - "filament_id": "SMCFG00204" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json deleted file mode 100644 index 0b3d526c6b..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.5 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "jK9Gr2VDAnOKrkPW", - "filament_id": "SMCFG00205" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json deleted file mode 100644 index e2172b6707..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 0.7 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "Gn57oqh6nMBO651i", - "filament_id": "SMCFG00207" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json deleted file mode 100644 index 1fabd765d4..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PETG_CF_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PETG-CF 1.0 nozzle", - "inherits": "SeeMeCNC PETG-CF", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PETG-CF 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "40" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "nzRT23S6xk1bxbDJ", - "filament_id": "SMCFG00210" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json index 8e9cc3c8d3..9747b4caba 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA.json @@ -3,7 +3,7 @@ "name": "SeeMeCNC PLA", "from": "System", "setting_id": "hdn5fZars58kvjwQ", - "filament_id": "SMCFL001", + "filament_id": "OFbSChKb", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC PLA" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json deleted file mode 100644 index 9d216c2e7c..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_4mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.4 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.4 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.4 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.4 nozzle", - "SeeMeCNC BOSSdelta 300 0.4 nozzle", - "SeeMeCNC RostockMAX v3.2 0.4 nozzle", - "SeeMeCNC RostockMAX v4 0.4 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.16mm Fine @SeeMeCNC Artemis 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 300 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.16mm Fine @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v3.2 0.4", - "0.16mm Fine @SeeMeCNC RostockMAX v4 0.4", - "0.20mm Standard @SeeMeCNC Artemis 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 300 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.20mm Standard @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v3.2 0.4", - "0.20mm Standard @SeeMeCNC RostockMAX v4 0.4", - "0.24mm Draft @SeeMeCNC Artemis 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.24mm Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.24mm Draft @SeeMeCNC RostockMAX v4 0.4", - "0.28mm Extra Draft @SeeMeCNC Artemis 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 300 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.4", - "0.28mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.4", - "0.28mm Extra Draft @SeeMeCNC RostockMAX v4 0.4" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.2" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "k3oaCcJHHyAuRi6J", - "filament_id": "SMCFL00104" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json deleted file mode 100644 index 1f8a314c20..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_5mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.5 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.5 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.5 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.5 nozzle", - "SeeMeCNC BOSSdelta 300 0.5 nozzle", - "SeeMeCNC RostockMAX v3.2 0.5 nozzle", - "SeeMeCNC RostockMAX v4 0.5 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.20mm Fine @SeeMeCNC Artemis 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 300 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.20mm Fine @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v3.2 0.5", - "0.20mm Fine @SeeMeCNC RostockMAX v4 0.5", - "0.25mm Standard @SeeMeCNC Artemis 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 300 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.25mm Standard @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v3.2 0.5", - "0.25mm Standard @SeeMeCNC RostockMAX v4 0.5", - "0.30mm Draft @SeeMeCNC Artemis 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.30mm Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.30mm Draft @SeeMeCNC RostockMAX v4 0.5", - "0.35mm Extra Draft @SeeMeCNC Artemis 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 300 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.5", - "0.35mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.5", - "0.35mm Extra Draft @SeeMeCNC RostockMAX v4 0.5" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "5" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "CcINW4WttiNsKvjf", - "filament_id": "SMCFL00105" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json deleted file mode 100644 index ea51621992..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_0_7mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 0.7 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.28mm Fine @SeeMeCNC Artemis 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 300 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.28mm Fine @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v3.2 0.7", - "0.28mm Fine @SeeMeCNC RostockMAX v4 0.7", - "0.35mm Standard @SeeMeCNC Artemis 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm Standard @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm Standard @SeeMeCNC RostockMAX v4 0.7", - "0.42mm Draft @SeeMeCNC Artemis 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.42mm Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.42mm Draft @SeeMeCNC RostockMAX v4 0.7", - "0.49mm Extra Draft @SeeMeCNC Artemis 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 300 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.49mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v3.2 0.7", - "0.49mm Extra Draft @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.4" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "pOuc1eXMLLOBqHuz", - "filament_id": "SMCFL00107" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json deleted file mode 100644 index b720b87de2..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_PLA_1_0mm.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC PLA 1.0 nozzle", - "inherits": "SeeMeCNC PLA", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC PLA 1.0 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0505 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0510 1.0 nozzle", - "SeeMeCNC BOSSdelta 500 0521 1.0 nozzle", - "SeeMeCNC BOSSdelta 300 1.0 nozzle", - "SeeMeCNC RostockMAX v3.2 1.0 nozzle", - "SeeMeCNC RostockMAX v4 1.0 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.40mm Fine @SeeMeCNC Artemis 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 300 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.40mm Fine @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v3.2 1.0", - "0.40mm Fine @SeeMeCNC RostockMAX v4 1.0", - "0.50mm Standard @SeeMeCNC Artemis 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 300 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.50mm Standard @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v3.2 1.0", - "0.50mm Standard @SeeMeCNC RostockMAX v4 1.0", - "0.60mm Draft @SeeMeCNC Artemis 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.60mm Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.60mm Draft @SeeMeCNC RostockMAX v4 1.0", - "0.70mm Extra Draft @SeeMeCNC Artemis 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 300 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0505 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0510 1.0", - "0.70mm Extra Draft @SeeMeCNC BOSSdelta 500 0521 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v3.2 1.0", - "0.70mm Extra Draft @SeeMeCNC RostockMAX v4 1.0" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "6" - ], - "filament_z_hop": [ - "0.5" - ], - "filament_retraction_speed": [ - "45" - ], - "filament_deretraction_speed": [ - "35" - ], - "setting_id": "jSvqBk6R6HAaTRxk", - "filament_id": "SMCFL00110" -} diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json index 791da98e23..602470e962 100644 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json +++ b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU.json @@ -4,7 +4,7 @@ "inherits": "SeeMeCNC filament base", "from": "System", "setting_id": "vsEH0aZOKiLat0hH", - "filament_id": "SMCFU001", + "filament_id": "OFyFyLIp", "instantiation": "true", "filament_settings_id": [ "SeeMeCNC TPU" diff --git a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json b/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json deleted file mode 100644 index dea7bb7820..0000000000 --- a/resources/profiles/SeeMeCNC/filament/SeeMeCNC_TPU_0_7mm.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "SeeMeCNC TPU 0.7 nozzle", - "inherits": "SeeMeCNC TPU", - "from": "System", - "instantiation": "true", - "filament_settings_id": [ - "SeeMeCNC TPU 0.7 nozzle" - ], - "compatible_printers": [ - "SeeMeCNC Artemis 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0505 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0510 0.7 nozzle", - "SeeMeCNC BOSSdelta 500 0521 0.7 nozzle", - "SeeMeCNC BOSSdelta 300 0.7 nozzle", - "SeeMeCNC RostockMAX v3.2 0.7 nozzle", - "SeeMeCNC RostockMAX v4 0.7 nozzle" - ], - "compatible_printers_condition": "", - "compatible_prints": [ - "0.30mm TPU Solid @SeeMeCNC Artemis 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 300 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.30mm TPU Solid @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.30mm TPU Solid @SeeMeCNC RostockMAX v3.2 0.7", - "0.30mm TPU Solid @SeeMeCNC RostockMAX v4 0.7", - "0.35mm TPU Vase @SeeMeCNC Artemis 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 300 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0505 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0510 0.7", - "0.35mm TPU Vase @SeeMeCNC BOSSdelta 500 0521 0.7", - "0.35mm TPU Vase @SeeMeCNC RostockMAX v3.2 0.7", - "0.35mm TPU Vase @SeeMeCNC RostockMAX v4 0.7" - ], - "compatible_prints_condition": "", - "filament_retraction_length": [ - "7" - ], - "filament_z_hop": [ - "0.3" - ], - "filament_retraction_speed": [ - "30" - ], - "filament_deretraction_speed": [ - "30" - ], - "setting_id": "4LUkyKiKFb96OeC0", - "filament_id": "SMCFU00107" -} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_4mm.json index 4230dbffa0..23ccc8cd08 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC Artemis 300", "thumbnail": "SeeMeCNC Artemis 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_5mm.json index 4ed8e34f2a..f16bdf8620 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC Artemis 300", "thumbnail": "SeeMeCNC Artemis 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_7mm.json index 7e457fd6d4..7bf1733799 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC Artemis 300", "thumbnail": "SeeMeCNC Artemis 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_1_0mm.json index e6beab9437..68316ff085 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_Artemis_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC Artemis 300", "thumbnail": "SeeMeCNC Artemis 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_4mm.json index b3c0d66457..4709989e11 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0505", "thumbnail": "SeeMeCNC BOSSdelta 500 0505_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_5mm.json index 3171ed1d16..a09599a118 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0505", "thumbnail": "SeeMeCNC BOSSdelta 500 0505_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_7mm.json index 60aea06e56..a045d6acb6 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0505", "thumbnail": "SeeMeCNC BOSSdelta 500 0505_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_1_0mm.json index 52131a4df3..4fbdc6cdf0 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0505_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0505", "thumbnail": "SeeMeCNC BOSSdelta 500 0505_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_4mm.json index d9bbabfd46..1d40d2b7d8 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0510", "thumbnail": "SeeMeCNC BOSSdelta 500 0510_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_5mm.json index 48054cbc25..f007e2c307 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0510", "thumbnail": "SeeMeCNC BOSSdelta 500 0510_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_7mm.json index 60653bd138..ae455b50bc 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0510", "thumbnail": "SeeMeCNC BOSSdelta 500 0510_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_1_0mm.json index 29aab8351f..28a865c33e 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0510_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0510", "thumbnail": "SeeMeCNC BOSSdelta 500 0510_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_4mm.json index ca0c54be9b..6db1c32408 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0521", "thumbnail": "SeeMeCNC BOSSdelta 500 0521_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_5mm.json index e66ebbb170..0bba926946 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0521", "thumbnail": "SeeMeCNC BOSSdelta 500 0521_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_7mm.json index 33db8f630d..623edc7966 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0521", "thumbnail": "SeeMeCNC BOSSdelta 500 0521_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_1_0mm.json index 2b9d48d170..9f1b324a3b 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta500_0521_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 500 0521", "thumbnail": "SeeMeCNC BOSSdelta 500 0521_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_4mm.json index 765cbd623f..51ca348ee2 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 300", "thumbnail": "SeeMeCNC BOSSdelta 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_5mm.json index 20c6446d2e..78638f67ad 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 300", "thumbnail": "SeeMeCNC BOSSdelta 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_7mm.json index fc91f14b28..d3d58505ed 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 300", "thumbnail": "SeeMeCNC BOSSdelta 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_1_0mm.json index 01ab5d5a2a..c2ffdb20a0 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_BOSSdelta_300_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC BOSSdelta 300", "thumbnail": "SeeMeCNC BOSSdelta 300_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_4mm.json index 2b0a6a71ae..c53c7f7085 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v3.2", "thumbnail": "SeeMeCNC RostockMAX v3.2_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_5mm.json index b2ba2a38aa..3e8b24699f 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v3.2", "thumbnail": "SeeMeCNC RostockMAX v3.2_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_7mm.json index fae10fc27c..d1fd58da56 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v3.2", "thumbnail": "SeeMeCNC RostockMAX v3.2_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_1_0mm.json index f65c62f6fe..648c797d61 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v3.2_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v3.2", "thumbnail": "SeeMeCNC RostockMAX v3.2_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_4mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_4mm.json index 38c29c2462..39252fa29e 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_4mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_4mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v4", "thumbnail": "SeeMeCNC RostockMAX v4_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_5mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_5mm.json index f54bc1bcb6..f1dbfc5e2f 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_5mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_5mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v4", "thumbnail": "SeeMeCNC RostockMAX v4_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_7mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_7mm.json index 51cef23180..c7bce4faca 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_7mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_0_7mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v4", "thumbnail": "SeeMeCNC RostockMAX v4_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_1_0mm.json b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_1_0mm.json index 0342bbae65..f1ec174cf2 100644 --- a/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_1_0mm.json +++ b/resources/profiles/SeeMeCNC/machine/SeeMeCNC_RostockMAX_v4_1_0mm.json @@ -312,7 +312,6 @@ "60" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "1", "support_air_filtration": "1", "support_chamber_temp_control": "1", @@ -349,4 +348,4 @@ "model": "SeeMeCNC RostockMAX v4", "thumbnail": "SeeMeCNC RostockMAX v4_cover.png", "description": "SeeMeCNC configurations" -} \ No newline at end of file +} diff --git a/resources/profiles/Snapmaker.json b/resources/profiles/Snapmaker.json index 9a6fab7942..06acef0b0e 100644 --- a/resources/profiles/Snapmaker.json +++ b/resources/profiles/Snapmaker.json @@ -1,6 +1,6 @@ { "name": "Snapmaker", - "version": "02.04.00.09", + "version": "02.04.00.15", "force_update": "0", "description": "Snapmaker configurations", "machine_model_list": [ @@ -194,18 +194,42 @@ "name": "fdm_process_idex", "sub_path": "process/fdm_process_idex.json" }, + { + "name": "fdm_process_U1_0.06_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.08", "sub_path": "process/fdm_process_U1_0.08.json" }, + { + "name": "fdm_process_U1_0.08_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.10_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.12", "sub_path": "process/fdm_process_U1_0.12.json" }, + { + "name": "fdm_process_U1_0.12_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json" + }, + { + "name": "fdm_process_U1_0.14_nozzle_0.2", + "sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json" + }, { "name": "fdm_process_U1_0.16", "sub_path": "process/fdm_process_U1_0.16.json" }, + { + "name": "fdm_process_U1_0.18_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json" + }, { "name": "fdm_process_U1_0.20", "sub_path": "process/fdm_process_U1_0.20.json" @@ -214,14 +238,58 @@ "name": "fdm_process_U1_0.24", "sub_path": "process/fdm_process_U1_0.24.json" }, + { + "name": "fdm_process_U1_0.24_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.24_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json" + }, { "name": "fdm_process_U1_0.28", "sub_path": "process/fdm_process_U1_0.28.json" }, + { + "name": "fdm_process_U1_0.2_common", + "sub_path": "process/fdm_process_U1_0.2_common.json" + }, + { + "name": "fdm_process_U1_0.30_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.32_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.36_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.40_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.42_nozzle_0.6", + "sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json" + }, + { + "name": "fdm_process_U1_0.48_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json" + }, + { + "name": "fdm_process_U1_0.56_nozzle_0.8", + "sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json" + }, { "name": "fdm_process_U1_0.6_common", "sub_path": "process/fdm_process_U1_0.6_common.json" }, + { + "name": "fdm_process_U1_0.8_common", + "sub_path": "process/fdm_process_U1_0.8_common.json" + }, { "name": "0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker Artisan (0.4 nozzle).json" @@ -402,6 +470,14 @@ "name": "0.48 Draft @Snapmaker J1 (0.8 nozzle)", "sub_path": "process/0.48 Draft @Snapmaker J1 (0.8 nozzle).json" }, + { + "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.08 Extra Fine @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json" @@ -410,6 +486,22 @@ "name": "0.08 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.12 Fine @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json" @@ -418,6 +510,14 @@ "name": "0.12 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json" + }, + { + "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", + "sub_path": "process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json" + }, { "name": "0.16 High Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json" @@ -426,6 +526,10 @@ "name": "0.16 Optimal @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json" + }, { "name": "0.20 Quality @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json" @@ -454,10 +558,50 @@ "name": "0.24 Draft @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json" + }, { "name": "0.28 Extra Draft @Snapmaker U1 (0.4 nozzle)", "sub_path": "process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json" }, + { + "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", + "sub_path": "process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json" + }, + { + "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json" + }, + { + "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", + "sub_path": "process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json" + }, { "name": "0.20 Standard @Snapmaker U1 (0.6 nozzle)", "sub_path": "process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json" @@ -473,150 +617,6 @@ { "name": "0.06 Standard @Snapmaker Artisan (0.2 nozzle)", "sub_path": "process/0.06 Standard @Snapmaker Artisan (0.2 nozzle).json" - }, - { - "name": "fdm_process_U1_0.2_common", - "sub_path": "process/fdm_process_U1_0.2_common.json" - }, - { - "name": "fdm_process_U1_0.8_common", - "sub_path": "process/fdm_process_U1_0.8_common.json" - }, - { - "name": "fdm_process_U1_0.06_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.06_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.08_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.08_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.10_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.10_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.12_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.12_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.14_nozzle_0.2", - "sub_path": "process/fdm_process_U1_0.14_nozzle_0.2.json" - }, - { - "name": "fdm_process_U1_0.18_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.18_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.24_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.24_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.24_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.24_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.30_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.30_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.32_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.32_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.36_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.36_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.40_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.40_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.42_nozzle_0.6", - "sub_path": "process/fdm_process_U1_0.42_nozzle_0.6.json" - }, - { - "name": "fdm_process_U1_0.48_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.48_nozzle_0.8.json" - }, - { - "name": "fdm_process_U1_0.56_nozzle_0.8", - "sub_path": "process/fdm_process_U1_0.56_nozzle_0.8.json" - }, - { - "name": "0.06 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.06 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.08 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.08 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.10 High Quality @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.10 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.12 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.14 Standard @Snapmaker U1 (0.2 nozzle)", - "sub_path": "process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "0.18 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.24 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.30 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.30 Strength @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.36 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.42 Standard @Snapmaker U1 (0.6 nozzle)", - "sub_path": "process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json" - }, - { - "name": "0.24 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.32 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.40 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.48 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json" - }, - { - "name": "0.56 Standard @Snapmaker U1 (0.8 nozzle)", - "sub_path": "process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json" } ], "filament_list": [ @@ -624,14 +624,26 @@ "name": "PolyTerra PLA @0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra PLA @0.2 nozzle.json" }, + { + "name": "Snapmaker PLA Basic @U1 base", + "sub_path": "filament/Snapmaker PLA Basic @U1 base.json" + }, { "name": "Snapmaker PLA Lite @U1 base", "sub_path": "filament/Snapmaker PLA Lite @U1 base.json" }, + { + "name": "Snapmaker PLA Matte @U1 base2", + "sub_path": "filament/Snapmaker PLA Matte @U1 base2.json" + }, { "name": "Snapmaker PLA SnapSpeed @U1 base", "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base.json" }, + { + "name": "Snapmaker PLA SnapSpeed @U1 base2", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json" + }, { "name": "Snapmaker TPU 95A @U1 base", "sub_path": "filament/Snapmaker TPU 95A @U1 base.json" @@ -648,14 +660,62 @@ "name": "PolyTerra J1 PLA @0.2 nozzle", "sub_path": "filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json" }, + { + "name": "Snapmaker PLA Basic @U1", + "sub_path": "filament/Snapmaker PLA Basic @U1.json" + }, + { + "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1", + "sub_path": "filament/Snapmaker PLA Silk @U1.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Silk @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA Lite @U1", "sub_path": "filament/Snapmaker PLA Lite @U1.json" }, + { + "name": "Snapmaker PLA Matte @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Matte @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA SnapSpeed @U1", "sub_path": "filament/Snapmaker PLA SnapSpeed @U1.json" }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json" + }, { "name": "Snapmaker TPU 95A @U1", "sub_path": "filament/Snapmaker TPU 95A @U1.json" @@ -840,6 +900,14 @@ "name": "Snapmaker PETG @base", "sub_path": "filament/Snapmaker PETG @base.json" }, + { + "name": "Snapmaker PETG HF @U1 base2", + "sub_path": "filament/Snapmaker PETG HF @U1 base2.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 base", + "sub_path": "filament/Snapmaker PETG Translucent @U1 base.json" + }, { "name": "Snapmaker PETG-CF @U1 base", "sub_path": "filament/Snapmaker PETG-CF @U1 base.json" @@ -988,6 +1056,10 @@ "name": "Polymaker PLA @Snapmaker U1 base", "sub_path": "filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json" }, + { + "name": "Polymaker PLA @U1 base", + "sub_path": "filament/Polymaker PLA @U1 base.json" + }, { "name": "Polymaker PLA Pro @Base", "sub_path": "filament/Polymaker/Polymaker PLA Pro @Base.json" @@ -1048,6 +1120,10 @@ "name": "Snapmaker PLA @base", "sub_path": "filament/Snapmaker PLA @base.json" }, + { + "name": "Snapmaker PLA Glow @U1 base", + "sub_path": "filament/Snapmaker PLA Glow @U1 base.json" + }, { "name": "Snapmaker PLA Metal @U1 base", "sub_path": "filament/Snapmaker PLA Metal @U1 base.json" @@ -1060,6 +1136,34 @@ "name": "Snapmaker PLA Silk @base", "sub_path": "filament/Snapmaker PLA Silk @base.json" }, + { + "name": "Snapmaker PLA Translucent @U1 base", + "sub_path": "filament/Snapmaker PLA Translucent @U1 base.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Wood @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA-CF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PLA-CF @U1 base", "sub_path": "filament/Snapmaker PLA-CF @U1 base.json" @@ -1096,6 +1200,30 @@ "name": "Snapmaker J1 TPU @base", "sub_path": "filament/Snapmaker J1 TPU @base.json" }, + { + "name": "Snapmaker TPU 90A @U1", + "sub_path": "filament/Snapmaker TPU 90A @U1.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 90A @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1", + "sub_path": "filament/Snapmaker TPU 95A HF @U1.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json" + }, { "name": "Snapmaker TPU @U1 base", "sub_path": "filament/Snapmaker TPU @U1 base.json" @@ -1316,6 +1444,34 @@ "name": "Snapmaker PETG @0.2 nozzle", "sub_path": "filament/Snapmaker PETG @0.2 nozzle.json" }, + { + "name": "Snapmaker PETG HF @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG HF @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PETG-CF @U1", "sub_path": "filament/Snapmaker PETG-CF @U1.json" @@ -1460,6 +1616,18 @@ "name": "Polymaker PLA @Snapmaker U1", "sub_path": "filament/Polymaker/Polymaker PLA @Snapmaker U1.json" }, + { + "name": "Polymaker General PLA Family @U1", + "sub_path": "filament/Polymaker General PLA Family @U1.json" + }, + { + "name": "Polymaker Silk PLA Family @U1", + "sub_path": "filament/Polymaker Silk PLA Family @U1.json" + }, + { + "name": "Polymaker Tough PLA Family @U1", + "sub_path": "filament/Polymaker Tough PLA Family @U1.json" + }, { "name": "Polymaker PLA Pro @Snapmaker U1", "sub_path": "filament/Polymaker/Polymaker PLA Pro @Snapmaker U1.json" @@ -1560,6 +1728,10 @@ "name": "Snapmaker PLA", "sub_path": "filament/Snapmaker PLA.json" }, + { + "name": "Snapmaker PLA Glow @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json" + }, { "name": "Snapmaker PLA Metal @U1", "sub_path": "filament/Snapmaker PLA Metal @U1.json" @@ -1573,8 +1745,20 @@ "sub_path": "filament/Snapmaker PLA Silk @0.2 nozzle.json" }, { - "name": "Snapmaker PLA-CF @U1", - "sub_path": "filament/Snapmaker PLA-CF @U1.json" + "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json" }, { "name": "Snapmaker PLA-CF", @@ -1616,6 +1800,14 @@ "name": "Snapmaker PVA @U1", "sub_path": "filament/Snapmaker PVA @U1.json" }, + { + "name": "Snapmaker PVA @U1 0.6 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json" + }, + { + "name": "Snapmaker PVA @U1 0.8 nozzle", + "sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json" + }, { "name": "Snapmaker PVA", "sub_path": "filament/Snapmaker PVA.json" @@ -1716,26 +1908,6 @@ "name": "Snapmaker Breakaway Support For PLA @U1", "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1.json" }, - { - "name": "PolyTerra J1 PLA", - "sub_path": "filament/Polymaker/PolyTerra J1 PLA.json" - }, - { - "name": "Snapmaker PLA Matte @U1 base", - "sub_path": "filament/Snapmaker PLA Matte @U1 base.json" - }, - { - "name": "Polymaker PLA @U1 base", - "sub_path": "filament/Polymaker PLA @U1 base.json" - }, - { - "name": "Polymaker Silk PLA Family @U1", - "sub_path": "filament/Polymaker Silk PLA Family @U1.json" - }, - { - "name": "Polymaker Tough PLA Family @U1", - "sub_path": "filament/Polymaker Tough PLA Family @U1.json" - }, { "name": "Snapmaker Breakaway Support For PLA @U1 0.2 nozzle", "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json" @@ -1749,188 +1921,12 @@ "sub_path": "filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json" }, { - "name": "Snapmaker PETG HF @U1 base2", - "sub_path": "filament/Snapmaker PETG HF @U1 base2.json" + "name": "PolyTerra J1 PLA", + "sub_path": "filament/Polymaker/PolyTerra J1 PLA.json" }, { - "name": "Snapmaker PETG Translucent @U1 base", - "sub_path": "filament/Snapmaker PETG Translucent @U1 base.json" - }, - { - "name": "Snapmaker PLA Basic @U1 base", - "sub_path": "filament/Snapmaker PLA Basic @U1 base.json" - }, - { - "name": "Snapmaker PLA Full Spectrum @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Glow @U1 base", - "sub_path": "filament/Snapmaker PLA Glow @U1 base.json" - }, - { - "name": "Snapmaker PLA Matte @U1 base2", - "sub_path": "filament/Snapmaker PLA Matte @U1 base2.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Silk @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 base2", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 base2.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 base", - "sub_path": "filament/Snapmaker PLA Translucent @U1 base.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Wood @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Wood @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA-CF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA-CF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PVA @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PVA @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PVA @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PVA @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker TPU 90A @U1", - "sub_path": "filament/Snapmaker TPU 90A @U1.json" - }, - { - "name": "Snapmaker TPU 90A @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker TPU 90A @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker TPU 90A @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker TPU 90A @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1", - "sub_path": "filament/Snapmaker TPU 95A HF @U1.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker TPU 95A HF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Silk @U1", - "sub_path": "filament/Snapmaker PLA Silk @U1.json" - }, - { - "name": "Polymaker General PLA Family @U1", - "sub_path": "filament/Polymaker General PLA Family @U1.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PETG HF @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PETG HF @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PETG Translucent @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PETG Translucent @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Basic @U1", - "sub_path": "filament/Snapmaker PLA Basic @U1.json" - }, - { - "name": "Snapmaker PLA Glow @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Glow @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Matte @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Matte @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA SnapSpeed @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA SnapSpeed @U1 0.8 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.2 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.2 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.4 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.4 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.6 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.6 nozzle.json" - }, - { - "name": "Snapmaker PLA Translucent @U1 0.8 nozzle", - "sub_path": "filament/Snapmaker PLA Translucent @U1 0.8 nozzle.json" + "name": "Snapmaker PLA Matte @U1 base", + "sub_path": "filament/Snapmaker PLA Matte @U1 base.json" } ], "machine_list": [ @@ -2054,6 +2050,10 @@ "name": "fdm_a400", "sub_path": "machine/fdm_a400.json" }, + { + "name": "Snapmaker U1 (0.2 nozzle)", + "sub_path": "machine/Snapmaker U1 (0.2 nozzle).json" + }, { "name": "Snapmaker U1 (0.4 nozzle)", "sub_path": "machine/Snapmaker U1 (0.4 nozzle).json" @@ -2066,6 +2066,10 @@ "name": "Snapmaker U1 (0.6 nozzle)", "sub_path": "machine/Snapmaker U1 (0.6 nozzle).json" }, + { + "name": "Snapmaker U1 (0.8 nozzle)", + "sub_path": "machine/Snapmaker U1 (0.8 nozzle).json" + }, { "name": "Snapmaker A250 BKit (0.2 nozzle)", "sub_path": "machine/Snapmaker A250 BKit (0.2 nozzle).json" @@ -2329,14 +2333,6 @@ { "name": "Snapmaker A350 Dual QS+B Kit (0.8 nozzle)", "sub_path": "machine/Snapmaker A350 Dual QS+B Kit (0.8 nozzle).json" - }, - { - "name": "Snapmaker U1 (0.2 nozzle)", - "sub_path": "machine/Snapmaker U1 (0.2 nozzle).json" - }, - { - "name": "Snapmaker U1 (0.8 nozzle)", - "sub_path": "machine/Snapmaker U1 (0.8 nozzle).json" } ] } diff --git a/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json index c706ba776d..0e743d7aee 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker General PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "thXfSaUkOAKJ50ey", + "filament_id": "OF44ERDr", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json index b27c48f720..ae420e8912 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker PLA @U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "OGFL99", + "filament_id": "OFelDBgv", "instantiation": "false", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" @@ -48,7 +48,7 @@ "nil" ], "filament_vendor": [ - "Generic" + "Polymaker" ], "filament_scarf_seam_type": [ "none" diff --git a/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json index b6bd119022..990cc483f3 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker Silk PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "h8vIYpXbxFtHPV6e", + "filament_id": "OFH57ibH", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json index e5c2c7d7f6..1dad000fb2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json +++ b/resources/profiles/Snapmaker/filament/Polymaker Tough PLA Family @U1.json @@ -4,6 +4,7 @@ "inherits": "Polymaker PLA @U1 base", "from": "system", "setting_id": "d6CC81Es2hp46bto", + "filament_id": "OFgdaBOt", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json index dfbff7e8fb..86648d6096 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon ASA-CF08 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon ASA-CF08 @Snapmaker U1 base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "GFL71", + "filament_id": "OF0omtEb", "instantiation": "false", "additional_cooling_fan_speed": [ "0" @@ -15,13 +15,13 @@ "1" ], "cool_plate_temp": [ - "105" + "100" ], "cool_plate_temp_initial_layer": [ - "105" + "100" ], "eng_plate_temp": [ - "105" + "100" ], "eng_plate_temp_initial_layer": [ "100" @@ -48,7 +48,7 @@ "Polymaker" ], "hot_plate_temp": [ - "105" + "100" ], "hot_plate_temp_initial_layer": [ "100" @@ -72,7 +72,7 @@ "110.8" ], "textured_plate_temp": [ - "105" + "100" ], "textured_plate_temp_initial_layer": [ "100" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json index b292f8dd62..1496095361 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA12-CF10 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA12-CF10 @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL56", + "filament_id": "OFvxIS9g", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json index 88aab14bbf..d548075235 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA6-CF20 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA6-CF20 @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL57", + "filament_id": "OFEabreg", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json index f14d1abc1f..8aba062d0f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PA612-ESD @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PA612-ESD @Snapmaker U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "GFL72", + "filament_id": "OFFZ458u", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json index 75e03cc52a..9245ada222 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PETG-ESD @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PETG-ESD @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL06", + "filament_id": "OFcytyoA", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json index 271ee8bb5d..ee28c2b059 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Fiberon PPS-GF20 @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Fiberon PPS-GF20 @Snapmaker U1 base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "GFL73", + "filament_id": "OFeVzkSU", "instantiation": "false", "additional_cooling_fan_speed": [ "0" @@ -15,16 +15,16 @@ "1" ], "cool_plate_temp": [ - "105" + "100" ], "cool_plate_temp_initial_layer": [ - "105" + "100" ], "eng_plate_temp": [ - "105" + "100" ], "eng_plate_temp_initial_layer": [ - "105" + "100" ], "fan_cooling_layer_time": [ "12" @@ -51,10 +51,10 @@ "Polymaker" ], "hot_plate_temp": [ - "105" + "100" ], "hot_plate_temp_initial_layer": [ - "105" + "100" ], "nozzle_temperature": [ "300" @@ -81,10 +81,10 @@ "110" ], "textured_plate_temp": [ - "105" + "100" ], "textured_plate_temp_initial_layer": [ - "105" + "100" ], "filament_type": [ "ABS" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json index 85f728d3f3..ab0658f139 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma CoPE @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma CoPE @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM016", + "filament_id": "OFqw2PQA", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json index 2695cbee54..7c23e24034 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM001", + "filament_id": "OFsRDvTM", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json index 5b4b8725c2..2becd66703 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Celestial @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Celestial @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM008", + "filament_id": "OFRiYgMK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json index 6b14e2b663..932dcd38c6 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM007", + "filament_id": "OFFkCLBl", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json index 9e9936c4a4..c45de639c7 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Glow @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Glow @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM010", + "filament_id": "OF0gGRWk", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json index 0e996eb298..80a1604ed2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Luminous @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Luminous @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM011", + "filament_id": "OF0kCNDK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json index 83ae20eb10..c052908999 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Marble @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Marble @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM003", + "filament_id": "OFKiSMWR", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json index 6d178bca81..a4ae1b1114 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Matte @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Matte @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM002", + "filament_id": "OFrOh600", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json index 28b2984832..d1b0a54bcd 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM012", + "filament_id": "OFjb0wos", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json index eedf3117a8..57a0598ca8 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Neon @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Neon @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM013", + "filament_id": "OFO1GEq6", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json index df011d8dd3..5a6f2849ae 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Satin @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Satin @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM005", + "filament_id": "OFPkCJKE", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json index daa8a6ffca..53d1ba2886 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Silk @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Silk @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM004", + "filament_id": "OFS8lTQt", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json index c2841b4572..396f287684 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Starlight @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Starlight @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM009", + "filament_id": "OFC78WGQ", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json index f0ccd46a65..6a16bf9994 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Temp Shift @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Temp Shift @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM015", + "filament_id": "OFhASRWj", "instantiation": "false", "filament_cost": [ "29.99" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json index 81d275cfaf..ff8c158df4 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA Translucent @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM006", + "filament_id": "OFCIUsWh", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json index 7ac70319b2..3240927af2 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Panchroma PLA UV Shift @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Panchroma PLA UV Shift @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM014", + "filament_id": "OF1N1qMK", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json index 228df29a92..046a702928 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite CosPLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite CosPLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL62", + "filament_id": "OFJgijky", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json index f4703d6c40..44125a8381 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite Dual PLA @0.2 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyLite Dual PLA @0.2 nozzle", "inherits": "PolyLite PLA @0.2 nozzle", + "filament_id": "OFYGbPHX", "from": "system", "setting_id": "jhmy4YHi9MuL0DWu", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json index e1ce855c61..8e4075ccf7 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA @0.2 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyLite J1 PLA @0.2 nozzle", "inherits": "PolyLite PLA @0.2 nozzle", + "filament_id": "OF7SliVn", "from": "system", "setting_id": "jFlRSxx0KvN3BOUu", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json index 55d39a0832..0bbce7eec8 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite J1 PLA.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyLite J1 PLA", "inherits": "PolyLite PLA @base", + "filament_id": "OF7SliVn", "from": "system", "setting_id": "wcpOTTMyZNPFKyXr", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json index e8fdd834fe..834f7df457 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFG60", + "filament_id": "OF0UJcb6", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json index 607649e569..a388fc42b5 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PETG Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PETG Translucent @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL74", + "filament_id": "OF0VpkBM", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json index 8f3b508aec..fccff88c67 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL00", + "filament_id": "OF5CgdDq", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json index 3a4621b838..8c5b17a0fc 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA @base.json @@ -3,8 +3,11 @@ "name": "PolyLite PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1393866034", + "filament_id": "OF5CgdDq", "instantiation": "false", + "filament_vendor": [ + "Polymaker" + ], "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json index fc925c8faa..40cb531494 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL63", + "filament_id": "OFvyB0Bz", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json index cc74173c06..f3e2e4ead4 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Glow @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Glow @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL64", + "filament_id": "OF5umxxT", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json index a472e0bec0..20cb3f7ec5 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Luminous @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Luminous @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL65", + "filament_id": "OFBoSWxb", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json index 5638bec3ff..2b062379bb 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Neon @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Neon @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL66", + "filament_id": "OFitS8al", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json index c32655ff83..18a295de81 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM019", + "filament_id": "OFF9OKoY", "instantiation": "false", "filament_cost": [ "24.99" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json index 898460830f..20057a31e0 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Pro Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Pro Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL75", + "filament_id": "OFnXwW8l", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json index 17e4d2816a..393a597ea8 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Starlight @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Starlight @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL67", + "filament_id": "OFIxOuOu", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json index 29341f1c59..5931ddef7d 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyLite PLA Translucent @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyLite PLA Translucent @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL68", + "filament_id": "OFy02QHU", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json index 3f8cbc7674..1f28bcfac6 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra Dual PLA @0.2 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyTerra Dual PLA @0.2 nozzle", "inherits": "PolyTerra PLA @0.2 nozzle", + "filament_id": "OFCccVrQ", "from": "system", "setting_id": "UQYgjH1uVxf3d2Nv", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json index 9cb7060139..6e424a84d3 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA @0.2 nozzle.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyTerra J1 PLA @0.2 nozzle", "inherits": "PolyTerra PLA @0.2 nozzle", + "filament_id": "OF43Raws", "from": "system", "setting_id": "mxKHxGmBZzPLS82O", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json index 2583b2a2c3..55fb74f4f7 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra J1 PLA.json @@ -2,6 +2,7 @@ "type": "filament", "name": "PolyTerra J1 PLA", "inherits": "PolyTerra PLA @base", + "filament_id": "OF43Raws", "from": "system", "setting_id": "4MZWZX7QPBzxdEGj", "instantiation": "true", diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json index 533e781485..82b4b9b839 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL01", + "filament_id": "OFW29a9R", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json index 141740a499..12242cc1e9 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA Marble @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA Marble @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL69", + "filament_id": "OFxe4rXr", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json index 19bec7d25b..a2f5602139 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/PolyTerra PLA+ @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "PolyTerra PLA+ @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL70", + "filament_id": "OFEjbwqG", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json index b447be1455..eab6df9c97 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM017", + "filament_id": "OFPoyiFs", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json index a98cb9b670..8b59bc45e9 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker HT-PLA-GF @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker HT-PLA-GF @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFPM018", + "filament_id": "OFlwmqrC", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json index 2209516118..6feec9c407 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PETG @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL76", + "filament_id": "OF6H51Xx", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json index 5e32b79620..ac2509715a 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PETG Galaxy @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PETG Galaxy @Snapmaker U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFL77", + "filament_id": "OFtFtiS0", "instantiation": "false", "bed_type": [ "Cool Plate" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json index ebd4e5b11a..f072f2eb6f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL78", + "filament_id": "OFelDBgv", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json index a15908f18e..5e0f051c25 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA Pro @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL79", + "filament_id": "OF5oXk4M", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json index 9e2fc3f4e5..bfd8a59e3f 100644 --- a/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json +++ b/resources/profiles/Snapmaker/filament/Polymaker/Polymaker PLA Pro Metallic @Snapmaker U1 base.json @@ -3,7 +3,7 @@ "name": "Polymaker PLA Pro Metallic @Snapmaker U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "GFL80", + "filament_id": "OFHknN4v", "instantiation": "false", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json index f2144b7dc4..af8c929c82 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @U1 base.json @@ -3,16 +3,16 @@ "name": "Snapmaker ABS @U1 base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "1682237920", + "filament_id": "OF72YYTd", "instantiation": "false", "filament_end_gcode": [ "" ], "hot_plate_temp": [ - "110" + "100" ], "hot_plate_temp_initial_layer": [ - "105" + "100" ], "overhang_fan_speed": [ "20" @@ -35,12 +35,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json index 6de41e6bcb..1051af1626 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "3811508002", + "filament_id": "OF72YYTd", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json index db8dea187b..1ba6c22c9a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ABS Benchy @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker ABS @U1 base", "from": "system", "setting_id": "xszx4XRGrp88OdP8", + "filament_id": "OFJrvXth", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json index 012b5c4530..409bbdd793 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @U1 base.json @@ -3,13 +3,13 @@ "name": "Snapmaker ASA @U1 base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "12471727060", + "filament_id": "OF1d7c3A", "instantiation": "false", "filament_end_gcode": [ "" ], "hot_plate_temp": [ - "110" + "100" ], "hot_plate_temp_initial_layer": [ "100" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json index 667836fe3d..4cc6b0db02 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker ASA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "2742961008", + "filament_id": "OF1d7c3A", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json index db331b0daa..19dc66df4e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.2 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "mJoaud6wulT4p8SA", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json index 248c57f6d0..6f800f7b98 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.6 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "rKUUREJNhstIU0I2", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json index 47cf80d076..c7a2b01351 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1 0.8 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "hQ8jQ5GKQKGKuPew", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json index 9e5d63a63c..eff74ae5ab 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Breakaway Support For PLA @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Breakaway Support @base", "from": "system", "setting_id": "5DqT3CYUgp1oJD1V", + "filament_id": "OFnmp2pO", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json index f421f08c94..21638631aa 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @0.2 nozzle.json @@ -43,12 +43,6 @@ "filament_unloading_speed": [ "25" ], - "filament_load_time": [ - "0" - ], - "filament_unload_time": [ - "0" - ], "filament_cooling_moves": [ "0" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json index 3f61d2b12e..478a0195bd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "168223792", + "filament_id": "OFJhT2fd", "instantiation": "false", "hot_plate_temp": [ "110" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json index e42e9efc4a..6554a924f6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ABS Benchy.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual ABS @base", "from": "system", "setting_id": "YMUFsOzEISsMqCLe", + "filament_id": "OFeAxvEt", "instantiation": "true", "compatible_printers": [ "Snapmaker Artisan (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json index 5f1f1bd74f..4344959e27 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @0.2 nozzle.json @@ -40,12 +40,6 @@ "filament_unloading_speed": [ "25" ], - "filament_load_time": [ - "0" - ], - "filament_unload_time": [ - "0" - ], "filament_cooling_moves": [ "0" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json index ba18223e4a..fe567e1744 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual ASA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "1247172706", + "filament_id": "OFKUEXPA", "instantiation": "false", "hot_plate_temp": [ "110" @@ -29,12 +29,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json index ef59734df1..46644cc06a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual Breakaway @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual Breakaway @base", "inherits": "fdm_filament_breakaway", "from": "system", - "filament_id": "1207881278", + "filament_id": "OFfmHUkQ", "instantiation": "false", "filament_loading_speed_start": [ "35" @@ -17,12 +17,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json index eedf48c86d..de2e0c9765 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "3493177425", + "filament_id": "OFRooa0F", "instantiation": "false", "hot_plate_temp": [ "100" @@ -29,12 +29,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json index f222b257bb..4a93202495 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PET @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "2128577941", + "filament_id": "OFUIfGoh", "instantiation": "false", "overhang_fan_speed": [ "40" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json index 55a188dfb7..12b546ebb1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "2209001062", + "filament_id": "OFBlFMVp", "instantiation": "false", "overhang_fan_speed": [ "25" @@ -29,12 +29,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json index 37c2b65a6e..8e9a3b5f12 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1042511226", + "filament_id": "OF3msXEa", "instantiation": "false", "required_nozzle_HRC": [ "40" @@ -44,12 +44,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json index 20b215ab7c..dff0922c5c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1417031127", + "filament_id": "OFZivHGL", "instantiation": "false", "filament_retraction_length": [ "nil" @@ -20,12 +20,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json index 68fa882ada..86540058c8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Eco @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "200803790", + "filament_id": "OFyPG8v2", "instantiation": "false", "filament_density": [ "1.26" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json index 1010df744a..9daad839c2 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3503790988", + "filament_id": "OFlIsW6f", "instantiation": "false", "filament_density": [ "1.32" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json index d90435974a..3cb49e16e7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "2029994346", + "filament_id": "OFg3cWVt", "instantiation": "false", "filament_cost": [ "90" @@ -26,12 +26,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json index ded13a34e3..1272b220a1 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1181363872", + "filament_id": "OFyj3m13", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json index 8d6ca390a9..768a85d0db 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1702147325", + "filament_id": "OF6ATsCF", "instantiation": "false", "required_nozzle_HRC": [ "40" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json index eda6fbf638..2fd81db581 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual PVA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "3104636980", + "filament_id": "OFDKIKyw", "instantiation": "false", "filament_loading_speed_start": [ "35" @@ -17,12 +17,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json index f29f3f2189..a8d87836b0 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "KoZqZ4l1tYZ99JYz", + "filament_id": "OFTs8peJ", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json index 3c106e21aa..327f146f45 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker Dual TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "2971656290", + "filament_id": "OFjkdnyN", "instantiation": "false", "filament_loading_speed_start": [ "35" @@ -17,12 +17,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json index 7db3a84d21..04490520d3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker Dual TPU High-Flow.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual TPU @base", "from": "system", "setting_id": "D1vA7cdI5kghtrxf", + "filament_id": "OFcBJQcC", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json index 91afed2dab..bf1229454c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 ABS @base", "inherits": "fdm_filament_abs", "from": "system", - "filament_id": "1223824394", + "filament_id": "OFy14TRA", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json index 4b3dcc5e2f..83a7666218 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ABS Benchy.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 ABS @base", "from": "system", "setting_id": "b1Z94AhG8viXuDsq", + "filament_id": "OF8dCquh", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)" @@ -53,12 +54,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json index 0ac62b83b6..b72c5795f8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 ASA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 ASA @base", "inherits": "fdm_filament_asa", "from": "system", - "filament_id": "144877656", + "filament_id": "OFt7SngH", "instantiation": "false", "hot_plate_temp": [ "110" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json index d0b9afe2ce..5acb7bd524 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 Breakaway @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker J1 Breakaway @base", "inherits": "fdm_filament_breakaway", "from": "system", - "filament_id": "3492897526", + "filament_id": "OFeTATC7", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json index 714a0f1190..4e923b2f76 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "1210173120", + "filament_id": "OFYEtXuk", "instantiation": "false", "overhang_fan_speed": [ "55" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json index 7b2787695b..d3688cbdf7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PET @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "1009481135", + "filament_id": "OF8Jl6NT", "instantiation": "false", "overhang_fan_speed": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json index 560a29961d..327ac4d103 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1172603684", + "filament_id": "OFQMTRc8", "instantiation": "false", "overhang_fan_speed": [ "35" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json index cc323fa5b9..b3161b9c9d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "4235401834", + "filament_id": "OFxYB4Sw", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json index 00ffe9de38..f845a62a77 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "377675245", + "filament_id": "OFSa39yP", "instantiation": "false", "filament_retraction_length": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json index 61bafb8477..84e330f35d 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Eco @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "3383257822", + "filament_id": "OFLbdkrE", "instantiation": "false", "filament_density": [ "1.26" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json index 8cefd42ce1..7fcb2d8633 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Matte @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Matte @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1192769348", + "filament_id": "OFY3AB7j", "instantiation": "false", "filament_density": [ "1.32" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json index 49d3a3a416..3fe36e7155 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Metal @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Metal @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "4012961186", + "filament_id": "OFt0JbR7", "instantiation": "false", "filament_cost": [ "90" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json index 174982b184..331030d8dd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1528786603", + "filament_id": "OFQ1KzO8", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json index 2dd3de3d58..07158641d8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3806593857", + "filament_id": "OFdD5Wbu", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json index a02dac10a5..05f057f0ca 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 PVA @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "4227461134", + "filament_id": "OF6TuVAg", "instantiation": "false", "slow_down_layer_time": [ "8" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json index b3c6a49434..327ba6e6da 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "6N7VB3mKAShGVYL3", + "filament_id": "OFV5Q7j2", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json index 315a18e3b4..aec03dd322 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker J1 TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "4092268632", + "filament_id": "OFyrnlUn", "instantiation": "false", "nozzle_temperature_initial_layer": [ "240" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json index 4186cea511..66e5c331ae 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker J1 TPU High-Flow.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker J1 TPU @base", "from": "system", "setting_id": "wdN8j0Zv2bJ29XHA", + "filament_id": "OFlBoEfL", "instantiation": "true", "compatible_printers": [ "Snapmaker J1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json index 66874b0b2d..b402e7f76a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PA-CF @U1 base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "34931774250", + "filament_id": "OFEmsric", "instantiation": "false", "filament_end_gcode": [ "" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json index 402b5785dd..b2dc562d3b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @U1.json @@ -6,8 +6,6 @@ "setting_id": "8aP6ye4aeOS7qKpG", "instantiation": "true", "compatible_printers": [ - "Snapmaker U1 (0.4 nozzle)", - "Snapmaker U1 (0.4 nozzle)", "Snapmaker U1 (0.4 nozzle)" ] } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json index c4c8117679..6918bcb746 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PA-CF @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PA-CF @base", "inherits": "fdm_filament_pa", "from": "system", - "filament_id": "581236806", + "filament_id": "OFEmsric", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json index 4bf208ea44..364cb2a9aa 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @Dual.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker Dual PET @base", "from": "system", "setting_id": "3xJOWlbt2feyRKTV", + "filament_id": "OFQYaiGg", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 Dual (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json index 6edd0ee2fa..0741102696 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PET @U1 base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "21285779410", + "filament_id": "OFQYaiGg", "instantiation": "false", "filament_end_gcode": [ "" @@ -26,12 +26,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json index 9038a8cb4c..f6a9db6835 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PET @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PET @base", "inherits": "fdm_filament_pet", "from": "system", - "filament_id": "2549587591", + "filament_id": "OFQYaiGg", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json index 5f048f2574..d081c6f9d8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "22090010620", + "filament_id": "OF4WB37S", "instantiation": "false", "filament_end_gcode": [ "" @@ -32,12 +32,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json index 896b4dc154..02a40601f2 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PETG @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1895495477", + "filament_id": "OF4WB37S", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json index 0ad75759a1..4f934b93a3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG HF @U1 base2.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG HF @U1 base2", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "GFG96", + "filament_id": "OFL9aRjN", "instantiation": "false", "cool_plate_temp": [ "0" @@ -177,7 +177,7 @@ "nil" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_prime_volume": [ "45" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json index eb18fb4838..6b51cd2535 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG Translucent @U1 base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PETG Translucent @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "PETG_TRANSLUCENT_001", + "filament_id": "OFW8lqnb", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json index 2d74db595b..076dc7e2b9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG-CF @U1 base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "10425112260", + "filament_id": "OFOwQuZM", "instantiation": "false", "filament_end_gcode": [ "" @@ -47,12 +47,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json index afd7cf79ee..1b0f300341 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PETG-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PETG-CF @base", "inherits": "fdm_filament_petg", "from": "system", - "filament_id": "1355502217", + "filament_id": "OFOwQuZM", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json index 3100986363..3f41d5579e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "14170311270", + "filament_id": "OFlufQpZ", "instantiation": "false", "filament_end_gcode": [ "" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json index 9d010aa49d..48e1f70d80 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PLA @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3177068229", + "filament_id": "OFlufQpZ", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json index adf7624e1f..e29003f72c 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Basic @U1 base.json @@ -2,8 +2,11 @@ "type": "filament", "name": "Snapmaker PLA Basic @U1 base", "from": "system", - "filament_id": "1417031127011", + "filament_id": "OFhmxnYw", "instantiation": "false", + "filament_vendor": [ + "Snapmaker" + ], "filament_end_gcode": [ "" ], @@ -22,12 +25,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json index 43a0726b2c..67e0d74b2e 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Eco @U1 base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "2008037900", + "filament_id": "OFpu74Qe", "instantiation": "false", "filament_end_gcode": [ "" @@ -26,12 +26,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json index 4b41b7b9e1..e4ce7fc8c3 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Eco @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PLA Eco @base", "inherits": "fdm_filament_pla_eco", "from": "system", - "filament_id": "1695556157", + "filament_id": "OFpu74Qe", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json index 990e67a79e..219e8075e5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Full Spectrum @U1 0.4 nozzle.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "iybaFWrXKOsmXgMJ", + "filament_id": "OFOPU1xv", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json index ad3c1f4bbb..97d2a7ea61 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Glow @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Glow @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "SPGLOW001", + "filament_id": "OFfD87Gy", "instantiation": "false", "filament_end_gcode": [ "" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json index b75944c3ec..9f4ff4b7f9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA Lite @U1 base", "from": "system", - "filament_id": "1417031127011", + "filament_id": "OFEOnBj6", "instantiation": "false", "filament_end_gcode": [ "" @@ -22,12 +22,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], @@ -46,6 +40,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json index fab081d5d7..d2c9dddefb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Lite @U1.json @@ -198,7 +198,7 @@ "100" ], "filament_vendor": [ - "Polymaker" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json index 3ffb3314a1..31607ed7c6 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA Matte @U1 base", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFF9cgY5", "instantiation": "false", "filament_end_gcode": [ "" @@ -22,12 +22,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], @@ -46,6 +40,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json index 6c0dcf26fd..6c56447e5a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1 base2.json @@ -2,8 +2,11 @@ "type": "filament", "name": "Snapmaker PLA Matte @U1 base2", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFF9cgY5", "instantiation": "false", + "filament_vendor": [ + "Snapmaker" + ], "filament_end_gcode": [ "" ], @@ -22,12 +25,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json index a71c43f9b0..badf918d97 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Matte @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker PLA @U1 base", "from": "system", "setting_id": "uAhykL5ap1DAKacf", + "filament_id": "OFF9cgY5", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json index 9fba864f40..87c26fdb09 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Metal @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Metal @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "20299943460", + "filament_id": "OFtybfNX", "instantiation": "false", "filament_end_gcode": [ "" @@ -29,12 +29,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json index 5eb860506c..e4fdb8016b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.2 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "Q5xH6oGGlbXr14Pa", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json index 5df6ff5a3a..b144ce86dd 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "2pieDQoz9PiDCnU1", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json index 0758372ea0..aa92e97d18 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "f3H0JFUnds0mkKCN", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json index 227fa034dc..5f0ca9ed36 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Silk @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "false", "filament_end_gcode": [ "" @@ -35,12 +35,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json index c68904ffd9..6b6030b919 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @U1.json @@ -4,7 +4,7 @@ "inherits": "Snapmaker PLA Basic @U1 base", "from": "system", "setting_id": "9PkHSwtXFM0zPWth", - "filament_id": "11813638720", + "filament_id": "OFWgFOjn", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json index 8c821fdaaa..b35519fdd9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Silk @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Silk @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "1655727393", + "filament_id": "OFWgFOjn", "instantiation": "false", "hot_plate_temp_initial_layer": [ "65" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json index adaaf5c3c6..5391a85078 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA SnapSpeed @U1 base", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFwhLMs4", "instantiation": "false", "filament_end_gcode": [ "" @@ -22,12 +22,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], @@ -46,6 +40,9 @@ "filament_type": [ "PLA" ], + "filament_vendor": [ + "Snapmaker" + ], "filament_density": [ "1.24" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json index 84889e3d9b..41876b04bb 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA SnapSpeed @U1 base2.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker PLA SnapSpeed @U1 base2", "from": "system", - "filament_id": "141703112701", + "filament_id": "OFwhLMs4", "instantiation": "false", "activate_air_filtration": [ "0" @@ -195,7 +195,7 @@ "100" ], "filament_vendor": [ - "snapmaker" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json index 4f4842ae1d..4b67d00391 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Translucent @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA Translucent @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "SPTR001", + "filament_id": "OFLTYJW0", "instantiation": "false", "filament_end_gcode": [ "" @@ -23,12 +23,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json index 4768ac2783..283d5876b7 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.4 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "XvizDDHbds3bVrzi", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json index 43d306ebae..09555457d5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "Kp77DCcitdmoyjqm", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json index da788a35fb..4a5a04a5ee 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA Wood @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "nBYnNiqwLo6nAsqi", - "filament_id": "GFL9922", + "filament_id": "OFdd8ZqJ", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json index b986a7244a..9ce38a9782 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.4 nozzle.json @@ -3,8 +3,9 @@ "name": "Snapmaker PLA-CF @U1 0.4 nozzle", "inherits": "fdm_filament_pla", "from": "system", + "renamed_from": "Snapmaker PLA-CF @U1", "setting_id": "2INwruC3ZVkBTdUT", - "filament_id": "GFL98111", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json index dcb6392634..6f09ea5d6a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "CKfdL85SvbOLzMuP", - "filament_id": "GFL98111", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json index 1e6e961497..564e59e1a9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "fhhnfJm4dN9FXpWQ", - "filament_id": "GFL98111", + "filament_id": "OFhQf8ou", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json index 63f877d965..cfdfe78b74 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA-CF @U1 base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "17021473250", + "filament_id": "OFhQf8ou", "instantiation": "false", "filament_end_gcode": [ "" @@ -35,12 +35,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json deleted file mode 100644 index 9091258467..0000000000 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @U1.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "type": "filament", - "name": "Snapmaker PLA-CF @U1", - "inherits": "Snapmaker PLA-CF @U1 base", - "from": "system", - "setting_id": "eyNYjz24xQYyAQcv", - "instantiation": "true", - "compatible_printers": [ - "Snapmaker U1 (0.4 nozzle)" - ], - "filament_retract_length_toolchange": [ - "5" - ] -} diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json index 040e559f38..910a8a7617 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PLA-CF @base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PLA-CF @base", "inherits": "fdm_filament_pla", "from": "system", - "filament_id": "3864371306", + "filament_id": "OFhQf8ou", "instantiation": "false", "required_nozzle_HRC": [ "40" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json index 91ff319c8e..f2b2033dd9 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker PVA @U1 base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "31046369800", + "filament_id": "OFyhjiNs", "instantiation": "false", "filament_end_gcode": [ "" @@ -20,12 +20,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json b/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json index c49e948c02..1edf0516c4 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker PVA @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker PVA @base", "inherits": "fdm_filament_pva", "from": "system", - "filament_id": "1344609062", + "filament_id": "OFyhjiNs", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json index 846f7acff9..a4214b6cd0 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "aqE9IR6dFd2MQLXR", + "filament_id": "OFWTAEjH", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json index 861f11ff09..c5c42d6126 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPE.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPE.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @base", "from": "system", "setting_id": "pFGj8sxkPmk10bP4", + "filament_id": "OFWTAEjH", "instantiation": "true", "compatible_printers": [ "Snapmaker A250 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json index 6ae8a5b675..afb529e983 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "uQCplebxmpBpzsnk", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json index 45f0f7a0e9..8cf3452469 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "w4Hpl2qNPmgNvaeM", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.5" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json index e89397849b..8f6ba9663f 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 90A @U1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "T4MmgICRrSzvmCZ5", - "filament_id": "GFU99", + "filament_id": "OFY7jxcS", "instantiation": "true", "filament_max_volumetric_speed": [ "3.2" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json index 3c51439206..d61e2adb1b 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1 base.json @@ -2,7 +2,7 @@ "type": "filament", "name": "Snapmaker TPU 95A @U1 base", "from": "system", - "filament_id": "297165629001", + "filament_id": "OFvmwTZE", "instantiation": "false", "overhang_fan_threshold": [ "95%" @@ -47,7 +47,7 @@ "0" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json index 9cc40e8552..59b125ff72 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A @U1.json @@ -195,7 +195,7 @@ "100" ], "filament_vendor": [ - "Generic" + "Snapmaker" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json index 1085c84e6f..b9619dcca5 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.6 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "Q2svXpkEqg0dCdq3", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json index bef4c7712f..4283ac2651 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1 0.8 nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "RjsE08h3l37cAkAs", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json index 5e0696d906..816b78ceb8 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU 95A HF @U1.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "KwcwmV2UmZUgCBoz", - "filament_id": "GFU99", + "filament_id": "OFXSvqOX", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json index 6e9efb2034..7a43d5715a 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU @U1 base.json @@ -3,7 +3,7 @@ "name": "Snapmaker TPU @U1 base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "29716562900", + "filament_id": "OF65InrS", "instantiation": "false", "filament_end_gcode": [ "" @@ -20,12 +20,6 @@ "filament_unloading_speed": [ "35" ], - "filament_load_time": [ - "2" - ], - "filament_unload_time": [ - "2" - ], "filament_cooling_moves": [ "2" ], diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json index 8208dc980c..85a66a5008 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU @base.json @@ -3,6 +3,6 @@ "name": "Snapmaker TPU @base", "inherits": "fdm_filament_tpu", "from": "system", - "filament_id": "1480063856", + "filament_id": "OF65InrS", "instantiation": "false" } diff --git a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json index d338d8e4b9..0aca011924 100644 --- a/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json +++ b/resources/profiles/Snapmaker/filament/Snapmaker TPU High-Flow @U1.json @@ -4,6 +4,7 @@ "inherits": "Snapmaker TPU @U1 base", "from": "system", "setting_id": "5AXIg8WCdcd74S5v", + "filament_id": "OFgyPlwU", "instantiation": "true", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)", diff --git a/resources/profiles/Snapmaker/filament/fdm_filament_common.json b/resources/profiles/Snapmaker/filament/fdm_filament_common.json index 04c0a64a6f..82b033cda5 100644 --- a/resources/profiles/Snapmaker/filament/fdm_filament_common.json +++ b/resources/profiles/Snapmaker/filament/fdm_filament_common.json @@ -114,12 +114,6 @@ "filament_unloading_speed": [ "25" ], - "filament_load_time": [ - "0" - ], - "filament_unload_time": [ - "0" - ], "filament_toolchange_delay": [ "0" ], diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json index a6e55cb7bd..6a96cfb494 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 BKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "1921635482", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json index 3544179344..80ace374c7 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual BKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "1463587605", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json index 89845097d4..733d7096fb 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QS+B Kit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "3396626756", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json index f6c9ae9663..83e77458c1 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual QSKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "2661871200", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json index a1c0587025..86085a641a 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 Dual.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "2728546690", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json index c28a8b0e39..937bf20bdd 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QS+B Kit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "3626883798", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json index a47a224e8f..dd0b5e8e46 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250 QSKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "3817522582", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A250.json b/resources/profiles/Snapmaker/machine/Snapmaker A250.json index acdd0983c6..16a93e5957 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A250.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A250.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "261851393", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A250_bed.stl", "bed_texture": "Snapmaker A250_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json index 69dbfea029..60a09d7519 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 BKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "3190019076", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json index b0d390f5e3..321002ad53 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual BKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "2326416016", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json index a2971119fb..6ca04fc169 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QS+B Kit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "1305649671", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json index 0154fcf801..7798d13413 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual QSKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "61280022", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json index 5c7b9aede1..f18dc6cfcf 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 Dual.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "1846038812", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350 Dual_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json index 0d780ef3d5..dd71d8312c 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QS+B Kit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "1133024953", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json b/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json index 433fffebef..80573646c4 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350 QSKit.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "4109488597", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker A350.json b/resources/profiles/Snapmaker/machine/Snapmaker A350.json index 231c8a7137..de5b92e6c5 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker A350.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker A350.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "240771894", + "default_materials": "PolyTerra PLA @0.2 nozzle;Snapmaker PLA", "bed_model": "Snapmaker A350_bed.stl", "bed_texture": "Snapmaker A350_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json b/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json index 667d195628..e3a3f17c24 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker Artisan.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "797581801", + "default_materials": "PolyTerra Dual PLA @0.2 nozzle;Snapmaker Dual PLA", "bed_model": "Snapmaker Artisan_bed.stl", "bed_texture": "Snapmaker Artisan_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker J1.json b/resources/profiles/Snapmaker/machine/Snapmaker J1.json index 46ef45fa15..087d33768f 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker J1.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker J1.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "https://github.com/macdylan", "model_id": "199828459", + "default_materials": "PolyTerra J1 PLA @0.2 nozzle;PolyTerra J1 PLA", "bed_model": "Snapmaker J1_bed.stl", "bed_texture": "Snapmaker J1_texture.svg", "nozzle_diameter": "0.2;0.4;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/Snapmaker U1.json b/resources/profiles/Snapmaker/machine/Snapmaker U1.json index fb703f2e75..96eb53f81a 100644 --- a/resources/profiles/Snapmaker/machine/Snapmaker U1.json +++ b/resources/profiles/Snapmaker/machine/Snapmaker U1.json @@ -5,6 +5,7 @@ "family": "Snapmaker", "url": "", "model_id": "797581801", + "default_materials": "Snapmaker PLA SnapSpeed @U1 0.2 nozzle;Panchroma PLA @Snapmaker U1;Generic PLA @System;Snapmaker PLA SnapSpeed @U1 0.6 nozzle;Snapmaker PLA SnapSpeed @U1 0.8 nozzle", "bed_model": "Snapmaker U1_bed.stl", "bed_texture": "Snapmaker U1_texture.svg", "nozzle_diameter": "0.2;0.4;0.4+0.6;0.6;0.8" diff --git a/resources/profiles/Snapmaker/machine/fdm_U1.json b/resources/profiles/Snapmaker/machine/fdm_U1.json index 717215b507..0b3d89a303 100644 --- a/resources/profiles/Snapmaker/machine/fdm_U1.json +++ b/resources/profiles/Snapmaker/machine/fdm_U1.json @@ -184,7 +184,7 @@ "nozzle_type": "undefine", "auxiliary_fan": "0", "support_multi_bed_types": "1", - "default_bed_type": "4", + "default_bed_type": "Textured PEI Plate", "printable_area": [ "0.5x1", "270.5x1", diff --git a/resources/profiles/Snapmaker/machine/fdm_common.json b/resources/profiles/Snapmaker/machine/fdm_common.json index 50b8cb2cdd..fac7898ce3 100644 --- a/resources/profiles/Snapmaker/machine/fdm_common.json +++ b/resources/profiles/Snapmaker/machine/fdm_common.json @@ -7,7 +7,6 @@ "pause_gcode": "M600 ;pause print", "nozzle_type": "hardened_steel", "use_relative_e_distances": "1", - "silent_mode": "0", "auxiliary_fan": "0", "remaining_times": "1", "single_extruder_multi_material": "0", diff --git a/resources/profiles/Snapmaker/machine/fdm_klipper.json b/resources/profiles/Snapmaker/machine/fdm_klipper.json index ccb53f7e7d..ca389bdf37 100644 --- a/resources/profiles/Snapmaker/machine/fdm_klipper.json +++ b/resources/profiles/Snapmaker/machine/fdm_klipper.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Snapmaker/machine/fdm_toolchanger.json b/resources/profiles/Snapmaker/machine/fdm_toolchanger.json index 1b6a068387..aadd744bf0 100644 --- a/resources/profiles/Snapmaker/machine/fdm_toolchanger.json +++ b/resources/profiles/Snapmaker/machine/fdm_toolchanger.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json index 3dec06228e..15546ce4bb 100644 --- a/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -11,8 +11,6 @@ "outer_wall_acceleration": "2000", "outer_wall_speed": "60", "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json index 7c80e048f6..3881460bda 100644 --- a/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.06 Standard @Snapmaker U1 (0.2 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json index b8a8e126aa..0a3ba43c86 100644 --- a/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Extra Fine @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "Tayg0K1WRyJMLoke", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json index 27d3903f06..2aeb309d58 100644 --- a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -11,8 +11,6 @@ "outer_wall_acceleration": "2000", "outer_wall_speed": "60", "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json index 677e6742d9..107731b2cb 100644 --- a/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -15,8 +15,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "150", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json index b4728bd60f..ea8c719085 100644 --- a/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.08 Standard @Snapmaker U1 (0.2 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json index 80b2120807..6fc26cd55f 100644 --- a/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 High Quality @Snapmaker U1 (0.2 nozzle).json @@ -11,8 +11,6 @@ "outer_wall_acceleration": "2000", "outer_wall_speed": "60", "sparse_infill_pattern": "gyroid", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json index 80739205ac..d33ce1c083 100644 --- a/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.10 Standard @Snapmaker U1 (0.2 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json index 2da54a6dc3..6de6d483da 100644 --- a/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Fine @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "xBU1j8ldOefYfosp", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json index 9302a40421..a5f215d7f3 100644 --- a/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -15,8 +15,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "180", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json index cc93a97e99..632d9614f7 100644 --- a/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.12 Standard @Snapmaker U1 (0.2 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json index 54513eb14b..0de823db1f 100644 --- a/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.14 Standard @Snapmaker U1 (0.2 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.2 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json index 416d85881c..1306485d6f 100644 --- a/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 High Quality @Snapmaker U1 (0.4 nozzle).json @@ -15,8 +15,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "200", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json index 6871a3e120..838f250e8c 100644 --- a/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.16 Optimal @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "ERcgRLp5bQo1hgz8", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json index 77b756bffc..88fbb33812 100644 --- a/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.18 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json index da92006d49..be894aa221 100644 --- a/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Quality @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "BBXxXQCXCme2Mvy0", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json index 5d873d5efd..443afe55dd 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "XR5r9SuWmSag5Qjo", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json index 63bb6ea170..b4e22777e8 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.4+0.6 nozzle).json @@ -17,8 +17,6 @@ "internal_solid_infill_line_width": "105%", "support_line_width": "105%", "top_surface_line_width": "105%", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "prime_tower_width": "30", "slowdown_for_curled_perimeters": "0", diff --git a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json index d1bb174a62..5c87ff68d0 100644 --- a/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Standard 0.2 mm layer height profile for the Snapmaker U1 with 0.6 mm nozzles. Balances print speed and surface quality for everyday prints.", "layer_height": "0.20", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json index 91c5995b92..1d051fc801 100644 --- a/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Strength @Snapmaker U1 (0.4 nozzle).json @@ -8,8 +8,6 @@ "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "outer_wall_speed": "60", "sparse_infill_density": "25%", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "wall_loops": "6", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" diff --git a/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json index 0cb85cc26d..577065ca3f 100644 --- a/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.20 Support @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "4whjHJVCN44w8SPE", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json index f98007b6e1..8e09376daf 100644 --- a/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Draft @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "MYRo7jTenu7F0Zv4", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json index 7a9f4e2154..2fa2eeabdb 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json index d9e1a2bf94..316bb0dbee 100644 --- a/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.24 Standard @Snapmaker U1 (0.8 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json index 4382b11e41..8829efafdb 100644 --- a/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.28 Extra Draft @Snapmaker U1 (0.4 nozzle).json @@ -6,8 +6,6 @@ "setting_id": "0fSeyAIS6z75A1r3", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.4 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json index 52eb63a64d..defbc6740b 100644 --- a/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Draft @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Fast draft profile for the Snapmaker U1 with 0.6 mm nozzles. 0.3 mm layer height for quick prototypes and functional parts.", "layer_height": "0.30", - "smooth_coefficient": "80", - "overhang_totally_speed": "40", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json index e2d5c192bb..92bebf6219 100644 --- a/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json index c216eb09d2..f268a92446 100644 --- a/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.30 Strength @Snapmaker U1 (0.6 nozzle).json @@ -9,8 +9,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json index d2c20559fd..de7559f827 100644 --- a/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.32 Standard @Snapmaker U1 (0.8 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json index 44ea3bb3f4..6dc9f26329 100644 --- a/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.36 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json index 37238fb0ea..b18e30c210 100644 --- a/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Extra Draft @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Maximum-speed profile for the Snapmaker U1 with 0.6 mm nozzles. 0.4 mm layer height for rapid prototyping where surface finish is not critical.", "layer_height": "0.40", - "smooth_coefficient": "80", - "overhang_totally_speed": "30", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json index 8d00eb9fab..b0cf935465 100644 --- a/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.40 Standard @Snapmaker U1 (0.8 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json b/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json index d3e4bf7f07..eaa04faadc 100644 --- a/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.42 Standard @Snapmaker U1 (0.6 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.6 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json index d6cdf607dd..599cf24db5 100644 --- a/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.48 Standard @Snapmaker U1 (0.8 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json b/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json index 9f67114c20..ca728fe66a 100644 --- a/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json +++ b/resources/profiles/Snapmaker/process/0.56 Standard @Snapmaker U1 (0.8 nozzle).json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Snapmaker U1 (0.8 nozzle)" ], diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1.json b/resources/profiles/Snapmaker/process/fdm_process_U1.json index 72dab0c16b..4e0d7bf6e6 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_U1.json +++ b/resources/profiles/Snapmaker/process/fdm_process_U1.json @@ -3,7 +3,6 @@ "name": "fdm_process_U1", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", @@ -66,7 +65,5 @@ "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", - "compatible_printers": [], - "smooth_coefficient": "80", - "overhang_totally_speed": "24" + "compatible_printers": [] } diff --git a/resources/profiles/Snapmaker/process/fdm_process_U1_common.json b/resources/profiles/Snapmaker/process/fdm_process_U1_common.json index 462ddb53ae..5240f242c4 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_U1_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_U1_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "30", diff --git a/resources/profiles/Snapmaker/process/fdm_process_common.json b/resources/profiles/Snapmaker/process/fdm_process_common.json index 458a0f6162..13e5825ebd 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "layer_height": "0.2", "initial_layer_print_height": "0.3", "line_width": "0.42", @@ -72,7 +71,6 @@ "infill_combination": "0", "detect_narrow_internal_solid_infill": "1", "ensure_vertical_shell_thickness": "1", - "internal_bridge_support_thickness": "0.8", "initial_layer_speed": "50", "initial_layer_infill_speed": "50", "initial_layer_travel_speed": "80%", @@ -86,7 +84,6 @@ "support_interface_speed": "50", "ironing_speed": "35", "enable_overhang_speed": "1", - "overhang_speed_classic": "0", "overhang_1_4_speed": "35", "overhang_2_4_speed": "25", "overhang_3_4_speed": "15", @@ -129,7 +126,6 @@ "tree_support_adaptive_layer_height": "1", "tree_support_auto_brim": "1", "tree_support_brim_width": "3", - "tree_support_with_infill": "0", "support_top_z_distance": "0.12", "support_bottom_z_distance": "0.12", "support_base_pattern": "rectilinear", diff --git a/resources/profiles/Sovol.json b/resources/profiles/Sovol.json index 770ca55c95..7f08417ed7 100644 --- a/resources/profiles/Sovol.json +++ b/resources/profiles/Sovol.json @@ -1,7 +1,7 @@ { "name": "Sovol", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "0", "description": "Sovol configurations", "machine_model_list": [ @@ -201,30 +201,110 @@ } ], "filament_list": [ + { + "name": "Generic ABS @Sovol SV06 ACE", + "sub_path": "filament/Generic ABS @Sovol SV06 ACE.json" + }, + { + "name": "Generic ABS @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic ABS @Sovol SV06 Plus ACE.json" + }, + { + "name": "Generic ABS @Sovol SV08", + "sub_path": "filament/Generic ABS @Sovol SV08.json" + }, { "name": "Generic ABS @Sovol SV08 MAX", "sub_path": "filament/Generic ABS @Sovol SV08 MAX.json" }, + { + "name": "Generic ABS @Sovol Zero", + "sub_path": "filament/Generic ABS @Sovol Zero.json" + }, { "name": "Generic PC @Sovol SV08 MAX", "sub_path": "filament/Generic PC @Sovol SV08 MAX.json" }, + { + "name": "Generic PC @Sovol Zero", + "sub_path": "filament/Generic PC @Sovol Zero.json" + }, + { + "name": "Generic PETG @Sovol SV06 ACE", + "sub_path": "filament/Generic PETG @Sovol SV06 ACE.json" + }, + { + "name": "Generic PETG @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic PETG @Sovol SV06 Plus ACE.json" + }, + { + "name": "Generic PETG @Sovol SV08", + "sub_path": "filament/Generic PETG @Sovol SV08.json" + }, { "name": "Generic PETG @Sovol SV08 MAX", "sub_path": "filament/Generic PETG @Sovol SV08 MAX.json" }, + { + "name": "Generic PETG @Sovol Zero", + "sub_path": "filament/Generic PETG @Sovol Zero.json" + }, + { + "name": "Generic PLA @Sovol SV06 ACE", + "sub_path": "filament/Generic PLA @Sovol SV06 ACE.json" + }, + { + "name": "Generic PLA @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic PLA @Sovol SV06 Plus ACE.json" + }, + { + "name": "Generic PLA @Sovol SV07", + "sub_path": "filament/Generic PLA @Sovol SV07.json" + }, + { + "name": "Generic PLA @Sovol SV08", + "sub_path": "filament/Generic PLA @Sovol SV08.json" + }, + { + "name": "Generic PLA @Sovol SV08 0.2 nozzle", + "sub_path": "filament/Generic PLA @Sovol SV08 0.2 nozzle.json" + }, { "name": "Generic PLA @Sovol SV08 MAX", "sub_path": "filament/Generic PLA @Sovol SV08 MAX.json" }, + { + "name": "Generic PLA @Sovol Zero", + "sub_path": "filament/Generic PLA @Sovol Zero.json" + }, { "name": "Generic PLA Silk @Sovol SV08 MAX", "sub_path": "filament/Generic PLA Silk @Sovol SV08 MAX.json" }, + { + "name": "Generic PLA Silk @Sovol Zero", + "sub_path": "filament/Generic PLA Silk @Sovol Zero.json" + }, + { + "name": "Generic TPU @Sovol SV06 ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 ACE.json" + }, + { + "name": "Generic TPU @Sovol SV06 Plus ACE", + "sub_path": "filament/Generic TPU @Sovol SV06 Plus ACE.json" + }, + { + "name": "Generic TPU @Sovol SV08", + "sub_path": "filament/Generic TPU @Sovol SV08.json" + }, { "name": "Generic TPU @Sovol SV08 MAX", "sub_path": "filament/Generic TPU @Sovol SV08 MAX.json" }, + { + "name": "Generic TPU @Sovol Zero", + "sub_path": "filament/Generic TPU @Sovol Zero.json" + }, { "name": "Polymaker PETG @Sovol SV08 MAX", "sub_path": "filament/Polymaker PETG @Sovol SV08 MAX.json" @@ -233,97 +313,17 @@ "name": "SUNLU PETG @Sovol SV08 MAX", "sub_path": "filament/SUNLU PETG @Sovol SV08 MAX.json" }, - { - "name": "Sovol SV06 ACE ABS", - "sub_path": "filament/Sovol SV06 ACE ABS.json" - }, - { - "name": "Sovol SV06 ACE PETG", - "sub_path": "filament/Sovol SV06 ACE PETG.json" - }, - { - "name": "Sovol SV06 ACE PLA", - "sub_path": "filament/Sovol SV06 ACE PLA.json" - }, - { - "name": "Sovol SV06 ACE TPU", - "sub_path": "filament/Sovol SV06 ACE TPU.json" - }, - { - "name": "Sovol SV06 Plus ACE ABS", - "sub_path": "filament/Sovol SV06 Plus ACE ABS.json" - }, - { - "name": "Sovol SV06 Plus ACE PETG", - "sub_path": "filament/Sovol SV06 Plus ACE PETG.json" - }, - { - "name": "Sovol SV06 Plus ACE PLA", - "sub_path": "filament/Sovol SV06 Plus ACE PLA.json" - }, - { - "name": "Sovol SV06 Plus ACE TPU", - "sub_path": "filament/Sovol SV06 Plus ACE TPU.json" - }, - { - "name": "Sovol SV07 PLA", - "sub_path": "filament/Sovol SV07 PLA.json" - }, - { - "name": "Sovol SV08 ABS", - "sub_path": "filament/Sovol SV08 ABS.json" - }, - { - "name": "Sovol SV08 PETG", - "sub_path": "filament/Sovol SV08 PETG.json" - }, - { - "name": "Sovol SV08 PLA", - "sub_path": "filament/Sovol SV08 PLA.json" - }, - { - "name": "Sovol SV08 PLA @SV08 0.2 nozzle", - "sub_path": "filament/Sovol SV08 PLA @SV08 0.2 nozzle.json" - }, - { - "name": "Sovol SV08 TPU", - "sub_path": "filament/Sovol SV08 TPU.json" - }, - { - "name": "Sovol Zero ABS", - "sub_path": "filament/Sovol Zero ABS.json" - }, - { - "name": "Sovol Zero PC", - "sub_path": "filament/Sovol Zero PC.json" - }, - { - "name": "Sovol Zero PETG", - "sub_path": "filament/Sovol Zero PETG.json" - }, { "name": "Sovol Zero PETG HS Nozzle", "sub_path": "filament/Sovol Zero PETG HS Nozzle.json" }, - { - "name": "Sovol Zero PLA Basic", - "sub_path": "filament/Sovol Zero PLA Basic.json" - }, { "name": "Sovol Zero PLA Basic HS Nozzle", "sub_path": "filament/Sovol Zero PLA Basic HS Nozzle.json" }, - { - "name": "Sovol Zero PLA Silk", - "sub_path": "filament/Sovol Zero PLA Silk.json" - }, { "name": "Sovol Zero PLA Silk HS Nozzle", "sub_path": "filament/Sovol Zero PLA Silk HS Nozzle.json" - }, - { - "name": "Sovol Zero TPU", - "sub_path": "filament/Sovol Zero TPU.json" } ], "machine_list": [ diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json new file mode 100644 index 0000000000..49b26d498a --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 ACE.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic ABS @Sovol SV06 ACE", + "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV06 ACE ABS", + "from": "system", + "setting_id": "exjBdPPCgk53gipu", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "30" + ], + "slow_down_layer_time": [ + "5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "hot_plate_temp": [ + "95" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json new file mode 100644 index 0000000000..905ee2bda0 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV06 Plus ACE.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "name": "Generic ABS @Sovol SV06 Plus ACE", + "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV06 Plus ACE ABS", + "from": "system", + "setting_id": "sg9HXvKEoKD4pw7v", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 Plus ACE 0.4 nozzle" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "30" + ], + "slow_down_layer_time": [ + "5" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "hot_plate_temp": [ + "95" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json index 8e043a5a48..8532e5bee0 100644 --- a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "7julgReKEcp5tg0d", "name": "Generic ABS @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json new file mode 100644 index 0000000000..e690ee88e5 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol SV08.json @@ -0,0 +1,78 @@ +{ + "type": "filament", + "name": "Generic ABS @Sovol SV08", + "inherits": "Generic ABS @System", + "renamed_from": "Sovol SV08 ABS", + "from": "system", + "setting_id": "aZx3ePr3Id1jPJG9", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp": [ + "95" + ], + "hot_plate_temp_initial_layer": [ + "95" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "30" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "25%" + ], + "temperature_vitrification": [ + "60" + ], + "activate_air_filtration": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "60" + ], + "during_print_exhaust_fan_speed": [ + "100" + ], + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json new file mode 100644 index 0000000000..3b737e2a18 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic ABS @Sovol Zero.json @@ -0,0 +1,78 @@ +{ + "type": "filament", + "name": "Generic ABS @Sovol Zero", + "inherits": "Generic ABS @System", + "renamed_from": "Sovol Zero ABS", + "from": "system", + "setting_id": "g6sSyyIFYJUzlXsp", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "30" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "30" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ], + "activate_air_filtration": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "50" + ], + "during_print_exhaust_fan_speed": [ + "50" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "compatible_printers": [ + "Sovol Zero 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json index ec1fefce99..242c320a7d 100644 --- a/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PC @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "UPoqjanrvN173sVS", "name": "Generic PC @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json new file mode 100644 index 0000000000..dd0eb60594 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PC @Sovol Zero.json @@ -0,0 +1,68 @@ +{ + "type": "filament", + "name": "Generic PC @Sovol Zero", + "inherits": "Generic PC @System", + "renamed_from": "Sovol Zero PC", + "from": "system", + "setting_id": "yRKCiPMN6fxibcyg", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "compatible_printers": [ + "Sovol Zero 0.4 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature": [ + "270" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "hot_plate_temp": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "fan_min_speed": [ + "10" + ], + "fan_max_speed": [ + "20" + ], + "fan_cooling_layer_time": [ + "40" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "dont_slow_down_outer_wall": "0", + "overhang_fan_speed": [ + "20" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ], + "additional_cooling_fan_speed": "0", + "activate_air_filtration": "1", + "during_print_exhaust_fan_speed": "50", + "complete_print_exhaust_fan_speed": "50" +} diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json new file mode 100644 index 0000000000..acb2c90316 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 ACE.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PETG @Sovol SV06 ACE", + "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV06 ACE PETG", + "from": "system", + "setting_id": "p8fGWNVkT6n5Dv9P", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "30" + ], + "slow_down_layer_time": [ + "5" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "hot_plate_temp": [ + "85" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json new file mode 100644 index 0000000000..5c2dfeff98 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV06 Plus ACE.json @@ -0,0 +1,51 @@ +{ + "type": "filament", + "name": "Generic PETG @Sovol SV06 Plus ACE", + "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV06 Plus ACE PETG", + "from": "system", + "setting_id": "I7IzLMYw7iDUUJwc", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 Plus ACE 0.4 nozzle" + ], + "fan_min_speed": [ + "30" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "30" + ], + "slow_down_layer_time": [ + "5" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "hot_plate_temp": [ + "85" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json index d23224b8f9..550d30ccf5 100644 --- a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "ib7AtR3tQ2dSrFNP", "name": "Generic PETG @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json new file mode 100644 index 0000000000..c637897b10 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol SV08.json @@ -0,0 +1,75 @@ +{ + "type": "filament", + "name": "Generic PETG @Sovol SV08", + "inherits": "Generic PETG @System", + "renamed_from": "Sovol SV08 PETG", + "from": "system", + "setting_id": "7vDZKIKJW5fy1EGG", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "17" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "fan_min_speed": [ + "30" + ], + "fan_max_speed": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "full_fan_speed_layer": [ + "0" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "10%" + ], + "temperature_vitrification": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_retraction_length": [ + "0.5" + ], + "filament_z_hop": [ + "0.4" + ], + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json new file mode 100644 index 0000000000..a223521d25 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PETG @Sovol Zero.json @@ -0,0 +1,77 @@ +{ + "type": "filament", + "name": "Generic PETG @Sovol Zero", + "inherits": "Generic PETG @System", + "renamed_from": "Sovol Zero PETG", + "from": "system", + "setting_id": "i4OW2eAtXOKdtVNj", + "instantiation": "true", + "filament_flow_ratio": [ + "1.0348" + ], + "enable_pressure_advance": "1", + "pressure_advance": "0.046", + "filament_max_volumetric_speed": [ + "15" + ], + "nozzle_temperature_initial_layer": [ + "265" + ], + "nozzle_temperature": [ + "245" + ], + "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" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json new file mode 100644 index 0000000000..de9e7cde47 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 ACE.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol SV06 ACE", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV06 ACE PLA", + "from": "system", + "setting_id": "UEEwpetmmxpxM4vV", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json new file mode 100644 index 0000000000..8dcb4a6d2d --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV06 Plus ACE.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol SV06 Plus ACE", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV06 Plus ACE PLA", + "from": "system", + "setting_id": "yzv5Kwe3OivHxNUI", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 Plus ACE 0.4 nozzle" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "slow_down_layer_time": [ + "6" + ], + "slow_down_min_speed": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json new file mode 100644 index 0000000000..42210ef9c0 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV07.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol SV07", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV07 PLA", + "from": "system", + "setting_id": "sNGno8XCSsgmwjvH", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "24" + ], + "filament_retraction_length": [ + "0.5" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV07 0.4 nozzle" + ], + "fan_min_speed": [ + "60" + ], + "fan_cooling_layer_time": [ + "50" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "6" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "200" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp": [ + "65" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json new file mode 100644 index 0000000000..be23b183ab --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 0.2 nozzle.json @@ -0,0 +1,66 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol SV08 0.2 nozzle", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV08 PLA @SV08 0.2 nozzle;Sovol SV08 PLA SV08 0.2 nozzle", + "from": "system", + "setting_id": "W7oQNGWqiPMUlzhw", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "compatible_printers": [ + "Sovol SV08 0.2 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "50" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json index 7ef7748ec1..b29bc1b069 100644 --- a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "kcFykpuuxMy7KwNu", "name": "Generic PLA @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json new file mode 100644 index 0000000000..c124edee31 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol SV08.json @@ -0,0 +1,65 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol SV08", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol SV08 PLA", + "from": "system", + "setting_id": "4fSYcvbFXNRHnlEw", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "compatible_printers": [ + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "fan_min_speed": [ + "50" + ], + "fan_max_speed": [ + "70" + ], + "fan_cooling_layer_time": [ + "50" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json new file mode 100644 index 0000000000..131867f6b8 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA @Sovol Zero.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic PLA @Sovol Zero", + "inherits": "Generic PLA @System", + "renamed_from": "Sovol Zero PLA Basic", + "from": "system", + "setting_id": "NNDerIjh7qtuh1I3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "enable_pressure_advance": "1", + "pressure_advance": "0.032", + "compatible_printers": [ + "Sovol Zero 0.4 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature": [ + "210" + ], + "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%" +} diff --git a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json index 40f10eb1ed..ac456a82ee 100644 --- a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol SV08 MAX.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFesA6rF", "setting_id": "WAHQZmwHoS4WjoTx", "name": "Generic PLA Silk @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json new file mode 100644 index 0000000000..5b46a92d64 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic PLA Silk @Sovol Zero.json @@ -0,0 +1,76 @@ +{ + "type": "filament", + "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" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "enable_pressure_advance": "1", + "pressure_advance": "0.029", + "compatible_printers": [ + "Sovol Zero 0.4 nozzle" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature": [ + "220" + ], + "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": [ + "7" + ], + "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%" +} diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json new file mode 100644 index 0000000000..ba653af37d --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 ACE.json @@ -0,0 +1,57 @@ +{ + "type": "filament", + "name": "Generic TPU @Sovol SV06 ACE", + "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV06 ACE TPU", + "from": "system", + "setting_id": "jBAo7stLaaQxKFsp", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 ACE 0.2 nozzle", + "Sovol SV06 ACE 0.4 nozzle", + "Sovol SV06 ACE 0.6 nozzle", + "Sovol SV06 ACE 0.8 nozzle" + ], + "fan_min_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json new file mode 100644 index 0000000000..9c9490b863 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV06 Plus ACE.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic TPU @Sovol SV06 Plus ACE", + "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV06 Plus ACE TPU", + "from": "system", + "setting_id": "MUXz0JSHdT66Mti1", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "full_fan_speed_layer": [ + "3" + ], + "compatible_printers": [ + "Sovol SV06 Plus ACE 0.4 nozzle" + ], + "fan_min_speed": [ + "100" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp": [ + "60" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json index 1c115fe8aa..a65978a50e 100644 --- a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08 MAX.json @@ -1,6 +1,5 @@ { "type": "filament", - "filament_id": "GFL99", "setting_id": "hQByQ7FIhAiytli8", "name": "Generic TPU @Sovol SV08 MAX", "from": "system", diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json new file mode 100644 index 0000000000..bf412d77d8 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol SV08.json @@ -0,0 +1,69 @@ +{ + "type": "filament", + "name": "Generic TPU @Sovol SV08", + "inherits": "Generic TPU @System", + "renamed_from": "Sovol SV08 TPU", + "from": "system", + "setting_id": "vFPYMoNvgjn1aSKA", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "3.6" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "fan_cooling_layer_time": [ + "50" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ], + "filament_z_hop": [ + "0.4" + ], + "compatible_printers": [ + "Sovol SV08 0.2 nozzle", + "Sovol SV08 0.4 nozzle", + "Sovol SV08 0.6 nozzle", + "Sovol SV08 0.8 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json b/resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json new file mode 100644 index 0000000000..8c7c18c523 --- /dev/null +++ b/resources/profiles/Sovol/filament/Generic TPU @Sovol Zero.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Generic TPU @Sovol Zero", + "inherits": "Generic TPU @System", + "renamed_from": "Sovol Zero TPU", + "from": "system", + "setting_id": "MlY6WQ41FE8zDPSV", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "3.2" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "250" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "hot_plate_temp": [ + "85" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "80" + ], + "fan_cooling_layer_time": [ + "50" + ], + "full_fan_speed_layer": [ + "3" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "10" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "temperature_vitrification": [ + "60" + ], + "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", + "compatible_printers": [ + "Sovol Zero 0.4 nozzle" + ] +} diff --git a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json index 02b335f910..f56ca13525 100644 --- a/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/Polymaker PETG @Sovol SV08 MAX.json @@ -1,11 +1,14 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF6H51Xx", "setting_id": "JBFKMaFtd7kO8Ksq", "name": "Polymaker PETG @Sovol SV08 MAX", "from": "system", "instantiation": "true", "inherits": "Generic PETG @System", + "filament_vendor": [ + "Polymaker" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json index 35ee5bcd03..1ff8f57fac 100644 --- a/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/filament/SUNLU PETG @Sovol SV08 MAX.json @@ -1,11 +1,14 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF2GCW1l", "setting_id": "x68SPQCqVacBSGd5", "name": "SUNLU PETG @Sovol SV08 MAX", "from": "system", "instantiation": "true", "inherits": "Generic PETG @System", + "filament_vendor": [ + "SUNLU" + ], "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json deleted file mode 100644 index c77c7812b6..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE ABS.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 ACE ABS", - "inherits": "Generic ABS @System", - "from": "system", - "setting_id": "okqqqm0P8ehlQuDY", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 ACE 0.2 nozzle", - "Sovol SV06 ACE 0.4 nozzle", - "Sovol SV06 ACE 0.6 nozzle", - "Sovol SV06 ACE 0.8 nozzle" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "30" - ], - "slow_down_layer_time": [ - "5" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "95" - ], - "hot_plate_temp": [ - "95" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json deleted file mode 100644 index b8151d47f4..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PETG.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 ACE PETG", - "inherits": "Generic PETG @System", - "from": "system", - "setting_id": "5mtng0PM8CMglpD7", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 ACE 0.2 nozzle", - "Sovol SV06 ACE 0.4 nozzle", - "Sovol SV06 ACE 0.6 nozzle", - "Sovol SV06 ACE 0.8 nozzle" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "30" - ], - "slow_down_layer_time": [ - "5" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "hot_plate_temp": [ - "85" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json deleted file mode 100644 index da10d948ab..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE PLA.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 ACE PLA", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "kgtcANsbfwSbdgOh", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 ACE 0.2 nozzle", - "Sovol SV06 ACE 0.4 nozzle", - "Sovol SV06 ACE 0.6 nozzle", - "Sovol SV06 ACE 0.8 nozzle" - ], - "fan_min_speed": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json deleted file mode 100644 index 3d560d9905..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 ACE TPU.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 ACE TPU", - "inherits": "Generic TPU @System", - "from": "system", - "setting_id": "ERN0ozxmPhIMze0i", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 ACE 0.2 nozzle", - "Sovol SV06 ACE 0.4 nozzle", - "Sovol SV06 ACE 0.6 nozzle", - "Sovol SV06 ACE 0.8 nozzle" - ], - "fan_min_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "100" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json deleted file mode 100644 index 42652117ef..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE ABS.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 Plus ACE ABS", - "inherits": "Generic ABS @System", - "from": "system", - "setting_id": "Me1iSJmocW35ClmN", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 Plus ACE 0.4 nozzle" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "30" - ], - "slow_down_layer_time": [ - "5" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "95" - ], - "hot_plate_temp": [ - "95" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json deleted file mode 100644 index 483d28af10..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PETG.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 Plus ACE PETG", - "inherits": "Generic PETG @System", - "from": "system", - "setting_id": "ZrAm6Nm4FI7p4PgC", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 Plus ACE 0.4 nozzle" - ], - "fan_min_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "30" - ], - "slow_down_layer_time": [ - "5" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "hot_plate_temp": [ - "85" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json deleted file mode 100644 index ef249ea17f..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE PLA.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 Plus ACE PLA", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "YEEOGJYm4Z8W4vGV", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 Plus ACE 0.4 nozzle" - ], - "fan_min_speed": [ - "50" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "slow_down_layer_time": [ - "6" - ], - "slow_down_min_speed": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json b/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json deleted file mode 100644 index 2589b13e37..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV06 Plus ACE TPU.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV06 Plus ACE TPU", - "inherits": "Generic TPU @System", - "from": "system", - "setting_id": "oNucKLcIdxwBPpUN", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV06 Plus ACE 0.4 nozzle" - ], - "fan_min_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "100" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature": [ - "245" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp_initial_layer": [ - "60" - ], - "hot_plate_temp": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json b/resources/profiles/Sovol/filament/Sovol SV07 PLA.json deleted file mode 100644 index 47fe781fcc..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV07 PLA.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV07 PLA", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "IHicmU5gzVf6G4F1", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "24" - ], - "filament_retraction_length": [ - "0.5" - ], - "full_fan_speed_layer": [ - "3" - ], - "compatible_printers": [ - "Sovol SV07 0.4 nozzle" - ], - "fan_min_speed": [ - "60" - ], - "fan_cooling_layer_time": [ - "50" - ], - "fan_max_speed": [ - "100" - ], - "slow_down_layer_time": [ - "6" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "200" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "hot_plate_temp": [ - "65" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json b/resources/profiles/Sovol/filament/Sovol SV08 ABS.json deleted file mode 100644 index 0bb16950d3..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV08 ABS.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV08 ABS", - "inherits": "Generic ABS @System", - "from": "system", - "setting_id": "nq4vvrWqKjWKELEz", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp": [ - "95" - ], - "hot_plate_temp_initial_layer": [ - "95" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "30" - ], - "full_fan_speed_layer": [ - "0" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "25%" - ], - "temperature_vitrification": [ - "60" - ], - "activate_air_filtration": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "complete_print_exhaust_fan_speed": [ - "60" - ], - "during_print_exhaust_fan_speed": [ - "100" - ], - "compatible_printers": [ - "Sovol SV08 0.2 nozzle", - "Sovol SV08 0.4 nozzle", - "Sovol SV08 0.6 nozzle", - "Sovol SV08 0.8 nozzle" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json b/resources/profiles/Sovol/filament/Sovol SV08 PETG.json deleted file mode 100644 index 4fe3cc866f..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV08 PETG.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV08 PETG", - "inherits": "Generic PETG @System", - "from": "system", - "setting_id": "CWd7KULbXvJeTTEy", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "17" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "hot_plate_temp": [ - "75" - ], - "hot_plate_temp_initial_layer": [ - "75" - ], - "fan_min_speed": [ - "30" - ], - "fan_max_speed": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "full_fan_speed_layer": [ - "0" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "10%" - ], - "temperature_vitrification": [ - "60" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_retraction_length": [ - "0.5" - ], - "filament_z_hop": [ - "0.4" - ], - "compatible_printers": [ - "Sovol SV08 0.2 nozzle", - "Sovol SV08 0.4 nozzle", - "Sovol SV08 0.6 nozzle", - "Sovol SV08 0.8 nozzle" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json deleted file mode 100644 index 046d787dc5..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA @SV08 0.2 nozzle.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV08 PLA @SV08 0.2 nozzle", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "qmnuve3FgzrXgjPA", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "compatible_printers": [ - "Sovol SV08 0.2 nozzle" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "fan_min_speed": [ - "100" - ], - "fan_max_speed": [ - "100" - ], - "fan_cooling_layer_time": [ - "50" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json b/resources/profiles/Sovol/filament/Sovol SV08 PLA.json deleted file mode 100644 index 2132557b68..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV08 PLA.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV08 PLA", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "nnU0222BS0F1c5ki", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "compatible_printers": [ - "Sovol SV08 0.4 nozzle", - "Sovol SV08 0.6 nozzle", - "Sovol SV08 0.8 nozzle" - ], - "nozzle_temperature_initial_layer": [ - "235" - ], - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "fan_min_speed": [ - "50" - ], - "fan_max_speed": [ - "70" - ], - "fan_cooling_layer_time": [ - "50" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json b/resources/profiles/Sovol/filament/Sovol SV08 TPU.json deleted file mode 100644 index a1d0cb0fdc..0000000000 --- a/resources/profiles/Sovol/filament/Sovol SV08 TPU.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "type": "filament", - "name": "Sovol SV08 TPU", - "inherits": "Generic TPU @System", - "from": "system", - "setting_id": "tpBbCQhcSJsBesnG", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "3.6" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "fan_cooling_layer_time": [ - "50" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ], - "filament_z_hop": [ - "0.4" - ], - "compatible_printers": [ - "Sovol SV08 0.2 nozzle", - "Sovol SV08 0.4 nozzle", - "Sovol SV08 0.6 nozzle", - "Sovol SV08 0.8 nozzle" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero ABS.json b/resources/profiles/Sovol/filament/Sovol Zero ABS.json deleted file mode 100644 index ecd862970a..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero ABS.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero ABS", - "inherits": "Generic ABS @System", - "from": "system", - "setting_id": "9pI7op6U4azpfNfb", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_range_low": [ - "230" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "30" - ], - "fan_cooling_layer_time": [ - "30" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "30" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ], - "activate_air_filtration": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "complete_print_exhaust_fan_speed": [ - "50" - ], - "during_print_exhaust_fan_speed": [ - "50" - ], - "additional_cooling_fan_speed": [ - "0" - ], - "compatible_printers": [ - "Sovol Zero 0.4 nozzle" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero PC.json b/resources/profiles/Sovol/filament/Sovol Zero PC.json deleted file mode 100644 index ac866620dd..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero PC.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero PC", - "inherits": "Generic PC @System", - "from": "system", - "setting_id": "vuuZXnlrMgUKtSI0", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "compatible_printers": [ - "Sovol Zero 0.4 nozzle" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "nozzle_temperature": [ - "270" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "hot_plate_temp": [ - "110" - ], - "hot_plate_temp_initial_layer": [ - "110" - ], - "fan_min_speed": [ - "10" - ], - "fan_max_speed": [ - "20" - ], - "fan_cooling_layer_time": [ - "40" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "dont_slow_down_outer_wall": "0", - "overhang_fan_speed": [ - "20" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ], - "additional_cooling_fan_speed": "0", - "activate_air_filtration": "1", - "during_print_exhaust_fan_speed": "50", - "complete_print_exhaust_fan_speed": "50" -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json index a458307c64..ce68719ba9 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PETG HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PETG @System", "from": "system", "setting_id": "AfxHmpdOkMDJa2fk", - "filament_id": "GFL99", + "filament_id": "OFymnal9", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PETG.json b/resources/profiles/Sovol/filament/Sovol Zero PETG.json deleted file mode 100644 index e7b328ac6f..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero PETG.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero PETG", - "inherits": "Generic PETG @System", - "from": "system", - "setting_id": "75OJvkXlmbcaHQfW", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "1.0348" - ], - "enable_pressure_advance": "1", - "pressure_advance": "0.046", - "filament_max_volumetric_speed": [ - "15" - ], - "nozzle_temperature_initial_layer": [ - "265" - ], - "nozzle_temperature": [ - "245" - ], - "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" - ] -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json index f7e634386c..6dfb630e0a 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "i9wDnSEIrOBPbOZl", - "filament_id": "GFL99", + "filament_id": "OFzB4uOs", "instantiation": "true", "filament_flow_ratio": [ "1.0348" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json deleted file mode 100644 index b7fb7f63e8..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Basic.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero PLA Basic", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "ZVvOaMwZ7noevsYf", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "21" - ], - "enable_pressure_advance": "1", - "pressure_advance": "0.032", - "compatible_printers": [ - "Sovol Zero 0.4 nozzle" - ], - "nozzle_temperature_initial_layer": [ - "230" - ], - "nozzle_temperature": [ - "210" - ], - "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%" -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json index d6b31b283d..97e4050b8c 100644 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json +++ b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk HS Nozzle.json @@ -4,7 +4,7 @@ "inherits": "Generic PLA @System", "from": "system", "setting_id": "XxEJBNFLRltR2Xwn", - "filament_id": "GFL99", + "filament_id": "OFAO9A7J", "instantiation": "true", "filament_flow_ratio": [ "0.98" diff --git a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json b/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json deleted file mode 100644 index 64c8b8a465..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero PLA Silk.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero PLA Silk", - "inherits": "Generic PLA @System", - "from": "system", - "setting_id": "QowhGzqSwGQoAp1a", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "enable_pressure_advance": "1", - "pressure_advance": "0.029", - "compatible_printers": [ - "Sovol Zero 0.4 nozzle" - ], - "nozzle_temperature_initial_layer": [ - "245" - ], - "nozzle_temperature": [ - "220" - ], - "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": [ - "7" - ], - "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%" -} diff --git a/resources/profiles/Sovol/filament/Sovol Zero TPU.json b/resources/profiles/Sovol/filament/Sovol Zero TPU.json deleted file mode 100644 index 307a58ff01..0000000000 --- a/resources/profiles/Sovol/filament/Sovol Zero TPU.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "type": "filament", - "name": "Sovol Zero TPU", - "inherits": "Generic TPU @System", - "from": "system", - "setting_id": "iZHXx0RyRO096L0z", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "3.2" - ], - "nozzle_temperature": [ - "235" - ], - "nozzle_temperature_initial_layer": [ - "250" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "hot_plate_temp": [ - "85" - ], - "hot_plate_temp_initial_layer": [ - "85" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "80" - ], - "fan_cooling_layer_time": [ - "50" - ], - "full_fan_speed_layer": [ - "3" - ], - "slow_down_layer_time": [ - "5" - ], - "slow_down_min_speed": [ - "10" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "temperature_vitrification": [ - "60" - ], - "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", - "compatible_printers": [ - "Sovol Zero 0.4 nozzle" - ] -} diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json index 45030c23ac..329a91b001 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json index 9128747e51..c9f054af98 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json index a1433ec914..e7bc84ee1a 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json index 5415c845e2..6c555ef1d5 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json @@ -126,6 +126,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 ACE PLA" + "Generic PLA @Sovol SV06 ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json index fe28ebc823..e3e0067e60 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv06_ace_buildplate_model.stl", "bed_texture": "sovol_sv06_ace_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV06 ACE PLA" + "default_materials": "Generic PLA @Sovol SV06 ACE" } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json index 440ff3c88f..5624a3c07f 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE 0.4 nozzle.json @@ -124,6 +124,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV06 Plus ACE PLA" + "Generic PLA @Sovol SV06 Plus ACE" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json index 8ec61bab90..5b034f4359 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus ACE.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv06plus_ace_buildplate_model.stl", "bed_texture": "sovol_sv06plus_ace_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV06 Plus ACE PLA" + "default_materials": "Generic PLA @Sovol SV06 Plus ACE" } diff --git a/resources/profiles/Sovol/machine/Sovol SV07.json b/resources/profiles/Sovol/machine/Sovol SV07.json index 2ac60556da..bd63f8d407 100644 --- a/resources/profiles/Sovol/machine/Sovol SV07.json +++ b/resources/profiles/Sovol/machine/Sovol SV07.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv07_buildplate_model.stl", "bed_texture": "sovol_sv07_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV07 PLA" + "default_materials": "Generic PLA @Sovol SV07" } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json index c81d26c959..441616c542 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.2 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA @SV08 0.2 nozzle" + "Generic PLA @Sovol SV08 0.2 nozzle" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json index 5aa5e4f14b..7defca131b 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.4 nozzle.json @@ -102,6 +102,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json index 2825fb9a83..d49594b4af 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.6 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json index 6510857d6f..576ca16076 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 0.8 nozzle.json @@ -108,6 +108,6 @@ "machine_end_gcode": "END_PRINT\n", "machine_pause_gcode": "PAUSE", "default_filament_profile": [ - "Sovol SV08 PLA" + "Generic PLA @Sovol SV08" ] } diff --git a/resources/profiles/Sovol/machine/Sovol SV08 MAX.json b/resources/profiles/Sovol/machine/Sovol SV08 MAX.json index 92a92a9a1d..df4690f54b 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08 MAX.json +++ b/resources/profiles/Sovol/machine/Sovol SV08 MAX.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv08_max_buildplate_model.stl", "bed_texture": "sovol_sv08_max_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Generic PLA;Generic PLA Silk;Generic ABS;Generic PETG;Polymaker PETG;SUNLU PETG;Generic TPU;Generic PC" + "default_materials": "Generic PLA @Sovol SV08 MAX;Generic PLA Silk @Sovol SV08 MAX;Generic ABS @Sovol SV08 MAX;Generic PETG @Sovol SV08 MAX;Polymaker PETG @Sovol SV08 MAX;SUNLU PETG @Sovol SV08 MAX;Generic TPU @Sovol SV08 MAX;Generic PC @Sovol SV08 MAX" } diff --git a/resources/profiles/Sovol/machine/Sovol SV08.json b/resources/profiles/Sovol/machine/Sovol SV08.json index 2d861f5ef4..c6cee44624 100644 --- a/resources/profiles/Sovol/machine/Sovol SV08.json +++ b/resources/profiles/Sovol/machine/Sovol SV08.json @@ -8,5 +8,5 @@ "bed_model": "sovol_sv08_buildplate_model.stl", "bed_texture": "sovol_sv08_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol SV08 PLA;Sovol SV08 PLA @SV08 0.2 nozzle;Sovol SV08 ABS;Sovol SV08 PETG;Sovol SV08 TPU" + "default_materials": "Generic PLA @Sovol SV08;Generic PLA @Sovol SV08 0.2 nozzle;Generic ABS @Sovol SV08;Generic PETG @Sovol SV08;Generic TPU @Sovol SV08" } diff --git a/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json index f4ae49b7cb..a5699a9eed 100644 --- a/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol Zero 0.4 nozzle.json @@ -107,6 +107,6 @@ "machine_start_gcode": "M140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\nG28\nSTART_PRINT\nG28\nG90\nG1 X0 Y0 F12000\nG1 Z0.300 F600\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nM109 S[nozzle_temperature_initial_layer];wait for extruder temp\n{if first_layer_print_min[1] - 6 > print_bed_min[1]}\nG90\nM83\nG1 E-0.5 F600\nG1 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4} Y{first_layer_print_min[1] - 5} F12000\nG0 Z0.3 F600 ;Move to start position\nG1 E0.200 F600\n{if first_layer_print_max[0] - first_layer_print_min[0] > 50}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{else}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 2} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0])} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{endif}\nG1 E-0.300 F600\nG0 Z1 F600\nG1 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4} Y{first_layer_print_min[1] - 4} F12000\nG0 Z0.3 F600 ;Move to start position\nG1 E0.200 F600\n{if first_layer_print_max[0] - first_layer_print_min[0] > 50}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 4 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{else}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0]) / 2} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X{first_layer_print_min[0] + (first_layer_print_max[0] - first_layer_print_min[0])} E{(first_layer_print_max[0] - first_layer_print_min[0]) / 2 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n{endif}\nG1 E-0.300 F600\nG0 Z5 F600\nM400\n{else}\nG90\nM83\nG1 E-0.300 Z3 F600\nG1 X{print_bed_max[1] / 3} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 Z0.3 F600\nG1 E0.300 F600\nG1 X{print_bed_max[1] / 3 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3} Y1 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*1} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*2} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*3} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*4} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*5} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*6} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*7} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*8} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 X{print_bed_max[1] / 3 + 5*9} E{5 * 0.2} F{outer_wall_volumetric_speed/(24/20) * 60}\nG1 X{print_bed_max[1] / 3 + 5*10} E{5 * 0.2} F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG1 E-0.300 Z3 F600\nM400\n{endif}\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\n\n", "machine_end_gcode": "END_PRINT\n", "default_filament_profile": [ - "Sovol Zero PLA Basic" + "Generic PLA @Sovol Zero" ] } diff --git a/resources/profiles/Sovol/machine/Sovol Zero.json b/resources/profiles/Sovol/machine/Sovol Zero.json index c1ccc64b84..6f99e8f8d0 100644 --- a/resources/profiles/Sovol/machine/Sovol Zero.json +++ b/resources/profiles/Sovol/machine/Sovol Zero.json @@ -8,5 +8,5 @@ "bed_model": "sovol_zero_buildplate_model.stl", "bed_texture": "sovol_zero_buildplate_texture.svg", "hotend_model": "", - "default_materials": "Sovol Zero PLA Basic;Sovol Zero PLA Basic HS Nozzle;Sovol Zero PLA Silk;Sovol Zero PLA Silk HS Nozzle;Sovol Zero ABS;Sovol Zero PETG;Sovol Zero PETG HS Nozzle;Sovol Zero TPU;Sovol Zero PC" + "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" } diff --git a/resources/profiles/Sovol/machine/fdm_machine_common.json b/resources/profiles/Sovol/machine/fdm_machine_common.json index 017b725d2e..0a804a2e5e 100644 --- a/resources/profiles/Sovol/machine/fdm_machine_common.json +++ b/resources/profiles/Sovol/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -113,7 +112,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "z_hop_types": "Normal Lift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", diff --git a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json index 9d44b2f112..ebe3c8679f 100644 --- a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "WQqoRN1avqbX8Pgd", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.08", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json b/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json index 8ab14fe775..9718bacd69 100644 --- a/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json +++ b/resources/profiles/Sovol/process/0.10mm Standard @Sovol SV08 0.2 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "sTiNnwPQInBM8oMT", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.10", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json index f95e107e59..fcc8cb2817 100644 --- a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "EGRlZsIz0TvybH5a", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json index 27723eb6fb..f4fc63ed23 100644 --- a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json +++ b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "1nAnGTBSg9NbEjRl", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json index 5a9ceee897..2f41d5a509 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV01Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "C5l9Xp7PFZJ8EUuI", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json index b86f3c50ab..f46285f806 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV02.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "XGwpYXpDBGmz3IST", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json index 3f5b032956..b4b0c6acaa 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV05.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "hx4TRRO93eAhKRlo", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json index 3c7bc35311..f23714d5aa 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "rDtPKzMhHP85acXh", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json index ab14ae1852..1c62c68ea7 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV06Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "L1YTQWBe8jGxUG5n", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json index ca8fffec79..b11502689c 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "CCj4nI9LPvB6tBwv", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json index 0f1251d22d..e84fae24b7 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV07Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Y7BQqmsJc3sCg5M4", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json index a36b67382e..45a9e0f34d 100644 --- a/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json +++ b/resources/profiles/Sovol/process/0.18mm Optimal @Sovol SV08.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dtNZVowJXglP0ygk", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json b/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json index d4102b9521..bedd71ef41 100644 --- a/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json +++ b/resources/profiles/Sovol/process/0.20mm High-Speed @Sovol SV06.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "S1iAf6JiKSas9AMw", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01.json index a830bec966..56a3c7ad3e 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "CFwXlxanOmqsdA48", "name": "0.20mm Standard @Sovol SV01", - "from": "system", "inherits": "fdm_process_common", + "from": "system", + "setting_id": "CFwXlxanOmqsdA48", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json index 4d7be1276a..298356b0a5 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV01Pro.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "i3AkK2cR13YkyVrJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json index 65a6f16806..836581fbca 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV02.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ASEHMkWIP3Z7M6Eg", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json index 529ffbc648..e53d0f99ee 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV05.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "qz3ogX30ClF0lLRt", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json index 22efbbb514..44bd8afa66 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "vJmKSRBaoZ7y02CV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json index 39f9f21d9c..28c730ac6b 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "7qkFiEhE4BGMZrDJ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json index 45d822eb85..b913b12187 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "cremVs4Sj00nBWtu", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json index 700232a310..511c44ad5f 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "bku5PsptBdjUrbQ6", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json index 4781a94d88..865a30cb6d 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "D6GOAXI1isGTNnfb", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json index 5e8957e16c..8d6484e7f8 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV07Plus.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "88ExWsak5lVw9qYZ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json index 7178632118..84450ca0f0 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "v0m5eV5ZVA813MVP", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json index 32cbc84429..c3da799594 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08 MAX 0.4 nozzle.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "sPSDTG9mKjIOuy4m", "name": "0.20mm Standard @Sovol SV08 MAX 0.4 nozzle", - "from": "system", "inherits": "fdm_process_common", + "from": "system", + "setting_id": "sPSDTG9mKjIOuy4m", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "100%", "layer_height": "0.20", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json index 3411f92dab..3584a15477 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV08.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "vYejAtfzNoeBDq00", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.20", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol Zero 0.4 nozzle.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol Zero 0.4 nozzle.json index 6b1ea0db9a..323553beaa 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol Zero 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol Zero 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "ShJTVnJ492No1j2j", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "1", "max_travel_detour_distance": "100%", "layer_height": "0.20", diff --git a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json index 19862486c1..d4a0610587 100644 --- a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Ydon9OsrFa7A8L1F", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.28", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json index 0b4210b7f3..39612b5a56 100644 --- a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "n7KDWYlaTDObslGp", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.30", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json index aa4c3fb129..3b2cb68b92 100644 --- a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 0.6 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "VGWhB6OKWJrzkfrC", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.30", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 MAX 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 MAX 0.6 nozzle.json index be242638fa..dc8d3df0ba 100644 --- a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 MAX 0.6 nozzle.json +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV08 MAX 0.6 nozzle.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "EhJl99Rdzr3bYnjW", "name": "0.30mm Standard @Sovol SV08 MAX 0.6 nozzle", - "from": "system", "inherits": "fdm_process_common", + "from": "system", + "setting_id": "EhJl99Rdzr3bYnjW", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "100%", "layer_height": "0.30", diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json index 165d9817f9..964172accb 100644 --- a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "hkA5BT13eWBp5BKQ", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.40", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json index ccb9e95529..10e154842a 100644 --- a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 0.8 nozzle.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "THLtL3Q597dBsUgK", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.40", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json index e56135a018..20481d3719 100644 --- a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV08 MAX 0.8 nozzle.json @@ -1,11 +1,10 @@ { "type": "process", - "setting_id": "5UL3y12LS7RXWO0d", "name": "0.40mm Standard @Sovol SV08 MAX 0.8 nozzle", - "from": "system", "inherits": "fdm_process_common", + "from": "system", + "setting_id": "5UL3y12LS7RXWO0d", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "max_travel_detour_distance": "100%", "layer_height": "0.40", diff --git a/resources/profiles/Sovol/process/fdm_process_common.json b/resources/profiles/Sovol/process/fdm_process_common.json index 0d9a2c994f..4f32e17501 100644 --- a/resources/profiles/Sovol/process/fdm_process_common.json +++ b/resources/profiles/Sovol/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Tiertime.json b/resources/profiles/Tiertime.json index 0742e8bce6..a7efecf420 100644 --- a/resources/profiles/Tiertime.json +++ b/resources/profiles/Tiertime.json @@ -1,6 +1,6 @@ { "name": "Tiertime", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "0", "description": "Tiertime configurations", "machine_model_list": [ @@ -360,6 +360,14 @@ "name": "fdm_filament_tpu", "sub_path": "filament/fdm_filament_tpu.json" }, + { + "name": "Generic ABS @Tiertime", + "sub_path": "filament/Generic ABS @Tiertime.json" + }, + { + "name": "Generic ABS @Tiertime 300HS", + "sub_path": "filament/Generic ABS @Tiertime 300HS.json" + }, { "name": "Tiertime ABS", "sub_path": "filament/Tiertime ABS.json" @@ -369,12 +377,12 @@ "sub_path": "filament/Tiertime ABS@300HS.json" }, { - "name": "Tiertime Generic ABS", - "sub_path": "filament/Tiertime Generic ABS.json" + "name": "Generic ASA @Tiertime", + "sub_path": "filament/Generic ASA @Tiertime.json" }, { - "name": "Tiertime Generic ABS@300HS", - "sub_path": "filament/Tiertime Generic ABS@300HS.json" + "name": "Generic ASA @Tiertime 300HS", + "sub_path": "filament/Generic ASA @Tiertime 300HS.json" }, { "name": "Tiertime ASA", @@ -385,52 +393,44 @@ "sub_path": "filament/Tiertime ASA@300HS.json" }, { - "name": "Tiertime Generic ASA", - "sub_path": "filament/Tiertime Generic ASA.json" + "name": "Generic BVOH @Tiertime", + "sub_path": "filament/Generic BVOH @Tiertime.json" }, { - "name": "Tiertime Generic ASA@300HS", - "sub_path": "filament/Tiertime Generic ASA@300HS.json" + "name": "Generic BVOH @Tiertime 300HS", + "sub_path": "filament/Generic BVOH @Tiertime 300HS.json" }, { - "name": "Tiertime Generic BVOH", - "sub_path": "filament/Tiertime Generic BVOH.json" + "name": "Generic EVA @Tiertime", + "sub_path": "filament/Generic EVA @Tiertime.json" }, { - "name": "Tiertime Generic BVOH@300HS", - "sub_path": "filament/Tiertime Generic BVOH@300HS.json" + "name": "Generic EVA @Tiertime 300HS", + "sub_path": "filament/Generic EVA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic EVA", - "sub_path": "filament/Tiertime Generic EVA.json" + "name": "Generic HIPS @Tiertime", + "sub_path": "filament/Generic HIPS @Tiertime.json" }, { - "name": "Tiertime Generic EVA@300HS", - "sub_path": "filament/Tiertime Generic EVA@300HS.json" + "name": "Generic HIPS @Tiertime 300HS", + "sub_path": "filament/Generic HIPS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic HIPS", - "sub_path": "filament/Tiertime Generic HIPS.json" + "name": "Generic PA @Tiertime", + "sub_path": "filament/Generic PA @Tiertime.json" }, { - "name": "Tiertime Generic HIPS@300HS", - "sub_path": "filament/Tiertime Generic HIPS@300HS.json" + "name": "Generic PA @Tiertime 300HS", + "sub_path": "filament/Generic PA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PA", - "sub_path": "filament/Tiertime Generic PA.json" + "name": "Generic PA-CF @Tiertime", + "sub_path": "filament/Generic PA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PA-CF", - "sub_path": "filament/Tiertime Generic PA-CF.json" - }, - { - "name": "Tiertime Generic PA-CF@300HS", - "sub_path": "filament/Tiertime Generic PA-CF@300HS.json" - }, - { - "name": "Tiertime Generic PA@300HS", - "sub_path": "filament/Tiertime Generic PA@300HS.json" + "name": "Generic PA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PA-CF @Tiertime 300HS.json" }, { "name": "Tiertime PA6-CF", @@ -441,12 +441,12 @@ "sub_path": "filament/Tiertime PA6-CF@300HS.json" }, { - "name": "Tiertime Generic PC", - "sub_path": "filament/Tiertime Generic PC.json" + "name": "Generic PC @Tiertime", + "sub_path": "filament/Generic PC @Tiertime.json" }, { - "name": "Tiertime Generic PC@300HS", - "sub_path": "filament/Tiertime Generic PC@300HS.json" + "name": "Generic PC @Tiertime 300HS", + "sub_path": "filament/Generic PC @Tiertime 300HS.json" }, { "name": "Tiertime PC", @@ -457,44 +457,44 @@ "sub_path": "filament/Tiertime PC@300HS.json" }, { - "name": "Tiertime Generic PCTG", - "sub_path": "filament/Tiertime Generic PCTG.json" + "name": "Generic PCTG @Tiertime", + "sub_path": "filament/Generic PCTG @Tiertime.json" }, { - "name": "Tiertime Generic PCTG@300HS", - "sub_path": "filament/Tiertime Generic PCTG@300HS.json" + "name": "Generic PCTG @Tiertime 300HS", + "sub_path": "filament/Generic PCTG @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PE", - "sub_path": "filament/Tiertime Generic PE.json" + "name": "Generic PE @Tiertime", + "sub_path": "filament/Generic PE @Tiertime.json" }, { - "name": "Tiertime Generic PE-CF", - "sub_path": "filament/Tiertime Generic PE-CF.json" + "name": "Generic PE @Tiertime 300HS", + "sub_path": "filament/Generic PE @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PE-CF@300HS", - "sub_path": "filament/Tiertime Generic PE-CF@300HS.json" + "name": "Generic PE-CF @Tiertime", + "sub_path": "filament/Generic PE-CF @Tiertime.json" }, { - "name": "Tiertime Generic PE@300HS", - "sub_path": "filament/Tiertime Generic PE@300HS.json" + "name": "Generic PE-CF @Tiertime 300HS", + "sub_path": "filament/Generic PE-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PETG", - "sub_path": "filament/Tiertime Generic PETG.json" + "name": "Generic PETG @Tiertime", + "sub_path": "filament/Generic PETG @Tiertime.json" }, { - "name": "Tiertime Generic PETG-CF", - "sub_path": "filament/Tiertime Generic PETG-CF.json" + "name": "Generic PETG @Tiertime 300HS", + "sub_path": "filament/Generic PETG @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PETG-CF@300HS", - "sub_path": "filament/Tiertime Generic PETG-CF@300HS.json" + "name": "Generic PETG-CF @Tiertime", + "sub_path": "filament/Generic PETG-CF @Tiertime.json" }, { - "name": "Tiertime Generic PETG@300HS", - "sub_path": "filament/Tiertime Generic PETG@300HS.json" + "name": "Generic PETG-CF @Tiertime 300HS", + "sub_path": "filament/Generic PETG-CF @Tiertime 300HS.json" }, { "name": "Tiertime PET-CF", @@ -513,44 +513,44 @@ "sub_path": "filament/Tiertime PETG@300HS.json" }, { - "name": "Tiertime Generic PHA", - "sub_path": "filament/Tiertime Generic PHA.json" + "name": "Generic PHA @Tiertime", + "sub_path": "filament/Generic PHA @Tiertime.json" }, { - "name": "Tiertime Generic PHA@300HS", - "sub_path": "filament/Tiertime Generic PHA@300HS.json" + "name": "Generic PHA @Tiertime 300HS", + "sub_path": "filament/Generic PHA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA", - "sub_path": "filament/Tiertime Generic PLA.json" + "name": "Generic PLA @Tiertime", + "sub_path": "filament/Generic PLA @Tiertime.json" }, { - "name": "Tiertime Generic PLA High Speed", - "sub_path": "filament/Tiertime Generic PLA High Speed.json" + "name": "Generic PLA @Tiertime 300HS", + "sub_path": "filament/Generic PLA @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA High Speed@300HS", - "sub_path": "filament/Tiertime Generic PLA High Speed@300HS.json" + "name": "Generic PLA High Speed @Tiertime", + "sub_path": "filament/Generic PLA High Speed @Tiertime.json" }, { - "name": "Tiertime Generic PLA Silk", - "sub_path": "filament/Tiertime Generic PLA Silk.json" + "name": "Generic PLA High Speed @Tiertime 300HS", + "sub_path": "filament/Generic PLA High Speed @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA Silk@300HS", - "sub_path": "filament/Tiertime Generic PLA Silk@300HS.json" + "name": "Generic PLA Silk @Tiertime", + "sub_path": "filament/Generic PLA Silk @Tiertime.json" }, { - "name": "Tiertime Generic PLA-CF", - "sub_path": "filament/Tiertime Generic PLA-CF.json" + "name": "Generic PLA Silk @Tiertime 300HS", + "sub_path": "filament/Generic PLA Silk @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PLA-CF@300HS", - "sub_path": "filament/Tiertime Generic PLA-CF@300HS.json" + "name": "Generic PLA-CF @Tiertime", + "sub_path": "filament/Generic PLA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PLA@300HS", - "sub_path": "filament/Tiertime Generic PLA@300HS.json" + "name": "Generic PLA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PLA-CF @Tiertime 300HS.json" }, { "name": "Tiertime PLA", @@ -569,68 +569,68 @@ "sub_path": "filament/Tiertime PLA@300HS.json" }, { - "name": "Tiertime Generic PP", - "sub_path": "filament/Tiertime Generic PP.json" + "name": "Generic PP @Tiertime", + "sub_path": "filament/Generic PP @Tiertime.json" }, { - "name": "Tiertime Generic PP-CF", - "sub_path": "filament/Tiertime Generic PP-CF.json" + "name": "Generic PP @Tiertime 300HS", + "sub_path": "filament/Generic PP @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PP-CF@300HS", - "sub_path": "filament/Tiertime Generic PP-CF@300HS.json" + "name": "Generic PP-CF @Tiertime", + "sub_path": "filament/Generic PP-CF @Tiertime.json" }, { - "name": "Tiertime Generic PP-GF", - "sub_path": "filament/Tiertime Generic PP-GF.json" + "name": "Generic PP-CF @Tiertime 300HS", + "sub_path": "filament/Generic PP-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PP-GF@300HS", - "sub_path": "filament/Tiertime Generic PP-GF@300HS.json" + "name": "Generic PP-GF @Tiertime", + "sub_path": "filament/Generic PP-GF @Tiertime.json" }, { - "name": "Tiertime Generic PP@300HS", - "sub_path": "filament/Tiertime Generic PP@300HS.json" + "name": "Generic PP-GF @Tiertime 300HS", + "sub_path": "filament/Generic PP-GF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPA-CF", - "sub_path": "filament/Tiertime Generic PPA-CF.json" + "name": "Generic PPA-CF @Tiertime", + "sub_path": "filament/Generic PPA-CF @Tiertime.json" }, { - "name": "Tiertime Generic PPA-CF@300HS", - "sub_path": "filament/Tiertime Generic PPA-CF@300HS.json" + "name": "Generic PPA-CF @Tiertime 300HS", + "sub_path": "filament/Generic PPA-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPA-GF", - "sub_path": "filament/Tiertime Generic PPA-GF.json" + "name": "Generic PPA-GF @Tiertime", + "sub_path": "filament/Generic PPA-GF @Tiertime.json" }, { - "name": "Tiertime Generic PPA-GF@300HS", - "sub_path": "filament/Tiertime Generic PPA-GF@300HS.json" + "name": "Generic PPA-GF @Tiertime 300HS", + "sub_path": "filament/Generic PPA-GF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPS", - "sub_path": "filament/Tiertime Generic PPS.json" + "name": "Generic PPS @Tiertime", + "sub_path": "filament/Generic PPS @Tiertime.json" }, { - "name": "Tiertime Generic PPS-CF", - "sub_path": "filament/Tiertime Generic PPS-CF.json" + "name": "Generic PPS @Tiertime 300HS", + "sub_path": "filament/Generic PPS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PPS-CF@300HS", - "sub_path": "filament/Tiertime Generic PPS-CF@300HS.json" + "name": "Generic PPS-CF @Tiertime", + "sub_path": "filament/Generic PPS-CF @Tiertime.json" }, { - "name": "Tiertime Generic PPS@300HS", - "sub_path": "filament/Tiertime Generic PPS@300HS.json" + "name": "Generic PPS-CF @Tiertime 300HS", + "sub_path": "filament/Generic PPS-CF @Tiertime 300HS.json" }, { - "name": "Tiertime Generic PVA", - "sub_path": "filament/Tiertime Generic PVA.json" + "name": "Generic PVA @Tiertime", + "sub_path": "filament/Generic PVA @Tiertime.json" }, { - "name": "Tiertime Generic PVA@300HS", - "sub_path": "filament/Tiertime Generic PVA@300HS.json" + "name": "Generic PVA @Tiertime 300HS", + "sub_path": "filament/Generic PVA @Tiertime 300HS.json" }, { "name": "Tiertime PVA", @@ -641,20 +641,20 @@ "sub_path": "filament/Tiertime PVA@300HS.json" }, { - "name": "Tiertime Generic SBS", - "sub_path": "filament/Tiertime Generic SBS.json" + "name": "Generic SBS @Tiertime", + "sub_path": "filament/Generic SBS @Tiertime.json" }, { - "name": "Tiertime Generic SBS@300HS", - "sub_path": "filament/Tiertime Generic SBS@300HS.json" + "name": "Generic SBS @Tiertime 300HS", + "sub_path": "filament/Generic SBS @Tiertime 300HS.json" }, { - "name": "Tiertime Generic TPU", - "sub_path": "filament/Tiertime Generic TPU.json" + "name": "Generic TPU @Tiertime", + "sub_path": "filament/Generic TPU @Tiertime.json" }, { - "name": "Tiertime Generic TPU@300HS", - "sub_path": "filament/Tiertime Generic TPU@300HS.json" + "name": "Generic TPU @Tiertime 300HS", + "sub_path": "filament/Generic TPU @Tiertime 300HS.json" }, { "name": "Tiertime TPU 95A", diff --git a/resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json new file mode 100644 index 0000000000..e9d7aca6fc --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime 300HS.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic ABS @Tiertime 300HS", + "inherits": "fdm_filament_abs", + "renamed_from": "Tiertime Generic ABS@300HS;Tiertime Generic ABS300HS", + "from": "system", + "setting_id": "CDku986CRCZQpwu4", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "fan_max_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json new file mode 100644 index 0000000000..7e8f606a6e --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic ABS @Tiertime.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic ABS @Tiertime", + "inherits": "fdm_filament_abs", + "renamed_from": "Tiertime Generic ABS", + "from": "system", + "setting_id": "mDRlI9biZBn9sNlS", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "fan_max_speed": [ + "20" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json new file mode 100644 index 0000000000..adffa21725 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime 300HS.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ASA @Tiertime 300HS", + "inherits": "fdm_filament_asa", + "renamed_from": "Tiertime Generic ASA@300HS;Tiertime Generic ASA300HS", + "from": "system", + "setting_id": "HLh2XxQuVOa86efy", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json new file mode 100644 index 0000000000..1529e0f702 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic ASA @Tiertime.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "name": "Generic ASA @Tiertime", + "inherits": "fdm_filament_asa", + "renamed_from": "Tiertime Generic ASA", + "from": "system", + "setting_id": "kGrTR0sC37w9Qi3b", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp": [ + "100" + ], + "hot_plate_temp_initial_layer": [ + "100" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "100" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json new file mode 100644 index 0000000000..9db52386cb --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime 300HS.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic BVOH @Tiertime 300HS", + "inherits": "fdm_filament_bvoh", + "renamed_from": "Tiertime Generic BVOH@300HS;Tiertime Generic BVOH300HS", + "from": "system", + "setting_id": "aCtg07TUbh6I9XPo", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json new file mode 100644 index 0000000000..fd6e2a529f --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic BVOH @Tiertime.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic BVOH @Tiertime", + "inherits": "fdm_filament_bvoh", + "renamed_from": "Tiertime Generic BVOH", + "from": "system", + "setting_id": "b642QISGuDZ18fQ8", + "filament_id": "OFo2UF2C", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json new file mode 100644 index 0000000000..f066563e4c --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime 300HS.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "Generic EVA @Tiertime 300HS", + "inherits": "fdm_filament_eva", + "renamed_from": "Tiertime Generic EVA@300HS;Tiertime Generic EVA300HS", + "from": "system", + "setting_id": "q5f3UKuj7KOtiNkH", + "filament_id": "OFCD8qiU", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "21.99" + ], + "filament_density": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "EVA" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json new file mode 100644 index 0000000000..ec49722cae --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic EVA @Tiertime.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "Generic EVA @Tiertime", + "inherits": "fdm_filament_eva", + "renamed_from": "Tiertime Generic EVA", + "from": "system", + "setting_id": "NTY4MeZtxt16HNAV", + "filament_id": "OFCD8qiU", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "filament_cost": [ + "21.99" + ], + "filament_density": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "EVA" + ], + "hot_plate_temp": [ + "55" + ], + "hot_plate_temp_initial_layer": [ + "55" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json new file mode 100644 index 0000000000..8eaa300930 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime 300HS.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic HIPS @Tiertime 300HS", + "inherits": "fdm_filament_hips", + "renamed_from": "Tiertime Generic HIPS@300HS;Tiertime Generic HIPS300HS", + "from": "system", + "setting_id": "ee157A7VEkDzMh61", + "filament_id": "OFsFon5l", + "instantiation": "true", + "filament_is_support": [ + "1" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json new file mode 100644 index 0000000000..519e690ed6 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic HIPS @Tiertime.json @@ -0,0 +1,19 @@ +{ + "type": "filament", + "name": "Generic HIPS @Tiertime", + "inherits": "fdm_filament_hips", + "renamed_from": "Tiertime Generic HIPS", + "from": "system", + "setting_id": "3Vm99hmTMTFPKNGk", + "filament_id": "OFsFon5l", + "instantiation": "true", + "filament_is_support": [ + "1" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json new file mode 100644 index 0000000000..3c97aa11a7 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PA @Tiertime 300HS.json @@ -0,0 +1,58 @@ +{ + "type": "filament", + "name": "Generic PA @Tiertime 300HS", + "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA@300HS;Tiertime Generic PA300HS", + "from": "system", + "filament_id": "OFg8ndtj", + "setting_id": "yGD1puWjH2QFacXJ", + "instantiation": "true", + "chamber_temperatures": [ + "60" + ], + "fan_cooling_layer_time": [ + "65" + ], + "fan_max_speed": [ + "85" + ], + "fan_min_speed": [ + "40" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PA @Tiertime.json new file mode 100644 index 0000000000..1ff338b317 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PA @Tiertime.json @@ -0,0 +1,58 @@ +{ + "type": "filament", + "name": "Generic PA @Tiertime", + "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA", + "from": "system", + "filament_id": "OFg8ndtj", + "setting_id": "u37BwUzY2vt6zqjd", + "instantiation": "true", + "chamber_temperatures": [ + "60" + ], + "fan_cooling_layer_time": [ + "65" + ], + "fan_max_speed": [ + "85" + ], + "fan_min_speed": [ + "40" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "95" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..3feade702d --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime 300HS.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Tiertime 300HS", + "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA-CF@300HS;Tiertime Generic PA-CF300HS", + "from": "system", + "filament_id": "OFQLcbps", + "setting_id": "nZprcLHiLIAKvqtu", + "instantiation": "true", + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_type": [ + "PA-CF" + ], + "full_fan_speed_layer": [ + "2" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "temperature_vitrification": [ + "170" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json new file mode 100644 index 0000000000..fe57cb7806 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PA-CF @Tiertime.json @@ -0,0 +1,40 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Tiertime", + "inherits": "fdm_filament_pa", + "renamed_from": "Tiertime Generic PA-CF", + "from": "system", + "filament_id": "OFQLcbps", + "setting_id": "1oq9XQtCUcV9wGYV", + "instantiation": "true", + "fan_cooling_layer_time": [ + "5" + ], + "fan_max_speed": [ + "30" + ], + "fan_min_speed": [ + "10" + ], + "filament_type": [ + "PA-CF" + ], + "full_fan_speed_layer": [ + "2" + ], + "overhang_fan_speed": [ + "40" + ], + "overhang_fan_threshold": [ + "0%" + ], + "temperature_vitrification": [ + "170" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json new file mode 100644 index 0000000000..591d1c9208 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PC @Tiertime 300HS.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Tiertime 300HS", + "inherits": "fdm_filament_pc", + "renamed_from": "Tiertime Generic PC@300HS;Tiertime Generic PC300HS", + "from": "system", + "setting_id": "cqm5YuWHhzXdvE0M", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PC @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PC @Tiertime.json new file mode 100644 index 0000000000..8c36c18828 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PC @Tiertime.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PC @Tiertime", + "inherits": "fdm_filament_pc", + "renamed_from": "Tiertime Generic PC", + "from": "system", + "setting_id": "ILOqHUkf5W9fcRic", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json new file mode 100644 index 0000000000..25eb1b1b76 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime 300HS.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "Generic PCTG @Tiertime 300HS", + "inherits": "fdm_filament_pctg", + "renamed_from": "Tiertime Generic PCTG@300HS;Tiertime Generic PCTG300HS", + "from": "system", + "setting_id": "1VNFGuUO3KSO6Yfr", + "filament_id": "OFu1evlr", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "28.99" + ], + "filament_density": [ + "1.29" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json new file mode 100644 index 0000000000..4d091cde32 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PCTG @Tiertime.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "Generic PCTG @Tiertime", + "inherits": "fdm_filament_pctg", + "renamed_from": "Tiertime Generic PCTG", + "from": "system", + "setting_id": "tJIMGMxg0hRSfL95", + "filament_id": "OFu1evlr", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "10" + ], + "filament_cost": [ + "28.99" + ], + "filament_density": [ + "1.29" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "temperature_vitrification": [ + "90" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json new file mode 100644 index 0000000000..a1fa9c5859 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PE @Tiertime 300HS.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic PE @Tiertime 300HS", + "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE@300HS;Tiertime Generic PE300HS", + "from": "system", + "setting_id": "CO9KWZrfkTYBnB4X", + "filament_id": "OFPklMI1", + "instantiation": "true", + "filament_cost": [ + "40.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PE @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PE @Tiertime.json new file mode 100644 index 0000000000..0684af67d8 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PE @Tiertime.json @@ -0,0 +1,43 @@ +{ + "type": "filament", + "name": "Generic PE @Tiertime", + "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE", + "from": "system", + "setting_id": "2U06Qrlxin8nLr9s", + "filament_id": "OFPklMI1", + "instantiation": "true", + "filament_cost": [ + "40.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..11a6680550 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime 300HS.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "name": "Generic PE-CF @Tiertime 300HS", + "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE-CF@300HS;Tiertime Generic PE-CF300HS", + "from": "system", + "setting_id": "512vfRIxs8uwOBpP", + "filament_id": "OFd0Fv0k", + "instantiation": "true", + "filament_cost": [ + "65.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PE-CF" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json new file mode 100644 index 0000000000..ecc5a74d8c --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PE-CF @Tiertime.json @@ -0,0 +1,46 @@ +{ + "type": "filament", + "name": "Generic PE-CF @Tiertime", + "inherits": "fdm_filament_pe", + "renamed_from": "Tiertime Generic PE-CF", + "from": "system", + "setting_id": "QWIMNxCCZ9URxMjo", + "filament_id": "OFd0Fv0k", + "instantiation": "true", + "filament_cost": [ + "65.99" + ], + "filament_density": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PE-CF" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "210" + ], + "nozzle_temperature_range_high": [ + "220" + ], + "nozzle_temperature_range_low": [ + "175" + ], + "temperature_vitrification": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json new file mode 100644 index 0000000000..e65d53bc71 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime 300HS.json @@ -0,0 +1,73 @@ +{ + "type": "filament", + "name": "Generic PETG @Tiertime 300HS", + "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG@300HS;Tiertime Generic PETG300HS", + "from": "system", + "setting_id": "btlSAAZFdFgnfIqh", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json new file mode 100644 index 0000000000..cdf4a2ba88 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PETG @Tiertime.json @@ -0,0 +1,73 @@ +{ + "type": "filament", + "name": "Generic PETG @Tiertime", + "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG", + "from": "system", + "setting_id": "JwdH78YQ3v5XxsIq", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "10%" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..2193ee85fe --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime 300HS.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Tiertime 300HS", + "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG-CF@300HS;Tiertime Generic PETG-CF300HS", + "from": "system", + "setting_id": "pnBek08LG30iqOmr", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PETG-CF" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "5" + ], + "filament_max_volumetric_speed": [ + "11.5" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json new file mode 100644 index 0000000000..42b67f2c6d --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PETG-CF @Tiertime.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "Generic PETG-CF @Tiertime", + "inherits": "fdm_filament_pet", + "renamed_from": "Tiertime Generic PETG-CF", + "from": "system", + "setting_id": "97ZKNZS7uHaNzgLJ", + "filament_id": "OFoYSJKi", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_cost": [ + "34.99" + ], + "filament_density": [ + "1.25" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PETG-CF" + ], + "hot_plate_temp": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_threshold": [ + "10%" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_layer_time": [ + "6" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "5" + ], + "filament_max_volumetric_speed": [ + "11.5" + ], + "overhang_fan_speed": [ + "100" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json new file mode 100644 index 0000000000..d7d10eedfc --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime 300HS.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PHA @Tiertime 300HS", + "inherits": "fdm_filament_pha", + "renamed_from": "Tiertime Generic PHA@300HS;Tiertime Generic PHA300HS", + "from": "system", + "setting_id": "cdIDNHr9YR5p1gQx", + "filament_id": "OF74KeQR", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json new file mode 100644 index 0000000000..f0565e38a2 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PHA @Tiertime.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PHA @Tiertime", + "inherits": "fdm_filament_pha", + "renamed_from": "Tiertime Generic PHA", + "from": "system", + "setting_id": "GvzA9Y6mP5a767Qb", + "filament_id": "OF74KeQR", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json new file mode 100644 index 0000000000..58c56fee5d --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime 300HS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA @Tiertime 300HS", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA@300HS;Tiertime Generic PLA300HS", + "from": "system", + "setting_id": "VdXotPCaBzW0DswJ", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json new file mode 100644 index 0000000000..5f8aaf4229 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA @Tiertime.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA @Tiertime", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA", + "from": "system", + "setting_id": "RuyaWPyP41WHbU7p", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json new file mode 100644 index 0000000000..779cc6ca4e --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime 300HS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Tiertime 300HS", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA High Speed@300HS;Tiertime Generic PLA High Speed300HS", + "from": "system", + "setting_id": "cDQTrE11kyvmtj6l", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json new file mode 100644 index 0000000000..c88496b0e6 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA High Speed @Tiertime.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic PLA High Speed @Tiertime", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA High Speed", + "from": "system", + "setting_id": "HFwoDRXx0L72uTKc", + "filament_id": "OFmpMwxS", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json new file mode 100644 index 0000000000..ba4745b50c --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime 300HS.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Tiertime 300HS", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA Silk@300HS;Tiertime Generic PLA Silk300HS", + "from": "system", + "setting_id": "pXFxVcPY3aVixOKU", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json new file mode 100644 index 0000000000..a2cbb3f4c4 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA Silk @Tiertime.json @@ -0,0 +1,31 @@ +{ + "type": "filament", + "name": "Generic PLA Silk @Tiertime", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA Silk", + "from": "system", + "setting_id": "5R7nTGblzuEWfdog", + "filament_id": "OFesA6rF", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_max_volumetric_speed": [ + "7.5" + ], + "filament_retraction_length": [ + "0.5" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..d4ceebf2db --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime 300HS.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Tiertime 300HS", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA-CF@300HS;Tiertime Generic PLA-CF300HS", + "from": "system", + "setting_id": "CVks3a5cABQw38Ia", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_layer_time": [ + "7" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json new file mode 100644 index 0000000000..306ff427aa --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PLA-CF @Tiertime.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Tiertime", + "inherits": "fdm_filament_pla", + "renamed_from": "Tiertime Generic PLA-CF", + "from": "system", + "setting_id": "SSHFL8Wbk46BaTYF", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "additional_cooling_fan_speed": [ + "0" + ], + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "required_nozzle_HRC": [ + "40" + ], + "slow_down_layer_time": [ + "7" + ], + "fan_cooling_layer_time": [ + "80" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "60" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json new file mode 100644 index 0000000000..b79c34b466 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP @Tiertime 300HS.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PP @Tiertime 300HS", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP@300HS;Tiertime Generic PP300HS", + "from": "system", + "setting_id": "BmIuSlyYKMw76mqs", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PP @Tiertime.json new file mode 100644 index 0000000000..0b7361dc78 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP @Tiertime.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PP @Tiertime", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP", + "from": "system", + "setting_id": "hbt3RXCxomod1cBQ", + "filament_id": "OF1UNk9P", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..e5a08307fa --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime 300HS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PP-CF @Tiertime 300HS", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-CF@300HS;Tiertime Generic PP-CF300HS", + "from": "system", + "setting_id": "u1Sqh9bCLFQvJxoS", + "filament_id": "OFXkm8q1", + "instantiation": "true", + "filament_cost": [ + "77.99" + ], + "filament_density": [ + "1.01" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-CF" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json new file mode 100644 index 0000000000..4c8abaa8ce --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP-CF @Tiertime.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PP-CF @Tiertime", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-CF", + "from": "system", + "setting_id": "2giqoHCbRKiAuTyB", + "filament_id": "OFXkm8q1", + "instantiation": "true", + "filament_cost": [ + "77.99" + ], + "filament_density": [ + "1.01" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-CF" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json new file mode 100644 index 0000000000..820f415b25 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime 300HS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PP-GF @Tiertime 300HS", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-GF@300HS;Tiertime Generic PP-GF300HS", + "from": "system", + "setting_id": "Aiw0kkL0EFLNZ0zB", + "filament_id": "OFsijjtH", + "instantiation": "true", + "filament_cost": [ + "59.99" + ], + "filament_density": [ + "1.05" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-GF" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json new file mode 100644 index 0000000000..930f2d7870 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PP-GF @Tiertime.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PP-GF @Tiertime", + "inherits": "fdm_filament_pp", + "renamed_from": "Tiertime Generic PP-GF", + "from": "system", + "setting_id": "HQaX19e4JViPTQn0", + "filament_id": "OFsijjtH", + "instantiation": "true", + "filament_cost": [ + "59.99" + ], + "filament_density": [ + "1.05" + ], + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PP-GF" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..6402b8a7c9 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime 300HS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PPA-CF @Tiertime 300HS", + "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-CF@300HS;Tiertime Generic PPA-CF300HS", + "from": "system", + "setting_id": "yEjRoG6UAmEBAsTg", + "filament_id": "OF8tPByX", + "instantiation": "true", + "filament_type": [ + "PPA-CF" + ], + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "overhang_fan_threshold": [ + "25%" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json new file mode 100644 index 0000000000..845cd1f1f3 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPA-CF @Tiertime.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PPA-CF @Tiertime", + "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-CF", + "from": "system", + "setting_id": "C3VjtPXIQ9CikaQH", + "filament_id": "OF8tPByX", + "instantiation": "true", + "filament_type": [ + "PPA-CF" + ], + "fan_max_speed": [ + "35" + ], + "filament_max_volumetric_speed": [ + "6.5" + ], + "overhang_fan_threshold": [ + "25%" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json new file mode 100644 index 0000000000..75a81d0aff --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime 300HS.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PPA-GF @Tiertime 300HS", + "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-GF@300HS;Tiertime Generic PPA-GF300HS", + "from": "system", + "setting_id": "9088HrpGRDIqqxTs", + "filament_id": "OF8Tlg47", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PPA-GF" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json new file mode 100644 index 0000000000..7ec50bd2f4 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPA-GF @Tiertime.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic PPA-GF @Tiertime", + "inherits": "fdm_filament_ppa", + "renamed_from": "Tiertime Generic PPA-GF", + "from": "system", + "setting_id": "jGP0en9vTFNmj5AJ", + "filament_id": "OF8Tlg47", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "6" + ], + "filament_type": [ + "PPA-GF" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json new file mode 100644 index 0000000000..bd804b9ffc --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime 300HS.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PPS @Tiertime 300HS", + "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS@300HS;Tiertime Generic PPS300HS", + "from": "system", + "setting_id": "KIspUdArMQzvDtcX", + "filament_id": "OFq9svOz", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json new file mode 100644 index 0000000000..dbb381012e --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPS @Tiertime.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PPS @Tiertime", + "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS", + "from": "system", + "setting_id": "NCTW11dGCzTxasjU", + "filament_id": "OFq9svOz", + "instantiation": "true", + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json new file mode 100644 index 0000000000..f53a77c9c6 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime 300HS.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Generic PPS-CF @Tiertime 300HS", + "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS-CF@300HS;Tiertime Generic PPS-CF300HS", + "from": "system", + "setting_id": "E7mVBEFECdf1mhXE", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "fan_max_speed": [ + "30" + ], + "filament_density": [ + "1.3" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_type": [ + "PPS-CF" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "required_nozzle_HRC": [ + "40" + ], + "temperature_vitrification": [ + "220" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json new file mode 100644 index 0000000000..3e4e15da7d --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PPS-CF @Tiertime.json @@ -0,0 +1,37 @@ +{ + "type": "filament", + "name": "Generic PPS-CF @Tiertime", + "inherits": "fdm_filament_pps", + "renamed_from": "Tiertime Generic PPS-CF", + "from": "system", + "setting_id": "QUPOb7dBkg6bPul2", + "filament_id": "OF6rdQ6M", + "instantiation": "true", + "fan_max_speed": [ + "30" + ], + "filament_density": [ + "1.3" + ], + "filament_max_volumetric_speed": [ + "3" + ], + "filament_type": [ + "PPS-CF" + ], + "nozzle_temperature_range_high": [ + "350" + ], + "required_nozzle_HRC": [ + "40" + ], + "temperature_vitrification": [ + "220" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json new file mode 100644 index 0000000000..2efe590fb6 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime 300HS.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PVA @Tiertime 300HS", + "inherits": "fdm_filament_pva", + "renamed_from": "Tiertime Generic PVA@300HS;Tiertime Generic PVA300HS", + "from": "system", + "setting_id": "E8fgXFvjTnIpqdrg", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json new file mode 100644 index 0000000000..588648b8b0 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic PVA @Tiertime.json @@ -0,0 +1,28 @@ +{ + "type": "filament", + "name": "Generic PVA @Tiertime", + "inherits": "fdm_filament_pva", + "renamed_from": "Tiertime Generic PVA", + "from": "system", + "setting_id": "6R2BduAh4ASmGbDd", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "20" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json new file mode 100644 index 0000000000..f3860b4e64 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime 300HS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic SBS @Tiertime 300HS", + "inherits": "fdm_filament_sbs", + "renamed_from": "Tiertime Generic SBS@300HS;Tiertime Generic SBS300HS", + "from": "system", + "setting_id": "nS6aGQgepNoAjumo", + "filament_id": "OFhQfUQY", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json new file mode 100644 index 0000000000..7c4751aa34 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic SBS @Tiertime.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic SBS @Tiertime", + "inherits": "fdm_filament_sbs", + "renamed_from": "Tiertime Generic SBS", + "from": "system", + "setting_id": "nyv523sDXK9fDbtb", + "filament_id": "OFhQfUQY", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json new file mode 100644 index 0000000000..2d52d479d3 --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime 300HS.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic TPU @Tiertime 300HS", + "inherits": "fdm_filament_tpu", + "renamed_from": "Tiertime Generic TPU@300HS;Tiertime Generic TPU300HS", + "from": "system", + "filament_id": "OFgbpcy9", + "setting_id": "99UYNDy3zV3bChRG", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Tiertime UP300 HS 0.4 nozzle", + "Tiertime UP600 HS 0.4 nozzle", + "Tiertime UP600 HS 0.6 nozzle", + "Tiertime UP600 HS 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif} \n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} diff --git a/resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json new file mode 100644 index 0000000000..a32f1173dc --- /dev/null +++ b/resources/profiles/Tiertime/filament/Generic TPU @Tiertime.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "name": "Generic TPU @Tiertime", + "inherits": "fdm_filament_tpu", + "renamed_from": "Tiertime Generic TPU", + "from": "system", + "filament_id": "OFgbpcy9", + "setting_id": "UCowa7X5TZwXBJWe", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + "Tiertime UP400 Pro 0.4 nozzle", + "Tiertime UP400 Pro 0.6 nozzle", + "Tiertime UP400 Pro 0.8 nozzle", + "Tiertime UP310 Pro 0.4 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif} \n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} diff --git a/resources/profiles/Tiertime/filament/Tiertime ABS.json b/resources/profiles/Tiertime/filament/Tiertime ABS.json index 58b1849335..4ff6b5c8fd 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ABS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ABS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00", + "filament_id": "OFNQKF0M", "setting_id": "uAtyf2jCQEcv7D2r", "name": "Tiertime ABS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json index 1d716a957d..7014efe177 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ABS@300HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB00_01", + "filament_id": "OFNQKF0M", "setting_id": "x1XBGyOHIgrD7PVs", "name": "Tiertime ABS@300HS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime ASA.json b/resources/profiles/Tiertime/filament/Tiertime ASA.json index 397f8084a9..2550aa53ae 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ASA.json +++ b/resources/profiles/Tiertime/filament/Tiertime ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "6rwe3zrsvad1oq4C", - "filament_id": "GFB01", + "filament_id": "OFdrYBmI", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json index 165590114d..1f465c4dda 100644 --- a/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime ASA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "FreBeBZ1r1VF4ouQ", - "filament_id": "GFB01_01", + "filament_id": "OFdrYBmI", "instantiation": "true", "fan_max_speed": [ "35" diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json deleted file mode 100644 index 4319a9cd58..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "ImJ3Urgk3VVtwceI", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "fan_max_speed": [ - "20" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json deleted file mode 100644 index 6e3d41f5fc..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ABS@300HS.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic ABS@300HS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "tCw1f7MxFjxPr7Ci", - "filament_id": "GFB99_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "fan_max_speed": [ - "20" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json b/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json deleted file mode 100644 index 4280c28c4d..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "T1AzUXSewNk5Bj3x", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json deleted file mode 100644 index 062cf8e345..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic ASA@300HS.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic ASA@300HS", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "7C5PjCg1vmTQFXWO", - "filament_id": "GFB98_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp": [ - "100" - ], - "hot_plate_temp_initial_layer": [ - "100" - ], - "textured_plate_temp": [ - "100" - ], - "textured_plate_temp_initial_layer": [ - "100" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json deleted file mode 100644 index a02176c07d..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic BVOH", - "inherits": "fdm_filament_bvoh", - "from": "system", - "setting_id": "dhrpnirMnet0hJZl", - "filament_id": "GFS97", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json deleted file mode 100644 index abe8d42643..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic BVOH@300HS.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic BVOH@300HS", - "inherits": "fdm_filament_bvoh", - "from": "system", - "setting_id": "xfFXVyGfmXiu508N", - "filament_id": "GFS97_01", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json b/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json deleted file mode 100644 index e0683c378d..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic EVA", - "inherits": "fdm_filament_eva", - "from": "system", - "setting_id": "ev5w69eBuTCYXB2d", - "filament_id": "GFR99", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "21.99" - ], - "filament_density": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "EVA" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json deleted file mode 100644 index 14ea1b88d1..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic EVA@300HS.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic EVA@300HS", - "inherits": "fdm_filament_eva", - "from": "system", - "setting_id": "pXuh92Zf1zPiaDXg", - "filament_id": "GFR99_01", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "cool_plate_temp": [ - "35" - ], - "cool_plate_temp_initial_layer": [ - "35" - ], - "eng_plate_temp": [ - "0" - ], - "eng_plate_temp_initial_layer": [ - "0" - ], - "fan_cooling_layer_time": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "filament_cost": [ - "21.99" - ], - "filament_density": [ - "0.94" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "EVA" - ], - "hot_plate_temp": [ - "55" - ], - "hot_plate_temp_initial_layer": [ - "55" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "overhang_fan_threshold": [ - "50%" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_layer_time": [ - "4" - ], - "slow_down_min_speed": [ - "20" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "55" - ], - "textured_plate_temp_initial_layer": [ - "55" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json deleted file mode 100644 index 213181630b..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic HIPS", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "sFY2AyXFzAFuj6sv", - "filament_id": "GFS98", - "instantiation": "true", - "filament_is_support": [ - "1" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json deleted file mode 100644 index 234412a67d..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic HIPS@300HS.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic HIPS@300HS", - "inherits": "fdm_filament_hips", - "from": "system", - "setting_id": "9epHDviPNHRB5bPD", - "filament_id": "GFS98_01", - "instantiation": "true", - "filament_is_support": [ - "1" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json deleted file mode 100644 index 4e04b050cf..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN98", - "setting_id": "DOWYicvaXaTMfzBU", - "instantiation": "true", - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_type": [ - "PA-CF" - ], - "full_fan_speed_layer": [ - "2" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "temperature_vitrification": [ - "170" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json deleted file mode 100644 index bd618a1f83..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA-CF@300HS.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PA-CF@300HS", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN98_02", - "setting_id": "nRxvUKo1YXE8daoX", - "instantiation": "true", - "fan_cooling_layer_time": [ - "5" - ], - "fan_max_speed": [ - "30" - ], - "fan_min_speed": [ - "10" - ], - "filament_type": [ - "PA-CF" - ], - "full_fan_speed_layer": [ - "2" - ], - "overhang_fan_speed": [ - "40" - ], - "overhang_fan_threshold": [ - "0%" - ], - "temperature_vitrification": [ - "170" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA.json deleted file mode 100644 index b5fbdf1bcc..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN99", - "setting_id": "DmP33sDwKcBDRmDK", - "instantiation": "true", - "chamber_temperatures": [ - "60" - ], - "fan_cooling_layer_time": [ - "65" - ], - "fan_max_speed": [ - "85" - ], - "fan_min_speed": [ - "40" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json deleted file mode 100644 index 131ea71f3c..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PA@300HS.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PA@300HS", - "inherits": "fdm_filament_pa", - "from": "system", - "filament_id": "GFN99_01", - "setting_id": "ERn1WYMiSjs6a82N", - "instantiation": "true", - "chamber_temperatures": [ - "60" - ], - "fan_cooling_layer_time": [ - "65" - ], - "fan_max_speed": [ - "85" - ], - "fan_min_speed": [ - "40" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "nozzle_temperature": [ - "260" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "95" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "3" - ], - "slow_down_layer_time": [ - "8" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json b/resources/profiles/Tiertime/filament/Tiertime Generic PC.json deleted file mode 100644 index 4044d45fe3..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "5wzlA0sFj2xElixU", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "16" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json deleted file mode 100644 index 6b919af688..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PC@300HS.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PC@300HS", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "i2ShskYbiq61UJ1B", - "filament_id": "GFC99_01", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "16" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json deleted file mode 100644 index 2e4dc2d036..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PCTG", - "inherits": "fdm_filament_pctg", - "from": "system", - "setting_id": "UDqS8gFlHvPIysFk", - "filament_id": "GFG97", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "28.99" - ], - "filament_density": [ - "1.29" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json deleted file mode 100644 index 10b87ef227..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PCTG@300HS.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PCTG@300HS", - "inherits": "fdm_filament_pctg", - "from": "system", - "setting_id": "2Qbbi90zWBoo9dBl", - "filament_id": "GFG97-01", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "10" - ], - "filament_cost": [ - "28.99" - ], - "filament_density": [ - "1.29" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_layer_time": [ - "12" - ], - "temperature_vitrification": [ - "90" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json deleted file mode 100644 index 1cd9a569e6..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PE-CF", - "inherits": "fdm_filament_pe", - "from": "system", - "setting_id": "jzT1pay155tbaY9M", - "filament_id": "GFP98", - "instantiation": "true", - "filament_cost": [ - "65.99" - ], - "filament_density": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PE-CF" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json deleted file mode 100644 index 81b096e4b2..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE-CF@300HS.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PE-CF@300HS", - "inherits": "fdm_filament_pe", - "from": "system", - "setting_id": "5ChSjqNjRn8QArJP", - "filament_id": "GFP98_01", - "instantiation": "true", - "filament_cost": [ - "65.99" - ], - "filament_density": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PE-CF" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE.json deleted file mode 100644 index 16b9244f12..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PE", - "inherits": "fdm_filament_pe", - "from": "system", - "setting_id": "bYC8MPsm3VIgwaSt", - "filament_id": "GFP99", - "instantiation": "true", - "filament_cost": [ - "40.99" - ], - "filament_density": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json deleted file mode 100644 index 7ebf4377fe..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PE@300HS.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PE@300HS", - "inherits": "fdm_filament_pe", - "from": "system", - "setting_id": "ZbU3Ov0P5wtbudQ0", - "filament_id": "GFP99_01", - "instantiation": "true", - "filament_cost": [ - "40.99" - ], - "filament_density": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "nozzle_temperature": [ - "210" - ], - "nozzle_temperature_initial_layer": [ - "210" - ], - "nozzle_temperature_range_high": [ - "220" - ], - "nozzle_temperature_range_low": [ - "175" - ], - "temperature_vitrification": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json deleted file mode 100644 index c3907360a9..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PETG-CF", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "zA6nHgNkxBxGKw0w", - "filament_id": "GFG98", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "filament_cost": [ - "34.99" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PETG-CF" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "40" - ], - "slow_down_layer_time": [ - "6" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "5" - ], - "filament_max_volumetric_speed": [ - "11.5" - ], - "overhang_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json deleted file mode 100644 index 04f803a53e..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG-CF@300HS.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PETG-CF@300HS", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "jBUy8xUDg53e51kz", - "filament_id": "GFG98_01", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "filament_cost": [ - "34.99" - ], - "filament_density": [ - "1.25" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PETG-CF" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "overhang_fan_threshold": [ - "10%" - ], - "required_nozzle_HRC": [ - "40" - ], - "slow_down_layer_time": [ - "6" - ], - "temperature_vitrification": [ - "70" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "40" - ], - "fan_min_speed": [ - "5" - ], - "filament_max_volumetric_speed": [ - "11.5" - ], - "overhang_fan_speed": [ - "100" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json deleted file mode 100644 index e261373c3d..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "UevLlG43knAdcET2", - "filament_id": "GFG99", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json deleted file mode 100644 index cfec6ee335..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PETG@300HS.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PETG@300HS", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "ZZmmVicb1p0wb5r1", - "filament_id": "GFG99_01", - "instantiation": "true", - "cool_plate_temp": [ - "0" - ], - "cool_plate_temp_initial_layer": [ - "0" - ], - "eng_plate_temp": [ - "70" - ], - "eng_plate_temp_initial_layer": [ - "70" - ], - "fan_cooling_layer_time": [ - "30" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "hot_plate_temp": [ - "70" - ], - "hot_plate_temp_initial_layer": [ - "70" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "10%" - ], - "slow_down_layer_time": [ - "12" - ], - "slow_down_min_speed": [ - "20" - ], - "textured_plate_temp": [ - "70" - ], - "textured_plate_temp_initial_layer": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json deleted file mode 100644 index f2be140f37..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PHA", - "inherits": "fdm_filament_pha", - "from": "system", - "setting_id": "tFuE7IEbeGEhCNnz", - "filament_id": "GFR98", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json deleted file mode 100644 index e6e0475805..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PHA@300HS.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PHA@300HS", - "inherits": "fdm_filament_pha", - "from": "system", - "setting_id": "de5eveMr3bI3OCtF", - "filament_id": "GFR98_01", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json deleted file mode 100644 index a77cb529ea..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA High Speed", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "Ms3c6DePE0cjBeQ4", - "filament_id": "GFL95", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "4" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json deleted file mode 100644 index d36f12715b..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA High Speed@300HS.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA High Speed@300HS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "e0vVCCT6Tw4061is", - "filament_id": "GFL95_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "18" - ], - "slow_down_layer_time": [ - "4" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json deleted file mode 100644 index f2ba37e0eb..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA Silk", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "RgKM4PxtAasidTe5", - "filament_id": "GFL96", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json deleted file mode 100644 index b1911a7e9f..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA Silk@300HS.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA Silk@300HS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "yV358AeiALOn6xVr", - "filament_id": "GFL96_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_max_volumetric_speed": [ - "7.5" - ], - "filament_retraction_length": [ - "0.5" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json deleted file mode 100644 index a78f6e0438..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "maM4lXic0F10faAb", - "filament_id": "GFL98", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "required_nozzle_HRC": [ - "40" - ], - "slow_down_layer_time": [ - "7" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json deleted file mode 100644 index 3cc2f855f1..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA-CF@300HS.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA-CF@300HS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "3QSGv6pAz9ihFVuD", - "filament_id": "GFL98_01", - "instantiation": "true", - "additional_cooling_fan_speed": [ - "0" - ], - "cool_plate_temp": [ - "45" - ], - "cool_plate_temp_initial_layer": [ - "45" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "required_nozzle_HRC": [ - "40" - ], - "slow_down_layer_time": [ - "7" - ], - "fan_cooling_layer_time": [ - "80" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "60" - ], - "hot_plate_temp": [ - "65" - ], - "hot_plate_temp_initial_layer": [ - "65" - ], - "textured_plate_temp": [ - "65" - ], - "textured_plate_temp_initial_layer": [ - "65" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json deleted file mode 100644 index 768f0e293a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "q9W1goEbw6UUrNY3", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json deleted file mode 100644 index 6ba33d8004..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PLA@300HS.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PLA@300HS", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "jTSVVOuHuQqETOpe", - "filament_id": "GFL99_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json deleted file mode 100644 index 0c1ae8cae1..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP-CF", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "O5VvyfY5CV6IfMPQ", - "filament_id": "GFP96", - "instantiation": "true", - "filament_cost": [ - "77.99" - ], - "filament_density": [ - "1.01" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PP-CF" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json deleted file mode 100644 index 5874361c2a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-CF@300HS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP-CF@300HS", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "3TZu7e58qrjP4F4u", - "filament_id": "GFP96_01", - "instantiation": "true", - "filament_cost": [ - "77.99" - ], - "filament_density": [ - "1.01" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PP-CF" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json deleted file mode 100644 index bde8189b36..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP-GF", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "ZQnzXtnTMVMVMNaS", - "filament_id": "GFP95", - "instantiation": "true", - "filament_cost": [ - "59.99" - ], - "filament_density": [ - "1.05" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PP-GF" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json deleted file mode 100644 index b8a677999a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP-GF@300HS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP-GF@300HS", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "WKwUmsEhhYFyGAP5", - "filament_id": "GFP95_01", - "instantiation": "true", - "filament_cost": [ - "59.99" - ], - "filament_density": [ - "1.05" - ], - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PP-GF" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP.json deleted file mode 100644 index 895dd36cee..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "3ZYx92CbNBiocyXx", - "filament_id": "GFP97", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json deleted file mode 100644 index 473e1b6643..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PP@300HS.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PP@300HS", - "inherits": "fdm_filament_pp", - "from": "system", - "setting_id": "lx9zoOh3ALDlLasf", - "filament_id": "GFP97_01", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json deleted file mode 100644 index 9dba1d2e8a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPA-CF", - "inherits": "fdm_filament_ppa", - "from": "system", - "setting_id": "2zYiuKYR7bESaCnd", - "filament_id": "GFN97", - "instantiation": "true", - "filament_type": [ - "PPA-CF" - ], - "fan_max_speed": [ - "35" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "overhang_fan_threshold": [ - "25%" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json deleted file mode 100644 index 866d9981bb..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-CF@300HS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPA-CF@300HS", - "inherits": "fdm_filament_ppa", - "from": "system", - "setting_id": "wLH8aGr4ZNiHazwA", - "filament_id": "GFN97_01", - "instantiation": "true", - "filament_type": [ - "PPA-CF" - ], - "fan_max_speed": [ - "35" - ], - "filament_max_volumetric_speed": [ - "6.5" - ], - "overhang_fan_threshold": [ - "25%" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json deleted file mode 100644 index 88d413d976..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPA-GF", - "inherits": "fdm_filament_ppa", - "from": "system", - "setting_id": "hYkZEmk1B8X9EcF8", - "filament_id": "GFN96", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PPA-GF" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json deleted file mode 100644 index 120bbce3c1..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPA-GF@300HS.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPA-GF@300HS", - "inherits": "fdm_filament_ppa", - "from": "system", - "setting_id": "1zAhSxsuv3wxgBtQ", - "filament_id": "GFN96_01", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "6" - ], - "filament_type": [ - "PPA-GF" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json deleted file mode 100644 index d55bfb7557..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPS-CF", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "E0gbADj0OHkGSOxt", - "filament_id": "GFT98", - "instantiation": "true", - "fan_max_speed": [ - "30" - ], - "filament_density": [ - "1.3" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_type": [ - "PPS-CF" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "required_nozzle_HRC": [ - "40" - ], - "temperature_vitrification": [ - "220" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json deleted file mode 100644 index b4feee2599..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS-CF@300HS.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPS-CF@300HS", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "6UHEejfZvhQGA4vB", - "filament_id": "GFT98_01", - "instantiation": "true", - "fan_max_speed": [ - "30" - ], - "filament_density": [ - "1.3" - ], - "filament_max_volumetric_speed": [ - "3" - ], - "filament_type": [ - "PPS-CF" - ], - "nozzle_temperature_range_high": [ - "350" - ], - "required_nozzle_HRC": [ - "40" - ], - "temperature_vitrification": [ - "220" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json deleted file mode 100644 index 8fcf9ee41a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPS", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "2L1eOtxSeCJxW3RV", - "filament_id": "GFT97", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json deleted file mode 100644 index 853646bf08..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PPS@300HS.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PPS@300HS", - "inherits": "fdm_filament_pps", - "from": "system", - "setting_id": "5TZhbLxtLq6kSJJY", - "filament_id": "GFT97_01", - "instantiation": "true", - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json b/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json deleted file mode 100644 index a77791002e..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "bTkxwDd1TU8TUqVC", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json deleted file mode 100644 index f075f81a59..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic PVA@300HS.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic PVA@300HS", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "BQ6G75c9eLQQ7ULg", - "filament_id": "GFS99_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "16" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "20" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json deleted file mode 100644 index 353838867a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic SBS", - "inherits": "fdm_filament_sbs", - "from": "system", - "setting_id": "tHfCQJdD7qiIF4uT", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "4" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json deleted file mode 100644 index 429f1bd78a..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic SBS@300HS.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic SBS@300HS", - "inherits": "fdm_filament_sbs", - "from": "system", - "setting_id": "neqjohDEPRiOa6ut", - "filament_id": "GFL99_01", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "slow_down_layer_time": [ - "4" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json b/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json deleted file mode 100644 index 8a9e07a22f..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "filament_id": "GFU99", - "setting_id": "Viy3kUE0cTV2rMiC", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Tiertime UP400 Pro 0.4 nozzle", - "Tiertime UP400 Pro 0.6 nozzle", - "Tiertime UP400 Pro 0.8 nozzle", - "Tiertime UP310 Pro 0.4 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif} \n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json b/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json deleted file mode 100644 index 456acc8a4e..0000000000 --- a/resources/profiles/Tiertime/filament/Tiertime Generic TPU@300HS.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "name": "Tiertime Generic TPU@300HS", - "inherits": "fdm_filament_tpu", - "from": "system", - "filament_id": "GFU99_01", - "setting_id": "wgOtq6REuUQmNe5R", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "Tiertime UP300 HS 0.4 nozzle", - "Tiertime UP600 HS 0.4 nozzle", - "Tiertime UP600 HS 0.6 nozzle", - "Tiertime UP600 HS 0.8 nozzle" - ], - "filament_start_gcode": [ - "; filament start gcode\n{if (bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >30)||(bed_temperature_initial_layer[current_extruder] >30)}M106 P3 S180\n{endif} \n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" - ] -} diff --git a/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json b/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json index 8c165a210d..310c4294fb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PA6-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "HuOPyruYQNhxsjYW", - "filament_id": "GFN05", + "filament_id": "OFe8tuNb", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json index 9d84f62383..bdd8281c05 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PA6-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pa", "from": "system", "setting_id": "XniESd6DwW58wgYU", - "filament_id": "GFN05_01", + "filament_id": "OFe8tuNb", "instantiation": "true", "fan_cooling_layer_time": [ "5" diff --git a/resources/profiles/Tiertime/filament/Tiertime PC.json b/resources/profiles/Tiertime/filament/Tiertime PC.json index 4d0ce8c9fa..9b83a065b1 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PC.json +++ b/resources/profiles/Tiertime/filament/Tiertime PC.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "ImTbFOOUrv2pQbCu", - "filament_id": "GFC00", + "filament_id": "OFdXVjGZ", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json index fb3f03b63d..afefd7e394 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PC@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pc", "from": "system", "setting_id": "nktjGLDy0Gjl0dO8", - "filament_id": "GFC00_01", + "filament_id": "OFdXVjGZ", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime PET-CF.json b/resources/profiles/Tiertime/filament/Tiertime PET-CF.json index 60a91bd937..c55a9a60c0 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PET-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "WjpnXYqwyoeHdaC9", - "filament_id": "GFT01", + "filament_id": "OFCnywiC", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json index d844b97bf4..bbe3ec170d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PET-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "kHWlt3zl53mXcEGp", - "filament_id": "GFT01_01", + "filament_id": "OFCnywiC", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PETG.json b/resources/profiles/Tiertime/filament/Tiertime PETG.json index e4b5313393..9ec377f8f8 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PETG.json +++ b/resources/profiles/Tiertime/filament/Tiertime PETG.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "lw6WCNgazXfTwS4z", - "filament_id": "GFG00", + "filament_id": "OFObyktP", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json index 822d39d12d..b44cc3ce30 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PETG@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "bSujcskPkCuGi3At", - "filament_id": "GFG00_01", + "filament_id": "OFObyktP", "instantiation": "true", "cool_plate_temp": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json b/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json index 86a1895caa..b60dab442f 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "AN8Ptxqrd3fAfsAk", - "filament_id": "GFA50", + "filament_id": "OF7OqDp3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json index 9a2dccc6cb..40558619cb 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA-CF@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "S7OJaqjGSnkaPyDQ", - "filament_id": "GFA50_01", + "filament_id": "OF7OqDp3", "instantiation": "true", "additional_cooling_fan_speed": [ "0" diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA.json b/resources/profiles/Tiertime/filament/Tiertime PLA.json index 22729a9776..d0a030184a 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00", + "filament_id": "OFNGTH3w", "setting_id": "dlXQZNrJfvkJ3kWs", "name": "Tiertime PLA", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json index b12f813f3e..48073d5c76 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PLA@300HS.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFA00_01", + "filament_id": "OFNGTH3w", "setting_id": "bqWrzfz6CXHohbpL", "name": "Tiertime PLA@300HS", "from": "system", diff --git a/resources/profiles/Tiertime/filament/Tiertime PVA.json b/resources/profiles/Tiertime/filament/Tiertime PVA.json index 7adba03ec3..689f015f5a 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PVA.json +++ b/resources/profiles/Tiertime/filament/Tiertime PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "9Z1HdjB3dx1Rlyng", - "filament_id": "GFS04", + "filament_id": "OFyreocX", "instantiation": "true", "filament_cost": [ "79.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json b/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json index 722e3efd60..988cb744db 100644 --- a/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime PVA@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "1CwFwvd5cNbZwY95", - "filament_id": "GFS04_01", + "filament_id": "OFyreocX", "instantiation": "true", "filament_cost": [ "79.98" diff --git a/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json b/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json index 6feff32639..c328ac64f3 100644 --- a/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json +++ b/resources/profiles/Tiertime/filament/Tiertime TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "aeeRALQ6vydj2vbR", - "filament_id": "GFU01", + "filament_id": "OFLOf6Sc", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json b/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json index f4340bfed3..d95903d89d 100644 --- a/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json +++ b/resources/profiles/Tiertime/filament/Tiertime TPU 95A@300HS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "6ee2z5F26fqKny4n", - "filament_id": "GFU01_01", + "filament_id": "OFLOf6Sc", "instantiation": "true", "filament_vendor": [ "Tiertime" diff --git a/resources/profiles/Tiertime/machine/Tiertime UP300 HS.json b/resources/profiles/Tiertime/machine/Tiertime UP300 HS.json index 7f937ef561..18e17f9b05 100644 --- a/resources/profiles/Tiertime/machine/Tiertime UP300 HS.json +++ b/resources/profiles/Tiertime/machine/Tiertime UP300 HS.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "Tiertime ABS;Tiertime PLA" + "default_materials": "Tiertime ABS;Tiertime PLA;Tiertime PLA@300HS" } diff --git a/resources/profiles/Tiertime/machine/Tiertime UP600 HS.json b/resources/profiles/Tiertime/machine/Tiertime UP600 HS.json index 0ae3b64d9a..cab3e4503c 100644 --- a/resources/profiles/Tiertime/machine/Tiertime UP600 HS.json +++ b/resources/profiles/Tiertime/machine/Tiertime UP600 HS.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "", "hotend_model": "", - "default_materials": "Tiertime ABS;Tiertime PLA" + "default_materials": "Tiertime ABS;Tiertime PLA;Tiertime PLA@300HS" } diff --git a/resources/profiles/Tiertime/machine/fdm_machine_common.json b/resources/profiles/Tiertime/machine/fdm_machine_common.json index d4a5c3be25..fbe40f97e3 100644 --- a/resources/profiles/Tiertime/machine/fdm_machine_common.json +++ b/resources/profiles/Tiertime/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Tiertime/machine/fdm_tiertime_common.json b/resources/profiles/Tiertime/machine/fdm_tiertime_common.json index de802f566a..66d1d1e858 100644 --- a/resources/profiles/Tiertime/machine/fdm_tiertime_common.json +++ b/resources/profiles/Tiertime/machine/fdm_tiertime_common.json @@ -1,9 +1,9 @@ { "type": "machine", "name": "fdm_tiertime_common", + "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", - "inherits": "fdm_machine_common", "gcode_flavor": "klipper", "machine_max_acceleration_e": [ "5000", @@ -117,15 +117,12 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" ], - "default_filament_profile": [ - "" - ], + "default_filament_profile": [], "default_print_profile": "0.20mm Standard @Tiertime UP400 Pro", "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP400 Pro 0.6 nozzle.json index d9ef9fe332..53b0175f21 100644 --- a/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a smaller layer height and results in smoother surface and higher printing quality.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP600 HS 0.6 nozzle.json index 241b319114..902078336c 100644 --- a/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.18mm Fine @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a smaller layer height and results in smoother surface and higher printing quality.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP400 Pro 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP400 Pro 0.8 nozzle.json index c45c24b84a..81ab969572 100644 --- a/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP400 Pro 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP400 Pro 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a smaller layer height and results in smoother surface and higher printing quality.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP600 HS 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP600 HS 0.8 nozzle.json index 0eadac356d..d62180d9aa 100644 --- a/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP600 HS 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.24mm Fine @Tiertime UP600 HS 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a smaller layer height and results in smoother surface and higher printing quality.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP400 Pro 0.6 nozzle.json index abccc0329b..a2248af5dc 100644 --- a/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a balanced layer height for good quality and reasonable printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP600 HS 0.6 nozzle.json index 9e04a6e6b5..26b61969cc 100644 --- a/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.24mm Standard @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a balanced layer height for good quality and reasonable printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP400 Pro 0.6 nozzle.json index 34d74cb1ad..50635f3825 100644 --- a/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP600 HS 0.6 nozzle.json index 747872499e..95bffc096b 100644 --- a/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.30mm Standard @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP400 Pro 0.6 nozzle.json index 82e011345f..38a14009e4 100644 --- a/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height with optimized settings for stronger parts.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "sparse_infill_density": "25%", "wall_loops": "3", "compatible_printers": [ diff --git a/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP600 HS 0.6 nozzle.json index 03d21e34d1..41c823cfa7 100644 --- a/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.30mm Strength @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height with optimized settings for stronger parts.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "sparse_infill_density": "25%", "wall_loops": "3", "compatible_printers": [ diff --git a/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP400 Pro 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP400 Pro 0.8 nozzle.json index ff33334f90..f03358440b 100644 --- a/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP400 Pro 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP400 Pro 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a balanced layer height for good quality and reasonable printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP600 HS 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP600 HS 0.8 nozzle.json index 8eaeb571af..ffa7019f3d 100644 --- a/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP600 HS 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.32mm Standard @Tiertime UP600 HS 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a balanced layer height for good quality and reasonable printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP400 Pro 0.6 nozzle.json index 71090fa613..fc918c5c68 100644 --- a/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a bigger layer height for faster printing but with more visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP600 HS 0.6 nozzle.json index 5e192e28ee..45772b22a5 100644 --- a/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.36mm Draft @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a bigger layer height for faster printing but with more visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP400 Pro 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP400 Pro 0.8 nozzle.json index d3518d81d5..f308def5b4 100644 --- a/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP400 Pro 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP400 Pro 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP600 HS 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP600 HS 0.8 nozzle.json index ef0ee0040d..ae3b7dc3d3 100644 --- a/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP600 HS 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.40mm Standard @Tiertime UP600 HS 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP400 Pro 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP400 Pro 0.6 nozzle.json index 1e850801ca..3e06b09767 100644 --- a/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP400 Pro 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP400 Pro 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has the biggest layer height for fastest printing but with very visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP600 HS 0.6 nozzle.json b/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP600 HS 0.6 nozzle.json index 7d2afaea09..dfa351b066 100644 --- a/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP600 HS 0.6 nozzle.json +++ b/resources/profiles/Tiertime/process/0.42mm Extra Draft @Tiertime UP600 HS 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has the biggest layer height for fastest printing but with very visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.6 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP400 Pro 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP400 Pro 0.8 nozzle.json index f48c94c1b1..0e5575991d 100644 --- a/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP400 Pro 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP400 Pro 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a bigger layer height for faster printing but with more visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP600 HS 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP600 HS 0.8 nozzle.json index c09e4c24e8..34a9b0439b 100644 --- a/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP600 HS 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.48mm Draft @Tiertime UP600 HS 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a bigger layer height for faster printing but with more visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP400 Pro 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP400 Pro 0.8 nozzle.json index 4ba7a7af61..059ac43c3f 100644 --- a/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP400 Pro 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP400 Pro 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has the biggest layer height for fastest printing but with very visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP400 Pro 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP600 HS 0.8 nozzle.json b/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP600 HS 0.8 nozzle.json index dab79b259d..54af1e8588 100644 --- a/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP600 HS 0.8 nozzle.json +++ b/resources/profiles/Tiertime/process/0.56mm Extra Draft @Tiertime UP600 HS 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has the biggest layer height for fastest printing but with very visible layer lines.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Tiertime UP600 HS 0.8 nozzle" ] diff --git a/resources/profiles/Tiertime/process/fdm_process_common.json b/resources/profiles/Tiertime/process/fdm_process_common.json index ca4d181e78..26eb3a50a0 100644 --- a/resources/profiles/Tiertime/process/fdm_process_common.json +++ b/resources/profiles/Tiertime/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "50", diff --git a/resources/profiles/Tiertime/process/fdm_process_tiertime_common.json b/resources/profiles/Tiertime/process/fdm_process_tiertime_common.json index 3b0906e2e9..6cd3aa3014 100644 --- a/resources/profiles/Tiertime/process/fdm_process_tiertime_common.json +++ b/resources/profiles/Tiertime/process/fdm_process_tiertime_common.json @@ -21,7 +21,6 @@ "top_surface_acceleration": "2000", "initial_layer_acceleration": "500", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_line_width": "0.5", "initial_layer_speed": "50", "initial_layer_infill_speed": "90", diff --git a/resources/profiles/Tronxy.json b/resources/profiles/Tronxy.json index 32cf5ffa69..ac146b9850 100644 --- a/resources/profiles/Tronxy.json +++ b/resources/profiles/Tronxy.json @@ -1,6 +1,6 @@ { "name": "Tronxy", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Tronxy configurations", "machine_model_list": [ diff --git a/resources/profiles/Tronxy/machine/fdm_machine_common.json b/resources/profiles/Tronxy/machine/fdm_machine_common.json index fc02a60619..2ca47511d7 100644 --- a/resources/profiles/Tronxy/machine/fdm_machine_common.json +++ b/resources/profiles/Tronxy/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Tronxy/process/fdm_process_common.json b/resources/profiles/Tronxy/process/fdm_process_common.json index 8c2401bfb7..7f80f8bc79 100644 --- a/resources/profiles/Tronxy/process/fdm_process_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json index beca23a8bb..940a5e590d 100644 --- a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/TwoTrees.json b/resources/profiles/TwoTrees.json index 7484f27416..5d97581ffc 100644 --- a/resources/profiles/TwoTrees.json +++ b/resources/profiles/TwoTrees.json @@ -1,6 +1,6 @@ { "name": "TwoTrees", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "1", "description": "TwoTrees configurations", "machine_model_list": [ @@ -81,12 +81,12 @@ ], "filament_list": [ { - "name": "TwoTrees Generic 95A TPU @SK1", - "sub_path": "filament/TwoTrees Generic 95A TPU @SK1.json" + "name": "Generic HS PLA @TwoTrees SK1", + "sub_path": "filament/Generic HS PLA @TwoTrees SK1.json" }, { - "name": "TwoTrees Generic HS PLA @SK1", - "sub_path": "filament/TwoTrees Generic HS PLA @SK1.json" + "name": "Generic TPU 95A @TwoTrees SK1", + "sub_path": "filament/Generic TPU 95A @TwoTrees SK1.json" } ], "machine_list": [ diff --git a/resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json b/resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json new file mode 100644 index 0000000000..fd22e6417a --- /dev/null +++ b/resources/profiles/TwoTrees/filament/Generic HS PLA @TwoTrees SK1.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "name": "Generic HS PLA @TwoTrees SK1", + "inherits": "fdm_filament_pla", + "renamed_from": "TwoTrees Generic HS PLA @SK1;TwoTrees Generic HS PLA SK1", + "from": "system", + "setting_id": "uRS2QA3xad1lBZJR", + "filament_id": "OFvxghTE", + "instantiation": "true", + "compatible_printers": [ + "TwoTrees SK1 0.4 nozzle" + ], + "cool_plate_temp": "60", + "cool_plate_temp_initial_layer": "60", + "hot_plate_temp": "60", + "hot_plate_temp_initial_layer": "60", + "eng_plate_temp": "60", + "eng_plate_temp_initial_layer": "60", + "textured_plate_temp": "60", + "textured_plate_temp_initial_layer": "60", + "fan_min_speed": "35", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "full_fan_speed_layer": "0", + "nozzle_temperature": [ + "220" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "nozzle_temperature_range_low": [ + "210" + ], + "reduce_fan_stop_start_freq": "0", + "slow_down_layer_time": "5", + "slow_down_min_speed": "50" +} diff --git a/resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json b/resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json new file mode 100644 index 0000000000..6f0221b92c --- /dev/null +++ b/resources/profiles/TwoTrees/filament/Generic TPU 95A @TwoTrees SK1.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Generic TPU 95A @TwoTrees SK1", + "inherits": "fdm_filament_tpu", + "renamed_from": "TwoTrees Generic 95A TPU @SK1;TwoTrees Generic 95A TPU SK1", + "from": "system", + "setting_id": "hAqaYYR7xzkcr2xC", + "filament_id": "OFjiXpyf", + "instantiation": "true", + "compatible_printers": [ + "TwoTrees SK1 0.4 nozzle" + ], + "fan_cooling_layer_time": "60", + "fan_max_speed": "100", + "fan_min_speed": "35", + "filament_max_volumetric_speed": [ + "15" + ], + "filament_minimal_purge_on_wipe_tower": "15", + "full_fan_speed_layer": "0", + "nozzle_temperature": "235", + "nozzle_temperature_initial_layer": "235", + "reduce_fan_stop_start_freq": "0", + "slow_down_layer_time": "5", + "slow_down_min_speed": "10" +} diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json b/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json deleted file mode 100644 index b430674cd7..0000000000 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic 95A TPU @SK1.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "type": "filament", - "name": "TwoTrees Generic 95A TPU @SK1", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "YqQSUrG195dCz67L", - "filament_id": "GFU99", - "instantiation": "true", - "compatible_printers": [ - "TwoTrees SK1 0.4 nozzle" - ], - "fan_cooling_layer_time": "60", - "fan_max_speed": "100", - "fan_min_speed": "35", - "filament_max_volumetric_speed": [ - "15" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "full_fan_speed_layer": "0", - "nozzle_temperature": "235", - "nozzle_temperature_initial_layer": "235", - "reduce_fan_stop_start_freq": "0", - "slow_down_layer_time": "5", - "slow_down_min_speed": "10" -} diff --git a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json b/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json deleted file mode 100644 index b713bc31f4..0000000000 --- a/resources/profiles/TwoTrees/filament/TwoTrees Generic HS PLA @SK1.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "filament", - "name": "TwoTrees Generic HS PLA @SK1", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "k7bLC5us9mGJzznW", - "filament_id": "GFL100", - "instantiation": "true", - "compatible_printers": [ - "TwoTrees SK1 0.4 nozzle" - ], - "cool_plate_temp": "60", - "cool_plate_temp_initial_layer": "60", - "hot_plate_temp": "60", - "hot_plate_temp_initial_layer": "60", - "eng_plate_temp": "60", - "eng_plate_temp_initial_layer": "60", - "textured_plate_temp": "60", - "textured_plate_temp_initial_layer": "60", - "fan_min_speed": "35", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "enable_pressure_advance": [ - "1" - ], - "pressure_advance": [ - "0.04" - ], - "filament_minimal_purge_on_wipe_tower": "15", - "full_fan_speed_layer": "0", - "nozzle_temperature": [ - "220" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "nozzle_temperature_range_low": [ - "210" - ], - "reduce_fan_stop_start_freq": "0", - "slow_down_layer_time": "5", - "slow_down_min_speed": "50" -} diff --git a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json index fd32c01dcf..a15fdfd12e 100644 --- a/resources/profiles/TwoTrees/machine/TwoTrees SK1.json +++ b/resources/profiles/TwoTrees/machine/TwoTrees SK1.json @@ -8,5 +8,5 @@ "bed_model": "TwoTrees SK1_buildplate_model.stl", "bed_texture": "TwoTrees SK1_buildplate_texture.svg", "hotend_model": "", - "default_materials": "TwoTrees Generic 95A TPU @SK1;TwoTrees Generic PETG @SK1;TwoTrees Generic HS PLA @SK1;TwoTrees Generic PLA @SK1;TwoTrees Generic PLA-CF @SK1;TwoTrees Generic PLA Matte @SK1;TwoTrees Generic PLA Silk @SK1" + "default_materials": "Generic TPU 95A @TwoTrees SK1;Generic PETG @System;Generic HS PLA @TwoTrees SK1;Generic PLA @System;Generic PLA-CF @System;Generic PLA Matte @System;Generic PLA Silk @System" } diff --git a/resources/profiles/TwoTrees/machine/TwoTrees SP-5 Klipper.json b/resources/profiles/TwoTrees/machine/TwoTrees SP-5 Klipper.json index a1e8548b5b..cde6900374 100644 --- a/resources/profiles/TwoTrees/machine/TwoTrees SP-5 Klipper.json +++ b/resources/profiles/TwoTrees/machine/TwoTrees SP-5 Klipper.json @@ -8,5 +8,5 @@ "bed_model": "SP-5_bed.stl", "bed_texture": "SP-5_texture.svg", "hotend_model": "", - "default_materials": "TwoTrees Generic ABS;TwoTrees Generic PLA;TwoTrees Generic PLA-CF;TwoTrees Generic PETG;TwoTrees Generic TPU;TwoTrees Generic ASA;TwoTrees Generic PC;TwoTrees Generic PVA;TwoTrees Generic PA;TwoTrees Generic PA-CF" + "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System" } diff --git a/resources/profiles/TwoTrees/machine/fdm_klipper_common.json b/resources/profiles/TwoTrees/machine/fdm_klipper_common.json index ce04b2d6e8..596334cf2e 100644 --- a/resources/profiles/TwoTrees/machine/fdm_klipper_common.json +++ b/resources/profiles/TwoTrees/machine/fdm_klipper_common.json @@ -118,7 +118,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE\n", @@ -126,7 +125,7 @@ "1" ], "default_filament_profile": [ - "TwoTrees Generic PLA" + "Generic PLA @System" ], "bed_exclude_area": [ "0x0" diff --git a/resources/profiles/TwoTrees/machine/fdm_machine_common.json b/resources/profiles/TwoTrees/machine/fdm_machine_common.json index fc02a60619..2ca47511d7 100644 --- a/resources/profiles/TwoTrees/machine/fdm_machine_common.json +++ b/resources/profiles/TwoTrees/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json index db4e413741..bcfdfdbb66 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/TwoTrees/process/fdm_process_common.json b/resources/profiles/TwoTrees/process/fdm_process_common.json index c769a23e7c..651e12c439 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/UltiMaker.json b/resources/profiles/UltiMaker.json index da2b5442a1..52daf03cec 100644 --- a/resources/profiles/UltiMaker.json +++ b/resources/profiles/UltiMaker.json @@ -1,7 +1,7 @@ { "name": "UltiMaker", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "UltiMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/UltiMaker/machine/fdm_machine_common.json b/resources/profiles/UltiMaker/machine/fdm_machine_common.json index bcb191c0b1..035efc68ba 100644 --- a/resources/profiles/UltiMaker/machine/fdm_machine_common.json +++ b/resources/profiles/UltiMaker/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "10000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json index 02e0127bef..a71eed1b78 100644 --- a/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.12mm Fine @UltiMaker 2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "4iVomDxutraufw6B", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.12", "max_travel_detour_distance": "0", diff --git a/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json index 8c5596cfab..5026572ee8 100644 --- a/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.18mm Standard @UltiMaker 2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "Mo2NUdUehA5y4OwV", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.18", "max_travel_detour_distance": "0", diff --git a/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json b/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json index 7df1292a9d..bd77f960ac 100644 --- a/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json +++ b/resources/profiles/UltiMaker/process/0.25mm Darft @UltiMaker 2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "dBum79P8qUSRgT90", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.25", "max_travel_detour_distance": "0", diff --git a/resources/profiles/UltiMaker/process/fdm_process_common.json b/resources/profiles/UltiMaker/process/fdm_process_common.json index 99fcd508d0..45c9bcf236 100644 --- a/resources/profiles/UltiMaker/process/fdm_process_common.json +++ b/resources/profiles/UltiMaker/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Vivedino.json b/resources/profiles/Vivedino.json index bd7228a295..c8f6b65c3e 100644 --- a/resources/profiles/Vivedino.json +++ b/resources/profiles/Vivedino.json @@ -1,6 +1,6 @@ { "name": "Vivedino", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Vivedino configurations", "machine_model_list": [ diff --git a/resources/profiles/Vivedino/machine/fdm_klipper_common.json b/resources/profiles/Vivedino/machine/fdm_klipper_common.json index 23bfda64f1..3712765b66 100644 --- a/resources/profiles/Vivedino/machine/fdm_klipper_common.json +++ b/resources/profiles/Vivedino/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ diff --git a/resources/profiles/Vivedino/machine/fdm_machine_common.json b/resources/profiles/Vivedino/machine/fdm_machine_common.json index 3c5f92be16..7b8f13e442 100644 --- a/resources/profiles/Vivedino/machine/fdm_machine_common.json +++ b/resources/profiles/Vivedino/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Vivedino/machine/fdm_rrf_common.json b/resources/profiles/Vivedino/machine/fdm_rrf_common.json index b639ec3fd7..08fd49e3ad 100644 --- a/resources/profiles/Vivedino/machine/fdm_rrf_common.json +++ b/resources/profiles/Vivedino/machine/fdm_rrf_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE\n", diff --git a/resources/profiles/Vivedino/process/fdm_process_common.json b/resources/profiles/Vivedino/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Vivedino/process/fdm_process_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json index 9736bc5c0d..a10193f25a 100644 --- a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Volumic.json b/resources/profiles/Volumic.json index 08a313b008..7923f2d92f 100644 --- a/resources/profiles/Volumic.json +++ b/resources/profiles/Volumic.json @@ -1,6 +1,6 @@ { "name": "Volumic", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "1", "description": "VOLUMIC configurations", "machine_model_list": [ diff --git a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json index 362b3b3720..6b67c28f15 100644 --- a/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json +++ b/resources/profiles/Volumic/filament/PA6 CF20 (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFcKtw8W", "setting_id": "wuZ0EvlbcJ8GxajY", "name": "PA6 CF20 (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PETG ESD (Performance).json b/resources/profiles/Volumic/filament/PETG ESD (Performance).json index ba8e94a875..06814b64ad 100644 --- a/resources/profiles/Volumic/filament/PETG ESD (Performance).json +++ b/resources/profiles/Volumic/filament/PETG ESD (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFiwEbze", "setting_id": "May8rNEMOOs1qtae", "name": "PETG ESD (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json index 996494cc43..4708f912c4 100644 --- a/resources/profiles/Volumic/filament/PPS Carbone (Performance).json +++ b/resources/profiles/Volumic/filament/PPS Carbone (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFEZpel7", "setting_id": "HE0yILdkhbiXbH1j", "name": "PPS Carbone (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json index 8b48f0995c..865f03155e 100644 --- a/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic ABS Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFyQwdaM", "setting_id": "466ggy6ydgaZOrSx", "name": "Volumic ABS Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ABS Ultra.json b/resources/profiles/Volumic/filament/Volumic ABS Ultra.json index cab927e925..f538936b5a 100644 --- a/resources/profiles/Volumic/filament/Volumic ABS Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic ABS Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFyUJI3q", "setting_id": "omHiTINFPThooUqk", "name": "Volumic ABS Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json index ea3f078ce4..519387adf5 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFU7CKZt", "setting_id": "uE5jxeOBISvO5o7L", "name": "Volumic ASA Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json index 62de93ee24..2225125c3c 100644 --- a/resources/profiles/Volumic/filament/Volumic ASA Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic ASA Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OF2EB9Iz", "setting_id": "LOAp2zgQWqg1lQQ4", "name": "Volumic ASA Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json index 54049ab145..54d0f89bb3 100644 --- a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU99", + "filament_id": "OFUH1aee", "setting_id": "k5V3bjZrtr7t8zl0", "name": "Volumic FLEX93 Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json index 16f143b405..84ccdc6d19 100644 --- a/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic FLEX93 Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFU99", + "filament_id": "OFuxH0Uz", "setting_id": "DXZ4Gp5XP5VCJTXY", "name": "Volumic FLEX93 Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json index 44ab540de1..8a4b44f59b 100644 --- a/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic NYLON Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFi90KlM", "setting_id": "RC5gFyIejXWDJuHH", "name": "Volumic NYLON Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json b/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json index 9b7cbd0602..95c5f81a6a 100644 --- a/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic NYLON Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFN99", + "filament_id": "OFWa0NiB", "setting_id": "AL4xDgN8EIYb3UrL", "name": "Volumic NYLON Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PC Performance.json b/resources/profiles/Volumic/filament/Volumic PC Performance.json index d239419ccf..d454de5688 100644 --- a/resources/profiles/Volumic/filament/Volumic PC Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PC Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFC99", + "filament_id": "OFgSbX7E", "setting_id": "ht6Ar3ilCkPT7geN", "name": "Volumic PC (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PC.json b/resources/profiles/Volumic/filament/Volumic PC.json index 5ffe6cd415..12ea420585 100644 --- a/resources/profiles/Volumic/filament/Volumic PC.json +++ b/resources/profiles/Volumic/filament/Volumic PC.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFC99", + "filament_id": "OFaHjk1V", "setting_id": "3pUnwXise3J77Qmc", "name": "Volumic PC", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json index d28d3732ed..5e20cb2922 100644 --- a/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json +++ b/resources/profiles/Volumic/filament/Volumic PCTG Ultra (Performance).json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFTdauIq", "setting_id": "NdegYSDVrQ4Rawtp", "name": "Volumic PCTG Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json index 3a3d240a4e..6b98fc49d2 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFsD974q", "setting_id": "bNcC5kGe9jOm7Ltu", "name": "Volumic PETG Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json index adf3a8fc45..91827ebe80 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG98", + "filament_id": "OFY0F5qA", "setting_id": "IIFtCkVvHoLtxPxj", "name": "Volumic PETG Ultra carbone (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json index 4ee0a68464..137bad9d53 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra carbone.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG98", + "filament_id": "OFu08yGN", "setting_id": "nOKT0adoQi3O7Tge", "name": "Volumic PETG Ultra carbone", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PETG Ultra.json b/resources/profiles/Volumic/filament/Volumic PETG Ultra.json index 25162f2d94..8db07d0bab 100644 --- a/resources/profiles/Volumic/filament/Volumic PETG Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PETG Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG99", + "filament_id": "OFG0kOKX", "setting_id": "CuBXW7SqUeJOcxPP", "name": "Volumic PETG Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json index 741d2eab82..2a02fe7c88 100644 --- a/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PLA Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OF3dJf4E", "setting_id": "8J2ZIz8ByFNEB9PC", "name": "Volumic PLA Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PLA Ultra.json b/resources/profiles/Volumic/filament/Volumic PLA Ultra.json index 67d33d3b52..2e5f762d39 100644 --- a/resources/profiles/Volumic/filament/Volumic PLA Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PLA Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFXuGxvQ", "setting_id": "3BeQ60i4cOs3BfZn", "name": "Volumic PLA Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json index 91bfcf197d..3fafb8aac0 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFNSYu5h", "setting_id": "nsiOJ8ExySR1RksQ", "name": "Volumic PP Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PP Ultra.json b/resources/profiles/Volumic/filament/Volumic PP Ultra.json index 895c9ed467..eba78219bc 100644 --- a/resources/profiles/Volumic/filament/Volumic PP Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic PP Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFB99", + "filament_id": "OFsFo7ms", "setting_id": "UA91pv54dzbBRkFe", "name": "Volumic PP Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PVA Performance.json b/resources/profiles/Volumic/filament/Volumic PVA Performance.json index 92a94ac5c1..199d33ed62 100644 --- a/resources/profiles/Volumic/filament/Volumic PVA Performance.json +++ b/resources/profiles/Volumic/filament/Volumic PVA Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFS99", + "filament_id": "OFRkjhxK", "setting_id": "L9ZTGhwNpVWT6E5j", "name": "Volumic PVA-BVOH (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic PVA.json b/resources/profiles/Volumic/filament/Volumic PVA.json index 5d9892417c..24c28a89a5 100644 --- a/resources/profiles/Volumic/filament/Volumic PVA.json +++ b/resources/profiles/Volumic/filament/Volumic PVA.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFS99", + "filament_id": "OFGdP6Na", "setting_id": "rw4bB5gYM6YF8v9e", "name": "Volumic PVA", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json index e20e88ed67..90562ebba2 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra Performance.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFkGp50Y", "setting_id": "rxVkBvMZYgHOoFW6", "name": "Volumic UNIVERSAL Ultra (Performance)", "from": "system", diff --git a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json index 568b3a5beb..ee50a25ffd 100644 --- a/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json +++ b/resources/profiles/Volumic/filament/Volumic UNIVERSAL Ultra.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFL99", + "filament_id": "OFpumhCM", "setting_id": "6iOFERN4x6xBbtuT", "name": "Volumic UNIVERSAL Ultra", "from": "system", diff --git a/resources/profiles/Volumic/filament/desactive.json b/resources/profiles/Volumic/filament/desactive.json index 6485f044f0..1c490c957e 100644 --- a/resources/profiles/Volumic/filament/desactive.json +++ b/resources/profiles/Volumic/filament/desactive.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "DFL99", + "filament_id": "OFCuaCer", "setting_id": "Sphn4hoDMpH2uy86", "name": "Désactivé", "from": "system", diff --git a/resources/profiles/Volumic/machine/EXO42 IDRE.json b/resources/profiles/Volumic/machine/EXO42 IDRE.json index ad6ad5ba44..185924e798 100644 --- a/resources/profiles/Volumic/machine/EXO42 IDRE.json +++ b/resources/profiles/Volumic/machine/EXO42 IDRE.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "EXO42_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/EXO42 Performance.json b/resources/profiles/Volumic/machine/EXO42 Performance.json index 14979aca7c..0ae9738e0e 100644 --- a/resources/profiles/Volumic/machine/EXO42 Performance.json +++ b/resources/profiles/Volumic/machine/EXO42 Performance.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "EXO42_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/EXO65 IDRE.json b/resources/profiles/Volumic/machine/EXO65 IDRE.json index 4d6060a134..3532466902 100644 --- a/resources/profiles/Volumic/machine/EXO65 IDRE.json +++ b/resources/profiles/Volumic/machine/EXO65 IDRE.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "EXO65_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/EXO65 Performance.json b/resources/profiles/Volumic/machine/EXO65 Performance.json index c34582d5f0..4e1ffaa2b0 100644 --- a/resources/profiles/Volumic/machine/EXO65 Performance.json +++ b/resources/profiles/Volumic/machine/EXO65 Performance.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "EXO65_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/SH65 IDRE.json b/resources/profiles/Volumic/machine/SH65 IDRE.json index ee9d97b97f..79c2fee79c 100644 --- a/resources/profiles/Volumic/machine/SH65 IDRE.json +++ b/resources/profiles/Volumic/machine/SH65 IDRE.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "SH65_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/SH65 Performance.json b/resources/profiles/Volumic/machine/SH65 Performance.json index b5e4eb2bf0..4091b52b93 100644 --- a/resources/profiles/Volumic/machine/SH65 Performance.json +++ b/resources/profiles/Volumic/machine/SH65 Performance.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "SH65_bed.STL", - "default_materials": "Volumic PLA Ultra" + "default_materials": "Volumic PLA Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/VS30SC2 Performance.json b/resources/profiles/Volumic/machine/VS30SC2 Performance.json index 93f1ac8c28..74fa8c1fc8 100644 --- a/resources/profiles/Volumic/machine/VS30SC2 Performance.json +++ b/resources/profiles/Volumic/machine/VS30SC2 Performance.json @@ -6,5 +6,5 @@ "machine_tech": "FFF", "family": "VOLUMIC", "bed_model": "VS30U_bed.STL", - "default_materials": "Volumic UNIVERSAL Ultra" + "default_materials": "Volumic UNIVERSAL Ultra;Volumic PLA Ultra (Performance)" } diff --git a/resources/profiles/Volumic/machine/fdm_volumic_common.json b/resources/profiles/Volumic/machine/fdm_volumic_common.json index a0f8a16b48..59a9facfde 100644 --- a/resources/profiles/Volumic/machine/fdm_volumic_common.json +++ b/resources/profiles/Volumic/machine/fdm_volumic_common.json @@ -31,7 +31,6 @@ "retraction_speed": [ "30" ], - "silent_mode": "0", "machine_max_acceleration_e": [ "0", "0" diff --git a/resources/profiles/Volumic/process/fdm_process_volumic_common.json b/resources/profiles/Volumic/process/fdm_process_volumic_common.json index 52dfcb1eb8..5a7ff0840a 100644 --- a/resources/profiles/Volumic/process/fdm_process_volumic_common.json +++ b/resources/profiles/Volumic/process/fdm_process_volumic_common.json @@ -5,7 +5,6 @@ "instantiation": "false", "precise_outer_wall": "1", "enable_overhang_speed": "1", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "max_travel_detour_distance": "0", "extra_perimeters_on_overhangs": "1", diff --git a/resources/profiles/Voron.json b/resources/profiles/Voron.json index 74df754a9d..9f6f785ad7 100644 --- a/resources/profiles/Voron.json +++ b/resources/profiles/Voron.json @@ -1,6 +1,6 @@ { "name": "Voron", - "version": "02.04.00.02", + "version": "02.04.00.03", "force_update": "0", "description": "Voron configurations", "machine_model_list": [ diff --git a/resources/profiles/Voron/machine/fdm_klipper_common.json b/resources/profiles/Voron/machine/fdm_klipper_common.json index b4ffd1a4bb..4eedd71412 100644 --- a/resources/profiles/Voron/machine/fdm_klipper_common.json +++ b/resources/profiles/Voron/machine/fdm_klipper_common.json @@ -117,7 +117,6 @@ "30" ], "z_hop_types": "Slope Lift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE", diff --git a/resources/profiles/Voron/machine/fdm_machine_common.json b/resources/profiles/Voron/machine/fdm_machine_common.json index 921560eee8..f7f0f31d7e 100644 --- a/resources/profiles/Voron/machine/fdm_machine_common.json +++ b/resources/profiles/Voron/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Voron/process/fdm_process_common.json b/resources/profiles/Voron/process/fdm_process_common.json index d8955e2bfb..c118c4a2c9 100644 --- a/resources/profiles/Voron/process/fdm_process_common.json +++ b/resources/profiles/Voron/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Voron/process/fdm_process_voron_common.json b/resources/profiles/Voron/process/fdm_process_voron_common.json index f5ad2128d0..d06e0e7e9a 100644 --- a/resources/profiles/Voron/process/fdm_process_voron_common.json +++ b/resources/profiles/Voron/process/fdm_process_voron_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Voxelab.json b/resources/profiles/Voxelab.json index 758b9d0cd3..6d1fa00061 100644 --- a/resources/profiles/Voxelab.json +++ b/resources/profiles/Voxelab.json @@ -1,7 +1,7 @@ { "name": "Voxelab", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Voxelab configurations", "machine_model_list": [ diff --git a/resources/profiles/Voxelab/machine/fdm_machine_common.json b/resources/profiles/Voxelab/machine/fdm_machine_common.json index b4aada4829..a2c7c89e17 100644 --- a/resources/profiles/Voxelab/machine/fdm_machine_common.json +++ b/resources/profiles/Voxelab/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", "machine_start_gcode": "", diff --git a/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json b/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json index f595e8b16b..29a42d75ec 100644 --- a/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.16mm Optimal @Voxelab AquilaX2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "xCSbqEmBX0IB51ZS", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.16", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json b/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json index 97d049eb14..ec6f76816d 100644 --- a/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json +++ b/resources/profiles/Voxelab/process/0.20mm Standard @Voxelab AquilaX2.json @@ -5,7 +5,6 @@ "from": "system", "setting_id": "DbIfKn2knpsOQT7H", "instantiation": "true", - "adaptive_layer_height": "1", "reduce_crossing_wall": "0", "layer_height": "0.2", "max_travel_detour_distance": "0", diff --git a/resources/profiles/Voxelab/process/fdm_process_common.json b/resources/profiles/Voxelab/process/fdm_process_common.json index 99fcd508d0..45c9bcf236 100644 --- a/resources/profiles/Voxelab/process/fdm_process_common.json +++ b/resources/profiles/Voxelab/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Vzbot.json b/resources/profiles/Vzbot.json index 12ec13402b..a64b4807e8 100644 --- a/resources/profiles/Vzbot.json +++ b/resources/profiles/Vzbot.json @@ -1,6 +1,6 @@ { "name": "Vzbot", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Vzbot configurations", "machine_model_list": [ @@ -149,44 +149,44 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Vzbot Generic ABS", - "sub_path": "filament/Vzbot Generic ABS.json" + "name": "Generic ABS @Vzbot", + "sub_path": "filament/Generic ABS @Vzbot.json" }, { - "name": "Vzbot Generic ASA", - "sub_path": "filament/Vzbot Generic ASA.json" + "name": "Generic ASA @Vzbot", + "sub_path": "filament/Generic ASA @Vzbot.json" }, { - "name": "Vzbot Generic PA", - "sub_path": "filament/Vzbot Generic PA.json" + "name": "Generic PA @Vzbot", + "sub_path": "filament/Generic PA @Vzbot.json" }, { - "name": "Vzbot Generic PA-CF", - "sub_path": "filament/Vzbot Generic PA-CF.json" + "name": "Generic PA-CF @Vzbot", + "sub_path": "filament/Generic PA-CF @Vzbot.json" }, { - "name": "Vzbot Generic PC", - "sub_path": "filament/Vzbot Generic PC.json" + "name": "Generic PC @Vzbot", + "sub_path": "filament/Generic PC @Vzbot.json" }, { - "name": "Vzbot Generic PETG", - "sub_path": "filament/Vzbot Generic PETG.json" + "name": "Generic PETG @Vzbot", + "sub_path": "filament/Generic PETG @Vzbot.json" }, { - "name": "Vzbot Generic PLA", - "sub_path": "filament/Vzbot Generic PLA.json" + "name": "Generic PLA @Vzbot", + "sub_path": "filament/Generic PLA @Vzbot.json" }, { - "name": "Vzbot Generic PLA-CF", - "sub_path": "filament/Vzbot Generic PLA-CF.json" + "name": "Generic PLA-CF @Vzbot", + "sub_path": "filament/Generic PLA-CF @Vzbot.json" }, { - "name": "Vzbot Generic PVA", - "sub_path": "filament/Vzbot Generic PVA.json" + "name": "Generic PVA @Vzbot", + "sub_path": "filament/Generic PVA @Vzbot.json" }, { - "name": "Vzbot Generic TPU", - "sub_path": "filament/Vzbot Generic TPU.json" + "name": "Generic TPU @Vzbot", + "sub_path": "filament/Generic TPU @Vzbot.json" } ], "machine_list": [ diff --git a/resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json b/resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json new file mode 100644 index 0000000000..bc59bdfea7 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic ABS @Vzbot.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic ABS @Vzbot", + "inherits": "fdm_filament_abs", + "renamed_from": "Vzbot Generic ABS", + "from": "system", + "setting_id": "0gr3MwdhoGW44mbr", + "filament_id": "OFY9muEs", + "instantiation": "true", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json b/resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json new file mode 100644 index 0000000000..9495f5cb1e --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic ASA @Vzbot.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic ASA @Vzbot", + "inherits": "fdm_filament_asa", + "renamed_from": "Vzbot Generic ASA", + "from": "system", + "setting_id": "0MutZpaR9XVzUGGS", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PA @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PA @Vzbot.json new file mode 100644 index 0000000000..a5e39c829c --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PA @Vzbot.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PA @Vzbot", + "inherits": "fdm_filament_pa", + "renamed_from": "Vzbot Generic PA", + "from": "system", + "setting_id": "fwiU6RaIAOV38A9B", + "filament_id": "OFg8ndtj", + "instantiation": "true", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json new file mode 100644 index 0000000000..30a13910e0 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PA-CF @Vzbot.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PA-CF @Vzbot", + "inherits": "fdm_filament_pa", + "renamed_from": "Vzbot Generic PA-CF", + "from": "system", + "setting_id": "q8DtJmdJUN3KFV3E", + "filament_id": "OFQLcbps", + "instantiation": "true", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PC @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PC @Vzbot.json new file mode 100644 index 0000000000..e2fecd6301 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PC @Vzbot.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "Generic PC @Vzbot", + "inherits": "fdm_filament_pc", + "renamed_from": "Vzbot Generic PC", + "from": "system", + "setting_id": "crcoB7BvhVnnHNaF", + "filament_id": "OFLakOUI", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "50" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json new file mode 100644 index 0000000000..bfb1f5af81 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PETG @Vzbot.json @@ -0,0 +1,54 @@ +{ + "type": "filament", + "name": "Generic PETG @Vzbot", + "inherits": "fdm_filament_pet", + "renamed_from": "Vzbot Generic PETG", + "from": "system", + "setting_id": "NInr0jEJnziZ1poM", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "20" + ], + "slow_down_min_speed": [ + "30" + ], + "slow_down_layer_time": [ + "5" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json new file mode 100644 index 0000000000..ee77c2fd61 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PLA @Vzbot.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "Generic PLA @Vzbot", + "inherits": "fdm_filament_pla", + "renamed_from": "Vzbot Generic PLA", + "from": "system", + "setting_id": "Skn1ODpcSXd2NFcH", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json new file mode 100644 index 0000000000..2fd8b03ee5 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PLA-CF @Vzbot.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PLA-CF @Vzbot", + "inherits": "fdm_filament_pla", + "renamed_from": "Vzbot Generic PLA-CF", + "from": "system", + "setting_id": "FETpZHhHj60hztGS", + "filament_id": "OFWbdGsC", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json b/resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json new file mode 100644 index 0000000000..f8b6793e74 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic PVA @Vzbot.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "name": "Generic PVA @Vzbot", + "inherits": "fdm_filament_pva", + "renamed_from": "Vzbot Generic PVA", + "from": "system", + "setting_id": "3xgrPw1nCEUaKQwQ", + "filament_id": "OFDvXujf", + "instantiation": "true", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "50" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "30" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json b/resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json new file mode 100644 index 0000000000..6ba3a3e9e4 --- /dev/null +++ b/resources/profiles/Vzbot/filament/Generic TPU @Vzbot.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Generic TPU @Vzbot", + "inherits": "fdm_filament_tpu", + "renamed_from": "Vzbot Generic TPU", + "from": "system", + "setting_id": "eC3Pgdpbwi2amDbk", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "50" + ], + "compatible_printers": [ + "Vzbot 235 AWD 0.4 nozzle", + "Vzbot 330 AWD 0.4 nozzle", + "Vzbot 235 AWD 0.5 nozzle", + "Vzbot 235 AWD 0.6 nozzle", + "Vzbot 330 AWD 0.5 nozzle", + "Vzbot 330 AWD 0.6 nozzle" + ] +} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json b/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json deleted file mode 100644 index 831670240c..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ABS.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic ABS", - "inherits": "fdm_filament_abs", - "from": "system", - "setting_id": "nRFPlbSKRMb0UpSI", - "filament_id": "GFB99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json b/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json deleted file mode 100644 index 0996b8cd18..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic ASA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic ASA", - "inherits": "fdm_filament_asa", - "from": "system", - "setting_id": "rP4Qul9OY7lUhPgO", - "filament_id": "GFB98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json b/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json deleted file mode 100644 index f51cda8ed9..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA-CF.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PA-CF", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "AKO1twNgFO67N5GK", - "filament_id": "GFN98", - "instantiation": "true", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PA.json deleted file mode 100644 index 815969c712..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PA", - "inherits": "fdm_filament_pa", - "from": "system", - "setting_id": "4CBO5MnUk8Smhs3q", - "filament_id": "GFN99", - "instantiation": "true", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json b/resources/profiles/Vzbot/filament/Vzbot Generic PC.json deleted file mode 100644 index ebb44e627a..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PC.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PC", - "inherits": "fdm_filament_pc", - "from": "system", - "setting_id": "wUe99Mr4HqzSNxgO", - "filament_id": "GFC99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "50" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json b/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json deleted file mode 100644 index cc48d69299..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PETG.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "setting_id": "C8LMRvN350POVqC2", - "filament_id": "GFG99", - "instantiation": "true", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "70" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "20" - ], - "slow_down_min_speed": [ - "30" - ], - "slow_down_layer_time": [ - "5" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json b/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json deleted file mode 100644 index 33ab4f69a3..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA-CF.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PLA-CF", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "nt1egZD1dQEVXp0v", - "filament_id": "GFL98", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json deleted file mode 100644 index 48a8aefecc..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PLA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "setting_id": "4JMiuJbl1gNrBipT", - "filament_id": "GFL99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "slow_down_layer_time": [ - "5" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json b/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json deleted file mode 100644 index 0d0bd62a3e..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic PVA.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic PVA", - "inherits": "fdm_filament_pva", - "from": "system", - "setting_id": "DX4eZb2tlNVqeUrn", - "filament_id": "GFS99", - "instantiation": "true", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "50" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "30" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json b/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json deleted file mode 100644 index f5ca392779..0000000000 --- a/resources/profiles/Vzbot/filament/Vzbot Generic TPU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Vzbot Generic TPU", - "inherits": "fdm_filament_tpu", - "from": "system", - "setting_id": "YlhTF1F3OA2qj6o2", - "filament_id": "GFU99", - "instantiation": "true", - "filament_max_volumetric_speed": [ - "50" - ], - "compatible_printers": [ - "Vzbot 235 AWD 0.4 nozzle", - "Vzbot 330 AWD 0.4 nozzle", - "Vzbot 235 AWD 0.5 nozzle", - "Vzbot 235 AWD 0.6 nozzle", - "Vzbot 330 AWD 0.5 nozzle", - "Vzbot 330 AWD 0.6 nozzle" - ] -} diff --git a/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json b/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json index a29123add7..760c478b42 100644 --- a/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json +++ b/resources/profiles/Vzbot/machine/Vzbot 235 AWD.json @@ -8,5 +8,5 @@ "bed_model": "Vz235SlicerBedModel-cnc.stl", "bed_texture": "VzBot_PS_bed_235.svg", "hotend_model": "Goliath.stl", - "default_materials": "Vzbot Generic ABS;Vzbot Generic PLA;Vzbot Generic PLA-CF;Vzbot Generic PETG;Vzbot Generic TPU;Vzbot Generic ASA;Vzbot Generic PC;Vzbot Generic PVA;Vzbot Generic PA;Vzbot Generic PA-CF" + "default_materials": "Generic ABS @Vzbot;Generic PLA @Vzbot;Generic PLA-CF @Vzbot;Generic PETG @Vzbot;Generic TPU @Vzbot;Generic ASA @Vzbot;Generic PC @Vzbot;Generic PVA @Vzbot;Generic PA @Vzbot;Generic PA-CF @Vzbot" } diff --git a/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json b/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json index 71561ce630..b30f6639fd 100644 --- a/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json +++ b/resources/profiles/Vzbot/machine/Vzbot 330 AWD.json @@ -8,5 +8,5 @@ "bed_model": "Vz330SlicerBedModel-cnc.stl", "bed_texture": "VzBot_PS_bed_330.svg", "hotend_model": "Goliath.stl", - "default_materials": "Vzbot Generic ABS;Vzbot Generic PLA;Vzbot Generic PLA-CF;Vzbot Generic PETG;Vzbot Generic TPU;Vzbot Generic ASA;Vzbot Generic PC;Vzbot Generic PVA;Vzbot Generic PA;Vzbot Generic PA-CF" + "default_materials": "Generic ABS @Vzbot;Generic PLA @Vzbot;Generic PLA-CF @Vzbot;Generic PETG @Vzbot;Generic TPU @Vzbot;Generic ASA @Vzbot;Generic PC @Vzbot;Generic PVA @Vzbot;Generic PA @Vzbot;Generic PA-CF @Vzbot" } diff --git a/resources/profiles/Vzbot/machine/fdm_klipper_common.json b/resources/profiles/Vzbot/machine/fdm_klipper_common.json index 617015864c..26bac7d0f3 100644 --- a/resources/profiles/Vzbot/machine/fdm_klipper_common.json +++ b/resources/profiles/Vzbot/machine/fdm_klipper_common.json @@ -116,8 +116,6 @@ "deretraction_speed": [ "80" ], - "z_lift_type": "NormalLift", - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "PAUSE\n", @@ -125,7 +123,7 @@ "1" ], "default_filament_profile": [ - "Vzbot Generic ABS" + "Generic ABS @Vzbot" ], "default_print_profile": "0.20mm Standard @Vzbot", "bed_exclude_area": [ diff --git a/resources/profiles/Vzbot/machine/fdm_machine_common.json b/resources/profiles/Vzbot/machine/fdm_machine_common.json index 7c66fd5988..407e718f94 100644 --- a/resources/profiles/Vzbot/machine/fdm_machine_common.json +++ b/resources/profiles/Vzbot/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json index dc8a25695d..de407b2612 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json index 110151e4f8..f5b58f9df2 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common_0.5_nozzle", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json index 7375f8d03f..3d0a6667be 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common_0.6_nozzle", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/Vzbot/process/fdm_process_common.json b/resources/profiles/Vzbot/process/fdm_process_common.json index d8955e2bfb..c118c4a2c9 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json index d07534d8b5..30b508b5ad 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.5_nozzle.json @@ -3,7 +3,6 @@ "name": "fdm_process_common_0.5_nozzle", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "150", diff --git a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json index 8d0c3ec113..f61615dd8c 100644 --- a/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_common_0.6_nozzle.json @@ -3,7 +3,6 @@ "name": "fdm_process_common_0.6_nozzle", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "150", diff --git a/resources/profiles/WEMAKE3D.json b/resources/profiles/WEMAKE3D.json index 399d342641..feeeba132b 100644 --- a/resources/profiles/WEMAKE3D.json +++ b/resources/profiles/WEMAKE3D.json @@ -1,6 +1,6 @@ { "name": "WEMAKE3D", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "WEMAKE3D configurations", "machine_model_list": [ diff --git a/resources/profiles/WEMAKE3D/process/fdm_process_common.json b/resources/profiles/WEMAKE3D/process/fdm_process_common.json index 3708fca48b..1dc5f32da4 100644 --- a/resources/profiles/WEMAKE3D/process/fdm_process_common.json +++ b/resources/profiles/WEMAKE3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -92,7 +91,6 @@ "support_top_z_distance": "0.275", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/Wanhao France.json b/resources/profiles/Wanhao France.json index 92694fe476..9087899761 100644 --- a/resources/profiles/Wanhao France.json +++ b/resources/profiles/Wanhao France.json @@ -1,6 +1,6 @@ { "name": "Wanhao France", - "version": "02.04.00.02", + "version": "02.04.00.05", "force_update": "0", "description": "Wanhao France D12 configurations", "machine_model_list": [ @@ -177,12 +177,12 @@ "sub_path": "filament/fdm_filament_tpu.json" }, { - "name": "Yumi Generic PETG", - "sub_path": "filament/Yumi Generic PETG.json" + "name": "Generic PETG @Yumi", + "sub_path": "filament/Generic PETG @Yumi.json" }, { - "name": "Yumi Generic PLA", - "sub_path": "filament/Yumi Generic PLA.json" + "name": "Generic PLA @Yumi", + "sub_path": "filament/Generic PLA @Yumi.json" }, { "name": "YUMI PETG", diff --git a/resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json b/resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json new file mode 100644 index 0000000000..945df6cb10 --- /dev/null +++ b/resources/profiles/Wanhao France/filament/Generic PETG @Yumi.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Generic PETG @Yumi", + "inherits": "fdm_filament_pet", + "from": "system", + "filament_id": "OFYPdQJh", + "instantiation": "false", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + "" + ] +} diff --git a/resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json b/resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json new file mode 100644 index 0000000000..1bcd4923a8 --- /dev/null +++ b/resources/profiles/Wanhao France/filament/Generic PLA @Yumi.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "name": "Generic PLA @Yumi", + "inherits": "fdm_filament_pla", + "from": "system", + "filament_id": "OFDSrzZ8", + "instantiation": "false", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "" + ] +} diff --git a/resources/profiles/Wanhao France/filament/YUMI PETG.json b/resources/profiles/Wanhao France/filament/YUMI PETG.json index ca5eb1b5c9..7495416e39 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PETG.json +++ b/resources/profiles/Wanhao France/filament/YUMI PETG.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "YUMI PETG", - "inherits": "Yumi Generic PETG", + "inherits": "Generic PETG @Yumi", "from": "system", "setting_id": "PFFm20QNgwqyuglH", - "filament_id": "GFG99", + "filament_id": "OF5NqBfC", "instantiation": "true", "filament_vendor": [ "Yumi" @@ -108,9 +108,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "42" - ], "filament_loading_speed": [ "0" ], @@ -180,9 +177,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "0" ], diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json index d6a5d6dcc6..6636fe680d 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Bowden.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "YUMI PLA Bowden", - "inherits": "Yumi Generic PLA", + "inherits": "Generic PLA @Yumi", "from": "system", "setting_id": "zQSSA2QZi27ESyQK", - "filament_id": "GFU99", + "filament_id": "OFZ2LuAi", "instantiation": "true", "filament_vendor": [ "Yumi" @@ -58,12 +58,6 @@ "0.4" ], "compatible_printers": [ - "D12 230 PRO M2 DIRECT 0.4 nozzle", - "D12 230 PRO SMARTPAD DIRECT 0.4 nozzle", - "D12 300 PRO M2 DIRECT 0.4 nozzle", - "D12 300 PRO SMARTPAD DIRECT 0.4 nozzle", - "D12 500 PRO M2 DIRECT 0.4 nozzle", - "D12 500 PRO SMARTPAD DIRECT 0.4 nozzle", "D12 230 PRO M2 MONO DUAL 0.4 nozzle", "D12 230 PRO M2 MONO DUAL 0.4 nozzle PoopTool", "D12 300 PRO M2 MONO DUAL PoopTool 0.4 nozzle", diff --git a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json index be13517ab5..050e003e77 100644 --- a/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json +++ b/resources/profiles/Wanhao France/filament/YUMI PLA Direct Drive.json @@ -1,10 +1,10 @@ { "type": "filament", "name": "YUMI PLA Direct Drive", - "inherits": "Yumi Generic PLA", + "inherits": "Generic PLA @Yumi", "from": "system", "setting_id": "v2p0ooSxHnvVkn57", - "filament_id": "GFU99", + "filament_id": "OFJxSqO4", "instantiation": "true", "filament_vendor": [ "Yumi" diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json b/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json deleted file mode 100644 index 83d505ac6f..0000000000 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PETG.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "type": "filament", - "name": "Yumi Generic PETG", - "inherits": "fdm_filament_pet", - "from": "system", - "filament_id": "GFG99", - "instantiation": "false", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "" - ] -} diff --git a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json b/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json deleted file mode 100644 index bbace09129..0000000000 --- a/resources/profiles/Wanhao France/filament/Yumi Generic PLA.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "name": "Yumi Generic PLA", - "inherits": "fdm_filament_pla", - "from": "system", - "filament_id": "GFL99", - "instantiation": "false", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "" - ] -} diff --git a/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json index 45e7243ee3..cf912002ee 100644 --- a/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 230 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-230_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT 0.4 nozzle.json b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT 0.4 nozzle.json index b15cecc588..366c7b8ad8 100644 --- a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT 0.4 nozzle.json +++ b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT 0.4 nozzle.json @@ -8,7 +8,7 @@ "printer_model": "D12 230 PRO SMARTPAD DIRECT", "default_print_profile": "0.20mm Standard @Wanhao-D12-230", "default_filament_profile": [ - "Direct Drive" + "YUMI PLA Direct Drive" ], "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nLOG_Z\nTIMELAPSE_TAKE_FRAME\nG92 E0", "change_filament_gcode": "M600", diff --git a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json index b74b11321e..24a798c531 100644 --- a/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 230 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-230_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT 0.4 nozzle.json b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT 0.4 nozzle.json index 88fc2fa519..f7308b5838 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT 0.4 nozzle.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT 0.4 nozzle.json @@ -26,7 +26,7 @@ "auxiliary_fan": "0", "printer_variant": "0.4", "default_filament_profile": [ - "Direct Drive" + "YUMI PLA Direct Drive" ], "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", "change_filament_gcode": "M600", diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json index a51f0bafbf..7447f4481b 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-300_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT 0.4 nozzle.json b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT 0.4 nozzle.json index 5795ec87f1..81e3bfe34b 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT 0.4 nozzle.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT 0.4 nozzle.json @@ -22,7 +22,7 @@ "auxiliary_fan": "0", "printer_variant": "0.4", "default_filament_profile": [ - "Direct Drive" + "YUMI PLA Direct Drive" ], "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nLOG_Z\nTIMELAPSE_TAKE_FRAME\nG92 E0", "change_filament_gcode": "M600", diff --git a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json index 563d05ca53..8290a99d9e 100644 --- a/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 300 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-300_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT 0.4 nozzle.json b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT 0.4 nozzle.json index d49638c216..916c24cef6 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT 0.4 nozzle.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT 0.4 nozzle.json @@ -22,7 +22,7 @@ "auxiliary_fan": "0", "printer_variant": "0.4", "default_filament_profile": [ - "Direct Drive" + "YUMI PLA Direct Drive" ], "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0", "change_filament_gcode": "M600", diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json index d54d0d6e51..3c85fac7eb 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO M2 DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-500_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT 0.4 nozzle.json b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT 0.4 nozzle.json index 4b41bbee33..d79e811b91 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT 0.4 nozzle.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT 0.4 nozzle.json @@ -22,7 +22,7 @@ "auxiliary_fan": "0", "printer_variant": "0.4", "default_filament_profile": [ - "Direct Drive" + "YUMI PLA Direct Drive" ], "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nLOG_Z\nTIMELAPSE_TAKE_FRAME\nG92 E0", "change_filament_gcode": "M600", diff --git a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json index 2fe6842bc8..3588797494 100644 --- a/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json +++ b/resources/profiles/Wanhao France/machine/D12 500 PRO SMARTPAD DIRECT.json @@ -8,5 +8,5 @@ "bed_model": "Wanhao_D12-500_buildplate_model.stl", "bed_texture": "D12_texture.png", "hotend_model": "Wanhao D12-300_hotend.stl", - "default_materials": "YUMI PLA Bowden;YUMI PETG;" + "default_materials": "YUMI PLA Direct Drive;YUMI PETG;" } diff --git a/resources/profiles/Wanhao France/machine/fdm_machine_common.json b/resources/profiles/Wanhao France/machine/fdm_machine_common.json index 38881092e1..e72b821fa1 100644 --- a/resources/profiles/Wanhao France/machine/fdm_machine_common.json +++ b/resources/profiles/Wanhao France/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "support_chamber_temp_control": "0", "support_air_filtration": "0", "machine_max_acceleration_e": [ diff --git a/resources/profiles/Wanhao France/process/fdm_process_common.json b/resources/profiles/Wanhao France/process/fdm_process_common.json index fb15ba32dd..ce18f8a69a 100644 --- a/resources/profiles/Wanhao France/process/fdm_process_common.json +++ b/resources/profiles/Wanhao France/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Wanhao.json b/resources/profiles/Wanhao.json index d534a75d8b..81afe3eff5 100644 --- a/resources/profiles/Wanhao.json +++ b/resources/profiles/Wanhao.json @@ -1,6 +1,6 @@ { "name": "Wanhao", - "version": "02.04.00.01", + "version": "02.04.00.02", "force_update": "0", "description": "Wanhao configurations", "machine_model_list": [ diff --git a/resources/profiles/Wanhao/machine/fdm_machine_common.json b/resources/profiles/Wanhao/machine/fdm_machine_common.json index 20d52ddf93..654d066697 100644 --- a/resources/profiles/Wanhao/machine/fdm_machine_common.json +++ b/resources/profiles/Wanhao/machine/fdm_machine_common.json @@ -14,7 +14,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -110,7 +109,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "0.16mm Optimal @Bambu Lab X1 Carbon 0.4 nozzle", "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end" diff --git a/resources/profiles/Wanhao/machine/fdm_wanhao_common.json b/resources/profiles/Wanhao/machine/fdm_wanhao_common.json index 90c105b44d..0b8e77b013 100644 --- a/resources/profiles/Wanhao/machine/fdm_wanhao_common.json +++ b/resources/profiles/Wanhao/machine/fdm_wanhao_common.json @@ -116,7 +116,6 @@ "deretraction_speed": [ "40" ], - "silent_mode": "0", "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M25 ;pause print", diff --git a/resources/profiles/Wanhao/process/fdm_process_common.json b/resources/profiles/Wanhao/process/fdm_process_common.json index a3fe34bea4..d7da41458a 100644 --- a/resources/profiles/Wanhao/process/fdm_process_common.json +++ b/resources/profiles/Wanhao/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", diff --git a/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json b/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json index f3ec727575..d8b026f624 100644 --- a/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json +++ b/resources/profiles/Wanhao/process/fdm_process_wanhao_common.json @@ -4,7 +4,6 @@ "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", diff --git a/resources/profiles/WonderMaker.json b/resources/profiles/WonderMaker.json index c65bc82729..35a1b5c8fa 100755 --- a/resources/profiles/WonderMaker.json +++ b/resources/profiles/WonderMaker.json @@ -1,7 +1,7 @@ { "name": "WonderMaker", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "WonderMaker configurations", "machine_model_list": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker ABS.json b/resources/profiles/WonderMaker/filament/WonderMaker ABS.json index ab6833cb04..a15b27e098 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker ABS.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker ABS.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_abs", "from": "system", "setting_id": "cyLAXg9zBIDNkYNx", - "filament_id": "GFB00", + "filament_id": "OFjHrAX0", "instantiation": "true", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker ASA.json b/resources/profiles/WonderMaker/filament/WonderMaker ASA.json index b73a974ea9..186045f104 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker ASA.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker ASA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_asa", "from": "system", "setting_id": "Wu70ukKHBqIa4TDv", - "filament_id": "GFB01", + "filament_id": "OFy3sW6j", "instantiation": "true", "description": "When printing this filament, there's a risk of warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "eng_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json b/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json index 79d0a85a77..b86695c98d 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PET-CF.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "Rnm03E1ifi5A2vrQ", - "filament_id": "GFT01", + "filament_id": "OF4f8vVp", "instantiation": "true", "description": "When printing this filament, there's a risk of nozzle clogging, oozing, warping and low layer adhesion strength. To get better results, please refer to this wiki: Printing Tips for High Temp / Engineering materials.", "cool_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json b/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json index 434c0f9fca..0da03e7d8d 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PETG Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pet", "from": "system", "setting_id": "ZtPZlMNIqq3Gaavc", - "filament_id": "GFG00", + "filament_id": "OF5lGPup", "instantiation": "true", "description": "To get better transparent or translucent results with the corresponding filament, please refer to this wiki: Printing tips for transparent PETG.", "cool_plate_temp": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json index 7440eae0ee..2723ffd1bb 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Basic.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "HRFI81hKAaT1LwjF", - "filament_id": "GFA00", + "filament_id": "OFMK5gVo", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json index 7c641e69b0..9ebd12b035 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Marble.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "eudiDwK2EVLlGnha", - "filament_id": "GFA07", + "filament_id": "OFEbIx49", "instantiation": "true", "filament_cost": [ "29.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json index a935c96157..53fc60c709 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Matte.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "YufHNkKBRBBxucHO", - "filament_id": "GFA01", + "filament_id": "OFepU7Tl", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json index 222fcbce1a..09454f9a80 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Metal.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "4B7gD5YwPbUCvLAh", - "filament_id": "GFA02", + "filament_id": "OFcogyWl", "instantiation": "true", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json index 6738e2802e..7e2b3be650 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Silk.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "8kSWEkCpitdwX11c", - "filament_id": "GFA05", + "filament_id": "OFncpm7O", "instantiation": "true", "description": "To make the prints get higher gloss, please dry the filament before use, and set the outer wall speed to be 40 to 60 mm/s when slicing.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json b/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json index d4b51f4b0d..a2b96925a6 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PLA Wood.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pla", "from": "system", "setting_id": "KxnOjANQuyO10zzH", - "filament_id": "GFA16", + "filament_id": "OFBBgw7B", "instantiation": "true", "filament_cost": [ "24.99" diff --git a/resources/profiles/WonderMaker/filament/WonderMaker PVA.json b/resources/profiles/WonderMaker/filament/WonderMaker PVA.json index 65f504da95..1ec283f106 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker PVA.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker PVA.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_pva", "from": "system", "setting_id": "PRdEoagTzltjzJCQ", - "filament_id": "GFS04", + "filament_id": "OF4ulo9Y", "instantiation": "true", "description": "This is a water-soluble support filament, and usually it is only for the support structure and not for the model body. Printing this filament is of many requirements, and to get better printing quality, please refer to this wiki: PVA Printing Guide.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json b/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json index 3b617e15ab..a8d7620cec 100755 --- a/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json +++ b/resources/profiles/WonderMaker/filament/WonderMaker TPU 95A.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_tpu", "from": "system", "setting_id": "eUyRprcb22IdYNv3", - "filament_id": "GFU01", + "filament_id": "OFLAXKqP", "instantiation": "true", "description": "This filament is too soft and not compatible with the AMS. Printing it is of many requirements, and to get better printing quality, please refer to this wiki: TPU printing guide.", "filament_cost": [ diff --git a/resources/profiles/WonderMaker/machine/fdm_machine_common.json b/resources/profiles/WonderMaker/machine/fdm_machine_common.json index 6e812d4a1a..3fc194fe33 100755 --- a/resources/profiles/WonderMaker/machine/fdm_machine_common.json +++ b/resources/profiles/WonderMaker/machine/fdm_machine_common.json @@ -20,7 +20,6 @@ "0x0" ], "gcode_flavor": "klipper", - "silent_mode": "0", "long_retractions_when_cut": [ "0" ], diff --git a/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR 0.2 nozzle.json index 0b113f9f01..231a6d61b5 100755 --- a/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.2 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR Ultra 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR Ultra 0.2 nozzle.json index 27b1b48eca..400c52194c 100755 --- a/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR Ultra 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.06mm Fine @WonderMaker ZR Ultra 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of 0.2 mm nozzle, it has a smaller layer height, and results in minimal layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR Ultra.json index 7b393336df..840a438931 100755 --- a/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "S9bZmEeAYQKyQW6v", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR.json index 1f4a7fed3b..51c704a726 100755 --- a/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.08mm Extra Fine @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "MDzBBVuT9evcSDUx", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR 0.2 nozzle.json index 4713c9c6ef..1e32bc43f8 100755 --- a/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.2 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR Ultra 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR Ultra 0.2 nozzle.json index 422b17646b..b2e1739b53 100755 --- a/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR Ultra 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.08mm Optimal @WonderMaker ZR Ultra 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a smaller layer height, and results in almost invisible layer lines and higher printing quality, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR 0.2 nozzle.json index 1c298bcab0..d8db56e028 100755 --- a/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.2 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR Ultra 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR Ultra 0.2 nozzle.json index eeddb0e9f8..f83e6254f7 100755 --- a/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR Ultra 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.10mm Standard @WonderMaker ZR Ultra 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a small layer height, and results in almost negligible layer lines and high printing quality. It is suitable for most general printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR 0.2 nozzle.json index a1275857de..954e3ae8ed 100755 --- a/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.2 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR Ultra 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR Ultra 0.2 nozzle.json index f9a1aedca2..7f4a704c05 100755 --- a/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR Ultra 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.12mm Draft @WonderMaker ZR Ultra 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a slightly bigger layer height, and results in almost negligible layer lines, and slightly shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR Ultra.json index f270e60327..a5b2aa0d55 100755 --- a/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "bSzDzVfhYbOfsvrm", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR.json index 1e0fd84bfd..cb96ef20a9 100755 --- a/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.12mm Fine @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "RNjDYmMvSgIjaGUB", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR 0.2 nozzle.json index 5c24551f11..9fb20debdd 100755 --- a/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.2 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR Ultra 0.2 nozzle.json b/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR Ultra 0.2 nozzle.json index d10132d333..3eb2a453ff 100755 --- a/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR Ultra 0.2 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.14mm Extra Draft @WonderMaker ZR Ultra 0.2 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.2 mm nozzle, it has a bigger layer height, and results in slightly visible layer lines, but shorter printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR Ultra.json index 49e6dee9e5..33adc94625 100755 --- a/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "CJRH0KVoqMhAKf7b", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR.json index d6837e19f2..fef4b0de51 100755 --- a/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.16mm Optimal @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "Gq8p7VLck61epJRQ", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR 0.6 nozzle.json index 5ac88d7e8c..97c2009db6 100755 --- a/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.6 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR Ultra 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR Ultra 0.6 nozzle.json index b3c7bc33da..82699880de 100755 --- a/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR Ultra 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.18mm Fine @WonderMaker ZR Ultra 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR Ultra.json index 88320865b2..0655aa9194 100755 --- a/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "5UnvGUSJUfxiX3Oh", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR.json index da46084462..fcfeabbcd9 100755 --- a/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.20mm Standard @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "nalI7H3j0Qhs6qig", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR Ultra.json index 0c33e1a7f1..0463b259bd 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "hSxtB6qUwhhTkAtv", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR.json index f0b4ba5369..f56e519bef 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.24mm Draft @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "ptoXhTDH4PGy8H4w", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR 0.8 nozzle.json index 0808b7056e..764c717695 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.8 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR Ultra 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR Ultra 0.8 nozzle.json index 433cc33740..70a708ba46 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR Ultra 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.24mm Fine @WonderMaker ZR Ultra 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR 0.6 nozzle.json index ec5029b95a..b21d155153 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.6 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR Ultra 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR Ultra 0.6 nozzle.json index e31b67eb36..f9667fface 100755 --- a/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR Ultra 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.24mm Optimal @WonderMaker ZR Ultra 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR Ultra.json b/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR Ultra.json index 52b01c70c4..1785ba49f5 100755 --- a/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR Ultra.json +++ b/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR Ultra.json @@ -6,8 +6,6 @@ "setting_id": "sGfFFynEl5ot8fzq", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR.json b/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR.json index 3c61b187bf..e598576f17 100755 --- a/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR.json +++ b/resources/profiles/WonderMaker/process/0.28mm Extra Draft @WonderMaker ZR.json @@ -6,8 +6,6 @@ "setting_id": "cns9NtEbZzQRnUOq", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.4 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR 0.6 nozzle.json index 3818aa0c7f..45bc88f11c 100755 --- a/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.6 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR Ultra 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR Ultra 0.6 nozzle.json index 35257448ee..749427287a 100755 --- a/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR Ultra 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.30mm Standard @WonderMaker ZR Ultra 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR 0.8 nozzle.json index 01040bc97d..5117bec5c7 100755 --- a/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.8 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR Ultra 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR Ultra 0.8 nozzle.json index 9387e0bd31..650f2b16bd 100755 --- a/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR Ultra 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.32mm Optimal @WonderMaker ZR Ultra 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR 0.6 nozzle.json index 32e8d231a0..5da20d13fe 100755 --- a/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.6 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR Ultra 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR Ultra 0.6 nozzle.json index aec25c67cd..c5d787805f 100755 --- a/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR Ultra 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.36mm Draft @WonderMaker ZR Ultra 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR 0.8 nozzle.json index 9e040a39f7..178371f567 100755 --- a/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.8 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR Ultra 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR Ultra 0.8 nozzle.json index 1e5fbadf5a..b05bad45c8 100755 --- a/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR Ultra 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.40mm Standard @WonderMaker ZR Ultra 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR 0.6 nozzle.json index 23b41cff0f..3de31e9320 100755 --- a/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.6 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR Ultra 0.6 nozzle.json b/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR Ultra 0.6 nozzle.json index 0499dd48ff..cfce9cde18 100755 --- a/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR Ultra 0.6 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.42mm Extra Draft @WonderMaker ZR Ultra 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR 0.8 nozzle.json index b2d1696c4f..37089b0318 100755 --- a/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.8 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR Ultra 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR Ultra 0.8 nozzle.json index 526dd3db7d..93311ca1d2 100755 --- a/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR Ultra 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.48mm Draft @WonderMaker ZR Ultra 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR 0.8 nozzle.json index 399b583429..5ffbf26b77 100755 --- a/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "WonderMaker ZR 0.8 nozzle" ] diff --git a/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR Ultra 0.8 nozzle.json b/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR Ultra 0.8 nozzle.json index 4708bbfed9..f5b2d333a9 100755 --- a/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR Ultra 0.8 nozzle.json +++ b/resources/profiles/WonderMaker/process/0.56mm Extra Draft @WonderMaker ZR Ultra 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a much bigger layer height, and results in extremely apparent layer lines and much lower printing quality, but much shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "ooze_prevention": "1", "preheat_time": "30", "standby_temperature_delta": "-80", diff --git a/resources/profiles/WonderMaker/process/fdm_process_common.json b/resources/profiles/WonderMaker/process/fdm_process_common.json index ba67f8406c..a9d67585ce 100755 --- a/resources/profiles/WonderMaker/process/fdm_process_common.json +++ b/resources/profiles/WonderMaker/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "bridge_speed": "25", @@ -69,7 +68,5 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [], - "smooth_coefficient": "80", - "overhang_totally_speed": "19", "scarf_angle_threshold": "155" } diff --git a/resources/profiles/WonderMaker/process/fdm_process_wm_common.json b/resources/profiles/WonderMaker/process/fdm_process_wm_common.json index 3b7fb2ba74..72e8a815a2 100755 --- a/resources/profiles/WonderMaker/process/fdm_process_wm_common.json +++ b/resources/profiles/WonderMaker/process/fdm_process_wm_common.json @@ -20,7 +20,6 @@ "inner_wall_acceleration": "8000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "30", diff --git a/resources/profiles/Z-Bolt.json b/resources/profiles/Z-Bolt.json index 8e3d3a0cd5..7c16785c62 100644 --- a/resources/profiles/Z-Bolt.json +++ b/resources/profiles/Z-Bolt.json @@ -1,7 +1,7 @@ { "name": "Z-Bolt", "url": "", - "version": "02.04.00.01", + "version": "02.04.00.03", "force_update": "0", "description": "Z-Bolt configurations", "machine_model_list": [ diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json index 5f505d80da..10b5421797 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS;Generic ABS @Z-Bolt;Z-Bolt ABS @0.4 nozzle", "from": "system", "setting_id": "p97bQCnVyGgwMn2y", - "filament_id": "GFL204", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json index 641fff9a6b..ea89fac80f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS @0.6 nozzle", "from": "system", "setting_id": "BQdgCL8lvVW7I8Dw", - "filament_id": "GFL206", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json index 1b55d4460b..48c8a20136 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS @0.8 nozzle", "from": "system", "setting_id": "Xn2L7IBp26Bb6G2K", - "filament_id": "GFL208", + "filament_id": "OFY9muEs", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json index bdef07fbb7..26374ba05c 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS @Z-Bolt Base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Generic ABS @Z-Bolt Base", "inherits": "fdm_filament_abs", - "renamed_from": "Z-Bolt ABS;Generic ABS @Z-Bolt", "from": "system", - "filament_id": "GFL200", + "filament_id": "OFY9muEs", "instantiation": "false", "filament_max_volumetric_speed": [ "20" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json index a933deaf74..7ee03a1904 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT;Generic ABS HT @Z-Bolt;Z-Bolt ABS HT @0.4 nozzle", "from": "system", "setting_id": "TDGj84iuRAL9R1d4", - "filament_id": "GFL504", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json index 701a2e6b7f..626fbe9977 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT @0.6 nozzle", "from": "system", "setting_id": "2AKxm2VhVlL2vMM1", - "filament_id": "GFL506", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json index 6c73a3d99f..feb932dcdb 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt ABS HT @0.8 nozzle", "from": "system", "setting_id": "ztusMudd96Ns3Ip0", - "filament_id": "GFL508", + "filament_id": "OFsP8PKH", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json index 431d4dc7c2..7bacdfde2e 100644 --- a/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic ABS HT @Z-Bolt Base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Generic ABS HT @Z-Bolt Base", "inherits": "Generic ABS @Z-Bolt Base", - "renamed_from": "Z-Bolt ABS HT;Generic ABS HT @Z-Bolt", "from": "system", - "filament_id": "GFL500", + "filament_id": "OFsP8PKH", "instantiation": "false", "description": "Use this filament profile to print big ABS models with chamber heating", "chamber_temperatures": [ diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json index e9b01c547c..c09de55efa 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA;Generic PA @Z-Bolt;Z-Bolt PA @0.4 nozzle", "from": "system", "setting_id": "zuvJBWxHOiPMyExQ", - "filament_id": "GFL404", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json index d74fcf8470..d6886e6b1e 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA @0.6 nozzle", "from": "system", "setting_id": "MB0n4BeDFEI25yTe", - "filament_id": "GFL406", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json index 42d675d826..12a005431f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PA @0.8 nozzle", "from": "system", "setting_id": "WZc4C1f6cPG8HZR3", - "filament_id": "GFL408", + "filament_id": "OFg8ndtj", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json index 73459bf326..07416a8d81 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PA @Z-Bolt Base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Generic PA @Z-Bolt Base", "inherits": "fdm_filament_pa", - "renamed_from": "Z-Bolt PA;Generic PA @Z-Bolt", "from": "system", - "filament_id": "GFL400", + "filament_id": "OFg8ndtj", "instantiation": "false", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json index 476ece5d3b..a28c4bc1c3 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG;Generic PETG @Z-Bolt;Z-Bolt PETG @0.4 nozzle", "from": "system", "setting_id": "LWwbNXs8bf1iGELi", - "filament_id": "GFL304", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "8" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json index 8bd7ff1efa..15aab3fe46 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG @0.6 nozzle", "from": "system", "setting_id": "w4HVBbunzssG9j3s", - "filament_id": "GFL306", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "10" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json index 3bce1def13..4fe8b41490 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PETG @0.8 nozzle", "from": "system", "setting_id": "TnLZ0vOVjIjng3u0", - "filament_id": "GFL308", + "filament_id": "OFYPdQJh", "instantiation": "true", "filament_max_volumetric_speed": [ "12" diff --git a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json index 8e64cc6200..18f2530d8a 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PETG @Z-Bolt Base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Generic PETG @Z-Bolt Base", "inherits": "fdm_filament_pet", - "renamed_from": "Z-Bolt PETG;Generic PETG @Z-Bolt", "from": "system", - "filament_id": "GFL300", + "filament_id": "OFYPdQJh", "instantiation": "false", "fan_cooling_layer_time": [ "30" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json index 943d57d6c1..527888a93f 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.4 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA;Generic PLA @Z-Bolt;Z-Bolt PLA @0.4 nozzle", "from": "system", "setting_id": "0MfamDPH1L6sMRff", - "filament_id": "GFL100", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "15" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json index a87f145129..af58bff7c5 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.6 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA @0.6 nozzle", "from": "system", "setting_id": "tdq9Ye9GLpZXlak6", - "filament_id": "GFL106", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "18" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json index 283951b1a2..dbe507507b 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt 0.8 nozzle.json @@ -5,7 +5,7 @@ "renamed_from": "Z-Bolt PLA @0.8 nozzle", "from": "system", "setting_id": "GKtc9mJusUZJD6kx", - "filament_id": "GFL108", + "filament_id": "OFDSrzZ8", "instantiation": "true", "filament_max_volumetric_speed": [ "21" diff --git a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json index 4b946c44cd..2b64f307ac 100644 --- a/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json +++ b/resources/profiles/Z-Bolt/filament/Generic PLA @Z-Bolt Base.json @@ -2,9 +2,8 @@ "type": "filament", "name": "Generic PLA @Z-Bolt Base", "inherits": "fdm_filament_pla", - "renamed_from": "Z-Bolt PLA;Generic PLA @Z-Bolt", "from": "system", - "filament_id": "GFL100", + "filament_id": "OFDSrzZ8", "instantiation": "false", "filament_max_volumetric_speed": [ "20" diff --git a/resources/profiles/Z-Bolt/machine/fdm_machine_common.json b/resources/profiles/Z-Bolt/machine/fdm_machine_common.json index 2a5cddb2f2..e9350c430c 100644 --- a/resources/profiles/Z-Bolt/machine/fdm_machine_common.json +++ b/resources/profiles/Z-Bolt/machine/fdm_machine_common.json @@ -19,7 +19,6 @@ "0x0" ], "gcode_flavor": "marlin", - "silent_mode": "0", "machine_max_acceleration_e": [ "5000" ], @@ -111,7 +110,6 @@ "wipe": [ "1" ], - "z_lift_type": "NormalLift", "default_print_profile": "", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n_BEFORE_LAYER_CHANGE", "layer_change_gcode": "_AFTER_LAYER_CHANGE Z={layer_z}", diff --git a/resources/profiles/Z-Bolt/process/0.08mm Extra Fine @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.08mm Extra Fine @Z-Bolt 0.4 nozzle.json index 52e9dae00d..fa724bd573 100644 --- a/resources/profiles/Z-Bolt/process/0.08mm Extra Fine @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.08mm Extra Fine @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "aQbSyiYUXanu2sjX", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.08mm High Quality @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.08mm High Quality @Z-Bolt 0.4 nozzle.json index c71a6ae5ef..8535207de5 100644 --- a/resources/profiles/Z-Bolt/process/0.08mm High Quality @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.08mm High Quality @Z-Bolt 0.4 nozzle.json @@ -16,8 +16,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "150", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt 0.4 nozzle.json index 74108d7eb6..4cd386a5a9 100644 --- a/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.12mm Fine @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "FXUuYzz6QKb2B8NO", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in almost negligible layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt 0.4 nozzle.json index b7faeba25f..f79c91e16c 100644 --- a/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.12mm High Quality @Z-Bolt 0.4 nozzle.json @@ -16,8 +16,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "180", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.4 nozzle.json index 06b6c23e34..72b2a62857 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.4 nozzle.json @@ -16,8 +16,6 @@ "sparse_infill_pattern": "gyroid", "sparse_infill_speed": "200", "top_surface_speed": "150", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.6 nozzle.json index e826d762af..036b2ae886 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm High Quality @Z-Bolt 0.6 nozzle.json @@ -12,8 +12,6 @@ "top_surface_speed": "100", "default_acceleration": "5000", "outer_wall_acceleration": "2500", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt 0.4 nozzle.json index ccd2dbcd33..7f375e45f5 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Optimal @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "TrwuaRthXrp9Aqc2", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt 0.6 nozzle.json index 62e3e30a66..831f6dabdd 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S300 0.6 nozzle.json index a2651b61b8..4d70dc3505 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S400 0.6 nozzle.json index 7dceacb4d0..058a3a870c 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json index db42d946e5..977400fb28 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json index 053a3b9593..15405feb72 100644 --- a/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.16mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.20mm High Quality @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm High Quality @Z-Bolt 0.6 nozzle.json index d926fede96..df9e3494fd 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm High Quality @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm High Quality @Z-Bolt 0.6 nozzle.json @@ -13,8 +13,6 @@ "top_surface_speed": "100", "default_acceleration": "5000", "outer_wall_acceleration": "2500", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.4 nozzle.json index e10958dbfe..740f23349e 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "jSA9QDV6RfL4eb5X", "instantiation": "true", "description": "It has a general layer height, and results in general layer lines and printing quality. It is suitable for most general printing cases.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.6 nozzle.json index 92e55765eb..b5ccd2ba7a 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S300 0.6 nozzle.json index 97f40201d2..43f9ea536b 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S400 0.6 nozzle.json index 6366647a6f..641a53bd80 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json index 7b31b4afbb..2843e854cb 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json index 27808d012c..37ddf5b15d 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt 0.4 nozzle.json index 177a7d1f87..ab0077d73a 100644 --- a/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.20mm Strength @Z-Bolt 0.4 nozzle.json @@ -9,8 +9,6 @@ "description": "Compared with the default profile of a 0.4 mm nozzle, it has more wall loops and a higher sparse infill density. So, it results in higher strength of the prints, but more filament consumption and longer printing time.", "outer_wall_speed": "60", "sparse_infill_density": "25%", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "wall_loops": "6", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt 0.4 nozzle.json index 358ae59e06..9505267903 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Draft @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "L1bdHzIO1OKLDT3Q", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but slightly shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.6 nozzle.json index 5ef55f74f5..627d9ea582 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.8 nozzle.json index dad1890533..f16cccf104 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt 0.8 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.6 nozzle.json index fce0f0dc27..e646fce399 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.8 nozzle.json index 1f84b54785..9d8d457f31 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S300 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.6 nozzle.json index fe57ad2149..b304c7d305 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.8 nozzle.json index c1a1f9d3ba..ad2726dc6a 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S400 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json index e12643bd2a..5780b16d09 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json index 962ba3a32a..f4f133b107 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json index 8ba32b08b9..9ea1286a91 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a smaller layer height, and results in less apparent layer lines and slight higher printing quality, but longer printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json index 7ff2da7c2d..309d3ea585 100644 --- a/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.24mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a smaller layer height, and results in less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.8 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt 0.4 nozzle.json b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt 0.4 nozzle.json index f442650a69..3304756c78 100644 --- a/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt 0.4 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.28mm Extra Draft @Z-Bolt 0.4 nozzle.json @@ -7,8 +7,6 @@ "setting_id": "U6WOuHSZoT8XksE5", "instantiation": "true", "description": "Compared with the default profile of a 0.4 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time.", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.4 nozzle", "Z-Bolt S300 Dual 0.4 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt 0.6 nozzle.json index 006f1c4d0a..0d00b00d51 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S300 0.6 nozzle.json index 5bc3a498b3..b040598949 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S400 0.6 nozzle.json index 6984af380f..611ec1a723 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json index 6df85166a4..34e6b16951 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json index 5add162efc..219a9150dc 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a big layer height, and results in apparent layer lines and ordinary printing quality and printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt 0.6 nozzle.json index 8fea281789..14c5183ddb 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt 0.6 nozzle.json @@ -10,8 +10,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S300 0.6 nozzle.json index 127c42f19c..aed5e54271 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S300 0.6 nozzle.json @@ -9,8 +9,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S400 0.6 nozzle.json index d03ac505d5..67525a87b8 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S400 0.6 nozzle.json @@ -9,8 +9,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json index 14dcc0f4ee..01745da5e5 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S600 0.6 nozzle.json @@ -9,8 +9,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json index 9dd0eb0728..a03c875c2a 100644 --- a/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.30mm Strength @Z-Bolt S800 0.6 nozzle.json @@ -9,8 +9,6 @@ "elefant_foot_compensation": "0.15", "sparse_infill_density": "25%", "wall_loops": "4", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt 0.8 nozzle.json index 7a8f7ea2e9..8587bb3e67 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt 0.8 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S300 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S300 0.8 nozzle.json index e639b6b277..f36ba77e24 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S300 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S300 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S400 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S400 0.8 nozzle.json index dc7e570d65..0ad0f9371a 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S400 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S400 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json index e7a77f55a1..f449cfd705 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json index 7fe7708930..7732bb1c18 100644 --- a/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.32mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a slightly smaller layer height, and results in slightly less but still apparent layer lines and slightly higher printing quality, but longer printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.8 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt 0.6 nozzle.json index 236979d112..8f5029d11d 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S300 0.6 nozzle.json index 32ec85d70d..d782d7d919 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S400 0.6 nozzle.json index 5f0e926991..a196f43fea 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json index e58fecfbe1..42f2d6defc 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json index 3d2af55bd0..e06c917d53 100644 --- a/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.36mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in more apparent layer lines and lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt 0.8 nozzle.json index b8c39f25b3..652815aeb7 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt 0.8 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S300 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S300 0.8 nozzle.json index bacba10332..b00f4442af 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S300 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S300 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S400 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S400 0.8 nozzle.json index 1234ff53d8..103dd99e63 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S400 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S400 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json index 6b05db5f96..30f9ef5ff1 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json index 0d0475e7d9..57a59eb902 100644 --- a/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.40mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "It has a very big layer height, and results in very apparent layer lines, low printing quality and general printing time.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.8 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt 0.6 nozzle.json index ccaab4f070..b64b0028f9 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt 0.6 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S300 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S300 0.6 nozzle.json index 9a5e4b5aa5..87f866d958 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S300 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S300 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.6 nozzle", "Z-Bolt S300 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S400 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S400 0.6 nozzle.json index c84e8895c0..c82284df22 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S400 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S400 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.6 nozzle", "Z-Bolt S400 Dual 0.6 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json index 20f0a155e3..110605f717 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S600 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.6 nozzle", "Z-Bolt S600 Dual 0.6 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json index ed319c209f..c042b0bea2 100644 --- a/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.42mm Standard @Z-Bolt S800 0.6 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.6 mm nozzle, it has a bigger layer height, and results in much more apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.6 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt 0.8 nozzle.json index b26b749a81..c67e1d42fa 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt 0.8 nozzle.json @@ -8,8 +8,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S300 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S300 0.8 nozzle.json index 42ddc4ff8d..c1d19c312e 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S300 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S300 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S300 0.8 nozzle", "Z-Bolt S300 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S400 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S400 0.8 nozzle.json index 916e7a28e6..efed7665fe 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S400 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S400 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S400 0.8 nozzle", "Z-Bolt S400 Dual 0.8 nozzle" diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json index 32dc534606..49092fb651 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S600 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S600 0.8 nozzle", "Z-Bolt S600 Dual 0.8 nozzle", diff --git a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json index 21c660ae18..cdea08b5f2 100644 --- a/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json +++ b/resources/profiles/Z-Bolt/process/0.48mm Standard @Z-Bolt S800 0.8 nozzle.json @@ -7,8 +7,6 @@ "instantiation": "true", "description": "Compared with the default profile of a 0.8 mm nozzle, it has a bigger layer height, and results in very apparent layer lines and much lower printing quality, but shorter printing time in some printing cases.", "elefant_foot_compensation": "0.15", - "smooth_coefficient": "150", - "overhang_totally_speed": "50", "compatible_printers": [ "Z-Bolt S800 Dual 0.8 nozzle" ] diff --git a/resources/profiles/Z-Bolt/process/fdm_process_common.json b/resources/profiles/Z-Bolt/process/fdm_process_common.json index 4859096b3d..a685416c9b 100644 --- a/resources/profiles/Z-Bolt/process/fdm_process_common.json +++ b/resources/profiles/Z-Bolt/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "bridge_flow": "0.95", "bridge_no_support": "0", "bridge_speed": "25", @@ -41,7 +40,6 @@ "internal_solid_infill_speed": "40", "outer_wall_line_width": "0.42", "outer_wall_speed": "120", - "overhang_totally_speed": "19", "print_sequence": "by layer", "spiral_mode": "0", "standby_temperature_delta": "-5", @@ -70,6 +68,5 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [], - "smooth_coefficient": "80", "scarf_angle_threshold": "155" } diff --git a/resources/profiles/Z-Bolt/process/fdm_process_zbolt_common.json b/resources/profiles/Z-Bolt/process/fdm_process_zbolt_common.json index 627ed0f9f9..dd205e9370 100644 --- a/resources/profiles/Z-Bolt/process/fdm_process_zbolt_common.json +++ b/resources/profiles/Z-Bolt/process/fdm_process_zbolt_common.json @@ -17,7 +17,6 @@ "outer_wall_acceleration": "5000", "wall_infill_order": "inner wall/outer wall/infill", "line_width": "0.42", - "internal_bridge_support_thickness": "0.8", "initial_layer_acceleration": "500", "initial_layer_line_width": "0.5", "initial_layer_speed": "30", diff --git a/resources/profiles/blacklist.json b/resources/profiles/blacklist.json index 2c036613fc..6c16b5ae5d 100644 --- a/resources/profiles/blacklist.json +++ b/resources/profiles/blacklist.json @@ -4,9 +4,5 @@ ], "process": [ "GP008" - ], - "machine_model_list": [], - "process_list": [], - "filament_list": [], - "machine_list": [] + ] } diff --git a/resources/profiles/iQ.json b/resources/profiles/iQ.json index 4afcb18328..1148b112f3 100644 --- a/resources/profiles/iQ.json +++ b/resources/profiles/iQ.json @@ -1,6 +1,6 @@ { "name": "innovatiQ", - "version": "02.04.00.01", + "version": "02.04.00.04", "force_update": "1", "description": "innovatiQ configuration", "machine_model_list": [ @@ -56,6 +56,14 @@ "name": "fdm_process_tiq_common", "sub_path": "process/fdm_process_tiq_common.json" }, + { + "name": "0.15mm Standard @iQ TiQ2 (0.25 Nozzle)", + "sub_path": "process/0.15mm Standard @iQ TiQ2 (0.25 Nozzle).json" + }, + { + "name": "0.15mm Standard @iQ TiQ8 (0.25 Nozzle)", + "sub_path": "process/0.15mm Standard @iQ TiQ8 (0.25 Nozzle).json" + }, { "name": "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)", "sub_path": "process/0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle).json" @@ -76,26 +84,18 @@ "name": "0.20mm Standard @iQ TiQ8 P1 - ABS Natur Material4Print (0.4 Nozzle)", "sub_path": "process/0.20mm Standard @iQ TiQ8 P1 - ABS Natur Material4Print (0.4 Nozzle).json" }, - { - "name": "0.15mm Standard @iQ TiQ2 (0.25 Nozzle)", - "sub_path": "process/0.15mm Standard @iQ TiQ2 (0.25 Nozzle).json" - }, { "name": "0.30mm Standard @iQ TiQ2 (0.6 Nozzle)", "sub_path": "process/0.30mm Standard @iQ TiQ2 (0.6 Nozzle).json" }, - { - "name": "0.40mm Standard @iQ TiQ2 (0.8 Nozzle)", - "sub_path": "process/0.40mm Standard @iQ TiQ2 (0.8 Nozzle).json" - }, - { - "name": "0.15mm Standard @iQ TiQ8 (0.25 Nozzle)", - "sub_path": "process/0.15mm Standard @iQ TiQ8 (0.25 Nozzle).json" - }, { "name": "0.30mm Standard @iQ TiQ8 (0.6 Nozzle)", "sub_path": "process/0.30mm Standard @iQ TiQ8 (0.6 Nozzle).json" }, + { + "name": "0.40mm Standard @iQ TiQ2 (0.8 Nozzle)", + "sub_path": "process/0.40mm Standard @iQ TiQ2 (0.8 Nozzle).json" + }, { "name": "0.40mm Standard @iQ TiQ8 (0.8 Nozzle)", "sub_path": "process/0.40mm Standard @iQ TiQ8 (0.8 Nozzle).json" diff --git a/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json index 79be89b387..5710a6c96e 100644 --- a/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "7YUqT6co3NfvJ8L9", - "filament_id": "IQM1", + "filament_id": "OFjUGUIK", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json index 8b07c6af0f..f3dfafcd74 100644 --- a/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Fiberthree PACF Pro P2 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "B5VrAYqX9Dzj5qfV", - "filament_id": "IQM7", + "filament_id": "OF6kj4jI", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle)" diff --git a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json index b692152c71..3ead9c48e3 100644 --- a/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Grauts HPP4GF25 P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "5M829nxsQdq2Sde5", - "filament_id": "IQM1", + "filament_id": "OFXJ9iom", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P1 - HPP4GF25 Grauts (0.4 Nozzle)" diff --git a/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json b/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json index e0faf6eb71..3409911a32 100644 --- a/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "2gaJup2jw52l27sv", - "filament_id": "IQM2", + "filament_id": "OFJWKoYG", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json index 5226e1e755..2bcd99b952 100644 --- a/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/Polymaker PETG Polymax black P1 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "QefI7iu8bAQ9jzDK", - "filament_id": "IQM3", + "filament_id": "OFaeIx7W", "instantiation": "true", "activate_air_filtration": [ "0" diff --git a/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json b/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json index 2855f13552..aacf080a4b 100644 --- a/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json +++ b/resources/profiles/iQ/filament/VXL90 TiQ2 P2 @iQ TiQ2 0.4 Nozzle.json @@ -4,7 +4,7 @@ "inherits": "fdm_filament_common", "from": "system", "setting_id": "rVzUhxKEDUfGMnQi", - "filament_id": "IQM1011", + "filament_id": "OFOJPAAS", "instantiation": "true", "compatible_prints": [ "0.20mm Standard @iQ TiQ2 P2 - PACF Pro Fiberthree + VXL90 Xioneer (0.4 Nozzle)" diff --git a/resources/profiles/iQ/filament/fdm_filament_common.json b/resources/profiles/iQ/filament/fdm_filament_common.json index 4bf9b7986c..5d8d059f91 100644 --- a/resources/profiles/iQ/filament/fdm_filament_common.json +++ b/resources/profiles/iQ/filament/fdm_filament_common.json @@ -84,9 +84,6 @@ "filament_is_support": [ "0" ], - "filament_load_time": [ - "0" - ], "filament_loading_speed": [ "28" ], @@ -153,9 +150,6 @@ "filament_toolchange_delay": [ "0" ], - "filament_unload_time": [ - "0" - ], "filament_unloading_speed": [ "90" ], diff --git a/resources/profiles/iQ/machine/TiQ2.json b/resources/profiles/iQ/machine/TiQ2.json index 36c04edf6e..3a24cd308a 100644 --- a/resources/profiles/iQ/machine/TiQ2.json +++ b/resources/profiles/iQ/machine/TiQ2.json @@ -7,5 +7,5 @@ "family": "TiQ", "bed_model": "TiQ2.stl", "bed_texture": "TiQ2_texture.svg", - "default_materials": "Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle" + "default_materials": "Fiberthree PACF Pro P1 @iQ TiQ2 0.4 Nozzle;Generic PLA @System" } diff --git a/resources/profiles/iQ/machine/TiQ8.json b/resources/profiles/iQ/machine/TiQ8.json index 21d9c23413..0243125926 100644 --- a/resources/profiles/iQ/machine/TiQ8.json +++ b/resources/profiles/iQ/machine/TiQ8.json @@ -7,5 +7,5 @@ "family": "TiQ", "bed_model": "TiQ8.stl", "bed_texture": "TiQ8_texture.svg", - "default_materials": "Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle" + "default_materials": "Material4Print ABS Natur P1 @iQ TiQ8 0.4 Nozzle;Generic PLA @System" } diff --git a/resources/profiles/iQ/machine/fdm_tiq_common.json b/resources/profiles/iQ/machine/fdm_tiq_common.json index 2f1b6b8415..42fda68609 100644 --- a/resources/profiles/iQ/machine/fdm_tiq_common.json +++ b/resources/profiles/iQ/machine/fdm_tiq_common.json @@ -176,7 +176,6 @@ "30" ], "scan_first_layer": "0", - "silent_mode": "0", "single_extruder_multi_material": "0", "support_air_filtration": "1", "support_chamber_temp_control": "1", diff --git a/resources/profiles/iQ/process/fdm_process_tiq_common.json b/resources/profiles/iQ/process/fdm_process_tiq_common.json index 3214a995d5..d89538b598 100644 --- a/resources/profiles/iQ/process/fdm_process_tiq_common.json +++ b/resources/profiles/iQ/process/fdm_process_tiq_common.json @@ -30,7 +30,6 @@ "standby_temperature_delta": "-40", "preheat_time": "30", "preheat_steps": "1", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonic", @@ -100,7 +99,6 @@ "support_object_xy_distance": "0.35", "tree_support_branch_angle": "30", "tree_support_wall_count": "0", - "tree_support_with_infill": "0", "detect_thin_wall": "0", "top_surface_pattern": "monotonicline", "top_shell_thickness": "0.8", diff --git a/resources/profiles/re3D.json b/resources/profiles/re3D.json index 94cca3c2ef..da34373d47 100644 --- a/resources/profiles/re3D.json +++ b/resources/profiles/re3D.json @@ -1,219 +1,199 @@ { - "name": "re3D", - "url": "", - "version": "03.00.08", - "force_update": "0", - "description": "re3D configurations", - "machine_model_list": [ - { - "name": "re3D Gigabot 4", - "sub_path": "machine/re3D Gigabot 4.json" - }, - { - "name": "re3D Gigabot 4 XLT", - "sub_path": "machine/re3D Gigabot 4 XLT.json" - }, - { - "name": "re3D GigabotX 2", - "sub_path": "machine/re3D GigabotX 2.json" - }, - { - "name": "re3D GigabotX 2 XLT", - "sub_path": "machine/re3D GigabotX 2 XLT.json" - }, - { - "name": "re3D Terabot 4", - "sub_path": "machine/re3D Terabot 4.json" - }, - { - "name": "re3D TerabotX 2", - "sub_path": "machine/re3D TerabotX 2.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "fdm_process_re3D_common", - "sub_path": "process/fdm_process_re3D_common.json" - }, - { - "name": "fgf_process_re3D_common", - "sub_path": "process/fgf_process_re3D_common.json" - }, - { - "name": "0.2 Fine", - "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" - }, - { - "name": "0.26 Standard", - "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" - }, - { - "name": "0.32 Draft", - "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" - }, - { - "name": "0.3 Fine", - "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" - }, - { - "name": "0.4 Standard", - "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" - }, - { - "name": "1.0 Standard", - "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" - }, - { - "name": "0.6 Standard", - "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_pp", - "sub_path": "filament/fdm_filament_pp.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "re3D PLA", - "sub_path": "filament/re3D PLA.json" - }, - { - "name": "re3D PETG", - "sub_path": "filament/re3D PETG.json" - }, - { - "name": "re3D PC", - "sub_path": "filament/re3D PC.json" - }, - { - "name": "re3D rPETG", - "sub_path": "filament/re3D rPETG.json" - }, - { - "name": "re3D rPP", - "sub_path": "filament/re3D rPP.json" - }, - { - "name": "re3D PLA @0.4 nozzle", - "sub_path": "filament/re3D PLA @0.4 nozzle.json" - }, - { - "name": "re3D PLA @0.8 nozzle", - "sub_path": "filament/re3D PLA @0.8 nozzle.json" - }, - { - "name": "re3D PETG @0.4 nozzle", - "sub_path": "filament/re3D PETG @0.4 nozzle.json" - }, - { - "name": "re3D PETG @0.8 nozzle", - "sub_path": "filament/re3D PETG @0.8 nozzle.json" - }, - { - "name": "re3D PC @0.4 nozzle", - "sub_path": "filament/re3D PC @0.4 nozzle.json" - }, - { - "name": "re3D PC @0.8 nozzle", - "sub_path": "filament/re3D PC @0.8 nozzle.json" - }, - { - "name": "re3D rPETG @0.8 nozzle", - "sub_path": "filament/re3D rPETG @0.8 nozzle.json" - }, - { - "name": "re3D rPETG @1.75 nozzle", - "sub_path": "filament/re3D rPETG @1.75 nozzle.json" - }, - { - "name": "re3D rPP @0.8 nozzle", - "sub_path": "filament/re3D rPP @0.8 nozzle.json" - }, - { - "name": "re3D rPP @1.75 nozzle", - "sub_path": "filament/re3D rPP @1.75 nozzle.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "fdm_re3D_common", - "sub_path": "machine/fdm_re3D_common.json" - }, - { - "name": "fgf_re3D_common", - "sub_path": "machine/fgf_re3D_common.json" - }, - { - "name": "re3D Gigabot 4 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.4 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" - }, - { - "name": "re3D Gigabot 4 XLT 0.8 nozzle", - "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 0.8 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" - }, - { - "name": "re3D GigabotX 2 XLT 1.75 nozzle", - "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.4 nozzle", - "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" - }, - { - "name": "re3D Terabot 4 0.8 nozzle", - "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" - }, - { - "name": "re3D TerabotX 2 0.8 nozzle", - "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" - }, - { - "name": "re3D TerabotX 2 1.75 nozzle", - "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" - } - ] -} \ No newline at end of file + "name": "re3D", + "url": "", + "version": "03.00.11", + "force_update": "0", + "description": "re3D configurations", + "machine_model_list": [ + { + "name": "re3D Gigabot 4", + "sub_path": "machine/re3D Gigabot 4.json" + }, + { + "name": "re3D Gigabot 4 XLT", + "sub_path": "machine/re3D Gigabot 4 XLT.json" + }, + { + "name": "re3D GigabotX 2", + "sub_path": "machine/re3D GigabotX 2.json" + }, + { + "name": "re3D GigabotX 2 XLT", + "sub_path": "machine/re3D GigabotX 2 XLT.json" + }, + { + "name": "re3D Terabot 4", + "sub_path": "machine/re3D Terabot 4.json" + }, + { + "name": "re3D TerabotX 2", + "sub_path": "machine/re3D TerabotX 2.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_re3D_common", + "sub_path": "process/fdm_process_re3D_common.json" + }, + { + "name": "fgf_process_re3D_common", + "sub_path": "process/fgf_process_re3D_common.json" + }, + { + "name": "0.2 Fine", + "sub_path": "process/0.2mm Fine @re3D fdm 0.4.json" + }, + { + "name": "0.26 Standard", + "sub_path": "process/0.26mm Standard @re3D fdm 0.4.json" + }, + { + "name": "0.3 Fine", + "sub_path": "process/0.3mm Fine @re3D fdm 0.8.json" + }, + { + "name": "0.32 Draft", + "sub_path": "process/0.32mm Draft @re3D fdm 0.4.json" + }, + { + "name": "0.4 Standard", + "sub_path": "process/0.4mm Draft @re3D fdm 0.8.json" + }, + { + "name": "0.6 Standard", + "sub_path": "process/0.6mm Standard @re3D fgf 0.8.json" + }, + { + "name": "1.0 Standard", + "sub_path": "process/1.0mm Standard @re3D fgf 1.75.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_pp", + "sub_path": "filament/fdm_filament_pp.json" + }, + { + "name": "re3D PC @0.4 nozzle", + "sub_path": "filament/re3D PC @0.4 nozzle.json" + }, + { + "name": "re3D PC @0.8 nozzle", + "sub_path": "filament/re3D PC @0.8 nozzle.json" + }, + { + "name": "re3D PETG @0.4 nozzle", + "sub_path": "filament/re3D PETG @0.4 nozzle.json" + }, + { + "name": "re3D PETG @0.8 nozzle", + "sub_path": "filament/re3D PETG @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @0.8 nozzle", + "sub_path": "filament/re3D rPETG @0.8 nozzle.json" + }, + { + "name": "re3D rPETG @1.75 nozzle", + "sub_path": "filament/re3D rPETG @1.75 nozzle.json" + }, + { + "name": "re3D PLA @0.4 nozzle", + "sub_path": "filament/re3D PLA @0.4 nozzle.json" + }, + { + "name": "re3D PLA @0.8 nozzle", + "sub_path": "filament/re3D PLA @0.8 nozzle.json" + }, + { + "name": "re3D rPP @0.8 nozzle", + "sub_path": "filament/re3D rPP @0.8 nozzle.json" + }, + { + "name": "re3D rPP @1.75 nozzle", + "sub_path": "filament/re3D rPP @1.75 nozzle.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_re3D_common", + "sub_path": "machine/fdm_re3D_common.json" + }, + { + "name": "fgf_re3D_common", + "sub_path": "machine/fgf_re3D_common.json" + }, + { + "name": "re3D Gigabot 4 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 0.8 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.4 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.4 nozzle.json" + }, + { + "name": "re3D Gigabot 4 XLT 0.8 nozzle", + "sub_path": "machine/re3D Gigabot 4 XLT 0.8 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.4 nozzle", + "sub_path": "machine/re3D Terabot 4 0.4 nozzle.json" + }, + { + "name": "re3D Terabot 4 0.8 nozzle", + "sub_path": "machine/re3D Terabot 4 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 1.75 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 0.8 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 0.8 nozzle.json" + }, + { + "name": "re3D GigabotX 2 XLT 1.75 nozzle", + "sub_path": "machine/re3D GigabotX 2 XLT 1.75 nozzle.json" + }, + { + "name": "re3D TerabotX 2 0.8 nozzle", + "sub_path": "machine/re3D TerabotX 2 0.8 nozzle.json" + }, + { + "name": "re3D TerabotX 2 1.75 nozzle", + "sub_path": "machine/re3D TerabotX 2 1.75 nozzle.json" + } + ] +} diff --git a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json index d3ec58f07c..aa4a0baa91 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.4 nozzle.json @@ -2,9 +2,10 @@ "type": "filament", "name": "re3D PC @0.4 nozzle", "from": "system", + "renamed_from": "re3D PC", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "GFG99", + "filament_id": "OFU3QXL7", "setting_id": "6yqRE2eSyER7X82N", "filament_settings_id": [ "re3D PC @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json index 2f4f743d07..370a16baca 100644 --- a/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PC @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pc", - "filament_id": "GFG99", + "filament_id": "OFU3QXL7", "setting_id": "YVPbVSiVCzjp5ynf", "filament_settings_id": [ "re3D PC @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PC.json b/resources/profiles/re3D/filament/re3D PC.json deleted file mode 100644 index d24b00d482..0000000000 --- a/resources/profiles/re3D/filament/re3D PC.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_id": "GFG99", - "setting_id": "eSR00TZTotTvJs8l", - "filament_settings_id": [ - "re3D PC" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json index d85397a1c0..444fa42c55 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.4 nozzle.json @@ -2,9 +2,10 @@ "type": "filament", "name": "re3D PETG @0.4 nozzle", "from": "system", + "renamed_from": "re3D PETG", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG03", + "filament_id": "OF3F63OE", "setting_id": "epcrSCwjgRXMycBx", "filament_settings_id": [ "re3D PETG @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json index c45d4a84e5..93ae0e65a2 100644 --- a/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PETG @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_id": "GFG03", + "filament_id": "OF3F63OE", "setting_id": "MoQie1JMlUeH0BwR", "filament_settings_id": [ "re3D PETG @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PETG.json b/resources/profiles/re3D/filament/re3D PETG.json deleted file mode 100644 index a52d5b742c..0000000000 --- a/resources/profiles/re3D/filament/re3D PETG.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "filament_id": "GFG03", - "setting_id": "msXDK31R8KOvqNqK", - "filament_settings_id": [ - "re3D PETG" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json index a3630d0111..0314778218 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.4 nozzle.json @@ -2,9 +2,10 @@ "type": "filament", "name": "re3D PLA @0.4 nozzle", "from": "system", + "renamed_from": "re3D PLA", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "GFL99", + "filament_id": "OFRyOsZj", "setting_id": "M8OOntNjjDBR4W32", "filament_settings_id": [ "re3D PLA @0.4 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json index 002e18f67c..f537d9316c 100644 --- a/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D PLA @0.8 nozzle.json @@ -4,7 +4,7 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pla", - "filament_id": "GFL99", + "filament_id": "OFRyOsZj", "setting_id": "SpF19Y2sSYbPHyxz", "filament_settings_id": [ "re3D PLA @0.8 nozzle" diff --git a/resources/profiles/re3D/filament/re3D PLA.json b/resources/profiles/re3D/filament/re3D PLA.json deleted file mode 100644 index 7b153db22b..0000000000 --- a/resources/profiles/re3D/filament/re3D PLA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_id": "GFL99", - "setting_id": "nPpDwvFg7WQr7K3t", - "filament_settings_id": [ - "re3D PLA" - ], - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.8 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json index 0ac0d012f5..5bc3c037bf 100644 --- a/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @0.8 nozzle.json @@ -1,10 +1,10 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFmCOW2Y", "setting_id": "WlELqPVnuL7DaTxs", "name": "re3D rPETG @0.8 nozzle", "from": "system", - "renamed_from": "re3D Greengate rPETG @0.8 nozzle", + "renamed_from": "re3D Greengate rPETG @0.8 nozzle;re3D rPETG;re3D Greengate rPETG", "instantiation": "true", "inherits": "fdm_filament_pet", "nozzle_temperature_initial_layer": [ diff --git a/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json index 8cd090fc06..888880055f 100644 --- a/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPETG @1.75 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG01", + "filament_id": "OFmCOW2Y", "setting_id": "sHzO2S3mmE6Iqs2O", "name": "re3D rPETG @1.75 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPETG.json b/resources/profiles/re3D/filament/re3D rPETG.json deleted file mode 100644 index fe19f12539..0000000000 --- a/resources/profiles/re3D/filament/re3D rPETG.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "name": "re3D rPETG", - "from": "system", - "renamed_from": "re3D Greengate rPETG", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "filament_id": "GFG01", - "setting_id": "6aESuJ2S2Kogd4Lq", - "filament_settings_id": [ - "re3D rPETG" - ], - "compatible_printers": [ - "re3D GigabotX 2 0.8 nozzle", - "re3D GigabotX 2 XLT 0.8 nozzle", - "re3D TerabotX 2 0.8 nozzle", - "re3D GigabotX 2 1.75 nozzle", - "re3D GigabotX 2 XLT 1.75 nozzle", - "re3D TerabotX 2 1.75 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json index 5f5467e86d..0b8b99eda1 100644 --- a/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @0.8 nozzle.json @@ -1,9 +1,10 @@ { "type": "filament", - "filament_id": "GFG02", + "filament_id": "OFfHGM1D", "setting_id": "i9ii0b7qFYWnkGSq", "name": "re3D rPP @0.8 nozzle", "from": "system", + "renamed_from": "re3D rPP", "instantiation": "true", "inherits": "fdm_filament_pp", "filament_type": [ diff --git a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json index 2e5a3f4386..e0b8574ab7 100644 --- a/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json +++ b/resources/profiles/re3D/filament/re3D rPP @1.75 nozzle.json @@ -1,6 +1,6 @@ { "type": "filament", - "filament_id": "GFG02", + "filament_id": "OFfHGM1D", "setting_id": "356nOwsfGLI3CNqU", "name": "re3D rPP @1.75 nozzle", "from": "system", diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json deleted file mode 100644 index f7244f5985..0000000000 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "name": "re3D rPP", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pp", - "filament_id": "GFG02", - "setting_id": "8PB62qm5Cd3SHLf4", - "filament_settings_id": [ - "re3D rPP" - ], - "compatible_printers": [ - "re3D GigabotX 2 0.8 nozzle", - "re3D GigabotX 2 XLT 0.8 nozzle", - "re3D TerabotX 2 0.8 nozzle", - "re3D GigabotX 2 1.75 nozzle", - "re3D GigabotX 2 XLT 1.75 nozzle", - "re3D TerabotX 2 1.75 nozzle" - ], - "filament_vendor": [ - "re3D" - ] -} \ No newline at end of file diff --git a/resources/profiles/re3D/machine/fdm_machine_common.json b/resources/profiles/re3D/machine/fdm_machine_common.json index 736342291d..8c7a63cff5 100644 --- a/resources/profiles/re3D/machine/fdm_machine_common.json +++ b/resources/profiles/re3D/machine/fdm_machine_common.json @@ -4,10 +4,11 @@ "from": "system", "instantiation": "false", "auxiliary_fan": "0", - "bed_exclude_area": ["0x0"], + "bed_exclude_area": [ + "0x0" + ], "family": "re3D", "gcode_flavor": "klipper", "emit_machine_limits_to_gcode": "0", - "silent_mode": "0", "scan_first_layer": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/re3D/machine/fgf_re3D_common.json b/resources/profiles/re3D/machine/fgf_re3D_common.json index 3e0e409228..553bd126ee 100644 --- a/resources/profiles/re3D/machine/fgf_re3D_common.json +++ b/resources/profiles/re3D/machine/fgf_re3D_common.json @@ -1,9 +1,9 @@ { "type": "machine", "name": "fgf_re3D_common", + "inherits": "fdm_machine_common", "from": "system", "instantiation": "false", - "inherits": "fdm_machine_common", "gcode_flavor": "klipper", "printer_settings_id": "", "printer_technology": "FFF", @@ -43,7 +43,6 @@ "30" ], "z_hop_types": "Normal Lift", - "silent_mode": "0", "single_extruder_multi_material": "0", "change_filament_gcode": "M600", "machine_pause_gcode": "PAUSE", @@ -60,4 +59,4 @@ "scan_first_layer": "0", "nozzle_type": "undefine", "auxiliary_fan": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json index d14d3c260e..6ab8f4ed61 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json index 9bc78b36ad..e87cdacef1 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json index 56b4030476..dedb29c3e8 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json index a14e730b30..f34890289c 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "GB4", "printer_model": "re3D Gigabot 4 XLT", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "590x0", diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json index fcad038e3d..fd7858de60 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4 XLT.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Gigabot 4 XLT_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D Gigabot 4.json b/resources/profiles/re3D/machine/re3D Gigabot 4.json index 642fabc7d8..67531b1214 100644 --- a/resources/profiles/re3D/machine/re3D Gigabot 4.json +++ b/resources/profiles/re3D/machine/re3D Gigabot 4.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Gigabot 4_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json index 99800331d9..1b77360139 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2 XLT.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2 XLT_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D GigabotX 2.json b/resources/profiles/re3D/machine/re3D GigabotX 2.json index 3a1db130b0..20ec4ff207 100644 --- a/resources/profiles/re3D/machine/re3D GigabotX 2.json +++ b/resources/profiles/re3D/machine/re3D GigabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D GigabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json index d24ba564a2..e57e4058af 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.4 nozzle.json @@ -7,7 +7,7 @@ "model_id": "TB4", "printer_model": "re3D Terabot 4", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.4 nozzle;re3D PLA @0.4 nozzle;re3D PC @0.4 nozzle", "printable_area": [ "0x0", "915x0", diff --git a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json index 6255e84896..c15ac1f8b9 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4 0.8 nozzle.json @@ -7,7 +7,7 @@ "model_id": "TB4", "printer_model": "re3D Terabot 4", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", - "default_materials": "re3D PETG;re3D PLA;re3D PC", + "default_materials": "re3D PETG @0.8 nozzle;re3D PLA @0.8 nozzle;re3D PC @0.8 nozzle", "printable_area": [ "0x0", "915x0", diff --git a/resources/profiles/re3D/machine/re3D Terabot 4.json b/resources/profiles/re3D/machine/re3D Terabot 4.json index 725f67470e..eaca67fba0 100644 --- a/resources/profiles/re3D/machine/re3D Terabot 4.json +++ b/resources/profiles/re3D/machine/re3D Terabot 4.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D Terabot 4_buildplate_texture.svg", "hotend_model": "GB-HOTEND.stl", - "default_materials": "re3D PLA;re3D PETG;re3D PC;" + "default_materials": "re3D PLA @0.4 nozzle;re3D PLA @0.8 nozzle;re3D PETG @0.4 nozzle;re3D PETG @0.8 nozzle;re3D PC @0.4 nozzle;re3D PC @0.8 nozzle" } diff --git a/resources/profiles/re3D/machine/re3D TerabotX 2.json b/resources/profiles/re3D/machine/re3D TerabotX 2.json index f541a62ad7..177c1e05d0 100644 --- a/resources/profiles/re3D/machine/re3D TerabotX 2.json +++ b/resources/profiles/re3D/machine/re3D TerabotX 2.json @@ -9,5 +9,5 @@ "bed_model": "", "bed_texture": "re3D TerabotX 2_buildplate_texture.svg", "hotend_model": "GBX-HOTEND.stl", - "default_materials": "re3D rPETG;re3D rPP;" + "default_materials": "re3D rPETG @0.8 nozzle;re3D rPETG @1.75 nozzle;re3D rPP @0.8 nozzle;re3D rPP @1.75 nozzle" } diff --git a/resources/profiles/re3D/process/fdm_process_common.json b/resources/profiles/re3D/process/fdm_process_common.json index dcd5c826ae..8a8f884b10 100644 --- a/resources/profiles/re3D/process/fdm_process_common.json +++ b/resources/profiles/re3D/process/fdm_process_common.json @@ -3,7 +3,6 @@ "name": "fdm_process_common", "from": "system", "instantiation": "false", - "adaptive_layer_height": "0", "reduce_crossing_wall": "0", "bridge_flow": "0.95", "brim_width": "5", diff --git a/resources/profiles/re3D/process/fdm_process_re3D_common.json b/resources/profiles/re3D/process/fdm_process_re3D_common.json index ea169330f4..d72e984ae1 100644 --- a/resources/profiles/re3D/process/fdm_process_re3D_common.json +++ b/resources/profiles/re3D/process/fdm_process_re3D_common.json @@ -1,88 +1,87 @@ { - "type": "process", - "name": "fdm_process_re3D_common", - "from": "system", - "instantiation": "false", - "inherits": "fdm_process_common", - "adaptive_layer_height": "0", - "reduce_crossing_wall": "1", - "bridge_flow": "0.985", - "brim_width": "8", - "print_sequence": "by layer", - "bridge_no_support": "0", - "elefant_foot_compensation": "0", - "sparse_infill_density": "15%", - "sparse_infill_pattern": "rectilinear", - "infill_combination": "0", - "infill_wall_overlap": "25%", - "detect_overhang_wall": "1", - "reduce_infill_retraction": "0", - "filename_format": "{input_filename_base}.gcode", - "wall_loops": "3", - "wall_generator": "arachne", - "raft_layers": "0", - "seam_position": "nearest", - "skirt_distance": "8", - "skirt_height": "1", - "minimum_sparse_infill_area": "0", - "spiral_mode": "0", - "standby_temperature_delta": "-75", - "enable_support": "1", - "support_filament": "0", - "support_interface_filament": "0", - "support_on_build_plate_only": "0", - "support_interface_loop_pattern": "0", - "support_interface_top_layers": "2", - "support_interface_spacing": "0.05", - "support_base_pattern": "rectilinear", - "support_base_pattern_spacing": "2", - "support_threshold_angle": "30", - "support_object_xy_distance": "0.5", - "detect_thin_wall": "0", - "enable_prime_tower": "0", - "prime_tower_width": "60", - "xy_hole_compensation": "0", - "xy_contour_compensation": "0", - "max_travel_detour_distance": "0", - "bottom_surface_pattern": "monotonic", - "bottom_shell_layers": "3", - "bottom_shell_thickness": "0", - "brim_object_gap": "0.1", - "compatible_printers_condition": "", - "draft_shield": "disabled", - "enable_arc_fitting": "1", - "wall_infill_order": "inner wall/outer wall/infill", - "infill_direction": "45", - "interface_shells": "0", - "ironing_flow": "10%", - "ironing_spacing": "0.1", - "ironing_type": "no ironing", - "print_settings_id": "fdm_process_re3D_common", - "skirt_loops": "2", - "resolution": "0.0", - "support_type": "normal(auto)", - "support_style": "snug", - "support_interface_bottom_layers": "2", - "tree_support_branch_angle": "45", - "tree_support_wall_count": "0", - "top_surface_pattern": "monotonicline", - "top_shell_layers": "4", - "top_shell_thickness": "0.6", - "wipe_tower_no_sparse_layers": "0", - "precise_outer_wall": "0", - "accel_to_decel_enable": "0", - "prime_volume": "200", - "ooze_prevention": "1", - "preheat_time": "30", - "slow_down_layers": "2", - "small_perimeter_threshold": "10", - "exclude_object": "1", - "compatible_printers": [ - "re3D Gigabot 4 0.4 nozzle", - "re3D Gigabot 4 0.8 nozzle", - "re3D Gigabot 4 XLT 0.4 nozzle", - "re3D Gigabot 4 XLT 0.8 nozzle", - "re3D Terabot 4 0.4 nozzle", - "re3D Terabot 4 0.8 nozzle" - ] + "type": "process", + "name": "fdm_process_re3D_common", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "1", + "bridge_flow": "0.985", + "brim_width": "8", + "print_sequence": "by layer", + "bridge_no_support": "0", + "elefant_foot_compensation": "0", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "rectilinear", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "detect_overhang_wall": "1", + "reduce_infill_retraction": "0", + "filename_format": "{input_filename_base}.gcode", + "wall_loops": "3", + "wall_generator": "arachne", + "raft_layers": "0", + "seam_position": "nearest", + "skirt_distance": "8", + "skirt_height": "1", + "minimum_sparse_infill_area": "0", + "spiral_mode": "0", + "standby_temperature_delta": "-75", + "enable_support": "1", + "support_filament": "0", + "support_interface_filament": "0", + "support_on_build_plate_only": "0", + "support_interface_loop_pattern": "0", + "support_interface_top_layers": "2", + "support_interface_spacing": "0.05", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "2", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.5", + "detect_thin_wall": "0", + "enable_prime_tower": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_layers": "3", + "bottom_shell_thickness": "0", + "brim_object_gap": "0.1", + "compatible_printers_condition": "", + "draft_shield": "disabled", + "enable_arc_fitting": "1", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.1", + "ironing_type": "no ironing", + "print_settings_id": "fdm_process_re3D_common", + "skirt_loops": "2", + "resolution": "0.0", + "support_type": "normal(auto)", + "support_style": "snug", + "support_interface_bottom_layers": "2", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "top_surface_pattern": "monotonicline", + "top_shell_layers": "4", + "top_shell_thickness": "0.6", + "wipe_tower_no_sparse_layers": "0", + "precise_outer_wall": "0", + "accel_to_decel_enable": "0", + "prime_volume": "200", + "ooze_prevention": "1", + "preheat_time": "30", + "slow_down_layers": "2", + "small_perimeter_threshold": "10", + "exclude_object": "1", + "compatible_printers": [ + "re3D Gigabot 4 0.4 nozzle", + "re3D Gigabot 4 0.8 nozzle", + "re3D Gigabot 4 XLT 0.4 nozzle", + "re3D Gigabot 4 XLT 0.8 nozzle", + "re3D Terabot 4 0.4 nozzle", + "re3D Terabot 4 0.8 nozzle" + ] } diff --git a/resources/profiles/re3D/process/fgf_process_re3D_common.json b/resources/profiles/re3D/process/fgf_process_re3D_common.json index 3258753500..902366c830 100644 --- a/resources/profiles/re3D/process/fgf_process_re3D_common.json +++ b/resources/profiles/re3D/process/fgf_process_re3D_common.json @@ -1,10 +1,9 @@ { "type": "process", "name": "fgf_process_re3D_common", + "inherits": "fdm_process_common", "from": "system", "instantiation": "false", - "inherits": "fdm_process_common", - "adaptive_layer_height": "0", "reduce_crossing_wall": "1", "max_travel_detour_distance": "0", "bottom_surface_pattern": "monotonicline", @@ -112,4 +111,4 @@ "re3D TerabotX 2 0.8 nozzle", "re3D TerabotX 2 1.75 nozzle" ] -} \ No newline at end of file +} diff --git a/resources/web/guide/21/common.css b/resources/web/guide/21/common.css index e7cd57a32f..992c55d7a1 100644 --- a/resources/web/guide/21/common.css +++ b/resources/web/guide/21/common.css @@ -415,7 +415,9 @@ img.ModelThumbnail { border-width: 1px; border-style: solid; border-radius: 4px; - background-color: inherit; + border-color: var(--border-color); + background-color: var(--bg-color); + color: var(--fg-color-text); position: absolute; left: 50%; top: 200px; @@ -423,13 +425,17 @@ img.ModelThumbnail { } #NoticeBar { - background-color:#00f0d8; + background-color: var(--main-color); height: 40px; line-height: 40px; color: #fff; text-align: center; } +#NoticeBar.notice-error { + background-color: var(--button-bg-alert); +} + #NoticeContent { padding: 4mm 10mm; } diff --git a/resources/web/guide/21/common.js b/resources/web/guide/21/common.js index f7e8b1d409..9a3c76c248 100644 --- a/resources/web/guide/21/common.js +++ b/resources/web/guide/21/common.js @@ -37,6 +37,34 @@ function HandleStudio( pVal ) { HandleModelList(pVal['response']); } + else if(strCmd=='check_new_printers_result') + { + let button = document.getElementById("CheckNewPrintersBtn"); + if (button) { + button.style.pointerEvents = "auto"; + button.style.opacity = "1"; + } + + let noticeBar = document.getElementById("NoticeBar"); + let noticeText = document.getElementById("NoticeText"); + let hasError = pVal.hasOwnProperty("error"); + noticeBar.classList.toggle("notice-error", hasError); + if (hasError) { + noticeBar.textContent = "Error"; + noticeText.textContent = pVal["error"]; + } else if (pVal["vendors"] && pVal["vendors"].length > 0) { + noticeBar.textContent = "New printers found"; + noticeText.textContent = "New printer vendors installed: " + pVal["vendors"].join(", "); + } else if (pVal["declined"]) { + noticeBar.textContent = "Information"; + noticeText.textContent = "New printer vendors were found, but installation was cancelled."; + } else { + noticeBar.textContent = "Information"; + noticeText.textContent = "No new printers found."; + } + + ShowNotice(1); + } } function HandleModelList( pVal ) @@ -78,9 +106,13 @@ function HandleModelList( pVal ) } //Update Nozzel Html Append + // ORCA: HandleModelList can now be called more than once per dialog (e.g. after a new vendor + // is installed via "check for new printers"). pModel always holds the full, current list, so + // clear each vendor's printer area before repopulating instead of appending on top of a + // previous render. for( let key in ModelHtml ) { - $(".OneVendorBlock[vendor='"+key+"'] .PrinterArea").append( ModelHtml[key] ); + $(".OneVendorBlock[vendor='"+key+"'] .PrinterArea").empty().append( ModelHtml[key] ); } //Update Checkbox @@ -343,6 +375,9 @@ function OnExit() let nTotal=ModelSelect.length; if( nTotal==0 ) { + let noticeBar = document.getElementById("NoticeBar"); + noticeBar.classList.add("notice-error"); + noticeBar.textContent = "Error"; ShowNotice(1); return 0; } diff --git a/resources/web/guide/24/24.js b/resources/web/guide/24/24.js index 74a03db7b9..19ccb892c6 100644 --- a/resources/web/guide/24/24.js +++ b/resources/web/guide/24/24.js @@ -36,6 +36,22 @@ function ConfirmSelect() } } +function CheckForNewPrinters() +{ + var tSend={}; + tSend['sequence_id']=Math.round(new Date() / 1000); + tSend['command']="check_for_new_printers"; + tSend['data']={}; + + var button = document.getElementById("CheckNewPrintersBtn"); + if (button) { + button.style.pointerEvents = "none"; + button.style.opacity = "0.6"; + } + + SendWXMessage( JSON.stringify(tSend) ); +} + function CreateNewPrinter() { var tSend={}; diff --git a/resources/web/guide/24/index.html b/resources/web/guide/24/index.html index efb6148e0d..5f0a2407cc 100644 --- a/resources/web/guide/24/index.html +++ b/resources/web/guide/24/index.html @@ -82,7 +82,8 @@

Create
-
Confirm
+
Check for new printers
+
Confirm
Cancel
diff --git a/resources/web/homepage/css/dark.css b/resources/web/homepage/css/dark.css index d4950c9c80..9e72c4c2b7 100644 --- a/resources/web/homepage/css/dark.css +++ b/resources/web/homepage/css/dark.css @@ -39,7 +39,7 @@ body .BtnItem:hover { color: #efeff0; - background-color: #223C3C; + background-color: var(--row-hover); } .BtnItem:hover .LeftIcon @@ -50,7 +50,7 @@ body .BtnItemSelected { color: #efeff0; - background-color: #223C3C; + background-color: var(--row-hover); } .BtnItemSelected .LeftIcon @@ -129,12 +129,23 @@ body border: 1px solid rgba(129, 129, 131, 0.64); } -/*--- Account Sections ---*/ -.AccountSectionLabel { color: #818183; } -.OrcaAccountText { color: #efeff0; } -.AccountStatusText { color: #818183; } - -/*--- Bambu Cloud Section ---*/ -#BambuCloudHeader { color: #818183; } -#BambuCloudHeader:hover { color: #efeff0; } -.bambu-chevron svg path { stroke: currentColor; } +/*--- Account rows and account menu ---*/ +:root +{ + --row-hover : #223C3C; + --warn-color : #F07E4A; + --account-avatar-bg : #3A3A40; + --account-avatar-glyph : #7E8785; + --account-surface : #36363B; + --account-name : #EFEFF0; + --account-meta : #949494; + --account-border : #4A4A51; + --account-divider : #3A3A42; + --account-action : #26A69A; + --account-danger : #FF6A6A; + --account-danger-bg : rgba(225, 71, 71, 0.16); + --account-warn-bg : rgba(240, 126, 74, 0.16); /*----var(--warn-color) at 16%----*/ + --account-dot-off : #5A5A62; + --account-dot-on : #4CAF50; + --account-menu-shadow : 0 10px 28px rgba(0, 0, 0, 0.45); +} diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index e99d22ec64..950e330b86 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -41,7 +41,7 @@ html, body { .RedFont { font-size:12px; - color: #F07E4A; + color: var(--warn-color); } .LinkBtn @@ -78,129 +78,267 @@ body height: 100%; } -#LoginArea +/*------Account rows and account menu------*/ + +/*----These shadow similar tokens in global.css on purpose: global.css themes on the OS + via prefers-color-scheme, while this page themes on the dark.css link that + SwitchDarkMode() injects from the app theme, so the two can disagree.----*/ +:root { - display: flex; - flex-direction: column; - align-items: center; - flex-wrap: nowrap; - position: relative; - width:262px; + --row-hover : #BFE1DE; + --warn-color : #F07E4A; + --account-avatar-bg : #E6EBEA; + --account-avatar-glyph : #9AA5A3; + --account-surface : #FFFFFF; + --account-name : #262E30; + --account-meta : #7C8282; + --account-border : #DBDBDB; + --account-divider : #E2E4E4; + --account-action : #00796B; + --account-danger : #D33B3B; + --account-danger-bg : rgba(211, 59, 59, 0.10); + --account-warn-bg : rgba(240, 126, 74, 0.12); /*----var(--warn-color) at 12%----*/ + --account-dot-off : #C4CBCA; + --account-dot-on : #34A853; + --account-menu-shadow : 0 10px 28px rgba(20, 30, 28, 0.18); + + --glyph-account: + url('data:image/svg+xml;utf8,'); + --glyph-logout: + url('data:image/svg+xml;utf8,'); } -.AccountSectionLabel +#LoginArea +{ + position: relative; + padding: 10px 8px; + box-sizing: border-box; + width: 262px; + border-bottom: 1px solid var(--account-divider); +} + +.AccountRow { display: flex; align-items: center; gap: 8px; - font-size: 13px; - font-weight: 600; - color: var(--fg-color-text); - padding: 16px 20px 6px; - width: 262px; - box-sizing: border-box; -} - -.AccountSectionIcon -{ - width: 18px; - height: 18px; - flex: 0 0 auto; -} - -.AccountStatusText -{ - font-size: 12px; - color: #A8A8A8; - margin-top: 8px; -} - -.OrcaAccountText -{ - font-weight: bold; -} - -#OrcaLoginSection -{ - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - width: 100%; -} - -#OrcaLogin1 -{ - display: flex; - flex-direction: column; /*ORCA*/ - align-items: center; /*Allow icon centered vertically*/ - justify-content: center; /*and use login button in new line*/ + padding: 8px 10px 8px 14px; /*----label column lines up with the navigation below----*/ + border-radius: 8px; + cursor: pointer; user-select: none; - padding: 10px 0; } -#OrcaLogin2 +.AccountRow:hover +{ + background-color: var(--row-hover); +} + +.AccountRow:focus-visible +{ + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +.AccountRow.Disabled +{ + cursor: default; + opacity: 0.5; +} + +.AccountRow.Disabled:hover +{ + background-color: transparent; +} + +.AccountRow.Disabled .AccountSignIn { display: none; - flex-direction: column; - align-items: center; - justify-content: center; - text-align: center; - padding: 14px 0 16px; - box-sizing: border-box; - width: 262px; } -/* --- Bambu Cloud Section --- */ +/*----Avatar----*/ +.AccountAvatar +{ + position: relative; + flex: 0 0 auto; + width: 36px; + height: 36px; + border-radius: 50%; + background-color: var(--account-avatar-bg); +} + +.AccountAvatar::before /* placeholder shown until an avatar image loads */ +{ + content: ""; + position: absolute; + inset: 0; + -webkit-mask-image: var(--glyph-account); + mask-image: var(--glyph-account); + -webkit-mask-size: 100% 100%; + mask-size: 100% 100%; + background-color: var(--account-avatar-glyph); +} + +.AccountAvatarImg +{ + position: absolute; + inset: 0; + width: 100%; + height: 100%; + border-radius: 50%; + object-fit: cover; + display: block; +} + +.AccountAvatarImg:not([src]) +{ + display: none; +} + +/*----Row labels----*/ +.AccountText +{ + display: flex; + flex-direction: column; + justify-content: center; + flex: 1 1 auto; + min-width: 0; +} + +.AccountName, +.AccountSecondary /*----the provider name, or the sign-in state where the row has no name yet----*/ +{ + font-size: 15px; + line-height: 20px; + color: var(--account-name); + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.AccountName +{ + display: none; + font-weight: 600; +} + +.AccountSignIn +{ + flex: 0 0 auto; + font-size: 12px; + font-weight: 600; + color: var(--account-action); +} + +.AccountChevron +{ + display: none; + flex: 0 0 auto; + width: 12px; + height: 12px; + color: var(--account-meta); + transition: transform 0.15s ease; +} + +.AccountRow.SignedIn .AccountName { display: block; } +.AccountRow.SignedIn .AccountChevron { display: block; } +.AccountRow.SignedIn .AccountSignIn { display: none; } +.AccountRow.SignedIn .AccountSecondary +{ + font-size: 11px; + line-height: 14px; + color: var(--account-meta); +} + +.AccountRow.MenuOpen .AccountChevron { transform: rotate(180deg); } + +#NoPluginTip +{ + display: none; + margin: 4px 0 2px; + padding: 8px 10px; + border-radius: 6px; + background-color: var(--account-warn-bg); +} + +#NoPluginText +{ + line-height: 16px; +} + +#NoPluginTip .LinkBtn +{ + color: var(--warn-color); + text-decoration: underline; +} + +/*----Bambu Cloud, folded under the main account----*/ #BambuCloudSection { display: none; /* shown by cloud_providers_info from backend */ - border-top: 1px solid; - width: 262px; + margin-top: 8px; + padding-top: 6px; + border-top: 1px solid var(--account-divider); } #BambuCloudHeader { - height: 40px; display: flex; align-items: center; - padding: 0 20px; - cursor: pointer; - font-size: 13px; - color: #A8A8A8; gap: 8px; + height: 28px; + padding: 0 10px 0 14px; + border-radius: 6px; + font-size: 12px; + color: var(--account-meta); + cursor: pointer; + user-select: none; } #BambuCloudHeader:hover { - color: inherit; + color: var(--account-name); } -.bambu-chevron +#BambuCloudHeader:focus-visible { + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +.SectionChevron +{ + flex: 0 0 auto; width: 12px; height: 12px; transition: transform 0.2s ease; - transform: rotate(0deg); } -.bambu-chevron.expanded +#BambuCloudHeader.Expanded .SectionChevron { transform: rotate(90deg); } -.bambu-status-dot +.SectionLabel { - width: 8px; - height: 8px; - border-radius: 50%; - background-color: #A8A8A8; - margin-left: auto; + flex: 1 1 auto; + min-width: 0; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } -.bambu-status-dot.online +#BambuStatusDot { - background-color: #4CAF50; + flex: 0 0 auto; + width: 7px; + height: 7px; + border-radius: 50%; + background-color: var(--account-dot-off); +} + +#BambuStatusDot.Online +{ + background-color: var(--account-dot-on); } #BambuCloudBody @@ -208,99 +346,125 @@ body max-height: 0; overflow: hidden; transition: max-height 0.25s ease; - display: flex; - flex-direction: column; - align-items: center; } -#BambuCloudBody.expanded +#BambuCloudBody.Expanded { max-height: 200px; + padding-bottom: 2px; } -#NoPluginTip +.AccountRowCompact { - position: static; - display: none; - flex-direction: column; - padding: 5px 10px; - z-index: auto; + padding: 6px 10px 6px 24px; } -#BambuLogin1 +.AccountRowCompact .AccountAvatar { - padding: 10px 0; + width: 26px; + height: 26px; } -#BambuLogin2 +.AccountRowCompact .AccountName, +.AccountRowCompact .AccountSecondary { - display: none; - flex-direction: column; - align-items: center; - text-align: center; - padding: 8px 0; - width: 262px; -} - -#BambuAvatarIcon -{ - height: 40px; - border-radius: 50%; -} - -#BambuUserName -{ - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - width: 80%; - text-align: center; font-size: 13px; + line-height: 17px; } - -#DownloadBtn +.AccountRowCompact .AccountSecondary { - color:#00ffd9; + color: var(--account-meta); } - -#Icon1 +.AccountRowCompact.SignedIn .AccountSecondary /*----the section header already names this provider----*/ { - margin-right: 10px; + display: none; } -#BBLIcon +/*----Account menu----*/ +#AccountMenu { - height:96px; /*ORCA use bigger icon to fit logo size*/ + display: none; + position: absolute; + left: 8px; + right: 8px; + z-index: 20; + padding: 4px; + border-radius: 10px; + border: 1px solid var(--account-border); + background-color: var(--account-surface); + box-shadow: var(--account-menu-shadow); } -#UserAvatarIcon +#AccountMenu.Open { - width: 64px; - height: 64px; display: block; - margin: 2px auto 10px; - object-fit: cover; - border-radius: 50%; + animation: AccountMenuIn 0.12s ease-out; } -#UserName +@keyframes AccountMenuIn { + from { opacity: 0; transform: translateY(-4px); } + to { opacity: 1; transform: none; } +} + +@media (prefers-reduced-motion: reduce) +{ + #AccountMenu.Open { animation: none; } + .AccountChevron, + .SectionChevron, + #BambuCloudBody { transition: none; } +} + +#AccountMenuHandle +{ + display: none; + padding: 9px 10px; + border-bottom: 1px solid var(--account-border); + font-size: 12px; + line-height: 16px; + color: var(--account-meta); white-space: nowrap; + overflow: hidden; text-overflow: ellipsis; - text-align: center; - overflow: hidden; - width: 80%; - max-width: 190px; - line-height: 22px; } -#LogoutBtn +#AccountMenuLogout { - margin-top: 8px; + display: flex; + align-items: center; + gap: 8px; + height: 34px; + padding: 0 10px; + border-radius: 6px; + font-size: 13px; + color: var(--account-name); + cursor: pointer; } +#AccountMenuLogout:hover +{ + background-color: var(--account-danger-bg); + color: var(--account-danger); +} + +#AccountMenuLogout:focus-visible +{ + outline: 2px solid var(--account-action); + outline-offset: -2px; +} + +#AccountMenuLogoutIcon +{ + width: 15px; + height: 15px; + -webkit-mask: var(--glyph-logout) center / contain no-repeat; + mask: var(--glyph-logout) center / contain no-repeat; + background-color: currentColor; +} + + /*------------------*/ #BtnArea { @@ -320,12 +484,12 @@ body .BtnItem:hover { - background-color: #BFE1DE; /*ORCA color with %25 opacity*/ + background-color: var(--row-hover); } .BtnItemSelected { - background-color: #BFE1DE; /*ORCA color with %25 opacity*/ + background-color: var(--row-hover); } .BtnIcon @@ -552,7 +716,8 @@ body background-color: #E4E4E4; border-radius: 8px; width: 184px; - height: 184px; + height: 184px; + position: relative; } .FileItem img @@ -564,6 +729,19 @@ body object-fit: cover; } +.FileImg .FileLogoBadge +{ + position: absolute; + top: 8px; + left: 8px; + width: 26px; + height: 26px; + padding: 2px; + box-sizing: border-box; + background-color: rgba(255,255,255,0.85); + border-radius: 50%; +} + .FileName { white-space: nowrap; @@ -572,6 +750,35 @@ body word-break: break-all; } +.FileNamePack +{ + display: flex; + align-items: center; + min-width: 0; + overflow: hidden; +} + +.FileNamePack .FileName +{ + flex: 1 1 auto; + min-width: 0; +} + +.FilePublishedBadge +{ + flex: 0 0 auto; + margin-right: 4px; + padding: 0 4px; + height: 16px; + line-height: 16px; + font-size: 10px; + font-weight: 600; + color: #FFFFFF; + background-color: #009688; + border-radius: 2px; + white-space: nowrap; +} + .FileDate { color: #A8A8A8; diff --git a/resources/web/homepage/img/c.jpg b/resources/web/homepage/img/c.jpg deleted file mode 100644 index 50c5883ca0..0000000000 Binary files a/resources/web/homepage/img/c.jpg and /dev/null differ diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 24eb8285a7..bc5f83311b 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -23,56 +23,65 @@
- -
- - Orca Cloud -
- -
-
-
-
login / register
-
Not signed in
-
- -
-
- -
-
-
log out
-
-
- - -
-
- - + + -
-
-
login
+ +
diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index f522c44bed..aee0d8cd37 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -1,7 +1,6 @@ //var TestData={"sequence_id":"0","command":"get_recent_projects","response":[{"path":"D:\\work\\Models\\Toy\\3d-puzzle-cube-model_files\\3d-puzzle-cube.3mf","time":"2022\/3\/24 20:33:10"},{"path":"D:\\work\\Models\\Art\\Carved Stone Vase - remeshed+drainage\\Carved Stone Vase.3mf","time":"2022\/3\/24 17:11:51"},{"path":"D:\\work\\Models\\Art\\Kity & Cat\\Cat.3mf","time":"2022\/3\/24 17:07:55"},{"path":"D:\\work\\Models\\Toy\\鐩村墤.3mf","time":"2022\/3\/24 17:06:02"},{"path":"D:\\work\\Models\\Toy\\minimalistic-dual-tone-whistle-model_files\\minimalistic-dual-tone-whistle.3mf","time":"2022\/3\/22 21:12:22"},{"path":"D:\\work\\Models\\Toy\\spiral-city-model_files\\spiral-city.3mf","time":"2022\/3\/22 18:58:37"},{"path":"D:\\work\\Models\\Toy\\impossible-dovetail-puzzle-box-model_files\\impossible-dovetail-puzzle-box.3mf","time":"2022\/3\/22 20:08:40"}]}; var m_HotModelList=null; -var bambuSectionExpanded = false; function OnInit() { @@ -12,6 +11,8 @@ function OnInit() SendMsg_GetBambuLoginInfo(); SendMsg_GetRecentFile(); SendMsg_GetStaffPick(); + + Set_AccountMenu_Event(); } //------最佳打开文件的右键菜单功能---------- @@ -89,7 +90,7 @@ function HandleStudio( pVal ) if (strCmd == "get_recent_projects") { ShowRecentFileList(pVal["response"]); } else if (strCmd == "orca_userlogin") { - SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"]); + SetOrcaLoginInfo(pVal["data"]["avatar"], pVal["data"]["name"], pVal["data"]["account"]); } else if (strCmd == "orca_useroffline") { SetOrcaUserOffline(); } else if (strCmd == "studio_bambu_userlogin") { @@ -118,21 +119,12 @@ function HandleStudio( pVal ) $("#LeftBoard").hide(); } } else if (strCmd == "network_plugin_installtip") { - let nShow = pVal["show"] * 1; + // Bambu Cloud is unreachable without the network plugin, so its row only carries the tip. + let bMissing = pVal["show"] * 1 == 1; - if (nShow == 1) { - // Auto-expand Bambu section to show the tip - if (!bambuSectionExpanded) ToggleBambuSection(); - $("#BambuLogin1").hide(); - $("#NoPluginTip").show(); - $("#NoPluginTip").css("display", "flex"); - } else { - $("#NoPluginTip").hide(); - // Only restore login button if not already logged in - if ($("#BambuLogin2").is(":hidden")) { - $("#BambuLogin1").show(); - } - } + $("#NoPluginTip").css("display", bMissing ? "block" : "none"); + $("#BambuAccount").toggleClass("Disabled", bMissing).attr("aria-disabled", bMissing ? "true" : null); + if (bMissing) SetBambuSectionExpanded(true, false); } else if (strCmd == "modelmall_model_advise_get") { //alert('hot'); if (m_HotModelList != null) { @@ -170,34 +162,128 @@ function GotoMenu( strMenu ) } } -function SetOrcaLoginInfo( strAvatar, strName ) -{ - $("#OrcaLogin1").hide(); - $("#OrcaStatusText").hide(); +/*------Account rows------*/ - $("#UserName").text(strName); +/*----Everything that differs between the two cloud providers lives here----*/ +var AccountRows = { + orca: { row: "#OrcaAccount", name: "#UserName", avatar: "#UserAvatarIcon", dot: null, + loginCmd: "homepage_orca_login_or_register", logoutCmd: "homepage_orca_logout" }, + bambu: { row: "#BambuAccount", name: "#BambuUserName", avatar: "#BambuAvatarIcon", dot: "#BambuStatusDot", + loginCmd: "homepage_bambu_login_or_register", logoutCmd: "homepage_bambu_logout" } +}; - let OriginAvatar=$("#UserAvatarIcon").prop("src"); - if(strAvatar != null && strAvatar.trim() !== '' && strAvatar!=OriginAvatar) - $("#UserAvatarIcon").prop("src",strAvatar); - else - { - //alert('Avatar is Same'); - } +var BAMBU_FOLD_KEY = "OrcaHome_BambuCloudExpanded"; - $("#OrcaLogin2").show(); - $("#OrcaLogin2").css("display","flex"); +var m_OpenAccountMenu = null; + +function SetAccountAvatar(selector, strAvatar) { + if (strAvatar != null && strAvatar.trim() !== '') { + if ($(selector).attr("src") !== strAvatar) $(selector).attr("src", strAvatar); + } else { + $(selector).removeAttr("src"); + } } -function SetOrcaUserOffline() -{ - $("#UserAvatarIcon").prop("src","img/c.jpg"); - $("#UserName").text(''); - $("#OrcaLogin2").hide(); +function OnAvatarLoadError(img) { + img.removeAttribute("src"); // fall back to the placeholder glyph +} - $("#OrcaLogin1").show(); - $("#OrcaLogin1").css("display","flex"); - $("#OrcaStatusText").show(); +function SetAccountSignedIn(strProvider, strAvatar, strName, strHandle) { + var account = AccountRows[strProvider]; + + $(account.name).text(strName).attr("title", strName); /*----long names are ellipsized----*/ + SetAccountAvatar(account.avatar, strAvatar); + /*----the handle is the one thing the row does not already show----*/ + $(account.row).addClass("SignedIn").data("handle", strHandle !== strName ? strHandle : null); + $(account.dot).addClass("Online"); + + if (m_OpenAccountMenu === strProvider) OpenAccountMenu(strProvider); +} + +function SetAccountSignedOut(strProvider) { + var account = AccountRows[strProvider]; + + if (m_OpenAccountMenu === strProvider) CloseAccountMenu(); + $(account.name).text('').removeAttr("title"); + SetAccountAvatar(account.avatar, null); + $(account.row).removeClass("SignedIn").removeData("handle"); + $(account.dot).removeClass("Online"); +} + +function OnAccountRowClick(strProvider) { + var account = AccountRows[strProvider]; + var row = $(account.row); + if (row.hasClass("Disabled")) return; + + if (!row.hasClass("SignedIn")) { + CloseAccountMenu(); + SendSimpleCommand(account.loginCmd); + } else if (m_OpenAccountMenu === strProvider) { + CloseAccountMenu(); + } else { + OpenAccountMenu(strProvider); + } +} + +function OpenAccountMenu(strProvider) { + var account = AccountRows[strProvider]; + var row = $(account.row); + var top = row[0].offsetTop + row[0].offsetHeight + 6; /*----read the geometry before writing----*/ + var strHandle = row.data("handle") || ""; + + $("#AccountMenuHandle").text(strHandle).css("display", strHandle === "" ? "none" : "block"); + $("#AccountMenu").css("top", top + "px").addClass("Open"); + $(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false"); + row.addClass("MenuOpen").attr("aria-expanded", "true"); + m_OpenAccountMenu = strProvider; +} + +function CloseAccountMenu() { + $("#AccountMenu").removeClass("Open"); + $(".AccountRow").removeClass("MenuOpen").attr("aria-expanded", "false"); + m_OpenAccountMenu = null; +} + +function OnAccountMenuLogout() { + var account = AccountRows[m_OpenAccountMenu]; + CloseAccountMenu(); + if (account) SendSimpleCommand(account.logoutCmd); +} + +/*----Bambu Cloud is secondary, so its account folds away under the main one----*/ +function SetBambuSectionExpanded(bExpanded, bPersist) { + $("#BambuCloudBody").toggleClass("Expanded", bExpanded); + $("#BambuAccount").attr("tabindex", bExpanded ? "0" : "-1"); /*----keep the folded row out of the tab order----*/ + $("#BambuCloudHeader").toggleClass("Expanded", bExpanded).attr("aria-expanded", bExpanded ? "true" : "false"); + if (!bExpanded && m_OpenAccountMenu === "bambu") CloseAccountMenu(); + // Best effort: the fold is a per-machine convenience, not a synced preference. + if (bPersist) { try { localStorage.setItem(BAMBU_FOLD_KEY, bExpanded ? "1" : "0"); } catch (e) {} } +} + +function ToggleBambuSection() { + SetBambuSectionExpanded(!$("#BambuCloudBody").hasClass("Expanded"), true); +} + +function Set_AccountMenu_Event() { + var bExpanded = false; + try { bExpanded = localStorage.getItem(BAMBU_FOLD_KEY) === "1"; } catch (e) {} + SetBambuSectionExpanded(bExpanded, false); + + $(document).mousedown(function (e) { + if (m_OpenAccountMenu === null) return; + if ($(e.target).closest("#AccountMenu, .AccountRow").length === 0) CloseAccountMenu(); + }); + + $(document).keydown(function (e) { + if (m_OpenAccountMenu !== null && e.key === "Escape") CloseAccountMenu(); + }); + + /*----Enter and Space activate the div-based buttons of this panel----*/ + $(document).on("keydown", "#LoginArea [role=button], #LoginArea [role=menuitem]", function (e) { + if (e.key !== "Enter" && e.key !== " " && e.key !== "Spacebar") return; + e.preventDefault(); + this.click(); + }); } function SetMallUrl( strUrl ) @@ -219,15 +305,19 @@ function ShowRecentFileList( pList ) let sImg=OneFile["image"] || sImages[sPath]; let sTime=OneFile['time']; let sName=OneFile['project_name']; + let sPublished=OneFile['published'] == '1'; sImages[sPath] = sImg; //let index=sPath.lastIndexOf('\\')>0?sPath.lastIndexOf('\\'):sPath.lastIndexOf('\/'); //let sShortName=sPath.substring(index+1,sPath.length); + let sBadge=sPublished? 'PUB':''; + let sLogoBadge=sPublished? '':''; + let TmpHtml='
'+ ''+ - '
No Image
'+ - '
'+sName+'
'+ + '
No Image'+sLogoBadge+'
'+ + '
'+sBadge+'
'+sName+'
'+ '
'+sTime+'
'+ '
'; @@ -279,8 +369,6 @@ function SendSimpleCommand(command) { SendWXMessage(JSON.stringify(tSend)); } -function OnOrcaLoginOrRegister() { SendSimpleCommand("homepage_orca_login_or_register"); } -function OnOrcaLogOut() { SendSimpleCommand("homepage_orca_logout"); } function SendMsg_GetOrcaLoginInfo() { SendSimpleCommand("get_orca_login_info"); } @@ -294,15 +382,6 @@ function SendMsg_GetRecentFile() } -function OnLoginOrRegister() -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_login_or_register"; - - SendWXMessage( JSON.stringify(tSend) ); -} - function OnClickModelDepot() { var tSend={}; @@ -405,59 +484,13 @@ function OnExploreRecentFile( ) $("#recnet_context_menu").hide(); } -function OnLogOut() -{ - var tSend={}; - tSend['sequence_id']=Math.round(new Date() / 1000); - tSend['command']="homepage_logout"; +// --- Cloud providers --- - SendWXMessage( JSON.stringify(tSend) ); -} +function SetOrcaLoginInfo(strAvatar, strName, strAccount) { SetAccountSignedIn("orca", strAvatar, strName, strAccount); } +function SetOrcaUserOffline() { SetAccountSignedOut("orca"); } +function SetBambuLoginInfo(strAvatar, strName) { SetAccountSignedIn("bambu", strAvatar, strName, null); } +function SetBambuUserOffline() { SetAccountSignedOut("bambu"); } -// --- Bambu Cloud Section --- - -function ToggleBambuSection() { - var body = document.getElementById('BambuCloudBody'); - var chevron = document.querySelector('.bambu-chevron'); - if (!body || !chevron) return; - bambuSectionExpanded = !bambuSectionExpanded; - if (bambuSectionExpanded) { - body.classList.add('expanded'); - chevron.classList.add('expanded'); - } else { - body.classList.remove('expanded'); - chevron.classList.remove('expanded'); - } -} - -function SetBambuLoginInfo(strAvatar, strName) { - $("#BambuLogin1").hide(); - $("#BambuUserName").text(strName); - if (strAvatar && strAvatar.trim() !== '') { - $("#BambuAvatarIcon").prop("src", strAvatar); - } - $("#BambuLogin2").show(); - $("#BambuLogin2").css("display", "flex"); - $(".bambu-status-dot").addClass("online"); - $("#BambuStatusText").text("Connected"); - $("#BambuStatusText").attr("tid", "orca11"); -} - -function SetBambuUserOffline() { - $("#BambuAvatarIcon").prop("src", "img/c.jpg"); - $("#BambuUserName").text(''); - $("#BambuLogin2").hide(); - if ($("#NoPluginTip").is(":hidden")) { - $("#BambuLogin1").show(); - $("#BambuLogin1").css("display", "flex"); - } - $(".bambu-status-dot").removeClass("online"); - $("#BambuStatusText").text("Not connected"); - $("#BambuStatusText").attr("tid", "orca10"); -} - -function OnBambuLoginOrRegister() { SendSimpleCommand("homepage_bambu_login_or_register"); } -function OnBambuLogOut() { SendSimpleCommand("homepage_bambu_logout"); } function SendMsg_GetBambuLoginInfo() { SendSimpleCommand("get_bambu_login_info"); } function BeginDownloadNetworkPlugin() diff --git a/scripts/CAD/README.md b/scripts/CAD/README.md new file mode 100644 index 0000000000..861b77a976 --- /dev/null +++ b/scripts/CAD/README.md @@ -0,0 +1,53 @@ +# Design-tab scripts + +Everything here supports the parametric Design tab (`src/libslic3r/CAD/`, +`src/slic3r/GUI/CAD/`). Nothing here is needed to build or run OrcaSlicer — these +are the development and verification tools for that one feature. + +The verb in the name is the role: + +| | | +|---|---| +| `build-…` | produce a binary | +| `start-…` | bring something up and leave it running | +| `run-…` | run a suite and report pass/fail | +| `check-…` | one specific assertion, usually driving a live app | + +## Verification + +| Script | What it proves | Needs | +|---|---|---| +| `run-kernel-tests.sh` | The CAD kernel builds and the Catch2 `[CadDocument]` tags pass — every case builds a document, recomputes it and asserts on real geometry. **Exit 0 is the verification contract.** | Docker only. No display. | +| `run-all-checks.sh` | Every check below, in one command. The gate before pushing a Design-tab change. | Docker + the GUI container | +| `check-sketch-engine.py` | A ladder of 2D sketches of increasing complexity, judged on loop count, closure and void attribution rather than on area. | Kernel only | +| `check-sketch-engine-corpus.py` | The same ladder graded against a systematic sample of real drawings instead of shapes we chose. | Kernel + corpus | +| `check-gui-sketching.py` | The same profiles drawn the way a person draws them — synthetic mouse gestures and typed values. | Headless GUI | +| `check-gui-context-menu.py` | That right-click is the pivot of the design gesture, and adapts to what was clicked. | Headless GUI | +| `check-mcp-sketch.py` | The sketch layer driven over the MCP socket, asserting what decides whether a profile is buildable. | Headless GUI + `ORCA_CAD_MCP` | + +**`run-kernel-tests.sh` is the only one CI can run.** The rest need a live +application with an OpenGL canvas and synthetic input, which hosted runners do not +have. The kernel suite itself is already in CI by an ordinary route: the cases are +registered in `tests/libslic3r/CMakeLists.txt` under `if (SLIC3R_CAD)`, so they are +part of `libslic3r_tests` and run under `ctest` on every platform like any other +unit test. This script exists for the local loop, where it is a two-minute round +trip instead of a full application build. + +## Build and run + +| Script | Purpose | +|---|---| +| `build-gui.sh` | Build the GUI binary in a throwaway container, writing into the build-cache volume the long-lived GUI container reads. | +| `build-gui-incremental.sh` | Incremental build against the deps-baked image, for a fast edit/compile loop. | +| `start-headless-gui.sh` | Bring the app up on a headless X display (Xvfb + a window manager), ready to drive or attach to over VNC. | + +Two constraints that are not obvious and have each cost a session: + +- **Never build inside the GUI container.** Its baked source tree silently + reconfigures the shared build directory and this fork's targets vanish. +- **A window manager is required.** Without one, windows are never focused, and an + unfocused GTK app ignores synthetic keys — which looks exactly like a code bug. + +`docs/rig_build_traps.md` documents these and three more, with symptoms and exact +recovery commands. Read it before debugging a configure or link failure one of +these scripts reports. diff --git a/scripts/CAD/build-gui-incremental.sh b/scripts/CAD/build-gui-incremental.sh new file mode 100755 index 0000000000..539a21c973 --- /dev/null +++ b/scripts/CAD/build-gui-incremental.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +# Incremental slicer build against the orcacad-deps base image. +# +# The deps-baked image (built from scripts/Dockerfile.deps) carries the pinned +# dependencies at /OrcaSlicer/deps/build/destdir. This script mounts the LIVE source +# tree and resources over the baked copy so code/CMake edits apply immediately, and +# persists /OrcaSlicer/build in a named volume so ninja recompiles only what changed. +# +# Result: edit -> rebuild in seconds-to-minutes instead of a full Docker rebuild. +# +# Usage (run on the build host, e.g. behemoth, from anywhere): +# scripts/CAD/build-gui-incremental.sh +# IMAGE=orcacad-deps scripts/CAD/build-gui-incremental.sh +# +# On success the binary is inside the persistent volume at +# /OrcaSlicer/build/package/bin/orca-slicer (copy it out with a follow-up +# `docker run --rm -v orcacad_buildcache:/b alpine cp ...` or via this script's tail). +# Rig build traps already paid for once each (stale project, NLopt cache, pybind11, OCCT_LIBS, SLIC3R_CAD gate): docs/rig_build_traps.md +set -euo pipefail + +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +# orcacad-deps, NOT snapmaker-deps: see the note in run-kernel-tests.sh — the wrong image +# fails at CMake configure, not at link time. +IMAGE="${IMAGE:-orcacad-deps}" +BUILD_VOL="${BUILD_VOL:-orcacad_buildcache}" + +echo "REPO=$REPO IMAGE=$IMAGE BUILD_VOL=$BUILD_VOL" + +# The root CMakeLists.txt and cmake/ must be mounted too, not taken from the baked image: +# they carry the build-time gates (e.g. SLIC3R_CAD -> add_definitions(-DSLIC3R_CAD)) that the +# mounted headers are compiled against. With a stale baked copy the gate silently stays off and +# the build fails with "class GLCanvas3D has no member named set_design_sketch_tool". +# +# build_linux.sh must be mounted for the same reason, and here the stale copy is guaranteed +# wrong rather than merely risky: orcacad-deps is layered on snapmaker-deps, so the baked script +# is the OTHER fork's and builds `--target Snapmaker_Orca`. This fork's target is `OrcaSlicer`, +# so without this mount configure succeeds and then ninja dies on "unknown target". +# scripts/ likewise: build_linux.sh's packaging step sources scripts/appimage_lib_policy.sh, +# which the baked Snapmaker tree does not have, so a fully successful link still exited +# non-zero with "missing AppImage helper" and the binary check never ran. + +# ---- OOM guard (2026-08-21) ------------------------------------------------------------- +# Two of these builds ran at once on 2026-08-21, each with ninja -j$(nproc)=16: ~36 cc1plus +# holding 42 GB of a 62 GB box -> global OOM at 21:05, a 2h28m kill storm, ssh unreachable, +# lightdm destroyed. Neither build produced a single object. scripts/CAD/build-gui.sh grew the +# bounds first; every script that starts a compile needs the same three, or the guard is only +# as strong as the script you happened not to use. +# flock — the lock path is SHARED with build-gui.sh and the other fork on purpose, so +# concurrent builds serialise instead of summing. +# -j — bounded parallelism; ~1.17 GB per cc1plus was the measured average. +# --memory — the actual guarantee: a runaway build dies in its own cgroup instead of taking +# the host down. --memory-swap equal to --memory forbids swap, which is what made +# ssh hang. +JOBS="${JOBS:-12}" +MEM="${MEM:-40g}" +LOCK=/tmp/orca-rig-build.lock + +exec 9>"$LOCK" +if ! flock -n 9; then + echo "another build holds $LOCK — waiting (this is the OOM guard, not a hang)" + flock 9 +fi + +docker run --rm \ + --memory="$MEM" --memory-swap="$MEM" \ + -v "$REPO/src":/OrcaSlicer/src \ + -v "$REPO/resources":/OrcaSlicer/resources \ + -v "$REPO/CMakeLists.txt":/OrcaSlicer/CMakeLists.txt \ + -v "$REPO/cmake":/OrcaSlicer/cmake \ + -v "$REPO/deps_src":/OrcaSlicer/deps_src \ + -v "$REPO/build_linux.sh":/OrcaSlicer/build_linux.sh \ + -v "$REPO/scripts":/OrcaSlicer/scripts \ + -v "$BUILD_VOL":/OrcaSlicer/build \ + "$IMAGE" \ + bash -lc "cd /OrcaSlicer && ./build_linux.sh -sr -j $JOBS" + +# src/CMakeLists.txt:151 renames the OrcaSlicer target's output to "orca-slicer" — not +# "snapmaker-orca", which is the other fork's binary name. +echo "=== build finished; checking for binary ===" +docker run --rm -v "$BUILD_VOL":/b "$IMAGE" \ + bash -lc 'ls -lh /b/package/bin/orca-slicer 2>/dev/null && file /b/package/bin/orca-slicer || echo "NO BINARY"' diff --git a/scripts/CAD/build-gui.sh b/scripts/CAD/build-gui.sh new file mode 100755 index 0000000000..0a1a86dd5c --- /dev/null +++ b/scripts/CAD/build-gui.sh @@ -0,0 +1,98 @@ +#!/usr/bin/env bash +# Rebuild the GUI binary the design rig launches — in a THROWAWAY container, writing into the +# same build-cache volume the rig's long-lived GUI container reads from. +# +# NEVER build inside the GUI container (snapmaker-gui / orcacad-gui). Its baked /OrcaSlicer tree +# is the Jun-13 Snapmaker-derived source, so a `cmake .` in there silently reconfigures the +# shared build dir as project(Snapmaker_Orca) and this fork's targets vanish. That is Trap 1 of +# five; all of them, with symptoms and exact recovery commands, are in docs/rig_build_traps.md. +# Read that file before debugging a configure or link failure this script reports. +# +# Usage: +# scripts/CAD/build-gui.sh # configure + build the fork's GUI target +# DRY_RUN=1 scripts/CAD/build-gui.sh # print the resolved fork identity and exit, no container +set -euo pipefail + +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" + +# Fork identity is DERIVED from the repo, never hardcoded, so this file is byte-identical in +# both forks and cannot be mirrored into the wrong one. Pointing a fork at the other fork's +# image or volume is not a slow failure: with the wrong image CMake dies at configure, and with +# the wrong volume the two forks silently trade build artefacts. +PROJECT="$(sed -n 's/^project(\([A-Za-z_0-9]*\)).*/\1/p' "$REPO/CMakeLists.txt" | head -1)" +case "$PROJECT" in + Snapmaker_Orca) PREFIX=snapmaker; BIN=snapmaker-orca ;; + OrcaSlicer) PREFIX=orcacad; BIN=orca-slicer ;; + *) echo "FATAL: unrecognised project($PROJECT) in $REPO/CMakeLists.txt" >&2; exit 2 ;; +esac +TARGET="$PROJECT" +IMAGE="${PREFIX}-deps" +BUILD_VOL="${PREFIX}_buildcache" + +echo "REPO=$REPO PROJECT=$PROJECT IMAGE=$IMAGE BUILD_VOL=$BUILD_VOL TARGET=$TARGET BIN=$BIN" + +if [ -n "${DRY_RUN:-}" ]; then + echo "DRY_RUN: resolution only, no container started" + exit 0 +fi + +# Three memory bounds. On 2026-08-21 both forks ran this script at the same time, each with +# ninja -j$(nproc)=16: ~36 cc1plus holding 42 GB of a 62 GB box -> global OOM at 21:05, a +# 2h28m kill storm, ssh unreachable, lightdm destroyed, 2946 session kill events. Neither +# build produced a single object. The bounds, weakest to strongest: +# flock — the lock path is shared by both forks on purpose, so they SERIALISE instead of +# summing. Peak is one build's worth no matter who else starts one. +# -j12 — measured 1.17 GB average per cc1plus in the incident dump, so 12 in flight +# is ~14 GB typical and leaves the box usable. JOBS=n overrides. +# --memory — the actual guarantee. A runaway build hits its own cgroup limit and dies alone; +# the host never reaches global OOM again, whatever -j or flock do. +# --memory-swap equal to --memory forbids swap, which is what made ssh hang. +JOBS="${JOBS:-12}" +MEM="${MEM:-40g}" +LOCK=/tmp/orca-rig-build.lock + +exec 9>"$LOCK" +if ! flock -n 9; then + echo "another fork's build-gui holds $LOCK — waiting (this is the OOM guard, not a hang)" + flock 9 +fi + +# Every one of these mounts covers a trap, none is decorative: +# CMakeLists.txt + cmake/ carry the SLIC3R_CAD gate — inherit the baked copies and the cache +# says SLIC3R_CAD=ON while -DSLIC3R_CAD is never defined, so every #ifdef block compiles out. +# deps_src/ carries pybind11, which the image predates. +# src/, resources/, localization/, version.inc are the code under test. +rc=0 +docker run --rm \ + --memory="$MEM" --memory-swap="$MEM" \ + -v "$REPO/src":/OrcaSlicer/src \ + -v "$REPO/resources":/OrcaSlicer/resources \ + -v "$REPO/cmake":/OrcaSlicer/cmake \ + -v "$REPO/deps_src":/OrcaSlicer/deps_src \ + -v "$REPO/localization":/OrcaSlicer/localization \ + -v "$REPO/CMakeLists.txt":/OrcaSlicer/CMakeLists.txt \ + -v "$REPO/version.inc":/OrcaSlicer/version.inc \ + -v "$BUILD_VOL":/OrcaSlicer/build \ + "$IMAGE" bash -lc " + cd /OrcaSlicer/build || exit 1 + cmake . > /tmp/cfg.log 2>&1 || { echo 'CONFIGURE FAILED'; tail -25 /tmp/cfg.log; exit 1; } + # Twice, deliberately. src/libslic3r/CMakeLists.txt publishes OCCT_LIBS as CACHE INTERNAL + # at the END of its own configure, so a first pass after that list changes links the + # PREVIOUS one and drops TKBool/TKOffset — a wall of TopOpeBRepBuild undefined references + # that reads as a broken OCCT install and is not. Trap 4. + cmake . > /tmp/cfg2.log 2>&1 || { echo 'RECONFIGURE FAILED'; tail -25 /tmp/cfg2.log; exit 1; } + ninja -f build-Release.ninja -j$JOBS $TARGET > /tmp/bld.log 2>&1 + rc=\$? + echo \"EXIT=\$rc\" + grep -n 'error:' /tmp/bld.log | head -20 + tail -4 /tmp/bld.log + ls -la /OrcaSlicer/build/src/Release/$BIN 2>/dev/null + exit \$rc + " || rc=$? + +# A target-only build writes src/Release/, but this fork's start-headless-gui.sh may default BIN to the +# PACKAGED path that only build_linux.sh refreshes — launching with the default would then run a +# stale binary. Pass BIN explicitly. See docs/rig_build_traps.md. +echo "=== launch the rig on the binary just built ===" +echo " docker exec -e BIN=/OrcaSlicer/build/src/Release/$BIN ${PREFIX}-gui /OrcaSlicer/scripts/CAD/start-headless-gui.sh" +exit "$rc" diff --git a/scripts/CAD/check-gui-click-edit.py b/scripts/CAD/check-gui-click-edit.py new file mode 100755 index 0000000000..159bdb19f1 --- /dev/null +++ b/scripts/CAD/check-gui-click-edit.py @@ -0,0 +1,658 @@ +#!/usr/bin/env python3 +"""The click-edit contract: a value field that opens must accept what is TYPED into it. + +WHY THIS EXISTS SEPARATELY FROM check-gui-sketching.py. That ladder draws geometry and grades the +result, and to make its values land it calls focus_field() — one synthetic click INTO the field +before typing. Its own docstring says why: + + WITHOUT THIS THE TYPED VALUE IS SILENTLY DISCARDED. The field is shown and raised but the + window manager does not give it the keyboard, so xdotool's digits go to the canvas and Return + commits the value the field opened with — the pre-filled as-drawn number. + +That click is a workaround for a defect, and a suite that performs it can never see the defect +again. A user cannot be told to click the field first; when they do not, they get the as-drawn +number and report "the label value is not editable". So this ladder types IMMEDIATELY after the +field opens, exactly as a person does, and fails if the prefill is what gets committed. + +WHAT IT GRADES. The app emits one line per event under ORCA_CAD_UXTRACE=1: + + [UX] open title=Length prefill=154.76 + [UX] commit title=Length typed=80 value=80.0000 + [UX] refused title=Length typed=8O + [UX] cancel title=Length + +For every field the driver opens it asserts: a commit arrived, what the field received is what we +typed, the parsed value equals it, and it differs from the prefill. The last clause is the one +that matters — a field that is on screen but deaf commits its prefill, and every other signal +(the field is visible, a constraint is created, the solve succeeds) looks perfectly healthy. + + scripts/CAD/check-gui-click-edit.py --display :10 --bin build/src/Release/orca-slicer + +With --attach it drives an already-running app instead of launching one; the app must have been +started with ORCA_CAD_UXTRACE=1 and its stderr redirected to --trace. +Exit 0 = every field took what was typed. +""" +import argparse, json, os, re, shutil, signal, socket, subprocess, sys, tempfile, time + +AP = argparse.ArgumentParser() +AP.add_argument("--display", default=os.environ.get("DISPLAY", ":10")) +AP.add_argument("--bin", default="build/src/Release/orca-slicer") +AP.add_argument("--datadir", default="") +AP.add_argument("--trace", default="") +AP.add_argument("--sock", default="/tmp/mcp-uxcheck.sock", + help="the app's MCP socket: the oracle for whether a sketch is really open") +AP.add_argument("--attach", action="store_true", help="drive a running app; do not launch one") +AP.add_argument("--keep", action="store_true", help="leave the app running afterwards") +AP.add_argument("--no-defocus", action="store_true", + help="do NOT take focus off the field before typing (weakens the gate; see below)") +AP.add_argument("--seed-from", default=os.path.expanduser("~/.config/OrcaCAD/OrcaSlicer.conf"), + help="an existing OrcaSlicer.conf to copy presets/settings from") +A = AP.parse_args() + +DISP = A.display +TRACE = A.trace or os.path.join(tempfile.gettempdir(), "ux-click-edit.log") +_fail = 0 +_checks = 0 + + +_n = 0 + + +def call(method, **params): + """One MCP request over the app's unix socket. The socket is the only witness that cannot + lie about sketch state: the keytrace says a key ARRIVED, a screenshot says something is on + screen, and neither distinguishes an open sketch from sketch mode with the plane offer up.""" + global _n + _n += 1 + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(A.sock) + s.sendall((json.dumps({"jsonrpc": "2.0", "id": _n, "method": method, + "params": params}) + "\n").encode()) + buf = b"" + while b"\n" not in buf: + d = s.recv(65536) + if not d: + break + buf += d + r = json.loads(buf.decode().strip()) + if "error" in r: + raise RuntimeError(f"{method}: {r['error']['message']}") + return r["result"] + + +def try_call(method, **params): + try: + return call(method, **params) + except Exception: + return None + + +def sh(cmd): + # bash -c, NOT -lc: a login shell sources the profile on every xdotool call, and this driver + # makes hundreds. On a GNOME box that meant im-config running per call, thousands of journal + # lines, and a window poll slow enough to time out before the app had finished starting. + return subprocess.run(["bash", "-c", cmd], capture_output=True, text=True).stdout + + +def xdo(args): + sh(f"DISPLAY={DISP} xdotool {args}") + + +def key(k, pause=0.35, window=None): + xdo(f"key {'--window ' + str(window) + ' ' if window else ''}{k}") + time.sleep(pause) + + +def typ(s, pause=0.35, window=None): + # --clearmodifiers so a modifier left down by an earlier synthetic key cannot turn digits + # into something else; --delay 60 because ImGui reads one character per frame. + # + # `window` targets a specific window with XSendEvent instead of following the input focus. + # That is the whole gate: see type_into_open_field. + tgt = f"--window {window} " if window else "" + xdo(f"type {tgt}--clearmodifiers --delay 60 -- '{s}'") + time.sleep(pause) + + +def die(msg): + print(f"FATAL {msg}", file=sys.stderr) + sys.exit(2) + + +# ---------------------------------------------------------------- the app + +_proc = None + + +def seed_datadir(datadir): + """The Design tab does not exist unless enable_cad_feature is on, and it needs a RESTART. + + A fresh datadir has it off, so a driver that just points the app at an empty directory gets + Prepare/Preview/Device/Project, no Design tab, and every rung fails for a reason that has + nothing to do with what is being tested. Seed the flag before the first launch. + """ + os.makedirs(datadir, exist_ok=True) + conf = os.path.join(datadir, "OrcaSlicer.conf") + data = {} + if os.path.exists(A.seed_from): + try: + with open(A.seed_from) as f: + data = json.load(f) + except Exception: + data = {} + app = data.setdefault("app", {}) + app["enable_cad_feature"] = True + # Deterministic starting state for the rungs that follow: the bed drawn, loops welded as the + # ~90% case expects. A ladder whose result depends on the developer's own preferences is not + # a gate. + app["auto_close_sketch_loops"] = True + # SILENCE THE NETWORK PLUGIN PROMPT. Without this, GUI_App::post_init() re-raises "Bambu + # Network Plug-in Required" from an IDLE event — after any modal sweep this driver does at + # startup — and ShowModal() then runs a nested event loop. The app is alive, its window is + # there, and the MCP socket answers nothing: indistinguishable from a hang, and it was + # investigated as one, with gdb, twice. `installed_networking` false stops the whole + # networking-plugin path, so m_networking_need_update is never set and the dialog never + # exists to be swept. + app["installed_networking"] = False + with open(conf, "w") as f: + json.dump(data, f, indent=1) + for sub in ("user", "system", "presets", "vendor"): + src = os.path.join(os.path.dirname(A.seed_from), sub) + dst = os.path.join(datadir, sub) + if os.path.isdir(src) and not os.path.exists(dst): + shutil.copytree(src, dst) + + +def launch(): + global _proc + datadir = A.datadir or os.path.join(tempfile.gettempdir(), "orcacad-uxcheck") + seed_datadir(datadir) + env = dict(os.environ) + # WAYLAND_DISPLAY MUST GO, and GDK_BACKEND must say x11. GTK prefers Wayland whenever + # WAYLAND_DISPLAY is set and ignores DISPLAY entirely, so a driver launched from a systemd + # user unit (which inherits it) started the app on the DESKTOP session instead of the rig: + # the process was alive, `xdotool search` on the rig display found nothing, and the window + # was sitting on the user's own screen. Silent, and it drives a stray app at someone's face. + env.pop("WAYLAND_DISPLAY", None) + env.update(DISPLAY=DISP, GDK_BACKEND="x11", ORCA_CAD_UXTRACE="1", + LIBGL_ALWAYS_SOFTWARE="1", GALLIUM_DRIVER="llvmpipe", + # The rig's Xvfb has no input-method daemon, and a dead ibus context makes a + # GtkEntry drop every character while the app looks fine. It cannot affect the + # in-canvas field (ImGui needs no IM) but the app has other text fields, and a + # display full of IBUS warnings has cost a whole misdiagnosis before. + GTK_IM_MODULE="gtk-im-context-simple", XMODIFIERS="@im=none", + # The key tracer is this driver's only positive signal that a keystroke reached + # the Design panel at all. Without it "the field never opened" is indistinguishable + # from "we never got into sketch mode", and the first run of this ladder reported + # seven product failures that were really one driver racing a still-loading app. + ORCA_CAD_KEYTRACE="1", ORCA_CAD_MCP=A.sock, + SSL_CERT_FILE="/etc/ssl/certs/ca-certificates.crt", + WEBKIT_DISABLE_DMABUF_RENDERER="1", WEBKIT_DISABLE_COMPOSITING_MODE="1") + if os.path.exists(A.sock): + os.unlink(A.sock) # a stale socket from a dead run answers nothing, slowly + log = open(TRACE, "wb") + _proc = subprocess.Popen([A.bin, "--datadir", datadir], env=env, + stdout=subprocess.DEVNULL, stderr=log) + for _ in range(120): + if win_id(): + return + time.sleep(1) + die("the app never showed a window on " + DISP) + + +def window_pid(w): + """_NET_WM_PID for a window, or 0. The property is how we tell a live app from its ghost.""" + out = sh(f"DISPLAY={DISP} xprop -id {w} _NET_WM_PID 2>/dev/null") + m = re.search(r"= *(\d+)", out) + return int(m.group(1)) if m else 0 + + +def pid_alive(pid): + return pid > 0 and os.path.isdir(f"/proc/{pid}") + + +def win_id(): + """The main window: OURS if we launched it, otherwise the biggest LIVE top-level. + + Two rules here, each paid for. + + By PID, not by size, whenever we launched the app. An X window outlives its client if the + connection is not torn down cleanly, and a killed OrcaSlicer can leave a full-screen ghost + mapped on the display. It answers geometry queries exactly like the real thing, it wins "the + biggest window" every time, and every synthetic keystroke sent to it goes nowhere. That is + indistinguishable, from the driver's side, from an app that ignores the keyboard — which is + the very defect this ladder exists to measure. One run reported the entire contract broken + while the real app sat beside the ghost, untouched. + + Never by title: a saved project renames the main window. + """ + if _proc is not None: + for w in sh(f"DISPLAY={DISP} xdotool search --pid {_proc.pid} --onlyvisible --name '.'").split(): + g = dict(l.split("=", 1) for l in + sh(f"DISPLAY={DISP} xdotool getwindowgeometry --shell {w}").strip().splitlines() + if "=" in l) + if "WIDTH" in g and int(g["WIDTH"]) * int(g["HEIGHT"]) > 400 * 400: + return (w, int(g["X"]), int(g["Y"]), int(g["WIDTH"]), int(g["HEIGHT"])) + return None + best = None + for w in sh(f"DISPLAY={DISP} xdotool search --onlyvisible --name '.'").split(): + g = dict(l.split("=", 1) for l in + sh(f"DISPLAY={DISP} xdotool getwindowgeometry --shell {w}").strip().splitlines() + if "=" in l) + if "WIDTH" not in g: + continue + if not pid_alive(window_pid(w)): # a ghost: no client is behind it any more + continue + a = int(g["WIDTH"]) * int(g["HEIGHT"]) + if a > 400 * 400 and (best is None or a > best[0]): + best = (a, w, int(g["X"]), int(g["Y"]), int(g["WIDTH"]), int(g["HEIGHT"])) + return best[1:] if best else None + + +_win = None + + +def win(): + global _win + if _win is None: + w = win_id() + if w is None: + die("no app window on " + DISP) + sh(f"DISPLAY={DISP} xdotool windowactivate --sync {w[0]}") + sh(f"DISPLAY={DISP} xdotool windowsize {w[0]} 1920 1080") + sh(f"DISPLAY={DISP} xdotool windowmove {w[0]} 0 0") + time.sleep(1.0) + _win = (w[0], 0, 0, 1920, 1080) + return _win + + +def click(px, py, pause=0.5, btn=1): + _, X, Y, _, _ = win() + xdo(f"mousemove {X+int(px)} {Y+int(py)} click --delay 120 {btn}") + time.sleep(pause) + + +def visible_windows(): + """(id, name, w, h) for every MAPPED top-level, main window included. + + `--onlyvisible` is what makes this usable. Without it xdotool also returns the app's unmapped + helper windows — a 10x10 and a 200x200 that exist for the whole session — and a caller that + tries to reason about "extra windows" from that list is reasoning about furniture. + """ + out = [] + for w in sh(f"DISPLAY={DISP} xdotool search --onlyvisible --name '.'").split(): + g = dict(l.split("=", 1) for l in + sh(f"DISPLAY={DISP} xdotool getwindowgeometry --shell {w}").strip().splitlines() + if "=" in l) + if "WIDTH" not in g: + continue + if not pid_alive(window_pid(w)): # see win_id(): a ghost cannot be closed, only ignored + continue + n = sh(f"DISPLAY={DISP} xdotool getwindowname {w}").strip() + out.append((w, n, int(g["WIDTH"]), int(g["HEIGHT"]))) + return out + + +def dismiss_modals(timeout=30): + """Close every modal over the main window, and PROVE none is left. + + This is the rung that decides whether any of the others mean anything. A fresh datadir opens + "Bambu Network Plug-in Required" — 440x259, centred at 742,450 — which sits exactly on top of + the point every drawing gesture in TOOLS starts from. The whole ladder then reports eleven + product failures, all of them the driver clicking a dialog. + + The old version pressed Escape and moved on. This dialog ignores Escape, so it "dismissed" + nothing and said so to no one; the run that found this was red for a reason that had nothing + to do with the contract under test. Escape is still tried first because it is the gentlest + thing that works on the wizard, then WM_DELETE_WINDOW, and then the function asserts what it + was supposed to have achieved instead of assuming it. + """ + # NEVER run without knowing which window to spare. The first version took `keep = main[0] if + # main else None`, so a win_id() that raced the app's mapping made keep None and every visible + # window a modal — this function then sent WM_DELETE to the app's own main window. The app + # survived as a process, printed "GdkWindow unexpectedly destroyed", and answered nothing + # afterwards; the ladder reported "no sketch opened" for 180s. Losing the main window is not a + # state to recover from silently. + deadline = time.time() + timeout + keep = None + while keep is None and time.time() < deadline: + main = win_id() + keep = main[0] if main else None + if keep is None: + time.sleep(0.5) + if keep is None: + die(f"no main window to protect after {timeout}s — refusing to close anything") + scr = sh(f"DISPLAY={DISP} xdotool getdisplaygeometry").split() + full = int(scr[0]) * int(scr[1]) if len(scr) == 2 else 1920 * 1080 + while time.time() < deadline: + # A modal is small. Anything covering half the screen is the app, whatever id win_id() + # happened to return this instant — a second belt on the rule above, because the cost of + # being wrong here is an app that looks alive and answers nothing. + extra = [x for x in visible_windows() if x[0] != keep and x[2] * x[3] < full * 0.5] + if not extra: + return + for (w, n, _, _) in extra: + sh(f"DISPLAY={DISP} xdotool windowactivate {w}") + time.sleep(0.4) + key("Escape", 0.4) + if any(x[0] == w for x in visible_windows()): + sh(f"DISPLAY={DISP} xdotool windowclose {w}") + time.sleep(0.6) + time.sleep(0.5) + left = [f"{n!r} ({w}x{h})" for (i, n, w, h) in visible_windows() + if i != keep and w * h < full * 0.5] + die("a modal is still covering the canvas after " + str(timeout) + "s: " + ", ".join(left) + + " — every drawing gesture would land in it, so nothing below this line could be trusted") + + +def dismiss_first_run(): + dismiss_modals() + + +# ---------------------------------------------------------------- the trace + +def trace_lines(): + try: + with open(TRACE, "r", errors="replace") as f: + return [l.strip() for l in f if l.startswith("[UX] ")] + except OSError: + return [] + + +def trace_mark(): + return len(trace_lines()) + + +def parse(line): + m = re.match(r"\[UX\] (\w+) title=(.*?) (.*)$", line) + if not m: + return None + ev, title, rest = m.group(1), m.group(2), m.group(3) + kv = dict(re.findall(r"(\w+)=(\S*)", rest)) + return ev, title, kv + + +# ---------------------------------------------------------------- grading + +def check(cond, what): + """Returns the verdict so a caller can abandon a rung whose precondition failed.""" + global _fail, _checks + _checks += 1 + if cond: + print(f" ok {what}") + else: + print(f" FAIL {what}", file=sys.stderr) + _fail += 1 + return bool(cond) + + +def type_into_open_field(value, mark): + """Type `value` into whatever field is open, WITHOUT clicking it first, and grade the pair. + + No click: the click is the workaround this ladder exists to refuse. If the field cannot take + the keyboard on its own, `typed` will be the prefill and this fails — which is the report. + """ + # POLL for the field. It opens from a CallAfter that runs after a re-solve, so on llvmpipe it + # is simply not there yet when a fast driver looks — and "no field opened" is the same message + # whether the product never opened one or the driver asked too early. Wait, then decide. + opens = [] + deadline = time.time() + 8.0 + while time.time() < deadline: + opens = [e for e in (parse(l) for l in trace_lines()[mark:]) if e and e[0] == "open"] + if opens: + break + time.sleep(0.25) + if not opens: + check(False, f"a value field opened (nothing did; cannot type {value})") + return mark + title = opens[-1][1] + prefill = opens[-1][2].get("prefill", "") + m2 = trace_mark() + # TYPE NORMALLY. NOTHING TO DEFOCUS ANY MORE. + # + # The value field is drawn INSIDE the GL canvas by ImGui, so it is not a window: there is no + # second toplevel for a window manager to grant or refuse the keyboard, and the keystrokes go + # to the app's one window exactly as a person's would. That is the entire point of the design + # — the WM has no say — and it is why this ladder no longer tries to manufacture the failing + # condition. + # + # When the field WAS a floating wxFrame, this spot held two attempts to reproduce + # "field open, keyboard elsewhere", and both are recorded here so neither is tried again: + # - XSetInputFocus onto the main window (`xdotool windowfocus`): the field's own re-focus + # CallAfter wins the race every time; four retries all lost, and the ladder passed twice + # against a binary with the fix compiled out. + # - XSendEvent at the main window (`xdotool type --window`): GTK discards synthetic key + # events, so NEITHER build received anything and every run was red regardless of the code. + # A run that used the second of those is what produced "the app never saw a digit" — a + # property of xdotool, not of the product. + # + # For the in-canvas field the honest gate is simply: type, and see whether the value the app + # commits is the value that was typed. + diag = sh(f"DISPLAY={DISP} xdotool getwindowfocus").strip() + typ(str(value), 0.4) + key("Return", 0.9) + after, commits, refused, commit_at = [], [], [], None + deadline = time.time() + 5.0 + while time.time() < deadline: + after = [parse(l) for l in trace_lines()[m2:]] + commits = [(i, e) for i, e in enumerate(after) if e and e[0] == "commit"] + refused = [e for e in after if e and e[0] == "refused"] + if commits: + commit_at = m2 + commits[-1][0] + commits = [e for _, e in commits] + if commits or refused: + break + time.sleep(0.25) + if refused and not commits: + check(False, f"{title}: field REFUSED {value!r} (typed={refused[-1][2].get('typed')!r})") + key("Escape", 0.5) + return trace_mark() + if not commits: + check(False, f"{title}: typed {value} but nothing committed — the field took no keys") + key("Escape", 0.5) + return trace_mark() + typed = commits[-1][2].get("typed", "") + got = commits[-1][2].get("value", "") + check(typed == str(value), + f"{title}: field received what was typed (typed={typed!r} wanted={value!r}" + f"{' <-- it committed its PREFILL, so it never got the keyboard' if typed == prefill else ''})") + # A value that will not parse is a FAILED CHECK, never an exception. An unguarded float() + # here met a locale-formatted "61,0000" and took the whole run down immediately after the + # first check in the ladder's history had passed — the seven rungs below it were never tried + # and the report read as a total failure. + try: + ok_val = abs(float(got) - float(value)) < 1e-6 + except (TypeError, ValueError): + ok_val = False + check(ok_val, f"{title}: committed value is {got!r} (wanted {value})") + check(str(value) != prefill, f"{title}: the test value differs from the prefill {prefill!r}") + # RESUME JUST AFTER THE COMMIT, not at the end of the trace. A queued chain opens its next + # field from the commit callback, so by the time trace_mark() is read here that "open" line + # is already written — and the next call, searching only after this mark, never sees it. The + # rectangle's Height, the slot's Radius and the label reopen all failed as "nothing did" + # while the trace plainly showed the field open and waiting. + return (commit_at + 1) if commit_at is not None else trace_mark() + + +# ---------------------------------------------------------------- the ladder + +def enter_sketch(timeout=180): + """Open a real sketch on a real plane, and PROVE it with the socket before drawing anything. + + THE SEQUENCE MATTERS AND IT IS NOT OBVIOUS. Shift+S enters sketch MODE and pops the plane + offer; the offer must be dismissed; and the plane itself is chosen by clicking it in the + viewport BEFORE Shift+S. check-gui-sketching.py has always done all four steps. This ladder + did two of them — Design tab, then Shift+S — and went straight to the tool letters. + + That intermediate state is the trap. `is_sketching` reads 1, every tool key is accepted and + traced, and not one click draws anything, because there is no plane under them. The ladder + then reports eleven product failures, all of them "a value field opened (nothing did)", and + every one is the driver's. Two whole runs were spent on it. + + So the gate is the ORACLE, not the keytrace: sketch_describe answers only when a sketch is + genuinely open. Waiting on a mode flag is what allowed the wrong state to pass for the right + one in the first place. + """ + deadline = time.time() + timeout + while time.time() < deadline: + click(132, 53) # Design tab + time.sleep(2.0) + dismiss_modals() + click(*PLANE_PX) # pick the plane IN THE VIEWPORT — before Shift+S + key("shift+s", 1.0) + key("Escape", 0.5) # entering sketch mode pops the offer; dismiss it + key("p", 0.6) # any sketch tool starts the session on that plane + if try_call("sketch_describe") is not None: + # NO Escape here. Every rung already opens with one to drop whatever tool the last + # one left armed, and Escape in the Design tab walks a LIFO: first press drops the + # armed tool, second LEAVES THE SKETCH. Pressing it here made that second press the + # rung's own, so the ladder exited the sketch before drawing anything and then + # reported all eleven checks failed with "nothing opened" — the tools were arming + # into an empty Feature-mode document. + return + die("no sketch opened after plane click + Shift+S within " + f"{timeout}s — sketch_describe never answered on {A.sock} (trace {TRACE})") + + +# tool key, the clicks that draw it, and one distinct value per queued field. The values are +# deliberately nothing like the as-drawn size, so a committed prefill cannot coincide with them. +# Where the plane label sits in the viewport before a sketch is open. Same constant the gesture +# ladder uses; it is a label on the 3D view, not a widget, so it moves only if the camera does. +PLANE_PX = (913, 359) + +# Every coordinate below stays inside 1000..1400 x 500..760 — the box check-gui-sketching.py's +# calibration probes land four Points in, i.e. the region PROVEN to be live canvas on a 1920x1080 +# window. Earlier values started at x=950, which is left of that box and also, on a fresh datadir, +# underneath the "Bambu Network Plug-in Required" modal. +TOOLS = [ + ("L", "Line", [(1030, 540), (1360, 540)], [61]), + ("R", "Rectangle", [(1030, 540), (1360, 730)], [62, 43]), + ("C", "Circle", [(1180, 620), (1330, 620)], [64]), + ("S", "Slot", [(1030, 580), (1300, 580), (1300, 640)], [66]), + ("G", "Polygon", [(1180, 620), (1320, 620)], [67]), + ("E", "Ellipse", [(1180, 620), (1370, 620), (1180, 720)], [68]), + ("A", "Arc", [(1040, 660), (1340, 660), (1190, 560)], [69]), +] + + +def rung_tool(k, name, clicks, values): + print(f" {name}") + key("Escape", 0.6) # back to Select, whatever the last tool left armed + # Every rung re-establishes that a sketch is STILL open. One stray Escape too many leaves it, + # and from then on every tool arms into a Feature-mode document that cannot open a value + # field — which the checks below report as eleven independent product failures. + if try_call("sketch_describe") is None: + die(f"{name}: the sketch is no longer open before this rung — an earlier rung left it") + key(k, 0.8) + # MARK BEFORE THE CLICKS, not after. The field is opened from a CallAfter scheduled by the + # render that follows the last click, so it can already be open by the time a mark taken + # afterwards is read — and type_into_open_field, which only looks at events AFTER its mark, + # then finds none and reports "a value field opened (nothing did)" for a field that is on + # screen, open, and waiting. That message accused the product of the exact defect the ladder + # exists to detect, from a bug in the ladder's own bookkeeping. + mark = trace_mark() + for (x, y) in clicks: + click(x, y) + for v in values: + mark = type_into_open_field(v, mark) + + +def rung_rounded_rect(): + """The shape the user actually reported: a ROUNDED rectangle, Width -> Height -> Radius. + + It has no keyboard shortcut — the rectangle family binds R to CornerRect and leaves the other + modes in the toolbar flyout — so TOOLS above cannot reach it and the whole three-step chain + went untested. `run_verb` arms it the way the offer menu does. + + NOTE the id: the OFFER verb is `sk_rect_rounded`; `design_rect_rounded` is the ACTION name and + run_verb throws on it, leaving the tool as Select. A run that misses that draws nothing and + still reaches its assertions, so arm-and-verify rather than arm-and-hope. + """ + print(" Rounded rectangle") + key("Escape", 0.6) + tool = None + for _ in range(8): + try_call("run_verb", verb="sk_rect_rounded") + time.sleep(0.8) + tool = (try_call("sketch_describe") or {}).get("tool") + if tool == "rect_rounded": + break + if not check(tool == "rect_rounded", f"the rounded-rectangle tool armed (tool={tool!r})"): + return + mark = trace_mark() + click(1030, 540); click(1330, 700); click(1300, 660) # corners, then the radius point + for v in (63, 41, 7): + mark = type_into_open_field(v, mark) + + +def rung_label_click(): + """The user's own report: click an existing dimension label and type a new value into it. + + KEEP THE SHAPE AS DRAWN. An earlier version committed 55 and 47 into the queued chain first, + which resized the rectangle — and then clicked the pixel where the label had been before the + resize. It missed, every time, and reported the reopen broken. The shape's on-screen position + is only predictable if nothing has moved it, so Escape the chain instead: the rectangle stays + exactly between the two corners we clicked. + + FIND THE LABEL, do not assume its offset. A dimension label is drawn beside its edge at an + offset that depends on zoom and text metrics, so a single hardcoded pixel is a guess that + silently becomes wrong. Walk a short band across the top edge instead and stop at the first + click that opens a field; if none of them does, that is a real failure and it says so. + """ + print(" label click-to-edit") + key("Escape", 0.6) # Select mode + key("R", 0.8) + click(1020, 530) + click(1350, 740) + time.sleep(1.5) + key("Escape", 0.8) # keep as drawn: abandon the queued value chain + time.sleep(0.8) + key("Escape", 0.6) # back to Select so a click picks rather than draws + + mid_x, top_y = (1020 + 1350) // 2, 530 + candidates = [(mid_x, top_y + dy) for dy in (-26, -20, -14, -8, 0, 8, 14)] + for (cx, cy) in candidates: + mark = trace_mark() + click(cx, cy) + deadline = time.time() + 2.0 + while time.time() < deadline: + if [e for e in (parse(l) for l in trace_lines()[mark:]) if e and e[0] == "open"]: + check(True, f"clicking a dimension label reopened its value field (at {cx},{cy})") + type_into_open_field(71, mark) + return + time.sleep(0.2) + check(False, "clicking a dimension label reopened its value field " + f"(tried {len(candidates)} points across the top edge at x={mid_x})") + + +def main(): + if not A.attach: + if not os.path.exists(A.bin): + die(f"no binary at {A.bin}") + open(TRACE, "w").close() + launch() + dismiss_first_run() + win() + print(f"click-edit ladder on {DISP}, trace {TRACE}") + enter_sketch() + for (k, name, clicks, values) in TOOLS: + rung_tool(k, name, clicks, values) + rung_rounded_rect() + rung_label_click() + print() + if _fail: + print(f"CLICK-EDIT LADDER FAILED — {_fail} of {_checks} checks", file=sys.stderr) + else: + print(f"CLICK-EDIT LADDER HELD — {_checks} checks") + if _proc is not None and not A.keep: + _proc.send_signal(signal.SIGTERM) + try: + _proc.wait(20) + except subprocess.TimeoutExpired: + _proc.kill() + return 1 if _fail else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/CAD/check-gui-context-menu.py b/scripts/CAD/check-gui-context-menu.py new file mode 100644 index 0000000000..28e404ecf0 --- /dev/null +++ b/scripts/CAD/check-gui-context-menu.py @@ -0,0 +1,1218 @@ +#!/usr/bin/env python3 +"""The OFFER ladder: prove that right-click is the pivot, and that it adapts to what was clicked. + +The gesture ladder (scripts/CAD/check-gui-sketching.py) proved the TARGET — a complex closed profile, precise +in vertices, lengths, arcs and symmetry, with its voids correctly attributed. It proved it by +arming every tool with a letter key. That leaves the goal's own MECHANISM untested: the design +logic pivots on right-click, and the verbs offered are supposed to adapt to the element under the +cursor. Half the vocabulary is only reachable that way — 47 of 86 Design-tab verbs have a GUI +action and no shortcut, so a key-driven ladder cannot reach them at all. + +This ladder drives the menu. Nothing here is asserted from pixels: + + WHAT WAS CLICKED -> the offer's own [OFFER] trace, emitted by show_offer_menu from the same + loop that builds the rows (ORCA_CAD_KEYTRACE). It cannot drift from what + the user is shown, which a hand-written expectation list would. + WHAT IS OFFERED -> the same trace, compared against DesignOffer.hpp parsed independently. + "The menu shows exactly the verbs the table says apply here" is a + property; a copied list of row names is a transcription. + WHAT IT PRODUCED -> the MCP socket, read-only, exactly as in the gesture ladder. + +Run inside the rig container, with the app launched under ORCA_CAD_KEYTRACE=1: + + docker exec orcacad-gui python3 /OrcaSlicer/scripts/CAD/check-gui-context-menu.py [rung ...] +""" +import importlib.util +import math +import os +import re +import sys +import time + +HERE = os.path.dirname(os.path.abspath(__file__)) + +# The gesture ladder owns the hand and the eye: the homography per sketch, the window lookup by +# class, the synthetic click, the typed value, the socket. Importing it is the only way those +# stay one implementation — a second copy would drift the first time a rig detail moved. +_spec = importlib.util.spec_from_file_location("gui_ladder", os.path.join(HERE, "check-gui-sketching.py")) +G = importlib.util.module_from_spec(_spec) +_spec.loader.exec_module(G) + +LOG = os.environ.get("ORCA_CAD_GUI_LOG", "/tmp/gui-session.log") + +# The rig container's /OrcaSlicer is the image's own baked source tree, not this checkout, so the +# generated header is not where a repo-relative path expects it. Look in both places and say which +# one was read — a ladder that silently graded against the WRONG table would be worse than one +# that refuses to start. +HEADER_CANDIDATES = [os.environ.get("ORCA_CAD_OFFER_HPP", ""), + os.path.join(HERE, "..", "src", "slic3r", "GUI", "CAD", "DesignOffer.hpp"), + os.path.join(HERE, "DesignOffer.hpp")] + +# OfferSel, in the order the generated enum declares it. The trace reports the integer; a test +# that printed "kind=16" and expected the reader to know what that is would be half a test. +SEL = ["None", "FacePlanar", "FaceCyl", "FaceOther", "EdgeStr", "EdgeCirc", "Vertex", + "BodySolid", "BodySheet", "Bodies2", "DatumPlane", "DatumAxis", "CoordSys", "Art", + "SkLoop", "SkNone", "SkLine", "SkArc", "SkPoint", "Sk2Ent"] + + +# ---------------------------------------------------------------- the table, parsed + +def load_table(): + """Every verb in DesignOffer.hpp, as dicts. The independent half of the comparison. + + Parsed from the generated header rather than from tool_atlas.json on purpose: the header is + what the binary was compiled from, and the two have been out of step before (ziam, + where regenerating the header silently dropped the Constrain row). + """ + path = next((p for p in HEADER_CANDIDATES if p and os.path.exists(p)), None) + if path is None: + raise SystemExit("no DesignOffer.hpp found; set ORCA_CAD_OFFER_HPP or copy it beside " + "this script (tried: " + ", ".join(filter(None, HEADER_CANDIDATES)) + ")") + print(f"offer table: {os.path.realpath(path)}") + src = open(path).read() + body = src[src.index("kOfferVerbs[]"):] + body = body[:body.index("\n};")] + out = [] + for line in body.splitlines(): + line = line.strip() + if not line.startswith('{"'): + continue + # id, name, row, key, action, refusal, accepts, need_bodies, need_sketches, need_sheet, + # sketch_mode, family, ... — split on top-level commas, respecting quotes. + f, cur, q, esc = [], "", False, False + for ch in line[1:]: + if esc: + cur += ch; esc = False; continue + if ch == "\\": + cur += ch; esc = True; continue + if ch == '"': + q = not q + if ch == "," and not q: + f.append(cur.strip()); cur = ""; continue + if ch == "}" and not q: + break + cur += ch + f.append(cur.strip()) + if len(f) < 12: + continue + lit = lambda s: None if s == "nullptr" else s.strip('"') + out.append({"id": lit(f[0]), "name": lit(f[1]), "row": int(f[2]), "key": lit(f[3]), + "action": lit(f[4]), "accepts": int(f[6].rstrip("u"), 0), + "need_bodies": int(f[7]), "need_sketches": int(f[8]), + "need_sheet": f[9] == "true", "sketch_mode": f[10] == "true", + "family": lit(f[11])}) + return out + + +TABLE = load_table() + + +def predicted(kind, sketching, bodies=0, sketches=0, sheet=False): + """The verbs show_offer_menu should list for this selection — the table's own answer. + + Mirrors the `applies` lambda and the sketch_mode gate in DesignPanel::show_offer_menu. If the + two ever disagree, one of them is the bug; this ladder says which selection exposed it. + """ + bit = 1 << kind + return [v["id"] for v in TABLE + if v["sketch_mode"] == sketching and (v["accepts"] & bit) + and v["need_bodies"] <= bodies and v["need_sketches"] <= sketches + and (not v["need_sheet"] or sheet)] + + +# ---------------------------------------------------------------- the trace, read back + +def log_mark(): + """Where the log ends now, so the next read sees only this gesture's lines.""" + try: + return os.path.getsize(LOG) + except OSError: + return 0 + + +def log_since(mark): + with open(LOG, "rb") as fh: + fh.seek(mark) + return fh.read().decode("utf-8", "replace") + + +class Offer: + """One opening of the offer menu, as the app described it while building the rows.""" + + def __init__(self, text): + self.kind = None + self.sketching = None + self.entries = [] # top level, in order: dicts with label/enabled/verbs + self.verbs = [] # every live verb id, in menu order + for m in re.finditer(r"^\[OFFER\] (.*)$", text, re.M): + self._line(m.group(1)) + + def _line(self, s): + head = re.match(r"open kind=(\d+) sketching=(\d+) bodies=(\d+)", s) + if head: + self.kind = int(head.group(1)) + self.sketching = head.group(2) == "1" + self.entries = [] + self.verbs = [] + return + dis = re.match(r"row=(\d+) (.*?) DISABLED \((.*)\)$", s) + if dis: + self.entries.append({"row": int(dis.group(1)), "label": dis.group(2), + "enabled": False, "kids": [], "why": dis.group(3)}) + return + one = re.match(r"row=(\d+) (.*?) -> (\S+)(?: \(no GUI route\))?$", s) + if one: + routed = "(no GUI route)" not in s + self.entries.append({"row": int(one.group(1)), "label": one.group(2), + "enabled": routed, "kids": [], "verb": one.group(3)}) + self.verbs.append(one.group(3)) + return + sub = re.match(r"row=(\d+) (.*?) > (.*)$", s) + if sub: + row, label, rest = int(sub.group(1)), sub.group(2), sub.group(3) + routed = "(no GUI route)" not in rest + rest = rest.replace(" (no GUI route)", "") + fam, vid = (rest.split(" > ", 1) + [None])[:2] if " > " in rest else (None, rest) + if not self.entries or self.entries[-1]["row"] != row or "verb" in self.entries[-1]: + self.entries.append({"row": row, "label": label, "enabled": True, "kids": []}) + self.entries[-1]["kids"].append({"family": fam, "verb": vid, "enabled": routed}) + self.verbs.append(vid) + return + + def kind_name(self): + return SEL[self.kind] if self.kind is not None and self.kind < len(SEL) else str(self.kind) + + def path_to(self, verb): + """Keyboard path to a verb: how many Downs at each level, top level first. + + GTK skips insensitive items on arrow navigation, so the count is over ENABLED entries + only — which is exactly why the trace records the enabled state per row instead of the + ladder assuming every row is live. + """ + n = 0 + for e in self.entries: + if not e["enabled"]: + continue + n += 1 + if e.get("verb") == verb: + return [n] + if e["kids"]: + # Families become a nested submenu at the position of their first member. + pos, seen = 0, [] + for k in e["kids"]: + if k["family"]: + if k["family"] not in seen: + seen.append(k["family"]) + pos += 1 + fam_pos = pos + if k["verb"] == verb: + inner = [x for x in e["kids"] if x["family"] == k["family"]] + j = sum(1 for x in inner[:inner.index(k) + 1] if x["enabled"]) + return [n, fam_pos, j] + continue + if not k["enabled"]: + continue + pos += 1 + if k["verb"] == verb: + return [n, pos] + return None + + +def open_offer(X=None, Y=None, pause=1.2): + """Right-click (on the plane point given, or wherever the cursor is) and read the offer back. + + The menu is modal — PopupMenu blocks the main thread — so no socket call may be made between + this and choose()/dismiss(). Every assertion about the menu comes from the trace. + """ + mark = log_mark() + if X is None: + G.xdo("click --delay 120 3") + else: + G.clickmm(X, Y, pause=0.5, btn=3) + time.sleep(pause) + return Offer(log_since(mark)) + + +def choose(offer, verb): + """Walk the open menu to a verb with the keyboard and activate it.""" + path = offer.path_to(verb) + if path is None: + G.die(f"{verb} is not in the offer (kind={offer.kind_name()}, has {offer.verbs})") + for level, downs in enumerate(path): + # At the top level nothing is highlighted when the menu pops, so the first Down lands on + # entry 1. Inside a submenu GTK has ALREADY highlighted its first item as part of opening + # it, so reaching entry k takes k-1 more. Getting this wrong is silent: the walk activates + # a neighbouring verb and the rung grades a shape nobody asked for — the first run of this + # rung drew a circle of area 45238.93 and called it a rectangle. + for _ in range(downs if level == 0 else downs - 1): + G.key("Down", 0.12) + if level < len(path) - 1: + G.key("Right", 0.35) # open the submenu; its first item is now highlighted + G.key("Return", 0.9) + + +def dismiss(offer=None): + """Escape ONLY when a menu is really open. + + A stray Escape on the canvas is not harmless: with no tool armed and no points down, the + sketch's layered exit reads it as "leave the sketch", and the next socket call answers + "no sketch is open" three rungs from where the mistake was made. + """ + if offer is not None and offer.kind is None: + return + G.key("Escape", 0.5) + + +def menu_windows(): + """X windows that are override-redirect popups — evidence the menu really opened.""" + out = [] + for w in G.sh(f"DISPLAY={G.DISP} xdotool search --class '.'").split(): + g = G.sh(f"DISPLAY={G.DISP} xdotool getwindowgeometry --shell {w}") + d = dict(l.split("=", 1) for l in g.strip().splitlines() if "=" in l) + if "WIDTH" in d and 60 < int(d["WIDTH"]) < 700 and 40 < int(d["HEIGHT"]) < 900: + out.append(w) + return out + + +# ---------------------------------------------------------------- rungs + +def draw_line_at(x0, y0, x1, y1, length): + """Draw one horizontal line and COMMIT it by typing its length and angle. + + Deliberately no Escape. Escape is overloaded in a sketch — field, then tool, then the sketch + itself — so a driver that presses it one time too many leaves the session and every later + assertion answers "no sketch is open" from three rungs away. Typing the value closes the + field, which is what the gesture ladder proved commits exactly. + """ + G.key("l", 0.5) + G.clickmm(x0, y0) + G.clickmm(x1, y1) + G.values(int(length), 0) + keep_as_drawn() # drain any straggler field before the caller clicks anything + + +def rung_kinds(): + """O1 — the offer adapts to the element under the cursor, one element type at a time.""" + print("\nO1 the offer reads what was right-clicked") + fresh_sketch("l") + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + + # Empty space first: nothing is selected, so the sketch vocabulary's no-selection row set. + # Right-click has two jobs on a draw tool, and which one it does depends on whether an + # anchor is down. Both are asserted here: the version that consumed EVERY right-click made + # the offer unreachable from any armed tool (ghcz), which is the goal's own + # mechanism failing silently. + hi = y1 - (y1 - y0) * 0.12 + o = open_offer(cx, hi) + G.check("OFFER", o.kind is not None, + "Line armed, nothing anchored: right-click opens the offer") + G.check("OFFER", o.kind == 15, f"right-click on empty space -> {o.kind_name()}") + G.check("OFFER", o.sketching, "the sketch vocabulary is the one being offered") + dismiss(o) + + # ...and with an anchor down it abandons the anchor instead, offering nothing. + G.key("l", 0.5) + G.clickmm(cx, hi) # anchor the first point + o = open_offer(cx + (x1 - x0) * 0.1, hi) + G.check("OFFER", o.kind is None, + "with an anchor down, the same gesture abandons it and does not offer") + o = open_offer(cx, hi) + G.check("OFFER", o.kind is not None, "and the offer is back on the next right-click") + dismiss(o) + G.key("Escape", 0.4) + + # A line. + ax, ay = x0 + (x1 - x0) * 0.15, cy + bx, by = x0 + (x1 - x0) * 0.55, cy + draw_line_at(ax, ay, bx, by, 40) + o = open_offer((ax + bx) / 2.0, ay) + G.check("OFFER", o.kind == 16, f"right-click on a line -> {o.kind_name()}") + dismiss(o) + + # A circle: every curve takes the same vocabulary, which is what SkArc means. + G.key("c", 0.5) + ccx, ccy = x0 + (x1 - x0) * 0.30, cy + (y1 - y0) * 0.25 + G.clickmm(ccx, ccy) + G.clickmm(ccx + (x1 - x0) * 0.10, ccy) + G.values(20) + ents = G.describe()["entities"] + circ = [e for e in ents if e["type"] == "circle"] + G.check("OFFER", len(circ) == 1, "one circle drawn to right-click on") + r = circ[0]["radius"] + o = open_offer(circ[0]["center"][0] + r, circ[0]["center"][1]) + G.check("OFFER", o.kind == 17, f"right-click on a circle -> {o.kind_name()}") + dismiss(o) + + # A point. + G.key("p", 0.5) + pxx, pyy = x0 + (x1 - x0) * 0.80, cy + (y1 - y0) * 0.25 + G.clickmm(pxx, pyy) + o = open_offer(pxx, pyy) + G.check("OFFER", o.kind == 18, f"right-click on a point -> {o.kind_name()}") + dismiss(o) + + # Two entities: a second line, then both picked. Two LINES rather than line-plus-point on + # purpose — the Sk2Ent vocabulary (angle, equal, parallel, the two-entity constraints) is + # about pairs of curves, so the pair the ladder builds should be the pair the verbs mean. + draw_line_at(ax, ay - (y1 - y0) * 0.18, bx, ay - (y1 - y0) * 0.18, 40) + # ONE Escape, to drop the armed tool to Select, and only once the value fields are quiet. + # Left-click means "draw" while a tool is armed, so a picking gesture has to say so first — + # and from a draw tool with no anchor down Escape does exactly that and nothing more; it is + # only a second Escape, from Select, that would leave the sketch. + keep_as_drawn() + G.key("Escape", 0.5) + G.clickmm(*on_line((ax, ay), (bx, ay))) + G.xdo("keydown shift") + G.clickmm(*on_line((ax, ay - (y1 - y0) * 0.18), (bx, ay - (y1 - y0) * 0.18))) + G.xdo("keyup shift") + d = G.describe() + G.check("OFFER", len(d["selection"]) == 2, + f"two entities picked: {d['selection']} (tool={d['tool']} pending={d['pending']} " + f"editing={d['editing']})") + o = open_offer((ax + bx) / 2.0, ay) + G.check("OFFER", o.kind == 19, + f"right-click with two picked -> {o.kind_name()}" + + ("" if o.kind is not None else + f" (no menu: tool={G.describe()['tool']} pending={G.describe()['pending']} " + f"editing={G.describe()['editing']})")) + dismiss(o) + G.leave_sketch() + G.reset_document() + + +def rung_vocabulary(): + """O2 — the rows offered are exactly the ones the table says apply to that selection. + + Five selections, not one. The interesting failure is not "the menu is empty", it is "the + menu is the same whatever you clicked" — and only comparing several kinds against their own + predictions can tell those apart. + """ + print("\nO2 the menu and the offer table agree, selection by selection") + fresh_sketch("l") + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + ax, ay = x0 + (x1 - x0) * 0.15, cy + bx = x0 + (x1 - x0) * 0.55 + draw_line_at(ax, ay, bx, ay, 40) + + G.key("c", 0.5) + ccx, ccy = x0 + (x1 - x0) * 0.30, cy + (y1 - y0) * 0.25 + G.clickmm(ccx, ccy); G.clickmm(ccx + (x1 - x0) * 0.10, ccy) + G.values(20) + circ = [e for e in G.describe()["entities"] if e["type"] == "circle"][0] + + G.key("p", 0.5) + pxx, pyy = x0 + (x1 - x0) * 0.80, cy + (y1 - y0) * 0.25 + G.clickmm(pxx, pyy) + + where = [("SkNone", cx, y1 - (y1 - y0) * 0.12), + ("SkLine", (ax + bx) / 2.0, ay), + ("SkArc", circ["center"][0] + circ["radius"], circ["center"][1]), + ("SkPoint", pxx, pyy), + ("Sk2Ent", None, None)] + seen = {} + for name, X, Y in where: + if name == "Sk2Ent": + # The two-entity vocabulary was the one selection nothing compared against the table, + # and it is where the missing row hid: sk_angdist accepts Sk2Ent and nothing else, so + # an off-by-one that dropped the LAST verb was invisible from every other selection. + keep_as_drawn() + G.key("Escape", 0.5) + G.clickmm(*on_line((ax, ay), (bx, ay))) + G.xdo("keydown shift") + # The TOP of the circle, not its +X point: the radius grip lives there, and a click on + # a grip arms a handle drag which REPLACES the selection with that one entity. The + # pick then silently collapses to one and the offer answers SkLine — right, for the + # selection that actually existed. + G.clickmm(circ["center"][0], circ["center"][1] + circ["radius"]) + G.xdo("keyup shift") + picked = len(G.describe()["selection"]) + G.check("OFFER", picked == 2, f"two entities picked for the pair vocabulary: {picked}") + X, Y = (ax + bx) / 2.0, ay + o = open_offer(X, Y) + want = sorted(predicted(o.kind, o.sketching)) + got = sorted(o.verbs) + G.check("OFFER", o.kind is not None and o.kind_name() == name and got == want, + f"{o.kind_name()}: {len(got)} verbs, exactly the table's set" + + ("" if got == want else f"\n menu {got}\n table {want}")) + seen[name] = set(got) + dismiss(o) + + # And the sets are genuinely DIFFERENT — an offer that adapts is not one that always shows + # the same rows. Without this, four identical menus would have passed four checks. + G.check("OFFER", len(set(map(frozenset, seen.values()))) == len(seen), + "every selection offers a different set: " + + ", ".join(f"{k}={len(v)}" for k, v in seen.items())) + G.check("OFFER", seen["SkLine"] - seen["SkNone"], + f"a picked line adds {len(seen['SkLine'] - seen['SkNone'])} verbs an empty pick has not: " + + ", ".join(sorted(seen["SkLine"] - seen["SkNone"])[:8])) + G.leave_sketch() + G.reset_document() + + +def rung_author(): + """O3 — the target itself, authored through the menu: no tool key is pressed anywhere here.""" + print("\nO3 a precise closed profile, drawn entirely from the right-click offer") + fresh_sketch("p") # 'p' only to open the session; calibration needs the Point tool + G.key("Escape", 0.4) + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + w, h = 120.0, 80.0 + + o = open_offer(cx, cy) + G.check("OFFER", o.kind == 15, f"empty sketch -> {o.kind_name()}") + choose(o, "sk_rect") + G.clickmm(cx - w / 2.0, cy - h / 2.0) + G.clickmm(cx + w / 2.0, cy + h / 2.0) + G.values(int(w), int(h)) + ents = G.describe()["entities"] + G.check("LENGTH", G.lengths(ents) == [80.0, 80.0, 120.0, 120.0], + f"sides {G.lengths(ents)} — typed through the offer, exact") + lp = G.loops() + G.check("CLOSED", len(lp) == 1, f"{len(lp)} closed loop(s)") + G.check("AREA", G.near(abs(lp[0]["area"]), w * h, 1e-9), f"area {abs(lp[0]['area']):.6f}") + G.leave_sketch() + G.reset_document() + + +def rung_no_shortcut(): + """O4 — a tool with NO keyboard route at all, armed from the menu and graded on its geometry. + + This is the half of the vocabulary a key-driven ladder cannot reach: 47 of the 86 Design-tab + verbs have a GUI action and no shortcut, and for those the offer is not one door, it is the + only door. Arming the tool is not the assertion — the exact rectangle it then draws is. + """ + print("\nO4 a tool that has no shortcut, reached the only way it can be") + fresh_sketch("p") + G.key("Escape", 0.5) + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + + o = open_offer(cx, cy) + keyless = [v for v in TABLE if v["id"] in o.verbs and not v["key"] and v["action"]] + G.check("OFFER", len(keyless) >= 10, + f"{len(keyless)} of the {len(o.verbs)} verbs offered here have no shortcut at all") + G.check("OFFER", any(v["id"] == "sk_rect_center" for v in keyless), + "centre rectangle among them — unreachable from the keyboard") + + w, h = 120.0, 80.0 + choose(o, "sk_rect_center") + G.clickmm(cx, cy) # centre + G.clickmm(cx + w / 2.0, cy + h / 2.0) # corner + G.values(int(w), int(h)) + ents = G.describe()["entities"] + G.check("LENGTH", G.lengths(ents) == [80.0, 80.0, 120.0, 120.0], + f"sides {G.lengths(ents)} from a tool with no key") + lp = G.loops() + G.check("CLOSED", len(lp) == 1 and G.near(abs(lp[0]["area"]), w * h, 1e-9), + f"{len(lp)} closed loop, area {abs(lp[0]['area']):.6f}") + xs = sorted({round(p, 6) for e in ents for p in (e["p0"][0], e["p1"][0])}) + ys = sorted({round(p, 6) for e in ents for p in (e["p0"][1], e["p1"][1])}) + # Centred on the CLICK, to within the click itself. A synthetic click lands on a whole + # pixel, so the plane point it names is only ever as exact as one pixel is — grading this to + # 1e-6 would be grading the homography, not the tool. What is exact is the SHAPE, and that + # is asserted above; what is asserted here is that this was a centre rectangle and not a + # corner one, which a whole pixel is plenty to tell apart at 120 x 80. + tol = 1.5 * G.mm_per_px(cx, cy) + mx, my = (xs[0] + xs[-1]) / 2.0, (ys[0] + ys[-1]) / 2.0 + G.check("SYMMETRY", abs(mx - cx) <= tol and abs(my - cy) <= tol, + f"centred on the click within {tol:.3f} mm (one pixel): " + f"off by {abs(mx - cx):.4f}, {abs(my - cy):.4f} — a CENTRE rectangle, not a corner one") + G.leave_sketch() + G.reset_document() + + + +# ---------------------------------------------------------------- fixtures + +def keep_as_drawn(): + """Close an in-canvas value field if one is open, keeping the geometry as drawn. + + Checked, never assumed. Escape is overloaded: with a field open it means keep-as-drawn, with + none open it drops the armed tool, and one Escape too many leaves the sketch. The socket now + reports whether a field IS open ("editing"), so this presses the key only when it means what + the caller wants it to mean. + """ + n = 0 + # A LOOP, not one press: the auto-edit queue opens the next field from a CallAfter as the + # previous one commits (a rectangle queues Width then Height), so one Escape leaves a second + # field on screen and the canvas still frozen. The loop stops the moment nothing is open, + # which is what keeps the last press from being the one that drops the tool. + # + # And it waits for QUIET, not for a single false reading. A field that has not opened YET + # reads exactly like one that will never open, so a driver that looks once, sees nothing and + # moves on gets frozen by the field that arrives a moment later — with no symptom except + # that clicks stop working. Measured: this rung passed alone and failed inside the gate, + # where the app is warmer and the CallAfter lands later; the diagnostic that found it was + # editing=True with an empty selection after two clicks that should have picked two entities. + for _ in range(8): + time.sleep(0.35 * G.PACE) + if not G.describe().get("editing"): + time.sleep(0.35 * G.PACE) + if not G.describe().get("editing"): + return n + G.key("Escape", 0.45) + n += 1 + return n + + +def clear_sketch(): + """Empty the live sketch through the socket. + + Fixture TEARDOWN, not the thing under test: what is being graded is always the geometry a + verb just produced, never how the canvas got emptied. Doing it through the socket keeps each + verb's rung independent without paying for a fresh sketch (four calibration probes) each time. + """ + keep_as_drawn() # a shape left mid-edit freezes the canvas for whatever comes next + n = len(G.describe()["entities"]) + if n: + G.call("sketch_delete", entities=list(range(n))) + + +# Which tool each creation verb is supposed to arm. The menu walk counts rows, and a walk that +# lands ONE ROW OFF arms a neighbouring tool and then draws something plausible with it — the +# first run of this rung drew a circle and graded it as a rectangle. Asserting the armed tool +# turns that whole class of silent misnavigation into a loud failure at the point it happens. +ARMS = {"sk_polyline": "polyline", "sk_rect": "rect_corner", "sk_rect_center": "rect_center", + "sk_rect_oblique": "rect_oblique", "sk_rect_rounded": "rect_rounded", + "sk_circle_2pt": "circle_2pt", "sk_circle_3pt": "circle_3pt", + "sk_arc_tangent": "arc_tangent", "sk_arc_center": "arc_center", + "sk_slot_arc": "slot_arc", "sk_ellipse_arc": "ellipse_arc", + "sk_poly_3": "polygon", "sk_poly_4": "polygon", "sk_poly_5": "polygon", + "sk_poly_8": "polygon", "sk_poly_12": "polygon", + "sk_move": "move", "sk_rotate": "rotate", "sk_scale": "scale", + "sk_array": "array", "sk_array_polar": "array_polar"} + + +def arm(verb, X, Y, check_tool=True): + """Open the offer on empty plane at (X, Y) and pick a verb out of it. No key is ever pressed.""" + o = open_offer(X, Y) + if o.kind is None: + G.die(f"the offer did not open for {verb} (tool={G.describe().get('tool')}, " + f"pending={G.describe().get('pending')})") + choose(o, verb) + if check_tool and verb in ARMS: + got = G.describe().get("tool") + G.check("OFFER", got == ARMS[verb], f"{verb} armed the {got} tool") + return o + + +def ents(kind=None): + e = G.describe()["entities"] + return [x for x in e if kind is None or x["type"] == kind] + + +def clicked(X, Y): + """The plane point the app REALLY saw for clickmm(X, Y). + + A synthetic click lands on a whole pixel, so the plane point it names is not the one asked + for. Rounding the pixel and mapping it back is what the app got, and grading a construction + against it is grading the tool rather than the driver's arithmetic. + """ + u, v = G.px(X, Y) + return G.unpx(int(u), int(v)) + + +def fresh_sketch(tool): + """Enter a sketch from a KNOWN empty state, whatever the previous rung or run left behind. + + check-gui-sketching's enter_sketch dismisses the old session with keys, and a key is exactly what an + open value field swallows — so a session that should have been cancelled survives, the four + calibration probes land in it on top of whatever was already there, and the run dies with + "calibration expected 4 points, got 7". Cancelling through the socket cannot be swallowed: + it reaches the tool directly. This is fixture teardown, not the thing under test. + """ + G.try_call("sketch_cancel") + G.key("Escape", 0.3) + G.enter_sketch(tool) + + +def on_line(a, b, t=0.3): + """A point a fraction t ALONG a line — never its midpoint. + + A left-click within ~24 px of a live dimension label opens that dimension's value editor + instead of selecting anything (the Select branch tests m_live_quotes before it picks), and a + line's Length quote sits at its middle. Clicking there froze the canvas on an open field, so + the following clicks and the right-click all landed on nothing and the pair vocabulary was + never reached. It bit only when the previous step had left the line selected — live quotes are + drawn for the SELECTION — which is why it passed alone and failed inside the gate. + """ + return (a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t) + + +def poly_click(pt): + """One click of a multi-segment tool, then close whatever value field that click opened. + + The polyline arms a Length field after EVERY segment, and a field freezes the canvas — so a + driver that just clicks four times places two points and loses the rest. Nothing had ever + exercised the polyline (it has no shortcut), so nothing had ever met this. + """ + G.clickmm(*pt) + keep_as_drawn() + + +def dist(a, b): + return math.hypot(a[0] - b[0], a[1] - b[1]) + + +def spread(vals): + return max(vals) - min(vals) + + +# ---------------------------------------------------------------- the keyless 2D vocabulary + +def rung_curves(): + """O5 — every 2D creation verb that has no shortcut, drawn from the offer and graded exactly. + + These are reachable ONLY from the right-click menu, so nothing has ever exercised them. The + assertions are CONSTRUCTION invariants — a regular polygon's vertices are equidistant, a + tangent arc meets its line at a right angle to the radius, a circumscribed polygon's + circumradius is the inscribed one's over cos(pi/n) — because those hold exactly whatever + pixel the click landed on. Where a value field opens, the typed value is graded exactly too. + """ + print("\nO5 the 2D creation verbs that have no keyboard route") + fresh_sketch("p") + G.key("Escape", 0.5) + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + W, H = (x1 - x0), (y1 - y0) + free = (cx, y1 - H * 0.10) # a corner of the safe box that stays empty to right-click + + # --- Polyline: an explicitly CLOSED chain, which is the goal's own shape ------------------ + clear_sketch() + arm("sk_polyline", *free) + ring = [(cx - W * 0.20, cy - H * 0.15), (cx + W * 0.20, cy - H * 0.15), + (cx + W * 0.20, cy + H * 0.15), (cx - W * 0.20, cy + H * 0.15)] + for pt in ring: + poly_click(pt) + poly_click(ring[0]) # click the start again: the explicit close + lines = ents("line") + lp = G.loops() + G.check("CLOSED", len(lines) == 4 and len(lp) == 1, + f"sk_polyline: {len(lines)} lines, {len(lp)} closed loop — closed by clicking the start") + + # --- Oblique rectangle: three clicks, and the point of it is that it is NOT axis-aligned -- + clear_sketch() + arm("sk_rect_oblique", *free) + a = (cx - W * 0.20, cy - H * 0.10) + b = (cx + W * 0.15, cy + H * 0.05) # first edge, deliberately skew + G.clickmm(*a); G.clickmm(*b); G.clickmm(cx - W * 0.10, cy + H * 0.20) + q = ents("line") + G.check("LENGTH", len(q) == 4, f"sk_rect_oblique: {len(q)} lines") + if len(q) == 4: + L = sorted(round(e["length"], 9) for e in q) + G.check("LENGTH", L[0] == L[1] and L[2] == L[3], + f"opposite sides equal to 1e-9: {L}") + angs = [] + for i in range(4): + for j in range(i + 1, 4): + u = (q[i]["p1"][0] - q[i]["p0"][0], q[i]["p1"][1] - q[i]["p0"][1]) + v = (q[j]["p1"][0] - q[j]["p0"][0], q[j]["p1"][1] - q[j]["p0"][1]) + c = abs(u[0] * v[0] + u[1] * v[1]) / (math.hypot(*u) * math.hypot(*v)) + angs.append(c) + G.check("ANGLE", sum(1 for c in angs if c < 1e-9) == 4, + f"four right angles to 1e-9 ({sum(1 for c in angs if c < 1e-9)} perpendicular pairs)") + d0 = (q[0]["p1"][0] - q[0]["p0"][0], q[0]["p1"][1] - q[0]["p0"][1]) + G.check("ANGLE", abs(d0[0]) > 1e-6 and abs(d0[1]) > 1e-6, + f"and it really is oblique: first edge {math.degrees(math.atan2(*d0[::-1])):.3f} deg") + + # --- Rounded rectangle: four lines, four arcs, one radius -------------------------------- + clear_sketch() + arm("sk_rect_rounded", *free) + G.clickmm(cx - W * 0.20, cy - H * 0.15) + G.clickmm(cx + W * 0.20, cy + H * 0.15) + G.clickmm(cx + W * 0.20 - W * 0.04, cy + H * 0.15) # third click sets the radius + ls, ar = ents("line"), ents("arc") + G.check("ARC", len(ls) == 4 and len(ar) == 4, f"sk_rect_rounded: {len(ls)} lines + {len(ar)} arcs") + if len(ar) == 4: + rr = sorted(round(e["radius"], 9) for e in ar) + G.check("ARC", spread(rr) == 0.0, f"all four fillets share one radius to 1e-9: {rr[0]}") + lp = G.loops() + G.check("CLOSED", len(lp) == 1, f"{len(lp)} closed loop") + if len(lp) == 1: + xs = [p for e in ls for p in (e["p0"][0], e["p1"][0])] + ys = [p for e in ls for p in (e["p0"][1], e["p1"][1])] + # The four straight sides already span the FULL outer box — the top edge runs from + # x_min+r to x_max-r at y_max — so their bbox is the rectangle itself, and the + # rounding costs the four corner squares less their quarter-discs: r^2(4 - pi). + w, h, r = max(xs) - min(xs), max(ys) - min(ys), rr[0] + want = w * h - r * r * (4 - math.pi) + G.check("AREA", G.near(abs(lp[0]["area"]), want, 1e-6), + f"area {abs(lp[0]['area']):.9f} vs W*H - r^2(4-pi) {want:.9f}") + + # --- Two-point circle: the two clicks are the ends of a diameter -------------------------- + clear_sketch() + arm("sk_circle_2pt", *free) + p_a = (cx - W * 0.18, cy - H * 0.10) + p_b = (cx + W * 0.18, cy + H * 0.10) + G.clickmm(*p_a); G.clickmm(*p_b) + c2 = ents("circle") + G.check("ARC", len(c2) == 1, f"sk_circle_2pt: {len(c2)} circle") + if c2: + A, B = clicked(*p_a), clicked(*p_b) + mid = ((A[0] + B[0]) / 2.0, (A[1] + B[1]) / 2.0) + tol = 1.5 * G.mm_per_px(cx, cy) + G.check("VERTEX", dist(c2[0]["center"], mid) <= tol, + f"centred on the midpoint of the two clicks (off by {dist(c2[0]['center'], mid):.4f} mm)") + G.check("ARC", abs(c2[0]["radius"] - dist(A, B) / 2.0) <= tol, + f"radius {c2[0]['radius']:.6f} vs half the click separation {dist(A, B) / 2.0:.6f}") + opened = bool(G.describe().get("editing")) + G.check("OFFER", opened, "a radius field opens for it, as it does for the keyed circle") + if opened: + G.value(30) + got = ents("circle")[0]["radius"] + G.check("ARC", G.near(got, 30.0, 1e-9), + f"and it takes a typed radius exactly: {got:.9f} (asked 30.0)") + # The DoF of ONE CIRCLE is three. Asserted here because it is where the lie showed: + # after a delete the solver was never re-run, so this reported the DoF of the + # geometry that had just been erased. ua9g. + G.check("VERTEX", G.describe()["dof"] == 2, + f"and the sketch reports the DoF of what is actually in it: {G.describe()['dof']}") + + # --- Three-point circle: all three clicks lie on it --------------------------------------- + clear_sketch() + arm("sk_circle_3pt", *free) + three = [(cx - W * 0.18, cy), (cx, cy + H * 0.18), (cx + W * 0.16, cy - H * 0.06)] + for pt in three: + G.clickmm(*pt) + c3 = ents("circle") + G.check("ARC", len(c3) == 1, f"sk_circle_3pt: {len(c3)} circle") + if c3: + ds = [dist(clicked(*pt), c3[0]["center"]) for pt in three] + tol = 1.5 * G.mm_per_px(cx, cy) + G.check("ARC", spread(ds) <= tol and abs(ds[0] - c3[0]["radius"]) <= tol, + f"all three clicks lie on it: distances {[round(d, 4) for d in ds]} " + f"vs radius {c3[0]['radius']:.4f}") + + # --- Centre arc: centre, start, end ------------------------------------------------------- + clear_sketch() + arm("sk_arc_center", *free) + C = (cx, cy) + G.clickmm(*C); G.clickmm(cx + W * 0.15, cy); G.clickmm(cx, cy + H * 0.15) + aa = ents("arc") + G.check("ARC", len(aa) == 1, f"sk_arc_center: {len(aa)} arc") + if aa: + tol = 1.5 * G.mm_per_px(cx, cy) + G.check("VERTEX", dist(aa[0]["center"], clicked(*C)) <= tol, + f"centred on the first click (off by {dist(aa[0]['center'], clicked(*C)):.4f} mm)") + for nm, pt in (("start", aa[0]["p0"]), ("end", aa[0]["p1"])): + G.check("ARC", abs(dist(pt, aa[0]["center"]) - aa[0]["radius"]) < 1e-9, + f"its {nm} sits exactly on the radius, to 1e-9") + + # --- Tangent arc: the construction property, exact whatever the click --------------------- + clear_sketch() + G.key("l", 0.5) # fixture: one line for the arc to leave tangentially + la, lb = (cx - W * 0.20, cy - H * 0.05), (cx + W * 0.05, cy - H * 0.05) + G.clickmm(*la); G.clickmm(*lb) + G.values(40, 0) + line = ents("line")[0] + G.key("Escape", 0.5) + arm("sk_arc_tangent", *free) + G.clickmm(*lb) # start snaps onto the line's endpoint + G.clickmm(cx + W * 0.12, cy + H * 0.12) + ta = ents("arc") + G.check("ARC", len(ta) == 1, f"sk_arc_tangent: {len(ta)} arc off the line's endpoint") + if ta: + end = min((ta[0]["p0"], ta[0]["p1"]), key=lambda q: dist(q, line["p1"])) + rad = (end[0] - ta[0]["center"][0], end[1] - ta[0]["center"][1]) + d = (line["p1"][0] - line["p0"][0], line["p1"][1] - line["p0"][1]) + cosang = abs(rad[0] * d[0] + rad[1] * d[1]) / (math.hypot(*rad) * math.hypot(*d)) + G.check("TANGENT", cosang < 1e-9, + f"its radius at the shared end is perpendicular to the line to 1e-9 (cos={cosang:.2e})") + + # --- Arc slot: two concentric arcs, one width -------------------------------------------- + clear_sketch() + arm("sk_slot_arc", *free) + G.clickmm(cx - W * 0.15, cy) # start + G.clickmm(cx, cy - H * 0.10) # centre + G.clickmm(cx + W * 0.15, cy) # end direction + G.clickmm(cx + W * 0.15, cy + H * 0.04) # width + sa = ents("arc") + G.check("ARC", len(sa) >= 2, f"sk_slot_arc: {len(sa)} arcs") + if len(sa) >= 2: + # Group by centre rather than by size: an arc slot is two RAILS about a common centre + # plus two end caps about their own, and "the two biggest arcs" is not the same set — + # it picked a rail and a cap and called them non-concentric. + groups = {} + for e in sa: + k = (round(e["center"][0], 9), round(e["center"][1], 9)) + groups.setdefault(k, []).append(e["radius"]) + rails = max(groups.values(), key=len) + G.check("ARC", len(rails) == 2, + f"two rails share one centre to 1e-9 (radii {[round(r, 6) for r in sorted(rails)]}), " + f"{len(groups) - 1} cap centre(s) besides") + + # --- Ellipse arc: five clicks, and now the socket can actually see its parameters --------- + clear_sketch() + arm("sk_ellipse_arc", *free) + G.clickmm(cx, cy) + G.clickmm(cx + W * 0.18, cy) + G.clickmm(cx, cy + H * 0.10) + G.clickmm(cx + W * 0.18, cy) + G.clickmm(cx, cy + H * 0.10) + ea = ents("ellipse_arc") + G.check("ARC", len(ea) == 1, f"sk_ellipse_arc: {len(ea)} ellipse arc") + if ea and "radius" in ea[0]: + G.check("ARC", ea[0]["radius"] > ea[0]["rminor"] > 0, + f"semi-axes a={ea[0]['radius']:.6f} b={ea[0]['rminor']:.6f}, a > b > 0") + for nm, pt in (("start", ea[0]["p0"]), ("end", ea[0]["p1"])): + X = (pt[0] - ea[0]["center"][0], pt[1] - ea[0]["center"][1]) + ph = ea[0]["rotation"] + u = (X[0] * math.cos(ph) + X[1] * math.sin(ph)) / ea[0]["radius"] + v = (-X[0] * math.sin(ph) + X[1] * math.cos(ph)) / ea[0]["rminor"] + G.check("ARC", abs(u * u + v * v - 1.0) < 1e-9, + f"its {nm} satisfies (x/a)^2+(y/b)^2 = 1 to 1e-9") + + # --- The five fixed-count polygons: regular, to 1e-9 -------------------------------------- + for verb, n in (("sk_poly_3", 3), ("sk_poly_4", 4), ("sk_poly_5", 5), + ("sk_poly_8", 8), ("sk_poly_12", 12)): + clear_sketch() + arm(verb, *free) + G.clickmm(cx, cy) + G.clickmm(cx + W * 0.15, cy) + q = ents("line") + if len(q) != n: + G.check("LENGTH", False, f"{verb}: {len(q)} sides, expected {n}") + continue + L = [round(e["length"], 9) for e in q] + ctr = clicked(cx, cy) + R = [dist(e["p0"], ctr) for e in q] + G.check("LENGTH", spread(L) == 0.0 and spread(R) < 1.5 * G.mm_per_px(cx, cy), + f"{verb}: {n} equal sides to 1e-9 ({L[0]:.9f}), all vertices on one circle") + + # --- Inscribed vs circumscribed: the exact ratio between them ----------------------------- + radii = {} + for verb, fit in (("sk_poly_inscribed", "inscribed"), ("sk_poly_circumscribed", "circumscribed")): + clear_sketch() + arm(verb, *free) # a tool PARAMETER, chosen from the menu + arm("sk_poly_5", *free) + G.clickmm(cx, cy) + G.clickmm(cx + W * 0.15, cy) + q = ents("line") + ctr = clicked(cx, cy) + radii[fit] = dist(q[0]["p0"], ctr) if q else 0.0 + want = 1.0 / math.cos(math.pi / 5.0) + got = (radii["circumscribed"] / radii["inscribed"]) if radii["inscribed"] else 0.0 + G.check("ARC", G.near(got, want, 1e-6), + f"circumscribed/inscribed circumradius = {got:.9f} vs 1/cos(pi/5) = {want:.9f} " + "— the two fits are genuinely different constructions") + G.leave_sketch() + G.reset_document() + + +def tf_fixture(cx, cy, W, L=40): + """One horizontal line of exactly L mm, drawn by key. Fixture, not the thing under test. + + Horizontal and exactly L because every transform assertion below is derived from it: the + gizmo seeds its parameters from the target's own size (pivot = the line's midpoint, handle + radius = half its length), so knowing the line exactly is what makes the handle and its value + label land on a computable pixel instead of a guessed one. + """ + G.key("l", 0.5) + G.clickmm(cx - W * 0.10, cy) + G.clickmm(cx + W * 0.10, cy) + G.values(L, 0) + e = ents("line")[0] + G.key("Escape", 0.5) + return e + + +def tf_label(pivot, handle, at): + """Where the gizmo prints its value — the same formula render_tf_gizmo uses. + + label = handle + outward * 1.2 * max(15 px, 1e-4), outward = the pivot -> handle direction. + Recomputing it here rather than hunting for it in pixels is what keeps this a click on a + control and not a search: if the formula ever moves, this rung fails loudly instead of + clicking somewhere harmless. + """ + th = max(15.0 * G.mm_per_px(*at), 1e-4) + d = (handle[0] - pivot[0], handle[1] - pivot[1]) + n = math.hypot(*d) or 1.0 + return (handle[0] + d[0] / n * th * 1.2, handle[1] + d[1] / n * th * 1.2) + + +def rung_transforms(): + """O6 — Move, Rotate, Scale, Array and Polar array: five verbs, none with a shortcut. + + Each is a gizmo, so the whole gesture is menu -> pick -> click the value label -> type -> + click empty to apply, with no keyboard route anywhere in it. The assertions are the exact + ones the operation promises: a translation moves every point by the typed amount and nothing + else, a rotation turns the direction by the typed angle and leaves the length alone, a scale + multiplies the length and leaves the direction alone. + """ + print("\nO6 the 2D transforms — gizmo verbs, none of them on the keyboard") + fresh_sketch("p") + G.key("Escape", 0.5) + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + W, H = (x1 - x0), (y1 - y0) + free = (cx, y1 - H * 0.10) + away = (x0 + W * 0.03, y0 + H * 0.03) # empty plane: the click that applies a gizmo + L = 40.0 + half = L / 2.0 + step = max(half * 1.5, 1.0) + + def pivot_of(e): + return ((e["p0"][0] + e["p1"][0]) / 2.0, (e["p0"][1] + e["p1"][1]) / 2.0) + + def direction(e): + return math.degrees(math.atan2(e["p1"][1] - e["p0"][1], e["p1"][0] - e["p0"][0])) + + # --- Move: 25 mm along +X, and nothing else changes -------------------------------------- + clear_sketch() + before = tf_fixture(cx, cy, W, L) + # The transforms are offered for a SELECTION, not for empty space — so the right-click that + # opens the menu happens ON the line, which is also what selects it. Then one more click + # picks it as the gizmo's target: choosing the verb sets the mode, it does not carry a pick. + arm("sk_move", *pivot_of(before)) + G.clickmm(*pivot_of(before)) # pick the line + piv = pivot_of(before) + G.clickmm(*tf_label(piv, (piv[0] + step, piv[1]), (cx, cy))) + G.value(25) + G.clickmm(*away) # empty click applies + after = ents("line") + G.check("VERTEX", len(after) == 1, f"sk_move: {len(after)} line after the transform") + if len(after) == 1: + dx = [after[0]["p0"][0] - before["p0"][0], after[0]["p1"][0] - before["p1"][0]] + dy = [after[0]["p0"][1] - before["p0"][1], after[0]["p1"][1] - before["p1"][1]] + G.check("LENGTH", all(abs(v - 25.0) < 1e-9 for v in dx) and all(abs(v) < 1e-9 for v in dy), + f"every point moved by exactly +25.000000000 in X and 0 in Y: dx={dx} dy={dy}") + + # --- Rotate: 30 degrees about the centroid, length untouched ------------------------------ + clear_sketch() + before = tf_fixture(cx, cy, W, L) + # The transforms are offered for a SELECTION, not for empty space — so the right-click that + # opens the menu happens ON the line, which is also what selects it. Then one more click + # picks it as the gizmo's target: choosing the verb sets the mode, it does not carry a pick. + arm("sk_rotate", *pivot_of(before)) + G.clickmm(*pivot_of(before)) + piv = pivot_of(before) + h = (piv[0] + half * math.cos(math.pi / 4), piv[1] + half * math.sin(math.pi / 4)) + G.clickmm(*tf_label(piv, h, (cx, cy))) + G.value(30) + G.clickmm(*away) + after = ents("line") + G.check("VERTEX", len(after) == 1, f"sk_rotate: {len(after)} line") + if len(after) == 1: + turned = (direction(after[0]) - direction(before)) % 360.0 + G.check("ANGLE", min(abs(turned - 30.0), abs(turned - 210.0)) < 1e-9, + f"turned by exactly {turned:.9f} deg") + G.check("LENGTH", abs(after[0]["length"] - before["length"]) < 1e-9, + f"and its length is untouched: {after[0]['length']:.9f}") + + # --- Scale: x3 about the centroid, direction untouched ------------------------------------ + clear_sketch() + before = tf_fixture(cx, cy, W, L) + # The transforms are offered for a SELECTION, not for empty space — so the right-click that + # opens the menu happens ON the line, which is also what selects it. Then one more click + # picks it as the gizmo's target: choosing the verb sets the mode, it does not carry a pick. + arm("sk_scale", *pivot_of(before)) + G.clickmm(*pivot_of(before)) + piv = pivot_of(before) + G.clickmm(*tf_label(piv, (piv[0] + 2.0 * half, piv[1]), (cx, cy))) + G.value(3) + G.clickmm(*away) + after = ents("line") + G.check("VERTEX", len(after) == 1, f"sk_scale: {len(after)} line") + if len(after) == 1: + G.check("LENGTH", abs(after[0]["length"] - 3.0 * before["length"]) < 1e-9, + f"length {before['length']:.9f} -> {after[0]['length']:.9f}, exactly x3") + G.check("ANGLE", abs(direction(after[0]) - direction(before)) < 1e-9, + "and its direction is untouched to 1e-9") + + # --- Linear array: 4 copies at an exact pitch --------------------------------------------- + clear_sketch() + before = tf_fixture(cx, cy, W, L) + # The transforms are offered for a SELECTION, not for empty space — so the right-click that + # opens the menu happens ON the line, which is also what selects it. Then one more click + # picks it as the gizmo's target: choosing the verb sets the mode, it does not carry a pick. + arm("sk_array", *pivot_of(before)) + G.clickmm(*pivot_of(before)) + piv = pivot_of(before) + # A single LINE target seeds the spacing PERPENDICULAR to it, which for a horizontal line + # is +Y. That is the tool's own rule, not an assumption: see tf_pick's Array branch. + G.clickmm(*tf_label(piv, (piv[0], piv[1] + step), (cx, cy))) + G.value(20) + th = max(15.0 * G.mm_per_px(cx, cy), 1e-4) + G.clickmm(piv[0] + th * 1.5, piv[1] + th * 1.5) # the "xN" count label + G.value(4) + G.clickmm(*away) + rows = sorted(ents("line"), key=lambda e: e["p0"][1]) + G.check("VERTEX", len(rows) == 4, f"sk_array: {len(rows)} lines (1 original + 3 copies)") + if len(rows) == 4: + pitch = [round(rows[i + 1]["p0"][1] - rows[i]["p0"][1], 9) for i in range(3)] + G.check("LENGTH", pitch == [20.0, 20.0, 20.0], f"pitch exactly {pitch} mm") + G.check("LENGTH", spread([round(e["length"], 9) for e in rows]) == 0.0, + "and every copy is the same length to 1e-9") + + # --- Polar array: 6 copies, 60 degrees apart, sharing one centre -------------------------- + clear_sketch() + before = tf_fixture(cx, cy, W, L) + # The transforms are offered for a SELECTION, not for empty space — so the right-click that + # opens the menu happens ON the line, which is also what selects it. Then one more click + # picks it as the gizmo's target: choosing the verb sets the mode, it does not carry a pick. + arm("sk_array_polar", *pivot_of(before)) + G.clickmm(*pivot_of(before)) + piv = pivot_of(before) + G.clickmm(*tf_label(piv, (piv[0] + half, piv[1]), (cx, cy))) + G.value(360) + th = max(15.0 * G.mm_per_px(cx, cy), 1e-4) + G.clickmm(piv[0] + th * 1.5, piv[1] + th * 1.5) + G.value(6) + G.clickmm(*away) + spokes = ents("line") + G.check("VERTEX", len(spokes) == 6, f"sk_array_polar: {len(spokes)} lines") + if len(spokes) == 6: + mids = [((e["p0"][0] + e["p1"][0]) / 2.0, (e["p0"][1] + e["p1"][1]) / 2.0) for e in spokes] + G.check("VERTEX", max(dist(m, mids[0]) for m in mids) < 1e-9, + "all six share one centre to 1e-9 — rotated about the pivot, not scattered") + # mod 360, not 180. A line carries an orientation, and folding the six directions into a + # half-turn collapses opposite spokes onto each other: a perfectly even star then reads + # as gaps of [0, 60, 0, 60, 0] and the rung fails on its own arithmetic. + angs = sorted(direction(e) % 360.0 for e in spokes) + gaps = [round(angs[(i + 1) % 6] - angs[i], 9) % 360.0 for i in range(6)] + G.check("ANGLE", all(abs(g - 60.0) < 1e-9 for g in gaps), + f"and they are 60 deg apart all the way round: {gaps}") + G.leave_sketch() + G.reset_document() + + +def rung_art(): + """O7 — Text and SVG: the last two 2D verbs, and the only two that open a dialog. + + Both are keyless, so the offer is their only door; both also leave the canvas for a modal + window, which is why nothing that drives the canvas had ever reached them. The properties + graded are the ones that survive a change of font or of importer scale: how many CLOSED loops + came back, and the exact aspect ratio of a shape whose proportions are known. + """ + print("\nO7 Text and SVG — the two verbs that go through a dialog") + fresh_sketch("p") + G.key("Escape", 0.5) + x0, x1, y0, y1 = G._SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + H = y1 - y0 + free = (cx, y1 - H * 0.10) + + # --- Text --------------------------------------------------------------------------------- + clear_sketch() + o = open_offer(*free) + G.check("OFFER", "sk_text" in o.verbs, "sk_text is offered on an empty sketch") + choose(o, "sk_text") + time.sleep(1.5) + names = G.sh(f"DISPLAY={G.DISP} xdotool search --name '.' getwindowname %@").split("\n") + G.check("OFFER", any(n.strip() == "Text" for n in names), + "choosing it opens the Text dialog") + G.typ("LT", 0.4) + G.key("Return", 2.5) + lp = G.loops() + G.check("CLOSED", len(lp) == 2 and all(l["closed"] for l in lp), + f"two letters came back as {len(lp)} closed loops") + G.check("VERTEX", all(abs(l["area"]) > 1.0 for l in lp), + f"both enclose real area: {[round(abs(l['area']), 3) for l in lp]}") + + # --- SVG ---------------------------------------------------------------------------------- + # A file whose proportions are known EXACTLY, so the assertion does not depend on what the + # importer decides a user unit is: a 40 x 20 path is 2:1 at any scale. + # FILLED, not stroked. A stroked path imports as its stroke OUTLINE — two loops, an outer and + # an inner, each inflated by half the stroke width — so the shape that comes back is 8 lines + # at 1.952 : 1 and the assertion would be grading the pen, not the importer. + svg = "/tmp/offer-ladder-2to1.svg" + G.sh("cat > %s <<'EOF'\n" + "\nEOF" % svg) + clear_sketch() + o = open_offer(*free) + G.check("OFFER", "sk_svg" in o.verbs, "sk_svg is offered too") + choose(o, "sk_svg") + time.sleep(2.0) + G.key("ctrl+l", 0.6) # GTK's own "type a path" entry: never guess at the file list + G.typ(svg, 0.5) + G.key("Return", 3.0) + ls = ents("line") + lp = G.loops() + G.check("CLOSED", len(lp) == 1 and len(ls) == 4, + f"the imported path is {len(ls)} lines and {len(lp)} closed loop") + if ls: + xs = [p for e in ls for p in (e["p0"][0], e["p1"][0])] + ys = [p for e in ls for p in (e["p0"][1], e["p1"][1])] + w, h = max(xs) - min(xs), max(ys) - min(ys) + # 1e-6, not 1e-9, and the reason is measured rather than tuned away: the imported box is + # 10.583333000 x 5.291667000 where 40 and 20 user units at 25.4/96 are 10.58333333... and + # 5.29166666..., so the SVG path coordinates arrive ROUNDED TO SIX DECIMAL PLACES (both + # numbers are exactly 6 dp, one rounded down and one up — which is also why the ratio is + # 1.999999811 rather than 2). Everything the sketcher itself draws is exact to 1e-9; this + # 1e-6 belongs to the import path alone, and it is the band the assertion allows. + G.check("LENGTH", abs(w / h - 2.0) < 1e-6, + f"and its proportions survived the import: {w:.9f} x {h:.9f} = {w / h:.9f} : 1 " + f"(the import rounds coordinates to 1e-6 mm)") + G.leave_sketch() + G.reset_document() + + +# Every 2D verb this ladder drives from the menu, by id. Kept as data so the coverage claim can +# be CHECKED rather than asserted in prose: rung_coverage compares it against the offer table and +# fails the moment a keyless sketch verb exists that nothing here exercises. +DRIVEN = { + "sk_rect_center", # O4 + "sk_polyline", "sk_rect_oblique", "sk_rect_rounded", # O5 + "sk_circle_2pt", "sk_circle_3pt", "sk_arc_center", "sk_arc_tangent", + "sk_slot_arc", "sk_ellipse_arc", + "sk_poly_3", "sk_poly_4", "sk_poly_5", "sk_poly_8", "sk_poly_12", + "sk_poly_inscribed", "sk_poly_circumscribed", + "sk_move", "sk_rotate", "sk_scale", "sk_array", "sk_array_polar", # O6 + "sk_text", "sk_svg", # O7 +} + + +def rung_coverage(): + """O8 — the coverage claim, checked against the table instead of written in a comment. + + "Every 2D verb with no keyboard route is exercised" is the whole point of the rungs above, and + a claim like that rots the day someone adds a verb. Here it is arithmetic: the set of keyless + sketch verbs in DesignOffer.hpp, minus the set this file drives, must be empty. + """ + print("\nO8 coverage — every keyless 2D verb, checked against the table") + sk = [v for v in TABLE if v["sketch_mode"]] + keyless = {v["id"] for v in sk if v["action"] and not v["key"]} + keyed = {v["id"] for v in sk if v["key"]} + dead = {v["id"] for v in sk if not v["action"]} + missing = keyless - DRIVEN + G.check("OFFER", not missing, + f"all {len(keyless)} keyless 2D verbs are driven from the menu" + + ("" if not missing else f" — MISSING: {sorted(missing)}")) + G.check("OFFER", not (DRIVEN - keyless - keyed), + f"and nothing is driven that is not in the table: {sorted(DRIVEN - keyless - keyed)}") + G.check("OFFER", not dead, + f"no 2D verb is a dead row: {len(sk)} sketch verbs, {len(keyed)} with a shortcut, " + f"{len(keyless)} without, {len(dead)} with no GUI route at all") + + +RUNGS = {"kinds": rung_kinds, "vocabulary": rung_vocabulary, + "author": rung_author, "no_shortcut": rung_no_shortcut, + "curves": rung_curves, "transforms": rung_transforms, + "art": rung_art, "coverage": rung_coverage} + + +def main(): + if not os.path.exists(LOG): + G.die(f"no {LOG} — launch the app through scripts/CAD/start-headless-gui.sh") + if "[OFFER]" not in open(LOG, errors="replace").read()[-400000:]: + print(f"note: no [OFFER] lines in {LOG} yet — the app must run with ORCA_CAD_KEYTRACE=1") + want = sys.argv[1:] or list(RUNGS) + # TWICE. From a cold launch the app shows the Home page over the Design tab, and the first + # click only selects the tab — the second is what brings the viewport forward. A ladder that + # clicked once drew its whole first rung into a webview. + G.go_design(); G.go_design() + G.key("Escape", 0.4) + G.reset_document() + for name in want: + if name not in RUNGS: + G.die(f"unknown rung {name}; have {' '.join(RUNGS)}") + RUNGS[name]() + print(f"\n{G._checks - G._fail}/{G._checks} properties held") + sys.exit(1 if G._fail else 0) + + +if __name__ == "__main__": + main() diff --git a/scripts/CAD/check-gui-sketching.py b/scripts/CAD/check-gui-sketching.py new file mode 100644 index 0000000000..d4ebd1f1ca --- /dev/null +++ b/scripts/CAD/check-gui-sketching.py @@ -0,0 +1,2024 @@ +#!/usr/bin/env python3 +"""A ladder of sketches drawn the way a person draws them: mouse gestures and typed values. + +WHY THIS EXISTS, next to scripts/CAD/check-sketch-engine.py. That ladder proves the ENGINE — it feeds +geometry through the MCP socket's add_entities_scripted and grades what comes back. The socket +path skips everything the goal actually rests on: gesture state, the auto-edit queue, snapping, +inference at gesture tolerance, and the right-click offer. A ladder that only drives the socket +cannot say the Design tab meets its goal. This one draws with synthetic clicks and types the +values into the in-canvas field, then reads the result back through the socket, which is used +here ONLY as an instrument, never as an author. + +Runs INSIDE the headless rig container (Xvfb :10 + openbox + the app with ORCA_CAD_MCP set): + + docker cp scripts/CAD/check-gui-sketching.py orcacad-gui:/tmp/ && \ + docker exec orcacad-gui python3 /tmp/check-gui-sketching.py [rung ...] + +With no arguments every rung runs. Exit 0 = every property held. +""" +import json, math, os, re, socket, subprocess, sys, time + +SOCK = os.environ.get("ORCA_CAD_MCP", "/tmp/mcp.sock") +DISP = os.environ.get("DISPLAY", ":10") +_n = 0 +_fail = 0 +_checks = 0 + +# ---------------------------------------------------------------- the instrument (read-only) + +def call(method, **params): + global _n + _n += 1 + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(SOCK) + s.sendall((json.dumps({"jsonrpc": "2.0", "id": _n, "method": method, + "params": params}) + "\n").encode()) + buf = b"" + while b"\n" not in buf: + d = s.recv(65536) + if not d: + break + buf += d + r = json.loads(buf.decode().strip()) + if "error" in r: + raise RuntimeError(f"{method}: {r['error']['message']}") + return r["result"] + + +def try_call(method, **params): + try: + return call(method, **params) + except Exception: + return None + + +def describe(): + return call("sketch_describe") + + +# ---------------------------------------------------------------- the hand (synthetic input) + +_win = None + +def win(): + """The app window's id and origin. Asked fresh once per run: a relaunch changes the id.""" + global _win + # BY SIZE, never by title. Saving a project renames the window to the file, and a driver + # that hunts for "Untitled" then reports "no app window" for an app that is running fine — + # which is a false negative in the one place a false negative is most expensive. + if _win is None: + best = None + # --class, not --name: after a project is opened the main window can come back with no + # WM_NAME at all, and a name search then does not list it — the driver picks a 200x200 + # helper and every click lands on nothing. + for w in sh(f"DISPLAY={DISP} xdotool search --class '.'").split(): + g = sh(f"DISPLAY={DISP} xdotool getwindowgeometry --shell {w}") + d = dict(l.split("=", 1) for l in g.strip().splitlines() if "=" in l) + if "WIDTH" not in d: + continue + a = int(d["WIDTH"]) * int(d["HEIGHT"]) + if best is None or a > best[0]: + best = (a, w, int(d["X"]), int(d["Y"]), int(d["WIDTH"]), int(d["HEIGHT"])) + if best is None: + die("no app window on " + DISP) + sh(f"DISPLAY={DISP} xdotool windowactivate --sync {best[1]}") + _win = best[1:] + return _win + + +def sh(cmd): + return subprocess.run(["bash", "-lc", cmd], capture_output=True, text=True).stdout + + +def xdo(args): + sh(f"DISPLAY={DISP} xdotool {args}") + + +def key(k, pause=0.35): + xdo(f"key {k}") + time.sleep(pause) + + +def typ(s, pause=0.35): + xdo(f"type --delay 40 -- '{s}'") + time.sleep(pause) + + +def click(px, py, pause=0.45, btn=1): + _, X, Y, _, _ = win() + xdo(f"mousemove {X+int(px)} {Y+int(py)} click --delay 120 {btn}") + time.sleep(pause) + + +def click_ctrl(px, py, pause=0.45): + """Ctrl+click: EXTEND the sketch selection instead of replacing it. + + A plain second click clears the first pick (DesignSketchTool's Select branch only keeps + one entity unless `extend` is set), so a two-entity constraint driven by two plain clicks + silently arrives with one pick and is rejected for the wrong reason. + """ + _, X, Y, _, _ = win() + xdo(f"keydown ctrl mousemove {X+int(px)} {Y+int(py)} click --delay 120 1 keyup ctrl") + time.sleep(pause) + + +def move(px, py, pause=0.2): + _, X, Y, _, _ = win() + xdo(f"mousemove {X+int(px)} {Y+int(py)}") + time.sleep(pause) + + +def shot(path): + w, X, Y, W, H = win() + sh(f"DISPLAY={DISP} import -window root -crop {W}x{H}+{X}+{Y} +repage {path}") + + +# ---------------------------------------------------------------- pixels <-> plane + +# The viewport is a perspective camera looking at the sketch plane, so pixel -> plane is a +# HOMOGRAPHY, not a scale: the same pixel span covers more millimetres at the far edge than at +# the near one. Four measured correspondences determine it exactly. Measuring beats assuming — +# the camera can be anywhere, and a wrong constant silently puts every click somewhere else. +_H = None # plane -> pixel, row-major 3x3 +_SAFE = None # (xmin, xmax, ymin, ymax) of the plane region the probes covered + + +def _solve(A, b): + """Tiny dense solve; no numpy in the rig container.""" + n = len(A) + M = [row[:] + [b[i]] for i, row in enumerate(A)] + for c in range(n): + p = max(range(c, n), key=lambda r: abs(M[r][c])) + if abs(M[p][c]) < 1e-12: + die("calibration is degenerate — the four probe points are not in general position") + M[c], M[p] = M[p], M[c] + for r in range(n): + if r == c: + continue + f = M[r][c] / M[c][c] + for k in range(c, n + 1): + M[r][k] -= f * M[c][k] + return [M[i][n] / M[i][i] for i in range(n)] + + +def fit_homography(pairs): + """pairs: [((X_mm, Y_mm), (u_px, v_px)), ...] -> 3x3 plane->pixel with h22 = 1.""" + A, b = [], [] + for (X, Y), (u, v) in pairs: + A.append([X, Y, 1, 0, 0, 0, -u * X, -u * Y]); b.append(u) + A.append([0, 0, 0, X, Y, 1, -v * X, -v * Y]); b.append(v) + h = _solve(A, b) + return [h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7], 1.0] + + +def px(X, Y): + """Plane millimetres -> window pixels.""" + h = _H + w = h[6] * X + h[7] * Y + h[8] + return ((h[0] * X + h[1] * Y + h[2]) / w, (h[3] * X + h[4] * Y + h[5]) / w) + + +def unpx(u, v): + """Window pixels -> plane millimetres (the homography inverted, by hand).""" + h = _H + A = [[h[0] - u * h[6], h[1] - u * h[7]], [h[3] - v * h[6], h[4] - v * h[7]]] + b = [u * h[8] - h[2], v * h[8] - h[5]] + return tuple(_solve(A, b)) + + +def mm_per_px(X, Y): + """The viewport's local scale at a plane point — what the tool calls unit_per_px.""" + u, v = px(X, Y) + a = unpx(u, v) + b = unpx(u + 1.0, v) + return math.dist(a, b) + + +def clickmm(X, Y, pause=0.45, btn=1): + u, v = px(X, Y) + click(u, v, pause, btn) + + +def movemm(X, Y, pause=0.2): + u, v = px(X, Y) + move(u, v, pause) + + +# ---------------------------------------------------------------- session control + +def leave_sketch(): + """Back to a clean Feature-mode document, whatever state the last rung left behind.""" + try_call("sketch_cancel") + for _ in range(4): + key("Escape", 0.25) + time.sleep(0.5) + + +# EVERY absolute chrome coordinate below is written in the Snapmaker fork's layout and then +# shifted by CHROME_DY, because this fork keeps mainline OrcaSlicer's top row (File / save / +# undo / redo / Calibration, with the document title) which that fork does not have. The whole +# chrome — tab strip, sketch toolbar, confirm button — sits 26 px lower here. +# +# Getting this wrong does not look like a coordinate problem. At the unshifted y the Design tab +# click landed in that toolbar, the app stayed on the Home page, and the first rung reported +# "no sketch opened after plane click + Shift+S"; the unshifted Construction checkbox reported +# "0 construction axis". Both name the wrong subsystem. Canvas coordinates are immune because +# clickmm() derives them from the live canvas geometry — only the chrome constants need this. +CHROME_DY = int(os.environ.get("ORCA_CAD_CHROME_DY", "26")) + +DESIGN_TAB = (128, 29 + CHROME_DY) + +# Feature-tree rows, measured on the rig at 1920x1080: first row centre, then 23 px apart. +# x=300, not the label: a second click ON the label opens the inline rename, and Delete then +# edits the text instead of removing the feature. +# +# CHROME_DY applies here too, and this was the one chrome constant that did not carry it. The +# unshifted click lands 26 px BELOW the first row -- just past its 23 px height -- so the row is +# never selected, Delete does nothing, and reset_document spends 40 rounds on it before dying +# with "could not empty the feature tree". That names the feature tree, which is not the fault. +TREE_ROW0 = (300, 215 + CHROME_DY) + + +def go_design(): + """Make sure the Design tab is in front — loading a project lands on Prepare.""" + click(*DESIGN_TAB, pause=1.0) + + +def reset_document(): + """Delete every committed feature, by picking its tree row and pressing Delete. + + A rung that ends in Constrain COMMITS its sketch, and the next rung's Constrain resolves + 'the last sketch' — which is then the PREVIOUS rung's. That is how D2 first read a rectangle + of exactly 120 x 80 back from a sketch it had drawn at 120.020087: it was grading a sketch + left behind by an earlier run. The document is part of the fixture; reset it like one. + """ + go_design() + leave_sketch() + for _ in range(40): + if not call("describe_scene")["features"]: + return + click(*TREE_ROW0, pause=0.35) + key("Delete", 0.5) + die("could not empty the feature tree") + + +def enter_sketch(tool_key, plane_px=(913, 359)): + """Enter a sketch the way the design law says: pick the plane in the viewport, then the tool. + + Shift+S enters sketch MODE and pops the offer; Escape dismisses it; the tool letter then + starts the session on the plane the click selected. All four steps are real input — nothing + here goes through the socket. + """ + leave_sketch() + click(*plane_px) + key("shift+s", 0.8) + key("Escape", 0.4) # entering sketch mode pops the offer; dismiss it + key("p", 0.6) + if try_call("sketch_describe") is None: + shot("/shots/gl-enter-failed.png") + die("no sketch opened after plane click + Shift+S (see /shots/gl-enter-failed.png)") + calibrate_here() # THIS sketch's own camera map, on THIS sketch's own plane + key(tool_key, 0.6) + + +def calibrate_here(): + """Place four Points in the sketch that is already open, solve the map, then undo them. + + PER SKETCH, not once per run. The camera is wherever the previous rung left it — reopening a + sketch and loading a project both move it — and the plane label the entry click lands on + moves with it, so a later sketch can end up on XZ while the map was solved on XY. Both of + those turn into clicks that land somewhere else, and geometry that looks drawn but is not + where it was asked for. Four points cost about four seconds and remove the whole class. + """ + global _H + probes = [(1000, 500), (1400, 500), (1400, 760), (1000, 760)] + for u, v in probes: + click(u, v) + ents = describe()["entities"] + if len(ents) != 4 or any(e["type"] != "point" for e in ents): + die(f"calibration expected 4 points, got {[e['type'] for e in ents]}") + _H = fit_homography([((e["p"][0], e["p"][1]), probes[i]) for i, e in enumerate(ents)]) + # Prove the fit by round-tripping the probes: a homography through its own four points is + # exact, so anything but a sub-pixel residual means the points came back mismatched. + for i, e in enumerate(ents): + u, v = px(e["p"][0], e["p"][1]) + if abs(u - probes[i][0]) > 0.5 or abs(v - probes[i][1]) > 0.5: + die(f"calibration residual too large at probe {i}: {(u, v)} vs {probes[i]}") + global _SAFE + xs = [e["p"][0] for e in ents]; ys = [e["p"][1] for e in ents] + _SAFE = (min(xs), max(xs), min(ys), max(ys)) + for _ in range(len(probes)): + key("ctrl+z", 0.5) # the probes are scaffolding, not geometry + left = describe()["entities"] + if left: + die(f"{len(left)} calibration probes survived the undo") + + +# ---------------------------------------------------------------- typed values + +# How long to wait for the in-canvas field to appear and to settle after a commit. The queue +# opens each field from a CallAfter that runs AFTER a re-solve, so on a heavy sketch the field is +# simply not there yet when a fast driver starts typing — the digits go nowhere and the value +# stays as drawn. Rungs that work on a thousand entities raise this. +PACE = 1.0 + + +def field_open(): + """Is a sketch value field open? Asked of the APP, not of the window list. + + It used to be answered by hunting for a small top-level window, because the field WAS one. + It is not any more — it is drawn by ImGui inside the GL canvas precisely so that no window + manager gets a vote on whether it may hold the keyboard. Enumerating windows now always + answers "no field", which turns every check built on it into one that cannot fail. + + sketch_describe's `editing` is DesignSketchTool::value_field_open(), i.e. the app's own + answer to the same question. + """ + d = try_call("sketch_describe") + return bool(d and d.get("editing")) + + +def focus_field(): + """Deliberately nothing. + + This used to click into the value field before typing, and its old docstring explained why: + "WITHOUT THIS THE TYPED VALUE IS SILENTLY DISCARDED ... the window manager does not give it + the keyboard, so xdotool's digits go to the canvas". That was a workaround for the field + being a separate top-level window, and it is also what made this ladder blind to the very + defect the user reported — a suite that clicks the field first can never see that typing + without clicking is broken. + + The field is now inside the canvas and the canvas has the keyboard, so typing just works and + there is nothing to click. Kept as a no-op so the call sites still read in order. + """ + return True + + +def value(v, pause=0.6): + """Type one number into the open in-canvas field and commit it. + + Select-all first: the field opens pre-filled with the as-drawn value and pre-selected, but a + pre-selection that a synthetic click has disturbed would otherwise leave the typed digits + appended to it. + """ + time.sleep(0.25 * PACE) + focus_field() + key("ctrl+a", 0.15) + typ(str(v), 0.25) + key("Return", pause * PACE) + + +def values(*vs): + for v in vs: + value(v) + + +# ---------------------------------------------------------------- grading + +def say(msg): + print(f" {msg}") + + +def check(kind, cond, what): + global _fail, _checks + _checks += 1 + if cond: + print(f" {kind:9s} ok {what}") + else: + print(f" {kind:9s} FAIL {what}", file=sys.stderr) + _fail += 1 + + +def near(a, b, tol=1e-6): + return abs(a - b) <= tol + + +def die(msg): + print(f" FATAL {msg}", file=sys.stderr) + sys.exit(2) + + +def lengths(ents): + return sorted(round(e["length"], 6) for e in ents if e["type"] == "line") + + +def loops(): + return describe()["closed_loops"] + + +# =================================================================== LADDER A — one tool each +# Every 2D tool draws its primitive by gesture, then takes its exact value from the keyboard. +# The click only has to be roughly right; the typed number is what must come back exactly. + +def rung_rect(): + print("\nA1 rectangle — two corners, typed 120 x 80") + enter_sketch("r") + clickmm(-60, -40); clickmm(60, 40) + values(120, 80) + d = describe() + ls = lengths(d["entities"]) + check("LENGTH", ls == [80.0, 80.0, 120.0, 120.0], f"sides {ls}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + check("AREA", near(abs(lp[0]["area"]), 9600.0, 1e-6), f"area {abs(lp[0]['area']):.6f}") + check("VERTEX", all(near(abs(e["p1"][0] - e["p0"][0]), 0, 1e-9) + or near(abs(e["p1"][1] - e["p0"][1]), 0, 1e-9) + for e in d["entities"]), "every side axis-aligned") + leave_sketch() + + +def rung_circle(): + print("\nA2 circle — centre then rim, typed radius 25") + enter_sketch("c") + clickmm(0, 0); clickmm(30, 0) + values(25) + d = describe() + e = [x for x in d["entities"] if x["type"] == "circle"] + check("ARC", len(e) == 1 and near(e[0]["radius"], 25.0), f"radius {e[0]['radius'] if e else None}") + check("VERTEX", len(e) == 1 and near(e[0]["center"][0], 0.0, 0.6) and near(e[0]["center"][1], 0.0, 0.6), + f"centre {e[0]['center'] if e else None} at the clicked origin") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), math.pi * 625.0, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs pi r^2 {math.pi*625:.6f}") + leave_sketch() + + +def rung_line(): + print("\nA3 line — two clicks, typed length 50 and angle 30") + enter_sketch("l") + clickmm(-40, -20); clickmm(10, 5) + values(50, 30) + d = describe() + e = [x for x in d["entities"] if x["type"] == "line"] + check("LENGTH", len(e) == 1 and near(e[0]["length"], 50.0), f"length {e[0]['length'] if e else None}") + if e: + a = math.degrees(math.atan2(e[0]["p1"][1] - e[0]["p0"][1], e[0]["p1"][0] - e[0]["p0"][0])) % 360.0 + check("ANGLE", near(a, 30.0, 1e-9), f"angle {a:.9f} deg") + leave_sketch() + + +def rung_arc(): + print("\nA4 three-point arc — typed radius 40 and sweep 90") + enter_sketch("a") + clickmm(-40, 0); clickmm(40, 0); clickmm(0, 40) + values(40, 90) + d = describe() + e = [x for x in d["entities"] if x["type"] == "arc"] + check("ARC", len(e) == 1 and near(e[0]["radius"], 40.0), f"radius {e[0]['radius'] if e else None}") + if e: + sw = abs(e[0]["end_angle"] - e[0]["start_angle"]) * 180.0 / math.pi + # 1e-7 deg, not exact: the sweep is READ BACK as end_angle - start_angle, two atan2 + # results, where the line's angle is STORED as the direction it was given. A 1e-9 deg + # residual here is 7e-10 mm at r=40 — float round-trip, not a defect. + check("ANGLE", near(sw, 90.0, 1e-7), f"sweep {sw:.9f} deg") + ch = math.dist(e[0]["p0"], e[0]["p1"]) + check("VERTEX", near(ch, 40.0 * math.sqrt(2.0), 1e-6), + f"chord {ch:.6f} vs r*sqrt2 {40*math.sqrt(2):.6f}") + leave_sketch() + + +def rung_slot(): + print("\nA5 slot — typed centre distance 60, radius 10, angle 0") + enter_sketch("s") + clickmm(-30, 0); clickmm(30, 0); clickmm(30, 12) + values(60, 10, 0) + d = describe() + arcs = [x for x in d["entities"] if x["type"] == "arc"] + lns = [x for x in d["entities"] if x["type"] == "line"] + check("ARC", len(arcs) == 2 and all(near(a["radius"], 10.0) for a in arcs), + f"two end radii {[round(a['radius'], 9) for a in arcs]}") + check("LENGTH", len(lns) == 2 and all(near(l["length"], 60.0) for l in lns), + f"two flanks {[round(l['length'], 9) for l in lns]}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), 60 * 20 + math.pi * 100, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs 60*20+pi*100 {60*20+math.pi*100:.6f}") + leave_sketch() + + +def rung_polygon(): + print("\nA6 polygon — typed side 30, angle 0") + enter_sketch("g") + clickmm(0, 0); clickmm(35, 0) + values(30, 0) + d = describe() + e = [x for x in d["entities"] if x["type"] == "line"] + ls = lengths(d["entities"]) + check("LENGTH", len(e) >= 3 and all(near(l, 30.0, 1e-9) for l in ls), + f"{len(e)} equal sides {set(ls)}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + if e: + n = len(e) + want = n * 30.0 ** 2 / (4.0 * math.tan(math.pi / n)) + check("AREA", near(abs(lp[0]["area"]), want, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs regular {n}-gon {want:.6f}") + leave_sketch() + + +def rung_ellipse(): + print("\nA7 ellipse — typed major 50, minor 20") + enter_sketch("e") + clickmm(0, 0); clickmm(40, 0); clickmm(0, 15) + values(50, 20) + d = describe() + e = [x for x in d["entities"] if x["type"] == "ellipse"] + check("ARC", len(e) == 1, f"{len(e)} ellipse") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), math.pi * 50 * 20, 2e-2), + f"area {abs(lp[0]['area']):.4f} vs pi*a*b {math.pi*1000:.4f}") + leave_sketch() + + +def rung_point(): + print("\nA8 point — one click, no value to type") + enter_sketch("p") + clickmm(20, 10) + d = describe() + e = [x for x in d["entities"] if x["type"] == "point"] + check("VERTEX", len(e) == 1 and near(e[0]["p"][0], 20.0, 0.6) and near(e[0]["p"][1], 10.0, 0.6), + f"placed at {[round(v, 3) for v in e[0]['p']] if e else None}") + leave_sketch() + + +def rung_spline(): + print("\nA9 spline — click control points, right-click to end") + enter_sketch("b") + for p in [(-40, 0), (-15, 30), (15, -30), (40, 0)]: + clickmm(*p) + clickmm(40, 0, btn=3) + d = describe() + e = [x for x in d["entities"] if x["type"] == "spline"] + check("VERTEX", len(e) == 1, f"{len(e)} spline from 4 control points") + leave_sketch() + + +# =================================================================== LADDER B — voids by hand +# The strategic target itself: one closed outer loop with internal voids, every one of them +# drawn by gesture in a single sketch and given its size from the keyboard. + +def rung_voids(): + print("\nB1 closed profile with two internal voids, all by gesture") + enter_sketch("r") + clickmm(-60, -40); clickmm(60, 40) # outer 120 x 80 + values(120, 80) + key("r", 0.6) # same tool again, from the keyboard + clickmm(-45, -15); clickmm(-5, 15) # void 1: 40 x 30 + values(40, 30) + key("c", 0.6) + clickmm(30, 0); clickmm(42, 0) # void 2: circle r 10 + values(10) + d = describe() + ls = lengths(d["entities"]) + check("LENGTH", ls == [30.0, 30.0, 40.0, 40.0, 80.0, 80.0, 120.0, 120.0], f"sides {ls}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 3 and all(l["closed"] for l in lp), f"{len(lp)} closed loops") + check("CLOSED", d["buildable"] and not d["open_ends"], "buildable, nothing dangling") + # The void attribution is the property under test: the outer loop must OWN both inner ones, + # and neither inner loop may claim a hole of its own. + outer = max(range(len(lp)), key=lambda i: abs(lp[i]["area"])) + holes = sorted(lp[outer]["holes"]) + check("VOID", holes == sorted(i for i in range(len(lp)) if i != outer), + f"outer loop {outer} owns holes {holes}") + check("VOID", all(not lp[i]["holes"] for i in range(len(lp)) if i != outer), + "neither void claims a hole of its own") + a = {i: abs(lp[i]["area"]) for i in range(len(lp))} + check("AREA", near(a[outer], 9600.0, 1e-6), f"outer {a[outer]:.6f}") + inner = sorted(a[i] for i in a if i != outer) + check("AREA", near(inner[0], math.pi * 100, 1e-6) and near(inner[1], 1200.0, 1e-6), + f"voids {inner[0]:.6f} (pi*100) and {inner[1]:.6f} (40*30)") + net = a[outer] - sum(v for i, v in a.items() if i != outer) + check("AREA", near(net, 9600.0 - 1200.0 - math.pi * 100, 1e-6), f"net material {net:.6f}") + leave_sketch() + + +# =================================================================== LADDER C — combining +# Mirror, offset, trim, extend, fillet and chamfer, each driven by the same picks and the same +# on-geometry value label a person would use. The label's place is COMPUTED from the geometry +# the tool itself derives (render_op_gizmo: tip = anchor + dir * value, label = tip + dir * 1.2 +# * max(15 * unit_per_px, 1e-4)) rather than hunted for in the pixels — the tool's own formula +# is the only thing that can be right by construction. + +def op_label_mm(anchor, direction, value, at): + th = max(15.0 * mm_per_px(*at), 1e-4) + d = (direction[0] / math.hypot(*direction), direction[1] / math.hypot(*direction)) + tip = (anchor[0] + d[0] * value, anchor[1] + d[1] * value) + return (tip[0] + d[0] * th * 1.2, tip[1] + d[1] * th * 1.2) + + +def mid(e): + return ((e["p0"][0] + e["p1"][0]) / 2.0, (e["p0"][1] + e["p1"][1]) / 2.0) + + +def corner_of(a, b): + """The shared endpoint of two adjacent lines, and the bisector pointing into their wedge.""" + C = min(((pa, pb) for pa in (a["p0"], a["p1"]) for pb in (b["p0"], b["p1"])), + key=lambda t: math.dist(t[0], t[1]))[0] + def away(e): + f = e["p1"] if math.dist(e["p0"], C) < math.dist(e["p1"], C) else e["p0"] + n = math.dist(f, C) + return ((f[0] - C[0]) / n, (f[1] - C[1]) / n) + ua, ub = away(a), away(b) + bis = (ua[0] + ub[0], ua[1] + ub[1]) + return tuple(C), bis + + +def draw_rect(w, h, x0, y0): + clickmm(x0, y0); clickmm(x0 + w, y0 + h) + values(w, h) + + +def rung_fillet(): + print("\nC1 fillet — pick two legs, type radius 8 on the label") + enter_sketch("r") + draw_rect(120, 80, -60, -40) + d0 = describe()["entities"] + a, b = corner_pair(d0) + key("f", 0.6) + clickmm(*mid(a)); clickmm(*mid(b)) + C, bis = corner_of(a, b) + v0 = 0.2 * min(a["length"], b["length"]) + clickmm(*op_label_mm(C, bis, v0, C)) + values(8) + d = describe() + arcs = [x for x in d["entities"] if x["type"] == "arc"] + check("ARC", len(arcs) == 1 and near(arcs[0]["radius"], 8.0), f"radius {arcs[0]['radius'] if arcs else None}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + want = 9600.0 - 64.0 * (1.0 - math.pi / 4.0) + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), want, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs 9600 - r^2(1-pi/4) {want:.6f}") + if arcs: + # TANGENT: the arc centre must sit exactly r from each surviving leg's line. + legs = [x for x in d["entities"] if x["type"] == "line"] + ds = sorted(point_line_dist(arcs[0]["center"], l) for l in legs)[:2] + check("TANGENT", all(near(x, 8.0, 1e-9) for x in ds), f"centre stands off both legs by {ds}") + leave_sketch() + + +def rung_chamfer(): + print("\nC2 chamfer — pick two legs, type distance 10 on the label") + enter_sketch("r") + draw_rect(120, 80, -60, -40) + d0 = describe()["entities"] + a, b = corner_pair(d0) + key("h", 0.6) + clickmm(*mid(a)); clickmm(*mid(b)) + C, bis = corner_of(a, b) + clickmm(*op_label_mm(C, bis, 0.2 * min(a["length"], b["length"]), C)) + values(10) + d = describe() + lp = d["closed_loops"] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + check("LENGTH", len(lp) == 1 and len(lp[0]["entities"]) == 5, + f"{len(lp[0]['entities'])} sides after the cut") + ls = sorted(e["length"] for e in d["entities"] if e["type"] == "line") + check("LENGTH", any(near(x, 10.0 * math.sqrt(2.0), 1e-9) for x in ls), + f"the new face is d*sqrt2 = {10*math.sqrt(2):.9f}; sides {[round(x,9) for x in ls]}") + check("LENGTH", near(ls[1], 70.0, 1e-9) and near(ls[3], 110.0, 1e-9), + "both legs shortened by exactly d") + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), 9600.0 - 50.0, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs 9600 - d^2/2") + leave_sketch() + + +def rung_offset(): + print("\nC3 offset — pick a circle, type 5 on the label") + enter_sketch("c") + clickmm(0, 0); clickmm(30, 0) + values(25) + key("o", 0.6) + clickmm(25, 0) # pick the rim + # Circle offset anchors at centre + (r, 0) and grows along +x; the starting value is 0.1 * 2r. + clickmm(*op_label_mm((25.0, 0.0), (1.0, 0.0), 0.1 * 50.0, (25.0, 0.0))) + values(5) + d = describe() + cs = sorted(x["radius"] for x in d["entities"] if x["type"] == "circle") + # The gizmo's arrow starts on the +x side, so the typed 5 lands OUTWARD; what the goal cares + # about is that the separation is exactly the number typed, on whichever side it was given. + check("ARC", len(cs) == 2 and near(cs[0], 25.0) and near(cs[1] - cs[0], 5.0), + f"radii {cs} — separated by exactly {cs[1]-cs[0] if len(cs)==2 else None}") + lp = d["closed_loops"] + check("CLOSED", len(lp) == 2 and all(l["closed"] for l in lp), f"{len(lp)} closed loops") + check("VOID", any(l["holes"] for l in lp), "the inner circle is read as a void of the outer") + leave_sketch() + + +def cross(a, b): + """Where two lines' infinite supports meet.""" + (x1, y1), (x2, y2) = a["p0"], a["p1"] + (x3, y3), (x4, y4) = b["p0"], b["p1"] + d = (x2 - x1) * (y4 - y3) - (y2 - y1) * (x4 - x3) + t = ((x3 - x1) * (y4 - y3) - (y3 - y1) * (x4 - x3)) / d + return (x1 + t * (x2 - x1), y1 + t * (y2 - y1)) + + +def mid_of(a, b): + return ((a[0] + b[0]) / 2.0, (a[1] + b[1]) / 2.0) + + +def point_line_dist(p, l): + (x0, y0), (x1, y1) = l["p0"], l["p1"] + dx, dy = x1 - x0, y1 - y0 + n = math.hypot(dx, dy) + return abs((p[0] - x0) * dy - (p[1] - y0) * dx) / n + + +def corner_pair(ents): + """Two adjacent lines of a rectangle: the first line and the one sharing an endpoint.""" + ls = [e for e in ents if e["type"] == "line"] + a = ls[0] + for b in ls[1:]: + if min(math.dist(pa, pb) for pa in (a["p0"], a["p1"]) for pb in (b["p0"], b["p1"])) < 1e-6: + return a, b + die("no adjacent pair in what should be a rectangle") + + +CONSTRUCTION_CHECKBOX = (419, 75 + CHROME_DY) + + +def draw_line(x0, y0, x1, y1, length, angle): + clickmm(x0, y0); clickmm(x1, y1) + values(length, angle) + + +def rung_mirror(): + print("\nC4 mirror — a half profile reflected about a construction axis") + enter_sketch("l") + click(*CONSTRUCTION_CHECKBOX) # the axis is reference, not material + key("l", 0.6) + draw_line(0, -40, 0, 40, 80, 90) # the axis, on x = 0 + click(*CONSTRUCTION_CHECKBOX) # back to real geometry + key("l", 0.6) + draw_line(0, -40, 50, -40, 50, 0) + key("l", 0.6) + draw_line(50, -40, 50, 40, 80, 90) + key("l", 0.6) + draw_line(50, 40, 0, 40, 50, 180) + d0 = describe()["entities"] + axis = [e for e in d0 if e.get("construction")] + check("VERTEX", len(axis) == 1, f"{len(axis)} construction axis") + half = [e for e in d0 if e["type"] == "line" and not e.get("construction")] + check("LENGTH", len(half) == 3, f"{len(half)} lines in the half profile") + key("m", 0.6) + clickmm(*mid(axis[0])) + for e in half: + clickmm(*mid(e)) + clickmm(-90, 60) # empty space confirms + d = describe() + real = [e for e in d["entities"] if e["type"] == "line" and not e.get("construction")] + check("LENGTH", len(real) == 6, f"{len(real)} lines after the reflection") + lp = [l for l in d["closed_loops"]] + check("CLOSED", len(lp) == 1 and lp[0]["closed"], f"{len(lp)} closed loop(s)") + # Graded against the geometry ACTUALLY DRAWN, not against the coordinates I aimed at. A + # synthetic click lands on a whole pixel, so the half profile sits a few tenths of a + # millimetre off the origin; the typed values fix its lengths and angles, not its anchor. + # Demanding 8000.000000 here would grade my aim, and the mirror is what is under test. + far = max(half, key=lambda e: e["length"]) # the edge parallel to the axis + w = point_line_dist(mid(far), axis[0]) + want = 2.0 * w * far["length"] + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), want, 1e-6), + f"area {abs(lp[0]['area']):.6f} vs 2 x {w:.6f} x {far['length']:.6f} = {want:.6f}") + # SYMMETRY is the property this rung exists for: every vertex must have its exact reflection + # ABOUT THE AXIS THAT WAS DRAWN. + vs = [tuple(p) for e in real for p in (e["p0"], e["p1"])] + def refl(q): + (ax, ay), (bx, by) = axis[0]["p0"], axis[0]["p1"] + dx, dy = bx - ax, by - ay + n = dx * dx + dy * dy + t = ((q[0] - ax) * dx + (q[1] - ay) * dy) / n + fx, fy = ax + t * dx, ay + t * dy + return (2 * fx - q[0], 2 * fy - q[1]) + missing = [v for v in vs if not any(math.dist(refl(v), o) < 1e-9 for o in vs)] + check("SYMMETRY", not missing, + f"every one of {len(vs)} vertices has its exact reflection about the drawn axis") + leave_sketch() + + +def rung_trim(): + print("\nC5 trim — cut one arm off a crossing") + enter_sketch("l") + draw_line(-50, 0, 50, 0, 100, 0) + key("l", 0.6) + draw_line(0, -50, 0, 50, 100, 90) + d0 = describe()["entities"] + horiz = min(d0, key=lambda e: abs(e["p1"][1] - e["p0"][1])) + vert = max(d0, key=lambda e: abs(e["p1"][1] - e["p0"][1])) + X = cross(horiz, vert) + left = min(horiz["p0"], horiz["p1"]) # the end that must survive + want = math.dist(left, X) + key("t", 0.6) + clickmm(*mid_of(X, max(horiz["p0"], horiz["p1"]))) # the arm on the far side of the crossing + d = describe() + ls = sorted(round(e["length"], 9) for e in d["entities"] if e["type"] == "line") + check("LENGTH", len(ls) == 2 and near(ls[1], vert["length"], 1e-9) and near(ls[0], want, 1e-9), + f"lengths {ls} — the picked arm is gone at the crossing (expected {want:.9f}), " + f"the other line untouched") + ends = [tuple(p) for e in d["entities"] if e["type"] == "line" for p in (e["p0"], e["p1"])] + check("VERTEX", any(math.dist(X, q) < 1e-9 for q in ends), "the cut lands exactly on the crossing") + leave_sketch() + + +def rung_extend(): + print("\nC6 extend — reach a line to the one it stops short of") + enter_sketch("l") + draw_line(-50, 0, -10, 0, 40, 0) + key("l", 0.6) + draw_line(0, -50, 0, 50, 100, 90) + d0 = describe()["entities"] + short = min(d0, key=lambda e: e["length"]) + vert = max(d0, key=lambda e: e["length"]) + X = cross(short, vert) + far = min((short["p0"], short["p1"]), key=lambda q: q[0]) # the end that stays put + near_end = max((short["p0"], short["p1"]), key=lambda q: q[0]) + want = math.dist(far, X) + key("x", 0.6) + clickmm(*mid_of(near_end, mid_of(far, near_end))) # click the end that must grow + d = describe() + ls = sorted(round(e["length"], 9) for e in d["entities"] if e["type"] == "line") + check("LENGTH", len(ls) == 2 and near(ls[0], want, 1e-9), + f"lengths {ls} — {short['length']:.6f} grew to exactly {want:.9f}") + ends = [tuple(p) for e in d["entities"] if e["type"] == "line" for p in (e["p0"], e["p1"])] + check("VERTEX", any(math.dist(X, q) < 1e-9 for q in ends), + "the new end sits exactly on the target line") + leave_sketch() + + +# =================================================================== LADDER D — dimensions +# A drawn shape with no numbers on it, then numbers put on it by hand: the Dimension tool for a +# value, the Constrain buttons for a relation. Both must hold the value they were given AND take +# the degrees of freedom away — a dimension that moves the geometry but leaves the DoF standing +# has not constrained anything, it has only nudged it. + +# Constrain-mode toolbar, measured off the rig at 1920x1080 (icon centres, 42 px apart). +# +# THIS LIST MIRRORS THE cbtn() SEQUENCE IN DesignPanel.cpp AND HAS TO BE UPDATED WHEN A BUTTON +# IS INSERTED. Positions are computed by index, so inserting a button shifts every entry after +# it and the map silently points at the wrong icon -- a rung then applies some OTHER constraint +# and fails with a geometric message that says nothing about buttons. +# +# It has already happened once, undetected: equal_radius and collinear (after "equal"), sym_v +# and sym_h (after "symmetric") and dist_x and dist_y (after "fix") were added while this list +# still had 14 names. Everything from index 6 on was wrong in both forks. Nothing caught it +# because the ladder only ever clicks "perpendicular" (3) and "equal" (5), both of which sit +# before the first insertion. The next rung to use "tangent" would have clicked "collinear". +CON_BTN_Y = 76 + CHROME_DY +CON_BTN = {n: (449 + 42 * i, CON_BTN_Y) for i, n in enumerate( + ["horizontal", "vertical", "parallel", "perpendicular", "coincident", "equal", + "equal_radius", "collinear", "concentric", "tangent", "midpoint", "symmetric", + "sym_v", "sym_h", "angle", "radius", "diameter", "fix", "dist_x", "dist_y"])} + +# The SAME twenty buttons, at their SKETCH-mode x. Constraining during a sketch put the group +# after the (wide) sketch toolbar instead of at the start of an otherwise empty row, so every +# button sits 228 px further right. Measured, not derived: the strip was screenshotted in sketch +# mode and the icon columns detected — first centre 677, pitch 42, twenty of them. Deriving it +# from the Constrain-mode map is exactly how this table drifted the last time. +# NOTE FOR THIS FORK: 677 was measured on the OTHER fork's rig. Y is safe (it rides CON_BTN_Y, +# which already carries CHROME_DY), but the X start depends on how wide the sketch toolbar to the +# left of this group renders, and this fork keeps mainline's top row. Re-measure before trusting +# D11 here: screenshot in sketch mode and detect the icon columns, do not derive it by offset. +CON_BTN_SKETCH = {n: (677 + 42 * i, CON_BTN_Y) for i, n in enumerate( + ["horizontal", "vertical", "parallel", "perpendicular", "coincident", "equal", + "equal_radius", "collinear", "concentric", "tangent", "midpoint", "symmetric", + "sym_v", "sym_h", "angle", "radius", "diameter", "fix", "dist_x", "dist_y"])} + + +def draw_rect_undimensioned(): + """A rectangle by two clicks, with both queued value fields dismissed (Esc keeps it as drawn).""" + clickmm(-60, -40); clickmm(60, 40) + key("Escape", 0.7) # Width — keep as drawn + key("Escape", 0.7) # Height — keep as drawn + + +def rung_dimension(): + print("\nD1 dimension — put a length on a side that had none") + enter_sketch("r") + draw_rect_undimensioned() + d0 = describe() + dof0 = d0["dof"] + check("VERTEX", dof0 > 0, f"the undimensioned rectangle has {dof0} degrees of freedom") + side = max((e for e in d0["entities"] if e["type"] == "line"), key=lambda e: e["length"]) + key("d", 0.6) + clickmm(*mid(side)) + values(90) + d = describe() + ls = sorted(round(e["length"], 9) for e in d["entities"] if e["type"] == "line") + check("LENGTH", any(near(x, 90.0, 1e-9) for x in ls), f"the dimensioned side reads {ls}") + check("VERTEX", d["dof"] < dof0, f"degrees of freedom {dof0} -> {d['dof']}") + check("CLOSED", d["solve_ok"] and len(d["closed_loops"]) == 1, "still one closed, solved loop") + leave_sketch() + + +CONFIRM_BTN = (1751, 75 + CHROME_DY) + + +def confirm_and_reopen(): + """(see reopen_sketch below — same two steps, kept together for the constrain rungs)""" + """Leave Constrain with the action bar's tick, then re-open the sketch for editing. + + THE DoF HAS TO BE READ HERE, not in Constrain mode. While constraining, sketch_describe + reports the LIVE tool's dof and constraint count, which the constrain session does not + touch — it works on the committed feature's own entity_constraints, and the panel computes + its readout from those. Reading during the session says 4 -> 4 for a constraint that really + did land; reading after the round trip says 4 -> 3, and proves the constraint was persisted + rather than merely previewed. + """ + click(*CONFIRM_BTN, pause=1.5) + w, X, Y, _, _ = win() + sh(f"DISPLAY={DISP} xdotool mousemove {X+TREE_ROW0[0]} {Y+TREE_ROW0[1]} " + f"click --repeat 2 --delay 120 1") + time.sleep(2.0) + return describe() + + +def rung_constrain(): + reset_document() + print("\nD2 constrain — Equal length on two adjacent sides, from the Constrain toolbar") + enter_sketch("r") + draw_rect_undimensioned() + a, b = corner_pair(describe()["entities"]) + check("LENGTH", not near(a["length"], b["length"], 1e-6), + f"the two sides start unequal: {a['length']:.6f} vs {b['length']:.6f}") + key("k", 1.5) # finish the sketch and enter Constrain + # Re-read the picks from the COMMITTED sketch: finish_sketch repackages the entities, so an + # index taken before Constrain is not the same index afterwards. + d1 = describe() + a, b = corner_pair(d1["entities"]) + dof0 = 4 # an undimensioned rectangle: position + size + ia, ib = d1["entities"].index(a), d1["entities"].index(b) + clickmm(*mid(a)); clickmm(*mid(b)) + click(*CON_BTN["equal"]) + time.sleep(1.0) + d = describe() + la, lb = d["entities"][ia]["length"], d["entities"][ib]["length"] + check("LENGTH", near(la, lb, 1e-9), f"the two sides are now equal: {la:.9f} and {lb:.9f}") + d2 = confirm_and_reopen() + check("VERTEX", d2["dof"] == dof0 - 1, f"degrees of freedom {dof0} -> {d2['dof']} after the round trip") + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + ls2 = sorted(round(e["length"], 9) for e in d2["entities"] if e["type"] == "line") + check("LENGTH", near(ls2[0], la, 1e-9) and near(ls2[-1], la, 1e-9), + f"the geometry came back unchanged: {ls2}") + leave_sketch() + + +def rung_perpendicular(): + reset_document() + print("\nD3 constrain — two free lines made exactly perpendicular") + enter_sketch("l") + clickmm(-50, -30); clickmm(30, -18) + key("Escape", 0.7); key("Escape", 0.7) + key("l", 0.6) + # 56 degrees off the first line, not 3. The original second point put the pair within + # inference's perpendicular tolerance, so on a rig whose camera maps the click a pixel + # differently the two lines arrive ALREADY at exactly 90.000000 -- inference did the job the + # rung exists to test, and the precondition failed while every later check passed. Held on + # one fork and failed on the other from the same source, which is the signature of a rung + # that depends on luck. Start well outside any snap tolerance so the button has real work. + clickmm(30, -18); clickmm(55, 35) + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + check("ANGLE", abs(angle_between(d0["entities"][0], d0["entities"][1]) - 90.0) > 1e-3, + f"they start at {angle_between(d0['entities'][0], d0['entities'][1]):.6f} deg") + key("k", 1.5) + d1 = describe() + clickmm(*mid(d1["entities"][0])); clickmm(*mid(d1["entities"][1])) + click(*CON_BTN["perpendicular"]) + time.sleep(1.0) + d = describe() + ang = angle_between(d["entities"][0], d["entities"][1]) + # 1e-6 deg, which is 1.7e-8 radians: the LIVE solve converges to its own tolerance and lands + # at 89.999999991 from a 51 deg start. The old 1e-9 held only because the pair began 3 deg + # from square, so the correction was tiny -- it was measuring how little work the solver had + # to do, not whether the lines came out perpendicular. The round-trip check below still + # demands exactly 90: the committed feature re-solves from scratch and gets there. + check("ANGLE", near(ang, 90.0, 1e-6), f"now {ang:.9f} deg") + d2 = confirm_and_reopen() + ang2 = angle_between(d2["entities"][0], d2["entities"][1]) + check("ANGLE", near(ang2, 90.0, 1e-9), f"still {ang2:.9f} deg after the round trip") + check("CLOSED", d2["constraints"] > 0 and d2["solve_ok"], + f"{d2['constraints']} constraints survived, dof {d2['dof']}") + leave_sketch() + + +def angle_between(a, b): + va = (a["p1"][0] - a["p0"][0], a["p1"][1] - a["p0"][1]) + vb = (b["p1"][0] - b["p0"][0], b["p1"][1] - b["p0"][1]) + c = (va[0] * vb[0] + va[1] * vb[1]) / (math.hypot(*va) * math.hypot(*vb)) + return math.degrees(math.acos(max(-1.0, min(1.0, c)))) + + +def parallel_gap(a, b): + """How far from parallel, in degrees. Parallel reads 0 or 180; both mean parallel.""" + ang = angle_between(a, b) + return min(ang, 180.0 - ang) + + +def rung_parallel(): + reset_document() + print("\nD10 constrain — two divergent lines made parallel (the button had no rung at all)") + enter_sketch("l") + clickmm(-50, -30); clickmm(30, -18) + key("Escape", 0.7); key("Escape", 0.7) + key("l", 0.6) + # Well outside inference's 3 deg snap, for the same reason D3 starts at 56: a pair that + # arrives already parallel would let a dead button pass the rung. + clickmm(30, -18); clickmm(55, 35) + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + g0 = parallel_gap(d0["entities"][0], d0["entities"][1]) + check("ANGLE", g0 > 1e-3, f"they start {g0:.6f} deg from parallel") + key("k", 1.5) + d1 = describe() + clickmm(*mid(d1["entities"][0])); clickmm(*mid(d1["entities"][1])) + click(*CON_BTN["parallel"]) + time.sleep(1.0) + d = describe() + g = parallel_gap(d["entities"][0], d["entities"][1]) + check("ANGLE", near(g, 0.0, 1e-6), f"now {g:.9f} deg from parallel") + check("LENGTH", d["entities"][0]["length"] > 1.0 and d["entities"][1]["length"] > 1.0, + f"neither line collapsed: {d['entities'][0]['length']:.6f}, {d['entities'][1]['length']:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["constraints"] > 0 and d2["solve_ok"], + f"{d2['constraints']} constraints survived the commit, dof {d2['dof']}") + leave_sketch() + + +def rung_live_constrain(): + reset_document() + print("\nD11 constrain WHILE SKETCHING — no commit, no tree pick, no padlock") + enter_sketch("l") + clickmm(-50, -30); clickmm(30, -18) + key("Escape", 0.7); key("Escape", 0.7) + key("l", 0.6) + clickmm(30, -18); clickmm(55, 35) + # Two Escapes only: the first clears the polyline's pending point, the second drops the + # tool to Select. The session stays LIVE -- that is the whole point of this rung. + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + check("VERTEX", len(d0["entities"]) == 2, f"{len(d0['entities'])} entities in the live sketch") + g0 = parallel_gap(d0["entities"][0], d0["entities"][1]) + check("ANGLE", g0 > 1e-3, f"they start {g0:.6f} deg from parallel") + # Pick both in the LIVE session, then press the button. No "k": pressing Constrain is + # exactly the step this rung exists to prove is no longer necessary. + clickmm(*mid(d0["entities"][0])) + cx, cy = mid(d0["entities"][1]) + click_ctrl(*px(cx, cy)) + click(*CON_BTN_SKETCH["parallel"]) + time.sleep(1.2) + d = describe() + g = parallel_gap(d["entities"][0], d["entities"][1]) + check("ANGLE", near(g, 0.0, 1e-6), f"parallel without ever leaving the sketch: {g:.9f} deg") + check("LENGTH", d["entities"][0]["length"] > 1.0 and d["entities"][1]["length"] > 1.0, + f"neither line collapsed: {d['entities'][0]['length']:.6f}, {d['entities'][1]['length']:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["constraints"] > 0 and d2["solve_ok"], + f"{d2['constraints']} constraints survived the commit, dof {d2['dof']}") + leave_sketch() + + +# ---- the eleven buttons no rung had ever pressed ------------------------------------------ +# Twenty constraint buttons, nine of them exercised. The other eleven were "implemented" in the +# sense that the kernel builds the right def for them -- which is exactly what was true of +# Parallel this morning, right up until a user pressed it. What a kernel test cannot see: that +# the BUTTON is wired to the index its name claims. CON_BTN is 449 + 42*i over a hand-written +# name list and it has drifted once already, unnoticed for months, because nothing pressed +# anything past index 5. These rungs press the rest. + +def rung_vertical(): + reset_document() + print("\nD12 constrain — Vertical on one line, from a line that is not") + enter_sketch("l") + clickmm(-20, -35); clickmm(5, 30) + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + dx0 = abs(d0["entities"][0]["p1"][0] - d0["entities"][0]["p0"][0]) + check("VERTEX", dx0 > 1.0, f"it starts off-plumb by {dx0:.6f} mm") + key("k", 1.5) + d1 = describe() + clickmm(*mid(d1["entities"][0])) + click(*CON_BTN["vertical"]) + time.sleep(1.0) + d = describe() + e = d["entities"][0] + dx = abs(e["p1"][0] - e["p0"][0]) + check("VERTEX", near(dx, 0.0, 1e-6), f"now plumb: dx = {dx:.9f}") + check("LENGTH", e["length"] > 1.0, f"and it did not collapse: {e['length']:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_equal_radius_button(): + reset_document() + print("\nD13 constrain — the equal_radius button ITSELF (index 6: past where the map drifted)") + # D4 proves the SHARED Equal button promotes on two circles. This presses design_c_equal_radius, + # the first button after the six that were once inserted without updating this table. + enter_sketch("c") + clickmm(-35, 0); clickmm(-20, 0); key("Escape", 0.7) + key("c", 0.6) + clickmm(35, 0); clickmm(60, 0); key("Escape", 0.7) + d0 = describe() + cs = [e for e in d0["entities"] if e["type"] == "circle"] + check("ARC", len(cs) == 2 and not near(cs[0]["radius"], cs[1]["radius"], 1e-6), + f"they start unequal: {[round(c['radius'], 6) for c in cs]}") + key("k", 1.5) + d1 = describe() + cs = [e for e in d1["entities"] if e["type"] == "circle"] + ia, ib = d1["entities"].index(cs[0]), d1["entities"].index(cs[1]) + clickmm(*rim(cs[0])); clickmm(*rim(cs[1])) + click(*CON_BTN["equal_radius"]) + time.sleep(1.0) + d = describe() + ra, rb = d["entities"][ia]["radius"], d["entities"][ib]["radius"] + check("ARC", near(ra, rb, 1e-9), f"equal by the dedicated button: {ra:.9f} and {rb:.9f}") + check("ARC", ra > 1e-6, f"and not equal at zero: {ra:.9f}") + leave_sketch() + + +def rung_concentric(): + reset_document() + print("\nD14 constrain — Concentric puts two circles on one centre, radii untouched") + enter_sketch("c") + clickmm(-30, -10); clickmm(-14, -10); key("Escape", 0.7) + key("c", 0.6) + clickmm(28, 14); clickmm(52, 14); key("Escape", 0.7) + d0 = describe() + cs = [e for e in d0["entities"] if e["type"] == "circle"] + gap0 = math.dist(cs[0]["center"], cs[1]["center"]) + r_before = sorted(round(c["radius"], 9) for c in cs) + check("ARC", gap0 > 1.0, f"centres start {gap0:.6f} mm apart") + key("k", 1.5) + d1 = describe() + cs = [e for e in d1["entities"] if e["type"] == "circle"] + ia, ib = d1["entities"].index(cs[0]), d1["entities"].index(cs[1]) + clickmm(*rim(cs[0])); clickmm(*rim(cs[1])) + click(*CON_BTN["concentric"]) + time.sleep(1.0) + d = describe() + gap = math.dist(d["entities"][ia]["center"], d["entities"][ib]["center"]) + check("ARC", near(gap, 0.0, 1e-6), f"centres now coincide: {gap:.9f} mm apart") + # Concentric is about centres only. A solve that also equalised the radii would be wrong. + r_after = sorted(round(d["entities"][i]["radius"], 9) for i in (ia, ib)) + check("ARC", all(near(a, b, 1e-6) for a, b in zip(r_before, r_after)), + f"radii untouched: {r_before} -> {r_after}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_tangent(): + reset_document() + print("\nD15 constrain — Tangent brings a line to touch a circle exactly once") + enter_sketch("c") + clickmm(0, 0); clickmm(20, 0); key("Escape", 0.7) + key("l", 0.6) + # A line that clearly MISSES the circle: its perpendicular distance from the centre is well + # above the radius, so tangency has real work to do in the direction of shrinking the gap. + clickmm(-45, 38); clickmm(45, 44) + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + c0 = next(e for e in d0["entities"] if e["type"] == "circle") + l0 = next(e for e in d0["entities"] if e["type"] == "line") + d_before = point_line_distance(c0["center"], l0) + check("ARC", d_before > c0["radius"] + 1.0, + f"the line misses by {d_before - c0['radius']:.6f} mm") + key("k", 1.5) + d1 = describe() + c1 = next(e for e in d1["entities"] if e["type"] == "circle") + l1 = next(e for e in d1["entities"] if e["type"] == "line") + ic, il = d1["entities"].index(c1), d1["entities"].index(l1) + clickmm(*rim(c1)); clickmm(*mid(l1)) + click(*CON_BTN["tangent"]) + time.sleep(1.2) + d = describe() + cc, ll = d["entities"][ic], d["entities"][il] + dist = point_line_distance(cc["center"], ll) + check("ARC", near(dist, cc["radius"], 1e-6), + f"centre-to-line {dist:.9f} == radius {cc['radius']:.9f}") + check("ARC", cc["radius"] > 1e-6, f"and the circle did not collapse: r = {cc['radius']:.9f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_midpoint(): + reset_document() + print("\nD16 constrain — Midpoint drops a free point onto the middle of a line") + enter_sketch("l") + clickmm(-50, -20); clickmm(40, 26) + key("Escape", 0.7); key("Escape", 0.7) + key("p", 0.6) + clickmm(10, -35) + d0 = describe() + l0 = next(e for e in d0["entities"] if e["type"] == "line") + p0 = next(e for e in d0["entities"] if e["type"] == "point") + mid0 = ((l0["p0"][0] + l0["p1"][0]) / 2.0, (l0["p0"][1] + l0["p1"][1]) / 2.0) + check("VERTEX", math.dist(p0["p"], mid0) > 1.0, + f"the point starts {math.dist(p0['p'], mid0):.6f} mm off the midpoint") + key("k", 1.5) + d1 = describe() + l1 = next(e for e in d1["entities"] if e["type"] == "line") + p1 = next(e for e in d1["entities"] if e["type"] == "point") + il, ip = d1["entities"].index(l1), d1["entities"].index(p1) + # Point first, then the line: Midpoint binds a POINT role on ea and a whole segment on eb. + clickmm(*p1["p"]); clickmm(*mid(l1)) + click(*CON_BTN["midpoint"]) + time.sleep(1.2) + d = describe() + ll, pp = d["entities"][il], d["entities"][ip] + m = ((ll["p0"][0] + ll["p1"][0]) / 2.0, (ll["p0"][1] + ll["p1"][1]) / 2.0) + check("VERTEX", near(math.dist(pp["p"], m), 0.0, 1e-6), + f"the point sits on the midpoint: off by {math.dist(pp['p'], m):.9f}") + check("LENGTH", ll["length"] > 1.0, f"and the line did not collapse: {ll['length']:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_symmetric_line_axis(): + reset_document() + print("\nD17 constrain — Symmetric about a PICKED axis line (the three-pick form)") + # D7 covers the implicit-axis buttons. This is the plain Symmetric: two entities AND an axis + # entity, three picks, the only constraint on the bar that needs a third. + enter_sketch("l") + clickmm(0, -40); clickmm(0, 40) # the axis: a real line on x = 0 + key("Escape", 0.7); key("Escape", 0.7) + key("p", 0.6) + clickmm(-38, 12) + key("p", 0.6) + clickmm(14, 12) + d0 = describe() + ps = [e for e in d0["entities"] if e["type"] == "point"] + check("VERTEX", not near(abs(ps[0]["p"][0]), abs(ps[1]["p"][0]), 1e-3), + f"they start unmirrored: x = {ps[0]['p'][0]:.6f}, {ps[1]['p'][0]:.6f}") + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ax = next(e for e in d1["entities"] if e["type"] == "line") + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + iax = d1["entities"].index(ax) + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]); clickmm(*mid(ax)) + click(*CON_BTN["symmetric"]) + time.sleep(1.2) + d = describe() + # Measure against the axis WHERE IT NOW IS, not against x = 0. All three entities are free, + # so the solver is entitled to satisfy the mirror by moving the AXIS instead of the points -- + # and it does: the pair came out symmetric about x = -8.18, which is a correct solution and + # which an "xa == -xb" assertion calls a failure. That was this rung being wrong, not the app. + ax_now = d["entities"][iax] + sa = signed_point_line_distance(d["entities"][ia]["p"], ax_now) + sb = signed_point_line_distance(d["entities"][ib]["p"], ax_now) + ya, yb = d["entities"][ia]["p"][1], d["entities"][ib]["p"][1] + check("VERTEX", near(sa, -sb, 1e-6), + f"mirrored about the picked line: {sa:.9f} and {sb:.9f} from it") + check("VERTEX", abs(sa) > 1e-6, f"and not both collapsed onto it: |d| = {abs(sa):.9f}") + check("VERTEX", near(ya, yb, 1e-6), f"y untouched on both: {ya:.6f}, {yb:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_symmetric_h(): + reset_document() + print("\nD18 constrain — symmetric about the HORIZONTAL axis (sym_h, the twin of D7)") + enter_sketch("p") + clickmm(20, -34) + key("p", 0.6) + clickmm(20, 9) + d0 = describe() + ps = [e for e in d0["entities"] if e["type"] == "point"] + check("VERTEX", not near(abs(ps[0]["p"][1]), abs(ps[1]["p"][1]), 1e-3), + f"they start unmirrored: y = {ps[0]['p'][1]:.6f}, {ps[1]['p'][1]:.6f}") + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]) + click(*CON_BTN["sym_h"]) + time.sleep(1.0) + d = describe() + xa, xb = d["entities"][ia]["p"][0], d["entities"][ib]["p"][0] + ya, yb = d["entities"][ia]["p"][1], d["entities"][ib]["p"][1] + check("VERTEX", near(ya, -yb, 1e-9), f"mirrored across y = 0: {ya:.9f} and {yb:.9f}") + check("VERTEX", abs(ya) > 1e-6, f"and not both collapsed onto the axis: |y| = {abs(ya):.9f}") + check("VERTEX", near(xa, xb, 1e-6), f"x untouched on both: {xa:.6f}, {xb:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_radius(): + reset_document() + print("\nD19 constrain — a typed Radius drives the circle to exactly that radius") + enter_sketch("c") + clickmm(0, 0); clickmm(31, 0); key("Escape", 0.7) + d0 = describe() + c0 = next(e for e in d0["entities"] if e["type"] == "circle") + check("ARC", not near(c0["radius"], 22.0, 1e-3), f"it starts at r = {c0['radius']:.6f}") + key("k", 1.5) + d1 = describe() + c1 = next(e for e in d1["entities"] if e["type"] == "circle") + ic = d1["entities"].index(c1) + ctr = list(c1["center"]) + clickmm(*rim(c1)) + click(*CON_BTN["radius"]) + time.sleep(0.8) + values(22) + d = describe() + cc = d["entities"][ic] + check("ARC", near(cc["radius"], 22.0, 1e-6), f"radius driven to {cc['radius']:.9f}") + # A Radius constraint moves the RIM, never the centre. + check("ARC", near(math.dist(cc["center"], ctr), 0.0, 1e-6), + f"and the centre stayed put: moved {math.dist(cc['center'], ctr):.9f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_diameter(): + reset_document() + print("\nD20 constrain — a typed Diameter is a diameter, not a radius") + # The failure this exists for is a factor of two: Diameter wired to the Radius handler gives + # a circle of r = 30 for a typed 30, and nothing about the sketch looks wrong. + enter_sketch("c") + clickmm(0, 0); clickmm(19, 0); key("Escape", 0.7) + key("k", 1.5) + d1 = describe() + c1 = next(e for e in d1["entities"] if e["type"] == "circle") + ic = d1["entities"].index(c1) + clickmm(*rim(c1)) + click(*CON_BTN["diameter"]) + time.sleep(0.8) + values(30) + d = describe() + r = d["entities"][ic]["radius"] + check("ARC", near(r, 15.0, 1e-6), f"typed diameter 30 gives radius {r:.9f}, not 30") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_fix(): + reset_document() + print("\nD21 constrain — Fix anchors a point, and the anchor is what the solver moves around") + # Fix on its own is unfalsifiable: nothing moved, so nothing proves it did anything. The + # property only becomes observable when a SECOND constraint would otherwise have moved the + # fixed point -- so drive the pair apart and see which end travels. + enter_sketch("p") + clickmm(-25, 0) + key("p", 0.6) + clickmm(15, 0) + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + anchor = list(ps[0]["p"]) + clickmm(*ps[0]["p"]) + click(*CON_BTN["fix"]) + time.sleep(1.0) + d = describe() + check("VERTEX", near(math.dist(d["entities"][ia]["p"], anchor), 0.0, 1e-9), + "the fixed point did not move when it was fixed") + # Now demand a horizontal gap far from the current one. Only the FREE point may travel. + clickmm(*d["entities"][ia]["p"]); clickmm(*d["entities"][ib]["p"]) + click(*CON_BTN["dist_x"]) + time.sleep(0.8) + values(70) + d = describe() + moved_a = math.dist(d["entities"][ia]["p"], anchor) + gap = abs(d["entities"][ib]["p"][0] - d["entities"][ia]["p"][0]) + check("LENGTH", near(gap, 70.0, 1e-6), f"the gap was driven to {gap:.9f}") + check("VERTEX", near(moved_a, 0.0, 1e-6), + f"and the anchored point held station: moved {moved_a:.9f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 1, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_distance_y(): + reset_document() + print("\nD22 constrain — vertical distance, and it is not the straight-line one either") + enter_sketch("p") + clickmm(-22, -18) + key("p", 0.6) + clickmm(19, 24) + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + dx_before = d1["entities"][ib]["p"][0] - d1["entities"][ia]["p"][0] + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]) + click(*CON_BTN["dist_y"]) + time.sleep(0.8) + values(35) + d = describe() + gy = abs(d["entities"][ib]["p"][1] - d["entities"][ia]["p"][1]) + gx = d["entities"][ib]["p"][0] - d["entities"][ia]["p"][0] + check("LENGTH", near(gy, 35.0, 1e-6), f"vertical gap driven to {gy:.9f}") + check("VERTEX", near(gx, dx_before, 1e-6), + f"the horizontal gap is untouched at {gx:.9f} — this is not a straight-line distance") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def signed_point_line_distance(p, line): + """Perpendicular distance with a SIGN, so the two sides of a mirror are distinguishable.""" + x0, y0 = line["p0"]; x1, y1 = line["p1"] + dx, dy = x1 - x0, y1 - y0 + n = math.hypot(dx, dy) + return (dy * (p[0] - x0) - dx * (p[1] - y0)) / n + + +def point_line_distance(p, line): + """Perpendicular distance from a point to the INFINITE line through a segment.""" + x0, y0 = line["p0"]; x1, y1 = line["p1"] + dx, dy = x1 - x0, y1 - y0 + n = math.hypot(dx, dy) + return abs(dy * (p[0] - x0) - dx * (p[1] - y0)) / n + + +# =================================================================== DURABILITY +# Exactness that does not survive an undo or a save is not exactness. + +def rim(e, deg=135.0): + """A point on a circle's rim, away from +X. + + NOT the +X point: a click there grabs the RADIUS GRIP instead of selecting the circle, + and a grip click REPLACES the selection with that one entity — so the second pick of a + two-entity constraint silently discards the first. + """ + a = math.radians(deg) + return (e["center"][0] + e["radius"] * math.cos(a), + e["center"][1] + e["radius"] * math.sin(a)) + + +def rung_equal_radius(): + reset_document() + print("\nD4 constrain — Equal on two CIRCLES means equal radius, not equal length") + # The dead end this fixed: two circles + Equal used to emit EQUAL_LENGTH_LINES, which + # constrains nothing on a curve. The user got a silent no-op with no error and no way to + # tell why. One Equal button, two meanings — lines get length, curves get radius. + # NOT dimensioned: a typed radius is a DRIVING Radius constraint, and EqualRadius on two + # circles pinned to 15 and 25 is genuinely inconsistent -- the kernel refuses the addition + # and is right to. Draw them at different sizes and leave the radius free. + enter_sketch("c") + clickmm(-35, 0); clickmm(-20, 0); key("Escape", 0.7) + key("c", 0.6) + clickmm(35, 0); clickmm(60, 0); key("Escape", 0.7) + d0 = describe() + cs = [e for e in d0["entities"] if e["type"] == "circle"] + check("ARC", len(cs) == 2 and not near(cs[0]["radius"], cs[1]["radius"], 1e-6), + f"they start unequal: {[round(c['radius'], 6) for c in cs]}") + key("k", 1.5) + d1 = describe() + cs = [e for e in d1["entities"] if e["type"] == "circle"] + ia, ib = d1["entities"].index(cs[0]), d1["entities"].index(cs[1]) + clickmm(*rim(cs[0])); clickmm(*rim(cs[1])) + click(*CON_BTN["equal"]) # the SHARED Equal button, not design_c_equal_radius + time.sleep(1.0) + d = describe() + ra, rb = d["entities"][ia]["radius"], d["entities"][ib]["radius"] + check("ARC", near(ra, rb, 1e-9), f"the two radii are now equal: {ra:.9f} and {rb:.9f}") + check("ARC", ra > 1e-6, f"and not equal at zero: {ra:.9f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + rs = sorted(round(e["radius"], 9) for e in d2["entities"] if e["type"] == "circle") + check("ARC", len(rs) == 2 and near(rs[0], rs[-1], 1e-9), + f"still equal after the round trip: {rs}") + leave_sketch() + + +def rung_collinear(): + reset_document() + print("\nD5 constrain — two offset lines brought onto one infinite line") + # Oblique on purpose: axis-aligned segments pick up an auto Horizontal at draw time, and + # this rung is about Collinear, not about interacting with inference. + enter_sketch("l") + clickmm(-60, -14); clickmm(-12, -6) + key("Escape", 0.7); key("Escape", 0.7) + key("l", 0.6) + clickmm(12, 14); clickmm(60, 22) + key("Escape", 0.7); key("Escape", 0.7) + d0 = describe() + ls = [e for e in d0["entities"] if e["type"] == "line"] + check("VERTEX", len(ls) == 2 and abs(ls[0]["p0"][1] - ls[1]["p0"][1]) > 1.0, + f"they start on different lines, dy = {abs(ls[0]['p0'][1] - ls[1]['p0'][1]):.6f}") + key("k", 1.5) + d1 = describe() + ls = [e for e in d1["entities"] if e["type"] == "line"] + ia, ib = d1["entities"].index(ls[0]), d1["entities"].index(ls[1]) + clickmm(*mid(ls[0])); clickmm(*mid(ls[1])) + click(*CON_BTN["collinear"]) + time.sleep(1.0) + d = describe() + A, B = d["entities"][ia], d["entities"][ib] + ax, ay = A["p0"] + dx, dy = A["p1"][0] - ax, A["p1"][1] - ay + cross = [dx * (q[1] - ay) - dy * (q[0] - ax) for q in (B["p0"], B["p1"])] + check("VERTEX", all(abs(c) < 1e-6 for c in cross), + f"both ends of the second line lie on the first: cross {[round(c, 9) for c in cross]}") + # A line collapsed to a point is trivially collinear with anything, so the cross products + # above pass on a degenerate solve. Both lines have to survive. + check("LENGTH", A["length"] > 1.0 and B["length"] > 1.0, + f"neither line collapsed: {A['length']:.6f}, {B['length']:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_distance_xy(): + reset_document() + print("\nD6 constrain — horizontal distance, and accepting its own value moves nothing") + enter_sketch("p") + clickmm(-30, -20) + key("p", 0.6) + clickmm(25, 18) + # A THIRD point, placed now while the point tool is still armed. The typed half of this rung + # needs a pair that carries no dimension yet, and pressing "p" again once the constrain tool + # has taken over does not re-arm the point tool -- the click is consumed as a pick and no + # point appears, which read as an IndexError three lines later rather than as what it was. + key("p", 0.6) + clickmm(5, 5) + d0 = describe() + ps = [e for e in d0["entities"] if e["type"] == "point"] + check("VERTEX", len(ps) == 3, f"three points placed: {len(ps)}") + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + ic = d1["entities"].index(ps[2]) + + # THE NO-OP PROPERTY, which is the one a unit test cannot reach: the field opens pre-filled + # with the current projected gap, and pressing Return must change nothing. The constraint is + # SIGNED — (pB - pA).dot(axis) — so if the refs were ordered to show |delta| while the real + # delta is negative, accepting the number on screen teleports the point across its anchor. + before = [list(d1["entities"][ia]["p"]), list(d1["entities"][ib]["p"])] + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]) + click(*CON_BTN["dist_x"]) + time.sleep(0.8) + key("Return", 1.2) # accept the pre-filled value, type nothing + d = describe() + after = [list(d["entities"][ia]["p"]), list(d["entities"][ib]["p"])] + moved = max(abs(a - b) for pa, pb in zip(before, after) for a, b in zip(pa, pb)) + # 5 microns, not zero: the field shows two decimals, so accepting what it shows commits a + # ROUNDED value and the geometry legitimately shifts by up to half a displayed unit. The + # defect this guards is a sign flip, which moves the point by twice the gap — tens of + # millimetres. A 1e-6 tolerance here failed on a 0.96 micron rounding step, which is the + # instrument disagreeing with the display, not the app misbehaving. + check("VERTEX", moved < 5e-3, + f"accepting the shown value moved nothing (max {moved:.9f})") + # "nothing moved" passes just as happily when the constraint was never applied at all -- + # which is exactly how the phantom-endpoint bug hid. The gap has to be REAL and driveable, + # so prove the mechanism works before trusting the no-op above. + check("LENGTH", abs(d["entities"][ib]["p"][0] - d["entities"][ia]["p"][0]) > 1.0, + "and the two points still have a real horizontal gap to dimension") + + # Now drive it with a TYPED value, on a FRESH pair. Not on the pair just dimensioned: that + # one already carries its DistanceX, the button rightly refuses to dimension it twice, and no + # field opens — so the digits went nowhere and the gap kept the value the no-op step had + # accepted. A green "gap is 54.94" for a rung that typed 40 is the rung's fault, not the app's. + dy_before = d["entities"][ic]["p"][1] - d["entities"][ia]["p"][1] + clickmm(*d["entities"][ia]["p"]); clickmm(*d["entities"][ic]["p"]) + click(*CON_BTN["dist_x"]) + time.sleep(0.8) + values(40) + d = describe() + gx = abs(d["entities"][ic]["p"][0] - d["entities"][ia]["p"][0]) + gy = d["entities"][ic]["p"][1] - d["entities"][ia]["p"][1] + check("LENGTH", near(gx, 40.0, 1e-6), f"horizontal gap driven to {gx:.9f}") + check("VERTEX", near(gy, dy_before, 1e-6), + f"the vertical gap is untouched at {gy:.9f} — this is not a straight-line distance") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_coincident_points(): + reset_document() + print("\nD8 constrain — Coincident on two POINTS actually joins them") + # The regression this exists for: the closest-pair search used to enumerate {P0,p0},{P1,p1} + # on both entities, and a Point's p1 reads (0,0). For two points the phantom pair is at + # distance 0, which ALWAYS wins, so the constraint was added against a role the solver + # cannot resolve and dropped in silence -- constraints=0, the points never moved, no error. + # Two points is the simplest possible use of the button and it did nothing on every press. + enter_sketch("p") + clickmm(-30, -20) + key("p", 0.6) + clickmm(25, 18) + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + gap0 = math.dist(ps[0]["p"], ps[1]["p"]) + check("VERTEX", gap0 > 1.0, f"they start apart: {gap0:.6f}") + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]) + click(*CON_BTN["coincident"]) + time.sleep(1.2) + d = describe() + gap = math.dist(d["entities"][ia]["p"], d["entities"][ib]["p"]) + check("VERTEX", gap < 1e-6, f"and are now joined: gap {gap:.9f}") + # The count has to be read AFTER the round trip, never during the session: while + # constraining, sketch_describe reports the LIVE tool's constraints, which the constrain + # session never touches -- it writes the committed feature's entity_constraints. Reading it + # here says 0 for a constraint that really did land. Same trap the D2 rung documents. + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit — a dropped one leaves this at 0") + ps2 = [e for e in d2["entities"] if e["type"] == "point"] + check("VERTEX", math.dist(ps2[0]["p"], ps2[1]["p"]) < 1e-6, + "and they are still joined after the round trip") + leave_sketch() + + +def rung_symmetric_axis(): + reset_document() + print("\nD7 constrain — symmetric about the vertical axis, with no construction line") + # Plain Symmetric needs a third pick for the mirror axis, so being symmetric about the + # sketch's own vertical axis used to mean drawing a construction line first. This button + # uses the implicit axis: two picks, no axis entity. + enter_sketch("p") + clickmm(-40, 15) + key("p", 0.6) + clickmm(12, 15) + key("k", 1.5) + d1 = describe() + ps = [e for e in d1["entities"] if e["type"] == "point"] + ia, ib = d1["entities"].index(ps[0]), d1["entities"].index(ps[1]) + check("VERTEX", not near(abs(ps[0]["p"][0]), abs(ps[1]["p"][0]), 1e-3), + f"they start unmirrored: x = {ps[0]['p'][0]:.6f}, {ps[1]['p'][0]:.6f}") + clickmm(*ps[0]["p"]); clickmm(*ps[1]["p"]) + click(*CON_BTN["sym_v"]) + time.sleep(1.0) + d = describe() + xa, xb = d["entities"][ia]["p"][0], d["entities"][ib]["p"][0] + ya, yb = d["entities"][ia]["p"][1], d["entities"][ib]["p"][1] + check("VERTEX", near(xa, -xb, 1e-9), f"mirrored across x = 0: {xa:.9f} and {xb:.9f}") + # Both collapsing onto the axis satisfies the mirror trivially. + check("VERTEX", abs(xa) > 1e-6, f"and not both collapsed onto the axis: |x| = {abs(xa):.9f}") + check("VERTEX", near(ya, yb, 1e-6), f"y untouched on both: {ya:.6f}, {yb:.6f}") + d2 = confirm_and_reopen() + check("CLOSED", d2["solve_ok"] and d2["constraints"] > 0, + f"{d2['constraints']} constraints survived the commit") + leave_sketch() + + +def rung_type_guards(): + reset_document() + print("\nD9 constrain — a button that cannot apply must SAY so, not store a dead constraint") + # Both halves were live defects found by reviewing the DistanceX/Y fix for its class. + # + # Horizontal on a lone Point: P1 is a role the solver cannot resolve, so the constraint was + # dropped at ref_ok -- but still STORED. Measured before the fix: constraints 0 -> 1 after the + # commit, point unmoved. A constraint listed in the panel that can never do anything is worse + # than a refusal, because the panel then claims the sketch is constrained when it is not. + enter_sketch("p") + clickmm(-30, -20) + key("k", 1.5) + d = describe() + ps = [e for e in d["entities"] if e["type"] == "point"] + ia = d["entities"].index(ps[0]) + clickmm(*ps[0]["p"]) + click(*CON_BTN["horizontal"]) + time.sleep(1.0) + d = describe() + check("VERTEX", near(d["entities"][ia]["p"][0], ps[0]["p"][0], 1e-9) and + near(d["entities"][ia]["p"][1], ps[0]["p"][1], 1e-9), + "Horizontal on a point moved nothing, as it must") + d2 = confirm_and_reopen() + check("CLOSED", d2["constraints"] == 0, + f"and stored NO constraint: {d2['constraints']} (a dead stored one reads 1)") + leave_sketch() + + # Angle on two circles: p1-p0 on a circle is (0,0)-centre, so the field used to pre-fill with + # the angle between the two centre POSITION VECTORS -- 178.83 deg for two circles on the x + # axis -- and committing it fed SLVS_C_ANGLE two circle prims, which are not directions. + reset_document() + enter_sketch("c") + clickmm(-35, 0); clickmm(-20, 0); key("Escape", 0.7) + key("c", 0.6) + clickmm(35, 0); clickmm(60, 0); key("Escape", 0.7) + key("k", 1.5) + d = describe() + cs = [e for e in d["entities"] if e["type"] == "circle"] + clickmm(*rim(cs[0])); clickmm(*rim(cs[1])) + click(*CON_BTN["angle"]) + time.sleep(1.0) + check("ANGLE", not field_open(), + "Angle on two circles opened no value field") + key("Escape", 0.6) + d2 = confirm_and_reopen() + check("CLOSED", d2["constraints"] == 0, + f"and stored no angle: {d2['constraints']}") + leave_sketch() + + +def rung_undo(): + print("\nE1 undo — the last entity goes, the rest do not move") + enter_sketch("l") + draw_line(-50, -30, 0, -30, 50, 0) + key("l", 0.6); draw_line(0, -30, 0, 20, 50, 90) + key("l", 0.6); draw_line(0, 20, -40, 20, 40, 180) + before = describe()["entities"] + check("LENGTH", len(before) == 3, f"{len(before)} entities drawn") + key("ctrl+z", 1.0) + after = describe()["entities"] + check("VERTEX", len(after) == 2, f"{len(after)} entities after one undo") + same = all(math.dist(a["p0"], b["p0"]) == 0.0 and math.dist(a["p1"], b["p1"]) == 0.0 + for a, b in zip(before, after)) + check("VERTEX", same, "the two survivors are bit-identical, not re-solved") + key("ctrl+z", 1.0) + check("VERTEX", len(describe()["entities"]) == 1, "a second undo drops one more") + leave_sketch() + + +def rung_feature_undo(): + print("\nE2 undo/redo across the commit — a deleted sketch comes back exactly") + reset_document() + enter_sketch("r") + draw_rect(120, 80, -60, -40) + click(*CONFIRM_BTN, pause=1.5) + n0 = len(call("describe_scene")["features"]) + check("VERTEX", n0 == 1, f"{n0} feature committed") + click(*TREE_ROW0, pause=0.4) + key("Delete", 0.8) + check("VERTEX", not call("describe_scene")["features"], "the tree is empty after Delete") + key("ctrl+z", 1.5) + check("VERTEX", len(call("describe_scene")["features"]) == 1, "undo brings the feature back") + d = reopen_sketch() + ls = lengths(d["entities"]) + check("LENGTH", ls == [80.0, 80.0, 120.0, 120.0], f"and it is the same rectangle: {ls}") + lp = d["closed_loops"] + check("AREA", len(lp) == 1 and near(abs(lp[0]["area"]), 9600.0, 1e-6), + f"area {abs(lp[0]['area']):.6f}") + leave_sketch() + key("ctrl+y", 1.5) + check("VERTEX", not call("describe_scene")["features"], "redo removes it again") + reset_document() + + +PROJECT_FILE = "/tmp/gl-roundtrip.3mf" + + +def dialog_up(): + names = sh(f"DISPLAY={DISP} xdotool search --class '.' getwindowname %@") + return any(n and n != "snapmaker-orca" and "file" in n.lower() for n in names.splitlines()) + + +def file_dialog(path, settle=5.0): + """Type an absolute path into the GTK file chooser that is up, and accept it.""" + if not dialog_up(): + die("no file chooser came up") + key("ctrl+a", 0.3) + typ(path, 0.5) + key("Return", settle) + global _win + _win = None # saving renames the window; drop the cached geometry + + +def rung_roundtrip(): + print("\nE3 save and reload — the profile comes back to the last decimal") + reset_document() + enter_sketch("r") + draw_rect(120, 80, -60, -40) + key("r", 0.6); clickmm(-45, -15); clickmm(-5, 15); values(40, 30) + key("c", 0.6); clickmm(30, 0); clickmm(42, 0); values(10) + before = describe() + click(*CONFIRM_BTN, pause=1.5) + sh(f"rm -f {PROJECT_FILE}") + # Save AS, not Save: once a project has a path, Ctrl+S writes to it silently and no chooser + # appears — which is correct behaviour and a trap for a driver that assumes the dialog. + key("ctrl+shift+s", 3.0) + file_dialog(PROJECT_FILE) + size = sh(f"stat -c %s {PROJECT_FILE} 2>/dev/null").strip() + check("CLOSED", size.isdigit() and int(size) > 0, f"project written, {size} bytes") + reset_document() # wipe the tree, then read it back off disk + key("ctrl+o", 2.5) + file_dialog(PROJECT_FILE, settle=8.0) + go_design() # opening a project lands on Prepare + feats = call("describe_scene")["features"] + check("VERTEX", len(feats) == 1, f"the reloaded document has {len(feats)} feature(s)") + after = reopen_sketch() + b = sorted((e["type"], tuple(round(c, 12) for c in (e.get("p0") or e.get("center") or e.get("p"))), + round(e.get("length", e.get("radius", 0.0)), 12)) for e in before["entities"]) + a = sorted((e["type"], tuple(round(c, 12) for c in (e.get("p0") or e.get("center") or e.get("p"))), + round(e.get("length", e.get("radius", 0.0)), 12)) for e in after["entities"]) + check("VERTEX", a == b, f"{len(a)} entities identical to 12 decimals after the round trip") + lp = after["closed_loops"] + check("CLOSED", len(lp) == 3 and after["buildable"], f"{len(lp)} loops, buildable") + outer = max(range(len(lp)), key=lambda i: abs(lp[i]["area"])) + check("VOID", sorted(lp[outer]["holes"]) == sorted(i for i in range(len(lp)) if i != outer), + "the voids are still attributed to the outer loop") + check("AREA", near(abs(lp[outer]["area"]), 9600.0, 1e-9), f"outer area {abs(lp[outer]['area']):.9f}") + leave_sketch() + reset_document() + + +def rung_scale(): + print("\nE4 scale — a gesture on top of a sketch that already holds a thousand entities") + enter_sketch("r") + # The heavy profile is bulk-loaded through the socket ON PURPOSE: what is under test here is + # whether the interactive path still works with a large sketch already on screen, not where + # that sketch came from. A plate with a 20 x 15 grid of square cut-outs — 1204 entities. + # Sized to the region the calibration probes covered, so every part of it can actually be + # clicked: the camera is wherever the last rung left it, and a plate drawn off-screen would + # test nothing but my arithmetic. + x0, x1, y0, y1 = _SAFE + cx, cy = (x0 + x1) / 2.0, (y0 + y1) / 2.0 + hw, hh = (x1 - x0) * 0.44, (y1 - y0) * 0.44 + ents = [{"type": "line", "p0": [cx - hw, cy - hh], "p1": [cx + hw, cy - hh]}, + {"type": "line", "p0": [cx + hw, cy - hh], "p1": [cx + hw, cy + hh]}, + {"type": "line", "p0": [cx + hw, cy + hh], "p1": [cx - hw, cy + hh]}, + {"type": "line", "p0": [cx - hw, cy + hh], "p1": [cx - hw, cy - hh]}] + # 300 square cut-outs in the LEFT half; the right half stays clear so the gesture below has + # somewhere to land that is not within snapping distance of a cut-out corner. + pitch_x, pitch_y = hw * 0.9 / 20.0, hh * 1.9 / 15.0 + side = min(pitch_x, pitch_y) * 0.4 + for i in range(20): + for j in range(15): + x = cx - hw * 0.95 + i * pitch_x + y = cy - hh * 0.95 + j * pitch_y + c = [(x, y), (x + side, y), (x + side, y + side), (x, y + side), (x, y)] + for k in range(4): + ents.append({"type": "line", "p0": list(c[k]), "p1": list(c[k + 1])}) + t0 = time.monotonic(); call("sketch_add", entities=ents); t_add = time.monotonic() - t0 + d0 = describe() + check("SCALE", len(d0["entities"]) == len(ents), f"{len(d0['entities'])} entities loaded " + f"in {t_add*1000:.0f} ms") + lp0 = d0["closed_loops"] + check("CLOSED", len(lp0) == 301, f"{len(lp0)} closed loops") + outer = max(range(len(lp0)), key=lambda i: abs(lp0[i]["area"])) + check("AREA", near(abs(lp0[outer]["area"]), 4.0 * hw * hh, 1e-9), + f"outer plate {abs(lp0[outer]['area']):.9f} vs {4.0*hw*hh:.9f}") + check("VOID", len(lp0[outer]["holes"]) == 300, + f"all {len(lp0[outer]['holes'])} cut-outs attributed to the plate") + check("AREA", all(near(abs(lp0[h]["area"]), side * side, 1e-9) for h in lp0[outer]["holes"]), + f"every cut-out is exactly {side:.6f} squared") + # Now the part that matters: draw ONE more entity by hand, on top of all that. + # + # No Escape here, deliberately: this rung is the regression test for j7gc, where a + # bulk sketch_add made while a creation tool is armed was read as a drawn gesture, opened that + # tool's value field and swallowed the next key and click until one Escape dismissed it. The + # gesture below has to land on the FIRST try. Fixed by resyncing m_autoedit_seen in + # add_entities_scripted; if this rung ever needs an Escape again, the bug is back. + key("l", 0.8) + global PACE + PACE = 6.0 # a thousand entities re-solve between fields + t0 = time.monotonic() + ax, ay = cx + hw * 0.15, cy + hh * 0.55 # clear of the grid, inside the plate + want_len = int(hw * 0.5) # a WHOLE number: see value() on separators + clickmm(ax, ay); clickmm(ax + want_len, ay) + value(want_len) + dl = describe() + say(f"after the typed length: solve_ok={dl['solve_ok']} constraints={dl['constraints']} " + f"dof={dl['dof']} entities={len(dl['entities'])}") + value(0) + t_draw = time.monotonic() - t0 + d = describe() + check("SCALE", len(d["entities"]) == len(ents) + 1, + f"the gesture added exactly one entity ({t_draw:.1f} s including four synthetic events)") + new = d["entities"][-1] + check("LENGTH", near(new["length"], float(want_len), 1e-9), + f"and it took its typed length exactly: {new['length']}") + ang = math.degrees(math.atan2(new["p1"][1] - new["p0"][1], new["p1"][0] - new["p0"][0])) % 360.0 + check("ANGLE", near(ang, 0.0, 1e-9) or near(ang, 360.0, 1e-9), f"and its typed angle: {ang}") + same = all(math.dist(a["p0"], b["p0"]) == 0.0 and math.dist(a["p1"], b["p1"]) == 0.0 + for a, b in zip(d0["entities"], d["entities"])) + check("VERTEX", same, "and moved none of the thousand entities already there") + PACE = 1.0 + leave_sketch() + + +def reopen_sketch(): + w, X, Y, _, _ = win() + sh(f"DISPLAY={DISP} xdotool mousemove {X+TREE_ROW0[0]} {Y+TREE_ROW0[1]} " + f"click --repeat 2 --delay 120 1") + time.sleep(2.0) + return describe() + + +def rung_mirror_arcs(): + """C4b — mirror a shape that HAS ARCS. The rung above mirrors three straight lines, which is + why it sat green through the defect a user hit on 2026-08-23: a slot mirrored about a vertical + line came back with its caps at r=32.2 and a 237 deg sweep, one rail collapsed from 62.9 mm to + 2.1 mm, and the ORIGINAL was wrecked along with the copy. An arc has five degrees of freedom + and the copy was bound to its source by its CENTRE alone, so the solver was free to answer with + a different, internally consistent sketch. Circles were unaffected — a circle has no endpoints + to leave free — so the failure read as "circles fine, slots and rounded rectangles destroyed". + + Graded on the property the user actually stated: THE APPLIED RESULT IS THE PREVIEW. The copy is + the source reflected, the source does not move, and no arc comes back reflex. + """ + print("\nC4b mirror — a slot, so the reflection has arcs in it") + enter_sketch("l") + click(*CONSTRUCTION_CHECKBOX) + key("l", 0.6) + draw_line(0, -40, 0, 40, 80, 90) # the axis, on x = 0 + click(*CONSTRUCTION_CHECKBOX) + key("s", 0.6) # slot: two centreline ends, then the width + clickmm(-70, -10); clickmm(-30, -10); clickmm(-30, 0) + values(40, 10, 0) # typed, so the slot is exact before mirroring + d0 = describe()["entities"] + axis = [e for e in d0 if e.get("construction")][0] + slot = [e for e in d0 if not e.get("construction")] + arcs0 = [e for e in slot if e["type"] == "arc"] + check("ARC", len(arcs0) == 2, f"{len(arcs0)} caps on the slot") + + key("m", 0.6) + clickmm(*mid(axis)) + for e in slot: + if e["type"] == "line": + clickmm(*mid(e)) + else: # a point ON the arc, at its mid sweep + a = (e["start_angle"] + e["end_angle"]) / 2.0 + clickmm(e["center"][0] + e["radius"] * math.cos(a), + e["center"][1] + e["radius"] * math.sin(a)) + clickmm(60, 60) # empty space confirms + d1 = describe()["entities"] + check("VERTEX", len(d1) == len(d0) + len(slot), + f"{len(d1) - len(d0)} copies for {len(slot)} picked entities") + + # the sources, entity by entity, must be exactly where they were + def shape_of(e): + if e["type"] == "arc": + return (round(e["radius"], 9), round(abs(e["end_angle"] - e["start_angle"]), 9)) + return (round(math.dist(e["p0"], e["p1"]), 9),) + moved = [i for i, e in enumerate(d0) if shape_of(e) != shape_of(d1[i])] + check("VERTEX", not moved, f"the mirror left every source alone (moved: {moved})") + + # and every copy is its source reflected — endpoints unordered, because a reflection + # reverses orientation and legitimately stores p0/p1 the other way round + (ax, ay), (bx, by) = axis["p0"], axis["p1"] + dx, dy = bx - ax, by - ay + n = math.hypot(dx, dy); dx, dy = dx / n, dy / n + def refl(q): + vx, vy = q[0] - ax, q[1] - ay + k = 2.0 * (vx * dx + vy * dy) + return (ax + k * dx - vx, ay + k * dy - vy) + copies = d1[len(d0):] + worst = 0.0 + for e in slot: + best = min(max(min(max(math.dist(refl(e["p0"]), c["p0"]), math.dist(refl(e["p1"]), c["p1"])), + max(math.dist(refl(e["p0"]), c["p1"]), math.dist(refl(e["p1"]), c["p0"]))), + abs(shape_of(e)[0] - shape_of(c)[0])) + for c in copies if c["type"] == e["type"]) + worst = max(worst, best) + check("SYMMETRY", worst <= 1e-6, f"every copy is the exact reflection (worst {worst:.9f})") + reflex = [c for c in copies + if c["type"] == "arc" and abs(c["end_angle"] - c["start_angle"]) > math.pi + 1e-9] + check("ARC", not reflex, f"{len(reflex)} copied cap(s) came back reflex — the 'cloud' failure") + + +RUNGS = {"rect": rung_rect, "circle": rung_circle, "line": rung_line, "arc": rung_arc, + "slot": rung_slot, "polygon": rung_polygon, "ellipse": rung_ellipse, + "point": rung_point, "spline": rung_spline, "voids": rung_voids, + "fillet": rung_fillet, "chamfer": rung_chamfer, "offset": rung_offset, + "mirror": rung_mirror, "mirror_arcs": rung_mirror_arcs, "trim": rung_trim, "extend": rung_extend, + "dimension": rung_dimension, "constrain": rung_constrain, + "perpendicular": rung_perpendicular, + "equal_radius": rung_equal_radius, "collinear": rung_collinear, + "distance_xy": rung_distance_xy, "symmetric_axis": rung_symmetric_axis, + "coincident_points": rung_coincident_points, + "type_guards": rung_type_guards, + "parallel": rung_parallel, "live_constrain": rung_live_constrain, + "vertical": rung_vertical, "equal_radius_button": rung_equal_radius_button, + "concentric": rung_concentric, "tangent": rung_tangent, "midpoint": rung_midpoint, + "symmetric_line_axis": rung_symmetric_line_axis, "symmetric_h": rung_symmetric_h, + "radius": rung_radius, "diameter": rung_diameter, "fix": rung_fix, + "distance_y": rung_distance_y, + "undo": rung_undo, + "feature_undo": rung_feature_undo, "roundtrip": rung_roundtrip, + "scale": rung_scale} + + +def main(): + want = sys.argv[1:] or list(RUNGS) + reset_document() + for name in want: + if name not in RUNGS: + die(f"unknown rung {name}; have {' '.join(RUNGS)}") + RUNGS[name]() + leave_sketch() + print(f"\n{_checks - _fail}/{_checks} properties held") + sys.exit(1 if _fail else 0) + + +if __name__ == "__main__": + main() diff --git a/scripts/CAD/check-mcp-sketch.py b/scripts/CAD/check-mcp-sketch.py new file mode 100755 index 0000000000..2e700921f5 --- /dev/null +++ b/scripts/CAD/check-mcp-sketch.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python3 +"""Autonomous 2D-sketch loop: drive the Design tab's sketch layer over the MCP socket and +assert the things that decide whether a profile is buildable. + +WHY THIS EXISTS. The 2D layer used to be reachable only by clicking, so every question about it +("is this loop closed?", "did the offset survive?", "is the circle a void or a second body?") +cost a GUI session and a human. The socket verbs make each one a call, and this script is the +loop: build a known profile, ask the app what it thinks it has, compare against arithmetic. + +RUN IT AGAINST A RUNNING APP: + ORCA_CAD_MCP=/tmp/mcp.sock # launch with the socket enabled + python3 scripts/CAD/check-mcp-sketch.py [socket] # default /tmp/mcp.sock + +Exit 0 = every assertion held. Anything else prints the first mismatch and stops. +""" +import json, math, socket, sys + +SOCK = sys.argv[1] if len(sys.argv) > 1 else "/tmp/mcp.sock" +_n = 0 + + +def call(method, **params): + global _n + _n += 1 + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(SOCK) + s.sendall((json.dumps({"jsonrpc": "2.0", "id": _n, "method": method, + "params": params}) + "\n").encode()) + buf = b"" + while b"\n" not in buf: + d = s.recv(65536) + if not d: + break + buf += d + r = json.loads(buf.decode().strip()) + if "error" in r: + raise RuntimeError(f"{method}: {r['error']}") + return r["result"] + + +def near(a, b, tol=1e-6): + return abs(a - b) < tol + + +def check(cond, what): + if not cond: + print(f"FAIL: {what}", file=sys.stderr) + sys.exit(1) + print(f" ok {what}") + + +def areas(rep): + return sorted(round(l["area"], 6) for l in rep["closed_loops"]) + + +print("1. a rectangle is one closed loop of exactly its own area") +try: + call("sketch_cancel") +except Exception: + pass +call("sketch_begin", plane="XY") +call("sketch_add", rect=[0, 0, 80, 50]) +r = call("sketch_describe") +check(r["buildable"], "buildable") +check(areas(r) == [4000.0], f"one loop of 4000 mm^2 (got {areas(r)})") + +print("2. a circle inside it is a VOID, not a second profile") +call("sketch_add", type="circle", center=[40, 25], radius=10) +r = call("sketch_describe") +outer = [l for l in r["closed_loops"] if near(l["area"], 4000.0)][0] +check(len(outer["holes"]) == 1, "the rectangle encloses exactly one void") +hole = r["closed_loops"][outer["holes"][0]] +check(near(hole["area"], math.pi * 100), f"the void is pi*r^2 (got {hole['area']})") + +print("3. offsetting the outer loop inward keeps it CLOSED and exact") +call("sketch_select", entities=[0, 1, 2, 3]) +call("sketch_offset", distance=5) +r = call("sketch_describe") +check(r["open_ends"] == [], "no open ends after the offset") +check(any(near(l["area"], 70 * 40) for l in r["closed_loops"]), + f"the offset loop is 70x40 (got {areas(r)})") + +print("4. a gap is REPORTED with its coordinates, then healed into a constraint") +call("sketch_cancel") +call("sketch_begin", plane="XY") +call("sketch_add", entities=[ + {"type": "line", "p0": [0, 0], "p1": [60, 0]}, + {"type": "line", "p0": [60, 0], "p1": [60, 40]}, + {"type": "line", "p0": [60, 40], "p1": [0, 40]}, + {"type": "line", "p0": [0, 40], "p1": [0.4, 0]}, # 0.4 mm short of closing +]) +r = call("sketch_validate", tolerance=1.0) +check(not r["buildable"], "a 0.4 mm gap makes the profile unbuildable") +check(len(r["open_ends"]) == 2, f"both free ends are named (got {r['open_ends']})") +dof_before = r["dof"] +r = call("sketch_heal", tolerance=1.0) +check(r["welded"] == 1, f"one pair welded (got {r['welded']})") +check(r["buildable"] and r["open_ends"] == [], "healed profile is buildable") +check(areas(r) == [2400.0], f"healed loop is 60x40 (got {areas(r)})") +check(r["dof"] < dof_before, + f"the weld recorded a real constraint: DoF {dof_before} -> {r['dof']}") + +print("5. construction geometry is excluded from the profile") +call("sketch_select", entities=[0]) +call("sketch_construction") +r = call("sketch_describe") +check(not r["buildable"], "turning one side into a guide opens the profile again") +call("sketch_construction") +r = call("sketch_describe") +check(r["buildable"], "turning it back closes it again") + +print("6. re-dimensioning one side keeps the rectangle a single closed loop") +call("sketch_cancel") +call("sketch_begin", plane="XY") +call("sketch_add", rect=[0, 0, 60, 40]) +r = call("sketch_describe") +check(areas(r) == [2400.0], f"one loop of 2400 mm^2 (got {areas(r)})") +call("sketch_select", entities=[0]) # the bottom edge, y=0, from x=0 to x=60 +r = call("sketch_set_value", value=40) +check(r["kind"] == "length", f"dimension kind is length (got {r['kind']})") +check(near(r["before"], 60), f"the edge measured 60 before (got {r['before']})") +r = call("sketch_describe") +check(len(r["closed_loops"]) == 1, "the rectangle is still exactly one closed loop") +check(r["open_ends"] == [], "no open ends after re-dimensioning") +# The point of the whole section: a rectangle must SURVIVE one side being re-dimensioned. We do +# not assert a specific area — only that the topology held — but print it so a topology-preserving +# yet geometry-wrong result is visible in the output. +print(f" note resulting rectangle area = {areas(r)} mm^2 (topology held; geometry is what it is)") + +call("sketch_cancel") +print("\nall sketch assertions held") diff --git a/scripts/CAD/check-sketch-engine-corpus.py b/scripts/CAD/check-sketch-engine-corpus.py new file mode 100644 index 0000000000..20eca5d381 --- /dev/null +++ b/scripts/CAD/check-sketch-engine-corpus.py @@ -0,0 +1,492 @@ +#!/usr/bin/env python3 +"""Rung 9: the ladder, graded against real drawings instead of shapes I chose. + +Rungs 1-8 are hand-built. That is their weakness: I wrote both the geometry and the +assertion, so they prove the engine does what I expected on cases I picked. This rung +takes a SYSTEMATIC sample of the StudyCadCam corpus (every 20th sheet, 1..996 — no +cherry-picking) and grades the engine against each drawing's OWN vector geometry, +extracted from the PDF. Nothing here is transcribed by eye; the drawing is the input. + +The method: pdftocairo renders the sheet to SVG, where the drawn geometry is exactly the +stroked (fill="none") paths and the text is filled glyph paths. Beziers are flattened, so +every entity handed to the engine is a straight line and every comparison below is EXACT +— no faceting tolerance to hide behind. The closed chains are then found twice: once by +this script, in plain Python, and once by the engine. The assertions are that the two +agree, and that the engine's own operations preserve what they promise. + + CLOSED the engine finds the same closed loops this script does + AREA the engine's area for each loop equals the shoelace area, to 1e-6 + VOID the engine attributes each void to the loop that actually contains it + MIRROR a real closed profile, mirrored, is still exactly one closed loop + OFFSET a real closed profile, offset, is still closed + +Usage: check-sketch-engine-corpus.py [--sample N] [--corpus DIR] +""" + +import argparse +import glob +import json +import math +import os +import re +import socket +import subprocess +import sys +import tempfile +import time + +SOCK = os.environ.get("ORCA_CAD_MCP", "/tmp/mcp.sock") +TOL = 1e-6 # exact-comparison tolerance (all inputs are lines) +WELD = 0.05 # endpoint-coincidence tolerance, in PDF units + + +# ── the socket ─────────────────────────────────────────────────────────────── +_id = [0] + + +def try_call(method, **params): + """sketch_cancel throws when nothing is open, which is not an error to us.""" + try: + return call(method, **params) + except RuntimeError: + return None + + +def call(method, **params): + _id[0] += 1 + req = json.dumps({"jsonrpc": "2.0", "id": _id[0], "method": method, + "params": params}) + "\n" + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(SOCK) + s.sendall(req.encode()) + buf = b"" + while not buf.endswith(b"\n"): + chunk = s.recv(65536) + if not chunk: + break + buf += chunk + s.close() + r = json.loads(buf.decode()) + if "error" in r: + raise RuntimeError(r["error"]["message"]) + return r["result"] + + +# ── SVG → line segments ────────────────────────────────────────────────────── +NUM = r"[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?" + + +def bezier(p0, p1, p2, p3, n=16): + """Flatten a cubic to n straight segments — the engine then sees only lines.""" + out = [] + for i in range(n): + t0, t1 = i / n, (i + 1) / n + pts = [] + for t in (t0, t1): + u = 1 - t + x = (u ** 3 * p0[0] + 3 * u * u * t * p1[0] + + 3 * u * t * t * p2[0] + t ** 3 * p3[0]) + y = (u ** 3 * p0[1] + 3 * u * u * t * p1[1] + + 3 * u * t * t * p2[1] + t ** 3 * p3[1]) + pts.append((x, y)) + out.append((pts[0], pts[1])) + return out + + +def path_segments(d): + """Parse one SVG path's `d` into straight segments.""" + toks = re.findall(r"([MLCZmlcz])|(" + NUM + ")", d) + cmds, cur, start, segs, i = [], None, None, [], 0 + flat = [] + for a, b in toks: + flat.append(a if a else float(b)) + while i < len(flat): + t = flat[i] + if isinstance(t, str): + cmd = t + i += 1 + # numbers repeat the previous command, as SVG allows + if cmd in ("M", "m"): + x, y = flat[i], flat[i + 1]; i += 2 + cur = (x, y); start = cur + elif cmd in ("L", "l"): + x, y = flat[i], flat[i + 1]; i += 2 + segs.append((cur, (x, y))); cur = (x, y) + elif cmd in ("C", "c"): + p1 = (flat[i], flat[i + 1]); p2 = (flat[i + 2], flat[i + 3]) + p3 = (flat[i + 4], flat[i + 5]); i += 6 + segs.extend(bezier(cur, p1, p2, p3)); cur = p3 + elif cmd in ("Z", "z"): + if cur and start and dist(cur, start) > TOL: + segs.append((cur, start)) + cur = start + else: + i += 1 + return segs + + +def dist(a, b): + return math.hypot(a[0] - b[0], a[1] - b[1]) + + +def drawing_segments(pdf): + """Every stroked segment on the sheet, in PDF units (y already flipped up).""" + with tempfile.TemporaryDirectory() as td: + svg = os.path.join(td, "p.svg") + subprocess.run(["pdftocairo", "-svg", pdf, svg], + check=True, capture_output=True) + s = open(svg).read() + segs = [] + # Drawn geometry is stroked with no fill; glyphs are filled with no stroke. + for m in re.finditer(r']*)d="([^"]+)"', s): + attrs, d = m.group(1), m.group(2) + if 'fill="none"' not in attrs or "stroke=" not in attrs: + continue + segs.extend(path_segments(d)) + return [((a[0], -a[1]), (b[0], -b[1])) for a, b in segs if dist(a, b) > TOL] + + +# ── closed-chain finding, independent of the engine ────────────────────────── +def find_loops(segs): + """Chain segments into closed loops. Returns a list of point rings.""" + key = lambda p: (round(p[0] / WELD), round(p[1] / WELD)) + adj = {} + for i, (a, b) in enumerate(segs): + adj.setdefault(key(a), []).append((i, a, b)) + adj.setdefault(key(b), []).append((i, b, a)) + used, loops = set(), [] + for i0 in range(len(segs)): + if i0 in used: + continue + a, b = segs[i0] + ring, cur, prev = [a, b], b, i0 + used.add(i0) + while True: + nxt = None + for (j, p, q) in adj.get(key(cur), []): + if j in used: + continue + nxt = (j, q) + break + if nxt is None: + break + used.add(nxt[0]) + cur = nxt[1] + ring.append(cur) + if dist(cur, ring[0]) <= WELD: + # Snap the seam shut. The gap is a flattening artefact of the PDF, up to + # WELD wide, and handing the engine a ring that misses closing by 0.03 would + # be testing my extractor's sloppiness rather than the engine's chaining. + ring[-1] = ring[0] + loops.append(ring) + ring = None + break + # an open chain is simply not a loop; it is dropped + return loops + + +def shoelace(ring): + a = 0.0 + for i in range(len(ring) - 1): + a += ring[i][0] * ring[i + 1][1] - ring[i + 1][0] * ring[i][1] + return abs(a) * 0.5 + + +def point_in(pt, ring): + inside = False + for i in range(len(ring) - 1): + A, B = ring[i], ring[i + 1] + if (A[1] > pt[1]) != (B[1] > pt[1]) and \ + pt[0] < (B[0] - A[0]) * (pt[1] - A[1]) / (B[1] - A[1]) + A[0]: + inside = not inside + return inside + + +def interior_point(ring): + """A point strictly inside a simple closed ring (first == last). + + The lowest vertex of a simple polygon is always convex, so stepping from it along the + bisector of its two edges goes inward; the step is a small fraction of the shorter edge so + it stays inside however sharp the corner is. + """ + q = ring[:-1] if len(ring) > 1 and ring[0] == ring[-1] else ring + if len(q) < 3: + return ring[0] + k = min(range(len(q)), key=lambda i: (q[i][1], q[i][0])) + v = q[k] + a = (q[(k - 1) % len(q)][0] - v[0], q[(k - 1) % len(q)][1] - v[1]) + b = (q[(k + 1) % len(q)][0] - v[0], q[(k + 1) % len(q)][1] - v[1]) + la, lb = math.hypot(*a), math.hypot(*b) + if la < 1e-12 or lb < 1e-12: + return v + a = (a[0] / la, a[1] / la) + b = (b[0] / lb, b[1] / lb) + bx, by = a[0] + b[0], a[1] + b[1] + n = math.hypot(bx, by) + if n < 1e-12: + return v + step = 1e-3 * min(la, lb) + return (v[0] + bx / n * step, v[1] + by / n * step) + + +# ── one drawing ────────────────────────────────────────────────────────────── +def grade(pdf, name, report): + segs = drawing_segments(pdf) + loops = find_loops(segs) + if len(loops) < 2: + report(name, "SKIP", f"no nested closed geometry found ({len(loops)} loops)") + return None + + # The biggest loop is the sheet frame; the part outlines live inside it. Take the + # largest loop that is NOT the frame, plus every loop contained in it. + loops.sort(key=shoelace, reverse=True) + outer = loops[1] + voids = [r for r in loops[2:] + if shoelace(r) > 1.0 and point_in(r[0], outer)] + if shoelace(outer) < 100.0: + # Not a defect and not a near miss: on these sheets the part outline is not a closed + # stroked path at all, so the only loops extraction recovers are glyph counters and + # arrowheads. Measured on MPD12/30/31/60: the LARGEST loop on the sheet is 5 to 132 mm2. + # Say the number, so nobody has to re-measure to know which kind of skip this is. + report(name, "SKIP", f"no part outline on this sheet — largest loop is only " + f"{shoelace(outer):.1f} mm2") + return None + + # Feed the drawing's own geometry to the engine, as lines only. + ents = [] + rings = [outer] + voids + for ring in rings: + for i in range(len(ring) - 1): + ents.append({"type": "line", + "p0": [ring[i][0], ring[i][1]], + "p1": [ring[i + 1][0], ring[i + 1][1]]}) + try_call("sketch_cancel") + call("sketch_begin", plane="XY") + call("sketch_add", entities=ents) + r = call("sketch_describe") + + ok = True + got = r["closed_loops"] + ok &= report(name, "CLOSED", f"engine finds {len(got)} closed loops, this script " + f"finds {len(rings)}", len(got) == len(rings)) + + # AREA — exact, because every entity is a line + mine = sorted(shoelace(x) for x in rings) + theirs = sorted(abs(l["area"]) for l in got) + # The bar: 1e-3 absolute, or 1e-6 relative for the big loops. Not bit-exactness — the + # auto-constraint pass still snaps segments that are already axis-aligned to within its + # 1e-4 rad tolerance, which moves an area by ~1e-4. It is deliberately tight enough to + # have caught the real defect this rung was written for: with the old 3 degree gesture + # slack applied to scripted input, a flattened circle came back 0.067% small — 0.266 on + # an area of 397, some 300x above this line. + same = len(mine) == len(theirs) and all( + abs(a - b) <= max(1e-3, 1e-6 * a) for a, b in zip(mine, theirs)) + ok &= report(name, "AREA", "every loop area matches the shoelace value exactly", same) + + # VOID — a loop belongs to the SMALLEST loop that contains it, not to every loop that + # encloses it. A hole inside a boss inside the part is a void of the boss, and the part + # owns the boss. Comparing against "everything inside the outline" was measuring my own + # sloppiness: on MPD781 that counted 36 voids where 26 of them are nested inside another + # void. So compute the same rule here, independently, and compare the whole attribution. + if got: + rings = [outer] + voids + # Probe from a point STRICTLY INSIDE each ring, never from one of its vertices — the + # same rule the engine now uses (DesignSketchTool::region_loops). A vertex is exactly + # where two loops touch in a real drawing, and a ray cast from a point lying ON the + # polygon under test answers by rounding: that alone accounted for every one of the 6 + # sheets where the two attributions used to disagree. 5hvl. + probes = [interior_point(r) for r in rings] + mine_parent = {} + for i, r in enumerate(rings): + best, best_a = -1, 0.0 + for j, q in enumerate(rings): + if i == j or not point_in(probes[i], q): + continue + a = shoelace(q) + if best < 0 or a < best_a: + best, best_a = j, a + if best >= 0: + mine_parent.setdefault(best, []).append(i) + big = max(range(len(got)), key=lambda i: abs(got[i]["area"])) + # match engine loops to my rings by area, then compare the two attributions by COUNT + mine_counts = sorted(len(v) for v in mine_parent.values()) + got_counts = sorted(len(l["holes"]) for l in got if l["holes"]) + ok &= report(name, "VOID", + f"void attribution matches: engine {got_counts}, containment " + f"{mine_counts}", got_counts == mine_counts) + + # MIRROR / OFFSET — engine operations on a REAL profile, not a tidy one + n_outer = len(outer) - 1 + try_call("sketch_cancel") + call("sketch_begin", plane="XY") + call("sketch_add", entities=ents[:n_outer]) + xs = [p[0] for p in outer] + axis = min(xs) - 10.0 + call("sketch_select", entities=list(range(n_outer))) + try: + call("sketch_mirror", axis_a=[axis, 0], axis_b=[axis, 1]) + m = call("sketch_describe") + ok &= report(name, "MIRROR", "the mirrored copy is closed too", + len(m["closed_loops"]) == 2 and m["open_ends"] == []) + except RuntimeError as e: + ok &= report(name, "MIRROR", f"refused: {e}", False) + + try_call("sketch_cancel") + call("sketch_begin", plane="XY") + call("sketch_add", entities=ents[:n_outer]) + try: + call("sketch_offset", distance=0.5, entities=list(range(n_outer))) + o = call("sketch_describe") + ok &= report(name, "OFFSET", "the offset profile is still closed", + any(l["closed"] for l in o["closed_loops"])) + except RuntimeError as e: + ok &= report(name, "OFFSET", f"refused: {e}", False) + return ok + + +# ── scale ──────────────────────────────────────────────────────────────────── +def grade_scale(pdf, name, report, budget): + """Same exactness, on a profile of several hundred entities, and timed. + + "Interactive" is measurable from here even though nothing is clicked: every MCP verb is + serviced on the UI THREAD, so the time a reply takes is time the window was not repainting. + A round trip that stays inside the budget is a window that stayed responsive. + """ + segs = drawing_segments(pdf) + loops = find_loops(segs) + if len(loops) < 2: + report(name, "SKIP", f"no nested closed geometry found ({len(loops)} loops)") + return None + loops.sort(key=shoelace, reverse=True) + outer = loops[1] + voids = [r for r in loops[2:] if shoelace(r) > 1.0 and point_in(r[0], outer)] + rings = [outer] + voids + ents = [] + for ring in rings: + for i in range(len(ring) - 1): + ents.append({"type": "line", + "p0": [ring[i][0], ring[i][1]], + "p1": [ring[i + 1][0], ring[i + 1][1]]}) + if len(ents) < 300: + report(name, "SKIP", f"only {len(ents)} entities — not a scale case") + return None + + try_call("sketch_cancel") + call("sketch_begin", plane="XY") + t0 = time.monotonic(); call("sketch_add", entities=ents); t_add = time.monotonic() - t0 + t0 = time.monotonic(); r = call("sketch_describe"); t_desc = time.monotonic() - t0 + t0 = time.monotonic(); call("sketch_select", entities=list(range(len(ents)))) + t_sel = time.monotonic() - t0 + t0 = time.monotonic(); call("sketch_validate"); t_val = time.monotonic() - t0 + + ok = True + ok &= report(name, "SCALE", f"{len(ents)} entities in {len(rings)} loops", True) + got = r["closed_loops"] + ok &= report(name, "CLOSED", f"engine finds {len(got)} closed loops, this script " + f"finds {len(rings)}", len(got) == len(rings)) + mine = sorted(shoelace(x) for x in rings) + theirs = sorted(abs(l["area"]) for l in got) + same = len(mine) == len(theirs) and all( + abs(a - b) <= max(1e-3, 1e-6 * a) for a, b in zip(mine, theirs)) + ok &= report(name, "AREA", "every loop area matches the shoelace value exactly", same) + worst = max(t_add, t_desc, t_sel, t_val) + ok &= report(name, "TIME", f"add {t_add*1000:.0f} ms, describe {t_desc*1000:.0f} ms, " + f"select {t_sel*1000:.0f} ms, validate {t_val*1000:.0f} ms " + f"(budget {budget*1000:.0f} ms)", worst <= budget) + return ok + + +def _pdf_error(path): + """What poppler says about a file it refused, so a refusal can be classified.""" + r = subprocess.run(["pdfinfo", path], capture_output=True, text=True) + return (r.stderr or "") + (r.stdout or "") + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--corpus", default=os.path.expanduser("~/studycadcam")) + ap.add_argument("--step", type=int, default=20) + ap.add_argument("--limit", type=int, default=0) + ap.add_argument("--scale", action="store_true", + help="grade the LARGEST drawings instead: exactness plus a UI-thread budget") + ap.add_argument("--budget", type=float, default=2.0, + help="seconds; the slowest round trip a scale drawing may take") + a = ap.parse_args() + + files = {} + for f in glob.glob(os.path.join(a.corpus, "MPD*.pdf")): + m = re.search(r"MPD(\d+)", os.path.basename(f)) + if m: + files[int(m.group(1))] = f + # step 1 means EVERY sheet. Written as `n % step == 1` it silently selected nothing, because + # n % 1 is always 0 — and the run then printed "RUNG 9 HELD" over zero drawings graded. A + # gate that passes by grading nothing is worse than no gate, so the count is checked below. + picks = [files[n] for n in sorted(files) if a.step <= 1 or n % a.step == 1] + if a.scale: + # The heaviest real profiles in the corpus, biggest first — up to ~1300 entities. + sized = [] + for f in files.values(): + try: + segs = drawing_segments(f) + loops = find_loops(segs) + if len(loops) < 2: + continue + loops.sort(key=shoelace, reverse=True) + outer = loops[1] + voids = [r for r in loops[2:] if shoelace(r) > 1.0 and point_in(r[0], outer)] + sized.append((sum(len(r) - 1 for r in [outer] + voids), f)) + except Exception: # noqa: BLE001 + continue + sized.sort(reverse=True) + picks = [f for _, f in sized[:max(1, a.limit or 6)]] + elif a.limit: + picks = picks[:a.limit] + print(f"corpus: {len(files)} sheets; systematic sample every {a.step}th " + f"-> {len(picks)} drawings\n") + + fails, results = [], [] + + def report(name, tag, msg, cond=True): + if tag == "SKIP": + print(f" {name:9s} SKIP {msg}") + return True + mark = "ok " if cond else "FAIL" + print(f" {name:9s} {tag:8s} {mark} {msg}") + if not cond: + fails.append(f"{name} {tag}: {msg}") + return cond + + for f in picks: + name = re.search(r"MPD\d+", os.path.basename(f)).group(0) + try: + r = (grade_scale(f, name, report, a.budget) if a.scale + else grade(f, name, report)) + if r is not None: + results.append((name, r)) + except Exception as e: # noqa: BLE001 + # An unreadable SOURCE file is not a grading failure. MPD133 of this corpus is + # password-protected, and pdftocairo says so on stderr while exiting non-zero; + # reporting that as ERROR made one encrypted sheet look like an engine defect. + if "password" in _pdf_error(f).lower(): + report(name, "SKIP", "the PDF is password-protected — nothing to extract") + else: + report(name, "ERROR", str(e)[:120], False) + + graded = len(results) + passed = sum(1 for _, r in results if r) + if graded == 0: + print("\nNOTHING WAS GRADED — that is a harness failure, not a clean run", file=sys.stderr) + sys.exit(2) + print(f"\ngraded {graded} drawings; {passed} fully clean, {graded - passed} with " + f"at least one failure") + if fails: + print("\nfailures:") + for x in fails: + print(" " + x) + sys.exit(1) + print("\nRUNG 9 HELD — the engine agrees with the drawings, not with me") + + +if __name__ == "__main__": + main() diff --git a/scripts/CAD/check-sketch-engine.py b/scripts/CAD/check-sketch-engine.py new file mode 100755 index 0000000000..56fee44568 --- /dev/null +++ b/scripts/CAD/check-sketch-engine.py @@ -0,0 +1,352 @@ +#!/usr/bin/env python3 +"""A ladder of 2D sketches of increasing complexity, judged the way a person judges them. + +WHY NOT AREA. Area is derived and no one can confirm it by looking. What a human checks at a +glance, and can be exactly right or exactly wrong about, is: + + VERTEX is the corner where I said it is + LENGTH is the side the length I gave it + ARC is the radius the radius I gave it + TANGENT does the straight run into the curve smoothly, or is there a kink + SYMMETRY is the mirrored half the exact reflection of the half I drew + CLOSED is it one closed loop, or does it just look like one + +Every rung asserts those. Area appears only as a cross-check, never as the verdict. + +Entirely 2D: sketch entities only, no extrude, revolve or any solid feature. + + ORCA_CAD_MCP=/tmp/mcp.sock + python3 scripts/CAD/check-sketch-engine.py [socket] + +Exit 0 = every rung held. Otherwise the first broken property is named and the run stops. +""" +import json, math, socket, sys + +SOCK = sys.argv[1] if len(sys.argv) > 1 else "/tmp/mcp.sock" +EPS = 1e-9 +_n = 0 +_fail = 0 + + +def call(method, **params): + global _n + _n += 1 + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(30) + s.connect(SOCK) + s.sendall((json.dumps({"jsonrpc": "2.0", "id": _n, "method": method, + "params": params}) + "\n").encode()) + buf = b"" + while b"\n" not in buf: + d = s.recv(65536) + if not d: + break + buf += d + r = json.loads(buf.decode().strip()) + if "error" in r: + raise RuntimeError(f"{method}: {r['error']['message']}") + return r["result"] + + +def check(kind, cond, what): + global _fail + if cond: + print(f" {kind:9s} ok {what}") + else: + print(f" {kind:9s} FAIL {what}", file=sys.stderr) + _fail += 1 + + +def near(a, b, tol=1e-6): + return abs(a - b) <= tol + + +def pt_near(p, q, tol=1e-6): + return math.hypot(p[0] - q[0], p[1] - q[1]) <= tol + + +def fresh(plane="XY"): + try: + call("sketch_cancel") + except Exception: + pass + call("sketch_begin", plane=plane) + + +def ents(): + return call("sketch_describe")["entities"] + + +def rep(): + return call("sketch_describe") + + +def endpoints(e): + """Both ends of an open curve, as tuples. Closed curves have none.""" + if "p0" not in e or "p1" not in e: + return () + return tuple(e["p0"]), tuple(e["p1"]) + + +def tangent(e, at_end): + """Unit tangent of entity e at one of its ends, pointing ALONG the curve (p0->p1).""" + if e["type"] == "line": + dx = e["p1"][0] - e["p0"][0] + dy = e["p1"][1] - e["p0"][1] + else: # arc + a = e["start_angle"] if not at_end else e["end_angle"] + ccw = e["end_angle"] >= e["start_angle"] + # d/dtheta (cos, sin) = (-sin, cos), reversed when the sweep is clockwise + dx, dy = -math.sin(a), math.cos(a) + if not ccw: + dx, dy = -dx, -dy + n = math.hypot(dx, dy) + return (dx / n, dy / n) + + +def tangent_at_point(e, p): + """Unit tangent of e at whichever of its ends is p, oriented leaving that point.""" + p0, p1 = endpoints(e) + if pt_near(p0, p): + t = tangent(e, False) + return t + t = tangent(e, True) + return (-t[0], -t[1]) # leaving p1 means going back along the curve + + +def smooth(e1, e2, p): + """G1 at shared point p: the tangent leaving e1 is opposite the tangent leaving e2.""" + a = tangent_at_point(e1, p) + b = tangent_at_point(e2, p) + return abs(a[0] * (-b[0]) - 0) >= 0 and abs(a[0] * b[1] - a[1] * b[0]) <= 1e-6 + + +def closed_one_loop(r, voids=0): + return (r["buildable"] and r["open_ends"] == [] + and len([l for l in r["closed_loops"] if not any( + i in h["holes"] for h in r["closed_loops"] for i in [])]) >= 1) + + +def outer_loop(r): + """The loop that encloses the others (or the only one).""" + if not r["closed_loops"]: + return None + return max(r["closed_loops"], key=lambda l: abs(l["area"])) + + +# ───────────────────────────────────────────────────────────────────────────── +print("RUNG 1 — rectangle: four corners, four lengths, four right angles") +fresh() +W, H = 80.0, 50.0 +call("sketch_add", rect=[0, 0, W, H]) +r = rep() +es = r["entities"] +corners = {(0, 0), (W, 0), (W, H), (0, H)} +got = set() +for e in es: + got.add(tuple(e["p0"])) + got.add(tuple(e["p1"])) +check("VERTEX", all(any(pt_near(c, g) for g in got) for c in corners), + f"all four corners exactly where asked {sorted(corners)}") +lens = sorted(round(e["length"], 9) for e in es) +check("LENGTH", lens == sorted([W, W, H, H]), f"sides are {W}/{H} twice each (got {lens})") +# right angles: consecutive sides meet at 90 degrees +ang_ok = True +for e in es: + for f in es: + if e is f: + continue + for p in endpoints(e): + if any(pt_near(p, q) for q in endpoints(f)): + a, b = tangent_at_point(e, p), tangent_at_point(f, p) + if abs(a[0] * b[0] + a[1] * b[1]) > 1e-6: + ang_ok = False +check("ANGLE", ang_ok, "every corner is exactly 90 degrees") +check("CLOSED", r["buildable"] and r["open_ends"] == [], "one closed loop, no free ends") + +print("\nRUNG 2 — a circular void inside it") +call("sketch_add", type="circle", center=[W / 2, H / 2], radius=12) +r = rep() +c = [e for e in r["entities"] if e["type"] == "circle"][0] +check("VERTEX", pt_near(tuple(c["center"]), (W / 2, H / 2)), "void centred exactly where asked") +check("ARC", near(c["radius"], 12), f"void radius exactly 12 (got {c['radius']})") +out = outer_loop(r) +check("CLOSED", len(out["holes"]) == 1, "the rectangle encloses exactly one void") +check("CLOSED", r["buildable"] and r["open_ends"] == [], "still closed with the void present") + +print("\nRUNG 3 — stadium: straights running into caps, tangent at every junction") +fresh() +L, R = 50.0, 15.0 +call("sketch_add", entities=[ + {"type": "line", "p0": [-L, -R], "p1": [L, -R]}, + {"type": "arc", "center": [L, 0], "radius": R, + "start_angle": -math.pi / 2, "end_angle": math.pi / 2}, + {"type": "line", "p0": [L, R], "p1": [-L, R]}, + {"type": "arc", "center": [-L, 0], "radius": R, + "start_angle": math.pi / 2, "end_angle": 3 * math.pi / 2}, +]) +r = rep() +es = r["entities"] +check("CLOSED", r["buildable"] and r["open_ends"] == [], "one closed loop, no free ends") +arcs = [e for e in es if e["type"] == "arc"] +check("ARC", all(near(a["radius"], R) for a in arcs), f"both caps exactly R={R}") +check("LENGTH", all(near(e["length"], 2 * L) for e in es if e["type"] == "line"), + f"both straights exactly {2*L}") +# tangency at all four line/arc junctions +tang = True +for a in arcs: + for p in endpoints(a): + mates = [e for e in es if e is not a and any(pt_near(p, q) for q in endpoints(e))] + for m in mates: + if not smooth(a, m, p): + tang = False +check("TANGENT", tang, "straight meets cap smoothly at all four junctions (no kink)") + +print("\nRUNG 4 — mirror: the reflected half is the exact reflection") +fresh() +half = [ + {"type": "line", "p0": [0, -R], "p1": [L, -R]}, + {"type": "arc", "center": [L, 0], "radius": R, + "start_angle": -math.pi / 2, "end_angle": math.pi / 2}, + {"type": "line", "p0": [L, R], "p1": [0, R]}, +] +call("sketch_add", entities=half) +r = rep() +check("CLOSED", not r["buildable"] and len(r["open_ends"]) == 2, + f"half profile is correctly OPEN, both ends named {r['open_ends']}") +call("sketch_select", entities=[0, 1, 2]) +call("sketch_mirror", axis_a=[0, 0], axis_b=[0, 1]) +r = rep() +es = r["entities"] +check("CLOSED", r["buildable"] and r["open_ends"] == [], "mirroring closed the loop") +# every source vertex must have its exact reflection present +src = [] +for e in es[:3]: + src += [tuple(e["p0"]), tuple(e["p1"])] +allv = [] +for e in es: + allv += [tuple(e["p0"]), tuple(e["p1"])] +sym = all(any(pt_near((-x, y), v) for v in allv) for (x, y) in src) +check("SYMMETRY", sym, "every vertex has its exact mirror twin across x=0") +mirrored_arc = [e for e in es[3:] if e["type"] == "arc"] +check("ARC", mirrored_arc and near(mirrored_arc[0]["radius"], R) + and pt_near(tuple(mirrored_arc[0]["center"]), (-L, 0)), + f"mirrored cap keeps R={R} and lands at (-{L}, 0)") + +print("\nRUNG 5 — offset: every curve moves by exactly d, and it stays closed") +d = 4.0 +call("sketch_select", entities=list(range(len(es)))) +call("sketch_offset", distance=-d) # -d = outward for this CCW loop +r = rep() +new = r["entities"][len(es):] +check("CLOSED", r["buildable"] and r["open_ends"] == [], "offset result is closed") +off_arcs = [e for e in new if e["type"] == "arc"] +check("ARC", all(near(a["radius"], R + d) for a in off_arcs), + f"each cap radius grew by exactly {d} -> {R+d}") +off_lines = [e for e in new if e["type"] == "line"] +check("VERTEX", all(near(abs(e["p0"][1]), R + d) for e in off_lines), + f"each straight moved out to |y| = {R+d} exactly") + +print("\nRUNG 6 — a gap is found by coordinate, then closed by a real constraint") +fresh() +call("sketch_add", entities=[ + {"type": "line", "p0": [0, 0], "p1": [60, 0]}, + {"type": "line", "p0": [60, 0], "p1": [60, 40]}, + {"type": "line", "p0": [60, 40], "p1": [0, 40]}, + {"type": "line", "p0": [0, 40], "p1": [0.35, 0]}, # 0.35 mm short +]) +r = call("sketch_validate", tolerance=1.0) +check("CLOSED", not r["buildable"] and len(r["open_ends"]) == 2, + f"the gap is reported, both free ends named {r['open_ends']}") +dof0 = r["dof"] +r = call("sketch_heal", tolerance=1.0) +check("CLOSED", r["buildable"] and r["open_ends"] == [], "healed into a closed loop") +check("VERTEX", r["welded"] == 1, "exactly one pair of vertices welded") +check("ANGLE", r["dof"] < dof0, + f"the weld is a real constraint, not a nudge: DoF {dof0} -> {r['dof']}") +es = ents() +check("VERTEX", pt_near(tuple(es[3]["p1"]), tuple(es[0]["p0"])), + "the two ends are now the same point") + +print("\nRUNG 7 — the composite: mirrored, tangent, two voids, all at once") +fresh() +call("sketch_add", entities=half) +call("sketch_select", entities=[0, 1, 2]) +call("sketch_mirror", axis_a=[0, 0], axis_b=[0, 1]) +call("sketch_add", type="circle", center=[-25, 0], radius=6) +call("sketch_add", type="circle", center=[25, 0], radius=6) +r = rep() +es = r["entities"] +out = outer_loop(r) +check("CLOSED", r["buildable"] and r["open_ends"] == [], "one closed outer loop, no free ends") +check("CLOSED", len(out["holes"]) == 2, "it encloses exactly two voids") +circles = [e for e in es if e["type"] == "circle"] +check("ARC", all(near(c["radius"], 6) for c in circles), "both voids exactly R=6") +check("SYMMETRY", pt_near(tuple(circles[0]["center"]), (-25, 0)) + and pt_near(tuple(circles[1]["center"]), (25, 0)), + "the voids sit symmetrically at x = -25 and +25") +tang = True +for a in [e for e in es if e["type"] == "arc"]: + for p in endpoints(a): + for m in [e for e in es if e is not a and any(pt_near(p, q) for q in endpoints(e))]: + if not smooth(a, m, p): + tang = False +check("TANGENT", tang, "every straight-to-cap junction is still smooth") +exact = 2 * L * 2 * R + math.pi * R * R +check("LENGTH", near(out["area"], exact, 1e-6), + f"cross-check: enclosed area {out['area']:.4f} = 2L*2R + pi*R^2 = {exact:.4f}") + +print("\nRUNG 8 — a real drawing: StudyCadCam MPD5, the pin's revolve half-profile") +# Ø27 x 95 pin: C1 chamfer on the left end, cylinder to a corner at x=85, an R5 fillet into a +# cone at 23 degrees to the axis, right face at x=95. Interpretation stated so the rung is +# reproducible: 85 is to the CORNER, 23 deg is to the AXIS, C1 is 1 x 45. +fresh() +RAD, LEN, TX, ANG, RF, CH = 13.5, 95.0, 85.0, math.radians(23), 5.0, 1.0 +t = RF * math.tan(ANG / 2) +ax, ay = TX - t, RAD # fillet tangent point on the cylinder +cx, cy = ax, RAD - RF # fillet centre +bx, by = TX + t * math.cos(-ANG), RAD + t * math.sin(-ANG) # tangent point on the cone +ey = by - (LEN - bx) * math.tan(ANG) # where the cone meets the right face +call("sketch_add", entities=[ + {"type": "line", "p0": [0, 0], "p1": [0, RAD - CH]}, # left face + {"type": "line", "p0": [0, RAD - CH], "p1": [CH, RAD]}, # C1 chamfer + {"type": "line", "p0": [CH, RAD], "p1": [ax, ay]}, # cylinder top + {"type": "arc", "center": [cx, cy], "radius": RF, + "start_angle": math.pi / 2, "end_angle": math.pi / 2 - ANG}, # R5 fillet + {"type": "line", "p0": [bx, by], "p1": [LEN, ey]}, # 23 deg cone + {"type": "line", "p0": [LEN, ey], "p1": [LEN, 0]}, # right face + {"type": "line", "p0": [LEN, 0], "p1": [0, 0]}, # axis +]) +r = rep() +es = r["entities"] +check("CLOSED", r["buildable"] and r["open_ends"] == [], "the half-profile is one closed loop") +xs = [v[0] for e in es if "p0" in e for v in (e["p0"], e["p1"])] +ys = [v[1] for e in es if "p0" in e for v in (e["p0"], e["p1"])] +check("LENGTH", near(max(xs) - min(xs), LEN), f"overall length exactly {LEN} (the 95 dimension)") +check("VERTEX", near(max(ys), RAD), f"outer radius exactly {RAD} (the dia 27)") +fil = [e for e in es if e["type"] == "arc"][0] +check("ARC", near(fil["radius"], RF), f"the corner fillet is exactly R{RF:g}") +cone = [e for e in es if e["type"] == "line" + and not near(e["p0"][0], e["p1"][0]) and not near(e["p0"][1], e["p1"][1]) + and e["length"] > 5] +if cone: + c0 = cone[0] + a = abs(math.degrees(math.atan2(c0["p1"][1] - c0["p0"][1], c0["p1"][0] - c0["p0"][0]))) + check("ANGLE", near(a, 23, 1e-6), f"the cone is exactly 23 degrees to the axis (got {a:.6f})") +cham = [e for e in es if e["type"] == "line" and near(e["length"], CH * math.sqrt(2), 1e-9)] +check("ANGLE", bool(cham), "the C1 chamfer is exactly 1 x 45 (length 1*sqrt2)") +tang = True +for p in endpoints(fil): + for m in [e for e in es if e is not fil and any(pt_near(p, q) for q in endpoints(e))]: + if not smooth(fil, m, p): + tang = False +check("TANGENT", tang, "the fillet is tangent to BOTH the cylinder and the cone (no kink)") + +call("sketch_cancel") + +try: + call("sketch_cancel") +except Exception: + pass # a rung may have closed it already +print(f"\n{'ALL RUNGS HELD' if _fail == 0 else str(_fail) + ' CHECK(S) FAILED'}") +sys.exit(1 if _fail else 0) diff --git a/scripts/CAD/focus-loop.sh b/scripts/CAD/focus-loop.sh new file mode 100755 index 0000000000..3c75f64a49 --- /dev/null +++ b/scripts/CAD/focus-loop.sh @@ -0,0 +1,89 @@ +#!/usr/bin/env bash +# One turn of the keyboard-focus convergence loop, start to verdict, with no human in it. +# +# scripts/CAD/focus-loop.sh # full turn: sync -> build -> restart -> assert +# SKIP_BUILD=1 scripts/CAD/focus-loop.sh # re-assert against the binary already on the host +# +# Exit 0 only when every gate holds. Any other exit is a failing gate and names which. +# +# WHY THIS EXISTS. The focus defects in the Design tab were chased for days by hand: build, launch +# the GUI, drive it with xdotool, read a screenshot, guess, repeat. That needs a person at every +# step and it is where the days went. This does not: behemoth carries an agent-owned Xvfb :10 with +# openbox, the app, xdotool and an MCP socket that reports sketch state as JSON, so a turn is +# sync -> build -> restart -> assert, and the ASSERTION is the verdict, not my reading of a picture. +# +# WHY BEHEMOTH AND NOT THE orcacad-gui RIG CONTAINER. The rig was the obvious host and it does not +# work for this: its image pins a dependency set 216 non-CAD source files behind cad-mainline +# (assimp among them), so today's CAD sources call GUI_App::is_auto_close_sketch_loops and +# MainFrame::ensure_design_panel, which that tree has never heard of. Syncing all of src/ to fix +# that needs a deps rebuild measured in hours. behemoth already builds this exact tree, already +# runs a WM on :10, and is the machine the user actually runs the product on — so the loop asserts +# against the shipping artefact rather than a stale twin. Reviving the rig means rebuilding its +# deps image first; until then it cannot adjudicate anything about this code. +# +# SC2029: every ssh command below quotes locally-expanded config (HOST, SRC, DISP) on purpose +# -- the remote tree is not this checkout and has no such config of its own. +# shellcheck disable=SC2029 +set -uo pipefail + +HOST="${HOST:-tommaso@100.103.234.2}" +DISP="${DISP:-:10}" +SRC="${SRC:-\$HOME/projects/orca/orcacad-native/src}" +TRACE="${TRACE:-/tmp/ux-focus-loop.log}" +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +BIN="build/src/Release/orca-slicer" + +say() { printf '\n=== %s\n' "$*"; } +die() { printf 'GATE FAILED: %s\n' "$*" >&2; exit 1; } + +ssh -o ConnectTimeout=10 "$HOST" true || die "cannot reach $HOST" + +# ---------------------------------------------------------------- S1 sync +# Only the CAD paths and the ladders. behemoth's tree is a full cad-mainline checkout kept in step +# by its own realign; pushing unrelated files from here would make the build host disagree with +# git for reasons no later session could reconstruct. +say "S1 sync" +rsync -q "$REPO"/src/slic3r/GUI/CAD/*.{cpp,hpp} "$HOST:$SRC/src/slic3r/GUI/CAD/" || die "sync GUI/CAD" +rsync -q "$REPO"/src/libslic3r/CAD/*.{cpp,hpp} "$HOST:$SRC/src/libslic3r/CAD/" || die "sync libslic3r/CAD" +rsync -q "$REPO"/scripts/CAD/check-gui-click-edit.py "$REPO"/scripts/CAD/check-gui-sketching.py \ + "$HOST:/tmp/" || die "sync ladders" +echo " sources + ladders in place" + +# ---------------------------------------------------------------- S2 build +# flock: two concurrent Orca builds once OOM'd this machine for 2h28m. Every build script on the +# fleet takes this same lock. +# +# Grade the BINARY'S TIMESTAMP, never the build command's exit code. This is a Ninja Multi-Config +# tree whose default rules are Debug while the artefact under test is Release, so a wrong-config +# invocation returns success in seconds having touched nothing — it cost a wasted cycle here +# before anyone thought to look at the file. +if [ -z "${SKIP_BUILD:-}" ]; then + say "S2 build" + before=$(ssh "$HOST" "stat -c %Y $SRC/$BIN 2>/dev/null || echo 0") + ssh "$HOST" "flock /tmp/orca-rig-build.lock \$HOME/projects/orca/orcacad-native/rebuild.sh > /tmp/focus-build.log 2>&1" + rc=$? + after=$(ssh "$HOST" "stat -c %Y $SRC/$BIN 2>/dev/null || echo 0") + if [ "$rc" != 0 ] || [ "$after" = "$before" ]; then + ssh "$HOST" "grep -m5 -B2 'error:' /tmp/focus-build.log; tail -5 /tmp/focus-build.log" + die "S2 build (exit $rc, binary $( [ "$after" = "$before" ] && echo unchanged || echo rebuilt ))" + fi + echo " built" +fi + +# ---------------------------------------------------------------- S3 F2P +# The ladder launches and tears down the app itself, in its own datadir, so nothing here has to +# manage a process. It types WITHOUT clicking the field first, which is the whole contract. +say "S3 fail-to-pass: type without clicking the field" +ssh "$HOST" "cd $SRC && DISPLAY=$DISP python3 /tmp/check-gui-click-edit.py \ + --display $DISP --bin $BIN --trace $TRACE" +f2p=$? + +# ---------------------------------------------------------------- S4 P2P +say "S4 pass-to-pass: the existing gesture ladder" +ssh "$HOST" "cd $SRC && DISPLAY=$DISP python3 /tmp/check-gui-sketching.py 2>&1 | tail -3" +p2p=$? + +say "VERDICT" +[ "$f2p" = 0 ] || die "F2P: a tool did not take the typed value (exit $f2p)" +[ "$p2p" = 0 ] || die "P2P: the gesture ladder regressed (exit $p2p)" +echo "ALL GATES HELD" diff --git a/scripts/CAD/run-all-checks.sh b/scripts/CAD/run-all-checks.sh new file mode 100755 index 0000000000..1c0388ac89 --- /dev/null +++ b/scripts/CAD/run-all-checks.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +# Every ladder, in one command, as the gate before a push that touched the Design tab. +# +# WHY A SCRIPT AND NOT CI. Three of the four rungs need a running application with an OpenGL +# canvas and synthetic input; GitHub's runners have neither. So the gate is local and explicit: +# run this, read the last line, and do not push a red one. The kernel suite is the only part CI +# can carry, and it already does. +# +# scripts/CAD/run-all-checks.sh # kernel + engine + corpus (every 20th) + gestures + offer +# FULL=1 scripts/CAD/run-all-checks.sh # corpus over ALL 997 sheets (~25 min) +# SKIP_GUI=1 scripts/CAD/run-all-checks.sh # kernel only, for a machine with no rig +# +# The rig container is expected to be up with the app running and ORCA_CAD_MCP set; bring it up +# with scripts/CAD/start-headless-gui.sh inside it. The corpus lives at /corpus in that container. +set -uo pipefail +# ../.. -- this script lives in scripts/CAD/, so one level up is scripts/, not the repo +# root. It was scripts/ladder-all.sh when it was written; the move fixed the three sibling +# scripts and missed this one, which left every rung looking for its own path under +# scripts/scripts/ and reporting instant failures that were all the same typo. +cd "$(dirname "${BASH_SOURCE[0]}")/../.." || exit 1 + +# orcacad-gui, NOT snapmaker-gui: that is the other fork's rig, and defaulting to it makes +# this gate verify the wrong fork's binary while reporting green. run-kernel-tests.sh +# carries the same warning about the build volume, where the defect was found first. +C="${C:-orcacad-gui}" +CORPUS="${CORPUS:-/corpus}" +STEP="${STEP:-20}" +[ -n "${FULL:-}" ] && STEP=1 +fail=0 + +step() { + local name="$1"; shift + echo + echo "=== $name ===" + if "$@"; then echo "--- $name OK"; else echo "--- $name FAILED"; fail=1; fi +} + +# This fork's rig runs Xvfb on :11, the other fork's on :10, and the check scripts default +# to ":10" when DISPLAY is unset -- which docker exec leaves unset. The rungs that drive the +# GUI therefore looked for a window on a display that does not exist here and reported +# "FATAL no app window on :10", which reads like a dead app rather than a wrong display. +RIG_DISPLAY="${RIG_DISPLAY:-:11}" + +# SC2329: every call goes through step(), which invokes it via "$@", so shellcheck +# cannot see the callers below. +# shellcheck disable=SC2329 +run_in_rig() { # copy the script in fresh, then run it there + docker cp "$1" "$C:/tmp/$(basename "$1")" >/dev/null || return 1 + shift + docker exec -e DISPLAY="$RIG_DISPLAY" "$C" python3 "$@" +} + +# FIRST, and it needs no rig: the offer table the menu is compiled from must be what the atlas +# says. The header calls itself GENERATED and had been hand-edited anyway — which cost four rows +# that existed only in the header, one row wired to the wrong action, and a count of 91 for a +# 92-row array, so the last verb was unreachable (z8rs, ziam). +# docs/CAD/, not docs/: SoftFever moved the design docs into the CAD subfolder +# (bbd1989e1e) and this line kept the old path, so the rung failed on a missing file +# rather than on anything about the table. The other fork still has docs/ux/. +step "offer table matches the atlas" python3 docs/CAD/ux/mockups/gen_offer_table.py --check + +step "kernel suite" scripts/CAD/run-kernel-tests.sh --vol "${KVOL:-orcacad_kerneltest}" + +if [ -z "${SKIP_GUI:-}" ]; then + step "engine ladder (rungs 1-8, scripted geometry)" \ + run_in_rig scripts/CAD/check-sketch-engine.py /tmp/check-sketch-engine.py + step "corpus rung (real drawings, every ${STEP}th)" \ + run_in_rig scripts/CAD/check-sketch-engine-corpus.py /tmp/check-sketch-engine-corpus.py --corpus "$CORPUS" --step "$STEP" + step "corpus scale rung (the heaviest sheets)" \ + run_in_rig scripts/CAD/check-sketch-engine-corpus.py /tmp/check-sketch-engine-corpus.py --corpus "$CORPUS" --scale + step "gesture ladder (mouse and keyboard)" \ + run_in_rig scripts/CAD/check-gui-sketching.py /tmp/check-gui-sketching.py + # The offer ladder needs TWO extra things the others do not: the app must have been launched + # with ORCA_CAD_KEYTRACE=1 (its [OFFER] lines are the whole instrument), and it reads the + # generated offer table to predict what each selection should show — which is not in the + # container's own baked source tree, so it is copied in beside the script — /tmp, where + # run_in_rig puts the script, is one of the paths the ladder looks in. + docker cp src/slic3r/GUI/CAD/DesignOffer.hpp "$C:/tmp/DesignOffer.hpp" >/dev/null + step "offer ladder (right-click, the menu, the verbs behind it)" \ + run_in_rig scripts/CAD/check-gui-context-menu.py /tmp/check-gui-context-menu.py +fi + +echo +if [ "$fail" -eq 0 ]; then echo "ALL LADDERS HELD"; else echo "AT LEAST ONE LADDER FAILED"; fi +exit "$fail" diff --git a/scripts/CAD/run-kernel-tests.sh b/scripts/CAD/run-kernel-tests.sh new file mode 100755 index 0000000000..ef4356cb65 --- /dev/null +++ b/scripts/CAD/run-kernel-tests.sh @@ -0,0 +1,159 @@ +#!/usr/bin/env bash +# Headless CAD-kernel test loop. THE verification contract for delegated work: +# exit 0 means the kernel builds and the selected Catch2 tags pass. Nothing else counts. +# +# Builds only the `libslic3r_tests` target (not the GUI app), so a round trip is +# minutes, not tens of minutes. Needs no display: every [CadDocument] case builds a +# CadDocument, recompute()s it and asserts on geometry. +# +# Usage: +# scripts/CAD/run-kernel-tests.sh # [CadDocument] tags, default volume +# scripts/CAD/run-kernel-tests.sh --tags '[CadDocument],[Sketch]' +# scripts/CAD/run-kernel-tests.sh --vol wt_mirror # private build cache (parallel workers) +# scripts/CAD/run-kernel-tests.sh --host tommaso@100.103.234.2 # build on a remote host +# +# Parallel workers MUST pass a distinct --vol: two builds sharing one cache corrupt +# each other. A new volume pays one full build; runs after that are incremental. +# +# --host exists because the deps image lives wherever it was first built. It rsyncs this +# working tree to a per-volume staging dir on that host and re-runs this same script +# there, so the verification contract is identical either way. Drop --host once the image +# is present locally. +# Rig build traps already paid for once each (stale project, NLopt cache, pybind11, OCCT_LIBS, SLIC3R_CAD gate): docs/rig_build_traps.md +set -euo pipefail + +REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +# orcacad-deps, NOT snapmaker-deps: this fork is mainline-based and needs Eigen 5.0.1, +# CGAL 5.6.3, wx 3.3.2 and Python 3.12 Development.Embed, none of which snapmaker-deps has. +# With the wrong image CMake dies at configure, which is exactly why this fork went +# M1-M8 without ever compiling (see commit 1633005bba). +IMAGE="${IMAGE:-orcacad-deps}" +# Must NOT default to snapmaker_buildcache: that is the other fork's volume, and pointing +# this fork at it makes the two silently trade build artefacts. build-gui-incremental.sh had the +# identical defect and was fixed to orcacad_buildcache; this script was missed. +VOL="${BUILD_VOL:-orcacad_kerneltest}" +# No exclusions. Both cases that used to be quarantined now run: the solver SIGABRT on +# circle-line tangency is fixed (tkz), and the internal-thread case turned out to have +# correct geometry and a wrong reference in the test (kzy). A green run here now means +# the whole CAD suite passed, not "everything except the two we gave up on". +# +# ...and that claim was still not true, because the default tag was [CadDocument] alone while +# four CAD test files carry their own tags and NOTHING ELSE selected them. test_sketchinference +# ([inference], 15), test_sketchedit ([SketchEdit], 23), test_sketchconstraints +# ([SketchConstraints], 8) and test_sketchimport ([SketchImport], 4) never ran here, nor did the +# older [slvs]-only cases in test_slvs_constraints. Measured 2026-08-31: the default reported +# 2624 assertions / 206 cases, the full set 7648 / 264 -- so the gate was speaking for about a +# third of the assertions, and a whole file could be added, tagged by its own convention, and +# stay dark while the suite printed green. All 58 were passing; the coverage was simply never +# exercised. Adding a tag here is now part of adding a test file. +TAGS="${TAGS:-[CadDocument],[inference],[SketchEdit],[SketchConstraints],[SketchImport],[slvs]}" +HOST="" + +while [[ $# -gt 0 ]]; do + case "$1" in + --vol) VOL="$2"; shift 2 ;; + --tags) TAGS="$2"; shift 2 ;; + --image) IMAGE="$2"; shift 2 ;; + --host) HOST="$2"; shift 2 ;; + *) echo "unknown arg: $1" >&2; exit 2 ;; + esac +done + +echo "REPO=$REPO IMAGE=$IMAGE VOL=$VOL TAGS=$TAGS HOST=${HOST:-local}" + +if [[ -n "$HOST" ]]; then + # Stage per-volume so parallel workers never share a remote tree. + REMOTE="kt-$VOL" # relative: ssh and rsync both start in the remote home dir + # SC2029: $REMOTE expanding on the CLIENT is the point -- it is derived from $VOL here, + # and the remote has no such variable. The rsync destination below expands it the same way. + # shellcheck disable=SC2029 + ssh "$HOST" "mkdir -p $REMOTE" + # Only the inputs the build reads. --delete keeps a stale file from a prior worker from + # silently compiling in. + rsync -a --delete \ + "$REPO/src" "$REPO/tests" "$REPO/resources" "$REPO/cmake" "$REPO/scripts" \ + "$REPO/CMakeLists.txt" \ + "$HOST:$REMOTE/" + exec ssh "$HOST" "cd $REMOTE && scripts/CAD/run-kernel-tests.sh --vol '$VOL' --tags '$TAGS' --image '$IMAGE'" +fi + +if ! docker image inspect "$IMAGE" >/dev/null 2>&1; then + echo "FATAL: image '$IMAGE' not present locally. Either transfer it, or pass" >&2 + echo " --host to build where the image already exists." >&2 + exit 3 +fi + +# A private volume is always built CLEAN on first use. Cloning a warm cache from another +# tree looks tempting but is a correctness trap: rsync preserves source mtimes, so ninja +# compares foreign object timestamps against them, decides everything is up to date, and +# relinks stale objects. That produced a binary with NO [CadDocument] tests at all while +# reporting success -- a green run that tested nothing. Pay the one-off full build instead; +# incremental rebuilds within a volume are correct because the mtimes then share a lineage. +if ! docker volume inspect "$VOL" >/dev/null 2>&1; then + echo "=== $VOL: new volume, clean configure + full build (one-off, slow) ===" + docker volume create "$VOL" >/dev/null +fi + +# tests/ is mounted too -- unlike build-gui-incremental.sh, this script exists precisely to +# compile tests being edited. CMakeLists.txt and cmake/ carry the SLIC3R_CAD gate; taking +# them from the baked image instead leaves the gate off and the CAD symbols vanish. + +# ---- OOM guard (2026-08-21) ------------------------------------------------------------- +# Two of these builds ran at once on 2026-08-21, each with ninja -j$(nproc)=16: ~36 cc1plus +# holding 42 GB of a 62 GB box -> global OOM at 21:05, a 2h28m kill storm, ssh unreachable, +# lightdm destroyed. Neither build produced a single object. scripts/CAD/build-gui.sh grew the +# bounds first; every script that starts a compile needs the same three, or the guard is only +# as strong as the script you happened not to use. +# flock — the lock path is SHARED with build-gui.sh and the other fork on purpose, so +# concurrent builds serialise instead of summing. +# -j — bounded parallelism; ~1.17 GB per cc1plus was the measured average. +# --memory — the actual guarantee: a runaway build dies in its own cgroup instead of taking +# the host down. --memory-swap equal to --memory forbids swap, which is what made +# ssh hang. +JOBS="${JOBS:-12}" +MEM="${MEM:-40g}" +LOCK=/tmp/orca-rig-build.lock + +exec 9>"$LOCK" +if ! flock -n 9; then + echo "another build holds $LOCK — waiting (this is the OOM guard, not a hang)" + flock 9 +fi + +docker run --rm \ + --memory="$MEM" --memory-swap="$MEM" \ + -v "$REPO/src":/OrcaSlicer/src \ + -v "$REPO/tests":/OrcaSlicer/tests \ + -v "$REPO/resources":/OrcaSlicer/resources \ + -v "$REPO/CMakeLists.txt":/OrcaSlicer/CMakeLists.txt \ + -v "$REPO/cmake":/OrcaSlicer/cmake \ + -v "$REPO/deps_src":/OrcaSlicer/deps_src \ + -v "$VOL":/OrcaSlicer/build \ + "$IMAGE" \ + bash -lc "set -e + cd /OrcaSlicer + DESTDIR=/OrcaSlicer/deps/build/destdir/usr/local + export PATH=\$DESTDIR/bin:\$PATH # wx-config, and anything else the deps prefix ships + # Configure unconditionally. Guarding on 'CMakeCache.txt exists' is wrong: a FAILED + # configure still writes that file, so the guard then skips reconfiguring forever and + # every later run reuses a poisoned cache while ignoring corrected flags. A no-op + # reconfigure costs seconds; that bug costs an afternoon. + # SLIC3R_GTK=3 and BUILD_TESTS=ON are not optional extras: src/CMakeLists.txt turns + # SLIC3R_GTK into 'wx-config --toolkit=gtk', so omitting it asks for toolkit 'gtk' + # and no wx build matches -> 'Could NOT find wxWidgets'. BUILD_TESTS=ON is what makes + # the libslic3r_tests target exist at all. build_linux.sh sets both (lines 218, 226). + cmake -S . -B build -G 'Ninja Multi-Config' \ + -DCMAKE_PREFIX_PATH=\$DESTDIR \ + -DwxWidgets_CONFIG_EXECUTABLE=\$DESTDIR/bin/wx-config \ + -DSLIC3R_GTK=3 -DBUILD_TESTS=ON -DSLIC3R_GUI=OFF \ + -DSLIC3R_CAD=ON -DSLIC3R_STATIC=1 -DORCA_TOOLS=ON -DCMAKE_BUILD_TYPE=Release + # SLIC3R_GUI=OFF: this script builds ONLY libslic3r_tests, which links libslic3r and no GUI + # code, but cmake still PROCESSES the if SLIC3R_GUI block of src/CMakeLists.txt (lines 16-98) + # and every find_package inside it. That made the kernel suite depend on the GUI dependency + # set for no benefit, and it broke the moment upstream added wxInspector as a REQUIRED + # find_package at line 92: the orcacad-deps image predates it, so configure died pointing at + # src/CMakeLists.txt:92 while nothing about the kernel had changed. Turning the block off is + # not a workaround for that one dependency; it is the kernel suite finally declaring what it + # actually needs, so the next GUI-side dependency upstream adds cannot break it either. + cmake --build build --config Release --target libslic3r_tests -- -j$JOBS + ./build/tests/libslic3r/Release/libslic3r_tests '$TAGS' --order decl" diff --git a/scripts/CAD/start-headless-gui.sh b/scripts/CAD/start-headless-gui.sh new file mode 100755 index 0000000000..d9944da8cf --- /dev/null +++ b/scripts/CAD/start-headless-gui.sh @@ -0,0 +1,148 @@ +#!/usr/bin/env bash +# Bring the headless GUI up on a VNC-served X display, ready to drive or to attach Remmina to. +# +# Runs INSIDE the long-lived GUI container (see the header of scripts/CAD/build-gui-incremental.sh for how +# that container is created). Idempotent: safe to re-run to recover a session whose app died. +# +# docker exec /OrcaSlicer/scripts/CAD/start-headless-gui.sh # launch + settle +# docker exec /OrcaSlicer/scripts/CAD/start-headless-gui.sh --status # report, change nothing +# +# WHY THIS EXISTS. Dismissing the first-run dialogs by computing the titlebar close box from +# `xdotool getwindowgeometry --shell` and clicking it went wrong whenever the dialog had already +# closed: the eval left the geometry variables stale or empty, the click landed at a garbage +# coordinate, and it repeatedly hit the Sketch button in the toolbar underneath, so the app came up +# in sketch mode with a stray Sketch feature. Three of those in one session. +# +# The titlebar click is nevertheless the RIGHT mechanism and is kept. `xdotool windowclose` looks +# cleaner but kills the app: it destroys the GdkWindow out from under the dialog and the process +# dies with "GdkWindow unexpectedly destroyed", three GLib-GObject criticals and a segfault +# (measured 2026-07-30). Escape does not close the Setup Wizard either. So the fix is not a +# different mechanism, it is refusing to click on geometry we have not validated. +set -euo pipefail + +DISP="${DISP:-:11}" +GEOM="${GEOM:-1920x1080}" +BIN="${BIN:-/OrcaSlicer/build/src/Release/orca-slicer}" +# Packaging cannot bundle python (the deps python layer carries a doubled-DESTDIR RUNPATH), so the +# build-tree binary needs the deps libpython on the path. Packaging-only issue; the app runs fine. +LIBPY="/OrcaSlicer/deps/build/destdir/usr/local/libpython/lib" +LIBPY2="/OrcaSlicer/build/src/Release/python/lib" +LOG="${LOG:-/tmp/gui-session.log}" + +export DISPLAY="$DISP" HOME=/root +export LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe +# The ladders read the document back through the MCP socket, and the offer ladder's only +# instrument is the [OFFER] keytrace. Neither is on by default, and a session launched without +# them comes up looking perfectly healthy: the window is there, status says app up, and every +# ladder then dies on "Connection refused" — which reads as a dead app rather than a rig that was +# started without its instrument. The script that launches the rig is where they belong. +export ORCA_CAD_MCP="${ORCA_CAD_MCP:-/tmp/mcp.sock}" +export ORCA_CAD_KEYTRACE="${ORCA_CAD_KEYTRACE:-1}" +export LD_LIBRARY_PATH="$LIBPY:$LIBPY2:${LD_LIBRARY_PATH:-}" +mkdir -p /root/.config # startup dies in boost::filesystem::create_directory without this + +# Skip zombies. This container accumulates instances of the app across runs, and pgrep +# matches them, so the naive "first match" reported a dead pid as if the session were healthy. +app_pid() { + local p + for p in $(pgrep -f "$(basename "$BIN")" 2>/dev/null); do + [ "$(awk "{print \$3}" "/proc/$p/stat" 2>/dev/null)" = "Z" ] && continue + echo "$p"; return 0 + done + return 1 +} + +status() { + echo "display : $(pgrep -f "Xvfb $DISP" >/dev/null && echo up || echo DOWN)" + echo "wm : $(pgrep -x openbox >/dev/null && echo up || echo DOWN)" + if pgrep -x x11vnc >/dev/null; then echo "vnc : up on :5900" + elif ! command -v x11vnc >/dev/null; then echo "vnc : n/a (x11vnc not installed here)" + else echo "vnc : DOWN"; fi + local p; p="$(app_pid || true)" + echo "app : ${p:-DOWN}" + # WHICH binary is on screen, not just that something is. A pid alone cannot tell you whether + # you are looking at the build you just linked or one from last week, and that is precisely + # the question every rig verification is asking. + [ -n "${p:-}" ] && echo "binary : $(readlink -f "/proc/$p/exe" 2>/dev/null || echo unknown)" + [ -n "${p:-}" ] && echo "windows : $(xdotool search --name . getwindowname %@ 2>/dev/null | paste -sd'|' -)" + return 0 +} + +[ "${1:-}" = "--status" ] && { status; exit 0; } + +# --- desktop: Xvfb, a window manager, and the VNC server ------------------------------------ +# openbox is REQUIRED: without it xdotool windowactivate aborts with "windowmanager claims not to +# support _NET_ACTIVE_WINDOW" and dialogs never take focus. +pgrep -f "Xvfb $DISP" >/dev/null || { nohup Xvfb "$DISP" -screen 0 "${GEOM}x24" -nolisten tcp >/tmp/xvfb.log 2>&1 & sleep 3; } +pgrep -x openbox >/dev/null || { nohup openbox >/tmp/openbox.log 2>&1 & sleep 1; } +if ! pgrep -x x11vnc >/dev/null && command -v x11vnc >/dev/null; then + AUTH=() + [ -f /root/.vnc/passwd ] && AUTH=(-rfbauth /root/.vnc/passwd) + nohup x11vnc -display "$DISP" -rfbport 5900 "${AUTH[@]}" -forever -shared -noxdamage \ + >/tmp/x11vnc.log 2>&1 & + sleep 2 +fi + +# --- app ------------------------------------------------------------------------------------ +# Kill by BASENAME, not by "$BIN". The app enforces a single instance, so an older copy launched +# from a DIFFERENT path (the packaged build/package/bin/ one, say, when BIN points at the freshly +# linked build/src/Release/ one) survives a path-matched pkill, keeps the instance lock, and the +# new process exits seconds after loading fonts — leaving no error anywhere. app_pid() below has +# always matched by basename, so status then reported that stale process as a healthy session: +# the launch looked green while the window on screen was days old. Measured 2026-08-02, where it +# nearly passed a UI change against a Jul-30 binary. The killer and the reporter must agree on +# what counts as "the app". +pkill -9 -f "$(basename "$BIN")" 2>/dev/null || true +sleep 2 +nohup "$BIN" >"$LOG" 2>&1 & +echo "launched $(basename "$BIN") pid $!" + +# Wait for the main window rather than sleeping a fixed amount: cold starts vary a lot under +# software GL, and a fixed sleep either wastes time or races. +for _ in $(seq 1 40); do + xdotool search --name "Untitled" >/dev/null 2>&1 && break + sleep 1 +done + +# --- first-run dialogs ---------------------------------------------------------------------- +# Click the titlebar close box, but only on geometry we have just read for a window that still +# exists, and only if the resulting point is inside the screen. Every variable is unset first so a +# failed read cannot leave the previous dialog's numbers behind — that is the whole bug. +screen_w="${GEOM%x*}"; screen_h="${GEOM#*x}" +close_dialog() { + local name="$1" id X Y WIDTH HEIGHT cx cy + id="$(xdotool search --name "$name" 2>/dev/null | head -1 || true)" + [ -z "$id" ] && return 1 + unset X Y WIDTH HEIGHT + eval "$(xdotool getwindowgeometry --shell "$id" 2>/dev/null || true)" + # All four must be present and numeric: an empty or stale read is how the stray click happened. + for v in "${X:-}" "${Y:-}" "${WIDTH:-}" "${HEIGHT:-}"; do + [[ "$v" =~ ^-?[0-9]+$ ]] || { echo " $name: unreadable geometry, not clicking"; return 1; } + done + cx=$((X + WIDTH - 11)); cy=$((Y - 31)) # openbox decoration: close box above the frame + if [ "$cx" -lt 0 ] || [ "$cy" -lt 0 ] || [ "$cx" -ge "$screen_w" ] || [ "$cy" -ge "$screen_h" ]; then + echo " $name: close box at ${cx},${cy} is off-screen, not clicking"; return 1 + fi + echo " $name: closing via titlebar at ${cx},${cy}" + xdotool mousemove "$cx" "$cy" click 1 + sleep 2 + return 0 +} +# "Restore" is not a first-RUN dialog, it is a second-run one: killing the app mid-session leaves +# unsaved items behind, and the next launch asks whether to restore them. It sits over the tab bar +# with a modal grab, so every synthetic click afterwards lands on it and the ladder reports +# geometry that never got drawn — that is the "success with no log" shape twice already. +for name in "Setup Wizard" "New version" "Restore"; do + for _ in 1 2 3; do close_dialog "$name" || break; done +done + +# --- main window ---------------------------------------------------------------------------- +main="$(xdotool search --name "Untitled" 2>/dev/null | head -1 || true)" +if [ -n "$main" ]; then + xdotool windowmove "$main" 0 0 windowsize "$main" "$screen_w" "$screen_h" 2>/dev/null || true + xdotool windowactivate "$main" 2>/dev/null || true + sleep 2 +fi + +echo "--- session ---" +status diff --git a/scripts/Dockerfile.deps b/scripts/Dockerfile.deps new file mode 100644 index 0000000000..295b72028d --- /dev/null +++ b/scripts/Dockerfile.deps @@ -0,0 +1,95 @@ +# Deps-only base image for fast iteration on Orca. +# Identical system+pinned-dependency setup to scripts/Dockerfile, but STOPS after +# `build_linux.sh -dr` (no slicer/AppImage build). Produces an image with the pinned +# deps baked at /OrcaSlicer/deps/build/destdir, so the slicer can be rebuilt +# incrementally via scripts/CAD/build-gui-incremental.sh without re-running the long deps build. +# +# Build once (rebuild only when deps/ changes, e.g. OCCT module flags): +# docker build -t snapmaker-deps -f scripts/Dockerfile.deps . +FROM docker.io/ubuntu:24.04 +LABEL maintainer="Orca CAD iteration base" + +# Disable interactive package configuration +RUN apt-get update && \ + echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + autoconf \ + build-essential \ + cmake \ + curl \ + eglexternalplatform-dev \ + extra-cmake-modules \ + file \ + git \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-libav \ + libcairo2-dev \ + libcurl4-openssl-dev \ + libdbus-1-dev \ + libglew-dev \ + libglu1-mesa-dev \ + libgstreamer1.0-dev \ + libgstreamerd-3-dev \ + libgstreamer-plugins-base1.0-dev \ + libgstreamer-plugins-good1.0-dev \ + libgtk-3-dev \ + libsecret-1-dev \ + libsoup2.4-dev \ + libssl3 \ + libssl-dev \ + libtool \ + libudev-dev \ + libwayland-dev \ + libwebkit2gtk-4.1-dev \ + libxkbcommon-dev \ + locales \ + locales-all \ + m4 \ + pkgconf \ + sudo \ + wayland-protocols \ + wget + +ENV LC_ALL=en_US.utf8 +RUN locale-gen $LC_ALL +ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt + +COPY ./ OrcaSlicer +WORKDIR OrcaSlicer + +# System dependencies +RUN ./build_linux.sh -u + +# Pinned dependencies in ./deps (OCCT 7.6 with ModelingAlgorithms enabled, OpenCV, +# OpenVDB, Boost, wxWidgets, ...). This is the long step; it is baked into the image. +# -j 12, not the default all-cores: on 2026-08-21 an unbounded deps build plus an unbounded +# app build put 42 GB of cc1plus on a 62 GB box and OOM-killed the host for 2h28m. 12 keeps +# the compile fast while leaving the machine usable. Pair with `docker build --memory`. +RUN ./build_linux.sh -dr -j 12 + +# Compatibility symlink. This deps tree installs into deps/build/OrcaSlicer_dep/, while the +# orcacad_buildcache volume was configured against the previous image, whose prefix was +# deps/build/destdir/. Those paths are baked as absolute strings into the app's CMakeCache, so +# without this symlink a rebuild on the new image reconfigures from scratch — hours of compile +# to change one directory name. Same tree, two names. +RUN ln -sfn /OrcaSlicer/deps/build/OrcaSlicer_dep /OrcaSlicer/deps/build/destdir + +# The rig's GUI runtime. This used to arrive for free because orcacad-deps was layered on +# snapmaker-deps; that lineage is Trap 1 in docs/rig_build_traps.md (a baked project(Snapmaker_Orca) +# tree) and building from this Dockerfile is what removes it — along with the X stack the rig +# needs. scripts/CAD/start-headless-gui.sh requires Xvfb and openbox (without a window manager `xdotool +# windowactivate` aborts with "windowmanager claims not to support..."), drives the UI with +# xdotool, and captures to /shots with scrot/ImageMagick. Same set snapmaker-deps carries. +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + imagemagick \ + openbox \ + scrot \ + xauth \ + xdotool \ + xvfb \ + && rm -rf /var/lib/apt/lists/* diff --git a/scripts/Dockerfile.deps-assimp b/scripts/Dockerfile.deps-assimp new file mode 100644 index 0000000000..40566885c0 --- /dev/null +++ b/scripts/Dockerfile.deps-assimp @@ -0,0 +1,70 @@ +# Adds assimp to the orcacad-deps image. +# +# WHY THIS EXISTS. OrcaSlicer mainline gained `find_package(assimp REQUIRED)` in +# src/libslic3r/CMakeLists.txt (glTF/GLB/FBX import for texture-to-colour), and the baked +# orcacad-deps image predates it: the image's deps/ tree has no Assimp directory at all, and +# nothing named assimp exists anywhere in it. On the host, deps/build/dep_Assimp-prefix has +# only `patch` and `update` stamps -- no build, no install -- so the dependency was fetched +# and then never built, in the image or out of it. +# +# The consequence was that scripts/CAD/run-kernel-tests.sh failed at CMake CONFIGURE time, +# before a single source file compiled, so THIS FORK'S KERNEL SUITE COULD NOT RUN AT ALL. +# Every kernel change ported here was parity-checked against Snapmaker and never independently +# tested (w80c). The Snapmaker fork does not hit this: its base requires neither +# assimp nor OpenCV. +# +# WHY A LAYER AND NOT A FULL DEPS REBUILD. Rebuilding every dependency takes hours and would +# rewrite artifacts that are currently working. This adds exactly the one missing package on +# top of the existing image, and it is a Dockerfile rather than a `docker commit` so that what +# was done is reviewable and repeatable instead of being an undocumented mutation. +# +# The flags below are copied from the project's own recipe (deps/Assimp/Assimp.cmake) plus the +# standard superbuild arguments from orcaslicer_add_cmake_project (deps/CMakeLists.txt:158) and +# DEP_CMAKE_OPTS (deps/deps-linux.cmake). Keep them in step with that recipe: this file is a +# stand-in for the superbuild, not an independent opinion about how to build assimp. +# +# BUILD (from the repo root, tarball already in deps/DL_CACHE/Assimp/): +# docker build -f scripts/Dockerfile.deps-assimp -t orcacad-deps . +# +# VERIFY: +# docker run --rm orcacad-deps sh -c \ +# 'ls /OrcaSlicer/deps/build/destdir/usr/local/lib/cmake/assimp*' +# scripts/CAD/run-kernel-tests.sh +# +FROM orcacad-deps + +# v5.4.3 is the version deps/Assimp/Assimp.cmake selects for CMake >= 3.22 (the image has +# 3.28.3). The SHA256 is that recipe's URL_HASH, verified against the cached tarball before +# this file was written -- an unverified archive is not a dependency, it is whatever was +# sitting in the cache. +ARG ASSIMP_SHA256=66dfbaee288f2bc43172440a55d0235dfc7bf885dda6435c038e8000e79582cb +COPY deps/DL_CACHE/Assimp/v5.4.3.tar.gz /tmp/assimp.tar.gz + +RUN set -eux; \ + echo "${ASSIMP_SHA256} /tmp/assimp.tar.gz" | sha256sum -c -; \ + mkdir -p /tmp/assimp-src && \ + tar -xzf /tmp/assimp.tar.gz -C /tmp/assimp-src --strip-components=1; \ + DESTDIR=/OrcaSlicer/deps/build/destdir/usr/local; \ + cmake -S /tmp/assimp-src -B /tmp/assimp-build -G Ninja \ + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX="$DESTDIR" \ + -DCMAKE_PREFIX_PATH="$DESTDIR" \ + -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ + -DBUILD_SHARED_LIBS=OFF \ + -DASSIMP_BUILD_USE_CCACHE=OFF \ + -DASSIMP_BUILD_TESTS=OFF \ + -DASSIMP_BUILD_SAMPLES=OFF \ + -DASSIMP_BUILD_ASSIMP_TOOLS=OFF \ + -DASSIMP_INSTALL_PDB=OFF \ + -DASSIMP_NO_EXPORT=ON \ + -DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=OFF \ + -DASSIMP_BUILD_GLTF_IMPORTER=ON \ + -DASSIMP_BUILD_OBJ_IMPORTER=ON \ + -DASSIMP_BUILD_FBX_IMPORTER=ON \ + -DASSIMP_BUILD_ZLIB=ON \ + -DASSIMP_WARNINGS_AS_ERRORS=OFF \ + -DBUILD_WITH_STATIC_CRT=OFF; \ + cmake --build /tmp/assimp-build --target install -- -j"$(nproc)"; \ + rm -rf /tmp/assimp-src /tmp/assimp-build /tmp/assimp.tar.gz; \ + test -n "$(ls "$DESTDIR"/lib/cmake/assimp* 2>/dev/null)" diff --git a/scripts/assign_vendor_setting_ids.py b/scripts/assign_vendor_setting_ids.py deleted file mode 100644 index 8ed607f591..0000000000 --- a/scripts/assign_vendor_setting_ids.py +++ /dev/null @@ -1,258 +0,0 @@ -#!/usr/bin/env python3 -""" -Assign deterministic, globally-unique setting_id to OrcaSlicer system profiles. - -Policy (see AGENTS.md "Critical Constraints"): - * A preset's setting_id is a pure function of its identity: - setting_id = base62_16( uuid5(NAMESPACE, "//") ) - The same value is recomputed on the fly by the C++ app - (Slic3r::generate_preset_setting_id); the two MUST stay byte-identical. The rule - (generate_preset_setting_id, below) is also imported by the validator - (orca_extra_profile_check.py). Uniqueness is therefore automatic: two presets - collide only if they share vendor + type + name, which the validator flags. - * Bambu (BBL) owns the authoritative "G*" id space and is the only reserved vendor: - its ids are never rewritten (preserves backward-compat with Bambu-synced presets). - Every other vendor - including OrcaFilamentLibrary and Custom - follows the - deterministic rule. - * Only instantiated presets (instantiation == "true") carry a setting_id; base / - template profiles do not. - -Only setting_id is rewritten. filament_id is deliberately left untouched: it is a -per-material id, shared across a filament's nozzle variants and inherited from base -templates, so it must not be made per-file unique. - -Run from anywhere: python3 scripts/assign_vendor_setting_ids.py -The script is idempotent: a second run over an unchanged tree produces no diff. -""" - -import json -import os -import re -import sys -import uuid - - -# Deterministic preset setting_id rule. Imported by the validator -# (orca_extra_profile_check.py) and kept byte-identical to the C++ -# Slic3r::generate_preset_setting_id. Dedicated namespace, distinct from the cloud -# namespace (f47ac10b-...) so the two id spaces never coincide; this constant is baked -# into both languages - never change it. -NAMESPACE = uuid.UUID("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f") -ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" -ID_LENGTH = 16 - - -def generate_preset_setting_id(vendor, type_name, name): - """Deterministic 16-char base62 setting_id for a preset. - - input = f"{vendor}/{type_name}/{name}"; u = uuid5(NAMESPACE, input); - id = the low ID_LENGTH base62 digits of int(u.bytes, "big"), most-significant first. - """ - u = uuid.uuid5(NAMESPACE, f"{vendor}/{type_name}/{name}") - n = int.from_bytes(u.bytes, "big") - digits = [] - for _ in range(ID_LENGTH): - digits.append(ALPHABET[n % 62]) - n //= 62 - return "".join(reversed(digits)) - - -PROFILES_DIR = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "resources", "profiles")) - -# Bambu (BBL) is the only reserved vendor: it keeps its authoritative "G*" cloud ids. -RESERVED_VENDORS = {"BBL"} - -PROFILE_SUBDIRS = ("filament", "process", "machine") - - -def iter_profile_files(vendor_dir): - """Yield (json path, type) under a vendor, in a deterministic order. - - type is the subdir name ("filament"/"process"/"machine"), which matches - Preset::get_type_string() on the C++ side. - """ - for sub in PROFILE_SUBDIRS: - base = os.path.join(vendor_dir, sub) - if not os.path.isdir(base): - continue - for root, dirs, files in os.walk(base): - dirs.sort() # deterministic traversal across filesystems - for name in sorted(files): - if name.endswith(".json"): - yield os.path.join(root, name), sub - - -def read_profile(path): - """Return (setting_id, instantiation, name) as present (or None).""" - try: - with open(path, "rb") as f: - data = json.loads(f.read()) - except (ValueError, OSError): - return None, None, None - if not isinstance(data, dict): - return None, None, None - return data.get("setting_id"), data.get("instantiation"), data.get("name") - - -def list_vendors(): - return sorted( - d for d in os.listdir(PROFILES_DIR) - if os.path.isdir(os.path.join(PROFILES_DIR, d)) - ) - - -_JSON_STR = r'"(?:[^"\\]|\\.)*"' - - -def remove_key_line(text, key): - """Remove a top-level `"key": "..."` member, preserving formatting. - - Handles both the common case (member has a trailing comma) and the member - being the LAST in its object (consume the preceding comma instead, so no - dangling comma is left). Returns (new_text, count). - """ - # Member followed by a comma (not the last in the object). - trailing = re.compile( - r'[ \t]*"' + re.escape(key) + r'"[ \t]*:[ \t]*' + _JSON_STR + r'[ \t]*,[ \t]*\r?\n' - ) - new, n = trailing.subn("", text, count=1) - if n: - return new, n - # Member is the last one: drop the preceding comma and the member itself. - leading = re.compile( - r',[ \t]*\r?\n[ \t]*"' + re.escape(key) + r'"[ \t]*:[ \t]*' + _JSON_STR - ) - return leading.subn("", text, count=1) - - -def _remove_key_in_tree(key, should_remove): - """Remove `key` from files where should_remove(sid, inst, text) is True.""" - removed = 0 - for vendor in list_vendors(): - for path, _type in iter_profile_files(os.path.join(PROFILES_DIR, vendor)): - with open(path, "rb") as f: - text = f.read().decode("utf-8") - sid, inst, _name = read_profile(path) - if not should_remove(sid, inst, text): - continue - new_text, n = remove_key_line(text, key) - if n == 0: - raise RuntimeError(f"Could not locate {key} line to remove: {path}") - json.loads(new_text) # fail loudly if removal broke the JSON - with open(path, "wb") as f: - f.write(new_text.encode("utf-8")) - removed += 1 - return removed - - -def remove_misspelled_settings_id(): - """Delete the misspelled "settings_id" key (extra "s") wherever it appears. - - The app never reads that key, so those presets effectively had no setting_id - and get a correct one assigned by the normal pass; here we drop the junk key. - """ - return _remove_key_in_tree( - "settings_id", lambda sid, inst, text: '"settings_id"' in text - ) - - -def strip_base_setting_ids(): - """Remove setting_id from every base profile (instantiation != "true"). - - Convention: only instantiated, user-selectable presets carry a setting_id; - base/template profiles do not. Applied across all vendors. - """ - return _remove_key_in_tree( - "setting_id", lambda sid, inst, text: bool(sid) and inst != "true" - ) - - -def replace_id_value(text, key, new_value): - """Replace the first top-level `"key": "..."` value, preserving all formatting.""" - pattern = re.compile(r'("' + re.escape(key) + r'"\s*:\s*)"(?:[^"\\]|\\.)*"') - repl = lambda m: m.group(1) + json.dumps(new_value, ensure_ascii=False) - new_text, n = pattern.subn(repl, text, count=1) - return new_text, n - - -def insert_setting_id(text, new_id): - """Insert a `"setting_id"` line into a preset that lacks one. - - Placed just before `filament_id` (or, failing that, `instantiation`) so it - matches the canonical key order, reusing that anchor line's indentation and - line ending. Only setting_id is added; filament_id is left untouched. - """ - for key in ("filament_id", "instantiation"): - m = re.search(r'^([ \t]*)"' + key + r'"[ \t]*:.*?(\r?\n)', text, re.MULTILINE) - if m: - line = f'{m.group(1)}"setting_id": {json.dumps(new_id, ensure_ascii=False)},{m.group(2)}' - return text[:m.start()] + line + text[m.start():], 1 - return text, 0 - - -def rewrite_file(path, new_id, has_setting_id): - """Set the preset's setting_id to new_id (replacing or inserting as needed). - - filament_id is intentionally left untouched. Uses binary IO so the file's - original line endings (LF or CRLF) and exact formatting are preserved - byte-for-byte apart from the changed/added line. The result is re-parsed to - guarantee it is still valid JSON. - """ - with open(path, "rb") as f: - text = f.read().decode("utf-8") - if has_setting_id: - text, n = replace_id_value(text, "setting_id", new_id) - else: - text, n = insert_setting_id(text, new_id) - if n == 0: - raise RuntimeError(f"Could not set setting_id on {path}") - json.loads(text) # fail loudly if the edit broke the JSON - with open(path, "wb") as f: - f.write(text.encode("utf-8")) - return True - - -def main(): - # 0. Drop the misspelled "settings_id" key wherever it appears. - typos = remove_misspelled_settings_id() - - # 1. Strip setting_id from base profiles everywhere (only instantiated presets keep one). - stripped = strip_base_setting_ids() - - # 2. Assign the deterministic setting_id to every instantiated preset of every - # non-reserved vendor. - changed = added = 0 - vendors_touched = [] - for vendor in list_vendors(): - if vendor in RESERVED_VENDORS: - continue - vendor_changed = 0 - for path, type_name in iter_profile_files(os.path.join(PROFILES_DIR, vendor)): - sid, inst, name = read_profile(path) - if inst != "true": - continue - if not name: - raise RuntimeError(f"instantiated preset has no \"name\": {path}") - new_id = generate_preset_setting_id(vendor, type_name, name) - if sid == new_id: - continue # already correct - idempotent - rewrite_file(path, new_id, has_setting_id=sid is not None) - changed += 1 - vendor_changed += 1 - if sid is None: - added += 1 - if vendor_changed: - vendors_touched.append((vendor, vendor_changed)) - - print(f"Misspelled settings_id removed : {typos}") - print(f"Base setting_ids stripped : {stripped}") - print(f"Reserved vendors : {sorted(RESERVED_VENDORS)}") - print(f"Vendors updated : {len(vendors_touched)}") - for v, n in vendors_touched: - print(f" {v} ({n} files)") - print(f"Files rewritten : {changed} (of which newly assigned: {added})") - return 0 - - -if __name__ == "__main__": - sys.exit(main()) diff --git a/scripts/build_flatpak_with_docker.sh b/scripts/build_flatpak_with_docker.sh index 9e8805af2f..eedfe53692 100755 --- a/scripts/build_flatpak_with_docker.sh +++ b/scripts/build_flatpak_with_docker.sh @@ -122,6 +122,9 @@ sed "/name: OrcaSlicer/{ \1 git_commit_hash: \"$GIT_COMMIT_HASH\"| }" > "$MANIFEST_DOCKER" +# ---------- pack deps/ ---------- +./scripts/flatpak/make_deps_tar.sh + # ---------- run build in Docker ---------- DOCKER="${DOCKER:-docker}" diff --git a/scripts/check_profile.bat b/scripts/check_profile.bat new file mode 100644 index 0000000000..e92f9fe0e8 --- /dev/null +++ b/scripts/check_profile.bat @@ -0,0 +1,8 @@ +@echo off +REM Runs check_profile.ps1, the Windows twin of check_profile.sh, from cmd. +REM Arguments are passed straight through, so anything the .ps1 takes works here: +REM scripts\check_profile.bat -Vendor Elegoo validate_custom +REM -ExecutionPolicy Bypass is needed because a Windows client defaults to Restricted, +REM which refuses to run a checked-out .ps1 at all. +powershell -NoProfile -ExecutionPolicy Bypass -File "%~dp0check_profile.ps1" %* +exit /b %ERRORLEVEL% diff --git a/scripts/check_profile.ps1 b/scripts/check_profile.ps1 new file mode 100644 index 0000000000..1aa5a11bd7 --- /dev/null +++ b/scripts/check_profile.ps1 @@ -0,0 +1,693 @@ +<# +.SYNOPSIS + Local twin of the "Check profiles" CI job (.github/workflows/check_profiles.yml), for Windows. + +.DESCRIPTION + The Windows counterpart of scripts/check_profile.sh, and kept deliberately close to it. + + Runs the same five checks, in the same order, with the same validator flags, and with the + same semantics: every check runs even after an earlier one fails (the workflow's + continue-on-error), then the script exits non-zero once at the end. + + profile_tool scripts/orca_profile_tool.py check + validate_system validator -p -l + validate_slice validator -p -s -l + validate_filament_subtypes validator -p -l -f + validate_custom validator against every released custom-preset fixture + + profile_tool is the only check that is not the validator binary; it makes the static checks + the validator cannot, because the validator loads the tree the way the slicer does and so + never sees a profile no .json indexes, a preset name two files claim, or a file + normalize and update-index would still rewrite. + + Everything that has to be downloaded - the profile validator and the custom-preset fixture + archives - lands under \.test\check_profiles and is reused on the next run. That + directory also holds one log per check plus a copy of the comment CI would post on the PR. + + resources\profiles\user, which the validator creates as its data dir but a CI checkout never + has, is moved aside for the duration of the run and restored on exit. Only one run per work + dir at a time. + + -Vendor narrows a run to one vendor while working on that vendor's profiles - the one + deliberate divergence from CI, which always checks the whole tree. A check that cannot be + narrowed is left out of the run and reported as skipped. + + x64 and ARM64 hosts are both supported. A locally built validator is chosen by the machine + type in its PE header rather than by the name of its build tree, so build\ (x64) and + build-arm64\ side by side resolve correctly; the published nightly is x64 only and runs + under emulation on ARM64. + +.PARAMETER ProfilesDir + Profile tree to validate (default: resources\profiles). + +.PARAMETER Vendor + Check only this vendor, named after its .json (e.g. "Co Print"). validate_custom is + narrowed with it too, by keeping only that vendor's presets in each fixture tree. The one + check it cannot narrow is validate_slice for a vendor that ships no printers; the summary + reports that one as skipped, and naming it explicitly still runs it. profile_tool keeps its + two cross-vendor checks (setting_id and filament_id) tree-wide, so a scoped run can still + fail on another vendor's files. + +.PARAMETER Validator + OrcaSlicer_profile_validator.exe to use; also $env:ORCA_PROFILE_VALIDATOR. Default: the local + build*\ Release build (then RelWithDebInfo, MinSizeRel, Debug) for this architecture, else + the nightly release build is downloaded. + +.PARAMETER Download + Ignore local builds and use the downloaded nightly validator. + +.PARAMETER Refresh + Re-download the validator and fixtures instead of using the cache. + +.PARAMETER WorkDir + Downloads, logs and fixture trees (default: .test\check_profiles). Point it somewhere short, + such as D:\t, if a fixture tree trips Windows' 260-character path limit. + +.PARAMETER LogLevel + Validator log level (default: 2, as in CI). + +.PARAMETER Checks + Checks to run, by name (default: all of them, in the order listed above). + +.EXAMPLE + scripts\check_profile.bat + +.EXAMPLE + powershell -ExecutionPolicy Bypass -File scripts\check_profile.ps1 validate_system validate_slice + +.EXAMPLE + scripts\check_profile.bat -Vendor Elegoo +#> + +# PositionalBinding is off so that the check names are the only positional arguments; left on, +# a bare "validate_system" would bind to whichever named parameter came next in this block. +[CmdletBinding(PositionalBinding = $false)] +param( + [Alias('p')] [string] $ProfilesDir, + [Alias('v')] [string] $Vendor, + [string] $Validator, + [string] $WorkDir, + [Alias('l')] [int] $LogLevel = 2, + [switch] $Download, + [switch] $Refresh, + [Alias('h')] [switch] $Help, + [Parameter(Position = 0, ValueFromRemainingArguments = $true)] [string[]] $Checks +) + +$ErrorActionPreference = 'Stop' + +# Windows PowerShell 5.1 still negotiates TLS 1.0/1.1, which github.com refuses. +[Net.ServicePointManager]::SecurityProtocol = + [Net.ServicePointManager]::SecurityProtocol -bor [Net.SecurityProtocolType]::Tls12 + +$ValidatorReleaseUrl = 'https://github.com/OrcaSlicer/OrcaSlicer/releases/download/nightly-builds' +$FixtureReleaseUrl = 'https://github.com/OrcaSlicer/OrcaSlicer-profile-validator/releases/download/fixture-archive' + +$RepoRoot = Split-Path -Parent $PSScriptRoot + +# PROCESSOR_ARCHITECTURE reports the architecture of the *shell*, so a 32-bit PowerShell on a +# 64-bit OS says x86; ARCHITEW6432 is the machine's own in that case. +$HostArch = if ($env:PROCESSOR_ARCHITEW6432) { $env:PROCESSOR_ARCHITEW6432 } else { $env:PROCESSOR_ARCHITECTURE } +$HostArch = switch ($HostArch) { + 'ARM64' { 'arm64' } + 'AMD64' { 'x64' } + default { 'x86' } +} + +$AllChecks = @('profile_tool', 'validate_system', 'validate_slice', 'validate_filament_subtypes', 'validate_custom') + +$script:LogWriter = $null +$script:Python = '' + +# ---------------------------------------------------------------------------- helpers + +function Die([string] $Message) { + Write-Host "check_profile.ps1: $Message" -ForegroundColor Red + exit 2 +} + +# UTF-8 without a BOM, so a log reads the same here as the artifact CI uploads. +function New-LogWriter([string] $Path) { + New-Object IO.StreamWriter($Path, $false, (New-Object Text.UTF8Encoding($false))) +} + +# Output of the check being run: shown, and kept in that check's log. +function Write-CheckLog([string] $Text) { + Write-Host $Text + if ($script:LogWriter) { $script:LogWriter.WriteLine($Text) } +} + +# Runs a program and returns its exit code, streaming stdout and stderr into the current check's +# log. -OutFile sends that output to a file of its own instead, silently. +function Invoke-Tool { + param([string] $Exe, [string[]] $Arguments, [string] $OutFile) + + # Under 'Stop', 2>&1 turns every stderr line of a native command into a terminating error. + # Assigning the preference here scopes it to this function, so it undoes itself on return. + $ErrorActionPreference = 'Continue' + + $writer = if ($OutFile) { New-LogWriter $OutFile } else { $null } + try { + & $Exe @Arguments 2>&1 | ForEach-Object { + if ($writer) { $writer.WriteLine("$_") } else { Write-CheckLog "$_" } + } + return $LASTEXITCODE + } catch { + if ($writer) { $writer.WriteLine("$_") } else { Write-CheckLog "$_" } + return 1 + } finally { + if ($writer) { $writer.Dispose() } + } +} + +# The first $Limit characters of a log, as CI truncates them for the PR comment. +function Get-LogHead([string] $Path, [int] $Limit) { + $text = if (Test-Path -LiteralPath $Path) { [IO.File]::ReadAllText($Path) } else { '' } + if (-not $text) { return 'No output captured' } + if ($text.Length -gt $Limit) { return $text.Substring(0, $Limit) } + return $text +} + +# ---------------------------------------------------------------------------- arguments + +if ($Help) { Get-Help $PSCommandPath -Detailed; exit 0 } + +foreach ($name in $Checks) { + if ($name -like '-*') { Die "unknown option '$name' (try -Help)" } + if ($AllChecks -notcontains $name) { Die "unknown check '$name' (try -Help)" } +} +# A check named on the command line always runs; only the default set is narrowed (see the run +# loop below). +$NamedChecks = [bool] $Checks +if (-not $Checks) { $Checks = $AllChecks } + +if (-not $ProfilesDir) { $ProfilesDir = Join-Path $RepoRoot 'resources\profiles' } +if (-not (Test-Path -LiteralPath $ProfilesDir -PathType Container)) { Die "profile directory not found: $ProfilesDir" } +$ProfilesDir = (Resolve-Path -LiteralPath $ProfilesDir).Path + +# A vendor neither tool knows is not an error to them: the static checks load nothing of their own +# and still report success, so a typo would otherwise be three green checks and one baffling slice +# failure. The match has to be made on the names themselves rather than with a Test-Path - the +# validator compares the .json stem case-sensitively, while Windows' case-insensitive +# filesystem would let "creality" pass a path test and then match no vendor. A vendor is a +# .json with a sibling directory; that pair is also what tells one apart from +# blacklist.json, which sits in the same folder. +if ($Vendor) { + $found = $false + $suggestion = '' + foreach ($file in (Get-ChildItem -LiteralPath $ProfilesDir -Filter '*.json' -File)) { + $name = [IO.Path]::GetFileNameWithoutExtension($file.Name) + if (-not (Test-Path -LiteralPath (Join-Path $ProfilesDir $name) -PathType Container)) { continue } + if ($name -ceq $Vendor) { $found = $true; break } + if ($name -eq $Vendor) { $suggestion = $name } + } + if (-not $found) { + if ($suggestion) { Die "unknown vendor '$Vendor'; vendor names are case-sensitive, did you mean '$suggestion'?" } + Die "unknown vendor '$Vendor': no such vendor in $ProfilesDir" + } +} + +# The validator's -v and orca_profile_tool.py check's --vendor both take that stem; an unscoped +# run passes neither, so the checks below splat these in either way. +$VendorArgs = if ($Vendor) { @('-v', $Vendor) } else { @() } +$VendorPyArgs = if ($Vendor) { @('--vendor', $Vendor) } else { @() } + +if (-not $WorkDir) { $WorkDir = Join-Path $RepoRoot '.test\check_profiles' } +$LogDir = Join-Path $WorkDir 'logs' +try { New-Item -ItemType Directory -Force -Path $LogDir | Out-Null } catch { Die "cannot create ${LogDir}: $_" } +$WorkDir = (Resolve-Path -LiteralPath $WorkDir).Path +$LogDir = Join-Path $WorkDir 'logs' + +if (-not $Validator) { $Validator = $env:ORCA_PROFILE_VALIDATOR } + +# ------------------------------------------------------------------- clean profile tree + +# The validator points its data dir at the profile tree, so it creates - and, with -g, fills - +# \user. A CI checkout never has that directory, and anything left in it from an +# earlier local run would be loaded as user presets and validated too. Move it aside for the +# duration of the run so what gets checked is what CI checks. +$script:StashedUserDir = '' + +function Push-UserPresets { + $user = Join-Path $ProfilesDir 'user' + if (-not (Test-Path -LiteralPath $user -PathType Container)) { return } + $script:StashedUserDir = Join-Path $WorkDir "user-presets-$PID" + Remove-Item -LiteralPath $script:StashedUserDir -Recurse -Force -ErrorAction SilentlyContinue + try { Move-Item -LiteralPath $user -Destination $script:StashedUserDir } + catch { $script:StashedUserDir = ''; Die "cannot move $user aside: $_" } + Write-Host "moved $user aside for the run (restored on exit)" +} + +function Pop-UserPresets { + # The validator leaves an empty user\default\{filament,machine,process} skeleton behind. + # Prune it directory by directory, never wholesale: one that holds a real file survives and + # is reported instead of being deleted. Runs even when nothing was stashed, so a tree that + # had no user\ before the run does not gain one. + $user = Join-Path $ProfilesDir 'user' + Remove-EmptyDirs $user + if (-not $script:StashedUserDir) { return } + if (Test-Path -LiteralPath $user) { + Write-Host "$user is not empty; your presets stay in $($script:StashedUserDir)" + } else { + Move-Item -LiteralPath $script:StashedUserDir -Destination $user + } + $script:StashedUserDir = '' +} + +function Remove-EmptyDirs([string] $Path) { + if (-not (Test-Path -LiteralPath $Path -PathType Container)) { return } + Get-ChildItem -LiteralPath $Path -Recurse -Directory -Force | + Sort-Object { $_.FullName.Length } -Descending | + ForEach-Object { + if (-not (Get-ChildItem -LiteralPath $_.FullName -Force)) { + Remove-Item -LiteralPath $_.FullName -Force + } + } + if (-not (Get-ChildItem -LiteralPath $Path -Force)) { Remove-Item -LiteralPath $Path -Force } +} + +# ---------------------------------------------------------------------------- downloads + +# Cached; -Refresh, or -Force, pulls a new copy. Release assets never change, so caching them is +# safe; the fixture manifest is the index that grows with every release, and CI re-reads it on +# every run. +function Save-Asset { + param([string] $Url, [string] $Dest, [switch] $Force) + + if (-not $Refresh -and -not $Force -and (Test-Path -LiteralPath $Dest -PathType Leaf) -and + (Get-Item -LiteralPath $Dest).Length -gt 0) { + return + } + New-Item -ItemType Directory -Force -Path (Split-Path -Parent $Dest) | Out-Null + Write-Host "downloading $(Split-Path -Leaf $Dest) ..." + + # Invoke-WebRequest spends most of a large download repainting its progress bar. + $ProgressPreference = 'SilentlyContinue' + $part = "$Dest.part" + for ($attempt = 1; ; $attempt++) { + try { + Invoke-WebRequest -Uri $Url -OutFile $part -UseBasicParsing + break + } catch { + if ($attempt -ge 3) { + Remove-Item -LiteralPath $part -Force -ErrorAction SilentlyContinue + throw "download failed: $Url" + } + } + } + Move-Item -LiteralPath $part -Destination $Dest -Force +} + +function Get-Sha256([string] $Path) { + return (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash +} + +# Directories a built validator can sit in, best first: build_win.bat names its trees build, +# build-dbginfo, build-minsize and build-dbg, each optionally -clang and -arm64 suffixed, and +# CMake puts the binary in src\. Each pattern is matched both directly under a build root +# and one level down (build\x64), for trees laid out the way the macOS ones are. +function Get-ValidatorSearchDirs { + foreach ($config in 'Release', 'RelWithDebInfo', 'MinSizeRel', 'Debug') { + Join-Path $RepoRoot "build*\src\$config" + Join-Path $RepoRoot "build*\*\src\$config" + } + Join-Path $RepoRoot 'build*\src' + Join-Path $RepoRoot 'build*\*\src' +} + +# The machine type from the PE header, which is what actually decides whether an .exe can run +# here - the name of the build tree only says what it was meant to be. +function Get-ExeArch([string] $Path) { + try { + $stream = [IO.File]::OpenRead($Path) + try { + $reader = New-Object IO.BinaryReader($stream) + $stream.Position = 0x3C # e_lfanew: offset of the PE header + $stream.Position = $reader.ReadInt32() + if ($reader.ReadUInt32() -ne 0x00004550) { return '' } # "PE\0\0" + switch ($reader.ReadUInt16()) { + 0x8664 { 'x64' } + 0xAA64 { 'arm64' } + 0x014C { 'x86' } + default { '' } + } + } finally { $stream.Dispose() } + } catch { '' } +} + +# First locally built OrcaSlicer_profile_validator.exe, in the order above. An x86 build, and on +# ARM64 an x64 one, is kept only as a fallback: it runs, but emulated. An ARM64 build on an x64 +# host does not run at all and is never offered. +function Find-LocalValidator { + $emulated = '' + foreach ($pattern in (Get-ValidatorSearchDirs)) { + foreach ($dir in @(Resolve-Path -Path $pattern -ErrorAction SilentlyContinue)) { + $candidate = Join-Path $dir.Path 'OrcaSlicer_profile_validator.exe' + if (-not (Test-Path -LiteralPath $candidate -PathType Leaf)) { continue } + $arch = Get-ExeArch $candidate + if (-not $arch -or $arch -eq $HostArch) { return $candidate } + if (-not $emulated -and ($arch -eq 'x86' -or $HostArch -eq 'arm64')) { $emulated = $candidate } + } + } + if ($emulated) { Write-Host "no $HostArch build found, falling back to $emulated (emulated)" } + return $emulated +} + +# The nightly release build, same one CI uses. Windows ships the bare .exe, x64 only. +function Save-NightlyValidator { + if ($HostArch -ne 'x64') { + Write-Host "the nightly Windows validator is x64; it runs here under emulation" + } + $exe = Join-Path $WorkDir 'validator\OrcaSlicer_profile_validator.exe' + Save-Asset -Url "$ValidatorReleaseUrl/OrcaSlicer_profile_validator_Windows_nightly.exe" -Dest $exe + return $exe +} + +function Resolve-Validator { + if ($Validator) { + if (-not (Test-Path -LiteralPath $Validator -PathType Leaf)) { Die "validator not found: $Validator" } + return (Resolve-Path -LiteralPath $Validator).Path + } + if (-not $Download) { + $local = Find-LocalValidator + if ($local) { + Write-Host "using locally built validator: $local" + return $local + } + } + try { $downloaded = Save-NightlyValidator } catch { Die "could not obtain a profile validator: $_" } + Write-Host "using downloaded validator: $downloaded" + return $downloaded +} + +# python3 is rarely on PATH on Windows: the py launcher is the reliable way in, and a bare +# `python` may be the Store stub, which prints an advert and exits non-zero. Probe each for the +# interpreter it actually resolves to, and use that. +function Resolve-Python { + $ErrorActionPreference = 'Continue' + if ($script:Python) { return $script:Python } + foreach ($candidate in 'py -3', 'python', 'python3') { + $words = $candidate -split ' ' + $exe = Get-Command $words[0] -CommandType Application -ErrorAction SilentlyContinue | Select-Object -First 1 + if (-not $exe) { continue } + $leading = @($words | Select-Object -Skip 1) + $found = & $exe.Source @leading -c 'import sys; print(sys.executable)' 2>$null + if ($LASTEXITCODE -eq 0 -and $found) { + $script:Python = "$found" + return $script:Python + } + } + Die 'no Python 3 found; install it (or the py launcher) and re-run' +} + +# The fixtures name every preset "__orca_test", after the "name" inside +# .json rather than the file stem -Vendor takes - BBL.json is "Bambulab", iQ.json is +# "innovatiQ". Falls back to the stem for a vendor file with no readable name. +function Get-VendorDisplayName { + $name = '' + try { $name = (Get-Content -LiteralPath (Join-Path $ProfilesDir "$Vendor.json") -Raw -ErrorAction Stop | ConvertFrom-Json).name } catch { } + if ($name) { return "$name" } + return $Vendor +} + +# Unpack just the presets one vendor's profiles own, and return how many that was. Each fixture +# preset was generated from a single system preset and inherits it by name - none inherits another +# user preset - so the selection is self-contained. +function Expand-VendorPresets([string] $Zip, [string] $Tree, [string] $Prefix) { + # .NET rather than Expand-Archive: a fixture holds around 20,000 entries, and unpacking every + # one of them to keep a twentieth costs more than the validation this is speeding up. + Add-Type -AssemblyName System.IO.Compression.FileSystem + $kept = 0 + $archive = [IO.Compression.ZipFile]::OpenRead($Zip) + try { + foreach ($entry in $archive.Entries) { + # A directory entry has an empty Name, so it never matches and is never created. + if (-not $entry.Name.StartsWith($Prefix, [StringComparison]::Ordinal)) { continue } + $dest = Join-Path $Tree $entry.FullName.Replace('/', [IO.Path]::DirectorySeparatorChar) + [IO.Directory]::CreateDirectory([IO.Path]::GetDirectoryName($dest)) | Out-Null + [IO.Compression.ZipFileExtensions]::ExtractToFile($entry, $dest, $true) + $kept++ + } + } finally { + $archive.Dispose() + } + return $kept +} + +# ---------------------------------------------------------------------------- checks + +$CheckBodies = @{ + + profile_tool = { + Invoke-Tool -Exe (Resolve-Python) -Arguments (@((Join-Path $RepoRoot 'scripts\orca_profile_tool.py'), 'check', '--profiles', $ProfilesDir) + $VendorPyArgs) + } + + validate_system = { + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-l', "$LogLevel")) + } + + # Slices a two-colour cube through every printer so all custom g-code (incl. + # change_filament_gcode) is expanded - catches undefined-placeholder / invalid-flow bugs the + # static checks cannot see. + validate_slice = { + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-s', '-l', "$LogLevel")) + } + + validate_filament_subtypes = { + Invoke-Tool -Exe $Validator -Arguments (@('-p', $ProfilesDir) + $VendorArgs + @('-l', "$LogLevel", '-f')) + } + + # Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each + # is unpacked over the current system profiles and validated, so a profile change that would + # break an existing user's presets fails here. + # + # Under -Vendor only that vendor's presets are unpacked, which is what makes the validator's + # -v usable here: -v filters the system vendors but never the user presets, so on a whole-tree + # snapshot it reports every other vendor's presets as unresolvable parents - thousands of + # errors saying nothing about the vendor under test. Teaching -v to filter user presets too is + # the deeper fix, but this runs against whatever validator is to hand, the published nightly + # included, so the picking has to happen here. It picks on the "_" + # filename prefix that generate_custom_presets() (the validator's -g mode) gave every preset in + # these fixtures; a fixture cut from a renamed generator would surface as the "checked nothing" + # warning below. Presets whose source had no vendor carry no prefix - a few of those still name + # one in the middle, like "PET @BBL A1_orca_test" - and only an unscoped run covers them. + validate_custom = { + $fixturesDir = Join-Path $WorkDir 'profile-fixtures' + $outputDir = Join-Path $WorkDir 'custom-preset-validation' + New-Item -ItemType Directory -Force -Path $fixturesDir, $outputDir | Out-Null + + $manifestPath = Join-Path $fixturesDir 'manifest.json' + Save-Asset -Url "$FixtureReleaseUrl/manifest.json" -Dest $manifestPath -Force + + $manifest = Get-Content -LiteralPath $manifestPath -Raw | ConvertFrom-Json + $entries = if ($manifest -is [array]) { $manifest } else { $manifest.fixtures } + $fixtures = @($entries | Where-Object { $_.version -and $_.asset }) + if (-not $fixtures) { + Write-CheckLog "No custom preset fixtures found in $FixtureReleaseUrl/manifest.json" + return 1 + } + + $vendorPrefix = if ($Vendor) { "$(Get-VendorDisplayName)_" } else { '' } + $totalKept = 0 + $status = 0 + $failedLogs = @() + $summary = @('## Custom Preset Fixture Validation', '', '| Version | Status | Log |', '| --- | --- | --- |') + + foreach ($fixture in $fixtures) { + $version = $fixture.version + $asset = $fixture.asset + $fixtureZip = Join-Path $fixturesDir $asset + $profileTree = Join-Path $outputDir "profiles-$version" + $logPath = Join-Path $outputDir "$version.log" + $assetUrl = "$FixtureReleaseUrl/$([uri]::EscapeDataString($asset))" + + Save-Asset -Url $assetUrl -Dest $fixtureZip + + $expected = $fixture.asset_sha256 + if ($expected -and $expected -ne '' -and (Get-Sha256 $fixtureZip) -ne $expected.ToUpperInvariant()) { + # A cached zip can be stale or truncated; the release asset itself is immutable, + # so deleting it forces Save-Asset to pull a fresh copy. + Write-Host "checksum mismatch for $asset, re-downloading" + Remove-Item -LiteralPath $fixtureZip -Force + Save-Asset -Url $assetUrl -Dest $fixtureZip + $actual = Get-Sha256 $fixtureZip + if ($actual -ne $expected.ToUpperInvariant()) { + Write-CheckLog "${asset}: expected $expected, got $actual" + return 1 + } + } + + Write-Host "validating custom presets from $version ..." + Remove-Item -LiteralPath $profileTree -Recurse -Force -ErrorAction SilentlyContinue + New-Item -ItemType Directory -Force -Path $profileTree | Out-Null + # Piped rather than copied through \*, so a vendor directory whose name + # holds a wildcard character is still copied by its literal path. Under -Vendor the + # validator opens only that vendor and OrcaFilamentLibrary and skips the other sixty-odd + # (PresetBundle::load_system_presets_from_json), so the rest are left out of the copy: + # ~3s a fixture that was going on files nothing opens. + Get-ChildItem -LiteralPath $ProfilesDir -Force | + Where-Object { -not $Vendor -or -not $_.PSIsContainer -or $_.Name -eq $Vendor -or $_.Name -eq 'OrcaFilamentLibrary' } | + Copy-Item -Destination $profileTree -Recurse -Force + Remove-Item -LiteralPath (Join-Path $profileTree 'user') -Recurse -Force -ErrorAction SilentlyContinue + if ($Vendor) { + $kept = Expand-VendorPresets $fixtureZip $profileTree $vendorPrefix + $totalKept += $kept + Write-CheckLog " $kept $Vendor preset file(s)" + } else { + Expand-Archive -LiteralPath $fixtureZip -DestinationPath $profileTree -Force + } + + $result = Invoke-Tool -Exe $Validator -Arguments (@('-p', $profileTree) + $VendorArgs + @('-l', "$LogLevel")) -OutFile $logPath + if ($result -eq 0) { + $summary += "| $version | PASS | $version.log |" + # Only failures are worth keeping; each tree is a full copy of resources\profiles. + Remove-Item -LiteralPath $profileTree -Recurse -Force + } else { + $summary += "| $version | FAIL | $version.log |" + $failedLogs += $logPath + $status = 1 + } + } + + # A vendor added after the newest fixture was cut appears in none of them: nothing failed, + # but nothing was checked either. + if ($Vendor -and $totalKept -eq 0) { + Write-CheckLog "no $Vendor presets in any fixture; validate_custom checked nothing" + } + + [IO.File]::WriteAllLines((Join-Path $outputDir 'summary.md'), [string[]] $summary) + $summary | ForEach-Object { Write-CheckLog $_ } + + if ($failedLogs) { + Write-CheckLog '' + Write-CheckLog '## Failed Fixture Logs' + foreach ($logPath in $failedLogs) { + Write-CheckLog '' + Write-CheckLog "### $([IO.Path]::GetFileNameWithoutExtension($logPath))" + Write-CheckLog '```' + Write-CheckLog (Get-LogHead $logPath 12000) + Write-CheckLog '```' + } + } + return $status + } +} + +# Heading CI puts above this check's log in the PR comment. +$CommentHeadings = @{ + profile_tool = '### Profile Check Failed (orca_profile_tool.py)' + validate_system = '### System Profile Validation Failed' + validate_slice = '### Slice Validation Failed (custom g-code expansion)' + validate_filament_subtypes = '### Filament Subtype Validation Failed' + validate_custom = '### Custom Preset Validation Failed' +} + +# ---------------------------------------------------------------------------- run + +function Invoke-Check([string] $Name) { + $log = Join-Path $LogDir "$Name.log" + Write-Host '' + Write-Host "==> $Name$(if ($Vendor) { " ($Vendor)" })" -ForegroundColor Cyan + + $script:LogWriter = New-LogWriter $log + try { + $result = & $CheckBodies[$Name] | Select-Object -Last 1 + } catch { + Write-CheckLog "$_" + $result = 1 + } finally { + $script:LogWriter.Dispose() + $script:LogWriter = $null + } + + if ([int] $result -eq 0) { + Write-Host " $Name passed" -ForegroundColor Green + return $true + } + Write-Host " $Name failed (exit $result)" -ForegroundColor Red + return $false +} + +# The fixture trees under the work dir are shared scratch space keyed by fixture version, so a +# second run would delete a tree the first one is validating. +$LockDir = Join-Path $WorkDir '.lock' +try { New-Item -ItemType Directory -Path $LockDir -ErrorAction Stop | Out-Null } +catch { Die "another run is using $WorkDir (pass -WorkDir, or remove $LockDir if no run is active)" } + +# The validator writes UTF-8, but PowerShell decodes a child process's output using the console +# code page, which mangles the accented and CJK preset names in its messages. +$PreviousOutputEncoding = [Console]::OutputEncoding + +try { + [Console]::OutputEncoding = New-Object Text.UTF8Encoding($false) + Push-UserPresets + + if ($Checks | Where-Object { $_ -ne 'profile_tool' }) { $Validator = Resolve-Validator } + + # An empty printer set is a failure to the sweep, so validate_slice is recorded as skipped + # rather than run for a vendor that ships no printers (the filament-only OrcaFilamentLibrary); + # naming the check explicitly still runs it. + $results = [ordered] @{} + $skipReasons = @{} + foreach ($name in $AllChecks) { + if ($Checks -notcontains $name) { continue } + if ($name -eq 'validate_slice' -and -not $NamedChecks -and $Vendor -and + -not (Test-Path -LiteralPath (Join-Path (Join-Path $ProfilesDir $Vendor) 'machine') -PathType Container)) { + $results[$name] = 'skip' + $skipReasons[$name] = "$Vendor ships no printers" + } else { + $results[$name] = if (Invoke-Check $name) { 'pass' } else { 'fail' } + } + } + + Write-Host '' + Write-Host '==> summary' -ForegroundColor Cyan + foreach ($name in $results.Keys) { + switch ($results[$name]) { + 'pass' { Write-Host " PASS $name" -ForegroundColor Green } + 'skip' { Write-Host " SKIP $name ($($skipReasons[$name]))" -ForegroundColor Yellow } + default { Write-Host " FAIL $name ($(Join-Path $LogDir "$name.log"))" -ForegroundColor Red } + } + } + + $failed = @($results.Keys | Where-Object { $results[$_] -eq 'fail' }) + if (-not $failed) { + Remove-Item -LiteralPath (Join-Path $WorkDir 'pr_comment.md') -Force -ErrorAction SilentlyContinue + Write-Host '' + if (@($results.Values) -contains 'skip') { + Write-Host "Every check that ran passed, but CI runs the skipped ones too. Logs: $LogDir" -ForegroundColor Green + } else { + Write-Host "All checks passed. Logs: $LogDir" -ForegroundColor Green + } + exit 0 + } + + # The comment check_profiles_comment.yml would post when something fails. + $comment = @( + # Marker matched by check_profiles_comment.yml to delete prior comments. + '' + '## :x: Profile Validation Errors' + '' + foreach ($name in $failed) { + $CommentHeadings[$name] + '' + '```' + Get-LogHead (Join-Path $LogDir "$name.log") 30000 + '```' + '' + } + '---' + '*Fix the errors above and push a new commit. To reproduce this run locally: `scripts/check_profile.sh`, or `scripts\check_profile.bat` on Windows.*' + ) + $commentPath = Join-Path $WorkDir 'pr_comment.md' + [IO.File]::WriteAllLines($commentPath, [string[]] $comment) + + Write-Host '' + Write-Host "One or more profile checks failed. Logs: $LogDir" -ForegroundColor Red + Write-Host "The comment CI would post: $commentPath" + exit 1 +} finally { + Pop-UserPresets + Remove-Item -LiteralPath $LockDir -Force -ErrorAction SilentlyContinue + [Console]::OutputEncoding = $PreviousOutputEncoding +} diff --git a/scripts/check_profile.sh b/scripts/check_profile.sh new file mode 100755 index 0000000000..42e72b93f7 --- /dev/null +++ b/scripts/check_profile.sh @@ -0,0 +1,650 @@ +#!/usr/bin/env bash +# +# Local twin of the "Check profiles" CI job (.github/workflows/check_profiles.yml). +# +# Runs the same five checks, in the same order, with the same validator flags, and with the +# same semantics: every check runs even after an earlier one fails (the workflow's +# continue-on-error), then the script exits non-zero once at the end. +# +# Everything that has to be downloaded - the profile validator and the custom-preset fixture +# archives - lands under /.test/check_profiles/ and is reused on the next run. That +# directory also holds one log per check plus a copy of the comment CI would post on the PR. +# +# resources/profiles/user, which the validator creates as its data dir but a CI checkout never +# has, is moved aside for the duration of the run and restored on exit. Only one run per work +# dir at a time. +# +# -v/--vendor narrows a run to one vendor while working on that vendor's profiles - the one +# deliberate divergence from CI, which always checks the whole tree. A check that cannot be +# narrowed is left out of the run and reported as skipped; see usage(). +# +# Usage: scripts/check_profile.sh [OPTION]... [CHECK]... + +# The check_* functions run through run_check, which dispatches on the check name, so +# ShellCheck cannot see that they (and what they call) are used. +# shellcheck disable=SC2329 + +set -uo pipefail + +VALIDATOR_RELEASE_URL="https://github.com/OrcaSlicer/OrcaSlicer/releases/download/nightly-builds" +FIXTURE_RELEASE_URL="https://github.com/OrcaSlicer/OrcaSlicer-profile-validator/releases/download/fixture-archive" + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd -- "${SCRIPT_DIR}/.." && pwd)" + +HOST_ARCH="$(uname -m)" + +PROFILES_DIR="${REPO_ROOT}/resources/profiles" +WORK_DIR="${REPO_ROOT}/.test/check_profiles" +VALIDATOR="${ORCA_PROFILE_VALIDATOR:-}" +# Vendor to check, named after its .json - empty means every vendor, which is exactly what +# both the validator's -v and orca_profile_tool.py check's --vendor take an empty value to mean. +# So the flag is passed unconditionally below rather than kept in an array bash 3.2 cannot expand +# empty under `set -u`. +VENDOR="" +LOG_LEVEL=2 +PREFER_DOWNLOAD=0 +REFRESH=0 + +ALL_CHECKS=(profile_tool validate_system validate_slice validate_filament_subtypes validate_custom) +CHECKS=() +# "pass|fail" per check that ran, plus "skipwhy" for one a vendor +# scope left out; a string rather than an array because bash 3.2 (still the /bin/bash on macOS) +# cannot expand an empty array under `set -u`. +RESULTS="" + +usage() { + cat < -l + validate_slice validator -p -s -l + validate_filament_subtypes validator -p -l -f + validate_custom validator against every released custom-preset fixture + +Options: + -p, --profiles DIR profile tree to validate (default: resources/profiles) + -v, --vendor NAME check only this vendor, named after its .json (e.g. "Co Print") + --validator BIN OrcaSlicer_profile_validator to use; also \$ORCA_PROFILE_VALIDATOR. + Default: the local build*/ Release build (then RelWithDebInfo, then + Debug) for this architecture, else the nightly release build is + downloaded for this platform + --download ignore local builds and use the downloaded nightly validator + --refresh re-download the validator and fixtures instead of using the cache + --work-dir DIR downloads, logs and fixture trees (default: .test/check_profiles) + -l, --log-level N validator log level (default: ${LOG_LEVEL}, as in CI) + -h, --help show this help + +Note: profile_tool is the only check that is not the validator binary; it makes the static +checks the validator cannot, because the validator loads the tree the way the slicer does +and so never sees a profile no .json indexes, a preset name two files claim, or a +file normalize and update-index would still rewrite. + +Note: --vendor narrows validate_custom too, by keeping only that vendor's presets in each +fixture tree. The one check it cannot narrow is validate_slice for a vendor that ships no +printers; the summary reports that one as skipped, and naming it explicitly still runs it. +profile_tool keeps its two cross-vendor checks (setting_id and filament_id) tree-wide, so a +scoped run can still fail on another vendor's files. +EOF +} + +msg() { printf '%s\n' "$*" >&2; } +die() { printf 'check_profile.sh: %s\n' "$*" >&2; exit 2; } + +if [ -t 1 ]; then + C_RED=$'\033[91m'; C_GREEN=$'\033[92m'; C_BOLD=$'\033[1m'; C_RESET=$'\033[0m' +else + C_RED=''; C_GREEN=''; C_BOLD=''; C_RESET='' +fi + +# ---------------------------------------------------------------------------- arguments + +while [ $# -gt 0 ]; do + case "$1" in + -h|--help) usage; exit 0 ;; + -p|--profiles) [ $# -ge 2 ] || die "$1 needs a directory"; PROFILES_DIR="$2"; shift 2 ;; + -v|--vendor) [ $# -ge 2 ] || die "$1 needs a vendor name"; VENDOR="$2"; shift 2 ;; + --validator) [ $# -ge 2 ] || die "$1 needs a path"; VALIDATOR="$2"; shift 2 ;; + --work-dir) [ $# -ge 2 ] || die "$1 needs a directory"; WORK_DIR="$2"; shift 2 ;; + -l|--log-level) [ $# -ge 2 ] || die "$1 needs a number"; LOG_LEVEL="$2"; shift 2 ;; + --download) PREFER_DOWNLOAD=1; shift ;; + --refresh) REFRESH=1; shift ;; + -*) die "unknown option '$1' (try --help)" ;; + *) + known=0 + for check in "${ALL_CHECKS[@]}"; do + [ "$1" = "${check}" ] && known=1 + done + [ "${known}" -eq 1 ] || die "unknown check '$1' (try --help)" + CHECKS[${#CHECKS[@]}]="$1" + shift + ;; + esac +done + +# A check named on the command line always runs; only the default set is narrowed (see the run +# loop below). +NAMED_CHECKS="${#CHECKS[@]}" +[ "${NAMED_CHECKS}" -gt 0 ] || CHECKS=("${ALL_CHECKS[@]}") + +[ -d "${PROFILES_DIR}" ] || die "profile directory not found: ${PROFILES_DIR}" +PROFILES_DIR="$(cd -- "${PROFILES_DIR}" && pwd)" + +# A vendor neither tool knows is not an error to them: the static checks load nothing of their own +# and still report success, so a typo would otherwise be three green checks and one baffling slice +# failure. The match has to be made on the names themselves rather than with a -f test - the +# validator compares the .json stem case-sensitively, while a case-insensitive filesystem +# (macOS, Windows) would let "creality" pass a file test and then match no vendor. A vendor is a +# .json with a sibling / directory; that pair is also what tells one apart from +# blacklist.json, which sits in the same folder. +if [ -n "${VENDOR}" ]; then + wanted="$(printf '%s' "${VENDOR}" | tr '[:upper:]' '[:lower:]')" + found="" + suggestion="" + for file in "${PROFILES_DIR}"/*.json; do + name="${file##*/}"; name="${name%.json}" + [ -d "${PROFILES_DIR}/${name}" ] || continue + if [ "${name}" = "${VENDOR}" ]; then + found=1 + break + fi + [ "$(printf '%s' "${name}" | tr '[:upper:]' '[:lower:]')" = "${wanted}" ] && suggestion="${name}" + done + if [ -z "${found}" ]; then + [ -z "${suggestion}" ] || die "unknown vendor '${VENDOR}'; vendor names are case-sensitive, did you mean '${suggestion}'?" + die "unknown vendor '${VENDOR}': no such vendor in ${PROFILES_DIR}" + fi +fi + +LOG_DIR="${WORK_DIR}/logs" +mkdir -p "${LOG_DIR}" || die "cannot create ${LOG_DIR}" +WORK_DIR="$(cd -- "${WORK_DIR}" && pwd)" +LOG_DIR="${WORK_DIR}/logs" + +wants() { + local check + for check in "${CHECKS[@]}"; do + [ "${check}" = "$1" ] && return 0 + done + return 1 +} + +# ------------------------------------------------------------------- clean profile tree + +# The validator points its data dir at the profile tree, so it creates - and, with -g, fills - +# /user. A CI checkout never has that directory, and anything left in it from an +# earlier local run would be loaded as user presets and validated too. Move it aside for the +# duration of the run so what gets checked is what CI checks. +STASHED_USER_DIR="" + +stash_user_presets() { + [ -d "${PROFILES_DIR}/user" ] || return 0 + STASHED_USER_DIR="${WORK_DIR}/user-presets-$$" + rm -rf "${STASHED_USER_DIR}" + mv "${PROFILES_DIR}/user" "${STASHED_USER_DIR}" || { STASHED_USER_DIR=""; die "cannot move ${PROFILES_DIR}/user aside"; } + msg "moved ${PROFILES_DIR}/user aside for the run (restored on exit)" +} + +restore_user_presets() { + # The validator leaves an empty user/default/{filament,machine,process} skeleton behind. + # Prune it with rmdir, never rm -rf: a directory that holds a real file survives and is + # reported instead of being deleted. Runs even when nothing was stashed, so a tree that had + # no user/ before the run does not gain one. + find "${PROFILES_DIR}/user" -depth -type d -exec rmdir {} + 2>/dev/null + [ -n "${STASHED_USER_DIR}" ] || return 0 + if [ -d "${PROFILES_DIR}/user" ]; then + msg "${PROFILES_DIR}/user is not empty; your presets stay in ${STASHED_USER_DIR}" + STASHED_USER_DIR="" + return 0 + fi + mv "${STASHED_USER_DIR}" "${PROFILES_DIR}/user" + STASHED_USER_DIR="" +} + +# The fixture trees under the work dir are shared scratch space keyed by fixture version, so a +# second run would delete a tree the first one is validating. +LOCK_DIR="${WORK_DIR}/.lock" +mkdir "${LOCK_DIR}" 2>/dev/null || + die "another run is using ${WORK_DIR} (pass --work-dir, or remove ${LOCK_DIR} if no run is active)" + +cleanup() { + restore_user_presets + rmdir "${LOCK_DIR}" 2>/dev/null +} + +# Installed only once the lock is ours, so a refused start never releases someone else's. +trap cleanup EXIT +trap 'cleanup; exit 130' INT TERM + +stash_user_presets + +# ---------------------------------------------------------------------------- downloads + +# fetch URL DEST [force] - cached; --refresh, or a non-empty third argument, forces a new +# download. Release assets never change, so caching them is safe; the fixture manifest is the +# index that grows with every release, and CI re-reads it on every run. +fetch() { + local url="$1" dest="$2" force="${3:-}" + if [ "${REFRESH}" -eq 0 ] && [ -z "${force}" ] && [ -s "${dest}" ]; then + return 0 + fi + mkdir -p "$(dirname -- "${dest}")" || return 1 + msg "downloading $(basename -- "${dest}") ..." + if ! curl -fsSL --retry 3 -o "${dest}.part" "${url}"; then + rm -f "${dest}.part" + msg "download failed: ${url}" + return 1 + fi + mv -f "${dest}.part" "${dest}" +} + +sha256_of() { + if command -v sha256sum >/dev/null 2>&1; then + sha256sum "$1" | cut -d' ' -f1 + elif command -v shasum >/dev/null 2>&1; then + shasum -a 256 "$1" | cut -d' ' -f1 + else + return 1 + fi +} + +# Directories a built validator can sit in, best first: every Ninja Multi-Config Release tree, +# then RelWithDebInfo, then Debug, then a single-config generator's plain src/. Each pattern is +# matched both directly under a build root (build/) and one level down (build/arm64, build/x64), +# and unmatched globs are dropped by the caller's -d test. +validator_search_dirs() { + local config + for config in Release RelWithDebInfo Debug; do + printf '%s\n' "${REPO_ROOT}"/build*/src/"${config}" "${REPO_ROOT}"/build*/*/src/"${config}" + done + printf '%s\n' "${REPO_ROOT}"/build*/src "${REPO_ROOT}"/build*/*/src +} + +# A build tree named for the other architecture (build/x86_64 on an arm64 host, build/arm64 on +# an x64 one) is a last resort: on Linux it will not run at all, on macOS it goes via Rosetta. +# Takes a repo-relative path - an absolute one would also match an arch name in the checkout path. +is_foreign_arch_dir() { + case "${HOST_ARCH}" in + arm64|aarch64) case "$1" in *x86_64*|*x86-64*|*x64*|*amd64*) return 0 ;; esac ;; + x86_64|amd64) case "$1" in *arm64*|*aarch64*) return 0 ;; esac ;; + esac + return 1 +} + +# First locally built OrcaSlicer_profile_validator, in the order above. macOS puts it in an .app +# bundle, Linux and Windows next to the other binaries. +find_local_validator() { + local dir candidate foreign="" + while IFS= read -r dir; do + [ -d "${dir}" ] || continue + for candidate in \ + "${dir}/OrcaSlicer_profile_validator" \ + "${dir}/OrcaSlicer_profile_validator.exe" \ + "${dir}/OrcaSlicer_profile_validator.app/Contents/MacOS/OrcaSlicer_profile_validator"; do + [ -f "${candidate}" ] && [ -x "${candidate}" ] || continue + if ! is_foreign_arch_dir "${dir#"${REPO_ROOT}"/}"; then + printf '%s\n' "${candidate}" + return 0 + fi + [ -n "${foreign}" ] || foreign="${candidate}" + done + done </dev/null || return 1 + app_src="$(find "${mounted}" -maxdepth 1 -name '*.app' -print 2>/dev/null | head -n 1)" + if [ -n "${app_src}" ]; then + cp -R "${app_src}" "${app}" + fi + hdiutil detach "${mounted}" >/dev/null 2>&1 + rmdir "${mounted}" 2>/dev/null + [ -x "${binary}" ] || { msg "no validator app inside ${dmg}"; return 1; } + fi + ;; + MINGW*|MSYS*|CYGWIN*) + binary="${dest}/OrcaSlicer_profile_validator.exe" + fetch "${VALIDATOR_RELEASE_URL}/OrcaSlicer_profile_validator_Windows_nightly.exe" "${binary}" || return 1 + chmod +x "${binary}" || return 1 + ;; + *) + msg "no nightly validator published for $(uname -s); build it (-DORCA_TOOLS=ON) and pass --validator" + return 1 + ;; + esac + printf '%s\n' "${binary}" +} + +resolve_validator() { + if [ -n "${VALIDATOR}" ]; then + [ -x "${VALIDATOR}" ] || die "validator not executable: ${VALIDATOR}" + return 0 + fi + if [ "${PREFER_DOWNLOAD}" -eq 0 ]; then + VALIDATOR="$(find_local_validator)" + if [ -n "${VALIDATOR}" ]; then + msg "using locally built validator: ${VALIDATOR}" + return 0 + fi + fi + VALIDATOR="$(download_validator)" || die "could not obtain a profile validator" + msg "using downloaded validator: ${VALIDATOR}" +} + +# ---------------------------------------------------------------------------- checks + +check_profile_tool() { + python3 "${REPO_ROOT}/scripts/orca_profile_tool.py" check --profiles "${PROFILES_DIR}" --vendor "${VENDOR}" +} + +check_validate_system() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -l "${LOG_LEVEL}" +} + +# Slices a two-colour cube through every printer so all custom g-code (incl. change_filament_gcode) +# is expanded - catches undefined-placeholder / invalid-flow bugs the static checks cannot see. +check_validate_slice() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -s -l "${LOG_LEVEL}" +} + +check_validate_filament_subtypes() { + "${VALIDATOR}" -p "${PROFILES_DIR}" -v "${VENDOR}" -l "${LOG_LEVEL}" -f +} + +# The fixtures name every preset "__orca_test", after the "name" inside +# .json rather than the file stem --vendor takes - BBL.json is "Bambulab", iQ.json is +# "innovatiQ". Falls back to the stem for a vendor file with no readable name. +vendor_display_name() { + local name + name="$(VENDOR_JSON="${PROFILES_DIR}/${VENDOR}.json" python3 - <<'PY' +import json +import os + +try: + with open(os.environ["VENDOR_JSON"], encoding="utf-8") as fh: + print(json.load(fh).get("name", "")) +except Exception: + pass +PY +)" + printf '%s\n' "${name:-${VENDOR}}" +} + +# Every released fixture is a snapshot of user presets saved by that OrcaSlicer version; each is +# unpacked over the current system profiles and validated, so a profile change that would break +# an existing user's presets fails here. +# +# Under --vendor only that vendor's presets are unpacked, which is what makes the validator's -v +# usable here: -v filters the system vendors but never the user presets, so on a whole-tree +# snapshot it reports every other vendor's presets as unresolvable parents - thousands of errors +# saying nothing about the vendor under test. Teaching -v to filter user presets too is the deeper +# fix, but this runs against whatever validator is to hand, the published nightly included, so the +# picking has to happen here. It picks on the "_" filename prefix that +# generate_custom_presets() (the validator's -g mode) gave every preset in these fixtures; a +# fixture cut from a renamed generator would surface as the "checked nothing" warning below. +# Presets whose source had no vendor carry no prefix - a few of those still name one in the +# middle, like "PET @BBL A1_orca_test" - and only an unscoped run covers them. +check_validate_custom() { + local fixtures_dir="${WORK_DIR}/profile-fixtures" + local output_dir="${WORK_DIR}/custom-preset-validation" + local summary="${output_dir}/summary.md" + local status=0 failed_logs="" vendor_prefix="" total_kept=0 + local version asset expected_sha256 asset_url fixture_zip profile_tree log_path actual_sha256 result kept + + command -v unzip >/dev/null 2>&1 || { msg "unzip is required for validate_custom"; return 1; } + [ -z "${VENDOR}" ] || vendor_prefix="$(vendor_display_name)_" + mkdir -p "${fixtures_dir}" "${output_dir}" || return 1 + + fetch "${FIXTURE_RELEASE_URL}/manifest.json" "${fixtures_dir}/manifest.json" force || return 1 + + MANIFEST_PATH="${fixtures_dir}/manifest.json" python3 - > "${fixtures_dir}/fixtures.tsv" <<'PY' +import json +import os + +with open(os.environ["MANIFEST_PATH"], encoding="utf-8") as fh: + manifest = json.load(fh) + +if isinstance(manifest, dict): + entries = manifest.get("fixtures", []) +else: + entries = manifest + +for entry in entries: + version = entry.get("version", "") + asset = entry.get("asset", "") + sha256 = entry.get("asset_sha256", "") + if not version or not asset: + continue + print(f"{version}\t{asset}\t{sha256}") +PY + + if [ ! -s "${fixtures_dir}/fixtures.tsv" ]; then + echo "No custom preset fixtures found in ${FIXTURE_RELEASE_URL}/manifest.json" + return 1 + fi + + { + echo "## Custom Preset Fixture Validation" + echo "" + echo "| Version | Status | Log |" + echo "| --- | --- | --- |" + } > "${summary}" + + while IFS=$'\t' read -r version asset expected_sha256; do + [ -n "${version}" ] || continue + fixture_zip="${fixtures_dir}/${asset}" + profile_tree="${output_dir}/profiles-${version}" + log_path="${output_dir}/${version}.log" + + asset_url="${FIXTURE_RELEASE_URL}/$(python3 -c 'import sys, urllib.parse; print(urllib.parse.quote(sys.argv[1], safe=""))' "${asset}")" + fetch "${asset_url}" "${fixture_zip}" || return 1 + + if [ -n "${expected_sha256}" ] && [ "${expected_sha256}" != "" ]; then + actual_sha256="$(sha256_of "${fixture_zip}")" + if [ -z "${actual_sha256}" ]; then + msg "no sha256 tool available, skipping checksum of ${asset}" + elif [ "${actual_sha256}" != "${expected_sha256}" ]; then + # A cached zip can be stale or truncated; the release asset itself is immutable, + # so deleting it forces fetch to pull a fresh copy. + msg "checksum mismatch for ${asset}, re-downloading" + rm -f "${fixture_zip}" + fetch "${asset_url}" "${fixture_zip}" || return 1 + actual_sha256="$(sha256_of "${fixture_zip}")" + [ "${actual_sha256}" = "${expected_sha256}" ] || { msg "${asset}: expected ${expected_sha256}, got ${actual_sha256}"; return 1; } + fi + fi + + msg "validating custom presets from ${version} ..." + rm -rf "${profile_tree}" + mkdir -p "${profile_tree}" || return 1 + if [ -n "${VENDOR}" ]; then + # -v has the validator open this vendor and OrcaFilamentLibrary and skip the rest + # (PresetBundle::load_system_presets_from_json), and unzip's * spans '/', so one + # pattern reaches every preset type. Copying and unpacking only those turns a ~5s + # setup per fixture into ~0.5s. Naming the vendor twice, when it is the library + # itself, is not an error to cp; exit 11 is unzip's "nothing matched", which is the + # fixture-predates-the-vendor case the warning below reports. + cp -a "${PROFILES_DIR}"/*.json "${PROFILES_DIR}/${VENDOR}" \ + "${PROFILES_DIR}/OrcaFilamentLibrary" "${profile_tree}/" || return 1 + unzip -q "${fixture_zip}" "user/*/${vendor_prefix}*" -d "${profile_tree}" + result=$? + [ "${result}" -eq 0 ] || [ "${result}" -eq 11 ] || return 1 + kept="$(find "${profile_tree}/user" -type f 2>/dev/null | wc -l | tr -d ' ')" + total_kept=$((total_kept + kept)) + msg " ${kept} ${VENDOR} preset file(s)" + else + cp -a "${PROFILES_DIR}/." "${profile_tree}/" || return 1 + rm -rf "${profile_tree}/user" + unzip -q "${fixture_zip}" -d "${profile_tree}" || return 1 + fi + + "${VALIDATOR}" -p "${profile_tree}" -v "${VENDOR}" -l "${LOG_LEVEL}" > "${log_path}" 2>&1 + result=$? + + if [ "${result}" -eq 0 ]; then + echo "| ${version} | PASS | ${version}.log |" >> "${summary}" + # Only failures are worth keeping; each tree is a full copy of resources/profiles. + rm -rf "${profile_tree}" + else + echo "| ${version} | FAIL | ${version}.log |" >> "${summary}" + failed_logs="${failed_logs}${log_path}"$'\n' + status=1 + fi + done < "${fixtures_dir}/fixtures.tsv" + + # A vendor added after the newest fixture was cut appears in none of them: nothing failed, but + # nothing was checked either. + if [ -n "${VENDOR}" ] && [ "${total_kept}" -eq 0 ]; then + msg "no ${VENDOR} presets in any fixture; validate_custom checked nothing" + fi + + cat "${summary}" + if [ -n "${failed_logs}" ]; then + echo "" + echo "## Failed Fixture Logs" + while IFS= read -r log_path; do + [ -n "${log_path}" ] || continue + echo "" + echo "### $(basename "${log_path}" .log)" + echo '```' + head -c 12000 "${log_path}" || echo "No output captured" + echo '```' + done < %s%s%s\n' "${C_BOLD}" "${name}" "${VENDOR:+ (${VENDOR})}" "${C_RESET}" + "check_${name}" 2>&1 | tee "${log}" + result="${PIPESTATUS[0]}" + if [ "${result}" -eq 0 ]; then + printf '%s %s passed%s\n' "${C_GREEN}" "${name}" "${C_RESET}" + RESULTS="${RESULTS}${name}"$'\t'"pass"$'\n' + else + printf '%s %s failed (exit %s)%s\n' "${C_RED}" "${name}" "${result}" "${C_RESET}" + RESULTS="${RESULTS}${name}"$'\t'"fail"$'\n' + fi +} + +if wants validate_system || wants validate_slice || wants validate_filament_subtypes || wants validate_custom; then + resolve_validator +fi + +# An empty printer set is a failure to the sweep, so validate_slice is recorded as skipped rather +# than run for a vendor that ships no printers (the filament-only OrcaFilamentLibrary); naming the +# check explicitly still runs it. +for check in "${ALL_CHECKS[@]}"; do + wants "${check}" || continue + if [ "${check}" = validate_slice ] && [ "${NAMED_CHECKS}" -eq 0 ] && [ -n "${VENDOR}" ] && + [ ! -d "${PROFILES_DIR}/${VENDOR}/machine" ]; then + RESULTS="${RESULTS}${check}"$'\t'"skip"$'\t'"${VENDOR} ships no printers"$'\n' + else + run_check "${check}" + fi +done + +# Summary, plus the comment check_profiles_comment.yml would post when something fails. +failed=0 +skipped=0 +printf '\n%s==> summary%s\n' "${C_BOLD}" "${C_RESET}" +while IFS=$'\t' read -r name result why; do + [ -n "${name}" ] || continue + if [ "${result}" = "pass" ]; then + printf '%s PASS%s %s\n' "${C_GREEN}" "${C_RESET}" "${name}" + elif [ "${result}" = "skip" ]; then + printf '%s SKIP%s %s (%s)\n' "${C_BOLD}" "${C_RESET}" "${name}" "${why}" + skipped=1 + else + printf '%s FAIL%s %s (%s)\n' "${C_RED}" "${C_RESET}" "${name}" "${LOG_DIR}/${name}.log" + failed=1 + fi +done <" + echo "## :x: Profile Validation Errors" + echo "" + while IFS=$'\t' read -r name result; do + [ "${result}" = "fail" ] || continue + comment_heading "${name}" + echo "" + echo '```' + head -c 30000 "${LOG_DIR}/${name}.log" || echo "No output captured" + echo '```' + echo "" + done < "${WORK_DIR}/pr_comment.md" + +printf '\n%sOne or more profile checks failed.%s Logs: %s\n' "${C_RED}" "${C_RESET}" "${LOG_DIR}" +printf 'The comment CI would post: %s\n' "${WORK_DIR}/pr_comment.md" +exit 1 diff --git a/scripts/flatpak/.gitignore b/scripts/flatpak/.gitignore index 3b01f15d01..21abf7a876 100644 --- a/scripts/flatpak/.gitignore +++ b/scripts/flatpak/.gitignore @@ -1,3 +1,4 @@ builddir .flatpak-builder *.docker.yml +deps.tar* diff --git a/scripts/flatpak/check_manifest_cacheable.sh b/scripts/flatpak/check_manifest_cacheable.sh new file mode 100755 index 0000000000..e82190ca81 --- /dev/null +++ b/scripts/flatpak/check_manifest_cacheable.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Check a Flatpak manifest for `type: dir` sources at or before the orca_deps +# module. +# +# Usage: check_manifest_cacheable.sh [manifest] +# Defaults to com.orcaslicer.OrcaSlicer.yml next to this script. +# +# Exits 0 when none are found, 1 when any are, listing them as file:line, and +# 2 when the manifest is missing or has no orca_deps module. + +set -euo pipefail + +anchor=orca_deps +manifest=${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/com.orcaslicer.OrcaSlicer.yml} + +module_re='^ - name: ' +dir_re='(^|[-{,[:space:]])type:[[:space:]]*dir([,}[:space:]]|$)' + +if [ ! -f "$manifest" ]; then + echo "$manifest: no such file" >&2 + exit 2 +fi + +anchor_start=$(grep -n "${module_re}${anchor}[[:space:]]*$" "$manifest" | cut -d: -f1 || true) +if [ -z "$anchor_start" ]; then + echo "$manifest: no module named '$anchor'; this check needs updating" >&2 + exit 2 +fi + +# First module header after the anchor, or EOF if the anchor is last. +anchor_end=$(grep -n "$module_re" "$manifest" | cut -d: -f1 | + awk -v s="$anchor_start" '$1 > s { print $1; exit }') +[ -n "$anchor_end" ] || anchor_end=$(awk 'END { print NR + 1 }' "$manifest") + +violations=$(awk -v e="$anchor_end" -v f="$manifest" -v mre="$module_re" -v dre="$dir_re" ' + { sub(/\r$/, "") } + /^[[:space:]]*#/ { next } + $0 ~ mre { module = $3 } + NR < e && $0 ~ dre { + printf "%s:%d: %s (module %s)\n", f, NR, $0, module + }' "$manifest") + +if [ -n "$violations" ]; then + printf '%s\n' "$violations" >&2 + echo >&2 + echo "flatpak-builder cannot checksum a directory, so each of these makes" >&2 + echo "$anchor and every module after it rebuild from scratch on every run." >&2 + echo "See the $anchor sources in this manifest for the tarball used instead." >&2 + exit 1 +fi + +echo "manifest OK: no 'type: dir' source at or before $anchor" diff --git a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml index d081e2f997..fa7c329b4b 100644 --- a/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml +++ b/scripts/flatpak/com.orcaslicer.OrcaSlicer.yml @@ -144,6 +144,7 @@ modules: env: BUILD_DIR: deps/build_flatpak build-commands: + - tar xf deps.tar - | cmake -S deps -B $BUILD_DIR \ -DFLATPAK=ON \ @@ -169,10 +170,10 @@ modules: - /libpython/include sources: - # OrcaSlicer deps/ directory (avoids copying .git from worktree) - - type: dir - path: ../../deps - dest: deps + # flatpak-builder cannot checksum a directory, so a `type: dir` here would + # rebuild every dependency on every run. Generated by make_deps_tar.sh. + - type: file + path: deps.tar # --------------------------------------------------------------- # Pre-downloaded dependency archives @@ -222,6 +223,12 @@ modules: sha256: 51afe0db79af8386e2027d56d685177135581e0ee82ade9d7f2caff8deab5ec5 dest: external-packages/OpenCSG + # SolveSpace libslvs (2D sketch constraint solver, Design tab) + - type: file + url: https://github.com/JacobStoren/SolveSpaceLib/archive/4d8704523e4bf212fadf5189f92484244f670fea.zip + sha256: 1c4bdde9c3c6ef20ea4b50b73601de56769f2eb131b36927d7c6489f102e6c30 + dest: external-packages/SLVS + # Blosc 1.17.0 (tamasmeszaros fork) - type: file url: https://github.com/tamasmeszaros/c-blosc/archive/refs/heads/v1.17.0_tm.zip @@ -318,6 +325,12 @@ modules: sha256: 0ba163956f2d468b19a91b96c5aba66ee9610843ea41dda628ea44cdafde7db7 dest: external-packages/wxInspector + # FFmpeg n7.0.3 + - type: file + url: https://github.com/FFmpeg/FFmpeg/archive/refs/tags/n7.0.3.tar.gz + sha256: deedcabe339165214a3637df4c86a507aef0d793cf8774ff68735f4737e8ddbc + dest: external-packages/FFMPEG + # --------------------------------------------------------------- # Fallback archives for deps normally provided by the GNOME SDK. # These are only used if find_package() fails to locate them. @@ -371,6 +384,17 @@ modules: - cmake --build build_flatpak --target generate_system_cache -j$FLATPAK_BUILDER_N_JOBS - ./scripts/build_preset_cache.sh -n -b build_flatpak /app/share/OrcaSlicer/profiles + # Built (not run) here via the action's run-tests, then shipped to a separate + # test job. Only the test sources compile; nothing installs to /app. + test-commands: + - cmake . -B build_flatpak -DBUILD_TESTS=ON + # A suite missing from this list fails the leg loudly, since ctest registers a + # _NOT_BUILT test for it. (tests/all is a Ninja subdirectory target and + # this build uses the default Makefile generator, so it is not available here.) + - cmake --build build_flatpak -j"${FLATPAK_BUILDER_N_JOBS:-$(nproc)}" --target + libslic3r_tests fff_print_tests sla_print_tests libnest2d_tests slic3rutils_tests + filament_group_tests + cleanup: - /include @@ -407,6 +431,10 @@ modules: - type: dir path: ../../localization dest: localization + # For the post-build unit-test step (BUILD_TESTS=ON); not built by the app. + - type: dir + path: ../../tests + dest: tests - type: file path: ../../CMakeLists.txt @@ -420,6 +448,9 @@ modules: - type: file path: ../build_preset_cache.sh dest: scripts + - type: file + path: ../run_unit_tests.sh + dest: scripts # AppData metainfo for GNOME Software & Co. - type: file diff --git a/scripts/flatpak/make_deps_tar.sh b/scripts/flatpak/make_deps_tar.sh new file mode 100755 index 0000000000..e561da2e7b --- /dev/null +++ b/scripts/flatpak/make_deps_tar.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# Pack deps/ into scripts/flatpak/deps.tar for the Flatpak manifest's orca_deps +# module. +# +# Usage: make_deps_tar.sh +# Requires GNU tar. On macOS, brew install gnu-tar. +# +# The archive is byte-reproducible. Member order, mtimes, ownership and the +# group/other write bits are pinned, so identical deps/ contents always produce +# an identical file. deps/build* and deps/DL_CACHE are excluded. +# +# Prints the output path, size and sha256. + +set -euo pipefail + +if [ "$#" -ne 0 ]; then + echo "usage: ${0##*/}" >&2 + exit 2 +fi + +tar_bin=$(command -v gtar || command -v tar || true) +tar_version=$([ -n "$tar_bin" ] && "$tar_bin" --version 2>/dev/null || true) +case $tar_version in + *"GNU tar"*) ;; + *) echo "${0##*/}: needs GNU tar; on macOS run 'brew install gnu-tar'" >&2 + exit 2 ;; +esac + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) +repo_root=$(cd "$script_dir/../.." && pwd) +out=$script_dir/deps.tar +tmp=$out.tmp +trap 'rm -f "$tmp"' EXIT + +"$tar_bin" --format=gnu \ + --sort=name \ + --mtime=@0 \ + --owner=0 --group=0 --numeric-owner \ + --mode=go-w \ + --exclude='deps/build*' \ + --exclude='deps/DL_CACHE' \ + -cf "$tmp" \ + -C "$repo_root" deps + +mv -f "$tmp" "$out" + +if command -v sha256sum >/dev/null 2>&1; then + sum=$(sha256sum "$out" | cut -d' ' -f1) +elif command -v shasum >/dev/null 2>&1; then + sum=$(shasum -a 256 "$out" | cut -d' ' -f1) +else + sum=unavailable +fi + +echo "Wrote $out ($(du -h "$out" | cut -f1), sha256 $sum)" diff --git a/scripts/flatpak/setup_env_ubuntu24.04.sh b/scripts/flatpak/setup_env_ubuntu24.04.sh index a0ccbb9b32..74b7629f60 100755 --- a/scripts/flatpak/setup_env_ubuntu24.04.sh +++ b/scripts/flatpak/setup_env_ubuntu24.04.sh @@ -8,8 +8,9 @@ flatpak install flathub org.gnome.Platform//50 org.gnome.Sdk//50 org.freedesktop ## # in OrcaSlicer folder, run following command to build Orca -# # First time build -# flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user --force-clean build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml -# # Subsequent builds (only rebuilding OrcaSlicer) +# # First time build +# ./scripts/flatpak/make_deps_tar.sh && flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user --force-clean build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml + +# # Subsequent builds (only rebuilding OrcaSlicer; run make_deps_tar.sh first if deps/ changed) # flatpak-builder --state-dir=.flatpak-builder --keep-build-dirs --user build-dir scripts/flatpak/com.orcaslicer.OrcaSlicer.yml --build-only=OrcaSlicer \ No newline at end of file diff --git a/scripts/linux.d/arch b/scripts/linux.d/arch index ead963e9a6..dc554b10b5 100644 --- a/scripts/linux.d/arch +++ b/scripts/linux.d/arch @@ -25,6 +25,9 @@ export REQUIRED_DEV_PACKAGES=( wayland-protocols webkit2gtk-4.1 wget + pkgconf + yasm + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/cachyos b/scripts/linux.d/cachyos index d491747ace..6137a3ef5c 100644 --- a/scripts/linux.d/cachyos +++ b/scripts/linux.d/cachyos @@ -25,6 +25,9 @@ export REQUIRED_DEV_PACKAGES=( wayland-protocols webkit2gtk wget + pkgconf + yasm + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/clear-linux-os b/scripts/linux.d/clear-linux-os index 149e805549..41ca68e835 100644 --- a/scripts/linux.d/clear-linux-os +++ b/scripts/linux.d/clear-linux-os @@ -20,6 +20,7 @@ export REQUIRED_BUNDLES=( perl-basic texinfo wget + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/debian b/scripts/linux.d/debian index f4d500760e..c33b24d2b7 100644 --- a/scripts/linux.d/debian +++ b/scripts/linux.d/debian @@ -27,6 +27,9 @@ REQUIRED_DEV_PACKAGES=( ninja-build texinfo wget + pkgconf + yasm + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/fedora b/scripts/linux.d/fedora index ca4eceaee3..993ea0b10a 100644 --- a/scripts/linux.d/fedora +++ b/scripts/linux.d/fedora @@ -31,6 +31,9 @@ REQUIRED_DEV_PACKAGES=( webkit2gtk4.1-devel wget libcurl-devel + pkgconf + yasm + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/gentoo b/scripts/linux.d/gentoo index f172ac92c3..f8554542ff 100644 --- a/scripts/linux.d/gentoo +++ b/scripts/linux.d/gentoo @@ -32,6 +32,9 @@ REQUIRED_DEV_PACKAGES=( sys-devel/m4 virtual/libudev x11-libs/gtk+:3 + dev-util/pkgconf + dev-lang/yasm + dev-lang/nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/linux.d/suse b/scripts/linux.d/suse index 1f4db45f46..682960650b 100644 --- a/scripts/linux.d/suse +++ b/scripts/linux.d/suse @@ -30,6 +30,9 @@ REQUIRED_DEV_PACKAGES=( webkit2gtk4-devel wget libcurl-devel + pkgconf + yasm + nasm ) if [[ -n "$UPDATE_LIB" ]] diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py deleted file mode 100644 index 07ce3d69d3..0000000000 --- a/scripts/orca_extra_profile_check.py +++ /dev/null @@ -1,632 +0,0 @@ -import os -import json -import argparse -from pathlib import Path - -from assign_vendor_setting_ids import generate_preset_setting_id - -OBSOLETE_KEYS = { - "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", - "bed_size", "print_center", "g0", "wipe_tower_per_color_wipe", - "support_sharp_tails", "support_remove_small_overhangs", "support_with_sheath", - "tree_support_collision_resolution", "tree_support_with_infill", - "max_volumetric_speed", "max_print_speed", "support_closing_radius", - "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", - "support_transition_line_width", "support_transition_speed", "bed_temperature", - "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", - "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", - "z_hop_type", "z_lift_type", "bed_temperature_difference", "long_retraction_when_cut", - "retraction_distance_when_cut", "extruder_type", "internal_bridge_support_thickness", - "extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill", - "filament_load_time", "filament_unload_time", "smooth_coefficient", - "overhang_totally_speed", "silent_mode", "overhang_speed_classic" -} - -# Utility functions for printing messages in different colors. -def print_error(msg): - print(f"\033[91m[ERROR]\033[0m {msg}") # Red - -def print_warning(msg): - print(f"\033[93m[WARNING]\033[0m {msg}") # Yellow - -def print_info(msg): - print(f"\033[94m[INFO]\033[0m {msg}") # Blue - -def print_success(msg): - print(f"\033[92m[SUCCESS]\033[0m {msg}") # Green - - -# Add helper function for duplicate key detection. -def no_duplicates_object_pairs_hook(pairs): - seen = {} - for key, value in pairs: - if key in seen: - raise ValueError(f"Duplicate key detected: {key}") - seen[key] = value - return seen - -# NOTE: currently Orca expects compatible_printers to be a defined in every instantiation profile, inheritation is not supported in Profile page -def check_filament_compatible_printers(vendor, vendor_folder): - """ - Checks JSON files in the vendor folder for missing or empty 'compatible_printers' - when 'instantiation' is flagged as true. - - In the OrcaFilamentLibrary 'compatible_printers' is optional: a profile without it is generic and - offered on every printer, while a profile that lists printers supersedes the generic one there. - - Parameters: - vendor (str): The vendor name the folder belongs to. - vendor_folder (str or Path): The directory to search for JSON profile files. - - Returns: - int: The number of profiles with missing or empty 'compatible_printers'. - """ - error = 0 - vendor_path = Path(vendor_folder) - if not vendor_path.exists(): - return 0 - - profiles = {} - - # Use rglob to recursively find .json files. - for file_path in vendor_path.rglob("*.json"): - if file_path.name == 'filaments_color_codes.json': # Ignore non-profile file - continue - - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path}: {ve}") - error += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path}: {e}") - error += 1 - continue - - profile_name = data['name'] - if profile_name in profiles: - print_error(f"Duplicated profile {profile_name}: {file_path}") - error += 1 - continue - - profiles[profile_name] = { - 'file_path': file_path, - 'content': data, - } - - def get_property(profile, key): - content = profile['content'] - if key in content: - return content[key] - return None - - def get_inherit_property(profile, key): - content = profile['content'] - if key in content: - return content[key] - - if 'inherits' in content: - inherits = content['inherits'] - if inherits not in profiles: - raise ValueError(f"Parent profile not found: {inherits}, referenced in {profile['file_path']}") - - return get_inherit_property(profiles[inherits], key) - - return None - - for profile in profiles.values(): - instantiation = str(profile['content'].get("instantiation", "")).lower() == "true" - if instantiation and vendor != 'OrcaFilamentLibrary': - try: - compatible_printers = get_property(profile, "compatible_printers") - if not compatible_printers or (isinstance(compatible_printers, list) and not compatible_printers): - print_error(f"'compatible_printers' missing in {profile['file_path']}") - error += 1 - except ValueError as ve: - print_error(f"Unable to parse {profile['file_path']}: {ve}") - error += 1 - continue - - return error - -def load_available_filament_profiles(profiles_dir, vendor_name): - """ - Load all available filament profiles from a vendor's directory. - - Parameters: - profiles_dir (Path): The directory containing vendor profile directories - vendor_name (str): The name of the vendor directory - - Returns: - set: A set of filament profile names - """ - profiles = set() - vendor_path = profiles_dir / vendor_name / "filament" - - if not vendor_path.exists(): - return profiles - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - if "name" in data: - profiles.add(data["name"]) - except Exception as e: - print_error(f"Error loading filament profile {file_path}: {e}") - - return profiles - -def check_machine_default_materials(profiles_dir, vendor_name): - """ - Checks if default materials referenced in machine profiles exist in - the vendor's filament library or in the global OrcaFilamentLibrary. - - Parameters: - profiles_dir (Path): The base profiles directory - vendor_name (str): The vendor name to check - - Returns: - int: Number of missing filament references found - int: the number of warnings found (0 or 1) - """ - error_count = 0 - machine_dir = profiles_dir / vendor_name / "machine" - - if not machine_dir.exists(): - print_warning(f"No machine profiles found for vendor: {vendor_name}") - return 0, 1 - - # Load available filament profiles - vendor_filaments = load_available_filament_profiles(profiles_dir, vendor_name) - global_filaments = load_available_filament_profiles(profiles_dir, "OrcaFilamentLibrary") - all_available_filaments = vendor_filaments.union(global_filaments) - - # Check each machine profile - for file_path in machine_dir.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - - default_materials = None - if "default_materials" in data: - default_materials = data["default_materials"] - elif "default_filament_profile" in data: - default_materials = data["default_filament_profile"] - - if default_materials: - if isinstance(default_materials, list): - for material in default_materials: - if material not in all_available_filaments: - print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - else: - # Handle semicolon-separated list of materials in a string - if ";" in default_materials: - for material in default_materials.split(";"): - material = material.strip() - if material and material not in all_available_filaments: - print_error(f"Missing filament profile: '{material}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - else: - # Single material in a string - if default_materials not in all_available_filaments: - print_error(f"Missing filament profile: '{default_materials}' referenced in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - except Exception as e: - print_error(f"Error processing machine profile {file_path}: {e}") - error_count += 1 - - return error_count, 0 - -def check_name_consistency(profiles_dir, vendor_name): - """ - Make sure filament profile names match in both vendor json and subpath files. - Filament profiles work only if the name in .json matches the name in sub_path file, - or if it's one of the sub_path file's `renamed_from`. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - int: Number of warnings found (0 or 1) - """ - error_count = 0 - vendor_dir = profiles_dir / vendor_name - vendor_file = profiles_dir / (vendor_name + ".json") - - if not vendor_file.exists(): - print_warning(f"No profiles found for vendor: {vendor_name} at {vendor_file}") - return 0, 1 - - try: - with open(vendor_file, 'r', encoding='UTF-8') as fp: - data = json.load(fp) - except Exception as e: - print_error(f"Error loading vendor profile {vendor_file}: {e}") - return 1, 0 - - for section in ['filament_list', 'machine_model_list', 'machine_list', 'process_list']: - if section not in data: - continue - - for child in data[section]: - name_in_vendor = child['name'] - sub_path = child['sub_path'] - sub_file = vendor_dir / sub_path - - if not sub_file.exists(): - print_error(f"Missing sub profile: '{sub_path}' declared in {vendor_file.relative_to(profiles_dir)}") - error_count += 1 - continue - - try: - with open(sub_file, 'r', encoding='UTF-8') as fp: - sub_data = json.load(fp) - except Exception as e: - print_error(f"Error loading profile {sub_file}: {e}") - error_count += 1 - continue - - name_in_sub = sub_data['name'] - - if name_in_sub == name_in_vendor: - continue - - # if 'renamed_from' in sub_data: - # renamed_from = [n.strip() for n in sub_data['renamed_from'].split(';')] - # if name_in_vendor in renamed_from: - # continue - - print_error(f"{section} name mismatch: required '{name_in_vendor}' in {vendor_file.relative_to(profiles_dir)} but found '{name_in_sub}' in {sub_file.relative_to(profiles_dir)}") - error_count += 1 - - return error_count, 0 - -def check_filament_id(vendor, vendor_folder): - """ - Make sure filament_id is not longer than 8 characters, otherwise AMS won't work properly - """ - if vendor not in ('BBL', 'OrcaFilamentLibrary'): - return 0 - - error = 0 - vendor_path = Path(vendor_folder) - if not vendor_path.exists(): - return 0 - - # Use rglob to recursively find .json files. - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path}: {ve}") - error += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path}: {e}") - error += 1 - continue - - if 'filament_id' not in data: - continue - - filament_id = data['filament_id'] - - if len(filament_id) > 8: - error += 1 - print_error(f"Filament id too long \"{filament_id}\": {file_path}") - - return error - -def check_obsolete_keys(profiles_dir, vendor_name): - """ - Check for obsolete keys in all filament profiles for a vendor. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - obsolete_keys (set): Set of obsolete key names to check - - Returns: - int: Number of obsolete keys found - """ - error_count = 0 - vendor_path = profiles_dir / vendor_name / "filament" - - if not vendor_path.exists(): - return 0 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, "r", encoding="UTF-8") as fp: - data = json.load(fp) - except Exception as e: - print_warning(f"Error reading profile {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - for key in data.keys(): - if key in OBSOLETE_KEYS: - print_warning(f"Obsolete key: '{key}' found in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - return error_count - - -CONFLICT_KEYS = [ - ['extruder_clearance_radius', 'extruder_clearance_max_radius'], -] - -VECTOR_KEYS = { - "filament_type", -} - -def check_vector_type_keys(profiles_dir, vendor_name): - """ - Check that properties expected to be vectors (JSON arrays) are not stored as scalars. - For example, `filament_type` must be a list like ["PA-CF"], not a string "PA-CF". - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - """ - error_count = 0 - vendor_path = profiles_dir / vendor_name - - if not vendor_path.exists(): - return 0 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, "r", encoding="UTF-8") as fp: - data = json.load(fp) - except Exception as e: - print_error(f"Error processing {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - if not isinstance(data, dict): - continue - - for key in VECTOR_KEYS: - if key in data and not isinstance(data[key], list): - print_error( - f"'{key}' must be an array in {file_path.relative_to(profiles_dir)}, " - f"got {type(data[key]).__name__}: {data[key]!r}" - ) - error_count += 1 - - return error_count - -def check_conflict_keys(profiles_dir, vendor_name): - """ - Check for keys that could not be specified at the same time, - due to option renaming & backward compatibility reasons. - - For example, `extruder_clearance_max_radius` and `extruder_clearance_radius` cannot co-exist - otherwise slicer won't know which one to use. - - Parameters: - profiles_dir (Path): Base profiles directory - vendor_name (str): Vendor name - - Returns: - int: Number of errors found - int: Number of warnings found - """ - error_count = 0 - warn_count = 0 - vendor_path = profiles_dir / vendor_name - - if not vendor_path.exists(): - print_warning(f"No machine profiles found for vendor: {vendor_name}") - return 0, 1 - - for file_path in vendor_path.rglob("*.json"): - try: - with open(file_path, 'r', encoding='UTF-8') as fp: - # Use custom hook to detect duplicates. - data = json.load(fp, object_pairs_hook=no_duplicates_object_pairs_hook) - except ValueError as ve: - print_error(f"Duplicate key error in {file_path.relative_to(profiles_dir)}: {ve}") - error_count += 1 - continue - except Exception as e: - print_error(f"Error processing {file_path.relative_to(profiles_dir)}: {e}") - error_count += 1 - continue - - for key_sets in CONFLICT_KEYS: - if sum([1 if k in data else 0 for k in key_sets]) > 1: - print_error(f"Conflict keys {key_sets} co-exist in {file_path.relative_to(profiles_dir)}") - error_count += 1 - - return error_count, warn_count - - -# Bambu (BBL) keeps its authoritative "G*" cloud ids, which are NOT produced by the -# deterministic formula, so BBL is exempt from the formula match (Rule 2) only. It is -# still checked for presence, uniqueness, base-no-id and the typo key like every other -# vendor. Every other vendor (incl. OrcaFilamentLibrary and Custom) must also match the -# formula. -SETTING_ID_FORMULA_EXEMPT_VENDORS = {"BBL"} -PROFILE_SUBDIRS = ("filament", "process", "machine") - - -def check_setting_id_uniqueness(profiles_dir): - """ - Validate setting_id across every vendor (see scripts/assign_vendor_setting_ids.py): - 1. Every instantiated preset must HAVE a setting_id. (all vendors) - 2. A stored setting_id must equal generate_preset_setting_id(vendor, type, name); a stale - value means the JSON was edited without rerunning assign_vendor_setting_ids.py. - (all vendors EXCEPT the formula-exempt ones, e.g. BBL) - 3. Base profiles (instantiation != "true") must not carry a setting_id. (all vendors) - 4. setting_id must be globally unique - no two files may share one. (all vendors) - 5. No profile may use the misspelled key "settings_id". (all vendors) - Formula-exempt vendors (BBL) keep their authoritative ids, so only Rule 2 is skipped - for them; they are still held to presence, uniqueness, base-no-id and the typo check. - """ - errors = 0 - owners = {} # setting_id -> list of relative_path (every vendor) - for vendor_dir in sorted(profiles_dir.iterdir()): - if not vendor_dir.is_dir(): - continue - vendor = vendor_dir.name - formula_exempt = vendor in SETTING_ID_FORMULA_EXEMPT_VENDORS - for sub in PROFILE_SUBDIRS: - base = vendor_dir / sub - if not base.is_dir(): - continue - for file_path in base.rglob("*.json"): - try: - data = json.loads(file_path.read_bytes()) - except (ValueError, OSError): - continue - if not isinstance(data, dict): - continue - rel = file_path.relative_to(profiles_dir) - # Rule 5: catch the misspelled "settings_id" key. - if "settings_id" in data: - errors += 1 - print_error( - f'profile {rel} uses the misspelled key "settings_id" ' - f'(should be "setting_id"); run assign_vendor_setting_ids.py' - ) - sid = data.get("setting_id") - instantiated = data.get("instantiation") == "true" - if not instantiated: - # Rule 3: base/template profiles must not carry a setting_id. - if sid: - errors += 1 - print_error( - f'base profile {rel} (instantiation != "true") must not have a ' - f'setting_id ("{sid}"); run assign_vendor_setting_ids.py' - ) - continue - # Rule 1: every instantiated preset must have a setting_id. - if not sid: - errors += 1 - print_error( - f"instantiated preset {rel} is missing a setting_id; " - f"run assign_vendor_setting_ids.py" - ) - continue - # Rule 2: the stored id must match the deterministic rule. BBL keeps its - # authoritative G* ids and is exempt from this check only. - if not formula_exempt: - expected = generate_preset_setting_id(vendor, sub, data.get("name", "")) - if sid != expected: - errors += 1 - print_error( - f'setting_id "{sid}" in {rel} does not match the expected ' - f'"{expected}" for {vendor}/{sub}/{data.get("name", "")}; ' - f"run assign_vendor_setting_ids.py" - ) - continue - # Rule 4: collect for the global-uniqueness check below. - owners.setdefault(sid, []).append(rel) - - # Rule 4: a setting_id shared by two files is an error. For managed vendors this means - # a duplicate vendor/type/name; for formula-exempt vendors (BBL) a copy-pasted id. - for sid, locs in sorted(owners.items()): - if len(locs) < 2: - continue - errors += 1 - print_error( - f'setting_id "{sid}" is shared by {len(locs)} files ({sorted(map(str, locs))}); ' - f"setting_id must be globally unique" - ) - return errors - - -def main(): - parser = argparse.ArgumentParser( - description="Check 3D printer profiles for common issues", - formatter_class=argparse.ArgumentDefaultsHelpFormatter - ) - parser.add_argument("--vendor", type=str, help="Specify a single vendor to check") - parser.add_argument("--check-filaments", action="store_true", help="Check 'compatible_printers' in filament profiles") - parser.add_argument("--check-materials", action="store_true", help="Check default materials in machine profiles") - parser.add_argument("--check-obsolete-keys", action="store_true", help="Warn if obsolete keys are found in filament profiles") - args = parser.parse_args() - - print_info("Checking profiles ...") - - script_dir = Path(__file__).resolve().parent - profiles_dir = script_dir.parent / "resources" / "profiles" - checked_vendor_count = 0 - errors_found = 0 - warnings_found = 0 - - def run_checks(vendor_name): - nonlocal errors_found, warnings_found, checked_vendor_count - vendor_path = profiles_dir / vendor_name - - if args.check_filaments or not (args.check_materials and not args.check_filaments): - errors_found += check_filament_compatible_printers(vendor_name, vendor_path / "filament") - - if args.check_materials: - new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - if args.check_obsolete_keys: - warnings_found += check_obsolete_keys(profiles_dir, vendor_name) - - new_errors, new_warnings = check_name_consistency(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - new_errors, new_warnings = check_conflict_keys(profiles_dir, vendor_name) - errors_found += new_errors - warnings_found += new_warnings - - errors_found += check_vector_type_keys(profiles_dir, vendor_name) - - errors_found += check_filament_id(vendor_name, vendor_path / "filament") - checked_vendor_count += 1 - - if args.vendor: - run_checks(args.vendor) - else: - for vendor_dir in profiles_dir.iterdir(): - if not vendor_dir.is_dir() or vendor_dir.name == "OrcaFilamentLibrary": - continue - run_checks(vendor_dir.name) - - # Global (cross-vendor) check: setting_id must be unique and stay in-namespace. - # Runs once over the whole tree regardless of the --vendor filter. - errors_found += check_setting_id_uniqueness(profiles_dir) - - # ✨ Output finale in stile "compilatore" - print("\n==================== SUMMARY ====================") - print_info(f"Checked vendors : {checked_vendor_count}") - if errors_found > 0: - print_error(f"Files with errors : {errors_found}") - else: - print_success("Files with errors : 0") - if warnings_found > 0: - print_warning(f"Files with warnings : {warnings_found}") - else: - print_success("Files with warnings : 0") - print("=================================================") - if errors_found > 0 or warnings_found > 0 : - print_warning('Issue(s) found, try `orca_filament_lib.py --fix` to fix common issues automatically') - - exit(-1 if errors_found > 0 else 0) - - -if __name__ == "__main__": - main() diff --git a/scripts/orca_filament_lib.py b/scripts/orca_filament_lib.py deleted file mode 100644 index 65f037e3f3..0000000000 --- a/scripts/orca_filament_lib.py +++ /dev/null @@ -1,310 +0,0 @@ -import os -import json -import argparse -from collections import defaultdict - -def create_ordered_profile(profile_dict, priority_fields=['name', 'type']): - """Create a new dictionary with priority fields first""" - ordered_profile = {} - - # Add priority fields first - for field in priority_fields: - if field in profile_dict: - ordered_profile[field] = profile_dict[field] - - # Add remaining fields - for key, value in profile_dict.items(): - if key not in priority_fields: - ordered_profile[key] = value - - return ordered_profile - -def topological_sort(filaments): - # Build a graph of dependencies - graph = defaultdict(list) - in_degree = defaultdict(int) - name_to_filament = {f['name']: f for f in filaments} - all_names = set(name_to_filament.keys()) - - # Create the dependency graph - processed_files = set() - for filament in filaments: - if 'inherits' in filament: - parent = filament['inherits'] - child = filament['name'] - # Only create dependency if parent exists - if parent in all_names: - graph[parent].append(child) - in_degree[child] += 1 - if parent not in in_degree: - in_degree[parent] = 0 - processed_files.add(child) - processed_files.add(parent) - - # Initialize queue with nodes having no dependencies (now sorted) - queue = sorted([name for name, degree in in_degree.items() if degree == 0]) - result = [] - - # Process the queue - while queue: - current = queue.pop(0) - result.append(name_to_filament[current]) - processed_files.add(current) - - # Process children (now sorted) - children = sorted(graph[current]) - for child in children: - in_degree[child] -= 1 - if in_degree[child] == 0: - queue.append(child) - - # Add remaining files that weren't part of inheritance tree (now sorted) - remaining = sorted(all_names - processed_files) - for name in remaining: - result.append(name_to_filament[name]) - - return result - -def update_profile_library(vendor="",profile_type="filament"): - # change current working directory to the relative path(..\resources\profiles) compare to script location - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - # Collect current profile entries - if vendor: - vendors = [vendor] - else: - profiles_dir = os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles') - vendors = [f[:-5] for f in os.listdir(profiles_dir) if f.lower().endswith('.json')] - for vendor in vendors: - current_profiles = [] - base_dir = vendor - # Orca expects machine_model to be in the machine folder - if profile_type == 'machine_model': - profile_dir = os.path.join(base_dir, 'machine') - else: - profile_dir = os.path.join(base_dir, profile_type) - - for root, dirs, files in os.walk(profile_dir): - for file in files: - if file.lower().endswith('.json'): - full_path = os.path.join(root, file) - - # Get relative path from base directory - sub_path = os.path.relpath(full_path, base_dir).replace('\\', '/') - - try: - with open(full_path, 'r', encoding='utf-8') as f: - _profile = json.load(f) - if _profile.get('type') != profile_type: - continue - name = _profile.get('name') - inherits = _profile.get('inherits') - - if name: - entry = { - "name": name, - "sub_path": sub_path - } - if inherits: - entry['inherits'] = inherits - current_profiles.append(entry) - else: - print(f"Warning: Missing 'name' in {full_path}") - except Exception as e: - print(f"Error reading {full_path}: {str(e)}") - continue - - # Sort profiles based on inheritance - sorted_profiles = topological_sort(current_profiles) - - # Remove the inherits field as it's not needed in the final JSON - for p in sorted_profiles: - p.pop('inherits', None) - - # Update library file - lib_path = f'{vendor}.json' - - profile_section = profile_type+'_list' - - try: - with open(lib_path, 'r+', encoding='utf-8') as f: - library = json.load(f) - library[profile_section] = sorted_profiles - f.seek(0) - json.dump(library, f, indent="\t", ensure_ascii=False) - f.write('\n') - f.truncate() - - print(f"Profile library for {vendor} updated successfully!") - except Exception as e: - print(f"Error updating library file: {str(e)}") - -def clean_up_profile(vendor="", profile_type="", force=False): -# change current working directory to the relative path(..\resources\profiles) compare to script location - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - # Collect current profile entries - if vendor: - vendors = [vendor] - else: - profiles_dir = os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles') - vendors = [f[:-5] for f in os.listdir(profiles_dir) if f.lower().endswith('.json')] - for vendor in vendors: - current_profiles = [] - base_dir = vendor - # Orca expects machine_model to be in the machine folder - if profile_type == 'machine_model': - profile_dir = os.path.join(base_dir, 'machine') - else: - profile_dir = os.path.join(base_dir, profile_type) - - for root, dirs, files in os.walk(profile_dir): - for file in files: - if file.lower().endswith('.json'): - if file == 'filaments_color_codes.json': # Ignore non-profile file - continue - - full_path = os.path.join(root, file) - - # Get relative path from base directory - sub_path = os.path.relpath(full_path, base_dir).replace('\\', '/') - - try: - with open(full_path, 'r+', encoding='utf-8') as f: - _profile = json.load(f) - need_update = False - if not _profile.get('type') or _profile.get('type') == "": - need_update = True - name = _profile.get('name') - inherits = _profile.get('inherits') - if profile_type == "machine_model" or profile_type == "machine": - if "nozzle" in name or "Nozzle" in name: - _profile['type'] = "machine" - else: - _profile['type'] = "machine_model" - else: - _profile['type'] = profile_type - print(f"Added type: {_profile['type']} to {file}") - - fields_to_remove = ['version', 'is_custom_defined'] - for field in fields_to_remove: - if _profile.get(field): - # remove version field - del _profile[field] - print(f"Removed {field} field from {file}") - need_update = True - - # Handle `extruder_clearance_radius`. - if 'extruder_clearance_radius' in _profile and 'extruder_clearance_max_radius' in _profile: - # BBS renamed `extruder_clearance_radius` to `extruder_clearance_max_radius` - # however some of their profiles have both options exists with different value, which - # could cause very bad consequence such as toolhead collision. - # Here we make sure only one of these options exist, and if both present, we keep - # the one with greater value. - need_update = True - if float(_profile['extruder_clearance_max_radius']) > float(_profile['extruder_clearance_radius']): - del _profile['extruder_clearance_radius'] - else: - del _profile['extruder_clearance_max_radius'] - - # Convert filament fields to arrays if not already - if profile_type == 'filament': - fields_to_arrayify = ['filament_cost', 'filament_density', 'filament_type', "temperature_vitrification", "filament_max_volumetric_speed", "filament_vendor"] - for field in fields_to_arrayify: - if field in _profile and not isinstance(_profile[field], list): - original_value = _profile[field] - _profile[field] = [original_value] - print(f"Converted {field} to array in {file}") - need_update = True - - # remove following fields from filament profile - fields_to_remove = ['initial_layer_print_speed', 'outer_wall_speed', 'inner_wall_speed', 'infill_speed', 'top_surface_speed', 'travel_speed'] - for field in fields_to_remove: - if field in _profile: - del _profile[field] - print(f"Removed {field} field from {file}") - need_update = True - - - if need_update or force: - # write back to file - f.seek(0) - ordered_profile = create_ordered_profile(_profile, ['type', 'name', 'renamed_from', 'inherits', 'from', 'setting_id', 'filament_id', 'instantiation']) - json.dump(ordered_profile, f, indent="\t", ensure_ascii=False) - f.write('\n') - f.truncate() - print(f"Updated profile: {full_path}") - except Exception as e: - print(f"Error reading {full_path}: {str(e)}") - continue - -# For each JSON file, it will: -# - Replace "BBL X1C" with "System" in the name field -# - Empty the compatible_printers array -# - Ensure setting_id starts with 'O' -def rename_filament_system(vendor="OrcaFilamentLibrary"): - # change current working directory to the relative path - os.chdir(os.path.join(os.path.dirname(__file__), '..', 'resources', 'profiles')) - - base_dir = vendor - filament_dir = os.path.join(base_dir, 'filament') - - for root, dirs, files in os.walk(filament_dir): - for file in files: - if file.lower().endswith('.json'): - full_path = os.path.join(root, file) - try: - with open(full_path, 'r', encoding='utf-8') as f: - data = json.load(f) - modified = False - - # Update name if it contains "BBL X1C" - if 'name' in data and "BBL X1C" in data['name']: - data['name'] = data['name'].replace("BBL X1C", "System") - modified = True - - # Empty compatible_printers if exists - if 'compatible_printers' in data: - data['compatible_printers'] = [] - modified = True - - # Update setting_id if needed - if 'setting_id' in data and not data['setting_id'].startswith('O'): - data['setting_id'] = 'O' + data['setting_id'] - modified = True - - if modified: - with open(full_path, 'w', encoding='utf-8') as f: - json.dump(data, f, indent="\t", ensure_ascii=False) - f.write('\n') - print(f"Updated {full_path}") - - except Exception as e: - print(f"Error processing {full_path}: {str(e)}") - -if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Update filament library for specified vendor') - parser.add_argument('-v', '--vendor', type=str, default="", - help='Vendor name (default: "" which means all vendors)') - parser.add_argument('-u', '--update', action='store_true', help='update vendor.json') - parser.add_argument('-p', '--profile_type', type=str, choices=['machine_model', 'process', 'filament', 'machine'], help='profile type (default: "" which means all types)') - parser.add_argument('-f', '--fix', action='store_true', help='Fix errors like missing type field, and clean up the profile') - parser.add_argument('--force', action='store_true', help='Force update the profile files, for --fix option') - args = parser.parse_args() - - if args.fix: - if(args.profile_type): - clean_up_profile(args.vendor, args.profile_type, args.force) - else: - clean_up_profile(args.vendor, 'machine_model', args.force) - clean_up_profile(args.vendor, 'process', args.force) - clean_up_profile(args.vendor, 'filament', args.force) - clean_up_profile(args.vendor, 'machine', args.force) - - if args.update: - update_profile_library(args.vendor, 'machine_model') - update_profile_library(args.vendor, 'process') - update_profile_library(args.vendor, 'filament') - update_profile_library(args.vendor, 'machine') - # else: - # rename_filament_system(args.vendor) \ No newline at end of file diff --git a/scripts/orca_profile_tool.py b/scripts/orca_profile_tool.py new file mode 100755 index 0000000000..100e7cba3f --- /dev/null +++ b/scripts/orca_profile_tool.py @@ -0,0 +1,2419 @@ +#!/usr/bin/env python3 +""" +Every maintenance job for the OrcaSlicer system profile tree, in one tool. + +usage: python scripts/orca_profile_tool.py [options] + +commands: + check validate the whole tree -- what CI runs + generate-id write the filament_id / setting_id each profile's identity implies + normalize rewrite profile files into their canonical shape + trim delete profile files no .json list references + update-index regenerate the *_list sections of .json + +options shared by several commands: + --vendor VENDOR act on one vendor bundle only; repeatable, empty means all + --profile-type TYPE one of machine_model/process/filament/machine; repeatable + (normalize, trim, update-index) + --dry-run report what would change and write nothing (every command + that writes) + --profiles DIR act on another profile tree (default: resources/profiles) + +After adding, renaming or deleting profile files, run: + normalize -> update-index -> generate-id -> check +normalize supplies missing types; update-index registers presets before id +generation. +Use trim only for deliberate cleanup, previewed with --dry-run: it judges against +the current index and can delete newly added, unindexed presets. + +Run from anywhere; "python scripts/orca_profile_tool.py --help" repeats this list +and "... --help" documents one command in full. + +The two id rules are the heart of it. Both ids are pure functions of the thing +they name, so nothing here is ever invented: the tool only writes the id the +rules below already imply, and a tree that already satisfies them is left +untouched. + +filament_id policy (see docs/HLSD/filament_id.md): + * filament_id is a PRODUCT id: one named spool product = one id, shared by all + of that product's per-printer/per-nozzle variants in every bundle. The + granularity is the name on the spool, not the brand: "AAA PLA Lite" and + "AAA PLA Pro" are two products with two ids, not variants of one. The + id is a pure function of the product triple (below), so WHERE a preset gets + it from is irrelevant: it may declare the key itself or inherit it from any + ancestor — a root preset, a real (instantiated) filament, an + OrcaFilamentLibrary (OFL) preset — as long as the id it ends up with is the + mint of its OWN triple. Inheritance carries settings, never identity; the + key is bundle-independent, so moving a filament into OFL never changes it. + * Ids are content-addressed by the product triple, resolved from the preset's + flattened config (filament_vendor and filament_type are inheritable list + options — first element; filament name = preset base name): + filament_id = "OF" + base62_6( uuid5(FILAMENT_ID_NAMESPACE, + "filament_product///") ) + 8 chars total, which satisfies the AMS length limit. Nobody invents ids by + hand, and nothing but the triple feeds the mint — not the rest of the tree. + Two products whose triples mint one id (a base62 + collision; odds ~1e-5 over the whole tree) is an error --check reports and + --generate refuses to write; the remedy is a rename so the triples differ, + never a salted or hand-picked second id. + Identity changes (a filament rename, a filament_vendor/filament_type fix) + change the id BY DESIGN. + * EVERY filament profile carries a minted id, with no exceptions and no + spellings held back for anyone. Ids that other systems compose for their own + purposes are simply not mints, so no system profile can carry one and there + is nothing to reserve: Bambu's GF* catalog ids (the generated + resources/printers/bambu_filament_ids.json records the correspondence, which + the app applies at the printer boundary), the QD_* ids a Qidi box composes at + runtime, and the P+7-hex ids CreatePresetsDialog.cpp gives user-created + filaments all fail the format rule like any other stray value. + +setting_id policy (see AGENTS.md "Critical Constraints"): + * setting_id is a PRESET id, a pure function of the preset's identity: + setting_id = base62_16( uuid5(NAMESPACE, "//") ) + The same value is recomputed on the fly by the C++ app + (Slic3r::generate_preset_setting_id); the two MUST stay byte-identical. + Uniqueness is therefore automatic: two presets collide only if they share + vendor + type + name, which "check" flags. + * Only instantiated presets (instantiation == "true") carry a setting_id; + base / template profiles do not. + * Bambu (BBL) owns the authoritative "G*" setting_id space and is the only + reserved vendor: its setting_ids are never rewritten, which keeps + Bambu-synced presets backward compatible. That exemption is setting_id's + alone — BBL's filament_ids are minted like every other vendor's. + +The effective-id resolution below is loader-faithful (PresetBundle.cpp +load_vendor_configs_from_json): own filament_id key, else walk `inherits` within +the vendor map, with OrcaFilamentLibrary base-bundle fallback; once a chain enters +OFL it stays in OFL; a vendor chain that dead-ends id-less retries its direct +parent in the OFL map. filament_vendor / filament_type resolve the same way. +""" + +import argparse +import json +import os +import posixpath +import re +import sys +import uuid +from collections import Counter, defaultdict +from pathlib import Path + +# The id namespace baked into both Python and C++ (Slic3r::generate_preset_setting_id). +# Dedicated, distinct from the cloud namespace (f47ac10b-...) so the two id spaces never +# coincide; it is the root of BOTH id rules below — never change it. +NAMESPACE = uuid.UUID("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f") +ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" +SETTING_ID_LENGTH = 16 + +# Dedicated namespace for filament_id, derived from the setting_id namespace above. +# Never change it. +# FILAMENT_ID_NAMESPACE == UUID("c4d3ff49-4c32-5534-a3e3-00894157ab97") +FILAMENT_ID_NAMESPACE = uuid.uuid5(NAMESPACE, "filament_id") +FILAMENT_ID_LENGTH = 6 # base62 digits after the "OF" prefix -> 8 chars total + +SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__)) +PROFILES_DIR = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "resources", "profiles")) +# The single source of truth for the map path; update_bambu_filament_ids.py +# imports this rather than recomputing it. +BAMBU_MAP_PATH = os.path.normpath( + os.path.join(SCRIPTS_DIR, "..", "resources", "printers", "bambu_filament_ids.json")) + +OFL = "OrcaFilamentLibrary" +# The validator's data dir, created under resources/profiles by a local run; +# not a vendor bundle, so an unscoped pass leaves it alone. +USER_DIR = "user" + +# Bambu (BBL) is the only vendor exempt from the setting_id rule: it keeps its +# authoritative "G*" cloud ids. No vendor is exempt from the filament_id rule. +RESERVED_VENDORS = {"BBL"} + +# The profile types that carry a setting_id; the subdir name is also the type +# name, matching Preset::get_type_string() on the C++ side. +PROFILE_SUBDIRS = ("filament", "process", "machine") + +# The profile kinds a .json indexes, each under its "_list" section. +# NOT the same thing as PROFILE_SUBDIRS above, and deliberately not merged with it: +# machine_model is an index section whose files live in the machine/ directory, and +# this order is the order the sections are rebuilt (and therefore written) in. +PROFILE_TYPES = ("machine_model", "process", "filament", "machine") + +# Data files that sit under a vendor bundle but are not presets: no name, no type. +NON_PROFILE_FILES = {"filaments_color_codes.json", "cli_config.json"} + +# Mirror PrintConfigDef::handle_legacy's ignore set in PrintConfig.cpp; a test +# checks parity. Used by normalize and check. Active options and +# legacy aliases that the loader migrates do not belong here. +OBSOLETE_KEYS = { + "acceleration", "scale", "rotate", "duplicate", "duplicate_grid", + "bed_size", "print_center", "g0", "wipe_tower_per_color_wipe", + "support_sharp_tails", "support_remove_small_overhangs", "support_with_sheath", + "tree_support_collision_resolution", "tree_support_with_infill", + "max_volumetric_speed", "max_print_speed", "support_closing_radius", + "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration", + "support_transition_line_width", "support_transition_speed", "bed_temperature", + "bed_temperature_initial_layer", "can_switch_nozzle_type", "can_add_auxiliary_fan", + "extra_flush_volume", "spaghetti_detector", "adaptive_layer_height", + "z_hop_type", "z_lift_type", "bed_temperature_difference", "long_retraction_when_cut", + "retraction_distance_when_cut", "internal_bridge_support_thickness", + "top_area_threshold", "reduce_wall_solid_infill", + "filament_load_time", "filament_unload_time", "smooth_coefficient", + "overhang_totally_speed", "silent_mode", "overhang_speed_classic", + "anisotropic_surfaces", +} + +# Keys renamed at some point, whose old and new spellings must never co-exist: +# the loader would pick one arbitrarily. extruder_clearance_radius vs +# extruder_clearance_max_radius decides toolhead collision avoidance. +CONFLICT_KEYS = [ + ["extruder_clearance_radius", "extruder_clearance_max_radius"], +] + +# Options the config system stores as vectors; a scalar there is a silent misload. +VECTOR_KEYS = { + "filament_type", +} + +OF_ID_RE = re.compile(r"^OF[0-9A-Za-z]{6}$") +# Filament name = preset base name: strip the first "@..." suffix. The space before +# "@" is optional because names like "Afinia PLA@HS" exist. +BASE_NAME_RE = re.compile(r"\s?@.*$") +# A JSON string literal, for the byte-preserving key edits. +_JSON_STR = r'"(?:[^"\\]|\\.)*"' + +GENERATE_CMD = "python scripts/orca_profile_tool.py generate-id" +SETTING_ID_CMD = '"python scripts/orca_profile_tool.py generate-id --setting-id"' +BAMBU_MAP_HINT = 'regenerate the map with "python scripts/update_bambu_filament_ids.py" and commit the diff for maintainer review' +NORMALIZE_HINT = 'try "python scripts/orca_profile_tool.py normalize" to fix common issues automatically' + +# What to do about a defect check found, keyed by defect. check prints each of these +# ONCE for the whole run, after the files themselves: a bundle that forgot to index +# twenty presets needs the remedy spelled out once, not twenty times over the one list +# a maintainer has to read. +REMEDY_HINTS = { + "unindexed": 'unreferenced file(s) above: delete them, or run "python scripts/' + 'orca_profile_tool.py update-index" to add them to their .json', + "unindexable": 'unreferenced file(s) above declare no profile type: run "python ' + 'scripts/orca_profile_tool.py normalize" to write one so ' + "update-index can place them, or delete them", + "unnormalized": 'profile file(s) above are not what "python scripts/' + 'orca_profile_tool.py normalize" writes: run it and commit the result', + "stale_index": 'vendor index(es) above are not what "python scripts/' + 'orca_profile_tool.py update-index" writes: run it and commit the ' + "result", +} + + +def print_error(msg): + print(f"\033[91m[ERROR]\033[0m {msg}") # Red + +def print_warning(msg): + print(f"\033[93m[WARNING]\033[0m {msg}") # Yellow + +def print_info(msg): + print(f"\033[94m[INFO]\033[0m {msg}") # Blue + +def print_success(msg): + print(f"\033[92m[SUCCESS]\033[0m {msg}") # Green + + +def _utf8_console(): + """Make stdout/stderr survive non-ASCII profile names on cp1252 consoles.""" + for stream in (sys.stdout, sys.stderr): + if hasattr(stream, "reconfigure"): + try: + stream.reconfigure(encoding="utf-8", errors="replace") + except (ValueError, OSError): + pass + + +# --------------------------------------------------------------------------- +# Minting +# --------------------------------------------------------------------------- + +def _base62_tail(n, length): + """The low `length` base62 digits of n, most-significant first. + + The shared tail of both id rules. Its output bytes are pinned by the C++ + golden vectors (tests/libslic3r/test_preset_setting_id.cpp) and by every + filament_id in the tree — never change it. + """ + digits = [] + for _ in range(length): + digits.append(ALPHABET[n % 62]) + n //= 62 + return "".join(reversed(digits)) + + +def generate_preset_setting_id(vendor, type_name, name): + """Deterministic 16-char base62 setting_id for a preset. + + input = f"{vendor}/{type_name}/{name}"; u = uuid5(NAMESPACE, input); + id = the low SETTING_ID_LENGTH base62 digits of int(u.bytes, "big"), + most-significant first. Kept byte-identical to the C++ + Slic3r::generate_preset_setting_id. + """ + u = uuid.uuid5(NAMESPACE, f"{vendor}/{type_name}/{name}") + return _base62_tail(int.from_bytes(u.bytes, "big"), SETTING_ID_LENGTH) + + +def base_name(name): + """Filament name of a preset: name with the first "@..." suffix stripped.""" + return BASE_NAME_RE.sub("", name, count=1) + + +def generate_filament_id(filament_vendor, filament_type, filament_name): + """Deterministic "OF" + 6-char base62 filament_id for a filament product. + + The triple is the only input: no salt, no state, no second value. + input = "filament_product///"; + u = uuid5(FILAMENT_ID_NAMESPACE, input); the id tail is the low + FILAMENT_ID_LENGTH base62 digits of int(u.bytes, "big"), most-significant + first — the same derivation as generate_preset_setting_id. + """ + key = f"filament_product/{filament_vendor}/{filament_type}/{filament_name}" + u = uuid.uuid5(FILAMENT_ID_NAMESPACE, key) + return "OF" + _base62_tail(int.from_bytes(u.bytes, "big"), FILAMENT_ID_LENGTH) + + +# --------------------------------------------------------------------------- +# Tree loading + loader-faithful effective-id resolution +# --------------------------------------------------------------------------- + +class DuplicateKeyError(ValueError): + """A profile declares one key twice; json would silently keep the last.""" + + +def _no_duplicates_hook(pairs): + seen = {} + for key, value in pairs: + if key in seen: + raise DuplicateKeyError(f"Duplicate key detected: {key}") + seen[key] = value + return seen + + +def load_json(path, detect_duplicates=False): + """Parse a profile file. BOM-tolerant, because some vendors ship one. + + detect_duplicates is opt-in rather than always on: only the checks that have + always had it use it, since switching it on everywhere would newly reject files + the tree has always accepted, and switching it off would lose real coverage. + """ + with open(path, "r", encoding="utf-8-sig") as f: + return json.load(f, object_pairs_hook=_no_duplicates_hook if detect_duplicates + else None) + + +def list_vendor_names(profiles_dir): + """Vendor bundles = subdirectories with a matching .json index file. + + (Ignores stray non-bundle entries such as the tracked "user" directory, + which has no user.json index.) + """ + profiles_dir = str(profiles_dir) + return sorted( + os.path.splitext(f)[0] for f in os.listdir(profiles_dir) + if f.endswith(".json") + and os.path.isdir(os.path.join(profiles_dir, os.path.splitext(f)[0])) + ) + + +def list_profile_dirs(profiles_dir): + """Every vendor directory under the tree, index or not. + + What the setting_id pass and the per-vendor checks walk: setting_id is a + per-file property, so a bundle whose index has not landed yet must still be + assignable — otherwise check flags files generate-id refuses to touch. + (filament_id is driven by each bundle's filament_list instead, hence + list_vendor_names above.) + """ + profiles_dir = str(profiles_dir) + return sorted(d for d in os.listdir(profiles_dir) + if os.path.isdir(os.path.join(profiles_dir, d))) + + +def iter_profile_files(vendor_dir): + """Yield (json path, type) under a vendor bundle, in a deterministic order.""" + for sub in PROFILE_SUBDIRS: + base = os.path.join(vendor_dir, sub) + if not os.path.isdir(base): + continue + for root, dirs, files in os.walk(base): + dirs.sort() # deterministic traversal across filesystems + for name in sorted(files): + if name.endswith(".json"): + yield os.path.join(root, name), sub + + +def load_vendor_filaments(profiles_dir, vendor): + """Load a vendor's filament presets from its index's filament_list. + + Returns (presets dict name -> record, list of unreadable-file messages). + """ + profiles_dir = str(profiles_dir) + presets = {} + errors = [] + try: + idx = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (OSError, ValueError) as e: + return presets, [f"unreadable vendor index {vendor}.json: {e}"] + for entry in idx.get("filament_list", []): + rel = f"{vendor}/{entry.get('sub_path', '')}" + path = os.path.join(profiles_dir, vendor, entry.get("sub_path", "")) + try: + data = load_json(path) + except (OSError, ValueError) as e: + errors.append(f"unreadable filament profile {rel}: {e}") + continue + name = data.get("name", entry.get("name")) + presets[name] = { + "name": name, + "file": rel, + "path": path, + "filament_id": data.get("filament_id"), + "inherits": data.get("inherits"), + "instantiation": str(data.get("instantiation", "")).lower() == "true", + "compatible_printers": data.get("compatible_printers") or [], + "filament_vendor": data.get("filament_vendor"), + "filament_type": data.get("filament_type"), + "renamed_from": data.get("renamed_from"), + } + return presets, errors + + +def resolve_filament_id(name, filaments, ofl_filaments, seen=None, in_ofl=False): + """Walk the inherits chain for the effective filament_id, loader-faithfully. + + Mirrors PresetBundle.cpp load_vendor_configs_from_json: a hop resolves in the + vendor's own map first, then falls back to the OFL base-bundle map. OFL's map + was memoized entirely within OFL, so once a chain enters OFL it stays in OFL + (a vendor file sharing an OFL preset's name must not shadow OFL-internal + hops). Additionally, a vendor preset that never resolves an id inside the + vendor is re-tried against the OFL map keyed by its direct parent name. + + Returns (filament_id or None, source, ofl_entry) where source is one of + "own"/"inherited"/"missing"/"dangling"/"cycle" and ofl_entry is the name of + the OFL preset through which a vendor chain entered OFL (None when the id was + declared vendor-side or resolution started inside OFL). + """ + if seen is None: + seen = set() + if name in seen: + return None, "cycle", None + seen.add(name) + entry = None + if in_ofl: + rec = ofl_filaments.get(name) + else: + rec = filaments.get(name) + if rec is None and name in ofl_filaments: + rec, in_ofl, entry = ofl_filaments[name], True, name + if rec is None: + return None, "dangling", None + if rec.get("filament_id"): + return rec["filament_id"], "own" if len(seen) == 1 else "inherited", entry + parent = rec.get("inherits") + if parent: + fid, src, sub_entry = resolve_filament_id(parent, filaments, ofl_filaments, seen, in_ofl) + if fid or in_ofl: + return fid, src, entry if entry is not None else sub_entry + # Vendor chain dead-ended id-less: the loader would have consulted the + # OFL map at each vendor hop's inherits; retry this hop's parent in OFL. + if parent in ofl_filaments: + fid, src, _ = resolve_filament_id(parent, filaments, ofl_filaments, set(), True) + return fid, src, parent + return fid, src, sub_entry + return None, "missing", entry + + +def resolve_filament_field(name, field, filaments, ofl_filaments, seen=None, in_ofl=False): + """Resolve an inheritable list option (filament_vendor / filament_type) with + the same hop semantics as resolve_filament_id: own value, else walk + `inherits` in the vendor map with OFL base-bundle fallback. Values are list + options — the first element counts; "" when the chain never defines one. + """ + if seen is None: + seen = set() + if name in seen: + return "" + seen.add(name) + if in_ofl: + rec = ofl_filaments.get(name) + else: + rec = filaments.get(name) + if rec is None and name in ofl_filaments: + rec, in_ofl = ofl_filaments[name], True + if rec is None: + return "" + value = rec.get(field) + if isinstance(value, str): + value = [value] + if value and value[0]: + return value[0] + parent = rec.get("inherits") + if parent: + found = resolve_filament_field(parent, field, filaments, ofl_filaments, seen, in_ofl) + if found or in_ofl: + return found + if parent in ofl_filaments: + return resolve_filament_field(parent, field, filaments, ofl_filaments, set(), True) + return found + return "" + + +def resolve_triple(name, filaments, ofl_filaments): + """The preset's mint-key triple (filament_vendor, filament_type, filament name).""" + return (resolve_filament_field(name, "filament_vendor", filaments, ofl_filaments), + resolve_filament_field(name, "filament_type", filaments, ofl_filaments), + base_name(name)) + + +def analyze_tree(profiles_dir): + """Load every vendor bundle and derive the full filament_id state. + + Returns a dict of the tree-derived state the checks and the assign pass need, + tree-wide including OFL and BBL. + """ + profiles_dir = str(profiles_dir) + vendor_names = list_vendor_names(profiles_dir) + ofl_filaments, ofl_errors = ( + load_vendor_filaments(profiles_dir, OFL) if OFL in vendor_names else ({}, []) + ) + + vendors = {} + read_errors = list(ofl_errors) + for vendor in vendor_names: + if vendor == OFL: + filaments = ofl_filaments + else: + filaments, errs = load_vendor_filaments(profiles_dir, vendor) + read_errors.extend(errs) + for rec in filaments.values(): + eff, src, _entry = resolve_filament_id(rec["name"], filaments, ofl_filaments) + rec["eff_filament_id"] = eff + rec["id_source"] = src + vendors[vendor] = filaments + + vendor_ids = {} # vendor -> set of ids occurring there (declared or effective) + declared_ids = {} # vendor -> set of ids DECLARED in that vendor's own files + missing_effective = [] # (vendor, name, file) instantiated presets resolving no id + inherited = [] # (vendor, rec, eff, triple) instantiated presets inheriting an OF id + triples = {} # fid -> set of triples of its declarers + declarer_triples = [] # (vendor, rec, fid, triple) per declarer + filament_triples = {} # (vendor, filament_name) -> {triple: [declarers]} + mints = {} # minted id -> triples minting it (declarers + instantiated) + + for vendor, filaments in vendors.items(): + occurring = vendor_ids.setdefault(vendor, set()) + for rec in filaments.values(): + triple = resolve_triple(rec["name"], filaments, ofl_filaments) + rec["triple"] = triple + if rec.get("filament_id") or rec["instantiation"]: + mints.setdefault(generate_filament_id(*triple), set()).add(triple) + if rec.get("filament_id"): + fid = rec["filament_id"] + occurring.add(fid) + declared_ids.setdefault(vendor, set()).add(fid) + declarer_triples.append((vendor, rec, fid, triple)) + triples.setdefault(fid, set()).add(triple) + filament_triples.setdefault( + (vendor, base_name(rec["name"])), {}).setdefault( + triple, []).append(rec["name"]) + if not rec["instantiation"]: + continue + eff = rec.get("eff_filament_id") + if not eff: + missing_effective.append((vendor, rec["name"], rec["file"])) + continue + occurring.add(eff) + if not rec.get("filament_id") and OF_ID_RE.match(eff): + inherited.append((vendor, rec, eff, triple)) + + # Cross-bundle triple divergence (check 3, warning only): the same filament + # name declared in several bundles with different triples cannot converge + # on one id until the divergence is fixed. + name_bundles = {} + for (vendor, filament_name), tmap in filament_triples.items(): + name_bundles.setdefault(filament_name, {})[vendor] = frozenset(tmap) + cross_bundle_triples = [ + (filament_name, {v: sorted(ts) for v, ts in per_vendor.items()}) + for filament_name, per_vendor in sorted(name_bundles.items()) + if len(per_vendor) > 1 and len(set(per_vendor.values())) > 1 + ] + + return { + "vendors": vendors, + "read_errors": read_errors, + "vendor_ids": vendor_ids, + "declared_ids": declared_ids, + "missing_effective": sorted(missing_effective), + "inherited": inherited, + "triples": {fid: sorted(list(t) for t in ts) for fid, ts in triples.items()}, + "declarer_triples": declarer_triples, + "filament_triples": filament_triples, + "cross_bundle_triples": cross_bundle_triples, + # id -> the products (triples) minting it, where there is more than one + "collisions": {fid: sorted(ts) for fid, ts in mints.items() if len(ts) > 1}, + } + + +# --------------------------------------------------------------------------- +# filament_id validation +# --------------------------------------------------------------------------- + +def check_filament_ids(profiles_dir=PROFILES_DIR, map_path=BAMBU_MAP_PATH): + """Validate filament_id state across every vendor. Returns the error count. + + 1. Format: every id occurring in the tree (declared or effective) must + match ^OF[0-9A-Za-z]{6}$. No exceptions, not even BBL. + 2. Identity: the id is a function of the triple alone, and there is no + second acceptable value. (a) A declared id must equal the one id the + declarer's own triple mints; (b) the id an instantiated preset inherits + must equal the one ITS own triple mints — how it inherits it (a root, a + real filament, an OFL preset) is irrelevant; (c) every instantiated + filament resolves an effective id at all (an id-less one is a hard load + error in C++); (d) no two products mint one id (a base62 collision, + resolved by renaming one of them). + 3. Triple integrity: (a) every declarer resolves non-empty filament_vendor + and filament_type; (b) declarers of one (bundle, filament) resolve + identical triples; cross-bundle divergence on the same filament name is a + warning only. + 4. Bambu catalog map: resources/printers/bambu_filament_ids.json must parse, + carry source/bambustudio_commit/generated, key only OF-format ids, map + each Bambu id at most once, and for every row whose key the tree claims, + the tree's triple for that id must equal the row's (vendor, type, name). + """ + _utf8_console() + errors = 0 + analysis = analyze_tree(profiles_dir) + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + + # -- 1. format ---------------------------------------------------------- + for vendor in sorted(analysis["vendor_ids"]): + for fid in sorted(analysis["vendor_ids"][vendor]): + if OF_ID_RE.match(fid): + continue + print_error( + f'filament_id "{fid}" ({vendor}) is not a minted "OF" id; new ' + f'filament ids must come from "{GENERATE_CMD}"') + errors += 1 + + # -- 2. identity: the id is a function of the triple alone --------------- + # One triple, one id: a declaration must carry exactly the mint of its + # triple, and there is no second acceptable value — not a salt, not a + # hand-picked one, not whatever another preset of the product carries. Two + # presets of one product that would be AMS-ambiguous on a printer are fixed + # in the profiles, by making their compatible_printers disjoint or by + # retiring the redundant one. + for vendor, rec, fid, triple in sorted( + analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): + want = generate_filament_id(*triple) + if not OF_ID_RE.match(fid) or fid == want: + continue # a non-OF id is check 1's error + print_error( + f'filament_id "{fid}" declared by "{rec["name"]}" ({rec["file"]}) does ' + f'not match the mint of its triple "{"/".join(triple)}": expected ' + f'"{want}"; paste the expected id, or fix the triple and run ' + f'"{GENERATE_CMD} --vendor {vendor}" (preview with --dry-run)') + errors += 1 + # (2b) An inherited id is held to the same single value, and every preset + # missing it is listed — a variant under a wrong root as much as a preset + # riding another product's root. Nothing is folded into the declarer's + # error: the report names each preset whose id is wrong. + for vendor, rec, eff, triple in sorted( + analysis["inherited"], key=lambda x: (x[0], x[1]["file"])): + want = generate_filament_id(*triple) + if eff == want: + continue + print_error( + f'preset "{rec["name"]}" ({rec["file"]}) inherits filament_id "{eff}" but ' + f'its own triple "{"/".join(triple)}" mints "{want}"; ' + f"a preset carries the id of its own product: inherit a preset of the " + f"same filament, or declare its own key") + errors += 1 + ofl_map = analysis["vendors"].get(OFL, {}) + for vendor, name, file in analysis["missing_effective"]: + triple = resolve_triple(name, analysis["vendors"][vendor], ofl_map) + expected = generate_filament_id(*triple) + print_error( + f'instantiated filament "{name}" ({file}) resolves no filament_id anywhere ' + f"in its inherits chain — this is a hard load error in the C++ loader; " + f'run "{GENERATE_CMD}" (expected id for filament ' + f'"{vendor}/{base_name(name)}": "{expected}")') + errors += 1 + # (2d) The mint is injective over the tree's products, or two of them are + # indistinguishable to every device that matches on the id. + for fid, ts in sorted(analysis["collisions"].items()): + print_error( + f'filament_id "{fid}" is the mint of {len(ts)} different products ' + f'({"; ".join("/".join(t) for t in ts)}): a base62 collision; rename one ' + f"of them so their triples differ") + errors += 1 + + # -- 3. triple integrity --------------------------------------------------- + for vendor, rec, fid, triple in sorted( + analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): + if triple[0] and triple[1]: + continue + missing = " and ".join( + k for k, v in (("filament_vendor", triple[0]), + ("filament_type", triple[1])) if not v) + print_error( + f'preset "{rec["name"]}" ({rec["file"]}) declares filament_id "{fid}" but ' + f"resolves empty {missing}; the mint key needs both (generic materials " + f'use filament_vendor "Generic")') + errors += 1 + for (vendor, filament_name), tmap in sorted(analysis["filament_triples"].items()): + if len(tmap) < 2: + continue + detail = "; ".join( + f'"{"/".join(t)}" ({", ".join(sorted(names))})' + for t, names in sorted(tmap.items())) + print_error( + f'filament "{vendor}/{filament_name}" declarers resolve divergent triples: ' + f"{detail}; declarers of one filament must agree on " + f"(filament_vendor, filament_type)") + errors += 1 + for filament_name, per_vendor in analysis["cross_bundle_triples"]: + detail = "; ".join( + f'{v}: {", ".join("/".join(t) for t in ts)}' + for v, ts in sorted(per_vendor.items())) + print_warning( + f'filament name "{filament_name}" resolves different triples across bundles ' + f"({detail}); bundles of one product converge on one id only once " + f"their triples agree") + + # -- 4. Bambu catalog map -------------------------------------------------- + try: + bambu_map = load_json(map_path) + if not isinstance(bambu_map, dict): + raise ValueError("top level is not a JSON object") + except (OSError, ValueError) as e: + print_error(f"Bambu catalog map {map_path} does not parse ({e}); {BAMBU_MAP_HINT}") + errors += 1 + else: + for key in ("source", "bambustudio_commit", "generated"): + if not bambu_map.get(key): + print_error(f'Bambu catalog map {map_path} is missing "{key}"; {BAMBU_MAP_HINT}') + errors += 1 + rows = bambu_map.get("filaments") + # An empty or absent section is not a well-formed map: it makes every runtime + # translation silently degrade to identity (BBLPrinterAgent logs nothing for it), + # and it is what a regeneration against the wrong --bambustudio-dir writes. + if not isinstance(rows, dict) or not rows: + print_error(f'Bambu catalog map {map_path} declares no "filaments" rows; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + rows = {} + bambu_id_owners = {} + for fid, row in sorted(rows.items()): + if not OF_ID_RE.match(fid): + print_error(f'Bambu catalog map key "{fid}" is not a minted "OF" id; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + bambu_id = row.get("bambu_id") + if not bambu_id: + # An empty id would map the empty string to a real filament at runtime. + print_error(f'Bambu catalog map row "{fid}" declares no "bambu_id"; ' + f"{BAMBU_MAP_HINT}") + errors += 1 + elif bambu_id in bambu_id_owners: + print_error( + f'Bambu catalog map: Bambu id "{bambu_id}" is mapped by both ' + f'"{bambu_id_owners[bambu_id]}" and "{fid}"; {BAMBU_MAP_HINT}') + errors += 1 + else: + bambu_id_owners[bambu_id] = fid + claimed = analysis["triples"].get(fid) + if not claimed: + continue # a product BambuStudio ships that the tree does not (yet) + row_triple = [row.get("vendor", ""), row.get("type", ""), row.get("name", "")] + if row_triple not in claimed: + print_error( + f'Bambu catalog map row "{fid}" claims triple "{"/".join(row_triple)}" ' + f'but the tree declares "{"; ".join("/".join(t) for t in claimed)}" for ' + f"that id; {BAMBU_MAP_HINT}") + errors += 1 + + return errors + + +# --------------------------------------------------------------------------- +# setting_id validation +# --------------------------------------------------------------------------- + +def check_setting_id_uniqueness(profiles_dir): + """Validate setting_id across every vendor. Returns the error count. + + 1. Every instantiated preset must HAVE a setting_id. (all vendors) + 2. A stored setting_id must equal generate_preset_setting_id(vendor, type, + name); a stale value means the JSON was edited without rerunning + generate-id. (all vendors EXCEPT the reserved ones, i.e. BBL) + 3. Base profiles (instantiation != "true") must not carry a setting_id. + 4. setting_id must be globally unique - no two files may share one. + 5. No profile may use the misspelled key "settings_id". + + Cross-vendor by nature (rule 4), so it always runs over the whole tree, never + narrowed by --vendor. BBL keeps its authoritative "G*" cloud ids, which the + formula does not produce, so only rule 2 is skipped for it; it is still held to + presence, uniqueness, base-no-id and the typo check. + """ + errors = 0 + owners = {} # setting_id -> [relative path], every vendor + for vendor in list_profile_dirs(profiles_dir): + formula_exempt = vendor in RESERVED_VENDORS + for path, sub in iter_profile_files(os.path.join(profiles_dir, vendor)): + try: + data = load_json(path) + except (ValueError, OSError): + # Parse failures are reported by the per-vendor checks, which walk + # the same files; reporting them here too would double-count. + continue + if not isinstance(data, dict): + continue + rel = os.path.relpath(path, profiles_dir).replace(os.sep, "/") + # Rule 5: catch the misspelled "settings_id" key. + if "settings_id" in data: + errors += 1 + print_error( + f'profile {rel} uses the misspelled key "settings_id" ' + f'(should be "setting_id"); run {SETTING_ID_CMD}') + sid = data.get("setting_id") + if data.get("instantiation") != "true": + # Rule 3: base/template profiles must not carry a setting_id. + if sid: + errors += 1 + print_error( + f'base profile {rel} (instantiation != "true") must not have a ' + f'setting_id ("{sid}"); run {SETTING_ID_CMD}') + continue + # Rule 1: every instantiated preset must have a setting_id. + if not sid: + errors += 1 + print_error(f"instantiated preset {rel} is missing a setting_id; " + f"run {SETTING_ID_CMD}") + continue + # Rule 2: the stored id must match the deterministic rule. + if not formula_exempt: + expected = generate_preset_setting_id(vendor, sub, data.get("name", "")) + if sid != expected: + errors += 1 + print_error( + f'setting_id "{sid}" in {rel} does not match the expected ' + f'"{expected}" for {vendor}/{sub}/{data.get("name", "")}; ' + f"run {SETTING_ID_CMD}") + continue + owners.setdefault(sid, []).append(rel) + + # Rule 4: a setting_id shared by two files is an error. For managed vendors that + # means a duplicate vendor/type/name; for BBL a copy-pasted id. + for sid, locs in sorted(owners.items()): + if len(locs) < 2: + continue + errors += 1 + print_error(f'setting_id "{sid}" is shared by {len(locs)} files ({sorted(locs)}); ' + f"setting_id must be globally unique") + return errors + + +# --------------------------------------------------------------------------- +# Per-vendor validation +# --------------------------------------------------------------------------- +# These walk one vendor bundle each and are what --vendor narrows. They use +# pathlib where the originals did; the check driver converts at the boundary. + +def _vendor_json_files(vendor_path): + """Every .json under a vendor bundle, deepest-last, in a stable order.""" + return sorted(vendor_path.rglob("*.json")) + + +def check_preset_name_uniqueness(profiles_dir, vendor): + """No two profiles in a bundle may share a type and a name, indexed or not. + + The loader resolves "inherits" through a per-type map of the bundle's profiles + (PresetBundle.cpp load_subfiles), and std::map::emplace keeps the first + insertion: a second file claiming the name is silently dropped, and which one + wins is nothing but index order. An unindexed twin counts too - it is one + sub_path edit away from deciding that silently. + + Names are per bundle, never global: base profiles reuse them across vendors by + design (fdm_process_common exists in 61 of them). Returns the error count. + """ + errors = 0 + vendor_dir = os.path.join(profiles_dir, vendor) + claimed = defaultdict(list) # (type, name) -> [sub_path] + for path, _sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + try: + data = load_json(path) + except (ValueError, OSError): + # Parse failures are reported by the checks that walk the same files; + # reporting them here too would double-count. + continue + if not isinstance(data, dict) or data.get("type") not in PROFILE_TYPES: + continue + if not data.get("name"): + continue # a nameless profile is check_filament_compatible_printers' + claimed[(data["type"], data["name"])].append( + posixpath.normpath(os.path.relpath(path, vendor_dir).replace(os.sep, "/"))) + + for (profile_type, name), sub_paths in sorted(claimed.items()): + if len(sub_paths) < 2: + continue + errors += 1 + print_error(f"{vendor} has {len(sub_paths)} {profile_type} profiles named " + f'"{name}" ({", ".join(sorted(sub_paths))}); a bundle holds one ' + f"profile per name, so the loader keeps whichever it reaches first " + f"and silently drops the rest") + return errors + + +def check_filament_compatible_printers(profiles_dir, vendor): + """Every instantiated filament preset must declare a non-empty compatible_printers. + + Orca resolves compatible_printers from the preset itself; inheriting it is not + supported on the Profile page. In the OrcaFilamentLibrary it is optional instead: + a profile without it is generic and offered on every printer, while one that + lists printers supersedes the generic profile there. + + Returns the error count. + """ + error = 0 + vendor_path = Path(profiles_dir) / vendor / "filament" + if not vendor_path.exists(): + return 0 + + profiles = [] + for file_path in _vendor_json_files(vendor_path): + if file_path.name in NON_PROFILE_FILES: + continue + rel = file_path.relative_to(profiles_dir) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error += 1 + continue + + profile_name = data.get("name") + if not profile_name: + print_error(f"'name' missing in {rel}") + error += 1 + continue + # Two files claiming this name is check_preset_name_uniqueness' to report, + # over the whole bundle rather than the filament/ directory alone. + profiles.append((rel, data)) + + if vendor == OFL: + return error + + for rel, data in profiles: + if str(data.get("instantiation", "")).lower() != "true": + continue + compatible_printers = data.get("compatible_printers") + if not compatible_printers: + print_error(f"'compatible_printers' missing in {rel}") + error += 1 + return error + + +def load_available_filament_profiles(profiles_dir, vendor): + """The set of filament preset names a vendor bundle offers.""" + profiles = set() + vendor_path = Path(profiles_dir) / vendor / "filament" + if not vendor_path.exists(): + return profiles + + for file_path in _vendor_json_files(vendor_path): + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error loading filament profile " + f"{file_path.relative_to(profiles_dir)}: {e}") + continue + if isinstance(data, dict) and "name" in data: + profiles.add(data["name"]) + return profiles + + +def check_machine_default_materials(profiles_dir, vendor): + """Every default material a machine names must exist, in the bundle or in OFL. + + Returns (errors, warnings); a bundle with no machine/ has nothing to check. + """ + error_count = 0 + machine_dir = Path(profiles_dir) / vendor / "machine" + if not machine_dir.exists(): + return 0, 0 + + available = (load_available_filament_profiles(profiles_dir, vendor) + | load_available_filament_profiles(profiles_dir, OFL)) + + for file_path in _vendor_json_files(machine_dir): + rel = file_path.relative_to(profiles_dir) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error processing machine profile {rel}: {e}") + error_count += 1 + continue + + default_materials = data.get("default_materials") or data.get( + "default_filament_profile") + if not default_materials: + continue + if isinstance(default_materials, list): + materials = default_materials + elif ";" in default_materials: + # A ";"-separated list; a trailing separator leaves an empty segment, + # which is formatting noise rather than a missing profile. + materials = [m.strip() for m in default_materials.split(";") if m.strip()] + else: + materials = [default_materials] + for material in materials: + if material not in available: + print_error(f"Missing filament profile: '{material}' referenced in {rel}") + error_count += 1 + return error_count, 0 + + +def check_name_consistency(profiles_dir, vendor): + """Each .json entry must name the preset its sub_path file declares. + + A preset loads only if the two agree, so a mismatch silently drops it. + Returns (errors, warnings); the warning is the bundle having no index at all. + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_dir = profiles_path / vendor + vendor_file = profiles_path / (vendor + ".json") + if not vendor_file.exists(): + print_warning(f"No profiles found for vendor: {vendor} at {vendor_file}") + return 0, 1 + + try: + data = load_json(vendor_file) + except (ValueError, OSError) as e: + print_error(f"Error loading vendor profile {vendor_file.name}: {e}") + return 1, 0 + + for section in ("filament_list", "machine_model_list", "machine_list", "process_list"): + for child in data.get(section, []): + name_in_vendor = child.get("name") + sub_path = child.get("sub_path") + if not name_in_vendor or not sub_path: + print_error(f"{section} entry without a name/sub_path in {vendor}.json: " + f"{child}") + error_count += 1 + continue + sub_file = vendor_dir / sub_path + if not sub_file.exists(): + print_error(f"Missing sub profile: '{sub_path}' declared in {vendor}.json") + error_count += 1 + continue + try: + sub_data = load_json(sub_file) + except (ValueError, OSError) as e: + print_error(f"Error loading profile {sub_file.relative_to(profiles_path)}: {e}") + error_count += 1 + continue + + name_in_sub = sub_data.get("name") + if name_in_sub == name_in_vendor: + continue + print_error(f"{section} name mismatch: required '{name_in_vendor}' in " + f"{vendor}.json but found '{name_in_sub}' in " + f"{sub_file.relative_to(profiles_path)}") + error_count += 1 + return error_count, 0 + + +def check_index_coverage(profiles_dir, vendor): + """Every profile file in a bundle must be listed in its .json. + + The mirror of check_name_consistency, which walks the index and looks for the + files: this walks the files and looks for them in the index. The loader reads the + sub_paths listed there and nothing else, so a file no list names is dead weight + that looks live - it sits in the bundle, gets edited and reviewed, and never + reaches a single user. + + Returns (errors, gaps), gaps counting the files per REMEDY_HINTS category so + the caller can print each remedy once for the whole run instead of once per file. + """ + errors = 0 + gaps = Counter() + vendor_dir = os.path.join(profiles_dir, vendor) + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError): + # A bundle with no readable index at all is check_name_consistency's to + # report; calling every file in it unindexed would only bury that. + return 0, gaps + + listed = set() + for section in PROFILE_TYPES: + for entry in library.get(section + "_list", []): + if entry.get("sub_path"): + # Index entries are hand-written; "filament/./X.json" names the same + # file as "filament/X.json" and must not read as unlisted. + listed.add(posixpath.normpath(entry["sub_path"].replace("\\", "/"))) + + for path, _sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue # data files carry no name or type and are never indexed + sub_path = posixpath.normpath( + os.path.relpath(path, vendor_dir).replace(os.sep, "/")) + if sub_path in listed: + continue + try: + data = load_json(path) + except (ValueError, OSError): + data = None + errors += 1 + if isinstance(data, dict) and data.get("type") in PROFILE_TYPES: + gaps["unindexed"] += 1 + print_error(f"{vendor}/{sub_path}: no {vendor}.json list references it, so " + f"it never loads") + else: + gaps["unindexable"] += 1 + print_error(f"{vendor}/{sub_path}: no {vendor}.json list references it and " + f"it declares no profile type") + return errors, gaps + + +def check_filament_id_length(profiles_dir, vendor): + """No indexed filament preset may declare a filament_id longer than 8 chars. + + Longer ids break the AMS. Runs for every vendor alike (BBL included: the id + format is what matters, not the vendor). Every .json under the bundle's + filament directory is still parsed through the duplicate-key hook, so that + coverage is unchanged; only the length rule itself is scoped to presets the + index (.json filament_list) actually references. A file the index does + not reference never loads, so its filament_id cannot break anything -- and some + vendors (e.g. SeeMeCNC) ship such orphaned files pre-dating this check. + + Returns the error count. + """ + error = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor / "filament" + if not vendor_path.exists(): + return 0 + + referenced = set() + vendor_file = profiles_path / (vendor + ".json") + if vendor_file.exists(): + try: + index = load_json(vendor_file) + for entry in index.get("filament_list", []): + sub_path = entry.get("sub_path") + if sub_path: + referenced.add((profiles_path / vendor / sub_path).resolve()) + except (ValueError, OSError) as e: + print_error(f"Error loading vendor profile {vendor_file.name}: {e}") + error += 1 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error += 1 + continue + + filament_id = data.get("filament_id") + if filament_id and len(filament_id) > 8 and file_path.resolve() in referenced: + print_error(f'Filament id too long "{filament_id}": {rel}') + error += 1 + return error + + +def check_obsolete_keys(profiles_dir, vendor): + """Warn about settings PrintConfig.cpp explicitly discards. Returns the count.""" + warn_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor / "filament" + if not vendor_path.exists(): + return 0 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_warning(f"Error reading profile {rel}: {e}") + warn_count += 1 + continue + for key in data: + if key in OBSOLETE_KEYS: + print_warning(f"Obsolete key: '{key}' found in {rel}") + warn_count += 1 + return warn_count + + +def check_vector_type_keys(profiles_dir, vendor): + """Options the config system stores as vectors must be JSON arrays. + + `filament_type` must be ["PA-CF"], not "PA-CF". Returns the error count. + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor + if not vendor_path.exists(): + return 0 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path) + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error_count += 1 + continue + if not isinstance(data, dict): + continue + for key in VECTOR_KEYS: + if key in data and not isinstance(data[key], list): + print_error(f"'{key}' must be an array in {rel}, " + f"got {type(data[key]).__name__}: {data[key]!r}") + error_count += 1 + return error_count + + +def check_conflict_keys(profiles_dir, vendor): + """A renamed option and its old spelling must not co-exist in one profile. + + The loader would pick one arbitrarily, and for extruder_clearance_radius vs + extruder_clearance_max_radius the wrong pick means a toolhead collision. + Returns (errors, warnings). + """ + error_count = 0 + profiles_path = Path(profiles_dir) + vendor_path = profiles_path / vendor + if not vendor_path.exists(): + print_warning(f"No profile directory for vendor: {vendor}") + return 0, 1 + + for file_path in _vendor_json_files(vendor_path): + rel = file_path.relative_to(profiles_path) + try: + data = load_json(file_path, detect_duplicates=True) + except DuplicateKeyError as e: + print_error(f"Duplicate key error in {rel}: {e}") + error_count += 1 + continue + except (ValueError, OSError) as e: + print_error(f"Error processing {rel}: {e}") + error_count += 1 + continue + if not isinstance(data, dict): + continue + for key_set in CONFLICT_KEYS: + if sum(1 for k in key_set if k in data) > 1: + print_error(f"Conflict keys {key_set} co-exist in {rel}") + error_count += 1 + return error_count, 0 + + +def check_normalized(profiles_dir, vendor): + """A bundle must already be what normalize and update-index write. + + Those two commands define a profile file's canonical shape - identifying keys + first, keys the slicer no longer reads gone, filament options that are vectors + written as vectors - and a .json's canonical lists, ordered parents-first + so the loader resolves every "inherits" in one pass. Running them over a + contributed bundle has to be a no-op; where it would not be, the file that was + reviewed is not the file that ships, and the next maintainer to run normalize + carries an unrelated diff into their own change. + + It asks the normalize and update-index sections below rather than restating what + they do, because a second definition of normal is free to drift from the one that + writes. + + The index half is skipped when the bundle has a file update-index cannot place, or + a preset name two files claim: the index is then unbuildable for a reason + check_index_coverage and check_preset_name_uniqueness already report on their own, + and "would be rebuilt" stacked on top of that is noise. + + Returns (errors, gaps), gaps counting per REMEDY_HINTS category. + """ + errors = 0 + gaps = Counter() + vendor_dir = os.path.join(profiles_dir, vendor) + + for path, sub in iter_profile_files(vendor_dir): + if os.path.basename(path) in NON_PROFILE_FILES: + continue # data files carry no name or type; normalize skips them too + try: + data = load_json(path) + except (ValueError, OSError): + continue # an unreadable file is check_name_consistency's to report + if not isinstance(data, dict): + continue + changes = _normalize_profile(data, sub) + if not changes: + continue + sub_path = os.path.relpath(path, vendor_dir).replace(os.sep, "/") + print_error(f"{vendor}/{sub_path}: normalize would {'; '.join(changes)}") + errors += 1 + gaps["unnormalized"] += 1 + + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError): + # A bundle with no readable index has nothing to compare against, and saying so + # again here would only bury check_name_consistency's report of it. + return errors, gaps + + sections, problems = build_index_sections(profiles_dir, vendor) + if sections is None or problems: + return errors, gaps + stale = sorted(s for s, entries in sections.items() if library.get(s) != entries) + if stale: + print_error(f"{vendor}.json: update-index would rebuild {', '.join(stale)}") + errors += 1 + gaps["stale_index"] += 1 + return errors, gaps + + +# --------------------------------------------------------------------------- +# check +# --------------------------------------------------------------------------- + +def check_profiles(profiles_dir=PROFILES_DIR, vendors=None): + """Validate the whole profile tree. Returns the error count. + + The per-vendor checks honour `vendors`; the setting_id and filament_id checks are + cross-vendor properties a narrowed run cannot answer, so they always cover the + whole tree. With no `vendors`, every bundle is checked except the `user` directory + a local validator run leaves behind, being its data dir rather than a bundle; + naming it explicitly checks it. OrcaFilamentLibrary is checked like any other + bundle, its only exemption being that a library filament may leave + compatible_printers empty - what check_filament_compatible_printers applies. The + normalization pass takes its own vendor list - see the comment on that loop. + """ + print_info("Checking profiles ...") + errors_found = 0 + warnings_found = 0 + remedies = Counter() + + if vendors: + checked = list(vendors) + else: + checked = [v for v in list_profile_dirs(profiles_dir) if v != USER_DIR] + + for vendor in checked: + errors_found += check_preset_name_uniqueness(profiles_dir, vendor) + errors_found += check_filament_compatible_printers(profiles_dir, vendor) + + new_errors, new_warnings = check_machine_default_materials(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + warnings_found += check_obsolete_keys(profiles_dir, vendor) + + new_errors, new_warnings = check_name_consistency(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + new_errors, new_warnings = check_conflict_keys(profiles_dir, vendor) + errors_found += new_errors + warnings_found += new_warnings + + errors_found += check_vector_type_keys(profiles_dir, vendor) + errors_found += check_filament_id_length(profiles_dir, vendor) + + new_errors, gaps = check_index_coverage(profiles_dir, vendor) + errors_found += new_errors + remedies.update(gaps) + + # normalize and update-index judge file and index shape, not the preset-content + # rules above, so this pass takes its own vendor list. Unscoped that is the + # bundles with an index, exactly what those two commands take; a --vendor is + # passed through as given, so a bundle whose index has not landed yet still has + # its files held to what normalize writes. + for vendor in (vendors or list_vendor_names(profiles_dir)): + new_errors, gaps = check_normalized(profiles_dir, vendor) + errors_found += new_errors + remedies.update(gaps) + + for category, hint in REMEDY_HINTS.items(): + if remedies[category]: + print_warning(f"{remedies[category]} {hint}") + + # Cross-vendor checks: setting_id uniqueness and the whole filament_id state, + # both validated over the entire tree regardless of --vendor. + errors_found += check_setting_id_uniqueness(profiles_dir) + errors_found += check_filament_ids(profiles_dir) + + print("\n==================== SUMMARY ====================") + print_info(f"Checked vendors : {len(checked)}") + if errors_found > 0: + print_error(f"Files with errors : {errors_found}") + else: + print_success("Files with errors : 0") + if warnings_found > 0: + print_warning(f"Files with warnings : {warnings_found}") + else: + print_success("Files with warnings : 0") + print("=================================================") + if errors_found > 0 or warnings_found > 0: + print_warning(f"Issue(s) found, {NORMALIZE_HINT}") + return errors_found + + +# --------------------------------------------------------------------------- +# Byte-preserving profile edits +# --------------------------------------------------------------------------- +# Binary IO throughout: a profile keeps its original line endings (LF or CRLF), +# its BOM and its exact formatting apart from the one line being touched. + +def insert_key_line(text, key, value, before=(), after=()): + """Insert a `"key": value` line into a preset that lacks one. + + Placed just before the first `before` anchor the file has (matching the + canonical key order), else just after the first `after` anchor, reusing that + anchor line's indentation and line ending. Returns (text, insertions made). + """ + def line(m): + return (f'{m.group(1)}"{key}": {json.dumps(value, ensure_ascii=False)},' + f'{m.group(2)}') + + for anchors, at_start in ((before, True), (after, False)): + for anchor in anchors: + m = re.search(r'^([ \t]*)"' + re.escape(anchor) + r'"[ \t]*:.*?(\r?\n)', + text, re.MULTILINE) + if m: + cut = m.start() if at_start else m.end() + return text[:cut] + line(m) + text[cut:], 1 + return text, 0 + + +def replace_key_value(text, key, new_value, old_value=None): + """Swap the JSON string VALUE on the `"key"` line, byte-preserving the rest. + + When old_value is given the line must carry exactly that value, so a stale + rewrite fails loudly instead of clobbering an unexpected id. + Returns (text, replacements made). + """ + value = (re.escape(json.dumps(old_value, ensure_ascii=False)) + if old_value is not None else _JSON_STR) + pattern = re.compile( + r'(^[ \t]*"' + re.escape(key) + r'"[ \t]*:[ \t]*)' + value, re.MULTILINE) + return pattern.subn( + lambda m: m.group(1) + json.dumps(new_value, ensure_ascii=False), text, count=1) + + +def delete_key_line(text, key, old_value=None): + """Delete the `"key"` line, byte-preserving the rest. + + Handles both the canonical layout (trailing comma) and a last-property + layout (comma on the preceding line, consumed so no dangling comma is left). + Returns (text, deletions made). + """ + value = (re.escape(json.dumps(old_value, ensure_ascii=False)) + if old_value is not None else _JSON_STR) + member = r'"' + re.escape(key) + r'"[ \t]*:[ \t]*' + value + m = re.search(r'^[ \t]*' + member + r'[ \t]*,[ \t]*\r?\n', text, re.MULTILINE) + if m: + return text[:m.start()] + text[m.end():], 1 + m = re.search(r',[ \t]*\r?\n[ \t]*' + member + r'[ \t]*(?=\r?\n)', text) + if m: + return text[:m.start()] + text[m.end():], 1 + return text, 0 + + +def insert_filament_id(text, new_id): + """Insert a `"filament_id"` line before `instantiation`, else after `name`.""" + return insert_key_line(text, "filament_id", new_id, + before=("instantiation",), after=("name",)) + + +def replace_filament_id_value(text, old_id, new_id): + """Swap the value on the `"filament_id"` line; it must carry old_id.""" + return replace_key_value(text, "filament_id", new_id, old_value=old_id) + + +def insert_setting_id(text, new_id): + """Insert a `"setting_id"` line before `filament_id`, else `instantiation`. + + Falls back to `name` — the one key every preset has — so the anchor does not + depend on whether filament_id has been written yet: a dry run, which does not + write it, must reach the same verdict as the real run that does. + """ + return insert_key_line(text, "setting_id", new_id, + before=("filament_id", "instantiation"), after=("name",)) + + +def _edit_profile(path, edit, dry_run=False, what="edit"): + """Apply `edit(text) -> (text, n)` to the profile at path, byte-preserving. + + The result is re-parsed and returned so the caller can verify the outcome — + in a dry run too, where only the write itself is skipped. Raises when the + edit found no anchor or produced invalid JSON. + """ + with open(path, "rb") as f: + raw = f.read() + bom = raw.startswith(b"\xef\xbb\xbf") + text = raw.decode("utf-8-sig") + text, n = edit(text) + if n == 0: + raise RuntimeError(f"could not apply {what} to {path}") + try: + data = json.loads(text) # fail loudly if the edit broke the JSON + except ValueError as e: + raise RuntimeError(f"{what} broke the JSON in {path}: {e}") from None + if not dry_run: + with open(path, "wb") as f: + f.write((b"\xef\xbb\xbf" if bom else b"") + text.encode("utf-8")) + return data + + +def write_filament_id(path, new_id, dry_run=False): + """Insert new_id into the profile at path, byte-preserving everything else.""" + _edit_profile(path, lambda text: insert_filament_id(text, new_id), + dry_run, "filament_id insert") + + +def rewrite_filament_id(path, old_id, new_id, dry_run=False): + """Replace the filament_id value old_id -> new_id; re-parses to verify.""" + data = _edit_profile(path, lambda text: replace_filament_id_value(text, old_id, new_id), + dry_run, "filament_id rewrite") + if data.get("filament_id") != new_id: + raise RuntimeError(f'rewrite of filament_id "{old_id}" -> "{new_id}" in {path} ' + f"did not take effect") + + +# --------------------------------------------------------------------------- +# generate-id +# --------------------------------------------------------------------------- + +def _incomplete_triple(triple): + """The name(s) of the empty mint-key fields, or "" when both are present.""" + return " and ".join(k for k, v in (("filament_vendor", triple[0]), + ("filament_type", triple[1])) if not v) + + +def generate_filament_ids(profiles_dir=PROFILES_DIR, vendors=None, dry_run=False, + changed_paths=None): + """Make every filament carry the id its own triple mints. + + One rule, applied to declarations and to id-less filaments alike: + * a declared id that is not the one its own triple mints — a wrong OF id, + or a foreign one such as a Bambu catalog id arriving with an upstream + sync — is replaced in place; + * an instantiated filament that resolves no id at all gets one inserted + into its root(s): the id-less presets of the SAME filament its members + inherit, or the member itself (a parent of another filament cannot carry + this filament's id — check 2). + A declaration is left alone exactly when it already equals the one id its + triple mints (check 2). Two products minting one id (check 2d) are reported + and left unwritten: nothing salts past a collision, a rename resolves it. + + `vendors` restricts what is WRITTEN; the id is a function of the triple + alone, so a narrowed run writes exactly what a full one would, and --check + reports whatever it was not allowed to touch. `changed_paths`, when a set is + passed, collects the files that changed. A file whose layout offers no + anchor for the edit is reported and counted as an error, so one odd profile + cannot abort the pass over all the others. Returns (files_changed, errors). + """ + _utf8_console() + analysis = analyze_tree(profiles_dir) + errors = 0 + for msg in analysis["read_errors"]: + print_error(msg) + errors += 1 + wanted = None + if vendors is not None: + wanted = set(vendors) + # A vendor directory without a bundle index simply has no filaments to + # process; only a name that is no directory at all is an error. + unknown = sorted(wanted - set(list_profile_dirs(profiles_dir))) + if unknown: + for v in unknown: + print_error(f'unknown vendor "{v}" in {profiles_dir}') + return 0, errors + len(unknown) + + colliding = set() # triples no run may write an id for + for fid, ts in sorted(analysis["collisions"].items()): + print_error( + f'cannot write filament_id "{fid}": it is the mint of {len(ts)} different ' + f'products ({"; ".join("/".join(t) for t in ts)}), a base62 collision; ' + f"rename one of them so their triples differ") + errors += 1 + colliding.update(ts) + + verb = "would " if dry_run else "" + files_changed = 0 + reminted = 0 + inserted = 0 + + # 1. Declarations that are not the mint of their own triple. + for vendor, rec, fid, triple in sorted( + analysis["declarer_triples"], key=lambda x: (x[0], x[1]["file"])): + want = generate_filament_id(*triple) + if (fid == want or (wanted is not None and vendor not in wanted) + or triple in colliding): + continue + missing = _incomplete_triple(triple) + if missing: + print_error( + f'cannot re-mint "{rec["file"]}" (filament_id "{fid}"): resolves empty ' + f'{missing}; the mint key needs both (generic materials use ' + f'filament_vendor "Generic")') + errors += 1 + continue + try: + rewrite_filament_id(rec["path"], fid, want, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + reminted += 1 + if changed_paths is not None: + # Index sub_paths are "/"-joined even on Windows, where the + # setting_id pass reaches the same file through os.walk: normalize + # or one file touched by both passes counts as two. + changed_paths.add(os.path.normpath(rec["path"])) + print_info(f'{verb}rewrite {rec["file"]}: "{fid}" -> "{want}" ' + f'(triple "{"/".join(triple)}")') + + # 2. Instantiated filaments that resolve no id at all, grouped by filament. + filaments = {} # (vendor, filament name) -> [rec] + for vendor, name, _file in analysis["missing_effective"]: + if wanted is not None and vendor not in wanted: + continue + rec = analysis["vendors"][vendor][name] + if rec["id_source"] in ("cycle", "dangling"): + print_error(f'cannot mint for "{vendor}/{name}": broken inherits chain ' + f'({rec["id_source"]})') + errors += 1 + continue + filaments.setdefault((vendor, base_name(name)), []).append(rec) + + ofl_map = analysis["vendors"].get(OFL, {}) + for (vendor, filament_name), members in sorted(filaments.items()): + vendor_map = analysis["vendors"][vendor] + # Root preset(s): the direct vendor-side parents of the members (id-less + # by construction) that belong to the same filament, or the member itself. + roots = {} + for rec in members: + parent = rec.get("inherits") + root = vendor_map.get(parent) if parent else None + if (root is None or root.get("filament_id") + or base_name(root["name"]) != filament_name): + root = rec # root-less member carries the id itself + roots[root["name"]] = root + fields = {(resolve_filament_field(n, "filament_vendor", vendor_map, ofl_map), + resolve_filament_field(n, "filament_type", vendor_map, ofl_map)) + for n in roots} + if len(fields) > 1: + print_error( + f'cannot mint for filament "{vendor}/{filament_name}": its roots resolve ' + f"divergent (filament_vendor, filament_type) pairs {sorted(fields)}; " + f"align the fields first") + errors += 1 + continue + triple = (*next(iter(fields)), filament_name) + if triple in colliding: + continue # reported above + missing = _incomplete_triple(triple) + if missing: + print_error( + f'cannot mint for filament "{vendor}/{filament_name}": it resolves empty ' + f'{missing}; the mint key needs both (generic materials use ' + f'filament_vendor "Generic")') + errors += 1 + continue + new_id = generate_filament_id(*triple) + for name in sorted(roots): + root = roots[name] + try: + write_filament_id(root["path"], new_id, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + inserted += 1 + if changed_paths is not None: + changed_paths.add(os.path.normpath(root["path"])) + print_info(f'{verb}insert filament "{vendor}/{filament_name}": filament_id ' + f'"{new_id}" -> {root["file"]}') + + print_info(f"filament_ids inserted : {inserted}") + print_info(f"filament_ids re-minted : {reminted}") + return files_changed, errors + + +def generate_setting_ids(profiles_dir=PROFILES_DIR, vendors=None, dry_run=False, + changed_paths=None): + """Make every preset carry the setting_id its identity mints. + + One walk over filament/, process/ and machine/ of every vendor bundle, and + one composite edit per file: drop the misspelled "settings_id" key (the app + never reads it), strip setting_id from base profiles (only instantiated + presets carry one), and set generate_preset_setting_id(vendor, type, name) on + instantiated presets — except BBL's, which keep their authoritative "G*" + cloud ids. `changed_paths`, when a set is passed, collects the files that + changed. Returns (files_changed, errors). + """ + _utf8_console() + profiles_dir = str(profiles_dir) + errors = 0 + names = list_profile_dirs(profiles_dir) + if vendors is not None: + wanted = set(vendors) + unknown = sorted(wanted - set(names)) + if unknown: + for v in unknown: + print_error(f'unknown vendor "{v}" in {profiles_dir}') + return 0, len(unknown) + names = [v for v in names if v in wanted] + for v in sorted(wanted & RESERVED_VENDORS): + print_info(f'{v} keeps its authoritative "G*" setting_ids; only its base ' + f"declarations are stripped") + + verb = "would " if dry_run else "" + files_changed = 0 + counts = {"typos": 0, "stripped": 0, "assigned": 0} + for vendor in names: + for path, type_name in iter_profile_files(os.path.join(profiles_dir, vendor)): + try: + with open(path, "rb") as f: + data = json.loads(f.read().decode("utf-8-sig")) + if not isinstance(data, dict): + raise ValueError("top level is not a JSON object") + except (OSError, ValueError) as e: + print_error(f"unreadable profile {path}: {e}") + errors += 1 + continue + + sid = data.get("setting_id") + # Strictly "true", exactly as check_setting_id_uniqueness tests it: + # a preset the validator calls a base profile must not be given an id + # here, or the two would fight over it forever. + instantiated = data.get("instantiation") == "true" + edits = [] # (counter key, description, edit function) + if "settings_id" in data: + edits.append(("typos", 'drop the misspelled "settings_id"', + lambda text: delete_key_line(text, "settings_id"))) + typo = data["settings_id"] + if (vendor in RESERVED_VENDORS and instantiated and sid is None + and isinstance(typo, str) and typo): + # A reserved vendor's ids are authoritative, so there is no + # formula to fall back on: correct the key and keep the + # value, or the drop would leave an instantiated preset with + # no setting_id and nothing able to give it one. + edits.append(("assigned", 'restore its value as "setting_id"', + lambda text, new=typo: insert_setting_id(text, new))) + if not instantiated: + if sid is not None: + edits.append(("stripped", "strip the base profile's setting_id", + lambda text, old=sid: delete_key_line( + text, "setting_id", old))) + elif vendor not in RESERVED_VENDORS: + name = data.get("name") + if not name: + # Report and carry on: an edit already queued for this file + # (a misspelled key) is still worth applying. + print_error(f'instantiated preset has no "name": {path}') + errors += 1 + else: + new_id = generate_preset_setting_id(vendor, type_name, name) + if sid is None: + edits.append(("assigned", "insert the setting_id", + lambda text, new=new_id: insert_setting_id(text, new))) + elif sid != new_id: + edits.append(("assigned", "replace the setting_id", + lambda text, new=new_id, old=sid: replace_key_value( + text, "setting_id", new, old))) + if not edits: + continue + + def apply(text, _edits=edits, _path=path): + for _key, what, edit in _edits: + text, n = edit(text) + if n == 0: + raise RuntimeError(f"could not {what} in {_path}") + return text, len(_edits) + + try: + _edit_profile(path, apply, dry_run) + except (OSError, RuntimeError, ValueError) as e: + print_error(str(e)) + errors += 1 + continue + files_changed += 1 + if changed_paths is not None: + changed_paths.add(os.path.normpath(path)) + for key, _what, _edit in edits: + counts[key] += 1 + rel = os.path.relpath(path, profiles_dir).replace(os.sep, "/") + print_info(f"{verb}update {rel}: " + f"{', '.join(what for _key, what, _edit in edits)}") + + print_info(f'misspelled "settings_id" dropped : {counts["typos"]}') + print_info(f'base setting_ids stripped : {counts["stripped"]}') + print_info(f'setting_ids assigned : {counts["assigned"]}') + return files_changed, errors + + +def run_generate_id(profiles_dir, vendors, filament_id, setting_id, dry_run): + """The generate-id command: write the ids the tree's identities imply. + + Returns the process exit code. + """ + # Both by default. filament_id runs first so its keys are in place before the + # setting_id pass reads the files back. + do_filament = filament_id or not setting_id + do_setting = setting_id or not filament_id + changed = set() # one file the two passes both touch is still one file + errors = 0 + if do_filament: + _n, e = generate_filament_ids(profiles_dir, vendors, dry_run, changed) + errors += e + if do_setting: + _n, e = generate_setting_ids(profiles_dir, vendors, dry_run, changed) + errors += e + + summary = (f"dry run: {len(changed)} file(s) would change; nothing written" + if dry_run else f"{len(changed)} file(s) changed") + if errors: + print_error(f"{summary}; {errors} error(s)") + else: + print_success(summary) + return 1 if errors else 0 + + + +# --------------------------------------------------------------------------- +# Whole-file profile writes (normalize / update-index) +# --------------------------------------------------------------------------- +# Unlike the byte-preserving id edits above, these reserialise a whole file: they +# reorder keys and normalize formatting by design. + +def _rel(path, profiles_dir): + """Tree-relative, forward-slashed path - what every message below prints.""" + return os.path.relpath(path, profiles_dir).replace(os.sep, "/") + + +def _walk_json(directory): + """Every .json file under a directory, in a deterministic order.""" + for root, dirs, files in os.walk(directory): + dirs.sort() + for name in sorted(files): + if name.lower().endswith(".json"): + yield os.path.join(root, name) + + +def _profile_subdir(profile_type): + """The directory a profile type lives in: Orca keeps machine models in machine/.""" + return "machine" if profile_type == "machine_model" else profile_type + + +def write_profile_json(path, data): + """Reserialise a profile file: tab-indented, LF endings, trailing newline. + + newline="\\n" is not cosmetic: without it Python translates to os.linesep, so a + normalize run on Windows would rewrite every file it touches with CRLF endings. + """ + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(data, f, indent="\t", ensure_ascii=False) + f.write("\n") + + +def create_ordered_profile(profile, priority_fields): + """`profile` with priority_fields hoisted to the front, in that order.""" + ordered = {k: profile[k] for k in priority_fields if k in profile} + ordered.update((k, v) for k, v in profile.items() if k not in priority_fields) + return ordered + + +# --------------------------------------------------------------------------- +# normalize +# --------------------------------------------------------------------------- + +# The keys that identify a preset, hoisted to the top of every rewritten file. +NORMALIZE_FIELD_ORDER = ("type", "name", "renamed_from", "inherits", "from", + "setting_id", "filament_id", "instantiation") +# Settings a filament profile must not pin: they belong to the process. +FILAMENT_DROP_FIELDS = ("initial_layer_print_speed", "outer_wall_speed", + "inner_wall_speed", "infill_speed", "top_surface_speed", + "travel_speed") +# Filament options the config system stores as vectors, written as scalars by hand. +FILAMENT_ARRAY_FIELDS = ("filament_cost", "filament_density", "filament_type", + "temperature_vitrification", "filament_max_volumetric_speed", + "filament_vendor") + + +def _normalize_profile(data, sub): + """Normalize one loaded profile in place. Returns what it changed, one line each. + + It reports rather than prints because check asks this function the same question + normalize does - would this file be rewritten? - and has to render the answer as + errors rather than as the running commentary of a write. + """ + changes = [] + + if not data.get("type"): + if sub == "machine": + # The machine folder holds both machine models and the nozzle variants + # that are machines; the name is what tells them apart. + name = data.get("name") or "" + data["type"] = "machine" if "nozzle" in name.lower() else "machine_model" + else: + data["type"] = sub + changes.append(f'add type "{data["type"]}"') + + for field in ("version", "is_custom_defined"): + if data.get(field): + del data[field] + changes.append(f"remove {field}") + + for field in sorted(OBSOLETE_KEYS.intersection(data)): + del data[field] + changes.append(f"remove {field}") + + # BBS renamed extruder_clearance_radius to extruder_clearance_max_radius, but some + # profiles carry both with different values, and the slicer cannot tell which one + # to obey - a toolhead collision waiting to happen. Keep the larger one only. + if "extruder_clearance_radius" in data and "extruder_clearance_max_radius" in data: + drop = ("extruder_clearance_radius" + if float(data["extruder_clearance_max_radius"]) + > float(data["extruder_clearance_radius"]) + else "extruder_clearance_max_radius") + del data[drop] + changes.append(f"drop conflicting {drop}") + + if sub == "filament": + for field in FILAMENT_ARRAY_FIELDS: + if field in data and not isinstance(data[field], list): + data[field] = [data[field]] + changes.append(f"convert {field} to an array") + for field in FILAMENT_DROP_FIELDS: + if field in data: + del data[field] + changes.append(f"remove {field}") + + return changes + + +def normalize_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + force=False, dry_run=False): + """Normalize profile files in place. Returns (files changed, errors). + + Adds a missing "type", drops keys the slicer no longer reads, resolves the + extruder_clearance_* conflict, arrayifies the filament options that are vectors, + and rewrites the file with its identifying keys first. + """ + vendors = vendors or list_vendor_names(profiles_dir) + # Both machine_model and machine live in machine/, so the same directory is never + # walked twice; what a file becomes is decided per file, from its name. + subs = list(dict.fromkeys(_profile_subdir(t) for t in (profile_types or PROFILE_TYPES))) + changed_files = errors = 0 + for vendor in vendors: + for sub in subs: + for path in _walk_json(os.path.join(profiles_dir, vendor, sub)): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + rel = _rel(path, profiles_dir) + try: + data = load_json(path) + except (ValueError, OSError) as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + if not isinstance(data, dict): + continue + changes = _normalize_profile(data, sub) + for change in changes: + print_info(f"{rel}: {change}") + if not changes and not force: + continue + changed_files += 1 + if dry_run: + print_info(f"{rel}: would be rewritten") + continue + try: + write_profile_json( + path, create_ordered_profile(data, NORMALIZE_FIELD_ORDER)) + except OSError as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + print_info(f"{rel}: rewritten") + + verb = "would be normalized" if dry_run else "normalized" + print_success(f"{changed_files} profile(s) {verb}") + return changed_files, errors + + +# --------------------------------------------------------------------------- +# trim +# --------------------------------------------------------------------------- + +def trim_profiles(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + dry_run=False): + """Delete profile files that a vendor's .json does not index. + + The loader only ever reads the sub_paths listed in .json, so a profile + file missing from every *_list never loads. Only recognisable presets are + considered: assets (cover images, bed models, bed textures) are referenced from + inside machine profiles rather than from the index, and data files such as + cli_config.json carry no "type" - all of them stay. A file that cannot be parsed + is reported and kept: never delete what could not be read. + + An unindexed file that some surviving profile names in "inherits" is kept too, + and reported, UNLESS an indexed profile already carries that name: "inherits" is + resolved by preset name, so the indexed one is the parent every child actually + gets, and the unindexed file is a stale copy the loader never reaches. Where no + indexed profile provides the name the inheriting preset really is broken, and + deleting the file would destroy the only record of the settings it was written + against - a repair job for a maintainer, not for this. + + Returns (files removed, errors). + """ + vendors = vendors or list_vendor_names(profiles_dir) + subs = list(dict.fromkeys(_profile_subdir(t) for t in (profile_types or PROFILE_TYPES))) + + total = errors = 0 + for vendor in vendors: + vendor_dir = os.path.join(profiles_dir, vendor) + try: + library = load_json(os.path.join(profiles_dir, vendor + ".json")) + except (ValueError, OSError) as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + + # A profile may be indexed under any of the lists whichever folder it sits + # in, so the whole index is collected before anything is judged unreferenced. + listed = set() + for section in PROFILE_TYPES: + for entry in library.get(section + "_list", []): + sub_path = entry.get("sub_path") + if sub_path: + # Index entries are hand-written; "filament/./X.json" names the + # same file as "filament/X.json" and must not read as an orphan. + listed.add(posixpath.normpath(sub_path.replace("\\", "/"))) + + candidates = {} # path -> profile, for every unindexed preset + inherited = set() # every name the files that stay claim as a parent + provided = {} # name -> sub_path, for the profiles the loader can see + for sub in subs: + for path in _walk_json(os.path.join(vendor_dir, sub)): + rel = _rel(path, profiles_dir) + sub_path = posixpath.normpath( + os.path.relpath(path, vendor_dir).replace(os.sep, "/")) + try: + profile = load_json(path) + except (ValueError, OSError) as e: + print_warning(f"{rel}: {e}; keeping it") + continue + if not isinstance(profile, dict): + continue + if sub_path in listed or profile.get("type") not in PROFILE_TYPES: + if profile.get("inherits"): + inherited.add(profile["inherits"]) + if sub_path in listed and profile.get("name"): + provided[profile["name"]] = sub_path + continue + candidates[path] = profile + + # An orphan kept for being inherited can itself keep its own parent alive, so + # the survivors are grown to a fixpoint before anything is deleted. A kept + # orphan never enters "provided": it does not load, so it cannot be the parent + # a child resolves to, and its own parent needs rescuing on the same terms. + kept = {} + while True: + rescued = {p: d for p, d in candidates.items() + if d.get("name") in inherited and d.get("name") not in provided} + if not rescued: + break + for path, profile in rescued.items(): + del candidates[path] + kept[path] = profile + if profile.get("inherits"): + inherited.add(profile["inherits"]) + + for path in sorted(kept): + print_warning(f"{_rel(path, profiles_dir)}: not indexed by {vendor}.json but " + f'inherited from; keeping it (neither loads - fix the index)') + + removed = 0 + for path in sorted(candidates): + rel = _rel(path, profiles_dir) + twin = provided.get(candidates[path].get("name")) + why = f", not indexed by {vendor}.json" + if twin: + why += f' ({twin} is the profile named "{candidates[path]["name"]}")' + if dry_run: + print_info(f"{rel}: would be removed{why}") + else: + try: + os.remove(path) + except OSError as e: + print_error(f"{rel}: {e}") + errors += 1 + continue + print_info(f"{rel}: removed{why}") + removed += 1 + if removed: + print_info(f"{vendor}: {removed} unreferenced profile(s)") + total += removed + + verb = "would be removed" if dry_run else "removed" + print_success(f"{total} unreferenced profile(s) {verb}") + return total, errors + + +# --------------------------------------------------------------------------- +# update-index +# --------------------------------------------------------------------------- + +def topological_sort(profiles): + """Order index entries parents-first, so the loader resolves inherits in one pass. + + Entries whose parent is not in the same section keep their own (sorted) order at + the end; the loader finds those parents through the base bundle instead. + """ + graph = defaultdict(list) + in_degree = defaultdict(int) + by_name = {p["name"]: p for p in profiles} + all_names = set(by_name) + + placed = set() + for profile in profiles: + parent = profile.get("inherits") + child = profile["name"] + if parent in all_names: + graph[parent].append(child) + in_degree[child] += 1 + in_degree.setdefault(parent, 0) + placed.add(child) + placed.add(parent) + + queue = sorted(name for name, degree in in_degree.items() if degree == 0) + result = [] + while queue: + current = queue.pop(0) + result.append(by_name[current]) + placed.add(current) + for child in sorted(graph[current]): + in_degree[child] -= 1 + if in_degree[child] == 0: + queue.append(child) + + result.extend(by_name[name] for name in sorted(all_names - placed)) + return result + + +def build_index_sections(profiles_dir, vendor, profile_types=None): + """The *_list sections update-index would write for one bundle, from its own files. + + A profile is indexed under the section its own "type" names, so a file whose type + is missing or unrecognised cannot be placed - run normalize first, which is what + writes the type. + + Returns (sections, problems). `problems` names every file that could not be placed, + one message each, for the caller to report. `sections` is None when two files claim + one preset name: the bundle can only hold one profile under a name, so rebuilding + would pick a winner by directory order and quietly drop the other, and the index has + to be left alone instead. Identify the intended preset and delete or rename the + duplicate before retrying. Use trim only for deliberate unindexed-file cleanup, + previewed with --dry-run. + """ + vendor_dir = os.path.join(profiles_dir, vendor) + sections = {} + problems = [] + unplaceable = {} + by_name = defaultdict(list) + for profile_type in (profile_types or PROFILE_TYPES): + entries = [] + for path in _walk_json(os.path.join(vendor_dir, _profile_subdir(profile_type))): + if os.path.basename(path) in NON_PROFILE_FILES: + continue + rel = _rel(path, profiles_dir) + try: + profile = load_json(path) + except (ValueError, OSError) as e: + problems.append(f"{rel}: {e}") + continue + if not isinstance(profile, dict): + continue + if profile.get("type") not in PROFILE_TYPES: + unplaceable[rel] = profile.get("type") + continue + if profile.get("type") != profile_type: + continue + name = profile.get("name") + if not name: + problems.append(f"{rel}: no name, cannot be indexed") + continue + entry = { + "name": name, + "sub_path": os.path.relpath(path, vendor_dir).replace(os.sep, "/"), + } + if profile.get("inherits"): + entry["inherits"] = profile["inherits"] + by_name[name].append(entry["sub_path"]) + entries.append(entry) + + sorted_entries = topological_sort(entries) + for entry in sorted_entries: + entry.pop("inherits", None) # ordering input only, not part of the index + sections[profile_type + "_list"] = sorted_entries + + for rel, found in sorted(unplaceable.items()): + problems.append(f'{rel}: type {found!r} is not one of {list(PROFILE_TYPES)}, so it ' + f"cannot be indexed; run " + f'"python scripts/orca_profile_tool.py normalize" first') + + clashes = {name: subs for name, subs in by_name.items() if len(subs) > 1} + for name, subs in sorted(clashes.items()): + problems.append(f'{vendor}.json: {len(subs)} profiles are named "{name}" ' + f'({", ".join(sorted(subs))}); only one can be indexed under ' + f"that name, so delete or rename the others - " + f"preview unindexed-file cleanup with " + f'"python scripts/orca_profile_tool.py trim --dry-run"') + + return (None if clashes else sections), problems + + +def update_profile_indexes(profiles_dir=PROFILES_DIR, vendors=None, profile_types=None, + dry_run=False): + """Rebuild the *_list sections of each .json from the files on disk. + + Returns (indexes changed, errors). See build_index_sections for what a file has to + carry to be placed, and for when a bundle is left alone instead. + """ + vendors = vendors or list_vendor_names(profiles_dir) + changed = errors = 0 + for vendor in vendors: + lib_path = os.path.join(profiles_dir, vendor + ".json") + try: + library = load_json(lib_path) + except (ValueError, OSError) as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + + sections, problems = build_index_sections(profiles_dir, vendor, profile_types) + for problem in problems: + print_error(problem) + errors += len(problems) + if sections is None: + print_error(f"{vendor}.json: left unchanged, it would have dropped a profile") + continue + + if all(library.get(section) == entries for section, entries in sections.items()): + continue + changed += 1 + if dry_run: + print_info(f"{vendor}.json: {', '.join(sorted(sections))} would be rebuilt") + continue + library.update(sections) + try: + write_profile_json(lib_path, library) + except OSError as e: + print_error(f"{vendor}.json: {e}") + errors += 1 + continue + print_info(f"{vendor}.json: {', '.join(sorted(sections))} rebuilt") + + verb = "would be rebuilt" if dry_run else "rebuilt" + print_success(f"{changed} vendor index(es) {verb}") + return changed, errors + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +EXAMPLES = """\ +examples: + orca_profile_tool.py check + validate the whole tree, exactly as CI does + orca_profile_tool.py check --vendor Creality + the per-vendor checks for one bundle; setting_id and filament_id are + cross-vendor properties, so those two always cover the whole tree + orca_profile_tool.py generate-id + give every profile the id its identity mints, in every vendor bundle + orca_profile_tool.py generate-id --dry-run + preview exactly that; writes nothing + orca_profile_tool.py generate-id --setting-id --vendor Elegoo + setting_id only, and only in that bundle + +after adding, renaming or deleting profile files, run in this order: + normalize -> update-index -> generate-id -> check +normalize supplies missing types; update-index registers presets before id +generation. +Use trim only for deliberate cleanup, previewed with --dry-run: it judges against +the current index and can delete newly added, unindexed presets. +""" + + +def build_parser(): + # Shared options, attached with parents=[...] so every command spells them the + # same way and documents them once. + profiles_opt = argparse.ArgumentParser(add_help=False) + profiles_opt.add_argument("--profiles", default=PROFILES_DIR, metavar="DIR", + help="profiles directory (default: resources/profiles)") + + vendor_opt = argparse.ArgumentParser(add_help=False) + vendor_opt.add_argument("--vendor", metavar="VENDOR", action="append", default=[], + help="act on this vendor bundle only; repeatable. " + "An empty value means every vendor") + + type_opt = argparse.ArgumentParser(add_help=False) + type_opt.add_argument("--profile-type", metavar="TYPE", action="append", default=[], + choices=PROFILE_TYPES, dest="profile_type", + help="act on this profile type only; repeatable. One of: " + + ", ".join(PROFILE_TYPES)) + + dry_run_opt = argparse.ArgumentParser(add_help=False) + dry_run_opt.add_argument("--dry-run", "--dryrun", dest="dry_run", action="store_true", + help="report what would change and write nothing") + + parser = argparse.ArgumentParser( + prog="orca_profile_tool.py", allow_abbrev=False, + formatter_class=argparse.RawDescriptionHelpFormatter, + description="Every maintenance job for the OrcaSlicer system profile tree.\n" + "\n" + "The ids it writes are pure functions of the profile's own\n" + "identity, so it never invents one: it writes the id the rules\n" + "already imply, and leaves a conforming tree alone.", + epilog=EXAMPLES) + commands = parser.add_subparsers(dest="command", metavar="") + + def add(name, parents, help_text, description): + return commands.add_parser( + name, parents=parents, help=help_text, description=description, + allow_abbrev=False, formatter_class=argparse.RawDescriptionHelpFormatter) + + add( + "check", [vendor_opt, profiles_opt], + "validate the whole profile tree -- what CI runs", + "Validate the whole profile tree: preset name uniqueness, index coverage\n" + "both ways, compatible_printers, default-material references, obsolete,\n" + "conflicting and vector-typed keys, filament_id length, that normalize and\n" + "update-index would leave every bundle alone, and the tree-wide setting_id\n" + "and filament_id state. Exits nonzero on errors.\n" + "\n" + "--vendor narrows the per-vendor checks only: setting_id uniqueness and the\n" + "filament_id state are cross-vendor properties a narrowed run cannot answer,\n" + "so they always cover the whole tree.") + + generate_cmd = add( + "generate-id", [vendor_opt, dry_run_opt, profiles_opt], + "write the id each profile's identity implies", + "Write the id every profile should carry: filament_id from each filament's\n" + "(filament_vendor, filament_type, name) triple, setting_id from each preset's\n" + "(vendor, type, name). Idempotent and byte-preserving.\n" + "\n" + "The id is a function of the triple alone, so a narrowed run writes exactly\n" + "what a full one would; check reports whatever it left outside.") + which = generate_cmd.add_mutually_exclusive_group() + which.add_argument("--filament-id", action="store_true", dest="filament_id", + help="write filament_id only, skipping setting_id") + which.add_argument("--setting-id", action="store_true", dest="setting_id", + help="write setting_id only, skipping filament_id") + + normalize_cmd = add( + "normalize", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "rewrite profile files into their canonical shape", + "Add a missing \"type\", drop keys the slicer no longer reads, resolve the\n" + "extruder_clearance_* conflict, arrayify the filament options that are\n" + "vectors, and rewrite each file with its identifying keys first.\n" + "\n" + "Rewrites whole files, so it normalizes their formatting and key order too.") + normalize_cmd.add_argument("--force", action="store_true", + help="rewrite every profile, not only the ones that changed") + + add("trim", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "delete profile files no .json list references", + "Delete profile files that a vendor's .json does not index. The\n" + "loader only ever reads the sub_paths listed there, so an unindexed preset\n" + "never loads.\n" + "\n" + "Use only for deliberate cleanup, previewed with --dry-run. Newly added,\n" + "unindexed presets can be deleted too; omit trim from the authoring workflow.\n" + "\n" + "Assets and data files are kept, a file that cannot be parsed is kept and\n" + "reported, and so is one a surviving profile inherits from that no indexed\n" + "profile provides -- but a stale copy of an indexed profile goes, since\n" + "inherits resolves by name and the indexed one is what children get.") + + add("update-index", [vendor_opt, type_opt, dry_run_opt, profiles_opt], + "regenerate the *_list sections of .json", + "Rebuild the *_list sections of each .json from the files on disk,\n" + "ordered parents-first so the loader resolves inherits in one pass.\n" + "\n" + "A profile is indexed under the section its own \"type\" names, so run\n" + "normalize first: it is what writes a missing type. Two files claiming one\n" + "preset name leave that index alone, because a rebuild could only keep one\n" + "of them. Identify the intended preset and delete or rename the duplicate.\n" + "Use trim only for deliberate unindexed-file cleanup, previewed with\n" + "--dry-run; it can also delete newly authored presets.") + + return parser + + +def main(argv=None): + _utf8_console() + argv = sys.argv[1:] if argv is None else list(argv) + parser = build_parser() + args = parser.parse_args(argv) + if args.command is None: + parser.print_help() + return 0 + + profiles_dir = args.profiles + # check_profile.sh passes --vendor "${VENDOR}" unconditionally (bash 3.2 cannot + # expand an empty array under set -u), and an empty value has always meant + # "every vendor" -- so drop empties rather than looking up a vendor named "". + vendors = sorted({v for v in getattr(args, "vendor", []) if v}) or None + if vendors: + unknown = sorted(set(vendors) - set(list_profile_dirs(profiles_dir))) + if unknown: + for vendor in unknown: + print_error(f'unknown vendor "{vendor}" in {profiles_dir}') + return 1 + profile_types = tuple(getattr(args, "profile_type", []) or ()) or None + + if args.command == "check": + errors = check_profiles(profiles_dir, vendors) + return 1 if errors else 0 + + if args.command == "generate-id": + return run_generate_id(profiles_dir, vendors, args.filament_id, args.setting_id, + args.dry_run) + + if args.command == "normalize": + _changed, errors = normalize_profiles(profiles_dir, vendors, profile_types, + force=args.force, dry_run=args.dry_run) + elif args.command == "trim": + _removed, errors = trim_profiles(profiles_dir, vendors, profile_types, + dry_run=args.dry_run) + else: # update-index + _changed, errors = update_profile_indexes(profiles_dir, vendors, profile_types, + dry_run=args.dry_run) + return 1 if errors else 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/run_unit_tests.sh b/scripts/run_unit_tests.sh index f6a01dd3e0..1d3f0046fd 100755 --- a/scripts/run_unit_tests.sh +++ b/scripts/run_unit_tests.sh @@ -7,8 +7,9 @@ # # Usage: run_unit_tests.sh [TEST_DIR] [BUILD_CONFIG] # TEST_DIR directory containing the built tests (default: build/tests) -# BUILD_CONFIG configuration to run; required for multi-config generators -# (Windows/macOS), harmless/omitted for single-config (Linux). +# BUILD_CONFIG configuration to run; required for multi-config generators, which all +# build scripts use (build_linux.sh too: Ninja Multi-Config). Without it, +# tests registered with plain add_test() lose their labels and report "Not Run". ROOT_DIR="$(dirname "$0")/.." @@ -17,8 +18,9 @@ cd "${ROOT_DIR}" || exit 1 TEST_DIR="${1:-build/tests}" BUILD_CONFIG="${2:-}" -# Run the whole suite, excluding tests tagged [NotWorking]. +# Run the whole suite, excluding tests tagged [NotWorking] and tests labelled RequiresApp, +# which run the built orca-slicer binary that this directory does not contain. # --no-tests=error fails the job if the filter matches nothing (instead of passing green). -args=(--test-dir "${TEST_DIR}" -LE "NotWorking" --no-tests=error --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j) +args=(--test-dir "${TEST_DIR}" -LE "NotWorking|RequiresApp" --no-tests=error --output-junit "$(pwd)/ctest_results.xml" --output-on-failure -j) [ -n "${BUILD_CONFIG}" ] && args+=(--build-config "${BUILD_CONFIG}") ctest "${args[@]}" diff --git a/scripts/test_build_win.ps1 b/scripts/test_build_win.ps1 new file mode 100644 index 0000000000..65dec8ffa1 --- /dev/null +++ b/scripts/test_build_win.ps1 @@ -0,0 +1,969 @@ +<# +.SYNOPSIS + Tests build_win.bat's option handling and the commands it generates. + +.DESCRIPTION + Cases run the script with --dry-run, so nothing is configured, built or + deleted and the suite finishes in seconds. Each case asserts on the exit + code and on the command lines the script echoes. + + Adding a case means adding one row to $cases. A bare string starts a new + group. Defaults: ExpectExit is 0 and --dry-run is appended, so a row only + states what is unusual about it. + + Name what the case proves, in words + Args arguments, as an array + ExpectExit expected exit code (default 0) + DryRun append --dry-run (default $true) + First regex the first output line must match + Env environment for this case only + Contains literal strings the output must have + NotContains literal strings it must not have + Match regexes; each must match at least one output line + NotMatch regexes; none may match any output line + NotExists paths that must not exist after the case runs + DateStampedZip require a bundle date from during this case's invocation + +.PARAMETER Name + Run only the cases whose name matches this regex. Headings with no + matching case are not printed, and a pattern that matches nothing is a + failure rather than an empty pass. + +.EXAMPLE + powershell -File scripts/test_build_win.ps1 + +.EXAMPLE + powershell -File scripts/test_build_win.ps1 -Name solution +#> +[CmdletBinding()] +param( + [string] $Script, + [string] $Name +) + +$ErrorActionPreference = 'Stop' + +if (-not $Script) { + $here = $PSScriptRoot + if (-not $here) { $here = Split-Path -Parent $MyInvocation.MyCommand.Path } + $Script = Join-Path (Split-Path -Parent $here) 'build_win.bat' +} +if (-not (Test-Path $Script)) { throw "build_win.bat not found at $Script" } + +# cmd resumes a batch file by byte offset after `call :label`, and with LF +# endings that offset lands wrong and the label lookup fails. .gitattributes +# pins CRLF; this catches a checkout or an editor that did not honour it. +if ((Get-Content -Raw $Script) -match "(? . +$longFlags = @( + Select-String -Path $Script -Pattern '^call :add_arg \S+ \S+ \S+ (\S+) ' | + ForEach-Object { '--' + $_.Matches[0].Groups[1].Value } +) +if ($longFlags.Count -lt 20) { throw "only found $($longFlags.Count) options in $Script; the parser above is wrong" } + +# A winget that always fails, so the prerequisite failure path runs without +# touching the machine. It has to be an .exe: a .bat invoked without `call` +# transfers control and never comes back, which would end the script instead. +# where.exe returns 1 when its patterns match nothing and never prompts. +$fixtures = Join-Path ([IO.Path]::GetTempPath()) 'build_win_test_fixtures' +New-Item -ItemType Directory -Force -Path $fixtures | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $fixtures 'winget.exe') -Force +$stubPath = "$fixtures;C:\Windows\system32;C:\Windows" + +# Stand-in ninjas that only report a version, so the 1.12 boundary in the +# progress format can be exercised on a machine whose real ninja is newer. +# A dry run skips the dev shell, so PATH here is what the script sees. +$ninjaPaths = @{} +foreach ($v in @{ old = '1.11.1'; new = '1.12.0' }.GetEnumerator()) { + $d = Join-Path $fixtures "ninja-$($v.Key)" + New-Item -ItemType Directory -Force -Path $d | Out-Null + Set-Content -Path (Join-Path $d 'ninja.bat') -Encoding ascii -Value @('@echo off', "echo $($v.Value)") + $ninjaPaths[$v.Key] = "$d;$env:PATH" +} + +# A clang-cl earlier on PATH than the Visual Studio one, which is what the +# compiler used to resolve to. Nothing runs it; the script only locates it. +$clangDir = Join-Path $fixtures 'clang' +New-Item -ItemType Directory -Force -Path $clangDir | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $clangDir 'clang-cl.exe') -Force +$clangOnPath = "$clangDir;$env:PATH" + +# A ccache that only has to exist. Nothing runs it; the script only locates it. +$cacheDir = Join-Path $fixtures 'cache' +New-Item -ItemType Directory -Force -Path $cacheDir | Out-Null +Copy-Item "$env:SystemRoot\System32\where.exe" (Join-Path $cacheDir 'ccache.exe') -Force +$ccacheOnPath = "$cacheDir;$env:PATH" + +# ProgramFiles(x86) is where the script looks for vswhere, so an empty one +# stands in for a machine whose Visual Studio has no clang toolset. +$noVs = Join-Path $fixtures 'no-vs' +New-Item -ItemType Directory -Force -Path $noVs | Out-Null + +# A build directory that already holds a classic solution, for the case where +# what is on disk disagrees with what the generator would write. +$slnDir = Join-Path $fixtures 'sln' +New-Item -ItemType Directory -Force -Path $slnDir | Out-Null +Set-Content -Path (Join-Path $slnDir 'OrcaSlicer.sln') -Value '' -Encoding ascii + +$cases = @( + 'argument handling' + @{ Name = 'no arguments prints help'; Args = @(); DryRun = $false + Contains = @('Usage: build_win.bat [options]', '--clang-cl') } + @{ Name = "--help lists all $($longFlags.Count) options the script defines"; Args = @('--help'); DryRun = $false + Contains = $longFlags } + @{ Name = 'help is grouped and shows usage, examples and environment'; Args = @('--help'); DryRun = $false + Contains = @('Usage: build_win.bat [options]', 'Actions:', 'Build configuration:', 'Toolchain:', + 'How much gets rebuilt:', 'Paths and extra arguments:', 'Diagnostics:', + 'Examples:', 'Environment:') } + @{ Name = 'the environment section shows what to set'; Args = @('--help'); DryRun = $false + Contains = @('ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS', 'ORCA_UPDATER_SIG_KEY', 'NINJA_STATUS', + 'set ORCA_SLICER_CMAKE_ARGS=-DSLIC3R_BUILD_SANDBOXES=ON', '(PowerShell)', 'debugscript') } + @{ Name = 'section headers do not widen the flag column'; Args = @('--help'); DryRun = $false + Match = @('^ -d, --deps +Download') } + # Windows Terminal opens at 120 columns and wraps at 120, so 119 is the + # limit. Anyone still on the old conhost gets 80 and will see wrapping. + @{ Name = 'every help line fits a 120 column console'; Args = @('--help'); DryRun = $false + NotMatch = @('^.{120,}$') } + @{ Name = 'an unknown long option is rejected'; Args = @('--nonsense'); ExpectExit = 1 + Contains = @('Failed to find arg') } + @{ Name = 'an unknown short option is rejected'; Args = @('-Z'); ExpectExit = 1 + Contains = @('Failed to find arg') } + @{ Name = 'a bare argument is rejected'; Args = @('deps'); ExpectExit = 1 + Contains = @('Unknown argument') } + @{ Name = 'an unknown architecture is rejected'; Args = @('-d', '--arch', 'sparc'); ExpectExit = 1 + Contains = @('Unknown architecture') } + @{ Name = 'a string option without a value is rejected'; Args = @('-d', '--arch'); ExpectExit = 1 + Contains = @('requires a value') } + @{ Name = 'short options can be bundled'; Args = @('-dx') + Contains = @('-G "Ninja Multi-Config"', '--target deps') } + + 'generator and compiler selection' + @{ Name = 'deps default to the Visual Studio generator'; Args = @('-d') + Contains = @('-G "Visual Studio', '-A x64', '--target deps') + NotContains = @('Ninja', 'clang-cl') } + @{ Name = '-x selects Ninja without changing compiler'; Args = @('-d', '-x') + Contains = @('-G "Ninja Multi-Config"') + NotContains = @('clang-cl', '-A x64') } + @{ Name = '-l -x builds with clang-cl under Ninja'; Args = @('-d', '-l', '-x') + Contains = @('-G "Ninja Multi-Config"') + Match = @('-DCMAKE_C_COMPILER="[^"]+/clang-cl\.exe"', '-DCMAKE_CXX_COMPILER="[^"]+/clang-cl\.exe"') } + # PATH order used to decide the compiler. VsDevCmd appends the Visual + # Studio LLVM directory to the end of PATH, so a standalone LLVM already + # there was resolved instead, and an old one failed the compiler check. + @{ Name = 'the compiler is resolved from Visual Studio, not PATH'; Args = @('-s', '-l', '-x') + Env = @{ PATH = $clangOnPath } + Match = @('^Compiler: .*/VC/Tools/Llvm/[^/]+/bin/clang-cl\.exe$') } + @{ Name = 'msvc names no compiler, having resolved none'; Args = @('-s') + NotContains = @('Compiler: ') } + @{ Name = '-l without -x names none either, the toolset picks it'; Args = @('-s', '-l') + NotContains = @('Compiler: ') } + # An empty ProgramFiles(x86) puts vswhere out of reach, which is a machine + # whose Visual Studio has no clang toolset. + @{ Name = 'without a Visual Studio clang the one on PATH is used and named'; Args = @('-s', '-l', '-x') + Env = @{ 'ProgramFiles(x86)' = $noVs; PATH = $clangOnPath } + Contains = @('Visual Studio has no clang-cl') + Match = @('^Compiler: .*/clang/clang-cl\.exe$') } + @{ Name = 'no clang-cl anywhere stops before configuring'; Args = @('-s', '-l', '-x'); ExpectExit = 1 + Env = @{ 'ProgramFiles(x86)' = $noVs; PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('No clang-cl found', '--install-vs ide -l') + NotContains = @('cmake -B') } + # Only a configure passes the compiler to CMake, so an action that does + # not configure resolves none, and cannot start needing one installed. + @{ Name = 'packing resolves no compiler'; Args = @('-p', '-l', '-x') + Contains = @('Packing the dependencies') + NotContains = @('Compiler: ') } + @{ Name = '--no-configure resolves none either'; Args = @('-s', '-l', '-x', '--no-configure') + Contains = @('cmake --build "build-clang"') + NotContains = @('Compiler: ') } + @{ Name = '-l alone uses the ClangCL toolset on the VS generator'; Args = @('-d', '-l') + Contains = @('-G "Visual Studio', '-T ClangCL') + NotContains = @('-DCMAKE_C_COMPILER') } + # --msvc and --msbuild name the defaults, so a caller can be explicit and a + # contradictory pair can be caught rather than silently resolved. + @{ Name = '--msvc is the compiler default spelled out'; Args = @('-d', '--msvc') + Contains = @('-G "Visual Studio', '-A x64') + NotContains = @('clang-cl') } + @{ Name = '--msbuild is the generator default spelled out'; Args = @('-d', '--msbuild') + Contains = @('-G "Visual Studio') + NotContains = @('Ninja') } + @{ Name = '--msvc with -x gives Ninja driving cl'; Args = @('-d', '--msvc', '-x') + Contains = @('-G "Ninja Multi-Config"') + NotContains = @('clang-cl') } + @{ Name = '--msbuild with -l gives the VS generator and the ClangCL toolset'; Args = @('-d', '--msbuild', '-l') + Contains = @('-G "Visual Studio', '-T ClangCL') } + # A developer with a standalone LLVM points at it, and the path is passed + # with forward slashes so CMake cannot read a backslash as an escape. + @{ Name = '--clang-path names the compiler, quoted for its spaces'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('-DCMAKE_C_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe"', + '-DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe"') } + @{ Name = '--clang-path beats the Visual Studio clang'; Args = @('-s', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('Compiler: C:/Program Files/LLVM/bin/clang-cl.exe') } + @{ Name = '--clang-path is a clang request on its own'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe') + Contains = @('deps/build-clang') } + @{ Name = '--clang-path needs Ninja to take effect'; Args = @('-d', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe'); ExpectExit = 1 + Contains = @('needs the Ninja generator') } + # `exist` is true for a directory too, and a directory would reach CMake + # as the compiler. + @{ Name = '--clang-path must name the exe, not its folder'; Args = @('-d', '-x', '--clang-path', 'C:\Program Files\LLVM'); ExpectExit = 1 + Contains = @('is a directory') } + @{ Name = 'a clang-cl that is not there is caught early'; Args = @('-d', '-x', '--clang-path', 'C:\nope\clang-cl.exe'); ExpectExit = 1 + Contains = @('No clang-cl at') + NotContains = @('cmake -S deps') } + @{ Name = '--clang-path contradicting --msvc is rejected'; Args = @('-d', '-x', '--msvc', '--clang-path', 'C:\Program Files\LLVM\bin\clang-cl.exe'); ExpectExit = 1 + Contains = @('select different compilers') } + @{ Name = '--clang-cl and --msvc together are rejected'; Args = @('-d', '-l', '--msvc'); ExpectExit = 1 + Contains = @('select different compilers') } + @{ Name = '--ninja and --msbuild together are rejected'; Args = @('-d', '-x', '--msbuild'); ExpectExit = 1 + Contains = @('select different generators') } + # One option with a value, driven by a table, rather than a flag per + # release. Adding a release should not need a new flag. + @{ Name = '--vs 2019 pins that release and skips autodetect'; Args = @('-d', '--vs', '2019') + Contains = @('-G "Visual Studio 16 2019"') + NotContains = @('Detecting Visual Studio') } + @{ Name = '--vs 2022 pins that release'; Args = @('-d', '--vs', '2022') + Contains = @('-G "Visual Studio 17 2022"') } + @{ Name = '--vs 2026 pins that release'; Args = @('-d', '--vs', '2026') + Contains = @('-G "Visual Studio 18 2026"') } + @{ Name = 'an unknown release is rejected and the known ones listed'; Args = @('-d', '--vs', '2015'); ExpectExit = 1 + Contains = @('Unknown Visual Studio release', '2019, 2022, 2026') } + @{ Name = '--vs and --ninja together are rejected'; Args = @('-d', '--vs', '2022', '-x'); ExpectExit = 1 + Contains = @('select different generators') } + @{ Name = 'without --vs the release is autodetected'; Args = @('-d') + Contains = @('Detecting Visual Studio') } + + 'architecture' + @{ Name = 'x64 is the default'; Args = @('-d') + Contains = @('Configuration: Release, x64') + NotContains = @('build-arm64') } + @{ Name = 'arm64 sets the generator platform and deps tree'; Args = @('-d', '--arch', 'arm64') + Contains = @('-A ARM64', 'deps/build-arm64') } + @{ Name = 'the architecture is matched case-insensitively'; Args = @('-d', '--arch', 'ARM64') + Contains = @('-A ARM64', 'deps/build-arm64') } + @{ Name = 'arm64 under Ninja has no -A but keeps the arm64 tree'; Args = @('-d', '--arch', 'arm64', '-x', '-l') + Contains = @('deps/build-clang-arm64') + Match = @('-DCMAKE_C_COMPILER="[^"]+/clang-cl\.exe"') + NotContains = @('-A ') } + + 'build configurations' + # One option with a value, driven by a table, so Release is named rather + # than being whatever is left when no flag is passed. + @{ Name = 'release is the default'; Args = @('-s') + Contains = @('-DCMAKE_BUILD_TYPE=Release', 'cmake -B "build" ') } + @{ Name = '--config release is the default spelled out'; Args = @('-s', '--config', 'release') + Contains = @('-DCMAKE_BUILD_TYPE=Release', 'cmake -B "build" ') } + @{ Name = '--config debug builds into build-dbg'; Args = @('-s', '--config', 'debug') + Contains = @('-DCMAKE_BUILD_TYPE=Debug', 'cmake -B "build-dbg" ') } + @{ Name = '--config relwithdebinfo builds into build-dbginfo'; Args = @('-s', '--config', 'relwithdebinfo') + Contains = @('-DCMAKE_BUILD_TYPE=RelWithDebInfo', 'cmake -B "build-dbginfo" ') } + @{ Name = '--config minsizerel builds into build-minsize'; Args = @('-s', '--config', 'minsizerel') + Contains = @('-DCMAKE_BUILD_TYPE=MinSizeRel', 'cmake -B "build-minsize" ') } + # Batch variable names are case-insensitive, so the table lookup is too. + @{ Name = 'the configuration name is matched case-insensitively'; Args = @('-s', '--config', 'RelWithDebInfo') + Contains = @('-DCMAKE_BUILD_TYPE=RelWithDebInfo') } + @{ Name = 'an unknown configuration is rejected and the known ones listed'; Args = @('-s', '--config', 'bogus'); ExpectExit = 1 + Contains = @('Unknown configuration', 'release, debug, relwithdebinfo, minsizerel') } + # Release, RelWithDebInfo and MinSizeRel all link the /MD dependencies, so + # one tree serves all three. Debug is /MDd and cannot share. + @{ Name = 'minsizerel builds against the release deps'; Args = @('-d', '-s', '--config', 'minsizerel') + Contains = @('cmake -S deps -B "deps/build"', 'cmake -B "build-minsize" ') + NotContains = @('deps/build-minsize') } + @{ Name = 'relwithdebinfo builds against them too'; Args = @('-d', '-s', '-l', '--config', 'relwithdebinfo') + Contains = @('cmake -S deps -B "deps/build-clang"', 'cmake -B "build-dbginfo-clang" ') + NotContains = @('deps/build-dbginfo') } + @{ Name = 'debug keeps a dependency tree of its own'; Args = @('-d', '--config', 'debug') + Contains = @('cmake -S deps -B "deps/build-dbg"') } + # The build tree and the deps tree now have different names, so the + # derivation from the binary directory name cannot work and it is named. + @{ Name = 'a shared deps tree is named outright'; Args = @('-s', '-l', '--config', 'relwithdebinfo') + Match = @('-DDEP_BUILD_DIR="[A-Za-z]:\\.*\\deps\\build-clang"') } + @{ Name = 'configuration and arch combine into build-dbg-arm64'; Args = @('-s', '--config', 'debug', '--arch', 'arm64') + Contains = @('cmake -B "build-dbg-arm64" ') } + + 'what gets built' + @{ Name = 'the deps target defaults to deps'; Args = @('-d') + Contains = @('--target deps') } + @{ Name = '-t overrides the deps target'; Args = @('-d', '-t', 'dep_Boost') + Contains = @('--target dep_Boost') } + @{ Name = 'unit tests are off unless asked for'; Args = @('-s') + Contains = @('-DBUILD_TESTS=OFF') } + @{ Name = '--tests turns the unit tests on'; Args = @('-s', '--tests') + Contains = @('-DBUILD_TESTS=ON') } + @{ Name = '-a enables ASAN for the slicer'; Args = @('-s', '-a') + Contains = @('-DSLIC3R_ASAN=ON') } + @{ Name = '--no-pch turns the precompiled header off'; Args = @('-s', '--no-pch') + Contains = @('-DSLIC3R_PCH=OFF') } + @{ Name = '--no-pch says so in the banner'; Args = @('-s', '--no-pch') + Contains = @('Precompiled header: off') } + @{ Name = 'the precompiled header is on unless asked'; Args = @('-s') + NotContains = @('SLIC3R_PCH') } + @{ Name = '--no-pch works without a cache'; Args = @('-s', '--no-pch') + NotContains = @('COMPILER_LAUNCHER') } + @{ Name = 'the slicer build runs gettext'; Args = @('-s') + Contains = @('run_gettext.bat') } + # tools\7z.exe needs a 7z.dll beside it, which the repo does not carry, + # so the pack falls back to the bsdtar Windows ships. Either is correct; + # what matters is that one is chosen and handed the right names. + @{ Name = '-p packs the deps tree with whichever archiver is usable'; Args = @('-d', '-p') + Match = @('^\+ .*(7z\.exe a|tar\.exe -a -c -f) OrcaSlicer_dep_win-\S+\.zip OrcaSlicer_dep$') } + # The bundle is only good for what built it, so it carries the same three + # axes as the tree. Release x64 on cl keeps the historical plain name. + @{ Name = 'the bundle name carries compiler and deps flavour'; Args = @('-p', '-l', '--config', 'debug', '--arch', 'arm64') + Contains = @('OrcaSlicer_dep_win-ARM64-clang-dbg_') } + @{ Name = 'a relwithdebinfo pack is the release bundle'; Args = @('-p', '--config', 'relwithdebinfo') + Contains = @('OrcaSlicer_dep_win-x64_') + NotContains = @('-dbg', 'dbginfo') } + @{ Name = 'a plain release bundle keeps its old name'; Args = @('-p') + Contains = @('OrcaSlicer_dep_win-x64_') + NotContains = @('-clang', '-Release') } + @{ Name = 'the bundle is stamped with today, not a shuffled date'; Args = @('-p') + DateStampedZip = $true } + # powershell.exe is not in System32 itself, so a trimmed PATH used to + # leave the stamp empty and the bundle named OrcaSlicer_dep_win-x64_.zip. + @{ Name = 'the bundle is stamped even with a bare PATH'; Args = @('-p') + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + DateStampedZip = $true } + @{ Name = '-p packs without rebuilding'; Args = @('-p') + Match = @('^\+ .*(7z\.exe a|tar\.exe -a -c -f) ') + NotContains = @('cmake -S deps') } + @{ Name = 'deps and slicer build in one invocation'; Args = @('-d', '-s', '-x', '-l') + Contains = @('cmake -S deps', 'cmake -B "build-clang" ') } + + 'the compiler cache' + @{ Name = '--cache needs clang-cl and Ninja'; Args = @('-s', '--cache', 'ccache'); ExpectExit = 1 + Contains = @('needs clang-cl and Ninja') } + # cl.exe is out of scope, since ccache refuses every compile under /Zi. + @{ Name = '--cache under Ninja still needs clang-cl'; Args = @('-s', '-x', '--cache', 'ccache'); ExpectExit = 1 + Contains = @('needs clang-cl and Ninja') } + @{ Name = 'an unknown --cache value is rejected'; Args = @('-s', '-x', '--cache', 'nope'); ExpectExit = 1 + Contains = @('Expected ccache, sccache or off') } + # A bare PATH, since the machine running the tests may have sccache installed. + @{ Name = 'a --cache tool that is not there is caught early'; Args = @('-s', '-l', '-x', '--cache', 'sccache'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('is not on PATH') } + @{ Name = '--cache takes any casing'; Args = @('-s', '-l', '-x', '--cache', 'CCACHE') + Env = @{ PATH = $ccacheOnPath } + Contains = @('ccache.exe') } + @{ Name = '--cache off asks for no launcher'; Args = @('-s', '-x', '--cache', 'off') + NotContains = @('COMPILER_LAUNCHER') } + @{ Name = 'no --cache asks for no launcher'; Args = @('-s', '-x') + NotContains = @('COMPILER_LAUNCHER') } + @{ Name = '--cache turns the precompiled header off'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DSLIC3R_PCH=OFF', 'COMPILER_LAUNCHER') } + # Without it the objects name the build directory and only that tree can use them. + @{ Name = '--cache asks for relative debug paths'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DSLIC3R_RELATIVE_DEBUG_PATHS=ON') } + @{ Name = 'no --cache leaves the debug paths alone'; Args = @('-s', '-l', '-x') + NotContains = @('SLIC3R_RELATIVE_DEBUG_PATHS') } + # The resolved path, not the bare name, so PATH cannot change it later. + @{ Name = '--cache names the resolved path in the banner'; Args = @('-s', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Match = @('^Compiler cache: .*/ccache\.exe$') } + @{ Name = '--cache reaches the dependency configure too'; Args = @('-d', '-l', '-x', '--cache', 'ccache') + Env = @{ PATH = $ccacheOnPath } + Contains = @('-DCMAKE_C_COMPILER_LAUNCHER=') } + # Nothing records a launcher without a configure, so the tool is not needed. + # Reaching the cmake check on a bare PATH is what proves it was skipped. + @{ Name = '--no-configure asks for no cache tool'; Args = @('-s', '-l', '-x', '--no-configure', '--cache', 'ccache'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('CMake was not found') + NotContains = @('is not on PATH') } + + 'the developer loop' + @{ Name = '--slicer-target builds one target'; Args = @('-s', '--slicer-target', 'libslic3r') + Contains = @('--config Release --target libslic3r') } + @{ Name = '--no-configure skips the slicer configure'; Args = @('-s', '--no-configure') + Contains = @('cmake --build "build"') + NotContains = @('cmake -B "build" ') } + @{ Name = '--no-configure skips the deps configure'; Args = @('-d', '--no-configure') + Contains = @('cmake --build "deps/build"') + NotContains = @('cmake -S deps') } + @{ Name = '--no-gettext skips the translation step'; Args = @('-s', '--no-gettext') + Contains = @('cmake --build "build"') + NotContains = @('run_gettext') } + # Installing copies the whole tree again for a layout only releases need, + # so it is asked for rather than assumed. + @{ Name = 'nothing is installed unless asked'; Args = @('-s') + Contains = @('run_gettext') + NotContains = @('--target install') } + @{ Name = '-i adds the install step'; Args = @('-s', '-i') + Contains = @('--target install') } + # install(TARGETS OrcaSlicer) has no OPTIONAL, so this would fail partway + # through a build instead of before it. + @{ Name = 'installing a tree with no executable is refused'; Args = @('-s', '-i', '--slicer-target', 'glad'); ExpectExit = 1 + Contains = @('--install needs the executable') + NotContains = @('cmake --build') } + # Without -s there is no install step, so there is nothing to refuse. + @{ Name = 'the same flags without a slicer build are left alone'; Args = @('-d', '-i', '--slicer-target', 'glad') + Contains = @('cmake -S deps') + NotContains = @('--install needs the executable') } + @{ Name = 'naming the executable target is allowed'; Args = @('-s', '-i', '--slicer-target', 'OrcaSlicer') + Contains = @('--target install') } + # Ninja counts compilers, so -j goes on the command line. MSBuild's -j + # counts projects while /MP still runs one cl per core inside each, so the + # cap goes to CL_MPCount in the environment instead. A dry run can only + # show that no -j is passed. + @{ Name = '-j on Ninja passes -j to cmake'; Args = @('-s', '-x', '-j', '4') + Contains = @('Parallel jobs: 4', '--config Release -j 4') } + @{ Name = '-j on Ninja reaches the deps build'; Args = @('-d', '-x', '-j', '2') + Contains = @('--target deps -j 2') } + @{ Name = '-j on MSBuild does not pass -j, which would count projects'; Args = @('-s', '-j', '4') + Contains = @('Parallel jobs: 4') + NotContains = @('-j 4') } + @{ Name = '-j on MSBuild leaves the deps build without -j too'; Args = @('-d', '-j', '2') + Contains = @('--target deps') + NotContains = @('-j 2') } + @{ Name = 'no -j means no job limit'; Args = @('-s') + NotContains = @('parallel jobs', '-j ') } + @{ Name = 'a non-numeric -j is rejected'; Args = @('-s', '-j', 'abc'); ExpectExit = 1 + Contains = @('Invalid --jobs value') } + @{ Name = 'a zero -j is rejected'; Args = @('-s', '-j', '0'); ExpectExit = 1 + Contains = @('Invalid --jobs value') } + @{ Name = 'the loop options combine into a single build command'; Args = @('-s', '-x', '--no-configure', '--no-gettext', '--slicer-target', 'libslic3r_tests', '-j', '8') + Contains = @('--target libslic3r_tests -j 8') + NotContains = @('cmake -B "build" ', 'run_gettext', '--target install') } + + 'one tree per configuration, compiler and architecture' + # CMake resets its cache and carries on when the compiler changes under an + # existing tree, leaving stamps from the old toolchain. Give each its own. + @{ Name = 'clang builds land in their own trees'; Args = @('-d', '-s', '-l') + Contains = @('cmake -S deps -B "deps/build-clang"', 'cmake -B "build-clang" ') } + @{ Name = 'MSVC keeps the historical plain names'; Args = @('-d', '-s', '--msvc') + Contains = @('cmake -S deps -B "deps/build"', 'cmake -B "build" ') + NotContains = @('build-clang') } + @{ Name = 'configuration, compiler and arch all name the tree'; Args = @('-d', '-s', '-l', '--config', 'debug', '--arch', 'arm64') + Contains = @('cmake -S deps -B "deps/build-dbg-clang-arm64"', 'cmake -B "build-dbg-clang-arm64" ') } + + 'locating the dependency tree' + # Without --deps-dir nothing is passed, so CMakeLists derives the path from + # the binary directory name as it always has. + @{ Name = 'the deps path is left to CMake by default'; Args = @('-s') + NotContains = @('-DDEP_BUILD_DIR') } + @{ Name = '--deps-dir tells the slicer where the deps are'; Args = @('-s', '--deps-dir', 'D:\orca-deps') + Contains = @('-DDEP_BUILD_DIR="D:\orca-deps"') } + @{ Name = '--deps-dir also redirects the deps build'; Args = @('-d', '--deps-dir', 'D:\orca-deps') + Contains = @('cmake -S deps -B "D:\orca-deps"', 'cmake --build "D:\orca-deps"') + NotContains = @('deps/build') } + # Paths are quoted throughout, so one with spaces survives the whole run. + @{ Name = 'a deps path with spaces survives'; Args = @('-d', '-s', '--deps-dir', 'C:\Program Files\deps') + Contains = @('-B "C:\Program Files\deps"', '-DDEP_BUILD_DIR="C:\Program Files\deps"') } + @{ Name = '--deps-dir also redirects the pack'; Args = @('-p', '--deps-dir', 'D:\orca-deps') + Contains = @('cd /d "D:\orca-deps"') } + @{ Name = 'pack uses an absolute default path'; Args = @('-p') + Match = @('^\+ cd /d "[A-Za-z]:\\.*\\deps\\build"') } + # CMakeLists derives DEP_BUILD_DIR from the build directory's name, so + # pointing the build elsewhere has to name the deps tree outright. + @{ Name = '--build-dir moves the slicer build'; Args = @('-s', '-l', '-x', '--build-dir', 'out/build/x64-clang') + Contains = @('cmake -B "out/build/x64-clang" ') } + @{ Name = '--build-dir still names the deps tree'; Args = @('-s', '-l', '-x', '--build-dir', 'out/build/x64-clang') + Match = @('-DDEP_BUILD_DIR="[A-Za-z]:\\.*\\deps\\build-clang"') } + @{ Name = '--deps-dir wins over the derived tree'; Args = @('-s', '--build-dir', 'out/build/x64-clang', '--deps-dir', 'D:\orca-deps') + Contains = @('-DDEP_BUILD_DIR="D:\orca-deps"') } + # A value ending in a backslash escapes the closing quote it is spliced + # into, so cmake would receive D:\tree" and swallow the next argument. + @{ Name = 'a trailing backslash is trimmed off a path'; Args = @('-s', '--build-dir', 'D:\tree\') + Contains = @('cmake -B "D:\tree" ') } + @{ Name = 'a build directory with spaces survives'; Args = @('-s', '--build-dir', 'C:\Program Files\tree') + Contains = @('cmake -B "C:\Program Files\tree" ') } + @{ Name = 'the default build names no deps tree'; Args = @('-s') + NotContains = @('DEP_BUILD_DIR') } + + 'saying what mode and toolchain are in play' + @{ Name = 'a dry run announces itself before the first command'; Args = @('-u') + First = '^Dry run: printing commands without running them\.$' } + @{ Name = 'the announcement leads even a full build'; Args = @('-ds') + First = '^Dry run: ' } + # Autodetect only runs for the Visual Studio generator, and only when no + # release was pinned, so it needs a Visual Studio on the machine. + @{ Name = 'the detected Visual Studio names its release year'; Args = @('-s') + Match = @('^Detected Visual Studio \d+ \(20\d\d\)$') } + @{ Name = 'pinning a release skips detection'; Args = @('-s', '--vs', '2022') + NotContains = @('Detected Visual Studio') } + + 'an action has to be asked for' + # Neither can happen without building the slicer, so they stand alone the + # way --install-vs does. + @{ Name = '--run-tests is an action on its own'; Args = @('--run-tests') + Contains = @('-DBUILD_TESTS=ON', 'ctest --test-dir') + NotContains = @('Nothing to do') } + @{ Name = '--tests is too'; Args = @('--tests') + Contains = @('-DBUILD_TESTS=ON') + NotContains = @('Nothing to do', 'ctest --test-dir') } + # Naming an action means that action, not a fuller build. + @{ Name = 'they do not add a slicer build to one already asked for'; Args = @('-d', '--tests') + Contains = @('cmake -S deps') + NotContains = @('cmake -B "build"') } + @{ Name = 'shaping options alone are not an action'; Args = @('--config', 'debug'); ExpectExit = 1 + Contains = @('Nothing to do.') + NotContains = @('Build completed') } + @{ Name = '-j alone is not an action either'; Args = @('-j', '4'); ExpectExit = 1 + Contains = @('Nothing to do.') } + @{ Name = '--install-vs counts as an action on its own'; Args = @('--install-vs', 'ide') + NotContains = @('Nothing to do.') } + + 'diagnostics' + @{ Name = '-v asks cmake for the command lines'; Args = @('-s', '-v') + Contains = @('--verbose') } + @{ Name = '-v applies to the deps build too'; Args = @('-d', '-v') + Contains = @('--target deps', '--verbose') } + # ninja's own default shows neither a percentage nor a time. %w and %W + # need ninja 1.12, and an unknown placeholder is fatal, so the format is + # chosen from the version rather than hardcoded. + @{ Name = '-v names the ninja progress format'; Args = @('-s', '-x', '-v') + Match = @('^Ninja progress format: \[.*%p.*\]') } + @{ Name = 'a ninja older than 1.12 gets the format it understands'; Args = @('-s', '-x', '-v') + Env = @{ PATH = $ninjaPaths['old'] } + Contains = @('Ninja progress format: [%s/%t %p :: %e]') } + @{ Name = 'ninja 1.12 gets elapsed and remaining'; Args = @('-s', '-x', '-v') + Env = @{ PATH = $ninjaPaths['new'] } + Contains = @('Ninja progress format: [%f/%t %p :: %w / %W]') } + @{ Name = 'a format you set yourself is left alone'; Args = @('-s', '-x', '-v') + Env = @{ NINJA_STATUS = '[mine] ' } + Contains = @('Ninja progress format: [mine]') } + @{ Name = 'MSBuild builds mention no ninja format'; Args = @('-s', '-v') + NotContains = @('Ninja progress format') } + @{ Name = 'builds are quiet without -v'; Args = @('-s') + NotContains = @('--verbose') } + + 'installing prerequisites' + # -u installs CMake, Perl and Git. Visual Studio is a separate ask, because + # most people already have it, and which one you want is a real choice. + @{ Name = '-u alone installs no Visual Studio'; Args = @('-u') + Contains = @('Kitware.CMake', 'StrawberryPerl', 'Git.Git') + NotContains = @('Microsoft.VisualStudio') } + # Asking for Visual Studio is asking to install prerequisites, so it does + # not also need -u; requiring both meant --install-vs alone did nothing. + @{ Name = '--install-vs works without -u'; Args = @('--install-vs', 'ide') + Contains = @('id=Microsoft.VisualStudio.Community', 'Kitware.CMake', 'Git.Git') } + @{ Name = '--install-vs buildtools asks for the build tools'; Args = @('-u', '--install-vs', 'buildtools') + Contains = @('id=Microsoft.VisualStudio.BuildTools') + NotContains = @('VC.CoreIde') } + @{ Name = '--install-vs ide asks for Community with the IDE component'; Args = @('-u', '--install-vs', 'ide') + Contains = @('id=Microsoft.VisualStudio.Community', 'VC.CoreIde') } + @{ Name = 'an unknown edition is rejected and the known ones listed'; Args = @('-u', '--install-vs', 'bogus'); ExpectExit = 1 + Contains = @('Unknown Visual Studio edition', 'buildtools, ide') } + @{ Name = '--vs picks which release to install'; Args = @('-u', '--vs', '2022', '--install-vs', 'buildtools') + Contains = @('id=Microsoft.VisualStudio.2022.BuildTools') } + @{ Name = '-l adds the clang compiler and the MSBuild toolset'; Args = @('-u', '--install-vs', 'buildtools', '-l') + Contains = @('VC.Llvm.Clang ', 'VC.Llvm.ClangToolset') } + # CMake 4.x breaks Boost.Context on ARM64, so the installer pins 3.31 there + # and leaves x64 on the current release. + @{ Name = 'CMake is pinned to 3.31 when installing for arm64'; Args = @('-u', '--arch', 'arm64') + Contains = @('Kitware.CMake --version 3.31.8') } + @{ Name = 'CMake is not pinned for x64'; Args = @('-u', '--arch', 'x64') + Contains = @('Kitware.CMake') + NotContains = @('--version') } + @{ Name = 'installing for arm64 asks for the ARM64 toolset'; Args = @('--install-vs', 'buildtools', '--arch', 'arm64') + Contains = @('Microsoft.VisualStudio.Component.VC.Tools.ARM64') } + @{ Name = 'an x64 install asks only for the x64 toolset'; Args = @('--install-vs', 'buildtools') + Contains = @('Microsoft.VisualStudio.Component.VC.Tools.x86.x64') + NotContains = @('VC.Tools.ARM64') } + + 'dry run changes nothing' + # clean_tree resolves the path before removing it, so the line echoed is + # absolute. It is the last thing printed before a directory goes. + @{ Name = '-c echoes the deps rmdir rather than running it'; Args = @('-d', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\.*\\deps\\build"$') } + @{ Name = '-c removes the tree --deps-dir named, not the default one'; Args = @('-d', '-c', '--deps-dir', 'D:\orca-deps') + Match = @('^\+ rmdir /S /Q "D:\\orca-deps"$') + NotContains = @('\deps\build') } + @{ Name = '-c echoes the slicer rmdir rather than running it'; Args = @('-s', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\.*\\build"$') } + @{ Name = 'cleaning a slicer build leaves the deps tree alone'; Args = @('-s', '-c') + NotMatch = @('rmdir.*\\deps\\') } + @{ Name = 'cleaning both builds removes both trees'; Args = @('-d', '-s', '-c') + Match = @('^\+ rmdir /S /Q "[A-Za-z]:\\[^"]*\\deps\\build"$', + '^\+ rmdir /S /Q "[A-Za-z]:\\(?!.*\\deps\\)[^"]*\\build"$') } + + # Nothing below should be reachable. They are a floor under a bug that + # hands clean_tree a path far shorter than it looks. + @{ Name = 'a configuration whose lookup comes back empty is rejected'; Args = @('-d', '-c', '--config', 'release '); ExpectExit = 1 + Contains = @('Unknown configuration') + NotContains = @('rmdir') } + @{ Name = 'a drive root is refused'; Args = @('-d', '-c', '--deps-dir', 'D:\'); ExpectExit = 1 + Contains = @('that is a drive root') + NotContains = @('+ rmdir') } + @{ Name = 'the repository itself is refused'; Args = @('-d', '-c', '--deps-dir', '.'); ExpectExit = 1 + Contains = @('that is the repository itself') + NotContains = @('+ rmdir') } + @{ Name = '-k echoes the taskkills rather than running them'; Args = @('-k') + Contains = @('+ taskkill /F /IM MSBuild.exe', '+ taskkill /F /IM cl.exe') } + @{ Name = '-k also covers the Ninja toolchain'; Args = @('-k') + Contains = @('+ taskkill /F /IM ninja.exe', '+ taskkill /F /IM clang-cl.exe') } + @{ Name = '-k announces the dry run like every other action'; Args = @('-k') + First = '^Dry run: ' } + @{ Name = '-u echoes the winget installs rather than running them'; Args = @('-u') + Contains = @('+ winget install', 'Kitware.CMake') + NotContains = @('cmake -S deps') } + # Not a dry run: winget is a stub that fails, so nothing is installed. + @{ Name = 'a failed install is reported, not claimed as success'; Args = @('-u') + DryRun = $false; ExpectExit = 1 + Env = @{ PATH = $stubPath } + Contains = @('Failed to install:', 'CMake', 'Perl', 'Git') + NotContains = @('Installed the prerequisites') } + # The reason belongs inside the frame. Every command this path ran had + # already succeeded, so naming the last one would point at the wrong thing. + @{ Name = 'a failed install names the reason, not the last command'; Args = @('-u') + DryRun = $false; ExpectExit = 1 + Env = @{ PATH = $stubPath } + Contains = @('####', 'Failed to install:') + NotContains = @('Failed: winget') } + @{ Name = 'a dry run does not claim the install happened'; Args = @('-u') + Contains = @('Dry run: nothing was installed.') + NotContains = @('are in place') } + @{ Name = '-u with a build defers that build, not a fuller one'; Args = @('-u', '-d') + Contains = @('build_win.bat -d') + NotContains = @('build_win.bat -ds') } + @{ Name = '-u on its own suggests the whole build'; Args = @('-u') + Contains = @('build_win.bat -ds') } + @{ Name = 'a dry run only echoes, it never configures'; Args = @('-d') + Contains = @('+ cmake') + NotContains = @('CMake Error', 'Configuring done') } + + 'extra configure arguments' + # --deps-args and --slicer-args are declared "rawstring", so a value that + # looks like an option is allowed through. Plain string options still + # reject one, since there it almost always means a forgotten value. + @{ Name = '--deps-args reaches the deps configure'; Args = @('-d', '--deps-args', 'FOO') + Contains = @('-DCMAKE_BUILD_TYPE=Release FOO') } + @{ Name = '--slicer-args reaches the slicer configure'; Args = @('-s', '--slicer-args', 'BAZ') + Contains = @('BAZ') } + @{ Name = '--deps-args accepts a value that starts with a dash'; Args = @('-d', '--deps-args', '-DFOO') + Contains = @('-DFOO') } + @{ Name = 'a plain string option still rejects a dash-leading value'; Args = @('-d', '--deps-target', '--tests'); ExpectExit = 1 + Contains = @('looks like another option') } + # cmd splits arguments on "=" as well as spaces, so an unquoted -D reaches + # the script as two arguments however it was invoked. + @{ Name = 'an unquoted value containing = is rejected'; Args = @('-d', '--deps-args', 'FOO=BAR'); ExpectExit = 1 + Contains = @('Unknown argument') } + # The environment overrides exist for that reason; nothing tokenises them. + @{ Name = 'ORCA_DEPS_CMAKE_ARGS reaches the deps configure'; Args = @('-d') + Env = @{ ORCA_DEPS_CMAKE_ARGS = '-DFOO=BAR -DBAZ=QUX' } + Contains = @('-DFOO=BAR -DBAZ=QUX') } + @{ Name = 'ORCA_SLICER_CMAKE_ARGS reaches the slicer configure'; Args = @('-s') + Env = @{ ORCA_SLICER_CMAKE_ARGS = '-DWANTED=1' } + Contains = @('-DWANTED=1') } + @{ Name = 'the deps override does not leak into the slicer configure'; Args = @('-s') + Env = @{ ORCA_DEPS_CMAKE_ARGS = '-DDEPSONLY=1' } + NotContains = @('-DDEPSONLY=1') } + @{ Name = 'the help points at the environment for a spaced argument'; Args = @('--help'); DryRun = $false + Contains = @('Neither form supports a value containing an ampersand') } + @{ Name = 'the help lists the environment overrides'; Args = @('--help'); DryRun = $false + Contains = @('Environment:', 'ORCA_DEPS_CMAKE_ARGS', 'ORCA_SLICER_CMAKE_ARGS') } + + 'running the unit tests' + @{ Name = '--tests builds them without running them'; Args = @('-s', '--tests') + Contains = @('-DBUILD_TESTS=ON') + NotContains = @('ctest') } + @{ Name = '--run-tests builds and runs them'; Args = @('-s', '--run-tests') + Contains = @('-DBUILD_TESTS=ON', 'ctest --test-dir "build/tests" -C Release --output-on-failure') } + @{ Name = '--run-tests follows the build type and directory'; Args = @('-s', '--run-tests', '--config', 'debug') + Contains = @('ctest --test-dir "build-dbg/tests" -C Debug') } + @{ Name = 'no tests are run by default'; Args = @('-s') + NotContains = @('ctest') } + + 'failures are reported' + @{ Name = 'a missing cmake is caught and exits non-zero'; Args = @('-d'); ExpectExit = 1 + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + Contains = @('CMake was not found') } + @{ Name = 'packing does not need cmake, only an archiver'; Args = @('-p') + Env = @{ PATH = 'C:\Windows\system32;C:\Windows' } + NotContains = @('CMake was not found') } + # Not a dry run: a cd to a missing drive is a real failure inside a + # parenthesised block, which is where exit /b silently loses its code. + # Without the jump to :die this exits 0 and a failed build reads as a + # successful one. + @{ Name = 'a failure inside a build block reaches the caller'; Args = @('-p', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('Exit code 1.', '####') + NotContains = @('Build completed', 'Try') } + # The retry follows the stage that failed. Offering it for the whole run + # would clean a dependency tree that was not at fault. + @{ Name = 'a failure names a retry scoped to the stage that failed'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('build_win.bat -ds') } + # CMake's own failure here is hundreds of lines about package resolution. + @{ Name = 'a missing dependency tree is named, not left to CMake'; Args = @('-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('Dependencies not found at', 'Build them with build_win.bat -d --deps-dir "Z:\nope"') + NotContains = @('cmake -B', 'Try') } + # Every other suggestion carries the flags that reproduce the run; a bare + # -d would point at the MSVC tree after a clang build. + @{ Name = 'the missing-deps hint names this toolchain'; Args = @('-s', '-l', '-x', '--deps-dir', 'deps/not-built') + DryRun = $false; ExpectExit = 1 + Contains = @('Build them with build_win.bat -d -l -x --deps-dir "deps/not-built"') + NotExists = @('deps/not-built') } + # A dry run configures nothing, so it must not depend on which trees happen + # to exist on the machine running the suite. + @{ Name = 'a dry run does not check for the deps tree'; Args = @('-s', '--deps-dir', 'Z:\nope') + Contains = @('cmake -B "build"') + NotContains = @('Dependencies not found') } + # -d is about to build them, so there is nothing to report yet. + @{ Name = 'building the deps in the same run skips the check'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + NotContains = @('Dependencies not found') } + # A configure fails before any compiler runs, so -v has nothing to show. + @{ Name = 'a configure failure is not offered a verbose rebuild'; Args = @('-d', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('-c discard that tree') + NotContains = @('-v show the failing') } + # A bare --no-configure succeeds on a machine that already has a usable + # build tree, so name one that cannot exist instead. + @{ Name = 'a build failure is'; Args = @('-s', '--no-configure', '--build-dir', 'deps/no-such-tree') + DryRun = $false; ExpectExit = 1 + Contains = @('-v show the failing') + NotExists = @('deps/no-such-tree') } + # --build-dir names the slicer tree, which a deps failure has nothing to do + # with. --deps-dir stays, because that is the tree that failed. + @{ Name = 'a deps retry leaves out the slicer tree'; Args = @('-d', '-s', '--deps-dir', 'Z:\nope', '--build-dir', 'D:\b') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('--build-dir') } + @{ Name = 'an unknown configuration stays a single line'; Args = @('-s', '--config', 'bogus'); ExpectExit = 1 + Contains = @('Unknown configuration') + NotContains = @('####', 'Try') } + @{ Name = 'a bad --jobs value is not framed either'; Args = @('-s', '-j', 'x'); ExpectExit = 1 + Contains = @('Invalid --jobs value') + NotContains = @('####') } + + 'the summary says what to do next' + # Every suggested command carries the flags that reproduce this run. + @{ Name = 'a deps build points at the slicer build'; Args = @('-d', '-l') + Contains = @('Build the slicer build_win.bat -s -l') + NotContains = @('Run it') } + @{ Name = 'a ninja slicer build offers a single target'; Args = @('-s', '-l', '-x') + Contains = @('Rebuild after edits build_win.bat -s -l -x --no-configure', 'Rebuild one target') + NotContains = @('Solution', 'Open in Visual Studio') } + @{ Name = 'a visual studio build names the solution instead'; Args = @('-s') + Contains = @('Solution ', 'Open in Visual Studio build\OrcaSlicer.sln', + 'Rebuild after edits build_win.bat -s --no-configure') + NotContains = @('Rebuild one target') } + @{ Name = 'the configuration and architecture come back'; Args = @('-s', '-l', '-x', '--config', 'debug', '--arch', 'arm64') + Contains = @('build_win.bat -s -l -x --config debug --arch arm64 --no-configure') } + @{ Name = 'the tree overrides come back quoted'; Args = @('-s', '--deps-dir', 'D:\d', '--build-dir', 'D:\b') + Contains = @('--deps-dir "D:\d" --build-dir "D:\b"') } + @{ Name = 'a pinned visual studio release comes back'; Args = @('-s', '--vs', '2022') + Contains = @('build_win.bat -s --vs 2022 --no-configure') } + # Autodetection writes what it found into the same variable, so a detected + # release must not come back as though it had been asked for. + @{ Name = 'a detected release does not'; Args = @('-s') + NotContains = @('--vs') } + @{ Name = 'the binary is named in the build tree it was built in'; Args = @('-s', '-l', '-x') + Contains = @('build-clang\src\Release\orca-slicer.exe') } + @{ Name = 'installing names the installed copy instead'; Args = @('-s', '-l', '-x', '-i') + Contains = @('build-clang\OrcaSlicer\orca-slicer.exe') } + # -i changes where the binary lands, so a rebuild that dropped it would + # leave the path above pointing at a stale copy. + @{ Name = 'the rebuild suggestion keeps -i'; Args = @('-s', '-l', '-x', '-i') + Contains = @('Rebuild after edits build_win.bat -s -l -x -i --no-configure') } + # A deps retry has no install step to repeat. + @{ Name = 'a deps retry drops it'; Args = @('-d', '-s', '-i', '--deps-dir', 'Z:\nope') + DryRun = $false; ExpectExit = 1 + Contains = @('build_win.bat -d --deps-dir "Z:\nope" -c') + NotContains = @('-d -i') } + # Naming a target builds it and its dependencies, not its dependents, so + # the binary on disk is whatever the last full build left there. + @{ Name = 'a single-target build does not claim the whole binary'; Args = @('-s', '-l', '-x', '--slicer-target', 'glad') + Contains = @('Target glad', 'Relink the binary build_win.bat -s -l -x --no-configure') + NotContains = @('Run it', 'orca-slicer.exe', 'Rebuild after edits') } + # The executable has a target of its own, and naming that one does relink. + @{ Name = 'naming the executable target still claims the binary'; Args = @('-s', '-l', '-x', '--slicer-target', 'OrcaSlicer') + Contains = @('Run it', 'orca-slicer.exe', 'Rebuild after edits') + NotContains = @('Target OrcaSlicer', 'Relink the binary') } + @{ Name = '--run-tests offers the ctest line'; Args = @('-s', '-l', '-x', '--run-tests') + Contains = @('Re-run the tests ctest --test-dir build-clang/tests -C Release') } + @{ Name = 'packing names the bundle and how to use it'; Args = @('-p', '-l') + Contains = @('Bundle ', 'Share the bundle') } + # The line supplies its own tree, so the one this run used must not ride + # along and contradict it. + @{ Name = 'the bundle line names one tree, not two'; Args = @('-s', '-p', '-l', '-x', '--deps-dir', 'D:\shared') + Contains = @('then build_win.bat -s -l -x --deps-dir ') + NotContains = @('--deps-dir "D:\shared" --deps-dir') } + @{ Name = 'installing prerequisites suggests the build that follows'; Args = @('-u', '-l') + Contains = @('Restart this shell', 'build_win.bat -ds -l') + NotContains = @('Run it') } + # Everything below the header line is worked out the same way in either + # run, which is why a dry run can cover it. + @{ Name = 'a dry run does not claim a build happened'; Args = @('-s', '-l', '-x') + Contains = @('Dry run: nothing was built.') + NotContains = @('Build completed in') } + # --no-configure is the iteration loop and still gets the block; four + # lines after a rebuild is not enough to be worth suppressing. + @{ Name = '--no-configure still gets the summary'; Args = @('-s', '-l', '-x', '--no-configure') + Contains = @('Next', 'Rebuild after edits') } + + 'pointing at the solution' + # The extension follows the generator, so these two pin the release and a + # build directory that cannot already hold a solution of either kind. + @{ Name = 'the 2026 generator gets the XML solution'; Args = @('-s', '--vs', '2026', '--build-dir', 'D:\tree') + Contains = @('Solution D:\tree\OrcaSlicer.slnx', 'Open in Visual Studio D:\tree\OrcaSlicer.slnx') } + @{ Name = 'the releases before it get the classic one'; Args = @('-s', '--vs', '2022', '--build-dir', 'D:\tree') + Contains = @('Solution D:\tree\OrcaSlicer.sln', 'Open in Visual Studio D:\tree\OrcaSlicer.sln') } + @{ Name = 'a solution already on disk wins over the generator'; Args = @('-s', '--vs', '2026', '--build-dir', $slnDir) + Match = @('^ Solution .*\\OrcaSlicer\.sln$') } + # Extension-agnostic from here: these cases are about the directory, and + # the release is whatever is installed. + @{ Name = 'the VS generator says where the solution is'; Args = @('-s') + Match = @('^ Solution .*\\build\\OrcaSlicer\.slnx?$') } + @{ Name = 'the solution path follows the configuration'; Args = @('-s', '--config', 'debug') + Match = @('^ Solution .*\\build-dbg\\OrcaSlicer\.slnx?$') } + @{ Name = 'the solution line survives an install'; Args = @('-s', '-i') + Contains = @(' Solution ') } + # The path is resolved, not pasted onto the repository root, so it is + # right whether --build-dir came absolute or with forward slashes. + @{ Name = 'a moved build still prints one real path'; Args = @('-s', '--build-dir', 'out/build/x64-clang') + Match = @('^ Solution [A-Za-z]:\\[^/]+\\OrcaSlicer\.slnx?$') } + @{ Name = 'an absolute --build-dir is not glued onto the repo root'; Args = @('-s', '--build-dir', 'D:\tree') + Match = @('^ Solution D:\\tree\\OrcaSlicer\.slnx?$') } +) + +function Invoke-BuildScript { + param([string[]] $Arguments, [hashtable] $Environment) + + $saved = @{} + if ($Environment) { + foreach ($key in $Environment.Keys) { + $saved[$key] = [Environment]::GetEnvironmentVariable($key) + Set-Item -Path "env:$key" -Value $Environment[$key] + } + } + try { + # 'Stop' turns a native command's stderr into a terminating error, and + # a case that exercises a real failure writes to stderr. Let the output + # through and judge the run by its exit code instead. The assignment is + # scoped to this function, so the rest of the suite keeps 'Stop'. + $ErrorActionPreference = 'Continue' + if ($Arguments.Count -eq 0) { + $out = & $Script 2>&1 | Out-String + } else { + $out = & $Script @Arguments 2>&1 | Out-String + } + return [pscustomobject]@{ Output = $out; Exit = $LASTEXITCODE } + } finally { + foreach ($key in $saved.Keys) { + if ($null -eq $saved[$key]) { Remove-Item -Path "env:$key" -ErrorAction SilentlyContinue } + else { Set-Item -Path "env:$key" -Value $saved[$key] } + } + } +} + +$knownFields = @( + 'Name', 'Args', 'ExpectExit', 'DryRun', 'First', 'Env', + 'Contains', 'NotContains', 'Match', 'NotMatch', 'NotExists', 'DateStampedZip' +) + +function Test-Case { + param([hashtable] $Case) + + # Read fields with the indexer, not dot notation. A hashtable exposes its + # own members too, so $Case.Contains returns the Contains *method* whenever + # the case has no key by that name. + $argv = @($Case['Args']) + if (-not $Case.ContainsKey('DryRun') -or $Case['DryRun']) { $argv += '--dry-run' } + + $expect = 0 + if ($Case.ContainsKey('ExpectExit')) { $expect = $Case['ExpectExit'] } + + $started = Get-Date + $result = Invoke-BuildScript -Arguments $argv -Environment $Case['Env'] + $finished = Get-Date + + $problems = @() + + # A misspelled field is silently ignored by the checks below, which + # leaves the case asserting nothing at all and passing. + foreach ($field in $Case.Keys) { + if ($knownFields -notcontains $field) { $problems += "unknown field '$field'" } + } + + if ($result.Exit -ne $expect) { $problems += "exit $($result.Exit), expected $expect" } + foreach ($needle in $Case['Contains']) { + if (-not $result.Output.Contains($needle)) { $problems += "missing '$needle'" } + } + foreach ($needle in $Case['NotContains']) { + if ($result.Output.Contains($needle)) { $problems += "unexpected '$needle'" } + } + $lines = $result.Output -split "`r?`n" + if ($Case['First'] -and $lines[0] -notmatch $Case['First']) { + $problems += "first line was '$($lines[0])'" + } + foreach ($pattern in $Case['Match']) { + if (@($lines | Where-Object { $_ -match $pattern }).Count -eq 0) { + $problems += "no line matching /$pattern/" + } + } + if ($Case['DateStampedZip']) { + # Bound the accepted dates to this invocation so crossing midnight is + # valid without allowing an unrelated past or future date. + $dateStamps = @($started.ToString('yyyyMMdd'), $finished.ToString('yyyyMMdd')) | Select-Object -Unique + $pattern = '_(' + ($dateStamps -join '|') + ')\.zip$' + if (@($lines | Where-Object { $_ -match $pattern }).Count -eq 0) { + $problems += "no line matching /$pattern/" + } + } + foreach ($pattern in $Case['NotMatch']) { + foreach ($line in @($lines | Where-Object { $_ -match $pattern })) { + $problems += "line matches /$pattern/: $line" + } + } + # Output cannot show what a run did not create. + foreach ($path in $Case['NotExists']) { + $full = Join-Path (Split-Path -Parent $Script) $path + if (Test-Path $full) { + $problems += "created '$path'" + } + } + return ,$problems +} + +$pass = 0 +$failed = @() +# Held back so a filtered run does not print headings for groups it skipped. +$heading = $null + +foreach ($case in $cases) { + if ($case -is [string]) { + $heading = $case + continue + } + if ($Name -and $case['Name'] -notmatch $Name) { continue } + if ($heading) { + Write-Host '' + Write-Host $heading -ForegroundColor Cyan + $heading = $null + } + + $problems = Test-Case -Case $case + if ($problems.Count -eq 0) { + $pass++ + Write-Host (' ok ' + $case['Name']) + } else { + $failed += $case['Name'] + Write-Host (' FAIL ' + $case['Name']) -ForegroundColor Red + foreach ($problem in $problems) { Write-Host (' ' + $problem) -ForegroundColor Red } + Write-Host (' args: ' + (@($case['Args']) -join ' ')) + } +} + +Remove-Item -Recurse -Force $fixtures -ErrorAction SilentlyContinue + +Write-Host '' +# A pattern that matched nothing has proved nothing, so do not report it as +# a clean run. +if ($Name -and $pass -eq 0 -and $failed.Count -eq 0) { + Write-Host "no case matched /$Name/" -ForegroundColor Red + exit 1 +} +Write-Host "$pass passed, $($failed.Count) failed" +if ($failed.Count -gt 0) { + foreach ($name in $failed) { Write-Host " failed: $name" -ForegroundColor Red } + exit 1 +} +exit 0 diff --git a/scripts/test_moonraker_lane_data.py b/scripts/test_moonraker_lane_data.py index 44a0a7e30e..16ed4924e0 100644 --- a/scripts/test_moonraker_lane_data.py +++ b/scripts/test_moonraker_lane_data.py @@ -5,10 +5,15 @@ Inserts/deletes/modifies random lane data in Moonraker database, then reads back and displays with colored output. """ -import requests +try: + import requests +except ImportError: + requests = None # only needed for live-printer operations, not --check-ofl-map import random import argparse import json +import os +import re import time import sys @@ -16,6 +21,11 @@ import sys DEFAULT_HOST = "192.168.88.9" DEFAULT_PORT = 7125 NAMESPACE = "lane_data" + +# Repo-relative paths for the offline generic-map check +REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +MOONRAKER_AGENT_CPP = os.path.join(REPO_ROOT, "src", "slic3r", "Utils", "MoonrakerPrinterAgent.cpp") +OFL_FILAMENT_DIR = os.path.join(REPO_ROOT, "resources", "profiles", "OrcaFilamentLibrary", "filament") LANE_KEYS = [f"lane{i}" for i in range(1, 9)] # lane1-lane8 MATERIALS = ["PLA", "ABS", "PETG", "ASA", "ASA Sparkle", "TPU", ""] @@ -30,6 +40,95 @@ MATERIAL_TEMPS = { "": {"nozzle": None, "bed": None}, } +def parse_cpp_type_map(): + """Extract the normalized-type -> OFL generic family table from MoonrakerPrinterAgent.cpp. + + Reads MoonrakerPrinterAgent::map_filament_type_to_generic_id's type_to_ofl_family + initializer so the check tracks the C++ normalization without a duplicated list. + """ + with open(MOONRAKER_AGENT_CPP, encoding="utf-8") as f: + src = f.read() + m = re.search(r"type_to_ofl_family\s*=\s*\{(.*?)\n\s*\};", src, re.DOTALL) + if not m: + raise RuntimeError(f"type_to_ofl_family table not found in {MOONRAKER_AGENT_CPP}") + pairs = re.findall(r'\{\s*"([^"]+)"\s*,\s*"([^"]+)"\s*\}', m.group(1)) + if not pairs: + raise RuntimeError("type_to_ofl_family table parsed empty") + return dict(pairs) + +def load_ofl_presets(): + """Map preset name -> parsed JSON for every OrcaFilamentLibrary filament profile.""" + presets = {} + for root, _dirs, files in os.walk(OFL_FILAMENT_DIR): + for fn in files: + if not fn.endswith(".json"): + continue + try: + with open(os.path.join(root, fn), encoding="utf-8") as f: + data = json.load(f) + except (OSError, ValueError): + continue + name = data.get("name") + if isinstance(name, str) and name: + presets[name] = data + return presets + +def resolve_ofl_filament_id(presets, name): + """Follow the inherits chain (within OFL) until a filament_id is declared.""" + seen = set() + while name and name not in seen: + seen.add(name) + preset = presets.get(name) + if preset is None: + return None + fid = preset.get("filament_id") + if fid: + return fid + name = preset.get("inherits") + return None + +def check_ofl_generic_map(): + """Assert every material type the C++ normalization handles resolves to a shipped + OrcaFilamentLibrary generic preset carrying a filament_id. + + Expectations are derived from the shipped profiles, not pinned id literals, so the + check stays valid across filament_id re-mints. + """ + print("Checking C++ generic-type map against shipped OrcaFilamentLibrary presets...") + try: + type_map = parse_cpp_type_map() + except (OSError, RuntimeError) as e: + print(f" FAIL: {e}") + return False + presets = load_ofl_presets() + if not presets: + print(f" FAIL: no OFL filament profiles found under {OFL_FILAMENT_DIR}") + return False + errors = [] + for family in sorted(set(type_map.values())): + preset_name = f"Generic {family} @System" + if preset_name not in presets: + errors.append(f"{preset_name}: no such OFL preset") + continue + if str(presets[preset_name].get("instantiation", "")).lower() != "true": + errors.append(f"{preset_name}: not instantiated — the C++ runtime lookup " + f"only sees presets loaded into the PresetBundle") + continue + fid = resolve_ofl_filament_id(presets, preset_name) + if not fid: + errors.append(f"{preset_name}: no filament_id resolvable through inherits") + continue + aliases = ", ".join(sorted(t for t, fam in type_map.items() if fam == family)) + print(f" {fid:10s} {preset_name:32s} <- {aliases}") + if errors: + for e in errors: + print(f" FAIL: {e}") + print(f"OFL generic map check FAILED ({len(errors)} error(s))") + return False + print(f"OFL generic map check passed: {len(type_map)} type aliases, " + f"{len(set(type_map.values()))} OFL generic presets\n") + return True + def test_connection(host, port, api_key=None, verbose=False): """Test basic connectivity to Moonraker.""" url = f"http://{host}:{port}/server/info" @@ -404,11 +503,25 @@ def main(): help="Only read and display current lane data") parser.add_argument("--load", metavar="FILE", help="Load lane data from JSON file and overwrite printer lanes") + parser.add_argument("--check-ofl-map", action="store_true", + help="Only run the offline check that the C++ generic-type map " + "resolves against shipped OrcaFilamentLibrary presets") parser.add_argument("--verbose", "-v", action="store_true", help="Verbose output for debugging") args = parser.parse_args() + # Offline check first: the C++ type normalization must resolve against shipped + # OFL presets (no printer needed). + if not check_ofl_generic_map(): + return 1 + if args.check_ofl_map: + return 0 + + if requests is None: + print("The 'requests' module is required for live printer operations (pip install requests).") + return 1 + print(f"\nConnecting to Moonraker at {args.host}:{args.port}...") # First test basic connectivity diff --git a/scripts/tests/__init__.py b/scripts/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/scripts/tests/test_filament_id.py b/scripts/tests/test_filament_id.py new file mode 100644 index 0000000000..001763fca9 --- /dev/null +++ b/scripts/tests/test_filament_id.py @@ -0,0 +1,1694 @@ +#!/usr/bin/env python3 +"""Tests for scripts/orca_profile_tool.py (stdlib unittest, no external deps). + +Run from the repo root: python -m unittest discover -s scripts/tests -v +""" + +import contextlib +import io +import json +import os +import re +import shutil +import sys +import tempfile +import unittest +import uuid + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +import orca_profile_tool as afi # noqa: E402 +import update_bambu_filament_ids as ubfi # noqa: E402 + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") + +OFL = "OrcaFilamentLibrary" + + +def load_json_file(path): + with open(path, encoding="utf-8") as f: + return json.load(f) + + +# --------------------------------------------------------------------------- +# helpers: synthetic profile trees +# --------------------------------------------------------------------------- + +def preset(name, filament_id=None, inherits=None, instantiation=True, + compatible_printers=None, filament_vendor=None, filament_type=None): + data = {"type": "filament", "name": name} + if inherits is not None: + data["inherits"] = inherits + if filament_id is not None: + data["filament_id"] = filament_id + if filament_vendor is not None: + data["filament_vendor"] = ( + [filament_vendor] if isinstance(filament_vendor, str) else filament_vendor) + if filament_type is not None: + data["filament_type"] = ( + [filament_type] if isinstance(filament_type, str) else filament_type) + data["instantiation"] = "true" if instantiation else "false" + if compatible_printers is not None: + data["compatible_printers"] = compatible_printers + return data + + +class SyntheticTree: + """A throwaway resources/profiles-shaped directory.""" + + def __init__(self): + self.dir = tempfile.mkdtemp(prefix="filament_id_test_") + self.profiles = os.path.join(self.dir, "profiles") + os.makedirs(self.profiles) + + def cleanup(self): + shutil.rmtree(self.dir, ignore_errors=True) + + def preset_path(self, vendor, name): + return os.path.join(self.profiles, vendor, "filament", name + ".json") + + def add_vendor(self, vendor, presets): + vendor_dir = os.path.join(self.profiles, vendor, "filament") + os.makedirs(vendor_dir, exist_ok=True) + index = {"name": vendor, "version": "01.00.00.00", "filament_list": []} + for data in presets: + fname = data["name"] + ".json" + with open(os.path.join(vendor_dir, fname), "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + index["filament_list"].append( + {"name": data["name"], "sub_path": f"filament/{fname}"}) + with open(os.path.join(self.profiles, vendor + ".json"), "w", + encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def add_to_index(self, vendor, name): + idx_path = os.path.join(self.profiles, vendor + ".json") + with open(idx_path, encoding="utf-8") as f: + index = json.load(f) + index["filament_list"].append( + {"name": name, "sub_path": f"filament/{name}.json"}) + with open(idx_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def write_preset(self, vendor, data, register=True): + path = self.preset_path(vendor, data["name"]) + with open(path, "w", encoding="utf-8") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + if register: + self.add_to_index(vendor, data["name"]) + + def set_sub_path(self, vendor, name, sub_path): + """Rewrite one index entry's sub_path (the file itself does not move).""" + idx_path = os.path.join(self.profiles, vendor + ".json") + with open(idx_path, encoding="utf-8") as f: + index = json.load(f) + for entry in index["filament_list"]: + if entry["name"] == name: + entry["sub_path"] = sub_path + with open(idx_path, "w", encoding="utf-8") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def bytes_map(self): + """{relative path -> file bytes} over every .json in the tree.""" + raw = {} + for root, dirs, files in os.walk(self.profiles): + dirs.sort() + for name in sorted(files): + if not name.endswith(".json"): + continue + path = os.path.join(root, name) + with open(path, "rb") as f: + raw[os.path.relpath(path, self.profiles)] = f.read() + return raw + + # -- pipeline wrappers --------------------------------------------------- + + def check(self, map_path=None): + buf = io.StringIO() + kwargs = {} if map_path is None else {"map_path": map_path} + with contextlib.redirect_stdout(buf): + errors = afi.check_filament_ids(self.profiles, **kwargs) + return errors, buf.getvalue() + + # assign() and remint() are the same one pass over the tree — every filament + # ends up with the id its own triple mints, whether that means inserting a + # missing key or rewriting a non-conformant one. Both names are kept because + # they read differently at the call sites. + def assign(self, vendors=None, dry_run=False): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) + return changed, errors, buf.getvalue() + + def remint(self, vendors, dry_run=False): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) + return changed, errors, buf.getvalue() + + def cli(self, *argv): + """Run main() against this tree, capturing stdout.""" + flags = [*argv, "--profiles", self.profiles] + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.main(flags) + return rc, buf.getvalue() + + +def make_clean_tree(apla_id="AX01", generic_id="OGFL99"): + """Baseline tree: OFL base+generic, a vendor filament, a clean tuned generic. + + apla_id/generic_id default to arbitrary non-OF placeholders since most tests + only need "already assigned, don't touch" and never run the checks. + TestAssign and the check tests pass real OF-format ids instead + (OfCleanTreeCase). + """ + t = SyntheticTree() + t.add_vendor(OFL, [ + preset("Generic PLA @base", filament_id=generic_id, instantiation=False, + filament_vendor="Generic", filament_type="PLA"), + preset("Generic PLA @System", inherits="Generic PLA @base", + compatible_printers=[]), + ]) + t.add_vendor("VendorA", [ + preset("APLA @base", filament_id=apla_id, instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), + preset("APLA @P1", inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + # Correctly tuned OFL generic: keeps the OFL base name, claims a printer. + preset("Generic PLA @P1", inherits="Generic PLA @System", + compatible_printers=["P1 0.4 nozzle"]), + ]) + return t + + +class SyntheticTreeCase(unittest.TestCase): + def setUp(self): + self.t = make_clean_tree() + self.addCleanup(self.t.cleanup) + + +class OfCleanTreeCase(unittest.TestCase): + """Like SyntheticTreeCase, but the baseline filament/generic already carry + real OF-format ids (check 1 rejects "AX01"/"OGFL99"), so an + otherwise-untouched tree passes check_filament_ids. Tests that specifically + need a non-OF baseline to remint (TestRemint) keep using SyntheticTreeCase + instead. + """ + def setUp(self): + self.t = make_clean_tree( + apla_id=afi.generate_filament_id("AVendor", "PLA", "APLA"), + generic_id=afi.generate_filament_id("Generic", "PLA", "Generic PLA")) + self.addCleanup(self.t.cleanup) + + +# --------------------------------------------------------------------------- +# mint +# --------------------------------------------------------------------------- + +class TestMint(unittest.TestCase): + def test_namespace_literal(self): + # Frozen: derived from the setting_id namespace; baked into every shipped id. + self.assertEqual(afi.FILAMENT_ID_NAMESPACE, + uuid.UUID("c4d3ff49-4c32-5534-a3e3-00894157ab97")) + + def test_known_vector(self): + # Hardcoded, independently computed vectors: freeze prefix, input string + # layout ("filament_product///") and base62 tail. + self.assertEqual(afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA"), + "OF5CgdDq") + self.assertEqual(afi.generate_filament_id("Generic", "PLA", "Generic PLA"), + "OFDSrzZ8") + + def test_determinism_and_format(self): + for triple in [("Polymaker", "PLA", "PolyLite PLA"), + ("Creality", "PLA", "CR PLA"), + ("Generic", "ABS", "Generic ABS"), + ("拓竹", "PLA", "拓竹 PLA")]: # unicode components + a = afi.generate_filament_id(*triple) + b = afi.generate_filament_id(*triple) + self.assertEqual(a, b) + self.assertRegex(a, r"^OF[0-9A-Za-z]{6}$") + self.assertEqual(len(a), 8) + + def test_every_triple_component_changes_the_id(self): + base = afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA") + self.assertNotEqual(base, afi.generate_filament_id("Other", "PLA", "PolyLite PLA")) + self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PETG", "PolyLite PLA")) + self.assertNotEqual(base, afi.generate_filament_id("Polymaker", "PLA", "PolyLite PLA Pro")) + + +class TestBaseName(unittest.TestCase): + def test_filament_name_derivation(self): + cases = [ + ("X @base", "X"), + ("Afinia PLA@HS", "Afinia PLA"), + ("PolyTerra PLA", "PolyTerra PLA"), + ("HATCHBOX PLA @Qidi X-Plus 4 0.6 nozzle", "HATCHBOX PLA"), + ("A @B @C", "A"), # first @ wins + ("Filár PLA 拓竹 @0.4 nozzle", "Filár PLA 拓竹"), + ] + for name, filament_name in cases: + self.assertEqual(afi.base_name(name), filament_name, msg=name) + + +# --------------------------------------------------------------------------- +# vendor discovery +# --------------------------------------------------------------------------- + +class TestVendorDiscovery(unittest.TestCase): + def test_a_bundle_is_a_subdir_with_a_matching_index(self): + # Neither half alone makes a bundle: resources/profiles tracks a "user" + # directory with no user.json, and an index without its directory is a + # leftover. Both are skipped, tree-wide. + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", []) + os.makedirs(os.path.join(t.profiles, "user", "filament")) + with open(os.path.join(t.profiles, "Orphan.json"), "w", + encoding="utf-8") as f: + json.dump({"name": "Orphan", "filament_list": []}, f) + self.assertEqual(afi.list_vendor_names(t.profiles), ["VendorA"]) + self.assertEqual(sorted(afi.analyze_tree(t.profiles)["vendors"]), + ["VendorA"]) + + +# --------------------------------------------------------------------------- +# resolver (loader-faithful semantics) +# --------------------------------------------------------------------------- + +class TestResolver(unittest.TestCase): + @staticmethod + def rec(name, filament_id=None, inherits=None): + return {"name": name, "filament_id": filament_id, "inherits": inherits} + + def resolve(self, name, vendor_recs, ofl_recs, **kw): + fmap = {r["name"]: r for r in vendor_recs} + omap = {r["name"]: r for r in ofl_recs} + return afi.resolve_filament_id(name, fmap, omap, **kw) + + def test_own_id(self): + fid, src, entry = self.resolve("A", [self.rec("A", "ID1")], []) + self.assertEqual((fid, src, entry), ("ID1", "own", None)) + + def test_inherited_within_vendor(self): + fid, src, entry = self.resolve( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="C"), + self.rec("C", "ID3")], []) + self.assertEqual((fid, src, entry), ("ID3", "inherited", None)) + + def test_ofl_fallback(self): + # Vendor preset inherits a name that only exists in the OFL map. + fid, src, entry = self.resolve( + "A", [self.rec("A", inherits="Generic PLA @System")], + [self.rec("Generic PLA @System", inherits="fdm_pla"), + self.rec("fdm_pla", "OGFL99")]) + self.assertEqual(fid, "OGFL99") + self.assertEqual(entry, "Generic PLA @System") + + def test_ofl_stays_in_ofl(self): + # Once a chain enters OFL it stays there: a vendor file sharing an + # OFL-internal hop's name must not shadow it. + fid, _src, entry = self.resolve( + "A", + [self.rec("A", inherits="ofl_entry"), self.rec("fdm_pla", "WRONG")], + [self.rec("ofl_entry", inherits="fdm_pla"), self.rec("fdm_pla", "RIGHT")]) + self.assertEqual(fid, "RIGHT") + self.assertEqual(entry, "ofl_entry") + + def test_dead_end_retries_parent_in_ofl(self): + # The vendor chain dead-ends id-less on a parent that also exists in + # OFL: the loader re-consults the OFL map for that direct parent. + fid, _src, entry = self.resolve( + "A", [self.rec("A", inherits="shared"), self.rec("shared")], + [self.rec("shared", "OFLID1")]) + self.assertEqual(fid, "OFLID1") + self.assertEqual(entry, "shared") + + def test_cycle(self): + fid, src, _e = self.resolve( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="A")], []) + self.assertEqual((fid, src), (None, "cycle")) + + def test_dangling_parent(self): + fid, src, _e = self.resolve("A", [self.rec("A", inherits="nope")], []) + self.assertEqual((fid, src), (None, "dangling")) + + def test_missing_id(self): + fid, src, _e = self.resolve("A", [self.rec("A")], []) + self.assertEqual((fid, src), (None, "missing")) + + +class TestTripleResolution(unittest.TestCase): + @staticmethod + def rec(name, inherits=None, filament_vendor=None, filament_type=None): + return {"name": name, "inherits": inherits, + "filament_vendor": filament_vendor, "filament_type": filament_type} + + def field(self, name, vendor_recs, ofl_recs, field="filament_vendor"): + fmap = {r["name"]: r for r in vendor_recs} + omap = {r["name"]: r for r in ofl_recs} + return afi.resolve_filament_field(name, field, fmap, omap) + + def test_own_value_first_element_of_list(self): + got = self.field("A", [self.rec("A", filament_vendor=["Poly", "Ignored"])], []) + self.assertEqual(got, "Poly") + + def test_plain_string_value_tolerated(self): + got = self.field("A", [self.rec("A", filament_vendor="Poly")], []) + self.assertEqual(got, "Poly") + + def test_inherited_within_vendor(self): + got = self.field( + "A", [self.rec("A", inherits="B"), self.rec("B", inherits="C"), + self.rec("C", filament_vendor=["Poly"])], []) + self.assertEqual(got, "Poly") + + def test_empty_list_keeps_walking(self): + got = self.field( + "A", [self.rec("A", inherits="B", filament_vendor=[]), + self.rec("B", filament_vendor=["Poly"])], []) + self.assertEqual(got, "Poly") + + def test_ofl_fallback(self): + got = self.field( + "A", [self.rec("A", inherits="Generic PLA @System")], + [self.rec("Generic PLA @System", inherits="fdm_pla"), + self.rec("fdm_pla", filament_vendor=["Generic"])]) + self.assertEqual(got, "Generic") + + def test_ofl_stays_in_ofl(self): + got = self.field( + "A", + [self.rec("A", inherits="ofl_entry"), + self.rec("fdm_pla", filament_vendor=["WRONG"])], + [self.rec("ofl_entry", inherits="fdm_pla"), + self.rec("fdm_pla", filament_vendor=["RIGHT"])]) + self.assertEqual(got, "RIGHT") + + def test_dead_end_retries_parent_in_ofl(self): + got = self.field( + "A", [self.rec("A", inherits="shared"), self.rec("shared")], + [self.rec("shared", filament_vendor=["Poly"])]) + self.assertEqual(got, "Poly") + + def test_missing_is_empty(self): + self.assertEqual(self.field("A", [self.rec("A")], []), "") + self.assertEqual(self.field("A", [self.rec("A", inherits="nope")], []), "") + + def test_resolve_triple(self): + recs = [self.rec("MyPLA @base", filament_vendor=["MyVendor"], + filament_type=["PLA"]), + self.rec("MyPLA @P1", inherits="MyPLA @base")] + fmap = {r["name"]: r for r in recs} + self.assertEqual(afi.resolve_triple("MyPLA @P1", fmap, {}), + ("MyVendor", "PLA", "MyPLA")) + + +# --------------------------------------------------------------------------- +# checks on synthetic trees +# --------------------------------------------------------------------------- + +class TestChecks(OfCleanTreeCase): + def test_clean_tree_is_silent(self): + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + self.assertNotIn("[ERROR]", out) + self.assertNotIn("[WARNING]", out) + + def test_check1_unknown_non_of_id(self): + self.t.write_preset("VendorA", preset("BPLA @base", filament_id="BOGUS_9", + instantiation=False, + filament_vendor="BV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("BPLA @P1", inherits="BPLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn('is not a minted "OF" id', out) + self.assertIn("BOGUS_9", out) + + def test_check2_triple_change_needs_a_remint(self): + # Correcting a triple changes the product's identity: the old id is no + # longer its mint, reported on the root and again under the variant + # inheriting it, until generate-id re-mints it. + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("APLA @base", filament_id=apla_id, + instantiation=False, + filament_vendor="AVendor", + filament_type="PETG"), + register=False) + errors, out = self.t.check() + self.assertEqual(errors, 2, out) + self.assertIn("does not match the mint of its triple", out) + self.assertIn('"APLA @P1" (VendorA/filament/APLA @P1.json) inherits filament_id', out) + _changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check2_of_id_must_match_triple_mint(self): + self.t.write_preset("VendorA", preset("BNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="BV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("BNEW @P1", inherits="BNEW @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("does not match the mint of its triple", out) + self.assertIn(afi.generate_filament_id("BV", "PLA", "BNEW"), out) + + def test_check2_inherited_id_must_be_the_mint_of_own_triple(self): + # A preset of another filament inheriting APLA's root takes APLA's id, + # which is not the mint of ITS triple (AVendor/PLA/Tuned PLA). + self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="APLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn('"Tuned PLA @P1" (VendorA/filament/Tuned PLA @P1.json) inherits ' + 'filament_id "%s"' % afi.generate_filament_id("AVendor", "PLA", "APLA"), + out) + self.assertIn('mints "%s"' % afi.generate_filament_id("AVendor", "PLA", "Tuned PLA"), + out) + + def test_check2_lists_every_preset_inheriting_a_wrong_id(self): + # A wrong declaration is reported under every preset inheriting it, its + # own product's variant and another product alike: each one's effective + # id is not the mint of its own triple, and each is listed. Nothing is + # folded into the declarer's error. + self.t.write_preset("VendorA", preset("DNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="DV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("DNEW @P1", inherits="DNEW @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Other DNEW @P1", inherits="DNEW @base", + compatible_printers=["P1 0.4 nozzle"])) + errors, out = self.t.check() + self.assertIn("does not match the mint of its triple", out) + self.assertIn('"DNEW @P1" (VendorA/filament/DNEW @P1.json) inherits filament_id', out) + self.assertIn('"Other DNEW @P1" (VendorA/filament/Other DNEW @P1.json) inherits ' + 'filament_id', out) + # The declaration (2a), and both presets inheriting it (2b). + self.assertEqual(errors, 3, out) + + def test_check2_reports_an_inherited_mismatch_even_when_its_own_product_misdeclares_the_id(self): + # "Tuned PLA @P1" inherits APLA's root, so it carries APLA's id: wrong + # for its own product however the declarations around it are fixed. + # That "Tuned PLA @base" — its own product — misdeclares that same id + # is a second error, not a reason to leave the first unreported. + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("Tuned PLA @base", filament_id=apla_id, + instantiation=False, + filament_vendor="AVendor", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("Tuned PLA @P1", inherits="APLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertIn('"Tuned PLA @base" (VendorA/filament/Tuned PLA @base.json) does ' + 'not match the mint of its triple', out) + self.assertIn('"Tuned PLA @P1" (VendorA/filament/Tuned PLA @P1.json) inherits ' + 'filament_id', out) + # The declaration (2a) and the inherited id (2b): two distinct errors, + # nothing folded away. + self.assertEqual(errors, 2, out) + + def test_check2_reports_a_collision_between_two_products(self): + # Two products whose triples mint one id is a base62 collision. There + # is no salted or hand-picked second id to fall back on: the check + # names both products, and the remedy is a rename so the triples differ. + collide = {("V", "PLA", "X"), ("W", "ABS", "Y")} + real = afi.generate_filament_id + + def colliding(vendor, ftype, name): + return "OFcolid0" if (vendor, ftype, name) in collide else real(vendor, ftype, name) + + afi.generate_filament_id = colliding + self.addCleanup(setattr, afi, "generate_filament_id", real) + for vendor, ftype, name in sorted(collide): + self.t.write_preset("VendorA", preset(f"{name} @base", filament_id="OFcolid0", + instantiation=False, + filament_vendor=vendor, + filament_type=ftype)) + self.t.write_preset("VendorA", preset(f"{name} @P1", inherits=f"{name} @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertIn("collision", out) + self.assertIn("V/PLA/X", out) + self.assertIn("W/ABS/Y", out) + # Each declaration is the mint of its own triple, so the collision is + # the only error — no product is pushed off its id. + self.assertNotIn("does not match the mint", out) + self.assertNotIn("inherits filament_id", out) + self.assertEqual(errors, 1, out) + + def test_check2_renamed_tuned_generic_is_an_identity_error(self): + # Riding the OFL generic under another base name: same rule, same error. + self.t.write_preset("VendorA", preset("Tuned PLA @P1", + inherits="Generic PLA @System", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("Tuned PLA @P1", out) + self.assertIn("inherits filament_id", out) + + def test_check2_own_key_on_an_instantiated_preset_is_fine(self): + # Where the id comes from is irrelevant: a variant may carry the key. + apla_id = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("APLA @P1", filament_id=apla_id, + inherits="APLA @base", + compatible_printers=["P1 0.4 nozzle"]), + register=False) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check2_inheriting_a_real_filament_of_another_product_is_fine(self): + # A branded product may inherit the OFL generic (an instantiated + # preset) for its settings; it declares its own triple's id. + fid = afi.generate_filament_id("BV", "PLA", "Branded PLA") + self.t.write_preset("VendorA", preset("Branded PLA @P1", filament_id=fid, + inherits="Generic PLA @System", + filament_vendor="BV", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + # With a wrong key it is a plain mint mismatch: the parent plays no + # part in the verdict. + drifted = afi.generate_filament_id("AVendor", "PLA", "APLA") + self.t.write_preset("VendorA", preset("Branded PLA @P1", filament_id=drifted, + inherits="Generic PLA @System", + filament_vendor="BV", + compatible_printers=["P1"]), + register=False) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("does not match the mint of its triple", out) + + def test_check1_an_id_another_system_composed_is_not_a_mint(self): + # Nothing is reserved because nothing is exempt: an id some other system + # composes for its own purposes - Bambu's catalog, a Qidi box, the dialog + # that creates a user filament - is simply not the mint of a triple, and + # check 1 rejects it for that and nothing else. + for fid in ("GFX99", "QD_X_PLA", "P1a2b3c4", "null"): + with self.subTest(fid=fid): + name = f"R{fid} @base" + self.t.write_preset("VendorA", preset(name, filament_id=fid, + instantiation=False, + filament_vendor="RV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset(f"R{fid} @P1", inherits=name, + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn(f'filament_id "{fid}"', out) + self.assertIn('is not a minted "OF" id', out) + + def test_check2c_unresolvable_instantiated_filament(self): + self.t.write_preset("VendorA", preset("DNEW @P1", compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn("resolves no filament_id", out) + self.assertIn("hard load error", out) + + +class TestCheck3(OfCleanTreeCase): + def test_3a_empty_vendor_is_hard_error(self): + fid = afi.generate_filament_id("", "PLA", "NVPLA") + self.t.write_preset("VendorA", preset("NVPLA @base", filament_id=fid, + instantiation=False, + filament_type="PLA")) + self.t.write_preset("VendorA", preset("NVPLA @P1", inherits="NVPLA @base", + compatible_printers=["P1"])) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("resolves empty filament_vendor", out) + self.assertIn('filament_vendor "Generic"', out) + + def test_3b_divergent_filament_triples(self): + id1 = afi.generate_filament_id("MV", "PLA", "MPLA") + id2 = afi.generate_filament_id("MV", "PETG", "MPLA") + self.t.write_preset("VendorA", preset("MPLA @base1", filament_id=id1, + instantiation=False, + filament_vendor="MV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("MPLA @base2", filament_id=id2, + instantiation=False, + filament_vendor="MV", + filament_type="PETG")) + errors, out = self.t.check() + self.assertEqual(errors, 1, out) + self.assertIn("divergent triples", out) + self.assertIn("MV/PLA/MPLA", out) + self.assertIn("MV/PETG/MPLA", out) + + def test_3_cross_bundle_divergence_is_warning_only(self): + fid = afi.generate_filament_id("BV", "PETG", "APLA") + self.t.add_vendor("VendorB", [ + preset("APLA @base", filament_id=fid, instantiation=False, + filament_vendor="BV", filament_type="PETG"), + preset("APLA @PB", inherits="APLA @base", + compatible_printers=["PB 0.4 nozzle"]), + ]) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + self.assertIn("[WARNING]", out) + self.assertIn("across bundles", out) + self.assertIn('"APLA"', out) + + +class TestCheck4(OfCleanTreeCase): + def _write_map(self, rows): + path = os.path.join(self.t.dir, "bambu_filament_ids.json") + ubfi.write_map(path, rows, "testcommit", "2026-09-04") + return path + + def _write_raw_map(self, payload): + """Write a map write_map() would never produce (hand-edited or mis-generated).""" + path = os.path.join(self.t.dir, "bambu_filament_ids.json") + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(payload, f, indent=2, ensure_ascii=False, sort_keys=True) + return path + + def test_row_triple_must_match_tree(self): + fid = afi.generate_filament_id("V", "PLA", "Foo") + self.t.write_preset("VendorA", preset("Foo @base", filament_id=fid, + instantiation=False, + filament_vendor="V", filament_type="PLA")) + self.t.write_preset("VendorA", preset("Foo @P1", inherits="Foo @base", + compatible_printers=["P1"])) + map_path = self._write_map( + {fid: {"bambu_id": "GFZ00", "vendor": "V", "type": "PLA", "name": "Bar"}}) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("regenerate the map", out) + + def test_non_of_map_key_is_an_error(self): + # The map is keyed by OUR ids; a Bambu id in the key column means the + # map was generated or hand-edited the wrong way round. + map_path = self._write_map({ + "GFB00": {"bambu_id": "GFB00", "vendor": "V", "type": "PLA", + "name": "Foo"}}) + errors, out = self.t.check(map_path) + self.assertEqual(errors, 1, out) + self.assertIn('"GFB00" is not a minted "OF" id', out) + + def test_duplicate_bambu_id_is_an_error(self): + map_path = self._write_map({ + "OFaaaaaa": {"bambu_id": "GFZ00", "vendor": "V", "type": "PLA", "name": "Foo"}, + "OFbbbbbb": {"bambu_id": "GFZ00", "vendor": "V", "type": "PETG", "name": "Bar"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("GFZ00", out) + + def test_row_for_unshipped_product_is_fine(self): + map_path = self._write_map({ + "OFcccccc": {"bambu_id": "GFZ99", "vendor": "Nobody", "type": "PLA", + "name": "Ships Nothing"}, + }) + errors, out = self.t.check(map_path) + self.assertEqual(errors, 0, out) + + def test_non_object_top_level_is_a_clean_error(self): + # A hand-edited map that is a list (or any non-object) must report the map, + # not raise AttributeError out of the check. + map_path = self._write_raw_map([{"bambu_id": "GFZ00"}]) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn("does not parse", out) + self.assertIn("regenerate the map", out) + + def test_empty_filaments_section_is_an_error(self): + # What a regeneration against the wrong --bambustudio-dir writes: a well-formed + # header with zero rows. At runtime every translation silently becomes identity. + map_path = self._write_map({}) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('no "filaments" rows', out) + + def test_absent_filaments_section_is_an_error(self): + map_path = self._write_raw_map({ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "testcommit", + "generated": "2026-09-04", + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('no "filaments" rows', out) + + def test_row_without_bambu_id_is_an_error(self): + # Two such rows used to collide on None and be reported as a duplicate id. + map_path = self._write_map({ + "OFaaaaaa": {"vendor": "V", "type": "PLA", "name": "Foo"}, + "OFbbbbbb": {"vendor": "V", "type": "PETG", "name": "Bar"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('"OFaaaaaa" declares no "bambu_id"', out) + self.assertIn('"OFbbbbbb" declares no "bambu_id"', out) + self.assertNotIn("mapped by both", out) + + def test_empty_bambu_id_is_an_error(self): + # "" would land in the runtime map and translate an empty tray id into a filament. + map_path = self._write_map({ + "OFaaaaaa": {"bambu_id": "", "vendor": "V", "type": "PLA", "name": "Foo"}, + }) + errors, out = self.t.check(map_path) + self.assertGreater(errors, 0) + self.assertIn('declares no "bambu_id"', out) + + +# --------------------------------------------------------------------------- +# --generate: one rule for inserts and rewrites alike +# --------------------------------------------------------------------------- + +class TestAssign(OfCleanTreeCase): + def test_noop_on_fully_idded_tree(self): + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + self.assertIn("filament_ids inserted : 0", out) + self.assertIn("filament_ids re-minted : 0", out) + + def test_mints_into_filament_root_and_rootless_member(self): + self.t.write_preset("VendorA", preset("FNEW @base", instantiation=False, + filament_vendor="FV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("FNEW @P1", inherits="FNEW @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("FNEW @P2", inherits="FNEW @base", + compatible_printers=["P2"])) + self.t.write_preset("VendorA", preset("GNEW @P1", compatible_printers=["P1"], + filament_vendor="GV", + filament_type="PETG")) + changed, errors, _out = self.t.assign() + self.assertEqual(errors, 0) + self.assertEqual(changed, 2) # one root + one root-less member + root = load_json_file(self.t.preset_path("VendorA", "FNEW @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("FV", "PLA", "FNEW")) + member = load_json_file(self.t.preset_path("VendorA", "GNEW @P1")) + self.assertEqual(member["filament_id"], + afi.generate_filament_id("GV", "PETG", "GNEW")) + # variants themselves never get the key + child = load_json_file(self.t.preset_path("VendorA", "FNEW @P1")) + self.assertNotIn("filament_id", child) + # idempotent: second run is a no-op + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + self.assertIn("filament_ids inserted : 0", out) + + def test_refuses_filament_with_incomplete_triple(self): + self.t.write_preset("VendorA", preset("ENEW @base", instantiation=False)) + self.t.write_preset("VendorA", preset("ENEW @P1", inherits="ENEW @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("resolves empty filament_vendor and filament_type", out) + self.assertIn("mint key needs both", out) + + def test_refuses_to_re_mint_a_declaration_with_an_incomplete_triple(self): + # The rewrite half of the same guard: a declared id that is not its + # triple's mint still cannot be re-derived without a filament_vendor. + self.t.write_preset("VendorA", preset("QNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_type="PLA")) + self.t.write_preset("VendorA", preset("QNEW @P1", inherits="QNEW @base", + compatible_printers=["P1"])) + before = self.t.bytes_map() + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 1), out) + self.assertIn("resolves empty filament_vendor", out) + self.assertIn("mint key needs both", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_refuses_filament_with_divergent_root_fields(self): + self.t.write_preset("VendorA", preset("HNEW @base1", instantiation=False, + filament_vendor="HV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("HNEW @base2", instantiation=False, + filament_vendor="HV", + filament_type="PETG")) + self.t.write_preset("VendorA", preset("HNEW @P1", inherits="HNEW @base1", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("HNEW @P2", inherits="HNEW @base2", + compatible_printers=["P2"])) + changed, errors, out = self.t.assign() + self.assertEqual(changed, 0) + self.assertGreater(errors, 0) + self.assertIn("divergent (filament_vendor, filament_type)", out) + + def test_parent_of_another_filament_never_receives_the_key(self): + # Members whose id-less parent belongs to another filament (here one + # parent shared by two filaments) carry the key themselves: the + # parent's own triple would mint a different id (check 2). + self.t.write_preset("VendorA", preset("shared_base", instantiation=False, + filament_vendor="SV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("HNEW @P1", inherits="shared_base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("INEW @P1", inherits="shared_base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 2) + for filament_name in ("HNEW", "INEW"): + member = load_json_file(self.t.preset_path("VendorA", f"{filament_name} @P1")) + self.assertEqual(member["filament_id"], + afi.generate_filament_id("SV", "PLA", filament_name)) + parent = load_json_file(self.t.preset_path("VendorA", "shared_base")) + self.assertNotIn("filament_id", parent) + # ... and the tree they leave behind passes the identity check. + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_non_of_declaration_is_re_minted(self): + # A declaration that isn't OF-format (e.g. a vendor bundle synced from + # an upstream catalog, like BBL's GF ids) is not the mint of its own + # triple, so the same pass rewrites it in place. + self.t.write_preset("VendorA", preset("Synced PLA @base", filament_id="GFZZ00", + instantiation=False, + filament_vendor="ZV", filament_type="PLA")) + self.t.write_preset("VendorA", preset("Synced PLA @P1", + inherits="Synced PLA @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + path = self.t.preset_path("VendorA", "Synced PLA @base") + root = load_json_file(path) + want = afi.generate_filament_id("ZV", "PLA", "Synced PLA") + self.assertEqual(root["filament_id"], want) + # the value was replaced in place, not appended as a second key + with open(path, encoding="utf-8") as f: + raw = f.read() + self.assertEqual(raw.count('"filament_id"'), 1) + # idempotent: the id is its triple's mint now, so a second run is a no-op + changed, errors, _out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + + def test_non_of_multi_root_filament_converges_on_one_id(self): + # Two per-printer roots of one product (same triple), both carrying + # the SAME non-OF id — the shape a synced vendor bundle ships (e.g. + # BambuStudio's own per-printer @base files). They must converge on + # one freshly minted id, not split into two. + self.t.write_preset("VendorA", preset("Synced ABS @P1base", filament_id="GFSYNC0", + instantiation=False, + filament_vendor="ZV", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Synced ABS @P2base", filament_id="GFSYNC0", + instantiation=False, + filament_vendor="ZV", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Synced ABS @P1", + inherits="Synced ABS @P1base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Synced ABS @P2", + inherits="Synced ABS @P2base", + compatible_printers=["P2"])) + changed, errors, out = self.t.assign() + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 2) + want = afi.generate_filament_id("ZV", "ABS", "Synced ABS") + b1 = load_json_file(self.t.preset_path("VendorA", "Synced ABS @P1base")) + b2 = load_json_file(self.t.preset_path("VendorA", "Synced ABS @P2base")) + self.assertEqual(b1["filament_id"], want) + self.assertEqual(b2["filament_id"], want) + + def test_converges_on_an_existing_tree_id_for_the_same_triple(self): + # An id-less filament whose product is already shipped (with its + # conforming id) in another bundle converges on that id. One product, + # one id, in every bundle. + want = afi.generate_filament_id("CV", "PLA", "CPLA") + self.t.add_vendor("VendorB", [ + preset("CPLA @base", filament_id=want, instantiation=False, + filament_vendor="CV", filament_type="PLA"), + preset("CPLA @PB", inherits="CPLA @base", + compatible_printers=["PB 0.4 nozzle"]), + ]) + self.t.write_preset("VendorA", preset("CPLA @base", instantiation=False, + filament_vendor="CV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("CPLA @P1", inherits="CPLA @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (1, 0), out) + root = load_json_file(self.t.preset_path("VendorA", "CPLA @base")) + self.assertEqual(root["filament_id"], want) + + def test_a_squatted_id_is_still_minted_for_its_own_product(self): + # VendorB's "Other" declares the id that belongs to VendorA's "DPLA" — + # a copy-paste, not a claim. The id is the mint of DPLA's triple and + # nothing else, so DPLA gets it whatever VendorB carries. + want0 = afi.generate_filament_id("DV", "PLA", "DPLA") + self.t.add_vendor("VendorB", [ + preset("Other @base", filament_id=want0, instantiation=False, + filament_vendor="OV", filament_type="ABS"), + ]) + self.t.write_preset("VendorA", preset("DPLA @base", instantiation=False, + filament_vendor="DV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("DPLA @P1", inherits="DPLA @base", + compatible_printers=["P1"])) + changed, errors, out = self.t.assign(["VendorA"]) + self.assertEqual((changed, errors), (1, 0), out) + root = load_json_file(self.t.preset_path("VendorA", "DPLA @base")) + self.assertEqual(root["filament_id"], want0) + # VendorB's declaration is VendorB's own mismatch: a run not allowed to + # touch it leaves it to --check, and a run over VendorB re-mints it. + _errors, out = self.t.check() + self.assertIn('"Other @base" (VendorB/filament/Other @base.json) does not match ' + 'the mint of its triple', out) + changed, errors, out = self.t.assign(["VendorB"]) + self.assertEqual((changed, errors), (1, 0), out) + other = load_json_file(self.t.preset_path("VendorB", "Other @base")) + self.assertEqual(other["filament_id"], + afi.generate_filament_id("OV", "ABS", "Other")) + + def test_generate_refuses_to_write_into_a_collision(self): + # "X" ships on the id its triple mints; a new product "Y" whose triple + # mints the very same id is a base62 collision. The run does not salt + # past it: it reports both products, writes nothing for "Y", and leaves + # the remedy — a rename, so the triples differ — to the author. + collide = {("V", "PLA", "X"), ("W", "ABS", "Y")} + real = afi.generate_filament_id + + def colliding(vendor, ftype, name): + return "OFcolid0" if (vendor, ftype, name) in collide else real(vendor, ftype, name) + + afi.generate_filament_id = colliding + self.addCleanup(setattr, afi, "generate_filament_id", real) + self.t.write_preset("VendorA", preset("X @base", filament_id="OFcolid0", + instantiation=False, + filament_vendor="V", filament_type="PLA")) + self.t.write_preset("VendorA", preset("X @P1", inherits="X @base", + compatible_printers=["P1"])) + self.t.write_preset("VendorA", preset("Y @base", instantiation=False, + filament_vendor="W", filament_type="ABS")) + self.t.write_preset("VendorA", preset("Y @P1", inherits="Y @base", + compatible_printers=["P1"])) + before = self.t.bytes_map() + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (0, 1), out) + self.assertIn("V/PLA/X", out) + self.assertIn("W/ABS/Y", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_mismatching_of_declaration_is_re_derived(self): + # One rule: an id that is not the mint of its own triple is rewritten. + self.t.write_preset("VendorA", preset("KNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="KV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("KNEW @P1", inherits="KNEW @base", + compatible_printers=["P1"])) + want = afi.generate_filament_id("KV", "PLA", "KNEW") + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (1, 0), out) + self.assertIn('"OFZZZZZZ" -> "%s"' % want, out) + root = load_json_file(self.t.preset_path("VendorA", "KNEW @base")) + self.assertEqual(root["filament_id"], want) + changed, errors, _out = self.t.assign() + self.assertEqual((changed, errors), (0, 0)) + + def test_vendor_filter_limits_rewrites_and_inserts_alike(self): + # A mismatching declarer in VendorA and an id-less filament in VendorB; + # only VendorA is written, and VendorB's bytes are untouched. + self.t.write_preset("VendorA", preset("LNEW @base", filament_id="OFZZZZZZ", + instantiation=False, + filament_vendor="LV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("LNEW @P1", inherits="LNEW @base", + compatible_printers=["P1"])) + self.t.add_vendor("VendorB", [ + preset("MNEW @base", instantiation=False, + filament_vendor="MV", filament_type="PLA"), + preset("MNEW @PB", inherits="MNEW @base", + compatible_printers=["PB 0.4 nozzle"]), + ]) + before = self.t.bytes_map() + changed, errors, out = self.t.assign(["VendorA"]) + self.assertEqual((changed, errors), (1, 0), out) + root = load_json_file(self.t.preset_path("VendorA", "LNEW @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("LV", "PLA", "LNEW")) + after = self.t.bytes_map() + for rel, raw in before.items(): + if rel.split(os.sep)[0].startswith("VendorB"): + self.assertEqual(after[rel], raw, rel) + # ... and the deferred half is exactly what a VendorB run then writes + changed, errors, out = self.t.assign(["VendorB"]) + self.assertEqual((changed, errors), (1, 0), out) + b_root = load_json_file(self.t.preset_path("VendorB", "MNEW @base")) + self.assertEqual(b_root["filament_id"], + afi.generate_filament_id("MV", "PLA", "MNEW")) + + def test_unknown_vendor_reports_and_writes_nothing(self): + # A real insert is pending, so "wrote nothing" means the unknown vendor + # aborted the run before any write — not that the tree was already done. + self.t.write_preset("VendorA", preset("PNEW @base", instantiation=False, + filament_vendor="PV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("PNEW @P1", inherits="PNEW @base", + compatible_printers=["P1"])) + before = self.t.bytes_map() + changed, errors, out = self.t.assign(["Nope"]) + self.assertEqual((changed, errors), (0, 1)) + self.assertIn("unknown vendor", out) + self.assertEqual(self.t.bytes_map(), before) + # ... and that pending insert is real: a known-vendor run makes it. + changed, errors, out = self.t.assign(["VendorA"]) + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual( + load_json_file(self.t.preset_path("VendorA", "PNEW @base"))["filament_id"], + afi.generate_filament_id("PV", "PLA", "PNEW")) + + def test_dry_run_reports_the_real_run_and_writes_nothing(self): + self.t.write_preset("VendorA", preset("NNEW @base", instantiation=False, + filament_vendor="NV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset("NNEW @P1", inherits="NNEW @base", + compatible_printers=["P1"])) + before = self.t.bytes_map() + dry_changed, errors, out = self.t.assign(dry_run=True) + self.assertEqual((dry_changed, errors), (1, 0), out) + self.assertIn("would insert", out) + self.assertEqual(self.t.bytes_map(), before) + changed, errors, out = self.t.assign() + self.assertEqual((changed, errors), (dry_changed, 0), out) + root = load_json_file(self.t.preset_path("VendorA", "NNEW @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("NV", "PLA", "NNEW")) + + +# --------------------------------------------------------------------------- +# byte-preserving profile edits +# --------------------------------------------------------------------------- + +class TestInsertEditing(unittest.TestCase): + CRLF_TEXT = ( + '{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "JNEW @base",\r\n' + '\t"inherits": "fdm_pla",\r\n' + '\t"from": "system",\r\n' + '\t"instantiation": "false",\r\n' + '\t"filament_type": [\r\n' + '\t\t"PLA"\r\n' + '\t]\r\n' + '}\r\n' + ) + CRLF_WITH_ID = ( + '{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "JNEW @base",\r\n' + '\t"filament_id": "OFold123",\r\n' + '\t"instantiation": "false",\r\n' + '\t"filament_type": [\r\n' + '\t\t"PLA"\r\n' + '\t]\r\n' + '}\r\n' + ) + + def test_insert_before_instantiation_preserves_bytes(self): + text, n = afi.insert_filament_id(self.CRLF_TEXT, "OFabc123") + self.assertEqual(n, 1) + json.loads(text) + inserted = '\t"filament_id": "OFabc123",\r\n' + self.assertIn(inserted + '\t"instantiation"', text) + # every original byte is preserved: removing the inserted line restores + # the input exactly (CRLF stays CRLF, tabs stay tabs) + self.assertEqual(text.replace(inserted, "", 1), self.CRLF_TEXT) + + def test_insert_after_name_when_no_instantiation_line(self): + lf_text = '{\n "type": "filament",\n "name": "K",\n "from": "system"\n}\n' + text, n = afi.insert_filament_id(lf_text, "OFabc123") + self.assertEqual(n, 1) + json.loads(text) + self.assertIn('"name": "K",\n "filament_id": "OFabc123",\n', text) + self.assertNotIn("\r", text) + + def test_insert_no_anchor_fails(self): + _text, n = afi.insert_filament_id('{"type": "filament"}', "OFabc123") + self.assertEqual(n, 0) + + def test_write_filament_id_keeps_crlf_on_disk(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", []) + path = t.preset_path("VendorA", "JNEW @base") + with open(path, "wb") as f: + f.write(self.CRLF_TEXT.encode("utf-8")) + t.add_to_index("VendorA", "JNEW @base") + afi.write_filament_id(path, "OFabc123") + with open(path, "rb") as f: + raw = f.read() + self.assertEqual(raw.count(b"\n"), raw.count(b"\r\n")) # still CRLF-only + self.assertEqual( + raw.replace(b'\t"filament_id": "OFabc123",\r\n', b"", 1), + self.CRLF_TEXT.encode("utf-8")) + + def test_replace_value_preserves_every_other_byte(self): + text, n = afi.replace_filament_id_value(self.CRLF_WITH_ID, + "OFold123", "OFnew456") + self.assertEqual(n, 1) + self.assertEqual(json.loads(text)["filament_id"], "OFnew456") + self.assertEqual(text, self.CRLF_WITH_ID.replace('"OFold123"', '"OFnew456"')) + + def test_replace_value_requires_exact_old_value(self): + _text, n = afi.replace_filament_id_value(self.CRLF_WITH_ID, + "OFwrong1", "OFnew456") + self.assertEqual(n, 0) + + def test_rewrite_filament_id_on_disk(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", []) + path = t.preset_path("VendorA", "JNEW @base") + with open(path, "wb") as f: + f.write(self.CRLF_WITH_ID.encode("utf-8")) + afi.rewrite_filament_id(path, "OFold123", "OFnew456") + with open(path, "rb") as f: + raw = f.read() + self.assertEqual(raw, + self.CRLF_WITH_ID.replace('"OFold123"', '"OFnew456"') + .encode("utf-8")) + with self.assertRaises(RuntimeError): + afi.rewrite_filament_id(path, "OFold123", "OFxxx999") # stale old id + + def test_delete_line_with_trailing_comma(self): + text, n = afi.delete_key_line(self.CRLF_WITH_ID, "filament_id", "OFold123") + self.assertEqual(n, 1) + self.assertNotIn("filament_id", json.loads(text)) + self.assertEqual(text, self.CRLF_WITH_ID.replace( + '\t"filament_id": "OFold123",\r\n', "", 1)) + + def test_delete_last_property_line(self): + lf_text = ('{\n "name": "K @base",\n "instantiation": "false",\n' + ' "filament_id": "OFold123"\n}\n') + text, n = afi.delete_key_line(lf_text, "filament_id", "OFold123") + self.assertEqual(n, 1) + data = json.loads(text) + self.assertNotIn("filament_id", data) + self.assertEqual(data["instantiation"], "false") + # the preceding comma goes with it, and nothing else moves + self.assertEqual(text, '{\n "name": "K @base",\n' + ' "instantiation": "false"\n}\n') + + def test_dry_run_edits_verify_but_write_nothing(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("VendorA", []) + fresh = t.preset_path("VendorA", "JNEW @base") + with open(fresh, "wb") as f: + f.write(self.CRLF_TEXT.encode("utf-8")) + idded = t.preset_path("VendorA", "JOLD @base") + with open(idded, "wb") as f: + f.write(self.CRLF_WITH_ID.encode("utf-8")) + + afi.write_filament_id(fresh, "OFabc123", dry_run=True) + afi.rewrite_filament_id(idded, "OFold123", "OFnew456", dry_run=True) + with open(fresh, "rb") as f: + self.assertEqual(f.read(), self.CRLF_TEXT.encode("utf-8")) + with open(idded, "rb") as f: + self.assertEqual(f.read(), self.CRLF_WITH_ID.encode("utf-8")) + # the edit is still applied and verified in memory: only the write is + # skipped, so a stale old id fails just as loudly + with self.assertRaises(RuntimeError): + afi.rewrite_filament_id(idded, "OFstale1", "OFnew456", dry_run=True) + + +# --------------------------------------------------------------------------- +# --generate: re-minting non-conformant declarations +# --------------------------------------------------------------------------- + +class TestRemint(SyntheticTreeCase): + TRIPLE = ("AVendor", "PLA", "APLA") + + def test_rewrites_mismatching_declaration(self): + want = afi.generate_filament_id(*self.TRIPLE) + changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + self.assertIn('"AX01" -> "%s"' % want, out) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], want) + # OFL was not part of the run + ofl_root = load_json_file(self.t.preset_path(OFL, "Generic PLA @base")) + self.assertEqual(ofl_root["filament_id"], "OGFL99") + # idempotent: a second run over the same vendor rewrites nothing + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (0, 0)) + + def test_second_id_of_one_product_is_converged_by_remint(self): + # A second preset of one product kept on an id of its own is not a + # sanctioned split: the triple determines the id, so --generate pulls it + # back. An AMS ambiguity this exposes is fixed in the profiles instead. + want = afi.generate_filament_id(*self.TRIPLE) + self.t.write_preset("VendorA", preset("APLA @legacy", filament_id="OFlegac1", + inherits="APLA @base", + compatible_printers=["P2 0.4 nozzle"])) + changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 2) # the non-conformant AX01 root and @legacy + legacy = load_json_file(self.t.preset_path("VendorA", "APLA @legacy")) + self.assertEqual(legacy["filament_id"], want) + + def test_same_triple_converges_within_run(self): + self.t.add_vendor("VendorB", [ + preset("APLA @Bbase", filament_id="BX01", instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), + preset("APLA @PB", inherits="APLA @Bbase", + compatible_printers=["PB 0.4 nozzle"]), + ]) + want = afi.generate_filament_id(*self.TRIPLE) + changed, errors, _out = self.t.remint(["VendorA", "VendorB"]) + self.assertEqual(errors, 0) + self.assertEqual(changed, 2) + a = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + b = load_json_file(self.t.preset_path("VendorB", "APLA @Bbase")) + self.assertEqual(a["filament_id"], want) + self.assertEqual(b["filament_id"], want) + + def test_same_triple_converges_with_existing_tree_id(self): + # Another bundle already carries the conforming id for the same triple: + # reuse is required, not blocked. + want = afi.generate_filament_id(*self.TRIPLE) + self.t.add_vendor("VendorB", [ + preset("APLA @Bbase", filament_id=want, instantiation=False, + filament_vendor="AVendor", filament_type="PLA"), + ]) + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + a = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(a["filament_id"], want) + + def test_not_blocked_by_a_non_conformant_occurrence(self): + # VendorB carries APLA's id under a PETG triple of its own: that + # declaration is wrong, and it costs VendorA's APLA nothing — the id is + # the mint of APLA's triple, whoever else is squatting on it. + want0 = afi.generate_filament_id(*self.TRIPLE) + self.t.add_vendor("VendorB", [ + preset("BPLA @base", filament_id=want0, instantiation=False, + filament_vendor="BV", filament_type="PETG"), + ]) + changed, errors, out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0), out) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], want0) + # A run over VendorB re-mints the squatter to its own triple. + changed, errors, out = self.t.remint(["VendorB"]) + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual( + load_json_file(self.t.preset_path("VendorB", "BPLA @base"))["filament_id"], + afi.generate_filament_id("BV", "PETG", "BPLA")) + + def test_bbl_is_reminted_like_any_vendor(self): + self.t.add_vendor("BBL", [ + preset("Bambu ABS @base", filament_id="GFB00", instantiation=False, + filament_vendor="Bambu Lab", filament_type="ABS"), + preset("Bambu ABS @P1", inherits="Bambu ABS @base", + compatible_printers=["P1"]), + ]) + changed, errors, out = self.t.remint(["BBL"]) + self.assertEqual(errors, 0, out) + self.assertEqual(changed, 1) + root = load_json_file(self.t.preset_path("BBL", "Bambu ABS @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS")) + + def test_dry_run_leaves_every_file_untouched(self): + before = self.t.bytes_map() + changed, errors, out = self.t.remint(["VendorA"], dry_run=True) + self.assertEqual((changed, errors), (1, 0), out) + self.assertIn("would rewrite", out) + self.assertEqual(self.t.bytes_map(), before) + # the real run then makes exactly that one change + changed, errors, _out = self.t.remint(["VendorA"]) + self.assertEqual((changed, errors), (1, 0)) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id(*self.TRIPLE)) + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +class TestCli(unittest.TestCase): + """main(argv) over a synthetic tree. The clean tree's baseline ids are + deliberately non-conformant ("AX01"/"OGFL99"), so a generate-id run always + has both a filament_id rewrite and setting_id inserts to do.""" + + def setUp(self): + self.t = make_clean_tree() + self.addCleanup(self.t.cleanup) + + def test_bare_invocation_prints_help(self): + # Naming no command is not an error: it is how you find out what the + # commands are, and it must never be mistaken for a run that did work. + before = self.t.bytes_map() + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.main([]) + self.assertEqual(rc, 0) + self.assertIn("usage:", buf.getvalue()) + for command in ("check", "generate-id", "normalize", "trim", "update-index"): + self.assertIn(command, buf.getvalue()) + self.assertEqual(self.t.bytes_map(), before) + + def test_filament_id_and_setting_id_together_are_rejected(self): + # Each flag's help promises it skips the other kind, so the pair cannot + # quietly mean "both". + with self.assertRaises(SystemExit) as caught: + with contextlib.redirect_stderr(io.StringIO()): + afi.main(["generate-id", "--filament-id", "--setting-id", + "--profiles", self.t.profiles]) + self.assertEqual(caught.exception.code, 2) + + def test_a_run_with_errors_does_not_report_success(self): + # An unreadable profile must not be buried under a green summary line. + path = self.t.preset_path("VendorA", "APLA @base") + with open(path, "w", encoding="utf-8") as f: + f.write("{ not json") + rc, out = self.t.cli("generate-id") + self.assertEqual(rc, 1, out) + self.assertIn("error(s)", out) + self.assertNotIn("SUCCESS", out) + + def test_dry_run_previews_generate_id(self): + before = self.t.bytes_map() + rc, out = self.t.cli("generate-id", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would ", out) + self.assertIn("nothing written", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_the_reported_count_is_files_not_edits(self): + # A file both passes touch is still one file. "SoloPLA @P1" needs a + # filament_id rewrite AND a setting_id insert, so an edit-counting + # summary would over-report the tree. + self.t.write_preset("VendorA", preset( + "SoloPLA @P1", filament_id="AX01", filament_vendor="AVendor", + filament_type="PLA", compatible_printers=["P1"])) + before = self.t.bytes_map() + + rc, out = self.t.cli("generate-id") + + self.assertEqual(rc, 0, out) + after = self.t.bytes_map() + touched = {p for p in after if after[p] != before.get(p)} + self.assertIn("VendorA/filament/SoloPLA @P1.json".replace("/", os.sep), touched) + self.assertIn("rewrite VendorA/filament/SoloPLA @P1.json", out) + self.assertIn("update VendorA/filament/SoloPLA @P1.json", out) + summary = [l for l in out.splitlines() if "file(s) changed" in l] + self.assertEqual(len(summary), 1, out) + self.assertIn(f"{len(touched)} file(s) changed", summary[0]) + + def test_dryrun_is_the_same_flag(self): + before = self.t.bytes_map() + rc, out = self.t.cli("generate-id", "--dryrun") + self.assertEqual(rc, 0, out) + self.assertIn("would ", out) # the same preview, not a silent no-op + self.assertIn("nothing written", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_generate_vendor_writes_only_in_that_bundle(self): + before = self.t.bytes_map() + rc, out = self.t.cli("generate-id", "--vendor", "VendorA") + self.assertEqual(rc, 0, out) + after = self.t.bytes_map() + changed = sorted(rel for rel in before if after[rel] != before[rel]) + self.assertTrue(changed, out) + for rel in changed: + self.assertTrue(rel.startswith("VendorA" + os.sep), rel) + # The bundles it spared were not simply already conformant: the + # un-narrowed run goes on to write in them too. + rc, out = self.t.cli("generate-id") + self.assertEqual(rc, 0, out) + final = self.t.bytes_map() + self.assertTrue(any(final[rel] != after[rel] for rel in after + if not rel.startswith("VendorA" + os.sep)), out) + + def test_generate_unknown_vendor_returns_1(self): + before = self.t.bytes_map() + rc, out = self.t.cli("generate-id", "--vendor", "Nope") + self.assertEqual(rc, 1) + self.assertIn("unknown vendor", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_setting_id_only_leaves_filament_ids_alone(self): + rc, out = self.t.cli("generate-id", "--setting-id") + self.assertEqual(rc, 0, out) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], "AX01") # not re-minted + member = load_json_file(self.t.preset_path("VendorA", "APLA @P1")) + self.assertNotIn("filament_id", member) + self.assertEqual(member["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", + "APLA @P1")) + + def test_filament_id_only_inserts_no_setting_id(self): + rc, out = self.t.cli("generate-id", "--filament-id") + self.assertEqual(rc, 0, out) + root = load_json_file(self.t.preset_path("VendorA", "APLA @base")) + self.assertEqual(root["filament_id"], + afi.generate_filament_id("AVendor", "PLA", "APLA")) + for name in ("APLA @base", "APLA @P1"): + self.assertNotIn( + "setting_id", load_json_file(self.t.preset_path("VendorA", name))) + + def test_check_returns_1_on_errors(self): + # What CI keys off: check exits nonzero when the tree breaks a rule, here + # the baseline's ids that are not minted. + before = self.t.bytes_map() + rc, out = self.t.cli("check") + self.assertEqual(rc, 1) + self.assertIn("Files with errors", out) + self.assertEqual(self.t.bytes_map(), before) # check never writes + + def test_check_vendor_narrows_the_per_vendor_pass(self): + # check_profile.sh passes --vendor to this command, so it has to be + # accepted -- and it must narrow only the per-vendor half. + rc, out = self.t.cli("check", "--vendor", "VendorA") + self.assertEqual(rc, 1, out) # the tree-wide checks still ran + self.assertIn("Checked vendors : 1", out) + + def test_an_empty_vendor_means_every_vendor(self): + # check_profile.sh cannot expand an empty array under set -u, so it + # passes --vendor "" to mean "all of them". + _rc, scoped = self.t.cli("check", "--vendor", "") + _rc, unscoped = self.t.cli("check") + self.assertEqual(scoped, unscoped) + + def test_removed_and_conflicting_flags_are_rejected(self): + for argv in (["--remint", "VendorA"], # removed mode + ["--generate"], # the pre-subcommand flag + ["--check"], # the pre-subcommand flag + ["--update-snapshot"], # the pre-subcommand flag + ["nonsense"], # not a command + ["update-snapshot"], # removed command + ["generate-id", "--filament-id", "--setting-id"], + ["check", "--materials"], # removed flag + ["check", "--obsolete-keys"], # removed flag + ["check", "--snapshot", "x"], # removed flag + ["check", "--filament-id"], # generate-id's option + ["normalize", "--profile-type", "nozzle"]): # not a profile type + with self.subTest(argv=argv): + with self.assertRaises(SystemExit) as cm, \ + contextlib.redirect_stdout(io.StringIO()), \ + contextlib.redirect_stderr(io.StringIO()): + afi.main([*argv, "--profiles", self.t.profiles]) + self.assertEqual(cm.exception.code, 2) + + +# --------------------------------------------------------------------------- +# the real tree +# --------------------------------------------------------------------------- + +@unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") +class TestRealTree(unittest.TestCase): + def test_shipped_filament_ids_pass(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = afi.check_filament_ids(REAL_PROFILES) + self.assertEqual(errors, 0, buf.getvalue()) + + def test_check_cli_returns_0(self): + # The exact CI invocation, return code included. + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.main(["check"]) + self.assertEqual(rc, 0, buf.getvalue()) + + def test_every_instantiated_filament_resolves_an_id(self): + analysis = afi.analyze_tree(REAL_PROFILES) + self.assertEqual(analysis["missing_effective"], []) + self.assertEqual(analysis["read_errors"], []) + +# --------------------------------------------------------------------------- +# review-fix regressions +# --------------------------------------------------------------------------- + +class TestReviewFixes(OfCleanTreeCase): + def test_one_file_reached_by_two_spellings_counts_once(self): + # The filament pass reaches a file through its index sub_path, the + # setting_id pass through os.walk. Those two spellings differ whenever + # the sub_path is not already normalized - always, on Windows, where + # every sub_path keeps the "/" the index stores. One file is one file. + # One preset per write path: SoloPLA has no id (inserted), WrongPLA + # declares one that is not its own mint (rewritten). Both are + # instantiated, so the setting_id pass reaches them too. + self.t.write_preset("VendorA", preset("SoloPLA @P1", + compatible_printers=["P1 0.4 nozzle"], + filament_vendor="SV", + filament_type="PLA")) + self.t.write_preset("VendorA", preset( + "WrongPLA @P1", filament_id=afi.generate_filament_id("WV", "PLA", "Nope"), + compatible_printers=["P1 0.4 nozzle"], + filament_vendor="WV", filament_type="PLA")) + for name in ("SoloPLA @P1", "WrongPLA @P1"): + self.t.set_sub_path("VendorA", name, f"filament/./{name}.json") + touched = set() + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + afi.generate_filament_ids(self.t.profiles, None, False, touched) + afi.generate_setting_ids(self.t.profiles, None, False, touched) + for name in ("SoloPLA @P1", "WrongPLA @P1"): + self.assertEqual([t for t in touched if t.endswith(name + ".json")], + [self.t.preset_path("VendorA", name)], sorted(touched)) + self.assertEqual(sorted(touched), + sorted(os.path.normpath(t) for t in touched)) + + def test_a_broken_edit_names_the_file(self): + # An edit that produces invalid JSON is refused, and the message has to + # say which of ~12,000 files it was: a bare JSONDecodeError does not. + path = self.t.preset_path("VendorA", "APLA @base") + with self.assertRaises(RuntimeError) as caught: + afi._edit_profile(path, lambda text: (text.replace("{", "{,", 1), 1), + what="test edit") + self.assertIn(path, str(caught.exception)) + self.assertIn("test edit", str(caught.exception)) + + def test_check2_accepts_an_of_id_inherited_from_another_vendor(self): + # An OFL filament carries its own minted OF id and a vendor tunes it + # correctly (same base name, non-empty printers): the id it inherits is + # the mint of its own triple. + fid = afi.generate_filament_id("Generic", "PLA", "Generic PLA Matte") + self.t.write_preset(OFL, preset("Generic PLA Matte @base", filament_id=fid, + instantiation=False, + filament_vendor="Generic", + filament_type="PLA")) + self.t.write_preset(OFL, preset("Generic PLA Matte @System", + inherits="Generic PLA Matte @base", + compatible_printers=[])) + self.t.write_preset("VendorA", preset("Generic PLA Matte @P1", + inherits="Generic PLA Matte @System", + compatible_printers=["P1 0.4 nozzle"])) + errors, out = self.t.check() + self.assertEqual(errors, 0, out) + + def test_check2c_prints_expected_mint(self): + self.t.write_preset("VendorA", preset("Orphan PLA @P1", + compatible_printers=["P1 0.4 nozzle"], + filament_vendor="OV", + filament_type="PLA")) + errors, out = self.t.check() + self.assertGreater(errors, 0) + self.assertIn(afi.generate_filament_id("OV", "PLA", "Orphan PLA"), out) + + +# --------------------------------------------------------------------------- +# scripts/update_bambu_filament_ids.py: the generated Bambu catalog id map +# --------------------------------------------------------------------------- + +class TestBambuMap(unittest.TestCase): + def _bs_tree(self, filaments): + # filaments: list of (name, bambu_id, vendor, type); builds a minimal BBL + # bundle with an @base per filament carrying the id and one instantiated child. + t = SyntheticTree() + self.addCleanup(t.cleanup) + presets = [] + for filament_name, bambu_id, vendor, ftype in filaments: + presets.append(preset(f"{filament_name} @base", filament_id=bambu_id, + instantiation=False, filament_vendor=vendor, + filament_type=ftype)) + presets.append(preset(f"{filament_name} @P1", inherits=f"{filament_name} @base", + compatible_printers=["P1 0.4 nozzle"])) + t.add_vendor("BBL", presets) + filaments, errors = afi.load_vendor_filaments(t.profiles, "BBL") + self.assertEqual(errors, []) + return filaments + + def test_one_row_per_filament(self): + rows = ubfi.derive_rows(self._bs_tree([("Bambu ABS", "GFB00", "Bambu Lab", "ABS")])) + self.assertEqual(rows, {afi.generate_filament_id("Bambu Lab", "ABS", "Bambu ABS"): + {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}}) + + def test_shared_bambu_id_is_an_error(self): + with self.assertRaises(SystemExit): + ubfi.derive_rows(self._bs_tree([("A", "GFX00", "V", "PLA"), ("B", "GFX00", "V", "PLA")])) + + @unittest.skipUnless(os.path.isdir("/Users/lijiang/codes/BambuStudio/resources/profiles"), "no local clone") + def test_local_clone_yields_the_catalog(self): + rows = ubfi.derive_rows(afi.load_vendor_filaments("/Users/lijiang/codes/BambuStudio/resources/profiles", "BBL")[0]) + self.assertEqual(len(rows), 100) + self.assertEqual(len({r["bambu_id"] for r in rows.values()}), 100) + + +class TestWriteMap(unittest.TestCase): + def test_format(self): + d = tempfile.mkdtemp(prefix="bambu_map_test_") + self.addCleanup(shutil.rmtree, d, ignore_errors=True) + # nested, not-yet-existing directory: write_map must create it + path = os.path.join(d, "out", "bambu_filament_ids.json") + rows = {"OFabc123": {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"}} + + ubfi.write_map(path, rows, "66e405477", "2026-09-04") + + with open(path, "rb") as f: + raw = f.read() + self.assertTrue(raw.endswith(b"\n")) + self.assertNotIn(b"\r", raw) + text = raw.decode("utf-8") + self.assertEqual(json.loads(text), { + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": rows, + }) + # sorted top-level keys + self.assertLess(text.index('"bambustudio_commit"'), text.index('"filaments"')) + self.assertLess(text.index('"filaments"'), text.index('"generated"')) + self.assertLess(text.index('"generated"'), text.index('"source"')) + + +class TestDriftReport(unittest.TestCase): + def test_reports_both_directions(self): + t = SyntheticTree() + self.addCleanup(t.cleanup) + t.add_vendor("BBL", [ + preset("Match PLA @base", filament_id="GFX01", instantiation=False, + filament_vendor="V", filament_type="PLA"), + preset("Match PLA @P1", inherits="Match PLA @base", + compatible_printers=["P1"]), + preset("Orphan PLA @base", filament_id="GFX03", instantiation=False, + filament_vendor="V", filament_type="PLA"), + preset("Orphan PLA @P1", inherits="Orphan PLA @base", + compatible_printers=["P1"]), + ]) + rows = { + # matches the BBL bundle's "Match PLA" filament: no drift either way + "OFmatch01": {"bambu_id": "GFX01", "vendor": "V", "type": "PLA", "name": "Match PLA"}, + # no filament of this identity in the BBL bundle above + "OFghost01": {"bambu_id": "GFX02", "vendor": "V", "type": "PLA", "name": "Upstream Only PLA"}, + } + orca_analysis = afi.analyze_tree(t.profiles) + + lines = ubfi.drift_report(rows, orca_analysis) + + report = "\n".join(lines) + self.assertIn("Upstream Only PLA", report) + self.assertIn("Orca BBL filaments with no row: 1", report) + self.assertNotIn("Match PLA", report) # the matched filament is not drift + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/tests/test_profile_tool.py b/scripts/tests/test_profile_tool.py new file mode 100644 index 0000000000..29b62b693e --- /dev/null +++ b/scripts/tests/test_profile_tool.py @@ -0,0 +1,942 @@ +#!/usr/bin/env python3 +"""Tests for the tree-maintenance half of scripts/orca_profile_tool.py: the +normalize, trim, update-index and check commands, and the subcommand dispatch that +reaches them (stdlib unittest, no external deps). + +The id halves are covered by test_filament_id.py and test_setting_id.py. + +Run from the repo root: python -m unittest discover -s scripts/tests -v +""" + +import contextlib +import io +import json +import os +import re +import shutil +import sys +import tempfile +import unittest + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +import orca_profile_tool as apt # noqa: E402 + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") + + +class Tree: + """A throwaway resources/profiles-shaped directory built one file at a time. + + Nothing is written implicitly: index entries are added by index(), so a test + can produce exactly the mismatch it is about (a file no list references, a + list naming a file that is not there, a preset whose name disagrees with the + index). + """ + + def __init__(self): + self.dir = tempfile.mkdtemp(prefix="profile_tool_test_") + self.profiles = os.path.join(self.dir, "profiles") + os.makedirs(self.profiles) + + def cleanup(self): + shutil.rmtree(self.dir, ignore_errors=True) + + def index_path(self, vendor): + return os.path.join(self.profiles, vendor + ".json") + + def add_vendor(self, vendor): + for sub in apt.PROFILE_SUBDIRS: + os.makedirs(os.path.join(self.profiles, vendor, sub), exist_ok=True) + if not os.path.exists(self.index_path(vendor)): + self.write_index(vendor, {"name": vendor, "version": "01.00.00.00"}) + return self + + def write_index(self, vendor, index): + with open(self.index_path(vendor), "w", encoding="utf-8", newline="\n") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + f.write("\n") + + def read_index(self, vendor): + with open(self.index_path(vendor), encoding="utf-8-sig") as f: + return json.load(f) + + def index(self, vendor, section, name, sub_path): + index = self.read_index(vendor) + index.setdefault(section + "_list", []).append( + {"name": name, "sub_path": sub_path}) + self.write_index(vendor, index) + + def path(self, vendor, rel): + return os.path.join(self.profiles, vendor, rel.replace("/", os.sep)) + + def write(self, vendor, rel, data): + """Write a preset at /; returns its path.""" + self.add_vendor(vendor) + path = self.path(vendor, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + f.write("\n") + return path + + def write_raw(self, vendor, rel, raw): + self.add_vendor(vendor) + path = self.path(vendor, rel) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "wb") as f: + f.write(raw) + return path + + def read(self, vendor, rel): + with open(self.path(vendor, rel), encoding="utf-8-sig") as f: + return json.load(f) + + def raw(self, vendor, rel): + with open(self.path(vendor, rel), "rb") as f: + return f.read() + + def bytes_map(self): + """Every file in the tree -> its bytes, for "nothing was written" asserts.""" + out = {} + for root, dirs, files in os.walk(self.profiles): + dirs.sort() + for name in sorted(files): + path = os.path.join(root, name) + with open(path, "rb") as f: + out[os.path.relpath(path, self.profiles)] = f.read() + return out + + +class TreeCase(unittest.TestCase): + def setUp(self): + self.t = Tree() + self.addCleanup(self.t.cleanup) + + def run_command(self, *argv): + """main() against this tree, capturing stdout.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = apt.main([*argv, "--profiles", self.t.profiles]) + return rc, buf.getvalue() + + +# --------------------------------------------------------------------------- +# normalize +# --------------------------------------------------------------------------- + +class TestObsoleteKeys(unittest.TestCase): + def test_obsolete_keys_match_the_loader_ignore_set(self): + path = os.path.join(REPO_ROOT, "src", "libslic3r", "PrintConfig.cpp") + with open(path, encoding="utf-8") as f: + source = f.read() + match = re.search( + r"void PrintConfigDef::handle_legacy\(.*?" + r"static\s+std::set\s+ignore\s*=\s*\{(.*?)\};", + source, re.DOTALL) + self.assertIsNotNone(match, "Could not locate the loader's obsolete-key set") + keys = re.sub(r"//[^\n]*|/\*.*?\*/", "", match.group(1), flags=re.DOTALL) + self.assertEqual(apt.OBSOLETE_KEYS, set(re.findall(r'"([^"\n]+)"', keys))) + + +class TestNormalize(TreeCase): + def test_a_missing_type_is_filled_in_from_the_directory(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + self.t.write("V", "process/B.json", {"name": "B"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + self.assertEqual(self.t.read("V", "process/B.json")["type"], "process") + + def test_the_machine_folder_splits_on_the_preset_name(self): + # Orca keeps machine models in machine/ next to the nozzle variants that + # are machines; only the name tells them apart. + self.t.write("V", "machine/M.json", {"name": "V Printer"}) + self.t.write("V", "machine/N.json", {"name": "V Printer 0.4 nozzle"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "machine/M.json")["type"], "machine_model") + self.assertEqual(self.t.read("V", "machine/N.json")["type"], "machine") + + def test_dropped_keys_go_and_filament_vectors_are_arrayified(self): + self.t.write("V", "filament/A.json", { + "type": "filament", "name": "A", "version": "1.2.3", + "is_custom_defined": "1", "filament_type": "PLA", + "filament_vendor": "AV", "travel_speed": 200, + "filament_load_time": ["15"], "filament_unload_time": "0"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + data = self.t.read("V", "filament/A.json") + self.assertNotIn("version", data) + self.assertNotIn("is_custom_defined", data) + self.assertNotIn("travel_speed", data) # a process setting, not a filament one + self.assertNotIn("filament_load_time", data) + self.assertNotIn("filament_unload_time", data) + self.assertEqual(data["filament_type"], ["PLA"]) + self.assertEqual(data["filament_vendor"], ["AV"]) + + def test_obsolete_keys_are_removed_from_every_profile_type(self): + for sub in ("filament", "process", "machine"): + with self.subTest(profile_type=sub): + expected = {"type": sub, "name": "A"} + self.t.write("V", f"{sub}/A.json", { + **expected, "silent_mode": "", "adaptive_layer_height": "0", + "anisotropic_surfaces": "1", "filament_load_time": ["0"], + "filament_unload_time": "0"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", f"{sub}/A.json"), expected) + before = self.t.bytes_map() + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertIn("0 profile(s) normalized", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_the_larger_extruder_clearance_wins(self): + # Keeping the smaller one would licence a toolhead collision. + self.t.write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "extruder_clearance_radius": "45", "extruder_clearance_max_radius": "68"}) + self.t.write("V", "machine/N.json", { + "type": "machine", "name": "N 0.4 nozzle", + "extruder_clearance_radius": "68", "extruder_clearance_max_radius": "45"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + kept = self.t.read("V", "machine/M.json") + self.assertNotIn("extruder_clearance_radius", kept) + self.assertEqual(kept["extruder_clearance_max_radius"], "68") + kept = self.t.read("V", "machine/N.json") + self.assertNotIn("extruder_clearance_max_radius", kept) + self.assertEqual(kept["extruder_clearance_radius"], "68") + + def test_a_rewritten_file_leads_with_its_identifying_keys(self): + self.t.write("V", "filament/A.json", { + "filament_cost": [20], "name": "A", "instantiation": "true", + "inherits": "base", "version": "1"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + keys = list(self.t.read("V", "filament/A.json")) + self.assertEqual(keys[:4], ["type", "name", "inherits", "instantiation"]) + + def test_a_conforming_tree_is_left_byte_identical(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + # These used to be misclassified as obsolete: one is active, the other + # is a legacy alias that still supplies the toolhead clearance on load. + self.t.write("V", "machine/M.json", { + "type": "machine", "name": "M", "extruder_type": ["Direct Drive"], + "extruder_clearance_max_radius": "68", "machine_load_filament_time": "15", + "machine_unload_filament_time": "10"}) + self.t.write("V", "process/P.json", { + "type": "process", "name": "P", "travel_speed": "200", + "top_surface_fill_order": "outward"}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.bytes_map(), before) + + def test_force_rewrites_even_a_conforming_file(self): + self.t.write_raw("V", "filament/A.json", + b'{"name":"A","type":"filament"}') + rc, out = self.run_command("normalize", "--force") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.raw("V", "filament/A.json"), + b'{\n\t"type": "filament",\n\t"name": "A"\n}\n') + + def test_dry_run_writes_nothing(self): + self.t.write("V", "filament/A.json", {"name": "A", "bed_temperature": ["60"]}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_profile_type_confines_the_run(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + self.t.write("V", "process/B.json", {"name": "B"}) + rc, out = self.run_command("normalize", "--profile-type", "filament") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + self.assertNotIn("type", self.t.read("V", "process/B.json")) + + def test_an_unreadable_profile_is_reported_not_swallowed(self): + self.t.write_raw("V", "filament/A.json", b"{ not json") + rc, out = self.run_command("normalize") + self.assertEqual(rc, 1, out) + self.assertIn("ERROR", out) + self.assertEqual(self.t.raw("V", "filament/A.json"), b"{ not json") + + def test_a_directory_without_an_index_is_not_a_bundle(self): + # resources/profiles also holds non-bundle entries (blacklist.json, the + # untracked user/ directory); only a directory WITH an index is a vendor. + stray = os.path.join(self.t.profiles, "user", "filament") + os.makedirs(stray) + with open(os.path.join(stray, "A.json"), "wb") as f: + f.write(b'{"name": "A"}') + self.t.write("V", "filament/A.json", {"name": "A"}) + rc, out = self.run_command("normalize") + self.assertEqual(rc, 0, out) + self.assertFalse(os.path.exists(os.path.join(self.t.profiles, "user.json"))) + with open(os.path.join(stray, "A.json"), "rb") as f: + self.assertEqual(f.read(), b'{"name": "A"}') + + +# --------------------------------------------------------------------------- +# trim +# --------------------------------------------------------------------------- + +class TestTrim(TreeCase): + def bundle(self): + self.t.write("V", "filament/Listed.json", + {"type": "filament", "name": "Listed"}) + self.t.index("V", "filament", "Listed", "filament/Listed.json") + return self.t + + def test_an_unindexed_preset_is_removed(self): + self.bundle().write("V", "filament/Orphan.json", + {"type": "filament", "name": "Orphan"}) + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Listed.json"))) + self.assertFalse(os.path.exists(self.t.path("V", "filament/Orphan.json"))) + + def test_a_dotted_sub_path_still_names_its_file(self): + # Index entries are hand-written; "filament/./X.json" is the same file. + self.bundle() + self.t.write("V", "filament/Dotted.json", + {"type": "filament", "name": "Dotted"}) + self.t.index("V", "filament", "Dotted", "filament/./Dotted.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Dotted.json"))) + + def test_an_unparsable_file_is_kept_and_reported(self): + self.bundle().write_raw("V", "filament/Broken.json", b"{ not json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertIn("WARNING", out) + self.assertTrue(os.path.exists(self.t.path("V", "filament/Broken.json"))) + + def test_a_data_file_is_not_a_preset(self): + self.bundle().write("V", "filament/filaments_color_codes.json", + {"data": [], "total": 0}) + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists( + self.t.path("V", "filament/filaments_color_codes.json"))) + + def test_an_inherited_base_is_kept_and_reported(self): + # Neither file loads -- the loader only reads indexed sub_paths -- but + # deleting the parent destroys the only record of what the indexed child + # was written against, so that is a maintainer's call, not trim's. + self.bundle() + self.t.write("V", "machine/base.json", + {"type": "machine", "name": "V base"}) + self.t.write("V", "machine/mid.json", + {"type": "machine", "name": "V mid", "inherits": "V base"}) + self.t.write("V", "machine/M.json", + {"type": "machine", "name": "M 0.4 nozzle", "inherits": "V mid"}) + self.t.index("V", "machine", "M 0.4 nozzle", "machine/M.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + # ... and the chain is followed: mid rescues base in a second pass. + self.assertTrue(os.path.exists(self.t.path("V", "machine/mid.json"))) + self.assertTrue(os.path.exists(self.t.path("V", "machine/base.json"))) + self.assertIn("inherited from", out) + + def test_a_stale_copy_of_an_indexed_profile_is_removed(self): + # "inherits" resolves by preset name, so the indexed base is the parent the + # child actually gets; the unindexed twin is a leftover the loader never + # reaches, and being named in an inherits does not earn it a reprieve. + self.bundle() + self.t.write("V", "machine/HSN/base.json", + {"type": "machine", "name": "V base"}) + self.t.index("V", "machine", "V base", "machine/HSN/base.json") + self.t.write("V", "machine/base.json", + {"type": "machine", "name": "V base"}) + self.t.write("V", "machine/M.json", + {"type": "machine", "name": "M 0.4 nozzle", "inherits": "V base"}) + self.t.index("V", "machine", "M 0.4 nozzle", "machine/M.json") + rc, out = self.run_command("trim") + self.assertEqual(rc, 0, out) + self.assertTrue(os.path.exists(self.t.path("V", "machine/HSN/base.json"))) + self.assertFalse(os.path.exists(self.t.path("V", "machine/base.json"))) + self.assertNotIn("WARNING", out) + self.assertIn('machine/HSN/base.json is the profile named "V base"', out) + + def test_dry_run_deletes_nothing(self): + self.bundle().write("V", "filament/Orphan.json", + {"type": "filament", "name": "Orphan"}) + before = self.t.bytes_map() + rc, out = self.run_command("trim", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be removed", out) + self.assertEqual(self.t.bytes_map(), before) + + +# --------------------------------------------------------------------------- +# update-index +# --------------------------------------------------------------------------- + +class TestUpdateIndex(TreeCase): + def test_every_profile_on_disk_lands_in_its_own_section(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + self.t.write("V", "machine/M.json", {"type": "machine", "name": "M"}) + self.t.write("V", "machine/MM.json", {"type": "machine_model", "name": "MM"}) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + index = self.t.read_index("V") + self.assertEqual(index["filament_list"], + [{"name": "A", "sub_path": "filament/A.json"}]) + self.assertEqual(index["process_list"], + [{"name": "B", "sub_path": "process/B.json"}]) + self.assertEqual(index["machine_list"], + [{"name": "M", "sub_path": "machine/M.json"}]) + self.assertEqual(index["machine_model_list"], + [{"name": "MM", "sub_path": "machine/MM.json"}]) + + def test_parents_are_listed_before_their_children(self): + # The loader resolves inherits in one pass over the list. + for name, parent in (("C", "B"), ("A", None), ("B", "A")): + data = {"type": "filament", "name": name} + if parent: + data["inherits"] = parent + self.t.write("V", f"filament/{name}.json", data) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + self.assertEqual([e["name"] for e in self.t.read_index("V")["filament_list"]], + ["A", "B", "C"]) + # inherits is ordering input only; it never lands in the index. + for entry in self.t.read_index("V")["filament_list"]: + self.assertEqual(sorted(entry), ["name", "sub_path"]) + + def test_a_profile_with_no_usable_type_is_reported_not_dropped(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "filament/B.json", {"name": "B"}) + rc, out = self.run_command("update-index") + self.assertEqual(rc, 1, out) + self.assertIn("cannot be indexed", out) + self.assertIn("filament/B.json", out) + + def test_two_profiles_claiming_one_name_leave_the_index_alone(self): + # The bundle holds one profile per name, so a rebuild would pick a winner by + # directory order and drop the other without a word. + self.t.write("V", "machine/base.json", {"type": "machine", "name": "base"}) + self.t.write("V", "machine/HSN/base.json", {"type": "machine", "name": "base"}) + self.t.index("V", "machine", "base", "machine/HSN/base.json") + before = self.t.bytes_map() + rc, out = self.run_command("update-index") + self.assertEqual(rc, 1, out) + self.assertIn('2 profiles are named "base"', out) + self.assertIn("machine/base.json", out) + self.assertIn("machine/HSN/base.json", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_profile_type_rebuilds_only_that_section(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + rc, out = self.run_command("update-index", "--profile-type", "filament") + self.assertEqual(rc, 0, out) + index = self.t.read_index("V") + self.assertEqual([e["name"] for e in index["filament_list"]], ["A"]) + self.assertNotIn("process_list", index) + + def test_an_up_to_date_index_is_left_byte_identical(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.run_command("update-index") + before = self.t.bytes_map() + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.bytes_map(), before) + + def test_dry_run_writes_nothing(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("update-index", "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn("would be rebuilt", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_a_json_file_with_no_bundle_is_never_touched(self): + # resources/profiles/blacklist.json is a .json with no directory beside + # it. Enumerating vendors by stem once wrote four empty *_list keys into it. + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + stray = os.path.join(self.t.profiles, "blacklist.json") + with open(stray, "wb") as f: + f.write(b'{"filament": ["GFSA03"]}') + rc, out = self.run_command("update-index") + self.assertEqual(rc, 0, out) + with open(stray, "rb") as f: + self.assertEqual(f.read(), b'{"filament": ["GFSA03"]}') + + +# --------------------------------------------------------------------------- +# check +# --------------------------------------------------------------------------- + +class TestCheck(TreeCase): + def bundle(self): + """A bundle that passes every per-vendor check.""" + self.t.write("V", "filament/A.json", { + "type": "filament", "name": "A", "instantiation": "true", + "filament_id": "OFaaaaaa", "filament_type": ["PLA"], + "filament_vendor": ["AV"], "compatible_printers": ["M 0.4 nozzle"], + "setting_id": apt.generate_preset_setting_id("V", "filament", "A")}) + self.t.index("V", "filament", "A", "filament/A.json") + return self.t + + def per_vendor_errors(self, *argv): + """Run the per-vendor checks alone, which is what --vendor narrows.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_filament_compatible_printers(self.t.profiles, "V") + name_errors, _warn = apt.check_name_consistency(self.t.profiles, "V") + errors += name_errors + errors += apt.check_vector_type_keys(self.t.profiles, "V") + errors += apt.check_filament_id_length(self.t.profiles, "V") + conflict, _warn = apt.check_conflict_keys(self.t.profiles, "V") + errors += conflict + materials, _warn = apt.check_machine_default_materials(self.t.profiles, "V") + errors += materials + return errors, buf.getvalue() + + def test_a_clean_bundle_reports_nothing(self): + self.bundle() + errors, out = self.per_vendor_errors() + self.assertEqual(errors, 0, out) + + def test_an_instantiated_filament_needs_compatible_printers(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "instantiation": "true"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("'compatible_printers' missing", out) + + def test_a_library_filament_may_leave_compatible_printers_empty(self): + # The shared library is exempt from that rule and nothing else. + self.t.write(apt.OFL, "filament/A.json", + {"type": "filament", "name": "A", "instantiation": "true"}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_filament_compatible_printers(self.t.profiles, apt.OFL) + self.assertEqual(errors, 0, buf.getvalue()) + + def test_the_library_is_checked_like_any_other_bundle(self): + # A file the library's own index does not reference must fail plain + # `check`, now that the per-vendor pass no longer skips it. + self.t.write(apt.OFL, "filament/Stray.json", + {"type": "filament", "name": "Stray"}) + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) + self.assertIn(f"{apt.OFL}/filament/Stray.json: no {apt.OFL}.json list " + f"references it", out) + + def test_a_duplicate_key_is_an_error(self): + self.bundle().write_raw("V", "filament/B.json", + b'{"type":"filament","name":"B","name":"B2"}') + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Duplicate key", out) + + def test_the_index_and_the_file_must_agree_on_the_name(self): + self.bundle() + self.t.write("V", "filament/C.json", {"type": "filament", "name": "Other"}) + self.t.index("V", "filament", "C", "filament/C.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("name mismatch", out) + + def test_an_index_entry_with_no_file_is_an_error(self): + self.bundle() + self.t.index("V", "filament", "Gone", "filament/Gone.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Missing sub profile", out) + + def test_a_vector_option_may_not_be_a_scalar(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "filament_type": "PLA"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("must be an array", out) + + def test_renamed_and_old_option_may_not_co_exist(self): + self.bundle().write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "extruder_clearance_radius": "45", "extruder_clearance_max_radius": "68"}) + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Conflict keys", out) + + def test_the_length_rule_only_binds_indexed_presets(self): + # A file the index never loads cannot break AMS matching, and some + # bundles ship such orphans from before the rule existed. + self.bundle().write("V", "filament/Long.json", { + "type": "filament", "name": "Long", "filament_id": "OFtoolongforams"}) + errors, out = self.per_vendor_errors() + self.assertEqual(errors, 0, out) + self.t.index("V", "filament", "Long", "filament/Long.json") + errors, out = self.per_vendor_errors() + self.assertGreater(errors, 0) + self.assertIn("Filament id too long", out) + + def test_obsolete_key_warnings_exclude_active_and_renamed_options(self): + self.bundle().write("V", "filament/B.json", { + "type": "filament", "name": "B", "silent_mode": "0", + "anisotropic_surfaces": "0", "extruder_type": ["Direct Drive"], + "extruder_clearance_max_radius": "68"}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + warnings = apt.check_obsolete_keys(self.t.profiles, "V") + self.assertEqual(warnings, 2) + self.assertIn("Obsolete key", buf.getvalue()) + + def test_obsolete_key_warnings_run_without_a_flag(self): + self.t.write("V", "filament/A.json", { + "type": "filament", "name": "A", "silent_mode": "0"}) + self.run_command("update-index") + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) # normalization also rejects the obsolete key + self.assertIn("Obsolete key: 'silent_mode' found in V/filament/A.json", out) + self.assertIn("Files with warnings : 1", out) + + def test_a_default_material_must_exist_somewhere(self): + self.bundle().write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "default_materials": "A;Nope"}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, _warn = apt.check_machine_default_materials(self.t.profiles, "V") + self.assertEqual(errors, 1) + self.assertIn("'Nope'", buf.getvalue()) + + def test_a_default_material_fails_check_without_a_flag(self): + # The reference check is part of the default run, not an opt-in: a + # dangling name has to fail plain `check`. + self.bundle() + self.t.write("V", "machine/M.json", { + "type": "machine", "name": "M 0.4 nozzle", + "default_filament_profile": ["A", "Nope"]}) + self.t.index("V", "machine", "M 0.4 nozzle", "machine/M.json") + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) + self.assertIn("Missing filament profile: 'Nope'", out) + + def test_the_stray_user_directory_is_not_a_vendor(self): + # A local validator run leaves resources/profiles/user/ behind; an + # unscoped check must not count it as a bundle and warn about it. + self.bundle() + for sub in apt.PROFILE_SUBDIRS: + os.makedirs(os.path.join(self.t.profiles, apt.USER_DIR, "default", sub)) + _rc, out = self.run_command("check") + self.assertIn("Checked vendors : 1", out) + self.assertNotIn("user", out) + + def names(self, vendor="V"): + """The preset name check for one bundle, which is what --vendor narrows.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_preset_name_uniqueness(self.t.profiles, vendor) + return errors, buf.getvalue() + + def test_one_bundle_may_not_hold_two_profiles_of_a_name(self): + self.bundle().write("V", "filament/dup.json", { + "type": "filament", "name": "A", "instantiation": "false"}) + errors, out = self.names() + self.assertEqual(errors, 1, out) + self.assertIn('V has 2 filament profiles named "A"', out) + + def test_an_unindexed_twin_counts_as_a_duplicate(self): + # The case this check was written for: a stale copy of a base profile in + # machine/, which no per-vendor check walked, one index edit away from + # silently deciding which of the two a whole bundle inherits from. + self.bundle() + self.t.write("V", "machine/HSN/base.json", + {"type": "machine", "name": "V base"}) + self.t.index("V", "machine", "V base", "machine/HSN/base.json") + self.t.write("V", "machine/base.json", {"type": "machine", "name": "V base"}) + errors, out = self.names() + self.assertEqual(errors, 1, out) + self.assertIn("machine/HSN/base.json", out) + self.assertIn("machine/base.json", out) + + def test_one_name_in_two_types_is_not_a_clash(self): + self.bundle() + self.t.write("V", "process/same.json", {"type": "process", "name": "A"}) + errors, out = self.names() + self.assertEqual(errors, 0, out) + + def test_a_name_is_per_bundle_not_global(self): + # fdm_machine_common exists in 60 shipped bundles; the name is scoped to the + # bundle that resolves it, so sharing one across vendors is not a clash. + for vendor in ("V", "W"): + self.t.write(vendor, "machine/common.json", + {"type": "machine", "name": "fdm_machine_common"}) + self.t.index(vendor, "machine", "fdm_machine_common", "machine/common.json") + for vendor in ("V", "W"): + errors, out = self.names(vendor) + self.assertEqual(errors, 0, out) + + def coverage(self, vendor="V"): + """The index-coverage check for one bundle: (errors, gaps, output).""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, gaps = apt.check_index_coverage(self.t.profiles, vendor) + return errors, gaps, buf.getvalue() + + def test_a_file_no_list_references_is_an_error(self): + self.bundle().write("V", "filament/Stray.json", + {"type": "filament", "name": "Stray"}) + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexed"], 1) + self.assertIn("no V.json list references it", out) + + def test_a_file_with_no_type_is_its_own_category(self): + # update-index cannot place it, so "add it to the index" is not the remedy. + self.bundle().write("V", "filament/Stray.json", {"name": "Stray"}) + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexable"], 1) + self.assertIn("declares no profile type", out) + + def test_an_unparsable_unlisted_file_is_reported_too(self): + self.bundle().write_raw("V", "filament/Broken.json", b"{ not json") + errors, gaps, out = self.coverage() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unindexable"], 1) + + def test_a_dotted_sub_path_still_counts_as_listed(self): + self.bundle() + self.t.write("V", "filament/Dotted.json", + {"type": "filament", "name": "Dotted"}) + self.t.index("V", "filament", "Dotted", "filament/./Dotted.json") + errors, _gaps, out = self.coverage() + self.assertEqual(errors, 0, out) + + def test_a_data_file_is_not_expected_in_the_index(self): + self.bundle().write("V", "filament/filaments_color_codes.json", + {"data": [], "total": 0}) + errors, _gaps, out = self.coverage() + self.assertEqual(errors, 0, out) + + def test_a_bundle_with_no_index_is_left_to_the_name_check(self): + # Every file unlisted because there is no list at all is one problem, not + # one per file; check_name_consistency reports the missing index. + self.t.write("W", "filament/A.json", {"type": "filament", "name": "A"}) + os.remove(self.t.index_path("W")) + errors, _gaps, out = self.coverage("W") + self.assertEqual(errors, 0, out) + + def test_the_remedy_is_printed_once_not_once_per_file(self): + self.bundle() + for n in range(5): + self.t.write("V", f"filament/Stray{n}.json", + {"type": "filament", "name": f"Stray{n}"}) + self.t.write("V", "filament/NoType.json", {"name": "NoType"}) + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) + self.assertEqual(out.count("update-index\" to add them"), 1, out) + self.assertEqual(out.count("or delete them"), 1, out) + self.assertIn("5 unreferenced file(s)", out) + self.assertIn("1 unreferenced file(s)", out) + + def test_setting_id_uniqueness_is_tree_wide(self): + # Two presets sharing vendor/type/name mint one id, so the collision + # only shows up in a pass that has seen the whole tree. + shared = apt.generate_preset_setting_id("V", "filament", "A") + for rel in ("filament/A.json", "filament/nested/A.json"): + self.t.write("V", rel, {"type": "filament", "name": "A", + "instantiation": "true", "setting_id": shared}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_setting_id_uniqueness(self.t.profiles) + self.assertGreater(errors, 0) + self.assertIn("globally unique", buf.getvalue()) + + def test_a_base_profile_must_not_carry_a_setting_id(self): + self.t.write("V", "filament/base.json", { + "type": "filament", "name": "base", "instantiation": "false", + "setting_id": apt.generate_preset_setting_id("V", "filament", "base")}) + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors = apt.check_setting_id_uniqueness(self.t.profiles) + self.assertEqual(errors, 1) + self.assertIn("must not have a", buf.getvalue()) + + +# --------------------------------------------------------------------------- +# check: normalize and update-index would change nothing +# --------------------------------------------------------------------------- + +class TestNormalized(TreeCase): + """The pass that holds a bundle to the shape normalize and update-index write.""" + + def normalize(self): + """Put the tree in that shape, the way a contributor is told to.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + apt.main(["normalize", "--profiles", self.t.profiles]) + apt.main(["update-index", "--profiles", self.t.profiles]) + return buf.getvalue() + + def normalized(self, vendor="V"): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + errors, gaps = apt.check_normalized(self.t.profiles, vendor) + return errors, gaps, buf.getvalue() + + def test_a_bundle_the_two_commands_just_wrote_reports_nothing(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.t.write("V", "process/B.json", {"type": "process", "name": "B"}) + self.normalize() + errors, _gaps, out = self.normalized() + self.assertEqual(errors, 0, out) + + def test_a_profile_fix_would_rewrite_is_an_error(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + self.normalize() + # version belongs to the bundle, in .json, never to a preset. + data = self.t.read("V", "filament/A.json") + data["version"] = "01.00.00.00" + self.t.write("V", "filament/A.json", data) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unnormalized"], 1, out) + self.assertIn("V/filament/A.json: normalize would remove version", out) + + def test_an_index_update_index_would_rebuild_is_an_error(self): + for name, parent in (("B", "A"), ("A", None)): + data = {"type": "filament", "name": name} + if parent: + data["inherits"] = parent + self.t.write("V", f"filament/{name}.json", data) + self.normalize() + # Parents-first is what lets the loader resolve inherits in one pass; a + # hand-edited list that puts the child first still names every file. + index = self.t.read_index("V") + index["filament_list"].reverse() + self.t.write_index("V", index) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["stale_index"], 1, out) + self.assertIn("V.json: update-index would rebuild filament_list", out) + + def test_an_unbuildable_index_is_left_to_the_checks_that_name_it(self): + # update-index refuses to rebuild a bundle where two files claim one name, + # so "would be rebuilt" on top of the duplicate-name error would be noise. + self.t.write("V", "machine/base.json", {"type": "machine", "name": "base"}) + self.normalize() + self.t.write("V", "machine/HSN/base.json", {"type": "machine", "name": "base"}) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 0, out) + self.assertEqual(gaps["stale_index"], 0, out) + + def test_a_bundle_with_no_index_still_has_its_files_checked(self): + self.t.write("V", "filament/A.json", + {"type": "filament", "name": "A", "is_custom_defined": "0"}) + os.remove(self.t.index_path("V")) + errors, gaps, out = self.normalized() + self.assertEqual(errors, 1, out) + self.assertEqual(gaps["unnormalized"], 1, out) + self.assertEqual(gaps["stale_index"], 0, out) + + def test_the_shared_base_bundle_is_covered_too(self): + # normalize and update-index own the shape of every bundle, the shared + # library included. + self.t.write(apt.OFL, "filament/A.json", + {"type": "filament", "name": "A", "version": "01.00.00.00"}) + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) + self.assertIn(f"{apt.OFL}/filament/A.json: normalize would remove version", out) + + def test_each_remedy_is_printed_once_for_the_whole_run(self): + for n in range(3): + self.t.write("V", f"filament/A{n}.json", + {"type": "filament", "name": f"A{n}", + "version": "01.00.00.00"}) + self.t.write("W", "filament/B.json", {"type": "filament", "name": "B"}) + rc, out = self.run_command("check") + self.assertEqual(rc, 1, out) + self.assertIn("3 profile file(s) above are not what", out) + self.assertEqual(out.count('normalize" writes: run it and commit'), 1, out) + self.assertIn("2 vendor index(es) above are not what", out) + self.assertEqual(out.count('update-index" writes: run it and commit'), 1, out) + + +# --------------------------------------------------------------------------- +# CLI dispatch +# --------------------------------------------------------------------------- + +class TestDispatch(TreeCase): + def test_each_command_reaches_its_own_writer(self): + self.t.write("V", "filament/A.json", {"type": "filament", "name": "A"}) + for command, expected in (("normalize", "normalized"), + ("trim", "unreferenced"), + ("update-index", "vendor index")): + with self.subTest(command=command): + rc, out = self.run_command(command, "--dry-run") + self.assertEqual(rc, 0, out) + self.assertIn(expected, out) + + def test_an_option_belongs_to_one_command_only(self): + for argv in (["trim", "--force"], + ["update-index", "--filament-id"], + ["check", "--profile-type", "filament"]): + with self.subTest(argv=argv): + with self.assertRaises(SystemExit) as cm, \ + contextlib.redirect_stdout(io.StringIO()), \ + contextlib.redirect_stderr(io.StringIO()): + apt.main([*argv, "--profiles", self.t.profiles]) + self.assertEqual(cm.exception.code, 2) + + def test_an_unknown_vendor_stops_the_run(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + before = self.t.bytes_map() + rc, out = self.run_command("normalize", "--vendor", "Nope") + self.assertEqual(rc, 1) + self.assertIn("unknown vendor", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_an_empty_vendor_means_every_vendor(self): + self.t.write("V", "filament/A.json", {"name": "A"}) + rc, out = self.run_command("normalize", "--vendor", "") + self.assertEqual(rc, 0, out) + self.assertEqual(self.t.read("V", "filament/A.json")["type"], "filament") + + +# --------------------------------------------------------------------------- +# the real tree +# --------------------------------------------------------------------------- + +@unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") +class TestRealTree(unittest.TestCase): + def test_check_passes(self): + # The exact CI invocation, return code included. + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = apt.main(["check"]) + self.assertEqual(rc, 0, buf.getvalue()) + + def test_the_shipped_tree_needs_no_fix(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = apt.normalize_profiles(REAL_PROFILES, dry_run=True) + self.assertEqual(errors, 0, buf.getvalue()) + self.assertEqual(changed, 0, buf.getvalue()) + + def test_the_shipped_indexes_need_no_rebuild(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = apt.update_profile_indexes(REAL_PROFILES, dry_run=True) + self.assertEqual(errors, 0, buf.getvalue()) + self.assertEqual(changed, 0, buf.getvalue()) + + def test_no_shipped_bundle_is_a_stray_json_file(self): + # blacklist.json has no directory beside it, so it is not a vendor. + self.assertNotIn("blacklist", apt.list_vendor_names(REAL_PROFILES)) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/tests/test_setting_id.py b/scripts/tests/test_setting_id.py new file mode 100644 index 0000000000..f27438788f --- /dev/null +++ b/scripts/tests/test_setting_id.py @@ -0,0 +1,899 @@ +#!/usr/bin/env python3 +"""Tests for the setting_id half of scripts/orca_profile_tool.py (stdlib unittest, no +external deps). + +Run from the repo root: python -m unittest discover -s scripts/tests -v +""" + +import contextlib +import io +import json +import os +import shutil +import sys +import tempfile +import unittest +import uuid + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +import orca_profile_tool as afi # noqa: E402 + +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..")) +REAL_PROFILES = os.path.join(REPO_ROOT, "resources", "profiles") + + +# --------------------------------------------------------------------------- +# helpers: synthetic profile trees +# --------------------------------------------------------------------------- + +def preset(name, instantiation=True, setting_id=None, settings_id=None, + filament_id=None, type_name="filament", **extra): + """A preset in the canonical key order the shipped profiles use.""" + data = {"type": type_name, "name": name, "from": "system"} + if setting_id is not None: + data["setting_id"] = setting_id + if settings_id is not None: + data["settings_id"] = settings_id + if filament_id is not None: + data["filament_id"] = filament_id + data["instantiation"] = "true" if instantiation else "false" + data.update(extra) + return data + + +class SettingTree: + """A throwaway resources/profiles-shaped directory of setting_id-bearing bundles. + + A bundle is a `/` directory plus the sibling `.json` index + that makes list_vendor_names() see it; presets live under filament/, + process/ and machine/, the three subdirs generate_setting_ids walks. + + write() also registers filament presets in the index's filament_list, the + way a shipped bundle does. generate_setting_ids never reads that list, but + generate_filament_ids does: without it the filament half of the tool is a + no-op on this tree, and the tests that assert --setting-id leaves + filament_ids alone would hold for the wrong reason. + """ + + def __init__(self): + self.dir = tempfile.mkdtemp(prefix="setting_id_test_") + self.profiles = os.path.join(self.dir, "profiles") + os.makedirs(self.profiles) + + def cleanup(self): + shutil.rmtree(self.dir, ignore_errors=True) + + def index_path(self, vendor): + return os.path.join(self.profiles, vendor + ".json") + + def add_vendor(self, vendor): + """Create the bundle dir and its index; idempotent, keeps the list.""" + for sub in afi.PROFILE_SUBDIRS: + os.makedirs(os.path.join(self.profiles, vendor, sub), exist_ok=True) + if not os.path.exists(self.index_path(vendor)): + self._write_index(vendor, {"name": vendor, "version": "01.00.00.00", + "filament_list": []}) + + def _write_index(self, vendor, index): + with open(self.index_path(vendor), "w", encoding="utf-8", + newline="\n") as f: + json.dump(index, f, indent=4, ensure_ascii=False) + + def register(self, vendor, subdir, name): + """Add a filament preset to the bundle index's filament_list.""" + with open(self.index_path(vendor), encoding="utf-8") as f: + index = json.load(f) + sub_path = os.path.join(subdir, name + ".json").replace(os.sep, "/") + index["filament_list"].append({"name": name, "sub_path": sub_path}) + self._write_index(vendor, index) + + def path(self, vendor, subdir, name): + return os.path.join(self.profiles, vendor, subdir, name + ".json") + + def write(self, vendor, subdir, data, name=None): + """Write a preset as indented LF JSON; returns its path.""" + self.add_vendor(vendor) + file_name = name if name is not None else data["name"] + path = self.path(vendor, subdir, file_name) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(data, f, indent=4, ensure_ascii=False) + f.write("\n") + if subdir.split(os.sep)[0] == "filament" and data.get("name"): + self.register(vendor, subdir, file_name) + return path + + def write_raw(self, vendor, subdir, name, raw): + """Write exact bytes (BOM, CRLF, tabs, broken JSON); returns its path.""" + self.add_vendor(vendor) + path = self.path(vendor, subdir, name) + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "wb") as f: + f.write(raw) + return path + + def read(self, vendor, subdir, name): + with open(self.path(vendor, subdir, name), encoding="utf-8-sig") as f: + return json.load(f) + + def raw(self, vendor, subdir, name): + with open(self.path(vendor, subdir, name), "rb") as f: + return f.read() + + def bytes_map(self): + """relative path -> bytes, for every file in the tree.""" + out = {} + for root, dirs, files in os.walk(self.profiles): + dirs.sort() + for name in sorted(files): + path = os.path.join(root, name) + with open(path, "rb") as f: + out[os.path.relpath(path, self.profiles)] = f.read() + return out + + # -- pipeline wrappers --------------------------------------------------- + + def run(self, vendors=None, dry_run=False): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.generate_setting_ids(self.profiles, vendors, dry_run) + return changed, errors, buf.getvalue() + + def run_filament_ids(self, vendors=None, dry_run=False): + """The OTHER half of --generate.""" + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.generate_filament_ids(self.profiles, vendors, dry_run) + return changed, errors, buf.getvalue() + + +class SettingTreeCase(unittest.TestCase): + def setUp(self): + self.t = SettingTree() + self.addCleanup(self.t.cleanup) + + +# --------------------------------------------------------------------------- +# mint: the C++/Python byte-identity contract +# --------------------------------------------------------------------------- + +class TestSettingIdMint(unittest.TestCase): + # Copied verbatim from tests/libslic3r/test_preset_setting_id.cpp: the C++ + # generate_preset_setting_id() recomputes these ids on the fly, so the two + # implementations must stay byte-identical. + GOLDEN = [ + ("Afinia", "filament", "Afinia ABS @Afinia H400", "TL34qSVkppBvMvgH"), + ("Afinia", "process", "0.20mm Standard @Afinia H400", "FzmtNsy7XQvpd7w0"), + ("Afinia", "machine", "Afinia H400 0.4 nozzle", "r4FZagW0S8uoaJPd"), + ("Anycubic", "filament", "Generic PLA @Anycubic Kobra 2", "YIWGGLQ8Oepd30Fv"), + ("Creality", "process", "0.16mm Optimal @Creality Ender-3 V3", "2Nrbq8PxssUPBLza"), + ("Elegoo", "machine", "Elegoo Neptune 4 0.4 nozzle", "69QdWuRQwAZk9rFu"), + ] + + def test_golden_vectors(self): + for vendor, type_name, name, expected in self.GOLDEN: + with self.subTest(name=name): + self.assertEqual( + afi.generate_preset_setting_id(vendor, type_name, name), expected) + + def test_namespace_and_length_are_frozen(self): + # Baked into the C++ side and into every shipped profile; never change it. + self.assertEqual(afi.NAMESPACE, + uuid.UUID("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f")) + self.assertEqual(afi.SETTING_ID_LENGTH, 16) + self.assertEqual( + afi.ALPHABET, + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") + self.assertEqual(len(afi.ALPHABET), 62) + + def test_format_is_sixteen_alphabet_chars(self): + for vendor, type_name, name in [("Creality", "filament", "CR PLA @Ender"), + ("Elegoo", "machine", "Elegoo Neptune 4"), + ("拓竹", "filament", "拓竹 PLA @P1")]: + with self.subTest(name=name): + sid = afi.generate_preset_setting_id(vendor, type_name, name) + self.assertEqual(len(sid), afi.SETTING_ID_LENGTH) + self.assertTrue(set(sid) <= set(afi.ALPHABET), sid) + + def test_is_the_low_base62_digits_of_the_uuid5(self): + # Independent re-implementation of the whole rule, key layout included. + for vendor, type_name, name, _expected in self.GOLDEN: + u = uuid.uuid5(afi.NAMESPACE, f"{vendor}/{type_name}/{name}") + n = int.from_bytes(u.bytes, "big") + digits = "" + for _ in range(afi.SETTING_ID_LENGTH): + digits = afi.ALPHABET[n % 62] + digits + n //= 62 + self.assertEqual(afi.generate_preset_setting_id(vendor, type_name, name), + digits) + + def test_deterministic(self): + a = afi.generate_preset_setting_id("VendorX", "filament", "My PLA") + self.assertEqual(a, afi.generate_preset_setting_id("VendorX", "filament", "My PLA")) + + def test_every_identity_component_changes_the_id(self): + base = afi.generate_preset_setting_id("VendorX", "filament", "My PLA") + self.assertNotEqual(base, afi.generate_preset_setting_id("VendorY", "filament", "My PLA")) + self.assertNotEqual(base, afi.generate_preset_setting_id("VendorX", "process", "My PLA")) + self.assertNotEqual(base, afi.generate_preset_setting_id("VendorX", "filament", "My PETG")) + + def test_key_is_a_flat_slash_join(self): + # The mint key is "//" with no escaping, so a "/" in + # a component shifts the split — harmless in practice (vendor is a + # directory name and type is one of PROFILE_SUBDIRS), but it is what the + # C++ side does too and the two must agree byte for byte. + self.assertEqual(afi.generate_preset_setting_id("A/B", "filament", "C"), + afi.generate_preset_setting_id("A", "B/filament", "C")) + + +class TestBase62Tail(unittest.TestCase): + def test_hand_computed_digits(self): + self.assertEqual(afi._base62_tail(0, 4), "0000") + self.assertEqual(afi._base62_tail(61, 1), "z") # last alphabet char + self.assertEqual(afi._base62_tail(62, 2), "10") # 1*62 + 0 + self.assertEqual(afi._base62_tail(3843, 2), "zz") # 61*62 + 61 + self.assertEqual(afi._base62_tail(3907, 3), "111") # 62^2 + 62 + 1 + + def test_keeps_only_the_low_digits(self): + self.assertEqual(afi._base62_tail(62, 1), "0") # high digit dropped + self.assertEqual(afi._base62_tail(3907, 2), "11") + + +# --------------------------------------------------------------------------- +# assignment +# --------------------------------------------------------------------------- + +class TestAssignment(SettingTreeCase): + def test_instantiation_is_read_exactly_as_the_validator_reads_it(self): + # check_setting_id_uniqueness tests `instantiation == "true"` strictly. + # Anything looser here would hand an id to a preset the validator calls + # a base profile, and the two would fight over it on every run. + for name, value in [("Boolean", True), ("Capitalised", "True"), + ("Numeric", 1), ("Absent", None)]: + with self.subTest(instantiation=value): + data = {"type": "filament", "name": name, "from": "system"} + if value is not None: + data["instantiation"] = value + self.t.write("VendorA", "filament", data) + before = self.t.bytes_map() + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (0, 0), out) + self.assertEqual(self.t.bytes_map(), before) + + def test_a_bundle_without_an_index_is_still_assigned(self): + # setting_id is a per-file property, and the validator walks every + # directory. A bundle whose index has not landed yet must be fixable, + # or the validator flags files this tool refuses to touch. + path = os.path.join(self.t.profiles, "Noindex", "process", "Q.json") + os.makedirs(os.path.dirname(path)) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(preset("Q", type_name="process"), f, indent=4) + self.assertFalse(os.path.exists(self.t.index_path("Noindex"))) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + with open(path, encoding="utf-8") as f: + self.assertEqual(json.load(f)["setting_id"], + afi.generate_preset_setting_id("Noindex", "process", "Q")) + + def test_assigns_across_every_profile_subdir(self): + self.t.write("VendorA", "filament", preset("A PLA @P1")) + self.t.write("VendorA", "process", + preset("0.20mm Standard @P1", type_name="process")) + self.t.write("VendorA", "machine", + preset("P1 0.4 nozzle", type_name="machine")) + # os.walk recursion: a preset in a nested directory is walked too. + self.t.write("VendorA", os.path.join("filament", "nested"), + preset("A PETG @P1")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (4, 0), out) + for subdir, type_name, name in [ + ("filament", "filament", "A PLA @P1"), + ("process", "process", "0.20mm Standard @P1"), + ("machine", "machine", "P1 0.4 nozzle"), + (os.path.join("filament", "nested"), "filament", "A PETG @P1")]: + self.assertEqual( + self.t.read("VendorA", subdir, name)["setting_id"], + afi.generate_preset_setting_id("VendorA", type_name, name), + msg=name) + + def test_type_comes_from_the_subdirectory_not_the_type_field(self): + # The subdir name is the type name (Preset::get_type_string()); a stale + # "type" field inside the file does not enter the id. + self.t.write("VendorA", "process", preset("Odd @P1", type_name="filament")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual(self.t.read("VendorA", "process", "Odd @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "process", "Odd @P1")) + + def test_idempotent(self): + self.t.write("VendorA", "filament", preset("A PLA @P1")) + self.t.write("VendorA", "process", + preset("0.20mm Standard @P1", type_name="process")) + self.t.write("VendorA", "filament", preset("A PLA @base", instantiation=False, + setting_id="LEFTOVER00000000")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (3, 0), out) + + after_first = self.t.bytes_map() + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (0, 0), out) + self.assertEqual(self.t.bytes_map(), after_first) + + def test_stale_value_is_replaced_in_place(self): + path = self.t.write("VendorA", "filament", + preset("A PLA @P1", setting_id="0000000000000000", + filament_id="OFabc123")) + before = self.t.raw("VendorA", "filament", "A PLA @P1") + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + want = afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1") + self.assertEqual(self.t.read("VendorA", "filament", "A PLA @P1")["setting_id"], + want) + raw = self.t.raw("VendorA", "filament", "A PLA @P1") + self.assertEqual(raw.count(b'"setting_id"'), 1) # replaced, not appended + self.assertEqual(raw, before.replace(b'"0000000000000000"', + b'"%s"' % want.encode())) + self.assertTrue(os.path.isfile(path)) + + def test_missing_value_is_inserted_before_filament_id(self): + self.t.write("VendorA", "filament", + preset("A PLA @P1", filament_id="OFabc123")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + text = self.t.raw("VendorA", "filament", "A PLA @P1").decode("utf-8") + want = afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1") + self.assertIn(f'"setting_id": "{want}"', text) + self.assertLess(text.index('"setting_id"'), text.index('"filament_id"')) + + def test_base_profiles_are_stripped(self): + self.t.write("VendorA", "filament", + preset("A PLA @base", instantiation=False, + setting_id="0000000000000000", filament_id="OFabc123")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + data = self.t.read("VendorA", "filament", "A PLA @base") + self.assertNotIn("setting_id", data) + self.assertEqual(data["filament_id"], "OFabc123") # nothing else touched + self.assertEqual(data["instantiation"], "false") + + def test_base_profile_without_instantiation_key_is_stripped(self): + # No "instantiation" key at all == not instantiated (str(None) != "true"). + data = {"type": "filament", "name": "A PLA @root", "from": "system", + "setting_id": "0000000000000000"} + self.t.write("VendorA", "filament", data) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + self.assertNotIn("setting_id", self.t.read("VendorA", "filament", "A PLA @root")) + + def test_misspelled_settings_id_is_dropped(self): + self.t.write("VendorA", "filament", + preset("A PLA @base", instantiation=False, + settings_id="0000000000000000")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + data = self.t.read("VendorA", "filament", "A PLA @base") + self.assertNotIn("settings_id", data) + self.assertNotIn("setting_id", data) + + def test_typo_drop_and_assignment_are_one_file_change(self): + self.t.write("VendorA", "filament", + preset("A PLA @P1", settings_id="0000000000000000", + filament_id="OFabc123")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) # ONE counted file change + data = self.t.read("VendorA", "filament", "A PLA @P1") + self.assertNotIn("settings_id", data) + self.assertEqual(data["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) + + def test_reserved_vendor_keeps_instantiated_ids_and_loses_base_ones(self): + # BBL owns the authoritative "G*" cloud id space: its instantiated + # presets are never rewritten, its base declarations still are stripped. + self.t.write("BBL", "filament", + preset("Bambu ABS @BBL A1", setting_id="GFSB00_07")) + self.t.write("BBL", "filament", preset("Bambu ABS @P1 no id")) + self.t.write("BBL", "filament", + preset("Bambu ABS @base", instantiation=False, + setting_id="GFSB00_00")) + kept = self.t.raw("BBL", "filament", "Bambu ABS @BBL A1") + kept_idless = self.t.raw("BBL", "filament", "Bambu ABS @P1 no id") + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) # only the base profile + self.assertEqual(self.t.raw("BBL", "filament", "Bambu ABS @BBL A1"), kept) + self.assertEqual(self.t.raw("BBL", "filament", "Bambu ABS @P1 no id"), + kept_idless) + self.assertNotIn("setting_id", + self.t.read("BBL", "filament", "Bambu ABS @base")) + + def test_reserved_vendors_misspelled_key_is_corrected_not_dropped(self): + # A reserved vendor's id is authoritative, so there is no formula to + # fall back on. Dropping the typo and stopping there would leave the + # preset with no setting_id at all and no way for the tool to give it + # one - a validator error nothing can clear. Fix the key, keep the value. + self.t.write("BBL", "filament", + preset("Bambu PLA @P1", settings_id="GFSA00_01")) + # A base profile still just loses the key; it may not carry an id. + self.t.write("BBL", "filament", + preset("Bambu PLA @base", instantiation=False, + settings_id="GFSA00_00")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (2, 0), out) + fixed = self.t.read("BBL", "filament", "Bambu PLA @P1") + self.assertNotIn("settings_id", fixed) + self.assertEqual(fixed["setting_id"], "GFSA00_01") + base = self.t.read("BBL", "filament", "Bambu PLA @base") + self.assertNotIn("settings_id", base) + self.assertNotIn("setting_id", base) + # Idempotent: the corrected file is what the next run expects to see. + self.assertEqual(self.t.run()[:2], (0, 0)) + + def test_a_managed_vendors_misspelled_key_is_still_replaced_by_the_mint(self): + self.t.write("VendorA", "filament", + preset("A PLA @P1", settings_id="whatever")) + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + data = self.t.read("VendorA", "filament", "A PLA @P1") + self.assertNotIn("settings_id", data) + self.assertEqual(data["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) + + def test_reserved_vendors_constant(self): + self.assertEqual(afi.RESERVED_VENDORS, {"BBL"}) + self.assertEqual(afi.PROFILE_SUBDIRS, ("filament", "process", "machine")) + + +# --------------------------------------------------------------------------- +# --vendor narrowing +# --------------------------------------------------------------------------- + +class TestVendorNarrowing(SettingTreeCase): + def setUp(self): + super().setUp() + self.t.write("VendorA", "filament", preset("A PLA @P1")) + self.t.write("VendorB", "filament", preset("B PLA @P1")) + + def test_restricts_writes_to_the_named_vendor(self): + before = self.t.bytes_map() + + changed, errors, out = self.t.run(vendors=["VendorA"]) + + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual(self.t.read("VendorA", "filament", "A PLA @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) + self.assertEqual(self.t.raw("VendorB", "filament", "B PLA @P1"), + before[os.path.join("VendorB", "filament", "B PLA @P1.json")]) + # ... and the vendor left out is written by a later run, unchanged in kind. + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual(self.t.read("VendorB", "filament", "B PLA @P1")["setting_id"], + afi.generate_preset_setting_id("VendorB", "filament", "B PLA @P1")) + + def test_unknown_vendor_reports_and_writes_nothing(self): + before = self.t.bytes_map() + + changed, errors, out = self.t.run(vendors=["Nope"]) + + self.assertEqual((changed, errors), (0, 1)) + self.assertIn("Nope", out) + self.assertEqual(self.t.bytes_map(), before) + + def test_unknown_vendor_blocks_the_known_ones_too(self): + before = self.t.bytes_map() + changed, errors, _out = self.t.run(vendors=["VendorA", "Nope"]) + self.assertEqual((changed, errors), (0, 1)) + self.assertEqual(self.t.bytes_map(), before) + + +# --------------------------------------------------------------------------- +# --dry-run +# --------------------------------------------------------------------------- + +class TestDryRun(SettingTreeCase): + def test_writes_nothing_and_previews_the_real_run(self): + self.t.write("VendorA", "filament", preset("A PLA @P1")) + self.t.write("VendorA", "process", + preset("0.20mm Standard @P1", type_name="process")) + self.t.write("VendorA", "filament", + preset("A PLA @base", instantiation=False, + setting_id="0000000000000000")) + before = self.t.bytes_map() + + dry_changed, dry_errors, out = self.t.run(dry_run=True) + + self.assertEqual((dry_changed, dry_errors), (3, 0), out) + self.assertIn("would", out) + self.assertEqual(self.t.bytes_map(), before) # nothing written + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (dry_changed, dry_errors), out) + self.assertNotEqual(self.t.bytes_map(), before) + + +# --------------------------------------------------------------------------- +# byte preservation +# --------------------------------------------------------------------------- + +class TestBytePreservation(SettingTreeCase): + CRLF_TEXT = ( + '{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "CRLF PLA @P1",\r\n' + '\t"from": "system",\r\n' + '\t"filament_id": "OFabc123",\r\n' + '\t"instantiation": "true",\r\n' + '\t"filament_type": [\r\n' + '\t\t"PLA"\r\n' + '\t]\r\n' + '}\r\n' + ) + + def test_crlf_and_tab_indentation_survive(self): + self.t.write_raw("VendorA", "filament", "CRLF PLA @P1", + self.CRLF_TEXT.encode("utf-8")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + raw = self.t.raw("VendorA", "filament", "CRLF PLA @P1") + self.assertEqual(raw.count(b"\n"), raw.count(b"\r\n")) # still CRLF-only + want = afi.generate_preset_setting_id("VendorA", "filament", "CRLF PLA @P1") + inserted = ('\t"setting_id": "%s",\r\n' % want).encode("utf-8") + # Every original byte survives: dropping the inserted line restores the file. + self.assertEqual(raw.replace(inserted, b"", 1), + self.CRLF_TEXT.encode("utf-8")) + + def test_bom_survives(self): + raw_in = b"\xef\xbb\xbf" + json.dumps( + preset("BOM PLA @P1", filament_id="OFabc123"), + indent=4, ensure_ascii=False).encode("utf-8") + b"\n" + self.t.write_raw("VendorA", "filament", "BOM PLA @P1", raw_in) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + raw = self.t.raw("VendorA", "filament", "BOM PLA @P1") + self.assertTrue(raw.startswith(b"\xef\xbb\xbf")) + self.assertEqual(raw.count(b"\xef\xbb\xbf"), 1) + want = afi.generate_preset_setting_id("VendorA", "filament", "BOM PLA @P1") + self.assertEqual(self.t.read("VendorA", "filament", "BOM PLA @P1")["setting_id"], + want) + self.assertEqual( + raw.replace((' "setting_id": "%s",\n' % want).encode("utf-8"), b"", 1), + raw_in) + + def test_non_ascii_name_round_trips(self): + name = "拓竹 PLA @P1 0.4 nozzle" + raw_in = (json.dumps(preset(name, filament_id="OFabc123"), indent=4, + ensure_ascii=False).encode("utf-8") + b"\n") + self.t.write_raw("VendorA", "filament", name, raw_in) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + raw = self.t.raw("VendorA", "filament", name) + self.assertIn(name.encode("utf-8"), raw) # not escaped to \uXXXX + data = self.t.read("VendorA", "filament", name) + self.assertEqual(data["name"], name) + self.assertEqual(data["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", name)) + + def test_surrounding_formatting_is_untouched_on_a_strip(self): + text = ('{\r\n' + '\t"type": "filament",\r\n' + '\t"name": "Odd @base",\r\n' + '\t"setting_id": "0000000000000000",\r\n' + '\t"instantiation": "false",\r\n' + '\t"compatible_printers": []\r\n' + '}\r\n') + self.t.write_raw("VendorA", "filament", "Odd @base", text.encode("utf-8")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual( + self.t.raw("VendorA", "filament", "Odd @base").decode("utf-8"), + text.replace('\t"setting_id": "0000000000000000",\r\n', "", 1)) + + +# --------------------------------------------------------------------------- +# byte-preserving key edits +# --------------------------------------------------------------------------- + +class TestInsertAnchor(unittest.TestCase): + WITH_BOTH = ('{\n "name": "K @P1",\n "filament_id": "OFabc123",\n' + ' "instantiation": "true"\n}\n') + WITH_INSTANTIATION = ('{\n "name": "K @P1",\n' + ' "instantiation": "true"\n}\n') + + def test_inserts_before_filament_id(self): + text, n = afi.insert_setting_id(self.WITH_BOTH, "0123456789abcdef") + self.assertEqual(n, 1) + json.loads(text) + self.assertEqual(text, self.WITH_BOTH.replace( + ' "filament_id"', + ' "setting_id": "0123456789abcdef",\n "filament_id"', 1)) + + def test_falls_back_to_instantiation(self): + text, n = afi.insert_setting_id(self.WITH_INSTANTIATION, "0123456789abcdef") + self.assertEqual(n, 1) + json.loads(text) + self.assertIn('"setting_id": "0123456789abcdef",\n "instantiation"', text) + + def test_falls_back_to_name(self): + # Last-resort anchor: every preset has a name, so the insert does not + # depend on filament_id having been written first — a dry run, which + # writes none, must reach the same verdict as the real run. + text, n = afi.insert_setting_id('{\n "name": "K",\n "x": 1\n}\n', + "0123456789abcdef") + self.assertEqual(n, 1) + json.loads(text) + self.assertIn('"name": "K",\n "setting_id": "0123456789abcdef",', text) + + def test_no_anchor_returns_zero(self): + src = '{\n "type": "filament"\n}\n' + text, n = afi.insert_setting_id(src, "0123456789abcdef") + self.assertEqual(n, 0) + self.assertEqual(text, src) + + +class TestKeyLineHelpers(unittest.TestCase): + def test_delete_trailing_comma_form(self): + text = ('{\n "name": "K",\n "setting_id": "OLD0000000000000",\n' + ' "instantiation": "false"\n}\n') + out, n = afi.delete_key_line(text, "setting_id") + self.assertEqual(n, 1) + self.assertEqual(json.loads(out), {"name": "K", "instantiation": "false"}) + self.assertEqual(out, text.replace( + ' "setting_id": "OLD0000000000000",\n', "", 1)) + + def test_delete_last_property_form_consumes_the_preceding_comma(self): + text = ('{\n "name": "K",\n "instantiation": "false",\n' + ' "setting_id": "OLD0000000000000"\n}\n') + out, n = afi.delete_key_line(text, "setting_id") + self.assertEqual(n, 1) + self.assertEqual(json.loads(out), {"name": "K", "instantiation": "false"}) + self.assertEqual(out, '{\n "name": "K",\n "instantiation": "false"\n}\n') + + def test_delete_requires_the_exact_old_value(self): + text = ('{\n "name": "K",\n "setting_id": "OLD0000000000000",\n' + ' "instantiation": "false"\n}\n') + out, n = afi.delete_key_line(text, "setting_id", old_value="OTHER") + self.assertEqual((out, n), (text, 0)) + _out, n = afi.delete_key_line(text, "setting_id", + old_value="OLD0000000000000") + self.assertEqual(n, 1) + + def test_delete_missing_key_returns_zero(self): + text = '{\n "name": "K"\n}\n' + self.assertEqual(afi.delete_key_line(text, "setting_id"), (text, 0)) + + def test_delete_does_not_confuse_the_two_spellings(self): + text = ('{\n "name": "K",\n "settings_id": "TYPO000000000000",\n' + ' "setting_id": "REAL000000000000",\n' + ' "instantiation": "true"\n}\n') + out, n = afi.delete_key_line(text, "settings_id") + self.assertEqual(n, 1) + self.assertEqual(json.loads(out)["setting_id"], "REAL000000000000") + + def test_replace_refuses_a_stale_old_value(self): + text = '{\n "setting_id": "OLD0000000000000"\n}\n' + out, n = afi.replace_key_value(text, "setting_id", "NEW0000000000000", + old_value="NOTTHIS000000000") + self.assertEqual((out, n), (text, 0)) + out, n = afi.replace_key_value(text, "setting_id", "NEW0000000000000", + old_value="OLD0000000000000") + self.assertEqual(n, 1) + self.assertEqual(json.loads(out)["setting_id"], "NEW0000000000000") + + def test_insert_key_line_prefers_before_over_after(self): + text = ('{\n "name": "K",\n "filament_id": "OFabc123",\n' + ' "instantiation": "true"\n}\n') + out, n = afi.insert_key_line(text, "setting_id", "V", + before=("filament_id", "instantiation"), + after=("name",)) + self.assertEqual(n, 1) + self.assertLess(out.index('"setting_id"'), out.index('"filament_id"')) + self.assertGreater(out.index('"setting_id"'), out.index('"name"')) + # The `before` tuple's own order decides, not the order in the file. + out, _n = afi.insert_key_line(text, "setting_id", "V", + before=("instantiation", "filament_id")) + self.assertGreater(out.index('"setting_id"'), out.index('"filament_id"')) + + def test_insert_key_line_falls_back_to_after(self): + text = '{\n "name": "K",\n "from": "system"\n}\n' + out, n = afi.insert_key_line(text, "setting_id", "V", + before=("filament_id",), after=("name",)) + self.assertEqual(n, 1) + self.assertEqual(out, '{\n "name": "K",\n "setting_id": "V",\n' + ' "from": "system"\n}\n') + + def test_insert_key_line_without_any_anchor(self): + text = '{\n "from": "system"\n}\n' + self.assertEqual( + afi.insert_key_line(text, "setting_id", "V", before=("filament_id",), + after=("name",)), + (text, 0)) + + +# --------------------------------------------------------------------------- +# error paths: reported and counted, never raised +# --------------------------------------------------------------------------- + +class TestErrorPaths(SettingTreeCase): + def test_unparsable_profile_is_reported_and_the_run_continues(self): + broken = b'{\n "name": "Broken @P1",\n oops\n}\n' + self.t.write_raw("VendorA", "filament", "Broken @P1", broken) + self.t.write("VendorA", "filament", preset("Good @P1")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 1), out) + self.assertIn("Broken @P1", out) + self.assertEqual(self.t.raw("VendorA", "filament", "Broken @P1"), broken) + self.assertEqual(self.t.read("VendorA", "filament", "Good @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "Good @P1")) + + def test_non_object_top_level_is_reported(self): + raw = b'[\n {"name": "K"}\n]\n' + self.t.write_raw("VendorA", "filament", "List @P1", raw) + self.t.write("VendorA", "filament", preset("Good @P1")) + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 1), out) + self.assertIn("List @P1", out) + self.assertEqual(self.t.raw("VendorA", "filament", "List @P1"), raw) + + def test_nameless_instantiated_preset_is_reported(self): + nameless = {"type": "filament", "from": "system", "instantiation": "true"} + self.t.write("VendorA", "filament", nameless, name="Nameless") + self.t.write("VendorA", "filament", preset("Good @P1")) + before = self.t.raw("VendorA", "filament", "Nameless") + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 1), out) + self.assertIn("Nameless", out) + self.assertEqual(self.t.raw("VendorA", "filament", "Nameless"), before) + self.assertEqual(self.t.read("VendorA", "filament", "Good @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "Good @P1")) + + def test_a_nameless_preset_still_gets_its_misspelled_key_dropped(self): + # The nameless-preset error must not abandon an edit already queued for + # the same file: leaving "settings_id" behind would keep the validator + # red with no way for this tool to clear it. + nameless = {"type": "filament", "from": "system", "settings_id": "JUNK123", + "instantiation": "true"} + self.t.write("VendorA", "filament", nameless, name="Nameless") + + changed, errors, out = self.t.run() + + self.assertEqual((changed, errors), (1, 1), out) + self.assertNotIn("settings_id", self.t.read("VendorA", "filament", "Nameless")) + self.assertNotIn("setting_id", self.t.read("VendorA", "filament", "Nameless")) + self.assertIn('misspelled "settings_id" dropped : 1', out) + + def test_an_unanchorable_file_is_reported_not_raised(self): + # One oddly formatted profile must not abort the pass over all the + # others, and it must fail the same way in a dry run as in a real one. + raw = b'{ "type":"filament", "name":"Flat @P1", "instantiation":"true" }\n' + self.t.write_raw("VendorA", "filament", "Flat @P1", raw) + self.t.write("VendorA", "filament", preset("Good @P1")) + + dry_changed, dry_errors, dry_out = self.t.run(dry_run=True) + changed, errors, out = self.t.run() + + self.assertEqual((dry_changed, dry_errors), (changed, errors), dry_out) + self.assertEqual((changed, errors), (1, 1), out) + self.assertIn("Flat @P1", out) + self.assertEqual(self.t.raw("VendorA", "filament", "Flat @P1"), raw) + self.assertEqual(self.t.read("VendorA", "filament", "Good @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "Good @P1")) + + def test_nameless_base_preset_is_fine(self): + # Only instantiated presets need an identity; a nameless base profile is + # simply left alone. + nameless = {"type": "filament", "from": "system", "instantiation": "false"} + self.t.write("VendorA", "filament", nameless, name="Nameless base") + before = self.t.bytes_map() + changed, errors, out = self.t.run() + self.assertEqual((changed, errors), (0, 0), out) + self.assertEqual(self.t.bytes_map(), before) + + +# --------------------------------------------------------------------------- +# the real tree +# --------------------------------------------------------------------------- + +@unittest.skipUnless(os.path.isdir(REAL_PROFILES), "resources/profiles not present") +class TestRealTree(unittest.TestCase): + def test_shipped_tree_needs_no_setting_id_change(self): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + changed, errors = afi.generate_setting_ids(REAL_PROFILES, dry_run=True) + self.assertEqual((changed, errors), (0, 0), buf.getvalue()) + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +class TestCli(SettingTreeCase): + def main(self, argv): + buf = io.StringIO() + with contextlib.redirect_stdout(buf): + rc = afi.main(argv) + return rc, buf.getvalue() + + def test_setting_id_only_run_touches_no_filament_id(self): + # "OFZZZZZZ" is not the mint of the preset's own triple, so the filament + # half of --generate has real work waiting on this tree (proven at the + # end): leaving the id alone is the narrowing's doing, not an idle tree. + self.t.write("VendorA", "filament", + preset("A PLA @P1", filament_id="OFZZZZZZ", + filament_vendor=["AV"], filament_type=["PLA"])) + self.t.write("VendorA", "machine", + preset("P1 0.4 nozzle", type_name="machine")) + + rc, out = self.main(["generate-id", "--setting-id", + "--profiles", self.t.profiles]) + + self.assertEqual(rc, 0, out) + filament = self.t.read("VendorA", "filament", "A PLA @P1") + self.assertEqual(filament["filament_id"], "OFZZZZZZ") + self.assertEqual(filament["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", "A PLA @P1")) + machine = self.t.read("VendorA", "machine", "P1 0.4 nozzle") + self.assertNotIn("filament_id", machine) + self.assertEqual(machine["setting_id"], + afi.generate_preset_setting_id("VendorA", "machine", "P1 0.4 nozzle")) + # ... and the skipped half does re-mint that id when it is allowed to run. + changed, errors, out = self.t.run_filament_ids() + self.assertEqual((changed, errors), (1, 0), out) + self.assertEqual( + self.t.read("VendorA", "filament", "A PLA @P1")["filament_id"], + afi.generate_filament_id("AV", "PLA", "A PLA")) + + def test_dry_run_setting_id_writes_nothing(self): + self.t.write("VendorA", "filament", preset("A PLA @P1")) + before = self.t.bytes_map() + rc, out = self.main(["generate-id", "--setting-id", "--dry-run", + "--profiles", self.t.profiles]) + self.assertEqual(rc, 0, out) + self.assertIn("1 file(s) would change", out) # there WAS one to write + self.assertEqual(self.t.bytes_map(), before) + # the real run then writes exactly it + rc, out = self.main(["generate-id", "--setting-id", + "--profiles", self.t.profiles]) + self.assertEqual(rc, 0, out) + self.assertIn("1 file(s) changed", out) + self.assertEqual(self.t.read("VendorA", "filament", "A PLA @P1")["setting_id"], + afi.generate_preset_setting_id("VendorA", "filament", + "A PLA @P1")) + + def test_setting_id_without_a_command_is_a_usage_error(self): + with contextlib.redirect_stderr(io.StringIO()), \ + self.assertRaises(SystemExit) as cm: + afi.main(["--setting-id", "--profiles", self.t.profiles]) + self.assertEqual(cm.exception.code, 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/scripts/update_bambu_filament_ids.py b/scripts/update_bambu_filament_ids.py new file mode 100644 index 0000000000..457a0347aa --- /dev/null +++ b/scripts/update_bambu_filament_ids.py @@ -0,0 +1,246 @@ +#!/usr/bin/env python3 +""" +Generate resources/printers/bambu_filament_ids.json: the map from Orca's +content-addressed filament_id ("OF" + 6 base62 chars, see orca_profile_tool.py) +to Bambu Lab's own AMS/RFID catalog id ("GF..." etc.) for the subset of filament +products Bambu ships. + +The map is generated from BambuStudio's OWN shipped BBL bundle, never from +Orca's: Orca's BBL bundle is a fork of Bambu's, tuned and extended +independently, so it is not the source of truth for Bambu's catalog ids. +src/slic3r/Utils/BBLPrinterAgent.cpp loads it at runtime and translates an id +only where it crosses to or from a Bambu printer, so the correspondence never +has to be hand-maintained. See docs/HLSD/filament_id.md. + +One row per BambuStudio filament PRODUCT: one named spool product = one +"@base"-declared filament_id, shared by every per-printer/per-nozzle +instantiation of it (BambuStudio follows the same one-product-one-id shape +Orca's own filament_id policy does). A row's key is the OF id that product's +(filament_vendor, filament_type, filament) triple mints — the id Orca carries +for it wherever it ships it, since the id is a function of the triple alone. + +Map format: +{ + "source": "https://github.com/bambulab/BambuStudio", + "bambustudio_commit": "66e405477", + "generated": "2026-09-04", + "filaments": { + "OFhuaUQB": {"bambu_id": "GFB00", "vendor": "Bambu Lab", "type": "ABS", "name": "Bambu ABS"} + } +} + +Run from anywhere: python3 scripts/update_bambu_filament_ids.py + (default) shallow-clone BambuStudio's master branch (sparse: just + the BBL filament bundle) and regenerate the map + --bambustudio-dir DIR + read DIR (a BambuStudio resources/profiles checkout) + instead of cloning + --ref REF clone this BambuStudio ref instead of master + --output PATH write here instead of resources/printers/bambu_filament_ids.json + +After writing, an informational drift report is printed: BambuStudio filaments +Orca ships nothing with the same identity for, and a count of Orca's own BBL +filaments that matched no BambuStudio row. Neither blocks the write; both are +for a human to read. +""" + +import argparse +import json +import os +import shutil +import subprocess +import sys +import tempfile +import datetime + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from orca_profile_tool import ( # noqa: E402 + BAMBU_MAP_PATH, + OFL, + PROFILES_DIR, + analyze_tree, + base_name, + generate_filament_id, + load_vendor_filaments, + print_error, + print_info, + print_success, + resolve_filament_id, + resolve_triple, +) + +BAMBUSTUDIO_REPO = "https://github.com/bambulab/BambuStudio" + + +# --------------------------------------------------------------------------- +# Row derivation +# --------------------------------------------------------------------------- + +def derive_rows(bs_filaments): + """One row per BambuStudio product, keyed by the OF id its triple mints.""" + by_filament = {} # filament_name -> (bambu_id, triple) + for rec in bs_filaments.values(): + if not rec["instantiation"]: + continue + bambu_id, _src, _entry = resolve_filament_id(rec["name"], bs_filaments, {}) + if not bambu_id: + continue + filament_name = base_name(rec["name"]) + triple = resolve_triple(rec["name"], bs_filaments, {}) + prev = by_filament.setdefault(filament_name, (bambu_id, triple)) + if prev != (bambu_id, triple): + raise SystemExit(f"BambuStudio filament {filament_name!r} is not one " + f"product: {prev} vs {(bambu_id, triple)}") + rows, seen = {}, {} + for filament_name, (bambu_id, triple) in sorted(by_filament.items()): + if bambu_id in seen: + raise SystemExit(f"Bambu id {bambu_id} is shared by " + f"{seen[bambu_id]!r} and {filament_name!r}") + seen[bambu_id] = filament_name + rows[generate_filament_id(*triple)] = { + "bambu_id": bambu_id, "vendor": triple[0], "type": triple[1], "name": triple[2]} + return rows + + +# --------------------------------------------------------------------------- +# Drift report (informational only) +# --------------------------------------------------------------------------- + +def drift_report(rows, orca_analysis): + """Two triple-identity comparisons between the map just derived and Orca's + own BBL bundle (never id-based: the two bundles assign filament_id + independently, so only the (vendor, type, name) identity is comparable). + + Returns print-ready lines: one per BambuStudio row triple with no + same-triple filament in Orca's BBL bundle (upstream ships it, we ship + nothing with that identity there — sometimes a genuinely missing product, + sometimes a renamed one), then a count of Orca's own BBL filaments that + matched no BambuStudio row (Orca-only products, e.g. a name-drifted + duplicate of one already counted in the first list). + """ + row_triples = {(r["vendor"], r["type"], r["name"]) for r in rows.values()} + + bbl_filaments = orca_analysis["vendors"].get("BBL", {}) + ofl_filaments = orca_analysis["vendors"].get(OFL, {}) + orca_filaments = {} + for rec in bbl_filaments.values(): + if not rec["instantiation"]: + continue + triple = resolve_triple(rec["name"], bbl_filaments, ofl_filaments) + orca_filaments.setdefault(base_name(rec["name"]), triple) + + lines = [] + for triple in sorted(row_triples - set(orca_filaments.values())): + lines.append(f'upstream ships {triple[2]!r} ({triple[0]}/{triple[1]}), ' + "we ship nothing with that identity") + orca_only = [name for name, triple in orca_filaments.items() + if triple not in row_triples] + lines.append(f"Orca BBL filaments with no row: {len(orca_only)} Orca-only product(s)") + return lines + + +# --------------------------------------------------------------------------- +# Map IO +# --------------------------------------------------------------------------- + +def write_map(path, rows, commit, date): + """Write the map: sorted keys, indent 2, LF, trailing newline.""" + payload = { + "source": BAMBUSTUDIO_REPO, + "bambustudio_commit": commit, + "generated": date, + "filaments": rows, + } + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8", newline="\n") as f: + json.dump(payload, f, indent=2, ensure_ascii=False, sort_keys=True) + f.write("\n") + + +# --------------------------------------------------------------------------- +# BambuStudio fetch +# --------------------------------------------------------------------------- + +def run(command, cwd=None): + """Run a command, streaming its output; raise SystemExit on failure.""" + print("+ " + " ".join(command)) + try: + subprocess.run(command, cwd=cwd, check=True) + except subprocess.CalledProcessError as e: + raise SystemExit(f"command failed ({e.returncode}): {' '.join(command)}") from e + + +def run_out(command, cwd=None): + """Run a command and return its stripped stdout; raise SystemExit on failure.""" + try: + result = subprocess.run(command, cwd=cwd, check=True, capture_output=True, text=True) + except subprocess.CalledProcessError as e: + raise SystemExit( + f"command failed ({e.returncode}): {' '.join(command)}\n{e.stderr}") from e + return result.stdout.strip() + + +def fetch_bambustudio(ref, workdir): + run(["git", "clone", "--depth=1", "--filter=blob:none", "--sparse", "--branch", ref, + BAMBUSTUDIO_REPO + ".git", workdir]) + run(["git", "-C", workdir, "sparse-checkout", "set", "--no-cone", + "resources/profiles/BBL.json", "resources/profiles/BBL/filament"]) + return os.path.join(workdir, "resources", "profiles"), run_out(["git", "-C", workdir, "rev-parse", "--short", "HEAD"]) + + +def local_dir_commit(dir_path): + """git rev-parse --short HEAD of dir_path, or "local" when it is not a repo.""" + result = subprocess.run(["git", "-C", dir_path, "rev-parse", "--short", "HEAD"], + capture_output=True, text=True) + return result.stdout.strip() if result.returncode == 0 else "local" + + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +def main(argv=None): + parser = argparse.ArgumentParser( + description="Regenerate resources/printers/bambu_filament_ids.json from " + "BambuStudio's shipped BBL bundle.") + source = parser.add_mutually_exclusive_group() + source.add_argument("--bambustudio-dir", metavar="DIR", + help="a BambuStudio resources/profiles directory to read " + "instead of cloning") + source.add_argument("--ref", default="master", + help='BambuStudio git ref to shallow-clone when ' + '--bambustudio-dir is not given (default: "master")') + parser.add_argument("--output", default=BAMBU_MAP_PATH, + help="output path (default: resources/printers/bambu_filament_ids.json)") + args = parser.parse_args(argv) + + workdir = None + if args.bambustudio_dir: + profiles_dir = args.bambustudio_dir + commit = local_dir_commit(profiles_dir) + else: + workdir = tempfile.mkdtemp(prefix="bambustudio_") + profiles_dir, commit = fetch_bambustudio(args.ref, workdir) + + try: + bs_filaments, errors = load_vendor_filaments(profiles_dir, "BBL") + if errors: + for e in errors: + print_error(e) + raise SystemExit("unreadable BambuStudio filament profile(s)") + + rows = derive_rows(bs_filaments) + write_map(args.output, rows, commit, datetime.date.today().isoformat()) + print_success(f"wrote {len(rows)} row(s) to {args.output} (BambuStudio @ {commit})") + + for line in drift_report(rows, analyze_tree(PROFILES_DIR)): + print_info(line) + finally: + if workdir: + shutil.rmtree(workdir, ignore_errors=True) + + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0082b29831..f0de57f12c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -33,7 +33,8 @@ if (SLIC3R_GUI) set (wxWidgets_CONFIG_OPTIONS "--toolkit=gtk${SLIC3R_GTK}") find_package(wxWidgets 3.3 REQUIRED COMPONENTS base core adv html gl aui net media webview) else () - find_package(wxWidgets 3.3 CONFIG REQUIRED COMPONENTS html adv gl core base webview aui net media) + # propgrid is required by wxInspector. + find_package(wxWidgets 3.3 CONFIG REQUIRED COMPONENTS html adv gl core base webview aui net media propgrid) endif () if(UNIX) @@ -75,7 +76,7 @@ if (SLIC3R_GUI) list(FILTER wxWidgets_LIBRARIES EXCLUDE REGEX expat) list(APPEND wxWidgets_LIBRARIES ${EXPAT_LIBRARIES}) endif () - + # This is an issue in the new wxWidgets cmake build, doesn't deal with librt find_library(LIBRT rt) if(LIBRT) @@ -90,6 +91,16 @@ if (SLIC3R_GUI) # list(REMOVE_ITEM wxWidgets_LIBRARIES oleacc) find_package(wxInspector REQUIRED) + + # wxInspector's exported interface names the release wxWidgets import + # libraries, which a Debug build cannot link. wx is linked above instead. + get_target_property(_wxinspector_interface wxInspector::wxInspector INTERFACE_LINK_LIBRARIES) + if (_wxinspector_interface) + list(FILTER _wxinspector_interface EXCLUDE REGEX "wx(base|msw)3[0-9]u[_.]") + set_target_properties(wxInspector::wxInspector PROPERTIES + INTERFACE_LINK_LIBRARIES "${_wxinspector_interface}") + endif () + list(APPEND wxWidgets_LIBRARIES "wxInspector::wxInspector") message(STATUS "wx libs: ${wxWidgets_LIBRARIES}") @@ -294,6 +305,16 @@ if (WIN32) endif() else () + if (NOT APPLE) + set(output_sos_Release "") + set(output_sos_Debug "") + add_custom_target(OrcaSlicerSosCopy ALL DEPENDS OrcaSlicer) + if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + orcaslicer_copy_sos(OrcaSlicerSosCopy "Debug" "d" output_sos_Debug) + else() + orcaslicer_copy_sos(OrcaSlicerSosCopy "Release" "" output_sos_Release) + endif() + endif() if (APPLE AND NOT CMAKE_MACOSX_BUNDLE) # On OSX, the name of the binary matches the name of the Application. add_custom_command(TARGET OrcaSlicer POST_BUILD @@ -372,5 +393,9 @@ if (WIN32) install(FILES ${output_dlls_${build_type}} DESTINATION ".") install(DIRECTORY "${CMAKE_PREFIX_PATH}/libpython/" DESTINATION "python") else () + if (APPLE) + else() + install(FILES ${output_sos_${build_type}} DESTINATION "${CMAKE_INSTALL_PREFIX}") + endif() install(TARGETS OrcaSlicer RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}) endif () diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 8176e9f444..0c9bd0b1ee 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -53,6 +53,8 @@ using namespace nlohmann; #include "libslic3r/libslic3r.h" #include "libslic3r/Config.hpp" +#include "libslic3r/FilamentMixer.hpp" +#include "libslic3r/Preset.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/GCode.hpp" #include "libslic3r/Model.hpp" @@ -71,17 +73,21 @@ using namespace nlohmann; #include "libslic3r/Thread.hpp" #include "libslic3r/BlacklistedLibraryCheck.hpp" #include "libslic3r/FlushVolCalc.hpp" +#include "libslic3r/LayOnFace.hpp" #include "libslic3r/Orient.hpp" #include "libslic3r/PNGReadWrite.hpp" #include "libslic3r/ObjColorUtils.hpp" #include "OrcaSlicer.hpp" -//BBS: add exception handler for win32 +#include #include +//BBS: add exception handler for win32 #ifdef WIN32 #include "dev-utils/BaseException.h" #endif +#include "slic3r/Utils/MeshInspect.hpp" +#include "slic3r/Utils/PaintCLI.hpp" #include "slic3r/GUI/PartPlate.hpp" #include "slic3r/GUI/BitmapCache.hpp" #include "slic3r/GUI/OpenGLManager.hpp" @@ -100,6 +106,10 @@ using namespace nlohmann; #ifdef SLIC3R_GUI #include "slic3r/GUI/GUI_Init.hpp" + // BBLPrinterAgent::from_orca_filament_id(); the map and its lookups live in libslic3r_gui, + // which only a SLIC3R_GUI build links (see target_link_libraries(OrcaSlicer libslic3r_gui) + // in CMakeLists). + #include "slic3r/Utils/BBLPrinterAgent.hpp" #endif /* SLIC3R_GUI */ using namespace Slic3r; @@ -156,6 +166,7 @@ std::map cli_errors = { {CLI_FILAMENT_CAN_NOT_MAP, "Some filaments cannot be mapped to correct extruders for multi-extruder Printer."}, {CLI_ONLY_ONE_TPU_SUPPORTED, "Not support printing 2 or more TPU filaments."}, {CLI_FILAMENTS_NOT_SUPPORTED_BY_EXTRUDER, "Some filaments cannot be printed on the extruder mapped to."}, + {CLI_MIXED_FILAMENT_INVALID, "A mixed filament is invalid: its components are different filament types, or it has no filament of its own."}, {CLI_SLICING_ERROR, "Failed slicing the model. Please verify the slicing of all plates on Orca Slicer before uploading."}, {CLI_GCODE_PATH_CONFLICTS, " G-code conflicts detected after slicing. Please make sure the 3mf file can be successfully sliced in the latest Orca Slicer. If the file slices normally in Orca Slicer, try moving the wipe tower further from other models, as we use more conservative parameters for it during upload."}, {CLI_GCODE_PATH_IN_UNPRINTABLE_AREA, "Found G-code in unprintable area of multi-extruder printers after slicing. Please make sure the 3mf file can be successfully sliced in the latest Orca Slicer."} @@ -181,6 +192,9 @@ typedef struct _sliced_info { int wall_loops{0}; std::vector upward_machines; std::vector downward_machines; + // Structured slicing warnings for result.json, and whether --strict was on. + nlohmann::json warnings = nlohmann::json::array(); + bool strict_mode {false}; }sliced_info_t; std::vector g_slicing_warnings; @@ -416,6 +430,21 @@ static PrinterTechnology get_printer_technology(const DynamicConfig &config) return(ret);} #endif +// Records a structured slicing warning so a CI or scripted consumer can branch on +// a stable `class` string instead of matching stderr. Warnings are kept on the +// run's sliced_info and emitted as the top-level "warnings" array of result.json; +// a non-empty array does not by itself mean the run failed. Under --strict a +// NON_CRITICAL warning additionally ends the run non-zero. +// +// result.json is written on Linux only (see the guard in record_exit_reson), so +// neither "warnings" nor "strict_mode" reaches Windows or macOS. +static void cli_record_warning(sliced_info_t &sliced_info, const std::string &cls, + nlohmann::json details = nlohmann::json::object()) +{ + details["class"] = cls; + sliced_info.warnings.push_back(std::move(details)); +} + void record_exit_reson(std::string outputdir, int code, int plate_id, std::string error_message, sliced_info_t& sliced_info, std::map key_values = std::map()) { #if defined(__linux__) || defined(__LINUX__) @@ -454,6 +483,9 @@ void record_exit_reson(std::string outputdir, int code, int plate_id, std::strin for (auto& iter: key_values) j[iter.first] = iter.second; + j["warnings"] = sliced_info.warnings; + j["strict_mode"] = sliced_info.strict_mode; + boost::nowide::ofstream c; c.open(result_file, std::ios::out | std::ios::trunc); c << j.dump(1, '\t') << std::endl; @@ -1373,12 +1405,87 @@ int CLI::run(int argc, char **argv) bool need_skip = (skip_objects.size() > 0)?true:false; long long global_begin_time = 0, global_current_time; sliced_info_t sliced_info; + // Read up front so result.json reports it for early failures too. + sliced_info.strict_mode = m_config.opt_bool("strict"); + // --no-check skips the check behind the only NON_CRITICAL warning --strict acts on + // (support needed but disabled), from the point it appears among the actions. The pair + // would make --strict a no-op or depend on argument order, so refuse it. + if (sliced_info.strict_mode && m_config.opt_bool("no_check")) { + boost::nowide::cerr << "--strict cannot be combined with --no-check" << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } std::map record_key_values; ConfigOptionBool* downward_check_option = m_config.option("downward_check"); if (downward_check_option) downward_check = downward_check_option->value; + // --inspect-mesh prints its JSON and exits, so any action that does work of its + // own (slicing, exporting) would be skipped without notice. Reject those up front; + // only options that merely tune how the input is loaded may come along. + if (std::find(m_actions.begin(), m_actions.end(), "inspect_mesh") != m_actions.end()) { + static const std::set inspect_compatible = { "inspect_mesh", "uptodate", "load_defaultfila", "min_save", + "mtcpp", "mstpp", "no_check", "normative_check", "pipe" }; + for (const std::string &action : m_actions) { + if (inspect_compatible.count(action) == 0) { + std::string flag = action; + std::replace(flag.begin(), flag.end(), '_', '-'); + boost::nowide::cerr << "--inspect-mesh cannot be combined with --" << flag << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } + // Without input there is nothing to inspect; fail rather than print nothing and exit 0. + if (m_input_files.empty() && m_config.opt_string("load_assemble_list").empty()) { + boost::nowide::cerr << "--inspect-mesh needs an input file or --load-assemble-list" << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } + + // --inspect-paint prints its JSON and exits, so any action that does work of its + // own (slicing, exporting) would be skipped without notice. Reject those up front; + // only options that merely tune how the input is loaded may come along. + if (std::find(m_actions.begin(), m_actions.end(), "inspect_paint") != m_actions.end()) { + static const std::set inspect_compatible = { "inspect_paint", "uptodate", "load_defaultfila", "min_save", + "mtcpp", "mstpp", "no_check", "normative_check", "pipe" }; + for (const std::string &action : m_actions) { + if (inspect_compatible.count(action) == 0) { + std::string flag = action; + std::replace(flag.begin(), flag.end(), '_', '-'); + boost::nowide::cerr << "--inspect-paint cannot be combined with --" << flag << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } + // Without input there is nothing to inspect; fail rather than print nothing and exit 0. + if (m_input_files.empty() && m_config.opt_string("load_assemble_list").empty()) { + boost::nowide::cerr << "--inspect-paint needs an input file or --load-assemble-list" << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } + + // --export-settings - writes its JSON to stdout, so reject every action or transform that may write there + // too (--info, --help, --orient, slicing and exporting). The allowed ones do nothing when nothing is + // sliced or exported. + if (std::find(m_actions.begin(), m_actions.end(), "export_settings") != m_actions.end() && m_config.opt_string("export_settings") == "-") { + static const std::set stdout_compatible = { "export_settings", "uptodate", "load_defaultfila", "min_save", + "mtcpp", "mstpp", "no_check", "normative_check", "pipe" }; + for (const std::vector *opt_keys : { &m_actions, &m_transforms }) { + for (const std::string &opt_key : *opt_keys) { + if (stdout_compatible.count(opt_key) == 0) { + std::string flag = opt_key; + std::replace(flag.begin(), flag.end(), '_', '-'); + boost::nowide::cerr << "--export-settings - cannot be combined with --" << flag << std::endl; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } + } + } + bool start_gui = m_actions.empty() && !downward_check; if (start_gui) { BOOST_LOG_TRIVIAL(info) << "no action, start gui directly" << std::endl; @@ -1462,6 +1569,10 @@ int CLI::run(int argc, char **argv) std::vector upward_compatible_printers, new_print_compatible_printers, current_print_compatible_printers, current_different_settings; std::vector current_filaments_name, current_filaments_system_name, current_inherits_group, current_extruder_variants, new_extruder_variants, current_print_extruder_variants, new_printer_extruder_variants; DynamicPrintConfig load_process_config, load_machine_config; + //ORCA: full configs of the "current" (3MF-embedded) process/printer presets, kept so that + // compatible_printers_condition can be evaluated for them below. Previously only the + // literal compatible_printers list was extracted. + DynamicPrintConfig current_process_full_config, current_printer_full_config; bool new_process_config_is_system = true, new_printer_config_is_system = true; std::string pipe_name, makerlab_name, makerlab_version, different_process_setting; const std::vector &metadata_name = m_config.option("metadata_name", true)->values; @@ -1793,8 +1904,9 @@ int CLI::run(int argc, char **argv) old_printable_area = config.option("printable_area", true)->values; old_exclude_area = config.option("bed_exclude_area", true)->values; if (old_printable_area.size() >= 4) { - old_printable_width = (int)(old_printable_area[2].x() - old_printable_area[0].x()); - old_printable_depth = (int)(old_printable_area[2].y() - old_printable_area[0].y()); + BoundingBoxf old_printable_bbox(old_printable_area); + old_printable_width = static_cast(old_printable_bbox.size().x()); + old_printable_depth = static_cast(old_printable_bbox.size().y()); } old_printable_height = (int)(config.opt_float("printable_height")); @@ -1920,7 +2032,7 @@ int CLI::run(int argc, char **argv) } } catch (std::exception& e) { - boost::nowide::cerr << construct_assemble_list << ": " << e.what() << std::endl; + boost::nowide::cerr << "construct_assemble_list: " << e.what() << std::endl; record_exit_reson(outfile_dir, CLI_DATA_FILE_ERROR, 0, cli_errors[CLI_DATA_FILE_ERROR], sliced_info); flush_and_exit(CLI_DATA_FILE_ERROR); } @@ -1969,7 +2081,126 @@ int CLI::run(int argc, char **argv) } } - auto load_config_file = [config_substitution_rule](const std::string& file, DynamicPrintConfig& config, std::string& config_type, + std::unique_ptr cli_preset_bundle; + auto ensure_cli_preset_bundle = [&cli_preset_bundle](std::string &error) -> PresetBundle * { + if (cli_preset_bundle) + return cli_preset_bundle.get(); + try { + AppConfig app_config; + const std::string app_config_error = app_config.load_if_exists(); + if (!app_config_error.empty()) { + BOOST_LOG_TRIVIAL(warning) << "Ignoring invalid app config during CLI preset resolution: " << app_config_error; + app_config.reset(); + } + + auto bundle = std::make_unique(); + std::string load_error; + bundle->load_presets(app_config, config_substitution_rule, + PresetBundle::PresetPreferences(), &load_error, true); + if (!load_error.empty()) { + error = "Failed to load presets for inheritance resolution: " + load_error; + return nullptr; + } + cli_preset_bundle = std::move(bundle); + return cli_preset_bundle.get(); + } catch (const std::exception &ex) { + error = ex.what(); + return nullptr; + } + }; + + // One resolver for the whole run, so presets from the same vendor tree share its load. + std::unique_ptr system_preset_resolver; + auto resolve_preset = [&ensure_cli_preset_bundle, &system_preset_resolver](const std::string &file, DynamicPrintConfig &config, + std::string &config_type, const std::string &config_from, + bool probe_type, std::string &error) { + const auto *inherits = config.option(BBL_JSON_KEY_INHERITS); + if (!probe_type && (inherits == nullptr || inherits->value.empty())) + return true; + + PresetBundle *bundle = nullptr; + bool allow_source_manifest = false; + if (config_from == "system") { + if (!system_preset_resolver) + system_preset_resolver = std::make_unique(); + bundle = system_preset_resolver.get(); + allow_source_manifest = true; + } else { + bundle = ensure_cli_preset_bundle(error); + if (bundle == nullptr) + return false; + } + + if (probe_type) { + Preset::Type preset_type; + if (!bundle->resolve_preset_config_type(config, preset_type, file, config_substitution_rule, + error, allow_source_manifest)) + return false; + config_type = Preset::get_type_string(preset_type); + return true; + } + + Preset::Type preset_type; + if (config_type == "process") + preset_type = Preset::TYPE_PRINT; + else if (config_type == "filament") + preset_type = Preset::TYPE_FILAMENT; + else if (config_type == "machine") + preset_type = Preset::TYPE_PRINTER; + else { + error = "Unsupported preset type: " + config_type; + return false; + } + return bundle->resolve_preset_config(config, preset_type, file, config_substitution_rule, + error, allow_source_manifest); + }; + + //ORCA: list the keys a user preset overrides relative to its system parent, for the + // `different_settings_to_system` column of an exported 3MF. Without it the CLI + // writes an empty column, so re-opening a CLI-exported project in the GUI shows + // spurious "unsaved changes" and can revert inherited process/filament/machine + // values to system defaults. + // + // The parent comes from the preset bundle that inherits resolution already builds, + // so this adds no extra loading. Returns "" whenever the parent cannot be resolved, + // which is exactly the previous behaviour. + auto cli_different_settings = [&ensure_cli_preset_bundle](const DynamicPrintConfig &resolved, + const std::string &parent_name, + Preset::Type type) -> std::string { + if (parent_name.empty()) + return std::string(); + std::string error; + PresetBundle *bundle = ensure_cli_preset_bundle(error); + if (bundle == nullptr) { + BOOST_LOG_TRIVIAL(warning) << "CLI: no preset bundle for different_settings_to_system: " << error; + return std::string(); + } + const PresetCollection *collection = nullptr; + switch (type) { + case Preset::TYPE_PRINT: collection = &bundle->prints; break; + case Preset::TYPE_FILAMENT: collection = &bundle->filaments; break; + case Preset::TYPE_PRINTER: collection = &bundle->printers; break; + default: return std::string(); + } + const Preset *parent = collection->find_preset2(parent_name, true); + if (parent == nullptr) { + BOOST_LOG_TRIVIAL(warning) << boost::format("CLI: parent preset '%1%' not found; leaving different_settings_to_system empty")%parent_name; + return std::string(); + } + std::vector keys = resolved.diff(parent->config); + //ORCA: preset metadata, not user-tunable settings. compatible_printers / + // compatible_prints have their own tracking columns and would double-count. + keys.erase(std::remove_if(keys.begin(), keys.end(), [](const std::string &k) { + return k == "inherits" || k == "compatible_printers" || k == "compatible_prints" + || k == "compatible_printers_condition" || k == "compatible_prints_condition" + || k == "print_settings_id" || k == "filament_settings_id" || k == "printer_settings_id"; + }), + keys.end()); + BOOST_LOG_TRIVIAL(info) << boost::format("CLI: %1% overrides vs parent '%2%'")%keys.size()%parent_name; + return Slic3r::escape_strings_cstyle(keys); + }; + + auto load_config_file = [&resolve_preset](const std::string& file, DynamicPrintConfig& config, std::string& config_type, std::string& config_name, std::string& filament_id, std::string& config_from) { if (! boost::filesystem::exists(file)) { boost::nowide::cerr << __FUNCTION__<< ": can not find setting file: " << file << std::endl; @@ -1998,9 +2229,15 @@ int CLI::run(int argc, char **argv) } auto type_iter = key_values.find(BBL_JSON_KEY_TYPE); - if (type_iter != key_values.end()) { + const bool probe_type = type_iter == key_values.end(); + if (!probe_type) config_type = type_iter->second; + + if (!resolve_preset(file, config, config_type, config_from, probe_type, reason)) { + boost::nowide::cerr << __FUNCTION__ << boost::format(": can not resolve preset %1%: %2%") % file % reason << std::endl; + return CLI_CONFIG_FILE_ERROR; } + if (config_type == "machine") { //config.set("printer_settings_id", config_name, true); //printer_inherits = config.option("inherits", true)->value; @@ -2343,8 +2580,9 @@ int CLI::run(int argc, char **argv) Pointfs orig_printable_area; orig_printable_area = config.option("printable_area", true)->values; if (orig_printable_area.size() >= 4) { - orig_printable_width = (int)(orig_printable_area[2].x() - orig_printable_area[0].x()); - orig_printable_depth = (int)(orig_printable_area[2].y() - orig_printable_area[0].y()); + BoundingBoxf orig_printable_bbox(orig_printable_area); + orig_printable_width = static_cast(orig_printable_bbox.size().x()); + orig_printable_depth = static_cast(orig_printable_bbox.size().y()); } orig_printable_height = (int)(config.opt_float("printable_height")); BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< boost::format(":%1%, check printable size: old_printable_width=%2%, orig_printable_width=%3%, old_printable_depth=%4%, orig_printable_depth=%5%, old_printable_height=%6%, orig_printable_height=%7%") @@ -2551,6 +2789,8 @@ int CLI::run(int argc, char **argv) flush_and_exit(ret); } upward_compatible_printers = config.option("upward_compatible_machine", true)->values; + //ORCA: keep the full config so compatible_printers_condition can be evaluated against it below + current_printer_full_config = std::move(config); } } } @@ -2573,6 +2813,8 @@ int CLI::run(int argc, char **argv) flush_and_exit(ret); } current_print_compatible_printers = config.option("compatible_printers", true)->values; + //ORCA: keep the full config so compatible_printers_condition can be evaluated against it below + current_process_full_config = std::move(config); } } } @@ -2591,46 +2833,88 @@ int CLI::run(int argc, char **argv) for (int index = 0; index < upward_compatible_printers.size(); index++) { BOOST_LOG_TRIVIAL(info) << boost::format("index %1%, upward_compatible_printers %2%")%index %upward_compatible_printers[index]; } + //ORCA: Replace the four manual equality-loop checks below with is_compatible_with_printer(), the + // same helper the GUI uses, which also evaluates compatible_printers_condition. Process + // profiles that declare compatibility via condition only -- leaving compatible_printers + // empty -- were always reported incompatible by the literal-name match, so a CLI slice with + // such a preset exited with CLI_PROCESS_NOT_COMPATIBLE (-17) even though the GUI accepts the + // same pair. Behaviour is unchanged where an explicit list exists: is_compatible_with_printer + // does the same name match, and returns true when both list and condition are empty (which + // matches the "old 3mf, no compatible printers" path below). + auto check_compat = [](const DynamicPrintConfig &process_cfg, + const DynamicPrintConfig &printer_cfg, + const std::string &printer_name) -> bool { + return is_compatible_with_printer(process_cfg, Preset::TYPE_PRINT, printer_cfg, printer_name); + }; + + //ORCA: a 3MF's project config does not carry compatible_printers / compatible_printers_condition. + // PresetBundle::construct_full_config() erases both and re-emits them as + // print_compatible_printers and compatible_machine_expression_group; they are renamed back + // only on the PresetBundle load path, which the CLI does not take. Feeding the project config + // to the check as-is therefore presents no list and no condition, and + // is_compatible_with_printer() reads that as "no constraint" and accepts every printer. + // Translate the two keys back. Index 0 of the expression group is the print preset -- the + // group is filled print, filaments, printer (PresetBundle.cpp). + // The raw keys win whenever they carry something. A project the CLI exported itself has the + // real compatible_printers_condition AND an all-empty compatible_machine_expression_group, + // so copying the group's first entry unconditionally would overwrite a valid condition with + // "" and accept every printer. The renamed keys are only a fallback, and an empty value is + // never written over a real one. + auto cli_process_compat_config = [](const DynamicPrintConfig &project_cfg) -> DynamicPrintConfig { + DynamicPrintConfig cfg = project_cfg; + const auto *raw_list = project_cfg.option("compatible_printers"); + const auto *list = project_cfg.option("print_compatible_printers"); + if ((raw_list == nullptr || raw_list->values.empty()) && list != nullptr && !list->values.empty()) + cfg.set_key_value("compatible_printers", new ConfigOptionStrings(list->values)); + const auto *raw_cond = project_cfg.option("compatible_printers_condition"); + const auto *group = project_cfg.option("compatible_machine_expression_group"); + if ((raw_cond == nullptr || raw_cond->value.empty()) && group != nullptr && !group->values.empty() && + !group->values.front().empty()) + cfg.set_key_value("compatible_printers_condition", new ConfigOptionString(group->values.front())); + return cfg; + }; if (!new_printer_name.empty()) { if (!new_process_name.empty()) { - for (int index = 0; index < new_print_compatible_printers.size(); index++) { - if (new_print_compatible_printers[index] == new_printer_system_name) { - process_compatible = true; - break; - } - } + //new process + new printer: both configs came from --load-settings + process_compatible = check_compat(load_process_config, load_machine_config, new_printer_system_name); BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") %new_printer_name %new_printer_system_name %new_process_name %new_process_system_name %process_compatible; } else { - for (int index = 0; index < current_print_compatible_printers.size(); index++) { - if (current_print_compatible_printers[index] == new_printer_system_name) { - process_compatible = true; - break; - } + //3MF-embedded process vs new printer. current_process_full_config is only populated from + //profiles/BBL/process_full/, so for every other vendor fall back to the 3MF's own project + //config in m_print_config, with its renamed compatibility keys translated back (see + //cli_process_compat_config above). Without this a 3MF built from a condition-only process + //is rejected when re-sliced with the very printer it was made for. + { + //ORCA: profiles/BBL/{process,machine}_full/ are gitignored and not generated in-tree, + // so current_*_full_config is always empty and this fallback is the only live path. + const DynamicPrintConfig process_cfg = current_process_full_config.empty() + ? cli_process_compat_config(m_print_config) + : current_process_full_config; + process_compatible = check_compat(process_cfg, load_machine_config, new_printer_system_name); } BOOST_LOG_TRIVIAL(info) << boost::format("new printer %1%, inherited from %2%, old process %3%, inherited from %4% ,compatible %5%") %new_printer_name %new_printer_system_name %current_process_name %current_process_system_name %process_compatible; } } else if (!new_process_name.empty()) { - for (int index = 0; index < new_print_compatible_printers.size(); index++) { - if (new_print_compatible_printers[index] == current_printer_system_name) { - process_compatible = true; - break; - } + //new process vs 3MF-embedded printer. As above, current_printer_full_config only resolves for + //BBL profiles; otherwise evaluate against the 3MF's own project config in m_print_config, which + //holds the embedded printer's printer_notes / nozzle_diameter. + { + const DynamicPrintConfig &printer_cfg = current_printer_full_config.empty() ? m_print_config : current_printer_full_config; + process_compatible = check_compat(load_process_config, printer_cfg, current_printer_system_name); } BOOST_LOG_TRIVIAL(info) << boost::format("old printer %1%, inherited from %2%, new process %3%, inherited from %4% ,compatible %5%") %current_printer_name %current_printer_system_name %new_process_name %new_process_system_name %process_compatible; } else { - //check the compatible of old printer&&process - for (int index = 0; index < current_print_compatible_printers.size(); index++) { - if (current_print_compatible_printers[index] == current_printer_system_name) { - process_compatible = true; - break; - } - } + //both sides 3MF-embedded (pure reprocess) + if (!current_process_full_config.empty() && !current_printer_full_config.empty()) + process_compatible = check_compat(current_process_full_config, current_printer_full_config, current_printer_system_name); + else + process_compatible = std::find(current_print_compatible_printers.begin(), current_print_compatible_printers.end(), current_printer_system_name) != current_print_compatible_printers.end(); if (!process_compatible && current_print_compatible_printers.empty()) { BOOST_LOG_TRIVIAL(info) << boost::format("old 3mf, no compatible printers, set to compatible"); @@ -2853,8 +3137,10 @@ int CLI::run(int argc, char **argv) } } else { - //todo: support user machine preset's different settings - different_settings[filament_count+1] = ""; + //ORCA: was a //todo — compute the user's overrides instead of writing an empty column. + different_settings[filament_count+1] = new_printer_config_is_system + ? std::string() + : cli_different_settings(load_machine_config, new_printer_system_name, Preset::TYPE_PRINTER); if (new_printer_config_is_system) inherits_group[filament_count+1] = ""; else @@ -2996,8 +3282,14 @@ int CLI::run(int argc, char **argv) print_compatible_printers = std::move(current_print_compatible_printers); } else { - //todo: support system process preset - different_settings[0] = ""; + //ORCA: was a //todo. Prefer a value the loaded JSON already carried, otherwise + // compute the overrides against the system parent. + if (!different_process_setting.empty()) + different_settings[0] = different_process_setting; + else + different_settings[0] = new_process_config_is_system + ? std::string() + : cli_different_settings(load_process_config, new_process_system_name, Preset::TYPE_PRINT); if (new_process_config_is_system) inherits_group[0] = ""; else @@ -3138,7 +3430,25 @@ int CLI::run(int argc, char **argv) std::vector old_variant_counts(filament_count, 1), new_variant_counts; ConfigOptionInts* filament_self_index_opt = m_print_config.option("filament_self_index"); - if (!filament_self_index_opt) { + bool need_regenerate_self_index = !filament_self_index_opt; + if (filament_self_index_opt) { + // a filament_self_index carried over from a stale project can disagree with the + // current filament_count. old_start_indice/old_variant_counts below are sized to + // filament_count and walked with 1-based group indices, so an index above + // filament_count overruns old_start_indice[++k], and a non-positive first index + // writes old_variant_counts[-1] - both heap corruption. + int max_self_index = 0, min_self_index = 1; + for (int v : filament_self_index_opt->values) { + max_self_index = std::max(max_self_index, v); + min_self_index = std::min(min_self_index, v); + } + if (max_self_index > filament_count || min_self_index < 1) { + BOOST_LOG_TRIVIAL(warning) << boost::format("filament_self_index range [%1%, %2%] is invalid for filament_count %3%, regenerating") + % min_self_index % max_self_index % filament_count; + need_regenerate_self_index = true; + } + } + if (need_regenerate_self_index) { filament_self_index_opt = m_print_config.option("filament_self_index", true); std::vector& filament_self_indice = filament_self_index_opt->values; filament_self_indice.resize(filament_count); @@ -3166,6 +3476,16 @@ int CLI::run(int argc, char **argv) int filament_index = load_filaments_index[index]; std::vector different_keys; + //ORCA: diff before load_default_gcodes_to_config, the way the process and machine + // slots above already do. That call materialises absent gcode keys via + // option(..., true), and DynamicConfig::diff only compares keys present in + // both configs -- so a gcode key the leaf did not carry would go from "not + // compared" to "compared as empty against the parent" and land in the column + // as an override the user never made. + std::string filament_different_settings; + if (load_filament_count > 0) + filament_different_settings = cli_different_settings(config, load_filaments_inherit[index], Preset::TYPE_FILAMENT); + load_default_gcodes_to_config(config, Preset::TYPE_FILAMENT); if (load_filament_count > 0) { @@ -3177,8 +3497,8 @@ int CLI::run(int argc, char **argv) opt_filament_settings->set_at(filament_name_setting, filament_index-1, 0); config.erase("filament_settings_id"); - //todo: update different settings of filaments - different_settings[filament_index] = ""; + //ORCA: was a //todo — same treatment as process/machine above. + different_settings[filament_index] = filament_different_settings; inherits_group[filament_index] = load_filaments_inherit[index]; } else { @@ -3483,6 +3803,15 @@ int CLI::run(int argc, char **argv) } } + // A mixed slot never reaches a nozzle, so its row and column stay empty, as in the GUI. + // Command line options are not merged into m_print_config yet, so they win here. + const ConfigOptionBools *is_mixed_opt = m_extra_config.option("filament_is_mixed"); + if (!is_mixed_opt) + is_mixed_opt = m_print_config.option("filament_is_mixed"); + auto is_mixed_slot = [is_mixed_opt](int idx) { + return is_mixed_opt && idx < static_cast(is_mixed_opt->values.size()) && is_mixed_opt->values[idx]; + }; + for (size_t nozzle_id = 0; nozzle_id < new_extruder_count; ++nozzle_id) { std::vector flush_vol_mtx = get_flush_volumes_matrix(flush_vol_matrix, nozzle_id, new_extruder_count); for (int from_idx = 0; from_idx < project_filament_count; from_idx++) { @@ -3492,7 +3821,7 @@ int CLI::run(int argc, char **argv) bool is_from_support = filament_is_support->get_at(from_idx); for (int to_idx = 0; to_idx < project_filament_count; to_idx++) { bool is_to_support = filament_is_support->get_at(to_idx); - if (from_idx == to_idx) { + if (from_idx == to_idx || is_mixed_slot(from_idx) || is_mixed_slot(to_idx)) { flush_vol_mtx[project_filament_count * from_idx + to_idx] = 0.f; } else { int flushing_volume = 0; @@ -3629,12 +3958,113 @@ int CLI::run(int argc, char **argv) } } + //ORCA: settings passed on the command line (--sparse-infill-density 25% ...) override the loaded + // presets right here, so they belong in different_settings_to_system just as a preset + // override does. Without them re-opening the exported project in the GUI shows nothing + // modified and reverts those values to the system presets'. + // + // The keys come from m_config, not m_extra_config: read_cli() puts only what the user typed + // into m_config (setup() adds nothing but CLI-own defaults), whereas the CLI writes its own + // values into m_extra_config. Only keys whose value the override actually changed are + // recorded -- a typed value equal to the loaded one modifies nothing -- and each lands in + // the column(s) whose preset type owns it: [0] process, [1..n-2] filaments, [n-1] printer. + // + // "Changed" is judged the way the value is read: a list is compared entry by entry with a + // missing entry read as the first, as get_at() does -- so --nozzle-temperature 245 against + // 245,245,245 is no change, although the two serialize differently. + // + // A key the loaded config does not carry at all is always recorded, even if the typed value + // equals the built-in default. On reopen the GUI restores an unlisted key from the SYSTEM + // preset, which need not match that default: a 3MF written before an option existed leaves + // it absent here, and --sparse-infill-density 20% (the default) against a Prusa system 15% + // would otherwise go unrecorded and be reverted. Over-recording is cosmetic; under-recording + // loses the value. + std::map> cli_override_before; + for (const std::string &key : m_config.keys()) { + if (!m_extra_config.has(key)) + continue; + const ConfigOption *loaded = m_print_config.option(key); + cli_override_before[key].reset(loaded != nullptr ? loaded->clone() : nullptr); // null: always recorded + } + // Apply command line options to a more specific DynamicPrintConfig which provides normalize() // (command line options override --load files) m_print_config.apply(m_extra_config, true); + + if (!cli_override_before.empty()) { + std::vector &columns = m_print_config.option("different_settings_to_system", true)->values; + auto owned_by = [](const std::vector &options, const std::string &key) { + return std::find(options.begin(), options.end(), key) != options.end(); + }; + auto add_to_column = [&columns](size_t index, const std::string &key) { + std::vector keys; + Slic3r::unescape_strings_cstyle(columns[index], keys); + if (std::find(keys.begin(), keys.end(), key) == keys.end()) { + keys.push_back(key); + columns[index] = Slic3r::escape_strings_cstyle(keys); + } + }; + auto same_value = [](const ConfigOption *a, const ConfigOption *b) { + if (a == nullptr || b == nullptr) + return false; + const auto *va = dynamic_cast(a); + const auto *vb = dynamic_cast(b); + if (va == nullptr || vb == nullptr) + return va == vb && a->serialize() == b->serialize(); + const std::vector ea = va->vserialize(), eb = vb->vserialize(); + if (ea.empty() || eb.empty()) + return ea.empty() && eb.empty(); + for (size_t i = 0; i < std::max(ea.size(), eb.size()); ++i) + if (ea[i < ea.size() ? i : 0] != eb[i < eb.size() ? i : 0]) + return false; + return true; + }; + //ORCA: always true after the resize to filament_count + 2 above, and nothing in between can + // shrink the column vector -- different_settings_to_system is not a CLI option. Kept as + // a check rather than an assert: release builds compile asserts out, so an assert would + // protect nothing, while a build with _GLIBCXX_ASSERTIONS would abort on columns[0]. + if (columns.size() >= 2) { + for (const auto &[key, before] : cli_override_before) { + if (same_value(before.get(), m_print_config.option(key))) + continue; + bool recorded = false; + if (owned_by(Preset::print_options(), key)) { + add_to_column(0, key); + recorded = true; + } + if (owned_by(Preset::filament_options(), key)) { + for (size_t i = 1; i + 1 < columns.size(); ++i) + add_to_column(i, key); + recorded = true; + } + if (owned_by(Preset::printer_options(), key)) { + add_to_column(columns.size() - 1, key); + recorded = true; + } + if (recorded) + BOOST_LOG_TRIVIAL(info) << boost::format("CLI: override %1% recorded in different_settings_to_system") % key; + } + } + } // Normalizing after importing the 3MFs / AMFs m_print_config.normalize_fdm(); + // A mixed slot is virtual but still needs a filament entry of its own. Without one, feature + // filament ids aimed at it fall outside the filament count, are reset to the first filament + // and the model silently prints in a single colour. + if (const auto *is_mixed_opt = m_print_config.option("filament_is_mixed")) { + const auto &is_mixed = is_mixed_opt->values; + for (size_t slot = static_cast(std::max(filament_count, 0)); slot < is_mixed.size(); ++slot) { + if (!is_mixed[slot]) + continue; + BOOST_LOG_TRIVIAL(error) << boost::format("mixed filament slot %1% has no filament of its own, only %2% filaments are loaded; " + "load one filament per slot, including each mixed one") + % (slot + 1) % filament_count; + record_exit_reson(outfile_dir, CLI_MIXED_FILAMENT_INVALID, 0, cli_errors[CLI_MIXED_FILAMENT_INVALID], sliced_info); + flush_and_exit(CLI_MIXED_FILAMENT_INVALID); + } + } + m_print_config.option>("printer_technology", true)->value = printer_technology; bool has_wipe_tower_position = m_print_config.option("wipe_tower_x") && m_print_config.option("wipe_tower_y"); @@ -3689,6 +4119,15 @@ int CLI::run(int argc, char **argv) bool is_smooth_timelapse = false; if (enable_timelapse && timelapse_type_opt && (timelapse_type_opt->getInt() == TimelapseType::tlSmooth)) is_smooth_timelapse = true; + // A mixed filament swaps between its components every layer, so it needs the tower even when + // every loaded preset is the same. + if (disable_wipe_tower_after_mapping) { + if (const auto *is_mixed_opt = m_print_config.option("filament_is_mixed"); + is_mixed_opt && has_any_mixed_filament(is_mixed_opt->values)) { + disable_wipe_tower_after_mapping = false; + BOOST_LOG_TRIVIAL(info) << boost::format("%1%, set disable_wipe_tower_after_mapping back to false due to a mixed filament")%__LINE__; + } + } if (disable_wipe_tower_after_mapping) { if (is_smooth_timelapse) { @@ -3732,6 +4171,8 @@ int CLI::run(int argc, char **argv) double height_to_lid = m_print_config.opt_float("extruder_clearance_height_to_lid"); double height_to_rod = m_print_config.opt_float("extruder_clearance_height_to_rod"); double clearance_radius = m_print_config.opt_float("extruder_clearance_radius"); + double nozzle_height = m_print_config.opt_float("nozzle_height"); + Vec2d align_center = m_print_config.option("best_object_pos")->value; int shared_printable_width = 0, shared_printable_depth = 0, shared_printable_height = 0, shared_center_x = 0, shared_center_y = 0; //double plate_stride; std::string bed_texture; @@ -3742,8 +4183,11 @@ int CLI::run(int argc, char **argv) if (m_print_config.opt("extruder_printable_height")) { current_extruder_print_heights = m_print_config.opt("extruder_printable_height")->values; } - current_printable_width = current_printable_area[2].x() - current_printable_area[0].x(); - current_printable_depth = current_printable_area[2].y() - current_printable_area[0].y(); + { + BoundingBoxf current_printable_bbox(current_printable_area); + current_printable_width = static_cast(current_printable_bbox.size().x()); + current_printable_depth = static_cast(current_printable_bbox.size().y()); + } current_printable_height = print_height; if (old_printable_width == 0) old_printable_width = current_printable_width; @@ -3908,7 +4352,7 @@ int CLI::run(int argc, char **argv) } }; - auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse, new_extruder_count](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) { + auto check_plate_wipe_tower = [get_print_sequence, is_smooth_timelapse](Slic3r::GUI::PartPlate* plate, int plate_index, DynamicPrintConfig& print_config, plate_obj_size_info_t &plate_obj_size_info) { plate_obj_size_info.obj_bbox= plate->get_objects_bounding_box(); BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%, object bbox: min {%2%, %3%, %4%} - max {%5%, %6%, %7%}") %(plate_index+1) %plate_obj_size_info.obj_bbox.min.x() % plate_obj_size_info.obj_bbox.min.y() % plate_obj_size_info.obj_bbox.min.z() %plate_obj_size_info.obj_bbox.max.x() % plate_obj_size_info.obj_bbox.max.y() % plate_obj_size_info.obj_bbox.max.z(); @@ -3944,25 +4388,21 @@ int CLI::run(int argc, char **argv) ConfigOptionFloats *wipe_x_option = dynamic_cast(print_config.option("wipe_tower_x")); ConfigOptionFloats *wipe_y_option = dynamic_cast(print_config.option("wipe_tower_y")); + // get_at() silently clamps an out-of-range index to entry 0 - make the reuse visible + if (static_cast(plate_index) >= wipe_x_option->values.size() || static_cast(plate_index) >= wipe_y_option->values.size()) { + BOOST_LOG_TRIVIAL(warning) << boost::format("plate %1%: wipe_tower_x/y only has %2%/%3% entries, reusing entry 0's position") + %(plate_index+1) %wipe_x_option->values.size() %wipe_y_option->values.size(); + } plate_obj_size_info.wipe_x = wipe_x_option->get_at(plate_index); plate_obj_size_info.wipe_y = wipe_y_option->get_at(plate_index); - ConfigOptionFloat* width_option = print_config.option("prime_tower_width", true); - plate_obj_size_info.wipe_width = width_option->value; + // Body and brim from one estimate: resolving an auto (-1) brim against a different + // height would size the two halves of the same tower from two different objects. + const WipeTowerFootprint footprint = plate->estimate_wipe_tower_footprint(print_config, filaments_cnt); + float brim_width = float(footprint.brim_width); - ConfigOptionFloat* brim_width_option = print_config.option("prime_tower_brim_width", true); - float brim_width = brim_width_option->value; - if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float)plate_obj_size_info.obj_bbox.max.z()); - - ConfigOptionFloat* volume_option = print_config.option("prime_volume", true); - float wipe_volume = volume_option->value; - - const ConfigOptionBool * wrapping_detection = print_config.option("enable_wrapping_detection"); - bool enable_wrapping = (wrapping_detection != nullptr) && wrapping_detection->value; - - Vec3d wipe_tower_size = plate->estimate_wipe_tower_size(print_config, plate_obj_size_info.wipe_width, wipe_volume, new_extruder_count, filaments_cnt, false, enable_wrapping); - plate_obj_size_info.wipe_width = wipe_tower_size(0); - plate_obj_size_info.wipe_depth = wipe_tower_size(1); + plate_obj_size_info.wipe_width = footprint.width; + plate_obj_size_info.wipe_depth = footprint.depth; Vec3d origin = plate->get_origin(); Vec3d start(origin(0) + plate_obj_size_info.wipe_x - brim_width, origin(1) + plate_obj_size_info.wipe_y, 0.f); @@ -4139,8 +4579,9 @@ int CLI::run(int argc, char **argv) temp_extruder_print_heights = config.option("extruder_printable_height", true)->values; if (temp_printable_area.size() >= 4) { - printer_plate.printable_width = (int)(temp_printable_area[2].x() - temp_printable_area[0].x()); - printer_plate.printable_depth = (int)(temp_printable_area[2].y() - temp_printable_area[0].y()); + BoundingBoxf temp_printable_bbox(temp_printable_area); + printer_plate.printable_width = static_cast(temp_printable_bbox.size().x()); + printer_plate.printable_depth = static_cast(temp_printable_bbox.size().y()); printer_plate.printable_height = (int)(config.opt_float("printable_height")); } if (temp_exclude_area.size() >= 4) { @@ -4449,6 +4890,64 @@ int CLI::run(int argc, char **argv) for (auto &o : model.objects) // this affects volumes: o->rotate(Geometry::deg2rad(m_config.opt_float(opt_key)), Y); + } else if (opt_key == "ground_largest_face" || opt_key == "ground_face_normal" || opt_key == "ground_face_point") { + // Each instance is laid on one of its lay-on-face planes, which are computed from the current part + // transformations, so the rotations given before this option are respected. A direction or point is in + // object coordinates, so it names the same face for every instance of an object. + std::function&, const Transform3d&)> pick; + if (opt_key == "ground_largest_face") { + if (m_config.opt_bool(opt_key)) + pick = [](const std::vector& planes, const Transform3d&) { return find_largest_plane(planes); }; + } else { + // Only options given on the command line reach this loop, so an empty value is malformed input too. + const std::string& value = m_config.opt_string(opt_key); + Vec3d v; + int consumed = 0; + if (sscanf(value.c_str(), "%lf,%lf,%lf%n", &v.x(), &v.y(), &v.z(), &consumed) != 3 || consumed != int(value.size()) || + !v.allFinite() || (opt_key == "ground_face_normal" && v.norm() < EPSILON)) { + BOOST_LOG_TRIVIAL(error) << boost::format("Invalid params: %1% expects three comma-separated numbers, got \"%2%\"") % opt_key % value; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + if (opt_key == "ground_face_normal") + pick = [v](const std::vector& planes, const Transform3d&) { return find_plane_by_normal(planes, v); }; + else + pick = [v](const std::vector& planes, const Transform3d& inst_matrix) { + return find_plane_at_point(planes, inst_matrix, v, 0.01); + }; + } + if (pick) { + size_t laid = 0, missed = 0; + for (auto& model : m_models) { + model.add_default_instances(); + for (ModelObject* o : model.objects) + for (size_t i = 0; i < o->instances.size(); ++i) { + const Transform3d inst_matrix = o->instances[i]->get_matrix_no_offset(); + const std::vector planes = lay_on_face_planes(*o, inst_matrix); + if (planes.empty()) { + // Small or smooth parts (e.g. a sphere) have no face to rest on; the gizmo offers none either. + BOOST_LOG_TRIVIAL(warning) << boost::format("%1%: object %2% has no face large enough to lay on, left as it is") % opt_key % o->name; + continue; + } + const int idx = pick(planes, inst_matrix); + if (idx < 0) { + // Only a point can miss: with several objects it usually belongs to one of them. + BOOST_LOG_TRIVIAL(warning) << boost::format("%1%: no face of object %2% contains the point, left as it is") % opt_key % o->name; + ++missed; + continue; + } + BOOST_LOG_TRIVIAL(info) << boost::format("%1%: object %2% instance %3% laid on the %4% mm2 face with normal %5%") + % opt_key % o->name % i % planes[idx].area % planes[idx].normal.transpose(); + lay_on_face(*o, i, planes[idx].normal); + ++laid; + } + } + if (laid == 0 && missed > 0) { + BOOST_LOG_TRIVIAL(error) << boost::format("Invalid params: %1%: no face of any object contains the point") % opt_key; + record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); + flush_and_exit(CLI_INVALID_PARAMS); + } + } } else if (opt_key == "scale") { float ratio = m_config.opt_float(opt_key); if (ratio <= 0.f) { @@ -4722,13 +5221,16 @@ int CLI::run(int argc, char **argv) } } - if (!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1)||(enable_wrapping_detect && !current_wrapping_exclude_area.empty())) + if ((!arrange_cfg.is_seq_print && (assemble_plate.filaments_count > 1))||(enable_wrapping_detect && !current_wrapping_exclude_area.empty())) { //prepare the wipe tower int plate_count = partplate_list.get_plate_count(); auto printer_structure_opt = m_print_config.option>("printer_structure"); - const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + // This margin only pre-adjusts the default away from the near edges; + // estimate_wipe_tower_polygon below computes the real clamped position. + float tower_brim_width = m_print_config.option("prime_tower_brim_width", true)->value; + if (tower_brim_width < 0.f) tower_brim_width = 8.f; // auto: object heights unknown here, 8 mm is the auto cap const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; // set the default position, the same with print config(left top) @@ -4762,7 +5264,7 @@ int CLI::run(int argc, char **argv) wipe_y_option->set_at(&wt_y_opt, i, 0); Vec3d wipe_tower_size, wipe_tower_pos; - ArrangePolygon wipe_tower_ap = cur_plate->estimate_wipe_tower_polygon(m_print_config, i, wipe_tower_pos, wipe_tower_size, new_extruder_count, assemble_plate.filaments_count, true); + ArrangePolygon wipe_tower_ap = cur_plate->estimate_wipe_tower_polygon(m_print_config, i, wipe_tower_pos, wipe_tower_size, assemble_plate.filaments_count, true); //update the new wp position wt_x_opt.value = wipe_tower_pos(0); @@ -4788,6 +5290,8 @@ int CLI::run(int argc, char **argv) arrange_cfg.clearance_height_to_rod = height_to_rod; arrange_cfg.clearance_height_to_lid = height_to_lid; arrange_cfg.clearance_radius = clearance_radius; + arrange_cfg.nozzle_height = nozzle_height; + arrange_cfg.align_center = align_center; arrange_cfg.printable_height = print_height; arrange_cfg.min_obj_distance = 0; if (arrange_cfg.is_seq_print) { @@ -5003,7 +5507,7 @@ int CLI::run(int argc, char **argv) //skip this object due to be locked in plate ap.itemid = locked_aps.size(); locked_aps.emplace_back(ap); - boost::nowide::cout <<__FUNCTION__ << boost::format(": skip locked instance, obj_id %1%, instance_id %2%") % oidx % inst_idx; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": skip locked instance, obj_id %1%, instance_id %2%") % oidx % inst_idx; } } } @@ -5023,7 +5527,10 @@ int CLI::run(int argc, char **argv) int extruder_size = used_filament_set.size(); auto printer_structure_opt = m_print_config.option>("printer_structure"); - const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; + // This margin only pre-adjusts the default away from the near edges; + // estimate_wipe_tower_polygon below computes the real clamped position. + float tower_brim_width = m_print_config.option("prime_tower_brim_width", true)->value; + if (tower_brim_width < 0.f) tower_brim_width = 8.f; // auto: object heights unknown here, 8 mm is the auto cap const float tower_margin = WIPE_TOWER_MARGIN + tower_brim_width; // set the default position, the same with print config(left top) float x = WIPE_TOWER_DEFAULT_X_POS; @@ -5060,7 +5567,7 @@ int CLI::run(int argc, char **argv) } Vec3d wipe_tower_size, wipe_tower_pos; - ArrangePolygon wipe_tower_ap = partplate_list.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(m_print_config, plate_index_valid, wipe_tower_pos, wipe_tower_size, new_extruder_count, extruder_size, true); + ArrangePolygon wipe_tower_ap = partplate_list.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(m_print_config, plate_index_valid, wipe_tower_pos, wipe_tower_size, extruder_size, true); //update the new wp position if (bedid < plate_count) { @@ -5161,21 +5668,16 @@ int CLI::run(int argc, char **argv) //float depth = v * (filaments_cnt - 1) / (layer_height * w); - const ConfigOptionBool *wrapping_detection = m_print_config.option("enable_wrapping_detection"); - bool enable_wrapping = (wrapping_detection != nullptr) && wrapping_detection->value; - - Vec3d wipe_tower_size = cur_plate->estimate_wipe_tower_size(m_print_config, w, v, new_extruder_count, filaments_cnt, false, enable_wrapping); + const WipeTowerFootprint footprint = cur_plate->estimate_wipe_tower_footprint(m_print_config, filaments_cnt); + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); Vec3d plate_origin = cur_plate->get_origin(); - int plate_width, plate_depth, plate_height; + int plate_width, plate_depth; + double plate_height; partplate_list.get_plate_size(plate_width, plate_depth, plate_height); float depth = wipe_tower_size(1); - float margin = 15.f, wp_brim_width = 0.f; - ConfigOption *wipe_tower_brim_width_opt = m_print_config.option("prime_tower_brim_width"); - if (wipe_tower_brim_width_opt ) { - wp_brim_width = wipe_tower_brim_width_opt->getFloat(); - if (wp_brim_width < 0) wp_brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%")%wp_brim_width; - } + // Brim already resolved against the height the body was sized from. + float margin = 15.f, wp_brim_width = float(footprint.brim_width); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%")%wp_brim_width; w = wipe_tower_size(0); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: x=%1%, y=%2%, width=%3%, depth=%4%, angle=%5%, prime_volume=%6%, filaments_cnt=%7%, layer_height=%8%, plate_width=%9%, plate_depth=%10%") @@ -5238,6 +5740,8 @@ int CLI::run(int argc, char **argv) arrange_cfg.clearance_height_to_rod = height_to_rod; arrange_cfg.clearance_height_to_lid = height_to_lid; arrange_cfg.clearance_radius = clearance_radius; + arrange_cfg.nozzle_height = nozzle_height; + arrange_cfg.align_center = align_center; arrange_cfg.printable_height = print_height; arrange_cfg.min_obj_distance = 0; if (arrange_cfg.is_seq_print) { @@ -5592,13 +6096,64 @@ int CLI::run(int argc, char **argv) //FIXME check for mixing the FFF / SLA parameters. // or better save fff_print_config vs. sla_print_config //m_print_config.save(m_config.opt_string("save")); - m_print_config.save_to_json(m_config.opt_string(opt_key), std::string("project_settings"), std::string("project"), std::string(SoftFever_VERSION)); + const std::string &settings_file = m_config.opt_string(opt_key); + if (settings_file == "-") + m_print_config.save_to_json(boost::nowide::cout, "project_settings", "project", SoftFever_VERSION, /*replace_invalid_utf8=*/true); + else + m_print_config.save_to_json(settings_file, std::string("project_settings"), std::string("project"), std::string(SoftFever_VERSION)); } else if (opt_key == "info") { // --info works on unrepaired model for (Model &model : m_models) { model.add_default_instances(); model.print_info(); } + } else if (opt_key == "inspect_mesh") { + // Machine-readable alternative to --info. Registered as an action so it satisfies the + // "needs an action" check and bypasses the GUI fallback, then exits once the JSON is out. + for (Model &model : m_models) { + model.add_default_instances(); + Slic3r::MeshInspect::inspect_to_json(model, m_input_files, boost::nowide::cout); + } + boost::nowide::cout.flush(); + // Conflicting actions were rejected before loading. Finish like the end of run(). + // flush_and_exit() is not usable here: it prints "found error ..." to stdout, + // which would corrupt the JSON. +#if defined(__linux__) || defined(__LINUX__) + if (g_cli_callback_mgr.is_started()) { + PrintBase::SlicingStatus slicing_status{100, "All done, Success"}; + cli_status_callback(slicing_status); + } + g_cli_callback_mgr.stop(); +#endif + for (Model &m : m_models) + m.remove_backup_path_if_exist(); + record_exit_reson(outfile_dir, CLI_SUCCESS, plate_to_slice, cli_errors[CLI_SUCCESS], sliced_info); + boost::nowide::cerr.flush(); + return CLI_SUCCESS; + } else if (opt_key == "inspect_paint") { + // --inspect-paint — read the per-facet enforcer/blocker/extruder/ + // fuzzy state from the loaded model and emit a JSON summary. + // Machine-readable alternative to opening the paint gizmos. + for (Model &model : m_models) { + model.add_default_instances(); + Slic3r::PaintCLI::inspect_to_json(model, m_input_files, boost::nowide::cout); + } + boost::nowide::cout.flush(); + // The tooltip promises "then exit"; conflicting actions were rejected before + // loading. Finish like the end of run(). flush_and_exit() is not usable here: + // it prints "found error ..." to stdout, which would corrupt the JSON. +#if defined(__linux__) || defined(__LINUX__) + if (g_cli_callback_mgr.is_started()) { + PrintBase::SlicingStatus slicing_status{100, "All done, Success"}; + cli_status_callback(slicing_status); + } + g_cli_callback_mgr.stop(); +#endif + for (Model &m : m_models) + m.remove_backup_path_if_exist(); + record_exit_reson(outfile_dir, CLI_SUCCESS, plate_to_slice, cli_errors[CLI_SUCCESS], sliced_info); + boost::nowide::cerr.flush(); + return CLI_SUCCESS; } else if (opt_key == "uptodate") { //already processed before } else if (opt_key == "min_save") { @@ -5639,6 +6194,8 @@ int CLI::run(int argc, char **argv) export_3mf_file = m_config.opt_string(opt_key); }else if(opt_key=="no_check"){ no_check = m_config.opt_bool(opt_key); + }else if(opt_key=="strict"){ + //already read into sliced_info at the start of run() //} else if (opt_key == "export_gcode" || opt_key == "export_sla" || opt_key == "slice") { } else if (opt_key == "normative_check") { //already processed before @@ -5689,6 +6246,34 @@ int CLI::run(int argc, char **argv) //Print fff_print; std::vector plate_triangle_counts(partplate_list.get_plate_count(), 0); + // The stored (or default) tower position may not fit the tower these plates + // need, and no CLI placement site runs on a plain slice - mirror the GUI's + // reload clamp and fit every plate's tower into the printable area first. + if (m_print_config.option("enable_prime_tower", true)->value) { + for (int index = 0; index < partplate_list.get_plate_count(); index++) { + if ((plate_to_slice != 0) && (plate_to_slice != (index + 1))) + continue; + Slic3r::GUI::PartPlate *plate = partplate_list.get_plate(index); + // Printing by object disables the tower only with more than one instance. + bool is_seq_print = false; + get_print_sequence(plate, m_print_config, is_seq_print); + if (is_seq_print && plate->printable_instance_size() > 1) + continue; + // An empty estimate is a plate that prints no tower (one filament and + // neither smooth timelapse, wrapping detection nor a raft). + Vec3d wt_pos, wt_size; + plate->estimate_wipe_tower_polygon(m_print_config, index, wt_pos, wt_size); + if (wt_size(0) < EPSILON || wt_size(1) < EPSILON) + continue; + ConfigOptionFloat wt_x_opt((float) wt_pos(0)); + ConfigOptionFloat wt_y_opt((float) wt_pos(1)); + m_print_config.option("wipe_tower_x", true)->set_at(&wt_x_opt, index, 0); + m_print_config.option("wipe_tower_y", true)->set_at(&wt_y_opt, index, 0); + BOOST_LOG_TRIVIAL(info) << boost::format("plate %1%: wipe tower clamped to {%2%, %3%}, size {%4%, %5%}") + % (index + 1) % wt_pos(0) % wt_pos(1) % wt_size(0) % wt_size(1); + } + } + while(!finished) { //BBS: slice every partplate one by one @@ -5860,6 +6445,36 @@ int CLI::run(int argc, char **argv) flush_and_exit(CLI_ONLY_ONE_TPU_SUPPORTED); } + // Same type gate as the GUI's Sidebar::has_broken_mixed_filament: refuse a plate that uses a + // mixed slot whose components are different filament types. Missing or out-of-range + // components never get here, validate() already rejects them for the whole project. + const auto *is_mixed_opt = m_print_config.option("filament_is_mixed"); + const auto *components_opt = m_print_config.option("filament_mixed_components"); + if (is_mixed_opt && components_opt && has_any_mixed_filament(is_mixed_opt->values)) { + const auto &is_mixed = is_mixed_opt->values; + const auto &components = components_opt->values; + const size_t num_physical = static_cast(filament_count) - static_cast(std::count(is_mixed.begin(), is_mixed.end(), true)); + std::vector physical_types(num_physical); + for (size_t f_index = 0; f_index < num_physical; ++f_index) { + std::string displayed_type; + physical_types[f_index] = m_print_config.get_filament_type(displayed_type, static_cast(f_index)); + if (physical_types[f_index].empty()) + physical_types[f_index] = "PLA"; + } + const std::vector mismatched_slots = check_mixed_filament_type_consistency(is_mixed, components, physical_types); + // plate_filaments has mixed slots expanded to their components; the gate needs the slots. + const std::vector plate_slots = mismatched_slots.empty() ? std::vector() : + part_plate->get_extruders_under_cli(true, m_print_config, false); + for (size_t slot : mismatched_slots) { + if (std::find(plate_slots.begin(), plate_slots.end(), static_cast(slot) + 1) == plate_slots.end()) + continue; + BOOST_LOG_TRIVIAL(error) << boost::format("plate %1%: mixed filament %2% mixes components of different filament types") + % (index + 1) % (slot + 1); + record_exit_reson(outfile_dir, CLI_MIXED_FILAMENT_INVALID, index + 1, cli_errors[CLI_MIXED_FILAMENT_INVALID], sliced_info); + flush_and_exit(CLI_MIXED_FILAMENT_INVALID); + } + } + if (new_extruder_count > 1) { std::vector> unprintable_filament_vec; for (const std::set& filamnt_ids : unprintable_filament_ids) { @@ -6289,6 +6904,15 @@ int CLI::run(int argc, char **argv) if (status.warning_level == PrintStateBase::WarningLevel::NON_CRITICAL) { BOOST_LOG_TRIVIAL(warning) << "plate "<< index+1<< ": found NON_CRITICAL slicing warnings: "<(m_print_config.option("filament_type")); const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); const ConfigOptionFloats* nozzle_diameter_option = dynamic_cast(m_print_config.option("nozzle_diameter")); std::string nozzle_diameter_str; if (nozzle_diameter_option) nozzle_diameter_str = nozzle_diameter_option->serialize(); +#ifdef SLIC3R_GUI + // A Bambu printer reads slice_info.config and knows only its own catalog ids. The GUI + // gates the same translation on PresetBundle::is_bbl_vendor(); the CLI has no + // PresetBundle, so reuse the printer_model prefix that already decides + // Print::is_BBL_printer() for this same run. + auto* printer_model_option = dynamic_cast(m_print_config.option("printer_model")); + const bool is_bbl_printer = printer_model_option && printer_model_option->value.compare(0, 9, "Bambu Lab") == 0; + // No wxApp on the CLI path, so there is no live agent to ask; the translator is stateless + // over a lazily loaded map, so one instance serves every plate and filament below. + // ORCA TODO: this assumes Bambu's is the only agent with a catalog of its own. Once another + // agent carries one, resolve the agent from the selected printer the way + // GUI_App::resolve_printer_agent_id does, rather than hard-coding BBLPrinterAgent here. + const BBLPrinterAgent bbl_agent; +#endif /* SLIC3R_GUI */ for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; @@ -6516,10 +7153,15 @@ int CLI::run(int argc, char **argv) plate_data->nozzle_diameters = nozzle_diameter_str; for (auto it = plate_data->slice_filaments_info.begin(); it != plate_data->slice_filaments_info.end(); it++) { + // get_at() on an empty vector option is UB - these can be unpopulated on a from-scratch slice std::string display_filament_type; it->type = m_print_config.get_filament_type(display_filament_type, it->id); - it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; - it->filament_id = filament_id?filament_id->get_at(it->id):""; + it->color = (filament_color && !filament_color->values.empty()) ? filament_color->get_at(it->id) : "#FFFFFF"; + it->filament_id = (filament_id && !filament_id->values.empty()) ? filament_id->get_at(it->id) : ""; +#ifdef SLIC3R_GUI + if (is_bbl_printer) + it->filament_id = bbl_agent.from_orca_filament_id(it->filament_id); +#endif /* SLIC3R_GUI */ } if (!plate_data->plate_thumbnail.is_valid()) { @@ -7294,6 +7936,13 @@ bool CLI::setup(int argc, char **argv) this->print_help(); return false; } + + // Orca: resolve here, while the process is still in the directory the user invoked it from. + // GUI_App's constructor moves the working directory to /log, long before the GUI + // opens these files in post_init(), and a relative path would then resolve against that. + for (std::string &input_file : m_input_files) + input_file = resolve_cli_input_path(input_file); + // Parse actions and transform options. for (auto const &opt_key : opt_order) { if (cli_actions_config_def.has(opt_key)) @@ -7311,6 +7960,10 @@ bool CLI::setup(int argc, char **argv) m_config.option(optdef.first, true); set_data_dir(m_config.opt_string("datadir")); + if (!data_dir().empty() && !boost::filesystem::exists(data_dir())) { + boost::nowide::cerr << "Could not create data directory: " << data_dir() << std::endl; + return false; + } //FIXME Validating at this stage most likely does not make sense, as the config is not fully initialized yet. if (!validity.empty()) { @@ -7384,7 +8037,7 @@ void CLI::print_help(bool include_print_options, PrinterTechnology printer_techn << std::endl << "Print setting priorities:" << std::endl << "\t1) setting values from the command line (highest priority)"<< std::endl - << "\t2) setting values loaded with --load_settings and --load_filaments" << std::endl + << "\t2) setting values loaded with --load-settings and --load-filaments" << std::endl << "\t3) setting values loaded from 3mf(lowest priority)" << std::endl; /*if (include_print_options) { @@ -7423,6 +8076,10 @@ bool CLI::export_models(IO::ExportFormat format, std::string path_dir) for (ModelObject* model_object : model.objects) { const std::string path = this->output_filepath(*model_object, index++, format, path_dir); + if (path.empty()) { + boost::nowide::cerr << "Could not create output directory for STL export" << std::endl; + return false; + } success = Slic3r::store_stl(path.c_str(), model_object, true); if (success) BOOST_LOG_TRIVIAL(info) << "Model successfully exported to " << path << std::endl; @@ -7548,8 +8205,19 @@ std::string CLI::output_filepath(const ModelObject &object, unsigned int index, output_path = subdir + "/"+file_name; boost::filesystem::path subdir_path(subdir); - if (!boost::filesystem::exists(subdir_path)) - boost::filesystem::create_directory(subdir_path); + if (!boost::filesystem::exists(subdir_path)) { + try { + boost::filesystem::create_directories(subdir_path); + } catch (const boost::filesystem::filesystem_error &ex) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": failed to create output directory " << subdir_path.string() << ": " << ex.what(); + } + if (!boost::filesystem::exists(subdir_path)) { + // Directory creation failed and won't succeed on a retry (same path, same cause) - + // signal failure now instead of letting every object in the model repeat the same + // doomed attempt and fail with a less specific "export failed" error later. + return std::string(); + } + } return output_path; } diff --git a/src/OrcaSlicer_app_msvc.cpp b/src/OrcaSlicer_app_msvc.cpp index 35568a9cfa..265047fa34 100644 --- a/src/OrcaSlicer_app_msvc.cpp +++ b/src/OrcaSlicer_app_msvc.cpp @@ -297,7 +297,7 @@ int wmain(int argc, wchar_t **argv) // printf("Loading Slic3r library: %S\n", path_to_slic3r); HINSTANCE hInstance_Slic3r = LoadLibraryExW(path_to_slic3r, nullptr, 0); if (hInstance_Slic3r == nullptr) { - printf("OrcaSlicer.dll was not loaded, error=%d\n", GetLastError()); + printf("OrcaSlicer.dll was not loaded, error=%lu\n", GetLastError()); return -1; } diff --git a/src/dev-utils/BaseException.cpp b/src/dev-utils/BaseException.cpp index efb7a98245..048eadf151 100644 --- a/src/dev-utils/BaseException.cpp +++ b/src/dev-utils/BaseException.cpp @@ -9,6 +9,7 @@ #include #include +#include "git_commit_hash.h" #include "libslic3r_version.h" static std::string g_log_folder; @@ -39,7 +40,7 @@ CBaseException::CBaseException(HANDLE hProcess, WORD wPID, LPCTSTR lpSymbolPath, output_file->open(log_filename, std::ios::out | std::ios::app); // Output app build info in crash log so we could look for the correct PDB files - OutputString(_T("%s\n\n"), _T(SLIC3R_APP_NAME " " SoftFever_VERSION " Build " GIT_COMMIT_HASH)); + OutputString(_T("%s\n\n"), _T(SLIC3R_APP_NAME " " SoftFever_VERSION " Build " GIT_COMMIT_HASH GIT_COMMIT_SUFFIX)); } } diff --git a/src/dev-utils/BaseException.h b/src/dev-utils/BaseException.h index 2cb65d945e..20b6fb0c89 100644 --- a/src/dev-utils/BaseException.h +++ b/src/dev-utils/BaseException.h @@ -1,7 +1,7 @@ #pragma once #include #include -#include "stackwalker.h" +#include "StackWalker.h" #include class CBaseException : public CStackWalker diff --git a/src/dev-utils/OrcaSlicer_profile_validator.cpp b/src/dev-utils/OrcaSlicer_profile_validator.cpp index 49a38cd1c4..56acbaa732 100644 --- a/src/dev-utils/OrcaSlicer_profile_validator.cpp +++ b/src/dev-utils/OrcaSlicer_profile_validator.cpp @@ -8,7 +8,11 @@ #define NANOSVGRAST_IMPLEMENTATION #include "nanosvg/nanosvgrast.h" +#include "libslic3r/BoundingBox.hpp" #include "libslic3r/GCode.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" +#include "libslic3r/Geometry.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/Config.hpp" #include "libslic3r/PresetBundle.hpp" @@ -116,15 +120,45 @@ Vec2d printable_area_center(const DynamicPrintConfig &cfg) return 0.5 * (lo + hi); } +// Put the prime tower where the GUI and CLI would before slicing. The config default (x 15, y 220) +// lies off any bed shallower than the tower, and generation rejects an off-plate tower instead of +// exporting it. Beside the centred cube, clear of the edge exclusion strips some beds carry, then +// pulled inside the printable outline by the tower's own estimated footprint, with a few mm of +// clearance so the conflict checker never sees the two touch. +void place_wipe_tower(DynamicPrintConfig &cfg, const Vec2d ¢er) +{ + const auto *area = cfg.option("printable_area"); + if (area == nullptr || area->values.size() < 3) + return; + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(cfg, resolve_wipe_tower_type(cfg), {0, 1}, cfg.opt_float("layer_height"), 10.); + if (footprint.depth < EPSILON) + return; + const double margin = WIPE_TOWER_MARGIN + footprint.brim_width; + // The position is the tower's own origin; a rotated tower extends from it in another + // direction, so place the rotated box's extents rather than the origin. + Slic3r::Polygon box({Point::new_scale(0., 0.), Point::new_scale(footprint.width, 0.), Point::new_scale(footprint.width, footprint.depth), Point::new_scale(0., footprint.depth)}); + box.rotate(Geometry::deg2rad(cfg.opt_float("wipe_tower_rotation_angle"))); + const BoundingBox local = get_extents(box); + const Vec2d lo = unscale(local.min); + const Vec2d size = unscale(local.max) - lo; + Vec2d pos(center.x() + 5. + margin + 5. - lo.x(), center.y() - size.y() / 2. - lo.y()); + box.translate(Point::new_scale(pos.x(), pos.y())); + const Vec2f move = WipeTower::move_box_inside_polygon(get_extents(box), Polygons{Polygon::new_scale(area->values)}, scaled(margin)); + pos += move.cast(); + cfg.option("wipe_tower_x", true)->values = {pos.x()}; + cfg.option("wipe_tower_y", true)->values = {pos.y()}; +} + // Slice one centered cube that switches from filament 1 to filament 2 partway up, so exactly one // filament change fires, then export. The change drives the printer's own change_filament_gcode: on a // single-nozzle machine it rides the AMS prime tower (append_tcr), on a multi-nozzle machine it routes // through the nozzle swap (set_extruder / append_tcr2) - the engine picks the path from the printer's // topology, so one model covers both. An undefined placeholder in any shipped custom g-code throws // Slic3r::PlaceholderParserError from export. -std::string slice_two_color_cube_and_export(const DynamicPrintConfig &cfg, bool is_bbl) +std::string slice_two_color_cube_and_export(DynamicPrintConfig cfg, bool is_bbl) { const Vec2d center = printable_area_center(cfg); + place_wipe_tower(cfg, center); TriangleMesh m = make_cube(10, 10, 10); m.translate(float(center.x() - 5.), float(center.y() - 5.), 0.f); @@ -175,6 +209,17 @@ void select_printer_default_presets(PresetBundle &bundle) if (const auto *def_fil = printer_preset.config.option("default_filament_profile"); def_fil != nullptr && !def_fil->values.empty()) bundle.filaments.select_preset_by_name(def_fil->values.front(), /*force=*/true); + // Re-seed the per-slot filament list from that selection, or the sweep's result depends on the + // printer sliced before it. Once there are 2+ slots, full_config() builds the filament config from + // filament_presets and ignores the selected preset (PresetBundle::full_fff_config), while + // update_compatible() only replaces a slot that has gone *incompatible* - and when it does, it ranks + // the outgoing preset's alias, then its filament type, above the printer's own default. The sweep + // grows every printer to 2 slots and update_multi_material_filament_presets() never shrinks them, so + // a material picked up on the first printer rides the whole run. With all vendors loaded the first + // printer inherits a TPU (the load-time pick is whichever filament sorts first), the type match + // re-resolves it to "Generic TPU @System", and its alias then pins every later printer to that + // vendor's own "Generic TPU @..." - which the BBL dual-nozzle profiles rightly refuse to group. + bundle.filament_presets.assign(1, bundle.filaments.get_selected_preset_name()); } // The vendor/printer currently being sliced, stamped onto every engine log record by the sink below so @@ -381,7 +426,7 @@ int main(int argc, char* argv[]) ("generate_presets,g", po::value()->default_value(false), "Generate user presets for mock test") ("slice,s", po::bool_switch()->default_value(false), "Slice a two-colour cube through every printer to expand all custom g-code (catches placeholder/flow errors that static checks miss). Off unless this flag is present.") ("outdir,o", po::value()->default_value(""), "With -s, also save each printer's g-code to this folder (as __.gcode) for manual inspection. Optional.") - ("check_filament_subtypes,f", po::bool_switch()->default_value(false), "Also flag printers with duplicate (ambiguous) filament subtypes. Off unless this flag is present.") + ("check_filament_subtypes,f", po::bool_switch()->default_value(true), "Also flag printers with duplicate (ambiguous) filament subtypes. Off unless this flag is present.") ("log_level,l", po::value()->default_value(2), "Log level. Optional, default is 2 (warning). Higher values produce more detailed logs."); // clang-format on diff --git a/src/dev-utils/StackWalker.cpp b/src/dev-utils/StackWalker.cpp index 468e8927a5..3ef983cd86 100644 --- a/src/dev-utils/StackWalker.cpp +++ b/src/dev-utils/StackWalker.cpp @@ -364,7 +364,7 @@ void CStackWalker::GetModuleInformation(LPMODULE_INFO pmi) if (dwInfoSize > 0) { - LPVOID lpData = new byte[dwInfoSize]; + byte *lpData = new byte[dwInfoSize]; ZeroMemory(lpData, dwInfoSize * sizeof(byte)); if (GetFileVersionInfo(pmi->szModulePath, dwHandle, dwInfoSize, lpData) > 0 ) @@ -425,7 +425,7 @@ LPSTACKINFO CStackWalker::StackWalker(HANDLE hThread, const CONTEXT* context) else c = *context; - STACKFRAME64 sf = {0}; + STACKFRAME64 sf = {}; DWORD imageType; //intel X86 diff --git a/src/dev-utils/generate_system_cache.cpp b/src/dev-utils/generate_system_cache.cpp index 426ccee997..017db79836 100644 --- a/src/dev-utils/generate_system_cache.cpp +++ b/src/dev-utils/generate_system_cache.cpp @@ -23,7 +23,8 @@ int main(int argc, char* argv[]) #else ("path,p", po::value()->default_value("../../../resources/profiles"), "Path to profiles directory") #endif - ("log_level,l", po::value()->default_value(2), "Log level (0=trace, 2=info, 4=error)"); + ("log_level,l", po::value()->default_value(2), "Log level (0=trace, 2=info, 4=error)") + ("vendor,v", po::value()->default_value(""), "Vendor name. Optional; generate the cache for this vendor only (the Orca filament library is always included as the inheritance base). All vendors if not specified."); // clang-format on po::variables_map vm; @@ -38,6 +39,7 @@ int main(int argc, char* argv[]) const std::string profiles_path = vm["path"].as(); const int log_level = vm["log_level"].as(); + const std::string vendor = vm["vendor"].as(); if (!fs::exists(profiles_path) || !fs::is_directory(profiles_path)) { std::cerr << "Error: '" << profiles_path << "' is not a valid directory\n"; @@ -59,8 +61,12 @@ int main(int argc, char* argv[]) preset_bundle->set_is_validation_mode(true); preset_bundle->set_default_suppressed(true); preset_bundle->set_generate_vendor_caches(true); + // Empty == every vendor. Otherwise only this vendor (plus the always-loaded + // Orca filament library) is parsed, so only its .opc is written. + preset_bundle->set_vendor_to_validate(vendor); - std::cout << "Loading system presets from: " << profiles_path << "\n"; + std::cout << "Loading system presets from: " << profiles_path + << (vendor.empty() ? "" : " (vendor: " + vendor + ")") << "\n"; try { // In validation mode data_dir() is the profiles directory set above, so the @@ -71,6 +77,14 @@ int main(int argc, char* argv[]) return 1; } + // A specific vendor must have produced its own cache; the always-loaded + // filament library alone would otherwise mask a misspelt or removed name. + if (!vendor.empty() && !fs::exists(fs::path(profiles_path) / (vendor + ".opc"))) { + std::cerr << "No cache was generated for vendor '" << vendor << "' under " << profiles_path + << " - check the vendor name.\n"; + return 1; + } + size_t cache_count = 0; for (auto& entry : fs::directory_iterator(profiles_path)) if (boost::iends_with(entry.path().string(), ".opc")) diff --git a/src/dev-utils/platform/unix/build_linux_image.sh.in b/src/dev-utils/platform/unix/build_linux_image.sh.in index 85134b764d..873cf2e1b1 100755 --- a/src/dev-utils/platform/unix/build_linux_image.sh.in +++ b/src/dev-utils/platform/unix/build_linux_image.sh.in @@ -83,6 +83,10 @@ copy_shared_object_to_dir() { src_real="$(readlink -f "$src")" dst_name="$(basename "$src_real")" mkdir -p "$dst_dir" + if [ "$src_real" = "$dst_dir/$dst_name" ]; then + # Already bundled; the dependency resolved from the bundle directory. + return 0 + fi cp -fL "$src_real" "$dst_dir/$dst_name" if [ -L "$src" ]; then @@ -96,12 +100,23 @@ copy_shared_object_to_dir() { } bundle_dependency_closure() { - local dst_dir="$1" + local dst_dir + dst_dir="$(cd -- "$1" && pwd)" shift local -a queue=("$@") - local target dep dep_real copied_path + local target dep dep_real dep_key copied_path declare -A seen=() + # Dependencies are resolved with ldd, which only searches the default + # loader path. Deps-built shared libraries (e.g. the FFmpeg stack) are not + # installed there and carry no RUNPATH of their own, so once copied into + # the bundle ldd can no longer resolve one sibling from another + # (libavcodec -> libavutil) and reports it as missing. Extend the loader + # path with the bundle directory plus the source directories of files + # already bundled, so every library that was resolved once keeps resolving + # for its own dependencies. The audit script does the same + # (scripts/check_appimage_libs.sh). + local -a search_dirs=("$dst_dir") while [ ${#queue[@]} -gt 0 ]; do target="${queue[0]}" @@ -122,17 +137,24 @@ bundle_dependency_closure() { continue fi - if [ -n "${seen[$dep_real]}" ]; then + # Key dedup on the bundled file rather than the source path: once + # ldd resolves a library from the bundle directory (via the + # LD_LIBRARY_PATH above) its path is a dst_dir path, which differs + # from the source path the first resolution returned. Keying on + # the source path would re-copy the file onto itself. + dep_key="$dst_dir/$(basename "$dep_real")" + if [ -n "${seen[$dep_key]}" ]; then continue fi - seen[$dep_real]=1 + seen[$dep_key]=1 copy_shared_object_to_dir "$dep" "$dst_dir" + search_dirs+=("$(dirname "$dep_real")") copied_path="$dst_dir/$(basename "$dep_real")" if [ -e "$copied_path" ]; then queue+=("$copied_path") fi - done < <(appimage_list_direct_dependencies "$target") + done < <(LD_LIBRARY_PATH="$(IFS=:; printf '%s' "${search_dirs[*]}")${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" appimage_list_direct_dependencies "$target") done } diff --git a/src/libslic3r/AABBTreeIndirect.hpp b/src/libslic3r/AABBTreeIndirect.hpp index 035982d876..483ca8efc4 100644 --- a/src/libslic3r/AABBTreeIndirect.hpp +++ b/src/libslic3r/AABBTreeIndirect.hpp @@ -229,7 +229,7 @@ public: m_bbox(bbox.min - Point(SCALED_EPSILON, SCALED_EPSILON), bbox.max + Point(SCALED_EPSILON, SCALED_EPSILON)) {} size_t idx() const { return m_idx; } const BoundingBox& bbox() const { return m_bbox; } - Point centroid() const { return (m_bbox.min() + m_bbox.max() / 2); } + Point centroid() const { return (m_bbox.min() + m_bbox.max()) / 2; } private: size_t m_idx; BoundingBox m_bbox; diff --git a/src/libslic3r/Algorithm/LineSplit.hpp b/src/libslic3r/Algorithm/LineSplit.hpp index 58b9fdc34a..e12113fa6c 100644 --- a/src/libslic3r/Algorithm/LineSplit.hpp +++ b/src/libslic3r/Algorithm/LineSplit.hpp @@ -49,7 +49,7 @@ SplittedLine split_line(const PathType& path, const ExPolygons& clip, bool close // Convert the input path into an open ZPath ClipperZUtils::ZPath p; - p.reserve(path.size() + closed ? 1 : 0); + p.reserve(path.size() + (closed ? 1 : 0)); ClipperLib_Z::cInt z = 0; for (const auto& point : path) { p.emplace_back(point.x(), point.y(), z); diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 2d0c6a5d8d..33e25b18cd 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -42,6 +42,9 @@ namespace Slic3r { static const std::string VERSION_CHECK_URL = "https://check-version.orcaslicer.com/latest"; static const std::string PROFILE_UPDATE_URL = "https://check-version.orcaslicer.com/profile"; + +constexpr const char* CONFIG_ORCA_UPDATER_URL = "orca_updater_url"; + static const std::string MODELS_STR = "models"; const std::string AppConfig::SECTION_FILAMENTS = "filaments"; @@ -310,6 +313,26 @@ void AppConfig::set_defaults() if (get("zoom_to_mouse").empty()) set_bool("zoom_to_mouse", false); +#ifdef SLIC3R_CAD + // Experimental parametric Design tab. Off by default: the tab is not created at all + // until this is turned on, so nothing it builds reaches an unsuspecting user. + if (get("enable_cad_feature").empty()) + set_bool("enable_cad_feature", false); + + // Auto-weld sketch endpoints within kSketchJoinTol when building closed loops. + // Default ON: it is what the ~90% case wants; OFF makes the kernel demand an exact + // joint. The GUI pushes it into SketchEngine via set_sketch_auto_close(). + if (get("auto_close_sketch_loops").empty()) + set_bool("auto_close_sketch_loops", true); + + // Design tab: draw a mate connector as a face rather than as the abstract disc + roll + // quadrant. Defaults ON — face orientation is hardwired perception, so the roll and the + // verse read without being learned, which no abstract glyph achieves. Turning it off + // restores the conventional CAD representation for users who expect it (x0kd). + if (get("design_connector_face_glyph").empty()) + set_bool("design_connector_face_glyph", true); +#endif + //#ifdef SUPPORT_SHOW_HINTS if (get("show_hints").empty()) set_bool("show_hints", false); @@ -635,6 +658,11 @@ void AppConfig::set_defaults() set_bool("use_printer_agents", false); } + if (get("enable_ota").empty()) + { + set_bool("enable_ota", false); + } + // Remove legacy window positions/sizes erase("app", "main_frame_maximized"); erase("app", "main_frame_pos"); @@ -1440,6 +1468,7 @@ void AppConfig::set_mouse_device(const std::string& name, double translation_spe it->second["invert_yaw"] = invert_yaw ? "1" : "0"; it->second["invert_pitch"] = invert_pitch ? "1" : "0"; it->second["invert_roll"] = invert_roll ? "1" : "0"; + m_dirty = true; } std::vector AppConfig::get_mouse_device_names() const @@ -1814,7 +1843,10 @@ std::string AppConfig::version_check_url() const std::string AppConfig::profile_update_url() const { - return PROFILE_UPDATE_URL; + std::string orca_updater_url = get(CONFIG_ORCA_UPDATER_URL); + if (orca_updater_url.empty()) + return PROFILE_UPDATE_URL; + return orca_updater_url; } bool AppConfig::exists() @@ -1822,4 +1854,9 @@ bool AppConfig::exists() return boost::filesystem::exists(config_path()); } +std::string AppConfig::load_if_exists() +{ + return boost::filesystem::exists(loading_path()) ? load() : std::string(); +} + }; // namespace Slic3r diff --git a/src/libslic3r/AppConfig.hpp b/src/libslic3r/AppConfig.hpp index 0a278f4f1f..c799502993 100644 --- a/src/libslic3r/AppConfig.hpp +++ b/src/libslic3r/AppConfig.hpp @@ -113,8 +113,10 @@ public: void set_defaults(); // Load the slic3r.ini from a user profile directory (or a datadir, if configured). - // return error string or empty strinf + // Return an error string, or an empty string on success. std::string load(); + // Treat a missing config as default state; otherwise load it normally. + std::string load_if_exists(); // Store the slic3r.ini into a user profile directory (or a datadir, if configured). void save(); diff --git a/src/libslic3r/ArcFitter.cpp b/src/libslic3r/ArcFitter.cpp index cdfd708b10..46dd12931e 100644 --- a/src/libslic3r/ArcFitter.cpp +++ b/src/libslic3r/ArcFitter.cpp @@ -57,24 +57,24 @@ void ArcFitter::do_arc_fitting(const Points& points, std::vector 2) { //BBS: althought current point_stack can't be fit as arc, //but previous must can be fit if removing the top in stack, so save last arc - result.emplace_back(std::move(PathFittingData{ front_index, + result.emplace_back(PathFittingData{ front_index, back_index - 1, last_arc.direction == ArcDirection::Arc_Dir_CCW ? EMovePathType::Arc_move_ccw : EMovePathType::Arc_move_cw, - last_arc })); + last_arc }); } else { //BBS: save the first segment as line move when 3 point-line can't be fit as arc move if (result.empty() || result.back().path_type != EMovePathType::Linear_move) - result.emplace_back(std::move(PathFittingData{front_index, front_index + 1, EMovePathType::Linear_move, ArcSegment()})); + result.emplace_back(PathFittingData{front_index, front_index + 1, EMovePathType::Linear_move, ArcSegment()}); else if(result.back().path_type == EMovePathType::Linear_move) result.back().end_point_index = front_index + 1; } @@ -87,7 +87,7 @@ void ArcFitter::do_arc_fitting(const Points& points, std::vector +#include #include #ifdef WIN32 diff --git a/src/libslic3r/BuildVolume.cpp b/src/libslic3r/BuildVolume.cpp index 1ac200d9c8..15e6668bae 100644 --- a/src/libslic3r/BuildVolume.cpp +++ b/src/libslic3r/BuildVolume.cpp @@ -13,7 +13,6 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double : m_bed_shape(printable_area), m_max_print_height(printable_height), m_extruder_shapes(extruder_areas), m_extruder_printable_height(extruder_printable_heights) { assert(printable_height >= 0); - //assert(extruder_printable_heights.size() == extruder_areas.size()); m_polygon = Polygon::new_scale(printable_area); assert(m_polygon.is_counter_clockwise()); @@ -86,6 +85,9 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double m_shared_volume.data[2] = m_bboxf.max.x(); m_shared_volume.data[3] = m_bboxf.max.y(); m_shared_volume.zs[1] = m_bboxf.max.z(); + if (extruder_printable_heights.size() < m_extruder_shapes.size()) + BOOST_LOG_TRIVIAL(warning) << boost::format("extruder_printable_height has only %1% entries but extruder_printable_area has %2%, falling back to the bed printable_height for the missing ones") + % extruder_printable_heights.size() % m_extruder_shapes.size(); for (unsigned int index = 0; index < m_extruder_shapes.size(); index++) { std::vector& extruder_shape = m_extruder_shapes[index]; @@ -100,7 +102,9 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double return; } - if ((extruder_shape == printable_area)&&(extruder_printable_heights[index] == printable_height)) { + const double extruder_height = index < extruder_printable_heights.size() ? extruder_printable_heights[index] : printable_height; + + if ((extruder_shape == printable_area)&&(extruder_height == printable_height)) { extruder_volume.same_with_bed = true; extruder_volume.type = m_type; extruder_volume.bbox = m_bbox; @@ -113,7 +117,7 @@ BuildVolume::BuildVolume(const std::vector &printable_area, const double double poly_area = poly.area(); extruder_volume.bbox = get_extents(poly); BoundingBoxf temp_bboxf = get_extents(extruder_shape); - extruder_volume.bboxf = BoundingBoxf3{ to_3d(temp_bboxf.min, 0.), to_3d(temp_bboxf.max, extruder_printable_heights[index]) }; + extruder_volume.bboxf = BoundingBoxf3{ to_3d(temp_bboxf.min, 0.), to_3d(temp_bboxf.max, extruder_height) }; if (extruder_shape.size() >= 4 && std::abs((poly_area - double(extruder_volume.bbox.size().x()) * double(extruder_volume.bbox.size().y()))) < sqr(SCALED_EPSILON)) { diff --git a/src/libslic3r/CAD/CadDocument.cpp b/src/libslic3r/CAD/CadDocument.cpp new file mode 100644 index 0000000000..c20b636ae7 --- /dev/null +++ b/src/libslic3r/CAD/CadDocument.cpp @@ -0,0 +1,4125 @@ +#include "libslic3r/CAD/CadDocument.hpp" +#include "libslic3r/CAD/SketchConstraints.hpp" +#include "libslic3r/CAD/SketchSolver.hpp" +#include "libslic3r/CAD/SketchImport.hpp" // transform_regions for imported art + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // plane_of_face: reject non-planar faces +#include +#include +#include +#include +#include +#include +#include // SurfaceFill: GeomAbs_C0 +#include +#include +#include +#include +#include +#include // multi-body: compound of bodies for display/compat +#include +#include // outward-normal orientation for face-extrude +#include // TopoDS::Edge for SurfaceFill +#include // is_sheet_shape +#include +#include +#include +#include +#include +#include // pattern: rigid copy transforms +#include // STEP export (native B-rep) +#include +#include +#include // pattern: rotation axis (circular) +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace Slic3r { + +// ---- helical-thread construction helpers (file-local) ---------------------- + +// Helix spine on a cylinder (radius/pitch/height) about `axis`, as a wire. +static TopoDS_Wire make_helix_wire(const gp_Ax3& axis, double radius, + double pitch, double height) +{ + Handle(Geom_CylindricalSurface) cyl = new Geom_CylindricalSurface(axis, radius); + double turns = (pitch > 1e-6) ? (height / pitch) : 1.0; + // In the surface (u,v) parametrization u is the angle, v the axial height. + gp_Pnt2d p0(0.0, 0.0); + gp_Pnt2d p1(2.0 * M_PI * turns, height); + Handle(Geom2d_TrimmedCurve) seg = GCE2d_MakeSegment(p0, p1); + TopoDS_Edge e = BRepBuilderAPI_MakeEdge(seg, cyl).Edge(); + BRepLib::BuildCurves3d(e); + return BRepBuilderAPI_MakeWire(e).Wire(); +} + +// Helix spine from a CadFeature's helix params. Supports cylindrical (taper==0) +// and conical (taper!=0) surfaces; left_handed flips the winding direction. +// Returns null wire if validation fails (error is written to err). +static TopoDS_Wire make_helix_spine(const CadFeature& f, std::string& err) +{ + err.clear(); + const double R = f.helix_radius, P = f.helix_pitch, H = f.helix_height; + const double taper = f.helix_taper_deg * M_PI / 180.0; + + if (R <= 0) { err = "helix radius must be > 0"; return TopoDS_Wire(); } + if (P <= 0) { err = "helix pitch must be > 0"; return TopoDS_Wire(); } + if (H < 0) { err = "helix height must be >= 0"; return TopoDS_Wire(); } + if (H == 0) { err = "helix height of 0 (flat spiral) is not supported"; return TopoDS_Wire(); } + const double turns = H / P; + if (turns > 10000) { err = "helix turn count exceeds limit (10000)"; return TopoDS_Wire(); } + if (std::abs(taper) > 1e-12) { + const double R_top = R + H * std::tan(taper); + if (R_top <= 0) { + err = "helix taper drives radius negative before reaching height"; + return TopoDS_Wire(); + } + } + + gp_Dir zdir(f.plane.normal.x(), f.plane.normal.y(), f.plane.normal.z()); + gp_Dir xdir(f.plane.x_axis.x(), f.plane.x_axis.y(), f.plane.x_axis.z()); + Vec3d ori = f.plane.origin; + gp_Pnt o(ori.x(), ori.y(), ori.z()); + gp_Ax2 ax2(o, zdir, xdir); + gp_Ax3 ax3(o, zdir, xdir); + + TopoDS_Edge e; + if (std::abs(taper) > 1e-12) { + Handle(Geom_ConicalSurface) cone = new Geom_ConicalSurface(ax3, taper, R); + double u1 = f.helix_left_handed ? -2.0 * M_PI * turns : 2.0 * M_PI * turns; + gp_Pnt2d p0(0.0, 0.0); + gp_Pnt2d p1(u1, H); + Handle(Geom2d_TrimmedCurve) seg = GCE2d_MakeSegment(p0, p1); + e = BRepBuilderAPI_MakeEdge(seg, cone).Edge(); + } else { + Handle(Geom_CylindricalSurface) cyl = new Geom_CylindricalSurface(ax3, R); + double u1 = f.helix_left_handed ? -2.0 * M_PI * turns : 2.0 * M_PI * turns; + gp_Pnt2d p0(0.0, 0.0); + gp_Pnt2d p1(u1, H); + Handle(Geom2d_TrimmedCurve) seg = GCE2d_MakeSegment(p0, p1); + e = BRepBuilderAPI_MakeEdge(seg, cyl).Edge(); + } + BRepLib::BuildCurves3d(e); + return BRepBuilderAPI_MakeWire(e).Wire(); +} + +// Triangular axial thread profile (a planar face) placed at the helix start +// (origin + radius*xdir). Spans +-pitch/2 axially; apex offset radially by depth. +// Both thread kinds sweep the SAME outward-biting V (base on the cylinder wall, +// apex `depth` into the surrounding material). Only the boolean differs: +// - external: the V is FUSED to the rod -> a raised helical ridge. +// - internal: the V is CUT from the wall -> a sunken helical groove. The cut MUST +// go outward into the wall to be visible; an inward V (the old behaviour) only +// sweeps already-empty bore space and removes nothing. +static TopoDS_Wire make_thread_profile(const gp_Pnt& origin, const gp_Dir& xdir, + const gp_Dir& zdir, double radius, + double pitch, double depth, bool internal) +{ + // `internal` is intentionally unused: the V is the same shape either way, always pointing + // radially outward from `radius`. What differs is what the caller DOES with the swept solid + // — an external thread fuses it onto the shaft, an internal one cuts it out of the wall after + // boring at the minor diameter. Keeping the parameter documents that the caller decided, and + // stops someone "fixing" the profile to point inward for the internal case, which would make + // the groove sweep already-empty bore space and cut nothing. + (void)internal; + gp_Vec vx(xdir), vz(zdir); + // Root the V CLEARLY inside the wall (a real overlap, not a 0.05 mm tangency) so the boolean + // has clean intersections — near-coincident faces are what make OCCT's fuse/cut unstable. + const double over = std::min(std::max(depth, 0.25), radius * 0.4); + double inner = radius - over; // base, well inside the wall (solid overlap) + double crest = radius + depth; // apex, `depth` into the surrounding material + // Axial half-height must be < pitch/2 so ADJACENT helix turns don't collide — a full-pitch + // profile makes the swept solid self-intersect (invalid -> never renders, or crashes the + // boolean). 0.42*pitch leaves a clean gap between turns; the V still reads as a thread. + const double half = 0.42 * pitch; + gp_Pnt top (origin.XYZ() + (vx * inner).XYZ() + (vz * ( half)).XYZ()); + gp_Pnt bot (origin.XYZ() + (vx * inner).XYZ() + (vz * (-half)).XYZ()); + gp_Pnt apex(origin.XYZ() + (vx * crest).XYZ()); + BRepBuilderAPI_MakePolygon poly(top, bot, apex, Standard_True); + return poly.Wire(); // closed triangle, swept by MakePipeShell with a fixed binormal +} + +// ---- expression evaluator (file-local) ------------------------------------- +// ponytail: self-contained shunting-yard arithmetic + function set for +// parametric dimension expressions. Extend the function table if needed. + +// Evaluate an arithmetic expression to a double. Supports + - * /, parentheses, +// unary minus, decimal literals, and identifiers resolved via `vars`. Functions: +// sqrt, abs, sin, cos, tan (degrees), min, max, and the constant `pi`. +// Throws std::runtime_error on any parse or lookup error, div-by-zero, bad arity. +static double eval_expr(const std::string& src, const std::map& vars) +{ + struct Token { + enum Type { Num, Id, Op, LParen, RParen, Comma }; + Type type; + std::string val; + double num{0}; + }; + // precedence: 0=paren/comma, 1=+-, 2=*/, 3=unary-minus, 4=function + auto prec = [](char op, bool unary) -> int { + if (unary && op == 'u') return 3; + if (op == '+' || op == '-') return 1; + if (op == '*' || op == '/') return 2; + if (op == '(' || op == ')' || op == ',') return 0; + return 0; + }; + auto is_op = [](char c) { return c == '+' || c == '-' || c == '*' || c == '/'; }; + + // ---- tokenise ---- + std::vector tokens; + size_t i = 0; + bool prev_was_val = false; // tracked for unary-minus detection + while (i < src.size()) { + char c = src[i]; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { ++i; continue; } + if (c == '(') { tokens.push_back({Token::LParen, "("}); ++i; prev_was_val = false; continue; } + if (c == ')') { tokens.push_back({Token::RParen, ")"}); ++i; prev_was_val = true; continue; } + if (c == ',') { tokens.push_back({Token::Comma, ","}); ++i; prev_was_val = false; continue; } + if (isdigit(c) || c == '.') { + size_t start = i; + while (i < src.size() && (isdigit(src[i]) || src[i] == '.')) ++i; + Token t{Token::Num, src.substr(start, i - start)}; + t.num = std::stod(t.val); + tokens.push_back(t); + prev_was_val = true; + continue; + } + if (isalpha(c) || c == '_') { + size_t start = i; + while (i < src.size() && (isalnum(src[i]) || src[i] == '_')) ++i; + std::string id = src.substr(start, i - start); + tokens.push_back({Token::Id, id}); + prev_was_val = true; + continue; + } + if (is_op(c)) { + // unary minus detection + if (c == '-' && !prev_was_val) { + tokens.push_back({Token::Op, "u"}); + } else { + tokens.push_back({Token::Op, std::string(1, c)}); + } + ++i; + prev_was_val = false; + continue; + } + throw std::runtime_error("bad character in expression"); + } + + // ---- shunting-yard: infix -> RPN ---- + std::vector rpn; + std::vector stack; + auto flush_paren = [&]() { + while (!stack.empty() && stack.back().type != Token::LParen) { + rpn.push_back(stack.back()); stack.pop_back(); + } + if (stack.empty()) throw std::runtime_error("mismatched parentheses"); + stack.pop_back(); // discard '(' +#if 0 + // If the '(' belonged to a function call, push the function name + // (ponytail: we track this via the Id token on top of the op stack + // BEFORE the '(' was pushed; after flush we check if the previous + // token was a function-call Id). +#endif + if (!stack.empty() && stack.back().type == Token::Id) { + rpn.push_back(stack.back()); stack.pop_back(); + } + }; + + for (size_t j = 0; j < tokens.size(); ++j) { + const Token& t = tokens[j]; + if (t.type == Token::Num) { + rpn.push_back(t); + } else if (t.type == Token::Id) { + // function call if the next token is '(' + if (j + 1 < tokens.size() && tokens[j + 1].type == Token::LParen) { + stack.push_back(t); + } else { + // identifier — resolve now + double v; + if (t.val == "pi") v = M_PI; + else { + auto it = vars.find(t.val); + if (it == vars.end()) + throw std::runtime_error("unknown identifier: " + t.val); + v = it->second; + } + rpn.push_back({Token::Num, "", v}); + } + } else if (t.type == Token::Op) { + int p = prec(t.val[0], t.val == "u"); + while (!stack.empty()) { + const Token& top = stack.back(); + if (top.type != Token::Op && top.type != Token::Id) break; + int tp = prec(top.val[0], top.val == "u"); + if (tp < 4 && p <= tp) { + rpn.push_back(top); stack.pop_back(); + } else break; + } + stack.push_back(t); + } else if (t.type == Token::LParen) { + stack.push_back(t); + } else if (t.type == Token::RParen) { + flush_paren(); + } else if (t.type == Token::Comma) { + while (!stack.empty() && stack.back().type != Token::LParen) { + rpn.push_back(stack.back()); stack.pop_back(); + } + // , is a no-op separator — just stay inside the paren + } + } + while (!stack.empty()) { + if (stack.back().type == Token::LParen || stack.back().type == Token::RParen) + throw std::runtime_error("mismatched parentheses"); + rpn.push_back(stack.back()); stack.pop_back(); + } + + // ---- evaluate RPN ---- + std::vector vs; + for (const Token& t : rpn) { + if (t.type == Token::Num) { + vs.push_back(t.num); + } else if (t.type == Token::Op) { + if (t.val == "u") { + if (vs.empty()) throw std::runtime_error("missing operand for unary minus"); + vs.back() = -vs.back(); + } else { + if (vs.size() < 2) throw std::runtime_error("not enough operands for '" + t.val + "'"); + double b = vs.back(); vs.pop_back(); + double a = vs.back(); vs.pop_back(); + if (t.val == "+") vs.push_back(a + b); + else if (t.val == "-") vs.push_back(a - b); + else if (t.val == "*") vs.push_back(a * b); + else if (t.val == "/") { if (b == 0) throw std::runtime_error("division by zero"); vs.push_back(a / b); } + } + } else if (t.type == Token::Id) { + // function call (already on RPN via shunting-yard) + auto call_fn = [&](const std::string& name, int arity) { + if ((int)vs.size() < arity) + throw std::runtime_error("not enough arguments for " + name + "()"); + if (name == "sqrt") { double a = vs.back(); vs.pop_back(); vs.push_back(std::sqrt(a)); } + else if (name == "abs") { double a = vs.back(); vs.pop_back(); vs.push_back(std::abs(a)); } + else if (name == "sin") { double a = vs.back(); vs.pop_back(); vs.push_back(std::sin(a * M_PI / 180.0)); } + else if (name == "cos") { double a = vs.back(); vs.pop_back(); vs.push_back(std::cos(a * M_PI / 180.0)); } + else if (name == "tan") { double a = vs.back(); vs.pop_back(); vs.push_back(std::tan(a * M_PI / 180.0)); } + else if (name == "min") { double b = vs.back(); vs.pop_back(); double a = vs.back(); vs.pop_back(); vs.push_back(std::min(a, b)); } + else if (name == "max") { double b = vs.back(); vs.pop_back(); double a = vs.back(); vs.pop_back(); vs.push_back(std::max(a, b)); } + else throw std::runtime_error("unknown function: " + name); + }; + call_fn(t.val, (t.val == "min" || t.val == "max") ? 2 : 1); + } + } + if (vs.size() != 1) throw std::runtime_error("invalid expression"); + return vs[0]; +} + +// Topologically evaluate `variables` (name -> expression) into name -> value. +// An expression may reference other variables; resolution is recursive with a +// visiting set. Throws std::runtime_error("variable cycle: ...") on a dependency +// cycle, or propagates eval_expr errors. +static std::map +evaluate_variables(const std::map& variables) +{ + std::map done; + std::set visiting; + + std::function resolve = [&](const std::string& name) -> double { + auto itd = done.find(name); + if (itd != done.end()) return itd->second; + if (visiting.count(name)) throw std::runtime_error("variable cycle: " + name); + auto itv = variables.find(name); + if (itv == variables.end()) throw std::runtime_error("unknown identifier: " + name); + visiting.insert(name); + // pre-resolve every identifier `name` references: scan for identifiers in + // its expression, resolve them first, then eval with the populated map. + // ponytail: simplest correct approach — depth-first with visited tracking. + std::map scope = done; // start with already-resolved + // Add any variable name found in the expression to scope (resolve recursively) + const std::string& expr = itv->second; + for (size_t i = 0; i < expr.size(); ) { + char c = expr[i]; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') { ++i; continue; } + if (isalpha(c) || c == '_') { + size_t start = i; + while (i < expr.size() && (isalnum(expr[i]) || expr[i] == '_')) ++i; + std::string id = expr.substr(start, i - start); + // skip "pi" and function names — they're built-ins, not variables + if (id == "pi" || id == "sqrt" || id == "abs" || id == "sin" || id == "cos" || + id == "tan" || id == "min" || id == "max") continue; + if (!variables.count(id)) throw std::runtime_error("unknown identifier: " + id); + scope[id] = resolve(id); + continue; + } + ++i; + } + double val = eval_expr(expr, scope); + visiting.erase(name); + done[name] = val; + return val; + }; + + for (const auto& [k, _] : variables) resolve(k); + return done; +} + +// Write `value` into the CadFeature numeric field named `field`. Allow-list of +// the geometric dimension fields a variable realistically drives. Integer-valued +// fields are rounded. Throws std::runtime_error("unknown parameter: " + field) +// for anything not in the list. +static void assign_field(CadFeature& f, const std::string& field, double value) +{ + // double fields (alphabetical) + if (field == "distance") { f.distance = value; return; } + if (field == "distance2") { f.distance2 = value; return; } + if (field == "draft_angle") { f.draft_angle = value; return; } + if (field == "dressup_size") { f.dressup_size = value; return; } + if (field == "height") { f.height = value; return; } + if (field == "hole_cbore_diameter") { f.hole_cbore_diameter = value; return; } + if (field == "hole_cbore_depth") { f.hole_cbore_depth = value; return; } + if (field == "hole_csink_angle") { f.hole_csink_angle = value; return; } + if (field == "hole_csink_diameter") { f.hole_csink_diameter = value; return; } + if (field == "hole_depth") { f.hole_depth = value; return; } + if (field == "hole_diameter") { f.hole_diameter = value; return; } + if (field == "hole_x") { f.hole_x = value; return; } + if (field == "hole_y") { f.hole_y = value; return; } + if (field == "import_scale_x") { f.import_scale_x = value; return; } + if (field == "import_scale_y") { f.import_scale_y = value; return; } + if (field == "pattern_angle") { f.pattern_angle = value; return; } + if (field == "pattern_spacing") { f.pattern_spacing = value; return; } + if (field == "plane_angle_tilt") { f.plane_angle_tilt = value; return; } + if (field == "plane_offset") { f.plane_offset = value; return; } + if (field == "radius") { f.radius = value; return; } + if (field == "revolve_angle") { f.revolve_angle = value; return; } + if (field == "rib_depth") { f.rib_depth = value; return; } + if (field == "rib_thickness") { f.rib_thickness = value; return; } + if (field == "shell_thickness") { f.shell_thickness = value; return; } + if (field == "taper_deg") { f.taper_deg = value; return; } + if (field == "thread_depth") { f.thread_depth = value; return; } + if (field == "thread_height") { f.thread_height = value; return; } + if (field == "thread_pitch") { f.thread_pitch = value; return; } + if (field == "thread_radius") { f.thread_radius = value; return; } + if (field == "thread_x") { f.thread_x = value; return; } + if (field == "thread_y") { f.thread_y = value; return; } + if (field == "width") { f.width = value; return; } + // int fields (rounded) + if (field == "pattern_count") { f.pattern_count = (int)std::lround(value); return; } + throw std::runtime_error("unknown parameter: " + field); +} + +// --------------------------------------------------------------------------- + +// Sample a sketch entity at parameter t in [0,1]. Handles Line, Arc, BSpline (cubic, 4 poles). +// Falls back to a p0->p1 lerp for any other type. // ponytail: covers the entities a guide +// curve is realistically drawn with; extend if needed. +static Vec2d sample_entity_2d(const SketchEntity& e, double t) +{ + t = std::max(0.0, std::min(1.0, t)); + switch (e.type) { + case SketchEntity::Type::Line: + return e.p0 + (e.p1 - e.p0) * t; + case SketchEntity::Type::Arc: { + double theta = e.start_angle + (e.end_angle - e.start_angle) * t; + return e.center + e.radius * Vec2d(std::cos(theta), std::sin(theta)); + } + case SketchEntity::Type::BSpline: + if (e.ctrl.size() == 4) { + const double u = 1.0 - t; + const double b0 = u * u * u; + const double b1 = 3.0 * u * u * t; + const double b2 = 3.0 * u * t * t; + const double b3 = t * t * t; + return e.ctrl[0] * b0 + e.ctrl[1] * b1 + e.ctrl[2] * b2 + e.ctrl[3] * b3; + } + return e.ctrl.empty() ? e.p0 + (e.p1 - e.p0) * t + : e.ctrl.front() + (e.ctrl.back() - e.ctrl.front()) * t; + default: + return e.p0 + (e.p1 - e.p0) * t; + } +} + +int CadDocument::add_sketch(SketchShape shape, const SketchPlane& plane, + double width, double height, double radius, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Sketch; + f.name = name; + f.shape = shape; + f.plane = plane; + f.width = width; + f.height = height; + f.radius = radius; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_sketch_profile(const SketchProfile& profile, const SketchPlane& plane, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Sketch; + f.name = name; + f.plane = plane; + f.profile = profile; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_sketch_entities(const std::vector& entities, + const SketchPlane& plane, const std::string& name, + const std::vector& constraints) +{ + CadFeature f; + f.type = CadFeatureType::Sketch; + f.name = name; + f.plane = plane; + f.entities = entities; + f.entity_constraints = constraints; // driving dimensions, solved by solve_sketch_feature + features.push_back(f); + return int(features.size()) - 1; +} + +// Solve Onshape-style constraints on a SketchEntity list (Fase 4.3). All entity +// types participate: Line (P0,P1), Arc (P0,P1,Center), Circle (Center), Point (P0). +// Solved coordinates are written back, with arc angles reflowed from the solved +// center+endpoints. Free function (declared in SketchEngine.hpp) so the in-session +// GUI sketch tool can live-solve the same way committed features do. +bool solve_sketch_entities(std::vector& entities, + const std::vector& constraints) +{ + // Delegated to the vendored SolveSpace solver (SketchSolver / libslvs): full + // constraint set, real DoF + over-constrained detection. + return sketch_solve(entities, constraints).ok; +} + +#if 0 // legacy hand-rolled Gauss-Newton solver — superseded by libslvs, kept for reference +static bool legacy_solve_sketch_entities(std::vector& entities, + const std::vector& constraints) +{ + if (constraints.empty()) return true; + + SketchConstraints sc; + // table[entity][role] -> solver point id, or -1 if that role is unregistered. + std::vector> table(entities.size(), {-1, -1, -1}); + auto reg = [&](int ei, SketchPointRole role, const Vec2d& p) { + table[ei][int(role)] = sc.add_point(p.x(), p.y()); + }; + for (size_t i = 0; i < entities.size(); ++i) { + const SketchEntity& e = entities[i]; + switch (e.type) { + case SketchEntity::Type::Line: + reg(int(i), SketchPointRole::P0, e.p0); + reg(int(i), SketchPointRole::P1, e.p1); + break; + case SketchEntity::Type::Arc: + reg(int(i), SketchPointRole::P0, e.p0); + reg(int(i), SketchPointRole::P1, e.p1); + reg(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::Circle: + reg(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::Point: + reg(int(i), SketchPointRole::P0, e.p0); + break; + } + } + + auto pid = [&](int ei, SketchPointRole role) -> int { + if (ei < 0 || ei >= int(table.size())) return -1; + return table[ei][int(role)]; + }; + + for (const SketchEntityConstraintDef& c : constraints) { + switch (c.type) { + // Point-form: refs A and B name individual entity points. + case SketchConstraintType::Fix: { + int a = pid(c.ea, c.ra); + if (a >= 0) sc.fix_point(a); + break; + } + case SketchConstraintType::Coincident: { + int a = pid(c.ea, c.ra), b = pid(c.eb, c.rb); + if (a >= 0 && b >= 0) sc.coincident(a, b); + break; + } + case SketchConstraintType::Horizontal: { + int a = pid(c.ea, c.ra), b = pid(c.eb, c.rb); + if (a >= 0 && b >= 0) sc.horizontal(a, b); + break; + } + case SketchConstraintType::Vertical: { + int a = pid(c.ea, c.ra), b = pid(c.eb, c.rb); + if (a >= 0 && b >= 0) sc.vertical(a, b); + break; + } + case SketchConstraintType::Distance: { + int a = pid(c.ea, c.ra), b = pid(c.eb, c.rb); + if (a >= 0 && b >= 0) sc.distance(a, b, c.value); + break; + } + case SketchConstraintType::LockX: { + int a = pid(c.ea, c.ra); + if (a >= 0) sc.lock_x(a, c.value); + break; + } + case SketchConstraintType::LockY: { + int a = pid(c.ea, c.ra); + if (a >= 0) sc.lock_y(a, c.value); + break; + } + // Segment-form: ea and eb name whole line segments (their P0->P1). + case SketchConstraintType::Parallel: + case SketchConstraintType::Perpendicular: + case SketchConstraintType::EqualLength: { + int a0 = pid(c.ea, SketchPointRole::P0), a1 = pid(c.ea, SketchPointRole::P1); + int b0 = pid(c.eb, SketchPointRole::P0), b1 = pid(c.eb, SketchPointRole::P1); + if (a0 < 0 || a1 < 0 || b0 < 0 || b1 < 0) break; + if (c.type == SketchConstraintType::Parallel) sc.parallel(a0, a1, b0, b1); + else if (c.type == SketchConstraintType::Perpendicular) sc.perpendicular(a0, a1, b0, b1); + else sc.equal_length(a0, a1, b0, b1); + break; + } + case SketchConstraintType::Concentric: { + int a = pid(c.ea, SketchPointRole::Center); + int b = pid(c.eb, SketchPointRole::Center); + if (a >= 0 && b >= 0) sc.coincident(a, b); + break; + } + case SketchConstraintType::Midpoint: { + int m = pid(c.ea, c.ra); + int a = pid(c.eb, SketchPointRole::P0); + int b = pid(c.eb, SketchPointRole::P1); + if (m >= 0 && a >= 0 && b >= 0) sc.midpoint(m, a, b); + break; + } + case SketchConstraintType::Symmetric: { + int a = pid(c.ea, c.ra); + int b = pid(c.eb, c.rb); + int x0 = pid(c.ec, SketchPointRole::P0); + int x1 = pid(c.ec, SketchPointRole::P1); + if (a >= 0 && b >= 0 && x0 >= 0 && x1 >= 0) sc.symmetric(a, b, x0, x1); + break; + } + case SketchConstraintType::Angle: { + int a0 = pid(c.ea, SketchPointRole::P0), a1 = pid(c.ea, SketchPointRole::P1); + int b0 = pid(c.eb, SketchPointRole::P0), b1 = pid(c.eb, SketchPointRole::P1); + if (a0 >= 0 && a1 >= 0 && b0 >= 0 && b1 >= 0) sc.angle(a0, a1, b0, b1, c.value); + break; + } + case SketchConstraintType::Radius: + case SketchConstraintType::Diameter: + // dimensions: applied in the post-solve pass below, not via the solver. + break; + case SketchConstraintType::PointOnLine: { + // Point `ea`/`ra` is held at signed perpendicular distance `value` from + // line `eb` (value 0 -> on the line). Drives e.g. a circle centre onto a + // construction axis and keeps it there through later edits. + int p = pid(c.ea, c.ra); + int l0 = pid(c.eb, SketchPointRole::P0), l1 = pid(c.eb, SketchPointRole::P1); + if (p >= 0 && l0 >= 0 && l1 >= 0) sc.point_line_distance(p, l0, l1, c.value); + break; + } + case SketchConstraintType::Tangent: { + auto in_range = [&](int e){ return e >= 0 && e < (int)entities.size(); }; + if (!in_range(c.ea) || !in_range(c.eb)) break; + const SketchEntity& ea_e = entities[c.ea]; + const SketchEntity& eb_e = entities[c.eb]; + auto is_round = [](const SketchEntity& e){ + return e.type == SketchEntity::Type::Circle || e.type == SketchEntity::Type::Arc; }; + if (is_round(ea_e) && eb_e.type == SketchEntity::Type::Line) { + int cen = pid(c.ea, SketchPointRole::Center); + int l0 = pid(c.eb, SketchPointRole::P0), l1 = pid(c.eb, SketchPointRole::P1); + if (cen >= 0 && l0 >= 0 && l1 >= 0) sc.point_line_distance(cen, l0, l1, ea_e.radius); + } else if (is_round(eb_e) && ea_e.type == SketchEntity::Type::Line) { + int cen = pid(c.eb, SketchPointRole::Center); + int l0 = pid(c.ea, SketchPointRole::P0), l1 = pid(c.ea, SketchPointRole::P1); + if (cen >= 0 && l0 >= 0 && l1 >= 0) sc.point_line_distance(cen, l0, l1, eb_e.radius); + } else if (is_round(ea_e) && is_round(eb_e)) { + int c0 = pid(c.ea, SketchPointRole::Center), c1 = pid(c.eb, SketchPointRole::Center); + if (c0 >= 0 && c1 >= 0) sc.distance(c0, c1, ea_e.radius + eb_e.radius); + } + break; + } + } + } + + const bool ok = sc.solve(); + // Write solved coordinates back into the participating entities. + for (size_t i = 0; i < entities.size(); ++i) { + SketchEntity& e = entities[i]; + int ip0 = table[i][int(SketchPointRole::P0)]; + int ip1 = table[i][int(SketchPointRole::P1)]; + int ic = table[i][int(SketchPointRole::Center)]; + if (ip0 >= 0) e.p0 = sc.get_point(ip0); + if (ip1 >= 0) e.p1 = sc.get_point(ip1); + if (ic >= 0) e.center = sc.get_point(ic); + + if (e.type == SketchEntity::Type::Arc && ic >= 0) { + // Reflow arc angles from solved center + endpoints, preserving the + // original sweep direction (CCW vs CW). + const double old_sweep = e.end_angle - e.start_angle; // signed, original + double ns = std::atan2(e.p0.y() - e.center.y(), e.p0.x() - e.center.x()); + double ne = std::atan2(e.p1.y() - e.center.y(), e.p1.x() - e.center.x()); + double sweep = ne - ns; + // Normalize `sweep` into (-2pi, 2pi) then match the sign of old_sweep so + // the arc keeps turning the same way it did before solving. + const double TWO_PI = 2.0 * M_PI; + while (sweep <= -TWO_PI) sweep += TWO_PI; + while (sweep >= TWO_PI) sweep -= TWO_PI; + if (old_sweep >= 0.0 && sweep < 0.0) sweep += TWO_PI; + if (old_sweep < 0.0 && sweep > 0.0) sweep -= TWO_PI; + e.start_angle = ns; + e.end_angle = ns + sweep; + e.radius = 0.5 * ((e.p0 - e.center).norm() + (e.p1 - e.center).norm()); + } + if (e.type == SketchEntity::Type::Circle && ic >= 0) { + // p0 mirrors the center for circles; keep them consistent. + e.p0 = e.center; + } + } + // Apply radius/diameter dimensions directly (radius is not a solver variable). + for (const auto& c : constraints) { + if (c.type != SketchConstraintType::Radius && + c.type != SketchConstraintType::Diameter) continue; + if (c.ea < 0 || c.ea >= (int)entities.size()) continue; + SketchEntity& e = entities[c.ea]; + if (e.type != SketchEntity::Type::Circle && e.type != SketchEntity::Type::Arc) continue; + const double r = (c.type == SketchConstraintType::Diameter) ? 0.5 * c.value : c.value; + if (r <= 0.0) continue; + e.radius = r; + if (e.type == SketchEntity::Type::Arc) { + // Rescale endpoints to the new radius around the (solved) center, keeping + // each endpoint's direction so the reflowed start/end angles stay valid. + auto rescale = [&](Vec2d& p) { + Vec2d d = p - e.center; + const double n = d.norm(); + if (n > 1e-12) p = e.center + (r / n) * d; + }; + rescale(e.p0); + rescale(e.p1); + } + } + return ok; +} +#endif // legacy solver + +bool CadDocument::solve_sketch_feature(int index) +{ + if (index < 0 || index >= int(features.size())) return false; + CadFeature& f = features[index]; + if (f.type != CadFeatureType::Sketch) return false; + + // Onshape-style entity sketches solve against entity endpoints (Fase 4.2). + if (!f.entities.empty()) + return solve_sketch_entities(f.entities, f.entity_constraints); + + if (f.constraints.empty()) return true; + + SketchConstraints sc; + for (const Vec2d& p : f.profile.points) + sc.add_point(p.x(), p.y()); + + for (const SketchConstraintDef& c : f.constraints) { + switch (c.type) { + case SketchConstraintType::Fix: sc.fix_point(c.a); break; + case SketchConstraintType::Coincident: sc.coincident(c.a, c.b); break; + case SketchConstraintType::Horizontal: sc.horizontal(c.a, c.b); break; + case SketchConstraintType::Vertical: sc.vertical(c.a, c.b); break; + case SketchConstraintType::Distance: sc.distance(c.a, c.b, c.value); break; + case SketchConstraintType::LockX: sc.lock_x(c.a, c.value); break; + case SketchConstraintType::LockY: sc.lock_y(c.a, c.value); break; + case SketchConstraintType::EqualLength: sc.equal_length(c.a, c.b, c.c, c.d); break; + case SketchConstraintType::Parallel: sc.parallel(c.a, c.b, c.c, c.d); break; + case SketchConstraintType::Perpendicular:sc.perpendicular(c.a, c.b, c.c, c.d); break; + } + } + + const bool ok = sc.solve(); + for (size_t i = 0; i < f.profile.points.size(); ++i) + f.profile.points[i] = sc.get_point(int(i)); + return ok; +} + +int CadDocument::add_extrude(int sketch_ref, double distance, bool symmetric, + BooleanMode mode, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Extrude; + f.name = name; + f.sketch_ref = sketch_ref; + f.distance = distance; + f.symmetric = symmetric; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_extrude_entities(const std::vector& entities, + const SketchPlane& plane, double distance, + bool symmetric, BooleanMode mode, const std::string& name) +{ + // Self-contained extrude of a single loop: the entity subset lives on the feature + // itself (sketch_ref = -1), so build_sketch_wire(f) uses f.entities directly. The + // source sketch stays a separate feature, so its other loops remain selectable. + CadFeature f; + f.type = CadFeatureType::Extrude; + f.name = name; + f.sketch_ref = -1; + f.entities = entities; + f.plane = plane; + f.distance = distance; + f.symmetric = symmetric; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_extrude_face(int src_face, double distance, bool symmetric, + BooleanMode mode, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Extrude; + f.name = name; + f.sketch_ref = -1; + f.extrude_src_face = src_face; + f.distance = distance; + f.symmetric = symmetric; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_fillet(double radius, FaceGroup faces, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Fillet; + f.name = name; + f.dressup_size = radius; + f.face_group = faces; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_fillet(double radius, int edge_id, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Fillet; + f.name = name; + f.dressup_size = radius; + f.dressup_edge = edge_id; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_chamfer(double distance, FaceGroup faces, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Chamfer; + f.name = name; + f.dressup_size = distance; + f.face_group = faces; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_chamfer(double distance, int edge_id, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Chamfer; + f.name = name; + f.dressup_size = distance; + f.dressup_edge = edge_id; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_hole(double diameter, double depth, bool through, + double x, double y, const SketchPlane& plane, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Hole; + f.name = name; + f.plane = plane; + f.hole_diameter = diameter; + f.hole_depth = depth; + f.hole_through = through; + f.hole_x = x; + f.hole_y = y; + features.push_back(f); + return int(features.size()) - 1; +} + +// Hole standards lookup table (representative ISO 273 medium / ISO 4762 / ANSI unified). +struct HoleStdEntry { const char* desig; double clearance; double cbore_d; double cbore_depth; double csink_d; }; +static const HoleStdEntry kHoleStdTable[] = { + {"M3", 3.4, 6.0, 3.4, 6.3}, + {"M4", 4.5, 8.0, 4.4, 8.4}, + {"M5", 5.5, 10.0, 5.4, 10.4}, + {"M6", 6.6, 11.0, 6.8, 12.6}, + {"M8", 9.0, 15.0, 8.8, 17.3}, + {"M10", 11.0, 18.0, 11.0, 20.0}, + {"#6-32", 3.7, 8.8, 4.2, 8.7}, + {"#8-32", 4.4, 9.9, 5.1, 10.2}, + {"1/4-20", 6.9, 14.4, 7.2, 14.7}, + {"5/16-18", 8.8, 17.0, 8.2, 17.3}, + {"3/8-16", 10.5, 19.6, 9.5, 19.8}, +}; +static bool hole_std_lookup(const std::string& desig, double& clearance, + double& cbore_d, double& cbore_depth, double& csink_d) +{ + for (const auto& e : kHoleStdTable) { + if (e.desig == desig) { + clearance = e.clearance; + cbore_d = e.cbore_d; + cbore_depth = e.cbore_depth; + csink_d = e.csink_d; + return true; + } + } + return false; +} + +int CadDocument::add_hole_styled(double diameter, double depth, bool through, + double x, double y, const SketchPlane& plane, int style, + double cbore_diameter, double cbore_depth, + double csink_diameter, double csink_angle, + const std::string& standard, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Hole; + f.name = name; + f.plane = plane; + f.hole_diameter = diameter; + f.hole_depth = depth; + f.hole_through = through; + f.hole_x = x; + f.hole_y = y; + f.hole_style = style; + f.hole_cbore_diameter = cbore_diameter; + f.hole_cbore_depth = cbore_depth; + f.hole_csink_diameter = csink_diameter; + f.hole_csink_angle = csink_angle; + f.hole_standard = standard; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_hole_standard(const std::string& designation, int style, bool through, + double depth, double x, double y, + const SketchPlane& plane, const std::string& name) +{ + double clearance, cbore_d, cbore_depth, csink_d; + if (!hole_std_lookup(designation, clearance, cbore_d, cbore_depth, csink_d)) + throw std::runtime_error("unknown hole standard \"" + designation + "\""); + return add_hole_styled(clearance, depth, through, x, y, plane, style, + cbore_d, cbore_depth, csink_d, 90, designation, name); +} + +int CadDocument::add_thread(double radius, double pitch, double height, double depth, + bool internal, double x, double y, const SketchPlane& plane, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Thread; + f.name = name; + f.plane = plane; + f.thread_radius = radius; + f.thread_pitch = pitch; + f.thread_height = height; + f.thread_depth = depth; + f.thread_internal = internal; + f.thread_x = x; + f.thread_y = y; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_revolve(int sketch_ref, double angle, int axis, bool flip, + BooleanMode mode, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Revolve; + f.name = name; + f.sketch_ref = sketch_ref; + f.revolve_angle = angle; + f.revolve_axis = axis; + f.flip = flip; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_revolve_entities(const std::vector& entities, + const SketchPlane& plane, double angle, int axis, + bool flip, BooleanMode mode, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Revolve; + f.name = name; + f.sketch_ref = -1; + f.entities = entities; + f.plane = plane; + f.revolve_angle = angle; + f.revolve_axis = axis; + f.flip = flip; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_sweep(int profile_sketch_ref, int path_sketch_ref, BooleanMode mode, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Sweep; + f.name = name; + f.sketch_ref = profile_sketch_ref; + f.sweep_path_ref = path_sketch_ref; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_loft(const std::vector& profile_refs, bool ruled, BooleanMode mode, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Loft; + f.name = name; + f.loft_profile_refs = profile_refs; + f.loft_ruled = ruled; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_pattern(bool circular, int count, double spacing, int dir, + double angle_deg, int target_body, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Pattern; + f.name = name; + f.pattern_circular = circular; + f.pattern_count = count; + f.pattern_spacing = spacing; + f.pattern_dir = dir; + f.pattern_angle = angle_deg; + f.target_body = target_body; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_pattern_on_curve(int count, int curve_sketch, int curve_entity, + int target, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Pattern; + f.name = name; + f.pattern_count = count; + f.pattern_curve_sketch = curve_sketch; + f.pattern_curve_entity = curve_entity; + f.target_body = target; + f.pattern_circular = false; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_shell(double thickness, int face, int target_body, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Shell; + f.name = name; + f.shell_thickness = thickness; + f.shell_face = face; + f.target_body = target_body; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_rib(int sketch_ref, int entity, double thickness, double depth, + int target_body, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Rib; + f.name = name; + f.rib_sketch_ref = sketch_ref; + f.rib_entity = entity; + f.rib_thickness = thickness; + f.rib_depth = depth; + f.target_body = target_body; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_delete_face(int target_body, const std::vector& faces, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::DeleteFace; + f.name = name; + f.target_body = target_body; + f.delete_faces = faces; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_draft(double angle, int face, int target_body, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Draft; + f.name = name; + f.draft_angle = angle; + f.draft_face = face; + f.target_body = target_body; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_boolean(BooleanMode op, int target_body, int tool_body, bool keep_tool, + double tolerance, int target_face, int tool_face, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Boolean; + f.name = name; + f.mode = op; + f.target_body = target_body; + f.bool_tool_body = tool_body; + f.bool_keep_tool = keep_tool; + f.bool_tolerance = tolerance; + f.bool_target_face = target_face; + f.bool_tool_face = tool_face; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_cut(const SketchPlane& plane, double offset, bool flip, + bool keep_upper, bool keep_lower, int target_body, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Cut; + f.name = name; + f.plane = plane; + f.cut_offset = offset; + f.cut_flip = flip; + f.cut_keep_upper = keep_upper; + f.cut_keep_lower = keep_lower; + f.target_body = target_body; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_split_by_face(int target_body, int face_body, int face, + bool keep_upper, bool keep_lower, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Cut; + f.name = name; + f.target_body = target_body; + f.cut_face_body = face_body; + f.cut_face = face; + f.cut_keep_upper = keep_upper; + f.cut_keep_lower = keep_lower; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_mirror(const SketchPlane& plane, int target_body, BooleanMode mode, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Mirror; + f.name = name; + f.plane = plane; + f.target_body = target_body; + f.mode = mode; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_transform(int target_body, const Vec3d& translate, const Vec3d& axis, + const Vec3d& pivot, double angle_deg, bool copy, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Transform; + f.name = name; + f.target_body = target_body; + f.xf_translate = translate; + f.xf_axis = axis; + f.xf_pivot = pivot; + f.xf_angle_deg = angle_deg; + f.xf_copy = copy; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_thicken(int target_body, int face, double thickness, bool flip, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Thicken; + f.name = name; + f.target_body = target_body; + f.thicken_face = face; + f.thicken_thickness = thickness; + f.thicken_flip = flip; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_thicken_surface(int target_body, double thickness, bool flip, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::ThickenSurface; + f.name = name; + f.target_body = target_body; + f.thicken_thickness = thickness; + f.thicken_flip = flip; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_surface_offset(int target_body, double offset, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::SurfaceOffset; + f.name = name; + f.target_body = target_body; + f.plane_offset = offset; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +static void project_edges_to_entities(const std::vector& edges, + const SketchPlane& plane, + bool construction, + std::vector& out); + +int CadDocument::add_project_edges(int source_body, const std::vector& edge_ids, int face, + const SketchPlane& plane, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Project; + f.name = name; + f.project_source_body = source_body; + f.project_edges = edge_ids; + f.project_face = face; + f.plane = plane; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::project_edges_into_sketch(int sketch_feature, int source_body, + const std::vector& edge_ids, int face) +{ + if (sketch_feature < 0 || sketch_feature >= int(features.size())) return -1; + CadFeature& sk = features[sketch_feature]; + if (sk.type != CadFeatureType::Sketch && sk.type != CadFeatureType::Project) return -1; + if (source_body < 0 || source_body >= int(bodies.size()) + || bodies[source_body].shape.IsNull()) return -1; + const TopoDS_Shape& shape = bodies[source_body].shape; + + std::vector edges; + if (!edge_ids.empty()) { + for (int id : edge_ids) { + TopoDS_Edge e = GeometryEngine::edge_by_index(shape, id); + if (e.IsNull()) return -1; + edges.push_back(e); + } + } else if (face >= 0) { + TopoDS_Face fc = GeometryEngine::face_by_index(shape, face); + if (fc.IsNull()) return -1; + edges = GeometryEngine::edges_of_face(fc); + } else { + edges = GeometryEngine::edges_of(shape); + } + if (edges.empty()) return -1; + + const size_t before = sk.entities.size(); + project_edges_to_entities(edges, sk.plane, /*construction=*/true, sk.entities); + return int(sk.entities.size() - before); +} + +int CadDocument::add_bridge(int sketch_ref, int ent_a, int end_a, int ent_b, int end_b, + const std::string& name) +{ + (void)name; + if (sketch_ref < 0 || sketch_ref >= int(features.size()) + || features[sketch_ref].type != CadFeatureType::Sketch) + throw std::runtime_error("bridge: sketch_ref must refer to a Sketch feature"); + auto& ents = features[sketch_ref].entities; + if (ent_a < 0 || ent_a >= int(ents.size()) || ent_b < 0 || ent_b >= int(ents.size())) + throw std::runtime_error("bridge: entity index out of range in sketch"); + SketchEntity br = SketchEngine::make_bridge(ents[ent_a], end_a, ents[ent_b], end_b); + ents.push_back(br); + return int(ents.size()) - 1; +} + +int CadDocument::add_plane(int base, double offset, double angle_tilt, int axis, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Plane; + f.name = name; + f.plane_base = base; + f.plane_offset = offset; + f.plane_angle_tilt = angle_tilt; + f.plane_axis = axis; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_axis(AxisType axis_type_, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Axis; + f.name = name; + f.axis_type = axis_type_; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_coordsys(CoordSysType type, const Vec3d& point, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::CoordSys; + f.name = name; + f.coordsys_type = type; + f.coordsys_point = point; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_mate(int kind, int cs_a, int cs_b, double offset, double angle_deg, bool flip, + const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Mate; + f.name = name; + f.mate_kind = kind; + f.mate_cs_a = cs_a; + f.mate_cs_b = cs_b; + f.mate_offset = offset; + f.mate_angle = angle_deg; + f.mate_flip = flip; + features.push_back(f); + return int(features.size()) - 1; +} + +std::vector CadDocument::mate_options(int cs_a, int cs_b) const +{ + std::vector out(5); + for (int k = 0; k < 5; ++k) out[k].kind = k; + + auto is_connector = [&](int idx) -> bool { + return idx >= 0 && idx < int(features.size()) && + features[idx].type == CadFeatureType::CoordSys && + features[idx].enabled; + }; + if (!is_connector(cs_a) || !is_connector(cs_b)) { + const char side = is_connector(cs_a) ? 'B' : 'A'; + for (auto& o : out) { o.viable = false; o.reason = std::string("connector ") + side + " is not a coordinate system"; } + return out; + } + if (cs_a == cs_b) { + for (auto& o : out) { o.viable = false; o.reason = "a mate needs two different connectors"; } + return out; + } + + // B is the connector on the body that MOVES, so B must belong to one; A is the fixed + // reference and needs no body. Without this every kind was offered on a Point(world) + // connector and the mate only failed at RECOMPUTE, with "mate_cs_b has no associated body" — + // one step too late, after the feature already existed in the tree. The same two conditions + // the apply path throws on are checked here, so the offer and the kernel cannot disagree. + const int body_b = features[cs_b].coordsys_body; + if (body_b < 0) { + for (auto& o : out) { + o.viable = false; + o.reason = "connector B is not attached to a body — a mate moves B's body"; + } + return out; + } + if (body_b >= int(bodies.size()) || bodies[body_b].shape.IsNull()) { + for (auto& o : out) { + o.viable = false; + o.reason = "connector B's body no longer exists"; + } + return out; + } + + const int ka = features[cs_a].coordsys_face_kind; + const int kb = features[cs_b].coordsys_face_kind; + auto face_desc = [](int kind) -> std::string { return kind == GeomAbs_Plane ? "a flat face" : "a curved face"; }; + + // Planar: needs a flat face at both ends. + const bool plan_bad_a = ka >= 0 && ka != GeomAbs_Plane; + const bool plan_bad_b = kb >= 0 && kb != GeomAbs_Plane; + if (plan_bad_a || plan_bad_b) { + out[1].viable = false; + if (plan_bad_a && plan_bad_b) + out[1].reason = "needs a flat face at both ends — both connectors are on curved faces"; + else if (plan_bad_a) + out[1].reason = "needs a flat face at both ends — connector A is on " + face_desc(ka); + else + out[1].reason = "needs a flat face at both ends — connector B is on " + face_desc(kb); + } + + // Revolute and Cylindrical: need a cylindrical face at both ends. + for (int k : {2, 4}) { + const bool ax_bad_a = ka >= 0 && ka != GeomAbs_Cylinder; + const bool ax_bad_b = kb >= 0 && kb != GeomAbs_Cylinder; + if (!ax_bad_a && !ax_bad_b) continue; + out[k].viable = false; + if (ax_bad_a && ax_bad_b) + out[k].reason = (ka == GeomAbs_Plane && kb == GeomAbs_Plane) + ? "needs a cylindrical face at both ends — both connectors are on flat faces" + : "needs a cylindrical face at both ends — both connectors are on non-cylindrical faces"; + else if (ax_bad_a) + out[k].reason = "needs a cylindrical face at both ends — connector A is on " + face_desc(ka); + else + out[k].reason = "needs a cylindrical face at both ends — connector B is on " + face_desc(kb); + } + + return out; +} + +int CadDocument::add_helix(const SketchPlane& plane, double radius, double pitch, double height, + bool left_handed, double taper_deg, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::Helix; + f.name = name; + f.plane = plane; + f.helix_radius = radius; + f.helix_pitch = pitch; + f.helix_height = height; + f.helix_left_handed = left_handed; + f.helix_taper_deg = taper_deg; + features.push_back(f); + return int(features.size()) - 1; +} + +TopoDS_Wire CadDocument::build_helix_wire(const CadFeature& f, std::string& err) const +{ + return make_helix_spine(f, err); +} + +// Derive a SketchPlane: shift `base` along its normal by `offset`, then tilt +// `angle_deg` about the base's X (axis 0) or Y (axis 1) axis (Rodrigues rotation). +static SketchPlane offset_angle_plane(const SketchPlane& base, double offset, + double angle_deg, int axis) +{ + SketchPlane p; + p.origin = base.origin + base.normal * offset; + Vec3d n = base.normal, x = base.x_axis, y = base.y_axis; + if (std::abs(angle_deg) > 1e-9) { + const double a = angle_deg * M_PI / 180.0; + const Vec3d k = (axis == 1) ? base.y_axis : base.x_axis; // unit rotation axis + auto rot = [&](const Vec3d& v) -> Vec3d { // -> Vec3d forces eval (no dangling Eigen expr) + return v * std::cos(a) + k.cross(v) * std::sin(a) + + k * (k.dot(v)) * (1.0 - std::cos(a)); + }; + n = rot(n); + if (axis == 1) x = rot(x); // tilt about Y rotates X + normal, Y fixed + else y = rot(y); // tilt about X rotates Y + normal, X fixed + } + p.normal = n.normalized(); + p.x_axis = x.normalized(); + p.y_axis = y.normalized(); + return p; +} + +// Build a full orthonormal frame from a normal + origin. +static SketchPlane frame_from(const Vec3d& origin, const Vec3d& normal) +{ + Vec3d n = normal.normalized(); + Vec3d ref = (std::abs(n.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + Vec3d x = ref.cross(n); + if (x.squaredNorm() < 1e-12) x = Vec3d(1, 0, 0); + x.normalize(); + Vec3d y = n.cross(x).normalized(); + SketchPlane p; + p.origin = origin; + p.normal = n; + p.x_axis = x; + p.y_axis = y; + return p; +} + +bool CadDocument::plane_of_face(int body_idx, int face_idx, SketchPlane& out) const +{ + if (face_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) return false; + const TopoDS_Face f = GeometryEngine::face_by_index(bodies[body_idx].shape, face_idx); + if (f.IsNull()) return false; + // Planar only. face_normal_world evaluates the normal at the mid parameter, which on a cylinder + // or a fillet is a tangent plane at one arbitrary point — usable for a datum offset, wrong as a + // sketch plane. Refuse rather than sketch somewhere the user did not point at. + BRepAdaptor_Surface surf(f); + if (surf.GetType() != GeomAbs_Plane) return false; + out = frame_from(GeometryEngine::face_centroid_world(f), GeometryEngine::face_normal_world(f)); + return true; +} + +std::vector> CadDocument::resolve_datum_planes() const +{ + std::vector> out; + for (const CadFeature& f : features) { + if (f.type != CadFeatureType::Plane || !f.enabled) continue; + + // Resolve base reference plane. The default XY/XZ/YZ planes pass through the modeling + // origin (bed centre); datum bases (>=3) are already in world coords from earlier passes. + SketchPlane base; + if (f.plane_base == 1) { base = SketchPlane::XZ(); base.origin += modeling_origin; } + else if (f.plane_base == 2) { base = SketchPlane::YZ(); base.origin += modeling_origin; } + else if (f.plane_base >= 3) { + const int di = f.plane_base - 3; + if (di < int(out.size())) base = out[di].second; + } + else { base = SketchPlane::XY(); base.origin += modeling_origin; } + + // --- Resolve refs from bodies --- + auto resolve_face = [&](int body_idx, int face_idx) -> TopoDS_Face { + if (face_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return TopoDS_Face(); + return GeometryEngine::face_by_index(bodies[body_idx].shape, face_idx); + }; + auto resolve_edge = [&](int body_idx, int edge_idx, + Vec3d& p0, Vec3d& dir) -> bool { + if (edge_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return false; + TopoDS_Edge e = GeometryEngine::edge_by_index(bodies[body_idx].shape, edge_idx); + if (e.IsNull()) return false; + auto pts = GeometryEngine::sample_edge_world(e); + if (pts.size() < 2) return false; + p0 = pts.front(); + dir = (pts.back() - pts.front()).normalized(); + return true; + }; + + // Face A + TopoDS_Face faceA = resolve_face(f.plane_face_body, f.plane_face); + SketchPlane faceA_plane; + bool has_faceA = false; + if (!faceA.IsNull()) { + faceA_plane = frame_from( + GeometryEngine::face_centroid_world(faceA), + GeometryEngine::face_normal_world(faceA)); + has_faceA = true; + } + + // Face B + TopoDS_Face faceB = resolve_face(f.plane_face2_body, f.plane_face2); + SketchPlane faceB_plane; + bool has_faceB = false; + if (!faceB.IsNull()) { + faceB_plane = frame_from( + GeometryEngine::face_centroid_world(faceB), + GeometryEngine::face_normal_world(faceB)); + has_faceB = true; + } + + // Edge A + Vec3d eA_p0, eA_dir; + bool has_edgeA = resolve_edge(f.plane_edge_body, f.plane_edge, eA_p0, eA_dir); + + // Edge B + Vec3d eB_p0, eB_dir; + bool has_edgeB = resolve_edge(f.plane_edge2_body, f.plane_edge2, eB_p0, eB_dir); + + // --- Dispatch on plane_type --- + auto fallback_offset = [&]() { + return offset_angle_plane(base, f.plane_offset, f.plane_angle_tilt, f.plane_axis); + }; + + SketchPlane result; + switch (f.plane_type) { + + case PlaneType::Offset: { + // From a picked face: pure offset along its normal. From a base/datum plane: + // offset + the legacy tilt-about-axis (keeps the old Offset/Tilt controls live). + if (has_faceA) + result = frame_from(faceA_plane.origin + faceA_plane.normal * f.plane_offset, + faceA_plane.normal); + else + result = offset_angle_plane(base, f.plane_offset, f.plane_angle_tilt, f.plane_axis); + break; + } + + case PlaneType::Coincident: { + result = has_faceA ? faceA_plane : base; + break; + } + + case PlaneType::Angle: { + if (!has_edgeA) { result = fallback_offset(); break; } + const SketchPlane& ref = has_faceA ? faceA_plane : base; + Vec3d n0 = ref.normal - eA_dir * ref.normal.dot(eA_dir); + if (n0.squaredNorm() < 1e-12) { + Vec3d perp = (std::abs(eA_dir.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + n0 = perp - eA_dir * perp.dot(eA_dir); + } + n0.normalize(); + const double a = f.plane_angle_tilt * M_PI / 180.0; + Vec3d n_rot = n0 * std::cos(a) + eA_dir.cross(n0) * std::sin(a) + + eA_dir * (eA_dir.dot(n0)) * (1.0 - std::cos(a)); + result = frame_from(eA_p0, n_rot); + break; + } + + case PlaneType::Midplane: { + if (!has_faceA || !has_faceB) { result = fallback_offset(); break; } + Vec3d origin = 0.5 * (faceA_plane.origin + faceB_plane.origin); + Vec3d nB = (faceA_plane.normal.dot(faceB_plane.normal) >= 0) + ? faceB_plane.normal : -faceB_plane.normal; + Vec3d normal = (faceA_plane.normal + nB).normalized(); + result = frame_from(origin, normal); + break; + } + + case PlaneType::Tangent: { + if (!has_faceA) { result = fallback_offset(); break; } + GeometryEngine::CylinderFace cyl = GeometryEngine::cylinder_of_face(faceA); + if (!cyl.ok) { result = fallback_offset(); break; } + Vec3d refdir = (std::abs(cyl.axis.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + refdir = refdir - cyl.axis * refdir.dot(cyl.axis); + refdir.normalize(); + const double theta = f.plane_angle_tilt * M_PI / 180.0; + Vec3d r = refdir * std::cos(theta) + cyl.axis.cross(refdir) * std::sin(theta); + Vec3d touch = cyl.base + r * cyl.radius; + result = frame_from(touch, r); + break; + } + + case PlaneType::TwoEdges: { + if (!has_edgeA) { result = fallback_offset(); break; } + if (!has_edgeB) { result = fallback_offset(); break; } + Vec3d cross = eA_dir.cross(eB_dir); + if (cross.squaredNorm() > 1e-12) { + result = frame_from(eA_p0, cross.normalized()); + } else { + Vec3d v = eA_dir.cross(eB_p0 - eA_p0); + if (v.squaredNorm() > 1e-12) { + result = frame_from(eA_p0, v.normalized()); + } else { + result = fallback_offset(); + } + } + break; + } + + } + + out.emplace_back(f.name, result); + } + return out; +} + +// Resolved datum axes in feature order. Origin + unit direction computed from +// construction params; axis_err is non-empty when construction fails (no crash). +std::vector CadDocument::resolve_datum_axes() const +{ + std::vector out; + // For PlaneIntersection we need the already-resolved datum planes. + std::vector> datum_planes = resolve_datum_planes(); + + auto resolve_face = [&](int body_idx, int face_idx) -> TopoDS_Face { + if (face_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return TopoDS_Face(); + return GeometryEngine::face_by_index(bodies[body_idx].shape, face_idx); + }; + auto resolve_edge = [&](int body_idx, int edge_idx, + Vec3d& p0, Vec3d& dir) -> bool { + if (edge_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return false; + TopoDS_Edge e = GeometryEngine::edge_by_index(bodies[body_idx].shape, edge_idx); + if (e.IsNull()) return false; + auto pts = GeometryEngine::sample_edge_world(e); + if (pts.size() < 2) return false; + p0 = pts.front(); + dir = (pts.back() - pts.front()).normalized(); + return true; + }; + + for (const CadFeature& f : features) { + if (f.type != CadFeatureType::Axis || !f.enabled) continue; + + DatumAxis da; + da.name = f.name; + switch (f.axis_type) { + case AxisType::TwoPoints: { + Vec3d dir = f.axis_p2 - f.axis_p1; + if (dir.squaredNorm() < 1e-18) { da.error = "two points are coincident"; break; } + da.origin = f.axis_p1; + da.direction = dir.normalized(); + break; + } + case AxisType::FaceNormal: { + TopoDS_Face fc = resolve_face(f.axis_body, f.axis_face); + if (fc.IsNull()) { da.error = "face not found"; break; } + da.origin = GeometryEngine::face_centroid_world(fc); + da.direction = GeometryEngine::face_normal_world(fc); + break; + } + case AxisType::CylinderCenterline: { + TopoDS_Face fc = resolve_face(f.axis_body, f.axis_face); + if (fc.IsNull()) { da.error = "face not found"; break; } + GeometryEngine::CylinderFace cyl = GeometryEngine::cylinder_of_face(fc); + if (!cyl.ok) { da.error = "face is not a cylinder"; break; } + da.origin = cyl.base; + da.direction = cyl.axis; + break; + } + case AxisType::AlongEdge: { + Vec3d p0, dir; + if (!resolve_edge(f.axis_body, f.axis_edge, p0, dir)) { + da.error = "edge not found"; break; + } + da.origin = p0; + da.direction = dir; + break; + } + case AxisType::PlaneIntersection: { + // Same reference encoding as CadFeature::plane_base, because the GUI fills these + // two fields from populate_plane_choices() — whose rows are XY/XZ/YZ followed by + // the datum planes — and stores the row verbatim. Indexing datum_planes[ref] + // directly, as this did, is off by three: picking XY resolved to datum plane 0 and + // picking the first datum ran off the end with "plane ref not found", so the + // PlaneIntersection axis type could not work at all. Two base planes are also a + // perfectly ordinary way to define an axis (XY x XZ = the X axis), so they must + // resolve rather than be rejected as out of scope. + auto base_plane = [&](int ref, Vec3d& origin, Vec3d& normal) -> bool { + SketchPlane p; + if (ref == 0) { p = SketchPlane::XY(); p.origin += modeling_origin; } + else if (ref == 1) { p = SketchPlane::XZ(); p.origin += modeling_origin; } + else if (ref == 2) { p = SketchPlane::YZ(); p.origin += modeling_origin; } + else if (ref >= 3 && ref - 3 < int(datum_planes.size())) + p = datum_planes[ref - 3].second; // datums are already world-space + else + return false; + origin = p.origin; + normal = p.normal; + return true; + }; + bool ok0 = base_plane(f.axis_plane_a, da.origin, da.direction); // direction reused as normal0 + Vec3d origin1, normal1; + bool ok1 = base_plane(f.axis_plane_b, origin1, normal1); + if (!ok0 || !ok1) { da.error = "plane ref not found"; break; } + // Direction = cross product of the two plane normals. + Vec3d dir = da.direction.cross(normal1); // da.direction was normal0 + if (dir.squaredNorm() < 1e-18) { + da.error = "planes are parallel (no intersection)"; break; + } + dir.normalize(); + // Find a point on the intersection line: closest points between two planes. + // Project origin of plane A onto the intersection line. + Vec3d n0 = da.direction; // normal of plane A (stored temporarily) + Vec3d n1 = normal1; + Vec3d p0 = da.origin; + Vec3d p1 = origin1; + // Solve for point on line of intersection using vector formula. + double d0 = n0.dot(p0); + double d1 = n1.dot(p1); + double n0n1 = n0.dot(n1); + double det = 1.0 - n0n1 * n0n1; + if (std::abs(det) < 1e-18) { da.error = "planes are parallel (no intersection)"; break; } + double t0 = (d0 - d1 * n0n1) / det; + double t1 = (d1 - d0 * n0n1) / det; + da.origin = n0 * t0 + n1 * t1; + da.direction = dir; + break; + } + } + out.push_back(da); + } + return out; +} + +CadDocument::DatumCoordSys CadDocument::datum_frame(const std::vector& bodies, const CadFeature& f) +{ + CadDocument::DatumCoordSys ds; + ds.name = f.name; + + auto resolve_face = [&](int body_idx, int face_idx) -> TopoDS_Face { + if (face_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return TopoDS_Face(); + return GeometryEngine::face_by_index(bodies[body_idx].shape, face_idx); + }; + auto resolve_edge = [&](int body_idx, int edge_idx, + Vec3d& p0, Vec3d& dir) -> bool { + if (edge_idx < 0 || body_idx < 0 || body_idx >= int(bodies.size())) + return false; + TopoDS_Edge e = GeometryEngine::edge_by_index(bodies[body_idx].shape, edge_idx); + if (e.IsNull()) return false; + auto pts = GeometryEngine::sample_edge_world(e); + if (pts.size() < 2) return false; + p0 = pts.front(); + dir = (pts.back() - pts.front()).normalized(); + return true; + }; + + switch (f.coordsys_type) { + case CoordSysType::PointWorld: { + ds.origin = f.coordsys_point; + ds.x = Vec3d(1, 0, 0); + ds.y = Vec3d(0, 1, 0); + break; + } + case CoordSysType::FaceAndDirection: { + TopoDS_Face fc = resolve_face(f.coordsys_body, f.coordsys_face); + Vec3d p0, edge_dir; + bool have_edge = resolve_edge(f.coordsys_body, f.coordsys_edge, p0, edge_dir); + if (fc.IsNull()) { ds.error = "face not found"; break; } + ds.origin = GeometryEngine::face_centroid_world(fc); + Vec3d Z = GeometryEngine::face_normal_world(fc); + // Tentative X: an explicit edge reference wins. Failing that, derive X from the + // face's OWN first usable edge, so the frame rotates with the body. Reading it from + // coordsys_x_hint — a world constant — meant a face-only connector could not encode + // spin about its own normal: Z followed the body, X did not, so Fastened and Slider + // claimed to fix an orientation the frame could not see. The hint survives only as a + // last resort, for faces that offer no usable direction (a full circular edge has + // coincident endpoints, and a cylinder's seam projects to nothing in-plane). + Vec3d X_tent = Vec3d::Zero(); + if (have_edge) { + X_tent = edge_dir; + } else { + for (const TopoDS_Edge& fe : GeometryEngine::edges_of_face(fc)) { + auto pts = GeometryEngine::sample_edge_world(fe); + if (pts.size() < 2) continue; + Vec3d d = pts.back() - pts.front(); + if (d.squaredNorm() < 1e-18) continue; // closed edge: endpoints coincide + Vec3d in_plane = d - Z * Z.dot(d); // drop any out-of-plane component + if (in_plane.squaredNorm() < 1e-18) continue; + X_tent = in_plane; + break; + } + if (X_tent.squaredNorm() < 1e-18) X_tent = f.coordsys_x_hint; + } + if (X_tent.squaredNorm() < 1e-18) { ds.error = "zero-length direction"; break; } + X_tent.normalize(); + // Gram-Schmidt: ensure orthonormal, right-handed frame. + // Y = Z x X_tent, X = Y x Z (this makes X perpendicular to Z, not X_tent) + Vec3d Y = Z.cross(X_tent); + if (Y.squaredNorm() < 1e-12) { + // Edge/hint is parallel to Z -> X is degenerate; fall back to world X/Y orthonormalised. + Vec3d ref = (std::abs(Z.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + Y = Z.cross(ref); + if (Y.squaredNorm() < 1e-12) Y = Z.cross(Vec3d(0, 1, 0)); + } + Y.normalize(); + ds.x = Y.cross(Z).normalized(); + ds.y = Y; + break; + } + } + return ds; +} + +std::vector CadDocument::resolve_datum_coordsys() const +{ + std::vector out; + for (const CadFeature& f : features) { + if (f.type != CadFeatureType::CoordSys || !f.enabled) continue; + out.push_back(datum_frame(bodies, f)); + } + return out; +} + +void CadDocument::clear() +{ + features.clear(); + body = TopoDS_Shape(); + bodies.clear(); // multibody result — must clear too (else solids linger) + display_mesh = TriangleMesh{}; + display_body_meshes.clear(); + display_tri_face.clear(); + error.clear(); + mate_conflicts.clear(); + // A cleared document is a fresh start with no history. + m_undo.clear(); + m_redo.clear(); +} + +void CadDocument::checkpoint() +{ + m_undo.push_back(Snapshot{features, variables}); // snapshot the pre-mutation recipe + m_redo.clear(); // any new action invalidates the redo branch + if (m_undo.size() > k_undo_cap) + m_undo.erase(m_undo.begin()); +} + +void CadDocument::abandon_checkpoint() +{ + if (!m_undo.empty()) + m_undo.pop_back(); +} + +bool CadDocument::undo() +{ + if (m_undo.empty()) + return false; + m_redo.push_back(Snapshot{std::move(features), std::move(variables)}); // current state becomes redoable + features = std::move(m_undo.back().features); + variables = std::move(m_undo.back().variables); + m_undo.pop_back(); + recompute(); // benign-empty (only a sketch / empty doc) is a valid undo target + return true; +} + +bool CadDocument::redo() +{ + if (m_redo.empty()) + return false; + m_undo.push_back(Snapshot{std::move(features), std::move(variables)}); + features = std::move(m_redo.back().features); + variables = std::move(m_redo.back().variables); + m_redo.pop_back(); + recompute(); + return true; +} + +// Re-run recompute(); if it fails for a GENUINE geometry error, restore `snapshot` +// and recompute that instead, so a rejected edit leaves the document exactly as it +// was. recompute() also returns false for the BENIGN case where the edit simply +// leaves no solid-producing feature (empty document, or only a sketch) — that is a +// valid result of a deletion, not a failure, so we accept it with an empty body. +static bool commit_or_rollback(CadDocument& doc, std::vector& snapshot) +{ + if (doc.recompute()) + return true; + + bool has_solid_feature = false; + for (const auto& f : doc.features) + if (f.enabled && f.type != CadFeatureType::Sketch) { has_solid_feature = true; break; } + if (!has_solid_feature) { + doc.bodies.clear(); + doc.body = TopoDS_Shape(); + doc.display_mesh = TriangleMesh{}; + doc.display_body_meshes.clear(); + doc.display_tri_face.clear(); + doc.display_tri_body.clear(); + doc.error.clear(); + return true; + } + + std::string fail_err = doc.error; // why the attempted edit failed + doc.features.swap(snapshot); + doc.recompute(); // restore the previous good body (clears error) + doc.error = fail_err.empty() ? std::string("feature is used by a later feature") + : fail_err; + return false; +} + +// Visit every field of `f` that holds an index into features[]. +// +// Deliberately NOT dispatched on f.type. A type switch is what this replaced, and it was +// wrong in the way type switches go wrong: it listed Extrude and Mate, and every feature +// type added afterwards — Revolve, Sweep, Loft, Rib, Pattern-on-curve, the Surface* family — +// silently inherited a remap that skipped its references. Visiting the FIELDS instead means +// a new type is covered the moment it reuses one of them, and reaching a field its type +// never reads costs nothing: unset refs are -1 and every visitor here ignores those. +// +// The list is exactly the fields documented as "index into features[]" / "feature index" in +// CadDocument.hpp. Not included, because they are a different basis and need their own pass: +// plane_base / axis_plane_a / axis_plane_b encode `3 + N` = the Nth DATUM PLANE, an ordinal +// into resolve_datum_planes(), not into features[]. Everything named *_body / *_face / *_edge +// is a body index or a global topology id and must never be remapped here. +template +static void for_each_feature_ref(CadFeature& f, Visit&& visit) +{ + visit(f.sketch_ref); + visit(f.sweep_path_ref); + visit(f.pattern_curve_sketch); + visit(f.rib_sketch_ref); + visit(f.mate_cs_a); + visit(f.mate_cs_b); + for (int& r : f.loft_profile_refs) + visit(r); +} + +bool CadDocument::remove_feature(int index) +{ + if (index < 0 || index >= int(features.size())) + return false; + + std::vector snapshot = features; + + // Deleting a Sketch cascades to every feature that consumes it AS ITS PROFILE — the + // reason is the original one ("a dangling Extrude would have no wire"), and it applies + // unchanged to Revolve, Sweep, Rib and the Surface* family, which all read the profile + // through sketch_ref, plus the sweep spine and the rib line. Testing the FIELD rather + // than the type is what makes that true without a list to keep up to date. + // + // pattern_curve_sketch and loft_profile_refs are deliberately NOT cascaded: a Pattern or + // a Loft that loses one of several inputs is degraded, not meaningless, so those refs go + // to -1 in the remap below and the feature survives. A lone Sketch is harmless either way. + std::vector remove{index}; + if (features[index].type == CadFeatureType::Sketch) { + for (int j = 0; j < int(features.size()); ++j) { + const CadFeature& c = features[j]; + if (c.sketch_ref == index || c.sweep_path_ref == index || c.rib_sketch_ref == index) + remove.push_back(j); + } + } + std::sort(remove.begin(), remove.end()); + remove.erase(std::unique(remove.begin(), remove.end()), remove.end()); + + // Erase high-to-low so earlier indices stay valid. + for (auto it = remove.rbegin(); it != remove.rend(); ++it) + features.erase(features.begin() + *it); + + // Remap surviving feature references through the deletions: subtract the count of + // removed indices that sat before it; orphaned refs (target removed) -> -1. + // + // This must cover EVERY field holding a feature index, not just sketch_ref. A mate's two + // connectors are such indices, and leaving them behind slid them onto whatever features + // landed on those slots — silently, because recompute() only rejects out-of-range and + // non-CoordSys targets, and a shifted index usually lands on the assembly's other CoordSys. + auto remap = [&remove](int& ref) { + if (ref < 0) + return; + if (std::binary_search(remove.begin(), remove.end(), ref)) { + ref = -1; + } else { + int shift = 0; + for (int r : remove) + if (r < ref) ++shift; + ref -= shift; + } + }; + for (auto& f : features) + for_each_feature_ref(f, remap); + + return commit_or_rollback(*this, snapshot); +} + +bool CadDocument::move_feature(int index, int delta) +{ + if (index < 0 || index >= int(features.size())) + return false; + int target = index + delta; + if (target < 0 || target >= int(features.size())) + return true; // clamped at the ends — no-op, not a failure + + std::vector snapshot = features; + std::swap(features[index], features[target]); + + // The two slots traded places: fix every feature reference that pointed at either — + // a mate's connectors as well as sketch_ref, for the reason given in remove_feature(). + auto swap_ref = [index, target](int& ref) { + if (ref == index) ref = target; + else if (ref == target) ref = index; + }; + for (auto& f : features) + for_each_feature_ref(f, swap_ref); + + return commit_or_rollback(*this, snapshot); +} + +bool CadDocument::replace_feature(int index, const CadFeature& edited) +{ + if (index < 0 || index >= int(features.size())) + return false; + + std::vector snapshot = features; + + // Preserve identity (name) and the structural link (sketch_ref) from the + // original; only the user-editable parameters come from `edited`. + CadFeature f = edited; + f.name = features[index].name; + f.type = features[index].type; + if (f.type == CadFeatureType::Extrude) + f.sketch_ref = features[index].sketch_ref; + features[index] = f; + + return commit_or_rollback(*this, snapshot); +} + +bool CadDocument::replace_sketch_extrude(int sketch_idx, int extrude_idx, + const CadFeature& edited) +{ + if (sketch_idx < 0 || sketch_idx >= int(features.size())) return false; + if (extrude_idx < 0 || extrude_idx >= int(features.size())) return false; + + std::vector snapshot = features; + + // A box in the tree is two linked features: the Sketch consumes the profile + // params (shape/plane/width/height/radius), the Extrude consumes the solid + // params (distance/symmetric/mode). `edited` carries all of them; split it + // back into the two slots, preserving each slot's name/type and the link. + CadFeature& sk = features[sketch_idx]; + sk.shape = edited.shape; + sk.plane = edited.plane; + sk.width = edited.width; + sk.height = edited.height; + sk.radius = edited.radius; + + CadFeature& ex = features[extrude_idx]; + ex.distance = edited.distance; + ex.symmetric = edited.symmetric; + ex.mode = edited.mode; + + return commit_or_rollback(*this, snapshot); +} + +// "the sketch is open" is not actionable; WHERE it is open is. Shared by both throws so the +// two ways of reaching an open profile (Revolve via build_sketch_wire, Extrude via +// build_sketch_face) report it identically. +static std::string open_loop_message(const CadFeature& sketch, + const char* head = "sketch entities do not form a closed loop") +{ + std::string msg = head; + const std::vector open = Slic3r::sketch_open_ends(sketch.entities, sketch.plane); + if (!open.empty()) { + const size_t shown = std::min(open.size(), 3); + char buf[96]; + for (size_t i = 0; i < shown; ++i) { + std::snprintf(buf, sizeof buf, "\n Open at (%.3f, %.3f)", open[i].x(), open[i].y()); + msg += buf; + } + if (open.size() > shown) { + std::snprintf(buf, sizeof buf, "\n ...and %zu more open end(s)", open.size() - shown); + msg += buf; + } + } + return msg; +} + +TopoDS_Wire CadDocument::build_sketch_wire(const CadFeature& sketch, bool closed_only) const +{ + if (!sketch.entities.empty()) { + TopoDS_Wire w = SketchEngine::entities_to_wire(sketch.entities, sketch.plane, closed_only); + if (!w.IsNull()) return w; + // An entity sketch that yields no wire is an ERROR, not a cue to fall through. The + // legacy tail of this function ends in a default rectangle built from width/height, + // which for an entity sketch are whatever they happened to be initialised to — so a + // sketch entities_to_wire cannot handle (a circle coexisting with a line, two circles: + // 88v) used to extrude into a box the user never drew, silently. Failing here + // costs the caller an error message; falling through cost them wrong geometry that + // looked deliberate. The legacy profile/shape paths below are still reached by sketches + // that legitimately carry no entities at all. + throw std::runtime_error( + open_loop_message(sketch, + "sketch has entities but they do not form a single closed wire — a closed " + "entity (circle/ellipse) combined with other entities, or several closed " + "entities, is not supported yet")); + } + if (!sketch.profile.points.empty()) { + SketchProfile prof = sketch.profile; + prof.closed = true; // extrude needs a closed wire + TopoDS_Wire w = prof.to_occt_wire(sketch.plane); + if (w.IsNull()) throw std::runtime_error("sketch profile wire failed"); + return w; + } + if (sketch.shape == SketchShape::Circle) { + gp_Pnt o(sketch.plane.origin.x(), sketch.plane.origin.y(), sketch.plane.origin.z()); + gp_Dir n(sketch.plane.normal.x(), sketch.plane.normal.y(), sketch.plane.normal.z()); + gp_Circ circ(gp_Ax2(o, n), sketch.radius); + TopoDS_Edge e = BRepBuilderAPI_MakeEdge(circ).Edge(); + BRepBuilderAPI_MakeWire wm(e); + if (!wm.IsDone()) throw std::runtime_error("circle wire failed"); + return wm.Wire(); + } + // Rectangle centered on the plane origin + SketchProfile prof; + double hw = sketch.width * 0.5, hh = sketch.height * 0.5; + prof.points.push_back(Vec2d(-hw, -hh)); + prof.points.push_back(Vec2d( hw, -hh)); + prof.points.push_back(Vec2d( hw, hh)); + prof.points.push_back(Vec2d(-hw, hh)); + prof.closed = true; + return prof.to_occt_wire(sketch.plane); +} + +TopoDS_Face CadDocument::build_sketch_face(const CadFeature& sketch) const +{ + if (!sketch.entities.empty()) { + const std::vector loops = SketchEngine::entities_to_wires(sketch.entities, sketch.plane, true); + if (loops.empty()) + // Same courtesy as build_sketch_wire: name WHERE the sketch is open. Extrude + // reaches its failure through here, not through build_sketch_wire, so without + // this the most common way to hit an open profile is also the least informative. + throw std::runtime_error(open_loop_message(sketch)); + return SketchEngine::wires_to_face(loops, sketch.plane); + } + return BRepBuilderAPI_MakeFace(build_sketch_wire(sketch, true)).Face(); +} + +void CadDocument::apply_feature(TopoDS_Shape& result, bool& have_body, + const TopoDS_Shape& context, const CadFeature& f) const +{ + switch (f.type) { + case CadFeatureType::Sketch: + return; // sketches carry no solid; consumed by an extrude + case CadFeatureType::Project: + return; // edges-to-sketch: consumed downstream, no solid body + case CadFeatureType::Helix: + return; // helical curve; consumed by Sweep as a path (like Sketch) + case CadFeatureType::Boolean: + return; // body-body boolean is handled in route_feature/apply_boolean, never here + case CadFeatureType::Import: + // Imported B-rep (STEP): rigid data carried on the feature, not built from + // parameters — adopt it as the new body (New-path: result starts empty). + result = f.imported_solid; + have_body = !result.IsNull(); + return; + case CadFeatureType::Extrude: { + const bool sym = (f.extrude_end == ExtrudeEnd::Symmetric); + const double signed_d = f.flip ? -f.distance : f.distance; + TopoDS_Shape tool; + if (f.extrude_src_face >= 0) { + // The source face is read from `context` (the owner body), which for a New + // face-extrude is the source solid while `result` is the empty new body. + if (context.IsNull()) throw std::runtime_error("face-extrude needs a body"); + TopoDS_Face srcf = GeometryEngine::face_by_index(context, f.extrude_src_face); + if (srcf.IsNull()) throw std::runtime_error("face-extrude: invalid face id"); + SketchPlane fpl = SketchPlane::from_face(srcf); + // from_face takes the surface's geometric normal and IGNORES the topological + // face orientation, so for a REVERSED face (e.g. the top cap of an extruded + // prism) it points INTO the solid -> a default push would fuse to nothing. + // Orient it outward so push/pull grows away from the material (Onshape default); + // the Flip checkbox (signed_d) still lets the user drive it inward for a cut. + if (srcf.Orientation() == TopAbs_REVERSED) fpl.normal = -fpl.normal; + tool = SketchEngine::make_extrude_face(srcf, fpl, signed_d, sym); + } else { + // Use the referenced sketch when sketch_ref is a valid Sketch index, + // otherwise fall back to f's own inline sketch params (this makes a + // single self-contained candidate previewable). + const CadFeature& sk = (f.sketch_ref >= 0 && f.sketch_ref < int(features.size()) + && (features[f.sketch_ref].type == CadFeatureType::Sketch + || features[f.sketch_ref].type == CadFeatureType::Project)) + ? features[f.sketch_ref] : f; + // Imported rigid art (Text/SVG) extrudes via the faces-with-holes path + // (with its placement transform applied); otherwise build the sketch's planar + // region (outer loop + holes) from entities/profile/shape. + tool = !sk.imported_regions.empty() + ? SketchEngine::make_extrude_regions( + transform_regions(sk.imported_regions, sk.import_offset, + sk.import_scale_x, sk.import_scale_y), + sk.plane, + f.extrude_end == ExtrudeEnd::ThroughAll ? 1e5 : signed_d, + f.extrude_end == ExtrudeEnd::ThroughAll ? true : (sym || f.extrude_end == ExtrudeEnd::TwoSided)) + : [&]() { + const TopoDS_Face profile = build_sketch_face(sk); + // A tapered extrude offsets the profile; a holed profile would have to + // offset its inner loops the opposite way, which is not implemented yet. + auto taper = [&](double L) -> TopoDS_Shape { + // Count the loops off the face we ALREADY built, rather than rebuilding + // every wire from the entities a second time to ask how many there are. + // It is also the more honest test: what matters is whether the profile + // being extruded has holes, not what the entity list could produce. + int nloops = 0; + for (TopExp_Explorer ex(profile, TopAbs_WIRE); ex.More(); ex.Next()) ++nloops; + if (nloops > 1) + throw std::runtime_error("tapered extrude of a sketch with holes is not supported yet"); + return SketchEngine::make_extrude_taper(build_sketch_wire(sk, true), sk.plane, L, f.taper_deg); + }; + TopoDS_Shape t; + switch (f.extrude_end) { + case ExtrudeEnd::Blind: + t = (std::abs(f.taper_deg) > 1e-6) + ? taper(signed_d) + : SketchEngine::make_extrude(profile, sk.plane, signed_d, false); + break; + case ExtrudeEnd::Symmetric: t = SketchEngine::make_extrude(profile, sk.plane, f.distance, true); break; + case ExtrudeEnd::TwoSided: t = SketchEngine::make_extrude_two_sided(profile, sk.plane, f.distance, f.distance2); break; + case ExtrudeEnd::ThroughAll: t = SketchEngine::make_extrude(profile, sk.plane, 1.0e5, true); break; + case ExtrudeEnd::UpToFace: { + const TopoDS_Face tgt = GeometryEngine::face_by_index(context, f.up_to_face); + double L = signed_d; + if (!tgt.IsNull()) { + const Vec3d c = GeometryEngine::face_centroid_world(tgt); + L = (c - sk.plane.origin).dot(sk.plane.normal); + } + t = (std::abs(f.taper_deg) > 1e-6) + ? taper(L) + : SketchEngine::make_extrude(profile, sk.plane, L, false); + break; + } + case ExtrudeEnd::UpToVertex: { + const double L = (f.up_to_point - sk.plane.origin).dot(sk.plane.normal); + t = SketchEngine::make_extrude(profile, sk.plane, L, false); + break; + } + default: t = SketchEngine::make_extrude(profile, sk.plane, signed_d, false); break; + } + return t; + }(); + } + // New / first-of-a-body => result becomes the tool (route_feature sends New extrudes + // here with an empty result, so a face-extrude New builds a fresh body from the source + // face in `context` without touching it). Add/Cut/Intersect boolean into `result`. + if (!have_body || f.mode == BooleanMode::New) { + result = tool; + have_body = true; + } else if (f.mode == BooleanMode::Add) { + BRepAlgoAPI_Fuse fuse(result, tool); + if (!fuse.IsDone()) throw std::runtime_error("fuse failed"); + result = fuse.Shape(); + } else if (f.mode == BooleanMode::Cut) { + BRepAlgoAPI_Cut cut(result, tool); + if (!cut.IsDone()) throw std::runtime_error("cut failed"); + result = cut.Shape(); + } else if (f.mode == BooleanMode::Intersect) { + BRepAlgoAPI_Common common(result, tool); + if (!common.IsDone()) throw std::runtime_error("intersect failed"); + result = common.Shape(); + } + break; + } + case CadFeatureType::Revolve: { + // Resolve the profile sketch like Extrude: referenced Sketch when valid, + // else this feature's own inline entities/profile (self-contained candidate). + const CadFeature& sk = (f.sketch_ref >= 0 && f.sketch_ref < int(features.size()) + && (features[f.sketch_ref].type == CadFeatureType::Sketch + || features[f.sketch_ref].type == CadFeatureType::Project)) + ? features[f.sketch_ref] : f; + TopoDS_Wire wire = build_sketch_wire(sk, true); + const double ang = f.flip ? -f.revolve_angle : f.revolve_angle; + TopoDS_Shape tool = SketchEngine::make_revolve(wire, sk.plane, ang, f.revolve_axis); + if (!have_body || f.mode == BooleanMode::New) { + result = tool; + have_body = true; + } else if (f.mode == BooleanMode::Add) { + BRepAlgoAPI_Fuse fuse(result, tool); + if (!fuse.IsDone()) throw std::runtime_error("fuse failed"); + result = fuse.Shape(); + } else if (f.mode == BooleanMode::Cut) { + BRepAlgoAPI_Cut cut(result, tool); + if (!cut.IsDone()) throw std::runtime_error("cut failed"); + result = cut.Shape(); + } else if (f.mode == BooleanMode::Intersect) { + BRepAlgoAPI_Common common(result, tool); + if (!common.IsDone()) throw std::runtime_error("intersect failed"); + result = common.Shape(); + } + break; + } + case CadFeatureType::SurfaceExtrude: { + if (f.sketch_ref < 0 || f.sketch_ref >= int(features.size())) + throw std::runtime_error("surface-extrude: bad sketch ref"); + const CadFeature& sk = features[f.sketch_ref]; + if (sk.type != CadFeatureType::Sketch && sk.type != CadFeatureType::Project) + throw std::runtime_error("surface-extrude: ref is not a sketch"); + TopoDS_Wire wire = build_sketch_wire(sk); + if (wire.IsNull()) throw std::runtime_error("surface-extrude: empty profile"); + gp_Dir nrm(sk.plane.normal.x(), sk.plane.normal.y(), sk.plane.normal.z()); + gp_Vec v(nrm.XYZ() * f.distance); + TopoDS_Shape shell = BRepPrimAPI_MakePrism(wire, v, false, true).Shape(); + if (shell.IsNull()) throw std::runtime_error("surface-extrude: prism failed"); + result = shell; have_body = true; + break; + } + case CadFeatureType::SurfaceRevolve: { + if (f.sketch_ref < 0 || f.sketch_ref >= int(features.size())) + throw std::runtime_error("surface-revolve: bad sketch ref"); + const CadFeature& sk = features[f.sketch_ref]; + if (sk.type != CadFeatureType::Sketch && sk.type != CadFeatureType::Project) + throw std::runtime_error("surface-revolve: ref is not a sketch"); + TopoDS_Wire wire = build_sketch_wire(sk); + if (wire.IsNull()) throw std::runtime_error("surface-revolve: empty profile"); + const Vec3d& adir = (f.revolve_axis == 1) ? sk.plane.y_axis : sk.plane.x_axis; + gp_Pnt o(sk.plane.origin.x(), sk.plane.origin.y(), sk.plane.origin.z()); + gp_Dir xd(adir.x(), adir.y(), adir.z()); + gp_Ax1 axis(o, xd); + const double ang = f.revolve_angle * M_PI / 180.0; + BRepPrimAPI_MakeRevol rev(wire, axis, ang, false); + if (!rev.IsDone()) throw std::runtime_error("surface-revolve: revolve failed"); + result = rev.Shape(); have_body = true; + break; + } + case CadFeatureType::SurfaceLoft: { + std::vector profiles; + for (int ref : f.loft_profile_refs) { + if (ref < 0 || ref >= int(features.size()) + || (features[ref].type != CadFeatureType::Sketch + && features[ref].type != CadFeatureType::Project)) + continue; + profiles.push_back(build_sketch_wire(features[ref])); + } + if (profiles.size() < 2) + throw std::runtime_error("surface-loft needs 2+ valid profile sketches"); + TopoDS_Shape skin = SketchEngine::make_loft_surface(profiles, f.loft_ruled); + if (skin.IsNull()) throw std::runtime_error("surface-loft: loft failed"); + result = skin; have_body = true; + break; + } + case CadFeatureType::SurfaceFill: { + if (f.sketch_ref < 0 || f.sketch_ref >= int(features.size())) + throw std::runtime_error("surface-fill: bad sketch ref"); + const CadFeature& sk = features[f.sketch_ref]; + if (sk.type != CadFeatureType::Sketch && sk.type != CadFeatureType::Project) + throw std::runtime_error("surface-fill: ref is not a sketch"); + TopoDS_Wire wire = build_sketch_wire(sk); + if (wire.IsNull()) throw std::runtime_error("surface-fill: empty boundary"); + BRepOffsetAPI_MakeFilling fill; + int nedges = 0; + for (TopExp_Explorer ex(wire, TopAbs_EDGE); ex.More(); ex.Next()) { + fill.Add(TopoDS::Edge(ex.Current()), GeomAbs_C0); + ++nedges; + } + if (nedges == 0) throw std::runtime_error("surface-fill: boundary has no edges"); + fill.Build(); + if (!fill.IsDone()) throw std::runtime_error("surface-fill: fill failed"); + TopoDS_Shape face = fill.Shape(); + if (face.IsNull()) throw std::runtime_error("surface-fill: produced no geometry"); + result = face; have_body = true; + break; + } + case CadFeatureType::Sweep: { + const CadFeature& sk = (f.sketch_ref >= 0 && f.sketch_ref < int(features.size()) + && (features[f.sketch_ref].type == CadFeatureType::Sketch + || features[f.sketch_ref].type == CadFeatureType::Project)) + ? features[f.sketch_ref] : f; + if (f.sweep_path_ref < 0 || f.sweep_path_ref >= int(features.size())) + throw std::runtime_error("sweep needs a valid path reference"); + const CadFeature& path_feat = features[f.sweep_path_ref]; + TopoDS_Wire path; + if (path_feat.type == CadFeatureType::Helix) { + std::string helix_err; + path = make_helix_spine(path_feat, helix_err); + if (path.IsNull()) throw std::runtime_error("helix path: " + helix_err); + } else if (path_feat.type == CadFeatureType::Sketch) { + path = build_sketch_wire(path_feat); + } else { + throw std::runtime_error("sweep path must be a sketch or helix"); + } + TopoDS_Wire profile = build_sketch_wire(sk, true); + TopoDS_Shape tool = SketchEngine::make_sweep(profile, path); + if (!have_body || f.mode == BooleanMode::New) { + result = tool; + have_body = true; + } else if (f.mode == BooleanMode::Add) { + BRepAlgoAPI_Fuse fuse(result, tool); + if (!fuse.IsDone()) throw std::runtime_error("fuse failed"); + result = fuse.Shape(); + } else if (f.mode == BooleanMode::Cut) { + BRepAlgoAPI_Cut cut(result, tool); + if (!cut.IsDone()) throw std::runtime_error("cut failed"); + result = cut.Shape(); + } else if (f.mode == BooleanMode::Intersect) { + BRepAlgoAPI_Common common(result, tool); + if (!common.IsDone()) throw std::runtime_error("intersect failed"); + result = common.Shape(); + } + break; + } + case CadFeatureType::Loft: { + // Loft through 2+ closed profile Sketches, in recipe order. Each profile builds + // a wire via build_sketch_wire (so it keeps its own plane); make_loft skins them. + std::vector profiles; + for (int ref : f.loft_profile_refs) { + if (ref < 0 || ref >= int(features.size()) + || (features[ref].type != CadFeatureType::Sketch + && features[ref].type != CadFeatureType::Project)) + continue; + profiles.push_back(build_sketch_wire(features[ref], true)); + } + if (profiles.size() < 2) + throw std::runtime_error("loft needs 2+ valid profile sketches"); + TopoDS_Shape tool = SketchEngine::make_loft(profiles, f.loft_ruled); + if (!have_body || f.mode == BooleanMode::New) { + result = tool; + have_body = true; + } else if (f.mode == BooleanMode::Add) { + BRepAlgoAPI_Fuse fuse(result, tool); + if (!fuse.IsDone()) throw std::runtime_error("fuse failed"); + result = fuse.Shape(); + } else if (f.mode == BooleanMode::Cut) { + BRepAlgoAPI_Cut cut(result, tool); + if (!cut.IsDone()) throw std::runtime_error("cut failed"); + result = cut.Shape(); + } else if (f.mode == BooleanMode::Intersect) { + BRepAlgoAPI_Common common(result, tool); + if (!common.IsDone()) throw std::runtime_error("intersect failed"); + result = common.Shape(); + } + break; + } + case CadFeatureType::Pattern: { + // Pattern along a curve: when pattern_curve_sketch >= 0 this mode takes + // precedence over linear/circular. Copies are placed at equal-parameter points + // along the referenced sketch entity, translated by (P_i - P_0). + if (f.pattern_curve_sketch >= 0) { + if (f.pattern_curve_sketch >= (int)features.size()) + throw std::runtime_error("pattern-on-curve: bad sketch ref"); + const CadFeature& gs = features[f.pattern_curve_sketch]; + if (gs.type != CadFeatureType::Sketch) + throw std::runtime_error("pattern-on-curve: ref is not a sketch"); + if (f.pattern_curve_entity < 0 || f.pattern_curve_entity >= (int)gs.entities.size()) + throw std::runtime_error("pattern-on-curve: bad entity"); + if (!have_body) throw std::runtime_error("pattern needs a body"); + const SketchEntity& gc = gs.entities[f.pattern_curve_entity]; + const int n = std::max(1, f.pattern_count); + const TopoDS_Shape seed = result; + Vec3d p0 = gs.plane.to_world(sample_entity_2d(gc, 0.0)); + for (int i = 1; i < n; ++i) { + double t = double(i) / double(n - 1 > 0 ? n - 1 : 1); + Vec3d pi = gs.plane.to_world(sample_entity_2d(gc, t)); + Vec3d d = pi - p0; + gp_Trsf trsf; + trsf.SetTranslation(gp_Vec(d.x(), d.y(), d.z())); + TopoDS_Shape copy = BRepBuilderAPI_Transform(seed, trsf, true).Shape(); + BRepAlgoAPI_Fuse fuse(result, copy); + if (!fuse.IsDone()) throw std::runtime_error("pattern fuse failed"); + result = fuse.Shape(); + } + break; + } + // Replicate the target body. Each copy is a rigid gp_Trsf of the seed, all + // fused into one body. Linear: i*spacing along plane axis pattern_dir + // (0=X,1=Y). Circular: i*(angle/count) about the plane normal through the + // plane origin (so a seed offset from the origin orbits the axis). + if (!have_body) throw std::runtime_error("pattern needs a body"); + const int n = std::max(1, f.pattern_count); + const TopoDS_Shape seed = result; + for (int i = 1; i < n; ++i) { + gp_Trsf trsf; + if (f.pattern_circular) { + Vec3d o = f.plane.to_world(Vec2d(0, 0)); + gp_Ax1 ax(gp_Pnt(o.x(), o.y(), o.z()), + gp_Dir(f.plane.normal.x(), f.plane.normal.y(), f.plane.normal.z())); + const double step = (f.pattern_angle * M_PI / 180.0) / double(n); + trsf.SetRotation(ax, step * i); + } else { + const Vec3d& d = (f.pattern_dir == 1) ? f.plane.y_axis : f.plane.x_axis; + trsf.SetTranslation(gp_Vec(d.x() * f.pattern_spacing * i, + d.y() * f.pattern_spacing * i, + d.z() * f.pattern_spacing * i)); + } + TopoDS_Shape copy = BRepBuilderAPI_Transform(seed, trsf, true).Shape(); + BRepAlgoAPI_Fuse fuse(result, copy); + if (!fuse.IsDone()) throw std::runtime_error("pattern fuse failed"); + result = fuse.Shape(); + } + break; + } + case CadFeatureType::Rib: { + if (!have_body) throw std::runtime_error("rib needs a body"); + if (f.rib_sketch_ref < 0 || f.rib_sketch_ref >= (int)features.size()) + throw std::runtime_error("rib: bad sketch ref"); + const CadFeature& sk = features[f.rib_sketch_ref]; + // Project counts as sketch-like here exactly as it does for Extrude, SurfaceExtrude + // and SurfaceRevolve: it carries plane + Line entities, which is all a rib reads. + // Ribbing along a projected body edge is otherwise unreachable. + if (sk.type != CadFeatureType::Sketch && sk.type != CadFeatureType::Project) + throw std::runtime_error("rib: ref is not a sketch"); + if (f.rib_entity < 0 || f.rib_entity >= (int)sk.entities.size()) + throw std::runtime_error("rib: bad entity"); + const SketchEntity& ln = sk.entities[f.rib_entity]; + if (ln.type != SketchEntity::Type::Line) + throw std::runtime_error("rib: entity must be a line"); // ponytail: line-only for now + // Thin rectangle centred on the line, in the sketch plane: offset both endpoints by + // +/-thickness/2 along the in-plane perpendicular of the line direction. + const SketchPlane& pl = sk.plane; + Vec2d a = ln.p0, b = ln.p1; + Vec2d dir = (b - a); double L = dir.norm(); + if (L < 1e-9) throw std::runtime_error("rib: degenerate line"); + dir /= L; + Vec2d perp(-dir.y(), dir.x()); + double h = f.rib_thickness * 0.5; + Vec2d q0 = a + perp*h, q1 = b + perp*h, q2 = b - perp*h, q3 = a - perp*h; + auto w3 = [&](const Vec2d& p){ Vec3d w = pl.to_world(p); return gp_Pnt(w.x(),w.y(),w.z()); }; + BRepBuilderAPI_MakePolygon poly(w3(q0), w3(q1), w3(q2), w3(q3), Standard_True); + if (!poly.IsDone()) throw std::runtime_error("rib: profile failed"); + TopoDS_Shape wall = SketchEngine::make_extrude(poly.Wire(), pl, f.rib_depth, false, 0.0); + if (wall.IsNull()) throw std::runtime_error("rib: extrude failed"); + BRepAlgoAPI_Fuse fuse(result, wall); + if (!fuse.IsDone()) throw std::runtime_error("rib: fuse failed"); + result = fuse.Shape(); + break; + } + case CadFeatureType::Fillet: + if (!have_body) throw std::runtime_error("fillet needs a body"); + if (f.dressup_edge >= 0) + result = GeometryEngine::apply_fillet(result, f.dressup_size, f.dressup_edge); + else + result = GeometryEngine::apply_fillet(result, f.dressup_size, f.face_group); + break; + case CadFeatureType::Chamfer: + if (!have_body) throw std::runtime_error("chamfer needs a body"); + if (f.dressup_edge >= 0) + result = GeometryEngine::apply_chamfer(result, f.dressup_size, f.dressup_edge); + else + result = GeometryEngine::apply_chamfer(result, f.dressup_size, f.face_group); + break; + case CadFeatureType::Hole: { + if (!have_body) throw std::runtime_error("hole needs a body"); + // Circle wire centered at the positioned point on the plane + Vec3d c = f.plane.to_world(Vec2d(f.hole_x, f.hole_y)); + gp_Pnt o(c.x(), c.y(), c.z()); + gp_Dir n(f.plane.normal.x(), f.plane.normal.y(), f.plane.normal.z()); + gp_Circ circ(gp_Ax2(o, n), f.hole_diameter * 0.5); + TopoDS_Edge e = BRepBuilderAPI_MakeEdge(circ).Edge(); + BRepBuilderAPI_MakeWire wm(e); + if (!wm.IsDone()) throw std::runtime_error("hole wire failed"); + // Through = symmetric huge cut (passes fully through any body); + // Blind = +normal extrude of hole_depth into the body. + TopoDS_Shape tool = f.hole_through + ? SketchEngine::make_extrude(wm.Wire(), f.plane, 1.0e5, true, 0.0) + : SketchEngine::make_extrude(wm.Wire(), f.plane, f.hole_depth, false, 0.0); + BRepAlgoAPI_Cut cut(result, tool); + if (!cut.IsDone()) throw std::runtime_error("hole cut failed"); + result = cut.Shape(); + + // Enlarge the entry for a screw head (style 1 = counterbore, 2 = countersink). + if (f.hole_style == 1 && f.hole_cbore_diameter > f.hole_diameter + && f.hole_cbore_depth > 1e-6) { + gp_Ax2 cbax(o, n); + TopoDS_Shape cb = BRepPrimAPI_MakeCylinder(cbax, f.hole_cbore_diameter * 0.5, + f.hole_cbore_depth).Shape(); + BRepAlgoAPI_Cut cbc(result, cb); + if (cbc.IsDone() && !cbc.Shape().IsNull()) result = cbc.Shape(); + } else if (f.hole_style == 2 && f.hole_csink_diameter > f.hole_diameter) { + const double Rmaj = f.hole_csink_diameter * 0.5; + const double Rmin = f.hole_diameter * 0.5; + const double half = f.hole_csink_angle * 0.5 * M_PI / 180.0; + const double h = (Rmaj - Rmin) / std::tan(half); + if (h > 1e-6) { + gp_Ax2 csax(o, n); + TopoDS_Shape cs = BRepPrimAPI_MakeCone(csax, Rmaj, Rmin, h).Shape(); + BRepAlgoAPI_Cut csc(result, cs); + if (csc.IsDone() && !csc.Shape().IsNull()) result = csc.Shape(); + } + } + break; + } + case CadFeatureType::Thread: { + // Reject degenerate parameters that make OCCT's helical sweep / boolean unstable (a tiny + // pitch, depth >= half-pitch, an enormous turn count, depth eating the whole wall). Better + // a no-op than a crash. Leave the body unchanged when the spec can't be built safely. + { + const double R = f.thread_radius, P = f.thread_pitch, H = f.thread_height, D = f.thread_depth; + // ISO external thread depth is ~0.61*P, so allow up to 0.7*P (0.49 wrongly rejected + // every real thread -> nothing rendered). Still bound it well under a full pitch. + const bool ok = R > 0.5 && P > 0.1 && D > 1e-3 && D < 0.7 * P && D < 0.45 * R + && H > 0.5 * P && (H / P) < 400.0; + if (!ok) break; // result/have_body untouched + } + // Axis at the positioned point on the plane; +normal = thread rise. + Vec3d c3 = f.plane.to_world(Vec2d(f.thread_x, f.thread_y)); + gp_Pnt c(c3.x(), c3.y(), c3.z()); + gp_Dir zdir(f.plane.normal.x(), f.plane.normal.y(), f.plane.normal.z()); + gp_Dir xdir(f.plane.x_axis.x(), f.plane.x_axis.y(), f.plane.x_axis.z()); + gp_Ax3 ax3(c, zdir, xdir); + gp_Ax2 ax2(c, zdir, xdir); + + // Build the swept helical ridge (guarded — never fatal). + TopoDS_Shape ridge; + bool have_ridge = false; + try { + TopoDS_Wire spine = make_helix_wire(ax3, f.thread_radius, + f.thread_pitch, f.thread_height); + TopoDS_Wire prof = make_thread_profile(c, xdir, zdir, f.thread_radius, + f.thread_pitch, f.thread_depth, + f.thread_internal); + // MakePipeShell with a FIXED BINORMAL = cylinder axis keeps the V-profile's orientation + // constant along the helix (axial edge always parallel to the axis, V always pointing + // radially out). The plain MakePipe used a Frenet frame that TWISTED the profile around + // the helix -> the wedge inclination varied and looked mirrored. + BRepOffsetAPI_MakePipeShell pipe(spine); + pipe.SetMode(zdir); + pipe.Add(prof); + pipe.Build(); + if (pipe.IsDone() && pipe.MakeSolid()) { + ridge = pipe.Shape(); + have_ridge = !ridge.IsNull(); + } + } catch (const std::exception&) { + have_ridge = false; // fall back to the bare cylinder/bore below + } catch (const Standard_Failure&) { + have_ridge = false; // OCCT failure (not a std::exception) — must be caught here too + } + + if (f.thread_internal) { + if (!have_body) throw std::runtime_error("internal thread needs a body"); + // Tapped bore: ensure a clean cylindrical pocket, then carve the + // OUTWARD helical groove into its wall. When the thread is invoked on + // an existing hole the bore cut is coincident (a no-op that may report + // !IsDone) — tolerate it so the visible groove cut below still runs. + // Cut the pocket at the MINOR diameter (radius - depth), not the nominal radius. + // A nominal-radius bore that coincides with an existing hole's wall creates + // coincident faces that foul the following groove boolean (the groove then removes + // ~nothing -> invisible thread). The minor bore stays strictly inside any existing + // hole wall, leaving it clean for the groove; on solid stock it forms the tap-drill. + const double bore_r = std::max(0.5, f.thread_radius - f.thread_depth); + TopoDS_Shape bore = BRepPrimAPI_MakeCylinder(ax2, bore_r, + f.thread_height).Shape(); + try { + BRepAlgoAPI_Cut cut_bore(result, bore); + if (cut_bore.IsDone() && !cut_bore.Shape().IsNull()) + result = cut_bore.Shape(); + } catch (const std::exception&) { /* keep existing bore */ } + if (have_ridge) { + BRepAlgoAPI_Cut cut_ridge(result, ridge); + if (cut_ridge.IsDone() && !cut_ridge.Shape().IsNull()) + result = cut_ridge.Shape(); + } + } else { + // External thread: FUSE the helical ridge ONTO the existing body (the picked cylinder), + // leaving the rest of the part intact. Replacing the body with a bare rod — the old + // behaviour — wiped whatever the user picked; that was the "mess". With no body yet + // (a thread from scratch on a dropdown plane), fall back to a standalone threaded rod. + if (have_body && !result.IsNull()) { + if (have_ridge) { + BRepAlgoAPI_Fuse fuse(result, ridge); + if (fuse.IsDone() && !fuse.Shape().IsNull()) result = fuse.Shape(); + } + } else { + TopoDS_Shape rod = BRepPrimAPI_MakeCylinder(ax2, f.thread_radius, + f.thread_height).Shape(); + if (have_ridge) { + BRepAlgoAPI_Fuse fuse(rod, ridge); + if (fuse.IsDone()) rod = fuse.Shape(); + } + result = rod; + have_body = true; + } + } + break; + } + case CadFeatureType::Shell: { + if (!have_body) throw std::runtime_error("shell needs a body"); + // Hollow the body to a wall thickness; the picked face (if any) is removed so the + // shell is open there. MakeThickSolidByJoin with a NEGATIVE offset shells inward. + TopTools_ListOfShape remove; + if (f.shell_face >= 0) { + TopoDS_Face fc = GeometryEngine::face_by_index(result, f.shell_face); + if (!fc.IsNull()) remove.Append(fc); + } + BRepOffsetAPI_MakeThickSolid mts; + mts.MakeThickSolidByJoin(result, remove, -std::abs(f.shell_thickness), 1.0e-3); + mts.Build(); + if (!mts.IsDone()) throw std::runtime_error("shell failed"); + result = mts.Shape(); + if (result.IsNull()) throw std::runtime_error("shell produced no geometry"); + break; + } + case CadFeatureType::Draft: { + if (!have_body) throw std::runtime_error("draft needs a body"); + if (f.draft_face < 0) throw std::runtime_error("draft needs a picked face"); + TopoDS_Face fc = GeometryEngine::face_by_index(result, f.draft_face); + if (fc.IsNull()) throw std::runtime_error("draft: face not found"); + // Neutral plane = horizontal plane through the body's bbox bottom, pull direction +Z. + // The face pivots about the line where it meets the neutral plane and tilts by the angle. + // ponytail: neutral plane / pull direction fixed to world up; pick-based neutral plane + // deferred (same as the datum-plane pick types, dgv). + Bnd_Box bb; BRepBndLib::Add(result, bb); + Standard_Real xmin, ymin, zmin, xmax, ymax, zmax; + bb.Get(xmin, ymin, zmin, xmax, ymax, zmax); + gp_Dir pull(0, 0, 1); + gp_Pln neutral(gp_Pnt(0, 0, zmin), pull); + BRepOffsetAPI_DraftAngle draft(result); + draft.Add(fc, pull, f.draft_angle * M_PI / 180.0, neutral); + if (!draft.AddDone()) + throw std::runtime_error("draft: face cannot be drafted (is it parallel to the base?)"); + draft.Build(); + if (!draft.IsDone()) throw std::runtime_error("draft failed"); + result = draft.Shape(); + if (result.IsNull()) throw std::runtime_error("draft produced no geometry"); + break; + } + case CadFeatureType::DeleteFace: { + if (!have_body) throw std::runtime_error("delete_face needs a body"); + if (f.delete_faces.empty()) throw std::runtime_error("delete_face needs at least one face"); + BRepAlgoAPI_Defeaturing df; + df.SetShape(result); + for (int fi : f.delete_faces) { + TopoDS_Face fc = GeometryEngine::face_by_index(result, fi); + if (fc.IsNull()) throw std::runtime_error("delete_face: face not found"); + df.AddFaceToRemove(fc); + } + df.Build(); + if (!df.IsDone()) throw std::runtime_error("delete_face failed"); + result = df.Shape(); + if (result.IsNull()) throw std::runtime_error("delete_face produced no geometry"); + break; + } + } +} + +// Compound of all body shapes (1 body => that body verbatim, so single-body display and +// global face/edge ids are byte-identical to the pre-multi-body behaviour). +static TopoDS_Shape compound_of(const std::vector& bodies) +{ + if (bodies.size() == 1) return bodies[0].shape; + TopoDS_Compound comp; + BRep_Builder bld; + bld.MakeCompound(comp); + for (const CadBody& b : bodies) + if (!b.shape.IsNull()) bld.Add(comp, b.shape); + return comp; +} + +// Tessellate every body separately and concatenate into one mesh, recording per-triangle +// (body index, face id WITHIN that body). Single-body => byte-identical to tessellate(body). +static TriangleMesh tessellate_bodies(const std::vector& bodies, + std::vector& tri_face, std::vector& tri_body, + std::vector& body_meshes, + double lin, double ang) +{ + tri_face.clear(); + tri_body.clear(); + body_meshes.clear(); + indexed_triangle_set merged; + for (int bi = 0; bi < int(bodies.size()); ++bi) { + std::vector tf; + TriangleMesh bm = SketchEngine::tessellate(bodies[bi].shape, tf, lin, ang); + const indexed_triangle_set& its = bm.its; + const int voff = int(merged.vertices.size()); + for (const auto& v : its.vertices) merged.vertices.push_back(v); + for (const auto& t : its.indices) + merged.indices.emplace_back(t[0] + voff, t[1] + voff, t[2] + voff); + for (int fid : tf) { tri_face.push_back(fid); tri_body.push_back(bi); } + body_meshes.push_back(std::move(bm)); // per-body mesh kept for distinct GLVolume colors + } + return TriangleMesh(merged); +} + +void CadDocument::apply_boolean(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + const int tool = (f.bool_tool_body >= 0 && f.bool_tool_body < nb) ? f.bool_tool_body : -1; + if (tgt < 0 || tool < 0 || tgt == tool) return; // need two distinct bodies; otherwise no-op + const TopoDS_Shape A = bodies[tgt].shape; // target survives + const TopoDS_Shape B = bodies[tool].shape; // tool, consumed unless kept + if (A.IsNull() || B.IsNull()) return; + + TopTools_ListOfShape args, tools; + args.Append(A); + tools.Append(B); + auto run = [&](BRepAlgoAPI_BooleanOperation& bop) -> TopoDS_Shape { + bop.SetArguments(args); + bop.SetTools(tools); + if (f.bool_tolerance > 0.0) bop.SetFuzzyValue(f.bool_tolerance); // OCCT fuzzy: merge near-coincident faces + bop.Build(); + if (!bop.IsDone()) throw std::runtime_error("boolean operation failed"); + return bop.Shape(); + }; + TopoDS_Shape result; + switch (f.mode) { + case BooleanMode::Add: { BRepAlgoAPI_Fuse op; result = run(op); break; } // union + case BooleanMode::Cut: { BRepAlgoAPI_Cut op; result = run(op); break; } // target - tool + case BooleanMode::Intersect: { BRepAlgoAPI_Common op; result = run(op); break; } // overlap + default: return; // BooleanMode::New is meaningless between two existing bodies + } + if (result.IsNull()) throw std::runtime_error("boolean produced an empty shape"); + + bodies[tgt].shape = result; + if (!f.bool_keep_tool) bodies.erase(bodies.begin() + tool); // consume the tool body +} + +void CadDocument::apply_cut(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("cut: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("cut: no target body"); + + if (!f.cut_keep_upper && !f.cut_keep_lower) + throw std::runtime_error("cut keeps nothing"); + + SketchPlane cp; + if (f.cut_face >= 0) { + const int fb = (f.cut_face_body >= 0 && f.cut_face_body < nb) ? f.cut_face_body : tgt; + if (bodies[fb].shape.IsNull()) throw std::runtime_error("cut: face body is empty"); + TopoDS_Face fc = GeometryEngine::face_by_index(bodies[fb].shape, f.cut_face); + if (fc.IsNull()) throw std::runtime_error("cut: face not found"); + cp = SketchPlane::from_face(fc); + } else { + cp = f.plane; + } + cp.origin += cp.normal * f.cut_offset; + if (f.cut_flip) cp.normal = -cp.normal; + + // Build a large square wire in the cut plane, centered at plane origin. + const double L = 1.0e5; + Vec3d x = cp.x_axis * L; + Vec3d y = cp.y_axis * L; + Vec3d o = cp.origin; + auto p = [&](double sx, double sy) { + Vec3d v = o + x * sx + y * sy; + return gp_Pnt(v.x(), v.y(), v.z()); + }; + BRepBuilderAPI_MakePolygon poly; + poly.Add(p( 1, 1)); + poly.Add(p( 1, -1)); + poly.Add(p(-1, -1)); + poly.Add(p(-1, 1)); + poly.Close(); + if (!poly.IsDone()) throw std::runtime_error("cut: failed to build cut wire"); + TopoDS_Wire wire = poly.Wire(); + + TopoDS_Shape upper_piece, lower_piece; + const TopoDS_Shape& target = bodies[tgt].shape; + + if (f.cut_keep_upper) { + TopoDS_Shape upper_tool = SketchEngine::make_extrude(wire, cp, L, false, 0.0); + BRepAlgoAPI_Common common(target, upper_tool); + if (!common.IsDone()) throw std::runtime_error("cut operation failed"); + upper_piece = common.Shape(); + } + + if (f.cut_keep_lower) { + SketchPlane lp = cp; + lp.normal = -lp.normal; + TopoDS_Shape lower_tool = SketchEngine::make_extrude(wire, lp, L, false, 0.0); + BRepAlgoAPI_Common common(target, lower_tool); + if (!common.IsDone()) throw std::runtime_error("cut operation failed"); + lower_piece = common.Shape(); + } + + if (f.cut_keep_upper && f.cut_keep_lower) { + bodies[tgt].shape = upper_piece; + bodies.insert(bodies.begin() + tgt + 1, + CadBody{ lower_piece, bodies[tgt].name + " (2)" }); + } else if (f.cut_keep_upper) { + bodies[tgt].shape = upper_piece; + } else { + bodies[tgt].shape = lower_piece; + } +} + +void CadDocument::apply_mirror(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("mirror: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("mirror: no target body"); + + const TopoDS_Shape& src = bodies[tgt].shape; + + gp_Trsf trsf; + trsf.SetMirror(gp_Ax2(gp_Pnt(f.plane.origin.x(), f.plane.origin.y(), f.plane.origin.z()), + gp_Dir(f.plane.normal.x(), f.plane.normal.y(), f.plane.normal.z()))); + BRepBuilderAPI_Transform xform(src, trsf, true /*copy*/); + if (!xform.IsDone()) throw std::runtime_error("mirror: transform failed"); + TopoDS_Shape mirrored = xform.Shape(); + + // A mirror reverses orientation — verify the result has positive volume. + { + GProp_GProps props; + BRepGProp::VolumeProperties(mirrored, props); + if (props.Mass() <= 0.0) { + // Flip orientation to get a valid forward solid. + mirrored.Reverse(); + BRepGProp::VolumeProperties(mirrored, props); + if (props.Mass() <= 0.0) + throw std::runtime_error("mirror: result has zero or negative volume"); + } + } + + switch (f.mode) { + case BooleanMode::Add: { + BRepAlgoAPI_Fuse fuse(src, mirrored); + if (!fuse.IsDone()) throw std::runtime_error("mirror fuse failed"); + bodies[tgt].shape = fuse.Shape(); + break; + } + case BooleanMode::New: { + if (!f.mirror_keep_original) + bodies.erase(bodies.begin() + tgt); // replace: the mirrored copy takes the source slot + bodies.push_back({mirrored, f.name.empty() ? std::string("Mirror") : f.name}); + break; + } + default: + throw std::runtime_error("mirror: mode must be New or Add"); + } +} + +void CadDocument::apply_transform(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("transform: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("transform: no target body"); + + gp_Trsf rot; + if (std::abs(f.xf_angle_deg) > 1e-12) { + if (f.xf_axis.norm() < 1e-9) + throw std::runtime_error("transform: rotation axis is degenerate"); + rot.SetRotation(gp_Ax1(gp_Pnt(f.xf_pivot.x(), f.xf_pivot.y(), f.xf_pivot.z()), + gp_Dir(f.xf_axis.x(), f.xf_axis.y(), f.xf_axis.z())), + f.xf_angle_deg * M_PI / 180.0); + } + gp_Trsf tr; + tr.SetTranslation(gp_Vec(f.xf_translate.x(), f.xf_translate.y(), f.xf_translate.z())); + const gp_Trsf trsf = tr * rot; // rotate first, then translate + + BRepBuilderAPI_Transform xform(bodies[tgt].shape, trsf, true /*copy*/); + if (!xform.IsDone()) throw std::runtime_error("transform: failed"); + TopoDS_Shape moved = xform.Shape(); + + if (f.xf_copy) + bodies.push_back({moved, f.name.empty() ? std::string("Transform") : f.name}); + else + bodies[tgt].shape = moved; +} + +void CadDocument::apply_thicken(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("thicken: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("thicken: no target body"); + + TopoDS_Face fc = GeometryEngine::face_by_index(bodies[tgt].shape, f.thicken_face); + if (fc.IsNull()) throw std::runtime_error("thicken: face not found"); + if (std::abs(f.thicken_thickness) < 1e-9) throw std::runtime_error("thicken: thickness is zero"); + + TopoDS_Shell shell; + BRep_Builder bb; + bb.MakeShell(shell); + bb.Add(shell, fc); + + const double off = f.thicken_flip ? -std::abs(f.thicken_thickness) + : std::abs(f.thicken_thickness); + BRepOffsetAPI_MakeThickSolid mts; + mts.MakeThickSolidBySimple(shell, off); + mts.Build(); + if (!mts.IsDone()) throw std::runtime_error("thicken: failed"); + TopoDS_Shape solid = mts.Shape(); + if (solid.IsNull()) throw std::runtime_error("thicken: produced no geometry"); + + // MakeThickSolidBySimple may produce a reversed solid. Ensure positive volume. + { + GProp_GProps props; + BRepGProp::VolumeProperties(solid, props); + if (props.Mass() < 0.0) solid.Reverse(); + } + + bodies.push_back({solid, f.name.empty() ? std::string("Thicken") : f.name}); +} + +void CadDocument::apply_thicken_surface(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("thicken-surface: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("thicken-surface: no target body"); + if (!is_sheet_shape(bodies[tgt].shape)) throw std::runtime_error("thicken-surface: target is not a sheet body"); + if (std::abs(f.thicken_thickness) < 1e-9) throw std::runtime_error("thicken-surface: thickness is zero"); + + const double off = f.thicken_flip ? -std::abs(f.thicken_thickness) + : std::abs(f.thicken_thickness); + const TopoDS_Shape& sheet = bodies[tgt].shape; + + // MakeThickSolidBySimple offsets each face along its own normal and sews the result; it never + // extends neighbours to meet, so at every edge where two faces join at an angle the corner + // material is simply absent. A flat sheet is therefore exact while a 4-walled box is not + // (measured: 29648 against the 44000 that (60^2-50^2)*40 requires). + // + // ByJoin is the call that mitres those corners, and it is what the Shell feature already uses + // successfully a few hundred lines up — but it CANNOT be handed an open sheet. In OCCT, + // BRepOffset_MakeOffset::MakeThickSolid builds the solid only inside `if (!myFaces.IsEmpty())` + // (BRepOffset_MakeOffset.cxx:1115): with no closing faces it stops after the offset shell and + // returns that. So it reports IsDone() and a non-null shape containing no TopAbs_SOLID at all + // — which is exactly how two earlier attempts failed, and why no parameter could have fixed it. + // + // So close the sheet first, then use the working call: cap the free rims, sew into a closed + // shell, make a solid, and hollow it inward passing the caps as the faces to remove. The caps + // come back off, leaving the wall. + // A SINGLE face has no edge shared with a neighbour, so there is no corner to mitre and + // BySimple is already exact on it (flat 60x60 by 5 -> 18000.000). It also has a free + // boundary, so "does it have free wires" is NOT the question to ask here — capping a lone + // face with its own rim sews a zero-thickness shell and the offset then measures 6000. + int n_faces = 0; + for (TopExp_Explorer fe(sheet, TopAbs_FACE); fe.More(); fe.Next()) ++n_faces; + + TopTools_ListOfShape caps; + if (n_faces > 1) { + ShapeAnalysis_FreeBounds fb(sheet); + for (TopExp_Explorer we(fb.GetClosedWires(), TopAbs_WIRE); we.More(); we.Next()) { + BRepBuilderAPI_MakeFace mk(TopoDS::Wire(we.Current())); + if (!mk.IsDone()) + throw std::runtime_error("thicken-surface: cannot cap the sheet rim " + "(is it planar?)"); + caps.Append(mk.Face()); + } + } + + TopoDS_Shape solid; + if (caps.IsEmpty()) { + BRepOffsetAPI_MakeThickSolid mts; + mts.MakeThickSolidBySimple(sheet, off); + mts.Build(); + if (!mts.IsDone()) throw std::runtime_error("thicken-surface: failed"); + solid = mts.Shape(); + } else { + BRepBuilderAPI_Sewing sewer(1.0e-3); + sewer.Add(sheet); + for (TopTools_ListIteratorOfListOfShape it(caps); it.More(); it.Next()) + sewer.Add(it.Value()); + sewer.Perform(); + + TopoDS_Shell closed_shell; + for (TopExp_Explorer se(sewer.SewedShape(), TopAbs_SHELL); se.More(); se.Next()) { + if (!closed_shell.IsNull()) + throw std::runtime_error("thicken-surface: the capped sheet split into " + "more than one shell"); + closed_shell = TopoDS::Shell(se.Current()); + } + if (closed_shell.IsNull() || !BRep_Tool::IsClosed(closed_shell)) + throw std::runtime_error("thicken-surface: the capped sheet is not closed"); + + // A shell sewn from an extruded sheet carries no guarantee that its faces point outward, + // and BRepBuilderAPI_MakeSolid does not fix that. Offsetting an inside-out solid sends the + // wall the wrong way: measured bbox 70x70x40 for an inward offset on a 60x60 box, with a + // volume larger than its own bounding box because the result then overlaps itself. A + // negative mass IS the inverted orientation, so use it as the test. + TopoDS_Solid capped = BRepBuilderAPI_MakeSolid(closed_shell).Solid(); + { + GProp_GProps vp; + BRepGProp::VolumeProperties(capped, vp); + if (vp.Mass() < 0.0) capped.Reverse(); + } + + BRepOffsetAPI_MakeThickSolid mts; + mts.MakeThickSolidByJoin(capped, caps, -std::abs(off), 1.0e-3); + mts.Build(); + if (!mts.IsDone()) throw std::runtime_error("thicken-surface: failed"); + solid = mts.Shape(); + } + if (solid.IsNull()) throw std::runtime_error("thicken-surface: produced no geometry"); + // IsDone() is NOT a success test here — the failed attempts had IsDone() true and no solid. + if (!TopExp_Explorer(solid, TopAbs_SOLID).More()) + throw std::runtime_error("thicken-surface: produced a shell, not a solid"); + + { + GProp_GProps props; + BRepGProp::VolumeProperties(solid, props); + if (props.Mass() < 0.0) solid.Reverse(); + } + + bodies.push_back({solid, f.name.empty() ? std::string("ThickenSurface") : f.name}); +} + +void CadDocument::apply_surface_offset(std::vector& bodies, const CadFeature& f) const +{ + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("surface-offset: no target body"); + const int tgt = (f.target_body >= 0 && f.target_body < nb) ? f.target_body : nb - 1; + if (tgt < 0 || bodies[tgt].shape.IsNull()) throw std::runtime_error("surface-offset: no target body"); + if (!is_sheet_shape(bodies[tgt].shape)) throw std::runtime_error("surface-offset: target is not a sheet body"); + const double d = f.plane_offset; + if (std::abs(d) < 1e-9) throw std::runtime_error("surface-offset: zero offset"); + + BRepOffsetAPI_MakeOffsetShape mos; + mos.PerformBySimple(bodies[tgt].shape, d); + if (!mos.IsDone()) throw std::runtime_error("surface-offset: failed"); + TopoDS_Shape off_shape = mos.Shape(); + if (off_shape.IsNull()) throw std::runtime_error("surface-offset: produced no geometry"); + + bodies.push_back({off_shape, f.name.empty() ? std::string("SurfaceOffset") : f.name}); +} + +// Project `edges` of a shape onto `plane`, appending the resulting 2D entities to `out`. +// `construction` marks them as guides rather than built geometry. This is the body of the +// Project feature's conversion loop, factored out so a sketch can borrow the same geometry. +static void project_edges_to_entities(const std::vector& edges, + const SketchPlane& plane, + bool construction, + std::vector& out) +{ + auto to2d = [&](const gp_Pnt& p) -> Vec2d { + Vec3d d(p.X() - plane.origin.x(), p.Y() - plane.origin.y(), p.Z() - plane.origin.z()); + return Vec2d(d.dot(plane.x_axis), d.dot(plane.y_axis)); + }; + + // A segment whose endpoints coincide after projection carries no geometry: that is what + // an edge perpendicular to the target plane becomes. Emitting it as a zero-length line + // would poison the sketch downstream, so drop it here. + auto push_line = [&](const Vec2d& a, const Vec2d& b) { + if ((b - a).norm() < 1e-7) return; + SketchEntity se; se.type = SketchEntity::Type::Line; + se.p0 = a; se.p1 = b; + se.construction = construction; + out.push_back(se); + }; + + for (const TopoDS_Edge& e : edges) { + BRepAdaptor_Curve ac(e); + const GeomAbs_CurveType ct = ac.GetType(); + if (ct == GeomAbs_Line) { + gp_Pnt a = ac.Value(ac.FirstParameter()); + gp_Pnt b = ac.Value(ac.LastParameter()); + push_line(to2d(a), to2d(b)); + } else if (ct == GeomAbs_Circle) { + gp_Circ c = ac.Circle(); + gp_Dir cn = c.Axis().Direction(); + Vec3d cnv(cn.X(), cn.Y(), cn.Z()); + const double par = std::abs(cnv.dot(plane.normal)); + const bool full = BRep_Tool::IsClosed(e) || + std::abs((ac.LastParameter() - ac.FirstParameter()) - 2.0 * M_PI) < 1e-6; + if (par > 0.999) { + Vec2d ctr = to2d(c.Location()); + if (full) { + SketchEntity se; se.type = SketchEntity::Type::Circle; + se.center = ctr; se.radius = c.Radius(); + se.construction = construction; + out.push_back(se); + } else { + gp_Pnt a = ac.Value(ac.FirstParameter()); + gp_Pnt b = ac.Value(ac.LastParameter()); + Vec2d a2 = to2d(a), b2 = to2d(b); + SketchEntity se; se.type = SketchEntity::Type::Arc; + se.center = ctr; se.radius = c.Radius(); + se.p0 = a2; se.p1 = b2; + se.start_angle = std::atan2(a2.y() - ctr.y(), a2.x() - ctr.x()); + se.end_angle = std::atan2(b2.y() - ctr.y(), b2.x() - ctr.x()); + se.construction = construction; + out.push_back(se); + } + continue; + } + std::vector pts = GeometryEngine::sample_edge_world(e); + for (size_t i = 1; i < pts.size(); ++i) + push_line(to2d(gp_Pnt(pts[i-1].x(), pts[i-1].y(), pts[i-1].z())), + to2d(gp_Pnt(pts[i].x(), pts[i].y(), pts[i].z()))); + } else { + std::vector pts = GeometryEngine::sample_edge_world(e); + for (size_t i = 1; i < pts.size(); ++i) + push_line(to2d(gp_Pnt(pts[i-1].x(), pts[i-1].y(), pts[i-1].z())), + to2d(gp_Pnt(pts[i].x(), pts[i].y(), pts[i].z()))); + } + } +} + +void CadDocument::apply_project(const std::vector& bodies, CadFeature& f) const +{ + f.entities.clear(); + const int nb = int(bodies.size()); + if (nb == 0) throw std::runtime_error("project: no source body"); + const int src = (f.project_source_body >= 0 && f.project_source_body < nb) + ? f.project_source_body : nb - 1; + if (src < 0 || bodies[src].shape.IsNull()) throw std::runtime_error("project: source body is empty"); + const TopoDS_Shape& shape = bodies[src].shape; + + std::vector edges; + if (!f.project_edges.empty()) { + for (int id : f.project_edges) { + TopoDS_Edge e = GeometryEngine::edge_by_index(shape, id); + if (e.IsNull()) throw std::runtime_error("project: edge not found"); + edges.push_back(e); + } + } else if (f.project_face >= 0) { + TopoDS_Face fc = GeometryEngine::face_by_index(shape, f.project_face); + if (fc.IsNull()) throw std::runtime_error("project: face not found"); + edges = GeometryEngine::edges_of_face(fc); + } else { + // No face and no explicit selection means "all edges" — the state the Project card + // starts in, and its label says so. Edges perpendicular to the target plane collapse + // to a point when projected; they are dropped below rather than emitted as + // zero-length lines. + edges = GeometryEngine::edges_of(shape); + } + if (edges.empty()) throw std::runtime_error("project: no edges to project"); + + project_edges_to_entities(edges, f.plane, /*construction=*/false, f.entities); + + if (f.entities.empty()) throw std::runtime_error("project: produced no entities"); +} + +void CadDocument::detect_mate_conflicts() +{ + mate_conflicts.clear(); + + const int n = int(features.size()); + std::map first_driver; // body -> feature index of first mate that drives it + std::map> graph; // dst -> list of src (body indices) + + for (int fi = 0; fi < n; ++fi) { + const CadFeature& f = features[fi]; + if (f.type != CadFeatureType::Mate || !f.enabled) continue; + + if (f.mate_cs_a < 0 || f.mate_cs_a >= n) continue; + if (f.mate_cs_b < 0 || f.mate_cs_b >= n) continue; + const CadFeature& fa = features[f.mate_cs_a]; + const CadFeature& fb = features[f.mate_cs_b]; + if (fa.type != CadFeatureType::CoordSys || !fa.enabled) continue; + if (fb.type != CadFeatureType::CoordSys || !fb.enabled) continue; + + const int src = fa.coordsys_body; + const int dst = fb.coordsys_body; + if (dst < 0) continue; // apply_mate already reports this one + + // (a) duplicate target: a second mate driving the same body + auto it = first_driver.find(dst); + if (it != first_driver.end()) { + int first_fi = it->second; + std::string first_name = features[first_fi].name.empty() ? "Mate" : features[first_fi].name; + std::string this_name = f.name.empty() ? "Mate" : f.name; + mate_conflicts.push_back({fi, + "Body " + std::to_string(dst + 1) + " is already positioned by '" + + first_name + "' (feature " + std::to_string(first_fi) + + ") — '" + this_name + "' overrides it; suppress one"}); + } else { + first_driver[dst] = fi; + } + + // (b) self-mate or cycle detection + if (src >= 0 && dst >= 0) { + if (src == dst) { + mate_conflicts.push_back({fi, + "this mate positions Body " + std::to_string(dst + 1) + " against itself"}); + } else { + graph[dst].push_back(src); + } + } + } + + // DFS cycle detection on the graph built above. + // ponytail: iterative DFS avoids recursion depth issues on long chains. + // Colour: 0 = unvisited, 1 = in-progress (grey), 2 = done (black). + std::map colour; + struct Frame { int node; size_t next; }; + std::vector stack; + + for (const auto& [start, _] : graph) { + if (colour[start] == 2) continue; + stack.clear(); + stack.push_back({start, 0}); + colour[start] = 1; + while (!stack.empty()) { + Frame& top = stack.back(); + auto git = graph.find(top.node); + if (git == graph.end() || top.next >= git->second.size()) { + colour[top.node] = 2; + stack.pop_back(); + continue; + } + int child = git->second[top.next++]; + if (colour[child] == 1) { + // Back edge found — find the mate whose (dst==top.node, src==child). + for (int fi = 0; fi < n; ++fi) { + const CadFeature& f = features[fi]; + if (f.type != CadFeatureType::Mate || !f.enabled) continue; + if (f.mate_cs_a < 0 || f.mate_cs_a >= n) continue; + if (f.mate_cs_b < 0 || f.mate_cs_b >= n) continue; + const CadFeature& fa2 = features[f.mate_cs_a]; + const CadFeature& fb2 = features[f.mate_cs_b]; + if (fa2.type != CadFeatureType::CoordSys || !fa2.enabled) continue; + if (fb2.type != CadFeatureType::CoordSys || !fb2.enabled) continue; + int sd = fb2.coordsys_body; + int ss = fa2.coordsys_body; + if (sd == top.node && ss == child) { + mate_conflicts.push_back({fi, + // Worded for ANY cycle length: "leads back" is true transitively, + // where "depends back on" would be a lie for a 3+ body chain. + "circular mate chain: Body " + std::to_string(top.node + 1) + + " depends on Body " + std::to_string(child + 1) + + ", which leads back to Body " + std::to_string(top.node + 1) + + " — the result depends on feature order"}); + break; + } + } + continue; + } + if (colour[child] == 0) { + colour[child] = 1; + stack.push_back({child, 0}); + } + } + } + + // Deliberately NOT in scope: computing the numeric disagreement between two mates + // ("Mate3 puts it at X=10, Mate7 at X=15"). That needs speculative per-mate evaluation. +} + +void CadDocument::apply_mate(std::vector& bodies, const CadFeature& f) const +{ + const int nc = int(features.size()); + if (f.mate_cs_a < 0 || f.mate_cs_a >= nc) + throw std::runtime_error("mate: mate_cs_a out of range"); + if (f.mate_cs_b < 0 || f.mate_cs_b >= nc) + throw std::runtime_error("mate: mate_cs_b out of range"); + + const CadFeature& fa = features[f.mate_cs_a]; + const CadFeature& fb = features[f.mate_cs_b]; + if (fa.type != CadFeatureType::CoordSys || !fa.enabled) + throw std::runtime_error("mate: mate_cs_a is not a valid CoordSys feature"); + if (fb.type != CadFeatureType::CoordSys || !fb.enabled) + throw std::runtime_error("mate: mate_cs_b is not a valid CoordSys feature"); + + CadDocument::DatumCoordSys A = datum_frame(bodies, fa); + CadDocument::DatumCoordSys B = datum_frame(bodies, fb); + if (!A.error.empty()) throw std::runtime_error("mate: " + A.error); + if (!B.error.empty()) throw std::runtime_error("mate: " + B.error); + + const int tgt_body = fb.coordsys_body; + if (tgt_body < 0) + throw std::runtime_error("mate: mate_cs_b has no associated body"); + if (tgt_body >= int(bodies.size()) || bodies[tgt_body].shape.IsNull()) + throw std::runtime_error("mate: target body out of range or null"); + + Vec3d xA(A.x), yA(A.y), oA(A.origin); + Vec3d zA = xA.cross(yA).normalized(); + Vec3d xB(B.x), yB(B.y), oB(B.origin); + Vec3d zB = xB.cross(yB).normalized(); + + auto make_4x4 = [&](const Vec3d& x, const Vec3d& y, const Vec3d& z, const Vec3d& o) { + gp_Trsf T; + T.SetValues(x.x(), y.x(), z.x(), o.x(), + x.y(), y.y(), z.y(), o.y(), + x.z(), y.z(), z.z(), o.z()); + return T; + }; + gp_Trsf M_A = make_4x4(xA, yA, zA, oA); + gp_Trsf M_B = make_4x4(xB, yB, zB, oB); + + gp_Trsf F; + if (f.mate_flip) { + // Rx(pi): flip y→-y, z→-z + F.SetValues(1, 0, 0, 0, + 0, -1, 0, 0, + 0, 0, -1, 0); + } + + gp_Trsf T; + if (f.mate_kind == 0) { + // Fastened: T = M_A * Rz(mate_angle) * Tz(mate_offset) * F * M_B^-1 + gp_Trsf Rz; + Rz.SetRotation(gp_Ax1(gp_Pnt(0,0,0), gp_Dir(0,0,1)), f.mate_angle * M_PI / 180.0); + gp_Trsf Tz; + Tz.SetTranslation(gp_Vec(0, 0, f.mate_offset)); + gp_Trsf M_B_inv = M_B.Inverted(); + T = M_A * Rz * Tz * F * M_B_inv; + } else { + Vec3d z_target = f.mate_flip ? -zA : zA; + + // Minimum-rotation helper: compute R that rotates zB onto z_target + // about an axis through oB. Reused by Planar / Revolute / Cylindrical. + auto make_z_align = [&](const Vec3d& zsrc, const Vec3d& zdst) -> gp_Trsf { + double ddot = zsrc.dot(zdst); + Vec3d rot_axis; + double rot_angle = 0; + if (ddot <= -0.9999) { + Vec3d ref = (std::abs(zsrc.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + rot_axis = zsrc.cross(ref).normalized(); + rot_angle = M_PI; + } else { + rot_axis = zsrc.cross(zdst); + if (rot_axis.squaredNorm() > 1e-18) { + rot_axis.normalize(); + rot_angle = std::acos(std::max(-1.0, std::min(1.0, ddot))); + } + } + gp_Trsf R; + if (rot_angle > 1e-12) { + R.SetRotation(gp_Ax1(gp_Pnt(oB.x(), oB.y(), oB.z()), + gp_Dir(rot_axis.x(), rot_axis.y(), rot_axis.z())), + rot_angle); + } + return R; + }; + + if (f.mate_kind == 1 || f.mate_kind == 2 || f.mate_kind == 4) { + // Planar (1) / Revolute (2) / Cylindrical (4): + // all share the same minimum-rotation z-alignment. + gp_Trsf R_align = make_z_align(zB, z_target); + + gp_Trsf Rz_about_target; + if (std::abs(f.mate_angle) > 1e-12) { + Rz_about_target.SetRotation( + gp_Ax1(gp_Pnt(oB.x(), oB.y(), oB.z()), + gp_Dir(z_target.x(), z_target.y(), z_target.z())), + f.mate_angle * M_PI / 180.0); + } + gp_Trsf R = Rz_about_target * R_align; + + // Translation: depends on which DOFs are constrained + Vec3d trans; + if (f.mate_kind == 1) { + // Planar: normal distance becomes mate_offset + double d = (oB - oA).dot(zA); + trans = zA * (f.mate_offset - d); + } else if (f.mate_kind == 2) { + // Revolute: full position on the axis line + trans = (oA + zA * f.mate_offset) - oB; + } else { + // Cylindrical (4): fix perpendicular, preserve axial + double axial = (oB - oA).dot(zA); + trans = (oA + zA * (axial + f.mate_offset)) - oB; + } + + T.SetValues(1, 0, 0, trans.x(), + 0, 1, 0, trans.y(), + 0, 0, 1, trans.z()); + T = T * R; + } else { + // Slider (mate_kind == 3): full orientation alignment, + // fix perpendicular position, preserve axial translation. + Vec3d x_target = xA; + Vec3d y_target = f.mate_flip ? -yA : yA; + + // R = target * B^T (both bases orthonormal) + double r11 = x_target.x() * xB.x() + y_target.x() * yB.x() + z_target.x() * zB.x(); + double r12 = x_target.x() * xB.y() + y_target.x() * yB.y() + z_target.x() * zB.y(); + double r13 = x_target.x() * xB.z() + y_target.x() * yB.z() + z_target.x() * zB.z(); + double r21 = x_target.y() * xB.x() + y_target.y() * yB.x() + z_target.y() * zB.x(); + double r22 = x_target.y() * xB.y() + y_target.y() * yB.y() + z_target.y() * zB.y(); + double r23 = x_target.y() * xB.z() + y_target.y() * yB.z() + z_target.y() * zB.z(); + double r31 = x_target.z() * xB.x() + y_target.z() * yB.x() + z_target.z() * zB.x(); + double r32 = x_target.z() * xB.y() + y_target.z() * yB.y() + z_target.z() * zB.y(); + double r33 = x_target.z() * xB.z() + y_target.z() * yB.z() + z_target.z() * zB.z(); + + // Build rotation about oB: R_full * p = R * (p - oB) + oB + double tx = oB.x() - (r11 * oB.x() + r12 * oB.y() + r13 * oB.z()); + double ty = oB.y() - (r21 * oB.x() + r22 * oB.y() + r23 * oB.z()); + double tz = oB.z() - (r31 * oB.x() + r32 * oB.y() + r33 * oB.z()); + gp_Trsf R_full; + R_full.SetValues(r11, r12, r13, tx, + r21, r22, r23, ty, + r31, r32, r33, tz); + + double axial = (oB - oA).dot(zA); + Vec3d trans = (oA + zA * (axial + f.mate_offset)) - oB; + + T.SetValues(1, 0, 0, trans.x(), + 0, 1, 0, trans.y(), + 0, 0, 1, trans.z()); + T = T * R_full; + } + } + + BRepBuilderAPI_Transform xform(bodies[tgt_body].shape, T, true /*copy*/); + if (!xform.IsDone()) throw std::runtime_error("mate: transform failed"); + bodies[tgt_body].shape = xform.Shape(); +} + +// Volume of a shape, 0 for anything that isn't a solid we can measure. Used to catch a +// subtraction that removed nothing (daf). +static double solid_volume(const TopoDS_Shape& s) +{ + if (s.IsNull()) return 0.0; + GProp_GProps props; + BRepGProp::VolumeProperties(s, props); + return std::abs(props.Mass()); +} + +void CadDocument::route_feature(std::vector& bodies, const CadFeature& f) const +{ + if (f.type == CadFeatureType::Plane) return; // datum plane: not part of the body pipeline + if (f.type == CadFeatureType::Axis) return; // datum axis + if (f.type == CadFeatureType::CoordSys) return; // datum coordinate system + if (f.type == CadFeatureType::Helix) return; // helical curve; consumed by Sweep + if (f.type == CadFeatureType::Boolean) { apply_boolean(bodies, f); return; } // body-body op + if (f.type == CadFeatureType::Cut) { apply_cut(bodies, f); return; } // plane-split body + if (f.type == CadFeatureType::Mirror) { apply_mirror(bodies, f); return; } // mirror body about plane + if (f.type == CadFeatureType::Transform) { apply_transform(bodies, f); return; } // move/rotate body + if (f.type == CadFeatureType::Mate) { apply_mate(bodies, f); return; } // assembly mate + if (f.type == CadFeatureType::Thicken) { apply_thicken(bodies, f); return; } // face -> plate + if (f.type == CadFeatureType::ThickenSurface) { apply_thicken_surface(bodies, f); return; } + if (f.type == CadFeatureType::SurfaceOffset) { apply_surface_offset(bodies, f); return; } + if (f.type == CadFeatureType::Project) return; // sketch-like: consumed downstream, no body + // Resolve the target body: explicit target_body when valid, else the last body. + const int t = (f.target_body >= 0 && f.target_body < int(bodies.size())) + ? f.target_body : int(bodies.size()) - 1; + const TopoDS_Shape context = (t >= 0) ? bodies[t].shape : TopoDS_Shape(); + // A New extrude (or the very first solid feature) starts a fresh body; everything else + // mutates the target body in place. + const bool starts_new = bodies.empty() + || f.type == CadFeatureType::Import // an imported solid is always its own base body + || f.type == CadFeatureType::SurfaceExtrude || f.type == CadFeatureType::SurfaceRevolve + || f.type == CadFeatureType::ThickenSurface || f.type == CadFeatureType::SurfaceOffset + || f.type == CadFeatureType::SurfaceLoft || f.type == CadFeatureType::SurfaceFill + || ((f.type == CadFeatureType::Extrude || f.type == CadFeatureType::Revolve + || f.type == CadFeatureType::Sweep || f.type == CadFeatureType::Loft) + && f.mode == BooleanMode::New); + + if (starts_new) { + TopoDS_Shape result; // empty -> apply_feature fills it (New path) + bool have_body = false; + apply_feature(result, have_body, context, f); + if (have_body && !result.IsNull()) + bodies.push_back({ result, f.name.empty() ? std::string("Body") : f.name }); + } else { + if (t < 0) throw std::runtime_error("feature needs a body"); + TopoDS_Shape result = bodies[t].shape; // shallow handle; apply_feature mutates it + bool have_body = true; + // A subtraction whose tool misses the target is a legal boolean that removes nothing, so + // OCCT reports IsDone() and the feature lands in the recipe reporting success. A caller — + // an agent especially — then has no signal at all that the hole it asked for was never + // drilled: same body, same volume, ok:true. Measure the volume across the op and refuse + // the no-op. Only for removals: every other feature type may legitimately leave the volume + // alone (a Transform certainly does). daf. + const bool removes = f.type == CadFeatureType::Hole + || f.type == CadFeatureType::Thread + || ((f.type == CadFeatureType::Extrude || f.type == CadFeatureType::Revolve + || f.type == CadFeatureType::Sweep || f.type == CadFeatureType::Loft) + && f.mode == BooleanMode::Cut); + const double before = removes ? solid_volume(result) : 0.0; + apply_feature(result, have_body, context, f); + if (removes && before > 0.0) { + const double after = solid_volume(result); + // Relative tolerance: a cut that shaves a numerically invisible sliver is a miss too, + // and an absolute epsilon would be wrong across the mm-to-metre range of real parts. + if (after >= before - 1e-9 * std::max(1.0, before)) + throw std::runtime_error(std::string( + f.type == CadFeatureType::Hole ? "hole" : + f.type == CadFeatureType::Thread ? "thread" : "cut") + + " removed no material — the tool does not intersect the target body" + " (coordinates are in the sketch plane's frame, not world)"); + } + bodies[t].shape = result; + } +} + +bool CadDocument::recompute() +{ + error.clear(); + detect_mate_conflicts(); + std::vector built; + // Did any feature in this document even ASK for a solid? A document made only of sketches + // and datums has nothing to build, and that is a legitimate state — it is every document + // between drawing the first profile and extruding it. Reporting it as a failure is what + // made a sketch-only design unsaveable AND unopenable: DesignPanel::recompute_guarded syncs + // the 3MF recipe only "on success", so nothing was written, and deserialize_recipe ends with + // `return recompute()`, so a project that did carry a recipe was refused on load with + // "Could not restore the CAD model" while its features sat correctly in the list. mtav. + bool any_solid_feature = false; + try { + // Parametric pass: evaluate document variables, then each feature's expression bindings, + // writing the results into the feature's numeric fields before geometry runs. + std::map varvals = evaluate_variables(variables); + for (CadFeature& f : features) + for (const auto& [field, e] : f.expr) + assign_field(f, field, eval_expr(e, varvals)); + for (size_t fi = 0; fi < features.size(); ++fi) { + CadFeature& f = features[fi]; + if (!f.enabled) continue; + if (f.type == CadFeatureType::Sketch) continue; // consumed by an extrude + if (f.type == CadFeatureType::Helix) continue; // consumed by Sweep as a path + if (f.type == CadFeatureType::Plane) continue; // datum: no solid, derived on demand + if (f.type == CadFeatureType::Axis) continue; // datum axis + if (f.type == CadFeatureType::CoordSys) continue; // datum coordinate system + // Past the skips: this feature is one that means to leave a body behind. + any_solid_feature = true; + if (f.type == CadFeatureType::Project) { apply_project(built, f); } + else { route_feature(built, f); } + // Record which feature made each body. "Still unset?" is the whole rule, and it is + // sufficient because of an invariant worth stating: NO feature ever replaces a whole + // CadBody. Every in-place op writes only `.shape` (boolean, cut, mirror-fuse, + // transform, dress-up — checked, all 8 sites), so an existing body keeps the stamp it + // was born with; a consumed body is erased outright, taking its stamp with it; and + // the only bodies still at -1 here are the ones THIS feature just pushed. That also + // means a feature type added later needs no change here, as long as it keeps to the + // same invariant. + for (CadBody& b : built) + if (b.source_feature < 0) + b.source_feature = int(fi); + } + } catch (const Standard_Failure& e) { + // OCCT raises Standard_Failure (NOT a std::exception) — must be caught + // here or it escapes the event handler and terminates the app. + error = e.GetMessageString() ? e.GetMessageString() : "OCCT operation failed"; + return false; + } catch (const std::exception& e) { + error = e.what(); + return false; + } catch (...) { + error = "unknown geometry error"; + return false; + } + if (built.empty() && any_solid_feature) { error = "no solid-producing features"; return false; } + + // A feature that leaves a body with a null shape must fail loudly. Until this existed, + // recompute() returned true and the document kept advertising the body: describe_scene + // counted it, error was empty, and only mass_properties on that specific body revealed + // anything was wrong. Returning false hands the caller its normal rollback path, so the + // operation that destroyed the body is undone rather than committed. + for (size_t i = 0; i < built.size(); ++i) { + if (!built[i].shape.IsNull()) continue; + const int src = built[i].source_feature; + // source_feature is -1 for a body no feature claims. "feature 0" would be a lie, and + // this message exists precisely to be trusted about which feature to look at. + const std::string fname = + (src < 0 || src >= int(features.size())) + ? std::string("an unidentified feature") + : (features[src].name.empty() ? ("feature " + std::to_string(src + 1)) + : features[src].name); + error = "body " + std::to_string(i + 1) + " was destroyed by " + fname + + " (the operation produced an empty shape)"; + return false; + } + + // recompute() replaces the bodies vector wholesale, which would drop any per-body + // colour override (Color tool). Body indices are stable across a rebuild (bodies are + // appended in feature order), so carry the override forward by index — same indexing + // contract the GUI relies on for per-body visibility/Move. + for (size_t i = 0; i < built.size() && i < bodies.size(); ++i) { + if (bodies[i].has_color) { + built[i].has_color = true; + built[i].color = bodies[i].color; + } + // ...and the name the user gave the body, for the same reason and by the same index + // contract. Without this a rename would live exactly until the next feature was added. + if (bodies[i].has_user_name) { + built[i].has_user_name = true; + built[i].user_name = bodies[i].user_name; + } + } + bodies = std::move(built); + // The face and edge maps have just been rebuilt, so every global id handed out before this + // point now means something else. Bump here rather than in each mutator: this is the single + // line where the topology is actually replaced, so it cannot be forgotten by a new feature + // type the way a per-mutator bump would be. + ++topo_generation; + + // Face-drift fingerprint for FaceAndDirection CoordSys connectors. This runs AFTER the + // bodies are final and APPENDS to mate_conflicts (detect_mate_conflicts() cleared it at + // the top of recompute() and must not run again here). A mismatch is a WARNING, not an + // error: a legitimate Draft on a mated face renumbers nothing but a real renumber after a + // dress-up silently points the connector at a different face, and that must not abort. + for (int fi = 0; fi < int(features.size()); ++fi) { + CadFeature& f = features[fi]; + if (!f.enabled) continue; + if (f.type != CadFeatureType::CoordSys) continue; + if (f.coordsys_type != CoordSysType::FaceAndDirection) continue; + if (f.coordsys_body < 0 || f.coordsys_body >= int(bodies.size())) continue; + TopoDS_Face face = GeometryEngine::face_by_index(bodies[f.coordsys_body].shape, f.coordsys_face); + if (face.IsNull()) continue; // "face not found" is already reported by datum_frame() + const int kind = int(BRepAdaptor_Surface(face).GetType()); + const int edges = int(GeometryEngine::edges_of_face(face).size()); + if (f.coordsys_face_kind < 0) { + // No fingerprint yet (old recipe, or a connector never resolved): adopt the state + // the user last saw. Self-heals old recipes on first load, and gives both existing + // writers the fingerprint for free. + f.coordsys_face_kind = kind; + f.coordsys_face_edges = edges; + continue; + } + if (f.coordsys_face_kind != kind || f.coordsys_face_edges != edges) { + mate_conflicts.emplace_back(int(fi), + "connector \"" + f.name + "\" may have moved to a different face " + "(an upstream edit renumbered this body's faces)"); + } + } + + body = compound_of(bodies); + display_mesh = tessellate_bodies(bodies, display_tri_face, display_tri_body, + display_body_meshes, + linear_deflection, angular_deflection); + if (display_mesh.its.indices.empty() && any_solid_feature) { + // Empty only because there are no bodies to tessellate is the same legitimate state as + // above: a sketch-only document has nothing to draw as a solid, and that is not a fault. + error = "tessellation produced an empty mesh"; + return false; + } + return true; +} + +bool CadDocument::preview(const CadFeature& candidate, TriangleMesh& out_mesh, + std::vector& out_body_meshes, std::string& err) const +{ + err.clear(); + out_body_meshes.clear(); + std::vector tmp = bodies; // start from the current committed bodies + try { + route_feature(tmp, candidate); // candidate may append a new body or mutate one + } catch (const Standard_Failure& e) { + err = e.GetMessageString() ? e.GetMessageString() : "OCCT operation failed"; + return false; + } catch (const std::exception& e) { + err = e.what(); + return false; + } catch (...) { + err = "unknown geometry error"; + return false; + } + if (tmp.empty()) { + err = "preview produced no geometry"; + return false; + } + // Tessellate per body (same path as recompute) so the GUI can re-apply its display-only + // per-body Move transforms to the ghost; out_mesh is the merged whole. + std::vector tf, tb; + out_mesh = tessellate_bodies(tmp, tf, tb, out_body_meshes, linear_deflection, angular_deflection); + if (out_mesh.its.indices.empty()) { + err = "preview produced an empty mesh"; + return false; + } + return true; +} + +bool CadDocument::preview(const CadFeature& candidate, TriangleMesh& out_mesh, std::string& err) const +{ + std::vector ignore; + return preview(candidate, out_mesh, ignore, err); +} + +std::string brep_to_string(const TopoDS_Shape& s) +{ + if (s.IsNull()) return {}; + std::ostringstream oss; + BRepTools::Write(s, oss); + return oss.str(); +} + +TopoDS_Shape brep_from_string(const std::string& d) +{ + if (d.empty()) return {}; + std::istringstream iss(d); + TopoDS_Shape s; + BRep_Builder b; + BRepTools::Read(s, iss, b); + return s; +} + +std::string CadDocument::serialize_recipe() const +{ + std::ostringstream oss; + { + cereal::BinaryOutputArchive ar(oss); + uint32_t v = ORCA_CAD_RECIPE_VERSION; + ar(v); + uint32_t n = static_cast(features.size()); + ar(n); + for (const CadFeature& f : features) { + std::ostringstream fos; + { + cereal::BinaryOutputArchive fa(fos); + fa(f); + } + std::string fb = fos.str(); + uint32_t len = static_cast(fb.size()); + ar(len); + ar(cereal::binary_data(fb.data(), fb.size())); + } + std::ostringstream vos; + { + cereal::BinaryOutputArchive va(vos); + va(variables); + } + std::string vb = vos.str(); + uint32_t vlen = static_cast(vb.size()); + ar(vlen); + ar(cereal::binary_data(vb.data(), vb.size())); + // BODY NAMES, appended after the variables block. Bodies are not serialised — they are + // recomputed — so a name the user gave one has nowhere else to live, and without this it + // would survive a recompute (see the carry-over in recompute()) but not a save. + // + // APPENDED RATHER THAN VERSION-BUMPED, on purpose: a build that predates this block + // reads features and variables, returns, and never looks at the trailing bytes, so its + // projects still open here AND this build's projects still open there. A version bump + // would have made every project written today unreadable by yesterday's build for the + // sake of one optional field. Written as (index, name) pairs so an unnamed body costs + // nothing. + // A map, not a vector of pairs: cereal's map support is already included here and its + // pair support is not, and one more include for one more field is not worth it. + std::map named; + for (uint32_t i = 0; i < bodies.size(); ++i) + if (bodies[i].has_user_name && !bodies[i].user_name.empty()) + named[i] = bodies[i].user_name; + std::ostringstream bos; + { + cereal::BinaryOutputArchive ba(bos); + ba(named); + } + std::string bb = bos.str(); + uint32_t blen = static_cast(bb.size()); + ar(blen); + ar(cereal::binary_data(bb.data(), bb.size())); + } + return oss.str(); +} + +bool CadDocument::deserialize_recipe(const std::string& blob) +{ + error.clear(); + try { + std::istringstream iss(blob); + cereal::BinaryInputArchive ar(iss); + uint32_t v; + ar(v); + if (v > ORCA_CAD_RECIPE_VERSION) { + error = "saved with a newer version of the Design tab (format v" + + std::to_string(v) + ", this build reads up to v" + + std::to_string(ORCA_CAD_RECIPE_VERSION) + ")"; + return false; + } + // The framed layout has been byte-identical since v5 (v6 advanced the stamp without + // touching the bytes), so every version from 5 up is read below. A future bump that DOES + // change the framing must exclude itself there — this is what forces that decision + // instead of letting a v7 blob be silently misread by the v5 reader. + static_assert(ORCA_CAD_RECIPE_VERSION <= 6, + "recipe version bumped: confirm the new version still uses the v5 framing"); + if (v >= 5) { + // Framed path: every feature is a length-prefixed self-contained cereal stream, so + // the same four lines handle BOTH directions of mismatch. Older file, newer build: + // the sub-stream ends early, fa(f) throws, and the fields already assigned are kept + // (cereal assigns sequentially, so a mid-list throw leaves the earlier fields set) + // while the rest default. Newer file, older build: the sub-stream has MORE bytes + // than this build knows how to read; it reads what it knows and simply stops, and + // the outer stream is unaffected because the length prefix was consumed in full. + features.clear(); + uint32_t count; + ar(count); + for (uint32_t i = 0; i < count; ++i) { + uint32_t len; + ar(len); + std::string buf(len, '\0'); + if (len > 0) + ar(cereal::binary_data(&buf[0], len)); // consume EXACTLY len bytes from the outer stream + CadFeature f; + try { + std::istringstream fs(buf); + cereal::BinaryInputArchive fa(fs); + fa(f); + } catch (...) { + // An OLDER file: the blob ran out before this build's field list did. Everything read + // so far is kept and the remaining fields stay at their defaults. Deliberately NOT an + // error — a field a project predates is not a corrupt project. + } + features.push_back(f); + } + variables.clear(); + uint32_t vlen; + ar(vlen); + std::string vbuf(vlen, '\0'); + if (vlen > 0) + ar(cereal::binary_data(&vbuf[0], vlen)); + try { + std::istringstream vs(vbuf); + cereal::BinaryInputArchive va(vs); + va(variables); + } catch (...) { + // Variables blob predates this build: keep what was read, default the rest. + } + // Body names, if this project carries them. A project written before the block + // simply ends here, so the read throws and there are no names — not an error. + std::map named; + try { + uint32_t blen; + ar(blen); + std::string bbuf(blen, '\0'); + if (blen > 0) + ar(cereal::binary_data(&bbuf[0], blen)); + std::istringstream bs(bbuf); + cereal::BinaryInputArchive ba(bs); + ba(named); + } catch (...) { + named.clear(); + } + // AFTER the rebuild, never before: recompute() replaces the bodies vector wholesale. + const bool ok = recompute(); + for (const auto& kv : named) + if (kv.first < bodies.size()) { + bodies[kv.first].has_user_name = true; + bodies[kv.first].user_name = kv.second; + } + return ok; + } + if (v == 4) { + // Pre-framing flat path, unchanged: v4 projects keep opening exactly as before. + ar(features); + ar(variables); + return recompute(); + } + // v < 4: the field lists for v2/v3 no longer exist in this code, so those files + // cannot be recovered here. This fix is for the future, not the past. + error = "saved with an older version of the Design tab (format v" + + std::to_string(v) + "); this project cannot be opened by this build"; + return false; + } catch (const Standard_Failure& e) { + const char* what = e.GetMessageString(); + error = std::string("CAD data could not be read") + + (what && *what ? ": " + std::string(what) : ""); + return false; + } catch (const std::exception& e) { + error = std::string("CAD data could not be read: ") + e.what(); + return false; + } catch (...) { + error = "CAD data could not be read"; + return false; + } +} + +bool CadDocument::export_step(const std::string& path, + const std::vector& body_xforms, + std::string& err) const +{ + err.clear(); + if (bodies.empty()) { err = "nothing to export"; return false; } + try { + // Compound every body at its displayed (Move-gizmo) position so the STEP matches + // what Commit ships. Move transforms are rigid, so gp_Trsf::SetValues is valid. + BRep_Builder bld; + TopoDS_Compound comp; + bld.MakeCompound(comp); + for (size_t i = 0; i < bodies.size(); ++i) { + if (bodies[i].shape.IsNull()) continue; + TopoDS_Shape s = bodies[i].shape; + if (i < body_xforms.size() && !body_xforms[i].isApprox(Transform3d::Identity())) { + const Transform3d& m = body_xforms[i]; + gp_Trsf t; + t.SetValues(m(0,0), m(0,1), m(0,2), m(0,3), + m(1,0), m(1,1), m(1,2), m(1,3), + m(2,0), m(2,1), m(2,2), m(2,3)); + s = BRepBuilderAPI_Transform(s, t, true).Shape(); + } + bld.Add(comp, s); + } + STEPControl_Writer writer; + if (writer.Transfer(comp, STEPControl_AsIs) != IFSelect_RetDone) { + err = "STEP transfer failed"; + return false; + } + if (writer.Write(path.c_str()) != IFSelect_RetDone) { + err = "cannot write STEP file"; + return false; + } + } catch (const Standard_Failure& e) { + err = e.GetMessageString() ? e.GetMessageString() : "OCCT failed to write STEP"; + return false; + } catch (const std::exception& e) { + err = e.what(); + return false; + } + return true; +} + +GeometryEngine::MassProps CadDocument::body_mass_properties(int body_index) const +{ + if (body_index < 0 || body_index >= int(bodies.size())) return {}; + return GeometryEngine::mass_properties(bodies[body_index].shape); +} + +int CadDocument::add_surface_extrude(int sketch_ref, double distance, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::SurfaceExtrude; + f.name = name; + f.sketch_ref = sketch_ref; + f.distance = distance; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_surface_revolve(int sketch_ref, double angle_deg, int axis, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::SurfaceRevolve; + f.name = name; + f.sketch_ref = sketch_ref; + f.revolve_angle = angle_deg; + f.revolve_axis = axis; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_surface_loft(const std::vector& profile_refs, bool ruled, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::SurfaceLoft; + f.name = name; + f.loft_profile_refs = profile_refs; + f.loft_ruled = ruled; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +int CadDocument::add_surface_fill(int sketch_ref, const std::string& name) +{ + CadFeature f; + f.type = CadFeatureType::SurfaceFill; + f.name = name; + f.sketch_ref = sketch_ref; + f.mode = BooleanMode::New; + features.push_back(f); + return int(features.size()) - 1; +} + +std::vector CadDocument::check_interference(double min_volume) const +{ + std::vector out; + const int n = int(bodies.size()); + + for (int i = 0; i < n; ++i) { + if (bodies[i].shape.IsNull() || is_sheet_shape(bodies[i].shape)) continue; + for (int j = i + 1; j < n; ++j) { + if (bodies[j].shape.IsNull() || is_sheet_shape(bodies[j].shape)) continue; + + double v = 0; + // A boolean that blows up on one pair must not lose the report for the others, + // and OCCT signals those as Standard_Failure, which is NOT a std::exception. + try { + BRepAlgoAPI_Common common(bodies[i].shape, bodies[j].shape); + common.Build(); + if (!common.IsDone()) continue; + const TopoDS_Shape s = common.Shape(); + if (s.IsNull()) continue; + GProp_GProps props; + BRepGProp::VolumeProperties(s, props); + v = std::abs(props.Mass()); + } catch (const Standard_Failure&) { + continue; + } + + // Bodies that merely touch share a face and enclose no volume, so the + // threshold is what separates contact from interference. + if (v > min_volume) out.push_back({i, j, v}); + } + } + return out; +} + +// ponytail: derived from the OCCT shape type; no stored flag, bodies aren't serialized anyway. +bool CadDocument::is_sheet_shape(const TopoDS_Shape& s) +{ + return !TopExp_Explorer(s, TopAbs_SOLID).More(); +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/CadDocument.hpp b/src/libslic3r/CAD/CadDocument.hpp new file mode 100644 index 0000000000..f62536384a --- /dev/null +++ b/src/libslic3r/CAD/CadDocument.hpp @@ -0,0 +1,776 @@ +#ifndef slic3r_CadDocument_hpp_ +#define slic3r_CadDocument_hpp_ + +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" // FaceGroup +#include "libslic3r/Color.hpp" // ColorRGBA (per-body display colour override) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +enum class CadFeatureType { Sketch, Extrude, Fillet, Chamfer, Hole, Thread, Shell, Revolve, Sweep, Pattern, Plane, Loft, Draft, Import, Boolean, Cut, Mirror, Axis, CoordSys, Helix, Transform, Thicken, Project, DeleteFace, Rib, SurfaceExtrude, SurfaceRevolve, ThickenSurface, SurfaceOffset, SurfaceLoft, SurfaceFill, Mate }; +enum class SketchShape { Rectangle, Circle }; +enum class PlaneType { Offset, Angle, Midplane, Tangent, TwoEdges, Coincident }; +enum class AxisType { TwoPoints, FaceNormal, CylinderCenterline, PlaneIntersection, AlongEdge }; +enum class CoordSysType { PointWorld, FaceAndDirection }; +enum class BooleanMode { New, Add, Cut, Intersect }; + +enum class ExtrudeEnd { Blind, Symmetric, TwoSided, ThroughAll, UpToFace, UpToVertex }; + +// Serialize a TopoDS_Shape to/from a BRep string (declared before CadFeature so its +// inline cereal save()/load() can resolve these non-dependent calls). +std::string brep_to_string(const TopoDS_Shape& s); +TopoDS_Shape brep_from_string(const std::string& d); + +struct CadFeature { + CadFeatureType type{CadFeatureType::Sketch}; + std::string name; + bool enabled{true}; + + // Sketch params (centered on the plane origin) + SketchShape shape{SketchShape::Rectangle}; + SketchPlane plane{SketchPlane::XY()}; + double width{20}; + double height{20}; + double radius{10}; + + // Real 2D sketch geometry (Onshape-style). When non-empty this takes + // precedence over the shape/width/height/radius enum path in build_sketch_wire. + SketchProfile profile; + + // Onshape-style multi-entity sketch geometry. When non-empty this takes + // precedence over both `profile` and the shape-enum path in build_sketch_wire. + std::vector entities; + + // 2D geometric constraints on `profile` (point indices). Solved in place. + std::vector constraints; + + // Onshape-style constraints on `entities` (Fase 4.2). Solved in place against + // entity endpoints. Used when `entities` is non-empty (the legacy `constraints` + // vector applies only to the `profile` path). + std::vector entity_constraints; + + // Imported rigid 2D art (Text glyphs / SVG vector paths) as filled regions. + // Each region: contour[0] = outer loop, contour[1..] = holes; points in + // plane (u,v) millimetres. Rendered as a sketch overlay and extruded via a + // faces-with-holes path (SketchEngine::make_extrude_regions) — deliberately + // NOT solver entities, so imported art contributes zero DoF and never + // pollutes the constraint solver / DoF readout. When non-empty it takes + // precedence over the entities/profile/shape paths in the Extrude case. + std::vector>> imported_regions; + + // Imported rigid 3D B-rep solid (STEP). When the feature type is Import this carries + // the OCCT shape verbatim — it is adopted as a base body in route_feature (no parametric + // recipe). Downstream face/edge features (fillet/chamfer/cut/shell/...) act on it like any + // other body. TopoDS_Shape is a cheap handle, so copying it through recompute/checkpoint + // snapshots is cheap. In-session only for now (no BRep serialization yet). + TopoDS_Shape imported_solid; + + // Non-destructive placement transform for imported_regions (Text/SVG), + // applied at display + extrude time as + // p -> (p.x*import_scale_x + import_offset.x, p.y*import_scale_y + import_offset.y). + // Lets the art be moved / enlarged / stretched (independent X/Y) repeatedly + // without re-vectorising. Identity = no change. + Vec2d import_offset{0, 0}; + double import_scale_x{1.0}; + double import_scale_y{1.0}; + // Text/SVG dropped ONTO a solid face (centred on it): the extrude then defaults to an + // inward Cut (engraving) targeting `import_face_body`. False = free art on a plane. + bool import_on_face{false}; + int import_face_body{-1}; + + // Extrude params + int sketch_ref{-1}; // index into features[] of the consumed sketch + double distance{10}; + bool symmetric{false}; + BooleanMode mode{BooleanMode::New}; + ExtrudeEnd extrude_end{ExtrudeEnd::Blind}; + double distance2{0}; // second-side depth for TwoSided + double taper_deg{0}; // draft angle (C4-part2) + bool flip{false}; // reverse the extrude direction (negate plane normal) + int up_to_face{-1}; // target solid-face id for UpToFace (C4-part2) + int extrude_src_face{-1}; // global face id on the current body to extrude as a profile; -1 = use sketch wire + Vec3d up_to_point{0,0,0}; // target for UpToVertex (C4-part2) + // Multi-body target: which body (index into CadDocument::bodies) this feature acts on. + // -1 = auto (last body). A New extrude appends a fresh body; Add/Cut/Intersect, dress-up, + // hole and face-extrude(non-New) mutate bodies[target]; face-extrude reads its source + // face from bodies[target] too. The source-face owner for face-extrude lives here. + int target_body{-1}; + + // Dress-up params (Fillet/Chamfer) — applied to the current body in order + double dressup_size{1.0}; // fillet radius or chamfer distance + FaceGroup face_group{FaceGroup::All}; + int dressup_edge{-1}; // global edge id for edge-targeted fillet/chamfer; -1 = use face_group + + // Hole params (positioned circular cut into the current body) + double hole_diameter{5}; + double hole_depth{10}; + bool hole_through{true}; // true = symmetric through-cut, ignores hole_depth + double hole_x{0}; // position on the plane (plane u/x axis) + double hole_y{0}; // position on the plane (plane v/y axis) + + // Hole standards library (extends the plain bore above). + // hole_style: 0 = simple, 1 = counterbore, 2 = countersink. + int hole_style{0}; + double hole_cbore_diameter{0}; // counterbore cylinder diameter (mm), style==1 + double hole_cbore_depth{0}; // counterbore depth from the entry face (mm), style==1 + double hole_csink_diameter{0}; // countersink major diameter at entry face (mm), style==2 + double hole_csink_angle{90}; // countersink included angle (degrees), style==2 + std::string hole_standard; // provenance only, e.g. "M6" / "1/4-20"; not used by geometry + + // Thread params (helical thread about the plane normal at a positioned point) + double thread_radius{5}; // nominal cylinder radius + double thread_pitch{2}; // axial advance per turn + double thread_height{10}; // total axial length + double thread_depth{1}; // radial crest depth of the thread profile + bool thread_internal{false}; // false = external threaded rod (New body); + // true = tapped bore cut into the current body + double thread_x{0}; // axis position on the plane (u/x axis) + double thread_y{0}; // axis position on the plane (v/y axis) + + // Shell params (hollow the current body to a wall thickness, removing one open face) + double shell_thickness{2}; // wall thickness (inward offset) + int shell_face{-1}; // global face id to remove (open the shell); -1 = none + + // Draft params (taper a single solid face about a neutral plane = body bbox bottom, pull +Z) + int draft_face{-1}; // global face id to draft; -1 = none + double draft_angle{5}; // draft angle in degrees (signed: + leans the face inward) + + // Revolve params (sweep a profile about an in-plane axis through the plane origin). + // Reuses sketch_ref / entities (profile), flip (direction), mode (boolean) and + // target_body. revolve_axis: 0 = plane X axis, 1 = plane Y axis. + double revolve_angle{360}; // sweep angle in degrees (1..360) + int revolve_axis{0}; // 0 = plane X, 1 = plane Y + + // Sweep: profile carried by sketch_ref / entities (like Extrude); the spine is a + // second Sketch referenced by sweep_path_ref (an open or closed wire). Reuses + // mode (boolean) and target_body. + int sweep_path_ref{-1}; // index into features[] of the path Sketch + + // Loft: build a solid through 2+ closed profile Sketches (loft_profile_refs, in + // order, each on its own plane). loft_ruled=false → smooth sections, true → ruled. + // Reuses mode (boolean) and target_body. + std::vector loft_profile_refs; // ordered indices into features[] of profile Sketches + bool loft_ruled{false}; + + // Pattern: replicate the target body, copies fused into it. pattern_circular=false + // → linear (pattern_count instances spaced pattern_spacing along plane axis + // pattern_dir: 0=X, 1=Y); true → circular (pattern_count instances over + // pattern_angle° total about the plane normal through the plane origin, so a seed + // offset from the origin orbits the axis). Reuses target_body + plane. + bool pattern_circular{false}; + int pattern_count{3}; // total instances incl. the seed (>=1) + double pattern_spacing{20}; // linear step (mm) + int pattern_dir{0}; // linear direction: 0 = plane X, 1 = plane Y + double pattern_angle{360}; // circular total angle (degrees) + + // Pattern along a curve: when pattern_curve_sketch >= 0 this mode takes precedence over + // linear/circular. Copies are placed at equal-parameter points along entity + // pattern_curve_entity of sketch pattern_curve_sketch, translated by (P_i - P_0). + int pattern_curve_sketch{-1}; // feature index of the Sketch holding the guide curve + int pattern_curve_entity{-1}; // entity index of the guide curve within that sketch + + // Parametric bindings: field-member-name -> expression string. On recompute() each entry + // is evaluated against the document variables and written into the named numeric field + // BEFORE geometry runs. Empty (the common case) means the feature uses its literal fields. + std::map expr; + + // Datum/reference plane: a derived SketchPlane the document offers as a selectable + // sketch plane (no solid). plane_base selects the reference (0=XY,1=XZ,2=YZ, or 3+N + // = the Nth earlier datum plane); plane_offset shifts along the base normal; + // plane_angle tilts plane_angle° about the base axis plane_axis (0=base X, 1=base Y). + int plane_base{0}; + double plane_offset{20}; + double plane_angle_tilt{0}; // degrees (named *_tilt to avoid clash w/ revolve) + int plane_axis{0}; // tilt axis: 0 = base X, 1 = base Y + PlaneType plane_type{PlaneType::Offset}; + int plane_face_body{-1}; + int plane_face{-1}; + int plane_face2_body{-1}; + int plane_face2{-1}; + int plane_edge_body{-1}; + int plane_edge{-1}; + int plane_edge2_body{-1}; + int plane_edge2{-1}; + double plane_u_size{60}; + double plane_v_size{60}; + + // Boolean: combine two EXISTING bodies. `mode` reuses BooleanMode (Add = union, + // Cut = subtract tool from target, Intersect = keep overlap; New unused). `target_body` + // is the body that survives (result written back to it); `bool_tool_body` is the other + // operand, consumed (erased) unless `bool_keep_tool`. `bool_tolerance` = OCCT fuzzy value + // (0 = exact). Per-face merge: when both bool_target_face/bool_tool_face are set, the tool + // is first snapped so those two faces are coincident (gap closed within bool_tolerance), + // then the boolean welds them and coplanar faces are unified into one clean face. + int bool_tool_body{-1}; + bool bool_keep_tool{false}; + double bool_tolerance{0.0}; + int bool_target_face{-1}; // global face id on the target body to mate (-1 = none) + int bool_tool_face{-1}; // global face id on the tool body to mate (-1 = none) + + // Cut: split one target body with a plane, keeping the upper half, lower half, or both. + // Reuses `plane` for the cut plane and `target_body` for which body is cut. + double cut_offset{0.0}; // offset along the cut-plane normal (mm) + bool cut_flip{false}; // flip the normal => swaps which side is "upper" + bool cut_keep_upper{true}; // keep the +normal half + bool cut_keep_lower{false}; // keep the -normal half (both => split into two bodies) + + // Mirror: reflect a body about a plane. Reuses `plane` (mirror plane, as Cut does), + // `target_body` (body to mirror), and `mode` (New = separate mirrored copy, + // Add = fuse the mirror back into the source). mirror_keep_original decides whether + // the source body survives when mode is New. + bool mirror_keep_original{true}; + + // Datum axis: reference line (no solid). Construction params stored; resolve_datum_axes() + // computes the world-space origin + unit direction on demand. + AxisType axis_type{AxisType::TwoPoints}; + Vec3d axis_p1{0, 0, 0}; + Vec3d axis_p2{0, 0, 10}; + int axis_body{-1}; + int axis_face{-1}; + int axis_edge{-1}; + int axis_plane_a{-1}; + int axis_plane_b{-1}; + + // Datum coordinate system (no solid). Stored as point + two orthonormal axes. + CoordSysType coordsys_type{CoordSysType::PointWorld}; + Vec3d coordsys_point{0, 0, 0}; + int coordsys_body{-1}; + int coordsys_face{-1}; + int coordsys_edge{-1}; + Vec3d coordsys_x_hint{1, 0, 0}; + + // Fingerprint of the face this connector was bound to, for drift detection. -1 = not yet + // recorded (an old recipe, or a connector that has never resolved). + // + // Surface TYPE and EDGE COUNT specifically, because they survive every legitimate edit: + // Transform moves the body, Draft tilts the face, a dimension change resizes it, and none + // of those change either value. Centroid, area and normal all fail that test — see the + // issue. The cost is that a slide from one planar 4-edge face to another planar 4-edge face + // is invisible; a detector that never cries wolf is worth more here than a total one. + int coordsys_face_kind{-1}; // GeomAbs_SurfaceType as int + int coordsys_face_edges{-1}; // number of edges bounding the face + + // Helix curve params (consumed as a sweep path to build springs/coils/augers). + // Axis = plane normal through plane origin. pitch = axial rise per full turn. + // left_handed flips the winding direction. taper_deg != 0 gives a conical helix. + double helix_radius{10}; + double helix_pitch{5}; + double helix_height{20}; + bool helix_left_handed{false}; + double helix_taper_deg{0}; + + // Transform feature: rigid move/rotate of an existing body. Rotation is applied + // first (about xf_axis through xf_pivot), then the translation. + Vec3d xf_translate{0, 0, 0}; + Vec3d xf_axis{0, 0, 1}; + Vec3d xf_pivot{0, 0, 0}; + double xf_angle_deg{0}; + bool xf_copy{false}; // true: keep the original, append the moved copy as a new body + + // Thicken feature: offset one face of an existing body into a new thin solid body. + // The face belongs to `target_body`; the offset runs along the face normal. + int thicken_face{-1}; // global face id on the target body; -1 = invalid + double thicken_thickness{2}; // wall thickness (always used as |value|) + bool thicken_flip{false}; // true: offset against the face normal + + // Cut-by-face: when cut_face >= 0, apply_cut derives the cut plane from this face + // (via SketchPlane::from_face) instead of the base `plane`. cut_offset / cut_flip + // still apply along the derived normal. + int cut_face_body{-1}; // body owning the face; -1 = the target body + int cut_face{-1}; // global face id to cut along; -1 = use `plane` + + // Project feature: convert edges of an existing solid into sketch entities on `plane`. + int project_source_body{-1}; // body owning the edges; -1 = last body + std::vector project_edges; // global edge ids to project; empty => use project_face + int project_face{-1}; // if project_edges empty, project every edge of this face + + // Direct edit: faces to remove (global face indices into target_body's shape), + // healed via BRepAlgoAPI_Defeaturing. + std::vector delete_faces; + + // Rib: a thin wall grown from an open sketch line, fused to the body. + int rib_sketch_ref{-1}; // feature index of the Sketch holding the profile + int rib_entity{-1}; // index of the open Line entity within that sketch + double rib_thickness{2}; // wall thickness (mm), centred on the line + double rib_depth{10}; // extrude distance along the sketch-plane normal (mm) + + // --- Mate (assembly) --- + // 0 Fastened — all 6 DOF fixed: B's frame is driven onto A's exactly. + // 1 Planar — z axes aligned, normal distance set to mate_offset; in-plane position free. + // 2 Revolute — axes collinear, position on the axis fixed; rotation about z free. + // 3 Slider — orientation fully fixed, perpendicular position fixed; axial slide free. + // 4 Cylindrical— axes collinear, perpendicular fixed; both spin and axial slide free. + // A "free" DOF is preserved from the body's current placement, not zeroed. + int mate_kind{0}; + int mate_cs_a{-1}; // feature index of the FIXED CoordSys (mate connector A) + int mate_cs_b{-1}; // feature index of the CoordSys on the body that MOVES + double mate_offset{0}; // translation along A's z, mm + double mate_angle{0}; // rotation about A's z, degrees + bool mate_flip{false}; // oppose the two z axes (face-to-face) + + template + void save(Archive& ar) const { + std::string brep = (type == CadFeatureType::Import) ? brep_to_string(imported_solid) : std::string(); + ar(type, name, enabled, shape, plane, width, height, radius, + profile, entities, constraints, entity_constraints, imported_regions, + import_offset, import_scale_x, import_scale_y, import_on_face, import_face_body, + sketch_ref, distance, symmetric, mode, extrude_end, distance2, taper_deg, flip, + up_to_face, extrude_src_face, up_to_point, target_body, + dressup_size, face_group, dressup_edge, + hole_diameter, hole_depth, hole_through, hole_x, hole_y, + thread_radius, thread_pitch, thread_height, thread_depth, thread_internal, thread_x, thread_y, + shell_thickness, shell_face, + draft_face, draft_angle, + revolve_angle, revolve_axis, + sweep_path_ref, loft_profile_refs, loft_ruled, + pattern_circular, pattern_count, pattern_spacing, pattern_dir, pattern_angle, + plane_base, plane_offset, plane_angle_tilt, plane_axis, + bool_tool_body, bool_keep_tool, bool_tolerance, bool_target_face, bool_tool_face, + cut_offset, cut_flip, cut_keep_upper, cut_keep_lower, + brep, + plane_type, plane_face_body, plane_face, plane_face2_body, plane_face2, + plane_edge_body, plane_edge, plane_edge2_body, plane_edge2, plane_u_size, plane_v_size, + mirror_keep_original, + axis_type, axis_p1, axis_p2, axis_body, axis_face, axis_edge, axis_plane_a, axis_plane_b, + coordsys_type, coordsys_point, coordsys_body, coordsys_face, coordsys_edge, coordsys_x_hint, + helix_radius, helix_pitch, helix_height, helix_left_handed, helix_taper_deg, + xf_translate, xf_axis, xf_pivot, xf_angle_deg, xf_copy, + thicken_face, thicken_thickness, thicken_flip, + cut_face_body, cut_face, + project_source_body, project_edges, project_face, + delete_faces, + hole_style, hole_cbore_diameter, hole_cbore_depth, + hole_csink_diameter, hole_csink_angle, hole_standard, + rib_sketch_ref, rib_entity, rib_thickness, rib_depth, + pattern_curve_sketch, pattern_curve_entity, + expr, + mate_kind, mate_cs_a, mate_cs_b, mate_offset, mate_angle, mate_flip, + coordsys_face_kind, coordsys_face_edges); + } + template + void load(Archive& ar) { + std::string brep; + ar(type, name, enabled, shape, plane, width, height, radius, + profile, entities, constraints, entity_constraints, imported_regions, + import_offset, import_scale_x, import_scale_y, import_on_face, import_face_body, + sketch_ref, distance, symmetric, mode, extrude_end, distance2, taper_deg, flip, + up_to_face, extrude_src_face, up_to_point, target_body, + dressup_size, face_group, dressup_edge, + hole_diameter, hole_depth, hole_through, hole_x, hole_y, + thread_radius, thread_pitch, thread_height, thread_depth, thread_internal, thread_x, thread_y, + shell_thickness, shell_face, + draft_face, draft_angle, + revolve_angle, revolve_axis, + sweep_path_ref, loft_profile_refs, loft_ruled, + pattern_circular, pattern_count, pattern_spacing, pattern_dir, pattern_angle, + plane_base, plane_offset, plane_angle_tilt, plane_axis, + bool_tool_body, bool_keep_tool, bool_tolerance, bool_target_face, bool_tool_face, + cut_offset, cut_flip, cut_keep_upper, cut_keep_lower, + brep, + plane_type, plane_face_body, plane_face, plane_face2_body, plane_face2, + plane_edge_body, plane_edge, plane_edge2_body, plane_edge2, plane_u_size, plane_v_size, + mirror_keep_original, + axis_type, axis_p1, axis_p2, axis_body, axis_face, axis_edge, axis_plane_a, axis_plane_b, + coordsys_type, coordsys_point, coordsys_body, coordsys_face, coordsys_edge, coordsys_x_hint, + helix_radius, helix_pitch, helix_height, helix_left_handed, helix_taper_deg, + xf_translate, xf_axis, xf_pivot, xf_angle_deg, xf_copy, + thicken_face, thicken_thickness, thicken_flip, + cut_face_body, cut_face, + project_source_body, project_edges, project_face, + delete_faces, + hole_style, hole_cbore_diameter, hole_cbore_depth, + hole_csink_diameter, hole_csink_angle, hole_standard, + rib_sketch_ref, rib_entity, rib_thickness, rib_depth, + pattern_curve_sketch, pattern_curve_entity, + expr, + mate_kind, mate_cs_a, mate_cs_b, mate_offset, mate_angle, mate_flip, + coordsys_face_kind, coordsys_face_edges); + imported_solid = brep_from_string(brep); + } +}; + +// Serialize a TopoDS_Shape to/from a BRep string for cereal persistence. +std::string brep_to_string(const TopoDS_Shape& s); +TopoDS_Shape brep_from_string(const std::string& d); + +// One independent solid in a multi-body document. +struct CadBody { + TopoDS_Shape shape; + std::string name; + // The name the USER gave this body. A body is NOT its first feature: an Extrude, a Cut and + // a Fillet all land on the same body, so renaming `source_feature` renames one operation in + // the history, not the object — which is exactly the bug this field exists to end. `name` + // above is the DERIVED label (the maker's name, restamped every recompute) and stays that; + // this one is set only by a rename, carried across recompute() by body index, and written + // into the recipe so it survives save/load. + bool has_user_name{false}; + std::string user_name; + // Per-body display colour override (Color tool). When has_color is false the GUI + // falls back to the auto body-index palette. Carried across recompute() by body index. + bool has_color{false}; + ColorRGBA color; + // Index into `features` of the feature that CREATED this body, or -1. A body is a + // recomputed result, so without this there is no way back to its maker and "delete this + // body" cannot be expressed at all — the GUI could only answer "select the FEATURE that + // created this body". Stamped in one place, the recompute loop; see the note there for + // why a single "still unset?" test is sufficient and stays correct for new feature types. + int source_feature{-1}; +}; + +// OCCT-only feature tree backing the Design tab. No GUI dependencies (lives in libslic3r). +class CadDocument { +public: + std::vector features; + // Named document variables: name -> expression. Evaluated topologically each recompute(); + // an expression may reference other variables. Feature `expr` bindings resolve against these. + std::map variables; + // Multi-body result of the last replay. A "New" extrude appends a body; other ops + // mutate a target body. Empty after a failed/empty recompute. + std::vector bodies; + TopoDS_Shape body; // compound of all bodies (1 body => that body) — display/compat + TriangleMesh display_mesh; // tessellation of all bodies, concatenated (picking) + std::vector display_body_meshes; // one mesh per body, in `bodies` order (per-body color) + std::vector display_tri_face; // per-triangle face id WITHIN its source body + std::vector display_tri_body; // per-triangle source body index (into bodies) + std::string error; // last recompute error ("" = ok) + + // Mate diagnostics, refilled by every recompute(). Non-fatal by design: the + // document still evaluates — this only names what the user should look at. + // .first = index of the offending Mate feature, .second = human-readable reason. + // NOT "over-constraint" — this kernel has no solver, so there is no DOF analysis + // behind these; they are graph facts about which mate drives which body. + std::vector> mate_conflicts; + + // Modeling origin: the world point the default XY/XZ/YZ planes pass through. The GUI sets this + // to the bed centre so sketches/datums land in the middle of the bed (not the bed corner = + // world 0). Not serialized — the GUI re-applies it from the live bed on every tab show. + Vec3d modeling_origin{Vec3d::Zero()}; + + // Tessellation quality, matched to Orca's OWN STEP importer (Format/STEP.hpp defaults: + // linear 0.003, angular 0.5 rad) so a body modelled here reaches the screen at the same + // density as the identical body imported through Prepare. It was 0.01 linear — 3.3x coarser + // than anything else in the app, which is why curved faces read as faceted next to an + // imported part. Angular already matched. Same BRepMesh_IncrementalMesh call, same GLVolume + // path, same shaders: the renderer was never the difference, the mesh fed to it was. + double linear_deflection{0.003}; + double angular_deflection{0.5}; + + int add_sketch(SketchShape shape, const SketchPlane& plane, + double width, double height, double radius, + const std::string& name); + int add_sketch_profile(const SketchProfile& profile, const SketchPlane& plane, + const std::string& name); + // Onshape-style multi-entity sketch: stores the entity list verbatim. When + // non-empty it takes precedence over profile/enum in build_sketch_wire. + int add_sketch_entities(const std::vector& entities, + const SketchPlane& plane, const std::string& name, + const std::vector& constraints = {}); + // Project edges of source_body onto plane, producing a sketch feature whose + // entities are (re)derived on every recompute. + int add_project_edges(int source_body, const std::vector& edge_ids, int face, + const SketchPlane& plane, const std::string& name); + // Onshape's "Use" / SolidWorks' "Convert Entities": project a body's edges onto the plane of + // an EXISTING sketch feature and append them to that sketch as CONSTRUCTION entities, so new + // geometry can be constrained to them. Returns the number of entities appended, or -1 if the + // sketch or body reference is invalid. Unlike add_project_edges this creates no feature: the + // references become part of the sketch that borrows them. + int project_edges_into_sketch(int sketch_feature, int source_body, + const std::vector& edge_ids, int face); + // Append a bridging BSpline entity connecting endpoint `end_a` of entity `ent_a` to + // endpoint `end_b` of entity `ent_b`, both within sketch feature `sketch_ref`. Returns + // the new entity's index within that sketch's entities vector. Non-parametric: computed + // once from the current endpoints (does not auto-follow later solver moves). + int add_bridge(int sketch_ref, int ent_a, int end_a, int ent_b, int end_b, + const std::string& name); + // Solve features[index]'s sketch constraints, writing solved coordinates back + // into its profile.points. No-op (returns true) if the feature has no + // constraints. Returns false if index is invalid / not a Sketch / solve fails. + bool solve_sketch_feature(int index); + int add_extrude(int sketch_ref, double distance, bool symmetric, + BooleanMode mode, const std::string& name); + // Extrude a single loop given directly as entities (sketch_ref = -1, plane carried). + int add_extrude_entities(const std::vector& entities, + const SketchPlane& plane, double distance, bool symmetric, + BooleanMode mode, const std::string& name); + // Extrude an existing solid FACE (global face id on the body) as the profile. + int add_extrude_face(int src_face, double distance, bool symmetric, + BooleanMode mode, const std::string& name); + int add_fillet(double radius, FaceGroup faces, const std::string& name); + int add_fillet(double radius, int edge_id, const std::string& name); + int add_chamfer(double distance, FaceGroup faces, const std::string& name); + int add_chamfer(double distance, int edge_id, const std::string& name); + int add_hole(double diameter, double depth, bool through, + double x, double y, const SketchPlane& plane, + const std::string& name); + int add_hole_styled(double diameter, double depth, bool through, + double x, double y, const SketchPlane& plane, int style, + double cbore_diameter, double cbore_depth, + double csink_diameter, double csink_angle, + const std::string& standard, const std::string& name); + int add_hole_standard(const std::string& designation, int style, bool through, + double depth, double x, double y, + const SketchPlane& plane, const std::string& name); + int add_thread(double radius, double pitch, double height, double depth, + bool internal, double x, double y, const SketchPlane& plane, + const std::string& name); + int add_revolve(int sketch_ref, double angle, int axis, bool flip, + BooleanMode mode, const std::string& name); + // Self-contained revolve of a single loop given directly as entities (sketch_ref=-1). + int add_revolve_entities(const std::vector& entities, + const SketchPlane& plane, double angle, int axis, bool flip, + BooleanMode mode, const std::string& name); + // Sweep the profile Sketch (profile_sketch_ref) along the path Sketch (path_sketch_ref). + int add_pattern(bool circular, int count, double spacing, int dir, + double angle_deg, int target_body, const std::string& name); + // Pattern `count` copies of `target` along entity `curve_entity` of sketch `curve_sketch`. + int add_pattern_on_curve(int count, int curve_sketch, int curve_entity, int target, + const std::string& name); + int add_sweep(int profile_sketch_ref, int path_sketch_ref, BooleanMode mode, + const std::string& name); + // Loft through the ordered profile Sketches (each a closed wire on its own plane). + int add_loft(const std::vector& profile_refs, bool ruled, BooleanMode mode, + const std::string& name); + // Skin 2+ profile sketches open (no end caps) -> a sheet body. + int add_surface_loft(const std::vector& profile_refs, bool ruled, const std::string& name); + // Fill sketch sketch_ref's closed boundary wire with a smooth face -> a one-face sheet body. + int add_surface_fill(int sketch_ref, const std::string& name); + int add_shell(double thickness, int face, int target_body, const std::string& name); + // Grow a thin rib wall (thickness, depth) from the open Line entity `entity` inside sketch + // feature `sketch_ref`, fused to `target_body`. Returns the new feature index. + int add_rib(int sketch_ref, int entity, double thickness, double depth, + int target_body, const std::string& name); + int add_draft(double angle, int face, int target_body, const std::string& name); + // Boolean between two existing bodies. op reuses BooleanMode (Add=union, Cut=subtract, + // Intersect=common; New invalid). target survives, tool is consumed unless keep_tool. + // tolerance = OCCT fuzzy value; target_face/tool_face (-1 = none) drive the per-face snap+merge. + int add_boolean(BooleanMode op, int target_body, int tool_body, bool keep_tool, + double tolerance, int target_face, int tool_face, const std::string& name); + // Plane Cut (Onshape split-by-plane): trim target_body by the plane (origin offset along + // its normal by `offset`, normal flipped iff `flip`). keep_upper/keep_lower select the + // +normal / -normal half; both => the body is split into two coexisting bodies. + int add_cut(const SketchPlane& plane, double offset, bool flip, + bool keep_upper, bool keep_lower, int target_body, const std::string& name); + // Split target_body along the plane of face `face` (owned by face_body, -1 = target). + // keep_upper/keep_lower select which half survives; both => split into two bodies. + int add_split_by_face(int target_body, int face_body, int face, + bool keep_upper, bool keep_lower, const std::string& name); + int add_mirror(const SketchPlane& plane, int target_body, BooleanMode mode, + const std::string& name); + // Rigid body transform: rotate `angle_deg` about `axis` through `pivot`, then translate. + // copy=true keeps the source body and appends the transformed one as a new body. + int add_transform(int target_body, const Vec3d& translate, const Vec3d& axis, + const Vec3d& pivot, double angle_deg, bool copy, const std::string& name); + // Offset face `face` of `target_body` by `thickness` along its normal, producing a new + // thin solid appended as a new body. flip=true offsets against the normal. + int add_thicken(int target_body, int face, double thickness, bool flip, const std::string& name); + // Thicken an entire SHEET body's shell into a solid. + int add_thicken_surface(int target_body, double thickness, bool flip, const std::string& name); + // Offset a SHEET body's shell by a signed distance, producing another SHEET body. + int add_surface_offset(int target_body, double offset, const std::string& name); + int add_delete_face(int target_body, const std::vector& faces, + const std::string& name); + int add_surface_extrude(int sketch_ref, double distance, const std::string& name); + int add_surface_revolve(int sketch_ref, double angle_deg, int axis, const std::string& name); + // Datum plane: derived from base (0=XY/1=XZ/2=YZ/3+N=Nth earlier datum), offset + // along its normal, optional tilt about a base axis. Produces no solid. + int add_plane(int base, double offset, double angle_tilt, int axis, + const std::string& name); + // Datum axis: construction method axis_type determines which ref fields are read. + int add_axis(AxisType axis_type, const std::string& name); + // Datum coordinate system. + int add_coordsys(CoordSysType type, const Vec3d& point, const std::string& name); + int add_mate(int kind, int cs_a, int cs_b, double offset, double angle_deg, bool flip, + const std::string& name); + + // Which mate types apply to a connector pair, as reported to the viewport palette. + struct MateOption { + int kind{0}; // 0..4, the five mate types in CadDocument.hpp:308-314 + bool viable{true}; + std::string reason; // empty when viable; why not, when not + }; + // ALWAYS all five entries, ALWAYS in kind order. Never filtered: the caller dims what is + // not viable rather than hiding it, so the list must be stable in length and order between + // calls. Pure query over existing data — records nothing, mutates nothing. + std::vector mate_options(int cs_a, int cs_b) const; + + int add_helix(const SketchPlane& plane, double radius, double pitch, double height, + bool left_handed, double taper_deg, const std::string& name); + // Build the helix wire from a Helix feature's params (exposed for tests). + TopoDS_Wire build_helix_wire(const CadFeature& f, std::string& err) const; + // Every datum plane currently in the recipe, in feature order, as (name, plane). + // Used by the GUI to populate plane pickers (after the 3 base planes). + std::vector> resolve_datum_planes() const; + + // World-space sketch plane lying on a body's PLANAR face, so a face picked in the viewport can + // be sketched on directly — no datum plane in between and nothing to choose from a list. + // Returns false when the indices don't resolve or the face isn't planar (a cylinder or a fillet + // has no single plane, and guessing one from a mid-parameter normal would silently sketch on a + // tangent). Same derivation the Coincident datum method uses, shared so the two cannot drift. + bool plane_of_face(int body_idx, int face_idx, SketchPlane& out) const; + // Resolved datum axes in feature order. axis_err is non-empty if construction failed. + struct DatumAxis { std::string name; Vec3d origin{0,0,0}; Vec3d direction{0,0,1}; + std::string error; }; + std::vector resolve_datum_axes() const; + // Resolved datum coordinate systems. X/Y unit, orthonormal (Z = X.cross(Y)). + struct DatumCoordSys { std::string name; Vec3d origin{0,0,0}; Vec3d x{1,0,0}; + Vec3d y{0,1,0}; std::string error; }; + std::vector resolve_datum_coordsys() const; + void clear(); + bool recompute(); // replay features -> body + display_mesh; false on error + + // CadRecipe serialization contract: + // - v1 blobs are deliberately not loadable; there is no migration path by design + // - append fields ONLY at the end of save/load, never reorder (golden fixture enforces this) + // Bumped every time the bodies are rebuilt, i.e. every time the face and edge MAPS change. + // Global face/edge ids are indices into TopExp::MapShapes and mean nothing across a rebuild, + // so any caller holding an id from an earlier state is holding a wrong one. This is the + // handle that lets it find out instead of silently addressing the wrong edge. + // + // Session-scoped and deliberately NOT serialized: an id is only meaningful within the run + // that produced it, so persisting the counter would imply a promise across loads that the + // ids themselves cannot keep. + uint64_t topo_generation{1}; + + // v5: every feature is length-framed, so a reader can stop early on an older file and skip + // the tail of a newer one. This is the LAST version that has to break anything — from here a + // new field only needs appending to save/load, with no bump and no orphaned projects. + // v6: no wire-format change — the bytes are v5's, and both are read by the same framed path. + // The stamp advances only to put a project-container change on the record; the 3MF backends + // own that story. v4 still opens through the pre-framing flat path. + static constexpr uint32_t ORCA_CAD_RECIPE_VERSION = 6; + std::string serialize_recipe() const; + bool deserialize_recipe(const std::string& blob); + + // Export every body to a STEP file as native B-rep (not mesh). body_xforms is the + // per-body display transform (Move gizmo); when supplied the bodies are written at + // those positions so the STEP matches what Commit ships. false + err on failure. + bool export_step(const std::string& path, + const std::vector& body_xforms, + std::string& err) const; + + GeometryEngine::MassProps body_mass_properties(int body_index) const; + + // One overlapping pair of solid bodies. Indices are into `bodies`, a_ < b_. + struct Interference { int body_a{-1}; int body_b{-1}; double volume{0}; }; + // Every pair of solid bodies whose intersection encloses more than min_volume (mm^3). + // Reports only — mutates nothing, so mates and placements are unaffected by calling it. + // Sheet bodies are skipped: an intersection involving one encloses no volume. + std::vector check_interference(double min_volume = 1e-6) const; + + // ponytail: derived from the OCCT shape type; no stored flag, bodies aren't serialized anyway. + static bool is_sheet_shape(const TopoDS_Shape& s); // true if TopExp finds no TopAbs_SOLID + + // Undo/redo of the feature recipe (Onshape-style Ctrl+Z). The caller marks a + // user-action boundary by calling checkpoint() BEFORE the mutation(s) for that + // action (add/delete/move/replace, or a direct features edit). undo()/redo() then + // restore the snapshot and recompute(). Because everything else (bodies/meshes/ + // body) is derived by recompute(), snapshotting `features` alone is a complete, + // exact history; one checkpoint == one Ctrl+Z step. + void checkpoint(); // snapshot `features` for undo + invalidate redo + // Drop the most recent checkpoint. For a mutation that took a checkpoint, then failed + // and restored the pre-mutation state itself (the constraint paths reject an + // over-constrained addition this way): the snapshot now describes a state identical to + // the current one, and leaving it turns the next Ctrl+Z into a press that does nothing. + void abandon_checkpoint(); + bool can_undo() const { return !m_undo.empty(); } + bool can_redo() const { return !m_redo.empty(); } + size_t undo_depth() const { return m_undo.size(); } + size_t redo_depth() const { return m_redo.size(); } + bool undo(); // restore the previous feature list + recompute(); false if no history + bool redo(); // re-apply the most recently undone change; false if none + + // Feature-tree editing (Onshape-style). All are transactional: they snapshot + // features, mutate, recompute(), and roll back to the snapshot (re-recomputing) + // if the result is invalid — so a failed edit never leaves a broken body. + // + // remove_feature: erase features[index]; deleting a Sketch cascades to the + // Extrude(s) that consume it; surviving sketch_ref indices are remapped. + // move_feature: shift features[index] by delta (-1 up / +1 down), clamped; + // sketch_ref indices of the two swapped slots are remapped. + // replace_feature: overwrite features[index] with `edited` (its name and, for + // an Extrude, its sketch_ref are preserved from the original). + bool remove_feature(int index); + bool move_feature(int index, int delta); + bool replace_feature(int index, const CadFeature& edited); + // replace_sketch_extrude: a box is two linked features (Sketch + Extrude); + // overwrite both slots from one `edited` candidate (sketch params -> + // features[sketch_idx], extrude params -> features[extrude_idx]), keeping + // each slot's name/type and the sketch_ref link. Transactional like above. + bool replace_sketch_extrude(int sketch_idx, int extrude_idx, const CadFeature& edited); + + // Apply ONE candidate feature on top of the current committed body and + // tessellate the result into out_mesh, WITHOUT modifying features/body/ + // display_mesh. Returns false (with err set) if the candidate is invalid. + // Used by the Design tab to show a translucent ghost before Confirm. + bool preview(const CadFeature& candidate, TriangleMesh& out_mesh, std::string& err) const; + // Same, but also returns the per-body meshes (in `bodies` order; the candidate may append + // one), so the GUI can apply its display-only per-body Move transforms to the ghost and keep + // it overlaid on the moved body instead of floating back at the untransformed origin. + bool preview(const CadFeature& candidate, TriangleMesh& out_mesh, + std::vector& out_body_meshes, std::string& err) const; + +private: + TopoDS_Wire build_sketch_wire(const CadFeature& sketch, bool closed_only = false) const; + // The planar region an Extrude sweeps: the sketch's outer loop with its inner loops as + // holes. Falls back to a face over build_sketch_wire() for the legacy profile/shape paths, + // which have no concept of a second loop. + TopoDS_Face build_sketch_face(const CadFeature& sketch) const; + // Apply a single feature to (result, have_body), throwing std::runtime_error on + // failure. `context` is the body whose faces/edges the feature reads (face-extrude + // source, up-to-face target, dress-up, hole) — it differs from `result` only when the + // feature builds a NEW body from an existing one (face-extrude New). Shared by route. + void apply_feature(TopoDS_Shape& result, bool& have_body, + const TopoDS_Shape& context, const CadFeature& f) const; + // Route one feature into the bodies list: resolve its target body, decide whether it + // starts a new body (empty list, or an Extrude with mode New) vs mutates an existing + // one, then apply_feature. Shared by recompute() (replay all) and preview() (candidate). + void route_feature(std::vector& bodies, const CadFeature& f) const; + // Boolean between two existing bodies: resolve target + tool, optionally snap the tool so + // the picked faces mate, run the OCCT op (with fuzzy tolerance), write the result back to the + // target and erase the consumed tool. Mutates the bodies vector directly (unlike apply_feature, + // which works on a single result shape). Throws std::runtime_error on a failed op. + void apply_boolean(std::vector& bodies, const CadFeature& f) const; + void apply_cut(std::vector& bodies, const CadFeature& f) const; + void apply_mirror(std::vector& bodies, const CadFeature& f) const; + void apply_transform(std::vector& bodies, const CadFeature& f) const; + void apply_thicken(std::vector& bodies, const CadFeature& f) const; + void apply_thicken_surface(std::vector& bodies, const CadFeature& f) const; + void apply_surface_offset(std::vector& bodies, const CadFeature& f) const; + void apply_project(const std::vector& bodies, CadFeature& f) const; + static DatumCoordSys datum_frame(const std::vector& bodies, const CadFeature& f); + void apply_mate(std::vector& bodies, const CadFeature& f) const; + void detect_mate_conflicts(); // refills mate_conflicts from the feature list alone + + // Undo/redo stacks of recipe snapshots. checkpoint() pushes onto m_undo and clears + // m_redo; undo()/redo() shuffle the current state between them. Capped so a long + // session can't grow unbounded. + // + // The snapshot MUST carry `variables` as well as `features`: a caller that sets a bad + // variable, sees recompute() fail and calls undo() to roll it back would otherwise be + // left with the bad variable still in the document, so every later recompute fails — + // the exact corruption the checkpoint/undo pattern exists to prevent. Not serialized, + // so this changes no on-disk format. + struct Snapshot { + std::vector features; + std::map variables; + }; + std::vector m_undo; + std::vector m_redo; + static constexpr size_t k_undo_cap = 200; +}; + +} // namespace Slic3r + +#endif // slic3r_CadDocument_hpp_ diff --git a/src/libslic3r/CAD/GeometryEngine.cpp b/src/libslic3r/CAD/GeometryEngine.cpp new file mode 100644 index 0000000000..ede3924056 --- /dev/null +++ b/src/libslic3r/CAD/GeometryEngine.cpp @@ -0,0 +1,711 @@ +#include "libslic3r/CAD/GeometryEngine.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +// ---- STEP import (B-rep, not mesh) ---- +std::vector GeometryEngine::read_step_solids(const std::string& path, std::string& err) +{ + err.clear(); + std::vector out; + try { + STEPControl_Reader reader; + if (reader.ReadFile(path.c_str()) != IFSelect_RetDone) { + err = "cannot read STEP file"; + return out; + } + reader.TransferRoots(); + const TopoDS_Shape shape = reader.OneShape(); + if (shape.IsNull()) { err = "STEP file has no geometry"; return out; } + // One body per top-level solid; fall back to the whole shape (shells/faces) if none. + for (TopExp_Explorer ex(shape, TopAbs_SOLID); ex.More(); ex.Next()) + out.push_back(ex.Current()); + if (out.empty()) + out.push_back(shape); + } catch (const Standard_Failure& e) { + err = e.GetMessageString() ? e.GetMessageString() : "OCCT failed to read STEP"; + out.clear(); + } + return out; +} + +// ---- Mesh -> B-rep (faceted, shared topology by construction) ---- +// +// Port of mesh2step's brep_build.py. Two properties are load-bearing and easy to lose: +// +// 1. The edge cache is keyed on the UNORDERED vertex-index pair, and a triangle that walks +// the edge backwards (i > j) gets edge.Reversed(). Consistently-wound meshes (STL/OBJ/3MF +// all are) walk every shared edge in opposite directions from its two adjacent triangles, +// so this reversal is exactly what leaves the faces coherently outward-oriented. +// 2. Degeneracy is split in two, deliberately. A triangle is dropped as sub-resolution noise +// only if its longest edge is below `tolerance` (an absolute floor), while sliver rejection +// is scale-INDEPENDENT (area < 1e-9 * longest_edge^2). Folding the two together under one +// `area < tolerance^2` test rejects legitimate thin CAD slivers whenever tolerance is coarse +// relative to them, turning a watertight input into a falsely-open shell — a real regression +// mesh2step hit on a 62k-triangle mechanical part. +TopoDS_Shape GeometryEngine::mesh_to_brep(const indexed_triangle_set& its, + double tolerance, + double merge_angle_deg, + MeshBrepStats& stats) +{ + stats = MeshBrepStats{}; + stats.input_tris = int(its.indices.size()); + if (tolerance <= 0.0) + throw std::runtime_error("mesh_to_brep: tolerance must be > 0"); + if (its.indices.empty()) + throw std::runtime_error("mesh_to_brep: mesh has no triangles"); + + // 1. Tolerance-quantized vertex dedup. A merged vertex keeps the exact coordinates of the + // first input occurrence — vertices are grouped by a cell, never snapped onto its grid. + std::map, int> cell_to_new; + std::vector old_to_new(its.vertices.size(), -1); + std::vector verts; + verts.reserve(its.vertices.size()); + for (size_t i = 0; i < its.vertices.size(); ++i) { + const Vec3d p = its.vertices[i].cast(); + const std::array cell{ (long long) std::llround(p.x() / tolerance), + (long long) std::llround(p.y() / tolerance), + (long long) std::llround(p.z() / tolerance) }; + auto ins = cell_to_new.emplace(cell, int(verts.size())); + if (ins.second) + verts.push_back(p); + old_to_new[i] = ins.first->second; + } + + // 2. Reject degenerate triangles (see the two-part rule in the comment above). + std::vector tris; + tris.reserve(its.indices.size()); + for (const Vec3i32& t : its.indices) { + const int a = old_to_new[t(0)], b = old_to_new[t(1)], c = old_to_new[t(2)]; + if (a == b || b == c || a == c) { ++stats.degenerate_collapsed; continue; } + const Vec3d& pa = verts[a]; const Vec3d& pb = verts[b]; const Vec3d& pc = verts[c]; + const double e0 = (pb - pa).norm(), e1 = (pc - pb).norm(), e2 = (pa - pc).norm(); + const double longest = std::max(e0, std::max(e1, e2)); + if (longest < tolerance) { ++stats.degenerate_collapsed; continue; } + const double area = 0.5 * (pb - pa).cross(pc - pa).norm(); + if (area < 1e-9 * longest * longest) { ++stats.degenerate_sliver; continue; } + tris.emplace_back(a, b, c); + } + stats.kept_tris = int(tris.size()); + if (tris.empty()) + throw std::runtime_error("mesh_to_brep: every triangle was rejected as degenerate " + "(try a smaller tolerance)"); + + // 3. One face per triangle, sharing vertices and edges through the caches. + std::vector vertex_cache(verts.size()); + std::vector vertex_made(verts.size(), false); + auto get_vertex = [&](int i) -> const TopoDS_Vertex& { + if (!vertex_made[i]) { + const Vec3d& p = verts[i]; + vertex_cache[i] = BRepBuilderAPI_MakeVertex(gp_Pnt(p.x(), p.y(), p.z())).Vertex(); + vertex_made[i] = true; + } + return vertex_cache[i]; + }; + + std::map, TopoDS_Edge> edge_cache; + std::map, int> edge_usage; + auto get_edge = [&](int i, int j) -> TopoDS_Edge { + const std::pair key = (i < j) ? std::make_pair(i, j) : std::make_pair(j, i); + ++edge_usage[key]; + auto it = edge_cache.find(key); + if (it == edge_cache.end()) + it = edge_cache.emplace(key, + BRepBuilderAPI_MakeEdge(get_vertex(key.first), get_vertex(key.second)).Edge()).first; + return (i > j) ? TopoDS::Edge(it->second.Reversed()) : it->second; + }; + + BRep_Builder builder; + TopoDS_Shell shell; + builder.MakeShell(shell); + + for (const Vec3i32& t : tris) { + try { + BRepBuilderAPI_MakeWire mk_wire(get_edge(t(0), t(1)), get_edge(t(1), t(2)), get_edge(t(2), t(0))); + if (!mk_wire.IsDone()) { ++stats.faces_failed; continue; } + BRepBuilderAPI_MakeFace mk_face(mk_wire.Wire()); + if (!mk_face.IsDone()) { ++stats.faces_failed; continue; } + builder.Add(shell, mk_face.Face()); + ++stats.faces_built; + } catch (const Standard_Failure&) { + ++stats.faces_failed; + } + } + + // 4. Watertightness falls straight out of the usage counts the cache already gathered. + for (const auto& kv : edge_usage) { + if (kv.second == 1) ++stats.boundary_edges; + else if (kv.second >= 3) ++stats.nonmanifold_edges; + } + stats.unique_edges = int(edge_usage.size()); + stats.watertight = stats.boundary_edges == 0 && stats.nonmanifold_edges == 0 && stats.unique_edges > 0; + + TopoDS_Shape shape = shell; + if (stats.watertight && stats.faces_built > 0) { + BRepBuilderAPI_MakeSolid mk_solid(shell); + if (mk_solid.IsDone()) { + TopoDS_Solid solid = mk_solid.Solid(); + GProp_GProps props; + BRepGProp::VolumeProperties(solid, props); + double vol = props.Mass(); + if (vol < 0.0) { // inward-wound input + solid = TopoDS::Solid(solid.Reversed()); + vol = -vol; + } + if (vol > 0.0) { + shape = solid; + stats.is_solid = true; + stats.volume = vol; + } + } + } + + // 5. Optional coplanar merge. Faceted output is one planar face per triangle — exact, but + // you cannot meaningfully fillet or extrude a face that IS a single triangle. Merging + // coplanar neighbours is what turns the import into something the face/edge tools can + // actually operate on (a 12-triangle cube collapses to its 6 real faces). + if (merge_angle_deg > 0.0) { + try { + ShapeUpgrade_UnifySameDomain unifier(shape, true, true, true); + unifier.SetAngularTolerance(merge_angle_deg * M_PI / 180.0); + unifier.SetLinearTolerance(tolerance); + unifier.Build(); + const TopoDS_Shape merged = unifier.Shape(); + if (!merged.IsNull()) + shape = merged; + } catch (const Standard_Failure&) { + // Merging is an optimisation, not a correctness step: keep the exact faceted shape. + } + } + stats.faces_final = face_count(shape); + return shape; +} + +// ---- Primitive creation ---- + +TopoDS_Solid GeometryEngine::make_primitive(const PrimitiveParams& params) +{ + switch (params.type) { + case PrimitiveType::Box: + return BRepPrimAPI_MakeBox(gp_Pnt(-params.box_w/2, -params.box_d/2, 0), + params.box_w, params.box_d, params.box_h).Solid(); + case PrimitiveType::Cylinder: + return BRepPrimAPI_MakeCylinder(gp_Ax2(gp_Pnt(0,0,0), gp_Dir(0,0,1)), + params.cyl_radius, params.cyl_height).Solid(); + case PrimitiveType::Sphere: + return BRepPrimAPI_MakeSphere(gp_Pnt(0,0,params.sph_radius), params.sph_radius).Solid(); + case PrimitiveType::Cone: + return BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(0,0,0), gp_Dir(0,0,1)), + params.cone_r1, params.cone_r2, params.cone_height).Solid(); + case PrimitiveType::Torus: + return BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(0,0,params.torus_r2), gp_Dir(0,0,1)), + params.torus_r1, params.torus_r2).Solid(); + default: + return BRepPrimAPI_MakeBox(gp_Pnt(-10,-10,0), 20,20,20).Solid(); + } +} + +// ---- Face classification ---- + +FaceGroup GeometryEngine::classify_face(const TopoDS_Face& face, const TopoDS_Shape& /*solid*/) +{ + try { + BRepAdaptor_Surface surf(face); + if (surf.GetType() == GeomAbs_Plane) { + // Sample normal at center UV + double u = (surf.FirstUParameter() + surf.LastUParameter()) / 2.0; + double v = (surf.FirstVParameter() + surf.LastVParameter()) / 2.0; + gp_Pnt pt; gp_Vec du, dv; + surf.D1(u, v, pt, du, dv); + gp_Dir n = du.Crossed(dv); + if (face.Orientation() == TopAbs_REVERSED) n.Reverse(); + + if (n.Z() > 0.7) return FaceGroup::Top; + if (n.Z() < -0.7) return FaceGroup::Bottom; + return FaceGroup::Lateral; + } + } catch (...) {} + return FaceGroup::Lateral; +} + +// ---- Edge collection ---- + +std::vector GeometryEngine::collect_edges(const TopoDS_Shape& solid, FaceGroup target) +{ + std::vector result; + if (target == FaceGroup::All) { + for (TopExp_Explorer exp(solid, TopAbs_EDGE); exp.More(); exp.Next()) + result.push_back(TopoDS::Edge(exp.Current())); + return result; + } + + // Build edge-to-face map once + TopTools_IndexedDataMapOfShapeListOfShape edgeFaceMap; + TopExp::MapShapesAndAncestors(solid, TopAbs_EDGE, TopAbs_FACE, edgeFaceMap); + + for (TopExp_Explorer edgeExp(solid, TopAbs_EDGE); edgeExp.More(); edgeExp.Next()) { + const TopoDS_Edge& edge = TopoDS::Edge(edgeExp.Current()); + if (!edgeFaceMap.Contains(edge)) continue; + const TopTools_ListOfShape& faces = edgeFaceMap.FindFromKey(edge); + + bool include = false; + for (auto it = faces.begin(); it != faces.end(); ++it) { + FaceGroup fg = classify_face(TopoDS::Face(*it), solid); + if (target == FaceGroup::Top && fg == FaceGroup::Top) { include = true; break; } + if (target == FaceGroup::Bottom && fg == FaceGroup::Bottom) { include = true; break; } + if (target == FaceGroup::Lateral && fg == FaceGroup::Lateral) { include = true; break; } + } + + if (!include && target == FaceGroup::Top) { + for (auto it = faces.begin(); it != faces.end(); ++it) { + if (classify_face(TopoDS::Face(*it), solid) == FaceGroup::Top) { include = true; break; } + } + } + if (!include && target == FaceGroup::Bottom) { + for (auto it = faces.begin(); it != faces.end(); ++it) { + if (classify_face(TopoDS::Face(*it), solid) == FaceGroup::Bottom) { include = true; break; } + } + } + if (target == FaceGroup::Lateral && !include) { + int lateralCount = 0; + for (auto it = faces.begin(); it != faces.end(); ++it) { + if (classify_face(TopoDS::Face(*it), solid) == FaceGroup::Lateral) ++lateralCount; + } + if (lateralCount >= 2) include = true; + } + + if (include) result.push_back(edge); + } + + return result; +} + +// ---- Fillet/Chamfer ---- + +TopoDS_Shape GeometryEngine::apply_fillet(const TopoDS_Shape& solid, double radius, FaceGroup faces) +{ + if (radius <= 0.001) return solid; + + std::vector edges = collect_edges(solid, faces); + if (edges.empty()) return solid; + + BRepFilletAPI_MakeFillet fillet(solid); + for (const auto& edge : edges) + fillet.Add(radius, edge); + fillet.Build(); + + // A too-large radius (e.g. >= half the smallest spanned dimension) makes the + // operation degenerate; OCCT leaves IsDone() false. Report it instead of + // silently returning the unfilleted solid (which reads as a false success). + if (!fillet.IsDone()) throw std::runtime_error("fillet radius too large for this geometry"); + return fillet.Shape(); +} + +TopoDS_Shape GeometryEngine::apply_chamfer(const TopoDS_Shape& solid, double distance, FaceGroup faces) +{ + if (distance <= 0.001) return solid; + + std::vector edges = collect_edges(solid, faces); + if (edges.empty()) return solid; + + BRepFilletAPI_MakeChamfer chamfer(solid); + for (const auto& edge : edges) + chamfer.Add(distance, edge); // symmetric chamfer + chamfer.Build(); + + if (!chamfer.IsDone()) throw std::runtime_error("chamfer distance too large for this geometry"); + return chamfer.Shape(); +} + +TopoDS_Shape GeometryEngine::apply_fillet(const TopoDS_Shape& solid, double radius, int edge_id) +{ + if (radius <= 0.001) return solid; + + TopoDS_Edge edge = edge_by_index(solid, edge_id); + if (edge.IsNull()) throw std::runtime_error("apply_fillet: invalid edge id"); + + BRepFilletAPI_MakeFillet mk(solid); + mk.Add(radius, edge); + mk.Build(); + + if (!mk.IsDone()) throw std::runtime_error("apply_fillet: OCCT fillet failed"); + return mk.Shape(); +} + +TopoDS_Shape GeometryEngine::apply_chamfer(const TopoDS_Shape& solid, double distance, int edge_id) +{ + if (distance <= 0.001) return solid; + + TopoDS_Edge edge = edge_by_index(solid, edge_id); + if (edge.IsNull()) throw std::runtime_error("apply_chamfer: invalid edge id"); + + BRepFilletAPI_MakeChamfer mk(solid); + mk.Add(distance, edge); + mk.Build(); + + if (!mk.IsDone()) throw std::runtime_error("apply_chamfer: OCCT chamfer failed"); + return mk.Shape(); +} + +// ---- Tessellation ---- + +TriangleMesh GeometryEngine::tessellate(const TopoDS_Shape& shape, + double linear_deflection, + double angular_deflection) +{ + BRepMesh_IncrementalMesh mesh(shape, linear_deflection, false, angular_deflection, true); + + int nbNodes = 0, nbTri = 0; + for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) { + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(TopoDS::Face(exp.Current()), loc); + if (!tri.IsNull()) { nbNodes += tri->NbNodes(); nbTri += tri->NbTriangles(); } + } + if (nbTri == 0 || nbNodes == 0) return TriangleMesh{}; + + stl_file stl; + stl.stats.type = inmemory; + stl.stats.number_of_facets = (uint32_t)nbTri; + stl.stats.original_num_facets = stl.stats.number_of_facets; + stl_allocate(&stl); + + std::vector pts; pts.reserve(nbNodes); + int ndOff = 0, trOff = 0; + for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) { + const TopoDS_Shape& F = exp.Current(); + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(TopoDS::Face(F), loc); + if (tri.IsNull()) continue; + gp_Trsf T = loc.Transformation(); + for (int i = 1; i <= tri->NbNodes(); ++i) { + gp_Pnt p = tri->Node(i); p.Transform(T); + pts.emplace_back(Vec3f(p.X(), p.Y(), p.Z())); + } + auto orient = exp.Current().Orientation(); + int ids[3]; + for (int i = 1; i <= tri->NbTriangles(); ++i) { + Poly_Triangle t = tri->Triangle(i); t.Get(ids[0], ids[1], ids[2]); + if (orient == TopAbs_REVERSED) std::swap(ids[1], ids[2]); + stl_facet f; + f.vertex[0] = pts[ids[0]+ndOff-1].cast(); + f.vertex[1] = pts[ids[1]+ndOff-1].cast(); + f.vertex[2] = pts[ids[2]+ndOff-1].cast(); + f.extra[0]=0; f.extra[1]=0; + stl_normal n; stl_calculate_normal(n,&f); stl_normalize_vector(n); + f.normal=n; stl.facet_start[trOff+i-1]=f; + } + ndOff += tri->NbNodes(); trOff += tri->NbTriangles(); + } + TriangleMesh result; result.from_stl(stl); return result; +} + +GeometryEngine::Deviation +GeometryEngine::surface_deviation(const TopoDS_Shape& candidate, + const TopoDS_Shape& reference, + double linear_deflection) +{ + Deviation d; + if (candidate.IsNull() || reference.IsNull()) return d; + TriangleMesh mesh = tessellate(candidate, linear_deflection, 0.5); + const auto& verts = mesh.its.vertices; + if (verts.empty()) return d; + double sum = 0.0, sumsq = 0.0; + int n = 0; + for (const auto& v : verts) { + gp_Pnt p(v.x(), v.y(), v.z()); + BRepExtrema_DistShapeShape dss(BRepBuilderAPI_MakeVertex(p).Vertex(), reference); + if (!dss.IsDone() || dss.NbSolution() < 1) continue; + double dist = dss.Value(); + d.max_mm = std::max(d.max_mm, dist); + sum += dist; sumsq += dist * dist; ++n; + } + d.sample_count = n; + if (n > 0) { d.mean_mm = sum / n; d.rms_mm = std::sqrt(sumsq / n); } + return d; +} + +GeometryEngine::MassProps GeometryEngine::mass_properties(const TopoDS_Shape& shape) +{ + MassProps p; + if (shape.IsNull()) return p; + try { + // A sheet body (open shell, no solid) encloses nothing, and BRepGProp::VolumeProperties + // integrates the divergence theorem over whatever faces exist — on an open shell that is + // not a volume at all. It came back as 96000 with an inertia diagonal of + // [-4.2e7, -4.2e7, -6.9e7] for a 60x60x40 four-walled box: negative principal moments, + // which no real body can have. The old code then hid the only obvious tell by taking + // std::abs() of the mass. Report the honest answer instead — surface area is still + // meaningful, so this is not a failure, just not a solid. + p.is_solid = TopExp_Explorer(shape, TopAbs_SOLID).More(); + if (!p.is_solid) { + GProp_GProps sonly; + BRepGProp::SurfaceProperties(shape, sonly); + p.surface_area = sonly.Mass(); + p.valid = true; // the area IS trustworthy; volume/inertia stay zero + return p; + } + GProp_GProps vprops; + BRepGProp::VolumeProperties(shape, vprops); + double mass = vprops.Mass(); + if (std::abs(mass) < 1e-30) return p; + p.volume = std::abs(mass); + p.center_of_mass = Vec3d(vprops.CentreOfMass().X(), vprops.CentreOfMass().Y(), vprops.CentreOfMass().Z()); + gp_Mat mat = vprops.MatrixOfInertia(); + p.inertia = {{ + mat(1,1), mat(1,2), mat(1,3), + mat(2,1), mat(2,2), mat(2,3), + mat(3,1), mat(3,2), mat(3,3), + }}; + GProp_GProps sprops; + BRepGProp::SurfaceProperties(shape, sprops); + p.surface_area = sprops.Mass(); + p.valid = true; + } catch (const Standard_Failure&) { + // leave valid = false + } + return p; +} + +std::string GeometryEngine::primitive_name(PrimitiveType type) +{ + switch (type) { + case PrimitiveType::Box: return "Box"; + case PrimitiveType::Cylinder: return "Cylinder"; + case PrimitiveType::Sphere: return "Sphere"; + case PrimitiveType::Cone: return "Cone"; + case PrimitiveType::Torus: return "Torus"; + default: return "Unknown"; + } +} + +// ---- Topology accessors ---- + +int GeometryEngine::face_count(const TopoDS_Shape& shape) +{ + int n = 0; + for (TopExp_Explorer e(shape, TopAbs_FACE); e.More(); e.Next()) + ++n; + return n; +} + +TopoDS_Face GeometryEngine::face_by_index(const TopoDS_Shape& shape, int index) +{ + if (index < 0) return TopoDS_Face(); + int ordinal = 0; + for (TopExp_Explorer e(shape, TopAbs_FACE); e.More(); e.Next()) { + if (ordinal == index) + return TopoDS::Face(e.Current()); + ++ordinal; + } + return TopoDS_Face(); +} + +std::vector GeometryEngine::faces_of(const TopoDS_Shape& shape) +{ + std::vector out; + for (TopExp_Explorer e(shape, TopAbs_FACE); e.More(); e.Next()) + out.push_back(TopoDS::Face(e.Current())); // same order as face_by_index + return out; +} + +std::vector GeometryEngine::edges_of(const TopoDS_Shape& shape) +{ + TopTools_IndexedMapOfShape map; + TopExp::MapShapes(shape, TopAbs_EDGE, map); // same order as edge_by_index + std::vector out; + out.reserve(map.Extent()); + for (int i = 1; i <= map.Extent(); ++i) + out.push_back(TopoDS::Edge(map(i))); + return out; +} + +std::vector GeometryEngine::edges_of_face(const TopoDS_Face& face) +{ + std::vector result; + TopTools_IndexedMapOfShape map; + TopExp::MapShapes(face, TopAbs_EDGE, map); + for (int i = 1; i <= map.Extent(); ++i) + result.push_back(TopoDS::Edge(map(i))); + return result; +} + +std::vector GeometryEngine::sample_edge_world(const TopoDS_Edge& edge, double chord_tol) +{ + if (BRep_Tool::Degenerated(edge)) + return {}; + + BRepAdaptor_Curve curve(edge); + GCPnts_TangentialDeflection disc(curve, 0.1, chord_tol); + + std::vector pts; + if (disc.NbPoints() >= 2) { + for (int i = 1; i <= disc.NbPoints(); ++i) { + gp_Pnt p = disc.Value(i); + pts.emplace_back(p.X(), p.Y(), p.Z()); + } + } else { + gp_Pnt p0 = curve.Value(curve.FirstParameter()); + gp_Pnt p1 = curve.Value(curve.LastParameter()); + pts.emplace_back(p0.X(), p0.Y(), p0.Z()); + pts.emplace_back(p1.X(), p1.Y(), p1.Z()); + } + return pts; +} + +Vec3d GeometryEngine::face_centroid_world(const TopoDS_Face& face) +{ + GProp_GProps props; + BRepGProp::SurfaceProperties(face, props); + gp_Pnt c = props.CentreOfMass(); + return Vec3d(c.X(), c.Y(), c.Z()); +} + +Vec3d GeometryEngine::face_normal_world(const TopoDS_Face& face) +{ + BRepAdaptor_Surface surf(face); + const double u = 0.5 * (surf.FirstUParameter() + surf.LastUParameter()); + const double v = 0.5 * (surf.FirstVParameter() + surf.LastVParameter()); + BRepLProp_SLProps props(surf, u, v, 1, 1e-6); + gp_Dir n(0.0, 0.0, 1.0); + if (props.IsNormalDefined()) n = props.Normal(); + if (face.Orientation() == TopAbs_REVERSED) n.Reverse(); // outward (account for face winding) + return Vec3d(n.X(), n.Y(), n.Z()); +} + +GeometryEngine::CylinderFace GeometryEngine::cylinder_of_face(const TopoDS_Face& face) +{ + CylinderFace cf; + if (face.IsNull()) return cf; + BRepAdaptor_Surface surf(face); + if (surf.GetType() != GeomAbs_Cylinder) return cf; + + const gp_Cylinder cyl = surf.Cylinder(); + const gp_Ax1 ax = cyl.Axis(); + const Vec3d axis(ax.Direction().X(), ax.Direction().Y(), ax.Direction().Z()); + const Vec3d apt (ax.Location().X(), ax.Location().Y(), ax.Location().Z()); + cf.radius = cyl.Radius(); + + // Axial extent: V is the axial parameter on a cylinder; bound the face's two ends and + // order them so `axis` points base -> top. + const double umid = 0.5 * (surf.FirstUParameter() + surf.LastUParameter()); + const gp_Pnt e0 = surf.Value(umid, surf.FirstVParameter()); + const gp_Pnt e1 = surf.Value(umid, surf.LastVParameter()); + double t0 = (Vec3d(e0.X(), e0.Y(), e0.Z()) - apt).dot(axis); + double t1 = (Vec3d(e1.X(), e1.Y(), e1.Z()) - apt).dot(axis); + if (t1 < t0) std::swap(t0, t1); + cf.base = apt + axis * t0; + cf.axis = axis; + cf.height = t1 - t0; + + // Internal (bore) vs external: compare the face's outward normal at its centre to the + // outward radial direction. A bore's normal points toward the axis (dot < 0). + const gp_Pnt sp = surf.Value(umid, 0.5 * (surf.FirstVParameter() + surf.LastVParameter())); + const Vec3d S(sp.X(), sp.Y(), sp.Z()); + const Vec3d axpt = cf.base + axis * (S - cf.base).dot(axis); + const Vec3d radial = (S - axpt).normalized(); + cf.internal = face_normal_world(face).dot(radial) < 0.0; + cf.ok = true; + return cf; +} + +GeometryEngine::CylinderFace GeometryEngine::circle_of_edge(const TopoDS_Edge& edge) +{ + CylinderFace cf; + if (edge.IsNull()) return cf; + BRepAdaptor_Curve curve(edge); + if (curve.GetType() != GeomAbs_Circle) return cf; + const gp_Circ c = curve.Circle(); + const gp_Ax1 ax = c.Axis(); + cf.base = Vec3d(c.Location().X(), c.Location().Y(), c.Location().Z()); + cf.axis = Vec3d(ax.Direction().X(), ax.Direction().Y(), ax.Direction().Z()); + cf.radius = c.Radius(); + cf.height = 0.0; // an edge carries no axial extent; the card keeps the current length + cf.internal = false; // ambiguous from an edge alone — default external, user can toggle + cf.ok = true; + return cf; +} + +bool GeometryEngine::face_plane_bounds(const TopoDS_Face& face, const Vec3d& origin, + const Vec3d& x_axis, const Vec3d& y_axis, + double& umin, double& umax, double& vmin, double& vmax) +{ + umin = vmin = 1e30; umax = vmax = -1e30; + bool any = false; + for (TopExp_Explorer ex(face, TopAbs_VERTEX); ex.More(); ex.Next()) { + const gp_Pnt p = BRep_Tool::Pnt(TopoDS::Vertex(ex.Current())); + const Vec3d P(p.X(), p.Y(), p.Z()); + const double u = (P - origin).dot(x_axis); + const double v = (P - origin).dot(y_axis); + umin = std::min(umin, u); umax = std::max(umax, u); + vmin = std::min(vmin, v); vmax = std::max(vmax, v); + any = true; + } + return any; +} + +int GeometryEngine::edge_count(const TopoDS_Shape& shape) +{ + TopTools_IndexedMapOfShape map; + TopExp::MapShapes(shape, TopAbs_EDGE, map); + return map.Extent(); +} + +TopoDS_Edge GeometryEngine::edge_by_index(const TopoDS_Shape& shape, int index) +{ + TopTools_IndexedMapOfShape map; + TopExp::MapShapes(shape, TopAbs_EDGE, map); + if (index < 0 || index >= map.Extent()) + return TopoDS_Edge(); + return TopoDS::Edge(map(index + 1)); +} + +int GeometryEngine::edge_index_of(const TopoDS_Shape& shape, const TopoDS_Edge& edge) +{ + TopTools_IndexedMapOfShape map; + TopExp::MapShapes(shape, TopAbs_EDGE, map); + int idx = map.FindIndex(edge); + return (idx > 0) ? (idx - 1) : -1; +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/GeometryEngine.hpp b/src/libslic3r/CAD/GeometryEngine.hpp new file mode 100644 index 0000000000..f27a0f2f17 --- /dev/null +++ b/src/libslic3r/CAD/GeometryEngine.hpp @@ -0,0 +1,183 @@ +#ifndef slic3r_GeometryEngine_hpp_ +#define slic3r_GeometryEngine_hpp_ + +#include "libslic3r/TriangleMesh.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +enum class PrimitiveType { Box, Cylinder, Sphere, Cone, Torus, COUNT }; +enum class DressUpType { Fillet, Chamfer }; +enum class FaceGroup { Top, Bottom, Lateral, All }; + +struct PrimitiveParams { + PrimitiveType type{PrimitiveType::Box}; + double box_w{20}, box_h{20}, box_d{20}; + double cyl_radius{10}, cyl_height{20}; + double sph_radius{10}; + double cone_r1{10}, cone_r2{5}, cone_height{20}; + double torus_r1{10}, torus_r2{3}; + + // Dress-up + bool dressup_enabled{false}; + DressUpType dressup_type{DressUpType::Fillet}; + FaceGroup dressup_faces{FaceGroup::All}; + double dressup_radius{1.0}; // fillet radius + double dressup_chamfer_dist{1.0}; // chamfer distance (symmetric) + + // Mesh quality + double linear_deflection{0.01}; + double angular_deflection{0.5}; + + template + void serialize(Archive& ar) { + ar(type, box_w, box_h, box_d, cyl_radius, cyl_height, sph_radius, + cone_r1, cone_r2, cone_height, torus_r1, torus_r2, + dressup_enabled, dressup_type, dressup_faces, dressup_radius, dressup_chamfer_dist, + linear_deflection, angular_deflection); + } +}; + +class GeometryEngine +{ +public: + static TopoDS_Solid make_primitive(const PrimitiveParams& params); + + // Read a STEP file into its top-level solids (one TopoDS_Shape per solid; falls back to + // the whole shape if it contains no closed solids). Reuses OCCT's STEPControl_Reader, + // already linked via Format/STEP.cpp — no new dependency. err is set on failure (empty result). + static std::vector read_step_solids(const std::string& path, std::string& err); + + // Triangle mesh -> B-rep solid. Native port of mesh2step + // (github.com/tommasobbianchi/mesh2step): vertices and edges are SHARED across triangles + // at construction time (vertex cache by deduped index, edge cache by unordered index pair), + // so there is no BRepBuilderAPI_Sewing pass to reconstruct topology afterwards — which is + // both faster and what makes watertightness fall out of the edge-usage counts for free. + // Runs in-process on the OCCT kernel libslic3r already links: no STEP file is written or + // re-read (a faceted STEP of a 62k-triangle mesh is ~149 MB and takes OCCT's reader >300 s + // to parse back, so routing the Design tab through a file would hang the GUI). + struct MeshBrepStats { + int input_tris{0}; + int kept_tris{0}; + int degenerate_collapsed{0}; // <3 distinct vertices after tolerance quantization + int degenerate_sliver{0}; // 3 distinct vertices but near-collinear + int faces_built{0}; + int faces_failed{0}; + int unique_edges{0}; + int boundary_edges{0}; // used by exactly 1 triangle -> open shell + int nonmanifold_edges{0}; // used by >=3 triangles + bool watertight{false}; // every edge used exactly twice + bool is_solid{false}; // watertight AND MakeSolid gave a positive volume + double volume{0.0}; + int faces_final{0}; // after the optional coplanar merge + }; + // tolerance: spatial quantization cell used ONLY for vertex dedup and as the + // sub-resolution floor below which a triangle is noise. Never a sew tolerance. + // merge_angle_deg > 0: run ShapeUpgrade_UnifySameDomain to merge coplanar neighbours into + // single faces (a 12-triangle cube -> 6 pickable faces). This is what makes the imported + // body editable with the face/edge tools; <= 0 keeps the exact one-face-per-triangle form. + // Never wraps a non-watertight shell as a fake solid: an open mesh comes back as a shell, + // with the reason (boundary / non-manifold edge counts) reported in stats. + static TopoDS_Shape mesh_to_brep(const indexed_triangle_set& its, + double tolerance, + double merge_angle_deg, + MeshBrepStats& stats); + + struct MassProps { + double volume{0.0}; + double surface_area{0.0}; + Vec3d center_of_mass{Vec3d::Zero()}; + std::array inertia{}; + bool valid{false}; + // False for a sheet body (an open shell with no solid). Volume and inertia are then + // meaningless and are reported as zero; surface_area stays meaningful. See the .cpp. + bool is_solid{false}; + }; + static MassProps mass_properties(const TopoDS_Shape& shape); + + struct Deviation { double max_mm{0}; double mean_mm{0}; double rms_mm{0}; int sample_count{0}; }; + static Deviation surface_deviation(const TopoDS_Shape& candidate, + const TopoDS_Shape& reference, + double linear_deflection = 0.5); + + static TopoDS_Shape apply_fillet(const TopoDS_Shape& solid, double radius, + FaceGroup faces = FaceGroup::All); + static TopoDS_Shape apply_fillet(const TopoDS_Shape& solid, double radius, + int edge_id); + static TopoDS_Shape apply_chamfer(const TopoDS_Shape& solid, double distance, + FaceGroup faces = FaceGroup::All); + static TopoDS_Shape apply_chamfer(const TopoDS_Shape& solid, double distance, + int edge_id); + + static TriangleMesh tessellate(const TopoDS_Shape& shape, + double linear_deflection = 0.01, + double angular_deflection = 0.5); + static std::string primitive_name(PrimitiveType type); + + // Topology accessors for in-viewport face/edge picking (Design tab). Face index is the + // TopExp_Explorer(shape, TopAbs_FACE) ordinal — identical to SketchEngine::tessellate's + // per-triangle face id, so a picked triangle's id maps back to a face here. + static TopoDS_Face face_by_index(const TopoDS_Shape& shape, int index); // null if out of range + static int face_count(const TopoDS_Shape& shape); + // Bulk enumeration in the SAME order as face_by_index / edge_by_index, so ids are + // interchangeable. Walking a body with the _by_index accessors is quadratic (each call + // rescans the shape — edge_by_index even rebuilds the whole indexed map), which cost + // ~15 s on a 4.7k-face imported solid; enumerate once instead. + static std::vector faces_of(const TopoDS_Shape& shape); + static std::vector edges_of(const TopoDS_Shape& shape); + static std::vector edges_of_face(const TopoDS_Face& face); + // Centre of mass (world) of a face — used to compute the extrude length for "up to face". + static Vec3d face_centroid_world(const TopoDS_Face& face); + // Outward unit normal of a face at its UV midpoint (orientation-aware) — for the shell gizmo. + static Vec3d face_normal_world(const TopoDS_Face& face); + // Sample an edge into a world-space polyline (>=2 pts) for pick-distance + highlight. + static std::vector sample_edge_world(const TopoDS_Edge& edge, double chord_tol = 0.05); + // 0-based edge index into TopExp::MapShapes(shape, TopAbs_EDGE, map). + static int edge_count(const TopoDS_Shape& shape); + static TopoDS_Edge edge_by_index(const TopoDS_Shape& shape, int index); + static int edge_index_of(const TopoDS_Shape& shape, const TopoDS_Edge& edge); + + // Analysis of a cylindrical face for the Thread tool (a hole bore or a cylinder's lateral + // surface): axis (base at the lower axial end + unit direction), radius, axial extent, and + // whether it is a bore (face normal points toward the axis = internal thread). ok=false if + // the face is not a cylinder. + struct CylinderFace { + bool ok{false}; + Vec3d base{0, 0, 0}; + Vec3d axis{0, 0, 1}; + double radius{0}; + double height{0}; + bool internal{false}; + }; + static CylinderFace cylinder_of_face(const TopoDS_Face& face); + // Circular edge (a cylinder's perimeter): base = circle centre, axis = circle normal, + // radius = circle radius, height = 0 (unknown from an edge), internal = false. ok=false if + // the edge is not a circle. Lets the Thread tool be driven by a picked circular rim. + static CylinderFace circle_of_edge(const TopoDS_Edge& edge); + + // Plane-coordinate (u,v) bounding box of a face's vertices, measured from `origin` along + // `x_axis`/`y_axis`. Lets the Hole tool dimension the hole from the face SIDES (umin/vmin = + // two adjacent edges) instead of from the centre. Returns false if the face has no vertices. + static bool face_plane_bounds(const TopoDS_Face& face, const Vec3d& origin, + const Vec3d& x_axis, const Vec3d& y_axis, + double& umin, double& umax, double& vmin, double& vmax); + +private: + static std::vector collect_edges(const TopoDS_Shape& solid, FaceGroup faces); + static FaceGroup classify_face(const TopoDS_Face& face, const TopoDS_Shape& solid); +}; + +} // namespace Slic3r + +#endif // slic3r_GeometryEngine_hpp_ diff --git a/src/libslic3r/CAD/SketchConstraints.cpp b/src/libslic3r/CAD/SketchConstraints.cpp new file mode 100644 index 0000000000..003afb4d63 --- /dev/null +++ b/src/libslic3r/CAD/SketchConstraints.cpp @@ -0,0 +1,307 @@ +#include "libslic3r/CAD/SketchConstraints.hpp" +#include +#include + +namespace Slic3r { + +int SketchConstraints::add_point(double x, double y) +{ + m_vars.push_back(x); + m_vars.push_back(y); + return static_cast(m_vars.size() / 2) - 1; +} + +void SketchConstraints::set_point(int id, double x, double y) +{ + size_t idx = 2 * id; + m_vars[idx] = x; + m_vars[idx + 1] = y; +} + +Vec2d SketchConstraints::get_point(int id) const +{ + size_t idx = 2 * id; + return Vec2d(m_vars[idx], m_vars[idx + 1]); +} + +int SketchConstraints::point_count() const +{ + return static_cast(m_vars.size() / 2); +} + +void SketchConstraints::fix_point(int id) +{ + size_t idx = 2 * id; + Con c; + c.type = FIX_POINT; + c.a = id; + c.b = c.c = c.d = 0; + c.k0 = m_vars[idx]; + c.k1 = m_vars[idx + 1]; + m_cons.push_back(c); +} + +void SketchConstraints::coincident(int a, int b) +{ + Con c; + c.type = COINCIDENT; + c.a = a; c.b = b; c.c = c.d = 0; + c.k0 = c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::horizontal(int a, int b) +{ + Con c; + c.type = HORIZONTAL; + c.a = a; c.b = b; c.c = c.d = 0; + c.k0 = c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::vertical(int a, int b) +{ + Con c; + c.type = VERTICAL; + c.a = a; c.b = b; c.c = c.d = 0; + c.k0 = c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::distance(int a, int b, double d) +{ + Con c; + c.type = DISTANCE; + c.a = a; c.b = b; c.c = c.d = 0; + c.k0 = d; c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::lock_x(int id, double x) +{ + Con c; + c.type = LOCK_X; + c.a = id; + c.b = c.c = c.d = 0; + c.k0 = x; c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::lock_y(int id, double y) +{ + Con c; + c.type = LOCK_Y; + c.a = id; + c.b = c.c = c.d = 0; + c.k0 = y; c.k1 = 0; + m_cons.push_back(c); +} + +void SketchConstraints::equal_length(int a, int b, int c, int d) +{ + Con con; + con.type = EQUAL_LENGTH; + con.a = a; con.b = b; con.c = c; con.d = d; + con.k0 = con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::parallel(int a, int b, int c, int d) +{ + Con con; + con.type = PARALLEL; + con.a = a; con.b = b; con.c = c; con.d = d; + con.k0 = con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::perpendicular(int a, int b, int c, int d) +{ + Con con; + con.type = PERPENDICULAR; + con.a = a; con.b = b; con.c = c; con.d = d; + con.k0 = con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::midpoint(int m, int a, int b) +{ + Con con; + con.type = MIDPOINT; + con.a = m; con.b = a; con.c = b; con.d = -1; + con.k0 = con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::symmetric(int a, int b, int c, int d) +{ + Con con; + con.type = SYMMETRIC; + con.a = a; con.b = b; con.c = c; con.d = d; + con.k0 = con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::angle(int a, int b, int c, int d, double radians) +{ + Con con; + con.type = ANGLE; + con.a = a; con.b = b; con.c = c; con.d = d; + con.k0 = radians; con.k1 = 0; + m_cons.push_back(con); +} + +void SketchConstraints::point_line_distance(int p, int a, int b, double dist) +{ + Con con; + con.type = PT_LINE_DIST; + con.a = p; con.b = a; con.c = b; con.d = -1; + con.k0 = dist; con.k1 = 0; + m_cons.push_back(con); +} + +Eigen::VectorXd SketchConstraints::residuals(const std::vector& v) const +{ + auto X = [&](int i) { return v[2 * i]; }; + auto Y = [&](int i) { return v[2 * i + 1]; }; + + std::vector res; + for (const auto& c : m_cons) { + switch (c.type) { + case FIX_POINT: + res.push_back(X(c.a) - c.k0); + res.push_back(Y(c.a) - c.k1); + break; + case COINCIDENT: + res.push_back(X(c.a) - X(c.b)); + res.push_back(Y(c.a) - Y(c.b)); + break; + case HORIZONTAL: + res.push_back(Y(c.a) - Y(c.b)); + break; + case VERTICAL: + res.push_back(X(c.a) - X(c.b)); + break; + case DISTANCE: + res.push_back(std::hypot(X(c.a) - X(c.b), Y(c.a) - Y(c.b)) - c.k0); + break; + case LOCK_X: + res.push_back(X(c.a) - c.k0); + break; + case LOCK_Y: + res.push_back(Y(c.a) - c.k0); + break; + case EQUAL_LENGTH: + res.push_back(std::hypot(X(c.a) - X(c.b), Y(c.a) - Y(c.b)) - + std::hypot(X(c.c) - X(c.d), Y(c.c) - Y(c.d))); + break; + case PARALLEL: + res.push_back((X(c.b) - X(c.a)) * (Y(c.d) - Y(c.c)) - + (Y(c.b) - Y(c.a)) * (X(c.d) - X(c.c))); + break; + case PERPENDICULAR: + res.push_back((X(c.b) - X(c.a)) * (X(c.d) - X(c.c)) + + (Y(c.b) - Y(c.a)) * (Y(c.d) - Y(c.c))); + break; + case MIDPOINT: + res.push_back(X(c.a) - 0.5 * (X(c.b) + X(c.c))); + res.push_back(Y(c.a) - 0.5 * (Y(c.b) + Y(c.c))); + break; + case SYMMETRIC: { + const double abx = X(c.b) - X(c.a), aby = Y(c.b) - Y(c.a); + const double cdx = X(c.d) - X(c.c), cdy = Y(c.d) - Y(c.c); + res.push_back(abx * cdx + aby * cdy); + const double mx = 0.5 * (X(c.a) + X(c.b)); + const double my = 0.5 * (Y(c.a) + Y(c.b)); + res.push_back((mx - X(c.c)) * cdy - (my - Y(c.c)) * cdx); + break; + } + case ANGLE: { + const double ux = X(c.b) - X(c.a), uy = Y(c.b) - Y(c.a); + const double wx = X(c.d) - X(c.c), wy = Y(c.d) - Y(c.c); + const double cross = ux * wy - uy * wx; + const double dot = ux * wx + uy * wy; + res.push_back(std::atan2(cross, dot) - c.k0); + break; + } + case PT_LINE_DIST: { + const double bx = X(c.b), by = Y(c.b); + const double cx = X(c.c), cy = Y(c.c); + const double L = std::hypot(cx - bx, cy - by); + const double num = (X(c.a) - bx) * (cy - by) - (Y(c.a) - by) * (cx - bx); + res.push_back((L > 1e-12 ? std::abs(num) / L : 0.0) - c.k0); + break; + } + } + } + + Eigen::VectorXd r(static_cast(res.size())); + for (size_t i = 0; i < res.size(); ++i) + r(static_cast(i)) = res[i]; + return r; +} + +Eigen::MatrixXd SketchConstraints::jacobian(const std::vector& v) const +{ + int m = static_cast(residuals(v).size()); + int n = static_cast(v.size()); + Eigen::MatrixXd J(m, n); + const double eps = 1e-7; + + std::vector vp = v; + std::vector vm = v; + + for (int j = 0; j < n; ++j) { + vp[j] = v[j] + eps; + vm[j] = v[j] - eps; + Eigen::VectorXd rp = residuals(vp); + Eigen::VectorXd rm = residuals(vm); + vp[j] = v[j]; + vm[j] = v[j]; + J.col(j) = (rp - rm) / (2.0 * eps); + } + + return J; +} + +bool SketchConstraints::solve(int max_iter, double tol) +{ + if (m_cons.empty()) return true; + double lambda = 1e-3; + Eigen::VectorXd r = residuals(m_vars); + for (int it = 0; it < max_iter; ++it) { + double rn = r.norm(); + if (rn < tol) return true; + Eigen::MatrixXd J = jacobian(m_vars); + Eigen::MatrixXd A = J.transpose() * J; + Eigen::VectorXd g = J.transpose() * r; + bool stepped = false; + for (int t = 0; t < 12; ++t) { + Eigen::MatrixXd Ad = A; + for (int i = 0; i < Ad.rows(); ++i) + Ad(i, i) += lambda * (1.0 + Ad(i, i)); + Eigen::VectorXd dx = Ad.ldlt().solve(-g); + std::vector cand = m_vars; + for (size_t i = 0; i < cand.size(); ++i) + cand[i] += dx[static_cast(i)]; + Eigen::VectorXd rc = residuals(cand); + if (rc.norm() < rn) { + m_vars = cand; + r = rc; + lambda = std::max(lambda * 0.4, 1e-12); + stepped = true; + break; + } + lambda *= 3.0; + } + if (!stepped) break; + } + return r.norm() < tol * 100; +} + +double SketchConstraints::residual_norm() const +{ + return residuals(m_vars).norm(); +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/SketchConstraints.hpp b/src/libslic3r/CAD/SketchConstraints.hpp new file mode 100644 index 0000000000..88bcadc403 --- /dev/null +++ b/src/libslic3r/CAD/SketchConstraints.hpp @@ -0,0 +1,68 @@ +#ifndef slic3r_SketchConstraints_hpp_ +#define slic3r_SketchConstraints_hpp_ + +#include "libslic3r/Point.hpp" +#include +#include + +namespace Slic3r { + +class SketchConstraints { +public: + int add_point(double x, double y); + void set_point(int id, double x, double y); + Vec2d get_point(int id) const; + int point_count() const; + + void fix_point(int id); + void coincident(int a, int b); + void horizontal(int a, int b); + void vertical(int a, int b); + void distance(int a, int b, double d); + void lock_x(int id, double x); + void lock_y(int id, double y); + void equal_length(int a, int b, int c, int d); + void parallel(int a, int b, int c, int d); + void perpendicular(int a, int b, int c, int d); + void midpoint(int m, int a, int b); + void symmetric(int a, int b, int c, int d); + void angle(int a, int b, int c, int d, double radians); + void point_line_distance(int p, int a, int b, double dist); + + bool solve(int max_iter = 200, double tol = 1e-10); + double residual_norm() const; + +private: + std::vector m_vars; + + enum ConType : int { + FIX_POINT = 0, + COINCIDENT, + HORIZONTAL, + VERTICAL, + DISTANCE, + LOCK_X, + LOCK_Y, + EQUAL_LENGTH, + PARALLEL, + PERPENDICULAR, + MIDPOINT, + SYMMETRIC, + ANGLE, + PT_LINE_DIST + }; + + struct Con { + int type; + int a, b, c, d; + double k0, k1; + }; + std::vector m_cons; + + Eigen::VectorXd residuals(const std::vector& v) const; + Eigen::MatrixXd jacobian(const std::vector& v) const; +}; + +} // namespace Slic3r + +#endif // slic3r_SketchConstraints_hpp_ diff --git a/src/libslic3r/CAD/SketchEngine.cpp b/src/libslic3r/CAD/SketchEngine.cpp new file mode 100644 index 0000000000..5cc36ce648 --- /dev/null +++ b/src/libslic3r/CAD/SketchEngine.cpp @@ -0,0 +1,2361 @@ +#include "libslic3r/CAD/SketchEngine.hpp" + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +// Single source of truth for the weld tolerance the viewport and the kernel share. +// Defaults ON so headless/kernel-only callers keep welding; the GUI pushes the +// "auto_close_sketch_loops" preference in via set_sketch_auto_close(). +static bool s_auto_close = true; + +double sketch_join_tol() { return s_auto_close ? kSketchJoinTol : 0.0; } +void set_sketch_auto_close(bool on) { s_auto_close = on; } + +// ---- SketchPlane ---- + +gp_Pln SketchPlane::to_occt() const +{ + gp_Pnt o(origin.x(), origin.y(), origin.z()); + gp_Dir n(normal.x(), normal.y(), normal.z()); + gp_Dir x(x_axis.x(), x_axis.y(), x_axis.z()); + return gp_Pln(gp_Ax3(o, n, x)); +} + +SketchPlane SketchPlane::from_face(const TopoDS_Face& face) +{ + SketchPlane sp; + // Use the first triangulation vertex + face normal + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(face, loc); + if (!tri.IsNull() && tri->NbNodes() > 0) { + gp_Pnt p = tri->Node(1).Transformed(loc.Transformation()); + sp.origin = Vec3d(p.X(), p.Y(), p.Z()); + } + // Compute normal from BRep face + BRepAdaptor_Surface surf(face); + if (surf.GetType() != GeomAbs_Plane) { + // Fallback: try to use the first uv point + double u1 = surf.FirstUParameter(), v1 = surf.FirstVParameter(); + gp_Pnt pt; gp_Vec du, dv; + surf.D1(u1, v1, pt, du, dv); + gp_Dir n = gp_Dir(du.Crossed(dv)); + sp.normal = Vec3d(n.X(), n.Y(), n.Z()); + sp.x_axis = Vec3d(du.X(), du.Y(), du.Z()).normalized(); + sp.y_axis = sp.normal.cross(sp.x_axis).normalized(); + return sp; + } + // Plane face — use the plane directly + gp_Pln pln = surf.Plane(); + sp.origin = Vec3d(pln.Location().X(), pln.Location().Y(), pln.Location().Z()); + gp_Dir n = pln.Axis().Direction(); + sp.normal = Vec3d(n.X(), n.Y(), n.Z()); + gp_Dir xd = pln.XAxis().Direction(); + sp.x_axis = Vec3d(xd.X(), xd.Y(), xd.Z()); + sp.y_axis = sp.normal.cross(sp.x_axis).normalized(); + return sp; +} + +Vec2d SketchPlane::project(const Vec3d& ray_origin, const Vec3d& ray_dir) const +{ + double denom = ray_dir.dot(normal); + if (std::abs(denom) < 1e-12) + return {0, 0}; // ray parallel to plane + double t = (origin - ray_origin).dot(normal) / denom; + if (t < 0) + return {0, 0}; // behind camera + Vec3d hit = ray_origin + t * ray_dir; + Vec3d local = hit - origin; + return {local.dot(x_axis), local.dot(y_axis)}; +} + +Vec3d SketchPlane::to_world(const Vec2d& pt) const +{ + return origin + x_axis * pt.x() + y_axis * pt.y(); +} + +// ---- SketchProfile ---- + +bool SketchProfile::is_closed(double tolerance) const +{ + if (points.size() < 3) return false; + return (points.front() - points.back()).norm() < tolerance; +} + +bool SketchProfile::try_close(double tolerance) +{ + if (is_closed(tolerance)) { + closed = true; + return true; + } + if (points.size() < 2) return false; + if ((points.front() - points.back()).norm() < tolerance) { + closed = true; + return true; + } + return false; +} + +TopoDS_Wire SketchProfile::to_occt_wire(const SketchPlane& plane) const +{ + if (points.size() < 2) + throw std::runtime_error("Profile has fewer than 2 points"); + + BRepBuilderAPI_MakeWire builder; + for (size_t i = 0; i < points.size(); ++i) { + Vec3d a3 = plane.to_world(points[i]); + Vec3d b3 = plane.to_world(points[(i + 1) % points.size()]); + gp_Pnt pa(a3.x(), a3.y(), a3.z()); + gp_Pnt pb(b3.x(), b3.y(), b3.z()); + builder.Add(BRepBuilderAPI_MakeEdge(pa, pb).Edge()); + } + builder.Build(); + if (!builder.IsDone()) + throw std::runtime_error("Failed to build wire from profile"); + return builder.Wire(); +} + +// ---- SketchEngine ---- + +static TopoDS_Shape extrude_face_internal(const TopoDS_Face& face, const gp_Dir& dir, double length, bool symmetric) +{ + gp_Vec vec = gp_Vec(dir) * length; + if (symmetric) { + gp_Vec halfVec = gp_Vec(dir) * (length / 2.0); + BRepPrimAPI_MakePrism pos(face, halfVec); + BRepPrimAPI_MakePrism neg(face, -halfVec); + if (!pos.IsDone() || !neg.IsDone()) throw std::runtime_error("Symmetric extrude failed"); + BRepAlgoAPI_Fuse fuse(pos.Shape(), neg.Shape()); + if (!fuse.IsDone()) throw std::runtime_error("Fuse failed"); + return fuse.Shape(); + } + BRepPrimAPI_MakePrism prism(face, vec); + if (!prism.IsDone()) throw std::runtime_error("Extrude failed"); + return prism.Shape(); +} + +TopoDS_Shape SketchEngine::make_extrude(const TopoDS_Wire& wire, const SketchPlane& plane, + double length, bool symmetric, double taper_deg) +{ + BRepBuilderAPI_MakeFace fm(wire); + if (!fm.IsDone()) throw std::runtime_error("Failed to make face from wire"); + return make_extrude(fm.Face(), plane, length, symmetric, taper_deg); +} + +TopoDS_Shape SketchEngine::make_extrude(const TopoDS_Face& face, const SketchPlane& plane, + double length, bool symmetric, double /*taper_deg*/) +{ + gp_Dir dir(plane.normal.x(), plane.normal.y(), plane.normal.z()); + return extrude_face_internal(face, dir, length, symmetric); +} + +TopoDS_Shape SketchEngine::make_extrude_two_sided(const TopoDS_Wire& wire, const SketchPlane& plane, + double up, double down) +{ + BRepBuilderAPI_MakeFace fm(wire); + if (!fm.IsDone()) throw std::runtime_error("Failed to make face from wire"); + return make_extrude_two_sided(fm.Face(), plane, up, down); +} + +TopoDS_Shape SketchEngine::make_extrude_two_sided(const TopoDS_Face& face, const SketchPlane& plane, + double up, double down) +{ + gp_Dir dir(plane.normal.x(), plane.normal.y(), plane.normal.z()); + const double u = std::abs(up), d = std::abs(down); + if (u < 1e-9 && d < 1e-9) return TopoDS_Shape(); + if (d < 1e-9) { BRepPrimAPI_MakePrism p(face, gp_Vec(dir) * u); return p.Shape(); } + if (u < 1e-9) { BRepPrimAPI_MakePrism p(face, gp_Vec(dir) * -d); return p.Shape(); } + BRepPrimAPI_MakePrism pos(face, gp_Vec(dir) * u); + BRepPrimAPI_MakePrism neg(face, gp_Vec(dir) * -d); + BRepAlgoAPI_Fuse fuse(pos.Shape(), neg.Shape()); + if (!fuse.IsDone()) throw std::runtime_error("two-sided extrude fuse failed"); + return fuse.Shape(); +} + +TopoDS_Shape SketchEngine::make_extrude_taper(const TopoDS_Wire& wire, const SketchPlane& plane, + double length, double taper_deg) +{ + gp_Dir dir(plane.normal.x(), plane.normal.y(), plane.normal.z()); + auto straight = [&]() -> TopoDS_Shape { + BRepBuilderAPI_MakeFace fm(wire); + BRepPrimAPI_MakePrism prism(fm.Face(), gp_Vec(dir) * length); + return prism.Shape(); + }; + if (std::abs(taper_deg) >= 89.0 || std::abs(length) < 1e-9) return straight(); + const double off = length * std::tan(taper_deg * M_PI / 180.0); + if (std::abs(off) < 1e-7) return straight(); + try { + // 1) offset the planar base wire in its own plane by `off` + BRepOffsetAPI_MakeOffset mko(wire, GeomAbs_Arc); + mko.Perform(off); + if (!mko.IsDone()) return straight(); + TopoDS_Shape offShape = mko.Shape(); + TopoDS_Wire topFlat; + if (offShape.ShapeType() == TopAbs_WIRE) topFlat = TopoDS::Wire(offShape); + else { for (TopExp_Explorer ex(offShape, TopAbs_WIRE); ex.More(); ex.Next()) { topFlat = TopoDS::Wire(ex.Current()); break; } } + if (topFlat.IsNull()) return straight(); + // 2) lift it along the normal by `length` + gp_Trsf tr; tr.SetTranslation(gp_Vec(dir) * length); + BRepBuilderAPI_Transform xf(topFlat, tr, Standard_True); + TopoDS_Wire topWire = TopoDS::Wire(xf.Shape()); + // 3) loft base -> top into a solid + BRepOffsetAPI_ThruSections loft(Standard_True /*solid*/, Standard_False /*ruled*/); + loft.AddWire(wire); + loft.AddWire(topWire); + loft.Build(); + if (!loft.IsDone()) return straight(); + TopoDS_Shape s = loft.Shape(); + if (s.IsNull()) return straight(); + return s; + } catch (const Standard_Failure&) { + return straight(); + } +} + +TopoDS_Shape SketchEngine::make_extrude_face(const TopoDS_Face& face, const SketchPlane& plane, + double length, bool symmetric, double /*taper_deg*/) +{ + gp_Dir dir(plane.normal.x(), plane.normal.y(), plane.normal.z()); + return extrude_face_internal(face, dir, length, symmetric); +} + +TopoDS_Shape SketchEngine::make_extrude_regions( + const std::vector>>& regions, + const SketchPlane& plane, double length, bool symmetric) +{ + // Drop consecutive coincident points and the closing duplicate. FreeType / + // SVG flattening routinely emits repeated points which would build a + // degenerate OCCT edge and make the wire builder throw — sanitising keeps a + // single bad glyph from killing the whole extrude. + auto clean = [](const std::vector& pts) { + const double eps2 = 1e-12; // ~1e-6 mm + std::vector out; + out.reserve(pts.size()); + for (const Vec2d& p : pts) + if (out.empty() || (p - out.back()).squaredNorm() > eps2) + out.push_back(p); + while (out.size() >= 2 && (out.front() - out.back()).squaredNorm() <= eps2) + out.pop_back(); + return out; + }; + + // Build a closed planar wire from a contour. Never throws — returns a null + // wire on any failure so the caller can skip just that contour. Winding is + // NOT normalised here: ShapeFix_Face::FixOrientation() below classifies outer + // vs hole by geometry and fixes orientations, which is robust to the + // inconsistent winding Emboss/NSVG glyph contours arrive with (manual + // winding guesses extrude holed glyphs (P, e, o, 8) inverted or solid). + auto contour_wire = [&](const std::vector& raw) -> TopoDS_Wire { + std::vector pts = clean(raw); + if (pts.size() < 3) return TopoDS_Wire{}; + SketchProfile prof; + prof.points = std::move(pts); + prof.closed = true; + try { return prof.to_occt_wire(plane); } + catch (...) { return TopoDS_Wire{}; } + }; + + gp_Dir dir(plane.normal.x(), plane.normal.y(), plane.normal.z()); + + // Accumulate each region's solid into a compound rather than boolean-fusing: + // glyphs are independent profiles, so a compound avoids every boolean-failure + // mode (and is faster). Holes are still handled per region by MakeFace. + BRep_Builder bb; + TopoDS_Compound comp; + bb.MakeCompound(comp); + int count = 0; + TopoDS_Shape last; + + for (const auto& region : regions) { + if (region.empty()) continue; + try { + TopoDS_Wire outer = contour_wire(region[0]); + if (outer.IsNull()) continue; + + // Add the outer loop + every hole loop as-is, then let ShapeFix_Face + // classify outer vs holes by area/containment and set correct wire + // orientations. This is winding-independent, so holed glyphs extrude + // with a solid body and empty counters regardless of source winding. + BRepBuilderAPI_MakeFace fm(outer); + if (!fm.IsDone()) continue; + for (size_t h = 1; h < region.size(); ++h) { + TopoDS_Wire hole = contour_wire(region[h]); + if (hole.IsNull()) continue; + fm.Add(hole); + } + if (!fm.IsDone()) continue; + + ShapeFix_Face sff(fm.Face()); + sff.FixOrientation(); + const TopoDS_Face face = sff.Face(); + + TopoDS_Shape solid = extrude_face_internal(face, dir, length, symmetric); + bb.Add(comp, solid); + last = solid; + ++count; + } catch (...) { + continue; // skip one bad glyph rather than fail the whole insert + } + } + + if (count == 0) throw std::runtime_error("imported regions produced no extrudable geometry"); + return count == 1 ? last : TopoDS_Shape(comp); // avoid a compound-of-one +} + +TopoDS_Shape SketchEngine::make_revolve(const TopoDS_Wire& wire, const SketchPlane& plane, + double angle_deg, int axis_sel) +{ + BRepBuilderAPI_MakeFace faceMaker(wire); + if (!faceMaker.IsDone()) + throw std::runtime_error("Failed to make face from wire"); + TopoDS_Face face = faceMaker.Face(); + + // Revolution axis lies in the sketch plane through its origin: X (0) or Y (1). + const Vec3d& adir = (axis_sel == 1) ? plane.y_axis : plane.x_axis; + gp_Pnt o(plane.origin.x(), plane.origin.y(), plane.origin.z()); + gp_Dir xd(adir.x(), adir.y(), adir.z()); + gp_Ax1 axis(o, xd); + + double angle_rad = angle_deg * M_PI / 180.0; + // A negative angle is expressed as a positive sweep about the reversed axis, + // since BRepPrimAPI_MakeRevol expects an angle in (0, 2*pi]. + if (angle_rad < 0) { axis.Reverse(); angle_rad = -angle_rad; } + BRepPrimAPI_MakeRevol rev(face, axis, angle_rad); + if (!rev.IsDone()) + throw std::runtime_error("Failed to revolve"); + return rev.Shape(); +} + +TopoDS_Shape SketchEngine::make_sweep(const TopoDS_Wire& profile, const TopoDS_Wire& path) +{ + BRepBuilderAPI_MakeFace faceMaker(profile); + if (!faceMaker.IsDone()) + throw std::runtime_error("Failed to make face from sweep profile"); + TopoDS_Face face = faceMaker.Face(); + + BRepOffsetAPI_MakePipe pipe(path, face); + pipe.Build(); + if (!pipe.IsDone()) + throw std::runtime_error("Failed to sweep profile along path"); + return pipe.Shape(); +} + +TopoDS_Shape SketchEngine::make_loft(const std::vector& profiles, bool ruled) +{ + if (profiles.size() < 2) + throw std::runtime_error("loft needs at least 2 profiles"); + BRepOffsetAPI_ThruSections loft(Standard_True /*solid*/, + ruled ? Standard_True : Standard_False); + for (const TopoDS_Wire& w : profiles) { + if (w.IsNull()) throw std::runtime_error("loft: null profile wire"); + loft.AddWire(w); + } + loft.Build(); + if (!loft.IsDone()) throw std::runtime_error("loft failed"); + TopoDS_Shape s = loft.Shape(); + if (s.IsNull()) throw std::runtime_error("loft produced no solid"); + return s; +} + +// ponytail: sibling of make_loft that builds an open shell (sheet) instead of a solid. +TopoDS_Shape SketchEngine::make_loft_surface(const std::vector& profiles, bool ruled) +{ + if (profiles.size() < 2) + throw std::runtime_error("loft needs at least 2 profiles"); + BRepOffsetAPI_ThruSections loft(Standard_False /*shell, no end caps*/, + ruled ? Standard_True : Standard_False); + for (const TopoDS_Wire& w : profiles) { + if (w.IsNull()) throw std::runtime_error("loft: null profile wire"); + loft.AddWire(w); + } + loft.Build(); + if (!loft.IsDone()) throw std::runtime_error("loft failed"); + TopoDS_Shape s = loft.Shape(); + if (s.IsNull()) throw std::runtime_error("loft produced no shape"); + return s; +} + +TopoDS_Shape SketchEngine::make_pocket(const TopoDS_Wire& wire, const SketchPlane& plane, + const TopoDS_Shape& target, double depth) +{ + BRepBuilderAPI_MakeFace fm(wire); + if (!fm.IsDone()) throw std::runtime_error("Pocket face failed"); + TopoDS_Shape tool = extrude_face_internal(fm.Face(), + gp_Dir(plane.normal.x(), plane.normal.y(), plane.normal.z()), depth + 1.0, false); + BRepAlgoAPI_Cut cut(target, tool); + if (!cut.IsDone()) throw std::runtime_error("Pocket cut failed"); + return cut.Shape(); +} + +TriangleMesh SketchEngine::tessellate(const TopoDS_Shape& shape, + double linear_deflection, + double angular_deflection) +{ + std::vector dummy; + return tessellate(shape, dummy, linear_deflection, angular_deflection); +} + +TriangleMesh SketchEngine::tessellate(const TopoDS_Shape& shape, + std::vector& tri_face, + double linear_deflection, + double angular_deflection) +{ + tri_face.clear(); + BRepMesh_IncrementalMesh mesh(shape, linear_deflection, false, angular_deflection, true); + + int nbNodes = 0, nbTriangles = 0; + for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) { + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(TopoDS::Face(exp.Current()), loc); + if (!tri.IsNull()) { + nbNodes += tri->NbNodes(); + nbTriangles += tri->NbTriangles(); + } + } + + if (nbTriangles == 0 || nbNodes == 0) + return TriangleMesh{}; + + indexed_triangle_set raw; + raw.vertices.reserve(nbNodes); + raw.indices.reserve(nbTriangles); + tri_face.reserve(nbTriangles); + + int faceIdx = -1; + int nodeOff = 0; + for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) { + ++faceIdx; + + TopLoc_Location loc; + Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(TopoDS::Face(exp.Current()), loc); + if (tri.IsNull()) continue; + + gp_Trsf trsf = loc.Transformation(); + for (int i = 1; i <= tri->NbNodes(); ++i) { + gp_Pnt p = tri->Node(i); + p.Transform(trsf); + raw.vertices.emplace_back(Vec3f(p.X(), p.Y(), p.Z())); + } + + TopAbs_Orientation orient = exp.Current().Orientation(); + int ids[3]; + for (int i = 1; i <= tri->NbTriangles(); ++i) { + Poly_Triangle t = tri->Triangle(i); + t.Get(ids[0], ids[1], ids[2]); + if (orient == TopAbs_REVERSED) + std::swap(ids[1], ids[2]); + + raw.indices.emplace_back(nodeOff + ids[0] - 1, + nodeOff + ids[1] - 1, + nodeOff + ids[2] - 1); + tri_face.push_back(faceIdx); + } + nodeOff += tri->NbNodes(); + } + + std::map, int> vmap; + indexed_triangle_set its; + its.indices.reserve(raw.indices.size()); + its.vertices.reserve(raw.vertices.size() / 2); + + std::vector kept_face; + kept_face.reserve(tri_face.size()); + + for (size_t ti = 0; ti < raw.indices.size(); ++ti) { + const auto& tri = raw.indices[ti]; + stl_triangle_vertex_indices new_tri; + for (int j = 0; j < 3; ++j) { + const stl_vertex& v = raw.vertices[tri[j]]; + auto key = std::make_tuple(v.x(), v.y(), v.z()); + auto it = vmap.find(key); + if (it == vmap.end()) { + int new_id = static_cast(its.vertices.size()); + vmap[key] = new_id; + its.vertices.push_back(v); + new_tri[j] = new_id; + } else { + new_tri[j] = it->second; + } + } + // Drop triangles that welding collapsed to a repeated vertex. OCCT emits one at the + // pole of every degenerate surface parameterization — a sphere patch at a filleted + // corner has exactly one — and its v->v edge can never pair with a neighbour, so the + // mesh reports an open edge per corner and the slicer declares the model non-manifold + // and tells the user to repair it elsewhere. The triangle has zero area: removing it + // changes no geometry, only the mesh's bookkeeping. + if (new_tri[0] == new_tri[1] || new_tri[1] == new_tri[2] || new_tri[0] == new_tri[2]) + continue; + its.indices.push_back(new_tri); + kept_face.push_back(tri_face[ti]); + } + tri_face.swap(kept_face); // tri_face stays index-aligned with its.indices + + return TriangleMesh(std::move(its)); +} + +std::vector SketchEngine::entities_to_wires(const std::vector& entities, + const SketchPlane& plane, + bool closed_only) +{ + // Effective weld tolerance: kSketchJoinTol when auto-close is on, 0.0 when off. + // Read ONCE so the union-find, the node weld and the vertex tolerance below all + // agree. With 0.0 the comparisons use <= so exactly coincident endpoints still join. + const double tol = sketch_join_tol(); + + struct Item { const SketchEntity* e; size_t idx; }; + std::vector valid; + valid.reserve(entities.size()); + for (size_t i = 0; i < entities.size(); ++i) { + const SketchEntity& e = entities[i]; + if (e.construction) continue; + if (e.type == SketchEntity::Type::Point) continue; + valid.push_back({&e, i}); + } + if (valid.empty()) return {}; + + // Build an OCCT ellipse (gp_Elips) in the sketch plane from an Ellipse(Arc) + // entity. Major-axis direction = plane-rotated (cos phi, sin phi). Enforces + // a >= b (OCCT requirement); the GUI builder already guarantees this. + auto make_elips = [&](const SketchEntity& c) -> gp_Elips { + Vec3d c3 = plane.to_world(c.center); + gp_Pnt center(c3.x(), c3.y(), c3.z()); + gp_Dir n(plane.normal.x(), plane.normal.y(), plane.normal.z()); + Vec2d maj2(std::cos(c.rotation), std::sin(c.rotation)); + Vec3d x3 = plane.to_world(c.center + maj2) - c3; + gp_Dir xdir(x3.x(), x3.y(), x3.z()); + double a = c.radius, b = c.rminor; + if (a < b) std::swap(a, b); + return gp_Elips(gp_Ax2(center, n, xdir), a, b); + }; + + // Clamped uniform B-spline (degree min(3, n-1)) through the control poles. The + // knot construction is mirrored in DesignSketchTool's GUI sampler so the on-screen + // curve matches the extruded geometry exactly. + auto make_bspline = [&](const SketchEntity& c) -> Handle(Geom_BSplineCurve) { + const int n = int(c.ctrl.size()); + const int p = n >= 4 ? 3 : (n >= 2 ? n - 1 : 0); + if (p < 1) return Handle(Geom_BSplineCurve)(); + TColgp_Array1OfPnt poles(1, n); + for (int i = 0; i < n; ++i) { + Vec3d w = plane.to_world(c.ctrl[i]); + poles.SetValue(i + 1, gp_Pnt(w.x(), w.y(), w.z())); + } + const int interior = n - p - 1; // count of single interior knots + const int nknots = interior + 2; + TColStd_Array1OfReal knots(1, nknots); + TColStd_Array1OfInteger mults(1, nknots); + knots.SetValue(1, 0.0); mults.SetValue(1, p + 1); + for (int i = 1; i <= interior; ++i) { knots.SetValue(i + 1, double(i)); mults.SetValue(i + 1, 1); } + knots.SetValue(nknots, double(interior + 1)); mults.SetValue(nknots, p + 1); + return new Geom_BSplineCurve(poles, knots, mults, p); + }; + + auto is_chain = [](const SketchEntity& e) { + return e.type == SketchEntity::Type::Line || e.type == SketchEntity::Type::Arc || + e.type == SketchEntity::Type::EllipseArc || e.type == SketchEntity::Type::BSpline; + }; + + // Endpoints of a chain entity in SKETCH coordinates (before to_world). False on a + // degenerate (fewer than two control points) BSpline, which can never close a loop. + auto endpoints = [&](const SketchEntity& e, Vec2d& a, Vec2d& b) -> bool { + if (e.type == SketchEntity::Type::BSpline) { + if (e.ctrl.size() < 2) return false; + a = e.ctrl.front(); b = e.ctrl.back(); + return true; + } + a = e.p0; b = e.p1; + return true; + }; + + // Sketch weld tolerance. Nothing legitimate in a mm-scale sketch is 1 um apart, so two + // endpoints within this distance count as one joint. The union-find grouping and the wire + // build below MUST use the SAME number, or a joint can be united into a loop and then + // rejected by the wire builder (which silently drops the edge — see the wire build). + // `<=` (not `<`) so exactly coincident endpoints still join when tol == 0 (auto-close off). + auto same = [&](const Vec2d& p, const Vec2d& q) { return (p - q).norm() <= tol; }; + + // Union-find over the valid index list: chain entities sharing an endpoint belong to one loop. + std::vector parent(valid.size()); + for (size_t i = 0; i < valid.size(); ++i) parent[i] = int(i); + auto find = [&](int x) { + while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } + return x; + }; + auto unite = [&](int x, int y) { + int rx = find(x), ry = find(y); + if (rx != ry) parent[rx] = ry; + }; + + std::vector chain_idx; + chain_idx.reserve(valid.size()); + for (size_t i = 0; i < valid.size(); ++i) + if (is_chain(*valid[i].e)) chain_idx.push_back(i); + + for (size_t a = 0; a < chain_idx.size(); ++a) { + const size_t i = chain_idx[a]; + Vec2d i0, i1; + if (!endpoints(*valid[i].e, i0, i1)) continue; + for (size_t b = a + 1; b < chain_idx.size(); ++b) { + const size_t j = chain_idx[b]; + Vec2d j0, j1; + if (!endpoints(*valid[j].e, j0, j1)) continue; + if (same(i0, j0) || same(i0, j1) || same(i1, j0) || same(i1, j1)) + unite(int(i), int(j)); + } + } + + // Group chain entities by connected-component root. + std::map> comps; + for (size_t i = 0; i < valid.size(); ++i) { + if (!is_chain(*valid[i].e)) continue; + comps[find(int(i))].push_back(i); + } + + // Loop descriptors: each Circle/Ellipse is its own loop; each chain component is a loop. + struct Loop { size_t min_idx{0}; bool closed_single{false}; size_t member{0}; std::vector members; }; + std::vector loops; + for (size_t i = 0; i < valid.size(); ++i) { + const SketchEntity& e = *valid[i].e; + if (e.type == SketchEntity::Type::Circle || e.type == SketchEntity::Type::Ellipse) { + Loop l; l.min_idx = valid[i].idx; l.closed_single = true; l.member = i; + loops.push_back(l); + } + } + for (const auto& kv : comps) { + Loop l; l.closed_single = false; l.members = kv.second; + size_t mn = std::numeric_limits::max(); + for (size_t m : kv.second) mn = std::min(mn, valid[m].idx); + l.min_idx = mn; + loops.push_back(l); + } + // Deterministic order: by the index of each loop's first entity. + std::sort(loops.begin(), loops.end(), [](const Loop& x, const Loop& y) { return x.min_idx < y.min_idx; }); + + // Build each loop. All-or-nothing: one failed loop poisons the whole result. + std::vector out; + out.reserve(loops.size()); + for (const Loop& loop : loops) { + BRepBuilderAPI_MakeWire wm; + if (loop.closed_single) { + const SketchEntity& c = *valid[loop.member].e; + TopoDS_Edge e; + if (c.type == SketchEntity::Type::Ellipse) { + if (c.radius <= 1e-9 || c.rminor <= 1e-9) return {}; + e = BRepBuilderAPI_MakeEdge(make_elips(c)).Edge(); + } else { + Vec3d c3 = plane.to_world(c.center); + gp_Pnt center(c3.x(), c3.y(), c3.z()); + gp_Dir n(plane.normal.x(), plane.normal.y(), plane.normal.z()); + gp_Circ circ(gp_Ax2(center, n), c.radius); + e = BRepBuilderAPI_MakeEdge(circ).Edge(); + } + wm.Add(e); + } else { + // loop.members is in ENTITY-CREATION order, not loop-traversal order. A partial + // wire rejects an out-of-order edge even for a perfectly closed sketch, so first + // weld every endpoint into a shared node, then traverse the chain in order. Each + // endpoint snaps to an existing node when within `tol`, and every edge + // touching a node shares ONE TopoDS_Vertex: the wire builder then sees vertex + // identity, not geometric proximity, so a joint open by a few um (larger than + // OCCT's default 1e-7 vertex tolerance) still connects. + struct Member { size_t v; int a; int b; }; // v = index into `valid`, a/b = node ids + std::vector node_pt; // welded sketch point per node + std::vector node_deg; // endpoint count per node + auto node_id = [&](const Vec2d& p) -> int { + for (size_t i = 0; i < node_pt.size(); ++i) + if ((node_pt[i] - p).norm() <= tol) return int(i); + node_pt.push_back(p); + node_deg.push_back(0); + return int(node_pt.size()) - 1; + }; + std::vector ms; + ms.reserve(loop.members.size()); + for (size_t m : loop.members) { + Vec2d p0, p1; + if (!endpoints(*valid[m].e, p0, p1)) return {}; + int a = node_id(p0), b = node_id(p1); + node_deg[a]++; node_deg[b]++; + ms.push_back({m, a, b}); + } + + // Traverse: begin at a degree-1 node for an open chain, else at any member, then + // repeatedly take the unused member sharing the current open node. + std::vector order; + order.reserve(ms.size()); + std::vector used(ms.size(), 0); + size_t start = 0; + for (size_t i = 0; i < ms.size(); ++i) + if (node_deg[ms[i].a] == 1 || node_deg[ms[i].b] == 1) { start = i; break; } + const int start_node = (node_deg[ms[start].a] == 1) ? ms[start].a + : (node_deg[ms[start].b] == 1) ? ms[start].b + : ms[start].a; + int open = start_node; + for (;;) { + size_t next = ms.size(); + for (size_t k = 0; k < ms.size(); ++k) { + if (used[k]) continue; + if (ms[k].a == open || ms[k].b == open) { next = k; break; } + } + if (next == ms.size()) break; + order.push_back(next); + used[next] = 1; + open = (ms[next].a == open) ? ms[next].b : ms[next].a; + } + if (order.size() != ms.size()) return {}; + + // The walk ends on the node it could not leave; that node equals the starting + // node exactly when the chain is a closed cycle. When closed_only is set, an open + // chain is DISCARDED (skipped), never an error: the viewport discards open chains + // when it decides a region is extrudable (region_loops exists to find EXTRUDABLE + // regions), so the kernel must discard them too, or the two disagree about what + // belongs to the profile and a stray click breaks a feature that looks perfect on + // screen. Reuses the welded node ids — no second tolerance. + // A component is OPEN exactly when some welded node has only one edge on it — + // that free endpoint is where the chain stops. Do NOT define it as "the walk + // returned to its starting node": a legitimately closed loop that also carries an + // extra edge between two of its nodes (a bridge added across a C profile, so the + // gap is spanned twice) has no free endpoint but its Eulerian walk still ends + // somewhere else, and that definition discarded it. Degree-1 is the property that + // actually distinguishes a stray segment from a closed profile. + if (closed_only) { + bool has_free_end = false; + for (const Member& mm : ms) + if (node_deg[mm.a] == 1 || node_deg[mm.b] == 1) { has_free_end = true; break; } + if (has_free_end) continue; + } + + // One TopoDS_Vertex per node at the welded world point. Tolerance widened to + // `tol` because MakeEdge(curve, va, vb) projects each vertex onto the + // curve within the vertex tolerance (BRepLib_MakeEdge::Init), and a welded node + // can be up to the weld gap off another entity's curve. OCCT must never be handed + // a zero vertex tolerance, so clamp at Precision::Confusion() when tol == 0. + std::vector verts(node_pt.size()); + BRep_Builder B; + for (size_t i = 0; i < node_pt.size(); ++i) { + Vec3d w = plane.to_world(node_pt[i]); + verts[i] = BRepBuilderAPI_MakeVertex(gp_Pnt(w.x(), w.y(), w.z())).Vertex(); + B.UpdateVertex(verts[i], std::max(tol, Precision::Confusion())); + } + + for (size_t o : order) { + const Member& mm = ms[o]; + const SketchEntity* e = valid[mm.v].e; + const TopoDS_Vertex& va = verts[mm.a]; + const TopoDS_Vertex& vb = verts[mm.b]; + if (e->type == SketchEntity::Type::Line) { + wm.Add(BRepBuilderAPI_MakeEdge(va, vb).Edge()); + } else if (e->type == SketchEntity::Type::EllipseArc) { + if (e->radius <= 1e-9 || e->rminor <= 1e-9) return {}; + GC_MakeArcOfEllipse arc_maker(make_elips(*e), e->start_angle, e->end_angle, Standard_True); + if (!arc_maker.IsDone()) return {}; + wm.Add(BRepBuilderAPI_MakeEdge(arc_maker.Value(), va, vb).Edge()); + } else if (e->type == SketchEntity::Type::Arc) { + Vec3d p0 = plane.to_world(e->p0); + Vec3d p1 = plane.to_world(e->p1); + double mid_angle = (e->start_angle + e->end_angle) * 0.5; + Vec2d mid_2d(e->center.x() + e->radius * std::cos(mid_angle), + e->center.y() + e->radius * std::sin(mid_angle)); + Vec3d mid_3d = plane.to_world(mid_2d); + gp_Pnt pa(p0.x(), p0.y(), p0.z()); + gp_Pnt pm(mid_3d.x(), mid_3d.y(), mid_3d.z()); + gp_Pnt pb(p1.x(), p1.y(), p1.z()); + GC_MakeArcOfCircle arc_maker(pa, pm, pb); + if (!arc_maker.IsDone()) return {}; + Handle(Geom_TrimmedCurve) curve = arc_maker.Value(); + wm.Add(BRepBuilderAPI_MakeEdge(curve, va, vb).Edge()); + } else if (e->type == SketchEntity::Type::BSpline) { + Handle(Geom_BSplineCurve) crv = make_bspline(*e); + if (crv.IsNull()) return {}; + wm.Add(BRepBuilderAPI_MakeEdge(crv, va, vb).Edge()); + } + } + } + wm.Build(); + // IsDone() reflects only the LAST Add: BRepLib_MakeWire::Add sets BRepLib_DisconnectedWire + // + NotDone() and returns on a disconnected edge (dropping it), but every successful Add + // finishes with BRepLib_WireDone + Done(), overwriting that failure (BRepLib_MakeWire.cxx). + // So dropped edges go unnoticed — count the edges actually in the wire instead. + if (!wm.IsDone()) return {}; + const TopoDS_Wire wire = wm.Wire(); + size_t edge_count = 0; + for (TopExp_Explorer ex(wire, TopAbs_EDGE); ex.More(); ex.Next()) ++edge_count; + if (edge_count != (loop.closed_single ? 1 : loop.members.size())) return {}; + out.push_back(wire); + } + return out; +} + +TopoDS_Wire SketchEngine::entities_to_wire(const std::vector& entities, + const SketchPlane& plane, + bool closed_only) +{ + const std::vector w = entities_to_wires(entities, plane, closed_only); + return w.size() == 1 ? w[0] : TopoDS_Wire{}; +} + +std::vector sketch_open_ends(const std::vector& entities, + const SketchPlane& /*plane*/) +{ + const double tol = sketch_join_tol(); + + auto is_chain = [](const SketchEntity& e) { + return e.type == SketchEntity::Type::Line || e.type == SketchEntity::Type::Arc || + e.type == SketchEntity::Type::EllipseArc || e.type == SketchEntity::Type::BSpline; + }; + auto endpoints = [](const SketchEntity& e, Vec2d& a, Vec2d& b) -> bool { + if (e.type == SketchEntity::Type::BSpline) { + if (e.ctrl.size() < 2) return false; + a = e.ctrl.front(); b = e.ctrl.back(); + return true; + } + a = e.p0; b = e.p1; + return true; + }; + + // Weld every chain endpoint into a shared node under the SAME tolerance the wire + // build uses, then report the degree-1 nodes: they are where a chain fails to close. + // Circle/Ellipse are always closed and contribute no endpoint. + std::vector node_pt; + std::vector node_deg; + auto node_id = [&](const Vec2d& p) -> int { + for (size_t i = 0; i < node_pt.size(); ++i) + if ((node_pt[i] - p).norm() <= tol) return int(i); + node_pt.push_back(p); + node_deg.push_back(0); + return int(node_pt.size()) - 1; + }; + + for (const SketchEntity& e : entities) { + if (e.construction) continue; + if (!is_chain(e)) continue; + Vec2d a, b; + if (!endpoints(e, a, b)) continue; + int ia = node_id(a), ib = node_id(b); + node_deg[ia]++; + node_deg[ib]++; + } + + std::vector out; + for (size_t i = 0; i < node_pt.size(); ++i) + if (node_deg[i] == 1) out.push_back(node_pt[i]); + return out; +} + +TopoDS_Face SketchEngine::wires_to_face(const std::vector& wires, + const SketchPlane& plane) +{ + if (wires.empty()) throw std::runtime_error("sketch has no closed loop"); + + // The ASSEMBLED face below is built on the SKETCH's own plane rather than on a surface OCCT + // infers from the outer wire. The inferred plane has no reason to share the sketch's normal, + // and when they disagree the hole classification produces no hole: a plate sketched on a + // plane whose normal points -Z came out as the full box PLUS a disc (measured 220274 mm3 + // where 163726 was due — 192000 box + 28274 disc). `plane` was a parameter this function + // never used. Only the assembly is named: the single-wire and per-wire-area builds keep the + // inferred surface, because naming a plane also makes MakeFace accept a wire that does not + // bound a face, and that failure is the check an open stray line is caught by. + const gp_Pln pln(gp_Pnt(plane.origin.x(), plane.origin.y(), plane.origin.z()), + gp_Dir(plane.normal.x(), plane.normal.y(), plane.normal.z())); + + if (wires.size() == 1) { + BRepBuilderAPI_MakeFace fm(wires[0]); + if (!fm.IsDone()) throw std::runtime_error("sketch loop does not bound a face"); + return fm.Face(); + } + + // Two or more loops: build a face per wire and let the largest area be the outer + // boundary; every other loop is a candidate hole inside it. + std::vector faces; + faces.reserve(wires.size()); + std::vector areas; + areas.reserve(wires.size()); + for (const TopoDS_Wire& w : wires) { + BRepBuilderAPI_MakeFace fm(w); + if (!fm.IsDone()) throw std::runtime_error("sketch loop does not bound a face"); + faces.push_back(fm.Face()); + GProp_GProps props; + BRepGProp::SurfaceProperties(faces.back(), props); + areas.push_back(props.Mass()); + } + + size_t outer = 0; + for (size_t i = 1; i < areas.size(); ++i) + if (areas[i] > areas[outer]) outer = i; + + // Note: NOT MakeFace(faces[outer], wires[outer]) — that constructor copies the outer face + // (including its existing boundary wire) and then adds the wire again, doubling the outer + // boundary. The wire-only constructor starts clean and the reversed holes follow. + BRepBuilderAPI_MakeFace fm(pln, wires[outer]); + for (size_t i = 0; i < wires.size(); ++i) { + if (i == outer) continue; + // Containment is checked, not assumed: a vertex of the inner wire must lie strictly + // inside the outer face. A loop outside the largest one is a second island, not a hole. + gp_Pnt p; + bool got = false; + for (TopExp_Explorer ex(wires[i], TopAbs_VERTEX); ex.More(); ex.Next()) { + p = BRep_Tool::Pnt(TopoDS::Vertex(ex.Current())); + got = true; + break; + } + if (!got) throw std::runtime_error("sketch loop does not bound a face"); + BRepClass_FaceClassifier fc(faces[outer], p, 1e-7); + if (fc.State() != TopAbs_IN) + throw std::runtime_error("sketch has two disjoint regions; put each in its own sketch"); + // Add the hole loop AS-IS and let ShapeFix_Face sort the orientations out below. + // Reversing it here only works when the sketch happened to wind both loops the same + // way: a circle drawn clockwise inside a counter-clockwise rectangle comes out matching + // the outer boundary, OCCT sweeps it as a second contour, and the prism is the plate + // with the bore FILLED and the disc's volume counted twice. Measured on the rig: + // bbox 67.17 x 219.67 x 10 (the whole plate) with volume 152088 mm3 against a solid-box + // 147520 — a body larger than its own bounding box, which is the signature of it. + fm.Add(wires[i]); + } + if (!fm.IsDone()) throw std::runtime_error("sketch loop does not bound a face"); + // Winding-independent classification of outer vs holes — the same idiom make_extrude_regions + // already uses for imported glyphs, which is why holed TEXT extruded correctly all along + // while a holed SKETCH did not. + ShapeFix_Face sff(fm.Face()); + sff.FixOrientation(); + return sff.Face(); +} + +std::vector SketchEngine::mirror_entities( + const std::vector& src, const Vec2d& a, const Vec2d& b) +{ + Vec2d dir = b - a; + if (dir.norm() < 1e-12) + return src; + + dir.normalize(); + + auto reflect = [&](const Vec2d& p) -> Vec2d { + Vec2d v = p - a; + return a + (2.0 * v.dot(dir)) * dir - v; + }; + + std::vector out; + out.reserve(src.size()); + + for (const auto& e : src) { + SketchEntity m = e; + switch (e.type) { + case SketchEntity::Type::Line: + m.p0 = reflect(e.p0); + m.p1 = reflect(e.p1); + break; + case SketchEntity::Type::Point: + m.p0 = reflect(e.p0); + break; + case SketchEntity::Type::Circle: + m.center = reflect(e.center); + m.p0 = m.center; + break; + case SketchEntity::Type::Arc: { + m.p0 = reflect(e.p0); + m.p1 = reflect(e.p1); + m.center = reflect(e.center); + + const Vec2d& c = m.center; + m.start_angle = std::atan2(m.p0.y() - c.y(), m.p0.x() - c.x()); + double raw_end = std::atan2(m.p1.y() - c.y(), m.p1.x() - c.x()); + + double s = e.end_angle - e.start_angle; + + double sweep = raw_end - m.start_angle; + while (sweep <= -2.0 * M_PI) sweep += 2.0 * M_PI; + while (sweep >= 2.0 * M_PI) sweep -= 2.0 * M_PI; + + if (s != 0.0 && sweep * s > 0.0) { + if (sweep > 0.0) + sweep -= 2.0 * M_PI; + else + sweep += 2.0 * M_PI; + } + + m.end_angle = m.start_angle + sweep; + m.radius = e.radius; + break; + } + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: { + m.center = reflect(e.center); + // Reflect the major-axis direction; a/b unchanged. + const Vec2d majdir(std::cos(e.rotation), std::sin(e.rotation)); + const Vec2d rdir = reflect(e.center + majdir) - m.center; + m.rotation = std::atan2(rdir.y(), rdir.x()); + if (e.type == SketchEntity::Type::Ellipse) { + m.p0 = m.center; + } else { + m.p0 = reflect(e.p0); + m.p1 = reflect(e.p1); + // Reflection reverses orientation: recompute parametric angles in + // the reflected frame, original end -> new start (CCW sense kept). + auto param = [&](const Vec2d& P) { + const Vec2d d = P - m.center; + const double cu = std::cos(m.rotation), su = std::sin(m.rotation); + const double u = d.x() * cu + d.y() * su; + const double v = -d.x() * su + d.y() * cu; + return std::atan2(v / std::max(e.rminor, 1e-9), u / std::max(e.radius, 1e-9)); + }; + m.start_angle = param(m.p1); + m.end_angle = param(m.p0); + } + break; + } + case SketchEntity::Type::BSpline: + for (auto& cp : m.ctrl) cp = reflect(cp); + m.p0 = reflect(e.p0); + m.p1 = reflect(e.p1); + break; + } + out.push_back(m); + } + + // A REFLECTION REVERSES ORIENTATION, so the reflected half is handed back reversed — in + // order, and each entity flipped — or it does not CONTINUE the chain it was made from. + // + // Draw half a stadium left-to-right along the bottom, round the cap, right-to-left along the + // top, ending at (0, R). Reflecting each entity in place gives a half whose top run STARTS at + // (-L, R) and ENDS at (0, R): it meets the original head-to-head, not head-to-tail. Every + // consumer that walks the loop then has to cope, and two already had to be taught — the loop + // area cancelled its own arc correction against the negated sweep, and offset put the + // reflected half on the wrong side because it read each entity's STORED direction. Reversed + // here, the two halves are one walkable chain and a mirrored CCW loop stays CCW. + std::reverse(out.begin(), out.end()); + for (SketchEntity& m : out) { + switch (m.type) { + case SketchEntity::Type::Line: + std::swap(m.p0, m.p1); + break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + std::swap(m.p0, m.p1); + std::swap(m.start_angle, m.end_angle); // what "walked the other way" means + break; + case SketchEntity::Type::BSpline: + std::swap(m.p0, m.p1); + std::reverse(m.ctrl.begin(), m.ctrl.end()); + break; + default: + break; // circle, ellipse, point: no direction to reverse + } + } + + return out; +} + +// ---- offset: chain-aware, with corner repair ------------------------------- +// +// Offsetting each entity on its own is geometrically correct per entity and USELESS as a +// sketch operation: a closed rectangle offset that way comes back as four parallel segments +// that no longer touch, so the result is four open wires and nothing can be extruded from it +// (measured — tests/libslic3r/test_sketchprofile.cpp). A profile is a chain, and the property +// that has to survive the operation is the chain, not the individual coordinates. +// +// So the offset runs in three steps: split the input into chains of entities joined by shared +// endpoints; offset every entity in a chain; then repair each seam by trimming/extending the +// two neighbours to the intersection of their offset supports (a miter join). Closed chains +// get their last-to-first seam repaired too, which is what makes the result closed again. +namespace { + +constexpr double kOffJoinEps = 1e-6; + +bool off_same(const Vec2d& a, const Vec2d& b) { return (a - b).squaredNorm() < kOffJoinEps * kOffJoinEps; } + +// Does this entity type take part in chaining (i.e. does it have two ends)? +bool off_is_open_curve(const SketchEntity& e) +{ + return e.type == SketchEntity::Type::Line || e.type == SketchEntity::Type::Arc; +} + +// Infinite-support intersections. Each returns the candidate closest to `seed`, which is where +// the seam is expected to land, so the branch choice never depends on entity orientation. +bool off_pick(const std::vector& cands, const Vec2d& seed, Vec2d& out) +{ + if (cands.empty()) return false; + double best = std::numeric_limits::max(); + for (const Vec2d& c : cands) { + const double d = (c - seed).squaredNorm(); + if (d < best) { best = d; out = c; } + } + return true; +} + +bool off_line_line(const Vec2d& a0, const Vec2d& a1, const Vec2d& b0, const Vec2d& b1, + const Vec2d& seed, Vec2d& out) +{ + const Vec2d da = a1 - a0, db = b1 - b0; + const double den = da.x() * db.y() - da.y() * db.x(); + if (std::abs(den) < 1e-12) return false; // parallel: no miter exists + const Vec2d w = b0 - a0; + const double t = (w.x() * db.y() - w.y() * db.x()) / den; + out = a0 + t * da; + (void)seed; + return true; +} + +std::vector off_line_circle(const Vec2d& p0, const Vec2d& p1, const Vec2d& c, double r) +{ + std::vector out; + Vec2d d = p1 - p0; + const double dd = d.squaredNorm(); + if (dd < 1e-18 || r <= 0.0) return out; + const Vec2d f = p0 - c; + const double b = 2.0 * f.dot(d), cc = f.squaredNorm() - r * r; + const double disc = b * b - 4.0 * dd * cc; + if (disc < 0.0) return out; + const double sq = std::sqrt(disc); + out.push_back(p0 + ((-b - sq) / (2.0 * dd)) * d); + out.push_back(p0 + ((-b + sq) / (2.0 * dd)) * d); + return out; +} + +std::vector off_circle_circle(const Vec2d& c0, double r0, const Vec2d& c1, double r1) +{ + std::vector out; + const Vec2d d = c1 - c0; + const double L = d.norm(); + if (L < 1e-12 || L > r0 + r1 || L < std::abs(r0 - r1)) return out; + const double a = (r0 * r0 - r1 * r1 + L * L) / (2.0 * L); + const double h2 = r0 * r0 - a * a; + const double h = h2 > 0.0 ? std::sqrt(h2) : 0.0; + const Vec2d u = d / L, n(-u.y(), u.x()); + out.push_back(c0 + a * u + h * n); + out.push_back(c0 + a * u - h * n); + return out; +} + +// Move one end of an entity to `q`, keeping the entity's kind consistent (an arc re-derives +// the parametric angle from its centre, and its sweep direction is preserved). +void off_set_end(SketchEntity& e, bool at_end, const Vec2d& q) +{ + if (e.type == SketchEntity::Type::Line) { + (at_end ? e.p1 : e.p0) = q; + return; + } + if (e.type != SketchEntity::Type::Arc) return; + const bool ccw = e.end_angle >= e.start_angle; + const double ang = std::atan2(q.y() - e.center.y(), q.x() - e.center.x()); + if (at_end) { + e.p1 = q; + double a = ang; + if (ccw) { while (a < e.start_angle) a += 2.0 * M_PI; while (a - e.start_angle > 2.0 * M_PI) a -= 2.0 * M_PI; } + else { while (a > e.start_angle) a -= 2.0 * M_PI; while (e.start_angle - a > 2.0 * M_PI) a += 2.0 * M_PI; } + e.end_angle = a; + } else { + e.p0 = q; + double a = ang; + if (ccw) { while (a > e.end_angle) a -= 2.0 * M_PI; while (e.end_angle - a > 2.0 * M_PI) a += 2.0 * M_PI; } + else { while (a < e.end_angle) a += 2.0 * M_PI; while (a - e.end_angle > 2.0 * M_PI) a -= 2.0 * M_PI; } + e.start_angle = a; + } +} + +// Offset ONE entity, unrepaired. Returns false for the kinds v1 does not offset. +bool off_one(const SketchEntity& e, double d, SketchEntity& out) +{ + switch (e.type) { + case SketchEntity::Type::Line: { + Vec2d t = e.p1 - e.p0; + if (t.norm() < 1e-12) return false; + t.normalize(); + const Vec2d n(-t.y(), t.x()); + out = e; + out.p0 = e.p0 + d * n; + out.p1 = e.p1 + d * n; + return true; + } + case SketchEntity::Type::Circle: { + const double r = e.radius + d; + if (r <= 1e-9) return false; + out = e; out.radius = r; out.p0 = out.center; + return true; + } + case SketchEntity::Type::Arc: { + // Same convention as the Line above: +d moves the curve to the LEFT of its direction + // of travel. For a CCW arc the left side is the inside, so the radius SHRINKS; for a + // CW arc it grows. Reading the sign off the sweep is what keeps a stadium outline + // (lines + caps) offsetting as one body instead of the lines going one way and the + // caps the other — which is what a plain `radius + d` did. + const double sgn = (e.end_angle >= e.start_angle) ? -1.0 : 1.0; + const double r = e.radius + sgn * d; + if (r <= 1e-9) return false; + out = e; + out.radius = r; + out.p0 = e.center + r * Vec2d(std::cos(e.start_angle), std::sin(e.start_angle)); + out.p1 = e.center + r * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle)); + return true; + } + default: + // Point has nothing to offset; a true parallel of an ellipse is not an ellipse and of a + // spline is not a same-degree spline, so both stay out of v1 rather than lie about it. + return false; + } +} + +// Repair the seam between `a`'s end and `b`'s start: both are trimmed/extended to the +// intersection of their infinite supports nearest the gap. Returns false when no such point +// exists (parallel lines, non-intersecting circles), in which case the seam stays open. +bool off_join(SketchEntity& a, SketchEntity& b) +{ + const Vec2d seed = 0.5 * (a.p1 + b.p0); + Vec2d q; + const bool aL = a.type == SketchEntity::Type::Line; + const bool bL = b.type == SketchEntity::Type::Line; + if (aL && bL) { + if (!off_line_line(a.p0, a.p1, b.p0, b.p1, seed, q)) return false; + } else if (aL) { + if (!off_pick(off_line_circle(a.p0, a.p1, b.center, b.radius), seed, q)) return false; + } else if (bL) { + if (!off_pick(off_line_circle(b.p0, b.p1, a.center, a.radius), seed, q)) return false; + } else { + if (!off_pick(off_circle_circle(a.center, a.radius, b.center, b.radius), seed, q)) return false; + } + off_set_end(a, true, q); + off_set_end(b, false, q); + return true; +} + +// Normalise an entity that was offset while traversed REVERSED to head-to-tail traversal order: +// swap its stored ends so p0 is the traversal start and p1 the traversal end. An arc must swap +// its stored sweep too, because "traversed the other way" reverses the stored sweep direction. +void off_reverse(SketchEntity& e) +{ + std::swap(e.p0, e.p1); + if (e.type == SketchEntity::Type::Arc) + std::swap(e.start_angle, e.end_angle); +} + +} // namespace + +std::vector SketchEngine::offset_entities( + const std::vector& src, double d) +{ + std::vector out; + + // Closed and unchainable kinds first: they carry no seams, so they pass straight through. + std::vector open_idx; + for (int i = 0; i < int(src.size()); ++i) { + if (off_is_open_curve(src[i])) { open_idx.push_back(i); continue; } + SketchEntity o; + if (off_one(src[i], d, o)) out.push_back(o); + } + + std::vector used(open_idx.size(), false); + + // Stored endpoints of the k-th open entity. + auto ends = [&](int k, Vec2d& p0, Vec2d& p1) { p0 = src[open_idx[k]].p0; p1 = src[open_idx[k]].p1; }; + + // An endpoint shared by no OTHER unused open curve is a FREE end: the loose end of an open + // chain rather than a seam. (`used` matters — entities already pulled into a chain must not + // count, otherwise the far end of the chain we just walked would look shared.) + auto is_free = [&](int k, const Vec2d& pt) { + for (size_t j = 0; j < open_idx.size(); ++j) { + if (int(j) == k || used[j]) continue; + Vec2d q0, q1; ends(int(j), q0, q1); + if (off_same(pt, q0) || off_same(pt, q1)) return false; + } + return true; + }; + + struct Chain { + std::vector> items; // (entity index, reversed) + Vec2d start, end; // traversal start/end points + }; + + // Walk one chain from the unused seed `s`, traversing AWAY from its free end. `reversed` + // means the traversal enters at the entity's p1 and leaves at its p0, i.e. the entity is + // travelled opposite to its STORED direction. An entity whose p1 is free (but p0 is not) + // is the head of an open chain and must start reversed; an isolated entity or a closed + // loop starts forward. + auto walk = [&](int s) -> Chain { + Chain c; + Vec2d s0, s1; ends(s, s0, s1); + const bool rev = !is_free(s, s0) && is_free(s, s1); + c.items.emplace_back(s, rev); + used[s] = true; + c.start = rev ? s1 : s0; + c.end = rev ? s0 : s1; + for (;;) { + int nxt = -1; + bool nrev = false; + for (size_t j = 0; j < open_idx.size(); ++j) { + if (used[j]) continue; + Vec2d q0, q1; ends(int(j), q0, q1); + if (off_same(c.end, q0)) { nxt = int(j); nrev = false; break; } + if (off_same(c.end, q1)) { nxt = int(j); nrev = true; break; } + } + if (nxt < 0) break; + c.items.emplace_back(nxt, nrev); + used[nxt] = true; + Vec2d q0, q1; ends(nxt, q0, q1); + c.end = nrev ? q0 : q1; + } + return c; + }; + + // Offset one chain as traversed: every entity is offset with an EFFECTIVE distance that + // already accounts for how it was walked, then reversed entities have their stored ends + // swapped so the emitted chain is head-to-tail in traversal order (which is what keeps the + // seam repair below — and any later offset/mirror — well-oriented). A chain whose final + // traversal end coincides with its first traversal start is CLOSED. + auto emit = [&](const Chain& c) { + const bool closed = c.items.size() > 1 && off_same(c.end, c.start); + std::vector off; + off.reserve(c.items.size()); + for (const auto& it : c.items) { + // A reversed entity offsets with -d rather than +d: + // * a line walked backwards has its left-hand side on the other side, so -d; + // * an arc walked backwards has its sweep sign effectively flipped, which is exactly + // the `sgn` term off_one reads, so -d again. + const double ed = it.second ? -d : d; + SketchEntity o; + if (!off_one(src[open_idx[it.first]], ed, o)) continue; + if (it.second) off_reverse(o); + off.push_back(o); + } + if (off.empty()) return; + for (size_t i = 0; i + 1 < off.size(); ++i) off_join(off[i], off[i + 1]); + if (closed && off.size() > 1) off_join(off.back(), off.front()); + for (auto& o : off) out.push_back(o); + }; + + // Pass 1: open chains, seeded at a free end so they are never entered mid-way (which would + // split one open chain in two and lose a seam). + for (size_t s = 0; s < open_idx.size(); ++s) { + if (used[s]) continue; + Vec2d s0, s1; ends(int(s), s0, s1); + if (!is_free(int(s), s0) && !is_free(int(s), s1)) continue; + emit(walk(int(s))); + } + // Pass 2: what is left has no free end and is a CLOSED loop; start anywhere, forward. + for (size_t s = 0; s < open_idx.size(); ++s) { + if (used[s]) continue; + emit(walk(int(s))); + } + + return out; +} + +std::vector SketchEngine::array_entities( + const std::vector& src, int count, + const Vec2d& step, double angle_step, const Vec2d& pivot) +{ + std::vector out; + if (count < 2) return out; + + for (int i = 1; i < count; ++i) { + const double ang = i * angle_step; + const double ca = std::cos(ang), sa = std::sin(ang); + const Vec2d tr = double(i) * step; + // Rigid map: rotate about pivot by `ang`, then translate by `tr`. + auto xf = [&](const Vec2d& p) -> Vec2d { + const Vec2d d = p - pivot; + return Vec2d(pivot.x() + ca * d.x() - sa * d.y(), + pivot.y() + sa * d.x() + ca * d.y()) + tr; + }; + + for (const auto& e : src) { + SketchEntity m = e; // carry construction flag, radii, etc. + switch (e.type) { + case SketchEntity::Type::Line: + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + break; + case SketchEntity::Type::Point: + m.p0 = xf(e.p0); + break; + case SketchEntity::Type::Circle: + m.center = xf(e.center); m.p0 = m.center; // radius unchanged + break; + case SketchEntity::Type::Arc: { + m.center = xf(e.center); + m.start_angle = e.start_angle + ang; + m.end_angle = e.end_angle + ang; // rigid: sweep preserved + m.p0 = m.center + e.radius * Vec2d(std::cos(m.start_angle), std::sin(m.start_angle)); + m.p1 = m.center + e.radius * Vec2d(std::cos(m.end_angle), std::sin(m.end_angle)); + break; + } + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: + m.center = xf(e.center); + m.rotation = e.rotation + ang; // major axis rotates with the body + if (e.type == SketchEntity::Type::Ellipse) { + m.p0 = m.center; + } else { + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + // Parametric angles are in the (rotated) body frame -> unchanged. + } + break; + case SketchEntity::Type::BSpline: + for (auto& cp : m.ctrl) cp = xf(cp); + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + break; + } + out.push_back(m); + } + } + return out; +} + +std::vector SketchEngine::transform_entities( + const std::vector& src, + const Vec2d& move, double angle, double scale, const Vec2d& pivot) +{ + std::vector out; + out.reserve(src.size()); + const double ca = std::cos(angle), sa = std::sin(angle); + const double rs = std::abs(scale); // radii are unsigned magnitudes + // Affine map: translate pivot to origin, scale, rotate, then translate by `move`. + auto xf = [&](const Vec2d& p) -> Vec2d { + const Vec2d d = scale * (p - pivot); + return Vec2d(pivot.x() + ca * d.x() - sa * d.y(), + pivot.y() + sa * d.x() + ca * d.y()) + move; + }; + + for (const auto& e : src) { + SketchEntity m = e; // carry construction flag, etc. + switch (e.type) { + case SketchEntity::Type::Line: + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + break; + case SketchEntity::Type::Point: + m.p0 = xf(e.p0); + break; + case SketchEntity::Type::Circle: + m.center = xf(e.center); m.radius = e.radius * rs; m.p0 = m.center; + break; + case SketchEntity::Type::Arc: { + m.center = xf(e.center); + m.radius = e.radius * rs; + m.start_angle = e.start_angle + angle; + m.end_angle = e.end_angle + angle; // rigid sweep, shifted by rotation + m.p0 = m.center + m.radius * Vec2d(std::cos(m.start_angle), std::sin(m.start_angle)); + m.p1 = m.center + m.radius * Vec2d(std::cos(m.end_angle), std::sin(m.end_angle)); + break; + } + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: + m.center = xf(e.center); + m.radius = e.radius * rs; + m.rminor = e.rminor * rs; + m.rotation = e.rotation + angle; // major axis rotates with the body + if (e.type == SketchEntity::Type::Ellipse) { + m.p0 = m.center; + } else { + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + // Parametric angles live in the (rotated) body frame -> unchanged. + } + break; + case SketchEntity::Type::BSpline: + for (auto& cp : m.ctrl) cp = xf(cp); + m.p0 = xf(e.p0); m.p1 = xf(e.p1); + break; + } + out.push_back(m); + } + return out; +} + +bool SketchEngine::fillet_lines(const SketchEntity& a, const SketchEntity& b, double r, + SketchEntity& a_out, SketchEntity& b_out, SketchEntity& arc_out) +{ + if (a.type != SketchEntity::Type::Line || b.type != SketchEntity::Type::Line || r <= 1e-9) + return false; + + Vec2d da = a.p1 - a.p0; + Vec2d db = b.p1 - b.p0; + double denom = da.x() * db.y() - da.y() * db.x(); + if (std::abs(denom) < 1e-12) + return false; + + Vec2d diff = b.p0 - a.p0; + double s = (diff.x() * db.y() - diff.y() * db.x()) / denom; + Vec2d C = a.p0 + s * da; + + Vec2d ua; + int a_near_idx; + { + double d0 = (a.p0 - C).norm(); + double d1 = (a.p1 - C).norm(); + if (d0 <= d1) { + a_near_idx = 0; + ua = a.p1 - C; + } else { + a_near_idx = 1; + ua = a.p0 - C; + } + } + if (ua.norm() < 1e-12) return false; + ua.normalize(); + + Vec2d ub; + int b_near_idx; + { + double d0 = (b.p0 - C).norm(); + double d1 = (b.p1 - C).norm(); + if (d0 <= d1) { + b_near_idx = 0; + ub = b.p1 - C; + } else { + b_near_idx = 1; + ub = b.p0 - C; + } + } + if (ub.norm() < 1e-12) return false; + ub.normalize(); + + double cosT = ua.dot(ub); + cosT = std::max(-1.0, std::min(1.0, cosT)); + double theta = std::acos(cosT); + if (theta < 1e-6 || theta > M_PI - 1e-6) + return false; + + double t = r / std::tan(theta / 2.0); + { + Vec2d a_far = (a_near_idx == 0) ? a.p1 : a.p0; + Vec2d b_far = (b_near_idx == 0) ? b.p1 : b.p0; + if (t > (a_far - C).norm() || t > (b_far - C).norm()) + return false; + } + + Vec2d Ta = C + t * ua; + Vec2d Tb = C + t * ub; + + Vec2d bis = ua + ub; + if (bis.norm() < 1e-12) return false; + bis.normalize(); + + double dCO = r / std::sin(theta / 2.0); + Vec2d O = C + dCO * bis; + + a_out = a; + b_out = b; + if (a_near_idx == 0) + a_out.p0 = Ta; + else + a_out.p1 = Ta; + + if (b_near_idx == 0) + b_out.p0 = Tb; + else + b_out.p1 = Tb; + + arc_out = SketchEntity{}; + arc_out.type = SketchEntity::Type::Arc; + arc_out.center = O; + arc_out.radius = r; + arc_out.p0 = Ta; + arc_out.p1 = Tb; + arc_out.start_angle = std::atan2(Ta.y() - O.y(), Ta.x() - O.x()); + + double sb = std::atan2(Tb.y() - O.y(), Tb.x() - O.x()); + double sweep = sb - arc_out.start_angle; + while (sweep <= -M_PI) sweep += 2.0 * M_PI; + while (sweep > M_PI) sweep -= 2.0 * M_PI; + arc_out.end_angle = arc_out.start_angle + sweep; + + return true; +} + +bool SketchEngine::chamfer_lines(const SketchEntity& a, const SketchEntity& b, double d, + SketchEntity& a_out, SketchEntity& b_out, SketchEntity& seg_out) +{ + if (a.type != SketchEntity::Type::Line || b.type != SketchEntity::Type::Line || d <= 1e-9) + return false; + + Vec2d da = a.p1 - a.p0; + Vec2d db = b.p1 - b.p0; + double denom = da.x() * db.y() - da.y() * db.x(); + if (std::abs(denom) < 1e-12) + return false; // parallel: no corner to chamfer + + // Shared corner = line/line intersection. + Vec2d diff = b.p0 - a.p0; + double s = (diff.x() * db.y() - diff.y() * db.x()) / denom; + Vec2d C = a.p0 + s * da; + + // For each line, unit vector pointing from the corner toward its far endpoint + // (the endpoint that is kept); the near endpoint is the one trimmed back. + auto pick = [&](const SketchEntity& ln, int& near_idx, Vec2d& u) -> bool { + double d0 = (ln.p0 - C).norm(); + double d1 = (ln.p1 - C).norm(); + if (d0 <= d1) { near_idx = 0; u = ln.p1 - C; } + else { near_idx = 1; u = ln.p0 - C; } + if (u.norm() < 1e-12) return false; + u.normalize(); + return true; + }; + int a_near_idx, b_near_idx; + Vec2d ua, ub; + if (!pick(a, a_near_idx, ua)) return false; + if (!pick(b, b_near_idx, ub)) return false; + + // Reject collinear (no real corner) and ensure the setback fits both lines. + double cosT = std::max(-1.0, std::min(1.0, ua.dot(ub))); + if (cosT > 1.0 - 1e-9 || cosT < -1.0 + 1e-9) + return false; + { + Vec2d a_far = (a_near_idx == 0) ? a.p1 : a.p0; + Vec2d b_far = (b_near_idx == 0) ? b.p1 : b.p0; + if (d > (a_far - C).norm() || d > (b_far - C).norm()) + return false; + } + + Vec2d Ta = C + d * ua; + Vec2d Tb = C + d * ub; + + a_out = a; + b_out = b; + if (a_near_idx == 0) a_out.p0 = Ta; else a_out.p1 = Ta; + if (b_near_idx == 0) b_out.p0 = Tb; else b_out.p1 = Tb; + + seg_out = SketchEntity{}; + seg_out.type = SketchEntity::Type::Line; + seg_out.p0 = Ta; + seg_out.p1 = Tb; + return true; +} + +static std::vector line_entity_hits(const Vec2d& a0, const Vec2d& adir, + const SketchEntity& other) +{ + std::vector hits; + double La2 = adir.dot(adir); + if (La2 < 1e-18) return hits; + + switch (other.type) { + case SketchEntity::Type::Line: { + Vec2d bdir = other.p1 - other.p0; + double bxa = bdir.x() * adir.y() - bdir.y() * adir.x(); + if (std::abs(bxa) < 1e-12) return hits; + + Vec2d w = a0 - other.p0; + double u = (w.x() * adir.y() - w.y() * adir.x()) / bxa; + if (u < -1e-9 || u > 1.0 + 1e-9) return hits; + + double axb = adir.x() * bdir.y() - adir.y() * bdir.x(); + Vec2d w2 = other.p0 - a0; + double t = (w2.x() * bdir.y() - w2.y() * bdir.x()) / axb; + hits.push_back(t); + break; + } + case SketchEntity::Type::Circle: + case SketchEntity::Type::Arc: { + double R = other.radius; + Vec2d f = a0 - other.center; + double A = La2; + double B = 2.0 * adir.dot(f); + double Cc = f.dot(f) - R * R; + double disc = B * B - 4.0 * A * Cc; + if (disc < -1e-12) return hits; + if (disc < 0.0) disc = 0.0; + double sq = std::sqrt(disc); + double t1 = (-B - sq) / (2.0 * A); + double t2 = (-B + sq) / (2.0 * A); + + auto angle_in_sweep = [&](const Vec2d& P) -> bool { + double phi = std::atan2(P.y() - other.center.y(), P.x() - other.center.x()); + double sweep = other.end_angle - other.start_angle; + double delta = phi - other.start_angle; + if (sweep >= 0.0) { + while (delta < -1e-9) delta += 2.0 * M_PI; + while (delta > 2.0 * M_PI) delta -= 2.0 * M_PI; + return delta <= sweep + 1e-9; + } else { + while (delta > 1e-9) delta -= 2.0 * M_PI; + while (delta < -2.0 * M_PI) delta += 2.0 * M_PI; + return delta >= sweep - 1e-9; + } + }; + + auto check = [&](double t) { + Vec2d P = a0 + t * adir; + if (other.type == SketchEntity::Type::Circle || angle_in_sweep(P)) + hits.push_back(t); + }; + + check(t1); + if (disc > 1e-12) + check(t2); + break; + } + default: + break; + } + + return hits; +} + +// Angles (atan2, radians) where `other` crosses the circle of radius R about C. +// For Arc/Circle cutters the crossing point must lie within the cutter's own +// sweep (a full circle always qualifies). Powers arc/circle-subject trim/extend, +// where the subject is parametrized by angle rather than by a line ray param. +static std::vector circle_cross_angles(const Vec2d& C, double R, + const SketchEntity& other) +{ + std::vector out; + if (R < 1e-12) return out; + + auto on_other = [&](const Vec2d& P) -> bool { + switch (other.type) { + case SketchEntity::Type::Line: { + Vec2d d = other.p1 - other.p0; + double L2 = d.dot(d); + if (L2 < 1e-18) return false; + double u = (P - other.p0).dot(d) / L2; + return u > -1e-9 && u < 1.0 + 1e-9; + } + case SketchEntity::Type::Circle: + return true; + case SketchEntity::Type::Arc: { + double phi = std::atan2(P.y() - other.center.y(), P.x() - other.center.x()); + double sweep = other.end_angle - other.start_angle; + double delta = phi - other.start_angle; + if (sweep >= 0.0) { + while (delta < -1e-9) delta += 2.0 * M_PI; + while (delta > 2.0 * M_PI) delta -= 2.0 * M_PI; + return delta <= sweep + 1e-9; + } else { + while (delta > 1e-9) delta -= 2.0 * M_PI; + while (delta < -2.0 * M_PI) delta += 2.0 * M_PI; + return delta >= sweep - 1e-9; + } + } + default: + return false; + } + }; + auto add = [&](const Vec2d& P) { + out.push_back(std::atan2(P.y() - C.y(), P.x() - C.x())); + }; + + switch (other.type) { + case SketchEntity::Type::Line: { + Vec2d a0 = other.p0, adir = other.p1 - other.p0; + double A = adir.dot(adir); + if (A < 1e-18) break; + Vec2d f = a0 - C; + double B = 2.0 * adir.dot(f); + double Cc = f.dot(f) - R * R; + double disc = B * B - 4.0 * A * Cc; + if (disc < 0.0) break; + double sq = std::sqrt(disc); + Vec2d P1 = a0 + ((-B - sq) / (2.0 * A)) * adir; + if (on_other(P1)) add(P1); + if (disc > 1e-12) { + Vec2d P2 = a0 + ((-B + sq) / (2.0 * A)) * adir; + if (on_other(P2)) add(P2); + } + break; + } + case SketchEntity::Type::Circle: + case SketchEntity::Type::Arc: { + Vec2d C2 = other.center; + double R2 = other.radius; + Vec2d d = C2 - C; + double dd = d.norm(); + if (dd < 1e-12) break; // concentric + if (dd > R + R2 + 1e-9) break; // too far apart + if (dd < std::abs(R - R2) - 1e-9) break; // one circle inside the other + double a = (R * R - R2 * R2 + dd * dd) / (2.0 * dd); + double h2 = R * R - a * a; + if (h2 < 0.0) h2 = 0.0; + double h = std::sqrt(h2); + Vec2d mid = C + (a / dd) * d; + Vec2d perp(-d.y() / dd, d.x() / dd); + Vec2d P1 = mid + h * perp; + if (on_other(P1)) add(P1); + if (h > 1e-12) { + Vec2d P2 = mid - h * perp; + if (on_other(P2)) add(P2); + } + break; + } + default: + break; + } + return out; +} + +// Wrap x into [0, 2pi). +static double wrap_2pi(double x) +{ + while (x < 0.0) x += 2.0 * M_PI; + while (x >= 2.0 * M_PI) x -= 2.0 * M_PI; + return x; +} + +bool SketchEngine::trim_entity(SketchEntity& e, const std::vector& others, + const Vec2d& pick) +{ + // Arc subject: parametrize by sweep fraction u in [0,1]; cut on the picked side. + if (e.type == SketchEntity::Type::Arc) { + double sweep = e.end_angle - e.start_angle; + if (std::abs(sweep) < 1e-12) return false; + double phi_pick = std::atan2(pick.y() - e.center.y(), pick.x() - e.center.x()); + double u_pick = (phi_pick - e.start_angle) / sweep; + // Bring the pick onto the arc's [0,1] domain. + while (u_pick < -1e-9) u_pick += (2.0 * M_PI) / std::abs(sweep); + u_pick = std::max(0.0, std::min(1.0, u_pick)); + + std::vector cuts; + for (const auto& other : others) { + for (double phi : circle_cross_angles(e.center, e.radius, other)) { + double u = (phi - e.start_angle) / sweep; + while (u < -1e-9) u += (2.0 * M_PI) / std::abs(sweep); + if (u > 1e-9 && u < 1.0 - 1e-9) cuts.push_back(u); + } + } + if (cuts.empty()) return false; + + if (u_pick <= 0.5) { + double uc = std::numeric_limits::max(); + for (double u : cuts) if (u > u_pick + 1e-9 && u < uc) uc = u; + if (uc == std::numeric_limits::max()) return false; + e.start_angle = e.start_angle + uc * sweep; // drop [0, uc) + } else { + double uc = -std::numeric_limits::max(); + for (double u : cuts) if (u < u_pick - 1e-9 && u > uc) uc = u; + if (uc == -std::numeric_limits::max()) return false; + e.end_angle = e.start_angle + uc * sweep; // drop (uc, 1] + } + return true; + } + + // Circle subject: trimming opens it into an Arc that excludes the picked gap. + if (e.type == SketchEntity::Type::Circle) { + std::vector ang; + for (const auto& other : others) + for (double phi : circle_cross_angles(e.center, e.radius, other)) + ang.push_back(wrap_2pi(phi)); + std::sort(ang.begin(), ang.end()); + ang.erase(std::unique(ang.begin(), ang.end(), + [](double a, double b){ return std::abs(a - b) < 1e-7; }), + ang.end()); + if (ang.size() < 2) return false; + + double pk = wrap_2pi(std::atan2(pick.y() - e.center.y(), pick.x() - e.center.x())); + const int n = int(ang.size()); + int idx = -1; + for (int i = 0; i < n; ++i) { + double lo = ang[i]; + double hi = (i + 1 < n) ? ang[i + 1] : ang[0] + 2.0 * M_PI; + double p = (pk < lo - 1e-12) ? pk + 2.0 * M_PI : pk; + if (p >= lo - 1e-12 && p < hi + 1e-12) { idx = i; break; } + } + if (idx < 0) return false; + double lo = ang[idx]; + double hi = (idx + 1 < n) ? ang[idx + 1] : ang[0] + 2.0 * M_PI; + // Keep the complement of the (lo,hi) gap: sweep ccw from hi back round to lo. + e.type = SketchEntity::Type::Arc; + e.start_angle = hi; + e.end_angle = lo + 2.0 * M_PI; + return true; + } + + if (e.type != SketchEntity::Type::Line) return false; + + Vec2d adir = e.p1 - e.p0; + double La2 = adir.dot(adir); + if (La2 < 1e-18) return false; + + double t_pick = (pick - e.p0).dot(adir) / La2; + t_pick = std::max(0.0, std::min(1.0, t_pick)); + + std::vector cuts; + for (const auto& other : others) { + auto h = line_entity_hits(e.p0, adir, other); + for (double t : h) { + if (t > 1e-9 && t < 1.0 - 1e-9) + cuts.push_back(t); + } + } + if (cuts.empty()) return false; + + if (t_pick <= 0.5) { + double tc = std::numeric_limits::max(); + for (double t : cuts) { + if (t > t_pick + 1e-9 && t < tc) + tc = t; + } + if (tc == std::numeric_limits::max()) return false; + e.p0 = e.p0 + tc * adir; + } else { + double tc = -std::numeric_limits::max(); + for (double t : cuts) { + if (t < t_pick - 1e-9 && t > tc) + tc = t; + } + if (tc == -std::numeric_limits::max()) return false; + e.p1 = e.p0 + tc * adir; + } + + return true; +} + +bool SketchEngine::extend_entity(SketchEntity& e, const std::vector& others, + const Vec2d& pick) +{ + // Arc subject: grow the sweep toward the picked end up to the nearest crossing, + // capped at a full turn so the arc never self-overlaps. (A Circle is already + // closed — nothing to extend.) + if (e.type == SketchEntity::Type::Arc) { + double sweep = e.end_angle - e.start_angle; + double mag = std::abs(sweep); + if (mag < 1e-12) return false; + double sgn = (sweep >= 0.0) ? 1.0 : -1.0; + double room = 2.0 * M_PI - mag; // max extra sweep before a full turn + if (room <= 1e-9) return false; + + double phi_pick = std::atan2(pick.y() - e.center.y(), pick.x() - e.center.x()); + double up = wrap_2pi(sgn * (phi_pick - e.start_angle)) / mag; // pick fraction on arc + const bool extend_end = (up > 0.5); + + double best = std::numeric_limits::max(); + for (const auto& other : others) { + for (double phi : circle_cross_angles(e.center, e.radius, other)) { + double adv = extend_end ? wrap_2pi(sgn * (phi - e.end_angle)) + : wrap_2pi(sgn * (e.start_angle - phi)); + if (adv > 1e-9 && adv <= room + 1e-9 && adv < best) best = adv; + } + } + if (best == std::numeric_limits::max()) return false; + if (extend_end) e.end_angle += sgn * best; + else e.start_angle -= sgn * best; + return true; + } + + if (e.type != SketchEntity::Type::Line) return false; + + Vec2d adir = e.p1 - e.p0; + double La2 = adir.dot(adir); + if (La2 < 1e-18) return false; + + double t_pick = (pick - e.p0).dot(adir) / La2; + + std::vector hits; + for (const auto& other : others) { + auto h = line_entity_hits(e.p0, adir, other); + hits.insert(hits.end(), h.begin(), h.end()); + } + if (hits.empty()) return false; + + if (t_pick > 0.5) { + double tc = std::numeric_limits::max(); + for (double t : hits) { + if (t > 1.0 + 1e-9 && t < tc) + tc = t; + } + if (tc == std::numeric_limits::max()) return false; + e.p1 = e.p0 + tc * adir; + } else { + double tc = -std::numeric_limits::max(); + for (double t : hits) { + if (t < -1e-9 && t > tc) + tc = t; + } + if (tc == -std::numeric_limits::max()) return false; + e.p0 = e.p0 + tc * adir; + } + + return true; +} + +// Bridge: cubic Bézier with G1 continuity at both ends. +// Poles = {Pa, Pa + Ta*d/3, Pb - Tb*d/3, Pb}, where d = |Pb - Pa|. +SketchEntity SketchEngine::make_bridge(const SketchEntity& a, int a_end, + const SketchEntity& b, int b_end) +{ + auto endpoint = [](const SketchEntity& e, int end) -> Vec2d { + return end == 0 ? e.p0 : e.p1; + }; + + auto tangent = [](const SketchEntity& e, int end, const Vec2d& fallback_dir) -> Vec2d { + switch (e.type) { + case SketchEntity::Type::Line: { + Vec2d dir = end == 1 ? e.p1 - e.p0 : e.p0 - e.p1; + double len = dir.norm(); + if (len < 1e-12) return fallback_dir; + return dir / len; + } + case SketchEntity::Type::Arc: { + double theta = end == 1 ? e.end_angle : e.start_angle; + // Tangent to the circle at angle theta, CCW: (-sin θ, cos θ). + // At end=1 (end_angle), the outward direction is along the sweep direction. + // At end=0 (start_angle), outward is opposite the sweep direction. + double sweep = e.end_angle - e.start_angle; + int sign = end == 1 ? (sweep >= 0 ? 1 : -1) : (sweep >= 0 ? -1 : 1); + Vec2d t(-std::sin(theta), std::cos(theta)); + return t * double(sign); + } + default: + // ponytail: straight-ish bridge for unsupported entity types. + return fallback_dir; + } + }; + + const Vec2d Pa = endpoint(a, a_end); + const Vec2d Pb = endpoint(b, b_end); + const double d = (Pb - Pa).norm(); + + // Fallback tangent direction: point toward the other endpoint. + Vec2d fallback = d < 1e-9 ? Vec2d(1, 0) : (Pb - Pa) / d; + Vec2d Ta = tangent(a, a_end, fallback); + Vec2d Tb = tangent(b, b_end, fallback * -1.0); + + const double k = std::max(d, 1e-9) / 3.0; + + SketchEntity e; + e.type = SketchEntity::Type::BSpline; + e.construction = false; + e.ctrl = { Pa, Pa + Ta * k, Pb - Tb * k, Pb }; + e.p0 = e.ctrl.front(); + e.p1 = e.ctrl.back(); + return e; +} + +// ---- entity-constraint planning (Fase 4.2) ---- +// Pure kernel port of DesignPanel::apply_entity_constraint's decision logic, so the GUI +// and the live-sketch tool share ONE legality/role/value decision instead of each carrying +// its own copy. The Coincident phantom-p1 defect was fixed in one branch and stayed alive +// in the next one down precisely because the logic lived in a wx method that could not be +// unit-tested. No wx, no translation: the caller maps ConstraintReject to a string. + +int sketch_entity_ends(const SketchEntity& e, std::pair out[2]) +{ + using ET = SketchEntity::Type; + using R = SketchPointRole; + switch (e.type) { + case ET::Line: case ET::Arc: case ET::BSpline: case ET::EllipseArc: + out[0] = {R::P0, e.p0}; out[1] = {R::P1, e.p1}; return 2; + case ET::Point: + out[0] = {R::P0, e.p0}; return 1; + case ET::Circle: case ET::Ellipse: + out[0] = {R::Center, e.center}; return 1; + } + return 0; +} + +bool sketch_closest_ends(const SketchEntity& A, const SketchEntity& B, + SketchPointRole& ra, SketchPointRole& rb, Vec2d& pa, Vec2d& pb) +{ + std::pair aps[2], bps[2]; + const int na = sketch_entity_ends(A, aps), nb = sketch_entity_ends(B, bps); + if (na == 0 || nb == 0) return false; + double best = 1e30; + ra = aps[0].first; rb = bps[0].first; pa = aps[0].second; pb = bps[0].second; + for (int i = 0; i < na; ++i) + for (int j = 0; j < nb; ++j) { + const double d = (aps[i].second - bps[j].second).squaredNorm(); + if (d < best) { + best = d; + ra = aps[i].first; rb = bps[j].first; + pa = aps[i].second; pb = bps[j].second; + } + } + return true; +} + +ConstraintPlan plan_entity_constraint(const std::vector& ents, + int e0, int e1, int e2, SketchConstraintType type) +{ + using R = SketchPointRole; + using T = SketchConstraintType; + const int n = int(ents.size()); + + ConstraintPlan plan; + + auto is_round = [](const SketchEntity& e) { + return e.type == SketchEntity::Type::Circle || e.type == SketchEntity::Type::Arc; }; + + // One Equal button, two meanings: lines get equal length, curves equal radius. + if (type == T::EqualLength && e0 >= 0 && e1 >= 0 && e0 < n && e1 < n && + is_round(ents[e0]) && is_round(ents[e1])) + type = T::EqualRadius; + + const bool needs_two = (type == T::Parallel || type == T::Perpendicular || + type == T::EqualLength || type == T::Coincident || + type == T::Concentric || type == T::Tangent || + type == T::Angle || type == T::Midpoint || + type == T::Symmetric || type == T::EqualRadius || + type == T::Collinear || + type == T::SymmetricAboutY || type == T::SymmetricAboutX || + type == T::DistanceX || type == T::DistanceY); + if (e0 < 0 || e0 >= n || (needs_two && (e1 < 0 || e1 >= n))) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = needs_two ? ConstraintReject::NeedTwoEntities : ConstraintReject::NeedOneEntity; + return plan; + } + + plan.kind = ConstraintPlan::Kind::Apply; + SketchEntityConstraintDef def; + def.type = type; + def.value = 0.0; + switch (type) { + case T::Horizontal: + case T::Vertical: + // One line: level/plumb its own two endpoints. Not pedantry -- with a Point or + // Circle picked, P1 is a role the solver silently drops while STORING the + // constraint, so the sketch claims to be constrained when it is not. + if (ents[e0].type != SketchEntity::Type::Line) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedALine; + return plan; + } + def.ea = e0; def.ra = R::P0; + def.eb = e0; def.rb = R::P1; + break; + case T::Parallel: + case T::Perpendicular: + case T::EqualLength: + // Two whole line segments (roles unused). Guard ADDED here (the GUI does not check + // this yet): a non-line pick produced a def the solver drops, the same silent no-op + // as Horizontal on a Point above. + if (ents[e0].type != SketchEntity::Type::Line || + ents[e1].type != SketchEntity::Type::Line) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoLines; + return plan; + } + def.ea = e0; def.eb = e1; + break; + case T::Coincident: { + // Join the closest point pair, NOT {p0,p1} on both -- two Points would otherwise + // resolve to their phantom (0,0) p1s and the constraint would do nothing at all. + R ra, rb; Vec2d pa, pb; + if (!sketch_closest_ends(ents[e0], ents[e1], ra, rb, pa, pb)) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedJoinablePoints; + return plan; + } + def.ea = e0; def.ra = ra; def.eb = e1; def.rb = rb; + break; + } + case T::DistanceX: + case T::DistanceY: { + R ra, rb; Vec2d pa, pb; + if (!sketch_closest_ends(ents[e0], ents[e1], ra, rb, pa, pb)) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedMeasurablePoints; + return plan; + } + // The constraint is SIGNED (fixes (pB - pA).dot(axis)). Order the refs so the shown + // value is the positive one -- accepting a dimension must be a no-op, not a flip. + int a = e0, b = e1; + double delta = (type == T::DistanceX) ? (pb.x() - pa.x()) : (pb.y() - pa.y()); + if (delta < 0.0) { std::swap(a, b); std::swap(ra, rb); delta = -delta; } + plan.kind = ConstraintPlan::Kind::AskValue; + def.ea = a; def.ra = ra; + def.eb = b; def.rb = rb; + plan.prefill = delta; + break; + } + case T::Concentric: + if (!is_round(ents[e0]) || !is_round(ents[e1])) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoRounds; + return plan; + } + def.ea = e0; def.ra = R::Center; def.eb = e1; def.rb = R::Center; + break; + case T::Tangent: { + // line+round or round+round; the kernel detects the entity types. + const bool ok = (is_round(ents[e0]) && ents[e1].type == SketchEntity::Type::Line) || + (is_round(ents[e1]) && ents[e0].type == SketchEntity::Type::Line) || + (is_round(ents[e0]) && is_round(ents[e1])); + if (!ok) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTangentPair; + return plan; + } + def.ea = e0; def.eb = e1; + break; + } + case T::Angle: { + // Angle between two line segments. "Line segments" is a check, not an assumption: + // p1-p0 on a Circle is (0,0)-centre, so two circles used to pre-fill with the angle + // between their centre POSITION vectors. + if (ents[e0].type != SketchEntity::Type::Line || + ents[e1].type != SketchEntity::Type::Line) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoLines; + return plan; + } + const int a = e0, b = e1; + const Vec2d da = ents[a].p1 - ents[a].p0; + const Vec2d db = ents[b].p1 - ents[b].p0; + double cur = 90.0; + const double na = da.norm(), nb = db.norm(); + if (na > 1e-9 && nb > 1e-9) { + const double c = std::max(-1.0, std::min(1.0, da.dot(db) / (na * nb))); + cur = std::acos(c) * 180.0 / M_PI; + } + plan.kind = ConstraintPlan::Kind::AskValue; + def.ea = a; def.eb = b; + plan.prefill = cur; // degrees; the caller converts to radians on commit + break; + } + case T::Midpoint: { + // One pick is a Point, the other a Line: the point is the line's midpoint. + const SketchEntity& A = ents[e0]; + const SketchEntity& B = ents[e1]; + int pt = -1, ln = -1; + if (A.type == SketchEntity::Type::Point && B.type == SketchEntity::Type::Line) { pt = e0; ln = e1; } + else if (B.type == SketchEntity::Type::Point && A.type == SketchEntity::Type::Line) { pt = e1; ln = e0; } + else { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedPointAndLine; + return plan; + } + def.ea = pt; def.ra = R::P0; def.eb = ln; + break; + } + case T::Symmetric: { + // Two entities made symmetric about a third (axis) line: slot0=A, slot1=B, e2=axis. + // Two Points -> one pair; two Lines -> two endpoint pairs (P0/P0 and P1/P1), exactly + // the defs DesignPanel builds today. + const int axis = e2; + if (axis < 0 || axis >= n || ents[axis].type != SketchEntity::Type::Line) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedAxisLine; + return plan; + } + using ET = SketchEntity::Type; + const ET ta = ents[e0].type, tb = ents[e1].type; + if (!((ta == ET::Point && tb == ET::Point) || (ta == ET::Line && tb == ET::Line))) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoPointsOrLines; + return plan; + } + auto mk = [&](R ra, R rb) { + SketchEntityConstraintDef d; + d.type = T::Symmetric; + d.ea = e0; d.ra = ra; d.eb = e1; d.rb = rb; d.ec = axis; + plan.defs.push_back(d); + }; + if (ta == ET::Point) { mk(R::P0, R::P0); } + else { mk(R::P0, R::P0); mk(R::P1, R::P1); } + return plan; + } + case T::SymmetricAboutY: + case T::SymmetricAboutX: { + // Two entities made symmetric about the sketch's vertical/horizontal axis, which is + // implicit (no picked axis line): e2 is ignored and the axis is a negative sentinel + // in ec. + using ET = SketchEntity::Type; + const ET ta = ents[e0].type, tb = ents[e1].type; + if (!((ta == ET::Point && tb == ET::Point) || (ta == ET::Line && tb == ET::Line))) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoPointsOrLines; + return plan; + } + const int axis = (type == T::SymmetricAboutY) ? kSketchRefAxisY : kSketchRefAxisX; + auto mk = [&](R ra, R rb) { + SketchEntityConstraintDef d; + d.type = type; + d.ea = e0; d.ra = ra; d.eb = e1; d.rb = rb; d.ec = axis; + plan.defs.push_back(d); + }; + if (ta == ET::Point) { mk(R::P0, R::P0); } + else { mk(R::P0, R::P0); mk(R::P1, R::P1); } + return plan; + } + case T::EqualRadius: + if (!is_round(ents[e0]) || !is_round(ents[e1])) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoRounds; + return plan; + } + def.ea = e0; def.eb = e1; + break; + case T::Collinear: + if (ents[e0].type != SketchEntity::Type::Line || ents[e1].type != SketchEntity::Type::Line) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedTwoLines; + return plan; + } + def.ea = e0; def.eb = e1; + break; + case T::Fix: { + // Anchor the picked entity's reference point to its current coordinate. A single + // point -- not both endpoints -- so it composes with an existing H/V/length + // constraint instead of duplicating it. + using ET = SketchEntity::Type; + const ET et = ents[e0].type; + def.ea = e0; + def.ra = (et == ET::Circle || et == ET::Ellipse || + et == ET::Arc || et == ET::EllipseArc) ? R::Center : R::P0; + break; + } + case T::Radius: + case T::Diameter: { + if (!is_round(ents[e0])) { + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::NeedRound; + return plan; + } + plan.kind = ConstraintPlan::Kind::AskValue; + def.ea = e0; def.ra = R::Center; + plan.prefill = (type == T::Diameter) ? 2.0 * ents[e0].radius : ents[e0].radius; + break; + } + default: + // Distance / LockX / LockY / PointOnLine / PointOnObject (and any future type) have + // no entity-constraint binding; the GUI's own switch falls to "Unsupported". + plan.kind = ConstraintPlan::Kind::Reject; + plan.reason = ConstraintReject::Unsupported; + return plan; + } + plan.defs.push_back(def); + return plan; +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/SketchEngine.hpp b/src/libslic3r/CAD/SketchEngine.hpp new file mode 100644 index 0000000000..f2166e96a6 --- /dev/null +++ b/src/libslic3r/CAD/SketchEngine.hpp @@ -0,0 +1,373 @@ +#ifndef slic3r_SketchEngine_hpp_ +#define slic3r_SketchEngine_hpp_ + +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" + +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +struct SketchSegment { + enum Type { Line, Arc, Circle, Rectangle, Polygon }; + Type type{Line}; + Vec2d p0{0,0}, p1{0,0}; + Vec2d center{0,0}; + double radius{0}, start_angle{0}, end_angle{0}; + std::vector points; + template + void serialize(Archive& ar) { ar(type, p0, p1, center, radius, start_angle, end_angle, points); } +}; + +struct SketchEntity { + enum class Type { Line, Arc, Circle, Point, Ellipse, EllipseArc, BSpline }; + Type type{Type::Line}; + Vec2d p0{0,0}; // Line: start; Arc/EllipseArc: start; Circle/Point/Ellipse: center; BSpline: first pole + Vec2d p1{0,0}; // Line: end; Arc/EllipseArc: end; (unused for Circle/Point/Ellipse); BSpline: last pole + Vec2d center{0,0}; // Arc/Circle/Ellipse(Arc) center + double radius{0}; // Circle/Arc radius; Ellipse(Arc): semi-major axis (a) + double start_angle{0}; // Arc sweep start; Ellipse(Arc): parametric start angle (radians) + double end_angle{0}; // Arc sweep end; Ellipse(Arc): parametric end angle + bool construction{false}; + double rminor{0}; // Ellipse(Arc): semi-minor axis (b) + double rotation{0}; // Ellipse(Arc): major-axis angle phi (radians, about center) + std::vector ctrl; // BSpline: control points (poles); p0/p1 mirror first/last pole + template + void serialize(Archive& ar) { + // Append-only: rminor/rotation added for Ellipse(Arc) (P2 Tier-B.1); ctrl for BSpline (B.2). + ar(type, p0, p1, center, radius, start_angle, end_angle, construction, rminor, rotation, ctrl); + } +}; + +struct SketchPlane { + Vec3d origin{0,0,0}; + Vec3d normal{0,0,1}; + Vec3d x_axis{1,0,0}; + Vec3d y_axis{0,1,0}; + + gp_Pln to_occt() const; + static SketchPlane from_face(const TopoDS_Face& face); + static SketchPlane XY() { return {}; } + static SketchPlane XZ() { return {{0,0,0}, {0,1,0}, {1,0,0}, {0,0,1}}; } + static SketchPlane YZ() { return {{0,0,0}, {1,0,0}, {0,1,0}, {0,0,1}}; } + + Vec2d project(const Vec3d& ray_origin, const Vec3d& ray_dir) const; + Vec3d to_world(const Vec2d& pt) const; + + template + void serialize(Archive& ar) { ar(origin, normal, x_axis, y_axis); } +}; + +struct SketchProfile { + std::vector points; + bool closed{false}; + + bool is_closed(double tolerance = 0.5) const; + bool try_close(double tolerance = 0.5); + void clear() { points.clear(); closed = false; } + TopoDS_Wire to_occt_wire(const SketchPlane& plane) const; + + template + void serialize(Archive& ar) { ar(points, closed); } +}; + +// Two sketch endpoints this close are ONE joint. Shared deliberately by the viewport +// (region_loops / connected_loop / open-end detection) and by the kernel +// (entities_to_wires): the viewport is what shades a region closed and offers it for +// extrude, so the kernel MUST be able to build every loop the viewport shades. When +// these two numbers disagreed the viewport promised a closed region at 1e-3 and the +// kernel refused it at 1e-4, which extruded a solid the user never drew. +// Nothing legitimate in a mm-scale sketch is 1 um apart. +inline constexpr double kSketchJoinTol = 1e-3; // mm + +// Effective sketch joint tolerance. ONE value for the viewport (region_loops / +// loop_report / connected_loop) and the kernel (entities_to_wires): if these ever +// disagree again, the viewport shades a region closed that the kernel refuses to +// build, which is how a sketch got extruded into the wrong solid. The GUI pushes +// the "auto_close_sketch_loops" preference in via set_sketch_auto_close(); the +// kernel defaults to ON so headless/kernel-only callers keep welding. +double sketch_join_tol(); +void set_sketch_auto_close(bool on); + +enum class SketchConstraintType { + Fix, Coincident, Horizontal, Vertical, Distance, + LockX, LockY, EqualLength, Parallel, Perpendicular, + Concentric, + Tangent, Midpoint, Symmetric, Angle, + Radius, Diameter, + PointOnLine, // a point lies on a line (or at signed perpendicular distance `value`) + PointOnObject, // a point lies on an entity edge (line -> PT_ON_LINE, circle -> PT_ON_CIRCLE) + // Append-only: cereal serializes this enum positionally as its underlying int, so + // inserting anywhere but the end reinterprets every constraint in every saved recipe. + EqualRadius, + Collinear, + DistanceX, // |dx| between two points, projected onto the sketch X axis + DistanceY, // |dy| between two points, projected onto the sketch Y axis + SymmetricAboutY, // mirror across the sketch's vertical axis (x = 0); axis is implicit + SymmetricAboutX // mirror across the sketch's horizontal axis (y = 0); axis is implicit +}; + +// Constraint on a SketchProfile, referencing profile point indices (a,b,c,d). +// `value` carries the target for Distance/LockX/LockY (ignored otherwise). +struct SketchConstraintDef { + SketchConstraintType type{SketchConstraintType::Coincident}; + int a{-1}, b{-1}, c{-1}, d{-1}; + double value{0.0}; + template void serialize(Archive& ar) { ar(type, a, b, c, d, value); } +}; + +// Which point of an entity a constraint reference names. +// P0 = SketchEntity::p0 (Line start / Point position) +// P1 = SketchEntity::p1 (Line end) +// Center = SketchEntity::center (Arc/Circle center) +enum class SketchPointRole { P0, P1, Center }; + +// Constraint on coexisting SketchEntity objects (Fase 4.2). Each reference is an +// (entity index, point role) pair. Point-form constraints +// (Fix/Coincident/Horizontal/Vertical/Distance/LockX/LockY) use refs A and B as +// individual points. Segment-form constraints (Parallel/Perpendicular/EqualLength) +// use entity indices `ea`/`eb` as whole line segments (their P0->P1); roles are +// ignored for those. `value` carries the target for Distance/LockX/LockY. +struct SketchEntityConstraintDef { + SketchConstraintType type{SketchConstraintType::Coincident}; + int ea{-1}, eb{-1}; // entity indices + SketchPointRole ra{SketchPointRole::P0}; // role within ea + SketchPointRole rb{SketchPointRole::P0}; // role within eb + double value{0.0}; + int ec{-1}; // third entity ref (Symmetric axis) + SketchPointRole rc{SketchPointRole::P0}; // role within ec + template void serialize(Archive& ar) { ar(type, ea, eb, ra, rb, value, ec, rc); } +}; + +// Implicit references every sketch has, addressable from a constraint's ea/eb/ec without +// existing as SketchEntity objects. NEGATIVE so they cannot collide with an entity index; +// -1 is already "unset" and stays that way. Values are serialized inside existing int +// fields, so they are append-only in spirit: never renumber these. +constexpr int kSketchRefOrigin = -2; // the sketch origin point (0,0) +constexpr int kSketchRefAxisX = -3; // the sketch X axis, through the origin, +X +constexpr int kSketchRefAxisY = -4; // the sketch Y axis, through the origin, +Y + +inline bool is_sketch_ref(int ei) { return ei <= kSketchRefOrigin; } + +// How many real endpoints a type exposes, and which roles they are. p1 is UNUSED for +// Circle/Point/Ellipse (SketchEntity::p1 above) and reads (0,0) — walking {P0,P1} blindly +// over those invents a phantom endpoint at the origin, which for a pair of Points always +// wins a closest-pair search at distance 0 and binds a role the solver silently refuses. +int sketch_entity_ends(const SketchEntity& e, std::pair out[2]); +bool sketch_closest_ends(const SketchEntity& A, const SketchEntity& B, + SketchPointRole& ra, SketchPointRole& rb, Vec2d& pa, Vec2d& pb); + +// Why an entity-constraint pick is refused. The caller maps a reason to a localized string; +// the planner itself stays translation-free. +enum class ConstraintReject { + None, NeedOneEntity, NeedTwoEntities, NeedALine, NeedTwoLines, + NeedTwoRounds, NeedTangentPair, NeedJoinablePoints, NeedMeasurablePoints, + // The following are not in the GUI's current switch but are the faithful outcomes of + // its remaining branches; they need a reason too or the caller cannot tell them apart. + NeedPointAndLine, // Midpoint: one Point + one Line + NeedTwoPointsOrLines, // Symmetric / SymmetricAboutX/Y: two Points or two Lines + NeedAxisLine, // Symmetric: e2 must be a Line to act as the axis + NeedRound, // Radius/Diameter: a Circle or Arc + Unsupported // entity-constraint path has no binding for this type +}; + +struct ConstraintPlan { + enum class Kind { Reject, Apply, AskValue }; + Kind kind{Kind::Reject}; + ConstraintReject reason{ConstraintReject::None}; + // Apply/AskValue only: the defs to commit. One element for every ordinary type, TWO for + // Symmetric/SymmetricAboutX/Y on two lines (P0/P0 and P1/P1), matching the GUI's builds. + std::vector defs{}; + double prefill{0.0}; // AskValue only: the value to show pre-filled +}; + +// Pure: no wx, no translation, no UI. The caller maps `reason` to a localized string. +// e2 is the axis-line pick Symmetric needs (def.ec); every other type ignores it. +ConstraintPlan plan_entity_constraint(const std::vector& ents, + int e0, int e1, int e2, SketchConstraintType type); + +// Solve a bare entity list in place against entity-form constraints. Shared by +// CadDocument::solve_sketch_feature (committed features) and the in-session GUI +// sketch tool (live solving as dimensions/constraints are added). Returns true on +// convergence; an empty constraint list is a no-op that returns true. +bool solve_sketch_entities(std::vector& entities, + const std::vector& constraints); + +struct SketchParams { + // Extrude/Revolve + double extrude_len{10}; bool extrude_sym{false}; double extrude_taper{0}; + double revolve_deg{360}; + bool is_pocket{false}; // cut into selected object instead of new + + // Dress-up + bool dressup_enabled{false}; + DressUpType dressup_type{DressUpType::Fillet}; + FaceGroup dressup_faces{FaceGroup::All}; + double dressup_radius{1.0}; + double dressup_chamfer_dist{1.0}; + + // Mesh + double linear_deflection{0.01}; + + template + void serialize(Archive& ar) { + ar(extrude_len, extrude_sym, extrude_taper, revolve_deg, is_pocket, + dressup_enabled, dressup_type, dressup_faces, dressup_radius, dressup_chamfer_dist, + linear_deflection); + } +}; + +class SketchEngine +{ +public: + static TopoDS_Shape make_extrude(const TopoDS_Wire& wire, const SketchPlane& plane, + double length, bool symmetric = false, double taper_deg = 0.0); + static TopoDS_Shape make_extrude(const TopoDS_Face& face, const SketchPlane& plane, + double length, bool symmetric = false, double taper_deg = 0.0); + // Asymmetric two-sided prism: extrude the wire's face by `up` along +normal and `down` + // along -normal, fused into one solid. up/down are non-negative magnitudes. + // Tapered (draft) extrude of a planar wire: the top profile is the base wire offset in its + // plane by length*tan(taper_deg), lofted from base to top. Falls back to a straight prism on + // any failure (self-intersecting offset / loft error). taper_deg>0 widens the top. + static TopoDS_Shape make_extrude_taper(const TopoDS_Wire& wire, const SketchPlane& plane, + double length, double taper_deg); + static TopoDS_Shape make_extrude_two_sided(const TopoDS_Wire& wire, const SketchPlane& plane, + double up, double down); + static TopoDS_Shape make_extrude_two_sided(const TopoDS_Face& face, const SketchPlane& plane, + double up, double down); + static TopoDS_Shape make_extrude_face(const TopoDS_Face& face, const SketchPlane& plane, + double length, bool symmetric = false, double taper_deg = 0.0); + + // Extrude a set of imported rigid regions (Text/SVG). Each region is + // contour[0]=outer loop + contour[1..]=hole loops, in plane (u,v) mm. Builds + // one planar face-with-holes per region, extrudes it, and fuses all region + // solids into a single shape. Empty/degenerate contours are skipped. + static TopoDS_Shape make_extrude_regions( + const std::vector>>& regions, + const SketchPlane& plane, double length, bool symmetric = false); + + // Revolve a planar profile wire about an axis lying in the sketch plane and + // passing through the plane origin: axis_sel 0 = plane X axis, 1 = plane Y axis. + // A negative angle_deg sweeps the opposite direction (Flip). The profile must + // lie to one side of the axis (Onshape rule); a straddling profile self-intersects. + static TopoDS_Shape make_revolve(const TopoDS_Wire& wire, const SketchPlane& plane, + double angle_deg = 360.0, int axis_sel = 0); + + // Sweep a planar profile wire along a path (spine) wire. The profile is turned + // into a face and swept with BRepOffsetAPI_MakePipe, which keeps the profile + // perpendicular to the spine along its length. The path may be open or closed; + // for a clean solid the path's first point should sit on/near the profile plane. + static TopoDS_Shape make_sweep(const TopoDS_Wire& profile, const TopoDS_Wire& path); + + // Loft a solid through 2+ closed profile wires (each on its own plane), in the + // given order. ruled=true => straight (ruled) sections; false => smooth (C2). + static TopoDS_Shape make_loft(const std::vector& profiles, bool ruled); + + // Skin `profiles` WITHOUT end caps -> an open shell (sheet). Same as make_loft but the + // ThruSections solid flag is false. // ponytail: a sibling instead of a bool param, so no + // existing call site changes. + static TopoDS_Shape make_loft_surface(const std::vector& profiles, bool ruled); + + static TopoDS_Shape make_pocket(const TopoDS_Wire& wire, const SketchPlane& plane, + const TopoDS_Shape& target, double depth); + + static TriangleMesh tessellate(const TopoDS_Shape& shape, + double linear_deflection = 0.01, + double angular_deflection = 0.5); + + static TriangleMesh tessellate(const TopoDS_Shape& shape, + std::vector& tri_face, + double linear_deflection = 0.01, + double angular_deflection = 0.5); + + static TopoDS_Wire entities_to_wire(const std::vector& entities, + const SketchPlane& plane, + bool closed_only = false); + + // Every loop the sketch holds, in the order each loop's FIRST entity appears in + // `entities`. A Circle or Ellipse is a loop on its own; Line/Arc/EllipseArc/BSpline + // entities are grouped into loops by shared endpoints. An OPEN chain is returned too — + // a sweep path is legitimately open, so open-ness is not an error here — unless + // `closed_only` is true, in which case an open chain is DISCARDED (skipped, not an + // error). Empty vector = nothing usable; the caller decides whether that is an error. + static std::vector entities_to_wires(const std::vector& entities, + const SketchPlane& plane, + bool closed_only = false); + + // A planar face from a set of coplanar loops: the largest-area loop is the outer boundary + // and every other loop is a hole in it. Throws std::runtime_error with a message naming the + // problem when the loops do not describe one such region. + static TopoDS_Face wires_to_face(const std::vector& wires, + const SketchPlane& plane); + + static std::vector mirror_entities( + const std::vector& src, const Vec2d& a, const Vec2d& b); + + // Offset a sketch by `d`, PRESERVING CHAINS. Entities joined by shared endpoints are + // offset together and their seams repaired (miter join), so a closed profile comes back + // closed and can still be extruded; per-entity offsetting cannot do that. Sign convention: + // +d moves each curve to the LEFT of its direction of travel, which for a CCW closed loop + // is inward. Ellipses and splines are not offset (a parallel of either is not the same + // kind of curve) and are dropped from the result. + static std::vector offset_entities( + const std::vector& src, double d); + + // Rigid-transform array. Returns the (count-1) copies for instance i=1..count-1 + // (the originals in `src` are NOT included). Each copy i is `src` rigidly + // transformed by: rotate by i*angle_step about `pivot`, then translate by i*step. + // Rectangular/linear array: angle_step = 0, step = spacing*direction (pivot unused). + // Polar array: step = (0,0), angle_step = sweep/count, pivot = centre. + // Orientation-preserving, so arc/ellipse parametric angles shift by i*angle_step. + static std::vector array_entities( + const std::vector& src, int count, + const Vec2d& step, double angle_step, const Vec2d& pivot); + + // General affine transform (move / rotate / scale), applied IN PLACE: returns + // the SAME entities (same count and order), each mapped by + // p -> pivot + scale * R(angle) * (p - pivot) + move + // (radii scale by |scale|; arc/ellipse parametric/rotation angles shift by + // `angle`). Unlike array_entities this mutates the subjects rather than adding + // copies. Move: angle=0, scale=1. Rotate-in-place: move=(0,0), scale=1, + // pivot=centroid. Scale: angle=0. + static std::vector transform_entities( + const std::vector& src, + const Vec2d& move, double angle, double scale, const Vec2d& pivot); + + static bool fillet_lines(const SketchEntity& a, const SketchEntity& b, double r, + SketchEntity& a_out, SketchEntity& b_out, SketchEntity& arc_out); + + // Symmetric chamfer between two lines meeting at a corner: trims each line back + // by setback distance `d` from the shared corner and returns the connecting + // straight segment (seg_out) in place of the corner. a_out/b_out are the trimmed + // lines; seg_out goes seg_out.p0 (on a) -> seg_out.p1 (on b). False if the lines + // are parallel or `d` overruns either line. + static bool chamfer_lines(const SketchEntity& a, const SketchEntity& b, double d, + SketchEntity& a_out, SketchEntity& b_out, SketchEntity& seg_out); + + static bool trim_entity(SketchEntity& e, const std::vector& others, + const Vec2d& pick); + + static bool extend_entity(SketchEntity& e, const std::vector& others, + const Vec2d& pick); + + // Build a cubic-Bezier G1 bridge (as a BSpline entity, 4 poles) connecting endpoint + // `a_end` of `a` to endpoint `b_end` of `b` (0 = start/p0 side, 1 = end/p1 side). + // Tangent-continuous with both entities where the endpoint tangent is defined. + static SketchEntity make_bridge(const SketchEntity& a, int a_end, + const SketchEntity& b, int b_end); +}; + +// Free endpoints of a sketch: the sketch-space points where a chain fails to close. +// Same weld tolerance as the wire build, so it can never contradict it. +std::vector sketch_open_ends(const std::vector&, const SketchPlane&); + +} // namespace Slic3r + +#endif // slic3r_SketchEngine_hpp_ diff --git a/src/libslic3r/CAD/SketchImport.cpp b/src/libslic3r/CAD/SketchImport.cpp new file mode 100644 index 0000000000..7140776603 --- /dev/null +++ b/src/libslic3r/CAD/SketchImport.cpp @@ -0,0 +1,145 @@ +#include "libslic3r/CAD/SketchImport.hpp" + +#include "libslic3r/Emboss.hpp" +#include "libslic3r/NSVGUtils.hpp" +#include "libslic3r/ExPolygon.hpp" +#include "libslic3r/TextConfiguration.hpp" // FontProp +#include "libslic3r/libslic3r.h" // SCALING_FACTOR +#include "libslic3r/Utils.hpp" // resources_dir + +#include +#include + +namespace Slic3r { + +// Convert one ExPolygon (outer contour + CW holes) into an ImportRegion, +// mapping each integer Point to plane (u,v) mm via `to_mm`. +template +static ImportRegion expoly_to_region(const ExPolygon& ex, ToMm to_mm) +{ + auto contour_pts = [&](const Polygon& poly) { + std::vector c; + c.reserve(poly.points.size()); + for (const Point& p : poly.points) + c.push_back(to_mm(p)); + return c; + }; + ImportRegion region; + region.push_back(contour_pts(ex.contour)); + for (const Polygon& h : ex.holes) + region.push_back(contour_pts(h)); + return region; +} + +// Shift all regions so their common bounding-box centre sits on the origin +// (Onshape/typical CAD insert places imported art centred on the sketch). +static void center_regions(ImportRegions& regs) +{ + double lo_x = std::numeric_limits::max(); + double lo_y = std::numeric_limits::max(); + double hi_x = -std::numeric_limits::max(); + double hi_y = -std::numeric_limits::max(); + bool any = false; + for (const auto& region : regs) + for (const auto& contour : region) + for (const Vec2d& p : contour) { + lo_x = std::min(lo_x, p.x()); hi_x = std::max(hi_x, p.x()); + lo_y = std::min(lo_y, p.y()); hi_y = std::max(hi_y, p.y()); + any = true; + } + if (!any) return; + const Vec2d c(0.5 * (lo_x + hi_x), 0.5 * (lo_y + hi_y)); + for (auto& region : regs) + for (auto& contour : region) + for (Vec2d& p : contour) + p -= c; +} + +static std::string default_font_path() +{ + return resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf"; +} + +ImportRegions text_to_regions(const std::string& utf8, double size_mm, + const std::string& font_path) +{ + if (utf8.empty() || size_mm <= 0.0) + return {}; + + const std::string path = font_path.empty() ? default_font_path() : font_path; + std::unique_ptr ff = Emboss::create_font_file(path.c_str()); + if (!ff) + return {}; + Emboss::FontFileWithCache fwc(std::move(ff)); + if (!fwc.has_value()) + return {}; + + FontProp prop(static_cast(size_mm)); // per_glyph=false + HealedExPolygons healed = Emboss::text2shapes(fwc, utf8.c_str(), prop); + if (healed.expolygons.empty()) + return {}; + + // Shape points are integers scaled by 1/SHAPE_SCALE in font units; + // get_text_shape_scale collapses (size_in_mm / unit_per_em) * SHAPE_SCALE + // into a single mm-per-shape-unit factor. FreeType y is up already. + const double s = Emboss::get_text_shape_scale(prop, *fwc.font_file); + auto to_mm = [s](const Point& p) { return Vec2d(p.x() * s, p.y() * s); }; + + ImportRegions regs; + regs.reserve(healed.expolygons.size()); + for (const ExPolygon& ex : healed.expolygons) + regs.push_back(expoly_to_region(ex, to_mm)); + + center_regions(regs); + return regs; +} + +ImportRegions svg_to_regions(const std::string& svg_path, double scale) +{ + if (svg_path.empty() || scale <= 0.0) + return {}; + + NSVGimage_ptr image = nsvgParseFromFile(svg_path, "mm", 96.0f); + if (!image) + return {}; + + // A filled shape that also carries a stroke would import the stroke as a + // thick outline band wrapped around the fill (the reported "too large line + // width"). For CAD import the fill silhouette is what's wanted, so drop the + // stroke on any shape that has a fill; stroke-only line art is kept. + for (NSVGshape* s = image->shapes; s != nullptr; s = s->next) + if (s->fill.type != NSVG_PAINT_NONE) + s->stroke.type = NSVG_PAINT_NONE; + + // tesselation tolerance is in image (mm) scale; 0.3 mm keeps curves smooth + // without exploding the contour count. is_y_negative (default) flips SVG's + // y-down to the sketch's y-up. + NSVGLineParams param(0.3); + ExPolygonsWithIds ids = create_shape_with_ids(*image, param); + + // NSVG points are integers scaled by 1/SCALING_FACTOR (param.scale default): + // mm = point * SCALING_FACTOR, then the user scale factor. + const double s = SCALING_FACTOR * scale; + auto to_mm = [s](const Point& p) { return Vec2d(p.x() * s, p.y() * s); }; + + ImportRegions regs; + for (const ExPolygonsWithId& w : ids) + for (const ExPolygon& ex : w.expoly) + regs.push_back(expoly_to_region(ex, to_mm)); + + center_regions(regs); + return regs; +} + +ImportRegions transform_regions(const ImportRegions& src, const Vec2d& offset, + double scale_x, double scale_y) +{ + ImportRegions out = src; + for (auto& region : out) + for (auto& contour : region) + for (Vec2d& p : contour) + p = Vec2d(p.x() * scale_x + offset.x(), p.y() * scale_y + offset.y()); + return out; +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/SketchImport.hpp b/src/libslic3r/CAD/SketchImport.hpp new file mode 100644 index 0000000000..0873b0b861 --- /dev/null +++ b/src/libslic3r/CAD/SketchImport.hpp @@ -0,0 +1,37 @@ +#ifndef slic3r_SketchImport_hpp_ +#define slic3r_SketchImport_hpp_ + +#include "libslic3r/Point.hpp" // Vec2d + +#include +#include + +namespace Slic3r { + +// A rigid imported region: contour[0] = outer loop, contour[1..] = holes; +// points in plane (u,v) millimetres. The nested vector type matches +// CadFeature::imported_regions exactly, so results assign directly. +using ImportRegion = std::vector>; +using ImportRegions = std::vector; + +// Vectorize UTF-8 text into filled regions (mm), centred on the origin. +// `size_mm` is the cap/line height. `font_path` empty -> a bundled default +// font (resources/fonts). Returns an empty vector on any failure. +ImportRegions text_to_regions(const std::string& utf8, double size_mm, + const std::string& font_path = std::string()); + +// Parse an SVG file's filled paths into regions (mm), centred on the origin. +// `scale` multiplies the authored size (1.0 = as authored). Returns an empty +// vector on any failure. +ImportRegions svg_to_regions(const std::string& svg_path, double scale = 1.0); + +// Apply an axis-aligned placement transform to regions: +// p -> ( p.x * scale_x + offset.x, p.y * scale_y + offset.y ) +// Used to move / enlarge / stretch imported art non-destructively (the +// feature keeps the centred source regions + this transform). +ImportRegions transform_regions(const ImportRegions& src, const Vec2d& offset, + double scale_x, double scale_y); + +} // namespace Slic3r + +#endif // slic3r_SketchImport_hpp_ diff --git a/src/libslic3r/CAD/SketchInference.cpp b/src/libslic3r/CAD/SketchInference.cpp new file mode 100644 index 0000000000..cfeb2cd509 --- /dev/null +++ b/src/libslic3r/CAD/SketchInference.cpp @@ -0,0 +1,234 @@ +#include "libslic3r/CAD/SketchInference.hpp" + +#include +#include + +namespace Slic3r { + +// Candidate target collected during the scan; we keep the closest within each +// priority tier and resolve ties by tier then distance. +namespace { +struct Cand { + InferenceSnap::Kind kind{InferenceSnap::Kind::None}; + int entity{-1}; + SketchPointRole role{SketchPointRole::P0}; + Vec2d point{0, 0}; + double dist{0.0}; +}; + +// Lower number = higher priority. +int tier(InferenceSnap::Kind k) +{ + switch (k) { + case InferenceSnap::Kind::Endpoint: return 0; + case InferenceSnap::Kind::Center: return 1; + case InferenceSnap::Kind::Origin: return 2; + case InferenceSnap::Kind::Midpoint: return 3; + case InferenceSnap::Kind::OnEdge: return 4; + default: return 9; + } +} +} // namespace + +InferenceSnap infer_point_snap(const std::vector& entities, + const Vec2d& query, double tol, + bool include_origin) +{ + Cand best; + best.kind = InferenceSnap::Kind::None; + best.point = query; + + auto offer = [&](InferenceSnap::Kind k, int ent, SketchPointRole r, const Vec2d& q) { + const double d = (q - query).norm(); + if (d > tol) return; + const bool better = (best.kind == InferenceSnap::Kind::None) || + (tier(k) < tier(best.kind)) || + (tier(k) == tier(best.kind) && d < best.dist); + if (better) { best.kind = k; best.entity = ent; best.role = r; best.point = q; best.dist = d; } + }; + + for (size_t i = 0; i < entities.size(); ++i) { + const SketchEntity& e = entities[i]; + const int ei = int(i); + switch (e.type) { + case SketchEntity::Type::Line: { + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P0, e.p0); + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P1, e.p1); + offer(InferenceSnap::Kind::Midpoint, ei, SketchPointRole::P0, 0.5 * (e.p0 + e.p1)); + // Projection onto the segment interior (PointOnObject candidate). + const Vec2d d = e.p1 - e.p0; + const double L2 = d.squaredNorm(); + if (L2 > 1e-12) { + double t = (query - e.p0).dot(d) / L2; + if (t > 0.02 && t < 0.98) + offer(InferenceSnap::Kind::OnEdge, ei, SketchPointRole::P0, e.p0 + t * d); + } + break; + } + case SketchEntity::Type::Arc: { + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P0, e.p0); + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P1, e.p1); + offer(InferenceSnap::Kind::Center, ei, SketchPointRole::Center, e.center); + // Mid-arc point, so an arc is as snappable in its middle as a line is. + const double am = 0.5 * (e.start_angle + e.end_angle); + offer(InferenceSnap::Kind::Midpoint, ei, SketchPointRole::P0, + Vec2d(e.center.x() + e.radius * std::cos(am), + e.center.y() + e.radius * std::sin(am))); + break; + } + case SketchEntity::Type::Circle: { + offer(InferenceSnap::Kind::Center, ei, SketchPointRole::Center, e.center); + // Nearest point on the circle rim (PointOnObject candidate). + const Vec2d v = query - e.center; + const double n = v.norm(); + if (n > 1e-9 && e.radius > 1e-9) + offer(InferenceSnap::Kind::OnEdge, ei, SketchPointRole::Center, + e.center + v * (e.radius / n)); + break; + } + case SketchEntity::Type::Point: + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P0, e.p0); + break; + case SketchEntity::Type::EllipseArc: + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P0, e.p0); + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P1, e.p1); + offer(InferenceSnap::Kind::Center, ei, SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::Ellipse: + offer(InferenceSnap::Kind::Center, ei, SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::BSpline: + // Endpoints (first/last pole) snap for loop closure. + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P0, e.p0); + offer(InferenceSnap::Kind::Endpoint, ei, SketchPointRole::P1, e.p1); + break; + } + } + + if (include_origin) + offer(InferenceSnap::Kind::Origin, -1, SketchPointRole::P0, Vec2d(0, 0)); + + InferenceSnap r; + r.kind = best.kind; r.entity = best.entity; r.role = best.role; r.point = best.point; + return r; +} + +std::optional +infer_axis_constraint(const Vec2d& anchor, const Vec2d& tip, double ang_tol_rad) +{ + const Vec2d d = tip - anchor; + if (d.squaredNorm() < 1e-12) return std::nullopt; + const double ang = std::atan2(std::abs(d.y()), std::abs(d.x())); // 0=horizontal, pi/2=vertical + if (ang <= ang_tol_rad) return SketchConstraintType::Horizontal; + if (ang >= M_PI / 2.0 - ang_tol_rad) return SketchConstraintType::Vertical; + return std::nullopt; +} + +// Unsigned angle between two (unnormalized) direction vectors, in [0, pi]. 0 = same +// direction, pi = opposite, pi/2 = perpendicular. Inputs must be non-degenerate. +// static: this is a file-local helper, not part of the module's interface -- at namespace +// scope with external linkage it would be a link-time collision waiting to happen. +static double unsigned_angle(const Vec2d& a, const Vec2d& b) +{ + const double cross = a.x() * b.y() - a.y() * b.x(); + const double dot = a.x() * b.x() + a.y() * b.y(); + return std::atan2(std::abs(cross), dot); +} + +std::vector +infer_relations(const std::vector& entities, int new_ei, + double ang_tol_rad, double len_tol_frac) +{ + std::vector out; + if (new_ei <= 0 || new_ei >= int(entities.size())) return out; + + // AT MOST ONE constraint per rule per new entity, not one per PAIR. Without this the + // function is quadratic in the sketch: a drawing with 200 equal holes yields ~20000 + // EqualRadius candidates, the batch is rejected as over-constrained, and the caller's + // one-at-a-time fallback then runs a solve per constraint. Measured 2026-08-31: that + // pinned the app at 95% of a core with the MCP socket unresponsive -- the same failure + // the axes batch above already carries a warning about. Keep the best candidate only. + int best_ang_j = -1, best_rad_j = -1, best_tan_j = -1; + double best_ang_err = 1e30, best_rad_err = 1e30, best_tan_err = 1e30; + SketchConstraintType best_ang_type = SketchConstraintType::Parallel; + + const SketchEntity& n = entities[new_ei]; + const bool n_line = n.type == SketchEntity::Type::Line; + const bool n_curve = n.type == SketchEntity::Type::Arc || n.type == SketchEntity::Type::Circle; + if (!n_line && !n_curve) return out; // not a Line / Arc / Circle + if (n_line && (n.p1 - n.p0).squaredNorm() < 1e-18) return out; // degenerate + if (n_curve && n.radius < 1e-9) return out; + + for (int j = 0; j < new_ei; ++j) { + const SketchEntity& o = entities[j]; + const bool o_line = o.type == SketchEntity::Type::Line; + const bool o_curve = o.type == SketchEntity::Type::Arc || o.type == SketchEntity::Type::Circle; + if (!o_line && !o_curve) continue; + if (o_line && (o.p1 - o.p0).squaredNorm() < 1e-18) continue; + if (o_curve && o.radius < 1e-9) continue; + + if (n_line && o_line) { + // R1 — parallel / perpendicular, restricted to CONNECTED lines. Connection is + // what keeps this from firing on every distant line that is roughly parallel. + const bool connected = (n.p0 - o.p0).squaredNorm() <= 1e-14 || + (n.p0 - o.p1).squaredNorm() <= 1e-14 || + (n.p1 - o.p0).squaredNorm() <= 1e-14 || + (n.p1 - o.p1).squaredNorm() <= 1e-14; + if (!connected) continue; + const double ang = unsigned_angle(n.p1 - n.p0, o.p1 - o.p0); + const double par_err = std::min(ang, M_PI - ang); + const double per_err = std::abs(ang - M_PI / 2.0); + if (par_err <= ang_tol_rad && par_err < best_ang_err) { + best_ang_err = par_err; best_ang_j = j; + best_ang_type = SketchConstraintType::Parallel; + } else if (per_err <= ang_tol_rad && per_err < best_ang_err) { + best_ang_err = per_err; best_ang_j = j; + best_ang_type = SketchConstraintType::Perpendicular; + } + } else if (n_curve && o_curve) { + // R2 — equal radius between circles / arcs, relative to the larger. + const double larger = n.radius > o.radius ? n.radius : o.radius; + const double err = std::abs(n.radius - o.radius) / larger; + if (err <= len_tol_frac && err < best_rad_err) { best_rad_err = err; best_rad_j = j; } + } else { + // R3 — tangent where a line meets a circle / arc at a shared endpoint, and only + // when the line is ALREADY perpendicular to the radius at that point. + const SketchEntity& ln = n_line ? n : o; + const SketchEntity& cv = n_line ? o : n; + const Vec2d ldir = ln.p1 - ln.p0; + bool tangent = false; + const Vec2d le[2] = { ln.p0, ln.p1 }; + for (int k = 0; k < 2 && !tangent; ++k) { + if (cv.type == SketchEntity::Type::Arc) { + const Vec2d ce[2] = { cv.p0, cv.p1 }; + for (int m = 0; m < 2; ++m) { + if ((le[k] - ce[m]).squaredNorm() > 1e-14) continue; + const Vec2d r = ce[m] - cv.center; + if (r.squaredNorm() < 1e-18) continue; + tangent = std::abs(unsigned_angle(ldir, r) - M_PI / 2.0) <= ang_tol_rad; + if (tangent) break; + } + } else { // Circle: shared point is a line endpoint on the rim. + const Vec2d r = le[k] - cv.center; + if (std::abs(r.norm() - cv.radius) > 1e-7) continue; + if (r.squaredNorm() < 1e-18) continue; + tangent = std::abs(unsigned_angle(ldir, r) - M_PI / 2.0) <= ang_tol_rad; + } + } + if (tangent && best_tan_err > 0.0) { best_tan_err = 0.0; best_tan_j = j; } + } + } + + auto emit = [&](SketchConstraintType t, int j) { + if (j < 0) return; + SketchEntityConstraintDef c; + c.type = t; c.ea = j; c.eb = new_ei; + out.push_back(c); + }; + emit(best_ang_type, best_ang_j); // R1 + emit(SketchConstraintType::EqualRadius, best_rad_j); // R2 + emit(SketchConstraintType::Tangent, best_tan_j); // R3 + return out; +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/SketchInference.hpp b/src/libslic3r/CAD/SketchInference.hpp new file mode 100644 index 0000000000..be51f0240e --- /dev/null +++ b/src/libslic3r/CAD/SketchInference.hpp @@ -0,0 +1,55 @@ +#ifndef slic3r_SketchInference_hpp_ +#define slic3r_SketchInference_hpp_ + +#include "libslic3r/CAD/SketchEngine.hpp" +#include +#include +#include + +namespace Slic3r { + +// Result of snapping a free cursor point onto the most relevant inference target +// among the committed sketch entities and the sketch origin. This is the backbone +// that lets geometry self-constrain as it is drawn: the GUI records the returned +// target at click time and, once the entity it belongs to exists, emits the +// matching constraint (Coincident onto an endpoint/centre, Fix onto the origin, +// PointOnObject onto an edge) so the relation survives a re-solve. +struct InferenceSnap { + enum class Kind { None, Endpoint, Center, Midpoint, OnEdge, Origin }; + Kind kind{Kind::None}; + int entity{-1}; // hit entity index (-1 = origin/none) + SketchPointRole role{SketchPointRole::P0}; // which point of `entity` (Endpoint/Center) + Vec2d point{0, 0}; // snapped coordinate (== query when None) + + bool snapped() const { return kind != Kind::None; } +}; + +// Snap `query` onto the best inference target within `tol` plane units. Priority, +// highest first: Endpoint, Center, Origin, Midpoint, OnEdge. Construction entities +// participate (you constrain to them too). Returns {None, query} when nothing is in +// range. Pure — no GUI / GL dependencies, so it is unit-testable in libslic3r. +InferenceSnap infer_point_snap(const std::vector& entities, + const Vec2d& query, double tol, + bool include_origin = true); + +// Relational inference for an in-progress segment anchor->tip. If its direction is +// within `ang_tol_rad` of an axis, returns Horizontal or Vertical (the constraint to +// auto-emit on the committed segment); std::nullopt otherwise. Degenerate (near-zero +// length) segments return nullopt. +std::optional +infer_axis_constraint(const Vec2d& anchor, const Vec2d& tip, double ang_tol_rad = 3.0 * M_PI / 180.0); + +// Relational constraints to auto-emit for a newly drawn entity `new_ei` against the +// entities already in the sketch. Pure, no GUI/GL dependencies, unit-testable. +// +// Deliberately conservative: every rule requires the relation to be ALREADY TRUE within +// tolerance, so an inferred constraint never moves geometry the user drew — it only pins a +// relation that is visibly there. Returns an empty vector when nothing qualifies. +std::vector +infer_relations(const std::vector& entities, int new_ei, + double ang_tol_rad = 2.0 * M_PI / 180.0, + double len_tol_frac = 0.01); + +} // namespace Slic3r + +#endif // slic3r_SketchInference_hpp_ diff --git a/src/libslic3r/CAD/SketchSolver.cpp b/src/libslic3r/CAD/SketchSolver.cpp new file mode 100644 index 0000000000..952f9de16f --- /dev/null +++ b/src/libslic3r/CAD/SketchSolver.cpp @@ -0,0 +1,555 @@ +#include "libslic3r/CAD/SketchSolver.hpp" + +#include + +#include +#include +#include +#include +#include + +namespace Slic3r { + +using CT = SketchConstraintType; +using Role = SketchPointRole; + +namespace { + +constexpr Slvs_hGroup G_FIXED = 1; // workplane / reference: held constant +constexpr Slvs_hGroup G_SK = 2; // sketch geometry: the group we solve + +// Per-entity slvs handles. p0/p1/center are point2d entity handles; prim is the +// line/arc/circle entity; rparam is the circle radius param. +struct Slots { + Slvs_hEntity prim{0}, p0{0}, p1{0}, center{0}; + Slvs_hParam rparam{0}; + std::vector pts; // BSpline control points (point2d handles) +}; + +struct Build { + std::vector params; + std::vector ents; + std::vector cons; + Slvs_hParam ph{0}; + Slvs_hEntity eh{0}; + Slvs_hConstraint ch{0}; + Slvs_hEntity wp{0}, normal{0}; + + Slvs_hParam P(Slvs_hGroup g, double v) { params.push_back(Slvs_MakeParam(++ph, g, v)); return ph; } + Slvs_hEntity E(Slvs_Entity e) { ents.push_back(e); return e.h; } + Slvs_hEntity pt2d(Slvs_hGroup g, double u, double v) + { return E(Slvs_MakePoint2d(++eh, g, wp, P(g, u), P(g, v))); } + + // Generic constraint (entityC unused by Slvs_MakeConstraint — set it manually below). + void C(int type, double val, Slvs_hEntity ptA, Slvs_hEntity ptB, + Slvs_hEntity eA, Slvs_hEntity eB, Slvs_hEntity eC = 0, int other = 0) + { + Slvs_Constraint c = Slvs_MakeConstraint(++ch, G_SK, type, wp, val, ptA, ptB, eA, eB); + c.entityC = eC; + c.other = other; + cons.push_back(c); + } +}; + +inline int role_idx(Role r) { return int(r); } + +} // namespace + +static SketchSolveResult solve_system(std::vector& entities, + const std::vector& constraints, + int dragged_ei, Role dragged_role) +{ + SketchSolveResult out; + if (constraints.empty()) { out.ok = true; out.dof = -1; return out; } + + Build b; + + // ---- Fixed 2D XY workplane (origin at 0,0,0; identity normal) ------------------- + Slvs_hEntity origin = b.E(Slvs_MakePoint3d(++b.eh, G_FIXED, + b.P(G_FIXED, 0.0), b.P(G_FIXED, 0.0), b.P(G_FIXED, 0.0))); + double qw, qx, qy, qz; + Slvs_MakeQuaternion(1, 0, 0, 0, 1, 0, &qw, &qx, &qy, &qz); + b.normal = b.E(Slvs_MakeNormal3d(++b.eh, G_FIXED, + b.P(G_FIXED, qw), b.P(G_FIXED, qx), b.P(G_FIXED, qy), b.P(G_FIXED, qz))); + b.wp = b.E(Slvs_MakeWorkplane(++b.eh, G_FIXED, origin, b.normal)); + + // Unit direction references for the axis-projected distance constraints. Both live in + // G_FIXED, so they are held constant and add no DOF to the system. + // libslvs defines a LINE_SEGMENT's direction as point[0] - point[1] (entity.cpp + // VectorGetExprs), so the unit vector's head is listed first to yield +X / +Y. + const Slvs_hEntity dir_x [[maybe_unused]] = b.E(Slvs_MakeLineSegment(++b.eh, G_FIXED, b.wp, + b.pt2d(G_FIXED, 1.0, 0.0), b.pt2d(G_FIXED, 0.0, 0.0))); + const Slvs_hEntity dir_y [[maybe_unused]] = b.E(Slvs_MakeLineSegment(++b.eh, G_FIXED, b.wp, + b.pt2d(G_FIXED, 0.0, 1.0), b.pt2d(G_FIXED, 0.0, 0.0))); + + // Implicit sketch references (origin, X axis, Y axis), addressable by the negative + // sentinels in SketchEngine.hpp. G_FIXED: held constant, zero added DOF. The axis lines + // are built head-first so their direction reads +X / +Y, matching dir_x / dir_y. + const Slvs_hEntity ref_origin_pt = b.pt2d(G_FIXED, 0.0, 0.0); + const Slvs_hEntity ref_axis_x = b.E(Slvs_MakeLineSegment(++b.eh, G_FIXED, b.wp, + b.pt2d(G_FIXED, 1.0, 0.0), ref_origin_pt)); + const Slvs_hEntity ref_axis_y = b.E(Slvs_MakeLineSegment(++b.eh, G_FIXED, b.wp, + b.pt2d(G_FIXED, 0.0, 1.0), ref_origin_pt)); + + // ---- Entities ------------------------------------------------------------------- + std::vector slot(entities.size()); + for (size_t i = 0; i < entities.size(); ++i) { + const SketchEntity& e = entities[i]; + Slots s; + switch (e.type) { + case SketchEntity::Type::Line: + s.p0 = b.pt2d(G_SK, e.p0.x(), e.p0.y()); + s.p1 = b.pt2d(G_SK, e.p1.x(), e.p1.y()); + s.prim = b.E(Slvs_MakeLineSegment(++b.eh, G_SK, b.wp, s.p0, s.p1)); + break; + case SketchEntity::Type::Point: + s.p0 = b.pt2d(G_SK, e.p0.x(), e.p0.y()); + break; + case SketchEntity::Type::Circle: { + s.center = b.pt2d(G_SK, e.center.x(), e.center.y()); + s.p0 = s.center; // p0 mirrors centre for circles + s.rparam = b.P(G_SK, e.radius > 1e-9 ? e.radius : 1.0); + Slvs_hEntity dist = b.E(Slvs_MakeDistance(++b.eh, G_SK, b.wp, s.rparam)); + s.prim = b.E(Slvs_MakeCircle(++b.eh, G_SK, b.wp, s.center, b.normal, dist)); + break; + } + case SketchEntity::Type::Arc: + s.center = b.pt2d(G_SK, e.center.x(), e.center.y()); + s.p0 = b.pt2d(G_SK, e.p0.x(), e.p0.y()); // start + s.p1 = b.pt2d(G_SK, e.p1.x(), e.p1.y()); // end + s.prim = b.E(Slvs_MakeArcOfCircle(++b.eh, G_SK, b.wp, b.normal, s.center, s.p0, s.p1)); + break; + // libslvs has no conic entity (scope note): register the ellipse's defining + // points only (center + arc endpoints) so center/endpoint constraints solve; + // the a/b/phi shape params pass through unsolved. + case SketchEntity::Type::Ellipse: + s.center = b.pt2d(G_SK, e.center.x(), e.center.y()); + s.p0 = s.center; // p0 mirrors centre (circle convention) + break; + case SketchEntity::Type::EllipseArc: + s.center = b.pt2d(G_SK, e.center.x(), e.center.y()); + s.p0 = b.pt2d(G_SK, e.p0.x(), e.p0.y()); // start + s.p1 = b.pt2d(G_SK, e.p1.x(), e.p1.y()); // end + break; + // No native slvs curve for an arbitrary-degree spline: register the control + // poles as point2d so endpoints (and any pole-targeted constraint) solve. The + // OCCT curve is rebuilt from the solved poles. p0/p1 mirror first/last pole so + // Coincident at the spline ends closes loops just like a Line. + case SketchEntity::Type::BSpline: + s.pts.reserve(e.ctrl.size()); + for (const Vec2d& cp : e.ctrl) + s.pts.push_back(b.pt2d(G_SK, cp.x(), cp.y())); + if (!s.pts.empty()) { s.p0 = s.pts.front(); s.p1 = s.pts.back(); } + break; + } + slot[i] = s; + } + + auto valid = [&](int ei) { return ei >= 0 && ei < int(entities.size()); }; + auto ptOf = [&](int ei, Role r) -> Slvs_hEntity { + if (ei == kSketchRefOrigin) return ref_origin_pt; + if (ei == kSketchRefAxisX || ei == kSketchRefAxisY) return ref_origin_pt; // axes pass through it + if (!valid(ei)) return 0; + const Slots& s = slot[ei]; + switch (r) { + case Role::P0: return s.p0; + case Role::P1: return s.p1; + case Role::Center: return s.center ? s.center : s.p0; + } + return 0; + }; + auto primOf = [&](int ei) -> Slvs_hEntity { + if (ei == kSketchRefAxisX) return ref_axis_x; + if (ei == kSketchRefAxisY) return ref_axis_y; + return valid(ei) ? slot[ei].prim : 0; // origin has no prim: it is a point + }; + auto coordOf = [&](int ei, Role r) -> Vec2d { + if (is_sketch_ref(ei)) return Vec2d(0, 0); // all three pass through the origin + if (!valid(ei)) return Vec2d(0, 0); + const SketchEntity& e = entities[ei]; + switch (r) { case Role::P0: return e.p0; case Role::P1: return e.p1; case Role::Center: return e.center; } + return e.p0; + }; + // A fixed reference point at (x,y) — used to pin coordinates (Fix / LockX / LockY). + auto fixedRef = [&](double x, double y) -> Slvs_hEntity { return b.pt2d(G_FIXED, x, y); }; + + // ---- Constraints ---------------------------------------------------------------- + for (const auto& c : constraints) { + // Robustness: never feed libslvs a null handle. A constraint that references an + // entity which produced no solver primitive (Point/Ellipse/EllipseArc/BSpline get + // no `prim`) or no point for the requested role would make Slvs FindById abort the + // whole process. Skip such a constraint instead of crashing. + bool ref_ok = true; + switch (c.type) { + case CT::Coincident: case CT::Horizontal: case CT::Vertical: case CT::Distance: + ref_ok = ptOf(c.ea, c.ra) && ptOf(c.eb, c.rb); break; + case CT::DistanceX: + case CT::DistanceY: + ref_ok = ptOf(c.ea, c.ra) && ptOf(c.eb, c.rb); break; + case CT::Concentric: + ref_ok = ptOf(c.ea, Role::Center) && ptOf(c.eb, Role::Center); break; + case CT::Fix: case CT::LockX: case CT::LockY: + ref_ok = ptOf(c.ea, c.ra) != 0; break; + case CT::EqualLength: case CT::Parallel: case CT::Perpendicular: + case CT::Angle: case CT::Tangent: + ref_ok = primOf(c.ea) && primOf(c.eb); break; + case CT::Radius: case CT::Diameter: + ref_ok = primOf(c.ea) != 0; break; + case CT::Midpoint: + ref_ok = ptOf(c.ea, c.ra) && primOf(c.eb); break; + case CT::Symmetric: + ref_ok = ptOf(c.ea, c.ra) && ptOf(c.eb, c.rb) && primOf(c.ec); break; + case CT::SymmetricAboutY: case CT::SymmetricAboutX: + ref_ok = ptOf(c.ea, c.ra) && ptOf(c.eb, c.rb); break; + case CT::PointOnLine: case CT::PointOnObject: + ref_ok = ptOf(c.ea, c.ra) && primOf(c.eb); break; + case CT::EqualRadius: + case CT::Collinear: + ref_ok = primOf(c.ea) && primOf(c.eb); break; + } + if (!ref_ok) continue; + switch (c.type) { + case CT::Coincident: + b.C(SLVS_C_POINTS_COINCIDENT, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), 0, 0); + break; + case CT::Concentric: + b.C(SLVS_C_POINTS_COINCIDENT, 0, ptOf(c.ea, Role::Center), ptOf(c.eb, Role::Center), 0, 0); + break; + case CT::Horizontal: + b.C(SLVS_C_HORIZONTAL, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), 0, 0); + break; + case CT::Vertical: + b.C(SLVS_C_VERTICAL, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), 0, 0); + break; + case CT::Distance: + b.C(SLVS_C_PT_PT_DISTANCE, c.value, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), 0, 0); + break; + case CT::DistanceX: + // Distance between the two points measured along X only: project the vector + // between them onto the fixed unit X direction. + b.C(SLVS_C_PROJ_PT_DISTANCE, c.value, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), dir_x, 0); + break; + case CT::DistanceY: + b.C(SLVS_C_PROJ_PT_DISTANCE, c.value, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), dir_y, 0); + break; + case CT::Fix: { + const Vec2d p = coordOf(c.ea, c.ra); + b.C(SLVS_C_POINTS_COINCIDENT, 0, ptOf(c.ea, c.ra), fixedRef(p.x(), p.y()), 0, 0); + break; + } + case CT::LockX: { + const Vec2d p = coordOf(c.ea, c.ra); + b.C(SLVS_C_VERTICAL, 0, ptOf(c.ea, c.ra), fixedRef(c.value, p.y()), 0, 0); + break; + } + case CT::LockY: { + const Vec2d p = coordOf(c.ea, c.ra); + b.C(SLVS_C_HORIZONTAL, 0, ptOf(c.ea, c.ra), fixedRef(p.x(), c.value), 0, 0); + break; + } + case CT::EqualLength: + b.C(SLVS_C_EQUAL_LENGTH_LINES, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + break; + case CT::Parallel: + b.C(SLVS_C_PARALLEL, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + break; + case CT::Perpendicular: + b.C(SLVS_C_PERPENDICULAR, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + break; + case CT::Midpoint: + b.C(SLVS_C_AT_MIDPOINT, 0, ptOf(c.ea, c.ra), 0, primOf(c.eb), 0); + break; + case CT::Symmetric: + // ptA, ptB symmetric about the axis line (ec). + b.C(SLVS_C_SYMMETRIC_LINE, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), primOf(c.ec), 0); + break; + case CT::SymmetricAboutY: + b.C(SLVS_C_SYMMETRIC_LINE, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), primOf(kSketchRefAxisY), 0); + break; + case CT::SymmetricAboutX: + b.C(SLVS_C_SYMMETRIC_LINE, 0, ptOf(c.ea, c.ra), ptOf(c.eb, c.rb), primOf(kSketchRefAxisX), 0); + break; + case CT::Angle: + // model stores radians; slvs angle is in degrees. + b.C(SLVS_C_ANGLE, c.value * 180.0 / M_PI, 0, 0, primOf(c.ea), primOf(c.eb)); + break; + case CT::Radius: + b.C(SLVS_C_DIAMETER, 2.0 * c.value, 0, 0, primOf(c.ea), 0); + break; + case CT::Diameter: + b.C(SLVS_C_DIAMETER, c.value, 0, 0, primOf(c.ea), 0); + break; + case CT::Tangent: { + const bool aCurve = valid(c.ea) && entities[c.ea].type != SketchEntity::Type::Line; + const bool bCurve = valid(c.eb) && entities[c.eb].type != SketchEntity::Type::Line; + if (aCurve && bCurve) + b.C(SLVS_C_CURVE_CURVE_TANGENT, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + else { + const int ci = aCurve ? c.ea : c.eb; // the curve + const int li = aCurve ? c.eb : c.ea; // the line + if (valid(ci) && entities[ci].type == SketchEntity::Type::Circle) { + // A FULL circle cannot use SLVS_C_ARC_LINE_TANGENT. That constraint reads + // arc->point[1] / point[2] — the arc's endpoints (see constrainteq.cpp, + // Type::ARC_LINE_TANGENT) — and a circle entity only has point[0], its + // centre. The zero handles send FindById into "Cannot find handle", which + // ABORTS the process rather than failing the solve, taking every later test + // with it. It is also the wrong equation for a circle: it only makes the + // line perpendicular to the radius AT AN ENDPOINT that does not exist. + // + // For a circle, tangency is exactly "the centre sits one radius away from + // the line", which slvs expresses directly. + // + // ponytail: the radius is captured here rather than tied as a variable — + // the C API takes a constant distance and offers no way to reference the + // circle's radius parameter. Exact whenever the radius is fixed or simply + // not being changed by another constraint in the same solve; if some other + // constraint drives the radius, re-solving restores tangency. Tying them + // would need an auxiliary point constrained onto both circle and line. + b.C(SLVS_C_PT_LINE_DISTANCE, entities[ci].radius, + ptOf(ci, Role::Center), 0, primOf(li), 0); + } else { + b.C(SLVS_C_ARC_LINE_TANGENT, 0, 0, 0, primOf(ci), primOf(li)); + } + } + break; + } + case CT::PointOnLine: + if (std::abs(c.value) < 1e-9) + b.C(SLVS_C_PT_ON_LINE, 0, ptOf(c.ea, c.ra), 0, primOf(c.eb), 0); + else + b.C(SLVS_C_PT_LINE_DISTANCE, std::abs(c.value), ptOf(c.ea, c.ra), 0, primOf(c.eb), 0); + break; + case CT::PointOnObject: + // Point (ea,ra) lies on entity edge eb: a circle rim -> PT_ON_CIRCLE, + // otherwise the segment line -> PT_ON_LINE. + if (valid(c.eb) && entities[c.eb].type == SketchEntity::Type::Circle) + b.C(SLVS_C_PT_ON_CIRCLE, 0, ptOf(c.ea, c.ra), 0, primOf(c.eb), 0); + else + b.C(SLVS_C_PT_ON_LINE, 0, ptOf(c.ea, c.ra), 0, primOf(c.eb), 0); + break; + case CT::EqualRadius: + b.C(SLVS_C_EQUAL_RADIUS, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + break; + case CT::Collinear: + // libslvs has no collinear code. Two lines are collinear iff they are parallel + // AND a point of one lies on the other's infinite line — emit both. + b.C(SLVS_C_PARALLEL, 0, 0, 0, primOf(c.ea), primOf(c.eb)); + // Point-on-infinite-line via PT_LINE_DISTANCE=0 rather than PT_ON_LINE: the + // latter creates an internal `valP` param that this port's Slvs_Solve leaves at + // 0 in the working set (ModifyToSatisfy only updates SK.param), so an already + // collinear pair drifts. PT_LINE_DISTANCE=0 is the same condition with no extra + // parameter, so an already-satisfied solve is a clean no-op. + b.C(SLVS_C_PT_LINE_DISTANCE, 0, ptOf(c.eb, Role::P0), 0, primOf(c.ea), 0); + break; + } + } + + // ---- Solve ---------------------------------------------------------------------- + Slvs_System sys; + std::memset(&sys, 0, sizeof(sys)); + sys.param = b.params.data(); sys.params = int(b.params.size()); + sys.entity = b.ents.data(); sys.entities = int(b.ents.size()); + sys.constraint = b.cons.data(); sys.constraints = int(b.cons.size()); + std::vector failed(b.cons.size() + 1, 0); + sys.failed = failed.data(); + sys.faileds = int(failed.size()); + sys.calculateFaileds = 1; + + // Drag pin: feed the dragged point's two params into sys.dragged[] so the solver + // favours keeping that point at the cursor and re-solves the rest around it. + if (dragged_ei >= 0) { + const Slvs_hEntity h = ptOf(dragged_ei, dragged_role); + for (const Slvs_Entity& en : b.ents) + if (en.h == h) { sys.dragged[0] = en.param[0]; sys.dragged[1] = en.param[1]; break; } + } + + Slvs_Solve(&sys, G_SK); + + out.result = sys.result; + out.dof = sys.dof; + out.ok = (sys.result == SLVS_RESULT_OKAY); + + // Map solved param handles -> values, then read points back. + std::unordered_map pv; + pv.reserve(sys.params * 2); + for (int i = 0; i < sys.params; ++i) pv[sys.param[i].h] = sys.param[i].val; + std::unordered_map byH; + byH.reserve(sys.entities * 2); + for (int i = 0; i < sys.entities; ++i) byH[sys.entity[i].h] = &sys.entity[i]; + auto coord = [&](Slvs_hEntity h) -> Vec2d { + auto it = byH.find(h); + if (it == byH.end()) return Vec2d(0, 0); + return Vec2d(pv[it->second->param[0]], pv[it->second->param[1]]); + }; + + // Map failed constraint handles back to indices into `constraints`. + if (!out.ok && sys.faileds > 0) { + std::unordered_map chToIdx; + // constraint handles were assigned in order starting after the fixed group; the + // i-th sketch constraint in b.cons has handle = its position. Rebuild by scanning. + for (size_t k = 0; k < b.cons.size(); ++k) chToIdx[b.cons[k].h] = int(k); + for (int i = 0; i < sys.faileds; ++i) { + auto it = chToIdx.find(failed[i]); + if (it != chToIdx.end() && it->second < int(constraints.size())) + out.bad.push_back(it->second); + } + } + + // ---- Read solved geometry back -------------------------------------------------- + // ONLY on success. A failed solve leaves libslvs' params holding its last Newton + // iterate — geometry that satisfies nothing and is usually wildly deformed. Writing + // that back made every rejected attempt destructive: the caller rolls the constraints + // back, but the sketch it rolls back to is already wreckage, so the next attempt starts + // from the corpse. The fillet degrade ladder hit this on every corner — rung 1 (a + // tangent on each leg) is legitimately over-constrained against the legs' own H/V, and + // its wreckage then failed rungs 2 and 3, which solve cleanly on their own. The arc + // ended up with no constraints at all and the solver snapped the corner shut. pl5. + if (!out.ok) return out; + for (size_t i = 0; i < entities.size(); ++i) { + SketchEntity& e = entities[i]; + const Slots& s = slot[i]; + if (s.p0) e.p0 = coord(s.p0); + if (s.p1) e.p1 = coord(s.p1); + if (s.center) e.center = coord(s.center); + + if (e.type == SketchEntity::Type::BSpline) { + for (size_t k = 0; k < s.pts.size() && k < e.ctrl.size(); ++k) + e.ctrl[k] = coord(s.pts[k]); + if (!e.ctrl.empty()) { e.p0 = e.ctrl.front(); e.p1 = e.ctrl.back(); } + } else if (e.type == SketchEntity::Type::Circle) { + if (s.rparam) { auto it = pv.find(s.rparam); if (it != pv.end()) e.radius = it->second; } + e.p0 = e.center; + } else if (e.type == SketchEntity::Type::Arc && s.center) { + // Reflow arc angles from solved centre + endpoints, preserving sweep sign. + const double old_sweep = e.end_angle - e.start_angle; + const double ns = std::atan2(e.p0.y() - e.center.y(), e.p0.x() - e.center.x()); + const double ne = std::atan2(e.p1.y() - e.center.y(), e.p1.x() - e.center.x()); + double sweep = ne - ns; + const double TWO_PI = 2.0 * M_PI; + while (sweep <= -TWO_PI) sweep += TWO_PI; + while (sweep >= TWO_PI) sweep -= TWO_PI; + if (old_sweep >= 0.0 && sweep < 0.0) sweep += TWO_PI; + if (old_sweep < 0.0 && sweep > 0.0) sweep -= TWO_PI; + e.start_angle = ns; + e.end_angle = ns + sweep; + e.radius = 0.5 * ((e.p0 - e.center).norm() + (e.p1 - e.center).norm()); + } + } + + return out; +} + +// libslvs carries a COMPILE-TIME ceiling: solvespace.h declares `enum { MAX_UNKNOWNS = 1024 }` +// and sizes the System's param and equation arrays with it. solve_system() hands the solver every +// entity in the sketch, constrained or not, at 2 params per point — so a sketch of about 480 lines +// is the last one that fits, and the very next one comes back TOO_MANY_UNKNOWNS. +// +// What that did, before this: DesignSketchTool::try_add_constraints rolls the whole batch back +// when the solve fails, so the auto-constraint pass over a large sketch dropped EVERY constraint +// it had just inferred. Measured on the rig — 480 lines: 960 constraints, dof 480. 520 lines: +// 0 constraints, dof unknown. Nothing was said, and from there on no dimension and no constraint +// could ever be applied to that sketch, because each attempt re-solved the same oversized system +// and was rejected in turn. A typed length simply did nothing. +// +// Constraints only couple entities that SHARE a point, so a sketch is naturally a set of +// independent systems — a plate with 300 cut-outs is 301 little problems, not one big one. +// Solving them separately keeps every one of them far under the ceiling AND is faster, since the +// solver's work is superlinear in system size. +// +// The whole system is still tried FIRST, and this runs only on TOO_MANY_UNKNOWNS, so every sketch +// that fits today keeps its exact current behaviour, including its reported degrees of freedom. +// A genuinely over-constrained sketch still fails: the conflict lives inside one component and +// that component still rejects it. +static SketchSolveResult solve_partitioned(std::vector& entities, + const std::vector& constraints, + int dragged_ei, Role dragged_role) +{ + const int n = int(entities.size()); + std::vector parent(n); + for (int i = 0; i < n; ++i) parent[i] = i; + std::function find = [&](int a) { + while (parent[a] != a) { parent[a] = parent[parent[a]]; a = parent[a]; } + return a; + }; + auto unite = [&](int a, int b) { + if (a < 0 || b < 0 || a >= n || b >= n) return; + a = find(a); b = find(b); + if (a != b) parent[a] = b; + }; + for (const auto& c : constraints) { unite(c.ea, c.eb); unite(c.ea, c.ec); } + + // Group the constraints by the component they belong to. + std::map> groups; + for (size_t i = 0; i < constraints.size(); ++i) { + const int a = constraints[i].ea; + if (a < 0 || a >= n) continue; + groups[find(a)].push_back(int(i)); + } + + SketchSolveResult out; + out.ok = true; + out.dof = 0; + // Solve into COPIES and commit only if every component succeeded. The contract callers rely + // on is all-or-nothing — try_add_constraints rolls the batch back and expects the geometry it + // rolls back to be untouched — and partial writes would break it. + std::vector, std::vector>> solved; + for (const auto& [root, cidx] : groups) { + std::vector ents; // global indices, in order + std::map local; // global -> local + auto take = [&](int e) { + if (e < 0 || e >= n || local.count(e)) return; + local[e] = int(ents.size()); + ents.push_back(e); + }; + for (int ci : cidx) { take(constraints[ci].ea); take(constraints[ci].eb); take(constraints[ci].ec); } + std::vector sub; + sub.reserve(ents.size()); + for (int e : ents) sub.push_back(entities[e]); + std::vector subc; + subc.reserve(cidx.size()); + for (int ci : cidx) { + SketchEntityConstraintDef d = constraints[ci]; + auto map1 = [&](int& e) { e = (e >= 0 && local.count(e)) ? local[e] : -1; }; + map1(d.ea); map1(d.eb); map1(d.ec); + subc.push_back(d); + } + const int sub_drag = (dragged_ei >= 0 && local.count(dragged_ei)) ? local[dragged_ei] : -1; + SketchSolveResult r = solve_system(sub, subc, sub_drag, dragged_role); + if (!r.ok) { + out.ok = false; + out.result = r.result; + for (int bi : r.bad) + if (bi >= 0 && bi < int(cidx.size())) out.bad.push_back(cidx[bi]); + } + if (r.dof > 0) out.dof += r.dof; + solved.emplace_back(std::move(ents), std::move(sub)); + } + if (!out.ok) return out; + for (auto& [ents, sub] : solved) + for (size_t k = 0; k < ents.size(); ++k) entities[ents[k]] = sub[k]; + return out; +} + +static SketchSolveResult solve_impl(std::vector& entities, + const std::vector& constraints, + int dragged_ei, Role dragged_role) +{ + SketchSolveResult out = solve_system(entities, constraints, dragged_ei, dragged_role); + if (out.ok || out.result != SLVS_RESULT_TOO_MANY_UNKNOWNS) return out; + return solve_partitioned(entities, constraints, dragged_ei, dragged_role); +} + +SketchSolveResult sketch_solve(std::vector& entities, + const std::vector& constraints) +{ + return solve_impl(entities, constraints, -1, Role::P0); +} + +SketchSolveResult sketch_solve_drag(std::vector& entities, + const std::vector& constraints, + int dragged_ei, SketchPointRole dragged_role) +{ + return solve_impl(entities, constraints, dragged_ei, dragged_role); +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/SketchSolver.hpp b/src/libslic3r/CAD/SketchSolver.hpp new file mode 100644 index 0000000000..ada4474c7a --- /dev/null +++ b/src/libslic3r/CAD/SketchSolver.hpp @@ -0,0 +1,37 @@ +#ifndef slic3r_SketchSolver_hpp_ +#define slic3r_SketchSolver_hpp_ + +// Bridge from the Design tab's SketchEntity / SketchEntityConstraintDef model onto the +// vendored SolveSpace constraint solver (src/libslic3r/slvs, libslvs). Replaces the +// hand-rolled SketchConstraints: full constraint set, real DoF counting, and +// over-constrained (bad-constraint) detection. Solves on a fixed 2D XY workplane. + +#include "libslic3r/CAD/SketchEngine.hpp" +#include + +namespace Slic3r { + +struct SketchSolveResult { + bool ok{false}; // solver converged & consistent + int dof{-1}; // remaining degrees of freedom (>0 under-constrained) + int result{0}; // raw SLVS_RESULT_* code + std::vector bad; // indices (into `constraints`) of conflicting constraints +}; + +// Solve `constraints` over `entities` in place (writes solved coordinates back into the +// entities; arc angles are reflowed preserving sweep direction). No-op success when +// `constraints` is empty. +SketchSolveResult sketch_solve(std::vector& entities, + const std::vector& constraints); + +// Drag-aware solve: pins the (dragged_ei, dragged_role) point's parameters via the +// solver's `dragged[]` priority list so the solver keeps that point where the cursor +// placed it (caller must have moved it first) and moves the OTHER free geometry to +// re-satisfy the constraints. dragged_ei < 0 behaves identically to sketch_solve. +SketchSolveResult sketch_solve_drag(std::vector& entities, + const std::vector& constraints, + int dragged_ei, SketchPointRole dragged_role); + +} // namespace Slic3r + +#endif diff --git a/src/libslic3r/CAD/ThreadStandards.cpp b/src/libslic3r/CAD/ThreadStandards.cpp new file mode 100644 index 0000000000..2d113d01e6 --- /dev/null +++ b/src/libslic3r/CAD/ThreadStandards.cpp @@ -0,0 +1,95 @@ +#include "libslic3r/CAD/ThreadStandards.hpp" + +namespace Slic3r { + +// Imperial helpers: convert nominal inch diameter / threads-per-inch to mm. +static constexpr double IN = 25.4; +static inline double tpi_pitch(double tpi) { return IN / tpi; } + +const std::vector& thread_standards() +{ + using S = ThreadSpec::Series; + static const std::vector table = { + // --- ISO metric, coarse pitch (ISO 261 preferred series) --- + {"M1", 1.0, 0.25, S::MetricCoarse}, + {"M1.2", 1.2, 0.25, S::MetricCoarse}, + {"M1.6", 1.6, 0.35, S::MetricCoarse}, + {"M2", 2.0, 0.40, S::MetricCoarse}, + {"M2.5", 2.5, 0.45, S::MetricCoarse}, + {"M3", 3.0, 0.50, S::MetricCoarse}, + {"M4", 4.0, 0.70, S::MetricCoarse}, + {"M5", 5.0, 0.80, S::MetricCoarse}, + {"M6", 6.0, 1.00, S::MetricCoarse}, + {"M8", 8.0, 1.25, S::MetricCoarse}, + {"M10", 10.0, 1.50, S::MetricCoarse}, + {"M12", 12.0, 1.75, S::MetricCoarse}, + {"M14", 14.0, 2.00, S::MetricCoarse}, + {"M16", 16.0, 2.00, S::MetricCoarse}, + {"M20", 20.0, 2.50, S::MetricCoarse}, + {"M24", 24.0, 3.00, S::MetricCoarse}, + {"M30", 30.0, 3.50, S::MetricCoarse}, + {"M36", 36.0, 4.00, S::MetricCoarse}, + {"M42", 42.0, 4.50, S::MetricCoarse}, + {"M48", 48.0, 5.00, S::MetricCoarse}, + {"M56", 56.0, 5.50, S::MetricCoarse}, + {"M64", 64.0, 6.00, S::MetricCoarse}, + + // --- ISO metric, common fine pitches (ISO 261 fine series) --- + {"M8x1", 8.0, 1.00, S::MetricFine}, + {"M10x1.25", 10.0, 1.25, S::MetricFine}, + {"M10x1", 10.0, 1.00, S::MetricFine}, + {"M12x1.5", 12.0, 1.50, S::MetricFine}, + {"M12x1.25", 12.0, 1.25, S::MetricFine}, + {"M16x1.5", 16.0, 1.50, S::MetricFine}, + {"M20x1.5", 20.0, 1.50, S::MetricFine}, + {"M24x2", 24.0, 2.00, S::MetricFine}, + + // --- Unified National Coarse (UTS / ASME B1.1) --- + {"#1-64 UNC", 0.073 * IN, tpi_pitch(64), S::UNC}, + {"#2-56 UNC", 0.086 * IN, tpi_pitch(56), S::UNC}, + {"#3-48 UNC", 0.099 * IN, tpi_pitch(48), S::UNC}, + {"#4-40 UNC", 0.112 * IN, tpi_pitch(40), S::UNC}, + {"#5-40 UNC", 0.125 * IN, tpi_pitch(40), S::UNC}, + {"#6-32 UNC", 0.138 * IN, tpi_pitch(32), S::UNC}, + {"#8-32 UNC", 0.164 * IN, tpi_pitch(32), S::UNC}, + {"#10-24 UNC", 0.190 * IN, tpi_pitch(24), S::UNC}, + {"#12-24 UNC", 0.216 * IN, tpi_pitch(24), S::UNC}, + {"1/4-20 UNC", 0.250 * IN, tpi_pitch(20), S::UNC}, + {"5/16-18 UNC", 0.3125 * IN, tpi_pitch(18), S::UNC}, + {"3/8-16 UNC", 0.375 * IN, tpi_pitch(16), S::UNC}, + {"7/16-14 UNC", 0.4375 * IN, tpi_pitch(14), S::UNC}, + {"1/2-13 UNC", 0.500 * IN, tpi_pitch(13), S::UNC}, + {"9/16-12 UNC", 0.5625 * IN, tpi_pitch(12), S::UNC}, + {"5/8-11 UNC", 0.625 * IN, tpi_pitch(11), S::UNC}, + {"3/4-10 UNC", 0.750 * IN, tpi_pitch(10), S::UNC}, + {"7/8-9 UNC", 0.875 * IN, tpi_pitch(9), S::UNC}, + {"1-8 UNC", 1.000 * IN, tpi_pitch(8), S::UNC}, + + // --- Unified National Fine (UTS / ASME B1.1) --- + {"#2-64 UNF", 0.086 * IN, tpi_pitch(64), S::UNF}, + {"#4-48 UNF", 0.112 * IN, tpi_pitch(48), S::UNF}, + {"#6-40 UNF", 0.138 * IN, tpi_pitch(40), S::UNF}, + {"#8-36 UNF", 0.164 * IN, tpi_pitch(36), S::UNF}, + {"#10-32 UNF", 0.190 * IN, tpi_pitch(32), S::UNF}, + {"1/4-28 UNF", 0.250 * IN, tpi_pitch(28), S::UNF}, + {"5/16-24 UNF", 0.3125 * IN, tpi_pitch(24), S::UNF}, + {"3/8-24 UNF", 0.375 * IN, tpi_pitch(24), S::UNF}, + {"7/16-20 UNF", 0.4375 * IN, tpi_pitch(20), S::UNF}, + {"1/2-20 UNF", 0.500 * IN, tpi_pitch(20), S::UNF}, + {"9/16-18 UNF", 0.5625 * IN, tpi_pitch(18), S::UNF}, + {"5/8-18 UNF", 0.625 * IN, tpi_pitch(18), S::UNF}, + {"3/4-16 UNF", 0.750 * IN, tpi_pitch(16), S::UNF}, + {"1-12 UNF", 1.000 * IN, tpi_pitch(12), S::UNF}, + }; + return table; +} + +const ThreadSpec* find_thread_standard(const std::string& name) +{ + for (const ThreadSpec& s : thread_standards()) + if (s.name == name) + return &s; + return nullptr; +} + +} // namespace Slic3r diff --git a/src/libslic3r/CAD/ThreadStandards.hpp b/src/libslic3r/CAD/ThreadStandards.hpp new file mode 100644 index 0000000000..e9bfcc314f --- /dev/null +++ b/src/libslic3r/CAD/ThreadStandards.hpp @@ -0,0 +1,39 @@ +#ifndef slic3r_ThreadStandards_hpp_ +#define slic3r_ThreadStandards_hpp_ + +#include +#include + +namespace Slic3r { + +// Canonical mechanical thread specifications (ISO metric + Unified imperial). +// All dimensions are stored in millimetres so the CAD kernel can consume them +// directly. The profile is the common 60deg V shared by ISO 261/965 and ASME +// B1.1 (UTS), so the cut/ridge depth used by the Design-tab Thread tool is the +// basic external thread height h = 0.6134 * pitch, and the internal (tapped) +// minor diameter is D1 = D - 1.0825 * pitch (= D - 2*5H/8). +struct ThreadSpec { + enum class Series { MetricCoarse, MetricFine, UNC, UNF }; + + std::string name; // designation, e.g. "M6", "1/4-20 UNC" + double major_diameter_mm; // nominal (crest) diameter + double pitch_mm; // axial advance per turn + Series series; + + // 60deg basic external thread height (radial crest-to-root engagement). + double thread_depth_mm() const { return 0.6134 * pitch_mm; } + // Internal/tapped minor (tap-drill) diameter for the same nominal thread. + double minor_diameter_mm() const { return major_diameter_mm - 1.0825 * pitch_mm; } + + bool imperial() const { return series == Series::UNC || series == Series::UNF; } +}; + +// Full ordered table (metric coarse, metric fine, UNC, UNF) for GUI listing. +const std::vector& thread_standards(); + +// Exact case-sensitive designation lookup; nullptr if not a known standard. +const ThreadSpec* find_thread_standard(const std::string& name); + +} // namespace Slic3r + +#endif diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index 2880a3cc6b..e734c036fa 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -21,6 +21,11 @@ endif() option(BUILD_SHARED_LIBS "Build shared libs" OFF) option(USE_SLIC3R_CONSOLE_LOG "Enable console logging in RelWithDebInfo builds" OFF) +# SolveSpace constraint solver (2D sketch solver backbone), built in deps/SLVS. +if (SLIC3R_CAD) + find_package(SLVS REQUIRED) +endif () + set(lisbslic3r_sources AABBMesh.cpp AABBMesh.hpp @@ -147,6 +152,8 @@ set(lisbslic3r_sources Fill/FillBase.hpp Fill/FillConcentric.cpp Fill/FillConcentric.hpp + Fill/FillSpiralInset.cpp + Fill/FillSpiralInset.hpp Fill/FillConcentricInternal.cpp Fill/FillConcentricInternal.hpp Fill/FillCornerSmoothing.cpp @@ -258,6 +265,8 @@ set(lisbslic3r_sources GCode/SmallAreaInfillFlowCompensator.hpp GCode/SpiralVase.cpp GCode/SpiralVase.hpp + GCode/WipePathHelpers.cpp + GCode/WipePathHelpers.hpp GCode/ThumbnailData.cpp GCode/ThumbnailData.hpp GCode/Thumbnails.cpp @@ -270,6 +279,8 @@ set(lisbslic3r_sources GCode/WipeTower2.hpp GCode/WipeTower.cpp GCode/WipeTower.hpp + GCode/WipeTowerEstimate.cpp + GCode/WipeTowerEstimate.hpp GCodeWriter.cpp GCodeWriter.hpp Geometry/ArcWelder.hpp @@ -298,6 +309,8 @@ set(lisbslic3r_sources Layer.cpp Layer.hpp LayerRegion.cpp + LayOnFace.cpp + LayOnFace.hpp libslic3r.cpp libslic3r.h Line.cpp @@ -368,6 +381,8 @@ set(lisbslic3r_sources Preset.hpp PrincipalComponents2D.cpp PrincipalComponents2D.hpp + PublishSettings.cpp + PublishSettings.hpp PrintApply.cpp PrintBase.cpp PrintBase.hpp @@ -498,6 +513,29 @@ set(lisbslic3r_sources FlushVolPredictor.cpp ) +# Parametric Design/CAD kernel. Needs OCCT's ModelingAlgorithms module and the +# vendored SolveSpace solver; both are pulled in only when SLIC3R_CAD is ON. +if (SLIC3R_CAD) + list(APPEND lisbslic3r_sources + CAD/GeometryEngine.cpp + CAD/GeometryEngine.hpp + CAD/SketchEngine.cpp + CAD/SketchEngine.hpp + CAD/SketchConstraints.cpp + CAD/SketchConstraints.hpp + CAD/SketchSolver.cpp + CAD/SketchSolver.hpp + CAD/SketchInference.cpp + CAD/SketchInference.hpp + CAD/SketchImport.cpp + CAD/SketchImport.hpp + CAD/CadDocument.cpp + CAD/CadDocument.hpp + CAD/ThreadStandards.cpp + CAD/ThreadStandards.hpp + ) +endif () + if (APPLE) list(APPEND lisbslic3r_sources MacUtils.mm @@ -552,6 +590,12 @@ if (_opts) target_compile_options(libslic3r_cgal PRIVATE "${_opts_bad}") endif() +if (IS_CLANG_CL) + # CGAL passes /fp:strict /fp:except-. clang-cl reports the second as overriding part of + # the first; the settings cc1 receives are the same ones MSVC produces from that pair. + target_compile_options(libslic3r_cgal PRIVATE -Wno-overriding-option) +endif () + target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs) if (MSVC AND "${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") # 32 bit MSVC workaround @@ -603,6 +647,30 @@ set(OCCT_LIBS TKMath TKernel ) +# The CAD kernel is the only consumer of OCCT's ModelingAlgorithms module: TKFillet +# (BRepFilletAPI), TKOffset (BRepOffsetAPI) and TKBool, which the other two need. +# +# PREPEND, never append: this list is single-pass static link order, dependents before +# dependencies — note TKernel, which everything needs, is deliberately last. TKOffset +# references BRepAlgo_Loop, which TKBool defines, so TKOffset must come BEFORE TKBool. +# Appending put it after, and a strictly single-pass linker (the Flatpak build) failed with +# libTKOffset.a(BRepOffset_MakeLoops.cxx.o): undefined reference to +# `BRepAlgo_Loop::BRepAlgo_Loop()' +# while the ordinary Linux, macOS and Windows links resolved it anyway. Use set() rather +# than list(PREPEND), which needs CMake 3.15 and this project supports 3.13. +if (SLIC3R_CAD) + set(OCCT_LIBS TKFillet TKOffset TKBool ${OCCT_LIBS}) + # deps is configured separately, so its SLIC3R_CAD can differ from ours. The module is + # all-or-nothing, so one absent toolkit proves it; fail here rather than at link time. + if (NOT TARGET TKFillet) + message(FATAL_ERROR + "SLIC3R_CAD is ON, but the OpenCASCADE in ${CMAKE_PREFIX_PATH} was built without " + "BUILD_MODULE_ModelingAlgorithms. Rebuild the dependencies with -DSLIC3R_CAD=ON, " + "or configure this project with -DSLIC3R_CAD=OFF.") + endif () +endif () +# Published for the Windows packaging step in the top-level CMakeLists.txt. +set(OCCT_LIBS "${OCCT_LIBS}" CACHE INTERNAL "OCCT toolkits linked by libslic3r") target_link_libraries(libslic3r PUBLIC @@ -655,6 +723,10 @@ if (TARGET OpenVDB::openvdb) target_link_libraries(libslic3r PRIVATE OpenVDB::openvdb) endif() +if (SLIC3R_CAD) + target_link_libraries(libslic3r PUBLIC SLVS::slvs) +endif () + if(WIN32) target_link_libraries(libslic3r PRIVATE Psapi.lib bcrypt.lib) endif() @@ -663,6 +735,13 @@ if(SLIC3R_PROFILE) target_link_libraries(libslic3r PRIVATE Shiny) endif() +if (WIN32) + # Public, since BlacklistedLibraryCheck.hpp includes windows.h. Empty + # WIN32_LEAN_AND_MEAN matches the sources that define it themselves; bare + # NOMINMAX matches the one libigl already passes. + target_compile_definitions(libslic3r PUBLIC "WIN32_LEAN_AND_MEAN=" "NOMINMAX") +endif () + if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE) endif () diff --git a/src/libslic3r/Clipper2Utils.cpp b/src/libslic3r/Clipper2Utils.cpp index d389d25209..f119fc3924 100644 --- a/src/libslic3r/Clipper2Utils.cpp +++ b/src/libslic3r/Clipper2Utils.cpp @@ -13,8 +13,8 @@ Slic3r::Polylines Paths64_to_polylines(const Clipper2Lib::Paths64& in) Slic3r::Points points; points.reserve(path64.size()); for (const Clipper2Lib::Point64& point64 : path64) - points.emplace_back(std::move(Slic3r::Point(point64.x, point64.y))); - out.emplace_back(std::move(Slic3r::Polyline(points))); + points.emplace_back(Slic3r::Point(point64.x, point64.y)); + out.emplace_back(Slic3r::Polyline(points)); } return out; } @@ -29,7 +29,7 @@ Clipper2Lib::Paths64 Slic3rPoints_to_Paths64(const Container& in) Clipper2Lib::Path64 path; path.reserve(item.size()); for (const Slic3r::Point& point : item.points) - path.emplace_back(std::move(Clipper2Lib::Point64(point.x(), point.y()))); + path.emplace_back(Clipper2Lib::Point64(point.x(), point.y())); out.emplace_back(std::move(path)); } return out; @@ -44,7 +44,7 @@ Points Path64ToPoints(const Clipper2Lib::Path64& path64) { Points points; points.reserve(path64.size()); - for (const Clipper2Lib::Point64 &point64 : path64) points.emplace_back(std::move(Slic3r::Point(point64.x, point64.y))); + for (const Clipper2Lib::Point64 &point64 : path64) points.emplace_back(Slic3r::Point(point64.x, point64.y)); return points; } @@ -99,7 +99,7 @@ Clipper2Lib::Paths64 Slic3rPolygons_to_Paths64(const Polygons &in) for (const Polygon &poly : in) { Clipper2Lib::Path64 path; path.reserve(poly.points.size()); - for (const Slic3r::Point &point : poly.points) path.emplace_back(std::move(Clipper2Lib::Point64(point.x(), point.y()))); + for (const Slic3r::Point &point : poly.points) path.emplace_back(Clipper2Lib::Point64(point.x(), point.y())); out.emplace_back(std::move(path)); } return out; @@ -114,7 +114,7 @@ Clipper2Lib::Paths64 Slic3rExPolygons_to_Paths64(const ExPolygons& in) const auto &poly = expolygon.contour_or_hole(i); Clipper2Lib::Path64 path; path.reserve(poly.points.size()); - for (const Slic3r::Point &point : poly.points) path.emplace_back(std::move(Clipper2Lib::Point64(point.x(), point.y()))); + for (const Slic3r::Point &point : poly.points) path.emplace_back(Clipper2Lib::Point64(point.x(), point.y())); out.emplace_back(std::move(path)); } } @@ -134,8 +134,8 @@ Polylines _clipper2_pl_open(Clipper2Lib::ClipType clipType, const Slic3r::Polyli Slic3r::Polylines out; out.reserve(solution.size() + solution_open.size()); - polylines_append(out, std::move(Paths64_to_polylines(solution))); - polylines_append(out, std::move(Paths64_to_polylines(solution_open))); + polylines_append(out, Paths64_to_polylines(solution)); + polylines_append(out, Paths64_to_polylines(solution_open)); return out; } diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index 242e4bb146..52a46dcacf 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -1049,7 +1050,8 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex std::vector& different_settings = this->option("different_settings_to_system", true)->values; size_t size = different_settings.size(); if (size == 0) { - size = this->option("filament_settings_id")->values.size() + 2; + const auto *filament_ids = this->option("filament_settings_id"); + size = (filament_ids ? filament_ids->values.size() : 0) + 2; different_settings.resize(size); } @@ -1514,6 +1516,19 @@ std::optional parse_capability_ref(const std::string& value //BBS: add json support void ConfigBase::save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const +{ + // Serialize first: if that throws (invalid UTF-8), the existing file stays untouched. + std::ostringstream ss; + this->save_to_json(ss, name, from, version); + boost::nowide::ofstream c; + c.open(file, std::ios::out | std::ios::trunc); + c << ss.str(); + c.close(); + + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", saved config to %1%\n")%file; +} + +void ConfigBase::save_to_json(std::ostream &os, const std::string &name, const std::string &from, const std::string &version, bool replace_invalid_utf8) const { json j; //record the headers @@ -1560,12 +1575,7 @@ void ConfigBase::save_to_json(const std::string &file, const std::string &name, j["plugins"] = unique_refs; } - boost::nowide::ofstream c; - c.open(file, std::ios::out | std::ios::trunc); - c << j.dump(1, '\t') << std::endl; - c.close(); - - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format(", saved config to %1%\n")%file; + os << j.dump(1, '\t', false, replace_invalid_utf8 ? json::error_handler_t::replace : json::error_handler_t::strict) << std::endl; } void ConfigBase::save(const std::string &file) const @@ -1715,6 +1725,36 @@ const ConfigOption* DynamicConfig::optptr(const t_config_option_key &opt_key) co return (it == options.end()) ? nullptr : it->second.get(); } +// ConfigOptionBool(s)::deserialize only understands "1" and "0", but scripts commonly spell CLI +// flags as --opt=true or --opt=no. Map the usual spellings onto what deserialize() accepts, per +// comma-separated item so vector options keep working, and pass anything else through unchanged +// so a genuine typo is still reported as invalid. +static std::string normalize_cli_bool_value(const std::string &value) +{ + static const char* true_values[] = { "1", "true", "yes", "on", "enabled" }; + static const char* false_values[] = { "0", "false", "no", "off", "disabled" }; + + auto matches = [](const std::string &item, const char* const* candidates, size_t count) { + return std::any_of(candidates, candidates + count, [&item](const char* candidate) { return boost::iequals(item, candidate); }); + }; + + std::string normalized; + std::istringstream is(value); + std::string item; + while (std::getline(is, item, ',')) { + boost::trim(item); + if (! normalized.empty()) + normalized += ","; + if (matches(item, true_values, std::size(true_values))) + normalized += "1"; + else if (matches(item, false_values, std::size(false_values))) + normalized += "0"; + else + normalized += item; + } + return normalized; +} + bool DynamicConfig::read_cli(int argc, const char* const argv[], t_config_option_keys* extra, t_config_option_keys* keys) { // cache the CLI option => opt_key mapping @@ -1812,17 +1852,32 @@ bool DynamicConfig::read_cli(int argc, const char* const argv[], t_config_option // to the end of the value. if (opt_base->type() == coBools && value.empty()) static_cast(opt_base)->values.push_back(!no); - else + else { // Deserialize any other vector value (ConfigOptionInts, Floats, Percents, Points) the same way // they get deserialized from an .ini file. For ConfigOptionStrings, that means that the C-style unescape // will be applied for values enclosed in quotes, while values non-enclosed in quotes are left to be // unescaped by the calling shell. - opt_vector->deserialize(value, true); + const std::string vector_value = opt_base->type() == coBools ? normalize_cli_bool_value(value) : value; + bool deserialized = false; + try { + deserialized = opt_vector->deserialize(vector_value, true); + } catch (const std::exception &ex) { + // e.g. "nil" deserialized into a non-nullable vector option throws instead of + // returning false - treat that the same as any other invalid value here. + deserialized = false; + } + if (! deserialized) { + boost::nowide::cerr << "Invalid value for option --" << token.c_str() << std::endl; + return false; + } + } } else if (opt_base->type() == coBool) { if (value.empty()) static_cast(opt_base)->value = !no; - else - opt_base->deserialize(value); + else if (! opt_base->deserialize(normalize_cli_bool_value(value))) { + boost::nowide::cerr << "Invalid value for option --" << token.c_str() << std::endl; + return false; + } } else if (opt_base->type() == coString) { // Do not unescape single string values, the unescaping is left to the calling shell. static_cast(opt_base)->value = value; diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 9e4344820d..6d23ec3770 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -1006,6 +1006,7 @@ public: int getInt() const override { return this->value; } void setInt(int val) override { this->value = val; } ConfigOption* clone() const override { return new ConfigOptionInt(*this); } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionInt &rhs) const throw() { return this->value == rhs.value; } std::string serialize() const override @@ -1048,6 +1049,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionIntsTempl(*this); } ConfigOptionIntsTempl& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionIntsTempl &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionIntsTempl &rhs) const throw() { return this->values < rhs.values; } // Could a special "nil" value be stored inside the vector, indicating undefined value? @@ -1137,6 +1139,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionString(*this); } ConfigOptionString& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionString &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionString &rhs) const throw() { return this->value < rhs.value; } bool empty() const { return this->value.empty(); } @@ -1171,6 +1174,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionStrings(*this); } ConfigOptionStrings& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionStrings &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionStrings &rhs) const throw() { return this->values < rhs.values; } bool is_nil(size_t) const override { return false; } @@ -1215,6 +1219,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPercent(*this); } ConfigOptionPercent& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionFloat::operator==; bool operator==(const ConfigOptionPercent &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPercent &rhs) const throw() { return this->value < rhs.value; } @@ -1257,6 +1262,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPercentsTempl(*this); } ConfigOptionPercentsTempl& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionFloatsTempl::operator==; bool operator==(const ConfigOptionPercentsTempl &rhs) const throw() { return ConfigOptionFloatsTempl::vectors_equal(this->values, rhs.values); } bool operator< (const ConfigOptionPercentsTempl &rhs) const throw() { return ConfigOptionFloatsTempl::vectors_lower(this->values, rhs.values); } @@ -1502,6 +1508,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoint(*this); } ConfigOptionPoint& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionPoint &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPoint &rhs) const throw() { return this->value < rhs.value; } @@ -1539,6 +1546,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoints(*this); } ConfigOptionPoints& operator= (const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionPoints &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionPoints &rhs) const throw() { return std::lexicographical_compare(this->values.begin(), this->values.end(), rhs.values.begin(), rhs.values.end(), [](const auto &l, const auto &r){ return l < r; }); } @@ -1617,6 +1625,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionPoint3(*this); } ConfigOptionPoint3& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionPoint3 &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionPoint3 &rhs) const throw() { return this->value.x() < rhs.value.x() || (this->value.x() == rhs.value.x() && (this->value.y() < rhs.value.y() || (this->value.y() == rhs.value.y() && this->value.z() < rhs.value.z()))); } @@ -1860,6 +1869,7 @@ public: bool getBool() const override { return this->value; } ConfigOption* clone() const override { return new ConfigOptionBool(*this); } ConfigOptionBool& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionSingle::operator==; bool operator==(const ConfigOptionBool &rhs) const throw() { return this->value == rhs.value; } bool operator< (const ConfigOptionBool &rhs) const throw() { return int(this->value) < int(rhs.value); } @@ -1911,6 +1921,7 @@ public: ConfigOptionType type() const override { return static_type(); } ConfigOption* clone() const override { return new ConfigOptionBoolsTempl(*this); } ConfigOptionBoolsTempl& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + using ConfigOptionVector::operator==; bool operator==(const ConfigOptionBoolsTempl &rhs) const throw() { return this->values == rhs.values; } bool operator< (const ConfigOptionBoolsTempl &rhs) const throw() { return this->values < rhs.values; } // Could a special "nil" value be stored inside the vector, indicating undefined value? @@ -2163,6 +2174,7 @@ public: ConfigOptionEnumsGenericTempl& operator= (const ConfigOption* opt) { this->set(opt); return *this; } bool operator< (const ConfigOptionInts& rhs) const throw() { return this->values < rhs.values; } + using ConfigOptionInts::operator==; bool operator==(const ConfigOptionInts& rhs) const { if (rhs.type() != this->type()) @@ -2813,6 +2825,9 @@ public: //BBS: add json support void save_to_json(const std::string &file, const std::string &name, const std::string &from, const std::string &version) const; + // Same document, written to a stream. Invalid UTF-8 in a string value throws nlohmann's type_error unless + // replace_invalid_utf8 is set, which writes U+FFFD instead (for callers such as stdout with no handler). + void save_to_json(std::ostream &os, const std::string &name, const std::string &from, const std::string &version, bool replace_invalid_utf8 = false) const; // Rebuild the in-memory "plugins" manifest (the "name;uuid;capability" references the plugin // dispatchers consume) from the plugin-backed options via the registered resolver. save_to_json() diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index ef144b48d3..34d9a93590 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -968,10 +968,10 @@ EmbossStyles Emboss::get_font_list_by_register() { } // TODO: Fix global function -bool CALLBACK EnumFamCallBack(LPLOGFONT lplf, - LPNEWTEXTMETRIC lpntm, - DWORD FontType, - LPVOID aFontList) +int CALLBACK EnumFamCallBack(const LOGFONT *lplf, + const TEXTMETRIC *lpntm, + DWORD FontType, + LPARAM aFontList) { std::vector *fontList = (std::vector *) (aFontList); @@ -988,7 +988,7 @@ EmbossStyles Emboss::get_font_list_by_enumeration() { HDC hDC = GetDC(NULL); std::vector font_names; - EnumFontFamilies(hDC, (LPCTSTR) NULL, (FONTENUMPROC) EnumFamCallBack, + EnumFontFamilies(hDC, (LPCTSTR) NULL, EnumFamCallBack, (LPARAM) &font_names); EmbossStyles font_list; diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index e8348b3bd5..de80247bce 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -454,6 +454,10 @@ class ExtrusionLoop : public ExtrusionEntity { public: ExtrusionPaths paths; + // ORCA: Set on a loop extruded entirely in mid air and out of reach of the layer below: it has + // nothing to lean on until this layer is bridged, so the G-code writer holds it back until the + // infill is down. See defer_unsupported_loops() in PerimeterGenerator.cpp. + bool print_after_infill = false; ExtrusionLoop(ExtrusionLoopRole role = elrDefault) : m_loop_role(role) {} ExtrusionLoop(const ExtrusionPaths &paths, ExtrusionLoopRole role = elrDefault) : paths(paths), m_loop_role(role) {} diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp index 97f8f743fb..e5fbeb5cdb 100644 --- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp @@ -342,7 +342,7 @@ void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkin } // Thanks Cura developers for this function. -void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg, bool closed) +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, coordf_t layer_height, const FuzzySkinConfig& cfg, bool closed) { if (cfg.noise_type == NoiseType::Ripple) { @@ -356,7 +356,9 @@ void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value const double range_random_point_dist = cfg.point_distance / 2.; - const double min_extrusion_width = 0.01; // workaround for many print options. Need overwrite formula with the layer height parameter. The width must more than >>> layer_height * (1 - 0.25 * PI) * 1.05 <<< (last num is the coeff of overlay error case) + // ExtrusionJunction::w is a scaled coord_t, so this floor must be scaled too. + // Flow::rounded_rectangle_extrusion_spacing() requires width > height * (1 - 0.25 * PI); keep 5% above it. + const double min_extrusion_width = scaled(layer_height * (1. - 0.25 * M_PI) * 1.05); double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point auto* p0 = &ext_lines.front(); @@ -685,12 +687,13 @@ Polygon apply_fuzzy_skin(const Polygon& polygon, const PerimeterGenerator& perim void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerator& perimeter_generator, const bool is_contour, const bool closed) { const auto slice_z = perimeter_generator.slice_z; + const auto layer_height = perimeter_generator.layer_height; const auto& regions = perimeter_generator.regions_by_fuzzify; if (regions.size() == 1) { // optimization const auto& config = regions.begin()->first; const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion->junctions, slice_z, config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, config, closed); } else { // Merge regions that produce identical fuzzy effects (differ only in type). // When the style (e.g. External) and a painted region (All) both fuzzify this loop @@ -701,7 +704,7 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato // Fast path: single merged region — apply directly without splitting if (merged_regions.size() == 1 && merged_regions.front().expolygons.empty()) { - fuzzy_extrusion_line(extrusion->junctions, slice_z, *merged_regions.front().config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, *merged_regions.front().config, closed); return; } @@ -761,7 +764,7 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion->junctions, slice_z, *r.config, closed); + fuzzy_extrusion_line(extrusion->junctions, slice_z, perimeter_generator.layer_height, *r.config, closed); continue; } else { const auto current_ext = extrusion->junctions; @@ -769,12 +772,12 @@ void apply_fuzzy_skin(Arachne::ExtrusionLine* extrusion, const PerimeterGenerato segment.reserve(current_ext.size()); extrusion->junctions.clear(); - const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { + const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z, layer_height]() { // Orca: non fuzzy points to isolate fuzzy region const auto front = segment.front(); const auto back = segment.back(); - fuzzy_extrusion_line(segment, slice_z, *r.config, false); + fuzzy_extrusion_line(segment, slice_z, layer_height, *r.config, false); // Orca: only add non fuzzy point if it's not in the extrusion closing point. if (!extrusion->junctions.empty() && extrusion->junctions.front().p != front.p) { extrusion->junctions.push_back(front); diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp index 51d503a3c9..ab0c491b38 100644 --- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.hpp @@ -9,7 +9,7 @@ namespace Slic3r::Feature::FuzzySkin { void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg); -void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg, bool closed = true); +void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, coordf_t layer_height, const FuzzySkinConfig& cfg, bool closed = true); void group_region_by_fuzzify(PerimeterGenerator& g); diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 0888e1bb55..28fabed8af 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -11,7 +11,7 @@ #include "AABBTreeLines.hpp" #include "ExtrusionEntity.hpp" -#include "FillBase.hpp" +#include "Fill.hpp" #include "FillRectilinear.hpp" #include "FillLightning.hpp" #include "FillConcentricInternal.hpp" @@ -950,7 +950,7 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p params.extruder = region_config.internal_solid_filament_id; // Orca: forced fill order applies only to top/bottom surfaces filled with a // center-based pattern; everything else stays at Default to keep batching together. - if (params.pattern == ipConcentric || params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral) { + if (params.pattern == ipConcentric || params.pattern == ipSpiralInset || params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral) { if (params.extrusion_role == erTopSolidInfill) params.fill_order = region_config.top_surface_fill_order.value; else if (params.extrusion_role == erBottomSurface) @@ -1234,6 +1234,33 @@ std::vector group_fills(const Layer &layer, LockRegionParam &lock_p return surface_fills; } +// Orca: Anchors and printed infill must share the same body origin. Keep the choice +// here so per-model surface centering and separated sparse infill cannot drift apart. +static BoundingBox infill_bounding_box(const Layer &layer, const SurfaceFill &fill, const ExPolygon &expoly, BoundingBox bbox) +{ + const auto ¶ms = fill.params; + const auto &config = layer.regions()[fill.region_id]->region().config(); + const bool external = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface; + const bool per_model = external && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && + (params.pattern == ipArchimedeanChords || params.pattern == ipOctagramSpiral); + const bool separate = !external && params.separated_infills && + (is_separable_infill_pattern(params.pattern) || !config.solid_infill_rotate_template.value.empty() || + !config.sparse_infill_rotate_template.value.empty()); + if (per_model || separate) { + double best_overlap = 0.; + for (size_t i = 0; i < layer.lslices.size() && i < layer.lslices_separated_component_bboxes.size(); ++i) { + const double overlap = area(intersection_ex(layer.lslices[i], expoly)); + if (overlap > best_overlap) { + best_overlap = overlap; + const Point center = layer.lslices_separated_component_bboxes[i].center(); + bbox = layer.object()->bounding_box(); + bbox.translate(center.x(), center.y()); + } + } + } + return bbox; +} + #ifdef SLIC3R_DEBUG_SLICE_PROCESSING void export_group_fills_to_svg(const char *path, const std::vector &fills) { @@ -1332,7 +1359,8 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.anchor_length = surface_fill.params.anchor_length; params.anchor_length_max = surface_fill.params.anchor_length_max; params.resolution = resolution; - params.use_arachne = surface_fill.params.pattern == ipConcentric || surface_fill.params.pattern == ipConcentricInternal; + params.use_arachne = surface_fill.params.pattern == ipConcentric || surface_fill.params.pattern == ipSpiralInset || + surface_fill.params.pattern == ipConcentricInternal; params.layer_height = layerm->layer()->height; params.lateral_lattice_angle_1 = surface_fill.params.lateral_lattice_angle_1; params.lateral_lattice_angle_2 = surface_fill.params.lateral_lattice_angle_2; @@ -1352,19 +1380,9 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: // Orca: Checking the filling of a centered surface by drawing for each model parts bool is_top_or_bottom = params.extrusion_role == erTopSolidInfill || params.extrusion_role == erBottomSurface; - bool is_centered_infill = surface_fill.params.pattern == ipArchimedeanChords || surface_fill.params.pattern == ipOctagramSpiral; if (is_top_or_bottom) { params.center_of_surface_pattern = surface_fill.params.center_of_surface_pattern; // Orca: center of surface pattern } - // Orca: Each_Model centers the pattern on each model part's bbox; Each_Surface / Each_Assembly - // fall through to the default (whole-object) bounding box below. - bool is_per_model_center = is_top_or_bottom && params.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model && is_centered_infill; - bool is_separate_infill = !is_top_or_bottom && surface_fill.params.separated_infills && - ( - is_separable_infill_pattern(surface_fill.params.pattern) || - params.config->solid_infill_rotate_template != "" || - params.config->sparse_infill_rotate_template != "" ); - if( surface_fill.params.pattern == ipLockedZag ) { params.locked_zag = true; params.infill_lock_depth = surface_fill.params.infill_lock_depth; @@ -1388,34 +1406,8 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.can_reverse = false; for (ExPolygon& expoly : surface_fill.expolygons) { - // Orca: separate infill / per-model pattern centering. - // - // Center the pattern on each connected body of the object independently, so every piece - // is filled exactly as if it were sliced on its own: touching/overlapping parts merge - // into one body sharing a center, while separate parts and disconnected islands (even - // interleaved-but-not-touching ones, e.g. chain links) each get their own. The body each - // island belongs to, and its full bounding box, were resolved in 3D by PrintObject:: - // infill() (lslices_separated_component_bboxes, aligned with this layer's lslices). We - // match this fill region to the island it overlaps most, then re-use the whole-object - // bounding box (origin-centered — identical extent to the default, so coverage and cost - // are unchanged) re-centered on that body. - if (is_per_model_center || is_separate_infill) { - double best_overlap = 0.; - BoundingBox best_component; - for (size_t r = 0; r < this->lslices.size() && r < this->lslices_separated_component_bboxes.size(); ++ r) { - const double overlap = area(intersection_ex(this->lslices[r], expoly)); - if (overlap > best_overlap) { - best_overlap = overlap; - best_component = this->lslices_separated_component_bboxes[r]; - } - } - if (best_component.defined) { - const Point c = best_component.center(); - BoundingBox part_bbox = bbox; // origin-centered, whole-object extent (from above) - part_bbox.translate(c.x(), c.y()); // re-center on this body - f->set_bounding_box(part_bbox); - } - } // - End: separate infill / per-model pattern centering + // Orca: Reuse the body origin used for bridge anchoring, resetting it for each surface. + f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox)); f->no_overlap_expolygons = intersection_ex(surface_fill.no_overlap_expolygons, ExPolygons() = {expoly}, ApplySafetyOffset::Yes); if (params.symmetric_infill_y_axis) { @@ -1515,6 +1507,7 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc case ipCubic: case ipLine: case ipConcentric: + case ipSpiralInset: case ipHoneycomb: case ipLateralHoneycomb: case ip3DHoneycomb: @@ -1581,8 +1574,14 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc params.multiline = surface_fill.params.multiline; params.gyroid_optimized = surface_fill.params.gyroid_optimized; params.smooth_factor = surface_fill.params.smooth_factor; + // Orca: Match make_fills() when choosing the origin of plane-path patterns. + // Without the sparse extrusion role, the filler uses each surface's bounds + // instead of the object's bounds, so bridge anchors shift away from printed infill. + params.extrusion_role = surface_fill.params.extrusion_role; for (ExPolygon &expoly : surface_fill.expolygons) { + // Orca: Match the per-body origin of make_fills() before generating physical anchors. + f->set_bounding_box(infill_bounding_box(*this, surface_fill, expoly, bbox)); // Spacing is modified by the filler to indicate adjustments. Reset it for each expolygon. f->spacing = surface_fill.params.spacing; surface_fill.surface.expolygon = std::move(expoly); @@ -1596,6 +1595,25 @@ Polylines Layer::generate_sparse_infill_polylines_for_anchoring(FillAdaptive::Oc return sparse_infill_polylines; } +// Returns the filament id (1-based) the region is ironed with, or -1 when the +// region is not ironed. AllSolid always irons. TopSurfaces and TopmostOnly need +// either some top shells or, in spiral mode, more than one bottom shell, and +// TopmostOnly additionally needs the layer to be the topmost one. +int Layer::choose_ironing_extruder(const PrintRegionConfig &cfg, + bool spiral_mode, + bool is_topmost_layer) +{ + if (cfg.ironing_type == IroningType::NoIroning) + return -1; + const bool gate = (cfg.ironing_type == IroningType::AllSolid) + || ((cfg.top_shell_layers > 0 || (spiral_mode && cfg.bottom_shell_layers > 1)) + && (cfg.ironing_type == IroningType::TopSurfaces + || (cfg.ironing_type == IroningType::TopmostOnly && is_topmost_layer))); + if (!gate) + return -1; + return cfg.top_surface_filament_id; +} + // Create ironing extrusions over top surfaces. void Layer::make_ironing() { @@ -1665,19 +1683,10 @@ void Layer::make_ironing() if (! layerm->slices.empty()) { IroningParams ironing_params; const PrintRegionConfig &config = layerm->region().config(); - if (config.ironing_type != IroningType::NoIroning && - (config.ironing_type == IroningType::AllSolid || - ((config.top_shell_layers > 0 || (this->object()->print()->config().spiral_mode && config.bottom_shell_layers > 1)) && - (config.ironing_type == IroningType::TopSurfaces || - (config.ironing_type == IroningType::TopmostOnly && layerm->layer()->upper_layer == nullptr))))) { - if (config.outer_wall_filament_id == config.top_surface_filament_id || config.wall_loops == 0) { - // Iron the whole face. - ironing_params.extruder = config.top_surface_filament_id; - } else { - // Iron just the infill. - ironing_params.extruder = config.top_surface_filament_id; - } - } + ironing_params.extruder = Layer::choose_ironing_extruder( + config, + /*spiral_mode=*/this->object()->print()->config().spiral_mode, + /*is_topmost_layer=*/layerm->layer()->upper_layer == nullptr); if (ironing_params.extruder != -1) { //TODO just_infill is currently not used. ironing_params.just_infill = false; diff --git a/src/libslic3r/Fill/Fill.hpp b/src/libslic3r/Fill/Fill.hpp index e92ab2dee5..b183cf0253 100644 --- a/src/libslic3r/Fill/Fill.hpp +++ b/src/libslic3r/Fill/Fill.hpp @@ -14,6 +14,12 @@ namespace Slic3r { class ExtrusionEntityCollection; class LayerRegion; +class PrintObject; + +// Orca: Share the layer rotation calculation between infill generation and internal +// bridge angle selection so both interpret rotation templates in the same way. +double calculate_infill_rotation_angle(const PrintObject *object, size_t layer_id, + const double &fixed_infill_angle, const std::string &template_string); // An interface class to Perl, aggregating an instance of a Fill and a FillData. class Filler diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp index 344bb529f0..dbaa1f2ac9 100644 --- a/src/libslic3r/Fill/FillAdaptive.cpp +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -1395,8 +1395,8 @@ void Filler::_fill_surface_single( } #endif /* ADAPTIVE_CUBIC_INFILL_DEBUG_OUTPUT */ - const auto hook_length = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length))); - const auto hook_length_max = coordf_t(std::min(std::numeric_limits::max(), scale_(params.anchor_length_max))); + const auto hook_length = coordf_t(scale_(params.anchor_length)); + const auto hook_length_max = coordf_t(scale_(params.anchor_length_max)); Polylines all_polylines_with_hooks = all_polylines.size() > 1 ? connect_lines_using_hooks(std::move(all_polylines), expolygon, this->spacing, hook_length, hook_length_max) : std::move(all_polylines); diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 45157ec42d..f4615dc640 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -15,6 +15,7 @@ #include "FillBase.hpp" #include "FillConcentric.hpp" +#include "FillSpiralInset.hpp" #include "FillHoneycomb.hpp" #include "Fill3DHoneycomb.hpp" #include "FillGyroid.hpp" @@ -41,6 +42,7 @@ Fill* Fill::new_from_type(const InfillPattern type) { switch (type) { case ipConcentric: return new FillConcentric(); + case ipSpiralInset: return new FillSpiralInset(); case ipHoneycomb: return new FillHoneycomb(); case ipLateralHoneycomb: return new FillLateralHoneycomb(); case ip3DHoneycomb: return new Fill3DHoneycomb(); @@ -2465,9 +2467,11 @@ void Fill::connect_base_support(Polylines &&infill_ordered, const std::vector arches = evaluate_support_arches(infill_ordered, graph, spacing, params); - static const double cost_low = line_spacing * 1.3; - static const double cost_high = line_spacing * 2.; - static const double cost_veryhigh = line_spacing * 3.; + // Must not be static: line_spacing varies per call (base vs interface fills differ), + // and a static here would fix these to whichever call ran first, order depending on thread count. + const double cost_low = line_spacing * 1.3; + const double cost_high = line_spacing * 2.; + const double cost_veryhigh = line_spacing * 3.; { std::vector selected; diff --git a/src/libslic3r/Fill/FillRectilinear.cpp b/src/libslic3r/Fill/FillRectilinear.cpp index 0c82354b38..7edf350081 100644 --- a/src/libslic3r/Fill/FillRectilinear.cpp +++ b/src/libslic3r/Fill/FillRectilinear.cpp @@ -2395,12 +2395,7 @@ static std::vector chain_monotonic_regions( } // Probability (unnormalized) of traversing a link between two monotonic regions. - auto path_probability = [ -#ifndef __APPLE__ - // clang complains when capturing constexpr constants. - pheromone_alpha, pheromone_beta -#endif // __APPLE__ - ](AntPath &path) { + auto path_probability = [](AntPath &path) { return pow(path.pheromone, pheromone_alpha) * pow(path.visibility, pheromone_beta); }; @@ -3095,10 +3090,11 @@ bool FillRectilinear::fill_surface_trapezoidal( case 0: // Grid / Trapezoidal { // Generate a non-crossing trapezoidal pattern to avoid overextrusion at intersections when `multiline > 1`. - // P2--P3 - // / \ - // P0_P1/ \P4_ - // + /* + * P2--P3 + * / \ + * P0_P1/ \P4_ + */ // P0xP1x=P4xP0x=d1/2 // P2xP3x=d1 // P1yP2y=P2yP3y=d2 @@ -3176,10 +3172,12 @@ bool FillRectilinear::fill_surface_trapezoidal( case 1: // Triangular { // Generate a non-crossing trapezoidal pattern with a base line below. - // P1-P2 - // / \ - // P0/ \P3_P4 - // ---------------- + /* + * P1-P2 + * / \ + * P0/ \P3_P4 + * ---------------- + */ // P1xP2x=P3xP4x=d2 // P0yP1y=P2yP3y=h-2d1 // diff --git a/src/libslic3r/Fill/FillSpiralInset.cpp b/src/libslic3r/Fill/FillSpiralInset.cpp new file mode 100644 index 0000000000..e6323c2572 --- /dev/null +++ b/src/libslic3r/Fill/FillSpiralInset.cpp @@ -0,0 +1,426 @@ +#include "../ClipperUtils.hpp" +#include "../ExPolygon.hpp" +#include "../Surface.hpp" +#include "../VariableWidth.hpp" +#include "Arachne/WallToolPaths.hpp" + +#include "FillSpiralInset.hpp" + +#include +#include +#include + +namespace Slic3r { + +// Index of the corner the spiral should start at. Every following loop is split at the point nearest +// the end of the one before it, so this choice propagates inwards and decides where the whole spiral +// hands over from ring to ring. A tight corner is the worst place for it: there the next ring +// retreats along the bisector by spacing/sin(angle), so the spiral has to strike out several spacings +// to reach it instead of stepping across to a ring running parallel one spacing away. +// +// A right angle is taken first when the loop has one. It clips cleanly, since the trimming below +// scales with 1/sin(angle) and so is at its shortest and least sensitive there, and it holds its +// shape as the loop is offset inwards, which keeps the handover in the same place ring after ring. +// Failing that the widest corner is the flattest stretch on offer, which is the next best handover. +// A straight point is no corner at all and only turns up as an artefact of the offsetting, so it is +// skipped. +static int find_spiral_start_corner(const Polygon& loop) +{ + const size_t n = loop.points.size(); + if (n < 3) + return 0; + + // cos(85 deg): a corner within five degrees of square counts as a right angle. + static const double right_angle_cos = 0.08716; + // cos(179 deg): anything flatter than this counts as a straight point rather than a corner. + static const double straight_cos = -0.99985; + + // Only convex corners qualify. A reflex corner spans the same angle between its two edges but + // bulges the other way, so the next ring in steps away from it along the bisector instead of + // hugging it, and starting there hands over across a long diagonal on every single ring. Loops + // arrive counter-clockwise, in which case a convex corner turns left, but check the winding + // rather than trust it. A closed loop always has at least one convex corner. + const double convex_turn = loop.is_counter_clockwise() ? 1.0 : -1.0; + + double best_right_cos = right_angle_cos; + int best_right = -1; + double best_wide_cos = 1.0; + int best_wide = -1; + for (size_t i = 0; i < n; ++i) { + const Point& p_prev = loop.points[(i - 1 + n) % n]; + const Point& p = loop.points[i]; + const Point& p_next = loop.points[(i + 1) % n]; + + Vec2d e_in = (p - p_prev).cast(); + Vec2d e_out = (p_next - p).cast(); + double len1 = e_in.norm(); + double len2 = e_out.norm(); + if (len1 < 1e-6 || len2 < 1e-6) + continue; + if (convex_turn * (e_in.x() * e_out.y() - e_in.y() * e_out.x()) <= 0.0) + continue; + + // Cosine of the angle the two edges span at the corner: 1 at a spike, 0 square, -1 straight. + double cos_val = -e_in.dot(e_out) / (len1 * len2); + if (std::abs(cos_val) < best_right_cos) { + best_right_cos = std::abs(cos_val); + best_right = int(i); + } + if (cos_val > straight_cos && cos_val < best_wide_cos) { + best_wide_cos = cos_val; + best_wide = int(i); + } + } + if (best_right >= 0) + return best_right; + // A loop smooth enough to have no corner at all, a circle say, hands over equally well anywhere. + return best_wide < 0 ? 0 : best_wide; +} + +// Length to trim off the end of a loop so that it does not overlap the start of the next one. +// The theoretical gap is distance/sin(alpha), alpha being the angle between the last segment of the +// loop and the first segment of the next one. +static double loop_clip_length(const Polyline& loop_path, const double gap) +{ + const Point& p_prev = loop_path.points[loop_path.points.size() - 2]; + const Point& p_last = loop_path.points.back(); + const Point& p_next = loop_path.points[1]; + Vec2d v1 = (p_last - p_prev).cast(); + Vec2d v2 = (p_next - p_last).cast(); + if (v1.norm() < 1e-6 || v2.norm() < 1e-6) + return gap; + + double alpha = std::atan2(std::abs(v1.x() * v2.y() - v1.y() * v2.x()), v1.dot(v2)); + // Outside 45deg < alpha < 120deg the 1/sin(alpha) term would clip far too much, so fall back to the plain gap. + return (alpha > M_PI / 4 && alpha < 2 * M_PI / 3) ? gap / std::sin(alpha) : gap; +} + +// The chaining below drives two kinds of loop: the plain offset polygons of the classic path, and +// Arachne's variable width walls. These are the only four steps that differ between them. Widths run +// two per segment, so every point added or removed takes a pair with it. +static Polyline open_loop(const Polygon& loop, int start_index) { return loop.split_at_index(start_index); } + +static ThickPolyline open_loop(const Arachne::ExtrusionLine& loop, int start_index) +{ + ThickPolyline path = Arachne::to_thick_polyline(loop); + // start_at_index() rotates a closed path, and wants it closed with a matching width at both ends. + if (path.points.front() != path.points.back()) { + const coordf_t w_first = path.width.front(), w_last = path.width.back(); + path.points.emplace_back(path.points.front()); + path.width.emplace_back(w_last); + path.width.emplace_back(w_first); + } + path.start_at_index(start_index); + return path; +} + +static void clip_path_end(Polyline& path, double distance) { path.clip_end(distance); } + +static void clip_path_end(ThickPolyline& path, double distance) +{ + // Polyline::clip_end() knows nothing about the widths, so walk back trimming the two together. + while (distance > 0 && path.points.size() >= 2) { + const Point last = path.points.back(); + const coordf_t w_end = path.width.back(); + path.points.pop_back(); + path.width.pop_back(); + const coordf_t w_start = path.width.back(); + path.width.pop_back(); + + const Vec2d v = (path.points.back() - last).cast(); + const double len = v.norm(); + if (len > distance) { + const double t = distance / len; + path.points.emplace_back((last.cast() + v * t).cast()); + path.width.emplace_back(w_start); + path.width.emplace_back(w_start + (w_end - w_start) * (1.0 - t)); + return; + } + distance -= len; + } + path.clear(); +} + +static void append_path(Polyline& dst, Polyline&& src) { dst.append(std::move(src)); } + +static void append_path(ThickPolyline& dst, ThickPolyline&& src) +{ + if (dst.empty()) { + dst = std::move(src); + return; + } + if (dst.points.back() == src.points.front()) { + // Carrying straight on from the same point, so there is no run across to give a width to. + src.points.erase(src.points.begin()); + src.width.erase(src.width.begin(), src.width.begin() + 2); + } else { + // The run across to the next loop tapers between the two ends it joins. + const coordf_t w_from = dst.width.back(), w_to = src.width.front(); + dst.width.emplace_back(w_from); + dst.width.emplace_back(w_to); + } + append(dst.points, std::move(src.points)); + append(dst.width, std::move(src.width)); +} + +// The classic loops all carry the same width, so the innermost one of an island can still ring an +// unfilled pin hole, which the spiral plugs by running into the middle. Arachne's walls widen to take +// up whatever is left over, so there is nothing there to plug and the stub would only double back +// over the wall that just filled it. +static bool leaves_a_centre_hole(const Polygon&) { return true; } +static bool leaves_a_centre_hole(const Arachne::ExtrusionLine&) { return false; } + +static void append_path_point(Polyline& path, const Point& point) { path.points.emplace_back(point); } + +static void append_path_point(ThickPolyline& path, const Point& point) +{ + const coordf_t w = path.width.back(); + path.points.emplace_back(point); + path.width.emplace_back(w); + path.width.emplace_back(w); +} + +// Chain the loops of one surface into as few continuous spirals as its shape allows. The loops arrive +// ordered outside in, depth first, each paired with its outline in loop_outlines; every decision here +// is made on those outlines, so the two kinds of loop take exactly the same route. +template +static std::vector generate_spiral_insets(const FillParams& params, + const std::vector& loops, + const Polygons& loop_outlines, + const coord_t distance, + const ExPolygon& original_expoly) +{ + std::vector output; + PathType spiral; + Point current_pos(0, 0); + // Index into loops of the innermost loop appended to the spiral currently being built. + int innermost_loop = -1; + + // Whether the spiral can run straight from one point to the other. The run across is extruded, + // not travelled, so it has to be a genuine step over to the ring alongside: + // - up to a ring spacing and a half it cannot leave the material, and needs no check at all, + // which covers all but a few of the loops; + // - beyond that it is tested against the surface, which catches the points that are close in a + // straight line but separated by a hole or a notch; + // - past four spacings it is refused outright. A handover does stretch at a corner, where the + // next ring retreats along the bisector by spacing/sin(angle), but four spacings is already a + // fifteen degree wedge, and down a wedge that tight the run across would trace the bisector, + // which is where the tail is filled from anyway. Anything longer is a traverse across the + // surface that prints over what it crosses. Breaking the spiral leaves the G-code to travel it. + const double free_hop = 1.5 * double(distance); + const double max_hop = 4.0 * double(distance); + auto reachable = [&](const Point& from, const Point& to) { + const double hop = from.distance_to(to); + if (hop > max_hop) + return false; + return hop <= free_hop || original_expoly.contains(Line(from, to)); + }; + + // The centre point plugs the pin hole left in the middle of an island, it is not meant to + // traverse it, so it is only worth adding when the innermost loop has shrunk to about a ring. + const double max_center_stub = 2.0 * double(distance); + + // Emit the spiral built so far as one path and start over on a fresh island. + auto flush_spiral = [&]() { + if (spiral.empty()) + return; + // Run into the middle of the innermost loop so the island's centre is filled instead of being + // left as a pin hole. Only where there is a hole to fill: the loop has to still enclose open + // space once its own bead is accounted for, or the stub just runs back over that bead. And + // the point has to sit inside the loop and be reachable, or it runs off across the surface. + if (innermost_loop >= 0 && leaves_a_centre_hole(*loops[innermost_loop])) { + const Polygon& innermost = loop_outlines[innermost_loop]; + const Point centroid = innermost.centroid(); + if (!offset(innermost, -float(0.5 * double(distance))).empty() && centroid != spiral.last_point() && + spiral.last_point().distance_to(centroid) <= max_center_stub && innermost.contains(centroid) && + reachable(spiral.last_point(), centroid)) + append_path_point(spiral, centroid); + } + output.emplace_back(std::move(spiral)); + spiral.clear(); + innermost_loop = -1; + current_pos = Point(0, 0); + }; + + for (size_t i = 0; i < loops.size(); ++i) { + const Polygon& outline = loop_outlines[i]; + if (outline.points.empty()) + continue; + + // The loop is opened into a path with the split point repeated at both ends, so a usable one + // has at least 3 points. Both kinds of loop share the outline's indices, hence its start point. + PathType loop_path = open_loop(*loops[i], spiral.empty() ? find_spiral_start_corner(outline) : + current_pos.nearest_point_index(outline.points)); + if (loop_path.size() < 3) + continue; + + // Island jumping: the loops are ordered by their nesting, depth first, so the next one + // continues the current spiral exactly when it lies inside the one just laid down. Distance + // cannot stand in for that test: at a sharp corner the next ring retreats along the bisector + // by spacing/sin(angle), which leaves it several spacings away while still being the very + // next ring in, and the spiral would break off at every spike. + const bool same_island = innermost_loop >= 0 && loop_outlines[innermost_loop].contains(loop_path.points.front()); + if (!spiral.empty() && (!same_island || !reachable(spiral.last_point(), loop_path.points.front()))) { + flush_spiral(); + loop_path = open_loop(*loops[i], find_spiral_start_corner(outline)); + if (loop_path.size() < 3) + continue; + } + + // Clip the end of the loop to leave room for the run into the next one. The last loop of the + // surface has no successor, so it only gives up half of the gap. + clip_path_end(loop_path, loop_clip_length(loop_path, (i + 1 == loops.size() ? 0.5 : 1.0) * double(distance))); + // Clipping empties the path when the loop is shorter than the clipping length, which happens + // on the degenerate slivers that offsetting leaves behind. Such a loop carries no extrusion. + if (loop_path.size() < 2) + continue; + + append_path(spiral, std::move(loop_path)); + innermost_loop = int(i); + current_pos = spiral.last_point(); + } + + flush_spiral(); + + // An outward fill order runs every spiral from its centre to its outer edge, innermost island first. + if (params.fill_order != SurfaceFillOrder::Inward) { + for (PathType& path : output) + path.reverse(); + std::reverse(output.begin(), output.end()); + } + + return output; +} + +void FillSpiralInset::_fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + Polylines& polylines_out) +{ + BoundingBox bounding_box = expolygon.contour.bounding_box(); + + coord_t min_spacing = scale_(this->spacing); + coord_t distance = coord_t(min_spacing / params.density); + + if (params.density > 0.9999f && !params.dont_adjust) { + distance = this->_adjust_solid_spacing(bounding_box.size()(0), distance); + this->spacing = unscale(distance); + } + + Polygons loops = to_polygons(expolygon); + + ExPolygons last{std::move(expolygon)}; + while (!last.empty()) { + last = offset2_ex(last, -(distance + min_spacing / 2), +min_spacing / 2); + append(loops, to_polygons(last)); + } + + // Orders the loops outside in, depth first, which is the order the chaining below expects. + loops = union_pt_chained_outside_in(loops); + + std::vector loop_refs; + loop_refs.reserve(loops.size()); + for (const Polygon& loop : loops) + loop_refs.emplace_back(&loop); + + Polylines spiral_result = generate_spiral_insets(params, loop_refs, loops, distance, expolygon); + + append(polylines_out, spiral_result); +} + +void FillSpiralInset::_fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + ThickPolylines& thick_polylines_out) +{ + assert(params.use_arachne); + assert(this->print_config != nullptr && this->print_object_config != nullptr); + + // Only a solid surface is worth the variable width walls; a sparse one falls back to plain loops. + if (params.density <= 0.9999f || params.dont_adjust) { + Polylines polylines; + this->_fill_surface_single(params, thickness_layers, direction, expolygon, polylines); + append(thick_polylines_out, to_thick_polylines(std::move(polylines), scaled(this->spacing))); + return; + } + + // no rotation is supported for this infill pattern + Point bbox_size = expolygon.contour.bounding_box().size(); + coord_t min_spacing = scaled(this->spacing); + + coord_t loops_count = std::max(bbox_size.x(), bbox_size.y()) / min_spacing + 1; + Polygons polygons = offset(expolygon, float(min_spacing) / 2.f); + + double min_nozzle_diameter = *std::min_element(print_config->nozzle_diameter.values.begin(), print_config->nozzle_diameter.values.end()); + Arachne::WallToolPathsParams input_params; + input_params.min_bead_width = 0.85 * min_nozzle_diameter; + input_params.min_feature_size = 0.25 * min_nozzle_diameter; + input_params.wall_transition_length = 1.0 * min_nozzle_diameter; + input_params.wall_transition_angle = 10; + input_params.wall_transition_filter_deviation = 0.25 * min_nozzle_diameter; + input_params.wall_distribution_count = 1; + + Arachne::WallToolPaths wallToolPaths(polygons, min_spacing, min_spacing, loops_count, 0, params.layer_height, input_params); + std::vector walls_by_inset = wallToolPaths.getToolPaths(); + + // Open walls are the thin features Arachne fits between the closed ones. They cannot join a + // spiral, so they go out as they are; leaving them behind is what would put the gaps back. + std::vector walls; + Polygons wall_outlines; + ThickPolylines open_walls; + for (const Arachne::VariableWidthLines& inset : walls_by_inset) + for (const Arachne::ExtrusionLine& wall : inset) { + if (wall.empty()) + continue; + if (wall.is_closed) { + walls.emplace_back(&wall); + wall_outlines.emplace_back(wall.toPolygon()); + } else { + open_walls.emplace_back(Arachne::to_thick_polyline(wall)); + } + } + + // Arachne hands the walls back grouped by inset, which is not their nesting: around a hole the + // wall of a given inset lies inside the wall of that same inset around the contour. Nest them by + // containment instead, so the spiral follows one island all the way in before starting the next, + // the same order union_pt_chained_outside_in gives the classic path above. + const size_t wall_count = walls.size(); + std::vector nesting_depth(wall_count, 0), parent(wall_count, -1); + std::vector inside(wall_count * wall_count, 0); + for (size_t i = 0; i < wall_count; ++i) + for (size_t j = 0; j < wall_count; ++j) + if (i != j && wall_outlines[j].contains(walls[i]->junctions.front().p)) { + inside[i * wall_count + j] = 1; + ++nesting_depth[i]; + } + // The innermost of the walls containing this one, which is the deepest of them, is its parent. + for (size_t i = 0; i < wall_count; ++i) + for (size_t j = 0; j < wall_count; ++j) + if (inside[i * wall_count + j] && (parent[i] < 0 || nesting_depth[parent[i]] < nesting_depth[j])) + parent[i] = int(j); + + std::vector ordered; + Polygons outlines; + ordered.reserve(wall_count); + outlines.reserve(wall_count); + std::function descend = [&](int idx) { + ordered.emplace_back(walls[idx]); + outlines.emplace_back(wall_outlines[idx]); + for (size_t k = 0; k < wall_count; ++k) + if (parent[k] == idx) + descend(int(k)); + }; + for (size_t i = 0; i < wall_count; ++i) + if (parent[i] < 0) + descend(int(i)); + + ThickPolylines spiral_result = + generate_spiral_insets(params, ordered, outlines, min_spacing, expolygon); + + append(thick_polylines_out, std::move(spiral_result)); + append(thick_polylines_out, std::move(open_walls)); +} + +} // namespace Slic3r diff --git a/src/libslic3r/Fill/FillSpiralInset.hpp b/src/libslic3r/Fill/FillSpiralInset.hpp new file mode 100644 index 0000000000..eb799ec2f3 --- /dev/null +++ b/src/libslic3r/Fill/FillSpiralInset.hpp @@ -0,0 +1,37 @@ +#ifndef slic3r_FillSpiralInset_hpp_ +#define slic3r_FillSpiralInset_hpp_ + +#include "FillBase.hpp" + +namespace Slic3r { + +class FillSpiralInset : public Fill +{ +public: + ~FillSpiralInset() override = default; + bool is_self_crossing() override { return false; } + +protected: + Fill* clone() const override { return new FillSpiralInset(*this); }; + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + Polylines &polylines_out) override; + + // Orca: solid surfaces are filled with Arachne's variable width walls, which widen to take up + // whatever the fixed width loops above would have left over as gaps. + void _fill_surface_single( + const FillParams ¶ms, + unsigned int thickness_layers, + const std::pair &direction, + ExPolygon expolygon, + ThickPolylines &thick_polylines_out) override; + + bool no_sort() const override { return true; } +}; + +} // namespace Slic3r + +#endif // slic3r_FillSpiralInset_hpp_ diff --git a/src/libslic3r/FlushVolCalc.cpp b/src/libslic3r/FlushVolCalc.cpp index 9bdbc1737d..635328f5ab 100644 --- a/src/libslic3r/FlushVolCalc.cpp +++ b/src/libslic3r/FlushVolCalc.cpp @@ -40,8 +40,8 @@ static float DeltaHS_BBS(float h1, float s1, float v1, float h2, float s2, float return std::min(1.2f, dxy); } -FlushVolCalculator::FlushVolCalculator(int min, int max, int flush_dataset, float multiplier) - :m_min_flush_vol(min), m_max_flush_vol(max), m_multiplier(multiplier), m_flush_dataset(flush_dataset) +FlushVolCalculator::FlushVolCalculator(int min, int max, int flush_dataset) + :m_min_flush_vol(min), m_max_flush_vol(max), m_flush_dataset(flush_dataset) { } diff --git a/src/libslic3r/FlushVolCalc.hpp b/src/libslic3r/FlushVolCalc.hpp index 46d04d13ff..73baca5a89 100644 --- a/src/libslic3r/FlushVolCalc.hpp +++ b/src/libslic3r/FlushVolCalc.hpp @@ -15,7 +15,7 @@ extern const int g_max_flush_volume; class FlushVolCalculator { public: - FlushVolCalculator(int min, int max, int flush_dataset, float multiplier = 1.0f); + FlushVolCalculator(int min, int max, int flush_dataset); ~FlushVolCalculator() { } @@ -32,7 +32,6 @@ public: private: int m_min_flush_vol; int m_max_flush_vol; - float m_multiplier; int m_flush_dataset; }; diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index 50826924f4..10abe8e4de 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -10,6 +10,7 @@ #include #include +#include #ifdef _WIN32 #define DIR_SEPARATOR '\\' @@ -55,9 +56,9 @@ bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::s boost::filesystem::path temp_mtl_path(mtl_file); mtl_path = temp_mtl_path; } - auto _mtl_path = mtl_name_is_path ? mtl_abs_path.string().c_str() : mtl_path.string().c_str(); + const std::string _mtl_path = (mtl_name_is_path ? mtl_abs_path : mtl_path).string(); if (boost::filesystem::exists(mtl_name_is_path ? mtl_abs_path : mtl_path)) { - if (!ObjParser::mtlparse(_mtl_path, mtl_data)) { + if (!ObjParser::mtlparse(_mtl_path.c_str(), mtl_data)) { BOOST_LOG_TRIVIAL(error) << "load_obj:load_mtl: failed to parse " << _mtl_path; message = _L("load mtl in obj: failed to parse"); return false; diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index a5c3bb49a2..22e39b207f 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -111,14 +111,19 @@ bool StepPreProcessor::isUtf8File(const char* path) bool StepPreProcessor::isUtf8(const std::string str) { size_t num = 0; - int i = 0; + size_t i = 0; while (i < str.length()) { - if ((str[i] & 0x80) == 0x00) { + const unsigned char lead = static_cast(str[i]); + if ((lead & 0x80) == 0x00) { i++; - } else if ((num = preNum(str[i])) > 2) { + // preNum() counts the leading 1 bits, and a multi-byte sequence is 2 to 4 + // bytes long, so anything outside that range is not a lead byte. + } else if ((num = preNum(lead)) >= 2 && num <= 4) { + if (i + num > str.length()) + return false; i++; - for (int j = 0; j < num - 1; j++) { - if ((str[i] & 0xc0) != 0x80) + for (size_t j = 0; j < num - 1; j++) { + if ((static_cast(str[i]) & 0xc0) != 0x80) return false; i++; } @@ -132,15 +137,20 @@ bool StepPreProcessor::isUtf8(const std::string str) bool StepPreProcessor::isGBK(const std::string str) { size_t i = 0; while (i < str.length()) { - if (str[i] <= 0x7f) { + // char is signed here, so every byte compares <= 0x7f unless widened first. + const unsigned char lead = static_cast(str[i]); + if (lead <= 0x7f) { i++; continue; } else { - if (str[i] >= 0x81 && - str[i] <= 0xfe && - str[i + 1] >= 0x40 && - str[i + 1] <= 0xfe && - str[i + 1] != 0xf7) { + if (i + 1 >= str.length()) + return false; + const unsigned char trail = static_cast(str[i + 1]); + if (lead >= 0x81 && + lead <= 0xfe && + trail >= 0x40 && + trail <= 0xfe && + trail != 0xf7) { i += 2; continue; } @@ -586,7 +596,7 @@ Step::Step_Status Step::mesh(Model* model, for (Standard_Integer aNodeIter = 1; aNodeIter <= aTriangulation->NbNodes(); ++aNodeIter) { gp_Pnt aPnt = aTriangulation->Node(aNodeIter); aPnt.Transform(aTrsf); - points.emplace_back(std::move(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z()))); + points.emplace_back(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z())); } // BBS: copy triangles const TopAbs_Orientation anOrientation = anExpSF.Current().Orientation(); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 5391f9ba3d..09899aa4c2 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -102,45 +102,6 @@ struct ZipUnicodePathExtraField } }; -// Validate that a relative file path does not escape the root directory via path traversal. -static bool is_path_within_root(const std::string& file_path, const boost::filesystem::path& root) -{ - if (file_path.empty()) - return false; - - boost::filesystem::path p(file_path); - if (p.is_absolute()) - return false; - - // Reject any path component that is ".." - for (const auto& component : p) { - if (component == "..") - return false; - } - - // Resolve the full path and verify it starts with the canonical root (also catches symlink escapes) - try { - boost::filesystem::path full_path = root / p; - boost::filesystem::path canonical_root = boost::filesystem::weakly_canonical(root); - boost::filesystem::path canonical_full = boost::filesystem::weakly_canonical(full_path); - - auto root_str = canonical_root.string(); - auto full_str = canonical_full.string(); - if (full_str.length() < root_str.length()) - return false; - if (full_str.compare(0, root_str.length(), root_str) != 0) - return false; - // Ensure it's a proper prefix (not just a substring of a longer directory name) - if (full_str.length() > root_str.length() && - full_str[root_str.length()] != boost::filesystem::path::preferred_separator) - return false; - } catch (const boost::filesystem::filesystem_error&) { - return false; - } - - return true; -} - // VERSION NUMBERS // 0 : .3mf, files saved by older slic3r or other applications. No version definition in them. // 1 : Introduction of 3mf versioning. No other change in data saved into 3mf files. @@ -214,6 +175,10 @@ const std::string BBS_MODEL_CONFIG_RELS_FILE = "Metadata/_rels/model_settings.co const std::string SLICE_INFO_CONFIG_FILE = "Metadata/slice_info.config"; const std::string FILAMENT_SEQUENCE_FILE = "Metadata/filament_sequence.json"; const std::string BBS_LAYER_HEIGHTS_PROFILE_FILE = "Metadata/layer_heights_profile.txt"; +const std::string ORCA_CAD_RECIPE_FILE = "Metadata/orca_cad.bin"; +// Read-only: the recipe entry's pre-rename name. A reader that knows only the new one drops the +// feature tree of every project written before the move, without a word. Never written. +const std::string LEGACY_CAD_RECIPE_FILE = "Metadata/SnapOrca_cad.bin"; const std::string LAYER_CONFIG_RANGES_FILE = "Metadata/layer_config_ranges.xml"; const std::string BRIM_EAR_POINTS_FILE = "Metadata/brim_ear_points.txt"; /*const std::string SLA_SUPPORT_POINTS_FILE = "Metadata/Slic3r_PE_sla_support_points.txt"; @@ -681,6 +646,11 @@ bool bbs_is_valid_object_type(const std::string& type) namespace Slic3r { +bool is_published_3mf_flag(const std::string &value) +{ + return value == "1"; +} + void PlateData::parse_filament_info(GCodeProcessorResult *result) { if (!result) return; @@ -1217,6 +1187,20 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // add backup & restore logic bool _load_model_from_file(std::string filename, Model& model, PlateDataPtrs& plate_data_list, std::vector& project_presets, DynamicPrintConfig& config, ConfigSubstitutionContext& config_substitutions, Import3mfProgressFn proFn = nullptr, BBLProject* project = nullptr, int plate_id = 0); + + // A minimal published 3MF carries no slicer tags (any tag would make old receivers show + // a baked-in, wrong "old version" popup on their geometry-only fallback), so it + // classifies as From_Other. It is still a fully structured OrcaSlicer file though: + // identified by its own metadata, it keeps BBS-grade geometry handling (no instance + // splitting, no transform baking, no renaming) in this build. Old receivers without the + // publish feature don't know the metadata and take their third-party geometry path. + // Reads the parse-time metadata: the model XML carries it before its resources, while + // m_model->model_info is only filled in after the whole XML has been parsed. + bool _is_published_3mf() const { + const auto it = this->model_info.metadata_items.find(ORCA_PUBLISHED_TAG); + return it != this->model_info.metadata_items.end() && is_published_3mf_flag(it->second); + } + bool _is_svg_shape_file(const std::string &filename) const; bool _extract_from_archive(mz_zip_archive& archive, std::string const & path, std::function, bool restore = false); bool _extract_xml_from_archive(mz_zip_archive& archive, std::string const & path, XML_StartElementHandler start_handler, XML_EndElementHandler end_handler); @@ -1970,6 +1954,15 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // extract slic3r print config file _extract_project_config_from_archive(archive, stat, config, config_substitutions, model); } + else if (boost::algorithm::iequals(name, ORCA_CAD_RECIPE_FILE) + || boost::algorithm::iequals(name, LEGACY_CAD_RECIPE_FILE)) { + // Restore the editable CAD recipe (optional; absent in non-CAD projects). + if (stat.m_uncomp_size > 0) { + std::string buf((size_t)stat.m_uncomp_size, '\0'); + if (mz_zip_reader_extract_to_mem(&archive, stat.m_file_index, buf.data(), buf.size(), 0)) + model.cad_recipe = std::move(buf); + } + } else if (boost::algorithm::iequals(name, CUT_INFORMATION_FILE)) { // extract object cut info _extract_cut_information_from_archive(archive, stat, config_substitutions); @@ -2041,7 +2034,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) lock.close(); - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is more than one instance, // split the object in as many objects as instances BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", found 3mf from other vendor, split as instance"); @@ -3605,7 +3598,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_index_paths.insert({ object.first.second, object.first.first}); } - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is only one object, // set the object name to match the filename if (m_model->objects.size() == 1) @@ -5328,7 +5321,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) TriangleMesh triangle_mesh(std::move(its), volume_data.mesh_stats); - if (!m_is_bbl_3mf) { + if (!m_is_bbl_3mf && !_is_published_3mf()) { // if the 3mf was not produced by OrcaSlicer and there is only one instance, // bake the transformation into the geometry to allow the reload from disk command // to work properly @@ -5974,6 +5967,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool m_save_gcode { false }; // whether to save gcode for normal save bool m_skip_model { false }; // skip model when exporting .gcode.3mf bool m_skip_auxiliary { false }; // skip normal axuiliary files + bool m_minimal_published { false }; // published 3MF: omit the project config, the embedded preset files and the slicer tags bool m_use_loaded_id { false }; // whether to use loaded id for identify_id bool m_share_mesh { false }; // whether to share mesh between objects std::string m_thumbnail_middle = PRINTER_THUMBNAIL_MIDDLE_FILE; @@ -6027,6 +6021,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _add_mesh_to_object_stream(std::function const &flush, ObjectData const &object_data) const; bool _add_build_to_model_stream(std::stringstream& stream, const BuildItemsList& build_items) const; bool _add_layer_height_profile_file_to_archive(mz_zip_archive& archive, Model& model); + bool _add_cad_recipe_file_to_archive(mz_zip_archive& archive, Model& model); bool _add_layer_config_ranges_file_to_archive(mz_zip_archive& archive, Model& model); bool _add_brim_ear_points_file_to_archive(mz_zip_archive& archive, Model& model); bool _add_sla_support_points_file_to_archive(mz_zip_archive& archive, Model& model); @@ -6073,6 +6068,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_skip_auxiliary = store_params.strategy & SaveStrategy::SkipAuxiliary; m_share_mesh = store_params.strategy & SaveStrategy::ShareMesh; m_from_backup_save = store_params.strategy & SaveStrategy::Backup; + m_minimal_published = store_params.strategy & SaveStrategy::MinimalPublished; m_use_loaded_id = store_params.strategy & SaveStrategy::UseLoadedId; @@ -6422,6 +6418,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return false; } + if (!_add_cad_recipe_file_to_archive(archive, model)) { + close_zip_writer(&archive); + return false; + } + // BBS progress point /*BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" <<__LINE__ << boost::format("export 3mf EXPORT_STAGE_ADD_LAYER_RANGE\n"); if (proFn) { @@ -6482,7 +6483,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Adds slic3r print config file ("Metadata/Slic3r_PE.config"). // This file contains the content of FullPrintConfig / SLAFullPrintConfig. - if (config != nullptr) { + // Omitted for minimal published 3MF: OrcaSlicer versions without the publish feature + // then fall back to importing the geometry only, and new versions read the published + // payload from the model metadata instead. + if (config != nullptr && !m_minimal_published) { // BBS: change to json format // if (!_add_print_config_file_to_archive(archive, *config)) { if (!_add_project_config_file_to_archive(archive, *config, model)) { return false; } @@ -6495,8 +6499,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (cb_cancel) return false; } - // BBS: add project config - if (project_presets.size() > 0) { + // BBS: add project config (omitted for minimal published 3MF) + if (!m_minimal_published && project_presets.size() > 0) { // BBS: add project embedded preset files _add_project_embedded_presets_to_archive(archive, model, project_presets); @@ -6968,10 +6972,31 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Orca: PRIVACY: do not store creation & modification date in 3mf metadata_item_map[BBL_CREATION_DATE_TAG] = ""; metadata_item_map[BBL_MODIFICATION_TAG] = ""; - // Orca: Write the BambuStudio compatibility version string using SLIC3R_VERSION - metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + // Orca: Write the BambuStudio compatibility version string using SLIC3R_VERSION. + // A minimal published 3MF writes no slicer tags at all: any tag would route old + // receivers onto a geometry-only fallback whose baked-in popup misreports the + // file ("old OrcaSlicer version" / "BambuStudio"), while tag-less files classify + // as From_Other and import the geometry silently. + if (m_minimal_published) { + // metadata_item_map is seeded from the input file's metadata_items above, so a + // project opened from a regular Orca/BBS 3MF still carries the slicer-identifying + // tags it came with. Erase every one of them - not just the two most common - + // so a published 3MF is fully tag-less: old receivers classify it as From_Other + // and import the geometry silently instead of showing a baked-in "old version" + // popup, and no version marker survives to seed a later re-save. + metadata_item_map.erase(BBL_APPLICATION_TAG); + metadata_item_map.erase(ORCASLICER_TAG); + metadata_item_map.erase(BBS_3MF_VERSION); + metadata_item_map.erase(BBS_3MF_VERSION1); + } else { + metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); + } } - metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); + // The Bambu 3MF version marker is part of the slicer identity: omit it for a minimal + // published file along with the tags erased above (skipping the overwrite alone would + // leave the value the source file seeded into metadata_item_map). + if (!m_minimal_published) + metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); if (!model.mk_name.empty()) { metadata_item_map[BBL_MAKERLAB_TAG] = xml_escape(model.mk_name); @@ -6994,7 +7019,11 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) BOOST_LOG_TRIVIAL(info) << "bbs_3mf: save key= " << item.first << ", value = " << item.second; stream << " <" << METADATA_TAG << " name=\"" << item.first << "\">" << xml_escape(item.second) << "\n"; - if (item.first == BBL_APPLICATION_TAG) { + if (item.first == BBL_APPLICATION_TAG && !m_minimal_published) { + // The OrcaSlicer tag is only written for files that carry the Application + // tag, which a minimal published 3MF erases (see the map assignment above): + // the explicit !m_minimal_published guard keeps the tag-less guarantee from + // depending on that erase happening to run first. stream << " <" << METADATA_TAG << " name=\"" << ORCASLICER_TAG << "\">" << xml_escape(SoftFever_VERSION) << "\n"; } @@ -7648,6 +7677,19 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + bool _BBS_3MF_Exporter::_add_cad_recipe_file_to_archive(mz_zip_archive& archive, Model& model) + { + if (model.cad_recipe.empty()) + return true; + if (!mz_zip_writer_add_mem(&archive, ORCA_CAD_RECIPE_FILE.c_str(), + (const void*)model.cad_recipe.data(), model.cad_recipe.length(), + MZ_DEFAULT_COMPRESSION)) { + add_error("Unable to add CAD recipe file to archive"); + return false; + } + return true; + } + bool _BBS_3MF_Exporter::_add_layer_config_ranges_file_to_archive(mz_zip_archive& archive, Model& model) { std::string out = ""; @@ -8834,7 +8876,7 @@ public: auto model = object.get_model(); auto o = m_temp_model.add_object(object); int backup_id = model->get_object_backup_id(object); - push_task({ AddObject, (size_t) backup_id, object.get_model()->get_backup_path(), o, 1 }); + push_task({ AddObject, (size_t) backup_id, object.get_model()->get_backup_path(), o, { 1 } }); } void remove_object_mesh(ModelObject& object) { @@ -8844,7 +8886,7 @@ public: void backup_soon() { boost::lock_guard lock(m_mutex); m_other_changes_backup = true; - m_tasks.push_back({ Backup, 0, std::string(), nullptr, ++m_task_seq }); + m_tasks.push_back({ Backup, 0, std::string(), nullptr, { ++m_task_seq } }); m_cond.notify_all(); } @@ -8862,7 +8904,7 @@ public: m_ui_tasks.clear(); m_tasks.clear(); } - m_tasks.push_back({ RemoveBackup, model.id().id, model.get_backup_path(), nullptr, removeAll }); + m_tasks.push_back({ RemoveBackup, model.id().id, model.get_backup_path(), nullptr, { removeAll } }); ++m_task_seq; if (model.is_need_backup()) { m_other_changes = false; @@ -8963,7 +9005,7 @@ private: BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " inital and interval = " << m_interval; m_next_backup = boost::get_system_time() + boost::posix_time::seconds(m_interval); boost::unique_lock lock(m_mutex); - m_thread = std::move(boost::thread(boost::ref(*this))); + m_thread = boost::thread(boost::ref(*this)); } ~_BBS_Backup_Manager() { @@ -9077,7 +9119,7 @@ public: else m_cond.wait(lock); if (m_interval > 0 && boost::get_system_time() > m_next_backup) { - m_tasks.push_back({ Backup, 0, std::string(), nullptr, ++m_task_seq }); + m_tasks.push_back({ Backup, 0, std::string(), nullptr, { ++m_task_seq } }); m_next_backup += boost::posix_time::seconds(m_interval); // Maybe wakeup from power sleep if (m_next_backup < boost::get_system_time()) @@ -9173,6 +9215,126 @@ std::string bbs_3mf_get_thumbnail(const char *path) return data; } +namespace { + +// Parses just the model-file elements, mirroring the importer's +// _handle_start_metadata/_handle_end_metadata (attribute-order independent, entity-unescaped, +// whitespace tolerant). Stops the parser as soon as the published flag node is read so the +// geometry/resources that follow are skipped, which keeps the per-file cost small. +struct PublishedXmlProbe +{ + XML_Parser parser{nullptr}; + bool in_metadata{false}; + bool found{false}; + bool published{false}; + std::string curr_name; + std::string curr_value; + + static std::string attribute(const char** attrs, const char* key) + { + if (attrs == nullptr) + return std::string(); + // expat hands the attrs as a NULL-terminated {name, value, ...} array. + for (unsigned int a = 0; attrs[a] != nullptr; a += 2) + if (::strcmp(attrs[a], key) == 0 && attrs[a + 1] != nullptr) + return attrs[a + 1]; + return std::string(); + } + + static void XMLCALL start(void* user_data, const char* name, const char** attrs) + { + auto* self = static_cast(user_data); + if (::strcmp(name, METADATA_TAG) == 0) { + self->in_metadata = true; + self->curr_name = attribute(attrs, NAME_ATTR); + self->curr_value.clear(); + } else { + self->in_metadata = false; + } + } + + static void XMLCALL characters(void* user_data, const XML_Char* s, int len) + { + auto* self = static_cast(user_data); + if (self->in_metadata) + self->curr_value.append(s, len); + } + + static void XMLCALL end(void* user_data, const char* name) + { + auto* self = static_cast(user_data); + if (!self->in_metadata || ::strcmp(name, METADATA_TAG) != 0) + return; + self->in_metadata = false; + if (self->curr_name == ORCA_PUBLISHED_TAG) { + self->published = is_published_3mf_flag(xml_unescape(self->curr_value)); + self->found = true; + if (self->parser != nullptr) + XML_StopParser(self->parser, false); + } + } +}; + +} // namespace + +bool bbs_3mf_is_published(const std::string &path) +{ + mz_zip_archive archive; + mz_zip_zero_struct(&archive); + + struct close_lock + { + mz_zip_archive *archive; + void close() + { + if (archive) { + close_zip_reader(archive); + archive = nullptr; + } + } + ~close_lock() { close(); } + } lock{&archive}; + + if (!open_zip_reader(&archive, path)) + return false; + + // Read just the model XML (the metadata node sits before the resources, so the probe below + // stops early) rather than by a raw substring match; no geometry parsing. + int index = mz_zip_reader_locate_file(&archive, MODEL_FILE.c_str(), nullptr, 0); + if (index < 0) + return false; + mz_zip_archive_file_stat stat; + if (!mz_zip_reader_file_stat(&archive, index, &stat)) + return false; + std::string xml(stat.m_uncomp_size, '\0'); + if (!mz_zip_reader_extract_to_mem(&archive, index, xml.data(), xml.size(), 0)) + return false; + + XML_Parser parser = XML_ParserCreate(nullptr); + if (parser == nullptr) + return false; + + PublishedXmlProbe probe; + probe.parser = parser; + XML_SetUserData(parser, &probe); + XML_SetElementHandler(parser, PublishedXmlProbe::start, PublishedXmlProbe::end); + XML_SetCharacterDataHandler(parser, PublishedXmlProbe::characters); + // Never resolve external entities from a file we are only probing. + XML_SetExternalEntityRefHandler(parser, nullptr); + XML_SetEntityDeclHandler(parser, nullptr); + + const XML_Status status = XML_Parse(parser, xml.data(), static_cast(xml.size()), 1); + // XML_StopParser(parser, false) from the end handler makes XML_Parse return + // XML_STATUS_ERROR with XML_ERROR_ABORTED - treat that as success (we stopped on the flag). + const bool parse_ok = (status == XML_STATUS_OK) || + (XML_GetErrorCode(parser) == XML_ERROR_ABORTED && probe.found); + XML_ParserFree(parser); + + if (!parse_ok) + return false; + return probe.published; +} + bool load_gcode_3mf_from_stream(std::istream &data, DynamicPrintConfig *config, Model *model, PlateDataPtrs *plate_data_list, Semver *file_version) { CNumericLocalesSetter locales_setter; diff --git a/src/libslic3r/Format/bbs_3mf.hpp b/src/libslic3r/Format/bbs_3mf.hpp index 7f5bb8c78d..768ae7bcfe 100644 --- a/src/libslic3r/Format/bbs_3mf.hpp +++ b/src/libslic3r/Format/bbs_3mf.hpp @@ -159,12 +159,28 @@ enum class SaveStrategy SkipAuxiliary = 1 << 9, UseLoadedId = 1 << 10, ShareMesh = 1 << 11, + // Keep this separate from SplitModel, which uses the 0x1000 bit as part of its + // production-extension value. + MinimalPublished = 1 << 13, SplitModel = 0x1000 | ProductionExt, Encrypted = SecureContentExt | SplitModel, Backup = 0x10000 | WithGcode | Silence | SkipStatic | SplitModel, }; +// Model metadata keys of a "published" 3MF (see MinimalPublished): the flag marks a minimal, +// tag-less publish export, the others carry the author-selected settings payload. Namespaced +// with the "orca_published" prefix because metadata_items round-trips verbatim through other +// slicers, where a bare "published" key could collide. +inline constexpr const char *ORCA_PUBLISHED_TAG = "orca_published"; +inline constexpr const char *ORCA_PUBLISHED_KEYS_TAG = "orca_published_keys"; +inline constexpr const char *ORCA_PUBLISHED_MATERIAL_TAG = "orca_published_material_keys"; +inline constexpr const char *ORCA_PUBLISHED_CONFIG_TAG = "orca_published_config"; + +// Published files are produced with "1". The importer and the GUI loader both gate on this +// exact value, so a "0"/"false"/unknown value is rejected consistently. +bool is_published_3mf_flag(const std::string &value); + inline SaveStrategy operator | (SaveStrategy lhs, SaveStrategy rhs) { using T = std::underlying_type_t ; @@ -277,6 +293,9 @@ extern bool load_bbs_3mf(const char* path, DynamicPrintConfig* config, ConfigSub extern std::string bbs_3mf_get_thumbnail(const char * path); +// Lightweight check: does this 3mf carry the "published" (orca_published == "1") marker? Only reads the 3D/3dmodel.model metadata node +extern bool bbs_3mf_is_published(const std::string &path); + extern bool load_gcode_3mf_from_stream(std::istream & data, DynamicPrintConfig* config, Model* model, PlateDataPtrs* plate_data_list, Semver* file_version); diff --git a/src/libslic3r/Format/svg.cpp b/src/libslic3r/Format/svg.cpp index 7bfd73b987..7b720e62ef 100644 --- a/src/libslic3r/Format/svg.cpp +++ b/src/libslic3r/Format/svg.cpp @@ -352,7 +352,7 @@ bool load_svg(const char *path, Model *model, std::string &message) for (Standard_Integer aNodeIter = 1; aNodeIter <= aTriangulation->NbNodes(); ++aNodeIter) { gp_Pnt aPnt = aTriangulation->Node(aNodeIter); aPnt.Transform(aTrsf); - points.emplace_back(std::move(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z()))); + points.emplace_back(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z())); } // BBS: copy triangles const TopAbs_Orientation anOrientation = anExpSF.Current().Orientation(); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 4da68e82a1..adcea49a67 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1,5 +1,6 @@ #include "BoundingBox.hpp" #include "Config.hpp" +#include "GCode/WipePathHelpers.hpp" #include "GCodeWriter.hpp" #include "Polygon.hpp" #include "PrintConfig.hpp" @@ -439,7 +440,6 @@ static std::vector get_path_of_change_filament(const Print& print) auto& writer = gcodegen.writer(); auto& config = gcodegen.config(); auto extruder = writer.filament(); - auto extruder_id = extruder->extruder_id(); auto last_pos = gcodegen.last_pos(); // Declare & initialize retraction lengths @@ -476,13 +476,13 @@ static std::vector get_path_of_change_filament(const Print& print) wipe_speed = std::max(wipe_speed, 10.0); // Process wipe path & calculate wipe path length - double wipe_dist = scale_(config.wipe_distance.get_at(extruder_id)); + double wipe_dist = scale_(config.wipe_distance.get_at(extruder->config_index())); Polyline wipe_path = {last_pos}; wipe_path.append(this->path.points.begin() + 1, this->path.points.end()); double wipe_path_length = std::min(wipe_path.length(), wipe_dist); // Calculate the maximum retraction amount during wipe - retraction_length_during_wipe = config.retraction_speed.get_at(extruder_id) * + retraction_length_during_wipe = config.retraction_speed.get_at(extruder->config_index()) * unscale_(wipe_path_length) / wipe_speed; // If the maximum retraction amount during wipe is too small, @@ -565,6 +565,16 @@ static std::vector get_path_of_change_filament(const Print& print) return default_value; } + // Orca: rebuild the stored wipe path while preserving Polyline's boundary deduplication. + void Wipe::update_path(const ExtrusionPaths &paths, bool reverse) + { + reset_path(); + for (const ExtrusionPath& extrusion_path : paths) + path.append(extrusion_path.polyline.to_polyline()); + if (reverse) + path.reverse(); + } + std::string Wipe::wipe(GCode& gcodegen,double length, bool toolchange, bool is_last) { std::string gcode; @@ -617,14 +627,11 @@ static std::vector get_path_of_change_filament(const Print& print) if (gcodegen.enable_cooling_markers() && !is_last) cooling_mark = /*gcodegen.config().role_based_wipe_speed ? ";_EXTERNAL_PERIMETER" : */";_WIPE"; + // Orca: set speed once because wipe_speed is constant for all segments. gcode += gcodegen.writer().set_speed(_wipe_speed * 60, "", cooling_mark); for (const Line& line : wipe_path.lines()) { double segment_length = line.length(); double dE = length * (segment_length / wipe_dist); - //BBS: fix this FIXME - //FIXME one shall not generate the unnecessary G1 Fxxx commands, here wipe_speed is a constant inside this cycle. - // Is it here for the cooling markers? Or should it be outside of the cycle? - //gcode += gcodegen.writer().set_speed(wipe_speed * 60, "", gcodegen.enable_cooling_markers() ? ";_WIPE" : ""); gcode += gcodegen.writer().extrude_to_xy( gcodegen.point_to_gcode(line.b), -dE, @@ -1022,11 +1029,21 @@ static std::vector get_path_of_change_filament(const Print& print) double current_z = gcodegen.writer().get_position().z(); if (z == -1.) // in case no specific z was provided, print at current_z pos z = current_z; - if (!is_approx(z, current_z)) { + // Orca: wipe_tower_no_sparse_layers crash guard. With sparse layers skipped the tower is + // compacted far below the object, so descending to it is only safe once the nozzle is parked + // over the tower - which is what the is_finish_first travel above does. Otherwise the nozzle + // is still over the model and this descent would drive it into the print, so defer it to the + // re-descents below, which run after the travel to the tower. + const bool defer_compacted_descend = m_sparse_layers_skipped + && !tcr.priming && !tcr.is_finish_first && (current_z - z) > EPSILON; + if (!is_approx(z, current_z) && !defer_compacted_descend) { gcode += gcodegen.writer().retract(); gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer."); gcode += gcodegen.writer().unretract(); } + // Tower compacted below the object, so any extrusion emitted without an explicit z has to be + // pulled back down to it first. + const bool compacted_below_object = m_sparse_layers_skipped && z >= 0. && (tcr.print_z - z) > EPSILON; // Process the end filament gcode. bool add_change_filament_624 = false; @@ -1079,11 +1096,23 @@ static std::vector get_path_of_change_filament(const Print& print) std::string nozzle_change_gcode_trans; if (is_nozzle_change) { // move to start_pos before nozzle change + // Orca: travel_to() lifts to the object layer height to clear the print. That lift is + // needed when arriving from the model, but is a wasted full-height Z bounce when the + // nozzle already sits on the compacted tower, so travel at the compacted z instead. + const bool compact_intower_nc_travel = compacted_below_object + && (tcr.print_z - gcodegen.writer().get_position().z()) > EPSILON; std::string start_pos_str; start_pos_str = gcodegen.travel_to(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(tcr.nozzle_change_result.start_pos) + plate_origin_2d), erMixed, - "Move to nozzle change start pos"); + "Move to nozzle change start pos", compact_intower_nc_travel ? z : DBL_MAX); check_add_eol(start_pos_str); nozzle_change_gcode_trans += start_pos_str; + // The nozzle-change wipe below carries no explicit z, so it would extrude at the object + // layer height and float above the compacted tower. Descend unless the travel stayed down. + if (!compact_intower_nc_travel && compacted_below_object) { + std::string nc_z_descend = gcodegen.writer().travel_to_z(z, "Descend to compacted wipe tower z (no sparse layers)"); + check_add_eol(nc_z_descend); + nozzle_change_gcode_trans += nc_z_descend; + } nozzle_change_gcode_trans += gcodegen.unretract(); nozzle_change_gcode_trans += transform_gcode(tcr.nozzle_change_result.gcode, tcr.nozzle_change_result.start_pos, wipe_tower_offset, wipe_tower_rotation); gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(tcr.nozzle_change_result.end_pos) + plate_origin_2d)); @@ -1422,6 +1451,15 @@ static std::vector get_path_of_change_filament(const Print& print) start_filament_gcode_str = start_filament_gcode_str + wipe_next_start_point_str + toolchange_unretract_str; + // Orca: the custom change_filament_gcode lifts to the object layer height and the unretract + // de-hops back to it, so every tower extrusion emitted after it (purge moves, and the wall + // when it prints after the toolchange) would float above the compacted tower. Descend first. + if (compacted_below_object) { + std::string z_descend = gcodegen.writer().travel_to_z(z, "Descend to compacted wipe tower z (no sparse layers)"); + check_add_eol(z_descend); + start_filament_gcode_str += z_descend; + } + // Insert the end filament, toolchange, and start filament gcode into the generated gcode. DynamicConfig config; config.set_key_value("filament_end_gcode", new ConfigOptionString(end_filament_gcode_str)); @@ -1909,11 +1947,9 @@ static std::vector get_path_of_change_filament(const Print& print) // resulting in a wipe tower with sparse layers. double wipe_tower_z = -1; bool ignore_sparse = false; - if (gcodegen.config().wipe_tower_no_sparse_layers.value) { + if (m_sparse_layers_skipped) { wipe_tower_z = m_last_wipe_tower_print_z; - ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && - m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool && - m_layer_idx != 0); + ignore_sparse = wipe_tower_layer_is_sparse(m_tool_changes[m_layer_idx]) && m_layer_idx != 0; if (m_tool_change_idx == 0 && !ignore_sparse) wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; } @@ -1929,12 +1965,9 @@ static std::vector get_path_of_change_filament(const Print& print) // resulting in a wipe tower with sparse layers. double wipe_tower_z = -1; bool ignore_sparse = false; - if (gcodegen.config().wipe_tower_no_sparse_layers.value) { - wipe_tower_z = m_last_wipe_tower_print_z; - ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && - m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); - if (m_tool_change_idx == 0 && !ignore_sparse) - wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; + if (m_sparse_layers_skipped) { + ignore_sparse = wipe_tower_layer_is_sparse(m_tool_changes[m_layer_idx]); + wipe_tower_z = m_compacted_tower_z[m_layer_idx]; } if ((m_enable_timelapse_print || m_enable_wrapping_detection) && m_is_first_print) { @@ -1947,10 +1980,8 @@ static std::vector get_path_of_change_filament(const Print& print) if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer."); - if (!ignore_sparse) { + if (!ignore_sparse) gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); - m_last_wipe_tower_print_z = wipe_tower_z; - } } } @@ -1964,9 +1995,8 @@ static std::vector get_path_of_change_filament(const Print& print) return true; bool ignore_sparse = false; - if (gcodegen.config().wipe_tower_no_sparse_layers.value) { - ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); - } + if (m_sparse_layers_skipped) + ignore_sparse = wipe_tower_layer_is_sparse(m_tool_changes[m_layer_idx]); if ((m_enable_timelapse_print || m_enable_wrapping_detection) && m_is_first_print) { return false; @@ -2942,6 +2972,19 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato const bool skip_config_block = print.config().gcode_skip_config_block; const WipeTowerType wipe_tower_type = print.wipe_tower_type(); m_calib_config.clear(); + // Orca: Calibration overrides are reapplied after object/region settings in _extrude(). + // Keep inward wiping from masking retraction and pressure advance artifacts. + switch (print.calib_mode()) { + case CalibMode::Calib_PA_Line: + case CalibMode::Calib_PA_Pattern: + case CalibMode::Calib_PA_Tower: + case CalibMode::Calib_Auto_PA_Line: + case CalibMode::Calib_Retraction_tower: + m_calib_config.set_key_value("wipe_inward", new ConfigOptionBool(false)); + break; + default: + break; + } // resets analyzer's tracking data m_last_height = 0.f; m_last_layer_z = 0.f; @@ -3596,7 +3639,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato auto used_filaments = print.get_slice_used_filaments(false); this->placeholder_parser().set("is_all_bbl_filament", std::all_of(used_filaments.begin(), used_filaments.end(), [&](auto idx) { - return m_config.filament_vendor.values[idx] == "Bambu Lab"; + return m_config.filament_vendor.get_at(idx) == "Bambu Lab"; })); //add during_print_exhaust_fan_speed @@ -3613,7 +3656,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato this->placeholder_parser().set("outer_wall_volumetric_speed", new ConfigOptionFloat(outer_wall_volumetric_speed)); auto first_layer_filaments = print.get_slice_used_filaments(true); - bool has_tpu_in_first_layer = std::any_of(first_layer_filaments.begin(), first_layer_filaments.end(), [&](unsigned int idx) { return m_config.filament_type.values[idx] == "TPU"; }); + bool has_tpu_in_first_layer = std::any_of(first_layer_filaments.begin(), first_layer_filaments.end(), [&](unsigned int idx) { return m_config.filament_type.get_at(idx) == "TPU"; }); this->placeholder_parser().set("has_tpu_in_first_layer", new ConfigOptionBool(has_tpu_in_first_layer)); if (print.calib_params().mode == CalibMode::Calib_PA_Line) { @@ -6349,8 +6392,13 @@ LayerResult GCode::process_layer( all_label_ids.insert(inst.label_object_id); break; } - std::vector filament_instances_id(all_label_ids.begin(), all_label_ids.end()); - m_filament_instances_code = _encode_label_ids_to_base64(filament_instances_id); + // Orca: A scheduled extruder may have no object instances on this layer. + // Clear any pending mask so it cannot be emitted for the wrong toolchange. + m_filament_instances_code.clear(); + if (!all_label_ids.empty()) { + std::vector filament_instances_id(all_label_ids.begin(), all_label_ids.end()); + m_filament_instances_code = _encode_label_ids_to_base64(filament_instances_id); + } } // The inline _extrude hook may already have taken the snapshot mid-extrusion on a @@ -6596,6 +6644,8 @@ LayerResult GCode::process_layer( } // Then print infill gcode += this->extrude_infill(print, by_region_specific, false); + // Then the walls left hanging in mid air, now that the infill can anchor them + gcode += this->extrude_perimeters(print, by_region_specific, first_layer, false, true); // Then print perimeters of regions that has is_infill_first == true gcode += this->extrude_perimeters(print, by_region_specific, first_layer, true); } @@ -6891,6 +6941,7 @@ LayerResult GCode::process_layer( has_insert_timelapse_gcode = true; } gcode += this->extrude_infill(print, by_region_specific, false); + gcode += this->extrude_perimeters(print, by_region_specific, first_layer, false, true); gcode += this->extrude_perimeters(print, by_region_specific, first_layer, true); // ironing gcode += this->extrude_infill(print, by_region_specific, true); @@ -7240,7 +7291,8 @@ std::string GCode::extrude_loop(const ExtrusionLoop& loop_ref, const std::string& description, double speed, const ExtrusionEntitiesPtr& region_perimeters, - const Point* start_point) + const Point* start_point, + const WipeInwardSupport* wipe_support) { // get a copy; don't modify the orientation of the original loop object otherwise // next copies (if any) would not detect the correct orientation @@ -7470,63 +7522,80 @@ std::string GCode::extrude_loop(const ExtrusionLoop& loop_ref, m_processor.result().print_statistics.total_seam_scarf_distance += static_cast(seam_scarf_distance_mm); } - // BBS + // Orca: share the post-extrusion nozzle position between wipe_inward and wipe_on_loops. + const bool is_ccw = loop.is_counter_clockwise(); + + std::optional wipe_on_loops_dest; + if (m_config.wipe_on_loops.value && paths.back().role() == erExternalPerimeter && + m_layer != nullptr && m_config.wall_loops.value > 1 && paths.front().size() >= 2 && + paths.back().polyline.points.size() >= 2) + wipe_on_loops_dest = wipe_on_loops_destination(paths, scale_(nozzle_diameter), is_ccw, is_hole); + + bool wipe_inward_applied = false; + // Orca: store loop paths in print order because inward offsets use this orientation. if (m_wipe.enable && FILAMENT_CONFIG(wipe)) { - m_wipe.path = Polyline(); - for (ExtrusionPath &path : paths) { - //BBS: Don't need to save duplicated point into wipe path - if (!m_wipe.path.empty() && !path.empty() && - m_wipe.path.last_point() == Point(path.first_point().x(), path.first_point().y())) { - // Convert Points3 to Points - for (auto it = path.polyline.points.begin() + 1; it != path.polyline.points.end(); ++it) - m_wipe.path.append(Point(it->x(), it->y())); - } else - m_wipe.path.append(path.polyline.to_polyline()); // TODO: don't limit wipe to last path + m_wipe.update_path(paths); + + // Orca: loop wipe paths retain print direction. Their material side is + // therefore left for CCW contours and right for CW contours, with the + // result inverted for holes. Only external perimeters are eligible. + // Calibration overrides are applied during extrusion, after the region + // context was created. Check the effective setting again at execution. + if (m_config.wipe_inward && m_config.wipe_inward_distance.value > 0. && + wipe_support != nullptr && !wipe_support->inner_lines.empty() && + // A loop's role is its first path's role. An overhanging start must + // not hide ordinary external-wall segments elsewhere in the loop. + std::any_of(paths.begin(), paths.end(), + [](const ExtrusionPath &path) { return is_external_perimeter(path.role()); }) && + m_wipe.path.points.size() >= 2) { + // Orca: use the actual extrusion width from the path, not the config + // value — outer_wall_line_width=0 (Auto) would make get_abs_value + // return 0 and silently disable the feature, and Arachne may produce + // a different width than the config default. + const double outer_wall_line_width = paths.front().width; + const double requested_offset = m_config.wipe_inward_distance.get_abs_value(outer_wall_line_width); + const double offset_dist = scale_(std::min(requested_offset, outer_wall_line_width)); + if (offset_dist > SCALED_EPSILON) { + const Point seam_start = paths.front().first_point(); + const Point seam_end = paths.back().last_point(); + const Point wipe_start = wipe_on_loops_dest.value_or(seam_end); + const double max_wipe_length = scale_(FILAMENT_CONFIG(wipe_distance)); + // Orca: Wipe::wipe() replaces points[0] with last_pos and executes + // from points[1]. The helper preserves that sentinel and atomically + // replaces the remaining points, or leaves the path untouched. + // Orca: a configured wall count does not guarantee that Arachne + // generated an adjacent wall for this particular loop. Only + // earlier entities are considered because later walls have + // not been printed yet (for example with Outer/Inner order). + // Inner walls determine the material side; every earlier wall + // remains available to validate the executable wipe path. + const double support_distance = scale_(std::max(nozzle_diameter, outer_wall_line_width)); + Polyline inward_path = m_wipe.path; + if (offset_wipe_path_toward_support( + inward_path, seam_start, seam_end, wipe_start, + wipe_offset_direction(is_ccw, is_hole), offset_dist, max_wipe_length, + wipe_support->inner_lines, wipe_support->printed_lines, + m_wipe.path.lines(), support_distance)) { + m_wipe.path = std::move(inward_path); + wipe_inward_applied = true; + } + } } } - // make a little move inwards before leaving loop - if (m_config.wipe_on_loops.value && paths.back().role() == erExternalPerimeter && m_layer != NULL && m_config.wall_loops.value > 1 && paths.front().size() >= 2 && paths.back().polyline.points.size() >= 3) { - // detect angle between last and first segment - // the side depends on the original winding order of the polygon (inwards for contours, outwards for holes) - //FIXME improve the algorithm in case the loop is tiny. - //FIXME improve the algorithm in case the loop is split into segments with a low number of points (see the Point b query). - const Point3 &a3 = paths.front().polyline.points[1]; // second point - Point a = Point(a3.x(), a3.y()); - const Point3 &b3 = *(paths.back().polyline.points.end()-3); // second to last point - Point b = Point(b3.x(), b3.y()); - if (is_hole == loop.is_counter_clockwise()) { - // swap points - Point c = a; a = b; b = c; - } - - double angle = paths.front().first_point().ccw_angle(a, b) / 3; - - // turn inwards if contour, turn outwards if hole - if (is_hole == loop.is_counter_clockwise()) angle *= -1; - - // create the destination point along the first segment and rotate it - // we make sure we don't exceed the segment length because we don't know - // the rotation of the second segment so we might cross the object boundary - Vec2d p1 = paths.front().polyline.points.front().cast().head<2>(); - Vec2d p2 = paths.front().polyline.points[1].cast().head<2>(); - Vec2d v = p2 - p1; - double nd = scale_(EXTRUDER_CONFIG(nozzle_diameter)); - double l2 = v.squaredNorm(); - // Shift by no more than a nozzle diameter. - //FIXME Hiding the seams will not work nicely for very densely discretized contours! - //BBS. shorten the travel distant before the wipe path - double threshold = 0.2; - Point pt = (p1 + v * threshold).cast(); - if (nd * nd < l2) - pt = (p1 + threshold * v * (nd / sqrt(l2))).cast(); - //Point pt = ((nd * nd >= l2) ? (p1+v*0.4): (p1 + 0.2 * v * (nd / sqrt(l2)))).cast(); - const Point3 ¢er3 = paths.front().polyline.points.front(); - pt.rotate(angle, Point(center3.x(), center3.y())); - // generate the travel move - gcode += m_writer.extrude_to_xy(this->point_to_gcode(pt), 0, "move inwards before travel", true); + // Orca: make the configured inward move before leaving the loop. + if (wipe_on_loops_dest) { + gcode += m_writer.extrude_to_xy( + this->point_to_gcode(*wipe_on_loops_dest), 0, "move inwards before travel", true); + this->set_last_pos(*wipe_on_loops_dest); } + // Execute the accepted path before another extrusion replaces it. Wiping + // must not force retraction or Z-hop across a short travel to the next wall. + // Ordinary travel planning decides whether to retract from the new position. + if (wipe_inward_applied) + gcode += m_wipe.wipe(*this, 0.); + return gcode; } @@ -7560,21 +7629,9 @@ std::string GCode::extrude_multi_path(const ExtrusionMultiPath& multipath, const m_multi_flow_segment_path_pa_set = true; } - // BBS - if (m_wipe.enable && FILAMENT_CONFIG(wipe)) { - m_wipe.path = Polyline(); - for (const ExtrusionPath &path : multipath.paths) { - //BBS: Don't need to save duplicated point into wipe path - if (!m_wipe.path.empty() && !path.empty() && - m_wipe.path.last_point() == Point(path.first_point().x(), path.first_point().y())) { - // Convert Points3 to Points - for (auto it = path.polyline.points.begin() + 1; it != path.polyline.points.end(); ++it) - m_wipe.path.append(Point(it->x(), it->y())); - } else - m_wipe.path.append(path.polyline.to_polyline()); // TODO: don't limit wipe to last path - } - m_wipe.path.reverse(); - } + // Orca: multipath wipes retrace the extrusion in reverse order. + if (m_wipe.enable && FILAMENT_CONFIG(wipe)) + m_wipe.update_path(multipath.paths, true); return gcode; } @@ -7582,14 +7639,15 @@ std::string GCode::extrude_multi_path(const ExtrusionMultiPath& multipath, const std::string GCode::extrude_entity(const ExtrusionEntity& entity, const std::string& description, double speed, - const ExtrusionEntitiesPtr& region_perimeters) + const ExtrusionEntitiesPtr& region_perimeters, + const WipeInwardSupport* wipe_support) { if (const ExtrusionPath* path = dynamic_cast(&entity)) return this->extrude_path(*path, description, speed); else if (const ExtrusionMultiPath* multipath = dynamic_cast(&entity)) return this->extrude_multi_path(*multipath, description, speed); else if (const ExtrusionLoop* loop = dynamic_cast(&entity)) - return this->extrude_loop(*loop, description, speed, region_perimeters); + return this->extrude_loop(*loop, description, speed, region_perimeters, nullptr, wipe_support); else throw Slic3r::InvalidArgument("Invalid argument supplied to extrude()"); return ""; @@ -7603,6 +7661,7 @@ std::string GCode::extrude_path(const ExtrusionPath& path, const std::string& de // description += ExtrusionEntity::role_to_string(path.role()); std::string gcode = this->_extrude(path, description, speed); if (m_wipe.enable && FILAMENT_CONFIG(wipe)) { + m_wipe.reset_path(); m_wipe.path = path.polyline.to_polyline(); if (is_tree(this->config().support_type) && is_support(path.role())) { if ((m_wipe.path.first_point() - m_wipe.path.last_point()).cast().norm() > scale_(0.2)) { @@ -7623,7 +7682,7 @@ std::string GCode::extrude_path(const ExtrusionPath& path, const std::string& de } // Extrude perimeters: Decide where to put seams (hide or align seams). -std::string GCode::extrude_perimeters(const Print &print, const std::vector &by_region, bool is_first_layer, bool is_infill_first) +std::string GCode::extrude_perimeters(const Print &print, const std::vector &by_region, bool is_first_layer, bool is_infill_first, bool unsupported_loops_only) { std::string gcode; for (const ObjectByExtruder::Island::Region ®ion : by_region) @@ -7635,8 +7694,36 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vectorextrude_entity(*ee, "perimeter", -1., region.perimeters); + // Build the printed prefix once in emission order, scoped to this + // region. Disabled or zero-length wipes need no support geometry. + std::optional wipe_support; + if (m_wipe.enable && FILAMENT_CONFIG(wipe) && m_config.wipe_inward && + m_config.wipe_inward_distance.value > 0. && + scale_(FILAMENT_CONFIG(wipe_distance)) > SCALED_EPSILON) + wipe_support.emplace(); + + // ORCA: loops flagged as extruded in mid air, out of reach of the layer below, are held back + // for a second pass after the infill that anchors them. Infill already precedes infill first walls. + const bool defer_unsupported = !is_infill_first; + auto waits_for_infill = [](const ExtrusionEntity *ee) { + return ee->is_loop() && static_cast(ee)->print_after_infill; + }; + + // The deferred pass runs after the infill, so the loops the first pass emitted are + // already down and belong in the prefix an inward wipe may land on. + if (wipe_support && defer_unsupported && unsupported_loops_only) + for (const ExtrusionEntity* ee : region.perimeters) + if (!waits_for_infill(ee)) + wipe_support->append(*ee); + + for (const ExtrusionEntity* ee : region.perimeters) { + if (defer_unsupported && waits_for_infill(ee) != unsupported_loops_only) + continue; + gcode += this->extrude_entity(*ee, "perimeter", -1., region.perimeters, + wipe_support ? &*wipe_support : nullptr); + if (wipe_support) + wipe_support->append(*ee); + } } return gcode; } @@ -7877,7 +7964,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, // path is 2D. But in slope lift case, lift z is done in travel_to function. // Add m_need_change_layer_lift_z when change_layer in case of no lift if m_last_pos is equal to path.first_point() by chance Point first_point = path.first_point(); - if (!m_last_pos_defined || m_last_pos.to_point() != first_point || m_need_change_layer_lift_z || slope_need_z_travel) { + if (!m_last_pos_defined || m_last_pos.to_point() != first_point || m_need_change_layer_lift_z || + slope_need_z_travel) { const bool _last_pos_undefined = !m_last_pos_defined; double z = DBL_MAX; @@ -8238,9 +8326,10 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, } variable_speed = std::any_of(new_points.begin(), new_points.end(), [speed](const ProcessedPoint &p) { return fabs(double(p.speed) - speed) > 1; }); // Ignore small speed variations (under 1mm/sec) - if (!NOZZLE_CONFIG(enable_overhang_speed) && FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers) { - for (ProcessedPoint &point : new_points) - point.speed = speed; + if (FILAMENT_CONFIG(enable_overhang_bridge_fan) && m_enable_cooling_markers) { + if (!NOZZLE_CONFIG(enable_overhang_speed)) + for (ProcessedPoint &point : new_points) + point.speed = speed; variable_speed = new_points.size() > 1; } } @@ -9120,7 +9209,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp continue; Polygons temp; - temp.emplace_back(std::move(instance_bbox.polygon())); + temp.emplace_back(instance_bbox.polygon()); if (intersection_pl(travel, temp).empty()) continue; @@ -9509,12 +9598,14 @@ std::string GCode::set_extruder(unsigned int new_filament_id, double print_z, bo if (old_filament_id_in_new_extruder == -1) wipe_volume = 0; else { - wipe_volume = flush_matrix[old_filament_id_in_new_extruder * number_of_extruders + new_filament_id]; + size_t flush_idx = size_t(old_filament_id_in_new_extruder) * number_of_extruders + new_filament_id; + wipe_volume = flush_idx < flush_matrix.size() ? flush_matrix[flush_idx] : 0.f; wipe_volume *= m_config.flush_multiplier.get_at(new_extruder_id); } } else { - wipe_volume = flush_matrix[old_filament_id * number_of_extruders + new_filament_id]; + size_t flush_idx = size_t(old_filament_id) * number_of_extruders + new_filament_id; + wipe_volume = flush_idx < flush_matrix.size() ? flush_matrix[flush_idx] : 0.f; wipe_volume *= m_config.flush_multiplier.get_at(new_extruder_id); // if is multi_extruder only use the fist extruder matrix } wipe_volume = std::max(0.f, wipe_volume-grab_purge_volume); diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 990bf0fee7..8cf4aa03fb 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -39,6 +39,7 @@ namespace Slic3r { // Forward declarations. class GCode; +struct WipeInwardSupport; namespace CustomGCode{ struct Item; } struct PrintInstance; @@ -61,7 +62,7 @@ public: bool enable; Polyline path; - // Orca: + // Orca: retraction portions emitted before, during, and after the wipe move. struct RetractionValues{ double retraction_length_before_wipe = 0.; double retraction_length_during_wipe = 0.; @@ -73,8 +74,10 @@ public: void reset_path() { this->path = Polyline(); } std::string wipe(GCode &gcodegen, double length, bool toolchange = false, bool is_last = false); - // Orca: + // Orca: calculate the retraction portions that can be emitted at wipe speed. RetractionValues calculateWipeRetractionLengths(GCode& gcodegen, bool toolchange); + // Orca: rebuild the stored path while deduplicating shared path boundaries. + void update_path(const ExtrusionPaths &paths, bool reverse = false); }; class WipeTowerIntegration { @@ -103,8 +106,13 @@ public: m_enable_wrapping_detection(print_config.enable_wrapping_detection && (print_config.wrapping_exclude_area.values.size() > 2) && (slice_used_filaments.size() <= 1)), m_is_first_print(true), m_print_config(&print_config), - m_last_wipe_tower_print_z(print_config.z_offset.value) + m_last_wipe_tower_print_z(print_config.z_offset.value), + m_sparse_layers_skipped(wipe_tower_sparse_layers_skipped(print_config)) { + // Precomputed rather than accumulated while emitting, so that the clearance validator and + // the emitter cannot disagree about where the compacted tower sits on any given layer. + if (m_sparse_layers_skipped) + m_compacted_tower_z = compute_compacted_wipe_tower_z(tool_changes, float(print_config.z_offset.value)); // initialize with the extruder offset of master extruder id m_extruder_offsets.resize(print_config.filament_map.size(), print_config.extruder_offset.get_at(print_config.master_extruder_id.value - 1)); const auto& filament_map = print_config.filament_map.values; // 1 based idx @@ -164,6 +172,11 @@ private: float m_wipe_tower_depth; BoundingBoxf m_wipe_tower_bbx; Vec2f m_rib_offset{Vec2f(0, 0)}; + // wipe_tower_no_sparse_layers, as answered by the shared compaction rule rather than by the raw + // option: smooth timelapse and wrapping detection keep a tower on every layer regardless. + const bool m_sparse_layers_skipped; + // Print z of the compacted tower per planned layer. Empty when the tower is not compacted. + std::vector m_compacted_tower_z; }; class ColorPrintColors @@ -430,14 +443,16 @@ private: std::string extrude_entity(const ExtrusionEntity& entity, const std::string& description = "", double speed = -1., - const ExtrusionEntitiesPtr& region_perimeters = ExtrusionEntitiesPtr()); + const ExtrusionEntitiesPtr& region_perimeters = ExtrusionEntitiesPtr(), + const WipeInwardSupport* wipe_support = nullptr); // Orca: pass the complete collection of region perimeters to the extrude loop to check whether the wipe before external loop // should be executed std::string extrude_loop(const ExtrusionLoop& loop, const std::string& description, double speed = -1., const ExtrusionEntitiesPtr& region_perimeters = ExtrusionEntitiesPtr(), - const Point* start_point = nullptr); + const Point* start_point = nullptr, + const WipeInwardSupport* wipe_support = nullptr); std::string extrude_multi_path(const ExtrusionMultiPath& multipath, const std::string& description = "", double speed = -1.); std::string extrude_path(const ExtrusionPath& path, const std::string& description = "", double speed = -1.); @@ -519,7 +534,7 @@ private: // For sequential print, the instance of the object to be printing has to be defined. const size_t single_object_instance_idx); - std::string extrude_perimeters(const Print& print, const std::vector& by_region, bool is_first_layer, bool is_infill_first); + std::string extrude_perimeters(const Print& print, const std::vector& by_region, bool is_first_layer, bool is_infill_first, bool unsupported_loops_only = false); std::string extrude_infill(const Print& print, const std::vector& by_region, bool ironing); std::string extrude_support(const ExtrusionEntityCollection& support_fills, const ExtrusionRole support_extrusion_role); diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index 3bca1f8df9..e55b89212e 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -1024,28 +1024,29 @@ std::string CoolingBuffer::apply_layer_cooldown( } if (need_set_fan) { + const auto set_fan = [&](int speed) { + if (m_current_fan_speed != speed) { + new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, speed, part_cooling_fan_min_pwm); + m_current_fan_speed = speed; + } + }; if (fan_speed_change_requests[CoolingLine::TYPE_OVERHANG_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, overhang_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = overhang_fan_speed; + set_fan(overhang_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_INTERNAL_BRIDGE_FAN_START]){ // ORCA: Add support for separate internal bridge fan speed control - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, internal_bridge_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = internal_bridge_fan_speed; + set_fan(internal_bridge_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_SUPPORT_INTERFACE_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, supp_interface_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = supp_interface_fan_speed; + set_fan(supp_interface_fan_speed); } else if (fan_speed_change_requests[CoolingLine::TYPE_IRONING_FAN_START]){ - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, ironing_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = ironing_fan_speed; + set_fan(ironing_fan_speed); } else if(fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] && m_current_fan_speed != -1){ new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_current_fan_speed, part_cooling_fan_min_pwm); fan_speed_change_requests[CoolingLine::TYPE_FORCE_RESUME_FAN] = false; } else { - new_gcode += GCodeWriter::set_fan(m_config.gcode_flavor, m_fan_speed, part_cooling_fan_min_pwm); - m_current_fan_speed = m_fan_speed; + set_fan(m_fan_speed); } need_set_fan = false; } diff --git a/src/libslic3r/GCode/FanMover.cpp b/src/libslic3r/GCode/FanMover.cpp index 112066bb85..9d77d1d04c 100644 --- a/src/libslic3r/GCode/FanMover.cpp +++ b/src/libslic3r/GCode/FanMover.cpp @@ -170,14 +170,13 @@ void FanMover::_put_in_middle_G1(std::list::iterator item_to_split, void FanMover::_print_in_middle_G1(BufferData& line_to_split, float nb_sec, const std::string &line_to_write) { if (nb_sec < line_to_split.time * 0.1) { - // doesn't really need to be split, print it after - m_process_output += line_to_split.raw + "\n"; + // Doesn't need to be split: the insertion point is at the start. m_process_output += line_to_write + (line_to_write.back() == '\n'?"":"\n"); - } else if (nb_sec > line_to_split.time * 0.9) { - // doesn't really need to be split, print it before - //will also print before if line_to_split.time == 0 - m_process_output += line_to_write + (line_to_write.back() == '\n' ? "" : "\n"); m_process_output += line_to_split.raw + "\n"; + } else if (nb_sec > line_to_split.time * 0.9) { + // Doesn't need to be split: the insertion point is at the end. + m_process_output += line_to_split.raw + "\n"; + m_process_output += line_to_write + (line_to_write.back() == '\n' ? "" : "\n"); }else if(line_to_split.raw.size() > 2 && line_to_split.raw[0] == 'G' && line_to_split.raw[1] == '1' && line_to_split.raw[2] == ' ') { float percent = nb_sec / line_to_split.time; diff --git a/src/libslic3r/GCode/FanMover.hpp b/src/libslic3r/GCode/FanMover.hpp index 3f803fbd23..17addd855c 100644 --- a/src/libslic3r/GCode/FanMover.hpp +++ b/src/libslic3r/GCode/FanMover.hpp @@ -32,7 +32,8 @@ class FanMover private: const std::regex regex_fan_speed; const float nb_seconds_delay; - const bool with_D_option; + // Set from fan_speedup_time at the call site, but nothing here reads it. + [[maybe_unused]] const bool with_D_option; const bool relative_e; const bool only_overhangs; const float kickstart; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index 4f3f95f297..6fc7717386 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -532,7 +532,7 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; // ORCA: Fix issue with flow rate changes being visualized incorrectly const float mm3_per_mm = curr_move.mm3_per_mm; - const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; + const float fan_speed = curr_move.fan_speed; const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; actual_speed_moves.push_back({ block.move_id, @@ -563,7 +563,7 @@ void GCodeProcessor::TimeMachine::calculate_time(GCodeProcessorResult& result, P const float height = interpolate ? lerp(prev_move.height, curr_move.height, t) : curr_move.height; // ORCA: Fix issue with flow rate changes being visualized incorrectly const float mm3_per_mm = curr_move.mm3_per_mm; - const float fan_speed = interpolate ? lerp(prev_move.fan_speed, curr_move.fan_speed, t) : curr_move.fan_speed; + const float fan_speed = curr_move.fan_speed; const float temperature = interpolate ? lerp(prev_move.temperature, curr_move.temperature, t) : curr_move.temperature; actual_speed_moves.push_back({ block.move_id, @@ -1273,7 +1273,7 @@ void GCodeProcessor::run_post_process() // add lines M73 to exported gcode auto process_line_move = [ // Lambdas, mostly for string formatting, all with an empty capture block. - time_in_minutes, format_time_float, format_line_M73_main, format_line_M73_stop_int, format_line_M73_stop_float, time_in_last_minute,format_line_exhaust_fan_control, + time_in_minutes, format_time_float, format_line_M73_main, format_line_M73_stop_int, format_line_M73_stop_float, time_in_last_minute, &self = std::as_const(m_time_processor), // Caches, to be modified &g1_times_cache_it, &last_exported_main, &last_exported_stop, @@ -1468,9 +1468,11 @@ void GCodeProcessor::run_post_process() // Append a per-filament usage block at a filament change. auto handle_filament_change = [&](int filament_id, int cur_line_id, int nozzle_id) { - // skip filament changes emitted inside the machine start / end gcode - if (m_machine_start_gcode_end_line_id == (unsigned int) (-1) && (unsigned int) (cur_line_id) < m_machine_start_gcode_end_line_id || - m_machine_end_gcode_start_line_id != (unsigned int) (-1) && (unsigned int) (cur_line_id) > m_machine_end_gcode_start_line_id) + // Skip filament changes emitted inside the machine start / end gcode. One forward pass assigns + // the tag ids and tests them in the same loop, so inside the start gcode the end tag is unseen + // and the id still holds the sentinel. That is why the first clause tests == and the second !=. + if ((m_machine_start_gcode_end_line_id == (unsigned int) (-1) && (unsigned int) (cur_line_id) < m_machine_start_gcode_end_line_id) || + (m_machine_end_gcode_start_line_id != (unsigned int) (-1) && (unsigned int) (cur_line_id) > m_machine_end_gcode_start_line_id)) return; if (!m_filament_blocks.empty()) m_filament_blocks.back().upper_gcode_id = cur_line_id; @@ -2777,7 +2779,7 @@ bool GCodeProcessor::check_multi_extruder_gcode_valid(const int std::map> gcode_path_pos; // object_id, filament_id, pos for (const GCodeProcessorResult::MoveVertex &move : m_result.moves) { // sometimes, the start line extrude was outside the edge of plate a little, this is allowed, so do not include into the gcode_path_pos - if (move.type == EMoveType::Extrude /* && move.extrusion_role != ExtrusionRole::erFlush || move.type == EMoveType::Travel*/) + if (move.type == EMoveType::Extrude /* && move.extrusion_role != ExtrusionRole::erFlush || move.type == EMoveType::Travel*/) { if (move.extrusion_role == ExtrusionRole::erCustom) { /*if (move.is_arc_move_with_interpolation_points()) { for (int i = 0; i < move.interpolation_points.size(); i++) { @@ -2799,6 +2801,7 @@ bool GCodeProcessor::check_multi_extruder_gcode_valid(const int gcode_path_pos[move.object_label_id][int(move.extruder_id)].max_print_z = std::max(gcode_path_pos[move.object_label_id][int(move.extruder_id)].max_print_z, move.print_z); } + } } bool valid = true; @@ -5304,7 +5307,7 @@ void GCodeProcessor::process_VG1(const GCodeReader::GCodeLine& line) float filament_radius = 0.5f * filament_diameter; float area_filament_cross_section = static_cast(M_PI) * sqr(filament_radius); - auto absolute_position = [this, area_filament_cross_section](Axis axis, const GCodeReader::GCodeLine& lineG1) { + auto absolute_position = [this](Axis axis, const GCodeReader::GCodeLine& lineG1) { bool is_relative = (m_global_positioning_type == EPositioningType::Relative); if (axis == E) is_relative |= (m_e_local_positioning_type == EPositioningType::Relative); @@ -5755,7 +5758,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line, bool cloc if (travel_length < 0.001) return; - auto adjust_target = [this, area_filament_cross_section](const AxisCoords& target, const AxisCoords& prev_position) { + auto adjust_target = [this](const AxisCoords& target, const AxisCoords& prev_position) { AxisCoords ret = target; if (m_global_positioning_type == EPositioningType::Relative) { for (unsigned char a = X; a <= E; ++a) { @@ -7006,7 +7009,7 @@ void GCodeProcessor::store_move_vertex(EMoveType type, EMovePathType path_type, get_acceleration(normal_mode)); const float junction_deviation = get_option_value(m_time_processor.machine_limits.machine_max_junction_deviation, normal_mode_id); const bool use_jd_jerk = (m_flavor == gcfMarlinFirmware && junction_deviation > 0.0f); - const auto axis_jerk_for_preview = [this, normal_mode, use_jd_jerk, move_acceleration](Axis axis) { + const auto axis_jerk_for_preview = [this, use_jd_jerk, move_acceleration](Axis axis) { return use_jd_jerk ? get_axis_max_jerk_with_jd(normal_mode, axis, move_acceleration) : get_axis_max_jerk(normal_mode, axis); }; const float jerk_x = axis_jerk_for_preview(X); @@ -7593,8 +7596,8 @@ void GCodeProcessor::update_slice_warnings() if (used_filaments[idx] < m_result.required_nozzle_HRC.size()) filament_hrc = m_result.required_nozzle_HRC[used_filaments[idx]]; - int filament_extruder_id = m_filament_maps[used_filaments[idx]]; - int extruder_hrc = nozzle_hrc_lists[filament_extruder_id]; + int filament_extruder_id = used_filaments[idx] < m_filament_maps.size() ? m_filament_maps[used_filaments[idx]] : -1; + int extruder_hrc = (filament_extruder_id >= 0 && (size_t) filament_extruder_id < nozzle_hrc_lists.size()) ? nozzle_hrc_lists[filament_extruder_id] : 0; BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": Check HRC: filament:%1%, hrc=%2%, extruder:%3%, hrc:%4%") % used_filaments[idx] % filament_hrc % filament_extruder_id % extruder_hrc; diff --git a/src/libslic3r/GCode/ThumbnailData.hpp b/src/libslic3r/GCode/ThumbnailData.hpp index 82563d64f2..bc37ad40c4 100644 --- a/src/libslic3r/GCode/ThumbnailData.hpp +++ b/src/libslic3r/GCode/ThumbnailData.hpp @@ -78,7 +78,7 @@ struct PlateBBoxData int first_extruder = 0; float nozzle_diameter = 0.4; std::string bed_type; - float first_layer_time; + float first_layer_time = 0.0f; // version 1: use view type ColorPrint (filament color) // version 2: use view type FilamentId (filament id) int version = 2; diff --git a/src/libslic3r/GCode/ToolOrderUtils.cpp b/src/libslic3r/GCode/ToolOrderUtils.cpp index 4e2934d967..4a67477d24 100644 --- a/src/libslic3r/GCode/ToolOrderUtils.cpp +++ b/src/libslic3r/GCode/ToolOrderUtils.cpp @@ -910,7 +910,7 @@ namespace Slic3r unsigned int iterations = (1 << all_extruders.size()); unsigned int final_state = iterations - 1; - std::vector>cache(iterations, std::vector(all_extruders.size(), 0x7fffffff)); + std::vector>cache(iterations, std::vector(all_extruders.size(), std::numeric_limits::max())); std::vector>prev(iterations, std::vector(all_extruders.size(), -1)); cache[1][0] = 0.; for (unsigned int state = 0; state < iterations; ++state) { diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 0a97e7ac41..7ea46cf8a7 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -10,6 +10,7 @@ #include "FilamentMixer.hpp" #include "LocalesUtils.hpp" #include "Utils.hpp" +#include "format.hpp" #include "I18N.hpp" #include @@ -82,8 +83,9 @@ bool check_filament_printable_after_group(const std::vector &used_ int printable_status = print_config->filament_printable.get_at(filament_id); int extruder_idx = filament_maps[filament_id]; if (!(printable_status >> extruder_idx & 1)) { - std::string extruder_name = extruder_idx == 0 ? _L("left") : _L("right"); - std::string error_msg = _L("Grouping error: ") + filament_type + _L(" can not be placed in the ") + extruder_name + _L(" nozzle"); + std::string error_msg = extruder_idx == 0 ? + Slic3r::format(_L("Grouping error: %1% cannot be placed in the left nozzle"), filament_type) : + Slic3r::format(_L("Grouping error: %1% cannot be placed in the right nozzle"), filament_type); throw Slic3r::RuntimeError(error_msg); } } @@ -1488,10 +1490,10 @@ static FilamentGroupContext build_filament_group_context( auto machine_filament_info = build_machine_filaments(print->get_extruder_filament_info(), extruder_ams_counts, ignore_ext_filament); - std::vector filament_types = print_config.filament_type.values; - std::vector filament_colours = print_config.filament_colour.values; - std::vector filament_is_support = print_config.filament_is_support.values; - std::vector filament_ids = print_config.filament_ids.values; + // The grouping code walks filament_ids and indexes filament_info by the same position. + std::vector filament_ids = print_config.filament_ids.values; + if (filament_ids.size() > filament_nums) + filament_ids.resize(filament_nums); FGMode fg_mode = mode == FilamentMapMode::fmmAutoForMatch ? FGMode::MatchMode : FGMode::FlushMode; context.model_info.flush_matrix = std::move(nozzle_flush_mtx); @@ -1500,11 +1502,14 @@ static FilamentGroupContext build_filament_group_context( context.model_info.filament_ids = filament_ids; context.model_info.unprintable_volumes = unprintable_volumes; - for (size_t idx = 0; idx < filament_types.size(); ++idx) { + // Consumers index filament_info by filament id, so it must span the filament count: a partial + // or legacy config can leave any of these arrays short, and get_at clamps. + context.model_info.filament_info.reserve(filament_nums); + for (size_t idx = 0; idx < filament_nums; ++idx) { FilamentGroupUtils::FilamentInfo info; - info.color = filament_colours[idx]; - info.type = filament_types[idx]; - info.is_support = filament_is_support[idx]; + info.color = print_config.filament_colour.get_at(idx); + info.type = print_config.filament_type.get_at(idx); + info.is_support = print_config.filament_is_support.get_at(idx); context.model_info.filament_info.emplace_back(std::move(info)); } @@ -2732,6 +2737,28 @@ void ToolOrdering::enforce_mixed_component_order() } } +// Declared in ToolOrdering.hpp (exposed for unit testing). +std::vector parse_cyclic_order(const std::string& str, unsigned int number_of_extruders) +{ + std::vector order; + for (const std::string& token : split_string(str, ',')) { + try { + size_t pos = 0; + int filament = std::stoi(token, &pos); // stoi skips leading whitespace by itself + // stoi stops at the first non-digit, so "2x" would parse as 2. Require the whole token to be + // consumed (bar trailing whitespace) to drop it like any other garbage. + if (token.find_first_not_of(" \t\r\n", pos) != std::string::npos) + continue; + if (filament >= 1 && (unsigned int)filament <= number_of_extruders + && std::find(order.begin(), order.end(), (unsigned int)(filament - 1)) == order.end()) + order.emplace_back((unsigned int)(filament - 1)); + } catch (const std::exception&) { + // Not a number, ignore it. + } + } + return order; +} + void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first_layer) { const PrintConfig* print_config = m_print_config_ptr; @@ -2829,11 +2856,41 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first const bool use_cyclic_ordering = (print_config->toolchange_ordering == ToolChangeOrderingType::Cyclic); + // By default the first layer keeps its adhesion-optimized order (and any custom first layer + // sequence); the cyclic sequence is only forced onto it when the user opts in. + const bool cyclic_first_layer = use_cyclic_ordering && print_config->toolchange_cyclic_first_layer.value; + + // Optional user defined cyclic sequence, given as 1-based filament numbers ("3,2,1,4"). Filaments + // missing from it keep their ascending order after the listed ones, so a partial or bogus entry + // still yields the default cyclic order. + const std::vector cyclic_order = + use_cyclic_ordering ? parse_cyclic_order(print_config->toolchange_cyclic_order.value, number_of_extruders) + : std::vector(); + + // Reorder a layer's filaments (0-based) for cyclic ordering: ascending by default, or following the + // user defined sequence when one was given. Filaments absent from the sequence keep ascending order + // after the listed ones. + auto apply_cyclic_order = [&cyclic_order](std::vector& filaments) { + std::sort(filaments.begin(), filaments.end()); + if (!cyclic_order.empty()) + std::stable_sort(filaments.begin(), filaments.end(), [&cyclic_order](unsigned int lhs, unsigned int rhs) { + auto rank = [&cyclic_order](unsigned int filament) { + return size_t(std::find(cyclic_order.begin(), cyclic_order.end(), filament) - cyclic_order.begin()); + }; + return rank(lhs) < rank(rhs); + }); + }; + // other_layers_seq: the layer_idx and extruder_idx are base on 1 - auto get_custom_seq = [&other_layers_seqs, &reorder_first_layer, &first_layer_filaments, &layer_filaments, use_cyclic_ordering](int layer_idx, std::vector& out_seq) -> bool { + auto get_custom_seq = [&other_layers_seqs, &reorder_first_layer, &first_layer_filaments, &layer_filaments, use_cyclic_ordering, cyclic_first_layer, &apply_cyclic_order](int layer_idx, std::vector& out_seq) -> bool { if (!reorder_first_layer && layer_idx == 0) { - out_seq.resize(first_layer_filaments.size()); - std::transform(first_layer_filaments.begin(), first_layer_filaments.end(), out_seq.begin(), [](auto item) {return item + 1; }); + // The first layer tool order is already decided (adhesion-optimized, plus any custom first + // layer sequence). Only override it with the cyclic sequence when the user opted in. + std::vector ordered = first_layer_filaments; + if (cyclic_first_layer) + apply_cyclic_order(ordered); + out_seq.resize(ordered.size()); + std::transform(ordered.begin(), ordered.end(), out_seq.begin(), [](auto item) {return int(item) + 1; }); return true; } for (size_t idx = other_layers_seqs.size() - 1; idx != size_t(-1); --idx) { @@ -2844,9 +2901,12 @@ void ToolOrdering::reorder_extruders_for_minimum_flush_volume(bool reorder_first } } - if (use_cyclic_ordering && layer_idx >= 0 && size_t(layer_idx) < layer_filaments.size()) { + // Skip the first layer here (layer_idx == 0 only reaches this point on the reorder_first_layer + // path) unless the user asked for cyclic order on it, so it keeps the default flush ordering. + if (use_cyclic_ordering && layer_idx >= 0 && (layer_idx != 0 || cyclic_first_layer) + && size_t(layer_idx) < layer_filaments.size()) { std::vector ordered = layer_filaments[size_t(layer_idx)]; - std::sort(ordered.begin(), ordered.end()); + apply_cyclic_order(ordered); out_seq.resize(ordered.size()); std::transform(ordered.begin(), ordered.end(), out_seq.begin(), [](auto item) { return int(item) + 1; }); return true; @@ -3137,7 +3197,7 @@ void ToolOrdering::assign_custom_gcodes(const Print &print) // Skip all custom G-codes above this layer and skip all extruder switches. for (; custom_gcode_it != custom_gcode_per_print_z.gcodes.rend() && ( (print_z_above > lt.print_z && custom_gcode_it->print_z > 0.5 * (lt.print_z + print_z_above)) - || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it); + || custom_gcode_it->type == CustomGCode::ToolChange); ++ custom_gcode_it) {} print_z_above = lt.print_z; if (custom_gcode_it == custom_gcode_per_print_z.gcodes.rend()) // Custom G-codes were processed. diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index 4dc08c0e8b..1b8ce190d7 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -417,6 +417,11 @@ private: int most_used_extruder; }; +// Parse the user defined cyclic toolchange sequence ("3,2 , 1 , 4") into 0-based filament indices. +// Out-of-range entries, duplicates and non-numeric tokens are dropped, so a partially valid string +// still orders the filaments it does name. Exposed for unit testing. +std::vector parse_cyclic_order(const std::string& str, unsigned int number_of_extruders); + } // namespace SLic3r #endif /* slic3r_ToolOrdering_hpp_ */ diff --git a/src/libslic3r/GCode/WipePathHelpers.cpp b/src/libslic3r/GCode/WipePathHelpers.cpp new file mode 100644 index 0000000000..d785a16a8c --- /dev/null +++ b/src/libslic3r/GCode/WipePathHelpers.cpp @@ -0,0 +1,920 @@ +#include "WipePathHelpers.hpp" + +#include "../AABBTreeLines.hpp" + +#include +#include +#include +#include +#include + +namespace Slic3r { + +void WipeInwardSupport::append(const ExtrusionEntity &entity) +{ + const ExtrusionPaths *paths = nullptr; + if (const auto *loop = dynamic_cast(&entity)) + paths = &loop->paths; + else if (const auto *multipath = dynamic_cast(&entity)) + paths = &multipath->paths; + + // A loop's role is its first path's role. An overhanging start must not + // hide the ordinary inner-wall segments elsewhere in the same loop. + const bool is_inner = paths ? std::any_of(paths->begin(), paths->end(), + [](const ExtrusionPath &path) { return is_internal_perimeter(path.role()); }) : + is_internal_perimeter(entity.role()); + const Lines lines = entity.as_polyline().lines(); + printed_lines.insert(printed_lines.end(), lines.begin(), lines.end()); + if (is_inner) + inner_lines.insert(inner_lines.end(), lines.begin(), lines.end()); +} + +// Orca: miter limit ratio. Matches DefaultMiterLimit from ClipperUtils.hpp. +// When the miter join extends more than miter_limit * offset_dist from the +// original vertex, the miter is replaced by a bevel join. +static constexpr double miter_limit = 3.0; + +// Orca: threshold for detecting near-reversal (backtracking spike). +// Normalized dot product below this means the segments point in nearly +// opposite directions (angle > ~172°). Offsetting such a path is unsafe. +static constexpr double reversal_dot_threshold = -0.99; + +// Orca: candidates pointing more than 60 degrees away from the selected inner +// wall are too tangent to distinguish the material side reliably at a cusp. +static constexpr double min_support_alignment = 0.5; + +// Keep a scaled-coordinate rounding floor while allowing the tolerance to +// follow the relevant offset or path length. Clearance allows a larger fraction. +static double wipe_tolerance(double distance, double relative_tolerance = 0.1) +{ + return std::max(4. * SCALED_EPSILON, relative_tolerance * distance); +} + +Point sample_path_at_distance(const ExtrusionPaths &paths, bool forward, double target) +{ + assert(!paths.empty()); + if (paths.empty()) + return Point(0, 0); + + double remaining = target; + Point result = forward ? paths.front().first_point() : paths.back().last_point(); + for (int pi = forward ? 0 : (int)paths.size() - 1; + pi >= 0 && pi < (int)paths.size() && remaining > 0.; + pi += forward ? 1 : -1) { + const Points3 &pts = paths[pi].polyline.points; + for (int i = forward ? 0 : (int)pts.size() - 1; + remaining > 0. && (forward ? i + 1 < (int)pts.size() : i > 0); + i += forward ? 1 : -1) { + const int j = forward ? i + 1 : i - 1; + const Point cur(pts[i].x(), pts[i].y()); + const Point next(pts[j].x(), pts[j].y()); + const double segment_length = (next - cur).cast().norm(); + if (segment_length < SCALED_EPSILON) + continue; + if (remaining <= segment_length) { + const double ratio = remaining / segment_length; + return Point(coord_t(cur.x() + ratio * (next.x() - cur.x())), + coord_t(cur.y() + ratio * (next.y() - cur.y()))); + } + remaining -= segment_length; + result = next; + } + } + return result; +} + +// Orca: consecutive duplicates carry no path length and can be removed safely. +// A reversal, however, is real travelled distance: removing its vertex would +// replace a long backtracking wipe with a short, unrelated shortcut. +static bool prepare_source(Points &pts) +{ + pts.erase(std::unique(pts.begin(), pts.end()), pts.end()); + + if (pts.size() < 2) + return false; + + for (size_t i = 1; i + 1 < pts.size(); ++i) { + const Vec2d v_prev = (pts[i] - pts[i - 1]).cast(); + const Vec2d v_next = (pts[i + 1] - pts[i]).cast(); + const double dot = v_prev.dot(v_next) / (v_prev.norm() * v_next.norm()); + if (dot < reversal_dot_threshold) + return false; + } + return true; +} + +static bool build_offset_polyline(const Points &original, int dir, double offset_dist, + Points &result, size_t &first_join_index) +{ + if (original.size() < 2) + return false; + + // Orca: collapse all consecutive duplicates first, then reject any + // backtracking in the cleaned path instead of replacing travelled distance + // with a shortcut. + Points source = original; + if (! prepare_source(source)) + return false; + + const size_t n = source.size(); + + // Orca: compute the perpendicular offset for segment i->i+1 as an infinite Line. + auto offset_segment = [dir, offset_dist](const Point &a, const Point &b) -> Line { + Vec2d v = (b - a).cast(); + double len = v.norm(); + Vec2d perp(0, 0); + if (len > SCALED_EPSILON) + perp = Vec2d(-v.y(), v.x()) * (dir * offset_dist / len); + return Line(Point(coord_t(a.x() + perp.x()), coord_t(a.y() + perp.y())), + Point(coord_t(b.x() + perp.x()), coord_t(b.y() + perp.y()))); + }; + + result.clear(); + result.reserve(n); + first_join_index = 0; + + // Orca: the first point is perpendicular to the first segment. + Line l_prev = offset_segment(source[0], source[1]); + result.push_back(l_prev.a); + + // Orca: use the analytic intersection of adjacent offset segments for a + // miter join. Intersecting the already rounded Line endpoints amplifies + // coordinate quantization when the source segments are nearly parallel. + for (size_t i = 1; i + 1 < n; ++i) { + Line l_next = offset_segment(source[i], source[i + 1]); + const Vec2d previous = (source[i] - source[i - 1]).cast().normalized(); + const Vec2d next = (source[i + 1] - source[i]).cast().normalized(); + const double denominator = 1. + previous.dot(next); + + bool need_bevel = denominator <= EPSILON; + Point pt; + if (! need_bevel) { + const Vec2d previous_normal(-previous.y(), previous.x()); + const Vec2d next_normal(-next.y(), next.x()); + const Vec2d miter = (previous_normal + next_normal) * (dir * offset_dist / denominator); + if (miter.norm() > miter_limit * offset_dist) { + need_bevel = true; + } else { + pt = Point(coord_t(source[i].x() + miter.x()), + coord_t(source[i].y() + miter.y())); + } + } + + if (need_bevel) { + result.push_back(l_prev.b); + if (l_next.a != result.back()) + result.push_back(l_next.a); + } else { + result.push_back(pt); + } + if (i == 1) + first_join_index = result.size() - 1; + l_prev = l_next; + } + + // Orca: the last point is perpendicular to the last segment. + result.push_back(l_prev.b); + + return true; +} + +int wipe_offset_direction(bool is_ccw, bool is_hole) +{ + const int loop_inside = is_ccw ? +1 : -1; + return is_hole ? -loop_inside : loop_inside; +} + +static bool starts_by_backtracking(const Polyline &path, Point actual_start) +{ + if (path.points.size() < 3) + return false; + // Orca: points[0] is only a storage sentinel; use the nozzle position for + // the executable connector, particularly after a wipe_on_loops pre-move. + const Vec2d connector = (path.points[1] - actual_start).cast(); + const Vec2d outgoing = (path.points[2] - path.points[1]).cast(); + // An inward connector may be perpendicular to the outgoing offset edge. + // Rounded joins must not turn that right angle into a false backtrack. + return connector.dot(outgoing) < -4. * SCALED_EPSILON * outgoing.norm(); +} + +// Orca: sample the outgoing perimeter without copying or clipping its full loop. +static Point sample_polyline_at_distance(const Polyline &polyline, double target) +{ + assert(! polyline.points.empty()); + Point result = polyline.first_point(); + for (size_t i = 1; i < polyline.points.size() && target > 0.; ++i) { + const Vec2d segment = (polyline.points[i] - result).cast(); + const double length = segment.norm(); + if (length <= SCALED_EPSILON) + continue; + if (target <= length) + return (result.cast() + segment * (target / length)).cast(); + target -= length; + result = polyline.points[i]; + } + return result; +} + +// Orca: convert an executable path into Wipe::wipe()'s stored representation. +// The first point is a dummy replaced by the actual nozzle position, while the +// remaining points are clipped to the configured wipe distance. +static bool store_wipe_path(Polyline &destination, Point seam_start, + Polyline actual_path, double max_wipe_length) +{ + if (actual_path.points.size() < 2 || max_wipe_length <= SCALED_EPSILON) + return false; + + const double actual_length = actual_path.length(); + if (actual_length <= SCALED_EPSILON) + return false; + if (actual_length - max_wipe_length > SCALED_EPSILON) + actual_path.clip_end(actual_length - max_wipe_length); + if (actual_path.points.size() < 2) + return false; + for (size_t i = 1; i < actual_path.points.size(); ++i) + if (actual_path.points[i - 1] == actual_path.points[i]) + return false; + + Polyline stored_path; + stored_path.points.reserve(actual_path.points.size()); + stored_path.points.push_back(seam_start); + stored_path.points.insert(stored_path.points.end(), actual_path.points.begin() + 1, actual_path.points.end()); + stored_path.reset_to_linear_move(); + destination = std::move(stored_path); + return true; +} + +bool offset_wipe_path(Polyline &polyline, Point seam_start, Point seam_end, Point wipe_start, + int dir, double offset_dist, double max_wipe_length) +{ + assert(dir == +1 || dir == -1); + assert(offset_dist > 0); + if (polyline.points.empty() || polyline.first_point() != seam_start || + max_wipe_length <= SCALED_EPSILON) + return false; + + const Polyline original = polyline; + const double original_length = original.length(); + if (original_length <= SCALED_EPSILON) + return false; + + double source_length = std::min(original_length, max_wipe_length); + for (;;) { + Polyline source = original; + const double clip_distance = original_length - source_length; + if (clip_distance > SCALED_EPSILON) + source.clip_end(clip_distance); + + Points wrapped_source; + wrapped_source.reserve(source.points.size() + 1); + if (seam_start == seam_end) { + // Orca: the stored loop is open at seam_start even when the seam gap is + // zero. Prepend the closing edge so build_offset_polyline() creates + // the proper join between that edge and the first outgoing edge, + // instead of leaving the first offset point on the closing wall. + size_t closing_index = original.points.size(); + while (closing_index > 0 && original.points[closing_index - 1] == seam_start) + --closing_index; + if (closing_index == 0) + return false; // Orca: the entire path is a single point. + wrapped_source.push_back(original.points[closing_index - 1]); + } else { + // Orca: use the unextruded seam-gap edge to determine the incoming + // direction at the seam. Its offset is construction geometry only; + // wiping along it would create a Z-shaped detour before the outgoing + // perimeter offset. + wrapped_source.push_back(seam_end); + } + wrapped_source.insert(wrapped_source.end(), source.points.begin(), source.points.end()); + + Points offset_points; + size_t first_join_index = 0; + if (! build_offset_polyline(wrapped_source, dir, offset_dist, offset_points, first_join_index) || + first_join_index == 0 || first_join_index >= offset_points.size()) + return false; + // Orca: discard the offset of the prepended edge and, for a bevel, its + // incoming endpoint. The executable wipe starts at the seam join and + // then follows only the already printed outgoing perimeter. + offset_points.erase(offset_points.begin(), offset_points.begin() + first_join_index); + + Polyline actual_path; + actual_path.points.reserve(offset_points.size() + 1); + actual_path.points.push_back(wipe_start); + actual_path.points.insert(actual_path.points.end(), offset_points.begin(), offset_points.end()); + + // A loop pre-move may advance past an otherwise valid offset join. + // Enter at the nozzle's projection instead of returning to the join. + // Do not repair a join that already backtracks across the seam gap; + // the caller must still validate wall crossings, material side and support. + if (seam_start != seam_end && wipe_start != seam_start && wipe_start != seam_end && + starts_by_backtracking(actual_path, wipe_start) && ! starts_by_backtracking(actual_path, seam_end)) { + size_t entry = 1; + while (entry + 1 < actual_path.points.size()) { + const Vec2d edge = (actual_path.points[entry + 1] - actual_path.points[entry]).cast(); + const double projection = (wipe_start - actual_path.points[entry]).cast().dot(edge); + if (projection <= 0.) + break; + if (projection < edge.squaredNorm()) { + actual_path.points[entry] = (actual_path.points[entry].cast() + + edge * (projection / edge.squaredNorm())).cast(); + break; + } + ++entry; + } + actual_path.points.erase(actual_path.points.begin() + 1, actual_path.points.begin() + entry); + } + + if (seam_start != seam_end && wipe_start == seam_end && + starts_by_backtracking(actual_path, wipe_start)) { + // Orca: a wide seam gap or a sharp cusp may put the first miter + // behind its outgoing edge. Reject this offset candidate so the + // caller can try the opposite side or the translated fallback. + return false; + } + + const double actual_length = actual_path.length(); + const bool source_exhausted = original_length - source_length <= SCALED_EPSILON; + if (actual_length + SCALED_EPSILON < max_wipe_length && ! source_exhausted) { + // Orca: offset joins may shorten the path at every corner. Grow the + // source until the executable offset path, not a heuristic source + // margin, reaches the configured wipe distance. + const double deficit = max_wipe_length - actual_length; + const double next_length = std::min(original_length, + source_length + std::max(deficit, 2. * SCALED_EPSILON)); + if (next_length - source_length <= SCALED_EPSILON) + return false; + source_length = next_length; + continue; + } + + // Orca: unlike an extruded offset, a wipe may safely cross or retrace the + // just-printed perimeter. The caller validates the complete executable + // path against current and earlier printed perimeter geometry. + return store_wipe_path(polyline, seam_start, std::move(actual_path), max_wipe_length); + } +} + +static bool translated_wipe_path(Polyline &polyline, Point seam_start, Point seam_end, Point wipe_start, + const Vec2d &translation, double max_wipe_length) +{ + if (translation.norm() <= SCALED_EPSILON || max_wipe_length <= SCALED_EPSILON) + return false; + + const Polyline original = polyline; + Polyline actual_path; + actual_path.points.reserve(original.points.size() + 2); + actual_path.points.push_back(wipe_start); + + const auto append_translated = [&actual_path, &translation](const Point &point) { + const Point translated = (point.cast() + translation).cast(); + if (translated != actual_path.points.back()) + actual_path.points.push_back(translated); + }; + + // Orca: translate the seam join directly. Translating seam_end and then + // following the unextruded gap back to seam_start makes the wipe double + // back whenever a gap ends near a sharp corner. + append_translated(seam_start); + for (const Point &point : original.points) + append_translated(point); + + if (seam_start != seam_end && wipe_start == seam_end && + starts_by_backtracking(actual_path, wipe_start)) { + // Orca: at a wide gap next to a cusp, the translated seam join may + // lie behind the outgoing edge. Prefer a shorter local inward move + // at the actual extrusion end over a longer lightning-shaped wipe. + actual_path.points.resize(1); + append_translated(seam_end); + } + + return store_wipe_path(polyline, seam_start, std::move(actual_path), max_wipe_length); +} + +// A segment whose endpoints lie within one line's distance capsule is fully +// supported, since that capsule is convex. Subdivide only when support changes +// between lines; fixed-distance sampling can miss an unsupported gap. +static bool segment_is_supported(Point start, Point end, + const AABBTreeLines::LinesDistancer &distancer, + double max_distance) +{ + const Point midpoint = ((start.cast() + end.cast()) * 0.5).cast(); + const auto [distance, line_index, nearest] = distancer.distance_from_lines_extra(midpoint); + if (distance > max_distance) + return false; + + const Line &line = distancer.get_line(line_index); + if (line.distance_to(start) <= max_distance && line.distance_to(end) <= max_distance) + return true; + if (distancer.distance_from_lines(start) > max_distance || + distancer.distance_from_lines(end) > max_distance) + return false; + + // Conservatively reject an unresolved transition at coordinate precision. + if ((end - start).cast().norm() <= SCALED_EPSILON) + return false; + return segment_is_supported(start, midpoint, distancer, max_distance) && + segment_is_supported(midpoint, end, distancer, max_distance); +} + +std::optional wipe_path_support_score( + const Polyline &polyline, Point wipe_start, + const AABBTreeLines::LinesDistancer &target_distancer, + const AABBTreeLines::LinesDistancer &all_support_distancer, + double max_distance) +{ + if (polyline.points.size() < 2 || target_distancer.get_lines().empty() || max_distance <= 0) + return std::nullopt; + + // Orca: require a local neighbour, not merely an earlier perimeter elsewhere in + // the region. At a convex corner, an inner wall's miter is farther from the + // external seam than its normal wall spacing, so allow the same bounded miter + // reach as the offset construction without accepting a remote island. + if (target_distancer.distance_from_lines(wipe_start) > + miter_limit * max_distance + 4. * SCALED_EPSILON) + return std::nullopt; + + Point previous = wipe_start; + for (size_t i = 1; i < polyline.points.size(); ++i) { + // Orca: a tightly curved inward path may cross back over the current wall. + // This is safe for a non-extruding wipe as long as the complete path + // remains over current or earlier printed perimeter geometry. + // Allow the same coordinate-rounding tolerance at every point, including + // the actual start substituted for the stored sentinel. + if (! segment_is_supported(previous, polyline.points[i], all_support_distancer, + max_distance + 4. * SCALED_EPSILON)) + return std::nullopt; + previous = polyline.points[i]; + } + + // Orca: decide direction at the seam. Scoring the complete path may select + // the wrong initial side when two contours converge and the later prefix + // happens to run closer to unrelated support. + return target_distancer.distance_from_lines(polyline.points[1]); +} + +static bool initial_connector_is_clear( + const Polyline &polyline, Point wipe_start, Point seam_start, + AABBTreeLines::LinesDistancer ¤t_perimeter_distancer, + double contact_tolerance) +{ + if (polyline.points.size() < 2 || polyline.points[1] == wipe_start) + return false; + + // Orca: without a seam gap, the connector necessarily starts at the wall + // and a self-touching cusp may share that same endpoint on several edges. + if (seam_start == wipe_start) + return true; + + const Line connector(wipe_start, polyline.points[1]); + const auto intersections = current_perimeter_distancer.intersections_with_line(connector); + for (const auto &intersection : intersections) { + if ((intersection.first - wipe_start).cast().norm() > contact_tolerance) + return false; + } + + Point closest; + // Orca: integer offset joins may miss the exact seam-start coordinate by + // a few microns. Treat a close pass through that point as retracing the + // external wall, but keep the unavoidable contact at the actual start. + if (connector.distance_to_squared(seam_start, &closest) <= contact_tolerance * contact_tolerance && + (closest - wipe_start).cast().norm() > contact_tolerance) + return false; + + return true; +} + +static std::optional support_offset_at_start( + const Polyline &source, Point local_origin, bool disambiguate_branch, + AABBTreeLines::LinesDistancer &support_distancer, + double max_support_distance) +{ + if (source.points.size() < 2) + return std::nullopt; + + // Orca: a nonzero gap may put the seam beside the wrong branch of a cusp. + // Sample farther along the path to identify its actual neighbouring wall. + const Point support_query = disambiguate_branch ? + sample_polyline_at_distance(source, 2. * max_support_distance) : source.first_point(); + const auto nearest_result = support_distancer.distance_from_lines_extra(support_query); + const Line &nearest_line = support_distancer.get_line(std::get<1>(nearest_result)); + Vec2d sampled_offset = std::get<2>(nearest_result) - support_query.cast(); + + if (disambiguate_branch) { + // Orca: an endpoint projection also contains distance along the support + // segment. Remove that tangent component before comparing wall sides. + const Vec2d support_edge = (nearest_line.b - nearest_line.a).cast(); + if (support_edge.norm() > SCALED_EPSILON) { + const Vec2d support_tangent = support_edge.normalized(); + sampled_offset -= support_tangent * sampled_offset.dot(support_tangent); + } + } + if (sampled_offset.norm() <= SCALED_EPSILON) + return std::nullopt; + + if (! disambiguate_branch) + return sampled_offset; + + // Orca: find the local point on the same material-side branch. Using the + // sampled point itself would add the distance already travelled along the + // perimeter and turn a normal transition into a long diagonal move. + const Vec2d sampled_direction = sampled_offset.normalized(); + Vec2d local_offset = sampled_offset; + double best_local_score = std::numeric_limits::infinity(); + for (size_t line_index : support_distancer.all_lines_in_radius( + local_origin, 2. * max_support_distance + 4. * SCALED_EPSILON)) { + Point local_support; + const Line &line = support_distancer.get_line(line_index); + const double distance_squared = line.distance_to_squared(local_origin, &local_support); + const Vec2d candidate_offset = local_support.cast() - local_origin.cast(); + const double candidate_distance = std::sqrt(distance_squared); + if (candidate_distance <= SCALED_EPSILON) + continue; + const double alignment = candidate_offset.normalized().dot(sampled_direction); + if (alignment < min_support_alignment) + continue; + const double score = candidate_distance / alignment; + if (score < best_local_score) { + best_local_score = score; + local_offset = candidate_offset; + } + } + return local_offset; +} + +static double executable_path_length(const Polyline &stored_path, Point wipe_start) +{ + if (stored_path.points.size() < 2) + return 0.; + + // Orca: points[0] is the storage sentinel, so measure the first segment + // from the actual nozzle position and the remaining stored segments normally. + double length = (stored_path.points[1] - wipe_start).cast().norm(); + for (size_t index = 2; index < stored_path.points.size(); ++index) + length += (stored_path.points[index] - stored_path.points[index - 1]).cast().norm(); + return length; +} + +static Lines material_side_support_lines(const Polyline &path, Point seam, int preferred_dir, + const Lines &support_lines) +{ + if (path.points.size() < 4 || path.first_point() != path.last_point()) + return {}; + + // Orca: the bisector of the incoming and outgoing material-side normals is + // a local side test that remains valid for globally self-touching Arachne + // contours. Ignore repeated seam points when obtaining both tangents. + const auto outgoing_it = std::find_if( + path.points.begin() + 1, path.points.end(), [seam](const Point &point) { return point != seam; }); + const auto incoming_it = std::find_if( + path.points.rbegin() + 1, path.points.rend(), [seam](const Point &point) { return point != seam; }); + if (outgoing_it == path.points.end() || incoming_it == path.points.rend()) + return {}; + + const Vec2d outgoing = (*outgoing_it - seam).cast().normalized(); + const Vec2d incoming = (seam - *incoming_it).cast().normalized(); + const Vec2d material_direction = + (Vec2d(-outgoing.y(), outgoing.x()) + Vec2d(-incoming.y(), incoming.x())) * preferred_dir; + if (material_direction.norm() <= EPSILON) + return {}; + + Lines result; + result.reserve(support_lines.size()); + for (const Line &line : support_lines) { + Point closest; + line.distance_to_squared(seam, &closest); + if ((closest - seam).cast().dot(material_direction) > SCALED_EPSILON) + result.push_back(line); + } + return result; +} + +bool wipe_path_stays_on_material_side( + const Polyline &path, Point path_start, const Vec2d &support_direction, + const AABBTreeLines::LinesDistancer &target_perimeter_distancer, + const AABBTreeLines::LinesDistancer ¤t_perimeter_distancer, + double effective_offset, bool require_clearance) +{ + if (path.points.size() < 2 || support_direction.norm() <= EPSILON || + target_perimeter_distancer.get_lines().empty() || current_perimeter_distancer.get_lines().empty() || + effective_offset <= SCALED_EPSILON) + return false; + + const Vec2d initial_offset = (path.points[1] - path_start).cast(); + if (initial_offset.norm() <= SCALED_EPSILON || + initial_offset.normalized().dot(support_direction.normalized()) < min_support_alignment) + return false; + // Orca: after the connector has left the extrusion endpoint, an inward + // offset must retain most of its requested clearance from the current + // external wall. Otherwise a tight turn may send an initially correct path + // back onto that wall, or make the opposite-side candidate look supported. + const double clearance_tolerance = wipe_tolerance(effective_offset, 0.25); + const double minimum_clearance = effective_offset - clearance_tolerance; + const Lines &lines = current_perimeter_distancer.get_lines(); + const auto left_normal = [](const Line &line) -> Vec2d { + const Vec2d edge = (line.b - line.a).cast(); + if (edge.norm() <= SCALED_EPSILON) + return Vec2d::Zero(); + return Vec2d(-edge.y(), edge.x()).normalized(); + }; + const auto on_material_side = [&](const Point &point, bool check_clearance) { + const auto [distance, line_index, nearest] = + current_perimeter_distancer.distance_from_lines_extra(point); + if (line_index >= lines.size()) + return false; + const Line &line = lines[line_index]; + Vec2d normal = left_normal(line); + // At a shared vertex use both incident edges, so the result does not + // depend on which equally close edge the AABB query happens to return. + const Line &previous = lines[(line_index + lines.size() - 1) % lines.size()]; + const Line &next = lines[(line_index + 1) % lines.size()]; + if ((nearest - line.a.cast()).norm() <= SCALED_EPSILON && previous.b == line.a) + normal += left_normal(previous); + if ((nearest - line.b.cast()).norm() <= SCALED_EPSILON && next.a == line.b) + normal += left_normal(next); + if (normal.norm() <= EPSILON) + return false; + + // An open or self-touching wall has no reliable polygon-wide sign. + // Orient its local normal toward the neighbouring printed inner wall, + // then test the candidate on that side at every sample. + normal.normalize(); + const Point wall_point = nearest.cast(); + const Vec2d support_point = std::get<2>( + target_perimeter_distancer.distance_from_lines_extra(wall_point)); + const double support_side = (support_point - nearest).dot(normal); + if (std::abs(support_side) <= 4. * SCALED_EPSILON) + return false; + const double side = (point.cast() - nearest).dot(normal) * (support_side > 0. ? 1. : -1.); + return side >= -4. * SCALED_EPSILON && + (! check_clearance || distance + 4. * SCALED_EPSILON >= minimum_clearance); + }; + + Point previous = path.points[1]; + if (! on_material_side(previous, require_clearance)) + return false; + for (size_t index = 2; index < path.points.size(); ++index) { + const Vec2d segment = (path.points[index] - previous).cast(); + const size_t samples = std::max(1, size_t(std::ceil(segment.norm() / effective_offset))); + for (size_t sample = 1; sample <= samples; ++sample) { + const Point point = (previous.cast() + + segment * (double(sample) / double(samples))).cast(); + if (! on_material_side(point, require_clearance)) + return false; + } + previous = path.points[index]; + } + return true; +} + +bool offset_wipe_path_toward_support(Polyline &polyline, Point seam_start, Point seam_end, Point wipe_start, + int preferred_dir, double offset_dist, double max_wipe_length, + const Lines &target_perimeter_lines, const Lines &printed_perimeter_lines, + const Lines ¤t_perimeter_lines, + double max_support_distance) +{ + assert(preferred_dir == +1 || preferred_dir == -1); + if (polyline.points.size() < 2 || target_perimeter_lines.empty() || current_perimeter_lines.empty() || + offset_dist <= SCALED_EPSILON || + max_wipe_length <= SCALED_EPSILON || max_support_distance <= SCALED_EPSILON) + return false; + + Lines material_support_lines; + const Lines *candidate_support_lines = &target_perimeter_lines; + if (seam_start == seam_end) { + // Orca: another contour may have a geometrically closer inner wall on + // this loop's air side. Restrict zero-gap support using the local seam + // normals before choosing the nearest wall. + material_support_lines = material_side_support_lines( + polyline, seam_start, preferred_dir, target_perimeter_lines); + if (material_support_lines.empty()) + return false; + candidate_support_lines = &material_support_lines; + } + + AABBTreeLines::LinesDistancer support_distancer(*candidate_support_lines); + const std::optional support_offset = support_offset_at_start( + polyline, seam_end, seam_start != seam_end, + support_distancer, max_support_distance); + if (! support_offset) + return false; + const Vec2d toward_support = *support_offset; + const double local_support_distance = toward_support.norm(); + const double effective_offset = std::min(offset_dist, local_support_distance); + if (effective_offset <= SCALED_EPSILON) + return false; + const Vec2d support_direction = toward_support / local_support_distance; + + // Orca: every candidate is validated against the same generated geometry. + // Build these AABB trees once per loop instead of rebuilding them for each + // preferred, alternate, translated, direct, or reversed candidate. + Lines all_support_lines = printed_perimeter_lines; + all_support_lines.insert(all_support_lines.end(), current_perimeter_lines.begin(), current_perimeter_lines.end()); + AABBTreeLines::LinesDistancer all_support_distancer(std::move(all_support_lines)); + AABBTreeLines::LinesDistancer current_perimeter_distancer(current_perimeter_lines); + + // Orca: allow only the contact needed to leave the extrusion endpoint. A + // connector that meets the current wall again is a seam-gap retrace, even + // if the rest of the non-extruding wipe remains over printed material. + const double contact_tolerance = wipe_tolerance(effective_offset); + + struct Candidate { + Polyline path; + // Orca: support score chooses the material-side path; length is used + // only to replace a corner-truncated path with the reverse fallback. + double support_score; + double path_length; + }; + + // Direction and wall contact have different origins after a loop pre-move. + // Keep the construction's wall endpoint for intersection checks even when + // the candidate's direction must be checked from the current nozzle position. + const auto validate_candidate = [&](Polyline path, Point path_start, Point direction_start, + double path_contact_tolerance, + const Vec2d &candidate_support_direction, + double candidate_offset, + bool require_clearance = true) -> std::optional { + // Orca: backtracking indicates a wrong join only across a nonzero gap. + // A closed zero-gap offset may initially turn back at its miter while + // still remaining on the supported material side of the perimeter. + const bool backtracks_across_gap = seam_start != seam_end && starts_by_backtracking(path, wipe_start); + // At a clipped corner another branch of the current wall may be closer + // than the requested offset. Preserve the zero-gap clearance rule, but + // check direction and local material side independently for every gap. + const bool material_side = wipe_path_stays_on_material_side( + path, direction_start, candidate_support_direction, + support_distancer, current_perimeter_distancer, candidate_offset, + require_clearance && seam_start == seam_end); + const bool connector_clear = initial_connector_is_clear( + path, wipe_start, path_start, current_perimeter_distancer, path_contact_tolerance); + if (backtracks_across_gap || ! material_side || ! connector_clear) + return std::nullopt; + const std::optional score = wipe_path_support_score( + path, wipe_start, support_distancer, all_support_distancer, max_support_distance); + if (! score) + return std::nullopt; + const double path_length = executable_path_length(path, wipe_start); + return Candidate{std::move(path), *score, path_length}; + }; + + const auto offset_candidate = [&](int dir) -> std::optional { + Polyline path = polyline; + if (! offset_wipe_path(path, seam_start, seam_end, wipe_start, dir, + effective_offset, max_wipe_length)) + return std::nullopt; + return validate_candidate(std::move(path), seam_start, seam_start, + contact_tolerance, support_direction, effective_offset); + }; + + std::optional preferred = offset_candidate(preferred_dir); + std::optional alternate = offset_candidate(-preferred_dir); + + // Orca: forward and reverse fallbacks share the same clamping, translation, + // connector tolerance, and complete-path validation. + const auto translated_candidate = [&](Polyline source, Point source_start, Point source_end, + const Vec2d &candidate_support_offset) -> std::optional { + const double support_distance = candidate_support_offset.norm(); + const double candidate_offset = std::min(offset_dist, support_distance); + if (candidate_offset <= SCALED_EPSILON) + return std::nullopt; + + const Vec2d candidate_translation = candidate_support_offset * (candidate_offset / support_distance); + if (! translated_wipe_path(source, source_start, source_end, wipe_start, + candidate_translation, max_wipe_length)) + return std::nullopt; + const double candidate_tolerance = wipe_tolerance(candidate_offset); + return validate_candidate(std::move(source), source_start, source_start, candidate_tolerance, + candidate_support_offset / support_distance, candidate_offset); + }; + + std::optional translated = translated_candidate(polyline, seam_start, seam_end, toward_support); + + // Orca: if every full-length construction folds back onto the external + // wall, retain a short direct inward move instead of accepting an outward + // candidate or falling back to the standard wipe along the outer wall. + const auto direct_candidate = [&](Point origin, const Vec2d &candidate_support_offset) -> std::optional { + const double support_distance = candidate_support_offset.norm(); + const double candidate_offset = std::min(offset_dist, support_distance); + if (candidate_offset <= SCALED_EPSILON) + return std::nullopt; + const Vec2d direction = candidate_support_offset / support_distance; + const Point destination = (origin.cast() + direction * candidate_offset).cast(); + if (destination == wipe_start) + return std::nullopt; + + Polyline path; + if (! store_wipe_path(path, seam_start, Polyline{wipe_start, destination}, max_wipe_length)) + return std::nullopt; + const double candidate_tolerance = wipe_tolerance(candidate_offset); + // Check the executed direction from the nozzle after any loop pre-move, + // but retain the wall origin for the connector's intersection checks. + return validate_candidate(std::move(path), origin, wipe_start, + candidate_tolerance, direction, candidate_offset, false); + }; + std::optional direct = direct_candidate(seam_end, toward_support); + + const double length_margin = wipe_tolerance(max_wipe_length); + std::optional reversed; + if (seam_start != seam_end && polyline.last_point() == seam_end) { + // Orca: when a large gap straddles a sharp corner, connecting the + // extrusion end to the forward offset may either reverse or leave only + // a short local move. The already printed incoming wall is equally safe: + // follow it backwards and determine its own material-side support. + Polyline reversed_source = polyline; + reversed_source.reverse(); + const std::optional reversed_support_offset = support_offset_at_start( + reversed_source, seam_end, true, support_distancer, max_support_distance); + if (reversed_support_offset) { + reversed = translated_candidate(reversed_source, seam_end, seam_end, *reversed_support_offset); + // A translated reverse path can backtrack or leave the material on + // a curved wall. Offset the incoming wall itself when translation + // cannot supply a complete wipe, retaining all candidate checks. + if (! reversed || reversed->path_length + length_margin < max_wipe_length) { + const double reverse_offset = std::min(offset_dist, reversed_support_offset->norm()); + if (reverse_offset > SCALED_EPSILON && + offset_wipe_path(reversed_source, seam_end, seam_start, wipe_start, + -preferred_dir, reverse_offset, max_wipe_length)) { + reversed_source.points.front() = seam_start; + auto candidate = validate_candidate(std::move(reversed_source), seam_end, seam_end, + wipe_tolerance(reverse_offset), reversed_support_offset->normalized(), reverse_offset); + if (candidate && (! reversed || + (candidate->path_length > reversed->path_length + length_margin && + candidate->support_score <= reversed->support_score + wipe_tolerance(reverse_offset)))) + reversed = std::move(candidate); + } + } + } + } + + // Orca: conventional offsets at a narrow cusp may form a bevel across the + // cusp. Candidates pointing away from the actual inner wall are rejected + // during validation; among the remaining paths, prefer the one whose first + // point is materially closer to that wall. + const double direction_change_margin = wipe_tolerance(effective_offset); + std::optional selected = std::move(preferred); + if (translated) { + if (! selected || translated->support_score + direction_change_margin < selected->support_score) + selected = std::move(translated); + } + if (! selected) + selected = std::move(direct); + // Prefer a direct inward move when the normal offset cannot be used. + // An alternate offset is eligible only after the same material-side checks. + if (! selected) + selected = std::move(alternate); + + // Orca: prefer a complete reverse wipe over a forward fallback that had to + // stop at the corner. Equal-length paths keep the normal forward behavior. + if (reversed && (! selected || + (reversed->path_length > selected->path_length + length_margin && + reversed->support_score <= selected->support_score + direction_change_margin))) + selected = std::move(reversed); + if (! selected) + return false; + + polyline = std::move(selected->path); + return true; +} + +std::optional wipe_on_loops_destination(const ExtrusionPaths &paths, double nozzle_diam_scaled, + bool is_ccw, bool is_hole) +{ + assert(!paths.empty()); + assert(nozzle_diam_scaled > 0); + if (paths.empty() || nozzle_diam_scaled <= 0) + return std::nullopt; + + // Orca: clamp sample distance to L/4 so forward/backward samples cannot meet. + double total_length = 0.; + for (const ExtrusionPath &path : paths) + total_length += path.length(); + const double sample_distance = std::min(nozzle_diam_scaled, total_length * 0.25); + + Point a = sample_path_at_distance(paths, true, sample_distance); + Point b = sample_path_at_distance(paths, false, sample_distance); + + const Point seam_start = paths.front().first_point(); + + // Orca: skip the inward move for degenerate geometry. + if (a == b || a == seam_start || b == seam_start) + return std::nullopt; + + const bool reverse_turn = is_hole == is_ccw; + if (reverse_turn) + std::swap(a, b); + + double angle = seam_start.ccw_angle(a, b) / 3; + + // Orca: reject degenerate angles near 0 or 2π. + static constexpr double angle_epsilon = 0.01; + if (angle < angle_epsilon || angle > 2 * PI / 3 - angle_epsilon) + return std::nullopt; + + if (reverse_turn) + angle *= -1; + + Point pt = sample_path_at_distance(paths, true, std::min(0.2 * nozzle_diam_scaled, sample_distance)); + pt.rotate(angle, seam_start); + return pt; +} + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/WipePathHelpers.hpp b/src/libslic3r/GCode/WipePathHelpers.hpp new file mode 100644 index 0000000000..616e5dc88b --- /dev/null +++ b/src/libslic3r/GCode/WipePathHelpers.hpp @@ -0,0 +1,96 @@ +#pragma once + +#include + +#include "../ExtrusionEntity.hpp" +#include "../Polyline.hpp" +#include "../Line.hpp" + +namespace Slic3r { + +// Printed prefix of one region's perimeter sequence. Append each entity only +// after extrusion; later walls and other regions cannot support an inward wipe. +struct WipeInwardSupport { + Lines printed_lines; + Lines inner_lines; + void append(const ExtrusionEntity &entity); +}; + +namespace AABBTreeLines { +template class LinesDistancer; +} + +// Orca: sample a point at a given distance along ExtrusionPaths, walking +// across segment boundaries. forward=true walks from paths.front, false from +// paths.back. For tiny loops the walk stops early and returns the last +// reachable point. Returns the start point if target is zero. +// Precondition: paths must be non-empty. +Point sample_path_at_distance(const ExtrusionPaths &paths, bool forward, double target); + +// Orca: return the side of the printed path on which the material lies. +// dir +1 is left and -1 is right, matching the offset-builder convention. +int wipe_offset_direction(bool is_ccw, bool is_hole); + +// Orca: atomically offset a stored wipe path. The seam-gap or closing edge +// determines the join with the first outgoing perimeter edge, but its offset +// is not part of the executable wipe. Only the prefix needed by Wipe::wipe() +// is offset. Returns false and leaves polyline unchanged if that path cannot +// be constructed without degenerate segments. This only constructs a candidate; +// offset_wipe_path_toward_support() validates its support, material side and +// connector before accepting it. The first stored point +// remains a dummy preserving Wipe::wipe()'s convention of skipping points[0]. +// Precondition: polyline starts at seam_start, dir is +1 or -1, and +// offset_dist > 0. A non-positive max_wipe_length returns false. +bool offset_wipe_path(Polyline &polyline, Point seam_start, Point seam_end, Point wipe_start, + int dir, double offset_dist, double max_wipe_length); + +// Orca: score a candidate's first destination by distance to the target inner +// walls. Return nullopt if no target wall is near wipe_start or any executable +// segment lacks support. target_distancer contains eligible earlier walls; +// all_support_distancer includes the current wall and all earlier walls. +// The stored first point is a dummy: the first segment starts at wipe_start. +// This checks support only; material-side and connector checks belong to +// offset_wipe_path_toward_support(). Trees are reused across its candidates. +std::optional wipe_path_support_score( + const Polyline &polyline, Point wipe_start, + const AABBTreeLines::LinesDistancer &target_distancer, + const AABBTreeLines::LinesDistancer &all_support_distancer, + double max_distance); + +// Validate the initial inward direction and the local material side along the +// executable path, using the inner wall to orient the open current wall's +// normals. Clearance is optional for clipped corners and short direct fallbacks; +// the material-side check is mandatory. The straight connector is checked by +// its initial direction and separately by support and intersection validation. +// path_start is the construction origin; points[0] is only a storage sentinel. +bool wipe_path_stays_on_material_side( + const Polyline &path, Point path_start, const Vec2d &support_direction, + const AABBTreeLines::LinesDistancer &target_perimeter_distancer, + const AABBTreeLines::LinesDistancer ¤t_perimeter_distancer, + double effective_offset, bool require_clearance); + +// Orca: identify the adjacent inner perimeter from the outgoing wall, excluding +// support on the air side of a closed zero-gap loop. Clamp the requested offset +// to the distance from the seam end to that support, then select the safest +// supported offset or translated path. If a wide seam gap at a corner truncates +// every forward candidate, the incoming printed wall may be followed backwards +// instead. All earlier printed perimeters still participate in the complete-path +// safety check. This handles converging, locally ambiguous, or self-touching +// contours whose global winding alone does not identify the material side. +// Returns false and leaves polyline unchanged when no candidate is supported. +// Precondition: preferred_dir is +1 or -1. Distances must be positive. +bool offset_wipe_path_toward_support(Polyline &polyline, Point seam_start, Point seam_end, Point wipe_start, + int preferred_dir, double offset_dist, double max_wipe_length, + const Lines &target_perimeter_lines, const Lines &printed_perimeter_lines, + const Lines ¤t_perimeter_lines, + double max_support_distance); + +// Orca: compute the inward destination point for wipe_on_loops, or +// std::nullopt when the geometry is degenerate (tiny loop, coincident samples, +// angle near 0 or 2π). Returns the rotated destination or nullopt to skip the +// inward move entirely. +// Precondition: paths non-empty, nozzle_diam_scaled > 0. +std::optional wipe_on_loops_destination(const ExtrusionPaths &paths, double nozzle_diam_scaled, + bool is_ccw, bool is_hole); + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 5834937169..eaf8a2eaf3 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -25,6 +25,30 @@ static constexpr int arc_fit_size = 20; enum class LimitFlow { None, LimitPrintFlow, LimitRammingFlow, LimitRammingFlowNC};//nc:nozzle change static const std::map nozzle_diameter_to_nozzle_change_width{{0.2f, 0.5f}, {0.4f, 1.0f}, {0.6f, 1.2f}, {0.8f, 1.4f}}; +bool wipe_tower_sparse_layers_skipped(const PrintConfig &config) +{ + return config.wipe_tower_no_sparse_layers.value && config.timelapse_type.value != TimelapseType::tlSmooth && + ! config.enable_wrapping_detection.value; +} + +bool wipe_tower_layer_is_sparse(const std::vector &layer_tool_changes) +{ + return layer_tool_changes.size() == 1 && layer_tool_changes.front().initial_tool == layer_tool_changes.front().new_tool; +} + +std::vector compute_compacted_wipe_tower_z(const std::vector> &tool_changes, + float base_z) +{ + std::vector tower_z(tool_changes.size(), base_z); + float last = base_z; + for (size_t i = 0; i < tool_changes.size(); ++i) { + if (! tool_changes[i].empty() && ! wipe_tower_layer_is_sparse(tool_changes[i])) + last += tool_changes[i].front().layer_height; + tower_z[i] = last; + } + return tower_z; +} + inline float align_round(float value, float base) { return std::round(value / base) * base; @@ -1349,7 +1373,7 @@ public: // flavor it reaches understands, not the zero dwell the other flavors flush with. buffer += "M400\n"; buffer += "M104"; - if (target_extruder != -1) + if (target_extruder != -1 && target_extruder < int(m_physical_extruder_map.size())) buffer += (" T" + std::to_string(m_physical_extruder_map[target_extruder])); buffer += " S" + std::to_string(target_temp) + " N0"; // N0 means the gcode is generated by slicer if (!comment.empty()) buffer += " ;" + comment; @@ -1361,7 +1385,7 @@ public: WipeTowerWriter &format_line_M109(int target_temp, int target_extruder, const std::string &comment = std::string()) { std::string buffer = "M109"; - if (target_extruder != -1) + if (target_extruder != -1 && target_extruder < int(m_physical_extruder_map.size())) buffer += (" T" + std::to_string(m_physical_extruder_map[target_extruder])); buffer += " S" + std::to_string(target_temp) + " N0"; // N0 means the gcode is generated by slicer if (!comment.empty()) buffer += " ;" + comment; @@ -1630,6 +1654,94 @@ float WipeTower::get_auto_brim_by_height(float max_height) { return 8.f; } +float WipeTower::estimate_brim_real_width(float brim_width, float nozzle_diameter, float first_layer_height, bool type2) +{ + if (brim_width <= 0.f) + return brim_width; + const float spacing = nozzle_diameter * 1.25f - first_layer_height * float(1. - M_PI_4); // Width_To_Nozzle_Ratio + if (spacing <= EPSILON) + return brim_width; + const int loops_num = int((brim_width + spacing / 2.f) / spacing); + return loops_num * spacing + (type2 ? 0.f : spacing / 2.f); +} + +float WipeTower::get_wrapping_detection_depth() +{ + return float(wrapping_wipe_tower_depth); +} + +float WipeTower::nozzle_change_perimeter_width(float nozzle_diameter) +{ + auto it = nozzle_diameter_to_nozzle_change_width.find(nozzle_diameter); + return it != nozzle_diameter_to_nozzle_change_width.end() ? it->second : 2.f * nozzle_diameter * 1.25f; +} + +float WipeTower::estimate_tower_blocks_depth(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing) +{ + if (purges.empty() || layer_height < EPSILON || nozzle_diameter < EPSILON) + return 0.f; + const float pw = nozzle_diameter * 1.25f; // Width_To_Nozzle_Ratio + const float ncpw = nozzle_change_perimeter_width(nozzle_diameter); + const float line_width = width - 2.f * pw; + if (line_width <= EPSILON) + return 0.f; + // Line cross-section as volume_to_length() sees it; the infill gap stretches the perimeter + // width by the configured ratio and nozzle-change lines keep their own width + // (calc_block_infill_gap). + auto line_area = [layer_height](float w) { return layer_height * (w - layer_height * float(1. - M_PI_4)); }; + const float extra_width = (extra_spacing - 1.f) * pw; + const float gap = pw + extra_width; + const float nc_gap = ncpw + extra_width; + // A layer purges into at most (filaments - 1) targets, so a category holding every filament + // never sees its smallest purge (the layer's first filament) in its worst layer. + struct Block { float depth = 0.f; float min_purge = 0.f; size_t filaments = 0; }; + std::map blocks; + for (const PurgeEstimate &purge : purges) { + Block &block = blocks[purge.category]; + const float purge_depth = std::ceil(purge.prime_volume / line_area(pw) / line_width) * gap; + block.min_purge = block.filaments == 0 ? purge_depth : std::min(block.min_purge, purge_depth); + block.depth += purge_depth; + ++block.filaments; + if (purge.filament_change_length > EPSILON) { + // The leaving filament is rammed over the nozzle-change flow, again in whole lines. + const float filament_area = float(M_PI) * purge.filament_diameter * purge.filament_diameter / 4.f; + const float nc_length = purge.filament_change_length * filament_area / line_area(ncpw); + block.depth += std::ceil(nc_length / (width - ncpw - pw)) * nc_gap; + } + } + float depth = pw; // plan_tower_new starts the first block one perimeter width in + for (const auto &[category, block] : blocks) + depth += block.filaments == purges.size() ? block.depth - block.min_purge : block.depth; + return depth; +} + +float WipeTower::rib_footprint_side(float width, float depth, float rib_width, float extra_rib_length, float max_height) +{ + if (width < EPSILON || depth < EPSILON) + return 0.f; + // Ribs run the diagonal; below the height-based minimum they are extended rather than the + // body, then by the extra length, never ending up shorter than the diagonal. + const float diagonal = std::sqrt(width * width + depth * depth); + float rib_length = diagonal; + if (depth + EPSILON < get_limit_depth_by_height(max_height)) + rib_length = std::max(rib_length, get_limit_depth_by_height(max_height) * float(std::sqrt(2.))); + rib_length = std::max(diagonal, rib_length + extra_rib_length); + // Half the extension at each end of the diagonal plus half the rib width, projected onto the axes. + const float rib_w = std::min(rib_width, std::min(width, depth) / 2.f); + const float per_side = ((rib_length - diagonal) / 2.f + rib_w / 2.f) / float(std::sqrt(2.)); + return std::max(width, depth) + 2.f * per_side; +} + +float WipeTower::estimate_rib_tower_bbox_side(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing, float rib_width, float extra_rib_length, float max_height) +{ + if (purges.empty() || width < EPSILON || layer_height < EPSILON || nozzle_diameter < EPSILON) + return 0.f; + const float pw = nozzle_diameter * 1.25f; // Width_To_Nozzle_Ratio + const float square = align_ceil(std::sqrt(estimate_tower_blocks_depth(purges, width, layer_height, nozzle_diameter, extra_spacing) * width), pw); + const float depth = estimate_tower_blocks_depth(purges, square, layer_height, nozzle_diameter, extra_spacing); + return rib_footprint_side(square, depth, rib_width, extra_rib_length, max_height); +} + Vec2f WipeTower::move_box_inside_polygon(const BoundingBox &box, const Polygons &polygons, coord_t offset) { if (polygons.empty()) return Vec2f{0.f, 0.f}; @@ -1791,7 +1903,7 @@ WipeTower::WipeTower(const PrintConfig& config, int plate_idx, Vec3d plate_origi m_z_pos(0.f), //m_bridging(float(config.wipe_tower_bridging)), m_bridging(10.f), - m_no_sparse_layers(config.wipe_tower_no_sparse_layers), + m_sparse_layers_skipped(wipe_tower_sparse_layers_skipped(config)), m_gcode_flavor(config.gcode_flavor), m_travel_speed(config.travel_speed.get_at(get_extruder_index(config, (unsigned int)initial_tool))), m_current_tool(initial_tool), @@ -2889,7 +3001,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (! m_no_sparse_layers || toolchanges_on_layer) + if (! m_sparse_layers_skipped || toolchanges_on_layer) if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); @@ -2933,7 +3045,7 @@ void WipeTower::plan_toolchange(float z_par, float layer_height_par, unsigned in if (m_plan.empty() || m_plan.back().z + WT_EPSILON < z_par) // if we moved to a new layer, we'll add it to m_plan first m_plan.push_back(WipeTowerInfo(z_par, layer_height_par)); - if (m_first_layer_idx == size_t(-1) && (! m_no_sparse_layers || old_tool != new_tool)) + if (m_first_layer_idx == size_t(-1) && (! m_sparse_layers_skipped || old_tool != new_tool)) m_first_layer_idx = m_plan.size() - 1; if (old_tool == new_tool) // new layer without toolchanges - we are done @@ -3221,7 +3333,7 @@ void WipeTower::get_wall_skip_points(const WipeTowerInfo &layer, int layer_id) if (!cur_block_depth.count(m_filpar[new_filament].category)) cur_block_depth[m_filpar[new_filament].category] = block->start_depth; process_depth = cur_block_depth[m_filpar[new_filament].category]; if (is_need_ramming(new_filament, old_filament, layer_id)) { - if (m_filament_categories[new_filament] == m_filament_categories[old_filament]) + if (get_filament_category(new_filament) == get_filament_category(old_filament)) process_depth += nozzle_change_depth; else { if (!cur_block_depth.count(m_filpar[old_filament].category)) { @@ -3786,7 +3898,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer_new(bool extrude_perimeter, // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (!m_no_sparse_layers || toolchanges_on_layer) + if (!m_sparse_layers_skipped || toolchanges_on_layer) if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); @@ -3896,7 +4008,7 @@ WipeTower::ToolChangeResult WipeTower::finish_block(const WipeTowerBlock &block, // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (!m_no_sparse_layers || toolchanges_on_layer) + if (!m_sparse_layers_skipped || toolchanges_on_layer) if (filament_id < m_used_filament_length.size()) m_used_filament_length[filament_id] += writer.get_and_reset_used_filament_length(); @@ -4013,7 +4125,7 @@ WipeTower::ToolChangeResult WipeTower::finish_block_solid(const WipeTowerBlock & // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (!m_no_sparse_layers || toolchanges_on_layer) + if (!m_sparse_layers_skipped || toolchanges_on_layer) if (filament_id < m_used_filament_length.size()) m_used_filament_length[filament_id] += writer.get_and_reset_used_filament_length(); @@ -4083,7 +4195,7 @@ void WipeTower::toolchange_wipe_new(WipeTowerWriter &writer, const box_coordinat } return time * 60.f; }; - auto estimate_wipe_time = [&estimate_time_kernel, & cleaning_box, &target_speed, &x_to_wipe, &xr, &xl, &dy, &WipeSpeedMap, &solid_tool_toolchange](int begin_line) -> float { + auto estimate_wipe_time = [&estimate_time_kernel, & cleaning_box, &x_to_wipe, &xr, &xl, &dy, &solid_tool_toolchange](int begin_line) -> float { int n = std::ceil(x_to_wipe / (xr - xl)); if (solid_tool_toolchange) n = (cleaning_box.lu[1] - cleaning_box.ld[1]) / dy; float total_time = estimate_time_kernel(n); @@ -4695,7 +4807,7 @@ int WipeTower::get_wall_filament_for_all_layer() int filament_id = -1; int filament_count = 0; for (auto iter = filament_counts.begin(); iter != filament_counts.end(); ++iter) { - if (m_filament_categories[iter->first] == selected_category && iter->second > filament_count) { + if (get_filament_category(iter->first) == selected_category && iter->second > filament_count) { filament_id = iter->first; filament_count = iter->second; } @@ -4883,12 +4995,8 @@ void WipeTower::generate_new(std::vector std::pair { + auto get_closet_idx = [&writer](Polylines &pls) -> std::pair { Vec2f anchor{writer.x(), writer.y()}; int closestIndex = -1; int closestPl = -1; diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 045c82cbf3..5426c9bd85 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -42,9 +42,36 @@ public: static const std::map min_depth_per_height; static float get_limit_depth_by_height(float max_height); static float get_auto_brim_by_height(float max_height); + // Both generators lay the brim in whole loops one line spacing apart, so the printed width + // differs from the configured one. WipeTower reports it with half a spacing of line width + // added, WipeTower2 reports the loops alone; an estimate has to round like the generator + // whose G-code it stands in for. + static float estimate_brim_real_width(float brim_width, float nozzle_diameter, float first_layer_height, bool type2); + // Depth a Type1 tower reserves once nothing but wrapping detection asks for one. + static float get_wrapping_detection_depth(); + // Line width of the nozzle-change purge lines at this nozzle diameter. + static float nozzle_change_perimeter_width(float nozzle_diameter); static TriangleMesh its_make_rib_tower(float width, float depth, float height, float rib_length, float rib_width, bool fillet_wall); static TriangleMesh its_make_rib_brim(const Polygon& brim, float layer_height); static Polygon rib_section(float width, float depth, float rib_length, float rib_width, bool fillet_wall); + // One filament's share of a Type1 tower layer, as plan_tower_new() reserves it. + struct PurgeEstimate + { + float prime_volume = 0.f; // mm3 wiped after changing to this filament + int category = 0; // filament_adhesiveness_category; one purge block per category + float filament_change_length = 0.f; // mm of filament rammed when it leaves its nozzle; 0 when no nozzle change is planned + float filament_diameter = 1.75f; + }; + // Depth of the Type1 purge stack at the given width (also the rectangle-wall depth): each + // purge is whole lines at the block infill gap, one block per adhesiveness category sized by + // its worst layer, stacked behind one perimeter width. + static float estimate_tower_blocks_depth(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing); + // Side of the square bounding a rib-wall tower's first layer, brim excluded: the body plus the + // rib bulge, with the ribs extended to the height-based minimum as both generators do. + static float rib_footprint_side(float width, float depth, float rib_width, float extra_rib_length, float max_height); + // Type1 rib tower: plan_tower_new() squares the tower from the depth at the configured width, + // then re-plans the depth at the squared width. + static float estimate_rib_tower_bbox_side(const std::vector &purges, float width, float layer_height, float nozzle_diameter, float extra_spacing, float rib_width, float extra_rib_length, float max_height); // Translation that brings a footprint inside the printable outline, padded by offset. The prime // tower is validated against the real outline (see layered_print_cleareance_valid), so clamping // against the bounding box alone would leave it off a delta or hexagonal bed. box and polygons @@ -494,7 +521,7 @@ private: //float m_parking_pos_retraction = 0.f; //float m_extra_loading_move = 0.f; float m_bridging = 0.f; - bool m_no_sparse_layers = false; + bool m_sparse_layers_skipped = false; // BBS: remove useless config //bool m_set_extruder_trimpot = false; bool m_adhesion = true; @@ -653,6 +680,24 @@ private: }; +// Compaction rule for wipe_tower_no_sparse_layers. Shared by the G-code emitter and by the +// clearance validator so that both agree on where the compacted tower actually sits; a drift +// between the two would either let a real nozzle collision through or reject a safe plate. + +// Whether sparse layers are really skipped, i.e. whether the tower is compacted at all. Smooth +// timelapse and wrapping detection put a tower on every layer, so no layer is ever dropped and the +// tower keeps following the object even though the option is on. Tower planning, G-code emission and +// the clearance validator all ask this single question, so none of them can compact on its own. +bool wipe_tower_sparse_layers_skipped(const PrintConfig &config); + +// A planned layer prints no tower at all when its only toolchange keeps the same filament. +bool wipe_tower_layer_is_sparse(const std::vector &layer_tool_changes); + +// Print z the compacted tower reaches on every planned layer. Sparse layers carry over the +// previous value, so the tower falls one layer height behind the object for each of them. base_z is +// the z the tower starts from, which Orca offsets by z_offset. +std::vector compute_compacted_wipe_tower_z(const std::vector> &tool_changes, + float base_z = 0.f); } // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index ee0f9c375a..0080094270 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -1032,7 +1032,7 @@ WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& defau m_y_shift(0.f), m_z_pos(0.f), m_bridging(float(config.wipe_tower_bridging)), - m_no_sparse_layers(config.wipe_tower_no_sparse_layers), + m_sparse_layers_skipped(wipe_tower_sparse_layers_skipped(config)), m_gcode_flavor(config.gcode_flavor), m_travel_speed(config.travel_speed.get_at(get_extruder_index(config, (unsigned int)initial_tool))), m_infill_speed(default_region_config.sparse_infill_speed.get_at(get_extruder_index(config, (unsigned int)initial_tool))), @@ -1730,7 +1730,7 @@ void WipeTower2::toolchange_Change( } else if (m_wall_type == (int)wtwCone) { const double support_scale = get_wipe_tower_cone_base(m_wipe_tower_width, m_wipe_tower_height, m_wipe_tower_depth, m_wipe_tower_cone_angle).second; - const double z = m_no_sparse_layers ? (m_current_height + m_layer_info->height) : m_layer_info->z; + const double z = m_sparse_layers_skipped ? (m_current_height + m_layer_info->height) : m_layer_info->z; const double r = std::tan(Geometry::deg2rad(m_wipe_tower_cone_angle / 2.f)) * (m_wipe_tower_height - z); const double w = m_layer_info->depth + m_perimeter_width; if (r > 0.5 * w + 0.01) { // same guard as generate_support_cone_wall @@ -1872,7 +1872,7 @@ void WipeTower2::toolchange_Wipe( // All the calculations in all other places take the spacing into account for all the layers. // If spare layers are excluded->if 1 or less toolchange has been done, it must be sill the first layer, too.So slow down. - const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers) ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); + const float target_speed = is_first_layer() || (m_num_tool_changes <= 1 && m_sparse_layers_skipped) ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); float wipe_speed = 0.33f * target_speed; // if there is less than 2.5*line_width to the edge, advance straightaway (there is likely a blob anyway) @@ -1970,7 +1970,7 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer() // Slow down on the 1st layer. // If spare layers are excluded -> if 1 or less toolchange has been done, it must be still the first layer, too. So slow down. - bool first_layer = is_first_layer() || (m_num_tool_changes <= 1 && m_no_sparse_layers); + bool first_layer = is_first_layer() || (m_num_tool_changes <= 1 && m_sparse_layers_skipped); float feedrate = first_layer ? m_first_layer_speed * 60.f : std::min(m_wipe_tower_max_purge_speed * 60.f, m_infill_speed * 60.f); if (m_enable_tower_interface_features && m_prev_layer_had_interface) feedrate = std::min(feedrate, 20.f * 60.f); @@ -2103,7 +2103,7 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer() // Ask our writer about how much material was consumed. // Skip this in case the layer is sparse and config option to not print sparse layers is enabled. - if (! m_no_sparse_layers || toolchanges_on_layer || first_layer) { + if (! m_sparse_layers_skipped || toolchanges_on_layer || first_layer) { if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); m_current_height += m_layer_info->height; @@ -2129,6 +2129,23 @@ std::pair WipeTower2::get_wipe_tower_cone_base(double width, dou return std::make_pair(R, support_scale); } +Polygon WipeTower2::cone_base_polygon(double width, double depth, double height, double angle_deg) +{ + Polygon box({Point::new_scale(Vec2d(0., 0.)), Point::new_scale(Vec2d(width, 0.)), + Point::new_scale(Vec2d(width, depth)), Point::new_scale(Vec2d(0., depth))}); + if (angle_deg <= EPSILON || height <= EPSILON || width <= EPSILON || depth <= EPSILON) + return box; + const auto [R, x_scale] = get_wipe_tower_cone_base(width, height, depth, angle_deg); + if (R <= EPSILON) + return box; + const Vec2d center(width / 2., depth / 2.); + Polygon ellipse; + for (double alpha = 0.; alpha < 2. * M_PI; alpha += M_PI / 20.) + ellipse.points.push_back(Point::new_scale(center + R * Vec2d(std::cos(alpha) / x_scale, std::sin(alpha)))); + Polygons u = union_({box, ellipse}); + return u.empty() ? box : u.front(); +} + // Static method to extract wipe_volumes[from][to] from the configuration. // Takes a ConfigBase so the GUI's wipe tower size estimate can pass the plate's // DynamicPrintConfig directly instead of materializing a full PrintConfig per call. @@ -2209,7 +2226,7 @@ void WipeTower2::plan_toolchange(float z_par, float layer_height_par, unsigned i if (m_plan.empty() || m_plan.back().z + WT_EPSILON < z_par) // if we moved to a new layer, we'll add it to m_plan first m_plan.push_back(WipeTowerInfo(z_par, layer_height_par)); - if (m_first_layer_idx == size_t(-1) && (! m_no_sparse_layers || old_tool != new_tool || m_plan.size() == 1)) + if (m_first_layer_idx == size_t(-1) && (! m_sparse_layers_skipped || old_tool != new_tool || m_plan.size() == 1)) m_first_layer_idx = m_plan.size() - 1; if (old_tool == new_tool) // new layer without toolchanges - we are done @@ -2635,7 +2652,7 @@ Polygon WipeTower2::generate_support_cone_wall( const auto [R, support_scale] = get_wipe_tower_cone_base(m_wipe_tower_width, m_wipe_tower_height, m_wipe_tower_depth, m_wipe_tower_cone_angle); - double z = m_no_sparse_layers ? + double z = m_sparse_layers_skipped ? (m_current_height + m_layer_info->height) : m_layer_info->z; // the former should actually work in both cases, but let's stay on the safe side (the 2.6.0 is close) diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index 5b1a474b5d..eb3a2562fb 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -27,6 +27,10 @@ public: // in WipeTowerIntegration::append_tcr2 does not strip it. static const std::string wait_for_temp_tag() { return ";_WAIT_FOR_TEMP_ON_WIPE_TOWER"; } static std::pair get_wipe_tower_cone_base(double width, double height, double depth, double angle_deg); + // First-layer outline of a cone-wall tower in tower-local (scaled) coordinates: body box + // unioned with the cone's base ellipse — the model first_layer_wipe_tower_corners uses, + // and generate_support_cone_wall stays within it. Brim not included. + static Polygon cone_base_polygon(double width, double depth, double height, double angle_deg); static std::vector> extract_wipe_volumes(const ConfigBase& config); // Estimated total flush volume of a SEMM print with the given number of filaments, // used to reserve wipe tower space before the tower is generated. @@ -263,7 +267,7 @@ private: float m_parking_pos_retraction = 0.f; float m_extra_loading_move = 0.f; float m_bridging = 0.f; - bool m_no_sparse_layers = false; + bool m_sparse_layers_skipped = false; bool m_set_extruder_trimpot = false; bool m_adhesion = true; GCodeFlavor m_gcode_flavor; diff --git a/src/libslic3r/GCode/WipeTowerEstimate.cpp b/src/libslic3r/GCode/WipeTowerEstimate.cpp new file mode 100644 index 0000000000..d8cfe74527 --- /dev/null +++ b/src/libslic3r/GCode/WipeTowerEstimate.cpp @@ -0,0 +1,202 @@ +#include "WipeTowerEstimate.hpp" + +#include "WipeTower.hpp" +#include "WipeTower2.hpp" +#include "../Config.hpp" +#include "../PrintConfig.hpp" +#include "../libslic3r.h" + +#include +#include +#include + +namespace Slic3r { + +// Every caller today declares all these keys, but the signature accepts any ConfigBase: fall +// back to the key's declared default, never to a hand-copied constant. +static const ConfigOption *option_of(const ConfigBase &config, const char *key) +{ + if (const ConfigOption *opt = config.option(key); opt != nullptr) + return opt; + if (const ConfigDef *def = config.def(); def != nullptr) + if (const ConfigOptionDef *opt_def = def->get(key); opt_def != nullptr) + return opt_def->default_value.get(); + return nullptr; +} + +WipeTowerType resolve_wipe_tower_type(const ConfigBase &config) +{ + // printer_model is what the CLI keys its Bambu Lab detection on; the GUI's vendor flag + // agrees for every shipped profile. + if (const auto *model = dynamic_cast(config.option("printer_model")); + model != nullptr && model->value.compare(0, 9, "Bambu Lab") == 0) + return WipeTowerType::Type1; + // By value, not by concrete type: a static PrintConfig holds ConfigOptionEnum, a + // DynamicConfig built from presets holds ConfigOptionEnumGeneric, and both answer getInt(). + const ConfigOption *type = option_of(config, "wipe_tower_type"); + return type != nullptr ? WipeTowerType(type->getInt()) : WipeTowerType::Type2; +} + +Polygon estimate_wipe_tower_first_layer_outline(const ConfigBase &config, WipeTowerType tower_type, double width, double depth, double height) +{ + // Type1 ignores the cone option. The wall type is read by value: a preset-shaped config + // holds it as ConfigOptionEnumGeneric, which a cast to ConfigOptionEnum cannot see. + const ConfigOption *wall_type = option_of(config, "wipe_tower_wall_type"); + const ConfigOption *cone_angle = option_of(config, "wipe_tower_cone_angle"); + const bool cone = tower_type == WipeTowerType::Type2 && wall_type != nullptr && + wall_type->getInt() == int(WipeTowerWallType::wtwCone) && cone_angle != nullptr; + return WipeTower2::cone_base_polygon(width, depth, height, cone ? cone_angle->getFloat() : 0.); +} + +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, WipeTowerType tower_type, const std::vector &filament_ids, double layer_height, double max_object_height) +{ + WipeTowerFootprint footprint; + footprint.height = max_object_height; + const size_t filaments_cnt = filament_ids.size(); + if (filaments_cnt == 0 || layer_height < EPSILON) + return footprint; + + auto opt_float = [&config](const char *key) { + const ConfigOption *opt = option_of(config, key); + return opt != nullptr ? opt->getFloat() : 0.; + }; + auto opt_bool = [&config](const char *key) { + const ConfigOption *opt = option_of(config, key); + return opt != nullptr && opt->getBool(); + }; + auto opt_enum = [&config](const char *key, int fallback) { + const ConfigOption *opt = option_of(config, key); + return opt != nullptr ? opt->getInt() : fallback; + }; + auto floats_of = [&config](const char *key) { return dynamic_cast(option_of(config, key)); }; + auto max_of = [&floats_of](const char *key, double fallback) { + const auto *opt = floats_of(key); + return (opt != nullptr && !opt->values.empty()) ? *std::max_element(opt->values.begin(), opt->values.end()) : fallback; + }; + auto float_at = [&floats_of](const char *key, unsigned int id, double fallback) { + const auto *opt = floats_of(key); + return (opt != nullptr && !opt->values.empty()) ? opt->get_at(id) : fallback; + }; + auto int_at = [&config](const char *key, unsigned int id, int fallback) { + const auto *opt = dynamic_cast(option_of(config, key)); + return (opt != nullptr && !opt->values.empty()) ? opt->get_at(id) : fallback; + }; + + // Both planners size every layer, so the tower has to fit its thinnest one: the first layer + // when it is printed thinner than the rest. + const double first_layer_height = opt_float("initial_layer_print_height"); + if (first_layer_height > EPSILON) + layer_height = std::min(layer_height, first_layer_height); + + const bool type1 = tower_type == WipeTowerType::Type1; + const double width = opt_float("prime_tower_width"); + const double prime_volume = opt_float("prime_volume"); + // Type1 spaces its purge lines by prime_tower_infill_gap, Type2 by wipe_tower_extra_spacing. + // Type2's extra flow cancels out of the depth: the line length is divided by it and the row + // pitch multiplied by it (WipeTower2::get_wipe_depth). + const double extra_spacing = opt_float(type1 ? "prime_tower_infill_gap" : "wipe_tower_extra_spacing") / 100.; + const double rib_width = opt_float("wipe_tower_rib_width"); + const double extra_rib_length = opt_float("wipe_tower_extra_rib_length"); + const auto *nozzle_opt = floats_of("nozzle_diameter"); + const double nozzle_diameter = (nozzle_opt != nullptr && !nozzle_opt->values.empty()) ? nozzle_opt->values.front() : 0.4; + const bool dual_nozzle = nozzle_opt != nullptr && nozzle_opt->values.size() == 2; + const bool rib_wall = opt_enum("wipe_tower_wall_type", int(WipeTowerWallType::wtwRectangle)) == int(WipeTowerWallType::wtwRib); + const bool smooth_timelapse = opt_enum("timelapse_type", int(TimelapseType::tlTraditional)) == int(TimelapseType::tlSmooth); + const bool wrapping = opt_bool("enable_wrapping_detection"); + // Reasons a tower is printed with no tool change to purge for: the ones that stop + // normalize_fdm_2 clearing enable_prime_tower. Its mixed-filament case is not modelled. + const bool need_wipe_tower = smooth_timelapse || wrapping; + + // A tower printed for one of the reasons above has no tool change to purge for; both + // planners give it the idle depth below and nothing more. + const size_t purge_count = filaments_cnt > 1 ? (dual_nozzle ? filaments_cnt : filaments_cnt - 1) : 0; + + // Type2 purges one volume per tool change. Type1 plans per filament below; here the volume + // only decides whether a tower exists. + double volume = prime_volume * double(purge_count); + if (dual_nozzle) { + // Dual-nozzle printers also purge the filament change length on the tower. + const double length = max_of("filament_change_length", 0.); + const double diameter = max_of("filament_diameter", 1.75); + volume += length * PI * diameter * diameter / 4. * double(filaments_cnt / 2); + } + // Single-extruder multi-material purges the flush matrix instead of the prime volume. + const bool semm_flush = opt_bool("purge_in_prime_tower") && opt_bool("single_extruder_multi_material"); + if (semm_flush) + volume = WipeTower2::estimate_semm_flush_volume(config, filaments_cnt); + + // The Type1 planner wipes each filament's own prime volume after changing to it, in a block + // per adhesiveness category. On a two-nozzle printer the leaving filament is also rammed at + // every nozzle change; the tool order groups filaments by nozzle, so a layer crosses + // (nozzles used - 1) times, charged here to the longest ramming. + std::vector purges; + if (type1 && filaments_cnt > 1) { + const bool saving_mode = opt_enum("prime_volume_mode", int(PrimeVolumeMode::pvmDefault)) == int(PrimeVolumeMode::pvmSaving); + std::set nozzles; + size_t longest_ramming = 0; + for (size_t i = 0; i < filaments_cnt; ++i) { + const unsigned int id = filament_ids[i]; + WipeTower::PurgeEstimate purge; + purge.prime_volume = saving_mode ? 15.f : float(float_at("filament_prime_volume", id, prime_volume)); + purge.category = int_at("filament_adhesiveness_category", id, 0); + purge.filament_diameter = float(float_at("filament_diameter", id, 1.75)); + purges.push_back(purge); + if (dual_nozzle) { + nozzles.insert(int_at("filament_map", id, 1)); + if (float_at("filament_change_length", id, 0.) > float_at("filament_change_length", filament_ids[longest_ramming], 0.)) + longest_ramming = i; + } + } + if (nozzles.size() > 1) + purges[longest_ramming].filament_change_length = float(float_at("filament_change_length", filament_ids[longest_ramming], 0.) * double(nozzles.size() - 1)); + } + + // Both wall types decide this together: over-reserving only wastes bed area, but reporting + // no tower for one that is built collapses the validation hull to a point. + // A tool change is a reason on its own (see the base commit); Type1 already reserves + // per filament, Type2 has only the volume, which can resolve to zero. + const bool has_purge = type1 ? !purges.empty() : volume > EPSILON; + if (!has_purge && filaments_cnt < 2 && !need_wipe_tower) + return footprint; + + const double min_depth = WipeTower::get_limit_depth_by_height(float(max_object_height)); + const float perimeter_width = float(nozzle_diameter) * 1.25f; // Width_To_Nozzle_Ratio + // With nothing to purge, plan_tower_new sizes the tower for wrapping detection or the + // stability minimum; WipeTower2 only knows the latter. + const double idle_depth = (type1 && wrapping && !smooth_timelapse) ? WipeTower::get_wrapping_detection_depth() : min_depth; + if (rib_wall) { + // Both planners square the tower to the purge area and extend the ribs, not the body, + // below the stability minimum. + double side; + if (!purges.empty()) + side = WipeTower::estimate_rib_tower_bbox_side(purges, float(width), float(layer_height), float(nozzle_diameter), float(extra_spacing), float(rib_width), float(extra_rib_length), float(max_object_height)); + else { + const double square = has_purge ? std::sqrt(volume / layer_height * extra_spacing) : idle_depth; + side = WipeTower::rib_footprint_side(float(square), float(square), float(rib_width), float(extra_rib_length), float(max_object_height)); + } + footprint.width = footprint.depth = side; + } else { + double depth; + if (type1) { + // plan_tower_new stretches a short purge stack to the stability minimum behind its + // leading perimeter width. + depth = purges.empty() ? idle_depth : std::max(min_depth + perimeter_width, double(WipeTower::estimate_tower_blocks_depth(purges, float(width), float(layer_height), float(nozzle_diameter), float(extra_spacing)))); + } else { + depth = volume / (layer_height * width); + // The flush volumes already hold the spacing between wipes. + if (!semm_flush) + depth *= extra_spacing; + depth = std::max(min_depth, depth); + } + footprint.width = width; + footprint.depth = depth; + } + + footprint.brim_width = opt_float("prime_tower_brim_width"); + if (footprint.brim_width < 0) + footprint.brim_width = WipeTower::get_auto_brim_by_height(float(max_object_height)); + footprint.brim_width = WipeTower::estimate_brim_real_width(float(footprint.brim_width), float(nozzle_diameter), float(first_layer_height > EPSILON ? first_layer_height : layer_height), !type1); + return footprint; +} + +} // namespace Slic3r diff --git a/src/libslic3r/GCode/WipeTowerEstimate.hpp b/src/libslic3r/GCode/WipeTowerEstimate.hpp new file mode 100644 index 0000000000..387028649b --- /dev/null +++ b/src/libslic3r/GCode/WipeTowerEstimate.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#include "../Polygon.hpp" + +namespace Slic3r { + +class ConfigBase; +enum class WipeTowerType; + +// Pre-slice footprint of the wipe tower, shared by validation (Print), the GUI's placement +// clamp/preview/arrange and the CLI placement. The arithmetic is shared; the inputs below are +// not, so a change to how one caller derives them has to be mirrored in the others. +struct WipeTowerFootprint +{ + double width = 0.; // effective width: equals depth for a rib wall, which squares the tower + double depth = 0.; // 0 when these inputs imply no tower + double height = 0.; // tallest object; drives the stability floor and the auto brim + double brim_width = 0.; // printed width: auto (-1) resolved by height, laid in whole loops +}; + +// Which planner builds the tower: Bambu Lab printers always get Type1, the rest follow +// wipe_tower_type. The rule Print::wipe_tower_type() and the CLI apply, read off the config so +// the GUI and CLI placement can resolve it without a Print. +WipeTowerType resolve_wipe_tower_type(const ConfigBase &config); + +// First-layer outline of an estimated tower in tower-local scaled coordinates, brim excluded: +// the body box, or for a Type2 cone wall the box unioned with the cone's base. The preview, +// the placement margin and validation all take the outline from here so they cannot disagree +// about whether a cone exists. +Polygon estimate_wipe_tower_first_layer_outline(const ConfigBase &config, WipeTowerType tower_type, double width, double depth, double height); + +// filament_ids: 0-based filaments purged on the plate. The config cannot see custom G-code tool +// changes, so ids derived from the model must include them +// (Print::extruders(true)) or a real tower is sized as if it were never built. +// layer_height: thinnest layer the objects are sliced at. The first layer is folded in here. +// +// A raft is deliberately not a reason: normalize_fdm_2 clears enable_prime_tower for a plate +// purging one filament unless smooth timelapse or wrapping detection is on. +WipeTowerFootprint estimate_wipe_tower_footprint(const ConfigBase &config, + WipeTowerType tower_type, + const std::vector &filament_ids, + double layer_height, + double max_object_height); + +} // namespace Slic3r diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp index fcb63c3e96..8247ab757a 100644 --- a/src/libslic3r/GCodeWriter.hpp +++ b/src/libslic3r/GCodeWriter.hpp @@ -165,7 +165,6 @@ public: //BBS - unsigned int m_last_additional_fan_speed; int m_last_bed_temperature; bool m_last_bed_temperature_reached; double m_lifted; diff --git a/src/libslic3r/Int128.hpp b/src/libslic3r/Int128.hpp index f8951f20f9..e55ef64cfb 100644 --- a/src/libslic3r/Int128.hpp +++ b/src/libslic3r/Int128.hpp @@ -57,7 +57,7 @@ #define HAS_INTRINSIC_128_TYPE #endif -#if defined(_MSC_VER) && defined(_WIN64) +#if defined(_MSC_VER) && defined(_M_X64) #include #pragma intrinsic(_mul128) #endif @@ -125,7 +125,6 @@ public: /******************************************** Splitting the 128bit number into two 64bit words *********************************************/ Int128(int64_t lo = 0) : m_lo((uint64_t)lo), m_hi((lo < 0) ? -1 : 0) {} - Int128(const Int128 &val) : m_lo(val.m_lo), m_hi(val.m_hi) {} Int128(const int64_t& hi, const uint64_t& lo) : m_lo(lo), m_hi(hi) {} Int128& operator = (const int64_t &val) diff --git a/src/libslic3r/LayOnFace.cpp b/src/libslic3r/LayOnFace.cpp new file mode 100644 index 0000000000..1112f9d2fe --- /dev/null +++ b/src/libslic3r/LayOnFace.cpp @@ -0,0 +1,221 @@ +#include "LayOnFace.hpp" + +#include "Geometry.hpp" +#include "Geometry/ConvexHull.hpp" +#include "Model.hpp" +#include "TriangleMesh.hpp" + +#include +#include +#include + +namespace Slic3r { + +std::vector lay_on_face_planes(const ModelObject &object, const Transform3d &inst_matrix) +{ + // An object can only rest on its convex hull, so candidate faces are taken from the hull of all model parts. + TriangleMesh ch; + for (const ModelVolume* vol : object.volumes) { + if (vol->type() != ModelVolumeType::MODEL_PART) + continue; + TriangleMesh vol_ch = vol->get_convex_hull(); + vol_ch.transform(vol->get_matrix()); + ch.merge(vol_ch); + } + ch = ch.convex_hull_3d(); + std::vector planes; + + // Following constants are used for discarding too small polygons. + const float minimal_area = 5.f; // in square mm (world coordinates) + const float minimal_side = 1.f; // mm + const float minimal_angle = 1.f; // degree, initial value was 10, but cause bugs + + // Now we'll go through all the facets and append Points of facets sharing the same normal. + // This part is still performed in mesh coordinate system. + const int num_of_facets = ch.facets_count(); + const std::vector face_normals = its_face_normals(ch.its); + const std::vector face_neighbors = its_face_neighbors(ch.its); + std::vector facet_queue(num_of_facets, 0); + std::vector facet_visited(num_of_facets, false); + int facet_queue_cnt = 0; + const stl_normal* normal_ptr = nullptr; + int facet_idx = 0; + while (1) { + // Find next unvisited triangle: + for (; facet_idx < num_of_facets; ++ facet_idx) + if (!facet_visited[facet_idx]) { + facet_queue[facet_queue_cnt ++] = facet_idx; + facet_visited[facet_idx] = true; + normal_ptr = &face_normals[facet_idx]; + planes.emplace_back(); + break; + } + if (facet_idx == num_of_facets) + break; // Everything was visited already + + while (facet_queue_cnt > 0) { + int facet_idx = facet_queue[-- facet_queue_cnt]; + const stl_normal& this_normal = face_normals[facet_idx]; + if (std::abs(this_normal(0) - (*normal_ptr)(0)) < 0.001 && std::abs(this_normal(1) - (*normal_ptr)(1)) < 0.001 && std::abs(this_normal(2) - (*normal_ptr)(2)) < 0.001) { + const Vec3i32 face = ch.its.indices[facet_idx]; + for (int j=0; j<3; ++j) + planes.back().outline.emplace_back(ch.its.vertices[face[j]].cast()); + + facet_visited[facet_idx] = true; + for (int j = 0; j < 3; ++ j) + if (int neighbor_idx = face_neighbors[facet_idx][j]; neighbor_idx >= 0 && ! facet_visited[neighbor_idx]) + facet_queue[facet_queue_cnt ++] = neighbor_idx; + } + } + planes.back().normal = normal_ptr->cast(); + + Pointf3s& verts = planes.back().outline; + // Now we'll transform all the points into world coordinates, so that the areas, angles and distances + // make real sense. + verts = transform(verts, inst_matrix); + + // if this is a just a very small triangle, remove it to speed up further calculations (it would be rejected later anyway): + if (verts.size() == 3 && + ((verts[0] - verts[1]).norm() < minimal_side + || (verts[0] - verts[2]).norm() < minimal_side + || (verts[1] - verts[2]).norm() < minimal_side)) + planes.pop_back(); + } + + // Let's prepare transformation of the normal vector from mesh to instance coordinates. + const Matrix3d normal_matrix = inst_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); + + // Now we'll go through all the polygons, transform the points into xy plane to process them: + for (unsigned int polygon_id=0; polygon_id < planes.size(); ++polygon_id) { + Pointf3s& polygon = planes[polygon_id].outline; + const Vec3d& normal = planes[polygon_id].normal; + + // transform the normal according to the instance matrix: + const Vec3d normal_transformed = normal_matrix * normal; + + // We are going to rotate about z and y to flatten the plane + Eigen::Quaterniond q; + Transform3d& m = planes[polygon_id].to_plane_frame; + m = Transform3d::Identity(); + m.matrix().block(0, 0, 3, 3) = q.setFromTwoVectors(normal_transformed, Vec3d::UnitZ()).toRotationMatrix(); + polygon = transform(polygon, m); + + // Now to remove the inner points. We'll misuse Geometry::convex_hull for that, but since + // it works in fixed point representation, we will rescale the polygon to avoid overflows. + // And yes, it is a nasty thing to do. Whoever has time is free to refactor. + Vec3d bb_size = BoundingBoxf3(polygon).size(); + float sf = std::min(1./bb_size(0), 1./bb_size(1)); + Transform3d tr = Geometry::scale_transform({ sf, sf, 1.f }); + polygon = transform(polygon, tr); + polygon = Slic3r::Geometry::convex_hull(polygon); + polygon = transform(polygon, tr.inverse()); + + // Calculate area of the polygons and discard ones that are too small + float& area = planes[polygon_id].area; + area = 0.f; + for (unsigned int i = 0; i < polygon.size(); i++) // Shoelace formula + area += polygon[i](0)*polygon[i + 1 < polygon.size() ? i + 1 : 0](1) - polygon[i + 1 < polygon.size() ? i + 1 : 0](0)*polygon[i](1); + area = 0.5f * std::abs(area); + + bool discard = false; + if (area < minimal_area) + discard = true; + else { + // We also check the inner angles and discard polygons with angles smaller than the following threshold + const double angle_threshold = ::cos(minimal_angle * (double)PI / 180.0); + + for (unsigned int i = 0; i < polygon.size(); ++i) { + const Vec3d& prec = polygon[(i == 0) ? polygon.size() - 1 : i - 1]; + const Vec3d& curr = polygon[i]; + const Vec3d& next = polygon[(i == polygon.size() - 1) ? 0 : i + 1]; + + if ((prec - curr).normalized().dot((next - curr).normalized()) > angle_threshold) { + discard = true; + break; + } + } + } + + if (discard) { + planes[polygon_id--] = std::move(planes.back()); + planes.pop_back(); + continue; + } + + const Vec3d centroid = std::accumulate(polygon.begin(), polygon.end(), Vec3d(0.0, 0.0, 0.0)) / double(polygon.size()); + planes[polygon_id].center = inst_matrix.inverse() * (m.inverse() * centroid); + } + + std::sort(planes.rbegin(), planes.rend(), [](const LayOnFacePlane& a, const LayOnFacePlane& b) { return a.area < b.area; }); + return planes; +} + +int find_largest_plane(const std::vector &planes) +{ + // The plane frame maps the instance normal to +Z, so the normal's z in instance coordinates is element (2, 2). + auto downward = [](const LayOnFacePlane &plane) { return -plane.to_plane_frame.linear()(2, 2); }; + // Areas are floats from rounded geometry, so faces within 0.1% count as equal. + int best = -1; + for (size_t i = 0; i < planes.size() && planes[i].area >= planes.front().area * (1. - 1e-3); ++i) + if (best < 0 || downward(planes[i]) > downward(planes[best])) + best = int(i); + return best; +} + +int find_plane_by_normal(const std::vector &planes, const Vec3d &direction) +{ + const Vec3d dir = direction.normalized(); + int best = -1; + double best_dot = -2.; + for (size_t i = 0; i < planes.size(); ++i) + if (const double dot = planes[i].normal.dot(dir); dot > best_dot) { + best_dot = dot; + best = int(i); + } + return best; +} + +int find_plane_at_point(const std::vector &planes, const Transform3d &instance_matrix_no_offset, + const Vec3d &point, double tolerance) +{ + const Vec3d instance_point = instance_matrix_no_offset * point; + for (size_t i = 0; i < planes.size(); ++i) { + const Pointf3s &outline = planes[i].outline; + if (outline.empty()) + continue; + const Vec3d p = planes[i].to_plane_frame * instance_point; + // Facets with slightly different normals are merged into one face, so the outline is not exactly flat. + const double z = std::accumulate(outline.begin(), outline.end(), 0., [](double sum, const Vec3d &v) { return sum + v.z(); }) / double(outline.size()); + if (std::abs(p.z() - z) > tolerance) + continue; + // The outline is convex: the point is inside when it is not on both sides of its edges. + bool left = false, right = false; + for (size_t j = 0; j < outline.size(); ++j) { + const Vec2d a = outline[j].head<2>(); + const Vec2d edge = outline[(j + 1) % outline.size()].head<2>() - a; + const double len = edge.norm(); + if (len < EPSILON) + continue; + const double side = cross2(edge, Vec2d(p.head<2>() - a)) / len; + left |= side > tolerance; + right |= side < -tolerance; + } + if (!(left && right)) + return int(i); + } + return -1; +} + +void lay_on_face(ModelObject &object, size_t instance_idx, const Vec3d &normal) +{ + ModelInstance &instance = *object.instances[instance_idx]; + const Geometry::Transformation &trafo = instance.get_transformation(); + // Same rotation as Selection::flattening_rotate(): turn the transformed normal to point down. + const Vec3d tnormal = trafo.get_matrix().matrix().block(0, 0, 3, 3).inverse().transpose() * normal; + const Transform3d rotation = Transform3d(Eigen::Quaterniond().setFromTwoVectors(tnormal, -Vec3d::UnitZ())); + instance.set_transformation(Geometry::Transformation(trafo.get_offset_matrix() * rotation * trafo.get_matrix_no_offset())); + // Drop this instance only: ensure_on_bed() skips instances without auto_drop and measures the first instance. + object.translate_instance(instance_idx, -object.instance_bounding_box(instance_idx).min.z() * Vec3d::UnitZ()); +} + +} // namespace Slic3r diff --git a/src/libslic3r/LayOnFace.hpp b/src/libslic3r/LayOnFace.hpp new file mode 100644 index 0000000000..1a5e92a15e --- /dev/null +++ b/src/libslic3r/LayOnFace.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include "Point.hpp" + +#include + +namespace Slic3r { + +class ModelObject; + +// A face of an object's convex hull that the object can rest on. These are the faces the +// "Lay on Face" gizmo offers and the ones the CLI --ground-* options choose from. +// +// Frames: "object" coordinates have the volume transformations applied but not the instance +// transformation. "Instance" coordinates additionally have the instance rotation, scale and +// mirror applied, but not its offset. +struct LayOnFacePlane +{ + Vec3d normal; // outward unit normal, object coordinates + Vec3d center; // centroid of the outline, object coordinates; on the face's mean plane + float area; // mm², instance coordinates + Pointf3s outline; // convex outline in the plane frame, where the face is horizontal + Transform3d to_plane_frame; // rotation from instance coordinates to the plane frame +}; + +// Candidate faces of the object's model parts, largest first. The instance transformation +// (without offset) is applied before measuring, so faces too small to rest on are dropped +// by their printed size: under 5 mm², a side under 1 mm, or an inner angle under 1°. +std::vector lay_on_face_planes(const ModelObject &object, const Transform3d &instance_matrix_no_offset); + +// Index of the largest plane, or -1 if `planes` is empty. Of planes with the same area, such as +// the top and bottom of a box, the one already facing down the most wins, so flat parts stay put. +int find_largest_plane(const std::vector &planes); + +// Index of the plane whose normal is closest to `direction` (object coordinates), +// or -1 if `planes` is empty. +int find_plane_by_normal(const std::vector &planes, const Vec3d &direction); + +// Index of the plane whose face contains `point` (object coordinates) within `tolerance` mm, or -1 +// if there is none. `instance_matrix_no_offset` is the one the planes were computed with. +int find_plane_at_point(const std::vector &planes, const Transform3d &instance_matrix_no_offset, + const Vec3d &point, double tolerance); + +// Rotates the instance so that `normal` (object coordinates) points down, the same rotation as +// the gizmo applies, then drops the instance so its lowest point is at z = 0. +void lay_on_face(ModelObject &object, size_t instance_idx, const Vec3d &normal); + +} // namespace Slic3r diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 87ad11bcf8..7bdef5a4ff 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -153,6 +153,7 @@ bool Layer::is_perimeter_compatible(const Print& print, const PrintRegion& a, co && config.gap_infill_speed.get_at(print.get_extruder_id(config.outer_wall_filament_id)) == other_config.gap_infill_speed.get_at(print.get_extruder_id(config.outer_wall_filament_id)) && config.filter_out_gap_fill.value == other_config.filter_out_gap_fill.value && config.detect_overhang_wall == other_config.detect_overhang_wall + && config.unsupported_wall_last == other_config.unsupported_wall_last && config.overhang_reverse == other_config.overhang_reverse && config.overhang_reverse_threshold == other_config.overhang_reverse_threshold && config.wall_direction == other_config.wall_direction @@ -187,6 +188,12 @@ void Layer::make_perimeters() { BOOST_LOG_TRIVIAL(trace) << "Generating perimeters for layer " << this->id(); + const auto clear_generated_extrusions = [](LayerRegion *layer_region) { + layer_region->perimeters.clear(); + layer_region->fills.clear(); + layer_region->thin_fills.clear(); + }; + // keep track of regions whose perimeters we have already generated std::vector done(m_regions.size(), false); @@ -217,13 +224,11 @@ void Layer::make_perimeters() if (this_region.gradient_volume_id() != other_region.gradient_volume_id()) continue; if (is_perimeter_compatible(*m_object->print(), this_region, other_region)) - { - other_layerm->perimeters.clear(); - other_layerm->fills.clear(); - other_layerm->thin_fills.clear(); - layerms.push_back(other_layerm); - done[it - m_regions.begin()] = true; - } + { + clear_generated_extrusions(other_layerm); + layerms.push_back(other_layerm); + done[it - m_regions.begin()] = true; + } } if (layerms.size() == 1) { // optimization @@ -231,6 +236,10 @@ void Layer::make_perimeters() (*layerm)->make_perimeters((*layerm)->slices, {*layerm}, &(*layerm)->fill_surfaces, &(*layerm)->fill_no_overlap_expolygons); (*layerm)->fill_expolygons = to_expolygons((*layerm)->fill_surfaces.surfaces); } else { + // Orca: Unlike the compatible regions above, the initiating region has not + // been cleared yet and may contain paths from a previous incompatible run. + clear_generated_extrusions(*layerm); + SurfaceCollection new_slices; // Use the region with highest infill rate, as the make_perimeters() function below decides on the gap fill based on the infill existence. LayerRegion *layerm_config = layerms.front(); @@ -419,6 +428,7 @@ coordf_t Layer::get_sparse_infill_max_void_area() double spacing = flow.scaled_spacing() * (100 - density) / density; switch (pattern) { case ipConcentric: + case ipSpiralInset: case ipRectilinear: case ipLine: case ipGyroid: diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 8a5aa78036..9be6b86139 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -16,6 +16,7 @@ using LayerPtrs = std::vector; class LayerRegion; using LayerRegionPtrs = std::vector; class PrintRegion; +class PrintRegionConfig; class PrintObject; class Print; @@ -200,6 +201,11 @@ public: FillAdaptive::Octree *support_fill_octree, FillLightning::Generator* lightning_generator) const; void make_ironing(); + // Returns the filament id (1-based) the region is ironed with, or -1 when the + // region is not ironed. + static int choose_ironing_extruder(const PrintRegionConfig &cfg, + bool spiral_mode, + bool is_topmost_layer); void make_contour_z(const sla::IndexedMesh &mesh); void export_region_slices_to_svg(const char *path) const; diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index c74df3aa59..94453e18f7 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -30,8 +30,8 @@ bool Line::intersection_infinite(const Line &other, Point* point) const return false; double t1 = cross2(v12, v2) / denom; Vec2d result = (a1 + t1 * v1); - if (result.x() > std::numeric_limits::max() || result.x() < std::numeric_limits::lowest() || - result.y() > std::numeric_limits::max() || result.y() < std::numeric_limits::lowest()) { + if (result.x() > double(std::numeric_limits::max()) || result.x() < double(std::numeric_limits::lowest()) || + result.y() > double(std::numeric_limits::max()) || result.y() < double(std::numeric_limits::lowest())) { // Intersection has at least one of the coordinates much bigger (or smaller) than coord_t maximum value (or minimum). // So it can not be stored into the Point without integer overflows. That could mean that input lines are parallel or near parallel. return false; diff --git a/src/libslic3r/LocalesUtils.cpp b/src/libslic3r/LocalesUtils.cpp index 308752cc62..e727b29b09 100644 --- a/src/libslic3r/LocalesUtils.cpp +++ b/src/libslic3r/LocalesUtils.cpp @@ -3,6 +3,8 @@ #ifdef _WIN32 #include #endif +#include +#include #include #include diff --git a/src/libslic3r/Measure.hpp b/src/libslic3r/Measure.hpp index 2f378f5778..0374c5d4aa 100644 --- a/src/libslic3r/Measure.hpp +++ b/src/libslic3r/Measure.hpp @@ -33,15 +33,6 @@ public: SurfaceFeature(const Vec3d& pt) : m_type{SurfaceFeatureType::Point}, m_pt1{pt} {} - SurfaceFeature(const SurfaceFeature& sf){ - this->clone(sf); - volume = sf.volume; - plane_indices = sf.plane_indices; - world_tran = sf.world_tran; - world_plane_features = sf.world_plane_features; - origin_surface_feature = sf.origin_surface_feature; - } - void clone(const SurfaceFeature &sf) { m_type = sf.get_type(); diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 8b50681370..7497f92abf 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -352,7 +352,7 @@ void segment(CGALMesh& src, std::vector& dst, double smoothing_alpha = //} //else { - dst.emplace_back(std::move(CGALMesh(out))); + dst.emplace_back(CGALMesh(out)); } } //if (mesh_merged.is_empty() == false) { @@ -371,7 +371,7 @@ std::vector segment(const TriangleMesh& src, double smoothing_alph std::vector out_meshes; for (auto& outf_cgal_mesh: out_cgal_meshes) { - out_meshes.emplace_back(std::move(cgal_to_triangle_mesh(outf_cgal_mesh.m))); + out_meshes.emplace_back(cgal_to_triangle_mesh(outf_cgal_mesh.m)); } return out_meshes; diff --git a/src/libslic3r/MinimumSpanningTree.cpp b/src/libslic3r/MinimumSpanningTree.cpp index ff8fe6e5dd..88555e70ee 100644 --- a/src/libslic3r/MinimumSpanningTree.cpp +++ b/src/libslic3r/MinimumSpanningTree.cpp @@ -60,10 +60,15 @@ auto MinimumSpanningTree::prim(std::vector vertices) const -> AdjacencyGr //This search is O(V) right now, which can be made down to O(log(V)). This reduces the overall time complexity from O(V*V) to O(V*log(E)). //However that requires an implementation of a heap that supports the decreaseKey operation, which is not in the std library. //TODO: Implement this? + // Break equal-distance ties on coordinates: the map is keyed by address, so its + // iteration order (and therefore the first minimum) would otherwise depend on where + // the vertices were allocated. using MapValue = std::pair; const auto closest = std::min_element(smallest_distance.begin(), smallest_distance.end(), [](const MapValue& a, const MapValue& b) { - return a.second < b.second; + if (a.second != b.second) + return a.second < b.second; + return *a.first < *b.first; }); //Add this point to the graph and remove it from the candidates. diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 600c46e7f5..209ccdafa2 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -108,6 +108,8 @@ Model& Model::assign_copy(const Model &rhs) this->md_value = rhs.md_value; this->texture_mesh = rhs.texture_mesh; + this->cad_recipe = rhs.cad_recipe; + return *this; } @@ -152,6 +154,7 @@ Model& Model::assign_copy(Model &&rhs) rhs.model_info.reset(); this->profile_info = rhs.profile_info; rhs.profile_info.reset(); + this->cad_recipe = std::move(rhs.cad_recipe); return *this; } @@ -261,7 +264,7 @@ static void add_textured_mesh_to_model(Model& model, const TexturedMesh& tex_mes its_remove_degenerate_faces(its); its_compactify_vertices(its); - model.add_object(object_name.c_str(), input_file.c_str(), std::move(TriangleMesh(std::move(its)))); + model.add_object(object_name.c_str(), input_file.c_str(), TriangleMesh(std::move(its))); } Model Model::read_from_file(const std::string& input_file, @@ -877,7 +880,7 @@ void Model::convert_multipart_object(unsigned int max_extruders) // Revert the centering operation. trafo_volume.set_offset(trafo_volume.get_offset() - o->origin_translation); int counter = 1; - auto copy_volume = [o, v, max_extruders, &counter, &extruder_counter](ModelVolume *new_v) { + auto copy_volume = [o, v, &counter](ModelVolume *new_v) { assert(new_v != nullptr); new_v->name = (counter > 1) ? o->name + "_" + std::to_string(counter++) : o->name; //BBS: Use extruder priority: volumn > object > default @@ -3598,6 +3601,15 @@ void FacetsAnnotation::shift_states_above(const ModelVolume &mv, EnforcerBlocker this->set(selector); } +void FacetsAnnotation::remap_states(const ModelVolume &mv, const EnforcerBlockerStateMap &state_map) +{ + if (empty()) return; + TriangleSelector selector(mv.mesh()); + selector.deserialize(m_data, false); + selector.remap_triangle_state(state_map); + this->set(selector); +} + void FacetsAnnotation::set_enforcer_block_type_limit(const ModelVolume &mv, EnforcerBlockerType max_type, EnforcerBlockerType to_delete_filament, @@ -3862,6 +3874,43 @@ bool model_has_advanced_features(const Model &model) return false; } +void remap_model_filament_slots(Model &model, const std::map &slot_relocations) +{ + if (slot_relocations.empty()) + return; + + // Paint states and the object/volume "extruder" configs store one-based slot numbers + // (see Sidebar::on_action_add_filament's insertion remap for the same encoding). + std::map one_based_slots; + for (const auto &[from, to] : slot_relocations) + one_based_slots.emplace(from + 1, to + 1); + + EnforcerBlockerStateMap paint_state_map; + for (size_t state = 0; state < paint_state_map.size(); ++state) + paint_state_map[state] = EnforcerBlockerType(state); + for (const auto &[one_based_from, one_based_to] : one_based_slots) { + assert(one_based_from >= 0 && size_t(one_based_from) < paint_state_map.size()); + assert(one_based_to > 0 && size_t(one_based_to) < paint_state_map.size()); + paint_state_map[size_t(one_based_from)] = EnforcerBlockerType(one_based_to); + } + + auto remap_extruder_config = [&one_based_slots](ModelConfig &config) -> bool { + const auto it = config.has("extruder") ? one_based_slots.find(config.extruder()) : one_based_slots.end(); + if (it == one_based_slots.end()) + return false; + config.set("extruder", it->second); + return true; + }; + + for (ModelObject *object : model.objects) { + remap_extruder_config(object->config); + for (ModelVolume *volume : object->volumes) { + remap_extruder_config(volume->config); + volume->mmu_segmentation_facets.remap_states(*volume, paint_state_map); + } + } +} + #ifndef NDEBUG // Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique. void check_model_ids_validity(const Model &model) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 6834c7a59b..815b93c362 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -745,6 +745,10 @@ public: // Shift painted filament indices >= threshold by delta. Used when a physical filament is // inserted ahead of existing slots (mixed-color slots are kept at the end of the list). void shift_states_above(const ModelVolume &mv, EnforcerBlockerType threshold, int delta); + // Relabel painted filament indices according to state_map (old state value -> new state + // value; untouched states keep their identity). Used when published-3MF import relocates + // mixed-filament definitions onto new slot numbers. + void remap_states(const ModelVolume &mv, const EnforcerBlockerStateMap &state_map); indexed_triangle_set get_facets_strict(const ModelVolume& mv, EnforcerBlockerType type) const; bool has_facets(const ModelVolume& mv, EnforcerBlockerType type) const; bool empty() const { return m_data.triangles_to_split.empty(); } @@ -1565,6 +1569,10 @@ public: std::vector md_name; std::vector md_value; + // Opaque parametric CAD recipe (CadDocument::serialize_recipe()), round-tripped through + // the 3MF as Metadata/orca_cad.bin. Empty for non-CAD projects. + std::string cad_recipe; + void SetDesigner(std::string designer, std::string designer_user_id) { if (design_info == nullptr) { design_info = std::make_shared(); @@ -1790,6 +1798,13 @@ bool model_has_multi_part_objects(const Model &model); // If the model has advanced features, then it cannot be processed in simple mode. bool model_has_advanced_features(const Model &model); +// Remap the model's filament-slot references after a published-3MF import relocated +// mixed-filament definitions onto new slot numbers: object/volume "extruder" configs and +// multi-material color-painting states (paint state stores the one-based slot number). +// slot_relocations maps the author's zero-based slot number to its final zero-based slot; +// entries are applied simultaneously (no chained lookups), untouched slots keep everything. +void remap_model_filament_slots(Model &model, const std::map &slot_relocations); + #ifndef NDEBUG // Verify whether the IDs of Model / ModelObject / ModelVolume / ModelInstance / ModelMaterial are valid and unique. void check_model_ids_validity(const Model &model); diff --git a/src/libslic3r/MultiPoint.hpp b/src/libslic3r/MultiPoint.hpp index de386b501c..096230d22c 100644 --- a/src/libslic3r/MultiPoint.hpp +++ b/src/libslic3r/MultiPoint.hpp @@ -24,6 +24,7 @@ public: explicit MultiPoint(const Points &_points) : points(_points) {} MultiPoint& operator=(const MultiPoint &other) { points = other.points; return *this; } MultiPoint& operator=(MultiPoint &&other) { points = std::move(other.points); return *this; } + virtual ~MultiPoint() = default; void scale(double factor); void scale(double factor_x, double factor_y); void translate(double x, double y) { this->translate(Point(coord_t(x), coord_t(y))); } diff --git a/src/libslic3r/ObjectID.hpp b/src/libslic3r/ObjectID.hpp index f2697b74f5..56042bbaa3 100644 --- a/src/libslic3r/ObjectID.hpp +++ b/src/libslic3r/ObjectID.hpp @@ -170,6 +170,10 @@ public: this->m_check_sum = rhs.check_sum(); this->m_connectors_cnt = rhs.connectors_cnt(); } + // A user-declared copy assignment or destructor deprecates the implicitly generated + // copy constructor, and this class has both, so declare it rather than rely on it. + CutObjectBase(const CutObjectBase &) = default; + CutObjectBase &operator=(const CutObjectBase &other) { this->copy(other); diff --git a/src/libslic3r/Orient.cpp b/src/libslic3r/Orient.cpp index ae1954087d..7d54048176 100644 --- a/src/libslic3r/Orient.cpp +++ b/src/libslic3r/Orient.cpp @@ -39,7 +39,6 @@ namespace orientation { float height_to_bottom_hull_ratio = 0; // affects stability, the lower the better float unprintability = 0; Eigen::VectorXf areas_cooling; - CostItems(CostItems const & other) = default; CostItems() = default; static std::string field_names() { return " overhang, bottom, bothull, contour, A_laf, A_prj, unprintability"; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 659a3a7038..9f6ec856ba 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -408,7 +408,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p ExtrusionRole role = is_external ? erExternalPerimeter : erPerimeter; const bool is_contour = !extrusion->is_closed || pg_extrusion.is_contour; - apply_fuzzy_skin(extrusion, perimeter_generator, is_contour); + apply_fuzzy_skin(extrusion, perimeter_generator, is_contour, extrusion->is_closed); ExtrusionPaths paths; // detect overhanging/bridging perimeters @@ -550,6 +550,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (!paths.empty()) { if (extrusion->is_closed) { ExtrusionLoop extrusion_loop(std::move(paths), pg_extrusion.is_contour ? elrDefault : elrHole); + extrusion_loop.inset_idx = extrusion->inset_idx; if ((perimeter_generator.config->wall_direction == WallDirection::CounterClockwise) == (pg_extrusion.is_contour || pg_extrusions.size() == 2)) extrusion_loop.make_counter_clockwise(); @@ -1318,6 +1319,73 @@ static void reorient_perimeters(ExtrusionEntityCollection &entities, bool steep_ } } +// A loop made of nothing but overhang paths lies entirely off the lower layer. +static bool is_unsupported_loop(const ExtrusionEntity *entity) +{ + if (!entity->is_loop()) + return false; + const ExtrusionPaths &paths = static_cast(entity)->paths; + return !paths.empty() && std::all_of(paths.begin(), paths.end(), + [](const ExtrusionPath &path) { return path.role() == erOverhangPerimeter; }); +} + +// ORCA: A wall loop with nothing under it has nothing to lean on, so whatever the configured wall +// sequence it is extruded after the loops that anchor it, innermost first. A loop that runs alongside +// an anchored one belongs to the same wall stack and keeps its place ahead of the infill, which needs +// it as an anchor; one that touches nothing has only that infill to rest on, so it is flagged for the +// G-code writer to hold it back until the infill is down. +static void defer_unsupported_loops(const PerimeterGenerator &perimeter_generator, ExtrusionEntityCollection &entities) +{ + if (!perimeter_generator.config->unsupported_wall_last) + return; + + ExtrusionEntitiesPtr &src = entities.entities; + auto first_deferred = std::stable_partition(src.begin(), src.end(), + [](const ExtrusionEntity *entity) { return !is_unsupported_loop(entity); }); + if (first_deferred == src.end()) + return; + + std::stable_sort(first_deferred, src.end(), + [](const ExtrusionEntity *lhs, const ExtrusionEntity *rhs) { return lhs->inset_idx > rhs->inset_idx; }); + + auto collect_lines = [](const ExtrusionEntity *entity, Lines &out) { + Polylines polylines; + entity->collect_polylines(polylines); + append(out, to_lines(polylines)); + }; + + Lines anchored; + for (auto it = src.begin(); it != first_deferred; ++it) + collect_lines(*it, anchored); + + std::vector unattached; + for (auto it = first_deferred; it != src.end(); ++it) + unattached.emplace_back(static_cast(*it)); + + // A loop leaning on a loop that is itself anchored is anchored as well, so spread outwards from + // the anchored loops until no unsupported loop is left touching what was reached. + const double touch_distance = 1.5 * std::max(perimeter_generator.ext_perimeter_flow.scaled_spacing(), + perimeter_generator.perimeter_flow.scaled_spacing()); + while (!anchored.empty()) { + AABBTreeLines::LinesDistancer distancer{std::move(anchored)}; + anchored.clear(); + for (ExtrusionLoop *&loop : unattached) { + if (loop == nullptr) + continue; + const Points points = loop->as_polyline().points; + if (std::any_of(points.begin(), points.end(), + [&distancer, touch_distance](const Point &point) { return distancer.distance_from_lines(point) < touch_distance; })) { + collect_lines(loop, anchored); + loop = nullptr; + } + } + } + + for (ExtrusionLoop *loop : unattached) + if (loop != nullptr) + loop->print_after_infill = true; +} + void PerimeterGenerator::process_classic() { group_region_by_fuzzify(*this); @@ -1804,6 +1872,8 @@ void PerimeterGenerator::process_classic() } } + defer_unsupported_loops(*this, entities); + // append perimeters for this slice as a collection if (! entities.empty()) this->loops->append(entities); @@ -2127,7 +2197,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim bridgeable_filtered = union_ex(offset_ex(remaining, perimeter_spacing), bridgeable_filtered); bridgeable_filtered = offset_ex(bridgeable_filtered, -perimeter_spacing); bridgeable_filtered = diff_ex(bridgeable_filtered, remaining, ApplySafetyOffset::Yes); - bridgeable_filtered = opening_ex(bridgeable_filtered, perimeter_spacing); // filter noise from the diff_ex + bridgeable_filtered = opening_ex(bridgeable_filtered, ext_perimeter_width / 2); // filter noise from the diff_ex bridgeable_filtered = offset_ex(bridgeable_filtered, perimeter_spacing); // restore the size to the original bridgeable area // Safety measure: Keep the bridge mask from intruding deeper into the // supported anchor region than the explicit anchor overlap. @@ -2742,6 +2812,7 @@ void PerimeterGenerator::process_arachne() reorient_perimeters(extrusion_coll, steep_overhang_contour, steep_overhang_hole, this->config->overhang_reverse_internal_only); } + defer_unsupported_loops(*this, extrusion_coll); this->loops->append(extrusion_coll); } diff --git a/src/libslic3r/Point.hpp b/src/libslic3r/Point.hpp index 039f361eaa..21e5355fc5 100644 --- a/src/libslic3r/Point.hpp +++ b/src/libslic3r/Point.hpp @@ -195,7 +195,6 @@ public: Point(int64_t x, int32_t y) : Vec2crd(coord_t(x), coord_t(y)) {} Point(int32_t x, int64_t y) : Vec2crd(coord_t(x), coord_t(y)) {} Point(double x, double y) : Vec2crd(coord_t(std::round(x)), coord_t(std::round(y))) {} - Point(const Point &rhs) { *this = rhs; } explicit Point(const Vec2d& rhs) : Vec2crd(coord_t(std::round(rhs.x())), coord_t(std::round(rhs.y()))) {} // This constructor allows you to construct Point from Eigen expressions // This constructor has to be implicit (non-explicit) to allow implicit conversion from Eigen expressions. @@ -278,7 +277,6 @@ public: Point3(int32_t x, int32_t y, int32_t z = 0) : Vec3crd(coord_t(x), coord_t(y), coord_t(z)) {} Point3(int64_t x, int64_t y, int64_t z = 0) : Vec3crd(coord_t(x), coord_t(y), coord_t(z)) {} Point3(double x, double y, double z = 0.0) : Vec3crd(coord_t(std::round(x)), coord_t(std::round(y)), coord_t(std::round(z))) {} - Point3(const Point3 &rhs) { *this = rhs; } explicit Point3(const Vec2crd& vec2crd, coord_t z = 0) : Vec3crd(vec2crd.x(), vec2crd.y(), z) {} explicit Point3(const Vec3crd &vec3crd) : Vec3crd(vec3crd) {} // This constructor allows you to construct Point from Eigen expressions diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b0eb40ef75..214ef229df 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -546,7 +546,7 @@ std::string generate_preset_setting_id(const std::string& vendor, const std::str return ""; // Dedicated namespace for preset setting_ids, distinct from the cloud per-user - // namespace (OrcaCloudServiceAgent). Keep in sync with scripts/assign_vendor_setting_ids.py; + // namespace (OrcaCloudServiceAgent). Keep in sync with scripts/orca_profile_tool.py; // never change this constant. static const boost::uuids::uuid vendor_namespace = boost::uuids::string_generator()("c1f4d9e2-7a3b-5c8d-9e0f-1a2b3c4d5e6f"); @@ -868,6 +868,20 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre return is_compatible_with_printer(preset, active_printer, &config); } +// ORCA: see the header. The CLI resolves --load-settings into bare DynamicPrintConfigs and has no +// Preset objects to hand; without this it would have to reimplement the policy or build the shells +// at every call site. +bool is_compatible_with_printer(const DynamicPrintConfig &preset_config, Preset::Type preset_type, + const DynamicPrintConfig &printer_config, const std::string &printer_name) +{ + Preset preset(preset_type, std::string("__compat_check")); + preset.config = preset_config; + Preset printer(Preset::TYPE_PRINTER, printer_name); + printer.config = printer_config; + return is_compatible_with_printer(PresetWithVendorProfile(preset, nullptr), + PresetWithVendorProfile(printer, nullptr)); +} + void Preset::set_visible_from_appconfig(const AppConfig &app_config) { //BBS: add config related log @@ -984,15 +998,19 @@ BedType Preset::get_default_bed_type(PresetBundle* preset_bundle) if (config.has("default_bed_type") && !config.opt_string("default_bed_type").empty()) { try { std::string str_bed_type = config.opt_string("default_bed_type"); - - // Try parsing as integer first (legacy format) + BedType bed_type; + if (ConfigOptionEnum::from_string(str_bed_type, bed_type) && + bed_type > btDefault && bed_type < btCount) { + return bed_type; + } + + // Try parsing as integer (legacy format) int bed_type_value = atoi(str_bed_type.c_str()); - if (bed_type_value > 0) { + if (bed_type_value > 0 && bed_type_value < BedType::btCount) { return BedType(bed_type_value); } - else { - BOOST_LOG_TRIVIAL(error) << "default_bed_type: invalid bed type: " << str_bed_type; - } + + BOOST_LOG_TRIVIAL(error) << "default_bed_type: invalid bed type: " << str_bed_type; return BedType::btPEI; } catch(...) { @@ -1041,6 +1059,7 @@ static std::vector s_Preset_print_options{ "reduce_crossing_wall", "detect_thin_wall", "detect_overhang_wall", + "unsupported_wall_last", "overhang_reverse", "overhang_reverse_threshold", "overhang_reverse_internal_only", @@ -1265,6 +1284,8 @@ static std::vector s_Preset_print_options{ "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", + "wipe_inward", + "wipe_inward_distance", "wipe_before_external_loop", "bridge_density", "internal_bridge_density", @@ -1301,6 +1322,8 @@ static std::vector s_Preset_print_options{ "wipe_tower_extra_flow", "single_extruder_multi_material_priming", "toolchange_ordering", + "toolchange_cyclic_order", + "toolchange_cyclic_first_layer", "wipe_tower_rotation_angle", "tree_support_branch_distance_organic", "tree_support_branch_diameter_organic", @@ -1426,7 +1449,7 @@ static std::vector s_Preset_printer_options { "gcode_skip_config_block", "fan_kickstart", "part_cooling_fan_min_pwm", "fan_speedup_time", "fan_speedup_overhangs", "single_extruder_multi_material", "manual_filament_change", "file_start_gcode", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "printing_by_object_gcode", "layer_change_gcode", "time_lapse_gcode", "wrapping_detection_gcode", "change_filament_gcode", "change_extrusion_role_gcode", "printer_model", "printer_variant", "printer_extruder_id", "printer_extruder_variant", "extruder_variant_list", "default_nozzle_volume_type", - "printable_height", "extruder_printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "printable_height", "extruder_printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "extruder_clearance_dist_to_rod", "nozzle_height", "master_extruder_id", "default_print_profile", "inherits", "silent_mode", @@ -1650,7 +1673,7 @@ std::string PresetCollection::canonical_preset_name(const std::string &name, con void PresetCollection::load_presets( const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule substitution_rule, - std::function preset_loaded_fn, const PresetOrigin &load_origin) + std::function preset_loaded_fn, const PresetOrigin &load_origin, bool read_only) { // Don't use boost::filesystem::canonical() on Windows, it is broken in regard to reparse points, // see https://github.com/prusa3d/PrusaSlicer/issues/732 @@ -1659,7 +1682,7 @@ void PresetCollection::load_presets( // Load custom roots first if (fs::exists(dir / "base")) { - load_presets(dir.string(), "base", substitutions, substitution_rule, nullptr, resolved_origin); + load_presets(dir.string(), "base", substitutions, substitution_rule, nullptr, resolved_origin, read_only); } //BBS: add config related logs @@ -1667,7 +1690,8 @@ void PresetCollection::load_presets( //BBS do not parse folder if not exists m_dir_path = dir.string(); if (!fs::exists(dir)) { - fs::create_directory(dir); + if (!read_only) + fs::create_directory(dir); return; } @@ -1717,10 +1741,10 @@ void PresetCollection::load_presets( substitutions.push_back({ preset.name, m_type, PresetConfigSubstitutions::Source::UserFile, preset.file, std::move(config_substitutions) }); if (!reason.empty()) { fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); BOOST_LOG_TRIVIAL(error) << boost::format("parse config %1% failed")%preset.file; ++m_errors; @@ -1791,7 +1815,8 @@ void PresetCollection::load_presets( size_t at_pos = name.find('@'); if (at_pos != std::string::npos && at_pos + 1 < name.length()) { compatible_printers->values.push_back(name.substr(at_pos + 1)); - preset.save(nullptr); + if (!read_only) + preset.save(nullptr); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " added compatible_printers for preset: " << name; } } @@ -1809,10 +1834,10 @@ void PresetCollection::load_presets( ++m_errors; BOOST_LOG_TRIVIAL(error) << boost::format("The user-config cannot be loaded: %1%. Reason: %2%")%preset.file %err.what(); fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); //throw Slic3r::RuntimeError(std::string("The selected preset cannot be loaded: ") + preset.file + "\n\tReason: " + err.what()); } catch (const std::runtime_error &err) { @@ -1820,10 +1845,10 @@ void PresetCollection::load_presets( BOOST_LOG_TRIVIAL(error) << boost::format("Failed loading the user-config file: %1%. Reason: %2%")%preset.file %err.what(); //throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + preset.file + "\n\tReason: " + err.what()); fs::path file_path(preset.file); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); file_path.replace_extension(".info"); - if (fs::exists(file_path)) + if (!read_only && fs::exists(file_path)) fs::remove(file_path); } @@ -3066,6 +3091,75 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det } } +// A detached standalone preset for the Full Publish receiver: create a user preset holding +// the full resolved filament config (no inheritance, no vendor/alias links), parentless. +// Note: universal printer compatibility is not enforced here - callers apply +// make_publish_universal() to the config before handing it over when they need it. +// Mirrors save_current_preset(detach=true)'s creation branch but does not force-select or +// diff against a parent; the caller decides whether to select it. +// The published entry's filament_id is forwarded so user bases keep their stable +// material grouping (get_filament_presets() groups user bases by filament_id). +// The copy is a project-embedded preset: it lives inside the loaded project only +// (serialized into the saved .3mf, restored by load_project_embedded_presets) and +// never touches the user's library directory; Preset::save() early-returns for +// embedded presets, so persistence is skipped here too. +// Returns the final (uniquified) name; on collision "" -> " (Published)" -> +// " (Published 2)" ... +std::string PresetCollection::add_detached_preset(const std::string &name_base, DynamicPrintConfig config, + const std::string &filament_id) +{ + if (name_base.empty()) + return std::string(); + Preset stored(m_type, name_base); + stored.config = std::move(config); + stored.filament_id = filament_id; + + // Uniquify verbatim; only on collision append " (Published)" then " (Published 2)". + const std::string base_name = name_base; + std::string final_name = base_name; + auto exists = [this](const std::string &candidate) -> bool { + const auto it = this->find_preset_internal(candidate); + return it != m_presets.end() && it->name == candidate; + }; + if (exists(final_name)) { + final_name = base_name + " (Published)"; + for (int i = 2; exists(final_name); ++i) + final_name = base_name + " (Published " + std::to_string(i) + ")"; + } + + // Creation branch of save_current_preset(detach=true), without its selection side + // effects or project-embedded path. + lock(); + const auto it = this->find_preset_internal(final_name); + if (m_presets.begin() + m_idx_selected >= it) + ++m_idx_selected; + Preset &preset = *m_presets.insert(it, stored); + preset.name = final_name; + preset.vendor = nullptr; + preset.alias.clear(); + preset.renamed_from.clear(); + preset.m_excluded_from.clear(); + preset.setting_id.clear(); + preset.inherits().clear(); + preset.version = Semver::parse(SoftFever_VERSION).value_or(Semver()); + preset.is_default = false; + preset.is_system = false; + preset.is_external = false; + preset.bundle_id.clear(); + preset.file = this->path_for_preset(preset); + preset.is_visible = true; + preset.is_project_embedded = true; + if (m_type == Preset::TYPE_PRINT) + preset.config.option("print_settings_id", true)->value = final_name; + else if (m_type == Preset::TYPE_FILAMENT) + preset.config.option("filament_settings_id", true)->values[0] = final_name; + else if (m_type == Preset::TYPE_PRINTER) + preset.config.option("printer_settings_id", true)->value = final_name; + unlock(); + + return final_name; +} + bool PresetCollection::delete_current_preset() { Preset &selected = this->get_selected_preset(); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index c9b3197a6f..c66518e29d 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -93,8 +93,8 @@ class PresetBundle; // Deterministic preset setting_id: uuid5(vendor/type/name) -> 16 base62 chars. // Pure function of a system preset's identity, so the value can be assigned by -// scripts/assign_vendor_setting_ids.py and recomputed here when a profile ships -// without it. MUST stay byte-identical to scripts/assign_vendor_setting_ids.py. +// scripts/orca_profile_tool.py and recomputed here when a profile ships without it. +// MUST stay byte-identical to scripts/orca_profile_tool.py. // This is NOT the per-user cloud-sync setting_id // (OrcaCloudServiceAgent::generate_uuid_for_setting_id) - do not conflate them. std::string generate_preset_setting_id(const std::string& vendor, @@ -459,6 +459,11 @@ protected: bool is_compatible_with_print (const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer); bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config); bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer); +// ORCA: same check for callers that hold raw configs rather than Presets (the CLI). Wraps them in +// throwaway Preset shells and delegates, so the compatibility policy -- including the fail-open on a +// malformed compatible_printers_condition -- lives in one place for the GUI and the CLI alike. +bool is_compatible_with_printer(const DynamicPrintConfig &preset_config, Preset::Type preset_type, + const DynamicPrintConfig &printer_config, const std::string &printer_name); // Where a preset is being loaded from. `Auto` lets load_presets() infer from the directory path. struct PresetOrigin { @@ -558,7 +563,7 @@ public: void add_default_preset(const std::vector &keys, const Slic3r::StaticPrintConfig &defaults, const std::string &preset_name); // Load ini files of the particular type from the provided directory path. - void load_presets(const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule rule, std::function preset_loaded_fn = nullptr, const PresetOrigin &load_origin = PresetOrigin()); + void load_presets(const std::string &dir_path, const std::string &subdir, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule rule, std::function preset_loaded_fn = nullptr, const PresetOrigin &load_origin = PresetOrigin(), bool read_only = false); //BBS: update user presets directory void update_user_presets_directory(const std::string& dir_path, const std::string& type); @@ -631,6 +636,22 @@ public: // All presets are marked as not modified and the new preset is activated. //BBS: add project embedded preset logic void save_current_preset(const std::string &new_name, bool detach = false, bool save_to_project = false, Preset* _curr_preset = nullptr); + // Insert a standalone user preset holding the full resolved config (no inheritance, + // no vendor links): the libslic3r equivalent of "Detach from parent". Takes a + // resolved config, clears parent/vendor/alias metadata, stamps filament_settings_id. + // Unlike save_current_preset it does not force-select or diff against a parent. + // Used by the published-3MF Full Publish path. The optional filament_id seeds the + // preset's stable material grouping (get_filament_presets groups user bases by + // filament_id); the published entry's filament_id is forwarded so the copy keeps + // the author's grouping. + // The copy is a project-embedded preset ("Preset Inside Project"): it lives inside + // the loaded project only, is serialized into the saved .3mf via + // get_current_project_embedded_presets(), and is never written to the user's + // library directory. + // Returns the final (uniquified) name; on collision the suffix rule is: + // "" -> " (Published)" -> " (Published 2)" ... + std::string add_detached_preset(const std::string &name_base, DynamicPrintConfig config, + const std::string &filament_id = std::string()); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. @@ -840,13 +861,12 @@ public: protected: PresetCollection() = default; - // Copy constructor and copy operators are not to be used from outside PresetBundle, - // as the Profile::vendor points to an instance of VendorProfile stored at parent PresetBundle! - PresetCollection(const PresetCollection &other) = default; - //BBS: add operator= logic insteadof default + // Deleted by the std::recursive_mutex member. PresetBundle copies by assignment. + PresetCollection(const PresetCollection &other) = delete; + //BBS: hand-written because m_mutex cannot be copy-assigned. PresetCollection& operator=(const PresetCollection &other); - // After copying a collection with the default operators above, call this function - // to adjust Profile::vendor pointers. + // Copying leaves every Preset::vendor pointing into the source bundle's vendor map. + // This re-points them at the matching entries in vendors. void update_vendor_ptrs_after_copy(const VendorMap &vendors); // Select a preset, if it exists. If it does not exist, select an invalid (-1) index. @@ -984,7 +1004,8 @@ public: bool only_default_printers() const; private: PrinterPresetCollection() = default; - PrinterPresetCollection(const PrinterPresetCollection &other) = default; + // Deleted along with the base copy constructor. + PrinterPresetCollection(const PrinterPresetCollection &other) = delete; PrinterPresetCollection& operator=(const PrinterPresetCollection &other) = default; friend class PresetBundle; diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f92bb354ee..dc731b63c4 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -7,16 +7,18 @@ #include "PresetCacheFormat.hpp" #include "PrintConfig.hpp" +#include "PublishSettings.hpp" #include "FilamentMixer.hpp" #include "libslic3r.h" #include "I18N.hpp" #include "Utils.hpp" #include "LocalesUtils.hpp" #include "Model.hpp" +#include "TriangleSelector.hpp" #include "libslic3r_version.h" #include -#include +#include #include #include #include @@ -45,6 +47,10 @@ namespace Slic3r { +// Project-level options imported from a loaded 3MF into project_config. s_project_options_published +// below is the reduced subset that crosses over in "published" 3MF mode; keep both in sync. +// s_project_options_published additionally carries wipe_tower_rotation_angle, which normal +// loads do not import (it is not listed here): published-only plate geometry. static std::vector s_project_options { "flush_volumes_vector", "flush_volumes_matrix", @@ -85,6 +91,21 @@ static std::vector s_project_options { "filament_mixed_gradient_per_part" }; +// Project options applied when loading a "published" 3MF project: s_project_options minus the +// filament/purge keys, plus wipe_tower_rotation_angle (plate geometry that only published +// loads import today). A published file must not port the author's filament data +// (colors, colour types, filament/map/AMS slot state, purge/prime/flush volumes, nozzle +// volume types, filament switcher state) to the receiver's project_config, which feeds the +// scene colors, AMS slot colors and purge data. Only the plate/bed geometry keys cross over; +// normal (non-published) 3MF loads keep importing the author's flush data via s_project_options. +// +// KEEP IN SYNC with s_project_options above: when a new project option is added there, decide +// here whether it is plate/bed geometry (add it to this list) or filament/purge/mapping/device +// state (it must NOT be added). curr_bed_type is deliberately NOT in this list: the receiver +// keeps its own bed type when loading a published project. The published-mode project_config +// assertions in tests/libslic3r/test_preset_bundle_loading.cpp guard both directions. +static std::vector s_project_options_published{"wipe_tower_x", "wipe_tower_y", "wipe_tower_rotation_angle"}; + //Orca: add custom as default const char *PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom"; const char *PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; @@ -453,6 +474,170 @@ PresetBundle::PresetBundle() this->project_config.apply_only(FullPrintConfig::defaults(), s_project_options); } +bool PresetBundle::resolve_preset_config(DynamicPrintConfig &config, Preset::Type type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest) +{ + if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) + compatibility_rule = ForwardCompatibilitySubstitutionRule::EnableSilent; + else if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem) + compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; + + auto collection_for_type = [](const PresetBundle &bundle, Preset::Type preset_type) -> const PresetCollection * { + switch (preset_type) { + case Preset::TYPE_PRINT: return &bundle.prints; + case Preset::TYPE_FILAMENT: return &bundle.filaments; + case Preset::TYPE_PRINTER: return &bundle.printers; + default: return nullptr; + } + }; + + const PresetCollection *collection = collection_for_type(*this, type); + if (collection == nullptr) { + error = "Unsupported preset type"; + return false; + } + + const boost::filesystem::path source_path = boost::filesystem::absolute(source_file).lexically_normal(); + auto find_loaded = [&](const PresetBundle &bundle) -> const Preset * { + const PresetCollection *loaded_collection = collection_for_type(bundle, type); + const Preset *resolved = nullptr; + for (const Preset &preset : loaded_collection->get_presets()) { + if (preset.file.empty()) + continue; + + boost::system::error_code ec; + const bool same_file = boost::filesystem::equivalent(source_path, boost::filesystem::path(preset.file), ec); + if (ec || !same_file) + continue; + if (resolved != nullptr) { + error = "Preset identity is ambiguous"; + return nullptr; + } + resolved = &preset; + } + return resolved; + }; + + if (const Preset *resolved = find_loaded(*this)) { + config = resolved->config; + error.clear(); + return true; + } + if (error == "Preset identity is ambiguous") + return false; + if (!allow_source_manifest) { + error = "Preset was not found in the loaded bundle"; + return false; + } + + // A manifest-backed source file can be resolved without requiring the vendor + // to have been copied into data_dir()/system. Find the nearest ancestor whose + // sibling manifest names it, then let the canonical vendor loader flatten the + // complete tree (including nested sub_path entries and library inheritance). + for (boost::filesystem::path vendor_dir = source_path.parent_path(); !vendor_dir.empty(); vendor_dir = vendor_dir.parent_path()) { + const std::string vendor_id = vendor_dir.filename().string(); + if (vendor_id.empty()) + continue; + const boost::filesystem::path root_dir = vendor_dir.parent_path(); + const boost::filesystem::path manifest = root_dir / (vendor_id + ".json"); + if (!boost::filesystem::is_regular_file(manifest)) + continue; + const boost::filesystem::path manifest_relative = source_path.lexically_relative(vendor_dir); + if (manifest_relative.empty() || *manifest_relative.begin() == "..") + continue; + + try { + const PresetBundle *loaded = load_source_vendor(root_dir, vendor_id, compatibility_rule, error); + if (loaded == nullptr) + return false; + + const Preset *resolved = find_loaded(*loaded); + if (resolved == nullptr) { + if (error.empty()) + error = "Source file is not an instantiated preset in its vendor manifest"; + return false; + } + config = resolved->config; + error.clear(); + return true; + } catch (const std::exception &ex) { + error = ex.what(); + return false; + } + } + + error = "Preset was not found in the loaded bundle"; + return false; +} + +const PresetBundle *PresetBundle::load_source_vendor(const boost::filesystem::path &root_dir, + const std::string &vendor_id, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error) +{ + auto key = std::make_tuple(root_dir.string(), vendor_id, compatibility_rule); + if (auto it = m_source_vendor_bundles.find(key); it != m_source_vendor_bundles.end()) + return it->second.get(); + + // The library loads with no base of its own, so the tree a vendor inherits from + // is the same one that resolves the library's own presets. + const PresetBundle *library = nullptr; + if (vendor_id != ORCA_FILAMENT_LIBRARY && + boost::filesystem::is_regular_file(root_dir / (std::string(ORCA_FILAMENT_LIBRARY) + ".json"))) { + library = load_source_vendor(root_dir, ORCA_FILAMENT_LIBRARY, compatibility_rule, error); + if (library == nullptr) { + error = "OrcaFilamentLibrary contains invalid presets"; + return nullptr; + } + } + + auto bundle = std::make_unique(); + bundle->m_preserve_vendor_source_paths = true; + bundle->load_vendor_configs_from_json(root_dir.string(), vendor_id, LoadSystem, compatibility_rule, library, false); + if (bundle->error_count() != 0) { + error = "Vendor bundle contains invalid presets"; + return nullptr; + } + return m_source_vendor_bundles.emplace(std::move(key), std::move(bundle)).first->second.get(); +} + +bool PresetBundle::resolve_preset_config_type(DynamicPrintConfig &config, Preset::Type &type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest) +{ + std::optional> resolved; + for (Preset::Type candidate_type : types_list(ptFFF)) { + DynamicPrintConfig candidate_config(config); + std::string candidate_error; + if (!resolve_preset_config(candidate_config, candidate_type, source_file, compatibility_rule, + candidate_error, allow_source_manifest)) { + if (candidate_error == "Preset identity is ambiguous") { + error = std::move(candidate_error); + return false; + } + continue; + } + if (resolved) { + error = "Preset type is ambiguous"; + return false; + } + resolved.emplace(candidate_type, std::move(candidate_config)); + } + + if (!resolved) { + error = "Preset type could not be resolved"; + return false; + } + + type = resolved->first; + config = std::move(resolved->second); + error.clear(); + return true; +} + PresetBundle::PresetBundle(const PresetBundle &rhs) { *this = rhs; @@ -574,7 +759,8 @@ void PresetBundle::copy_files(const std::string& from) } PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, ForwardCompatibilitySubstitutionRule substitution_rule, - const PresetPreferences& preferred_selection/* = PresetPreferences()*/) + const PresetPreferences& preferred_selection/* = PresetPreferences()*/, + std::string *errors, bool read_only) { // First load the vendor specific system presets. PresetsConfigSubstitutions substitutions; @@ -585,16 +771,20 @@ PresetsConfigSubstitutions PresetBundle::load_presets(AppConfig &config, Forward const auto startup_t0 = std::chrono::steady_clock::now(); //BBS: change system config to json - std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule); + std::tie(substitutions, errors_cummulative) = this->load_system_presets_from_json(substitution_rule, !read_only); + if (errors != nullptr) + *errors = errors_cummulative; // BBS load preset from user's folder, load system default if // BBS: change directories by design std::string dir_user_presets = config.get("preset_folder"); if (dir_user_presets.empty()) { - load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule); + load_user_presets(DEFAULT_USER_FOLDER_NAME, substitution_rule, read_only); } else { - load_user_presets(dir_user_presets, substitution_rule); + load_user_presets(dir_user_presets, substitution_rule, read_only); } + if (errors != nullptr && errors->empty() && m_errors != 0) + *errors = "Preset loading reported " + std::to_string(m_errors) + " error(s)"; // Rewrite renamed compatible_printers / compatible_prints references before selection. Skipped // in validation mode so the profile validator (has_errors -> check_preset_references) sees the @@ -1010,18 +1200,26 @@ std::string PresetBundle::get_hotend_model_for_printer_model(std::string model_n return out; } -PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule substitution_rule) +PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule substitution_rule, bool read_only) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " entry and user is: " << user; PresetsConfigSubstitutions substitutions; std::string errors_cummulative; fs::path user_folder(data_dir() + "/" + PRESET_USER_DIR); - if (!fs::exists(user_folder)) fs::create_directory(user_folder); + if (!fs::exists(user_folder)) { + if (read_only) + return substitutions; + fs::create_directory(user_folder); + } std::string dir_user_presets = data_dir() + "/" + PRESET_USER_DIR + "/" + user; fs::path folder(user_folder / user); - if (!fs::exists(folder)) fs::create_directory(folder); + if (!fs::exists(folder)) { + if (read_only) + return substitutions; + fs::create_directory(folder); + } bundles.WriteLock(); bundles.m_bundles.clear(); @@ -1049,13 +1247,13 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.print_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::LocalBundle, metadata.id), read_only); metadata.bundle_type = BundleType::Local; metadata.path = metadata_file.string(); @@ -1085,13 +1283,13 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For this->prints.load_presets(bundle_dir, PRESET_PRINT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.print_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); this->filaments.load_presets(bundle_dir, PRESET_FILAMENT_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.filament_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); this->printers.load_presets(bundle_dir, PRESET_PRINTER_NAME, substitutions, substitution_rule, [&](Preset& preset) { metadata.printer_presets.push_back(preset.name); - }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id)); + }, PresetOrigin(PresetOrigin::Kind::SubscribedBundle, metadata.id), read_only); metadata.bundle_type = BundleType::Subscribed; metadata.path = metadata_file.string(); @@ -1110,17 +1308,20 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(std::string user, For const auto json_t0 = std::chrono::steady_clock::now(); try { std::string sel = prints.get_selected_preset().name; - this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule); + this->prints.load_presets(dir_user_presets, PRESET_PRINT_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); prints.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = filaments.get_selected_preset().name; - this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule); + this->filaments.load_presets(dir_user_presets, PRESET_FILAMENT_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); filaments.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } try { std::string sel = printers.get_selected_preset().name; - this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule); + this->printers.load_presets(dir_user_presets, PRESET_PRINTER_NAME, substitutions, substitution_rule, + nullptr, PresetOrigin(), read_only); printers.select_preset_by_name(sel, false); } catch (const std::runtime_error& err) { errors_cummulative += err.what(); } if (!errors_cummulative.empty()) throw Slic3r::RuntimeError(errors_cummulative); @@ -1446,6 +1647,12 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector metadata.id = to_string(uuid); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " bundle_id was empty, so generating a UUID: " << metadata.id; } + if (has_bundle_structure && !is_path_within_root(metadata.id, user_folder / user_id / PRESET_LOCAL_DIR)) { + BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << " bundle id escapes the bundle directory, not importing: " << metadata.id; + fclose(zipFile); + fs::remove_all(temp_folder, ec); + continue; + } // Build bundle directory path based on whether bundle_structure.json was present fs::path bundle_base_dir; @@ -1468,11 +1675,15 @@ PresetsConfigSubstitutions PresetBundle::import_presets(std::vector if (status) { std::string file_name = file_stat.m_filename; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " From zip file: " << file << ". Read file name: " << file_stat.m_filename; - size_t index = file_name.find_last_of('/'); + size_t index = file_name.find_last_of("/\\"); if (std::string::npos != index) { file_name = file_name.substr(index + 1); } if (BUNDLE_STRUCTURE_JSON_NAME == file_name) continue; + if (!is_path_within_root(file_name, temp_folder)) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " zip entry escapes the temp directory, skipping: " << file_stat.m_filename; + continue; + } // create target file path std::string target_file_path = boost::filesystem::path(temp_folder / file_name).make_preferred().string(); @@ -1561,6 +1772,10 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset type is unknown, not loading: " << name; return false; } + if (!is_path_within_root(name, fs::path(collection->m_dir_path))) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Preset name escapes the preset directory, not loading: " << name; + return false; + } const PresetOrigin load_origin = detect_origin_from_path(boost::filesystem::path(bundle_dir)); const std::string preset_name = get_preset_canonical_name(name, load_origin); @@ -2157,7 +2372,7 @@ int PresetBundle::validate_presets(const std::string &file_name, DynamicPrintCon void PresetBundle::remove_users_preset(AppConfig &config, std::map> *my_presets) { - auto check_removed = [my_presets, this](Preset &preset) -> bool { + auto check_removed = [my_presets](Preset &preset) -> bool { if (my_presets == nullptr) return true; if (my_presets->find(preset.name) != my_presets->end()) return false; if (!preset.sync_info.empty()) return false; // syncing, not remove @@ -2266,7 +2481,8 @@ void PresetBundle::clear_printer_hold_aliases() } //BBS: add json related logic, load system presets from json -std::pair PresetBundle::load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule) +std::pair PresetBundle::load_system_presets_from_json( + ForwardCompatibilitySubstitutionRule compatibility_rule, bool allow_cache) { //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%")%compatibility_rule; @@ -2288,7 +2504,7 @@ std::pair PresetBundle::load_system_pre // The vendors below are loaded whole and against each other — the filament // library first, then every other vendor with it as the base — so each parse // is complete enough to be worth caching. - m_generate_vendor_caches = m_generate_vendor_caches || ! validation_mode; + m_generate_vendor_caches = allow_cache && (m_generate_vendor_caches || !validation_mode); PresetsConfigSubstitutions substitutions; std::string errors_cummulative; @@ -2318,7 +2534,8 @@ std::pair PresetBundle::load_system_pre // state into this load. this->clear_printer_hold_aliases(); this->m_errors = 0; - append(substitutions, this->load_vendor_configs_from_json(dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule).first); + append(substitutions, this->load_vendor_configs_from_json( + dir.string(), orca_lib_vendor, PresetBundle::LoadSystem, compatibility_rule, nullptr, allow_cache).first); first = false; } catch (const std::runtime_error &err) { if (validation_mode) @@ -2343,7 +2560,7 @@ std::pair PresetBundle::load_system_pre bundle->set_generate_vendor_caches(m_generate_vendor_caches); try { auto result = bundle->load_vendor_configs_from_json( - dir.string(), other_vendors[i], PresetBundle::LoadSystem, compatibility_rule, this); + dir.string(), other_vendors[i], PresetBundle::LoadSystem, compatibility_rule, this, allow_cache); parallel_substitutions[i] = std::move(result.first); parallel_bundles[i] = std::move(bundle); } catch (const std::runtime_error &err) { @@ -2920,6 +3137,16 @@ void PresetBundle::load_selections(AppConfig &config, const PresetPreferences& p // If executed due to a Config Wizard update, preferred_printer contains the first newly installed printer, otherwise nullptr. const Preset *preferred_printer = printers.find_system_preset_by_model_and_variant(preferred_selection.printer_model_id, preferred_selection.printer_variant); printers.select_preset_by_name(preferred_printer ? preferred_printer->name : initial_printer_profile_name, true); + Preset &selected_printer = printers.get_edited_preset(); + if (selected_printer.printer_technology() == ptFFF) { + BedType bed_type = selected_printer.get_default_bed_type(this); + const std::string saved_bed_type = config.get_printer_setting(selected_printer.name, "curr_bed_type"); + const int saved_bed_type_value = atoi(saved_bed_type.c_str()); + if (saved_bed_type_value > btDefault && saved_bed_type_value < btCount) + bed_type = static_cast(saved_bed_type_value); + project_config.set_key_value("curr_bed_type", new ConfigOptionEnum(bed_type)); + config.set("curr_bed_type", std::to_string(static_cast(bed_type))); + } CNumericLocalesSetter locales_setter; // Orca: load from orca_presets @@ -3190,63 +3417,6 @@ void PresetBundle::export_selections(AppConfig &config) BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": printer %1%, print %2%, filaments[0] %3% ")%printers.get_selected_preset_name() % prints.get_selected_preset_name() %filament_presets[0]; } -// BBS -void PresetBundle::set_num_filaments(unsigned int n, std::vector new_colors) { - int old_filament_count = this->filament_presets.size(); - if (n > old_filament_count && old_filament_count != 0) - filament_presets.resize(n, filament_presets.back()); - else { - filament_presets.resize(n); - } - ConfigOptionStrings* filament_color = project_config.option("filament_colour"); - ConfigOptionStrings *filament_multi_color = project_config.option("filament_multi_colour"); - ConfigOptionStrings* filament_color_type = project_config.option("filament_colour_type"); - ConfigOptionInts* filament_map = project_config.option("filament_map"); - ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); - ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); - - filament_color->resize(n); - // Sync filament multi colour - filament_multi_color->values.resize(n); - for (size_t i = 0; i < n; i++) { - filament_multi_color->values[i] = filament_color->values[i]; - } - filament_color_type->resize(n); - filament_map->values.resize(n, 1); - filament_nozzle_map->values.resize(n, 0); - filament_volume_map->values.resize(n, static_cast(NozzleVolumeType::nvtStandard)); - ams_multi_color_filment.resize(n); - - // Mixed-color metadata is a parallel per-filament array set, so it has to grow and shrink - // with the filament count exactly like filament_colour above. - if (auto* opt = project_config.option("filament_is_mixed")) - opt->values.resize(n, false); - if (auto* opt = project_config.option("filament_mixed_components")) - opt->values.resize(n, std::string{}); - if (auto* opt = project_config.option("filament_mixed_sublayer_ratios")) - opt->values.resize(n, std::string{}); - if (auto* opt = project_config.option("filament_mixed_gradient")) - opt->values.resize(n, false); - if (auto* opt = project_config.option("filament_mixed_gradient_range")) - opt->values.resize(n, std::string{}); - if (auto* opt = project_config.option("filament_mixed_gradient_curve")) - opt->values.resize(n, std::string{}); - if (auto* opt = project_config.option("filament_mixed_gradient_per_part")) - opt->values.resize(n, false); - - // BBS set new filament color to new_color - if (old_filament_count < n) { - if (!new_colors.empty()) { - for (int i = old_filament_count; i < n; i++) { - filament_color->values[i] = new_colors[i - old_filament_count]; - filament_multi_color->values[i] = new_colors[i - old_filament_count]; - filament_color_type->values[i] = "1"; // default color type - } - } - } - - update_multi_material_filament_presets(); -} void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) { unsigned old_filament_count = this->filament_presets.size(); @@ -3262,6 +3432,11 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) ConfigOptionInts* filament_nozzle_map = project_config.option("filament_nozzle_map"); ConfigOptionInts* filament_volume_map = project_config.option("filament_volume_map"); + // Which slots are new is a fact about the arrays below, not about filament_presets: + // update_multi_material_filament_presets() tops that list up to the nozzle count on its own, + // so it can already sit at the new size while every array below is still at the old one. + const size_t old_slot_count = filament_color->values.size(); + filament_color->resize(n); // Sync filament multi colour filament_multi_color->values.resize(n); @@ -3292,13 +3467,11 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) opt->values.resize(n, false); //BBS set new filament color to new_color - if (old_filament_count < n) { - if (!new_color.empty()) { - for (unsigned i = old_filament_count; i < n; i++) { - filament_color->values[i] = new_color; - filament_multi_color->values[i] = new_color; - filament_color_type->values[i] = "1"; // default color type - } + if (!new_color.empty()) { + for (size_t i = old_slot_count; i < n; i++) { + filament_color->values[i] = new_color; + filament_multi_color->values[i] = new_color; + filament_color_type->values[i] = "1"; // default color type } } @@ -3407,6 +3580,16 @@ size_t PresetBundle::num_mixed_filaments() const return opt == nullptr ? 0 : size_t(std::count(opt->values.begin(), opt->values.end(), true)); } +// Counted off the mixed flags, not filament_presets: that list is topped up to the nozzle count on +// its own, so it can sit a slot ahead of the arrays that describe slots. Unlike the sibling +// physical_filament_config_indices(), which bounds by filament_presets, this ignores that top-up. +size_t PresetBundle::num_physical_filaments() const +{ + const auto *opt = project_config.option("filament_is_mixed"); + return opt == nullptr ? filament_presets.size() + : size_t(std::count(opt->values.begin(), opt->values.end(), false)); +} + std::vector PresetBundle::physical_filament_config_indices() const { std::vector indices; @@ -3417,6 +3600,24 @@ std::vector PresetBundle::physical_filament_config_indices() const } +// Orca: the AMS lookups below resolve a tray's filament_id to the FIRST compatible base +// preset. When several presets match the same id for the selected printer the pick is +// arbitrary (a profile bug - see the validator's check_duplicate_filament_subtypes), so +// scan past a successful match and warn about the runners-up. Behavior is unchanged. +static void warn_ambiguous_filament_id_match(const PresetCollection &filaments, PresetCollection::ConstIterator match, const std::string &filament_id) +{ + if (match == filaments.end()) + return; + std::string others; + for (auto it = std::next(match); it != filaments.end(); ++it) + if (it->is_compatible && filaments.get_preset_base(*it) == &*it && it->filament_id == filament_id) + others += (others.empty() ? "\"" : ", \"") + it->name + "\""; + if (!others.empty()) + BOOST_LOG_TRIVIAL(warning) << "Ambiguous AMS filament match: filament_id \"" << filament_id + << "\" matches multiple presets compatible with the selected printer; picked \"" << match->name + << "\", also matches " << others; +} + void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) { combox_info.clear(); @@ -3439,6 +3640,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) } auto iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id](auto &f) { return f.is_compatible && filaments.get_preset_base(f) == &f && f.filament_id == filament_id; }); + warn_ambiguous_filament_id_match(filaments, iter, filament_id); if (iter == filaments.end()) { BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; auto filament_type = ams.opt_string("filament_type", 0u); @@ -3456,7 +3658,7 @@ void PresetBundle::get_ams_cobox_infos(AMSComboInfo& combox_info) combox_info.ams_names.push_back(ams_name); continue; } - iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) { return f.is_compatible && f.is_system; }); + iter = std::find_if(filaments.begin(), filaments.end(), [](auto &f) { return f.is_compatible && f.is_system; }); if (iter == filaments.end()) continue; } @@ -3541,6 +3743,7 @@ unsigned int PresetBundle::sync_ams_list(std::vector> PresetBundle::get_extruder_filament return filament_infos; } +// ORCA TODO: currently, this function assumes the printer name follows the pattern of " ", e.g. +// printer_type: "Bambu Lab X2D", nozzle_diameter_str: "0.4 nozzle" => printer_name: "Bambu Lab X2D 0.4 nozzle". If the printer name does +// not follow this pattern, the function may not work correctly. std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only) { std::set printer_names; @@ -4083,6 +4289,40 @@ std::set PresetBundle::get_printer_names_by_printer_type_and_nozzle return printer_names; } +std::vector PresetBundle::get_filament_presets_for_machine(const std::string &printer_type, + const std::string &nozzle_diameter_str, + bool include_user_presets) +{ + // Printer model plus nozzle diameter is expected to resolve to a single system printer preset; + // get_printer_names_by_printer_type_and_nozzle asserts as much in debug builds. + const std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); + const Preset *printer = printer_names.empty() ? nullptr : printers.find_preset(*printer_names.begin()); + if (printer == nullptr) + return {}; + + // Preset::is_visible is deliberately not consulted: it tracks what the Configuration Wizard + // installed, while the caller identifies a physically connected machine the user may never + // have installed - gating on it would empty the list for exactly those machines. + const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(*printer); + // Loop invariant - the two argument is_compatible_with_printer() would rebuild it per preset. + DynamicPrintConfig printer_config; + printer_config.set_key_value("printer_preset", new ConfigOptionString(printer->name)); + if (const ConfigOption *opt = printer->config.option("nozzle_diameter")) + printer_config.set_key_value("num_extruders", new ConfigOptionInt((int) static_cast(opt)->values.size())); + + std::vector compatible; + for (Preset &preset : filaments) { + /* The situation where the preset is not offered is as follows: + 1. Not a root preset + 2. Not a system preset and the printer firmware does not support user presets */ + if (filaments.get_preset_base(preset) != &preset || (!preset.is_system && !include_user_presets)) + continue; + if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(preset), active_printer, &printer_config)) + compatible.push_back(&preset); + } + return compatible; +} + bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray( const std::string &printer_type, std::string& nozzle_diameter_str, std::string &setting_id, std::string &tag_uid, std::string &nozzle_temp_min, std::string &nozzle_temp_max, std::string& preset_setting_id) { @@ -4091,7 +4331,11 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m std::map> filament_list = filaments.get_filament_presets(); std::set printer_names = get_printer_names_by_printer_type_and_nozzle(printer_type, nozzle_diameter_str); - for (const Preset *preset : filament_list.find(setting_id)->second) { + auto filament_iter = filament_list.find(setting_id); + if (filament_iter == filament_list.end()) + return is_equation; + + for (const Preset *preset : filament_iter->second) { if (tag_uid == "0" || (tag_uid.size() == 16 && tag_uid.substr(12, 2) == "01")) continue; if (preset && !preset->is_user()) continue; ConfigOption * printer_opt = const_cast(preset)->config.option("compatible_printers"); @@ -4729,6 +4973,142 @@ static std::map> filament_preset {"Bambu ASA @BBL H2D 0.6 nozzle", "Bambu ASA @BBL H2D 0.8 nozzle"}}} }; +// Relocate the per-slot cells of one mixed-filament project vector inside the imported +// config, applying every authored-slot -> destination move at once. Each move reads its +// source cell from a frozen snapshot of the config's current cells, so relocations never +// cross-contaminate when an earlier destination overlaps a later source (adjacent published +// tail mixes relocate onto consecutive slots). Cells the snapshot lacks degrade to +// empty/false defaults - the missing-data handling in the material pass reports them +// downstream. Left-behind source cells stay as-is: nothing else consumes the imported config +// at those indices in published mode. +static void apply_mixed_config_relocations(DynamicPrintConfig& config, + const std::string& key, + const std::vector>& moves) +{ + ConfigOption* opt = config.optptr(key); + if (opt == nullptr || moves.empty()) + return; + std::unique_ptr snapshot(opt->clone()); + switch (opt->type()) { + case coBools: { + auto* live = static_cast(opt); + const auto* frozen = static_cast(snapshot.get()); + for (const auto& [from, to] : moves) { + const unsigned char cell = from < frozen->values.size() ? frozen->values[from] : 0; + if (live->values.size() <= to) + live->values.resize(to + 1, 0); + live->values[to] = cell; + } + break; + } + case coStrings: { + auto* live = static_cast(opt); + const auto* frozen = static_cast(snapshot.get()); + for (const auto& [from, to] : moves) { + const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); + if (live->values.size() <= to) + live->values.resize(to + 1, std::string{}); + live->values[to] = cell; + } + break; + } + default: break; + } +} + +// Relocate the per-slot cells of the receiver's OWN mixed-filament definitions (the ones that +// pre-existed in project_config) onto fresh tail slots, clearing each vacated source cell so an +// incoming published real filament can claim it. Unlike apply_mixed_config_relocations - which +// moves the incoming file's config and leaves sources alone - a displaced receiver mix must not +// keep its mixed flag in the physical region: the source slot becomes a physical slot, so its +// mixed flag and definition are reset, while its swatch colour and mapping travel with the +// definition to the tail slot. Reads come from a frozen snapshot so an earlier move's +// destination never overwrites a later move's still-unread source (sources sit in the physical +// region and destinations past it, so they cannot overlap, but the snapshot keeps the helper +// safe for any future reordering). +static void apply_receiver_mix_relocations(DynamicPrintConfig& config, + std::vector>& ams_multi_color_filment, + const std::vector>& moves) +{ + if (moves.empty()) + return; + + auto move_bools = [&](const char* key, bool clear_source) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto& [from, to] : moves) { + const bool cell = from < frozen->values.size() ? frozen->values[from] : false; + if (live->values.size() <= to) + live->values.resize(to + 1, false); + live->values[to] = cell; + if (clear_source && from < live->values.size()) + live->values[from] = false; + } + }; + auto move_strings = [&](const char* key, bool clear_source) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto& [from, to] : moves) { + const std::string cell = from < frozen->values.size() ? frozen->values[from] : std::string(); + if (live->values.size() <= to) + live->values.resize(to + 1, std::string{}); + live->values[to] = cell; + if (clear_source && from < live->values.size()) + live->values[from] = std::string{}; + } + }; + auto move_ints = [&](const char* key) { + ConfigOption* opt = config.optptr(key); + if (opt == nullptr) + return; + auto* live = static_cast(opt); + std::unique_ptr snapshot(opt->clone()); + const auto* frozen = static_cast(snapshot.get()); + for (const auto& [from, to] : moves) { + const int cell = from < frozen->values.size() ? frozen->values[from] : 0; + if (live->values.size() <= to) + live->values.resize(to + 1, 0); + live->values[to] = cell; + } + }; + + // Mixed-definition cells: move to the tail and clear the source - the vacated physical slot + // no longer holds a mix. + move_bools("filament_is_mixed", true); + move_strings("filament_mixed_components", true); + move_strings("filament_mixed_sublayer_ratios", true); + move_bools("filament_mixed_gradient", true); + move_strings("filament_mixed_gradient_range", true); + move_strings("filament_mixed_gradient_curve", true); + move_bools("filament_mixed_gradient_per_part", true); + // Swatch colour and mapping travel with the definition; the source colour is left for the + // incoming real's publish_color (or the slot's resolved preset) to fill in. + move_strings("filament_colour", false); + move_strings("filament_multi_colour", false); + move_strings("filament_colour_type", false); + move_ints("filament_map"); + move_ints("filament_nozzle_map"); + move_ints("filament_volume_map"); + { + const std::vector> frozen = ams_multi_color_filment; + for (const auto& [from, to] : moves) { + const std::vector cell = from < frozen.size() ? frozen[from] : std::vector(); + if (ams_multi_color_filment.size() <= to) + ams_multi_color_filment.resize(to + 1, std::vector{}); + ams_multi_color_filment[to] = cell; + } + } +} + + //convert the old filament preset to new one after split static void convert_filament_preset_name(std::string& machine_name, std::string& filament_name) { @@ -4745,10 +5125,14 @@ static void convert_filament_preset_name(std::string& machine_name, std::string& } // Load a config file from a boost property_tree. This is a private method called from load_config_file. // is_external == false on if called from ConfigWizard -void PresetBundle::load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version, bool selected) +void PresetBundle::load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version, bool selected, PublishedConfig *published_config) { PrinterTechnology printer_technology = Preset::printer_technology(config); + // A "published" 3MF project keeps the user's currently-selected presets and overlays only + // the author-selected published keys onto the edited presets. + const bool is_published = published_config != nullptr && published_config->published; + auto clear_compatible_printers = [](DynamicPrintConfig& config){ ConfigOption *opt_compatible = config.optptr("compatible_printers"); if (opt_compatible != nullptr) { @@ -4889,127 +5273,60 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool switch (Preset::printer_technology(config)) { case ptFFF: { - //BBS: add different settings logic - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id"); - std::vector print_different_keys_vector; - std::string print_different_settings = different_values[0]; - Slic3r::unescape_strings_cstyle(print_different_settings, print_different_keys_vector); - std::set print_different_keys_set(print_different_keys_vector.begin(), print_different_keys_vector.end()); - //if (!has_different_settings_to_system) { - // print_different_keys_set.clear(); - //} - //else - print_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); - if (!print_compatible_printers.empty()) { - ConfigOptionStrings* compatible_printers = config.option("compatible_printers", true); - compatible_printers->values = print_compatible_printers; - } - - load_preset(this->prints, 0, "print_settings_id", print_different_keys_set, std::string()); - - //clear compatible printers - clear_compatible_printers(config); - - std::vector printer_different_keys_vector; - std::string printer_different_settings = different_values[num_filaments + 1]; - Slic3r::unescape_strings_cstyle(printer_different_settings, printer_different_keys_vector); - std::set printer_different_keys_set(printer_different_keys_vector.begin(), printer_different_keys_vector.end()); - //if (!has_different_settings_to_system) { - // printer_different_keys_set.clear(); - //} - //else - printer_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load printer preset from printer_settings_id"); - load_preset(this->printers, num_filaments + 1, "printer_settings_id", printer_different_keys_set, std::string()); - - // 3) Now load the filaments. If there are multiple filament presets, split them and load them. - auto old_filament_profile_names = config.option("filament_settings_id", true); - old_filament_profile_names->values.resize(num_filaments, std::string()); - - auto old_machine_profile_name = config.option("printer_settings_id", true); - - if (num_filaments <= 1) { - // Split the "compatible_printers_condition" and "inherits" values from the cummulative vectors to separate filament presets. - inherits = inherits_values[1]; - compatible_printers_condition = compatible_printers_condition_values[1]; - compatible_prints_condition = compatible_prints_condition_values.front(); - Preset *loaded = nullptr; - + // A "published" 3MF project keeps the user's currently-selected presets, so the + // print / printer / filament presets are NOT loaded from the file. Only the + // project config values and the published keys are applied below. + if (!is_published) { //BBS: add different settings logic - std::vector filament_different_keys_vector; - std::string filament_different_settings = different_values[1]; - Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector); - std::set filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end()); + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load print preset from print_settings_id"); + std::vector print_different_keys_vector; + std::string print_different_settings = different_values[0]; + Slic3r::unescape_strings_cstyle(print_different_settings, print_different_keys_vector); + std::set print_different_keys_set(print_different_keys_vector.begin(), print_different_keys_vector.end()); //if (!has_different_settings_to_system) { - // filament_different_keys_set.clear(); + // print_different_keys_set.clear(); //} //else - filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + print_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + if (!print_compatible_printers.empty()) { + ConfigOptionStrings* compatible_printers = config.option("compatible_printers", true); + compatible_printers->values = print_compatible_printers; + } - std::string filament_id = filament_ids[0]; + load_preset(this->prints, 0, "print_settings_id", print_different_keys_set, std::string()); + + //clear compatible printers + clear_compatible_printers(config); + + std::vector printer_different_keys_vector; + std::string printer_different_settings = different_values[num_filaments + 1]; + Slic3r::unescape_strings_cstyle(printer_different_settings, printer_different_keys_vector); + std::set printer_different_keys_set(printer_different_keys_vector.begin(), printer_different_keys_vector.end()); + //if (!has_different_settings_to_system) { + // printer_different_keys_set.clear(); + //} + //else + printer_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load single filament preset from filament_settings_id"); - if (is_external) { - if (inherits.empty()) - convert_filament_preset_name(old_machine_profile_name->value, old_filament_profile_names->values.front()); - else - convert_filament_preset_name(old_machine_profile_name->value, inherits); - loaded = this->filaments.load_external_preset(name_or_path, name, old_filament_profile_names->values.front(), config, filament_different_keys_set, PresetCollection::LoadAndSelect::Always, file_version, filament_id).first; - } - else { - // called from Config Wizard. - loaded= &this->filaments.load_preset(this->filaments.path_from_name(name, inherits.empty()), name, config, true, file_version); - loaded->save(nullptr); - } - this->filament_presets.clear(); - this->filament_presets.emplace_back(loaded->name); - } else { - assert(is_external); - // Split the filament presets, load each of them separately. - std::vector configs(num_filaments, this->filaments.default_preset().config); - // loop through options and scatter them into configs. - for (const t_config_option_key &key : this->filaments.default_preset().config.keys()) { - ConfigOption *other_opt = config.option(key); - if (other_opt == nullptr) - continue; - if (other_opt->is_scalar()) { - for (size_t i = 0; i < configs.size(); ++ i) - configs[i].option(key, false)->set(other_opt); - } - else if (key != "compatible_printers" && key != "compatible_prints") { - for (size_t i = 0; i < configs.size(); ++i) { - if (process_multi_extruder && (filament_options_with_variant.find(key) != filament_options_with_variant.end())) { - ConfigOptionVectorBase* other_opt_vec = static_cast(other_opt); - if (other_opt_vec->size() != extruder_variant_count) { - other_opt_vec->resize(extruder_variant_count); - } - size_t next_index = (i < (configs.size() - 1)) ? filament_variant_index[i + 1] : extruder_variant_count; - static_cast(configs[i].option(key, false))->set(other_opt, filament_variant_index[i], next_index - filament_variant_index[i]); - } - else - static_cast(configs[i].option(key, false))->set_at(other_opt, 0, i); - } - } - } - // Load the configs into this->filaments and make them active. - this->filament_presets = std::vector(configs.size()); - // To avoid incorrect selection of the first filament preset (means a value of Preset->m_idx_selected) - // in a case when next added preset take a place of previosly selected preset, - // we should add presets from last to first - bool any_modified = false; - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load multiple filament preset from filament_settings_id"); - for (int i = (int)configs.size()-1; i >= 0; i--) { - DynamicPrintConfig &cfg = configs[i]; - // Split the "compatible_printers_condition" and "inherits" from the cummulative vectors to separate filament presets. - cfg.opt_string("compatible_printers_condition", true) = compatible_printers_condition_values[i + 1]; - cfg.opt_string("compatible_prints_condition", true) = compatible_prints_condition_values[i]; - cfg.opt_string("inherits", true) = inherits_values[i + 1]; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load printer preset from printer_settings_id"); + load_preset(this->printers, num_filaments + 1, "printer_settings_id", printer_different_keys_set, std::string()); + + // 3) Now load the filaments. If there are multiple filament presets, split them and load them. + auto old_filament_profile_names = config.option("filament_settings_id", true); + old_filament_profile_names->values.resize(num_filaments, std::string()); + + auto old_machine_profile_name = config.option("printer_settings_id", true); + + if (num_filaments <= 1) { + // Split the "compatible_printers_condition" and "inherits" values from the cummulative vectors to separate filament presets. + inherits = inherits_values[1]; + compatible_printers_condition = compatible_printers_condition_values[1]; + compatible_prints_condition = compatible_prints_condition_values.front(); + Preset *loaded = nullptr; //BBS: add different settings logic std::vector filament_different_keys_vector; - std::string filament_different_settings = different_values[i+1]; + std::string filament_different_settings = different_values[1]; Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector); std::set filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end()); //if (!has_different_settings_to_system) { @@ -5018,32 +5335,105 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool //else filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); - std::string filament_id = filament_ids[i]; + std::string filament_id = filament_ids[0]; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load single filament preset from filament_settings_id"); + if (is_external) { + if (inherits.empty()) + convert_filament_preset_name(old_machine_profile_name->value, old_filament_profile_names->values.front()); + else + convert_filament_preset_name(old_machine_profile_name->value, inherits); + loaded = this->filaments.load_external_preset(name_or_path, name, old_filament_profile_names->values.front(), config, filament_different_keys_set, PresetCollection::LoadAndSelect::Always, file_version, filament_id).first; + } + else { + // called from Config Wizard. + loaded= &this->filaments.load_preset(this->filaments.path_from_name(name, inherits.empty()), name, config, true, file_version); + loaded->save(nullptr); + } + this->filament_presets.clear(); + this->filament_presets.emplace_back(loaded->name); + } else { + assert(is_external); + // Split the filament presets, load each of them separately. + std::vector configs(num_filaments, this->filaments.default_preset().config); + // loop through options and scatter them into configs. + for (const t_config_option_key &key : this->filaments.default_preset().config.keys()) { + ConfigOption *other_opt = config.option(key); + if (other_opt == nullptr) + continue; + if (other_opt->is_scalar()) { + for (size_t i = 0; i < configs.size(); ++ i) + configs[i].option(key, false)->set(other_opt); + } + else if (key != "compatible_printers" && key != "compatible_prints") { + for (size_t i = 0; i < configs.size(); ++i) { + if (process_multi_extruder && (filament_options_with_variant.find(key) != filament_options_with_variant.end())) { + ConfigOptionVectorBase* other_opt_vec = static_cast(other_opt); + if (other_opt_vec->size() != extruder_variant_count) { + other_opt_vec->resize(extruder_variant_count); + } + size_t next_index = (i < (configs.size() - 1)) ? filament_variant_index[i + 1] : extruder_variant_count; + static_cast(configs[i].option(key, false))->set(other_opt, filament_variant_index[i], next_index - filament_variant_index[i]); + } + else + static_cast(configs[i].option(key, false))->set_at(other_opt, 0, i); + } + } + } + // Load the configs into this->filaments and make them active. + this->filament_presets = std::vector(configs.size()); + // To avoid incorrect selection of the first filament preset (means a value of Preset->m_idx_selected) + // in a case when next added preset take a place of previosly selected preset, + // we should add presets from last to first + bool any_modified = false; + //BBS: add config related logs + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": load multiple filament preset from filament_settings_id"); + for (int i = (int)configs.size()-1; i >= 0; i--) { + DynamicPrintConfig &cfg = configs[i]; + // Split the "compatible_printers_condition" and "inherits" from the cummulative vectors to separate filament presets. + cfg.opt_string("compatible_printers_condition", true) = compatible_printers_condition_values[i + 1]; + cfg.opt_string("compatible_prints_condition", true) = compatible_prints_condition_values[i]; + cfg.opt_string("inherits", true) = inherits_values[i + 1]; - // Load all filament presets, but only select the first one in the preset dialog. - std::string& filament_inherit = cfg.opt_string("inherits", true); - if (filament_inherit.empty() && (i < int(old_filament_profile_names->values.size()))) - convert_filament_preset_name(old_machine_profile_name->value, old_filament_profile_names->values[i]); - else - convert_filament_preset_name(old_machine_profile_name->value, filament_inherit); - auto [loaded, modified] = this->filaments.load_external_preset(name_or_path, name, - (i < int(old_filament_profile_names->values.size())) ? old_filament_profile_names->values[i] : "", - std::move(cfg), - filament_different_keys_set, - i == 0 ? - PresetCollection::LoadAndSelect::Always : - any_modified ? - PresetCollection::LoadAndSelect::Never : - PresetCollection::LoadAndSelect::OnlyIfModified, - file_version, - filament_id); - any_modified |= modified; - this->filament_presets[i] = loaded->name; + //BBS: add different settings logic + std::vector filament_different_keys_vector; + std::string filament_different_settings = different_values[i+1]; + Slic3r::unescape_strings_cstyle(filament_different_settings, filament_different_keys_vector); + std::set filament_different_keys_set(filament_different_keys_vector.begin(), filament_different_keys_vector.end()); + //if (!has_different_settings_to_system) { + // filament_different_keys_set.clear(); + //} + //else + filament_different_keys_set.insert(ignore_settings_list.begin(), ignore_settings_list.end()); + + std::string filament_id = filament_ids[i]; + + // Load all filament presets, but only select the first one in the preset dialog. + std::string& filament_inherit = cfg.opt_string("inherits", true); + if (filament_inherit.empty() && (i < int(old_filament_profile_names->values.size()))) + convert_filament_preset_name(old_machine_profile_name->value, old_filament_profile_names->values[i]); + else + convert_filament_preset_name(old_machine_profile_name->value, filament_inherit); + auto [loaded, modified] = this->filaments.load_external_preset(name_or_path, name, + (i < int(old_filament_profile_names->values.size())) ? old_filament_profile_names->values[i] : "", + std::move(cfg), + filament_different_keys_set, + i == 0 ? + PresetCollection::LoadAndSelect::Always : + any_modified ? + PresetCollection::LoadAndSelect::Never : + PresetCollection::LoadAndSelect::OnlyIfModified, + file_version, + filament_id); + any_modified |= modified; + this->filament_presets[i] = loaded->name; + } } - } + } // !is_published - // 4) Load the project config values (the per extruder wipe matrix etc). - this->project_config.apply_only(config, s_project_options); + // Load the project config values. In published mode only the plate/bed geometry keys + // cross over (the receiver must not inherit the author's filament/purge data). + this->project_config.apply_only(config, is_published ? s_project_options_published : s_project_options); break; } @@ -5062,18 +5452,1143 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool this->update_compatible(PresetSelectCompatibleType::Never); this->update_multi_material_filament_presets(); + // A "published" 3MF project overlays the author-selected published keys onto the user's + // currently-selected (edited) process preset. Keys that cannot be applied are collected for + // notification; filament-class keys in published_keys (which only the material pass knows + // how to apply) fall through into skipped_keys. + if (is_published) { + std::vector skipped_keys; + std::set applied_keys; + // Only re-select the edited filament preset when the material overlay changed + // something: re-selecting unconditionally would discard the user's unsaved in-memory + // filament edits when the published file touches nothing. + bool material_applied = false; + // Structural keys are never applied (they would rewrite the user's preset + // inheritance/structure). Defense-in-depth: a hand-crafted 3MF could list them despite + // the dialog, so skip them here too. + const std::set& structural_keys = publish_structural_keys(); + // The printer overlay is restricted to the publishable retraction/z-hop allowlist; + // printer-class keys outside it are contract-excluded (never applied, never reported). + const std::set& printer_allowlist = publishable_printer_keys(); + const std::vector& printer_options = Preset::printer_options(); + const std::set printer_option_set(printer_options.begin(), printer_options.end()); + std::set contract_excluded_keys; + auto apply_published = [&](DynamicPrintConfig& target, const std::set* allowlist) { + // Single-extruder receivers collapse a base key's per-extruder "#N" variants onto + // their single slot: only the first serialized variant of a base key is applied + // (the author's "left or right" whichever came first), the rest are reported as + // skipped. Per-target, so the process and printer passes each track their own bases. + std::set collapsed_bases; + for (const std::string& key : published_config->published_keys) { + if (applied_keys.count(key) != 0) + continue; // already applied + // A '#' suffix denotes a variant key; resolve the base key. + const std::string base_key = publish_base_key(key); + // Structural keys are never applied (not "skipped due to mismatch"), so bail + // out before the applied/skipped bookkeeping. + if (structural_keys.count(base_key) != 0) + continue; + if (allowlist != nullptr && printer_option_set.count(base_key) != 0 && allowlist->count(base_key) == 0) { + // Printer-class key outside the publishable allowlist: contract-excluded. + contract_excluded_keys.insert(base_key); + continue; + } + const ConfigOption* src_opt = config.option(base_key); + if (src_opt == nullptr) + continue; // key not present in the loaded config; record later + if (src_opt->is_vector()) { + ConfigOption* dst_opt = target.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector()) + continue; // cannot apply; will be reported as skipped + // Type mismatch: ConfigOptionVector::set() throws ConfigurationError on a + // mismatch, which would abort the whole project load; report the key as + // skipped instead (the material pass guards the same way). Note that the + // nullable variants report the same type() as their non-nullable base, so + // this catches genuinely different option kinds (e.g. a string where a float + // vector is expected), not nullable-ness. + if (dst_opt->type() != src_opt->type()) + continue; + // A '#N' variant key (e.g. per-extruder retraction_length#2) applies one + // element, so the index only needs to be in range on the author's side - the + // receiver may have a different extruder count than the author. Out-of-range + // indices are skipped (set_at would otherwise resize the receiver's vector). + if (key.size() > base_key.size()) { + // Strict numeric suffix parse: a malformed variant ("#abc", "#1x") + // must be reported as skipped, not silently applied as element 0. + const std::string suffix = key.substr(base_key.size() + 1); + size_t idx = 0; + bool valid = !suffix.empty(); + for (const char c : suffix) { + if (c < '0' || c > '9') { + valid = false; + break; + } + idx = idx * 10 + size_t(c - '0'); + if (idx > 1000000) { // overflow guard; real vector sizes are tiny + valid = false; + break; + } + } + const size_t src_size = static_cast(src_opt)->size(); + if (!valid || idx >= src_size) + continue; // malformed or out-of-range on the author's side: cannot apply; reported as skipped + const size_t dst_size = static_cast(dst_opt)->size(); + if (dst_size == 1) { + // Single-extruder receiver: collapse the author's per-extruder slots + // onto the receiver's single slot. Only the first serialized variant + // of a base key is applied (the author's "left or right" whichever was + // published first); later variants of the same base are reported as + // skipped, mirroring the receiver's single extruder. + if (collapsed_bases.count(base_key) != 0) + continue; + collapsed_bases.insert(base_key); + static_cast(dst_opt)->set_at(src_opt, 0, idx); + } else { + if (idx >= dst_size) + continue; // out-of-range variant: cannot apply; reported as skipped + target.apply_only(config, {key}, true); + } + } else if (static_cast(src_opt)->size() != + static_cast(dst_opt)->size()) { + // Whole-vector base key: the receiver must have a matching vector size, + // otherwise applying would overwrite a different number of elements. + continue; // cannot apply; will be reported as skipped + } else { + target.apply_only(config, {key}, true); + } + applied_keys.insert(key); + } else { + // A scalar key cannot carry a '#N' suffix; a hand-crafted file listing one + // is reported as skipped instead of being silently marked applied. + if (key.find('#') != std::string::npos) + continue; + // Scalar key: apply only if present on the user's machine. + const ConfigOption* dst_opt = target.option(base_key); + if (dst_opt == nullptr) + continue; // not present on the edited preset; will be reported as skipped + // Type mismatch: skipped, never thrown (see the vector branch above). + if (dst_opt->type() != src_opt->type()) + continue; + target.apply_only(config, {key}, true); + applied_keys.insert(key); + } + } + }; + apply_published(this->prints.get_edited_preset().config, nullptr); + apply_published(this->printers.get_edited_preset().config, &printer_allowlist); + + // Material pass: positional per-slot entries. The author published, per slot, either the + // entire filament (full) or specific keys plus optionally a curated type and/or colour. + // - full: lands on a freshly created standalone detached copy (no library preset used + // or mutated); + // - partial: a type requirement gates application; on mismatch the slot is replaced + // with the best visible candidate by published identity (exact name, setting_id, + // filament_id, vendor+type, type); with no replacement the receiver's material is + // kept and the keys are reported as skipped; + // - colour: applied regardless of the type gate. + // - capacity: past the printer's physical nozzles the entry becomes an empty + // mixed-filament placeholder; on a single-physical-slot receiver it is dropped. + // Applied partial values land on the collection's edited layer when the slot references + // it and that layer survives the load, otherwise on the stored preset in place. Slots + // aliasing a shared preset are re-pointed at distinct presets before the values apply. + { + // Grow the receiver's slots only as far as the highest published slot (never + // shrink, never pull filler materials for unpublished slots). + bool has_published_entries = false; + // Physical filament capacity of the receiver's printer: a non-SEMM tool-changer + // feeds filament N from nozzle N, so the nozzle count is the hard limit; a SEMM + // printer (single_extruder_multi_material) sizes its slot list by hand, so only + // the global slot limit applies (same condition as GUI_App::load_current_presets). + // Published entries that would need a NEW physical slot past this capacity are + // appended as empty mixed-filament placeholders instead of growing the list. + size_t physical_capacity = size_t(EnforcerBlockerType::ExtruderMax); + { + const Preset& receiver_printer = this->printers.get_edited_preset(); + if (receiver_printer.printer_technology() == ptFFF && + !receiver_printer.config.opt_bool("single_extruder_multi_material")) { + if (const auto* nozzle_diameter = receiver_printer.config.option("nozzle_diameter"); + nozzle_diameter != nullptr && !nozzle_diameter->values.empty()) + physical_capacity = nozzle_diameter->values.size(); + } + } + const std::set& mixed_definitions = publish_mixed_keys(); + auto is_mixed_definition = [&mixed_definitions](const PublishedMaterialEntry& entry) { + return std::any_of(entry.keys.begin(), entry.keys.end(), [&](const std::string& key) { + return mixed_definitions.count(publish_base_key(key)) != 0; + }); + }; + size_t grow_target = 0; + for (const PublishedMaterialEntry& entry : published_config->material_keys) { + has_published_entries = true; + if (entry.slot < 0) + continue; + // A physical entry past the capacity becomes a tail placeholder below; its + // growth is covered by the append counter, not the positional target. + if (!is_mixed_definition(entry) && size_t(entry.slot) >= physical_capacity) + continue; + grow_target = std::max(grow_target, size_t(entry.slot) + 1); + } + // Mixed-filament definitions live in project-level virtual slots, so applying one + // positionally onto a receiver slot holding a real filament would convert hardware + // state into a virtual mix. Compute each entry's destination before anything + // consumes entry.slot: a definition on a slot that already holds a mixed definition + // keeps its place (like-for-like); everything else follows one monotone append + // counter preserving author order (dest = max(authored, next_free)). Appends past + // the extruder limit are dropped and reported. Physical entries past capacity join + // the same counter as mixed_placeholder empties the GUI flags for assignment. + // + // The finished project keeps the physical-first invariant (see the sidebar's + // add_custom_filament: mixed slots always sit at the tail, physical slots packed + // first). That invariant must survive an import, so every receiver mixed slot that + // would end up inside (or ahead of) the incoming physical region is displaced to a + // fresh tail slot, and the tail allocator starts at the physical boundary rather + // than the receiver's slot count - otherwise a relocated mix can collide with a + // keep-placed new real slot. + size_t physical_boundary = this->num_physical_filaments(); + for (const PublishedMaterialEntry& entry : published_config->material_keys) + // Mirror the payload-real keep-place decision below: a real keeps its authored + // slot when that slot already exists on the receiver, or lies within the + // printer's physical capacity. Both end up as physical slots at index + // entry.slot, so they bound the physical region even past the capacity. + if (entry.slot >= 0 && !is_mixed_definition(entry) && + (size_t(entry.slot) < this->filament_presets.size() || size_t(entry.slot) < physical_capacity)) + physical_boundary = std::max(physical_boundary, size_t(entry.slot) + 1); + size_t next_free_slot = std::max(physical_boundary, this->filament_presets.size()); + bool any_mixed_relocated = false; + // All authored-slot -> destination moves decided by this pass, applied to the + // incoming config in one batched snapshot step below (an earlier move's + // destination can overlap a later move's source: adjacent tail mixes relocate + // onto consecutive slots, so incremental in-place shifts would overwrite a + // definition that has not been moved yet). + std::vector> mixed_moves; + // Receiver-mix relocations land in project_config, not the incoming config, so they + // get their own move list, applied below after the arrays grow. The swept set lets + // the payload loop below treat a displaced receiver mix as the physical slot it will + // become (a payload mix like-for-like overriding such a slot must itself relocate). + std::vector> receiver_mix_moves; + std::set swept_mix_slots; + for (size_t slot = 0; slot < this->filament_presets.size(); ++slot) { + if (!this->is_mixed_filament(slot)) + continue; + // Slot 0 is the receiver's base filament and is never a virtual mix; the + // sidebar's physical-first layout guarantees it, so never displace it. + if (slot == 0) + continue; + if (slot >= physical_boundary) + continue; // already lives in the tail region + const size_t dest = next_free_slot++; + swept_mix_slots.insert(slot); + receiver_mix_moves.emplace_back(slot, dest); + any_mixed_relocated = true; + // A payload mix authored at the same slot (a mix inside the physical region) is + // processed after this sweep and overrides its own destination below. + published_config->mixed_slot_relocations.insert_or_assign(int(slot), int(dest)); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + " -> slot " + + std::to_string(dest) + ": mixed filament"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated receiver mixed filament slot " << slot + << " -> " << dest << " (physical-first rebalance)"; + } + for (auto entry_it = published_config->material_keys.begin(); entry_it != published_config->material_keys.end();) { + PublishedMaterialEntry& entry = *entry_it; + if (entry.slot < 0) { + ++entry_it; + continue; + } + const bool is_payload_mix = is_mixed_definition(entry); + // Does this entry need a tail slot at all? A payload mixed definition does, + // except when it like-for-like overrides a receiver slot that is already a + // mix (bounds-checked). A physical entry only becomes a placeholder when it + // would need a NEW physical slot: an authored position the receiver's list + // already covers is applied positionally as before, even when that list sits + // above the printer's capacity (pre-existing state is never shrunk). + bool keep_place = false; + if (is_payload_mix) + keep_place = this->is_mixed_filament(size_t(entry.slot)) && swept_mix_slots.count(size_t(entry.slot)) == 0; + else + keep_place = size_t(entry.slot) < this->filament_presets.size() || + size_t(entry.slot) < physical_capacity; + if (keep_place) { + ++entry_it; + continue; + } + const std::string material_label = !entry.filament_id.empty() ? entry.filament_id : + !entry.publish_type_value.empty() ? entry.publish_type_value : + entry.filament_type; + if (std::max(size_t(entry.slot), next_free_slot) >= size_t(EnforcerBlockerType::ExtruderMax)) { + // No free virtual slot left: report instead of destroying a real filament. + // The local skipped_keys is published wholesale at the end of the pass; + // writing published_config->skipped_keys here would be clobbered by it. + skipped_keys.emplace_back("material:" + material_label + (is_payload_mix ? + " (mixed filament definition: filament slot limit reached)" : + " (filament slot limit reached)")); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF " << (is_payload_mix ? "mixed filament definition" : "material") + << " from slot " << entry.slot << " could not be placed: all " << next_free_slot + << " slots exhausted"; + entry_it = published_config->material_keys.erase(entry_it); + continue; + } + if (!is_payload_mix && physical_capacity < 2) { + // A single physical slot can never host a mixed-filament editor (the + // sidebar's mixed section needs two physical filaments to mix), so a + // placeholder would be invisible and unfixable: drop the entry and + // report it like any other unappliable input. + skipped_keys.emplace_back("material:" + material_label + " (printer supports only " + + std::to_string(physical_capacity) + " filament)"); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF material from slot " << entry.slot + << " dropped: printer supports only " << physical_capacity << " filament"; + entry_it = published_config->material_keys.erase(entry_it); + continue; + } + const int authored_slot = entry.slot; + const int dest_slot = is_payload_mix ? int(std::max(size_t(authored_slot), next_free_slot)) : int(next_free_slot); + next_free_slot = size_t(dest_slot) + 1; + if (is_payload_mix) { + if (dest_slot == authored_slot) + // Uncontended fresh tail slot: the definition is already readable there. + ++entry_it; + else { + entry.slot = dest_slot; + any_mixed_relocated = true; + mixed_moves.emplace_back(size_t(authored_slot), size_t(entry.slot)); + published_config->mixed_slot_relocations.insert_or_assign(authored_slot, entry.slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(authored_slot) + " -> slot " + + std::to_string(entry.slot) + ": mixed filament"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF relocated mixed filament slot " << authored_slot + << " -> " << entry.slot; + ++entry_it; + } + } else { + // Surplus published material beyond the printer's capacity: become an + // empty mixed-filament placeholder at the next free tail slot. The flag + // routes the entry to the placeholder finalize below; the slot's + // definition stays empty until the user assigns components. + entry.mixed_placeholder = true; + any_mixed_relocated = true; + if (dest_slot != authored_slot) { + entry.slot = dest_slot; + mixed_moves.emplace_back(size_t(authored_slot), size_t(dest_slot)); + published_config->mixed_slot_relocations.insert_or_assign(authored_slot, dest_slot); + } + published_config->material_replacements.emplace_back( + (dest_slot != authored_slot ? + "slot " + std::to_string(authored_slot) + " -> slot " + std::to_string(dest_slot) : + "slot " + std::to_string(dest_slot)) + + ": unassigned mixed filament (printer supports only " + std::to_string(physical_capacity) + " filaments)"); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF material from slot " << authored_slot + << " placed as an unassigned mixed filament at slot " << dest_slot + << " (printer supports only " << physical_capacity << " filaments)"; + ++entry_it; + } + } + if (!mixed_moves.empty()) + for (const std::string& mixed_key : mixed_definitions) + apply_mixed_config_relocations(config, mixed_key, mixed_moves); + if (has_published_entries) { + // Defensive cap: growth never exceeds the file's own filament count. The + // receiver's current slot count is a floor: neither the preset list nor the + // project vectors are ever shrunk, even when the file carries fewer filaments + // than the receiver has slots. Relocated mixed entries and capacity + // placeholders legitimately land past the file's own slot count (virtual + // slots consume no nozzle or tray), so their append destinations lift the + // ceiling explicitly. + const size_t target_slots = std::max({this->filament_presets.size(), std::min(grow_target, num_filaments), + any_mixed_relocated ? next_free_slot : size_t(0)}); + // Slots carrying published content, steering the initial preset selection of + // newly grown slots. + std::set published_slots; + for (const PublishedMaterialEntry& entry : published_config->material_keys) + if (entry.slot >= 0) + published_slots.insert(entry.slot); + // Grown slots the receiver creates that carry no published content of their own + // (e.g. an unpublished mixed slot left as a gap by a published mix's authored + // position) at or beyond the receiver's physical capacity. They must not become + // physical filaments (that would overflow the nozzle count): finalized as empty + // mixed placeholders below, like the surplus-material placeholders. + std::set virtual_gap_slots; + // Exact-name resolution of each published slot's preset through the collection's + // own name machinery: find_preset2 follows renamed_from (vendor profile renames) + // and canonical bundle names, and auto-matches removed vendor-generic profiles + // to the Orca Filament Library. First entry per slot wins (mirrors the loops' + // break-on-first behavior); an empty value means "no resolution" and the string + // tiers (raw name / trimmed bare name / alias) below take over. + std::map exact_name_by_slot; + for (const PublishedMaterialEntry& entry : published_config->material_keys) + if (entry.slot >= 0 && !entry.preset_name.empty() && exact_name_by_slot.count(entry.slot) == 0) + if (const Preset* resolved = this->filaments.find_preset2(entry.preset_name, true)) + exact_name_by_slot.emplace(entry.slot, resolved->name); + auto resolved_name_for = [&exact_name_by_slot](int slot) -> std::string { + const auto it = exact_name_by_slot.find(slot); + return it == exact_name_by_slot.end() ? std::string() : it->second; + }; + // Mirror first_visible_idx()'s start index so suppressed default presets are + // never picked as a slot material. + const size_t first_candidate = this->filaments.is_default_suppressed() ? this->filaments.num_default_presets() : 0; + // Candidate preference for a published entry: exact preset name (raw author and + // collection-resolved), then trimmed bare form / alias, then exact setting_id + // (variant-level), then exact filament_id, then vendor+type, then type only. + auto candidate_score = [](const Preset& candidate, const PublishedMaterialEntry& entry, + const std::string& resolved_name) -> int { + // Exact preset name: raw and collection-resolved forms both outrank the + // fuzzy bare/alias tier by tier value, so a receiver preset literally named + // "Generic PLA" (tier 4) can never beat the author's exact + // "Generic PLA @Vendor" (tier 5). Within one tier the strict ">" + // comparison keeps the first candidate in collection order. + if (!entry.preset_name.empty() && candidate.name == entry.preset_name) + return 5; + if (!resolved_name.empty() && candidate.name == resolved_name) + return 5; + if (!entry.preset_name.empty()) { + std::string bare_name = entry.preset_name.substr(0, entry.preset_name.find('@')); + boost::trim_right(bare_name); + if (!bare_name.empty() && + (candidate.alias == entry.preset_name || candidate.name == bare_name || candidate.alias == bare_name)) + return 4; + } + if (!entry.setting_id.empty() && candidate.setting_id == entry.setting_id) + return 3; + const ConfigOptionStrings* types = candidate.config.opt("filament_type"); + const ConfigOptionStrings* vendors = candidate.config.opt("filament_vendor"); + const std::string type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : std::string(); + const std::string vendor = (vendors != nullptr && !vendors->values.empty()) ? vendors->get_at(0) : std::string(); + if (!entry.filament_id.empty() && candidate.filament_id == entry.filament_id) + return 2; + // Tier 0/1 family gate: the explicit type requirement when published as + // such, otherwise the entry's own material family - so identity scoring + // also applies to entries published without a checked Type row. + const std::string required_type = !entry.publish_type_value.empty() ? entry.publish_type_value : + normalize_filament_type(entry.filament_type); + if (!required_type.empty() && normalize_filament_type(type) == required_type) { + if (!entry.filament_vendor.empty() && vendor == entry.filament_vendor) + return 1; + return 0; + } + return -1; + }; + while (this->filament_presets.size() < target_slots) { + const size_t new_slot_idx = this->filament_presets.size(); + std::string initial_preset; + if (new_slot_idx >= physical_capacity && published_slots.count(static_cast(new_slot_idx)) == 0) + // An unpublished grown slot past the printer's physical capacity cannot + // host a real filament: finalize it as a virtual placeholder below. + virtual_gap_slots.insert(static_cast(new_slot_idx)); + if (published_slots.count(static_cast(new_slot_idx)) != 0) { + // Grow the slot the way the sidebar "add filament" does: seed it with + // the receiver's last preset. + if (!this->filament_presets.empty()) + initial_preset = this->filament_presets.back(); + } + if (initial_preset.empty()) + // Unpublished filler slot, or every visible preset is already used: + // repeat the receiver's last preset ("Add one filament" behaviour). + initial_preset = this->filament_presets.empty() ? this->filaments.first_visible().name : + this->filament_presets.back(); + this->filament_presets.emplace_back(initial_preset); + } + // Published slots that alias another slot (multi-extruder with one filament) + // get re-pointed at distinct presets: the overlay writes onto the slot's + // effective preset in place, so a shared preset would leak one slot's published + // values into every aliased slot. Slot 0 (the receiver's own material) is never + // re-assigned; when no unused candidate exists the aliasing stays (unavoidable). + auto referenced_elsewhere = [&](const std::string& preset_name, size_t except_slot) { + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (s != except_slot && this->filament_presets[s] == preset_name) + return true; + return false; + }; + for (size_t slot = 1; slot < this->filament_presets.size(); ++slot) { + if (published_slots.count(static_cast(slot)) == 0 || !referenced_elsewhere(this->filament_presets[slot], slot)) + continue; + // A slot whose published entry writes nothing into a shared preset in place + // keeps its own preset: de-aliasing would needlessly swap the material. Only + // keys routed to the slot's preset can leak across an aliased slot (colour is + // slot-scoped via project_config; a type requirement is handled by the + // type-gate below; full detaches separately). Mixed-definition keys go to the + // per-slot project arrays, never the preset. + bool writes_preset_keys = false; + for (const PublishedMaterialEntry& entry : published_config->material_keys) { + if (entry.slot != static_cast(slot)) + continue; + for (const std::string& key : entry.keys) + if (mixed_definitions.count(publish_base_key(key)) == 0) { + writes_preset_keys = true; + break; + } + if (writes_preset_keys) + break; + } + if (!writes_preset_keys) + continue; + // Prefer the best distinct candidate for the slot's published material + // (exact id, then vendor+type, then type only), compatible presets first... + std::string replacement; + int best_score = -1; + for (const PublishedMaterialEntry& entry : published_config->material_keys) { + // Scored for every entry with an identity, not only when a Type + // requirement was checked (same as the growth seeding above). + if (entry.slot != static_cast(slot)) + continue; + const std::string resolved_name = resolved_name_for(entry.slot); + auto scan = [&](bool compatible_only) -> std::pair { + int best_score = -1; + std::string best_name; + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset& candidate = this->filaments.preset(i); + if (compatible_only && !candidate.is_compatible) + continue; + const int score = candidate_score(candidate, entry, resolved_name); + // Exact identity tiers (name / setting_id) may use a hidden preset; + // the referenced check stays: re-pointing exists to de-alias. + if (score < 3 && !candidate.is_visible) + continue; + if (referenced_elsewhere(candidate.name, size_t(-1))) + continue; + if (score > best_score) { + best_score = score; + best_name = candidate.name; + } + } + return {best_score, best_name}; + }; + const auto [compat_score, compat_name] = scan(true); + const auto [any_score, any_name] = scan(false); + if (compat_score >= 0) { + best_score = compat_score; + replacement = compat_name; + } else if (any_score >= 0) { + best_score = any_score; + replacement = any_name; + } + if (best_score >= 0) + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": published 3MF re-pointed slot " << slot << " to " << replacement + << " (score " << best_score << ", preset_name \"" << entry.preset_name << "\", type \"" + << entry.publish_type_value << "\")"; + break; + } + // ...otherwise any distinct visible preset not referenced by another slot, + // preferring the published material's own family when it is known. + if (replacement.empty()) { + std::string slot_family; + for (const PublishedMaterialEntry& entry : published_config->material_keys) + if (entry.slot == static_cast(slot)) { + slot_family = !entry.publish_type_value.empty() ? entry.publish_type_value : + normalize_filament_type(entry.filament_type); + break; + } + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset& candidate = this->filaments.preset(i); + if (!candidate.is_visible || referenced_elsewhere(candidate.name, size_t(-1))) + continue; + if (!slot_family.empty()) { + const ConfigOptionStrings* types = candidate.config.opt("filament_type"); + const std::string cand_type = (types != nullptr && !types->values.empty()) ? types->get_at(0) : + std::string(); + if (normalize_filament_type(cand_type) != slot_family) + continue; + } + replacement = candidate.name; + break; + } + } + if (replacement.empty()) + continue; // every visible preset is referenced: aliasing is unavoidable + const std::string aliased_name = this->filament_presets[slot]; + this->filament_presets[slot] = replacement; + material_applied = true; + // The re-point used to be silent; surface it like the other slot changes. + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + ": " + aliased_name + " -> " + + replacement); + } + // Grow the per-slot colour/type/map project vectors to the new slot count and + // seed the new entries so the slots render with colours instead of blank chips + // (mirrors set_num_filaments; existing values are left untouched). + ConfigOptionStrings* proj_colour = this->project_config.opt("filament_colour"); + ConfigOptionStrings* proj_multi_colour = this->project_config.opt("filament_multi_colour"); + ConfigOptionStrings* proj_colour_type = this->project_config.opt("filament_colour_type"); + ConfigOptionInts* proj_map = this->project_config.opt("filament_map"); + ConfigOptionInts* proj_nozzle_map = this->project_config.opt("filament_nozzle_map"); + ConfigOptionInts* proj_volume_map = this->project_config.opt("filament_volume_map"); + const size_t old_colour_count = (proj_colour != nullptr) ? proj_colour->values.size() : 0; + // Grow-only: an already-larger project vector is left untouched (the receiver's + // slot count never shrinks below its own setup). + if (proj_colour && proj_colour->values.size() < target_slots) + proj_colour->resize(target_slots); + if (proj_multi_colour && proj_multi_colour->values.size() < target_slots) + proj_multi_colour->values.resize(target_slots); + if (proj_colour_type && proj_colour_type->values.size() < target_slots) + proj_colour_type->values.resize(target_slots); + if (proj_map && proj_map->values.size() < target_slots) + proj_map->values.resize(target_slots, 1); + if (proj_nozzle_map && proj_nozzle_map->values.size() < target_slots) + proj_nozzle_map->values.resize(target_slots, 0); + if (proj_volume_map && proj_volume_map->values.size() < target_slots) + proj_volume_map->values.resize(target_slots, static_cast(NozzleVolumeType::nvtStandard)); + // The mixed-color project arrays are parallel per-slot like filament_colour; + // grow them in lockstep so a published mix slot has room for its definition. + // Defaults mirror set_num_filaments (false / empty string). + if (auto* opt = this->project_config.opt("filament_is_mixed")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); + if (auto* opt = this->project_config.opt("filament_mixed_components")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_sublayer_ratios")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_range")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_curve")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, std::string{}); + if (auto* opt = this->project_config.opt("filament_mixed_gradient_per_part")) + if (opt->values.size() < target_slots) + opt->values.resize(target_slots, false); + if (this->ams_multi_color_filment.size() < target_slots) + this->ams_multi_color_filment.resize(target_slots); + for (size_t slot = old_colour_count; slot < target_slots; ++slot) { + std::string seed; + for (const PublishedMaterialEntry& entry : published_config->material_keys) + if (entry.slot == static_cast(slot) && entry.publish_color && !entry.color.empty()) { + seed = entry.color; + break; + } + if (seed.empty()) { + if (const Preset* preset = this->filaments.find_preset(this->filament_presets[slot], false)) { + const ConfigOptionStrings* colours = preset->config.opt("filament_colour"); + if (colours != nullptr && !colours->values.empty()) + seed = colours->values.front(); + } + if (seed.empty()) { + // Fall back to the option's registered default instead of a + // duplicated literal; if the lookup fails the chip stays blank. + if (const ConfigOptionDef* colour_def = print_config_def.get("filament_colour")) + if (const auto* default_colours = dynamic_cast(colour_def->default_value.get())) + if (!default_colours->values.empty()) + seed = default_colours->values.front(); + } + } + if (proj_colour && slot < proj_colour->values.size()) + proj_colour->values[slot] = seed; + if (proj_multi_colour && slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = seed; + if (proj_colour_type && slot < proj_colour_type->values.size()) + proj_colour_type->values[slot] = "1"; // default colour type + } + // Rebuild the flush volumes for the grown slot count (as set_num_filaments does). + this->update_multi_material_filament_presets(); + + auto apply_slot_keys = [&](DynamicPrintConfig& preset_config, const std::vector& slot_keys, int author_slot, + const std::string& material_label) { + for (const std::string& key : slot_keys) { + const std::string base_key = publish_base_key(key); + if (structural_keys.count(base_key) != 0) + continue; + const ConfigOption* src_opt = config.option(base_key); + if (src_opt == nullptr || !src_opt->is_vector() || author_slot < 0 || + author_slot >= static_cast(static_cast(src_opt)->size())) { + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + ConfigOption* dst_opt = preset_config.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector() || static_cast(dst_opt)->empty() || + dst_opt->type() != src_opt->type()) { + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + // Per-slot scalar copy: the receiver preset holds one value per key + // (vector of size 1), the file holds the per-slot vector. + static_cast(dst_opt)->set_at(src_opt, 0, author_slot); + material_applied = true; + } + }; + + // The slot's values are applied onto the slot's effective preset (the + // collection's edited layer when the slot references it, otherwise the stored + // preset in place); the per-entry type gate below may re-point the slot first. + // + // The edited layer only survives the load when the final re-select below stays + // off, i.e. slot 0's preset still matches the edited preset. Otherwise the + // re-select re-snapshots the edited layer from a stored preset and silently + // discards everything written there: route the overlay to the stored presets + // instead so the values survive. (Residual edge: a slot-0 type replacement + // re-pointing slot 0 mid-loop can still invalidate the layer after earlier + // slots wrote to it; that compound case is not chased.) + const bool edited_survives_load = this->filament_presets.empty() || + this->filament_presets.front() == this->filaments.get_edited_preset().name; + // Displaced receiver mixes (see the physical-first rebalance above): move their + // per-slot cells onto the grown tail slots and reset the vacated physical slots, + // so the incoming real filaments can claim them. Runs before mixed_final_slots is + // built, so the rebalanced layout is what the mix validation sees. + apply_receiver_mix_relocations(this->project_config, this->ams_multi_color_filment, receiver_mix_moves); + // Final layout for mix-definition validation: every slot that will hold a + // mixed definition once this load completes - the receiver's own virtual + // slots, each published mixed entry's final (possibly relocated) slot, and + // each capacity placeholder (they become mixes in the finalize below, before + // this loop's is_mixed_filament scan would see them). Mix components are + // 1-based slot numbers, so a component is valid only when the slot it names + // exists and does not itself hold a mixed filament. + std::set mixed_final_slots; + for (const PublishedMaterialEntry& mix_entry : published_config->material_keys) + if (mix_entry.slot >= 0 && (is_mixed_definition(mix_entry) || mix_entry.mixed_placeholder)) + mixed_final_slots.insert(mix_entry.slot); + for (size_t i = 0; i < this->filament_presets.size(); ++i) + if (this->is_mixed_filament(i)) + mixed_final_slots.insert(int(i)); + // Unpublished gap slots past the capacity are virtual too: count them in the + // final layout so a published mix whose components collide with one is caught. + for (int gap_slot : virtual_gap_slots) + mixed_final_slots.insert(gap_slot); + const size_t mixed_final_slot_count = this->filament_presets.size(); + // Finalize a slot as an empty mixed-filament placeholder: mark it virtual with + // an intentionally empty definition, and add it to the final-layout set so a + // later entry's components validate against the new state. Used by the capacity + // placeholders and by any mixed definition that has to be rejected after its + // slot was already grown and seeded - without it such a slot would keep the + // seeded preset and masquerade as a real filament. No definition is written: + // the placeholder carries no material of its own (the GUI flags the empty mix + // via check_mixed_filament_integrity and blocks slicing until components are + // assigned). The slot's colour was already seeded by the growth pass above. + auto finalize_mixed_placeholder = [&](size_t slot_idx) { + if (ConfigOptionBools* is_mixed_opt = this->project_config.opt("filament_is_mixed"); + is_mixed_opt != nullptr && slot_idx < is_mixed_opt->values.size()) + is_mixed_opt->values[slot_idx] = true; + mixed_final_slots.insert(int(slot_idx)); + material_applied = true; + }; + // Full Publish within-load dedup: identical Full materials (same setting_id + // + preset_name identity) share one created instance, so an author who + // pointed two slots at one preset yields one standalone copy here. + std::map published_full_dedup; + for (const PublishedMaterialEntry& entry : published_config->material_keys) { + if (entry.slot < 0 || size_t(entry.slot) >= this->filament_presets.size()) + continue; // out of range: nothing to do for this slot + const size_t slot = size_t(entry.slot); + + // Surplus published material beyond the printer's capacity: finalize the + // tail placeholder - mark the slot virtual with an intentionally empty + // definition. The GUI flags the empty mix (check_mixed_filament_integrity) + // and blocks slicing until the user assigns components from their own + // filaments. The entry's keys are deliberately not applied and no preset + // is detached: the placeholder carries no material of its own. The colour + // was already seeded into the project arrays by the growth pass above. + if (entry.mixed_placeholder) { + finalize_mixed_placeholder(slot); + continue; + } + + // Resolve the stored preset itself (real=true), never the edited snapshot: + // find_preset would return &m_edited_preset for the selected slot. The + // overlay target below decides between the edited layer and this preset. + Preset* recv = this->filaments.find_preset(this->filament_presets[slot], false, true); + if (recv == nullptr) { + // Defensive: the slot exists (grown and seeded above) but its preset + // could not be resolved. A mixed definition left unapplied on such a + // slot would keep the seeded preset and look like a real filament: + // finalize it as an empty placeholder instead, like a rejected + // definition below. + if (is_mixed_definition(entry) && !this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported"); + } + continue; + } + + const std::string material_label = entry.filament_id.empty() ? + (entry.publish_type_value.empty() ? entry.filament_type : + entry.publish_type_value) : + entry.filament_id; + + // Import-side validation of a mixed-filament definition: the publish + // dialog cannot produce a definition whose components reference slots + // that do not exist or hold other mixed filaments, so a broken one here + // means the payload itself is broken (hand-crafted or corrupt file). + // Report it through the same channel as every other rejected input and + // skip the entry, instead of shipping a mix the GUI integrity check + // (check_mixed_filament_integrity) would only flag later. A payload + // that omits the mixed arrays entirely is not an error here: the key + // routing below reports those per key as usual. + if (is_mixed_definition(entry)) { + std::string mix_error; + if (const ConfigOptionStrings* comp_opt = config.opt("filament_mixed_components"); + comp_opt != nullptr && entry.slot < static_cast(comp_opt->values.size())) { + const std::vector comps = parse_mixed_components(comp_opt->values[entry.slot]); + if (comps.size() < 2) + // An empty definition cell counts as broken too: applying it + // would ship a mix the sidebar would only flag later. + mix_error = "needs at least two components"; + else + for (unsigned int comp : comps) + if (comp < 1 || size_t(comp) > mixed_final_slot_count || + mixed_final_slots.count(int(comp) - 1) != 0) { + mix_error = "components reference missing slots"; + break; + } + } + if (!mix_error.empty()) { + skipped_keys.emplace_back("material:" + material_label + " (mixed filament definition: " + mix_error + ")"); + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": published 3MF mixed filament from slot " << entry.slot + << " rejected: " << mix_error; + // Degradation, not silent corruption: the slot was already grown and + // seeded by the pass above, so skipping the definition alone would + // leave it holding the seeded preset and looking like a real + // filament that carries the mix identity but no mix. + // - a slot that was NOT already a receiver mix is finalized as an + // empty mixed placeholder (consistent with the capacity + // placeholders; the user assigns components there); + // - a like-for-like override of the receiver's own mix leaves that + // valid definition untouched: nothing was applied, so the + // receiver's cells are intact and only the author's definition + // is reported as skipped above. + if (!this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported (" + + mix_error + ")"); + } + continue; + } + } + + // Full Publish: always create a standalone detached copy (even on exact + // identity match) as a "Preset Inside Project" (project-embedded: lives + // in this project only, never written to the library), universally + // compatible, named after the author's preset with its variant tail + // stripped ("(Published)" uniquification on collision). No existing + // preset is ever mutated. + if (entry.full) { + std::string dedup_key = entry.setting_id + std::string("\x1f") + entry.preset_name; + // Identity-less hand-crafted files (empty setting_id+name) must not + // collide: fall back to slot-scoped key so each slot gets its own copy + // unless the dedup above is meaningful. + if (dedup_key == std::string("\x1f")) + dedup_key = dedup_key + std::to_string(slot); + else if (!entry.filament_id.empty()) + dedup_key += std::string("\x1f") + entry.filament_id; + std::string new_name; + const auto dedup_it = published_full_dedup.find(dedup_key); + if (dedup_it != published_full_dedup.end()) { + new_name = dedup_it->second; + } else { + // Baseline: clone the receiver slot's stored preset config (schema- + // complete across versions), then overlay the published full_keys. + DynamicPrintConfig new_cfg = recv != nullptr ? recv->config : this->filaments.default_preset().config; + for (const std::string& key : entry.full_keys) { + const std::string base_key = publish_base_key(key); + if (structural_keys.count(base_key) != 0) + continue; + const ConfigOption* src_opt = config.option(base_key); + if (src_opt == nullptr || !src_opt->is_vector() || entry.slot < 0 || + entry.slot >= static_cast(static_cast(src_opt)->size())) + continue; + ConfigOption* dst_opt = new_cfg.option(base_key); + if (dst_opt == nullptr || !dst_opt->is_vector() || + static_cast(dst_opt)->empty() || dst_opt->type() != src_opt->type()) + continue; + static_cast(dst_opt)->set_at(src_opt, 0, entry.slot); + } + // The published colour is authoritative even for Full (the payload's + // filament_colour plus the explicit publish_color field). + if (entry.publish_color && !entry.color.empty()) { + if (ConfigOptionStrings* col = new_cfg.opt("filament_colour", true)) { + if (col->values.empty()) + col->values.emplace_back(); + col->values[0] = entry.color; + } + } + make_publish_universal(new_cfg); + // Naming: stripped variant tail ("Generic PLA @System" -> "Generic + // PLA"), then identity fallbacks; collisions uniquify with + // "(Published)" / "(Published N)" inside add_detached_preset. + std::string base_name = entry.preset_name.empty() ? std::string() : + publish_material_base_name(entry.preset_name); + if (base_name.empty()) { + base_name = !entry.filament_id.empty() ? + entry.filament_id : + (!entry.publish_type_value.empty() ? entry.publish_type_value : entry.filament_type); + if (base_name.empty()) + base_name = "Published Filament"; + } + new_name = this->filaments.add_detached_preset(base_name, std::move(new_cfg), entry.filament_id); + published_full_dedup.emplace(dedup_key, new_name); + } + const std::string old_name = this->filament_presets[slot]; + this->filament_presets[slot] = new_name; + material_applied = true; + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + ": " + old_name + " -> " + + new_name); + // Colour is slot-scoped and project-visible: sync into project_config + // (the copy already baked it, this makes the chips render). + if (entry.publish_color && !entry.color.empty()) { + if (ConfigOptionStrings* proj_colour = this->project_config.opt("filament_colour")) { + if (slot < proj_colour->values.size()) + proj_colour->values[slot] = entry.color; + } + if (ConfigOptionStrings* proj_multi_colour = this->project_config.opt( + "filament_multi_colour")) { + if (slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = entry.color; + } + } else if (proj_colour && new_name != old_name) { + // Fall back to the copy's colour so the chip is never blank: try + // the newly created preset's filament_colour, then the option default. + std::string seed; + if (const Preset* created = this->filaments.find_preset(new_name, false, true)) { + if (const ConfigOptionStrings* cols = created->config.opt("filament_colour")) + if (!cols->values.empty()) + seed = cols->values.front(); + } + if (seed.empty()) { + if (const ConfigOptionDef* colour_def = print_config_def.get("filament_colour")) + if (const auto* defaults = dynamic_cast(colour_def->default_value.get())) + if (!defaults->values.empty()) + seed = defaults->values.front(); + } + if (!seed.empty()) { + if (proj_colour && slot < proj_colour->values.size()) + proj_colour->values[slot] = seed; + if (proj_multi_colour && slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = seed; + } + } + if (proj_colour_type && slot < proj_colour_type->values.size()) + proj_colour_type->values[slot] = "1"; + continue; + } + + bool apply_slot = true; + // The gate compares against the slot's effective material type: the edited + // layer when the slot references the collection's edited preset and that + // layer will survive the load (see edited_survives_load below), the stored + // preset otherwise. + const DynamicPrintConfig& effective_config = (edited_survives_load && + recv->name == this->filaments.get_edited_preset().name) ? + this->filaments.get_edited_preset().config : + recv->config; + if (entry.publish_type && !entry.publish_type_value.empty()) { + // Null-guard: a malformed receiver preset may lack filament_type. + const ConfigOptionStrings* recv_types = effective_config.opt("filament_type"); + const std::string recv_type = (recv_types != nullptr && !recv_types->values.empty()) ? recv_types->get_at(0) : + std::string(); + if (normalize_filament_type(recv_type) != entry.publish_type_value) { + // Type mismatch: replace the slot with the best matching preset, + // scored by the published identity (exact preset name, then exact + // setting_id, exact filament_id, then vendor+type, then type only). + // A preset no other slot references wins on equal scores; a shared + // exact-material preset is taken even though mutating it also + // affects the other slot. Compatible presets are searched first: an + // incompatible preset is only picked when no compatible candidate + // exists at all. + auto find_best = [&](bool compatible_only) -> std::pair { + auto scan = [&](bool unreferenced_only) -> std::pair { + int best_score = -1; + std::string best_name; + const std::string resolved_name = resolved_name_for(entry.slot); + for (size_t i = first_candidate; i < this->filaments.size(); ++i) { + const Preset& candidate = this->filaments.preset(i); + if (compatible_only && !candidate.is_compatible) + continue; + const int score = candidate_score(candidate, entry, resolved_name); + if (score <= best_score) + continue; + // Lower tiers (vendor+type, type only) need a visible preset; + // an exact identity match (name / setting_id) wins even when + // the preset is hidden in the library. + if (score < 3 && !candidate.is_visible) + continue; + if (unreferenced_only) { + bool used = false; + for (size_t s = 0; s < this->filament_presets.size(); ++s) + if (s != slot && this->filament_presets[s] == candidate.name) { + used = true; + break; + } + if (used) + continue; + } + best_score = score; + best_name = candidate.name; + } + return {best_score, best_name}; + }; + const auto [strict_score, strict_name] = scan(true); + const auto [relaxed_score, relaxed_name] = scan(false); + if (relaxed_score > strict_score) + return {relaxed_score, relaxed_name}; + return {strict_score, strict_name}; + }; + const auto [compat_score, compat_name] = find_best(true); + const auto [any_score, any_name] = find_best(false); + int score = any_score; + std::string replacement = any_name; + if (compat_score >= 0) { + score = compat_score; + replacement = compat_name; + } + if (!replacement.empty()) { + const std::string old_name = recv->name; + this->filament_presets[slot] = replacement; + recv = this->filaments.find_preset(replacement, false, true); + material_applied = true; + BOOST_LOG_TRIVIAL(info) + << __FUNCTION__ << ": published 3MF slot " << slot << " material " << old_name << " -> " << replacement + << " (score " << score << ", preset_name \"" << entry.preset_name << "\", filament_id \"" + << entry.filament_id << "\", setting_id \"" << entry.setting_id << "\", type \"" + << entry.publish_type_value << "\")"; + std::string replacement_line = "slot " + std::to_string(slot) + ": " + old_name + " -> " + replacement; + // A pick that is not the exact published material is a substitute; + // an entry without identity fields cannot be judged, so it stays plain. + if (score < 2 && (!entry.filament_id.empty() || !entry.filament_vendor.empty())) + replacement_line += " (substitute)"; + published_config->material_replacements.emplace_back(std::move(replacement_line)); + } else { + // Partial publish with no replacement: keep the receiver's + // material and report the slot's keys as skipped. (Full entries + // never reach this gate: they detach above.) + for (const std::string& key : entry.keys) + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + apply_slot = false; + // A mixed definition left unapplied here would keep the grown + // slot's seeded preset and masquerade as a real filament: + // finalize it as an empty placeholder like a rejected + // definition (a like-for-like override of the receiver's own + // mix is left untouched). + if (is_mixed_definition(entry) && !this->is_mixed_filament(slot)) { + finalize_mixed_placeholder(slot); + published_config->material_replacements.emplace_back("slot " + std::to_string(slot) + + ": mixed filament definition could not be imported"); + } + } + } + } + + // The values below are applied onto the slot's effective preset: the edited + // layer when the slot references the collection's edited preset and that + // layer will survive the load (visible as a modification and revertible, + // preserving the user's unsaved edits), otherwise the stored preset it ended + // up on (original or partial type replacement), in place. Full entries never + // get here - they detach above. + DynamicPrintConfig& write_config = (edited_survives_load && recv->name == this->filaments.get_edited_preset().name) ? + this->filaments.get_edited_preset().config : + recv->config; + + // Colour is slot-scoped and independent of the type gate; it is also synced + // into project_config for GUI rendering. + if (entry.publish_color && !entry.color.empty()) { + // A mixed-definition entry carries the mix's blended colour for the + // swatch only: never write it into the slot's (possibly shared) preset + // config, only into the project-level colour arrays. + const bool is_mixed_entry = is_mixed_definition(entry); + if (!is_mixed_entry && recv != nullptr) { + // Create the key when the target preset lacks it: the colour is a + // requirement, not an override. + if (ConfigOptionStrings* colour = write_config.opt("filament_colour", true)) { + if (colour->values.empty()) + colour->values.emplace_back(); + colour->values[0] = entry.color; + material_applied = true; + } + } + if (ConfigOptionStrings* proj_colour = this->project_config.opt("filament_colour")) { + if (slot < proj_colour->values.size()) + proj_colour->values[slot] = entry.color; + } + if (ConfigOptionStrings* proj_multi_colour = this->project_config.opt( + "filament_multi_colour")) { + if (slot < proj_multi_colour->values.size()) + proj_multi_colour->values[slot] = entry.color; + } + } + + if (apply_slot && recv != nullptr) { + // Mixed-color definition keys live in project_config (parallel per-slot + // arrays), not in a filament preset; route them there. Normal keys keep + // the per-slot preset path below. + const std::set& mixed_keys = publish_mixed_keys(); + std::vector preset_keys; + for (const std::string& key : entry.keys) { + const std::string base_key = publish_base_key(key); + if (mixed_keys.count(base_key) != 0) { + const ConfigOption* src_opt = config.option(base_key); + if (src_opt != nullptr && src_opt->is_vector() && entry.slot >= 0 && + entry.slot < static_cast(static_cast(src_opt)->size())) { + if (ConfigOption* dst_opt = this->project_config.option(base_key)) { + if (dst_opt->is_vector() && dst_opt->type() == src_opt->type() && + slot < static_cast(dst_opt)->size()) { + static_cast(dst_opt)->set_at(src_opt, slot, entry.slot); + material_applied = true; + continue; + } + } + } + // The slot (or its arrays) could not be written: report rather + // than drop the mix silently. + skipped_keys.emplace_back("material:" + material_label + " (" + key + ")"); + continue; + } + preset_keys.emplace_back(key); + } + apply_slot_keys(write_config, preset_keys, entry.slot, material_label); + } + } + // Unpublished gap slots past the printer's physical capacity: the receiver grew + // them only to reach a published definition, so they must not become physical + // filaments (that would overflow the nozzle count). Finalize each as an empty + // mixed placeholder, exactly like the surplus-material placeholders above. + for (int gap_slot : virtual_gap_slots) + if (!this->is_mixed_filament(size_t(gap_slot))) { + finalize_mixed_placeholder(size_t(gap_slot)); + published_config->material_replacements.emplace_back( + "slot " + std::to_string(gap_slot) + + ": unassigned mixed filament (printer supports only " + std::to_string(physical_capacity) + " filaments)"); + } + } + } + + for (const std::string& key : published_config->published_keys) { + if (applied_keys.count(key) != 0) + continue; + const std::string base_key = publish_base_key(key); + // Structural keys are silently ignored, never reported as skipped: a hand-crafted + // 3MF must not trigger the "could not be applied" warning for them. + if (structural_keys.count(base_key) != 0) + continue; + // Printer-class keys outside the publishable allowlist are contract-excluded too. + if (contract_excluded_keys.count(base_key) != 0) + continue; + skipped_keys.emplace_back(key); + } + published_config->skipped_keys = std::move(skipped_keys); + + // The overlay lands on the edited layer only when it survives the load (slot 0's preset + // still matches the edited preset; see edited_survives_load) and on the stored presets + // otherwise. The edited preset is a snapshot taken when the preset was last selected, so + // a slot-0 preset change (type replacement) still needs a re-select to surface; when + // slot 0 is unchanged the edited layer already carries the overlay, and re-selecting + // would discard both it and the user's unsaved edits. + if (material_applied && !this->filament_presets.empty() && + this->filament_presets.front() != this->filaments.get_edited_preset().name) + this->filaments.select_preset_by_name(this->filament_presets.front(), false); + } + + //BBS //const std::string &physical_printer = config.option("physical_printer_settings_id", true)->value; const std::string physical_printer; - if (this->printers.get_edited_preset().is_external || physical_printer.empty()) { - this->physical_printers.unselect_printer(); - } else { - // Activate the physical printer profile if possible. - PhysicalPrinter *pp = this->physical_printers.find_printer(physical_printer, true); - if (pp != nullptr && std::find(pp->preset_names.begin(), pp->preset_names.end(), this->printers.get_edited_preset().name) != pp->preset_names.end()) - this->physical_printers.select_printer(pp->name, this->printers.get_edited_preset().name); - else + if (!is_published) { + if (this->printers.get_edited_preset().is_external || physical_printer.empty()) { this->physical_printers.unselect_printer(); + } else { + // Activate the physical printer profile if possible. + PhysicalPrinter *pp = this->physical_printers.find_printer(physical_printer, true); + if (pp != nullptr && std::find(pp->preset_names.begin(), pp->preset_names.end(), this->printers.get_edited_preset().name) != pp->preset_names.end()) + this->physical_printers.select_printer(pp->name, this->printers.get_edited_preset().name); + else + this->physical_printers.unselect_printer(); + } } //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished"); @@ -5253,9 +6768,11 @@ std::string PresetBundle::load_vendor_preset( return reason; } - auto file_path = (boost::filesystem::path(data_dir()) /PRESET_SYSTEM_DIR/ vendor_name / entry.sub_path).make_preferred(); - if(validation_mode) + auto file_path = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR / vendor_name / entry.sub_path).make_preferred(); + if (validation_mode) file_path = (boost::filesystem::path(data_dir()) / vendor_name / entry.sub_path).make_preferred(); + if (m_preserve_vendor_source_paths) + file_path = (boost::filesystem::path(path) / vendor_name / entry.sub_path).make_preferred(); // Load the preset into the list of presets, save it to disk. Preset &loaded = presets_collection->load_preset(file_path.string(), preset_name, std::move(config), false); @@ -5266,8 +6783,8 @@ std::string PresetBundle::load_vendor_preset( loaded.description = entry.description; loaded.setting_id = entry.setting_id; // Derive the preset setting_id on the fly when a profile ships without one, - // matching scripts/assign_vendor_setting_ids.py. Only instantiated presets - // carry an id; non-instantiated base profiles return earlier above. This never + // matching scripts/orca_profile_tool.py. Only instantiated presets carry an id; + // non-instantiated base profiles return earlier above. This never // touches the per-user cloud-sync setting_id written into user .info files. if (loaded.setting_id.empty() && entry.instantiation == "true") loaded.setting_id = generate_preset_setting_id( @@ -5321,7 +6838,8 @@ std::string PresetBundle::load_vendor_preset( //BBS: Load a config bundle file from json std::pair PresetBundle::load_vendor_configs_from_json( - const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle) + const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, + ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle, bool allow_cache) { // Enable substitutions for user config bundle, throw an exception when loading a system profile. ConfigSubstitutionContext substitution_context { compatibility_rule }; @@ -5339,7 +6857,7 @@ std::pair PresetBundle::load_vendor_configs_ // Orca: only a whole-vendor load has a cache — the vendor-only and filament-only // scans want a slice of one. Validation reads the JSONs whatever is cached. const boost::filesystem::path dir_path(dir); - const bool cacheable = flags.has(LoadConfigBundleAttribute::LoadSystem) && ! flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); + const bool cacheable = allow_cache && flags.has(LoadConfigBundleAttribute::LoadSystem) && ! flags.has(LoadConfigBundleAttribute::LoadFilamentOnly); if (cacheable && ! validation_mode && this->load_vendor_cache(dir_path, vendor_name, base_bundle)) { size_t presets_loaded = 0; for (const PresetCollection* coll : std::initializer_list{ @@ -6101,6 +7619,9 @@ bool PresetBundle::has_errors(bool check_duplicate_filament_subtypes) const if (this->check_preset_references()) has_errors = true; + if (this->check_printer_default_materials()) + has_errors = true; + return has_errors; } @@ -6193,6 +7714,70 @@ bool PresetBundle::check_preset_references() const return found; } +bool PresetBundle::check_printer_default_materials() const +{ + bool found = false; + // A model's default_materials list is shared by its variants, so report each unknown name once. + std::set checked_models; + // default_filament_profile is inherited from shared base machine presets, so one bad name can + // surface on many variants; report it once, at the first printer that names it. + std::set reported_unknown_profiles; + for (const Preset &printer : printers) { + if (!printer.is_system || printer.vendor == nullptr || printer.printer_technology() != ptFFF) + continue; + + const VendorProfile::PrinterModel *model = PresetUtils::system_printer_model(printer); + const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(printer); + // Use the same name lookup as load_installed_filaments, not UI aliases or fuzzy matching. + // A model's defaults can cover different nozzles, but at least one must cover this variant. + const bool has_default = model != nullptr && std::any_of(model->default_materials.begin(), model->default_materials.end(), + [&](const std::string &name) { + const Preset *filament = filaments.find_preset(name, false); + return filament != nullptr && filament->is_system && + is_compatible_with_printer(filaments.get_preset_with_vendor_profile(*filament), active_printer); + }); + if (!has_default) { + found = true; + BOOST_LOG_TRIVIAL(error) << "Printer preset \"" << printer.name << "\" (vendor \"" << printer.vendor->name + << "\", model \"" << printer.config.opt_string("printer_model") << "\", variant \"" + << printer.config.opt_string("printer_variant") + << "\") has no compatible system filament in its model's \"default_materials\". " + "Add at least one full filament preset name compatible with this printer variant:\n" + << preset_file_uri(printer.file); + } + + if (model != nullptr && checked_models.insert(model).second) { + for (const std::string &name : model->default_materials) { + const Preset *filament = filaments.find_preset(name, false); + if (filament == nullptr || !filament->is_system) { + found = true; + BOOST_LOG_TRIVIAL(error) << "Printer model \"" << model->name << "\" (vendor \"" << printer.vendor->name + << "\") names the unknown system filament \"" << name + << "\" in its \"default_materials\":\n" << preset_file_uri(printer.file); + } + } + } + + if (printer.config.has("default_filament_profile")) { + for (const std::string &name : printer.config.opt("default_filament_profile")->values) { + // A ";"-separated list can leave an empty trailing segment; formatting noise, not a name. + if (name.empty()) + continue; + const Preset *filament = filaments.find_preset(name, false); + if ((filament == nullptr || !filament->is_system) && reported_unknown_profiles.insert(name).second) { + found = true; + BOOST_LOG_TRIVIAL(error) << "Printer preset \"" << printer.name << "\" (vendor \"" << printer.vendor->name + << "\", model \"" << printer.config.opt_string("printer_model") << "\", variant \"" + << printer.config.opt_string("printer_variant") + << "\") names the unknown system filament \"" << name + << "\" in its \"default_filament_profile\":\n" << preset_file_uri(printer.file); + } + } + } + } + return found; +} + // Orca: a filament is matched from the AMS by (filament_id + printer compatibility). // For any one printer, at most one instantiated filament preset with a given // filament_id may be compatible - otherwise the AMS match is ambiguous and the @@ -6204,7 +7789,11 @@ bool PresetBundle::check_duplicate_filament_subtypes() const // inherited from its @base at load time), grouped by vendor so we only test a // printer against its own vendor's filaments. A vendor's compatible_printers // only names that vendor's printers, so same-vendor scoping is correctness - // preserving and avoids an O(all printers x all filaments) sweep. + // preserving and avoids an O(all printers x all filaments) sweep. The one + // exception is the Orca Filament Library: its presets have empty + // compatible_printers (= compatible with every printer, minus the alias-shadowing + // exclusions that is_compatible_with_printer checks via m_excluded_from), so they + // are tested against every vendor's printers as well. std::map> filaments_by_vendor; for (const auto &preset : filaments) { if (!preset.is_system || preset.filament_id.empty() || preset.vendor == nullptr) @@ -6212,20 +7801,29 @@ bool PresetBundle::check_duplicate_filament_subtypes() const filaments_by_vendor[preset.vendor->name].push_back(&preset); } + const std::vector no_filaments; + const auto library_it = filaments_by_vendor.find(ORCA_FILAMENT_LIBRARY); + const std::vector &library_filaments = library_it == filaments_by_vendor.end() ? no_filaments : library_it->second; + bool found_duplicates = false; for (const auto &printer : printers) { if (!printer.is_system || printer.vendor == nullptr) continue; auto vendor_it = filaments_by_vendor.find(printer.vendor->name); - if (vendor_it == filaments_by_vendor.end()) + const std::vector &vendor_filaments = vendor_it == filaments_by_vendor.end() ? no_filaments : vendor_it->second; + if (vendor_filaments.empty() && library_filaments.empty()) continue; const PresetWithVendorProfile active_printer = printers.get_preset_with_vendor_profile(printer); // std::map keeps the reported errors in a deterministic (sorted) order. std::map> by_filament_id; - for (const Preset *fil : vendor_it->second) + for (const Preset *fil : vendor_filaments) if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(*fil), active_printer)) by_filament_id[fil->filament_id].push_back(fil); + if (&vendor_filaments != &library_filaments) + for (const Preset *fil : library_filaments) + if (is_compatible_with_printer(filaments.get_preset_with_vendor_profile(*fil), active_printer)) + by_filament_id[fil->filament_id].push_back(fil); for (const auto &entry : by_filament_id) { if (entry.second.size() < 2) @@ -6233,9 +7831,15 @@ bool PresetBundle::check_duplicate_filament_subtypes() const found_duplicates = true; // List each conflicting preset with a clickable file:// URI on its own // line, so the profile author can jump straight to the files to fix. + // A preset from another bundle (the Orca Filament Library) is tagged with + // its vendor so the source bundle is obvious. std::string presets; - for (const Preset *p : entry.second) - presets += "\n - " + p->name + "\n " + preset_file_uri(p->file); + for (const Preset *p : entry.second) { + presets += "\n - " + p->name; + if (p->vendor != nullptr && p->vendor->name != printer.vendor->name) + presets += " [" + p->vendor->name + "]"; + presets += "\n " + preset_file_uri(p->file); + } BOOST_LOG_TRIVIAL(error) << "Ambiguous AMS filament match: " << entry.second.size() << " filament presets share filament_id \"" << entry.first diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index c3e7dd4441..5a8f34e706 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -4,11 +4,14 @@ #include "Preset.hpp" #include "PresetCacheFormat.hpp" #include "AppConfig.hpp" +#include "PublishSettings.hpp" #include "enum_bitmask.hpp" #include +#include #include #include +#include #include #include #include @@ -168,6 +171,30 @@ struct PresetBundleMetadata } }; +// A "published" 3MF project: keeps the user's currently-selected presets and overlays only the +// author-selected published keys onto the edited presets. +struct PublishedConfig +{ + bool published = false; + std::vector published_keys; + // Per-slot published material keys, applied positionally (author slot N -> receiver slot N). + // Partial entries are gated by the author's optional type requirement and written onto the + // slot's stored preset in place; full entries instead detach (see PublishedMaterialEntry in + // PublishSettings.hpp). + std::vector material_keys; + // Keys that could not be applied (missing on the user's machine or vector size mismatch), + // filled in by load_config_file_config for notification purposes. + std::vector skipped_keys; + // Human-readable notices of the slot material replacements performed while loading a + // published project, for the load notification. + std::vector material_replacements; + // Mixed-filament entries that had to be moved off their authored slot on load (a real, + // physical filament occupied it): maps the author's zero-based slot number to its final + // zero-based slot. Consumers (e.g. model extruder/color-painting remapping) use this to + // keep geometry references pointing at the relocated definitions. + std::map mixed_slot_relocations; +}; + // Bundle of Print + Filament + Printer presets. class PresetBundle { @@ -230,7 +257,22 @@ public: // Load selections (current print, current filaments, current printer) from config.ini // select preferred presets, if any exist PresetsConfigSubstitutions load_presets(AppConfig &config, ForwardCompatibilitySubstitutionRule rule, - const PresetPreferences& preferred_selection = PresetPreferences()); + const PresetPreferences& preferred_selection = PresetPreferences(), + std::string *errors = nullptr, bool read_only = false); + + // Resolve an explicitly named source file through a canonical flattened + // preset. Exact loaded-file identity is preferred; otherwise a manifest- + // backed vendor tree is loaded from that source root without using caches. + bool resolve_preset_config(DynamicPrintConfig &config, Preset::Type type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest = true); + // Resolve a source file whose JSON omits `type`. Succeeds only when exactly + // one FFF preset collection owns the file and returns that collection's type. + bool resolve_preset_config_type(DynamicPrintConfig &config, Preset::Type &type, + const std::string &source_file, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error, bool allow_source_manifest = true); // Load selections (current print, current filaments, current printer) from config.ini // This is done just once on application start up. @@ -238,7 +280,7 @@ public: void load_selections(AppConfig &config, const PresetPreferences& preferred_selection = PresetPreferences()); // BBS Load user presets - PresetsConfigSubstitutions load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule rule); + PresetsConfigSubstitutions load_user_presets(std::string user, ForwardCompatibilitySubstitutionRule rule, bool read_only = false); PresetsConfigSubstitutions load_user_presets(AppConfig &config, std::map>& my_presets, ForwardCompatibilitySubstitutionRule rule); // Orca: Import subscribed bundle presets (load and save to disk in one operation), handles one bundle at a time PresetsConfigSubstitutions update_subscribed_presets(AppConfig& config, @@ -326,8 +368,9 @@ public: // Export selections (current print, current filaments, current printer) into config.ini void export_selections(AppConfig &config); - // BBS - void set_num_filaments(unsigned int n, std::vector new_colors); + // n is the total slot count, and growth appends at the raw tail - which is where the mixed + // slots live. A caller adding physical filaments has to add num_mixed_filaments() on top and + // then move the new slots ahead of the mixed tail, as Sidebar::add_custom_filament does. void set_num_filaments(unsigned int n, std::string new_col = ""); void update_num_filaments(unsigned int to_del_flament_id); @@ -349,6 +392,13 @@ public: std::vector> get_extruder_filament_info() const; std::set get_printer_names_by_printer_type_and_nozzle(const std::string &printer_type, std::string nozzle_diameter_str, bool system_only = true); + // Orca: the root filament presets a connected machine can use, resolved with the rule the rest + // of the app applies (is_compatible_with_printer): an empty compatible_printers means every + // printer, minus the alias shadowing exclusions the Orca Filament Library records in + // Preset::m_excluded_from. + std::vector get_filament_presets_for_machine(const std::string &printer_type, + const std::string &nozzle_diameter_str, + bool include_user_presets); bool check_filament_temp_equation_by_printer_type_and_nozzle_for_mas_tray(const std::string &printer_type, std::string & nozzle_diameter_str, std::string & setting_id, @@ -441,8 +491,8 @@ public: // Load configuration that comes from a model file containing configuration, such as 3MF et al. // This method is called by the Plater. - void load_config_model(const std::string &name, DynamicPrintConfig config, Semver file_version = Semver()) - { this->load_config_file_config(name, true, std::move(config), file_version); } + void load_config_model(const std::string &name, DynamicPrintConfig config, Semver file_version = Semver(), PublishedConfig *published_config = nullptr) + { this->load_config_file_config(name, true, std::move(config), file_version, false, published_config); } // Load an external config file containing the print, filament and printer presets. // Instead of a config file, a G-code may be loaded containing the full set of parameters. @@ -473,10 +523,13 @@ public: //Orca: load config bundle from json, pass the base bundle to support cross vendor inheritance // Orca: `dir` is where the vendor is looked for — its own directory, whether or // not the profile JSONs are still there. A whole-vendor load comes from the - // vendor's preset cache whenever one covers the profile on disk, and is parsed - // from the JSONs in `dir` only when none does. Nothing here reads resources. + // vendor's preset cache whenever one covers the profile on disk and allow_cache + // is true, and is parsed from the JSONs in `dir` otherwise. Nothing here reads + // resources implicitly. std::pair load_vendor_configs_from_json( - const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr); + const std::string &dir, const std::string &vendor_name, LoadConfigBundleAttributes flags, + ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr, + bool allow_cache = true); // Export a config bundle file containing all the presets and the names of the active presets. //void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false); @@ -503,6 +556,8 @@ public: // How many slots are mixed. They sit at the tail of the filament list and have no nozzle of // their own, so any resize driven by the printer's extruder count has to add this on top. size_t num_mixed_filaments() const; + // How many slots hold a real filament, i.e. everything ahead of the mixed tail. + size_t num_physical_filaments() const; void on_extruders_count_changed(int extruder_count); @@ -562,6 +617,11 @@ public: // compatible_prints references a deleted (unknown) or renamed (old) preset name. bool check_preset_references() const; + // Validator-only: every system FFF printer variant needs a compatible system filament + // named in its model's default_materials, every name there and in the printer's + // default_filament_profile must resolve to a system filament. + bool check_printer_default_materials() const; + // Merge one vendor's presets with the other vendor's presets, report duplicates. // Public so per-vendor-cache consumers (e.g. the setup wizard) can assemble a // bundle out of several per-vendor caches loaded into separate PresetBundle instances. @@ -596,6 +656,18 @@ private: // Whether to (re)write a per-vendor cache after a JSON parse. bool m_generate_vendor_caches { false }; + bool m_preserve_vendor_source_paths { false }; + + // Vendor trees loaded by resolve_preset_config's manifest path, so every preset + // resolved through this bundle shares one load per source root and vendor. The + // filament library is one such tree, shared by every vendor under its root. + std::map, std::unique_ptr> + m_source_vendor_bundles; + + const PresetBundle *load_source_vendor(const boost::filesystem::path &root_dir, + const std::string &vendor_id, + ForwardCompatibilitySubstitutionRule compatibility_rule, + std::string &error); // Orca: validation only - flag any printer with two or more compatible // filament presets sharing one filament_id (ambiguous AMS subtype match). @@ -603,7 +675,7 @@ private: //std::pair load_system_presets(ForwardCompatibilitySubstitutionRule compatibility_rule); //BBS: add json related logic - std::pair load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule); + std::pair load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule, bool allow_cache = true); // Update the multicolor information for filaments. void update_filament_multi_color(); // Update renamed_from and alias maps of system profiles. @@ -617,7 +689,7 @@ private: // Load print, filament & printer presets from a config. If it is an external config, then the name is extracted from the external path. // and the external config is just referenced, not stored into user profile directory. // If it is not an external config, then the config will be stored into the user profile directory. - void load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version = Semver(), bool selected = false); + void load_config_file_config(const std::string &name_or_path, bool is_external, DynamicPrintConfig &&config, Semver file_version = Semver(), bool selected = false, PublishedConfig *published_config = nullptr); /*ConfigSubstitutions load_config_file_config_bundle( const std::string &path, const boost::property_tree::ptree &tree, ForwardCompatibilitySubstitutionRule compatibility_rule);*/ diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 3a95048b41..3734318c1a 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1,3 +1,8 @@ +#ifdef _WIN32 +// Keep this first. A header below reaches boost/regex, whose w32_regex_traits +// needs the Win32 types declared already. +#include +#endif #include "Config.hpp" #include "Exception.hpp" #include "Print.hpp" @@ -16,6 +21,7 @@ #include "GCode.hpp" #include "GCode/WipeTower.hpp" #include "GCode/WipeTower2.hpp" +#include "GCode/WipeTowerEstimate.hpp" #include "Utils.hpp" #include "PrintConfig.hpp" #include "MaterialType.hpp" @@ -228,6 +234,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", + "wipe_inward", + "wipe_inward_distance", "gcode_comments", "gcode_label_objects", "exclude_object", @@ -353,6 +361,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "other_layers_print_sequence" || opt_key == "other_layers_print_sequence_nums" || opt_key == "toolchange_ordering" + || opt_key == "toolchange_cyclic_order" + || opt_key == "toolchange_cyclic_first_layer" || opt_key == "extruder_ams_count" || opt_key == "extruder_nozzle_stats" || opt_key == "filament_map_mode" @@ -957,6 +967,377 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print return single_object_exception; } +// --------------------------------------------------------------------------------------------- +// Clearance rule for a prime tower compacted by wipe_tower_no_sparse_layers. +// Ported from BambuStudio and adapted to Orca's printer config: Orca has no +// prime_tower_lift_height (z_hop alone bounds the spiral), spells the toolhead radius +// extruder_clearance_radius, and derives the spiral slope from the per-filament travel_slope instead +// of one global constant. +// --------------------------------------------------------------------------------------------- + +double compacted_tower_footprint_padding(const PrintConfig &config, double brim_width) +{ + // The brim is deposited material like any other and reaches past the wall on the first layer, so + // the sweeping rod has to clear it too. + // + // On top of it, two effects make a nominal outline fall short of the printed tower on its low + // corner even though it overshoots by millimetres on the high one: WipeTower re-centres the tower + // by rib_offset once its first-layer wall is known, and the precise check hulls extrusion centre + // lines, so the deposited material reaches half a line width further still. Allowing a line width + // per side covers both, which is what keeps an estimated footprint enclosing the real one and the + // pre-slice check stricter than the precise one. + return std::max(0., brim_width) + 2. * config.nozzle_diameter.get_at(0); +} + +Polygons compacted_wipe_tower_rings(const CompactedTowerZone &zone, bool any_body_tier) +{ + Polygons rings = zone.grown_nozzle; + if (any_body_tier) + append(rings, zone.grown_body); + return rings; +} + +CompactedTowerZone compacted_wipe_tower_zone(const PrintConfig &config, const Polygon &tower_footprint) +{ + CompactedTowerZone zone; + if (tower_footprint.points.empty()) + return zone; + + // Spiral Z-hop at wipe-tower entry (the G3 Z I J that GCodeWriter emits for a SpiralLift) starts on + // the tower outline at a low Z. The spiral centre sits one radius away from the start point, so the + // circle reaches 2 * radius beyond the outline. radius = lift / (2*pi*atan(travel_slope)) is the + // same formula GCodeWriter uses; both are per filament, so take the widest any filament can make. + double spiral_reach = 0.; + for (size_t i = 0; i < config.z_hop.size(); ++i) { + const double lift = std::min(double(config.z_hop.get_at(i)), 5.); + if (lift < EPSILON) + continue; + const double slope = i < config.travel_slope.size() ? double(config.travel_slope.get_at(i)) : 0.; + if (slope < EPSILON) + continue; + spiral_reach = std::max(spiral_reach, 2. * lift / (2. * PI * std::atan(slope))); + } + + // Working footprint = outline grown by the spiral envelope. All later clearance tests use this, so + // a travel that leaves the deposited wall at low Z is still treated as part of the tower. + zone.hull = tower_footprint; + if (spiral_reach > EPSILON) { + const Polygons grown = offset(tower_footprint, float(scale_(spiral_reach)), jtRound, scale_(0.1)); + if (! grown.empty()) + zone.hull = Geometry::convex_hull(grown); + } + + // The rod sweeps the whole X axis, so its keep-out band is the tower's Y span widened by half + // the nozzle-to-rod offset per side (the instance carries the other half). Orca's sequential + // check has no such margin, having had no option to read it from until now. + zone.bbox_rod = zone.hull.bounding_box(); + zone.bbox_rod.offset(scale_(config.extruder_clearance_dist_to_rod.value * 0.5)); + + // Horizontal clearance, mirroring the sequential print check down to how the distance is split: + // there each of the two object hulls grows by half of extruder_clearance_radius, so the two + // outlines touch exactly when the objects are the full radius apart. Splitting it the same way + // here (half on the tower, half on the instance in compacted_wipe_tower_clearance) states the + // same criterion, and it is what lets the plater draw both outlines: they meet at the instant the + // check trips, instead of one of them being already buried inside the other. The smaller + // MAX_OUTER_NOZZLE_DIAMETER tier is the bare nozzle cone, the only part narrow enough to sit + // beside an object rising less than nozzle_height. The 0.2 mm shaved off is the same rounding + // slack the sequential check applies, 0.1 mm per side. Both rings are built here; which one a + // given object is measured against depends on its own height and is decided in + // compacted_wipe_tower_clearance(). + zone.body_radius = config.extruder_clearance_radius.value; + zone.grown_body = offset(zone.hull, float(scale_(compacted_tower_half_clearance(zone.body_radius))), jtRound, scale_(0.1)); + zone.grown_nozzle = offset(zone.hull, float(scale_(compacted_tower_half_clearance(MAX_OUTER_NOZZLE_DIAMETER))), jtRound, scale_(0.1)); + return zone; +} + +CompactedTowerClearance compacted_wipe_tower_clearance(const PrintConfig &config, const CompactedTowerZone &zone, + const Polygon &inst_hull, double object_rise) +{ + BoundingBox inst_bbox = inst_hull.bounding_box(); + inst_bbox.offset(scale_(config.extruder_clearance_dist_to_rod.value * 0.5)); + + // Only the Y span matters for the rod: it spans the whole X axis, so an object sharing the tower's + // Y band passes under it however far apart the two are in X. + const bool overlaps_in_y = std::min(inst_bbox.max.y(), zone.bbox_rod.max.y()) - std::max(inst_bbox.min.y(), zone.bbox_rod.min.y()) > 0; + + CompactedTowerClearance result; + result.far_clearance = overlaps_in_y ? config.extruder_clearance_height_to_rod.value : config.extruder_clearance_height_to_lid.value; + + // The rod and the lid are the only obstacles once the object stands far enough away. Closer than + // the toolhead radius it is the head body itself that hits the object, and it does so as soon as + // the object rises past the nozzle cone, which is far below the rod. + // The instance carries the other half of each clearance, the tower rings already hold the first + // half; see compacted_wipe_tower_zone(). Both halves are needed for the verdict to mean + // "a full radius apart", and drawing what is tested is what keeps the plater honest. + // + // Which tier applies is a property of this object alone: the head body sits above the nozzle cone, + // so it cannot reach an object that stays below nozzle_height however close it stands, and however + // tall the rest of the plate is. + const bool object_is_short = object_rise <= double(config.nozzle_height.value) + EPSILON; + result.body_clearance = object_is_short ? double(MAX_OUTER_NOZZLE_DIAMETER) : zone.body_radius; + + const Polygons inst_near_nozzle = offset(inst_hull, float(scale_(compacted_tower_half_clearance(MAX_OUTER_NOZZLE_DIAMETER))), jtRound, scale_(0.1)); + const bool near_nozzle = ! intersection(zone.grown_nozzle, inst_near_nozzle).empty(); + result.near_body = false; + if (! object_is_short) { + const Polygons inst_near_body = offset(inst_hull, float(scale_(compacted_tower_half_clearance(zone.body_radius))), jtRound, scale_(0.1)); + result.near_body = ! intersection(zone.grown_body, inst_near_body).empty(); + } + + result.allowed_rise = result.far_clearance; + if (near_nozzle) + result.allowed_rise = 0.; + else if (result.near_body) + result.allowed_rise = std::min(result.far_clearance, double(config.nozzle_height.value)); + return result; +} + +Polygon compacted_wipe_tower_offender_outline(const Polygon &inst_hull, double body_clearance) +{ + // Exactly the half-clearance the check grew this instance by, so the halo drawn around an object is + // the very outline that was tested against the tower ring of the same tier. Passing the clearance + // the object was actually judged on keeps a short object from being drawn with the wide ring it is + // not subject to. + const Polygons grown = offset(inst_hull, float(scale_(compacted_tower_half_clearance(body_clearance))), jtRound, scale_(0.1)); + return grown.empty() ? inst_hull : grown.front(); +} + +// Shared user-facing message for every compacted-tower clearance failure. Height-limit and too-close +// are the same class of layout violation under "No sparse layers", so they share one wording. +static std::string compacted_wipe_tower_clearance_error() +{ + return L("The relative position of the model and the prime tower does not meet the requirements of the \"No sparse layers\" feature. Please adjust their relative positions, lower the model height, or turn off \"No sparse layers\"."); +} + +// Convex hull of one print instance in bed coordinates, the same outline both compacted tower checks +// compare against the tower. +static Polygon compacted_tower_print_instance_hull(const PrintObject &object, const PrintInstance &instance) +{ + Points pts; + for (const ModelVolume *v : object.model_object()->volumes) { + if (! v->is_model_part()) + continue; + Polygon hull = v->get_convex_hull_2d(Geometry::assemble_transform(Vec3d::Zero(), instance.model_instance->get_rotation(), + instance.model_instance->get_scaling_factor(), instance.model_instance->get_mirror())); + hull.translate(instance.shift - object.center_offset()); + append(pts, hull.points); + } + return pts.empty() ? Polygon() : Geometry::convex_hull(pts); +} + +// Footprint the compacted prime tower is expected to occupy on the plate, in bed coordinates. +// Before psWipeTower has run there is no tower geometry at all, so this falls back to the same +// estimate the plater builds its preview box from. Answering while the user is still arranging the +// plate is the whole point of the pre-slice check, and an estimate is all that can be had then. +static Polygon estimated_wipe_tower_footprint(const Print &print) +{ + const PrintConfig &config = print.config(); + const size_t filaments_cnt = print.extruders().size(); + if (filaments_cnt == 0) + return Polygon(); + + const WipeTowerData &wtd = print.wipe_tower_data(filaments_cnt); + + double width, depth, brim; + Vec2d local_min; + if (wtd.bbx.size().x() > EPSILON && wtd.bbx.size().y() > EPSILON) { + // The tower has already been generated once, so use its real box (brim included) instead of + // re-estimating. Same frame first_layer_wipe_tower_corners() works in. + width = wtd.bbx.size().x(); + depth = wtd.bbx.size().y(); + local_min = wtd.bbx.min + wtd.rib_offset.cast(); + brim = 0.; + } else { + depth = wtd.depth; + if (depth < EPSILON) + return Polygon(); + // PartPlate::estimate_wipe_tower_size() squares the rib tower off and the preview box the user + // drags around is built from that, so match it here rather than keeping the nominal width. + width = config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib ? depth : double(config.prime_tower_width.value); + local_min = Vec2d::Zero(); + brim = double(wtd.brim_width); + } + + const double padding = compacted_tower_footprint_padding(config, brim); + local_min -= Vec2d(padding, padding); + width += 2. * padding; + depth += 2. * padding; + + const Eigen::Rotation2Dd rot(Geometry::deg2rad(config.wipe_tower_rotation_angle.value)); + const Vec2d translate(config.wipe_tower_x.get_at(print.get_plate_index()) + print.get_plate_origin()(0), + config.wipe_tower_y.get_at(print.get_plate_index()) + print.get_plate_origin()(1)); + + Polygon footprint; + for (const Vec2d &corner : { local_min, + Vec2d(local_min.x() + width, local_min.y()), + Vec2d(local_min.x() + width, local_min.y() + depth), + Vec2d(local_min.x(), local_min.y() + depth) }) { + const Vec2d p = rot * corner + translate; + footprint.points.emplace_back(scale_(p.x()), scale_(p.y())); + } + return footprint; +} + +// Pre-slice counterpart of validate_compacted_wipe_tower_clearance(). It applies the very same +// clearance rule, but to an estimated tower footprint instead of the real tool-change extrusions, +// which is what lets it run from Print::validate() before anything has been sliced. Reporting through +// polygons / height_polygons rather than by throwing is what puts the collision area and the height +// limit plane on the plater, exactly the way sequential printing does it. +StringObjectException Print::compacted_wipe_tower_clearance_valid(const Print &print, Polygons *polygons, std::vector> *height_polygons) +{ + const PrintConfig &config = print.config(); + if (! wipe_tower_sparse_layers_skipped(config) || config.print_sequence != PrintSequence::ByLayer || ! print.has_wipe_tower()) + return {}; + + const CompactedTowerZone zone = compacted_wipe_tower_zone(config, estimated_wipe_tower_footprint(print)); + if (zone.empty()) + return {}; + + StringObjectException exception; + Polygons offenders; + bool body_tier_used = false; + for (const PrintObject *object : print.objects()) { + const double object_top = unscaled(object->max_z()); + for (const PrintInstance &instance : object->instances()) { + const Polygon inst_hull = compacted_tower_print_instance_hull(*object, instance); + if (inst_hull.points.empty()) + continue; + const CompactedTowerClearance clearance = compacted_wipe_tower_clearance(config, zone, inst_hull, object_top); + body_tier_used = body_tier_used || compacted_tower_body_tier(clearance); + // Every tier the precise check applies is applied here too, otherwise an object standing + // within the toolhead radius would pass here and then be rejected mid-slice, which is the + // one outcome this check exists to prevent. The compacted tower base is unknown before + // slicing, so the rise is measured from the plate rather than from the tower top; that + // overstates it by the tower's own height and makes this check err strict, never lax. + if (object_top <= clearance.allowed_rise + EPSILON) + continue; + + // Height-limit and too-close cases share one user-facing message: both mean the layout + // violates the "No sparse layers" clearance rule, and the remedies are the same. + const std::string msg = compacted_wipe_tower_clearance_error(); + if (exception.string.empty()) { + exception.string = msg; + exception.object = instance.model_instance; + } else { + // Same wording for every offender; keep a single copy and drop the object pointer. + exception.object = nullptr; + } + const Polygon outline = compacted_wipe_tower_offender_outline(inst_hull, clearance.body_clearance); + offenders.emplace_back(outline); + if (height_polygons) + height_polygons->emplace_back(outline, float(clearance.allowed_rise)); + } + } + + // Draw the tower's keep-out ring alongside the offending objects, so the collision area reads as + // "this object reaches into the space the toolhead needs around the tower" rather than as a lone + // highlighted object. Emitted only on a real collision; the plater discards polygons otherwise. + // Only the rings some object on this plate is actually measured against are drawn, so that a ring + // and an object outline touching always means that object is over its limit. + if (polygons && ! offenders.empty()) { + append(*polygons, compacted_wipe_tower_rings(zone, body_tier_used)); + append(*polygons, offenders); + } + return exception; +} + +// With wipe_tower_no_sparse_layers the tower only grows on layers that carry a real toolchange, +// so it ends up far below the object and the nozzle has to descend to it. While the nozzle sits +// down on the compacted tower the rod is at tower_z + extruder_clearance_height_to_rod, and it +// sweeps the tower's Y band across the whole X axis. Anything already printed above that line and +// sharing the band gets hit. Nearer than the toolhead radius the head body hits the object well before +// the rod does, which is the horizontal half of the same problem. The spiral Z-hop that opens a wipe- +// tower travel also leaves the extrusion outline at a low Z, so the footprint used here is the +// deposited hull grown by the spiral circle's maximum reach. This mirrors both clearance checks of +// sequential printing, except that the tower is revisited over and over, so every object is compared +// against it. +void Print::validate_compacted_wipe_tower_clearance() const +{ + // Nothing to check when the tower is not compacted: it then follows the object as usual and the + // regular by-layer clearance check already covers it. Asking wipe_tower_sparse_layers_skipped() + // rather than the raw option keeps this from rejecting plates whose tower is in fact full height. + if (! wipe_tower_sparse_layers_skipped(m_config) || m_config.print_sequence != PrintSequence::ByLayer) + return; + + const std::vector> &tool_changes = m_wipe_tower_data.tool_changes; + if (tool_changes.empty() || m_objects.empty()) + return; + + // Same accumulation the G-code emitter runs, so validation and output cannot disagree. + const std::vector tower_z = compute_compacted_wipe_tower_z(tool_changes, float(m_config.z_offset.value)); + + // Wipe tower footprint: build it from the ACTUAL tool-change extrusions rather than the nominal + // width x depth rectangle returned by first_layer_wipe_tower_corners(). With a rib wall the printed + // wall bulges past the nominal box and the first-layer brim reaches even further; the nominal box + // (m_wipe_tower_data.bbx) undercounts that outermost extent by several millimetres, which is + // exactly the extent that decides how close the sweeping rod comes to a neighbouring object. The + // extrusion end-points are stored in the wipe-tower local frame, so we map them to the bed frame + // with the same transform the G-code emitter applies. The two emitters differ in where rib_offset + // enters: WipeTowerIntegration::append_tcr() (type 1) rotates the point and then adds the offset, + // append_tcr2() (type 2) adds it before rotating. On a rotated rib-wall tower the two land several + // millimetres apart, which is exactly the margin this check measures, so follow the emitter in use. + const Eigen::Rotation2Dd wt_rot(Geometry::deg2rad(m_config.wipe_tower_rotation_angle.value)); + const Vec2d wt_translate(m_config.wipe_tower_x.get_at(m_plate_index) + m_origin(0), + m_config.wipe_tower_y.get_at(m_plate_index) + m_origin(1)); + const Vec2d rib_off = m_wipe_tower_data.rib_offset.cast(); + const bool rib_off_rotates = this->wipe_tower_type() == WipeTowerType::Type2; + auto to_bed = [&wt_rot, &wt_translate, &rib_off, rib_off_rotates](const Vec2d &pt) { + return rib_off_rotates ? Vec2d(wt_rot * (pt + rib_off) + wt_translate) : Vec2d(wt_rot * pt + wt_translate + rib_off); + }; + + Points tower_pts; + for (const std::vector &layer : tool_changes) { + if (layer.empty() || wipe_tower_layer_is_sparse(layer)) + continue; + for (const WipeTower::ToolChangeResult &tcr : layer) + for (size_t i = 0; i < tcr.extrusions.size(); ++i) { + // A zero width marks a travel end-point. Keep it only when it opens a real extrusion, so + // the hull covers the deposited material and nothing else; travels reach a bit further out + // than the walls do. + const WipeTower::Extrusion &e = tcr.extrusions[i]; + if (e.width == 0.f && (i + 1 == tcr.extrusions.size() || tcr.extrusions[i + 1].width == 0.f)) + continue; + const Vec2d p = to_bed(Vec2d(e.pos.x(), e.pos.y())); + tower_pts.emplace_back(scale_(p.x()), scale_(p.y())); + } + } + if (tower_pts.empty()) + return; + + const CompactedTowerZone zone = compacted_wipe_tower_zone(m_config, Geometry::convex_hull(tower_pts)); + if (zone.empty()) + return; + + for (const PrintObject *object : m_objects) { + const double object_top = unscaled(object->max_z()); + for (const PrintInstance &instance : object->instances()) { + const Polygon inst_hull = compacted_tower_print_instance_hull(*object, instance); + if (inst_hull.points.empty()) + continue; + + // Report the worst layer rather than the first offending one, it is the one that explains the + // collision best. The rise has to be known before the clearance: it is what selects the + // horizontal tier, the nozzle cone being out of the head body's reach. + double max_rise = 0.; + for (size_t i = 0; i < tool_changes.size(); ++i) { + if (tool_changes[i].empty() || wipe_tower_layer_is_sparse(tool_changes[i])) + continue; + // Nothing above the current layer exists yet, so a tall object only counts up to it. + const double rise = std::min(object_top, double(tool_changes[i].front().print_z)) - tower_z[i]; + if (rise > max_rise) + max_rise = rise; + } + + const CompactedTowerClearance clearance = compacted_wipe_tower_clearance(m_config, zone, inst_hull, max_rise); + if (max_rise <= clearance.allowed_rise + EPSILON) + continue; + // Same wording as compacted_wipe_tower_clearance_valid(): height-limit and too-close + // share one message, since both are layout violations of "No sparse layers". + throw Slic3r::SlicingError(compacted_wipe_tower_clearance_error()); + } + } +} + //BBS static StringObjectException layered_print_cleareance_valid(const Print &print, StringObjectException *warning) { @@ -1027,20 +1408,21 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, //BBS: add the wipe tower check logic const PrintConfig & config = print.config(); - int filaments_count = print.extruders().size(); + // Custom G-code tool changes (MultiAsSingle) build a real tower on a plate whose objects + // all use one filament, so they have to be counted or the hull below collapses to a point. + int filaments_count = print.extruders(true).size(); int plate_index = print.get_plate_index(); const Vec3d plate_origin = print.get_plate_origin(); float x = config.wipe_tower_x.get_at(plate_index) + plate_origin(0); float y = config.wipe_tower_y.get_at(plate_index) + plate_origin(1); - float width = config.prime_tower_width.value; float a = config.wipe_tower_rotation_angle.value; //float v = config.wiping_volume.value; - float depth = print.wipe_tower_data(filaments_count).depth; - //float brim_width = print.wipe_tower_data(filaments_count).brim_width; - - if (config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) - width = depth; + // The estimate resolves the effective width (a rib wall squares the tower). + const WipeTowerData &wipe_tower_estimate = print.wipe_tower_data(filaments_count); + float width = wipe_tower_estimate.width; + float depth = wipe_tower_estimate.depth; + float brim_width = wipe_tower_estimate.brim_width; Polygons convex_hulls_temp; if (print.has_wipe_tower()) { @@ -1062,36 +1444,54 @@ static StringObjectException layered_print_cleareance_valid(const Print &print, convex_hulls_temp.push_back(wipe_tower_polygon); } } + // Post-generation the mesh bottom already carries the brim. Pre-generation the body grows + // by the brim only when its width is explicit; the auto brim and a Type2 cone base depend on + // the tower height, exact only once generated, so they only warn here - the exact footprint + // is re-checked in _make_wipe_tower. + const bool exact_footprint = print.is_step_done(psWipeTower); + Polygons tower_polys_checked = (!exact_footprint && config.prime_tower_brim_width.value >= 0) ? + offset(convex_hulls_temp, float(scale_(brim_width))) : + convex_hulls_temp; + Polygons tower_polys_estimated; + if (!exact_footprint && !convex_hulls_temp.empty()) { + double max_height = 0.; + for (const PrintObject *object : print.objects()) + max_height = std::max(max_height, unscale_(object->size().z())); + Polygon base = estimate_wipe_tower_first_layer_outline(config, print.wipe_tower_type(), width, depth, max_height); + base.rotate(Geometry::deg2rad(a)); + base.translate(Point(scale_(x), scale_(y))); + tower_polys_estimated = offset(base, float(scale_(brim_width))); + } + // Object proximity stays a body-only warning: brim near-misses would newly warn on + // many setups that print fine. if (!intersection(convex_hulls_other, convex_hulls_temp).empty()) { if (warning) { warning->string += L("Prime Tower") + L(" is too close to others, and collisions may be caused.\n"); } } - if (!intersection(exclude_polys, convex_hulls_temp).empty()) { - /*if (warning) { - warning->string += L("Prime Tower is too close to exclusion area, there may be collisions when printing.\n"); - }*/ + if (!intersection(exclude_polys, tower_polys_checked).empty()) { return {L("Prime Tower") + L(" is too close to an exclusion area, and collisions will be caused.\n")}; } - if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, convex_hulls_temp).empty()) { + if (print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, tower_polys_checked).empty()) { return {L("Prime Tower") + L(" is too close to clumping detection area, and collisions will be caused.\n")}; } - // Skip the containment check for towers that will never be printed (single-filament - // prints without smooth timelapse keep the config's tower position but emit nothing). - // Pre-generation only the body square is tested — the auto-brim estimate can overshoot - // the generated brim by several mm and must not hard-fail a print that physically fits. - // Post-generation the mesh bottom already includes the real brim, so the exact - // footprint is tested. - if (filaments_count > 1 || print.enable_timelapse_print()) { - // The shared printable polygon is plate-local, while the tower polygons above are - // already shifted by the plate origin. - Polygons printable_polys = print.get_extruder_shared_printable_polygon(); - const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); - for (Polygon &p : printable_polys) - p.translate(plate_shift); - if (!diff(convex_hulls_temp, printable_polys).empty()) - return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; + if (warning && !intersection(exclude_polys, tower_polys_estimated).empty()) { + warning->string += L("Prime Tower") + L(" is too close to exclusion area, there may be collisions when printing.") + "\n"; } + if (warning && print_config.enable_wrapping_detection.value && !intersection({wrapping_poly}, tower_polys_estimated).empty()) { + warning->string += L("Prime Tower") + L(" is too close to clumping detection area, there may be collisions when printing.") + "\n"; + } + // No gate on "is there a tower": one that is not printed estimates to zero, so the hulls + // are degenerate and every check passes. Re-deriving it here missed the wrapping-detection + // tower on a single-filament plate. + Polygons printable_polys = print.get_extruder_shared_printable_polygon(); + const Point plate_shift(scale_(plate_origin.x()), scale_(plate_origin.y())); + for (Polygon &p : printable_polys) + p.translate(plate_shift); + if (!diff(tower_polys_checked, printable_polys).empty()) + return {L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")}; + if (warning && !diff(tower_polys_estimated, printable_polys).empty()) + warning->string += L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n"); return {}; } @@ -1382,6 +1782,16 @@ StringObjectException Print::validate(std::vector *warnin } if (!layer_warning.string.empty()) add_warning(layer_warning); + + // Orca: a compacted prime tower drags the nozzle back down to the plate on every toolchange, so + // tall objects collide with it much like they do in sequential printing. Checking it here rather + // than only during slicing is what lets the plater show the collision area and the height limit + // while the plate is still being arranged. + ret = compacted_wipe_tower_clearance_valid(*this, collison_polygons, height_polygons); + if (!ret.string.empty()) { + ret.type = STRING_EXCEPT_OBJECT_COLLISION_IN_LAYER_PRINT; + return ret; + } } if (m_config.enable_prime_tower) { @@ -2296,7 +2706,7 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) obj->clear_shared_object(); //add the print_object share check logic - auto is_print_object_the_same = [this](const PrintObject* object1, const PrintObject* object2) -> bool{ + auto is_print_object_the_same = [](const PrintObject* object1, const PrintObject* object2) -> bool{ if (object1->trafo().matrix() != object2->trafo().matrix()) return false; const ModelObject* model_obj1 = object1->model_object(); @@ -2601,6 +3011,12 @@ void Print::process(long long *time_cost_with_cache, bool use_cache) if (this->has_wipe_tower()) { m_fake_wipe_tower.set_pos({ m_config.wipe_tower_x.get_at(m_plate_index), m_config.wipe_tower_y.get_at(m_plate_index) }); + // Validated on every process() run rather than only when the wipe tower step is (re)generated. + // Moving the tower changes only wipe_tower_x/y, which invalidates psSkirtBrim but not psWipeTower, + // so a validate call living inside _make_wipe_tower would be skipped and keep using the stale + // position, missing a fresh collision. The tower geometry (tool_changes) is stored in the local + // frame and is position independent, so re-checking here with the current position is correct. + this->validate_compacted_wipe_tower_clearance(); } if (this->set_started(psSkirtBrim)) { @@ -3805,7 +4221,7 @@ std::vector Print::get_extruder_printable_polygons() const Polygons ploys = {Polygon::new_scale(e_printable_area)}; extruder_printable_polys.emplace_back(ploys); } - return std::move(extruder_printable_polys); + return extruder_printable_polys; } std::vector Print::get_extruder_unprintable_polygons() const @@ -3818,7 +4234,7 @@ std::vector Print::get_extruder_unprintable_polygons() const Polygons ploys = diff(printable_poly, Polygon::new_scale(e_printable_area)); extruder_unprintable_polys.emplace_back(ploys); } - return std::move(extruder_unprintable_polys); + return extruder_unprintable_polys; } size_t Print::get_extruder_id(unsigned int filament_id) const @@ -4007,74 +4423,25 @@ bool Print::has_wipe_tower() const const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const { - // If the wipe tower wasn't created yet, make sure the depth and brim_width members are set to default. - double max_height = 0; - for (size_t obj_idx = 0; obj_idx < m_objects.size(); obj_idx++) { - double object_z = (double) m_objects[obj_idx]->size().z(); - max_height = std::max(unscale_(object_z), max_height); + // Until the tower is generated, size it with the estimate the GUI/CLI placement uses, so + // validation cannot reject a position the clamp just accepted. + if (is_step_done(psWipeTower) || filaments_cnt == 0) + return m_wipe_tower_data; + + double max_height = 0.; + double layer_height = std::numeric_limits::max(); + for (const PrintObject *object : m_objects) { + max_height = std::max(max_height, unscale_(double(object->size().z()))); + layer_height = std::min(layer_height, object->config().layer_height.value); } - if (max_height < EPSILON) return m_wipe_tower_data; + if (max_height < EPSILON) + return m_wipe_tower_data; - double layer_height = 0.08f; // hard code layer height - layer_height = m_objects.front()->config().layer_height.value; - - auto timelapse_type = config().option>("timelapse_type"); - bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib); - double extra_spacing = config().option("prime_tower_infill_gap")->getFloat() / 100.; - double rib_width = config().option("wipe_tower_rib_width")->getFloat(); - - double filament_change_volume = 0.; - { - std::vector filament_change_lengths; - auto filament_change_lengths_opt = config().option("filament_change_length"); - if (filament_change_lengths_opt) filament_change_lengths = filament_change_lengths_opt->values; - double length = filament_change_lengths.empty() ? 0 : *std::max_element(filament_change_lengths.begin(), filament_change_lengths.end()); - double diameter = 1.75; - std::vector diameters; - auto filament_diameter_opt = config().option("filament_diameter"); - if (filament_diameter_opt) diameters = filament_diameter_opt->values; - diameter = diameters.empty() ? diameter : *std::max_element(diameters.begin(), diameters.end()); - filament_change_volume = length * PI * diameter * diameter / 4.; - } - - - if (! is_step_done(psWipeTower) && filaments_cnt !=0) { - double wipe_volume = m_config.prime_volume; - int filament_depth_count = m_config.nozzle_diameter.values.size() == 2 ? filaments_cnt : filaments_cnt - 1; - if (filaments_cnt == 1 && enable_timelapse_print()) filament_depth_count = 1; - double volume = wipe_volume * filament_depth_count; - if (m_config.nozzle_diameter.values.size() == 2) volume += filament_change_volume * (int) (filaments_cnt / 2); - - // Sizing should take into account currently set wiping volumes. - // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) - // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. - const bool semm_flush = m_config.purge_in_prime_tower && m_config.single_extruder_multi_material; - if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(m_config, filaments_cnt); - - if (m_config.wipe_tower_wall_type.value == WipeTowerWallType::wtwRib) { - double depth = std::sqrt(volume / layer_height * extra_spacing); - if (need_wipe_tower || filaments_cnt > 1) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double) min_wipe_tower_depth, depth); - depth += rib_width / std::sqrt(2) + config().wipe_tower_extra_rib_length.value; - const_cast(this)->m_wipe_tower_data.depth = depth; - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - } - } - else { - double width = m_config.prime_tower_width; - double depth = volume / (layer_height * width); - // The flush volumes already hold the spacing between wipes. - if (!semm_flush) depth *= extra_spacing; - if (need_wipe_tower || depth > EPSILON) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double) min_wipe_tower_depth, depth); - } - const_cast(this)->m_wipe_tower_data.depth = depth; - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - } - if (m_config.prime_tower_brim_width < 0) const_cast(this)->m_wipe_tower_data.brim_width = WipeTower::get_auto_brim_by_height(max_height); - } + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(m_config, this->wipe_tower_type(), this->extruders(true), layer_height, max_height); + WipeTowerData &data = const_cast(this)->m_wipe_tower_data; + data.depth = float(footprint.depth); + data.width = float(footprint.width); + data.brim_width = float(footprint.brim_width); return m_wipe_tower_data; } @@ -4300,6 +4667,7 @@ void Print::_make_wipe_tower() m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); wipe_tower.generate_new(m_wipe_tower_data.tool_changes); m_wipe_tower_data.depth = wipe_tower.get_depth(); + m_wipe_tower_data.width = wipe_tower.width(); m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); m_wipe_tower_data.bbx = wipe_tower.get_bbx(); m_wipe_tower_data.rib_offset = wipe_tower.get_rib_offset(); @@ -4413,6 +4781,7 @@ void Print::_make_wipe_tower() m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); wipe_tower.generate(m_wipe_tower_data.tool_changes); m_wipe_tower_data.depth = wipe_tower.get_depth(); + m_wipe_tower_data.width = wipe_tower.width(); m_wipe_tower_data.z_and_depth_pairs = wipe_tower.get_z_and_depth_pairs(); m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); m_wipe_tower_data.height = wipe_tower.get_wipe_tower_height(); @@ -4448,7 +4817,9 @@ void Print::_make_wipe_tower() wipe_tower.get_wipe_tower_height(), wipe_tower.get_brim_width(), config().wipe_tower_wall_type.value == WipeTowerWallType::wtwRib, wipe_tower.get_rib_width(), wipe_tower.get_rib_length(), - config().wipe_tower_fillet_wall.value); + config().wipe_tower_fillet_wall.value, + config().wipe_tower_wall_type.value == WipeTowerWallType::wtwCone ? + (float) config().wipe_tower_cone_angle.value : 0.f); const Vec3d origin = Vec3d::Zero(); // FakeWipeTower::pos is a bed-frame translation applied after rotation // (getFakeExtrusionPathsFromWipeTower2 rotates about the local origin), so the @@ -4461,6 +4832,28 @@ void Print::_make_wipe_tower() config().wipe_tower_rotation_angle, config().wipe_tower_cone_angle, {scale_(origin.x()), scale_(origin.y())}); } + + // The clamps and checks above work from estimates; re-test the exact generated footprint + // so an off-plate tower fails with a clear error instead of exporting unprintable G-code + // (validate() only sees the mesh on its next run). + if (m_wipe_tower_data.wipe_tower_mesh_data) { + Polygon footprint = m_wipe_tower_data.wipe_tower_mesh_data->bottom; // includes brim and rib offset + footprint.rotate(Geometry::deg2rad(m_config.wipe_tower_rotation_angle.value)); + footprint.translate(Point(scale_(m_config.wipe_tower_x.get_at(m_plate_index)), + scale_(m_config.wipe_tower_y.get_at(m_plate_index)))); + const Polygons printable_polys = this->get_extruder_shared_printable_polygon(); + if (!printable_polys.empty() && !diff(Polygons{footprint}, printable_polys).empty()) { + const BoundingBox fp = get_extents(footprint); + const BoundingBox pr = get_extents(printable_polys); + BOOST_LOG_TRIVIAL(error) << boost::format("wipe tower footprint [%1%,%2%]-[%3%,%4%] leaves printable [%5%,%6%]-[%7%,%8%]") % + unscaled(fp.min.x()) % unscaled(fp.min.y()) % unscaled(fp.max.x()) % unscaled(fp.max.y()) % + unscaled(pr.min.x()) % unscaled(pr.min.y()) % unscaled(pr.max.x()) % unscaled(pr.max.y()); + throw Slic3r::SlicingError(L("Prime Tower") + L(" is partially outside the printable area, and it cannot be printed.\n")); + } + // The cutter/purge corner is a physical obstacle — the brim must stay out like the body. + if (!intersection(get_bed_excluded_area(m_config), Polygons{footprint}).empty()) + throw Slic3r::SlicingError(L("Prime Tower") + L(" is too close to an exclusion area, and collisions will be caused.\n")); + } } // Generate a recommended G-code output file name based on the format template, default extension, and template parameters @@ -5737,7 +6130,7 @@ int Print::load_cached_data(const std::string& directory) return CLI_IMPORT_CACHE_NOT_FOUND; } - auto find_region = [this](PrintObject* object, size_t config_hash) -> const PrintRegion* { + auto find_region = [](PrintObject* object, size_t config_hash) -> const PrintRegion* { int regions_count = object->num_printing_regions(); for (int index = 0; index < regions_count; index++ ) { @@ -6032,17 +6425,26 @@ ExtrusionLayers FakeWipeTower::getTrueExtrusionLayersFromWipeTower() const } return wtels; } -void WipeTowerData::construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length,bool fillet_wall) +void WipeTowerData::construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length,bool fillet_wall, float cone_angle) { wipe_tower_mesh_data = WipeTowerMeshData{}; float first_layer_height=0.08; //brim height if (width < EPSILON || depth < EPSILON || height < EPSILON) return; - if (!is_rib_wipe_tower || rib_length < EPSILON) { + if (cone_angle > EPSILON && (!is_rib_wipe_tower || rib_length < EPSILON)) { + // Cone tower: the base bulges past the body box; this bottom polygon feeds the + // containment checks, so it must carry the bulge and the brim (cone not lofted). + wipe_tower_mesh_data->real_wipe_tower_mesh = make_cube(width, depth, height); + wipe_tower_mesh_data->bottom = WipeTower2::cone_base_polygon(width, depth, height, cone_angle); + auto brim_bottom = offset(wipe_tower_mesh_data->bottom, scaled(brim_width)); + if (!brim_bottom.empty()) + wipe_tower_mesh_data->bottom = brim_bottom.front(); + wipe_tower_mesh_data->real_brim_mesh = WipeTower::its_make_rib_brim(wipe_tower_mesh_data->bottom, first_layer_height); + } else if (!is_rib_wipe_tower || rib_length < EPSILON) { wipe_tower_mesh_data->real_wipe_tower_mesh = make_cube(width, depth, height); wipe_tower_mesh_data->real_brim_mesh = make_cube(width + 2 * brim_width, depth + 2 * brim_width, first_layer_height); wipe_tower_mesh_data->real_brim_mesh.translate({-brim_width, -brim_width, 0}); - wipe_tower_mesh_data->bottom = {scaled(Vec2f{-brim_width, -brim_width}), scaled(Vec2f{width + brim_width, 0}), scaled(Vec2f{width + brim_width, depth + brim_width}), - scaled(Vec2f{0, depth})}; + wipe_tower_mesh_data->bottom = {scaled(Vec2f{-brim_width, -brim_width}), scaled(Vec2f{width + brim_width, -brim_width}), + scaled(Vec2f{width + brim_width, depth + brim_width}), scaled(Vec2f{-brim_width, depth + brim_width})}; } else { wipe_tower_mesh_data->real_wipe_tower_mesh = WipeTower::its_make_rib_tower(width, depth, height, rib_length, rib_width, fillet_wall); wipe_tower_mesh_data->bottom = WipeTower::rib_section(width, depth, rib_length, rib_width, fillet_wall); diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 9e20061501..9c1782e047 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -782,6 +782,9 @@ struct WipeTowerData // Depth of the wipe tower to pass to GLCanvas3D for exact bounding box: float depth; + // Effective width (a rib wall squares the tower): the estimate until generation, then the + // generated width, so it never disagrees with depth. + float width; std::vector> z_and_depth_pairs; float brim_width; float height; @@ -795,12 +798,13 @@ struct WipeTowerData used_filament.clear(); number_of_toolchanges = -1; depth = 0.f; + width = 0.f; brim_width = 0.f; height = 0.f; rib_offset = Vec2f::Zero(); wipe_tower_mesh_data = std::nullopt; } - void construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length, bool fillet_wall); + void construct_mesh(float width, float depth, float height, float brim_width, bool is_rib_wipe_tower, float rib_width, float rib_length, bool fillet_wall, float cone_angle = 0.f); private: // Only allow the WipeTowerData to be instantiated internally by Print, @@ -1156,6 +1160,8 @@ public: //BBS static StringObjectException sequential_print_clearance_valid(const Print &print, Polygons *polygons = nullptr, std::vector>* height_polygons = nullptr); + // Orca: pre-slice clearance check for a prime tower compacted by "No sparse layers". + static StringObjectException compacted_wipe_tower_clearance_valid(const Print &print, Polygons *polygons = nullptr, std::vector>* height_polygons = nullptr); ConflictResultOpt get_conflict_result() const { return m_conflict_result; } // Return 4 wipe tower corners in the world coordinates (shifted and rotated), including the wipe tower brim. @@ -1170,6 +1176,8 @@ public: void set_calib_params(const Calib_Params& params); const Calib_Params& calib_params() const { return m_calib_params; } Vec2d translate_to_print_space(const Vec2d &point) const; + // Orca: precise counterpart of compacted_wipe_tower_clearance_valid(), run once the tower exists. + void validate_compacted_wipe_tower_clearance() const; float get_wipe_tower_depth() const { return m_wipe_tower_data.depth; } BoundingBoxf get_wipe_tower_bbx() const { return m_wipe_tower_data.bbx; } Vec2f get_rib_offset() const { return m_wipe_tower_data.rib_offset; } @@ -1390,6 +1398,89 @@ public: }; +// --------------------------------------------------------------------------------------------- +// Clearance rule for a prime tower compacted by wipe_tower_no_sparse_layers. Shared by the precise +// check that runs on the real extrusions, the pre-slice estimate that feeds the plater with collision +// polygons, and the plater's own live preview while the user drags the tower or an object around. +// Keeping the rule in one place is what stops those three from drifting apart and reporting different +// things for the same plate. +// --------------------------------------------------------------------------------------------- + +// Half of a clearance distance, the share each of the two outlines carries. Sequential printing splits +// extruder_clearance_radius between the two object hulls this way; the tower checks split their +// clearances between the tower ring and the instance hull for the same reason, so that the two +// outlines the plater draws touch precisely when the check trips. The 0.2 mm comes off first: it is +// the rounding slack the sequential check applies, 0.1 mm per side. +inline double compacted_tower_half_clearance(double clearance) { return 0.5 * (clearance - 0.2); } + +// Keep-out geometry a compacted tower projects onto the plate, derived from its bare footprint. +struct CompactedTowerZone +{ + // Footprint the checks work on: the raw outline grown by the spiral Z-hop envelope. + Polygon hull; + // hull grown by half the toolhead radius; an object whose own half-grown hull reaches into it is + // hit by the head body. This is also the ring the plater draws. + Polygons grown_body; + // hull grown by half the bare nozzle cone radius, the innermost tier. + Polygons grown_nozzle; + // hull bounding box, the Y band the rod sweeps. + BoundingBox bbox_rod; + // Full body clearance, of which grown_body carries half. Which of the two tiers applies is decided + // per object rather than here; see compacted_wipe_tower_clearance(). + double body_radius { 0. }; + + bool empty() const { return hull.points.empty(); } +}; + +// Per-side padding a bare wipe tower outline needs before the clearance checks may treat it as the +// tower's footprint. Callers whose outline already carries the first-layer brim pass zero for it. +// Shared by the pre-slice estimate and the plater's live preview: both start from an outline that +// falls short of the printed tower in the same two ways, and padding them by different amounts is +// exactly how the preview and the validation behind it would end up disagreeing. +double compacted_tower_footprint_padding(const PrintConfig &config, double brim_width); + +// Grow a bare tower footprint (bed frame, scaled) into its keep-out zone. +CompactedTowerZone compacted_wipe_tower_zone(const PrintConfig &config, const Polygon &tower_footprint); + +// How far an object may rise above the compacted tower base before the toolhead hits it. +struct CompactedTowerClearance +{ + // Height the object may reach above the tower base. Zero means it may not rise at all. + double allowed_rise; + // Clearance that applies once the object stands clear of the toolhead in XY, i.e. rod or lid. + double far_clearance; + // The object sits within the toolhead radius, so the head body limits it rather than the rod. + bool near_body; + // Horizontal clearance this particular object has to keep from the tower: the full toolhead + // radius once it rises past the nozzle cone, the bare cone while it stays below. It is what the + // error message quotes and what the plater grows the object outline by. + double body_clearance; +}; + +// object_rise is the height above the tower base that the caller is going to compare against +// allowed_rise. It also selects the horizontal tier, so the two cannot disagree. +CompactedTowerClearance compacted_wipe_tower_clearance(const PrintConfig &config, const CompactedTowerZone &zone, + const Polygon &inst_hull, double object_rise); + +// This object was judged on a tier reaching past the bare nozzle cone, so the wide ring is the one its +// outline has to be drawn against. +inline bool compacted_tower_body_tier(const CompactedTowerClearance &clearance) +{ + return clearance.body_clearance > double(MAX_OUTER_NOZZLE_DIAMETER); +} + +// Keep-out rings to draw around the tower. The nozzle one always applies; the wide body one is drawn +// only when some object on the plate is actually measured against it, otherwise it would show a +// keep-out zone no object can violate. +Polygons compacted_wipe_tower_rings(const CompactedTowerZone &zone, bool any_body_tier); + +// Outline to hand the plater for an offending object: the instance hull grown by the same half +// clearance the check grew it by, which is CompactedTowerClearance::body_clearance for that object. +// Sequential printing reports its hulls the same way, and it doubles as the fix for the bare hull +// being unusable on screen, where drawn flat it hides under the object and drawn at the height limit +// it ends up buried inside the mesh. +Polygon compacted_wipe_tower_offender_outline(const Polygon &inst_hull, double body_clearance); + } /* slic3r_Print_hpp_ */ #endif diff --git a/src/libslic3r/PrintApply.cpp b/src/libslic3r/PrintApply.cpp index f03271bf73..90d60b5917 100644 --- a/src/libslic3r/PrintApply.cpp +++ b/src/libslic3r/PrintApply.cpp @@ -560,9 +560,11 @@ static inline bool model_volume_solid_or_modifier(const ModelVolume &mv) static inline Transform3f trafo_for_bbox(const Transform3d &object_trafo, const Transform3d &volume_trafo) { - Transform3d m = object_trafo * volume_trafo; - m.translation().x() = 0.; - m.translation().y() = 0.; + // Orca: Keep the volume's local XY offset for multipart overlap checks, but remove the object's bed placement. + Transform3d object_trafo_local = object_trafo; + object_trafo_local.translation().x() = 0.; + object_trafo_local.translation().y() = 0.; + Transform3d m = object_trafo_local * volume_trafo; return m.cast(); } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2a4eb8d7a7..02d1b50198 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -275,6 +275,7 @@ static t_config_enum_values s_keys_map_InfillPattern { { "tpmsfk", ipTpmsFK }, { "gyroid", ipGyroid }, { "concentric", ipConcentric }, + { "spiralinset", ipSpiralInset }, { "hilbertcurve", ipHilbertCurve }, { "archimedeanchords", ipArchimedeanChords }, { "octagramspiral", ipOctagramSpiral } @@ -371,6 +372,7 @@ static t_config_enum_values s_keys_map_SupportMaterialInterfacePattern { { "auto", smipAuto }, { "rectilinear", smipRectilinear }, { "concentric", smipConcentric }, + { "spiralinset", smipSpiralInset }, { "rectilinear_interlaced", smipRectilinearInterlaced}, { "grid", smipGrid } }; @@ -1130,8 +1132,7 @@ void PrintConfigDef::init_fff_params() // BBS def = this->add("supertack_plate_temp", coInts); def->label = L("Other layers"); - def->tooltip = L("Bed temperature for layers except the initial one. " - "A value of 0 means the filament does not support printing on the Cool Plate SuperTack."); + def->tooltip = L("This is the bed temperature for layers except for the first one. A value of 0 means the filament does not support printing on the Cool Plate SuperTack."); def->sidetext = L(u8"\u2103" /* °C */); // degrees Celsius, CIS languages need translation def->full_label = L("Bed temperature"); def->min = 0; @@ -2293,6 +2294,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("rectilinear"); def->enum_values.push_back("alignedrectilinear"); def->enum_values.push_back("concentric"); + def->enum_values.push_back("spiralinset"); def->enum_values.push_back("hilbertcurve"); def->enum_values.push_back("archimedeanchords"); def->enum_values.push_back("octagramspiral"); @@ -2301,6 +2303,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Aligned Rectilinear")); def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Spiral Inset")); def->enum_labels.push_back(L("Hilbert Curve")); def->enum_labels.push_back(L("Archimedean Chords")); def->enum_labels.push_back(L("Octagram Spiral")); @@ -2383,7 +2386,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Top surface fill order"); def->category = L("Strength"); def->tooltip = L("Direction in which top surfaces are filled when using a center-based pattern " - "(Concentric, Archimedean Chords, Octagram Spiral).\n" + "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Outward starts at the center of the surface, so any excess material is pushed " "towards the edge where it is least visible. Inward starts at the edge and ends " "with the tight curves at the center.\n" @@ -2402,7 +2405,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Bottom surface fill order"); def->category = L("Strength"); def->tooltip = L("Direction in which bottom surfaces are filled when using a center-based pattern " - "(Concentric, Archimedean Chords, Octagram Spiral).\n" + "(Concentric, Spiral Inset, Archimedean Chords, Octagram Spiral).\n" "Inward starts each surface with the wider outer curves, which improves first layer " "adhesion on build plates where the tight curves at the center may not stick. " "Outward starts at the center, pushing any excess material towards the edge.\n" @@ -2546,6 +2549,16 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back("5"); def->mode = comAdvanced; + // Orca: already carried by the BBL/Qidi/Geeetech/Eryone machine profiles, which inherited it from + // the BambuStudio import; without a definition here it was parsed as an unknown key and dropped. + def = this->add("extruder_clearance_dist_to_rod", coFloat); + def->label = L("Distance to rod"); + def->tooltip = L("Horizontal distance of the nozzle tip to the rod's farther edge. Used for collision avoidance in by-object printing."); + def->sidetext = L("mm"); // millimeters, CIS languages need translation + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(40)); + def = this->add("extruder_clearance_height_to_rod", coFloat); def->label = L("Height to rod"); def->tooltip = L("Distance from the nozzle tip to the lower rod. Used for collision avoidance in by-object printing."); @@ -2770,7 +2783,7 @@ void PrintConfigDef::init_fff_params() def = this->add("fan_cooling_layer_time", coFloats); def->label = L("Layer time"); def->tooltip = L("The part cooling fan will be enabled for layers where the estimated time is shorter than this value. Fan speed is interpolated between the minimum and maximum fan speeds according to layer printing time."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 1000; def->mode = comSimple; @@ -2923,7 +2936,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Filament load time"); def->tooltip = L("Time to load new filament when switch filament. It's usually applicable for single-extruder multi-material machines. " "For tool changers or multi-tool machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); @@ -2932,7 +2945,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Filament unload time"); def->tooltip = L("Time to unload old filament when switch filament. It's usually applicable for single-extruder multi-material machines. " "For tool changers or multi-tool machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); @@ -2941,7 +2954,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Tool change time"); def->tooltip = L("Time taken to switch tools. It's usually applicable for tool changers or multi-tool machines. " "For single-extruder multi-material machines, it's typically 0. For statistics only."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat { 0. }); @@ -3087,7 +3100,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Time to wait after the filament is unloaded. " "May help to get reliable tool changes with flexible materials " "that may need more time to shrink to original dimensions."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 0. }); @@ -4206,7 +4219,7 @@ void PrintConfigDef::init_fff_params() "\nIt won't move fan commands from custom G-code (they act as a sort of 'barrier')." "\nIt won't move fan commands into the start G-code if the 'only custom start G-code' is activated." "\nUse 0 to deactivate."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -4222,7 +4235,7 @@ void PrintConfigDef::init_fff_params() "\nThis is useful for fans where a low PWM/power may be insufficient to get the fan started spinning from a stop, or to " "get the fan up to speed faster." "\nSet to 0 to deactivate."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -4866,7 +4879,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Ironing expansion"); def->category = L("Quality"); def->tooltip = L("Expand or contract the ironing area."); - def->sidetext = L("mm"); + def->sidetext = L("mm"); // millimeters, CIS languages need translation def->min = -100; def->max = 100; def->mode = comExpert; @@ -4903,7 +4916,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Quality"); def->tooltip = L("Minimum Z-layer height.\n" "Also controls the slicing plane."); - def->sidetext = L("mm"); + def->sidetext = L("mm"); // millimeters, CIS languages need translation def->min = 0; def->max = 100; def->mode = comExpert; @@ -5102,7 +5115,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The allowed maximum output force of Y axis"); - def->sidetext = L("N"); + def->sidetext = L_CONTEXT("N", "Newton"); // Newtons, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5112,7 +5125,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The machine bed mass load of Y axis"); - def->sidetext = L("g"); + def->sidetext = L_CONTEXT("g", "gram"); // grams, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5122,7 +5135,7 @@ void PrintConfigDef::init_fff_params() def->category = L("Machine limits"); def->readonly = false; def->tooltip = L("The allowed max printed mass on a plate"); - def->sidetext = L("g"); + def->sidetext = L_CONTEXT("g", "gram"); // grams, CIS languages need translation def->min = 0; def->mode = comDevelop; def->set_default_value(new ConfigOptionFloat(0)); @@ -5427,7 +5440,7 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->readonly = false; def->nullable = true; - def->set_default_value(new ConfigOptionFloatsNullable { {0.0} }); + def->set_default_value(new ConfigOptionFloatsNullable { 0.0 }); def = this->add("cooling_tube_retraction", coFloat); def->label = L("Cooling tube position"); @@ -5481,7 +5494,7 @@ void PrintConfigDef::init_fff_params() def = this->add("reduce_infill_retraction", coBool); def->label = L("Reduce infill retraction"); - def->tooltip = L("Don\'t retract when the travel is entirely within an infill area. That means the oozing can\'t been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that z-hop is also not performed in areas where retraction is skipped."); + def->tooltip = L("Don\'t retract when the travel is entirely within an infill area. That means the oozing can\'t been seen. This can reduce times of retraction for complex model and save printing time, but make slicing and G-code generating slower. Note that Z-hop is also not performed in areas where retraction is skipped."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -5534,6 +5547,16 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(true)); + def = this->add("unsupported_wall_last", coBool); + def->label = L("Print unsupported walls last"); + def->category = L("Quality"); + def->tooltip = L("Wall loops that lie entirely in mid air are printed once something can hold them:\n" + "they are extruded after the other walls of their island, innermost first, whatever the wall order is.\n" + "A loop that only the bridges of this layer can anchor waits until those bridges are printed, while a loop running " + "alongside a supported wall keeps its place before the infill, which needs it as an anchor."); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("outer_wall_filament_id", coInt); def->gui_type = ConfigOptionDef::GUIType::i_enum_open; def->label = L("Outer walls"); @@ -5736,7 +5759,7 @@ void PrintConfigDef::init_fff_params() def = this->add("retract_after_wipe", coPercents); def->label = L("Retract amount after wipe"); // xgettext:no-c-format, no-boost-format - def->tooltip = L("The length of fast retraction after wipe, relative to retraction length.\n" + def->tooltip = L("This is the length of fast retraction after wipe, relative to retraction length.\n" "The value will be clamped by 100% minus the retract amount before the wipe value."); def->sidetext = "%"; def->mode = comExpert; @@ -5802,7 +5825,7 @@ void PrintConfigDef::init_fff_params() def = this->add("z_hop", coFloats); def->label = L("Z-hop height"); - def->tooltip = L("Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift z can prevent stringing."); + def->tooltip = L("Whenever there is a retraction, the nozzle is lifted a little to create clearance between the nozzle and the print. This prevents the nozzle from hitting the print when traveling more. Using spiral lines to lift Z can prevent stringing."); def->sidetext = L("mm"); // millimeters, CIS languages need translation def->mode = comSimple; def->min = 0; @@ -6264,6 +6287,36 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("wipe_inward", coBool); + def->label = L("Wipe inward"); + def->category = L("Quality"); + def->tooltip = L("Applies only to external walls, including hole boundaries. Moves the hot nozzle toward printed " + "inner walls during wiping to reduce reheating of freshly printed plastic and seam marks.\n\n" + "Especially useful at layer heights below 0.1 mm, where wipe marks are more visible.\n\n" + "Uses the regular wipe if no adjacent inner wall is already printed (single-wall areas or " + "Outer/Inner wall order), or if no supported inward path can be found, for example at tight " + "corners or seam gaps."); + def->mode = comExpert; + def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("wipe_inward_distance", coFloatOrPercent); + def->label = L("Wipe inward distance"); + def->category = L("Quality"); + // xgettext:no-c-format, no-boost-format + def->tooltip = L("The distance the wipe path is shifted away from the external perimeter, specified in millimeters " + "or as a percentage of the actual outer-wall extrusion width.\n\n" + "For example, 50% shifts the path by half of the outer-wall width. The effective offset is limited " + "by both the actual outer-wall width and the available spacing to the adjacent wall, so values " + "above 100% or an equivalent absolute distance have no additional effect. " + "Set to 0 to disable the offset."); + def->sidetext = L("mm or %"); + def->ratio_over = "outer_wall_line_width"; + def->min = 0; + def->max = 100; + def->max_literal = 2; // Orca: G-code generation also clamps literal values to the actual outer-wall width. + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloatOrPercent(50, true)); + def = this->add("wipe_before_external_loop", coBool); def->label = L("Wipe before external loop"); def->category = L("Quality"); @@ -6380,7 +6433,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Layer time"); def->tooltip = L("The printing speed in exported G-code will be slowed down when the estimated layer time is " "shorter than this value in order to get better cooling for these layers."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 1000; def->mode = comSimple; @@ -6533,7 +6586,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Preheat time"); def->tooltip = L("To reduce the waiting time after tool change, Orca can preheat the next tool while the current tool is still in use. " "This setting specifies the time in seconds to preheat the next tool. Orca will insert a M104 command to preheat the tool in advance."); - def->sidetext = L("s"); // seconds, CIS languages need translation + def->sidetext = L_CONTEXT("s", "second"); // seconds, CIS languages need translation def->min = 0; def->max = 120; def->mode = comAdvanced; @@ -6641,8 +6694,10 @@ void PrintConfigDef::init_fff_params() def = this->add("wipe_tower_no_sparse_layers", coBool); def->label = L("No sparse layers (beta)"); def->tooltip = L("If enabled, the wipe tower will not be printed on layers with no tool changes. " - "On layers with a tool change, extruder will travel downward to print the wipe tower. " - "User is responsible for ensuring there is no collision with the print."); + "On layers with a tool change, extruder will travel downward to print the wipe tower, " + "so the tower ends up below the model and the toolhead has to reach down to it. " + "Layouts where that would collide with an already printed object are rejected. " + "Has no effect with smooth timelapse or clumping detection, which need a tower on every layer."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); @@ -6668,6 +6723,34 @@ void PrintConfigDef::init_fff_params() def->enum_labels.emplace_back(L("Cyclic")); def->set_default_value(new ConfigOptionEnum(ToolChangeOrderingType::Default)); + def = this->add("toolchange_cyclic_order", coString); + def->label = L("Cyclic order"); + def->category = L("Advanced"); + def->tooltip = L( + "Custom filament sequence used by the cyclic toolchange ordering, as filament numbers separated by commas (e.g. \"3,2,1,4\").\n" + "Each layer prints its filaments following this sequence; filaments not listed are printed last, in ascending order.\n" + "Leave empty to cycle through the filaments in ascending order." + ); + def->mode = comExpert; + def->set_default_value(new ConfigOptionString("")); + + def = this->add("toolchange_cyclic_first_layer", coBool); + def->label = L("Apply cyclic order to first layer"); + def->category = L("Advanced"); + def->tooltip = L( + "Applies the cyclic toolchange order to the first layer as well.\n" + "By default this is disabled, because the first layer is instead ordered for the best bed " + "adhesion: filaments that print small, fragile first-layer features are printed last, so the " + "following tool changes and travel moves are less likely to knock those weakly anchored parts " + "loose. This first-layer order also honors a custom first layer filament sequence when one is set. " + "The cyclic order's benefit (extra tool changes give each layer more time to cool) does not apply " + "to the first layer, which is printed slowly and hot for adhesion.\n" + "Enable this only if you need the exact same tool sequence on every layer, including the first, at " + "the cost of that adhesion optimization." + ); + def->mode = comExpert; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("slice_closing_radius", coFloat); def->label = L("Slice gap closing radius"); def->category = L("Quality"); @@ -6680,7 +6763,7 @@ void PrintConfigDef::init_fff_params() def = this->add("slicing_mode", coEnum); def->label = L("Slicing Mode"); - def->category = L("Other"); + def->category = L("Others"); def->tooltip = L("Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to close all holes in the model."); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("regular"); @@ -6964,11 +7047,13 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("auto"); def->enum_values.push_back("rectilinear"); def->enum_values.push_back("concentric"); + def->enum_values.push_back("spiralinset"); def->enum_values.push_back("rectilinear_interlaced"); def->enum_values.push_back("grid"); def->enum_labels.push_back(L("Default")); def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Concentric")); + def->enum_labels.push_back(L("Spiral Inset")); def->enum_labels.push_back(L("Rectilinear Interlaced")); def->enum_labels.push_back(L("Grid")); def->mode = comAdvanced; @@ -8025,7 +8110,7 @@ void PrintConfigDef::init_fff_params() def = this->add("machine_hotend_change_time", coFloat); def->label = L("Hotend change time"); def->tooltip = L("Time to change hotend."); - def->sidetext = L("s"); + def->sidetext = L_CONTEXT("s", "second"); def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); @@ -9866,7 +9951,15 @@ std::string DynamicPrintConfig::get_filament_type(std::string &displayed_filamen auto* filament_type = dynamic_cast(this->option("filament_type")); auto* filament_is_support = dynamic_cast(this->option("filament_is_support")); - if (!filament_type) + // get_at() on an empty vector option is undefined behavior (.front() of an empty vector), + // and e.g. filament_id is never populated on a CLI from-scratch slice - treat an empty + // option the same as a missing one. + if (filament_id && filament_id->values.empty()) + filament_id = nullptr; + if (filament_is_support && filament_is_support->values.empty()) + filament_is_support = nullptr; + + if (!filament_type || filament_type->values.empty()) return ""; if (!filament_is_support) { @@ -10091,6 +10184,10 @@ int DynamicPrintConfig::update_values_from_single_to_multi(DynamicPrintConfig& m for (int index = 0; index < variant_count; index++) { + //variant_count is the variant column width, src_opt the value array; + //they disagree when the source was authored at a different width + if (index >= (int)src_opt->values.size()) + break; if (opt->values[index] > src_opt->values[index]) opt->values[index] = src_opt->values[index]; } @@ -10108,6 +10205,8 @@ int DynamicPrintConfig::update_values_from_single_to_multi(DynamicPrintConfig& m for (int index = 0; index < variant_count; index++) { + if (index >= (int)src_opt->values.size()) + break; if (opt->values[index].value > src_opt->values[index].value) opt->values[index] = src_opt->values[index]; } @@ -10302,6 +10401,10 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + //the counts come from the variant columns, the arrays from the options; + //they disagree when a config was authored at a different variant width + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx] < opt->values[new_variant_index]) opt->values[new_variant_index] = old_values[idx]; } @@ -10332,6 +10435,10 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + //the counts come from the variant columns, the arrays from the options; + //they disagree when a config was authored at a different variant width + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx] < opt->values[new_variant_index]) opt->values[new_variant_index] = old_values[idx]; } @@ -10362,6 +10469,8 @@ int DynamicPrintConfig::update_values_from_multi_to_multi(DynamicPrintConfig& ne for(auto idx : variant_indices){ assert(idx < old_count); + if (idx >= old_count || new_variant_index >= (int)opt->values.size()) + continue; if (old_values[idx]) //enabled opt->values[new_variant_index] = old_values[idx]; } @@ -10402,6 +10511,15 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vectorkeys(); for(auto& key : keys){ if(key_sets.find(key) == key_sets.end()) @@ -10417,7 +10535,13 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vectoroption(key); auto src_values = opt->values; - auto dst_values = dst_config.option(key) ->values; + const auto* dst_opt = dst_config.option(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionFloatsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto& indices = same_variant_indices[dst_idx]; if(indices.empty()) @@ -10425,7 +10549,7 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vector::max(); for(auto idx : indices){ - if(opt && idx < opt->values.size() && !opt->is_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = std::min(target_value, src_values[idx]); } @@ -10441,7 +10565,13 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vectoroption(key); auto src_values = opt->values; - auto dst_values = dst_config.option(key) ->values; + const auto* dst_opt = dst_config.option(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionFloatsOrPercentsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto& indices = same_variant_indices[dst_idx]; if(indices.empty()) @@ -10449,7 +10579,7 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vectoris_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = src_values[idx].value < target_value.value ? src_values[idx] : target_value; } @@ -10465,15 +10595,21 @@ int DynamicPrintConfig::update_values_from_multi_to_multi_2(const std::vectoroption(key); auto src_values = opt->values; - auto dst_values = dst_config.option(key) ->values; + const auto* dst_opt = dst_config.option(key); + if(!dst_opt){ + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: %2% missing from destination config")%__LINE__%key; + break; + } + auto dst_values = dst_opt->values; + dst_values.resize(dst_variant_count, ConfigOptionBoolsNullable::nil_value()); for(size_t dst_idx =0; dst_idx < same_variant_indices.size(); ++dst_idx){ auto indices = same_variant_indices[dst_idx]; if(indices.empty()) continue; bool has_value = false; - bool target_value; + bool target_value = false; for(auto idx : indices){ - if(opt && !opt->is_nil(idx)){ + if(idx < (int)opt->values.size() && !opt->is_nil(idx)){ has_value = true; target_value = src_values[idx]; break; @@ -10880,6 +11016,28 @@ std::vector DynamicPrintConfig::update_values_to_printer_extruders(DynamicP return variant_index; } +// Regathers a vector option's values through per-slot source indices (one input index per +// output slot). Out-of-range indices keep the first value, matching get_at's fallback. +template +static void gather_option_values(const char *caller, const std::string &key, OptType *opt, const std::vector &slot_param_indices) +{ + if (!opt || opt->values.empty()) { + BOOST_LOG_TRIVIAL(warning) << caller << boost::format(", Line %1%: option %2% not found or empty, skipping")%__LINE__%key; + return; + } + std::vector new_values; + new_values.reserve(slot_param_indices.size()); + for (int idx : slot_param_indices) { + if (idx < 0 || static_cast(idx) >= opt->values.size()) { + BOOST_LOG_TRIVIAL(warning) << caller << boost::format(", Line %1%: option %2% slot index %3% out of range, keeping first value")%__LINE__%key%idx; + new_values.emplace_back(opt->values.front()); + } + else + new_values.emplace_back(opt->values[idx]); + } + opt->values = std::move(new_values); +} + void DynamicPrintConfig::update_values_to_printer_extruders_for_multiple_filaments(DynamicPrintConfig& printer_config, int extruder_count, int extruder_nozzle_volume_count, std::set& key_set, std::string id_name, std::string variant_name) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: extruder_count %2%, extruder_nozzle_volume_count %3%")%__LINE__ %extruder_count %extruder_nozzle_volume_count; @@ -10957,155 +11115,18 @@ void DynamicPrintConfig::update_values_to_printer_extruders_for_multiple_filamen BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: can not find opt define for %2%")%__LINE__%key; continue; } + // An empty option has no first value to fall back on; give it one registered default per filament. + if (auto *vec = dynamic_cast(this->option(key)); vec && vec->empty() && optdef->default_value) + vec->resize(filament_count, optdef->default_value.get()); switch (optdef->type) { - case coStrings: - { - ConfigOptionStrings * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coInts: - { - ConfigOptionInts * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coFloats: - { - ConfigOptionFloats * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coPercents: - { - ConfigOptionPercents * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coFloatsOrPercents: - { - ConfigOptionFloatsOrPercents * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coBools: - { - ConfigOptionBools * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } - case coEnums: - { - ConfigOptionEnumsGeneric * opt = this->option(key); - if (!opt) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found, skipping")%__LINE__%key; - break; - } - std::vector new_values; - - new_values.resize(filament_count); - for (int f_index = 0; f_index < filament_count; f_index++) - { - if (variant_index[f_index] < 0 || static_cast(variant_index[f_index]) >= opt->size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% variant index %3% out of range, skipping")%__LINE__%key%variant_index[f_index]; - continue; - } - new_values[f_index] = opt->get_at(variant_index[f_index]); - } - opt->values = new_values; - break; - } + case coStrings: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coInts: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coFloats: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coPercents: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coFloatsOrPercents: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coBools: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; + case coEnums: gather_option_values(__FUNCTION__, key, this->option(key), variant_index); break; default: BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: unsupported option type for %2%")%__LINE__%key; break; @@ -11124,28 +11145,6 @@ void DynamicPrintConfig::update_values_to_printer_extruders_for_multiple_filamen } } -// Regathers a vector option's values through per-slot source indices (one input index per -// output slot). Out-of-range indices keep the first value, matching get_at's fallback. -template -static void gather_option_values(const std::string &key, OptType *opt, const std::vector &slot_param_indices) -{ - if (!opt || opt->values.empty()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% not found or empty, skipping")%__LINE__%key; - return; - } - std::vector new_values; - new_values.reserve(slot_param_indices.size()); - for (int idx : slot_param_indices) { - if (idx < 0 || static_cast(idx) >= opt->values.size()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: option %2% slot index %3% out of range, keeping first value")%__LINE__%key%idx; - new_values.emplace_back(opt->values.front()); - } - else - new_values.emplace_back(opt->values[idx]); - } - opt->values = std::move(new_values); -} - void DynamicPrintConfig::update_filament_config_values_for_multiple_extruders(DynamicPrintConfig& printer_config, const std::unordered_map>& filament_variant_uses, int extruder_count, int extruder_nozzle_volume_count, @@ -11240,13 +11239,13 @@ void DynamicPrintConfig::update_filament_config_values_for_multiple_extruders(Dy continue; } switch (optdef->type) { - case coStrings: gather_option_values(key, this->option(key), slot_param_indices); break; - case coInts: gather_option_values(key, this->option(key), slot_param_indices); break; - case coFloats: gather_option_values(key, this->option(key), slot_param_indices); break; - case coPercents: gather_option_values(key, this->option(key), slot_param_indices); break; - case coFloatsOrPercents: gather_option_values(key, this->option(key), slot_param_indices); break; - case coBools: gather_option_values(key, this->option(key), slot_param_indices); break; - case coEnums: gather_option_values(key, this->option(key), slot_param_indices); break; + case coStrings: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coInts: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coFloats: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coPercents: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coFloatsOrPercents: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coBools: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; + case coEnums: gather_option_values(__FUNCTION__, key, this->option(key), slot_param_indices); break; default: BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", Line %1%: unsupported option type for %2%")%__LINE__%key; break; @@ -11948,13 +11947,11 @@ CLIActionsConfigDef::CLIActionsConfigDef() def = this->add("load_defaultfila", coBool); def->label = L("Load default filaments"); def->tooltip = L("Load first filament as default for those not loaded."); - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); def = this->add("min_save", coBool); def->label = L("Minimum save"); def->tooltip = L("Export 3MF with minimum size."); - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); def = this->add("mtcpp", coInt); @@ -11977,10 +11974,22 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->tooltip = L("Do not run any validity checks, such as G-code path conflicts check."); def->set_default_value(new ConfigOptionBool(false)); + // --strict turns the non-critical slicing warnings the CLI otherwise only logs into a + // failed run, and records strict_mode in result.json so consumers can tell the modes apart. + def = this->add("strict", coBool); + def->label = L("Strict mode"); + def->tooltip = L("Exit non-zero when slicing raises a non-critical warning that is " + "otherwise only logged, such as a model that needs support while " + "support is disabled. Use this in CI or scripted pipelines that should " + "never ship a subtly broken slice. Each such warning is also listed " + "with a stable class in the `warnings` array of result.json, which is " + "written on Linux only. Cannot be combined with --no-check, which skips " + "the support check."); + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("normative_check", coBool); def->label = L("Normative check"); def->tooltip = L("Check the normative items."); - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(true)); /*def = this->add("help_fff", coBool); @@ -11998,9 +12007,29 @@ CLIActionsConfigDef::CLIActionsConfigDef() def->tooltip = L("This outputs the model\u2019s information."); def->set_default_value(new ConfigOptionBool(false)); + def = this->add("inspect_mesh", coBool); + def->label = L("Inspect mesh (JSON to stdout)"); + def->tooltip = L("Print a JSON summary of each loaded object to stdout, then exit: its bounding boxes and the " + "convex hull faces it can be laid on, with their normals, areas and centers. These are the faces " + "the --ground-* options choose from. Machine-readable alternative to --info."); + def->set_default_value(new ConfigOptionBool(false)); + + // --inspect-paint \u2014 dump the per-facet enforcer/blocker/extruder/fuzzy + // paint state stored on the loaded model (supports, seam, MMU color, + // fuzzy-skin) as JSON. Read-only; lets CI / scripted / AI tooling + // reason about existing paint on a .3mf without loading the GUI. + def = this->add("inspect_paint", coBool); + def->label = L("Inspect paint (JSON to stdout)"); + def->tooltip = L("Print a structured JSON summary of every painted layer " + "(supports, seam, MMU color, fuzzy-skin) already stored on " + "the loaded model \u2014 per-state facet count, surface area, " + "and mesh-local bounding box \u2014 then exit. Machine-readable " + "alternative to opening the paint gizmos in the GUI."); + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("export_settings", coString); def->label = L("Export Settings"); - def->tooltip = L("This exports settings to a file."); + def->tooltip = L("This exports settings to a file. Use - to write them to stdout."); def->cli_params = "settings.json"; def->set_default_value(new ConfigOptionString("output.json")); @@ -12117,6 +12146,34 @@ CLITransformConfigDef::CLITransformConfigDef() def->sidetext = u8"°"; // degrees, don't need translation def->set_default_value(new ConfigOptionFloat(0)); + // The --ground-* options choose from the faces the "Lay on Face" gizmo offers. Like the other + // transforms they run in command-line order, so they see the rotations given before them. + def = this->add("ground_largest_face", coBool); + def->label = L("Ground largest face"); + def->tooltip = L("Lay each object on the largest face of its convex hull and drop it onto the bed. Of equally large " + "faces, the one already facing down is kept. Objects without a face large enough to rest on are left " + "as they are. Transforms run in command-line order, so rotations given before this option are respected. " + "--orient 1 runs after all transforms and replaces the orientation."); + def->set_default_value(new ConfigOptionBool(false)); + + def = this->add("ground_face_normal", coString); + def->label = L("Ground face by normal"); + def->tooltip = L("Lay each object on the convex hull face whose outward normal is closest to the direction NX,NY,NZ " + "and drop it onto the bed. The direction is in object coordinates, which include the rotations given " + "before this option and match the plate axes unless the input file rotates the object. For example, " + "1,0,0 stands the object on its +X side. --orient 1 runs after all transforms and replaces the orientation."); + def->cli_params = "NX,NY,NZ"; + def->set_default_value(new ConfigOptionString("")); + + def = this->add("ground_face_point", coString); + def->label = L("Ground face at point"); + def->tooltip = L("Lay each object on the convex hull face that contains the point X,Y,Z and drop it onto the bed. " + "The point is in object coordinates, which include the rotations given before this option; " + "--inspect-mesh reports face centers in them. Objects without such a face are left as they are, and " + "the run fails if no object has one. --orient 1 runs after all transforms and replaces the orientation."); + def->cli_params = "X,Y,Z"; + def->set_default_value(new ConfigOptionString("")); + def = this->add("scale", coFloat); def->label = L("Scale"); def->tooltip = L("Scale the model by a float factor."); @@ -12247,7 +12304,7 @@ CLIMiscConfigDef::CLIMiscConfigDef() def->cli_params = "level"; def->set_default_value(new ConfigOptionInt(1)); - def = this->add("logfile", coInt); + def = this->add("logfile", coString); def->label = L("Log file"); def->tooltip = L("Redirects debug logging to file.\n"); def->cli_params = "file"; @@ -12295,7 +12352,6 @@ CLIMiscConfigDef::CLIMiscConfigDef() def = this->add("skip_modified_gcodes", coBool); def->label = L("Skip modified G-code in 3MF"); def->tooltip = L("Skip the modified G-code in 3MF from printer or filament presets."); - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); def = this->add("makerlab_name", coString); @@ -12325,14 +12381,12 @@ CLIMiscConfigDef::CLIMiscConfigDef() def = this->add("allow_newer_file", coBool); def->label = L("Allow 3MF with newer version to be sliced"); def->tooltip = L("Allow 3MF with newer version to be sliced."); - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); def = this->add("allow_mix_temp", coBool); // internal use only, don't need translation def->label = "Allow filaments with high/low temperature to be printed together"; def->tooltip = "Allow filaments with high/low temperature to be printed together."; - def->cli_params = "option"; def->set_default_value(new ConfigOptionBool(false)); } diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 330151c4d3..727246ef73 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -113,7 +113,7 @@ enum InfillPattern : int { ipCubic, ipAdaptiveCubic, ipQuarterCubic, ipSupportCubic, ipLightning, ipHoneycomb, ip3DHoneycomb, ipLateralHoneycomb, ipLateralLattice, ipCrossHatch, ipTpmsD, ipTpmsFK, ipGyroid, - ipConcentric, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, + ipConcentric, ipSpiralInset, ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportBase, ipConcentricInternal, ipCount, }; @@ -271,7 +271,7 @@ enum LongRectrationLevel }; enum SupportMaterialInterfacePattern { - smipAuto, smipRectilinear, smipConcentric, smipRectilinearInterlaced, smipGrid + smipAuto, smipRectilinear, smipConcentric, smipSpiralInset, smipRectilinearInterlaced, smipGrid }; // BBS @@ -1011,41 +1011,46 @@ public: \ { PrintConfigDef::handle_legacy(opt_key, value); } #define PRINT_CONFIG_CLASS_ELEMENT_DEFINITION(r, data, elem) BOOST_PP_TUPLE_ELEM(0, elem) BOOST_PP_TUPLE_ELEM(1, elem); -#define PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2(KEY) cache.opt_add(BOOST_PP_STRINGIZE(KEY), base_ptr, this->KEY); -#define PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION(r, data, elem) PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2(BOOST_PP_TUPLE_ELEM(1, elem)) -#define PRINT_CONFIG_CLASS_ELEMENT_HASH(r, data, elem) boost::hash_combine(seed, BOOST_PP_TUPLE_ELEM(1, elem).hash()); -#define PRINT_CONFIG_CLASS_ELEMENT_EQUAL(r, data, elem) if (! (BOOST_PP_TUPLE_ELEM(1, elem) == rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return false; -#define PRINT_CONFIG_CLASS_ELEMENT_LOWER(r, data, elem) \ - if (BOOST_PP_TUPLE_ELEM(1, elem) < rhs.BOOST_PP_TUPLE_ELEM(1, elem)) return true; \ - if (! (BOOST_PP_TUPLE_ELEM(1, elem) == rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return false; +#define PRINT_CONFIG_CLASS_ELEMENT_VISIT(r, data, elem) if (! f(BOOST_PP_STRINGIZE(BOOST_PP_TUPLE_ELEM(1, elem)), this->BOOST_PP_TUPLE_ELEM(1, elem), rhs.BOOST_PP_TUPLE_ELEM(1, elem))) return; +// Each option list is expanded into the members and again into for_each_option_pair(), which calls +// f(key, this->option, rhs.option) in declaration order and stops when f returns false. hash(), +// operator==, operator< and initialize() iterate the options through that visitor. +#define PRINT_CONFIG_CLASS_COMMON_BODY(CLASS_NAME) \ + size_t hash() const throw() \ + { \ + size_t seed = 0; \ + this->for_each_option_pair(*this, [&seed](const char*, const auto &a, const auto&) { boost::hash_combine(seed, a.hash()); return true; }); \ + return seed; \ + } \ + bool operator==(const CLASS_NAME &rhs) const throw() \ + { \ + bool eq = true; \ + this->for_each_option_pair(rhs, [&eq](const char*, const auto &a, const auto &b) { eq = (a == b); return eq; }); \ + return eq; \ + } \ + bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ + bool operator<(const CLASS_NAME &rhs) const throw() \ + { \ + int c = 0; \ + this->for_each_option_pair(rhs, [&c](const char*, const auto &a, const auto &b) { if (a < b) c = -1; else if (! (a == b)) c = 1; return c == 0; }); \ + return c < 0; \ + } \ +protected: \ + void initialize(StaticCacheBase &cache, const char *base_ptr) \ + { \ + this->for_each_option_pair(*this, [&cache, base_ptr](const char *key, const auto &a, const auto&) { cache.opt_add(key, base_ptr, a); return true; }); \ + } #define PRINT_CONFIG_CLASS_DEFINE(CLASS_NAME, PARAMETER_DEFINITION_SEQ) \ class CLASS_NAME : public StaticPrintConfig { \ STATIC_PRINT_CONFIG_CACHE(CLASS_NAME) \ public: \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_DEFINITION, _, PARAMETER_DEFINITION_SEQ) \ - size_t hash() const throw() \ + template void for_each_option_pair(const CLASS_NAME &rhs, F &&f) const \ { \ - size_t seed = 0; \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_HASH, _, PARAMETER_DEFINITION_SEQ) \ - return seed; \ - } \ - bool operator==(const CLASS_NAME &rhs) const throw() \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_EQUAL, _, PARAMETER_DEFINITION_SEQ) \ - return true; \ - } \ - bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ - bool operator<(const CLASS_NAME &rhs) const throw() \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_LOWER, _, PARAMETER_DEFINITION_SEQ) \ - return false; \ - } \ -protected: \ - void initialize(StaticCacheBase &cache, const char *base_ptr) \ - { \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION, _, PARAMETER_DEFINITION_SEQ) \ + BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_VISIT, _, PARAMETER_DEFINITION_SEQ) \ } \ + PRINT_CONFIG_CLASS_COMMON_BODY(CLASS_NAME) \ }; #define PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST_ITEM(r, data, i, elem) BOOST_PP_COMMA_IF(i) public elem @@ -1059,43 +1064,43 @@ protected: \ if (! (*static_cast(this) == static_cast(rhs))) return false; // Generic version, with or without new parameters. Don't use this directly. -#define PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION, PARAMETER_REGISTRATION, PARAMETER_HASHES, PARAMETER_EQUALS) \ +#define PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION, PARAMETER_VISIT) \ class CLASS_NAME : PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST(CLASSES_PARENTS_TUPLE) { \ STATIC_PRINT_CONFIG_CACHE_DERIVED(CLASS_NAME) \ CLASS_NAME() : PRINT_CONFIG_CLASS_DERIVED_INITIALIZER(CLASSES_PARENTS_TUPLE, 0) { assert(s_cache_##CLASS_NAME.initialized()); *this = s_cache_##CLASS_NAME.defaults(); } \ public: \ PARAMETER_DEFINITION \ + template void for_each_option_pair(const CLASS_NAME &rhs, F &&f) const { PARAMETER_VISIT } \ size_t hash() const throw() \ { \ size_t seed = 0; \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_DERIVED_HASH, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_PARENTS_TUPLE)) \ - PARAMETER_HASHES \ + this->for_each_option_pair(*this, [&seed](const char*, const auto &a, const auto&) { boost::hash_combine(seed, a.hash()); return true; }); \ return seed; \ } \ bool operator==(const CLASS_NAME &rhs) const throw() \ { \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_DERIVED_EQUAL, _, BOOST_PP_TUPLE_TO_SEQ(CLASSES_PARENTS_TUPLE)) \ - PARAMETER_EQUALS \ - return true; \ + bool eq = true; \ + this->for_each_option_pair(rhs, [&eq](const char*, const auto &a, const auto &b) { eq = (a == b); return eq; }); \ + return eq; \ } \ bool operator!=(const CLASS_NAME &rhs) const throw() { return ! (*this == rhs); } \ protected: \ CLASS_NAME(int) : PRINT_CONFIG_CLASS_DERIVED_INITIALIZER(CLASSES_PARENTS_TUPLE, 1) {} \ void initialize(StaticCacheBase &cache, const char* base_ptr) { \ PRINT_CONFIG_CLASS_DERIVED_INITCACHE(CLASSES_PARENTS_TUPLE) \ - PARAMETER_REGISTRATION \ + this->for_each_option_pair(*this, [&cache, base_ptr](const char *key, const auto &a, const auto&) { cache.opt_add(key, base_ptr, a); return true; }); \ } \ }; // Variant without adding new parameters. #define PRINT_CONFIG_CLASS_DERIVED_DEFINE0(CLASS_NAME, CLASSES_PARENTS_TUPLE) \ - PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, BOOST_PP_EMPTY(), BOOST_PP_EMPTY(), BOOST_PP_EMPTY(), BOOST_PP_EMPTY()) + PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, BOOST_PP_EMPTY(), BOOST_PP_EMPTY()) // Variant with adding new parameters. #define PRINT_CONFIG_CLASS_DERIVED_DEFINE(CLASS_NAME, CLASSES_PARENTS_TUPLE, PARAMETER_DEFINITION_SEQ) \ PRINT_CONFIG_CLASS_DERIVED_DEFINE1(CLASS_NAME, CLASSES_PARENTS_TUPLE, \ BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_DEFINITION, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_HASH, _, PARAMETER_DEFINITION_SEQ), \ - BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_EQUAL, _, PARAMETER_DEFINITION_SEQ)) + BOOST_PP_SEQ_FOR_EACH(PRINT_CONFIG_CLASS_ELEMENT_VISIT, _, PARAMETER_DEFINITION_SEQ)) // This object is mapped to Perl as Slic3r::Config::PrintObject. PRINT_CONFIG_CLASS_DEFINE( @@ -1348,6 +1353,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatsNullable, filament_ironing_speed)) // Detect bridging perimeters ((ConfigOptionBool, detect_overhang_wall)) + ((ConfigOptionBool, unsupported_wall_last)) ((ConfigOptionInt, outer_wall_filament_id)) ((ConfigOptionInt, inner_wall_filament_id)) ((ConfigOptionFloatOrPercent, inner_wall_line_width)) @@ -1386,6 +1392,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, role_based_wipe_speed)) ((ConfigOptionFloatOrPercent, wipe_speed)) ((ConfigOptionBool, wipe_on_loops)) + ((ConfigOptionBool, wipe_inward)) + ((ConfigOptionFloatOrPercent, wipe_inward_distance)) ((ConfigOptionBool, wipe_before_external_loop)) ((ConfigOptionEnum, wall_infill_order)) ((ConfigOptionBool, precise_outer_wall)) @@ -1620,6 +1628,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, manual_filament_change)) ((ConfigOptionBool, single_extruder_multi_material_priming)) ((ConfigOptionEnum, toolchange_ordering)) + ((ConfigOptionString, toolchange_cyclic_order)) + ((ConfigOptionBool, toolchange_cyclic_first_layer)) ((ConfigOptionBool, wipe_tower_no_sparse_layers)) ((ConfigOptionString, change_filament_gcode)) ((ConfigOptionString, change_extrusion_role_gcode)) @@ -1781,6 +1791,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBools, slow_down_for_layer_cooling)) ((ConfigOptionInts, close_fan_the_first_x_layers)) ((ConfigOptionEnum, draft_shield)) + ((ConfigOptionFloat, extruder_clearance_dist_to_rod))//BBS ((ConfigOptionFloat, extruder_clearance_height_to_rod))//BBs ((ConfigOptionFloat, extruder_clearance_height_to_lid))//BBS ((ConfigOptionFloat, extruder_clearance_radius)) @@ -2148,11 +2159,8 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE0( #undef STATIC_PRINT_CONFIG_CACHE_BASE #undef STATIC_PRINT_CONFIG_CACHE_DERIVED #undef PRINT_CONFIG_CLASS_ELEMENT_DEFINITION -#undef PRINT_CONFIG_CLASS_ELEMENT_EQUAL -#undef PRINT_CONFIG_CLASS_ELEMENT_LOWER -#undef PRINT_CONFIG_CLASS_ELEMENT_HASH -#undef PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION -#undef PRINT_CONFIG_CLASS_ELEMENT_INITIALIZATION2 +#undef PRINT_CONFIG_CLASS_ELEMENT_VISIT +#undef PRINT_CONFIG_CLASS_COMMON_BODY #undef PRINT_CONFIG_CLASS_DEFINE #undef PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST #undef PRINT_CONFIG_CLASS_DERIVED_CLASS_LIST_ITEM diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 8368de1a4f..3b7e889472 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -21,9 +21,11 @@ #include "TriangleMeshSlicer.hpp" #include "Utils.hpp" #include "Fill/FillAdaptive.hpp" +#include "Fill/Fill.hpp" #include "Fill/FillLightning.hpp" #include "Format/STL.hpp" #include "format.hpp" +#include "AABBTreeIndirect.hpp" #include "AABBTreeLines.hpp" #include @@ -672,6 +674,98 @@ void PrintObject::prepare_infill() } // for each region #endif /* SLIC3R_DEBUG_SLICE_PROCESSING */ + // Orca: precompute the object's 3D connected bodies for separated infills / per-model + // centering. Two islands belong to the same body when their slices overlap on adjacent + // layers; islands that only overlap in top-down projection but never touch (e.g. interleaved + // chain links) stay separate, matching "split to objects". Each layer island then records + // the full bounding box of its body, so its infill is centered on that body as if it were + // sliced alone. Compute this before bridges so anchors and extrusion share the same origin. + bool needs_separated_components = false; + for (size_t i = 0; i < this->num_printing_regions(); ++ i) { + const PrintRegionConfig &rc = this->printing_region(i).config(); + if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) { + needs_separated_components = true; + break; + } + } + // Orca: Fast path: the feature only changes anything when the object is made of more than one + // connected body. Detect that cheaply the same way as "Split to objects" — more than one + // model part, or a single part whose mesh is splittable (is_splittable() is cached). A single + // body already shares the object center, i.e. the default, so skip the connectivity pass. + if (needs_separated_components) { + int parts = 0; + const ModelVolume *first_part = nullptr; + for (const ModelVolume *v : this->model_object()->volumes) + if (v->is_model_part()) { ++ parts; first_part = v; } + if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable())) + needs_separated_components = false; + } + for (Layer *layer : m_layers) + layer->lslices_separated_component_bboxes.clear(); + if (needs_separated_components) { + const size_t nl = m_layers.size(); + std::vector offset(nl + 1, 0); // Orca: flat index of the first island of each layer + for (size_t i = 0; i < nl; ++ i) + offset[i + 1] = offset[i] + m_layers[i]->lslices.size(); + const size_t nreg = offset[nl]; + // Orca: Union-find over every (layer, island). + std::vector parent(nreg); + for (size_t i = 0; i < nreg; ++ i) parent[i] = i; + auto find = [&parent](size_t x) { + while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } + return x; + }; + auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; }; + // Orca: Index the smaller of two consecutive layers instead of scanning every + // pair of islands. The tree prunes distant boxes on fragmented models; exact + // polygon intersections still decide connectivity for the remaining candidates. + for (size_t i = 0; i + 1 < nl; ++ i) { + m_print->throw_if_canceled(); + size_t layer_a = i, layer_b = i + 1; + if (m_layers[layer_a]->lslices.size() < m_layers[layer_b]->lslices.size()) + std::swap(layer_a, layer_b); + const Layer *la = m_layers[layer_a], *lb = m_layers[layer_b]; + if (lb->lslices.empty()) + continue; + + using IslandTree = AABBTreeIndirect::Tree<2, coord_t>; + std::vector bboxes; + bboxes.reserve(lb->lslices.size()); + for (size_t b = 0; b < lb->lslices.size(); ++ b) + bboxes.emplace_back(b, lb->lslices_bboxes[b]); + IslandTree tree; + tree.build_modify_input(bboxes); + for (size_t a = 0; a < la->lslices.size(); ++ a) { + const IslandTree::BoundingBox query(la->lslices_bboxes[a].min, la->lslices_bboxes[a].max); + AABBTreeIndirect::traverse(tree, + [&query](const IslandTree::Node &node) { return node.bbox.intersects(query); }, + [&](const IslandTree::Node &node) { + const size_t b = node.idx; + // Orca: Tree boxes include an epsilon, so retain the original box + // filter. Already-connected islands cannot change the partition + // and need no further polygon intersection. + if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) && + find(offset[layer_a] + a) != find(offset[layer_b] + b) && + ! intersection_ex(la->lslices[a], lb->lslices[b]).empty()) + unite(offset[layer_a] + a, offset[layer_b] + b); + return true; + }); + } + } + // Orca: Full bounding box of each body, indexed by its union-find root. + std::vector body_bbox(nreg); + for (size_t i = 0; i < nl; ++ i) + for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a) + body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]); + // Orca: Store the body bbox for every island. + for (size_t i = 0; i < nl; ++ i) { + Layer *layer = m_layers[i]; + layer->lslices_separated_component_bboxes.resize(layer->lslices.size()); + for (size_t a = 0; a < layer->lslices.size(); ++ a) + layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)]; + } + } + // the following step needs to be done before combination because it may need // to remove only half of the combined infill this->bridge_over_infill(); @@ -706,71 +800,6 @@ void PrintObject::infill() if (this->set_started(posInfill)) { m_print->set_status(35, L("Generating infill toolpath")); - // Orca: precompute the object's 3D connected bodies for separated infills / per-model - // centering. Two islands belong to the same body when their slices overlap on adjacent - // layers; islands that only overlap in top-down projection but never touch (e.g. interleaved - // chain links) stay separate, matching "split to objects". Each layer island then records - // the full bounding box of its body, so its infill is centered on that body as if it were - // sliced alone. Done once here, before the parallel fill, and only when a region needs it. - bool needs_separated_components = false; - for (size_t i = 0; i < this->num_printing_regions(); ++ i) { - const PrintRegionConfig &rc = this->printing_region(i).config(); - if (rc.separated_infills || rc.center_of_surface_pattern == CenterOfSurfacePattern::Each_Model) { - needs_separated_components = true; - break; - } - } - // Fast path: the feature only changes anything when the object is made of more than one - // connected body. Detect that cheaply the same way as "Split to objects" — more than one - // model part, or a single part whose mesh is splittable (is_splittable() is cached). A single - // body already shares the object center, i.e. the default, so skip the connectivity pass. - if (needs_separated_components) { - int parts = 0; - const ModelVolume *first_part = nullptr; - for (const ModelVolume *v : this->model_object()->volumes) - if (v->is_model_part()) { ++ parts; first_part = v; } - if (parts <= 1 && ! (first_part != nullptr && first_part->is_splittable())) - needs_separated_components = false; - } - for (Layer *layer : m_layers) - layer->lslices_separated_component_bboxes.clear(); - if (needs_separated_components) { - const size_t nl = m_layers.size(); - std::vector offset(nl + 1, 0); // flat index of the first island of each layer - for (size_t i = 0; i < nl; ++ i) - offset[i + 1] = offset[i] + m_layers[i]->lslices.size(); - const size_t nreg = offset[nl]; - // Union-find over every (layer, island). - std::vector parent(nreg); - for (size_t i = 0; i < nreg; ++ i) parent[i] = i; - auto find = [&parent](size_t x) { - while (parent[x] != x) { parent[x] = parent[parent[x]]; x = parent[x]; } - return x; - }; - auto unite = [&](size_t a, size_t b) { a = find(a); b = find(b); if (a != b) parent[a] = b; }; - // Join islands that overlap between two consecutive layers. - for (size_t i = 0; i + 1 < nl; ++ i) { - const Layer *la = m_layers[i], *lb = m_layers[i + 1]; - for (size_t a = 0; a < la->lslices.size(); ++ a) - for (size_t b = 0; b < lb->lslices.size(); ++ b) - if (la->lslices_bboxes[a].overlap(lb->lslices_bboxes[b]) && - ! intersection_ex(la->lslices[a], lb->lslices[b]).empty()) - unite(offset[i] + a, offset[i + 1] + b); - } - // Full bounding box of each body, indexed by its union-find root. - std::vector body_bbox(nreg); - for (size_t i = 0; i < nl; ++ i) - for (size_t a = 0; a < m_layers[i]->lslices.size(); ++ a) - body_bbox[find(offset[i] + a)].merge(m_layers[i]->lslices_bboxes[a]); - // Store the body bbox for every island. - for (size_t i = 0; i < nl; ++ i) { - Layer *layer = m_layers[i]; - layer->lslices_separated_component_bboxes.resize(layer->lslices.size()); - for (size_t a = 0; a < layer->lslices.size(); ++ a) - layer->lslices_separated_component_bboxes[a] = body_bbox[find(offset[i] + a)]; - } - } - const auto& adaptive_fill_octree = this->m_adaptive_fill_octrees.first; const auto& support_fill_octree = this->m_adaptive_fill_octrees.second; @@ -906,7 +935,7 @@ void PrintObject::detect_overhangs_for_lift() Layer& lower_layer = *layer.lower_layer; ExPolygons overhangs = diff_ex(layer.lslices, offset_ex(lower_layer.lslices, scale_(min_overlap))); - layer.loverhangs = std::move(offset2_ex(overhangs, -0.1f * scale_(line_width), 0.1f * scale_(line_width))); + layer.loverhangs = offset2_ex(overhangs, -0.1f * scale_(line_width), 0.1f * scale_(line_width)); layer.loverhangs_bbox = get_extents(layer.loverhangs); } }); @@ -1401,8 +1430,6 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "infill_anchor_max" || opt_key == "top_surface_line_width" || opt_key == "bottom_surface_density" - || opt_key == "center_of_surface_pattern" - || opt_key == "separated_infills" || opt_key == "initial_layer_line_width" || opt_key == "small_area_infill_flow_compensation" || opt_key == "lateral_lattice_angle_1" @@ -1410,6 +1437,10 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "infill_overhang_angle") { steps.emplace_back(posInfill); } else if (opt_key == "sparse_infill_pattern" + // Orca: Body centering now also determines bridge anchors during preparation. + // Invalidating preparation also invalidates infill, including top/bottom surfaces. + || opt_key == "center_of_surface_pattern" + || opt_key == "separated_infills" || opt_key == "sparse_infill_smooth_factor" || opt_key == "symmetric_infill_y_axis" || opt_key == "infill_shift_step" @@ -1470,6 +1501,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "fuzzy_skin_octaves" || opt_key == "fuzzy_skin_persistence" || opt_key == "detect_overhang_wall" + || opt_key == "unsupported_wall_last" || opt_key == "overhang_reverse" || opt_key == "overhang_reverse_internal_only" || opt_key == "overhang_reverse_threshold" @@ -1480,13 +1512,9 @@ bool PrintObject::invalidate_state_by_config_options( steps.emplace_back(posPerimeters); steps.emplace_back(posSupportMaterial); } else if (opt_key == "bridge_flow" || opt_key == "internal_bridge_flow") { - if (m_config.support_top_z_distance > 0.) { - // Only invalidate due to bridging if bridging is enabled. - // If later "support_top_z_distance" is modified, the complete PrintObject is invalidated anyway. - steps.emplace_back(posPerimeters); - steps.emplace_back(posInfill); - steps.emplace_back(posSupportMaterial); - } + steps.emplace_back(posPerimeters); + steps.emplace_back(posInfill); + steps.emplace_back(posSupportMaterial); } else if ( opt_key == "wall_generator" || opt_key == "wall_transition_length" @@ -1547,6 +1575,8 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "brim_flow_ratio" || opt_key == "filament_flow_ratio" || opt_key == "scarf_joint_flow_ratio" + || opt_key == "wipe_inward" + || opt_key == "wipe_inward_distance" || opt_key == "spiral_starting_flow_ratio" || opt_key == "spiral_finishing_flow_ratio") { invalidated |= m_print->invalidate_step(psGCodeExport); @@ -1604,7 +1634,9 @@ bool PrintObject::invalidate_step(PrintObjectStep step) bool PrintObject::invalidate_all_steps() { // First call the "invalidate" functions, which may cancel background processing. - bool result = Inherited::invalidate_all_steps() | m_print->invalidate_all_steps(); + const bool inherited_invalidated = Inherited::invalidate_all_steps(); + const bool print_invalidated = m_print->invalidate_all_steps(); + bool result = inherited_invalidated || print_invalidated; // Then reset some of the depending values. m_slicing_params.valid = false; return result; @@ -2666,7 +2698,7 @@ void PrintObject::bridge_over_infill() // SECTION to gather and filter surfaces for expanding, and then cluster them by layer { tbb::concurrent_vector candidate_surfaces; - tbb::parallel_for(tbb::blocked_range(0, this->layers().size()), [po = static_cast(this), &candidate_surfaces, has_lightning_infill](tbb::blocked_range r) { + tbb::parallel_for(tbb::blocked_range(0, this->layers().size()), [po = static_cast(this), &candidate_surfaces](tbb::blocked_range r) { PRINT_OBJECT_TIME_LIMIT_MILLIS(PRINT_OBJECT_TIME_LIMIT_DEFAULT); for (size_t lidx = r.begin(); lidx < r.end(); lidx++) { const Layer *layer = po->get_layer(lidx); @@ -3009,21 +3041,12 @@ void PrintObject::bridge_over_infill() return diff(layers_sparse_infill, not_sparse_infill); }; - // LAMBDA do determine optimal bridging angle - auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors, InfillPattern dominant_pattern, double infill_direction) { + // Orca: Derive the fallback bridge direction from the supplied anchor geometry. + // Pattern-specific angle selection belongs at the call site, where the supporting + // layer and region are known; this helper must not override it with a base config angle. + auto determine_bridging_angle = [](const Polygons &bridged_area, const Lines &anchors) { AABBTreeLines::LinesDistancer lines_tree(anchors); - // Orca: since 3D Honeycomb was "fixed" by forcing coordf_t layerHeight = scale_(1.0), this is no longer needed. - // CorssHatch also does not need fixed angle. - // - // Check it the infill that require a fixed infill angle. - //switch (dominant_pattern) { - //case ip3DHoneycomb: - //case ipCrossHatch: - // return (infill_direction + 45.0) * 2.0 * M_PI / 360.; - //default: break; - //} - std::map counted_directions; for (const Polygon &p : bridged_area) { double acc_distance = 0; @@ -3089,18 +3112,15 @@ void PrintObject::bridge_over_infill() if (bridging_angle == 0) { bridging_angle = 0.001; } - switch (dominant_pattern) { - case ipHilbertCurve: bridging_angle += 0.25 * PI; break; - case ipOctagramSpiral: bridging_angle += (1.0 / 16.0) * PI; break; - default: break; - } return bridging_angle; }; - // LAMBDA that will fill given polygons with lines, exapand the lines to the nearest anchor, and reconstruct polygons from the newly - // generated lines - auto construct_anchored_polygon = [](Polygons bridged_area, Lines anchors, const Flow &bridging_flow, double bridging_angle) { + // Orca: Extend scan sections to the nearest anchors and reconstruct the bridge area. + // scan_spacing controls boundary sampling independently of the extrusion spacing; + // anchoring overlap and smoothing thresholds still use the physical bridging flow. + auto construct_anchored_polygon = [](Polygons bridged_area, Lines anchors, const Flow &bridging_flow, double bridging_angle, + coord_t scan_spacing, bool restore_anchors = false) { auto lines_rotate = [](Lines &lines, double cos_angle, double sin_angle) { for (Line &l : lines) { double ax = double(l.a.x()); @@ -3127,12 +3147,12 @@ void PrintObject::bridge_over_infill() BoundingBox bb_x = get_extents(bridged_area); BoundingBox bb_y = get_extents(anchors); - const size_t n_vlines = (bb_x.max.x() - bb_x.min.x() + bridging_flow.scaled_spacing() - 1) / bridging_flow.scaled_spacing(); + const size_t n_vlines = (bb_x.max.x() - bb_x.min.x() + scan_spacing - 1) / scan_spacing; std::vector vertical_lines(n_vlines); for (size_t i = 0; i < n_vlines; i++) { - // Orca: Make sure the line is placed in the middle of the extrusion - // coord_t x = bb_x.min.x() + i * bridging_flow.scaled_spacing(); - coord_t x = bb_x.min.x() + (i + 0.5) * bridging_flow.scaled_spacing(); + // Orca: Sample the center of each reconstructed strip. Its edges lie + // half a scan step away, even when the sampling is finer than extrusion. + coord_t x = bb_x.min.x() + (i + 0.5) * scan_spacing; coord_t y_min = bb_y.min.y() - bridging_flow.scaled_spacing(); coord_t y_max = bb_y.max.y() + bridging_flow.scaled_spacing(); vertical_lines[i].a = Point{x, y_min}; @@ -3155,7 +3175,11 @@ void PrintObject::bridge_over_infill() auto anchors_intersections = anchors_and_walls_tree.intersections_with_line(vertical_lines[i]); for (Line §ion : polygon_sections[i]) { - auto maybe_below_anchor = std::upper_bound(anchors_intersections.rbegin(), anchors_intersections.rend(), section.a, + // Orca: A repaired boundary may already overlap its anchor by one flow width. + // Include that overlap in the search so restoring rounded corners does not + // extend every already anchored section into the next sparse infill cell. + const coord_t overlap = restore_anchors ? bridging_flow.scaled_width() + SCALED_EPSILON : 0; + auto maybe_below_anchor = std::upper_bound(anchors_intersections.rbegin(), anchors_intersections.rend(), section.a + Point{0, overlap}, [](const Point &a, const std::pair &b) { return a.y() > b.first.y(); }); @@ -3164,7 +3188,7 @@ void PrintObject::bridge_over_infill() section.a.y() -= bridging_flow.scaled_width() * (0.5 + 0.5); } - auto maybe_upper_anchor = std::upper_bound(anchors_intersections.begin(), anchors_intersections.end(), section.b, + auto maybe_upper_anchor = std::upper_bound(anchors_intersections.begin(), anchors_intersections.end(), section.b - Point{0, overlap}, [](const Point &a, const std::pair &b) { return a.y() < b.first.y(); }); @@ -3194,7 +3218,9 @@ void PrintObject::bridge_over_infill() }); } - // reconstruct polygon from polygon sections + // Orca: Reconstruct the polygon from scan sections. At discontinuities and + // strip starts/ends, use half the scan step for the X offsets; using half an + // extrusion spacing would overlap the finer strips and distort curved anchors. struct TracedPoly { Points lows; @@ -3220,8 +3246,8 @@ void PrintObject::bridge_over_infill() 36.0 * double(bridging_flow.scaled_spacing()) * bridging_flow.scaled_spacing()) { traced_poly.lows.push_back(candidate->a); } else { - traced_poly.lows.push_back(traced_poly.lows.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.lows.push_back(candidate->a - Point{bridging_flow.scaled_spacing() / 2, 0}); + traced_poly.lows.push_back(traced_poly.lows.back() + Point{scan_spacing / 2, 0}); + traced_poly.lows.push_back(candidate->a - Point{scan_spacing / 2, 0}); traced_poly.lows.push_back(candidate->a); } @@ -3229,8 +3255,8 @@ void PrintObject::bridge_over_infill() 36.0 * double(bridging_flow.scaled_spacing()) * bridging_flow.scaled_spacing()) { traced_poly.highs.push_back(candidate->b); } else { - traced_poly.highs.push_back(traced_poly.highs.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.highs.push_back(candidate->b - Point{bridging_flow.scaled_spacing() / 2, 0}); + traced_poly.highs.push_back(traced_poly.highs.back() + Point{scan_spacing / 2, 0}); + traced_poly.highs.push_back(candidate->b - Point{scan_spacing / 2, 0}); traced_poly.highs.push_back(candidate->b); } segment_added = true; @@ -3238,9 +3264,9 @@ void PrintObject::bridge_over_infill() } if (!segment_added) { - // Zero overlapping segments, we just close this polygon - traced_poly.lows.push_back(traced_poly.lows.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); - traced_poly.highs.push_back(traced_poly.highs.back() + Point{bridging_flow.scaled_spacing() / 2, 0}); + // Orca: No section continues this strip; close at its right edge. + traced_poly.lows.push_back(traced_poly.lows.back() + Point{scan_spacing / 2, 0}); + traced_poly.highs.push_back(traced_poly.highs.back() + Point{scan_spacing / 2, 0}); Polygon &new_poly = expanded_bridged_area.emplace_back(std::move(traced_poly.lows)); new_poly.points.insert(new_poly.points.end(), traced_poly.highs.rbegin(), traced_poly.highs.rend()); traced_poly.lows.clear(); @@ -3255,9 +3281,9 @@ void PrintObject::bridge_over_infill() for (const auto &segment : polygon_slice) { if (used_segments.find(&segment) == used_segments.end()) { TracedPoly &new_tp = current_traced_polys.emplace_back(); - new_tp.lows.push_back(segment.a - Point{bridging_flow.scaled_spacing() / 2, 0}); + new_tp.lows.push_back(segment.a - Point{scan_spacing / 2, 0}); new_tp.lows.push_back(segment.a); - new_tp.highs.push_back(segment.b - Point{bridging_flow.scaled_spacing() / 2, 0}); + new_tp.highs.push_back(segment.b - Point{scan_spacing / 2, 0}); new_tp.highs.push_back(segment.b); } } @@ -3364,7 +3390,10 @@ void PrintObject::bridge_over_infill() total_fill_area = closing(total_fill_area, float(SCALED_EPSILON)); expansion_area = closing(expansion_area, float(SCALED_EPSILON)); expansion_area = intersection(expansion_area, deep_infill_area); - Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing)); + // Orca: Preserve the real lower-layer anchors for every candidate in this + // layer. Replacing this shared set for one pattern also changes later regions, + // and synthetic straight lines can claim support where no infill is printed. + const Polylines anchors = intersection_pl(infill_lines[lidx - 1], shrink(expansion_area, spacing)); Polygons internal_unsupported_area = shrink(deep_infill_area, spacing * 4.5); #ifdef DEBUG_BRIDGE_OVER_INFILL @@ -3375,6 +3404,9 @@ void PrintObject::bridge_over_infill() std::vector expanded_surfaces; expanded_surfaces.reserve(surfaces_by_layer[lidx].size()); for (const CandidateSurface &candidate : surfaces_by_layer[lidx]) { + const auto ®ion_config = candidate.region->region().config(); + const bool turning_pattern = region_config.sparse_infill_pattern == ipHilbertCurve || + region_config.sparse_infill_pattern == ipOctagramSpiral; const Flow &flow = candidate.region->bridging_flow(frSolidInfill, true); Polygons area_to_be_bridge = expand(candidate.new_polys, flow.scaled_spacing()); area_to_be_bridge = intersection(area_to_be_bridge, deep_infill_area); @@ -3403,20 +3435,40 @@ void PrintObject::bridge_over_infill() to_lines(area_to_be_bridge), to_lines(boundary_plines), to_lines(anchors), to_lines(expansion_area)); #endif - double bridging_angle = 0; - if (!anchors.empty()) { - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors), - candidate.region->region().config().sparse_infill_pattern.value, - candidate.region->region().config().infill_direction.value); - } else { - // use expansion boundaries as anchors. - // Also, use Infill pattern that is neutral for angle determination, since there are no infill lines. - bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(boundary_plines), InfillPattern::ipLine, 0); + double bridging_angle = -1.; + if (!anchors.empty() && turning_pattern) { + // Orca: Keep adjacent bridges over Hilbert/Octagram aligned despite + // their many local turning directions. Use the lower layer's rotation, + // since that is the infill supporting the bridge, not the current layer's. + for (const LayerRegion *lower_region : layer->lower_layer->regions()) { + // Orca: Apply the configured direction only if the same region has + // sparse infill below this bridge. A height modifier may put another + // pattern underneath, requiring the geometry-based fallback below. + if (&lower_region->region() != &candidate.region->region() || + intersection(area_to_be_bridge, to_polygons(lower_region->fill_surfaces.filter_by_type(stInternal))).empty()) + continue; + bridging_angle = calculate_infill_rotation_angle(po, layer->lower_layer->id(), region_config.infill_direction.value, + region_config.sparse_infill_rotate_template.value) + 0.5 * PI; + // Orca: Apply model alignment as infill generation does, then normalize + // the undirected bridge angle to [0, PI), including negative rotations. + if (region_config.align_infill_direction_to_model) { + const auto &m = po->trafo().matrix(); + bridging_angle += std::atan2(double(m(1, 0)), double(m(0, 0))); + } + bridging_angle = std::fmod(bridging_angle, PI); + if (bridging_angle < 0.) + bridging_angle += PI; + break; + } } + // Orca: A different region below (e.g. a height modifier) needs the actual anchor + // directions. When there are no sparse anchors, use the expansion boundaries. + if (bridging_angle < 0.) + bridging_angle = determine_bridging_angle(area_to_be_bridge, to_lines(anchors.empty() ? boundary_plines : anchors)); - // ORCA: Internal bridge angle override + // Orca: Preserve the user's absolute or relative internal bridge angle + // override after automatic direction selection. if (candidate.region->region().config().internal_bridge_angle.value > 0) { - const auto ®ion_config = candidate.region->region().config(); const double custom_angle_rad = Geometry::deg2rad(region_config.internal_bridge_angle.value); if (region_config.relative_bridge_angle.value) bridging_angle += custom_angle_rad; @@ -3429,11 +3481,19 @@ void PrintObject::bridge_over_infill() } } + // Orca: Changing the bridge direction must not change its physical supports. + // Extend to actual sparse infill or the existing boundary anchors, never to + // a synthetic grid that merely has the same nominal angle and spacing. boundary_plines.insert(boundary_plines.end(), anchors.begin(), anchors.end()); if (!lightning_area.empty() && !intersection(area_to_be_bridge, lightning_area).empty()) { boundary_plines = intersection_pl(boundary_plines, expand(area_to_be_bridge, scale_(10))); } - Polygons bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle); + // Orca: Use four samples per extrusion spacing for Hilbert/Octagram so the + // reconstructed boundary follows rounded anchors instead of cutting corners. + // Keep the original step for other patterns and at least one coordinate unit + // after integer division. This changes boundary accuracy, not infill density. + const coord_t scan_spacing = std::max(coord_t(1), flow.scaled_spacing() / (turning_pattern ? 4 : 1)); + Polygons bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle, scan_spacing); // Check collision with other expanded surfaces { @@ -3447,7 +3507,9 @@ void PrintObject::bridge_over_infill() } } if (reconstruct) { - bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle); + // Orca: Retain the same sampling accuracy when matching a nearby + // bridge's direction; rebuilding must not lose the curved supports. + bridging_area = construct_anchored_polygon(area_to_be_bridge, to_lines(boundary_plines), flow, bridging_angle, scan_spacing); } } @@ -3455,6 +3517,13 @@ void PrintObject::bridge_over_infill() // bridging_area = opening(bridging_area, flow.scaled_spacing()); bridging_area = opening(bridging_area, flow.scaled_spacing() * 0.75); bridging_area = closing(bridging_area, flow.scaled_spacing()); + // Orca: Opening/closing can pull rounded bridge ends away from their real + // supports. Restore those contacts after smoothing, preserving the cleaned + // area and the selected angle; do not smooth the restored contacts again. + if (turning_pattern && !bridging_area.empty()) { + bridging_area = union_(bridging_area, construct_anchored_polygon(bridging_area, to_lines(boundary_plines), flow, + bridging_angle, scan_spacing, true)); + } bridging_area = intersection(bridging_area, limiting_area); bridging_area = intersection(bridging_area, total_fill_area); bridging_area = diff(bridging_area, total_top_area); diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index 07eb885eda..d16e381604 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -304,11 +304,16 @@ static std::vector> slices_to_regions( float z = zs[z_idx]; int idx_first_printable_region = -1; bool complex = false; + std::vector printable_region_ids; for (int idx_region = 0; idx_region < int(layer_range.volume_regions.size()); ++ idx_region) { const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[idx_region]; if (region.bbox->min().z() <= z && region.bbox->max().z() >= z) { - if (idx_first_printable_region == -1 && region.model_volume->is_model_part()) + if (region.model_volume->is_model_part()) + printable_region_ids.push_back(idx_region); + + if (idx_first_printable_region == -1 && region.model_volume->is_model_part()) { idx_first_printable_region = idx_region; + } else if (idx_first_printable_region != -1) { // Test for overlap with some other region. for (int idx_region2 = idx_first_printable_region; idx_region2 < idx_region; ++ idx_region2) { @@ -324,8 +329,10 @@ static std::vector> slices_to_regions( if (complex) zs_complex.push_back({ z_idx, z }); else if (idx_first_printable_region >= 0) { - const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[idx_first_printable_region]; - slices_by_region[region.region->print_object_region_id()][z_idx] = std::move(volume_slices_find_by_id(volume_slices, region.model_volume->id()).slices[z_idx]); + for (int printable_region_id : printable_region_ids) { + const PrintObjectRegions::VolumeRegion ®ion = layer_range.volume_regions[printable_region_id]; + append(slices_by_region[region.region->print_object_region_id()][z_idx], std::move(volume_slices_find_by_id(volume_slices, region.model_volume->id()).slices[z_idx])); + } } } } @@ -527,7 +534,7 @@ bool groupingVolumes(std::vector objSliceByVolume, std::vector(0, osvIndex.size()), - [&osvIndex, &objSliceByVolume, &offsetValue, &resolution](const tbb::blocked_range& range) { + [&osvIndex, &objSliceByVolume, &resolution](const tbb::blocked_range& range) { for (auto k = range.begin(); k != range.end(); ++k) { for (ExPolygon& poly_ex : objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]]) poly_ex.douglas_peucker(resolution); @@ -535,7 +542,7 @@ bool groupingVolumes(std::vector objSliceByVolume, std::vector(0, osvIndex.size()), - [&osvIndex, &objSliceByVolume,&offsetValue, &resolution](const tbb::blocked_range& range) { + [&osvIndex, &objSliceByVolume,&offsetValue](const tbb::blocked_range& range) { for (auto k = range.begin(); k != range.end(); ++k) { objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]] = offset_ex(objSliceByVolume[osvIndex[k][0]].slices[osvIndex[k][1]], offsetValue); } diff --git a/src/libslic3r/PublishSettings.cpp b/src/libslic3r/PublishSettings.cpp new file mode 100644 index 0000000000..6d28cc0af3 --- /dev/null +++ b/src/libslic3r/PublishSettings.cpp @@ -0,0 +1,315 @@ +#include "PublishSettings.hpp" + +#include "PresetBundle.hpp" +#include "Preset.hpp" +#include "PrintConfig.hpp" +#include "MaterialType.hpp" + +#include +#include + +#include +#include + +namespace Slic3r { + +std::string publish_base_key(const std::string &key) +{ + const size_t pos = key.find('#'); + return pos == std::string::npos ? key : key.substr(0, pos); +} + +// Parse the trailing "#N" variant index ("retraction_length#2" -> 2). Returns -1 when the key +// carries no '#' separator or its suffix is malformed; mirrors the importer's strict parse +// (PresetBundle.cpp) so the export side rejects the same variants the receiver would skip. +static int publish_variant_index(const std::string &key, const std::string &base_key) +{ + if (key.size() <= base_key.size() || key.compare(0, base_key.size(), base_key) != 0 || key[base_key.size()] != '#') + return -1; + const std::string suffix = key.substr(base_key.size() + 1); + if (suffix.empty()) + return -1; + int idx = 0; + for (const char c : suffix) { + if (c < '0' || c > '9') + return -1; + idx = idx * 10 + (c - '0'); + if (idx > 1000000) // overflow guard; real vector sizes are tiny + return -1; + } + return idx; +} + +std::string normalize_filament_type(const std::string& type) +{ + if (type.empty()) + return type; + if (MaterialType::find(type) != nullptr) + return type; + // "PLA High Speed" -> "PLA": strip a space-separated modifier, but keep dash-separated + // types like "PA-CF" / "PETG-CF" intact (they are distinct materials, not modifiers). + const size_t sep = type.find(' '); + if (sep != std::string::npos) { + const std::string base = type.substr(0, sep); + if (MaterialType::find(base) != nullptr) + return base; + } + return type; +} + +void make_publish_universal(DynamicPrintConfig &config) +{ + // Lists: empty => compatible with every printer / every print preset. Conditions: + // empty so a leftover expression left behind by the baseline clone can never + // re-narrow the match (see is_compatible_with_printer, Preset.cpp:840). All four + // keys exist on filament presets; nil-guard for hand-crafted future schemas. + if (auto *opt = config.opt("compatible_printers", false)) + opt->values.clear(); + if (auto *opt = config.opt("compatible_prints", false)) + opt->values.clear(); + if (auto *opt = config.opt("compatible_printers_condition", false)) + opt->value.clear(); + if (auto *opt = config.opt("compatible_prints_condition", false)) + opt->value.clear(); +} + +std::string publish_material_base_name(const std::string &preset_name) +{ + if (preset_name.empty()) + return preset_name; + const size_t at = preset_name.find('@'); + std::string base = (at == std::string::npos) ? preset_name : preset_name.substr(0, at); + boost::trim_right(base); + return base; +} + +const std::set& publish_structural_keys() +{ + // Non-publishable keys: the *_settings_id keys are also in PresetCollection::skipped_in_dirty + // (Preset.cpp) / stripped from configs (profile_print_params_same); publishing them would + // rewrite the user's preset inheritance/structure. + static const std::set structural_keys = { + "printer_settings_id", "filament_settings_id", "print_settings_id", + "sla_print_settings_id", "sla_material_settings_id", + "compatible_printers", "compatible_prints", + "compatible_printers_condition", "compatible_prints_condition", + "default_filament_profile", "default_print_profile", + "default_sla_print_profile", "default_sla_material_profile", + "extruder_count", "bed_shape", + "inherits", "inherits_group", + "printer_technology", "printer_model", "printer_variant", + "physical_printer_settings_id", "filament_ids", + "different_settings_to_system" + }; + return structural_keys; +} + +const std::set& publish_mixed_keys() +{ + // Must match PresetBundle's s_project_options mixed-color group (PresetBundle.cpp): these + // are project-level parallel per-slot arrays, not filament-preset options, so the import + // material pass applies them into project_config instead of a filament preset config. + static const std::set mixed_keys = { + "filament_is_mixed", + "filament_mixed_components", + "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", + "filament_mixed_gradient_range", + "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" + }; + return mixed_keys; +} + +// The printer tab's "Retraction" optgroup (TabPrinter::build_fff, Tab.cpp), in tab order. +// KEEP IN SYNC with that optgroup: the published-3MF printer allowlist is built from these +// lists, so any key shown there must be publishable here (and vice versa). +const std::vector& publishable_printer_retraction_options() +{ + static const std::vector options = { + { "retraction_length", "printer_extruder_retraction#length" }, + { "retract_restart_extra", "printer_extruder_retraction#extra-length-on-restart" }, + { "retraction_speed", "printer_extruder_retraction#retraction-speed" }, + { "deretraction_speed", "printer_extruder_retraction#deretraction-speed" }, + { "retraction_minimum_travel", "printer_extruder_retraction#travel-distance-threshold" }, + { "retract_when_changing_layer", "printer_extruder_retraction#retract-on-layer-change" }, + { "wipe", "printer_extruder_retraction#wipe-while-retracting" }, + { "wipe_distance", "printer_extruder_retraction#wipe-distance" }, + { "retract_before_wipe", "printer_extruder_retraction#retract-amount-before-wipe" }, + { "retract_after_wipe", "printer_extruder_retraction#retract-amount-after-wipe" }, + }; + return options; +} + +// The printer tab's "Z-Hop" optgroup (TabPrinter::build_fff, Tab.cpp), in tab order. KEEP IN +// SYNC with that optgroup, same as publishable_printer_retraction_options(). +const std::vector& publishable_printer_z_hop_options() +{ + static const std::vector options = { + { "retract_lift_enforce", "printer_extruder_z_hop#on-surfaces" }, + { "z_hop_types", "printer_extruder_z_hop#z-hop-type" }, + { "z_hop", "printer_extruder_z_hop#z-hop-height" }, + { "travel_slope", "printer_extruder_z_hop#traveling-angle" }, + { "retract_lift_above", "printer_extruder_z_hop#only-lift-z-above" }, + { "retract_lift_below", "printer_extruder_z_hop#only-lift-z-below" }, + }; + return options; +} + +const std::set& publishable_printer_keys() +{ + // Union of the two optgroups; "Retraction when switching material" keys are excluded + // (toolchange retraction is device/profile territory, not a publishable behavior tweak). + static const std::set printer_keys = [] { + std::set keys; + for (const PublishablePrinterOption &opt : publishable_printer_retraction_options()) + keys.insert(opt.key); + for (const PublishablePrinterOption &opt : publishable_printer_z_hop_options()) + keys.insert(opt.key); + return keys; + }(); + return printer_keys; +} + +std::vector collect_dirty_settings_keys(const PresetBundle& bundle) +{ + std::set keys; + + // Union the dirty keys of each collection's edited preset (filaments may span multiple + // slots); feeds only the Publish dialog's pre-check. + for (const std::string& key : bundle.prints.current_dirty_options(true)) + keys.insert(key); + for (const std::string& key : bundle.printers.current_dirty_options(true)) + keys.insert(key); + for (const std::string& key : bundle.filaments.current_dirty_options(true)) + keys.insert(key); + + return std::vector(keys.begin(), keys.end()); +} + +DynamicPrintConfig filter_published_config( + const DynamicPrintConfig &full_config, + const std::vector &published_keys, + const std::vector &material_keys) +{ + DynamicPrintConfig filtered; + + std::set base_keys_to_include; + // Never masked (whole-vector serialization): identity, plate geometry, process keys and + // printer keys without a "#N" variant. + std::set mask_exempt_keys; + // Material entries: base key -> author slots whose values must survive; other slots are + // masked to their defaults so a publish (partial or full) does not leak unrelated slot + // data. + std::map> slot_mask_map; + + // 1. Mandatory material identity & slot count keys for 3MF validation/normalization + // (filament_ids: exported for validation, denylisted on apply - see publish_structural_keys). + static const std::vector s_material_identity_keys = { + "filament_colour", + "filament_type", + "filament_vendor", + "filament_ids", + "filament_diameter", + "filament_self_index", + "filament_extruder_variant" + }; + for (const std::string &key : s_material_identity_keys) { + base_keys_to_include.insert(key); + mask_exempt_keys.insert(key); + } + + // 2. Published plate / bed geometry keys (wipe tower positioning) + static const std::vector s_plate_geometry_keys = { + "wipe_tower_x", + "wipe_tower_y", + "wipe_tower_rotation_angle" + }; + for (const std::string &key : s_plate_geometry_keys) { + base_keys_to_include.insert(key); + mask_exempt_keys.insert(key); + } + + // 3. Process and printer published keys. Printer per-extruder keys carry a "#N" variant + // (e.g. retraction_length#2): mask the base to the author's extruder index so a partial + // publish does not serialize every extruder's value (same slot-masking as the material side). + const std::set &printer_keys = publishable_printer_keys(); + for (const std::string &key : published_keys) { + const std::string base_key = publish_base_key(key); + if (base_key.empty()) + continue; + base_keys_to_include.insert(base_key); + if (printer_keys.count(base_key) != 0) { + const int variant_idx = publish_variant_index(key, base_key); + if (variant_idx >= 0) + slot_mask_map[base_key].insert(variant_idx); + else + mask_exempt_keys.insert(base_key); // bare printer key or malformed variant: whole vector + } else { + mask_exempt_keys.insert(base_key); // process key: whole vector + } + } + + // 4. Material-specific published keys. Both partial (entry.keys) and full-publish + // (entry.full_keys) entries mask to the author's slot on export (see the copy loop below); + // slot-less entries (hand-crafted files) stay unmasked (whole vector). + for (const PublishedMaterialEntry &entry : material_keys) { + for (const std::string &key : entry.keys) { + const std::string base_key = publish_base_key(key); + if (base_key.empty()) + continue; + base_keys_to_include.insert(base_key); + if (entry.slot >= 0) + slot_mask_map[base_key].insert(entry.slot); + } + for (const std::string &key : entry.full_keys) { + const std::string base_key = publish_base_key(key); + if (base_key.empty()) + continue; + base_keys_to_include.insert(base_key); + if (entry.slot >= 0) + slot_mask_map[base_key].insert(entry.slot); + } + } + + // Masking restores every non-published slot of a vector option with the option default, so + // a partial publish does not leak unrelated slot data. can_mask_slots reports whether a key + // is maskable at all (vector option plus a registered default of the same type); an + // unmaskable key is dropped from the payload entirely instead of shipping the author's + // whole vector. + auto can_mask_slots = [](const ConfigOption &opt, const ConfigOptionDef *def) -> bool { + if (def == nullptr || !def->default_value || def->default_value->type() != opt.type()) + return false; + const auto *vec = dynamic_cast(&opt); + const auto *default_vec = dynamic_cast(def->default_value.get()); + return vec != nullptr && vec->size() > 0 && default_vec != nullptr && !default_vec->empty(); + }; + auto mask_slots = [](ConfigOption &opt, const ConfigOptionDef *def, const std::set &keep_slots) { + auto *vec = dynamic_cast(&opt); + for (size_t idx = 0; idx < vec->size(); ++idx) + if (keep_slots.count(static_cast(idx)) == 0) + vec->set_at(def->default_value.get(), idx, 0); + }; + + // Copy the selected options from full_config into the filtered config. + for (const std::string &key : base_keys_to_include) { + const ConfigOption *opt = full_config.option(key); + if (opt == nullptr) + continue; + const auto mask_it = slot_mask_map.find(key); + const bool needs_masking = mask_exempt_keys.count(key) == 0 && mask_it != slot_mask_map.end() && !mask_it->second.empty(); + if (needs_masking && !can_mask_slots(*opt, print_config_def.get(key))) { + BOOST_LOG_TRIVIAL(warning) << "publish: dropping unmaskable key \"" << key + << "\" from the published payload (no usable option default)"; + continue; + } + ConfigOption *cloned = opt->clone(); + if (needs_masking) + mask_slots(*cloned, print_config_def.get(key), mask_it->second); + filtered.set_key_value(key, cloned); + } + + return filtered; +} + +} // namespace Slic3r diff --git a/src/libslic3r/PublishSettings.hpp b/src/libslic3r/PublishSettings.hpp new file mode 100644 index 0000000000..60ea9a8354 --- /dev/null +++ b/src/libslic3r/PublishSettings.hpp @@ -0,0 +1,99 @@ +#pragma once +#include +#include +#include + +namespace Slic3r { +class PresetBundle; + +// Strip a trailing "#N" variant suffix ("retraction_length#2" -> "retraction_length"). +std::string publish_base_key(const std::string &key); + +// Structural keys that are never applied onto the receiver's presets when loading a published +// 3MF (single source of truth for the denylist); applying them would rewrite the user's preset +// inheritance/structure. filament_ids is still exported via the identity list (3MF validation +// needs it) - exported, never applied. +const std::set& publish_structural_keys(); + +// The mixed-color filament project keys (parallel per-slot arrays, see PresetBundle's +// s_project_options). Import applies them into project_config, not a filament preset. +const std::set& publish_mixed_keys(); + +// One row of the printer tab's "Retraction" / "Z-Hop" optgroups (config key + tab icon id). +struct PublishablePrinterOption { + const char *key; // config key, e.g. "retraction_length" + const char *icon; // tab icon id, e.g. "printer_extruder_retraction#length" +}; + +// The printer tab's "Retraction" / "Z-Hop" optgroup options, in tab order. +const std::vector& publishable_printer_retraction_options(); +const std::vector& publishable_printer_z_hop_options(); + +// Union of the two optgroup option lists; printer keys apply on import only if their base +// key is in this allowlist. +const std::set& publishable_printer_keys(); + +// Union of setting keys differing from the base/system preset across the current print, +// printer and filament presets (feeds the Publish dialog's pre-check). +std::vector collect_dirty_settings_keys(const PresetBundle& bundle); + +// Per-slot published material keys, applied positionally (author slot N -> receiver slot N). +// The identity fields drive the created copy's naming and grouping on Full entries, the +// notification labels, and the partial type gate (publish_type) is the author's explicit +// opt-in for requiring a material type. +struct PublishedMaterialEntry { + std::string filament_type; // material family, e.g. "PLA" (may be empty) + std::string filament_vendor; // e.g. "Generic", "Bambu" (may be empty) + std::string filament_id; // stable material id, e.g. "GFL99" (may be empty) + // Unique preset id of the author's slot preset (e.g. Orca Filament Library "setting_id"). + // Not matched against the receiver's library; carried so identical Full entries within one + // load share one created instance (within-load dedup key). + std::string setting_id; + // Canonical name of the author's slot preset (e.g. "Generic PLA @System"). On Full import + // it names the created copy after its "@variant" tail is stripped; never matched against + // the receiver's library. + std::string preset_name; + // 0-based author filament slot; -1 (hand-crafted files) is skipped. + int slot{-1}; + std::vector keys; + // "Full Publish": the whole filament preset (full_keys) is published. On the receiver Full + // Publish always creates a standalone parentless copy (libslic3r's "Detach from parent"), + // universally compatible and project-embedded only - never written to the user's library. + // Identical Full entries within one load share one created instance (within-load dedup). + bool full{false}; + // All non-structural filament keys of the author's slot preset; values travel in the file + // config, masked to the author's slot index. + std::vector full_keys; + // Vendor-agnostic (MaterialType) filament type the author requires for this slot; on a + // partial entry's mismatch the slot is replaced with a same-type filament. Full entries + // consult no gate. + bool publish_type{false}; + std::string publish_type_value; + // Required filament colour, applied on load regardless of the type match. + bool publish_color{false}; + std::string color; + // Import-side only, never serialized: the authored slot sits past the receiver's physical + // capacity, so the entry is appended as an empty mixed-filament placeholder (virtual tail + // slot; the GUI flags it for the user to assign components). + bool mixed_placeholder{false}; +}; + +// "PLA High Speed" -> "PLA" (strip a space modifier); dash types like "PA-CF" are kept intact. +std::string normalize_filament_type(const std::string& type); + +class DynamicPrintConfig; +// Clear the compatibility lists/conditions on a filament config so it is universally +// compatible once detached (empty lists + empty conditions = compatible with everything). +void make_publish_universal(DynamicPrintConfig &config); + +// Naming base for a detached published-material copy: "Generic PLA @System" -> "Generic PLA" +// (truncate/right-trim at the first '@' tail). Empty result means "fall back to identity". +std::string publish_material_base_name(const std::string &preset_name); + +// Minimal DynamicPrintConfig for a published 3MF export: only the selected published keys, +// material keys, identity fields and plate geometry keys. +DynamicPrintConfig filter_published_config( + const DynamicPrintConfig &full_config, + const std::vector &published_keys, + const std::vector &material_keys); +} diff --git a/src/libslic3r/SLA/Hollowing.cpp b/src/libslic3r/SLA/Hollowing.cpp index df62127770..f50cdbced2 100644 --- a/src/libslic3r/SLA/Hollowing.cpp +++ b/src/libslic3r/SLA/Hollowing.cpp @@ -1,4 +1,5 @@ #include +#include #include #include diff --git a/src/libslic3r/SLA/Hollowing.hpp b/src/libslic3r/SLA/Hollowing.hpp index b57513fe72..f6beaadb24 100644 --- a/src/libslic3r/SLA/Hollowing.hpp +++ b/src/libslic3r/SLA/Hollowing.hpp @@ -44,9 +44,6 @@ struct DrainHole : pos(p), normal(n), radius(r), height(h), failed(fl) {} - DrainHole(const DrainHole& rhs) : - DrainHole(rhs.pos, rhs.normal, rhs.radius, rhs.height, rhs.failed) {} - bool operator==(const DrainHole &sp) const; bool operator!=(const DrainHole &sp) const { return !(sp == (*this)); } diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index cdefd3e10e..eb37ca578c 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -1007,7 +1007,9 @@ bool SLAPrintObject::invalidate_step(SLAPrintObjectStep step) bool SLAPrintObject::invalidate_all_steps() { - return Inherited::invalidate_all_steps() | m_print->invalidate_all_steps(); + const bool inherited_invalidated = Inherited::invalidate_all_steps(); + const bool print_invalidated = m_print->invalidate_all_steps(); + return inherited_invalidated || print_invalidated; } double SLAPrintObject::get_elevation() const { diff --git a/src/libslic3r/Shape/TextShape.cpp b/src/libslic3r/Shape/TextShape.cpp index dce731af19..4f32b9d857 100644 --- a/src/libslic3r/Shape/TextShape.cpp +++ b/src/libslic3r/Shape/TextShape.cpp @@ -199,7 +199,7 @@ static void MakeMesh(TopoDS_Shape& theSolid, TriangleMesh& theMesh) for (Standard_Integer aNodeIter = 1; aNodeIter <= aTriangulation->NbNodes(); ++aNodeIter) { gp_Pnt aPnt = aTriangulation->Node(aNodeIter); aPnt.Transform(aTrsf); - points.emplace_back(std::move(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z()))); + points.emplace_back(Vec3f(aPnt.X(), aPnt.Y(), aPnt.Z())); } //BBS: copy triangles const TopAbs_Orientation anOrientation = anExpSF.Current().Orientation(); diff --git a/src/libslic3r/Support/SupportCommon.cpp b/src/libslic3r/Support/SupportCommon.cpp index 15640cb0f2..e734608803 100644 --- a/src/libslic3r/Support/SupportCommon.cpp +++ b/src/libslic3r/Support/SupportCommon.cpp @@ -65,11 +65,13 @@ std::pair generate_interfa const bool smooth_supports = support_params.support_style != smsGrid; SupportGeneratorLayersPtr &interface_layers = base_and_interface_layers.first; SupportGeneratorLayersPtr &base_interface_layers = base_and_interface_layers.second; - // The user-facing interface layer counts include the contact layer. Internally, - // contact layers are generated separately, so only the remaining layers are - // projected into intermediate interface/base-interface layers here. - const size_t num_top_interface_layers = support_params.has_top_contacts ? support_params.num_top_interface_layers - 1 : 0; - const size_t num_bottom_interface_layers = support_params.has_bottom_contacts ? support_params.num_bottom_interface_layers - 1 : 0; + // Contacts printed separately consume one requested interface layer. Organic + // bottom contacts are projection seeds and are not printed separately. + const bool organic_tree = support_params.support_style == smsTreeOrganic; + const size_t num_top_interface_layers = support_params.has_top_contacts ? + support_params.num_top_interface_layers - 1 : 0; + const size_t num_bottom_interface_layers = support_params.has_bottom_contacts ? + support_params.num_bottom_interface_layers - (organic_tree ? 0 : 1) : 0; const size_t num_top_base_interface_layers = std::min(support_params.num_top_base_interface_layers, num_top_interface_layers); const size_t num_bottom_base_interface_layers = std::min(support_params.num_bottom_base_interface_layers, num_bottom_interface_layers); const size_t num_top_interface_layers_only = num_top_interface_layers - num_top_base_interface_layers; @@ -132,7 +134,7 @@ std::pair generate_interfa return nullptr; }; tbb::parallel_for(tbb::blocked_range(0, int(intermediate_layers.size())), - [&bottom_contacts, &top_contacts, &top_interface_layers, &top_base_interface_layers, &intermediate_layers, &insert_layer, &support_params, + [&bottom_contacts, &top_contacts, &top_interface_layers, &top_base_interface_layers, &intermediate_layers, &insert_layer, num_top_interface_layers, num_bottom_interface_layers, num_top_base_interface_layers, num_bottom_base_interface_layers, num_top_interface_layers_only, num_bottom_interface_layers_only, snug_supports, &interface_layers, &base_interface_layers](const tbb::blocked_range& range) { @@ -1234,10 +1236,6 @@ static void modulate_extrusion_by_overlapping_layers( (fragment_end.is_start ? &polyline.points.front() : &polyline.points.back()); } private: - ExtrusionPathFragmentEndPointAccessor& operator=(const ExtrusionPathFragmentEndPointAccessor&) { - return *this; - } - const std::vector &m_path_fragments; }; const coord_t search_radius = 7; @@ -1656,28 +1654,32 @@ void generate_support_toolpaths( if (top_contact_layer.could_merge(interface_layer) && ! raft_layer) top_contact_layer.merge(std::move(interface_layer)); } - if (!bottom_interfaces && support_params.can_merge_support_regions) { - if (base_layer.could_merge(bottom_contact_layer)) - base_layer.merge(std::move(bottom_contact_layer)); - else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging) - base_layer = std::move(bottom_contact_layer); - } else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) { - if (top_interfaces && bottom_interfaces) { - top_contact_layer.merge(std::move(bottom_contact_layer)); - } else if (bottom_interfaces) { - top_contact_layer.set_polygons_to_extrude( - diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude())); - } else { - bottom_contact_layer.set_polygons_to_extrude( - diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude())); - } - } else if (bottom_contact_layer.could_merge(interface_layer) && ! organic_tree) { - const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface; - if (bottom_interfaces && interface_layer_is_bottom) { - bottom_contact_layer.merge(std::move(interface_layer)); - } else { - bottom_contact_layer.set_polygons_to_extrude( - diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude())); + // Orca: Organic bottom contacts are projection seeds, not same-layer toolpaths. + // Do not merge them into another same-layer support region. + if (!organic_tree) { + if (!bottom_interfaces && support_params.can_merge_support_regions) { + if (base_layer.could_merge(bottom_contact_layer)) + base_layer.merge(std::move(bottom_contact_layer)); + else if (base_layer.empty() && ! bottom_contact_layer.empty() && ! bottom_contact_layer.layer->bridging) + base_layer = std::move(bottom_contact_layer); + } else if (bottom_contact_layer.could_merge(top_contact_layer) && ! raft_layer) { + if (top_interfaces && bottom_interfaces) { + top_contact_layer.merge(std::move(bottom_contact_layer)); + } else if (bottom_interfaces) { + top_contact_layer.set_polygons_to_extrude( + diff(top_contact_layer.polygons_to_extrude(), bottom_contact_layer.polygons_to_extrude())); + } else { + bottom_contact_layer.set_polygons_to_extrude( + diff(bottom_contact_layer.polygons_to_extrude(), top_contact_layer.polygons_to_extrude())); + } + } else if (bottom_contact_layer.could_merge(interface_layer)) { + const bool interface_layer_is_bottom = interface_layer.layer->layer_type == SupporLayerType::BottomInterface; + if (bottom_interfaces && interface_layer_is_bottom) { + bottom_contact_layer.merge(std::move(interface_layer)); + } else { + bottom_contact_layer.set_polygons_to_extrude( + diff(bottom_contact_layer.polygons_to_extrude(), interface_layer.polygons_to_extrude())); + } } } diff --git a/src/libslic3r/Support/SupportMaterial.cpp b/src/libslic3r/Support/SupportMaterial.cpp index cd60489e75..a955eb5ca7 100644 --- a/src/libslic3r/Support/SupportMaterial.cpp +++ b/src/libslic3r/Support/SupportMaterial.cpp @@ -333,8 +333,7 @@ PrintObjectSupportMaterial::PrintObjectSupportMaterial(const PrintObject *object m_print_config (&object->print()->config()), m_object_config (&object->config()), m_slicing_params (slicing_params), - m_support_params (*object), - m_object (object) + m_support_params (*object) { } @@ -1588,7 +1587,7 @@ static inline std::tuple detect_contacts( // Cache support trimming polygons derived from lower layer polygons, possible merged with "on build plate only" trimming polygons. auto slices_margin_update = - [&slices_margin, &layer, &lower_layer, &lower_layer_polygons, buildplate_only, has_enforcer, &annotations, layer_id] + [&slices_margin, &lower_layer, &lower_layer_polygons, buildplate_only, has_enforcer, &annotations, layer_id] (float slices_margin_offset, float no_interface_offset) { if (slices_margin.offset != slices_margin_offset) { slices_margin.offset = slices_margin_offset; diff --git a/src/libslic3r/Support/SupportMaterial.hpp b/src/libslic3r/Support/SupportMaterial.hpp index 50b8256c4a..6d5355dab1 100644 --- a/src/libslic3r/Support/SupportMaterial.hpp +++ b/src/libslic3r/Support/SupportMaterial.hpp @@ -86,7 +86,6 @@ private: */ // Following objects are not owned by SupportMaterial class. - const PrintObject *m_object; const PrintConfig *m_print_config; const PrintObjectConfig *m_object_config; // Pre-calculated parameters shared between the object slicer and the support generator, diff --git a/src/libslic3r/Support/SupportParameters.hpp b/src/libslic3r/Support/SupportParameters.hpp index dc0e94ed03..8d43edb444 100644 --- a/src/libslic3r/Support/SupportParameters.hpp +++ b/src/libslic3r/Support/SupportParameters.hpp @@ -141,6 +141,8 @@ struct SupportParameters { this->contact_fill_pattern = ipGrid; else if (object_config.support_interface_pattern == smipRectilinearInterlaced) this->contact_fill_pattern = ipRectilinear; + else if (object_config.support_interface_pattern == smipSpiralInset) + this->contact_fill_pattern = ipSpiralInset; else this->contact_fill_pattern = (object_config.support_interface_pattern == smipAuto && zero_gap_contact_interface) || diff --git a/src/libslic3r/Support/TreeModelVolumes.cpp b/src/libslic3r/Support/TreeModelVolumes.cpp index 7a769c77d1..70c33aab0d 100644 --- a/src/libslic3r/Support/TreeModelVolumes.cpp +++ b/src/libslic3r/Support/TreeModelVolumes.cpp @@ -32,7 +32,7 @@ namespace Slic3r::TreeSupport3D using namespace std::literals; // or warning -// had to use a define beacuse the macro processing inside macro BOOST_LOG_TRIVIAL() +// had to use a define because the macro processing inside macro BOOST_LOG_TRIVIAL() #define error_level_not_in_cache debug //FIXME Machine border is currently ignored. diff --git a/src/libslic3r/Support/TreeSupport.cpp b/src/libslic3r/Support/TreeSupport.cpp index d4a43a4767..519b6e826e 100644 --- a/src/libslic3r/Support/TreeSupport.cpp +++ b/src/libslic3r/Support/TreeSupport.cpp @@ -842,7 +842,7 @@ void TreeSupport::detect_overhangs(bool check_support_necessity/* = false*/) // normal overhang ExPolygons lower_layer_offseted = offset_ex(lower_polys, support_offset_scaled, SUPPORT_SURFACES_OFFSET_PARAMETERS); - overhangs_all_layers[layer_nr] = std::move(diff_ex(curr_polys, lower_layer_offseted)); + overhangs_all_layers[layer_nr] = diff_ex(curr_polys, lower_layer_offseted); double duration{ std::chrono::duration_cast(clock_::now() - t0).count() }; if (duration > 30 || overhangs_all_layers[layer_nr].size() > 100) { @@ -1396,7 +1396,7 @@ void TreeSupport::generate_toolpaths() raft_areas.push_back(expoly); } - raft_areas = std::move(offset_ex(raft_areas, scale_(object_config.raft_first_layer_expansion))); + raft_areas = offset_ex(raft_areas, scale_(object_config.raft_first_layer_expansion)); size_t layer_nr = 0; for (; layer_nr < m_slicing_params.base_raft_layers; layer_nr++) { @@ -1522,9 +1522,9 @@ void TreeSupport::generate_toolpaths() erSupportMaterialInterface : erSupportMaterial; make_perimeter_and_inner_brim(ts_layer->support_fills.entities, poly, wall_count, flow, brim_role); - polys = std::move(offset_ex(poly, -flow.scaled_spacing())); + polys = offset_ex(poly, -flow.scaled_spacing()); } else if (area_group.type == SupportLayer::Roof1stLayer) { - polys = std::move(offset_ex(poly, 0.5*support_flow.scaled_width())); + polys = offset_ex(poly, 0.5*support_flow.scaled_width()); } else { polys.push_back(poly); @@ -2269,7 +2269,7 @@ void TreeSupport::draw_circles() // Inside the gap: remove only the part overlapping the contact surface, keep the rest. if (bottom_gap_height > EPSILON && layer_bottom_z < band_gap_top - EPSILON) { any_gap_cleared = true; - comp_poly = std::move(diff_ex(comp_poly, band.surfaces)); + comp_poly = diff_ex(comp_poly, band.surfaces); } // Overlaps interface band @@ -2304,7 +2304,7 @@ void TreeSupport::draw_circles() ExPolygons comp_interface = band_ex.empty() ? ExPolygons {} : intersection_ex(comp_poly, band_ex); if (!comp_interface.empty()) { append(new_floor_areas, comp_interface); - comp_poly = std::move(diff_ex(comp_poly, offset_ex(comp_interface, 10))); + comp_poly = diff_ex(comp_poly, offset_ex(comp_interface, 10)); } } @@ -2396,7 +2396,7 @@ void TreeSupport::draw_circles() ts_layer->lslices.emplace_back(*expoly); } - ts_layer->lslices = std::move(union_ex(ts_layer->lslices)); + ts_layer->lslices = union_ex(ts_layer->lslices); //Must update bounding box which is used in avoid crossing perimeter ts_layer->lslices_bboxes.clear(); ts_layer->lslices_bboxes.reserve(ts_layer->lslices.size()); @@ -2474,7 +2474,7 @@ void TreeSupport::draw_circles() if (global_lightning_infill) { //search overhangs globally - overhang = std::move(diff_ex(offset_ex(base_areas_lower, -2.0 * scale_(support_extrusion_width)), base_areas)); + overhang = diff_ex(offset_ex(base_areas_lower, -2.0 * scale_(support_extrusion_width)), base_areas); } else { @@ -2485,13 +2485,13 @@ void TreeSupport::draw_circles() Polygon rev_hole = hole; rev_hole.make_counter_clockwise(); ExPolygons ex_hole; - ex_hole.emplace_back(std::move(ExPolygon(rev_hole))); + ex_hole.emplace_back(ExPolygon(rev_hole)); for (auto& other_area : base_areas) //if (&other_area != &base_area) - ex_hole = std::move(diff_ex(ex_hole, other_area)); - overhang = std::move(union_ex(overhang, ex_hole)); + ex_hole = diff_ex(ex_hole, other_area); + overhang = union_ex(overhang, ex_hole); } - overhang = std::move(intersection_ex(overhang, offset_ex(base_areas_lower, -0.5 * scale_(support_extrusion_width)))); + overhang = intersection_ex(overhang, offset_ex(base_areas_lower, -0.5 * scale_(support_extrusion_width))); } overhangs.emplace_back(to_polygons(overhang)); @@ -2667,7 +2667,7 @@ void TreeSupport::drop_nodes() SupportNode::diameter_angle_scale_factor = diameter_angle_scale_factor; float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm - auto get_max_move_dist = [this, &config, tan_angle, wall_count, support_extrusion_width](const SupportNode *node, int power = 1) { + auto get_max_move_dist = [this, tan_angle, support_extrusion_width](const SupportNode *node, int power = 1) { if (node->max_move_dist == 0) { node->radius = get_radius(node); node->max_move_dist = std::min(tan_angle * node->height, support_extrusion_width); @@ -2746,7 +2746,7 @@ void TreeSupport::drop_nodes() m_object->print()->set_status(60 + int(10 * (1 - float(layer_nr) / contact_nodes.size())), _u8L("Generating support"));// (boost::format(_u8L("Support: propagate branches at layer %d")) % layer_nr).str()); - Polygons layer_contours = std::move(m_ts_data->get_contours_with_holes(obj_layer_nr)); + Polygons layer_contours = m_ts_data->get_contours_with_holes(obj_layer_nr); //std::unordered_map& mst_line_x_layer_contour_cache = m_mst_line_x_layer_contour_caches[layer_nr]; tbb::concurrent_unordered_map mst_line_x_layer_contour_cache; auto is_line_cut_by_contour = [&mst_line_x_layer_contour_cache,&layer_contours](Point a, Point b) @@ -2846,7 +2846,9 @@ void TreeSupport::drop_nodes() const MinimumSpanningTree& mst = spanning_trees[group_index]; //In the first pass, merge all nodes that are close together. std::vector> nodes_vec(nodes_this_part.begin(), nodes_this_part.end()); - tbb::parallel_for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { + // Sequential: nodes merge into and invalidate each other in place, so parallel execution + // makes the merge order (and thus the result) depend on thread scheduling. + std::for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { SupportNode* p_node = entry.second; SupportNode& node = *p_node; if (!p_node->valid) @@ -2934,7 +2936,32 @@ void TreeSupport::drop_nodes() ); //In the second pass, move all middle nodes. - tbb::parallel_for_each(nodes_vec.begin(), nodes_vec.end(), [&](const std::pair& entry) { + // Still parallel: this pass only reads other nodes. Side effects (invalidation, new + // nodes, contact_nodes/unsupported_branch_leaves updates) are recorded per node and + // applied afterwards in node order. Node creation must be deferred too, since + // SupportNode's constructor writes `parent->child = this` on other nodes. + struct PendingNode { + Point position; + int distance_to_top = 0; + int support_roof_layers_below = 0; + bool to_buildplate = false; + SupportNode *parent = nullptr; + bool zero_max_move = false; + bool has_overhang = false; + ExPolygon overhang; + bool clamp_radius = false; + coordf_t parent_radius = 0; + double dist_to_outer = 0; + }; + struct PassTwoResult { + bool invalidate = false; + bool unsupported_leaf = false; + std::vector pending; + }; + std::vector pass2_results(nodes_vec.size()); + auto pass2_body = [&](size_t node_idx) { + const std::pair& entry = nodes_vec[node_idx]; + PassTwoResult& pass2_out = pass2_results[node_idx]; SupportNode* p_node = entry.second; const SupportNode& node = *p_node; @@ -2949,14 +2976,16 @@ void TreeSupport::drop_nodes() ExPolygons overhangs_next = diff_clipped({ node.overhang }, get_collision(0, obj_layer_nr_next)); for(auto& overhang:overhangs_next) { Point next_pt = overhang.contour.centroid(); - SupportNode *next_node = m_ts_data->create_node(next_pt, p_node->distance_to_top + 1, obj_layer_nr_next, - p_node->support_roof_layers_below - (p_node->distance_to_top >= 0 ? 1 : 0), - to_buildplate, p_node, print_z_next, height_next); - next_node->max_move_dist = 0; - next_node->overhang = std::move(overhang); - m_ts_data->m_mutex.lock(); - contact_nodes[layer_nr_next].emplace_back(next_node); - m_ts_data->m_mutex.unlock(); + PendingNode pending; + pending.position = next_pt; + pending.distance_to_top = p_node->distance_to_top + 1; + pending.support_roof_layers_below = p_node->support_roof_layers_below - (p_node->distance_to_top >= 0 ? 1 : 0); + pending.to_buildplate = to_buildplate; + pending.parent = p_node; + pending.zero_max_move = true; + pending.has_overhang = true; + pending.overhang = std::move(overhang); + pass2_out.pending.emplace_back(std::move(pending)); } return; @@ -2973,17 +3002,17 @@ void TreeSupport::drop_nodes() { if (support_on_buildplate_only) { - unsupported_branch_leaves.push_front({ layer_nr, p_node }); + pass2_out.unsupported_leaf = true; } else { - p_node->valid = false; + pass2_out.invalidate = true; } return; } // if the link between parent and current is cut by contours, mark current as bottom contact node if (p_node->parent && intersection_ln({p_node->position, p_node->parent->position}, layer_contours).empty()==false) { - p_node->valid = false; + pass2_out.invalidate = true; return; } } @@ -3096,20 +3125,47 @@ void TreeSupport::drop_nodes() } auto next_collision = get_collision(0, obj_layer_nr_next); const bool to_buildplate = !is_inside_ex(m_ts_data->m_layer_outlines[obj_layer_nr_next], next_layer_vertex); - SupportNode * next_node = m_ts_data->create_node(next_layer_vertex, node.distance_to_top + 1, obj_layer_nr_next, - node.support_roof_layers_below - (node.distance_to_top >= 0 ? 1 : 0), - to_buildplate, p_node, print_z_next, height_next); // don't increase radius if next node will collide partially with the object (STUDIO-7883) - to_outside = projection_onto(next_collision, next_node->position); + to_outside = projection_onto(next_collision, next_layer_vertex); direction_to_outer = to_outside - node.position; double dist_to_outer = unscale_(direction_to_outer.cast().norm()); - next_node->radius = std::max(node.radius, std::min(next_node->radius, dist_to_outer)); - get_max_move_dist(next_node); - m_ts_data->m_mutex.lock(); - contact_nodes[layer_nr_next].push_back(next_node); - m_ts_data->m_mutex.unlock(); + PendingNode pending; + pending.position = next_layer_vertex; + pending.distance_to_top = node.distance_to_top + 1; + pending.support_roof_layers_below = node.support_roof_layers_below - (node.distance_to_top >= 0 ? 1 : 0); + pending.to_buildplate = to_buildplate; + pending.parent = p_node; + pending.clamp_radius = true; + pending.parent_radius = node.radius; + pending.dist_to_outer = dist_to_outer; + pass2_out.pending.emplace_back(std::move(pending)); + }; + tbb::parallel_for(tbb::blocked_range(0, nodes_vec.size()), + [&pass2_body](const tbb::blocked_range& node_range) { + for (size_t node_idx = node_range.begin(); node_idx < node_range.end(); ++ node_idx) + pass2_body(node_idx); + }); + // Apply the recorded side effects in node order. + for (size_t node_idx = 0; node_idx < nodes_vec.size(); ++ node_idx) { + PassTwoResult& pass2_out = pass2_results[node_idx]; + for (PendingNode& pending : pass2_out.pending) { + SupportNode* next_node = m_ts_data->create_node(pending.position, pending.distance_to_top, obj_layer_nr_next, + pending.support_roof_layers_below, pending.to_buildplate, pending.parent, print_z_next, height_next); + if (pending.zero_max_move) + next_node->max_move_dist = 0; + if (pending.has_overhang) + next_node->overhang = std::move(pending.overhang); + if (pending.clamp_radius) { + next_node->radius = std::max(pending.parent_radius, std::min(next_node->radius, pending.dist_to_outer)); + get_max_move_dist(next_node); + } + contact_nodes[layer_nr_next].push_back(next_node); + } + if (pass2_out.unsupported_leaf) + unsupported_branch_leaves.push_front({ layer_nr, nodes_vec[node_idx].second }); + if (pass2_out.invalidate) + nodes_vec[node_idx].second->valid = false; } - ); } #ifdef SUPPORT_TREE_DEBUG_TO_SVG @@ -3763,7 +3819,7 @@ const ExPolygons& TreeSupportData::calculate_avoidance(const RadiusLayerPair& ke } const ExPolygons &collision = get_collision(radius, layer_nr); avoidance_areas.insert(avoidance_areas.end(), collision.begin(), collision.end()); - avoidance_areas = std::move(union_ex(avoidance_areas)); + avoidance_areas = union_ex(avoidance_areas); auto ret = m_avoidance_cache.insert({key, std::move(avoidance_areas)}); //assert(ret.second); return ret.first->second; diff --git a/src/libslic3r/Support/TreeSupport.hpp b/src/libslic3r/Support/TreeSupport.hpp index e0446ad5f1..bd5a154e26 100644 --- a/src/libslic3r/Support/TreeSupport.hpp +++ b/src/libslic3r/Support/TreeSupport.hpp @@ -204,8 +204,9 @@ public: clear_nodes(); } - TreeSupportData(TreeSupportData&&) = default; - TreeSupportData& operator=(TreeSupportData&&) = default; + // Deleted by the tbb::spin_mutex member. + TreeSupportData(TreeSupportData&&) = delete; + TreeSupportData& operator=(TreeSupportData&&) = delete; TreeSupportData(const TreeSupportData&) = delete; TreeSupportData& operator=(const TreeSupportData&) = delete; @@ -431,7 +432,6 @@ private: size_t m_highest_overhang_layer = 0; std::vector> m_spanning_trees; std::vector< std::unordered_map> m_mst_line_x_layer_contour_caches; - float DO_NOT_MOVER_UNDER_MM = 0.0; coordf_t base_radius = 0.0; const coordf_t MAX_BRANCH_RADIUS = 10.0; const coordf_t MIN_BRANCH_RADIUS = 0.4; diff --git a/src/libslic3r/Support/TreeSupport3D.cpp b/src/libslic3r/Support/TreeSupport3D.cpp index 29131502d2..3cd3f4110d 100644 --- a/src/libslic3r/Support/TreeSupport3D.cpp +++ b/src/libslic3r/Support/TreeSupport3D.cpp @@ -2382,13 +2382,10 @@ static void merge_influence_areas( size_t num_buckets_initial; { // How many buckets per first merge iteration? - const size_t num_threads = tbb::this_task_arena::max_concurrency(); - // 4 buckets per thread if possible, - const size_t num_buckets_min = (input_size + 2) / 4; - // 2 buckets per thread otherwise. - const size_t num_buckets_max = input_size / 2; - num_buckets_initial = num_buckets_min >= num_threads ? num_buckets_min : num_buckets_max; - const size_t bucket_size = num_buckets_min >= num_threads ? 4 : 2; + // Fixed at 4: merging is not associative, so sizing buckets off max_concurrency() made + // results depend on the core count of the slicing machine. + const size_t bucket_size = 4; + num_buckets_initial = (input_size + 2) / 4; // Fill in the buckets. SupportElementMerging *it = influence_areas.data(); // Reserve one more bucket to keep a single influence area which will not be merged in the first iteration. diff --git a/src/libslic3r/Thread.cpp b/src/libslic3r/Thread.cpp index 3030b6d194..edd7c2a3d0 100644 --- a/src/libslic3r/Thread.cpp +++ b/src/libslic3r/Thread.cpp @@ -30,6 +30,11 @@ static HMODULE s_hKernel32 = nullptr; static SetThreadDescriptionType s_fnSetThreadDescription = nullptr; static GetThreadDescriptionType s_fnGetThreadDescription = nullptr; +// Convert the FARPROC from GetProcAddress to Fn through a generic function pointer. +template static Fn load_proc(HMODULE module, const char* name) { + return reinterpret_cast(reinterpret_cast(::GetProcAddress(module, name))); +} + static bool WindowsGetSetThreadNameAPIInitialize() { if (! s_SetGetThreadDescriptionInitialized) { @@ -37,8 +42,8 @@ static bool WindowsGetSetThreadNameAPIInitialize() // to initialize s_hKernel32 = LoadLibraryW(L"Kernel32.dll"); if (s_hKernel32) { - s_fnSetThreadDescription = (SetThreadDescriptionType)::GetProcAddress(s_hKernel32, "SetThreadDescription"); - s_fnGetThreadDescription = (GetThreadDescriptionType)::GetProcAddress(s_hKernel32, "GetThreadDescription"); + s_fnSetThreadDescription = load_proc(s_hKernel32, "SetThreadDescription"); + s_fnGetThreadDescription = load_proc(s_hKernel32, "GetThreadDescription"); } s_SetGetThreadDescriptionInitialized = true; } diff --git a/src/libslic3r/TriangleMeshSlicer.cpp b/src/libslic3r/TriangleMeshSlicer.cpp index 417ca354d3..4ff18165cb 100644 --- a/src/libslic3r/TriangleMeshSlicer.cpp +++ b/src/libslic3r/TriangleMeshSlicer.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -607,6 +608,17 @@ static inline std::vector slice_make_lines( } } ); + // Facet processing above is parallel, so per-layer line order depends on thread scheduling, + // and make_loops() derives island order and loop start vertices from it. Sort canonically; + // edge_type and flags only break ties, std::sort being unstable. + tbb::parallel_for(tbb::blocked_range(0, lines.size()), + [&lines](const tbb::blocked_range &range) { + for (size_t i = range.begin(); i < range.end(); ++ i) + std::sort(lines[i].begin(), lines[i].end(), [](const IntersectionLine &l, const IntersectionLine &r) { + return std::make_tuple(l.edge_a_id, l.edge_b_id, l.a_id, l.b_id, l.a.x(), l.a.y(), l.b.x(), l.b.y(), l.edge_type, l.flags) < + std::make_tuple(r.edge_a_id, r.edge_b_id, r.a_id, r.b_id, r.a.x(), r.a.y(), r.b.x(), r.b.y(), r.edge_type, r.flags); + }); + }); return lines; } diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 55d9b716cf..b21da72fc8 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -70,6 +70,7 @@ #define CLI_FILAMENT_CAN_NOT_MAP -66 #define CLI_ONLY_ONE_TPU_SUPPORTED -67 #define CLI_FILAMENTS_NOT_SUPPORTED_BY_EXTRUDER -68 +#define CLI_MIXED_FILAMENT_INVALID -69 #define CLI_SLICING_ERROR -100 #define CLI_GCODE_PATH_CONFLICTS -101 @@ -255,6 +256,10 @@ extern bool is_gallery_file(const std::string& path, char const* type); extern bool is_shapes_dir(const std::string& dir); //BBS: add json support extern bool is_json_file(const std::string& path); +// True if rel_path is relative, has no ".." component and, joined to root, still resolves inside it. +// Both '/' and '\\' are treated as separators on every platform, so an archive rejected on one OS +// is rejected on all of them. +extern bool is_path_within_root(const std::string &rel_path, const boost::filesystem::path &root); // Orca: custom protocal support utils inline bool is_orca_open(const std::string& url) { return boost::starts_with(url, "orcaslicer://open"); } @@ -309,6 +314,9 @@ extern unsigned get_current_pid(); std::string per_user_temp_id(); // Per-user temp root under `base`; an empty `user_id` returns `base` unchanged. std::string per_user_temp_dir(const std::string &base, const std::string &user_id); +// Completes a relative command line input path against the current working directory. Absolute +// paths and custom open protocol URLs are returned unchanged. +std::string resolve_cli_input_path(const std::string &path); // BBS: backup & restore std::string get_process_name(int pid); diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index 10fa9653eb..3c2981d822 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -28,9 +28,9 @@ std::string CalibPressureAdvance::move_to(Vec2d pt, GCodeWriter &writer, std::st gcode << writer.retract(); // retract before z move or move if(z > EPSILON && layer_height >= 0){ - gcode << writer.travel_to_z(z, "z-hop"); // Perform z hop + gcode << writer.travel_to_z(z, "Z-hop"); // Perform z hop gcode << writer.travel_to_xy(pt, comment); // Travel with z move - gcode << writer.travel_to_z(layer_height, "undo z-hop"); // Undo z hop + gcode << writer.travel_to_z(layer_height, "undo Z-hop"); // Undo z hop }else { gcode << writer.travel_to_xy(pt, comment); } diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index ed0f76ee86..abca5e79dc 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -91,29 +91,15 @@ class CaliPresetInfo { public: int tray_id; - int extruder_id; - NozzleVolumeType nozzle_volume_type; - BedType bed_type; + int extruder_id = 0; + NozzleVolumeType nozzle_volume_type{nvtStandard}; + BedType bed_type{btDefault}; float nozzle_diameter; int nozzle_pos_id{-1}; std::string nozzle_sn; std::string filament_id; std::string setting_id; std::string name; - - CaliPresetInfo &operator=(const CaliPresetInfo &other) - { - this->tray_id = other.tray_id; - this->extruder_id = other.extruder_id; - this->nozzle_volume_type = other.nozzle_volume_type; - this->nozzle_diameter = other.nozzle_diameter; - this->nozzle_pos_id = other.nozzle_pos_id; - this->nozzle_sn = other.nozzle_sn; - this->filament_id = other.filament_id; - this->setting_id = other.setting_id; - this->name = other.name; - return *this; - } }; struct PrinterCaliInfo diff --git a/src/libslic3r/libslic3r.h b/src/libslic3r/libslic3r.h index 6584566f40..c339da566a 100644 --- a/src/libslic3r/libslic3r.h +++ b/src/libslic3r/libslic3r.h @@ -93,6 +93,9 @@ static constexpr double INSET_OVERLAP_TOLERANCE = 0.4; static constexpr double EXTERNAL_INFILL_MARGIN = 3; static constexpr double BRIDGE_INFILL_MARGIN = 1; static constexpr double WIPE_TOWER_MARGIN = 1.; +// Margin for system placement of the wipe tower (defaults, re-placement, CLI). Positions +// within WIPE_TOWER_MARGIN stay valid: a user drag down to that limit is respected. +static constexpr double WIPE_TOWER_AUTO_MARGIN = 15.; //FIXME Better to use an inline function with an explicit return type. //inline coord_t scale_(coordf_t v) { return coord_t(floor(v / SCALING_FACTOR + 0.5f)); } #define scale_(val) ((val) / SCALING_FACTOR) diff --git a/src/libslic3r/libslic3r_version.h.in b/src/libslic3r/libslic3r_version.h.in index 750e092d28..df83e813c9 100644 --- a/src/libslic3r/libslic3r_version.h.in +++ b/src/libslic3r/libslic3r_version.h.in @@ -5,9 +5,6 @@ #define SLIC3R_APP_KEY "@SLIC3R_APP_KEY@" #define SLIC3R_VERSION "@SLIC3R_VERSION@" #define SoftFever_VERSION "@SoftFever_VERSION@" -#ifndef GIT_COMMIT_HASH - #define GIT_COMMIT_HASH "0000000" // 0000000 means uninitialized -#endif #define SLIC3R_BUILD_ID "@SLIC3R_BUILD_ID@" //#define SLIC3R_RC_VERSION "@SLIC3R_VERSION@" #define BBL_INTERNAL_TESTING @BBL_INTERNAL_TESTING@ diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 58ec8318a6..9def5dad17 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -310,7 +310,11 @@ void set_data_dir(const std::string &dir) { g_data_dir = dir; if (!g_data_dir.empty() && !boost::filesystem::exists(g_data_dir)) { - boost::filesystem::create_directory(g_data_dir); + try { + boost::filesystem::create_directories(g_data_dir); + } catch (const boost::filesystem::filesystem_error &ex) { + BOOST_LOG_TRIVIAL(error) << "set_data_dir: failed to create data directory " << g_data_dir << ": " << ex.what(); + } } } @@ -957,7 +961,7 @@ CopyFileResult copy_file(const std::string &from, const std::string &to, std::st BOOL result = CopyFileW(src_wstr, dst_wstr, FALSE); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } @@ -1084,6 +1088,30 @@ bool is_json_file(const std::string& path) return boost::iends_with(path, ".json"); } +bool is_path_within_root(const std::string &rel_path, const boost::filesystem::path &root) +{ + auto is_separator = [](char c) { return c == '/' || c == '\\'; }; + if (rel_path.empty() || is_separator(rel_path.front()) || (rel_path.size() > 1 && rel_path[1] == ':')) + return false; + for (size_t start = 0; start <= rel_path.size();) { + size_t end = start; + while (end < rel_path.size() && !is_separator(rel_path[end])) + ++end; + if (rel_path.compare(start, end - start, "..") == 0) + return false; + start = end + 1; + } + // Resolve against the canonical root so a symlink inside it cannot lead back out. + try { + const std::string root_str = boost::filesystem::weakly_canonical(root).string(); + const std::string full_str = boost::filesystem::weakly_canonical(root / rel_path).string(); + return full_str.compare(0, root_str.size(), root_str) == 0 && + (full_str.size() == root_str.size() || full_str[root_str.size()] == boost::filesystem::path::preferred_separator); + } catch (const boost::filesystem::filesystem_error &) { + return false; + } +} + bool is_img_file(const std::string &path) { return boost::iends_with(path, ".png") || boost::iends_with(path, ".svg"); @@ -1311,6 +1339,19 @@ std::string per_user_temp_dir(const std::string &base, const std::string &user_i return base + "/orcaslicer_" + user_id; } +std::string resolve_cli_input_path(const std::string &path) +{ + const boost::filesystem::path input(path); + if (path.empty() || is_supported_open_protocol(path) || input.is_absolute()) + return path; + + boost::system::error_code ec; + const boost::filesystem::path resolved = boost::filesystem::system_complete(input, ec); + if (ec) + return path; + return resolved.lexically_normal().make_preferred().string(); +} + // BBS: backup & restore std::string get_process_name(int pid) { diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index b014b44bb2..e924c317cc 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -38,6 +38,8 @@ set(SLIC3R_GUI_SOURCES GUI/AuxiliaryDataViewModel.hpp GUI/AuxiliaryDialog.cpp GUI/AuxiliaryDialog.hpp + GUI/AVVideoDecoder.cpp + GUI/AVVideoDecoder.hpp GUI/Auxiliary.hpp GUI/BackgroundSlicingProcess.cpp GUI/BackgroundSlicingProcess.hpp @@ -61,6 +63,8 @@ set(SLIC3R_GUI_SOURCES GUI/BitmapComboBox.hpp GUI/BonjourDialog.cpp GUI/BonjourDialog.hpp + GUI/BuildCommit.cpp + GUI/BuildCommit.hpp GUI/CrealityDiscoveryDialog.cpp GUI/CrealityDiscoveryDialog.hpp GUI/calib_dlg.cpp @@ -93,6 +97,8 @@ set(SLIC3R_GUI_SOURCES GUI/CloneDialog.hpp GUI/ConfigManipulation.cpp GUI/ConfigManipulation.hpp + GUI/ConfigValueFormatter.cpp + GUI/ConfigValueFormatter.hpp GUI/ConfigWizard.cpp GUI/ConfigWizard.hpp GUI/ConfigWizard_private.hpp @@ -447,6 +453,8 @@ set(SLIC3R_GUI_SOURCES GUI/Project.hpp GUI/PublishDialog.cpp GUI/PublishDialog.hpp + GUI/PublishSettingsDialog.cpp + GUI/PublishSettingsDialog.hpp GUI/PurgeModeDialog.cpp GUI/PurgeModeDialog.hpp GUI/RammingChart.cpp @@ -611,6 +619,8 @@ set(SLIC3R_GUI_SOURCES GUI/WipeTowerDialog.cpp GUI/wxExtensions.cpp GUI/wxExtensions.hpp + GUI/wxMediaCtrl3.cpp + GUI/wxMediaCtrl3.h plugin/PythonInterpreter.cpp plugin/PythonInterpreter.hpp plugin/PythonPluginBridge.cpp @@ -670,6 +680,10 @@ set(SLIC3R_GUI_SOURCES Utils/bambu_networking.hpp Utils/Bonjour.cpp Utils/Bonjour.hpp + Utils/MeshInspect.cpp + Utils/MeshInspect.hpp + Utils/PaintCLI.cpp + Utils/PaintCLI.hpp Utils/CalibUtils.cpp Utils/CalibUtils.hpp Utils/ColorSpaceConvert.cpp @@ -774,6 +788,30 @@ set(SLIC3R_GUI_SOURCES Utils/wxInspectorPlugins/Registration.hpp ) +# Design/CAD tab: parametric sketch UI, its gizmos, and the MCP control socket. +# All of it sits behind SLIC3R_CAD and links the CAD kernel in libslic3r. +if (SLIC3R_CAD) + list(APPEND SLIC3R_GUI_SOURCES + GUI/CAD/DesignPanel.cpp + GUI/CAD/DesignPanel.hpp + GUI/CAD/DesignCanvas.cpp + GUI/CAD/DesignCanvas.hpp + GUI/CAD/DesignSketchTool.cpp + GUI/CAD/DesignSketchTool.hpp + GUI/CAD/DesignOffer.hpp + GUI/CAD/DesignInteraction.hpp + GUI/CAD/SketchInlineEditor.cpp + GUI/CAD/SketchInlineEditor.hpp + GUI/CAD/McpControl.cpp + GUI/CAD/McpControl.hpp + GUI/Gizmos/GLGizmoSketch.cpp + GUI/Gizmos/GLGizmoSketch.hpp + # Needs GeometryEngine (make_primitive / apply_fillet / tessellate). + GUI/Gizmos/GLGizmoPrimitive.cpp + GUI/Gizmos/GLGizmoPrimitive.hpp + ) +endif () + add_subdirectory(GUI/DeviceCore) add_subdirectory(GUI/DeviceTab) @@ -799,21 +837,8 @@ if (APPLE) GUI/DeepLinkHandlerMac.mm GUI/DeepLinkHandlerMac.h GUI/GUI_UtilsMac.mm - GUI/wxMediaCtrl2.mm - GUI/wxMediaCtrl2.h ) FIND_LIBRARY(DISKARBITRATION_LIBRARY DiskArbitration) -else () - list(APPEND SLIC3R_GUI_SOURCES - GUI/wxMediaCtrl2.cpp - GUI/wxMediaCtrl2.h - ) -endif () - -if (UNIX AND NOT APPLE) - list(APPEND SLIC3R_GUI_SOURCES - GUI/Printer/gstbambusrc.c - ) endif () set(ORCA_UPDATER_SIG_KEY_B64 "${ORCA_UPDATER_SIG_KEY}") @@ -854,6 +879,18 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) +# Only BuildCommit.cpp includes the generated header, plus BaseException.cpp on +# Windows. Both build into libslic3r_gui, so the header only has to exist before +# that target builds. +set(_git_commit_hash_header "${CMAKE_CURRENT_BINARY_DIR}/git_commit_hash.h") +add_custom_target(git_commit_hash_header + BYPRODUCTS "${_git_commit_hash_header}" + COMMAND ${CMAKE_COMMAND} + "-DSOURCE_DIR=${CMAKE_SOURCE_DIR}" + "-DOUT_FILE=${_git_commit_hash_header}" + -P "${CMAKE_CURRENT_LIST_DIR}/GitCommitHash.cmake" + COMMENT "Resolving the git commit hash") +add_dependencies(libslic3r_gui git_commit_hash_header) if(APPLE AND CMAKE_VERSION VERSION_GREATER_EQUAL "4.0") set(_opengl_link_lib "") @@ -911,8 +948,43 @@ endif () if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY) add_precompiled_header(libslic3r_gui pchheader.hpp FORCEINCLUDE) +elseif (MSVC) + # Puts the Windows headers first when the PCH is off. + target_compile_options(libslic3r_gui PRIVATE "/FIslic3r/win_platform.hpp") endif () +if (APPLE) + # Static FFmpeg from the deps install: nothing to bundle into the .app, + # no rpath/install_name handling. Order matters: avcodec -> swscale -> avutil. + find_library(LIBAVCODEC_LIBRARY NAMES libavcodec.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBSWSCALE_LIBRARY NAMES libswscale.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBAVUTIL_LIBRARY NAMES libavutil.a PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + if (NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY) + message(FATAL_ERROR "Static FFmpeg (libavcodec.a/libswscale.a/libavutil.a) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps — FFMPEG builds static-only on macOS.") + endif () + target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY}) + target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include) +elseif (WIN32) + # Prebuilt shared FFmpeg from the deps install. Windows has no pkg-config, + # so resolve the import libraries out of the deps prefix directly; the DLLs + # are copied next to the executable by the top level CMakeLists. + find_library(LIBAVCODEC_LIBRARY NAMES avcodec PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBSWSCALE_LIBRARY NAMES swscale PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + find_library(LIBAVUTIL_LIBRARY NAMES avutil PATHS ${CMAKE_PREFIX_PATH}/lib NO_DEFAULT_PATH) + if (NOT LIBAVCODEC_LIBRARY OR NOT LIBSWSCALE_LIBRARY OR NOT LIBAVUTIL_LIBRARY) + message(FATAL_ERROR "FFmpeg (avcodec/swscale/avutil) not found under ${CMAKE_PREFIX_PATH}/lib. Rebuild the deps.") + endif () + target_link_libraries(libslic3r_gui ${LIBAVCODEC_LIBRARY} ${LIBSWSCALE_LIBRARY} ${LIBAVUTIL_LIBRARY}) + target_include_directories(libslic3r_gui SYSTEM PRIVATE ${CMAKE_PREFIX_PATH}/include) +else () + pkg_check_modules(LIBAV REQUIRED IMPORTED_TARGET + libavcodec + libswscale + libavutil + ) + target_link_libraries(libslic3r_gui PkgConfig::LIBAV) +endif() + # We need to implement some hacks for wxWidgets and touch the underlying GTK # layer and sub-libraries. This forces us to use the include locations and # link these libraries. @@ -939,20 +1011,11 @@ if (UNIX AND NOT APPLE) target_compile_definitions(libslic3r_gui PRIVATE wxHAVE_GDK_WAYLAND) endif () - # We add GStreamer for bambu:/// support. - pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0) - pkg_check_modules(GST_BASE REQUIRED gstreamer-base-1.0) - target_link_libraries(libslic3r_gui ${GSTREAMER_LIBRARIES} ${GST_BASE_LIBRARIES}) - target_include_directories(libslic3r_gui SYSTEM PRIVATE ${GSTREAMER_INCLUDE_DIRS} ${GST_BASE_INCLUDE_DIRS}) endif () # Add a definition so that we can tell we are compiling slic3r. target_compile_definitions(libslic3r_gui PRIVATE SLIC3R_CURRENTLY_COMPILING_GUI_MODULE) -if(ORCA_BUNDLED_UV_EXECUTABLE_CONFIG) - target_compile_definitions(libslic3r_gui PRIVATE "ORCA_BUNDLED_UV_EXECUTABLE=\"${ORCA_BUNDLED_UV_EXECUTABLE_CONFIG}\"") -endif() - if (ORCA_BUILD_PYTHON_STUBGEN_MODULE) add_library(orca_stubgen MODULE plugin/PythonPluginBridge.cpp diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index b791635fd3..e6335fba3a 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -134,6 +134,7 @@ public: void set_position(Vec2d& position); void set_axes_mode(bool origin); + void set_axes_origin(const Vec3d& origin) { m_axes.set_origin(origin); } // Design tab: triad at bed centre const Vec2d& get_position() const { return m_position; } // Build volume geometry for various collision detection tasks. diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index f65c0e3532..6dbea1272a 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -20,6 +20,8 @@ #include "libslic3r/AppConfig.hpp" #include "libslic3r/PresetBundle.hpp" #include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/Tesselate.hpp" #include "libslic3r/PrintConfig.hpp" @@ -919,6 +921,21 @@ int GLVolumeCollection::load_wipe_tower_preview( GUI::PartPlateList& ppl = GUI::wxGetApp().plater()->get_partplate_list(); std::vector plate_extruders = ppl.get_plate(plate_idx)->get_extruders(true); TriangleMesh wipe_tower_shell = make_cube(width, depth, height); + // The brim is part of the printed footprint: draw it and fold it into the shell so the + // outside-bed shader and the drag clamp react to the true first-layer extent. + const bool show_brim = brim_width > 0.f; + const float brim_height = 0.2f; // one first layer, visual only + TriangleMesh brim_slab; + if (show_brim) { + // The brim follows the real first-layer outline: a Type2 cone-wall tower's base bulges + // past the body box. The wall type and angle are print settings, the planner a printer one. + const DynamicPrintConfig &print_cfg = GUI::wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig &printer_cfg = GUI::wxGetApp().preset_bundle->printers.get_edited_preset().config; + const Polygon outline = estimate_wipe_tower_first_layer_outline(print_cfg, resolve_wipe_tower_type(printer_cfg), width, depth, height); + const Polygons brim_outline = offset(outline, scaled(brim_width)); + brim_slab = WipeTower::its_make_rib_brim(brim_outline.empty() ? outline : brim_outline.front(), brim_height); + wipe_tower_shell.merge(brim_slab); + } for (int extruder_id : plate_extruders) { if (extruder_id <= extruder_colors.size()) colors.push_back(extruder_colors[extruder_id - 1]); @@ -929,14 +946,19 @@ int GLVolumeCollection::load_wipe_tower_preview( // Orca: make it transparent for(auto& color : colors) color.a(0.66f); + const size_t slab_count = colors.size(); // per-filament body slabs; the brim part comes after + if (show_brim && !colors.empty()) + colors.push_back(colors.front()); volumes.emplace_back(new GLWipeTowerVolume(colors)); GLWipeTowerVolume& v = *dynamic_cast(volumes.back()); v.model_per_colors.resize(colors.size()); - for (int i = 0; i < colors.size(); i++) { - TriangleMesh color_part = make_cube(width, depth / colors.size(), height); - color_part.translate({ 0.f, depth * i / colors.size(), 0. }); + for (size_t i = 0; i < slab_count; i++) { + TriangleMesh color_part = make_cube(width, depth / slab_count, height); + color_part.translate({ 0.f, depth * i / slab_count, 0. }); v.model_per_colors[i].init_from(color_part); } + if (show_brim && !colors.empty()) + v.model_per_colors[slab_count].init_from(brim_slab); v.model.init_from(wipe_tower_shell); v.mesh_raycaster = std::make_unique(std::make_shared(wipe_tower_shell)); v.set_convex_hull(wipe_tower_shell); diff --git a/src/slic3r/GUI/AMSDryControl.cpp b/src/slic3r/GUI/AMSDryControl.cpp index ddd3380975..17d7d62ad8 100644 --- a/src/slic3r/GUI/AMSDryControl.cpp +++ b/src/slic3r/GUI/AMSDryControl.cpp @@ -1,6 +1,7 @@ #include "AMSDryControl.hpp" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "slic3r/GUI/DeviceCore/DevExtruderSystem.h" @@ -437,7 +438,7 @@ wxBoxSizer* AMSDryCtrWin::create_normal_state_panel(wxPanel* parent) m_temperature_input = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(80), -1)); m_temperature_input->SetMaxLength(3); // Limit to 3 digits - m_temperature_input->Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { + m_temperature_input->Bind(wxEVT_CHAR, [](wxKeyEvent& event) { int keycode = event.GetKeyCode(); if (keycode >= '0' && keycode <= '9') { event.Skip(); @@ -464,7 +465,7 @@ wxBoxSizer* AMSDryCtrWin::create_normal_state_panel(wxPanel* parent) m_time_input = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, wxSize(FromDIP(100), -1)); m_time_input->SetMaxLength(3); // Limit to 3 digits - m_time_input->Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { + m_time_input->Bind(wxEVT_CHAR, [](wxKeyEvent& event) { int keycode = event.GetKeyCode(); if (keycode >= '0' && keycode <= '9') { event.Skip(); @@ -698,7 +699,7 @@ wxBoxSizer* AMSDryCtrWin::create_guide_info_section(wxPanel* parent) m_rotate_spool_toggle = new wxCheckBox(parent, wxID_ANY, ""); m_rotate_spool_toggle->SetValue(false); - m_rotate_spool_toggle->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& event) { + m_rotate_spool_toggle->Bind(wxEVT_CHECKBOX, [](wxCommandEvent& event) { bool is_checked = event.IsChecked(); // Add toggle behavior logic here }); @@ -1196,11 +1197,11 @@ void AMSDryCtrWin::update_normal_description(DevAms* dev_ams) for (const auto& lim : ams_limits) { if (dev_ams->GetAmsType() == lim.type) { if (temp_val > lim.max_temp) { - wxString msg = wxString(lim.name) + _L(" maximum drying temperature is ") + wxString::Format(wxT("%d"), lim.max_temp) + wxString::FromUTF8("°C."); + wxString msg = wxString::Format(_L("%s maximum drying temperature is %d°C."), wxString(lim.name), lim.max_temp); warning_text += msg + "\n"; can_enable_button = false; } else if (temp_val < lim.min_temp) { - wxString msg = wxString(lim.name) + _L(" minimum drying temperature is ") + wxString::Format(wxT("%d"), lim.min_temp) + wxString::FromUTF8("°C."); + wxString msg = wxString::Format(_L("%s minimum drying temperature is %d°C."), wxString(lim.name), lim.min_temp); warning_text += msg + "\n"; can_enable_button = false; } @@ -1511,6 +1512,10 @@ void AMSDryCtrWin::update_filament_guide_info(DevAms* dev_ams) m_temperature_input->GetValue().ToLong(&input_temp); bool can_start = true; + // "GFA00" is Bambu's PLA id; GetFilamentDryingPreset is keyed by our OF ids. + auto* agent = wxGetApp().getAgent(); + const std::string pla_filament_id = agent ? agent->to_orca_filament_id("GFA00") : std::string("GFA00"); + int slot_count = 0, empty_count = 0; for (auto& tray_pair : dev_ams->GetTrays()) { if (!tray_pair.second) { @@ -1526,13 +1531,15 @@ void AMSDryCtrWin::update_filament_guide_info(DevAms* dev_ams) wxString filament_type = tray_pair.second->get_display_filament_type(); DevFilamentDryingPreset preset; if (filament_type.IsEmpty()) { - auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(pla_filament_id); + if (!fallback_preset) continue; // no PLA preset (e.g. the id map is missing): skip, don't throw preset = fallback_preset.value(); filament_type = "?"; } else if (preset_opt.has_value()) { preset = preset_opt.value(); } else { - auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(pla_filament_id); + if (!fallback_preset) continue; preset = fallback_preset.value(); } std::string icon_path = "dev_ams_dry_ctr_enable"; @@ -1594,39 +1601,21 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj) } stream << std::fixed << std::setprecision(1) << obj->GetExtderSystem()->GetNozzleDiameter(extruder_id); std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle( - DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str); - for (auto filament_it = filaments.begin(); filament_it != filaments.end(); ++filament_it) { - Preset& preset = *filament_it; - // Filter by system preset: root preset and (system preset or user preset is supported) - if (filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && !obj->is_support_user_preset)) { + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string filament_alias = filaments.get_preset_alias(*filament_it, true); + if (filament_alias.empty()) + continue; + auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id); + if (!opt_info.has_value()) continue; - } - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - if (!printer_strs) continue; - - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } - - filament_id_set.insert(filament_it->filament_id); - auto filament_alias = filaments.get_preset_alias(*filament_it, true); - if (!filament_alias.empty()) { - auto opt_info = preset_bundle->get_filament_by_filament_id(filament_it->filament_id); - if (opt_info.has_value()) { - auto real_info = opt_info.value(); - real_info.filament_name = filament_alias; - m_tray_ids.push_back(std::move(real_info)); - m_trays_combo->Append(wxString::FromUTF8(filament_alias)); - } - } - } - } + opt_info->filament_name = filament_alias; + m_tray_ids.push_back(std::move(*opt_info)); + m_trays_combo->Append(wxString::FromUTF8(filament_alias)); } if (m_tray_ids.empty()) { @@ -1701,9 +1690,10 @@ int AMSDryCtrWin::update_filament_list(DevAms* dev_ams, MachineObject* obj) // Select recommended drying temperature and default filament float min_dry_temp = std::numeric_limits::max(); - std::string default_filament_id = "GFA00"; + auto* agent = wxGetApp().getAgent(); + std::string default_filament_id = agent ? agent->to_orca_filament_id("GFA00") : std::string("GFA00"); // compared against m_tray_ids[i].filament_id (our OF ids) below bool has_ready = false; - const auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset("GFA00"); + const auto fallback_preset = DevUtilBackend::GetFilamentDryingPreset(default_filament_id); for (const auto& tray_pair : dev_ams->GetTrays()) { if (!tray_pair.second || !tray_pair.second->is_tray_info_ready()) continue; has_ready = true; diff --git a/src/slic3r/GUI/AMSDryControl.hpp b/src/slic3r/GUI/AMSDryControl.hpp index a7500b5b03..6c5df86849 100644 --- a/src/slic3r/GUI/AMSDryControl.hpp +++ b/src/slic3r/GUI/AMSDryControl.hpp @@ -14,6 +14,7 @@ //Previous defintions class wxGrid; +class ProgressBar; namespace Slic3r { @@ -55,7 +56,6 @@ private: Label* m_text_label; wxStaticBitmap* m_icon_bitmap; - int m_target_size; std::string m_icon_name; ScalableBitmap m_icon; }; @@ -98,12 +98,6 @@ private: wxSimplebook* m_main_simplebook{nullptr}; wxPanel* m_original_page{nullptr}; - wxWindow* m_amswin{nullptr}; - wxBoxSizer* m_sizer_ams_items{nullptr}; - wxScrolledWindow* m_panel_prv_left {nullptr}; - wxScrolledWindow* m_panel_prv_right{nullptr}; - wxBoxSizer* m_sizer_prv_left{nullptr}; - wxBoxSizer* m_sizer_prv_right{nullptr}; // left panel related members ScalableBitmap m_humidity_image; diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index 2e436e8462..f0fdf950a0 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -2,6 +2,8 @@ #include "ExtrusionCalibration.hpp" #include "MsgDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "libslic3r/Preset.hpp" #include "I18N.hpp" #include @@ -681,6 +683,19 @@ void AMSMaterialsSetting::on_select_ok(wxCommandEvent &event) } + // Orca: log the tray payload this dialog hands the printer, so the filament_id resolved from the + // dropdown selection can be checked against the tray_info_idx the AMS actually receives. A + // BBL-tagged (RFID) tray is read-only here, so nothing is published for it. + BOOST_LOG_TRIVIAL(info) << "ams_materials_setting: " << (m_is_third ? "sending" : "NOT sending (BBL RFID tray, read-only)") + << ", ams_id = " << ams_id << ", slot_id = " << slot_id + << ", selected = " << m_comboBox_filament->GetValue().ToStdString() + << ", tray_info_idx (filament_id) = " << ams_filament_id + << ", setting_id = " << ams_setting_id + << ", tray_type = " << m_filament_type + << ", tray_color = " << col_buf + << ", nozzle_temp_min = " << nozzle_temp_min_int + << ", nozzle_temp_max = " << nozzle_temp_max_int; + // set filament if (m_is_third) { obj->command_ams_filament_settings(ams_id, slot_id, ams_filament_id, ams_setting_id, std::string(col_buf), m_filament_type, nozzle_temp_min_int, nozzle_temp_max_int); @@ -802,7 +817,10 @@ void AMSMaterialsSetting::set_color(wxColour color) fila_color.m_colors.insert(color); fila_color.EndSet(m_clr_picker->ctype); auto clr_query = GUI::wxGetApp().get_filament_color_code_query(); - m_clr_name->SetLabelText(clr_query->GetFilaColorName(ams_filament_id, fila_color)); + // ams_filament_id is our OF id; GetFilaColorName looks up filaments_color_codes.json, + // downloaded from Bambu and keyed by the printer's own ids, so translate for this lookup only. + auto* agent = GUI::wxGetApp().getAgent(); + m_clr_name->SetLabelText(clr_query->GetFilaColorName(agent ? agent->from_orca_filament_id(ams_filament_id) : ams_filament_id, fila_color)); } void AMSMaterialsSetting::set_empty_color(wxColour color) @@ -823,7 +841,10 @@ void AMSMaterialsSetting::set_colors(std::vector colors) for (const auto& clr : colors) { fila_color.m_colors.insert(clr); } fila_color.EndSet(m_clr_picker->ctype); auto clr_query = GUI::wxGetApp().get_filament_color_code_query(); - m_clr_name->SetLabelText(clr_query->GetFilaColorName(ams_filament_id, fila_color)); + // ams_filament_id is our OF id; GetFilaColorName looks up filaments_color_codes.json, + // downloaded from Bambu and keyed by the printer's own ids, so translate for this lookup only. + auto* agent = GUI::wxGetApp().getAgent(); + m_clr_name->SetLabelText(clr_query->GetFilaColorName(agent ? agent->from_orca_filament_id(ams_filament_id) : ams_filament_id, fila_color)); } } @@ -932,7 +953,6 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi m_input_k_val->GetTextCtrl()->SetValue(k); m_input_n_val->GetTextCtrl()->SetValue(n); - int idx = 0; wxArrayString filament_items; wxString bambu_filament_name; wxString hint_filament_name; // the hint type to be selected @@ -940,6 +960,9 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi std::unordered_map query_filament_types; // std::set filament_id_set; + // The alias keyed map has to start empty: it is a member, so a stale alias left by an earlier + // popup (a different printer, a different nozzle) would resolve to that printer's filament_id. + map_filament_items.clear(); PresetBundle * preset_bundle = wxGetApp().preset_bundle; std::ostringstream stream; // Defensive: this dialog is opened only from StatusPanel (BBL-only) today, so the fallback fires @@ -952,83 +975,48 @@ void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_mi } stream << std::fixed << std::setprecision(1) << machine_diameter; std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str); if (preset_bundle) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - //filter by system preset - Preset& preset = *filament_it; - /*The situation where the user preset is not displayed is as follows: - 1. Not a root preset - 2. Not system preset and the printer firmware does not support user preset */ - if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && !obj->is_support_user_preset)) { + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true); + if (alias.empty()) continue; - } - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } else { - filament_id_set.insert(filament_it->filament_id); - // name matched - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); - _collect_filament_info(filament_it->alias, preset, query_filament_vendors, query_filament_types); + filament_items.push_back(alias); + _collect_filament_info(alias, *filament_it, query_filament_vendors, query_filament_types); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; - } else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos - 1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[alias] = filament_infos; - filament_items.push_back(user_preset_alias); - _collect_filament_info(user_preset_alias, preset, query_filament_vendors, query_filament_types); - - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - } - - if (filament_it->filament_id == ams_filament_id) { - hint_filament_name = from_u8(filament_it->alias); - bambu_filament_name = from_u8(filament_it->alias); + if (filament_it->filament_id == ams_filament_id) { + hint_filament_name = from_u8(alias); + bambu_filament_name = from_u8(alias); - // update if nozzle_temperature_range is found - ConfigOption *opt_min = filament_it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } - } - } - idx++; + // update if nozzle_temperature_range is found + ConfigOption *opt_min = filament_it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts *opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); + } + } + ConfigOption *opt_max = filament_it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts *opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); } } } - } } @@ -1251,56 +1239,47 @@ void AMSMaterialsSetting::on_select_filament(wxCommandEvent &evt) stream << std::fixed << std::setprecision(1) << machine_diameter; } std::string nozzle_diameter_str = stream.str(); - std::set printer_names = preset_bundle->get_printer_names_by_printer_type_and_nozzle(DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), - nozzle_diameter_str); - for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) { - if (!m_comboBox_filament->GetValue().IsEmpty()) { - auto filament_item = map_filament_items[m_comboBox_filament->GetValue().ToStdString()]; - std::string filament_id = filament_item.filament_id; - if (it->filament_id.compare(filament_id) == 0) { - ConfigOption * printer_opt = it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - bool has_compatible_printer = false; - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - has_compatible_printer = true; - break; - } + // Resolve the selection against the same list Popup() built the dropdown from, so the two + // halves of the dialog cannot disagree about which filaments this machine can use. + const std::string selected = m_comboBox_filament->GetValue().ToStdString(); + if (!selected.empty()) { + const std::string filament_id = map_filament_items[selected].filament_id; + for (Preset *it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (it->filament_id != filament_id) + continue; + // ) if nozzle_temperature_range is found + ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); + if (opt_min) { + ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); + if (opt_min_ints) { + wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); + m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); } - if (!it->is_system && !has_compatible_printer) continue; - // ) if nozzle_temperature_range is found - ConfigOption* opt_min = it->config.option("nozzle_temperature_range_low"); - if (opt_min) { - ConfigOptionInts* opt_min_ints = dynamic_cast(opt_min); - if (opt_min_ints) { - wxString text_nozzle_temp_min = wxString::Format("%d", opt_min_ints->get_at(0)); - m_input_nozzle_min->GetTextCtrl()->SetValue(text_nozzle_temp_min); - } - } - ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high"); - if (opt_max) { - ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); - if (opt_max_ints) { - wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); - m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); - } - } - ConfigOption* opt_type = it->config.option("filament_type"); - bool found_filament_type = false; - if (opt_type) { - ConfigOptionStrings* opt_type_strs = dynamic_cast(opt_type); - if (opt_type_strs) { - found_filament_type = true; - //m_filament_type = opt_type_strs->get_at(0); - std::string display_filament_type; - m_filament_type = it->config.get_filament_type(display_filament_type); - } - } - if (!found_filament_type) - m_filament_type = ""; - - break; } + ConfigOption* opt_max = it->config.option("nozzle_temperature_range_high"); + if (opt_max) { + ConfigOptionInts* opt_max_ints = dynamic_cast(opt_max); + if (opt_max_ints) { + wxString text_nozzle_temp_max = wxString::Format("%d", opt_max_ints->get_at(0)); + m_input_nozzle_max->GetTextCtrl()->SetValue(text_nozzle_temp_max); + } + } + ConfigOption* opt_type = it->config.option("filament_type"); + bool found_filament_type = false; + if (opt_type) { + ConfigOptionStrings* opt_type_strs = dynamic_cast(opt_type); + if (opt_type_strs) { + found_filament_type = true; + //m_filament_type = opt_type_strs->get_at(0); + std::string display_filament_type; + m_filament_type = it->config.get_filament_type(display_filament_type); + } + } + if (!found_filament_type) + m_filament_type = ""; + + break; } } } @@ -1938,11 +1917,6 @@ void ColorPickerPopup::paintEvent(wxPaintEvent& evt) void ColorPickerPopup::OnDismiss() {} -void ColorPickerPopup::Popup() -{ - PopupWindow::Popup(); -} - bool ColorPickerPopup::ProcessLeftDown(wxMouseEvent& event) { return PopupWindow::ProcessLeftDown(event); } diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp index 81167884a7..2cbd58e9a9 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.hpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp @@ -85,7 +85,6 @@ public: void set_ams_colours(std::vector ams); void set_def_colour(wxColour col); void paintEvent(wxPaintEvent& evt); - void Popup(); virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; diff --git a/src/slic3r/GUI/AMSSetting.cpp b/src/slic3r/GUI/AMSSetting.cpp index d8760cfcf6..9ba9031f19 100644 --- a/src/slic3r/GUI/AMSSetting.cpp +++ b/src/slic3r/GUI/AMSSetting.cpp @@ -292,7 +292,7 @@ void AMSSetting::UpdateByObj(MachineObject* obj) update_ams_img(obj); - m_ams_type->Update(obj); + m_ams_type->UpdateInfo(obj); //m_ams_arrange_order->Update(obj); update_insert_material_read_mode(obj); m_sizer_remain_block->Show(obj->is_support_update_remain); @@ -624,7 +624,7 @@ void AMSSettingTypePanel::CreateGui() Fit(); } -void AMSSettingTypePanel::Update(const MachineObject* obj) +void AMSSettingTypePanel::UpdateInfo(const MachineObject* obj) { if (!obj) { Show(false); diff --git a/src/slic3r/GUI/AMSSetting.hpp b/src/slic3r/GUI/AMSSetting.hpp index 69630c59d2..e157c947ae 100644 --- a/src/slic3r/GUI/AMSSetting.hpp +++ b/src/slic3r/GUI/AMSSetting.hpp @@ -110,7 +110,7 @@ public: ~AMSSettingTypePanel(); public: - void Update(const MachineObject* obj); + void UpdateInfo(const MachineObject* obj); private: void CreateGui(); diff --git a/src/slic3r/GUI/AVVideoDecoder.cpp b/src/slic3r/GUI/AVVideoDecoder.cpp new file mode 100644 index 0000000000..d7b8432bd3 --- /dev/null +++ b/src/slic3r/GUI/AVVideoDecoder.cpp @@ -0,0 +1,170 @@ +#include "AVVideoDecoder.hpp" + +#include + +extern "C" +{ + #include + #include +} + +AVVideoDecoder::AVVideoDecoder() +{ + codec_ctx_ = avcodec_alloc_context3(nullptr); +} + +AVVideoDecoder::~AVVideoDecoder() +{ + if (sws_ctx_) + sws_freeContext(sws_ctx_); + if (frame_) + av_frame_free(&frame_); + if (codec_ctx_) + avcodec_free_context(&codec_ctx_); +} + +int AVVideoDecoder::open(Bambu_StreamInfo const &info) +{ + auto codec_id = info.sub_type == AVC1 ? AV_CODEC_ID_H264 : AV_CODEC_ID_MJPEG; + auto codec = avcodec_find_decoder(codec_id); + if (codec == nullptr) { + fprintf(stderr, "AVVideoDecoder: unsupported codec!\n"); + return -1; // Codec not found + } + /* open the coderc */ + if (avcodec_open2(codec_ctx_, codec, nullptr) < 0) { + fprintf(stderr, "AVVideoDecoder: could not open codec\n"); + return -1; + } + + // Allocate an AVFrame structure + frame_ = av_frame_alloc(); + if (frame_ == nullptr) + return -1; + + return 0; +} + +int AVVideoDecoder::decode(const Bambu_Sample &sample) +{ + int ret = -1; + AVPacket *pkt = av_packet_alloc(); + if (!pkt) { + return ret; + } + + ret = av_new_packet(pkt, sample.size); + if (ret != 0) { + av_packet_free(&pkt); + return ret; + } + + memcpy(pkt->data, sample.buffer, size_t(sample.size)); + + ret = avcodec_send_packet(codec_ctx_, pkt); + if (ret == 0) { + got_frame_ = avcodec_receive_frame(codec_ctx_, frame_) == 0; + } + + av_packet_unref(pkt); + av_packet_free(&pkt); + return ret; +} + +int AVVideoDecoder::flush() +{ + int ret = avcodec_send_packet(codec_ctx_, nullptr); + got_frame_ = avcodec_receive_frame(codec_ctx_, frame_) == 0; + return ret; +} + +void AVVideoDecoder::close() +{ +} + +bool AVVideoDecoder::toWxImage(wxImage &image, wxSize const &size2) +{ + if (!got_frame_) + return false; + + auto size1 = size2; + if (!size1.IsFullySpecified()) + size1 = {frame_->width, frame_->height }; + auto size = size1; + if (size.GetWidth() & 0x0f) { + size.SetWidth((size.GetWidth() & ~0x0f) + 0x10); + if (size.GetWidth() != width_) { + std::fill(bits_.begin(), bits_.end(), 0); + width_ = size.GetWidth(); + } + } + AVPixelFormat wxFmt = AV_PIX_FMT_RGB24; + sws_ctx_ = sws_getCachedContext(sws_ctx_, + frame_->width, frame_->height, AVPixelFormat(frame_->format), + size1.GetWidth(), size1.GetHeight(), wxFmt, + SWS_GAUSS, + nullptr, nullptr, nullptr); + if (sws_ctx_ == nullptr) + return false; + int length = size.GetWidth() * size.GetHeight() * 3; + if (bits_.size() < length) + bits_.resize(length); + uint8_t * datas[] = { bits_.data() }; + int strides[] = { size.GetWidth() * 3 }; + int result_h = sws_scale(sws_ctx_, frame_->data, frame_->linesize, 0, frame_->height, datas, strides); + if (result_h != size.GetHeight()) { + return false; + } + // Copy: the frame outlives this decoder and is painted by the GUI thread while the + // next sws_scale is already overwriting bits_, so it must own its pixels. The Windows + // path below needs no equivalent, wxBitmap copies the bits into GDI. + image = wxImage(size.GetWidth(), size.GetHeight(), bits_.data(), true).Copy(); + if (!image.IsOk()) { + fprintf(stderr, "AVVideoDecoder: image not ok %dx%d\n", size.GetWidth(), size.GetHeight()); + return false; + } + return true; +} + +bool AVVideoDecoder::toWxBitmap(wxBitmap &bitmap, wxSize const &size2) +{ + if (!got_frame_) + return false; + + auto size1 = size2; + if (!size1.IsFullySpecified()) + size1 = {frame_->width, frame_->height }; + auto size = size1; + if (size.GetWidth() & 0x0f) { + size.SetWidth((size.GetWidth() & ~0x0f) + 0x10); + if (size.GetWidth() != width_) { + std::fill(bits_.begin(), bits_.end(), 0); + width_ = size.GetWidth(); + } + } + AVPixelFormat wxFmt = AV_PIX_FMT_RGB32; + sws_ctx_ = sws_getCachedContext(sws_ctx_, + frame_->width, frame_->height, AVPixelFormat(frame_->format), + size1.GetWidth(), size1.GetHeight(), wxFmt, + SWS_GAUSS, + nullptr, nullptr, nullptr); + if (sws_ctx_ == nullptr) + return false; + int length = size.GetWidth() * size.GetHeight() * 4; + if (bits_.size() < length) + bits_.resize(length); + uint8_t *datas[] = { bits_.data() }; + int strides[] = { size.GetWidth() * 4 }; + int result_h = sws_scale(sws_ctx_, frame_->data, frame_->linesize, 0, frame_->height, datas, strides); + if (result_h != size.GetHeight()) { + fprintf(stderr, "AVVideoDecoder: result_h %d %d\n", result_h, size.GetHeight()); + return false; + } + bitmap = wxBitmap((char const *) bits_.data(), size.GetWidth(), size.GetHeight(), 32); + assert(bitmap.IsOk()); + if (!bitmap.IsOk()) { + fprintf(stderr, "AVVideoDecoder: bitmap not ok %dx%d\n", size.GetWidth(), size.GetHeight()); + return false; + } + return true; +} diff --git a/src/slic3r/GUI/AVVideoDecoder.hpp b/src/slic3r/GUI/AVVideoDecoder.hpp new file mode 100644 index 0000000000..4111e860a2 --- /dev/null +++ b/src/slic3r/GUI/AVVideoDecoder.hpp @@ -0,0 +1,46 @@ +#ifndef AVVIDEODECODER_HPP +#define AVVIDEODECODER_HPP + +#include "Printer/BambuTunnel.h" + +extern "C" { + #include + #include +} +#include +#include +#include +#include + +class wxBitmap; + +class AVVideoDecoder +{ +public: + AVVideoDecoder(); + + ~AVVideoDecoder(); + +public: + int open(Bambu_StreamInfo const &info); + + int decode(Bambu_Sample const &sample); + + int flush(); + + void close(); + + bool toWxImage(wxImage &image, wxSize const &size); + + bool toWxBitmap(wxBitmap &bitmap, wxSize const & size); + +private: + AVCodecContext *codec_ctx_ = nullptr; + AVFrame * frame_ = nullptr; + SwsContext * sws_ctx_ = nullptr; + bool got_frame_ = false; + int width_ { 0 }; // scale result width + std::vector bits_; +}; + +#endif // AVVIDEODECODER_HPP diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index a4f0f06d65..9e1cefbc84 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -3,6 +3,7 @@ #include "libslic3r/Utils.hpp" #include "libslic3r/Color.hpp" +#include "BuildCommit.hpp" #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" @@ -245,7 +246,7 @@ AboutDialog::AboutDialog() vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5)); auto version_string = std::string(SoftFever_VERSION); // _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); - wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", std::string(GIT_COMMIT_HASH)), wxDefaultPosition, wxDefaultSize); + wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", build_commit_label), wxDefaultPosition, wxDefaultSize); credits_string->SetFont(_build_string_font); wxFont version_font = GetFont(); version_font = version_font.Scaled(1.85f); // SetPointSize(20) not works on macOS because it uses a 72 PPI reference diff --git a/src/slic3r/GUI/AboutDialog.hpp b/src/slic3r/GUI/AboutDialog.hpp index 8dc72d15a3..e96c74ba08 100644 --- a/src/slic3r/GUI/AboutDialog.hpp +++ b/src/slic3r/GUI/AboutDialog.hpp @@ -60,7 +60,6 @@ class AboutDialog : public DPIDialog wxHtmlWindow* m_html; wxStaticBitmap* m_logo; int m_copy_rights_btn_id { wxID_ANY }; - int m_copy_version_btn_id { wxID_ANY }; public: AboutDialog(); diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 3e745b0a64..22ffaef034 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -11,6 +11,7 @@ #include "MainFrame.hpp" #include "format.hpp" #include "Widgets/ProgressDialog.hpp" +#include #include "Widgets/RoundedRectangle.hpp" #include "Widgets/StaticBox.hpp" diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index fc3f89fa69..21a3e38080 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -457,7 +457,6 @@ private: ScalableBitmap close_img; wxStaticBitmap* curr_humidity_img; - wxStaticBitmap* m_img; Label* m_staticText;; Label* m_staticText_note; diff --git a/src/slic3r/GUI/AmsMappingPopupUpdate.cpp b/src/slic3r/GUI/AmsMappingPopupUpdate.cpp index 7d8215f55d..3e2853ad1a 100644 --- a/src/slic3r/GUI/AmsMappingPopupUpdate.cpp +++ b/src/slic3r/GUI/AmsMappingPopupUpdate.cpp @@ -406,7 +406,7 @@ void AmsMapingPopup::update_ams_data_multi_machines() int ams_type = 1; int nozzle_id = 0; - if (ams_type >= 1 || ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f + if (ams_type >= 1 && ams_type <= 3) { // 1:ams 2:ams-lite 3:n3f auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "AMS-1", 4); diff --git a/src/slic3r/GUI/BBLTopbar.hpp b/src/slic3r/GUI/BBLTopbar.hpp index 465126944b..2745490d00 100644 --- a/src/slic3r/GUI/BBLTopbar.hpp +++ b/src/slic3r/GUI/BBLTopbar.hpp @@ -93,8 +93,6 @@ private: CenteredTitle* m_title_ctrl { nullptr }; wxString m_titleText; - wxAuiToolBarItem* m_account_item; - wxAuiToolBarItem* m_model_store_item; //wxAuiToolBarItem *m_publish_item; wxAuiToolBarItem* m_undo_item; diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 64c52c6e72..f795b41999 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -848,7 +848,9 @@ void BackgroundSlicingProcess::finalize_gcode() case CopyFileResult::SUCCESS: break; // no error case CopyFileResult::FAIL_COPY_FILE: throw Slic3r::ExportError(GUI::format( - _L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%"), + m_export_path_on_removable_media ? + _L("Copying of the temporary G-code to the output G-code failed. Maybe the SD card is write locked?\nError message: %1%") : + _L("Copying of the temporary G-code to the output G-code failed.\nError message: %1%"), error_message)); break; case CopyFileResult::FAIL_FILES_DIFFERENT: diff --git a/src/slic3r/GUI/BambuPlayer/BambuPlayer.h b/src/slic3r/GUI/BambuPlayer/BambuPlayer.h deleted file mode 100644 index fe5f0d049a..0000000000 --- a/src/slic3r/GUI/BambuPlayer/BambuPlayer.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// BambuPlayer.h -// BambuPlayer -// -// Created by cmguo on 2021/12/6. -// - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface BambuPlayer : NSObject - -+ (void) initialize; - -- (instancetype) initWithDisplayLayer: (AVSampleBufferDisplayLayer*) layer; -- (instancetype) initWithImageView: (NSView*) view; -- (int) open: (char const *) url; -- (NSSize) videoSize; -- (int) play; -- (void) stop; -- (void) close; - -- (void) setLogger: (void (*)(void const * context, int level, char const * msg)) logger withContext: (void const *) context; - -@end - -NS_ASSUME_NONNULL_END diff --git a/src/slic3r/GUI/BaseTransparentDPIFrame.hpp b/src/slic3r/GUI/BaseTransparentDPIFrame.hpp index 35ed51ddfe..7dc83b4d46 100644 --- a/src/slic3r/GUI/BaseTransparentDPIFrame.hpp +++ b/src/slic3r/GUI/BaseTransparentDPIFrame.hpp @@ -5,8 +5,10 @@ #include #include "GUI_App.hpp" #include "GUI_Utils.hpp" +#include class Button; +class Label; class CheckBox; namespace Slic3r { namespace GUI { class CapsuleButton; diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index a4b568e82d..4c6d3c249d 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -468,7 +468,7 @@ PingCodeBindDialog::~PingCodeBindDialog() { m_link_privacy_title->SetFont(Label::Head_13); m_link_privacy_title->SetMaxSize(wxSize(FromDIP(450), -1)); m_link_privacy_title->Wrap(FromDIP(450)); - m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + m_link_privacy_title->Bind(wxEVT_LEFT_DOWN, [](auto& e) { std::string url; std::string country_code = Slic3r::GUI::wxGetApp().app_config->get_country_code(); @@ -893,7 +893,7 @@ void BindMachineDialog::on_show(wxShowEvent &event) } } }) - .on_error([this](std::string body, std::string error, unsigned status) { + .on_error([](std::string body, std::string error, unsigned status) { //BOOST_LOG_TRIVIAL(info) << "load oss picture failed, oss path: " << oss_path << " status:" << status << " error:" << error; }).perform(); } @@ -1099,7 +1099,7 @@ void UnBindMachineDialog::on_show(wxShowEvent &event) } } }) - .on_error([this](std::string body, std::string error, unsigned status) { + .on_error([](std::string body, std::string error, unsigned status) { //BOOST_LOG_TRIVIAL(info) << "load oss picture failed, oss path: " << oss_path << " status:" << status << " error:" << error; }).perform(); diff --git a/src/slic3r/GUI/BindDialog.hpp b/src/slic3r/GUI/BindDialog.hpp index b809bc523b..8d21c1be5e 100644 --- a/src/slic3r/GUI/BindDialog.hpp +++ b/src/slic3r/GUI/BindDialog.hpp @@ -65,18 +65,10 @@ private: wxPanel* request_bind_panel; wxPanel* binding_panel; - wxScrolledWindow* m_sw_bind_failed_info; - Label* m_bind_failed_info; - Label* m_st_txt_error_code{ nullptr }; - Label* m_st_txt_error_desc{ nullptr }; - Label* m_st_txt_extra_info{ nullptr }; - HyperLink* m_link_network_state{ nullptr }; wxString m_result_info; wxString m_result_extra; wxString m_ping_code_wiki; - bool m_show_error_info_state = true; - int m_result_code; std::shared_ptr m_status_bar; public: @@ -110,7 +102,6 @@ private: wxBitmap m_bitmap_show_error_close; wxBitmap m_bitmap_show_error_open; wxScrolledWindow* m_sw_bind_failed_info; - Label* m_bind_failed_info; Label* m_st_txt_error_code{ nullptr }; Label* m_st_txt_error_desc{ nullptr }; Label* m_st_txt_extra_info{ nullptr }; diff --git a/src/slic3r/GUI/BuildCommit.cpp b/src/slic3r/GUI/BuildCommit.cpp new file mode 100644 index 0000000000..adfe66af68 --- /dev/null +++ b/src/slic3r/GUI/BuildCommit.cpp @@ -0,0 +1,9 @@ +#include "BuildCommit.hpp" +#include "git_commit_hash.h" + +namespace Slic3r { namespace GUI { + +const char *const build_commit_hash = GIT_COMMIT_HASH; +const char *const build_commit_label = GIT_COMMIT_HASH GIT_COMMIT_SUFFIX; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/BuildCommit.hpp b/src/slic3r/GUI/BuildCommit.hpp new file mode 100644 index 0000000000..0450e710c9 --- /dev/null +++ b/src/slic3r/GUI/BuildCommit.hpp @@ -0,0 +1,15 @@ +#pragma once + +// Read these rather than including git_commit_hash.h, which changes with every +// commit and rebuilds everything that includes it. + +namespace Slic3r { namespace GUI { + +// The commit alone, safe to use in a commit URL. +extern const char *const build_commit_hash; + +// The same, with "-dirty" when the build had uncommitted changes. Use this +// wherever the build is shown to a person. +extern const char *const build_commit_label; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/DesignCanvas.cpp b/src/slic3r/GUI/CAD/DesignCanvas.cpp new file mode 100644 index 0000000000..8db2afbbc2 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignCanvas.cpp @@ -0,0 +1,1673 @@ +#include "slic3r/GUI/CAD/DesignCanvas.hpp" + +#include "slic3r/GUI/CAD/SketchInlineEditor.hpp" +#include "slic3r/GUI/CAD/DesignInteraction.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/OpenGLManager.hpp" +#include "slic3r/GUI/3DBed.hpp" +#include "slic3r/GUI/Camera.hpp" // N: look down the sketch plane normal +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/MeshUtils.hpp" // ClippingPlane (section view) +#include "libslic3r/Config.hpp" +#include +#include +#include + +#include +#include // wxGetLocalTimeMillis: the right-click vs right-hold budget +#include +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +DesignCanvas::DesignCanvas(wxWindow* parent) + : wxPanel() +{ + if (!Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0)) + return; + + m_canvas_widget = OpenGLManager::create_wxglcanvas(*this); + if (m_canvas_widget == nullptr) + return; + + m_canvas = new GLCanvas3D(m_canvas_widget, m_bed); + m_canvas->set_context(wxGetApp().init_glcontext(*m_canvas_widget)); + m_canvas->allow_multisample(OpenGLManager::can_multisample()); + m_canvas->set_config(wxGetApp().plater()->config()); + m_canvas->set_model(&m_model); + // Nothing to slice here, but GLCanvas3D derefs the process unguarded every frame, so it + // cannot be null. Borrow the plater's, as the editor canvases do. + m_canvas->set_process(&wxGetApp().plater()->background_process()); + m_canvas->set_type(GLCanvas3D::ECanvasType::CanvasView3D); + + // CAD navigation, this canvas only: left-drag sweeps a selection rubber band, so orbit + // moves to middle-drag and pan to right-drag. Design is a different modality from + // Prepare/Preview and every CAD the user already knows maps the mouse this way; the other + // tabs are untouched. + m_canvas->set_cad_navigation(true); + + m_canvas->enable_picking(false); // viewport face/edge picking is custom (TODO) + m_canvas->enable_moving(false); + m_canvas->enable_gizmos(false); + m_canvas->enable_selection(false); // stock volume selection unused; solid highlight is tree-driven + m_canvas->enable_main_toolbar(false); + m_canvas->enable_select_plate_toolbar(false); + m_canvas->enable_assemble_view_toolbar(false); + m_canvas->enable_separator_toolbar(false); + m_canvas->enable_collapse_toolbar(false); + m_canvas->enable_plate_chrome(false); + m_canvas->enable_labels(false); + m_canvas->set_axes_at_bed_center(true); // triad at bed centre = modeling origin + + m_canvas->set_design_sketch_tool(&m_sketch_tool); + m_sketch_tool.on_commit = [this](const SketchProfile& prof, const SketchPlane& pl) { + if (m_on_sketch_commit) m_on_sketch_commit(prof, pl); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); + }; + m_sketch_tool.on_commit_entities = [this](const std::vector& ents, + const std::vector& cons, + const SketchPlane& pl) { + if (m_on_sketch_entities_commit) m_on_sketch_entities_commit(ents, cons, pl); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); + }; + + // Onshape-style in-canvas value editor, floating over the GL canvas. The tool hands + // us a screen pixel (device px) + a commit/cancel pair; we convert to logical client + // px and wrap the callbacks so each one re-solves and re-renders the viewport. + m_inline_editor = std::make_unique(); + // The tool draws it: it owns the frame's ImGui pass and the render scale. Handing it a raw + // pointer rather than the unique_ptr keeps the ownership where it was. + m_sketch_tool.inline_editor = m_inline_editor.get(); + // SCHEDULE a paint, do not render one. request_repaint() renders SYNCHRONOUSLY on software + // GL, and this callback runs from inside DesignSketchTool::render() — so using it here asks + // for a render from within a render. The frames stopped after nine, which is what a + // re-entrancy guard giving up looks like. Refresh() posts a paint event instead: the current + // frame finishes, the event loop runs (which is where ImGui's queued characters are consumed), + // and the next frame starts clean. + // MEASUREMENT: does a typed character reach the GL canvas at all? Everything downstream of + // this point is known good (ImGui reports want_text=1 and our InputText active), so if these + // lines do not appear the character never got past the panel's CHAR_HOOK / the focus chain, + // and no amount of work inside the field will help. Skips always: a pure observer. + if (m_canvas_widget != nullptr && std::getenv("ORCA_CAD_UXTRACE")) { + m_canvas_widget->Bind(wxEVT_CHAR, [](wxKeyEvent& e) { + fprintf(stderr, "[UX] canvas_char key=%d\n", e.GetKeyCode()); + fflush(stderr); + e.Skip(); + }); + } + m_inline_editor->request_frame = [this] { + // BOTH halves, and the dirty flag first: GLCanvas3D's paint handler returns without + // rendering when the canvas is not marked dirty, so a bare Refresh() posts an event that + // draws nothing and the frames still stop. request_repaint() does exactly this pair on + // the hardware path; what it must NOT do here is its software path, which renders + // synchronously — and this callback runs from inside render(). + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(false); + }; + m_sketch_tool.on_inline_edit = [this](wxPoint screen_px, double current, + const std::string& title, + std::function commit, + std::function cancel) { + if (!m_inline_editor) { if (cancel) cancel(); return; } + // The tool hands us canvas device px and the field is now drawn IN the canvas, so this + // is already the coordinate space it wants — no conversion to screen coordinates, and no + // window to place there. + // Freeze the sketch tool while the field is open so a stray click/move on the GL + // canvas can't draw under the field; released on commit or cancel. + m_sketch_tool.set_inline_busy(true); + // AND PUT THE KEYBOARD ON THE CANVAS. The field is drawn by ImGui, and ImGui is fed from + // GLCanvas3D's own key handler, so a key only reaches it if the canvas is the focused + // widget. That is a focus move WITHIN one window — the toolkit's business, not the window + // manager's, which is the whole point of not being a window any more — but it still has + // to be asked for: after a toolbar click or a tree selection the focus is elsewhere in + // the panel, and the field would sit there taking nothing. + if (m_canvas_widget) m_canvas_widget->SetFocus(); + m_inline_editor->open(screen_px, current, title, + [this, commit](double v) { + m_sketch_tool.set_inline_busy(false); + if (commit) commit(v); + request_repaint(); + }, + [this, cancel]() { + m_sketch_tool.set_inline_busy(false); + if (cancel) cancel(); + request_repaint(); + }); + }; + // Let the tool force-close the field (keep-as-drawn) — polyline right-click/double-click + // ends the chain even while a per-segment value field is open. + m_sketch_tool.on_inline_dismiss = [this]() { + if (m_inline_editor) m_inline_editor->cancel(); + }; + m_sketch_tool.on_inline_commit = [this]() { + if (m_inline_editor) m_inline_editor->commit(); + }; + + // Bottom-right viewport HUD: a borderless, non-focusable float label showing the active + // tool's current values. Top-level (a child widget is hidden by the GL surface, same as + // the inline editor). Fed every frame by the tool's on_readout; empty text hides it. + // NON-FOCUSABLE IS THE LOAD-BEARING WORD, and a wxFrame is not: see the header. The chip + // outlives the gesture that drew it, and while it held the X input focus every sketch + // shortcut was swallowed until the user clicked the canvas. Same window class as the status + // chip below for the same reason. Do not "simplify" it back to a wxFrame. + { + wxWindow* top = wxGetTopLevelParent(m_canvas_widget); + m_hud = new wxPopupWindow(top, wxBORDER_NONE); + m_hud->SetBackgroundColour(wxColour(28, 30, 34)); + m_hud_label = new wxStaticText(m_hud, wxID_ANY, wxEmptyString); + m_hud_label->SetForegroundColour(wxColour(0x46, 0xE0, 0xC8)); // teal, reads on dark bed + wxFont f = m_hud_label->GetFont(); f.MakeBold(); m_hud_label->SetFont(f); + auto* hs = new wxBoxSizer(wxHORIZONTAL); + hs->Add(m_hud_label, 0, wxALL, 6); + m_hud->SetSizerAndFit(hs); + m_hud->Hide(); + } + m_sketch_tool.on_readout = [this](const std::string& s) { set_readout(s); }; + + // Bottom-LEFT twin, carrying the status line. Top-level for the same reason as the readout + // (a child widget is hidden by the GL surface) but a wxPopupWindow rather than a wxFrame, + // because a popup cannot take keyboard focus. The readout gets away with a frame only + // because it appears mid-gesture and the next input is the mouse; this one is up + // permanently and is re-raised on every status change. As a frame it took the WM's focus + // each time and the canvas stopped receiving keys at all — every sketch shortcut silently + // dead, which reads as a broken tool. Do not "simplify" it back to a wxFrame. + // Its colour is set per message — the panel decides whether a line is neutral or an error. + { + wxWindow* top = wxGetTopLevelParent(m_canvas_widget); + m_status_hud = new wxPopupWindow(top, wxBORDER_NONE); + m_status_hud->SetBackgroundColour(wxColour(28, 30, 34)); + m_status_hud_label = new wxStaticText(m_status_hud, wxID_ANY, wxEmptyString); + auto* ss = new wxBoxSizer(wxHORIZONTAL); + // The line never wraps — there is a whole window's width down here — so the chip is + // ONE LINE tall. Spacers rather than a wxALL border because the two axes want + // different numbers: roomy at the sides so it reads as a label, and just enough top + // and bottom to clear the descenders. Zero vertical clips the glyphs; 6 (what the + // readout chip uses) makes it look like a two-line box. + ss->AddSpacer(10); + ss->Add(m_status_hud_label, 0, wxTOP | wxBOTTOM, 3); + ss->AddSpacer(10); + m_status_hud->SetSizerAndFit(ss); + m_status_hud->Hide(); + } + // A floating frame does not follow its parent, so the anchor has to be recomputed whenever + // the canvas changes size (that bind is below bind_event_handlers(), for the reason given + // there). The readout HUD gets away without this because it is transient; the status line is + // on screen almost permanently and would visibly detach. + // ...and it does not follow the WINDOW either. A popup is override-redirect: the window + // manager does not own it, so minimising the app leaves the chip sitting on the bare desktop + // (seen on the rig: whole screen black, chip still there), and it stacks above other + // applications rather than behind them. IsShownOnScreen does not catch this — an iconised + // frame still counts as shown — so the frame has to say so itself. Deactivating the app is + // the same case one step weaker: the chip belongs to a viewport the user is no longer + // looking at. Showing it back is safe because a popup cannot take focus, so neither event + // can be re-triggered by our own Show(). + // Members rather than lambdas so unbind_canvas_event_handlers() can Unbind them: these sit on + // a frame that OUTLIVES this canvas, and a lambda cannot be unbound. + if (wxWindow* top = wxGetTopLevelParent(m_canvas_widget)) { + top->Bind(wxEVT_ICONIZE, &DesignCanvas::on_frame_iconize, this); + top->Bind(wxEVT_ACTIVATE, &DesignCanvas::on_frame_activate, this); + // The anchor is an ABSOLUTE SCREEN position (ClientToScreen below), so moving the window + // moves the canvas out from under a chip that stays where it was. Dragging the frame by + // its title bar left the chip stranded mid-viewport until the next size, status or tab + // change happened to re-place it. Nothing on the canvas fires for a move that does not + // also resize, so it has to come from the frame. + top->Bind(wxEVT_MOVE, &DesignCanvas::on_status_hud_reanchor, this); + } + + refresh_bed(); + + // The view this canvas opens on. Built lazily, on the way into the Design tab, so this + // is the view the user is looking at right now. + m_parked_camera = wxGetApp().plater()->get_camera(); + + // Before any of this class's own Binds below: wx calls dynamically bound handlers in + // reverse order of binding, and GLCanvas3D swallows several events without skipping them — + // wxEVT_RIGHT_UP and wxEVT_ENTER_WINDOW in on_mouse, and wxEVT_SIZE in on_size, which is + // just `m_dirty = true;`. For those, whatever is bound LAST is the only handler that runs. + // The context menu, the focus-follows-mouse and the status-chip re-anchor all depend on + // running first, which is only true while this call stays ahead of them. + m_canvas->bind_event_handlers(); + + // The status-chip re-anchor promised above, bound AFTER the call so it runs first — ahead of + // it the handler never ran at all, leaving a stale anchor and wrap width after any resize + // that did not also move the frame or change the text. Its e.Skip() is load-bearing the + // other way: it falls through to on_size, which is what still marks the canvas dirty. + m_canvas_widget->Bind(wxEVT_SIZE, &DesignCanvas::on_status_hud_reanchor, this); + + // The Design GL canvas only receives key events (Esc to exit/enter Select, Ctrl+Z undo) + // while it holds keyboard focus. Clicking a side-panel button steals focus, after which + // Esc/Ctrl+Z silently do nothing until the viewport is clicked again. Restore focus + // whenever the pointer enters the viewport (focus-follows-mouse, standard CAD behaviour). + m_canvas_widget->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent& e) { + // …but NOT while an inline value field is open: the field floats over the canvas, so + // the smallest pointer jiggle re-enters the viewport and would yank focus off the + // field (the "no cursor focus on the number, click to focus" bug). + if (m_canvas_widget && !m_sketch_tool.inline_busy()) m_canvas_widget->SetFocus(); + e.Skip(); + }); + + + auto* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(m_canvas_widget, 1, wxEXPAND); + SetSizer(sizer); + SetMinSize(wxSize(300, 300)); +} + +// Both are idempotent, and neither destroys anything: the destructor still owns that. +void DesignCanvas::unbind_canvas_event_handlers() +{ + if (wxWindow* top = wxGetTopLevelParent(m_canvas_widget)) { + top->Unbind(wxEVT_ICONIZE, &DesignCanvas::on_frame_iconize, this); + top->Unbind(wxEVT_ACTIVATE, &DesignCanvas::on_frame_activate, this); + top->Unbind(wxEVT_MOVE, &DesignCanvas::on_status_hud_reanchor, this); + } + // Before the popups go down, or a resize still in flight re-places and re-shows the chip. + if (m_canvas_widget) + m_canvas_widget->Unbind(wxEVT_SIZE, &DesignCanvas::on_status_hud_reanchor, this); + // A popup is override-redirect: it does not go down with the frame, so one left showing sits + // on the bare desktop for however long the teardown takes. + show_status_hud(false); + if (m_hud) m_hud->Hide(); + if (m_canvas) m_canvas->unbind_event_handlers(); +} + +void DesignCanvas::reset_canvas_volumes() +{ + if (m_canvas) m_canvas->reset_volumes(); +} + +DesignCanvas::~DesignCanvas() +{ + if (m_hud) m_hud->Destroy(); + delete m_canvas; + delete m_canvas_widget; +} + +// Distinct per-body colours (Onshape-style). Body 0 keeps the familiar gold; the rest +// cycle through a small saturated palette so coexisting solids read as separate parts. +static ColorRGBA body_palette(int body_idx) +{ + static const ColorRGBA kPalette[] = { + ColorRGBA(0.86f, 0.66f, 0.20f, 1.0f), // gold + ColorRGBA(0.30f, 0.62f, 0.90f, 1.0f), // blue + ColorRGBA(0.45f, 0.78f, 0.42f, 1.0f), // green + ColorRGBA(0.86f, 0.45f, 0.40f, 1.0f), // coral + ColorRGBA(0.70f, 0.52f, 0.86f, 1.0f), // violet + ColorRGBA(0.90f, 0.70f, 0.35f, 1.0f), // amber + }; + const int n = int(sizeof(kPalette) / sizeof(kPalette[0])); + return kPalette[((body_idx % n) + n) % n]; +} + +void DesignCanvas::request_repaint() +{ + if (!m_canvas) + return; + m_canvas->set_as_dirty(); + + // NOTHING may touch GL before the canvas has initialised it. The backend probe below calls + // OpenGLManager::get_gl_info().get_renderer(), which runs GLInfo::detect() -> glGetString + // with no context current and, before init_opengl(), no loaded function pointers — a + // segfault at startup with no window and nothing in the log. Anything that asks for a + // repaint while the panel is still being built lands here, so the guard belongs at the top + // rather than around the render() call: the crash was in the PROBE, not in the paint. + if (!m_canvas->is_initialized()) { + if (m_canvas_widget) + m_canvas_widget->Refresh(); // the first real paint draws the current state anyway + return; + } + + if (m_sw_gl < 0) { + // Cache the backend once it's known; the renderer string is empty until + // GL is initialised, so stay "unknown" and take the safe direct path till then. + const std::string& r = OpenGLManager::get_gl_info().get_renderer(); + if (!r.empty()) + m_sw_gl = (boost::icontains(r, "llvmpipe") || boost::icontains(r, "softpipe") || + boost::icontains(r, "swrast") || boost::icontains(r, "software")) ? 1 : 0; + } + + if (m_sw_gl == 0) { + if (m_canvas_widget) + m_canvas_widget->Refresh(); // hardware GL: paint cycle drives render() + } else { + m_canvas->render(); // software GL or backend not yet known + } +} + +void DesignCanvas::enter_viewport() +{ + if (!m_camera_swapped) swap_camera(); +} + +void DesignCanvas::leave_viewport() +{ + if (m_camera_swapped) swap_camera(); +} + +void DesignCanvas::swap_camera() +{ + Plater* plater = wxGetApp().plater(); + if (plater == nullptr) return; + std::swap(plater->get_camera(), m_parked_camera); + m_camera_swapped = !m_camera_swapped; +} + +void DesignCanvas::force_repaint() +{ + if (m_canvas == nullptr || m_canvas_widget == nullptr) + return; + + CallAfter([this]() { + if (m_canvas == nullptr || m_canvas_widget == nullptr) + return; + m_canvas->set_as_dirty(); + m_canvas_widget->Refresh(); + m_canvas_widget->Update(); // synchronous: an expose may never come after a page show + }); +} + +void DesignCanvas::repaint_now() +{ + if (m_canvas == nullptr || m_canvas_widget == nullptr) + return; + request_repaint(); // mark dirty + Refresh (hardware GL) or render (software GL) + m_canvas_widget->Update(); // service the pending paint immediately (a modal popup owns the loop) +} + +void DesignCanvas::reload(bool keep_view) +{ + m_canvas->reset_volumes(); + + for (int i = 0; i < (int)m_model.objects.size(); ++i) + m_canvas->load_object(m_model, i); + + const ColorRGBA sel_gold = design_selection_color(); // same colour as every other selection + const ColorRGBA ghost(0.26f, 0.66f, 1.0f, 0.45f); + + const auto& volumes = m_canvas->get_volumes().volumes; + for (auto* v : volumes) { + int obj_idx = v->object_idx(); + if (obj_idx == 0) { + // Object 0 holds one volume per body — colour each by its body index so + // multiple coexisting solids are visually distinct (Onshape per-part colour). + const int b = v->volume_idx(); + bool hidden = (b >= 0 && b < int(m_body_visible.size())) && !m_body_visible[b]; + // Preview-only mode (fillet/chamfer/draft, once a valid target is picked): hide + // every base body so only the result ghost is on screen until Confirm. + if (m_body_hidden) hidden = true; + v->is_active = !hidden; // per-body visibility toggle + if (!hidden) { + // An EXPLICIT colour outranks the selection tint. m_body_selected is a + // document-wide flag raised whenever a non-Sketch feature row is selected — + // the normal resting state after any modelling operation — so painting every + // body gold on it made the Color tool look broken: the override was written, + // carried across recompute and read back correctly, and then overpainted here + // every single frame. A body the user deliberately coloured keeps its colour; + // the rest still tint, which is all the tint was ever for. + const bool overridden = m_color_bodies != nullptr && b >= 0 + && b < int(m_color_bodies->size()) + && (*m_color_bodies)[b].has_color; + ColorRGBA c = (m_body_selected && !overridden) ? sel_gold : body_color(b); + if (b == m_hl_body_target) c = ColorRGBA(0.30f, 0.90f, 0.70f, 1.0f); // target = teal-green + else if (b == m_hl_body_tool) c = ColorRGBA(1.00f, 0.55f, 0.15f, 1.0f); // tool = orange + if (m_body_translucent) c.a(0.30f); + else if (m_xray_focus >= 0 && b != m_xray_focus) c.a(0.25f); + v->set_color(c); + } + } else if (obj_idx == 1) { + // The ghost is normally a faint blue overlay on the visible body. In preview-only + // mode it IS the result (base bodies hidden), so render it opaque so it reads as a + // finished solid rather than a see-through hint. + v->set_color(m_body_hidden ? ColorRGBA(0.40f, 0.82f, 1.0f, 1.0f) : ghost); + } + } + + if (!keep_view) { + if (m_first_frame && !m_model.objects.empty()) { + m_canvas->select_view("iso"); + m_canvas->zoom_to_volumes(); + m_first_frame = false; + } + } + + m_canvas->set_as_dirty(); + if (m_canvas_widget) + m_canvas_widget->Refresh(); +} + +void DesignCanvas::set_mesh(const TriangleMesh& mesh) +{ + if (m_model.objects.empty()) { + auto* obj = m_model.add_object(); + obj->add_volume(mesh); + obj->add_instance(); + } else { + ModelObject* obj = m_model.objects.front(); + obj->clear_volumes(); + obj->add_volume(mesh); + if (obj->instances.empty()) + obj->add_instance(); + } + + reload(!m_first_frame); +} + +void DesignCanvas::set_bodies(const std::vector& body_meshes, + const std::vector& visible) +{ + // Object 0 carries one GLVolume per body so reload() can colour each distinctly. + // Falls back to a single-volume object when there's only one body (identical look + // to the old set_mesh path). Picking still uses the combined mesh via set_solid_pick. + m_body_visible = visible; // empty => all visible; reload() reads this per volume + if (body_meshes.empty()) { clear_mesh(); return; } + + ModelObject* obj = m_model.objects.empty() ? m_model.add_object() + : m_model.objects.front(); + obj->clear_volumes(); + for (const TriangleMesh& m : body_meshes) + obj->add_volume(m); + if (obj->instances.empty()) + obj->add_instance(); + + reload(!m_first_frame); +} + +void DesignCanvas::clear_mesh() +{ + if (!m_model.objects.empty()) { + m_model.delete_object((size_t)0); + reload(true); + } +} + +void DesignCanvas::set_preview_mesh(const TriangleMesh& mesh) +{ + // Remove existing ghost (object 1) if present + if (m_model.objects.size() > 1) + m_model.delete_object((size_t)1); + + auto* obj = m_model.add_object(); + obj->add_volume(mesh); + obj->add_instance(); + + reload(true); +} + +void DesignCanvas::clear_preview() +{ + if (m_model.objects.size() > 1) { + m_model.delete_object((size_t)1); + reload(true); + } +} + +void DesignCanvas::fit_view() +{ + if (m_canvas && !m_model.objects.empty()) { + m_canvas->zoom_to_volumes(); + m_canvas->set_as_dirty(); + if (m_canvas_widget) + m_canvas_widget->Refresh(); + } +} + +void DesignCanvas::set_view(const std::string& view_name) +{ + if (m_canvas) { + m_canvas->select_view(view_name); + m_canvas->zoom_to_volumes(); + m_canvas->set_as_dirty(); + if (m_canvas_widget) + m_canvas_widget->Refresh(); + } +} + +void DesignCanvas::begin_sketch(const SketchPlane& plane, DesignSketchTool::Mode mode) +{ + m_sketch_tool.begin(plane, mode); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +void DesignCanvas::set_sketch_plane(const SketchPlane& plane) +{ + m_sketch_tool.set_plane(plane); // keeps the 2D entities; only the carrier plane changes + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +void DesignCanvas::edit_sketch(const std::vector& entities, + const std::vector& constraints, + const SketchPlane& plane) +{ + m_sketch_tool.begin_edit(entities, constraints, plane); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +void DesignCanvas::set_sketch_tool(DesignSketchTool::Mode mode) +{ + m_sketch_tool.set_tool(mode); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +void DesignCanvas::set_sketch_construction(bool c) +{ + m_sketch_tool.set_construction(c); +} + +bool DesignCanvas::edit_sketch_selection_value() +{ + const bool ok = m_sketch_tool.open_selection_dimension_editor(); + if (ok) request_repaint(); + return ok; +} + +int DesignCanvas::toggle_sketch_construction_selection() +{ + const int n = m_sketch_tool.toggle_selection_construction(); + if (n > 0) request_repaint(); + return n; +} + +bool DesignCanvas::add_sketch_regions( + const std::vector>>& regions) +{ + const bool ok = m_sketch_tool.add_imported_regions(regions); + if (ok) request_repaint(); + return ok; +} + +void DesignCanvas::set_sketch_polygon_sides(int n) +{ + m_sketch_tool.set_polygon_sides(n); +} + +void DesignCanvas::set_sketch_polygon_circumscribed(bool c) +{ + m_sketch_tool.set_polygon_circumscribed(c); +} + +void DesignCanvas::finish_sketch() +{ + m_sketch_tool.finish(); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +// Sync the Design bed to the CURRENT printer bed. Done on every tab activation, not just at +// construction: the panel is built early (before the active printer profile is fully applied), +// so a one-shot read picked up the 200x200 default while the real bed (e.g. 270x270) only +// loaded later — leaving the PartPlate grid spilling past the smaller bed quad. +void DesignCanvas::refresh_bed() +{ + const DynamicPrintConfig* config = wxGetApp().plater()->config(); + if (!config) return; + const auto* bed_shape_opt = config->opt("printable_area"); + if (!bed_shape_opt) return; + double printable_height = 100.0; + const auto* ph_opt = config->opt("printable_height"); + if (ph_opt) printable_height = ph_opt->value; + m_bed.set_shape(bed_shape_opt->values, printable_height, {}, {}, "", false); // mainline added extruder_areas/heights params +} + +void DesignCanvas::set_show_bed(bool b) +{ + if (!m_canvas) return; + if (m_canvas->get_show_bed() == b) return; // no repaint for a no-op toggle + m_canvas->set_show_bed(b); + request_repaint(); +} + +bool DesignCanvas::is_sketching() const { return m_sketch_tool.is_active(); } + +void DesignCanvas::cancel_sketch() +{ + m_sketch_tool.cancel(); + if (m_canvas) m_canvas->set_as_dirty(); + if (m_canvas_widget) m_canvas_widget->Refresh(); +} + +void DesignCanvas::set_on_sketch_commit(std::function cb) +{ + m_on_sketch_commit = std::move(cb); +} + +void DesignCanvas::set_on_sketch_entities_commit( + std::function&, + const std::vector&, + const SketchPlane&)> cb) +{ + m_on_sketch_entities_commit = std::move(cb); +} + +void DesignCanvas::set_on_segment_drawn(std::function cb) +{ + m_sketch_tool.on_segment_drawn = std::move(cb); +} + +void DesignCanvas::set_on_cursor_metrics(std::function cb) +{ + m_sketch_tool.on_cursor_metrics = std::move(cb); +} + +void DesignCanvas::set_on_solve_state(std::function cb) +{ + m_sketch_tool.on_solve_state = std::move(cb); +} + +void DesignCanvas::set_on_sketch_step(std::function cb) +{ + m_sketch_tool.on_step_changed = std::move(cb); +} + +void DesignCanvas::apply_segment_length(double len) +{ + m_sketch_tool.apply_segment_length(len); + request_repaint(); +} + +void DesignCanvas::keep_segment_as_drawn() +{ + m_sketch_tool.keep_segment_as_drawn(); + request_repaint(); +} + +void DesignCanvas::set_on_sketch_selection_changed(std::function cb) +{ + m_sketch_tool.on_selection_changed = std::move(cb); +} + +void DesignCanvas::set_on_sketch_face_selected(std::function cb) +{ + m_sketch_tool.on_face_selected = std::move(cb); +} + +void DesignCanvas::set_on_display_sketch_selected(std::function cb) +{ + m_sketch_tool.on_display_sketch_selected = std::move(cb); +} + +void DesignCanvas::set_on_display_sketch_activated(std::function cb) +{ + m_sketch_tool.on_display_sketch_activated = std::move(cb); +} + +std::vector DesignCanvas::selected_loop_entities() const +{ + return m_sketch_tool.selected_loop_entities(); +} + +std::vector> DesignCanvas::region_entity_indices(const std::vector& ents) const +{ + return m_sketch_tool.region_entity_indices(ents); +} + +std::vector> DesignCanvas::region_entity_indices_with_holes(const std::vector& ents) const +{ + return m_sketch_tool.region_entity_indices_with_holes(ents); +} + +void DesignCanvas::clear_loop_pick() +{ + m_sketch_tool.clear_display_pick(); +} + +void DesignCanvas::set_loop_pick(int feature, int region) +{ + m_sketch_tool.set_display_pick(feature, region); + request_repaint(); +} + +void DesignCanvas::set_escalate_on_repick(bool on) +{ + m_sketch_tool.set_escalate_on_repick(on); +} + +void DesignCanvas::set_solid_pick(const std::vector* bodies, const TriangleMesh* mesh, + const std::vector* tri_face, const std::vector* tri_body, + const std::vector* visible, + const std::vector* xform) +{ + m_color_bodies = bodies; // stable address (m_doc.bodies); reload() reads colour overrides + m_sketch_tool.set_solid_pick(bodies, mesh, tri_face, tri_body, visible, xform); +} + +// Effective display colour for a body: per-body override (Color tool) when set, else the +// auto body-index palette. body_palette() is the file-static helper defined above reload(). +ColorRGBA DesignCanvas::body_color(int body) const +{ + if (m_color_bodies != nullptr && body >= 0 && body < int(m_color_bodies->size()) + && (*m_color_bodies)[body].has_color) + return (*m_color_bodies)[body].color; + return body_palette(body); +} + +void DesignCanvas::begin_move_body(int body, const Vec3d& pivot, const Transform3d& base_xform, + double body_radius) +{ + m_sketch_tool.set_move_gizmo(body, pivot, base_xform, body_radius); + request_repaint(); +} + +void DesignCanvas::clear_move_gizmo() +{ + m_sketch_tool.clear_move_gizmo(); + request_repaint(); +} + +bool DesignCanvas::moving_body() const { return m_sketch_tool.moving_body(); } + +void DesignCanvas::set_on_body_move_changed(std::function cb) +{ + m_sketch_tool.on_body_move_changed = std::move(cb); +} + +bool DesignCanvas::begin_fillet_gizmo(const Vec3d& body_centroid, double radius) +{ + const bool ok = m_sketch_tool.set_fillet_gizmo(body_centroid, radius); + request_repaint(); + return ok; +} + +void DesignCanvas::clear_fillet_gizmo() +{ + m_sketch_tool.clear_fillet_gizmo(); + request_repaint(); +} + +bool DesignCanvas::filleting() const { return m_sketch_tool.filleting(); } + +void DesignCanvas::set_on_fillet_radius_changed(std::function cb) +{ + m_sketch_tool.on_fillet_radius_changed = std::move(cb); +} + +void DesignCanvas::begin_hole_gizmo(const SketchPlane& plane, double x, double y, + double diameter, double depth, bool through) +{ + m_sketch_tool.set_hole_gizmo(plane, x, y, diameter, depth, through); + request_repaint(); +} + +void DesignCanvas::set_hole_face_bounds(bool has, double umin, double umax, double vmin, double vmax) +{ + m_sketch_tool.set_hole_face_bounds(has, umin, umax, vmin, vmax); +} + +void DesignCanvas::clear_hole_gizmo() +{ + m_sketch_tool.clear_hole_gizmo(); + request_repaint(); +} + +bool DesignCanvas::holing() const { return m_sketch_tool.holing(); } + +void DesignCanvas::set_on_hole_changed(std::function cb) +{ + m_sketch_tool.on_hole_changed = std::move(cb); +} + +void DesignCanvas::begin_thread_gizmo(const SketchPlane& plane, double x, double y, + double radius, double height) +{ + m_sketch_tool.set_thread_gizmo(plane, x, y, radius, height); + request_repaint(); +} + +void DesignCanvas::clear_thread_gizmo() +{ + m_sketch_tool.clear_thread_gizmo(); + request_repaint(); +} + +bool DesignCanvas::threading() const { return m_sketch_tool.threading(); } + +void DesignCanvas::set_on_thread_changed(std::function cb) +{ + m_sketch_tool.on_thread_changed = std::move(cb); +} + +void DesignCanvas::begin_shell_gizmo(const Vec3d& face_centroid, const Vec3d& inward_dir, + double thickness) +{ + m_sketch_tool.set_shell_gizmo(face_centroid, inward_dir, thickness); + request_repaint(); +} + +void DesignCanvas::clear_shell_gizmo() +{ + m_sketch_tool.clear_shell_gizmo(); + request_repaint(); +} + +bool DesignCanvas::shelling() const { return m_sketch_tool.shelling(); } + +void DesignCanvas::set_on_shell_thickness_changed(std::function cb) +{ + m_sketch_tool.on_shell_thickness_changed = std::move(cb); +} + +void DesignCanvas::begin_revolve_gizmo(const SketchPlane& plane, const Vec2d& centroid, + int axis_sel, double angle, bool flip) +{ + m_sketch_tool.set_revolve_gizmo(plane, centroid, axis_sel, angle, flip); + request_repaint(); +} + +void DesignCanvas::clear_revolve_gizmo() +{ + m_sketch_tool.clear_revolve_gizmo(); + request_repaint(); +} + +bool DesignCanvas::revolving() const { return m_sketch_tool.revolving(); } + +void DesignCanvas::set_on_revolve_angle_changed(std::function cb) +{ + m_sketch_tool.on_revolve_angle_changed = std::move(cb); +} + +void DesignCanvas::set_draft_gizmo(const Vec3d& face_centroid, const Vec3d& face_normal, double angle) +{ + m_sketch_tool.set_draft_gizmo(face_centroid, face_normal, angle); + request_repaint(); +} + +void DesignCanvas::clear_draft_gizmo() +{ + m_sketch_tool.clear_draft_gizmo(); + request_repaint(); +} + +bool DesignCanvas::drafting() const { return m_sketch_tool.drafting(); } + +void DesignCanvas::set_on_draft_angle_changed(std::function cb) +{ + m_sketch_tool.set_on_draft_angle_changed(std::move(cb)); +} + +void DesignCanvas::set_cut_gizmo(const SketchPlane& plane, double offset, const Vec3d& body_center, double half_extent) +{ + m_sketch_tool.set_cut_gizmo(plane, offset, body_center, half_extent); + request_repaint(); +} + +void DesignCanvas::clear_cut_gizmo() +{ + m_sketch_tool.clear_cut_gizmo(); + request_repaint(); +} + +bool DesignCanvas::cutting() const { return m_sketch_tool.cutting(); } + +void DesignCanvas::set_on_cut_offset_changed(std::function cb) +{ + m_sketch_tool.set_on_cut_offset_changed(std::move(cb)); +} + +void DesignCanvas::begin_pattern_gizmo(const SketchPlane& plane, const Vec3d& body_centroid, + bool circular, int count, int dir, double spacing, double angle) +{ + m_sketch_tool.set_pattern_gizmo(plane, body_centroid, circular, count, dir, spacing, angle); + request_repaint(); +} + +void DesignCanvas::clear_pattern_gizmo() +{ + m_sketch_tool.clear_pattern_gizmo(); + request_repaint(); +} + +bool DesignCanvas::patterning() const { return m_sketch_tool.patterning(); } + +void DesignCanvas::set_on_pattern_changed(std::function cb) +{ + m_sketch_tool.on_pattern_changed = std::move(cb); +} + +void DesignCanvas::set_on_solid_selection_changed(std::function cb) +{ + m_sketch_tool.on_solid_selection_changed = std::move(cb); +} + +void DesignCanvas::set_on_place_on_face(std::function cb) +{ + m_sketch_tool.on_place_on_face = std::move(cb); +} + +void DesignCanvas::select_body(int body) +{ + m_sketch_tool.select_body(body); + request_repaint(); +} + +void DesignCanvas::set_extrude_gizmo(const SketchPlane& plane, const Vec2d& centroid, + double depth, double depth2, bool two_sided, bool flip) +{ + m_sketch_tool.set_extrude_gizmo(plane, centroid, depth, depth2, two_sided, flip); + request_repaint(); +} + +void DesignCanvas::clear_extrude_gizmo() +{ + m_sketch_tool.clear_extrude_gizmo(); + request_repaint(); +} + +void DesignCanvas::set_on_extrude_depth_changed(std::function cb) +{ + m_sketch_tool.on_extrude_depth_changed = std::move(cb); +} + +void DesignCanvas::set_datum_gizmo(const SketchPlane& plane, double usize, double vsize, + const Vec3d& base_origin, const Vec3d& base_normal, + double offset, bool offset_on) +{ + m_sketch_tool.set_datum_gizmo(plane, usize, vsize, base_origin, base_normal, offset, offset_on); + request_repaint(); +} + +void DesignCanvas::clear_datum_gizmo() +{ + m_sketch_tool.clear_datum_gizmo(); + request_repaint(); +} + +void DesignCanvas::set_on_datum_size_changed(std::function cb) +{ + m_sketch_tool.on_datum_size_changed = std::move(cb); +} + +void DesignCanvas::set_on_datum_offset_changed(std::function cb) +{ + m_sketch_tool.on_datum_offset_changed = std::move(cb); +} + +void DesignCanvas::set_helix_gizmo(const SketchPlane& plane, double radius, double pitch, + double height, double taper, bool left_handed) +{ + m_sketch_tool.set_helix_gizmo(plane, radius, pitch, height, taper, left_handed); + request_repaint(); +} + +void DesignCanvas::clear_helix_gizmo() +{ + m_sketch_tool.clear_helix_gizmo(); + request_repaint(); +} + +void DesignCanvas::set_on_helix_changed(std::function cb) +{ + m_sketch_tool.on_helix_changed = std::move(cb); +} + +void DesignCanvas::set_rib_gizmo(const SketchPlane& plane, const Vec2d& p0, const Vec2d& p1, + double thickness) +{ + m_sketch_tool.set_rib_gizmo(plane, p0, p1, thickness); + request_repaint(); +} + +void DesignCanvas::clear_rib_gizmo() +{ + m_sketch_tool.clear_rib_gizmo(); + request_repaint(); +} + +void DesignCanvas::set_on_rib_thickness_changed(std::function cb) +{ + m_sketch_tool.on_rib_thickness_changed = std::move(cb); +} + +void DesignCanvas::set_base_pick(std::vector planes, std::vector bases, + std::vector labels) +{ + m_sketch_tool.set_base_pick(std::move(planes), std::move(bases), std::move(labels)); + request_repaint(); +} + +void DesignCanvas::clear_base_pick() +{ + m_sketch_tool.clear_base_pick(); + request_repaint(); +} + +void DesignCanvas::set_on_datum_base_picked(std::function cb) +{ + m_sketch_tool.on_datum_base_picked = std::move(cb); +} + +void DesignCanvas::set_on_sketch_exit(std::function cb) +{ + m_sketch_tool.on_exit = std::move(cb); +} + +void DesignCanvas::set_on_sketch_exit_refused(std::function cb) +{ + m_sketch_tool.on_exit_refused = std::move(cb); +} + +void DesignCanvas::set_on_move_exit(std::function cb) +{ + m_sketch_tool.on_move_exit = std::move(cb); +} + +void DesignCanvas::set_on_context_menu(std::function cb) +{ + m_on_context_menu = std::move(cb); + if (!m_canvas_widget || m_ctx_bound) + return; + m_ctx_bound = true; + // Bound AFTER GLCanvas3D's own handlers, so this runs first and can consume the event. + // It only consumes when it actually opens the offer; every other right-click still falls + // through to the polyline-chain end and the move gizmo, which were there first. + // Right-drag pans. Without remembering where the press landed, every pan ended by popping + // the offer over wherever the camera stopped — the menu appearing as the reward for moving + // the view. The offer is the release of a STATIONARY right-click, at the same 8 px budget + // the left-click pick uses. + m_canvas_widget->Bind(wxEVT_RIGHT_DOWN, [this](wxMouseEvent& e) { + m_ctx_press = e.GetPosition(); + m_ctx_press_ms = wxGetLocalTimeMillis().GetValue(); + e.Skip(); // the canvas still needs the press to seed the orbit + }); + m_canvas_widget->Bind(wxEVT_RIGHT_UP, [this](wxMouseEvent& e) { + const wxPoint d = e.GetPosition() - m_ctx_press; + const long long dt = wxGetLocalTimeMillis().GetValue() - m_ctx_press_ms; + // Always read-and-clear, even when another guard already rules the offer out, or a + // terminator recorded under one condition would still be pending under the next. + const bool terminated = m_sketch_tool.take_right_consumed(); + // Click, or navigation? Both budgets must hold: a press that travelled orbited, and a + // press that was HELD was aiming to orbit even if the hand never quite moved. Two + // independent budgets because the two failure modes are independent — the drift one + // alone still popped a menu at the end of a slow, careful orbit. + const bool is_click = std::max(std::abs(d.x), std::abs(d.y)) <= kCadRightClickDriftPx + && dt <= kCadRightClickMs; + if (m_on_context_menu && !terminated && !inline_busy() && is_click) { + // The menu belongs to what you POINTED AT — and pointing happened at the PRESS, not + // at the release, so the raycast uses the press position. Within a 3 px budget the + // two are the same pixel in practice; using the press is what makes that a + // guarantee rather than a coincidence. Pick first, so a right-click on a line offers + // that line's verbs instead of the empty-selection vocabulary. Selecting an entity + // that is already selected is a no-op, so a multi-entity pick survives a + // right-click on one of its members. + if (m_canvas && m_sketch_tool.select_at_screen(*m_canvas, m_ctx_press.x, m_ctx_press.y)) + request_repaint(); + m_on_context_menu(m_canvas_widget->ClientToScreen(m_ctx_press)); + return; // consumed + } + e.Skip(); + }); +} + +void DesignCanvas::set_on_undo_redo(std::function cb) +{ + m_sketch_tool.on_undo_redo = std::move(cb); +} + +void DesignCanvas::set_display_sketches(std::vector ds) +{ + m_sketch_tool.set_display_sketches(std::move(ds)); + // Overlay changed programmatically (no mouse event) — force a repaint. + request_repaint(); +} + +void DesignCanvas::set_datum_planes(std::vector planes, std::vector sizes) +{ + m_sketch_tool.set_datum_planes(std::move(planes), std::move(sizes)); + request_repaint(); +} + +void DesignCanvas::set_mate_connectors(std::vector g) +{ + m_sketch_tool.set_mate_connectors(std::move(g)); + request_repaint(); +} + +void DesignCanvas::set_mate_links(std::vector> l) +{ + m_sketch_tool.set_mate_links(std::move(l)); + request_repaint(); +} + +bool DesignCanvas::toggle_planes() +{ + const bool on = m_sketch_tool.toggle_show_planes(); + request_repaint(); + return on; +} + +bool DesignCanvas::toggle_axes() +{ + const bool on = m_sketch_tool.toggle_show_axes(); + request_repaint(); + return on; +} + +void DesignCanvas::set_section_plane(bool on, double z, bool keep_upper) +{ + m_section_on = on; + // The kept half must read as a SOLID part, never a see-through ghost: make sure no leftover + // preview translucency is applied while the section is on. Guarded — a no-op if already opaque. + if (on) { set_body_translucent(false); set_body_hidden(false); } + if (m_canvas) { + if (on) { + // GLCanvas3D turns the two clipping planes into a Z-RANGE: set_z_range(-p0.offset, + // p1.offset). keep_upper=false keeps the LOWER half (z in [-1e5, z]); keep_upper=true + // keeps the OPPOSITE, UPPER half (z in [z, +1e5]). Only HIDES geometry — no bodies. + if (keep_upper) { + m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d(0.0, 0.0, 1.0), -z)); // min_z = z + m_canvas->set_clipping_plane(1, ClippingPlane(Vec3d(0.0, 0.0, 1.0), 1.0e5)); // max_z = +1e5 + } else { + m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d(0.0, 0.0, 1.0), 1.0e5)); // min_z = -1e5 + m_canvas->set_clipping_plane(1, ClippingPlane(Vec3d(0.0, 0.0, 1.0), z)); // max_z = z + } + m_canvas->set_use_clipping_planes(true); + } else { + m_canvas->set_use_clipping_planes(false); + } + m_canvas->set_as_dirty(); + } + request_repaint(); +} + +double DesignCanvas::model_mid_z() const +{ + const BoundingBoxf3 bb = m_model.bounding_box_exact(); + return bb.defined ? bb.center().z() : 0.0; +} + +void DesignCanvas::set_readout(const std::string& text) +{ + if (!m_hud || !m_hud_label || !m_canvas_widget) return; + if (text == m_hud_last) return; // only touch the WM on a real change + m_hud_last = text; + if (text.empty()) { m_hud->Hide(); return; } + m_hud_label->SetLabel(wxString::FromUTF8(text)); + place_readout_hud(); +} + +void DesignCanvas::place_readout_hud() +{ + if (!m_hud || !m_hud_label || !m_canvas_widget) return; + if (m_hud_last.empty() || !m_canvas_widget->IsShownOnScreen()) { m_hud->Hide(); return; } + m_hud->Fit(); + // Anchor to the canvas's bottom-right corner with a small margin (screen coords). + const wxSize cs = m_canvas_widget->GetClientSize(); + const wxSize hs = m_hud->GetSize(); + const wxPoint br = m_canvas_widget->ClientToScreen( + wxPoint(cs.GetWidth() - hs.GetWidth() - 12, cs.GetHeight() - hs.GetHeight() - 12)); + if (!m_hud->IsShown()) m_hud->Show(); // Show before Move (GTK ignores pre-map Move) + m_hud->Move(br); + m_hud->Raise(); +} + +// A popup is override-redirect: the window manager does not own it, so an iconised or +// deactivated app would leave the chip sitting on the bare desktop. The status chip already +// had to answer this; now that the readout is a popup too, it answers it the same way. +void DesignCanvas::show_readout_hud(bool on) +{ + if (!m_hud) return; + if (on) place_readout_hud(); + else m_hud->Hide(); +} + +// Clear of the view cube and the two round view buttons, which own the bottom-left corner. +// Shared by the placement and by the wrap width, which have to agree or the chip wraps to a +// width it is then not given. +static constexpr int kStatusHudLeftInsetDip = 190; + +void DesignCanvas::set_status_text(const wxString& text, const wxColour& colour) +{ + if (!m_status_hud || !m_status_hud_label || !m_canvas_widget) return; + if (text == m_status_hud_last && colour == m_status_hud_colour) return; + m_status_hud_last = text; + m_status_hud_colour = colour; + if (text.IsEmpty()) { m_status_hud->Hide(); return; } + m_status_hud_label->SetForegroundColour(colour); + apply_status_label(); + place_status_hud(); +} + +// SetLabel + Wrap + Fit, in that order and always together. Moving the status out of the panel +// removed the clipping of 8cc but not the underlying problem: the chip is a top-level +// popup that Fit()s to its text, so a long sentence simply grew past the right edge of the canvas +// and hung over the window. Wrapping to the room actually available is what makes the earlier +// promise — "a sentence can be a sentence" — true at every window width, including the charter's +// 1366 reach. Wrap() rewrites the label it is given, so it must follow a fresh SetLabel every +// time; that is the whole reason this is one function instead of three call sites. +void DesignCanvas::apply_status_label() +{ + if (!m_status_hud || !m_status_hud_label || !m_canvas_widget) return; + m_status_hud_label->SetLabel(m_status_hud_last); + const int avail = m_canvas_widget->GetClientSize().GetWidth() + - m_canvas_widget->FromDIP(kStatusHudLeftInsetDip) + - m_canvas_widget->FromDIP(24); + if (avail > m_canvas_widget->FromDIP(120)) // a uselessly narrow canvas: leave it unwrapped + m_status_hud_label->Wrap(avail); + m_status_hud->Fit(); +} + +void DesignCanvas::place_status_hud() +{ + if (!m_status_hud || !m_canvas_widget || m_status_hud_last.IsEmpty()) return; + // The canvas has a client size even while its page is hidden, and it is not the size the + // page will have when shown — anchoring against it put the chip up on the tab bar, where it + // then stayed until the next status change moved it. Nothing to anchor to: stay down. + if (!m_canvas_widget->IsShownOnScreen()) { m_status_hud->Hide(); return; } + const wxSize cs = m_canvas_widget->GetClientSize(); + // Re-wrap first: this also runs on resize, and a chip wrapped for the old width either + // overhangs a narrowed canvas or wastes a widened one. + apply_status_label(); + const wxSize hs = m_status_hud->GetSize(); + const int kLeftInset = m_canvas_widget->FromDIP(kStatusHudLeftInsetDip); + const wxPoint bl = m_canvas_widget->ClientToScreen( + wxPoint(kLeftInset, cs.GetHeight() - hs.GetHeight() - 12)); + // No Raise() and no focus juggling: a popup neither takes focus nor falls behind. This was + // caught with ORCA_CAD_KEYTRACE — shift+S logged a line, the following R logged nothing, and + // the only thing between them was the first status update showing this window. + if (!m_status_hud->IsShown()) m_status_hud->Show(); // Show before Move (GTK ignores pre-map Move) + m_status_hud->Move(bl); +} + +void DesignCanvas::on_frame_iconize(wxIconizeEvent& e) +{ + show_status_hud(!e.IsIconized()); + show_readout_hud(!e.IsIconized()); + e.Skip(); +} + +void DesignCanvas::on_frame_activate(wxActivateEvent& e) +{ + show_status_hud(e.GetActive()); + show_readout_hud(e.GetActive()); + e.Skip(); +} + +// wxEvent& so one handler serves both events that invalidate the anchor: the frame moving out +// from under the chip, and the canvas resizing under it. +void DesignCanvas::on_status_hud_reanchor(wxEvent& e) +{ + place_status_hud(); + e.Skip(); +} + +void DesignCanvas::show_status_hud(bool on) +{ + if (!m_status_hud) return; + if (on) place_status_hud(); // re-anchors first: the page may have been resized while away + else m_status_hud->Hide(); +} + +void DesignCanvas::set_body_highlight(bool on) +{ + if (m_body_selected == on) return; + m_body_selected = on; + reload(true); // recolours the body volume (selected = cyan tint) +} + +void DesignCanvas::set_operand_bodies(int target_body, int tool_body) +{ + if (m_hl_body_target == target_body && m_hl_body_tool == tool_body) return; + m_hl_body_target = target_body; + m_hl_body_tool = tool_body; + reload(true); // recolours the body volumes (same idiom set_body_highlight uses) +} + +void DesignCanvas::set_highlight_sketches(std::vector> hl) +{ + m_sketch_tool.set_highlight_sketches(std::move(hl)); + request_repaint(); +} + +void DesignCanvas::set_body_translucent(bool on) +{ + if (m_body_translucent == on) return; + m_body_translucent = on; + reload(true); // re-applies object-0 alpha so the solid fades for the fillet preview +} + +void DesignCanvas::set_xray_focus(int body) +{ + if (m_xray_focus == body) return; + m_xray_focus = body; + m_sketch_tool.set_pick_only_body(body); + reload(true); // re-applies per-body alpha so the non-focused bodies fade +} + +void DesignCanvas::set_body_hidden(bool on) +{ + if (m_body_hidden == on) return; + m_body_hidden = on; + reload(true); // hides/show base bodies + flips the ghost opaque/faint for preview-only mode +} + +void DesignCanvas::delete_selected_sketch_entities() +{ + m_sketch_tool.delete_selected(); + request_repaint(); +} + +bool DesignCanvas::inline_busy() const +{ + // Two sources, still: the TOOL's flag says a value is pending, the editor says a field is + // drawn. They agree now that the field is not a window — the orphan state (logically closed, + // still on screen, still eating keys) cannot be represented when there is nothing to leave + // mapped — but the union costs nothing and is the honest question to ask. + return m_sketch_tool.inline_busy() + || (m_inline_editor && m_inline_editor->is_open()); +} + +bool DesignCanvas::inline_has_focus() const +{ + return m_inline_editor && m_inline_editor->has_focus(); +} + +void DesignCanvas::inline_commit() +{ + if (m_inline_editor) m_inline_editor->commit(); +} + +void DesignCanvas::inline_cancel() +{ + if (m_inline_editor) m_inline_editor->cancel(); +} + +void DesignCanvas::request_sketch_exit() +{ + m_sketch_tool.request_exit(); + request_repaint(); +} + +bool DesignCanvas::live_sketch_has_work() const +{ + return m_sketch_tool.live_sketch_has_work(); +} + +bool DesignCanvas::undo_last_sketch_entity() +{ + const bool did = m_sketch_tool.undo_last_entity(); + if (did) request_repaint(); + return did; +} + +bool DesignCanvas::delete_selected_or_last_sketch_entity() +{ + const bool did = m_sketch_tool.delete_selected_or_last(); + if (did) request_repaint(); + return did; +} + +void DesignCanvas::clear_sketch_selection() +{ + m_sketch_tool.clear_selection(); + request_repaint(); +} + +DesignSketchTool::DimType DesignCanvas::sketch_dimension_kind() const +{ + return m_sketch_tool.dimension_kind(); +} + +double DesignCanvas::sketch_dimension_current() const +{ + return m_sketch_tool.dimension_current(); +} + +void DesignCanvas::apply_sketch_dimension(double v) +{ + m_sketch_tool.apply_dimension(v); + request_repaint(); +} + +void DesignCanvas::open_inline_value(double current, std::function commit, + std::function cancel) +{ + if (!m_inline_editor || !m_canvas_widget) { if (cancel) cancel(); return; } + // Host-driven value entry (committed-feature Constrain path): the trigger is a toolbar + // button. Anchor the field OVER the picked geometry (same as the draw-then-edit tools) when + // the tool can project it; else fall back to the middle of the canvas, where the sketch is + // in view. Everything here is canvas DEVICE px, the space the field is drawn in. + const wxSize cs = m_canvas_widget->GetClientSize(); + const double sf = m_canvas_widget->GetContentScaleFactor(); + wxPoint anchor(int(cs.GetWidth() * sf) / 2, int(cs.GetHeight() * sf) / 2); + m_sketch_tool.constrain_value_anchor(anchor); // device px in the canvas viewport + m_sketch_tool.set_inline_busy(true); + m_canvas_widget->SetFocus(); // same reason as the draw-then-edit path: ImGui reads the + // canvas's key events, so the canvas must be the focused widget + + m_inline_editor->open(anchor, current, "", + [this, commit](double v) { + m_sketch_tool.set_inline_busy(false); + if (commit) commit(v); + request_repaint(); + }, + [this, cancel]() { + m_sketch_tool.set_inline_busy(false); + if (cancel) cancel(); + request_repaint(); + }); +} + +void DesignCanvas::set_on_dimension_pick_complete(std::function cb) +{ + m_sketch_tool.on_dimension_pick_complete = std::move(cb); +} + +DesignSketchTool::DimType DesignCanvas::pending_dimension_type() const +{ + return m_sketch_tool.pending_dimension_type(); +} + +void DesignCanvas::set_sketch_dimension_value(double v) +{ + m_sketch_tool.set_dimension_value(v); + request_repaint(); +} + +void DesignCanvas::cancel_sketch_dimension() +{ + m_sketch_tool.cancel_dimension_value(); + request_repaint(); +} + +void DesignCanvas::begin_constrain(const SketchProfile& prof, const SketchPlane& plane) +{ + m_sketch_tool.begin_constrain(prof, plane); + // The overlay must appear immediately (no mouse move to trigger a repaint). + request_repaint(); +} + +void DesignCanvas::begin_imported_transform( + int feat, const std::vector>>& base_regions, + const SketchPlane& plane, const Vec2d& offset, double scale_x, double scale_y) +{ + m_sketch_tool.begin_imported_transform(feat, base_regions, plane, offset, scale_x, scale_y); + request_repaint(); +} + +void DesignCanvas::set_on_imported_transform(std::function cb) +{ + m_sketch_tool.on_imported_transform = std::move(cb); +} + +void DesignCanvas::end_constrain() +{ + // cancel() clears m_active + the picked-segment/entity indices, so the + // constrain overlay (highlighted picks) disappears on the next render. + m_sketch_tool.cancel(); + request_repaint(); +} + +bool DesignCanvas::is_constraining() const { return m_sketch_tool.is_constraining(); } + +bool DesignCanvas::selected_segment(int& a, int& b) const +{ + return m_sketch_tool.selected_segment(a, b); +} + +void DesignCanvas::update_constrain_profile(const std::vector& pts) +{ + m_sketch_tool.set_profile_points(pts); + request_repaint(); +} + +void DesignCanvas::begin_constrain_entities(const std::vector& ents, + const SketchPlane& plane) +{ + m_sketch_tool.begin_constrain_entities(ents, plane); + request_repaint(); +} + +bool DesignCanvas::is_constraining_entities() const +{ + return m_sketch_tool.is_constraining_entities(); +} + +int DesignCanvas::sketch_selection_count() const +{ + return int(m_sketch_tool.selection().size()); +} + +bool DesignCanvas::view_normal_to_sketch() +{ + if (m_canvas == nullptr) return false; + const SketchPlane& pl = m_sketch_tool.plane(); + Camera& cam = wxGetApp().plater()->get_camera(); + // Keep the distance: this is an orientation change, not a zoom. The plane's own y axis is + // the up vector, so "up" on screen is up in sketch coordinates — which is what makes a + // dimension typed after pressing N land where the eye expects it. + const double dist = cam.get_distance(); + cam.look_at(pl.origin + pl.normal * dist, pl.origin, pl.y_axis); + request_repaint(); + return true; +} + +bool DesignCanvas::sketch_abort_gesture() +{ + if (!m_sketch_tool.abort_gesture()) return false; + request_repaint(); // the rubber band is gone; the canvas must stop drawing it + return true; +} + +bool DesignCanvas::sketch_disarm_tool() +{ + if (!m_sketch_tool.disarm_tool()) return false; + request_repaint(); + return true; +} + +bool DesignCanvas::drawing_in_progress() const +{ + return m_sketch_tool.pending_points() > 0; +} + +bool DesignCanvas::has_any_selection() const +{ + return m_sketch_tool.has_solid_selection() || m_sketch_tool.sketch_has_selection(); +} + +bool DesignCanvas::clear_any_selection() +{ + if (!has_any_selection()) return false; + // Both, unconditionally: which of the two is live depends on the mode, and Esc at idle means + // "nothing is picked" in either of them. clear_selection() reports through the tool's own + // on_selection_changed; the solid side has no such notification, so the panel refreshes what + // depends on it (see DesignPanel::escape). + m_sketch_tool.clear_selection(); + m_sketch_tool.clear_solid_selection(); + // clear_solid_selection() is silent by design (recomputes call it while ids are invalid), but + // the panel mirrors the pick to aim Extrude and the dress-up tools. An Esc that cleared the + // highlight without telling the panel would leave those aimed at a body nothing points to. + if (m_sketch_tool.on_solid_selection_changed) + m_sketch_tool.on_solid_selection_changed(0, -1, -1, -1); + request_repaint(); + return true; +} + +bool DesignCanvas::sketch_first_selected_type(SketchEntity::Type& out) const +{ + return m_sketch_tool.first_selected_type(out); +} + +const std::vector& DesignCanvas::sketch_selection() const +{ + return m_sketch_tool.selection(); +} + +const std::vector& DesignCanvas::sketch_entities() const +{ + return m_sketch_tool.entities(); +} + +int DesignCanvas::sketch_constraint_count() const +{ + return int(m_sketch_tool.constraints().size()); +} + +const std::vector& DesignCanvas::sketch_constraints() const +{ + return m_sketch_tool.constraints(); +} + +bool DesignCanvas::remove_sketch_constraint(int idx) +{ + const bool removed = m_sketch_tool.remove_constraint(idx); + if (removed) request_repaint(); + return removed; +} + +void DesignCanvas::set_on_sketch_constraints_changed(std::function cb) +{ + m_sketch_tool.on_constraints_changed = std::move(cb); +} + +bool DesignCanvas::try_add_sketch_constraints(const std::vector& defs) +{ + return m_sketch_tool.try_add_constraints(defs); +} + +bool DesignCanvas::selected_constrain_entities(int& e0, int& e1) const +{ + return m_sketch_tool.selected_constrain_entities(e0, e1); +} + +int DesignCanvas::selected_constrain_axis() const +{ + return m_sketch_tool.pick2(); +} + +bool DesignCanvas::pick0_point(Vec2d& out) const +{ + return m_sketch_tool.pick0_point(out); +} + +void DesignCanvas::update_constrain_entities(const std::vector& ents) +{ + m_sketch_tool.set_constrain_entities(ents); + request_repaint(); +} + +void DesignCanvas::set_constraint_highlight(std::vector entities) +{ + m_sketch_tool.set_constraint_highlight(std::move(entities)); + request_repaint(); +} + +void DesignCanvas::set_constraint_glyphs(std::vector cons) +{ + m_sketch_tool.set_constraint_glyphs(std::move(cons)); + request_repaint(); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/DesignCanvas.hpp b/src/slic3r/GUI/CAD/DesignCanvas.hpp new file mode 100644 index 0000000000..fab2e556e3 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignCanvas.hpp @@ -0,0 +1,436 @@ +#ifndef slic3r_DesignCanvas_hpp_ +#define slic3r_DesignCanvas_hpp_ + +#include +#include + +#include +#include +#include + +#include "slic3r/GUI/3DBed.hpp" +#include "slic3r/GUI/Camera.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" + +class wxGLCanvas; +class wxFrame; +class wxStaticText; + +namespace Slic3r { + +class TriangleMesh; + +namespace GUI { + +class GLCanvas3D; +class SketchInlineEditor; + +class DesignCanvas : public wxPanel +{ +public: + explicit DesignCanvas(wxWindow* parent); + ~DesignCanvas() override; + + void set_mesh(const TriangleMesh& mesh); + // Multi-body display: one GLVolume per body, each coloured distinctly (per-body colour). + // `visible` (optional, indexed by body) hides bodies whose flag is false. + void set_bodies(const std::vector& body_meshes, + const std::vector& visible = {}); + void clear_mesh(); + + void set_preview_mesh(const TriangleMesh& mesh); + void clear_preview(); + + void fit_view(); + void set_view(const std::string& view_name); + + void begin_sketch(const SketchPlane& plane, DesignSketchTool::Mode mode); + // Re-open a committed entity sketch for full in-canvas editing (load geometry + + // constraints, re-detect feature groups). Re-commits via finish_sketch(). + void edit_sketch(const std::vector& entities, + const std::vector& constraints, + const SketchPlane& plane); + void set_sketch_tool(DesignSketchTool::Mode mode); + void set_sketch_plane(const SketchPlane& plane); // re-plane the live sketch when a reference plane is clicked in 3D + void set_sketch_construction(bool c); + // Flip the sketch selection between construction and real geometry; returns the + // number of entities changed (0 = nothing selected, caller falls back to the mode). + // Open the in-canvas value field on the sketch selection's defining number. + bool edit_sketch_selection_value(); + int toggle_sketch_construction_selection(); + // Is the sketch tool on Select (as opposed to a draw/edit tool being armed)? The + // Construction box needs it to tell "convert what I picked" from "arm what I draw next". + bool sketch_is_selecting() const { return m_sketch_tool.mode() == DesignSketchTool::Mode::Select; } + // Text / SVG art into the LIVE sketch, as ordinary editable lines. False = no session. + bool add_sketch_regions(const std::vector>>& regions); + void set_sketch_polygon_sides(int n); + void set_sketch_polygon_circumscribed(bool c); + void finish_sketch(); + bool is_sketching() const; + void refresh_bed(); // re-sync the bed to the current printer (call on tab activation) + // The Camera is Plater-owned and shared with Prepare/Preview/Assemble; GLCanvas3D has no + // per-canvas camera, so every orbit here would otherwise overwrite what the editor tabs + // show. Exactly one of the two views is live at a time, so entering and leaving are the + // same operation: trade the live camera for the parked one. That also keeps this canvas's + // own view across a tab switch. + void enter_viewport(); + void leave_viewport(); + void unbind_canvas_event_handlers(); // app close / language switch, from the plater's teardown + void reset_canvas_volumes(); + void set_show_bed(bool b); // view option: draw the printer bed + plate grid, or not + // N: look straight down the sketch plane's normal, keeping the current zoom. A sketch drawn + // at an angle is a sketch drawn wrong, and no amount of orbiting by hand lands exactly square. + bool view_normal_to_sketch(); + void cancel_sketch(); + void set_on_sketch_commit(std::function cb); + void set_on_sketch_entities_commit( + std::function&, + const std::vector&, + const SketchPlane&)> cb); + + // Line tool: pending-segment length entry + live readout (Phase 2). + void set_on_segment_drawn(std::function cb); + void set_on_cursor_metrics(std::function cb); + void set_on_solve_state(std::function cb); // dof, ok, has_constraints + // Live per-step guidance from the armed sketch tool (mode, step, picks). 1c0c. + void set_on_sketch_step(std::function cb); + void apply_segment_length(double len); // exact length, then commit & repaint + void keep_segment_as_drawn(); // commit as-drawn & repaint + + // Sketch selection (Mode::Select). + void set_on_sketch_selection_changed(std::function cb); + void set_on_sketch_face_selected(std::function cb); // closed loop clicked: region index passed + void set_on_display_sketch_selected(std::function cb); // committed loop clicked: (feature, region, entity) + void set_on_display_sketch_activated(std::function cb); // committed sketch DOUBLE-clicked: edit it + std::vector selected_loop_entities() const; // entities of the click-selected loop + std::vector> region_entity_indices(const std::vector& ents) const; + // Like region_entity_indices, but each region's entry is its OWN entities followed by the + // entities of each of its holes — the same order selected_loop_entities() hands the kernel. + // A per-loop extrude of a region WITH holes stores exactly this, so this is the shape a + // consumed loop must be compared against. + std::vector> region_entity_indices_with_holes(const std::vector& ents) const; + void clear_loop_pick(); // drop the click-selected loop highlight (e.g. after extrude) + void set_loop_pick(int feature, int region); // adopt a loop pick made before the commit + void set_escalate_on_repick(bool on); // off while a card has armed a face/edge pick + // Solid whole/face/edge selection: point the tool at the bodies + concatenated + // tessellation (with per-triangle face & body ids), and a callback fired on each + // whole->face->edge cycle (level, body index, face id, edge id). + void set_solid_pick(const std::vector* bodies, const TriangleMesh* mesh, + const std::vector* tri_face, const std::vector* tri_body, + const std::vector* visible = nullptr, + const std::vector* xform = nullptr); + void set_on_solid_selection_changed(std::function cb); + void set_on_place_on_face(std::function cb); // F key: Place on Face + void select_body(int body); // Parts-list -> highlight a whole body by index + // Effective display colour of a body: the per-body override (Color tool) when set, + // otherwise the auto body-index palette. Single source of truth shared with reload(). + ColorRGBA body_color(int body) const; + // Move-body gizmo (M5): three world-axis drag arrows on a body; drag fires the move + // callback with the body index + accumulated translation (display-only, host applies it). + // body_radius = bounding-sphere radius of the body in world mm; the gizmo scales with it so + // the rotation rings sit OUTSIDE the solid (Orca's Prepare gizmos do the same). + void begin_move_body(int body, const Vec3d& pivot, const Transform3d& base_xform, + double body_radius); + void clear_move_gizmo(); + bool moving_body() const; + void set_on_body_move_changed(std::function cb); + // Visual Fillet/Chamfer radius gizmo: when a solid edge is picked, anchor a radius arrow on + // it; drag/edit fire the radius callback. Returns false if no edge is currently picked. + bool begin_fillet_gizmo(const Vec3d& body_centroid, double radius); + void clear_fillet_gizmo(); + bool filleting() const; + void set_on_fillet_radius_changed(std::function cb); + // Visual Hole gizmo: the panel feeds the hole plane + position + diameter/depth/through while + // its Hole card is open; drag/edit fire the hole callback (x, y, diameter, depth). + void begin_hole_gizmo(const SketchPlane& plane, double x, double y, + double diameter, double depth, bool through); + void set_hole_face_bounds(bool has, double umin, double umax, double vmin, double vmax); + void clear_hole_gizmo(); + bool holing() const; + void set_on_hole_changed(std::function cb); + // Visual Thread gizmo: footprint circle + radius/length arrows + draggable centre. + void begin_thread_gizmo(const SketchPlane& plane, double x, double y, + double radius, double height); + void clear_thread_gizmo(); + bool threading() const; + void set_on_thread_changed(std::function cb); + // Visual Shell gizmo: inward thickness arrow at the picked open-face centroid. + void begin_shell_gizmo(const Vec3d& face_centroid, const Vec3d& inward_dir, double thickness); + void clear_shell_gizmo(); + bool shelling() const; + void set_on_shell_thickness_changed(std::function cb); + // Visual Revolve angle-arc gizmo: the panel feeds the sketch plane + profile centroid + axis + // (0=plane X, 1=plane Y) + angle + flip while its Revolve card is open; drag/edit fire the + // angle callback. + void begin_revolve_gizmo(const SketchPlane& plane, const Vec2d& centroid, + int axis_sel, double angle, bool flip); + void clear_revolve_gizmo(); + bool revolving() const; + void set_on_revolve_angle_changed(std::function cb); + // Visual Draft angle-arc gizmo: the panel feeds the face centroid + face normal + angle while + // its Draft card is open; drag/edit fire the angle callback. + void set_draft_gizmo(const Vec3d& face_centroid, const Vec3d& face_normal, double angle); + void clear_draft_gizmo(); + bool drafting() const; + void set_on_draft_angle_changed(std::function cb); + // Visual Cut gizmo: plane-rectangle preview + draggable normal offset arrow while + // the Cut card is open; drag fires the offset callback. + void set_cut_gizmo(const SketchPlane& plane, double offset, const Vec3d& body_center, double half_extent); + void clear_cut_gizmo(); + bool cutting() const; + void set_on_cut_offset_changed(std::function cb); + // Visual Pattern gizmo: the panel feeds the (world XY) plane + target body centroid + mode + + // count/dir/spacing/angle while its Pattern card is open; drag/edit fire the value callback. + void begin_pattern_gizmo(const SketchPlane& plane, const Vec3d& body_centroid, bool circular, + int count, int dir, double spacing, double angle); + void clear_pattern_gizmo(); + bool patterning() const; + void set_on_pattern_changed(std::function cb); + // Visual Extrude depth-arrow gizmo (C5b): the panel feeds the profile plane + centroid + + // live depths/flags while its Extrude card is open; drag/edit fire the depth callback. + void set_extrude_gizmo(const SketchPlane& plane, const Vec2d& centroid, + double depth, double depth2, bool two_sided, bool flip); + void clear_extrude_gizmo(); + void set_on_extrude_depth_changed(std::function cb); + void set_datum_gizmo(const SketchPlane& plane, double usize, double vsize, + const Vec3d& base_origin, const Vec3d& base_normal, + double offset, bool offset_on); // C3 resize handles + offset arrow + void clear_datum_gizmo(); + void set_on_datum_size_changed(std::function cb); + void set_on_datum_offset_changed(std::function cb); + void set_helix_gizmo(const SketchPlane& plane, double radius, double pitch, double height, + double taper, bool left_handed); // helix curve + 3 drag handles + void clear_helix_gizmo(); + void set_on_helix_changed(std::function cb); + void set_rib_gizmo(const SketchPlane& plane, const Vec2d& p0, const Vec2d& p1, double thickness); // rib slab footprint + 2 thickness handles + void clear_rib_gizmo(); + void set_on_rib_thickness_changed(std::function cb); + void set_base_pick(std::vector planes, std::vector bases, + std::vector labels = {}); // clickable labelled reference planes + void clear_base_pick(); + void set_on_datum_base_picked(std::function cb); + void set_on_sketch_exit(std::function cb); // Esc -> exit the tool + void set_on_sketch_exit_refused(std::function cb); // Esc declined: sketch has work + void set_on_undo_redo(std::function cb); // Ctrl+Z / Ctrl+Shift+Z + // Persistently draw committed sketches (un-consumed ones stay visible). + void set_display_sketches(std::vector ds); + void set_highlight_sketches(std::vector> hl); + void set_datum_planes(std::vector planes, + std::vector sizes = {}); // draw datum/reference planes (u/v extents) + // Mate connectors, drawn as frames so their verse and polarity are visible (wgsc). + void set_mate_connectors(std::vector g); + void set_mate_links(std::vector> l); + void set_body_highlight(bool on); // tint the solid when its feature is tree-selected + // The status line, shown along the BASE OF THE VIEWPORT rather than in the side panel: + // the panel clips it at ~73 characters with no warning (8cc), the viewport's + // bottom margin has the whole window width to spare. Empty text hides it. + void set_status_text(const wxString& text, const wxColour& colour); + // Take the status line down / bring it back when the Design page leaves and re-enters view. + // A popup is a TOP-LEVEL window: hiding the page it belongs to does not hide it. Keeps the + // text, so coming back needs no re-selection. + void show_status_hud(bool on); + void set_operand_bodies(int target_body, int tool_body); // -1,-1 clears + void set_body_translucent(bool on); // render the solid see-through (fillet/chamfer preview) + void set_xray_focus(int body); // >=0: fade+lock out every other body (CoordSys picking) + void set_body_hidden(bool on); // preview-only: hide base bodies, show only the result ghost + void set_on_move_exit(std::function cb); // right-click finished the move-body gizmo + // Right-click (or its platform equivalent) on the viewport with no tool running: open the + // object-driven offer there. Fires with SCREEN coordinates. Deliberately NOT fired while a + // tool is live — right-click already ends a polyline chain and finishes the move gizmo, and + // taking those over would break two working interactions in order to add a third. + void set_on_context_menu(std::function cb); + void delete_selected_sketch_entities(); + bool inline_busy() const; // a sketch value field is open (guard keys) + bool inline_has_focus() const; // the field itself holds keyboard focus + void inline_commit(); // accept the typed value (Enter/Tab) + void inline_cancel(); // discard the typed value (Esc) + // The layered Esc: abandon the points of the gesture in progress, else drop the armed tool + // back to Select, else leave the sketch. Same call GLCanvas3D::on_char makes, exposed so the + // panel can do it when focus is not on the canvas. + void request_sketch_exit(); + bool live_sketch_has_work() const; // the live sketch holds entities a cancel would destroy + bool undo_last_sketch_entity(); // Ctrl+Z in a sketch: drop the last entity + bool delete_selected_or_last_sketch_entity(); // Delete in a sketch: selected, else last + void clear_sketch_selection(); + + // View toggles (keys P / A): origin planes, world axis triad. Each returns the new on/off + // state so the caller can echo it in the status bar. + bool toggle_planes(); + bool toggle_axes(); + + // Section views (non-destructive): the panel owns the named "Section View N" list; the canvas + // just applies/clears one horizontal clip at a time. model_mid_z() is the default cut height. + void set_section_plane(bool on, double z, bool keep_upper = false); + double model_mid_z() const; + + // Dimension tool: act on the current sketch selection. + DesignSketchTool::DimType sketch_dimension_kind() const; + double sketch_dimension_current() const; + void apply_sketch_dimension(double v); + + // Open the in-canvas value editor at the cursor for a host-driven value (the + // committed-feature Constrain path uses this instead of a docked numeric card). + void open_inline_value(double current, std::function commit, + std::function cancel = {}); + + // Dimension tool (Mode::Dimension): click-to-place quotes. The pick-complete + // callback lets the panel pop the value card; set/cancel apply or keep the value. + void set_on_dimension_pick_complete(std::function cb); + DesignSketchTool::DimType pending_dimension_type() const; + void set_sketch_dimension_value(double v); + void cancel_sketch_dimension(); + + // Constrain mode: load a committed profile for picking + constraint editing. + void begin_constrain(const SketchProfile& prof, const SketchPlane& plane); + // Leave constrain mode and clear any picked-entity highlight from the overlay. + void end_constrain(); + bool is_constraining() const; + bool selected_segment(int& a, int& b) const; + void update_constrain_profile(const std::vector& pts); + + // Entity-aware Constrain (Fase 4.2): pick Line entities of a committed sketch. + void begin_constrain_entities(const std::vector& ents, const SketchPlane& plane); + bool is_constraining_entities() const; + // Sketch selection, for the offer menu: how many entities are selected and what the first + // one is. Returns 0 when nothing is selected. + int sketch_selection_count() const; + // Esc routing (DesignInteraction.hpp). The panel decides WHICH level one press belongs to; + // these are the levels it can act on inside the canvas. Each returns whether it did anything, + // so the panel can fall through to the next level without asking twice. + bool sketch_abort_gesture(); // CadLevel::Gesture — drop the entity being drawn + bool sketch_disarm_tool(); // CadLevel::Tool — armed sketch tool falls back to Select + bool drawing_in_progress() const;// an entity has clicks down but is not committed + bool has_any_selection() const; // model pick or sketch pick + bool clear_any_selection(); // CadLevel::Idle — drop both; true if anything was dropped + bool sketch_first_selected_type(SketchEntity::Type& out) const; + // Live sketch session (Fase 4.2 live constraint path): the panel reads the in-session + // selection and entities, and commits a planned constraint through the tool's + // append->solve->keep-or-rollback, rather than reaching into mcp_sketch_tool(). + const std::vector& sketch_selection() const; + const std::vector& sketch_entities() const; + // How many constraints the LIVE session holds. Only a count: the hint line needs to know + // whether any badge is on screen to talk about, nothing more. + int sketch_constraint_count() const; + const std::vector& sketch_constraints() const; + bool remove_sketch_constraint(int idx); + void set_on_sketch_constraints_changed(std::function cb); + bool try_add_sketch_constraints(const std::vector& defs); + + // In-canvas bbox transform of imported Text/SVG art (replaces the Move/Scale dialog). + void begin_imported_transform(int feat, + const std::vector>>& base_regions, + const SketchPlane& plane, const Vec2d& offset, + double scale_x, double scale_y); + void set_on_imported_transform(std::function cb); + bool selected_constrain_entities(int& e0, int& e1) const; + int selected_constrain_axis() const; // third pick slot (Symmetric axis), -1 if unset + bool pick0_point(Vec2d& out) const; // plane-coords of the slot-0 pick (trim/extend) + void update_constrain_entities(const std::vector& ents); + // Constraint manager (C3.4): highlight the entities referenced by a selected + // constraint (yellow tint in Constrain mode); empty clears the highlight. + void set_constraint_highlight(std::vector entities); + // Constraint glyph badges (C3.4b): the feature's constraints, drawn as iconic + // marks near their entities in Constrain mode; empty clears them. + void set_constraint_glyphs(std::vector cons); + // Repaint the embedded canvas the right way for the active GL backend: + // hardware GL gets a scheduled wxEVT_PAINT (render() runs inside the paint + // cycle); software GL (llvmpipe etc.) gets a direct render() because a + // scheduled Refresh() is frequently dropped there. Backend cached on first use. + // Public: DesignPanel calls it after a tree edit to force a frame on software GL. + // Scripted (MCP) access to the live sketch. One accessor rather than a passthrough per + // verb: the MCP layer drives the SAME tool the mouse drives, which is the whole point of + // having it — a socket that talked to a private copy would prove nothing about the app. + DesignSketchTool& mcp_sketch_tool() { return m_sketch_tool; } + const DesignSketchTool& mcp_sketch_tool() const { return m_sketch_tool; } + + void request_repaint(); + // Repaint synchronously, once the pending show/resize has settled. Needed when the + // notebook re-shows the Design page: an invalidation issued while the page is still + // being shown is dropped on hardware GL and no wxEVT_PAINT ever follows, leaving the + // canvas blank until another tab switch forces an expose. + void force_repaint(); + // Repaint synchronously, for use while a modal popup (the offer menu) owns the event loop: + // a queued Refresh() is not serviced until the popup closes, so a hover ghost drawn behind it + // would never appear. Mirrors DesignPanel's m_status->Update() flush. + void repaint_now(); + +private: + void reload(bool keep_view); + void swap_camera(); // enter_viewport / leave_viewport, in the one direction they share + + wxGLCanvas* m_canvas_widget{nullptr}; + GLCanvas3D* m_canvas{nullptr}; + int m_sw_gl{-1}; // -1 unknown, 0 hardware GL, 1 software GL + + std::function m_on_context_menu; + bool m_ctx_bound{false}; // bind the RIGHT_UP handler once, however often the cb is set + wxPoint m_ctx_press{0, 0}; // right-press origin: a right-DRAG orbits, it must not offer + long long m_ctx_press_ms{0}; // and a right-HOLD is navigation too, however still it is held + + Bed3D m_bed; + // The half of the camera swap above that is NOT on screen: the editor tabs' view while + // Design is up, this canvas's view while it is not. Seeded in the constructor so the first + // entry inherits the view the user was already looking at. + Camera m_parked_camera; + bool m_camera_swapped{false}; // guards a leave without an enter, and the reverse + Model m_model; + bool m_first_frame{true}; + bool m_body_selected{false}; // tree selected a body feature → tint the solid + int m_hl_body_target{-1}; + int m_hl_body_tool{-1}; + bool m_body_translucent{false};// fillet/chamfer preview → render the body see-through + int m_xray_focus{-1}; // >=0: only this body is opaque+clickable (CoordSys picking) + bool m_body_hidden{false}; // preview-only mode → hide base bodies, ghost = the result + std::vector m_body_visible; // per-body visibility (empty => all visible) + // Live pointer to the document's bodies (stable address: m_doc.bodies), stashed by + // set_solid_pick so reload()/body_color() can read each body's colour override. + const std::vector* m_color_bodies{nullptr}; + + DesignSketchTool m_sketch_tool; + + // Section view: whether a horizontal clip is currently applied (guards Alt+Wheel). The cut + // height and the named-view list live in DesignPanel; the canvas is a dumb applier. + bool m_section_on{false}; + + std::unique_ptr m_inline_editor; // floating in-canvas value editor + // Bottom-right viewport HUD: a borderless float label over the GL canvas showing the + // active tool's current values (fed by the tool's on_readout). Empty text hides it. + // A wxPopupWindow for the SAME reason as the status chip below, and it was a wxFrame until + // the reason was measured rather than assumed: "it appears mid-gesture and the next input is + // the mouse" is false. The chip keeps the last value on screen AFTER the gesture ends, and a + // frame holds the X input focus once it has it — so the next keystroke went to a 119x31 + // window that has no use for it. Measured on :10: focus on the chip, `r` produced no + // CHAR_HOOK line at all; one bare canvas click moved focus back and the same key armed the + // tool. That is every sketch shortcut dead after every dimensioned entity. + wxPopupWindow* m_hud{nullptr}; + wxStaticText* m_hud_label{nullptr}; + std::string m_hud_last; + void set_readout(const std::string& text); + void place_readout_hud(); // anchor + show, using m_hud_last + void show_readout_hud(bool on); // iconise/deactivate: a popup would float on the desktop + + // Bottom-LEFT viewport HUD: the selection / tool status line, written by DesignPanel. + // A wxPopupWindow, NOT the wxFrame the readout HUD uses: a frame accepts keyboard focus, + // and this one is on screen permanently and re-raised on every status change, so it stole + // the keyboard from the canvas and killed every sketch shortcut in the tab. + wxPopupWindow* m_status_hud{nullptr}; + wxStaticText* m_status_hud_label{nullptr}; + wxString m_status_hud_last; + wxColour m_status_hud_colour; + void place_status_hud(); // re-anchors to the canvas corner (also on resize) + void apply_status_label(); // SetLabel + Wrap to the canvas width + Fit, always together + // On the top-level frame, which outlives this canvas — members so they can be unbound. + void on_frame_iconize(wxIconizeEvent& e); + void on_frame_activate(wxActivateEvent& e); + void on_status_hud_reanchor(wxEvent& e); // frame wxEVT_MOVE and canvas wxEVT_SIZE + std::function m_on_sketch_commit; + std::function&, + const std::vector&, + const SketchPlane&)> m_on_sketch_entities_commit; +}; + +}} // namespace Slic3r::GUI + +#endif // slic3r_DesignCanvas_hpp_ diff --git a/src/slic3r/GUI/CAD/DesignInteraction.hpp b/src/slic3r/GUI/CAD/DesignInteraction.hpp new file mode 100644 index 0000000000..d849b779e4 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignInteraction.hpp @@ -0,0 +1,59 @@ +#ifndef slic3r_GUI_DesignInteraction_hpp_ +#define slic3r_GUI_DesignInteraction_hpp_ + +namespace Slic3r { namespace GUI { + +// The Design tab's interaction stack, and the ONE rule Esc obeys. +// +// Esc unwinds exactly one level per press, deepest first, and never more. The enum value IS +// the LIFO depth, so "which level does this press belong to" is a comparison, not a chain of +// special cases scattered over three files — which is what it was, and why two presses in a +// row could reach past a tool and destroy the sketch underneath it. +// +// STRICT INVARIANT (the bug this exists to make unrepresentable): no level of Esc deletes a +// feature, discards a sketch that holds geometry, or rolls history back. Destroying work needs +// a gesture that says so — Delete/Backspace on an explicit selection, the banner's Cancel, or +// Ctrl+Z. An Esc that can destroy is an Esc nobody can press with confidence, and being the +// safe key is the whole point of it. +enum class CadLevel : int { + Idle = 0, // nothing transient is up: Esc clears the selection + Tool = 1, // a feature card / armed sketch tool / constrain session: Esc exits it + Gesture = 2, // an uncommitted delta (entity being drawn, body being dragged): Esc reverts it + Transient = 3, // a value field or a popup menu: Esc closes just that +}; + +// What the tab is doing, reduced to the four bits the routing actually needs. Kept as a POD of +// answers rather than a pointer to the panel so the rule below is decidable — and checkable — +// without a window, a GL context or an event loop. +struct CadInteractionState { + bool value_field_open{false}; // in-canvas value field, or the panel's value card + bool gesture_active{false}; // in-progress entity points, or a body being moved + bool tool_armed{false}; // feature card open, sketch draw tool armed, constrain session + bool has_selection{false}; // something is picked (model or sketch) +}; + +// The whole routing rule. Deepest live level wins; Idle is the floor. +constexpr CadLevel cad_escape_level(const CadInteractionState& s) +{ + if (s.value_field_open) return CadLevel::Transient; + if (s.gesture_active) return CadLevel::Gesture; + if (s.tool_armed) return CadLevel::Tool; + return CadLevel::Idle; +} + +// The ordering is the entire contract, so it is checked where it is defined, at compile time. +static_assert(cad_escape_level({true, true, true, true}) == CadLevel::Transient, "value field is deepest"); +static_assert(cad_escape_level({false, true, true, true}) == CadLevel::Gesture, "gesture beats tool"); +static_assert(cad_escape_level({false, false, true, true}) == CadLevel::Tool, "tool beats idle"); +static_assert(cad_escape_level({false, false, false, true}) == CadLevel::Idle, "selection is idle-level"); +static_assert(cad_escape_level({false, false, false, false}) == CadLevel::Idle, "empty is idle"); + +// Right-click vs. right-hold-orbit. A press that stays put and is let go promptly is a click and +// summons the offer; anything longer or further was navigation, and navigation must never be +// rewarded with a menu over wherever the camera happened to stop. +inline constexpr int kCadRightClickMs = 200; // press->release budget +inline constexpr int kCadRightClickDriftPx = 3; // cursor drift budget, max(|dx|,|dy|) + +}} // namespace Slic3r::GUI + +#endif // slic3r_GUI_DesignInteraction_hpp_ diff --git a/src/slic3r/GUI/CAD/DesignOffer.hpp b/src/slic3r/GUI/CAD/DesignOffer.hpp new file mode 100644 index 0000000000..ad1998d5c5 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignOffer.hpp @@ -0,0 +1,189 @@ +// GENERATED FILE — DO NOT EDIT. +// Source: docs/ux/tool_atlas.json Generator: docs/ux/mockups/gen_offer_table.py +// +// The object-driven tool offer (charter 4.1): every verb has ONE row index, that index +// is the same in every selection it appears in, and verbs that do not apply are shown +// disabled in place with their reason rather than removed. Row order was ratified +// 2026-07-31; changing an index is a breaking change to every user's muscle memory. +#ifndef slic3r_GUI_DesignOffer_hpp_ +#define slic3r_GUI_DesignOffer_hpp_ + +#include + +namespace Slic3r { namespace GUI { + +// What the viewport has selected. Ordered as in tool_atlas.json; the bitmask in +// OfferVerb::accepts indexes these. +enum class OfferSel : int { + None = 0, + FacePlanar = 1, + FaceCyl = 2, + FaceOther = 3, + EdgeStr = 4, + EdgeCirc = 5, + Vertex = 6, + BodySolid = 7, + BodySheet = 8, + Bodies2 = 9, + DatumPlane = 10, + DatumAxis = 11, + CoordSys = 12, + Art = 13, + SkLoop = 14, + SkNone = 15, + SkLine = 16, + SkArc = 17, + SkPoint = 18, + Sk2Ent = 19, + Count = 20 +}; + +inline uint32_t offer_bit(OfferSel s) { return 1u << int(s); } + +// One row of the offer. `action` routes to the code that already implements the verb: +// "key:S+E" -> m_keys_feature[SHIFT('E')] +// "key:L" -> m_keys_sketch['L'] +// "fly:material#4" -> row 4 of the "material" feature flyout +// "btn:delete" -> a standalone toolbar button +// nullptr -> kernel support exists, no GUI path yet (row shows disabled) +struct OfferVerb { + const char* id; + const char* name; // drawing-office word (L10); translated at use with wxGetTranslation + int row; // 0..7, the ratified index — NEVER reorder + const char* key; // shortcut shown in the row, or nullptr + const char* action; + const char* refusal; // why this row is greyed, in the product's own words + uint32_t accepts; // bitmask over OfferSel + int need_bodies; + int need_sketches; + bool need_sheet; + bool sketch_mode; // belongs to the sketch-mode vocabulary, not the model one + // Second level INSIDE a row, for tools that come in variants: "Rectangle" holds corner, + // centre, oblique and rounded. nullptr = sits directly in the row. Keeps the row's own + // address fixed (L4.1) while the variants hang one level below it, mirroring the toolbar's + // grouping instead of flattening 19 create tools into one wall. + const char* family; + const char* icon; // resources/images name, or nullptr — the offer draws it beside the row + const char* hint; // what the verb does / what to click; shown on hover +}; + +// Row labels, in ratified order. +static const char* const kOfferRowNames[] = { + "Create", + "Add material", + "Remove", + "Fillet / chamfer / draft", + "Repeat", + "Transform", + "Reference", + "Modify", +}; +static const int kOfferRowCount = 8; + +static const OfferVerb kOfferVerbs[] = { + {"sketch", "Sketch", 0, "Shift+S", "key:S+S", "Click a face or a reference plane in the viewport, then a sketch tool", 0x00000403u, 0, 0, false, false, nullptr, "design_sketch", "Click a face or a reference plane, then pick a drawing tool"}, + {"extrude", "Extrude", 1, "Shift+E", "key:S+E", "Create a sketch, or pick a solid face, first", 0x00004002u, 0, 0, false, false, nullptr, "design_extrude", "Extrude a sketch profile, or push/pull a picked face"}, + {"revolve", "Revolve", 1, "Shift+R", "key:S+R", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve", "Revolve a profile about an axis"}, + {"sweep", "Sweep", 1, "Shift+W", "key:S+W", "Create a profile sketch to sweep first", 0x00004000u, 0, 2, false, false, nullptr, "design_sweep", "Sweep a profile along a path"}, + {"loft", "Loft", 1, "Shift+L", "key:S+L", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft", "Loft (skin) between two or more profiles"}, + {"thicken", "Thicken", 1, nullptr, "fly:material#4", "Thicken needs a solid body — add or import one first", 0x0000000au, 1, 0, false, false, nullptr, "design_thicken", "Offset a solid face into a thin plate (new body)"}, + {"rib", "Rib", 1, nullptr, "fly:material#5", "Rib needs a solid body — add or import one first", 0x00010000u, 1, 0, false, false, nullptr, "design_rib", "Grow a thin wall from an open sketch line, fused to a body"}, + {"boolean", "Union", 1, "Shift+B", "btn:bool#0", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Fuse the tool body into the target — one solid, no seam"}, + {"bool_subtract", "Subtract", 1, nullptr, "btn:bool#1", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Cut the tool body out of the target"}, + {"bool_intersect", "Intersect", 1, nullptr, "btn:bool#2", "Boolean needs two bodies — create or import a second solid", 0x00000200u, 2, 0, false, false, nullptr, "design_boolean", "Keep only where the two bodies overlap"}, + {"surf_extrude", "Surface Extrude", 1, "Shift+G", "key:S+G", "Create a sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_extrude", "Extrude a sketch into a sheet body (no end caps)"}, + {"surf_revolve", "Surface Revolve", 1, nullptr, "fly:surface#1", "Create a sketch profile to revolve first", 0x00004000u, 0, 0, false, false, nullptr, "design_revolve", "Revolve a sketch profile into a sheet body"}, + {"surf_loft", "Surface Loft", 1, nullptr, "fly:surface#2", "Create at least two profile sketches to loft", 0x00004000u, 0, 2, false, false, nullptr, "design_loft", "Loft (skin) between 2+ profiles, open (no end caps)"}, + {"surf_fill", "Surface Fill", 1, nullptr, "fly:surface#3", "Create a closed sketch first", 0x00004000u, 0, 0, false, false, nullptr, "design_surface", "Fill a sketch boundary with a smooth face"}, + {"thicken_surf", "Thicken Surface", 1, nullptr, "fly:surface#5", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_thicken", "Thicken a sheet body into a solid"}, + {"hole", "Hole", 2, "Shift+H", "key:S+H", "Pick a face or a plane to drill into", 0x00000402u, 1, 0, false, false, nullptr, "design_hole", "Drill a hole, centred on a picked face or placed on a plane"}, + {"thread", "Thread", 2, "Shift+T", "key:S+T", "Pick a cylindrical surface (bore / outer) or a circular edge for a thread", 0x00000024u, 1, 0, false, false, nullptr, "design_thread", "Thread a cylindrical surface (inner bore / outer) or a circular edge"}, + {"shell", "Shell", 2, "Shift+K", "key:S+K", "Shell needs a solid body", 0x00000082u, 1, 0, false, false, nullptr, "design_shell", "Hollow the body to a wall thickness, opening a picked face"}, + {"cut", "Cut", 2, "Shift+X", "key:S+X", "Create a solid body to cut first", 0x000004feu, 1, 0, false, false, nullptr, "design_cut", "Trim the body with a plane — drag the offset arrow; keep one half or both"}, + {"split", "Split", 2, nullptr, nullptr, "Split needs a solid body", 0x000000feu, 1, 0, false, false, nullptr, nullptr, "Split the body along a picked face into two solids"}, + {"fillet", "Fillet", 3, "Shift+F", "btn:dress#0", "Pick an edge to round", 0x000000b2u, 1, 0, false, false, nullptr, "design_filletedge", "Pick an edge, then drag the radius arrow or type it"}, + {"chamfer", "Chamfer", 3, nullptr, "btn:dress#1", "Pick an edge to bevel", 0x000000b2u, 1, 0, false, false, nullptr, "design_chamfer", "Pick an edge, then drag the distance arrow or type it"}, + {"draft", "Draft", 3, "Shift+D", "key:S+D", "Pick a face to taper", 0x0000000au, 1, 0, false, false, nullptr, "design_draft", "Tilt a picked face by a draft angle"}, + {"surf_offset", "Surface Offset", 3, nullptr, "fly:surface#4", "target is not a sheet body", 0x00000100u, 0, 0, true, false, nullptr, "design_offset", "Offset a sheet body's shell by a signed distance"}, + {"pattern", "Linear pattern", 4, "Shift+N", "btn:pat#0", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_array", "Repeat the body along a direction — drag the spacing, set the count"}, + {"pattern_circular", "Circular pattern", 4, nullptr, "btn:pat#1", "Create a solid body to pattern first", 0x00006082u, 1, 0, false, false, nullptr, "design_polararray", "Repeat the body around an axis — set the count and sweep"}, + {"mirror", "Mirror", 4, "Shift+Z", "key:S+Z", "Mirror needs a body — add or import one first", 0x000004feu, 1, 0, false, false, nullptr, "design_mirror", "Reflect a body about a plane"}, + {"pat_curve", "Pattern on Curve", 4, nullptr, nullptr, "Pattern on curve needs a body and a curve", 0x00000090u, 1, 0, false, false, nullptr, nullptr, "Repeat the body along a picked curve"}, + {"transform", "Move", 5, "Shift+Y", "key:S+Y", "Transform needs a body — add or import one first", 0x000021feu, 1, 0, false, false, nullptr, "design_move", "Move and/or rotate an existing body"}, + {"mate", "Mate", 5, nullptr, "fly:placement#2", "A mate needs two coordinate systems", 0x00001202u, 2, 0, false, false, nullptr, "design_c_coincident", "Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)"}, + {"align", "Align to", 5, nullptr, nullptr, "Align needs a body", 0x00000002u, 1, 0, false, false, nullptr, nullptr, "Align the body to a picked face or plane"}, + {"plane", "Plane", 6, "Shift+P", "key:S+P", nullptr, 0x00000453u, 0, 0, false, false, nullptr, "design_plane", "Reference plane (offset / tilt / midplane / tangent / two edges / coincident)"}, + {"axis", "Axis", 6, "Shift+A", "key:S+A", nullptr, 0x00000057u, 0, 0, false, false, nullptr, "design_line", "Datum axis (two points, face normal, cylinder centerline, two planes, along edge)"}, + {"coordsys_v", "Coord Sys", 6, "Shift+C", "key:S+C", nullptr, 0x00000043u, 0, 0, false, false, nullptr, "design_point", "Datum coordinate system (world point, or face + direction edge)"}, + {"helix", "Helix", 6, nullptr, "fly:plane#3", nullptr, 0x00000405u, 0, 0, false, false, nullptr, "design_thread", "Helical curve (spring path) — use as a sweep path for coils / springs / augers"}, + {"project", "Project", 6, nullptr, "fly:plane#4", "Project needs a body — add or import one first", 0x00000482u, 1, 0, false, false, nullptr, "design_sketch", "Project body edges onto a plane as sketch entities"}, + {"measure", "Measure", 6, nullptr, nullptr, nullptr, 0x000b03feu, 0, 0, false, false, nullptr, nullptr, "Measure between the picked points, edges or faces"}, + {"mass_props", "Mass", 6, nullptr, "btn:mass", nullptr, 0x000000feu, 1, 0, false, false, nullptr, "info", "Report the volume and surface area of the selected body"}, + {"interference", "Interference", 6, nullptr, nullptr, nullptr, 0x00000200u, 2, 0, false, false, nullptr, nullptr, "Check whether two bodies overlap — reports, changes nothing"}, + {"edit_feature", "Edit", 7, nullptr, "btn:edit", nullptr, 0x00007d8eu, 0, 0, false, false, nullptr, "design_edit", "Reopen the selected feature to change what it was made from"}, + {"rename", "Rename…", 7, "F2", "btn:rename", "Select a feature, or a body, to rename it", 0x00004080u, 0, 0, false, false, nullptr, nullptr, "Give this feature a name you will recognise in the tree (a body takes its name from the feature that makes it)"}, + {"delete_face", "Delete Face", 7, nullptr, "fly:dressup#3", "Delete Face needs a body — add or import one first", 0x0000000eu, 1, 0, false, false, nullptr, "design_delete", "Remove faces from a body and heal the solid"}, + {"colour", "Colour", 7, nullptr, "btn:colour", nullptr, 0x000001feu, 1, 0, false, false, nullptr, "color_palette", "Set the selected body's display colour"}, + {"delete", "Delete", 7, "Del", "btn:delete", nullptr, 0x000f7c00u, 0, 0, false, false, nullptr, "design_delete", "Delete what is selected"}, + {"delete_body", "Delete Body", 7, nullptr, "btn:delete_body", nullptr, 0x000001feu, 1, 0, false, false, nullptr, "design_delete", "Delete this whole body — removes the feature it was made from"}, + {"sk_line_t", "Line", 0, "L", "key:L", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_line", "Line — click start, then end"}, + {"sk_polyline", "Polyline", 0, nullptr, "fly:design_line#1", nullptr, 0x000f8000u, 0, 0, false, true, "Line", "design_polyline", "Click points; click the first point to close the loop, right-click to end it open"}, + {"sk_rect", "Corner rectangle", 0, "R", "key:R", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect", "Rectangle — click two opposite corners"}, + {"sk_rect_center", "Centre rectangle", 0, nullptr, "fly:design_rect#1", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_crect", "Click center, then a corner"}, + {"sk_rect_oblique", "Oblique rectangle", 0, nullptr, "fly:design_rect#2", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_oblique", "Click two corners of one edge, then a point for the width"}, + {"sk_rect_rounded", "Rounded rectangle", 0, nullptr, "fly:design_rect#3", nullptr, 0x000f8000u, 0, 0, false, true, "Rectangle", "design_rect_rounded", "Click two opposite corners, then a point for the corner radius"}, + {"sk_circle", "Centre circle", 0, "C", "key:C", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle", "Circle — click center, then radius"}, + {"sk_circle_2pt", "2-point circle", 0, nullptr, "fly:design_circle#1", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle2pt", "Click two ends of the diameter"}, + {"sk_circle_3pt", "3-point circle", 0, nullptr, "fly:design_circle#2", nullptr, 0x000f8000u, 0, 0, false, true, "Circle", "design_circle3pt", "Click three points on the circle"}, + {"sk_arc_t", "3-point arc", 0, "A", "key:A", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc3pt", "Arc — click start, end, then a point"}, + {"sk_arc_tangent", "Tangent arc", 0, nullptr, "fly:design_arc3pt#1", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_tangentarc", "Click start (on the last entity) then end"}, + {"sk_arc_center", "Centre-point arc", 0, nullptr, "fly:design_arc3pt#2", nullptr, 0x000f8000u, 0, 0, false, true, "Arc", "design_arc_center", "Click center, then start, then a point for the end angle"}, + {"sk_slot", "Slot", 0, "S", "key:S", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot", "Slot — two centerline ends, then end radius"}, + {"sk_slot_arc", "Arc slot", 0, nullptr, "fly:design_slot#1", nullptr, 0x000f8000u, 0, 0, false, true, "Slot", "design_slot_arc", "Click center, start, end, then a point for the width"}, + {"sk_ellipse", "Ellipse", 0, "E", "key:E", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse", "Ellipse — center, major end, minor point"}, + {"sk_ellipse_arc", "Elliptical arc", 0, nullptr, "fly:design_ellipse#1", nullptr, 0x000f8000u, 0, 0, false, true, "Ellipse", "design_ellipse_arc", "Click center, major-axis end, minor point, then arc start and end"}, + {"sk_spline", "Spline", 0, "B", "key:B", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_bspline", "Spline — click control points"}, + {"sk_poly_3", "Triangle", 0, nullptr, "btn:poly#3", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Triangle — click centre, then a vertex"}, + {"sk_poly_4", "Square", 0, nullptr, "btn:poly#4", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Square — click centre, then a vertex"}, + {"sk_poly_5", "Pentagon", 0, nullptr, "btn:poly#5", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Pentagon — click centre, then a vertex"}, + {"sk_polygon", "Hexagon", 0, "G", "btn:poly#6", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Hexagon — click centre, then a vertex"}, + {"sk_poly_8", "Octagon", 0, nullptr, "btn:poly#8", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Octagon — click centre, then a vertex"}, + {"sk_poly_12", "Dodecagon", 0, nullptr, "btn:poly#12", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Dodecagon — click centre, then a vertex"}, + {"sk_poly_inscribed", "Inscribed", 0, nullptr, "btn:polyfit#0", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Measure the polygon to its corners (inscribed)"}, + {"sk_poly_circumscribed", "Circumscribed", 0, nullptr, "btn:polyfit#1", nullptr, 0x000f8000u, 0, 0, false, true, "Polygon", "design_polygon", "Measure the polygon to its flats (circumscribed)"}, + {"sk_point_t", "Point", 0, "P", "key:P", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_point", "Point — click to place"}, + {"sk_text", "Text", 0, nullptr, "btn:text", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_text", "Type text; its outline is added to this sketch as editable lines"}, + {"sk_svg", "SVG", 0, nullptr, "btn:svg", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_svg", "Import an SVG outline into this sketch as editable lines"}, + {"sk_offset", "Offset", 1, "O", "key:O", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_offset", "Offset — pick an entity, drag the distance"}, + {"sk_trim", "Trim", 2, "T", "key:T", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_trim", "Trim — click a segment to trim it"}, + {"sk_fillet", "Fillet", 3, "F", "key:F", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_filletedge", "Fillet — pick two lines, set the radius"}, + {"sk_chamfer", "Chamfer", 3, "H", "key:H", nullptr, 0x00090000u, 0, 0, false, true, nullptr, "design_chamfer", "Chamfer — pick two lines, set the distance"}, + {"sk_array", "Linear array", 4, nullptr, "fly:design_array#0", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_array", "Pick entities, drag the spacing handle, click the count; click empty to apply"}, + {"sk_array_polar", "Polar array", 4, nullptr, "fly:design_array#1", nullptr, 0x000b0000u, 0, 0, false, true, "Array", "design_polararray", "Pick entities, drag the sweep handle, click the count; click empty to apply"}, + {"sk_mirror", "Mirror", 4, "M", "key:M", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_mirror", "Mirror — pick axis, then entities"}, + {"sk_move", "Move", 5, nullptr, "fly:design_move#0", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_move", "Pick entities, then drag the handle or click the distance; click empty to apply"}, + {"sk_rotate", "Rotate", 5, nullptr, "fly:design_move#1", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_rotate", "Pick entities, then drag around the pivot or click the angle; click empty to apply"}, + {"sk_scale", "Scale", 5, nullptr, "fly:design_move#2", nullptr, 0x000f0000u, 0, 0, false, true, "Move", "design_scale", "Pick entities, then drag the handle or click the factor; click empty to apply"}, + {"sk_dimension", "Dimension", 6, "D", "key:D", nullptr, 0x000f8000u, 0, 0, false, true, nullptr, "design_dimension", "Dimension — click 2 points or an entity"}, + {"sk_constrain", "Constrain", 6, "K", "key:K", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_constrain", "Constrain the selected sketch entities to each other"}, + // Same verb, model-mode vocabulary: offered when a SKETCH is selected (bit 14, SkLoop), the + // state a user is in right after finishing one. Without this row the only way in was the + // toolbar icon, and constraints read as absent — see the Onshape-comparison report. + {"constrain", "Constrain sketch", 7, nullptr, "btn:constrain", "Select a sketch to constrain it", 0x00004000u, 0, 1, false, false, nullptr, "design_constrain", "Add dimensions and relations (coincident, tangent, parallel...) to the selected sketch"}, + {"sk_construct", "Construction", 6, "Q", "key:Q", nullptr, 0x000b8000u, 0, 0, false, true, nullptr, nullptr, "Toggle construction: geometry that guides but is never built"}, + {"sk_extend", "Extend", 7, "X", "key:X", nullptr, 0x000b0000u, 0, 0, false, true, nullptr, "design_extend", "Extend — click a line/arc to extend it"}, + {"sk_delete", "Delete", 7, "Del", "btn:sk_delete", nullptr, 0x000f0000u, 0, 0, false, true, nullptr, "design_delete", "Delete the selected sketch entities"}, + // Typing the defining number of the element you pointed at. Three rows rather than one so + // each names the quantity in the drawing-office word for THAT element; all three land on + // the same handler, because dimension_kind() already resolves the quantity from the + // selection. Without these, an element's own numbers were reachable only by arming the + // Dimension tool and re-picking geometry that was already selected. + {"sk_length", "Length…", 7, "V", "key:V", nullptr, 0x00010000u, 0, 0, false, true, nullptr, "design_dimension", "Type the length of this line"}, + {"sk_radius", "Radius / diameter…", 7, "V", "key:V", nullptr, 0x00020000u, 0, 0, false, true, nullptr, "design_dimension", "Type the radius of this arc, or the diameter of this circle"}, + {"sk_angdist", "Angle / distance…", 7, "V", "key:V", nullptr, 0x00080000u, 0, 0, false, true, nullptr, "design_dimension", "Type the angle between two lines, or the distance between the two picks"}, +}; +static const int kOfferVerbCount = 92; + +}} // namespace Slic3r::GUI + +#endif // slic3r_GUI_DesignOffer_hpp_ diff --git a/src/slic3r/GUI/CAD/DesignPanel.cpp b/src/slic3r/GUI/CAD/DesignPanel.cpp new file mode 100644 index 0000000000..d6e0329ef8 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignPanel.cpp @@ -0,0 +1,11775 @@ +#include "slic3r/GUI/CAD/DesignPanel.hpp" +#include "slic3r/GUI/CAD/DesignCanvas.hpp" +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" +#include "slic3r/GUI/CAD/DesignOffer.hpp" // generated offer table — see docs/ux/tool_atlas.json +#include "libslic3r/CAD/GeometryEngine.hpp" // face_by_index for face-extrude gizmo anchor +#include "libslic3r/TriangleMesh.hpp" // mesh import: STL/OBJ -> indexed_triangle_set +#include "libslic3r/Format/OBJ.hpp" +#include "libslic3r/Format/bbs_3mf.hpp" // put_other_changes: mark the project dirty outside the undo stack + +#include +#include +#include // the offer/atlas join check reports on the log +#include + +#include +#include // offer_trace: diagnostic row dump for the offer ladder +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include // wxWindowDisabler, wxMilliSleep +#include // wxMessageBox + +#include +#include +#include +#include +#include +#include +#include + +#include "slic3r/GUI/wxExtensions.hpp" // ScalableButton, create_scaled_bitmap +#include "slic3r/GUI/Widgets/Label.hpp" // HarmonyOS Sans fonts (Head_*/Body_*) shared with the rest of Orca +#include "slic3r/GUI/Widgets/DropDown.hpp" // Orca-themed combo dropdown (white/teal selector) for the tool flyouts +#include "slic3r/GUI/Widgets/Button.hpp" // Orca-styled Button (ButtonStyle/ButtonType) — same look as Prepare +#include "slic3r/GUI/Widgets/CheckBox.hpp" // Orca teal check (label lives in the row's left column) +#include "slic3r/GUI/Widgets/ComboBox.hpp" // Orca dropdown — replaces wxChoice in every Design card +#include "slic3r/GUI/Widgets/StaticBox.hpp" // Prepare's rounded white card frame around each tool dialog +#include "libslic3r/CAD/SketchImport.hpp" // text_to_regions / svg_to_regions +#include "libslic3r/CAD/ThreadStandards.hpp" // ISO metric / Unified imperial thread tables +#include "libslic3r/Model.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "libslic3r/BuildVolume.hpp" +#include "slic3r/GUI/MainFrame.hpp" +#include "slic3r/GUI/GUI_ObjectList.hpp" + +// English-only pin for the Design tab (see design-ux-contract): one lever +// de-translates this whole TU so our strings never half-translate against the host's +// localized chrome. Host UI still follows the app locale; only this tab is pinned EN. +// GOTCHA: every _L(...) in this file must take a STRING LITERAL (FromUTF8 wants const char*). +#ifdef _L +#undef _L +#endif +#define _L(s) wxString::FromUTF8(s) + +namespace Slic3r { namespace GUI { + +// Mesh -> B-rep import defaults (see GeometryEngine::mesh_to_brep). +// Tolerance is a vertex-dedup cell, not a sew tolerance: 10 um is well under any printable +// feature yet coarse enough to weld the float noise a mesh exporter leaves on shared vertices. +static constexpr double MESH_IMPORT_TOLERANCE = 0.01; // mm +// Merge coplanar neighbours so the body has real, pickable faces instead of one face per +// triangle. 5 deg tolerates the small normal jitter of an exported/scanned flat face while +// still keeping genuinely curved regions faceted. +static constexpr double MESH_IMPORT_MERGE_ANGLE_DEG = 5.0; +// Above this, warn before converting: the build is one OCCT face per triangle. +static constexpr size_t MESH_IMPORT_TRIANGLE_WARN = 50000; + +// Two-column parameter form (label left, control right), matching Prepare's row idiom. The +// control column grows, so every control lines up on the panel's right edge instead of sitting +// at its natural width beside the label — the forms used a plain non-growable grid before, which +// is why Design's rows looked nothing like Prepare's. +static wxFlexGridSizer* two_col_form() +{ + auto* f = new wxFlexGridSizer(2, 6, 8); + f->AddGrowableCol(1, 1); + f->SetFlexibleDirection(wxHORIZONTAL); + return f; +} + + +// Orca's dropdown, sized like Prepare's sidebar combos. Read-only: every Design +// picker is a fixed list, never free text. +static ComboBox* make_combo(wxWindow* parent) +{ + // Explicit width: ComboBox's natural best size is its widest item, which inflated the + // sidebar's virtual width past the viewport and left the panel horizontally scrolled — + // that is what clipped the first letter of every label. The form column grows anyway. + auto* c = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, + wxSize(parent->FromDIP(90), parent->FromDIP(24)), 0, nullptr, wxCB_READONLY); + c->SetMinSize(wxSize(parent->FromDIP(90), parent->FromDIP(24))); + return c; +} + +// Append a row that carries a feature/body index as client data. +// +// It must go through SetClientData(), not Append()'s clientData argument. Orca's ComboBox keeps +// client data in its own vector and its Append() writes that vector directly, never routing +// through wxItemContainer — so the container's m_clientDataItemsType stays wxClientData_None. +// wxItemContainer::GetClientData() opens with +// wxCHECK_MSG( HasClientUntypedData(), NULL, ... ); +// and wxCHECK_MSG is an early RETURN, not a debug-only assert. So the read handed back NULL for +// every row and every caller resolved it to index 0 no matter what the user had picked — silently, +// because index 0 is a legal answer. SetClientData() flips the type to wxClientData_Void, after +// which the value survives the round trip. +static int combo_append_index(ComboBox* c, const wxString& label, int index) +{ + const int row = c->Append(label, wxNullBitmap); + c->SetClientData(unsigned(row), reinterpret_cast(intptr_t(index))); + return row; +} + +// Format a value with the international ('.') decimal separator regardless of the +// app's LC_NUMERIC locale (wx sets it to the user locale at startup). snprintf may +// emit a comma, so normalise it. +static wxString en_format(double v, int digits = 2) +{ + char fmt[16]; + std::snprintf(fmt, sizeof(fmt), "%%.%df", digits); + char buf[64]; + std::snprintf(buf, sizeof(buf), fmt, v); + for (char* c = buf; *c; ++c) if (*c == ',') *c = '.'; + return wxString::FromUTF8(buf); +} +// Parse a user-typed value accepting either '.' or ',' as the decimal separator. +static bool en_parse(const wxString& text, double& out) +{ + wxString t(text); + t.Replace(wxT(","), wxT(".")); + return t.ToCDouble(&out); +} + +// Design-tab chrome tokens. The dark branch returns the EXACT legacy values so the +// (correct) dark theme stays byte-identical; the light branch maps each onto Orca's +// light surface so the ribbon/sidebar follow the app theme instead of staying black. +static bool dp_dark() { return wxGetApp().dark_mode(); } +static wxColour dp_ribbon_bg() { return dp_dark() ? wxColour(0x36,0x36,0x3C) : wxColour(0xEC,0xEC,0xEE); } +static wxColour dp_ribbon_hover() { return dp_dark() ? wxColour(0x4D,0x4D,0x54) : wxColour(0xD7,0xD7,0xDB); } +static wxColour dp_panel_bg() { return dp_dark() ? wxColour(0x2D,0x2D,0x30) : wxColour(0xFB,0xFB,0xFD); } +static wxColour dp_sec_text() { return dp_dark() ? wxColour(0x81,0x81,0x83) : wxColour(0x66,0x66,0x68); } +static wxColour dp_ctl_text() { return dp_dark() ? wxColour(0xC8,0xC8,0xC8) : wxColour(0x35,0x35,0x37); } +static wxColour dp_item_text() { return dp_dark() ? wxColour(0xE0,0xE0,0xE0) : wxColour(0x2C,0x2C,0x2E); } +static wxColour dp_item_dim() { return dp_dark() ? wxColour(0x80,0x80,0x80) : wxColour(0xA0,0xA0,0xA2); } + +// Prepare's control-outline grey, sampled from its sidebar: #4A4A51 on the #2D2D31 dark +// panel, #DBDBDB on light. Every framed thing in Design uses this so the tab matches. +static wxColour dp_border_col() { return dp_dark() ? wxColour(0x4A,0x4A,0x51) : wxColour(0xDB,0xDB,0xDB); } + +// A tool card: Prepare's rounded white-bordered panel (Plater.cpp's panel_printer_preset +// idiom — radius 8, #EEEEEE border, green on hover). Every card's controls are parented +// to it, so the border actually encloses them. +static StaticBox* make_card(wxWindow* parent) +{ + auto* c = new StaticBox(parent); + c->SetCornerRadius(8); + c->SetBorderColorNormal(dp_border_col()); // no hover accent: the frame is not clickable + return c; +} + +// Prepare outlines every numeric field (rounded, #4A4A51 on dark). wxSpinCtrlDouble is a +// native GTK control that cannot draw that, and Orca's own SpinInput is int-only — it would +// silently truncate a 2.5 mm radius. So the double spin keeps its arrows and validation and +// sits inside an Orca StaticBox that supplies the frame. spin_frame() returns that box, which +// is what goes into the layout sizer. +static wxSpinCtrlDouble* make_spin(wxWindow* parent, double val, + double mn = 0.1, double mx = 1000.0) +{ + auto* box = new StaticBox(parent); + box->SetCornerRadius(4); + box->SetBorderColorNormal(dp_border_col()); + auto* s = new wxSpinCtrlDouble(box, wxID_ANY, "", wxDefaultPosition, wxSize(90, -1), + wxSP_ARROW_KEYS | wxBORDER_NONE); + s->SetRange(mn, mx); + s->SetDigits(2); + s->SetValue(val); + // THE WHEEL SCROLLS THE PANEL, IT DOES NOT EDIT THE VALUE. wxSpinCtrlDouble takes the wheel + // whenever the pointer is over it, so a card taller than the panel could not be scrolled past + // without silently incrementing whatever field happened to be under the cursor — measured: + // eight notches turned an X hint from 1,00 into 6,00, and the same gesture over an Extrude + // distance or a mate Offset is a silent model change made by someone who thought they were + // navigating. Skipping the event lets it reach the scrolled cards panel. A spin the user has + // deliberately focused still takes the wheel, which is the one case where editing is meant. + s->Bind(wxEVT_MOUSEWHEEL, [s](wxMouseEvent& e) { + if (wxWindow::FindFocus() == s) e.Skip(); // focused: wheel edits, as expected + else if (wxWindow* p = s->GetParent()) // otherwise hand it to the panel + wxPostEvent(p, e); + }); + auto* sz = new wxBoxSizer(wxHORIZONTAL); + sz->Add(s, 1, wxEXPAND | wxALL, parent->FromDIP(2)); + box->SetSizer(sz); + return s; +} + +// The framed spin's parent IS its frame; lay that out instead of the bare control. +static wxWindow* spin_frame(wxWindow* spin) { return spin->GetParent(); } + +static SketchPlane plane_from_index(int i) +{ + switch (i) { + case 1: return SketchPlane::XZ(); + case 2: return SketchPlane::YZ(); + default: return SketchPlane::XY(); + } +} + +// Inverse of plane_from_index: recover the ComboBox row from a plane's normal. +// XY normal=(0,0,1)->0, XZ normal=(0,1,0)->1, YZ normal=(1,0,0)->2. +static int index_from_plane(const SketchPlane& p) +{ + if (std::abs(p.normal.y()) > 0.5) return 1; // XZ + if (std::abs(p.normal.x()) > 0.5) return 2; // YZ + return 0; // XY +} + +// Does this plane survive a round trip through the Hole/Thread plane dropdown? The dropdown holds +// only XY/XZ/YZ and index_from_plane SNAPS anything else to the nearest of the three, so a plane +// that is not one of them cannot be restored from the row and has to be carried explicitly. +// Origin is compared too, not just the axes: a face plane parallel to XY but 12 mm up snaps to +// row 0 and would otherwise come back at z=0. Vector norms rather than isApprox, which compares +// relative to magnitude and so is useless against the zero origin. +// modeling_origin is not optional: hole_plane()/thread_plane() ADD it to the dropdown plane before +// the feature stores it, so on a document with a shifted origin every dropdown hole would fail a +// bare XY/XZ/YZ comparison and be mistaken for a face pick. +static bool is_base_plane(const SketchPlane& p, const Vec3d& modeling_origin) +{ + SketchPlane b = plane_from_index(index_from_plane(p)); + b.origin += modeling_origin; + const double e = 1e-6; + return (p.origin - b.origin).norm() < e && (p.normal - b.normal).norm() < e + && (p.x_axis - b.x_axis).norm() < e && (p.y_axis - b.y_axis).norm() < e; +} + +// #2: a sketch plane on `face` with origin at the face centroid and normal pointing INTO the +// solid, so a positioned hole drills inward and its (x,y) read as the offset from the face +// centre. A hole is rotationally symmetric, so the arbitrary in-plane basis is harmless. +static SketchPlane face_plane_inward(const TopoDS_Face& face) +{ + SketchPlane p; + p.origin = GeometryEngine::face_centroid_world(face); + p.normal = (-GeometryEngine::face_normal_world(face)).normalized(); // inward + // Align the in-plane x-axis with the face's LONGEST straight edge so the (u,v) frame matches + // the face sides — then "distance from a side" (the hole construction dims) reads correctly. + Vec3d x(0, 0, 0); double best = 0; + for (const TopoDS_Edge& e : GeometryEngine::edges_of_face(face)) { + const std::vector pts = GeometryEngine::sample_edge_world(e); + if (pts.size() < 2) continue; + Vec3d d = pts.back() - pts.front(); + d = d - p.normal * d.dot(p.normal); // project the edge direction into the plane + const double len = d.norm(); + if (len > best) { best = len; x = d / len; } + } + if (best < 1e-9) { // curved/edgeless face: fall back to an arbitrary in-plane basis + const Vec3d ref = std::abs(p.normal.z()) < 0.9 ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + x = ref.cross(p.normal).normalized(); + } + p.x_axis = x.normalized(); + p.y_axis = p.normal.cross(p.x_axis).normalized(); + return p; +} + +// Highest upward-facing planar face of a solid — the surface the user is looking down on. +// Hole placement defaults here (instead of the z=0 datum) so the footprint sits on the top +// face at the right depth, not on the model's underside where a top-view drag reads parallax- +// shifted. Returns -1 if the shape has no clearly-upward face. +static int top_face_index_of(const TopoDS_Shape& shape) +{ + int best = -1; double bestz = -1e30; + const int n = GeometryEngine::face_count(shape); + for (int i = 0; i < n; ++i) { + const TopoDS_Face f = GeometryEngine::face_by_index(shape, i); + if (f.IsNull()) continue; + const Vec3d nrm = GeometryEngine::face_normal_world(f); + if (nrm.z() < 0.5) continue; // only faces pointing substantially up + const Vec3d c = GeometryEngine::face_centroid_world(f); + if (c.z() > bestz) { bestz = c.z(); best = i; } + } + return best; +} + +DesignPanel::DesignPanel(wxWindow* parent) + : wxPanel(parent, wxID_ANY) +{ + // Left column: a slim feature-tree + docked tool-dialog column. All form + // controls are parented to m_form so it can scroll independently of the + // live GL viewport. The tool buttons live in the top toolbar (built below). + m_form = new wxScrolledWindow(this, wxID_ANY); + // The sidebar/panel never carried an explicit background, so in light theme it + // inherited the dark window colour and stayed black. Paint it on the light surface; + // dark is left untouched (it already reads correctly via inheritance). + if (!dp_dark()) { + SetBackgroundColour(dp_panel_bg()); + m_form->SetBackgroundColour(dp_panel_bg()); + } + + auto* root = new wxBoxSizer(wxVERTICAL); + { + auto* hdr = new wxStaticText(m_form, wxID_ANY, _L("Design")); + hdr->SetFont(Label::Head_16); // Orca shared HarmonyOS section-title font + root->Add(hdr, 0, wxLEFT | wxRIGHT | wxTOP, 12); + root->AddSpacer(2); + } + + // === Top contextual toolbar (Onshape-style icon strip) === + // Parented to the panel (sits above the form/viewport row). Only the active + // mode's group is shown; the others are hidden by set_ui_mode(). + // Scrollable ribbon: on a narrow/windowed screen the far-right action bar (Confirm/Cancel) + // used to be clipped off the edge with no way to reach it. Horizontal-only scroll (vertical + // rate 0) keeps it reachable; on a wide screen the stretch spacer still pins it far-right. + m_toolbar = new wxScrolledWindow(this, wxID_ANY); + m_toolbar->SetScrollRate(15, 0); + m_toolbar->ShowScrollbars(wxSHOW_SB_DEFAULT, wxSHOW_SB_NEVER); + // Theme-aware tool ribbon: dark uses Orca's elevated surface (#36363C / hover + // #4D4D54); light maps onto the app's light chrome so the strip follows the theme. + m_toolbar->SetBackgroundColour(dp_ribbon_bg()); + + const wxColour tb_bg = dp_ribbon_bg(); + const wxColour tb_hover = dp_ribbon_hover(); + auto icon_btn = [this, tb_bg, tb_hover](const char* icon, const wxString& tip) { + // Prepare's main toolbar: 40 px icon cell, 4 px gap (GLToolbar::Default_Icons_Size + // and set_gap_size(4)) -> 44 px pitch. Match it exactly. + auto* b = new ScalableButton(m_toolbar, wxID_ANY, icon, "", wxSize(40, 40), + wxDefaultPosition, wxBU_EXACTFIT | wxBORDER_NONE, false, 34); + b->SetToolTip(tip); + b->SetBackgroundColour(tb_bg); + m_tool_btns.push_back(b); + // Hover affordance, honouring the active-tool teal state. + b->Bind(wxEVT_ENTER_WINDOW, [this, b, tb_hover](wxMouseEvent& e) { + b->SetBackgroundColour(b == m_active_tool_btn ? wxColour(0x52, 0xC7, 0xB8) : tb_hover); + b->Refresh(); e.Skip(); }); + b->Bind(wxEVT_LEAVE_WINDOW, [this, b, tb_bg](wxMouseEvent& e) { + b->SetBackgroundColour(b == m_active_tool_btn ? wxColour(0x00, 0x96, 0x88) : tb_bg); + b->Refresh(); e.Skip(); }); + // Mark this tool active (teal) on press — a separate event from the + // button's command handler, so it never swallows the click action. + b->Bind(wxEVT_LEFT_DOWN, [this, b](wxMouseEvent& e) { + set_active_tool_btn(b); e.Skip(); }); + return b; + }; + // Small grey group caption (Onshape-style section hint) for each toolbar mode. + auto caption = [this](const wxString& t) { + auto* s = new wxStaticText(m_toolbar, wxID_ANY, t); + wxFont f = Label::Body_12; f.SetWeight(wxFONTWEIGHT_BOLD); + s->SetFont(f); + s->SetForegroundColour(dp_sec_text()); // Orca dark secondary text + return s; + }; + auto add_sep = [this](wxSizer* row) { + row->AddSpacer(5); + row->Add(new wxStaticLine(m_toolbar, wxID_ANY, wxDefaultPosition, wxSize(1, 22), wxLI_VERTICAL), + 0, wxALIGN_CENTER_VERTICAL); + row->AddSpacer(5); + }; + + // Shared sketch-tool selector: begins a session on first use, then switches + // the active entity tool. The Construction toggle marks following entities as + // construction geometry (excluded from the wire). + m_construction = new wxCheckBox(m_toolbar, wxID_ANY, _L("Construction")); + m_construction->SetForegroundColour(dp_ctl_text()); + auto select_tool = [this](DesignSketchTool::Mode mode, const wxString& hint) { + if (!m_viewport) return; + if (!m_viewport->is_sketching()) { + wxString on; + const SketchPlane plane = sketch_plane_from_selection(on); + m_viewport->begin_sketch(plane, mode); + m_construction->SetValue(false); // a fresh session starts non-construction + m_sketch_on = on; // shown with the tool hint, so the target is visible + // The face has been CONSUMED as the sketch plane, so drop the pick. Leaving it live + // meant the next Extrude saw a selected face and push/pulled it instead of extruding + // the sketch just drawn — the same trap the imported-art path already guards against. + if (m_sel_solid_face >= 0 || m_pick_face >= 0) { + m_sel_solid_face = m_sel_solid_edge = m_sel_solid_body = -1; + m_pick_face = m_pick_face_body = -1; + } + } else { + m_viewport->set_sketch_tool(mode); + } + m_viewport->set_sketch_construction(m_construction->GetValue()); + m_status->SetForegroundColour(wxNullColour); + set_status(m_sketch_on.IsEmpty() ? hint + : wxString::Format(_L("%s · on %s"), hint, m_sketch_on)); + m_status->Refresh(); + }; + + // Sketch-tool shortcuts (single letters, active only while a sketch is open). Family tools + // bind to their default mode; the other modes stay in the toolbar flyout. Registered here + // where select_tool is in scope; the closures run at key-press time (members are live by then). + auto sk_key = [this, select_tool](int ch, DesignSketchTool::Mode m, const wxString& h) { + m_keys_sketch[ch] = [select_tool, m, h] { select_tool(m, h); }; + }; + sk_key('L', DesignSketchTool::Mode::Line, _L("Line — click start, then end")); + sk_key('R', DesignSketchTool::Mode::CornerRect, _L("Rectangle — click two opposite corners")); + sk_key('C', DesignSketchTool::Mode::CenterCircle, _L("Circle — click center, then radius")); + sk_key('A', DesignSketchTool::Mode::ThreePointArc,_L("Arc — click start, end, then a point")); + sk_key('S', DesignSketchTool::Mode::Slot, _L("Slot — two centerline ends, then end radius")); + sk_key('E', DesignSketchTool::Mode::Ellipse, _L("Ellipse — center, major end, minor point")); + sk_key('B', DesignSketchTool::Mode::BSpline, _L("Spline — click control points")); + sk_key('P', DesignSketchTool::Mode::Point, _L("Point — click to place")); + sk_key('D', DesignSketchTool::Mode::Dimension, _L("Dimension — click 2 points or an entity")); + sk_key('T', DesignSketchTool::Mode::Trim, _L("Trim — click a segment to trim it")); + sk_key('X', DesignSketchTool::Mode::Extend, _L("Extend — click a line/arc to extend it")); + sk_key('O', DesignSketchTool::Mode::Offset, _L("Offset — pick an entity, drag the distance")); + sk_key('M', DesignSketchTool::Mode::Mirror, _L("Mirror — pick axis, then entities")); + sk_key('F', DesignSketchTool::Mode::Fillet, _L("Fillet — pick two lines, set the radius")); + sk_key('H', DesignSketchTool::Mode::Chamfer, _L("Chamfer — pick two lines, set the distance")); + // Polygon needs its side count / circumscribed flag pushed to the tool before it starts. + m_keys_sketch['G'] = [this, select_tool] { + if (m_viewport) { + push_polygon_params(); + } + select_tool(DesignSketchTool::Mode::Polygon, _L("Polygon — click center, then a vertex")); + }; + // Constrain (finish the live sketch + enter constrain), and Construction toggle. + // V for Value: type the defining number of whatever is selected — a line's length, an arc's + // radius, a circle's diameter, the angle between two lines. One handler behind three offer + // rows, because the quantity comes from the selection, not from which row was clicked. + // + // It needs a KEY, not just a menu row. The deck profile in VSD_n1_streamcontroller is + // generated from these two key tables, so a verb with no shortcut cannot be put on a + // physical button at all — which is the whole point of that profile for a user who drives + // the app from buttons rather than a menu. + m_keys_sketch['V'] = [this] { + if (m_viewport && m_viewport->is_sketching() && !m_viewport->edit_sketch_selection_value()) + set_status(_L("Nothing here has a value to type — pick a line, an arc, a circle, or two entities")); + }; + m_keys_sketch['K'] = [this] { enter_constrain_inline(); }; + // N: square up to the plane. Not a view preference but part of drawing — a sketch read at an + // angle is a sketch whose right angles do not look like right angles, and no hand-orbit lands + // exactly normal. Sketch map only: in Feature mode the navigator orb owns orientation. + m_keys_sketch['N'] = [this] { + if (m_viewport && m_viewport->view_normal_to_sketch()) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Normal to the sketch plane")); + m_status->Refresh(); + } + }; + m_keys_sketch['Q'] = [this] { + // With geometry selected, Q converts THAT geometry (6zic) — the reading + // everyone arrives with from other sketchers. With nothing selected it keeps its + // old meaning: arm construction for whatever you draw next. + if (m_viewport && m_viewport->is_sketching() && + m_viewport->toggle_sketch_construction_selection() > 0) { + set_status(_L("Converted the selection between construction and real geometry")); + return; + } + if (m_construction) { + m_construction->SetValue(!m_construction->GetValue()); + if (m_viewport && m_viewport->is_sketching()) + m_viewport->set_sketch_construction(m_construction->GetValue()); + } + }; + + // Shift+letter encoder for the feature-tool shortcuts (registered via FeatVar::key below, + // and explicitly for the standalone feature buttons). + auto SHIFT = [](int ch) { return ch | SC_SHIFT; }; + + // View toggles (single letters, active when no sketch is open): P origin planes, A world + // axes, X section view (Alt+Wheel slides the cut). Distinct from Shift+P/Shift+X features. + auto status_flag = [this](const wxString& on_msg, const wxString& off_msg, bool on) { + m_status->SetForegroundColour(wxNullColour); + set_status(on ? on_msg : off_msg); + m_status->Refresh(); + }; + m_keys_feature['P'] = [this, status_flag] { + if (m_viewport) status_flag(_L("Origin planes shown"), _L("Origin planes hidden"), + m_viewport->toggle_planes()); + }; + m_keys_feature['A'] = [this, status_flag] { + if (m_viewport) status_flag(_L("World axes shown"), _L("World axes hidden"), + m_viewport->toggle_axes()); + }; + m_keys_feature['X'] = [this] { toggle_section_view(); }; // toggle the single section on/off + + // Home: axonometric view, fitted to the model. + // + // DesignCanvas::set_view() and fit_view() were written and then never called from + // anywhere in the tree, so the Design viewport had NO way back to a standard view — + // no key, no button, nothing but orbiting by hand until the model happened to be in + // frame. A camera left pointing along the bed plane looks exactly like a renderer + // that has failed, which is how this was found. + // + // Home rather than a letter because every letter A-Z is already a Shift+letter tool + // shortcut, and because Home is the reset-the-view key users arrive with. set_view() + // already does select_view + zoom_to_volumes, so this is fit and orient in one. + m_keys_feature[WXK_HOME] = [this] { + if (!m_viewport) return; + m_viewport->set_view("iso"); + set_status(_L("Isometric view, fitted")); + }; + + // Commit to Plate and the bed toggle were mouse-only: a toolbar button and a checkbox with + // no accelerator between them, so neither could be reached from the keyboard at all, nor by + // anything driving the keyboard. Ctrl+Shift+P is Plate, Ctrl+Shift+B is Bed; neither + // collides with Orca's own Ctrl+Shift+S (Save as) or Ctrl+Shift+G (Print plate). + m_keys_feature['P' | SC_SHIFT | SC_CTRL] = [this] { on_commit(); }; + m_keys_feature['B' | SC_SHIFT | SC_CTRL] = [this] { + if (!m_show_bed) return; + const bool show = !m_show_bed->GetValue(); + m_show_bed->SetValue(show); + if (m_viewport) m_viewport->set_show_bed(show); + set_status(show ? _L("Bed shown") : _L("Bed hidden")); + }; + + // Shared flyout glyph tint (used by BOTH the feature and sketch toolbars). Re-tint each + // design_* glyph to the DropDown's resolved TEXT colour so it reads on the popup in either + // theme: text_color is 0x363636, which darkModeColorFor() maps to a light tone in dark mode + // (the popup bg is darkModeColorFor(white) = dark) and leaves dark in light mode. The alpha + // (the glyph shape) is preserved; only RGB is replaced. + // ponytail: wxBitmap(img) drops the HiDPI scale factor (no scale ctor before wx 3.1.6); the + // deploy target runs at scale 1.0, so this is exact there. + const wxColour drop_icon_col = StateColor::darkModeColorFor(wxColour(0x36, 0x36, 0x36)); + auto tint = [](wxBitmap bmp, const wxColour& c) -> wxBitmap { + if (!bmp.IsOk()) return bmp; + wxImage img = bmp.ConvertToImage(); + if (!img.HasAlpha()) img.InitAlpha(); + const int w = img.GetWidth(), h = img.GetHeight(); + for (int y = 0; y < h; ++y) + for (int x = 0; x < w; ++x) + img.SetRGB(x, y, c.Red(), c.Green(), c.Blue()); + return wxBitmap(img); + }; + + // --- Feature group: Sketch / Extrude / Fillet-Chamfer / Hole / Thread / Constrain + m_tb_feature = new wxBoxSizer(wxHORIZONTAL); + // Buttons are created in whatever order reads best in code, but laid out in the order the + // user specified. fadd() records into tb_slot; the flush below the doc group emits them. + // A dropdown occupies two entries (button + chevron) that must stay adjacent. + std::map> tb_slot; + // THE TOOLBAR IS CHROME. Every CAD verb is reached from the offer, so a tool's button is + // still BUILT — that is what registers its "fly:#" address and its Shift+key — + // but it is never placed on the bar. Hiding rather than skipping construction is deliberate: + // the addresses are created inside the widget-building loops, so not building would silently + // delete 42 verbs from the offer while they still rendered. 7ih records the cleanup + // that lets the construction go away too. + // What stays: the two doc-row imports (consumed by add_doc below) and the view controls, + // which are chrome_only in the atlas and so have no offer row to fall back on. + static const std::set kBarKeep = { "step", "mesh", "place", "section", "flip" }; + auto fadd = [&tb_slot](const char* id, wxWindow* w) { + if (kBarKeep.count(id) == 0) { w->Hide(); return; } + tb_slot[id].push_back(w); + }; + m_tb_feature->Add(caption(_L("FEATURES")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); + { + // Onshape-style FEATURE flyouts: same themed-DropDown pattern as the sketch toolbar + // (tinted glyphs, Body_14 measure, content-width popup) but each entry runs an + // arbitrary action — the existing per-feature handler — instead of selecting a Mode. + struct FeatVar { const char* icon; wxString tip; wxString hint; std::function action; int key = 0; }; + struct FeatFlyout { + std::vector items; // mainline DropDown is Item-based (text/tip/icon per row) + std::vector> actions; + std::vector icon_names; + ScalableButton* btn = nullptr; + DropDown drop; // declared LAST: destroyed before the vector it references + FeatFlyout() : drop(items) {} + }; + auto feat_dropdown = [&](const char* id, const char* def_icon, const wxString& grp, std::vector vars) { + // REGISTER FIRST, BUILD SECOND. A verb's two addresses — "fly:#" for the + // offer and its Shift+key — are data. The widget is one door onto them, not their + // owner. Doing this before any wxWindow exists is what lets the build below be skipped + // outright for a family the bar no longer carries. It used to sit INSIDE the build + // loop, so a retired family still had to be constructed and then Hide()n: skipping it + // would have deleted 42 verbs from the offer while their rows still rendered and did + // nothing when picked. 7ih. + // Keyed on "fly:#" so the generated table can name a variant without the + // item struct growing a field at 26 call sites. + for (size_t i = 0; i < vars.size(); ++i) { + if (vars[i].key) m_keys_feature[vars[i].key] = vars[i].action; // key runs the same action + m_verb_actions["fly:" + std::string(id) + "#" + std::to_string(i)] = vars[i].action; + } + if (kBarKeep.count(id) == 0) + return; // reached from the offer alone — no button, no chevron, no popup + auto* b = icon_btn(def_icon, grp); + b->SetFont(Label::Body_14); // measure popup labels in the popup's font (no truncation) + auto fo = std::make_shared(); + for (auto& v : vars) { + DropDown::Item it; + it.text = v.tip; + it.tip = v.hint; + it.icon = tint(create_scaled_bitmap(v.icon, m_form, 18), drop_icon_col); + fo->items.push_back(it); + fo->actions.push_back(std::move(v.action)); + fo->icon_names.emplace_back(v.icon); + } + fo->btn = b; + fo->drop.Create(b); + fo->drop.SetUseContentWidth(true, false); + fo->drop.Invalidate(true); + FeatFlyout* fp = fo.get(); + fo->drop.Bind(wxEVT_COMBOBOX, [this, fp](wxCommandEvent& e) { + int i = e.GetInt(); + if (i >= 0 && i < (int) fp->actions.size()) { + fp->btn->SetBitmap_(fp->icon_names[i]); // button face follows the last pick + fp->actions[i](); + set_active_tool_btn(fp->btn); + } + }); + b->Bind(wxEVT_BUTTON, [b, fp](wxCommandEvent&) { + // Force a fresh content measure before Popup() (ComboBox does this via the + // private autoPosition()); otherwise the popup maps at a stale narrow size. + fp->drop.Invalidate(true); + fp->drop.SetUseContentWidth(false, false); + fp->drop.SetUseContentWidth(true, false); + wxPoint pos = b->ClientToScreen(wxPoint(0, -6)); + fp->drop.Position(pos, wxSize(0, b->GetSize().y + 12)); + fp->drop.Popup(); + }); + m_flyout_keepalive.push_back(fo); + fadd(id, b); + auto* chev = new wxStaticText(m_toolbar, wxID_ANY, wxString::FromUTF8("\xE2\x96\xBE")); + chev->SetForegroundColour(dp_sec_text()); + chev->SetFont(Label::Body_9); + fadd(id, chev); + }; + + auto* b_sketch = icon_btn("design_sketch", _L("Sketch")); + // Sketch means a tool. Pressing it used to set the mode and then ask, unconditionally, + // for the very thing the user had just done — click XZ, read "XZ plane selected, press + // Sketch", press Sketch, and be told to click a reference plane. The plane was never + // lost (m_ref_plane holds it and begin_sketch captures it when the first tool is armed); + // the sentence was simply false, and with right-click excluded in sketch mode there was + // no door to the tools at all, so the only way on was the toolbar this tab is retiring. + std::function act_sketch = [this] { + set_ui_mode(UiMode::Sketch); + wxString where; + const bool have_plane = sketch_plane_target(where); + m_status->SetForegroundColour(wxNullColour); + set_status(have_plane + ? wxString::Format(_L("Sketching on %s — pick a tool"), where) + : _L("Click a face or a reference plane in the viewport, then a sketch tool")); + m_status->Refresh(); + if (m_sketch_hint) { // the card must agree with the status line, not argue with it + m_sketch_hint->SetLabel(have_plane + ? wxString::Format(_L("Drawing on %s.\nPick a tool, or press Menu for the list."), where) + : _L("Click a face or a reference plane, then a sketch tool.")); + m_sketch_hint->Refresh(); + m_cards->Layout(); + } + // Hand over the tools rather than naming them in a status line. CallAfter so the + // mode change has settled before a modal menu takes the loop; the menu carries each + // tool's shortcut, so pressing the key instead of picking a row costs nothing. + if (have_plane) + CallAfter([this] { show_offer_menu(offer_anchor()); }); + }; + b_sketch->Bind(wxEVT_BUTTON, [act_sketch](wxCommandEvent&) { act_sketch(); }); + m_keys_feature[SHIFT('S')] = act_sketch; + fadd("sketch", b_sketch); + // Add material: every feature that grows new solid material — from a profile + // (extrude/revolve/sweep/loft), from a face (thicken) or from a line (rib). + feat_dropdown("material", "design_extrude", _L("Add material (extrude / revolve / sweep / loft / thicken / rib)"), { + {"design_extrude", _L("Extrude"), _L("Extrude a sketch profile, or push/pull a picked face"), + [this] { + // Onshape push/pull: an explicitly picked solid face (Face-level cycle, no loop + // selected) is extruded as the profile — this takes priority over re-extruding an + // already-consumed sketch (resolve_extrude_sketch always returns the last Sketch). + if (m_sel_solid_face >= 0 && !m_doc.body.IsNull() && m_sel_sketch_region < 0) { + m_extrude_face_src = m_sel_solid_face; + m_extrude_sketch_ref = -1; + open_tool(Tool::Extrude); + return; + } + m_extrude_face_src = -1; // ordinary sketch/loop extrude + m_extrude_sketch_ref = resolve_extrude_sketch(); + if (m_extrude_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch, or pick a solid face, first")); + m_status->Refresh(); + return; + } + open_tool(Tool::Extrude); + }, SHIFT('E')}, + {"design_revolve", _L("Revolve"), _L("Revolve a profile about an axis"), + [this] { + m_revolve_sketch_ref = resolve_extrude_sketch(); + if (m_revolve_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch profile to revolve first")); + m_status->Refresh(); + return; + } + open_tool(Tool::Revolve); + }, SHIFT('R')}, + {"design_sweep", _L("Sweep"), _L("Sweep a profile along a path"), + [this] { + m_sweep_profile_ref = resolve_extrude_sketch(); + m_sweep_path_ref = -1; // fresh sweep: default the picker to the first sketch + if (m_sweep_profile_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a profile sketch to sweep first")); + m_status->Refresh(); + return; + } + open_tool(Tool::Sweep); + }, SHIFT('W')}, + {"design_loft", _L("Loft"), _L("Loft (skin) between two or more profiles"), + [this] { + // Loft skins 2+ profile sketches; need at least two to be meaningful. + int n = 0; + for (const auto& f : m_doc.features) + if (f.type == CadFeatureType::Sketch) ++n; + if (n < 2) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create at least two profile sketches to loft")); + m_status->Refresh(); + return; + } + m_loft_refs.clear(); // fresh loft: nothing pre-checked + open_tool(Tool::Loft); + }, SHIFT('L')}, + {"design_thicken", _L("Thicken"), _L("Offset a solid face into a thin plate (new body)"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Thicken needs a solid body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_thicken_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_thicken_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_thicken_body->GetCount() > 0) + m_thicken_body->SetSelection(std::min(selected_body_default(), + int(m_thicken_body->GetCount()) - 1)); + } + // KEEP a face the user has already picked. Clearing it unconditionally was right + // when the only door was a toolbar button, which carries no selection: you pressed + // Thicken and were then asked to point at something. Reached from the offer the + // verb is invoked ON a face, so discarding it opened the card reading "(pick a + // solid face)" over an immediate "thicken: face not found" — the user pointed at + // the face and the card said it could not find one. kgx. + // The index is per-body, so it only survives if the body combo landed on the body + // it came from; selected_body_default() above returns exactly that when valid. + if (m_thicken_body->GetSelection() != m_sel_solid_body) + m_sel_solid_face = -1; + open_tool(Tool::Thicken); // syncs m_thicken_face_label from m_sel_solid_face + }, 0}, + {"design_rib", _L("Rib"), _L("Grow a thin wall from an open sketch line, fused to a body"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Rib needs a solid body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_rib_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_rib_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_rib_body->GetCount() > 0) + m_rib_body->SetSelection(std::min(selected_body_default(), + int(m_rib_body->GetCount()) - 1)); + } + { + m_rib_sketch->Clear(); + for (int i = 0; i < int(m_doc.features.size()); ++i) { + // 3-arg Append: ComboBox's own Append(text, bitmap) hides + // wxItemContainer's (text, void*) — see the Sweep picker. + // Project features too: they carry Line entities the kernel ribs from + // just like a drawn sketch, so a projected body edge is a valid path. + if (m_doc.features[i].type == CadFeatureType::Sketch || + m_doc.features[i].type == CadFeatureType::Project) + combo_append_index(m_rib_sketch, wxString::FromUTF8(m_doc.features[i].name), i); + } + if (m_rib_sketch->GetCount() > 0) m_rib_sketch->SetSelection(0); + else { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch with an open line first")); + m_status->Refresh(); + return; + } + } + open_tool(Tool::Rib); + }, 'R'}, // plain R, not SHIFT+R (that is Revolve): every SHIFT letter A-Z + // was already taken, and the feature map already carries unshifted + // keys (P, A, X). Rib was the only verb in this dropdown with no + // shortcut at all, which also made its card unreachable to the rig. + }); + + auto* b_pattern = icon_btn("design_pattern", _L("Pattern")); + std::function act_pattern = [this] { + // Pattern replicates an existing body — needs at least one solid. + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a solid body to pattern first")); + m_status->Refresh(); + return; + } + open_tool(Tool::Pattern); + }; + b_pattern->Bind(wxEVT_BUTTON, [act_pattern](wxCommandEvent&) { act_pattern(); }); + m_keys_feature[SHIFT('N')] = act_pattern; + fadd("pattern", b_pattern); + m_body_gates.push_back({b_pattern, 1, b_pattern->GetToolTipText(), + _L("Pattern — needs a solid body to replicate")}); + + // Surface: sheet-body tools (extrude / revolve / loft / fill / offset / thicken) + // The drawer BUTTON is design_surface, not design_extrude: sharing a face with the + // Add-material drawer made the two buttons indistinguishable in the bar. The entries + // inside may reuse the solid glyphs — a menu row carries its own text label. + feat_dropdown("surface", "design_surface", _L("Surface (extrude / revolve / loft / fill / offset / thicken)"), { + {"design_extrude", _L("Surface Extrude"), _L("Extrude a sketch into a sheet body (no end caps)"), + [this] { + m_surf_extrude_sketch_ref = resolve_extrude_sketch(); + if (m_surf_extrude_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch first")); + m_status->Refresh(); + return; + } + open_tool(Tool::SurfaceExtrude); + }, SHIFT('G')}, + {"design_revolve", _L("Surface Revolve"), _L("Revolve a sketch profile into a sheet body"), + [this] { + m_surf_revolve_sketch_ref = resolve_extrude_sketch(); + if (m_surf_revolve_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch profile to revolve first")); + m_status->Refresh(); + return; + } + open_tool(Tool::SurfaceRevolve); + }, SHIFT('J')}, + {"design_loft", _L("Surface Loft"), _L("Loft (skin) between 2+ profiles, open (no end caps)"), + [this] { + int n = 0; + for (const auto& f : m_doc.features) + if (f.type == CadFeatureType::Sketch) ++n; + if (n < 2) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create at least two profile sketches to loft")); + m_status->Refresh(); + return; + } + m_surf_loft_refs.clear(); + open_tool(Tool::SurfaceLoft); + }, SHIFT('O')}, + {"design_surface", _L("Surface Fill"), _L("Fill a sketch boundary with a smooth face"), + [this] { + m_surf_fill_sketch_ref = resolve_extrude_sketch(); + if (m_surf_fill_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a sketch profile to fill first")); + m_status->Refresh(); + return; + } + open_tool(Tool::SurfaceFill); + }, SHIFT('Q')}, + {"design_offset", _L("Surface Offset"), _L("Offset a sheet body's shell by a signed distance"), + [this] { + populate_sheet_body_choices(m_surf_offset_body); + if (m_surf_offset_body->GetCount() == 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("No sheet body to offset — create a surface feature first")); + m_status->Refresh(); + return; + } + open_tool(Tool::SurfaceOffset); + }, SHIFT('U')}, + {"design_thicken", _L("Thicken Surface"), _L("Thicken a sheet body into a solid"), + [this] { + populate_sheet_body_choices(m_surf_thicken_body); + if (m_surf_thicken_body->GetCount() == 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("No sheet body to thicken — create a surface feature first")); + m_status->Refresh(); + return; + } + open_tool(Tool::ThickenSurface); + }, SHIFT('V')}, + }); + + feat_dropdown("plane", "design_plane", _L("Datum / Curve (plane / axis / coord sys / helix / project)"), { + {"design_plane", _L("Plane"), _L("Reference plane (offset / tilt / midplane / tangent / two edges / coincident)"), + [this] { + populate_plane_choices(m_plane_base); + reset_plane_refs(); + open_tool(Tool::Plane); + }, SHIFT('P')}, + {"design_line", _L("Axis"), _L("Datum axis (two points, face normal, cylinder centerline, two planes, along edge)"), + [this] { + populate_plane_choices(m_axis_plane_a); + populate_plane_choices(m_axis_plane_b); + reset_axis_refs(); + open_tool(Tool::Axis); + }, SHIFT('A')}, + {"design_point", _L("Coord Sys"), _L("Datum coordinate system (world point, or face + direction edge)"), + [this] { + reset_coordsys_refs(); + open_tool(Tool::CoordSys); + }, SHIFT('C')}, + {"design_thread", _L("Helix"), _L("Helical curve (spring path) — use as a sweep path for coils / springs / augers"), + [this] { + populate_plane_choices(m_helix_plane); + open_tool(Tool::Helix); + }, 0}, + // Project belongs here, not in Dress-up: it consumes a body but PRODUCES sketch + // geometry, so it is reference/curve creation like the four above, not a finishing op. + {"design_sketch", _L("Project"), _L("Project body edges onto a plane as sketch entities"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Project needs a body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_proj_source_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_proj_source_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_proj_source_body->GetCount() > 0) + m_proj_source_body->SetSelection(std::min(selected_body_default(), + int(m_proj_source_body->GetCount()) - 1)); + } + populate_plane_choices(m_proj_plane); + m_sel_solid_face = -1; + m_proj_face_label->SetLabel(_L("(all edges)")); + open_tool(Tool::Project); + }, 0}, + }); + + // Placement — operations that MOVE a body without changing its shape. Transform and + // Mirror place one body directly; a Mate places one body relative to another. They were + // in Dress-up (fillet/draft/shell) and Datum, which mixed shape-finishing and reference + // geometry with rigid-body placement. + // Own slot id: "place" is taken by the Place-on-Face button, and put() formats slot + // item 0 as the control and every later item as its chevron, so sharing a slot would + // bottom-align this drawer's button like a chevron. + feat_dropdown("placement", "design_move", _L("Placement (transform / mirror / mate)"), { + {"design_move", _L("Transform"), _L("Move and/or rotate an existing body"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Transform needs a body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_xf_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_xf_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_xf_body->GetCount() > 0) + m_xf_body->SetSelection(std::min(selected_body_default(), + int(m_xf_body->GetCount()) - 1)); + } + open_tool(Tool::Transform); + }, SHIFT('Y')}, + {"design_mirror", _L("Mirror"), _L("Reflect a body about a plane"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mirror needs a body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_mirror_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_mirror_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_mirror_body->GetCount() > 0) + m_mirror_body->SetSelection(std::min(selected_body_default(), + int(m_mirror_body->GetCount()) - 1)); + } + populate_plane_choices(m_mirror_plane); + open_tool(Tool::Mirror); + }, SHIFT('Z')}, + {"design_c_coincident", _L("Mate"), _L("Assembly: align two CoordSys features (fastened, planar, revolute, slider, cylindrical)"), + [this] { + open_tool(Tool::Mate); + }, 0}, + }); + + auto* b_boolean = icon_btn("design_boolean", _L("Boolean (combine bodies)")); + std::function act_boolean = [this] { on_boolean_tool(); }; + b_boolean->Bind(wxEVT_BUTTON, [act_boolean](wxCommandEvent&) { act_boolean(); }); + m_keys_feature[SHIFT('B')] = act_boolean; + fadd("boolean", b_boolean); + m_body_gates.push_back({b_boolean, 2, b_boolean->GetToolTipText(), + _L("Boolean — needs two solid bodies to combine")}); + + auto* b_cut = icon_btn("design_cut", _L("Cut (split a body with a plane)")); + std::function act_cut = [this] { + // A plane cut needs at least one solid to slice. + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Create a solid body to cut first")); + m_status->Refresh(); + return; + } + populate_plane_choices(m_cut_plane); + populate_body_choices(); + open_tool(Tool::Cut); + }; + b_cut->Bind(wxEVT_BUTTON, [act_cut](wxCommandEvent&) { act_cut(); }); + m_keys_feature[SHIFT('X')] = act_cut; + fadd("cut", b_cut); + m_body_gates.push_back({b_cut, 1, b_cut->GetToolTipText(), + _L("Cut — needs a solid body to slice")}); + + // Color — override the selected body's display colour (per-body, survives recompute). + auto* b_color = icon_btn("color_palette", _L("Color — set the selected body's display colour")); + b_color->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_set_body_color(); }); + fadd("color", b_color); + m_verb_actions["btn:colour"] = [this] { on_set_body_color(); }; + m_verb_actions["btn:delete"] = [this] { on_delete_feature(); }; + // Rename exists as a slow double-click on the row too, but the offer is this tab's only + // tool vocabulary — a rename that only a double-click reveals is not discoverable, and + // the row IS the object, so it belongs in the menu (and on F2) as well as on the row. + auto rename_feature = [this] { + // A BODY renames ITSELF. The earlier version resolved the body to + // CadBody::source_feature and renamed that feature, which is the wrong object: a + // body accumulates many features and the first one is not its name. The body row + // is editable now (CadBody::user_name), so the verb opens the editor there. + const int b = tree_body_selection(); + if (b >= 0 && b < int(m_tree_body_items.size())) { + const wxTreeItemId row = m_tree_body_items[b]; + // After the menu, not inside it: an editor opened from within PopupMenu's + // nested loop never appears. + CallAfter([this, row] { m_parts->SetFocus(); m_parts->EditLabel(row); }); + return; + } + const int sel = tree_selection(); + if (sel != wxNOT_FOUND && sel < int(m_tree_items.size())) { + const wxTreeItemId row = m_tree_items[sel]; + CallAfter([this, row] { m_tree->SetFocus(); m_tree->EditLabel(row); }); + } else { + m_status->SetForegroundColour(wxNullColour); // "nothing selected" is not an error + set_status(_L("Select a feature, or a body, first — then rename it")); + m_status->Refresh(); + } + }; + m_verb_actions["btn:rename"] = rename_feature; + m_keys_feature[WXK_F2] = rename_feature; // a function key, so no letter space spent + // The sketch's own Delete. It used to share "btn:delete" with the feature tree, so + // choosing Delete on a selected LINE ran on_delete_feature() and removed a tree row (or + // nothing) while the line stayed — the reported "I click a line and cannot remove it". + m_verb_actions["btn:sk_delete"] = [this] { + if (m_viewport && m_viewport->is_sketching()) + m_viewport->delete_selected_sketch_entities(); + else + on_delete_feature(); + }; + + m_verb_actions["btn:delete_body"] = [this] { on_delete_body(); }; + m_verb_actions["btn:edit"] = [this] { on_edit_feature(); }; + m_verb_actions["btn:mass"] = [this] { on_mass_properties(); }; + // Reachable from the offer menu on a SELECTED SKETCH, not only from the toolbar icon. + // A user evaluating against Onshape reported that "adding constraints seems to be + // missing" — with nineteen constraint types and a solver shipped. The only paths in + // were an icon-only button and a sketch-mode-only offer row filed under "Reference", + // so after finishing a sketch there was no affordance where users actually look. + m_verb_actions["btn:constrain"] = [this] { + on_begin_constrain(); + if (m_viewport && (m_viewport->is_constraining() || m_viewport->is_constraining_entities())) + set_ui_mode(UiMode::Constrain); + }; + + // Dress-up: finishing operations on the faces and edges of an existing solid — nothing + // that moves a body (see the Placement drawer) and nothing that creates geometry. + feat_dropdown("dressup", "design_dressup", _L("Fillet / chamfer / draft / shell / delete face"), { + {"design_dressup", _L("Fillet / Chamfer"), _L("Round or bevel a picked edge"), + [this] { open_tool(Tool::Dressup); }, SHIFT('F')}, + {"design_draft", _L("Draft (taper a face)"), _L("Tilt a picked face by a draft angle"), + [this] { open_tool(Tool::Draft); }, SHIFT('D')}, + {"design_shell", _L("Shell"), _L("Hollow the body to a wall thickness, opening a picked face"), + [this] { open_tool(Tool::Shell); }, SHIFT('K')}, + {"design_delete", _L("Delete Face"), _L("Remove faces from a body and heal the solid"), + [this] { + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Delete Face needs a body — add or import one first")); + m_status->Refresh(); + return; + } + { + m_del_face_body->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + const std::string& n = m_doc.bodies[i].name; + m_del_face_body->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (m_del_face_body->GetCount() > 0) + m_del_face_body->SetSelection(std::min(selected_body_default(), + int(m_del_face_body->GetCount()) - 1)); + } + m_del_faces.clear(); + m_del_face_list->SetLabel(_L("(none)")); + open_tool(Tool::DeleteFace); + }, 0}, + }); + + // Hole / Thread — drilling into a solid (both face-aware) + feat_dropdown("hole", "design_hole", _L("Hole / thread"), { + {"design_hole", _L("Hole"), _L("Drill a hole, centred on a picked face or placed on a plane"), + [this] { + // #2: drill on the picked solid face, centred on it (origin = face centroid, + // normal = inward). Otherwise fall back to the plane dropdown. m_hole_x/y then + // read as the offset from the face centre (editable for precise placement). + m_hole_on_face = false; + m_hole_face_body = -1; + m_hole_has_bounds = false; + set_hole_target_label(-1); + // Use the explicitly-picked face; otherwise default to the top face of the + // selected (or first) body so the hole lands on the surface being viewed, not + // the z=0 datum under the model. The XY/XZ/YZ dropdown still overrides. + int hb = m_sel_solid_body, hf = m_sel_solid_face; + if (hf < 0 && !m_doc.bodies.empty()) { + hb = (hb >= 0 && hb < int(m_doc.bodies.size())) ? hb : 0; + hf = top_face_index_of(m_doc.bodies[hb].shape); + } + if (hf >= 0 && hb >= 0 && hb < int(m_doc.bodies.size())) { + const TopoDS_Face face = GeometryEngine::face_by_index( + m_doc.bodies[hb].shape, hf); + if (!face.IsNull()) { + m_hole_face_plane = face_plane_inward(face); + m_hole_on_face = true; + m_hole_face_body = hb; + set_hole_target_label(hf); // may be the top-face default, not a pick + // Face (u,v) extents so the hole dims read from the sides (#2 Part B). + m_hole_has_bounds = GeometryEngine::face_plane_bounds( + face, m_hole_face_plane.origin, m_hole_face_plane.x_axis, + m_hole_face_plane.y_axis, m_hole_umin, m_hole_umax, m_hole_vmin, m_hole_vmax); + if (m_hole_x) m_hole_x->SetValue(0.0); // start at the face centre + if (m_hole_y) m_hole_y->SetValue(0.0); + // Reflect the face's orientation in the dropdown so it doesn't keep + // showing a stale "XY" while the hole actually drills on this face. + if (m_hole_plane) + m_hole_plane->SetSelection(index_from_plane(m_hole_face_plane)); + } + } + open_tool(Tool::Hole); + }, SHIFT('H')}, + {"design_thread", _L("Thread"), _L("Thread a cylindrical surface (inner bore / outer) or a circular edge"), + [this] { + // Driven by a picked CYLINDRICAL surface (inner bore = internal, outer = external) + // OR a circular EDGE (a cylinder's rim) — axis + diameter come from the geometry, so + // the user never types a radius. The diameter field shows what was derived. + m_thread_on_face = false; + m_thread_face_body = -1; + set_thread_target_label(-1, -1); + GeometryEngine::CylinderFace cf; + bool from_face = false; // which of the two the cylinder actually came from + if (m_sel_solid_body >= 0 && m_sel_solid_body < int(m_doc.bodies.size())) { + const TopoDS_Shape& shape = m_doc.bodies[m_sel_solid_body].shape; + if (m_sel_solid_face >= 0) + cf = GeometryEngine::cylinder_of_face(GeometryEngine::face_by_index(shape, m_sel_solid_face)); + from_face = cf.ok; + if (!cf.ok && m_sel_solid_edge >= 0) + cf = GeometryEngine::circle_of_edge(GeometryEngine::edge_by_index(shape, m_sel_solid_edge)); + } + if (cf.ok) { + SketchPlane p; // plane on the axis (origin at the base) + p.origin = cf.base; + p.normal = cf.axis; + const Vec3d ref = std::abs(cf.axis.z()) < 0.9 ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + p.x_axis = ref.cross(cf.axis).normalized(); + p.y_axis = cf.axis.cross(p.x_axis).normalized(); + m_thread_face_plane = p; + m_thread_on_face = true; + m_thread_face_body = m_sel_solid_body; + set_thread_target_label(from_face ? m_sel_solid_face : -1, + from_face ? -1 : m_sel_solid_edge); + infer_thread_spec(2.0 * cf.radius); // M diameter + pitch + depth from the cylinder + if (m_thread_height && cf.height > 1e-6) m_thread_height->SetValue(cf.height); + if (m_thread_internal) m_thread_internal->SetValue(cf.internal); + if (m_thread_x) m_thread_x->SetValue(0.0); // on the axis + if (m_thread_y) m_thread_y->SetValue(0.0); + } else if (m_sel_solid_face >= 0 || m_sel_solid_edge >= 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Pick a cylindrical surface (bore / outer) or a circular edge for a thread")); + m_status->Refresh(); + } + open_tool(Tool::Thread); + }, SHIFT('T')}, + }); + // Text / SVG insert tools live in the SKETCH toolbar (they produce 2D profiles = + // sketches), not here. STEP stays in Features: it imports a whole B-rep solid. + // Import STEP — standalone: a STEP comes in as a whole editable B-rep body, not a profile. + auto* b_step = icon_btn("design_step", _L("Import STEP (editable B-rep solid)")); + b_step->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_step(); }); + m_keys_feature[SHIFT('I')] = [this] { on_import_step(); }; + fadd("step", b_step); + // Import mesh — same destination as STEP (an editable B-rep body), but the geometry has + // to be reconstructed from triangles first (GeometryEngine::mesh_to_brep). + auto* b_mesh = icon_btn("param_triangles", _L("Import mesh (STL/OBJ) as an editable B-rep solid")); + b_mesh->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_import_mesh(); }); + m_keys_feature[SHIFT('M')] = [this] { on_import_mesh(); }; + fadd("mesh", b_mesh); + auto* b_constrain = icon_btn("design_constrain", _L("Constrain selected sketch")); + b_constrain->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + on_begin_constrain(); + if (m_viewport && (m_viewport->is_constraining() || m_viewport->is_constraining_entities())) + set_ui_mode(UiMode::Constrain); + }); + fadd("constrain", b_constrain); + } + + // --- Sketch group: plane + entity tools + Construction + Finish + m_tb_sketch = new wxBoxSizer(wxHORIZONTAL); + // Sketch carries the most tools of any mode: pack it tight (no inter-icon gap) so the + // whole entity palette fits without crowding the right-hand actions. + // Same for the sketch bar: the drawing tools live in the offer. Only Delete selected stays, + // via sadd_bar. sadd() still runs so sk_key/fly: registrations and the flyout popups survive. + auto sadd = [](wxWindow* w) { w->Hide(); }; + auto sadd_bar = [this](wxWindow* w) { m_tb_sketch->Add(w, 0, wxALIGN_CENTER_VERTICAL); }; + m_tb_sketch->Add(caption(_L("SKETCH")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); + { + // The plane/orientation choice lives in the docked Sketch card (Phase 3), + // not in the toolbar; the toolbar carries only the drawing tools. + auto skbtn = [&](const char* icon, DesignSketchTool::Mode mode, + const wxString& tip, const wxString& hint) { + auto* b = icon_btn(icon, tip); + b->Bind(wxEVT_BUTTON, [select_tool, mode, hint](wxCommandEvent&) { select_tool(mode, hint); }); + sadd(b); + }; + // Onshape-style family flyout, rendered with Orca's themed DropDown + // (white/teal selector, #DBDBDB border, HarmonyOS Body_14) — same widget + // as the settings combo dropdowns. The button shows the current variant's + // icon; clicking drops the variants; a small chevron marks it as a group. + struct SkVar { const char* icon; DesignSketchTool::Mode mode; wxString tip; wxString hint; }; + struct ToolFlyout { + std::vector items; // mainline DropDown is Item-based (text/tip/icon per row) + std::vector modes; + std::vector hints; + std::vector icon_names; + ScalableButton* btn = nullptr; + DropDown drop; // declared LAST: destroyed before the vector it references + ToolFlyout() : drop(items) {} + }; + auto dropdown = [&](const char* def_icon, const wxString& grp, std::vector vars) { + // Register first, build second — the same law as feat_dropdown, for the same reason. + // The offer reaches each tool by its ratified address; without these the offer could + // name a family but only ever arm its FIRST tool: picking "Rectangle" ran key:R and + // gave you a corner rectangle, with oblique and rounded unreachable. Keyed on the icon + // id (already unique per family) so no call site grows an argument. 6vs. + for (size_t i = 0; i < vars.size(); ++i) { + const DesignSketchTool::Mode mode = vars[i].mode; + const wxString hint = vars[i].hint; + m_verb_actions["fly:" + std::string(def_icon) + "#" + std::to_string(i)] = + [mode, hint, select_tool] { select_tool(mode, hint); }; + } + if (kBarKeep.count(def_icon) == 0) + return; // the drawing tools live in the offer; nothing of this family is built + auto* b = icon_btn(def_icon, grp); + // messureSize() measures labels with the PARENT's font (this button) but the + // popup draws them in Body_14 — so an under-sized button font truncates rows. + // The button is icon-only (no label), so giving it Body_14 is invisible and + // makes the content-width measure match the draw. + b->SetFont(Label::Body_14); + auto fo = std::make_shared(); + for (auto& v : vars) { + DropDown::Item it; + it.text = v.tip; + it.tip = v.hint; + it.icon = tint(create_scaled_bitmap(v.icon, m_form, 18), drop_icon_col); + fo->items.push_back(it); + fo->modes.push_back(v.mode); + fo->hints.push_back(v.hint); + fo->icon_names.emplace_back(v.icon); + } + fo->btn = b; + fo->drop.Create(b); + fo->drop.SetUseContentWidth(true, false); + fo->drop.Invalidate(true); + ToolFlyout* fp = fo.get(); + fo->drop.Bind(wxEVT_COMBOBOX, [this, fp, select_tool](wxCommandEvent& e) { + int i = e.GetInt(); + if (i >= 0 && i < (int) fp->modes.size()) { + fp->btn->SetBitmap_(fp->icon_names[i]); + select_tool(fp->modes[i], fp->hints[i]); + set_active_tool_btn(fp->btn); + } + }); + b->Bind(wxEVT_BUTTON, [b, fp](wxCommandEvent&) { + // autoPosition()/messureSize() are private; ComboBox calls them before + // Popup() so the window is sized to its content first. Without that the + // popup maps at a stale narrow size and labels ellipsize ("Oblique + // rectang…"). Force a fresh content measure by toggling use_content_width + // (messureSize only runs when the flag actually changes), then show. + fp->drop.Invalidate(true); + fp->drop.SetUseContentWidth(false, false); + fp->drop.SetUseContentWidth(true, false); + wxPoint pos = b->ClientToScreen(wxPoint(0, -6)); + fp->drop.Position(pos, wxSize(0, b->GetSize().y + 12)); + fp->drop.Popup(); + }); + m_flyout_keepalive.push_back(fo); + sadd(b); + auto* chev = new wxStaticText(m_toolbar, wxID_ANY, wxString::FromUTF8("\xE2\x96\xBE")); + chev->SetForegroundColour(dp_sec_text()); + chev->SetFont(Label::Body_9); + sadd(chev); // follows its button off the bar + }; + skbtn("design_select", DesignSketchTool::Mode::Select, _L("Select"), + _L("Click to select; Shift to add; double-click for a whole loop")); + skbtn("design_dimension", DesignSketchTool::Mode::Dimension, _L("Dimension"), + _L("Click 2 points or a line / circle / arc to place a dimension")); + // (separator dropped: the group it divided is now reached from the offer) + dropdown("design_line", _L("Line / polyline"), { + {"design_line", DesignSketchTool::Mode::Line, _L("Line"), _L("Click start, then end — then set the exact length")}, + {"design_polyline", DesignSketchTool::Mode::Polyline, _L("Polyline"), _L("Click points; click first / right-click to close the loop")} }); + dropdown("design_rect", _L("Rectangle"), { + {"design_rect", DesignSketchTool::Mode::CornerRect, _L("Corner rectangle"), _L("Click two opposite corners")}, + {"design_crect", DesignSketchTool::Mode::CenterRect, _L("Center rectangle"), _L("Click center, then a corner")}, + {"design_rect_oblique", DesignSketchTool::Mode::ObliqueRect, _L("Oblique rectangle"), _L("Click two corners of one edge, then a point for the width")}, + {"design_rect_rounded", DesignSketchTool::Mode::RoundedRect, _L("Rounded rectangle"), _L("Click two opposite corners, then a point for the corner radius")} }); + dropdown("design_circle", _L("Circle"), { + {"design_circle", DesignSketchTool::Mode::CenterCircle, _L("Center circle"), _L("Click center, then radius")}, + {"design_circle2pt", DesignSketchTool::Mode::TwoPointCircle, _L("2-point circle"), _L("Click two ends of the diameter")}, + {"design_circle3pt", DesignSketchTool::Mode::ThreePointCircle, _L("3-point circle"), _L("Click three points on the circle")} }); + dropdown("design_arc3pt", _L("Arc"), { + {"design_arc3pt", DesignSketchTool::Mode::ThreePointArc, _L("3-point arc"), _L("Click start, end, then a point on the arc")}, + {"design_tangentarc", DesignSketchTool::Mode::TangentArc, _L("Tangent arc"), _L("Click start (on the last entity) then end")}, + {"design_arc_center", DesignSketchTool::Mode::CenterArc, _L("Center-point arc"), _L("Click center, then start, then a point for the end angle")} }); + dropdown("design_slot", _L("Slot"), { + {"design_slot", DesignSketchTool::Mode::Slot, _L("Slot"), _L("Click two centerline ends, then a point for the end radius")}, + {"design_slot_arc", DesignSketchTool::Mode::ArcSlot, _L("Arc slot"), _L("Click center, start, end, then a point for the width")} }); + dropdown("design_ellipse", _L("Ellipse"), { + {"design_ellipse", DesignSketchTool::Mode::Ellipse, _L("Ellipse"), _L("Click center, a major-axis end, then a point for the minor axis")}, + {"design_ellipse_arc", DesignSketchTool::Mode::EllipseArc, _L("Elliptical arc"), _L("Click center, major-axis end, minor point, then arc start and end")} }); + skbtn("design_bspline", DesignSketchTool::Mode::BSpline, _L("Spline"), + _L("Click control points; double-click or right-click to finish")); + skbtn("design_point", DesignSketchTool::Mode::Point, _L("Point"), + _L("Click to place a point")); + // (separator dropped: the group it divided is now reached from the offer) + // Insert tools — Text / SVG produce a 2D profile (a sketch), so they belong with + // the sketch tools, not in the generic Features strip. Each places the art + // in-canvas, then commits via the Insert card's Confirm. + { + // In Sketch MODE the art must land in the sketch — but begin_sketch() does not run + // until the first tool is armed, so pressing Sketch and then Text would find no + // session and commit a separate feature. Arm Select first: it starts the session on + // the picked plane without drawing anything, so Text behaves the same whether or not + // you had already drawn a line. (MODE vs SESSION — the distinction that has bitten + // this panel before.) + auto ensure_sketch = [this, select_tool] { + if (m_ui_mode == UiMode::Sketch && m_viewport && !m_viewport->is_sketching()) + select_tool(DesignSketchTool::Mode::Select, + _L("Select — click to select; Shift to add")); + }; + auto* b_text = icon_btn("design_text", _L("Text — emboss text as a profile")); + b_text->Bind(wxEVT_BUTTON, [this, ensure_sketch](wxCommandEvent&) { + ensure_sketch(); on_add_text(); }); + sadd(b_text); + auto* b_svg = icon_btn("design_svg", _L("SVG — import an outline as a profile")); + b_svg->Bind(wxEVT_BUTTON, [this, ensure_sketch](wxCommandEvent&) { + ensure_sketch(); on_import_svg(); }); + sadd(b_svg); + // …and reachable from the offer's Create row. These were on the atlas's chrome_only + // list under "document-level actions act on the DOCUMENT, not on a selection" — which + // is not what they do: both call add_imported_sketch(), which drops the art ON a + // picked solid face (SketchPlane::from_face, centred on it) exactly as Sketch does. + // Selection-consuming profile creators, so they belong with the other Create verbs. + m_verb_actions["btn:text"] = [this, ensure_sketch] { ensure_sketch(); on_add_text(); }; + m_verb_actions["btn:svg"] = [this, ensure_sketch] { ensure_sketch(); on_import_svg(); }; + } + // (separator dropped: the group it divided is now reached from the offer) + // In-canvas edit-op tools (drag gizmo / click label), grouped by family. + dropdown("design_filletedge", _L("Fillet / chamfer"), { + {"design_filletedge", DesignSketchTool::Mode::Fillet, _L("Fillet"), _L("Pick two lines, then drag the arrow or click the radius to set it")}, + {"design_chamfer", DesignSketchTool::Mode::Chamfer, _L("Chamfer"), _L("Pick two lines, then drag the arrow or click the distance to set it")} }); + skbtn("design_offset", DesignSketchTool::Mode::Offset, _L("Offset"), + _L("Pick an entity, then drag the arrow or click the distance; click empty to apply")); + skbtn("design_mirror", DesignSketchTool::Mode::Mirror, _L("Mirror"), + _L("Pick a mirror-axis line, then the entities to mirror; click empty to apply")); + // Trim / Extend scissors — standalone sketch tools (NOT inside Constrain): click a + // segment to cut it back to / out to its nearest intersection. One cut per click. + skbtn("design_trim", DesignSketchTool::Mode::Trim, _L("Trim"), + _L("Click a segment to trim it back to its nearest intersection; right-click exits")); + skbtn("design_extend", DesignSketchTool::Mode::Extend, _L("Extend"), + _L("Click a line or arc to extend it to the nearest entity; right-click exits")); + // Constrain — grouped with the edit tools so it's easy to find (nde #13: it was buried + // far-right next to Construction and went unnoticed). Commits the live sketch in place + // and drops into Constrain mode (geometric/dimensional palette). + auto* b_constrain_sk = icon_btn("design_constrain", + _L("Constrain — add geometric/dimensional relations")); + b_constrain_sk->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { enter_constrain_inline(); }); + sadd(b_constrain_sk); + dropdown("design_move", _L("Move / rotate / scale"), { + {"design_move", DesignSketchTool::Mode::Move, _L("Move (translate)"), _L("Pick entities, then drag the handle or click the distance; click empty to apply")}, + {"design_rotate", DesignSketchTool::Mode::Rotate, _L("Rotate (about centroid)"), _L("Pick entities, then drag around the pivot or click the angle; click empty to apply")}, + {"design_scale", DesignSketchTool::Mode::Scale, _L("Scale (about centroid)"), _L("Pick entities, then drag the handle or click the factor; click empty to apply")} }); + dropdown("design_array", _L("Linear / polar array"), { + {"design_array", DesignSketchTool::Mode::Array, _L("Linear array"), _L("Pick entities, drag the spacing handle, click the count; click empty to apply")}, + {"design_polararray", DesignSketchTool::Mode::PolarArray, _L("Polar array (about centroid)"), _L("Pick entities, drag the sweep handle, click the count; click empty to apply")} }); + + // Polygon's side count and fit are TOOL PARAMETERS, so they are chosen from the tool: + // the offer's Create > Polygon submenu. They used to sit inline in this row, then in a + // sidebar card; both put the choice somewhere you had to leave the geometry to reach, + // and the count cannot be recovered afterwards (a drawn polygon's inline editor offers + // Side and Angle, never the count). e1p. + auto arm_polygon = [this, select_tool] { + push_polygon_params(); + select_tool(DesignSketchTool::Mode::Polygon, + wxString::Format(_L("Click center then a vertex — %d sides, %s"), + m_poly_sides, + m_poly_circumscribed ? _L("circumscribed") : _L("inscribed"))); + }; + for (int n : {3, 4, 5, 6, 8, 12}) + m_verb_actions["btn:poly#" + std::to_string(n)] = + [this, arm_polygon, n] { m_poly_sides = n; arm_polygon(); }; + for (int c : {0, 1}) + m_verb_actions["btn:polyfit#" + std::to_string(c)] = + [this, arm_polygon, c] { m_poly_circumscribed = (c == 1); arm_polygon(); }; + + // Same defect, one level up: a combo whose entries are different VERBS wearing a single + // name. "Dress-up" is Fillet or Chamfer; "Combine" is union, subtract or intersect; + // "Pattern" is linear or circular. The choice decides WHAT YOU ARE DOING, so it belongs + // where you chose the tool — not behind a card you must open to discover it existed. + // Each address opens the tool exactly as its shortcut does, then says which one. + // The members are read at INVOCATION, not capture: the cards are built after this row. + // e1p. + auto open_feature = [this](int key) { + auto it = m_keys_feature.find(key); + if (it != m_keys_feature.end() && it->second) it->second(); + }; + // SHIFT() is a constructor-local helper, so resolve the codes here rather than inside + // the stored lambdas, which outlive it. + const int k_dress = SHIFT('F'), k_bool = SHIFT('B'), k_pat = SHIFT('N'); + // Choose FIRST, then open: open_tool() titles the card from m_dressup_type, so setting + // it afterwards left the header reading "Fillet 1" over a chamfer. Nothing in the + // opener resets the combo, so this order is safe. + m_verb_actions["btn:dress#0"] = [this, open_feature] { + if (m_dressup_type) m_dressup_type->SetSelection(0); open_feature(k_dress); }; + m_verb_actions["btn:dress#1"] = [this, open_feature] { + if (m_dressup_type) m_dressup_type->SetSelection(1); open_feature(k_dress); }; + for (int op = 0; op < 3; ++op) + m_verb_actions["btn:bool#" + std::to_string(op)] = [this, open_feature, op] { + open_feature(k_bool); + if (m_bool_op) { m_bool_op->SetSelection(op); refresh_preview(); } }; + for (int t = 0; t < 2; ++t) + m_verb_actions["btn:pat#" + std::to_string(t)] = [this, open_feature, t] { + open_feature(k_pat); if (m_pattern_type) m_pattern_type->SetSelection(t); }; + + auto* b_poly = icon_btn("design_polygon", _L("Polygon")); + b_poly->Bind(wxEVT_BUTTON, [arm_polygon](wxCommandEvent&) { arm_polygon(); }); + sadd(b_poly); + // (separator dropped: the group it divided is now reached from the offer) + // Q's semantics, on the control that carries the word. With geometry selected the box + // CONVERTS it — that is what a user who has just selected a construction circle and + // reached for the box labelled "Construction" is asking for, and until now it was the + // only one of the three routes (Q, the offer's Reference row, this box) that could not + // do it: it armed the mode for the NEXT entity, silently, changing nothing about the + // shape on screen and flipping the draw mode behind the user's back. The tick is a MODE + // indicator, so after a conversion it goes back to what it was. + m_construction->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { + if (!m_viewport || !m_viewport->is_sketching()) + return; + // ONLY IN SELECT MODE. Drawing auto-selects what was just drawn (draw-then-edit), so + // with a draw tool armed "there is a selection" does not mean the user picked + // anything — it means they finished a line. Converting there turns the box into a + // trap: arm construction, draw the axis, click the box to go back to real geometry, + // and instead of disarming the mode it converts the axis you just drew. The gesture + // ladder's mirror rung does exactly that and reported three construction entities + // where it wanted one. In Select mode the intent is unambiguous. + const int n = m_viewport->sketch_is_selecting() + ? m_viewport->toggle_sketch_construction_selection() : 0; + if (n > 0) { + m_construction->SetValue(!m_construction->GetValue()); // the mode did not move + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format( + _L("Converted %d entit%s between construction and real geometry"), + n, n == 1 ? "y" : "ies")); + m_status->Refresh(); + return; + } + m_viewport->set_sketch_construction(m_construction->GetValue()); }); + // STAYS on the bar. Construction is not a tool, it is a persistent MODE — the same kind + // of thing as the Bed checkbox — and the sketch bar is already shown only in Sketch mode, + // so it appears exactly while it can apply. Hiding it left Q and the offer's Construction + // row still toggling a checkbox nobody could see: you could not tell whether the next + // line would be construction geometry. A stateful toggle has to show its state. + sadd_bar(m_construction); + add_sep(m_tb_sketch); + auto* b_del = icon_btn("design_delete", _L("Delete selected")); + b_del->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + if (m_viewport) m_viewport->delete_selected_sketch_entities(); }); + sadd_bar(b_del); // keep-list: Delete selected stays on the bar + // Finish sketch = the unified ✓ Confirm in the action bar (tool_confirm). + } + + // --- Constrain group: geometric constraints + dimensions + edit ops + Done + // Fase 4.2 live path: these buttons are shown during a SKETCH too, not only in Constrain + // mode, so a constraint applies to the live selection without committing first. The caption + // travels with them; the session's Confirm/Cancel stay in m_tb_action (mode-appropriate). + m_tb_relations = new wxBoxSizer(wxHORIZONTAL); + auto cadd = [this](wxWindow* w) { m_tb_relations->Add(w, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 2); }; + m_tb_relations->Add(caption(_L("CONSTRAIN")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); + { + auto cbtn = [&](const char* icon, const wxString& tip, SketchConstraintType type) { + auto* b = icon_btn(icon, tip); + b->Bind(wxEVT_BUTTON, [this, type](wxCommandEvent&) { apply_constraint(type); }); + cadd(b); + }; + cbtn("design_c_horizontal", _L("Horizontal"), SketchConstraintType::Horizontal); + cbtn("design_c_vertical", _L("Vertical"), SketchConstraintType::Vertical); + cbtn("design_c_parallel", _L("Parallel"), SketchConstraintType::Parallel); + cbtn("design_c_perpendicular", _L("Perpendicular"), SketchConstraintType::Perpendicular); + cbtn("design_c_coincident", _L("Coincident"), SketchConstraintType::Coincident); + cbtn("design_c_equal", _L("Equal length"), SketchConstraintType::EqualLength); + cbtn("design_c_equal_radius", _L("Equal radius"), SketchConstraintType::EqualRadius); + cbtn("design_c_collinear", _L("Collinear"), SketchConstraintType::Collinear); + cbtn("design_c_concentric", _L("Concentric"), SketchConstraintType::Concentric); + cbtn("design_c_tangent", _L("Tangent"), SketchConstraintType::Tangent); + cbtn("design_c_midpoint", _L("Midpoint"), SketchConstraintType::Midpoint); + cbtn("design_c_symmetric", _L("Symmetric"), SketchConstraintType::Symmetric); + cbtn("design_c_sym_v", _L("Symmetric about the vertical axis"), SketchConstraintType::SymmetricAboutY); + cbtn("design_c_sym_h", _L("Symmetric about the horizontal axis"), SketchConstraintType::SymmetricAboutX); + cbtn("design_c_angle", _L("Angle"), SketchConstraintType::Angle); + cbtn("design_c_radius", _L("Radius"), SketchConstraintType::Radius); + cbtn("design_c_diameter", _L("Diameter"), SketchConstraintType::Diameter); + cbtn("design_c_fix", _L("Fix point (anchor in place)"), SketchConstraintType::Fix); + cbtn("design_c_dist_x", _L("Horizontal distance"), SketchConstraintType::DistanceX); + cbtn("design_c_dist_y", _L("Vertical distance"), SketchConstraintType::DistanceY); + // Trim/Extend are now standalone SKETCH scissors (Mode::Trim/Extend) in the sketch + // toolbar, NOT Constrain buttons. The other edit ops (Mirror/Offset/Fillet/Chamfer/ + // Move/…) are first-class sketch tools too. Done constraining = the action-bar ✓. + } + + // Unified action bar: the ONE Confirm/Cancel surface for every tool and mode. Lives at + // the right end of the ribbon (the "tool dashboard"); shown only while a tool/mode is + // active (update_action_bar). Replaces the 13 per-card buttons + sketch Finish + Done. + m_tb_action = new wxBoxSizer(wxHORIZONTAL); + { + auto* ok = new wxButton(m_toolbar, wxID_ANY, _L("✓ Confirm")); + ok->SetForegroundColour(*wxWHITE); + ok->SetBackgroundColour(wxColour(0x00, 0x96, 0x88)); // Orca teal accent + ok->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { tool_confirm(); }); + m_confirm_btns.push_back(ok); // refresh_preview greys this on an invalid candidate + auto* no = new wxButton(m_toolbar, wxID_ANY, _L("✗ Cancel")); + no->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { tool_cancel(); }); + m_tb_action->Add(ok, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + m_tb_action->Add(no, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 10); + } + + // Persistent Undo/Redo group: always visible (not mode-gated like the tool groups), so + // history is reachable from Feature, Sketch and Constrain alike. These are momentary + // actions, so — unlike icon_btn — they are NOT registered in m_tool_btns and never take + // the teal active-tool highlight. They route to the SAME do_undo_redo as the keyboard + // Ctrl+Z / Ctrl+Shift+Z path, and are greyed by update_undo_redo_buttons(). + m_tb_history = new wxBoxSizer(wxHORIZONTAL); + { + auto hist_btn = [this, tb_bg, tb_hover](const char* icon, const wxString& tip) { + auto* b = new ScalableButton(m_toolbar, wxID_ANY, icon, "", wxSize(40, 40), + wxDefaultPosition, wxBU_EXACTFIT | wxBORDER_NONE, false, 34); + b->SetToolTip(tip); + b->SetBackgroundColour(tb_bg); + b->Bind(wxEVT_ENTER_WINDOW, [b, tb_hover](wxMouseEvent& e) { + if (b->IsEnabled()) { b->SetBackgroundColour(tb_hover); b->Refresh(); } e.Skip(); }); + b->Bind(wxEVT_LEAVE_WINDOW, [b, tb_bg](wxMouseEvent& e) { + b->SetBackgroundColour(tb_bg); b->Refresh(); e.Skip(); }); + return b; + }; + m_btn_undo = hist_btn("menu_undo", _L("Undo (Ctrl+Z)")); + m_btn_undo->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { do_undo_redo(false); }); + m_btn_redo = hist_btn("menu_redo", _L("Redo (Ctrl+Shift+Z)")); + m_btn_redo->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { do_undo_redo(true); }); + m_btn_undo->Enable(false); // nothing to undo/redo on a fresh document + m_btn_redo->Enable(false); + m_tb_history->Add(m_btn_undo, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); + m_tb_history->Add(m_btn_redo, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); + } + + // Document actions, left of Undo/Redo and always visible (not mode-gated like the tools). + // Same styling as the history pair: momentary actions, never the teal active-tool state. + m_tb_doc = new wxBoxSizer(wxHORIZONTAL); + const wxColour tb_glyph_col = StateColor::darkModeColorFor(wxColour(0x36, 0x36, 0x36)); + const wxColour tb_commit_col(0x00, 0x96, 0x88); // Orca Confirm accent + { + // Some Orca glyphs (toolbar_add_plate, toolbar_flatten) are drawn for a light toolbar and + // come out the same tone as this dark one — Commit was effectively invisible. Re-tint + // those: Commit in the teal accent it carries as the tab's primary action, the rest in + // the same grey the other toolbar glyphs resolve to. + auto doc_btn = [this, tb_bg, tb_hover, &tint](const char* icon, const wxString& tip, + const wxColour* glyph = nullptr) { + auto* b = new ScalableButton(m_toolbar, wxID_ANY, icon, "", wxSize(40, 40), + wxDefaultPosition, wxBU_EXACTFIT | wxBORDER_NONE, false, 34); + if (glyph != nullptr) + b->SetBitmap(tint(create_scaled_bitmap(icon, m_toolbar, 42), *glyph)); + b->SetToolTip(tip); + b->SetBackgroundColour(tb_bg); + b->Bind(wxEVT_ENTER_WINDOW, [b, tb_hover](wxMouseEvent& e) { + if (b->IsEnabled()) { b->SetBackgroundColour(tb_hover); b->Refresh(); } e.Skip(); }); + b->Bind(wxEVT_LEAVE_WINDOW, [b, tb_bg](wxMouseEvent& e) { + b->SetBackgroundColour(tb_bg); b->Refresh(); e.Skip(); }); + return b; + }; + auto add_doc = [this](ScalableButton* b) { + m_tb_doc->Add(b, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); }; + + auto* b_new = doc_btn("add", _L("New Design — clear the feature tree")); + b_new->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_new_design(); }); + add_doc(b_new); + add_doc(static_cast(tb_slot["step"][0])); // 2. Import STEP + add_doc(static_cast(tb_slot["mesh"][0])); // 3. Import mesh + auto* b_export = doc_btn("save", _L("Export STEP…")); + b_export->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_export_step(); }); + add_doc(b_export); + + // View option, not a document action: hide the printer bed to model without it. Lives in + // this row because it must stay reachable with no tool open — a card would come and go. + m_show_bed = new CheckBox(m_toolbar); + m_show_bed->SetValue(true); // bed visible by default, as the tab opens today + m_show_bed->SetToolTip(_L("Show the printer bed and its plate grid")); + // wxEVT_TOGGLEBUTTON, NOT wxEVT_CHECKBOX: Orca's CheckBox derives from + // wxBitmapToggleButton (Widgets/CheckBox.hpp), so a wxEVT_CHECKBOX handler never fires. + // Read the control rather than the event so the state cannot disagree with the glyph. + m_show_bed->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + if (m_viewport) m_viewport->set_show_bed(m_show_bed->GetValue()); + e.Skip(); + }); + auto* bed_lbl = new wxStaticText(m_toolbar, wxID_ANY, _L("Bed")); + bed_lbl->SetForegroundColour(dp_sec_text()); + m_tb_doc->Add(m_show_bed, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, 6); + m_tb_doc->Add(bed_lbl, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, 4); + + // These act on bodies / the view, so they ride in the feature group, in the slots + // the user assigned them (9, 11bis, 16). + auto* b_place = doc_btn("toolbar_flatten", _L("Place on Face (F) — lay the picked face on the bed"), + &tb_glyph_col); + b_place->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { place_on_face(); }); + tb_slot["place"].push_back(b_place); + + auto* b_section = doc_btn("split_parts", _L("Section View — hide part of the model to see inside. " + "PageUp/PageDown move the plane; Delete removes it.")); + b_section->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { toggle_section_view(); }); + tb_slot["section"].push_back(b_section); + + m_section_flip_btn = doc_btn("design_mirror", _L("Flip Section — show the opposite half")); + m_section_flip_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { flip_section_view(); }); + m_section_flip_btn->Enable(false); // only usable while a section view is active + tb_slot["flip"].push_back(m_section_flip_btn); + + // Commit is the tab's primary action and sits far right, next to Confirm/Cancel. + m_tb_commit = new wxBoxSizer(wxHORIZONTAL); + auto* b_commit = doc_btn("toolbar_add_plate", _L("Commit to Plate — send the solid to Prepare"), + &tb_commit_col); + b_commit->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_commit(); }); + m_tb_commit->Add(b_commit, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); + } + + // Feature-group layout, in the requested left-to-right order. + { + auto put = [&](const char* id) { + auto it = tb_slot.find(id); + if (it == tb_slot.end()) return; + for (size_t i = 0; i < it->second.size(); ++i) + m_tb_feature->Add(it->second[i], 0, + i == 0 ? (wxALIGN_CENTER_VERTICAL | wxRIGHT) + : (wxALIGN_BOTTOM | wxBOTTOM | wxRIGHT), + i == 0 ? 4 : 5); + }; + put("sketch"); put("constrain"); // 7, 7bis + add_sep(m_tb_feature); + put("material"); put("place"); put("placement"); put("plane"); // 8, 9, 9bis, 10 + put("dressup"); put("section"); // 11, 11bis + put("hole"); put("boolean"); put("cut"); // 12, 13, 14 + put("surface"); put("color"); put("flip"); // 14bis, 15, 16 + put("pattern"); // kept, at the end + } + + auto* tbrow = new wxBoxSizer(wxHORIZONTAL); + tbrow->AddSpacer(8); + tbrow->Add(m_tb_doc, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + add_sep(tbrow); + tbrow->Add(m_tb_history, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + add_sep(tbrow); + tbrow->Add(m_tb_feature, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + tbrow->Add(m_tb_sketch, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + tbrow->Add(m_tb_relations, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + tbrow->AddStretchSpacer(); + tbrow->Add(m_tb_commit, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + tbrow->Add(m_tb_action, 0, wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM, 5); + tbrow->AddSpacer(8); + m_toolbar->SetSizer(tbrow); + // Apply the body gates once now: an empty document is exactly the state the bug was reported + // in, and feed_bodies() has not run yet on a fresh tab. + update_body_gates(); + + // Onshape-style dialog-card header: feature icon + bold title. out receives + // the title control so open_tool() can retitle it per feature. + auto card_header = [](wxWindow* card, const char* icon, const wxString& title, wxStaticText*& out) -> wxSizer* { + auto* h = new wxBoxSizer(wxHORIZONTAL); + auto* ic = new wxStaticBitmap(card, wxID_ANY, create_scaled_bitmap(icon, card, 18)); + out = new wxStaticText(card, wxID_ANY, title); + out->SetFont(Label::Head_14); // Orca shared HarmonyOS card-title font + h->Add(ic, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); + h->Add(out, 0, wxALIGN_CENTER_VERTICAL); + return h; + }; + + // Every tool dialog lives inside ONE framed card (only one is ever visible), so the + // active dialog reads as a bordered panel like Prepare's sidebar boxes instead of + // free-floating rows. `cards` is the frame's sizer; open_tool() shows/hides within it. + m_cards = make_card(m_form); + auto* cards = new wxBoxSizer(wxVERTICAL); + m_cards->SetSizer(cards); + root->Add(m_cards, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 8); + + // --- Sketch dialog (shape definition only — no distance/mode) --- + auto* form = two_col_form(); + + m_shape = make_combo(m_cards); + m_shape->Append(_L("Rectangle")); + m_shape->Append(_L("Circle")); + m_shape->SetSelection(0); + form->Add(new wxStaticText(m_cards, wxID_ANY, _L("Shape")), 0, wxALIGN_CENTER_VERTICAL); + form->Add(m_shape, 0, wxEXPAND); + + // NO plane row. A sketch takes its plane from what is picked in the VIEWPORT — a planar face + // on a solid, or one of the reference-plane ghosts clicked in 3D — resolved by + // sketch_plane_from_selection(). A three-row XY/XZ/YZ combo could not express either of those + // targets, so it displayed a value that was at best redundant and at worst false. e1p. + + m_width = make_spin(m_cards, 20); + form->Add(new wxStaticText(m_cards, wxID_ANY, _L("Width / X")), 0, wxALIGN_CENTER_VERTICAL); + form->Add(spin_frame(m_width), 0, wxEXPAND); + + m_height = make_spin(m_cards, 20); + form->Add(new wxStaticText(m_cards, wxID_ANY, _L("Height / Y")), 0, wxALIGN_CENTER_VERTICAL); + form->Add(spin_frame(m_height), 0, wxEXPAND); + + m_radius = make_spin(m_cards, 10); + form->Add(new wxStaticText(m_cards, wxID_ANY, _L("Radius")), 0, wxALIGN_CENTER_VERTICAL); + form->Add(spin_frame(m_radius), 0, wxEXPAND); + + m_box_sketch = new wxBoxSizer(wxVERTICAL); + m_box_sketch->Add(card_header(m_cards, "design_sketch", _L("Sketch"), m_hdr_sketch), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_sketch->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_sketch->Add(form, 0, wxEXPAND | wxALL, 12); + cards->Add(m_box_sketch, 0, wxEXPAND); + + // --- Move / Rotate body --- + { + auto* mform = two_col_form(); + m_move_dx = make_spin(m_cards, 0.0, -100000.0, 100000.0); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Distance X")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_move_dx), 0, wxEXPAND); + m_move_dy = make_spin(m_cards, 0.0, -100000.0, 100000.0); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Distance Y")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_move_dy), 0, wxEXPAND); + m_move_dz = make_spin(m_cards, 0.0, -100000.0, 100000.0); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Distance Z")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_move_dz), 0, wxEXPAND); + + m_move_axis = make_combo(m_cards); + m_move_axis->Append(_L("X")); + m_move_axis->Append(_L("Y")); + m_move_axis->Append(_L("Z")); + m_move_axis->SetSelection(2); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Rotation axis")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_move_axis, 0, wxEXPAND); + + m_move_angle = make_spin(m_cards, 0.0, -360.0, 360.0); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle °")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_move_angle), 0, wxEXPAND); + + for (wxSpinCtrlDouble* sp : { m_move_dx, m_move_dy, m_move_dz, m_move_angle }) + sp->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent& e) { apply_move_card(); e.Skip(); }); + m_move_axis->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { apply_move_card(); e.Skip(); }); + + m_box_move = new wxBoxSizer(wxVERTICAL); + m_box_move->Add(card_header(m_cards, "design_move", _L("Move / Rotate"), m_hdr_move), 0, + wxLEFT | wxRIGHT | wxTOP, 12); + m_box_move->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_move->Add(mform, 0, wxEXPAND | wxALL, 12); + cards->Add(m_box_move, 0, wxEXPAND); + } + + // --- Polygon (sketch tool options) --- + { + // NO polygon card. Sides and Circumscribed are tool parameters and are chosen from the + // tool — the offer's Create > Polygon submenu names the common side counts and the two + // fits, and arming from there sets both. A spin field on the left could not be reached + // without leaving the geometry, and the count is unrecoverable afterwards: the inline + // editor a drawn polygon opens offers Side and Angle, never the count. e1p. + } + + // --- Extrude dialog (consumes the selected sketch) --- + m_box_extrude = new wxBoxSizer(wxVERTICAL); + m_box_extrude->Add(card_header(m_cards, "design_extrude", _L("Extrude"), m_hdr_extrude), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_extrude->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_extrude_sketch_label = new wxStaticText(m_cards, wxID_ANY, _L("Sketch: —")); + m_box_extrude->Add(m_extrude_sketch_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* eform = two_col_form(); + + // A negative distance extrudes the other way — Onshape behaviour, where a negative + // depth IS the flip. The default 0.1 floor made that impossible to type, so the only + // way inward was the Flip box, and a user who typed "-5" silently got +0.1 instead. + // Flip and a negative distance double-negate, which is what setting both asked for. + m_distance = make_spin(m_cards, 10, -1000.0, 1000.0); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Extrude dist")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(spin_frame(m_distance), 0, wxEXPAND); + + // End condition (order MUST match ExtrudeEnd: Blind/Symmetric/TwoSided/ThroughAll/ + // UpToFace/UpToVertex). Up-to-face uses the currently click-selected solid face. + m_extrude_end = make_combo(m_cards); + for (const char* s : { "Blind", "Symmetric", "Two-sided", "Through all", + "Up to face", "Up to vertex" }) + m_extrude_end->Append(s); + m_extrude_end->SetSelection(0); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("End")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(m_extrude_end, 0, wxEXPAND); + + m_distance2 = make_spin(m_cards, 5, 0.0, 100000.0); // second-side depth (Two-sided) + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("2nd dist")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(spin_frame(m_distance2), 0, wxEXPAND); + + m_taper = make_spin(m_cards, 0.0, -89.0, 89.0); // draft angle (deg) + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Taper °")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(spin_frame(m_taper), 0, wxEXPAND); + + m_mode = make_combo(m_cards); + // Order is load-bearing: index maps to BooleanMode (New=0, Add=1, Cut=2, Intersect=3). + // Labels use Onshape wording so the choice reads as the user thinks of it. + m_mode->Append(_L("New body")); // separate coexisting solid + m_mode->Append(_L("Join")); // fuse into the target body (was "Add") + m_mode->Append(_L("Cut")); // subtract from the target body + m_mode->Append(_L("Intersect")); // keep only the overlap + m_mode->SetSelection(0); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Result")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(m_mode, 0, wxEXPAND); + + m_flip = new CheckBox(m_cards); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip direction")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(m_flip, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + m_box_extrude->Add(eform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_extrude, 0, wxEXPAND); + + // --- Dress-up (Fillet / Chamfer) --- + auto* dform = two_col_form(); + + m_dressup_type = make_combo(m_cards); + m_dressup_type->Append(_L("Fillet")); + m_dressup_type->Append(_L("Chamfer")); + m_dressup_type->SetSelection(0); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Type")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(m_dressup_type, 0, wxEXPAND); + + // The card can dress ONE picked edge or a whole face-group, and which one it will do is + // decided by a viewport pick the card previously said nothing about — so a user who had not + // picked an edge saw only the group combo and concluded per-edge rounding did not exist, + // while a user who HAD picked one saw the combo still reading "All" and was told the opposite + // of what Confirm would do. This row states the actual target, as Shell and Draft already do. + m_dressup_edge_label = new wxStaticText(m_cards, wxID_ANY, _L("(no edge picked — group below)")); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Target")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(m_dressup_edge_label, 0, wxALIGN_CENTER_VERTICAL); + + m_face_group = make_combo(m_cards); + m_face_group->Append(_L("Top")); // index 0 -> FaceGroup::Top + m_face_group->Append(_L("Bottom")); // 1 -> Bottom + m_face_group->Append(_L("Lateral")); // 2 -> Lateral + m_face_group->Append(_L("All")); // 3 -> All + m_face_group->SetSelection(3); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Edges")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(m_face_group, 0, wxEXPAND); + + m_dressup_size = make_spin(m_cards, 2.0); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Size (r/dist)")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(spin_frame(m_dressup_size), 0, wxEXPAND); + + m_box_dressup = new wxBoxSizer(wxVERTICAL); + m_box_dressup->Add(card_header(m_cards, "design_dressup", _L("Fillet / Chamfer"), m_hdr_dressup), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_dressup->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_dressup->Add(dform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + cards->Add(m_box_dressup, 0, wxEXPAND); + + // --- Hole (positioned circular cut) --- + auto* hform = two_col_form(); + + m_hole_plane = make_combo(m_cards); + m_hole_plane->Append(_L("XY")); + m_hole_plane->Append(_L("XZ")); + m_hole_plane->Append(_L("YZ")); + m_hole_plane->SetSelection(0); + // Picking a plane here is an explicit choice: drop any on-face hijack (a stale face pick + // could keep m_hole_on_face true, so the dropdown was ignored and the hole drilled on the + // face's plane instead of the chosen XY/XZ/YZ). + m_hole_plane->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { + m_hole_on_face = false; + m_hole_has_bounds = false; + set_hole_target_label(-1); + update_hole_gizmo(); + refresh_preview(); + e.Skip(); + }); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Hole plane")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(m_hole_plane, 0, wxEXPAND); + + m_hole_diameter = make_spin(m_cards, 6.0); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Diameter")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_hole_diameter), 0, wxEXPAND); + + m_hole_depth = make_spin(m_cards, 10.0); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Depth (blind)")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_hole_depth), 0, wxEXPAND); + + m_hole_x = make_spin(m_cards, 0.0, -1000.0, 1000.0); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pos X")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_hole_x), 0, wxEXPAND); + + m_hole_y = make_spin(m_cards, 0.0, -1000.0, 1000.0); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pos Y")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_hole_y), 0, wxEXPAND); + + m_hole_through = new CheckBox(m_cards); + m_hole_through->SetValue(true); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Through")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(m_hole_through, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + m_hole_target_label = new wxStaticText(m_cards, wxID_ANY, _L("(none — uses Hole plane)")); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("On face")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(m_hole_target_label, 0, wxALIGN_CENTER_VERTICAL); + + m_box_hole = new wxBoxSizer(wxVERTICAL); + m_box_hole->Add(card_header(m_cards, "design_hole", _L("Hole"), m_hdr_hole), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_hole->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_hole->Add(hform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + cards->Add(m_box_hole, 0, wxEXPAND); + + // --- Thread (helical) --- + auto* tform = two_col_form(); + + m_thread_plane = make_combo(m_cards); + m_thread_plane->Append(_L("XY")); + m_thread_plane->Append(_L("XZ")); + m_thread_plane->Append(_L("YZ")); + m_thread_plane->SetSelection(0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thread plane")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thread_plane, 0, wxEXPAND); + + // Standard designation picker — fills pitch/depth (and nominal radius) from the + // ISO metric / Unified imperial tables. "Custom" leaves the manual spins alone. + m_thread_std = make_combo(m_cards); + m_thread_std->Append(_L("Custom")); + for (const ThreadSpec& s : thread_standards()) + m_thread_std->Append(s.name); + m_thread_std->SetSelection(0); + m_thread_std->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { apply_thread_standard(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Standard")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thread_std, 0, wxEXPAND); + + // Threads are specified by DIAMETER (M6 = Ø6); the value is derived from the picked cylindrical + // surface / circular edge, so it's a readout users rarely type. Stored field holds the diameter. + m_thread_radius = make_spin(m_cards, 10.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Diameter")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_radius), 0, wxEXPAND); + + m_thread_pitch = make_spin(m_cards, 2.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pitch")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_pitch), 0, wxEXPAND); + + m_thread_height = make_spin(m_cards, 10.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Length")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_height), 0, wxEXPAND); + + m_thread_depth = make_spin(m_cards, 1.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thread depth")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_depth), 0, wxEXPAND); + + m_thread_x = make_spin(m_cards, 0.0, -1000.0, 1000.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pos X")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_x), 0, wxEXPAND); + + m_thread_y = make_spin(m_cards, 0.0, -1000.0, 1000.0); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pos Y")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thread_y), 0, wxEXPAND); + + m_thread_internal = new CheckBox(m_cards); + m_thread_internal->SetValue(false); + // External rod uses the major radius; an internal tapped bore uses the minor + // (tap-drill) radius — re-derive the nominal radius when the role flips. + m_thread_internal->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { + apply_thread_standard(); + e.Skip(); + }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Internal")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thread_internal, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + m_thread_target_label = new wxStaticText(m_cards, wxID_ANY, _L("(none — uses Thread plane)")); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("On face")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thread_target_label, 0, wxALIGN_CENTER_VERTICAL); + + m_box_thread = new wxBoxSizer(wxVERTICAL); + m_box_thread->Add(card_header(m_cards, "design_thread", _L("Thread"), m_hdr_thread), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_thread->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_thread->Add(tform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + cards->Add(m_box_thread, 0, wxEXPAND); + + // --- Revolve (sweep a sketch profile about an in-plane axis) --- + m_box_revolve = new wxBoxSizer(wxVERTICAL); + m_box_revolve->Add(card_header(m_cards, "design_revolve", _L("Revolve"), m_hdr_revolve), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_revolve->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_revolve_sketch_label = new wxStaticText(m_cards, wxID_ANY, _L("Sketch: —")); + m_box_revolve->Add(m_revolve_sketch_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* rform = two_col_form(); + + m_revolve_angle = make_spin(m_cards, 360.0, 1.0, 360.0); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle °")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(spin_frame(m_revolve_angle), 0, wxEXPAND); + + m_revolve_axis = make_combo(m_cards); + m_revolve_axis->Append(_L("Plane X")); + m_revolve_axis->Append(_L("Plane Y")); + m_revolve_axis->SetSelection(0); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Axis")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_revolve_axis, 0, wxEXPAND); + + m_revolve_mode = make_combo(m_cards); + m_revolve_mode->Append(_L("New")); + m_revolve_mode->Append(_L("Add")); + m_revolve_mode->Append(_L("Cut")); + m_revolve_mode->Append(_L("Intersect")); + m_revolve_mode->SetSelection(0); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Mode")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_revolve_mode, 0, wxEXPAND); + + m_revolve_flip = new CheckBox(m_cards); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip direction")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_revolve_flip, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + + m_box_revolve->Add(rform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_revolve, 0, wxEXPAND); + + // --- Sweep (sweep a profile sketch along a path sketch) --- + m_box_sweep = new wxBoxSizer(wxVERTICAL); + m_box_sweep->Add(card_header(m_cards, "design_sweep", _L("Sweep"), m_hdr_sweep), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_sweep->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_sweep_profile_label = new wxStaticText(m_cards, wxID_ANY, _L("Profile: —")); + m_box_sweep->Add(m_sweep_profile_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* sform = two_col_form(); + + m_sweep_path = make_combo(m_cards); + sform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Path")), 0, wxALIGN_CENTER_VERTICAL); + sform->Add(m_sweep_path, 0, wxEXPAND); + + m_sweep_mode = make_combo(m_cards); + m_sweep_mode->Append(_L("New")); + m_sweep_mode->Append(_L("Add")); + m_sweep_mode->Append(_L("Cut")); + m_sweep_mode->Append(_L("Intersect")); + m_sweep_mode->SetSelection(0); + sform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Mode")), 0, wxALIGN_CENTER_VERTICAL); + sform->Add(m_sweep_mode, 0, wxEXPAND); + + m_box_sweep->Add(sform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_sweep, 0, wxEXPAND); + + // --- Pattern (replicate the target body: linear or circular) --- + m_box_pattern = new wxBoxSizer(wxVERTICAL); + m_box_pattern->Add(card_header(m_cards, "design_pattern", _L("Pattern"), m_hdr_pattern), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_pattern->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* pform = two_col_form(); + + m_pattern_type = make_combo(m_cards); + m_pattern_type->Append(_L("Linear")); + m_pattern_type->Append(_L("Circular")); + m_pattern_type->SetSelection(0); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Type")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(m_pattern_type, 0, wxEXPAND); + + m_pattern_count = make_spin(m_cards, 3, 1, 999); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Count")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(spin_frame(m_pattern_count), 0, wxEXPAND); + + m_pattern_spacing = make_spin(m_cards, 20.0, 0.01, 100000.0); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Spacing")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(spin_frame(m_pattern_spacing), 0, wxEXPAND); + + m_pattern_dir = make_combo(m_cards); + m_pattern_dir->Append(_L("Plane X")); + m_pattern_dir->Append(_L("Plane Y")); + m_pattern_dir->SetSelection(0); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Direction")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(m_pattern_dir, 0, wxEXPAND); + + m_pattern_angle = make_spin(m_cards, 360.0, 1.0, 360.0); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Total angle°")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(spin_frame(m_pattern_angle), 0, wxEXPAND); + + m_box_pattern->Add(pform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_pattern, 0, wxEXPAND); + + // --- Boolean (combine two existing bodies: union / subtract / intersect) --- + m_box_boolean = new wxBoxSizer(wxVERTICAL); + m_box_boolean->Add(card_header(m_cards, "design_boolean", _L("Boolean"), m_hdr_boolean), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_boolean->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* bform = two_col_form(); + + m_bool_op = make_combo(m_cards); + m_bool_op->Append(_L("Union (join)")); + m_bool_op->Append(_L("Subtract (cut)")); + m_bool_op->Append(_L("Intersect")); + m_bool_op->SetSelection(0); + m_bool_op->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + bform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Operation")), 0, wxALIGN_CENTER_VERTICAL); + bform->Add(m_bool_op, 0, wxEXPAND); + + m_bool_target = make_combo(m_cards); + m_bool_target->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + bform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Target (kept)")), 0, wxALIGN_CENTER_VERTICAL); + bform->Add(m_bool_target, 0, wxEXPAND); + + m_bool_tool = make_combo(m_cards); + m_bool_tool->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + bform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Tool")), 0, wxALIGN_CENTER_VERTICAL); + bform->Add(m_bool_tool, 0, wxEXPAND); + + // Fuzzy tolerance (mm): the main use is a tool body cutting a destination — a small + // tolerance lets near-coincident mating faces resolve into a clean cut instead of a + // failed boolean or sliver faces. 0 = exact. + m_bool_tol = make_spin(m_cards, 0.0, 0.0, 100.0); + m_bool_tol->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + bform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Tolerance")), 0, wxALIGN_CENTER_VERTICAL); + bform->Add(spin_frame(m_bool_tol), 0, wxEXPAND); + + m_box_boolean->Add(bform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + m_bool_keep = new CheckBox(m_cards); + m_bool_keep->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + auto* keeprow = new wxBoxSizer(wxHORIZONTAL); + keeprow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Keep tool body")), 0, wxALIGN_CENTER_VERTICAL); + keeprow->AddStretchSpacer(); + keeprow->Add(m_bool_keep, 0, wxALIGN_CENTER_VERTICAL); + m_box_boolean->Add(keeprow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_boolean, 0, wxEXPAND); + + // --- Cut (split a body with a plane): parameters only; ✓/✗ live on the ribbon --- + m_box_cut = new wxBoxSizer(wxVERTICAL); + m_box_cut->Add(card_header(m_cards, "design_cut", _L("Cut"), m_hdr_cut), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_cut->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* cform = two_col_form(); + + m_cut_target = make_combo(m_cards); + m_cut_target->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + cform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxALIGN_CENTER_VERTICAL); + cform->Add(m_cut_target, 0, wxEXPAND); + + m_cut_plane = make_combo(m_cards); + m_cut_plane->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + cform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Plane")), 0, wxALIGN_CENTER_VERTICAL); + cform->Add(m_cut_plane, 0, wxEXPAND); + + m_cut_offset = make_spin(m_cards, 0.0, -10000.0, 10000.0); + m_cut_offset->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + cform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Offset")), 0, wxALIGN_CENTER_VERTICAL); + cform->Add(spin_frame(m_cut_offset), 0, wxEXPAND); + + m_box_cut->Add(cform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + // The cut always leaves BOTH pieces as separate bodies (a non-destructive split); + // delete one from the tree afterwards if you only want a half. + } + cards->Add(m_box_cut, 0, wxEXPAND); + + // --- Insert (Text / SVG placement): Confirm/Cancel for the in-canvas art transform --- + m_box_insert = new wxBoxSizer(wxVERTICAL); + m_box_insert->Add(card_header(m_cards, "design_text", _L("Insert"), m_hdr_insert), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_insert->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_insert->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Drag a corner to size, the centre to move.\nConfirm or Cancel in the toolbar above.")), + 0, wxLEFT | wxRIGHT | wxBOTTOM, 12); + cards->Add(m_box_insert, 0, wxEXPAND); + + // --- Plane (datum/reference plane: offset + tilt from a base plane; no solid) --- + m_box_plane = new wxBoxSizer(wxVERTICAL); + m_box_plane->Add(card_header(m_cards, "design_plane", _L("Plane"), m_hdr_plane), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_plane->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + // Plane type chooses which inputs matter (Onshape/Fusion parity): + // Offset = Base (or Face A) + Offset (+ Tilt about a base axis) + // Angle = Edge A (line) + Base/Face A reference + Angle° + // Midplane = Face A + Face B (halfway between) + // Tangent = Face A (a cylinder) + Angle° around its axis + // Two edges = Edge A + Edge B + // Coincident = Face A (lie on that face) + m_plane_type = make_combo(m_cards); + for (const wxString& t : { _L("Offset"), _L("Angle"), _L("Midplane"), + _L("Tangent"), _L("Two edges"), _L("Coincident") }) + m_plane_type->Append(t); + m_plane_type->SetSelection(0); + m_box_plane->Add(new wxStaticText(m_cards, wxID_ANY, _L("Plane type")), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_plane->Add(m_plane_type, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + auto* plform = two_col_form(); + + m_plane_base = make_combo(m_cards); + populate_plane_choices(m_plane_base); // XY/XZ/YZ + any existing datum planes + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Base")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(m_plane_base, 0, wxEXPAND); + + m_plane_offset = make_spin(m_cards, 20.0, -100000.0, 100000.0); + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Offset")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(spin_frame(m_plane_offset), 0, wxEXPAND); + + m_plane_tilt = make_spin(m_cards, 0.0, -180.0, 180.0); + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle°")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(spin_frame(m_plane_tilt), 0, wxEXPAND); + + m_plane_tilt_axis = make_combo(m_cards); + m_plane_tilt_axis->Append(_L("Base X")); + m_plane_tilt_axis->Append(_L("Base Y")); + m_plane_tilt_axis->SetSelection(0); + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Tilt axis")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(m_plane_tilt_axis, 0, wxEXPAND); + + // Contextual reference picks: arm a target, then click a solid face/edge in the canvas. + auto pick_row = [&](const wxString& label, wxButton*& btn, wxStaticText*& lbl, PlanePick target) { + btn = new wxButton(m_cards, wxID_ANY, label); + lbl = new wxStaticText(m_cards, wxID_ANY, _L("(none)")); + btn->Bind(wxEVT_BUTTON, [this, target](wxCommandEvent&) { arm_plane_pick(target); }); + plform->Add(btn); + plform->Add(lbl, 0, wxALIGN_CENTER_VERTICAL); + }; + pick_row(_L("Pick Face A"), m_plane_pick_faceA, m_plane_faceA_lbl, PlanePick::FaceA); + pick_row(_L("Pick Face B"), m_plane_pick_faceB, m_plane_faceB_lbl, PlanePick::FaceB); + pick_row(_L("Pick Edge A"), m_plane_pick_edgeA, m_plane_edgeA_lbl, PlanePick::EdgeA); + pick_row(_L("Pick Edge B"), m_plane_pick_edgeB, m_plane_edgeB_lbl, PlanePick::EdgeB); + + m_plane_usize = make_spin(m_cards, 60.0, 1.0, 100000.0); + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Size U")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(spin_frame(m_plane_usize), 0, wxEXPAND); + m_plane_vsize = make_spin(m_cards, 60.0, 1.0, 100000.0); + plform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Size V")), 0, wxALIGN_CENTER_VERTICAL); + plform->Add(spin_frame(m_plane_vsize), 0, wxEXPAND); + + m_box_plane->Add(plform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_plane, 0, wxEXPAND); + + // --- Loft (skin a solid through 2+ ordered profile sketches) --- + m_box_loft = new wxBoxSizer(wxVERTICAL); + m_box_loft->Add(card_header(m_cards, "design_loft", _L("Loft"), m_hdr_loft), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_loft->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_loft->Add(new wxStaticText(m_cards, wxID_ANY, _L("Profiles (check 2+, in order):")), + 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_loft_list = new wxCheckListBox(m_cards, wxID_ANY, wxDefaultPosition, wxSize(-1, 120)); + m_loft_list->Bind(wxEVT_CHECKLISTBOX, [this](wxCommandEvent&) { refresh_preview(); }); + m_box_loft->Add(m_loft_list, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* lform = two_col_form(); + + m_loft_mode = make_combo(m_cards); + m_loft_mode->Append(_L("New")); + m_loft_mode->Append(_L("Add")); + m_loft_mode->Append(_L("Cut")); + m_loft_mode->Append(_L("Intersect")); + m_loft_mode->SetSelection(0); + lform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Mode")), 0, wxALIGN_CENTER_VERTICAL); + lform->Add(m_loft_mode, 0, wxEXPAND); + + m_box_loft->Add(lform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + m_loft_ruled = new CheckBox(m_cards); + { + auto* lrow = new wxBoxSizer(wxHORIZONTAL); + lrow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Ruled (straight) sections")), 0, wxALIGN_CENTER_VERTICAL); + lrow->AddStretchSpacer(); + lrow->Add(m_loft_ruled, 0, wxALIGN_CENTER_VERTICAL); + m_box_loft->Add(lrow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_loft, 0, wxEXPAND); + + // --- Surface Extrude (sheet body from sketch) --- + m_box_surf_extrude = new wxBoxSizer(wxVERTICAL); + m_box_surf_extrude->Add(card_header(m_cards, "design_extrude", _L("Surface Extrude"), m_hdr_surf_extrude), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_extrude->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_surf_extrude_sketch_label = new wxStaticText(m_cards, wxID_ANY, _L("Sketch: —")); + m_box_surf_extrude->Add(m_surf_extrude_sketch_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* sform = two_col_form(); + m_surf_extrude_distance = make_spin(m_cards, 10); + sform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Distance")), 0, wxALIGN_CENTER_VERTICAL); + sform->Add(spin_frame(m_surf_extrude_distance), 0, wxEXPAND); + m_box_surf_extrude->Add(sform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_surf_extrude, 0, wxEXPAND); + + // --- Surface Revolve (sheet body from sketch about axis) --- + m_box_surf_revolve = new wxBoxSizer(wxVERTICAL); + m_box_surf_revolve->Add(card_header(m_cards, "design_revolve", _L("Surface Revolve"), m_hdr_surf_revolve), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_revolve->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_surf_revolve_sketch_label = new wxStaticText(m_cards, wxID_ANY, _L("Sketch: —")); + m_box_surf_revolve->Add(m_surf_revolve_sketch_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + { + auto* rform = two_col_form(); + m_surf_revolve_angle = make_spin(m_cards, 360.0, 1.0, 360.0); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle °")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(spin_frame(m_surf_revolve_angle), 0, wxEXPAND); + m_surf_revolve_axis = make_combo(m_cards); + m_surf_revolve_axis->Append(_L("Plane X")); + m_surf_revolve_axis->Append(_L("Plane Y")); + m_surf_revolve_axis->SetSelection(0); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Axis")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_surf_revolve_axis, 0, wxEXPAND); + m_surf_revolve_flip = new CheckBox(m_cards); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip direction")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_surf_revolve_flip, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + m_box_surf_revolve->Add(rform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_surf_revolve, 0, wxEXPAND); + + // --- Surface Loft (sheet skin through 2+ ordered profile sketches) --- + m_box_surf_loft = new wxBoxSizer(wxVERTICAL); + m_box_surf_loft->Add(card_header(m_cards, "design_loft", _L("Surface Loft"), m_hdr_surf_loft), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_loft->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_surf_loft->Add(new wxStaticText(m_cards, wxID_ANY, _L("Profiles (check 2+, in order):")), + 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_surf_loft_list = new wxCheckListBox(m_cards, wxID_ANY, wxDefaultPosition, wxSize(-1, 120)); + m_surf_loft_list->Bind(wxEVT_CHECKLISTBOX, [this](wxCommandEvent&) { refresh_preview(); }); + m_box_surf_loft->Add(m_surf_loft_list, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_surf_loft_ruled = new CheckBox(m_cards); + { + auto* lrow = new wxBoxSizer(wxHORIZONTAL); + lrow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Ruled (straight) sections")), 0, wxALIGN_CENTER_VERTICAL); + lrow->AddStretchSpacer(); + lrow->Add(m_surf_loft_ruled, 0, wxALIGN_CENTER_VERTICAL); + m_box_surf_loft->Add(lrow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_surf_loft, 0, wxEXPAND); + + // --- Surface Fill (one-face sheet from sketch boundary) --- + m_box_surf_fill = new wxBoxSizer(wxVERTICAL); + m_box_surf_fill->Add(card_header(m_cards, "design_surface", _L("Surface Fill"), m_hdr_surf_fill), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_fill->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_surf_fill_sketch_label = new wxStaticText(m_cards, wxID_ANY, _L("Sketch: —")); + m_box_surf_fill->Add(m_surf_fill_sketch_label, 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_fill->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Fills the sketch's closed boundary with a smooth face.")), + 0, wxLEFT | wxRIGHT, 12); + cards->Add(m_box_surf_fill, 0, wxEXPAND); + + // --- Surface Offset (offset a sheet body) --- + m_box_surf_offset = new wxBoxSizer(wxVERTICAL); + m_box_surf_offset->Add(card_header(m_cards, "design_offset", _L("Surface Offset"), m_hdr_surf_offset), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_offset->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* oform = two_col_form(); + m_surf_offset_body = make_combo(m_cards); + m_surf_offset_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + oform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Sheet body")), 0, wxALIGN_CENTER_VERTICAL); + oform->Add(m_surf_offset_body, 0, wxEXPAND); + m_surf_offset_distance = make_spin(m_cards, 1.0, -100000.0, 100000.0); + m_surf_offset_distance->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + oform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Offset")), 0, wxALIGN_CENTER_VERTICAL); + oform->Add(spin_frame(m_surf_offset_distance), 0, wxEXPAND); + m_box_surf_offset->Add(oform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_offset->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Offsets a sheet body's shell. Positive = outward, negative = inward.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_surf_offset, 0, wxEXPAND); + + // --- Thicken Surface (thicken a sheet body into a solid) --- + m_box_surf_thicken = new wxBoxSizer(wxVERTICAL); + m_box_surf_thicken->Add(card_header(m_cards, "design_thicken", _L("Thicken Surface"), m_hdr_surf_thicken), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_thicken->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* tform = two_col_form(); + m_surf_thicken_body = make_combo(m_cards); + m_surf_thicken_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Sheet body")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_surf_thicken_body, 0, wxEXPAND); + m_surf_thicken_thickness = make_spin(m_cards, 1.0, 0.01, 100000.0); + m_surf_thicken_thickness->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thickness")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_surf_thicken_thickness), 0, wxEXPAND); + m_surf_thicken_flip = new CheckBox(m_cards); + m_surf_thicken_flip->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip direction")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_surf_thicken_flip, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL); + m_box_surf_thicken->Add(tform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_surf_thicken->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Thickens a sheet body into a solid. Flip reverses the direction.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_surf_thicken, 0, wxEXPAND); + + // --- Shell (hollow the current body to a wall thickness, removing one picked face) --- + auto* sform = two_col_form(); + m_shell_thickness = make_spin(m_cards, 2.0, 0.01, 100000.0); + sform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thickness")), 0, wxALIGN_CENTER_VERTICAL); + sform->Add(spin_frame(m_shell_thickness), 0, wxEXPAND); + m_shell_face_label = new wxStaticText(m_cards, wxID_ANY, _L("(all faces — closed hollow)")); + sform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Open face")), 0, wxALIGN_CENTER_VERTICAL); + sform->Add(m_shell_face_label, 0, wxALIGN_CENTER_VERTICAL); + + m_box_shell = new wxBoxSizer(wxVERTICAL); + m_box_shell->Add(card_header(m_cards, "design_shell", _L("Shell"), m_hdr_shell), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_shell->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_shell->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Pick a solid face to open it, then set the wall thickness.")), + 0, wxLEFT | wxRIGHT, 12); + m_box_shell->Add(sform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + cards->Add(m_box_shell, 0, wxEXPAND); + + // --- Draft (taper a single picked solid face about the body bottom) --- + auto* drform = two_col_form(); + m_draft_angle = make_spin(m_cards, 5.0, -89.0, 89.0); + drform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle (°)")), 0, wxALIGN_CENTER_VERTICAL); + drform->Add(spin_frame(m_draft_angle), 0, wxEXPAND); + m_draft_face_label = new wxStaticText(m_cards, wxID_ANY, _L("(pick a side face)")); + drform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Face")), 0, wxALIGN_CENTER_VERTICAL); + drform->Add(m_draft_face_label, 0, wxALIGN_CENTER_VERTICAL); + + m_box_draft = new wxBoxSizer(wxVERTICAL); + m_box_draft->Add(card_header(m_cards, "design_draft", _L("Draft"), m_hdr_draft), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_draft->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_box_draft->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Pick a side face, then set the draft angle. The face pivots about the body base.")), + 0, wxLEFT | wxRIGHT, 12); + m_box_draft->Add(drform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + cards->Add(m_box_draft, 0, wxEXPAND); + + // --- Transform (rigid move/rotate of an existing body) --- + m_box_transform = new wxBoxSizer(wxVERTICAL); + m_box_transform->Add(card_header(m_cards, "design_move", _L("Transform"), m_hdr_transform), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_transform->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* xform = two_col_form(); + m_xf_body = make_combo(m_cards); + m_xf_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(m_xf_body, 0, wxEXPAND); + m_xf_dx = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_dx->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Translate X")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_dx), 0, wxEXPAND); + m_xf_dy = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_dy->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Translate Y")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_dy), 0, wxEXPAND); + m_xf_dz = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_dz->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Translate Z")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_dz), 0, wxEXPAND); + m_xf_axis = make_combo(m_cards); + m_xf_axis->Append(_L("X")); + m_xf_axis->Append(_L("Y")); + m_xf_axis->Append(_L("Z")); + m_xf_axis->SetSelection(2); // default Z + m_xf_axis->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Rotate axis")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(m_xf_axis, 0, wxEXPAND); + m_xf_angle = make_spin(m_cards, 0.0, -360.0, 360.0); + m_xf_angle->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Angle (°)")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_angle), 0, wxEXPAND); + m_xf_pivot_x = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_pivot_x->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pivot X")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_pivot_x), 0, wxEXPAND); + m_xf_pivot_y = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_pivot_y->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pivot Y")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_pivot_y), 0, wxEXPAND); + m_xf_pivot_z = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_xf_pivot_z->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + xform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pivot Z")), 0, wxALIGN_CENTER_VERTICAL); + xform->Add(spin_frame(m_xf_pivot_z), 0, wxEXPAND); + m_box_transform->Add(xform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_xf_copy = new CheckBox(m_cards); + m_xf_copy->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + auto* cpro = new wxBoxSizer(wxHORIZONTAL); + cpro->Add(new wxStaticText(m_cards, wxID_ANY, _L("Keep original (make a copy)")), 0, wxALIGN_CENTER_VERTICAL); + cpro->AddStretchSpacer(); + cpro->Add(m_xf_copy, 0, wxALIGN_CENTER_VERTICAL); + m_box_transform->Add(cpro, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_transform->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Translate and/or rotate the selected body. Rotation is applied about the pivot, then translation follows.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_transform, 0, wxEXPAND); + + // --- Mirror (reflect a body about a plane) --- + m_box_mirror = new wxBoxSizer(wxVERTICAL); + m_box_mirror->Add(card_header(m_cards, "design_mirror", _L("Mirror"), m_hdr_mirror), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_mirror->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* mform = two_col_form(); + m_mirror_body = make_combo(m_cards); + m_mirror_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_mirror_body, 0, wxEXPAND); + m_mirror_plane = make_combo(m_cards); + m_mirror_plane->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Mirror plane")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_mirror_plane, 0, wxEXPAND); + m_box_mirror->Add(mform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_mirror_keep = new CheckBox(m_cards); + m_mirror_keep->SetValue(true); + m_mirror_keep->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + auto* mkrow = new wxBoxSizer(wxHORIZONTAL); + mkrow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Keep original")), 0, wxALIGN_CENTER_VERTICAL); + mkrow->AddStretchSpacer(); + mkrow->Add(m_mirror_keep, 0, wxALIGN_CENTER_VERTICAL); + m_box_mirror->Add(mkrow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_mirror->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Reflect the selected body about a plane. The mirror is always a new body; keeping the original gives you both.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_mirror, 0, wxEXPAND); + + // --- Thicken (offset one solid face into a thin plate) --- + m_box_thicken = new wxBoxSizer(wxVERTICAL); + m_box_thicken->Add(card_header(m_cards, "design_thicken", _L("Thicken"), m_hdr_thicken), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_thicken->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* tform = two_col_form(); + m_thicken_body = make_combo(m_cards); + m_thicken_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thicken_body, 0, wxEXPAND); + m_thicken_face_label = new wxStaticText(m_cards, wxID_ANY, _L("(pick a solid face)")); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Face")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(m_thicken_face_label, 0, wxALIGN_CENTER_VERTICAL); + m_thicken_thickness = make_spin(m_cards, 2.0, 0.01, 100000.0); + m_thicken_thickness->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + tform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thickness")), 0, wxALIGN_CENTER_VERTICAL); + tform->Add(spin_frame(m_thicken_thickness), 0, wxEXPAND); + m_box_thicken->Add(tform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_thicken_flip = new CheckBox(m_cards); + m_thicken_flip->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + auto* trow = new wxBoxSizer(wxHORIZONTAL); + trow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip direction")), 0, wxALIGN_CENTER_VERTICAL); + trow->AddStretchSpacer(); + trow->Add(m_thicken_flip, 0, wxALIGN_CENTER_VERTICAL); + m_box_thicken->Add(trow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_thicken->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Pick a solid face and offset it into a new thin body. Not for sheet bodies — use Thicken Surface for those.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_thicken, 0, wxEXPAND); + + // --- Rib (thin wall from an open sketch line, fused to a body) --- + m_box_rib = new wxBoxSizer(wxVERTICAL); + m_box_rib->Add(card_header(m_cards, "design_rib", _L("Rib"), m_hdr_rib), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_rib->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* rform = two_col_form(); + m_rib_body = make_combo(m_cards); + m_rib_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Target body")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_rib_body, 0, wxEXPAND); + m_rib_sketch = make_combo(m_cards); + m_rib_sketch->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Sketch")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_rib_sketch, 0, wxEXPAND); + m_rib_entity = new wxSpinCtrl(m_cards, wxID_ANY, "", wxDefaultPosition, wxSize(90, -1), + wxSP_ARROW_KEYS | wxBORDER_SIMPLE); + m_rib_entity->SetRange(0, 999); + m_rib_entity->SetValue(0); + m_rib_entity->Bind(wxEVT_SPINCTRL, [this](wxSpinEvent&) { refresh_preview(); }); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Entity index")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(m_rib_entity, 0, wxEXPAND); + m_rib_thickness = make_spin(m_cards, 2.0, 0.01, 100000.0); + m_rib_thickness->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Thickness")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(spin_frame(m_rib_thickness), 0, wxEXPAND); + m_rib_depth = make_spin(m_cards, 10.0, 0.01, 100000.0); + m_rib_depth->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + rform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Depth")), 0, wxALIGN_CENTER_VERTICAL); + rform->Add(spin_frame(m_rib_depth), 0, wxEXPAND); + m_box_rib->Add(rform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_rib->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Grow a thin wall from an open sketch Line entity, fused to the target body. Entity index is the position of the open Line in the sketch.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_rib, 0, wxEXPAND); + + // --- Project (project body edges onto a plane as sketch entities) --- + m_box_project = new wxBoxSizer(wxVERTICAL); + m_box_project->Add(card_header(m_cards, "design_sketch", _L("Project"), m_hdr_project), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_project->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* pform = two_col_form(); + m_proj_source_body = make_combo(m_cards); + m_proj_source_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Source body")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(m_proj_source_body, 0, wxEXPAND); + m_proj_face_label = new wxStaticText(m_cards, wxID_ANY, _L("(all edges)")); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Face")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(m_proj_face_label, 0, wxALIGN_CENTER_VERTICAL); + m_proj_plane = make_combo(m_cards); + populate_plane_choices(m_proj_plane); + m_proj_plane->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + pform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Target plane")), 0, wxALIGN_CENTER_VERTICAL); + pform->Add(m_proj_plane, 0, wxEXPAND); + m_box_project->Add(pform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_project->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Project the edges of a body onto a plane as sketch entities. Pick a face to project only its edges, or leave the face empty to project the whole body.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_project, 0, wxEXPAND); + + // --- Delete Face (remove faces, heal the solid) --- + m_box_delete_face = new wxBoxSizer(wxVERTICAL); + m_box_delete_face->Add(card_header(m_cards, "design_delete", _L("Delete Face"), m_hdr_delete_face), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_delete_face->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* dform = two_col_form(); + m_del_face_body = make_combo(m_cards); + m_del_face_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(m_del_face_body, 0, wxEXPAND); + m_del_face_add_btn = new wxButton(m_cards, wxID_ANY, _L("Add picked face")); + m_del_face_add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + // Say why nothing happened. Clicking with no face picked used to be a silent no-op, + // which is indistinguishable from the button being broken. + if (m_sel_solid_face < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Click a face on the body first, then Add picked face")); + m_status->Refresh(); + return; + } + // Adding the same face twice puts a duplicate id in delete_faces, which the + // defeaturing algorithm has no reason to cope with. Re-clicking is a no-op, not an error. + if (std::find(m_del_faces.begin(), m_del_faces.end(), m_sel_solid_face) != m_del_faces.end()) { + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Face %d is already in the list"), m_sel_solid_face)); + m_status->Refresh(); + return; + } + { + m_del_faces.push_back(m_sel_solid_face); + wxString s; + for (size_t i = 0; i < m_del_faces.size(); ++i) { + if (i > 0) s += ", "; + s += wxString::Format("Face %d", m_del_faces[i]); + } + m_del_face_list->SetLabel(s.empty() ? _L("(none)") : s); + m_del_face_list->GetParent()->Layout(); + m_del_face_list->Refresh(); + refresh_preview(); + } + }); + dform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Faces to delete")), 0, wxALIGN_CENTER_VERTICAL); + dform->Add(m_del_face_add_btn, 0, wxALIGN_CENTER_VERTICAL); + m_del_face_list = new wxStaticText(m_cards, wxID_ANY, _L("(none)")); + dform->Add(0, 0); + dform->Add(m_del_face_list, 0, wxALIGN_CENTER_VERTICAL); + m_box_delete_face->Add(dform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_box_delete_face->Add(new wxStaticText(m_cards, wxID_ANY, + _L("Pick a solid face, then click 'Add picked face' to accumulate faces. Confirm to remove all listed faces and heal the solid.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_delete_face, 0, wxEXPAND); + + // --- Helix (helical curve) --- + m_box_helix = new wxBoxSizer(wxVERTICAL); + m_box_helix->Add(card_header(m_cards, "design_thread", _L("Helix"), m_hdr_helix), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_helix->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* hform = two_col_form(); + m_helix_plane = make_combo(m_cards); + populate_plane_choices(m_helix_plane); + m_helix_plane->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Plane")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(m_helix_plane, 0, wxEXPAND); + m_helix_radius = make_spin(m_cards, 10.0, 0.01, 10000.0); + m_helix_radius->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Radius")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_helix_radius), 0, wxEXPAND); + m_helix_pitch = make_spin(m_cards, 5.0, 0.01, 10000.0); + m_helix_pitch->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Pitch")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_helix_pitch), 0, wxEXPAND); + m_helix_height = make_spin(m_cards, 20.0, 0.01, 10000.0); + m_helix_height->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + hform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Height")), 0, wxALIGN_CENTER_VERTICAL); + hform->Add(spin_frame(m_helix_height), 0, wxEXPAND); + m_box_helix->Add(hform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_helix_left_handed = new CheckBox(m_cards); + m_helix_left_handed->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + auto* hrow = new wxBoxSizer(wxHORIZONTAL); + hrow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Left-handed")), 0, wxALIGN_CENTER_VERTICAL); + hrow->AddStretchSpacer(); + hrow->Add(m_helix_left_handed, 0, wxALIGN_CENTER_VERTICAL); + m_box_helix->Add(hrow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + m_helix_taper = make_spin(m_cards, 0.0, -89.0, 89.0); + m_helix_taper->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + auto* tvalform = two_col_form(); + tvalform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Taper (°)")), 0, wxALIGN_CENTER_VERTICAL); + tvalform->Add(spin_frame(m_helix_taper), 0, wxEXPAND); + m_box_helix->Add(tvalform, 0, wxEXPAND | wxLEFT | wxRIGHT, 12); + m_box_helix->Add(new wxStaticText(m_cards, wxID_ANY, + _L("A helical curve (spring path). Use as a sweep path to build springs, coils, or augers.")), + 0, wxLEFT | wxRIGHT, 12); + } + cards->Add(m_box_helix, 0, wxEXPAND); + + // --- Axis (datum axis: line through two points or derived from geometry) --- + m_box_axis = new wxBoxSizer(wxVERTICAL); + m_box_axis->Add(card_header(m_cards, "design_line", _L("Axis"), m_hdr_axis), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_axis->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + m_axis_type = make_combo(m_cards); + for (const wxString& t : { _L("Two points"), _L("Face normal"), _L("Cylinder centerline"), + _L("Plane intersection"), _L("Along edge") }) + m_axis_type->Append(t); + m_axis_type->SetSelection(0); + m_box_axis->Add(new wxStaticText(m_cards, wxID_ANY, _L("Axis type")), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_axis->Add(m_axis_type, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + auto* axform = two_col_form(); + + auto ax_pick = [&](const wxString& label, wxButton*& btn, wxStaticText*& lbl, AxisPick target) { + btn = new wxButton(m_cards, wxID_ANY, label); + lbl = new wxStaticText(m_cards, wxID_ANY, _L("(none)")); + btn->Bind(wxEVT_BUTTON, [this, target](wxCommandEvent&) { arm_axis_pick(target); }); + axform->Add(btn); + axform->Add(lbl, 0, wxALIGN_CENTER_VERTICAL); + }; + ax_pick(_L("Pick Face"), m_axis_pick_face, m_axis_face_lbl, AxisPick::Face); + ax_pick(_L("Pick Edge"), m_axis_pick_edge, m_axis_edge_lbl, AxisPick::Edge); + + m_axis_plane_a = make_combo(m_cards); + populate_plane_choices(m_axis_plane_a); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Plane A")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(m_axis_plane_a, 0, wxEXPAND); + m_axis_plane_b = make_combo(m_cards); + populate_plane_choices(m_axis_plane_b); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Plane B")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(m_axis_plane_b, 0, wxEXPAND); + + m_axis_p1x = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_axis_p1y = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_axis_p1z = make_spin(m_cards, 0.0, -100000.0, 100000.0); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 1 X")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p1x), 0, wxEXPAND); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 1 Y")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p1y), 0, wxEXPAND); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 1 Z")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p1z), 0, wxEXPAND); + + m_axis_p2x = make_spin(m_cards, 10.0, -100000.0, 100000.0); + m_axis_p2y = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_axis_p2z = make_spin(m_cards, 0.0, -100000.0, 100000.0); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 2 X")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p2x), 0, wxEXPAND); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 2 Y")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p2y), 0, wxEXPAND); + axform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Point 2 Z")), 0, wxALIGN_CENTER_VERTICAL); + axform->Add(spin_frame(m_axis_p2z), 0, wxEXPAND); + + m_box_axis->Add(axform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_axis, 0, wxEXPAND); + + // --- CoordSys (datum coordinate system: point + orthonormal frame) --- + m_box_coordsys = new wxBoxSizer(wxVERTICAL); + m_box_coordsys->Add(card_header(m_cards, "design_point", _L("Coord Sys"), m_hdr_coordsys), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_coordsys->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + m_coordsys_type = make_combo(m_cards); + for (const wxString& t : { _L("Point (world)"), _L("Face + direction") }) + m_coordsys_type->Append(t); + m_coordsys_type->SetSelection(0); + m_box_coordsys->Add(new wxStaticText(m_cards, wxID_ANY, _L("Type")), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_coordsys->Add(m_coordsys_type, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + m_cs_body = make_combo(m_cards); + m_cs_body->Append(_L("(all)")); + m_cs_body->SetSelection(0); + m_cs_body->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { + if (m_viewport) m_viewport->set_xray_focus(m_cs_body->GetSelection() - 1); + }); + m_box_coordsys->Add(new wxStaticText(m_cards, wxID_ANY, _L("Body")), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_coordsys->Add(m_cs_body, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + auto* body_hint = new wxStaticText(m_cards, wxID_ANY, + _L("Restrict picking to one body — the others go see-through and stop catching clicks")); + body_hint->SetForegroundColour(dp_sec_text()); + m_box_coordsys->Add(body_hint, 0, wxLEFT | wxRIGHT | wxTOP, 12); + + auto* csform = two_col_form(); + + m_cs_x = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_cs_y = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_cs_z = make_spin(m_cards, 0.0, -100000.0, 100000.0); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("X")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_x), 0, wxEXPAND); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Y")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_y), 0, wxEXPAND); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Z")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_z), 0, wxEXPAND); + + auto cs_pick = [&](const wxString& label, wxButton*& btn, wxStaticText*& lbl, CoordSysPick target) { + btn = new wxButton(m_cards, wxID_ANY, label); + lbl = new wxStaticText(m_cards, wxID_ANY, _L("(none)")); + btn->Bind(wxEVT_BUTTON, [this, target](wxCommandEvent&) { arm_coordsys_pick(target); }); + csform->Add(btn); + csform->Add(lbl, 0, wxALIGN_CENTER_VERTICAL); + }; + cs_pick(_L("Pick Face"), m_cs_pick_face, m_cs_face_lbl, CoordSysPick::Face); + + // ponytail: edge pick for CoordSys with rotation-direction hint + m_cs_pick_edge = new wxButton(m_cards, wxID_ANY, _L("Edge (sets in-plane direction)")); + m_cs_edge_lbl = new wxStaticText(m_cards, wxID_ANY, _L("(none)")); + m_cs_pick_edge->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { arm_coordsys_pick(CoordSysPick::Edge); }); + csform->Add(m_cs_pick_edge); + csform->Add(m_cs_edge_lbl, 0, wxALIGN_CENTER_VERTICAL); + auto* edge_hint = new wxStaticText(m_cards, wxID_ANY, + _L("Without an edge the frame takes X from the face's first edge — pick one to choose it yourself")); + edge_hint->SetForegroundColour(dp_sec_text()); + csform->Add(0, 0); // empty left column + csform->Add(edge_hint, 0, wxALIGN_CENTER_VERTICAL); + + m_cs_hx = make_spin(m_cards, 1.0, -100000.0, 100000.0); + m_cs_hy = make_spin(m_cards, 0.0, -100000.0, 100000.0); + m_cs_hz = make_spin(m_cards, 0.0, -100000.0, 100000.0); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("X hint X")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_hx), 0, wxEXPAND); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("X hint Y")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_hy), 0, wxEXPAND); + csform->Add(new wxStaticText(m_cards, wxID_ANY, _L("X hint Z")), 0, wxALIGN_CENTER_VERTICAL); + csform->Add(spin_frame(m_cs_hz), 0, wxEXPAND); + + m_box_coordsys->Add(csform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_coordsys, 0, wxEXPAND); + + // --- Mate (assembly: align two CoordSys features) --- + m_box_mate = new wxBoxSizer(wxVERTICAL); + m_box_mate->Add(card_header(m_cards, "design_c_coincident", _L("Mate"), m_hdr_mate), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_mate->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + auto* mform = two_col_form(); + + m_mate_kind = make_combo(m_cards); + m_mate_kind->Append(_L("Fastened — 6 DOF locked, B driven onto A exactly")); + m_mate_kind->Append(_L("Planar — z aligned, offset distance; free in-plane slide")); + m_mate_kind->Append(_L("Revolute — axes collinear; free rotation about z")); + m_mate_kind->Append(_L("Slider — orientation locked; free axial slide")); + m_mate_kind->Append(_L("Cylindrical — axes collinear; free spin + axial slide")); + m_mate_kind->SetSelection(0); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Kind")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_mate_kind, 0, wxEXPAND); + + // Populate the CoordSys pickers on open; show "A (fixed)" and "B (moves)" combos. + m_mate_cs_a = make_combo(m_cards); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("CS A (fixed)")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_mate_cs_a, 0, wxEXPAND); + + m_mate_cs_b = make_combo(m_cards); + mform->Add(new wxStaticText(m_cards, wxID_ANY, _L("CS B (moves)")), 0, wxALIGN_CENTER_VERTICAL); + mform->Add(m_mate_cs_b, 0, wxEXPAND); + + m_offset_label = new wxStaticText(m_cards, wxID_ANY, _L("Offset")); + m_mate_offset = make_spin(m_cards, 0.0, -100000.0, 100000.0); + mform->Add(m_offset_label, 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_mate_offset), 0, wxEXPAND); + + m_angle_label = new wxStaticText(m_cards, wxID_ANY, _L("Angle \u00b0")); + m_mate_angle = make_spin(m_cards, 0.0, -360.0, 360.0); + mform->Add(m_angle_label, 0, wxALIGN_CENTER_VERTICAL); + mform->Add(spin_frame(m_mate_angle), 0, wxEXPAND); + + m_mate_flip = new CheckBox(m_cards); + auto* frow = new wxBoxSizer(wxHORIZONTAL); + frow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Flip (oppose z axes)")), 0, wxALIGN_CENTER_VERTICAL); + frow->AddStretchSpacer(); + frow->Add(m_mate_flip, 0, wxALIGN_CENTER_VERTICAL); + mform->Add(0, 0); + mform->Add(frow, 0, wxEXPAND); + + // Retitle offset/angle labels when the kind changes. + m_mate_kind->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { + const int kind = m_mate_kind->GetSelection(); + switch (kind) { + case 0: // Fastened + m_offset_label->SetLabel(_L("Offset")); + m_angle_label->SetLabel(_L("Angle \u00b0")); + break; + case 1: // Planar + m_offset_label->SetLabel(_L("Plane distance")); + m_angle_label->SetLabel(_L("Angle \u00b0")); + break; + case 2: // Revolute + m_offset_label->SetLabel(_L("Axial position")); + m_angle_label->SetLabel(_L("Angle \u00b0")); + break; + case 3: // Slider + m_offset_label->SetLabel(_L("Axial position")); + m_angle_label->SetLabel(_L("Angle \u00b0")); + break; + case 4: // Cylindrical + m_offset_label->SetLabel(_L("Axial position")); + m_angle_label->SetLabel(_L("Angle \u00b0")); + break; + } + m_cards->Layout(); m_form->Layout(); m_form->FitInside(); + refresh_preview(); + e.Skip(); + }); + + m_box_mate->Add(mform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_mate, 0, wxEXPAND); + // Refresh the confirm state whenever the mate inputs change. + m_mate_cs_a->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + m_mate_cs_b->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent&) { refresh_preview(); }); + m_mate_offset->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + m_mate_angle->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent&) { refresh_preview(); }); + m_mate_flip->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent&) { refresh_preview(); }); + + // --- Expression binding card (visible during feature edit only) --- + // Lets the user bind a numeric field to a document-variable expression. Field-name + // combo is populated per feature type and is editable for power users. Set applies + // the binding with checkpoint+recompute+undo-on-failure; Clear removes it. + m_box_expr = new wxBoxSizer(wxVERTICAL); + { + wxStaticText* expr_hdr = nullptr; + m_box_expr->Add(card_header(m_cards, "design_constrain", _L("Expression"), expr_hdr), 0, + wxLEFT | wxRIGHT | wxTOP, 12); + m_box_expr->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + + auto* eform = two_col_form(); + + // The only editable combo in this panel, hence not make_combo(): that passes + // wxCB_READONLY, and Orca's ComboBox HIDES its text ctrl under that style + // (ComboBox.cpp:51), so there is nothing to type into and no SetEditable() to + // turn it back on. Constructed with style 0, the ctrl is shown with + // wxTE_PROCESS_ENTER and GetTextLabel() returns what the user typed — which is + // what makes the 21 unmapped feature types reachable at all. + m_expr_field = new ComboBox(m_cards, wxID_ANY, wxEmptyString, wxDefaultPosition, + wxSize(FromDIP(90), FromDIP(24)), 0, nullptr, 0); + m_expr_field->SetMinSize(wxSize(FromDIP(90), FromDIP(24))); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Field")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(m_expr_field, 0, wxEXPAND); + + m_expr_text = new wxTextCtrl(m_cards, wxID_ANY, "", wxDefaultPosition, + wxSize(FromDIP(120), FromDIP(24)), + wxTE_PROCESS_ENTER | wxBORDER_SIMPLE); + m_expr_text->Bind(wxEVT_TEXT_ENTER, [this](wxCommandEvent&) { on_set_expr(); }); + eform->Add(new wxStaticText(m_cards, wxID_ANY, _L("Expr")), 0, wxALIGN_CENTER_VERTICAL); + eform->Add(m_expr_text, 0, wxEXPAND); + + m_box_expr->Add(eform, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + auto* brow = new wxBoxSizer(wxHORIZONTAL); + m_expr_set_btn = new wxButton(m_cards, wxID_ANY, _L("Set"), wxDefaultPosition, wxSize(50, 24)); + m_expr_clear_btn = new wxButton(m_cards, wxID_ANY, _L("Clear"), wxDefaultPosition, wxSize(50, 24)); + m_expr_set_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_set_expr(); }); + m_expr_clear_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_clear_expr(); }); + brow->Add(m_expr_set_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + brow->Add(m_expr_clear_btn, 0, wxALIGN_CENTER_VERTICAL); + brow->AddStretchSpacer(); + m_box_expr->Add(brow, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 12); + + m_expr_status = new wxStaticText(m_cards, wxID_ANY, _L("(no bindings)")); + m_expr_status->SetForegroundColour(dp_sec_text()); + m_box_expr->Add(m_expr_status, 0, wxLEFT | wxRIGHT | wxBOTTOM, 12); + } + cards->Add(m_box_expr, 0, wxEXPAND); + + // --- Docked value-entry card (Onshape Button->Dialog->Confirm for dimensions) --- + m_box_value = new wxBoxSizer(wxVERTICAL); + { + // Header title doubles as the operation label (set by request_value()). + m_box_value->Add(card_header(m_cards, "design_constrain", _L("Value"), m_value_label), 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_value->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + auto* vrow = new wxBoxSizer(wxHORIZONTAL); + // wxTE_PROCESS_ENTER so the user can just type a value and press Enter to + // apply it (the natural CAD-dimension gesture), not only click Confirm. + // Plain text field (not a spin control): on wxGTK the native GtkSpinButton + // formats per the user locale (comma) with no clean override, so we own the + // formatting here to guarantee international '.' decimals. + m_value_input = new wxTextCtrl(m_cards, wxID_ANY, "", wxDefaultPosition, + wxSize(90, -1), wxTE_PROCESS_ENTER); + m_value_input->Bind(wxEVT_TEXT_ENTER, [this](wxCommandEvent&) { confirm_value(); }); + vrow->Add(new wxStaticText(m_cards, wxID_ANY, _L("Value")), 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 8); + vrow->Add(m_value_input, 0, wxALIGN_CENTER_VERTICAL); + m_box_value->Add(vrow, 0, wxLEFT | wxRIGHT | wxTOP, 12); + } + cards->Add(m_box_value, 0, wxEXPAND); + + // --- Sketch-entry card (Phase 3): plane/orientation, opens on "New sketch", + // persists until Finish. The toolbar holds only the drawing tools. --- + m_box_sketch_session = new wxBoxSizer(wxVERTICAL); + m_box_sketch_session->Add(card_header(m_cards, "design_sketch", _L("Sketch"), m_hdr_sketch_session), + 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_sketch_session->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + { + // NO plane dropdown. The sketch plane comes from what is picked in the VIEWPORT — a face + // on a solid, or one of the reference-plane ghosts — because that is where the user is + // looking and pointing. A combo duplicated that decision somewhere the geometry could not + // see it, and once a face could be picked it went further and displayed a stale row that + // contradicted the real target. e1p. + // Kept as a member, not a local: the card has to be able to STOP saying this. It asked + // for a plane even when one had just been picked, directly contradicting the status line + // two inches below it, which by then read "Sketching on XZ". + m_sketch_hint = new wxStaticText(m_cards, wxID_ANY, + _L("Click a face or a reference plane, then a sketch tool.")); + m_sketch_hint->SetForegroundColour(dp_sec_text()); + m_box_sketch_session->Add(m_sketch_hint, 0, wxLEFT | wxRIGHT | wxTOP | wxBOTTOM, 12); + } + cards->Add(m_box_sketch_session, 0, wxEXPAND); + + // --- Constraint-manager card (C3.4): list of the constrained sketch's + // entity-constraints; each row selects (highlights) + deletes. Shown only + // in Constrain mode; rebuilt by rebuild_constraint_list(). + m_box_constraints = new wxBoxSizer(wxVERTICAL); + m_box_constraints->Add(card_header(m_cards, "design_constrain", _L("Constraints"), m_hdr_constraints), + 0, wxLEFT | wxRIGHT | wxTOP, 12); + m_box_constraints->Add(new wxStaticLine(m_cards), 0, wxEXPAND | wxALL, 8); + m_constraint_rows = new wxBoxSizer(wxVERTICAL); + m_box_constraints->Add(m_constraint_rows, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 12); + cards->Add(m_box_constraints, 0, wxEXPAND); + + // Wrap every card label now that the whole stack exists. wxStaticText never wraps on its + // own, so a one-sentence help line under a card sets that card's sizer min width to the + // width of the entire sentence — the same failure make_combo's explicit width fixes above, + // and with the same symptom: the card is wider than the sidebar, so every control in it is + // clipped at the panel's right edge. Found by click-testing Transform, Mirror and Coord Sys, + // whose hints are the longest. 240 px sits under m_form's 264 px minimum, so a wrapped hint + // always fits; the short two-column labels are far below it and Wrap() leaves them alone. + for (wxWindow* w : m_cards->GetChildren()) + if (auto* t = dynamic_cast(w)) + t->Wrap(240); + + // Feature tree card. Same idiom as Prepare's sections (icon + Head_14 title + rule) via the + // shared card_header helper, instead of the bare micro-label this used to be; the row-edit + // actions live in the header, as Prepare puts its section actions. + m_tree_box = make_card(m_form); + auto* tree_inner = new wxBoxSizer(wxVERTICAL); + m_tree_box->SetSizer(tree_inner); + root->Add(m_tree_box, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 8); + + m_hdr_tree_row = new wxBoxSizer(wxHORIZONTAL); + m_hdr_tree_row->Add(card_header(m_tree_box, "design_sketch", _L("Feature tree"), m_hdr_tree), 0, + wxALIGN_CENTER_VERTICAL); + m_hdr_tree_row->AddStretchSpacer(); + tree_inner->Add(m_hdr_tree_row, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::ContentMargin())); + tree_inner->Add(new wxStaticLine(m_tree_box), 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::TitlebarMargin())); + m_tree = new wxTreeCtrl(m_tree_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 64), + wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | + wxTR_FULL_ROW_HIGHLIGHT | wxBORDER_SIMPLE | wxTR_EDIT_LABELS); + if (!dp_dark()) m_tree->SetBackgroundColour(dp_panel_bg()); + // Per-feature-type icons (indices match tree_icon_for): sketch/extrude/dressup/hole/thread. + m_tree_images = new wxImageList(16, 16); + m_tree_images->Add(create_scaled_bitmap("design_sketch", nullptr, 16)); // 0 Sketch + m_tree_images->Add(create_scaled_bitmap("design_extrude", nullptr, 16)); // 1 Extrude + m_tree_images->Add(create_scaled_bitmap("design_dressup", nullptr, 16)); // 2 Fillet/Chamfer + m_tree_images->Add(create_scaled_bitmap("design_hole", nullptr, 16)); // 3 Hole + m_tree_images->Add(create_scaled_bitmap("design_thread", nullptr, 16)); // 4 Thread + m_tree_images->Add(create_scaled_bitmap("design_shell", nullptr, 16)); // 5 Shell + m_tree->AssignImageList(m_tree_images); + tree_inner->Add(m_tree, 0, wxEXPAND | wxALL, 12); + + // Selecting a body-producing feature (Extrude/Fillet/Chamfer/Hole/Thread) in the + // tree highlights the solid in the viewport; a Sketch row clears the highlight + // (its face is already shown via the persistent sketch overlay). + m_tree->Bind(wxEVT_TREE_SEL_CHANGED, [this](wxTreeEvent&) { + if (!m_viewport) return; + // Bodies live in the Parts list now; picking a feature here drops any body selection + // so the two lists can't both claim to be "the target". + // ONLY when this tree actually has a selection. These two lists clear each other's + // selection so that "the target" is never ambiguous, and that was harmless while both + // calls were UnselectAll() — a no-op on a wxTR_SINGLE tree. Now that Unselect() really + // clears, the pair became a loop: clicking a body row runs apply_body_row, which calls + // m_tree->Unselect(), which fires THIS handler, which cleared the body row the user had + // just clicked. The guard keeps the mutual-exclusion and drops the echo. + if (m_parts && tree_selection() != wxNOT_FOUND) m_parts->Unselect(); + const int sel = tree_selection(); + const bool body = (sel >= 0 && sel < int(m_doc.features.size()) && + m_doc.features[sel].type != CadFeatureType::Sketch && + !m_doc.body.IsNull()); + m_viewport->set_body_highlight(body); + // A conflicting mate says WHY on selection, and names the one action that resolves it. + // Suppress is the generic per-feature enable toggle (the eye), so the answer is already + // one click away on a row the user has just selected — the message points at it instead + // of describing a problem with no way out. + if (const std::string* why = (sel >= 0) ? mate_conflict_reason(sel) : nullptr) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(wxString::FromUTF8(*why) + _L(" — the eye suppresses this mate")); + m_status->Refresh(); + } else if (sel >= 0 && sel < int(m_doc.features.size())) { + // Name the two gestures the row supports, because neither is visible on it. + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format( + _L("%s selected — F2 or right-click renames it, double-click edits it"), + wxString::FromUTF8(m_doc.features[sel].name))); + m_status->Refresh(); + } + }); + + // Double-click a row = Edit, the same gesture that re-opens a committed sketch on the canvas. + // Without it the row only highlights and the feature looks dead until the user finds the + // Edit button in the section header. + m_tree->Bind(wxEVT_TREE_ITEM_ACTIVATED, [this](wxTreeEvent&) { on_edit_feature(); }); + + // Right-click a row: the three things a row can do. Renaming had no discoverable route at + // all — the header pencil is Edit, a double-click ACTIVATES the row and is also Edit (the + // "slow double-click renames" the old comment promised does not survive wxGTK, which fires + // ITEM_ACTIVATED first), none of the seven header icons renames, and F2 is a function key + // nothing announces. A user who wants to name a sketch tries the row, and now the row + // answers. rename. + m_tree->Bind(wxEVT_TREE_ITEM_RIGHT_CLICK, [this](wxTreeEvent& e) { + m_tree->SelectItem(e.GetItem()); // right-click targets what it points at + const int sel = tree_selection(); + if (sel == wxNOT_FOUND) return; + // EVERYTHING A ROW CAN DO, in one place. The header icons stay as a quick bar, but the + // menu is the reference: the element you click answers with what applies to it, and a + // menu grows without spending an icon nobody recognises. Split into what the row IS + // (name, contents), where it SITS (order, visibility) and what removes it. + wxMenu menu; + const int id_rename = wxWindow::NewControlId(); + const int id_edit = wxWindow::NewControlId(); + const int id_up = wxWindow::NewControlId(); + const int id_down = wxWindow::NewControlId(); + const int id_vis = wxWindow::NewControlId(); + const int id_art = wxWindow::NewControlId(); + const int id_del = wxWindow::NewControlId(); + menu.Append(id_rename, _L("Rename\tF2")); + menu.Append(id_edit, _L("Edit")); + // Scale artwork acts on THIS feature's imported outline, so it belongs to the row and + // is offered only where it means something. It used to hide inside the header's Move + // button, which otherwise moved a body — two different subjects on one icon. + const bool art = sel < int(m_doc.features.size()) && + !m_doc.features[sel].imported_regions.empty(); + if (art) menu.Append(id_art, _L("Scale artwork")); + menu.AppendSeparator(); + menu.Append(id_up, _L("Move up")); + menu.Append(id_down, _L("Move down")); + menu.Append(id_vis, _L("Show / hide")); + menu.AppendSeparator(); + menu.Append(id_del, _L("Delete")); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { + const int row = tree_selection(); + if (row != wxNOT_FOUND && row < int(m_tree_items.size())) + m_tree->EditLabel(m_tree_items[row]); + }, id_rename); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_edit_feature(); }, id_edit); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_move_feature(-1); }, id_up); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_move_feature(+1); }, id_down); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_toggle_visibility(); }, id_vis); + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { on_delete_feature(); }, id_del); + if (art) + menu.Bind(wxEVT_MENU, [this](wxCommandEvent&) { + const int row = tree_selection(); + if (row != wxNOT_FOUND) on_transform_imported(row); + }, id_art); + m_tree->PopupMenu(&menu); + }); + + // In-place rename of a feature row (slow double-click, the offer's Rename verb, or F2). + // The name is what makes a tree of eight sketches readable, and the tree row IS the object — + // so renaming belongs on the row, not in a side-panel field. Bodies are computed results, + // not named features, so a body row must never open an editor (it cannot, they live in the + // Parts list, but the guard keeps a future change from slipping a body into this tree). + auto item_index = [this](const wxTreeItemId& it) -> int { + for (size_t i = 0; i < m_tree_items.size(); ++i) + if (m_tree_items[i] == it) return int(i); + return wxNOT_FOUND; + }; + m_tree->Bind(wxEVT_TREE_BEGIN_LABEL_EDIT, [this, item_index](wxTreeEvent& e) { + // The event's item is the authority for WHAT is being edited; tree_selection() is not, + // because the editor can open on a row that is not the current selection. A row that is + // not a feature (a body, or a stray id) gets the edit vetoed before it can take a name. + if (tree_body_selection() >= 0 || item_index(e.GetItem()) == wxNOT_FOUND) { e.Veto(); return; } + e.Skip(); + }); + m_tree->Bind(wxEVT_TREE_END_LABEL_EDIT, [this, item_index](wxTreeEvent& e) { + if (e.IsEditCancelled()) return; + const int idx = item_index(e.GetItem()); + if (idx == wxNOT_FOUND) { e.Veto(); return; } + wxString label = e.GetLabel(); + label.Trim(true).Trim(false); + if (label.empty()) { e.Veto(); return; } // a nameless row is worse than a badly named one + m_doc.features[idx].name = std::string(label.ToUTF8().data()); + sync_recipe_to_model(); // the name is part of the recipe, so the save path persists it + e.Skip(); // let wx finish applying the label to the item it is holding + // REBUILD LATER, NOT NOW. refresh_tree() deletes and re-creates every wxTreeItemId, and + // we are inside wx's own END_LABEL_EDIT dispatch for one of them — destroying it here + // frees the item the caller is still using and takes the process down. Measured: typing + // a name and pressing Enter killed the app outright, with the keystrokes traced and no + // trace for the Return. Deferring to the next event-loop turn lets wx finish first. + CallAfter([this] { refresh_tree(); }); + }); + + // Feature-tree edit actions: act on the selected feature (delete / reorder). These sit in the + // card header (Prepare puts its section actions there too) rather than on a loose row below. + { + wxBoxSizer* trow = m_hdr_tree_row; + auto edit_btn = [this](const char* icon, const wxString& tip) { + // Header-sized: reads as a section action, not a primary control. + auto* b = new ScalableButton(m_tree_box, wxID_ANY, icon, "", wxSize(24, 24), + wxDefaultPosition, wxBU_EXACTFIT | wxBORDER_NONE, false, 20); + b->SetToolTip(tip); + return b; + }; + auto* edit = edit_btn("design_edit", _L("Edit")); + edit->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_edit_feature(); }); + // NO Move here. Moving a body is not a feature-row action — this header sits over the + // FEATURE tree, and the button had to guess its subject from whatever happened to be + // selected, answering a feature row with an instruction about bodies. It lives where a + // body lives: the Bodies card's own action row, and the offer for a selected body. + // Scaling imported artwork, which shared this button, moved to the row's own menu. + auto* vis = edit_btn("design_eye", _L("Show / hide")); + vis->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_toggle_visibility(); }); + auto* del = edit_btn("design_delete", _L("Delete")); + del->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + // A body row deletes the feature that made it. on_delete_body() already resolves + // CadBody::source_feature and asks for confirmation by name; it was reachable only + // from the right-click offer, so this button answered a selected body row with + // "select the FEATURE that created this body" — an instruction the user cannot act + // on, since the tree does not say which feature that is. It does now. + if (tree_body_selection() >= 0) on_delete_body(); + else on_delete_feature(); + }); + auto* up = edit_btn("design_moveup", _L("Move up")); + up->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_move_feature(-1); }); + auto* down = edit_btn("design_movedown", _L("Move down")); + down->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_move_feature(+1); }); + m_btn_interfere = edit_btn("color_palette", _L("Check interference — find overlapping bodies")); + m_btn_interfere->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_check_interference(); }); + const int gap = FromDIP(SidebarProps::ElementSpacing()); + trow->Add(edit, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, gap); + trow->Add(vis, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, gap); + trow->Add(del, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, gap); + trow->Add(up, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, gap); + trow->Add(down, 0, wxALIGN_CENTER_VERTICAL); + // Interference check sits after a rule: it reports, it does not edit the recipe. + trow->AddSpacer(8); + trow->Add(new wxStaticLine(m_tree_box, wxID_ANY, wxDefaultPosition, wxSize(1, 22), wxLI_VERTICAL), + 0, wxALIGN_CENTER_VERTICAL); + trow->AddSpacer(8); + trow->Add(m_btn_interfere, 0, wxALIGN_CENTER_VERTICAL); + // trow IS the header sizer — already added to root above the tree. + } + + // Parts list (Onshape's Features + Parts split). Bodies used to be appended after the + // features INSIDE the feature tree, so they were pushed out of view as the history grew — + // with no way to select a body at all. Their own list keeps them reachable regardless. + m_parts_box = make_card(m_form); + auto* parts_inner = new wxBoxSizer(wxVERTICAL); + m_parts_box->SetSizer(parts_inner); + root->Add(m_parts_box, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 8); + + m_parts_hdr = new wxBoxSizer(wxHORIZONTAL); + m_parts_hdr->Add(card_header(m_parts_box, "design_extrude", _L("Bodies"), m_parts_label), 0, + wxALIGN_CENTER_VERTICAL); + // The bodies card carries the actions that act on a BODY. Move came from the feature-tree + // header, where it had to guess whether its subject was a body or a feature; Show/hide, + // Delete and Colour are deliberate COPIES of feature-tree actions, because a body row is a + // different subject and a user working in this list should not have to travel to another + // card to hide or recolour what they have selected. Boolean is not a copy — it is the one + // body-body operation, gated through on_boolean_tool. Each one already resolves the body row + // itself (on_toggle_visibility, on_delete_body, on_set_body_color), so nothing here decides + // policy — the card only gives them a home next to the rows they act on. + { + auto body_btn = [this](const char* icon, const wxString& tip) { + auto* b = new ScalableButton(m_parts_box, wxID_ANY, icon, "", wxSize(24, 24), + wxDefaultPosition, wxBU_EXACTFIT | wxBORDER_NONE, false, 20); + b->SetToolTip(tip); + return b; + }; + auto* bmove = body_btn("design_move", _L("Move body")); + bmove->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + if (m_sel_solid_body >= 0 && m_sel_solid_body < int(m_doc.bodies.size())) { + on_move_body(); + } else { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Select a body row first, then move it")); + m_status->Refresh(); + } + }); + // Boolean lives here as well as on the toolbar: combining two bodies is a body action, + // and a user working in the body list should not have to leave it to find this. + auto* bbool = body_btn("design_boolean", _L("Boolean — join, subtract or intersect with another body")); + bbool->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_boolean_tool(); }); + auto* bvis = body_btn("design_eye", _L("Show / hide")); + bvis->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_toggle_visibility(); }); + auto* bdel = body_btn("design_delete", _L("Delete")); + bdel->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_delete_body(); }); + auto* bcol = body_btn("color_palette", _L("Colour")); + bcol->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_set_body_color(); }); + const int bgap = FromDIP(SidebarProps::ElementSpacing()); + m_parts_hdr->AddStretchSpacer(1); + m_parts_hdr->Add(bmove, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, bgap); + m_parts_hdr->Add(bbool, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, bgap); + m_parts_hdr->Add(bvis, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, bgap); + m_parts_hdr->Add(bdel, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, bgap); + m_parts_hdr->Add(bcol, 0, wxALIGN_CENTER_VERTICAL); + } + parts_inner->Add(m_parts_hdr, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::ContentMargin())); + m_parts_rule = new wxStaticLine(m_parts_box); + parts_inner->Add(m_parts_rule, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::TitlebarMargin())); + m_parts_hdr->ShowItems(false); // no bodies yet on a fresh document + m_parts_rule->Hide(); + m_parts = new wxTreeCtrl(m_parts_box, wxID_ANY, wxDefaultPosition, wxSize(-1, 48), + wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | + wxTR_FULL_ROW_HIGHLIGHT | wxBORDER_SIMPLE | wxTR_EDIT_LABELS); + if (!dp_dark()) m_parts->SetBackgroundColour(dp_panel_bg()); + parts_inner->Add(m_parts, 0, wxEXPAND | wxALL, 12); + // Start hidden: a fresh document has no bodies, and refresh_parts() only runs on the first + // tree rebuild — until then an empty box would sit under the header. + m_parts->Hide(); + m_parts_label->Hide(); + // Taking a body from the list means the SAME state change however it was asked for, so the + // normalisation lives here and not inside a selection handler. That distinction is not + // pedantry: SelectItem() on a row that is ALREADY selected fires no SEL_CHANGED at all, so a + // version of this that only ran on selection left a stale vertex/edge from an earlier + // viewport pick in place — and offer_selection_kind() tests vertex FIRST, so right-clicking + // the body row served the VERTEX offer (Fillet greyed, Mirror in place of Repeat) while the + // row sat highlighted. Measured on the rig 2026-08-02; it is invisible from the code alone. + auto apply_body_row = [this](int b) { + if (!m_viewport || b < 0) return; + // One selection at a time: a body row and a feature row mean different things to the + // op bar, so clear the feature tree's highlight when a body takes over. + if (m_tree) m_tree->Unselect(); // wxTR_SINGLE: UnselectAll() does nothing here + m_viewport->set_body_highlight(false); // the per-body overlay does the tint + m_viewport->select_body(b); // also drops the vertex/edge marker + m_sel_solid_body = b; + m_sel_solid_face = m_sel_solid_edge = -1; + m_sel_solid_vertex = false; + m_pick_face = m_pick_face_body = -1; // chosen from the list, no face was pointed at + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Body %d selected — right-click for what applies to it"), b + 1)); + m_status->Refresh(); + }; + m_parts->Bind(wxEVT_TREE_SEL_CHANGED, [this, apply_body_row](wxTreeEvent&) { + apply_body_row(tree_body_selection()); + }); + // The third door onto the offer, after the viewport right-click and the Menu key. A body ROW + // is an unambiguous body, so the offer reports BodySolid and the body verbs act on the row you + // can see highlighted. That is the confirmation a face pick cannot give: pointing at a face + // lights the face, never the body the verb will actually change. The status line above has + // been promising this right-click since before it existed. + // Renaming a BODY names the body itself. It does NOT rename the feature that created it: + // an Extrude, a Cut and a Fillet all land on one body, so source_feature is one operation in + // its history and renaming that is renaming the wrong object — reported, correctly, as "you + // consider the extrusion = the body". CadBody::user_name is carried across recompute() by + // index and written into the recipe, so the name outlives both the rebuild and the save. + m_parts->Bind(wxEVT_TREE_BEGIN_LABEL_EDIT, [this](wxTreeEvent& e) { + if (tree_body_selection() < 0) { e.Veto(); return; } + e.Skip(); + }); + m_parts->Bind(wxEVT_TREE_END_LABEL_EDIT, [this](wxTreeEvent& e) { + if (e.IsEditCancelled()) return; + const int b = tree_body_selection(); + if (b < 0 || b >= int(m_doc.bodies.size())) { e.Veto(); return; } + wxString label = e.GetLabel(); + label.Trim(true).Trim(false); + if (label.empty()) { e.Veto(); return; } // a nameless row is worse than a bad name + m_doc.bodies[b].has_user_name = true; + m_doc.bodies[b].user_name = std::string(label.ToUTF8().data()); + sync_recipe_to_model(); // the name is part of what gets saved + e.Skip(); + // Rebuild on the NEXT event-loop turn: refresh_parts() destroys every wxTreeItemId and + // we are inside wx's own END_LABEL_EDIT dispatch for one of them. The feature tree + // learned this the hard way — doing it here took the process down. + CallAfter([this] { refresh_parts(); }); + }); + + m_parts->Bind(wxEVT_TREE_ITEM_MENU, [this, apply_body_row](wxTreeEvent& e) { + if (e.GetItem().IsOk()) + m_parts->SelectItem(e.GetItem()); // the row under the cursor, never a stale one + apply_body_row(tree_body_selection()); // unconditional — see above, SelectItem on an + // already-selected row raises no event + // GetPoint() is tree-client; it is (-1,-1) when the KEYBOARD menu key raised this, so fall + // back to the shared anchor rather than popping the menu at a garbage coordinate. + const wxPoint p = e.GetPoint(); + const wxPoint screen = (p.x >= 0 && p.y >= 0) ? m_parts->ClientToScreen(p) : offer_anchor(); + // Let the modal menu take the loop after this handler returns — same CallAfter as the + // sketch path, which learned it the hard way. + CallAfter([this, screen] { show_offer_menu(screen); }); + }); + + // --- Variables (document-scope named expressions) --- + // Below the feature tree + parts, always visible. wxListCtrl in report mode with two + // columns (Name, Expression). Add / edit open a small dialog; delete removes the + // selected row. Every mutation goes through checkpoint+recompute+undo-on-failure. + m_var_box = make_card(m_form); + auto* var_inner = new wxBoxSizer(wxVERTICAL); + m_var_box->SetSizer(var_inner); + { + auto* var_hdr = new wxBoxSizer(wxHORIZONTAL); + wxStaticText* var_hdr_title = nullptr; + var_hdr->Add(card_header(m_var_box, "design_constrain", _L("Variables"), var_hdr_title), 0, + wxALIGN_CENTER_VERTICAL); + var_hdr->AddStretchSpacer(); + m_btn_add_var = new wxButton(m_var_box, wxID_ANY, _L("+"), wxDefaultPosition, wxSize(30, 24)); + m_btn_edit_var = new wxButton(m_var_box, wxID_ANY, _L("Edit"), wxDefaultPosition, wxSize(50, 24)); + m_btn_del_var = new wxButton(m_var_box, wxID_ANY, _L("Del"), wxDefaultPosition, wxSize(42, 24)); + m_btn_add_var->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_add_variable(); }); + m_btn_edit_var->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_edit_variable(); }); + m_btn_del_var->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_remove_variable(); }); + const int vhgap = FromDIP(SidebarProps::ElementSpacing()); + var_hdr->Add(m_btn_add_var, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, vhgap); + var_hdr->Add(m_btn_edit_var, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, vhgap); + var_hdr->Add(m_btn_del_var, 0, wxALIGN_CENTER_VERTICAL); + var_inner->Add(var_hdr, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::ContentMargin())); + var_inner->Add(new wxStaticLine(m_var_box), 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, + FromDIP(SidebarProps::TitlebarMargin())); + + m_var_list = new wxListCtrl(m_var_box, wxID_ANY, wxDefaultPosition, + wxSize(-1, FromDIP(64)), wxLC_REPORT | wxLC_SINGLE_SEL); + if (!dp_dark()) m_var_list->SetBackgroundColour(dp_panel_bg()); + m_var_list->AppendColumn(_L("Name"), wxLIST_FORMAT_LEFT, FromDIP(90)); + m_var_list->AppendColumn(_L("Expression"), wxLIST_FORMAT_LEFT, FromDIP(120)); + var_inner->Add(m_var_list, 0, wxEXPAND | wxALL, FromDIP(SidebarProps::ContentMargin())); + } + root->Add(m_var_box, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, 8); + + // Orca-styled full-width buttons (ButtonType::Expanded), so the Design sidebar reads like + // Prepare's instead of showing raw OS-default wxButtons. + const int cm = FromDIP(SidebarProps::ContentMargin()); + + m_status = new wxStaticText(m_form, wxID_ANY, ""); + m_status->Hide(); // storage only — the line is drawn over the viewport, see set_status() + m_status_default_fg = m_status->GetForegroundColour(); // capture BEFORE any caller writes + root->Add(m_status, 0, wxLEFT | wxRIGHT | wxBOTTOM, 12); + + // DoF / constraint-state readout (P3). Dedicated line so it never clobbers the + // tool hint in m_status; updated by the on_solve_state callback after each solve. + m_dof_status = new wxStaticText(m_form, wxID_ANY, ""); + { + wxFont f = m_dof_status->GetFont(); + f.SetWeight(wxFONTWEIGHT_BOLD); + m_dof_status->SetFont(f); + } + root->Add(m_dof_status, 0, wxLEFT | wxRIGHT | wxBOTTOM, 12); + + + m_shape->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { on_shape_changed(); e.Skip(); }); + on_shape_changed(); + + // Any parameter edit refreshes the translucent preview. Command events from the + // spin/choice/checkbox children propagate up to m_form, so one binding each suffices. + m_form->Bind(wxEVT_SPINCTRLDOUBLE, [this](wxSpinDoubleEvent& e) { refresh_preview(); e.Skip(); }); + m_form->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { refresh_preview(); e.Skip(); }); + m_form->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent& e) { refresh_preview(); e.Skip(); }); + m_form->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e) { refresh_preview(); e.Skip(); }); + + m_form->SetSizer(root); + + // Start with every tool dialog hidden (only the toolbar + tree + Commit show). + root->Show(m_parts_box, false, false); // no bodies on a fresh document + root->Show(m_cards, false, false); // no tool open yet: don't draw an empty frame + cards->Show(m_box_sketch, false, true); + cards->Show(m_box_move, false, true); + cards->Show(m_box_extrude, false, true); + cards->Show(m_box_revolve, false, true); + cards->Show(m_box_sweep, false, true); + cards->Show(m_box_pattern, false, true); + cards->Show(m_box_plane, false, true); + cards->Show(m_box_axis, false, true); + cards->Show(m_box_coordsys, false, true); + cards->Show(m_box_loft, false, true); + cards->Show(m_box_draft, false, true); + cards->Show(m_box_boolean, false, true); + cards->Show(m_box_cut, false, true); + cards->Show(m_box_insert, false, true); + cards->Show(m_box_dressup, false, true); + cards->Show(m_box_hole, false, true); + cards->Show(m_box_thread, false, true); + cards->Show(m_box_shell, false, true); + cards->Show(m_box_surf_extrude, false, true); + cards->Show(m_box_surf_revolve, false, true); + cards->Show(m_box_surf_loft, false, true); + cards->Show(m_box_surf_fill, false, true); + cards->Show(m_box_surf_offset, false, true); + cards->Show(m_box_surf_thicken, false, true); + cards->Show(m_box_value, false, true); + cards->Show(m_box_sketch_session, false, true); + cards->Show(m_box_constraints, false, true); + cards->Show(m_box_expr, false, true); + // A card added to the cards sizer is VISIBLE until something hides it. close_tool()'s + // hide-all only runs on a tool switch, so any card missing from THIS block renders + // stacked in the sidebar from the moment the tab opens. These eight were wired into + // close_tool() but not here, which is what bloated the panel. + cards->Show(m_box_transform, false, true); + cards->Show(m_box_mirror, false, true); + cards->Show(m_box_thicken, false, true); + cards->Show(m_box_rib, false, true); + cards->Show(m_box_project, false, true); + cards->Show(m_box_delete_face, false, true); + cards->Show(m_box_helix, false, true); + cards->Show(m_box_mate, false, true); + + m_form->FitInside(); + m_form->SetScrollRate(0, 10); // vertical only, like Prepare's sidebar: never scroll labels out + m_form->SetMinSize(wxSize(264, -1)); + + // Right column: a small view toolbar over the live 3D viewport that mirrors + // the CadDocument body. + m_viewport = new DesignCanvas(this); + + m_viewport->set_on_sketch_commit([this](const SketchProfile& prof, const SketchPlane& plane) { + m_doc.checkpoint(); // undo boundary: committing a sketch + m_feature_counter++; + m_doc.add_sketch_profile(prof, plane, "Sketch" + std::to_string(m_feature_counter)); + m_doc.recompute(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Sketch created — select it, then right-click to Extrude")); + refresh_tree(); + }); + + m_viewport->set_on_sketch_entities_commit( + [this](const std::vector& ents, + const std::vector& cons, + const SketchPlane& plane) { + if (ents.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Sketch empty — nothing committed")); + m_status->Refresh(); + return; + } + m_doc.checkpoint(); // undo boundary: committing / re-editing an entity sketch + // Re-edit of a committed entity sketch: REPLACE it in place (keep its name + + // tree position) instead of appending a duplicate. + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size()) && + m_doc.features[m_edit_index].type == CadFeatureType::Sketch) { + CadFeature edited = m_doc.features[m_edit_index]; + edited.entities = ents; + edited.entity_constraints = cons; + edited.plane = plane; + if (m_doc.replace_feature(m_edit_index, edited)) { + if (!cons.empty()) m_doc.solve_sketch_feature(m_edit_index); + m_doc.recompute(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Sketch updated")); + m_edit_index = -1; + refresh_tree(); + sync_sketch_display(); + } + return; + } + m_feature_counter++; + const int sk = m_doc.add_sketch_entities(ents, plane, + "Sketch" + std::to_string(m_feature_counter), cons); + if (!cons.empty()) m_doc.solve_sketch_feature(sk); // enforce driving dimensions + m_doc.recompute(); + m_status->SetForegroundColour(wxNullColour); + set_status(cons.empty() + ? _L("Sketch created — select it, then right-click to Extrude") + : wxString::Format(_L("Sketch created (%zu driving dims) — select it, then right-click to Extrude"), + cons.size())); + refresh_tree(); + sync_sketch_display(); // keep the just-committed sketch visible as a face + }); + + // Live length/angle readout while drawing a Line/Polyline segment. + m_viewport->set_on_cursor_metrics([this](double len, double ang_deg, bool locked) { + double a = ang_deg; if (a < 0.0) a += 360.0; // show bearing 0..360 + m_status->SetForegroundColour(wxNullColour); + // APPENDED to the step guidance, never in place of it. This fires on every mouse move + // while a segment is being dragged, so replacing the line wiped the instruction for the + // step the user is in the middle of — one mouse move after the click that armed it. + const wxString metrics = wxString::Format(L"L %.2f mm %.1f°%s", + len, a, locked ? L" (locked)" : L""); + set_status(m_sketch_step.IsEmpty() ? metrics + : m_sketch_step + L" · " + metrics); + m_status->Refresh(); + }); + + // Live per-step guidance: the armed tool says which step it is on, we write the sentence. + m_viewport->set_on_sketch_step([this](DesignSketchTool::Mode mode, int step, int picks) { + on_sketch_step(int(mode), step, picks); + }); + + // A live constraint appeared or went away: refill the rows. CallAfter, not a direct call — + // one of the callers is the ✗ button's own click handler, and rebuild_constraint_list + // destroys those buttons; deleting the window whose handler is still on the stack is a + // use-after-free. Deferring to the next event-loop turn lets the handler return first. + m_viewport->set_on_sketch_constraints_changed([this]() { + CallAfter([this]() { rebuild_constraint_list(); }); + }); + + // DoF feedback (P3): after each live solve, report constraint state on its own + // line. Green = fully constrained, red = conflicting, neutral = N remaining DoF. + m_viewport->set_on_solve_state([this](int dof, bool ok, bool has_constraints) { + // Remembered as well as shown: the readout is fed ONLY by a live solve, and entering + // Constrain mode triggers none — so without a cache the very line the user goes to + // Constrain to read stays blank until they happen to change something. + m_dof_last = dof; m_dof_last_ok = ok; m_dof_last_has = has_constraints; + apply_dof_status(dof, ok, has_constraints); + }); + + // Selection no longer writes the status line: on_sketch_step owns it, says the same thing + // for Select mode and — unlike this callback, which also fired while an edit-op mirrored its + // picks into the selection — never claims "N selected, Delete removes them" in the middle of + // a Mirror gesture, where Delete does nothing of the sort. 1c0c. + + // Onshape flow: clicking inside a closed-loop face commits the sketch and opens + // the Extrude dialog (with a ghost preview) targeting that sketch. + m_viewport->set_on_sketch_face_selected([this](int region) { + if (!m_viewport) return; + m_viewport->finish_sketch(); // commit live sketch (synchronous) + m_extrude_sketch_ref = resolve_extrude_sketch(); + if (m_extrude_sketch_ref < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Could not resolve the sketch to extrude")); + m_status->Refresh(); + return; + } + set_ui_mode(UiMode::Feature); + open_tool(Tool::Extrude); + // AFTER open_tool, not before: opening the tool re-derives the selection state, so a + // region recorded ahead of it is wiped before Extrude ever reads it. + m_sel_sketch_feat = m_extrude_sketch_ref; + m_sel_sketch_region = region; + m_sel_solid_face = m_sel_solid_edge = -1; + m_pick_face = m_pick_face_body = -1; + m_viewport->set_loop_pick(m_extrude_sketch_ref, region); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Face selected — set the depth and Confirm")); + m_status->Refresh(); + }); + + // Clicking a committed sketch loop on the plate (no live session) selects THAT loop: + // the viewport highlights only it (cyan) and its Sketch feature's tree row is selected. + // The (feature, region) pair is remembered so Extrude builds just that one loop. + m_viewport->set_on_display_sketch_selected([this](int feat, int region, int entity) { + if (feat < 0 || feat >= int(m_doc.features.size())) return; + m_sel_sketch_feat = feat; + m_sel_sketch_region = region; + // Last pick wins (symmetric with the solid-pick handler): selecting a sketch loop drops + // any stale solid face/edge pick so Extrude treats this loop as the profile. + m_sel_solid_face = m_sel_solid_edge = -1; + m_pick_face = m_pick_face_body = -1; + // Rib card open: point at the LINE, do not type its index. 'Entity index' was a bare + // wxSpinCtrl ranged 0-999 standing in for a line sitting visible on screen, with nothing + // anywhere telling you which integer was which — the purest case of the thing this epic + // exists to remove. Only a stroke hit carries an entity (an interior click is a region, + // not a line), so a click inside a loop deliberately leaves the field alone rather than + // resetting it to something arbitrary. The sketch picker follows the same pick, so + // pointing at a line in a different sketch retargets both together. 3648. + if (m_active == Tool::Rib && entity >= 0) { + if (m_rib_sketch != nullptr) + for (unsigned i = 0; i < m_rib_sketch->GetCount(); ++i) + if (int(reinterpret_cast(m_rib_sketch->GetClientData(i))) == feat) { + m_rib_sketch->SetSelection(i); + break; + } + if (m_rib_entity != nullptr) m_rib_entity->SetValue(entity); + refresh_preview(); + } + // Sweep card open: the sketch you point at becomes the PATH. The profile is already + // settled selection-first — you pick a sketch and then invoke Sweep, which is the design + // law's own canonical example — so the path is the input that was still trapped in a + // combo. The picker excludes the profile, so pointing at the profile correctly does + // nothing. e1p item 6; same shape as the Boolean and Mirror fixes. + if (m_active == Tool::Sweep && m_sweep_path != nullptr) { + for (unsigned i = 0; i < m_sweep_path->GetCount(); ++i) { + if (int(reinterpret_cast(m_sweep_path->GetClientData(i))) != feat) continue; + m_sweep_path->SetSelection(i); + m_sweep_path_ref = feat; + refresh_preview(); + break; + } + } + // Loft card open: pointing at a sketch TOGGLES its membership, so a loft is built by + // clicking the profiles in the viewport instead of hunting rows in a check-list. The + // list stays visible as the typed half and still shows the order, which matters here — + // loft order is not commutative. + if (m_active == Tool::Loft && m_loft_list != nullptr) { + for (size_t i = 0; i < m_loft_sketch_idx.size() && i < m_loft_list->GetCount(); ++i) { + if (m_loft_sketch_idx[i] != feat) continue; + m_loft_list->Check(unsigned(i), !m_loft_list->IsChecked(unsigned(i))); + refresh_preview(); + break; + } + } + set_tree_selection(feat); + m_status->SetForegroundColour(wxNullColour); + set_status(region >= 0 + // "Region", not "Loop": what is selected — and what Extrude will consume — is the + // bounded area including any holes in it, not a single closed curve. + ? _L("Region selected — right-click to Extrude, or double-click to edit") + : _L("Sketch selected — right-click to Extrude, or double-click to edit")); + m_status->Refresh(); + }); + + // Double-click a committed sketch stroke: open THAT sketch for editing, where its entities + // are individually selectable and their quotes editable. on_edit_feature already does the + // whole job — it was only ever reachable from the tree, which is precisely the side-panel + // dependency being retired. The pick has already lit the right tree row by the time the + // double-click arrives, but set it again so the path does not depend on that ordering. + m_viewport->set_on_display_sketch_activated([this](int feat) { + if (feat < 0 || feat >= int(m_doc.features.size())) return; + set_tree_selection(feat); + on_edit_feature(); + }); + + // F key (Prepare's Place on Face): the tool forwards it here when the Design viewport + // has focus; we lay the selected body face on the bed. Returns false when no face is + // selected so the key can fall through to the default handler. + m_viewport->set_on_place_on_face([this]() { return place_on_face(); }); + + // Clicking a solid cycles whole -> face -> edge. The tool draws the cyan overlay for ALL + // levels now (per-body, so other bodies stay untinted) — no whole-compound set_body_highlight. + m_viewport->set_on_solid_selection_changed([this](int level, int body, int face, int edge) { + // A pick that fell through the move gizmo (clicked off the arrows) exits move mode. + if (m_viewport->moving_body()) m_viewport->clear_move_gizmo(); + // Remember which body + face/edge so Extrude / dress-up target the RIGHT body. + m_sel_solid_body = (level >= 1) ? body : -1; + m_sel_solid_face = (level == 2) ? face : -1; // 4 = Vertex: a corner is not its face + m_sel_solid_edge = (level == 3) ? edge : -1; + m_sel_solid_vertex = (level == 4); + // Keep the hit face even at whole-body level: the cycle's first click means "this body", + // but the user pointed AT a face and a sketch should be able to use it. 3a2. + m_pick_face_body = (level >= 1) ? body : -1; + m_pick_face = (level >= 1) ? face : -1; + // Last pick wins: selecting a solid drops any stale committed-sketch loop selection. + // Otherwise a leftover loop keeps `m_sel_sketch_region >= 0`, which blocks the face + // push/pull branch in Extrude (`m_sel_solid_face >= 0 && m_sel_sketch_region < 0`) and + // makes Extrude build a DETACHED new body from the last sketch instead of push/pulling + // the face the user just clicked. + if (level >= 1) { m_sel_sketch_region = -1; m_sel_sketch_feat = -1; } + // Say what got picked. Without this the ONLY feedback is the viewport highlight, so a + // pick that registers but draws faintly is indistinguishable from one that never + // happened — which is precisely how this failure was reported and why it resisted + // diagnosis. Cards that show their own labels still do. The label itself is written + // ONCE, at the end of this handler — a second writer here only ever produced text that + // the later one overwrote before a frame was drawn, and reading it as the live string + // is how a vertex pick came to be "fixed" in a branch that never reaches the screen. + // If the Fillet/Chamfer card is open, re-anchor (or drop) the radius arrow on the new pick + // and rebuild the ghost — once an edge is picked the preview-only mode hides the base body. + if (m_active == Tool::Dressup) { sync_dressup_target(); update_fillet_gizmo(); refresh_preview(); } + // Boolean card open: the VIEWPORT is how you choose the two operands. Until now they + // could only come from two combos — the one control the charter names for this tool + // (e1p item 4), and the same pair 7xx caught silently resolving every row to + // index 0. The highlight already flowed card -> viewport; this closes the loop the + // other way. First pick is the target (kept), second is the tool (consumed); the + // combos mirror both, so the typed half of L2 still works and still round-trips. + // A body cannot be both operands — that boolean is a no-op — but the resolution is to + // SWAP, never to refuse: the pick is the user pointing at a body, and it has to win. + // Refusing it was measurably wrong. Both combos are pre-filled when the card opens + // (target = body 0, tool = a different one), so the very first viewport pick usually + // names a body the other slot already holds; ignoring it left the defaults in place and + // the commit produced body0 - body1 (75000 mm3) when the picks asked for body1 - body0 + // (43000 mm3). Swapping keeps the pair distinct AND honours the click. + if (m_active == Tool::Boolean && m_sel_solid_body >= 0) { + ComboBox* dst = (m_bool_next_slot == 0) ? m_bool_target : m_bool_tool; + ComboBox* other = (m_bool_next_slot == 0) ? m_bool_tool : m_bool_target; + const int row = m_sel_solid_body; // selection index == body index + if (dst != nullptr && row < int(dst->GetCount())) { + const int prev = dst->GetSelection(); + dst->SetSelection(row); + if (other != nullptr && other->GetSelection() == row && prev >= 0 && prev != row) + other->SetSelection(prev); // displaced operand takes the old slot + m_bool_next_slot ^= 1; + refresh_preview(); // re-tints the operands + rebuilds the ghost + } + } + // Mirror card open: the body you point at is the body that gets mirrored. Same one-way + // flow Boolean had (310o) and the same fix — the combo stays as the typed half. + // Only one operand here, so there is no slot to alternate and no swap to do. + if (m_active == Tool::Mirror && m_sel_solid_body >= 0 && m_mirror_body != nullptr && + m_sel_solid_body < int(m_mirror_body->GetCount())) { + m_mirror_body->SetSelection(m_sel_solid_body); // selection index == body index + refresh_preview(); + } + // If the Shell card is open, a face pick chooses the open face: update the label + gizmo + // + ghost so the hollow updates live. + if (m_active == Tool::Shell) { + m_shell_face_label->SetLabel(m_sel_solid_face >= 0 + ? wxString::Format(_L("Face %d"), m_sel_solid_face) + : _L("(all faces — closed hollow)")); + refresh_preview(); // rebuilds the shell ghost + re-anchors the thickness gizmo + } + // Thicken card open: the face pick IS the feature's input, and until now nothing here + // wrote its label — the value reached m_sel_solid_face and Confirm worked, but the card + // read "(pick a solid face)" however many faces you had picked. Invisible because the + // ghost did update, so the card looked wrong while behaving right. + if (m_active == Tool::Thicken) { + m_thicken_face_label->SetLabel(m_sel_solid_face >= 0 + ? wxString::Format(_L("Face %d"), m_sel_solid_face) + : _L("(pick a solid face)")); + refresh_preview(); + } + // Draft card open: a face pick chooses the face to taper; update label + ghost live. + if (m_active == Tool::Draft) { + m_draft_face_label->SetLabel(m_sel_solid_face >= 0 + ? wxString::Format(_L("Face %d"), m_sel_solid_face) + : _L("(pick a side face)")); + refresh_preview(); + } + // Hole card open: clicking a solid FACE re-targets the hole ONTO that face (Orca-style), + // so the hole lives on the object's face — not on a stale dropdown/datum plane. Uses the + // face under the cursor from the FIRST click (handle_solid_click reports it even at the + // Whole level), so no whole->face cycle is needed. + if (m_active == Tool::Hole && face >= 0 && body >= 0 && body < int(m_doc.bodies.size())) { + const TopoDS_Face fc = GeometryEngine::face_by_index(m_doc.bodies[body].shape, face); + if (!fc.IsNull()) { + m_hole_face_plane = face_plane_inward(fc); + m_hole_on_face = true; + m_hole_face_body = body; + set_hole_target_label(face); + m_hole_has_bounds = GeometryEngine::face_plane_bounds( + fc, m_hole_face_plane.origin, m_hole_face_plane.x_axis, + m_hole_face_plane.y_axis, m_hole_umin, m_hole_umax, m_hole_vmin, m_hole_vmax); + if (m_hole_x) m_hole_x->SetValue(0.0); // centre of the picked face + if (m_hole_y) m_hole_y->SetValue(0.0); + if (m_hole_plane) m_hole_plane->SetSelection(index_from_plane(m_hole_face_plane)); + refresh_preview(); // re-place the gizmo + ghost on the new face + } + } + // Thread card open: clicking a cylindrical face or circular edge re-derives the thread. + if (m_active == Tool::Thread && body >= 0 && body < int(m_doc.bodies.size())) { + const TopoDS_Shape& shape = m_doc.bodies[body].shape; + GeometryEngine::CylinderFace cf; + if (face >= 0) + cf = GeometryEngine::cylinder_of_face(GeometryEngine::face_by_index(shape, face)); + const bool from_face = cf.ok; // which of the two the cylinder actually came from + if (!cf.ok && edge >= 0) + cf = GeometryEngine::circle_of_edge(GeometryEngine::edge_by_index(shape, edge)); + if (cf.ok) { + SketchPlane p; p.origin = cf.base; p.normal = cf.axis; + const Vec3d ref = std::abs(cf.axis.z()) < 0.9 ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + p.x_axis = ref.cross(cf.axis).normalized(); + p.y_axis = cf.axis.cross(p.x_axis).normalized(); + m_thread_face_plane = p; + m_thread_on_face = true; + m_thread_face_body = m_sel_solid_body; + set_thread_target_label(from_face ? face : -1, from_face ? -1 : edge); + infer_thread_spec(2.0 * cf.radius); // M diameter + pitch + depth from the cylinder + if (m_thread_height && cf.height > 1e-6) m_thread_height->SetValue(cf.height); + if (m_thread_internal) m_thread_internal->SetValue(cf.internal); + refresh_preview(); + } + } + // Plane tool with a pick armed: capture the right kind of reference (face for Face A/B, + // edge for Edge A/B). If the click wasn't the right kind, stay armed so the user retries. + if (m_active == Tool::Plane && m_plane_pick != PlanePick::None) { + bool got = false; + switch (m_plane_pick) { + case PlanePick::FaceA: if (m_sel_solid_face >= 0) { m_pl_faceA_body = m_sel_solid_body; m_pl_faceA = m_sel_solid_face; got = true; } break; + case PlanePick::FaceB: if (m_sel_solid_face >= 0) { m_pl_faceB_body = m_sel_solid_body; m_pl_faceB = m_sel_solid_face; got = true; } break; + case PlanePick::EdgeA: if (m_sel_solid_edge >= 0) { m_pl_edgeA_body = m_sel_solid_body; m_pl_edgeA = m_sel_solid_edge; got = true; } break; + case PlanePick::EdgeB: if (m_sel_solid_edge >= 0) { m_pl_edgeB_body = m_sel_solid_body; m_pl_edgeB = m_sel_solid_edge; got = true; } break; + default: break; + } + if (got) { m_plane_pick = PlanePick::None; refresh_plane_labels(); } + if (got && m_viewport) m_viewport->set_escalate_on_repick(true); + } + // Axis tool with a pick armed: face or edge. + if (m_active == Tool::Axis && m_axis_pick != AxisPick::None) { + bool got = false; + switch (m_axis_pick) { + case AxisPick::Face: if (m_sel_solid_face >= 0) { m_ax_face_body = m_sel_solid_body; m_ax_face = m_sel_solid_face; got = true; } break; + case AxisPick::Edge: if (m_sel_solid_edge >= 0) { m_ax_face_body = m_sel_solid_body; m_ax_edge = m_sel_solid_edge; got = true; } break; + default: break; + } + if (got) { m_axis_pick = AxisPick::None; refresh_axis_labels(); } + if (got && m_viewport) m_viewport->set_escalate_on_repick(true); + } + // CoordSys tool with a pick armed: face or edge. + if (m_active == Tool::CoordSys && m_coordsys_pick != CoordSysPick::None) { + bool got = false; + switch (m_coordsys_pick) { + case CoordSysPick::Face: if (m_sel_solid_face >= 0) { m_cs_face_body = m_sel_solid_body; m_cs_face = m_sel_solid_face; got = true; } break; + case CoordSysPick::Edge: if (m_sel_solid_edge >= 0) { m_cs_face_body = m_sel_solid_body; m_cs_edge = m_sel_solid_edge; got = true; } break; + default: break; + } + if (got) { + // A picked face or edge is only meaningful to FaceAndDirection. Left on the + // default Point (world), datum_frame ignores the pick entirely and resolves the + // connector to coordsys_point — which is (0,0,0) unless the user typed + // otherwise. Two such connectors then share one frame, so a mate between them + // computes an IDENTITY transform: the feature commits, the recompute succeeds, + // and nothing moves. Picking a face IS the choice of a face-based frame, so make + // the type follow the pick rather than asking for it twice. + if (m_coordsys_type && m_coordsys_type->GetSelection() != (int)CoordSysType::FaceAndDirection) + m_coordsys_type->SetSelection((int)CoordSysType::FaceAndDirection); + m_coordsys_pick = CoordSysPick::None; + refresh_coordsys_labels(); + } + if (got && m_viewport) m_viewport->set_escalate_on_repick(true); + } + m_status->SetForegroundColour(wxNullColour); + const int nb = int(m_doc.bodies.size()); + const wxString bodytag = (nb > 1) ? wxString::Format(_L("Body %d "), body + 1) : wxString(); + // Each sub-element line ends by naming the NEXT click (gem). Escalation to the + // whole body is a gesture nothing on screen would otherwise reveal, and the status line + // is the only surface that can teach it at the moment it applies. It REPLACES the old + // per-level verb hints ("right-click to push/pull it", "Fillet/Chamfer to dress it") + // rather than joining them: the line is clipped at the panel edge past ~55 characters + // (set_status's Wrap() does not take effect — 8cc), and those verbs are shown + // with their icons in the offer anyway, while this gesture is shown nowhere else. + // Both clauses fit now that the line is drawn over the viewport instead of squeezed + // into the panel. Say "what applies to it", never "verbs" — that is this codebase's + // word for a tool-offer entry, not a word the drawing office uses, and the plane and + // bodies-list lines already say it the right way. + set_status(level == 4 ? bodytag + _L("vertex selected — click again for the whole body") + : level == 1 ? bodytag + _L("selected (whole body) — right-click for what applies to it") + : level == 2 ? bodytag + wxString::Format(_L("face %d selected — right-click to push/pull it, or click again for the whole body"), face) + : level == 3 ? bodytag + wxString::Format(_L("edge %d selected — Fillet/Chamfer to dress it, or click again for the whole body"), edge) + : _L("Nothing selected")); + m_status->Refresh(); + }); + + // Visual Extrude gizmo (C5b): dragging/editing the in-canvas depth arrow writes the + // matching spin field and re-previews (which re-feeds the gizmo with the new depth). + m_viewport->set_on_extrude_depth_changed([this](double depth, bool second) { + // One arrow, three tools: Extrude owns the two-sided pair, the other two have a single + // distance each. Routing here rather than arming three near-identical gizmos is the whole + // reason these two tools got a handle at all — the arrow was already written. + if (m_active == Tool::SurfaceExtrude) { + if (m_surf_extrude_distance) m_surf_extrude_distance->SetValue(depth); + } else if (m_active == Tool::Thicken) { + if (m_thicken_thickness) m_thicken_thickness->SetValue(depth); + } else if (m_active == Tool::Rib) { + if (m_rib_depth) m_rib_depth->SetValue(depth); // depth; thickness has its own in-plane pair + } else if (m_active == Tool::SurfaceOffset) { + if (m_surf_offset_distance) m_surf_offset_distance->SetValue(depth); + } else if (m_active == Tool::ThickenSurface) { + if (m_surf_thicken_thickness) m_surf_thicken_thickness->SetValue(depth); + } else if (second) { if (m_distance2) m_distance2->SetValue(depth); } + else { if (m_distance) m_distance->SetValue(depth); } + refresh_preview(); + }); + + // Datum-plane resize handles (C3): a handle drag reports the new u/v extent. Mirror it into the + // Size spins and, when editing a committed datum, into the feature so the rendered rectangle + // follows live. SetValue doesn't emit a command event, so no refresh_preview recursion. + m_viewport->set_on_datum_size_changed([this](double u, double v) { + if (m_plane_usize) m_plane_usize->SetValue(u); + if (m_plane_vsize) m_plane_vsize->SetValue(v); + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size()) && + m_doc.features[m_edit_index].type == CadFeatureType::Plane) { + m_doc.features[m_edit_index].plane_u_size = u; + m_doc.features[m_edit_index].plane_v_size = v; + refresh_datum_planes(); // committed datum rectangle follows the drag + } + m_viewport->request_repaint(); + }); + + // Offset arrow drag: mirror the new offset into the spin + (when editing) the committed feature. + m_viewport->set_on_datum_offset_changed([this](double off) { + if (m_plane_offset) m_plane_offset->SetValue(off); + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size()) && + m_doc.features[m_edit_index].type == CadFeatureType::Plane) { + m_doc.features[m_edit_index].plane_offset = off; + refresh_datum_planes(); + } + m_viewport->request_repaint(); + }); + + // Helix handles: a drag reports the whole triple, since pitch and height are coupled + // through the turn count and reading one without the others would show a stale curve. + m_viewport->set_on_helix_changed([this](double radius, double pitch, double height) { + if (m_helix_radius) m_helix_radius->SetValue(radius); + if (m_helix_pitch) m_helix_pitch->SetValue(pitch); + if (m_helix_height) m_helix_height->SetValue(height); + update_helix_gizmo(); // re-feed so the curve follows the drag + m_viewport->request_repaint(); + }); + + // Rib thickness handle: writes the spin and re-feeds the ghost, same as the depth arrow. + m_viewport->set_on_rib_thickness_changed([this](double thickness) { + if (m_rib_thickness) m_rib_thickness->SetValue(thickness); + refresh_preview(); // Rib HAS a solid ghost, so the full preview path is correct here + }); + + // Clicking a ghost base plane sets the base graphically (replaces the dropdown). A base pick + // drops any offset-from-face choice so the picked base plane wins, then re-resolves the preview. + m_viewport->set_on_datum_base_picked([this](int base) { + if (m_active == Tool::Plane) { + // Plane tool open: the click sets the datum's base plane (replaces the dropdown). + if (m_plane_base && base >= 0 && base < int(m_plane_base->GetCount())) + m_plane_base->SetSelection(base); + m_pl_faceA_body = m_pl_faceA = -1; + refresh_plane_labels(); + refresh_preview(); // re-resolve the frame + move the gizmo/ghosts to the new base + } else { + // Clicking a reference plane in 3D IS how a sketch plane is chosen now. Record it and, + // when a session is already live, re-plane it immediately: begin_sketch captures the + // plane at first-tool-pick, so without this the entities would stay on the old plane + // while the committed feature landed on the new one. + if (base >= 0) { + m_ref_plane = base; + m_plane_picked = true; // chosen, not merely defaulted to + m_pick_face = m_pick_face_body = -1; // last pick wins: a plane beats a stale face + if (m_viewport && m_viewport->is_sketching()) + m_viewport->set_sketch_plane(plane_from_choice(m_ref_plane)); + } + const char* nm = (base == 0) ? "XY" : (base == 1) ? "XZ" : (base == 2) ? "YZ" : "datum"; + m_status->SetForegroundColour(wxColour(120, 210, 120)); + // Both halves named the TOOLBAR, which no longer carries either button: the tools + // moved to the offer. Name the gesture that actually works in each mode, and say + // what a plain click does, since the two are easy to confuse on a plane. + set_status(m_ui_mode == UiMode::Sketch + ? wxString::Format(_L("%s plane selected — right-click for the drawing tools"), nm) + : wxString::Format(_L("%s plane selected — right-click to sketch on it, " + "or click an object to select it"), nm)); + m_status->Refresh(); + } + }); + + // Move-body gizmo (M5): each drag/edit reports the body's new translation. Store it as a + // display-only per-body transform and re-feed the moved meshes (the OCCT shape is untouched, + // so face/edge ids the dress-up ops target stay valid). + m_viewport->set_on_body_move_changed([this](int body, const Transform3d& xform) { + sync_body_xform(); + if (body < 0 || body >= int(m_body_xform.size())) return; + m_body_xform[body] = xform; // full move+rotate transform, baked into the mesh at Commit + feed_bodies(); // rebuilds the transformed meshes in place + refreshes display + pick + // When the move gizmo is serving the Transform card, mirror the drag into the card's + // numeric fields (the card is the typed half, the gizmo the geometry-first half). + if (body == m_xf_gizmo_body && m_active == Tool::Transform) { + const Transform3d d = xform * m_xf_gizmo_base.inverse(); + const Vec3d t = d.translation(); + if (m_xf_dx) m_xf_dx->SetValue(t.x()); + if (m_xf_dy) m_xf_dy->SetValue(t.y()); + if (m_xf_dz) m_xf_dz->SetValue(t.z()); + const Eigen::AngleAxisd aa(Eigen::Quaterniond(d.linear()).normalized()); + // The gizmo's rings are per-world-axis, so a ring drag yields an exactly axial + // rotation and this is lossless for the normal interaction. A composed multi-ring + // pose is not axial; the card can only express one axis, so report the dominant one + // rather than refusing to answer. + int ax = 0; double best = std::abs(aa.axis().x()); + if (std::abs(aa.axis().y()) > best) { ax = 1; best = std::abs(aa.axis().y()); } + if (std::abs(aa.axis().z()) > best) { ax = 2; best = std::abs(aa.axis().z()); } + const double sign = (aa.axis()[ax] < 0.0) ? -1.0 : 1.0; + if (m_xf_axis) m_xf_axis->SetSelection(ax); + if (m_xf_angle) m_xf_angle->SetValue(sign * aa.angle() * 180.0 / M_PI); + } + const int nb = int(m_doc.bodies.size()); + const wxString tag = (nb > 1) ? wxString::Format(_L("Body %d "), body + 1) : wxString(); + const Vec3d t = xform.translation(); + m_status->SetForegroundColour(wxNullColour); + set_status(tag + wxString::Format(_L("placed (%.1f, %.1f, %.1f) mm — drag arrows to move, rings to rotate"), + t.x(), t.y(), t.z())); + m_status->Refresh(); + }); + + // Fillet/Chamfer radius gizmo: dragging (or editing) the edge-anchored arrow writes the + // Dress-up size and refreshes the ghost. SetValue is silent in wx, so refresh explicitly. + m_viewport->set_on_fillet_radius_changed([this](double radius) { + if (m_dressup_size) m_dressup_size->SetValue(radius); + refresh_preview(); // rebuilds the candidate fillet ghost at the new radius + }); + + // Hole gizmo: dragging/editing the centre, diameter, or depth handle writes the four Hole-card + // spins and refreshes the ghost. SetValue is silent in wx, so refresh explicitly. + m_viewport->set_on_hole_changed([this](double x, double y, double diameter, double depth) { + if (m_hole_x) m_hole_x->SetValue(x); + if (m_hole_y) m_hole_y->SetValue(y); + if (m_hole_diameter) m_hole_diameter->SetValue(diameter); + if (m_hole_depth) m_hole_depth->SetValue(depth); + refresh_preview(); // rebuilds the candidate hole ghost at the new position/size + }); + + // Thread gizmo: dragging/editing the centre, radius, or length handle writes the Thread-card + // spins and refreshes the ghost (SetValue is silent in wx). + m_viewport->set_on_thread_changed([this](double x, double y, double radius, double height) { + if (m_thread_x) m_thread_x->SetValue(x); + if (m_thread_y) m_thread_y->SetValue(y); + if (m_thread_radius) m_thread_radius->SetValue(2.0 * radius); // gizmo reports radius; field = diameter + if (m_thread_height) m_thread_height->SetValue(height); + refresh_preview(); + }); + + // Shell gizmo: dragging/editing the inward thickness arrow writes the Shell-card thickness + // and refreshes the ghost (SetValue is silent in wx). + m_viewport->set_on_shell_thickness_changed([this](double thickness) { + if (m_shell_thickness) m_shell_thickness->SetValue(thickness); + refresh_preview(); + }); + + m_viewport->set_on_revolve_angle_changed([this](double angle) { + if (m_revolve_angle) m_revolve_angle->SetValue(angle); + refresh_preview(); + }); + + m_viewport->set_on_draft_angle_changed([this](double angle) { + if (m_draft_angle) m_draft_angle->SetValue(angle); + refresh_preview(); + }); + + // Cut gizmo: dragging the offset arrow writes the Cut-card offset and refreshes the ghost. + m_viewport->set_on_cut_offset_changed([this](double v) { + if (m_cut_offset) m_cut_offset->SetValue(v); + refresh_preview(); + }); + + m_viewport->set_on_pattern_changed([this](double value) { + // Linear drag feeds spacing; circular drag feeds angle. The card knows which is live. + if (m_pattern_type && m_pattern_type->GetSelection() == 1) { + if (m_pattern_angle) m_pattern_angle->SetValue(value); + } else if (m_pattern_spacing) { + m_pattern_spacing->SetValue(value); + } + refresh_preview(); + }); + + // Leaving an EMPTY sketch session: restore Feature mode + the committed-sketch overlay. + // request_exit() calls this only for an idle Select session that holds no geometry, so + // nothing a user drew can reach here — discarding drawn work goes through tool_cancel's + // confirmation instead. + m_viewport->set_on_sketch_exit([this]() { + // While placing imported Text/SVG art, right-click = Confirm (keep the art) — the + // Insert card is the explicit gate, this is the in-canvas shortcut to it. + if (m_active == Tool::Insert) { finalize_insert(); return; } + if (m_viewport) m_viewport->cancel_sketch(); + m_edit_index = -1; + set_ui_mode(UiMode::Feature); + sync_sketch_display(); + refresh_tree(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Tool exited")); + m_status->Refresh(); + }); + + // The tool declined to leave because the session holds geometry. There is no "press it again" + // any more — the answer is a deliberate Finish or Cancel — so this is a plain statement of + // where you are, not a warning shot. Only the STATUS LINE lives here; the tool reports via + // this callback instead of writing text itself. + m_viewport->set_on_sketch_exit_refused([this]() { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Sketch kept — Finish to commit it, Cancel to discard")); + m_status->Refresh(); + }); + + // Ctrl+Z / Ctrl+Shift+Z (Ctrl+Y) from the viewport → feature-history undo/redo. + m_viewport->set_on_undo_redo([this](bool redo) { do_undo_redo(redo); }); + + // Esc = the unified Cancel everywhere. Feature cards had no key exit (only the button); + // CHAR_HOOK on the panel catches Esc from the card or viewport and routes to tool_cancel. + // Sketch/Constrain keep the viewport's per-gesture Esc (abort the current point first), + // so we only intercept Esc here when a feature/insert card is the thing to dismiss. + Bind(wxEVT_CHAR_HOOK, [this](wxKeyEvent& e) { + const int key = e.GetKeyCode(); + const bool ctrl = e.ControlDown() || e.CmdDown(); + const bool sketching = (m_ui_mode == UiMode::Sketch) && m_viewport && m_viewport->is_sketching(); + // Which key MAP applies is a question about the MODE, not about whether a session is + // already running. Gating the sketch map on is_sketching() made it unreachable by + // keyboard: is_sketching() only turns true inside select_tool()'s begin_sketch(), and + // select_tool() is what the sketch keys call — so the first letter after entering + // sketch mode fell through to the feature map, matched nothing (feature keys are + // Shift+letter), and did nothing. The mouse worked only because the toolbar flyout + // reaches select_tool() directly. That is why all 17 keys read as dead. 0ud. + const bool sketch_mode = (m_ui_mode == UiMode::Sketch); + // Never steal editing keys from a focused text field or an open in-canvas value field — + // Delete/Ctrl+Z there must edit the text, not the model. + const bool in_text = (dynamic_cast(wxWindow::FindFocus()) != nullptr) + || (m_viewport && m_viewport->inline_busy()); + if (getenv("ORCA_CAD_KEYTRACE")) { + wxWindow* fw = wxWindow::FindFocus(); + fprintf(stderr, "[KEYTRACE] key=%d ui_mode=%d is_sketching=%d in_text=%d inline_busy=%d focus=%s\n", + key, int(m_ui_mode), (m_viewport && m_viewport->is_sketching()) ? 1 : 0, in_text ? 1 : 0, + (m_viewport && m_viewport->inline_busy()) ? 1 : 0, + // wxString, not a cast: GetClassName() returns const wxChar* — wchar_t* in + // this build — and casting THAT to const char* and printing it with %s emits + // the first byte and stops at the padding NUL. Every focus= field this tracer + // has ever printed was a single letter: "wxGLCanvas" came out as "w", and so + // did "wxWindow". An instrument that silently truncates its most important + // field is worse than no instrument, and this one was trusted for a whole + // day's diagnosis. + fw ? wxString(fw->GetClassInfo()->GetClassName()).utf8_str().data() : "(none)"); + fflush(stderr); + } + + // NOTE the position: this sits AFTER the KEYTRACE block on purpose. It returns early, + // and putting it first made every forwarded key invisible to the tracer — the one + // instrument that diagnosed this bug in the first place. + // The in-canvas value field is a borderless, always-on-top top-level frame, so whether it + // may take keyboard focus is the platform's decision, not ours: macOS denies key status to a + // borderless window, mutter's focus-stealing prevention refuses a re-mapped window, and the + // rig never grants it. When focus is refused, Enter/Esc/Tab are delivered HERE (to the panel) + // instead of the field, its own wxEVT_TEXT_ENTER / WXK_ESCAPE bindings never fire, and the + // queued-dimension chain (a line queues Length then Angle) becomes unwalkable. Forwarding them + // makes the field behave the same everywhere WITHOUT fighting the window manager for focus, + // which is what seven earlier attempts did unsuccessfully. When the field DOES hold focus we + // deliberately do nothing here, so its own bindings run and typing keeps working. + if (m_viewport && m_viewport->inline_busy() && !m_viewport->inline_has_focus()) { + if (key == WXK_RETURN || key == WXK_NUMPAD_ENTER || key == WXK_TAB) { + m_viewport->inline_commit(); + return; + } + // NO forwarding here any more. The field is drawn INSIDE the GL canvas now, so it + // is fed the way every other ImGui widget in this app is fed: GLCanvas3D::on_char -> + // ImGuiWrapper::update_key_data -> io.AddInputCharacter. Re-adding a panel-side + // forwarder would also mask whether that path works, which is exactly what is being + // measured. + // Esc is NOT special-cased here any more: escape() routes it, and the open field is + // exactly what CadLevel::Transient means, so it closes the field and stops there. + } + + // ONE Esc, ONE route, whatever holds focus. Which widget has focus is an accident of where + // the user last clicked (a toolbar button, the Construction checkbox), and Esc must not + // depend on it. It used to be answered in four places — the inline field above, a sketch + // branch, a feature-card branch, and the canvas — none of which could see the others, so + // a press aimed at one of them fell through to the next and the SECOND press reached a + // layer that discarded the live sketch. escape() picks the single deepest live level and + // acts on that one only; see DesignInteraction.hpp for the ladder and its invariant. + if (key == WXK_ESCAPE) { escape(); return; } + + // The offer from the keyboard (charter 4.1): the Menu key, or Shift+F10 for keyboards that + // do not have one. Same menu the right-click opens — show_offer_menu already decides which + // half of the map applies via sketch_map_applies(), so nothing about the content is decided + // here. With no press to anchor it, offer_anchor() puts it on the viewport. + // WXK_MENU is the GTK code for the physical Menu key (GDK_KEY_Menu); wxMSW instead sends + // WXK_WINDOWS_MENU for VK_APPS and maps Alt to WXK_ALT, so accepting both is safe + // everywhere. CallAfter because the menu is modal: let the key event finish dispatching + // before a nested loop takes the queue, the same reason the Sketch entry does it. + if (!in_text && !ctrl + && (key == WXK_MENU || key == WXK_WINDOWS_MENU || (key == WXK_F10 && e.ShiftDown()))) { + CallAfter([this] { show_offer_menu(offer_anchor()); }); + return; + } + + // Ctrl+Z / Ctrl+Shift+Z / Ctrl+Y — undo/redo handled here (not only in the GL canvas) so + // it works even when the canvas lost keyboard focus. In a sketch, undo drops the last entity. + if (!in_text && ctrl && (key == 'Z' || key == 'z' || key == WXK_CONTROL_Z || + key == 'Y' || key == 'y' || key == WXK_CONTROL_Y)) { + const bool redo = (key == 'Y' || key == 'y' || key == WXK_CONTROL_Y) || e.ShiftDown(); + if (sketching) { if (!redo) m_viewport->undo_last_sketch_entity(); } + else { do_undo_redo(redo); } + return; + } + // Delete — the selected sketch entities (or the last drawn one if none is selected), or the + // selected feature in Feature mode. Focus-independent, same reason as undo above. + // WXK_BACK too: on a keyboard whose Del is a chord (every laptop this runs on), Del is + // the one destructive key nobody can reach, and Backspace is what users press. oql1. + if (!in_text && (key == WXK_DELETE || (key == WXK_BACK && sketching))) { + if (sketching) { m_viewport->delete_selected_or_last_sketch_entity(); return; } + if (m_ui_mode == UiMode::Feature && m_active == Tool::None + && tree_selection() != wxNOT_FOUND) { on_delete_feature(); return; } + } + // Section view controls while it is on (Alt+Wheel is unreliable under remote desktops / is + // grabbed by GLCanvas3D, so the keyboard drives it): PageUp/PageDown move the plane, F flips + // which half is kept (so you can inspect the opposite part). + if (!in_text && !sketch_mode && m_section_on) { + if (key == WXK_PAGEUP || key == WXK_PAGEDOWN) { + m_section_cut_z += (key == WXK_PAGEUP ? 2.0 : -2.0); + if (m_viewport) m_viewport->set_section_plane(true, m_section_cut_z, m_section_upper); + return; + } + if (key == 'F' || key == 'f') { flip_section_view(); return; } + } + // Tool shortcuts (Onshape-style). While a sketch is open, single letters drive sketch + // tools; otherwise Shift+letter drives feature tools and single letters drive view + // toggles / section. Ctrl-combos and focused text fields are never intercepted. + // A SKETCH SHORTCUT MAY LEAVE AN OPEN VALUE FIELD. in_text is true while an inline + // dimension editor is up, and drawing a rectangle opens one automatically for its + // Width/Height — so after a rectangle every single-letter tool key was swallowed and the + // sketch could not be continued at all. A value field holds a NUMBER; a letter is never + // meant for it, so a letter that names a sketch tool is unambiguously a tool switch. + // set_tool() commits the field on the way through, so the typed value is kept. + // Deliberately narrow: sketch mode only, only keys that are actually bound, and only the + // in-canvas field — a focused wxTextCtrl elsewhere (the variables table, a card spin) + // still keeps every key. + const bool inline_field_only = (dynamic_cast(wxWindow::FindFocus()) == nullptr) + && m_viewport && m_viewport->inline_busy(); + if (in_text && inline_field_only && sketch_mode && !ctrl) { + const int up2 = (key >= 'a' && key <= 'z') ? key - 'a' + 'A' : key; + auto it2 = m_keys_sketch.find(up2); + if (it2 != m_keys_sketch.end()) { it2->second(); return; } + } + // Ctrl+Shift first: the block below deliberately ignores every Ctrl-combo, which is + // exactly what makes this layer free to use. + if (!in_text && ctrl && e.ShiftDown()) { + const int up = (key >= 'a' && key <= 'z') ? key - 'a' + 'A' : key; + auto it = m_keys_feature.find(up | SC_SHIFT | SC_CTRL); + if (it != m_keys_feature.end()) { it->second(); return; } + } + if (!in_text && !ctrl) { + const int up = (key >= 'a' && key <= 'z') ? key - 'a' + 'A' : key; // normalise case + if (sketch_mode) { + auto it = m_keys_sketch.find(up); + if (it != m_keys_sketch.end()) { it->second(); return; } + } else { + auto it = m_keys_feature.find(up | (e.ShiftDown() ? SC_SHIFT : 0)); + if (it != m_keys_feature.end()) { it->second(); return; } + } + } + e.Skip(); + }); + + // Right-click finishes the move gizmo in the viewport; mirror that on the panel so the + // action bar (shown while moving) hides and the move state clears. + m_viewport->set_on_move_exit([this]() { m_move_body = -1; show_move_card(false); update_action_bar(); }); + + // The offer (§4.1): right-click the geometry, get the verbs that apply to it. Left-click + // still only selects, so pointing at things stays quiet. + m_viewport->set_on_context_menu([this](const wxPoint& p) { show_offer_menu(p); }); + + // The Line tool's length and the Dimension tool's value are both entered in-canvas now + // (live quote labels + the floating SketchInlineEditor), so the old docked-card + // callbacks (on_segment_drawn / on_dimension_pick_complete) are no longer wired. + + // Imported-art bbox transform streams the live offset/scale back here; write them to + // the feature and re-sync the overlay so the art tracks the drag. + m_viewport->set_on_imported_transform([this](int feat, Vec2d off, double sx, double sy) { + if (feat < 0 || feat >= int(m_doc.features.size())) return; + CadFeature& f = m_doc.features[feat]; + if (f.imported_regions.empty()) return; + f.import_offset = off; + f.import_scale_x = sx; + f.import_scale_y = sy; + m_doc.recompute(); + sync_sketch_display(); + }); + + auto* vcol = new wxBoxSizer(wxVERTICAL); + // The sketch banner sits ABOVE the viewport rather than floating inside it: a child window + // over a wxGLCanvas is a platform argument (it is a native window on GTK and does not + // reliably stack over GL), and the banner's job is to be unmissable, not to be clever. + m_sketch_banner = new wxPanel(this, wxID_ANY); + m_sketch_banner->SetBackgroundColour(wxColour(0, 122, 116)); // Orca teal: not a plate colour + m_sketch_banner_txt = new wxStaticText(m_sketch_banner, wxID_ANY, wxString()); + m_sketch_banner_txt->SetForegroundColour(*wxWHITE); + { + wxFont f = m_sketch_banner_txt->GetFont(); + f.SetWeight(wxFONTWEIGHT_BOLD); + m_sketch_banner_txt->SetFont(f); + auto* bs = new wxBoxSizer(wxHORIZONTAL); + bs->Add(m_sketch_banner_txt, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(6)); + m_sketch_banner->SetSizer(bs); + } + m_sketch_banner->Hide(); + vcol->Add(m_sketch_banner, 0, wxEXPAND); + // The bottom 3D-navigator orb handles all view orientation, so no separate view buttons. + // Fit view is a double-click on the viewport (the tool intercepts it -> zoom_to_volumes). + vcol->Add(m_viewport, 1, wxEXPAND); + + // Onshape layout: top toolbar over [ slim left column | center viewport ]. + auto* body = new wxBoxSizer(wxHORIZONTAL); + body->Add(m_form, 0, wxEXPAND); + body->Add(vcol, 1, wxEXPAND); + + auto* outer = new wxBoxSizer(wxVERTICAL); + outer->Add(m_toolbar, 0, wxEXPAND); + outer->Add(new wxStaticLine(this, wxID_ANY), 0, wxEXPAND); + outer->Add(body, 1, wxEXPAND); + SetSizer(outer); + + // The atlas says a verb is wired; the registrations above say what it runs. Nothing checks + // that the two agree, and a broken join is INVISIBLE — the row renders, is enabled, and does + // nothing when picked. That defect has shipped three times (edit_feature and sk_move carrying + // action:null, then a whole flyout family the moment its widget stopped being built), and it + // cannot be seen by reading either side alone. Verify the join once, here, where every + // registration is complete. Cheap: 86 map lookups, once per panel. + { + std::vector dead; + for (int i = 0; i < kOfferVerbCount; ++i) { + const OfferVerb& v = kOfferVerbs[i]; + if (v.action == nullptr || *v.action == '\0') + continue; // kernel support, no GUI path — the row shows disabled + const std::string a(v.action); + bool ok = false; + if (a.rfind("key:", 0) == 0) { // resolved exactly as run_offer_action() resolves it + const std::string k = a.substr(4); + if (k.size() >= 3 && k[0] == 'S' && k[1] == '+') { + auto it = m_keys_feature.find(int(k[2]) | SC_SHIFT); + ok = it != m_keys_feature.end() && bool(it->second); + } else if (!k.empty()) { + auto it = m_keys_sketch.find(int(k[0])); + ok = it != m_keys_sketch.end() && bool(it->second); + } + } else { + auto it = m_verb_actions.find(a); + ok = it != m_verb_actions.end() && bool(it->second); + } + if (!ok) + dead.emplace_back(std::string(v.id) + " -> " + a); + } + for (const std::string& d : dead) + BOOST_LOG_TRIVIAL(error) << "Design offer: wired verb has no action: " << d; + assert(dead.empty()); // debug builds stop here; release ships the log line + } + + set_ui_mode(UiMode::Feature); +} + +void DesignPanel::set_active_tool_btn(ScalableButton* b) +{ + // Onshape-style: the active tool's button gets the Orca accent (teal); the + // rest revert to the ribbon surface. nullptr clears the whole strip. + m_active_tool_btn = b; + const wxColour bg = dp_ribbon_bg(), teal(0x00, 0x96, 0x88); + for (auto* btn : m_tool_btns) { + if (btn == nullptr) continue; + btn->SetBackgroundColour(btn == b ? teal : bg); + btn->Refresh(); + } +} + +// Paint the DoF line. Split out of the solve callback so entering Constrain can re-apply the +// last known state — see m_dof_last. +void DesignPanel::apply_dof_status(int dof, bool ok, bool has_constraints) +{ + if (!m_dof_status) return; + if (!has_constraints) { + m_dof_status->SetLabel(wxString()); + } else if (!ok) { + m_dof_status->SetForegroundColour(wxColour(235, 80, 80)); + m_dof_status->SetLabel(_L("✗ Conflicting constraints")); + } else if (dof == 0) { + m_dof_status->SetForegroundColour(wxColour(80, 200, 110)); + m_dof_status->SetLabel(_L("✓ Fully constrained")); + } else if (dof > 0) { + m_dof_status->SetForegroundColour(dp_ctl_text()); + m_dof_status->SetLabel(wxString::Format(_L("%d degrees of freedom"), dof)); + } else { + m_dof_status->SetLabel(wxString()); + } + m_dof_status->Show(!m_dof_status->GetLabel().IsEmpty()); + m_dof_status->Refresh(); + update_cards_frame(); m_form->Layout(); +} + +void DesignPanel::set_ui_mode(UiMode m) +{ + m_ui_mode = m; + if (m != UiMode::Sketch) m_sketch_on.clear(); // no stale "on the picked face" on the next hint + // The DoF readout describes a SKETCH's constraint state, so it means nothing back in Feature + // mode — where it nonetheless stayed on screen after every Confirm, Cancel and Escape + // (752). Cleared here rather than at those three exits because this is the one place + // all of them pass through, and a fourth exit added later would otherwise reintroduce it. + // Constrain mode keeps it: that is where the number is the whole point. + if (m == UiMode::Feature && m_dof_status != nullptr) { + m_dof_status->SetLabel(wxString()); + m_dof_status->Show(false); + } + // Constrain is where the number is the whole point, and clearing it on the way out of + // Sketch left it blank on the way in — no solve fires merely because the mode changed. + if (m == UiMode::Constrain) + apply_dof_status(m_dof_last, m_dof_last_ok, m_dof_last_has); + wxSizer* s = m_toolbar->GetSizer(); + s->Show(m_tb_feature, m == UiMode::Feature, true); + s->Show(m_tb_sketch, m == UiMode::Sketch, true); + // Constraint buttons are live in BOTH Sketch and Constrain (Fase 4.2 live path); the + // Confirm/Cancel action bar (m_tb_action) is already mode-appropriate and stays untouched. + s->Show(m_tb_relations, m == UiMode::Sketch || m == UiMode::Constrain, true); + m_toolbar->Layout(); + m_toolbar->FitInside(); // refresh the horizontal scroll range for the new group widths + set_active_tool_btn(nullptr); // no tool selected right after a mode switch + // Phase 3: the docked Sketch card (plane/orientation) shows for the whole Sketch + // session and hides on Finish/Constrain. + if (m_box_sketch_session != nullptr && m_form != nullptr && m_cards->GetSizer() != nullptr) { + if (m == UiMode::Sketch && m_hdr_sketch_session != nullptr) + m_hdr_sketch_session->SetLabel(wxString::Format(_L("Sketch %d"), m_feature_counter + 1)); + m_cards->GetSizer()->Show(m_box_sketch_session, m == UiMode::Sketch, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + } + // Constraint-manager card follows Constrain mode; rebuilt from the active feature. + if (m_box_constraints != nullptr && m_form != nullptr && m_cards->GetSizer() != nullptr) { + if (m == UiMode::Constrain || m == UiMode::Sketch) + rebuild_constraint_list(); // Sketch too: a live session has its own constraints + else + m_cards->GetSizer()->Show(m_box_constraints, false, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + } + update_action_bar(); // Sketch/Constrain modes show the unified ✓/✗; Feature idle hides it + // The origin planes follow the mode: entering Sketch offers them even when a body exists, + // leaving it takes them back. Without this they would only refresh on the next tree + // rebuild, which is not an event that happens when you merely press Sketch. + update_reference_planes(); + + // Say where you are, in words, across the top of the viewport. + // + // THE BED IS NOT MUTED HERE, and it was: "a plate grid and a sketch grid are the same visual + // language" is true and still the wrong call, because there IS no sketch grid to replace it. + // Seen on the rig: pick XY, arm Line, and the viewport is an empty grey field — no bed, no + // grid, no origin, nothing to judge a length or a direction against. The plate grid was + // carrying the ground reference for the whole tab. The banner already says where you are; + // taking the floor away as well only made the sketch harder to draw. The Bed checkbox is the + // one thing that governs the bed, in every mode. + if (m_sketch_banner != nullptr) { + const bool sketching = (m == UiMode::Sketch); + if (sketching && m_sketch_banner_txt != nullptr) + m_sketch_banner_txt->SetLabel( + wxString::Format(_L("Editing: Sketch %d · N = look normal to the plane · " + "Finish or Cancel in the toolbar"), + m_feature_counter + 1)); + m_sketch_banner->Show(sketching); + m_sketch_banner->GetParent()->Layout(); + } +} + +void DesignPanel::on_shape_changed() +{ + bool rect = (m_shape->GetSelection() == 0); + m_width->Enable(rect); + m_height->Enable(rect); + m_radius->Enable(!rect); +} + +void DesignPanel::set_status_ok() +{ + set_status(wxString::Format(_L("OK — %zu triangles"), + m_doc.display_mesh.its.indices.size())); + if (m_viewport != nullptr) { + m_viewport->clear_move_gizmo(); // a recompute invalidates the gizmo's body centroid + rebuild_disp_meshes(); // apply per-body Move transforms to the display/pick meshes + // Point the solid-pick at the fresh body + TRANSFORMED pick mesh (stable address) + the + // per-body xform vector (for edge sampling). Resets the whole/face/edge selection, whose + // ids invalidate on every recompute. Null body is handled inside. + m_viewport->set_solid_pick(&m_doc.bodies, &m_disp_pick_mesh, + &m_doc.display_tri_face, &m_doc.display_tri_body, + &m_body_visible, &m_body_xform); + feed_bodies(); + } + sync_sketch_display(); +} + +// Draw every committed sketch that no enabled Extrude consumes, so a sketch stays +// visible (as a translucent face + outline) when it is not part of the solid — e.g. +// after its Extrude is removed, or right after Finish. +void DesignPanel::sync_sketch_display() +{ + if (m_viewport == nullptr) return; + const int n = int(m_doc.features.size()); + std::vector consumed(n, false); + // Per-loop extrudes (sketch_ref < 0) carry a verbatim copy of the one loop they + // consumed; collect those so that loop is hidden from its source sketch overlay. + std::vector> consumed_loops; + for (const CadFeature& f : m_doc.features) { + if (f.type != CadFeatureType::Extrude || !f.enabled) continue; + if (f.sketch_ref >= 0 && f.sketch_ref < n) consumed[f.sketch_ref] = true; + else if (f.sketch_ref < 0 && !f.entities.empty()) consumed_loops.push_back(f.entities); + } + // Two loops match when their entities are the same geometry in the same order — the + // per-loop extrude stored a verbatim copy, so this is an exact comparison. + auto same_loop = [](const std::vector& a, const std::vector& b) { + if (a.size() != b.size() || a.empty()) return false; + auto eq = [](const Vec2d& u, const Vec2d& v) { return (u - v).squaredNorm() < 1e-10; }; + for (size_t k = 0; k < a.size(); ++k) { + const SketchEntity& x = a[k]; const SketchEntity& y = b[k]; + if (x.type != y.type || !eq(x.p0, y.p0) || !eq(x.p1, y.p1) || + !eq(x.center, y.center) || std::abs(x.radius - y.radius) > 1e-7) return false; + } + return true; + }; + + std::vector ds; + for (int i = 0; i < n; ++i) { + const CadFeature& f = m_doc.features[i]; + if (f.type != CadFeatureType::Sketch || consumed[i] || !f.enabled) + continue; + if (!f.entities.empty()) { + if (consumed_loops.empty()) { + ds.push_back({ f.entities, f.plane, i }); + } else { + // Drop the entities of any loop already extruded; keep the rest (other + // loops + non-loop entities) so they stay visible and selectable. + std::vector drop(f.entities.size(), 0); + for (const std::vector& loop : m_viewport->region_entity_indices_with_holes(f.entities)) { + std::vector es; + for (int ei : loop) + if (ei >= 0 && ei < int(f.entities.size())) es.push_back(f.entities[ei]); + bool gone = false; + for (const std::vector& c : consumed_loops) + if (same_loop(es, c)) { gone = true; break; } + if (gone) + for (int ei : loop) + if (ei >= 0 && ei < int(drop.size())) drop[ei] = 1; + } + std::vector shown; + for (int ei = 0; ei < int(f.entities.size()); ++ei) + if (!drop[ei]) shown.push_back(f.entities[ei]); + if (!shown.empty()) ds.push_back({ std::move(shown), f.plane, i }); + } + } else if (!f.imported_regions.empty()) { + // Imported art (Text/SVG) carries no solver entities; synthesize + // closed line loops from each region contour so it shows as an + // outline overlay (display only — never stored on the feature). + // Apply the feature's placement transform so the overlay tracks + // moves / scales. + const auto regions = transform_regions(f.imported_regions, f.import_offset, + f.import_scale_x, f.import_scale_y); + std::vector lines; + for (const auto& region : regions) + for (const auto& contour : region) { + const int m = int(contour.size()); + for (int k = 0; k < m; ++k) { + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = contour[k]; + e.p1 = contour[(k + 1) % m]; + lines.push_back(e); + } + } + if (!lines.empty()) + ds.push_back({ std::move(lines), f.plane, i }); + } + } + m_viewport->set_display_sketches(std::move(ds)); +} + +void DesignPanel::on_add_text() +{ + wxTextEntryDialog dlg(this, _L("Text to insert:"), _L("Text"), wxEmptyString); + if (dlg.ShowModal() != wxID_OK) + return; + const wxString text = dlg.GetValue(); + if (text.empty()) + return; + const std::string utf8(text.ToUTF8().data()); + // Insert at a default height; resize in-canvas via the bbox handles (Move/Scale). + add_imported_sketch(text_to_regions(utf8, 10.0), _L("Text")); +} + +void DesignPanel::on_import_svg() +{ + wxFileDialog dlg(this, _L("Import SVG"), wxEmptyString, wxEmptyString, + "SVG files (*.svg)|*.svg|All files|*.*", + wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dlg.ShowModal() != wxID_OK) + return; + const std::string path(dlg.GetPath().ToUTF8().data()); + // Import at 1:1; resize in-canvas via the bbox handles (Move/Scale). + add_imported_sketch(svg_to_regions(path, 1.0), _L("SVG")); +} + +// Run a long CAD computation off the UI thread. A big STEP costs tens of seconds in OCCT +// (parse + tessellate); running it inline froze the whole window — the compositor marked the +// app unresponsive and nothing repainted. The dialog is app-modal, so the document cannot be +// touched while the worker owns it. Exceptions must not escape the worker: `work` is expected +// to swallow them (OCCT throws Standard_Failure, which is not a std::exception). +static void run_off_ui_thread(wxWindow* parent, const wxString& message, const std::function& work) +{ + std::atomic done{false}; + std::thread worker([&work, &done]() { + work(); + done.store(true, std::memory_order_release); + }); + + // Input stays blocked for the whole operation: the worker owns the document, so nothing + // in the UI may mutate it meanwhile. The dialog only appears if the work is actually slow — + // a fillet on a small body finishes in milliseconds and must not flash a dialog. + wxWindowDisabler disabler; + std::unique_ptr dlg; + int elapsed_ms = 0; + while (!done.load(std::memory_order_acquire)) { + if (dlg == nullptr && elapsed_ms >= 300) + dlg = std::make_unique(_L("Design"), message, 100, parent, + wxPD_AUTO_HIDE | wxPD_SMOOTH); + if (dlg != nullptr) + dlg->Pulse(); + wxYield(); // keep the window painting instead of going unresponsive + wxMilliSleep(30); + elapsed_ms += 30; + } + worker.join(); +} + +// Rebuild the document off the UI thread. Every feature op (fillet, cut, shell, boolean, ...) +// goes through recompute(), and on a heavy imported solid that is seconds of OCCT work — inline +// it freezes the window. OCCT throws Standard_Failure, which is not a std::exception and would +// terminate the process if it escaped the worker, so both are caught here. +// Keep the Model's copy of the recipe in step with the document. +// +// This used to be written in exactly ONE place — on_commit(), as a side effect of Commit to +// Plate — so a user who modelled for an hour and pressed Ctrl+S saved a project containing no +// feature history at all, and the app reported success (vjk5). The 3MF exporter was +// never at fault: nothing had handed it a recipe. +// +// Every save path (Ctrl+S, Save As, autosave, crash recovery) reads model.cad_recipe, so +// keeping it current after each document change is what makes all of them correct at once, +// rather than teaching each one to ask the Design tab. Commit to Plate means "send this to the +// slicer"; making saving depend on it was the bug, not the cure. +// +// Cost is a serialization per recompute — tens of KB against an OCCT rebuild that just ran. +void DesignPanel::sync_recipe_to_model() +{ + Plater* plater = wxGetApp().plater(); + if (plater == nullptr) return; + // An empty document CLEARS it, so a non-CAD project never carries a stale recipe. + std::string recipe = m_doc.features.empty() ? std::string() : m_doc.serialize_recipe(); + if (recipe == plater->model().cad_recipe) + return; // no change — this is the rehydrate of a project that was just opened + plater->model().cad_recipe = std::move(recipe); + + // The plater's dirty flag rides its own undo/redo stack, which Design edits never touch, and + // a design that has not been committed to the plate has no ModelObjects either — so without + // this the project reads as clean: no autosave, and no "unsaved changes" prompt on quit. + // Same hook the auxiliary-files panel uses for project data that lives outside the model. + Slic3r::put_other_changes(); +} + +bool DesignPanel::recompute_guarded(const wxString& message) +{ + bool ok = false; + run_off_ui_thread(this, message, [this, &ok]() { + try { + ok = m_doc.recompute(); + } catch (const Standard_Failure& e) { + const char* what = e.GetMessageString(); + m_doc.error = (what != nullptr && *what != '\0') ? what : "OCCT failure"; + ok = false; + } catch (const std::exception& e) { + m_doc.error = e.what(); + ok = false; + } + }); + // Only on success: a failed recompute leaves the document mid-edit, and persisting that + // would save a model the user never had. + if (ok) sync_recipe_to_model(); + return ok; +} + +void DesignPanel::on_import_step() +{ + wxFileDialog dlg(this, _L("Import STEP"), wxEmptyString, wxEmptyString, + "STEP files (*.step;*.stp)|*.step;*.stp|All files|*.*", + wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dlg.ShowModal() != wxID_OK) + return; + const std::string path(dlg.GetPath().ToUTF8().data()); + std::string err; + // Keep the OCCT B-rep (don't mesh it like the slicer importer): each top-level solid + // becomes a coexisting CadBody, fully editable by the on-face/edge feature tools. + std::vector solids; + run_off_ui_thread(this, _L("Reading STEP…"), [&]() { + try { + solids = GeometryEngine::read_step_solids(path, err); + } catch (const Standard_Failure& e) { + const char* what = e.GetMessageString(); + err = (what != nullptr && *what != '\0') ? what : "OCCT failure"; + } catch (const std::exception& e) { + err = e.what(); + } + }); + if (solids.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(err.empty() ? _L("No solids found in STEP") + : (_L("STEP import failed: ") + wxString::FromUTF8(err))); + m_status->Refresh(); + return; + } + m_doc.checkpoint(); // undo boundary: importing STEP solids + for (const TopoDS_Shape& s : solids) { + m_feature_counter++; + CadFeature f; + f.type = CadFeatureType::Import; + f.name = std::string("STEP") + std::to_string(m_feature_counter); + f.imported_solid = s; + f.mode = BooleanMode::New; // each solid is its own coexisting body + m_doc.features.push_back(f); + } + bool rebuilt = false; + run_off_ui_thread(this, _L("Rebuilding model…"), [&]() { + try { + rebuilt = m_doc.recompute(); + } catch (const Standard_Failure& e) { + const char* what = e.GetMessageString(); + m_doc.error = (what != nullptr && *what != '\0') ? what : "OCCT failure"; + } catch (const std::exception& e) { + m_doc.error = e.what(); + } + }); + if (!rebuilt) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("STEP import failed: ") + wxString::FromUTF8(m_doc.error)); + m_status->Refresh(); + return; + } + set_ui_mode(UiMode::Feature); // imported solids live in the feature timeline + refresh_tree(); + set_tree_selection(int(m_doc.features.size()) - 1); + set_status_ok(); // canonical post-recompute viewport/pick/parts refresh + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format( + _L("Imported %d solid(s) — pick a face or edge, then Fillet / Cut / Shell to modify"), + int(solids.size()))); + m_status->Refresh(); +} + +// Import a triangle mesh as a real B-rep body: the triangles are rebuilt into OCCT faces with +// shared topology, then coplanar neighbours are merged so the result has pickable CAD faces +// rather than one face per triangle. Lands in the same CadFeatureType::Import as a STEP, so +// every downstream feature tool (fillet / cut / shell / face-extrude) works on it unchanged. +void DesignPanel::on_import_mesh() +{ + wxFileDialog dlg(this, _L("Import mesh"), wxEmptyString, wxEmptyString, + "Mesh files (*.stl;*.obj)|*.stl;*.obj|All files|*.*", + wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dlg.ShowModal() != wxID_OK) + return; + const std::string path(dlg.GetPath().ToUTF8().data()); + + auto fail = [this](const wxString& msg) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(msg); + m_status->Refresh(); + }; + + // Load the triangles with the slicer's own readers — no new mesh dependency. + TriangleMesh mesh; + const std::string ext = boost::algorithm::to_lower_copy( + boost::filesystem::path(path).extension().string()); + if (ext == ".stl") { + if (!mesh.ReadSTLFile(path.c_str())) { fail(_L("Could not read the STL file")); return; } + } else if (ext == ".obj") { + ObjInfo obj_info; + std::string obj_err; + if (!load_obj(path.c_str(), &mesh, obj_info, obj_err)) { + fail(_L("Could not read the OBJ file: ") + wxString::FromUTF8(obj_err)); + return; + } + } else { + fail(_L("Unsupported mesh format (STL and OBJ are supported)")); + return; + } + if (mesh.its.indices.empty()) { fail(_L("The mesh contains no triangles")); return; } + + // One planar face per triangle before merging, so the cost is driven by the triangle count. + // A dense organic scan has few coplanar neighbours to merge away and stays heavy afterwards; + // warn rather than silently freezing the CAD kernel on every subsequent recompute. + if (mesh.its.indices.size() > MESH_IMPORT_TRIANGLE_WARN) { + const wxString q = wxString::Format( + _L("This mesh has %d triangles. Every triangle becomes a B-rep face before coplanar " + "merging, so importing it may take a long time and leave a body that is slow to " + "edit. Decimating the mesh first is usually better.\n\nImport anyway?"), + int(mesh.its.indices.size())); + if (wxMessageBox(q, _L("Large mesh"), wxYES_NO | wxICON_WARNING, this) != wxYES) + return; + } + + wxBusyCursor busy; + GeometryEngine::MeshBrepStats stats; + TopoDS_Shape shape; + try { + shape = GeometryEngine::mesh_to_brep(mesh.its, MESH_IMPORT_TOLERANCE, + MESH_IMPORT_MERGE_ANGLE_DEG, stats); + } catch (const std::exception& e) { + fail(_L("Mesh conversion failed: ") + wxString::FromUTF8(e.what())); + return; + } catch (const Standard_Failure& e) { // OCCT throws outside std::exception + fail(_L("Mesh conversion failed: ") + wxString::FromUTF8( + e.GetMessageString() ? e.GetMessageString() : "OCCT error")); + return; + } + if (shape.IsNull()) { fail(_L("Mesh conversion produced no geometry")); return; } + + m_doc.checkpoint(); // undo boundary: importing a mesh as a B-rep body + m_feature_counter++; + CadFeature f; + f.type = CadFeatureType::Import; + f.name = std::string("Mesh") + std::to_string(m_feature_counter); + f.imported_solid = shape; + f.mode = BooleanMode::New; // its own coexisting body, like a STEP solid + m_doc.features.push_back(f); + + if (!recompute_guarded(_L("Rebuilding model…"))) { + fail(_L("Mesh import failed: ") + wxString::FromUTF8(m_doc.error)); + return; + } + set_ui_mode(UiMode::Feature); + refresh_tree(); + set_tree_selection(int(m_doc.features.size()) - 1); + set_status_ok(); + + // Report what the mesh actually was, never dress an open shell up as a solid: if it is not + // watertight, say so and say why (boundary vs non-manifold edges) — that is a defect in the + // source mesh the user needs to know about before they start cutting features into it. + if (stats.is_solid) { + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format( + _L("Imported solid — %d triangles → %d faces, volume %.2f mm³. Pick a face or edge, " + "then Fillet / Cut / Shell to modify"), + stats.kept_tris, stats.faces_final, stats.volume)); + } else { + m_status->SetForegroundColour(wxColour(220, 160, 60)); // warning, not an error + set_status(wxString::Format( + _L("Imported as an open shell (not watertight): %d boundary edge(s), %d non-manifold " + "edge(s) — %d triangles → %d faces. The source mesh has holes or duplicated " + "geometry; boolean features may fail on it"), + stats.boundary_edges, stats.nonmanifold_edges, stats.kept_tris, stats.faces_final)); + } + m_status->Refresh(); +} + +void DesignPanel::add_imported_sketch( + const std::vector>>& regions, + const wxString& base_name) +{ + if (regions.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("No importable geometry found")); + m_status->Refresh(); + return; + } + // DRAWING, not importing: if a sketch is open, the art belongs IN it. The outlines become + // ordinary line entities, so they can be constrained, trimmed and extruded with everything + // else on that plane. Committing a separate Sketch feature while the user is mid-sketch put + // the text on its own plane-origin feature and left the sketch they were drawing untouched. + if (m_viewport && m_viewport->is_sketching() && m_viewport->add_sketch_regions(regions)) { + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("%s added to the sketch — Confirm to commit it"), + base_name)); + m_status->Refresh(); + return; + } + m_doc.checkpoint(); // undo boundary: importing Text/SVG art + m_feature_counter++; + CadFeature f; + f.type = CadFeatureType::Sketch; + f.name = std::string(base_name.ToUTF8().data()) + std::to_string(m_feature_counter); + f.imported_regions = regions; + + // #4: when a solid face is selected, drop the art ON that face, centred on it (ready to + // engrave). Otherwise place it on the draw-plane dropdown at the plane origin (legacy). + bool on_face = false; + if (m_sel_solid_face >= 0 && m_sel_solid_body >= 0 && m_sel_solid_body < int(m_doc.bodies.size())) { + const TopoDS_Face face = + GeometryEngine::face_by_index(m_doc.bodies[m_sel_solid_body].shape, m_sel_solid_face); + if (!face.IsNull()) { + f.plane = SketchPlane::from_face(face); + const Vec3d cw = GeometryEngine::face_centroid_world(face); + const Vec2d c_uv = f.plane.project(cw, f.plane.normal); // face centre in plane (u,v) + Vec2d lo(1e30, 1e30), hi(-1e30, -1e30); // bbox of the imported art + for (const auto& reg : regions) + for (const auto& loop : reg) + for (const Vec2d& p : loop) { lo = lo.cwiseMin(p); hi = hi.cwiseMax(p); } + f.import_offset = c_uv - 0.5 * (lo + hi); // centre the art on the face + f.import_on_face = true; + f.import_face_body = m_sel_solid_body; + on_face = true; + } + } + if (!on_face) { + f.plane = plane_from_choice(m_ref_plane); + } + + // Drop the live face selection (its body is now remembered on import_face_body): otherwise + // the next Extrude would push/pull that face instead of extruding the placed art. + m_sel_solid_face = m_sel_solid_edge = m_sel_solid_body = -1; + + m_doc.features.push_back(f); + m_doc.recompute(); // a lone sketch yields an empty body; that is expected + refresh_tree(); + const int newidx = int(m_doc.features.size()) - 1; + set_tree_selection(newidx); // select the new art + sync_sketch_display(); + on_transform_imported(newidx); // in-canvas place/size gizmo ON + // The feature is provisional until the user explicitly Confirms (Onshape gate). The + // Insert card carries Confirm/Cancel; Cancel undoes this insert. + m_insert_feat = newidx; + open_insert_card(base_name); +} + +// Show the Insert Confirm/Cancel card while the imported art is being placed/sized. +void DesignPanel::open_insert_card(const wxString& base_name) +{ + m_active = Tool::Insert; + if (m_hdr_insert) m_hdr_insert->SetLabel(base_name); + wxSizer* s = m_cards->GetSizer(); + s->Show(m_box_insert, true, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + update_action_bar(); // surface the unified ✓/✗ + m_status->SetForegroundColour(wxNullColour); + set_status(base_name + _L(" — drag to place/size, then Confirm")); + m_status->Refresh(); +} + +// Confirm: keep the placed art and leave the placement gizmo. The feature is already in +// the timeline (added provisionally); we just tear down the transient tool/gizmo state. +void DesignPanel::finalize_insert() +{ + const int feat = m_insert_feat; + m_insert_feat = -1; + if (m_viewport) m_viewport->cancel_sketch(); // exit the TransformArt gizmo + close_tool(); // hides the Insert card, clears m_active + set_ui_mode(UiMode::Feature); // imported art lives in the feature timeline + if (feat >= 0 && feat < int(m_doc.features.size())) set_tree_selection(feat); + sync_sketch_display(); + refresh_tree(); + set_status_ok(); +} + +// Cancel: discard the provisional insert (undo restores the pre-insert feature list). +void DesignPanel::cancel_insert() +{ + m_insert_feat = -1; + if (m_viewport) m_viewport->cancel_sketch(); // exit the TransformArt gizmo + m_doc.undo(); // remove the just-added imported feature + close_tool(); + set_ui_mode(UiMode::Feature); + sync_sketch_display(); + refresh_tree(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Insert cancelled")); + m_status->Refresh(); +} + +void DesignPanel::on_transform_imported(int feat_idx) +{ + if (feat_idx < 0 || feat_idx >= int(m_doc.features.size()) || !m_viewport) + return; + const CadFeature& f = m_doc.features[feat_idx]; + if (f.imported_regions.empty()) + return; + // In-canvas bbox handles (replaces the Move/Scale dialog): drag a corner to scale, + // the centre to move. Values stream back via set_on_imported_transform. + m_viewport->begin_imported_transform(feat_idx, f.imported_regions, f.plane, + f.import_offset, f.import_scale_x, f.import_scale_y); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Drag a corner to scale, the centre to move — right-click when done")); + m_status->Refresh(); +} + +void DesignPanel::on_add_sketch() +{ + SketchShape shape = (m_shape->GetSelection() == 1) ? SketchShape::Circle + : SketchShape::Rectangle; + wxString where; // named for the status line + SketchPlane plane = sketch_plane_from_selection(where); // picked face, else the 3D plane click + m_feature_counter++; + m_doc.add_sketch(shape, plane, m_width->GetValue(), m_height->GetValue(), + m_radius->GetValue(), "Sketch" + std::to_string(m_feature_counter)); + m_doc.recompute(); // a lone sketch yields an empty body; that is expected + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Sketch added on %s — select it, then right-click to Extrude"), where)); + refresh_tree(); +} + +// Extrude should consume only the clicked loop when a specific region of the resolved +// sketch is selected and that loop actually has entities. +bool DesignPanel::extrude_uses_loop() const +{ + return m_viewport != nullptr + && m_sel_sketch_region >= 0 + && m_extrude_sketch_ref >= 0 + && m_extrude_sketch_ref == m_sel_sketch_feat + && m_extrude_sketch_ref < int(m_doc.features.size()) + && !m_viewport->selected_loop_entities().empty(); +} + +void DesignPanel::on_add_extrude() +{ + BooleanMode mode = static_cast(m_mode->GetSelection()); // New/Add/Cut/Intersect + m_feature_counter++; + const std::string name = "Extrude" + std::to_string(m_feature_counter); + int idx = -1; + if (m_extrude_face_src >= 0) { + // Onshape face-extrude: the picked solid face is the profile (no sketch wire). + idx = m_doc.add_extrude_face(m_extrude_face_src, m_distance->GetValue(), false, mode, name); + m_extrude_face_src = -1; // consume the face-profile selection + } else if (extrude_uses_loop()) { + // Extrude just the selected loop (its entity subset), leaving the source sketch's + // other loops intact and still selectable. + if (::getenv("ORCA_CAD_PICK_TRACE")) + std::fprintf(stderr, "[pick] on_add_extrude: feat=%d reg=%d ents=%zu\n", + m_extrude_sketch_ref, m_sel_sketch_region, + m_viewport->selected_loop_entities().size()); + idx = m_doc.add_extrude_entities(m_viewport->selected_loop_entities(), + m_doc.features[m_extrude_sketch_ref].plane, + m_distance->GetValue(), false, mode, name); + m_sel_sketch_region = -1; // consume the loop selection + m_viewport->clear_loop_pick(); // drop the now-stale loop highlight + } else { + idx = m_doc.add_extrude(m_extrude_sketch_ref, m_distance->GetValue(), false, mode, name); + } + // Carry the Onshape end-condition / taper / flip / up-to-face onto the new feature so the + // committed solid matches the preview (build_candidate sets the same fields). + if (idx >= 0 && idx < int(m_doc.features.size())) { + CadFeature& f = m_doc.features[idx]; + f.extrude_end = static_cast(m_extrude_end->GetSelection()); + f.distance2 = m_distance2->GetValue(); + f.taper_deg = m_taper->GetValue(); + f.flip = m_flip->GetValue(); + f.up_to_face = (f.extrude_end == ExtrudeEnd::UpToFace) ? m_sel_solid_face : -1; + f.target_body = m_sel_solid_body; // multi-body: act on the picked body (-1 = last) + // On-face Text/SVG remembers its host body even after the face pick was cleared by + // the placement recompute, so the engraving Cut hits the right solid. + if (m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size()) + && m_doc.features[m_extrude_sketch_ref].import_on_face) + f.target_body = m_doc.features[m_extrude_sketch_ref].import_face_body; + } + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_dressup() +{ + if (m_doc.body.IsNull()) { + set_status(_L("Add a solid (sketch + extrude) first")); + return; + } + FaceGroup fg = static_cast(m_face_group->GetSelection()); // Top=0..All=3 + double sz = m_dressup_size->GetValue(); + bool fillet = (m_dressup_type->GetSelection() == 0); + + m_feature_counter++; + // A click-selected solid edge targets THAT edge; otherwise dress the whole face-group. + int didx = -1; + if (m_sel_solid_edge >= 0) { + if (fillet) + didx = m_doc.add_fillet(sz, m_sel_solid_edge, "Fillet" + std::to_string(m_feature_counter)); + else + didx = m_doc.add_chamfer(sz, m_sel_solid_edge, "Chamfer" + std::to_string(m_feature_counter)); + } else if (fillet) + didx = m_doc.add_fillet(sz, fg, "Fillet" + std::to_string(m_feature_counter)); + else + didx = m_doc.add_chamfer(sz, fg, "Chamfer" + std::to_string(m_feature_counter)); + // Dress the picked body (its face/edge ids are body-local). -1 = last body. + if (didx >= 0 && didx < int(m_doc.features.size())) + m_doc.features[didx].target_body = m_sel_solid_body; + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +// Hole and Thread LATCH the geometry they were opened or picked on; Thicken / Shell / Draft read +// the live selection instead. Both models are right for what they are — a placement tool with its +// own plane state, versus an operation whose operand IS the selected face — and the latch is the +// kinder of the two now that a click on empty canvas clears the selection (od0): a stray +// click costs a Thicken pick, and costs a Hole nothing. What was missing is that nothing in the +// Hole/Thread card NAMED the latched face, so after such a click the only words on screen were +// the viewport's "Nothing selected" — over a ghost still drawn on the face Confirm would drill. +// That reads as a contradiction and was filed as one (200). The card now says what it +// holds, the way the other three cards already do. Pass -1 for "none, using the plane dropdown". +void DesignPanel::set_hole_target_label(int face) +{ + if (m_hole_target_label) + m_hole_target_label->SetLabel(face >= 0 ? wxString::Format(_L("Face %d"), face) + : _L("(none — uses Hole plane)")); +} + +// Thread also latches onto a circular EDGE (a cylinder's rim), so it has two kinds to name. +void DesignPanel::set_thread_target_label(int face, int edge) +{ + if (!m_thread_target_label) return; + m_thread_target_label->SetLabel( + face >= 0 ? wxString::Format(_L("Face %d"), face) + : edge >= 0 ? wxString::Format(_L("Edge %d"), edge) + : _L("(none — uses Thread plane)")); +} + +SketchPlane DesignPanel::hole_plane() const +{ + if (m_hole_on_face) return m_hole_face_plane; + SketchPlane p = plane_from_index(m_hole_plane->GetSelection()); + p.origin += m_doc.modeling_origin; + return p; +} + +void DesignPanel::on_add_hole() +{ + if (m_doc.body.IsNull()) { + set_status(_L("Add a solid (sketch + extrude) first")); + return; + } + SketchPlane plane = hole_plane(); + double dia = m_hole_diameter->GetValue(); + double depth = m_hole_depth->GetValue(); + bool through = m_hole_through->GetValue(); + double px = m_hole_x->GetValue(); + double py = m_hole_y->GetValue(); + + m_feature_counter++; + const int hidx = m_doc.add_hole(dia, depth, through, px, py, plane, + "Hole" + std::to_string(m_feature_counter)); + // On-face holes drill the body the face belongs to (even after the pick was cleared). + if (m_hole_on_face && hidx >= 0 && hidx < int(m_doc.features.size())) + m_doc.features[hidx].target_body = m_hole_face_body; + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +SketchPlane DesignPanel::thread_plane() const +{ + if (m_thread_on_face) return m_thread_face_plane; + SketchPlane p = plane_from_index(m_thread_plane->GetSelection()); + p.origin += m_doc.modeling_origin; + return p; +} + +void DesignPanel::apply_thread_standard() +{ + if (!m_thread_std) return; + const int sel = m_thread_std->GetSelection(); + if (sel <= 0) return; // 0 = "Custom" → leave the manual spins untouched + + const ThreadSpec* s = find_thread_standard( + m_thread_std->GetString(sel).utf8_string()); + if (!s) return; + + // Pitch and depth are the defining "measures" of the standard — always apply. + if (m_thread_pitch) m_thread_pitch->SetValue(s->pitch_mm); + if (m_thread_depth) m_thread_depth->SetValue(s->thread_depth_mm()); + + // Nominal diameter: external rod = major diameter; internal tapped bore = minor (tap-drill) + // diameter. On a picked cylindrical surface/edge the diameter comes from the real geometry, + // so don't override it there. (The field holds DIAMETER.) + if (!m_thread_on_face && m_thread_radius) { + const bool internal = m_thread_internal && m_thread_internal->GetValue(); + const double d = internal ? s->minor_diameter_mm() : s->major_diameter_mm; + m_thread_radius->SetValue(d); + } + + if (m_status) + set_status(wxString::Format(_L("Thread standard: %s (pitch %.3g mm)"), + m_thread_std->GetString(sel), s->pitch_mm)); +} + +void DesignPanel::infer_thread_spec(double diameter) +{ + // Snap to the nearest standard thread by nominal (major) diameter, so picking a Ø9.9 boss + // gives M10 — the M diameter, pitch AND depth all follow from the cylinder's base diameter. + const auto& stds = thread_standards(); + int best = -1; double bestErr = 1e30; + for (int i = 0; i < int(stds.size()); ++i) { + const double e = std::abs(stds[i].major_diameter_mm - diameter); + if (e < bestErr) { bestErr = e; best = i; } + } + if (best < 0) { if (m_thread_radius) m_thread_radius->SetValue(diameter); return; } + const ThreadSpec& s = stds[best]; + if (m_thread_std) m_thread_std->SetSelection(best + 1); // row 0 is "Custom" + if (m_thread_radius) m_thread_radius->SetValue(s.major_diameter_mm); // field = DIAMETER + if (m_thread_pitch) m_thread_pitch->SetValue(s.pitch_mm); + if (m_thread_depth) m_thread_depth->SetValue(s.thread_depth_mm()); +} + +void DesignPanel::on_add_thread() +{ + bool internal = m_thread_internal->GetValue(); + if (internal && m_doc.body.IsNull()) { + set_status(_L("Thread needs a solid body — add or import one first")); + return; + } + SketchPlane plane = thread_plane(); + + m_feature_counter++; + const int tidx = m_doc.add_thread(m_thread_radius->GetValue() * 0.5, m_thread_pitch->GetValue(), + m_thread_height->GetValue(), m_thread_depth->GetValue(), + internal, m_thread_x->GetValue(), m_thread_y->GetValue(), + plane, "Thread" + std::to_string(m_feature_counter)); + // On-surface internal thread taps the body the cylindrical face belongs to. + if (m_thread_on_face && tidx >= 0 && tidx < int(m_doc.features.size())) + m_doc.features[tidx].target_body = m_thread_face_body; + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +void DesignPanel::on_add_revolve() +{ + if (m_revolve_sketch_ref < 0 || m_revolve_sketch_ref >= int(m_doc.features.size())) { + set_status(_L("Pick a sketch profile to revolve first")); + return; + } + const BooleanMode mode = static_cast(m_revolve_mode->GetSelection()); + if (mode != BooleanMode::New && m_doc.body.IsNull()) { + set_status(_L("Revolve needs a solid body — add or import one first")); + return; + } + m_feature_counter++; + m_doc.add_revolve(m_revolve_sketch_ref, m_revolve_angle->GetValue(), + m_revolve_axis->GetSelection(), m_revolve_flip->GetValue(), + mode, "Revolve" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +void DesignPanel::on_add_sweep() +{ + if (m_sweep_profile_ref < 0 || m_sweep_profile_ref >= int(m_doc.features.size())) { + set_status(_L("Pick a profile sketch to sweep first")); + return; + } + const int sel = m_sweep_path->GetSelection(); + const int path_ref = (sel != wxNOT_FOUND) + ? int(reinterpret_cast(m_sweep_path->GetClientData(sel))) : -1; + if (path_ref < 0) { + set_status(_L("Pick a path sketch for the sweep")); + return; + } + const BooleanMode mode = static_cast(m_sweep_mode->GetSelection()); + if (mode != BooleanMode::New && m_doc.body.IsNull()) { + set_status(_L("Sweep needs a solid body — add or import one first")); + return; + } + m_feature_counter++; + m_doc.add_sweep(m_sweep_profile_ref, path_ref, mode, + "Sweep" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +void DesignPanel::on_add_loft() +{ + // Collect the checked profile sketches in list (recipe) order. + std::vector refs; + for (unsigned i = 0; i < m_loft_list->GetCount(); ++i) + if (m_loft_list->IsChecked(i) && i < m_loft_sketch_idx.size()) + refs.push_back(m_loft_sketch_idx[i]); + if (refs.size() < 2) { + set_status(_L("Check at least two profile sketches to loft")); + return; + } + const BooleanMode mode = static_cast(m_loft_mode->GetSelection()); + if (mode != BooleanMode::New && m_doc.body.IsNull()) { + set_status(_L("Loft needs a solid body — add or import one first")); + return; + } + m_feature_counter++; + m_doc.add_loft(refs, m_loft_ruled->GetValue(), mode, + "Loft" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +void DesignPanel::on_add_surface_extrude() +{ + if (m_surf_extrude_sketch_ref < 0 || m_surf_extrude_sketch_ref >= int(m_doc.features.size())) { + set_status(_L("Pick a sketch profile to extrude first")); + return; + } + m_feature_counter++; + m_doc.add_surface_extrude(m_surf_extrude_sketch_ref, m_surf_extrude_distance->GetValue(), + "SurfaceExtrude" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_surface_revolve() +{ + if (m_surf_revolve_sketch_ref < 0 || m_surf_revolve_sketch_ref >= int(m_doc.features.size())) { + set_status(_L("Pick a sketch profile to revolve first")); + return; + } + m_feature_counter++; + m_doc.add_surface_revolve(m_surf_revolve_sketch_ref, m_surf_revolve_angle->GetValue(), + m_surf_revolve_axis->GetSelection(), + "SurfaceRevolve" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_surface_loft() +{ + std::vector refs; + for (unsigned i = 0; i < m_surf_loft_list->GetCount(); ++i) + if (m_surf_loft_list->IsChecked(i) && i < m_surf_loft_sketch_idx.size()) + refs.push_back(m_surf_loft_sketch_idx[i]); + if (refs.size() < 2) { + set_status(_L("Check at least two profile sketches to loft")); + return; + } + m_feature_counter++; + m_doc.add_surface_loft(refs, m_surf_loft_ruled->GetValue(), + "SurfaceLoft" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_surface_fill() +{ + if (m_surf_fill_sketch_ref < 0 || m_surf_fill_sketch_ref >= int(m_doc.features.size())) { + set_status(_L("Pick a sketch to fill first")); + return; + } + m_feature_counter++; + m_doc.add_surface_fill(m_surf_fill_sketch_ref, + "SurfaceFill" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_surface_offset() +{ + const int sel = sheet_choice_body(m_surf_offset_body); + if (sel < 0 || sel >= int(m_doc.bodies.size())) { + set_status(_L("Select a sheet body first")); + return; + } + m_feature_counter++; + m_doc.add_surface_offset(sel, m_surf_offset_distance->GetValue(), + "SurfaceOffset" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_thicken_surface() +{ + const int sel = sheet_choice_body(m_surf_thicken_body); + if (sel < 0 || sel >= int(m_doc.bodies.size())) { + set_status(_L("Select a sheet body first")); + return; + } + m_feature_counter++; + m_doc.add_thicken_surface(sel, m_surf_thicken_thickness->GetValue(), + m_surf_thicken_flip->GetValue(), + "ThickenSurface" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +// Compose the same matrix apply_transform() builds in the kernel: rotate about the pivot first, +// then translate. Kept here so the preview and the committed feature can never disagree. +static Transform3d xf_compose(const Vec3d& t, const Vec3d& axis, const Vec3d& pivot, double deg) +{ + Transform3d r = Transform3d::Identity(); + if (std::abs(deg) > 1e-12 && axis.norm() > 1e-9) + r = Transform3d(Eigen::Translation3d(pivot)) + * Transform3d(Eigen::AngleAxisd(deg * M_PI / 180.0, axis.normalized())) + * Transform3d(Eigen::Translation3d(-pivot)); + return Transform3d(Eigen::Translation3d(t)) * r; +} + +// Live preview for the Transform card. The gizmo already writes its drag into the body's display +// transform; the typed fields must use the SAME channel or the numbers and the geometry disagree +// until Confirm — which is what makes typing a distance look like it did nothing. In edit mode the +// committed transform is already baked into the kernel geometry, so undo it first: without that, +// typing 80 over a committed 34 would show the body at 114. +void DesignPanel::xf_live_preview() +{ + if (m_active != Tool::Transform || m_xf_dx == nullptr) return; + if (m_xf_copy && m_xf_copy->GetValue()) return; // a copy leaves the original where it is + sync_body_xform(); + const int sel = m_xf_body ? m_xf_body->GetSelection() : wxNOT_FOUND; + const int b = (sel != wxNOT_FOUND) ? sel : int(m_body_xform.size()) - 1; + if (b < 0 || b >= int(m_body_xform.size())) return; + + if (m_xf_prev_body != b) { + xf_clear_preview(); // the card retargeted: hand the old body back first + m_xf_prev_body = b; + m_xf_prev_base = (b == m_xf_gizmo_body) ? m_xf_gizmo_base : m_body_xform[b]; + } + const int ax = m_xf_axis->GetSelection(); + const Vec3d axis = (ax == 0) ? Vec3d::UnitX() : (ax == 1) ? Vec3d::UnitY() : Vec3d::UnitZ(); + const Vec3d pivot(m_xf_pivot_x->GetValue(), m_xf_pivot_y->GetValue(), m_xf_pivot_z->GetValue()); + const Transform3d want = xf_compose(Vec3d(m_xf_dx->GetValue(), m_xf_dy->GetValue(), + m_xf_dz->GetValue()), + axis, pivot, m_xf_angle->GetValue()); + Transform3d undo = Transform3d::Identity(); + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size())) { + const CadFeature& f = m_doc.features[m_edit_index]; + if (f.type == CadFeatureType::Transform && !f.xf_copy) + undo = xf_compose(f.xf_translate, f.xf_axis, f.xf_pivot, f.xf_angle_deg).inverse(); + } + m_body_xform[b] = want * undo * m_xf_prev_base; + feed_bodies(); +} + +// Hand a previewed body back to the pose it had before the card touched it. Every exit from the +// Transform card passes through here, so a preview can never survive into the committed document. +void DesignPanel::xf_clear_preview() +{ + if (m_xf_prev_body < 0) return; + sync_body_xform(); + if (m_xf_prev_body < int(m_body_xform.size())) + m_body_xform[m_xf_prev_body] = m_xf_prev_base; + m_xf_prev_body = -1; + feed_bodies(); +} + +void DesignPanel::on_add_transform() +{ + xf_clear_preview(); // the feature performs this motion parametrically; the preview must go + // The gizmo baked its drag into the display transform so the body followed the cursor. + // The feature about to be created performs that same motion parametrically, so hand the + // body back to its pre-drag pose first or it moves twice. + if (m_xf_gizmo_body >= 0) { + sync_body_xform(); + if (m_xf_gizmo_body < int(m_body_xform.size())) + m_body_xform[m_xf_gizmo_body] = m_xf_gizmo_base; + if (m_viewport) m_viewport->clear_move_gizmo(); + feed_bodies(); // set_status_ok() re-feeds on success, but the recompute-ERROR path + // below does not — without this the body would keep showing the + // dragged pose after a Transform that failed to build. + m_xf_gizmo_body = -1; + m_move_body = -1; + } + if (m_doc.bodies.empty()) { + set_status(_L("Transform needs a body — add or import one first")); + return; + } + const int sel = m_xf_body->GetSelection(); + const int target = (sel != wxNOT_FOUND) ? sel : -1; + const Vec3d trans(m_xf_dx->GetValue(), m_xf_dy->GetValue(), m_xf_dz->GetValue()); + const int ax = m_xf_axis->GetSelection(); + const Vec3d axis = (ax == 0) ? Vec3d(1, 0, 0) : (ax == 1) ? Vec3d(0, 1, 0) : Vec3d(0, 0, 1); + const Vec3d pivot(m_xf_pivot_x->GetValue(), m_xf_pivot_y->GetValue(), m_xf_pivot_z->GetValue()); + m_feature_counter++; + m_doc.add_transform(target, trans, axis, pivot, m_xf_angle->GetValue(), m_xf_copy->GetValue(), + "Transform" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_mirror() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Mirror needs a body — add or import one first")); + return; + } + const int sel = m_mirror_body->GetSelection(); + const int target = (sel != wxNOT_FOUND) ? sel : -1; + const BooleanMode mode = m_mirror_keep->GetValue() ? BooleanMode::New : BooleanMode::Add; + m_feature_counter++; + m_doc.add_mirror(plane_from_choice(m_mirror_plane->GetSelection()), target, mode, + "Mirror" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_thicken() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Thicken needs a solid body — add or import one first")); + return; + } + if (m_sel_solid_face < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Pick a solid face to thicken first")); + m_status->Refresh(); + return; + } + const int sel = m_thicken_body->GetSelection(); + const int target = (sel != wxNOT_FOUND) ? sel : -1; + m_feature_counter++; + m_doc.add_thicken(target, m_sel_solid_face, m_thicken_thickness->GetValue(), + m_thicken_flip->GetValue(), "Thicken" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_rib() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Rib needs a solid body — add or import one first")); + return; + } + const int bsel = m_rib_body->GetSelection(); + const int target = (bsel != wxNOT_FOUND) ? bsel : -1; + const int ssel = m_rib_sketch->GetSelection(); + const int sketch_ref = (ssel != wxNOT_FOUND) + ? int(reinterpret_cast(m_rib_sketch->GetClientData(ssel))) : -1; + if (sketch_ref < 0) { + set_status(_L("Pick a sketch with an open line first")); + return; + } + m_feature_counter++; + m_doc.add_rib(sketch_ref, m_rib_entity->GetValue(), m_rib_thickness->GetValue(), + m_rib_depth->GetValue(), target, "Rib" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_project() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Project needs a body — add or import one first")); + return; + } + const int sel = m_proj_source_body->GetSelection(); + const int src_body = (sel != wxNOT_FOUND) ? sel : -1; + const int face = (m_sel_solid_face >= 0) ? m_sel_solid_face : -1; + m_feature_counter++; + m_doc.add_project_edges(src_body, {}, face, + plane_from_choice(m_proj_plane->GetSelection()), + "Project" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_delete_face() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Delete Face needs a body — add or import one first")); + return; + } + if (m_del_faces.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Add at least one face to delete first")); + m_status->Refresh(); + return; + } + const int sel = m_del_face_body->GetSelection(); + const int target = (sel != wxNOT_FOUND) ? sel : -1; + m_feature_counter++; + m_doc.add_delete_face(target, m_del_faces, "DeleteFace" + std::to_string(m_feature_counter)); + m_del_faces.clear(); // consumed; fresh state for the next use + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_helix() +{ + m_feature_counter++; + m_doc.add_helix(plane_from_choice(m_helix_plane->GetSelection()), + m_helix_radius->GetValue(), m_helix_pitch->GetValue(), + m_helix_height->GetValue(), m_helix_left_handed->GetValue(), + m_helix_taper->GetValue(), "Helix" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_mate() +{ + const int sel_a = m_mate_cs_a->GetSelection(); + const int sel_b = m_mate_cs_b->GetSelection(); + if (sel_a == wxNOT_FOUND || sel_b == wxNOT_FOUND) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate needs two CoordSys features — create them first")); + m_status->Refresh(); + return; + } + const int cs_a = int(reinterpret_cast(m_mate_cs_a->GetClientData(sel_a))); + const int cs_b = int(reinterpret_cast(m_mate_cs_b->GetClientData(sel_b))); + if (cs_a == cs_b) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate: CS A and CS B must be different CoordSys features")); + m_status->Refresh(); + return; + } + m_feature_counter++; + int idx = m_doc.add_mate(m_mate_kind->GetSelection(), cs_a, cs_b, + m_mate_offset->GetValue(), m_mate_angle->GetValue(), + m_mate_flip->GetValue(), + "Mate" + std::to_string(m_feature_counter)); + if (idx < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate rejected")); + m_status->Refresh(); + return; + } + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_check_interference() +{ + if (m_doc.bodies.size() < 2) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("No interference — need at least two solid bodies to check")); + m_status->Refresh(); + return; + } + const auto pairs = m_doc.check_interference(); + if (pairs.empty()) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("No interference found")); + m_status->Refresh(); + return; + } + double worst = 0; + for (const auto& p : pairs) + if (p.volume > worst) worst = p.volume; + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("%zu interference pairs, worst %.2f mm³"), + pairs.size(), worst)); + m_status->Refresh(); + wxString msg = _L("Interference pairs:\n\n"); + for (const auto& p : pairs) { + // 1-based, like every other body label in this panel and in the parts tree: + // reporting "Body 1" for what the tree calls "Body 2" is worse than no name. + wxString na = wxString::Format(_L("Body %d"), p.body_a + 1); + wxString nb = wxString::Format(_L("Body %d"), p.body_b + 1); + if (p.body_a >= 0 && p.body_a < int(m_doc.bodies.size()) && !m_doc.bodies[p.body_a].name.empty()) + na = wxString::FromUTF8(m_doc.bodies[p.body_a].name); + if (p.body_b >= 0 && p.body_b < int(m_doc.bodies.size()) && !m_doc.bodies[p.body_b].name.empty()) + nb = wxString::FromUTF8(m_doc.bodies[p.body_b].name); + msg += wxString::Format("%s <-> %s: %.4f mm³\n", na, nb, p.volume); + } + wxMessageBox(msg, _L("Interference"), wxOK, this); +} + +// Mass properties of the selected solid. A report, not a feature: it never checkpoints, never +// recomputes and never opens a card, which is why it sits beside the interference check rather +// than in the on_add_* family. The caller only reaches us with m_sel_solid_body in range. +void DesignPanel::on_mass_properties() +{ + // This bounds check is not defensive padding — it is what makes the verb safe to fire from + // the socket, which has no offer menu to grey the row out. The menu-only route never reached + // here with nothing selected; run_verb does. Nothing selected is not an error, hence the + // neutral colour, not the error red. + if (m_sel_solid_body < 0 || m_sel_solid_body >= int(m_doc.bodies.size())) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Select a solid body first — its mass properties are what is reported")); + m_status->Refresh(); + return; + } + const auto mp = GeometryEngine::mass_properties(m_doc.bodies[m_sel_solid_body].shape); + if (!mp.valid) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mass properties could not be computed for this body")); + m_status->Refresh(); + return; + } + // 1-based, and the body's own name when it has one — the same wording the parts list uses. + wxString name = wxString::Format(_L("Body %d"), m_sel_solid_body + 1); + if (!m_doc.bodies[m_sel_solid_body].name.empty()) + name = wxString::FromUTF8(m_doc.bodies[m_sel_solid_body].name); + if (!mp.is_solid) { + // Sheet body: quoting a volume here would be inventing material that is not there. + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("%s: sheet body — %.2f cm² of surface, no volume"), + name, mp.surface_area / 100.0)); + m_status->Refresh(); + wxMessageBox(wxString::Format(_L("%s\n\nSheet body (open shell)\nSurface area: %.2f cm²\n\n" + "A sheet encloses no material, so it has no volume. " + "Thicken it into a solid to get one."), + name, mp.surface_area / 100.0), + _L("Mass properties"), wxOK, this); + return; + } + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("%s: %.3f cm³, %.2f cm²"), + name, mp.volume / 1000.0, mp.surface_area / 100.0)); + m_status->Refresh(); + wxMessageBox(wxString::Format(_L("%s\n\nVolume: %.3f cm³\nSurface area: %.2f cm²"), + name, mp.volume / 1000.0, mp.surface_area / 100.0), + _L("Mass properties"), wxOK, this); +} + +// The rows are only the SHEET bodies, so a row index is NOT a body index — with a solid at 0 +// and a sheet at 1 the single row is row 0 but body 1. Every caller must therefore read the +// real body index out of the client data (3-arg Append; the 2-arg form takes a bitmap), never +// GetSelection(). Getting this wrong targets a solid and the kernel rejects it with +// "target is not a sheet", which reads as a kernel bug rather than a picker bug. +void DesignPanel::populate_sheet_body_choices(ComboBox* c) const +{ + if (!c) return; + const int keep = c->GetSelection(); + c->Clear(); + for (size_t i = 0; i < m_doc.bodies.size(); ++i) { + if (!CadDocument::is_sheet_shape(m_doc.bodies[i].shape)) continue; + const std::string& n = m_doc.bodies[i].name; + combo_append_index(c, n.empty() ? wxString::Format(_L("Body %zu"), i + 1) + : wxString::FromUTF8(n), int(i)); + } + if (c->GetCount() > 0) + c->SetSelection(std::min(std::max(keep, 0), int(c->GetCount()) - 1)); +} + +// Real body index behind the current row of a sheet-filtered picker, or -1. +int DesignPanel::sheet_choice_body(ComboBox* c) +{ + if (!c) return -1; + const int sel = c->GetSelection(); + if (sel == wxNOT_FOUND) return -1; + return int(reinterpret_cast(c->GetClientData(sel))); +} + +// Select the row whose body index is `body`, so a re-edit restores the stored target rather +// than treating it as a row number. +void DesignPanel::select_sheet_choice(ComboBox* c, int body) +{ + if (!c) return; + for (unsigned i = 0; i < c->GetCount(); ++i) { + if (int(reinterpret_cast(c->GetClientData(i))) == body) { c->SetSelection(int(i)); return; } + } + if (c->GetCount() > 0) c->SetSelection(0); +} + +void DesignPanel::on_add_pattern() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Pattern needs a solid body — add or import one first")); + return; + } + const bool circular = (m_pattern_type->GetSelection() == 1); + const int target = (m_sel_solid_body >= 0 && m_sel_solid_body < int(m_doc.bodies.size())) + ? m_sel_solid_body : -1; + m_feature_counter++; + m_doc.add_pattern(circular, int(m_pattern_count->GetValue()), + m_pattern_spacing->GetValue(), m_pattern_dir->GetSelection(), + m_pattern_angle->GetValue(), target, + "Pattern" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +int DesignPanel::selected_body_default() const +{ + const int n = int(m_doc.bodies.size()); + if (n <= 0) return 0; + return (m_sel_solid_body >= 0 && m_sel_solid_body < n) ? m_sel_solid_body : 0; +} + +void DesignPanel::populate_body_choices(int as_of_feature) +{ + // Re-editing a Boolean: list the bodies as they existed just before it ran, so a tool body + // it consumed still shows and the saved target/tool selections round-trip. Replay a copy of + // the recipe truncated to [0, as_of_feature). Fall back to the live bodies if the replay is + // degenerate (e.g. fewer than the saved refs need). + const std::vector* src = &m_doc.bodies; + std::vector as_of; + if (as_of_feature >= 0 && as_of_feature <= int(m_doc.features.size())) { + CadDocument tmp = m_doc; + tmp.features.resize(as_of_feature); + if (tmp.recompute() && !tmp.bodies.empty()) { as_of = tmp.bodies; src = &as_of; } + } + auto fill = [&](ComboBox* c, int def) { + if (!c) return; + c->Clear(); + for (size_t i = 0; i < src->size(); ++i) { + const std::string& n = (*src)[i].name; + c->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (c->GetCount() > 0) + c->SetSelection(std::min(def, int(c->GetCount()) - 1)); // selection index == body index + }; + const int picked = selected_body_default(); + fill(m_bool_target, picked); + // …and the tool body is a DIFFERENT one: defaulting both to the same body is a no-op the + // user has to notice and undo. Fall back to the neighbour of whatever was picked. + fill(m_bool_tool, picked == 0 ? 1 : 0); + fill(m_cut_target, picked); +} + +void DesignPanel::fill_body_choice(ComboBox* c, int as_of_feature, int want) +{ + if (!c) return; + // Same replay as populate_body_choices, for the single-combo tools. A stored target_body + // indexes the body list AS IT WAS just before that feature ran; listing the final bodies + // instead makes the saved index select whatever now sits at that position, which is a + // different body as soon as a later Cut splits one (indices shift up) or a later Boolean + // consumes its tool body (indices shift down). + const std::vector* src = &m_doc.bodies; + std::vector as_of; + if (as_of_feature >= 0 && as_of_feature <= int(m_doc.features.size())) { + CadDocument tmp = m_doc; + tmp.features.resize(as_of_feature); + if (tmp.recompute() && !tmp.bodies.empty()) { as_of = tmp.bodies; src = &as_of; } + } + c->Clear(); + for (size_t i = 0; i < src->size(); ++i) { + const std::string& n = (*src)[i].name; + c->Append(n.empty() ? wxString::Format(_L("Body %zu"), i + 1) : wxString::FromUTF8(n)); + } + if (want >= 0 && want < int(c->GetCount())) c->SetSelection(want); + else if (c->GetCount() > 0) c->SetSelection(0); +} + +void DesignPanel::on_add_boolean() +{ + if (m_doc.bodies.size() < 2) { + set_status(_L("Boolean needs two solid bodies — add or import a second one")); + return; + } + const int sel = m_bool_op->GetSelection(); + const BooleanMode op = (sel == 1) ? BooleanMode::Cut + : (sel == 2) ? BooleanMode::Intersect + : BooleanMode::Add; // 0 = Union + m_feature_counter++; + m_doc.add_boolean(op, m_bool_target->GetSelection(), m_bool_tool->GetSelection(), + m_bool_keep->GetValue(), m_bool_tol->GetValue(), -1, -1, + "Boolean" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::on_add_cut() +{ + if (m_doc.bodies.empty()) { + set_status(_L("Cut needs a solid body — add or import one first")); + return; + } + m_feature_counter++; + m_doc.add_cut(plane_from_choice(m_cut_plane->GetSelection()), m_cut_offset->GetValue(), + /*flip*/ false, /*keep_upper*/ true, /*keep_lower*/ true, + m_cut_target->GetSelection(), "Cut" + std::to_string(m_feature_counter)); + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); +} + +void DesignPanel::populate_plane_choices(ComboBox* c) const +{ + if (!c) return; + const int keep = c->GetSelection(); + c->Clear(); + c->Append(_L("XY")); c->Append(_L("XZ")); c->Append(_L("YZ")); + for (const auto& dp : m_doc.resolve_datum_planes()) + c->Append(wxString::FromUTF8(dp.first)); + c->SetSelection((keep >= 0 && keep < int(c->GetCount())) ? keep : 0); +} + +wxString DesignPanel::ref_plane_name(int row) const +{ + if (row == 1) return "XZ"; + if (row == 2) return "YZ"; + if (row >= 3) { + const auto datums = m_doc.resolve_datum_planes(); + const int di = row - 3; + if (di < int(datums.size())) return wxString::FromUTF8(datums[di].first); + } + return "XY"; +} + +SketchPlane DesignPanel::plane_from_choice(int row) const +{ + if (row < 3) { // 0=XY,1=XZ,2=YZ through the modeling origin + SketchPlane p = plane_from_index(row); + p.origin += m_doc.modeling_origin; + return p; + } + // Datums are already in world coords (resolve_datum_planes applied the origin to their base). + auto datums = m_doc.resolve_datum_planes(); + const int di = row - 3; + if (di >= 0 && di < int(datums.size())) return datums[di].second; + SketchPlane p = SketchPlane::XY(); p.origin += m_doc.modeling_origin; return p; +} + +// A sketch goes where the user pointed. A planar face picked in the viewport wins outright; only +// when nothing is picked do we fall back to the reference plane, which itself is normally set by +// clicking one of the ghost planes in 3D (on_datum_base_picked) rather than by opening the combo. +// Before this, a picked face was ignored and the only way onto it was to build a Coincident datum +// plane first and then find it in a dropdown — three steps and a junk feature in the tree for the +// most common gesture in solid modelling. 3a2. +SketchPlane DesignPanel::sketch_plane_from_selection(wxString& what) const +{ + SketchPlane p; + // An explicitly face-level selection first, then the face merely CLICKED ON while the whole + // body was selected. The second case is the common one: one click on a face is what a user + // means by "select this face", and requiring the cycle's second click to make it count is the + // whole reason this looked unfixed. + const int fb = (m_sel_solid_face >= 0 && m_sel_solid_body >= 0) ? m_sel_solid_body : m_pick_face_body; + const int fi = (m_sel_solid_face >= 0 && m_sel_solid_body >= 0) ? m_sel_solid_face : m_pick_face; + if (fb >= 0 && fi >= 0 && m_doc.plane_of_face(fb, fi, p)) { + what = (m_doc.bodies.size() > 1) + ? wxString::Format(_L("the picked face of Body %d"), fb + 1) + : _L("the picked face"); + return p; + } + what = ref_plane_name(m_ref_plane); + return plane_from_choice(m_ref_plane); +} + +// Is there a sketch target the USER chose, and what is it called? Distinct from +// sketch_plane_from_selection, which always answers because it falls back to m_ref_plane — +// a caller that wants to say "sketching on X" needs to know whether there is anything to fall +// back FROM, so it can ask for a plane instead of claiming one the user never picked. +bool DesignPanel::sketch_plane_target(wxString& what) const +{ + const int fb = (m_sel_solid_face >= 0 && m_sel_solid_body >= 0) ? m_sel_solid_body : m_pick_face_body; + const int fi = (m_sel_solid_face >= 0 && m_sel_solid_body >= 0) ? m_sel_solid_face : m_pick_face; + SketchPlane p; + if (fb >= 0 && fi >= 0 && m_doc.plane_of_face(fb, fi, p)) { + what = (m_doc.bodies.size() > 1) + ? wxString::Format(_L("the picked face of Body %d"), fb + 1) + : _L("the picked face"); + return true; + } + if (m_plane_picked) { what = ref_plane_name(m_ref_plane); return true; } + return false; +} + +// --------------------------------------------------------------------------------------------- +// The object-driven offer (charter §4.1). Right-click the geometry and get a vertical list in the +// ratified row order, with the verbs that do not apply DISABLED IN PLACE carrying their reason. +// The rows come from DesignOffer.hpp, generated from docs/ux/tool_atlas.json — the same file the +// mockups are drawn from, so a drawing and the product cannot drift apart. +// --------------------------------------------------------------------------------------------- + +bool DesignPanel::sketch_map_applies() const +{ + return m_ui_mode == UiMode::Sketch || (m_viewport && m_viewport->is_sketching()); +} + +// Which kind of thing is selected, as an OfferSel. Classified by the level the pick cycle has +// actually REACHED, so the menu describes what is highlighted — a header that names a face while +// the whole body is lit would be lying, and this menu's whole value is that it tells the truth +// about the selection. (Sketching on the face you merely clicked is unaffected: that path is +// sketch_plane_from_selection, which deliberately uses m_pick_face. 3a2.) +int DesignPanel::offer_selection_kind() const +{ + if (sketch_map_applies()) { + // Classify WHAT is selected in the sketch, rather than collapsing every sketch state to + // SkNone. The offer table has always described verbs for a selected line, arc, point or + // pair — Trim, Extend, Fillet, Chamfer, Offset, Mirror, the arrays, Move/Rotate/Scale, + // Constrain, Delete — but nothing ever RETURNED those kinds, so all thirteen were + // unreachable from the menu and the sketch-editing vocabulary did not exist in the one + // place this app tells users to look. A user comparing against Onshape reported exactly + // that about constraints (OrcaSlicer PR #15238). + const int n = m_viewport ? m_viewport->sketch_selection_count() : 0; + if (n >= 2) return int(OfferSel::Sk2Ent); + if (n == 1) { + SketchEntity::Type t = SketchEntity::Type::Line; + if (m_viewport && m_viewport->sketch_first_selected_type(t)) { + switch (t) { + case SketchEntity::Type::Line: return int(OfferSel::SkLine); + case SketchEntity::Type::Point: return int(OfferSel::SkPoint); + // Arc, Circle, Ellipse, EllipseArc, BSpline all take the curve vocabulary. + default: return int(OfferSel::SkArc); + } + } + } + return int(OfferSel::SkNone); + } + + const int nb = int(m_doc.bodies.size()); + if (m_sel_solid_vertex && m_sel_solid_body >= 0 && m_sel_solid_body < nb) + return int(OfferSel::Vertex); + if (m_sel_solid_edge >= 0 && m_sel_solid_body >= 0 && m_sel_solid_body < nb) { + const TopoDS_Edge e = GeometryEngine::edge_by_index(m_doc.bodies[m_sel_solid_body].shape, + m_sel_solid_edge); + return int(GeometryEngine::circle_of_edge(e).ok ? OfferSel::EdgeCirc : OfferSel::EdgeStr); + } + if (m_sel_solid_face >= 0 && m_sel_solid_body >= 0 && m_sel_solid_body < nb) { + SketchPlane p; + if (m_doc.plane_of_face(m_sel_solid_body, m_sel_solid_face, p)) + return int(OfferSel::FacePlanar); + const TopoDS_Face f = GeometryEngine::face_by_index(m_doc.bodies[m_sel_solid_body].shape, + m_sel_solid_face); + return int(GeometryEngine::cylinder_of_face(f).ok ? OfferSel::FaceCyl : OfferSel::FaceOther); + } + if (m_sel_sketch_region >= 0) + return int(OfferSel::SkLoop); + if (m_sel_solid_body >= 0 && m_sel_solid_body < nb) + return int(CadDocument::is_sheet_shape(m_doc.bodies[m_sel_solid_body].shape) + ? OfferSel::BodySheet : OfferSel::BodySolid); + return int(OfferSel::None); +} + +// Route a row to the code that already implements the verb. Nothing here re-implements a tool: +// the offer is a second door onto the same room, which is what keeps the toolbar, the shortcuts +// and the menu from drifting into three behaviours. +void DesignPanel::run_offer_action(const char* action) +{ + if (!action || !*action) + return; + const std::string a(action); + if (a.rfind("key:", 0) == 0) { + const std::string k = a.substr(4); + if (k.size() >= 3 && k[0] == 'S' && k[1] == '+') { // "S+E" -> Shift+E, model mode + auto it = m_keys_feature.find(int(k[2]) | SC_SHIFT); + if (it != m_keys_feature.end() && it->second) it->second(); + } else if (!k.empty()) { // "L" -> sketch-mode letter + auto it = m_keys_sketch.find(int(k[0])); + if (it != m_keys_sketch.end() && it->second) it->second(); + } + return; + } + auto it = m_verb_actions.find(a); + if (it != m_verb_actions.end() && it->second) + it->second(); +} + +// Look a verb up by its offer id and dispatch it — the "run_verb" half of the MCP offer surface. +// Unknown ids and rows whose action string is null (kernel support, no GUI route yet) return +// false without touching anything, so the caller can tell "no such verb" from "not wired yet". +bool DesignPanel::mcp_run_verb(const char* verb_id) +{ + if (!verb_id) return false; + for (int i = 0; i < kOfferVerbCount; ++i) { + const OfferVerb& v = kOfferVerbs[i]; + if (std::string(v.id) == verb_id) { + if (v.action == nullptr) return false; + run_offer_action(v.action); + return true; + } + } + return false; +} + +wxPoint DesignPanel::offer_anchor() const +{ + const wxPoint mouse = wxGetMousePosition(); + if (!m_viewport) + return mouse; + const wxRect r = m_viewport->GetScreenRect(); + if (r.Contains(mouse)) + return mouse; + return wxPoint(r.x + r.width / 2, r.y + r.height / 2); +} + +// Append a verb row carrying the same glyph its toolbar button shows. The icon name comes from +// the atlas, so a verb and its icon are declared in one place; a null or unknown name leaves +// the row text-only rather than drawing a blank square. +// +// THE BITMAP MUST BE SET BEFORE Append(). wxGTK builds the GtkMenuItem inside Append and reads +// GetBitmap() right there (gtk/menu.cpp) — it makes a gtk_image_menu_item only if a bitmap is +// already present, and a plain one otherwise. Setting it on the item Append() returns is too +// late and silently does nothing, which is exactly how the first attempt failed. This is why +// Orca's own append_menu_item() constructs, sets, then appends. +// One place that writes the status line, so every hint wraps instead of clipping at the panel +// edge. wxStaticText::Wrap() is destructive, which is fine here: the label is replaced whole +// each time, never appended to. +void DesignPanel::set_status(const wxString& text) +{ + if (m_status == nullptr) return; + m_status->SetLabel(text); // the ONE place that may call SetLabel directly + // m_status is HIDDEN and kept only as the owner of the text and its colour — every caller + // sets the colour on it just before calling here, so this stays the one place that knows + // both. What the user reads is drawn along the BASE OF THE VIEWPORT: in the panel the line + // was clipped at ~73 characters with no warning and no wrap (Wrap() never took effect — + // 8cc), which silently length-limited every hint in the tab. The viewport's bottom + // margin has the whole window width, so a sentence can be a sentence. + if (m_viewport != nullptr) { + // wxNullColour means "no opinion", and the dark default text colour is nearly invisible + // on the dark HUD; only a colour a caller actually chose (the error red, the plane-pick + // green) is carried over. Compared against the colour the label was CREATED with — + // comparing against the parent's foreground instead reported "chosen" for every line, + // and the neutral text came out the panel's grey. + const wxColour fg = m_status->GetForegroundColour(); + m_viewport->set_status_text(text, fg != m_status_default_fg ? fg + : wxColour(0xDD, 0xE1, 0xE6)); + } +} + + +// The sentence for the step the armed sketch tool is on (1c0c). One table, so a tool's +// gesture is described in one place and the description cannot drift from the code that reads the +// clicks: the step counts here are the ones DesignSketchTool::render previews and on_mouse +// consumes. `step` = anchors already placed (edit-ops: 0 none, 1 first pick down, 2 ready to +// apply); `picks` = the size of the set the gesture accumulates. +// +// It is deliberately explicit about the gesture that ENDS each tool, because none of them is +// discoverable: a click on empty space applies an edit-op or a transform, right-click cancels it, +// and Esc downgrades an armed tool to Select before it ever exits the sketch. +static wxString sketch_step_prompt(DesignSketchTool::Mode m, int step, int picks) +{ + using Mode = DesignSketchTool::Mode; + auto pick_more = [](const wxString& lead, int n) { + return n <= 0 ? lead + : lead + wxString::Format(_L(" · %d picked"), n); + }; + switch (m) { + case Mode::Select: + return picks > 0 + ? wxString::Format(_L("%d selected · Del removes them · Shift-click adds · " + "double-click takes the whole loop"), picks) + : _L("Select — click an entity to pick it · drag an endpoint or centre to move it · " + "Shift-click adds · Del removes"); + case Mode::Constrain: + return picks > 0 + ? wxString::Format(_L("%d picked · now choose a constraint (Horizontal, Parallel, " + "Tangent, Equal…)"), picks) + : _L("Constrain — click one or two entities, then choose a constraint"); + case Mode::Dimension: + return step == 0 ? _L("Dimension — click an entity, or the first of two points") + : _L("Dimension — click the second point"); + case Mode::Line: + return step == 0 ? _L("Line — click the start point") + : _L("Line — click the end point, or type the length"); + case Mode::Polyline: + return step == 0 ? _L("Polyline — click the first point") + : pick_more(_L("Polyline — click the next point · click the start point " + "to close it · right-click to end the chain"), step); + case Mode::CornerRect: + return step == 0 ? _L("Rectangle — click one corner") + : _L("Rectangle — click the opposite corner"); + case Mode::CenterRect: + return step == 0 ? _L("Centre rectangle — click the centre") + : _L("Centre rectangle — click a corner"); + case Mode::ObliqueRect: + return step == 0 ? _L("Oblique rectangle — click the start of the base edge") + : step == 1 ? _L("Oblique rectangle — click the end of the base edge (this sets the angle)") + : _L("Oblique rectangle — click to set the width"); + case Mode::RoundedRect: + return step == 0 ? _L("Rounded rectangle — click one corner") + : step == 1 ? _L("Rounded rectangle — click the opposite corner") + : _L("Rounded rectangle — click to set the corner radius"); + case Mode::CenterCircle: + return step == 0 ? _L("Circle — click the centre") + : _L("Circle — click to set the radius, or type it"); + case Mode::TwoPointCircle: + return step == 0 ? _L("Circle (2 points) — click one end of the diameter") + : _L("Circle (2 points) — click the other end of the diameter"); + case Mode::ThreePointCircle: + return step == 0 ? _L("Circle (3 points) — click the first point on the circle") + : step == 1 ? _L("Circle (3 points) — click the second point") + : _L("Circle (3 points) — click the third point"); + case Mode::ThreePointArc: + return step == 0 ? _L("Arc — click the start point") + : step == 1 ? _L("Arc — click the end point") + : _L("Arc — click a point the arc passes through"); + case Mode::TangentArc: + return step == 0 ? _L("Tangent arc — click the endpoint it leaves from") + : _L("Tangent arc — click its far end"); + case Mode::CenterArc: + return step == 0 ? _L("Centre arc — click the centre") + : step == 1 ? _L("Centre arc — click the start point (this sets the radius)") + : _L("Centre arc — click the end point"); + case Mode::Slot: + return step == 0 ? _L("Slot — click one end of the centreline") + : step == 1 ? _L("Slot — click the other end of the centreline") + : _L("Slot — click to set the width"); + case Mode::ArcSlot: + return step == 0 ? _L("Arc slot — click the centre the slot curves about") + : step == 1 ? _L("Arc slot — click the start of the centreline (this sets the radius)") + : step == 2 ? _L("Arc slot — click the end of the centreline") + : _L("Arc slot — click to set the width"); + case Mode::Polygon: + return step == 0 ? _L("Polygon — click the centre") + : _L("Polygon — click a vertex (this sets size and orientation)"); + case Mode::Ellipse: + return step == 0 ? _L("Ellipse — click the centre") + : step == 1 ? _L("Ellipse — click the end of the major axis") + : _L("Ellipse — click a point on the minor axis"); + case Mode::EllipseArc: + return step == 0 ? _L("Elliptical arc — click the centre") + : step == 1 ? _L("Elliptical arc — click the end of the major axis") + : step == 2 ? _L("Elliptical arc — click a point on the minor axis") + : step == 3 ? _L("Elliptical arc — click where the arc starts") + : _L("Elliptical arc — click where the arc ends"); + case Mode::BSpline: + return step == 0 ? _L("Spline — click the first control point") + : pick_more(_L("Spline — click the next control point · right-click to " + "finish the curve"), step); + case Mode::Point: + return _L("Point — click to place one; the tool stays armed for more"); + case Mode::Trim: + return _L("Trim — click a segment where it crosses another entity · right-click to exit"); + case Mode::Extend: + return _L("Extend — click a line or arc to grow it out to the nearest entity · " + "right-click to exit"); + case Mode::Fillet: + return step == 0 ? _L("Fillet — click the first of two lines that meet") + : step == 1 ? _L("Fillet — click the second line") + : _L("Fillet — drag the arrow, or click the number to type the radius · " + "click empty space to apply · right-click cancels"); + case Mode::Chamfer: + return step == 0 ? _L("Chamfer — click the first of two lines that meet") + : step == 1 ? _L("Chamfer — click the second line") + : _L("Chamfer — drag the arrow, or click the number to type the setback · " + "click empty space to apply · right-click cancels"); + case Mode::Offset: + return step == 0 ? _L("Offset — click the entity to offset") + : _L("Offset — drag the arrow to either side, or click the number to type " + "the distance · click empty space to apply · right-click cancels"); + case Mode::Mirror: + // The two-phase pick is the one gesture users reported as unguided: nothing said the + // AXIS comes first, and nothing said an empty click is what applies it. + return step == 0 + ? _L("Mirror — first click the LINE to mirror about (a construction line works)") + : picks == 0 + ? _L("Mirror — axis set · now click the entities to mirror · right-click cancels") + : wxString::Format(_L("Mirror — axis set · %d to mirror · click another to add or " + "remove it · click empty space to apply"), picks); + case Mode::Move: + return step == 0 ? _L("Move — click the entities to move") + : pick_more(_L("Move — drag the handle, or click the number to type the " + "distance · click empty space to apply"), picks); + case Mode::Rotate: + return step == 0 ? _L("Rotate — click the entities to rotate") + : pick_more(_L("Rotate — drag the handle, or click the number to type the " + "angle · click empty space to apply"), picks); + case Mode::Scale: + return step == 0 ? _L("Scale — click the entities to scale") + : pick_more(_L("Scale — drag the handle, or click the number to type the " + "factor · click empty space to apply"), picks); + case Mode::Array: + return step == 0 ? _L("Array — click the entities to repeat") + : pick_more(_L("Array — drag the handle to set the step, click the count to " + "type it · click empty space to apply"), picks); + case Mode::PolarArray: + return step == 0 ? _L("Polar array — click the entities to repeat") + : pick_more(_L("Polar array — drag the handle to set the sweep, click the " + "count to type it · click empty space to apply"), picks); + case Mode::TransformArt: + return _L("Drag a corner to scale, the centre to move · right-click when done"); + } + return wxString(); +} + +void DesignPanel::on_sketch_step(int mode, int step, int picks) +{ + wxString text = sketch_step_prompt(DesignSketchTool::Mode(mode), step, picks); + // Esc is layered (DesignSketchTool::request_exit): it drops the anchors down, then downgrades + // the armed tool to Select, and only then leaves the sketch. Nothing in the UI said so, so + // the route back to selecting existing geometry was invisible. Said once, on the step where + // the gesture has not started yet, so it does not crowd the instruction that matters. + if (step == 0 && picks == 0 && DesignSketchTool::Mode(mode) != DesignSketchTool::Mode::Select + && !text.IsEmpty()) + text += _L(" · Esc goes back to Select"); + // Badges are clickable and nothing said so — a glyph reads as decoration until something + // tells you it is a target. Only in Select mode (the only mode where the click is wired) and + // only once a constraint exists, so it never advertises a badge that is not on screen. + if (DesignSketchTool::Mode(mode) == DesignSketchTool::Mode::Select && m_viewport != nullptr && + m_viewport->sketch_constraint_count() > 0 && !text.IsEmpty()) + text += _L(" · click a constraint badge to remove it"); + m_sketch_step = text; + if (text.IsEmpty() || m_status == nullptr) return; + m_status->SetForegroundColour(wxNullColour); + set_status(text); + m_status->Refresh(); +} + +wxMenuItem* DesignPanel::append_offer_item(wxMenu* menu, int id, const wxString& text, + const OfferVerb& v) +{ + auto* item = new wxMenuItem(menu, id, text); + if (v.icon != nullptr && *v.icon != '\0') { + const wxBitmap bmp = create_scaled_bitmap(v.icon, this, 16); + if (bmp.IsOk()) + item->SetBitmap(bmp); + } + menu->Append(item); + return item; +} + +// Diagnostic only: what the offer is about to show, line per row, on stderr. Costs one getenv +// per menu when off. The ladder that drives right-click needs to assert the ROW SET, and the only +// honest source for that is the loop that builds the rows. +static void offer_trace(const char* fmt, ...) +{ + static const bool on = std::getenv("ORCA_CAD_KEYTRACE") != nullptr; + if (!on) return; + va_list ap; + va_start(ap, fmt); + fprintf(stderr, "[OFFER] "); + vfprintf(stderr, fmt, ap); + fprintf(stderr, "\n"); + va_end(ap); + fflush(stderr); +} + +void DesignPanel::show_offer_menu(const wxPoint& screen_pos) +{ + const int kind = offer_selection_kind(); + const uint32_t bit = offer_bit(OfferSel(kind)); + // Which verb MAP applies is a question about the MODE, not about whether a session is + // running — the same distinction the keyboard already had to learn (0ud). Gated on + // is_sketching() the offer opened on entering a sketch showing the FEATURE rows, every one + // of them refusing the sketch selection, so it read as a menu of nine dead entries. + const bool sketching = sketch_map_applies(); + // The offer ladder reads THIS, not the pixels: the trace is emitted from the same loop that + // builds the menu, so it cannot drift from what the user is shown. Gated on the existing + // ORCA_CAD_KEYTRACE so a rig run needs one env var, not two. . + offer_trace("open kind=%d sketching=%d bodies=%d", kind, sketching ? 1 : 0, + int(m_doc.bodies.size())); + + const int bodies = int(m_doc.bodies.size()); + int sketches = 0; + for (const auto& f : m_doc.features) + if (f.type == CadFeatureType::Sketch) ++sketches; + bool sheet = false; + for (const auto& b : m_doc.bodies) + if (CadDocument::is_sheet_shape(b.shape)) { sheet = true; break; } + + auto applies = [&](const OfferVerb& v) { + return (v.accepts & bit) && v.need_bodies <= bodies && v.need_sketches <= sketches + && (!v.need_sheet || sheet); + }; + // Names and reasons live in the generated table as plain literals; they are the same strings + // the toolbar already ships, so the catalogue already carries their translations. + // Scope the lookup to the APPLICATION catalog. A bare wxGetTranslation() searches every + // loaded catalog, wxWidgets' own wxstd included — so on a non-English system the two row + // names that happen to be wx standard strings came back translated while the other six, + // which wx does not know, stayed English. On an Italian desktop the offer read + // "Create / Add material / Rimuovi / Fillet / chamfer / draft / Repeat / Transform / + // Reference / Modify": one menu, two languages, and not because anything was mistranslated. + // The same trap is waiting for any locale — Supprimer, Löschen, Eliminar. Naming the domain + // means these strings are translated by OUR catalogue or not at all, which is consistent + // either way. + auto tr = [](const char* s) { + return wxGetTranslation(wxString::FromUTF8(s), SLIC3R_APP_KEY); + }; + auto label = [&](const OfferVerb& v) { + wxString s = tr(v.name); + if (v.key && *v.key) s += "\t" + wxString::FromUTF8(v.key); + return s; + }; + + wxMenu menu; + std::vector bound; // menu id offset -> verb + const int base = wxID_HIGHEST + 4200; + + for (int row = 0; row < kOfferRowCount; ++row) { + std::vector live, family; + for (int i = 0; i < kOfferVerbCount; ++i) { + const OfferVerb& v = kOfferVerbs[i]; + if (v.row != row || v.sketch_mode != sketching) continue; + family.push_back(&v); + if (applies(v)) live.push_back(&v); + } + if (family.empty()) + continue; // no verb of this family in this mode + const wxString fam = tr(kOfferRowNames[row]); + + if (live.empty()) { + // DISABLED IN PLACE, with the reason. This is the row that makes the list worth + // having: a control that cannot be used still says what it is and what you would + // have to do first, in the product's own words (L7). + // + // The reason must be TRUE for the situation in front of the user. Taking the first + // refusal in the family printed "Transform needs a body — add or import one first" + // on a document that has a body, because the real obstacle was that nothing was + // selected. So: prefer the refusal of a verb that accepts THIS selection and fails + // only on document state — that message is about the actual blocker. If no verb in + // the family accepts this selection at all, the honest thing is to say so, or say + // nothing. + const char* why = nullptr; + for (const OfferVerb* v : family) + if ((v->accepts & bit) && v->refusal) { why = v->refusal; break; } + wxString s = fam; + if (why) + s += wxString::FromUTF8(" — ") + tr(why); + else if (OfferSel(kind) == OfferSel::None) + s += wxString::FromUTF8(" — ") + _L("select something first"); + offer_trace("row=%d %s DISABLED (%s)", row, kOfferRowNames[row], + why ? why : "no verb accepts this selection"); + menu.Append(base + int(bound.size()), s)->Enable(false); + bound.push_back(nullptr); + } else if (live.size() == 1) { + offer_trace("row=%d %s -> %s%s", row, kOfferRowNames[row], live[0]->id, + live[0]->action ? "" : " (no GUI route)"); + append_offer_item(&menu, base + int(bound.size()), label(*live[0]), *live[0]) + ->Enable(live[0]->action != nullptr); + bound.push_back(live[0]); + } else { + // Two levels, not one. A verb with a `family` joins a nested submenu of that name + // (Rectangle -> corner / centre / oblique / rounded); one without sits directly in + // the row. Families keep the order of their first member, so the row's layout is + // stable across selections — the whole point of a fixed address. + auto* sub = new wxMenu(); + std::vector> groups; // insertion-ordered + for (const OfferVerb* v : live) { + wxMenu* target = sub; + if (v->family && *v->family) { + auto it = std::find_if(groups.begin(), groups.end(), + [&](const auto& g) { return g.first == v->family; }); + if (it == groups.end()) { + auto* g = new wxMenu(); + groups.emplace_back(v->family, g); + sub->AppendSubMenu(g, tr(v->family)); + target = g; + } else { + target = it->second; + } + } + offer_trace("row=%d %s > %s%s%s%s", row, kOfferRowNames[row], + (v->family && *v->family) ? v->family : "", + (v->family && *v->family) ? " > " : "", v->id, + v->action ? "" : " (no GUI route)"); + append_offer_item(target, base + int(bound.size()), label(*v), *v) + ->Enable(v->action != nullptr); + bound.push_back(v); + } + menu.AppendSubMenu(sub, fam); + } + } + + // --- Mate palette section (lukg part B) --- + // Fed by CadDocument::mate_options() so the offer can never disagree with the kernel about + // which assembly mates a connector pair admits. Shown only when the document holds at least + // two ENABLED CoordSys features: below that the whole section would be one permanently dead + // row, which is noise rather than information. + // Set while a hovered mate row is showing its ghost, so the cleanup after PopupMenu can tell + // "I put that there" from "some other tool's preview was already on screen". + bool mate_ghost = false; + std::vector cs_features; + for (int i = 0; i < int(m_doc.features.size()); ++i) + if (m_doc.features[i].type == CadFeatureType::CoordSys && m_doc.features[i].enabled) + cs_features.push_back(i); + if (cs_features.size() >= 2) { + // Which two connectors the types would apply to. The Mate card's combos when it is open — + // so the offer and the card can never disagree about the pair — otherwise the first two + // enabled CoordSys features, which is a defensible default precisely because the header row + // below NAMES it. An offer that acts on an unnamed pair would be worse than no offer. + int cs_a = -1, cs_b = -1; + if (m_active == Tool::Mate && m_mate_cs_a && m_mate_cs_b + && m_mate_cs_a->GetSelection() != wxNOT_FOUND + && m_mate_cs_b->GetSelection() != wxNOT_FOUND) { + cs_a = int(reinterpret_cast(m_mate_cs_a->GetClientData(m_mate_cs_a->GetSelection()))); + cs_b = int(reinterpret_cast(m_mate_cs_b->GetClientData(m_mate_cs_b->GetSelection()))); + } + if (cs_a < 0 || cs_b < 0) { cs_a = cs_features[0]; cs_b = cs_features[1]; } + + // The generated verb rows own [base, base + bound.size()); kOfferVerbCount is 87, so a + // gap of 500 keeps this section's ids clear of that range and lets its own handler index + // by a distinct offset. + const int mate_base = base + 500; + + menu.AppendSeparator(); + // B is the connector on the body that MOVES (CadDocument.hpp:317), so B is the arrow's + // destination — "A first" invites the opposite guess. + const wxString name_a = wxString::FromUTF8(m_doc.features[cs_a].name); + const wxString name_b = wxString::FromUTF8(m_doc.features[cs_b].name); + menu.Append(mate_base, wxString::Format(_L("Mate: %s → %s"), name_a, name_b))->Enable(false); + + // A switch of literal _L() calls, not an array indexed by kind. _L is a gettext macro: + // the extractor scans the SOURCE for literals, so _L(table[i]) compiles fine and then + // silently ships five strings that are never in the catalogue and can never be + // translated. These names appear nowhere else in the tree, so the array version would + // have been their only occurrence. + auto mate_kind_name = [](int kind) -> wxString { + switch (kind) { + case 0: return _L("Fastened"); + case 1: return _L("Planar"); + case 2: return _L("Revolute"); + case 3: return _L("Slider"); + default: return _L("Cylindrical"); + } + }; + // Five rows, always, in kind order. Never reordered, never filtered — a menu that changes + // shape between invocations destroys the motor memory experts rely on. + const std::vector opts = m_doc.mate_options(cs_a, cs_b); + for (int i = 0; i < int(opts.size()); ++i) { + const CadDocument::MateOption& o = opts[i]; + wxString label = mate_kind_name(o.kind); + if (!o.viable) + label += wxString::FromUTF8(" — ") + wxString::FromUTF8(o.reason); + menu.Append(mate_base + 1 + i, label)->Enable(o.viable); + } + + // Hovering a row shows the RESULT, not a description of it (epic gap G3). preview() moves + // the body on a throwaway copy of the document, so nothing is written until the click — + // the "commit nothing until you choose" behaviour the palette was asked for. + auto drop_ghost = [this, &mate_ghost]() { + if (!mate_ghost) return; + m_viewport->clear_preview(); + m_viewport->set_body_hidden(false); + m_viewport->repaint_now(); + mate_ghost = false; + }; + menu.Bind(wxEVT_MENU_HIGHLIGHT, + [this, cs_a, cs_b, opts, &mate_ghost, drop_ghost](wxMenuEvent& e) { + const int i = e.GetMenuId() - (mate_base + 1); + // Off the palette (a verb row, the header, or nothing) — a stale ghost from the row + // you just left is worse than none, so it goes as soon as the cursor does. + if (i < 0 || i >= int(opts.size()) || !opts[i].viable) { drop_ghost(); return; } + std::string err; + mate_ghost = show_mate_ghost(opts[i].kind, cs_a, cs_b, 0.0, 0.0, false, err); + m_viewport->repaint_now(); // synchronous: the popup owns the loop, a queued repaint is never serviced + }); + + menu.Bind(wxEVT_MENU, [this, cs_a, cs_b, opts, drop_ghost](wxCommandEvent& e) { + const int i = e.GetId() - (mate_base + 1); + if (i < 0 || i >= int(opts.size()) || !opts[i].viable) return; + drop_ghost(); // the real bodies are about to become the ghost's pose + m_doc.checkpoint(); // undo boundary: committing a mate from the offer + int idx = m_doc.add_mate(opts[i].kind, cs_a, cs_b, 0.0, 0.0, false, + "Mate" + std::to_string(++m_feature_counter)); + if (idx < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate rejected")); + m_status->Refresh(); + return; + } + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + refresh_tree(); + }); + } + + // Hovering a row explains it. The offer is the only door to these tools now, so a bare + // name is not enough — and the hint arrives while you are still choosing. + // BOUND TO THE VERB ID RANGE, NOT THE WHOLE MENU. These two used to be unfiltered, and + // wxWidgets pushes dynamic entries to the FRONT of the handler list, so being bound LAST made + // them run FIRST for every id — including the mate rows at mate_base+1 (base+501) above. Both + // fall out of `bound`'s range there and return WITHOUT e.Skip(), which wx reads as "handled", + // so the mate handlers never ran: hovering a mate kind showed no ghost and left the previous + // status message on screen, and clicking one created nothing at all. The whole mate palette + // enumerated perfectly and fired nothing. Restricting the range keeps each half to its own ids + // regardless of bind order. + menu.Bind(wxEVT_MENU_HIGHLIGHT, [this, &bound](wxMenuEvent& e) { + const int i = e.GetMenuId() - base; + if (i < 0 || i >= int(bound.size()) || bound[i] == nullptr || bound[i]->hint == nullptr) + return; + m_status->SetForegroundColour(wxNullColour); + set_status(wxGetTranslation(wxString::FromUTF8(bound[i]->hint))); + m_status->Update(); // the popup owns the loop; without this the line repaints late + }, base, base + 499); // 499: the mate section starts at base + 500 (see mate_base) + menu.Bind(wxEVT_MENU, [this, &bound](wxCommandEvent& e) { + const int i = e.GetId() - base; + if (i >= 0 && i < int(bound.size()) && bound[i]) + run_offer_action(bound[i]->action); + }, base, base + 499); // 499: the mate section starts at base + 500 (see mate_base) + PopupMenu(&menu, ScreenToClient(screen_pos)); + // PopupMenu is modal, so by here the menu is gone and any command it raised has already run. + // A hover ghost that outlived the menu it belonged to would leave the committed bodies hidden + // behind a preview nothing can dismiss — bind nothing to the close event, just clean up here. + if (mate_ghost) { + m_viewport->clear_preview(); + m_viewport->set_body_hidden(false); + m_viewport->request_repaint(); + } +} + +void DesignPanel::apply_plane_refs(CadFeature& f) const +{ + f.plane_type = (PlaneType)m_plane_type->GetSelection(); + f.plane_face_body = m_pl_faceA_body; f.plane_face = m_pl_faceA; + f.plane_face2_body = m_pl_faceB_body; f.plane_face2 = m_pl_faceB; + f.plane_edge_body = m_pl_edgeA_body; f.plane_edge = m_pl_edgeA; + f.plane_edge2_body = m_pl_edgeB_body; f.plane_edge2 = m_pl_edgeB; + f.plane_u_size = m_plane_usize->GetValue(); + f.plane_v_size = m_plane_vsize->GetValue(); +} + +void DesignPanel::refresh_plane_labels() +{ + auto txt = [](int idx) { return idx >= 0 ? wxString::Format("#%d", idx) : wxString(_L("(none)")); }; + if (m_plane_faceA_lbl) m_plane_faceA_lbl->SetLabel(txt(m_pl_faceA)); + if (m_plane_faceB_lbl) m_plane_faceB_lbl->SetLabel(txt(m_pl_faceB)); + if (m_plane_edgeA_lbl) m_plane_edgeA_lbl->SetLabel(txt(m_pl_edgeA)); + if (m_plane_edgeB_lbl) m_plane_edgeB_lbl->SetLabel(txt(m_pl_edgeB)); +} + +void DesignPanel::reset_plane_refs() +{ + m_pl_faceA_body = m_pl_faceA = -1; m_pl_faceB_body = m_pl_faceB = -1; + m_pl_edgeA_body = m_pl_edgeA = -1; m_pl_edgeB_body = m_pl_edgeB = -1; + m_plane_pick = PlanePick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_plane_labels(); +} + +void DesignPanel::arm_plane_pick(PlanePick target) +{ + m_plane_pick = target; + // While a pick is armed, a click must CAPTURE the face under the cursor, never escalate to + // the whole body. Without this, clicking a face that already happens to be selected reads as + // a repeat pick, selects the body, and the capture is silently lost — the label stays + // "(none)" and the user has no idea why. The capture path below already restores the flag, + // and reset_plane_refs() restores it when the pick is abandoned; only the arm side was missing. + if (m_viewport) m_viewport->set_escalate_on_repick(false); + const bool face = (target == PlanePick::FaceA || target == PlanePick::FaceB); + m_status->SetForegroundColour(wxNullColour); + set_status(face ? _L("Click a solid FACE in the viewport") + : _L("Click a solid EDGE in the viewport")); + m_status->Refresh(); +} + +// --- Axis helpers --- + +void DesignPanel::apply_axis_refs(CadFeature& f) const +{ + f.axis_type = (AxisType)m_axis_type->GetSelection(); + f.axis_face = m_ax_face; + f.axis_edge = m_ax_edge; + f.axis_plane_a = m_axis_plane_a->GetSelection(); + f.axis_plane_b = m_axis_plane_b->GetSelection(); + f.axis_p1 = Vec3d(m_axis_p1x->GetValue(), m_axis_p1y->GetValue(), m_axis_p1z->GetValue()); + f.axis_p2 = Vec3d(m_axis_p2x->GetValue(), m_axis_p2y->GetValue(), m_axis_p2z->GetValue()); + f.axis_body = m_ax_face_body; +} + +void DesignPanel::refresh_axis_labels() +{ + auto txt = [](int idx) { return idx >= 0 ? wxString::Format("#%d", idx) : wxString(_L("(none)")); }; + if (m_axis_face_lbl) m_axis_face_lbl->SetLabel(txt(m_ax_face)); + if (m_axis_edge_lbl) m_axis_edge_lbl->SetLabel(txt(m_ax_edge)); +} + +void DesignPanel::reset_axis_refs() +{ + m_ax_face_body = m_ax_face = -1; + m_ax_edge = -1; + m_axis_pick = AxisPick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_axis_labels(); +} + +void DesignPanel::arm_axis_pick(AxisPick target) +{ + m_axis_pick = target; + if (m_viewport) m_viewport->set_escalate_on_repick(false); // same as arm_plane_pick + m_status->SetForegroundColour(wxNullColour); + set_status(target == AxisPick::Face ? _L("Click a solid FACE in the viewport") + : _L("Click a solid EDGE in the viewport")); + m_status->Refresh(); +} + +// --- CoordSys helpers --- + +void DesignPanel::apply_coordsys_refs(CadFeature& f) const +{ + f.coordsys_type = (CoordSysType)m_coordsys_type->GetSelection(); + f.coordsys_point = Vec3d(m_cs_x->GetValue(), m_cs_y->GetValue(), m_cs_z->GetValue()); + f.coordsys_body = m_cs_face_body; + f.coordsys_face = m_cs_face; + f.coordsys_edge = m_cs_edge; + f.coordsys_x_hint = Vec3d(m_cs_hx->GetValue(), m_cs_hy->GetValue(), m_cs_hz->GetValue()); +} + +void DesignPanel::refresh_coordsys_labels() +{ + auto txt = [](int idx) { return idx >= 0 ? wxString::Format("#%d", idx) : wxString(_L("(none)")); }; + if (m_cs_face_lbl) m_cs_face_lbl->SetLabel(txt(m_cs_face)); + if (m_cs_edge_lbl) m_cs_edge_lbl->SetLabel(txt(m_cs_edge)); +} + +void DesignPanel::refresh_cs_body_choice() +{ + if (!m_cs_body) return; + const int keep = m_cs_body->GetSelection(); + m_cs_body->Clear(); + m_cs_body->Append(_L("(all)")); + for (size_t b = 0; b < m_doc.bodies.size(); ++b) + m_cs_body->Append(wxString::Format(_L("Body %d"), int(b) + 1)); + const int sel = (keep > 0 && keep < int(m_cs_body->GetCount())) ? keep : 0; + m_cs_body->SetSelection(sel); + // The combo and the viewport focus are ONE state, so they must not be written separately. + // When the body list shrinks, `keep` falls out of range and the selection silently drops to + // "(all)" — while the viewport stayed focused on the old index, leaving every other body at + // 25% alpha and picking locked to a body that may no longer exist. That is the exact mirror + // of the open_tool ordering bug (combo says Body N, viewport opaque); this one says "(all)" + // and stays dimmed. + // + // Guarded on the CoordSys card being the ACTIVE tool because it is the only card that owns + // this focus. In the edit path this function runs BEFORE open_tool, with the previous tool + // still active, so the guard is false and the caller's explicit set_xray_focus still wins. + if (m_viewport != nullptr && m_active == Tool::CoordSys) + m_viewport->set_xray_focus(sel - 1); +} + +void DesignPanel::reset_coordsys_refs() +{ + m_cs_face_body = m_cs_face = -1; + m_cs_edge = -1; + m_coordsys_pick = CoordSysPick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_coordsys_labels(); + if (m_cs_body) m_cs_body->SetSelection(0); + if (m_viewport) m_viewport->set_xray_focus(-1); + refresh_cs_body_choice(); +} + +void DesignPanel::arm_coordsys_pick(CoordSysPick target) +{ + m_coordsys_pick = target; + // While this pick is armed the click the card asked for must reach it, so the whole-body + // escalation is off: clicking the face the card is pointing at is the ANSWER here, not a + // request for its body. + if (m_viewport) m_viewport->set_escalate_on_repick(false); + m_status->SetForegroundColour(wxNullColour); + set_status(target == CoordSysPick::Face ? _L("Click a solid FACE in the viewport") + : _L("Click a solid EDGE in the viewport")); + m_status->Refresh(); +} + +bool DesignPanel::on_add_plane() +{ + // Refuse here rather than let the kernel substitute. Every method in CadDocument's plane + // dispatch falls back to offset_angle_plane() when its references are missing, so picking + // Tangent and confirming with nothing selected used to produce an offset plane reported as + // a success — the user asks for one construction and silently receives another. The kernel + // keeps its fallback (it must return SOMETHING), but no user gesture should reach it. + auto refuse = [this](const wxString& why) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(why); + m_status->Refresh(); + }; + switch ((PlaneType)m_plane_type->GetSelection()) { + case PlaneType::Angle: + if (m_pl_edgeA < 0) { refuse(_L("An angled plane needs an edge to tilt about — pick Edge A")); return false; } + break; + case PlaneType::Midplane: + if (m_pl_faceA < 0 || m_pl_faceB < 0) { refuse(_L("A midplane needs two faces — pick Face A and Face B")); return false; } + if (m_pl_faceA == m_pl_faceB && m_pl_faceA_body == m_pl_faceB_body) { + // Well-defined but useless: the midplane of a face with itself is that same face. + refuse(_L("Face A and Face B are the same face — a midplane needs two different faces")); + return false; + } + break; + case PlaneType::Tangent: + // The face must also be cylindrical; that check stays in the kernel, which has the geometry. + if (m_pl_faceA < 0) { refuse(_L("A tangent plane needs a cylindrical face — pick Face A")); return false; } + break; + case PlaneType::TwoEdges: + if (m_pl_edgeA < 0 || m_pl_edgeB < 0) { refuse(_L("This plane needs two edges — pick Edge A and Edge B")); return false; } + break; + default: + break; // Offset and Coincident are meaningful with no reference: they use the base plane + } + + m_feature_counter++; + int idx = m_doc.add_plane(m_plane_base->GetSelection(), m_plane_offset->GetValue(), + m_plane_tilt->GetValue(), m_plane_tilt_axis->GetSelection(), + "Plane" + std::to_string(m_feature_counter)); + if (idx >= 0 && idx < int(m_doc.features.size())) apply_plane_refs(m_doc.features[idx]); + m_doc.recompute(); // datum-only docs yield no body; that is expected/benign + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Plane added — pick it as a sketch plane")); + refresh_tree(); + return true; +} + +void DesignPanel::on_add_axis() +{ + m_feature_counter++; + int idx = m_doc.add_axis((AxisType)m_axis_type->GetSelection(), + "Axis" + std::to_string(m_feature_counter)); + if (idx >= 0 && idx < int(m_doc.features.size())) apply_axis_refs(m_doc.features[idx]); + m_doc.recompute(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Axis added")); + refresh_tree(); +} + +void DesignPanel::on_add_coordsys() +{ + m_feature_counter++; + Vec3d pt(m_cs_x->GetValue(), m_cs_y->GetValue(), m_cs_z->GetValue()); + int idx = m_doc.add_coordsys((CoordSysType)m_coordsys_type->GetSelection(), pt, + "Coord" + std::to_string(m_feature_counter)); + if (idx >= 0 && idx < int(m_doc.features.size())) apply_coordsys_refs(m_doc.features[idx]); + m_doc.recompute(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Coord Sys added")); + refresh_tree(); +} + +void DesignPanel::on_add_shell() +{ + if (m_doc.body.IsNull()) { + set_status(_L("Shell needs a solid body — add or import one first")); + return; + } + const int face = (m_sel_solid_face >= 0) ? m_sel_solid_face : -1; + + m_feature_counter++; + m_doc.add_shell(m_shell_thickness->GetValue(), face, m_sel_solid_body, + "Shell" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +void DesignPanel::on_add_draft() +{ + if (m_doc.body.IsNull()) { + set_status(_L("Draft needs a solid body — add or import one first")); + return; + } + if (m_sel_solid_face < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Draft needs a picked face — click a side face first")); + m_status->Refresh(); + return; + } + + m_feature_counter++; + m_doc.add_draft(m_draft_angle->GetValue(), m_sel_solid_face, m_sel_solid_body, + "Draft" + std::to_string(m_feature_counter)); + + if (!recompute_guarded(_L("Rebuilding model…"))) + set_status(_L("Recompute error: ") + wxString::FromUTF8(m_doc.error)); + else + set_status_ok(); + + refresh_tree(); +} + +int DesignPanel::tree_icon_for(CadFeatureType t) +{ + switch (t) { + case CadFeatureType::Sketch: return 0; + case CadFeatureType::Extrude: return 1; + case CadFeatureType::Fillet: + case CadFeatureType::Chamfer: return 2; + case CadFeatureType::Hole: return 3; + case CadFeatureType::Thread: return 4; + case CadFeatureType::Shell: return 5; + case CadFeatureType::Revolve: return 1; + case CadFeatureType::Sweep: return 1; + case CadFeatureType::Pattern: return 1; + case CadFeatureType::Plane: return 0; // datum plane: sketch-family icon + case CadFeatureType::Loft: return 1; + case CadFeatureType::Draft: return 5; // dressup-family icon + case CadFeatureType::Import: return 1; // imported solid: solid-family icon + case CadFeatureType::Boolean: return 1; // body-body combine: solid-family icon + case CadFeatureType::Cut: return 1; // plane split: solid-family icon + case CadFeatureType::Axis: return 0; // datum axis: sketch-family icon + case CadFeatureType::CoordSys: return 0; // datum coord sys: sketch-family icon + case CadFeatureType::SurfaceExtrude: return 1; + case CadFeatureType::SurfaceRevolve: return 1; + case CadFeatureType::SurfaceLoft: return 1; + case CadFeatureType::SurfaceFill: return 1; + case CadFeatureType::ThickenSurface: return 1; + case CadFeatureType::SurfaceOffset: return 1; + case CadFeatureType::Transform: return 1; // solid-family icon + case CadFeatureType::Mirror: return 1; // solid-family icon + case CadFeatureType::Thicken: return 1; // solid-family icon + case CadFeatureType::Rib: return 1; // solid-family icon + case CadFeatureType::Project: return 0; // sketch-family icon (produces sketch) + case CadFeatureType::DeleteFace: return 5; // dressup-family icon + case CadFeatureType::Helix: return 4; // thread-family icon (curve) + case CadFeatureType::Mate: return 2; // dressup-family icon (assembly) + } + return 0; +} + +// The reason detect_mate_conflicts() recorded for this feature, or nullptr. A linear scan: an +// assembly has a handful of mates and at most that many conflicts, so a map would cost more to +// build than the scans it saves. +const std::string* DesignPanel::mate_conflict_reason(int feature) const +{ + for (const auto& c : m_doc.mate_conflicts) + if (c.first == feature) return &c.second; + return nullptr; +} + +// What to say when nothing is selected and no tool is open. Lives in one place because it is +// needed from two: after an edit empties the document, and at startup — where after_tree_edit() +// has never run, which is exactly why a fresh tab used to show a blank line. +wxString DesignPanel::idle_hint() const +{ + return m_doc.features.empty() + ? _L("Nothing yet — import a STEP or a mesh from the toolbar,\n" + "or click a reference plane and right-click it to start a sketch.") + : _L("No solid yet — select a sketch and right-click it to Extrude."); +} + +// The Design tab is no longer the visible page (dlj). The status line is a popup floating +// over the GL canvas, so it does NOT go away when this page does — it stayed up over Prepare and +// over the home screen, still reading like a live Design selection ("selected (whole body) — +// right-click for what applies to it") on a tab that has no such selection and no such menu. +// Nothing else in the panel needs to know: the popup keeps its text and comes straight back. +void DesignPanel::on_tab_hidden() +{ + if (m_viewport) { + m_viewport->show_status_hud(false); + m_viewport->leave_viewport(); // hand the shared camera back to the editor tabs + } +} + +void DesignPanel::on_tab_shown() +{ + if (m_viewport) { + m_viewport->show_status_hud(true); // ...and back on the way in + m_viewport->enter_viewport(); // borrow the shared camera; on_tab_hidden gives it back + } + + if (m_active == Tool::None && m_doc.display_mesh.its.indices.empty()) + set_status(idle_hint()); // first paint: the tab has never been edited + + if (m_viewport) m_viewport->refresh_bed(); + + // Modeling origin = bed centre, set BEFORE any recompute/datum-resolve so sketches and datums + // land in the middle of the bed (not the bed corner = world 0). + if (Plater* pl = wxGetApp().plater()) { + const Vec2d bc = pl->build_volume().bed_center(); + m_doc.modeling_origin = Vec3d(bc.x(), bc.y(), 0.0); + } + + // Rehydrate the parametric model from a freshly loaded project (the 3MF carried the + // recipe in Metadata/orca_cad.bin). Only when nothing is in progress here, so we + // never clobber an active design when the user just toggles back to the Design tab. + if (m_doc.features.empty()) { + if (Plater* plater = wxGetApp().plater()) { + const std::string& blob = plater->model().cad_recipe; + if (!blob.empty()) load_recipe(blob); + } + } + update_reference_planes(); // entering the Design tab: show the XY/XZ/YZ planes if no object yet + sync_sidebar_width(); // keep the panel as wide as Prepare's so the canvas edge doesn't jump + if (m_viewport) m_viewport->force_repaint(); // the page was just re-shown: paint it for real +} + +// Application close / language switch, from the plater's canvas teardown. +void DesignPanel::unbind_canvas_event_handlers() +{ + if (m_viewport) m_viewport->unbind_canvas_event_handlers(); +} + +void DesignPanel::reset_canvas_volumes() +{ + if (m_viewport) m_viewport->reset_canvas_volumes(); +} + +// Match Prepare's sidebar width instead of hardcoding one. Design used a fixed 264 px against +// Prepare's ~467, so the canvas edge jumped sideways on every tab switch; reading the live width +// also means the two stay aligned if Orca ever changes its sidebar. +void DesignPanel::sync_sidebar_width() +{ + if (m_form == nullptr) return; + Plater* pl = wxGetApp().plater(); + if (pl == nullptr) return; + const int w = pl->sidebar().GetSize().GetWidth(); + if (w < 200) return; // sidebar not laid out yet — keep what we have + if (m_form->GetMinSize().GetWidth() == w) return; + m_form->SetMinSize(wxSize(w, -1)); + Layout(); +} + +void DesignPanel::load_recipe(const std::string& blob) +{ + if (blob.empty()) return; + if (!m_doc.deserialize_recipe(blob)) { + // Carry the kernel's reason. deserialize_recipe distinguishes three cases that matter + // very differently to the person reading this — saved by a NEWER build, saved by an + // OLDER one, or genuinely unreadable — and replacing all three with one sentence left + // the user unable to tell "update OrcaSlicer" from "your file is damaged". Same + // error-loss class as the 31 McpControl sites (1de72de9ed): the message exists, it was + // simply not passed on. + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(m_doc.error.empty() + ? _L("Could not restore the CAD model from this project") + : _L("Could not restore the CAD model: ") + wxString::FromUTF8(m_doc.error)); + m_status->Refresh(); + return; + } + m_feature_counter = int(m_doc.features.size()); + feed_bodies(); // push the restored bodies into the viewport + refresh_tree(); // rebuild the feature tree from the restored recipe + set_status_ok(); +} + +void DesignPanel::refresh_tree() +{ + // The recipe mirrors the FEATURE LIST, and this is the moment the feature list changed — + // every add, delete, reorder, rename and suppression ends here to redraw the tree. Putting + // the sync in recompute_guarded instead tied it to "a solid was built", and CadDocument:: + // recompute() returns FALSE for a document that has no solid ("no solid-producing features", + // CadDocument.cpp) — which is precisely a document the user has only drawn sketches in. So + // drawing a profile, pressing Confirm and saving wrote a 3MF with no orca_cad.bin in it + // at all, and the app reported success: the whole design was gone on reopen (mtav). + // The three sites that say "a lone sketch yields an empty body; that is expected" call + // m_doc.recompute() directly and so never reached the sync either. One hook here covers all + // of them, including the live sketch tool's own commit path. + // + // ONLY when the document has something in it. sync_recipe_to_model() CLEARS the blob for an + // empty document, and the tree is also refreshed while the Design tab is still empty — before + // the deferred load at on_show() has had the chance to read the blob the project arrived + // with. Clearing there would destroy the recipe of every project being opened. Deleting the + // last feature still clears it, through the tree-edit call site that always did. + if (!m_doc.features.empty()) sync_recipe_to_model(); + + // Preserve the selected row across the rebuild — wxTreeCtrl::DeleteAllItems + // drops the selection, which made every edit/add feel like it "lost" the + // selection (and broke Edit/Move/Delete on the just-touched feature). + const int keep = tree_selection(); + + m_tree->DeleteAllItems(); + m_tree_items.clear(); + m_tree_body_items.clear(); + wxTreeItemId root = m_tree->AddRoot("root"); + // Datum/reference planes carry no solid; feed them to the viewport so they render as + // translucent rectangles (otherwise a Plane feature is invisible in the canvas). + refresh_datum_planes(); + update_reference_planes(); // body added/removed -> show/hide the XY/XZ/YZ origin planes + for (size_t fi = 0; fi < m_doc.features.size(); ++fi) { + const CadFeature& f = m_doc.features[fi]; + const int img = tree_icon_for(f.type); + wxTreeItemId id = m_tree->AppendItem(root, wxString::FromUTF8(f.name), img, img); + // Three states, in this order of precedence: + // disabled -> dim. A SUPPRESSED mate is the user's answer to a conflict, so it must + // read as suppressed rather than keep shouting about the conflict. + // conflict -> warn. detect_mate_conflicts() refills m_doc.mate_conflicts on every + // recompute; the mark goes on the row that carries it, because the tree + // is where the user is already looking for which feature to change. + // otherwise -> normal. + // A conflict is NOT a document error — the document still evaluates — so the row is + // marked and never hidden, and the reason goes to the status line on selection rather + // than into a modal that interrupts without offering an action. + m_tree->SetItemTextColour(id, !f.enabled ? dp_item_dim() + : mate_conflict_reason(int(fi)) != nullptr ? wxColour(235, 110, 110) + : dp_item_text()); + m_tree_items.push_back(id); + } + refresh_parts(); // bodies live in their own list below the tree, never clipped by history + if (keep >= 0 && keep < int(m_tree_items.size())) + m_tree->SelectItem(m_tree_items[keep]); + + // Size the tree to its content (clamped) so it doesn't waste a fixed-height block when + // there are few features, and scrolls internally past ~9 rows instead of growing forever. + const int rows = int(m_tree_items.size()); // bodies are in their own list now + const int rowH = std::max(m_tree->GetCharHeight() + 8, 20); + const int shown = std::min(std::max(rows, 1), 9); + const wxSize ts(-1, shown * rowH + 8); + m_tree->SetMinSize(ts); + m_tree->SetMaxSize(ts); + if (m_form && m_form->GetSizer()) { update_cards_frame(); m_form->Layout(); m_form->FitInside(); } +} + +// Rebuild the Parts list from the document's bodies, preserving the selected row so a +// recompute (fillet, hole, ...) doesn't drop the user's body selection under them. +void DesignPanel::refresh_parts() +{ + if (m_parts == nullptr) return; + const int keep = tree_body_selection(); + + m_parts->DeleteAllItems(); + m_tree_body_items.clear(); + wxTreeItemId proot = m_parts->AddRoot("root"); + + sync_body_visible(); // keep flags parallel before reading them for the row colour + for (size_t b = 0; b < m_doc.bodies.size(); ++b) { + // "Body N" keeps the positional identity every status line and message uses ("Body 2 + // selected", the interference report), and the NAME follows it because that is the part + // a rename can change: a body's name is derived from the feature that produced it, so + // renaming through this row and seeing the label sit unchanged at "Body 1" would read as + // a rename that did nothing. + const bool vis = b >= m_body_visible.size() || m_body_visible[b]; + // The user's name wins over the derived one (the maker's name, restamped every + // recompute); "Body N" still leads, because every status line, the interference report + // and the mate errors identify a body by its number. + const wxString bname = m_doc.bodies[b].has_user_name + ? wxString::FromUTF8(m_doc.bodies[b].user_name) + : wxString::FromUTF8(m_doc.bodies[b].name); + wxTreeItemId id = m_parts->AppendItem(proot, + bname.IsEmpty() ? wxString::Format(_L("Body %zu"), b + 1) + : wxString::Format(_L("Body %zu — %s"), b + 1, bname)); + // Hidden bodies are greyed so the show/hide state reads at a glance (eye toggle). + m_parts->SetItemTextColour(id, vis ? dp_item_text() : dp_item_dim()); + m_tree_body_items.push_back(id); + } + + // Hide the whole block until there is something to list, so an empty document doesn't + // show a stray empty box. + const bool any = !m_tree_body_items.empty(); + m_parts->Show(any); + if (m_parts_label) m_parts_label->Show(any); + if (m_parts_hdr) m_parts_hdr->ShowItems(any); // icon + title live in this sizer + if (m_parts_rule) m_parts_rule->Show(any); + // ...and the frame with it, or an empty bordered box floats there. + if (m_parts_box && m_form && m_form->GetSizer()) m_form->GetSizer()->Show(m_parts_box, any, false); + + if (any) { + const int rowH = std::max(m_parts->GetCharHeight() + 8, 20); + const int shown = std::min(int(m_tree_body_items.size()), 6); // scrolls past 6 + const wxSize ps(-1, shown * rowH + 8); + m_parts->SetMinSize(ps); + m_parts->SetMaxSize(ps); + if (keep >= 0 && keep < int(m_tree_body_items.size())) + m_parts->SelectItem(m_tree_body_items[keep]); + } + if (m_form && m_form->GetSizer()) { update_cards_frame(); m_form->Layout(); m_form->FitInside(); } +} + +int DesignPanel::tree_body_selection() const +{ + if (m_parts == nullptr) return -1; + const wxTreeItemId sel = m_parts->GetSelection(); + if (!sel.IsOk()) return -1; + for (size_t i = 0; i < m_tree_body_items.size(); ++i) + if (m_tree_body_items[i] == sel) return int(i); + return -1; +} + +void DesignPanel::update_section_flip_btn() +{ + if (m_section_flip_btn) m_section_flip_btn->Enable(m_section_on); +} + +void DesignPanel::toggle_section_view() +{ + if (!m_viewport) return; + m_section_on = !m_section_on; + m_status->SetForegroundColour(wxNullColour); + if (m_section_on) { + m_section_cut_z = m_viewport->model_mid_z(); // start at the model's mid-height + m_section_upper = false; // keep the lower half by default + m_viewport->set_section_plane(true, m_section_cut_z, m_section_upper); + set_status(_L("Section view on — hides half the model to see inside; " + "PageUp / PageDown move the plane, Flip shows the other half")); + } else { + m_viewport->set_section_plane(false, 0.0); + set_status(_L("Section view off")); + } + m_status->Refresh(); + update_section_flip_btn(); +} + +void DesignPanel::flip_section_view() +{ + if (!m_viewport || !m_section_on) return; + m_section_upper = !m_section_upper; + m_viewport->set_section_plane(true, m_section_cut_z, m_section_upper); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Section view — showing the %s half"), + m_section_upper ? _L("upper") : _L("lower"))); + m_status->Refresh(); +} + +void DesignPanel::sync_body_visible() +{ + // Keep the visibility vector parallel to bodies; newly-created bodies default visible. + // Bodies are appended in feature order, so existing indices keep their flag on resize. + m_body_visible.resize(m_doc.bodies.size(), true); +} + +void DesignPanel::sync_body_xform() +{ + // Parallel to bodies; new bodies default to identity (no move). Stable on resize. + m_body_xform.resize(m_doc.bodies.size(), Transform3d::Identity()); +} + +// Build the display + pick meshes with each body's Move transform applied. The pick mesh is +// re-merged from the transformed per-body meshes IN THE SAME body order as tessellate_bodies, +// so display_tri_face/display_tri_body stay aligned. m_disp_pick_mesh keeps a stable address — +// the tool holds a pointer to it, so an in-place rebuild updates picking without re-pointing. +void DesignPanel::rebuild_disp_meshes() +{ + sync_body_visible(); + sync_body_xform(); + const std::vector& src = m_doc.display_body_meshes; + + bool any = false; + for (const Transform3d& t : m_body_xform) + if (!t.isApprox(Transform3d::Identity())) { any = true; break; } + + if (!any) { // no body moved: identical to the untransformed meshes + m_disp_body_meshes = src; + m_disp_pick_mesh = m_doc.display_mesh; + return; + } + + m_disp_body_meshes.clear(); + m_disp_body_meshes.reserve(src.size()); + m_disp_pick_mesh = TriangleMesh{}; + for (size_t b = 0; b < src.size(); ++b) { + TriangleMesh m = src[b]; + if (b < m_body_xform.size()) m.transform(m_body_xform[b]); + m_disp_pick_mesh.merge(m); // same order as tessellate_bodies -> tri_* stay aligned + m_disp_body_meshes.push_back(std::move(m)); + } +} + +void DesignPanel::feed_bodies() +{ + // The body count just changed, so the tools that consume a body may have become reachable or + // unreachable. Before the early return below: the gating is about the toolbar, not the canvas. + update_body_gates(); + // Rebuild the transformed meshes first so every display-refresh path (recompute, tint, + // visibility, live move) shows the bodies at their current Move offsets. The solid-pick + // keeps a STABLE pointer to m_disp_pick_mesh / m_body_visible / m_body_xform (rebuilt in + // place), so it needs no re-call here — the whole/face/edge selection survives a move drag. + if (m_viewport == nullptr) return; + rebuild_disp_meshes(); + m_viewport->set_bodies(m_disp_body_meshes, m_body_visible); +} + +// Boolean (combine bodies) — one gate for every door onto the tool. A body-body operation +// needs two solids, and saying so in one place means the toolbar button, its Shift+B binding +// and the Bodies card cannot drift apart on what "available" means. +void DesignPanel::on_boolean_tool() +{ + if (m_doc.bodies.size() < 2) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Boolean needs two bodies — create or import a second solid")); + m_status->Refresh(); + return; + } + populate_body_choices(); + open_tool(Tool::Boolean); +} + +void DesignPanel::on_move_body() +{ + const int b = m_sel_solid_body; + if (m_viewport == nullptr) return; + if (b < 0 || b >= int(m_doc.display_body_meshes.size())) { + // Never fail silently here: the caller gates on bodies.size() while this needs a + // tessellated per-body mesh, and when those disagreed the click did nothing at all. + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(b < 0 ? _L("Select a body first — click it in the viewport or the Bodies list") + : _L("That body has no display mesh yet — recompute first")); + m_status->Refresh(); + return; + } + sync_body_xform(); + // Delta gizmo: pivot at the body's CURRENT world centroid; the tool composes the drag deltas + // onto its current pose, so move + rotate both work (incl. on an already place-on-face'd body). + const Transform3d base = m_body_xform[b]; + const BoundingBoxf3 bb = m_doc.display_body_meshes[b].bounding_box(); + const Vec3d pivot = base * bb.center(); + // Bounding-sphere radius (world): the gizmo scales with it so the rotation rings sit clear of + // the body instead of collapsing into a tangle inside it — same sizing rule as Orca's Prepare + // gizmos. The scale part of `base` is applied so a scaled body still gets a correct radius. + const double radius = (base.linear() * (bb.size() * 0.5)).norm(); + m_viewport->begin_move_body(b, pivot, base, radius); + m_move_body = b; // for the action bar: Cancel reverts to this pose + m_move_prev = base; + // Reset the numeric fields to "no change" and show the card beside the drag gizmo. + if (m_move_dx) m_move_dx->SetValue(0.0); + if (m_move_dy) m_move_dy->SetValue(0.0); + if (m_move_dz) m_move_dz->SetValue(0.0); + if (m_move_angle) m_move_angle->SetValue(0.0); + show_move_card(true); + update_action_bar(); // surface the unified ✓/✗ while moving + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Drag the arrows to move, the rings to rotate — then Confirm (Esc cancels)")); + m_status->Refresh(); +} + +// Transform card (add mode): arm the same move gizmo on the card's body so the geometry-first +// control is what the user drags, while the card's numeric fields mirror the result. The card +// stays visible as the typed half — the gizmo owns the drag, the fields own the numbers. +void DesignPanel::arm_transform_gizmo() +{ + int b = tree_body_selection(); + if (b < 0) b = m_sel_solid_body; + if (b < 0 && m_xf_body) b = m_xf_body->GetSelection(); + if (b < 0 || b >= int(m_doc.display_body_meshes.size())) return; // card alone still works + if (m_xf_body && b < int(m_xf_body->GetCount())) m_xf_body->SetSelection(b); // feature must be created against the gizmo's body + sync_body_xform(); + const Transform3d base = m_body_xform[b]; + const BoundingBoxf3 bb = m_doc.display_body_meshes[b].bounding_box(); + const Vec3d pivot = base * bb.center(); + const double radius = (base.linear() * (bb.size() * 0.5)).norm(); + if (m_viewport) m_viewport->begin_move_body(b, pivot, base, radius); + m_xf_gizmo_body = b; + m_xf_gizmo_base = base; + m_move_body = b; // the existing revert paths key off these two + m_move_prev = base; + // Write the pivot into the card so the parametric feature reproduces what was dragged; + // dx/dy/dz and angle start at zero (the gizmo reports deltas from this pose). + if (m_xf_pivot_x) m_xf_pivot_x->SetValue(pivot.x()); + if (m_xf_pivot_y) m_xf_pivot_y->SetValue(pivot.y()); + if (m_xf_pivot_z) m_xf_pivot_z->SetValue(pivot.z()); + if (m_xf_dx) m_xf_dx->SetValue(0.0); + if (m_xf_dy) m_xf_dy->SetValue(0.0); + if (m_xf_dz) m_xf_dz->SetValue(0.0); + if (m_xf_angle) m_xf_angle->SetValue(0.0); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Drag the arrows to move, the rings to rotate — the numbers follow")); + m_status->Refresh(); +} + +// Color tool: open a colour picker on the selected body and store a per-body display-colour +// override on its CadBody. The override is carried across recompute() by body index and is +// read back by DesignCanvas::body_color()/reload(), so the body keeps its colour through edits. +void DesignPanel::on_set_body_color() +{ + // Same body-selection source Move / visibility use: the Parts-list row first, falling + // back to the in-canvas picked solid so either selection path works. + int b = tree_body_selection(); + if (b < 0) b = m_sel_solid_body; + if (b < 0 || b >= int(m_doc.bodies.size())) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Select a body first")); + m_status->Refresh(); + return; + } + + // Seed the picker with the body's current effective colour (override or auto palette). + const ColorRGBA cur = (m_viewport != nullptr) ? m_viewport->body_color(b) + : m_doc.bodies[b].color; + wxColourData data; + data.SetColour(wxColour(cur.r_uchar(), cur.g_uchar(), cur.b_uchar())); + wxColourDialog dlg(this, &data); + if (dlg.ShowModal() != wxID_OK) return; + + const wxColour picked = dlg.GetColourData().GetColour(); + m_doc.bodies[b].has_color = true; + m_doc.bodies[b].color = ColorRGBA((unsigned char)picked.Red(), (unsigned char)picked.Green(), + (unsigned char)picked.Blue(), (unsigned char)255); + feed_bodies(); // same refresh path the visibility toggle uses → viewport updates immediately + + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Body %d colour set"), b + 1)); + m_status->Refresh(); +} + +// Prepare's "Place on Face" (F), ported to Design. Pick a body face, then this rotates the +// body so that face's outward normal points straight down (-Z) and drops it onto the bed — +// Orca's exact math (Selection::flattening_rotate). Writes the per-body display transform +// m_body_xform (baked into the mesh at Commit), like the Move gizmo; no shape mutation. +// Returns false (with a hint) when no body face is selected, so the F key can fall through. +bool DesignPanel::place_on_face() +{ + const int b = m_sel_solid_body; + if (b < 0 || b >= int(m_doc.bodies.size()) || m_sel_solid_face < 0 + || b >= int(m_doc.display_body_meshes.size())) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Click a face on the solid, then press F")); + m_status->Refresh(); + return false; + } + const TopoDS_Face face = GeometryEngine::face_by_index(m_doc.bodies[b].shape, m_sel_solid_face); + if (face.IsNull()) return false; + sync_body_xform(); + const Transform3d old_x = m_body_xform[b]; + // Outward face normal in the body's CURRENT displayed orientation. + const Vec3d n = (old_x.linear() * GeometryEngine::face_normal_world(face)).normalized(); + if (!n.allFinite() || n.norm() < 0.5) return false; + // Align that normal with the down vector (-Z): the face ends up on the bed. + const Transform3d R(Eigen::Quaterniond().setFromTwoVectors(n, -Vec3d::UnitZ())); + // Rotate about the body's current world centroid so it spins in place, not about the origin. + const Vec3d c = old_x * m_doc.display_body_meshes[b].bounding_box().center(); + Transform3d x = Eigen::Translation3d(c) * R * Eigen::Translation3d(-c) * old_x; + // Drop the re-oriented body so its lowest point sits on the bed (min Z -> 0). + TriangleMesh probe = m_doc.display_body_meshes[b]; + probe.transform(x); + x = Transform3d(Eigen::Translation3d(0.0, 0.0, -probe.bounding_box().min.z())) * x; + m_body_xform[b] = x; + set_status_ok(); // rebuild display/pick meshes, re-point picking; resets face selection + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Placed on face — body laid flat on the bed")); + m_status->Refresh(); + return true; +} + +int DesignPanel::tree_selection() const +{ + const wxTreeItemId sel = m_tree->GetSelection(); + if (!sel.IsOk()) return wxNOT_FOUND; + for (size_t i = 0; i < m_tree_items.size(); ++i) + if (m_tree_items[i] == sel) return int(i); + return wxNOT_FOUND; +} + +void DesignPanel::set_tree_selection(int row) +{ + if (row >= 0 && row < int(m_tree_items.size())) + m_tree->SelectItem(m_tree_items[row]); +} + +void DesignPanel::after_tree_edit(bool ok) +{ + update_undo_redo_buttons(); + refresh_tree(); + refresh_variables(); + if (!ok) { + // The edit was rolled back (recompute failed); the body is unchanged. + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Edit rejected: ") + wxString::FromUTF8(m_doc.error)); + m_status->Refresh(); + return; + } + sync_recipe_to_model(); // deletes, reorders and suppressions change the document too + m_status->SetForegroundColour(wxNullColour); + if (m_doc.display_mesh.its.indices.empty()) { + if (m_viewport != nullptr) m_viewport->clear_mesh(); + sync_sketch_display(); // empty body: show any un-consumed committed sketch + // An empty document used to blank this line — no guidance at the one moment a newcomer + // has none. Name the three real ways in, in the order they are reachable on screen. + set_status(idle_hint()); + } else { + // nde #19/20: a delete/reorder that leaves bodies behind must re-feed the per-body + // GLVolumes — otherwise the viewport keeps showing the pre-edit solid (the deleted + // feature's artifact lingered). feed_bodies() is idempotent for the edit/replace path. + if (m_viewport != nullptr) feed_bodies(); + set_status_ok(); + } + // Force a frame: under software GL (llvmpipe on the :10 test box) reload()'s scheduled + // Refresh() is dropped, so a deleted solid stayed on screen until the next orbit. + if (m_viewport != nullptr) m_viewport->request_repaint(); + m_status->Refresh(); +} + +// Erase the whole document (every feature + body) and start fresh. The single "wipe" the +// feature tree's per-row Delete can't give you — also the way out when a body has no +// removable owning feature. +void DesignPanel::on_new_design() +{ + if (m_doc.features.empty() && m_doc.bodies.empty()) { set_status_ok(); return; } + wxMessageDialog dlg(this, + _L("Erase all features and bodies and start a new design? This cannot be undone."), + _L("New Design"), wxYES_NO | wxICON_EXCLAMATION); + if (dlg.ShowModal() != wxID_YES) return; + clear_document(); +} + +// The teardown behind New Design, without the confirmation. Also what New Project / Open +// Project run through Plater::priv::reset: the document lives here rather than in the Model, +// so without this it survives the project that produced it and the next Design edit writes +// the previous project's feature tree into the new one. +void DesignPanel::clear_document() +{ + tool_cancel(); // leave any active tool / sketch / constrain cleanly + m_doc.clear(); // features + bodies + meshes + history + m_edit_index = -1; + m_move_body = -1; + show_move_card(false); + m_body_xform.clear(); + if (m_viewport) { m_viewport->clear_move_gizmo(); m_viewport->clear_mesh(); } + after_tree_edit(true); // rebuild the (now empty) tree + clear the viewport + update_action_bar(); + set_status_ok(); +} + +// The verb the offer names when you point at a body, or at any face/edge/vertex of one. A body +// is a recomputed RESULT, so what actually gets deleted is the feature that created it +// (CadBody::source_feature). That is an edit to the recipe and can take other features with it, +// so it asks first and NAMES the feature: a body disappearing from the viewport is not by itself +// evidence of which feature went, and this is the one action here that cannot be eyeballed. +void DesignPanel::on_delete_body() +{ + const int nb = int(m_doc.bodies.size()); + if (m_sel_solid_body < 0 || m_sel_solid_body >= nb) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Select a body first")); + m_status->Refresh(); + return; + } + const int src = m_doc.bodies[m_sel_solid_body].source_feature; + if (src < 0 || src >= int(m_doc.features.size())) { + // Only reachable for a body no feature claims — a stale recipe, or a feature type that + // broke the "never replace a whole CadBody" invariant recompute() relies on. + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("This body has no feature to delete — use New Design to start over")); + m_status->Refresh(); + return; + } + const std::string& raw = m_doc.features[src].name; + const wxString fname = raw.empty() ? wxString::Format(_L("feature %d"), src + 1) + : wxString::FromUTF8(raw); + if (wxMessageBox(wxString::Format( + _L("Delete %s?\n\nThat is the feature this body was made from. " + "Features built on it may be removed or stop working."), fname), + _L("Delete body"), wxYES_NO | wxNO_DEFAULT | wxICON_QUESTION, this) != wxYES) + return; + // A card left open over a feature that is about to vanish goes stale — same reason + // on_delete_feature() closes it. + if (m_active != Tool::None || m_edit_index >= 0) { + reset_edit_state(); + close_tool(); + } + m_doc.checkpoint(); // undo boundary: deleting a body's feature + m_sel_solid_body = m_sel_solid_face = m_sel_solid_edge = -1; // the selection is about to + m_sel_solid_vertex = false; // name a body that is gone + after_tree_edit(m_doc.remove_feature(src)); +} + +void DesignPanel::on_delete_feature() +{ + // A Body row has no directly-removable feature (bodies are recomputed results); guide the + // user to delete the feature that created it, or use New Design to wipe everything. + if (tree_body_selection() >= 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Select the FEATURE that created this body (or use New Design)")); + m_status->Refresh(); + return; + } + int sel = tree_selection(); + if (sel == wxNOT_FOUND) { + set_status(_L("Select a feature in the tree first")); + m_status->Refresh(); + return; + } + // If a feature dialog is open (e.g. the feature is being edited), dismiss it first — + // otherwise the deleted feature's settings card lingers in the left panel, out of sync + // with the tree. reset_edit_state() drops the stale m_edit_index; close_tool() hides the card. + if (m_active != Tool::None || m_edit_index >= 0) { + reset_edit_state(); + close_tool(); + } + m_doc.checkpoint(); // undo boundary: deleting a feature + after_tree_edit(m_doc.remove_feature(sel)); +} + +void DesignPanel::on_toggle_visibility() +{ + // A selected Body row toggles that body's visibility (per-body show/hide). The solid + // stays in the document; only its GLVolume + pickability flip. Falls through to the + // feature-level toggle below when a feature row (not a body row) is selected. + const int bsel = tree_body_selection(); + if (bsel >= 0) { + sync_body_visible(); + if (bsel < int(m_body_visible.size())) { + const bool now_visible = !m_body_visible[bsel]; + m_body_visible[bsel] = now_visible; + if (m_viewport != nullptr) { + feed_bodies(); // flips is_active; m_solid_visible is a stable pointer (live) + m_viewport->set_solid_pick(&m_doc.bodies, &m_disp_pick_mesh, + &m_doc.display_tri_face, &m_doc.display_tri_body, + &m_body_visible, &m_body_xform); + } + refresh_tree(); + // Keep the row selected for repeat toggles. m_parts, NOT m_tree: these ids belong + // to the Bodies list, and handing a foreign item to the feature tree left the row + // unselected — so the second press of the eye found tree_body_selection() == -1 and + // fell through to the FEATURE-level branch below instead of un-hiding the body. + if (m_parts != nullptr && bsel < int(m_tree_body_items.size())) + m_parts->SelectItem(m_tree_body_items[bsel]); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(now_visible ? _L("Body %d shown") + : _L("Body %d hidden"), bsel + 1)); + m_status->Refresh(); + } + return; + } + + int sel = tree_selection(); + if (sel == wxNOT_FOUND || sel >= int(m_doc.features.size())) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Select a feature in the tree first")); + m_status->Refresh(); + return; + } + const bool shown = !m_doc.features[sel].enabled; + m_doc.features[sel].enabled = shown; + + // recompute() reports an all-hidden / sketch-only document as false (no + // solid to build), but that is a VALID state for hide — so clear the body + // explicitly instead of letting after_tree_edit treat it as a rejected edit + // (which would skip the overlay refresh, leaving hidden art on screen). + if (!recompute_guarded(_L("Rebuilding model…"))) { + m_doc.body = TopoDS_Shape(); + m_doc.display_mesh = TriangleMesh{}; + m_doc.error.clear(); + } + refresh_tree(); // greys the row + set_tree_selection(sel); // keep the toggled feature selected + if (m_viewport != nullptr) { + if (m_doc.display_mesh.its.indices.empty()) m_viewport->clear_mesh(); + else feed_bodies(); + } + sync_sketch_display(); // skips the hidden sketch + direct-renders + m_status->SetForegroundColour(wxNullColour); + set_status(shown ? _L("Feature shown") : _L("Feature hidden")); + m_status->Refresh(); +} + +void DesignPanel::on_move_feature(int delta) +{ + int sel = tree_selection(); + if (sel == wxNOT_FOUND) { + set_status(_L("Select a feature in the tree first")); + m_status->Refresh(); + return; + } + int target = sel + delta; + if (target < 0 || target >= int(m_doc.features.size())) + return; // already at the end + m_doc.checkpoint(); // undo boundary: reordering a feature + if (m_doc.move_feature(sel, delta)) { + after_tree_edit(true); + set_tree_selection(target); // keep the moved feature selected + } else { + after_tree_edit(false); + } +} + +// Commit the live sketch in place, then enter Constrain mode on the just-committed sketch. +// One-click bridge from the SKETCH toolbar: removes the "Finish -> find in tree -> select -> +// Constrain" friction, so the constraint palette + Trim/Extend are reachable mid-sketch. +bool DesignPanel::enter_constrain_inline() +{ + if (m_viewport && m_viewport->is_sketching()) + m_viewport->finish_sketch(); // synchronous: packages live entities+constraints -> Sketch + const int sk = resolve_extrude_sketch(); // last/selected Sketch feature + if (sk < 0) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Draw a sketch first, then Constrain")); + m_status->Refresh(); + return false; + } + set_tree_selection(sk); // tree drives on_begin_constrain / the constraint manager + on_begin_constrain(sk); + const bool entered = m_viewport && + (m_viewport->is_constraining() || m_viewport->is_constraining_entities()); + if (entered) set_ui_mode(UiMode::Constrain); + return entered; +} + +void DesignPanel::on_begin_constrain(int sel_override) +{ + int sel = (sel_override >= 0) ? sel_override : tree_selection(); + // Fall back to the sketch owning the region picked in the viewport. The offer menu reaches + // this verb from a SkLoop selection (a region clicked on screen), which carries no tree + // selection — without this, choosing "Constrain sketch" from the offer would answer + // "Select a sketch in the tree first" about a sketch the user has visibly selected. + if ((sel == wxNOT_FOUND || sel >= int(m_doc.features.size())) && m_sel_sketch_feat >= 0 + && m_sel_sketch_feat < int(m_doc.features.size())) { + sel = m_sel_sketch_feat; + set_tree_selection(sel); // keep the tree in step with what the viewport says + } + if (sel == wxNOT_FOUND || sel >= int(m_doc.features.size())) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Select a sketch in the tree first")); + m_status->Refresh(); + return; + } + CadFeature& f = m_doc.features[sel]; + if (f.type != CadFeatureType::Sketch) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Selected feature is not a sketch")); + m_status->Refresh(); + return; + } + + // Entity sketches (Fase 4.2): pick Line entities; constraints solve against + // entity endpoints in the kernel. + if (!f.entities.empty()) { + m_constrain_feat = sel; + if (m_viewport) m_viewport->begin_constrain_entities(f.entities, f.plane); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Pick 1-2 lines, then a constraint; right-click exits")); + m_status->Refresh(); + return; + } + + // Legacy profile path (Fase 3). + if (f.profile.points.size() < 3) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Selected feature is not a sketch")); + m_status->Refresh(); + return; + } + m_constrain_feat = sel; + // Anchor the first profile point so H/V constraints don't let the sketch + // float freely; fix_point captures the point's current position in the solver. + if (f.constraints.empty()) + f.constraints.push_back(SketchConstraintDef{SketchConstraintType::Fix, 0, -1, -1, -1, 0.0}); + if (m_viewport) m_viewport->begin_constrain(f.profile, f.plane); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Pick 1-2 entities, then a constraint or dimension; right-click exits")); + m_status->Refresh(); +} + +// Why an entity-constraint pick was refused, as a localized string. The kernel's +// ConstraintReject is coarse on purpose (one reason covers several constraint types whose +// BUTTONS wear different words), so `type` disambiguates the wording without touching the +// kernel. Reuses today's exact strings so nothing regresses for a user or the ladder. +static wxString constraint_reject_text(ConstraintReject reason, SketchConstraintType type) +{ + using T = SketchConstraintType; + switch (reason) { + case ConstraintReject::NeedOneEntity: return _L("Pick an entity first"); + case ConstraintReject::NeedTwoEntities: return _L("Pick two entities first"); + case ConstraintReject::NeedALine: return _L("Horizontal and Vertical apply to a line"); + case ConstraintReject::NeedTwoLines: + if (type == T::Angle) return _L("Angle applies between two lines"); + if (type == T::Collinear) return _L("Collinear needs two lines"); + return _L("Parallel, perpendicular and equal length apply to two lines"); + case ConstraintReject::NeedTwoRounds: + if (type == T::EqualRadius) return _L("Equal radius needs two circles or arcs"); + return _L("Concentric needs two circles or arcs"); + case ConstraintReject::NeedTangentPair: return _L("Tangent needs a line and a circle/arc, or two circles/arcs"); + case ConstraintReject::NeedJoinablePoints: return _L("This constraint needs two entities with a point to join"); + case ConstraintReject::NeedMeasurablePoints: return _L("This dimension needs two entities with a point to measure between"); + case ConstraintReject::NeedPointAndLine: return _L("Midpoint needs a point and a line"); + case ConstraintReject::NeedTwoPointsOrLines: + if (type == T::Symmetric) return _L("Symmetric needs two points or two lines + an axis"); + return _L("Symmetric needs two points or two lines"); + case ConstraintReject::NeedAxisLine: return _L("Symmetric: pick two entities, then an axis line"); + case ConstraintReject::NeedRound: return _L("Radius/Diameter needs a circle or arc"); + case ConstraintReject::Unsupported: return _L("Unsupported constraint"); + case ConstraintReject::None: + default: return wxString(); + } +} + +// Write the typed value into every planned def. The planner returns the prefill in DISPLAY +// units and leaves def.value = 0; Angle is the one type whose stored value is not the number +// the user sees (it is radians), so the conversion lives here, exactly as the old +// apply_entity_constraint did on its Angle branch. +static void write_plan_value(std::vector& defs, double v) +{ + for (auto& d : defs) + d.value = (d.type == SketchConstraintType::Angle) ? v * M_PI / 180.0 : v; +} + +void DesignPanel::apply_entity_constraint(SketchConstraintType type) +{ + int e0 = -1, e1 = -1; + m_viewport->selected_constrain_entities(e0, e1); + const int e2 = m_viewport->selected_constrain_axis(); // Symmetric axis pick, -1 otherwise + + CadFeature& feat = m_doc.features[m_constrain_feat]; + const ConstraintPlan plan = plan_entity_constraint(feat.entities, e0, e1, e2, type); + + auto fail = [this](const wxString& msg) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(msg); + m_status->Refresh(); + }; + + switch (plan.kind) { + case ConstraintPlan::Kind::Reject: + fail(constraint_reject_text(plan.reason, type)); + return; + case ConstraintPlan::Kind::AskValue: + m_viewport->open_inline_value(plan.prefill, [this, plan](double v) { + std::vector defs = plan.defs; + write_plan_value(defs, v); + commit_entity_constraints(defs); + }); + return; // deferred: commit runs on the typed value + case ConstraintPlan::Kind::Apply: + commit_entity_constraints(plan.defs); + return; + } +} + +void DesignPanel::apply_live_constraint(SketchConstraintType type) +{ + // The in-session selection is the pick: first three indices, e2 being the axis Symmetric + // needs. Fewer than the type needs are left at -1 so plan_entity_constraint — the ONE + // place that knows how many picks a type takes — rejects them rather than this site + // guessing. Known limitation (comment, not solved): a constraint added to a LIVE sketch + // is not on the document undo stack — that stack holds committed features — so Ctrl+Z + // will not take it back until the sketch is committed. + const std::vector& sel = m_viewport->sketch_selection(); + const int e0 = sel.size() > 0 ? sel[0] : -1; + const int e1 = sel.size() > 1 ? sel[1] : -1; + const int e2 = sel.size() > 2 ? sel[2] : -1; + + const ConstraintPlan plan = plan_entity_constraint( + m_viewport->sketch_entities(), e0, e1, e2, type); + + auto fail = [this](const wxString& msg) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(msg); + m_status->Refresh(); + }; + // Shared commit: try_add_constraints appends→solves→keeps-or-rolls-back and leaves the + // geometry untouched on failure, so the same over-constrained message the committed path + // uses is the correct failure report here too. + auto commit = [this, fail](std::vector defs, double v) { + write_plan_value(defs, v); + if (!m_viewport->try_add_sketch_constraints(defs)) { + fail(_L("Constraint rejected (over-constrained)")); + return; + } + m_viewport->request_repaint(); + m_status->SetForegroundColour(wxNullColour); + // Say where it went and how to undo it, here at the moment of applying: the hint line + // only refreshes when the step tuple changes, which applying a constraint does not. + set_status(_L("Applied constraint · its badge is on the sketch — click the badge to remove it")); + m_status->Refresh(); + }; + + switch (plan.kind) { + case ConstraintPlan::Kind::Reject: + // "I applied Parallel and NOTHING HAPPENS" is this branch. The text named the + // REQUIREMENT ("applies to two lines") but never the CURRENT PICK, and a creation + // tool auto-selects only the entity it just drew — so after drawing two lines exactly + // one is selected and the button correctly refuses. Say how many are picked, or the + // refusal is indistinguishable from a dead button. + fail(wxString::Format(_L("%s — %d selected. Press Esc for the Select tool, click one " + "line, then Shift- or Ctrl-click the other."), + constraint_reject_text(plan.reason, type), int(sel.size()))); + return; + case ConstraintPlan::Kind::AskValue: + m_viewport->open_inline_value(plan.prefill, [plan, commit](double v) { + commit(plan.defs, v); + }); + return; + case ConstraintPlan::Kind::Apply: + commit(plan.defs, 0.0); + return; + } +} + +void DesignPanel::commit_entity_constraints(const std::vector& defs) +{ + if (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()) || + !m_viewport || defs.empty()) + return; + CadFeature& feat = m_doc.features[m_constrain_feat]; + // solve_sketch_feature rewrites entity coords even on failure, so snapshot + // to roll back a rejected (over-constrained) addition cleanly. Multiple defs + // (Symmetric on two lines) must solve together, so push all then resize back. + const std::vector saved = feat.entities; + const size_t before = feat.entity_constraints.size(); + // Undo boundary: adding a constraint. Without it Ctrl+Z reached PAST this edit to the + // previous boundary and threw away whatever happened in between — a constraint was the + // one document mutation the user could not take back on its own. + m_doc.checkpoint(); + for (const auto& d : defs) feat.entity_constraints.push_back(d); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) { + feat.entity_constraints.resize(before); + feat.entities = saved; + m_doc.abandon_checkpoint(); // fully restored above: nothing happened, so nothing to undo + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Constraint rejected (over-constrained)")); + m_status->Refresh(); + return; + } + m_doc.recompute(); + // The constraint lives in the recipe, so the save path has to be told the recipe moved; + // otherwise saving after a constraint edit wrote the blob from before it. + sync_recipe_to_model(); + update_undo_redo_buttons(); + m_viewport->update_constrain_entities(m_doc.features[m_constrain_feat].entities); + if (!m_doc.display_mesh.its.indices.empty()) + feed_bodies(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Applied constraint")); + m_status->Refresh(); + + refresh_constrain_dof(); // P3 DoF readout for the Constrain path + rebuild_constraint_list(); // C3.4 manager: a row appeared +} + +// Re-derive the solve state of the constrained feature and mirror it into the same +// DoF readout the in-session path uses, so "✓ Fully constrained" is reachable here. +void DesignPanel::refresh_constrain_dof() +{ + if (!m_dof_status || m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size())) + return; + const CadFeature& feat = m_doc.features[m_constrain_feat]; + std::vector ents = feat.entities; // already solved; re-solve is a cheap no-op + const SketchSolveResult r = sketch_solve(ents, feat.entity_constraints); + if (!r.ok) { + m_dof_status->SetForegroundColour(wxColour(235, 80, 80)); + m_dof_status->SetLabel(_L("✗ Conflicting constraints")); m_dof_status->Show(!m_dof_status->GetLabel().IsEmpty()); + } else if (r.dof == 0) { + m_dof_status->SetForegroundColour(wxColour(80, 200, 110)); + m_dof_status->SetLabel(_L("✓ Fully constrained")); m_dof_status->Show(!m_dof_status->GetLabel().IsEmpty()); + } else if (r.dof > 0) { + m_dof_status->SetForegroundColour(dp_ctl_text()); + m_dof_status->SetLabel(wxString::Format(_L("%d degrees of freedom"), r.dof)); m_dof_status->Show(!m_dof_status->GetLabel().IsEmpty()); + } else { + m_dof_status->SetLabel(wxString()); m_dof_status->Show(!m_dof_status->GetLabel().IsEmpty()); + } + m_dof_status->Refresh(); + update_cards_frame(); m_form->Layout(); +} + +// Human-readable label for a constraint row, e.g. "Coincident L0·P1 — L1·P0", +// "Horizontal L2", "Radius C3 = 7.00". Entities are tagged by type letter + index. +wxString DesignPanel::constraint_label(const SketchEntityConstraintDef& d) const +{ + using T = SketchConstraintType; + const CadFeature* feat = (m_constrain_feat >= 0 && m_constrain_feat < int(m_doc.features.size())) + ? &m_doc.features[m_constrain_feat] : nullptr; + auto tag = [&](int ei, SketchPointRole r) -> wxString { + if (ei < 0) return wxString(); + char c = 'E'; + if (feat && ei < int(feat->entities.size())) { + switch (feat->entities[ei].type) { + case SketchEntity::Type::Line: c = 'L'; break; + case SketchEntity::Type::Circle: c = 'C'; break; + case SketchEntity::Type::Arc: c = 'A'; break; + case SketchEntity::Type::Point: c = 'P'; break; + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: c = 'E'; break; + case SketchEntity::Type::BSpline: c = 'B'; break; + } + } + wxString s; s << wxUniChar(c) << ei; // avoid %c assert in Unicode build + if (r == SketchPointRole::P1) s += "·P1"; + else if (r == SketchPointRole::Center) s += "·Ctr"; + else if (r == SketchPointRole::P0) s += "·P0"; + return s; + }; + auto two = [&](const wxString& name) { + return d.eb >= 0 ? wxString::Format("%s %s — %s", name, tag(d.ea, d.ra), tag(d.eb, d.rb)) + : wxString::Format("%s %s", name, tag(d.ea, d.ra)); + }; + switch (d.type) { + case T::Fix: return wxString::Format(_L("Fix %s"), tag(d.ea, d.ra)); + case T::Coincident: return two(_L("Coincident")); + case T::Horizontal: return two(_L("Horizontal")); + case T::Vertical: return two(_L("Vertical")); + case T::Distance: return wxString::Format("%s = %s", two(_L("Distance")), en_format(d.value)); + case T::LockX: return wxString::Format(_L("Lock X %s"), tag(d.ea, d.ra)); + case T::LockY: return wxString::Format(_L("Lock Y %s"), tag(d.ea, d.ra)); + case T::EqualLength: return two(_L("Equal")); + case T::Parallel: return two(_L("Parallel")); + case T::Perpendicular: return two(_L("Perpendicular")); + case T::Concentric: return two(_L("Concentric")); + case T::Tangent: return two(_L("Tangent")); + case T::Midpoint: return two(_L("Midpoint")); + case T::Symmetric: return wxString::Format(_L("Symmetric %s — %s / %s"), + tag(d.ea, d.ra), tag(d.eb, d.rb), tag(d.ec, d.rc)); + case T::SymmetricAboutY: return wxString::Format(_L("Symmetric about Y axis %s — %s"), + tag(d.ea, d.ra), tag(d.eb, d.rb)); + case T::SymmetricAboutX: return wxString::Format(_L("Symmetric about X axis %s — %s"), + tag(d.ea, d.ra), tag(d.eb, d.rb)); + case T::Angle: return wxString::Format("%s = %s°", two(_L("Angle")), en_format(d.value * 180.0 / M_PI, 1)); + case T::Radius: return wxString::Format("%s %s = %s", _L("Radius"), tag(d.ea, d.ra), en_format(d.value)); + case T::Diameter: return wxString::Format("%s %s = %s", _L("Diameter"), tag(d.ea, d.ra), en_format(d.value)); + case T::PointOnLine: return two(_L("On line")); + case T::PointOnObject: return two(_L("On edge")); + } + return _L("Constraint"); +} + +bool DesignPanel::live_constraint_scope() const +{ + return m_viewport != nullptr && m_viewport->is_sketching() && + !m_viewport->is_constraining() && !m_viewport->is_constraining_entities(); +} + +// Rebuild the constraint-row list. Source depends on scope: a LIVE sketch session owns its +// constraints inside the sketch tool and has no committed feature yet, so the list read only +// the feature's and stayed empty for the whole session — constraints applied while drawing had +// no row, no ✗, and no name anywhere in the UI. +void DesignPanel::rebuild_constraint_list() +{ + if (m_constraint_rows == nullptr || m_form == nullptr) + return; + m_constraint_rows->Clear(true /* delete windows */); + m_constraint_sel = -1; + + const bool live = live_constraint_scope(); + const bool active = (m_constrain_feat >= 0 && m_constrain_feat < int(m_doc.features.size())); + const std::vector empty; + const std::vector& cons = + live ? m_viewport->sketch_constraints() + : active ? m_doc.features[m_constrain_feat].entity_constraints : empty; + + if (m_hdr_constraints) + m_hdr_constraints->SetLabel(wxString::Format(_L("Constraints (%d)"), int(cons.size()))); + + if (cons.empty()) { + auto* none = new wxStaticText(m_cards, wxID_ANY, _L("No constraints yet")); + none->SetForegroundColour(dp_sec_text()); + m_constraint_rows->Add(none, 0, wxTOP, 4); + } + for (int i = 0; i < int(cons.size()); ++i) { + auto* row = new wxBoxSizer(wxHORIZONTAL); + // Delete button first (fixed left position, always visible — long labels can + // horizontally scroll but ✗ stays put and clickable). BMP-safe ✗ glyph. + auto* del = new wxButton(m_cards, wxID_ANY, wxString::FromUTF8("✗"), + wxDefaultPosition, wxSize(26, -1)); + del->SetToolTip(_L("Delete constraint")); + del->Bind(wxEVT_BUTTON, [this, i](wxCommandEvent&) { delete_constraint(i); }); + // Clickable label: selecting it highlights the referenced entities. + auto* lbl = new wxButton(m_cards, wxID_ANY, constraint_label(cons[i]), + wxDefaultPosition, wxDefaultSize, wxBU_LEFT | wxBORDER_NONE); + lbl->Bind(wxEVT_BUTTON, [this, i](wxCommandEvent&) { highlight_constraint_entities(i); }); + row->Add(del, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6); + row->Add(lbl, 1, wxALIGN_CENTER_VERTICAL); + m_constraint_rows->Add(row, 0, wxEXPAND | wxTOP, 2); + } + + // Feed the same list to the viewport for the on-sketch glyph badges (C3.4b). + if (m_viewport) + m_viewport->set_constraint_glyphs(cons); + + m_cards->GetSizer()->Show(m_box_constraints, + m_ui_mode == UiMode::Constrain || live, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); +} + +// Push the entities referenced by constraint `idx` to the viewport as a yellow +// highlight (toggle off if the same row is clicked again). +void DesignPanel::highlight_constraint_entities(int idx) +{ + if (!m_viewport) + return; + const bool live = live_constraint_scope(); + if (!live && (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()))) + return; + const auto& cons = live ? m_viewport->sketch_constraints() + : m_doc.features[m_constrain_feat].entity_constraints; + if (idx < 0 || idx >= int(cons.size())) + return; + if (m_constraint_sel == idx) { // second click clears + m_constraint_sel = -1; + m_viewport->set_constraint_highlight({}); + return; + } + m_constraint_sel = idx; + const SketchEntityConstraintDef& d = cons[idx]; + std::vector ents; + for (int e : { d.ea, d.eb, d.ec }) + if (e >= 0) ents.push_back(e); + m_viewport->set_constraint_highlight(std::move(ents)); +} + +// Drop constraint `idx`, re-solve the feature, and refresh viewport + list + DoF. +void DesignPanel::delete_constraint(int idx) +{ + // Live session: the constraint lives in the sketch tool, not in any feature. Removing it + // re-solves and fires on_constraints_changed, which rebuilds these rows — so this branch + // deliberately does NOT call rebuild_constraint_list() itself (it would run twice, and the + // second run would delete the wxButton whose click handler is still on the stack). + if (live_constraint_scope()) { + if (!m_viewport->remove_sketch_constraint(idx)) + return; + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Constraint deleted")); + m_status->Refresh(); + return; + } + if (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()) || !m_viewport) + return; + CadFeature& feat = m_doc.features[m_constrain_feat]; + if (idx < 0 || idx >= int(feat.entity_constraints.size())) + return; + m_doc.checkpoint(); // undo boundary: deleting a constraint + feat.entity_constraints.erase(feat.entity_constraints.begin() + idx); + // Re-solve the remaining system (deleting a constraint can only free DoF, so it + // cannot fail for over-constraint; ignore the bool and refresh either way). + m_doc.solve_sketch_feature(m_constrain_feat); + m_doc.recompute(); + sync_recipe_to_model(); // the removal is part of the recipe + update_undo_redo_buttons(); + m_viewport->set_constraint_highlight({}); + m_viewport->update_constrain_entities(m_doc.features[m_constrain_feat].entities); + if (!m_doc.display_mesh.its.indices.empty()) + feed_bodies(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Constraint deleted")); + m_status->Refresh(); + refresh_constrain_dof(); + rebuild_constraint_list(); +} + +void DesignPanel::apply_edit_op(EditOp op) +{ + if (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()) || !m_viewport || + !m_viewport->is_constraining_entities()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Press Constrain on a sketch first")); + m_status->Refresh(); + return; + } + auto fail = [this](const wxString& msg) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(msg); + m_status->Refresh(); + }; + + int e0 = -1, e1 = -1; + m_viewport->selected_constrain_entities(e0, e1); + CadFeature& feat = m_doc.features[m_constrain_feat]; + const int n = int(feat.entities.size()); + if (e0 < 0 || e0 >= n) { fail(_L("Pick an entity first")); return; } + using Type = SketchEntity::Type; + + switch (op) { + case EditOp::Mirror: { + if (e1 < 0 || e1 >= n) { fail(_L("Pick the entity, then a mirror-axis line")); return; } + const SketchEntity& axis = feat.entities[e1]; + if (axis.type != Type::Line) { fail(_L("Mirror axis must be a line")); return; } + auto out = SketchEngine::mirror_entities({ feat.entities[e0] }, axis.p0, axis.p1); + if (out.empty()) { fail(_L("Mirror produced nothing")); return; } + const int mi = n; // index the single mirrored copy lands at (n entities before push) + for (auto& m : out) feat.entities.push_back(m); + + // C4a: bind the mirror to its source with Symmetric constraints about the + // axis, so the pair stays mirror-symmetric under later solves and drags. + // mirror_entities preserves P0/P1/Center ordering, so the constraints are + // satisfied by construction; if the solver still rejects them (degenerate + // axis, redundancy) keep the geometry and drop only the binding. + { + using R = SketchPointRole; + using CT = SketchConstraintType; + const std::vector saved_ents = feat.entities; + const size_t cons_before = feat.entity_constraints.size(); + SketchEntityConstraintDef d; d.type = CT::Symmetric; d.ea = e0; d.eb = mi; d.ec = e1; + const Type st = feat.entities[e0].type; + if (st == Type::Line) { + d.ra = R::P0; d.rb = R::P0; feat.entity_constraints.push_back(d); + d.ra = R::P1; d.rb = R::P1; feat.entity_constraints.push_back(d); + } else if (st == Type::Arc || st == Type::Circle) { + d.ra = R::Center; d.rb = R::Center; feat.entity_constraints.push_back(d); + } else if (st == Type::Point) { + d.ra = R::P0; d.rb = R::P0; feat.entity_constraints.push_back(d); + } + if (feat.entity_constraints.size() != cons_before && + !m_doc.solve_sketch_feature(m_constrain_feat)) { + feat.entity_constraints.resize(cons_before); + feat.entities = saved_ents; + } + } + break; + } + case EditOp::Offset: { + const int a = e0; + request_value(_L("Offset distance (+left / -right of direction)"), 1.0, -100000.0, 100000.0, + [this, a](double d) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + auto out = SketchEngine::offset_entities({ f.entities[a] }, d); + if (out.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Offset collapsed the entity")); m_status->Refresh(); return; + } + const int ni = int(f.entities.size()); // offset copy lands here + for (auto& o : out) f.entities.push_back(o); + + // C4c: bind the offset copy to its source. Offset only ADDS geometry + // (the source is untouched), so unlike trim/fillet there are no stale + // constraints to drop — just glue the pair. A line offset stays + // Parallel to its source; an arc/circle offset stays Concentric (same + // centre). Single constraint, so no degradation ladder; solve and roll + // the binding back if the solver rejects it (keep the geometry). + { + using CT = SketchConstraintType; + const Type st = f.entities[a].type; + SketchEntityConstraintDef d2; d2.ea = a; d2.eb = ni; + bool emit = true; + if (st == Type::Line) d2.type = CT::Parallel; + else if (st == Type::Arc || st == Type::Circle) d2.type = CT::Concentric; + else emit = false; + if (emit) { + const size_t cbefore = f.entity_constraints.size(); + f.entity_constraints.push_back(d2); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + f.entity_constraints.resize(cbefore); + } + } + after_edit_op(); + }); + return; // deferred: edit runs on Confirm + } + case EditOp::Fillet: { + if (e1 < 0 || e1 >= n) { fail(_L("Pick two lines to fillet")); return; } + if (feat.entities[e0].type != Type::Line || feat.entities[e1].type != Type::Line) { + fail(_L("Fillet needs two lines")); return; + } + const int a = e0, b = e1; + request_value(_L("Fillet radius"), 1.0, 0.001, 100000.0, [this, a, b](double r) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size()) || b >= int(f.entities.size())) return; + SketchEntity a_out, b_out, arc_out; + if (!SketchEngine::fillet_lines(f.entities[a], f.entities[b], r, a_out, b_out, arc_out)) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Fillet failed (parallel lines or radius too large)")); + m_status->Refresh(); return; + } + f.entities[a] = a_out; + f.entities[b] = b_out; + const int arc = int(f.entities.size()); + f.entities.push_back(arc_out); + + // C4b: glue the fillet arc to the two trimmed lines so it survives a + // re-solve instead of floating free. arc.p0 sits on line a's moved + // endpoint, arc.p1 on line b's; recover the exact endpoint roles by + // nearest match, then emit Coincident (essential — keeps the corner + // joined) + Tangent (smoothness). The full set can be redundant for the + // arc, so try it first and drop tangents progressively until the solver + // accepts it; the Coincident pins survive even if tangency is rejected. + { + using R = SketchPointRole; + using CT = SketchConstraintType; + auto role_near = [](const SketchEntity& ln, const Vec2d& p) -> R { + return ((ln.p0 - p).squaredNorm() <= (ln.p1 - p).squaredNorm()) ? R::P0 : R::P1; + }; + const R ra = role_near(f.entities[a], arc_out.p0); + const R rb = role_near(f.entities[b], arc_out.p1); + + // Fillet trims both lines back from the shared corner, so any + // constraint anchored to a trimmed endpoint is now stale: the corner + // Coincident that joined (a,ra)·(b,rb), and each line's own length + // Distance (its length just changed). Drop them before re-binding — + // leaving them would fight the new arc geometry and reject every + // binding below. + auto refs = [](const SketchEntityConstraintDef& d, int e, R r) { + return (d.ea == e && d.ra == r) || (d.eb == e && d.rb == r); + }; + auto self_len = [](const SketchEntityConstraintDef& d, int e) { + return d.type == CT::Distance && d.ea == e && d.eb == e; + }; + auto& cs = f.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& d) { + return (d.type == CT::Coincident && refs(d, a, ra) && refs(d, b, rb)) + || self_len(d, a) || self_len(d, b); + }), cs.end()); + + auto coin = [&](R arc_role, int ln, R ln_role) { + SketchEntityConstraintDef d; d.type = CT::Coincident; + d.ea = arc; d.ra = arc_role; d.eb = ln; d.rb = ln_role; return d; + }; + auto tang = [&](int ln) { + SketchEntityConstraintDef d; d.type = CT::Tangent; d.ea = arc; d.eb = ln; return d; + }; + const std::vector> ladder = { + { coin(R::P0, a, ra), coin(R::P1, b, rb), tang(a), tang(b) }, + { coin(R::P0, a, ra), coin(R::P1, b, rb), tang(a) }, + { coin(R::P0, a, ra), coin(R::P1, b, rb) }, + }; + const std::vector saved = f.entities; + const size_t cbefore = f.entity_constraints.size(); + for (const auto& set : ladder) { + for (const auto& d : set) f.entity_constraints.push_back(d); + if (m_doc.solve_sketch_feature(m_constrain_feat)) break; // accepted + f.entity_constraints.resize(cbefore); + f.entities = saved; + } + } + after_edit_op(); + }); + return; // deferred: edit runs on Confirm + } + + case EditOp::Chamfer: { + if (e1 < 0 || e1 >= n) { fail(_L("Pick two lines to chamfer")); return; } + if (feat.entities[e0].type != Type::Line || feat.entities[e1].type != Type::Line) { + fail(_L("Chamfer needs two lines")); return; + } + const int a = e0, b = e1; + request_value(_L("Chamfer distance"), 1.0, 0.001, 100000.0, [this, a, b](double d) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size()) || b >= int(f.entities.size())) return; + SketchEntity a_out, b_out, seg_out; + if (!SketchEngine::chamfer_lines(f.entities[a], f.entities[b], d, a_out, b_out, seg_out)) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Chamfer failed (parallel lines or distance too large)")); + m_status->Refresh(); return; + } + f.entities[a] = a_out; + f.entities[b] = b_out; + const int seg = int(f.entities.size()); + f.entities.push_back(seg_out); + + // C4.6: like fillet, chamfer trims both lines back from the shared corner + // and inserts a connecting segment. MUTATING op: drop the stale corner + // Coincident that joined the two trimmed endpoints and each line's own + // length Distance (lengths just changed), then pin the new segment's ends + // onto the trimmed line endpoints with Coincident so it survives re-solve. + { + using R = SketchPointRole; + using CT = SketchConstraintType; + auto role_near = [](const SketchEntity& ln, const Vec2d& p) -> R { + return ((ln.p0 - p).squaredNorm() <= (ln.p1 - p).squaredNorm()) ? R::P0 : R::P1; + }; + const R ra = role_near(f.entities[a], seg_out.p0); + const R rb = role_near(f.entities[b], seg_out.p1); + + auto refs = [](const SketchEntityConstraintDef& dd, int e, R r) { + return (dd.ea == e && dd.ra == r) || (dd.eb == e && dd.rb == r); + }; + auto self_len = [](const SketchEntityConstraintDef& dd, int e) { + return dd.type == CT::Distance && dd.ea == e && dd.eb == e; + }; + auto& cs = f.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& dd) { + return (dd.type == CT::Coincident && refs(dd, a, ra) && refs(dd, b, rb)) + || self_len(dd, a) || self_len(dd, b); + }), cs.end()); + + auto coin = [&](R seg_role, int ln, R ln_role) { + SketchEntityConstraintDef dd; dd.type = CT::Coincident; + dd.ea = seg; dd.ra = seg_role; dd.eb = ln; dd.rb = ln_role; return dd; + }; + const std::vector saved = f.entities; + const size_t cbefore = f.entity_constraints.size(); + f.entity_constraints.push_back(coin(R::P0, a, ra)); + f.entity_constraints.push_back(coin(R::P1, b, rb)); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) { + f.entity_constraints.resize(cbefore); // keep geometry, drop pins + f.entities = saved; + } + } + after_edit_op(); + }); + return; // deferred: edit runs on Confirm + } + + case EditOp::Trim: + case EditOp::Extend: { + // Trim accepts Line/Arc/Circle subjects; Extend accepts Line/Arc (a Circle + // is already closed, so there is nothing to extend). + const Type st = feat.entities[e0].type; + const bool subject_ok = (op == EditOp::Trim) + ? (st == Type::Line || st == Type::Arc || st == Type::Circle) + : (st == Type::Line || st == Type::Arc); + if (!subject_ok) { + fail(op == EditOp::Trim ? _L("Trim works on lines, arcs and circles") + : _L("Extend works on lines and arcs")); + return; + } + Vec2d pick; + if (!m_viewport->pick0_point(pick)) { fail(_L("Pick the edge to trim/extend")); return; } + std::vector others; + others.reserve(n > 0 ? n - 1 : 0); + for (int i = 0; i < n; ++i) + if (i != e0) others.push_back(feat.entities[i]); + const SketchEntity before = feat.entities[e0]; // C4.1: detect the moved endpoint + const bool ok = (op == EditOp::Trim) + ? SketchEngine::trim_entity(feat.entities[e0], others, pick) + : SketchEngine::extend_entity(feat.entities[e0], others, pick); + if (!ok) { fail(op == EditOp::Trim ? _L("Nothing to trim at the pick") + : _L("No edge to extend to")); return; } + + // C4.1: trim/extend slides ONE endpoint of the subject along its own + // direction (line) or sweep (arc). That (a) kills the subject's + // self-length Distance dim and (b) detaches the moved endpoint from any + // corner Coincident/PointOn* it used to hold. Drop both stale classes, + // then re-anchor the moved endpoint onto the entity it now lands on with a + // PointOnObject (the bridge picks PT_ON_LINE / PT_ON_CIRCLE). A Circle + // subject restructures into an Arc (both endpoints new) — skip the + // re-anchor there; its self constraints (Radius/Concentric) survive, so + // there is nothing stale to drop either. + if (st == Type::Line || st == Type::Arc) { + using R = SketchPointRole; + using CT = SketchConstraintType; + const SketchEntity& aft = feat.entities[e0]; + R moved = R::P0; + Vec2d P; + if (st == Type::Line) { + const bool p0_moved = (before.p0 - aft.p0).squaredNorm() + > (before.p1 - aft.p1).squaredNorm(); + moved = p0_moved ? R::P0 : R::P1; + P = p0_moved ? aft.p0 : aft.p1; + } else { + const bool start_moved = std::abs(before.start_angle - aft.start_angle) + > std::abs(before.end_angle - aft.end_angle); + moved = start_moved ? R::P0 : R::P1; + const double ang = start_moved ? aft.start_angle : aft.end_angle; + P = aft.center + aft.radius * Vec2d(std::cos(ang), std::sin(ang)); + } + + // Drop stale: subject self-length Distance + any Coincident/PointOn* + // pinning the moved endpoint to its old corner. + auto refs = [&](const SketchEntityConstraintDef& d, R r) { + return (d.ea == e0 && d.ra == r) || (d.eb == e0 && d.rb == r); + }; + auto& cs = feat.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& d) { + if (d.type == CT::Distance && d.ea == e0 && d.eb == e0) return true; + return (d.type == CT::Coincident || d.type == CT::PointOnLine + || d.type == CT::PointOnObject) && refs(d, moved); + }), cs.end()); + + // Find which other entity the moved endpoint now lies on (Line/Circle + // cutters only — PT_ON_* needs a line or circle primitive). + int cutter = -1; + const double tol = 1e-5; + for (int i = 0; i < int(feat.entities.size()); ++i) { + if (i == e0) continue; + const SketchEntity& o = feat.entities[i]; + if (o.type == Type::Line) { + Vec2d dv = o.p1 - o.p0; + const double L2 = dv.dot(dv); + if (L2 < 1e-18) continue; + const double t = (P - o.p0).dot(dv) / L2; + if (t < -1e-6 || t > 1.0 + 1e-6) continue; + if ((o.p0 + t * dv - P).norm() < tol) { cutter = i; break; } + } else if (o.type == Type::Circle) { + if (std::abs((P - o.center).norm() - o.radius) < tol) { cutter = i; break; } + } + } + + // Re-anchor with PointOnObject; keep geometry + the stale-drop even if + // the solver rejects the new (possibly redundant) binding. + if (cutter >= 0) { + const size_t cbefore = feat.entity_constraints.size(); + SketchEntityConstraintDef d; d.type = CT::PointOnObject; + d.ea = e0; d.ra = moved; d.eb = cutter; + feat.entity_constraints.push_back(d); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + feat.entity_constraints.resize(cbefore); + } + } + break; + } + case EditOp::Array: { + // C4.4 linear array. Additive op (originals untouched, copies appended) -> + // no stale constraints to drop. Collect count, then spacing; the array runs + // along the subject line's own direction (or +X for non-lines). Copies are + // pure translates, so for lines they are Parallel + EqualLength to the + // source by construction -> bind each copy to the source in a star web; for + // arc/circle subjects the translate preserves radius (but not the centre), + // so the web is a per-copy Radius dimension instead (see below). + const int a = e0; + request_value(_L("Array count (incl. original)"), 3.0, 2.0, 200.0, + [this, a](double cnt_d) { + const int count = std::max(2, int(cnt_d + 0.5)); + request_value(_L("Spacing (mm)"), 20.0, -100000.0, 100000.0, + [this, a, count](double sp) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + using Type = SketchEntity::Type; + // Snapshot everything we need from the source BEFORE pushing the + // copies: push_back can reallocate f.entities and dangle any + // reference into it. Copy the subject by value. + const SketchEntity src = f.entities[a]; + const Type src_type = src.type; + // Default direction: perpendicular to a line (so copies stack + // into a visible, non-overlapping parallel pattern rather than + // extending collinearly); +X for non-line subjects. + Vec2d dir(1.0, 0.0); + if (src_type == Type::Line) { + const Vec2d t = src.p1 - src.p0; + if (t.norm() > 1e-9) { + const Vec2d u = t.normalized(); + dir = Vec2d(-u.y(), u.x()); + } + } + auto copies = SketchEngine::array_entities( + { src }, count, sp * dir, 0.0, Vec2d(0, 0)); + if (copies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Array produced nothing")); m_status->Refresh(); return; + } + const int base = int(f.entities.size()); // first copy index + for (auto& c : copies) f.entities.push_back(c); + + if (src_type == Type::Line) { + using CT = SketchConstraintType; + // Bind every copy to the source in a star web. Emit the + // WHOLE web before solving (a per-constraint solve would run + // while later copies are still unconstrained, which the + // solver rejects), then degrade as a set: try Parallel + + // EqualLength, fall back to Parallel only (EqualLength can be + // rank-deficient on exact congruent copies), then to bare + // geometry. Keep the geometry regardless. + const size_t cb = f.entity_constraints.size(); + auto build_web = [&](bool with_equal) { + f.entity_constraints.resize(cb); + for (int k = 0; k < int(copies.size()); ++k) { + SketchEntityConstraintDef dp; dp.type = CT::Parallel; + dp.ea = a; dp.eb = base + k; + f.entity_constraints.push_back(dp); + if (with_equal) { + SketchEntityConstraintDef de; de.type = CT::EqualLength; + de.ea = a; de.eb = base + k; + f.entity_constraints.push_back(de); + } + } + }; + build_web(true); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) { + build_web(false); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + f.entity_constraints.resize(cb); + } + } else if (src_type == Type::Arc || src_type == Type::Circle) { + // Curved subject: translation preserves the radius but + // marches the centres apart, so the copies are NOT + // concentric. There is no EQUAL_RADIUS in the constraint + // enum, so pin each copy's radius to the source value with + // a per-copy Radius dimension (keeps the array equal-radius + // and documents intent, mirroring the line web). Solve and + // roll the whole web back if the solver rejects it. + using CT = SketchConstraintType; + const size_t cb = f.entity_constraints.size(); + for (int k = 0; k < int(copies.size()); ++k) { + SketchEntityConstraintDef dr; dr.type = CT::Radius; + dr.ea = base + k; dr.value = src.radius; + f.entity_constraints.push_back(dr); + } + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + f.entity_constraints.resize(cb); + } + after_edit_op(); + }); + }); + return; // deferred: edit runs on the two Confirms + } + case EditOp::Move: { + // C4.5 Transform (move). MUTATING op: the subject is translated in place + // (kernel transform_entities with angle=0, scale=1). Pure translation + // PRESERVES orientation and length, so intrinsic + orientation constraints + // survive (Horizontal/Vertical/Parallel/Perpendicular/EqualLength/Angle, + // self-length Distance, Radius/Diameter); it BREAKS position-coupling ones + // (Coincident/PointOn*/Concentric/Symmetric/Midpoint/Fix/LockX/LockY, and + // any Distance tying the subject to a *different* entity). Per the governing + // P4 insight, drop those before re-solving — otherwise the solver drags the + // subject straight back to satisfy them and the move never sticks. + const int a = e0; + request_value(_L("Move dX (mm)"), 20.0, -100000.0, 100000.0, + [this, a](double dx) { + request_value(_L("Move dY (mm)"), 0.0, -100000.0, 100000.0, + [this, a, dx](double dy) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + auto out = SketchEngine::transform_entities( + { f.entities[a] }, Vec2d(dx, dy), 0.0, 1.0, Vec2d(0, 0)); + if (out.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Move produced nothing")); m_status->Refresh(); return; + } + f.entities[a] = out[0]; + + using CT = SketchConstraintType; + auto refs_a = [&](const SketchEntityConstraintDef& d) { + return d.ea == a || d.eb == a || d.ec == a; + }; + auto& cs = f.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& d) { + if (!refs_a(d)) return false; + switch (d.type) { + case CT::Coincident: case CT::PointOnLine: case CT::PointOnObject: + case CT::Concentric: case CT::Symmetric: case CT::Midpoint: + case CT::Fix: case CT::LockX: case CT::LockY: + return true; // position-coupling: broken by translation + case CT::Distance: + // self-length (ea==eb==a) survives translation; a + // distance to a *different* entity does not. + return !(d.ea == a && d.eb == a); + default: + return false; // orientation/length: preserved + } + }), cs.end()); + + // The surviving constraints are satisfied by construction + // (translation preserves them); re-solve to fold the new + // position in, keep the geometry even if the solver balks. + m_doc.solve_sketch_feature(m_constrain_feat); + after_edit_op(); + }); + }); + return; // deferred: edit runs on the two Confirms + } + case EditOp::Rotate: { + // C4.5b Transform (rotate-in-place about the subject centroid). MUTATING op. + // Rotation PRESERVES intrinsic size (length/radius) but changes the subject's + // ORIENTATION and the POSITION of its points. So only the size constraints + // survive (EqualLength/Radius/Diameter + self-length Distance); every + // position- or orientation-coupling constraint is broken and must be dropped + // before re-solving, otherwise the solver spins the subject back to satisfy + // them and the rotation never sticks (governing P4 insight). + const int a = e0; + request_value(_L("Rotate angle (deg)"), 45.0, -360.0, 360.0, + [this, a](double deg) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + auto centroid_of = [](const SketchEntity& e) -> Vec2d { + using T = SketchEntity::Type; + switch (e.type) { + case T::Line: return 0.5 * (e.p0 + e.p1); + case T::Arc: case T::Circle: case T::Ellipse: case T::EllipseArc: + return e.center; + case T::BSpline: + if (!e.ctrl.empty()) { + Vec2d s(0, 0); for (auto& p : e.ctrl) s += p; + return s / double(e.ctrl.size()); + } + return 0.5 * (e.p0 + e.p1); + default: return e.p0; // Point + } + }; + const Vec2d piv = centroid_of(f.entities[a]); + auto out = SketchEngine::transform_entities( + { f.entities[a] }, Vec2d(0, 0), deg * M_PI / 180.0, 1.0, piv); + if (out.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Rotate produced nothing")); m_status->Refresh(); return; + } + f.entities[a] = out[0]; + + using CT = SketchConstraintType; + auto refs_a = [&](const SketchEntityConstraintDef& d) { + return d.ea == a || d.eb == a || d.ec == a; + }; + auto& cs = f.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& d) { + if (!refs_a(d)) return false; + switch (d.type) { + case CT::EqualLength: case CT::Radius: case CT::Diameter: + return false; // intrinsic size: preserved by rotation + case CT::Distance: + return !(d.ea == a && d.eb == a); // self-length survives + default: + return true; // position/orientation-coupling: broken + } + }), cs.end()); + + m_doc.solve_sketch_feature(m_constrain_feat); + after_edit_op(); + }); + return; // deferred: edit runs on Confirm + } + case EditOp::Scale: { + // C4.5c Transform (uniform scale-in-place about the subject centroid). MUTATING + // op. Uniform scaling PRESERVES orientation and angles (Horizontal/Vertical/ + // Parallel/Perpendicular/Angle survive) but changes SIZE and point POSITIONS: + // drop every size constraint (Radius/Diameter/EqualLength/any Distance) and + // every position-coupling constraint before re-solving, else the solver + // rescales the subject back to satisfy them. + const int a = e0; + request_value(_L("Scale factor"), 2.0, 0.01, 1000.0, + [this, a](double sf) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + auto centroid_of = [](const SketchEntity& e) -> Vec2d { + using T = SketchEntity::Type; + switch (e.type) { + case T::Line: return 0.5 * (e.p0 + e.p1); + case T::Arc: case T::Circle: case T::Ellipse: case T::EllipseArc: + return e.center; + case T::BSpline: + if (!e.ctrl.empty()) { + Vec2d s(0, 0); for (auto& p : e.ctrl) s += p; + return s / double(e.ctrl.size()); + } + return 0.5 * (e.p0 + e.p1); + default: return e.p0; // Point + } + }; + const Vec2d piv = centroid_of(f.entities[a]); + auto out = SketchEngine::transform_entities( + { f.entities[a] }, Vec2d(0, 0), 0.0, sf, piv); + if (out.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Scale produced nothing")); m_status->Refresh(); return; + } + f.entities[a] = out[0]; + + using CT = SketchConstraintType; + auto refs_a = [&](const SketchEntityConstraintDef& d) { + return d.ea == a || d.eb == a || d.ec == a; + }; + auto& cs = f.entity_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), + [&](const SketchEntityConstraintDef& d) { + if (!refs_a(d)) return false; + switch (d.type) { + case CT::Horizontal: case CT::Vertical: case CT::Parallel: + case CT::Perpendicular: case CT::Angle: + return false; // orientation/angle: preserved by uniform scale + default: + return true; // size + position-coupling: broken + } + }), cs.end()); + + m_doc.solve_sketch_feature(m_constrain_feat); + after_edit_op(); + }); + return; // deferred: edit runs on Confirm + } + case EditOp::PolarArray: { + // Polar array about the subject centroid. ADDITIVE op (originals untouched, + // count-1 rotated copies appended) -> no stale constraints to drop. Copies + // are rigid rotations of the source, so they preserve LENGTH but NOT + // orientation: bind each copy to the source with EqualLength only (Parallel + // does NOT hold under rotation, unlike the linear-array web). Arc/circle + // subjects rotate about their own centre, so their copies stay Concentric + + // equal-radius instead (see below). Dialogs: count + // then total sweep; angle_step = sweep/count spreads them evenly (last copy + // lands just shy of the original on a full 360). + const int a = e0; + request_value(_L("Polar count (incl. original)"), 6.0, 2.0, 200.0, + [this, a](double cnt_d) { + const int count = std::max(2, int(cnt_d + 0.5)); + request_value(_L("Total sweep (deg)"), 360.0, -360.0, 360.0, + [this, a, count](double sweep_deg) { + CadFeature& f = m_doc.features[m_constrain_feat]; + if (a >= int(f.entities.size())) return; + using Type = SketchEntity::Type; + // Snapshot the subject by value BEFORE pushing copies: push_back + // can reallocate f.entities and dangle a reference into it. + const SketchEntity src = f.entities[a]; + const Type src_type = src.type; + auto centroid_of = [](const SketchEntity& e) -> Vec2d { + using T = SketchEntity::Type; + switch (e.type) { + case T::Line: return 0.5 * (e.p0 + e.p1); + case T::Arc: case T::Circle: case T::Ellipse: case T::EllipseArc: + return e.center; + case T::BSpline: + if (!e.ctrl.empty()) { + Vec2d s(0, 0); for (auto& p : e.ctrl) s += p; + return s / double(e.ctrl.size()); + } + return 0.5 * (e.p0 + e.p1); + default: return e.p0; // Point + } + }; + const Vec2d piv = centroid_of(src); + const double angle_step = (sweep_deg * M_PI / 180.0) / double(count); + auto copies = SketchEngine::array_entities( + { src }, count, Vec2d(0, 0), angle_step, piv); + if (copies.empty()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Polar array produced nothing")); m_status->Refresh(); return; + } + const int base = int(f.entities.size()); // first copy index + for (auto& c : copies) f.entities.push_back(c); + + if (src_type == Type::Line) { + using CT = SketchConstraintType; + // Rotational web: each copy is EqualLength to the source + // (rotation preserves length; orientation differs so NO + // Parallel). Emit the whole web before solving, then fall + // back to bare geometry if it is rank-deficient. + const size_t cb = f.entity_constraints.size(); + for (int k = 0; k < int(copies.size()); ++k) { + SketchEntityConstraintDef de; de.type = CT::EqualLength; + de.ea = a; de.eb = base + k; + f.entity_constraints.push_back(de); + } + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + f.entity_constraints.resize(cb); + } else if (src_type == Type::Arc || src_type == Type::Circle) { + // Curved subject: the polar pivot is the subject centroid, + // which for an arc/circle IS its own centre. Rotating about + // that centre keeps every copy CONCENTRIC with the source and + // at the same radius (only the angular position shifts). Bind + // each copy with Concentric + a per-copy Radius dimension; + // degrade to Radius-only, then to bare geometry, keeping the + // geometry regardless. + using CT = SketchConstraintType; + const size_t cb = f.entity_constraints.size(); + auto build_web = [&](bool with_concentric) { + f.entity_constraints.resize(cb); + for (int k = 0; k < int(copies.size()); ++k) { + if (with_concentric) { + SketchEntityConstraintDef dc; dc.type = CT::Concentric; + dc.ea = a; dc.eb = base + k; + f.entity_constraints.push_back(dc); + } + SketchEntityConstraintDef dr; dr.type = CT::Radius; + dr.ea = base + k; dr.value = src.radius; + f.entity_constraints.push_back(dr); + } + }; + build_web(true); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) { + build_web(false); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) + f.entity_constraints.resize(cb); + } + } + after_edit_op(); + }); + }); + return; // deferred: edit runs on the two Confirms + } + } + + after_edit_op(); +} + +void DesignPanel::after_edit_op() +{ + if (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()) || !m_viewport) + return; + m_doc.recompute(); + m_viewport->set_constraint_highlight({}); // entity indices may have shifted + m_viewport->update_constrain_entities(m_doc.features[m_constrain_feat].entities); + // Refresh the committed-sketch overlay too: it caches the entity list at + // constrain-entry, so a relocating edit (Move/Trim/Extend) would otherwise + // leave a stale ghost of the pre-edit geometry beside the new position. + sync_sketch_display(); + if (!m_doc.display_mesh.its.indices.empty()) + feed_bodies(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Applied edit")); + m_status->Refresh(); + refresh_constrain_dof(); + rebuild_constraint_list(); +} + +void DesignPanel::request_value(const wxString& label, double def, double mn, double mx, + std::function cont, + std::function on_cancel) +{ + m_value_cont = std::move(cont); + m_value_cancel = std::move(on_cancel); + m_value_min = mn; + m_value_max = mx; + m_value_label->SetLabel(label); + m_value_input->ChangeValue(en_format(def)); // '.' decimals, no EVT_TEXT feedback + m_cards->GetSizer()->Show(m_box_value, true, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + m_value_input->SetFocus(); + m_value_input->SetSelection(-1, -1); // select all so typing replaces the value + m_status->SetForegroundColour(wxNullColour); + set_status(label + _L(" — type a value, press Enter (or Confirm)")); + m_status->Refresh(); +} + +void DesignPanel::confirm_value() +{ + if (!m_value_cont) { cancel_value(); return; } + double v = 0.0; + if (!en_parse(m_value_input->GetValue(), v)) { m_value_input->SetFocus(); return; } + v = std::min(std::max(v, m_value_min), m_value_max); // clamp to range + auto cont = m_value_cont; // copy, then clear before running so a + m_value_cont = nullptr; // re-entrant request_value can re-arm cleanly + m_value_cancel = nullptr; // confirmed: drop the cancel action + m_cards->GetSizer()->Show(m_box_value, false, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + cont(v); // run the deferred constraint / edit-op apply +} + +void DesignPanel::cancel_value() +{ + const bool was_open = (m_value_cont != nullptr); + m_value_cont = nullptr; + auto on_cancel = m_value_cancel; // copy, clear, then run (re-entrancy safe) + m_value_cancel = nullptr; + if (m_box_value) + m_cards->GetSizer()->Show(m_box_value, false, true); + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + if (was_open) { + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + } + if (on_cancel) + on_cancel(); // e.g. keep a pending line segment as drawn +} + +void DesignPanel::apply_constraint(SketchConstraintType type) +{ + // 1. LIVE sketch session: constrain the in-session selection while drawing. The + // discriminator must exclude BOTH constrain modes — begin_constrain_entities AND + // begin_constrain both set m_active, so is_sketching() alone is true during a committed + // Constrain session; without the guards this new path hijacks those and breaks every + // existing constraint rung. !is_constraining() also covers is_constraining_entities() + // (both require Mode::Constrain); it is spelled out for the two reasons a reader expects. + if (m_viewport && m_viewport->is_sketching() && + !m_viewport->is_constraining() && !m_viewport->is_constraining_entities()) { + apply_live_constraint(type); + return; + } + + if (m_constrain_feat < 0 || m_constrain_feat >= int(m_doc.features.size()) || + m_viewport == nullptr) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Press Constrain on a sketch first")); + m_status->Refresh(); + return; + } + + // 2. Entity sketches (Fase 4.2) route through the entity-constraint path. + if (m_viewport->is_constraining_entities()) { + apply_entity_constraint(type); + return; + } + + // 3. Legacy profile path. + if (!m_viewport->is_constraining()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Press Constrain on a sketch first")); + m_status->Refresh(); + return; + } + int a = -1, b = -1; + if (!m_viewport->selected_segment(a, b)) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Pick a segment in the viewport first")); + m_status->Refresh(); + return; + } + CadFeature& feat = m_doc.features[m_constrain_feat]; + // solve_sketch_feature rewrites profile.points even on failure, so snapshot + // the geometry to roll back a rejected constraint cleanly. + const std::vector saved_pts = feat.profile.points; + m_doc.checkpoint(); // undo boundary: adding a constraint (profile sketches) + feat.constraints.push_back(SketchConstraintDef{type, a, b, -1, -1, 0.0}); + if (!m_doc.solve_sketch_feature(m_constrain_feat)) { + feat.constraints.pop_back(); // reject the non-converging addition + feat.profile.points = saved_pts; // and restore the pre-solve geometry + m_doc.abandon_checkpoint(); // restored: no state change, so no undo step + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Constraint rejected (over-constrained)")); + m_status->Refresh(); + return; + } + m_doc.recompute(); + sync_recipe_to_model(); + update_undo_redo_buttons(); + m_viewport->update_constrain_profile(m_doc.features[m_constrain_feat].profile.points); + if (!m_doc.display_mesh.its.indices.empty()) + feed_bodies(); + m_status->SetForegroundColour(wxNullColour); + set_status(type == SketchConstraintType::Horizontal ? _L("Applied Horizontal") + : _L("Applied Vertical")); + m_status->Refresh(); +} + +void DesignPanel::reset_edit_state() +{ + m_edit_index = -1; +} + +int DesignPanel::resolve_extrude_sketch() const +{ + int sel = tree_selection(); + if (sel != wxNOT_FOUND && sel < int(m_doc.features.size()) && + m_doc.features[sel].type == CadFeatureType::Sketch) + return sel; + for (int i = int(m_doc.features.size()) - 1; i >= 0; --i) + if (m_doc.features[i].type == CadFeatureType::Sketch) return i; + return -1; +} + +void DesignPanel::load_feature_into_dialog(const CadFeature& f) +{ + switch (f.type) { + case CadFeatureType::Sketch: + m_shape->SetSelection(f.shape == SketchShape::Circle ? 1 : 0); + m_width->SetValue(f.width); + m_height->SetValue(f.height); + m_radius->SetValue(f.radius); + break; + case CadFeatureType::Extrude: + m_distance->SetValue(f.distance); + m_mode->SetSelection(static_cast(f.mode)); // New=0,Add=1,Cut=2,Intersect=3 + m_extrude_end->SetSelection(static_cast(f.extrude_end)); + m_distance2->SetValue(f.distance2); + m_taper->SetValue(f.taper_deg); + m_flip->SetValue(f.flip); + m_extrude_sketch_ref = f.sketch_ref; + m_sel_solid_body = f.target_body; // preserve which body on re-edit + if (m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size())) + m_extrude_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_extrude_sketch_ref].name)); + break; + case CadFeatureType::Fillet: + case CadFeatureType::Chamfer: + m_dressup_type->SetSelection(f.type == CadFeatureType::Fillet ? 0 : 1); + m_dressup_size->SetValue(f.dressup_size); + m_face_group->SetSelection(static_cast(f.face_group)); + m_sel_solid_edge = f.dressup_edge; // preserve edge-targeting on re-edit + m_sel_solid_body = f.target_body; // preserve which body on re-edit + sync_dressup_target(); // and say which of the two the re-edit is targeting + break; + case CadFeatureType::Hole: + m_hole_plane->SetSelection(index_from_plane(f.plane)); + m_hole_diameter->SetValue(f.hole_diameter); + m_hole_depth->SetValue(f.hole_depth); + m_hole_through->SetValue(f.hole_through); + m_hole_x->SetValue(f.hole_x); + m_hole_y->SetValue(f.hole_y); + // Re-latch the on-face state FROM THE STORED FEATURE (uif9). m_hole_on_face is + // only ever cleared by the Hole flyout and by the plane combo, so after any on-face hole + // it stays true — and a re-edit then drilled on whatever face was latched last, which may + // be a different face, a different body, or a body since rebuilt. f is the only source + // guaranteed to describe THIS hole. Not the dropdown row just set above: index_from_plane + // snaps an arbitrary face plane to the nearest XY/XZ/YZ, so driving the re-edit from the + // row would MOVE a hole drilled on a slanted or offset face. + m_hole_on_face = !is_base_plane(f.plane, m_doc.modeling_origin); + m_hole_face_plane = f.plane; + m_hole_face_body = m_hole_on_face ? f.target_body : -1; + // The face's (u,v) extent is not serialized, so the gizmo's footprint clamp has nothing + // to stand on. Unbounded is the honest state; the stale bounds of another face are not. + m_hole_has_bounds = false; + if (m_hole_target_label) + m_hole_target_label->SetLabel(m_hole_on_face + // No face index survives in the feature, and inventing one would be worse than + // saying so. "(none — uses Hole plane)" is the one thing that is definitely false. + ? (f.target_body >= 0 ? wxString::Format(_L("On a face of Body %d"), f.target_body + 1) + : _L("On a stored face")) + : _L("(none — uses Hole plane)")); + break; + case CadFeatureType::Thread: + m_thread_plane->SetSelection(index_from_plane(f.plane)); + m_thread_radius->SetValue(f.thread_radius * 2.0); // field = diameter + m_thread_pitch->SetValue(f.thread_pitch); + m_thread_height->SetValue(f.thread_height); + m_thread_depth->SetValue(f.thread_depth); + m_thread_internal->SetValue(f.thread_internal); + m_thread_x->SetValue(f.thread_x); + m_thread_y->SetValue(f.thread_y); + if (m_thread_std) m_thread_std->SetSelection(0); // Custom: spins reflect the stored feature + // Same latch, same failure, same fix as Hole above (uif9). + m_thread_on_face = !is_base_plane(f.plane, m_doc.modeling_origin); + m_thread_face_plane = f.plane; + m_thread_face_body = m_thread_on_face ? f.target_body : -1; + if (m_thread_target_label) + m_thread_target_label->SetLabel(m_thread_on_face + ? (f.target_body >= 0 ? wxString::Format(_L("On a face of Body %d"), f.target_body + 1) + : _L("On a stored face")) + : _L("(none — uses Thread plane)")); + break; + case CadFeatureType::Shell: + m_shell_thickness->SetValue(f.shell_thickness); + m_sel_solid_face = f.shell_face; + m_shell_face_label->SetLabel(f.shell_face >= 0 + ? wxString::Format(_L("Face %d"), f.shell_face) + : _L("(all faces — closed hollow)")); + break; + case CadFeatureType::Revolve: + m_revolve_angle->SetValue(f.revolve_angle); + m_revolve_axis->SetSelection(f.revolve_axis); + m_revolve_mode->SetSelection(static_cast(f.mode)); + m_revolve_flip->SetValue(f.flip); + m_revolve_sketch_ref = f.sketch_ref; + break; + case CadFeatureType::Sweep: + m_sweep_profile_ref = f.sketch_ref; + m_sweep_path_ref = f.sweep_path_ref; // show_tool pre-selects this in the picker + m_sweep_mode->SetSelection(static_cast(f.mode)); + break; + case CadFeatureType::Pattern: + m_pattern_type->SetSelection(f.pattern_circular ? 1 : 0); + m_pattern_count->SetValue(f.pattern_count); + m_pattern_spacing->SetValue(f.pattern_spacing); + m_pattern_dir->SetSelection(f.pattern_dir); + m_pattern_angle->SetValue(f.pattern_angle); + break; + case CadFeatureType::Plane: + populate_plane_choices(m_plane_base); + m_plane_base->SetSelection(f.plane_base); + m_plane_offset->SetValue(f.plane_offset); + m_plane_tilt->SetValue(f.plane_angle_tilt); + m_plane_tilt_axis->SetSelection(f.plane_axis); + m_plane_type->SetSelection((int)f.plane_type); + m_pl_faceA_body = f.plane_face_body; m_pl_faceA = f.plane_face; + m_pl_faceB_body = f.plane_face2_body; m_pl_faceB = f.plane_face2; + m_pl_edgeA_body = f.plane_edge_body; m_pl_edgeA = f.plane_edge; + m_pl_edgeB_body = f.plane_edge2_body; m_pl_edgeB = f.plane_edge2; + m_plane_usize->SetValue(f.plane_u_size); + m_plane_vsize->SetValue(f.plane_v_size); + m_plane_pick = PlanePick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_plane_labels(); + break; + case CadFeatureType::Loft: + m_loft_refs = f.loft_profile_refs; // show_tool re-checks these in the list + m_loft_ruled->SetValue(f.loft_ruled); + m_loft_mode->SetSelection(static_cast(f.mode)); + break; + case CadFeatureType::Draft: + m_draft_angle->SetValue(f.draft_angle); + m_sel_solid_face = f.draft_face; + m_draft_face_label->SetLabel(f.draft_face >= 0 + ? wxString::Format(_L("Face %d"), f.draft_face) + : _L("(pick a side face)")); + break; + case CadFeatureType::Axis: + m_axis_type->SetSelection((int)f.axis_type); + m_ax_face_body = f.axis_body; m_ax_face = f.axis_face; + m_ax_edge = f.axis_edge; + populate_plane_choices(m_axis_plane_a); + populate_plane_choices(m_axis_plane_b); + m_axis_plane_a->SetSelection(f.axis_plane_a >= 0 ? f.axis_plane_a : 0); + m_axis_plane_b->SetSelection(f.axis_plane_b >= 0 ? f.axis_plane_b : 0); + m_axis_p1x->SetValue(f.axis_p1.x()); m_axis_p1y->SetValue(f.axis_p1.y()); m_axis_p1z->SetValue(f.axis_p1.z()); + m_axis_p2x->SetValue(f.axis_p2.x()); m_axis_p2y->SetValue(f.axis_p2.y()); m_axis_p2z->SetValue(f.axis_p2.z()); + m_axis_pick = AxisPick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_axis_labels(); + break; + case CadFeatureType::CoordSys: + m_coordsys_type->SetSelection((int)f.coordsys_type); + m_cs_x->SetValue(f.coordsys_point.x()); + m_cs_y->SetValue(f.coordsys_point.y()); + m_cs_z->SetValue(f.coordsys_point.z()); + m_cs_face_body = f.coordsys_body; m_cs_face = f.coordsys_face; + m_cs_edge = f.coordsys_edge; + m_cs_hx->SetValue(f.coordsys_x_hint.x()); + m_cs_hy->SetValue(f.coordsys_x_hint.y()); + m_cs_hz->SetValue(f.coordsys_x_hint.z()); + m_coordsys_pick = CoordSysPick::None; + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + if (m_viewport) m_viewport->set_escalate_on_repick(true); // pick abandoned + refresh_coordsys_labels(); + refresh_cs_body_choice(); + if (m_cs_body && f.coordsys_body >= 0) { + m_cs_body->SetSelection(f.coordsys_body + 1); + if (m_viewport) m_viewport->set_xray_focus(f.coordsys_body); + } + break; + case CadFeatureType::Boolean: + // List the bodies available to the boolean (as-of its timeline slot), so the consumed + // tool body still appears and the saved selections below land on the right entries. + populate_body_choices(m_edit_index); + m_bool_op->SetSelection(f.mode == BooleanMode::Cut ? 1 + : f.mode == BooleanMode::Intersect ? 2 : 0); // 0 = Union/Add + if (f.target_body >= 0 && f.target_body < int(m_bool_target->GetCount())) + m_bool_target->SetSelection(f.target_body); + if (f.bool_tool_body >= 0 && f.bool_tool_body < int(m_bool_tool->GetCount())) + m_bool_tool->SetSelection(f.bool_tool_body); + m_bool_keep->SetValue(f.bool_keep_tool); + m_bool_tol->SetValue(f.bool_tolerance); + break; + case CadFeatureType::Cut: + // Same as-of-timeline reasoning as Boolean: a Cut splits one body into two, so the + // live body list does not match the one this feature's target index was recorded + // against. Replay to just before it and the stored index lands on the right entry. + populate_body_choices(m_edit_index); + if (f.target_body >= 0 && f.target_body < int(m_cut_target->GetCount())) + m_cut_target->SetSelection(f.target_body); + else if (m_cut_target->GetCount() > 0) + m_cut_target->SetSelection(0); + populate_plane_choices(m_cut_plane); + m_cut_plane->SetSelection(index_from_plane(f.plane)); + m_cut_offset->SetValue(f.cut_offset); + break; + case CadFeatureType::SurfaceExtrude: + m_surf_extrude_distance->SetValue(f.distance); + m_surf_extrude_sketch_ref = f.sketch_ref; + if (m_surf_extrude_sketch_ref >= 0 && m_surf_extrude_sketch_ref < int(m_doc.features.size())) + m_surf_extrude_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_extrude_sketch_ref].name)); + break; + case CadFeatureType::SurfaceRevolve: + m_surf_revolve_angle->SetValue(f.revolve_angle); + m_surf_revolve_axis->SetSelection(f.revolve_axis); + m_surf_revolve_flip->SetValue(f.flip); + m_surf_revolve_sketch_ref = f.sketch_ref; + if (m_surf_revolve_sketch_ref >= 0 && m_surf_revolve_sketch_ref < int(m_doc.features.size())) + m_surf_revolve_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_revolve_sketch_ref].name)); + break; + case CadFeatureType::SurfaceLoft: + m_surf_loft_refs = f.loft_profile_refs; + m_surf_loft_ruled->SetValue(f.loft_ruled); + break; + case CadFeatureType::SurfaceFill: + m_surf_fill_sketch_ref = f.sketch_ref; + if (m_surf_fill_sketch_ref >= 0 && m_surf_fill_sketch_ref < int(m_doc.features.size())) + m_surf_fill_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_fill_sketch_ref].name)); + break; + case CadFeatureType::SurfaceOffset: + populate_sheet_body_choices(m_surf_offset_body); + m_surf_offset_distance->SetValue(f.plane_offset); + // target_body is a BODY index; the rows are sheets only, so match, don't index. + select_sheet_choice(m_surf_offset_body, f.target_body); + break; + case CadFeatureType::ThickenSurface: + populate_sheet_body_choices(m_surf_thicken_body); + m_surf_thicken_thickness->SetValue(f.thicken_thickness); + m_surf_thicken_flip->SetValue(f.thicken_flip); + select_sheet_choice(m_surf_thicken_body, f.target_body); + break; + case CadFeatureType::Transform: { + fill_body_choice(m_xf_body, m_edit_index, f.target_body); + m_xf_dx->SetValue(f.xf_translate.x()); + m_xf_dy->SetValue(f.xf_translate.y()); + m_xf_dz->SetValue(f.xf_translate.z()); + const int ax = (std::abs(f.xf_axis.x()) > 0.5) ? 0 : (std::abs(f.xf_axis.y()) > 0.5) ? 1 : 2; + m_xf_axis->SetSelection(ax); + m_xf_angle->SetValue(f.xf_angle_deg); + m_xf_pivot_x->SetValue(f.xf_pivot.x()); + m_xf_pivot_y->SetValue(f.xf_pivot.y()); + m_xf_pivot_z->SetValue(f.xf_pivot.z()); + m_xf_copy->SetValue(f.xf_copy); + break; + } + case CadFeatureType::Mirror: { + fill_body_choice(m_mirror_body, m_edit_index, f.target_body); + populate_plane_choices(m_mirror_plane); + m_mirror_plane->SetSelection(index_from_plane(f.plane)); + m_mirror_keep->SetValue(f.mirror_keep_original); + break; + } + case CadFeatureType::Thicken: { + fill_body_choice(m_thicken_body, m_edit_index, f.target_body); + m_sel_solid_face = f.thicken_face; + m_thicken_face_label->SetLabel(f.thicken_face >= 0 + ? wxString::Format(_L("Face %d"), f.thicken_face) + : _L("(pick a solid face)")); + m_thicken_thickness->SetValue(f.thicken_thickness); + m_thicken_flip->SetValue(f.thicken_flip); + break; + } + case CadFeatureType::Rib: { + fill_body_choice(m_rib_body, m_edit_index, f.target_body); + { + m_rib_sketch->Clear(); + int pre_sel = wxNOT_FOUND; + for (int i = 0; i < int(m_doc.features.size()); ++i) { + if (m_doc.features[i].type == CadFeatureType::Sketch) { + const int pos = combo_append_index(m_rib_sketch, + wxString::FromUTF8(m_doc.features[i].name), i); + if (i == f.rib_sketch_ref) pre_sel = pos; + } + } + if (pre_sel != wxNOT_FOUND) m_rib_sketch->SetSelection(pre_sel); + else if (m_rib_sketch->GetCount() > 0) m_rib_sketch->SetSelection(0); + } + m_rib_entity->SetValue(f.rib_entity); + m_rib_thickness->SetValue(f.rib_thickness); + m_rib_depth->SetValue(f.rib_depth); + break; + } + case CadFeatureType::Project: { + fill_body_choice(m_proj_source_body, m_edit_index, f.project_source_body); + populate_plane_choices(m_proj_plane); + m_proj_plane->SetSelection(index_from_plane(f.plane)); + m_sel_solid_face = f.project_face; + m_proj_face_label->SetLabel(f.project_face >= 0 + ? wxString::Format(_L("Face %d"), f.project_face) + : _L("(all edges)")); + break; + } + case CadFeatureType::DeleteFace: { + fill_body_choice(m_del_face_body, m_edit_index, f.target_body); + m_del_faces = f.delete_faces; + { + wxString s; + for (size_t i = 0; i < m_del_faces.size(); ++i) { + if (i > 0) s += ", "; + s += wxString::Format("Face %d", m_del_faces[i]); + } + m_del_face_list->SetLabel(s.empty() ? _L("(none)") : s); + } + break; + } + case CadFeatureType::Helix: + populate_plane_choices(m_helix_plane); + m_helix_plane->SetSelection(index_from_plane(f.plane)); + m_helix_radius->SetValue(f.helix_radius); + m_helix_pitch->SetValue(f.helix_pitch); + m_helix_height->SetValue(f.helix_height); + m_helix_left_handed->SetValue(f.helix_left_handed); + m_helix_taper->SetValue(f.helix_taper_deg); + break; + case CadFeatureType::Mate: + m_mate_kind->SetSelection(f.mate_kind); + // CoordSys pickers are repopulated by open_tool(Mate); pre-selection + // is done there too via the stored feature index. + m_mate_offset->SetValue(f.mate_offset); + m_mate_angle->SetValue(f.mate_angle); + m_mate_flip->SetValue(f.mate_flip); + break; + default: break; + } +} + +void DesignPanel::on_edit_feature() +{ + int sel = tree_selection(); + if (sel == wxNOT_FOUND) { + set_status(_L("Select a feature in the tree first")); + m_status->Refresh(); + return; + } + const CadFeature& f = m_doc.features[sel]; + reset_edit_state(); + + switch (f.type) { + case CadFeatureType::Sketch: + // Imported Text/SVG art has no editable sketch dialog — edit means + // move / scale its placement instead, behind the same Confirm/Cancel gate as + // the initial insert (Cancel = undo restores the prior placement). + if (!f.imported_regions.empty()) { + m_doc.checkpoint(); // undo boundary: re-placing imported art + on_transform_imported(sel); + m_insert_feat = sel; + open_insert_card(wxString::FromUTF8(f.name)); + break; + } + m_edit_index = sel; + if (!f.entities.empty()) { + // Entity sketcher: re-open the geometry for full in-canvas editing (handles, + // live quotes, regular-polygon drag) in the ENTITY sketch UI (the top sketch + // toolbar + session card), NOT the legacy parametric card. The commit handler + // replaces this feature in place (see m_edit_index). Hide its display overlay + // so the live tool is the only copy drawn. + set_ui_mode(UiMode::Sketch); + if (m_viewport) { + m_viewport->set_display_sketches({}); + m_viewport->edit_sketch(f.entities, f.entity_constraints, f.plane); + } + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Editing sketch — drag a handle or click a quote to edit")); + m_status->Refresh(); + } else { + load_feature_into_dialog(f); + open_tool(Tool::Sketch); + } + break; + case CadFeatureType::Extrude: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Extrude); + break; + case CadFeatureType::Fillet: + case CadFeatureType::Chamfer: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Dressup); + break; + case CadFeatureType::Hole: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Hole); + break; + case CadFeatureType::Thread: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Thread); + break; + case CadFeatureType::Shell: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Shell); + break; + case CadFeatureType::Revolve: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Revolve); + break; + case CadFeatureType::Sweep: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Sweep); + break; + case CadFeatureType::Pattern: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Pattern); + break; + case CadFeatureType::Plane: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Plane); + break; + case CadFeatureType::Axis: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Axis); + break; + case CadFeatureType::CoordSys: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::CoordSys); + break; + case CadFeatureType::Loft: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Loft); + break; + case CadFeatureType::Draft: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Draft); + break; + case CadFeatureType::Boolean: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Boolean); + break; + case CadFeatureType::SurfaceExtrude: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::SurfaceExtrude); + break; + case CadFeatureType::SurfaceRevolve: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::SurfaceRevolve); + break; + case CadFeatureType::SurfaceLoft: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::SurfaceLoft); + break; + case CadFeatureType::SurfaceFill: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::SurfaceFill); + break; + case CadFeatureType::SurfaceOffset: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::SurfaceOffset); + break; + case CadFeatureType::ThickenSurface: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::ThickenSurface); + break; + case CadFeatureType::Transform: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Transform); + break; + case CadFeatureType::Mirror: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Mirror); + break; + case CadFeatureType::Thicken: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Thicken); + break; + case CadFeatureType::Rib: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Rib); + break; + case CadFeatureType::Project: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Project); + break; + case CadFeatureType::DeleteFace: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::DeleteFace); + break; + case CadFeatureType::Helix: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Helix); + break; + case CadFeatureType::Mate: + m_edit_index = sel; + m_mate_kind->SetSelection(f.mate_kind); + m_mate_offset->SetValue(f.mate_offset); + m_mate_angle->SetValue(f.mate_angle); + m_mate_flip->SetValue(f.mate_flip); + open_tool(Tool::Mate); // populates CS pickers; pre-selects from current selection + // Now set the re-edit cs_a/cs_b after populating (override the open_tool default) + { + int pre_a = wxNOT_FOUND, pre_b = wxNOT_FOUND; + for (unsigned i = 0; i < m_mate_cs_a->GetCount(); ++i) { + const auto* cd = m_mate_cs_a->GetClientData(i); + if (cd && int(reinterpret_cast(cd)) == f.mate_cs_a) pre_a = int(i); + } + for (unsigned i = 0; i < m_mate_cs_b->GetCount(); ++i) { + const auto* cd = m_mate_cs_b->GetClientData(i); + if (cd && int(reinterpret_cast(cd)) == f.mate_cs_b) pre_b = int(i); + } + if (pre_a != wxNOT_FOUND) m_mate_cs_a->SetSelection(pre_a); + if (pre_b != wxNOT_FOUND) m_mate_cs_b->SetSelection(pre_b); + } + break; + case CadFeatureType::Cut: + m_edit_index = sel; + load_feature_into_dialog(f); + open_tool(Tool::Cut); + break; + case CadFeatureType::Import: + // An imported solid has no parameters to re-edit: its geometry is rigid data read + // from the file, not something rebuilt from numbers. Repositioning it is Transform's + // job, and that feature already exists — so point there rather than invent a dialog + // that would only duplicate it. (Imported 2D Text/SVG art is different and IS + // re-editable; it arrives as a Sketch feature with imported_regions, handled above.) + m_status->SetForegroundColour(wxNullColour); + set_status(_L("An imported solid has no parameters — use Transform to move or rotate it")); + m_status->Refresh(); + break; + default: + // Every CadFeatureType now has a case. Kept as a guard so a type added later + // announces itself instead of silently swallowing the Edit click. + m_status->SetForegroundColour(wxNullColour); + set_status(_L("This feature type can't be edited yet")); + m_status->Refresh(); + break; + } +} + +void DesignPanel::on_export_step() +{ + // Bake any open feature preview first, so the STEP matches what is shown (mirrors on_commit). + if (m_active != Tool::None) + confirm_tool(); + if (m_doc.bodies.empty()) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Nothing to export — add a feature first")); + m_status->Refresh(); + return; + } + wxFileDialog dlg(this, _L("Export STEP"), wxEmptyString, "model.step", + "STEP files (*.step;*.stp)|*.step;*.stp", + wxFD_SAVE | wxFD_OVERWRITE_PROMPT); + if (dlg.ShowModal() != wxID_OK) + return; + sync_body_xform(); // export bodies at their displayed Move-gizmo positions + std::string err; + const bool ok = m_doc.export_step(dlg.GetPath().ToUTF8().data(), m_body_xform, err); + m_status->SetForegroundColour(ok ? wxColour(120, 210, 120) : wxColour(235, 110, 110)); + set_status(ok ? _L("Exported STEP") + : _L("STEP export failed: ") + wxString::FromUTF8(err)); + m_status->Refresh(); +} + +void DesignPanel::on_commit() +{ + // A feature tool open with a live preview ghost (e.g. a fillet being previewed) is + // NOT yet part of the body. Apply it first so "Commit to Plate" ships exactly what + // is shown on screen, not the pre-feature solid. (confirm_tool() applies + closes.) + if (m_active != Tool::None) + confirm_tool(); + + if (m_doc.display_mesh.its.indices.empty()) { + set_status(_L("Nothing to commit — add a feature first")); + return; + } + ObjectList* obj_list = wxGetApp().obj_list(); + if (obj_list == nullptr) + return; + + // Multi-body: ship each (visible) body as its own plate object so they arrive on the + // slicer plate as independent, separately-arrangeable parts (Onshape "Commit all parts"). + // Hidden bodies are skipped — what you see on the Design plate is what gets committed. + sync_body_visible(); + rebuild_disp_meshes(); // ship moved bodies at their Move-gizmo positions + if (m_disp_body_meshes.size() > 1) { + int committed = 0; + for (size_t b = 0; b < m_disp_body_meshes.size(); ++b) { + if (b < m_body_visible.size() && !m_body_visible[b]) continue; // skip hidden + if (m_disp_body_meshes[b].its.indices.empty()) continue; + obj_list->load_mesh_object(m_disp_body_meshes[b], + "Design Body " + std::to_string(b + 1)); + ++committed; + } + if (committed == 0) { // every body hidden — nothing to ship + set_status(_L("All bodies hidden — show one before committing")); + return; + } + } else { + obj_list->load_mesh_object(m_disp_pick_mesh, "Design Body"); + } + + // Persist the editable parametric recipe alongside the committed meshes so the + // saved 3MF reopens with the full feature tree, not just the baked solid. An empty + // doc clears it, keeping non-CAD projects clean. + sync_recipe_to_model(); + + if (wxGetApp().mainframe != nullptr) + wxGetApp().mainframe->select_tab(TAB_ID_PREPARE); +} + +CadFeature DesignPanel::build_candidate(Tool t) const +{ + CadFeature f; + // EDIT MODE: a feature card edits only scalar parameters. The feature's structural + // identity — profile source (sketch_ref / entities / picked face), its plane, the + // up-to-face target and the target body — must be preserved from the feature being + // edited, NOT re-derived from the live tool state (which still reflects the last *add* + // flow). GUI extrudes carry their profile as `entities` with sketch_ref = -1, which the + // card never restores, so a fresh rebuild produced an empty profile -> a misplaced new + // box. Seed from the original; the cases below overlay card scalars and skip the + // structural assignments while editing. + const bool editing = (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size())); + if (editing) + f = m_doc.features[m_edit_index]; + switch (t) { + case Tool::Sketch: + f.type = CadFeatureType::Sketch; + f.shape = (m_shape->GetSelection() == 0) ? SketchShape::Rectangle : SketchShape::Circle; + // The plane is STRUCTURAL, like Extrude's profile source. While EDITING it is preserved + // from the seeded original — the card carries no plane control and the old combo silently + // collapsed a face plane to a base plane through the modeling origin. While ADDING it + // comes from what is picked in the viewport. e1p. + if (!editing) { wxString where; f.plane = sketch_plane_from_selection(where); } + f.width = m_width->GetValue(); + f.height = m_height->GetValue(); + f.radius = m_radius->GetValue(); + break; + case Tool::Extrude: + f.type = CadFeatureType::Extrude; + f.distance = m_distance->GetValue(); + f.symmetric = false; + f.extrude_end = static_cast(m_extrude_end->GetSelection()); + f.distance2 = m_distance2->GetValue(); + f.taper_deg = m_taper->GetValue(); + f.flip = m_flip->GetValue(); + f.mode = (m_mode->GetSelection() == 0) ? BooleanMode::New + : (m_mode->GetSelection() == 1) ? BooleanMode::Add + : (m_mode->GetSelection() == 2) ? BooleanMode::Cut + : BooleanMode::Intersect; + // Profile source + up-to-face target are structural: re-derive them from the live + // tool state only when ADDING. While editing they are preserved from the seeded + // original (the card changed only depth/taper/flip/mode). + if (!editing) { + f.up_to_face = (f.extrude_end == ExtrudeEnd::UpToFace) ? m_sel_solid_face : -1; + if (m_extrude_face_src >= 0) { + // Face-as-profile extrude: the kernel grabs the body face by id. + f.extrude_src_face = m_extrude_face_src; + f.sketch_ref = -1; + } else if (extrude_uses_loop()) { + // Just the click-selected loop: carry its entity subset on the feature + // (sketch_ref = -1 -> build_sketch_wire uses f.entities). + f.sketch_ref = -1; + f.entities = m_viewport->selected_loop_entities(); + f.plane = m_doc.features[m_extrude_sketch_ref].plane; + } else { + f.sketch_ref = m_extrude_sketch_ref; + // On-face engraving Cut against the host body (matches the commit). + if (m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size()) + && m_doc.features[m_extrude_sketch_ref].import_on_face) + f.target_body = m_doc.features[m_extrude_sketch_ref].import_face_body; + } + } + break; + case Tool::Dressup: + f.type = (m_dressup_type->GetSelection() == 0) ? CadFeatureType::Fillet + : CadFeatureType::Chamfer; + f.dressup_size = m_dressup_size->GetValue(); + f.face_group = static_cast(m_face_group->GetSelection()); + // A click-selected solid edge overrides the face-group: dress THAT edge. + f.dressup_edge = m_sel_solid_edge; // -1 when no edge picked + break; + case Tool::Hole: + f.type = CadFeatureType::Hole; + f.plane = hole_plane(); + f.hole_diameter = m_hole_diameter->GetValue(); + f.hole_depth = m_hole_depth->GetValue(); + f.hole_through = m_hole_through->GetValue(); + f.hole_x = m_hole_x->GetValue(); + f.hole_y = m_hole_y->GetValue(); + if (m_hole_on_face) f.target_body = m_hole_face_body; // preview the right body + break; + case Tool::Thread: + f.type = CadFeatureType::Thread; + f.plane = thread_plane(); + f.thread_radius = m_thread_radius->GetValue() * 0.5; // field = diameter -> kernel radius + f.thread_pitch = m_thread_pitch->GetValue(); + f.thread_height = m_thread_height->GetValue(); + f.thread_depth = m_thread_depth->GetValue(); + f.thread_internal = m_thread_internal->GetValue(); + f.thread_x = m_thread_x->GetValue(); + f.thread_y = m_thread_y->GetValue(); + if (m_thread_on_face) f.target_body = m_thread_face_body; // tap the right body + break; + case Tool::Shell: + f.type = CadFeatureType::Shell; + f.shell_thickness = m_shell_thickness->GetValue(); + // A picked solid face opens the shell there; -1 = closed hollow. + f.shell_face = (m_sel_solid_face >= 0) ? m_sel_solid_face : -1; + break; + case Tool::Draft: + f.type = CadFeatureType::Draft; + f.draft_angle = m_draft_angle->GetValue(); + f.draft_face = (m_sel_solid_face >= 0) ? m_sel_solid_face : -1; + break; + case Tool::Revolve: + f.type = CadFeatureType::Revolve; + f.sketch_ref = m_revolve_sketch_ref; + f.revolve_angle = m_revolve_angle->GetValue(); + f.revolve_axis = m_revolve_axis->GetSelection(); + f.flip = m_revolve_flip->GetValue(); + f.mode = static_cast(m_revolve_mode->GetSelection()); + break; + case Tool::Sweep: { + f.type = CadFeatureType::Sweep; + f.sketch_ref = m_sweep_profile_ref; + const int sel = m_sweep_path ? m_sweep_path->GetSelection() : wxNOT_FOUND; + f.sweep_path_ref = (sel != wxNOT_FOUND) + ? int(reinterpret_cast(m_sweep_path->GetClientData(sel))) : -1; + f.mode = static_cast(m_sweep_mode->GetSelection()); + break; + } + case Tool::Pattern: + f.type = CadFeatureType::Pattern; + f.pattern_circular = (m_pattern_type->GetSelection() == 1); + f.pattern_count = int(m_pattern_count->GetValue()); + f.pattern_spacing = m_pattern_spacing->GetValue(); + f.pattern_dir = m_pattern_dir->GetSelection(); + f.pattern_angle = m_pattern_angle->GetValue(); + break; + case Tool::Plane: + f.type = CadFeatureType::Plane; + f.plane_base = m_plane_base->GetSelection(); + f.plane_offset = m_plane_offset->GetValue(); + f.plane_angle_tilt = m_plane_tilt->GetValue(); + f.plane_axis = m_plane_tilt_axis->GetSelection(); + apply_plane_refs(f); // plane_type + face/edge refs + u/v size from the card + break; + case Tool::Axis: + f.type = CadFeatureType::Axis; + apply_axis_refs(f); + break; + case Tool::CoordSys: + f.type = CadFeatureType::CoordSys; + apply_coordsys_refs(f); + break; + case Tool::Loft: { + f.type = CadFeatureType::Loft; + f.loft_ruled = m_loft_ruled->GetValue(); + f.mode = static_cast(m_loft_mode->GetSelection()); + f.loft_profile_refs.clear(); + for (unsigned i = 0; i < m_loft_list->GetCount(); ++i) + if (m_loft_list->IsChecked(i) && i < m_loft_sketch_idx.size()) + f.loft_profile_refs.push_back(m_loft_sketch_idx[i]); + break; + } + case Tool::Boolean: { + f.type = CadFeatureType::Boolean; + const int sel = m_bool_op->GetSelection(); + f.mode = (sel == 1) ? BooleanMode::Cut + : (sel == 2) ? BooleanMode::Intersect + : BooleanMode::Add; // 0 = Union + f.target_body = m_bool_target->GetSelection(); + f.bool_tool_body = m_bool_tool->GetSelection(); + f.bool_keep_tool = m_bool_keep->GetValue(); + f.bool_tolerance = m_bool_tol->GetValue(); // OCCT fuzzy: robust cut on near-coincident faces + break; + } + case Tool::Cut: + f.type = CadFeatureType::Cut; + f.plane = plane_from_choice(m_cut_plane->GetSelection()); + f.cut_offset = m_cut_offset->GetValue(); + f.cut_flip = false; + f.cut_keep_upper = true; // always split: keep both pieces as separate bodies + f.cut_keep_lower = true; + f.target_body = m_cut_target->GetSelection(); + break; + case Tool::SurfaceExtrude: + f.type = CadFeatureType::SurfaceExtrude; + f.sketch_ref = m_surf_extrude_sketch_ref; + f.distance = m_surf_extrude_distance->GetValue(); + break; + case Tool::SurfaceRevolve: + f.type = CadFeatureType::SurfaceRevolve; + f.sketch_ref = m_surf_revolve_sketch_ref; + f.revolve_angle = m_surf_revolve_angle->GetValue(); + f.revolve_axis = m_surf_revolve_axis->GetSelection(); + f.flip = m_surf_revolve_flip->GetValue(); + break; + case Tool::SurfaceLoft: { + f.type = CadFeatureType::SurfaceLoft; + f.loft_ruled = m_surf_loft_ruled->GetValue(); + f.loft_profile_refs.clear(); + for (unsigned i = 0; i < m_surf_loft_list->GetCount(); ++i) + if (m_surf_loft_list->IsChecked(i) && i < m_surf_loft_sketch_idx.size()) + f.loft_profile_refs.push_back(m_surf_loft_sketch_idx[i]); + break; + } + case Tool::SurfaceFill: + f.type = CadFeatureType::SurfaceFill; + f.sketch_ref = m_surf_fill_sketch_ref; + break; + case Tool::SurfaceOffset: { + f.type = CadFeatureType::SurfaceOffset; + f.target_body = sheet_choice_body(m_surf_offset_body); + f.plane_offset = m_surf_offset_distance->GetValue(); + break; + } + case Tool::ThickenSurface: { + f.type = CadFeatureType::ThickenSurface; + f.target_body = sheet_choice_body(m_surf_thicken_body); + f.thicken_thickness = m_surf_thicken_thickness->GetValue(); + f.thicken_flip = m_surf_thicken_flip->GetValue(); + break; + } + case Tool::Transform: { + f.type = CadFeatureType::Transform; + const int sel = m_xf_body->GetSelection(); + f.target_body = (sel != wxNOT_FOUND) ? sel : -1; + f.xf_translate = Vec3d(m_xf_dx->GetValue(), m_xf_dy->GetValue(), m_xf_dz->GetValue()); + const int ax = m_xf_axis->GetSelection(); + f.xf_axis = (ax == 0) ? Vec3d(1, 0, 0) : (ax == 1) ? Vec3d(0, 1, 0) : Vec3d(0, 0, 1); + f.xf_pivot = Vec3d(m_xf_pivot_x->GetValue(), m_xf_pivot_y->GetValue(), m_xf_pivot_z->GetValue()); + f.xf_angle_deg = m_xf_angle->GetValue(); + f.xf_copy = m_xf_copy->GetValue(); + break; + } + case Tool::Mirror: { + f.type = CadFeatureType::Mirror; + const int sel = m_mirror_body->GetSelection(); + f.target_body = (sel != wxNOT_FOUND) ? sel : -1; + f.plane = plane_from_choice(m_mirror_plane->GetSelection()); + f.mirror_keep_original = m_mirror_keep->GetValue(); + f.mode = f.mirror_keep_original ? BooleanMode::New : BooleanMode::Add; + break; + } + case Tool::Thicken: { + f.type = CadFeatureType::Thicken; + const int sel = m_thicken_body->GetSelection(); + f.target_body = (sel != wxNOT_FOUND) ? sel : -1; + f.thicken_face = (m_sel_solid_face >= 0) ? m_sel_solid_face : -1; + f.thicken_thickness = m_thicken_thickness->GetValue(); + f.thicken_flip = m_thicken_flip->GetValue(); + break; + } + case Tool::Rib: { + f.type = CadFeatureType::Rib; + const int bsel = m_rib_body->GetSelection(); + f.target_body = (bsel != wxNOT_FOUND) ? bsel : -1; + const int ssel = m_rib_sketch->GetSelection(); + f.rib_sketch_ref = (ssel != wxNOT_FOUND) + ? int(reinterpret_cast(m_rib_sketch->GetClientData(ssel))) : -1; + f.rib_entity = m_rib_entity->GetValue(); + f.rib_thickness = m_rib_thickness->GetValue(); + f.rib_depth = m_rib_depth->GetValue(); + break; + } + case Tool::Project: { + f.type = CadFeatureType::Project; + const int sel = m_proj_source_body->GetSelection(); + f.project_source_body = (sel != wxNOT_FOUND) ? sel : -1; + f.plane = plane_from_choice(m_proj_plane->GetSelection()); + if (m_sel_solid_face >= 0) { + f.project_face = m_sel_solid_face; + } else { + f.project_face = -1; + } + f.project_edges.clear(); // empty => use project_face + break; + } + case Tool::DeleteFace: { + f.type = CadFeatureType::DeleteFace; + const int sel = m_del_face_body->GetSelection(); + f.target_body = (sel != wxNOT_FOUND) ? sel : -1; + f.delete_faces = m_del_faces; + break; + } + case Tool::Helix: { + f.type = CadFeatureType::Helix; + f.plane = plane_from_choice(m_helix_plane->GetSelection()); + f.helix_radius = m_helix_radius->GetValue(); + f.helix_pitch = m_helix_pitch->GetValue(); + f.helix_height = m_helix_height->GetValue(); + f.helix_left_handed = m_helix_left_handed->GetValue(); + f.helix_taper_deg = m_helix_taper->GetValue(); + break; + } + case Tool::Mate: { + f.type = CadFeatureType::Mate; + f.mate_kind = m_mate_kind->GetSelection(); + f.mate_cs_a = m_mate_cs_a->GetSelection() != wxNOT_FOUND + ? int(reinterpret_cast(m_mate_cs_a->GetClientData(m_mate_cs_a->GetSelection()))) : -1; + f.mate_cs_b = m_mate_cs_b->GetSelection() != wxNOT_FOUND + ? int(reinterpret_cast(m_mate_cs_b->GetClientData(m_mate_cs_b->GetSelection()))) : -1; + f.mate_offset = m_mate_offset->GetValue(); + f.mate_angle = m_mate_angle->GetValue(); + f.mate_flip = m_mate_flip->GetValue(); + break; + } + case Tool::Insert: // imported art is committed by add_imported_sketch, not build_candidate + case Tool::None: + break; + } + // Boolean drives its own target/tool body from the card; every other tool targets the + // picked body (face-extrude reads its source face there, dress-up / hole / boolean-mode + // extrude mutate it). -1 when nothing is picked => auto (last body). + // Targeting the picked body is an ADD-time concern; while editing, the original feature's + // target_body is preserved from the seed (the card did not re-pick a body). + // HAZARD: this is a negative list, so a tool that picks its own body is broken by OMISSION — + // the card computes target_body and this line then throws it away. SurfaceOffset and + // ThickenSurface were missing: both read a SHEET body from their own combo and both had it + // overwritten with the picked SOLID's index. Any new card that picks a body belongs here. + if (!editing && m_active != Tool::Boolean && m_active != Tool::Cut + && m_active != Tool::Transform && m_active != Tool::Mirror && m_active != Tool::Thicken + && m_active != Tool::DeleteFace && m_active != Tool::Rib && m_active != Tool::Project + && m_active != Tool::Helix && m_active != Tool::SurfaceOffset + && m_active != Tool::ThickenSurface) + f.target_body = m_sel_solid_body; + return f; +} + +// Resolve the active Extrude's profile plane + a representative 2D centroid (arrow anchor) +// and push them to the viewport gizmo. Self-gates: clears the gizmo unless Extrude is open. +// Keep the Dress-up card honest about what Confirm will actually round: the single edge the +// user picked in the viewport, or the face-group. build_dressup reads m_sel_solid_edge first and +// only falls back to the group, so when an edge is picked the group combo is inert — grey it out +// rather than leave it showing a value it will not use. +void DesignPanel::sync_dressup_target() +{ + if (m_dressup_edge_label == nullptr) return; + const bool have_edge = (m_sel_solid_edge >= 0); + m_dressup_edge_label->SetLabel(have_edge + ? wxString::Format(_L("Edge %d"), m_sel_solid_edge) + : _L("(no edge picked — group below)")); + if (m_face_group != nullptr) m_face_group->Enable(!have_edge); + m_dressup_edge_label->Refresh(); +} + +void DesignPanel::update_fillet_gizmo() +{ + if (!m_viewport) return; + // Only while the Fillet/Chamfer card is open AND a solid EDGE is the target. Face-group + // dress-up (no picked edge) keeps the docked card with no in-canvas handle. The body centroid + // comes from the transformed display mesh so it matches the (transformed) edge sample points. + const bool ok = (m_active == Tool::Dressup) && m_sel_solid_edge >= 0 + && m_sel_solid_body >= 0 && m_sel_solid_body < int(m_disp_body_meshes.size()); + if (!ok) { m_viewport->clear_fillet_gizmo(); return; } + const Vec3d centroid = m_disp_body_meshes[m_sel_solid_body].bounding_box().center(); + m_viewport->begin_fillet_gizmo(centroid, m_dressup_size->GetValue()); +} + +// Push the active Hole card's plane + position + diameter/depth to the viewport gizmo. +// Grey the FEATURE buttons whose tool cannot run yet, and say why in the tooltip (o9j). +// Tommaso reported the array controls as MISSING; they were not, but Pattern with no body +// accepted the click, opened nothing, and wrote its refusal somewhere other than where the click +// happened — from the user's seat that is indistinguishable from a dead button. A control that +// cannot act should look like it cannot act, before it is pressed. +// +// Only the three top-level buttons that carry a body-count guard are gated. The same guard also +// appears on rows INSIDE the flyouts, and those stay live: a drawer holds sketch-only entries too, +// so disabling the drawer would hide tools that are perfectly usable. Their refusal message is +// still written, and now next to the geometry. +// +// The keyboard shortcuts (Shift+N / Shift+X / Shift+B) deliberately keep running the guarded +// action rather than being gated: a key press has no greyed-out state to see, so the sentence is +// the only feedback there is. +void DesignPanel::update_body_gates() +{ + const int n = int(m_doc.bodies.size()); + for (const BodyGate& g : m_body_gates) { + if (g.btn == nullptr) continue; + const bool live = n >= g.min_bodies; + g.btn->Enable(live); + g.btn->SetToolTip(live ? g.tip_live : g.tip_gated); + } +} + +// Self-gates: clears the gizmo unless the Hole card is open. +void DesignPanel::update_hole_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Hole) { m_viewport->clear_hole_gizmo(); return; } + const SketchPlane plane = hole_plane(); + m_viewport->set_hole_face_bounds(m_hole_has_bounds, m_hole_umin, m_hole_umax, + m_hole_vmin, m_hole_vmax); + m_viewport->begin_hole_gizmo(plane, + m_hole_x->GetValue(), m_hole_y->GetValue(), + m_hole_diameter->GetValue(), m_hole_depth->GetValue(), + m_hole_through->GetValue()); +} + +// Push the active Thread card's plane + position + radius/length to the viewport gizmo. +// Self-gates: clears the gizmo unless the Thread card is open. +void DesignPanel::update_thread_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Thread) { m_viewport->clear_thread_gizmo(); return; } + const SketchPlane plane = thread_plane(); + m_viewport->begin_thread_gizmo(plane, + m_thread_x->GetValue(), m_thread_y->GetValue(), + m_thread_radius->GetValue() * 0.5, m_thread_height->GetValue()); +} + +// Anchor an inward thickness arrow at the picked open face's centroid (along -outward-normal). +// Self-gates: clears unless the Shell card is open AND a face is picked. The face centroid/normal +// come from the kernel shape, then carry the body's display-only Move transform. +void DesignPanel::update_shell_gizmo() +{ + if (!m_viewport) return; + const int b = m_sel_solid_body; + const bool ok = (m_active == Tool::Shell) && m_sel_solid_face >= 0 + && b >= 0 && b < int(m_doc.bodies.size()); + if (!ok) { m_viewport->clear_shell_gizmo(); return; } + const TopoDS_Face fc = GeometryEngine::face_by_index(m_doc.bodies[b].shape, m_sel_solid_face); + if (fc.IsNull()) { m_viewport->clear_shell_gizmo(); return; } + Vec3d c = GeometryEngine::face_centroid_world(fc); + Vec3d n = GeometryEngine::face_normal_world(fc); + sync_body_xform(); + if (b < int(m_body_xform.size())) { + c = m_body_xform[b] * c; + n = m_body_xform[b].linear() * n; + } + if (n.norm() < 1e-9) { m_viewport->clear_shell_gizmo(); return; } + // Arrow points inward (into the wall): -outward normal. + m_viewport->begin_shell_gizmo(c, (-n).normalized(), m_shell_thickness->GetValue()); +} + +void DesignPanel::update_revolve_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Revolve + || m_revolve_sketch_ref < 0 || m_revolve_sketch_ref >= int(m_doc.features.size())) { + m_viewport->clear_revolve_gizmo(); + return; + } + const CadFeature& sk = m_doc.features[m_revolve_sketch_ref]; + // Profile centroid in sketch coords (same rule as the Extrude gizmo: average entity centres, + // else profile points, else the plane origin for primitive shapes). + Vec2d centroid(0, 0); + if (!sk.entities.empty()) { + Vec2d acc(0, 0); int n = 0; + for (const SketchEntity& e : sk.entities) { + switch (e.type) { + case SketchEntity::Type::Line: acc += 0.5 * (e.p0 + e.p1); ++n; break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + case SketchEntity::Type::Circle: + case SketchEntity::Type::Ellipse: acc += e.center; ++n; break; + case SketchEntity::Type::Point: acc += e.p0; ++n; break; + case SketchEntity::Type::BSpline: + if (!e.ctrl.empty()) { + Vec2d s(0, 0); for (const Vec2d& q : e.ctrl) s += q; + acc += s / double(e.ctrl.size()); ++n; + } + break; + } + } + if (n > 0) centroid = acc / double(n); + } else if (!sk.profile.points.empty()) { + for (const Vec2d& p : sk.profile.points) centroid += p; + centroid /= double(sk.profile.points.size()); + } + m_viewport->begin_revolve_gizmo(sk.plane, centroid, m_revolve_axis->GetSelection(), + m_revolve_angle->GetValue(), m_revolve_flip->GetValue()); +} + +void DesignPanel::update_draft_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Draft || m_sel_solid_face < 0 || m_sel_solid_body < 0 + || m_sel_solid_body >= int(m_doc.bodies.size())) { + m_viewport->clear_draft_gizmo(); + return; + } + const TopoDS_Face f = GeometryEngine::face_by_index(m_doc.bodies[m_sel_solid_body].shape, m_sel_solid_face); + const Vec3d c = GeometryEngine::face_centroid_world(f); + const Vec3d n = GeometryEngine::face_normal_world(f); + m_viewport->set_draft_gizmo(c, n, m_draft_angle->GetValue()); +} + +void DesignPanel::update_cut_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Cut) { m_viewport->clear_cut_gizmo(); return; } + const int bi = m_cut_target ? m_cut_target->GetSelection() : -1; + if (bi < 0 || bi >= int(m_doc.bodies.size()) || bi >= int(m_doc.display_body_meshes.size())) { + m_viewport->clear_cut_gizmo(); + return; + } + const SketchPlane plane = plane_from_choice(m_cut_plane->GetSelection()); + const BoundingBoxf3 bb = m_doc.display_body_meshes[bi].bounding_box(); + const Vec3d center = bb.center(); + const double half = std::max(0.5 * (bb.max - bb.min).norm(), 10.0); + m_viewport->set_cut_gizmo(plane, m_cut_offset->GetValue(), center, half); +} + +void DesignPanel::update_operand_highlight() +{ + if (!m_viewport) return; + // default: nothing highlighted + int bt = -1, bl = -1; + std::vector> sk; + if (m_active == Tool::Boolean) { + if (m_bool_target) bt = m_bool_target->GetSelection(); + if (m_bool_tool) bl = m_bool_tool->GetSelection(); + } else if (m_active == Tool::Sweep) { + if (m_sweep_profile_ref >= 0) sk.emplace_back(m_sweep_profile_ref, ColorRGBA(0.30f, 0.85f, 1.0f, 1.0f)); // profile = cyan + if (m_sweep_path_ref >= 0) sk.emplace_back(m_sweep_path_ref, ColorRGBA(1.00f, 0.40f, 0.90f, 1.0f)); // path = magenta + } else if (m_active == Tool::Loft) { + // checked rows of m_loft_list map to feature indices via m_loft_sketch_idx + // (exactly as build_candidate(Tool::Loft) reads them). + if (m_loft_list) + for (unsigned i = 0; i < m_loft_list->GetCount(); ++i) + if (m_loft_list->IsChecked(i) && i < m_loft_sketch_idx.size()) + sk.emplace_back(m_loft_sketch_idx[i], ColorRGBA(0.40f, 0.90f, 0.50f, 1.0f)); // profiles = green + } + m_viewport->set_operand_bodies(bt, bl); + m_viewport->set_highlight_sketches(std::move(sk)); +} + +void DesignPanel::update_pattern_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Pattern || m_doc.display_body_meshes.empty()) { + m_viewport->clear_pattern_gizmo(); + return; + } + // Pattern operates in the default world XY plane (matches the kernel: linear along world X/Y, + // circular about world Z through the origin). Anchor on the target body's bbox centre; if that + // body carries a display-only Move transform, shift the plane origin + anchor by it so the + // gizmo sits on the body where the ghost copies actually appear. + const int b = (m_sel_solid_body >= 0 && m_sel_solid_body < int(m_doc.display_body_meshes.size())) + ? m_sel_solid_body : int(m_doc.display_body_meshes.size()) - 1; + SketchPlane plane; // world XY axes by default + Vec3d base = m_doc.display_body_meshes[b].bounding_box().center(); + if (b < int(m_body_xform.size())) { + plane.origin = m_body_xform[b].translation(); + base = m_body_xform[b] * base; + } + m_viewport->begin_pattern_gizmo(plane, base, m_pattern_type->GetSelection() == 1, + int(m_pattern_count->GetValue()), m_pattern_dir->GetSelection(), + m_pattern_spacing->GetValue(), m_pattern_angle->GetValue()); +} + +void DesignPanel::update_extrude_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Extrude && m_active != Tool::SurfaceExtrude + && m_active != Tool::Thicken && m_active != Tool::Rib + && m_active != Tool::SurfaceOffset && m_active != Tool::ThickenSurface) { + m_viewport->clear_extrude_gizmo(); return; + } + + // SurfaceOffset and ThickenSurface: one distance each, applied to a whole SHEET body chosen + // from a combo. A sheet has no single normal, so there is no frame to anchor an arrow on — + // which is why these were the two tools left with no handle at all. + // + // The way out is not to change what the tool operates on. Both still offset or thicken the + // ENTIRE sheet named in the combo; the picked face only says WHERE TO STAND THE ARROW. So + // the arrow appears whenever the user has a face of that sheet under selection, and its + // absence costs nothing — the card alone still works exactly as before. Purely additive, so + // no existing flow changes and there is no new precondition to learn. + if (m_active == Tool::SurfaceOffset || m_active == Tool::ThickenSurface) { + const bool off = (m_active == Tool::SurfaceOffset); + const int sheet = sheet_choice_body(off ? m_surf_offset_body : m_surf_thicken_body); + // Only when the picked face belongs to the sheet the tool will actually act on: + // an arrow standing on a different body would name the wrong thing. + if (sheet < 0 || sheet >= int(m_doc.bodies.size()) + || m_sel_solid_body != sheet || m_sel_solid_face < 0) { + m_viewport->clear_extrude_gizmo(); return; + } + TopoDS_Face f = GeometryEngine::face_by_index(m_doc.bodies[sheet].shape, m_sel_solid_face); + if (f.IsNull()) { m_viewport->clear_extrude_gizmo(); return; } + SketchPlane plane = SketchPlane::from_face(f); + Vec3d c = GeometryEngine::face_centroid_world(f); + Vec3d n = GeometryEngine::face_normal_world(f); + if (f.Orientation() == TopAbs_REVERSED) n = -n; + sync_body_xform(); + if (sheet < int(m_body_xform.size())) { + c = m_body_xform[sheet] * c; + n = m_body_xform[sheet].linear() * n; + } + plane.origin = c; + if (n.norm() > 1e-9) plane.normal = n.normalized(); + wxSpinCtrlDouble* spin = off ? m_surf_offset_distance : m_surf_thicken_thickness; + m_viewport->set_extrude_gizmo(plane, Vec2d(0, 0), spin ? spin->GetValue() : 0.0, + 0.0, false, + !off && m_surf_thicken_flip && m_surf_thicken_flip->GetValue()); + return; + } + + if (m_active == Tool::Rib) { + // Rib's DEPTH is a distance along the sketch plane normal — the same arrow again, + // anchored at the midpoint of the line the rib is built on rather than at a profile + // centroid, because a rib's line is the whole profile. + // + // This covers only half of L2 for Rib: the THICKNESS is an in-plane offset either side + // of that line and has no handle, which needs an affordance that does not exist yet. + // Half a tool made draggable is still strictly better than none — the remaining half is + // filed separately rather than left implied. + const int ssel = m_rib_sketch ? m_rib_sketch->GetSelection() : wxNOT_FOUND; + const int ref = (ssel != wxNOT_FOUND) + ? int(reinterpret_cast(m_rib_sketch->GetClientData(ssel))) : -1; + if (ref < 0 || ref >= int(m_doc.features.size())) { m_viewport->clear_extrude_gizmo(); return; } + const CadFeature& sk = m_doc.features[ref]; + const int ei = m_rib_entity ? m_rib_entity->GetValue() : 0; + if (ei < 0 || ei >= int(sk.entities.size())) { m_viewport->clear_extrude_gizmo(); return; } + const SketchEntity& e = sk.entities[ei]; + const Vec2d mid = (e.type == SketchEntity::Type::Line) ? Vec2d(0.5 * (e.p0 + e.p1)) + : Vec2d(e.center); + m_viewport->set_extrude_gizmo(sk.plane, mid, + m_rib_depth ? m_rib_depth->GetValue() : 0.0, + 0.0, false, false); + return; + } + + if (m_active == Tool::SurfaceExtrude) { + const int ref = m_surf_extrude_sketch_ref; + if (ref < 0 || ref >= int(m_doc.features.size())) { m_viewport->clear_extrude_gizmo(); return; } + const CadFeature& sk = m_doc.features[ref]; + Vec2d c(0, 0); + if (!sk.profile.points.empty()) { + for (const Vec2d& p : sk.profile.points) c += p; + c /= double(sk.profile.points.size()); + } + m_viewport->set_extrude_gizmo(sk.plane, c, + m_surf_extrude_distance ? m_surf_extrude_distance->GetValue() : 0.0, + 0.0, false, false); + return; + } + + if (m_active == Tool::Thicken) { + const int b = m_sel_solid_body; + if (b < 0 || b >= int(m_doc.bodies.size()) || m_sel_solid_face < 0) { + m_viewport->clear_extrude_gizmo(); return; + } + TopoDS_Face f = GeometryEngine::face_by_index(m_doc.bodies[b].shape, m_sel_solid_face); + if (f.IsNull()) { m_viewport->clear_extrude_gizmo(); return; } + SketchPlane plane = SketchPlane::from_face(f); + Vec3d c = GeometryEngine::face_centroid_world(f); + Vec3d n = GeometryEngine::face_normal_world(f); + if (f.Orientation() == TopAbs_REVERSED) n = -n; // outward + sync_body_xform(); + if (b < int(m_body_xform.size())) { c = m_body_xform[b] * c; n = m_body_xform[b].linear() * n; } + plane.origin = c; + if (n.norm() > 1e-9) plane.normal = n.normalized(); + m_viewport->set_extrude_gizmo(plane, Vec2d(0, 0), + m_thicken_thickness ? m_thicken_thickness->GetValue() : 0.0, + 0.0, false, + m_thicken_flip && m_thicken_flip->GetValue()); + return; + } + + SketchPlane plane; + std::vector ents; + Vec2d centroid(0, 0); + bool have = false, have_centroid = false; + if (extrude_uses_loop()) { + plane = m_doc.features[m_extrude_sketch_ref].plane; + ents = m_viewport->selected_loop_entities(); + have = true; + } else if (m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size())) { + const CadFeature& sk = m_doc.features[m_extrude_sketch_ref]; + plane = sk.plane; + ents = sk.entities; + have = true; + if (ents.empty() && !sk.profile.points.empty()) { + for (const Vec2d& p : sk.profile.points) centroid += p; + centroid /= double(sk.profile.points.size()); + have_centroid = true; + } + // Primitive shape sketches (no entities/profile) are centred at the plane origin -> (0,0). + } else if (m_extrude_face_src >= 0 && !m_doc.bodies.empty()) { + // Face-as-profile (push/pull): anchor the arrow at the picked face's CENTROID, pointing + // along its outward normal. The face id is LOCAL to the owner body — route_feature reads + // it from `context` (the target, else the last body) — so look it up on that SAME body, + // never the whole-document compound (m_doc.body). from_face's plane origin sits at the + // plane's canonical point near the world origin, NOT on the face, which is why the arrow + // used to land on the bed. Carry the body's display Move transform so the arrow sits where + // the body is actually shown. + const int b = int(m_doc.bodies.size()) - 1; // matches route_feature's default context + TopoDS_Face srcf = GeometryEngine::face_by_index(m_doc.bodies[b].shape, m_extrude_face_src); + if (!srcf.IsNull()) { + plane = SketchPlane::from_face(srcf); + Vec3d c = GeometryEngine::face_centroid_world(srcf); + Vec3d n = GeometryEngine::face_normal_world(srcf); + if (srcf.Orientation() == TopAbs_REVERSED) n = -n; // outward, matches the kernel push + sync_body_xform(); + if (b < int(m_body_xform.size())) { c = m_body_xform[b] * c; n = m_body_xform[b].linear() * n; } + plane.origin = c; + if (n.norm() > 1e-9) plane.normal = n.normalized(); + have = true; + } + } + if (!have) { m_viewport->clear_extrude_gizmo(); return; } + + if (!ents.empty()) { + Vec2d acc(0, 0); int n = 0; + for (const SketchEntity& e : ents) { + switch (e.type) { + case SketchEntity::Type::Line: acc += 0.5 * (e.p0 + e.p1); ++n; break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + case SketchEntity::Type::Circle: + case SketchEntity::Type::Ellipse: acc += e.center; ++n; break; + case SketchEntity::Type::Point: acc += e.p0; ++n; break; + case SketchEntity::Type::BSpline: + if (!e.ctrl.empty()) { + Vec2d s(0, 0); for (const Vec2d& q : e.ctrl) s += q; + acc += s / double(e.ctrl.size()); ++n; + } + break; + } + } + if (n > 0) { centroid = acc / double(n); have_centroid = true; } + } + (void)have_centroid; // centroid defaults to (0,0) for primitive sketches + + const ExtrudeEnd end = static_cast(m_extrude_end->GetSelection()); + m_viewport->set_extrude_gizmo(plane, centroid, + m_distance->GetValue(), m_distance2->GetValue(), + end == ExtrudeEnd::TwoSided, m_flip->GetValue()); +} + +void DesignPanel::refresh_datum_planes() +{ + if (!m_viewport) return; + std::vector dplanes; + for (const auto& dp : m_doc.resolve_datum_planes()) dplanes.push_back(dp.second); + // Parallel per-plane extents, in the SAME order resolve_datum_planes emits + // (enabled Plane features, document order), so each datum draws at its u/v size. + std::vector dsizes; + for (const auto& f : m_doc.features) + if (f.type == CadFeatureType::Plane && f.enabled) + dsizes.emplace_back(f.plane_u_size, f.plane_v_size); + m_viewport->set_datum_planes(std::move(dplanes), std::move(dsizes)); + refresh_mate_connectors(); +} + +// Feed the connector frames to the viewport. resolve_datum_coordsys() emits them in document order +// over enabled CoordSys features, so the feature index can be recovered by walking the same filter — +// which is what tells us whether a given frame is the one the open Mate card will DRIVE. +void DesignPanel::refresh_mate_connectors() +{ + if (!m_viewport) return; + // Polarity is a property of the MATE, not of an open dialog: a connector that some committed + // mate drives must read as driven whenever it is on screen, or the glyph only tells the truth + // while a card happens to be open. The card, when open, wins — it is the live intent. + std::map role_by_feature; // feature index -> 1 fixed, 2 driven + for (const CadFeature& mf : m_doc.features) { + if (mf.type != CadFeatureType::Mate || !mf.enabled) continue; + if (mf.mate_cs_a >= 0) role_by_feature[mf.mate_cs_a] = 1; + if (mf.mate_cs_b >= 0) role_by_feature[mf.mate_cs_b] = 2; + } + const int cs_a = (m_active == Tool::Mate && m_mate_cs_a) ? m_mate_cs_a->GetSelection() : -1; + const int cs_b = (m_active == Tool::Mate && m_mate_cs_b) ? m_mate_cs_b->GetSelection() : -1; + + std::vector out; + // Origins, keyed both ways: a committed mate names its connectors by FEATURE index, the open + // card's combos by ordinal. Only resolved frames land here, so an unresolved end simply draws + // no pair line rather than a line to the origin of the world. + std::map origin_by_feature, origin_by_ordinal; + const auto frames = m_doc.resolve_datum_coordsys(); + size_t k = 0; + for (size_t i = 0; i < m_doc.features.size() && k < frames.size(); ++i) { + const CadFeature& f = m_doc.features[i]; + if (f.type != CadFeatureType::CoordSys || !f.enabled) continue; + const auto& fr = frames[k]; + const int ordinal = int(k); + ++k; + if (!fr.error.empty()) continue; // unresolved: draw nothing, never a guess + DesignSketchTool::MateConnectorGlyph g; + g.origin = fr.origin; + g.x = fr.x; + g.y = fr.y; + const auto it = role_by_feature.find(int(i)); + g.role = (ordinal == cs_b) ? 2 : (ordinal == cs_a ? 1 + : (it != role_by_feature.end() ? it->second : 0)); + // A face-only connector whose face gave no usable in-plane edge fell back to the hint; that + // is the case the glyph has to confess rather than absorb. + g.roll_undefined = (f.coordsys_type == CoordSysType::FaceAndDirection + && f.coordsys_edge < 0); + origin_by_feature[int(i)] = g.origin; + origin_by_ordinal[ordinal] = g.origin; + out.push_back(g); + } + + std::vector> links; + auto add_link = [&links](const std::map& m, int a, int b) { + const auto ia = m.find(a), ib = m.find(b); + if (ia != m.end() && ib != m.end()) links.emplace_back(ia->second, ib->second); + }; + for (const CadFeature& mf : m_doc.features) + if (mf.type == CadFeatureType::Mate && mf.enabled) + add_link(origin_by_feature, mf.mate_cs_a, mf.mate_cs_b); + if (cs_a >= 0 && cs_b >= 0 && cs_a != cs_b) + add_link(origin_by_ordinal, cs_a, cs_b); // the live pick, not yet committed + + m_viewport->set_mate_connectors(std::move(out)); + m_viewport->set_mate_links(std::move(links)); +} + +void DesignPanel::update_datum_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Plane) { m_viewport->clear_datum_gizmo(); update_reference_planes(); return; } + + // Resolve the candidate plane's FRAME against the doc. resolve_datum_planes() is const and + // doesn't rebuild bodies, so transiently swap/append the candidate to read its resolved frame, + // then restore — works for both a fresh (uncommitted) plane and an edit of a committed one. + CadFeature f = build_candidate(Tool::Plane); + const bool editing = (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size()) && + m_doc.features[m_edit_index].type == CadFeatureType::Plane); + CadFeature saved; + int slot; + if (editing) { saved = m_doc.features[m_edit_index]; m_doc.features[m_edit_index] = f; slot = m_edit_index; } + else { m_doc.features.push_back(f); slot = int(m_doc.features.size()) - 1; } + + auto datums = m_doc.resolve_datum_planes(); + // Ordinal of `slot` among enabled Plane features = its index in the resolved list. + int ord = -1; + for (int i = 0; i <= slot; ++i) + if (m_doc.features[i].type == CadFeatureType::Plane && m_doc.features[i].enabled) ++ord; + const bool ok = (ord >= 0 && ord < int(datums.size())); + SketchPlane frame; if (ok) frame = datums[ord].second; + + if (editing) m_doc.features[m_edit_index] = saved; else m_doc.features.pop_back(); + + if (!ok) { m_viewport->clear_datum_gizmo(); update_reference_planes(); return; } + + // Offset arrow anchor = the base/face origin (datum origin walked back along its normal by the + // offset). Works for both Offset-from-base (no tilt) and Offset-from-face exactly. + const Vec3d anchor = frame.origin - frame.normal * f.plane_offset; + const bool offset_on = (f.plane_type == PlaneType::Offset); + m_viewport->set_datum_gizmo(frame, f.plane_u_size, f.plane_v_size, + anchor, frame.normal, f.plane_offset, offset_on); + update_reference_planes(); // base ghosts (origins + datums) follow the tool/model state +} + +void DesignPanel::update_helix_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Helix) { m_viewport->clear_helix_gizmo(); return; } + m_viewport->set_helix_gizmo(plane_from_choice(m_helix_plane->GetSelection()), + m_helix_radius ? m_helix_radius->GetValue() : 0.0, + m_helix_pitch ? m_helix_pitch->GetValue() : 1.0, + m_helix_height ? m_helix_height->GetValue() : 0.0, + m_helix_taper ? m_helix_taper->GetValue() : 0.0, + m_helix_left_handed && m_helix_left_handed->GetValue()); +} + +void DesignPanel::update_rib_gizmo() +{ + if (!m_viewport) return; + if (m_active != Tool::Rib) { m_viewport->clear_rib_gizmo(); return; } + // Same resolution the Tool::Rib branch of update_extrude_gizmo() uses — the depth arrow and + // this share one sketch and one entity, and must never disagree about which line that is. + const int ssel = m_rib_sketch ? m_rib_sketch->GetSelection() : wxNOT_FOUND; + const int ref = (ssel != wxNOT_FOUND) + ? int(reinterpret_cast(m_rib_sketch->GetClientData(ssel))) : -1; + if (ref < 0 || ref >= int(m_doc.features.size())) { m_viewport->clear_rib_gizmo(); return; } + const CadFeature& sk = m_doc.features[ref]; + const int ei = m_rib_entity ? m_rib_entity->GetValue() : 0; + if (ei < 0 || ei >= int(sk.entities.size())) { m_viewport->clear_rib_gizmo(); return; } + const SketchEntity& e = sk.entities[ei]; + if (e.type != SketchEntity::Type::Line) { m_viewport->clear_rib_gizmo(); return; } // rib is line-only + m_viewport->set_rib_gizmo(sk.plane, e.p0, e.p1, + m_rib_thickness ? m_rib_thickness->GetValue() : 0.0); +} + +// Onshape default planes: the XY/XZ/YZ reference planes are persistent, transparent, labelled, and +// larger than the bed — shown as the FALLBACK when there is no object yet. When the Plane tool is +// open they additionally surface existing datums so a base can be picked. Single authority for the +// reference-plane overlay (set/clear_base_pick). +void DesignPanel::update_reference_planes() +{ + if (!m_viewport) return; + // Default planes pass through the modeling origin (bed centre) — same point the kernel uses to + // resolve XY/XZ/YZ datum bases, so the ghosts, the datums and new sketches all coincide. + const Vec3d o = m_doc.modeling_origin; + SketchPlane xy = SketchPlane::XY(); xy.origin += o; + SketchPlane xz = SketchPlane::XZ(); xz.origin += o; + SketchPlane yz = SketchPlane::YZ(); yz.origin += o; + std::vector bp = { xy, xz, yz }; + std::vector bi = { 0, 1, 2 }; + std::vector bl = { "XY", "XZ", "YZ" }; + + if (m_active == Tool::Plane) { + // Base picking only makes sense for the Offset method (others reference faces/edges). + if (m_plane_type && (PlaneType)m_plane_type->GetSelection() == PlaneType::Offset) { + auto datums = m_doc.resolve_datum_planes(); // already in world coords (origin applied) + for (int i = 0; i < int(datums.size()); ++i) { + bp.push_back(datums[i].second); bi.push_back(3 + i); bl.push_back(datums[i].first); + } + m_viewport->set_base_pick(std::move(bp), std::move(bi), std::move(bl)); + } else { + m_viewport->clear_base_pick(); + } + return; + } + // Fallback (Onshape default planes): show the 3 reference planes while there is no SOLID body + // yet — so they persist through the 2D-sketch phase and reappear after a sketch is confirmed + // (a sketch creates no body). They no longer block selection: clicking existing geometry wins, + // a base-plane pick only fires on a click that hit nothing else (see on_mouse fall-through). + // Available while there is no solid yet OR while the user is actually choosing a sketch + // plane. The second half fixes a dead end: delete a sketch on a document that still has a + // body, press Sketch, and act_sketch says "click a face or a reference plane" — with the + // reference planes already taken away, because a body existed. The instruction was + // impossible to follow and there was no way to start a sketch at all short of finding a + // face to click. + // + // Not simply always-on: m_dbp_active both RENDERS and picks, so three translucent planes + // would otherwise float over every finished model. Tying them to Sketch mode shows them + // exactly when they are the thing being chosen, and hides them again on Finish. + if (m_doc.bodies.empty() || m_ui_mode == UiMode::Sketch) + m_viewport->set_base_pick(std::move(bp), std::move(bi), std::move(bl)); + else + m_viewport->clear_base_pick(); +} + +TriangleMesh DesignPanel::ghost_from_bodies(const std::vector& per_body) const +{ + TriangleMesh out; + for (size_t b = 0; b < per_body.size(); ++b) { + TriangleMesh m = per_body[b]; + if (b < m_body_xform.size()) m.transform(m_body_xform[b]); + out.merge(m); + } + return out; +} + +bool DesignPanel::show_mate_ghost(int kind, int cs_a, int cs_b, + double offset, double angle_deg, bool flip, std::string& err) +{ + CadFeature cand; + cand.type = CadFeatureType::Mate; + cand.mate_kind = kind; + cand.mate_cs_a = cs_a; + cand.mate_cs_b = cs_b; + cand.mate_offset = offset; + cand.mate_angle = angle_deg; + cand.mate_flip = flip; + + TriangleMesh mesh; + std::vector pbm; + if (!m_doc.preview(cand, mesh, pbm, err)) { + m_viewport->clear_preview(); + m_viewport->set_body_hidden(false); + return false; + } + m_viewport->set_preview_mesh(ghost_from_bodies(pbm)); + // The ghost is the WHOLE assembly in its post-mate pose, not an added lump, so the committed + // bodies have to go: left visible they would draw the mated body in both places at once and + // z-fight everything else against its own copy. Same reason Dressup and Draft hide them. + m_viewport->set_body_hidden(true); + return true; +} + +void DesignPanel::refresh_preview() +{ + if (m_active == Tool::None) { m_viewport->clear_preview(); return; } + + // Transform has no ghost: it moves an existing body rather than building a new one, so its + // preview IS the body, shown through the display transform the gizmo already drives. + if (m_active == Tool::Transform) { xf_live_preview(); return; } + + // Features that produce NO solid: a sketch, the three datums, a helix curve, and Project + // (which emits sketch entities). They have no ghost to build, so they must not go through + // the solid-preview path below — it finds nothing and reports "invalid: preview produced + // no geometry", which is what Axis / CoordSys / Helix / Project did on an empty document. + // route_feature() skips these for the same reason, so the two agree on what is not a solid. + if (m_active == Tool::Sketch || m_active == Tool::Plane || m_active == Tool::Axis || + m_active == Tool::CoordSys || m_active == Tool::Helix || m_active == Tool::Project) { + m_viewport->clear_preview(); + m_status->SetForegroundColour(wxColour(120, 210, 120)); + wxString ready; + switch (m_active) { + case Tool::Plane: ready = _L("Plane ready"); break; + case Tool::Axis: ready = _L("Axis ready"); break; + case Tool::CoordSys: ready = _L("Coord Sys ready"); break; + case Tool::Helix: ready = _L("Helix ready"); break; + case Tool::Project: ready = _L("Project ready"); break; + default: ready = _L("Sketch ready"); break; + } + set_status(ready); + for (wxButton* b : m_confirm_btns) if (b) b->Enable(true); + m_status->Refresh(); + update_datum_gizmo(); // Plane card: show/refresh the in-canvas resize handles + update_helix_gizmo(); // Helix card: draw the live curve + drag handles (no solid ghost) + return; + } + + if (m_active == Tool::Mate) { + // A mate produces no NEW geometry, but it MOVES a body — and the moved assembly is + // exactly the ghost worth showing. This branch used to clear the preview outright, + // saying a mate has no 3D ghost; the kernel had no such opinion (preview() routes a + // Mate candidate through apply_mate on a throwaway copy), so that one line was the + // whole of gap G3. The card's own gate stays: Confirm is disabled when <2 CoordSys + // exist or when A == B, because neither of those is a kernel error, only an unfinished + // form, and the kernel's message for them would be worse than these. + const bool has_two = m_mate_cs_a && m_mate_cs_a->GetCount() >= 2; + const int sel_a = has_two ? m_mate_cs_a->GetSelection() : wxNOT_FOUND; + const int sel_b = has_two ? m_mate_cs_b->GetSelection() : wxNOT_FOUND; + const bool same = has_two && sel_a != wxNOT_FOUND && sel_b != wxNOT_FOUND && sel_a == sel_b; + bool ok = has_two && !same; + if (!has_two) { + m_viewport->clear_preview(); + m_viewport->set_body_hidden(false); // the ghost replaced them; give them back + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate needs at least two CoordSys features")); + } else if (same) { + m_viewport->clear_preview(); + m_viewport->set_body_hidden(false); + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Mate: CS A and CS B must be different")); + } else { + sync_body_xform(); // same reason as the solid path below: drop stale per-body poses + const int cs_a = int(reinterpret_cast(m_mate_cs_a->GetClientData(sel_a))); + const int cs_b = int(reinterpret_cast(m_mate_cs_b->GetClientData(sel_b))); + std::string err; + ok = show_mate_ghost(m_mate_kind ? m_mate_kind->GetSelection() : 0, cs_a, cs_b, + m_mate_offset ? m_mate_offset->GetValue() : 0.0, + m_mate_angle ? m_mate_angle->GetValue() : 0.0, + m_mate_flip && m_mate_flip->GetValue(), err); + if (ok) { + m_status->SetForegroundColour(wxColour(120, 210, 120)); + set_status(_L("Mate ready")); + } else { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Invalid: ") + wxString::FromUTF8(err)); + } + } + for (wxButton* b : m_confirm_btns) if (b) b->Enable(ok); + m_status->Refresh(); + return; + } + + // Trim m_body_xform to the LIVE committed bodies before building the ghost. A move + // writes a per-body display transform keyed by index; if a moved body is later deleted + // or consumed, its stale transform must not survive and get re-applied to whatever new + // body lands at that index — that was painting fresh extrudes as a moved+rotated ghost + // far from the sketch. resize() drops entries beyond the current body count. + sync_body_xform(); + + CadFeature cand = build_candidate(m_active); + TriangleMesh mesh; + std::string err; + bool ok = false; + + // The body is displayed through its per-body Move transform (m_body_xform); the ghost is + // built from the untransformed kernel, so without this it floats back at the origin once a + // body has been moved. Re-merge the per-body ghost meshes with the same transforms applied. + auto ghost_from = [this](const std::vector& pbm) { return ghost_from_bodies(pbm); }; + + const bool editing_single = (m_edit_index >= 0); + if (editing_single) { + // Edit-mode preview: stacking the candidate on top of the live body would + // re-apply the feature being edited (fillet-on-fillet) — wrong, and a + // source of OCCT failures. Instead evaluate the *replace* on a throwaway + // copy so the ghost is the true post-edit body. + CadDocument tmp = m_doc; + ok = tmp.replace_feature(m_edit_index, cand); + if (ok) mesh = ghost_from(tmp.display_body_meshes); else err = tmp.error; + } else { + std::vector pbm; + ok = m_doc.preview(cand, mesh, pbm, err); + if (ok) mesh = ghost_from(pbm); + } + + if (ok) { + m_viewport->set_preview_mesh(mesh); + m_status->SetForegroundColour(wxColour(120, 210, 120)); // ok = green + set_status(wxString::Format(_L("Preview — %zu triangles"), mesh.its.indices.size())); + } else { + m_viewport->clear_preview(); + m_status->SetForegroundColour(wxColour(235, 110, 110)); // invalid = red + set_status(_L("Invalid: ") + wxString::FromUTF8(err)); + } + // Onshape parity: a broken candidate cannot be committed. Grey the active dialog's + // Confirm so the user sees the gate before clicking; the red status says why. + for (wxButton* b : m_confirm_btns) + if (b != nullptr) b->Enable(ok); + // Fillet/Chamfer/Draft: once the target edge/face yields a valid result, show ONLY the + // preview (hide the base bodies) so the user sees the finished shape, not the old solid + // doubled with the ghost. Before a valid pick the body stays visible so it can be picked. + m_viewport->set_body_hidden((m_active == Tool::Dressup || m_active == Tool::Draft) && ok); + m_status->Refresh(); + + // Refresh the in-canvas Extrude depth arrow (self-gates: only while the Extrude card is open). + update_extrude_gizmo(); + // Same for the Fillet/Chamfer radius arrow (self-gates: Dressup card + a picked edge). + update_fillet_gizmo(); + // Same for the Hole footprint circle + diameter/depth arrows (self-gates: Hole card). + update_hole_gizmo(); + // Same for the Thread footprint circle + radius/length arrows (self-gates: Thread card). + update_thread_gizmo(); + // Same for the Shell thickness arrow on the picked face (self-gates: Shell card + a face). + update_shell_gizmo(); + // Same for the Revolve angle-arc around the axis (self-gates: only while the Revolve card is open). + update_revolve_gizmo(); + // Same for the Draft angle-arc around the face centroid (self-gates: only while the Draft card is open). + update_draft_gizmo(); + // Same for the Cut plane-rectangle + offset arrow (self-gates: only while the Cut card is open). + update_cut_gizmo(); + // Same for the Pattern spacing arrow / angle-arc (self-gates: only while the Pattern card is open). + update_pattern_gizmo(); + // Datum-plane resize handles (self-gates: only while the Plane card is open). + update_datum_gizmo(); + // Helix curve + handles (self-gates: only while the Helix card is open). + update_helix_gizmo(); + // Rib slab footprint + thickness handles (self-gates: only while the Rib card is open). + update_rib_gizmo(); + update_operand_highlight(); +} + +// The tool-card frame is only worth drawing when a card is actually inside it — +// otherwise an empty bordered box floats above the feature tree. +void DesignPanel::update_cards_frame() +{ + if (m_cards == nullptr || m_cards->GetSizer() == nullptr) return; + wxSizer* root = m_form ? m_form->GetSizer() : nullptr; + if (root == nullptr) return; + bool any = false; + for (const wxSizerItem* it : m_cards->GetSizer()->GetChildren()) + if (it->IsShown()) { any = true; break; } + root->Show(m_cards, any, false); // non-recursive: don't re-show the hidden cards inside +} + +// Move/Rotate card: numeric entry that composes the same transform the drag gizmo builds — +// translation in world mm plus a rotation about the body's centroid, applied onto the pose the +// body had when Move opened (m_move_prev), so typing and dragging cannot fight each other. +void DesignPanel::apply_move_card() +{ + const int b = m_move_body; + if (b < 0 || b >= int(m_body_xform.size()) || b >= int(m_doc.display_body_meshes.size())) return; + + const double ang = m_move_angle ? m_move_angle->GetValue() * M_PI / 180.0 : 0.0; + const int ax = m_move_axis ? m_move_axis->GetSelection() : 2; + const Vec3d axis = (ax == 0) ? Vec3d::UnitX() : (ax == 1) ? Vec3d::UnitY() : Vec3d::UnitZ(); + const Vec3d d(m_move_dx ? m_move_dx->GetValue() : 0.0, + m_move_dy ? m_move_dy->GetValue() : 0.0, + m_move_dz ? m_move_dz->GetValue() : 0.0); + + // Rotate about the body's own centre, not the world origin. + const Vec3d pivot = m_move_prev * m_doc.display_body_meshes[b].bounding_box().center(); + Transform3d x = Transform3d::Identity(); + x.translate(d + pivot); + x.rotate(Eigen::AngleAxisd(ang, axis)); + x.translate(-pivot); + + m_body_xform[b] = x * m_move_prev; + feed_bodies(); + if (m_viewport) m_viewport->request_repaint(); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(_L("Body %d — moved (%.1f, %.1f, %.1f) mm, rotated %.1f°"), + b + 1, d.x(), d.y(), d.z(), + m_move_angle ? m_move_angle->GetValue() : 0.0)); + m_status->Refresh(); +} + +void DesignPanel::show_move_card(bool show) +{ + if (m_box_move == nullptr || m_cards == nullptr || m_cards->GetSizer() == nullptr) return; + m_cards->GetSizer()->Show(m_box_move, show, true); + update_cards_frame(); + if (m_form) { m_form->Layout(); m_form->FitInside(); } +} + +// Push the tool's current parameters into the live sketch tool before Polygon starts. They +// come from the offer's Polygon submenu (or from the last choice made there), never from a card. +void DesignPanel::push_polygon_params() +{ + if (m_viewport == nullptr) return; + m_viewport->set_sketch_polygon_sides(m_poly_sides); + m_viewport->set_sketch_polygon_circumscribed(m_poly_circumscribed); +} + +void DesignPanel::open_tool(Tool t) +{ + m_active = t; + // Fillet/Chamfer/Draft no longer fade the body see-through; instead, once a valid target + // is picked, refresh_preview hides the base bodies entirely (preview-only). Keep it opaque + // here so the body is fully visible for picking the edge/face. + // Body focus follows the CoordSys card: entering any other tool drops it. Read it back + // from the combo rather than clearing outright — editing a CoordSys feature loads the + // card (and its body) BEFORE open_tool runs, and a blind clear would strand the viewport + // showing "Body N" while picking stayed unrestricted. + if (m_viewport) { m_viewport->set_body_translucent(false); m_viewport->set_body_hidden(false); + m_viewport->set_xray_focus(t == Tool::CoordSys && m_cs_body ? m_cs_body->GetSelection() - 1 : -1); } + wxSizer* s = m_cards->GetSizer(); + s->Show(m_box_sketch, t == Tool::Sketch, true); + s->Show(m_box_extrude, t == Tool::Extrude, true); + s->Show(m_box_dressup, t == Tool::Dressup, true); + s->Show(m_box_hole, t == Tool::Hole, true); + s->Show(m_box_thread, t == Tool::Thread, true); + s->Show(m_box_shell, t == Tool::Shell, true); + s->Show(m_box_revolve, t == Tool::Revolve, true); + s->Show(m_box_sweep, t == Tool::Sweep, true); + s->Show(m_box_pattern, t == Tool::Pattern, true); + s->Show(m_box_plane, t == Tool::Plane, true); + s->Show(m_box_axis, t == Tool::Axis, true); + s->Show(m_box_coordsys, t == Tool::CoordSys, true); + s->Show(m_box_loft, t == Tool::Loft, true); + s->Show(m_box_boolean, t == Tool::Boolean, true); + s->Show(m_box_cut, t == Tool::Cut, true); + s->Show(m_box_draft, t == Tool::Draft, true); + s->Show(m_box_surf_extrude, t == Tool::SurfaceExtrude, true); + s->Show(m_box_surf_revolve, t == Tool::SurfaceRevolve, true); + s->Show(m_box_surf_loft, t == Tool::SurfaceLoft, true); + s->Show(m_box_surf_fill, t == Tool::SurfaceFill, true); + s->Show(m_box_surf_offset, t == Tool::SurfaceOffset, true); + s->Show(m_box_surf_thicken, t == Tool::ThickenSurface, true); + s->Show(m_box_transform, t == Tool::Transform, true); + s->Show(m_box_mirror, t == Tool::Mirror, true); + s->Show(m_box_thicken, t == Tool::Thicken, true); + s->Show(m_box_rib, t == Tool::Rib, true); + s->Show(m_box_project, t == Tool::Project, true); + s->Show(m_box_delete_face, t == Tool::DeleteFace, true); + s->Show(m_box_helix, t == Tool::Helix, true); + s->Show(m_box_mate, t == Tool::Mate, true); + s->Show(m_box_insert, t == Tool::Insert, true); + s->Show(m_box_expr, m_edit_index >= 0, true); // expression binding available during edit only + + if (t == Tool::Mate) { + // Populate both CoordSys pickers with every CoordSys feature; store the real + // feature index in client data. Keep prior selection when re-editing. + int keep_a = -1, keep_b = -1; + if (m_mate_cs_a->GetCount() > 0 && m_mate_cs_a->GetSelection() != wxNOT_FOUND) { + const auto* cl = m_mate_cs_a->GetClientData(m_mate_cs_a->GetSelection()); + if (cl) keep_a = int(reinterpret_cast(cl)); + } + if (m_mate_cs_b->GetCount() > 0 && m_mate_cs_b->GetSelection() != wxNOT_FOUND) { + const auto* cl = m_mate_cs_b->GetClientData(m_mate_cs_b->GetSelection()); + if (cl) keep_b = int(reinterpret_cast(cl)); + } + m_mate_cs_a->Clear(); + m_mate_cs_b->Clear(); + for (int i = 0; i < int(m_doc.features.size()); ++i) { + if (m_doc.features[i].type != CadFeatureType::CoordSys) continue; + const wxString nm = wxString::FromUTF8(m_doc.features[i].name); + const int pos_a = combo_append_index(m_mate_cs_a, nm, i); + const int pos_b = combo_append_index(m_mate_cs_b, nm, i); + if (i == keep_a) m_mate_cs_a->SetSelection(pos_a); + if (i == keep_b) m_mate_cs_b->SetSelection(pos_b); + } + if (keep_a < 0 && m_mate_cs_a->GetCount() > 0) m_mate_cs_a->SetSelection(0); + if (keep_b < 0 && m_mate_cs_b->GetCount() > 0) m_mate_cs_b->SetSelection(0); + } + + if (t == Tool::Revolve && m_revolve_sketch_ref >= 0 + && m_revolve_sketch_ref < int(m_doc.features.size())) + m_revolve_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_revolve_sketch_ref].name)); + + if (t == Tool::Sweep) { + if (m_sweep_profile_ref >= 0 && m_sweep_profile_ref < int(m_doc.features.size())) + m_sweep_profile_label->SetLabel(_L("Profile: ") + + wxString::FromUTF8(m_doc.features[m_sweep_profile_ref].name)); + // Populate the path picker with every Sketch feature except the profile itself; + // the feature index rides in the entry's client data. Pre-select the stored path + // (re-edit), else the first available sketch. + m_sweep_path->Clear(); + int sel_idx = wxNOT_FOUND; + for (int i = 0; i < int(m_doc.features.size()); ++i) { + const CadFeature& sf = m_doc.features[i]; + if (sf.type != CadFeatureType::Sketch || i == m_sweep_profile_ref) continue; + const int pos = combo_append_index(m_sweep_path, wxString::FromUTF8(sf.name), i); + if (i == m_sweep_path_ref) sel_idx = pos; + } + if (sel_idx != wxNOT_FOUND) m_sweep_path->SetSelection(sel_idx); + else if (m_sweep_path->GetCount() > 0) m_sweep_path->SetSelection(0); + } + + if (t == Tool::Loft) { + // List every Sketch feature; the feature index for each row rides in + // m_loft_sketch_idx. Re-check the stored profile refs (re-edit). + m_loft_list->Clear(); + m_loft_sketch_idx.clear(); + for (int i = 0; i < int(m_doc.features.size()); ++i) { + const CadFeature& sf = m_doc.features[i]; + if (sf.type != CadFeatureType::Sketch) continue; + const int row = m_loft_list->Append(wxString::FromUTF8(sf.name)); + m_loft_sketch_idx.push_back(i); + if (std::find(m_loft_refs.begin(), m_loft_refs.end(), i) != m_loft_refs.end()) + m_loft_list->Check(row, true); + } + } + + if (t == Tool::SurfaceExtrude) { + if (m_surf_extrude_sketch_ref >= 0 && m_surf_extrude_sketch_ref < int(m_doc.features.size())) + m_surf_extrude_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_extrude_sketch_ref].name)); + } + + if (t == Tool::SurfaceRevolve) { + if (m_surf_revolve_sketch_ref >= 0 && m_surf_revolve_sketch_ref < int(m_doc.features.size())) + m_surf_revolve_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_revolve_sketch_ref].name)); + } + + if (t == Tool::SurfaceLoft) { + m_surf_loft_list->Clear(); + m_surf_loft_sketch_idx.clear(); + for (int i = 0; i < int(m_doc.features.size()); ++i) { + const CadFeature& sf = m_doc.features[i]; + if (sf.type != CadFeatureType::Sketch) continue; + const int row = m_surf_loft_list->Append(wxString::FromUTF8(sf.name)); + m_surf_loft_sketch_idx.push_back(i); + if (std::find(m_surf_loft_refs.begin(), m_surf_loft_refs.end(), i) != m_surf_loft_refs.end()) + m_surf_loft_list->Check(row, true); + } + } + + if (t == Tool::SurfaceFill) { + if (m_surf_fill_sketch_ref >= 0 && m_surf_fill_sketch_ref < int(m_doc.features.size())) + m_surf_fill_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_surf_fill_sketch_ref].name)); + } + + // Shell and Draft both take their face from the live pick at Confirm time, but until now + // only the PICK handler wrote their labels. So the natural order — pick the face, then open + // the card — left Shell reading "(all faces — closed hollow)" and Draft "(pick a side face)" + // while Confirm went on to use m_sel_solid_face regardless: the card described one operation + // and performed another. Initialise from the current selection here, exactly as Extrude does + // with m_extrude_face_src below. Skipped while re-editing, because load_feature_into_dialog + // has already written the label from the feature's own stored face and runs before this. + // Same reasoning for Dress-up, whose target is the picked EDGE (falling back to the group). + if (t == Tool::Dressup && m_edit_index < 0) + sync_dressup_target(); + + if (t == Tool::Shell && m_edit_index < 0) + m_shell_face_label->SetLabel(m_sel_solid_face >= 0 + ? wxString::Format(_L("Face %d"), m_sel_solid_face) + : _L("(all faces — closed hollow)")); + + if (t == Tool::Draft && m_edit_index < 0) + m_draft_face_label->SetLabel(m_sel_solid_face >= 0 + ? wxString::Format(_L("Face %d"), m_sel_solid_face) + : _L("(pick a side face)")); + + if (t == Tool::Extrude) { + if (m_extrude_face_src >= 0) + m_extrude_sketch_label->SetLabel( + wxString::Format(_L("Face %d (push/pull)"), m_extrude_face_src)); + else if (m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size())) + m_extrude_sketch_label->SetLabel(_L("Sketch: ") + + wxString::FromUTF8(m_doc.features[m_extrude_sketch_ref].name)); + // A fresh extrude defaults to New body — even when other bodies exist — so + // overlapping extrudes stay SEPARATE solids instead of silently fusing. Joining + // is opt-in (pick "Join"). Engraving art onto a face still defaults to Cut. + // (Edit-mode keeps the feature's stored mode, set below.) + if (m_edit_index < 0) { + const bool on_face_import = + m_extrude_sketch_ref >= 0 && m_extrude_sketch_ref < int(m_doc.features.size()) + && m_doc.features[m_extrude_sketch_ref].import_on_face; + if (on_face_import) { + m_mode->SetSelection(2); // Cut — engrave into the face + m_flip->SetValue(true); // extrude inward (the face normal points out) + } else { + m_mode->SetSelection(0); // New body (was: Add when a body already existed) + } + } + } + + // Retitle the active card's header: edit-mode shows the feature's real name, + // add-mode previews the type + next feature number (Onshape "Extrude 1"). + const bool editing = (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size())); + auto title = [&](const wxString& base) -> wxString { + return editing ? wxString::FromUTF8(m_doc.features[m_edit_index].name) + : base + wxString::Format(" %d", m_feature_counter + 1); + }; + switch (t) { + case Tool::Sketch: m_hdr_sketch->SetLabel(title(_L("Sketch"))); break; + case Tool::Extrude: m_hdr_extrude->SetLabel(title(_L("Extrude"))); break; + case Tool::Dressup: m_hdr_dressup->SetLabel(title( + m_dressup_type->GetSelection() == 0 ? _L("Fillet") : _L("Chamfer"))); break; + case Tool::Hole: m_hdr_hole->SetLabel(title(_L("Hole"))); break; + case Tool::Thread: m_hdr_thread->SetLabel(title(_L("Thread"))); break; + case Tool::Shell: m_hdr_shell->SetLabel(title(_L("Shell"))); break; + case Tool::Revolve: m_hdr_revolve->SetLabel(title(_L("Revolve"))); break; + case Tool::Sweep: m_hdr_sweep->SetLabel(title(_L("Sweep"))); break; + case Tool::Pattern: m_hdr_pattern->SetLabel(title(_L("Pattern"))); break; + case Tool::Plane: m_hdr_plane->SetLabel(title(_L("Plane"))); break; + case Tool::Loft: m_hdr_loft->SetLabel(title(_L("Loft"))); break; + case Tool::Draft: m_hdr_draft->SetLabel(title(_L("Draft"))); break; + case Tool::Boolean: m_hdr_boolean->SetLabel(title(_L("Boolean"))); break; + case Tool::Cut: m_hdr_cut->SetLabel(title(_L("Cut"))); break; + case Tool::Axis: m_hdr_axis->SetLabel(title(_L("Axis"))); break; + case Tool::CoordSys: m_hdr_coordsys->SetLabel(title(_L("Coord Sys"))); break; + case Tool::SurfaceExtrude: m_hdr_surf_extrude->SetLabel(title(_L("Surface Extrude"))); break; + case Tool::SurfaceRevolve: m_hdr_surf_revolve->SetLabel(title(_L("Surface Revolve"))); break; + case Tool::SurfaceLoft: m_hdr_surf_loft->SetLabel(title(_L("Surface Loft"))); break; + case Tool::SurfaceFill: m_hdr_surf_fill->SetLabel(title(_L("Surface Fill"))); break; + case Tool::SurfaceOffset: m_hdr_surf_offset->SetLabel(title(_L("Surface Offset"))); break; + case Tool::ThickenSurface: m_hdr_surf_thicken->SetLabel(title(_L("Thicken Surface"))); break; + case Tool::Transform: m_hdr_transform->SetLabel(title(_L("Transform"))); break; + case Tool::Mirror: m_hdr_mirror->SetLabel(title(_L("Mirror"))); break; + case Tool::Thicken: m_hdr_thicken->SetLabel(title(_L("Thicken"))); break; + case Tool::Rib: m_hdr_rib->SetLabel(title(_L("Rib"))); break; + case Tool::Project: m_hdr_project->SetLabel(title(_L("Project"))); break; + case Tool::DeleteFace: m_hdr_delete_face->SetLabel(title(_L("Delete Face"))); break; + case Tool::Helix: m_hdr_helix->SetLabel(title(_L("Helix"))); break; + case Tool::Mate: m_hdr_mate->SetLabel(title(_L("Mate"))); break; + case Tool::Insert: break; // header set by open_insert_card() + case Tool::None: break; + } + + // A card that consumes a face must say WHICH face the moment it appears. These labels used to + // be written only by the pick handler, which runs while a card is already open — so a card + // opened FROM a selection (the offer's whole premise) showed the previous pick, or the "(pick + // one)" placeholder over a face it was in fact about to use. Same law as the Construction + // toggle: a control that carries state has to show it. One writer, on open, for all three. + { + const bool have = m_sel_solid_face >= 0; + const wxString face_name = have ? wxString::Format(_L("Face %d"), m_sel_solid_face) : wxString(); + if (t == Tool::Thicken && m_thicken_face_label) + m_thicken_face_label->SetLabel(have ? face_name : _L("(pick a solid face)")); + if (t == Tool::Shell && m_shell_face_label) + m_shell_face_label->SetLabel(have ? face_name : _L("(all faces — closed hollow)")); + if (t == Tool::Draft && m_draft_face_label) + m_draft_face_label->SetLabel(have ? face_name : _L("(pick a side face)")); + } + + if (editing) { + populate_expr_fields(t); // field-name combo for this feature type + // Display current expression bindings on the edited feature + const CadFeature& ef = m_doc.features[m_edit_index]; + if (ef.expr.empty()) { + m_expr_status->SetLabel(_L("(no bindings)")); + m_expr_status->SetForegroundColour(dp_sec_text()); + } else { + wxString s; + for (const auto& [field, e] : ef.expr) { + if (!s.IsEmpty()) s += "; "; + s += wxString::FromUTF8(field) + " = " + wxString::FromUTF8(e); + } + m_expr_status->SetLabel(s); + m_expr_status->SetForegroundColour(dp_ctl_text()); + } + } + + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + update_action_bar(); // a tool is now active -> show the unified ✓/✗ + refresh_preview(); + + // Add-mode Transform arms the move gizmo on the card's body so the prominent verb is the + // geometry-first control; the card mirrors the drag. Edit mode keeps today's card-only path. + if (t == Tool::Transform && m_edit_index < 0) + arm_transform_gizmo(); + // Opening Boolean re-aims the viewport picks at the target slot, so the first click after + // the card appears always means "keep this one" regardless of what the last session did. + if (t == Tool::Boolean) + m_bool_next_slot = 0; +} + +void DesignPanel::close_tool() +{ + m_active = Tool::None; + set_active_tool_btn(nullptr); // clear the active-tool teal highlight + // Single revert point for the Transform gizmo: Esc, switching tools, and Cancel all pass + // through here, so the body is never left displaced by a Transform that wasn't committed. + xf_clear_preview(); + if (m_xf_gizmo_body >= 0) { + sync_body_xform(); + if (m_xf_gizmo_body < int(m_body_xform.size())) + m_body_xform[m_xf_gizmo_body] = m_xf_gizmo_base; + if (m_viewport) m_viewport->clear_move_gizmo(); + feed_bodies(); + m_xf_gizmo_body = -1; + m_move_body = -1; + } + if (m_viewport) { m_viewport->set_body_translucent(false); m_viewport->set_body_hidden(false); m_viewport->set_xray_focus(-1); } // restore the opaque solid + wxSizer* s = m_cards->GetSizer(); + s->Show(m_box_sketch, false, true); + s->Show(m_box_extrude, false, true); + s->Show(m_box_dressup, false, true); + s->Show(m_box_hole, false, true); + s->Show(m_box_thread, false, true); + s->Show(m_box_shell, false, true); + s->Show(m_box_revolve, false, true); + s->Show(m_box_sweep, false, true); + s->Show(m_box_pattern, false, true); + s->Show(m_box_plane, false, true); + s->Show(m_box_axis, false, true); + s->Show(m_box_coordsys, false, true); + s->Show(m_box_loft, false, true); + s->Show(m_box_boolean, false, true); + s->Show(m_box_cut, false, true); + s->Show(m_box_draft, false, true); + s->Show(m_box_surf_extrude, false, true); + s->Show(m_box_surf_revolve, false, true); + s->Show(m_box_surf_loft, false, true); + s->Show(m_box_surf_fill, false, true); + s->Show(m_box_surf_offset, false, true); + s->Show(m_box_surf_thicken, false, true); + s->Show(m_box_transform, false, true); + s->Show(m_box_mirror, false, true); + s->Show(m_box_thicken, false, true); + s->Show(m_box_rib, false, true); + s->Show(m_box_project, false, true); + s->Show(m_box_delete_face, false, true); + s->Show(m_box_helix, false, true); + s->Show(m_box_mate, false, true); + s->Show(m_box_insert, false, true); + s->Show(m_box_expr, false, true); + m_viewport->clear_preview(); + m_viewport->clear_extrude_gizmo(); + m_viewport->clear_fillet_gizmo(); + m_viewport->clear_hole_gizmo(); + m_viewport->clear_thread_gizmo(); + m_viewport->clear_shell_gizmo(); + m_viewport->clear_revolve_gizmo(); + m_viewport->clear_draft_gizmo(); + m_viewport->clear_cut_gizmo(); + m_viewport->clear_pattern_gizmo(); + m_viewport->clear_datum_gizmo(); + m_viewport->set_operand_bodies(-1, -1); + m_viewport->set_highlight_sketches({}); + update_reference_planes(); // back to no-tool: show the origin planes if there is no object yet + update_cards_frame(); m_form->Layout(); + m_form->FitInside(); + update_action_bar(); // no feature tool active -> hide the bar (unless a mode keeps it) +} + +void DesignPanel::confirm_tool() +{ + // One undo boundary per committed feature (Extrude/Dressup/Hole/Thread/Shell, the + // legacy Sketch card via on_add_sketch, and edit-mode replace all funnel here). + m_doc.checkpoint(); + const bool editing_single = (m_edit_index >= 0); + + if (editing_single) { + // Edit mode: overwrite the existing feature instead of appending. + CadFeature cand = build_candidate(m_active); + bool ok = m_doc.replace_feature(m_edit_index, cand); + reset_edit_state(); + close_tool(); // clears the preview ghost + after_tree_edit(ok); // refresh tree/viewport/status (or "Edit rejected") + return; + } + + switch (m_active) { + case Tool::Sketch: on_add_sketch(); break; + case Tool::Extrude: on_add_extrude(); break; + case Tool::Dressup: on_add_dressup(); break; + case Tool::Hole: on_add_hole(); break; + case Tool::Thread: on_add_thread(); break; + case Tool::Shell: on_add_shell(); break; + case Tool::Revolve: on_add_revolve(); break; + case Tool::Sweep: on_add_sweep(); break; + case Tool::Pattern: on_add_pattern(); break; + case Tool::Plane: if (!on_add_plane()) return; break; // refused: keep the card and its picks + case Tool::Loft: on_add_loft(); break; + case Tool::Draft: on_add_draft(); break; + case Tool::Boolean: on_add_boolean(); break; + case Tool::Cut: on_add_cut(); break; + case Tool::Axis: on_add_axis(); break; + case Tool::CoordSys: on_add_coordsys(); break; + case Tool::Mate: on_add_mate(); break; + case Tool::SurfaceExtrude: on_add_surface_extrude(); break; + case Tool::SurfaceRevolve: on_add_surface_revolve(); break; + case Tool::SurfaceLoft: on_add_surface_loft(); break; + case Tool::SurfaceFill: on_add_surface_fill(); break; + case Tool::SurfaceOffset: on_add_surface_offset(); break; + case Tool::ThickenSurface: on_add_thicken_surface(); break; + case Tool::Transform: on_add_transform(); break; + case Tool::Mirror: on_add_mirror(); break; + case Tool::Thicken: on_add_thicken(); break; + case Tool::Rib: on_add_rib(); break; + case Tool::Project: on_add_project(); break; + case Tool::DeleteFace: on_add_delete_face(); break; + case Tool::Helix: on_add_helix(); break; + case Tool::Insert: return; // committed via finalize_insert(), never here + case Tool::None: return; + } + close_tool(); // also clears the preview ghost; the committed body is now shown +} + +void DesignPanel::cancel_tool() +{ + reset_edit_state(); // abort an in-progress edit: back to add-mode + close_tool(); + // Cancel discards the candidate: clear the stale "Preview …"/"Invalid …" + // label and restore the neutral idle colour (Confirm keeps its "OK" status). + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); +} + +// One Confirm surface for the whole tab. Routes to the right commit by current context: +// a feature card, the Insert placement, the Sketch session, or the Constrain session. +void DesignPanel::tool_confirm() +{ + if (m_value_cont) { confirm_value(); return; } // value card owns ribbon ✓ while a value is pending + if (m_active == Tool::None && m_viewport && m_viewport->moving_body()) { // keep the placement, drop the gizmo + m_viewport->clear_move_gizmo(); + m_move_body = -1; + show_move_card(false); + update_action_bar(); + set_status_ok(); + return; + } + if (m_active == Tool::Insert) { finalize_insert(); return; } + if (m_active != Tool::None) { confirm_tool(); return; } + if (m_ui_mode == UiMode::Sketch) { + if (m_viewport && m_viewport->is_sketching()) m_viewport->finish_sketch(); + set_ui_mode(UiMode::Feature); + return; + } + if (m_ui_mode == UiMode::Constrain) { + cancel_value(); + if (m_viewport) m_viewport->end_constrain(); + m_constrain_feat = -1; + set_ui_mode(UiMode::Feature); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + } +} + +// One Cancel/exit surface (also bound to Esc). Discards the active feature/insert, or a +// drawn-but-uncommitted Sketch, or exits Constrain. +void DesignPanel::tool_cancel() +{ + if (m_value_cont) { cancel_value(); return; } // value card owns ribbon ✗ while a value is pending + if (m_active == Tool::None && m_viewport && m_viewport->moving_body()) { // revert to the pose at move-start + sync_body_xform(); + if (m_move_body >= 0 && m_move_body < int(m_body_xform.size())) + m_body_xform[m_move_body] = m_move_prev; + m_viewport->clear_move_gizmo(); + m_move_body = -1; + show_move_card(false); + feed_bodies(); // re-render the reverted placement + update_action_bar(); + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Move cancelled")); + m_status->Refresh(); + return; + } + if (m_active == Tool::Insert) { cancel_insert(); return; } + if (m_active != Tool::None) { cancel_tool(); return; } + if (m_ui_mode == UiMode::Sketch) { + // THE explicit discard. Esc no longer arrives here at all (it routes through escape(), + // which cannot destroy anything), so this button is now the only way a drawn sketch is + // thrown away — and being the only way, it has to ask. It used to refuse instead, telling + // the user to press the very button they had just pressed: a sketch could be kept but + // never discarded. + if (m_viewport && m_viewport->live_sketch_has_work()) { + wxMessageDialog dlg(this, + _L("Discard this sketch and everything drawn in it?"), + _L("Discard sketch"), + wxYES_NO | wxNO_DEFAULT | wxICON_EXCLAMATION); + dlg.SetYesNoLabels(_L("Discard"), _L("Keep drawing")); + if (dlg.ShowModal() != wxID_YES) return; + } + if (m_viewport) m_viewport->cancel_sketch(); // drop the live session (committed art stays) + m_edit_index = -1; + set_ui_mode(UiMode::Feature); + sync_sketch_display(); + refresh_tree(); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + return; + } + if (m_ui_mode == UiMode::Constrain) { + cancel_value(); + if (m_viewport) m_viewport->end_constrain(); + m_constrain_feat = -1; + set_ui_mode(UiMode::Feature); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + } +} + +// Which level of the interaction stack one Esc press belongs to. The rule itself lives in +// DesignInteraction.hpp, decidable without a window; this only answers the four questions it +// asks about THIS panel. +CadLevel DesignPanel::escape_level() const +{ + CadInteractionState st; + // A value being typed is the deepest thing on screen, whether it is the in-canvas floating + // field or the panel's value card: both are "a number you are in the middle of entering". + st.value_field_open = (m_value_cont != nullptr) + || (m_viewport && m_viewport->inline_busy()); + // An uncommitted delta: clicks are down on an entity that does not exist yet, or a body is + // being moved by a gizmo that has not been confirmed. + st.gesture_active = m_viewport + && (m_viewport->drawing_in_progress() + || (m_active == Tool::None && m_viewport->moving_body())); + // Something is armed and waiting for input: a feature card, a sketch draw tool, Constrain. + // A sketch SESSION is deliberately not in this list — see escape(). + st.tool_armed = (m_active != Tool::None) + || m_ui_mode == UiMode::Constrain + || (m_ui_mode == UiMode::Sketch && m_viewport && !m_viewport->sketch_is_selecting()); + st.has_selection = m_viewport && m_viewport->has_any_selection(); + return cad_escape_level(st); +} + +// Esc: unwind exactly one level. Nothing here deletes a feature, discards geometry or touches +// history — those need Delete/Backspace on a selection, the sketch banner's Cancel, or Ctrl+Z. +void DesignPanel::escape() +{ + switch (escape_level()) { + case CadLevel::Transient: + // Close just the field. The tool stays armed and the geometry is untouched, which is the + // whole reason this level exists: dismissing a number people press Esc for reflexively + // used to cascade down the stack and take the sketch with it. + if (m_value_cont) { cancel_value(); return; } + if (m_viewport) { m_viewport->inline_cancel(); return; } + return; + + case CadLevel::Gesture: + // Restore the state from before the uncommitted delta. Drawing: drop the clicks, keep the + // tool armed so the next click starts a fresh entity. Moving: tool_cancel's move branch + // puts the body back at the pose it had when the gizmo appeared. + if (m_viewport && m_viewport->drawing_in_progress()) { + m_viewport->sketch_abort_gesture(); + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + return; + } + tool_cancel(); + return; + + case CadLevel::Tool: + // Back to the idle state of whatever environment we are in. A feature card discards its + // CANDIDATE (never a committed feature — in edit mode reset_edit_state only forgets which + // feature was being edited, the feature itself is untouched); an armed sketch tool falls + // back to Select, leaving every entity already drawn exactly where it is. + if (m_active != Tool::None || m_ui_mode == UiMode::Constrain) { tool_cancel(); return; } + if (m_viewport && m_viewport->sketch_disarm_tool()) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Select")); + m_status->Refresh(); + } + return; + + case CadLevel::Idle: + // Deselect. In a sketch this is the floor: the session is left through Finish or Cancel, + // both of which say which one they are, and never through a key pressed on the way out of + // something else. + if (m_viewport && m_viewport->clear_any_selection()) { + m_sel_sketch_region = -1; + m_sel_sketch_feat = -1; + m_status->SetForegroundColour(wxNullColour); + set_status(wxString()); + m_status->Refresh(); + return; + } + // Nothing selected and nothing to unwind. An EMPTY sketch session may as well close — + // there is no work to lose, so this cannot be the destructive case, and being unable to + // leave a sketch you have not drawn in yet is its own small trap. + if (m_ui_mode == UiMode::Sketch && m_viewport && !m_viewport->live_sketch_has_work()) { + m_viewport->request_sketch_exit(); + return; + } + if (m_ui_mode == UiMode::Sketch) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Sketch kept — Finish to commit it, Cancel to discard")); + m_status->Refresh(); + } + return; + } +} + +void DesignPanel::update_undo_redo_buttons() +{ + // Grey Undo/Redo to mirror exactly what do_undo_redo will do: it acts only in Feature + // mode with no tool/dialog open (otherwise Esc is the way out), so reflect that gate here + // as well as the document's available history. + if (m_btn_undo == nullptr || m_btn_redo == nullptr) return; + const bool gated = (m_ui_mode != UiMode::Feature) || (m_active != Tool::None); + m_btn_undo->Enable(!gated && m_doc.can_undo()); + m_btn_redo->Enable(!gated && m_doc.can_redo()); +} + +void DesignPanel::update_action_bar() +{ + update_undo_redo_buttons(); // mode/tool changes flip the do_undo_redo gate -> refresh greying + if (m_tb_action == nullptr || m_toolbar == nullptr) return; + wxSizer* s = m_toolbar->GetSizer(); + if (s == nullptr) return; + const bool active = (m_active != Tool::None) + || m_ui_mode == UiMode::Sketch + || m_ui_mode == UiMode::Constrain + || (m_viewport && m_viewport->moving_body()); + s->Show(m_tb_action, active, true); + // HIDING THE BAR ORPHANS THE KEYBOARD, and that is the "app does not consent to sketch" + // report. The ✓/✗ live in this bar, so the click that confirms a feature leaves focus on a + // button that this very call then hides. wx does not hand that focus anywhere useful, and + // wxEVT_CHAR_HOOK is bound on THIS PANEL — it is delivered to the focused window and + // propagates up the parent chain, so with focus outside the panel every Design shortcut + // stops arriving. Measured on the rig: after Confirm, shift+S produced ZERO CHAR_HOOK lines + // (not even the modifier), while X kept focus on the main window throughout — so it was + // never a window-manager problem. One bare canvas click restored it, which is exactly the + // workaround users found and reported as "shift+s works but it is not intuitive". + // The canvas is the right owner of the keyboard in this tab, so give it back explicitly. + if (!active && m_viewport != nullptr) { + wxWindow* f = wxWindow::FindFocus(); + bool in_bar = (f == nullptr); + for (wxWindow* w = f; w != nullptr && !in_bar; w = w->GetParent()) + if (w == m_toolbar) in_bar = true; // the bar is a sizer; its buttons parent to m_toolbar + if (in_bar) m_viewport->SetFocus(); + } + m_toolbar->Layout(); + m_toolbar->FitInside(); // refresh scroll range when the action bar shows/hides +} + +void DesignPanel::do_undo_redo(bool redo) +{ + // v1: act only in Feature mode. While authoring/constraining a sketch (m_ui_mode) or + // with a feature dialog open (m_active), Esc/Cancel is the way out — popping committed + // history mid-tool would be ambiguous (and could orphan the tool's referenced feature). + if (m_ui_mode != UiMode::Feature || m_active != Tool::None) { + m_status->SetForegroundColour(wxNullColour); + set_status(_L("Finish or cancel the current tool first (Esc)")); + m_status->Refresh(); + return; + } + const bool ok = redo ? m_doc.redo() : m_doc.undo(); + if (!ok) { + m_status->SetForegroundColour(wxNullColour); + set_status(redo ? _L("Nothing to redo") : _L("Nothing to undo")); + m_status->Refresh(); + return; + } + // The solid whole/face/edge pick and any in-place edit reference ids that recompute() + // invalidates — drop them before refreshing from the restored document. + m_sel_solid_body = m_sel_solid_face = m_sel_solid_edge = -1; + m_pick_face = m_pick_face_body = -1; // recompute() invalidated the face ids too + reset_edit_state(); + after_tree_edit(true); // refresh tree + viewport meshes + status from the restored doc + m_status->SetForegroundColour(wxNullColour); + set_status(wxString::Format(redo ? _L("Redo (%zu more)") : _L("Undo (%zu more)"), + redo ? m_doc.redo_depth() : m_doc.undo_depth())); + m_status->Refresh(); +} + +// --- Document variables panel --------------------------------------------------------- + +void DesignPanel::refresh_variables() +{ + if (!m_var_list) return; + m_var_list->DeleteAllItems(); + int row = 0; + for (const auto& [name, expr] : m_doc.variables) { + m_var_list->InsertItem(row, wxString::FromUTF8(name)); + m_var_list->SetItem(row, 1, wxString::FromUTF8(expr)); + ++row; + } +} + +void DesignPanel::on_add_variable() +{ + wxString name = ::wxGetTextFromUser(_L("Variable name:"), _L("Add Variable"), "", this); + if (name.IsEmpty()) return; + name.Trim(true).Trim(false); + if (name.Contains(' ')) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("Variable name must not contain spaces")); + m_status->Refresh(); + return; + } + wxString expr = ::wxGetTextFromUser( + wxString::Format(_L("Expression for '%s':"), name), + _L("Add Variable"), "0", this); + if (expr.IsEmpty()) return; + + const std::string name_str = name.ToUTF8().data(); + const std::string expr_str = expr.ToUTF8().data(); + + m_doc.checkpoint(); + m_doc.variables[name_str] = expr_str; + bool ok = m_doc.recompute(); + // undo() recomputes, which SUCCEEDS and clears doc.error — so the reason the edit was + // rejected is gone before anything can display it. Carry it across the rollback. + if (!ok) { const std::string why = m_doc.error; m_doc.undo(); m_doc.error = why; } + after_tree_edit(ok); + refresh_variables(); +} + +void DesignPanel::on_edit_variable() +{ + if (!m_var_list) return; + const long sel = m_var_list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (sel < 0) { + set_status(_L("Select a variable first")); + m_status->Refresh(); + return; + } + const std::string name_str = m_var_list->GetItemText(sel, 0).ToUTF8().data(); + const std::string old_expr = m_var_list->GetItemText(sel, 1).ToUTF8().data(); + wxString expr = ::wxGetTextFromUser( + wxString::Format(_L("Expression for '%s':"), m_var_list->GetItemText(sel, 0)), + _L("Edit Variable"), wxString::FromUTF8(old_expr), this); + if (expr.IsEmpty()) return; + + const std::string expr_str = expr.ToUTF8().data(); + m_doc.checkpoint(); + m_doc.variables[name_str] = expr_str; + bool ok = m_doc.recompute(); + // undo() recomputes, which SUCCEEDS and clears doc.error — so the reason the edit was + // rejected is gone before anything can display it. Carry it across the rollback. + if (!ok) { const std::string why = m_doc.error; m_doc.undo(); m_doc.error = why; } + after_tree_edit(ok); + refresh_variables(); +} + +void DesignPanel::on_remove_variable() +{ + if (!m_var_list) return; + const long sel = m_var_list->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (sel < 0) { + set_status(_L("Select a variable first")); + m_status->Refresh(); + return; + } + const std::string name_str = m_var_list->GetItemText(sel, 0).ToUTF8().data(); + + m_doc.checkpoint(); + m_doc.variables.erase(name_str); + bool ok = m_doc.recompute(); + if (!ok) { + // Capture before undo(): its recompute succeeds and clears doc.error. + const std::string why = m_doc.error; + m_doc.undo(); + // Almost always a feature expr still referencing the variable — but say so as the + // likely cause and keep the real message, rather than asserting a diagnosis that + // would be wrong for any other failure. + m_doc.error = wxString::Format( + _L("Variable '%s' could not be removed (likely still referenced by a feature " + "expression): %s"), + m_var_list->GetItemText(sel, 0), wxString::FromUTF8(why)).ToUTF8().data(); + } + after_tree_edit(ok); + refresh_variables(); +} + +// --- Expression binding --------------------------------------------------------------- + +// Field-name lists per feature type. The combo is editable so a power user can type any +// valid field name; these lists pre-populate the picker for the common operations. +std::vector DesignPanel::fields_for_tool(Tool t) +{ + using T = DesignPanel::Tool; + switch (t) { + case T::Sketch: return {"width", "height", "radius"}; + case T::Extrude: return {"distance", "distance2", "taper_deg"}; + case T::Dressup: return {"dressup_size"}; + case T::Hole: return {"hole_diameter", "hole_depth", "hole_x", "hole_y"}; + case T::Thread: return {"thread_radius", "thread_pitch", "thread_height", "thread_depth", "thread_x", "thread_y"}; + case T::Shell: return {"shell_thickness"}; + case T::Revolve: return {"revolve_angle"}; + case T::Sweep: return {}; + case T::Pattern: return {"pattern_count", "pattern_spacing", "pattern_angle"}; + case T::Plane: return {"plane_offset", "plane_angle_tilt"}; + case T::Loft: return {}; + case T::Draft: return {"draft_angle"}; + case T::Boolean: return {}; + case T::Cut: return {}; + case T::SurfaceExtrude: return {"distance"}; + case T::SurfaceRevolve: return {"revolve_angle"}; + case T::SurfaceLoft: return {}; + case T::SurfaceFill: return {}; + case T::SurfaceOffset: return {"plane_offset"}; + case T::ThickenSurface: return {"thicken_thickness"}; + case T::Transform: return {}; + case T::Mirror: return {}; + case T::Thicken: return {"thicken_thickness"}; + case T::Rib: return {"rib_thickness", "rib_depth"}; + case T::Project: return {}; + case T::DeleteFace: return {}; + case T::Helix: return {"helix_radius", "helix_pitch", "helix_height", "helix_taper_deg"}; + case T::Axis: return {}; + case T::CoordSys: return {}; + case T::Mate: return {}; + case T::Insert: return {}; + case T::None: return {}; + } + return {}; +} + +void DesignPanel::populate_expr_fields(Tool t) +{ + if (!m_expr_field) return; + m_expr_field->Clear(); + for (const std::string& f : fields_for_tool(t)) + m_expr_field->Append(wxString::FromUTF8(f)); + if (m_expr_field->GetCount() > 0) + m_expr_field->SetSelection(0); +} + +void DesignPanel::on_set_expr() +{ + if (m_edit_index < 0 || m_edit_index >= int(m_doc.features.size())) return; + if (!m_expr_field || !m_expr_text) return; + + const wxString fwx = m_expr_field->GetValue(); + const wxString ewx = m_expr_text->GetValue(); + if (fwx.IsEmpty()) return; + + const std::string field = fwx.ToUTF8().data(); + const std::string expr = ewx.ToUTF8().data(); + + m_doc.checkpoint(); + m_doc.features[m_edit_index].expr[field] = expr; + bool ok = m_doc.recompute(); + // undo() recomputes, which SUCCEEDS and clears doc.error — so the reason the edit was + // rejected is gone before anything can display it. Carry it across the rollback. + if (!ok) { const std::string why = m_doc.error; m_doc.undo(); m_doc.error = why; } + after_tree_edit(ok); + if (ok) m_expr_text->Clear(); + + // Refresh the status line showing current bindings + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size())) { + const CadFeature& ef = m_doc.features[m_edit_index]; + if (ef.expr.empty()) { + m_expr_status->SetLabel(_L("(no bindings)")); + m_expr_status->SetForegroundColour(dp_sec_text()); + } else { + wxString s; + for (const auto& [f, e] : ef.expr) { + if (!s.IsEmpty()) s += "; "; + s += wxString::FromUTF8(f) + " = " + wxString::FromUTF8(e); + } + m_expr_status->SetLabel(s); + m_expr_status->SetForegroundColour(dp_ctl_text()); + } + } +} + +void DesignPanel::on_clear_expr() +{ + if (m_edit_index < 0 || m_edit_index >= int(m_doc.features.size())) return; + if (!m_expr_field) return; + + const wxString fwx = m_expr_field->GetValue(); + if (fwx.IsEmpty()) return; + + const std::string field = fwx.ToUTF8().data(); + auto& feat_expr = m_doc.features[m_edit_index].expr; + if (feat_expr.find(field) == feat_expr.end()) { + m_status->SetForegroundColour(wxColour(235, 110, 110)); + set_status(_L("No binding for that field")); + m_status->Refresh(); + return; + } + + m_doc.checkpoint(); + feat_expr.erase(field); + bool ok = m_doc.recompute(); + // undo() recomputes, which SUCCEEDS and clears doc.error — so the reason the edit was + // rejected is gone before anything can display it. Carry it across the rollback. + if (!ok) { const std::string why = m_doc.error; m_doc.undo(); m_doc.error = why; } + after_tree_edit(ok); + + if (m_edit_index >= 0 && m_edit_index < int(m_doc.features.size())) { + const CadFeature& ef = m_doc.features[m_edit_index]; + if (ef.expr.empty()) { + m_expr_status->SetLabel(_L("(no bindings)")); + m_expr_status->SetForegroundColour(dp_sec_text()); + } else { + wxString s; + for (const auto& [f, e] : ef.expr) { + if (!s.IsEmpty()) s += "; "; + s += wxString::FromUTF8(f) + " = " + wxString::FromUTF8(e); + } + m_expr_status->SetLabel(s); + m_expr_status->SetForegroundColour(dp_ctl_text()); + } + } +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/DesignPanel.hpp b/src/slic3r/GUI/CAD/DesignPanel.hpp new file mode 100644 index 0000000000..88b445534d --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignPanel.hpp @@ -0,0 +1,919 @@ +#ifndef slic3r_DesignPanel_hpp_ +#define slic3r_DesignPanel_hpp_ + +#include +#include +#include // wxTreeItemId + +#include +#include +#include +#include + +#include "libslic3r/CAD/CadDocument.hpp" +#include "slic3r/GUI/CAD/DesignInteraction.hpp" // CadLevel: what one Esc press means + +class ComboBox; // Orca dropdown (Widgets/ComboBox.hpp) — replaces wxChoice everywhere here +class StaticBox; // Orca rounded card frame (Widgets/StaticBox.hpp) +class wxCheckBox; +class wxCheckListBox; +class wxSpinCtrl; +class wxSpinCtrlDouble; +class wxTreeCtrl; +class wxImageList; +class wxStaticText; +class wxStaticLine; +class Button; // Orca-styled button (Widgets/Button.hpp) +class CheckBox; // Orca teal checkbox (Widgets/CheckBox.hpp) +class wxSizer; +// wxBoxSizer, wxTextCtrl and wxListCtrl are used here as pointers only, so a forward +// declaration is enough — but they must be declared. Every ordinary build happened to pull +// them in transitively through the wx/panel.h + wx/scrolwin.h chain. The Snapmaker fork's +// Flatpak build does not, and it failed to compile this header with "'wxTextCtrl' does not +// name a type; did you mean 'wxTreeCtrl'?". Declaring them keeps the header self-contained +// instead of relying on whatever a particular wx configuration happens to include. +class wxBoxSizer; +class wxTextCtrl; +class wxListCtrl; +class wxButton; +class wxPanel; +class ScalableButton; + +namespace Slic3r { namespace GUI { + +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 +{ +public: + explicit DesignPanel(wxWindow* parent); + void on_tab_shown(); // re-sync bed to the active printer when the Design tab is activated + void on_tab_hidden(); // another tab took over: take the viewport status line down with us + void unbind_canvas_event_handlers(); // app close / language switch, from the plater's teardown + void reset_canvas_volumes(); + void clear_document(); // New Project / Open Project: drop the document with the project + // Rebuild off the UI thread (progress dialog only if it turns out to be slow), so a feature + // op on a heavy imported solid does not freeze the window. Returns m_doc.recompute()'s result. + // Push the document's recipe into the Model so ANY save path persists it (vjk5). + void sync_recipe_to_model(); + bool recompute_guarded(const wxString& message); + + // MCP control hooks: let the external control server (McpControl.cpp) drive and + // perceive the SAME kernel the GUI uses. Called only on the wx main thread. + CadDocument& mcp_doc() { return m_doc; } // live document (read + mutate) + void mcp_after_change() { after_tree_edit(true); } // refresh tree + viewport + status + DesignCanvas* mcp_viewport() { return m_viewport; } // live sketch + 3D view + // Put the PANEL into (or out of) sketch mode, not just the canvas tool. Measured on the + // rig: a sketch started straight through DesignCanvas::begin_sketch leaves m_ui_mode at + // Feature, and the keyboard map is dispatched on `m_ui_mode == UiMode::Sketch` while the + // offer menu is dispatched on the looser sketch_map_applies() — so the menu offered the + // line's verbs while every sketch shortcut was dead (KEYTRACE: key=81 ui_mode=0 + // is_sketching=1). Half-entering a mode is worse than not entering it. + void mcp_set_sketch_mode(bool on) + { + set_ui_mode(on ? UiMode::Sketch : UiMode::Feature); + update_action_bar(); + } + // The offer-table vocabulary without a right-click: the external controller asks which verbs + // exist (and which apply to the current selection) and fires one by id, so a deck key names a + // verb instead of spending a letter and every verb is reachable — including the rows with no + // keyboard shortcut, which are otherwise invisible to anything that parses key tables. + int mcp_offer_selection_kind() const { return offer_selection_kind(); } // OfferSel as int + void mcp_run_action(const char* action) { run_offer_action(action); } // dispatch an action string + // Defined out of line in DesignPanel.cpp: it needs kOfferVerbs, which this header deliberately + // does not include (the table is generated and belongs to the offer-menu code). + bool mcp_run_verb(const char* verb_id); + +private: + enum class Tool { None, Sketch, Extrude, Dressup, Hole, Thread, Shell, Revolve, Sweep, Pattern, Plane, Loft, Draft, Boolean, Cut, Insert, Axis, CoordSys, SurfaceExtrude, SurfaceRevolve, SurfaceLoft, SurfaceFill, SurfaceOffset, ThickenSurface, Transform, Mirror, Thicken, Rib, Project, DeleteFace, Helix, Mate }; + // Which numeric fields an expression can be bound to, per feature type. A member rather + // than a file-static helper so Tool — 32 values of purely internal card state — does not + // have to become part of this panel's public API just to be named in a signature. + static std::vector fields_for_tool(Tool t); + // Plane tool: which datum reference the next solid pick fills (declared early so the + // method decls + card lambdas below can name it). + enum class PlanePick { None, FaceA, FaceB, EdgeA, EdgeB }; + enum class AxisPick { None, Face, Edge }; + enum class CoordSysPick { None, Face, Edge }; + + // Onshape-style contextual top toolbar: only the active mode's tool group is + // shown (Feature = sketch/extrude/dress/hole/thread; Sketch = entity tools; + // Constrain = constraints + edit ops). Replaces the old always-visible wall. + enum class UiMode { Feature, Sketch, Constrain }; + void set_ui_mode(UiMode m); + void apply_dof_status(int dof, bool ok, bool has_constraints); + // Unified action-bar dispatch: one Confirm / one Cancel for every tool and mode. + void tool_confirm(); // ✓ : commit the active feature / sketch / constrain session + void tool_cancel(); // ✗ : cancel the active feature / discard / exit + // Esc. ONE press unwinds ONE level of the interaction stack (DesignInteraction.hpp), and no + // level of it destroys committed work. escape_level() answers which level the press belongs + // to; escape() acts on exactly that one. Every Esc in the tab routes through here — the key + // used to be handled in four places that could not see each other, and that is how two + // presses in a row reached past a tool and discarded the sketch under it. + CadLevel escape_level() const; + void escape(); + void update_action_bar(); // show the ✓/✗ bar iff a tool or mode is active + + void on_shape_changed(); + void on_add_sketch(); + void on_add_extrude(); + void on_add_dressup(); + void on_add_hole(); + void on_add_thread(); + void apply_thread_standard(); // fill pitch/depth/radius from m_thread_std selection + void infer_thread_spec(double diameter); // nearest M-standard from a picked cylinder diameter + void on_add_revolve(); + void on_add_sweep(); + void on_add_loft(); + void on_add_pattern(); + bool on_add_plane(); // false = refused, card stays open + void arm_plane_pick(PlanePick target); // Plane tool: next solid pick fills this reference + void apply_plane_refs(CadFeature& f) const; // copy type + face/edge refs + sizes from the card + void refresh_plane_labels(); // update the 4 pick labels from the captured refs + void reset_plane_refs(); // clear captured refs (fresh Plane add) + void on_add_shell(); + void on_add_draft(); + void on_add_boolean(); + void on_add_cut(); // commit a plane Cut (split-by-plane) + void on_add_axis(); + void arm_axis_pick(AxisPick target); + void apply_axis_refs(CadFeature& f) const; + void refresh_axis_labels(); + void reset_axis_refs(); + void on_add_coordsys(); + void arm_coordsys_pick(CoordSysPick target); + void apply_coordsys_refs(CadFeature& f) const; + void refresh_coordsys_labels(); + void refresh_cs_body_choice(); // fill the CoordSys body chooser from current document + void reset_coordsys_refs(); + void on_add_surface_extrude(); + void on_add_surface_revolve(); + void on_add_surface_loft(); + void on_add_surface_fill(); + void on_add_surface_offset(); + void on_add_thicken_surface(); + void on_add_transform(); + void xf_live_preview(); // typed Transform fields -> body display transform (live) + void xf_clear_preview(); // hand a previewed body back to its pre-card pose + void on_add_mirror(); + void on_add_thicken(); + void on_add_rib(); + void on_add_project(); + void on_add_delete_face(); + void on_add_helix(); + void on_add_mate(); + void on_check_interference(); + void on_mass_properties(); // read-only report on the selected solid; edits nothing + // Fill m_bool_target / m_bool_tool / m_cut_target. as_of_feature < 0 = current bodies (add); + // >= 0 = the bodies as they existed just before that feature index (Boolean re-edit, so a + // consumed tool body still appears and its saved selection round-trips). + // Which body a tool should act on when it opens: the one picked in the VIEWPORT, else + // the first. Selection comes first and the tool consumes it — every body combo used to + // default to index 0, so picking body 3 and opening Mirror silently mirrored body 1. + // Clamped to the list, so it is safe to hand straight to SetSelection. e1p. + int selected_body_default() const; + void populate_body_choices(int as_of_feature = -1); + // Fill `c` with the bodies as they existed just before `as_of_feature` and select + // `want`. Re-editing any feature that stores a body index needs this: the index was + // recorded against the body list at that point in the timeline, not the final one. + void fill_body_choice(ComboBox* c, int as_of_feature, int want); + void populate_sheet_body_choices(ComboBox* c) const; // bodies where is_sheet_shape() is true + // Rows of a sheet-filtered picker are not body indices; go through these two, never + // GetSelection()/SetSelection() directly. + static int sheet_choice_body(ComboBox* c); // real body index of the current row, or -1 + static void select_sheet_choice(ComboBox* c, int body);// select the row holding this body index + // Import rigid 2D art (Text / SVG) as a new Sketch feature carrying + // imported_regions (no solver entities). on_add_text/on_import_svg gather + // input; add_imported_sketch builds the feature, refreshes tree + display. + void on_add_text(); + void on_import_svg(); + void on_import_step(); // STEP -> editable B-rep body (keeps the OCCT solid, not a mesh) + void on_import_mesh(); // STL/OBJ -> B-rep body via GeometryEngine::mesh_to_brep + bool place_on_face(); // Prepare's Place on Face (F): lay the selected body face on the bed + void add_imported_sketch(const std::vector>>& regions, + const wxString& base_name); + // Imported Text/SVG art is placed/sized in-canvas then explicitly committed via a + // small Confirm/Cancel card (Onshape Button->Dialog->Preview->Confirm). The feature + // is added provisionally by add_imported_sketch; Confirm keeps it, Cancel undoes it. + void open_insert_card(const wxString& base_name); + void finalize_insert(); // Confirm: keep the placed art, leave the placement gizmo + void cancel_insert(); // Cancel: undo the provisional insert + // Move / enlarge / stretch (independent X/Y) an imported Text/SVG sketch: + // a modal dialog editing the feature's placement transform in place. + void on_transform_imported(int feat_idx); + void on_commit(); + void on_export_step(); // write all bodies to a .step file (native B-rep) + // Rehydrate the parametric model from a project's saved recipe (3MF + // Metadata/orca_cad.bin): deserialize -> recompute -> refresh viewport + tree. + void load_recipe(const std::string& blob); + void refresh_tree(); + void set_status_ok(); + + // Feature-tree editing (Onshape-style): act on the selected tree row. + void on_delete_feature(); + // "Delete Body" — the geometry-first counterpart, reached by pointing at a body or any of + // its faces. Resolves the body to the feature that created it and removes THAT, because a + // body is a recomputed result and has nothing else to delete. + void on_delete_body(); + void on_new_design(); + void on_move_feature(int delta); // -1 = up, +1 = down + void on_toggle_visibility(); // show/hide the selected feature (CadFeature::enabled) + + // Constrain mode: enter on the tree-selected sketch, then apply a geometric + // constraint to the in-canvas picked segment and re-solve in the kernel. + void on_begin_constrain(int sel_override = -1); + // Sketch-toolbar Constrain entry: commit the live sketch in place, then enter Constrain + // mode on it (so the constraint palette + Trim/Extend are reachable without leaving the + // sketch flow). Returns true if constrain mode was entered. + bool enter_constrain_inline(); + void apply_constraint(SketchConstraintType type); + void apply_entity_constraint(SketchConstraintType type); // Fase 4.2 entity path + void apply_live_constraint(SketchConstraintType type); // Fase 4.2 live-sketch path (no commit needed) + enum class EditOp { Mirror, Offset, Fillet, Trim, Extend, Array, Move, Chamfer, Rotate, Scale, PolarArray }; // Fase 4.4/4.5/4.6 sketch edit ops + void apply_edit_op(EditOp op); // mutate selected sketch entities + // Onshape-style docked value entry (replaces wxGetTextFromUser popups for + // Angle/Radius/Diameter constraints + Offset/Fillet edit ops). request_value + // shows the card and stows a continuation run by confirm_value(). + void request_value(const wxString& label, double def, double mn, double mx, + std::function cont, + std::function on_cancel = nullptr); + void confirm_value(); + void cancel_value(); + void commit_entity_constraints(const std::vector& defs); // multi-def (Symmetric) + + // Constraint manager (C3.4): a docked list of the constrained sketch's + // entity-constraints with per-row select (highlight the referenced entities in + // the viewport) and delete (drop the constraint + re-solve). Shown in Constrain + // mode only; operates on m_doc.features[m_constrain_feat].entity_constraints. + // True when the constraint UI must address the LIVE sketch session rather than a committed + // feature. Same discriminator apply_constraint uses to choose apply_live_constraint: both + // Constrain modes set m_active too, so is_sketching() alone would claim the live scope while + // the committed manager is open. + bool live_constraint_scope() const; + void rebuild_constraint_list(); // refill m_constraint_rows + void delete_constraint(int idx); // erase + re-solve + refresh + void highlight_constraint_entities(int idx); // push referenced entities to viewport + void refresh_constrain_dof(); // re-solve feature, mirror DoF readout + wxString constraint_label(const SketchEntityConstraintDef& d) const; // human-readable row text + void after_edit_op(); // shared edit-op refresh tail + void on_edit_feature(); // reopen the selected feature's dialog populated + void after_tree_edit(bool ok); // shared post-op refresh of tree/viewport/status + void load_feature_into_dialog(const CadFeature& f); + void reset_edit_state(); // back to add-mode (m_edit_index = -1) + + // Onshape loop: Button -> open_tool (show dialog) -> refresh_preview (ghost) -> + // confirm_tool (commit) / cancel_tool (abort). + void open_tool(Tool t); + void close_tool(); + void refresh_preview(); + void confirm_tool(); + void cancel_tool(); + // Ctrl+Z / Ctrl+Shift+Z (Ctrl+Y) from the viewport. With a tool/dialog open it + // cancels that (Esc-like); otherwise it undoes/redoes the committed feature history. + void do_undo_redo(bool redo); + // The plane the Hole tool drills on: a picked face (inward, centred) or the dropdown. + SketchPlane hole_plane() const; + // The plane the Thread tool builds on: a picked cylindrical face (axis) or the dropdown. + SketchPlane thread_plane() const; + // Name the geometry the card has LATCHED, so it never has to be inferred from the viewport. + // Pass -1 for "none, falling back to the plane dropdown". See 200. + void set_hole_target_label(int face); + void set_thread_target_label(int face, int edge); + CadFeature build_candidate(Tool t) const; + // Merge per-body ghost meshes with the per-body display transforms applied. The kernel builds + // a ghost from the untransformed bodies, so without this it floats back at the origin once a + // body has been moved. + TriangleMesh ghost_from_bodies(const std::vector& per_body) const; + // A mate makes no new geometry but it MOVES a body, and the moved assembly is the ghost worth + // showing. Used both by the Mate card and by hovering a row of the offer's mate palette. + bool show_mate_ghost(int kind, int cs_a, int cs_b, + double offset, double angle_deg, bool flip, std::string& err); + int resolve_extrude_sketch() const; + // Plane pickers: fill a choice with XY/XZ/YZ + the document's datum planes, and + // map a choice row back to the actual SketchPlane (rows 0-2 base, 3+ datum). + void populate_plane_choices(ComboBox* c) const; + wxString ref_plane_name(int row) const; // "XY" / a datum's name, for the on-geometry hint + SketchPlane plane_from_choice(int row) const; + // Where a new sketch goes, resolved from what is SELECTED IN THE VIEWPORT rather than from a + // list: a picked planar face wins, otherwise the reference plane last clicked in 3D. `what` + // comes back as something to show the user, so the choice is visible without a combo. + SketchPlane sketch_plane_from_selection(wxString& what) const; + // Whether that resolution has anything the USER picked behind it, rather than the default + // reference plane. Lets a caller say "sketching on XZ" only when it is actually true. + bool sketch_plane_target(wxString& what) const; + // True when Extrude should build only the click-selected loop (a region of the + // resolved sketch is selected and it carries entities). + bool extrude_uses_loop() const; + void sync_sketch_display(); // push un-consumed committed sketches to the viewport + // Feed the viewport's visual Extrude depth-arrow gizmo (C5b) with the current profile + // plane + centroid + live depths while the Extrude card is open (self-gates on m_active). + void update_extrude_gizmo(); + void update_fillet_gizmo(); // edge-anchored radius arrow (Dressup card) + void sync_dressup_target(); // Dressup card: show picked edge vs group, gate the combo + void update_hole_gizmo(); // footprint circle + diameter/depth arrows (Hole card) + // A FEATURE button whose tool needs bodies it may not have yet. Greyed with an explanatory + // tooltip below min_bodies, rather than accepting the click and refusing afterwards. + struct BodyGate { wxWindow* btn{nullptr}; int min_bodies{1}; wxString tip_live, tip_gated; }; + std::vector m_body_gates; + void update_body_gates(); // re-evaluate them against the current body count + void update_thread_gizmo(); // footprint circle + radius/length arrows (Thread card) + void update_shell_gizmo(); // inward thickness arrow on the picked face (Shell card) + void update_revolve_gizmo(); // angle-arc around the axis (Revolve card) + void update_draft_gizmo(); // angle-arc around the face centroid (Draft card) + void update_cut_gizmo(); // plane-rectangle + offset arrow (Cut card) + void update_operand_highlight(); // Boolean/Sweep/Loft operand tinting on the canvas + void update_pattern_gizmo(); // linear spacing arrow / circular angle-arc (Pattern card) + void update_datum_gizmo(); // resize handles on the datum plane being created/edited (C3) + void update_helix_gizmo(); // live helix curve + radius/height/pitch handles (Helix card) + void update_rib_gizmo(); // in-plane slab footprint + thickness handles (Rib card) + void refresh_datum_planes(); // push resolved datum frames + per-plane u/v extents to viewport + void refresh_mate_connectors(); // push connector frames so verse + polarity are visible + void update_reference_planes(); // persistent XY/XZ/YZ reference planes (fallback when no object) + + CadDocument m_doc; + + Tool m_active{Tool::None}; + + // Keyboard shortcuts (Onshape-style, three scoped layers). Keys are encoded as the + // upper-cased letter, OR'd with 0x10000 when Shift is required. m_keys_sketch fires only + // while a sketch is open (single letters = sketch tools); m_keys_feature fires only when + // no sketch is open (Shift+letter = feature tools; single letters = view toggles/section). + static constexpr int SC_SHIFT = 0x10000; + // ...and with 0x20000 when Ctrl is required too. The Shift+letter space is full, so an + // action that arrives late lives on Ctrl+Shift; plain Ctrl-combos are still passed + // straight through, which is what leaves this layer free. + static constexpr int SC_CTRL = 0x20000; + std::map> m_keys_sketch; + std::map> m_keys_feature; + + StaticBox* m_tree_box{nullptr}; // framed feature-tree section + StaticBox* m_parts_box{nullptr}; // framed bodies section (hidden while empty) + StaticBox* m_cards{nullptr}; // one framed panel holding every tool dialog (one visible at a time) + void update_cards_frame(); // show that frame iff some card inside it is visible + void show_move_card(bool show); + void apply_move_card(); // numeric move/rotate -> same xform the gizmo builds + void push_polygon_params(); + wxSizer* m_tb_commit{nullptr}; // far-right Commit to Plate, beside Confirm/Cancel + wxSizer* m_tb_doc{nullptr}; // toolbar document/view actions (new, commit, export, section, place) + CheckBox* m_show_bed{nullptr}; // view option: draw the printer bed + plate grid, or not + wxSizer* m_box_move{nullptr}; // Move/Rotate numeric options (distance, axis, angle) + wxSizer* m_box_sketch{nullptr}; + wxSizer* m_box_extrude{nullptr}; + wxSizer* m_box_dressup{nullptr}; + wxSizer* m_box_hole{nullptr}; + wxSizer* m_box_thread{nullptr}; + wxSizer* m_box_shell{nullptr}; + wxSizer* m_box_revolve{nullptr}; + wxSizer* m_box_sweep{nullptr}; + wxSizer* m_box_pattern{nullptr}; + wxSizer* m_box_plane{nullptr}; + wxSizer* m_box_loft{nullptr}; + wxSizer* m_box_draft{nullptr}; + wxSizer* m_box_boolean{nullptr}; + wxSizer* m_box_cut{nullptr}; + wxSizer* m_box_axis{nullptr}; + wxSizer* m_box_coordsys{nullptr}; + wxSizer* m_box_surf_extrude{nullptr}; + wxSizer* m_box_surf_revolve{nullptr}; + wxSizer* m_box_surf_loft{nullptr}; + wxSizer* m_box_surf_fill{nullptr}; + wxSizer* m_box_surf_offset{nullptr}; + wxSizer* m_box_surf_thicken{nullptr}; + wxSizer* m_box_transform{nullptr}; + wxSizer* m_box_mirror{nullptr}; + wxSizer* m_box_thicken{nullptr}; + wxSizer* m_box_rib{nullptr}; + wxSizer* m_box_project{nullptr}; + wxSizer* m_box_delete_face{nullptr}; + wxSizer* m_box_helix{nullptr}; + wxSizer* m_box_mate{nullptr}; + wxSizer* m_box_insert{nullptr}; // Confirm/Cancel card for placing Text/SVG art + wxSizer* m_box_expr{nullptr}; // expression binding card (visible during edit only) + int m_insert_feat{-1}; // provisional imported-art feature awaiting Confirm + // Move-body gizmo runs through the unified action bar too: Confirm keeps the placement, + // Cancel reverts to the pose captured when the move started. + int m_move_body{-1}; + Transform3d m_move_prev{Transform3d::Identity()}; + // Set while the move gizmo is serving the Transform CARD rather than the Move button. + // Both use the same gizmo; only this says which card owns the numbers it reports. + int m_xf_gizmo_body{-1}; + Transform3d m_xf_gizmo_base{Transform3d::Identity()}; // pose when Transform armed it + // Which body the Transform card's typed fields are currently previewing on, and the pose to + // hand it back to. Separate from the gizmo pair because the card can retarget its Body combo. + int m_xf_prev_body{-1}; + Transform3d m_xf_prev_base{Transform3d::Identity()}; + + // Onshape-style dialog-card title rows (icon + bold feature name), retitled + // per tool in open_tool() (edit-mode shows the feature's actual name). + wxStaticText* m_hdr_move{nullptr}; + wxStaticText* m_hdr_sketch{nullptr}; + // Onshape sketch-entry card (plane/orientation) that opens on "New sketch" and + // persists until Finish (Phase 3). + wxSizer* m_box_sketch_session{nullptr}; + wxStaticText* m_hdr_sketch_session{nullptr}; + wxStaticText* m_sketch_hint{nullptr}; // "click a plane" / "drawing on X" — must match the status + wxStaticText* m_hdr_extrude{nullptr}; + wxStaticText* m_hdr_dressup{nullptr}; + wxStaticText* m_hdr_hole{nullptr}; + wxStaticText* m_hdr_thread{nullptr}; + wxStaticText* m_hdr_shell{nullptr}; + wxStaticText* m_hdr_revolve{nullptr}; + wxStaticText* m_hdr_sweep{nullptr}; + wxStaticText* m_hdr_pattern{nullptr}; + wxStaticText* m_hdr_plane{nullptr}; + wxStaticText* m_hdr_loft{nullptr}; + wxStaticText* m_hdr_draft{nullptr}; + wxStaticText* m_hdr_boolean{nullptr}; + wxStaticText* m_hdr_cut{nullptr}; + wxStaticText* m_hdr_axis{nullptr}; + wxStaticText* m_hdr_coordsys{nullptr}; + wxStaticText* m_hdr_surf_extrude{nullptr}; + wxStaticText* m_hdr_surf_revolve{nullptr}; + wxStaticText* m_hdr_surf_loft{nullptr}; + wxStaticText* m_hdr_surf_fill{nullptr}; + wxStaticText* m_hdr_surf_offset{nullptr}; + wxStaticText* m_hdr_surf_thicken{nullptr}; + wxStaticText* m_hdr_transform{nullptr}; + wxStaticText* m_hdr_mirror{nullptr}; + wxStaticText* m_hdr_thicken{nullptr}; + wxStaticText* m_hdr_rib{nullptr}; + wxStaticText* m_hdr_project{nullptr}; + wxStaticText* m_hdr_delete_face{nullptr}; + wxStaticText* m_hdr_helix{nullptr}; + wxStaticText* m_hdr_mate{nullptr}; + wxStaticText* m_hdr_insert{nullptr}; + + wxScrolledWindow* m_form{nullptr}; + DesignCanvas* m_viewport{nullptr}; + + // Top contextual toolbar (parented to the panel, above the form/viewport row). + UiMode m_ui_mode{UiMode::Feature}; + // Sketch environment banner: a strip across the top of the viewport saying, in words, that + // this is a sketch and which one. The mode used to be legible only from the toolbar and the + // left card — both of which look like the rest of the app — so a sketch session and plate + // preparation were one glance apart. Indicator only: Finish/Cancel stay on the ONE ribbon + // action bar (the Design UX contract), and the banner never grows a second pair. + wxPanel* m_sketch_banner{nullptr}; + wxStaticText* m_sketch_banner_txt{nullptr}; + wxScrolledWindow* m_toolbar{nullptr}; // horizontally scrollable so the action bar stays reachable on narrow windows + wxSizer* m_tb_feature{nullptr}; + wxSizer* m_tb_sketch{nullptr}; + // The 20 constraint icon buttons, shown during BOTH Sketch and Constrain (Fase 4.2 live + // path: a constraint must be applicable while drawing, not only after committing). + wxSizer* m_tb_relations{nullptr}; + // Unified Confirm/Cancel action bar (right end of the ribbon). Shown whenever any + // tool or mode is active; the single confirm/cancel surface for the whole tab. + wxSizer* m_tb_action{nullptr}; + // Persistent Undo/Redo group at the left of the ribbon — always visible, independent + // of the mode-gated tool groups. The buttons are greyed per the document history and + // the do_undo_redo gate (see update_undo_redo_buttons). + wxSizer* m_tb_history{nullptr}; + ScalableButton* m_btn_undo{nullptr}; + ScalableButton* m_btn_redo{nullptr}; + void update_undo_redo_buttons(); // enable/disable Undo/Redo from can_undo/can_redo + gate + // All tool buttons, for the active-tool teal highlight (Onshape-style). + std::vector m_tool_btns; + ScalableButton* m_active_tool_btn{nullptr}; + void set_active_tool_btn(ScalableButton* b); // nullptr clears the highlight + // Owns the themed DropDown flyouts (and the item vectors they hold by ref). + std::vector> m_flyout_keepalive; + wxCheckBox* m_construction{nullptr}; // sketch-mode construction toggle + wxSpinCtrlDouble* m_move_dx{nullptr}; // Move/Rotate card: world translation + wxSpinCtrlDouble* m_move_dy{nullptr}; + wxSpinCtrlDouble* m_move_dz{nullptr}; + ComboBox* m_move_axis{nullptr}; // rotation axis: X/Y/Z + wxSpinCtrlDouble* m_move_angle{nullptr}; // rotation angle (deg) + // Polygon's two parameters are chosen FROM THE TOOL, in the offer's Polygon submenu, not + // from a card on the left: the side count cannot be edited after drawing (the inline editor + // offers Side and Angle only), so it has to be settled at the moment the tool is armed — + // which is exactly where the offer already is. e1p. + int m_poly_sides{6}; // 3..64; the submenu names the common ones + bool m_poly_circumscribed{false}; + + // Which reference plane a sketch falls back to when no face is picked: 0/1/2 = XY/XZ/YZ, + // >=3 indexes resolve_datum_planes(). Set by CLICKING a ghost plane in the viewport — there is + // deliberately no dropdown for it. e1p. + int m_ref_plane{0}; + // m_ref_plane is always a VALID plane, so it cannot itself distinguish "the user chose XY" + // from "nobody has chosen anything yet". This does. + bool m_plane_picked{false}; + ComboBox* m_shape{nullptr}; + ComboBox* m_mode{nullptr}; + wxSpinCtrlDouble* m_width{nullptr}; + wxSpinCtrlDouble* m_height{nullptr}; + wxSpinCtrlDouble* m_radius{nullptr}; + wxSpinCtrlDouble* m_distance{nullptr}; + ComboBox* m_extrude_end{nullptr}; // Blind/Symmetric/TwoSided/ThroughAll/UpTo* + wxSpinCtrlDouble* m_distance2{nullptr}; // second-side depth (Two-sided) + wxSpinCtrlDouble* m_taper{nullptr}; // draft angle (deg) + CheckBox* m_flip{nullptr}; // reverse extrude direction + + wxStaticText* m_extrude_sketch_label{nullptr}; + int m_extrude_sketch_ref{-1}; + + // Revolve controls (sweep a sketch profile about an in-plane axis). + wxStaticText* m_revolve_sketch_label{nullptr}; + wxSpinCtrlDouble* m_revolve_angle{nullptr}; + ComboBox* m_revolve_axis{nullptr}; // 0 = plane X, 1 = plane Y + ComboBox* m_revolve_mode{nullptr}; // New/Add/Cut/Intersect + CheckBox* m_revolve_flip{nullptr}; + int m_revolve_sketch_ref{-1}; + + // Sweep controls (sweep a profile sketch along a path sketch). + wxStaticText* m_sweep_profile_label{nullptr}; + ComboBox* m_sweep_path{nullptr}; // path Sketch picker (feature index in client data) + ComboBox* m_sweep_mode{nullptr}; // New/Add/Cut/Intersect + int m_sweep_profile_ref{-1}; + int m_sweep_path_ref{-1}; // path Sketch feature index (for re-edit pre-select) + + // Loft controls (skin a solid through 2+ ordered profile Sketches). + wxCheckListBox* m_loft_list{nullptr}; // every Sketch; check 2+ in list order = profiles + CheckBox* m_loft_ruled{nullptr}; // ruled (straight) vs smooth sections + ComboBox* m_loft_mode{nullptr}; // New/Add/Cut/Intersect + std::vector m_loft_sketch_idx; // feature index for each row in m_loft_list + std::vector m_loft_refs; // chosen profile refs (for re-edit pre-check) + + // Surface Extrude controls (sheet from sketch profile). + wxStaticText* m_surf_extrude_sketch_label{nullptr}; + wxSpinCtrlDouble* m_surf_extrude_distance{nullptr}; + int m_surf_extrude_sketch_ref{-1}; + + // Surface Revolve controls (sheet from sketch about axis). + wxStaticText* m_surf_revolve_sketch_label{nullptr}; + wxSpinCtrlDouble* m_surf_revolve_angle{nullptr}; + ComboBox* m_surf_revolve_axis{nullptr}; // 0 = plane X, 1 = plane Y + CheckBox* m_surf_revolve_flip{nullptr}; + int m_surf_revolve_sketch_ref{-1}; + + // Surface Loft controls (skin a sheet through 2+ ordered profile sketches). + wxCheckListBox* m_surf_loft_list{nullptr}; // every Sketch; check 2+ in list order = profiles + CheckBox* m_surf_loft_ruled{nullptr}; // ruled (straight) vs smooth sections + std::vector m_surf_loft_sketch_idx; // feature index for each row + std::vector m_surf_loft_refs; // chosen profile refs (for re-edit pre-check) + + // Surface Fill controls (one-face sheet from a sketch boundary). + wxStaticText* m_surf_fill_sketch_label{nullptr}; + int m_surf_fill_sketch_ref{-1}; + + // Surface Offset controls (offset a SHEET body). + ComboBox* m_surf_offset_body{nullptr}; // sheet-body picker + wxSpinCtrlDouble* m_surf_offset_distance{nullptr}; + + // Thicken Surface controls (thicken a SHEET body into a solid). + ComboBox* m_surf_thicken_body{nullptr}; // sheet-body picker + wxSpinCtrlDouble* m_surf_thicken_thickness{nullptr}; + CheckBox* m_surf_thicken_flip{nullptr}; + + // Transform controls (rigid move/rotate of a body). + ComboBox* m_xf_body{nullptr}; // body to transform + wxSpinCtrlDouble* m_xf_dx{nullptr}; // translate X + wxSpinCtrlDouble* m_xf_dy{nullptr}; // translate Y + wxSpinCtrlDouble* m_xf_dz{nullptr}; // translate Z + ComboBox* m_xf_axis{nullptr}; // rotation axis: X/Y/Z + wxSpinCtrlDouble* m_xf_angle{nullptr}; // rotation angle (deg) + wxSpinCtrlDouble* m_xf_pivot_x{nullptr}; // pivot X + wxSpinCtrlDouble* m_xf_pivot_y{nullptr}; // pivot Y + wxSpinCtrlDouble* m_xf_pivot_z{nullptr}; // pivot Z + CheckBox* m_xf_copy{nullptr}; // keep original (make a copy) + + // Mirror controls (reflect a body about a plane). + ComboBox* m_mirror_body{nullptr}; // body to mirror + ComboBox* m_mirror_plane{nullptr}; // mirror plane (XY/XZ/YZ + datums) + CheckBox* m_mirror_keep{nullptr}; // keep original body + + // Thicken controls (offset one solid face into a thin plate). + ComboBox* m_thicken_body{nullptr}; // source body + wxStaticText* m_thicken_face_label{nullptr}; // picked face + wxSpinCtrlDouble* m_thicken_thickness{nullptr}; + CheckBox* m_thicken_flip{nullptr}; // flip direction + + // Rib controls (thin wall from an open sketch line). + ComboBox* m_rib_body{nullptr}; // target body + ComboBox* m_rib_sketch{nullptr}; // sketch holding the open line (feature index in client data) + wxSpinCtrl* m_rib_entity{nullptr}; // entity index within the sketch + wxSpinCtrlDouble* m_rib_thickness{nullptr}; + wxSpinCtrlDouble* m_rib_depth{nullptr}; + + // Project controls (project body edges onto a plane as sketch entities). + ComboBox* m_proj_source_body{nullptr}; // source body + wxStaticText* m_proj_face_label{nullptr}; // picked face (or "all edges") + ComboBox* m_proj_plane{nullptr}; // target plane + + // Delete Face controls (remove faces, heal the solid). + ComboBox* m_del_face_body{nullptr}; // target body + wxButton* m_del_face_add_btn{nullptr}; // "Add picked face" button + wxStaticText* m_del_face_list{nullptr}; // shows the accumulated face ids + std::vector m_del_faces; // accumulated face list + + // Helix controls (helical curve). + ComboBox* m_helix_plane{nullptr}; // axis plane (XY/XZ/YZ + datums) + wxSpinCtrlDouble* m_helix_radius{nullptr}; + wxSpinCtrlDouble* m_helix_pitch{nullptr}; + wxSpinCtrlDouble* m_helix_height{nullptr}; + CheckBox* m_helix_left_handed{nullptr}; + wxSpinCtrlDouble* m_helix_taper{nullptr}; + + // Mate (assembly) controls + ComboBox* m_mate_kind{nullptr}; + ComboBox* m_mate_cs_a{nullptr}; + ComboBox* m_mate_cs_b{nullptr}; + wxSpinCtrlDouble* m_mate_offset{nullptr}; + wxSpinCtrlDouble* m_mate_angle{nullptr}; + CheckBox* m_mate_flip{nullptr}; + wxStaticText* m_offset_label{nullptr}; + wxStaticText* m_angle_label{nullptr}; + + // Expression binding (per-feature, visible during edit only) + ComboBox* m_expr_field{nullptr}; // field-name picker (editable) + wxTextCtrl* m_expr_text{nullptr}; // expression string + wxButton* m_expr_set_btn{nullptr}; // Apply / bind + wxButton* m_expr_clear_btn{nullptr}; // Remove binding + wxStaticText* m_expr_status{nullptr}; // shows current bindings for the edited feature + void populate_expr_fields(Tool t); // fill m_expr_field from feature-type fields + void on_set_expr(); // checkpoint + write -> recompute -> undo on fail + void on_clear_expr(); // remove selected binding + + // Document variables panel (below the feature tree / parts) + StaticBox* m_var_box{nullptr}; + wxListCtrl* m_var_list{nullptr}; + wxButton* m_btn_add_var{nullptr}; + wxButton* m_btn_edit_var{nullptr}; + wxButton* m_btn_del_var{nullptr}; + void refresh_variables(); // rebuild m_var_list from m_doc.variables + void on_add_variable(); + void on_edit_variable(); + void on_remove_variable(); + + // Feature-tree button + ScalableButton* m_btn_interfere{nullptr}; + + // Pattern controls (replicate the target body: linear or circular). + ComboBox* m_pattern_type{nullptr}; // 0 = Linear, 1 = Circular + wxSpinCtrlDouble* m_pattern_count{nullptr}; // total instances incl. seed + wxSpinCtrlDouble* m_pattern_spacing{nullptr}; // linear step (mm) + ComboBox* m_pattern_dir{nullptr}; // linear direction: 0 = plane X, 1 = plane Y + wxSpinCtrlDouble* m_pattern_angle{nullptr}; // circular total angle (deg) + // Boolean controls (combine two existing bodies). + ComboBox* m_bool_op{nullptr}; // 0 = Union, 1 = Subtract, 2 = Intersect + ComboBox* m_bool_target{nullptr}; // body that survives (selection == body index) + ComboBox* m_bool_tool{nullptr}; // body consumed (selection == body index) + // Which operand the NEXT viewport body pick fills: 0 = target, 1 = tool. Reset when the + // card opens, so the first two clicks in the viewport always mean "keep this, cut with + // that" in that order. The combos remain the typed half and mirror whatever is picked. + int m_bool_next_slot{0}; + CheckBox* m_bool_keep{nullptr}; // keep the tool body after the op + wxSpinCtrlDouble* m_bool_tol{nullptr}; // OCCT fuzzy tolerance (mm); robust cut on near-coincident faces + + // Plane Cut (split-by-plane): a reference plane + offset splits the target body into + // two separate bodies (both pieces kept). + ComboBox* m_cut_plane{nullptr}; // XY/XZ/YZ + datum planes (cut plane) + ComboBox* m_cut_target{nullptr}; // body to cut (selection == body index) + wxSpinCtrlDouble* m_cut_offset{nullptr}; // offset along the plane normal (mm) + // Datum plane controls (derive a selectable sketch plane: offset + tilt from a base). + ComboBox* m_plane_base{nullptr}; // 0=XY,1=XZ,2=YZ, 3+N = Nth datum plane + wxSpinCtrlDouble* m_plane_offset{nullptr}; // offset along base normal (mm) + wxSpinCtrlDouble* m_plane_tilt{nullptr}; // tilt about a base axis (deg) / Angle / Tangent angle + ComboBox* m_plane_tilt_axis{nullptr}; // 0 = base X, 1 = base Y + // Plane construction method + contextual face/edge reference picks (Onshape/Fusion parity). + ComboBox* m_plane_type{nullptr}; // PlaneType: Offset/Angle/Midplane/Tangent/TwoEdges/Coincident + wxButton* m_plane_pick_faceA{nullptr}; wxStaticText* m_plane_faceA_lbl{nullptr}; + wxButton* m_plane_pick_faceB{nullptr}; wxStaticText* m_plane_faceB_lbl{nullptr}; + wxButton* m_plane_pick_edgeA{nullptr}; wxStaticText* m_plane_edgeA_lbl{nullptr}; + wxButton* m_plane_pick_edgeB{nullptr}; wxStaticText* m_plane_edgeB_lbl{nullptr}; + wxSpinCtrlDouble* m_plane_usize{nullptr}; // datum rectangle extent u (mm) — also driven by drag handles + wxSpinCtrlDouble* m_plane_vsize{nullptr}; // datum rectangle extent v (mm) + // Captured references for the candidate datum (body index + face/edge index, -1 = none). + int m_pl_faceA_body{-1}, m_pl_faceA{-1}; + int m_pl_faceB_body{-1}, m_pl_faceB{-1}; + int m_pl_edgeA_body{-1}, m_pl_edgeA{-1}; + int m_pl_edgeB_body{-1}, m_pl_edgeB{-1}; + PlanePick m_plane_pick{PlanePick::None}; // which ref the next solid pick fills + // Plate loop selection (click a committed sketch loop): the Sketch feature + the + // clicked closed-region index, so Extrude builds just that one loop. -1 = none. + int m_sel_sketch_feat{-1}; + int m_sel_sketch_region{-1}; + // Click-selected solid topology (whole/face/edge cycle): face id for up-to-face / dress-up. + int m_sel_solid_body{-1}; // which body the face/edge selection is on + int m_sel_solid_face{-1}; + int m_sel_solid_edge{-1}; + bool m_sel_solid_vertex{false}; // a corner is picked (body+point, no face/edge) + // The face actually under the last solid click, INDEPENDENT of the whole/face/edge cycle level. + // The first click on a solid selects the WHOLE body, but the ray has already resolved which face + // it hit and the callback passes it. "Sketch on the face I clicked" must not require discovering + // that a second click refines the selection, so keep it instead of throwing it away. 3a2. + int m_pick_face_body{-1}; + int m_pick_face{-1}; + // What the live sketch was actually opened on ("the picked face", "XY", a datum's name), so the + // hint can say it. Resolved from the selection at begin_sketch, not read back from a combo. + wxString m_sketch_on; + // --- the object-driven offer (charter 4.1) --------------------------------------------- + // Right-click the geometry -> a vertical list in ratified row order, verbs that do not + // apply disabled IN PLACE with their reason. The rows come from the generated table in + // DesignOffer.hpp; this map is how a row reaches the code that already implements it, for + // the verbs that have no keyboard shortcut to route through. + std::map> m_verb_actions; + // Append an offer row with its toolbar glyph. The bitmap must be set BEFORE Append — + // wxGTK builds the GtkMenuItem there and only makes an image item if one is present. + // Every status write goes through here so long hints wrap instead of clipping. + void set_status(const wxString& text); + wxString idle_hint() const; // what to say when nothing is selected + // Reason detect_mate_conflicts() recorded for a feature, or nullptr. Marks the tree row and + // feeds the status line; a conflict is a diagnostic, not a document error. + const std::string* mate_conflict_reason(int feature) const; + + wxMenuItem* append_offer_item(wxMenu* menu, int id, const wxString& text, + const struct OfferVerb& v); + void show_offer_menu(const wxPoint& screen_pos); + // Where the offer opens when no mouse press anchors it: the keyboard route, and the automatic + // open on entering Sketch. The pointer if it is over the viewport, else the viewport's centre. + // A raw wxGetMousePosition() can be sitting on the toolbar, on the card column or on another + // monitor, and the menu would map there — detached from the geometry it is about. + wxPoint offer_anchor() const; + int offer_selection_kind() const; // an OfferSel, as int to keep the header light + // Does the SKETCH half of the map apply? A mode question, not a session one: begin_sketch + // does not run until the first tool is armed, so between "press Sketch" and "pick a tool" + // is_sketching() is still false — precisely when the drawing tools must be on offer. The + // is_sketching() arm covers re-opening a committed sketch, which enters the session first. + bool sketch_map_applies() const; + void run_offer_action(const char* action); + // Face-as-profile extrude (Onshape): when Extrude is opened on a picked solid face with + // no sketch source, this carries that global face id so the kernel extrudes the face. + // -1 = ordinary sketch/loop extrude. Set when opening the Extrude card, consumed on add. + int m_extrude_face_src{-1}; + + ComboBox* m_dressup_type{nullptr}; + ComboBox* m_face_group{nullptr}; + wxSpinCtrlDouble* m_dressup_size{nullptr}; + wxStaticText* m_dressup_edge_label{nullptr}; // shows the picked edge, or the group fallback + + ComboBox* m_hole_plane{nullptr}; + wxSpinCtrlDouble* m_hole_diameter{nullptr}; + wxSpinCtrlDouble* m_hole_depth{nullptr}; + CheckBox* m_hole_through{nullptr}; + wxSpinCtrlDouble* m_hole_x{nullptr}; + wxSpinCtrlDouble* m_hole_y{nullptr}; + // #2: when the Hole tool is opened on a picked solid face, drill on that face centred + // on it (origin = face centroid, normal = inward). m_hole_x/y then read as the offset + // from the face centre. Falls back to the m_hole_plane dropdown when no face is picked. + bool m_hole_on_face{false}; + SketchPlane m_hole_face_plane; + int m_hole_face_body{-1}; + // #2 Part B: the picked face's (u,v) bounds in m_hole_face_plane, so the hole's construction + // dims read as distance from the face sides (umin/vmin edges) rather than from the centre. + bool m_hole_has_bounds{false}; + double m_hole_umin{0}, m_hole_umax{0}, m_hole_vmin{0}, m_hole_vmax{0}; + // Says which face the latch above is holding. Thicken/Shell/Draft show theirs because their + // face IS the live selection; this one has to be shown precisely BECAUSE it is not, and the + // status line goes on saying "Nothing selected" while the ghost keeps drilling. 200. + wxStaticText* m_hole_target_label{nullptr}; + + ComboBox* m_thread_plane{nullptr}; + ComboBox* m_thread_std{nullptr}; // standard designation (M6, 1/4-20 UNC, ...) + wxSpinCtrlDouble* m_thread_radius{nullptr}; + wxSpinCtrlDouble* m_thread_pitch{nullptr}; + wxSpinCtrlDouble* m_thread_height{nullptr}; + wxSpinCtrlDouble* m_thread_depth{nullptr}; + CheckBox* m_thread_internal{nullptr}; + wxSpinCtrlDouble* m_thread_x{nullptr}; + wxSpinCtrlDouble* m_thread_y{nullptr}; + // #3: when the Thread tool is opened on a picked cylindrical face (a hole bore or a + // cylinder), thread that surface — plane on its axis, radius/internal derived from it. + bool m_thread_on_face{false}; + SketchPlane m_thread_face_plane; + int m_thread_face_body{-1}; + wxStaticText* m_thread_target_label{nullptr}; // the latched face/edge — see m_hole_target_label + + wxSpinCtrlDouble* m_shell_thickness{nullptr}; + wxStaticText* m_shell_face_label{nullptr}; // shows the picked face to remove + + // Draft controls (taper a single picked solid face about the body bottom). + wxSpinCtrlDouble* m_draft_angle{nullptr}; + wxStaticText* m_draft_face_label{nullptr}; // shows the picked face to draft + + // Axis controls (datum axis: line through two points or derived from geometry). + ComboBox* m_axis_type{nullptr}; // AxisType: TwoPoints/FaceNormal/CylinderCenterline/PlaneIntersection/AlongEdge + wxButton* m_axis_pick_face{nullptr}; wxStaticText* m_axis_face_lbl{nullptr}; + wxButton* m_axis_pick_edge{nullptr}; wxStaticText* m_axis_edge_lbl{nullptr}; + ComboBox* m_axis_plane_a{nullptr}; + ComboBox* m_axis_plane_b{nullptr}; + wxSpinCtrlDouble* m_axis_p1x{nullptr}; wxSpinCtrlDouble* m_axis_p1y{nullptr}; wxSpinCtrlDouble* m_axis_p1z{nullptr}; + wxSpinCtrlDouble* m_axis_p2x{nullptr}; wxSpinCtrlDouble* m_axis_p2y{nullptr}; wxSpinCtrlDouble* m_axis_p2z{nullptr}; + int m_ax_face_body{-1}, m_ax_face{-1}; + int m_ax_edge_body{-1}, m_ax_edge{-1}; + AxisPick m_axis_pick{AxisPick::None}; + + // CoordSys controls (datum coordinate system: point + orthonormal frame). + ComboBox* m_coordsys_type{nullptr}; // CoordSysType: PointWorld/FaceAndDirection + ComboBox* m_cs_body{nullptr}; // body-focus chooser: restrict picking to one body + wxSpinCtrlDouble* m_cs_x{nullptr}; wxSpinCtrlDouble* m_cs_y{nullptr}; wxSpinCtrlDouble* m_cs_z{nullptr}; + wxButton* m_cs_pick_face{nullptr}; wxStaticText* m_cs_face_lbl{nullptr}; + wxButton* m_cs_pick_edge{nullptr}; wxStaticText* m_cs_edge_lbl{nullptr}; + wxSpinCtrlDouble* m_cs_hx{nullptr}; wxSpinCtrlDouble* m_cs_hy{nullptr}; wxSpinCtrlDouble* m_cs_hz{nullptr}; + int m_cs_face_body{-1}, m_cs_face{-1}; + int m_cs_edge_body{-1}, m_cs_edge{-1}; + CoordSysPick m_coordsys_pick{CoordSysPick::None}; + + // Onshape-style docked value-entry card (Angle/Radius/Diameter/Offset/Fillet). + wxSizer* m_box_value{nullptr}; + wxStaticText* m_value_label{nullptr}; + wxTextCtrl* m_value_input{nullptr}; // plain text field: forces en ('.') decimals + double m_value_min{0.0}; // range for confirm-time clamping + double m_value_max{0.0}; + std::function m_value_cont; // deferred apply, run on Confirm + std::function m_value_cancel; // optional action when the card is cancelled + + // Feature tree: a wxTreeCtrl with per-feature-type icons. Callers keep using + // integer row indices via tree_selection()/set_tree_selection(); m_tree_items + // maps feature order -> tree node, rebuilt by refresh_tree(). + wxTreeCtrl* m_tree{nullptr}; + wxTreeCtrl* m_parts{nullptr}; // Bodies list under the feature tree + wxStaticText* m_parts_label{nullptr}; // its "Bodies" caption (hidden when empty) + wxBoxSizer* m_parts_hdr{nullptr}; // Bodies card header (icon + title) + wxStaticLine* m_parts_rule{nullptr}; // rule under that header + wxBoxSizer* m_hdr_tree_row{nullptr}; // Feature tree header: title + row actions + wxStaticText* m_hdr_tree{nullptr}; // its title label + wxImageList* m_tree_images{nullptr}; + std::vector m_tree_items; + // Parts list: tree rows for each body (parallel to m_doc.bodies). Selecting one + // highlights that body and makes it the target for the next op. + std::vector m_tree_body_items; + + // Section views (non-destructive): named "Section View N" entries listed in the tree, each a + // horizontal clip height. View-only — NOT bodies/features, never serialized. Key X adds one; + // clicking a row activates it (again = off); Delete removes it; Alt+Wheel moves the active one. + // Section view (single, non-destructive): ONE horizontal clip that hides half the model to + // inspect inside — solid, no ghost of the hidden half. Toggled on/off; Flip shows the other + // half. Never a body, no tree entry. + bool m_section_on{false}; + double m_section_cut_z{0.0}; + bool m_section_upper{false}; // false = keep lower half, true = upper + ScalableButton* m_section_flip_btn{nullptr}; // toolbar action; enabled only while the section is on + void toggle_section_view(); // Section View button / X: on <-> off + void flip_section_view(); // Flip button / F: opposite half + void update_section_flip_btn(); // enable the Flip button iff the section is on + // Per-body visibility (parallel to m_doc.bodies; index stable across recompute since + // bodies are appended in feature order). Empty/grown to all-visible by sync_body_visible(). + std::vector m_body_visible; + void sync_body_visible(); // grow/shrink m_body_visible to bodies.size() + // Per-body display translation (Move-body, M5). Parallel to m_doc.bodies; default + // identity. Applied to the display/pick meshes only — the OCCT shape (and face/edge + // global ids) is never touched, so dress-up targeting stays stable across a move. + std::vector m_body_xform; + std::vector m_disp_body_meshes; // display_body_meshes with m_body_xform applied + TriangleMesh m_disp_pick_mesh; // combined pick mesh with m_body_xform applied + void sync_body_xform(); // grow m_body_xform to bodies.size() (identity) + void rebuild_disp_meshes(); // recompute m_disp_* from m_doc + m_body_xform + void feed_bodies(); // push m_disp_* + visibility/xform to the viewport + void on_move_body(); // start the move gizmo on the selected body + void arm_transform_gizmo(); // arm the move gizmo on the Transform card's body (add mode only) + void on_set_body_color(); // Color tool: pick a per-body display colour override + void on_boolean_tool(); // Boolean (combine bodies): needs two solids, then opens the tool + int tree_selection() const; // selected feature row, or wxNOT_FOUND + int tree_body_selection() const; // selected Parts-list body index, or -1 + void refresh_parts(); // rebuild the Bodies list under the feature tree + void sync_sidebar_width(); // keep the panel as wide as Prepare's sidebar + void set_tree_selection(int row); + static int tree_icon_for(CadFeatureType t); + + wxStaticText* m_status{nullptr}; + // m_status's foreground as created, captured before any caller touches it. Callers signal + // "no opinion" by setting wxNullColour, which restores exactly this — so it is the only + // reliable way to tell a chosen colour (the error red) from the default. See set_status(). + wxColour m_status_default_fg; + // The guidance sentence for the step the armed sketch tool is on, kept so a transient + // readout (the live length/angle while a segment is being dragged) can be appended to it + // instead of replacing it — the guidance used to vanish on the first mouse move after a + // click, which is precisely when it is needed. 1c0c. + wxString m_sketch_step; + // mode is a DesignSketchTool::Mode; passed as an int because this header deliberately does + // not include the tool's, and the .cpp (which does) casts it back. + void on_sketch_step(int mode, int step, int picks); + wxStaticText* m_dof_status{nullptr}; // DoF / constraint-state readout (P3) + // Last live-solve result, so entering Constrain can restore the readout without a solve. + int m_dof_last{-1}; + bool m_dof_last_ok{true}; + bool m_dof_last_has{false}; + int m_feature_counter{0}; + + std::vector m_confirm_btns; + + // Edit-in-place state: add-mode is m_edit_index == -1. Single-feature edit + // (Sketch or Extrude independently) uses only m_edit_index as the row to replace. + int m_edit_index{-1}; + + // Tree row of the sketch currently being constrained (-1 = not constraining). + int m_constrain_feat{-1}; + + // Constraint-manager card (C3.4): header + a rebuildable list of constraint rows. + wxSizer* m_box_constraints{nullptr}; + wxStaticText* m_hdr_constraints{nullptr}; + wxSizer* m_constraint_rows{nullptr}; + int m_constraint_sel{-1}; // highlighted constraint row, or -1 +}; + +}} // namespace Slic3r::GUI + +#endif // slic3r_DesignPanel_hpp_ diff --git a/src/slic3r/GUI/CAD/DesignSketchTool.cpp b/src/slic3r/GUI/CAD/DesignSketchTool.cpp new file mode 100644 index 0000000000..716df658ed --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignSketchTool.cpp @@ -0,0 +1,11154 @@ +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/CAD/SketchInlineEditor.hpp" +#include "slic3r/GUI/Plater.hpp" + +#include +#include +#include "libslic3r/BuildVolume.hpp" +#include "slic3r/GUI/Camera.hpp" +#include "slic3r/GUI/3DScene.hpp" +#include "slic3r/GUI/GLShader.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" +#include "libslic3r/TriangleMesh.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +// How many chords an arc is drawn with. loop_report corrects each arc's area back to the true +// curve using this exact number, so the two MUST agree — changing it here without updating the +// correction silently biases every reported area. +static constexpr int kArcFacets = 24; + +// Positioning helpers (defined lower down, used by the dimension methods above them). +static bool entity_ref_point(const SketchEntity& e, Vec2d& out); +static void translate_entity(SketchEntity& e, const Vec2d& d); +// Pick-distance helpers (defined lower down; used earlier by the edit-op gizmo). +static double point_segment_dist(const Vec2d& p, const Vec2d& a, const Vec2d& b); +static double entity_pick_dist(const Vec2d& p, const SketchEntity& e); +static bool point_in_poly(const Vec2d& q, const std::vector& poly); +static bool ray_triangle(const Vec3d& ro, const Vec3d& rd, const Vec3d& v0, const Vec3d& v1, + const Vec3d& v2, double& t); +static double ray_segment_dist3(const Vec3d& ro, const Vec3d& rd, const Vec3d& a, const Vec3d& b); + +// Project a world-space point to canvas screen pixels (device px, GL viewport units; +// origin top-left after the GL y-flip). Mirrors GLCanvas3D's world->screen pattern: +// projection * view, perspective divide, NDC -> viewport. Returns (-1,-1) if behind. +// (Retained for auto-emitted dimensions in Phase B, which have no click to anchor to; +// needs the design canvas's own camera/viewport, not the plater's.) +[[maybe_unused]] static wxPoint world_to_screen_px(const Camera& cam, const Vec3d& world) +{ + // NB: multiply the raw 4x4 matrices, NOT the Transform3d objects — the projection is not + // affine, so Transform*Transform mangles it (Eigen assumes affine) and yields garbage w. + const Eigen::Matrix4d m = cam.get_projection_matrix().matrix() * cam.get_view_matrix().matrix(); + const Eigen::Vector4d clip = m * world.homogeneous(); + if (std::abs(clip.w()) < 1e-9) return wxPoint(-1, -1); + const Vec3d ndc = clip.head<3>() / clip.w(); + const std::array& vp = cam.get_viewport(); + const double sx = vp[0] + (ndc.x() * 0.5 + 0.5) * vp[2]; + const double sy = vp[1] + (1.0 - (ndc.y() * 0.5 + 0.5)) * vp[3]; // GL y-up -> wx y-down + return wxPoint(int(sx + 0.5), int(sy + 0.5)); +} + +// The kernel's weld tolerance follows the app preference, and it must be pushed at EVERY +// point that starts a sketch session: a Constrain session never passes through begin(), and +// it uses region_loops()/connected_loop(), which read the same tolerance. Pushing in one +// place only would leave those sessions on whatever the previous session set. +static void push_auto_close_pref() +{ + Slic3r::set_sketch_auto_close(wxGetApp().is_auto_close_sketch_loops()); +} + +void DesignSketchTool::begin(const SketchPlane& plane, Mode mode) +{ + push_auto_close_pref(); + + m_plane = plane; + m_mode = mode; + m_step_mode_last = -1; // a new session re-announces its step, even if it repeats the last + m_points.clear(); + m_entities.clear(); + m_construction = false; + m_has_cursor = false; + m_sel_a = m_sel_b = -1; + m_constrain_entities = false; + m_pick0 = m_pick1 = m_pick2 = -1; + m_constraint_hl.clear(); + m_constrain_cons.clear(); + m_awaiting_length = false; + m_autoedit_seen = 0; // baseline: no entities yet; first commit triggers edit + m_autoedit_pending = false; + m_selection.clear(); + m_point_sel.clear(); + m_constraints.clear(); + m_dimensions.clear(); + m_dim_has0 = false; + m_pending_dim = -1; + m_dof = -1; m_solve_ok = true; m_entity_conflict.clear(); + m_features.clear(); + m_open_feature = -1; + m_active = true; +} + +// Re-open a committed entity sketch for editing: mirror begin() (fresh Select session), +// then load the geometry + driving constraints, re-detect feature groups, and live-solve +// so handles/quotes/regular-drag work exactly as in the original draw session. +void DesignSketchTool::begin_edit(const std::vector& entities, + const std::vector& constraints, + const SketchPlane& plane) +{ + begin(plane, Mode::Select); + m_entities = entities; + m_constraints = constraints; + rebuild_features_from_entities(); + resolve_live(); +} + +// Walk the entity list grouping each consecutive CLOSED chain (entities are stored in +// gesture order, so a polygon/rect/slot's members are contiguous and end-to-end linked) +// and classify it: L,A,L,A -> Slot; 4 arcs (2 concentric + 2 caps) -> ArcSlot; +// L,A×4 (4 equal-radius corner arcs) -> RoundedRect; 4 right-angled lines -> Rect; +// N equal-length lines -> Polygon. Single/irregular entities stay ungrouped (they fall +// back to per-entity quotes). This reconstructs m_features for a re-opened sketch. +void DesignSketchTool::rebuild_features_from_entities() +{ + m_features.clear(); + m_open_feature = -1; + const int n = int(m_entities.size()); + using T = SketchEntity::Type; + auto start = [&](int i) { return m_entities[i].p0; }; + auto end = [&](int i) { const SketchEntity& e = m_entities[i]; + return (e.type == T::Line || e.type == T::Arc) ? e.p1 : e.p0; }; + auto is_near = [](const Vec2d& a, const Vec2d& b) { + return (a - b).norm() <= 0.05 + 1e-3 * std::max(a.norm(), b.norm()); }; + + int i = 0; + while (i < n) { + int j = i; bool closed = false; // greedily extend a consecutive chain + while (j + 1 < n && is_near(end(j), start(j + 1))) { + ++j; + if ((j - i) >= 2 && is_near(end(j), start(i))) { closed = true; break; } + } + const int cnt = j - i + 1; + if (!closed || cnt < 3) { ++i; continue; } + + int arcs = 0; bool all_line = true; + for (int k = i; k <= j; ++k) { + if (m_entities[k].type == T::Arc) ++arcs; + if (m_entities[k].type != T::Line) all_line = false; + } + Vec2d c(0, 0); for (int k = i; k <= j; ++k) c += start(k); c /= double(cnt); + Feature f; f.begin = i; f.end = j + 1; f.c0 = c; + + if (cnt == 4 && arcs == 2 && + m_entities[i].type == T::Line && m_entities[i + 1].type == T::Arc && + m_entities[i + 2].type == T::Line && m_entities[i + 3].type == T::Arc) { + f.kind = FeatureKind::Slot; // make_slot: top, cap@c1, bottom, cap@c0 + f.c0 = m_entities[i + 3].center; + f.c1 = m_entities[i + 1].center; + f.param = m_entities[i + 1].radius; + m_features.push_back(f); + } else if (cnt == 4 && arcs == 4 && + is_near(m_entities[i].center, m_entities[i + 2].center) && + std::abs(m_entities[i + 1].radius - m_entities[i + 3].radius) <= + 0.02 * std::max(m_entities[i + 1].radius, 1e-6) && + m_entities[i].radius > m_entities[i + 2].radius) { + // make_arc_slot: [0]outer(Rc+w), [1]cap@E(w), [2]inner(Rc-w), [3]cap@S(w). + // c0=main centre, c1=centreline start (cap@S centre = Sc), param=half-width. + f.kind = FeatureKind::ArcSlot; + f.c0 = m_entities[i].center; + f.c1 = m_entities[i + 3].center; + f.param = m_entities[i + 3].radius; + m_features.push_back(f); + } else if (cnt == 8 && arcs == 4 && + m_entities[i].type == T::Line && m_entities[i + 1].type == T::Arc && + m_entities[i + 2].type == T::Line && m_entities[i + 3].type == T::Arc && + m_entities[i + 4].type == T::Line && m_entities[i + 5].type == T::Arc && + m_entities[i + 6].type == T::Line && m_entities[i + 7].type == T::Arc) { + // rounded_rect_entities: 4 corner arcs (equal radius r) at the inset corners. + // Recover the axis-aligned bounds from the arc centres ± r. + const double r = m_entities[i + 1].radius; + bool equal_r = true; + for (int k : {3, 5, 7}) + if (std::abs(m_entities[i + k].radius - r) > 0.02 * std::max(r, 1e-6)) + equal_r = false; + if (equal_r && r > 1e-6) { + double cxmin = 1e18, cxmax = -1e18, cymin = 1e18, cymax = -1e18; + for (int k : {1, 3, 5, 7}) { + const Vec2d& o = m_entities[i + k].center; + cxmin = std::min(cxmin, o.x()); cxmax = std::max(cxmax, o.x()); + cymin = std::min(cymin, o.y()); cymax = std::max(cymax, o.y()); + } + f.kind = FeatureKind::RoundedRect; + f.c0 = Vec2d(cxmin - r, cymin - r); // (xmin,ymin) + f.c1 = Vec2d(cxmax + r, cymax + r); // (xmax,ymax) + f.param = r; + m_features.push_back(f); + } + } else if (all_line) { + std::vector sidelen(cnt); + for (int k = 0; k < cnt; ++k) sidelen[k] = (m_entities[i + k].p1 - m_entities[i + k].p0).norm(); + const double lmin = *std::min_element(sidelen.begin(), sidelen.end()); + const double lmax = *std::max_element(sidelen.begin(), sidelen.end()); + const bool equal_sides = lmin > 1e-6 && (lmax - lmin) / lmax < 0.02; + bool all_right = true; + for (int k = 0; k < cnt && all_right; ++k) { + Vec2d u = m_entities[i + k].p1 - m_entities[i + k].p0; + Vec2d v = m_entities[i + (k + 1) % cnt].p1 - m_entities[i + (k + 1) % cnt].p0; + if (u.norm() < 1e-9 || v.norm() < 1e-9) { all_right = false; break; } + if (std::abs(u.normalized().dot(v.normalized())) > 0.06) all_right = false; // ~3.4° + } + if (cnt == 4 && all_right) { + f.kind = FeatureKind::CornerRect; f.c0 = start(i); f.c1 = start(i + 2); + m_features.push_back(f); + } else if (equal_sides) { + f.kind = FeatureKind::Polygon; f.c0 = c; f.c1 = start(i); + f.sides = cnt; f.param = (start(i) - c).norm(); + m_features.push_back(f); + } + } + i = j + 1; + } +} + +void DesignSketchTool::set_tool(Mode mode) +{ + // A READY edit-op carries the user's typed or dragged value, so switching tools commits it + // rather than dropping it — the same rule Tab follows in the dimension editor. Discarding it + // here is most of why Fillet looked like it simply did not work: every documented route (type + // the radius, or drag the arrow) left the op ready-but-pending, and the next tool click threw + // the value away and reverted the corner to sharp, with nothing on screen saying so. + // This MUST run before m_mode is reassigned: op_ready() and confirm_op() both switch on + // m_mode, so after the assignment they would test the tool being switched TO. That read + // op_ready()==0 with a=0 b=3 val=28.205 sitting right there — picked, valued, and dropped. + if (op_ready()) confirm_op(); + + // An OPEN inline value field freezes the canvas (on_mouse_impl returns early while + // m_awaiting_length) and blocks every keyboard shortcut (in_text includes inline_busy()). + // Drawing a rectangle opens one automatically for its Width/Height, so after a rectangle the + // sketch was STUCK: pressing C did nothing because the key never reached this function, and + // clicking on the canvas did nothing because the canvas was frozen. Committing here accepts + // the typed value and closes the field, which is the same rule the ready-edit-op above + // follows — leaving a tool must not silently discard what the user entered. + if (on_inline_commit) on_inline_commit(); + + // Switch the active drawing tool without dropping accumulated entities. + m_mode = mode; + m_points.clear(); + m_has_cursor = false; + // DRAIN THE QUEUED DIMENSIONS, do not just resync the baseline. on_inline_commit() above + // commits the field that is open, and the commit callback installed by + // open_next_autoedit_dim does `++m_autoedit_dim_idx; CallAfter(open_next_autoedit_dim)` — + // so the switch's OWN commit schedules the next queued field, which then opens on top of the + // tool the user just armed. Measured: draw a rectangle, its Width field opens, arm Line from + // the offer; Width commits, the status line reads "Line — click start, then end", and the + // rectangle's Height field is sitting over it. (The keyboard cannot reproduce it: in_text + // includes inline_busy(), so letters are swallowed while a field is open — the switch has to + // come from the menu, the toolbar or the MCP socket.) + // + // reset_autoedit() is the existing helper for exactly this and its comment already says it + // "mirrors set_tool's resync" — the three lines that used to be here were that mirror drifting + // out of step, missing the two members that matter. The already-queued CallAfter then finds + // m_autoedit_dim_idx == -1 and returns through the guard at the top of open_next_autoedit_dim. + // + // The current value is COMMITTED rather than cancelled, matching the ready-edit-op rule a few + // lines above and Tab in the dimension editor. Esc is the gesture that means keep-as-drawn; a + // tool switch is not Esc. + reset_autoedit(); + + // An abandoned gesture must not leave its half-open Feature behind. begin_feature() pushes a + // Feature with end == begin immediately and end_feature() is what fills it in — and pops it + // when the gesture appended nothing. Switching tools mid-gesture skips end_feature entirely, + // so a zero-span Feature stays in m_features for good and m_open_feature stays set, which + // also gates the auto-edit trigger for whatever is drawn next. + if (m_open_feature >= 0 && m_open_feature < int(m_features.size()) + && m_features[m_open_feature].end <= m_features[m_open_feature].begin) + m_features.pop_back(); // always the last one: begin_feature pushed it + m_open_feature = -1; + + // Constrain-mode picks and the imported-art transform outlived the tool that made them. + // Neither can misfire while another mode is active, which is why this is quieter than the + // dimension picks — but coming BACK to Constrain resurrected picks made before leaving, + // possibly against entities deleted in between. Reset them the way begin_constrain does. + m_sel_a = m_sel_b = -1; + m_constrain_entities = false; + reset_xform(); // cancel() already does this; a tool switch is just as much a leave + // A READY edit-op carries the user's typed or dragged value, so switching tools commits it + // rather than dropping it — the same rule Tab follows in the dimension editor. Discarding it + // here is most of why Fillet looked like it simply did not work: every documented route (type + // the radius, or drag the arrow) left the op ready-but-pending, and the next tool click threw + // the value away and reverted the corner to sharp, with nothing on screen saying so. + reset_op(); // drop any in-progress (not yet ready) edit-op gizmo + reset_tf(); // drop any in-progress transform gizmo + // A pick that survives the tool that made it is invisible, and the first sign of it is a + // constraint or a dimension landing on geometry the user did not choose. Drop the modal + // picks left armed by the tool we are leaving: the Dimension tool's first pick, the + // Constrain tool's picks, and the individual point selection. + m_dim_has0 = false; + m_dim_e0 = -1; + m_dim_r0 = SketchPointRole::P0; + m_pick0 = m_pick1 = m_pick2 = -1; + m_point_sel.clear(); + m_selection.clear(); + if (on_selection_changed) on_selection_changed(0); +} + +void DesignSketchTool::cancel() +{ + close_session_chrome(); // same orphaned-field freeze as finish() — see yce + m_active = false; + m_step_mode_last = -1; + m_points.clear(); + m_entities.clear(); + m_construction = false; + m_has_cursor = false; + m_sel_a = m_sel_b = -1; + m_constrain_entities = false; + m_pick0 = m_pick1 = m_pick2 = -1; + m_constraint_hl.clear(); + m_constrain_cons.clear(); + m_awaiting_length = false; + m_selection.clear(); + m_point_sel.clear(); + m_constraints.clear(); + m_dimensions.clear(); + m_dim_has0 = false; + m_pending_dim = -1; + m_dof = -1; m_solve_ok = true; m_entity_conflict.clear(); + m_features.clear(); + m_open_feature = -1; + reset_op(); + reset_xform(); + reset_tf(); +} + +// CadLevel::Gesture inside a sketch: drop the entity being drawn, keep the tool armed. +bool DesignSketchTool::abort_gesture() +{ + if (m_points.empty()) return false; + m_points.clear(); + m_has_cursor = false; + return true; +} + +// CadLevel::Tool inside a sketch: an armed draw/edit tool falls back to Select. +// Drop any pending edit-op BEFORE the downgrade: set_tool commits a ready one, and Esc must +// cancel it, never apply it. Right-click already discards it through its own branch. +bool DesignSketchTool::disarm_tool() +{ + if (m_mode == Mode::Select) return false; + reset_op(); + set_tool(Mode::Select); + return true; +} + +// Esc / right-click while active: layered exit (Onshape-like), and layered is where it stops. +// Abort an in-progress entity first, then drop a draw tool back to Select, then — only if the +// session holds NOTHING a user could mourn — leave it. +// +// It used to have a fourth layer: refuse once, and let the SECOND consecutive request destroy a +// drawn sketch. That is the "I pressed Esc twice and my rectangle was gone" report, and no +// warning makes it acceptable, because the two presses are never deliberate — the first is aimed +// at a value field or a tool and the second at the tool underneath it. A session holding geometry +// is now left ONLY through Finish (keep) or Cancel (discard), both of which say which they are. +// This is the single decision point for every caller, keyboard and mouse alike, so the guarantee +// cannot be re-opened by adding a route. +void DesignSketchTool::request_exit() +{ + if (abort_gesture()) return; + if (disarm_tool()) return; + if (live_sketch_has_work()) { if (on_exit_refused) on_exit_refused(); return; } + if (on_exit) on_exit(); + else cancel(); +} + +void DesignSketchTool::request_undo_redo(bool redo) +{ + if (on_undo_redo) on_undo_redo(redo); +} + +void DesignSketchTool::clear_selection() +{ + if (m_selection.empty() && m_point_sel.empty()) return; + m_selection.clear(); + m_point_sel.clear(); + if (on_selection_changed) on_selection_changed(0); +} + +void DesignSketchTool::delete_selected() +{ + if (m_selection.empty()) return; + const int n = int(m_entities.size()); + std::vector del(n, false); + for (int i : m_selection) + if (i >= 0 && i < n) del[i] = true; + // old index -> new index (or -1 if deleted), to fix up constraint references. + std::vector remap(n, -1); + int next = 0; + for (int i = 0; i < n; ++i) + if (!del[i]) remap[i] = next++; + for (int i = n - 1; i >= 0; --i) + if (del[i]) m_entities.erase(m_entities.begin() + i); + // Drop constraints touching a deleted entity; remap the survivors. + std::vector kept; + auto live = [&](int e) { return e < 0 || (e < n && remap[e] >= 0); }; + auto map = [&](int e) { return e < 0 ? -1 : remap[e]; }; + for (SketchEntityConstraintDef c : m_constraints) { + if (!live(c.ea) || !live(c.eb) || !live(c.ec)) continue; + c.ea = map(c.ea); c.eb = map(c.eb); c.ec = map(c.ec); + kept.push_back(c); + } + m_constraints.swap(kept); + m_selection.clear(); + m_point_sel.clear(); + // v1: placed quotes reference entity indices that have shifted; drop them rather + // than risk a dangling reference (the driving constraints survive, reindexed). + m_dimensions.clear(); + m_dim_has0 = false; + m_pending_dim = -1; + // The Dimension tool's pending FIRST pick is the same dangling-reference hazard as the placed + // quotes just cleared above: it references an entity index that has shifted or gone away, and + // a stale m_dim_e0 would dereference out of range on the next click. Drop it too. + m_dim_e0 = -1; + m_dim_r0 = SketchPointRole::P0; + + // FEATURE GROUPS hold [begin,end) ranges into m_entities, and every index past a deletion has + // just moved. Left alone they point at other people's geometry: feature_of() then answers with + // a group the user never drew, and the rect/slot/polygon handles and live quotes follow it. + // Survivors are remapped (a contiguous range stays contiguous, since the remap preserves + // order); a group that lost any member is dropped, the same rule the placed quotes above + // already follow — dangling is worse than absent. + { + std::vector kept_f; + for (const Feature& f : m_features) { + if (f.begin < 0 || f.end > n || f.end <= f.begin) continue; + bool whole = true; + for (int k = f.begin; k < f.end; ++k) + if (del[k]) { whole = false; break; } + if (!whole) continue; + Feature g = f; + g.begin = remap[f.begin]; + g.end = remap[f.end - 1] + 1; + kept_f.push_back(g); + } + m_features.swap(kept_f); + m_open_feature = -1; + } + + // The draw-then-edit QUEUE outlives the entities it was queued for. Its own helper says so: + // "Removing an entity that still has a deferred auto-edit would otherwise open a field on a + // now-deleted entity and freeze the flow" — it was simply never called from here. Measured: + // delete a rectangle whose Width/Height were still queued, draw a circle, type its radius — + // the field opens, the digits go in, and the radius does not move, because the field belongs + // to a rectangle that no longer exists. ua9g. + reset_autoedit(); + + // And re-solve, so the sketch's reported degrees of freedom describe the sketch that is + // actually there. Without this, sketch_describe answered dof=16 for a document holding one + // circle — the DoF of the geometry that had just been deleted. + resolve_live(); + if (on_selection_changed) on_selection_changed(0); +} + +// Convert the selection to/from construction geometry (6zic). The Construction +// checkbox only ever set the mode for what you draw NEXT, so a line drawn as real geometry +// could never become a guide, nor a guide become real. Whole Feature groups flip together: +// a rectangle is four Line entities and converting three of them is never what was meant. +int DesignSketchTool::toggle_selection_construction() +{ + if (!selection_valid() || m_selection.empty()) return 0; + std::vector hit(m_entities.size(), false); + for (int i : m_selection) { + const int f = feature_of(i); + if (f >= 0) + for (int k = m_features[f].begin; k < m_features[f].end; ++k) hit[k] = true; + else + hit[i] = true; + } + // One direction for the whole batch: any real geometry in it -> all become construction. + bool any_real = false; + for (size_t i = 0; i < hit.size(); ++i) + if (hit[i] && !m_entities[i].construction) { any_real = true; break; } + int n = 0; + for (size_t i = 0; i < hit.size(); ++i) + if (hit[i] && m_entities[i].construction != any_real) { m_entities[i].construction = any_real; ++n; } + return n; +} + +bool DesignSketchTool::selection_valid() const +{ + for (int i : m_selection) + if (i < 0 || i >= int(m_entities.size())) return false; + return true; +} + +DesignSketchTool::DimType DesignSketchTool::dimension_kind() const +{ + if (!selection_valid()) return DimType::None; + if (m_selection.size() == 1) { + switch (m_entities[m_selection[0]].type) { + case SketchEntity::Type::Line: return DimType::Length; + case SketchEntity::Type::Circle: return DimType::Diameter; + case SketchEntity::Type::Arc: return DimType::Radius; + default: return DimType::None; + } + } + if (m_selection.size() == 2) { + const SketchEntity& a = m_entities[m_selection[0]]; + const SketchEntity& b = m_entities[m_selection[1]]; + const bool aLine = (a.type == SketchEntity::Type::Line); + const bool bLine = (b.type == SketchEntity::Type::Line); + Vec2d tmp(0, 0); + if (aLine && bLine) return DimType::Angle; + // one line + one point-like (point / circle-centre / arc-centre) + if (aLine && entity_ref_point(b, tmp)) return DimType::DistanceToLine; + if (bLine && entity_ref_point(a, tmp)) return DimType::DistanceToLine; + // two point-likes -> centre/point distance (0 = coincident/concentric) + if (entity_ref_point(a, tmp) && entity_ref_point(b, tmp)) return DimType::Distance; + } + return DimType::None; +} + +double DesignSketchTool::dimension_current() const +{ + switch (dimension_kind()) { + case DimType::Length: { const auto& e = m_entities[m_selection[0]]; return (e.p1 - e.p0).norm(); } + case DimType::Diameter: return 2.0 * m_entities[m_selection[0]].radius; + case DimType::Radius: return m_entities[m_selection[0]].radius; + case DimType::Angle: { + const auto& a = m_entities[m_selection[0]]; + const auto& b = m_entities[m_selection[1]]; + const Vec2d da = a.p1 - a.p0, db = b.p1 - b.p0; + const double na = da.norm(), nb = db.norm(); + if (na < 1e-9 || nb < 1e-9) return 0.0; + const double c = std::max(-1.0, std::min(1.0, da.dot(db) / (na * nb))); + return std::acos(c) * 180.0 / M_PI; + } + case DimType::Distance: { + Vec2d ra(0, 0), rb(0, 0); + entity_ref_point(m_entities[m_selection[0]], ra); + entity_ref_point(m_entities[m_selection[1]], rb); + return (rb - ra).norm(); + } + case DimType::DistanceToLine: { + const SketchEntity& a = m_entities[m_selection[0]]; + const SketchEntity& b = m_entities[m_selection[1]]; + const bool aLine = (a.type == SketchEntity::Type::Line); + const SketchEntity& L = aLine ? a : b; + const SketchEntity& P = aLine ? b : a; + Vec2d rp(0, 0); entity_ref_point(P, rp); + Vec2d dir = L.p1 - L.p0; + const double n = dir.norm(); + if (n < 1e-9) return 0.0; + const Vec2d nrm(-dir.y() / n, dir.x() / n); // unit normal to the line + return std::abs((rp - L.p0).dot(nrm)); + } + default: return 0.0; + } +} + +void DesignSketchTool::apply_angle_between(int ia, int ib, double deg) +{ + SketchEntity& A = m_entities[ia]; + SketchEntity& B = m_entities[ib]; + const Vec2d aE[2] = { A.p0, A.p1 }; + const Vec2d bE[2] = { B.p0, B.p1 }; + int si = -1, sj = -1; + double best = 1e-6; + for (int i = 0; i < 2; ++i) + for (int j = 0; j < 2; ++j) { + const double d = (aE[i] - bE[j]).squaredNorm(); + if (d < best) { best = d; si = i; sj = j; } + } + Vec2d pivot, refDir, bMoving; + bool moveP1; + if (si >= 0) { // shared vertex: pivot there, A's arm is the reference + pivot = aE[si]; + refDir = aE[1 - si] - pivot; + moveP1 = (sj == 0); // move the B end that is NOT at the pivot + bMoving = moveP1 ? B.p1 : B.p0; + } else { // no shared vertex: pivot B.p0, A's direction is reference + pivot = B.p0; + refDir = A.p1 - A.p0; + moveP1 = true; + bMoving = B.p1; + } + double nr = refDir.norm(); + if (nr < 1e-9) return; + refDir /= nr; + const Vec2d db = bMoving - pivot; + const double Lb = db.norm(); + if (Lb < 1e-9) return; + const double cross = refDir.x() * db.y() - refDir.y() * db.x(); + const double sign = (cross >= 0.0) ? 1.0 : -1.0; // keep B on its current side + const double rad = sign * deg * M_PI / 180.0; + const Vec2d ndir(refDir.x() * std::cos(rad) - refDir.y() * std::sin(rad), + refDir.x() * std::sin(rad) + refDir.y() * std::cos(rad)); + const Vec2d nb = pivot + Lb * ndir; + if (moveP1) B.p1 = nb; else B.p0 = nb; +} + +void DesignSketchTool::apply_dimension(double v) +{ + switch (dimension_kind()) { + case DimType::Length: { + SketchEntity& e = m_entities[m_selection[0]]; + const Vec2d d = e.p1 - e.p0; + const double r = d.norm(); + if (r > 1e-9 && v > 1e-9) e.p1 = e.p0 + (v / r) * d; + break; + } + case DimType::Diameter: if (v > 1e-9) m_entities[m_selection[0]].radius = 0.5 * v; break; + case DimType::Radius: if (v > 1e-9) m_entities[m_selection[0]].radius = v; break; + case DimType::Angle: apply_angle_between(m_selection[0], m_selection[1], v); break; + case DimType::Distance: { + // Move the 2nd selection so its reference point sits at distance v from the + // 1st (v == 0 -> coincident / concentric). Translate the whole entity. + if (v < 0.0) break; + Vec2d ra(0, 0), rb(0, 0); + entity_ref_point(m_entities[m_selection[0]], ra); + SketchEntity& b = m_entities[m_selection[1]]; + entity_ref_point(b, rb); + const Vec2d d = rb - ra; + const double r = d.norm(); + Vec2d target = ra; + if (r > 1e-9) target = ra + (v / r) * d; + else target = ra + Vec2d(v, 0.0); + translate_entity(b, target - rb); + break; + } + case DimType::DistanceToLine: { + // Move the point-like selection perpendicular to the line so its reference + // point is at distance v (v == 0 -> on the line / on the axis). + if (v < 0.0) break; + const bool aLine = (m_entities[m_selection[0]].type == SketchEntity::Type::Line); + const SketchEntity& L = m_entities[m_selection[aLine ? 0 : 1]]; + SketchEntity& P = m_entities[m_selection[aLine ? 1 : 0]]; + Vec2d rp(0, 0); entity_ref_point(P, rp); + Vec2d dir = L.p1 - L.p0; + const double n = dir.norm(); + if (n < 1e-9) break; + const Vec2d nrm(-dir.y() / n, dir.x() / n); + const double d0 = (rp - L.p0).dot(nrm); // current signed distance + const double sign = (d0 >= 0.0) ? 1.0 : -1.0; // keep the point on its side + translate_entity(P, (sign * v - d0) * nrm); + break; + } + default: break; + } + record_dimension_constraint(v); // store a driving constraint for this dimension + resolve_live(); // live-solve so the viewport shows the solved sketch + m_selection.clear(); + if (on_selection_changed) on_selection_changed(0); +} + +// Append the SketchEntityConstraintDef that makes the just-applied dimension a +// driving constraint (enforced by the kernel live and at commit). DistanceToLine +// records a PointOnLine constraint so "centre onto axis" persists through re-solve. +void DesignSketchTool::record_dimension_constraint(double v) +{ + const DimType k = dimension_kind(); + auto role = [&](int i) { + return (m_entities[i].type == SketchEntity::Type::Point) ? SketchPointRole::P0 + : SketchPointRole::Center; + }; + SketchEntityConstraintDef c; + switch (k) { + case DimType::Length: + c.type = SketchConstraintType::Distance; + c.ea = m_selection[0]; c.ra = SketchPointRole::P0; + c.eb = m_selection[0]; c.rb = SketchPointRole::P1; + c.value = v; m_constraints.push_back(c); break; + case DimType::Diameter: + c.type = SketchConstraintType::Diameter; c.ea = m_selection[0]; c.value = v; + m_constraints.push_back(c); break; + case DimType::Radius: + c.type = SketchConstraintType::Radius; c.ea = m_selection[0]; c.value = v; + m_constraints.push_back(c); break; + case DimType::Angle: + c.type = SketchConstraintType::Angle; + c.ea = m_selection[0]; c.eb = m_selection[1]; c.value = v; + m_constraints.push_back(c); break; + case DimType::Distance: { + const int ia = m_selection[0], ib = m_selection[1]; + if (v < 1e-9) c.type = SketchConstraintType::Coincident; + else { c.type = SketchConstraintType::Distance; c.value = v; } + c.ea = ia; c.ra = role(ia); c.eb = ib; c.rb = role(ib); + m_constraints.push_back(c); break; + } + case DimType::DistanceToLine: { + // Point-on-line driving constraint: hold the point-like entity at unsigned + // perpendicular distance v from the line (v == 0 -> on the axis). + const bool aLine = (m_entities[m_selection[0]].type == SketchEntity::Type::Line); + const int ip = m_selection[aLine ? 1 : 0]; // point-like (Point/Circle/Arc) + const int il = m_selection[aLine ? 0 : 1]; // line + c.type = SketchConstraintType::PointOnLine; + c.ea = ip; c.ra = role(ip); c.eb = il; c.value = v; + m_constraints.push_back(c); break; + } + default: break; // None: no driving constraint recorded + } +} + +// Onshape-style live solve: enforce all accumulated driving constraints on the +// in-session entities immediately, so the viewport reflects the solved sketch as +// each dimension/constraint is added (not only at commit). The pre-edit geometry +// is the solver's initial guess, keeping convergence local and side-preserving. +void DesignSketchTool::resolve_live() +{ + resolve_live_drag(-1, SketchPointRole::P0); +} + +void DesignSketchTool::resolve_live_drag(int dragged_ei, SketchPointRole dragged_role) +{ + const bool has = !m_constraints.empty(); + m_entity_conflict.assign(m_entities.size(), 0); + if (has) { + // Dragging a line endpoint must move ONLY that endpoint (changing the line's angle + + // length), anchoring the other end — Onshape behaviour. Without this, a constraint on + // the line (e.g. a length dimension or an inferred H/V) lets the solver relocate the + // un-dragged endpoint too, so the whole line appears to shift. Temporarily Fix the + // opposite endpoint for this drag-solve only (set_point already moved just the grabbed + // point, so the other end's current coord is its anchor). + std::vector cons = m_constraints; + const bool line_end = dragged_ei >= 0 && dragged_ei < int(m_entities.size()) && + m_entities[dragged_ei].type == SketchEntity::Type::Line && + (dragged_role == SketchPointRole::P0 || dragged_role == SketchPointRole::P1); + if (line_end) { + SketchEntityConstraintDef fix; + fix.type = SketchConstraintType::Fix; + fix.ea = dragged_ei; + fix.ra = (dragged_role == SketchPointRole::P0) ? SketchPointRole::P1 + : SketchPointRole::P0; + cons.push_back(fix); + } + const SketchSolveResult r = (dragged_ei >= 0) + ? sketch_solve_drag(m_entities, cons, dragged_ei, dragged_role) + : sketch_solve(m_entities, cons); + m_dof = r.dof; + m_solve_ok = r.ok; + // Flag every entity referenced by a conflicting constraint so render() can + // tint it red (Onshape/SolveSpace over-constrained feedback). + for (int bi : r.bad) { + if (bi < 0 || bi >= int(m_constraints.size())) continue; + const SketchEntityConstraintDef& c = m_constraints[bi]; + for (int e : {c.ea, c.eb, c.ec}) + if (e >= 0 && e < int(m_entity_conflict.size())) m_entity_conflict[e] = 1; + } + } else { + m_dof = -1; m_solve_ok = true; + } + if (on_solve_state) on_solve_state(m_dof, m_solve_ok, has); +} + +// ---- Onshape-style visual editing: feature grouping + handles ----------------- + +// Index of the Feature whose entity span contains ei, or -1 (last match wins so a +// later, tighter gesture shadows an earlier one if they ever overlap). +int DesignSketchTool::feature_of(int ei) const +{ + for (int i = int(m_features.size()) - 1; i >= 0; --i) + if (ei >= m_features[i].begin && ei < m_features[i].end) return i; + return -1; +} + +// Open a Feature spanning the entities a single gesture is about to append. The +// [begin,end) range is closed in end_feature() once the gesture's entities are in. +void DesignSketchTool::begin_feature(FeatureKind kind) +{ + Feature f; + f.kind = kind; + f.begin = int(m_entities.size()); + f.end = f.begin; + m_features.push_back(f); + m_open_feature = int(m_features.size()) - 1; +} + +// Close the open Feature: record its entity span end + the gesture's parametric +// anchors (centres / corners / half-width / sides) for later handle + dim rebuild. +void DesignSketchTool::end_feature(const Vec2d& c0, const Vec2d& c1, double param, int sides) +{ + if (m_open_feature < 0 || m_open_feature >= int(m_features.size())) return; + Feature& f = m_features[m_open_feature]; + f.end = int(m_entities.size()); + f.c0 = c0; + f.c1 = c1; + f.param = param; + f.sides = sides; + // Drop a degenerate feature (gesture appended nothing). + if (f.end <= f.begin) m_features.pop_back(); + m_open_feature = -1; +} + +// Forward decls: these ellipse helpers are defined further down but used by the +// handle/drag code above their definition. +static Vec2d ellipse_point(const Vec2d& c, double a, double b, double phi, double t); +static double ellipse_param_of(const Vec2d& center, double a, double b, double phi, const Vec2d& q); + +// Live handle set (A3: Line + Circle). Recomputed from solved geometry every frame, +// never persisted — so handles always track the current solve. Derived roles (here +// the circle RadiusHandle, which is NOT a serialized SketchPointRole) are what let a +// tool expose a parametric control its raw entity points don't carry. A4 routes a +// Select-mode drag through hit_test_handle + set_handle; later phases add the +// slot/rect/polygon/ellipse roles off the Feature groups. +std::vector DesignSketchTool::build_handles() const +{ + std::vector hs; + hs.reserve(m_entities.size() * 2); + for (size_t i = 0; i < m_entities.size(); ++i) { + const SketchEntity& e = m_entities[i]; + switch (e.type) { + case SketchEntity::Type::Line: { + Handle a; a.role = HandleRole::P0; a.ei = int(i); a.pos = e.p0; hs.push_back(a); + Handle b; b.role = HandleRole::P1; b.ei = int(i); b.pos = e.p1; hs.push_back(b); + break; + } + case SketchEntity::Type::Circle: { + Handle c; c.role = HandleRole::Center; c.ei = int(i); c.pos = e.center; hs.push_back(c); + // RadiusHandle sits on the circle to the +x side of its centre; dragging it + // (A4) edits the radius. Pure geometry, no constraint of its own. + Handle r; r.role = HandleRole::RadiusHandle; r.ei = int(i); + r.pos = e.center + Vec2d(e.radius, 0.0); hs.push_back(r); + break; + } + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: { + // 3 grips: centre (translate), major-axis end (semi-major a + orientation phi), + // minor-axis end (semi-minor b). a=e.radius, b=e.rminor, phi=e.rotation. + // (EllipseArc also exposes its two endpoints via hit_test_point for sweep.) + const Vec2d um(std::cos(e.rotation), std::sin(e.rotation)); // major dir + const Vec2d un(-um.y(), um.x()); // minor dir + Handle c; c.role = HandleRole::Center; c.ei = int(i); c.pos = e.center; hs.push_back(c); + Handle ma; ma.role = HandleRole::MajorAxis; ma.ei = int(i); + ma.pos = e.center + um * e.radius; hs.push_back(ma); + Handle mi; mi.role = HandleRole::MinorAxis; mi.ei = int(i); + mi.pos = e.center + un * e.rminor; hs.push_back(mi); + break; + } + case SketchEntity::Type::BSpline: { + // One draggable grip per control pole; dragging a pole reshapes the curve. + for (size_t k = 0; k < e.ctrl.size(); ++k) { + Handle h; h.role = HandleRole::BSplineCtrl; h.ei = int(i); + h.ctrl_index = int(k); h.pos = e.ctrl[k]; hs.push_back(h); + } + break; + } + default: break; // Arc derived handles land in later chunks + } + } + return hs; +} + +// Nearest handle to plane-point p within tol. Ties broken by smallest distance. +bool DesignSketchTool::hit_test_handle(const Vec2d& p, double tol, Handle& out) const +{ + bool found = false; + double best = tol; + for (const Handle& h : build_handles()) { + const double d = (h.pos - p).norm(); + if (d <= best) { best = d; out = h; out.hovered = true; found = true; } + } + return found; +} + +// Recompute the hovered handle on a plain (no-button) move. Returns true ONLY when the +// hovered handle changes, so on_mouse forces a single repaint per transition rather than +// re-rendering on every motion event. A no-op (false) for non-Moving events. +bool DesignSketchTool::update_hover(GLCanvas3D& canvas, wxMouseEvent& evt) +{ + if (!evt.Moving()) return false; + Vec2d p; + screen_to_plane(canvas, evt, p); + // Zoom-aware pick tolerance: project a point a few px away and measure in plane units. + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 6, evt.GetY())); + const double tol = std::max(1e-3, (m_plane.project(r2.a, r2.vector()) - p).norm()); + const bool had = m_has_hover_handle; + const Handle prev = m_hover_handle; + Handle h; + m_has_hover_handle = hit_test_handle(p, tol, h); + if (m_has_hover_handle) m_hover_handle = h; + return (had != m_has_hover_handle) || + (m_has_hover_handle && (prev.ei != h.ei || prev.role != h.role)); +} + +// Apply a handle drag (A4). Point handles (P0/P1/Center) move the entity point and +// pin it in the drag-solve so constraints settle around the cursor. The derived +// RadiusHandle isn't a solver point — it edits the circle radius directly, then a +// full re-solve lets any driving Radius/Diameter constraint reassert (an unconstrained +// radius is a free DoF, so the solver keeps the new value). Slot/rect/polygon/ellipse +// roles land in later phases (they rebuild their Feature group). +void DesignSketchTool::set_handle(const Handle& h, const Vec2d& target) +{ + if (h.ei < 0 || h.ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[h.ei]; + switch (h.role) { + case HandleRole::P0: + set_point(h.ei, SketchPointRole::P0, target); resolve_live_drag(h.ei, SketchPointRole::P0); break; + case HandleRole::P1: + set_point(h.ei, SketchPointRole::P1, target); resolve_live_drag(h.ei, SketchPointRole::P1); break; + case HandleRole::Center: + set_point(h.ei, SketchPointRole::Center, target); resolve_live_drag(h.ei, SketchPointRole::Center); break; + case HandleRole::RadiusHandle: { + const double r = (target - e.center).norm(); + if (r > 1e-6) e.radius = r; + resolve_live(); + break; + } + case HandleRole::MajorAxis: { + // The major grip defines the major-axis vector: sets semi-major a + orientation phi. + const Vec2d d = target - e.center; + const double a = d.norm(); + if (a > 1e-6) { + e.rotation = std::atan2(d.y(), d.x()); + e.radius = std::max(a, e.rminor); // keep OCCT invariant a >= b + } + if (e.type == SketchEntity::Type::EllipseArc) { // endpoints ride the reshaped frame + e.p0 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.start_angle); + e.p1 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.end_angle); + } + resolve_live(); + break; + } + case HandleRole::MinorAxis: { + // The minor grip sets semi-minor b = perpendicular distance to the major axis. + const Vec2d um(std::cos(e.rotation), std::sin(e.rotation)); + const Vec2d un(-um.y(), um.x()); + const double b = std::abs((target - e.center).dot(un)); + if (b > 1e-6) e.rminor = std::min(b, e.radius); + if (e.type == SketchEntity::Type::EllipseArc) { + e.p0 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.start_angle); + e.p1 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.end_angle); + } + resolve_live(); + break; + } + case HandleRole::BSplineCtrl: { + // Move one control pole; the end poles mirror p0/p1 (kept in sync for picking). + const int k = h.ctrl_index; + if (k >= 0 && k < int(e.ctrl.size())) { + e.ctrl[k] = target; + if (k == 0) e.p0 = target; + if (k == int(e.ctrl.size()) - 1) e.p1 = target; + } + resolve_live(); + break; + } + default: break; + } +} + +// ---- Dimension tool (Mode::Dimension): click-to-place driving quotes ---------- + +bool DesignSketchTool::point_at(int ei, SketchPointRole role, Vec2d& out) const +{ + if (ei < 0 || ei >= int(m_entities.size())) return false; + const SketchEntity& e = m_entities[ei]; + switch (role) { + case SketchPointRole::P0: out = e.p0; return true; + case SketchPointRole::P1: out = e.p1; return true; + case SketchPointRole::Center: out = e.center; return true; + } + return false; +} + +// Move an entity point to v. Lines/Points set the coordinate directly; a circle/ +// arc centre translates the whole entity (arc endpoints ride along). Dragging an +// arc's endpoint is intentionally a no-op (it would redefine radius + angles). +void DesignSketchTool::set_point(int ei, SketchPointRole role, const Vec2d& v) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + switch (e.type) { + case SketchEntity::Type::Line: + if (role == SketchPointRole::P0) e.p0 = v; + else if (role == SketchPointRole::P1) e.p1 = v; + break; + case SketchEntity::Type::Point: + e.p0 = v; + break; + case SketchEntity::Type::Circle: + // p0 mirrors the centre for circles, which is the convention the solver both writes + // (SketchSolver.cpp:110) and restores after every solve (:421). Moving only e.center + // left the two disagreeing for the whole duration of a live drag, so anything reading + // p0 in that window saw the pre-drag position. + if (role == SketchPointRole::Center) { e.center = v; e.p0 = v; } + break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + if (role == SketchPointRole::Center) { + const Vec2d d = v - e.center; // rigid translate, keep radius/angles + e.center = v; e.p0 += d; e.p1 += d; + } + break; + case SketchEntity::Type::Ellipse: + if (role == SketchPointRole::Center) { e.center = v; e.p0 = v; } + break; + case SketchEntity::Type::BSpline: + // P0/P1 drag the end poles; Center rigidly translates the whole curve. + if (role == SketchPointRole::P0 && !e.ctrl.empty()) { e.ctrl.front() = v; e.p0 = v; } + else if (role == SketchPointRole::P1 && !e.ctrl.empty()) { e.ctrl.back() = v; e.p1 = v; } + else if (role == SketchPointRole::Center) { + const Vec2d d = v - (e.ctrl.empty() ? e.p0 : e.ctrl.front()); + for (auto& cp : e.ctrl) cp += d; + e.p0 += d; e.p1 += d; + } + break; + } +} + +// Nearest entity *point* (endpoint / centre) within tol, with its role. +bool DesignSketchTool::hit_test_point(const Vec2d& p, double tol, int& ei, SketchPointRole& role) const +{ + double best = tol; + bool found = false; + auto consider = [&](int i, SketchPointRole r, const Vec2d& q) { + const double d = (q - p).norm(); + if (d < best) { best = d; ei = i; role = r; found = true; } + }; + for (size_t i = 0; i < m_entities.size(); ++i) { + const SketchEntity& e = m_entities[i]; + switch (e.type) { + case SketchEntity::Type::Line: + consider(int(i), SketchPointRole::P0, e.p0); + consider(int(i), SketchPointRole::P1, e.p1); + break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + consider(int(i), SketchPointRole::P0, e.p0); + consider(int(i), SketchPointRole::P1, e.p1); + consider(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::Circle: + case SketchEntity::Type::Ellipse: + consider(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::BSpline: + consider(int(i), SketchPointRole::P0, e.p0); + consider(int(i), SketchPointRole::P1, e.p1); + break; + case SketchEntity::Type::Point: + consider(int(i), SketchPointRole::P0, e.p0); + break; + } + } + return found; +} + +double DesignSketchTool::measure_dim(const DimAnnot& a) const +{ + Vec2d pa, pb; + switch (a.kind) { + case DimType::Length: + return (a.ea >= 0 && a.ea < int(m_entities.size())) + ? (m_entities[a.ea].p1 - m_entities[a.ea].p0).norm() : 0.0; + case DimType::Diameter: + return (a.ea >= 0 && a.ea < int(m_entities.size())) ? 2.0 * m_entities[a.ea].radius : 0.0; + case DimType::Radius: + return (a.ea >= 0 && a.ea < int(m_entities.size())) ? m_entities[a.ea].radius : 0.0; + case DimType::Angle: { + // Single line: angle to the +X axis, normalised to [0,360). (Line-to-line angle + // dimensions use the legacy dialog path.) + if (a.ea < 0 || a.ea >= int(m_entities.size())) return 0.0; + const SketchEntity& e = m_entities[a.ea]; + if (e.type != SketchEntity::Type::Line) return 0.0; + const Vec2d d = e.p1 - e.p0; + if (d.squaredNorm() < 1e-18) return 0.0; + double deg = std::atan2(d.y(), d.x()) * 180.0 / M_PI; + if (deg < 0.0) deg += 360.0; + return deg; + } + case DimType::Distance: + return (point_at(a.ea, a.ra, pa) && point_at(a.eb, a.rb, pb)) ? (pb - pa).norm() : 0.0; + case DimType::DistanceToLine: { + if (!point_at(a.ea, a.ra, pa) || a.eb < 0 || a.eb >= int(m_entities.size())) return 0.0; + const SketchEntity& L = m_entities[a.eb]; + const Vec2d d = L.p1 - L.p0; + const double n = d.norm(); + if (n < 1e-9) return 0.0; + const Vec2d nrm(-d.y() / n, d.x() / n); + return std::abs((pa - L.p0).dot(nrm)); + } + default: return 0.0; + } +} + +// One driving constraint per (kind, operands) — update it in place rather than appending a +// second one every time its value is edited. +// +// Re-typing a quote used to push a duplicate alongside the original: draw a line and accept its +// length, and you get Distance(P0,P1)=64.9; click the quote later and type 30, and you get a +// SECOND Distance on the same two points asking for 30. That is over-constrained by +// construction, so the solver reported "Conflicting constraints" and refused to move anything — +// the number on screen changed and the geometry did not, which reads as the edit being ignored. +// A line carrying no dimension yet was unaffected, which is what made it look intermittent. +// +// Operand order is ignored: a Distance from A to B is the same constraint as B to A, and so is +// an Angle. Returns the index, so callers can keep the annotation's `con` link pointing at the +// constraint that is actually live — which is what makes the next edit an update too. +int DesignSketchTool::upsert_constraint(const SketchEntityConstraintDef& c) +{ + auto same_operands = [&](const SketchEntityConstraintDef& o) { + if (o.ea == c.ea && o.ra == c.ra && o.eb == c.eb && o.rb == c.rb) return true; + return o.ea == c.eb && o.ra == c.rb && o.eb == c.ea && o.rb == c.ra; + }; + for (int i = 0; i < int(m_constraints.size()); ++i) + if (m_constraints[i].type == c.type && same_operands(m_constraints[i])) { + m_constraints[i] = c; + return i; + } + m_constraints.push_back(c); + return int(m_constraints.size()) - 1; +} + +// The same rule for the visible annotation: one quote per (kind, operands), so repeated edits +// do not stack labels on top of each other reading different values. +int DesignSketchTool::upsert_dimension(const DimAnnot& a) +{ + for (int i = 0; i < int(m_dimensions.size()); ++i) { + const DimAnnot& o = m_dimensions[i]; + if (o.kind == a.kind && ((o.ea == a.ea && o.eb == a.eb) || (o.ea == a.eb && o.eb == a.ea))) { + const Vec2d keep = m_dimensions[i].label_pos; // don't teleport a placed label + m_dimensions[i] = a; + m_dimensions[i].label_pos = keep; + return i; + } + } + m_dimensions.push_back(a); + return int(m_dimensions.size()) - 1; +} + +SketchEntityConstraintDef DesignSketchTool::constraint_for(const DimAnnot& a) const +{ + SketchEntityConstraintDef c; + switch (a.kind) { + case DimType::Length: + c.type = SketchConstraintType::Distance; + c.ea = a.ea; c.ra = SketchPointRole::P0; + c.eb = a.ea; c.rb = SketchPointRole::P1; c.value = a.value; + break; + case DimType::Diameter: c.type = SketchConstraintType::Diameter; c.ea = a.ea; c.value = a.value; break; + case DimType::Radius: c.type = SketchConstraintType::Radius; c.ea = a.ea; c.value = a.value; break; + case DimType::Distance: + if (a.value < 1e-9) c.type = SketchConstraintType::Coincident; + else { c.type = SketchConstraintType::Distance; c.value = a.value; } + c.ea = a.ea; c.ra = a.ra; c.eb = a.eb; c.rb = a.rb; + break; + case DimType::DistanceToLine: + c.type = SketchConstraintType::PointOnLine; + c.ea = a.ea; c.ra = a.ra; c.eb = a.eb; c.value = a.value; + break; + default: break; + } + return c; +} + +// Measure the just-picked dimension, append its driving constraint, live-solve, and +// fire the value-card callback so the user can override the value. +int DesignSketchTool::place_dimension(DimAnnot a) +{ + a.value = measure_dim(a); + a.con = upsert_constraint(constraint_for(a)); + const int di = upsert_dimension(a); + resolve_live(); + open_value_editor(di); + return m_pending_dim; +} + +// Nearest placed-dimension label within tol (uses the centre cached by render). +int DesignSketchTool::hit_test_dimension(const Vec2d& p, double tol) const +{ + double best = tol; + int bi = -1; + for (size_t i = 0; i < m_dimensions.size(); ++i) { + const double d = (m_dimensions[i].label_pos - p).norm(); + if (d < best) { best = d; bi = int(i); } + } + return bi; +} + +// Reopen the value editor on an existing dimension (click/double-click its label). +void DesignSketchTool::edit_dimension(int di) +{ + if (di < 0 || di >= int(m_dimensions.size())) return; + open_value_editor(di); +} + +// Representative plane anchor for a dimension's value editor: the cached label centre +// once render has computed it, otherwise a geometric midpoint (length/distance) or the +// entity centre (radius/diameter). +Vec2d DesignSketchTool::dim_anchor(const DimAnnot& a) const +{ + if (a.label_pos.squaredNorm() > 1e-12) return a.label_pos; + Vec2d pa, pb; + if ((a.kind == DimType::Radius || a.kind == DimType::Diameter) && + point_at(a.ea, SketchPointRole::Center, pa)) + return pa; + const bool ga = point_at(a.ea, a.ra, pa); + const bool gb = point_at(a.eb, a.rb, pb); + if (ga && gb) return 0.5 * (pa + pb); + if (ga) return pa; + if (gb) return pb; + return Vec2d(0, 0); +} + +// Open the in-canvas value editor on dimension `di`. Projects the dimension's anchor +// to screen pixels and hands the host (DesignCanvas) a commit/cancel pair that drive +// the value through the existing set/cancel_dimension_value path. Falls back to the +// modal pick-complete callback when no inline-edit host is wired. +void DesignSketchTool::open_value_editor(int di) +{ + if (di < 0 || di >= int(m_dimensions.size())) return; + m_pending_dim = di; + if (!on_inline_edit) { + if (on_dimension_pick_complete) on_dimension_pick_complete(m_dimensions[di].value); + return; + } + const DimAnnot& a = m_dimensions[di]; + // Anchor the field OVER the dimension (project its label/anchor to the viewport), same as + // the draw-then-edit tools and Constrain mode; fall back to the click point if it projects + // off-screen. + wxPoint px(m_last_mouse_x, m_last_mouse_y); + const Camera& cam = wxGetApp().plater()->get_camera(); + const wxPoint lp = world_to_screen_px(cam, m_plane.to_world(dim_anchor(a))); + const std::array& vp = cam.get_viewport(); + if (lp.x >= vp[0] && lp.y >= vp[1] && lp.x <= vp[0] + vp[2] && lp.y <= vp[1] + vp[3]) + px = lp; + on_inline_edit(px, a.value, dimtype_title(a.kind), + [this](double v) { set_dimension_value(v); }, + [this]() { cancel_dimension_value(); }); +} + +// In-canvas editor for a line's angle-to-horizontal. Unlike length/radius, a single +// line's angle has no libslvs constraint here (SLVS_C_ANGLE is line-to-line), so the +// commit rotates the segment GEOMETRICALLY about P0 to the typed degrees, then re-solves +// — the angle is a free DoF, so the solver keeps the new orientation (mirrors the radius +// handle). Length-constrained lines keep their length. +void DesignSketchTool::open_angle_editor(int ei) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + if (m_entities[ei].type != SketchEntity::Type::Line) return; + if (!on_inline_edit) return; + DimAnnot a; a.kind = DimType::Angle; a.ea = ei; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, measure_dim(a), "Angle", + [this, ei](double deg) { set_line_angle(ei, deg); }, + []() {}); +} + +// Type the defining number of whatever is selected. One entry point for every 2D element, so +// the gesture is the same whichever tool drew it: point at it, right-click, type the value. +// +// This is what a sketch element was missing. Its endpoints could be dragged and its handles +// grabbed, but its own quantities — a line's LENGTH, an arc's RADIUS, a circle's DIAMETER, the +// ANGLE between two lines — were reachable only by arming the Dimension tool and re-picking the +// geometry that was already selected. The machinery was all here (dimension_kind / dimension_ +// current / apply_dimension); the way in was not. +bool DesignSketchTool::open_selection_dimension_editor() +{ + if (!on_inline_edit || !selection_valid()) return false; + const DimType k = dimension_kind(); + if (k == DimType::None) return false; + const char* title = "Value"; + switch (k) { + case DimType::Length: title = "Length"; break; + case DimType::Radius: title = "Radius"; break; + case DimType::Diameter: title = "Diameter"; break; + case DimType::Angle: title = "Angle"; break; + case DimType::Distance: title = "Distance"; break; + case DimType::DistanceToLine: title = "Distance"; break; + default: break; + } + // Anchor over the geometry it belongs to, not the panel: the value belongs to the element. + DimAnnot a; a.kind = k; + a.ea = m_selection.empty() ? -1 : m_selection[0]; + if (m_selection.size() > 1) a.eb = m_selection[1]; + const Vec2d at = dim_anchor(a); + const Camera& cam = wxGetApp().plater()->get_camera(); + wxPoint px = world_to_screen_px(cam, m_plane.to_world(at)); + if (px.x < 0 || px.y < 0) px = wxPoint(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, dimension_current(), title, + [this](double v) { apply_dimension(v); }, + []() {}); + return true; +} + +void DesignSketchTool::set_line_angle(int ei, double deg) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Line) return; + const double L = (e.p1 - e.p0).norm(); + if (L < 1e-9) return; + drop_orientation_constraints(ei, ei + 1); // a typed angle overrides an inferred H/V + const double r = deg * M_PI / 180.0; + e.p1 = e.p0 + Vec2d(std::cos(r), std::sin(r)) * L; // rotate about P0, keep length + resolve_live(); +} + +// Open the queued scalar quote at m_autoedit_dim_idx. Commit appends the driving dimension +// AND advances to the next queued quote (deferred via CallAfter so the single SketchInlineEditor +// fully unwinds its Enter handler before being reopened). Cancel (Esc) aborts the whole chain — +// the shape is kept as drawn. This is what lets a rectangle edit Width THEN Height, a slot its +// centre-distance THEN width, etc., instead of only the first dimension. +void DesignSketchTool::open_next_autoedit_dim() +{ + if (!on_inline_edit || !m_active) { m_autoedit_dim_idx = -1; return; } + if (m_autoedit_dim_idx < 0 || m_autoedit_dim_idx >= int(m_autoedit_dims.size())) { + m_autoedit_dim_idx = -1; + return; + } + const AutoEditStep step = m_autoedit_dims[m_autoedit_dim_idx]; + // Anchor the field OVER this dimension's label (project its plane-coords centre to the + // viewport), not at the last cursor spot — otherwise each field pops up in an unrelated + // screen position. Fall back to the cursor if the label projects off-screen. + // Anchor the field OVER this dimension's label (project its plane-coords centre to the + // viewport). A label can project OFF-screen (near-degenerate perspective divide when the + // sketch plane is viewed at a grazing angle), in which case we fall back to the cursor — + // but staggered by step index, so a shape's successive fields (rrect W/H/R) don't all + // stack on the exact same pixel and hide each other. + const Camera& cam = wxGetApp().plater()->get_camera(); + const wxPoint lp = world_to_screen_px(cam, m_plane.to_world(step.label)); + const std::array& vp = cam.get_viewport(); + wxPoint px(m_last_mouse_x, m_last_mouse_y + m_autoedit_dim_idx * 34); + if (lp.x >= vp[0] && lp.y >= vp[1] && lp.x <= vp[0] + vp[2] && lp.y <= vp[1] + vp[3]) + px = lp; + on_inline_edit(px, step.value, step.title, + [this, step](double v) { // commit: apply this dimension, then next + if (step.apply) step.apply(v); + ++m_autoedit_dim_idx; + wxGetApp().CallAfter([this] { open_next_autoedit_dim(); }); + }, + [this]() { m_autoedit_dim_idx = -1; }); // cancel: keep as drawn, stop the chain +} + +// Polyline draw-then-edit: after each click places a chain vertex, refine THAT segment's +// Length then Angle through the same AutoEditStep queue. The polyline batch-creates its +// entities only when the chain ends, so here we edit the pending m_points vertex directly +// (geometric): Length rescales it along the segment, Angle rotates it about the previous +// vertex. The next click continues from the adjusted vertex. Same field/anchor/focus path as +// every other tool — Enter advances Length->Angle, Esc keeps the segment as clicked. +void DesignSketchTool::arm_polyline_segment_edit() +{ + const int k = int(m_points.size()) - 1; // index of the just-placed vertex + if (k < 1 || !on_inline_edit) return; + const Vec2d a = m_points[k - 1]; // segment anchor (previous vertex) + const Vec2d mid = 0.5 * (a + m_points[k]); // label anchor = segment midpoint + const Vec2d d = m_points[k] - a; + const double L = d.norm(); + if (L < 1e-9) return; + double deg = std::atan2(d.y(), d.x()) * 180.0 / M_PI; if (deg < 0.0) deg += 360.0; + + m_autoedit_dims.clear(); + m_autoedit_dims.push_back({ mid, L, [this, k, a](double len) { // Length + if (k < int(m_points.size())) { + Vec2d dd = m_points[k] - a; const double n = dd.norm(); + if (n > 1e-9 && len > 1e-9) m_points[k] = a + (len / n) * dd; + } + }, {}, "Length" }); + m_autoedit_dims.push_back({ mid, deg, [this, k, a](double dg) { // Angle + if (k < int(m_points.size())) { + const double len = (m_points[k] - a).norm(); + const double r = dg * M_PI / 180.0; + m_points[k] = a + len * Vec2d(std::cos(r), std::sin(r)); + } + }, {}, "Angle" }); + m_autoedit_dim_idx = 0; + wxGetApp().CallAfter([this] { open_next_autoedit_dim(); }); +} + +std::string DesignSketchTool::dimtype_title(DimType k) const { + switch (k) { + case DimType::Length: return "Length"; + case DimType::Diameter: return "Diameter"; + case DimType::Radius: return "Radius"; + case DimType::Angle: return "Angle"; + case DimType::Distance: return "Distance"; + case DimType::DistanceToLine: return "Distance"; + default: return "Value"; + } +} + +// Draw-then-edit dispatcher: mirror the Select-mode quote-click logic, but target the +// freshly-drawn selection's PRIMARY value and use the tentative (clean-cancel) path for +// scalar quotes. Runs after render_live_quotes, so the live-quote state is populated. +// Why a draw-then-edit chain did not start. Four early returns can swallow it, and from outside +// they are indistinguishable: the shape appears, no field opens, and nothing says which guard +// fired. check-gui-click-edit.py reports that as "a value field opened (nothing did)" for every +// tool at once, which reads like a total product failure and is not necessarily one. +static void trace_autoedit(const char* why, size_t n) +{ + if (!std::getenv("ORCA_CAD_UXTRACE")) return; + fprintf(stderr, "[UX] autoedit %s steps=%zu\n", why, n); + fflush(stderr); +} + +void DesignSketchTool::open_primary_autoedit() +{ + if (!on_inline_edit) { trace_autoedit("skip: no on_inline_edit host", 0); return; } + if (m_awaiting_length) { trace_autoedit("skip: a field is already open", 0); return; } + if (!m_active) { trace_autoedit("skip: session ended before the deferred tick", 0); return; } + + // Build ONE ordered list of edit steps covering EVERY characteristic dimension of the + // freshly-drawn shape — scalar quotes (constraint-based) AND geometric editors — so every + // 2D tool behaves like the rectangle: a linear sequence of value fields, each over its own + // label, Enter advances to the next, Esc keeps the shape as drawn. (Line keeps its own + // dedicated length field; Polyline/BSpline/Point have no two-click dimension set.) + m_autoedit_dims.clear(); + + // (1) Scalar quotes: rect Width+Height, slot Distance+Radius, circle/arc Radius, line + // Length. The lone Angle quote (only a single Line emits one) becomes a GEOMETRIC + // orientation step (set_line_angle, like the polygon angle) — so the Line tool gets + // Length THEN Angle, same as the rectangle gets W then H. + for (const DimAnnot& q : m_live_quotes) { + if (q.kind == DimType::Angle) { + const int ei = q.ea; + m_autoedit_dims.push_back({ q.label_pos, measure_dim(q), + [this, ei](double v) { set_line_angle(ei, v); }, { ei }, "Angle" }); + continue; + } + DimAnnot a = q; + a.value = measure_dim(a); + m_autoedit_dims.push_back({ a.label_pos, a.value, + [this, a](double v) mutable { + a.value = v; + a.con = upsert_constraint(constraint_for(a)); + upsert_dimension(a); + resolve_live(); + }, { a.ea, a.eb }, dimtype_title(a.kind) }); + } + + // (2) Geometric editors (mutate geometry directly, no constraint). Each reads the CURRENT + // feature/entity state inside apply(), so sequential edits compose correctly. + // Entities to highlight = the feature's whole [begin,end) span, so editing any of its + // characteristic dims lights up the shape it drives. + auto span = [this](int fi) { + std::vector v; + if (fi >= 0 && fi < int(m_features.size())) + for (int k = m_features[fi].begin; k < m_features[fi].end; ++k) v.push_back(k); + return v; + }; + if (m_live_poly_fi >= 0) { + const Feature& f = m_features[m_live_poly_fi]; + const int fi = m_live_poly_fi; + if (f.begin >= 0 && f.begin < int(m_entities.size())) { + const double side = (m_entities[f.begin].p1 - m_entities[f.begin].p0).norm(); + const Vec2d sp = m_entities[f.begin].p0 - f.c0; + double deg = std::atan2(sp.y(), sp.x()) * 180.0 / M_PI; if (deg < 0.0) deg += 360.0; + m_autoedit_dims.push_back({ m_live_poly_side_label, side, [this, fi](double v){ set_polygon_side(fi, v); }, span(fi), "Side" }); + m_autoedit_dims.push_back({ m_live_poly_angle_label, deg, [this, fi](double v){ set_polygon_angle(fi, v); }, span(fi), "Angle" }); + } + } + if (m_live_rrect_fi >= 0) { + const Feature& f = m_features[m_live_rrect_fi]; + const int fi = m_live_rrect_fi; + const double w = std::abs(f.c1.x() - f.c0.x()), h = std::abs(f.c1.y() - f.c0.y()), r = f.param; + auto rr_w = [this, fi](double v){ const Feature& g = m_features[fi]; set_rounded_rect(fi, v, std::abs(g.c1.y()-g.c0.y()), g.param); }; + auto rr_h = [this, fi](double v){ const Feature& g = m_features[fi]; set_rounded_rect(fi, std::abs(g.c1.x()-g.c0.x()), v, g.param); }; + auto rr_r = [this, fi](double v){ const Feature& g = m_features[fi]; set_rounded_rect(fi, std::abs(g.c1.x()-g.c0.x()), std::abs(g.c1.y()-g.c0.y()), v); }; + m_autoedit_dims.push_back({ m_live_rrect_w_label, w, rr_w, span(fi), "Width" }); + m_autoedit_dims.push_back({ m_live_rrect_h_label, h, rr_h, span(fi), "Height" }); + m_autoedit_dims.push_back({ m_live_rrect_r_label, r, rr_r, span(fi), "Radius" }); + } + if (m_live_aslot_fi >= 0) { + const Feature& f = m_features[m_live_aslot_fi]; + const int fi = m_live_aslot_fi; + const double Rc = (f.c1 - f.c0).norm(), fw = 2.0 * f.param; + m_autoedit_dims.push_back({ m_live_aslot_r_label, Rc, [this, fi](double v){ const Feature& g = m_features[fi]; set_arc_slot(fi, v, g.param); }, span(fi), "Radius" }); + m_autoedit_dims.push_back({ m_live_aslot_w_label, fw, [this, fi](double v){ const Feature& g = m_features[fi]; set_arc_slot(fi, (g.c1-g.c0).norm(), std::max(1e-3, v*0.5)); }, span(fi), "Width" }); + } + if (m_live_slot_fi >= 0) { + const Feature& f = m_features[m_live_slot_fi]; + const int fi = m_live_slot_fi; + // Slot dims, in order: (1) inter-centre distance, (2) radius (= half-width), (3) angle. + const Vec2d d = f.c1 - f.c0; + const double Lc = d.norm(); + double deg = std::atan2(d.y(), d.x()) * 180.0 / M_PI; if (deg < 0.0) deg += 360.0; + m_autoedit_dims.push_back({ m_live_slot_len_label, Lc, [this, fi](double v){ const Feature& g = m_features[fi]; set_slot(fi, v, g.param); }, span(fi), "Length" }); + m_autoedit_dims.push_back({ m_live_slot_w_label, f.param, [this, fi](double v){ const Feature& g = m_features[fi]; set_slot(fi, (g.c1-g.c0).norm(), std::max(1e-3, v)); }, span(fi), "Radius" }); + m_autoedit_dims.push_back({ m_live_slot_angle_label, deg, [this, fi](double v){ set_slot_angle(fi, v); }, span(fi), "Angle" }); + } + if (m_live_arc_ei >= 0) { // arc Radius is already a scalar step above; add its sweep angle + const int ei = m_live_arc_ei; + const SketchEntity& e = m_entities[ei]; + const double swdeg = std::abs(e.end_angle - e.start_angle) * 180.0 / M_PI; + m_autoedit_dims.push_back({ m_live_arc_angle_label, swdeg, [this, ei](double v){ set_arc_sweep(ei, v); }, { ei }, "Angle" }); + } + if (m_live_ellipse_ei >= 0) { + const int ei = m_live_ellipse_ei; + const SketchEntity& e = m_entities[ei]; + m_autoedit_dims.push_back({ m_live_ellipse_major_label, e.radius, [this, ei](double v){ set_ellipse_axis(ei, true, v); }, { ei }, "Major" }); + m_autoedit_dims.push_back({ m_live_ellipse_minor_label, e.rminor, [this, ei](double v){ set_ellipse_axis(ei, false, v); }, { ei }, "Minor" }); + if (e.type == SketchEntity::Type::EllipseArc) { // + included sweep + const double swdeg = std::abs(e.end_angle - e.start_angle) * 180.0 / M_PI; + m_autoedit_dims.push_back({ m_live_ellipsearc_sweep_label, swdeg, + [this, ei](double v){ set_ellipsearc_sweep(ei, v); }, { ei }, "Angle" }); + } + } + if (m_live_obrect_fi >= 0) { // oblique rect: W,H already added as scalars; + orientation + const int fi = m_live_obrect_fi; + const Feature& f = m_features[fi]; + const SketchEntity& e0 = m_entities[f.begin]; + double adeg = std::atan2(e0.p1.y() - e0.p0.y(), e0.p1.x() - e0.p0.x()) * 180.0 / M_PI; + if (adeg < 0.0) adeg += 360.0; + m_autoedit_dims.push_back({ m_live_obrect_angle_label, adeg, + [this, fi](double v){ set_rect_angle(fi, v); }, span(fi), "Angle" }); + } + + trace_autoedit(m_autoedit_dims.empty() ? "built NO steps (no live quote matched)" : "opening", + m_autoedit_dims.size()); + if (!m_autoedit_dims.empty()) { + m_autoedit_dim_idx = 0; + open_next_autoedit_dim(); + } +} + +// A regular polygon is N raw lines with no centre entity, so (like the line angle) its +// side and orientation edits transform the whole loop GEOMETRICALLY about its centre. +void DesignSketchTool::open_polygon_side_editor(int fi) +{ + if (fi < 0 || fi >= int(m_features.size()) || !on_inline_edit) return; + const Feature& f = m_features[fi]; + if (f.begin < 0 || f.begin >= int(m_entities.size())) return; + const double side = (m_entities[f.begin].p1 - m_entities[f.begin].p0).norm(); + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, side, "Side", + [this, fi](double v) { set_polygon_side(fi, v); }, + []() {}); +} + +void DesignSketchTool::open_polygon_angle_editor(int fi) +{ + if (fi < 0 || fi >= int(m_features.size()) || !on_inline_edit) return; + const Feature& f = m_features[fi]; + if (f.begin < 0 || f.begin >= int(m_entities.size())) return; + const Vec2d sp = m_entities[f.begin].p0 - f.c0; // centre -> vertex0 spoke + double deg = std::atan2(sp.y(), sp.x()) * 180.0 / M_PI; + if (deg < 0.0) deg += 360.0; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, deg, "Angle", + [this, fi](double v) { set_polygon_angle(fi, v); }, + []() {}); +} + +// Scale the loop uniformly about its centre so an edge equals `side`. For a regular +// n-gon, circumradius R = side / (2 sin(pi/n)). +void DesignSketchTool::set_polygon_side(int fi, double side) +{ + if (fi < 0 || fi >= int(m_features.size()) || side < 1e-6) return; + const int n = std::max(3, m_features[fi].sides); + const double R = side / (2.0 * std::sin(M_PI / double(n))); + set_polygon_radius(fi, R); +} + +// Remove orientation constraints touching [begin,end). A pure rotation makes inferred +// per-edge Horizontal/Vertical (and Parallel/Perp/Angle/Lock) inconsistent, so leaving +// them in would make resolve_live collapse the shape to satisfy them. +void DesignSketchTool::drop_orientation_constraints(int begin, int end) +{ + using CT = SketchConstraintType; + auto orient = [](CT t) { + return t == CT::Horizontal || t == CT::Vertical || t == CT::Parallel || + t == CT::Perpendicular || t == CT::Angle || t == CT::LockX || t == CT::LockY; + }; + auto in = [&](int e) { return e >= begin && e < end; }; + std::vector remap(m_constraints.size(), -1); + std::vector kept; + kept.reserve(m_constraints.size()); + for (int i = 0; i < int(m_constraints.size()); ++i) { + const SketchEntityConstraintDef& c = m_constraints[i]; + if (orient(c.type) && (in(c.ea) || in(c.eb))) continue; // drop + remap[i] = int(kept.size()); + kept.push_back(c); + } + if (kept.size() == m_constraints.size()) return; // nothing dropped + m_constraints.swap(kept); + for (DimAnnot& a : m_dimensions) // fix cached con indices + if (a.con >= 0) a.con = (a.con < int(remap.size())) ? remap[a.con] : -1; +} + +void DesignSketchTool::drop_constraints_referencing(int ei) +{ + std::vector remap(m_constraints.size(), -1); + std::vector kept; + kept.reserve(m_constraints.size()); + for (int i = 0; i < int(m_constraints.size()); ++i) { + const SketchEntityConstraintDef& c = m_constraints[i]; + if (c.ea == ei || c.eb == ei || c.ec == ei) continue; // drop refs to the cut entity + remap[i] = int(kept.size()); + kept.push_back(c); + } + if (kept.size() == m_constraints.size()) return; + m_constraints.swap(kept); + for (DimAnnot& a : m_dimensions) + if (a.con >= 0) a.con = (a.con < int(remap.size())) ? remap[a.con] : -1; +} + +// Onshape scissors on the live sketch: cut the picked entity at its nearest intersection. +// trim_entity/extend_entity mutate the subject in place (slide one endpoint) given the other +// entities + the pick point — no entity is added/removed, so indices stay stable. +bool DesignSketchTool::apply_live_trim(const Vec2d& p, double tol, bool extend) +{ + double best = 1e30; int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + if (bi < 0 || best > tol) return false; + using Ty = SketchEntity::Type; + const Ty st = m_entities[bi].type; + const bool subject_ok = extend ? (st == Ty::Line || st == Ty::Arc) + : (st == Ty::Line || st == Ty::Arc || st == Ty::Circle); + if (!subject_ok) return false; + std::vector others; + others.reserve(m_entities.size()); + for (size_t i = 0; i < m_entities.size(); ++i) + if (int(i) != bi) others.push_back(m_entities[i]); + const bool ok = extend ? SketchEngine::extend_entity(m_entities[bi], others, p) + : SketchEngine::trim_entity(m_entities[bi], others, p); + if (!ok) return false; + drop_constraints_referencing(bi); // the slid endpoint invalidates this entity's constraints + return true; +} + +// Hover preview for the Trim/Extend scissors: replay apply_live_trim's pick and the engine +// cut on a COPY of the subject, then diff the copy against the original to recover the exact +// sub-portion a click would remove (Trim) / add (Extend). Pure computation, mutates nothing. +bool DesignSketchTool::compute_trim_preview(const Vec2d& p, double tol, bool extend, + int& subject_ei, std::vector& removed_poly) const +{ + subject_ei = -1; + removed_poly.clear(); + + double best = 1e30; int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + if (bi < 0 || best > tol) return false; + + using Ty = SketchEntity::Type; + const Ty st = m_entities[bi].type; + const bool subject_ok = extend ? (st == Ty::Line || st == Ty::Arc) + : (st == Ty::Line || st == Ty::Arc || st == Ty::Circle); + if (!subject_ok) return false; + + std::vector others; + others.reserve(m_entities.size()); + for (size_t i = 0; i < m_entities.size(); ++i) + if (int(i) != bi) others.push_back(m_entities[i]); + + const SketchEntity& orig = m_entities[bi]; + SketchEntity trimmed = orig; // cut on the copy, never the live entity + const bool ok = extend ? SketchEngine::extend_entity(trimmed, others, p) + : SketchEngine::trim_entity(trimmed, others, p); + if (!ok) return false; + + // The highlighted portion is where `trimmed` differs from `orig`: the dropped sub-segment + // (Trim) or the grown one (Extend). Rebuild it as a temp entity and sample its polyline. + const double EPS2 = 1e-14; // squared plane-unit endpoint tolerance + const double AEPS = 1e-7; // radian tolerance + bool closed = false; + + if (orig.type == Ty::Line) { + SketchEntity seg = orig; + if ((trimmed.p0 - orig.p0).squaredNorm() > EPS2) { + seg.p0 = orig.p0; seg.p1 = trimmed.p0; // start endpoint moved + } else if ((trimmed.p1 - orig.p1).squaredNorm() > EPS2) { + seg.p0 = trimmed.p1; seg.p1 = orig.p1; // end endpoint moved + } else { + return false; // nothing changed + } + removed_poly = entity_polyline(seg, closed); + } else if (orig.type == Ty::Arc) { + SketchEntity arc = orig; // same centre/radius + if (std::abs(trimmed.start_angle - orig.start_angle) > AEPS) { + arc.start_angle = orig.start_angle; arc.end_angle = trimmed.start_angle; + } else if (std::abs(trimmed.end_angle - orig.end_angle) > AEPS) { + arc.start_angle = trimmed.end_angle; arc.end_angle = orig.end_angle; + } else { + return false; + } + removed_poly = entity_polyline(arc, closed); + } else if (orig.type == Ty::Circle) { + // Trim opens the Circle into the kept Arc [start,end]; the removed gap is its + // complement, swept from the kept arc's end round to its start. + if (trimmed.type != Ty::Arc) return false; + SketchEntity gap = orig; + gap.type = Ty::Arc; + gap.start_angle = trimmed.end_angle; + gap.end_angle = trimmed.start_angle + 2.0 * M_PI; + removed_poly = entity_polyline(gap, closed); + } else { + return false; + } + + if (removed_poly.size() < 2) return false; + subject_ei = bi; + return true; +} + +// Rotate the whole loop about its centre so the centre->vertex0 spoke points at `deg` +// (degrees from +X). +void DesignSketchTool::set_polygon_angle(int fi, double deg) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.begin >= int(m_entities.size())) return; + const Vec2d c = f.c0; + const Vec2d sp = m_entities[f.begin].p0 - c; // centre -> vertex0 + if (sp.squaredNorm() < 1e-12) return; + const double cur = std::atan2(sp.y(), sp.x()); + const double da = deg * M_PI / 180.0 - cur; + drop_orientation_constraints(f.begin, f.end); // rotation invalidates edge H/V + const double ca = std::cos(da), sa = std::sin(da); + // -> Vec2d is REQUIRED: an auto return deduces an Eigen expression template that holds + // a reference to the destroyed `c + Vec2d(...)` temporary (dangling -> garbage coords). + auto rot = [&](const Vec2d& pt) -> Vec2d { const Vec2d r = pt - c; + return c + Vec2d(r.x() * ca - r.y() * sa, r.x() * sa + r.y() * ca); }; + for (int i = f.begin; i < f.end && i < int(m_entities.size()); ++i) { + SketchEntity& e = m_entities[i]; + if (e.type != SketchEntity::Type::Line) continue; + e.p0 = rot(e.p0); e.p1 = rot(e.p1); + } + // Do NOT re-solve: the rotated geometry is already a correct regular polygon, and the + // inferred loop (redundant Coincident, now with no H/V anchor) collapses to a point + // under libslvs. We only drop the stale edge H/V (above) so a later commit-solve stays + // sane; the display renders the mutated entities directly. +} + +// Drag a polygon vertex keeping the loop regular: scale + rotate the whole polygon +// about its centroid so the grabbed vertex lands on `target`. This adjusts both the +// circumradius (|target-centroid|) and the orientation (its direction) at once. +void DesignSketchTool::drag_polygon_vertex(int fi, int ei, SketchPointRole role, const Vec2d& target) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size())) return; + // Centroid of the loop = the regular polygon's centre (robust if it was moved). + Vec2d c(0, 0); int n = 0; + for (int i = f.begin; i < f.end; ++i) + if (m_entities[i].type == SketchEntity::Type::Line) { c += m_entities[i].p0; ++n; } + if (n == 0) return; + c /= double(n); + Vec2d vpos; + if (!point_at(ei, role, vpos)) return; + const Vec2d cur = vpos - c; // current grabbed-vertex spoke + const Vec2d tgt = target - c; // desired spoke + const double curR = cur.norm(), newR = tgt.norm(); + if (curR < 1e-9 || newR < 1e-6) return; + const double s = newR / curR; + const double da = std::atan2(tgt.y(), tgt.x()) - std::atan2(cur.y(), cur.x()); + const double ca = std::cos(da), sa = std::sin(da); + auto tf = [&](const Vec2d& p) -> Vec2d { const Vec2d r = (p - c) * s; // -> Vec2d: avoid + return c + Vec2d(r.x() * ca - r.y() * sa, r.x() * sa + r.y() * ca); }; // Eigen dangling + + for (int i = f.begin; i < f.end; ++i) { + SketchEntity& e = m_entities[i]; + if (e.type != SketchEntity::Type::Line) continue; + e.p0 = tf(e.p0); e.p1 = tf(e.p1); + } + f.c0 = c; f.param = newR; + drop_orientation_constraints(f.begin, f.end); // the drag rotates -> edge H/V invalid + // No re-solve (see set_polygon_angle): the transformed geometry is already a correct + // regular polygon; solving the anchorless redundant loop would collapse it. +} + +void DesignSketchTool::set_polygon_radius(int fi, double R) +{ + if (fi < 0 || fi >= int(m_features.size()) || R < 1e-6) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.begin >= int(m_entities.size())) return; + const Vec2d c = f.c0; + const double curR = (m_entities[f.begin].p0 - c).norm(); + if (curR < 1e-9) return; + const double s = R / curR; // uniform scale about the centre + for (int i = f.begin; i < f.end && i < int(m_entities.size()); ++i) { + SketchEntity& e = m_entities[i]; + if (e.type != SketchEntity::Type::Line) continue; + e.p0 = c + (e.p0 - c) * s; + e.p1 = c + (e.p1 - c) * s; + } + f.param = R; + // Geometric only (no solve): consistent with the rotation edits, and avoids collapsing + // the loop if its H/V anchors were already dropped by a prior rotation. +} + +void DesignSketchTool::open_arc_angle_editor(int ei) +{ + if (ei < 0 || ei >= int(m_entities.size()) || !on_inline_edit) return; + const SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Arc) return; + double swdeg = std::abs(e.end_angle - e.start_angle) * 180.0 / M_PI; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, swdeg, "Angle", + [this, ei](double v) { set_arc_sweep(ei, v); }, + []() {}); +} + +// Set the arc's included (sweep) angle to `deg`, keeping the start point and radius fixed +// and rotating the end point about the centre. Geometric (SLVS angle is line-to-line), so +// no re-solve; the mutated entity renders directly. Direction (CCW/CW) of the original +// sweep is preserved. +void DesignSketchTool::set_arc_sweep(int ei, double deg) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Arc || e.radius < 1e-6) return; + double sweep = std::max(1e-3, std::min(deg, 359.999)) * M_PI / 180.0; + const double sign = (e.end_angle >= e.start_angle) ? 1.0 : -1.0; + e.end_angle = e.start_angle + sign * sweep; + e.p1 = e.center + e.radius * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle)); + resolve_live(); +} + +// Drag one of the arc's three handles. Roles are split so each grip changes ONE property +// (Onshape-like): Center -> translate; START point (P0) -> radius only; END point (P1) -> +// sweep angle only. Geometric (mutates the entity directly), then re-solve for any +// coincident constraints on the arc endpoints. +void DesignSketchTool::drag_arc_handle(int ei, SketchPointRole role, const Vec2d& target) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Arc) return; + if (role == SketchPointRole::Center) { + const Vec2d d = target - e.center; // rigid translate, keep R + angles + e.center = target; e.p0 += d; e.p1 += d; + } else if (role == SketchPointRole::P0) { // start = RADIUS handle (keep angles) + const double R = (target - e.center).norm(); + if (R < 1e-6) return; + e.radius = R; + e.p0 = e.center + R * Vec2d(std::cos(e.start_angle), std::sin(e.start_angle)); + e.p1 = e.center + R * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle)); + } else if (role == SketchPointRole::P1) { // end = ANGLE handle (keep radius) + const Vec2d d = target - e.center; + if (d.squaredNorm() < 1e-12) return; + // Keep the CCW sweep continuous (0,2pi) so the arc never flips to its complement. + double da = std::atan2(d.y(), d.x()) - e.start_angle; + while (da < 0.0) da += 2.0 * M_PI; + while (da >= 2.0 * M_PI) da -= 2.0 * M_PI; + e.end_angle = e.start_angle + da; + e.p1 = e.center + e.radius * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle)); + } + resolve_live(); +} + +// Drag an elliptical-arc grip. Center rigidly translates (endpoints + frame move with it); +// P0/P1 set the sweep start/end to the cursor's parametric angle on the ellipse, keeping +// the ellipse shape (a/b/phi). Geometric, then resolve_live(). +void DesignSketchTool::drag_ellipsearc_handle(int ei, SketchPointRole role, const Vec2d& target) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::EllipseArc) return; + if (role == SketchPointRole::Center) { + const Vec2d d = target - e.center; + e.center = target; e.p0 += d; e.p1 += d; + } else if (role == SketchPointRole::P0 || role == SketchPointRole::P1) { + const double t = ellipse_param_of(e.center, e.radius, e.rminor, e.rotation, target); + if (role == SketchPointRole::P0) { + e.start_angle = t; + e.p0 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, t); + } else { + // Keep the CCW sweep (end strictly after start) so the arc never inverts. + double t1 = t; while (t1 <= e.start_angle) t1 += 2.0 * M_PI; + e.end_angle = t1; + e.p1 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, t1); + } + } + resolve_live(); +} + +void DesignSketchTool::open_ellipse_axis_editor(int ei, bool major) +{ + if (ei < 0 || ei >= int(m_entities.size()) || !on_inline_edit) return; + const SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Ellipse && e.type != SketchEntity::Type::EllipseArc) return; + const double v = major ? e.radius : e.rminor; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, v, major ? "Major" : "Minor", + [this, ei, major](double nv) { set_ellipse_axis(ei, major, nv); }, + []() {}); +} + +// Set a semi-axis to `v`: major -> e.radius, minor -> e.rminor; keep OCCT a >= b. +void DesignSketchTool::set_ellipse_axis(int ei, bool major, double v) +{ + if (ei < 0 || ei >= int(m_entities.size()) || v < 1e-6) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Ellipse && e.type != SketchEntity::Type::EllipseArc) return; + if (major) e.radius = std::max(v, e.rminor); + else e.rminor = std::min(v, e.radius); + if (e.type == SketchEntity::Type::EllipseArc) { // endpoints ride the reshaped frame + e.p0 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.start_angle); + e.p1 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.end_angle); + } + resolve_live(); +} + +// Set an elliptical arc's included (parametric) sweep, keeping the start fixed and moving the +// end. Geometric (mirrors set_arc_sweep), then resolve_live for any endpoint coincidences. +void DesignSketchTool::set_ellipsearc_sweep(int ei, double deg) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::EllipseArc) return; + const double sweep = std::max(1e-3, std::min(deg, 359.999)) * M_PI / 180.0; + const double sign = (e.end_angle >= e.start_angle) ? 1.0 : -1.0; + e.end_angle = e.start_angle + sign * sweep; + e.p1 = ellipse_point(e.center, e.radius, e.rminor, e.rotation, e.end_angle); + resolve_live(); +} + +// Rotate an oblique rectangle to an absolute orientation (angle of edge0 to +X), pivoting on +// its anchor corner f.c0. Geometric, mirrors set_polygon_angle: drop the now-inconsistent edge +// H/V first, rotate every member point + the opposite corner, and DON'T re-solve (the rotated +// loop is already consistent; a length Distance the user may have set is rotation-invariant). +void DesignSketchTool::set_rect_angle(int fi, double deg) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size()) || f.end <= f.begin) return; + const SketchEntity& e0 = m_entities[f.begin]; + const Vec2d d0 = e0.p1 - e0.p0; + if (d0.squaredNorm() < 1e-12) return; + const double da = deg * M_PI / 180.0 - std::atan2(d0.y(), d0.x()); + drop_orientation_constraints(f.begin, f.end); + const Vec2d pivot = f.c0; + const double ca = std::cos(da), sa = std::sin(da); + // -> Vec2d REQUIRED (see set_polygon_angle): an auto return deduces an Eigen expression + // template referencing the destroyed temporary -> dangling. + auto rot = [&](const Vec2d& pt) -> Vec2d { const Vec2d r = pt - pivot; + return pivot + Vec2d(r.x() * ca - r.y() * sa, r.x() * sa + r.y() * ca); }; + for (int i = f.begin; i < f.end && i < int(m_entities.size()); ++i) { + SketchEntity& e = m_entities[i]; + e.p0 = rot(e.p0); e.p1 = rot(e.p1); + } + f.c1 = rot(f.c1); // keep the opposite corner consistent for later W/H quotes +} + +// Screen anchor for a Constrain-mode value field: over the picked geometry (its representative +// point — circle/arc centre, else segment midpoint; averaged when two entities are picked), +// projected to the viewport. Lets a dimensional constraint's field open ON the geometry like +// the draw-then-edit tools, instead of floating at viewport centre. False if no valid pick or +// it projects off-screen (caller falls back to centre). +bool DesignSketchTool::constrain_value_anchor(wxPoint& out) const +{ + if (m_pick0 < 0 || m_pick0 >= int(m_entities.size())) return false; + auto rep = [](const SketchEntity& e) -> Vec2d { + using T = SketchEntity::Type; + if (e.type == T::Circle || e.type == T::Arc || + e.type == T::Ellipse || e.type == T::EllipseArc) return e.center; + return 0.5 * (e.p0 + e.p1); + }; + Vec2d p = rep(m_entities[m_pick0]); + if (m_pick1 >= 0 && m_pick1 < int(m_entities.size())) + p = 0.5 * (p + rep(m_entities[m_pick1])); + const Camera& cam = wxGetApp().plater()->get_camera(); + const wxPoint sp = world_to_screen_px(cam, m_plane.to_world(p)); + const std::array& vp = cam.get_viewport(); + if (sp.x < vp[0] || sp.y < vp[1] || sp.x > vp[0] + vp[2] || sp.y > vp[1] + vp[3]) return false; + out = sp; + return true; +} + +void DesignSketchTool::open_rounded_rect_editor(int fi, int which) +{ + if (fi < 0 || fi >= int(m_features.size()) || !on_inline_edit) return; + const Feature& f = m_features[fi]; + const double w = std::abs(f.c1.x() - f.c0.x()); + const double h = std::abs(f.c1.y() - f.c0.y()); + const double r = f.param; + const double v = (which == 0) ? w : (which == 1) ? h : r; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, v, which == 0 ? "Width" : which == 1 ? "Height" : "Radius", + [this, fi, which](double nv) { + const Feature& g = m_features[fi]; + double gw = std::abs(g.c1.x() - g.c0.x()); + double gh = std::abs(g.c1.y() - g.c0.y()); + double gr = g.param; + if (which == 0) gw = nv; else if (which == 1) gh = nv; else gr = nv; + set_rounded_rect(fi, gw, gh, gr); + }, + []() {}); +} + +// Rebuild the rounded-rect's 8 entities in place for a new width/height/fillet radius, +// keeping the min corner (c0) fixed. Geometric (entity order/count preserved so constraint +// refs stay valid); fillet clamped to (0, min(w,h)/2]. +void DesignSketchTool::set_rounded_rect(int fi, double w, double h, double r) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size()) || f.end <= f.begin) return; + w = std::max(w, 1e-3); h = std::max(h, 1e-3); + r = std::max(1e-3, std::min(r, std::min(w, h) * 0.5 - 1e-4)); + const double xmin = std::min(f.c0.x(), f.c1.x()), ymin = std::min(f.c0.y(), f.c1.y()); + const double xmax = xmin + w, ymax = ymin + h; + std::vector rebuilt = rounded_rect_entities(xmin, ymin, xmax, ymax, r); + if (int(rebuilt.size()) != f.end - f.begin) return; // count must match to keep con refs + for (int i = 0; i < int(rebuilt.size()); ++i) { + rebuilt[i].construction = m_entities[f.begin + i].construction; // preserve flag + m_entities[f.begin + i] = rebuilt[i]; + } + f.c0 = Vec2d(xmin, ymin); f.c1 = Vec2d(xmax, ymax); f.param = r; + resolve_live(); +} + +void DesignSketchTool::open_arc_slot_editor(int fi, bool radius) +{ + if (fi < 0 || fi >= int(m_features.size()) || !on_inline_edit) return; + const Feature& f = m_features[fi]; + const double Rc = (f.c1 - f.c0).norm(); + const double v = radius ? Rc : (2.0 * f.param); // width quote shows the FULL width + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, v, radius ? "Radius" : "Width", + [this, fi, radius](double nv) { + const Feature& g = m_features[fi]; + const double gRc = (g.c1 - g.c0).norm(); + if (radius) set_arc_slot(fi, nv, g.param); + else set_arc_slot(fi, gRc, std::max(1e-3, nv * 0.5)); // full width -> half + }, + []() {}); +} + +// Rebuild the arc-slot's 4 arcs in place for a new centreline radius / half-width. Centre +// + the two centreline directions are kept (the end direction is recovered from the cap@E +// arc centre). Geometric; entity count preserved so constraint refs stay valid. +void DesignSketchTool::set_arc_slot(int fi, double Rc, double w) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size()) || f.end - f.begin != 4) return; + const Vec2d center = f.c0; + Vec2d dirS = f.c1 - center; + const Vec2d Ec = m_entities[f.begin + 1].center; // cap@E centre = centreline end + Vec2d dirE = Ec - center; + if (dirS.squaredNorm() < 1e-12 || dirE.squaredNorm() < 1e-12) return; + dirS.normalize(); dirE.normalize(); + Rc = std::max(Rc, 2e-3); + w = std::max(1e-3, std::min(w, Rc - 1e-3)); // make_arc_slot needs w < Rc + std::vector rebuilt = + make_arc_slot(center, center + Rc * dirS, center + Rc * dirE, w); + if (int(rebuilt.size()) != 4) return; + for (int i = 0; i < 4; ++i) { + rebuilt[i].construction = m_entities[f.begin + i].construction; + m_entities[f.begin + i] = rebuilt[i]; + } + f.c1 = center + Rc * dirS; f.param = w; + resolve_live(); +} + +// Open the inline editor for a straight slot's dimension: which 0 = inter-centre distance, +// 1 = radius (half-width), 2 = centreline angle. Drives set_slot / set_slot_angle geometrically. +void DesignSketchTool::open_slot_editor(int fi, int which) +{ + if (fi < 0 || fi >= int(m_features.size()) || !on_inline_edit) return; + const Feature& f = m_features[fi]; + const Vec2d d = f.c1 - f.c0; + double deg = std::atan2(d.y(), d.x()) * 180.0 / M_PI; if (deg < 0.0) deg += 360.0; + const double v = (which == 0) ? d.norm() : (which == 1) ? f.param : deg; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, v, which == 0 ? "Length" : which == 1 ? "Radius" : "Angle", + [this, fi, which](double nv) { + const Feature& g = m_features[fi]; + if (which == 0) set_slot(fi, nv, g.param); + else if (which == 1) set_slot(fi, (g.c1 - g.c0).norm(), std::max(1e-3, nv)); + else set_slot_angle(fi, nv); + }, + []() {}); +} + +// Rebuild the straight slot's 4 entities in place for a new centreline length / half-width. +// Centre c0 and the centreline direction are kept; only c1 (length) or param (width) change. +// Geometric; entity count preserved so constraint refs stay valid. +void DesignSketchTool::set_slot(int fi, double length, double w) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size()) || f.end - f.begin != 4) return; + Vec2d dir = f.c1 - f.c0; + if (dir.squaredNorm() < 1e-12) return; + dir.normalize(); + length = std::max(length, 2e-3); + w = std::max(1e-3, w); + const Vec2d c0 = f.c0, c1 = f.c0 + length * dir; + std::vector rebuilt = make_slot(c0, c1, w); + if (int(rebuilt.size()) != 4) return; + for (int i = 0; i < 4; ++i) { + rebuilt[i].construction = m_entities[f.begin + i].construction; + m_entities[f.begin + i] = rebuilt[i]; + } + f.c1 = c1; f.param = w; + resolve_live(); +} + +// Rotate a straight slot about c0 to a new centreline angle (degrees), keeping length + radius. +void DesignSketchTool::set_slot_angle(int fi, double deg) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.begin < 0 || f.end > int(m_entities.size()) || f.end - f.begin != 4) return; + const double L = (f.c1 - f.c0).norm(); + if (L < 1e-9) return; + const double a = deg * M_PI / 180.0; + const Vec2d c1 = f.c0 + L * Vec2d(std::cos(a), std::sin(a)); + std::vector rebuilt = make_slot(f.c0, c1, f.param); + if (int(rebuilt.size()) != 4) return; + for (int i = 0; i < 4; ++i) { + rebuilt[i].construction = m_entities[f.begin + i].construction; + m_entities[f.begin + i] = rebuilt[i]; + } + f.c1 = c1; + resolve_live(); +} + +// Resize an axis-aligned rectangle by dragging a corner: the diagonally-opposite corner +// (captured at grab as m_drag_rect_anchor) stays fixed; the box becomes [anchor, cursor]. +// Geometric rebuild in place (4 lines, same order) — edges stay axis-aligned so the +// inferred H/V + corner-coincident constraints remain satisfied (no re-solve needed). +void DesignSketchTool::drag_rect_corner(int fi, const Vec2d& cursor) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.end - f.begin != 4) return; + const Vec2d A = m_drag_rect_anchor, B = cursor; + if (std::abs(B.x() - A.x()) < 1e-4 || std::abs(B.y() - A.y()) < 1e-4) return; // degenerate + const Vec2d corners[4] = { A, Vec2d(B.x(), A.y()), B, Vec2d(A.x(), B.y()) }; + for (int i = 0; i < 4; ++i) { + SketchEntity e; e.type = SketchEntity::Type::Line; + e.p0 = corners[i]; e.p1 = corners[(i + 1) % 4]; + e.construction = m_entities[f.begin + i].construction; + m_entities[f.begin + i] = e; + } + f.c0 = A; f.c1 = B; +} + +// Move one end of a slot by dragging its cap centre (which cap captured at grab); the other +// centre + half-width are kept. Rebuilds the 4-entity span via make_slot. Geometric. +void DesignSketchTool::drag_slot_handle(int fi, const Vec2d& cursor) +{ + if (fi < 0 || fi >= int(m_features.size())) return; + Feature& f = m_features[fi]; + if (f.end - f.begin != 4) return; + const Vec2d c0 = m_drag_slot_c1 ? f.c0 : cursor; + const Vec2d c1 = m_drag_slot_c1 ? cursor : f.c1; + std::vector rebuilt = make_slot(c0, c1, f.param); + if (int(rebuilt.size()) != 4) return; + for (int i = 0; i < 4; ++i) { + rebuilt[i].construction = m_entities[f.begin + i].construction; + m_entities[f.begin + i] = rebuilt[i]; + } + f.c0 = c0; f.c1 = c1; +} + +DesignSketchTool::DimType DesignSketchTool::pending_dimension_type() const +{ + return (m_pending_dim >= 0 && m_pending_dim < int(m_dimensions.size())) + ? m_dimensions[m_pending_dim].kind : DimType::None; +} + +void DesignSketchTool::set_dimension_value(double v) +{ + if (m_pending_dim < 0 || m_pending_dim >= int(m_dimensions.size())) return; + DimAnnot& a = m_dimensions[m_pending_dim]; + a.value = v; + if (a.con >= 0 && a.con < int(m_constraints.size())) + m_constraints[a.con] = constraint_for(a); + resolve_live(); + m_pending_dim = -1; +} + +void DesignSketchTool::cancel_dimension_value() +{ + m_pending_dim = -1; // keep the placed dimension at its measured value +} + +std::string DesignSketchTool::dim_text(const DimAnnot& a) const +{ + char buf[32]; + const char* prefix = (a.kind == DimType::Diameter) ? "\xC3\x98" // 'Ø' + : (a.kind == DimType::Radius) ? "R" : ""; + const char* suffix = (a.kind == DimType::Angle) ? "\xC2\xB0" : ""; // '°' + std::snprintf(buf, sizeof(buf), "%s%.1f%s", prefix, a.value, suffix); + // Force the international (en) decimal point: wx sets LC_NUMERIC to the user + // locale at startup, so snprintf("%.1f") can emit a comma. Normalise it. + for (char& ch : buf) + if (ch == ',') ch = '.'; + std::string out(buf); + if (a.kind != DimType::Angle) { + const bool use_in = wxGetApp().app_config->get_bool("use_inches"); + out += use_in ? " in" : " mm"; + } + return out; +} + +void DesignSketchTool::apply_segment_length(double len) +{ + if (m_points.size() == 2 && len > 1e-9) { + const Vec2d d = m_points[1] - m_points[0]; + const double r = d.norm(); + if (r > 1e-9) + m_points[1] = m_points[0] + (len / r) * d; + } + keep_segment_as_drawn(); + // Driving length constraint on the just-committed Line entity. + if (len > 1e-9 && !m_entities.empty()) { + const int i = int(m_entities.size()) - 1; + if (m_entities[i].type == SketchEntity::Type::Line) { + SketchEntityConstraintDef c; + c.type = SketchConstraintType::Distance; + c.ea = i; c.ra = SketchPointRole::P0; + c.eb = i; c.rb = SketchPointRole::P1; + c.value = len; + m_constraints.push_back(c); + } + } + resolve_live(); // live-solve the in-session sketch +} + +void DesignSketchTool::keep_segment_as_drawn() +{ + if (m_points.size() == 2) { + const int base = int(m_entities.size()); + push_line(m_points[0], m_points[1]); // accrues into the session's entities + infer_auto_constraints(base); // auto Coincident at snapped ends + H/V + } + m_points.clear(); + m_has_cursor = false; + m_awaiting_length = false; +} + +void DesignSketchTool::finish() +{ + // A value field still open at commit time outlives the session — the editor is a top-level + // frame — and inline_busy stays set, so every later click is swallowed at on_mouse_impl's + // first branch and the viewport reads as dead. Dismiss it first (keep-as-drawn, the same + // contract as the polyline terminators) and drop any queued field with it. + close_session_chrome(); + if (op_ready()) confirm_op(); // apply a pending edit-op gizmo before committing + if (tf_ready()) confirm_transform(); // apply a pending transform gizmo before committing + auto cb = on_commit_entities; + std::vector ents = m_entities; + std::vector cons = m_constraints; + SketchPlane pl = m_plane; + m_active = false; + m_points.clear(); + m_entities.clear(); + m_constraints.clear(); + m_dimensions.clear(); + m_point_sel.clear(); + m_dim_has0 = false; + m_pending_dim = -1; + m_has_cursor = false; + m_features.clear(); + m_open_feature = -1; + if (cb) + cb(ents, cons, pl); +} + +void DesignSketchTool::begin_constrain(const SketchProfile& prof, const SketchPlane& plane) +{ + push_auto_close_pref(); + m_plane = plane; + m_mode = Mode::Constrain; + m_points = prof.points; + m_entities.clear(); + m_has_cursor = false; + m_sel_a = m_sel_b = -1; + m_constrain_entities = false; + m_pick0 = m_pick1 = m_pick2 = -1; + m_active = true; +} + +void DesignSketchTool::begin_constrain_entities(const std::vector& ents, + const SketchPlane& plane) +{ + push_auto_close_pref(); + m_plane = plane; + m_mode = Mode::Constrain; + m_constrain_entities = true; + m_points.clear(); + m_entities = ents; + m_has_cursor = false; + m_sel_a = m_sel_b = -1; + m_pick0 = m_pick1 = m_pick2 = -1; + m_active = true; +} + +bool DesignSketchTool::selected_segment(int& a, int& b) const +{ + if (m_sel_a < 0 || m_sel_b < 0) + return false; + a = m_sel_a; + b = m_sel_b; + return true; +} + +bool DesignSketchTool::screen_to_plane(GLCanvas3D& canvas, const wxMouseEvent& evt, Vec2d& out) const +{ + Point pos(evt.GetX(), evt.GetY()); + Linef3 r = canvas.mouse_ray(pos); + out = m_plane.project(r.a, r.vector()); + return true; +} + +// Closing the loop is THE outcome this tab exists for — a sketch that is not closed cannot be +// extruded — so it must be as easy and as visible as any other snap, and it must behave the +// same at every zoom. This used to be a bare `squaredNorm() < 4.0`, i.e. a fixed 2 mm bubble in +// plane units: a pixel hunt zoomed out, an over-eager magnet zoomed in, and invisible either +// way — nothing told the user their next click would close the loop rather than place another +// vertex. Now the chain's first point is a real snap target on the same 8 px screen tolerance +// as every endpoint snap: hovering it moves the cursor exactly onto it, which makes the rubber +// band draw the closing segment as a preview and lights the existing snap marker. The click +// then closes only because it was SNAPPED, never because it was merely nearby. +bool DesignSketchTool::snap_chain_start(GLCanvas3D& canvas, const wxMouseEvent& evt, Vec2d& p) const +{ + if (m_mode != Mode::Polyline || m_points.size() < 3) return false; + if ((p - m_points[0]).norm() > screen_tol(canvas, evt, p)) return false; + p = m_points[0]; + InferenceSnap s; + s.kind = InferenceSnap::Kind::Endpoint; // renders the same hint as any endpoint snap + s.point = m_points[0]; + const_cast(this)->m_cursor_snap = s; + return true; +} + +Vec2d DesignSketchTool::snap_dir(const Vec2d& anchor, const Vec2d& raw, bool& locked) const +{ + locked = false; + if (m_snap_off) return raw; + + const Vec2d d = raw - anchor; + const double r = d.norm(); + if (r < 1e-9) return raw; + + const double tol_deg = 5.0; // inference half-window + double ang = std::atan2(d.y(), d.x()) * 180.0 / M_PI; // (-180,180] + if (ang < 0.0) ang += 360.0; // [0,360) + + // Base angles within one quadrant, replicated every 90 deg up to 360. + static const double base[] = {0.0, 30.0, 45.0, 60.0}; + double best_cand = ang, best_diff = 1e30; + for (int q = 0; q < 4; ++q) { + for (double b : base) { + const double cand = b + 90.0 * q; + double diff = std::abs(ang - cand); + if (diff > 180.0) diff = 360.0 - diff; + if (diff < best_diff) { best_diff = diff; best_cand = cand; } + } + } + if (best_diff > tol_deg) return raw; + + locked = true; + const double rad = best_cand * M_PI / 180.0; + return anchor + r * Vec2d(std::cos(rad), std::sin(rad)); +} + +double DesignSketchTool::screen_tol(GLCanvas3D& canvas, const wxMouseEvent& evt, + const Vec2d& at, double px) const +{ + // Project a point `px` screen pixels away and measure the gap in plane units. + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + int(px), evt.GetY())); + const Vec2d p2 = m_plane.project(r2.a, r2.vector()); + return std::max(1e-3, (p2 - at).norm()); +} + +InferenceSnap DesignSketchTool::infer_at(GLCanvas3D& canvas, const wxMouseEvent& evt, + const Vec2d& raw) const +{ + if (evt.ShiftDown()) { InferenceSnap s; s.point = raw; return s; } // Shift suppresses + const double tol = screen_tol(canvas, evt, raw); + return infer_point_snap(m_entities, raw, tol); +} + +Vec2d DesignSketchTool::snap_vertex(GLCanvas3D& canvas, const wxMouseEvent& evt, + const Vec2d& raw, bool& snapped) const +{ + const InferenceSnap s = infer_at(canvas, evt, raw); + // Cache the target so render() can draw a snap hint; only endpoint/centre/origin + // count as a "vertex" snap for the callers that gate angle inference on it. + const_cast(this)->m_cursor_snap = s; + snapped = s.snapped(); // any hard snap moves the cursor + suppresses angle lock + return s.point; +} + +bool DesignSketchTool::has_coincident(int ea, SketchPointRole ra, int eb, SketchPointRole rb) const +{ + for (const auto& c : m_constraints) { + if (c.type != SketchConstraintType::Coincident) continue; + if ((c.ea == ea && c.ra == ra && c.eb == eb && c.rb == rb) || + (c.ea == eb && c.ra == rb && c.eb == ea && c.rb == ra)) + return true; + } + return false; +} + +bool DesignSketchTool::try_add_constraints(const std::vector& cands) +{ + if (cands.empty()) return true; + const size_t mark = m_constraints.size(); + for (const auto& c : cands) m_constraints.push_back(c); + if (solve_sketch_entities(m_entities, m_constraints)) { + if (on_constraints_changed) on_constraints_changed(); + return true; + } + m_constraints.resize(mark); // roll back the conflicting batch + // No re-solve to "restore": a failed solve no longer touches the geometry + // (SketchSolver.cpp only writes back on success), so m_entities still holds the + // prior solved state exactly. pl5. + return false; +} + +// Delete the constraint whose badge is under `p`. Removing a constraint can only FREE degrees +// of freedom, so the re-solve cannot fail for over-constraint -- but it is still run, because +// the geometry must relax back to what the remaining system allows. +bool DesignSketchTool::remove_constraint_near(const Vec2d& p) +{ + if (m_glyph_hits.empty() || m_glyph_r <= 0.0) return false; + int best = -1; + double best_d = m_glyph_r; + for (const GlyphHit& g : m_glyph_hits) { + const double d = (g.c - p).norm(); + if (d < best_d && g.con >= 0 && g.con < int(m_constraints.size())) { best_d = d; best = g.con; } + } + if (best < 0) return false; + return remove_constraint(best); +} + +bool DesignSketchTool::remove_constraint(int idx) +{ + if (idx < 0 || idx >= int(m_constraints.size())) return false; + m_constraints.erase(m_constraints.begin() + idx); + // resolve_live(), not a bare solve: it is the path that recomputes the DoF, clears the + // per-entity conflict flags and fires on_solve_state. Solving directly would relax the + // geometry while leaving the DoF readout and any red over-constrained tint stale — the + // readout would still describe the constraint that was just deleted. + resolve_live(); + m_glyph_hits.clear(); // stale until the next render rebuilds them + if (on_constraints_changed) on_constraints_changed(); + return true; +} + +void DesignSketchTool::infer_auto_constraints(int base, double ang_tol_rad, double weld_tol) +{ + const int n = int(m_entities.size()); + if (base < 0 || base >= n) return; + + // Endpoint roles an entity exposes for coincidence matching. + auto roles_of = [](const SketchEntity& e, SketchPointRole out[2]) -> int { + switch (e.type) { + case SketchEntity::Type::Line: out[0] = SketchPointRole::P0; out[1] = SketchPointRole::P1; return 2; + case SketchEntity::Type::Arc: out[0] = SketchPointRole::P0; out[1] = SketchPointRole::P1; return 2; + // EllipseArc was missing here while the otherwise identical roles_of in + // heal_coincidences (below) has it, so an ellipse arc's endpoints could be WELDED by the + // healer but never auto-inferred coincident at draw time -- the same gesture behaved + // differently depending on which path ran. Two copies of one rule is how that happens. + case SketchEntity::Type::EllipseArc: + out[0] = SketchPointRole::P0; out[1] = SketchPointRole::P1; return 2; + case SketchEntity::Type::BSpline:out[0] = SketchPointRole::P0; out[1] = SketchPointRole::P1; return 2; + case SketchEntity::Type::Point: out[0] = SketchPointRole::P0; return 1; + default: return 0; // circle: centre coincidence handled by Concentric, not here + } + }; + + // 1) Coincident between a new endpoint and any (co-located) endpoint of another + // entity. snap_vertex already drove the coordinates together; this records it + // so a re-solve keeps the loop closed. + std::vector coincs; + for (int i = base; i < n; ++i) { + SketchPointRole ir[2]; const int ni = roles_of(m_entities[i], ir); + for (int a = 0; a < ni; ++a) { + Vec2d pa; if (!point_at(i, ir[a], pa)) continue; + for (int j = 0; j < n; ++j) { + if (j == i) continue; + SketchPointRole jr[2]; const int nj = roles_of(m_entities[j], jr); + for (int b = 0; b < nj; ++b) { + if (j >= base && j < i) continue; // avoid duplicate (i,j)/(j,i) + Vec2d pb; if (!point_at(j, jr[b], pb)) continue; + if ((pa - pb).squaredNorm() > weld_tol * weld_tol) continue; + if (has_coincident(i, ir[a], j, jr[b])) continue; + SketchEntityConstraintDef c; + c.type = SketchConstraintType::Coincident; + c.ea = i; c.ra = ir[a]; c.eb = j; c.rb = jr[b]; + coincs.push_back(c); + } + } + } + } + try_add_constraints(coincs); // co-located points: consistent by construction + + // 2) Horizontal / Vertical on axis-aligned new line segments. Tried as ONE batch first and + // only then one at a time, which is the same outcome — a single conflict never drops the + // others — for one solve instead of n. That matters now that large sketches actually + // solve: a bulk add of 1200 axis-aligned segments used to be fast only because every + // solve failed instantly on the unknown limit, and once they started succeeding the + // per-constraint loop turned into 1200 solves and blew the MCP main-thread budget. + std::vector axes; + for (int i = base; i < n; ++i) { + if (m_entities[i].type != SketchEntity::Type::Line) continue; + auto ax = infer_axis_constraint(m_entities[i].p0, m_entities[i].p1, ang_tol_rad); + if (!ax) continue; + SketchEntityConstraintDef c; + c.type = *ax; + c.ea = i; c.ra = SketchPointRole::P0; + c.eb = i; c.rb = SketchPointRole::P1; + axes.push_back(c); + } + if (!try_add_constraints(axes)) + for (const auto& c : axes) try_add_constraints({ c }); + + // 3) Relational constraints on the new entities (parallel/perpendicular on connected + // lines, equal radius, tangent). Same batch-then-one-at-a-time fallback as above: + // try_add_constraints rolls a conflicting batch back, so a single rejected relation + // never costs the others. Every rule only pins a relation that is ALREADY true, so + // nothing the user drew is moved by this. + // A SCRIPTED ADD IS NOT A DRAWN GESTURE — the rule this function already states at its + // bulk call site, which passes zero tolerances for exactly that reason (8xg1). + // Relational inference must obey it too, and for a second reason beyond tolerance: + // EqualRadius couples entities that are geometrically far apart, so on a real drawing it + // merges independent connected components into one huge system and defeats the + // component partitioning that makes large sketches solvable at all (yww4). + // Measured 2026-08-31 on the corpus rung: geometry stayed correct (32/32 sheets clean) + // but seven of the largest sheets hit main-thread timeout — MPD681 among them, the very + // sheet named in the comment at the bulk call site. Exact-equality would not save it + // either: patterned holes in real drawings ARE exactly equal. + // So: relations only for batches the size of a human gesture. A polyline segment is 1, a + // rectangle 4, a polygon a dozen; a scripted or imported add is hundreds. + constexpr int kRelInferMaxBatch = 16; + std::vector rels; + if (n - base <= kRelInferMaxBatch) { + const double rel_len_tol = ang_tol_rad > 0.0 ? 0.01 : 0.0; // exact-only when the caller asked for exact + for (int i = base; i < n; ++i) { + auto r = infer_relations(m_entities, i, ang_tol_rad, rel_len_tol); + rels.insert(rels.end(), r.begin(), r.end()); + } + } + // NO one-at-a-time fallback here, unlike the two batches above. Relations are a + // convenience: nothing is incorrect without them. The fallback costs one SOLVE PER + // CONSTRAINT, which is what the warning on the axes batch is about, and paying it for + // optional constraints is how a bulk add pins the app at 100% CPU with the MCP socket + // unresponsive (measured 2026-08-31). If the batch conflicts, drop the batch. + if (!rels.empty()) try_add_constraints(rels); + + resolve_live(); +} + +static std::vector circle_polygon(const Vec2d& c, double r, int n = 48) +{ + std::vector v; v.reserve(n); + for (int i = 0; i < n; ++i) { + const double a = 2.0 * M_PI * double(i) / double(n); + v.push_back(Vec2d(c.x() + r * std::cos(a), c.y() + r * std::sin(a))); + } + return v; +} + +// Point on an ellipse at parametric angle theta: center + R(phi)*(a cos t, b sin t). +static Vec2d ellipse_point(const Vec2d& c, double a, double b, double phi, double t) +{ + const double cu = std::cos(phi), su = std::sin(phi); + const double x = a * std::cos(t), y = b * std::sin(t); + return Vec2d(c.x() + x * cu - y * su, c.y() + x * su + y * cu); +} + +// Tessellate an ellipse arc parametric range [t0,t1] into a polyline. +static std::vector ellipse_polyline(const Vec2d& c, double a, double b, double phi, + double t0, double t1, int n = 48) +{ + std::vector v; v.reserve(n + 1); + for (int i = 0; i <= n; ++i) + v.push_back(ellipse_point(c, a, b, phi, t0 + (t1 - t0) * double(i) / double(n))); + return v; +} + +// Clamped uniform B-spline (degree min(3, n-1)) through control poles. The knot +// construction mirrors SketchEngine::entities_to_wire's OCCT Geom_BSplineCurve so +// the previewed/extruded curve match. de Boor evaluation. +static int bspline_degree(int n) { return n >= 4 ? 3 : (n >= 2 ? n - 1 : 0); } + +static std::vector bspline_knots(int n, int p) +{ + std::vector U; // full knot vector, length n+p+1 + const int interior = n - p - 1; + for (int i = 0; i <= p; ++i) U.push_back(0.0); + for (int i = 1; i <= interior; ++i) U.push_back(double(i)); + const double last = double(interior + 1); + for (int i = 0; i <= p; ++i) U.push_back(last); + return U; +} + +static Vec2d bspline_eval(const std::vector& P, const std::vector& U, int p, double u) +{ + const int n = int(P.size()); + if (u <= U[p]) return P.front(); + if (u >= U[n]) return P.back(); // U[n] == domain max (clamped) + int k = p; + while (k < n - 1 && U[k + 1] <= u) ++k; // span: U[k] <= u < U[k+1] + std::vector d(p + 1); + for (int j = 0; j <= p; ++j) d[j] = P[j + k - p]; + for (int r = 1; r <= p; ++r) + for (int j = p; j >= r; --j) { + const double denom = U[j + 1 + k - r] - U[j + k - p]; + const double a = denom > 1e-12 ? (u - U[j + k - p]) / denom : 0.0; + d[j] = (1.0 - a) * d[j - 1] + a * d[j]; + } + return d[p]; +} + +static std::vector bspline_polyline(const std::vector& ctrl, int samples = 0) +{ + const int n = int(ctrl.size()); + if (n < 2) return ctrl; + const int p = bspline_degree(n); + const std::vector U = bspline_knots(n, p); + const double umax = double(n - p); + if (samples <= 0) samples = std::max(24, 14 * (n - 1)); + std::vector out; out.reserve(samples + 1); + for (int i = 0; i <= samples; ++i) + out.push_back(bspline_eval(ctrl, U, p, umax * double(i) / double(samples))); + return out; +} + +// ---- entity builders -------------------------------------------------------- + +void DesignSketchTool::push_line(const Vec2d& a, const Vec2d& b) +{ + if ((b - a).squaredNorm() < 1e-9) + return; + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = a; + e.p1 = b; + e.construction = m_construction; + m_entities.push_back(e); +} + +bool DesignSketchTool::add_imported_regions( + const std::vector>>& regions) +{ + if (!m_active) return false; // no session to draw into; caller makes a feature + const bool saved = m_construction; + m_construction = false; // art is real geometry, never construction lines + size_t before = m_entities.size(); + for (const auto& region : regions) + for (const auto& loop : region) + push_closed_lines(loop); // every glyph contour, holes included + m_construction = saved; + if (m_entities.size() == before) return false; // nothing importable — say so, do not lie + // Art is not "just drawn", so it must NOT enter the draw-then-edit queue. Without this the + // glyph contours are treated as fresh entities and a Length field opens on the first of + // them — on a word, that is one value editor per segment, and an open field freezes the + // canvas (yce). reset_autoedit() marks every entity as already seen. + reset_autoedit(); + // The new lines carry no constraints, so the solver has nothing to move; resolve anyway so + // the degrees-of-freedom readout counts them instead of going stale. + resolve_live(); + return true; +} + +void DesignSketchTool::push_closed_lines(const std::vector& corners) +{ + const size_t n = corners.size(); + if (n < 2) return; + for (size_t i = 0; i < n; ++i) + push_line(corners[i], corners[(i + 1) % n]); +} + +void DesignSketchTool::push_open_chain(const std::vector& pts) +{ + for (size_t i = 0; i + 1 < pts.size(); ++i) + push_line(pts[i], pts[i + 1]); +} + +void DesignSketchTool::push_circle(const Vec2d& center, double radius) +{ + if (radius < 1e-3) return; + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = center; + e.p0 = center; + e.radius = radius; + e.construction = m_construction; + m_entities.push_back(e); +} + +void DesignSketchTool::push_point(const Vec2d& p) +{ + SketchEntity e; + e.type = SketchEntity::Type::Point; + e.p0 = p; + e.center = p; + e.construction = m_construction; + m_entities.push_back(e); +} + +void DesignSketchTool::append_entities(const std::vector& ents) +{ + for (const SketchEntity& e : ents) + m_entities.push_back(e); +} + +static double wrap_2pi(double a) +{ + while (a < 0.0) a += 2.0 * M_PI; + while (a >= 2.0 * M_PI) a -= 2.0 * M_PI; + return a; +} + +// Circumcircle of 3 points. Returns false if (nearly) collinear. +static bool circumcircle(const Vec2d& a, const Vec2d& b, const Vec2d& c, + Vec2d& center, double& radius) +{ + const double d = 2.0 * (a.x() * (b.y() - c.y()) + + b.x() * (c.y() - a.y()) + + c.x() * (a.y() - b.y())); + if (std::abs(d) < 1e-9) + return false; + const double a2 = a.squaredNorm(), b2 = b.squaredNorm(), c2 = c.squaredNorm(); + const double ux = (a2 * (b.y() - c.y()) + b2 * (c.y() - a.y()) + c2 * (a.y() - b.y())) / d; + const double uy = (a2 * (c.x() - b.x()) + b2 * (a.x() - c.x()) + c2 * (b.x() - a.x())) / d; + center = Vec2d(ux, uy); + radius = (a - center).norm(); + return true; +} + +// Build an Arc entity that sweeps start -> end passing through `through`. The +// kernel reconstructs the mid from (start_angle+end_angle)/2, so the angle pair +// must bracket `through` on the correct side of the circle. +static SketchEntity make_arc_through(const Vec2d& center, double radius, + const Vec2d& start, const Vec2d& end, + const Vec2d& through, bool construction) +{ + const double a_start = std::atan2(start.y() - center.y(), start.x() - center.x()); + const double a_end = std::atan2(end.y() - center.y(), end.x() - center.x()); + const double a_thru = std::atan2(through.y() - center.y(), through.x() - center.x()); + const double de = wrap_2pi(a_end - a_start); // CCW sweep to end (0,2π) + const double d3 = wrap_2pi(a_thru - a_start); // CCW position of through + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = center; + e.radius = radius; + e.p0 = start; + e.p1 = end; + e.start_angle = a_start; + e.end_angle = (d3 <= de) ? (a_start + de) : (a_start + de - 2.0 * M_PI); + e.construction = construction; + return e; +} + +std::vector DesignSketchTool::make_three_point_circle(const Vec2d& a, const Vec2d& b, const Vec2d& c) const +{ + Vec2d center; double radius; + if (!circumcircle(a, b, c, center, radius)) + return {}; + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = center; + e.p0 = center; + e.radius = radius; + e.construction = m_construction; + return { e }; +} + +std::vector DesignSketchTool::make_three_point_arc(const Vec2d& start, const Vec2d& end, const Vec2d& on_arc) const +{ + Vec2d center; double radius; + if (!circumcircle(start, end, on_arc, center, radius)) + return {}; + return { make_arc_through(center, radius, start, end, on_arc, m_construction) }; +} + +std::vector DesignSketchTool::make_tangent_arc(const Vec2d& start, const Vec2d& end) const +{ + // Tangent direction at `start` = exit direction of the previous entity. + Vec2d t(1, 0); + bool have_t = false; + if (!m_entities.empty()) { + const SketchEntity& prev = m_entities.back(); + if (prev.type == SketchEntity::Type::Line) { + t = prev.p1 - prev.p0; have_t = (t.squaredNorm() > 1e-12); + } else if (prev.type == SketchEntity::Type::Arc) { + // Tangent at the arc end p1 is perpendicular to its radius, in the + // sweep direction. + const Vec2d r = prev.p1 - prev.center; + const double sweep = prev.end_angle - prev.start_angle; + t = (sweep >= 0.0) ? Vec2d(-r.y(), r.x()) : Vec2d(r.y(), -r.x()); + have_t = (r.squaredNorm() > 1e-12); + } + } + const Vec2d se = end - start; + if (!have_t || se.squaredNorm() < 1e-12) { + // No tangent reference or zero length: fall back to a straight line. + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = start; e.p1 = end; + e.construction = m_construction; + return { e }; + } + t.normalize(); + const Vec2d n(-t.y(), t.x()); // unit normal to the tangent + const double denom = 2.0 * n.dot(se); + if (std::abs(denom) < 1e-9) { // end lies along the tangent: line + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = start; e.p1 = end; + e.construction = m_construction; + return { e }; + } + const double R = se.squaredNorm() / denom; // signed radius along n + const Vec2d center = start + n * R; + const double radius = std::abs(R); + // Mid of the tangent arc: project the chord midpoint outward onto the circle. + const Vec2d chord_mid = (start + end) * 0.5; + Vec2d to_mid = chord_mid - center; + if (to_mid.squaredNorm() < 1e-12) to_mid = n; + to_mid.normalize(); + const Vec2d through = center + to_mid * radius; + return { make_arc_through(center, radius, start, end, through, m_construction) }; +} + +std::vector DesignSketchTool::make_center_arc(const Vec2d& center, const Vec2d& start, const Vec2d& end_dir) const +{ + const double radius = (start - center).norm(); + if (radius < 1e-9) + return {}; + const double a_start = std::atan2(start.y() - center.y(), start.x() - center.x()); + const double a_end = std::atan2(end_dir.y() - center.y(), end_dir.x() - center.x()); + const double de = wrap_2pi(a_end - a_start); // CCW sweep start -> end (0,2π) + const Vec2d end = center + radius * Vec2d(std::cos(a_end), std::sin(a_end)); + const double a_mid = a_start + de * 0.5; // bisector brackets the sweep + const Vec2d through = center + radius * Vec2d(std::cos(a_mid), std::sin(a_mid)); + return { make_arc_through(center, radius, start, end, through, m_construction) }; +} + +std::vector DesignSketchTool::make_slot(const Vec2d& c0, const Vec2d& c1, double half_width) const +{ + std::vector out; + Vec2d u = c1 - c0; + if (u.squaredNorm() < 1e-12 || half_width < 1e-6) + return out; + u.normalize(); + const Vec2d nrm(-u.y(), u.x()); + const double w = half_width; + // Names avoid termios macros (B0 is a baud-rate #define pulled in transitively). + const Vec2d top0 = c0 + nrm * w, top1 = c1 + nrm * w; // upper side (c0 -> c1) + const Vec2d bot1 = c1 - nrm * w, bot0 = c0 - nrm * w; // lower side (c1 -> c0) + + auto line = [&](const Vec2d& p0, const Vec2d& p1) { + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = p0; e.p1 = p1; + e.construction = m_construction; return e; + }; + out.push_back(line(top0, top1)); // top + out.push_back(make_arc_through(c1, w, top1, bot1, c1 + u * w, m_construction)); // cap @c1 (+u) + out.push_back(line(bot1, bot0)); // bottom + out.push_back(make_arc_through(c0, w, bot0, top0, c0 - u * w, m_construction)); // cap @c0 (-u) + return out; +} + +// Arc slot: a slot whose centerline is a circular arc (center, start, end_dir on +// the same radius). Bounded by an outer arc (Rc+w), an inner arc (Rc-w) and two +// semicircular end caps. CCW closed loop, mirroring make_slot's structure. +std::vector DesignSketchTool::make_arc_slot(const Vec2d& center, const Vec2d& start, + const Vec2d& end_dir, double half_width) const +{ + std::vector out; + const double Rc = (start - center).norm(); + const double w = half_width; + if (Rc < 1e-6 || w < 1e-6 || w >= Rc) return out; + const Vec2d dirS = (start - center) / Rc; + Vec2d de = end_dir - center; + if (de.squaredNorm() < 1e-12) return out; + const Vec2d dirE = de.normalized(); + const double aS = std::atan2(dirS.y(), dirS.x()); + const double aE = std::atan2(dirE.y(), dirE.x()); + const double sweep = wrap_2pi(aE - aS); // CCW start -> end + const double aMid = aS + sweep * 0.5; + const Vec2d uMid(std::cos(aMid), std::sin(aMid)); + const Vec2d Sc = center + Rc * dirS; // centerline start point (cap centre) + const Vec2d Ec = center + Rc * dirE; // centerline end point (cap centre) + const Vec2d S_out = center + (Rc + w) * dirS, S_in = center + (Rc - w) * dirS; + const Vec2d E_out = center + (Rc + w) * dirE, E_in = center + (Rc - w) * dirE; + const Vec2d tE(-dirE.y(), dirE.x()); // CCW travel-forward tangent at E + const Vec2d tS(-dirS.y(), dirS.x()); // CCW travel-forward tangent at S + out.push_back(make_arc_through(center, Rc + w, S_out, E_out, center + (Rc + w) * uMid, m_construction)); // outer + out.push_back(make_arc_through(Ec, w, E_out, E_in, Ec + w * tE, m_construction)); // cap @E (forward) + out.push_back(make_arc_through(center, Rc - w, E_in, S_in, center + (Rc - w) * uMid, m_construction)); // inner + out.push_back(make_arc_through(Sc, w, S_in, S_out, Sc - w * tS, m_construction)); // cap @S (backward) + return out; +} + +// Rounded rectangle: axis-aligned box (a,b opposite corners) with filleted +// corners. radius_pt's distance to the nearest corner sets the fillet radius. +// 4 straight edges + 4 quarter arcs, CCW. +// Build the 8 entities (4 lines + 4 corner arcs, CCW) of an axis-aligned rounded box +// from explicit bounds + fillet radius. Shared by make_rounded_rect (gesture) and +// set_rounded_rect (label/handle edit) so the entity order/count is identical → a rebuild +// in place keeps constraint indices into the feature span valid. +std::vector DesignSketchTool::rounded_rect_entities(double xmin, double ymin, + double xmax, double ymax, double r) const +{ + std::vector out; + auto line = [&](const Vec2d& p0, const Vec2d& p1) { + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = p0; e.p1 = p1; + e.construction = m_construction; return e; }; + auto corner = [&](const Vec2d& O, const Vec2d& sharp, const Vec2d& start, const Vec2d& end) { + const Vec2d thr = O + r * (sharp - O).normalized(); + return make_arc_through(O, r, start, end, thr, m_construction); }; + out.push_back(line({xmin + r, ymin}, {xmax - r, ymin})); // bottom + out.push_back(corner({xmax - r, ymin + r}, {xmax, ymin}, {xmax - r, ymin}, {xmax, ymin + r})); // BR + out.push_back(line({xmax, ymin + r}, {xmax, ymax - r})); // right + out.push_back(corner({xmax - r, ymax - r}, {xmax, ymax}, {xmax, ymax - r}, {xmax - r, ymax})); // TR + out.push_back(line({xmax - r, ymax}, {xmin + r, ymax})); // top + out.push_back(corner({xmin + r, ymax - r}, {xmin, ymax}, {xmin + r, ymax}, {xmin, ymax - r})); // TL + out.push_back(line({xmin, ymax - r}, {xmin, ymin + r})); // left + out.push_back(corner({xmin + r, ymin + r}, {xmin, ymin}, {xmin, ymin + r}, {xmin + r, ymin})); // BL + return out; +} + +std::vector DesignSketchTool::make_rounded_rect(const Vec2d& a, const Vec2d& b, const Vec2d& radius_pt) const +{ + std::vector out; + const double xmin = std::min(a.x(), b.x()), xmax = std::max(a.x(), b.x()); + const double ymin = std::min(a.y(), b.y()), ymax = std::max(a.y(), b.y()); + const double bw = xmax - xmin, bh = ymax - ymin; + if (bw < 1e-6 || bh < 1e-6) return out; + const Vec2d cs[4] = { {xmin,ymin}, {xmax,ymin}, {xmax,ymax}, {xmin,ymax} }; + double r = 1e18; + for (const Vec2d& c : cs) r = std::min(r, (radius_pt - c).norm()); + r = std::min(r, std::min(bw, bh) * 0.5); + if (r < 1e-6) { // degenerate -> plain rectangle + auto line = [&](const Vec2d& p0, const Vec2d& p1) { + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = p0; e.p1 = p1; + e.construction = m_construction; return e; }; + for (int i = 0; i < 4; ++i) out.push_back(line(cs[i], cs[(i + 1) % 4])); + return out; + } + return rounded_rect_entities(xmin, ymin, xmax, ymax, r); +} + +std::vector DesignSketchTool::make_polygon(const Vec2d& center, const Vec2d& vertex, int sides) const +{ + std::vector out; + if (sides < 3) sides = 3; + const Vec2d rv = vertex - center; + const double d = rv.norm(); + if (d < 1e-6) return out; + // Inscribed: cursor is a vertex (circumradius = d). Circumscribed: cursor is an + // edge midpoint (apothem = d) → circumradius R = d / cos(pi/n), rotated by half + // a step so an edge midpoint points at the cursor. + double R = d, a0 = std::atan2(rv.y(), rv.x()); + if (m_polygon_circumscribed) { + R = d / std::cos(M_PI / double(sides)); + a0 = std::atan2(rv.y(), rv.x()) - M_PI / double(sides); + } + std::vector verts; verts.reserve(sides); + for (int i = 0; i < sides; ++i) { + const double a = a0 + 2.0 * M_PI * double(i) / double(sides); + verts.push_back(Vec2d(center.x() + R * std::cos(a), center.y() + R * std::sin(a))); + } + for (int i = 0; i < sides; ++i) { + SketchEntity e; e.type = SketchEntity::Type::Line; + e.p0 = verts[i]; e.p1 = verts[(i + 1) % sides]; + e.construction = m_construction; + out.push_back(e); + } + return out; +} + +// Derive (a, b, phi) of an ellipse from the 3 defining clicks. First axis click = +// major (a, phi); the minor point's perpendicular distance to the major axis = b, +// clamped to a so OCCT's a >= b holds. +static void ellipse_axes(const Vec2d& center, const Vec2d& major_end, const Vec2d& minor_pt, + double& a, double& b, double& phi) +{ + const Vec2d maj = major_end - center; + a = std::max(maj.norm(), 1e-6); + phi = std::atan2(maj.y(), maj.x()); + const Vec2d n(-std::sin(phi), std::cos(phi)); // minor-axis direction + b = std::min(std::abs((minor_pt - center).dot(n)), a); +} + +// Parametric angle on an ellipse of the point nearest `q` (q projected onto the frame). +static double ellipse_param_of(const Vec2d& center, double a, double b, double phi, const Vec2d& q) +{ + const Vec2d d = q - center; + const double cu = std::cos(phi), su = std::sin(phi); + const double u = d.x() * cu + d.y() * su; // along major + const double v = -d.x() * su + d.y() * cu; // along minor + return std::atan2(v / std::max(b, 1e-9), u / std::max(a, 1e-9)); +} + +std::vector DesignSketchTool::make_ellipse(const Vec2d& center, const Vec2d& major_end, + const Vec2d& minor_pt) const +{ + double a, b, phi; + ellipse_axes(center, major_end, minor_pt, a, b, phi); + if (b < 1e-6) return {}; + SketchEntity e; + e.type = SketchEntity::Type::Ellipse; + e.center = center; e.p0 = center; + e.radius = a; e.rminor = b; e.rotation = phi; + e.start_angle = 0.0; e.end_angle = 2.0 * M_PI; + e.construction = m_construction; + return { e }; +} + +std::vector DesignSketchTool::make_ellipse_arc(const Vec2d& center, const Vec2d& major_end, + const Vec2d& minor_pt, const Vec2d& start_pt, + const Vec2d& end_pt) const +{ + double a, b, phi; + ellipse_axes(center, major_end, minor_pt, a, b, phi); + if (b < 1e-6) return {}; + double t0 = ellipse_param_of(center, a, b, phi, start_pt); + double t1 = ellipse_param_of(center, a, b, phi, end_pt); + // CCW sweep from t0 to t1. + while (t1 <= t0) t1 += 2.0 * M_PI; + SketchEntity e; + e.type = SketchEntity::Type::EllipseArc; + e.center = center; + e.radius = a; e.rminor = b; e.rotation = phi; + e.start_angle = t0; e.end_angle = t1; + e.p0 = ellipse_point(center, a, b, phi, t0); + e.p1 = ellipse_point(center, a, b, phi, t1); + e.construction = m_construction; + return { e }; +} + +std::vector DesignSketchTool::make_bspline(const std::vector& ctrl) const +{ + if (ctrl.size() < 2) return {}; + SketchEntity e; + e.type = SketchEntity::Type::BSpline; + e.ctrl = ctrl; + e.p0 = ctrl.front(); + e.p1 = ctrl.back(); + e.construction = m_construction; + return { e }; +} + +std::vector DesignSketchTool::entity_polyline(const SketchEntity& e, bool& closed) const +{ + closed = false; + switch (e.type) { + case SketchEntity::Type::Line: + return { e.p0, e.p1 }; + case SketchEntity::Type::Circle: + closed = true; + return circle_polygon(e.center, e.radius); + case SketchEntity::Type::Arc: { + const int n = kArcFacets; + std::vector pts; pts.reserve(n + 1); + for (int i = 0; i <= n; ++i) { + const double a = e.start_angle + (e.end_angle - e.start_angle) * double(i) / double(n); + pts.push_back(Vec2d(e.center.x() + e.radius * std::cos(a), + e.center.y() + e.radius * std::sin(a))); + } + return pts; + } + case SketchEntity::Type::Ellipse: + closed = true; + return ellipse_polyline(e.center, e.radius, e.rminor, e.rotation, 0.0, 2.0 * M_PI); + case SketchEntity::Type::EllipseArc: + return ellipse_polyline(e.center, e.radius, e.rminor, e.rotation, e.start_angle, e.end_angle); + case SketchEntity::Type::BSpline: + return bspline_polyline(e.ctrl); + case SketchEntity::Type::Point: + return { e.p0 }; + } + return {}; +} + +std::vector> DesignSketchTool::closed_regions() const +{ + return closed_regions(m_entities); +} + +std::vector> DesignSketchTool::closed_regions(const std::vector& ents) const +{ + std::vector> out; + for (RegionLoop& r : region_loops(ents)) out.push_back(std::move(r.poly)); + return out; +} + +std::vector> +DesignSketchTool::region_entity_indices(const std::vector& ents) const +{ + std::vector> out; + for (RegionLoop& r : region_loops(ents)) out.push_back(std::move(r.ents)); + return out; +} + +std::vector> +DesignSketchTool::region_entity_indices_with_holes(const std::vector& ents) const +{ + const std::vector loops = region_loops(ents); + std::vector> out; + out.reserve(loops.size()); + for (const RegionLoop& r : loops) { + std::vector ids = r.ents; + for (int h : r.holes) + if (h >= 0 && h < int(loops.size())) + ids.insert(ids.end(), loops[h].ents.begin(), loops[h].ents.end()); + out.push_back(std::move(ids)); + } + return out; +} + +// Nearest stroke, and the enclosing region if the cursor is inside one, for ONE committed +// sketch. Factored out so the single-click and double-click paths cannot drift apart: they must +// agree about what is under the pointer or one of them will act on something else. +// +// region_loops exists to find EXTRUDABLE regions, and by design it discards open chains — its +// own walk comment says so. Using it as the pick index meant a committed sketch of open lines +// had no pickable geometry whatsoever: the strokes drew, and not one of them could be clicked, +// so there was no way to select it and therefore none to edit or delete it. Whether a stroke +// bounds a region has nothing to do with whether the user can point at it. Region membership +// decides what a hit REPORTS, not whether the hit can happen. +static void dp_pick_trace(const char* fmt, ...); // defined below; used by the diagnostics here +static bool dp_pick_trace_on(); // ditto — lets callers skip building a message +void DesignSketchTool::hit_display_sketch(const DisplaySketch& d, const Vec2d& p, double tol, + int& edge_feat, int& edge_reg, int& edge_ent, + double& edge_d, int& face_feat, int& face_reg) const +{ + const std::vector loops = region_loops(d.entities); + // What did the sketch decompose into, and what is under the click? This is the trace that + // settled txp8 — it prints the loop table with each loop's hole count, so + // "containment is wrong" and "the click landed elsewhere" stop being indistinguishable. + // Guarded rather than merely silent: hit_display_sketch runs on every pick, and the message + // costs a string build and a heap allocation per loop even when nothing consumes it. + if (dp_pick_trace_on()) { + std::string h; + for (size_t r = 0; r < loops.size(); ++r) { + h += " loop" + std::to_string(r) + "(ents=" + std::to_string(loops[r].ents.size()) + + ",poly=" + std::to_string(loops[r].poly.size()) + + ",holes=" + std::to_string(loops[r].holes.size()) + ")"; + } + dp_pick_trace("sketch feat=%d entities=%zu loops=%zu:%s", d.feature, d.entities.size(), + loops.size(), h.c_str()); + } + std::vector ent_region(d.entities.size(), -1); + for (int r = 0; r < int(loops.size()); ++r) + for (int ei : loops[r].ents) + if (ei >= 0 && ei < int(ent_region.size())) ent_region[ei] = r; + + for (int ei = 0; ei < int(d.entities.size()); ++ei) { + if (d.entities[ei].construction) continue; // as region_loops filters it + const double ed = entity_pick_dist(p, d.entities[ei]); + if (ed <= tol * 3.0 && ed < edge_d) { + edge_d = ed; edge_feat = d.feature; edge_reg = ent_region[ei]; edge_ent = ei; + } + } + // Pick the region the point is REALLY in: inside its boundary and not inside any of its + // holes. Clicking the middle of a plate-with-hole must select the plate; clicking inside + // the hole must select the disc, not the plate. Previously the first containing polygon + // won, so a click inside the circle selected the rectangle. + for (int r = 0; r < int(loops.size()); ++r) { + if (face_feat >= 0) break; + if (!point_in_poly(p, loops[r].poly)) continue; + bool in_hole = false; + for (int h : loops[r].holes) + if (h >= 0 && h < int(loops.size()) && point_in_poly(p, loops[h].poly)) { in_hole = true; break; } + if (!in_hole) { face_feat = d.feature; face_reg = r; } + } + // edge_ent is printed because it is now DELIVERED (3648) — a tool can ask for the + // line you pointed at, not just its loop, and "which entity did that click resolve to" is + // otherwise unanswerable from outside. + dp_pick_trace("region hit -> feat=%d reg=%d (edge_feat=%d edge_reg=%d edge_ent=%d)", + face_feat, face_reg, edge_feat, edge_reg, edge_ent); +} + +std::vector DesignSketchTool::selected_loop_entities() const +{ + if (m_display_pick < 0 || m_display_pick_region < 0) return {}; + for (const DisplaySketch& d : m_display_sketches) { + if (d.feature != m_display_pick) continue; + const std::vector loops = region_loops(d.entities); + if (m_display_pick_region >= int(loops.size())) return {}; + // The region's OWN boundary plus every loop nested in it. Handing over only the outer + // loop is what made a rectangle-with-a-circle extrude to a plain box: the circle was + // never passed to the kernel, so build_sketch_face had one loop to work with and the + // multi-loop path never ran. + std::vector out; + auto take = [&](int region) { + if (region < 0 || region >= int(loops.size())) return; + for (int ei : loops[region].ents) + if (ei >= 0 && ei < int(d.entities.size())) out.push_back(d.entities[ei]); + }; + take(m_display_pick_region); + for (int h : loops[m_display_pick_region].holes) take(h); + return out; + } + return {}; +} + +// ---- Solid topology selection (whole -> face -> edge cycle) ---- + +void DesignSketchTool::set_solid_pick(const std::vector* bodies, const TriangleMesh* mesh, + const std::vector* tri_face, const std::vector* tri_body, + const std::vector* visible, + const std::vector* xform) +{ + // Treat no bodies or an empty mesh as "no solid" so has_display()/picking stay off. + if (bodies == nullptr || bodies->empty() || mesh == nullptr || mesh->its.indices.empty()) { + m_solid_bodies = nullptr; m_solid_mesh = nullptr; m_solid_tri_face = nullptr; m_solid_tri_body = nullptr; + m_solid_visible = nullptr; m_solid_xform = nullptr; + } else { + m_solid_bodies = bodies; m_solid_mesh = mesh; m_solid_tri_face = tri_face; m_solid_tri_body = tri_body; + m_solid_visible = visible; m_solid_xform = xform; + } + clear_solid_selection(); +} + +// Map a point sampled from the (untransformed) OCCT body shape through the body's display +// transform, so edge picking/highlight track a moved body. The pick MESH is already +// transformed by the host; only OCCT-sampled edges need this. +Vec3d DesignSketchTool::body_xform_pt(int body, const Vec3d& p) const +{ + if (m_solid_xform != nullptr && body >= 0 && body < int(m_solid_xform->size())) + return (*m_solid_xform)[body] * p; + return p; +} + +// A body is pickable unless an explicit visibility vector marks it hidden. +bool DesignSketchTool::body_pickable(int b) const +{ + if (b < 0) return false; + // Body-focus mode. The focus is an INDEX held by the panel across recomputes, so it can + // outlive the body it names — delete a body and the stored index may point past the end. + // A restriction to a body that no longer exists rejects EVERY body, which is a viewport + // that silently accepts no clicks at all: the worst possible failure for a picking mode, + // because nothing on screen says why. Out of range therefore means NO restriction — fail + // open, never dead. + const bool focus_live = m_pick_only_body >= 0 && m_solid_bodies != nullptr + && m_pick_only_body < int(m_solid_bodies->size()); + if (focus_live && b != m_pick_only_body) return false; + if (m_solid_visible == nullptr || b >= int(m_solid_visible->size())) return true; + return (*m_solid_visible)[b]; +} + +void DesignSketchTool::clear_solid_selection() +{ + m_solid_sel = SolidSel::None; + m_sel_body = m_sel_face = m_sel_edge = -1; + m_sel_edge_pts.clear(); + // The pre-highlight names a face/edge/vertex by index into a shape that a recompute has just + // rebuilt, so it expires with the selection it was a promise about. Left behind it would keep + // glowing on whatever now sits at those indices — a real entity, but not the one meant. + m_pre = SolidPick{}; +} + +void DesignSketchTool::select_body(int body) +{ + // Hidden bodies aren't highlighted (the tint overlay would otherwise draw over a + // body whose GLVolume is off, leaving a ghost after a hide). + if (m_solid_bodies == nullptr || body < 0 || body >= int(m_solid_bodies->size()) + || !body_pickable(body)) { + clear_solid_selection(); + return; + } + m_sel_body = body; + m_sel_face = m_sel_edge = -1; + m_sel_edge_pts.clear(); + m_solid_sel = SolidSel::Whole; // render_solid_highlight tints just this body +} + +// Pick tracing. Selection failures on a real desktop have repeatedly turned out to be an +// event that never arrived rather than a ray that missed, and the two look identical from +// the UI. Set ORCA_CAD_PICK_TRACE=1 and the whole press->release->ray path narrates itself +// on stderr. Off by default: no cost, no noise. +static bool dp_pick_trace_on() +{ + static const bool on = ::getenv("ORCA_CAD_PICK_TRACE") != nullptr; + return on; +} + +static void dp_pick_trace(const char* fmt, ...) +{ + if (!dp_pick_trace_on()) return; + va_list ap; va_start(ap, fmt); + std::fputs("[pick] ", stderr); + std::vfprintf(stderr, fmt, ap); + std::fputc('\n', stderr); + va_end(ap); + std::fflush(stderr); +} + +// Resolve a swept rubber band into a whole-body selection. +// +// Sample points are the display mesh's triangle vertices plus each triangle's centroid. That +// mesh is already in world coordinates — the very points the ray pick tests — so no per-body +// transform is needed here. A body counts as swept when any of its samples lands inside the +// rectangle (crossing semantics: touching selects, which is the forgiving reading of a sweep), +// and the body with the most samples inside wins because the selection callback downstream +// carries exactly one body. +// +// ponytail: crossing over a triangle sample set. A rectangle small enough to sit entirely +// inside one flat triangle selects nothing — drag a bigger one, or click. Real multi-body +// selection (and the homogeneous-set rule that goes with it) is 9xw. +void DesignSketchTool::pick_bodies_in_rectangle() +{ + if (m_solid_mesh == nullptr || m_solid_tri_body == nullptr || m_solid_bodies == nullptr) + return; + const indexed_triangle_set& its = m_solid_mesh->its; + std::vector pts; + std::vector owner; + pts.reserve(its.indices.size() * 4); + owner.reserve(its.indices.size() * 4); + for (size_t i = 0; i < its.indices.size(); ++i) { + const int b = (i < m_solid_tri_body->size()) ? (*m_solid_tri_body)[i] : -1; + if (!body_pickable(b)) continue; // hidden bodies aren't swept either + const auto& idx = its.indices[i]; + Vec3d c = Vec3d::Zero(); + for (int k = 0; k < 3; ++k) { + const Vec3d p = its.vertices[idx(k)].cast(); + pts.push_back(p); owner.push_back(b); c += p; + } + pts.push_back(c / 3.0); owner.push_back(b); + } + + std::vector hits(m_solid_bodies->size(), 0); + if (!pts.empty()) + for (unsigned int i : m_rubber.contains(pts)) + if (i < owner.size() && owner[i] >= 0 && owner[i] < int(hits.size())) + ++hits[owner[i]]; + + int best = -1, best_n = 0; + for (int b = 0; b < int(hits.size()); ++b) + if (hits[b] > best_n) { best_n = hits[b]; best = b; } + + if (best < 0) clear_solid_selection(); // swept empty space -> drop the selection + else select_body(best); + dp_pick_trace("rubber band -> body=%d (%d samples)", best, best_n); + if (on_solid_selection_changed) + on_solid_selection_changed(int(m_solid_sel), m_sel_body, m_sel_face, m_sel_edge); +} + +// Resolve what a pick at (mx,my) would take. CONST, and it writes only into `out`: the hover +// path calls this many times a second and must not disturb the committed selection by doing so. +bool DesignSketchTool::resolve_solid_pick(GLCanvas3D& canvas, int mx, int my, SolidPick& out) const +{ + out = SolidPick{}; + if (m_solid_bodies == nullptr || m_solid_mesh == nullptr) { + dp_pick_trace("no solid data (bodies=%p mesh=%p)", + (const void*) m_solid_bodies, (const void*) m_solid_mesh); + return false; + } + const Linef3 r = canvas.mouse_ray(Point(mx, my)); + const Vec3d ro = r.a, rd = r.b - r.a; + + // 1) nearest solid face under the cursor (ray vs display-mesh triangles). Resolve WHICH + // body and which face-within-that-body via the per-triangle (tri_body, tri_face) tags. + const indexed_triangle_set& its = m_solid_mesh->its; + int best_face = -1, best_body = -1; double best_t = 1e30; + for (size_t i = 0; i < its.indices.size(); ++i) { + const auto& idx = its.indices[i]; + const Vec3d v0 = its.vertices[idx(0)].cast(); + const Vec3d v1 = its.vertices[idx(1)].cast(); + const Vec3d v2 = its.vertices[idx(2)].cast(); + double t; + if (ray_triangle(ro, rd, v0, v1, v2, t) && t < best_t) { + const int cand_body = (m_solid_tri_body && i < m_solid_tri_body->size()) ? (*m_solid_tri_body)[i] : -1; + if (!body_pickable(cand_body)) continue; // hidden bodies don't catch clicks + best_t = t; + best_face = (m_solid_tri_face && i < m_solid_tri_face->size()) ? (*m_solid_tri_face)[i] : -1; + best_body = cand_body; + } + } + dp_pick_trace("ray tris=%zu -> body=%d face=%d t=%.3f", its.indices.size(), + best_body, best_face, best_t); + if (best_face < 0 || best_body < 0 || best_body >= int(m_solid_bodies->size())) + return false; // missed the solid + + // ---- one click, one deterministic result --------------------------------------------- + // NO CYCLE. A click selects the SMALLEST thing under the cursor: the edge if the pointer is + // within tolerance of one, otherwise the face. The WHOLE body is taken by a left-drag + // rubber band (pick_bodies_in_rectangle) — a different gesture for a different scale. + // + // What this replaces: click 1 = whole body, click 2 = face, click 3 = nearest edge, click 4 + // = back to whole. That made "click a face" a two-click gesture and "click an edge" a + // three-click one, neither discoverable — the L5 violation §10 of the charter already + // listed, and the real reason sketching on a face kept reading as broken however often the + // plane resolution was fixed. Selection is the foundation the tool offer stands on: the + // offer can only ever be as truthful as the selection beneath it. + // + // Tolerance is measured in SCREEN PIXELS. The old edge step compared a ray-to-segment + // distance in millimetres, so the same gesture meant different things at different zooms — + // the pointer is a screen object and its tolerance has to be one too. + const Camera& cam = wxGetApp().plater()->get_camera(); + const wxPoint cursor(mx, my); + // Vertex beats edge beats face, and the vertex tolerance is the larger of the two: a corner + // sits ON its edges, so an equal radius would make vertices unreachable — every click near + // one would resolve to the edge it lies on. + const double kVertexTolPx = 11.0; + const double kEdgeTolPx = 8.0; + + auto seg_px = [](const wxPoint& p, const wxPoint& a, const wxPoint& b) { // 2D point→segment, px + const double vx = b.x - a.x, vy = b.y - a.y; + const double wx = p.x - a.x, wy = p.y - a.y; + const double L2 = vx * vx + vy * vy; + double t = (L2 > 1e-12) ? (wx * vx + wy * vy) / L2 : 0.0; + t = std::max(0.0, std::min(1.0, t)); + return std::hypot(wx - t * vx, wy - t * vy); + }; + + out.body = best_body; + out.face = best_face; + + { + const TopoDS_Shape& bshape = (*m_solid_bodies)[out.body].shape; + const TopoDS_Face face = GeometryEngine::face_by_index(bshape, out.face); + double best_ed = 1e30; std::vector ed_pts; TopoDS_Edge ed_edge; bool have_edge = false; + double best_vd = 1e30; Vec3d vtx = Vec3d::Zero(); bool have_vtx = false; + // Screen extent of the face, accumulated from the same edge samples the loop already + // takes. A FIXED edge tolerance makes a narrow face unreachable: a 3 mm-wide plate is + // barely wider on screen than the 8 px budget, so every point on it is "on an edge" and + // the face level can never be picked — which also blocks the face-based Coord Sys that a + // mate needs. The tolerances below shrink with the face so its middle stays its own. + int fx0 = INT_MAX, fy0 = INT_MAX, fx1 = INT_MIN, fy1 = INT_MIN; + if (!face.IsNull()) { + for (const TopoDS_Edge& e : GeometryEngine::edges_of_face(face)) { + std::vector pts = GeometryEngine::sample_edge_world(e); + for (Vec3d& q : pts) q = body_xform_pt(out.body, q); // follow a moved body + if (pts.size() < 2) continue; + // The polyline ends ARE the edge's vertices; every corner of the face is the + // end of one of its edges, so this covers them without a separate topology walk. + for (const Vec3d& v : {pts.front(), pts.back()}) { + const wxPoint sp = world_to_screen_px(cam, v); + if (sp.x < 0) continue; + const double d = std::hypot(double(sp.x - cursor.x), double(sp.y - cursor.y)); + if (d < best_vd) { best_vd = d; vtx = v; have_vtx = true; } + } + double d = 1e30; + for (size_t s = 1; s < pts.size(); ++s) { + const wxPoint a = world_to_screen_px(cam, pts[s - 1]); + const wxPoint b = world_to_screen_px(cam, pts[s]); + if (a.x < 0 || b.x < 0) continue; // behind the camera + fx0 = std::min({fx0, a.x, b.x}); fx1 = std::max({fx1, a.x, b.x}); + fy0 = std::min({fy0, a.y, b.y}); fy1 = std::max({fy1, a.y, b.y}); + d = std::min(d, seg_px(cursor, a, b)); + } + if (d < best_ed) { best_ed = d; ed_pts = pts; ed_edge = e; have_edge = true; } + } + } + // A third of the face's SHORTER on-screen side, so the two tolerances can never meet in + // the middle. Only ever shrinks: a face big enough keeps the full budget. + double vtol = kVertexTolPx, etol = kEdgeTolPx; + if (fx1 > fx0 && fy1 > fy0) { + const double narrow = double(std::min(fx1 - fx0, fy1 - fy0)) / 3.0; + vtol = std::min(vtol, narrow); + etol = std::min(etol, narrow); + } + if (have_vtx && best_vd <= vtol) { + out.vertex_pt = vtx; + out.kind = SolidSel::Vertex; + } else if (have_edge && best_ed <= etol) { + // Promote the face-relative pick to a STABLE GLOBAL edge id so dress-up ops + // (fillet/chamfer) can target this exact edge across recomputes. + out.edge = GeometryEngine::edge_index_of(bshape, ed_edge); + out.edge_pts = std::move(ed_pts); + out.kind = SolidSel::Edge; + } else { + out.kind = SolidSel::Face; + } + } + return true; +} + +// A click on the solid takes the smallest thing under the cursor (vertex/edge/face). Returns +// true if the click hit the solid (consumed); false otherwise so the caller can try +// committed-sketch loop picking. Whole bodies are taken by the rubber band, not by clicking. +bool DesignSketchTool::handle_solid_click(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + SolidPick p; + if (!resolve_solid_pick(canvas, evt.GetX(), evt.GetY(), p)) + return false; // missed the solid, or no solid data — same two exits as before + + // What was selected BEFORE this pick — the escalation below is the only thing that reads + // it, and everything from here on overwrites it. + const SolidSel prev_kind = m_solid_sel; + const int prev_body = m_sel_body, prev_face = m_sel_face, prev_edge = m_sel_edge; + const Vec3d prev_vtx = m_sel_vertex_pt; + + m_sel_body = p.body; + m_sel_face = p.face; + m_sel_edge = p.edge; + m_sel_edge_pts = std::move(p.edge_pts); + m_sel_vertex_pt = p.vertex_pt; + m_solid_sel = p.kind; + + // CLICK AGAIN ON THE SAME THING -> THE WHOLE BODY (gem). Pointing at a face and + // pointing at its body are different intents, and until now only the rubber band could + // express the second one — so the status line said "face 0 selected" while the user + // believed they had taken the body, and every body verb had to opt into the face kinds to + // stay reachable. One more click on the SAME sub-element escalates. + // + // This is not the pick cycle that was removed (bc2b741ce9). That one was silent and three + // deep, so no click had a predictable meaning. Here the escalation is announced by the + // status line BEFORE you make the click, and a further click just takes the face under the + // cursor again — the ordinary meaning of clicking a face, which needs no teaching. + // + // Double-click is safe: wx sends Down/Up/DClick/Up, and only the first Up carries a + // pending press, so a fast double-click zooms to fit and picks ONCE. Escalation needs two + // separate clicks, the same "click, pause, click" distinction a file manager uses. + // + // "The same thing" is compared AT THE LEVEL THAT WAS PICKED, and nothing else. Requiring + // every field to match looked stricter and was simply wrong: an edge pick leaves m_sel_face + // set to whichever face the ray happened to hit, and a shared edge is reached through a + // different face depending on which side of the body you are looking from. So picking an + // edge, orbiting, and clicking that same edge from the other side left m_sel_edge equal and + // m_sel_face different, and the escalation the status line had just promised did not happen. + // The edge id here is already the STABLE GLOBAL one (edge_index_of, a few lines up) — it + // identifies the edge on its own and does not need the face to disambiguate it. + const bool same_pick = m_solid_sel == prev_kind && m_sel_body == prev_body + && (m_solid_sel == SolidSel::Vertex ? (m_sel_vertex_pt - prev_vtx).norm() < 1e-9 + : m_solid_sel == SolidSel::Edge ? m_sel_edge == prev_edge + : m_solid_sel == SolidSel::Face ? m_sel_face == prev_face + : true); + if (same_pick && m_escalate_repick) { + select_body(m_sel_body); // clears face/edge/vertex, tints the whole body + dp_pick_trace("re-pick -> escalated to whole body %d", m_sel_body); + } + dp_pick_trace("pick -> sel=%d body=%d face=%d edge=%d", + int(m_solid_sel), m_sel_body, m_sel_face, m_sel_edge); + if (on_solid_selection_changed) + on_solid_selection_changed(int(m_solid_sel), m_sel_body, m_sel_face, m_sel_edge); + return true; +} + +// Recompute what the pointer is over. Returns true only when the answer CHANGED — this runs on +// every motion event, and a repaint per event would cost far more than the pick itself. +bool DesignSketchTool::update_solid_hover(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + SolidPick p; + if (!resolve_solid_pick(canvas, evt.GetX(), evt.GetY(), p)) + p = SolidPick{}; // off the solid: no promise to make + // Compared AT THE LEVEL THAT WAS PICKED, for the same reason the click's escalation is + // (see same_pick above): an edge pick carries whichever face the ray happened to cross, and + // that face changes as the pointer slides along the edge without the answer changing at all. + const bool same = p.kind == m_pre.kind && p.body == m_pre.body + && (p.kind == SolidSel::Vertex ? (p.vertex_pt - m_pre.vertex_pt).norm() < 1e-9 + : p.kind == SolidSel::Edge ? p.edge == m_pre.edge + : p.kind == SolidSel::Face ? p.face == m_pre.face + : true); + if (same) return false; + m_pre = std::move(p); + return true; +} + +// One highlight, drawn from explicit arguments rather than from the selection members, so the +// committed selection and the hover pre-highlight cannot drift apart in how they look. alpha_mul +// scales every layer at once: the pre-highlight is the same shape in the same place, quieter. +void DesignSketchTool::render_solid_sel(SolidSel kind, int body, int face, + const std::vector& edge_pts, + const Vec3d& vertex_pt, + const ColorRGBA& rgb, float alpha_mul) +{ + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + // Opaque: the edge ribbon and the vertex square render with GL_BLEND OFF, so an alpha below 1 + // here would be silently ignored. Those two are quietened by a MUTED rgb from the caller + // instead; alpha_mul only reaches the face fill, which is the one layer that is blended. + const ColorRGBA cyan(rgb.r(), rgb.g(), rgb.b(), 1.0f); + + // Whole tints the picked BODY (all its triangles, lighter alpha); Face tints just the + // picked face on that body. Both filter by `body` so other bodies stay untinted. + if ((kind == SolidSel::Face || kind == SolidSel::Whole) + && m_solid_mesh != nullptr && m_solid_tri_body != nullptr && body >= 0) { + const bool face_only = (kind == SolidSel::Face); + const indexed_triangle_set& its = m_solid_mesh->its; + GLModel::Geometry g; g.format = { EPT::Triangles, EVL::P3 }; + unsigned int base = 0; + for (size_t i = 0; i < its.indices.size(); ++i) { + if (i >= m_solid_tri_body->size() || (*m_solid_tri_body)[i] != body) continue; + if (face_only && (m_solid_tri_face == nullptr || i >= m_solid_tri_face->size() + || (*m_solid_tri_face)[i] != face)) continue; + const auto& idx = its.indices[i]; + for (int j = 0; j < 3; ++j) g.add_vertex(its.vertices[idx(j)]); + g.add_triangle(base, base + 1, base + 2); base += 3; + } + if (base > 0) { + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glEnable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glPolygonOffset(-2.0f, -2.0f)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + m_solid_face_model.reset(); + m_solid_face_model.init_from(std::move(g)); + m_solid_face_model.set_color(ColorRGBA(rgb.r(), rgb.g(), rgb.b(), + (face_only ? 0.40f : 0.22f) * alpha_mul)); + m_solid_face_model.render(); + glsafe(::glDisable(GL_BLEND)); + glsafe(::glDisable(GL_POLYGON_OFFSET_FILL)); + glsafe(::glDisable(GL_DEPTH_TEST)); + } + } else if (kind == SolidSel::Edge && edge_pts.size() >= 2) { + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d vd = cam.get_dir_forward(); + const double hw = 2.0 / std::max(cam.get_zoom(), 1e-6); // ~2 px ribbon half-width + GLModel::Geometry g; g.format = { EPT::Triangles, EVL::P3 }; + unsigned int base = 0; + for (size_t s = 1; s < edge_pts.size(); ++s) { + const Vec3d a = edge_pts[s - 1], b = edge_pts[s]; + Vec3d dir = b - a; if (dir.norm() < 1e-9) continue; dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(cam.get_dir_up()); + if (off.norm() < 1e-9) continue; + off.normalize(); off *= hw; + g.add_vertex((Vec3f)(a + off).cast()); + g.add_vertex((Vec3f)(b + off).cast()); + g.add_vertex((Vec3f)(b - off).cast()); + g.add_vertex((Vec3f)(a - off).cast()); + g.add_triangle(base, base + 1, base + 2); + g.add_triangle(base, base + 2, base + 3); base += 4; + } + if (base > 0) { + glsafe(::glDisable(GL_DEPTH_TEST)); + m_solid_edge_model.reset(); + m_solid_edge_model.init_from(std::move(g)); + m_solid_edge_model.set_color(cyan); + m_solid_edge_model.render(); + } + } else if (kind == SolidSel::Vertex) { + // A camera-facing square at the picked corner, sized in screen terms (the same + // 1/zoom trick the edge ribbon uses) so it stays a constant dot at every zoom. A + // selection you cannot see is not a selection (L5), which is why vertex picking waited + // for this rather than shipping without a highlight. + const Camera& cam = wxGetApp().plater()->get_camera(); + Vec3d right = cam.get_dir_right(), up = cam.get_dir_up(); + const double h = 4.5 / std::max(cam.get_zoom(), 1e-6); // ~4.5 px half-size + right *= h; up *= h; + const Vec3d c = vertex_pt; + GLModel::Geometry g; g.format = { EPT::Triangles, EVL::P3 }; + g.add_vertex((Vec3f)(c - right - up).cast()); + g.add_vertex((Vec3f)(c + right - up).cast()); + g.add_vertex((Vec3f)(c + right + up).cast()); + g.add_vertex((Vec3f)(c - right + up).cast()); + g.add_triangle(0, 1, 2); + g.add_triangle(0, 2, 3); + glsafe(::glDisable(GL_DEPTH_TEST)); + m_solid_vertex_model.reset(); + m_solid_vertex_model.init_from(std::move(g)); + m_solid_vertex_model.set_color(cyan); + m_solid_vertex_model.render(); + } +} + +// Cyan overlay for the picked face / edge / vertex, plus the quieter pre-highlight of whatever +// the pointer is currently over. Whole-solid tint is the panel's job (set_body_highlight). +// Called from render() while no sketch session is active. +void DesignSketchTool::render_solid_highlight() +{ + const ColorRGBA sel_cyan = design_selection_color(); + + // The pre-highlight goes FIRST so the committed selection paints over it where the two + // overlap — what you HAVE outranks what you would get. Suppressed entirely when they are the + // same thing: two coats of the same colour on the same face reads as a rendering fault, and + // a promise about a click that would change nothing is not worth making. + const bool pre_is_sel = m_pre.kind == m_solid_sel && m_pre.body == m_sel_body + && (m_pre.kind == SolidSel::Vertex ? (m_pre.vertex_pt - m_sel_vertex_pt).norm() < 1e-9 + : m_pre.kind == SolidSel::Edge ? m_pre.edge == m_sel_edge + : m_pre.kind == SolidSel::Face ? m_pre.face == m_sel_face + : true); + if (m_pre.kind != SolidSel::None && !pre_is_sel) + // Desaturated toward white rather than a second hue: a distinct colour would read as a + // distinct KIND of selection, when it is the same selection one moment earlier. + render_solid_sel(m_pre.kind, m_pre.body, m_pre.face, m_pre.edge_pts, m_pre.vertex_pt, + design_selection_color(), 0.45f); // hover = the same colour, quieter + + render_solid_sel(m_solid_sel, m_sel_body, m_sel_face, m_sel_edge_pts, m_sel_vertex_pt, + sel_cyan, 1.0f); +} + +// Datum/reference planes (Plane feature) have no solid; draw each as a translucent indigo +// rectangle + border so it is visible in the viewport (Onshape-style finite plane). World +// space, depth-test off so it reads over the bed; indigo to stay distinct from the cyan +// solid-selection tint, orange sketches and amber feature ghosts. +void DesignSketchTool::render_view_helpers() +{ + if (!m_show_planes && !m_show_axes) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d vd = cam.get_dir_forward(); + const double hw = 1.5 / std::max(cam.get_zoom(), 1e-6); // billboard ribbon half-width (px) + + glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + if (m_show_planes) { + const double H = 40.0; // half-extent (mm) + SketchPlane pl[3]; // XY / XZ / YZ through the world origin + pl[0].origin = Vec3d(0,0,0); pl[0].x_axis = Vec3d(1,0,0); pl[0].y_axis = Vec3d(0,1,0); pl[0].normal = Vec3d(0,0,1); + pl[1].origin = Vec3d(0,0,0); pl[1].x_axis = Vec3d(1,0,0); pl[1].y_axis = Vec3d(0,0,1); pl[1].normal = Vec3d(0,1,0); + pl[2].origin = Vec3d(0,0,0); pl[2].x_axis = Vec3d(0,1,0); pl[2].y_axis = Vec3d(0,0,1); pl[2].normal = Vec3d(1,0,0); + GLModel::Geometry fill; fill.format = { EPT::Triangles, EVL::P3 }; + unsigned int fb = 0; + for (const SketchPlane& p : pl) { + const Vec3d c[4] = { p.to_world(Vec2d(-H,-H)), p.to_world(Vec2d(H,-H)), + p.to_world(Vec2d(H,H)), p.to_world(Vec2d(-H,H)) }; + fill.add_vertex((Vec3f)c[0].cast()); fill.add_vertex((Vec3f)c[1].cast()); + fill.add_vertex((Vec3f)c[2].cast()); fill.add_triangle(fb, fb+1, fb+2); fb += 3; + fill.add_vertex((Vec3f)c[0].cast()); fill.add_vertex((Vec3f)c[2].cast()); + fill.add_vertex((Vec3f)c[3].cast()); fill.add_triangle(fb, fb+1, fb+2); fb += 3; + } + if (fb > 0) { GLModel fm; fm.init_from(std::move(fill)); + fm.set_color(ColorRGBA(0.42f, 0.52f, 0.78f, 0.20f)); fm.render(); } + } + + if (m_show_axes) { + const double L = 60.0; // axis length (mm) + struct Ax { Vec3d dir; ColorRGBA col; }; + const Ax axes[3] = { { Vec3d(1,0,0), ColorRGBA(0.92f, 0.28f, 0.28f, 0.9f) }, + { Vec3d(0,1,0), ColorRGBA(0.30f, 0.80f, 0.34f, 0.9f) }, + { Vec3d(0,0,1), ColorRGBA(0.32f, 0.55f, 0.95f, 0.9f) } }; + for (const Ax& ax : axes) { + // Lines don't rasterise under the reused software GL context, so each axis is a + // thin view-facing ribbon (two triangles), like the datum-plane border. + const Vec3d a = Vec3d(0,0,0), b = ax.dir * L; + Vec3d dir = (b - a).normalized(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(cam.get_dir_up()); + if (off.norm() < 1e-9) continue; + off.normalize(); off *= hw * 1.5; + GLModel::Geometry g; g.format = { EPT::Triangles, EVL::P3 }; + g.add_vertex((Vec3f)(a + off).cast()); g.add_vertex((Vec3f)(b + off).cast()); + g.add_vertex((Vec3f)(b - off).cast()); g.add_vertex((Vec3f)(a - off).cast()); + g.add_triangle(0, 1, 2); g.add_triangle(0, 2, 3); + GLModel m; m.init_from(std::move(g)); m.set_color(ax.col); m.render(); + } + } + glsafe(::glDisable(GL_BLEND)); +} + +void DesignSketchTool::render_datum_planes() +{ + if (m_datum_planes.empty()) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const double H = 40.0; // default half-extent when no per-plane size is given (mm) + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d vd = cam.get_dir_forward(); + const double hw = 1.5 / std::max(cam.get_zoom(), 1e-6); // ~1.5 px border ribbon + + GLModel::Geometry fill; fill.format = { EPT::Triangles, EVL::P3 }; + GLModel::Geometry border; border.format = { EPT::Triangles, EVL::P3 }; + unsigned int fb = 0, bb = 0; + for (size_t pi = 0; pi < m_datum_planes.size(); ++pi) { + const SketchPlane& p = m_datum_planes[pi]; + // Per-plane u/v half-extent (the GUI Size U/V + drag handles drive these); fall + // back to the square default when no size was supplied. + const double hu = (pi < m_datum_sizes.size() && m_datum_sizes[pi].x() > 1e-6) + ? m_datum_sizes[pi].x() * 0.5 : H; + const double hv = (pi < m_datum_sizes.size() && m_datum_sizes[pi].y() > 1e-6) + ? m_datum_sizes[pi].y() * 0.5 : H; + const Vec3d c[4] = { p.to_world(Vec2d(-hu, -hv)), p.to_world(Vec2d(hu, -hv)), + p.to_world(Vec2d(hu, hv)), p.to_world(Vec2d(-hu, hv)) }; + fill.add_vertex((Vec3f)c[0].cast()); fill.add_vertex((Vec3f)c[1].cast()); + fill.add_vertex((Vec3f)c[2].cast()); fill.add_triangle(fb, fb + 1, fb + 2); fb += 3; + fill.add_vertex((Vec3f)c[0].cast()); fill.add_vertex((Vec3f)c[2].cast()); + fill.add_vertex((Vec3f)c[3].cast()); fill.add_triangle(fb, fb + 1, fb + 2); fb += 3; + for (int s = 0; s < 4; ++s) { + const Vec3d a = c[s], b = c[(s + 1) & 3]; + Vec3d dir = b - a; if (dir.norm() < 1e-9) continue; dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(cam.get_dir_up()); + if (off.norm() < 1e-9) continue; + off.normalize(); off *= hw; + border.add_vertex((Vec3f)(a + off).cast()); + border.add_vertex((Vec3f)(b + off).cast()); + border.add_vertex((Vec3f)(b - off).cast()); + border.add_vertex((Vec3f)(a - off).cast()); + border.add_triangle(bb, bb + 1, bb + 2); + border.add_triangle(bb, bb + 2, bb + 3); bb += 4; + } + } + glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + if (fb > 0) { + GLModel fm; fm.init_from(std::move(fill)); + fm.set_color(ColorRGBA(0.62f, 0.52f, 0.95f, 0.10f)); + fm.render(); + } + if (bb > 0) { + GLModel bm; bm.init_from(std::move(border)); + bm.set_color(ColorRGBA(0.70f, 0.60f, 1.0f, 0.85f)); + bm.render(); + } + glsafe(::glDisable(GL_BLEND)); +} + +// ---- Visual Extrude gizmo (C5b) ------------------------------------------------------- +void DesignSketchTool::set_extrude_gizmo(const SketchPlane& plane, const Vec2d& centroid, + double depth, double depth2, bool two_sided, bool flip) +{ + m_ex_active = true; + m_ex_plane = plane; + m_ex_centroid = centroid; + m_ex_depth = std::max(0.0, depth); + m_ex_depth2 = std::max(0.0, depth2); + m_ex_two_sided = two_sided; + m_ex_flip = flip; +} + +void DesignSketchTool::clear_extrude_gizmo() +{ + m_ex_active = false; + m_ex_drag = -1; +} + +// Camera-billboarded depth arrow(s) along the profile normal, drawn in WORLD via a billboard +// SketchPlane at the centroid (draw_strokes/draw_text lift 2D coords through m_plane.to_world, +// so swapping m_plane to a screen-facing frame renders a flat, screen-aligned arrow + label). +// The mate-connector glyph. Three elements, each answering one question, and every dimension is in +// SCREEN PIXELS via upp (= 1/zoom) like every other gizmo here — a connector is a symbol, not a part, +// so it must not shrink with the model. +// +// disc the XY plane "I am a frame, and this is the plane I sit in" +// quadrant the +x/+y sector "this is where X is" -- the roll, otherwise invisible +// Z arrow +Z only, never -Z "this is the way I point" -- the VERSE +// +// POLARITY (which one is anchored, which one is about to move) is carried by the head: a filled +// cone travels, an open collar receives. No surveyed CAD system encodes this at all; both ends of +// their mates are drawn identically, which is why "which part moves?" is a standing complaint. +// +// ORCA_CAD_GLYPH=A|B selects the treatment while this is being judged on the rig: +// A three short axis arms, no head differentiation (the Onshape baseline) +// B one-sided Z arrow, filled vs open head (the proposal) -- default +void DesignSketchTool::render_mate_connectors() +{ + if (m_mate_connectors.empty()) return; + static const bool style_A = [] { + const char* s = ::getenv("ORCA_CAD_GLYPH"); + return s && (*s == 'A' || *s == 'a'); + }(); + // The face treatment, on by default. Read every frame rather than latched in a static, so + // toggling the preference takes effect on the next repaint instead of at the next launch — + // it is a look, and a look you cannot A/B without restarting will not get compared. + // ORCA_CAD_GLYPH=D forces the disc regardless, which is how the rig drives the other branch. + const bool face_style = !style_A + && wxGetApp().app_config->get_bool("design_connector_face_glyph") + && [] { const char* s = ::getenv("ORCA_CAD_GLYPH"); + return !(s && (*s == 'D' || *s == 'd')); }(); + + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double R = 22.0 * upp; // disc radius, ~22 px + const double lw = std::max(0.9 * upp, 1e-4); + + const ColorRGBA gold (0.93f, 0.66f, 0.09f, 1.0f); + const ColorRGBA blue (0.18f, 0.44f, 0.93f, 1.0f); + const ColorRGBA grey (0.42f, 0.46f, 0.52f, 1.0f); + // F5: roll-undefined was a loud red — the strongest colour in the viewport spent on the LEAST + // important connector, which pulled the eye away from the mate being made. It is a "this one + // could not be derived" mark, not an error: muted amber says look-here without shouting. + const ColorRGBA warn (0.72f, 0.55f, 0.22f, 1.0f); + + const SketchPlane saved = m_plane; + + for (const MateConnectorGlyph& g : m_mate_connectors) { + const Vec3d X = g.x.normalized(); + const Vec3d Y = g.y.normalized(); + const Vec3d Z = X.cross(Y).normalized(); + const ColorRGBA body = (g.role == 2) ? blue : grey; + + // ---- disc + quadrant, drawn IN the connector's own plane. This is the part that must not + // be billboarded: a disc that always faces the camera cannot show the frame's orientation, + // which is the only reason it is a disc and not a dot. + // Lifted off the surface by a sub-pixel epsilon. A connector's disc is EXACTLY coplanar with + // the face it sits on, so depth-testing it z-fights: on the rig the disc came out as a broken + // dotted arc that flickered with the camera. Depth off floats it through solids, depth on and + // coplanar tears it — the lift is what buys both. Scaled by upp so it stays sub-pixel at any + // zoom instead of becoming a visible gap when you zoom in. + // A face asserts a definite roll. When the roll could NOT be derived, drawing one would be + // a confident lie about the very thing that is unknown — the same objection that rejected + // billboarding the quadrant — so an underived connector keeps the disc treatment and its + // hatched quadrant, whatever the preference says. + if (face_style && !g.roll_undefined) { + render_mate_face(g.origin, X, Y, Z, R, body); + } else { + + SketchPlane cp; cp.origin = g.origin + Z * (0.7 * upp); + cp.x_axis = X; cp.y_axis = Y; cp.normal = Z; + m_plane = cp; + { + std::vector> segs; + const int N = 40; + for (int i = 0; i < N; ++i) { + const double a0 = (2.0 * M_PI * i) / N, a1 = (2.0 * M_PI * (i + 1)) / N; + segs.emplace_back(Vec2d(R * std::cos(a0), R * std::sin(a0)), + Vec2d(R * std::cos(a1), R * std::sin(a1))); + } + // Depth test ON for the disc, deliberately. With it off, a connector on a face pointing + // AWAY from the camera still drew its disc over the solid, so the part looked covered in + // frames that were really on its back — and a disc floating over an edge read as + // detached rather than planted. render_hole_gizmo learned the same thing for its cube. + glsafe(::glEnable(GL_DEPTH_TEST)); + draw_strokes(m_mc_stroke_model, segs, lw, g.roll_undefined ? warn : body); + + // The quadrant: hatched when the roll could not be derived (a full circular face or a + // seam offers no in-plane direction), so the fallback is a mark you cannot miss rather + // than a silent guess. + std::vector> q; + const double qr = R * 0.84; + const int QN = 10; + for (int i = 0; i < QN; ++i) { + const double a0 = (M_PI_2 * i) / QN, a1 = (M_PI_2 * (i + 1)) / QN; + q.emplace_back(Vec2d(qr * std::cos(a0), qr * std::sin(a0)), + Vec2d(qr * std::cos(a1), qr * std::sin(a1))); + } + q.emplace_back(Vec2d(0, 0), Vec2d(qr, 0)); + q.emplace_back(Vec2d(0, 0), Vec2d(0, qr)); + if (!g.roll_undefined) { + for (int i = 1; i < 5; ++i) { // fan lines read as "filled" at any angle + const double a = (M_PI_2 * i) / 5.0; + q.emplace_back(Vec2d(0, 0), Vec2d(qr * std::cos(a), qr * std::sin(a))); + } + // F4: the quadrant collapses to a blob at grazing angles — exactly when the roll + // is hardest to read. A radial tick along +X, extending PAST the disc rim, is what + // survives that: as the disc flattens to a line the sector loses all area, but a + // radial spoke keeps its length and its direction along the one axis that still + // projects. + // + // The alternative on the issue was billboarding the quadrant. Rejected, and not + // on taste: at true grazing the view direction lies IN the connector's plane, so + // every in-plane direction projects onto the same screen line and the roll is + // geometrically unrecoverable. A billboarded quadrant would not recover it — it + // would face the camera and read as a definite orientation that is not the frame's. + // Better to degrade to a direction you can still trust than to draw a confident + // lie. Judge the tick on the rig at a true grazing view before calling F4 closed. + q.emplace_back(Vec2d(R, 0), Vec2d(R * 1.28, 0)); + } + draw_strokes(m_mc_stroke_model, q, lw, g.roll_undefined ? warn : gold); + } + } // end of the disc treatment + + // ---- the axes. Billboarded at the origin: a 3D direction is projected onto the screen + // frame, which is the only way an arrow keeps a readable head at any viewing angle. + SketchPlane bb; bb.origin = g.origin; bb.x_axis = right; bb.y_axis = up; + bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + + auto arrow = [&](const Vec3d& dir, double len, const ColorRGBA& col, bool filled_head) { + const Vec3d tipw = g.origin + dir * len; + const Vec2d tip2((tipw - g.origin).dot(right), (tipw - g.origin).dot(up)); + std::vector> segs; + // Foreshortening: when the axis points at (or away from) the camera it projects to + // nothing and an arrow degenerates into a dot. Draw a ring instead — "pointing at you" + // — rather than silently vanishing, which is what a naive projection does. + if (tip2.norm() < R * 0.28) { + const int N = 24; + const double rr = R * 0.30; + for (int i = 0; i < N; ++i) { + const double a0 = (2.0 * M_PI * i) / N, a1 = (2.0 * M_PI * (i + 1)) / N; + segs.emplace_back(Vec2d(rr * std::cos(a0), rr * std::sin(a0)), + Vec2d(rr * std::cos(a1), rr * std::sin(a1))); + } + draw_strokes(m_mc_stroke_model, segs, lw, col); + return; + } + const Vec2d u = tip2.normalized(); + const Vec2d n(-u.y(), u.x()); + const double as = R * 0.42; + const Vec2d back = tip2 - u * as; + segs.emplace_back(Vec2d(0, 0), back); + segs.emplace_back(tip2, back + n * (as * 0.45)); + segs.emplace_back(tip2, back - n * (as * 0.45)); + if (filled_head) { + // A closed head reads solid; the open one is left as two barbs. At 20-odd pixels + // this is the difference that says "this body travels". + segs.emplace_back(back + n * (as * 0.45), back - n * (as * 0.45)); + segs.emplace_back(back + n * (as * 0.22), tip2); + segs.emplace_back(back - n * (as * 0.22), tip2); + } else { + segs.emplace_back(back + n * (as * 0.45), back - n * (as * 0.45)); + } + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_mc_stroke_model, segs, lw, col); + }; + + if (style_A) { + arrow(X, R * 1.15, ColorRGBA(0.85f, 0.29f, 0.24f, 1.0f), true); + arrow(Y, R * 1.15, ColorRGBA(0.23f, 0.65f, 0.35f, 1.0f), true); + arrow(Z, R * 1.60, blue, true); + } else { + arrow(Z, R * 2.10, body, g.role == 2); // +Z only. Nothing is ever drawn on -Z. + } + } + + // ---- the pair line. Dashed, drawn IN WORLD along the segment joining the two origins, so it + // foreshortens with the model and its length is the gap the mate has still to close. Screen- + // constant dashes like everything else here; the dash pitch opens up on a long span so a mate + // across a large assembly cannot emit thousands of segments. + for (const auto& lnk : m_mate_links) { + const Vec3d d = lnk.second - lnk.first; + const double L = d.norm(); + if (L < 1e-9) continue; + SketchPlane lp; + lp.origin = lnk.first; + lp.x_axis = d / L; + lp.y_axis = lp.x_axis.cross(cam.get_dir_forward().normalized()); + if (lp.y_axis.norm() < 1e-6) lp.y_axis = lp.x_axis.cross(up); // link along the view axis + lp.y_axis.normalize(); + lp.normal = lp.x_axis.cross(lp.y_axis); + m_plane = lp; + + std::vector> segs; + const double dash = 6.0 * upp; + const double step = std::max(dash + 4.0 * upp, L / 400.0); + for (double t = 0.0; t < L; t += step) + segs.emplace_back(Vec2d(t, 0.0), Vec2d(std::min(t + dash, L), 0.0)); + // Depth off: the line's job is to say "these two belong together", and it has to say it + // even when the parts it spans are between the camera and one of the ends. + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_mc_stroke_model, segs, lw, grey); + } + + m_plane = saved; +} + +// --------------------------------------------------------------------------------------------- +// THE FACE TREATMENT of the mate connector (x0kd). The disc + roll quadrant answers +// "where is X" with a shape that has to be learned; a face does not. Face orientation is +// hardwired perception -- a toddler reads a face's roll and verse with no instruction at all -- +// and that is the whole reason this exists. Default ON, switchable in Preferences for users who +// expect the conventional CAD representation. +// +// WHY A RELIEF AND NOT A FLAT DRAWING, which is the non-obvious half. A flat face drawn in the +// connector's plane foreshortens by sin(elevation) and collapses at a grazing view exactly like +// the quadrant it replaces -- measured on the rig, the quadrant falls from 89 lit pixels at 47 +// degrees to 3 at 10 and 0 edge-on. A relief does not: at a grazing angle its SILHOUETTE carries +// the information. The same bear rendered flat vs in relief gives 164 vs 210 lit pixels at 16 +// degrees and 66 vs 120 at 6. So the glyph is a small shaded solid, not an outline. +// +// The geometry is EMITTED from the real part by doc/design/mate-connectors/emit_glyph_table.py, +// not hand-drawn, so the glyph and the printed connector cannot drift apart. Two vertices stand +// above the 3 mm plate in the actual B-rep, which is why the snout here is a tent with one crest +// edge and four flanks drafted at 20 degrees rather than anything more elaborate. +// +// The cheek dot is the handedness mark. Without it the glyph differs from its own mirror by only +// 5-9 % of its lit pixels, which is not enough to read; the dot roughly doubles that and, unlike +// making the eyes uneven, identifies the side from that cheek alone instead of by comparison. +// Emitted by doc/design/mate-connectors/emit_glyph_table.py from bear.step — do not hand-edit. +// Normalised to the part's bounding span and centred: the renderer scales by one radius. +static const Vec2d kBearOutline[] = { // 12 verts, RDP eps 0.030, CCW + {+0.3842, +0.3294}, {+0.3156, +0.4002}, {+0.2424, +0.3294}, + {-0.2524, +0.3294}, {-0.3377, +0.3877}, {-0.3693, +0.3298}, + {-0.3256, +0.2631}, {-0.4893, -0.3337}, {-0.3960, -0.4002}, + {+0.4151, -0.4002}, {+0.5000, -0.3154}, {+0.3156, +0.2631}, +}; +static const Vec2d kBearChin[] = { // the CHIN BAR, flat. The muzzle is relief — see kBearCrest. + {-0.2682, -0.3578}, {+0.2628, -0.3578}, {+0.2237, -0.1786}, +}; +// {cx, cy, r}: two eyes, then the cheek dot that carries handedness (wi3z). +static const Vec3d kBearMarks[] = { + {-0.1997, +0.1760, +0.0590}, + {+0.1947, +0.1760, +0.0590}, + {+0.2797, +0.0760, +0.0380}, +}; +// THE MUZZLE, lifted off the mesh: a tapered wedge, base quad + crest edge, 6 facets. +// This is the only feature standing along +Z and the only one still legible edge-on. +static const double kBearPlateZ = +0.0360; +static const Vec2d kBearSnoutBase[] = { // CCW from the nose end + {-0.0727, -0.2417}, + {+0.0630, -0.2417}, + {+0.0259, +0.1939}, + {-0.0356, +0.1939}, +}; +static const Vec3d kBearCrest[] = { // nose (tall) -> tail (short) + {-0.0048, -0.1793, +0.2073}, + {-0.0048, +0.1605, +0.1279}, +}; + +void DesignSketchTool::render_mate_face(const Vec3d& origin, const Vec3d& X, const Vec3d& Y, + const Vec3d& Z, double R, const ColorRGBA& body) +{ + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d fwd = cam.get_dir_forward().normalized(); + const double S = 2.0 * R; // the table spans 1.0, the disc spans 2R + + // Light fixed in CAMERA space, so orbiting the model does not swing the shading around and + // turn a stable symbol into a flickering one. + const Vec3d light = (-0.35 * right + 0.55 * up - 0.76 * fwd).normalized(); + + auto to_world = [&](const Vec3d& p) { + return origin + X * (p.x() * S) + Y * (p.y() * S) + Z * (p.z() * S); + }; + + struct Facet { std::vector w; ColorRGBA c; double depth; }; + std::vector facets; + auto emit = [&](std::vector pts, const ColorRGBA& base, bool shade) { + if (pts.size() < 3) return; + Facet f; f.w.reserve(pts.size()); + for (const Vec3d& p : pts) f.w.push_back(to_world(p)); + const Vec3d n0 = (f.w[1] - f.w[0]).cross(f.w[2] - f.w[0]); + Vec3d n = Z; + if (n0.norm() > 1e-12) n = n0.normalized(); + if (n.dot(fwd) > 0.0) n = -n; // always take the camera-facing side + double k = 1.0; + if (shade) { + // Ambient floor so a facet turned away still reads as part of the same object rather + // than as a hole punched in it. + k = 0.42 + 0.58 * std::max(0.0, n.dot(light)); + } + f.c = ColorRGBA(float(base.r() * k), float(base.g() * k), float(base.b() * k), base.a()); + double d = 0.0; + for (const Vec3d& p : f.w) d += p.dot(fwd); + f.depth = d / double(f.w.size()); + facets.push_back(std::move(f)); + }; + + const int NO = int(sizeof(kBearOutline) / sizeof(kBearOutline[0])); + const double zp = kBearPlateZ; + + // The plate: sides first so the silhouette exists at a grazing view, then the top. + for (int i = 0; i < NO; ++i) { + const Vec2d& a = kBearOutline[i]; + const Vec2d& b = kBearOutline[(i + 1) % NO]; + emit({ Vec3d(a.x(), a.y(), 0.0), Vec3d(b.x(), b.y(), 0.0), + Vec3d(b.x(), b.y(), zp), Vec3d(a.x(), a.y(), zp) }, body, true); + } + { + std::vector top; + top.reserve(NO); + for (int i = 0; i < NO; ++i) top.emplace_back(kBearOutline[i].x(), kBearOutline[i].y(), zp); + emit(std::move(top), body, true); + } + + // The marks, a hair above the plate so they cannot z-fight it: two eyes then the cheek dot. + const ColorRGBA mark(body.r() * 0.30f, body.g() * 0.30f, body.b() * 0.30f, 1.0f); + const double zm = zp + 0.004; + for (const Vec3d& m : kBearMarks) { + std::vector disc; + const int N = 12; + for (int i = 0; i < N; ++i) { + const double a = (2.0 * M_PI * i) / N; + disc.emplace_back(m.x() + m.z() * std::cos(a), m.y() + m.z() * std::sin(a), zm); + } + emit(std::move(disc), mark, false); + } + { + std::vector chin; + for (const Vec2d& p : kBearChin) chin.emplace_back(p.x(), p.y(), zm); + emit(std::move(chin), mark, false); + } + + // THE MUZZLE, and the two decisions that make it legible rather than merely present. + // + // It is the one feature standing along +Z, so it says which way the connector points, and it + // is all that survives edge-on where a drawing in the plane has nothing left. Its geometry is + // the part's own ridge: crest 29.0 mm, 6.58 mm drop, 13.1 deg, against the 28.3 / 6.61 / 13.1 + // the review measured on the B-rep. Base taken from the mesh, NOT recomputed from + // height*tan(draft) -- that produced a needle, because the real base overhangs the crest at + // both ends and it is the overhang that makes this a wedge rather than a blade. + // + // BUT FIDELITY ALONE FAILS. Scaled honestly the ridge is 11.3 mm on an 83.3 mm face, 13.6 % + // of the width, and at 22-48 px that reads as a scratch -- Tommaso looked at the faithful + // version and could not find the muzzle at all, which is the only test that counts. A glyph + // is a symbol, not a scale model, so it gets two deliberate exaggerations: + // + // COLOUR does the work. In the body tone the muzzle is a grey sliver whichever way it is + // lit; in the accent it is the first thing the eye lands on at every elevation, and at 6 + // degrees it is the ONLY structured thing above the flat line. Measured share of lit + // pixels at 90/16/6 deg: body 14.8/11.3/17.5 %, accent 18.3/19.2/23.9 %. + // WIDTH 1.8x on top of that: 23.5/25.2/31.2 %, and it stops reading as a needle. + // + // The accent is the same gold the disc treatment spends on its roll quadrant, which is + // consistent -- it is this tab's "here is the direction that matters" colour. Polarity is + // still carried by the Z arrow's head, so nothing collides. + { + const ColorRGBA gold(0.93f, 0.66f, 0.09f, 1.0f); + const double widen = 1.8; + const Vec3d& A = kBearCrest[0]; + const Vec3d& B = kBearCrest[1]; + auto base = [&](int i) { + return Vec3d(kBearSnoutBase[i].x() * widen, kBearSnoutBase[i].y(), zp); + }; + const Vec3d nl = base(0), nr = base(1), tr = base(2), tl = base(3); + emit({ nl, tl, B, A }, gold, true); // left flank + emit({ nr, A, B, tr }, gold, true); // right flank + emit({ nl, A, nr }, gold, true); // nose cap, sloped by the base overhang + emit({ tr, B, tl }, gold, true); // tail cap + } + + // Painter's algorithm: depth testing is off for this overlay, so draw order IS the depth. + std::sort(facets.begin(), facets.end(), + [](const Facet& a, const Facet& b) { return a.depth > b.depth; }); + + // draw_fill works in m_plane, so project into a screen-aligned frame at the connector origin + // and hand it flat polygons. The relief survives because the PROJECTION is 3D, not the plane. + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = origin; bb.x_axis = right; bb.y_axis = up; bb.normal = fwd; + m_plane = bb; + glsafe(::glDisable(GL_DEPTH_TEST)); + for (const Facet& f : facets) { + std::vector poly; + poly.reserve(f.w.size()); + for (const Vec3d& p : f.w) poly.emplace_back((p - origin).dot(right), (p - origin).dot(up)); + draw_fill(m_mc_fill_model, poly, f.c); + } + m_plane = saved; +} + +void DesignSketchTool::render_extrude_gizmo() +{ + if (!m_ex_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d fwd = cam.get_dir_forward().normalized(); + const Vec3d base = m_ex_plane.to_world(m_ex_centroid); + const Vec3d ndir = (m_ex_flip ? -1.0 : 1.0) * m_ex_plane.normal.normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + + // Express everything in the billboard frame (origin=base) so it always faces the camera. + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = base; bb.x_axis = right; bb.y_axis = up; bb.normal = fwd; + m_plane = bb; + const ColorRGBA arrowc(1.0f, 0.62f, 0.16f, 1.0f); // CAD amber + + auto draw_arrow = [&](double depth, bool flip_side) { + if (depth <= 1e-6) return; + const Vec3d dirw = (flip_side ? -1.0 : 1.0) * ndir; // world arrow direction + const Vec3d tipw = base + dirw * depth; + const Vec2d tip2((tipw - base).dot(right), (tipw - base).dot(up)); + if (tip2.norm() < 1e-6) return; // axis ~ parallel to view: no arrow + const Vec2d u = tip2.normalized(); + const Vec2d nrm(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.18, th * 0.9); // arrowhead size + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm * (as * 0.5)); + segs.emplace_back(tip2, back - nrm * (as * 0.5)); + draw_strokes(m_ex_arrow_model, segs, std::max(0.7 * upp, 1e-4), arrowc); + DimAnnot a; a.kind = DimType::Distance; a.value = depth; + draw_text(m_line_model, dim_text(a), tip2 + u * (th * 1.4), th, arrowc); + }; + + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_arrow(m_ex_depth, false); + if (m_ex_two_sided) draw_arrow(m_ex_depth2, true); + m_plane = saved; +} + +// Ray vs the arrow segment(s) in world space; `which` = 0 primary, 1 second side. +bool DesignSketchTool::hit_test_extrude_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const +{ + if (!m_ex_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double tol = 7.0 / std::max(cam.get_zoom(), 1e-6); // ~7 px in world units + const Vec3d ndir = (m_ex_flip ? -1.0 : 1.0) * m_ex_plane.normal.normalized(); + const Vec3d base = m_ex_plane.to_world(m_ex_centroid); + double dA = 1e30, dB = 1e30; + if (m_ex_depth > 1e-6) dA = ray_segment_dist3(ro, rd, base, base + ndir * m_ex_depth); + if (m_ex_two_sided && m_ex_depth2 > 1e-6) + dB = ray_segment_dist3(ro, rd, base, base - ndir * m_ex_depth2); + if (dA <= tol && dA <= dB) { which = 0; return true; } + if (dB <= tol) { which = 1; return true; } + return false; +} + +// Drag the arrow handle: closest point on the world arrow axis to the mouse ray (skew-line +// closest-point), projected onto the axis direction -> signed depth (clamped positive). +void DesignSketchTool::drag_extrude_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Vec3d nd = (m_ex_flip ? -1.0 : 1.0) * m_ex_plane.normal.normalized(); + const Vec3d e = (which == 1 ? -1.0 : 1.0) * nd; // axis dir for this arrow + const Vec3d base = m_ex_plane.to_world(m_ex_centroid); + const Vec3d w0 = base - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave depth as-is + const double depth = std::max(0.01, (b * ee - c * dd) / denom); + if (which == 1) m_ex_depth2 = depth; else m_ex_depth = depth; + if (on_extrude_depth_changed) on_extrude_depth_changed(depth, which == 1); +} + +void DesignSketchTool::open_extrude_editor(int which) +{ + if (!on_inline_edit) return; + const double cur = (which == 1) ? m_ex_depth2 : m_ex_depth; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, cur, "", + [this, which](double v) { + const double d = std::max(0.01, v); + if (which == 1) m_ex_depth2 = d; else m_ex_depth = d; + if (on_extrude_depth_changed) on_extrude_depth_changed(d, which == 1); + }, + []() {}); +} + +// ---- Datum-plane resize gizmo (C3) ---------------------------------------------------- +void DesignSketchTool::set_datum_gizmo(const SketchPlane& plane, double usize, double vsize, + const Vec3d& base_origin, const Vec3d& base_normal, + double offset, bool offset_on) +{ + m_dz_active = true; + m_dz_plane = plane; + m_dz_usize = std::max(1.0, usize); + m_dz_vsize = std::max(1.0, vsize); + m_dz_anchor = base_origin; + m_dz_normal = base_normal.normalized(); + m_dz_offset = offset; + m_dz_offset_on = offset_on; +} + +void DesignSketchTool::clear_datum_gizmo() +{ + m_dz_active = false; + m_dz_drag = -1; +} + +// Draw the datum rectangle outline + 4 camera-billboarded edge-midpoint handles. Self-contained +// so it shows even for an uncommitted (not-yet-Confirmed) datum that render_datum_planes can't draw. +void DesignSketchTool::render_datum_gizmo() +{ + if (!m_dz_active) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d vd = cam.get_dir_forward(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double hs = 6.0 * upp; // handle half-size (~6 px) + const double hw = 1.5 * upp; // outline ribbon half-width + const double hu = m_dz_usize * 0.5, hv = m_dz_vsize * 0.5; + const SketchPlane& p = m_dz_plane; + + // Rectangle outline (4 thin camera-facing ribbons). + const Vec3d c[4] = { p.to_world(Vec2d(-hu, -hv)), p.to_world(Vec2d(hu, -hv)), + p.to_world(Vec2d(hu, hv)), p.to_world(Vec2d(-hu, hv)) }; + GLModel::Geometry border; border.format = { EPT::Triangles, EVL::P3 }; + unsigned int bb = 0; + for (int s = 0; s < 4; ++s) { + const Vec3d a = c[s], b = c[(s + 1) & 3]; + Vec3d dir = b - a; if (dir.norm() < 1e-9) continue; dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(up); + if (off.norm() < 1e-9) continue; + off.normalize(); off *= hw; + border.add_vertex((Vec3f)(a + off).cast()); border.add_vertex((Vec3f)(b + off).cast()); + border.add_vertex((Vec3f)(b - off).cast()); border.add_vertex((Vec3f)(a - off).cast()); + border.add_triangle(bb, bb + 1, bb + 2); border.add_triangle(bb, bb + 2, bb + 3); bb += 4; + } + + // 4 edge-midpoint handle squares. + const Vec2d hpos[4] = { Vec2d(hu, 0), Vec2d(-hu, 0), Vec2d(0, hv), Vec2d(0, -hv) }; + GLModel::Geometry handles; handles.format = { EPT::Triangles, EVL::P3 }; + unsigned int hb = 0; + for (int i = 0; i < 4; ++i) { + const Vec3d ctr = p.to_world(hpos[i]); + const Vec3d q0 = ctr - right * hs - up * hs, q1 = ctr + right * hs - up * hs, + q2 = ctr + right * hs + up * hs, q3 = ctr - right * hs + up * hs; + handles.add_vertex((Vec3f)q0.cast()); handles.add_vertex((Vec3f)q1.cast()); + handles.add_vertex((Vec3f)q2.cast()); handles.add_vertex((Vec3f)q3.cast()); + handles.add_triangle(hb, hb + 1, hb + 2); handles.add_triangle(hb, hb + 2, hb + 3); hb += 4; + } + + glsafe(::glDisable(GL_DEPTH_TEST)); + if (bb > 0) { + GLModel m; m.init_from(std::move(border)); + m.set_color(ColorRGBA(1.0f, 0.62f, 0.16f, 0.9f)); // CAD amber + m.render(); + } + if (hb > 0) { + GLModel m; m.init_from(std::move(handles)); + m.set_color(ColorRGBA(1.0f, 0.72f, 0.28f, 1.0f)); + m.render(); + } + + // Offset arrow: a camera-facing ribbon from the base origin along the base normal to the + // datum origin, with a grabbable square at the tip. Drag the tip to set the offset distance. + if (m_dz_offset_on) { + const Vec3d tip = m_dz_anchor + m_dz_normal * m_dz_offset; + Vec3d off = m_dz_normal.cross(vd); + if (off.norm() < 1e-9) off = m_dz_normal.cross(up); + GLModel::Geometry shaft; shaft.format = { EPT::Triangles, EVL::P3 }; + if (off.norm() > 1e-9 && (tip - m_dz_anchor).norm() > 1e-9) { + off.normalize(); off *= hw; + shaft.add_vertex((Vec3f)(m_dz_anchor + off).cast()); + shaft.add_vertex((Vec3f)(tip + off).cast()); + shaft.add_vertex((Vec3f)(tip - off).cast()); + shaft.add_vertex((Vec3f)(m_dz_anchor - off).cast()); + shaft.add_triangle(0, 1, 2); shaft.add_triangle(0, 2, 3); + GLModel sm; sm.init_from(std::move(shaft)); + sm.set_color(ColorRGBA(0.30f, 0.78f, 1.0f, 0.95f)); // cyan offset axis + sm.render(); + } + GLModel::Geometry tipsq; tipsq.format = { EPT::Triangles, EVL::P3 }; + const Vec3d t0 = tip - right * hs - up * hs, t1 = tip + right * hs - up * hs, + t2 = tip + right * hs + up * hs, t3 = tip - right * hs + up * hs; + tipsq.add_vertex((Vec3f)t0.cast()); tipsq.add_vertex((Vec3f)t1.cast()); + tipsq.add_vertex((Vec3f)t2.cast()); tipsq.add_vertex((Vec3f)t3.cast()); + tipsq.add_triangle(0, 1, 2); tipsq.add_triangle(0, 2, 3); + GLModel tm; tm.init_from(std::move(tipsq)); + tm.set_color(ColorRGBA(0.45f, 0.86f, 1.0f, 1.0f)); + tm.render(); + } +} + +bool DesignSketchTool::hit_test_datum_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const +{ + if (!m_dz_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double tol = 9.0 / std::max(cam.get_zoom(), 1e-6); // ~9 px in world units + const double hu = m_dz_usize * 0.5, hv = m_dz_vsize * 0.5; + const Vec2d hpos[4] = { Vec2d(hu, 0), Vec2d(-hu, 0), Vec2d(0, hv), Vec2d(0, -hv) }; + double best = tol; which = -1; + for (int i = 0; i < 4; ++i) { + const Vec3d pt = m_dz_plane.to_world(hpos[i]); + const Vec3d w = pt - ro; + const double t = w.dot(rd) / std::max(rd.dot(rd), 1e-12); + const double d = (w - rd * t).norm(); + if (d < best) { best = d; which = i; } + } + if (m_dz_offset_on) { // offset arrow tip = handle 4 + const Vec3d pt = m_dz_anchor + m_dz_normal * m_dz_offset; + const Vec3d w = pt - ro; + const double t = w.dot(rd) / std::max(rd.dot(rd), 1e-12); + const double d = (w - rd * t).norm(); + if (d < best) { best = d; which = 4; } + } + return which >= 0; +} + +// Drag a handle: closest point of the mouse ray to the plane axis (u or v) through the origin, +// |param| -> new half-extent, doubled to the full size. +void DesignSketchTool::drag_datum_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + if (which == 4) { // offset arrow: drag along base normal + const Vec3d e = m_dz_normal; // signed offset, may go negative + const Vec3d w0 = m_dz_anchor - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ normal: leave offset as-is + m_dz_offset = (b * ee - c * dd) / denom; // signed distance along the normal + m_dz_plane.origin = m_dz_anchor + m_dz_normal * m_dz_offset; // rectangle follows live + if (on_datum_offset_changed) on_datum_offset_changed(m_dz_offset); + return; + } + const bool uaxis = (which == 0 || which == 1); + const Vec3d e = (uaxis ? m_dz_plane.x_axis : m_dz_plane.y_axis).normalized(); + const Vec3d base = m_dz_plane.origin; + const Vec3d w0 = base - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave size as-is + const double s = (b * ee - c * dd) / denom; // signed coord along e of closest pt + const double size = std::max(2.0, 2.0 * std::abs(s)); + if (uaxis) m_dz_usize = size; else m_dz_vsize = size; + if (on_datum_size_changed) on_datum_size_changed(m_dz_usize, m_dz_vsize); +} + +// ---- Helix gizmo (plane-anchored curve + 3 drag handles) -------------------------------- +void DesignSketchTool::set_helix_gizmo(const SketchPlane& plane, double radius, double pitch, + double height, double taper, bool left_handed) +{ + m_hx_active = true; + m_hx_plane = plane; + m_hx_radius = radius; + m_hx_pitch = pitch; + m_hx_height = height; + m_hx_taper = taper; + m_hx_left = left_handed; +} + +void DesignSketchTool::clear_helix_gizmo() +{ + m_hx_active = false; + m_hx_drag = -1; +} + +// Curve point at parameter t (t in turns): angle 2*pi*t, negated when left-handed, rising one +// pitch per turn along the plane normal. +// +// Taper is an ANGLE IN DEGREES and must be read the way the kernel reads it. CadDocument's +// helix_spine() builds a Geom_ConicalSurface of half-angle taper and computes the top radius as +// R + H*tan(taper), so the radius grows with the HEIGHT RISEN, not as a fraction of R consumed +// over the turn count. Getting that wrong draws a preview that collapses to a point for any +// non-zero taper while the committed feature is fine — a preview that lies is worse than none. +Vec3d DesignSketchTool::helix_point(double t) const +{ + const Vec3d O = m_hx_plane.origin; + const Vec3d n = m_hx_plane.normal.normalized(); + const Vec3d u = m_hx_plane.x_axis.normalized(); + const Vec3d v = m_hx_plane.y_axis.normalized(); + const double a = (m_hx_left ? -1.0 : 1.0) * 2.0 * M_PI * t; + const double z = m_hx_pitch * t; // height risen at this parameter + double rt = m_hx_radius + z * std::tan(m_hx_taper * M_PI / 180.0); + // The kernel REFUSES a taper that drives the radius negative before the full height; the + // preview shows it collapsing instead, so the user can see which value did it. + if (rt < 0.0) rt = 0.0; + return O + u * (rt * std::cos(a)) + v * (rt * std::sin(a)) + n * z; +} + +// Draw the live helix as a connected camera-facing ribbon, a dim axis line, and three square +// handles (radius on the base circle, height on the axis top, pitch at the end of the first turn). +void DesignSketchTool::render_helix_gizmo() +{ + if (!m_hx_active) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d vd = cam.get_dir_forward(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double hs = 6.0 * upp; // handle half-size (~6 px) + const double hw = 1.5 * upp; // ribbon half-width + const Vec3d O = m_hx_plane.origin; + const Vec3d n = m_hx_plane.normal.normalized(); + const double turns = m_hx_pitch > 1e-9 ? m_hx_height / m_hx_pitch : 0.0; + + // Curve ribbon: connected thin camera-facing quads over t in [0, turns]. + const int segs = std::min(2048, std::max(48, int(turns * 32.0))); + GLModel::Geometry curve; curve.format = { EPT::Triangles, EVL::P3 }; + unsigned int cb = 0; + auto add_seg = [&](const Vec3d& a, const Vec3d& b) { + Vec3d dir = b - a; if (dir.norm() < 1e-9) return; dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(up); + if (off.norm() < 1e-9) return; + off.normalize(); off *= hw; + curve.add_vertex((Vec3f)(a + off).cast()); curve.add_vertex((Vec3f)(b + off).cast()); + curve.add_vertex((Vec3f)(b - off).cast()); curve.add_vertex((Vec3f)(a - off).cast()); + curve.add_triangle(cb, cb + 1, cb + 2); curve.add_triangle(cb, cb + 2, cb + 3); cb += 4; + }; + for (int i = 0; i < segs; ++i) + add_seg(helix_point(turns * i / segs), helix_point(turns * (i + 1) / segs)); + + // Axis: a dim line from the plane origin to the top of the helix. + const Vec3d top = O + n * m_hx_height; + GLModel::Geometry axis; axis.format = { EPT::Triangles, EVL::P3 }; + { + Vec3d dir = top - O; + if (dir.norm() > 1e-9) { + dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(up); + if (off.norm() > 1e-9) { + off.normalize(); off *= hw * 0.6; + axis.add_vertex((Vec3f)(O + off).cast()); axis.add_vertex((Vec3f)(top + off).cast()); + axis.add_vertex((Vec3f)(top - off).cast()); axis.add_vertex((Vec3f)(O - off).cast()); + axis.add_triangle(0, 1, 2); axis.add_triangle(0, 2, 3); + } + } + } + + // Three handles: 0=radius (t=0), 1=height (axis top), 2=pitch (end of first turn, or the + // whole curve if shorter than one turn so the handle never floats off a missing curve). + const Vec3d hpts[3] = { helix_point(0.0), top, + helix_point(m_hx_height < m_hx_pitch ? turns : 1.0) }; + const ColorRGBA hcol[3] = { ColorRGBA(1.0f, 0.72f, 0.28f, 1.0f), // radius — amber + ColorRGBA(0.45f, 0.86f, 1.0f, 1.0f), // height — cyan + ColorRGBA(0.30f, 0.80f, 0.34f, 1.0f) }; // pitch — green + const ColorRGBA hot(1.0f, 0.85f, 0.2f, 1.0f); + + glsafe(::glDisable(GL_DEPTH_TEST)); + if (cb > 0) { + GLModel m; m.init_from(std::move(curve)); + m.set_color(ColorRGBA(1.0f, 0.62f, 0.16f, 0.9f)); // CAD amber helix curve + m.render(); + } + if (!axis.vertices.empty()) { + GLModel m; m.init_from(std::move(axis)); + m.set_color(ColorRGBA(0.42f, 0.46f, 0.52f, 0.55f)); // dim grey axis + m.render(); + } + for (int i = 0; i < 3; ++i) { + const Vec3d ctr = hpts[i]; + const Vec3d q0 = ctr - right * hs - up * hs, q1 = ctr + right * hs - up * hs, + q2 = ctr + right * hs + up * hs, q3 = ctr - right * hs + up * hs; + GLModel::Geometry sq; sq.format = { EPT::Triangles, EVL::P3 }; + sq.add_vertex((Vec3f)q0.cast()); sq.add_vertex((Vec3f)q1.cast()); + sq.add_vertex((Vec3f)q2.cast()); sq.add_vertex((Vec3f)q3.cast()); + sq.add_triangle(0, 1, 2); sq.add_triangle(0, 2, 3); + GLModel m; m.init_from(std::move(sq)); + m.set_color(m_hx_drag == i ? hot : hcol[i]); + m.render(); + } +} + +bool DesignSketchTool::hit_test_helix_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const +{ + if (!m_hx_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double tol = 9.0 / std::max(cam.get_zoom(), 1e-6); // ~9 px in world units + const Vec3d O = m_hx_plane.origin; + const Vec3d n = m_hx_plane.normal.normalized(); + const double turns = m_hx_pitch > 1e-9 ? m_hx_height / m_hx_pitch : 0.0; + const Vec3d hpts[3] = { helix_point(0.0), O + n * m_hx_height, + helix_point(m_hx_height < m_hx_pitch ? turns : 1.0) }; + double best = tol; which = -1; + for (int i = 0; i < 3; ++i) { + const Vec3d w = hpts[i] - ro; + const double t = w.dot(rd) / std::max(rd.dot(rd), 1e-12); + const double d = (w - rd * t).norm(); + if (d < best) { best = d; which = i; } + } + return which >= 0; +} + +// Drag a handle: radius = cursor's in-plane distance from the origin, height/pitch = the signed +// distance of the cursor's closest axis point. All fire the full (radius, pitch, height) triple. +void DesignSketchTool::drag_helix_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const SketchPlane& p = m_hx_plane; + const Vec3d O = p.origin, n = p.normal.normalized(); + + if (which == 0) { // radius: in-plane distance from O + const Vec2d lp = p.project(ro, rd); + m_hx_radius = std::max(0.01, lp.norm()); + } else { // height/pitch: signed distance along n + const Vec3d e = n; + const Vec3d w0 = O - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave value as-is + const double s = (b * ee - c * dd) / denom; // signed distance along the axis + if (which == 1) m_hx_height = std::max(0.0, s); + else m_hx_pitch = std::max(0.01, s); // zero/negative pitch divides by zero + } + if (on_helix_changed) on_helix_changed(m_hx_radius, m_hx_pitch, m_hx_height); +} + +// ---- Rib thickness gizmo (in-plane slab footprint + 2 symmetric handles) ----------------- +void DesignSketchTool::set_rib_gizmo(const SketchPlane& plane, const Vec2d& p0, const Vec2d& p1, + double thickness) +{ + m_rb_active = true; + m_rb_plane = plane; + m_rb_p0 = p0; + m_rb_p1 = p1; + m_rb_thickness = thickness; +} + +void DesignSketchTool::clear_rib_gizmo() +{ + m_rb_active = false; + m_rb_drag = -1; +} + +// Resolve the rib line's in-plane frame: unit direction d, perpendicular perp, midpoint, and +// half-thickness. A degenerate line (zero length) has no direction to grow a slab perpendicular +// to — return false so the caller draws nothing and never divides by zero. +static bool rib_frame(const Vec2d& p0, const Vec2d& p1, double thickness, + Vec2d& d, Vec2d& perp, Vec2d& mid, double& half) +{ + const Vec2d seg = p1 - p0; + const double len = seg.norm(); + if (len < 1e-9) return false; + d = seg / len; + perp = Vec2d(-d.y(), d.x()); + mid = 0.5 * (p0 + p1); + half = thickness * 0.5; + return true; +} + +// Draw the rib slab's actual footprint (the rectangle p0±perp·half, p1±perp·half) as a thin +// closed ribbon plus two square handles at mid ± perp·half. Both handles sit at half-thickness, +// so a drag on either expresses the full thickness symmetrically. +void DesignSketchTool::render_rib_gizmo() +{ + if (!m_rb_active) return; + Vec2d d, perp, mid; double half; + if (!rib_frame(m_rb_p0, m_rb_p1, m_rb_thickness, d, perp, mid, half)) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d vd = cam.get_dir_forward(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double hs = 6.0 * upp; // handle half-size (~6 px) + const double hw = 1.5 * upp; // ribbon half-width + + // Slab footprint outline (4 thin camera-facing ribbons). + const Vec3d c[4] = { m_rb_plane.to_world(m_rb_p0 + perp * half), + m_rb_plane.to_world(m_rb_p1 + perp * half), + m_rb_plane.to_world(m_rb_p1 - perp * half), + m_rb_plane.to_world(m_rb_p0 - perp * half) }; + GLModel::Geometry border; border.format = { EPT::Triangles, EVL::P3 }; + unsigned int bb = 0; + for (int s = 0; s < 4; ++s) { + const Vec3d a = c[s], b = c[(s + 1) & 3]; + Vec3d dir = b - a; if (dir.norm() < 1e-9) continue; dir.normalize(); + Vec3d off = dir.cross(vd); + if (off.norm() < 1e-9) off = dir.cross(up); + if (off.norm() < 1e-9) continue; + off.normalize(); off *= hw; + border.add_vertex((Vec3f)(a + off).cast()); border.add_vertex((Vec3f)(b + off).cast()); + border.add_vertex((Vec3f)(b - off).cast()); border.add_vertex((Vec3f)(a - off).cast()); + border.add_triangle(bb, bb + 1, bb + 2); border.add_triangle(bb, bb + 2, bb + 3); bb += 4; + } + + // Two handles: 0 = +perp side, 1 = -perp side (both at half-thickness). + const Vec3d hpts[2] = { m_rb_plane.to_world(mid + perp * half), + m_rb_plane.to_world(mid - perp * half) }; + const ColorRGBA hot(1.0f, 0.85f, 0.2f, 1.0f); + + glsafe(::glDisable(GL_DEPTH_TEST)); + if (bb > 0) { + GLModel m; m.init_from(std::move(border)); + m.set_color(ColorRGBA(1.0f, 0.62f, 0.16f, 0.9f)); // CAD amber slab footprint + m.render(); + } + for (int i = 0; i < 2; ++i) { + const Vec3d ctr = hpts[i]; + const Vec3d q0 = ctr - right * hs - up * hs, q1 = ctr + right * hs - up * hs, + q2 = ctr + right * hs + up * hs, q3 = ctr - right * hs + up * hs; + GLModel::Geometry sq; sq.format = { EPT::Triangles, EVL::P3 }; + sq.add_vertex((Vec3f)q0.cast()); sq.add_vertex((Vec3f)q1.cast()); + sq.add_vertex((Vec3f)q2.cast()); sq.add_vertex((Vec3f)q3.cast()); + sq.add_triangle(0, 1, 2); sq.add_triangle(0, 2, 3); + GLModel m; m.init_from(std::move(sq)); + m.set_color(m_rb_drag == i ? hot : ColorRGBA(0.30f, 0.80f, 0.34f, 1.0f)); // green + m.render(); + } +} + +bool DesignSketchTool::hit_test_rib_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const +{ + if (!m_rb_active) return false; + Vec2d d, perp, mid; double half; + if (!rib_frame(m_rb_p0, m_rb_p1, m_rb_thickness, d, perp, mid, half)) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double tol = 9.0 / std::max(cam.get_zoom(), 1e-6); // ~9 px in world units + const Vec3d hpts[2] = { m_rb_plane.to_world(mid + perp * half), + m_rb_plane.to_world(mid - perp * half) }; + double best = tol; which = -1; + for (int i = 0; i < 2; ++i) { + const Vec3d w = hpts[i] - ro; + const double t = w.dot(rd) / std::max(rd.dot(rd), 1e-12); + const double dd = (w - rd * t).norm(); + if (dd < best) { best = dd; which = i; } + } + return which >= 0; +} + +// Drag a handle: project the cursor ray onto the rib plane (the same call the helix radius drag +// uses), take the perpendicular distance from the rib LINE to that point, and set the thickness +// to twice that distance — the slab is centred on the line and the handle sits at half-thickness. +void DesignSketchTool::drag_rib_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + (void)which; // both handles behave identically: a drag on either sets the full thickness + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + Vec2d d, perp, mid; double half; + if (!rib_frame(m_rb_p0, m_rb_p1, m_rb_thickness, d, perp, mid, half)) return; + const Vec2d lp = m_rb_plane.project(ro, rd); + const Vec2d w = lp - m_rb_p0; + const double dist = std::abs(w.x() * d.y() - w.y() * d.x()); // |cross(w, d)| = perp distance + m_rb_thickness = std::max(0.01, 2.0 * dist); // ×2: centred slab, handle at half + if (on_rib_thickness_changed) on_rib_thickness_changed(m_rb_thickness); +} + +// ---- Reference/base planes (Onshape-style default planes) ----------------------------- +void DesignSketchTool::set_base_pick(std::vector planes, std::vector bases, + std::vector labels) +{ + m_dbp_active = !planes.empty(); + m_dbp_planes = std::move(planes); + m_dbp_base = std::move(bases); + m_dbp_labels = std::move(labels); + if (m_dbp_hover >= int(m_dbp_planes.size())) m_dbp_hover = -1; +} + +void DesignSketchTool::clear_base_pick() +{ + m_dbp_active = false; + m_dbp_planes.clear(); + m_dbp_base.clear(); + m_dbp_labels.clear(); + m_dbp_hover = -1; +} + +// Reference planes sit INSIDE the bed. They used to be 0.6 * the bed's larger side, i.e. a square +// 1.2x the plate, and three of them are drawn with depth testing off — so they painted over the +// plate grid from edge to edge and the bed simply was not readable any more. "The planes hide the +// bed", reported exactly that way. Small enough to leave the grid legible around them is also the +// Onshape look this was reaching for: a modest square at the origin, not a tablecloth. +double DesignSketchTool::dbp_half_extent() const +{ + double half = 75.0; + if (auto* pl = wxGetApp().plater()) { + const BoundingBoxf bb = pl->build_volume().bounding_volume2d(); + const double w = bb.max.x() - bb.min.x(), d = bb.max.y() - bb.min.y(); + if (w > 1.0 && d > 1.0) half = 0.3 * std::max(w, d); + } + return half; +} + +// Draw the reference planes as large translucent labelled squares; the hovered one brightens. +void DesignSketchTool::render_base_pick() +{ + if (!m_dbp_active || m_dbp_planes.empty()) return; + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const double H = dbp_half_extent(); + // Onshape-ish per-plane tints: XY blue, XZ green, YZ red (keyed by base index 0/1/2; datums grey). + auto tint = [](int base, bool hot) -> ColorRGBA { + float a = hot ? 0.10f : 0.047f; // base planes kept faint (reduced ~2/3 from 0.30/0.14) + if (base == 0) return ColorRGBA(0.30f, 0.55f, 0.95f, a); + if (base == 1) return ColorRGBA(0.35f, 0.80f, 0.45f, a); + if (base == 2) return ColorRGBA(0.92f, 0.42f, 0.42f, a); + return ColorRGBA(0.70f, 0.72f, 0.78f, a); + }; + glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glDisable(GL_CULL_FACE)); + glsafe(::glEnable(GL_BLEND)); // alpha is ignored without this + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + const SketchPlane saved_plane = m_plane; + for (size_t i = 0; i < m_dbp_planes.size(); ++i) { + const SketchPlane& p = m_dbp_planes[i]; + const Vec3d q0 = p.to_world(Vec2d(-H, -H)), q1 = p.to_world(Vec2d(H, -H)), + q2 = p.to_world(Vec2d(H, H)), q3 = p.to_world(Vec2d(-H, H)); + GLModel::Geometry quad; quad.format = { EPT::Triangles, EVL::P3 }; + quad.add_vertex((Vec3f)q0.cast()); quad.add_vertex((Vec3f)q1.cast()); + quad.add_vertex((Vec3f)q2.cast()); quad.add_vertex((Vec3f)q3.cast()); + quad.add_triangle(0, 1, 2); quad.add_triangle(0, 2, 3); + GLModel m; m.init_from(std::move(quad)); + const bool hot = (int(i) == m_dbp_hover); + const int base = (i < m_dbp_base.size()) ? m_dbp_base[i] : -1; + m.set_color(tint(base, hot)); + m.render(); + + // Label near the top-left corner, drawn in the plane (draw_text lifts through m_plane). + if (i < m_dbp_labels.size() && !m_dbp_labels[i].empty()) { + m_plane = p; + const double th = H * 0.10; + const ColorRGBA lc = tint(base, true); ColorRGBA lcs(lc.r(), lc.g(), lc.b(), 1.0f); + draw_text(m_line_model, m_dbp_labels[i], Vec2d(-H + th * 2.0, H - th * 1.6), th, lcs); + } + } + m_plane = saved_plane; // draw_text renders each label immediately (draw_strokes self-renders) + glsafe(::glDisable(GL_BLEND)); +} + +// Ray-pick the reference planes: intersect the mouse ray with each plane, keep hits inside the +// square, return the index of the nearest by |t|. -1 on miss. +int DesignSketchTool::hit_test_base_pick(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_dbp_active) return -1; + const double H = dbp_half_extent(); + + // THE LABEL WINS, and it has to. Each plane's name is a screen-space chip centred on its + // own in-plane anchor, and it is the one part of a base plane a user aims at deliberately — + // the quads are near-transparent and overlap everywhere. Ray-casting the quads alone made + // the labels pure decoration: on a fresh document at 1920x1060, clicking "XY" reported + // "XZ plane selected", because the XZ quad happens to sit in front at that pixel. Nothing + // about the click was ambiguous to the user; they clicked the word XY. + // Anchor and text height must track render_base_pick's, which is where they are drawn. + const Camera& cam = wxGetApp().plater()->get_camera(); + const double th = H * 0.10; + const Vec2d anchor(-H + th * 2.0, H - th * 1.6); + int lbest = -1; double lbest_d = 1e30; + for (size_t i = 0; i < m_dbp_planes.size(); ++i) { + if (i >= m_dbp_labels.size() || m_dbp_labels[i].empty()) continue; + const wxPoint sp = world_to_screen_px(cam, m_dbp_planes[i].to_world(anchor)); + if (sp.x < 0 && sp.y < 0) continue; // behind the camera + const double dx = std::abs(double(evt.GetX() - sp.x)); + const double dy = std::abs(double(evt.GetY() - sp.y)); + // Chip half-extents in px, scaled like the label itself. Generous rather than tight: + // missing the text and silently selecting a different plane is the failure being fixed. + const double hw = (9.0 + 5.0 * double(m_dbp_labels[i].size())) * double(m_render_scale); + const double hh = 11.0 * double(m_render_scale); + if (dx > hw || dy > hh) continue; + const double d = dx * dx + dy * dy; // nearest label if chips overlap + if (d < lbest_d) { lbest_d = d; lbest = int(i); } + } + if (lbest >= 0) return lbest; + + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + int best = -1; double best_t = 1e30; + for (size_t i = 0; i < m_dbp_planes.size(); ++i) { + const SketchPlane& p = m_dbp_planes[i]; + const double dn = rd.dot(p.normal); + if (std::abs(dn) < 1e-9) continue; // ray parallel to plane + const double t = (p.origin - ro).dot(p.normal) / dn; + if (t < 0) continue; // behind the camera + const Vec3d hit = ro + rd * t; + const Vec3d d = hit - p.origin; + if (std::abs(d.dot(p.x_axis)) > H || std::abs(d.dot(p.y_axis)) > H) continue; + if (t < best_t) { best_t = t; best = int(i); } + } + return best; +} + +// ---- Move-body gizmo (M5) ------------------------------------------------------------- +void DesignSketchTool::set_move_gizmo(int body, const Vec3d& pivot, const Transform3d& base_xform, + double body_radius) +{ + m_mv_active = true; + m_mv_body = body; + m_mv_base = pivot; // body's world centroid at Move-open = rotation pivot + m_mv_base_xform = base_xform; // pose the deltas compose onto + m_mv_offset = Vec3d::Zero(); + m_mv_rot = Eigen::Matrix3d::Identity(); + m_mv_drag = -1; + m_mv_radius = std::max(body_radius, 0.0); +} + +// Gizmo arm length in world mm. Orca's Prepare gizmos size themselves from the selection's +// bounding sphere (GLGizmoRotate3D: m_radius = Offset + sphere radius) so the handles always sit +// clear of the object; a fixed screen-size arm instead collapsed into a tangle buried inside a +// large solid, which is why the rotation rings read as "missing". Same idea here, with a +// screen-space floor so the gizmo stays grabbable on a tiny body or when zoomed far out. +double DesignSketchTool::move_gizmo_arm(const Camera& cam) const +{ + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double screen_min = 70.0 * upp; // never smaller than the old fixed size + return std::max(screen_min, m_mv_radius * 1.25); // 25% clear of the body surface +} + +void DesignSketchTool::clear_move_gizmo() +{ + m_mv_active = false; + m_mv_drag = -1; + m_mv_body = -1; + m_mv_offset = Vec3d::Zero(); + m_mv_rot = Eigen::Matrix3d::Identity(); +} + +// Final body transform = translate(delta) then rotate(delta, about pivot) on the open pose. +Transform3d DesignSketchTool::compose_move_xform() const +{ + const Vec3d p = m_mv_base; + Transform3d R = Transform3d::Identity(); + R.linear() = m_mv_rot; + const Transform3d rot_about_pivot = + Transform3d(Eigen::Translation3d(p)) * R * Transform3d(Eigen::Translation3d(-p)); + return Transform3d(Eigen::Translation3d(m_mv_offset)) * rot_about_pivot * m_mv_base_xform; +} + +// World axis `e` of ring `axis` plus an in-plane orthonormal basis (u,v). +void DesignSketchTool::ring_basis(int axis, Vec3d& e, Vec3d& u, Vec3d& v) const +{ + switch (axis) { + case 0: e = Vec3d::UnitX(); u = Vec3d::UnitY(); v = Vec3d::UnitZ(); break; + case 1: e = Vec3d::UnitY(); u = Vec3d::UnitZ(); v = Vec3d::UnitX(); break; + default:e = Vec3d::UnitZ(); u = Vec3d::UnitX(); v = Vec3d::UnitY(); break; + } +} + +// Three world-axis arrows (X red / Y green / Z blue) from the body centroid + current +// offset, billboarded into a screen-facing frame like the extrude depth arrow. +void DesignSketchTool::render_move_gizmo() +{ + if (!m_mv_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const Vec3d fwd = cam.get_dir_forward().normalized(); + const Vec3d anchor = m_mv_base + m_mv_offset; + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const double L = move_gizmo_arm(cam); // scales with the body (see move_gizmo_arm) + + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = anchor; bb.x_axis = right; bb.y_axis = up; bb.normal = fwd; + m_plane = bb; + + const Vec3d axes[3] = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() }; + const ColorRGBA cols[3] = { ColorRGBA(0.92f, 0.28f, 0.28f, 1.0f), // X red + ColorRGBA(0.30f, 0.80f, 0.34f, 1.0f), // Y green + ColorRGBA(0.32f, 0.55f, 0.95f, 1.0f) }; // Z blue + + glsafe(::glDisable(GL_DEPTH_TEST)); + for (int a = 0; a < 3; ++a) { + const Vec3d tipw = anchor + axes[a] * L; + const Vec2d tip2((tipw - anchor).dot(right), (tipw - anchor).dot(up)); + if (tip2.norm() < 1e-6) continue; // axis ~parallel to view: skip + const Vec2d u = tip2.normalized(); + const Vec2d nrm(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm * (as * 0.5)); + segs.emplace_back(tip2, back - nrm * (as * 0.5)); + draw_strokes(m_mv_arrow_model, segs, std::max(0.7 * upp, 1e-4), cols[a]); + const double off = m_mv_offset[a]; + if (std::abs(off) > 1e-4) { + DimAnnot da; da.kind = DimType::Distance; da.value = std::abs(off); + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, cols[a]); + } + } + m_plane = saved; + + // Three world-axis rotation rings (X/Y/Z), each a circle in the plane perpendicular to + // its axis through the gizmo anchor — drag a ring to rotate the body about that axis. + const double R = 0.83 * move_gizmo_arm(cam); // rings just inside the arrow tips + for (int a = 0; a < 3; ++a) { + Vec3d e, u, v; ring_basis(a, e, u, v); + SketchPlane rp; rp.origin = anchor; rp.x_axis = u; rp.y_axis = v; rp.normal = e; + m_plane = rp; + std::vector> segs; + const int N = 48; + Vec2d prev(R, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = 2.0 * M_PI * double(i) / double(N); + const Vec2d cur(R * std::cos(t), R * std::sin(t)); + segs.emplace_back(prev, cur); prev = cur; + } + draw_strokes(m_mv_arrow_model, segs, std::max(0.55 * upp, 1e-4), cols[a]); + } + m_plane = saved; +} + +// Ray vs each world-axis arrow segment; nearest within ~7 px wins. +bool DesignSketchTool::hit_test_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const +{ + if (!m_mv_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double L = move_gizmo_arm(cam); // must match render_move_gizmo + const Vec3d anchor = m_mv_base + m_mv_offset; + const Vec3d axes[3] = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() }; + int best = -1; double bestd = 7.0 * upp; // ~7 px tolerance + for (int a = 0; a < 3; ++a) { + const double d = ray_segment_dist3(ro, rd, anchor, anchor + axes[a] * L); + if (d <= bestd) { bestd = d; best = a; } + } + if (best < 0) return false; + axis = best; return true; +} + +// Skew-line closest point of the mouse ray to the axis line through the ORIGINAL centroid +// -> signed offset along that axis (no clamp; a body can move either way). +void DesignSketchTool::drag_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis) +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Vec3d axes[3] = { Vec3d::UnitX(), Vec3d::UnitY(), Vec3d::UnitZ() }; + const Vec3d e = axes[axis]; + const Vec3d w0 = m_mv_base - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave offset as-is + m_mv_offset[axis] = (b * ee - c * dd) / denom; + if (on_body_move_changed) on_body_move_changed(m_mv_body, compose_move_xform()); +} + +void DesignSketchTool::open_move_editor(int axis) +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, m_mv_offset[axis], "", + [this, axis](double v) { + m_mv_offset[axis] = v; + if (on_body_move_changed) on_body_move_changed(m_mv_body, compose_move_xform()); + }, + []() {}); +} + +// Ray vs each rotation ring (sampled polyline); nearest within ~7 px wins -> axis 0/1/2. +bool DesignSketchTool::hit_test_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const +{ + if (!m_mv_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double R = 0.83 * move_gizmo_arm(cam); // rings just inside the arrow tips + const Vec3d anchor = m_mv_base + m_mv_offset; + int best = -1; double bestd = 7.0 * upp; + const int N = 48; + for (int a = 0; a < 3; ++a) { + Vec3d e, u, v; ring_basis(a, e, u, v); + Vec3d prev = anchor + R * u; + for (int i = 1; i <= N; ++i) { + const double t = 2.0 * M_PI * double(i) / double(N); + const Vec3d cur = anchor + R * (std::cos(t) * u + std::sin(t) * v); + const double d = ray_segment_dist3(ro, rd, prev, cur); + if (d <= bestd) { bestd = d; best = a; } + prev = cur; + } + } + if (best < 0) return false; + axis = best; return true; +} + +// Intersect the mouse ray with ring `axis`'s plane through the anchor -> in-plane angle. +bool DesignSketchTool::arc_mouse_angle(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis, double& ang) const +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + Vec3d e, u, v; ring_basis(axis, e, u, v); + const Vec3d p = m_mv_base + m_mv_offset; + const double denom = rd.dot(e); + if (std::abs(denom) < 1e-9) return false; // ray ∥ ring plane + const Vec3d hit = ro + ((p - ro).dot(e) / denom) * rd; + const Vec3d d = hit - p; + ang = std::atan2(d.dot(v), d.dot(u)); + return true; +} + +// Drag a ring -> rotate the body about that world axis by (mouse angle - grab angle). +void DesignSketchTool::drag_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis) +{ + double ang; + if (!arc_mouse_angle(canvas, evt, axis, ang)) return; + Vec3d e, u, v; ring_basis(axis, e, u, v); + const double delta = ang - m_mv_arc_a0; + m_mv_rot = Eigen::AngleAxisd(delta, e).toRotationMatrix() * m_mv_rot_start; + if (on_body_move_changed) on_body_move_changed(m_mv_body, compose_move_xform()); +} + +// ---- Fillet/Chamfer radius gizmo ------------------------------------------------------ +// Anchor a single radius arrow at the picked edge midpoint (m_sel_edge_pts is already in world +// space, body-transformed), perpendicular to the edge and pointing away from the body centroid — +// the natural outward direction a fillet/chamfer grows. +bool DesignSketchTool::set_fillet_gizmo(const Vec3d& body_centroid, double radius) +{ + if (m_sel_edge_pts.size() < 2) { m_fl_active = false; return false; } + const size_t n = m_sel_edge_pts.size(); + // True geometric midpoint along the edge: a straight edge often samples to just its two + // endpoints, so the middle INDEX would land on an end. Walk the polyline to its half-length. + double total = 0.0; + for (size_t i = 1; i < n; ++i) total += (m_sel_edge_pts[i] - m_sel_edge_pts[i - 1]).norm(); + m_fl_anchor = m_sel_edge_pts[0]; + Vec3d t = m_sel_edge_pts[n - 1] - m_sel_edge_pts[0]; + const double half = 0.5 * total; + double acc = 0.0; + for (size_t i = 1; i < n; ++i) { + const Vec3d seg = m_sel_edge_pts[i] - m_sel_edge_pts[i - 1]; + const double L = seg.norm(); + if (acc + L >= half && L > 1e-12) { + m_fl_anchor = m_sel_edge_pts[i - 1] + seg * ((half - acc) / L); + t = seg; + break; + } + acc += L; + } + if (t.norm() < 1e-9) return false; + t.normalize(); + Vec3d r = m_fl_anchor - body_centroid; // radial offset from the body centre + r -= r.dot(t) * t; // strip the along-edge component + if (r.norm() < 1e-6) { // edge passes through the centroid + r = t.cross(Vec3d::UnitZ()); + if (r.norm() < 1e-6) r = t.cross(Vec3d::UnitX()); + } + m_fl_dir = r.normalized(); + m_fl_radius = std::max(0.01, radius); + if (!m_fl_active) m_fl_drag = false; // re-anchored every preview: preserve an in-progress drag + m_fl_active = true; + return true; +} + +void DesignSketchTool::clear_fillet_gizmo() +{ + m_fl_active = false; + m_fl_drag = false; +} + +// Single billboarded radius arrow from the edge midpoint along m_fl_dir; length = radius (world), +// floored to a grabbable screen size. Label shows the true radius (R-prefixed). +void DesignSketchTool::render_fillet_gizmo() +{ + if (!m_fl_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const double L = std::max(m_fl_radius, 40.0 * upp); // WYSIWYG, floored to a comfortable handle + const Vec3d tipw = m_fl_anchor + m_fl_dir * L; + + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = m_fl_anchor; bb.x_axis = right; bb.y_axis = up; bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + const ColorRGBA arrowc(1.0f, 0.62f, 0.16f, 1.0f); // CAD amber + + const Vec2d tip2((tipw - m_fl_anchor).dot(right), (tipw - m_fl_anchor).dot(up)); + if (tip2.norm() > 1e-6) { + const Vec2d u = tip2.normalized(); + const Vec2d nrm(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm * (as * 0.5)); + segs.emplace_back(tip2, back - nrm * (as * 0.5)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_fl_arrow_model, segs, std::max(0.7 * upp, 1e-4), arrowc); + DimAnnot da; da.kind = DimType::Radius; da.value = m_fl_radius; + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, arrowc); + } + m_plane = saved; +} + +// Ray vs the radius arrow segment; ~12 px tolerance over the (floored) handle length. +bool DesignSketchTool::hit_test_fillet_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_fl_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double L = std::max(m_fl_radius, 40.0 * upp); + return ray_segment_dist3(ro, rd, m_fl_anchor, m_fl_anchor + m_fl_dir * L) <= 12.0 * upp; +} + +// Skew-line closest point of the mouse ray to the radius axis -> signed distance along m_fl_dir +// from the anchor. NaN when the camera is ~parallel to the axis (no meaningful projection). +double DesignSketchTool::fillet_axis_proj(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Vec3d e = m_fl_dir; + const Vec3d w0 = m_fl_anchor - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return std::nan(""); + return (b * ee - c * dd) / denom; +} + +// Record the grab reference so the drag is RELATIVE (grab anywhere on the handle without the +// radius snapping to the grab point — important since the handle is floored to a min size). +void DesignSketchTool::start_fillet_drag(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + m_fl_drag = true; + m_fl_press_x = evt.GetX(); + m_fl_press_y = evt.GetY(); + m_fl_grab_radius = m_fl_radius; + const double p = fillet_axis_proj(canvas, evt); + m_fl_grab_proj = std::isnan(p) ? 0.0 : p; +} + +void DesignSketchTool::drag_fillet_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const double proj = fillet_axis_proj(canvas, evt); + if (std::isnan(proj)) return; // camera ∥ axis: leave radius as-is + m_fl_radius = std::max(0.01, m_fl_grab_radius + (proj - m_fl_grab_proj)); + if (on_fillet_radius_changed) on_fillet_radius_changed(m_fl_radius); +} + +void DesignSketchTool::open_fillet_editor() +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, m_fl_radius, "", + [this](double v) { + m_fl_radius = std::max(0.01, v); + if (on_fillet_radius_changed) on_fillet_radius_changed(m_fl_radius); + }, + []() {}); +} + +// ---- Hole gizmo ----------------------------------------------------------------------------- +// Positioned circular cut: footprint circle on the plane + a radial diameter arrow (plane u-axis) +// + a normal-axis depth arrow (drawn only when !through, matching the kernel's blind cut) + a +// draggable centre marker. The panel re-pushes this every preview, so (like the fillet gizmo) we +// must NOT reset an in-progress drag when already active. +void DesignSketchTool::set_hole_gizmo(const SketchPlane& plane, double x, double y, + double diameter, double depth, bool through) +{ + m_hl_plane = plane; + m_hl_x = x; + m_hl_y = y; + m_hl_diameter = std::max(0.01, diameter); + m_hl_depth = std::max(0.01, depth); + m_hl_through = through; + if (!m_hl_active) m_hl_drag = -1; // re-pushed every preview: preserve an in-progress drag + m_hl_active = true; +} + +void DesignSketchTool::clear_hole_gizmo() +{ + m_hl_active = false; + m_hl_drag = -1; +} + +void DesignSketchTool::set_hole_face_bounds(bool has, double umin, double umax, double vmin, double vmax) +{ + m_hl_has_bounds = has; + m_hl_umin = umin; m_hl_umax = umax; m_hl_vmin = vmin; m_hl_vmax = vmax; +} + +void DesignSketchTool::render_hole_gizmo() +{ + if (!m_hl_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + + const Vec3d centre = m_hl_plane.to_world(Vec2d(m_hl_x, m_hl_y)); + const Vec3d nrm = m_hl_plane.normal.normalized(); + const Vec3d ddir = m_hl_plane.x_axis.normalized(); // diameter arrow runs along plane u + const double r = std::max(0.01, m_hl_diameter * 0.5); + + const SketchPlane saved = m_plane; + + // (1) Footprint circle drawn ON the plane (lifts plane u/v -> world through to_world). + { + m_plane = m_hl_plane; + std::vector> segs; + const int N = 48; + for (int i = 0; i < N; ++i) { + const double a0 = (2.0 * M_PI * i) / N, a1 = (2.0 * M_PI * (i + 1)) / N; + segs.emplace_back(Vec2d(m_hl_x + r * std::cos(a0), m_hl_y + r * std::sin(a0)), + Vec2d(m_hl_x + r * std::cos(a1), m_hl_y + r * std::sin(a1))); + } + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_hl_stroke_model, segs, std::max(0.6 * upp, 1e-4), ColorRGBA(1.0f, 0.62f, 0.16f, 1.0f)); + m_plane = saved; + } + + // (2) Billboarded handles (centre marker + diameter arrow + depth arrow), screen-facing frame + // at the centre so draw_strokes/draw_text read on top regardless of orientation. + SketchPlane bb; bb.origin = centre; bb.x_axis = right; bb.y_axis = up; bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + const ColorRGBA amber(1.0f, 0.62f, 0.16f, 1.0f); + const ColorRGBA blue (0.30f, 0.55f, 1.0f, 1.0f); + + auto arrow_to = [&](const Vec3d& tipw, const ColorRGBA& col, const DimAnnot& da) { + const Vec2d tip2((tipw - centre).dot(right), (tipw - centre).dot(up)); + if (tip2.norm() <= 1e-6) return; + const Vec2d u = tip2.normalized(); + const Vec2d nrm2(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm2 * (as * 0.5)); + segs.emplace_back(tip2, back - nrm2 * (as * 0.5)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_hl_stroke_model, segs, std::max(0.7 * upp, 1e-4), col); + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, col); + }; + + // Diameter arrow: WYSIWYG radius, floored to a grabbable handle; label shows Ø (full diameter). + { + const double L = std::max(r, 40.0 * upp); + DimAnnot da; da.kind = DimType::Diameter; da.value = m_hl_diameter; + arrow_to(centre + ddir * L, amber, da); + } + // Depth arrow along +normal (blind cut). Through cuts ignore depth, so skip the arrow then. + if (!m_hl_through) { + const double L = std::max(m_hl_depth, 40.0 * upp); + DimAnnot da; da.kind = DimType::Distance; da.value = m_hl_depth; + arrow_to(centre + nrm * L, blue, da); + } + + m_plane = saved; + + // Move handle: a small 3D CUBE at the hole centre (Orca text/SVG-on-face feel) — grab and drag + // it to slide the hole across the face. Built from the plane axes so it sits flat on the face. + { + using EPT = GLModel::Geometry::EPrimitiveType; + using EVL = GLModel::Geometry::EVertexLayout; + const double hs = 9.0 * upp; // cube half-size (~9 px); hit-test uses the same below + const Vec3d U = ddir * hs, V = m_hl_plane.y_axis.normalized() * hs, Nn = nrm * hs; + // Cube centred EXACTLY on the surface point (= the hole). Depth-test ON occludes the inner + // half inside the solid, so the visible half-cube reads as planted at the hole — no depth-off + // float that looked offset from the on-surface footprint. Hit-test targets the same `centre`. + Vec3d c8[8]; + for (int i = 0; i < 8; ++i) + c8[i] = centre + ((i & 1) ? U : -U) + ((i & 2) ? V : -V) + ((i & 4) ? Nn : -Nn); + // 6 faces (CCW), each as 2 triangles, lightly shaded so the box reads as a cube. + const int faces[6][4] = { {0,1,3,2},{4,6,7,5},{0,4,5,1},{2,3,7,6},{0,2,6,4},{1,5,7,3} }; + const float shade[6] = { 0.78f, 1.0f, 0.86f, 0.92f, 0.70f, 0.96f }; + glsafe(::glEnable(GL_DEPTH_TEST)); + glsafe(::glDisable(GL_CULL_FACE)); + for (int f = 0; f < 6; ++f) { + GLModel::Geometry g; g.format = { EPT::Triangles, EVL::P3 }; + for (int k = 0; k < 4; ++k) g.add_vertex((Vec3f)c8[faces[f][k]].cast()); + g.add_triangle(0, 1, 2); g.add_triangle(0, 2, 3); + GLModel m; m.init_from(std::move(g)); + m.set_color(ColorRGBA(1.0f * shade[f], 0.62f * shade[f], 0.16f * shade[f], 1.0f)); + m.render(); + } + } +} + +// Best-matching hole handle under the cursor: centre (0) / diameter (1) / depth (2), or -1. +// Tested by ray-to-segment distance in world; ~12 px tolerance. Centre wins at the shared base. +int DesignSketchTool::hit_test_hole_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_hl_active) return -1; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + + const Vec3d centre = m_hl_plane.to_world(Vec2d(m_hl_x, m_hl_y)); + const Vec3d nrm = m_hl_plane.normal.normalized(); + const Vec3d ddir = m_hl_plane.x_axis.normalized(); + const double rad = std::max(m_hl_diameter * 0.5, 40.0 * upp); + const double depL = std::max(m_hl_depth, 40.0 * upp); + const double tol = 12.0 * upp; + + // Centre wins at the shared base: the move cube straddles the centre, so a grab within the cube + // half-size is a reposition. The arrows are only grabbable along the shaft extending outward, + // which also keeps an edge-on arrow (e.g. depth in top view) from stealing the reposition grab. + if (ray_segment_dist3(ro, rd, centre, centre) <= 9.0 * upp) return 0; // cube half-size + + int best = -1; double bestd = tol; + const double dD = ray_segment_dist3(ro, rd, centre, centre + ddir * rad); + if (dD < bestd) { bestd = dD; best = 1; } + if (!m_hl_through) { + const double dZ = ray_segment_dist3(ro, rd, centre, centre + nrm * depL); + if (dZ < bestd) { bestd = dZ; best = 2; } + } + return best; +} + +// Skew-line closest point of the mouse ray to an axis (anchor + t*dir) -> signed distance along +// dir. NaN when the camera is ~parallel to the axis (no meaningful projection). +double DesignSketchTool::hole_axis_proj(GLCanvas3D& canvas, const wxMouseEvent& evt, + const Vec3d& anchor, const Vec3d& dir) const +{ + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Vec3d e = dir; + const Vec3d w0 = anchor - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + // Relative near-parallel guard: when the camera ray is ~along the axis (e.g. the depth axis in + // top view) denom collapses; a tiny absolute floor lets a huge, unstable projection through. + if (std::abs(denom) < 1e-4 * std::max(a * c, 1e-12)) return std::nan(""); + return (b * ee - c * dd) / denom; +} + +void DesignSketchTool::start_hole_drag(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + m_hl_drag = which; + m_hl_press_x = evt.GetX(); + m_hl_press_y = evt.GetY(); + const Vec3d centre = m_hl_plane.to_world(Vec2d(m_hl_x, m_hl_y)); + if (which == 0) { + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + m_hl_grab_uv = m_hl_plane.project(r.a, r.b - r.a); + m_hl_grab_x = m_hl_x; + m_hl_grab_y = m_hl_y; + } else if (which == 1 || which == 2) { + const Vec3d dir = (which == 1) ? m_hl_plane.x_axis.normalized() : m_hl_plane.normal.normalized(); + const double p = hole_axis_proj(canvas, evt, centre, dir); + m_hl_grab_proj = std::isnan(p) ? 0.0 : p; + m_hl_grab_val = (which == 1) ? m_hl_diameter * 0.5 : m_hl_depth; + } + // which == 3/4 (X/Y dim labels) are edit-only: a stationary click opens the inline editor. +} + +void DesignSketchTool::drag_hole_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + if (m_hl_drag >= 3) return; // X/Y dim labels are click-to-edit, not drag + if (m_hl_drag == 0) { // reposition centre on the plane + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec2d uv = m_hl_plane.project(r.a, r.b - r.a); + m_hl_x = m_hl_grab_x + (uv.x() - m_hl_grab_uv.x()); + m_hl_y = m_hl_grab_y + (uv.y() - m_hl_grab_uv.y()); + } else { // diameter (1) or depth (2): relative axis drag + const Vec3d centre = m_hl_plane.to_world(Vec2d(m_hl_x, m_hl_y)); + const Vec3d dir = (m_hl_drag == 1) ? m_hl_plane.x_axis.normalized() : m_hl_plane.normal.normalized(); + const double proj = hole_axis_proj(canvas, evt, centre, dir); + if (std::isnan(proj)) return; // camera ∥ axis: leave value as-is + const double v = std::max(0.01, m_hl_grab_val + (proj - m_hl_grab_proj)); + if (m_hl_drag == 1) m_hl_diameter = 2.0 * v; + else m_hl_depth = v; + } + if (on_hole_changed) on_hole_changed(m_hl_x, m_hl_y, m_hl_diameter, m_hl_depth); +} + +void DesignSketchTool::open_hole_editor(int which) +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + if (which == 1) { + on_inline_edit(px, m_hl_diameter, "", + [this](double v) { + m_hl_diameter = std::max(0.01, v); + if (on_hole_changed) on_hole_changed(m_hl_x, m_hl_y, m_hl_diameter, m_hl_depth); + }, + []() {}); + } else if (which == 2) { + on_inline_edit(px, m_hl_depth, "", + [this](double v) { + m_hl_depth = std::max(0.01, v); + if (on_hole_changed) on_hole_changed(m_hl_x, m_hl_y, m_hl_diameter, m_hl_depth); + }, + []() {}); + } else if (which == 3) { // #2 Part B: edit the distance from the u-side + const double ru = m_hl_has_bounds ? m_hl_umin : 0.0; + on_inline_edit(px, m_hl_x - ru, "", + [this, ru](double v) { + m_hl_x = ru + v; + if (on_hole_changed) on_hole_changed(m_hl_x, m_hl_y, m_hl_diameter, m_hl_depth); + }, + []() {}); + } else if (which == 4) { // edit the distance from the v-side + const double rv = m_hl_has_bounds ? m_hl_vmin : 0.0; + on_inline_edit(px, m_hl_y - rv, "", + [this, rv](double v) { + m_hl_y = rv + v; + if (on_hole_changed) on_hole_changed(m_hl_x, m_hl_y, m_hl_diameter, m_hl_depth); + }, + []() {}); + } + // which == 0 (centre): no scalar to edit inline — it's a drag-only reposition handle. +} + +// ---- Thread gizmo --------------------------------------------------------------------------- +// Mirrors the hole gizmo: footprint circle on the plane at the nominal radius + a radial radius +// arrow (R label) + a normal-axis length arrow (always shown) + a draggable centre marker. +// Reuses hole_axis_proj() for the relative axis drags. +void DesignSketchTool::set_thread_gizmo(const SketchPlane& plane, double x, double y, + double radius, double height) +{ + m_th_plane = plane; + m_th_x = x; + m_th_y = y; + m_th_radius = std::max(0.01, radius); + m_th_height = std::max(0.01, height); + if (!m_th_active) m_th_drag = -1; // re-pushed every preview: preserve an in-progress drag + m_th_active = true; +} + +void DesignSketchTool::clear_thread_gizmo() +{ + m_th_active = false; + m_th_drag = -1; +} + +void DesignSketchTool::render_thread_gizmo() +{ + if (!m_th_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + + const Vec3d centre = m_th_plane.to_world(Vec2d(m_th_x, m_th_y)); + const Vec3d nrm = m_th_plane.normal.normalized(); + const Vec3d ddir = m_th_plane.x_axis.normalized(); // radius arrow runs along plane u + const double r = std::max(0.01, m_th_radius); + + const SketchPlane saved = m_plane; + + // (1) Footprint circle on the plane at the nominal radius. + { + m_plane = m_th_plane; + std::vector> segs; + const int N = 48; + for (int i = 0; i < N; ++i) { + const double a0 = (2.0 * M_PI * i) / N, a1 = (2.0 * M_PI * (i + 1)) / N; + segs.emplace_back(Vec2d(m_th_x + r * std::cos(a0), m_th_y + r * std::sin(a0)), + Vec2d(m_th_x + r * std::cos(a1), m_th_y + r * std::sin(a1))); + } + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_th_stroke_model, segs, std::max(0.6 * upp, 1e-4), ColorRGBA(0.55f, 0.80f, 0.30f, 1.0f)); + m_plane = saved; + } + + // (2) Billboarded handles. + SketchPlane bb; bb.origin = centre; bb.x_axis = right; bb.y_axis = up; bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + const ColorRGBA green(0.55f, 0.80f, 0.30f, 1.0f); + const ColorRGBA blue (0.30f, 0.55f, 1.0f, 1.0f); + + auto arrow_to = [&](const Vec3d& tipw, const ColorRGBA& col, const DimAnnot& da) { + const Vec2d tip2((tipw - centre).dot(right), (tipw - centre).dot(up)); + if (tip2.norm() <= 1e-6) return; + const Vec2d u = tip2.normalized(); + const Vec2d nrm2(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm2 * (as * 0.5)); + segs.emplace_back(tip2, back - nrm2 * (as * 0.5)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_th_stroke_model, segs, std::max(0.7 * upp, 1e-4), col); + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, col); + }; + + { // Radius arrow (R label), floored to a grabbable handle. + const double L = std::max(r, 40.0 * upp); + DimAnnot da; da.kind = DimType::Radius; da.value = m_th_radius; + arrow_to(centre + ddir * L, green, da); + } + { // Length arrow along +normal. + const double L = std::max(m_th_height, 40.0 * upp); + DimAnnot da; da.kind = DimType::Distance; da.value = m_th_height; + arrow_to(centre + nrm * L, blue, da); + } + { // Centre marker. + const double s = 7.0 * upp; + std::vector> segs; + segs.emplace_back(Vec2d(-s, -s), Vec2d(s, -s)); + segs.emplace_back(Vec2d( s, -s), Vec2d(s, s)); + segs.emplace_back(Vec2d( s, s), Vec2d(-s, s)); + segs.emplace_back(Vec2d(-s, s), Vec2d(-s, -s)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_th_stroke_model, segs, std::max(0.7 * upp, 1e-4), green); + } + + m_plane = saved; +} + +int DesignSketchTool::hit_test_thread_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_th_active) return -1; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + + const Vec3d centre = m_th_plane.to_world(Vec2d(m_th_x, m_th_y)); + const Vec3d nrm = m_th_plane.normal.normalized(); + const Vec3d ddir = m_th_plane.x_axis.normalized(); + const double rad = std::max(m_th_radius, 40.0 * upp); + const double hL = std::max(m_th_height, 40.0 * upp); + const double tol = 12.0 * upp; + + if (ray_segment_dist3(ro, rd, centre, centre) <= tol) return 0; // centre wins at the base + int best = -1; double bestd = tol; + const double dR = ray_segment_dist3(ro, rd, centre, centre + ddir * rad); + if (dR < bestd) { bestd = dR; best = 1; } + const double dH = ray_segment_dist3(ro, rd, centre, centre + nrm * hL); + if (dH < bestd) { bestd = dH; best = 2; } + return best; +} + +void DesignSketchTool::start_thread_drag(GLCanvas3D& canvas, const wxMouseEvent& evt, int which) +{ + m_th_drag = which; + m_th_press_x = evt.GetX(); + m_th_press_y = evt.GetY(); + const Vec3d centre = m_th_plane.to_world(Vec2d(m_th_x, m_th_y)); + if (which == 0) { + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + m_th_grab_uv = m_th_plane.project(r.a, r.b - r.a); + m_th_grab_x = m_th_x; + m_th_grab_y = m_th_y; + } else { + const Vec3d dir = (which == 1) ? m_th_plane.x_axis.normalized() : m_th_plane.normal.normalized(); + const double p = hole_axis_proj(canvas, evt, centre, dir); + m_th_grab_proj = std::isnan(p) ? 0.0 : p; + m_th_grab_val = (which == 1) ? m_th_radius : m_th_height; + } +} + +void DesignSketchTool::drag_thread_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + if (m_th_drag == 0) { + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec2d uv = m_th_plane.project(r.a, r.b - r.a); + m_th_x = m_th_grab_x + (uv.x() - m_th_grab_uv.x()); + m_th_y = m_th_grab_y + (uv.y() - m_th_grab_uv.y()); + } else { + const Vec3d centre = m_th_plane.to_world(Vec2d(m_th_x, m_th_y)); + const Vec3d dir = (m_th_drag == 1) ? m_th_plane.x_axis.normalized() : m_th_plane.normal.normalized(); + const double proj = hole_axis_proj(canvas, evt, centre, dir); + if (std::isnan(proj)) return; + const double v = std::max(0.01, m_th_grab_val + (proj - m_th_grab_proj)); + if (m_th_drag == 1) m_th_radius = v; + else m_th_height = v; + } + if (on_thread_changed) on_thread_changed(m_th_x, m_th_y, m_th_radius, m_th_height); +} + +void DesignSketchTool::open_thread_editor(int which) +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + if (which == 1) { + on_inline_edit(px, m_th_radius, "", + [this](double v) { + m_th_radius = std::max(0.01, v); + if (on_thread_changed) on_thread_changed(m_th_x, m_th_y, m_th_radius, m_th_height); + }, + []() {}); + } else if (which == 2) { + on_inline_edit(px, m_th_height, "", + [this](double v) { + m_th_height = std::max(0.01, v); + if (on_thread_changed) on_thread_changed(m_th_x, m_th_y, m_th_radius, m_th_height); + }, + []() {}); + } +} + +// ---- Shell gizmo ---------------------------------------------------------------------------- +// A single inward thickness arrow at the picked open-face centroid (mirrors the fillet radius +// arrow). RELATIVE drag (like fillet), reusing hole_axis_proj for the projection. +void DesignSketchTool::set_shell_gizmo(const Vec3d& face_centroid, const Vec3d& inward_dir, + double thickness) +{ + m_sh_anchor = face_centroid; + if (inward_dir.norm() > 1e-9) m_sh_dir = inward_dir.normalized(); + m_sh_thickness = std::max(0.01, thickness); + if (!m_sh_active) m_sh_drag = false; // re-pushed every preview: preserve an in-progress drag + m_sh_active = true; +} + +void DesignSketchTool::clear_shell_gizmo() +{ + m_sh_active = false; + m_sh_drag = false; +} + +void DesignSketchTool::render_shell_gizmo() +{ + if (!m_sh_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const double L = std::max(m_sh_thickness, 40.0 * upp); // WYSIWYG, floored to a handle + const Vec3d tipw = m_sh_anchor + m_sh_dir * L; + + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = m_sh_anchor; bb.x_axis = right; bb.y_axis = up; bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + const ColorRGBA teal(0.20f, 0.80f, 0.75f, 1.0f); + + const Vec2d tip2((tipw - m_sh_anchor).dot(right), (tipw - m_sh_anchor).dot(up)); + if (tip2.norm() > 1e-6) { + const Vec2d u = tip2.normalized(); + const Vec2d nrm(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm * (as * 0.5)); + segs.emplace_back(tip2, back - nrm * (as * 0.5)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_sh_stroke_model, segs, std::max(0.7 * upp, 1e-4), teal); + DimAnnot da; da.kind = DimType::Distance; da.value = m_sh_thickness; + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, teal); + } + m_plane = saved; +} + +bool DesignSketchTool::hit_test_shell_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_sh_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double L = std::max(m_sh_thickness, 40.0 * upp); + return ray_segment_dist3(ro, rd, m_sh_anchor, m_sh_anchor + m_sh_dir * L) <= 12.0 * upp; +} + +void DesignSketchTool::start_shell_drag(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + m_sh_drag = true; + m_sh_press_x = evt.GetX(); + m_sh_press_y = evt.GetY(); + m_sh_grab_val = m_sh_thickness; + const double p = hole_axis_proj(canvas, evt, m_sh_anchor, m_sh_dir); + m_sh_grab_proj = std::isnan(p) ? 0.0 : p; +} + +void DesignSketchTool::drag_shell_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const double proj = hole_axis_proj(canvas, evt, m_sh_anchor, m_sh_dir); + if (std::isnan(proj)) return; + m_sh_thickness = std::max(0.01, m_sh_grab_val + (proj - m_sh_grab_proj)); + if (on_shell_thickness_changed) on_shell_thickness_changed(m_sh_thickness); +} + +void DesignSketchTool::open_shell_editor() +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, m_sh_thickness, "", + [this](double v) { + m_sh_thickness = std::max(0.01, v); + if (on_shell_thickness_changed) on_shell_thickness_changed(m_sh_thickness); + }, + []() {}); +} + +// ---- Revolve angle-arc gizmo ---------------------------------------------------------------- +// Arc in the revolve plane (perpendicular to the axis) at the profile's radius. The arc center is +// the projection of the profile centroid onto the axis, so the arc rides at the profile's height. +// The yaxis sense follows m_rv_flip, matching the kernel's negative-angle reversed sweep. +static Vec3d rv_yaxis(const Vec3d& axis, const Vec3d& ref, bool flip) +{ + Vec3d y = axis.cross(ref); + if (y.norm() < 1e-9) return ref; // degenerate; never used (ref ⟂ axis by construction) + y.normalize(); + return flip ? -y : y; +} + +// Arc in the draft plane (perpendicular to the world +Z axis through the face centroid). +// The arc sweeps from angle 0 to m_dr_angle, representing the taper amount. +static Vec3d dr_yaxis(const Vec3d& axis, const Vec3d& ref) +{ + Vec3d y = axis.cross(ref); + if (y.norm() < 1e-9) return ref; + y.normalize(); + return y; +} + +void DesignSketchTool::set_draft_gizmo(const Vec3d& face_centroid, const Vec3d& face_normal, double angle) +{ + m_dr_center = face_centroid; + m_dr_angle = std::min(89.0, std::max(-89.0, angle)); + m_dr_axis = Vec3d::UnitZ(); // pull direction is world +Z + Vec3d ref = face_normal - face_normal.dot(m_dr_axis) * m_dr_axis; // horizontal component + if (ref.norm() < 1e-6) ref = Vec3d::UnitX(); // fallback: face normal is parallel to Z + m_dr_ref = ref / ref.norm(); + m_dr_radius = 12.0; // fixed world-size manipulator + if (!m_dr_active) m_dr_drag = false; + m_dr_active = true; +} + +void DesignSketchTool::clear_draft_gizmo() +{ + m_dr_active = false; + m_dr_drag = false; +} + +void DesignSketchTool::render_draft_gizmo() +{ + if (!m_dr_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const Vec3d yax = dr_yaxis(m_dr_axis, m_dr_ref); + + const SketchPlane saved = m_plane; + SketchPlane rp; rp.origin = m_dr_center; rp.x_axis = m_dr_ref; rp.y_axis = yax; rp.normal = m_dr_axis; + m_plane = rp; + const ColorRGBA arcc(0.15f, 0.92f, 1.0f, 1.0f); + const double r = m_dr_radius; + // Draft angle can be negative: sweep counter-clockwise (positive) or clockwise (negative) + const double a = m_dr_angle * M_PI / 180.0; + const int N = std::max(8, int(std::abs(a) / (M_PI / 32.0))); // ~ every 5.6° + + std::vector> segs; + Vec2d prev(r, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = a * double(i) / double(N); + const Vec2d cur(r * std::cos(t), r * std::sin(t)); + segs.emplace_back(prev, cur); + prev = cur; + } + const Vec2d tip(r * std::cos(a), r * std::sin(a)); + segs.emplace_back(Vec2d(0, 0), Vec2d(r, 0)); // spoke at angle 0 + segs.emplace_back(Vec2d(0, 0), tip); // spoke at the swept angle (the handle) + const Vec2d tang(-std::sin(a), std::cos(a)); + const Vec2d radial = tip.normalized(); + const double as = std::max(r * 0.14, th); + segs.emplace_back(tip, tip - tang * as - radial * (as * 0.5)); + segs.emplace_back(tip, tip - tang * as + radial * (as * 0.5)); + const double hs = std::max(th * 0.8, r * 0.05); + const Vec2d du = radial * hs, dv = Vec2d(-radial.y(), radial.x()) * hs; + segs.emplace_back(tip + du, tip + dv); + segs.emplace_back(tip + dv, tip - du); + segs.emplace_back(tip - du, tip - dv); + segs.emplace_back(tip - dv, tip + du); + + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_dr_stroke_model, segs, std::max(0.8 * upp, 1e-4), arcc); + DimAnnot da; da.kind = DimType::Angle; da.value = m_dr_angle; + draw_text(m_line_model, dim_text(da), tip * 1.14, th, arcc); + m_plane = saved; +} + +bool DesignSketchTool::hit_test_draft_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_dr_active) return false; + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const Vec3d yax = dr_yaxis(m_dr_axis, m_dr_ref); + const double a = m_dr_angle * M_PI / 180.0; + const double tol = 16.0 * upp; + auto ray_pt = [&](const Vec3d& p) { + const double t = (p - ro).dot(rd) / std::max(rd.dot(rd), 1e-12); + return (p - (ro + t * rd)).norm(); + }; + const Vec3d tip = m_dr_center + m_dr_radius * (std::cos(a) * m_dr_ref + std::sin(a) * yax); + const Vec3d ref = m_dr_center + m_dr_radius * m_dr_ref; // angle-0 spoke end + const int N = 48; + for (int i = 0; i <= N; ++i) { + const double f = double(i) / double(N); + const double th = a * f; + const Vec3d arc = m_dr_center + m_dr_radius * (std::cos(th) * m_dr_ref + std::sin(th) * yax); + if (ray_pt(arc) <= tol) return true; + if (ray_pt(m_dr_center + f * (tip - m_dr_center)) <= tol) return true; + if (ray_pt(m_dr_center + f * (ref - m_dr_center)) <= tol) return true; + } + return false; +} + +void DesignSketchTool::drag_draft_arc(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + const double denom = rd.dot(m_dr_axis); + if (std::abs(denom) < 1e-9) return; + const double t = (m_dr_center - ro).dot(m_dr_axis) / denom; + const Vec3d p = ro + t * rd; + const Vec3d yax = dr_yaxis(m_dr_axis, m_dr_ref); + const double u = (p - m_dr_center).dot(m_dr_ref); + const double v = (p - m_dr_center).dot(yax); + double deg = std::atan2(v, u) * 180.0 / M_PI; + deg = std::min(89.0, std::max(-89.0, deg)); + m_dr_angle = deg; + if (m_on_draft_angle_changed) m_on_draft_angle_changed(deg); +} + +// ---- Cut gizmo (plane normal arrow + wire rectangle preview) -------------------------------- +// Arrow: shaft + arrowhead billboarded along the cut-plane normal from the projected body +// centre, with a signed Distance label = offset. Drag is RELATIVE via hole_axis_proj. +// Rectangle: 4 segments in the cut plane at the current offset, sized to the target body. + +void DesignSketchTool::set_cut_gizmo(const SketchPlane& plane, double offset, const Vec3d& body_center, double half_extent) +{ + m_ct_n = plane.normal.normalized(); + m_ct_u = plane.x_axis.normalized(); + m_ct_v = plane.y_axis.normalized(); + Vec3d rel = body_center - plane.origin; + m_ct_base = plane.origin + (rel - rel.dot(m_ct_n) * m_ct_n); // body center projected into the cut plane + m_ct_offset = offset; + m_ct_half = std::max(half_extent, 10.0); + if (!m_ct_active) m_ct_drag = false; + m_ct_active = true; +} + +void DesignSketchTool::clear_cut_gizmo() +{ + m_ct_active = false; + m_ct_drag = false; +} + +void DesignSketchTool::render_cut_gizmo() +{ + if (!m_ct_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const Vec3d right = cam.get_dir_right().normalized(); + const Vec3d up = cam.get_dir_up().normalized(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const ColorRGBA teal(0.20f, 0.80f, 0.75f, 1.0f); + + // ---- Wire rectangle in the cut plane ---- + { + const Vec3d cutpos = m_ct_base + m_ct_offset * m_ct_n; + const SketchPlane saved = m_plane; + SketchPlane rp; rp.origin = cutpos; rp.x_axis = m_ct_u; rp.y_axis = m_ct_v; rp.normal = m_ct_n; + m_plane = rp; + const double h = m_ct_half; + std::vector> segs; + segs.emplace_back(Vec2d(-h, -h), Vec2d( h, -h)); + segs.emplace_back(Vec2d( h, -h), Vec2d( h, h)); + segs.emplace_back(Vec2d( h, h), Vec2d(-h, h)); + segs.emplace_back(Vec2d(-h, h), Vec2d(-h, -h)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_ct_rect_model, segs, std::max(0.7 * upp, 1e-4), teal); + m_plane = saved; + } + + // ---- Offset arrow (billboarded, clone of render_shell_gizmo) ---- + { + const double L_sign = (std::abs(m_ct_offset) < 40.0 * upp) + ? std::copysign(40.0 * upp, (m_ct_offset == 0.0 ? 1.0 : m_ct_offset)) + : m_ct_offset; + const Vec3d tipw = m_ct_base + m_ct_n * L_sign; + + const SketchPlane saved = m_plane; + SketchPlane bb; bb.origin = m_ct_base; bb.x_axis = right; bb.y_axis = up; + bb.normal = cam.get_dir_forward().normalized(); + m_plane = bb; + + const Vec2d tip2((tipw - m_ct_base).dot(right), (tipw - m_ct_base).dot(up)); + if (tip2.norm() > 1e-6) { + const Vec2d u = tip2.normalized(); + const Vec2d nrm(-u.y(), u.x()); + std::vector> segs; + segs.emplace_back(Vec2d(0, 0), tip2); + const double as = std::max(tip2.norm() * 0.20, th * 0.9); + const Vec2d back = tip2 - u * as; + segs.emplace_back(tip2, back + nrm * (as * 0.5)); + segs.emplace_back(tip2, back - nrm * (as * 0.5)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_ct_stroke_model, segs, std::max(0.7 * upp, 1e-4), teal); + DimAnnot da; da.kind = DimType::Distance; da.value = m_ct_offset; + draw_text(m_line_model, dim_text(da), tip2 + u * (th * 1.4), th, teal); + } + m_plane = saved; + } +} + +bool DesignSketchTool::hit_test_cut_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_ct_active) return false; + const Linef3 r = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = r.a, rd = r.b - r.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double L_sign = (std::abs(m_ct_offset) < 40.0 * upp) + ? std::copysign(40.0 * upp, (m_ct_offset == 0.0 ? 1.0 : m_ct_offset)) + : m_ct_offset; + return ray_segment_dist3(ro, rd, m_ct_base, m_ct_base + m_ct_n * L_sign) <= 12.0 * upp; +} + +void DesignSketchTool::start_cut_drag(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + m_ct_drag = true; + m_ct_grab_val = m_ct_offset; + const double p = hole_axis_proj(canvas, evt, m_ct_base, m_ct_n); + m_ct_grab_proj = std::isnan(p) ? 0.0 : p; +} + +void DesignSketchTool::drag_cut_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const double proj = hole_axis_proj(canvas, evt, m_ct_base, m_ct_n); + if (std::isnan(proj)) return; + m_ct_offset = m_ct_grab_val + (proj - m_ct_grab_proj); + if (m_on_cut_offset_changed) m_on_cut_offset_changed(m_ct_offset); +} + +void DesignSketchTool::set_revolve_gizmo(const SketchPlane& plane, const Vec2d& centroid, + int axis_sel, double angle, bool flip) +{ + const Vec3d ax = (axis_sel == 1 ? plane.y_axis : plane.x_axis).normalized(); + const Vec3d cw = plane.to_world(centroid); + const double axial = (cw - plane.origin).dot(ax); + m_rv_center = plane.origin + axial * ax; // foot of the centroid on the axis line + Vec3d ref = cw - m_rv_center; // perpendicular to ax by construction + double r = ref.norm(); + if (r < 1e-6) { ref = plane.normal.normalized(); r = std::max(plane.normal.norm(), 1.0); } + m_rv_axis = ax; + m_rv_ref = ref / ref.norm(); + m_rv_radius = std::max(r, 1.0); + m_rv_angle = std::min(360.0, std::max(1.0, std::abs(angle))); + m_rv_flip = flip; + if (!m_rv_active) m_rv_drag = false; // re-pushed every preview: keep an in-progress drag + m_rv_active = true; +} + +void DesignSketchTool::clear_revolve_gizmo() +{ + m_rv_active = false; + m_rv_drag = false; +} + +void DesignSketchTool::render_revolve_gizmo() +{ + if (!m_rv_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const Vec3d yax = rv_yaxis(m_rv_axis, m_rv_ref, m_rv_flip); + + // The arc lives in the true revolve plane (NOT billboarded) so the sweep reads in 3D. + const SketchPlane saved = m_plane; + SketchPlane rp; rp.origin = m_rv_center; rp.x_axis = m_rv_ref; rp.y_axis = yax; rp.normal = m_rv_axis; + m_plane = rp; + // Vivid cyan: the revolve ghost is amber, so the arc manipulator must contrast with it + // (it overlaps the solid, unlike the extrude depth-arrow which points away into empty space). + const ColorRGBA arcc(0.15f, 0.92f, 1.0f, 1.0f); + const double r = m_rv_radius; + const double a = m_rv_angle * M_PI / 180.0; + const int N = std::max(8, int(a / (M_PI / 32.0))); // ~ every 5.6° + + std::vector> segs; + Vec2d prev(r, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = a * double(i) / double(N); + const Vec2d cur(r * std::cos(t), r * std::sin(t)); + segs.emplace_back(prev, cur); + prev = cur; + } + const Vec2d tip(r * std::cos(a), r * std::sin(a)); + segs.emplace_back(Vec2d(0, 0), Vec2d(r, 0)); // spoke at angle 0 + segs.emplace_back(Vec2d(0, 0), tip); // spoke at the swept angle (the handle) + // Arrowhead at the tip, pointing along the sweep tangent (-sin,cos) rotated by a. + const Vec2d tang(-std::sin(a), std::cos(a)); + const Vec2d radial = tip.normalized(); + const double as = std::max(r * 0.14, th); + segs.emplace_back(tip, tip - tang * as - radial * (as * 0.5)); + segs.emplace_back(tip, tip - tang * as + radial * (as * 0.5)); + // A diamond grab-handle at the tip so the draggable target is unmistakable. + const double hs = std::max(th * 0.8, r * 0.05); + const Vec2d du = radial * hs, dv = Vec2d(-radial.y(), radial.x()) * hs; + segs.emplace_back(tip + du, tip + dv); + segs.emplace_back(tip + dv, tip - du); + segs.emplace_back(tip - du, tip - dv); + segs.emplace_back(tip - dv, tip + du); + + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_rv_stroke_model, segs, std::max(0.8 * upp, 1e-4), arcc); + DimAnnot da; da.kind = DimType::Angle; da.value = m_rv_angle; + draw_text(m_line_model, dim_text(da), tip * 1.14, th, arcc); + m_plane = saved; +} + +bool DesignSketchTool::hit_test_revolve_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_rv_active) return false; + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const Vec3d yax = rv_yaxis(m_rv_axis, m_rv_ref, m_rv_flip); + const double a = m_rv_angle * M_PI / 180.0; + const double tol = 16.0 * upp; + // Grab anywhere on the whole gizmo (Onshape-style): the arc curve OR either radial spoke. + // Take the nearest ray-to-point distance over a dense sampling. + auto ray_pt = [&](const Vec3d& p) { + const double t = (p - ro).dot(rd) / std::max(rd.dot(rd), 1e-12); + return (p - (ro + t * rd)).norm(); + }; + const Vec3d tip = m_rv_center + m_rv_radius * (std::cos(a) * m_rv_ref + std::sin(a) * yax); + const Vec3d ref = m_rv_center + m_rv_radius * m_rv_ref; // angle-0 spoke end + const int N = 48; + for (int i = 0; i <= N; ++i) { + const double f = double(i) / double(N); + const double th = a * f; + const Vec3d arc = m_rv_center + m_rv_radius * (std::cos(th) * m_rv_ref + std::sin(th) * yax); + if (ray_pt(arc) <= tol) return true; // on the arc curve + if (ray_pt(m_rv_center + f * (tip - m_rv_center)) <= tol) return true; // on the swept spoke + if (ray_pt(m_rv_center + f * (ref - m_rv_center)) <= tol) return true; // on the ref spoke + } + return false; +} + +// Intersect the mouse ray with the revolve plane, read its angle around the center -> sweep angle. +void DesignSketchTool::drag_revolve_arc(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + const double denom = rd.dot(m_rv_axis); + if (std::abs(denom) < 1e-9) return; // ray ∥ revolve plane: leave angle as-is + const double t = (m_rv_center - ro).dot(m_rv_axis) / denom; + const Vec3d p = ro + t * rd; + const Vec3d yax = rv_yaxis(m_rv_axis, m_rv_ref, m_rv_flip); + const double u = (p - m_rv_center).dot(m_rv_ref); + const double v = (p - m_rv_center).dot(yax); + double deg = std::atan2(v, u) * 180.0 / M_PI; + if (deg < 0.0) deg += 360.0; + deg = std::min(360.0, std::max(1.0, deg)); + m_rv_angle = deg; + if (on_revolve_angle_changed) on_revolve_angle_changed(deg); +} + +void DesignSketchTool::open_revolve_editor() +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, m_rv_angle, "", + [this](double v) { + m_rv_angle = std::min(360.0, std::max(1.0, v)); + if (on_revolve_angle_changed) on_revolve_angle_changed(m_rv_angle); + }, + []() {}); +} + +// ---- Pattern gizmo (linear spacing arrow | circular angle-arc) ------------------------------ +// Linear: a 3D arrow along the world march axis with a tick at each copy; the diamond at the end +// drags the spacing. Circular: a Revolve-style arc about the plane normal through the plane origin. +void DesignSketchTool::set_pattern_gizmo(const SketchPlane& plane, const Vec3d& body_centroid, + bool circular, int count, int dir, double spacing, double angle) +{ + m_pt_circular = circular; + m_pt_base = body_centroid; + m_pt_count = std::max(1, count); + m_pt_spacing = std::max(0.01, spacing); + m_pt_angle = std::min(360.0, std::max(1.0, angle)); + m_pt_dirw = (dir == 1 ? plane.y_axis : plane.x_axis).normalized(); + m_pt_origin = plane.origin; + m_pt_normal = plane.normal.normalized(); + // Circular arc center = foot of the body centroid on the rotation axis; ref = perpendicular dir. + const double axial = (body_centroid - plane.origin).dot(m_pt_normal); + m_pt_ccenter = plane.origin + axial * m_pt_normal; + Vec3d ref = body_centroid - m_pt_ccenter; + double r = ref.norm(); + if (r < 1e-6) { ref = m_pt_dirw; r = 1.0; } // body centred on the axis: nominal radius + m_pt_cref = ref / ref.norm(); + m_pt_radius = std::max(r, 1.0); + if (!m_pt_active) m_pt_drag = false; // re-pushed every preview: keep an in-progress drag + m_pt_active = true; +} + +void DesignSketchTool::clear_pattern_gizmo() +{ + m_pt_active = false; + m_pt_drag = false; +} + +// Linear arrow span = spacing*(count-1), at least one step so count=1 still shows a direction. +static double pt_linear_len(double spacing, int count) +{ + return std::max(spacing * double(std::max(1, count) - 1), spacing); +} + +void DesignSketchTool::render_pattern_gizmo() +{ + if (!m_pt_active) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + const double th = std::max(15.0 * upp, 1e-4); + const ColorRGBA col(0.15f, 0.92f, 1.0f, 1.0f); // vivid cyan, matches the gizmo family + const SketchPlane saved = m_plane; + std::vector> segs; + + if (!m_pt_circular) { + // The arrow lives in the true world plane (NOT billboarded) so the march reads in 3D. + const Vec3d perp = m_pt_normal.cross(m_pt_dirw).normalized(); + SketchPlane fp; fp.origin = m_pt_base; fp.x_axis = m_pt_dirw; fp.y_axis = perp; fp.normal = m_pt_normal; + m_plane = fp; + const int copies = std::max(1, m_pt_count); + const double L = pt_linear_len(m_pt_spacing, copies); + segs.emplace_back(Vec2d(0, 0), Vec2d(L, 0)); // shaft + const double as = std::max(L * 0.12, th); // arrowhead + segs.emplace_back(Vec2d(L, 0), Vec2d(L - as, as * 0.5)); + segs.emplace_back(Vec2d(L, 0), Vec2d(L - as, -as * 0.5)); + const double tk = std::max(th, L * 0.05); // copy tick half-height + for (int i = 0; i < copies; ++i) { + const double x = m_pt_spacing * i; + segs.emplace_back(Vec2d(x, -tk), Vec2d(x, tk)); + } + const Vec2d E(L, 0); // diamond grab-handle + const double hs = std::max(th * 0.8, L * 0.04); + segs.emplace_back(E + Vec2d(hs, 0), E + Vec2d(0, hs)); + segs.emplace_back(E + Vec2d(0, hs), E + Vec2d(-hs, 0)); + segs.emplace_back(E + Vec2d(-hs, 0), E + Vec2d(0, -hs)); + segs.emplace_back(E + Vec2d(0, -hs), E + Vec2d(hs, 0)); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_pt_stroke_model, segs, std::max(0.8 * upp, 1e-4), col); + DimAnnot da; da.kind = DimType::Distance; da.value = m_pt_spacing; + draw_text(m_line_model, dim_text(da), Vec2d(m_pt_spacing * 0.5, tk * 1.7), th, col); + m_plane = saved; + return; + } + + // ---- Circular: clone the Revolve arc about the plane normal through the plane origin ---- + const Vec3d yax = m_pt_normal.cross(m_pt_cref).normalized(); + SketchPlane rp; rp.origin = m_pt_ccenter; rp.x_axis = m_pt_cref; rp.y_axis = yax; rp.normal = m_pt_normal; + m_plane = rp; + const double r = m_pt_radius; + const double a = m_pt_angle * M_PI / 180.0; + const int N = std::max(8, int(a / (M_PI / 32.0))); + Vec2d prev(r, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = a * double(i) / double(N); + const Vec2d cur(r * std::cos(t), r * std::sin(t)); + segs.emplace_back(prev, cur); + prev = cur; + } + const Vec2d tip(r * std::cos(a), r * std::sin(a)); + segs.emplace_back(Vec2d(0, 0), Vec2d(r, 0)); // angle-0 spoke + segs.emplace_back(Vec2d(0, 0), tip); // swept spoke (the handle) + const Vec2d tang(-std::sin(a), std::cos(a)); + const Vec2d radial = tip.normalized(); + const double as = std::max(r * 0.14, th); + segs.emplace_back(tip, tip - tang * as - radial * (as * 0.5)); + segs.emplace_back(tip, tip - tang * as + radial * (as * 0.5)); + const double hs = std::max(th * 0.8, r * 0.05); + const Vec2d du = radial * hs, dv = Vec2d(-radial.y(), radial.x()) * hs; + segs.emplace_back(tip + du, tip + dv); + segs.emplace_back(tip + dv, tip - du); + segs.emplace_back(tip - du, tip - dv); + segs.emplace_back(tip - dv, tip + du); + glsafe(::glDisable(GL_DEPTH_TEST)); + draw_strokes(m_pt_stroke_model, segs, std::max(0.8 * upp, 1e-4), col); + DimAnnot da; da.kind = DimType::Angle; da.value = m_pt_angle; + draw_text(m_line_model, dim_text(da), tip * 1.14, th, col); + m_plane = saved; +} + +bool DesignSketchTool::hit_test_pattern_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const +{ + if (!m_pt_active) return false; + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + const Camera& cam = wxGetApp().plater()->get_camera(); + const double upp = 1.0 / std::max(cam.get_zoom(), 1e-6); + auto ray_pt = [&](const Vec3d& p) { + const double t = (p - ro).dot(rd) / std::max(rd.dot(rd), 1e-12); + return (p - (ro + t * rd)).norm(); + }; + if (!m_pt_circular) { + const double tol = 8.0 * upp; + const double L = pt_linear_len(m_pt_spacing, m_pt_count); + return ray_segment_dist3(ro, rd, m_pt_base, m_pt_base + m_pt_dirw * L) <= tol; + } + const double tol = 16.0 * upp; + const Vec3d yax = m_pt_normal.cross(m_pt_cref).normalized(); + const double a = m_pt_angle * M_PI / 180.0; + const Vec3d tip = m_pt_ccenter + m_pt_radius * (std::cos(a) * m_pt_cref + std::sin(a) * yax); + const Vec3d ref = m_pt_ccenter + m_pt_radius * m_pt_cref; + const int N = 48; + for (int i = 0; i <= N; ++i) { + const double f = double(i) / double(N); + const Vec3d arc = m_pt_ccenter + m_pt_radius * (std::cos(a * f) * m_pt_cref + std::sin(a * f) * yax); + if (ray_pt(arc) <= tol) return true; + if (ray_pt(m_pt_ccenter + f * (tip - m_pt_ccenter)) <= tol) return true; + if (ray_pt(m_pt_ccenter + f * (ref - m_pt_ccenter)) <= tol) return true; + } + return false; +} + +void DesignSketchTool::drag_pattern_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) +{ + const Linef3 ray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Vec3d ro = ray.a, rd = ray.b - ray.a; + if (!m_pt_circular) { + // Skew-line closest point of the mouse ray to the march axis -> span -> spacing. + const Vec3d e = m_pt_dirw; + const Vec3d w0 = m_pt_base - ro; + const double a = e.dot(e), b = e.dot(rd), c = rd.dot(rd), dd = e.dot(w0), ee = rd.dot(w0); + const double denom = a * c - b * b; + if (std::abs(denom) < 1e-7) return; // camera ∥ axis: leave spacing as-is + const double span = std::max(0.01, (b * ee - c * dd) / denom); + const int div = std::max(1, m_pt_count - 1); + m_pt_spacing = std::max(0.1, span / double(div)); + if (on_pattern_changed) on_pattern_changed(m_pt_spacing); + return; + } + const double denom = rd.dot(m_pt_normal); + if (std::abs(denom) < 1e-9) return; // ray ∥ rotation plane: leave angle as-is + const double t = (m_pt_ccenter - ro).dot(m_pt_normal) / denom; + const Vec3d p = ro + t * rd; + const Vec3d yax = m_pt_normal.cross(m_pt_cref).normalized(); + double deg = std::atan2((p - m_pt_ccenter).dot(yax), (p - m_pt_ccenter).dot(m_pt_cref)) * 180.0 / M_PI; + if (deg < 0.0) deg += 360.0; + m_pt_angle = std::min(360.0, std::max(1.0, deg)); + if (on_pattern_changed) on_pattern_changed(m_pt_angle); +} + +void DesignSketchTool::open_pattern_editor() +{ + if (!on_inline_edit) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + const double cur = m_pt_circular ? m_pt_angle : m_pt_spacing; + on_inline_edit(px, cur, "", + [this](double v) { + if (m_pt_circular) m_pt_angle = std::min(360.0, std::max(1.0, v)); + else m_pt_spacing = std::max(0.1, v); + if (on_pattern_changed) on_pattern_changed(m_pt_circular ? m_pt_angle : m_pt_spacing); + }, + []() {}); +} + +// Closed loops + the entity indices that form each one. A circle/ellipse is its own loop; +// line/arc chains are walked endpoint-to-endpoint. Entity membership lets a single loop be +// highlighted and extruded on its own. +std::vector +DesignSketchTool::region_loops(const std::vector& ents) const +{ + std::vector regions; + const double eps2 = sketch_join_tol() * sketch_join_tol(); + auto is_near = [&](const Vec2d& a, const Vec2d& b) { return (a - b).squaredNorm() < eps2; }; + + // Circles are self-closed regions; lines/arcs are open segments to be chained. Each + // Seg remembers the entity index it came from. + struct Seg { std::vector pts; int ent{-1}; bool used{false}; }; + std::vector segs; + for (int i = 0; i < int(ents.size()); ++i) { + const SketchEntity& e = ents[i]; + if (e.construction) continue; + bool closed = false; + if (e.type == SketchEntity::Type::Circle || e.type == SketchEntity::Type::Ellipse) { + regions.push_back({ entity_polyline(e, closed), { i } }); + } else if (e.type == SketchEntity::Type::Line || e.type == SketchEntity::Type::Arc + || e.type == SketchEntity::Type::EllipseArc + || e.type == SketchEntity::Type::BSpline) { + std::vector p = entity_polyline(e, closed); + if (p.size() >= 2) segs.push_back({ std::move(p), i, false }); + } + } + + // Walk each unused segment endpoint-to-endpoint until the chain returns to its + // start (a closed loop) or stalls (an open chain, discarded). + for (size_t s = 0; s < segs.size(); ++s) { + if (segs[s].used) continue; + segs[s].used = true; + std::vector loop = segs[s].pts; + std::vector loop_ents = { segs[s].ent }; + const Vec2d start = loop.front(); + Vec2d cur = loop.back(); + bool extended = true; + while (extended && !is_near(cur, start)) { + extended = false; + for (size_t t = 0; t < segs.size(); ++t) { + if (segs[t].used) continue; + const std::vector& q = segs[t].pts; + if (is_near(q.front(), cur)) { + for (size_t k = 1; k < q.size(); ++k) loop.push_back(q[k]); + cur = q.back(); + } else if (is_near(q.back(), cur)) { + for (int k = int(q.size()) - 2; k >= 0; --k) loop.push_back(q[k]); + cur = q.front(); + } else { + continue; + } + segs[t].used = true; + loop_ents.push_back(segs[t].ent); + extended = true; + break; + } + } + if (is_near(cur, start) && loop.size() >= 4) { + loop.pop_back(); // drop the duplicate closing vertex + regions.push_back({ std::move(loop), std::move(loop_ents), {} }); + } + } + + // NESTING. A loop drawn inside another one is that one's HOLE. Without this a sketch is + // just N disjoint filled polygons, so "the plate with the hole" is not expressible and the + // multi-loop kernel path (88v) is unreachable from the viewport — which is exactly + // what Tommaso hit: a rectangle with a circle inside extruded to a plain box, because only + // the rectangle loop could be picked and only its entities were passed on. + // + // Loops in a well-formed sketch do not cross, so testing ONE point decides containment. + // Each loop is assigned to the SMALLEST loop that contains it, which is what makes a hole + // belong to the region that actually bounds it rather than to every enclosing loop. + // + // The point must be STRICTLY INSIDE the loop, not one of its vertices. A vertex is exactly + // where two loops are most likely to touch in a real drawing — a bore breaking out through + // a boss wall, a slot that ends on an outline — and a ray cast from a point that lies ON the + // polygon being tested answers by rounding, so the same drawing can be read either way. + // Measured on the StudyCadCam corpus: the engine and an independent containment check + // disagreed on 6 of 39 sheets, and every disagreement was a probe point sitting on the other + // loop's boundary. 5hvl. + auto poly_area = [](const std::vector& q) { + double a2 = 0.0; + for (size_t i = 0, j = q.size() - 1; i < q.size(); j = i++) + a2 += (q[j].x() + q[i].x()) * (q[j].y() - q[i].y()); + return std::abs(a2) * 0.5; + }; + auto point_in = [](const Vec2d& pt, const std::vector& q) { + bool in = false; + for (size_t i = 0, j = q.size() - 1; i < q.size(); j = i++) { + const Vec2d& A = q[i]; const Vec2d& B = q[j]; + if (((A.y() > pt.y()) != (B.y() > pt.y())) && + (pt.x() < (B.x() - A.x()) * (pt.y() - A.y()) / (B.y() - A.y()) + A.x())) + in = !in; + } + return in; + }; + // A point strictly inside a simple polygon: the lowest vertex of a simple polygon is always + // CONVEX, so stepping from it along the bisector of its two edges goes into the interior. + // The step is a small fraction of the shorter adjacent edge, so it stays inside however + // sharp the corner is. + auto interior_point = [](const std::vector& q) { + size_t k = 0; + for (size_t i = 1; i < q.size(); ++i) + if (q[i].y() < q[k].y() || (q[i].y() == q[k].y() && q[i].x() < q[k].x())) k = i; + const Vec2d& v = q[k]; + Vec2d a = q[(k + q.size() - 1) % q.size()] - v; + Vec2d b = q[(k + 1) % q.size()] - v; + const double la = a.norm(), lb = b.norm(); + if (la < 1e-12 || lb < 1e-12) return v; // degenerate: nothing better to say + a /= la; b /= lb; + Vec2d bis = a + b; + if (bis.norm() < 1e-12) return v; // 180 deg spike: same + bis.normalize(); + return Vec2d(v + bis * (1e-3 * std::min(la, lb))); + }; + std::vector probe(regions.size()); + for (size_t i = 0; i < regions.size(); ++i) + if (regions[i].poly.size() >= 3) probe[i] = interior_point(regions[i].poly); + else if (!regions[i].poly.empty()) probe[i] = regions[i].poly.front(); + for (size_t i = 0; i < regions.size(); ++i) { + if (regions[i].poly.empty()) continue; + int best = -1; + double best_area = 0.0; + for (size_t j = 0; j < regions.size(); ++j) { + if (i == j || regions[j].poly.size() < 3) continue; + if (!point_in(probe[i], regions[j].poly)) continue; + const double a2 = poly_area(regions[j].poly); + if (best < 0 || a2 < best_area) { best = int(j); best_area = a2; } + } + if (best >= 0) regions[best].holes.push_back(int(i)); + } + return regions; +} + +int DesignSketchTool::region_at(const Vec2d& p) const +{ + // Walk region_loops (which already knows about holes) rather than the raw polygons: the + // returned index must stay meaningful after the sketch is committed, so it has to use the + // SAME numbering selected_loop_entities() and hit_display_sketch consume. + const std::vector regions = region_loops(m_entities); + auto inside = [](const Vec2d& q, const std::vector& poly) { + bool in = false; + for (size_t i = 0, j = poly.size() - 1; i < poly.size(); j = i++) { + const Vec2d& a = poly[i]; + const Vec2d& b = poly[j]; + if (((a.y() > q.y()) != (b.y() > q.y())) && + (q.x() < (b.x() - a.x()) * (q.y() - a.y()) / (b.y() - a.y()) + a.x())) + in = !in; + } + return in; + }; + // Shoelace area (absolute): the SMALLEST loop containing p is the innermost one, which is + // the region that actually owns the point — a bore inside a plate resolves to the disc, and + // a click on the plate material resolves to the plate even though the disc is also inside it. + auto poly_area = [](const std::vector& q) { + double a2 = 0.0; + for (size_t i = 0, j = q.size() - 1; i < q.size(); j = i++) + a2 += (q[j].x() + q[i].x()) * (q[j].y() - q[i].y()); + return std::abs(a2) * 0.5; + }; + int best = -1; + double best_area = 0.0; + for (size_t i = 0; i < regions.size(); ++i) { + if (regions[i].poly.size() < 3) continue; + if (!inside(p, regions[i].poly)) continue; + bool in_hole = false; // p inside one of this region's holes → that hole owns it, not us + for (int h : regions[i].holes) { + if (h < 0 || h >= int(regions.size()) || regions[h].poly.size() < 3) continue; + if (inside(p, regions[h].poly)) { in_hole = true; break; } + } + if (in_hole) continue; + const double a = poly_area(regions[i].poly); + if (best < 0 || a < best_area) { best = int(i); best_area = a; } + } + return best; +} + +// ---- rendering -------------------------------------------------------------- + +// Chop a polyline into dashes (imlq). Construction geometry is dashed in every CAD; +// this one painted it solid grey, which against the under-constrained orange reads as "another +// line", not as "reference only". The dash and gap arrive in WORLD units — the caller scales them +// by units-per-pixel, so the dash keeps its size on screen at any zoom instead of turning into a +// solid line when you zoom out and into three dashes when you zoom in. +static std::vector> dash_polyline(const std::vector& pts, bool closed, + double dash, double gap) +{ + std::vector> out; + if (pts.size() < 2 || dash <= 0.0 || gap <= 0.0) return out; + const size_t segs = closed ? pts.size() : pts.size() - 1; + bool on = true; // start on a dash, so a short entity is still visible + double left = dash; // distance remaining in the current dash/gap + std::vector cur; + if (on) cur.push_back(pts[0]); + for (size_t i = 0; i < segs; ++i) { + const Vec2d a = pts[i], b = pts[(i + 1) % pts.size()]; + double seg = (b - a).norm(); + if (seg < 1e-12) continue; + const Vec2d dir = (b - a) / seg; + double t = 0.0; + while (seg - t > left) { + t += left; + const Vec2d p = a + dir * t; + if (on) { cur.push_back(p); out.push_back(cur); cur.clear(); } + else { cur.clear(); cur.push_back(p); } + on = !on; + left = on ? dash : gap; + } + left -= (seg - t); + if (on) cur.push_back(b); + } + if (on && cur.size() >= 2) out.push_back(cur); + return out; +} + +void DesignSketchTool::draw_quad_strip(GLModel& model, const std::vector& pts, bool closed, const ColorRGBA& color) +{ + if (pts.size() < 2) + return; + + // Half-width in WORLD units, so a stroke is 2*hw mm wide on the plane. Halved from 0.6 on + // user report 2026-08-23: at 1.2 mm the orange under-constrained line was heavy enough to + // swallow a short segment and to hide which of two near-parallel lines the cursor was on. + // Every one of this function's call sites is a sketch stroke (entities, previews, rubber + // bands), which is why the constant is here and not a parameter at twenty call sites. + const double hw = 0.3; + GLModel::Geometry g; + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + unsigned int base = 0; + + const size_t segs = closed ? pts.size() : pts.size() - 1; + for (size_t i = 0; i < segs; ++i) { + const Vec2d a = pts[i]; + const Vec2d b = pts[(i + 1) % pts.size()]; + const Vec2d d = b - a; + const double len = d.norm(); + if (len < 1e-6) + continue; + const Vec2d n(-d.y() / len, d.x() / len); + const Vec2d o = n * hw; + g.add_vertex((Vec3f)m_plane.to_world(a + o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(b + o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(b - o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(a - o).cast()); + g.add_triangle(base, base + 1, base + 2); + g.add_triangle(base, base + 2, base + 3); + base += 4; + } + + if (base > 0) { + model.reset(); + model.init_from(std::move(g)); + model.set_color(color); + model.render(); + } +} + +namespace { +double poly_signed_area(const std::vector& p) +{ + double a = 0.0; + for (size_t i = 0, n = p.size(); i < n; ++i) { + const Vec2d& u = p[i]; + const Vec2d& v = p[(i + 1) % n]; + a += u.x() * v.y() - v.x() * u.y(); + } + return 0.5 * a; +} +bool pt_in_tri(const Vec2d& p, const Vec2d& a, const Vec2d& b, const Vec2d& c) +{ + auto cross = [](const Vec2d& u, const Vec2d& v, const Vec2d& w) { + return (v.x() - u.x()) * (w.y() - u.y()) - (v.y() - u.y()) * (w.x() - u.x()); + }; + const double d1 = cross(a, b, p), d2 = cross(b, c, p), d3 = cross(c, a, p); + const bool neg = (d1 < 0) || (d2 < 0) || (d3 < 0); + const bool pos = (d1 > 0) || (d2 > 0) || (d3 > 0); + return !(neg && pos); // inside iff all cross products share a sign +} +// Ear-clipping triangulation of a simple polygon; returns index triples into `poly`. +std::vector> ear_clip(const std::vector& poly) +{ + std::vector> tris; + const size_t n = poly.size(); + if (n < 3) return tris; + std::vector idx(n); + for (unsigned i = 0; i < n; ++i) idx[i] = i; + if (poly_signed_area(poly) < 0.0) std::reverse(idx.begin(), idx.end()); // work CCW + int guard = 0; + while (idx.size() > 3 && guard++ < int(10 * n)) { + bool clipped = false; + const int m = int(idx.size()); + for (int i = 0; i < m; ++i) { + const unsigned i0 = idx[(i + m - 1) % m]; + const unsigned i1 = idx[i]; + const unsigned i2 = idx[(i + 1) % m]; + const Vec2d& a = poly[i0]; const Vec2d& b = poly[i1]; const Vec2d& c = poly[i2]; + const double cr = (b.x() - a.x()) * (c.y() - a.y()) - (b.y() - a.y()) * (c.x() - a.x()); + if (cr <= 0.0) continue; // reflex vertex, not an ear tip + bool ear = true; + for (int j = 0; j < m; ++j) { + const unsigned ij = idx[j]; + if (ij == i0 || ij == i1 || ij == i2) continue; + if (pt_in_tri(poly[ij], a, b, c)) { ear = false; break; } + } + if (!ear) continue; + tris.push_back({ i0, i1, i2 }); + idx.erase(idx.begin() + i); + clipped = true; + break; + } + if (!clipped) break; // degenerate input: bail rather than spin + } + if (idx.size() == 3) tris.push_back({ idx[0], idx[1], idx[2] }); + return tris; +} +} // namespace + +// Fill a region that has holes with an EVEN-ODD SCANLINE fill: each horizontal band is scanned +// across every contour, the crossings sorted, and the spans between alternate crossings emitted +// as quads. A hole is just two more crossings, so any number of holes and any concavity fall out +// of the parity rule — no bridge and no triangulation to fail. +void DesignSketchTool::draw_fill_holed(GLModel& model, const std::vector& outer, + const std::vector>& holes, + const ColorRGBA& color) +{ + if (outer.size() < 3) return; + if (holes.empty()) { draw_fill(model, outer, color); return; } + + // EVEN-ODD SCANLINE, not a triangulation. The previous version spliced each hole into the + // outer contour through a keyhole corridor and ear-clipped the result; the corridor did not + // collapse to zero width and was drawn as a visible triangle running from the bore to the + // nearest rectangle corner. Rather than tune a bridge that can always find a new shape to + // fail on, this fills the region the way a rasteriser would: for each horizontal band, cross + // EVERY contour, sort the crossings, and fill between alternate pairs. A hole is simply two + // more crossings, so any number of holes and any concavity fall out of the same rule and no + // corridor exists to leak. + std::vector*> contours; + contours.push_back(&outer); + for (const auto& h : holes) if (h.size() >= 3) contours.push_back(&h); + + double ymin = outer[0].y(), ymax = ymin, xmin = outer[0].x(), xmax = xmin; + for (const auto* c : contours) + for (const Vec2d& v : *c) { + ymin = std::min(ymin, v.y()); ymax = std::max(ymax, v.y()); + xmin = std::min(xmin, v.x()); xmax = std::max(xmax, v.x()); + } + if (ymax - ymin < 1e-9) return; + + // Enough bands that the step is far below a pixel at any sane zoom, cheap enough to rebuild + // every frame: this is a translucent highlight, not geometry. + const int ROWS = 256; + const double dy = (ymax - ymin) / ROWS; + + GLModel::Geometry g; + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + unsigned base = 0; + std::vector xs; + for (int row = 0; row < ROWS; ++row) { + const double y0 = ymin + dy * row, y1 = y0 + dy, ym = 0.5 * (y0 + y1); + xs.clear(); + for (const auto* c : contours) { + const std::vector& q = *c; + for (size_t i = 0, j = q.size() - 1; i < q.size(); j = i++) { + const Vec2d& A = q[i]; const Vec2d& B = q[j]; + if ((A.y() > ym) == (B.y() > ym)) continue; // edge does not cross this row + xs.push_back(A.x() + (ym - A.y()) * (B.x() - A.x()) / (B.y() - A.y())); + } + } + if (xs.size() < 2) continue; + std::sort(xs.begin(), xs.end()); + for (size_t k = 0; k + 1 < xs.size(); k += 2) { // even-odd: fill alternate spans + const double xa = xs[k], xb = xs[k + 1]; + if (xb - xa < 1e-9) continue; + g.add_vertex((Vec3f)m_plane.to_world(Vec2d(xa, y0)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(Vec2d(xb, y0)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(Vec2d(xb, y1)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(Vec2d(xa, y1)).cast()); + g.add_triangle(base, base + 1, base + 2); + g.add_triangle(base, base + 2, base + 3); + base += 4; + } + } + if (base == 0) return; + model.reset(); + model.init_from(std::move(g)); + model.set_color(color); + model.render(); +} + +void DesignSketchTool::draw_fill(GLModel& model, const std::vector& poly, const ColorRGBA& color) +{ + if (poly.size() < 3) return; + const auto tris = ear_clip(poly); + if (tris.empty()) return; + GLModel::Geometry g; + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + for (const Vec2d& p : poly) + g.add_vertex((Vec3f)m_plane.to_world(p).cast()); + for (const auto& t : tris) + g.add_triangle(t[0], t[1], t[2]); + model.reset(); + model.init_from(std::move(g)); + model.set_color(color); + model.render(); +} + +void DesignSketchTool::draw_vertices(GLModel& model, const std::vector& pts, const ColorRGBA& color, + double half_size) +{ + if (pts.empty()) + return; + + const double hs = half_size; + GLModel::Geometry g; + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + unsigned int base = 0; + for (const Vec2d& p : pts) { + g.add_vertex((Vec3f)m_plane.to_world(p + Vec2d(-hs, -hs)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(p + Vec2d( hs, -hs)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(p + Vec2d( hs, hs)).cast()); + g.add_vertex((Vec3f)m_plane.to_world(p + Vec2d(-hs, hs)).cast()); + g.add_triangle(base, base + 1, base + 2); + g.add_triangle(base, base + 2, base + 3); + base += 4; + } + + model.reset(); + model.init_from(std::move(g)); + model.set_color(color); + model.render(); +} + +// Independent thick-line segments batched into one immediate-mode draw (quote lines, +// extension lines, arrowheads, glyph strokes). Mirrors draw_quad_strip's lift-to-world. +void DesignSketchTool::draw_strokes(GLModel& model, const std::vector>& segs, + double hw, const ColorRGBA& color) +{ + GLModel::Geometry g; + g.format = { GLModel::Geometry::EPrimitiveType::Triangles, GLModel::Geometry::EVertexLayout::P3 }; + unsigned int base = 0; + for (const auto& s : segs) { + const Vec2d a = s.first, b = s.second; + const Vec2d d = b - a; + const double len = d.norm(); + if (len < 1e-6) continue; + const Vec2d n(-d.y() / len, d.x() / len); + const Vec2d o = n * hw; + g.add_vertex((Vec3f)m_plane.to_world(a + o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(b + o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(b - o).cast()); + g.add_vertex((Vec3f)m_plane.to_world(a - o).cast()); + g.add_triangle(base, base + 1, base + 2); + g.add_triangle(base, base + 2, base + 3); + base += 4; + } + if (base > 0) { + model.reset(); + model.init_from(std::move(g)); + model.set_color(color); + model.render(); + } +} + +namespace { +// Smooth single-stroke (Hershey-style) vector font for dimension labels. Glyphs +// live in a 0..0.6 (x) by 0..1 (y) cell, baseline at y=0, cap height y=1; curved +// digits are sampled as short segments so they read as rounded shapes, not blocks. +// `advance` is the pen step after the glyph. +constexpr double kPi = 3.14159265358979323846; +inline double rad(double deg) { return deg * kPi / 180.0; } + +// Connect a list of points as a polyline. +void poly(std::vector>& out, std::initializer_list p) +{ + auto it = p.begin(); + if (it == p.end()) return; + Vec2d prev = *it++; + for (; it != p.end(); ++it) { out.emplace_back(prev, *it); prev = *it; } +} +// Sample an elliptical arc (centre cx,cy; radii rx,ry) from angle a0..a1. +void arc(std::vector>& out, double cx, double cy, double rx, double ry, + double a0, double a1, int n = 14) +{ + Vec2d prev(cx + rx * std::cos(a0), cy + ry * std::sin(a0)); + for (int i = 1; i <= n; ++i) { + const double t = a0 + (a1 - a0) * (double)i / n; + const Vec2d cur(cx + rx * std::cos(t), cy + ry * std::sin(t)); + out.emplace_back(prev, cur); + prev = cur; + } +} + +void glyph_strokes(char c, std::vector>& out, double& advance) +{ + advance = 0.72; + switch (c) { + case '0': + arc(out, 0.30, 0.50, 0.25, 0.48, 0.0, 2.0 * kPi); + break; + case '1': + poly(out, {Vec2d(0.13, 0.76), Vec2d(0.33, 1.0), Vec2d(0.33, 0.0)}); + poly(out, {Vec2d(0.13, 0.0), Vec2d(0.53, 0.0)}); + advance = 0.52; + break; + case '2': + arc(out, 0.30, 0.72, 0.25, 0.25, rad(170), rad(-45)); + poly(out, {Vec2d(0.477, 0.543), Vec2d(0.06, 0.0), Vec2d(0.56, 0.0)}); + break; + case '3': + arc(out, 0.30, 0.74, 0.24, 0.24, rad(160), rad(-90)); + arc(out, 0.30, 0.26, 0.26, 0.26, rad(90), rad(-160)); + break; + case '4': + poly(out, {Vec2d(0.42, 1.0), Vec2d(0.04, 0.32), Vec2d(0.58, 0.32)}); + poly(out, {Vec2d(0.42, 1.0), Vec2d(0.42, 0.0)}); + break; + case '5': + poly(out, {Vec2d(0.54, 1.0), Vec2d(0.12, 1.0), Vec2d(0.11, 0.52)}); + arc(out, 0.27, 0.30, 0.27, 0.27, rad(130), rad(-120)); + break; + case '6': + arc(out, 0.30, 0.28, 0.26, 0.26, 0.0, 2.0 * kPi); + arc(out, 0.30, 0.55, 0.30, 0.45, rad(90), rad(190)); + break; + case '7': + poly(out, {Vec2d(0.05, 1.0), Vec2d(0.57, 1.0), Vec2d(0.22, 0.0)}); + break; + case '8': + arc(out, 0.30, 0.73, 0.22, 0.25, 0.0, 2.0 * kPi); + arc(out, 0.30, 0.26, 0.26, 0.26, 0.0, 2.0 * kPi); + break; + case '9': + arc(out, 0.30, 0.70, 0.26, 0.26, 0.0, 2.0 * kPi); + arc(out, 0.28, 0.55, 0.28, 0.55, rad(15), rad(-90)); + break; + case '.': + case ',': // locale (LC_NUMERIC) may format the decimal separator as a comma + // small solid dot: crossed short strokes so the quads fill a visible disk + poly(out, {Vec2d(0.10, 0.08), Vec2d(0.24, 0.08)}); + poly(out, {Vec2d(0.17, 0.02), Vec2d(0.17, 0.15)}); + advance = 0.30; + break; + case '-': + poly(out, {Vec2d(0.10, 0.5), Vec2d(0.50, 0.5)}); + advance = 0.62; + break; + case 'R': + poly(out, {Vec2d(0.08, 0.0), Vec2d(0.08, 1.0), Vec2d(0.38, 1.0)}); + arc(out, 0.38, 0.75, 0.17, 0.25, rad(90), rad(-90)); + poly(out, {Vec2d(0.38, 0.50), Vec2d(0.08, 0.50)}); + poly(out, {Vec2d(0.30, 0.50), Vec2d(0.58, 0.0)}); + advance = 0.80; + break; + case 'X': + poly(out, {Vec2d(0.06, 1.0), Vec2d(0.58, 0.0)}); + poly(out, {Vec2d(0.58, 1.0), Vec2d(0.06, 0.0)}); + advance = 0.72; + break; + case 'Y': + poly(out, {Vec2d(0.06, 1.0), Vec2d(0.32, 0.52)}); + poly(out, {Vec2d(0.58, 1.0), Vec2d(0.32, 0.52)}); + poly(out, {Vec2d(0.32, 0.52), Vec2d(0.32, 0.0)}); + advance = 0.72; + break; + case 'Z': + poly(out, {Vec2d(0.06, 1.0), Vec2d(0.58, 1.0), Vec2d(0.06, 0.0), Vec2d(0.58, 0.0)}); + advance = 0.72; + break; + case ' ': + advance = 0.5; + break; + default: + advance = 0.5; + break; + } +} +} // namespace + +void DesignSketchTool::draw_dim_label(const std::string& txt, const Vec2d& plane_center) +{ + if (txt.empty()) return; + const Camera& cam = wxGetApp().plater()->get_camera(); + const wxPoint sp = world_to_screen_px(cam, m_plane.to_world(plane_center)); + if (sp.x < 0 && sp.y < 0) return; + ImGuiWrapper* imgui = wxGetApp().imgui(); + // Identical to the Prepare/Preview Measure gizmo label (GLGizmoMeasure::render_dimensioning): + // push_common_window_style sets the white text colour + font/scale (without it the text is + // invisible); BringWindowToDisplayFront keeps the per-frame label window on top. + ImGuiWrapper::push_common_window_style(m_render_scale); + imgui->set_next_window_pos((float)sp.x, (float)sp.y, ImGuiCond_Always, 0.5f, 0.5f); + imgui->set_next_window_bg_alpha(0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(1.0f, 1.0f)); + const std::string win = "##sketchdim" + std::to_string(m_dim_label_seq++); + imgui->begin(win, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration + | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoFocusOnAppearing + | ImGuiWindowFlags_NoNav); + ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); + ImGui::AlignTextToFramePadding(); + ImDrawList* dl = ImGui::GetWindowDrawList(); + const ImVec2 pos = ImGui::GetCursorScreenPos(); + const ImVec2 ts = ImGui::CalcTextSize(txt.c_str()); + const ImGuiStyle& st = ImGui::GetStyle(); + dl->AddRectFilled(ImVec2(pos.x - st.FramePadding.x, pos.y + st.FramePadding.y), + ImVec2(pos.x + ts.x + 2.0f * st.FramePadding.x, + pos.y + ts.y + 2.0f * st.FramePadding.y), + ImGuiWrapper::to_ImU32(ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f))); + ImGui::SetCursorScreenPos(ImVec2(pos.x + st.FramePadding.x, pos.y)); + imgui->text(txt); + imgui->end(); + ImGui::PopStyleVar(3); + ImGuiWrapper::pop_common_window_style(); +} + +void DesignSketchTool::draw_text(GLModel& /*model*/, const std::string& s, const Vec2d& center, + double /*height*/, const ColorRGBA& /*color*/) +{ + // ponytail: all sketch labels now render as Measure-gizmo-style ImGui labels for visual + // parity with the Prepare/Preview tabs; the old vector-font path (glyph_strokes/draw_strokes + // for text) is retired. Leader lines/arrows still draw via draw_strokes at the call sites. + draw_dim_label(s, center); +} + +// Draw every placed dimension: extension lines, the offset dimension line, arrowheads +// and the numeric label. Geometry is recomputed from the (solved) entities each frame +// so the quote tracks the sketch. +// Draw one dimension's quote (extension/dimension lines, arrowheads, numeric label). +// Geometry is recomputed from the (solved) entities so the quote tracks the sketch. +// Returns the label centre in out_label; false if the annot references missing/degenerate +// geometry. Shared by placed (render_dimensions) and live (render_live_quotes) quotes. +bool DesignSketchTool::draw_dim_quote(const DimAnnot& a, double th, const ColorRGBA& dimcol, + Vec2d& out_label) +{ + std::vector> segs; + if (a.kind == DimType::Length || a.kind == DimType::Distance) { + Vec2d pa, pb; + if (a.kind == DimType::Length) { + if (a.ea < 0 || a.ea >= int(m_entities.size())) return false; + pa = m_entities[a.ea].p0; pb = m_entities[a.ea].p1; + } else if (!point_at(a.ea, a.ra, pa) || !point_at(a.eb, a.rb, pb)) { + return false; + } + const Vec2d d = pb - pa; + const double L = d.norm(); + if (L < 1e-6) return false; + const Vec2d u = d / L; + const Vec2d nrm(-u.y(), u.x()); + const double side = (a.side != 0.0) ? a.side : 1.0; + const double off = side * std::max(L * 0.18, 8.0); + const Vec2d A2 = pa + nrm * off, B2 = pb + nrm * off; // offset clear of the sketch line + segs.emplace_back(A2, B2); // dimension line (not on the geometry) + const double as = std::max(L * 0.04, 2.0); + auto arrow = [&](const Vec2d& tip, const Vec2d& dir) { + const Vec2d back = tip + dir * as; + segs.emplace_back(tip, back + nrm * (as * 0.5)); + segs.emplace_back(tip, back - nrm * (as * 0.5)); + }; + arrow(A2, u); arrow(B2, -u); + out_label = (A2 + B2) * 0.5 + nrm * (side * (th * 0.7 + 1.5)); + } else if (a.kind == DimType::Diameter || a.kind == DimType::Radius) { + if (a.ea < 0 || a.ea >= int(m_entities.size())) return false; + const SketchEntity& e = m_entities[a.ea]; + const Vec2d c = e.center; + const double r = e.radius; + if (r < 1e-6) return false; + const Vec2d u(1.0, 0.0); + const double as = std::max(r * 0.12, 2.0); + if (a.kind == DimType::Diameter) { + const Vec2d p1 = c - u * r, p2 = c + u * r; + segs.emplace_back(p1, p2); + segs.emplace_back(p1, p1 + u * as + Vec2d(0, 1) * (as * 0.5)); + segs.emplace_back(p1, p1 + u * as - Vec2d(0, 1) * (as * 0.5)); + segs.emplace_back(p2, p2 - u * as + Vec2d(0, 1) * (as * 0.5)); + segs.emplace_back(p2, p2 - u * as - Vec2d(0, 1) * (as * 0.5)); + out_label = c + Vec2d(0, 1) * (th * 0.8); + } else { + const Vec2d p2 = c + u * r; + segs.emplace_back(c, p2); + segs.emplace_back(p2, p2 - u * as + Vec2d(0, 1) * (as * 0.5)); + segs.emplace_back(p2, p2 - u * as - Vec2d(0, 1) * (as * 0.5)); + out_label = (c + p2) * 0.5 + Vec2d(0, 1) * (th * 0.8); + } + } else if (a.kind == DimType::DistanceToLine) { + Vec2d pa; + if (!point_at(a.ea, a.ra, pa) || a.eb < 0 || a.eb >= int(m_entities.size())) return false; + const SketchEntity& Ln = m_entities[a.eb]; + const Vec2d ld = Ln.p1 - Ln.p0; + const double n = ld.norm(); + if (n < 1e-9) return false; + const Vec2d u = ld / n; + const double t = (pa - Ln.p0).dot(u); + const Vec2d foot = Ln.p0 + u * t; // perpendicular foot on the line + segs.emplace_back(pa, foot); + out_label = (pa + foot) * 0.5 + u * (th * 0.7 + 1.5); + } else if (a.kind == DimType::Angle) { + if (a.ea < 0 || a.ea >= int(m_entities.size())) return false; + const SketchEntity& e = m_entities[a.ea]; + if (e.type != SketchEntity::Type::Line) return false; + const Vec2d d = e.p1 - e.p0; + const double L = d.norm(); + if (L < 1e-6) return false; + double ang = std::atan2(d.y(), d.x()); // signed, matches measure_dim sweep + const double rr = std::max(std::min(L * 0.35, 40.0), th * 1.6); // arc radius + segs.emplace_back(e.p0, e.p0 + Vec2d(rr * 1.15, 0.0)); // horizontal reference leg + const int N = 20; // arc 0 -> ang about p0 + Vec2d prev = e.p0 + Vec2d(rr, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = ang * double(i) / N; + const Vec2d cur = e.p0 + Vec2d(rr * std::cos(t), rr * std::sin(t)); + segs.emplace_back(prev, cur); prev = cur; + } + const double mid = ang * 0.5; + out_label = e.p0 + Vec2d(std::cos(mid), std::sin(mid)) * (rr + th * 1.1); + } else { + return false; + } + draw_strokes(m_highlight_model, segs, 0.2, dimcol); + draw_text(m_line_model, dim_text(a), out_label, th, dimcol); + return true; +} + +// Draw every placed (driving) dimension; cache each label centre for picking. +void DesignSketchTool::render_dimensions(double unit_per_px) +{ + if (m_dimensions.empty()) return; + const ColorRGBA dimcol(0.85f, 0.85f, 0.85f, 1.0f); // neutral leader (Measure parity) + // Label text is a CONSTANT screen size (like real CAD), not scaled to geometry, + // so a long line doesn't get huge text. ~15 px tall in plane units at this zoom. + const double th = std::max(15.0 * unit_per_px, 1e-4); + for (size_t di = 0; di < m_dimensions.size(); ++di) { + Vec2d label; + if (draw_dim_quote(m_dimensions[di], th, dimcol, label)) + m_dimensions[di].label_pos = label; + } +} + +// Per-entity-type characteristic dimensions, drawn as live non-driving quotes for the +// entity being edited (point/handle drag, or a lone selection). This is the Onshape +// pattern that scales to every tool: each kind reports its defining dimension(s); each +// is clickable (m_live_quotes) to promote to a driving dim + open the inline editor. +// A dim already driven on the entity is skipped (render_dimensions draws that one). +void DesignSketchTool::render_live_quotes(double unit_per_px) +{ + m_live_quotes.clear(); + m_live_poly_fi = -1; + m_live_poly_side_label = m_live_poly_angle_label = Vec2d(1e18, 1e18); + m_live_arc_ei = -1; + m_live_arc_angle_label = Vec2d(1e18, 1e18); + m_live_ellipse_ei = -1; + m_live_ellipse_major_label = m_live_ellipse_minor_label = Vec2d(1e18, 1e18); + m_live_ellipsearc_sweep_label = Vec2d(1e18, 1e18); + m_live_obrect_fi = -1; + m_live_obrect_angle_label = Vec2d(1e18, 1e18); + m_live_rrect_fi = -1; + m_live_rrect_w_label = m_live_rrect_h_label = m_live_rrect_r_label = Vec2d(1e18, 1e18); + m_live_aslot_fi = -1; + m_live_aslot_r_label = m_live_aslot_w_label = Vec2d(1e18, 1e18); + m_live_slot_fi = -1; + m_live_slot_len_label = m_live_slot_w_label = m_live_slot_angle_label = Vec2d(1e18, 1e18); + // Edit-op tools (Fillet/Chamfer/Offset/Mirror) put their picks in m_selection for the + // highlight, but their own arrow/label gizmo is the value affordance — don't also draw + // the picked entity's characteristic quotes (Length/Angle/…) or the view gets cluttered. + if (is_edit_op_mode() || is_transform_mode()) return; + int ei = -1; + if (m_dragging_point && m_drag_ei >= 0) ei = m_drag_ei; + else if (m_dragging_handle) ei = m_drag_handle.ei; + else if (m_selection.size() == 1) ei = m_selection[0]; + else if (!m_selection.empty()) { + // A GROUPED FEATURE SELECTS EVERY MEMBER, so "exactly one entity" hid the characteristic + // quotes for precisely the shapes that have nothing else. A rounded rectangle is eight + // entities — four lines and four arcs — so picking it makes m_selection.size() == 8, this + // pass returned here, and its Width / Height / Radius labels were never drawn. With no + // label on screen there is nothing to click, which is the whole of "cannot edit labels in + // rounded rectangles": not a value that refuses to change, a label that does not exist. + // + // A plain rectangle looked fine only by accident: typing into its auto-edit chain creates + // a DRIVEN dimension, and render_dimensions draws that one from the annotation list. The + // rounded rect's W/H/R go through set_rounded_rect, which rebuilds the geometry and leaves + // no annotation behind — so the live label was the only affordance it ever had. + // + // Accept a selection that is entirely ONE feature and let any member speak for it; the + // switch below already keys off feature_of(ei) rather than the entity itself. + const int f0 = feature_of(m_selection.front()); + if (f0 >= 0) { + bool same_feature = true; + for (int s : m_selection) + if (feature_of(s) != f0) { same_feature = false; break; } + if (same_feature) ei = m_selection.front(); + } + } + if (ei < 0 || ei >= int(m_entities.size())) return; + const SketchEntity& e = m_entities[ei]; + + std::vector protos; + auto add_len = [&](int line_ei, double side) { + if (line_ei < 0 || line_ei >= int(m_entities.size())) return; + if (m_entities[line_ei].type != SketchEntity::Type::Line) return; + DimAnnot a; a.kind = DimType::Length; a.ea = line_ei; a.side = side; protos.push_back(a); + }; + + // A grouped gesture (rect/slot/polygon decomposes into raw lines/arcs) exposes its + // DERIVED characteristic dims off the Feature span, regardless of which member edge + // was picked. Rect: Width = first edge length, Height = second edge length (the two + // axes of the 4-line loop pushed by push_closed_lines: edge0 horizontal, edge1 + // vertical). Quotes offset to opposite sides so they don't overlap. + const int fi = feature_of(ei); + if (fi >= 0) { + const Feature& f = m_features[fi]; + switch (f.kind) { + case FeatureKind::CornerRect: + case FeatureKind::CenterRect: { + add_len(f.begin + 0, 1.0); // Width + add_len(f.begin + 1, -1.0); // Height + // OBLIQUE rect (drawn off-axis, also a CornerRect feature): expose its orientation + // too. Gated to genuinely-tilted edges so an axis-aligned Corner/Center rect never + // gets an angle quote (and its verified W/H behaviour is untouched). + if (f.begin >= 0 && f.begin < int(m_entities.size())) { + const SketchEntity& e0 = m_entities[f.begin]; + Vec2d d0 = e0.p1 - e0.p0; + if (d0.squaredNorm() > 1e-12) { + double deg = std::atan2(d0.y(), d0.x()) * 180.0 / M_PI; + const double off = std::fmod(std::fmod(deg, 90.0) + 90.0, 90.0); // dist to axis + if (off > 2.0 && off < 88.0) { + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + double adeg = deg; if (adeg < 0.0) adeg += 360.0; + const Vec2d mid = 0.5 * (e0.p0 + e0.p1); + Vec2d nrm(-d0.y(), d0.x()); if (nrm.squaredNorm() > 1e-12) nrm.normalize(); + m_live_obrect_angle_label = mid + nrm * (th * 1.4); + DimAnnot at; at.kind = DimType::Angle; at.value = adeg; + draw_text(m_line_model, dim_text(at), m_live_obrect_angle_label, th, dc); + m_live_obrect_fi = fi; + } + } + } + break; + } + case FeatureKind::Slot: { + // Straight slot edits GEOMETRICALLY (like the arc-slot / rounded-rect), NOT through + // the constraint-based scalar quotes. Its dims are the centreline LENGTH (distance + // between the two cap centres c0,c1) and the WIDTH (2*param). The old + // Distance-between-arc-centres + Radius quotes never registered as editable, so the + // labels did nothing on click (nde #6). Draw both labels clear of the fillable face + // and remember the feature so open_primary_autoedit / click-to-promote drive set_slot. + // Slot dims: (1) inter-centre distance, (2) radius (= half-width), (3) centreline angle. + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + Vec2d u = f.c1 - f.c0; + const double Lc = u.norm(); + if (Lc > 1e-9) { + u /= Lc; + const Vec2d n(-u.y(), u.x()); + const double w = f.param; + DimAnnot len; len.kind = DimType::Length; len.value = Lc; + m_live_slot_len_label = 0.5 * (f.c0 + f.c1) + n * (w + th * 2.0); + draw_text(m_line_model, dim_text(len), m_live_slot_len_label, th, dc); + DimAnnot rd; rd.kind = DimType::Radius; rd.value = w; + m_live_slot_w_label = f.c1 + u * (w + th * 2.0); + draw_text(m_line_model, dim_text(rd), m_live_slot_w_label, th, dc); + double deg = std::atan2(f.c1.y() - f.c0.y(), f.c1.x() - f.c0.x()) * 180.0 / M_PI; + if (deg < 0.0) deg += 360.0; + DimAnnot an; an.kind = DimType::Angle; an.value = deg; + m_live_slot_angle_label = f.c0 - u * (w + th * 2.0); + draw_text(m_line_model, dim_text(an), m_live_slot_angle_label, th, dc); + m_live_slot_fi = fi; + } + break; + } + case FeatureKind::Polygon: { + // A regular polygon is N raw lines (no centre entity). Its natural editable + // dims are the SIDE length and the ORIENTATION — NOT a circumradius (a polygon + // is not a circle). Both edit the whole loop geometrically: side scales it + // uniformly, angle rotates it. Drawn off edge0 with draw_dim_quote (Length + + // Angle); the side quote is offset OUTWARD so its label clears the face. + if (f.begin < int(m_entities.size()) && + m_entities[f.begin].type == SketchEntity::Type::Line) { + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const SketchEntity& e0 = m_entities[f.begin]; + const Vec2d m0 = 0.5 * (e0.p0 + e0.p1); + Vec2d u0 = e0.p1 - e0.p0; + if (u0.squaredNorm() > 1e-12) u0.normalize(); + const Vec2d n0(-u0.y(), u0.x()); + const double outsign = ((m0 + n0) - f.c0).norm() >= (m0 - f.c0).norm() ? 1.0 : -1.0; + DimAnnot side; side.kind = DimType::Length; side.ea = f.begin; side.side = outsign; + side.value = measure_dim(side); + Vec2d slbl; + if (draw_dim_quote(side, th, dc, slbl)) m_live_poly_side_label = slbl; + + // Orientation = the angle of the centre->vertex0 spoke from +X (the + // intuitive "which way does the polygon point"), NOT the edge direction. + // Drawn as a wedge OUTSIDE the polygon (radius just past the circumradius) + // so its arc/label clear the fillable face. + const Vec2d sp = m_entities[f.begin].p0 - f.c0; // centre -> vertex0 + const double R = sp.norm(); + if (R > 1e-6) { + double av = std::atan2(sp.y(), sp.x()); + double avdeg = av * 180.0 / M_PI; if (avdeg < 0.0) avdeg += 360.0; + const double rr = R + th * 2.5; // wedge just outside the loop + std::vector> asegs; + asegs.emplace_back(f.c0, f.c0 + Vec2d(rr, 0.0)); // +X leg + asegs.emplace_back(f.c0, f.c0 + Vec2d(std::cos(av), std::sin(av)) * rr); // spoke leg + const int N = 20; Vec2d prev = f.c0 + Vec2d(rr, 0.0); + for (int i = 1; i <= N; ++i) { + const double t = av * double(i) / N; + const Vec2d cur = f.c0 + Vec2d(rr * std::cos(t), rr * std::sin(t)); + asegs.emplace_back(prev, cur); prev = cur; + } + const double mid = av * 0.5; + const Vec2d albl = f.c0 + Vec2d(std::cos(mid), std::sin(mid)) * (rr + th * 1.2); + DimAnnot at; at.kind = DimType::Angle; at.value = avdeg; // "NN.N°" + draw_strokes(m_highlight_model, asegs, 0.6, dc); + draw_text(m_line_model, dim_text(at), albl, th, dc); + m_live_poly_angle_label = albl; + } + m_live_poly_fi = fi; + } + break; + } + case FeatureKind::RoundedRect: { + // Width + Height (box bounds) + fillet Radius, drawn as clickable quotes that + // rebuild the box geometrically (set_rounded_rect). c0=min corner, c1=max, param=r. + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const double xmin = std::min(f.c0.x(), f.c1.x()), xmax = std::max(f.c0.x(), f.c1.x()); + const double ymin = std::min(f.c0.y(), f.c1.y()), ymax = std::max(f.c0.y(), f.c1.y()); + const double w = xmax - xmin, h = ymax - ymin, r = f.param; + const double off = th * 2.0; + std::vector> segs; + // Width quote below the box. + const double yb = ymin - off; + segs.emplace_back(Vec2d(xmin, ymin), Vec2d(xmin, yb)); + segs.emplace_back(Vec2d(xmax, ymin), Vec2d(xmax, yb)); + segs.emplace_back(Vec2d(xmin, yb), Vec2d(xmax, yb)); + // Height quote left of the box. + const double xl = xmin - off; + segs.emplace_back(Vec2d(xmin, ymin), Vec2d(xl, ymin)); + segs.emplace_back(Vec2d(xmin, ymax), Vec2d(xl, ymax)); + segs.emplace_back(Vec2d(xl, ymin), Vec2d(xl, ymax)); + // Fillet-radius leader from the TR arc centre out to the corner. + const Vec2d rc(xmax - r, ymax - r); + segs.emplace_back(rc, rc + Vec2d(r, r).normalized() * r); + draw_strokes(m_highlight_model, segs, 0.6, dc); + DimAnnot wa; wa.kind = DimType::Length; wa.value = w; + DimAnnot ha; ha.kind = DimType::Length; ha.value = h; + DimAnnot ra; ra.kind = DimType::Radius; ra.value = r; + m_live_rrect_w_label = Vec2d((xmin + xmax) * 0.5, yb - th * 0.8); + m_live_rrect_h_label = Vec2d(xl - th * 0.8, (ymin + ymax) * 0.5); + m_live_rrect_r_label = rc + Vec2d(r, r).normalized() * (r + th * 1.2); + draw_text(m_line_model, dim_text(wa), m_live_rrect_w_label, th, dc); + draw_text(m_line_model, dim_text(ha), m_live_rrect_h_label, th, dc); + draw_text(m_line_model, dim_text(ra), m_live_rrect_r_label, th, dc); + m_live_rrect_fi = fi; + break; + } + case FeatureKind::ArcSlot: { + // Centreline Radius + slot Width quotes. centre=f.c0, centreline start=f.c1, + // half-width=f.param; end direction from the cap@E arc centre (begin+1). + if (f.begin + 1 < int(m_entities.size())) { + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const Vec2d center = f.c0; + const double Rc = (f.c1 - center).norm(); + const double w = f.param; + Vec2d dirS = (f.c1 - center); + Vec2d dirE = (m_entities[f.begin + 1].center - center); + if (dirS.squaredNorm() > 1e-12 && dirE.squaredNorm() > 1e-12 && Rc > 1e-6) { + dirS.normalize(); dirE.normalize(); + const double aS = std::atan2(dirS.y(), dirS.x()); + double sweep = std::atan2(dirE.y(), dirE.x()) - aS; + while (sweep < 0) sweep += 2.0 * M_PI; + const double aMid = aS + sweep * 0.5; + const Vec2d uMid(std::cos(aMid), std::sin(aMid)); + // Centreline-radius leader: centre -> centreline midpoint. + std::vector> segs; + segs.emplace_back(center, center + uMid * Rc); + // Width tick across the slot at the start cap (outer<->inner). + segs.emplace_back(center + dirS * (Rc + w), center + dirS * (Rc - w)); + draw_strokes(m_highlight_model, segs, 0.6, dc); + DimAnnot ra; ra.kind = DimType::Radius; ra.value = Rc; + DimAnnot wa; wa.kind = DimType::Length; wa.value = 2.0 * w; + m_live_aslot_r_label = center + uMid * (Rc * 0.5) + Vec2d(0, th); + m_live_aslot_w_label = center + dirS * (Rc + w) + dirS * (th * 1.2); + draw_text(m_line_model, dim_text(ra), m_live_aslot_r_label, th, dc); + draw_text(m_line_model, dim_text(wa), m_live_aslot_w_label, th, dc); + m_live_aslot_fi = fi; + } + } + break; + } + default: break; // other features: later chunks + } + } + + if (protos.empty() && m_live_poly_fi < 0 && m_live_rrect_fi < 0 && + m_live_aslot_fi < 0 && m_live_slot_fi < 0) { // ungrouped single entity + switch (e.type) { + case SketchEntity::Type::Line: { + DimAnnot len; len.kind = DimType::Length; len.ea = ei; len.side = 1.0; protos.push_back(len); + DimAnnot ang; ang.kind = DimType::Angle; ang.ea = ei; ang.eb = -1; protos.push_back(ang); + break; // segment length + angle-to-horizontal + } + case SketchEntity::Type::Circle: { + DimAnnot a; a.kind = DimType::Radius; a.ea = ei; protos.push_back(a); break; + } + case SketchEntity::Type::Arc: { + // Arc radius is its single defining dimension (sweep angles edit via the end + // handles). radius lives in the same .radius field measure_dim/constraint_for + // read, so the Radius promotion path is identical to Circle. + DimAnnot a; a.kind = DimType::Radius; a.ea = ei; protos.push_back(a); break; + } + default: break; // ellipse/bspline: later + } + } + + // Arc sweep-angle wedge: drawn inline (like the polygon orientation) because it is a + // GEOMETRIC edit (SLVS angle constraints are line-to-line). A wedge spans the arc's + // start->end angles just OUTSIDE the radius; its label shows the included angle and is + // clickable to type a new sweep. The radius quote is still emitted via `protos`. + if (m_live_poly_fi < 0 && m_live_rrect_fi < 0 && m_live_aslot_fi < 0 && m_live_slot_fi < 0 && + e.type == SketchEntity::Type::Arc && e.radius > 1e-6) { + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const Vec2d c = e.center; + const double a0 = e.start_angle, a1 = e.end_angle; + const double sweep = a1 - a0; // signed (CCW>0); |sweep| shown + double swdeg = std::abs(sweep) * 180.0 / M_PI; + const double rr = e.radius + th * 2.5; // wedge just outside the arc + std::vector> asegs; + asegs.emplace_back(c, c + Vec2d(std::cos(a0), std::sin(a0)) * rr); // start leg + asegs.emplace_back(c, c + Vec2d(std::cos(a1), std::sin(a1)) * rr); // end leg + const int N = 24; Vec2d prev = c + Vec2d(std::cos(a0), std::sin(a0)) * rr; + for (int i = 1; i <= N; ++i) { + const double t = a0 + sweep * double(i) / N; + const Vec2d cur = c + Vec2d(rr * std::cos(t), rr * std::sin(t)); + asegs.emplace_back(prev, cur); prev = cur; + } + const double mid = a0 + sweep * 0.5; + const Vec2d albl = c + Vec2d(std::cos(mid), std::sin(mid)) * (rr + th * 1.2); + DimAnnot at; at.kind = DimType::Angle; at.value = swdeg; // "NN.N°" + draw_strokes(m_highlight_model, asegs, 0.6, dc); + draw_text(m_line_model, dim_text(at), albl, th, dc); + m_live_arc_angle_label = albl; + m_live_arc_ei = ei; + } + + // Ellipse: two clickable axis quotes — semi-major (a) along the major direction and + // semi-minor (b) along the minor. Both edit geometrically (a=e.radius, b=e.rminor); + // phi (orientation) is changed by dragging the major grip, not via a label. + if (m_live_poly_fi < 0 && m_live_rrect_fi < 0 && + (e.type == SketchEntity::Type::Ellipse || e.type == SketchEntity::Type::EllipseArc) && + e.radius > 1e-6 && e.rminor > 1e-6) { + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const Vec2d c = e.center; + const Vec2d um(std::cos(e.rotation), std::sin(e.rotation)); // major dir + const Vec2d un(-um.y(), um.x()); // minor dir + std::vector> segs; + const Vec2d majEnd = c + um * e.radius, minEnd = c + un * e.rminor; + segs.emplace_back(c, majEnd); + segs.emplace_back(c, minEnd); + draw_strokes(m_highlight_model, segs, 0.6, dc); + DimAnnot ma; ma.kind = DimType::Length; ma.value = e.radius; // plain "NN.N" + DimAnnot mi; mi.kind = DimType::Length; mi.value = e.rminor; + const Vec2d majLbl = c + um * (e.radius * 0.5) + un * (th * 1.0); + const Vec2d minLbl = c + un * (e.rminor * 0.5) + um * (th * 1.0); + draw_text(m_line_model, dim_text(ma), majLbl, th, dc); + draw_text(m_line_model, dim_text(mi), minLbl, th, dc); + m_live_ellipse_major_label = majLbl; + m_live_ellipse_minor_label = minLbl; + m_live_ellipse_ei = ei; + // Elliptical arc also has a SWEEP (included parametric angle), drawn outside the arc + // midpoint; the full ellipse skips this (closed). + if (e.type == SketchEntity::Type::EllipseArc) { + const double midp = 0.5 * (e.start_angle + e.end_angle); + const Vec2d mp = ellipse_point(c, e.radius, e.rminor, e.rotation, midp); + Vec2d outw = mp - c; if (outw.squaredNorm() > 1e-12) outw.normalize(); + m_live_ellipsearc_sweep_label = mp + outw * (th * 1.5); + DimAnnot sw; sw.kind = DimType::Angle; + sw.value = std::abs(e.end_angle - e.start_angle) * 180.0 / M_PI; + draw_text(m_line_model, dim_text(sw), m_live_ellipsearc_sweep_label, th, dc); + } + } + + if (protos.empty()) return; + + const ColorRGBA dimcol(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + for (DimAnnot a : protos) { + bool driven = false; // skip if already a driving dim of this kind + for (const DimAnnot& d : m_dimensions) + if (d.ea == a.ea && d.kind == a.kind) { driven = true; break; } + if (driven) continue; + a.value = measure_dim(a); + Vec2d label; + if (draw_dim_quote(a, th, dimcol, label)) { + a.label_pos = label; + m_live_quotes.push_back(a); // remember for click-to-promote + } + } +} + +// Iconic constraint badges drawn near each constraint's primary entity (C3.4b). +// Each glyph is authored in a unit cell [-0.5,0.5]^2 then scaled to a constant +// on-screen size and translated to the anchor; badges on the same entity stack +// upward so multiple constraints stay legible. +void DesignSketchTool::build_constraint_glyphs(double unit_per_px, + const std::vector& cons, + std::vector>& out) +{ + m_glyph_hits.clear(); + if (cons.empty() || m_entities.empty()) return; + using T = SketchConstraintType; + const double s = std::max(11.0 * unit_per_px, 1e-4); // glyph cell size in plane units + const double step = s * 1.5; // vertical stacking step + + // Representative anchor point on an entity (line midpoint, round-entity centre). + auto anchor_of = [&](int ei) -> Vec2d { + if (ei < 0 || ei >= int(m_entities.size())) return Vec2d(0, 0); + const SketchEntity& e = m_entities[ei]; + switch (e.type) { + case SketchEntity::Type::Line: return 0.5 * (e.p0 + e.p1); + case SketchEntity::Type::Circle: + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: return e.center; + case SketchEntity::Type::BSpline: return 0.5 * (e.p0 + e.p1); + case SketchEntity::Type::Point: return e.p0; + } + return e.p0; + }; + + // Unit-cell stroke authoring helpers (cell centred on origin). + auto seg = [&](std::vector>& v, Vec2d a, Vec2d b) { v.emplace_back(a, b); }; + auto circ = [&](std::vector>& v, Vec2d c, double r) { + const int n = 12; Vec2d prev(c.x() + r, c.y()); + for (int i = 1; i <= n; ++i) { + const double t = 2.0 * 3.14159265358979 * i / n; + Vec2d cur(c.x() + r * std::cos(t), c.y() + r * std::sin(t)); + v.emplace_back(prev, cur); prev = cur; + } + }; + // Author one glyph type into a unit-cell stroke list. + auto unit_glyph = [&](T type, std::vector>& v) { + switch (type) { + case T::Horizontal: seg(v, {-0.5, 0}, {0.5, 0}); break; + case T::Vertical: seg(v, {0, -0.5}, {0, 0.5}); break; + case T::Parallel: seg(v, {-0.35, -0.5}, {0.0, 0.5}); seg(v, {0.05, -0.5}, {0.4, 0.5}); break; + case T::Perpendicular: seg(v, {-0.4, 0.5}, {-0.4, -0.4}); seg(v, {-0.4, -0.4}, {0.5, -0.4}); break; + case T::Coincident: circ(v, {0, 0}, 0.42); break; + case T::Concentric: circ(v, {0, 0}, 0.5); circ(v, {0, 0}, 0.24); break; + case T::EqualLength:seg(v, {-0.4, 0.16}, {0.4, 0.16}); seg(v, {-0.4, -0.16}, {0.4, -0.16}); break; + case T::Tangent: circ(v, {0, -0.1}, 0.35); seg(v, {-0.5, 0.42}, {0.5, 0.42}); break; + case T::Midpoint: seg(v, {-0.4, 0}, {0.4, 0}); seg(v, {0, -0.18}, {0, 0.18}); break; + case T::Symmetric: seg(v, {0, -0.5}, {0, 0.5}); + seg(v, {-0.5, 0.4}, {-0.15, 0}); seg(v, {-0.5, -0.4}, {-0.15, 0}); + seg(v, {0.5, 0.4}, {0.15, 0}); seg(v, {0.5, -0.4}, {0.15, 0}); break; + case T::Fix: seg(v, {-0.4, -0.4}, {0.4, -0.4}); seg(v, {0.4, -0.4}, {0.4, 0.4}); + seg(v, {0.4, 0.4}, {-0.4, 0.4}); seg(v, {-0.4, 0.4}, {-0.4, -0.4}); break; + case T::Angle: seg(v, {-0.4, -0.4}, {0.4, -0.4}); seg(v, {-0.4, -0.4}, {0.3, 0.4}); break; + case T::Radius: circ(v, {0, 0}, 0.45); seg(v, {0, 0}, {0.45, 0}); break; + case T::Diameter: circ(v, {0, 0}, 0.45); seg(v, {-0.45, 0}, {0.45, 0}); break; + case T::PointOnLine: + case T::PointOnObject: seg(v, {-0.5, -0.3}, {0.5, -0.3}); circ(v, {0, 0.05}, 0.16); break; + case T::Distance: + case T::LockX: + case T::LockY: seg(v, {-0.4, 0}, {0.4, 0}); break; // generic tick + } + }; + + // Stack count per entity so successive badges step upward. + std::vector stack(m_entities.size(), 0); + const Vec2d up(0.0, 1.0); // plane-space up; offset so badge sits off the geometry + m_glyph_r = 0.6 * s; + for (size_t ci = 0; ci < cons.size(); ++ci) { + const SketchEntityConstraintDef& d = cons[ci]; + if (d.ea < 0 || d.ea >= int(m_entities.size())) continue; + const int k = stack[d.ea]++; + const Vec2d center = anchor_of(d.ea) + up * (step * (1.0 + k)); + m_glyph_hits.push_back({center, int(ci)}); + std::vector> cell; + unit_glyph(d.type, cell); + for (auto& sgp : cell) + out.emplace_back(center + sgp.first * s, center + sgp.second * s); + } +} + +void DesignSketchTool::draw_entities_preview(const std::vector& ents, const ColorRGBA& color) +{ + std::vector point_markers; + for (const SketchEntity& e : ents) { + // A Point has no polyline (entity_polyline returns nothing), so the strip path below + // cannot draw it; render it as a vertex marker, the same way the live session does. + if (e.type == SketchEntity::Type::Point) { point_markers.push_back(e.p0); continue; } + bool closed = false; + std::vector poly = entity_polyline(e, closed); + draw_quad_strip(m_highlight_model, poly, closed, color); + } + if (!point_markers.empty()) + draw_vertices(m_highlight_model, point_markers, color); +} + +// ---- In-canvas edit-op gizmo (Fillet/Chamfer/Offset/Mirror toolbar tools) ---------- +// These tools replace the docked numeric card. They operate on the LIVE session's +// m_entities/m_constraints, so they work both while drawing and after begin_edit re-opens +// a committed sketch. The SketchEngine op (context-free) is reused verbatim; the +// constraint binding is ported from DesignPanel::apply_entity_constraint into m_constraints +// via try_add_constraints (append→solve→keep / rollback). + +void DesignSketchTool::reset_op() +{ + m_op_a = m_op_b = -1; + m_op_value = 0.0; + m_op_anchor = Vec2d(0, 0); + m_op_dir = Vec2d(0, 0); + m_op_label = Vec2d(1e18, 1e18); + m_op_ghost.clear(); + m_op_dragging_arrow = false; + m_mirror_targets.clear(); +} + +// ---- Imported-art bounding-box transform gizmo (Mode::TransformArt) ---- + +void DesignSketchTool::reset_xform() +{ + m_xform_base.clear(); + m_xform_feat = -1; + m_xform_handle = -1; + m_xform_offset = Vec2d(0, 0); + m_xform_sx = m_xform_sy = 1.0; + m_xform_min = m_xform_max = Vec2d(0, 0); +} + +void DesignSketchTool::begin_imported_transform( + int feat, const std::vector>>& base_regions, + const SketchPlane& plane, const Vec2d& offset, double sx, double sy) +{ + cancel(); // drop any prior session, clears state + m_plane = plane; + m_mode = Mode::TransformArt; + m_xform_base = base_regions; + m_xform_feat = feat; + m_xform_offset = offset; + m_xform_sx = (std::abs(sx) > 1e-6) ? sx : 1.0; + m_xform_sy = (std::abs(sy) > 1e-6) ? sy : 1.0; + m_xform_handle = -1; + Vec2d mn(1e30, 1e30), mx(-1e30, -1e30); + for (const auto& region : m_xform_base) + for (const auto& contour : region) + for (const Vec2d& p : contour) { + mn.x() = std::min(mn.x(), p.x()); mn.y() = std::min(mn.y(), p.y()); + mx.x() = std::max(mx.x(), p.x()); mx.y() = std::max(mx.y(), p.y()); + } + if (mx.x() < mn.x()) { mn = Vec2d(0, 0); mx = Vec2d(0, 0); } + m_xform_min = mn; m_xform_max = mx; + m_active = true; + m_has_cursor = false; +} + +// 4 bbox corners in plane coords: 0=min/min, 1=max/min, 2=max/max, 3=min/max. The art +// transform is world = base*scale + offset (CadFeature import convention). +void DesignSketchTool::xform_world_corners(Vec2d out[4]) const +{ + const double x0 = m_xform_min.x() * m_xform_sx + m_xform_offset.x(); + const double x1 = m_xform_max.x() * m_xform_sx + m_xform_offset.x(); + const double y0 = m_xform_min.y() * m_xform_sy + m_xform_offset.y(); + const double y1 = m_xform_max.y() * m_xform_sy + m_xform_offset.y(); + out[0] = Vec2d(x0, y0); out[1] = Vec2d(x1, y0); + out[2] = Vec2d(x1, y1); out[3] = Vec2d(x0, y1); +} + +int DesignSketchTool::hit_test_xform_handle(const Vec2d& p, double tol) const +{ + Vec2d c[4]; xform_world_corners(c); + int best = -1; double bd = tol; + for (int i = 0; i < 4; ++i) { const double d = (c[i] - p).norm(); if (d < bd) { bd = d; best = i; } } + if (best >= 0) return best; + if ((0.5 * (c[0] + c[2]) - p).norm() <= tol) return 4; // centre move-handle + return -1; +} + +void DesignSketchTool::drag_xform_handle(const Vec2d& target) +{ + if (m_xform_handle < 0) return; + if (m_xform_handle == 4) { // centre move: translate by cursor delta + m_xform_offset += (target - m_xform_anchor); + m_xform_anchor = target; + emit_xform(); + return; + } + // Corner scale: hold the opposite corner (fixed world anchor O), send the grabbed + // corner to the cursor. base coords of grabbed (bg) and opposite (ba) corners. + auto base_corner = [&](int i) { + return Vec2d((i == 1 || i == 2) ? m_xform_max.x() : m_xform_min.x(), + (i == 2 || i == 3) ? m_xform_max.y() : m_xform_min.y()); + }; + const int h = m_xform_handle; + const Vec2d bg = base_corner(h); + const Vec2d ba = base_corner((h + 2) % 4); + const Vec2d O = m_xform_anchor; + const double dbx = bg.x() - ba.x(), dby = bg.y() - ba.y(); + if (std::abs(dbx) > 1e-9) { + double nsx = (target.x() - O.x()) / dbx; + if (std::abs(nsx) < 1e-4) nsx = (nsx < 0 ? -1e-4 : 1e-4); + m_xform_sx = nsx; + m_xform_offset.x() = O.x() - ba.x() * nsx; + } + if (std::abs(dby) > 1e-9) { + double nsy = (target.y() - O.y()) / dby; + if (std::abs(nsy) < 1e-4) nsy = (nsy < 0 ? -1e-4 : 1e-4); + m_xform_sy = nsy; + m_xform_offset.y() = O.y() - ba.y() * nsy; + } + emit_xform(); +} + +void DesignSketchTool::emit_xform() +{ + if (on_imported_transform) + on_imported_transform(m_xform_feat, m_xform_offset, m_xform_sx, m_xform_sy); +} + +void DesignSketchTool::render_xform_gizmo() +{ + if (m_mode != Mode::TransformArt) return; + Vec2d c[4]; xform_world_corners(c); + const ColorRGBA box(0.30f, 0.88f, 0.66f, 1.0f); + std::vector> segs; + for (int i = 0; i < 4; ++i) segs.emplace_back(c[i], c[(i + 1) % 4]); + draw_strokes(m_highlight_model, segs, 0.6, box); + const Camera& cam = wxGetApp().plater()->get_camera(); + const double hs = 7.0 / std::max(cam.get_zoom(), 1e-6); // screen-constant half-size + const ColorRGBA hcol(0.30f, 0.88f, 0.66f, 1.0f); + const ColorRGBA hhot(1.0f, 0.85f, 0.2f, 1.0f); + auto square = [&](const Vec2d& q, const ColorRGBA& col) { + const std::vector sq = { q + Vec2d(-hs, -hs), q + Vec2d(hs, -hs), + q + Vec2d(hs, hs), q + Vec2d(-hs, hs) }; + draw_fill(m_fill_model, sq, col); + }; + for (int i = 0; i < 4; ++i) square(c[i], m_xform_handle == i ? hhot : hcol); + square(0.5 * (c[0] + c[2]), m_xform_handle == 4 ? hhot : hcol); +} + +bool DesignSketchTool::op_ready() const +{ + switch (m_mode) { + case Mode::Fillet: + case Mode::Chamfer: return m_op_a >= 0 && m_op_b >= 0; + case Mode::Offset: return m_op_a >= 0; + case Mode::Mirror: return m_op_a >= 0 && !m_mirror_targets.empty(); + default: return false; + } +} + +// Corner vertex of two lines + the inward angle bisector (unit), pointing from the vertex +// into the fillet/chamfer interior. Mirrors SketchEngine::fillet_lines's geometry so the +// arrow tracks the op exactly. +bool DesignSketchTool::op_corner(int a, int b, Vec2d& C, Vec2d& bis, double& theta) const +{ + if (a < 0 || b < 0 || a >= int(m_entities.size()) || b >= int(m_entities.size())) return false; + const SketchEntity& ea = m_entities[a]; + const SketchEntity& eb = m_entities[b]; + if (ea.type != SketchEntity::Type::Line || eb.type != SketchEntity::Type::Line) return false; + const Vec2d da = ea.p1 - ea.p0, db = eb.p1 - eb.p0; + const double denom = da.x() * db.y() - da.y() * db.x(); + if (std::abs(denom) < 1e-12) return false; // parallel + const Vec2d diff = eb.p0 - ea.p0; + const double s = (diff.x() * db.y() - diff.y() * db.x()) / denom; + C = ea.p0 + s * da; + Vec2d ua = ((ea.p0 - C).norm() <= (ea.p1 - C).norm()) ? (ea.p1 - C) : (ea.p0 - C); + Vec2d ub = ((eb.p0 - C).norm() <= (eb.p1 - C).norm()) ? (eb.p1 - C) : (eb.p0 - C); + if (ua.norm() < 1e-12 || ub.norm() < 1e-12) return false; + ua.normalize(); ub.normalize(); + theta = std::acos(std::max(-1.0, std::min(1.0, ua.dot(ub)))); + bis = ua + ub; + if (bis.norm() < 1e-12) return false; // 180° corner + bis.normalize(); + return true; +} + +void DesignSketchTool::recompute_op_ghost() +{ + m_op_ghost.clear(); + if (m_mode == Mode::Fillet || m_mode == Mode::Chamfer) { + if (m_op_a < 0 || m_op_b < 0) return; + Vec2d C, bis; double theta; + if (op_corner(m_op_a, m_op_b, C, bis, theta)) { m_op_anchor = C; m_op_dir = bis; } + SketchEntity a_out, b_out, extra; + const bool ok = (m_mode == Mode::Fillet) + ? SketchEngine::fillet_lines(m_entities[m_op_a], m_entities[m_op_b], m_op_value, a_out, b_out, extra) + : SketchEngine::chamfer_lines(m_entities[m_op_a], m_entities[m_op_b], m_op_value, a_out, b_out, extra); + if (ok) m_op_ghost = { a_out, b_out, extra }; + } else if (m_mode == Mode::Offset) { + if (m_op_a < 0) return; + const SketchEntity& e = m_entities[m_op_a]; + if (e.type == SketchEntity::Type::Line) { + m_op_anchor = 0.5 * (e.p0 + e.p1); + Vec2d u = e.p1 - e.p0; if (u.norm() > 1e-12) u.normalize(); + m_op_dir = Vec2d(-u.y(), u.x()); // left normal = +distance side + } else if (e.type == SketchEntity::Type::Circle || e.type == SketchEntity::Type::Arc) { + m_op_anchor = e.center + Vec2d(e.radius, 0.0); + m_op_dir = Vec2d(1, 0); + } + m_op_ghost = SketchEngine::offset_entities({ e }, m_op_value); + } else if (m_mode == Mode::Mirror) { + if (m_op_a < 0 || m_mirror_targets.empty()) return; + const SketchEntity& axis = m_entities[m_op_a]; + std::vector src; + for (int ti : m_mirror_targets) + if (ti >= 0 && ti < int(m_entities.size())) src.push_back(m_entities[ti]); + m_op_ghost = SketchEngine::mirror_entities(src, axis.p0, axis.p1); + } +} + +// Route an entity pick to the active op; sets an initial value + ghost once enough +// entities are picked. Highlights the running picks via m_selection. +void DesignSketchTool::op_pick(int ei) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + const SketchEntity::Type t = m_entities[ei].type; + switch (m_mode) { + case Mode::Fillet: + case Mode::Chamfer: + if (t != SketchEntity::Type::Line) return; // corner ops need two lines + if (m_op_a < 0) m_op_a = ei; + else if (ei != m_op_a) { + m_op_b = ei; + const double la = (m_entities[m_op_a].p1 - m_entities[m_op_a].p0).norm(); + const double lb = (m_entities[m_op_b].p1 - m_entities[m_op_b].p0).norm(); + m_op_value = std::max(0.001, 0.2 * std::min(la, lb)); // a sensible starting size + recompute_op_ghost(); + } + break; + case Mode::Offset: { + m_op_a = ei; + const SketchEntity& e = m_entities[ei]; + const double sz = (e.type == SketchEntity::Type::Line) ? (e.p1 - e.p0).norm() + : std::max(e.radius * 2.0, 1.0); + m_op_value = std::max(0.001, 0.1 * sz); + recompute_op_ghost(); + break; + } + case Mode::Mirror: + if (m_op_a < 0) { + if (t != SketchEntity::Type::Line) return; // axis must be a line + m_op_a = ei; + } else if (ei != m_op_a) { + auto it = std::find(m_mirror_targets.begin(), m_mirror_targets.end(), ei); + if (it == m_mirror_targets.end()) m_mirror_targets.push_back(ei); + else m_mirror_targets.erase(it); + recompute_op_ghost(); + } + break; + default: break; + } + // Mirror the picks into m_selection so the existing highlight shows them. + m_selection.clear(); + if (m_op_a >= 0) m_selection.push_back(m_op_a); + if (m_op_b >= 0) m_selection.push_back(m_op_b); + for (int ti : m_mirror_targets) m_selection.push_back(ti); + if (on_selection_changed) on_selection_changed(int(m_selection.size())); +} + +bool DesignSketchTool::hit_test_op_arrow(const Vec2d& p, double tol) const +{ + if (!op_ready() || m_mode == Mode::Mirror) return false; + const Vec2d tip = m_op_anchor + m_op_dir * m_op_value; + return point_segment_dist(p, m_op_anchor, tip) <= tol * 1.5; +} + +void DesignSketchTool::drag_op_arrow(const Vec2d& target) +{ + const double v = (target - m_op_anchor).dot(m_op_dir); // project onto the arrow axis + if (m_mode == Mode::Offset) m_op_value = v; // signed: chooses the side + else m_op_value = std::max(0.001, v);// fillet/chamfer: positive + recompute_op_ghost(); +} + +void DesignSketchTool::open_op_editor() +{ + if (!on_inline_edit || !op_ready() || m_mode == Mode::Mirror) return; + const double sign = (m_mode == Mode::Offset && m_op_value < 0) ? -1.0 : 1.0; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, std::abs(m_op_value), "", + [this, sign](double v) { + m_op_value = (m_mode == Mode::Offset) ? sign * std::abs(v) : std::max(0.001, v); + // Entering a radius IS the commit. Leaving it as a preview meant the most obvious + // route of all — click the radius, type it, press Return — ended with the value set, + // the ghost drawn, and no geometry written; the only paths that ever applied it were + // finishing the whole sketch or clicking empty space, neither of which is signposted. + if (op_ready()) confirm_op(); + else recompute_op_ghost(); + }, + []() {}); +} + +void DesignSketchTool::render_op_gizmo(double unit_per_px) +{ + m_op_label = Vec2d(1e18, 1e18); + if (!op_ready()) return; + const ColorRGBA ghostc(0.30f, 0.88f, 0.66f, 0.55f); + draw_entities_preview(m_op_ghost, ghostc); + if (m_mode == Mode::Mirror) return; // pick-only, no arrow/label + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const Vec2d dir = (m_op_value >= 0 ? m_op_dir : -m_op_dir); + const Vec2d tip = m_op_anchor + m_op_dir * m_op_value; // signed length picks the side + std::vector> segs; + segs.emplace_back(m_op_anchor, tip); + const double as = std::max(std::abs(m_op_value) * 0.18, th * 0.8); // arrowhead size + const Vec2d nrm(-dir.y(), dir.x()); + const Vec2d back = tip - dir * as; + segs.emplace_back(tip, back + nrm * (as * 0.5)); + segs.emplace_back(tip, back - nrm * (as * 0.5)); + draw_strokes(m_highlight_model, segs, 0.6, dc); + DimAnnot a; + a.kind = (m_mode == Mode::Fillet) ? DimType::Radius : DimType::Distance; + a.value = std::abs(m_op_value); + m_op_label = tip + dir * (th * 1.2); + draw_text(m_line_model, dim_text(a), m_op_label, th, dc); +} + +// Did an entity actually change shape or position? Compares only the fields that define each +// type, so a re-solve that leaves the geometry alone reads as "unchanged" whatever else moved in +// the record. Used by the mirror postcondition below. +static bool entity_moved(const SketchEntity& a, const SketchEntity& b, double tol) +{ + if (a.type != b.type) return true; + auto moved = [tol](const Vec2d& p, const Vec2d& q) { return (p - q).norm() > tol; }; + if (moved(a.p0, b.p0)) return true; + switch (a.type) { + case SketchEntity::Type::Point: + return false; + case SketchEntity::Type::Line: + return moved(a.p1, b.p1); + case SketchEntity::Type::Circle: + return moved(a.center, b.center) || std::abs(a.radius - b.radius) > tol; + case SketchEntity::Type::Arc: + return moved(a.p1, b.p1) || moved(a.center, b.center) + || std::abs(a.radius - b.radius) > tol + || std::abs((a.end_angle - a.start_angle) - (b.end_angle - b.start_angle)) > tol; + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: + return moved(a.center, b.center) || std::abs(a.radius - b.radius) > tol + || std::abs(a.rminor - b.rminor) > tol || std::abs(a.rotation - b.rotation) > tol; + default: + return moved(a.p1, b.p1); + } +} + +void DesignSketchTool::confirm_op() +{ + if (!op_ready()) return; + using R = SketchPointRole; + using CT = SketchConstraintType; + + if (m_mode == Mode::Fillet || m_mode == Mode::Chamfer) { + const bool fillet = (m_mode == Mode::Fillet); + SketchEntity a_out, b_out, extra; + const bool ok = fillet + ? SketchEngine::fillet_lines(m_entities[m_op_a], m_entities[m_op_b], m_op_value, a_out, b_out, extra) + : SketchEngine::chamfer_lines(m_entities[m_op_a], m_entities[m_op_b], m_op_value, a_out, b_out, extra); + if (!ok) { reset_op(); return; } + const int a = m_op_a, b = m_op_b; + m_entities[a] = a_out; m_entities[b] = b_out; + const int xi = int(m_entities.size()); + m_entities.push_back(extra); // fillet arc / chamfer segment + auto role_near = [](const SketchEntity& ln, const Vec2d& q) -> R { + return ((ln.p0 - q).squaredNorm() <= (ln.p1 - q).squaredNorm()) ? R::P0 : R::P1; }; + const R ra = role_near(m_entities[a], extra.p0); + const R rb = role_near(m_entities[b], extra.p1); + // Drop the now-stale corner Coincident + each line's own length Distance (the op + // trimmed both legs back), then bind the new entity onto the trimmed endpoints. + auto refs = [](const SketchEntityConstraintDef& d, int e, R r) { + return (d.ea == e && d.ra == r) || (d.eb == e && d.rb == r); }; + auto self_len = [](const SketchEntityConstraintDef& d, int e) { + return d.type == CT::Distance && d.ea == e && d.eb == e; }; + auto& cs = m_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), [&](const SketchEntityConstraintDef& d) { + return (d.type == CT::Coincident && refs(d, a, ra) && refs(d, b, rb)) + || self_len(d, a) || self_len(d, b); + }), cs.end()); + auto coin = [&](R xr, int ln, R lr) { + SketchEntityConstraintDef d; d.type = CT::Coincident; d.ea = xi; d.ra = xr; d.eb = ln; d.rb = lr; return d; }; + if (fillet) { + auto tang = [&](int ln) { + SketchEntityConstraintDef d; d.type = CT::Tangent; d.ea = xi; d.eb = ln; return d; }; + const std::vector> ladder = { + { coin(R::P0, a, ra), coin(R::P1, b, rb), tang(a), tang(b) }, + { coin(R::P0, a, ra), coin(R::P1, b, rb), tang(a) }, + { coin(R::P0, a, ra), coin(R::P1, b, rb) }, + }; + for (const auto& set : ladder) if (try_add_constraints(set)) break; + } else { + try_add_constraints({ coin(R::P0, a, ra), coin(R::P1, b, rb) }); + } + } else if (m_mode == Mode::Offset) { + const int a = m_op_a; + auto out = SketchEngine::offset_entities({ m_entities[a] }, m_op_value); + if (out.empty()) { reset_op(); return; } + const int ni = int(m_entities.size()); + for (auto& o : out) m_entities.push_back(o); + const SketchEntity::Type st = m_entities[a].type; + SketchEntityConstraintDef d; d.ea = a; d.eb = ni; + bool emit = true; + if (st == SketchEntity::Type::Line) d.type = CT::Parallel; + else if (st == SketchEntity::Type::Arc || st == SketchEntity::Type::Circle) d.type = CT::Concentric; + else emit = false; + if (emit) try_add_constraints({ d }); + } else if (m_mode == Mode::Mirror) { + const SketchEntity axis = m_entities[m_op_a]; // by value (m_entities grows below) + // The sources as they stand BEFORE any of this op's constraints exist. Two jobs: every + // copy is reflected from the untouched original (so a batch that moves the sketch cannot + // feed a later copy moved geometry), and the invariant at the bottom has something to + // compare against. mirror-slot. + const std::vector before = m_entities; + const size_t cmark = m_constraints.size(); + std::vector> fresh; // copy index -> its pristine reflection + for (int ti : m_mirror_targets) { + if (ti < 0 || ti >= int(before.size())) continue; + auto out = SketchEngine::mirror_entities({ before[ti] }, axis.p0, axis.p1); + if (out.empty()) continue; + const int mi = int(m_entities.size()); + for (auto& m : out) { fresh.emplace_back(int(m_entities.size()), m); m_entities.push_back(m); } + SketchEntityConstraintDef d; d.type = CT::Symmetric; d.ea = ti; d.eb = mi; d.ec = m_op_a; + const SketchEntity::Type st = before[ti].type; + std::vector> ladder; + if (st == SketchEntity::Type::Line) { + d.ra = R::P0; d.rb = R::P0; auto p0 = d; + d.ra = R::P1; d.rb = R::P1; auto p1 = d; + ladder = { { p0, p1 }, { p0 } }; + } else if (st == SketchEntity::Type::Arc) { + // BOTH ENDS AND THE CENTRE. Binding only the centre — which is all this did — + // leaves the copy's endpoints and sweep free while the shape's own coincidences + // still tie them to its neighbours, and the solver then answers with a wildly + // different, internally consistent sketch: a slot's caps came back at r=32.2 and + // a 237 deg sweep, one rail collapsed from 62.9 mm to 2.1 mm, and the ORIGINAL + // moved with them. A circle survived the same code only because a circle has no + // endpoints to leave free, which is why the bug reads as "circles fine, rounded + // rectangles and slots destroyed". + d.ra = R::Center; d.rb = R::Center; auto ct = d; + d.ra = R::P0; d.rb = R::P0; auto p0 = d; + d.ra = R::P1; d.rb = R::P1; auto p1 = d; + // Endpoints BEFORE centre: an arc is five DoF, so {centre, p0, p1} is six + // equations and is refused; {p0, p1} is four and pins the sweep, which is the + // half that was going wild. The postcondition below is what makes the ladder + // safe — any rung that does not reproduce the preview is thrown away whole. + ladder = { { p0, p1 }, { ct, p0 }, { ct } }; + } else if (st == SketchEntity::Type::Circle) { + d.ra = R::Center; d.rb = R::Center; ladder = { { d } }; + } else if (st == SketchEntity::Type::Point) { + d.ra = R::P0; d.rb = R::P0; ladder = { { d } }; + } + for (const auto& set : ladder) if (try_add_constraints(set)) break; + } + // A MIRROR MAY NOT MOVE WHAT IT COPIED. try_add_constraints only rolls back when the + // solve FAILS, and the failure here is a solve that succeeds at something else: the + // numbers above came out of a solver that was perfectly happy. So the op checks its own + // postcondition on the geometry, and if a source moved it keeps the copies — which are + // exactly what the preview showed — and drops the whole constraint web that moved them. + // Restoring the sources needs no re-solve: the pre-batch state was itself solved, and a + // failed solve does not write back (pl5). + // BOTH HALVES. Watching only the sources caught the slot (whose web dragged everything) + // and missed the rounded rectangle, where the solver held the sources still and put the + // COPIES somewhere else: an arc has five degrees of freedom and Symmetric on centre plus + // both endpoints is six equations, so that batch is refused and the ladder degrades to a + // set that leaves the sweep free. The rule that covers both, and that is what the user + // actually asked for, is: THE APPLIED RESULT IS THE PREVIEW. Anything else drops the web. + bool disturbed = false; + for (size_t i = 0; i < before.size() && !disturbed; ++i) + disturbed = entity_moved(before[i], m_entities[i], 1e-6); + for (const auto& f : fresh) + if (!disturbed && f.first < int(m_entities.size())) + disturbed = entity_moved(f.second, m_entities[f.first], 1e-6); + if (disturbed) { + m_constraints.resize(cmark); + for (size_t i = 0; i < before.size(); ++i) m_entities[i] = before[i]; + // The copies too, and for the same reason: a batch that moved the sketch moved them + // as well, so the ones sitting in m_entities are the solver's answer, not the + // reflection. Restoring only the sources left a slot whose copy came back with a + // 13.8 mm rail and a 308 deg cap — the original was safe and the copy was still + // wrong, which is half a fix. `fresh` is what the preview drew. + for (const auto& f : fresh) + if (f.first < int(m_entities.size())) m_entities[f.first] = f.second; + } + } + reset_op(); + m_selection.clear(); + resolve_live(); + if (on_selection_changed) on_selection_changed(0); +} + +// ---- In-canvas transform gizmo (Move/Rotate/Scale/Array/PolarArray) ---- +// These replace the docked numeric cards: pick subject entities in-canvas, then a single +// draggable handle drives the continuous parameter (Move/Array offset, Rotate/Polar angle, +// Scale factor) and an editable value label sets it exactly; Array/PolarArray expose a +// second label for the copy count. A live translucent ghost previews the result. Confirm +// applies the geometry and emits the per-op constraint web (mutating ops drop the classes +// the map invalidates; additive ops bind each copy to its source) into m_constraints. + +void DesignSketchTool::reset_tf() +{ + m_tf_targets.clear(); + m_tf_pivot = Vec2d(0, 0); + m_tf_delta = Vec2d(0, 0); + m_tf_angle = 0.0; + m_tf_scale = 1.0; + m_tf_count = 3; + m_tf_handle_r = 1.0; + m_tf_ghost.clear(); + m_tf_handle = -1; + m_tf_dragging = false; + m_tf_label_a = Vec2d(1e18, 1e18); + m_tf_label_b = Vec2d(1e18, 1e18); +} + +bool DesignSketchTool::tf_ready() const { return !m_tf_targets.empty(); } + +// Centroid of the picked subject set (the rotate/scale/polar pivot, and the array origin), +// plus a reference radius (max distance from the pivot to any subject extremum) used to +// size the rotate/polar handle ring and the scale handle's unit position. +void DesignSketchTool::compute_tf_pivot() +{ + using T = SketchEntity::Type; + auto cen = [](const SketchEntity& e) -> Vec2d { + switch (e.type) { + case T::Line: return 0.5 * (e.p0 + e.p1); + case T::Arc: case T::Circle: case T::Ellipse: case T::EllipseArc: return e.center; + case T::BSpline: + if (!e.ctrl.empty()) { Vec2d s(0, 0); for (const auto& p : e.ctrl) s += p; return s / double(e.ctrl.size()); } + return 0.5 * (e.p0 + e.p1); + default: return e.p0; + } + }; + Vec2d c(0, 0); int n = 0; + for (int ti : m_tf_targets) + if (ti >= 0 && ti < int(m_entities.size())) { c += cen(m_entities[ti]); ++n; } + if (n == 0) { m_tf_pivot = Vec2d(0, 0); m_tf_handle_r = 1.0; return; } + m_tf_pivot = c / double(n); + double r = 0.0; + for (int ti : m_tf_targets) { + if (ti < 0 || ti >= int(m_entities.size())) continue; + const SketchEntity& e = m_entities[ti]; + auto upd = [&](const Vec2d& p) { r = std::max(r, (p - m_tf_pivot).norm()); }; + switch (e.type) { + case T::Line: upd(e.p0); upd(e.p1); break; + case T::Arc: case T::Circle: case T::Ellipse: case T::EllipseArc: + upd(e.center + Vec2d(e.radius, 0)); upd(e.center - Vec2d(e.radius, 0)); break; + case T::BSpline: for (const auto& p : e.ctrl) upd(p); break; + default: upd(e.p0); break; + } + } + m_tf_handle_r = std::max(r, 1.0); +} + +void DesignSketchTool::tf_pick(int ei) +{ + if (ei < 0 || ei >= int(m_entities.size())) return; + auto it = std::find(m_tf_targets.begin(), m_tf_targets.end(), ei); + if (it == m_tf_targets.end()) m_tf_targets.push_back(ei); // toggle-select like Mirror + else m_tf_targets.erase(it); + compute_tf_pivot(); + // Seed sensible starting parameters (mirrors the retired card defaults so the ghost is + // immediately visible). Only seed while still at the neutral value, so re-picking more + // targets keeps a value the user already dialled in. + if (!m_tf_targets.empty()) { + const double step = std::max(m_tf_handle_r * 1.5, 1.0); + switch (m_mode) { + case Mode::Move: + if (m_tf_delta.norm() < 1e-9) m_tf_delta = Vec2d(step, 0.0); + break; + case Mode::Array: + if (m_tf_delta.norm() < 1e-9) { + Vec2d d(step, 0.0); // default: perpendicular to a single line, else +X + if (m_tf_targets.size() == 1) { + const SketchEntity& e = m_entities[m_tf_targets[0]]; + if (e.type == SketchEntity::Type::Line) { + Vec2d t = e.p1 - e.p0; + if (t.norm() > 1e-9) { t.normalize(); d = Vec2d(-t.y(), t.x()) * step; } + } + } + m_tf_delta = d; + } + break; + case Mode::Rotate: if (std::abs(m_tf_angle) < 1e-9) m_tf_angle = M_PI / 4.0; break; // 45° + case Mode::PolarArray: if (std::abs(m_tf_angle) < 1e-9) m_tf_angle = 2.0 * M_PI; break; // 360° + case Mode::Scale: if (std::abs(m_tf_scale - 1.0) < 1e-9) m_tf_scale = 2.0; break; + default: break; + } + } + recompute_tf_ghost(); + m_selection = m_tf_targets; // reuse the existing selection highlight + if (on_selection_changed) on_selection_changed(int(m_selection.size())); +} + +void DesignSketchTool::recompute_tf_ghost() +{ + m_tf_ghost.clear(); + if (m_tf_targets.empty()) return; + std::vector src; + for (int ti : m_tf_targets) + if (ti >= 0 && ti < int(m_entities.size())) src.push_back(m_entities[ti]); + if (src.empty()) return; + const int count = std::max(2, m_tf_count); + switch (m_mode) { + case Mode::Move: + m_tf_ghost = SketchEngine::transform_entities(src, m_tf_delta, 0.0, 1.0, Vec2d(0, 0)); + break; + case Mode::Rotate: + m_tf_ghost = SketchEngine::transform_entities(src, Vec2d(0, 0), m_tf_angle, 1.0, m_tf_pivot); + break; + case Mode::Scale: + m_tf_ghost = SketchEngine::transform_entities(src, Vec2d(0, 0), 0.0, m_tf_scale, m_tf_pivot); + break; + case Mode::Array: + m_tf_ghost = SketchEngine::array_entities(src, count, m_tf_delta, 0.0, m_tf_pivot); + break; + case Mode::PolarArray: + m_tf_ghost = SketchEngine::array_entities(src, count, Vec2d(0, 0), m_tf_angle / double(count), m_tf_pivot); + break; + default: break; + } +} + +// World position of the single drag handle: at the translated/spacing tip for the linear +// ops, on the pivot-centred ring at the current angle for the rotational ops, and at the +// scaled unit position along +X for Scale. +Vec2d DesignSketchTool::tf_handle_pos() const +{ + switch (m_mode) { + case Mode::Move: + case Mode::Array: return m_tf_pivot + m_tf_delta; + case Mode::Rotate: + case Mode::PolarArray: return m_tf_pivot + m_tf_handle_r * Vec2d(std::cos(m_tf_angle), std::sin(m_tf_angle)); + case Mode::Scale: return m_tf_pivot + Vec2d(m_tf_scale * m_tf_handle_r, 0.0); + default: return m_tf_pivot; + } +} + +bool DesignSketchTool::hit_test_tf_handle(const Vec2d& p, double tol) const +{ + if (!tf_ready()) return false; + return (tf_handle_pos() - p).norm() <= tol * 2.5; +} + +void DesignSketchTool::drag_tf_handle(const Vec2d& target) +{ + switch (m_mode) { + case Mode::Move: + case Mode::Array: + m_tf_delta = target - m_tf_pivot; + break; + case Mode::Rotate: + case Mode::PolarArray: { + const Vec2d d = target - m_tf_pivot; + if (d.norm() > 1e-9) m_tf_angle = std::atan2(d.y(), d.x()); + break; + } + case Mode::Scale: { + const double r = (target - m_tf_pivot).norm(); + m_tf_scale = std::max(1e-3, r / std::max(m_tf_handle_r, 1e-9)); + break; + } + default: break; + } + recompute_tf_ghost(); +} + +void DesignSketchTool::open_tf_editor_a() +{ + if (!on_inline_edit || !tf_ready()) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + double cur; + if (m_mode == Mode::Rotate || m_mode == Mode::PolarArray) cur = std::abs(m_tf_angle) * 180.0 / M_PI; + else if (m_mode == Mode::Scale) cur = m_tf_scale; + else cur = m_tf_delta.norm(); + Vec2d dir = m_tf_delta; if (dir.norm() > 1e-9) dir.normalize(); else dir = Vec2d(1, 0); + const double sgn = (m_tf_angle < 0) ? -1.0 : 1.0; + on_inline_edit(px, cur, "", + [this, dir, sgn](double v) { + switch (m_mode) { + case Mode::Move: case Mode::Array: m_tf_delta = dir * v; break; + case Mode::Rotate: case Mode::PolarArray: m_tf_angle = sgn * std::abs(v) * M_PI / 180.0; break; + case Mode::Scale: m_tf_scale = std::max(1e-3, v); break; + default: break; + } + recompute_tf_ghost(); + }, + []() {}); +} + +void DesignSketchTool::open_tf_editor_count() +{ + if (!on_inline_edit || !tf_ready()) return; + if (m_mode != Mode::Array && m_mode != Mode::PolarArray) return; + const wxPoint px(m_last_mouse_x, m_last_mouse_y); + on_inline_edit(px, double(std::max(2, m_tf_count)), "", + [this](double v) { m_tf_count = std::max(2, int(v + 0.5)); recompute_tf_ghost(); }, + []() {}); +} + +void DesignSketchTool::render_tf_gizmo(double unit_per_px) +{ + m_tf_label_a = Vec2d(1e18, 1e18); + m_tf_label_b = Vec2d(1e18, 1e18); + if (!tf_ready()) return; + const ColorRGBA ghostc(0.30f, 0.88f, 0.66f, 0.55f); + draw_entities_preview(m_tf_ghost, ghostc); + + const ColorRGBA dc(0.30f, 0.88f, 0.66f, 1.0f); + const ColorRGBA hot(1.0f, 0.85f, 0.2f, 1.0f); + const double th = std::max(15.0 * unit_per_px, 1e-4); + const Vec2d handle = tf_handle_pos(); + + // spoke from the pivot to the handle (+ arrowhead for the linear ops). + std::vector> segs; + segs.emplace_back(m_tf_pivot, handle); + if (m_mode == Mode::Move || m_mode == Mode::Array || m_mode == Mode::Scale) { + Vec2d dir = handle - m_tf_pivot; const double L = dir.norm(); + if (L > 1e-9) { + dir /= L; + const double as = std::max(L * 0.15, th * 0.8); + const Vec2d nrm(-dir.y(), dir.x()); + const Vec2d back = handle - dir * as; + segs.emplace_back(handle, back + nrm * (as * 0.5)); + segs.emplace_back(handle, back - nrm * (as * 0.5)); + } + } + draw_strokes(m_highlight_model, segs, 0.6, dc); + + const double hs = 6.0 * unit_per_px; // screen-constant handle marker + const std::vector sq = { handle + Vec2d(-hs, -hs), handle + Vec2d(hs, -hs), + handle + Vec2d(hs, hs), handle + Vec2d(-hs, hs) }; + draw_fill(m_fill_model, sq, m_tf_dragging ? hot : dc); + draw_vertices(m_vertex_model, { m_tf_pivot }, dc, std::max(3.0 * unit_per_px, 1e-4)); + + // primary parameter label at the handle. + std::string txt_a; + if (m_mode == Mode::Rotate || m_mode == Mode::PolarArray) { + DimAnnot a; a.kind = DimType::Angle; a.value = std::abs(m_tf_angle) * 180.0 / M_PI; + txt_a = dim_text(a); + } else if (m_mode == Mode::Scale) { + char b[24]; std::snprintf(b, sizeof(b), "x%.2f", m_tf_scale); + for (char& ch : b) if (ch == ',') ch = '.'; + txt_a = b; + } else { + DimAnnot a; a.kind = DimType::Distance; a.value = m_tf_delta.norm(); + txt_a = dim_text(a); + } + Vec2d outw = handle - m_tf_pivot; if (outw.norm() > 1e-9) outw.normalize(); else outw = Vec2d(1, 0); + m_tf_label_a = handle + outw * (th * 1.2); + draw_text(m_line_model, txt_a, m_tf_label_a, th, dc); + + if (m_mode == Mode::Array || m_mode == Mode::PolarArray) { + char cb[16]; std::snprintf(cb, sizeof(cb), "x%d", std::max(2, m_tf_count)); + m_tf_label_b = m_tf_pivot + Vec2d(th * 1.5, th * 1.5); + draw_text(m_line_model, cb, m_tf_label_b, th, dc); + } +} + +void DesignSketchTool::confirm_transform() +{ + if (!tf_ready()) { reset_tf(); return; } + using CT = SketchConstraintType; + const std::vector targets = m_tf_targets; // snapshot by value (m_entities grows) + auto is_target = [&](int e) { + return e >= 0 && std::find(targets.begin(), targets.end(), e) != targets.end(); + }; + + if (m_mode == Mode::Move || m_mode == Mode::Rotate || m_mode == Mode::Scale) { + // MUTATING: map every subject in place, then drop the constraint classes the map + // invalidates for any constraint touching a subject. Surviving classes are + // satisfied by construction; the re-solve folds in the new placement. + const Mode mode = m_mode; + for (int ti : targets) { + if (ti < 0 || ti >= int(m_entities.size())) continue; + std::vector out; + if (mode == Mode::Move) + out = SketchEngine::transform_entities({ m_entities[ti] }, m_tf_delta, 0.0, 1.0, Vec2d(0, 0)); + else if (mode == Mode::Rotate) + out = SketchEngine::transform_entities({ m_entities[ti] }, Vec2d(0, 0), m_tf_angle, 1.0, m_tf_pivot); + else + out = SketchEngine::transform_entities({ m_entities[ti] }, Vec2d(0, 0), 0.0, m_tf_scale, m_tf_pivot); + if (!out.empty()) m_entities[ti] = out[0]; + } + auto& cs = m_constraints; + cs.erase(std::remove_if(cs.begin(), cs.end(), [&](const SketchEntityConstraintDef& d) { + if (!(is_target(d.ea) || is_target(d.eb) || is_target(d.ec))) return false; + const bool self = (d.ea == d.eb); // self-length Distance survives translate/rotate + if (mode == Mode::Move) { + switch (d.type) { + case CT::Coincident: case CT::PointOnLine: case CT::PointOnObject: + case CT::Concentric: case CT::Symmetric: case CT::Midpoint: + case CT::Fix: case CT::LockX: case CT::LockY: return true; + case CT::Distance: return !self; + default: return false; // orientation/length preserved by translation + } + } else if (mode == Mode::Rotate) { + switch (d.type) { + case CT::EqualLength: case CT::Radius: case CT::Diameter: return false; + case CT::Distance: return !self; + default: return true; // orientation + position broken by rotation + } + } else { // Scale (uniform / conformal) + switch (d.type) { + case CT::Horizontal: case CT::Vertical: case CT::Parallel: + case CT::Perpendicular: case CT::Angle: return false; + default: return true; // size + position broken + } + } + }), cs.end()); + } else if (m_mode == Mode::Array || m_mode == Mode::PolarArray) { + // ADDITIVE: append copies of each subject, then bind each copy to its source. Lines + // get Parallel+EqualLength (linear) or EqualLength only (polar — rotation breaks + // Parallel); arc/circle copies get a per-copy Radius (equal-radius under any rigid + // map) plus Concentric when the polar pivot is the source's own centre. Emit each + // web as a degrade ladder (try_add_constraints keeps the first set the solver + // accepts, else the geometry stays unconstrained). + const bool polar = (m_mode == Mode::PolarArray); + const int count = std::max(2, m_tf_count); + for (int ti : targets) { + if (ti < 0 || ti >= int(m_entities.size())) continue; + const SketchEntity src = m_entities[ti]; // by value (m_entities grows below) + std::vector copies = polar + ? SketchEngine::array_entities({ src }, count, Vec2d(0, 0), m_tf_angle / double(count), m_tf_pivot) + : SketchEngine::array_entities({ src }, count, m_tf_delta, 0.0, m_tf_pivot); + if (copies.empty()) continue; + const int base = int(m_entities.size()); + for (auto& c : copies) m_entities.push_back(c); + const int nc = int(copies.size()); + const SketchEntity::Type st = src.type; + std::vector> ladder; + if (st == SketchEntity::Type::Line) { + auto mk = [&](bool eq, bool par) { + std::vector w; + for (int k = 0; k < nc; ++k) { + const int ci = base + k; + if (par) { SketchEntityConstraintDef dp; dp.type = CT::Parallel; dp.ea = ti; dp.eb = ci; w.push_back(dp); } + if (eq) { SketchEntityConstraintDef de; de.type = CT::EqualLength; de.ea = ti; de.eb = ci; w.push_back(de); } + } + return w; + }; + if (polar) ladder = { mk(true, false) }; + else ladder = { mk(true, true), mk(false, true) }; + } else if (st == SketchEntity::Type::Arc || st == SketchEntity::Type::Circle) { + const bool can_conc = polar && (m_tf_pivot - src.center).norm() < 1e-6; + auto mk = [&](bool conc) { + std::vector w; + for (int k = 0; k < nc; ++k) { + const int ci = base + k; + SketchEntityConstraintDef dr; dr.type = CT::Radius; dr.ea = ci; dr.value = src.radius; w.push_back(dr); + if (conc) { + SketchEntityConstraintDef dco; dco.type = CT::Concentric; + dco.ea = ti; dco.ra = SketchPointRole::Center; dco.eb = ci; dco.rb = SketchPointRole::Center; + w.push_back(dco); + } + } + return w; + }; + ladder = can_conc ? std::vector>{ mk(true), mk(false) } + : std::vector>{ mk(false) }; + } + for (auto& w : ladder) if (!w.empty() && try_add_constraints(w)) break; + } + } + reset_tf(); + m_selection.clear(); + resolve_live(); + if (on_selection_changed) on_selection_changed(0); +} + +const ColorRGBA* DesignSketchTool::sketch_hl_color(int feature) const +{ + for (const auto& h : m_hl_sketches) if (h.first == feature) return &h.second; + return nullptr; +} + +// Which step of the armed gesture is live, reported only when it moves (1c0c). Called +// from render(), which is the one place EVERY state change passes through — a per-call-site +// notification would have to be added to each of the thirty-odd tool branches and would be +// forgotten by the next one. Cheap: three ints compared per frame. +void DesignSketchTool::emit_step_hint() +{ + if (!on_step_changed) return; + int step = 0, picks = 0; + if (is_edit_op_mode()) { + picks = (m_mode == Mode::Mirror) ? int(m_mirror_targets.size()) + : int(m_op_a >= 0) + int(m_op_b >= 0); + step = (m_op_a < 0) ? 0 : (op_ready() ? 2 : 1); + } else if (is_transform_mode()) { + picks = int(m_tf_targets.size()); + step = m_tf_targets.empty() ? 0 : 1; + } else if (m_mode == Mode::Select || m_mode == Mode::Constrain) { + picks = int(m_selection.size()); + } else { + step = int(m_points.size()); + } + if (int(m_mode) == m_step_mode_last && step == m_step_last && picks == m_step_picks_last) + return; + m_step_mode_last = int(m_mode); m_step_last = step; m_step_picks_last = picks; + on_step_changed(m_mode, step, picks); +} + +void DesignSketchTool::render(GLCanvas3D& canvas) +{ + m_dim_label_seq = 0; + m_render_scale = canvas.get_scale(); + emit_step_hint(); // before the early returns: an armed tool on an empty sketch still guides + // The value field, BEFORE every early return below. It can be up in Constrain mode on a + // committed feature and on an empty sketch, and a field that is not drawn is a field that is + // not there — there is no window to fall back to any more. + if (inline_editor != nullptr) + inline_editor->render(*wxGetApp().imgui(), m_render_scale); + (void)canvas; + if (!has_display()) { + if (on_readout) on_readout(std::string()); // nothing to show -> hide HUD + return; + } + render_view_helpers(); // origin planes / world axes — drawn whenever their toggle is on + m_rubber.render(canvas); // left-drag rubber band (no-op unless one is being swept). Drawn + // here, ahead of every early return below, so a band over an empty + // plate is still visible. + if (m_active && m_mode != Mode::Constrain && m_entities.empty() && m_points.empty() + && m_display_sketches.empty()) { + if (on_readout) on_readout(std::string()); + return; + } + + + // Draw-then-edit: a creation tool that just committed a new entity/feature (gesture now + // idle) gets its result auto-selected — so render_live_quotes below computes its quotes — + // and the primary value editor armed (opened after those quotes exist, see service block). + if (m_active && is_creation_autoedit_mode() && m_points.empty() && + m_open_feature < 0 && !m_awaiting_length) { + const int n = int(m_entities.size()); + if (m_autoedit_seen >= 0 && n > m_autoedit_seen && n > 0) { + m_selection.clear(); + m_selection.push_back(n - 1); // feature_of(last) groups rect/slot/poly/ellipse + m_autoedit_pending = true; + } + m_autoedit_seen = n; + } + + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader == nullptr) + return; + + glsafe(::glDisable(GL_DEPTH_TEST)); + glsafe(::glDisable(GL_CULL_FACE)); + shader->start_using(); + const Camera& camera = wxGetApp().plater()->get_camera(); + shader->set_uniform("view_model_matrix", camera.get_view_matrix()); + shader->set_uniform("projection_matrix", camera.get_projection_matrix()); + + // Persistent committed sketches (e.g. an un-consumed sketch left visible after its + // extrude is removed): faces translucent, outlines orange. Each uses its own plane. + if (!m_display_sketches.empty()) { + const SketchPlane saved_plane = m_plane; + // CYAN/BLUE MEANS SELECTED — nothing else may wear it. The unselected fill used to be + // (0.30,0.60,1.0), one shade off the selected (0.30,0.80,1.0), so an ordinary region + // read as picked and a picked one added nothing. The outlines already got this right: + // orange for a sketch, cyan for the selection. The fill now follows the same logic, so + // an unselected region is faint amber — the sketch's own colour — and every blue thing + // on screen is something you selected. + const ColorRGBA dface = design_idle_face_color(); // unselected: neutral grey, never the selection colour + const ColorRGBA sface = design_selection_color(0.34f); // selected region + const ColorRGBA dwire(1.0f, 0.55f, 0.1f, 1.0f); // normal orange outline + const ColorRGBA swire = design_selection_color(); // selected outline + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + for (const DisplaySketch& ds : m_display_sketches) { + m_plane = ds.plane; + const std::vector loops = region_loops(ds.entities); + for (int r = 0; r < int(loops.size()); ++r) { + const bool sel = (ds.feature == m_display_pick && r == m_display_pick_region); + const ColorRGBA* hlc = sketch_hl_color(ds.feature); + ColorRGBA fc = sel ? sface : dface; + if (hlc && !sel) { fc = *hlc; fc.a(0.20f); } + std::vector> hp; + for (int h : loops[r].holes) + if (h >= 0 && h < int(loops.size())) hp.push_back(loops[h].poly); + draw_fill_holed(m_fill_model, loops[r].poly, hp, fc); + } + } + glsafe(::glDisable(GL_BLEND)); + for (const DisplaySketch& ds : m_display_sketches) { + m_plane = ds.plane; + // Entities forming the selected loop (highlighted cyan); the rest stay orange. + std::vector sel_ent(ds.entities.size(), 0); + if (ds.feature == m_display_pick && m_display_pick_region >= 0) { + const std::vector loops = region_loops(ds.entities); + if (m_display_pick_region < int(loops.size())) { + // The holes light up with their region. The highlight has to show what will + // be EXTRUDED, and a hole is part of that — a plate whose bore stays orange + // while its outline turns cyan would say the circle is not coming along, + // which is precisely the thing that used to be true and is now not. + auto mark = [&](int region) { + if (region < 0 || region >= int(loops.size())) return; + for (int ei : loops[region].ents) + if (ei >= 0 && ei < int(sel_ent.size())) sel_ent[ei] = 1; + }; + mark(m_display_pick_region); + for (int h : loops[m_display_pick_region].holes) mark(h); + } + } + std::vector point_markers, sel_point_markers; + for (int i = 0; i < int(ds.entities.size()); ++i) { + const SketchEntity& e = ds.entities[i]; + // A Point has no polyline to strip; draw it as a vertex marker so a committed + // point stays visible (it vanished on commit). Selection colouring keeps working: + // sel_ent[] stays index-aligned with ds.entities, untouched for the other types. + if (e.type == SketchEntity::Type::Point) { + (sel_ent[i] ? sel_point_markers : point_markers).push_back(e.p0); + continue; + } + bool closed = false; + std::vector poly = entity_polyline(e, closed); + const ColorRGBA* hlc = sketch_hl_color(ds.feature); + ColorRGBA wc = sel_ent[i] ? swire : (hlc ? *hlc : dwire); + draw_quad_strip(m_line_model, poly, closed, wc); + } + if (!point_markers.empty()) { + const ColorRGBA* hlc = sketch_hl_color(ds.feature); + draw_vertices(m_vertex_model, point_markers, hlc ? *hlc : dwire); + } + if (!sel_point_markers.empty()) + draw_vertices(m_highlight_model, sel_point_markers, swire); + } + m_plane = saved_plane; + } + + // Nothing else to draw when no live sketch session is active — except the solid + // face/edge highlight overlay (whole-solid tint is handled by set_body_highlight). + if (!m_active) { + render_datum_planes(); + render_mate_connectors(); + render_solid_highlight(); + if (m_dbp_active) render_base_pick(); + if (m_dz_active) render_datum_gizmo(); + if (m_hx_active) render_helix_gizmo(); + if (m_rb_active) render_rib_gizmo(); + if (m_ex_active) render_extrude_gizmo(); + if (m_mv_active) render_move_gizmo(); + if (m_fl_active) render_fillet_gizmo(); + if (m_hl_active) render_hole_gizmo(); + if (m_th_active) render_thread_gizmo(); + if (m_sh_active) render_shell_gizmo(); + if (m_rv_active) render_revolve_gizmo(); + if (m_dr_active) render_draft_gizmo(); + if (m_ct_active) render_cut_gizmo(); + if (m_pt_active) render_pattern_gizmo(); + shader->stop_using(); + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + return; + } + + // Imported-art transform: only the bbox + handles over the (display-overlay) art. + if (m_mode == Mode::TransformArt) { + render_xform_gizmo(); + shader->stop_using(); + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + return; + } + + const ColorRGBA orange(1.0f, 0.55f, 0.1f, 1.0f); + const ColorRGBA yellow(1.0f, 0.85f, 0.2f, 1.0f); + const ColorRGBA grey(0.55f, 0.55f, 0.60f, 1.0f); + + if (m_mode == Mode::Constrain) { + const ColorRGBA cyan(0.30f, 0.80f, 1.0f, 1.0f); + const ColorRGBA red(1.0f, 0.25f, 0.25f, 1.0f); + if (m_constrain_entities) { + // Draw all entities cyan; picked Line entities highlighted red. + std::vector markers; + for (size_t i = 0; i < m_entities.size(); ++i) { + const SketchEntity& e = m_entities[i]; + const bool sel = (int(i) == m_pick0 || int(i) == m_pick1 || int(i) == m_pick2); + // Constraint-manager highlight: the entities a selected constraint + // references glow yellow (picked entities still win as red). + const bool hl = !sel && std::find(m_constraint_hl.begin(), m_constraint_hl.end(), + int(i)) != m_constraint_hl.end(); + const ColorRGBA col = sel ? red : (hl ? yellow : cyan); + if (e.type == SketchEntity::Type::Point) { markers.push_back(e.p0); continue; } + bool closed = false; + std::vector poly = entity_polyline(e, closed); + draw_quad_strip((sel || hl) ? m_highlight_model : m_line_model, poly, closed, col); + } + if (!markers.empty()) + draw_vertices(m_vertex_model, markers, cyan); + // Constraint badges (C3.4b): iconic glyphs near each constraint's entity. + { + const double upp = 1.0 / std::max(camera.get_zoom(), 1e-6); + std::vector> glyphs; + build_constraint_glyphs(upp, m_constrain_cons, glyphs); + if (!glyphs.empty()) { + const ColorRGBA badge(0.45f, 0.95f, 0.70f, 1.0f); // CAD teal-green + draw_strokes(m_fill_model, glyphs, std::max(0.9 * upp, 1e-4), badge); + } + } + shader->stop_using(); + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + return; + } + draw_quad_strip(m_line_model, m_points, true, cyan); + draw_vertices(m_vertex_model, m_points, cyan); + if (m_sel_a >= 0 && m_sel_b >= 0 && + m_sel_a < int(m_points.size()) && m_sel_b < int(m_points.size())) { + std::vector seg = { m_points[m_sel_a], m_points[m_sel_b] }; + draw_quad_strip(m_highlight_model, seg, false, red); + } + shader->stop_using(); + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + return; + } + + // Closed loops fill as translucent faces (the "closed loop = selectable face" + // affordance). Drawn first so the entity outlines paint over the fill. + { + // region_loops(), NOT closed_regions(): the latter returns raw polygons with no notion + // of nesting, so a circle drawn inside a rectangle was filled as its own solid disc on + // top of a solid rectangle. That is why a live sketch still showed a filled blue circle + // however often the COMMITTED renderer below was corrected — these are two separate + // renderers and only one of them had been taught about holes. + const std::vector loops = region_loops(m_entities); + if (!loops.empty()) { + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + // A bore is not a face. Skip loops that are somebody's hole, and cut those holes out + // of the region that owns them, so a plate with a hole LOOKS like one while drawing. + std::vector is_hole(loops.size(), 0); + for (const RegionLoop& L : loops) + for (int h : L.holes) + if (h >= 0 && h < int(is_hole.size())) is_hole[h] = 1; + for (size_t r = 0; r < loops.size(); ++r) { + if (is_hole[r]) continue; + std::vector> hp; + for (int h : loops[r].holes) + if (h >= 0 && h < int(loops.size())) hp.push_back(loops[h].poly); + draw_fill_holed(m_fill_model, loops[r].poly, hp, design_idle_face_color()); + } + glsafe(::glDisable(GL_BLEND)); + } + } + + // Committed entities of this session. DoF feedback (P3): a fully-constrained + // sketch (dof==0, consistent) paints green; entities touched by a conflicting + // constraint paint red; otherwise the under-constrained default (orange / grey + // construction). Selected entities always override to the shared selection colour. + // NOT white: the Design tab now paints a bed grid, and white-on-grid made a freshly + // drawn (hence auto-selected) line invisible against it. design_selection_color() is + // the same cyan the solid picks already wear, so "selected" reads the same everywhere. + const ColorRGBA white(1.0f, 1.0f, 1.0f, 1.0f); // hover handle only + const ColorRGBA sel_col = design_selection_color(); + const ColorRGBA green(0.30f, 0.85f, 0.42f, 1.0f); + const ColorRGBA conflict(1.0f, 0.22f, 0.22f, 1.0f); + const ColorRGBA opref(0.80f, 0.45f, 1.0f, 1.0f); // violet: the edit-op's reference pick + const double upp_dash = 1.0 / std::max(camera.get_zoom(), 1e-6); // world units per pixel + const ColorRGBA editing(1.0f, 0.78f, 0.10f, 1.0f); // amber: entity whose dim is being typed + const bool fully = (m_dof == 0 && m_solve_ok); + // While an auto-edit value field is open, the active step names the entities its dimension + // drives — light them up so it's obvious WHICH feature the number (e.g. a circle's radius) + // changes. + const std::vector* edit_hi = + (m_autoedit_dim_idx >= 0 && m_autoedit_dim_idx < int(m_autoedit_dims.size())) + ? &m_autoedit_dims[m_autoedit_dim_idx].hi : nullptr; + std::vector point_markers, sel_point_markers; + for (size_t i = 0; i < m_entities.size(); ++i) { + const SketchEntity& e = m_entities[i]; + const bool selected = + std::find(m_selection.begin(), m_selection.end(), int(i)) != m_selection.end(); + const bool editing_this = + edit_hi && std::find(edit_hi->begin(), edit_hi->end(), int(i)) != edit_hi->end(); + const bool bad = i < m_entity_conflict.size() && m_entity_conflict[i]; + // The first pick of an edit-op has a DIFFERENT ROLE from the rest of the selection — + // Mirror's is the axis, Fillet/Chamfer's is the first of the two lines — and until now + // every pick painted the same white, so the picture could not answer "what did I select + // as what". Violet, not cyan: cyan means SELECTED here and nothing else may wear it. + // vd6v. + const bool op_ref = is_edit_op_mode() && int(i) == m_op_a; + ColorRGBA col; + if (editing_this) col = editing; + else if (op_ref) col = opref; + else if (selected) col = sel_col; + else if (bad) col = conflict; + else if (e.construction) col = grey; + else col = fully ? green : orange; + if (e.type == SketchEntity::Type::Point) { + (selected ? sel_point_markers : point_markers).push_back(e.p0); + continue; + } + bool closed = false; + std::vector poly = entity_polyline(e, closed); + GLModel& target = (selected || editing_this || op_ref) ? m_highlight_model : m_line_model; + if (e.construction) { + for (const std::vector& d : dash_polyline(poly, closed, 9.0 * upp_dash, 6.0 * upp_dash)) + draw_quad_strip(target, d, false, col); + } else { + draw_quad_strip(target, poly, closed, col); + } + } + if (!point_markers.empty()) + draw_vertices(m_vertex_model, point_markers, yellow); + if (!sel_point_markers.empty()) + draw_vertices(m_highlight_model, sel_point_markers, sel_col); + + // Constraint badges during a LIVE sketch. They used to render only inside Mode::Constrain + // on a COMMITTED feature, so every constraint applied while drawing — which is the path the + // Constrain buttons take during a session — was invisible and unremovable: you could not + // tell whether Parallel had been applied, nor take it back. Same glyphs, same teal, sourced + // from this session's m_constraints; click one to delete it (remove_constraint_near). + if (!m_constraints.empty()) { + std::vector> glyphs; + build_constraint_glyphs(upp_dash, m_constraints, glyphs); + if (!glyphs.empty()) + draw_strokes(m_fill_model, glyphs, std::max(0.9 * upp_dash, 1e-4), + ColorRGBA(0.45f, 0.95f, 0.70f, 1.0f)); // CAD teal-green + } + + // Endpoint / centre handles so individual points are visible and pickable in the + // Select and Dimension tools (a line = a segment + 2 points). Selected ones cyan. + m_show_handles = (m_mode == Mode::Select || m_mode == Mode::Dimension); + if (m_show_handles) { + std::vector handles, sel_handles; + auto add_h = [&](int ei, SketchPointRole r, const Vec2d& q) { + const bool s = std::find(m_point_sel.begin(), m_point_sel.end(), + std::make_pair(ei, r)) != m_point_sel.end(); + (s ? sel_handles : handles).push_back(q); + }; + for (size_t i = 0; i < m_entities.size(); ++i) { + const SketchEntity& e = m_entities[i]; + switch (e.type) { + case SketchEntity::Type::Line: + add_h(int(i), SketchPointRole::P0, e.p0); + add_h(int(i), SketchPointRole::P1, e.p1); + break; + case SketchEntity::Type::Arc: + case SketchEntity::Type::EllipseArc: + add_h(int(i), SketchPointRole::P0, e.p0); + add_h(int(i), SketchPointRole::P1, e.p1); + add_h(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::Circle: + case SketchEntity::Type::Ellipse: + add_h(int(i), SketchPointRole::Center, e.center); + break; + case SketchEntity::Type::BSpline: + add_h(int(i), SketchPointRole::P0, e.p0); + add_h(int(i), SketchPointRole::P1, e.p1); + break; + case SketchEntity::Type::Point: + break; // its own marker is drawn above + } + } + if (!handles.empty()) draw_vertices(m_vertex_model, handles, ColorRGBA(0.65f, 0.65f, 0.30f, 1.0f)); + if (!sel_handles.empty()) draw_vertices(m_highlight_model, sel_handles, sel_col); + + // Midpoint of every segment, drawn smaller and cooler than the endpoint handles + // (te8v). Without it the Midpoint snap is invisible: it exists in the + // inference engine but the user has nothing to aim at. Construction lines get one + // too — you constrain to them as readily as to real geometry. + std::vector mids; + for (const SketchEntity& e : m_entities) { + if (e.type == SketchEntity::Type::Line) + mids.push_back(0.5 * (e.p0 + e.p1)); + else if (e.type == SketchEntity::Type::Arc) { + const double am = 0.5 * (e.start_angle + e.end_angle); + mids.push_back(Vec2d(e.center.x() + e.radius * std::cos(am), + e.center.y() + e.radius * std::sin(am))); + } + } + if (!mids.empty()) + draw_vertices(m_vertex_model, mids, ColorRGBA(0.35f, 0.75f, 0.85f, 1.0f), 0.9); + + // Derived feature handles (A3): the circle RadiusHandle is not a SketchPointRole, + // so the per-point pass above doesn't draw it. Render it (cyan) + the hovered + // handle (white, larger) at a screen-constant size so they stay grabbable at any + // zoom. A4 makes these draggable; later phases add slot/rect/polygon handles. + const double upp = 1.0 / std::max(camera.get_zoom(), 1e-6); + std::vector radius_h; + for (const Handle& h : build_handles()) + if (h.role == HandleRole::RadiusHandle || h.role == HandleRole::MajorAxis || + h.role == HandleRole::MinorAxis || h.role == HandleRole::BSplineCtrl) + radius_h.push_back(h.pos); + if (!radius_h.empty()) + draw_vertices(m_vertex_model, radius_h, ColorRGBA(0.30f, 0.75f, 0.95f, 1.0f), + std::max(4.0 * upp, 1e-4)); + if (m_has_hover_handle) + draw_vertices(m_highlight_model, { m_hover_handle.pos }, white, + std::max(5.5 * upp, 1e-4)); + } + + // Placed dimension quotes (drawn in every mode so they persist while sketching). + // Pass plane-units-per-pixel so labels keep a constant on-screen size. + render_dimensions(1.0 / std::max(camera.get_zoom(), 1e-6)); + render_live_quotes(1.0 / std::max(camera.get_zoom(), 1e-6)); + // Draw-then-edit: the selection's live quotes now exist. Open the primary value editor on + // the next event-loop tick (NOT here inside the paint) so the floating field grabs focus + // cleanly — the same context the Line path opens from. m_live_quotes persists until the + // next render_live_quotes(), so the deferred open still sees this frame's values. + if (m_autoedit_pending) { + m_autoedit_pending = false; + trace_autoedit("pending -> deferring open", 0); + wxGetApp().CallAfter([this] { open_primary_autoedit(); }); + } + if (is_edit_op_mode()) + render_op_gizmo(1.0 / std::max(camera.get_zoom(), 1e-6)); + if (is_transform_mode()) + render_tf_gizmo(1.0 / std::max(camera.get_zoom(), 1e-6)); + + // In-progress entity preview for the active tool. + const ColorRGBA preview = m_construction ? grey : orange; + switch (m_mode) { + + case Mode::Select: + case Mode::Dimension: + break; // selection highlight / placed quotes are drawn above; no rubber-band + + case Mode::Polyline: { + std::vector pts = m_points; + if (m_has_cursor) + pts.push_back(m_cursor); + draw_quad_strip(m_highlight_model, pts, false, preview); + draw_vertices(m_vertex_model, m_points, yellow); + // Teal rubber-band = the new segment is locked to an inference angle. + if (m_cursor_locked && m_has_cursor && !m_points.empty()) { + const ColorRGBA lock(0.10f, 0.85f, 0.80f, 1.0f); + std::vector seg = { m_points.back(), m_cursor }; + draw_quad_strip(m_line_model, seg, false, lock); + } + break; + } + + case Mode::Line: { + std::vector pts = m_points; + if (m_has_cursor && m_points.size() == 1) + pts.push_back(m_cursor); + if (pts.size() >= 2) { + const ColorRGBA col = (m_cursor_locked && m_points.size() == 1) + ? ColorRGBA(0.10f, 0.85f, 0.80f, 1.0f) : preview; + draw_quad_strip(m_highlight_model, pts, false, col); + } + draw_vertices(m_vertex_model, m_points, yellow); + break; + } + + case Mode::CornerRect: { + if (m_points.size() == 1 && m_has_cursor) { + const Vec2d A = m_points[0]; + const Vec2d B = m_cursor; + std::vector corners = { A, Vec2d(B.x(), A.y()), B, Vec2d(A.x(), B.y()) }; + draw_quad_strip(m_highlight_model, corners, true, preview); + } + break; + } + + case Mode::CenterRect: { + if (m_points.size() == 1 && m_has_cursor) { + const Vec2d C = m_points[0]; + const Vec2d P = m_cursor; + const double hx = std::abs(P.x() - C.x()); + const double hy = std::abs(P.y() - C.y()); + std::vector corners = { + Vec2d(C.x() - hx, C.y() - hy), Vec2d(C.x() + hx, C.y() - hy), + Vec2d(C.x() + hx, C.y() + hy), Vec2d(C.x() - hx, C.y() + hy) }; + draw_quad_strip(m_highlight_model, corners, true, preview); + draw_vertices(m_vertex_model, { C }, yellow); + } + break; + } + + case Mode::ObliqueRect: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 2 && m_has_cursor) { + const Vec2d A = m_points[0], B = m_points[1]; + Vec2d u = B - A; + if (u.squaredNorm() > 1e-12) { + u.normalize(); + const Vec2d n(-u.y(), u.x()); + const double w = n.dot(m_cursor - A); + draw_quad_strip(m_highlight_model, { A, B, B + n * w, A + n * w }, true, preview); + } + } + break; + } + + case Mode::RoundedRect: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + const Vec2d A = m_points[0], B = m_cursor; // box not yet fixed: plain rect + draw_quad_strip(m_highlight_model, { A, Vec2d(B.x(), A.y()), B, Vec2d(A.x(), B.y()) }, true, preview); + } else if (m_points.size() == 2 && m_has_cursor) { + draw_entities_preview(make_rounded_rect(m_points[0], m_points[1], m_cursor), preview); + } + break; + } + + case Mode::CenterCircle: { + if (m_points.size() == 1 && m_has_cursor) { + const Vec2d C = m_points[0]; + const double r = (m_cursor - C).norm(); + draw_quad_strip(m_highlight_model, circle_polygon(C, r), true, preview); + draw_vertices(m_vertex_model, { C }, yellow); + } + break; + } + + case Mode::TwoPointCircle: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + const Vec2d C = (m_points[0] + m_cursor) * 0.5; + const double r = (m_cursor - m_points[0]).norm() * 0.5; + draw_quad_strip(m_highlight_model, circle_polygon(C, r), true, preview); + } + break; + } + + case Mode::ThreePointCircle: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 2 && m_has_cursor) + draw_entities_preview(make_three_point_circle(m_points[0], m_points[1], m_cursor), preview); + break; + } + + case Mode::ThreePointArc: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 2 && m_has_cursor) + draw_entities_preview(make_three_point_arc(m_points[0], m_points[1], m_cursor), preview); + break; + } + + case Mode::TangentArc: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) + draw_entities_preview(make_tangent_arc(m_points[0], m_cursor), preview); + break; + } + + case Mode::CenterArc: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + // center placed: show the radius rubber-band as a faint guide circle + SketchEntity g; g.type = SketchEntity::Type::Circle; g.center = m_points[0]; + g.p0 = m_points[0]; g.radius = (m_cursor - m_points[0]).norm(); g.construction = true; + draw_entities_preview({ g }, preview); + } else if (m_points.size() == 2 && m_has_cursor) { + draw_entities_preview(make_center_arc(m_points[0], m_points[1], m_cursor), preview); + } + break; + } + + case Mode::Slot: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + draw_quad_strip(m_highlight_model, { m_points[0], m_cursor }, false, grey); + } else if (m_points.size() == 2 && m_has_cursor) { + Vec2d u = m_points[1] - m_points[0]; + if (u.squaredNorm() > 1e-12) { + u.normalize(); + const Vec2d n(-u.y(), u.x()); + const double w = std::abs(n.dot(m_cursor - m_points[0])); + draw_entities_preview(make_slot(m_points[0], m_points[1], w), preview); + } + } + break; + } + + case Mode::ArcSlot: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + // center placed: faint guide circle for the centerline radius + SketchEntity g; g.type = SketchEntity::Type::Circle; g.center = m_points[0]; + g.p0 = m_points[0]; g.radius = (m_cursor - m_points[0]).norm(); g.construction = true; + draw_entities_preview({ g }, preview); + } else if (m_points.size() == 2 && m_has_cursor) { + draw_entities_preview(make_center_arc(m_points[0], m_points[1], m_cursor), preview); // centerline arc + } else if (m_points.size() == 3 && m_has_cursor) { + const double Rc = (m_points[1] - m_points[0]).norm(); + const double w = std::abs((m_cursor - m_points[0]).norm() - Rc); + draw_entities_preview(make_arc_slot(m_points[0], m_points[1], m_points[2], w), preview); + } + break; + } + + case Mode::Polygon: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) + draw_entities_preview(make_polygon(m_points[0], m_cursor, m_polygon_sides), preview); + break; + } + + case Mode::Ellipse: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + SketchEntity g; g.type = SketchEntity::Type::Line; + g.p0 = m_points[0]; g.p1 = m_cursor; g.construction = true; // major-axis rubber band + draw_entities_preview({ g }, preview); + } else if (m_points.size() == 2 && m_has_cursor) { + draw_entities_preview(make_ellipse(m_points[0], m_points[1], m_cursor), preview); + } + break; + } + + case Mode::EllipseArc: { + draw_vertices(m_vertex_model, m_points, yellow); + if (m_points.size() == 1 && m_has_cursor) { + SketchEntity g; g.type = SketchEntity::Type::Line; + g.p0 = m_points[0]; g.p1 = m_cursor; g.construction = true; + draw_entities_preview({ g }, preview); + } else if (m_points.size() == 2 && m_has_cursor) { + draw_entities_preview(make_ellipse(m_points[0], m_points[1], m_cursor), preview); + } else if (m_points.size() == 3 && m_has_cursor) { + std::vector full = make_ellipse(m_points[0], m_points[1], m_points[2]); + for (auto& e : full) e.construction = true; // faint full ellipse + draw_entities_preview(full, preview); + } else if (m_points.size() == 4 && m_has_cursor) { + draw_entities_preview(make_ellipse_arc(m_points[0], m_points[1], m_points[2], + m_points[3], m_cursor), preview); + } + break; + } + + case Mode::BSpline: { + std::vector poles = m_points; + if (m_has_cursor) poles.push_back(m_cursor); + // Faint control polygon as a placement guide. + if (poles.size() >= 2) { + std::vector guide; + for (size_t i = 1; i < poles.size(); ++i) { + SketchEntity g; g.type = SketchEntity::Type::Line; + g.p0 = poles[i - 1]; g.p1 = poles[i]; g.construction = true; + guide.push_back(g); + } + draw_entities_preview(guide, grey); + } + // The spline curve itself. + if (poles.size() >= 2) + draw_quad_strip(m_highlight_model, bspline_polyline(poles), false, preview); + draw_vertices(m_vertex_model, m_points, yellow); + break; + } + + case Mode::Trim: + case Mode::Extend: { + // Hover preview: paint the exact sub-portion a click would cut (Trim) / add (Extend) + // in red, recomputed from the cursor every frame (never persisted). The pick tolerance + // matches on_mouse: ~8 px projected to plane units, x3 (here via zoom -> units/px). + if (m_has_cursor) { + const double upp = 1.0 / std::max(camera.get_zoom(), 1e-6); + int subj = -1; + std::vector removed; + const ColorRGBA cut(1.0f, 0.2f, 0.2f, 1.0f); + if (compute_trim_preview(m_cursor, 24.0 * upp, m_mode == Mode::Extend, subj, removed)) + draw_quad_strip(m_highlight_model, removed, false, cut); + } + break; + } + + case Mode::Point: + case Mode::Constrain: + break; + } + + // Inference hint: highlight the snapped target under the cursor (C1.3). Colour + // encodes what the placed point will be Coincident/PointOnObject/Fixed onto. + if (m_has_cursor && m_mode != Mode::Constrain && m_cursor_snap.snapped()) { + ColorRGBA hint(1.0f, 0.55f, 0.1f, 1.0f); // endpoint: orange + switch (m_cursor_snap.kind) { + case InferenceSnap::Kind::Midpoint: hint = ColorRGBA(0.35f, 0.90f, 0.75f, 1.0f); break; // teal + case InferenceSnap::Kind::Center: hint = ColorRGBA(0.30f, 0.80f, 1.0f, 1.0f); break; // cyan + case InferenceSnap::Kind::Origin: hint = ColorRGBA(1.0f, 0.30f, 0.85f, 1.0f); break; // magenta + case InferenceSnap::Kind::OnEdge: hint = ColorRGBA(0.45f, 0.70f, 1.0f, 1.0f); break; // blue + default: break; + } + draw_vertices(m_highlight_model, { m_cursor_snap.point }, hint); + } + + shader->stop_using(); + glsafe(::glEnable(GL_CULL_FACE)); + glsafe(::glEnable(GL_DEPTH_TEST)); + + if (on_readout) on_readout(build_readout()); // bottom-right viewport HUD +} + +// Compact "current values" for the bottom-right HUD: the live segment being drawn (length +// + bearing) takes priority; otherwise the selected entity's characteristic quotes (the +// same values render_live_quotes just drew on the geometry). +std::string DesignSketchTool::build_readout() const +{ + auto en = [](char* b) { for (char* c = b; *c; ++c) if (*c == ',') *c = '.'; }; + if (m_active && (m_mode == Mode::Line || m_mode == Mode::Polyline) && + !m_points.empty() && m_has_cursor) { + const Vec2d d = m_cursor - m_points.back(); + double ang = std::atan2(d.y(), d.x()) * 180.0 / M_PI; if (ang < 0.0) ang += 360.0; + char b[80]; std::snprintf(b, sizeof(b), "L %.2f mm %.1f\xC2\xB0", d.norm(), ang); + en(b); + std::string out = b; + // Tell the user how to end a polyline chain — there's no other affordance for it. + if (m_mode == Mode::Polyline && m_points.size() >= 2) + out += " right-click or double-click to finish, click start to close"; + return out; + } + if (!m_active) return std::string(); + std::string out; + for (const DimAnnot& q : m_live_quotes) { // selection's Length/Radius/Width/… quotes + if (!out.empty()) out += " "; + out += dim_text(q); + } + return out; +} + +// Distance from point p to the segment [a,b] in plane (2D) coordinates. +static double point_segment_dist(const Vec2d& p, const Vec2d& a, const Vec2d& b) +{ + const Vec2d ab = b - a; + const double len2 = ab.squaredNorm(); + if (len2 < 1e-12) + return (p - a).norm(); + double t = (p - a).dot(ab) / len2; + t = std::max(0.0, std::min(1.0, t)); + return (p - (a + t * ab)).norm(); +} + +// Even-odd point-in-polygon test (plane coords), for picking a closed-loop interior. +static bool point_in_poly(const Vec2d& q, const std::vector& poly) +{ + if (poly.size() < 3) return false; + bool in = false; + for (size_t i = 0, j = poly.size() - 1; i < poly.size(); j = i++) { + const Vec2d& a = poly[i]; + const Vec2d& b = poly[j]; + if (((a.y() > q.y()) != (b.y() > q.y())) && + (q.x() < (b.x() - a.x()) * (q.y() - a.y()) / (b.y() - a.y()) + a.x())) + in = !in; + } + return in; +} + +// Möller–Trumbore ray/triangle intersection in 3D world space. ro=ray origin, rd=ray dir +// (not necessarily unit). Returns true + the ray parameter t (>0) of the hit. +static bool ray_triangle(const Vec3d& ro, const Vec3d& rd, + const Vec3d& v0, const Vec3d& v1, const Vec3d& v2, double& t) +{ + const Vec3d e1 = v1 - v0, e2 = v2 - v0; + const Vec3d p = rd.cross(e2); + const double det = e1.dot(p); + if (std::abs(det) < 1e-12) return false; // parallel + const double inv = 1.0 / det; + const Vec3d s = ro - v0; + const double u = s.dot(p) * inv; + if (u < -1e-9 || u > 1.0 + 1e-9) return false; + const Vec3d q = s.cross(e1); + const double v = rd.dot(q) * inv; + if (v < -1e-9 || u + v > 1.0 + 1e-9) return false; + t = e2.dot(q) * inv; + return t > 1e-9; +} + +// Shortest distance between an infinite ray (ro+rd) and a 3D segment [a,b]. +static double ray_segment_dist3(const Vec3d& ro, const Vec3d& rd, const Vec3d& a, const Vec3d& b) +{ + const Vec3d d1 = rd, d2 = b - a, r = ro - a; + const double A = d1.dot(d1), B = d1.dot(d2), C = d2.dot(d2), D = d1.dot(r), E = d2.dot(r); + const double denom = A * C - B * B; + double s = (std::abs(denom) > 1e-12) ? (A * E - B * D) / denom : 0.0; // param on segment + s = std::max(0.0, std::min(1.0, s)); + double tt = (B * s - D) / std::max(A, 1e-12); // param on ray + tt = std::max(0.0, tt); // ray is forward-only + const Vec3d pr = ro + tt * d1, ps = a + s * d2; + return (pr - ps).norm(); +} + +// Screen-plane distance from p to a sketch entity, for click picking in Constrain +// mode. Circles/arcs measure distance to the ring; points to their position. +static double entity_pick_dist(const Vec2d& p, const SketchEntity& e) +{ + switch (e.type) { + case SketchEntity::Type::Line: return point_segment_dist(p, e.p0, e.p1); + case SketchEntity::Type::Point: return (p - e.p0).norm(); + case SketchEntity::Type::Circle: + case SketchEntity::Type::Arc: return std::abs((p - e.center).norm() - e.radius); + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: { + // Accurate edge pick: sample the true ellipse outline as a polyline and take the + // min segment distance. The crude mean-radius circle mis-picks eccentric ellipses + // (the outline at the major/minor extremes is far from that circle), which made the + // face-fill swallow edge clicks. Full ellipse sweeps 0..2pi; an arc its param range. + const double cu = std::cos(e.rotation), su = std::sin(e.rotation); + const bool full = (e.type == SketchEntity::Type::Ellipse); + const double t0 = full ? 0.0 : e.start_angle; + const double t1 = full ? 2.0 * M_PI : e.end_angle; + const int n = 48; + double best = 1e30; Vec2d prev; + for (int i = 0; i <= n; ++i) { + const double t = t0 + (t1 - t0) * double(i) / n; + const double lx = e.radius * std::cos(t), ly = e.rminor * std::sin(t); // local + const Vec2d q(e.center.x() + lx * cu - ly * su, + e.center.y() + lx * su + ly * cu); // world + if (i > 0) best = std::min(best, point_segment_dist(p, prev, q)); + prev = q; + } + return best; + } + case SketchEntity::Type::BSpline: { + const std::vector poly = bspline_polyline(e.ctrl); + double best = 1e30; + for (size_t i = 1; i < poly.size(); ++i) + best = std::min(best, point_segment_dist(p, poly[i - 1], poly[i])); + return best; + } + } + return 1e30; +} + +// Adjacency endpoints for loop walking (Circles/Points have none -> stand-alone). +static void entity_endpoints(const SketchEntity& e, std::vector& out) +{ + out.clear(); + if (e.type == SketchEntity::Type::Line) { + out.push_back(e.p0); + out.push_back(e.p1); + } else if (e.type == SketchEntity::Type::Arc) { + out.push_back(e.center + e.radius * Vec2d(std::cos(e.start_angle), std::sin(e.start_angle))); + out.push_back(e.center + e.radius * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle))); + } +} + +// Reference point for positioning ops: a Point's position, or a Circle/Arc centre. +// Lines have no single reference point (return false). +static bool entity_ref_point(const SketchEntity& e, Vec2d& out) +{ + switch (e.type) { + case SketchEntity::Type::Point: out = e.p0; return true; + case SketchEntity::Type::Circle: + case SketchEntity::Type::Arc: + case SketchEntity::Type::Ellipse: + case SketchEntity::Type::EllipseArc: out = e.center; return true; + default: return false; // Line + } +} + +// Rigidly translate a whole entity (keeps size/shape). +static void translate_entity(SketchEntity& e, const Vec2d& d) +{ + e.p0 += d; + e.p1 += d; + e.center += d; + for (auto& cp : e.ctrl) cp += d; // BSpline poles +} + +// Select whatever the cursor is over, for a RIGHT-click. In every CAD application the context +// menu belongs to the thing you pointed at; here the menu was built from whatever happened to be +// selected already, so right-clicking a line you had not left-clicked first offered the empty- +// selection vocabulary and its own Delete/Length/Trim rows were nowhere. The offer table already +// described all of those for SkLine/SkArc/SkPoint — the pick was the missing half. +// +// Nothing is stolen from an existing selection: if the entity under the cursor is already part +// of it, the selection is left exactly as it is, so right-clicking one member of a multi-entity +// pick still offers the multi-entity verbs. +// ---- Scripted surface (MCP) ------------------------------------------------------------ + +int DesignSketchTool::add_entities_scripted(const std::vector& ents) +{ + if (ents.empty()) return -1; + const int base = int(m_entities.size()); + for (const SketchEntity& e : ents) m_entities.push_back(e); + // Auto-constrain, but do NOT let the inference move what the caller specified. A gesture + // gets 3 degrees of slack because a hand cannot click an exact horizontal; a scripted add + // has already said exactly what it means, and snapping a segment 2 degrees off to exactly + // horizontal silently rewrites it. Measured on a real drawing: feeding the 64 flattened + // segments of one circle moved vertices by up to 0.058 mm and shrank the enclosed area by + // 0.067%, because several segments of the polygon fell inside that 3 degree window. Exact + // coincidence inference is unaffected — it already tests to 1e-6 — so chains still weld + // and genuinely axis-aligned scripted geometry still gets its Horizontal/Vertical. + // + // ZERO, not 1e-4. Any window at all is a window that moves the caller's points, and 1e-4 rad + // was still wide enough to catch the short chords of a small flattened circle: on four of + // the 39 corpus drawings the loops that came back wrong were all TINY (1.4 to 13 mm^2), out + // by up to 7e-4 relative, because a 0.005 degree tilt on a 0.3 mm chord is inside 1e-4. + // With zero, only a segment that is EXACTLY axis-aligned is constrained, and constraining + // something already true cannot move it. 8xg1. + // The weld window closes too. Two endpoints a micron apart are not the same point when a + // caller typed both of them: on MPD681, 20 of 363 scripted segments were dragged onto a + // common point up to 0.0021 mm away, because welding is TRANSITIVE and three vertices near + // the origin chained into one. Exactly-equal endpoints still weld, which is what keeps a + // scripted profile closed — a ring's last point IS its first point. + infer_auto_constraints(base, 0.0, 0.0); + resolve_live(); + // A scripted add is not a drawn gesture, and draw-then-edit must not fire for it. The render + // pass arms that on a jump in the entity count (see the m_autoedit_seen block in render()), + // so a bulk load made while a creation tool is armed selected the last scripted entity and + // opened that tool's value field — which freezes the canvas (on_mouse_impl returns early + // while m_awaiting_length) and swallows every letter (in_text includes inline_busy()). The + // symptom was that the first key and click after sketch_add did nothing until one Escape had + // dismissed the field. Resyncing the baseline here leaves an ALREADY open field alone; it + // only stops this add from being read as something the user just drew. j7gc. + m_autoedit_seen = int(m_entities.size()); + return base; +} + +bool DesignSketchTool::select_indices(const std::vector& idx) +{ + m_selection.clear(); + m_point_sel.clear(); + const int n = int(m_entities.size()); + for (int i : idx) + if (i >= 0 && i < n && + std::find(m_selection.begin(), m_selection.end(), i) == m_selection.end()) + m_selection.push_back(i); + if (on_selection_changed) on_selection_changed(int(m_selection.size())); + return !m_selection.empty(); +} + +DesignSketchTool::LoopReport DesignSketchTool::loop_report() const +{ + LoopReport out; + + // Closed regions and their voids come straight from the code the viewport already uses to + // decide what can be extruded, so the report cannot drift from what the tool will build. + const auto regs = region_loops(m_entities); + out.loops.reserve(regs.size()); + for (const auto& r : regs) { + LoopInfo li; + li.ents = r.ents; + li.holes = r.holes; + li.closed = true; + // Analytic where the loop IS one closed curve; shoelace only where it is a chain. + // region_loops hands back the render polyline, and a circle's is a 64-gon whose area is + // 0.3% short — a number reported as "area" must not be the faceting error. + if (r.ents.size() == 1 && r.ents[0] >= 0 && r.ents[0] < int(m_entities.size()) && + (m_entities[r.ents[0]].type == SketchEntity::Type::Circle || + m_entities[r.ents[0]].type == SketchEntity::Type::Ellipse)) { + const SketchEntity& c = m_entities[r.ents[0]]; + li.area = (c.type == SketchEntity::Type::Circle) + ? M_PI * c.radius * c.radius + : M_PI * c.radius * c.rminor; + } else { + // EXACT area by Green's theorem over the chain, entity by entity, with no faceting + // anywhere. The obvious alternative — shoelace over the render polyline — is short by + // the slivers between each arc and its chords: 2.02 mm2 on a 3706.86 mm2 stadium, + // 0.054%, invisible on screen and simply wrong in a number reported as "the area". + // Correcting the shoelace afterwards does NOT work: a mirrored arc stores a negated + // sweep, so two corrections that should add cancel instead. Integrating each entity + // in TRAVERSAL order sidesteps the sign question entirely. + // line A->B : x0*y1 - x1*y0 + // arc a0->a1: Cx*r*(sin a1 - sin a0) - Cy*r*(cos a1 - cos a0) + r^2*(a1 - a0) + // Both are the integrand of the contour integral, so area2 accumulates 2*area and is + // halved once at the end. (Doubling the arc term instead reads 5913.72 on the stadium + // — exactly one arc's contribution too much, which is how the slip was caught.) + auto ent_ends = [&](int ei, Vec2d& a, Vec2d& b) { + a = m_entities[ei].p0; b = m_entities[ei].p1; + }; + const double eps = 1e-6; + double area2 = 0.0; + bool exact = true; + Vec2d cur(0, 0); + for (size_t k = 0; k < r.ents.size(); ++k) { + const int ei = r.ents[k]; + if (ei < 0 || ei >= int(m_entities.size())) { exact = false; break; } + const SketchEntity& e = m_entities[ei]; + if (e.type != SketchEntity::Type::Line && e.type != SketchEntity::Type::Arc) { + exact = false; break; // spline / ellipse arc: fall back below + } + Vec2d A, B; ent_ends(ei, A, B); + bool rev = false; + if (k == 0) { + // Orient the first entity by whichever of its ends the SECOND one touches: + // that shared point is where this entity must finish. + if (r.ents.size() > 1) { + Vec2d C, D; ent_ends(r.ents[1], C, D); + if ((A - C).norm() < eps || (A - D).norm() < eps) rev = true; + } + } else { + if ((B - cur).norm() < eps) rev = true; + else if ((A - cur).norm() >= eps) { exact = false; break; } + } + const Vec2d P = rev ? B : A; + const Vec2d Q = rev ? A : B; + if (e.type == SketchEntity::Type::Line) { + area2 += P.x() * Q.y() - Q.x() * P.y(); + } else { + const double a0 = rev ? e.end_angle : e.start_angle; + const double a1 = rev ? e.start_angle : e.end_angle; + area2 += e.center.x() * e.radius * (std::sin(a1) - std::sin(a0)) + - e.center.y() * e.radius * (std::cos(a1) - std::cos(a0)) + + e.radius * e.radius * (a1 - a0); + } + cur = Q; + } + if (exact) { + li.area = 0.5 * area2; + } else { + // Splines and elliptical arcs have no closed form here; the render polyline is + // the honest best estimate, and it is flagged as such by being the fallback. + double a = 0.0; + for (size_t i = 0; i + 1 < r.poly.size(); ++i) + a += r.poly[i].x() * r.poly[i + 1].y() - r.poly[i + 1].x() * r.poly[i].y(); + if (r.poly.size() > 2) + a += r.poly.back().x() * r.poly.front().y() - r.poly.front().x() * r.poly.back().y(); + li.area = 0.5 * a; + } + } + out.loops.push_back(std::move(li)); + } + + // Open ends: an endpoint of an open curve that no other open curve's endpoint meets. This is + // the actionable half of the report — it says WHERE the profile fails to close, in plane + // coordinates, instead of only that it does. + struct End { Vec2d p; }; + std::vector ends; + for (const SketchEntity& e : m_entities) { + if (e.construction) continue; + if (e.type == SketchEntity::Type::Line || e.type == SketchEntity::Type::Arc || + e.type == SketchEntity::Type::EllipseArc || e.type == SketchEntity::Type::BSpline) { + ends.push_back({ e.p0 }); + ends.push_back({ e.p1 }); + } + } + const double eps = sketch_join_tol(); + for (size_t i = 0; i < ends.size(); ++i) { + int met = 0; + for (size_t j = 0; j < ends.size(); ++j) { + if (i == j) continue; + if ((ends[i].p - ends[j].p).norm() < eps) ++met; + } + if (met == 0) { + // Report each free end once; two ends of the same gap are two different points. + bool dup = false; + for (const Vec2d& q : out.open_ends) + if ((q - ends[i].p).norm() < eps) { dup = true; break; } + if (!dup) out.open_ends.push_back(ends[i].p); + } + } + return out; +} + +int DesignSketchTool::heal_coincidences(double tol, bool ignore_construction) +{ + if (tol <= 0.0) tol = 1e-3; + // Endpoint roles an entity exposes, same set infer_auto_constraints matches on. + auto roles_of = [](const SketchEntity& e, SketchPointRole out[2]) -> int { + switch (e.type) { + case SketchEntity::Type::Line: + case SketchEntity::Type::Arc: + case SketchEntity::Type::BSpline: + case SketchEntity::Type::EllipseArc: + out[0] = SketchPointRole::P0; out[1] = SketchPointRole::P1; return 2; + case SketchEntity::Type::Point: + out[0] = SketchPointRole::P0; return 1; + default: return 0; + } + }; + + const int n = int(m_entities.size()); + int welded = 0; + std::vector cands; + for (int i = 0; i < n; ++i) { + if (ignore_construction && m_entities[i].construction) continue; + SketchPointRole ir[2]; const int ni = roles_of(m_entities[i], ir); + for (int a = 0; a < ni; ++a) { + Vec2d pa; if (!point_at(i, ir[a], pa)) continue; + for (int j = i + 1; j < n; ++j) { + if (ignore_construction && m_entities[j].construction) continue; + SketchPointRole jr[2]; const int nj = roles_of(m_entities[j], jr); + for (int b = 0; b < nj; ++b) { + Vec2d pb; if (!point_at(j, jr[b], pb)) continue; + const double d = (pa - pb).norm(); + if (d > tol) continue; + if (has_coincident(i, ir[a], j, jr[b])) continue; + // WELD FIRST, then constrain. Handing the solver two points a tolerance + // apart and asking it to make them equal lets it move the rest of the sketch + // to get there; snapping them together first means the constraint it is + // asked to satisfy is already true, so nothing else shifts. + if (d > 0.0) { set_point(j, jr[b], pa); pb = pa; } + SketchEntityConstraintDef c; + c.type = SketchConstraintType::Coincident; + c.ea = i; c.ra = ir[a]; c.eb = j; c.rb = jr[b]; + cands.push_back(c); + ++welded; + } + } + } + } + if (!cands.empty()) { + try_add_constraints(cands); + resolve_live(); + } + return welded; +} + +bool DesignSketchTool::select_at_screen(GLCanvas3D& canvas, int sx, int sy) +{ + if (!is_active()) return false; + const Linef3 ray = canvas.mouse_ray(Point(sx, sy)); + const Linef3 ray8 = canvas.mouse_ray(Point(sx + 8, sy)); + const Vec2d p = m_plane.project(ray.a, ray.vector()); + const Vec2d p8 = m_plane.project(ray8.a, ray8.vector()); + const double tol = std::max(1e-3, (p8 - p).norm()); + + // A point handle beats the curve it belongs to, same precedence the left-click pick uses. + int ei = -1; SketchPointRole role = SketchPointRole::P0; + if (hit_test_point(p, tol, ei, role)) { + // A Point ENTITY is its own handle: there is nothing else to select there. Taking the + // handle branch for it filled m_point_sel and left m_selection empty — and the offer + // counts only m_selection, so right-clicking a sketch point produced the EMPTY + // vocabulary and every SkPoint row in the atlas was unreachable from the menu. Other + // entities keep the handle pick: a line's endpoint is a drag target, not a thing with a + // vocabulary of its own. lnri. + if (ei >= 0 && ei < int(m_entities.size()) + && m_entities[ei].type == SketchEntity::Type::Point) { + if (std::find(m_selection.begin(), m_selection.end(), ei) != m_selection.end()) + return false; // already selected: leave it alone + m_selection.assign(1, ei); + m_point_sel.clear(); + if (on_selection_changed) on_selection_changed(1); + return true; + } + const auto pr = std::make_pair(ei, role); + if (std::find(m_point_sel.begin(), m_point_sel.end(), pr) != m_point_sel.end()) + return false; // already selected: leave it alone + m_selection.clear(); + m_point_sel.assign(1, pr); + if (on_selection_changed) on_selection_changed(1); + return true; + } + + const int hit = hit_test(p, tol); + if (hit < 0) return false; + if (std::find(m_selection.begin(), m_selection.end(), hit) != m_selection.end()) + return false; // already selected: leave it alone + m_selection.assign(1, hit); + m_point_sel.clear(); + if (on_selection_changed) on_selection_changed(1); + return true; +} + +int DesignSketchTool::hit_test(const Vec2d& p, double tol) const +{ + double best = tol; + int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + return bi; +} + +std::vector DesignSketchTool::connected_loop(int seed) const +{ + std::vector out; + if (seed < 0 || seed >= int(m_entities.size())) return out; + const double eps2 = sketch_join_tol() * sketch_join_tol(); + std::vector vis(m_entities.size(), false); + std::vector stack = { seed }; + vis[seed] = true; + while (!stack.empty()) { + const int cur = stack.back(); + stack.pop_back(); + out.push_back(cur); + std::vector ce; + entity_endpoints(m_entities[cur], ce); + if (ce.empty()) continue; // circle/point: not part of a chain + for (size_t j = 0; j < m_entities.size(); ++j) { + if (vis[j]) continue; + std::vector je; + entity_endpoints(m_entities[j], je); + if (je.empty()) continue; + bool adj = false; + for (const Vec2d& a : ce) + for (const Vec2d& b : je) + if ((a - b).squaredNorm() < eps2) { adj = true; break; } + if (adj) { vis[j] = true; stack.push_back(int(j)); } + } + } + return out; +} + +// Right-click has two jobs in a sketch, and they were resolved by giving one of them everything: +// the offer was excluded in sketch mode wholesale so a right-click could end a polyline chain, +// abandon an anchor or exit a tool. That made every sketch row in the atlas unreachable. +// The honest test is not "which mode are we in" but "did the tool actually USE this right-click", +// and only the tool knows. Wrapping on_mouse records that once, for every terminator, instead of +// threading a flag through the twenty-odd sites that consume a RightDown. +// Right-click abandons the anchor a draw tool has down. With NOTHING down there is nothing to +// abandon — and consuming the click anyway made the offer unreachable from every armed draw tool: +// on_mouse records the consumption in m_right_consumed and DesignCanvas's RIGHT_UP handler +// suppresses the menu whenever it is set, so right-click became a no-op that also hid the one door +// to half the vocabulary (47 of 86 verbs have no shortcut). Measured on the rig: with Line armed, +// two right-clicks in a row produced no menu and no tool change; only Escape freed it. +// Same rule as xmh6, which said it for the selection: clearing nothing is not a gesture +// terminator. ghcz. +bool DesignSketchTool::right_abandon() +{ + if (m_points.empty()) + return false; // hand it back, so the canvas opens the offer + m_points.clear(); + m_has_cursor = false; + return true; +} + +bool DesignSketchTool::on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas) +{ + const bool consumed = on_mouse_impl(evt, canvas); + if (evt.RightDown()) + m_right_consumed = consumed; + return consumed; +} + +bool DesignSketchTool::on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas) +{ + // Track the cursor in canvas client px so the in-canvas value editor can open right + // where the user clicked (Onshape places the field at the click, not via a camera + // projection — the design canvas's viewport isn't valid outside its own paint). + m_last_mouse_x = evt.GetX(); + m_last_mouse_y = evt.GetY(); + + // Line draw-then-edit: while the length editor is open right after the second click, + // freeze the canvas so a stray move/click can't push a third point or rubber-band a + // segment under the floating field. The editor's Enter/Esc resolves it + // (apply_segment_length / keep_segment_as_drawn, the latter clears this flag). + if (m_awaiting_length) { + // Polyline terminators must work even with a per-segment field open: right-click or + // double-click accepts the current segment as drawn (close the field) and falls through + // so the Polyline handler ends the chain. Without this the freeze ate every terminator. + if (m_mode == Mode::Polyline && (evt.RightDown() || evt.LeftDClick()) && on_inline_dismiss) + on_inline_dismiss(); // -> set_inline_busy(false), m_awaiting_length=false + // The freeze exists so a stray click can't draw under the floating field — it was + // never meant to trap the camera. Let drags and the wheel through, so a field that + // opens somewhere unexpected can't leave the viewport unusable. + else if (evt.Dragging() || evt.GetWheelRotation() != 0) + return false; + else + return true; + } + + // No live session, but committed sketches are shown as overlays on the plate: a left + // click on a loop (its edge OR its closed interior) selects that Sketch feature. This + // is the ONLY interaction in display-only mode; everything else (drag/move/wheel/right) + // falls through (return false) so the camera can still orbit the plate. + if (!m_active) { + // Double-click on a committed sketch stroke OPENS IT FOR EDITING; on empty space it + // still fits the view. A sketch line has to be editable from the line, not from a tree + // row — selecting it already lit the feature, but "now go and press Edit in the panel" + // is the side-panel dependency this tab exists to remove. Fit keeps the rest of the + // plate, so nothing is taken away. + if (evt.LeftDClick()) { + int f = -1, r = -1, e = -1, ff = -1, fr = -1; double dbest = 1e30; + const Linef3 dray = canvas.mouse_ray(Point(evt.GetX(), evt.GetY())); + const Linef3 dray8 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + for (const DisplaySketch& d : m_display_sketches) { + const Vec2d dp = d.plane.project(dray.a, dray.vector()); + const Vec2d dp8 = d.plane.project(dray8.a, dray8.vector()); + hit_display_sketch(d, dp, std::max(1e-3, (dp8 - dp).norm()), f, r, e, dbest, ff, fr); + } + const int target = (f >= 0) ? f : ff; + if (target >= 0 && on_display_sketch_activated) { + dp_pick_trace("double-click -> edit sketch feature %d (entity %d)", target, e); + on_display_sketch_activated(target); + return true; + } + canvas.zoom_to_volumes(); + return true; + } + // Visual Extrude gizmo (C5b): while the Extrude card is open the depth arrow is + // grabbable — drag changes the depth live; a click (no drag) on the arrow opens the + // inline depth editor. Intercept before the early no-LeftDown bailout so Dragging/ + // LeftUp reach us; a LeftDown that misses the arrow falls through to solid/loop pick. + // Move-body gizmo (M5): three world-axis arrows on the selected body. Drag an arrow to + // translate live; a stationary click on it opens the inline offset editor; a right click + // exits move mode. A LeftDown that misses the arrows falls through to solid re-pick. + if (m_mv_active) { + if (m_mv_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + if (m_mv_drag < 3) drag_move_arrow(canvas, evt, m_mv_drag); + else drag_move_arc(canvas, evt, m_mv_drag - 3); + return true; + } + if (evt.LeftUp() && m_mv_drag >= 0) { + const int d = m_mv_drag; m_mv_drag = -1; + const bool moved = std::abs(evt.GetX() - m_mv_press_x) + + std::abs(evt.GetY() - m_mv_press_y) > 3; + if (!moved && d < 3) open_move_editor(d); // stationary click on an arrow = edit offset + return true; + } + if (evt.RightDown()) { clear_move_gizmo(); canvas.set_as_dirty(); if (on_move_exit) on_move_exit(); return true; } + if (evt.LeftDown()) { + int axis = -1; + if (hit_test_move_arrow(canvas, evt, axis)) { // translate arrows win over rings + m_mv_drag = axis; m_mv_press_x = evt.GetX(); m_mv_press_y = evt.GetY(); + return true; + } + if (hit_test_move_arc(canvas, evt, axis)) { + m_mv_drag = 3 + axis; m_mv_press_x = evt.GetX(); m_mv_press_y = evt.GetY(); + m_mv_rot_start = m_mv_rot; + double a0; if (arc_mouse_angle(canvas, evt, axis, a0)) m_mv_arc_a0 = a0; + return true; + } + } + } + // Datum-plane resize gizmo (C3): while the Plane card is open the 4 edge handles are + // grabbable — drag changes the u/v extent live. A LeftDown that misses falls through. + if (m_dz_active) { + if (m_dz_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_datum_handle(canvas, evt, m_dz_drag); + return true; + } + if (evt.LeftUp() && m_dz_drag >= 0) { m_dz_drag = -1; return true; } + if (evt.LeftDown()) { + int which = -1; + if (hit_test_datum_handle(canvas, evt, which)) { + m_dz_drag = which; m_dz_press_x = evt.GetX(); m_dz_press_y = evt.GetY(); + return true; + } + } + } + // Helix gizmo: radius/height/pitch handles on the live curve, while the Helix card is open. + if (m_hx_active) { + if (m_hx_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_helix_handle(canvas, evt, m_hx_drag); + return true; + } + if (evt.LeftUp() && m_hx_drag >= 0) { m_hx_drag = -1; return true; } + if (evt.LeftDown()) { + int which = -1; + if (hit_test_helix_handle(canvas, evt, which)) { + m_hx_drag = which; m_hx_press_x = evt.GetX(); m_hx_press_y = evt.GetY(); + return true; + } + } + } + // Rib thickness gizmo: two in-plane handles on the slab footprint, while the Rib card is open. + if (m_rb_active) { + if (m_rb_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_rib_handle(canvas, evt, m_rb_drag); + return true; + } + if (evt.LeftUp() && m_rb_drag >= 0) { m_rb_drag = -1; return true; } + if (evt.LeftDown()) { + int which = -1; + if (hit_test_rib_handle(canvas, evt, which)) { + m_rb_drag = which; + return true; + } + } + } + // Datum base picker: HOVER highlight only here. The CLICK is handled at the very end of the + // selection fall-through (below), so picking existing geometry (committed sketch loops, + // solid faces/edges) always wins over a base-plane click — the planes never block selection. + if (m_dbp_active && evt.Moving() && !evt.LeftIsDown()) { + const int h = hit_test_base_pick(canvas, evt); + if (h != m_dbp_hover) { + m_dbp_hover = h; + canvas.set_as_dirty(); + if (h >= 0) return true; // caller render()s on true -> hover repaints on software GL + } + } + if (m_ex_active) { + if (m_ex_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_extrude_arrow(canvas, evt, m_ex_drag); + return true; + } + if (evt.LeftUp() && m_ex_drag >= 0) { + const int which = m_ex_drag; m_ex_drag = -1; + const bool moved = std::abs(evt.GetX() - m_ex_press_x) + + std::abs(evt.GetY() - m_ex_press_y) > 3; + if (!moved) open_extrude_editor(which); // treat a stationary click as edit + return true; + } + if (evt.LeftDown()) { + int which = -1; + if (hit_test_extrude_arrow(canvas, evt, which)) { + m_ex_drag = which; m_ex_press_x = evt.GetX(); m_ex_press_y = evt.GetY(); + return true; + } + } + } + // Revolve angle-arc gizmo: drag the arc tip to sweep the angle; a stationary click on the + // handle opens the inline editor. A LeftDown that misses falls through to normal picking. + if (m_rv_active) { + if (m_rv_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_revolve_arc(canvas, evt); + return true; + } + if (evt.LeftUp() && m_rv_drag) { + m_rv_drag = false; + const bool moved = std::abs(evt.GetX() - m_rv_press_x) + + std::abs(evt.GetY() - m_rv_press_y) > 3; + if (!moved) open_revolve_editor(); + return true; + } + if (evt.LeftDown() && hit_test_revolve_handle(canvas, evt)) { + m_rv_drag = true; m_rv_press_x = evt.GetX(); m_rv_press_y = evt.GetY(); + return true; + } + } + // Draft angle-arc gizmo: drag the arc tip to sweep the draft angle; a stationary click + // edits it. A LeftDown that misses falls through to normal picking. + if (m_dr_active) { + if (m_dr_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_draft_arc(canvas, evt); + return true; + } + if (evt.LeftUp() && m_dr_drag) { + m_dr_drag = false; + return true; + } + if (evt.LeftDown() && hit_test_draft_handle(canvas, evt)) { + m_dr_drag = true; m_dr_press_x = evt.GetX(); m_dr_press_y = evt.GetY(); + return true; + } + } + // Cut gizmo: drag the offset arrow along the cut-plane normal; no positive clamp (offset is signed). + if (m_ct_active) { + if (m_ct_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_cut_arrow(canvas, evt); + return true; + } + if (evt.LeftUp() && m_ct_drag) { + m_ct_drag = false; + return true; + } + if (evt.LeftDown() && hit_test_cut_arrow(canvas, evt)) { + start_cut_drag(canvas, evt); + return true; + } + } + // Pattern gizmo: drag the diamond/arc handle to set the spacing (linear) or angle (circular); + // a stationary click opens the inline editor. A LeftDown that misses falls through to picking. + if (m_pt_active) { + if (m_pt_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_pattern_handle(canvas, evt); + return true; + } + if (evt.LeftUp() && m_pt_drag) { + m_pt_drag = false; + const bool moved = std::abs(evt.GetX() - m_pt_press_x) + + std::abs(evt.GetY() - m_pt_press_y) > 3; + if (!moved) open_pattern_editor(); + return true; + } + if (evt.LeftDown() && hit_test_pattern_handle(canvas, evt)) { + m_pt_drag = true; m_pt_press_x = evt.GetX(); m_pt_press_y = evt.GetY(); + return true; + } + } + // Fillet/Chamfer radius gizmo: drag the edge-anchored arrow to set the radius live; a + // stationary click opens the inline editor. A LeftDown that misses falls through to pick. + if (m_fl_active) { + if (m_fl_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_fillet_arrow(canvas, evt); + return true; + } + if (evt.LeftUp() && m_fl_drag) { + m_fl_drag = false; + const bool moved = std::abs(evt.GetX() - m_fl_press_x) + + std::abs(evt.GetY() - m_fl_press_y) > 3; + if (!moved) open_fillet_editor(); // stationary click = edit + return true; + } + if (evt.LeftDown() && hit_test_fillet_arrow(canvas, evt)) { + start_fillet_drag(canvas, evt); + return true; + } + } + // Hole gizmo: drag the centre to reposition / the diameter or depth arrow to resize; a + // stationary click on an arrow opens its inline editor. A LeftDown that misses any handle + // falls through to solid/loop picking. + if (m_hl_active) { + if (m_hl_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_hole_handle(canvas, evt); + return true; + } + if (evt.LeftUp() && m_hl_drag >= 0) { + const int which = m_hl_drag; m_hl_drag = -1; + const bool moved = std::abs(evt.GetX() - m_hl_press_x) + + std::abs(evt.GetY() - m_hl_press_y) > 3; + if (!moved) open_hole_editor(which); // stationary click = edit + return true; + } + if (evt.LeftDown()) { + const int which = hit_test_hole_handle(canvas, evt); + if (which >= 0) { start_hole_drag(canvas, evt, which); return true; } + } + } + // Thread gizmo: same interaction as the hole gizmo (centre / radius / length handles). + if (m_th_active) { + if (m_th_drag >= 0 && evt.Dragging() && evt.LeftIsDown()) { + drag_thread_handle(canvas, evt); + return true; + } + if (evt.LeftUp() && m_th_drag >= 0) { + const int which = m_th_drag; m_th_drag = -1; + const bool moved = std::abs(evt.GetX() - m_th_press_x) + + std::abs(evt.GetY() - m_th_press_y) > 3; + if (!moved) open_thread_editor(which); + return true; + } + if (evt.LeftDown()) { + const int which = hit_test_thread_handle(canvas, evt); + if (which >= 0) { start_thread_drag(canvas, evt, which); return true; } + } + } + // Shell gizmo: drag the inward thickness arrow; stationary click opens the inline editor. + if (m_sh_active) { + if (m_sh_drag && evt.Dragging() && evt.LeftIsDown()) { + drag_shell_arrow(canvas, evt); + return true; + } + if (evt.LeftUp() && m_sh_drag) { + m_sh_drag = false; + const bool moved = std::abs(evt.GetX() - m_sh_press_x) + + std::abs(evt.GetY() - m_sh_press_y) > 3; + if (!moved) open_shell_editor(); + return true; + } + if (evt.LeftDown() && hit_test_shell_arrow(canvas, evt)) { + start_shell_drag(canvas, evt); + return true; + } + } + // Left-drag rubber band -> whole body. Past the click budget the press becomes a sweep: + // the rectangle is anchored at the ORIGINAL press point (not at the frame where the + // threshold was crossed, which would lose the first few pixels) and the events are + // consumed from here on. Left-drag no longer orbits in this canvas — DesignCanvas puts + // orbit on middle-drag and pan on right-drag, the CAD convention — so nothing downstream + // is being starved of a gesture it used to own. + // HOVER PRE-HIGHLIGHT (9xw part 3): say what a click would take, before it is + // taken. Plain motion only — no button down, no band running — because during a drag the + // pointer is doing something else and a promise about clicking would be a lie. Returns + // false so the event still reaches the camera; this only asks for a repaint, it does not + // consume the gesture, which is the difference between a hint and a handler. + if (evt.Moving() && !evt.LeftIsDown() && !m_rubber.is_dragging()) { + if (update_solid_hover(canvas, evt)) canvas.set_as_dirty(); + return false; + } + if (evt.Dragging() && evt.LeftIsDown() && m_pick_pending) { + if (!m_rubber.is_dragging()) { + if (std::max(std::abs(evt.GetX() - m_pick_press_x), + std::abs(evt.GetY() - m_pick_press_y)) <= 8) + return false; // still inside the click budget + m_rubber.start_dragging(Vec2d(m_pick_press_x, m_pick_press_y), + GLSelectionRectangle::Select); + } + m_rubber.dragging(Vec2d(evt.GetX(), evt.GetY())); + return true; + } + // Any event with the left button up ends a band — not just LeftUp. A release that lands + // outside the canvas never sends us one, and a band left running would then paint a + // rectangle that follows the cursor with no button held. + if (m_rubber.is_dragging() && !evt.LeftIsDown()) { + m_pick_pending = false; + if (evt.LeftUp()) pick_bodies_in_rectangle(); // a release elsewhere selects nothing + m_rubber.stop_dragging(); + return evt.LeftUp(); + } + // Click vs drag. Consuming the LeftDown here killed camera orbit/pan the moment a + // solid was on screen: Orca starts a rotate drag on the press, so swallowing it meant + // the canvas never began one. (A SpaceMouse kept working — it never goes through + // wxMouseEvent.) Remember the press, let it fall through so the canvas can orbit, and + // resolve the pick on release only if the pointer stayed put. + if (evt.LeftDown()) { + m_pick_press_x = evt.GetX(); + m_pick_press_y = evt.GetY(); + m_pick_pending = true; + dp_pick_trace("down x=%d y=%d", evt.GetX(), evt.GetY()); + return false; + } + if (!(evt.LeftUp() && m_pick_pending)) { + if (evt.LeftUp()) dp_pick_trace("up with no pending press (press was eaten upstream)"); + return false; + } + m_pick_pending = false; + dp_pick_trace("up x=%d y=%d drift=%d", evt.GetX(), evt.GetY(), + std::max(std::abs(evt.GetX() - m_pick_press_x), + std::abs(evt.GetY() - m_pick_press_y))); + // Threshold per axis, at GTK's own drag threshold. A hand-held mouse drifts several + // pixels during an ordinary click — a tight budget silently swallowed real clicks and + // looked exactly like "selection does not work". Synthetic clicks never drift, which + // is why the headless rig could not show this. + if (std::max(std::abs(evt.GetX() - m_pick_press_x), + std::abs(evt.GetY() - m_pick_press_y)) > 8) { + dp_pick_trace("rejected as drag"); + return false; // it was a drag: the canvas already orbited, don't also select + } + // Committed-sketch loop pick is computed FIRST. A click that lands on a loop's + // STROKE (edge) selects that loop even when it lies on a solid face — so a sketch + // drawn ON a face can be selected and extruded/cut (Onshape engraving workflow). + // Open-face area (no loop stroke under the cursor) falls through to the solid + // whole/face/edge cycle; an interior hit with no solid behind it is the last resort. + Point pos(evt.GetX(), evt.GetY()); + const Linef3 ray = canvas.mouse_ray(pos); + const Linef3 ray8 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + int edge_feat = -1, edge_reg = -1, edge_ent = -1; double edge_d = 1e30; // nearest stroke + int face_feat = -1, face_reg = -1; // interior (fallback) + dp_pick_trace("display sketches available: %zu", m_display_sketches.size()); + for (const DisplaySketch& d : m_display_sketches) { + const Vec2d p = d.plane.project(ray.a, ray.vector()); + const Vec2d p8 = d.plane.project(ray8.a, ray8.vector()); + const double tol = std::max(1e-3, (p8 - p).norm()); + hit_display_sketch(d, p, tol, edge_feat, edge_reg, edge_ent, edge_d, face_feat, face_reg); + } + // A precise hit on a loop outline wins over the solid face beneath it. + if (edge_feat >= 0) { + m_display_pick = edge_feat; m_display_pick_region = edge_reg; + if (on_display_sketch_selected) on_display_sketch_selected(edge_feat, edge_reg, edge_ent); + return true; + } + // No loop stroke under the cursor: the solid is the foreground (whole/face/edge cycle). + if (handle_solid_click(canvas, evt)) return true; + // Interior of a committed loop with no solid behind it. + if (face_feat >= 0) { + m_display_pick = face_feat; m_display_pick_region = face_reg; + if (on_display_sketch_selected) on_display_sketch_selected(face_feat, face_reg, -1); + return true; + } + m_display_pick = -1; m_display_pick_region = -1; // clicked bare plate -> drop highlight + // ...and the SOLID selection goes with it (od0). A click that hits nothing has to + // mean what a rubber band that sweeps nothing already means — pick_bodies_in_rectangle + // clears on an empty sweep, and the two gestures cannot disagree about the same outcome. + // Until now the face survived a click on bare plate, so "click away, then click the face + // again" arrived here as the SECOND click on the same face and escalated to the whole + // body, when the click away was the user letting go of it. + // + // The cost is real and is the intended trade: Thicken / Shell / Draft hold their input + // face in the panel's m_sel_solid_face, so a stray click on empty canvas with one of + // those cards open gives that face back. Their handlers already write the "(pick a solid + // face)" placeholder and rebuild the ghost at level 0, so the card SAYS it lost the pick + // rather than confirming against a face the viewport has stopped highlighting. + // + // Guarded on there being something to clear: this runs on every click that misses, and + // the callback re-renders the open card's preview. + if (m_solid_sel != SolidSel::None) { + clear_solid_selection(); + dp_pick_trace("clicked empty space -> selection cleared"); + if (on_solid_selection_changed) + on_solid_selection_changed(int(m_solid_sel), m_sel_body, m_sel_face, m_sel_edge); + } + // Last resort: a click that hit no geometry but landed on a reference/base plane picks it. + if (m_dbp_active) { + const int h = hit_test_base_pick(canvas, evt); + if (h >= 0 && h < int(m_dbp_base.size())) { + if (on_datum_base_picked) on_datum_base_picked(m_dbp_base[h]); + return true; + } + } + return false; // let the stock canvas orbit / deselect + } + + // In-canvas edit-op tools (Fillet/Chamfer/Offset/Mirror): pick entities, then a + // draggable arrow + editable value label (Mirror: a two-phase pick) drives a live + // ghost. A click on empty space confirms; right-click/Esc cancels the gesture. + // Standalone Trim / Extend scissors: click a segment to cut it back to (Trim) or out to + // (Extend) its nearest intersection with the other live entities. One cut per click; the + // tool stays active for more cuts; right-click exits. Drag falls through so the camera can + // still orbit. Operates directly on the live sketch — no Constrain mode. + if (m_mode == Mode::Trim || m_mode == Mode::Extend) { + if (evt.Moving()) { screen_to_plane(canvas, evt, m_cursor); m_has_cursor = true; return true; } + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + const double tol = std::max(1e-3, (m_plane.project(r2.a, r2.vector()) - p).norm()); + if (apply_live_trim(p, tol * 3.0, m_mode == Mode::Extend)) { + resolve_live(); + } else if (on_readout) { + // nde #15: don't fail silently. The pick found nothing to cut/extend — either + // the click missed every live segment, or the picked segment has no crossing / + // target among the OTHER live entities (committed sketches aren't trimmed). + on_readout(m_mode == Mode::Extend + ? std::string("Extend: click a line/arc that can reach another live entity") + : std::string("Trim: click a segment where it crosses another live entity")); + } + return true; + } + if (evt.RightDown()) { request_exit(); return true; } + return false; // let move/drag orbit the camera + } + + if (is_edit_op_mode()) { + if (evt.Moving()) { + screen_to_plane(canvas, evt, m_cursor); + m_has_cursor = true; + return true; + } + if (m_op_dragging_arrow && evt.Dragging() && evt.LeftIsDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + drag_op_arrow(p); + return true; + } + if (evt.LeftUp()) { + if (m_op_dragging_arrow) { m_op_dragging_arrow = false; return true; } + return false; + } + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + const double tol = std::max(1e-3, (m_plane.project(r2.a, r2.vector()) - p).norm()); + // 1) live gizmo: click the value label to type, or grab the arrow to drag. + if (op_ready() && m_mode != Mode::Mirror) { + const Linef3 rl = canvas.mouse_ray(Point(evt.GetX() + 24, evt.GetY())); + const double ltol = std::max(tol, (m_plane.project(rl.a, rl.vector()) - p).norm()); + if ((m_op_label - p).norm() <= ltol) { open_op_editor(); return true; } + if (hit_test_op_arrow(p, tol)) { m_op_dragging_arrow = true; return true; } + } + // 2) entity pick (close enough to an entity edge). + double best = 1e30; int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + if (bi >= 0 && best <= tol * 3.0) { op_pick(bi); return true; } + // 3) empty click confirms a ready gesture. + if (op_ready()) confirm_op(); + return true; + } + if (evt.RightDown()) { + if (m_op_a >= 0 || !m_mirror_targets.empty()) { + reset_op(); + m_selection.clear(); + if (on_selection_changed) on_selection_changed(0); + } else { + request_exit(); + } + return true; + } + return false; + } + + // In-canvas transform tools (Move/Rotate/Scale/Array/PolarArray): pick subject + // entities, then a single draggable handle + editable value label(s) drive a live + // ghost. A click on empty space confirms; right-click drops the gesture / exits. + if (is_transform_mode()) { + if (evt.Moving()) { + screen_to_plane(canvas, evt, m_cursor); + m_has_cursor = true; + return true; + } + if (m_tf_dragging && evt.Dragging() && evt.LeftIsDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + drag_tf_handle(p); + return true; + } + if (evt.LeftUp()) { + if (m_tf_dragging) { m_tf_dragging = false; return true; } + return false; + } + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + const double tol = std::max(1e-3, (m_plane.project(r2.a, r2.vector()) - p).norm()); + // 1) live gizmo: click a value label to type, or grab the handle to drag. + if (tf_ready()) { + const Linef3 rl = canvas.mouse_ray(Point(evt.GetX() + 24, evt.GetY())); + const double ltol = std::max(tol, (m_plane.project(rl.a, rl.vector()) - p).norm()); + if ((m_tf_label_a - p).norm() <= ltol) { open_tf_editor_a(); return true; } + if ((m_tf_label_b - p).norm() <= ltol) { open_tf_editor_count(); return true; } + if (hit_test_tf_handle(p, tol)) { m_tf_dragging = true; return true; } + } + // 2) entity pick (close enough to an entity edge). + double best = 1e30; int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + if (bi >= 0 && best <= tol * 3.0) { tf_pick(bi); return true; } + // 3) empty click confirms a ready gesture. + if (tf_ready()) confirm_transform(); + return true; + } + if (evt.RightDown()) { + if (!m_tf_targets.empty()) { + reset_tf(); + m_selection.clear(); + if (on_selection_changed) on_selection_changed(0); + } else { + request_exit(); + } + return true; + } + return false; + } + + // Imported-art bbox transform: drag a corner to scale, the centre to move. Right-click + // ends the session. Values stream live to the host via on_imported_transform. + if (m_mode == Mode::TransformArt) { + if (evt.Moving()) { + screen_to_plane(canvas, evt, m_cursor); + m_has_cursor = true; + return true; + } + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 10, evt.GetY())); + const double tol = std::max(1e-3, (m_plane.project(r2.a, r2.vector()) - p).norm()); + const int h = hit_test_xform_handle(p, tol); + if (h >= 0) { + m_xform_handle = h; + if (h == 4) m_xform_anchor = p; // centre move: track the delta + else { Vec2d c[4]; xform_world_corners(c); m_xform_anchor = c[(h + 2) % 4]; } + } + return true; // swallow (no camera orbit while placing) + } + if (m_xform_handle >= 0 && evt.Dragging() && evt.LeftIsDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + drag_xform_handle(p); + return true; + } + if (evt.LeftUp()) { m_xform_handle = -1; return true; } + if (evt.RightDown()) { if (on_exit) on_exit(); else cancel(); return true; } + return false; + } + + // Constrain mode: pick a segment on click; let move/drag fall through so the + // camera can still orbit while inspecting the sketch. + if (m_mode == Mode::Constrain) { + if (m_constrain_entities) { + // Pick any entity (line/circle/arc/point): rolling two-slot selection. + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + double best = 1e30; + int bi = -1; + for (size_t i = 0; i < m_entities.size(); ++i) { + const double d = entity_pick_dist(p, m_entities[i]); + if (d < best) { best = d; bi = int(i); } + } + if (bi >= 0) { + // Rolling three-slot selection: slots 0/1 feed all 2-entity + // constraints; slot 2 is the Symmetric axis (only filled once + // 0 and 1 are set). A click past slot 2 restarts the cycle. + if (m_pick0 < 0) { m_pick0 = bi; m_pick0_pt = p; } + else if (m_pick1 < 0 && bi != m_pick0) m_pick1 = bi; + else if (m_pick1 >= 0 && m_pick2 < 0 && bi != m_pick0 && bi != m_pick1) m_pick2 = bi; + else { m_pick0 = bi; m_pick1 = m_pick2 = -1; m_pick0_pt = p; } + } + return true; + } + if (evt.RightDown()) { cancel(); return true; } + return false; + } + if (evt.LeftDown()) { + if (m_points.size() < 2) + return false; + Vec2d p; + screen_to_plane(canvas, evt, p); + const size_t n = m_points.size(); + double best = 1e30; + int bi = -1; + for (size_t i = 0; i < n; ++i) { + const double d = point_segment_dist(p, m_points[i], m_points[(i + 1) % n]); + if (d < best) { best = d; bi = int(i); } + } + if (bi >= 0) { + m_sel_a = bi; + m_sel_b = int((bi + 1) % n); + } + return true; + } + if (evt.RightDown()) { + cancel(); + return true; + } + return false; + } + + // Selection mode: click to pick an entity, Shift/Ctrl to extend, double-click + // to grab the whole connected loop. Drag falls through so the camera can orbit. + if (m_mode == Mode::Select) { + if (update_hover(canvas, evt)) return true; // repaint when the hovered handle changes + const bool extend = evt.ShiftDown() || evt.ControlDown(); + + // A constraint badge is a click target: clicking it DELETES that constraint. Existing or + // not is the whole of a constraint's state, so this click is the toggle. Checked before + // entity picking because badges sit clear of the geometry (offset along +Y), so a hit + // here is unambiguous; plain click only, so Shift/Ctrl multi-select is never eaten. + if (evt.LeftDown() && !extend) { + Vec2d gp; + if (screen_to_plane(canvas, evt, gp) && remove_constraint_near(gp)) { + if (on_selection_changed) + on_selection_changed(int(m_selection.size() + m_point_sel.size())); + return true; + } + } + + // Live point drag: once an endpoint/centre was grabbed on LeftDown, dragging + // moves it (re-solving constraints live) until the button is released. When + // nothing is grabbed, drag falls through so the camera can still orbit. + if (m_dragging_point && evt.Dragging() && evt.LeftIsDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + if (m_drag_poly_fi >= 0) + drag_polygon_vertex(m_drag_poly_fi, m_drag_ei, m_drag_role, p); // keep regular + else if (m_drag_rect_fi >= 0) + drag_rect_corner(m_drag_rect_fi, p); // resize axis-aligned box + else if (m_drag_slot_fi >= 0) + drag_slot_handle(m_drag_slot_fi, p); // move a slot end + else if (m_drag_ei >= 0 && m_drag_ei < int(m_entities.size()) && + m_entities[m_drag_ei].type == SketchEntity::Type::Arc) + drag_arc_handle(m_drag_ei, m_drag_role, p); // center/radius/angle grips + else if (m_drag_ei >= 0 && m_drag_ei < int(m_entities.size()) && + m_entities[m_drag_ei].type == SketchEntity::Type::EllipseArc) + drag_ellipsearc_handle(m_drag_ei, m_drag_role, p); // center/sweep endpoints + else { + set_point(m_drag_ei, m_drag_role, p); + resolve_live_drag(m_drag_ei, m_drag_role); + } + return true; + } + // Derived-handle drag (A4): the circle RadiusHandle (and later slot/rect/etc.) + // isn't an entity point, so it rides set_handle, which applies the role-specific + // geometry edit + re-solve. + if (m_dragging_handle && evt.Dragging() && evt.LeftIsDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + set_handle(m_drag_handle, p); + return true; + } + if (evt.LeftUp()) { + if (m_dragging_point) { + Vec2d p; + screen_to_plane(canvas, evt, p); + if (m_drag_poly_fi >= 0) + drag_polygon_vertex(m_drag_poly_fi, m_drag_ei, m_drag_role, p); + else if (m_drag_rect_fi >= 0) + drag_rect_corner(m_drag_rect_fi, p); + else if (m_drag_slot_fi >= 0) + drag_slot_handle(m_drag_slot_fi, p); + else if (m_drag_ei >= 0 && m_drag_ei < int(m_entities.size()) && + m_entities[m_drag_ei].type == SketchEntity::Type::Arc) + drag_arc_handle(m_drag_ei, m_drag_role, p); + else if (m_drag_ei >= 0 && m_drag_ei < int(m_entities.size()) && + m_entities[m_drag_ei].type == SketchEntity::Type::EllipseArc) + drag_ellipsearc_handle(m_drag_ei, m_drag_role, p); + else { + set_point(m_drag_ei, m_drag_role, p); + resolve_live_drag(m_drag_ei, m_drag_role); + } + m_dragging_point = false; + m_drag_ei = -1; + m_drag_poly_fi = -1; + m_drag_rect_fi = -1; + m_drag_slot_fi = -1; + return true; + } + if (m_dragging_handle) { + Vec2d p; + screen_to_plane(canvas, evt, p); + set_handle(m_drag_handle, p); + m_dragging_handle = false; + return true; + } + return false; + } + + if (evt.LeftDown() || evt.LeftDClick()) { + m_dragging_point = false; // a fresh press disarms any stale grab + m_dragging_handle = false; + m_drag_poly_fi = -1; + m_drag_rect_fi = -1; + m_drag_slot_fi = -1; + Vec2d p; + screen_to_plane(canvas, evt, p); + if (evt.LeftDClick()) { // double-click a quote label -> edit it + const Linef3 rd = canvas.mouse_ray(Point(evt.GetX() + 28, evt.GetY())); + const double dtol = std::max(2.0, (m_plane.project(rd.a, rd.vector()) - p).norm()); + const int di = hit_test_dimension(p, dtol); + if (di >= 0) { edit_dimension(di); return true; } + } + // Zoom-aware tolerance: project a point 8 px away and measure in plane units. + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + const Vec2d p2 = m_plane.project(r2.a, r2.vector()); + const double tol = std::max(1e-3, (p2 - p).norm()); + + // Single-click a dimension quote label -> edit its value in place. A placed + // driving quote reopens its editor; a live (non-driving) characteristic quote + // is first promoted to a driving dimension (place_dimension), then its editor + // opens — so typing a value sets the precise dimension. Generous label + // tolerance (~24 px) since text labels are wider than a point grip. + if (evt.LeftDown()) { + const Linef3 rdl = canvas.mouse_ray(Point(evt.GetX() + 24, evt.GetY())); + const double ltol = std::max(tol, (m_plane.project(rdl.a, rdl.vector()) - p).norm()); + const int di = hit_test_dimension(p, ltol); + if (di >= 0) { open_value_editor(di); return true; } + for (const DimAnnot& q : m_live_quotes) { + if ((q.label_pos - p).norm() <= ltol) { + if (q.kind == DimType::Angle) + open_angle_editor(q.ea); // geometric rotate to a typed angle + else + place_dimension(q); // promote -> driving dim + open editor + return true; + } + } + if (m_live_poly_fi >= 0) { + if ((m_live_poly_side_label - p).norm() <= ltol) { + open_polygon_side_editor(m_live_poly_fi); // geometric uniform scale + return true; + } + if ((m_live_poly_angle_label - p).norm() <= ltol) { + open_polygon_angle_editor(m_live_poly_fi); // geometric rotate + return true; + } + } + if (m_live_arc_ei >= 0 && (m_live_arc_angle_label - p).norm() <= ltol) { + open_arc_angle_editor(m_live_arc_ei); // geometric sweep change + return true; + } + if (m_live_ellipse_ei >= 0) { + if ((m_live_ellipse_major_label - p).norm() <= ltol) { + open_ellipse_axis_editor(m_live_ellipse_ei, true); // semi-major + return true; + } + if ((m_live_ellipse_minor_label - p).norm() <= ltol) { + open_ellipse_axis_editor(m_live_ellipse_ei, false); // semi-minor + return true; + } + } + if (m_live_rrect_fi >= 0) { + if ((m_live_rrect_w_label - p).norm() <= ltol) { open_rounded_rect_editor(m_live_rrect_fi, 0); return true; } + if ((m_live_rrect_h_label - p).norm() <= ltol) { open_rounded_rect_editor(m_live_rrect_fi, 1); return true; } + if ((m_live_rrect_r_label - p).norm() <= ltol) { open_rounded_rect_editor(m_live_rrect_fi, 2); return true; } + } + if (m_live_aslot_fi >= 0) { + if ((m_live_aslot_r_label - p).norm() <= ltol) { open_arc_slot_editor(m_live_aslot_fi, true); return true; } + if ((m_live_aslot_w_label - p).norm() <= ltol) { open_arc_slot_editor(m_live_aslot_fi, false); return true; } + } + if (m_live_slot_fi >= 0) { + if ((m_live_slot_len_label - p).norm() <= ltol) { open_slot_editor(m_live_slot_fi, 0); return true; } + if ((m_live_slot_w_label - p).norm() <= ltol) { open_slot_editor(m_live_slot_fi, 1); return true; } + if ((m_live_slot_angle_label - p).norm() <= ltol) { open_slot_editor(m_live_slot_fi, 2); return true; } + } + } + + // A derived handle (the circle RadiusHandle — not an entity point, so + // hit_test_point can't grab it) arms a handle drag that resizes on motion. + // Checked before the point/entity hit-tests so the radius grip wins near + // the circle edge. + if (evt.LeftDown()) { + Handle hh; + if (hit_test_handle(p, tol, hh) && + (hh.role == HandleRole::RadiusHandle || hh.role == HandleRole::MajorAxis || + hh.role == HandleRole::MinorAxis || hh.role == HandleRole::BSplineCtrl)) { + m_dragging_handle = true; + m_drag_handle = hh; + m_selection.clear(); + m_point_sel.clear(); + m_selection.push_back(hh.ei); // highlight the circle being resized + if (on_selection_changed) + on_selection_changed(int(m_selection.size())); + return true; + } + } + + // A nearby endpoint/centre selects that POINT (a line = a segment + 2 + // points); a click on the bare segment selects the whole entity. + if (evt.LeftDown()) { + int pe; SketchPointRole pr; + if (hit_test_point(p, tol, pe, pr)) { + const auto key = std::make_pair(pe, pr); + auto it = std::find(m_point_sel.begin(), m_point_sel.end(), key); + if (extend) { + if (it == m_point_sel.end()) m_point_sel.push_back(key); + else m_point_sel.erase(it); + } else { + m_selection.clear(); + m_point_sel.clear(); + m_point_sel.push_back(key); + } + // Arm the drag so the grabbed point follows the cursor. + m_dragging_point = true; + m_drag_ei = pe; + m_drag_role = pr; + // If the grabbed point is a polygon vertex, the drag must keep the + // polygon REGULAR — it adjusts the circumradius + orientation (the + // vertex follows the cursor) instead of moving one point freely. + const int pf = feature_of(pe); + m_drag_poly_fi = (pf >= 0 && m_features[pf].kind == FeatureKind::Polygon) ? pf : -1; + m_drag_rect_fi = -1; m_drag_slot_fi = -1; + if (pf >= 0 && m_drag_poly_fi < 0) { + const Feature& ft = m_features[pf]; + if (ft.kind == FeatureKind::CornerRect || ft.kind == FeatureKind::CenterRect) { + // Only axis-aligned boxes resize by corner (oblique rects fall + // back to free point move). Capture the fixed opposite corner. + const SketchEntity& e0 = m_entities[ft.begin]; + const Vec2d d0 = e0.p1 - e0.p0; + const bool aa = std::abs(d0.x()) < 1e-6 || std::abs(d0.y()) < 1e-6; + Vec2d gp; + if (aa && point_at(pe, pr, gp)) { + Vec2d opp; + opp.x() = (std::abs(gp.x() - ft.c0.x()) < std::abs(gp.x() - ft.c1.x())) ? ft.c1.x() : ft.c0.x(); + opp.y() = (std::abs(gp.y() - ft.c0.y()) < std::abs(gp.y() - ft.c1.y())) ? ft.c1.y() : ft.c0.y(); + m_drag_rect_fi = pf; m_drag_rect_anchor = opp; + } + } else if (ft.kind == FeatureKind::Slot && + pr == SketchPointRole::Center && + (pe == ft.begin + 1 || pe == ft.begin + 3)) { + m_drag_slot_fi = pf; // cap@c1 = begin+1, cap@c0 = begin+3 + m_drag_slot_c1 = (pe == ft.begin + 1); + } + } + if (on_selection_changed) + on_selection_changed(int(m_selection.size() + m_point_sel.size())); + return true; + } + } + + const int hit = hit_test(p, tol); + + if (evt.LeftDClick() && hit >= 0) { + if (!extend) m_selection.clear(); + for (int idx : connected_loop(hit)) + if (std::find(m_selection.begin(), m_selection.end(), idx) == m_selection.end()) + m_selection.push_back(idx); + } else if (hit >= 0) { + auto it = std::find(m_selection.begin(), m_selection.end(), hit); + if (extend) { + if (it == m_selection.end()) m_selection.push_back(hit); + else m_selection.erase(it); // toggle off + } else { + m_selection.clear(); + m_point_sel.clear(); + m_selection.push_back(hit); + } + } else if (!extend) { + // Inside a closed loop (not on an edge/point) → select it as a face + // and hand off to the panel, which commits the sketch and extrudes. + if (evt.LeftDown() && on_face_selected) { + const int reg = region_at(p); + if (reg >= 0) { + m_selection.clear(); + m_point_sel.clear(); + on_face_selected(reg); + return true; + } + } + m_selection.clear(); // clicked empty space + m_point_sel.clear(); + } + if (on_selection_changed) + on_selection_changed(int(m_selection.size() + m_point_sel.size())); + return true; + } + if (evt.RightDown()) { + // Hand the click back (return false) so the offer opens: the m_right_consumed flag + // this return value feeds means "the tool USED this right-click", and a plain + // right-click in Select mode is not a gesture terminator. + // + // But do NOT drop the selection on the way out. The offer menu describes WHAT IS + // SELECTED, so clearing first guaranteed it could only ever describe nothing: select + // a line, right-click, and the sketch verbs — Trim, Extend, Fillet, Chamfer, Offset, + // Mirror, the arrays, Constrain — were all greyed, because by the time the menu was + // built the line was no longer selected. Reported from the machine as "selected a + // line, right-click exit from selection: only create and reference are usable". + // Deselecting still has a gesture: left-click on empty space, a few lines above. + return false; + } + return false; // let drag orbit the camera + } + + // Dimension mode: click entities directly. 2 points -> Distance, a line -> Length, + // a circle -> Diameter, an arc -> Radius, a point then a line -> DistanceToLine. + // Each resolved pick places a driving quote and pops the value card. + if (m_mode == Mode::Dimension) { + if (update_hover(canvas, evt)) return true; // repaint when the hovered handle changes + if (evt.LeftDClick()) { // double-click a quote label -> edit it + Vec2d p; + screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 28, evt.GetY())); + const Vec2d p2 = m_plane.project(r2.a, r2.vector()); + const double di_tol = std::max(2.0, (p2 - p).norm()); + const int di = hit_test_dimension(p, di_tol); + if (di >= 0) edit_dimension(di); + m_dim_has0 = false; + return true; + } + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + const Linef3 r2 = canvas.mouse_ray(Point(evt.GetX() + 8, evt.GetY())); + const Vec2d p2 = m_plane.project(r2.a, r2.vector()); + const double tol = std::max(1e-3, (p2 - p).norm()); + int pe; SketchPointRole pr; + const bool got_pt = hit_test_point(p, tol, pe, pr); + const int he = hit_test(p, tol); + if (!m_dim_has0) { + if (got_pt) { // first point picked: await a second + m_dim_e0 = pe; m_dim_r0 = pr; m_dim_has0 = true; + } else if (he >= 0) { // whole-entity dimension + DimAnnot a; a.ea = he; + const SketchEntity::Type t = m_entities[he].type; + if (t == SketchEntity::Type::Line) { a.kind = DimType::Length; place_dimension(a); } + else if (t == SketchEntity::Type::Circle) { a.kind = DimType::Diameter; place_dimension(a); } + else if (t == SketchEntity::Type::Arc) { a.kind = DimType::Radius; place_dimension(a); } + } + } else { + if (got_pt && !(pe == m_dim_e0 && pr == m_dim_r0)) { + DimAnnot a; a.kind = DimType::Distance; + a.ea = m_dim_e0; a.ra = m_dim_r0; a.eb = pe; a.rb = pr; + place_dimension(a); + } else if (he >= 0 && m_entities[he].type == SketchEntity::Type::Line) { + DimAnnot a; a.kind = DimType::DistanceToLine; + a.ea = m_dim_e0; a.ra = m_dim_r0; a.eb = he; + place_dimension(a); + } + m_dim_has0 = false; // reset after the second pick + } + return true; + } + if (evt.RightDown()) { m_dim_has0 = false; return true; } + return false; // let drag orbit the camera + } + + if (evt.Moving()) { + m_snap_off = evt.ShiftDown(); + screen_to_plane(canvas, evt, m_cursor); + m_has_cursor = true; + m_cursor_locked = false; + bool vsnap = false; + m_cursor = snap_vertex(canvas, evt, m_cursor, vsnap); // preview-snap to endpoints + // The chain's own start is not an entity yet, so snap_vertex cannot see it. Offer it + // here: the cursor lands exactly on it, so the rubber band below IS the closing segment. + if (snap_chain_start(canvas, evt, m_cursor)) vsnap = true; + const bool line_like = (m_mode == Mode::Polyline || m_mode == Mode::Line); + if (line_like && !m_points.empty() && !vsnap) + m_cursor = snap_dir(m_points.back(), m_cursor, m_cursor_locked); + if (on_cursor_metrics && line_like && !m_points.empty() && !m_awaiting_length) { + const Vec2d d = m_cursor - m_points.back(); + on_cursor_metrics(d.norm(), std::atan2(d.y(), d.x()) * 180.0 / M_PI, m_cursor_locked); + } + return true; + } + + switch (m_mode) { + + case Mode::Polyline: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + m_snap_off = evt.ShiftDown(); + bool vsnap = false; + p = snap_vertex(canvas, evt, p, vsnap); // snap onto an existing endpoint + if (snap_chain_start(canvas, evt, p)) { // clicked the previewed close target + const int base = int(m_entities.size()); + push_closed_lines(m_points); // close the loop + infer_auto_constraints(base); // loop self-closes via auto Coincident + H/V + m_points.clear(); + return true; + } + if (!m_points.empty() && !vsnap) { + bool lk = false; + p = snap_dir(m_points.back(), p, lk); // lock new segment to inference angle + } + m_points.push_back(p); + arm_polyline_segment_edit(); // refine this segment's Length+Angle, then continue + return true; + } + if (evt.LeftDClick()) { + if (m_points.size() >= 2) { + const int base = int(m_entities.size()); + push_open_chain(m_points); // end as an open chain + infer_auto_constraints(base); + m_points.clear(); + } + return true; + } + if (evt.RightDown() && m_points.empty()) + return false; // no chain to end — ghcz, let the offer open + if (evt.RightDown()) { + // END the chain — do NOT close it. This used to call push_closed_lines() for three + // or more points, i.e. it drew a final segment from the last point back to the + // first that the user never asked for, and did it silently. No mainstream sketcher + // does that: FreeCAD, Fusion and Onshape all end an open chain on right-click and + // require the close to be EXPLICIT. Ours has that gesture — click the chain's first + // point, which snap_chain_start() previews and snaps onto in the LeftDown branch + // above, so the closing segment is on screen BEFORE it is committed. A closed loop + // is this tab's goal and it stays a four-action triangle either way; what changes + // is that the closing edge is now something the user saw and chose, not one the + // app appended on their behalf. + const int base = int(m_entities.size()); + if (m_points.size() >= 2) + push_open_chain(m_points); + infer_auto_constraints(base); + m_points.clear(); + return true; + } + break; + } + + case Mode::Line: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + m_snap_off = evt.ShiftDown(); + bool vsnap = false; + p = snap_vertex(canvas, evt, p, vsnap); // snap onto an existing endpoint + if (m_points.empty()) { // first click = anchor + m_points.push_back(p); + return true; + } + bool lk = false; + if (!vsnap) p = snap_dir(m_points.back(), p, lk); // vertex snap wins over angle + m_points.push_back(p); // second click completes the segment + // Draw-then-edit: just commit the segment. The generic detect/service path + // (is_creation_autoedit_mode now includes Line) auto-selects it and opens its + // Length THEN Angle fields in sequence, each over its label — same UX as every + // other 2D tool. Enter advances (Length drives a Distance constraint, Angle rotates + // about P0); Esc keeps it as drawn. + keep_segment_as_drawn(); + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::CornerRect: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + if (m_points.empty()) { + m_points.push_back(p); + } else { + const Vec2d A = m_points[0]; + const Vec2d B = p; + const int base = int(m_entities.size()); + begin_feature(FeatureKind::CornerRect); + push_closed_lines({ A, Vec2d(B.x(), A.y()), B, Vec2d(A.x(), B.y()) }); + infer_auto_constraints(base); // corners Coincident + sides H/V + end_feature(A, B); // group: Width/Height live quotes + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::CenterRect: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + if (m_points.empty()) { + m_points.push_back(p); + } else { + const Vec2d C = m_points[0]; + const double hx = std::abs(p.x() - C.x()); + const double hy = std::abs(p.y() - C.y()); + const int base = int(m_entities.size()); + begin_feature(FeatureKind::CenterRect); + push_closed_lines({ + Vec2d(C.x() - hx, C.y() - hy), Vec2d(C.x() + hx, C.y() - hy), + Vec2d(C.x() + hx, C.y() + hy), Vec2d(C.x() - hx, C.y() + hy) }); + infer_auto_constraints(base); + end_feature(Vec2d(C.x() - hx, C.y() - hy), Vec2d(C.x() + hx, C.y() + hy)); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::ObliqueRect: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.size() < 2) // corners snap; 3rd click is the width + p = snap_vertex(canvas, evt, p, vsnap); + m_points.push_back(p); + if (m_points.size() == 3) { + const Vec2d A = m_points[0], B = m_points[1]; + Vec2d u = B - A; + if (u.squaredNorm() > 1e-12) { + u.normalize(); + const Vec2d n(-u.y(), u.x()); + const double w = n.dot(m_points[2] - A); // signed perpendicular width + const int base = int(m_entities.size()); + begin_feature(FeatureKind::CornerRect); + push_closed_lines({ A, B, B + n * w, A + n * w }); + infer_auto_constraints(base); // corners Coincident + the AB pair parallel + end_feature(A, B + n * w); // group: Width/Height live quotes + } + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::RoundedRect: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.size() < 2) // the two corners snap; 3rd sets radius + p = snap_vertex(canvas, evt, p, vsnap); + m_points.push_back(p); + if (m_points.size() == 3) { + const int base = int(m_entities.size()); + begin_feature(FeatureKind::RoundedRect); + append_entities(make_rounded_rect(m_points[0], m_points[1], m_points[2])); + infer_auto_constraints(base); + // Group with the actual clamped fillet radius so the W/H/R live quotes + // and rebuild edits can recover the box. (Skip grouping if degenerate.) + const Vec2d a = m_points[0], b = m_points[1]; + const double xmin=std::min(a.x(),b.x()), xmax=std::max(a.x(),b.x()); + const double ymin=std::min(a.y(),b.y()), ymax=std::max(a.y(),b.y()); + const double bw=xmax-xmin, bh=ymax-ymin; + const Vec2d cs[4]={{xmin,ymin},{xmax,ymin},{xmax,ymax},{xmin,ymax}}; + double r=1e18; for(const Vec2d&c:cs) r=std::min(r,(m_points[2]-c).norm()); + r=std::min(r, std::min(bw,bh)*0.5); + end_feature(Vec2d(xmin,ymin), Vec2d(xmax,ymax), r); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::CenterCircle: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + if (m_points.empty()) { + m_points.push_back(p); + } else { + const Vec2d C = m_points[0]; + push_circle(C, (p - C).norm()); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::TwoPointCircle: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + p = snap_vertex(canvas, evt, p, vsnap); // diameter ends snap onto geometry + m_points.push_back(p); + if (m_points.size() == 2) { + const Vec2d C = (m_points[0] + m_points[1]) * 0.5; + push_circle(C, (m_points[1] - m_points[0]).norm() * 0.5); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::ThreePointCircle: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + m_points.push_back(p); + if (m_points.size() == 3) { + append_entities(make_three_point_circle(m_points[0], m_points[1], m_points[2])); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::ThreePointArc: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.size() < 2) // snap the start/end onto endpoints + p = snap_vertex(canvas, evt, p, vsnap); // (the 3rd click is the through-point) + m_points.push_back(p); + if (m_points.size() == 3) { + // clicks: start, end, point-on-arc + const int base = int(m_entities.size()); + append_entities(make_three_point_arc(m_points[0], m_points[1], m_points[2])); + infer_auto_constraints(base); // arc ends Coincident onto snapped vertices + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::TangentArc: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + p = snap_vertex(canvas, evt, p, vsnap); // snap both ends onto endpoints + m_points.push_back(p); + if (m_points.size() == 2) { + const int base = int(m_entities.size()); + append_entities(make_tangent_arc(m_points[0], m_points[1])); + infer_auto_constraints(base); // tangent-arc ends Coincident onto vertices + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::CenterArc: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + // The start (2nd click) snaps onto endpoints; center & end-dir are free. + if (m_points.size() == 1) + p = snap_vertex(canvas, evt, p, vsnap); + m_points.push_back(p); + if (m_points.size() == 3) { + const int base = int(m_entities.size()); + append_entities(make_center_arc(m_points[0], m_points[1], m_points[2])); + infer_auto_constraints(base); // arc start Coincident onto a snapped vertex + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::Slot: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + if (m_points.size() < 2) { + m_points.push_back(p); + } else { + // third click sets the half-width (distance to the centerline) + Vec2d u = m_points[1] - m_points[0]; + if (u.squaredNorm() > 1e-12) { + u.normalize(); + const Vec2d n(-u.y(), u.x()); + const double w = std::abs(n.dot(p - m_points[0])); + const int base = int(m_entities.size()); + begin_feature(FeatureKind::Slot); + append_entities(make_slot(m_points[0], m_points[1], w)); + infer_auto_constraints(base); + end_feature(m_points[0], m_points[1], w); // centres + half-width + } + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::ArcSlot: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.size() == 1) // start snaps; center & end-dir are free + p = snap_vertex(canvas, evt, p, vsnap); + m_points.push_back(p); + if (m_points.size() == 4) { + // clicks: center, start, end-dir, width + const double Rc = (m_points[1] - m_points[0]).norm(); + const double w = std::abs((m_points[3] - m_points[0]).norm() - Rc); + const int base = int(m_entities.size()); + begin_feature(FeatureKind::ArcSlot); + append_entities(make_arc_slot(m_points[0], m_points[1], m_points[2], w)); + infer_auto_constraints(base); + // c0 = centre, c1 = centreline start point; param = half-width. The end + // direction is recovered from the cap@E arc centre when rebuilding. + end_feature(m_points[0], m_points[1], w); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::Polygon: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + if (m_points.empty()) { + m_points.push_back(p); + } else { + const int base = int(m_entities.size()); + begin_feature(FeatureKind::Polygon); + append_entities(make_polygon(m_points[0], p, m_polygon_sides)); + infer_auto_constraints(base); + end_feature(m_points[0], p, (p - m_points[0]).norm(), m_polygon_sides); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::Ellipse: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.empty()) p = snap_vertex(canvas, evt, p, vsnap); // center can snap + m_points.push_back(p); + if (m_points.size() == 3) { // center, major-end, minor + const int base = int(m_entities.size()); + append_entities(make_ellipse(m_points[0], m_points[1], m_points[2])); + infer_auto_constraints(base); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::EllipseArc: { + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + bool vsnap = false; + if (m_points.empty()) p = snap_vertex(canvas, evt, p, vsnap); // center can snap + m_points.push_back(p); + if (m_points.size() == 5) { // center, major, minor, start, end + const int base = int(m_entities.size()); + append_entities(make_ellipse_arc(m_points[0], m_points[1], m_points[2], + m_points[3], m_points[4])); + infer_auto_constraints(base); + m_points.clear(); + } + return true; + } + if (evt.RightDown()) return right_abandon(); + break; + } + + case Mode::BSpline: { + // Variable-length: left-click adds a control pole (each can snap onto existing + // geometry); double-click or right-click finishes as an open spline. + if (evt.LeftDown()) { + Vec2d p; screen_to_plane(canvas, evt, p); + m_snap_off = evt.ShiftDown(); + bool vsnap = false; + p = snap_vertex(canvas, evt, p, vsnap); // poles can land on endpoints + m_points.push_back(p); + return true; + } + if (evt.RightDown() && m_points.empty()) + return false; // no poles down — ghcz, let the offer open + if (evt.LeftDClick() || evt.RightDown()) { + if (m_points.size() >= 2) { + const int base = int(m_entities.size()); + append_entities(make_bspline(m_points)); + infer_auto_constraints(base); // end poles auto-Coincident -> loops close + } + m_points.clear(); + return true; + } + break; + } + + case Mode::Point: { + if (evt.LeftDown()) { + Vec2d p; + screen_to_plane(canvas, evt, p); + push_point(p); + return true; + } + if (evt.RightDown()) return false; // no anchor to abandon: the offer belongs here + break; + } + + case Mode::Constrain: + break; + } + + if (evt.Dragging()) + return false; + + return false; +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/DesignSketchTool.hpp b/src/slic3r/GUI/CAD/DesignSketchTool.hpp new file mode 100644 index 0000000000..c88b149c59 --- /dev/null +++ b/src/slic3r/GUI/CAD/DesignSketchTool.hpp @@ -0,0 +1,1466 @@ +#ifndef slic3r_DesignSketchTool_hpp_ +#define slic3r_DesignSketchTool_hpp_ + +#include "libslic3r/Point.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "libslic3r/CAD/CadDocument.hpp" // CadBody for per-body solid picking +#include "libslic3r/CAD/SketchInference.hpp" +#include "libslic3r/CAD/SketchSolver.hpp" +#include "slic3r/GUI/GLModel.hpp" +#include "slic3r/GUI/GLSelectionRectangle.hpp" // left-drag rubber band over the committed bodies +#include +#include +#include +#include + +class wxMouseEvent; +class wxPoint; + +namespace Slic3r { + +class TriangleMesh; // fwd (libslic3r) — solid-pick mesh, non-owning pointer + +namespace GUI { + +class GLCanvas3D; +class Camera; // fwd — move_gizmo_arm() sizes the gizmo from the current zoom + +// Onshape-style sketch session. `begin` enters a session on a plane; the active +// drawing tool (Mode) can be switched mid-session via `set_tool` while entities +// accumulate. `finish` commits the whole entity list as one sketch feature; +// `cancel` aborts. Constrain is a separate legacy mode that operates on a +// committed profile's points (entity constraints land in a later chunk). + + +// ONE colour means SELECTED — a face, an edge, a vertex, a whole body, a 2D sketch region. +// Nothing else on screen may wear it. Before this there were four near-identical cyans plus a +// constant still named sel_gold that had long since become cyan, and the UNSELECTED region fill +// was blue (0.30,0.60,1.0) — one shade from the selected one — so an ordinary region read as +// picked. Selection is a state, not a decoration: it gets its own colour and keeps it. +inline ColorRGBA design_selection_color(float alpha = 1.0f) +{ + return ColorRGBA(0.20f, 0.85f, 1.00f, alpha); +} +// Unselected geometry — 2D regions and faces — is neutral translucent grey, so the only +// coloured thing in the viewport is the thing you picked. +inline ColorRGBA design_idle_face_color() +{ + return ColorRGBA(0.72f, 0.76f, 0.80f, 0.14f); +} +class DesignSketchTool { +public: + enum class Mode { Select, Dimension, Polyline, Line, CornerRect, CenterRect, ObliqueRect, + RoundedRect, CenterCircle, TwoPointCircle, Point, + ThreePointCircle, ThreePointArc, TangentArc, CenterArc, Slot, ArcSlot, Polygon, + Ellipse, EllipseArc, BSpline, + // In-canvas edit-op TOOLBAR tools (drag-arrow + label, no numeric card): + Fillet, Chamfer, Offset, Mirror, + // Standalone scissors: click a segment to trim/extend it (immediate, no card): + Trim, Extend, + // In-canvas transform TOOLBAR tools (pick targets + drag handle/label, no card): + Move, Rotate, Scale, Array, PolarArray, + // In-canvas bounding-box transform for imported Text/SVG art: + TransformArt, + Constrain }; + // Which tool is armed, and how many anchors it has down. Read-only, for the offer ladder: + // "the menu armed the verb I chose" is otherwise unassertable, and a menu walk that lands one + // row off arms a NEIGHBOURING tool and then grades whatever that drew. ekt9. + Mode mode() const { return m_mode; } + int pending_points() const { return int(m_points.size()); } + void emit_step_hint(); // fires on_step_changed when the step actually moved + // Is an in-canvas value field open? While one is, the canvas is frozen and every letter is + // swallowed — the single most common reason a driven gesture "does nothing". + bool value_field_open() const { return m_awaiting_length; } + bool is_edit_op_mode() const { return m_mode == Mode::Fillet || m_mode == Mode::Chamfer || + m_mode == Mode::Offset || m_mode == Mode::Mirror; } + bool is_transform_mode() const { return m_mode == Mode::Move || m_mode == Mode::Rotate || + m_mode == Mode::Scale || m_mode == Mode::Array || + m_mode == Mode::PolarArray; } + // Creation tools that get draw-then-edit: on commit the new entity/feature is selected + // and its primary value editor opens. Line is handled inline (its own length field); + // Polyline/BSpline/Point have no single primary value, so they opt out. + bool is_creation_autoedit_mode() const { + switch (m_mode) { + case Mode::Line: + case Mode::CornerRect: case Mode::CenterRect: case Mode::ObliqueRect: + case Mode::RoundedRect: case Mode::CenterCircle: case Mode::TwoPointCircle: + case Mode::ThreePointCircle: case Mode::ThreePointArc: case Mode::TangentArc: + case Mode::CenterArc: case Mode::Slot: case Mode::ArcSlot: case Mode::Polygon: + case Mode::Ellipse: case Mode::EllipseArc: + return true; + default: return false; + } + } + // The host (DesignCanvas) flags the canvas frozen while an inline value editor is open, + // so a stray click/move can't draw under the floating field. Reuses m_awaiting_length + // (Line's existing freeze flag) as the single "inline editor open" gate. + void set_inline_busy(bool b) { m_awaiting_length = b; } + bool inline_busy() const { return m_awaiting_length; } // true while a value field is open + // Does the live session hold anything a cancel would throw away? Escape must not silently + // destroy drawn geometry; the panel asks this before treating Escape as "discard sketch". + bool live_sketch_has_work() const { return !m_entities.empty(); } + + // Clicking the same sub-element again escalates to the whole body. That is right for free + // picking and WRONG while a card has armed a face/edge pick: the card says "click a FACE", + // the user clicks the face it is already showing, and the escalation turns it into a + // whole-body pick that the armed capture then rejects. The host turns this off for as long + // as a pick is armed. + void set_escalate_on_repick(bool on) { m_escalate_repick = on; } + bool constrain_value_anchor(wxPoint& out) const; // screen anchor over the picked constrain geometry + + void begin(const SketchPlane& plane, Mode mode = Mode::Polyline); + // Re-open a committed entity sketch for full in-canvas editing: load its entities + + // driving constraints, re-detect the polygon/rect/slot grouping, and live-solve. The + // caller re-commits via finish() (the panel replaces the feature, see m_edit_index). + void begin_edit(const std::vector& entities, + const std::vector& constraints, + const SketchPlane& plane); + // Drop rigid 2D art (Text / SVG outlines) INTO the live sketch as ordinary line entities, + // so it joins the sketch being drawn instead of committing a separate Sketch feature. + // `regions` are loops in PLANE coordinates; every closed loop becomes a closed polyline, so + // the result is editable, constrainable and extrudable like anything else drawn by hand — + // unlike imported_regions, which are rigid and carry no solver entities. + // Returns false when no session is live, so the caller can fall back to a new feature. + bool add_imported_regions(const std::vector>>& regions); + void set_tool(Mode mode); // switch tool, keep accumulated entities + void set_plane(const SketchPlane& plane) { m_plane = plane; } // re-plane a live sketch (a reference plane was clicked mid-session); entities are 2D, re-lifted through the new plane + void set_construction(bool c) { m_construction = c; } + void set_polygon_sides(int n) { m_polygon_sides = (n < 3 ? 3 : n); } + void set_polygon_circumscribed(bool c) { m_polygon_circumscribed = c; } + void finish(); // emit accumulated entities, end session + void cancel(); + bool is_active() const { return m_active; } + bool has_entities() const { return !m_entities.empty(); } + bool on_mouse(wxMouseEvent& evt, GLCanvas3D& canvas); + // Right-click on a draw tool: true when an in-progress anchor was abandoned, false when + // there was nothing to abandon — and false is what lets the offer menu open. ghcz. + bool right_abandon(); + // True if the LAST right-press was consumed as a gesture terminator (end a polyline chain, + // abandon an anchor, exit a tool). Read-and-clear: the canvas asks on the matching release to + // decide whether that right-click was the user's, in which case it opens the offer. + bool take_right_consumed() { const bool b = m_right_consumed; m_right_consumed = false; return b; } + void render(GLCanvas3D& canvas); + // The in-canvas value field, drawn by render() before any early return. Owned by + // DesignCanvas; null until it sets it. Not a window — see SketchInlineEditor.hpp. + class SketchInlineEditor* inline_editor{nullptr}; + + // Persistent committed sketches to draw even when no session is active (e.g. an + // un-consumed sketch left visible after its extrude is removed). Each carries its + // own plane. render() draws these as translucent faces + outlines. + struct DisplaySketch { std::vector entities; SketchPlane plane; int feature{-1}; }; + void set_display_sketches(std::vector ds) { m_display_sketches = std::move(ds); } + void set_highlight_sketches(std::vector> hl) { m_hl_sketches = std::move(hl); } + // Solid pick is resolved on LeftUp (see on_mouse): consuming the press broke orbit/pan. + int m_pick_press_x = 0; + int m_pick_press_y = 0; + bool m_pick_pending = false; + + bool has_display() const { return m_active || !m_display_sketches.empty() + || (m_solid_bodies != nullptr && !m_solid_bodies->empty()) + || !m_datum_planes.empty() + || m_show_planes || m_show_axes + || m_ex_active || m_mv_active || m_fl_active + || m_hl_active || m_th_active || m_sh_active + || m_dr_active || m_ct_active || m_dz_active || m_dbp_active || m_hx_active || m_rb_active; } + + // View helpers: the 3 world origin planes (XY/XZ/YZ) and the world axis triad, each + // shown/hidden by a toggle (keys P / A). Off by default so the idle scene stays clean. + void set_show_planes(bool s) { m_show_planes = s; } + void set_show_axes(bool s) { m_show_axes = s; } + bool toggle_show_planes() { m_show_planes = !m_show_planes; return m_show_planes; } + bool toggle_show_axes() { m_show_axes = !m_show_axes; return m_show_axes; } + + // Solid topology selection on the committed bodies: clicking a solid cycles + // whole-solid -> face -> edge (Onshape-style) to target fillet/chamfer/extrude. With + // multiple bodies the pick resolves WHICH body was hit (per-triangle body id). + // Appended, never reordered: DesignPanel maps this to a level int (Whole=1, Face=2, + // Edge=3, Vertex=4) and the offer table keys off it. + enum class SolidSel { None, Whole, Face, Edge, Vertex }; + // Point the tool at the current bodies + their concatenated tessellation (non-owning; + // pass nullptr to clear). Call after each recompute — selection resets (ids invalidate). + // tri_face = per-triangle face id within its body; tri_body = per-triangle body index. + void set_solid_pick(const std::vector* bodies, const TriangleMesh* mesh, + const std::vector* tri_face, const std::vector* tri_body, + const std::vector* visible = nullptr, + const std::vector* xform = nullptr); + // Body-focus picking: >=0 restricts every pick to that one body, so a face behind + // another solid is reachable without hiding anything. -1 = no restriction. + // Survives set_solid_pick() — it is owned by the panel, not by the mesh feed. + void set_pick_only_body(int b) { m_pick_only_body = b; } + void clear_solid_selection(); + bool has_solid_selection() const { return m_solid_sel != SolidSel::None; } + // Select a whole body by index (from the Parts list) — Whole-level highlight, no face/edge. + // body < 0 or out of range clears the selection. + void select_body(int body); + + // Move-body gizmo (M5): translate a whole body with three world-axis drag arrows + // (X red / Y green / Z blue) anchored at the body centroid. Display-only — the host + // keeps a per-body Transform3d and re-feeds the moved display/pick meshes; the OCCT + // shape (and thus face/edge global ids) is never touched. Drag fires on_body_move_changed + // live; a stationary click on an arrow opens the inline offset editor for that axis. + void set_move_gizmo(int body, const Vec3d& pivot, const Transform3d& base_xform, + double body_radius = 0.0); + void clear_move_gizmo(); + bool moving_body() const { return m_mv_active; } + int move_body_index() const { return m_mv_body; } + // F key forwarded from the canvas (Prepare's Place on Face): returns true if it acted. + bool request_place_on_face() { return on_place_on_face ? on_place_on_face() : false; } + std::function on_place_on_face; + std::function on_body_move_changed; + // Fired on each cycle change: (level 0=None/1=Whole/2=Face/3=Edge, body index, face id, edge id). + std::function on_solid_selection_changed; + // Click a committed sketch overlay (no live session) -> select that loop: the Sketch + // feature index + the clicked closed-region index within it (-1 = no specific loop). + // entity = the sketch entity index under the cursor when the click landed on a loop + // STROKE, else -1 for an interior/region hit. Carried because a tool can legitimately + // want the LINE you pointed at, not just the loop it belongs to (Rib, 3648). + std::function on_display_sketch_selected; + // Double-click on a committed sketch stroke: open THAT feature for editing. Selecting a line + // and then hunting for an Edit button in a panel is the dependency this tab exists to remove. + std::function on_display_sketch_activated; + // Entities forming the currently click-selected loop (for a per-loop extrude); empty + // if no loop is selected. + std::vector selected_loop_entities() const; + // Per closed loop, the indices into `ents` that form it (for hiding already-extruded + // loops from the committed-sketch overlay). + std::vector> region_entity_indices(const std::vector& ents) const; + // Same, but each region's entry is its OWN entities followed by the entities of each of its + // holes, in that order — the exact list a per-loop extrude of a region WITH holes stores + // (see selected_loop_entities()). Needed to match a consumed loop against its source sketch. + std::vector> region_entity_indices_with_holes(const std::vector& ents) const; + void clear_display_pick() { m_display_pick = -1; m_display_pick_region = -1; } + // Adopt a loop pick the tool did not make itself. The live-sketch path resolves the region + // BEFORE the sketch is committed, so once finish_sketch() has turned it into a display + // sketch there is nothing left that would set this — and selected_loop_entities(), which is + // what Extrude consumes, reads exactly these two fields. + void set_display_pick(int feature, int region) { m_display_pick = feature; m_display_pick_region = region; } + + // Visual Extrude gizmo (C5b). The Extrude tool is a DesignPanel docked card, so the + // sketch tool is NOT active during it; the panel feeds the profile plane + a 2D centroid + // (arrow anchor) + the live depths/flags, and the tool renders an in-canvas world-space + // depth arrow along plane.normal with a draggable handle + editable label. TwoSided draws + // a second arrow along -normal driven by depth2. Drag/edit fire on_extrude_depth_changed + // back to the panel, which writes the spin value + refreshes the ghost preview. + void set_extrude_gizmo(const SketchPlane& plane, const Vec2d& centroid, + double depth, double depth2, bool two_sided, bool flip); + void clear_extrude_gizmo(); + // (new_depth, second_side): second_side=false drives the primary depth, true the 2nd side. + std::function on_extrude_depth_changed; + + // Datum-plane resize gizmo (C3). The Plane tool is a DesignPanel docked card (sketch tool + // NOT active), so the panel resolves the candidate plane's frame + current u/v extent and + // feeds them here; the tool draws the rectangle outline + 4 edge-midpoint handles. Dragging a + // handle changes the u (left/right) or v (top/bottom) extent live and fires on_datum_size_changed + // back to the panel, which writes the Size spins + re-pushes the rendered datum. + void set_datum_gizmo(const SketchPlane& plane, double usize, double vsize, + const Vec3d& base_origin, const Vec3d& base_normal, + double offset, bool offset_on); + void clear_datum_gizmo(); + std::function on_datum_size_changed; + std::function on_datum_offset_changed; + + // Visual Helix gizmo. The Helix tool is a DesignPanel docked card (sketch tool NOT active), + // so the panel resolves the axis plane and feeds the live parameters here; the tool draws + // the helix curve itself plus three handles — radius on the base circle, height at the top + // of the axis, pitch at the end of the first turn. Taper and handedness stay on the card: + // one is a shape modifier and the other is a flag, and L2 governs numbers you can point at. + void set_helix_gizmo(const SketchPlane& plane, double radius, double pitch, double height, + double taper, bool left_handed); + void clear_helix_gizmo(); + std::function on_helix_changed; + + // Visual Rib thickness gizmo. The rib is a thin slab grown either side of an open sketch + // line, so its thickness is an IN-PLANE offset perpendicular to that line — the depth arrow + // (which points along the plane normal) cannot express it. Two handles, one per side, + // dragged symmetrically: the slab is centred on the line, so a drag on either side sets the + // full thickness rather than one half. + void set_rib_gizmo(const SketchPlane& plane, const Vec2d& p0, const Vec2d& p1, double thickness); + void clear_rib_gizmo(); + std::function on_rib_thickness_changed; + + // Graphical base/origin pick: while the Plane card is open, the candidate base planes + // (XY/XZ/YZ origin planes + existing datums) draw as translucent clickable ghosts. A click + // on one fires on_datum_base_picked(base) with that plane's base index (0/1/2 or 3+N). + void set_base_pick(std::vector planes, std::vector bases, + std::vector labels = {}); + void clear_base_pick(); + std::function on_datum_base_picked; + + // Visual Fillet/Chamfer gizmo. The Dressup tool is a DesignPanel docked card, so the sketch + // tool is NOT active during it; when a solid EDGE is picked the panel passes the body centroid + // + current radius and the tool anchors a world-space radius arrow at the picked edge midpoint + // (from m_sel_edge_pts), perpendicular to the edge, pointing outward (away from the centroid). + // Dragging the arrow changes the radius live; a stationary click opens the inline editor; both + // fire on_fillet_radius_changed back to the panel, which writes the spin + refreshes the ghost. + // Returns true if it could anchor (needs a picked edge with >=2 sample points). + bool set_fillet_gizmo(const Vec3d& body_centroid, double radius); + void clear_fillet_gizmo(); + bool filleting() const { return m_fl_active; } + std::function on_fillet_radius_changed; + + // Visual Hole gizmo. Like Dressup, the Hole tool is a DesignPanel docked card, so the sketch + // tool is NOT active during it; the panel passes the hole plane + position + diameter + depth + + // through flag, and the tool draws an on-plane footprint circle plus a radial diameter arrow, + // a normal-axis depth arrow (only when !through), and a draggable centre marker. Dragging the + // centre repositions (plane u/v), the diameter arrow resizes, the depth arrow deepens — all + // live; a stationary click on an arrow opens its inline editor. Every change fires + // on_hole_changed back to the panel, which writes the spins + refreshes the ghost. + void set_hole_gizmo(const SketchPlane& plane, double x, double y, + double diameter, double depth, bool through); + // Provide the face (u,v) bounds so the hole's construction dims read from the face sides. + void set_hole_face_bounds(bool has, double umin, double umax, double vmin, double vmax); + void clear_hole_gizmo(); + bool holing() const { return m_hl_active; } + std::function on_hole_changed; + + // Visual Thread gizmo. Same docked-card story as Hole: the panel feeds the thread plane + + // axis position + nominal radius + length; the tool draws an on-plane footprint circle plus a + // radial radius arrow and a normal-axis length arrow (always shown — a thread has no "through") + // and a draggable centre. Pitch/depth/internal stay in the card. Drag is live; a stationary + // click on an arrow opens its inline editor; every change fires on_thread_changed. + void set_thread_gizmo(const SketchPlane& plane, double x, double y, + double radius, double height); + void clear_thread_gizmo(); + bool threading() const { return m_th_active; } + std::function on_thread_changed; + + // Visual Shell gizmo. The panel passes the picked open-face centroid + an inward direction + // (-outward normal) + the current wall thickness; the tool anchors a single thickness arrow + // there (mirrors the fillet radius arrow). Dragging sets the thickness live; a stationary + // click opens the inline editor; both fire on_shell_thickness_changed. + void set_shell_gizmo(const Vec3d& face_centroid, const Vec3d& inward_dir, double thickness); + void clear_shell_gizmo(); + bool shelling() const { return m_sh_active; } + std::function on_shell_thickness_changed; + + // Datum/reference planes (Plane feature) carry no solid; the panel feeds their resolved + // SketchPlanes so they render as translucent rectangles in feature mode (otherwise a + // Plane feature is invisible in the canvas). + void set_datum_planes(std::vector planes, std::vector sizes = {}) { + m_datum_planes = std::move(planes); m_datum_sizes = std::move(sizes); + } + + // Mate connectors. Until now a connector was visible only to a program — resolve_datum_coordsys + // had exactly one consumer, the MCP socket — so the frame a mate is built on could not be seen + // at all. The glyph has to answer two questions on sight (wgsc): which way does Z point + // (the VERSE), and which of the pair is anchored versus driven (the POLARITY). Nothing in any + // surveyed CAD system encodes the second one. + struct MateConnectorGlyph { + Vec3d origin{0, 0, 0}; + Vec3d x{1, 0, 0}; // roll reference; the filled quadrant spans x -> y + Vec3d y{0, 1, 0}; + int role{0}; // 0 = neutral, 1 = fixed (receives), 2 = driven (moves) + bool roll_undefined{false}; + }; + void set_mate_connectors(std::vector g) { m_mate_connectors = std::move(g); } + // The pair line: the two origins of every mate — committed ones, plus the live pick of an open + // Mate card. Two connectors a mate binds are ONE object with a gap still in it; drawn as two + // separate frames they read as unrelated. + void set_mate_links(std::vector> l) { m_mate_links = std::move(l); } + void clear_mate_connectors() { m_mate_connectors.clear(); m_mate_links.clear(); } + + // Visual Revolve gizmo. The panel feeds the sketch plane + profile centroid + axis (0=plane X, + // 1=plane Y) + angle + flip while its Revolve card is open; an angle-arc is drawn in the + // revolve plane at the profile radius. Dragging the tip sweeps the angle, a stationary click + // edits it; both fire on_revolve_angle_changed. + void set_revolve_gizmo(const SketchPlane& plane, const Vec2d& centroid, + int axis_sel, double angle, bool flip); + void clear_revolve_gizmo(); + bool revolving() const { return m_rv_active; } + std::function on_revolve_angle_changed; + + // Visual Draft angle-arc gizmo (taper a picked face; axis = world +Z, arc in XY). + void set_draft_gizmo(const Vec3d& face_centroid, const Vec3d& face_normal, double angle); + void clear_draft_gizmo(); + bool drafting() const { return m_dr_active; } + void set_on_draft_angle_changed(std::function cb) { m_on_draft_angle_changed = std::move(cb); } + + // Visual Cut gizmo (plane normal arrow + plane rectangle preview). + void set_cut_gizmo(const SketchPlane& plane, double offset, const Vec3d& body_center, double half_extent); + void clear_cut_gizmo(); + bool cutting() const { return m_ct_active; } + void set_on_cut_offset_changed(std::function cb) { m_on_cut_offset_changed = std::move(cb); } + + // Visual Pattern gizmo. Linear: a 3D arrow along the world axis (plane X/Y per `dir`) of length + // spacing*(count-1) with a tick at each copy; dragging the end sets the spacing. Circular: a + // revolve-style angle-arc about the plane normal through the plane origin sweeping `angle`. + // Both fire on_pattern_changed (spacing for linear, angle for circular). + void set_pattern_gizmo(const SketchPlane& plane, const Vec3d& body_centroid, bool circular, + int count, int dir, double spacing, double angle); + void clear_pattern_gizmo(); + bool patterning() const { return m_pt_active; } + std::function on_pattern_changed; + + // Constrain mode: load an already-committed profile for entity picking + + // constraint application (the geometry is solved in the kernel, not here). + void begin_constrain(const SketchProfile& prof, const SketchPlane& plane); + bool is_constraining() const { return m_active && m_mode == Mode::Constrain; } + // Replace the displayed profile (e.g. after the kernel re-solved it). + void set_profile_points(const std::vector& pts) { m_points = pts; } + // The currently picked segment's endpoint indices into the profile. + bool selected_segment(int& a, int& b) const; + + // Entity-aware Constrain (Fase 4.2): load a committed entity sketch and pick + // Line entities (constraints are solved against entity endpoints in the kernel). + void begin_constrain_entities(const std::vector& ents, const SketchPlane& plane); + bool is_constraining_entities() const { return m_active && m_mode == Mode::Constrain && m_constrain_entities; } + + // In-canvas bounding-box transform of imported Text/SVG art (replaces the Move/Scale + // dialog). `base_regions` are the untransformed region contours; the gizmo shows the + // current bbox with 4 corner scale-handles + a centre move-handle. Dragging fires + // on_imported_transform live with the new offset/scale, which the host writes back to + // the feature. Exiting (Esc/right-click) ends the session. + void begin_imported_transform(int feat, + const std::vector>>& base_regions, + const SketchPlane& plane, const Vec2d& offset, + double scale_x, double scale_y); + std::function on_imported_transform; + // Up to two picked line-entity indices; returns true if at least one is picked. + bool selected_constrain_entities(int& e0, int& e1) const { e0 = m_pick0; e1 = m_pick1; return m_pick0 >= 0; } + // Third pick slot (Symmetric axis): only filled after slots 0 and 1 are set. + int pick2() const { return m_pick2; } + // Plane-coords of the click that filled slot 0 (for pick-point edit ops: trim/extend). + bool pick0_point(Vec2d& out) const { out = m_pick0_pt; return m_pick0 >= 0; } + // Refresh the displayed entities after the kernel re-solved them. + void set_constrain_entities(const std::vector& ents) { m_entities = ents; } + // Constraint manager (C3.4): entity indices the panel asks to highlight (the + // entities a selected constraint references); rendered yellow in Constrain mode. + void set_constraint_highlight(std::vector v) { m_constraint_hl = std::move(v); } + // The committed feature's constraints, supplied so Constrain-mode render can draw + // an iconic glyph badge per constraint near its primary entity (C3.4b). + void set_constraint_glyphs(std::vector v) { m_constrain_cons = std::move(v); } + + // Line tool: after a single segment is placed, the panel pops a length dialog + // (length, angle_deg are the as-drawn values); it then resolves via + // apply_segment_length() (exact length) or keep_segment_as_drawn() (cancel). + std::function on_segment_drawn; + void apply_segment_length(double len); // rescale the pending segment, then commit it + void keep_segment_as_drawn(); // commit the pending segment unchanged + + // Live readout while drawing a Line/Polyline segment (anchor->cursor metrics). + std::function on_cursor_metrics; + + // Live step guidance (1c0c). The armed tool reports WHICH STEP of its gesture the + // user is on, every time that changes, so the status line can name the next click instead of + // repeating the one-shot sentence written when the tool was armed. step = anchors/picks + // already down (Mirror: 0 = no axis, 1 = axis down, 2 = ready to apply); picks = size of the + // set the gesture accumulates (mirror targets, transform targets, Select's selection). + std::function on_step_changed; + // Fired when the live constraint SET changes (one added or removed), never on a re-solve. + // The panel rebuilds its constraint rows from this; binding it to on_solve_state instead + // would rebuild the whole list on every frame of a drag. + std::function on_constraints_changed; + + // DoF feedback (P3): solver state after each live solve. dof>0 = under-constrained, + // dof==0 = fully constrained, ok==false = conflicting/inconsistent constraints. + // has_constraints is false while the sketch carries no driving constraints yet. + std::function on_solve_state; + + // Selection (Mode::Select): pick points/lines/arcs/circles of the in-session + // sketch; Shift/Ctrl extends, double-click grabs the whole connected loop. + const std::vector& selection() const { return m_selection; } + // Entities OR bare points: clear_selection() drops both, so "is anything picked" must ask + // about both, or Esc at idle would report nothing to do while a point sat highlighted. + bool sketch_has_selection() const { return !m_selection.empty() || !m_point_sel.empty(); } + // Type of the first selected entity. False when nothing is selected, so the offer menu can + // tell a line from an arc from a point and stop collapsing every sketch selection to "none". + bool first_selected_type(SketchEntity::Type& out) const { + if (m_selection.empty()) return false; + const int i = m_selection.front(); + if (i < 0 || i >= int(m_entities.size())) return false; + out = m_entities[i].type; + return true; + } + // Right-click pick: select the entity (or point handle) under the given canvas pixel, so + // the context menu describes what was pointed at. No-op when it is already selected, or + // when nothing is there. Returns true if the selection changed. + bool select_at_screen(GLCanvas3D& canvas, int sx, int sy); + // Open the in-canvas value field on the SELECTION's defining number (a line's length, an + // arc's radius, a circle's diameter, the angle between two lines, a point-to-point or + // point-to-line distance). False when the selection has no such number. + bool open_selection_dimension_editor(); + // ---- Scripted surface (MCP) ------------------------------------------------------- + // The same operations the right-click offers, reachable without a mouse gesture, so the 2D + // layer can be driven and asserted headlessly. Everything here goes through the SAME code a + // gesture goes through — append + infer_auto_constraints + live solve — because a test that + // exercises a private shortcut proves nothing about the tool the user drives. + const std::vector& entities() const { return m_entities; } + const SketchPlane& plane() const { return m_plane; } + int dof() const { return m_dof; } + bool solve_ok() const { return m_solve_ok; } + // Append entities exactly as a finished gesture does. Returns the index of the first one. + int add_entities_scripted(const std::vector& ents); + // Replace the selection with these entity indices (out-of-range ones are ignored). + bool select_indices(const std::vector& idx); + // Append candidates, live-solve, and roll back the batch if it turns the system + // inconsistent. Returns true when the batch was kept. Public so the panel's live-constraint + // path can commit a plan through the SAME append→solve→keep-or-rollback the gestures use. + bool try_add_constraints(const std::vector& cands); + // Click-to-delete on a constraint badge: drop the constraint whose glyph sits under `p` + // and re-solve. Returns true if one was removed (the caller then repaints). + bool remove_constraint_near(const Vec2d& p); + // Drop constraint `idx` from the live session and re-solve. Same operation the badge click + // performs, addressed by index instead of by position — the panel list needs the index form. + bool remove_constraint(int idx); + + // The loop report: what is CLOSED, what its internal voids are, and where a chain is still + // open. This is the answer to "is my profile buildable", and it is the one question the + // sketch layer could never be asked from outside. + struct LoopInfo { + std::vector ents; // entities of this loop, in chain order + std::vector holes; // indices into LoopReport::loops that this loop encloses + bool closed{false}; + double area{0.0}; // signed shoelace area of the loop polyline + }; + struct LoopReport { + std::vector loops; + std::vector open_ends; // free endpoints: where a chain fails to close + }; + LoopReport loop_report() const; + + // FreeCAD's ValidateSketch, as one call: weld endpoints that are within `tol` of each other + // and RECORD the Coincident constraints, so a loop that was closed by floating-point luck + // becomes closed by construction and survives every later solve. Returns how many pairs were + // welded. Construction geometry is skipped when `ignore_construction`. + int heal_coincidences(double tol, bool ignore_construction); + + void clear_selection(); + // Flip the selection between construction and real geometry (whole Feature groups). + // Returns how many entities changed; 0 when nothing is selected. + int toggle_selection_construction(); + void delete_selected(); // erase selected entities + // Abort any pending/queued draw-then-edit value-field sequence. Removing an entity that + // still has a deferred auto-edit would otherwise open a field on a now-deleted entity and + // freeze the flow (its live quote label also lingers). Mirrors set_tool's resync. + void reset_autoedit() { + m_awaiting_length = false; + m_autoedit_pending = false; + m_autoedit_dims.clear(); + m_autoedit_dim_idx = -1; + m_autoedit_seen = int(m_entities.size()); + m_live_quotes.clear(); // rebuilt from current geometry on the next render + } + // Take down the session's floating chrome: the open value field (dismiss = keep-as-drawn), + // the queue of fields behind it, and the corner readout. All three are top-level windows fed + // only while the tool is live, so nothing else would ever clear them — reset_autoedit() alone + // clears the flag and leaves the frame on screen. Called by finish()/cancel(); safe when + // nothing is open. + void close_session_chrome() { + if (on_inline_dismiss) on_inline_dismiss(); // no-op when no field is open + reset_autoedit(); + if (on_readout) on_readout(std::string()); // the HUD is not redrawn once the tool stops + } + // Ctrl+Z while sketching: drop the last drawn entity (reuses delete_selected's remap). + bool undo_last_entity() { + if (!m_active || m_entities.empty()) return false; + m_selection.assign(1, int(m_entities.size()) - 1); + delete_selected(); + reset_autoedit(); + return true; + } + // Delete while sketching: the selected entities, or the last drawn one if none is selected. + bool delete_selected_or_last() { + if (!m_active) return false; + if (m_selection.empty()) { + if (m_entities.empty()) return false; + m_selection.assign(1, int(m_entities.size()) - 1); + } + delete_selected(); + reset_autoedit(); + return true; + } + std::function on_selection_changed; + + // Dimension tool: infer a driving dimension from the current selection and set + // it exactly. Sizing: 1 line=Length, 1 circle=Diameter, 1 arc=Radius, + // 2 lines=Angle. Positioning (a value of 0 makes them coincident): + // 2 point-likes (point/circle-centre/arc-centre)=Distance, moving the 2nd onto + // the 1st; a point-like + a line=DistanceToLine, moving the point-like's + // reference point onto/away-from the line (e.g. a circle centre onto an axis). + enum class DimType { None, Length, Diameter, Radius, Angle, Distance, DistanceToLine }; + DimType dimension_kind() const; // what the selection supports (None if invalid) + double dimension_current() const; // current value, to pre-fill the dialog + void apply_dimension(double v); // set it exactly, then clear the selection + + // Onshape-style Dimension tool (Mode::Dimension): with the tool active you click + // directly in the viewport — 2 points -> Distance, a line -> Length, a circle -> + // Diameter, an arc -> Radius, a point then a line -> DistanceToLine. A quote line + // with extension lines, arrowheads and a numeric label is PLACED in the sketch and + // drives the geometry (auto-offset; label editable). on_dimension_pick_complete + // fires when a pick resolves so the panel can pop the value card pre-filled. + std::function on_dimension_pick_complete; + DimType pending_dimension_type() const; // type of the dim awaiting a value, or None + void set_dimension_value(double v); // apply the typed value to the placed dim + void cancel_dimension_value(); // keep the placed dim at its measured value + + // Onshape-style in-canvas value editing: open a floating text editor at the given + // screen pixel, pre-filled with `current`; commit applies the value, cancel keeps + // it. The owner (DesignCanvas) hosts the wxTextCtrl over the GL canvas. This is the + // single numeric-entry path for all sketch dimensions (replaces the modal cards). + std::function commit, + std::function cancel)> on_inline_edit; + // Force-close any open inline field (runs its cancel = keep-as-drawn). Used by the polyline + // terminators (right-click / double-click) to end the chain even mid per-segment edit. + std::function on_inline_dismiss; + // Accept and close an open inline value field. dismiss() CANCELS; this one keeps the value, + // which is what leaving a tool should do — see set_tool(). + std::function on_inline_commit; + + // Bottom-right viewport readout: emitted each frame with the active tool's current + // values (live segment length/angle while drawing a line, or the selected entity's + // characteristic dimensions). Empty string -> hide the HUD. The owner (DesignCanvas) + // shows it as a floating corner label over the GL canvas. + std::function on_readout; + + // Driving dimension constraints accumulated during the session (the Dimension + // tool records a SketchEntityConstraintDef per applied dimension); committed + // alongside the entities on finish() so the kernel keeps enforcing them. + const std::vector& constraints() const { return m_constraints; } + + // Emitted by finish() with the accumulated entities + driving constraints. + std::function&, + const std::vector&, + const SketchPlane&)> on_commit_entities; + // Legacy single-profile commit (kept for compatibility; unused by entity tools). + std::function on_commit; + // Emitted when a closed-loop face is clicked in Select mode (Onshape: a region + // becomes a selectable face → extrude). The panel commits the sketch + extrudes. + std::function on_face_selected; // region index into region_loops(m_entities) + // Esc pressed while the tool is active with nothing left to unwind and no geometry to + // lose: leave the session (the panel restores Feature mode). + std::function on_exit; + // request_exit() declined to leave because the session holds geometry. The panel owns the + // status line, so the tool reports through this instead of writing text itself. + std::function on_exit_refused; + std::function on_move_exit; // right-click finished the move-body gizmo + // The two inner Esc levels, callable on their own so the panel can route one press to one + // level (see DesignInteraction.hpp). Each returns whether it had anything to unwind. + bool abort_gesture(); // CadLevel::Gesture — drop the entity being drawn + bool disarm_tool(); // CadLevel::Tool — armed draw/edit tool falls back to Select + void request_exit(); + // Ctrl+Z / Ctrl+Shift+Z (Ctrl+Y) while the Design canvas is focused: undo/redo the + // committed feature history. The tool just forwards to the host, which owns the + // CadDocument (the tool has no document of its own). redo == true requests redo. + std::function on_undo_redo; + void request_undo_redo(bool redo); + +private: + bool screen_to_plane(GLCanvas3D& canvas, const wxMouseEvent& evt, Vec2d& out) const; + // True when the cursor is close enough to the open chain's FIRST point to close the loop, + // on the same screen tolerance as every other snap; snaps `p` exactly onto that point so + // the rubber band previews the closing segment and the snap marker lights. + bool snap_chain_start(GLCanvas3D& canvas, const wxMouseEvent& evt, Vec2d& p) const; + + // Onshape-style angle inference: snap the direction anchor->raw to the nearest + // of {0,30,45,60,90} deg (replicated every 90 deg) when within tolerance, keeping + // the same length. Sets `locked` when a snap was applied. Suppressed by m_snap_off. + Vec2d snap_dir(const Vec2d& anchor, const Vec2d& raw, bool& locked) const; + // Snap a placed point onto the nearest existing entity endpoint within ~8 px so + // chains join across entities (a line + an arc can close into one loop). Shift + // disables it. `snapped` reports whether a vertex was hit. + Vec2d snap_vertex(GLCanvas3D& canvas, const wxMouseEvent& evt, const Vec2d& raw, bool& snapped) const; + + // --- P1 inference / auto-constraint engine --------------------------------- + // Plane-units tolerance equivalent to ~`px` screen pixels at the cursor. + double screen_tol(GLCanvas3D& canvas, const wxMouseEvent& evt, const Vec2d& at, double px = 8.0) const; + // Run kernel inference at the cursor, cache the target for the hint renderer. + InferenceSnap infer_at(GLCanvas3D& canvas, const wxMouseEvent& evt, const Vec2d& raw) const; + // True if m_constraints already holds an equivalent Coincident between the two refs. + bool has_coincident(int ea, SketchPointRole ra, int eb, SketchPointRole rb) const; + // After entities [base, end) were committed, auto-emit the constraints that make + // the new geometry stick: Coincident between co-located endpoints (so loops close + // on their own) and Horizontal/Vertical on axis-aligned new segments. + // ang_tol_rad is how far from an axis a segment may be and still be CALLED axis-aligned. + // A gesture needs the default 3 degrees — nobody clicks a horizontal line exactly — but + // that same slack MOVES geometry that was given exactly, so the scripted path passes a + // tolerance tight enough to recognise only what is already true. See add_entities_scripted. + // ang_tol_rad: how far off axis a segment may be and still be called Horizontal/Vertical. + // weld_tol: how far apart two endpoints may be and still be called Coincident. + // Both default to GESTURE slack. A scripted add passes zero for both: the caller has + // already said exactly what it means, and every non-zero window is a window in which the + // inference rewrites it. 8xg1. + void infer_auto_constraints(int base, double ang_tol_rad = 3.0 * M_PI / 180.0, + double weld_tol = 1e-3); + + // Selection helpers (Mode::Select). + int hit_test(const Vec2d& p, double tol) const; // nearest entity within tol, or -1 + std::vector connected_loop(int seed) const; // entities joined by shared endpoints + void apply_angle_between(int ia, int ib, double deg); // rotate line B to set the A^B angle + bool selection_valid() const; // all selection indices in range + void record_dimension_constraint(double v); // append the driving def for the selection + void resolve_live(); // solve accumulated constraints on m_entities now + // Drag-aware re-solve: pins the dragged point at its current coord and lets the + // solver move the rest (Slvs dragged[]). Used live while a point grab is active. + void resolve_live_drag(int dragged_ei, SketchPointRole dragged_role); + + // Placed dimension annotation. References entity points/entities (not cached + // coords) so the quote follows the geometry as the kernel solves it. `value` + // drives the constraint stored at index `con` in m_constraints. + struct DimAnnot { + DimType kind{DimType::None}; + int ea{-1}; SketchPointRole ra{SketchPointRole::P0}; + int eb{-1}; SketchPointRole rb{SketchPointRole::P0}; + double value{0.0}; + double side{1.0}; // perpendicular offset sign of the quote line + int con{-1}; // slot in m_constraints driving this dimension + Vec2d label_pos{0, 0}; // cached label centre (plane coords), for picking + }; + + // --- Onshape-style visual editing: handles + parametric feature grouping ----- + // A draggable handle on a defining point of an entity (or a derived point of a + // feature group). GUI-only; recomputed from solved geometry every frame (never + // persisted), so handles always track the current solve. Derived roles (radius, + // slot width/centres, rect corners, polygon vertex, ellipse axes) let tools that + // decompose into raw Line/Arc entities still expose their parametric controls. + enum class HandleRole { P0, P1, Center, RadiusHandle, + SlotCenter0, SlotCenter1, SlotWidth, + RectCorner, PolygonVertex, MajorAxis, MinorAxis, BSplineCtrl }; + struct Handle { + HandleRole role{HandleRole::P0}; + int ei{-1}; // primary entity index + int group{-1}; // index into m_features, or -1 for a raw-entity handle + int ctrl_index{-1}; // BSplineCtrl pole index + Vec2d pos{0, 0}; // current plane coords (recomputed each frame) + bool hovered{false}; + }; + // A parametric grouping over a contiguous run of entities produced by one gesture. + // Slot/Rect/Polygon/etc. have no SketchEntity type of their own — they decompose + // into raw Line/Arc entities — so the Feature carries the gesture's anchors so + // derived handles + characteristic dimensions can be reconstructed. + enum class FeatureKind { Free, Line, Circle, Arc, CornerRect, CenterRect, + Slot, ArcSlot, Polygon, Ellipse, RoundedRect, BSpline }; + struct Feature { + FeatureKind kind{FeatureKind::Free}; + int begin{0}, end{0}; // [begin,end) into m_entities + Vec2d c0{0, 0}, c1{0, 0}; // slot centres / rect corners / ellipse centre+major + double param{0.0}; // slot half-width / polygon circumradius / fillet radius + int sides{0}; // polygon side count + }; + // Build the live handle set for the current selection / just-drawn feature. + std::vector build_handles() const; + // Nearest handle to plane-point p within tol; fills `out`. (Phase A: stub.) + bool hit_test_handle(const Vec2d& p, double tol, Handle& out) const; + // Move a handle to `target`, applying the role-specific geometry edit + re-solve. + void set_handle(const Handle& h, const Vec2d& target); + // On a no-button move, recompute the hovered handle; returns true iff it changed + // (so the caller forces exactly one repaint). No-op for non-Moving events. + bool update_hover(GLCanvas3D& canvas, wxMouseEvent& evt); + // Index of the Feature whose [begin,end) entity span contains ei, or -1. + int feature_of(int ei) const; + // Re-detect parametric Feature groups (polygon / rect / slot) from the raw entity + // list — used when a committed sketch is re-opened, where m_features is empty. + void rebuild_features_from_entities(); + // Open/close a Feature record around the entities a single gesture appends. + void begin_feature(FeatureKind kind); + void end_feature(const Vec2d& c0 = Vec2d(0, 0), const Vec2d& c1 = Vec2d(0, 0), + double param = 0.0, int sides = 0); + + bool point_at(int ei, SketchPointRole role, Vec2d& out) const; // current coords + void set_point(int ei, SketchPointRole role, const Vec2d& v); // move an entity point + bool hit_test_point(const Vec2d& p, double tol, int& ei, SketchPointRole& role) const; + int hit_test_dimension(const Vec2d& p, double tol) const; // nearest dim label + void edit_dimension(int di); // reopen value card for di + // Representative plane-coords anchor of a dimension (label centre if known, else a + // geometric midpoint/centre) — where the in-canvas value editor is positioned. + Vec2d dim_anchor(const DimAnnot& a) const; + // Open the in-canvas value editor on dimension `di` (falls back to the modal + // pick-complete callback when no inline-edit host is wired). + void open_value_editor(int di); + // In-canvas editor for a line's angle-to-horizontal; commit rotates the segment + // geometrically about P0 (no single-line angle constraint in libslvs). + void open_angle_editor(int ei); + void set_line_angle(int ei, double deg); + // Draw-then-edit (all creation tools): open the inline editor on the freshly-drawn + // selection's PRIMARY characteristic value. Called after render_live_quotes has computed + // the selection's quotes, so it dispatches on the same live-quote state a Select-mode + // click would use. + void open_primary_autoedit(); + // Compact "current values" string for the bottom-right HUD (see on_readout). + std::string build_readout() const; + // Open a characteristic live quote as a TENTATIVE driving dimension: the constraint is + // appended only if the user commits a value (Enter); cancel (Esc) adds nothing — so + // drawing never silently over-constrains. (place_dimension is the eager Select-mode twin.) + void open_next_autoedit_dim(); // opens m_autoedit_dims[idx]; commit -> next, Esc -> stop + void arm_polyline_segment_edit();// per-segment Length+Angle edit of the pending chain vertex + // In-canvas editors for a regular polygon's side length and orientation. Both edit + // the whole loop GEOMETRICALLY (polygon has no centre entity): side scales it + // uniformly about its centre, angle rotates it. set_polygon_radius is the shared + // uniform-scale primitive (circumradius). + void open_polygon_side_editor(int fi); + void open_polygon_angle_editor(int fi); + void set_polygon_side(int fi, double side); + void set_polygon_angle(int fi, double deg); + void set_polygon_radius(int fi, double R); + // Arc sweep-angle quote: geometric edit (SLVS angle is line-to-line only). Keeps the + // arc start point + radius fixed and moves the end point to span `deg` degrees. + void open_arc_angle_editor(int ei); + void set_arc_sweep(int ei, double deg); + // Arc handle drag (3 grips): Center rigidly translates; the START point changes the + // radius (keeps both sweep angles); the END point changes the sweep angle (keeps the + // radius). Geometric — no solver (SLVS has no arc radius/angle handle concept here). + void drag_arc_handle(int ei, SketchPointRole role, const Vec2d& target); + // Ellipse axis labels (geometric edit of the semi-axes a/b; phi via the major grip). + void open_ellipse_axis_editor(int ei, bool major); + void set_ellipse_axis(int ei, bool major, double v); + void set_ellipsearc_sweep(int ei, double deg); // draw-then-edit: included sweep of an elliptical arc + void set_rect_angle(int fi, double deg); // draw-then-edit: orientation of an oblique rect + // EllipseArc endpoint drag: Center translates; P0/P1 move the sweep start/end to the + // parametric angle of the cursor on the ellipse frame (radius/shape preserved). + void drag_ellipsearc_handle(int ei, SketchPointRole role, const Vec2d& target); + // Drop orientation constraints (H/V/Parallel/Perp/Angle/LockX/LockY) on entities in + // [begin,end). A ROTATION makes inferred per-edge H/V inconsistent, so re-solving + // against them collapses the shape — drop them first (fixes up DimAnnot.con indices). + void drop_orientation_constraints(int begin, int end); + // Drop every live constraint that references entity `ei` (Trim/Extend slide an endpoint, + // invalidating its constraints) and fix the dimensions' cached constraint indices. + void drop_constraints_referencing(int ei); + // Standalone Trim/Extend scissors on the LIVE sketch: pick the entity nearest `p` (within + // `tol` plane units) and cut it back to / out to its nearest intersection with the others. + // Returns true if an entity was modified. + bool apply_live_trim(const Vec2d& p, double tol, bool extend); + // Pure-computation hover preview for Trim/Extend: mirror apply_live_trim's pick + the + // engine's cut on a COPY (mutating nothing) and return, via `removed_poly`, the polyline + // of the sub-portion a click would REMOVE (Trim) or ADD (Extend). `subject_ei` is the + // picked entity. Returns false if nothing is in range or nothing would change. + bool compute_trim_preview(const Vec2d& p, double tol, bool extend, + int& subject_ei, std::vector& removed_poly) const; + // Drag a polygon vertex while keeping the loop REGULAR: scale + rotate the whole + // polygon about its centroid so the grabbed vertex follows `target` (adjusts + // circumradius + orientation together). + void drag_polygon_vertex(int fi, int ei, SketchPointRole role, const Vec2d& target); + double measure_dim(const DimAnnot& a) const; // value from geometry + std::string dimtype_title(DimType k) const; + SketchEntityConstraintDef constraint_for(const DimAnnot& a) const; // driving def + // One driving constraint (and one visible quote) per kind+operands: re-typing a value must + // UPDATE it, not append a rival asking for something else. Both return the index. + int upsert_constraint(const SketchEntityConstraintDef& c); + int upsert_dimension(const DimAnnot& a); + int place_dimension(DimAnnot a); // create+drive+notify + std::string dim_text(const DimAnnot& a) const; // rendered label string + void render_dimensions(double unit_per_px); // quote lines + labels + // Draw ONE dimension's quote (extension/dimension lines, arrowheads, label) and + // return its label centre in out_label; false if the annot can't be drawn. Shared + // by render_dimensions (placed driving quotes) and render_live_quotes (live ones). + bool draw_dim_quote(const DimAnnot& a, double th, const ColorRGBA& col, Vec2d& out_label); + // Live, non-driving characteristic quotes for the entity being edited (point/handle + // drag, or a lone selection): the tool's defining dimensions shown Onshape-style so + // editing shows live values; click one (m_live_quotes) to promote it to a driving + // dim. Self-gates; skips a dim already driven on that entity. + void render_live_quotes(double unit_per_px); + // Iconic constraint badges (C3.4b): for each m_constrain_cons entry, append a + // small screen-constant glyph (H, V, ∥, ⊥, =, ○, …) near its primary entity into + // `out`; glyphs touching the same entity stack so they don't overlap. + void build_constraint_glyphs(double unit_per_px, + const std::vector& cons, + std::vector>& out); + void draw_strokes(GLModel& model, const std::vector>& segs, + double hw, const ColorRGBA& color); + void draw_text(GLModel& model, const std::string& s, const Vec2d& center, + double height, const ColorRGBA& color); // GL stroke font + void draw_dim_label(const std::string& txt, const Vec2d& plane_center); + + // Entity builders: append to m_entities (honoring the construction flag). + void push_line(const Vec2d& a, const Vec2d& b); + void push_closed_lines(const std::vector& corners); + void push_open_chain(const std::vector& pts); + void push_circle(const Vec2d& center, double radius); + void push_point(const Vec2d& p); + + // Multi-click tool builders: return the entities for a finished gesture so + // both on_mouse (append) and render (preview) share one geometry path. + std::vector make_three_point_circle(const Vec2d& a, const Vec2d& b, const Vec2d& c) const; + std::vector make_three_point_arc(const Vec2d& start, const Vec2d& end, const Vec2d& on_arc) const; + std::vector make_tangent_arc(const Vec2d& start, const Vec2d& end) const; + // Center-start-end arc: click center, then start (sets radius), then a third + // point whose direction from the center sets the CCW end angle. + std::vector make_center_arc(const Vec2d& center, const Vec2d& start, const Vec2d& end_dir) const; + std::vector make_slot(const Vec2d& c0, const Vec2d& c1, double half_width) const; + std::vector make_arc_slot(const Vec2d& center, const Vec2d& start, + const Vec2d& end_dir, double half_width) const; + std::vector make_rounded_rect(const Vec2d& a, const Vec2d& b, const Vec2d& radius_pt) const; + std::vector rounded_rect_entities(double xmin, double ymin, + double xmax, double ymax, double r) const; + // Rounded-rect grouped edit: W/H/fillet-R labels rebuild the 8-entity span in place. + void open_rounded_rect_editor(int fi, int which); // 0=Width 1=Height 2=fillet R + void set_rounded_rect(int fi, double w, double h, double r); + // Arc-slot grouped edit: centreline-radius + width labels rebuild the 4-arc span. + void open_arc_slot_editor(int fi, bool radius); // true=centreline R, false=width + void set_arc_slot(int fi, double Rc, double w); + // Straight-slot grouped edit: centreline-length + width labels rebuild the 4-entity span. + void open_slot_editor(int fi, int which); // 0=inter-centre distance, 1=radius, 2=angle + void set_slot(int fi, double length, double w); + void set_slot_angle(int fi, double deg); // rotate the centreline about c0, keep len+radius + // Grouped derived-handle drag: resize an axis-aligned rect by a corner (opposite corner + // fixed); move a slot end by its cap centre. Both rebuild the feature span geometrically. + void drag_rect_corner(int fi, const Vec2d& cursor); + void drag_slot_handle(int fi, const Vec2d& cursor); + std::vector make_polygon(const Vec2d& center, const Vec2d& vertex, int sides) const; + // Ellipse: click center, then major-axis endpoint (sets a + rotation phi), + // then a point whose perpendicular distance to the major axis sets b. + std::vector make_ellipse(const Vec2d& center, const Vec2d& major_end, + const Vec2d& minor_pt) const; + // Elliptical arc: same 3 axis clicks, then start and end points whose parametric + // angles on the ellipse bound the CCW sweep. + std::vector make_bspline(const std::vector& ctrl) const; + std::vector make_ellipse_arc(const Vec2d& center, const Vec2d& major_end, + const Vec2d& minor_pt, const Vec2d& start_pt, + const Vec2d& end_pt) const; + void append_entities(const std::vector& ents); + void draw_entities_preview(const std::vector& ents, const ColorRGBA& color); + + // --- In-canvas edit-op gizmo (Fillet/Chamfer/Offset/Mirror toolbar tools) -------- + // These replace the docked numeric card: pick the entities in-canvas, then a draggable + // arrow with a value label is projected toward the corner/centre (Fillet/Chamfer/Offset), + // or a two-phase pick (axis line, then targets) drives a live mirrored ghost. The + // SketchEngine op is recomputed live so a translucent ghost previews the result; confirm + // applies the geometry and binds constraints into m_constraints (try_add_constraints). + bool op_corner(int a, int b, Vec2d& C, Vec2d& bis, double& theta) const; // line-line vertex + inward bisector + void op_pick(int ei); // route an entity pick to the active op + void recompute_op_ghost(); // rebuild m_op_ghost from m_op_value + void render_op_gizmo(double unit_per_px); // ghost + arrow + value label (caches m_op_label) + bool hit_test_op_arrow(const Vec2d& p, double tol) const; + void drag_op_arrow(const Vec2d& target); // project cursor onto m_op_dir -> value + void open_op_editor(); // inline-edit the value label + void confirm_op(); // apply + bind, then reset for the next gesture + void reset_op(); // clear gizmo state (keeps the tool active) + bool op_ready() const; // required entities picked -> arrow/ghost live + + // Sample an entity into a 2D polyline for the overlay renderer. + std::vector entity_polyline(const SketchEntity& e, bool& closed) const; + + // Closed regions formed by the current (non-construction) entities: each a CCW- + // ordered boundary polygon on the plane. A circle is its own region; line/arc + // chains are walked endpoint-to-endpoint into loops. Used to fill faces. + std::vector> closed_regions() const; + std::vector> closed_regions(const std::vector& ents) const; + // Same loops, but each carries the indices of the entities that form it — so a single + // loop can be highlighted / extruded on its own (per-region selection on the plate). + // A selectable sketch region: its own boundary, plus the loops nested INSIDE it, which + // are its holes. Modelling holes is what makes "the plate with the hole in it" a thing the + // user can point at — without it a sketch is N disjoint filled polygons and the only + // selectable things are the rectangle alone or the circle alone (txp8). + struct RegionLoop { + std::vector poly; + std::vector ents; + std::vector holes; // indices into the same vector; one nesting level + }; + std::vector region_loops(const std::vector& ents) const; + // Index of the closed region containing plane-point p (point-in-polygon), or -1. + int region_at(const Vec2d& p) const; + + void draw_quad_strip(GLModel& model, const std::vector& pts, bool closed, const ColorRGBA& color); + // half_size is the square marker half-extent in PLANE units. Callers pass a + // zoom-scaled value (k / zoom) for screen-constant handles; the default keeps + // legacy point markers exactly as before. + void draw_vertices(GLModel& model, const std::vector& pts, const ColorRGBA& color, + double half_size = 1.3); + void draw_fill(GLModel& model, const std::vector& poly, const ColorRGBA& color); + // Same, with the region's holes cut out, so a selected plate-with-a-hole is drawn as an + // ANNULUS instead of a filled rectangle painted straight across its own bore. + void draw_fill_holed(GLModel& model, const std::vector& outer, + const std::vector>& holes, const ColorRGBA& color); + const ColorRGBA* sketch_hl_color(int feature) const; + + bool m_active{false}; + SketchPlane m_plane; + std::vector m_points; // clicks of the in-progress entity / chain + std::vector m_entities; // committed entities of this session + bool m_construction{false}; + int m_polygon_sides{6}; + bool m_polygon_circumscribed{false}; + Vec2d m_cursor{0,0}; + bool m_has_cursor{false}; + bool m_snap_off{false}; // Shift held -> suppress angle snapping + InferenceSnap m_cursor_snap; // last cursor inference target (for hint render) + bool m_cursor_locked{false}; // rubber-band segment is angle-locked + bool m_awaiting_length{false}; // inline value editor open -> freeze canvas + int m_autoedit_seen{-1}; // entity count baseline for draw-then-edit + bool m_autoedit_pending{false};// a new entity just committed -> open editor + // Draw-then-edit step queue: every characteristic dimension of the freshly-drawn shape + // (scalar quote OR geometric editor) becomes one step, opened in sequence over its label. + struct AutoEditStep { + Vec2d label; // anchor (plane coords) — field opens over this + double value; // initial value shown + std::function apply; // commit: set the dimension + std::vector hi; // entities to highlight while THIS field is open + std::string title; // label shown above the value field + }; + std::vector m_autoedit_dims; // queued steps to edit in sequence + int m_autoedit_dim_idx{-1}; // index into m_autoedit_dims (-1 = idle) + std::vector m_selection; // selected entity indices (Mode::Select) + std::vector> m_point_sel; // selected individual points + int m_last_mouse_x{0}; // last cursor pos (canvas client px), for + int m_last_mouse_y{0}; // anchoring the in-canvas value editor + bool m_dragging_point{false}; // a point grab is in progress (Mode::Select) + int m_drag_ei{-1}; // entity whose point is being dragged + int m_drag_poly_fi{-1}; // >=0 if the grabbed point is a polygon + // vertex: drag scales+rotates the loop + int m_drag_rect_fi{-1}; // >=0 if dragging an axis-aligned rect corner + Vec2d m_drag_rect_anchor{0,0}; // the fixed (opposite) corner + int m_drag_slot_fi{-1}; // >=0 if dragging a slot cap centre + bool m_drag_slot_c1{false}; // true=cap@c1, false=cap@c0 + SketchPointRole m_drag_role{SketchPointRole::P0}; + std::vector m_constraints; // driving dims, committed on finish + + // Onshape-style visual editing state. + bool m_show_handles{false}; // draw + interact with handles + bool m_dragging_handle{false};// a handle grab is in progress + Handle m_drag_handle; // the handle being dragged + bool m_has_hover_handle{false};// cursor is near a handle (highlight it) + Handle m_hover_handle; // the hovered handle (recomputed on move) + std::vector m_live_quotes; // live non-driving characteristic quotes, + // clickable to promote to driving dims + Vec2d m_live_poly_side_label{0,0}; // polygon side-length quote label + Vec2d m_live_poly_angle_label{0,0}; // polygon orientation quote label + int m_live_poly_fi{-1}; // their Feature (geometric edits) + Vec2d m_live_arc_angle_label{0,0}; // arc sweep-angle quote label + int m_live_arc_ei{-1}; // the arc it belongs to (geometric edit) + Vec2d m_live_ellipse_major_label{0,0}; // ellipse semi-major quote label + Vec2d m_live_ellipse_minor_label{0,0}; // ellipse semi-minor quote label + Vec2d m_live_ellipsearc_sweep_label{0,0}; // elliptical-arc sweep quote label + int m_live_ellipse_ei{-1}; // the ellipse the labels belong to + Vec2d m_live_obrect_angle_label{0,0}; // oblique-rect orientation quote label + int m_live_obrect_fi{-1}; // an OBLIQUE rect Feature (angle editable) + Vec2d m_live_rrect_w_label{0,0}; // rounded-rect width quote label + Vec2d m_live_rrect_h_label{0,0}; // rounded-rect height quote label + Vec2d m_live_rrect_r_label{0,0}; // rounded-rect fillet-radius label + int m_live_rrect_fi{-1}; // the rounded-rect Feature (rebuild edits) + Vec2d m_live_aslot_r_label{0,0}; // arc-slot centreline-radius label + Vec2d m_live_aslot_w_label{0,0}; // arc-slot width label + int m_live_aslot_fi{-1}; // the arc-slot Feature (rebuild edits) + Vec2d m_live_slot_len_label{0,0}; // straight-slot inter-centre distance label + Vec2d m_live_slot_w_label{0,0}; // straight-slot radius (half-width) label + Vec2d m_live_slot_angle_label{0,0}; // straight-slot centreline angle label + int m_live_slot_fi{-1}; // the straight-slot Feature (rebuild edits) + std::vector m_features; // parametric groups over m_entities + int m_open_feature{-1}; // index of the Feature being built, or -1 + + // In-canvas edit-op gizmo state (Fillet/Chamfer/Offset/Mirror). GUI-only, reset by + // set_tool/cancel. Fillet/Chamfer: m_op_a,m_op_b = the two lines; Offset: m_op_a = src; + // Mirror: m_op_a = axis line, m_mirror_targets = entities to mirror. + // Last (mode, step, picks) reported through on_step_changed; -1 mode = nothing reported yet. + int m_step_mode_last{-1}; + int m_step_last{-1}; + int m_step_picks_last{-1}; + int m_op_a{-1}; + int m_op_b{-1}; + double m_op_value{0.0}; // radius / setback / signed offset distance + Vec2d m_op_anchor{0,0}; // arrow base (corner vertex / entity midpoint) + Vec2d m_op_dir{0,0}; // unit arrow direction (inward bisector / outward normal) + Vec2d m_op_label{1e18,1e18}; // cached arrow-label centre, for picking + std::vector m_op_ghost; // live result preview (recomputed on value change) + bool m_op_dragging_arrow{false}; // arrowhead drag in progress + std::vector m_mirror_targets; // Mirror: entities to be mirrored (axis = m_op_a) + + // In-canvas imported-art transform gizmo (Mode::TransformArt). GUI-only. The art's + // untransformed contours + its bbox in base coords; the live offset/scale; the grabbed + // handle (0..3 = corners, 4 = centre move, -1 = none) and the fixed world anchor (the + // opposite corner during a corner-scale drag). + std::vector>> m_xform_base; + int m_xform_feat{-1}; + Vec2d m_xform_min{0,0}, m_xform_max{0,0}; // bbox of m_xform_base (untransformed) + Vec2d m_xform_offset{0,0}; + double m_xform_sx{1.0}, m_xform_sy{1.0}; + int m_xform_handle{-1}; + Vec2d m_xform_anchor{0,0}; + void xform_world_corners(Vec2d out[4]) const; // 4 bbox corners in plane coords + int hit_test_xform_handle(const Vec2d& p, double tol) const; + void drag_xform_handle(const Vec2d& target); + void render_xform_gizmo(); + void emit_xform(); + void reset_xform(); + + // In-canvas transform gizmo state (Mode::Move/Rotate/Scale/Array/PolarArray). GUI-only, + // reset by set_tool/cancel. Pick one or more subject entities (m_tf_targets), then a + // single draggable handle drives the continuous parameter and a live translucent ghost + // previews the result; Array/PolarArray add a second editable label for the copy count. + // Mutating ops (Move/Rotate/Scale) drop the constraint classes the map invalidates; + // additive ops (Array/PolarArray) bind each copy to its source. See confirm_transform(). + std::vector m_tf_targets; // picked subject entity indices + Vec2d m_tf_pivot{0,0}; // rotate/scale/polar pivot = set centroid + Vec2d m_tf_delta{0,0}; // Move translation / Array per-step vector + double m_tf_angle{0.0}; // Rotate angle / PolarArray total sweep (rad) + double m_tf_scale{1.0}; // Scale factor + int m_tf_count{3}; // Array/PolarArray copy count (incl. original) + double m_tf_handle_r{1.0}; // ring/handle reference radius (set on pick) + std::vector m_tf_ghost; // live result preview + int m_tf_handle{-1}; // 0 = primary drag handle grabbed, -1 = none + bool m_tf_dragging{false}; + Vec2d m_tf_label_a{1e18,1e18}; // primary-param label centre (picking) + Vec2d m_tf_label_b{1e18,1e18}; // count label centre (Array/PolarArray) + bool tf_ready() const; // >=1 target picked -> gizmo + ghost live + void tf_pick(int ei); // accumulate a subject, seed defaults once + void compute_tf_pivot(); // centroid + extent of the target set + void recompute_tf_ghost(); + Vec2d tf_handle_pos() const; // world position of the drag handle + bool hit_test_tf_handle(const Vec2d& p, double tol) const; + void drag_tf_handle(const Vec2d& target); + void render_tf_gizmo(double unit_per_px); + void open_tf_editor_a(); // inline-edit the continuous parameter + void open_tf_editor_count(); // inline-edit the copy count + void confirm_transform(); // apply geometry + constraint web + void reset_tf(); + + // DoF feedback state, refreshed by resolve_live() from the libslvs solve result. + int m_dof{-1}; // remaining DoF; 0 = fully constrained, <0 = unknown + bool m_solve_ok{true}; // solver consistent (no conflicting constraints) + std::vector m_entity_conflict; // per-entity flag: touched by a conflicting constraint + std::vector m_dimensions; // placed dimension quotes (Mode::Dimension) + int m_dim_e0{-1}; // first picked point's entity (Dimension) + SketchPointRole m_dim_r0{SketchPointRole::P0}; + bool m_dim_has0{false}; // a first point is pending + int m_pending_dim{-1}; // dim awaiting a value-card entry + Mode m_mode{Mode::Polyline}; + int m_sel_a{-1}; // picked segment endpoints (legacy Constrain mode) + int m_sel_b{-1}; + bool m_constrain_entities{false}; // Constrain mode acts on entities + int m_pick0{-1}; // picked line-entity indices (entity Constrain) + int m_pick1{-1}; + int m_pick2{-1}; // third slot (Symmetric axis) + Vec2d m_pick0_pt{0,0}; // plane-coords of the slot-0 pick (trim/extend) + std::vector m_constraint_hl; // entities highlighted by the constraint manager + std::vector m_constrain_cons; // for glyph badges (C3.4b) + // Where each badge landed, so a click can find the constraint it stands for. Rebuilt by + // build_constraint_glyphs on every render, which is always the frame the user clicked on. + struct GlyphHit { Vec2d c{0,0}; int con{-1}; }; + std::vector m_glyph_hits; + double m_glyph_r{0.0}; // badge half-size in plane units (hit radius) + GLModel m_line_model; + GLModel m_vertex_model; + GLModel m_highlight_model; + int m_dim_label_seq{0}; + float m_render_scale{1.0f}; // canvas scale for Measure-style dim labels + GLModel m_fill_model; // translucent face fill for closed regions + std::vector m_display_sketches; // committed sketches drawn persistently + std::vector> m_hl_sketches; // feature index -> outline colour (Sweep/Loft operands) + int m_display_pick{-1}; // FEATURE index of the click-selected display sketch (-1 none) + + // Solid (whole/face/edge) selection on the committed bodies. Pointers are non-owning, + // into CadDocument (bodies + display_mesh + per-triangle face/body ids), refreshed each + // recompute via set_solid_pick. m_sel_edge_pts caches the picked edge's world polyline. + const std::vector* m_solid_bodies{nullptr}; + const TriangleMesh* m_solid_mesh{nullptr}; + const std::vector* m_solid_tri_face{nullptr}; + const std::vector* m_solid_tri_body{nullptr}; + const std::vector* m_solid_visible{nullptr}; // per-body visibility; hidden bodies aren't pickable + int m_pick_only_body{-1}; // >=0: only this body catches clicks (body-focus x-ray for CoordSys picking) + const std::vector* m_solid_xform{nullptr}; // per-body display transform (for edge sampling) + Vec3d body_xform_pt(int body, const Vec3d& p) const; // map an OCCT-shape point through the body xform + bool body_pickable(int b) const; // false when the body is explicitly hidden + SolidSel m_solid_sel{SolidSel::None}; + int m_sel_body{-1}; // which body the face/edge selection is on + int m_sel_face{-1}; + int m_sel_edge{-1}; + std::vector m_sel_edge_pts; + Vec3d m_sel_vertex_pt{Vec3d::Zero()}; // world point of a picked vertex + bool handle_solid_click(GLCanvas3D& canvas, const wxMouseEvent& evt); // pick + notify + // What a click at (mx,my) WOULD take, resolved without touching the selection. One + // implementation, two callers: the click, and the hover pre-highlight that promises what the + // click is about to do. Split so the promise cannot drift from the act. + struct SolidPick { + SolidSel kind{SolidSel::None}; + int body{-1}, face{-1}, edge{-1}; + std::vector edge_pts; + Vec3d vertex_pt{Vec3d::Zero()}; + }; + bool resolve_solid_pick(GLCanvas3D& canvas, int mx, int my, SolidPick& out) const; + // HOVER PRE-HIGHLIGHT (9xw part 3). Vertex-beats-edge-beats-face is a rule the user + // cannot see until after they commit to a click; showing the outcome under the pointer is + // what makes the precedence learnable at all, and is the charter's L5 (one click, one visible + // change) read honestly — the change has to be predictable before the click, not only after. + SolidPick m_pre; // what the pointer is currently over (kind None = nothing) + bool update_solid_hover(GLCanvas3D& canvas, const wxMouseEvent& evt); // true when it changed + // Left-drag rubber band: sweep a rectangle over the plate to take a whole body. Orbit + // moves to middle-drag in this canvas (DesignCanvas::set_cad_navigation) so the left + // button is free for it, which is the CAD convention (Onshape/SolidWorks). + GLSelectionRectangle m_rubber; + void pick_bodies_in_rectangle(); // resolve the swept rectangle -> whole-body selection + bool on_mouse_impl(wxMouseEvent& evt, GLCanvas3D& canvas); // the body; on_mouse wraps it + // Nearest stroke + enclosing region of ONE committed sketch. Shared by the click and + // double-click paths so they cannot disagree about what is under the pointer. + void hit_display_sketch(const DisplaySketch& d, const Vec2d& p, double tol, + int& edge_feat, int& edge_reg, int& edge_ent, + double& edge_d, int& face_feat, int& face_reg) const; + bool m_right_consumed{false}; // last RightDown was a gesture terminator, not a menu + bool m_escalate_repick{true}; // re-picking the same sub-element takes the whole body + void render_solid_highlight(); + // The shared body of the above: one highlight from explicit arguments, so the committed + // selection and the hover pre-highlight cannot drift apart in how they look. + void render_solid_sel(SolidSel kind, int body, int face, const std::vector& edge_pts, + const Vec3d& vertex_pt, const ColorRGBA& rgb, float alpha_mul); + void render_datum_planes(); // translucent rectangles for datum/reference planes + void render_view_helpers(); // world origin planes + axis triad (P / A toggles) + bool m_show_planes{false}; + bool m_show_axes{false}; + std::vector m_datum_planes; + std::vector m_datum_sizes; // per-plane (u,v) full extent; empty -> default + void render_mate_connectors(); // disc + roll quadrant + one-sided Z arrow + // The face treatment of the same connector: a shaded low-poly relief of a bear's head in the + // connector's own frame. Draws the plate, the snout tent and the marks; the caller still draws + // the Z arrow, which is shared with the disc treatment. + void render_mate_face(const Vec3d& origin, const Vec3d& X, const Vec3d& Y, const Vec3d& Z, + double R, const ColorRGBA& body); + std::vector m_mate_connectors; + std::vector> m_mate_links; + GLModel m_mc_stroke_model; + GLModel m_mc_fill_model; // the face treatment's shaded facets + GLModel m_solid_face_model; + GLModel m_solid_edge_model; + GLModel m_solid_vertex_model; + int m_display_pick_region{-1}; // selected closed-region index within that feature (-1 none) + + // Visual Extrude gizmo state (C5b). GUI-only; fed by the panel each refresh_preview. + bool m_ex_active{false}; + SketchPlane m_ex_plane; // profile plane (gives normal + to_world anchor) + Vec2d m_ex_centroid{0,0}; // arrow base in plane coords (profile centroid) + double m_ex_depth{0.0}; // primary depth (= m_distance) + double m_ex_depth2{0.0}; // second-side depth (TwoSided, = m_distance2) + bool m_ex_two_sided{false}; + bool m_ex_flip{false}; + int m_ex_drag{-1}; // 0 = primary arrow, 1 = second arrow, -1 = none + int m_ex_press_x{0}, m_ex_press_y{0}; // press px to tell click-to-edit from drag + void render_extrude_gizmo(); + bool hit_test_extrude_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const; + void drag_extrude_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + void open_extrude_editor(int which); + GLModel m_ex_arrow_model; + + // Datum-plane resize gizmo state (C3). GUI-only; fed by the panel while the Plane card is open. + bool m_dz_active{false}; + SketchPlane m_dz_plane; // resolved datum frame (origin + axes) + double m_dz_usize{60.0}; // current u extent (full width) + double m_dz_vsize{60.0}; // current v extent (full height) + int m_dz_drag{-1}; // 0=+u,1=-u,2=+v,3=-v handle, 4=offset tip, -1 none + int m_dz_press_x{0}, m_dz_press_y{0}; + Vec3d m_dz_anchor{Vec3d::Zero()}; // base-plane origin (offset arrow tail) + Vec3d m_dz_normal{0.0, 0.0, 1.0}; // base normal (offset arrow direction) + double m_dz_offset{0.0}; // current signed offset along the base normal + bool m_dz_offset_on{false}; // draw/allow the offset arrow (Offset-from-base only) + void render_datum_gizmo(); + bool hit_test_datum_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const; + void drag_datum_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + // Helix gizmo state (plane-anchored curve + 3 drag handles). Fed by the panel while the + // Helix card is open (sketch tool NOT active); the tool draws the live helix plus a handle + // on each length parameter (radius/height/pitch). Taper and handedness stay on the card. + bool m_hx_active{false}; + SketchPlane m_hx_plane; // axis = plane normal, base circle in the plane + double m_hx_radius{10.0}; + double m_hx_pitch{2.0}; + double m_hx_height{20.0}; + double m_hx_taper{0.0}; // DEGREES (cone half-angle), as the kernel reads it + bool m_hx_left{false}; + int m_hx_drag{-1}; // 0=radius, 1=height, 2=pitch, -1 none + int m_hx_press_x{0}, m_hx_press_y{0}; + Vec3d helix_point(double t) const; // curve point at parameter t (shared render/hit/drag) + void render_helix_gizmo(); + bool hit_test_helix_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const; + void drag_helix_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + // Rib thickness gizmo state (plane-anchored slab footprint + 2 drag handles). Fed by the + // panel while the Rib card is open (sketch tool NOT active); the tool draws the rib's + // footprint outline and a handle on each side of the line at half-thickness. Dragging either + // handle sets the full thickness (the slab is centred on the line). + bool m_rb_active{false}; + SketchPlane m_rb_plane; + Vec2d m_rb_p0{Vec2d::Zero()}; // rib line endpoints, in plane coords + Vec2d m_rb_p1{Vec2d::Zero()}; + double m_rb_thickness{2.0}; + int m_rb_drag{-1}; // 0 = +perp handle, 1 = -perp handle, -1 none + void render_rib_gizmo(); + bool hit_test_rib_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int& which) const; + void drag_rib_handle(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + // Datum base picker (translucent clickable origin/datum planes) + bool m_dbp_active{false}; + std::vector m_dbp_planes; + std::vector m_dbp_base; + std::vector m_dbp_labels; + int m_dbp_hover{-1}; + double dbp_half_extent() const; // bed-derived: reference planes are larger than the bed + void render_base_pick(); + int hit_test_base_pick(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + + // Move-body gizmo state: 3 world-axis translate arrows + 3 world-axis rotate rings. + // Delta model: offset/rot are deltas about a fixed pivot, composed onto m_mv_base_xform + // (the body's pose when Move opened) so rotation works even on an already-placed body. + bool m_mv_active{false}; + int m_mv_body{-1}; + Vec3d m_mv_base{Vec3d::Zero()}; // pivot = body's world centroid at Move-open + Vec3d m_mv_offset{Vec3d::Zero()}; // delta translation along world X/Y/Z + Transform3d m_mv_base_xform{Transform3d::Identity()}; // pose when Move opened + Eigen::Matrix3d m_mv_rot{Eigen::Matrix3d::Identity()}; // accumulated delta rotation (world, about pivot) + Eigen::Matrix3d m_mv_rot_start{Eigen::Matrix3d::Identity()}; // rot snapshot at arc-drag start + double m_mv_arc_a0{0.0}; // mouse angle on the ring at drag start + int m_mv_drag{-1}; // 0..2 = X/Y/Z arrow, 3..5 = X/Y/Z ring, -1 none + double m_mv_radius{0.0}; // body bounding-sphere radius (mm); 0 = unknown + int m_mv_press_x{0}, m_mv_press_y{0}; + Transform3d compose_move_xform() const; // T(offset)*T(pivot)*rot*T(-pivot)*base_xform + void ring_basis(int axis, Vec3d& e, Vec3d& u, Vec3d& v) const; // world axis + in-plane basis + void render_move_gizmo(); + // Gizmo arm length (world mm): scales with the body so the rings clear its surface. + double move_gizmo_arm(const Camera& cam) const; + bool hit_test_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const; + bool hit_test_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int& axis) const; + void drag_move_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis); + void drag_move_arc(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis); + bool arc_mouse_angle(GLCanvas3D& canvas, const wxMouseEvent& evt, int axis, double& ang) const; + void open_move_editor(int axis); + GLModel m_mv_arrow_model; + + // Fillet/Chamfer radius gizmo state (single world-space arrow at the picked edge midpoint). + bool m_fl_active{false}; + Vec3d m_fl_anchor{Vec3d::Zero()}; // edge midpoint (world, already body-transformed) + Vec3d m_fl_dir{Vec3d::UnitZ()}; // unit radius direction (perp to edge, outward) + double m_fl_radius{1.0}; // current radius (= dressup size) + bool m_fl_drag{false}; + int m_fl_press_x{0}, m_fl_press_y{0}; + double m_fl_grab_proj{0.0}; // axis projection at grab (relative drag reference) + double m_fl_grab_radius{1.0}; // radius at grab (relative drag reference) + void render_fillet_gizmo(); + bool hit_test_fillet_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + double fillet_axis_proj(GLCanvas3D& canvas, const wxMouseEvent& evt) const; // NaN if camera∥axis + void start_fillet_drag(GLCanvas3D& canvas, const wxMouseEvent& evt); + void drag_fillet_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_fillet_editor(); + GLModel m_fl_arrow_model; + + // Hole gizmo state. The hole is a positioned circular cut on m_hl_plane at (m_hl_x, m_hl_y); + // the footprint circle is drawn on the plane, the diameter arrow runs along the plane u-axis, + // the depth arrow along +normal (matching the kernel's make_extrude). Three draggable handles: + // 0 = centre (reposition in plane u/v), 1 = diameter, 2 = depth (only shown when !through). + bool m_hl_active{false}; + SketchPlane m_hl_plane; + double m_hl_x{0.0}, m_hl_y{0.0}; // centre on the plane (u/v mm) + double m_hl_diameter{6.0}; + double m_hl_depth{10.0}; + bool m_hl_through{true}; + // #2 Part B: face (u,v) bounds, so the construction dims read as distance from the face SIDES + // (umin/vmin = two adjacent edges) rather than from the centre. Off for a dropdown-plane hole. + bool m_hl_has_bounds{false}; + double m_hl_umin{0}, m_hl_umax{0}, m_hl_vmin{0}, m_hl_vmax{0}; + int m_hl_drag{-1}; // 0=centre, 1=diameter, 2=depth, 3=X-dim, 4=Y-dim, -1=none + int m_hl_press_x{0}, m_hl_press_y{0}; + double m_hl_grab_proj{0.0}; // diameter/depth axis projection at grab (relative) + double m_hl_grab_val{0.0}; // radius (diameter drag) or depth at grab + Vec2d m_hl_grab_uv{0.0, 0.0}; // centre drag: plane-projected grab point + double m_hl_grab_x{0.0}, m_hl_grab_y{0.0}; // centre drag: x/y at grab + void render_hole_gizmo(); + int hit_test_hole_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const; // 0/1/2/-1 + double hole_axis_proj(GLCanvas3D& canvas, const wxMouseEvent& evt, + const Vec3d& anchor, const Vec3d& dir) const; // NaN if camera∥axis + void start_hole_drag(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + void drag_hole_handle(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_hole_editor(int which); + GLModel m_hl_stroke_model; + + // Thread gizmo state (mirrors the hole gizmo; radius arrow uses an R label, length arrow is + // always shown). Handles: 0 = centre (thread_x/y), 1 = radius, 2 = length. + bool m_th_active{false}; + SketchPlane m_th_plane; + double m_th_x{0.0}, m_th_y{0.0}; + double m_th_radius{5.0}; + double m_th_height{10.0}; + int m_th_drag{-1}; // 0=centre, 1=radius, 2=length, -1=none + int m_th_press_x{0}, m_th_press_y{0}; + double m_th_grab_proj{0.0}; + double m_th_grab_val{0.0}; + Vec2d m_th_grab_uv{0.0, 0.0}; + double m_th_grab_x{0.0}, m_th_grab_y{0.0}; + void render_thread_gizmo(); + int hit_test_thread_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const; // 0/1/2/-1 + void start_thread_drag(GLCanvas3D& canvas, const wxMouseEvent& evt, int which); + void drag_thread_handle(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_thread_editor(int which); + GLModel m_th_stroke_model; + + // Shell gizmo state (single inward thickness arrow at the picked face centroid). + bool m_sh_active{false}; + Vec3d m_sh_anchor{Vec3d::Zero()}; // picked face centroid (world) + Vec3d m_sh_dir{Vec3d::UnitZ()}; // inward unit direction (-outward normal) + double m_sh_thickness{2.0}; + bool m_sh_drag{false}; + int m_sh_press_x{0}, m_sh_press_y{0}; + double m_sh_grab_proj{0.0}; + double m_sh_grab_val{2.0}; + void render_shell_gizmo(); + bool hit_test_shell_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + void start_shell_drag(GLCanvas3D& canvas, const wxMouseEvent& evt); + void drag_shell_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_shell_editor(); + GLModel m_sh_stroke_model; + + // Revolve gizmo state (arc center = projection of the profile centroid onto the axis). + bool m_rv_active{false}; + Vec3d m_rv_center{Vec3d::Zero()}; // arc center on the axis (world) + Vec3d m_rv_axis{Vec3d::UnitX()}; // revolve axis unit dir (world) + Vec3d m_rv_ref{Vec3d::UnitY()}; // angle-0 reference dir (perp to axis, toward profile) + double m_rv_radius{10.0}; // arc radius = profile perpendicular distance (world) + double m_rv_angle{360.0}; // current sweep magnitude (deg, 1..360) + bool m_rv_flip{false}; // sweep sense (matches the kernel's negative-angle flip) + bool m_rv_drag{false}; + int m_rv_press_x{0}, m_rv_press_y{0}; + void render_revolve_gizmo(); + bool hit_test_revolve_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + void drag_revolve_arc(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_revolve_editor(); + GLModel m_rv_stroke_model; + + // Draft gizmo state (arc center = picked face centroid; axis = world +Z, taper pull direction). + bool m_dr_active{false}; + Vec3d m_dr_center{Vec3d::Zero()}; // arc center = face centroid (world) + Vec3d m_dr_axis{Vec3d::UnitZ()}; // draft axis = world +Z (pull direction) + Vec3d m_dr_ref{Vec3d::UnitX()}; // angle-0 reference dir (perp to axis) + double m_dr_radius{10.0}; // arc radius (world) + double m_dr_angle{5.0}; // current sweep magnitude (deg, [-89, 89]) + bool m_dr_drag{false}; + int m_dr_press_x{0}, m_dr_press_y{0}; + void render_draft_gizmo(); + bool hit_test_draft_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + void drag_draft_arc(GLCanvas3D& canvas, const wxMouseEvent& evt); + GLModel m_dr_stroke_model; + std::function m_on_draft_angle_changed; + + // Cut gizmo state (plane normal arrow + wire rectangle at the current offset). + bool m_ct_active{false}; + Vec3d m_ct_base{Vec3d::Zero()}; // body centre projected into the cut plane + Vec3d m_ct_n{Vec3d::UnitZ()}; // cut plane normal (unit) + Vec3d m_ct_u{Vec3d::UnitX()}; // cut plane U axis (unit) + Vec3d m_ct_v{Vec3d::UnitY()}; // cut plane V axis (unit) + double m_ct_offset{0.0}; + double m_ct_half{10.0}; + bool m_ct_drag{false}; + double m_ct_grab_val{0.0}; + double m_ct_grab_proj{0.0}; + void render_cut_gizmo(); + bool hit_test_cut_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + void start_cut_drag(GLCanvas3D& canvas, const wxMouseEvent& evt); + void drag_cut_arrow(GLCanvas3D& canvas, const wxMouseEvent& evt); + GLModel m_ct_stroke_model; + GLModel m_ct_rect_model; + std::function m_on_cut_offset_changed; + + // Pattern gizmo state. Linear arrow along m_pt_dirw from m_pt_base; circular arc like Revolve + // but axis = m_pt_normal through m_pt_origin (the world XY plane by default). + bool m_pt_active{false}; + bool m_pt_circular{false}; + Vec3d m_pt_base{Vec3d::Zero()}; // target body centroid (world): linear anchor / radius ref + Vec3d m_pt_dirw{Vec3d::UnitX()}; // linear march direction (world) + Vec3d m_pt_origin{Vec3d::Zero()}; // circular rotation axis origin (world) + Vec3d m_pt_normal{Vec3d::UnitZ()}; // circular rotation axis (world) + Vec3d m_pt_cref{Vec3d::UnitX()}; // circular angle-0 reference dir (perp to normal, toward body) + Vec3d m_pt_ccenter{Vec3d::Zero()}; // circular arc center (foot of body centroid on the axis) + double m_pt_radius{10.0}; // circular arc radius (world) + int m_pt_count{3}; + double m_pt_spacing{20.0}; + double m_pt_angle{360.0}; + bool m_pt_drag{false}; + int m_pt_press_x{0}, m_pt_press_y{0}; + void render_pattern_gizmo(); + bool hit_test_pattern_handle(GLCanvas3D& canvas, const wxMouseEvent& evt) const; + void drag_pattern_handle(GLCanvas3D& canvas, const wxMouseEvent& evt); + void open_pattern_editor(); + GLModel m_pt_stroke_model; +}; + +}} // namespace Slic3r::GUI + +#endif // slic3r_DesignSketchTool_hpp_ diff --git a/src/slic3r/GUI/CAD/McpControl.cpp b/src/slic3r/GUI/CAD/McpControl.cpp new file mode 100644 index 0000000000..8e34e2aac8 --- /dev/null +++ b/src/slic3r/GUI/CAD/McpControl.cpp @@ -0,0 +1,2221 @@ +#include "slic3r/GUI/CAD/McpControl.hpp" + +#ifndef _WIN32 // POSIX Unix-domain-socket transport only (slice 1) + +#include +#include +#include // umask/chmod: the socket's file mode IS its access control +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include // OCCT base error (not a std::exception) + +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/MainFrame.hpp" +#include "slic3r/GUI/CAD/DesignPanel.hpp" +#include "slic3r/GUI/CAD/DesignCanvas.hpp" +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" +#include "slic3r/GUI/CAD/DesignOffer.hpp" // offer table — served whole by list_verbs, fired by run_verb + +#include "libslic3r/CAD/CadDocument.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/Format/OBJ.hpp" +#include +#include +#include "libslic3r/BoundingBox.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using json = nlohmann::json; + +namespace Slic3r { namespace GUI { + +namespace { + +const char* feature_type_name(CadFeatureType t) +{ + switch (t) { + case CadFeatureType::Sketch: return "Sketch"; + case CadFeatureType::Extrude: return "Extrude"; + case CadFeatureType::Fillet: return "Fillet"; + case CadFeatureType::Chamfer: return "Chamfer"; + case CadFeatureType::Hole: return "Hole"; + case CadFeatureType::Thread: return "Thread"; + case CadFeatureType::Shell: return "Shell"; + case CadFeatureType::Revolve: return "Revolve"; + case CadFeatureType::Sweep: return "Sweep"; + case CadFeatureType::Pattern: return "Pattern"; + case CadFeatureType::Plane: return "Plane"; + case CadFeatureType::Loft: return "Loft"; + case CadFeatureType::Draft: return "Draft"; + case CadFeatureType::Import: return "Import"; + case CadFeatureType::Boolean: return "Boolean"; + case CadFeatureType::Cut: return "Cut"; + case CadFeatureType::Mirror: return "Mirror"; + case CadFeatureType::Axis: return "Axis"; + case CadFeatureType::CoordSys: return "CoordSys"; + case CadFeatureType::Helix: return "Helix"; + case CadFeatureType::Transform: return "Transform"; + case CadFeatureType::Thicken: return "Thicken"; + case CadFeatureType::Project: return "Project"; + case CadFeatureType::DeleteFace: return "DeleteFace"; + case CadFeatureType::Rib: return "Rib"; + case CadFeatureType::SurfaceExtrude: return "SurfaceExtrude"; + case CadFeatureType::SurfaceRevolve: return "SurfaceRevolve"; + case CadFeatureType::ThickenSurface: return "ThickenSurface"; + case CadFeatureType::SurfaceOffset: return "SurfaceOffset"; + case CadFeatureType::SurfaceLoft: return "SurfaceLoft"; + case CadFeatureType::SurfaceFill: return "SurfaceFill"; + case CadFeatureType::Mate: return "Mate"; + } + return "Unknown"; +} + +// --- JSON-RPC envelope helpers ------------------------------------------------- +std::string rpc_result(const json& id, const json& result) +{ + return json{{"jsonrpc", "2.0"}, {"id", id}, {"result", result}}.dump(); +} +std::string rpc_error(const json& id, int code, const std::string& msg) +{ + return json{{"jsonrpc", "2.0"}, {"id", id}, + {"error", {{"code", code}, {"message", msg}}}}.dump(); +} + +// --- the three slice-1 methods (run on the wx MAIN thread) --------------------- + +json describe_tools() +{ + // Hand-written descriptor. The bridge turns this into MCP tool schemas; later + // slices grow this list (ideally from the kernel directly). + return json{ + {"app", "Orca CAD"}, + {"protocol", "jsonrpc-2.0"}, + {"slice", 5}, + // Read this before using any face or edge id. + {"id_lifetime", + "Global face and edge ids are indices into the CURRENT topology and expire the moment " + "a feature rebuilds the model. Reading the scene once and then issuing several " + "operations addresses the wrong edge on every call after the first, and does NOT " + "error, because a stale id still names a real edge. Either re-read query_topology " + "before each id-taking call, or pass the 'generation' you were given back with the " + "call and have it refused if the model has moved on."}, + {"tools", json::array({ + json{{"name", "describe_tools"}, {"summary", "List callable tools and their parameters."}, + {"params", json::array()}}, + json{{"name", "describe_scene"}, {"summary", "Feature tree + per-body bounding boxes of the Design document."}, + {"params", json::array()}}, + json{{"name", "extrude"}, {"summary", "Extrude a profile to a depth. Give an explicit closed `profile` (list of [x,y]) or default to a centred width x height rectangle. End conditions match Onshape."}, + {"params", json::array({ + json{{"name", "width"}, {"type", "number"}, {"unit", "mm"}, {"default", 20}, {"min", 0.01}}, + json{{"name", "height"}, {"type", "number"}, {"unit", "mm"}, {"default", 20}, {"min", 0.01}}, + json{{"name", "distance"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + json{{"name", "profile"}, {"type", "array"}, {"default", json::array()}, {"description", "optional closed contour [[x,y],...] in plane mm; overrides width/height"}}, + json{{"name", "boolean"}, {"type", "string"}, {"enum", json::array({"new", "union", "subtract", "intersect"})}, {"default", "new"}}, + json{{"name", "end"}, {"type", "string"}, {"enum", json::array({"blind", "symmetric", "two_sided", "through_all", "up_to_face"})}, {"default", "blind"}}, + json{{"name", "distance2"},{"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "second-side depth when end=two_sided (else falls back to distance)"}}, + json{{"name", "up_to_face"},{"type", "integer"}, {"default", -1}, {"description", "target face id (query_topology on the last body) when end=up_to_face"}}, + json{{"name", "taper"}, {"type", "number"}, {"unit", "deg"}, {"default", 0}, {"description", "draft/taper of the side wall"}}, + json{{"name", "flip"}, {"type", "boolean"}, {"default", false}}, + })}}, + json{{"name", "revolve"}, {"summary", "Revolve a profile about a plane axis. Give an explicit `profile` offset from the axis (or a rectangle) — angle degrees about axis 0=plane X / 1=plane Y."}, + {"params", json::array({ + json{{"name", "width"}, {"type", "number"}, {"unit", "mm"}, {"default", 20}, {"min", 0.01}}, + json{{"name", "height"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 360}}, + json{{"name", "axis"}, {"type", "integer"}, {"enum", json::array({0, 1})}, {"default", 0}}, + json{{"name", "flip"}, {"type", "boolean"}, {"default", false}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + json{{"name", "profile"}, {"type", "array"}, {"default", json::array()}, {"description", "optional closed contour [[x,y],...] in plane mm; overrides width/height"}}, + json{{"name", "boolean"}, {"type", "string"}, {"enum", json::array({"new", "union", "subtract", "intersect"})}, {"default", "new"}}, + })}}, + json{{"name", "fillet"}, {"summary", "Round a measured edge of a body (edge id from query_topology on that body)."}, + {"params", json::array({ + json{{"name", "edge"}, {"type", "integer"}}, + json{{"name", "radius"}, {"type", "number"}, {"unit", "mm"}, {"default", 1}, {"min", 0.01}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body. edge id is resolved against THIS body."}}, + })}}, + json{{"name", "chamfer"}, {"summary", "Chamfer a measured edge of a body (edge id from query_topology on that body)."}, + {"params", json::array({ + json{{"name", "edge"}, {"type", "integer"}}, + json{{"name", "distance"}, {"type", "number"}, {"unit", "mm"}, {"default", 1}, {"min", 0.01}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body. edge id is resolved against THIS body."}}, + })}}, + json{{"name", "hole"}, {"summary", "Drill a circular hole into the current body at (x,y) on a plane."}, + {"params", json::array({ + json{{"name", "diameter"}, {"type", "number"}, {"unit", "mm"}, {"default", 5}, {"min", 0.01}}, + json{{"name", "depth"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "through"}, {"type", "boolean"}, {"default", false}}, + json{{"name", "x"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "y"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + })}}, + json{{"name", "hole_styled"}, {"summary", "Drill a hole with optional counterbore (style=1) or countersink (style=2) at (x,y) on a plane."}, + {"params", json::array({ + json{{"name", "diameter"}, {"type", "number"}, {"unit", "mm"}, {"default", 5}, {"min", 0.01}}, + json{{"name", "depth"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "through"}, {"type", "boolean"}, {"default", true}}, + json{{"name", "x"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "y"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + json{{"name", "style"}, {"type", "integer"}, {"default", 0}, {"description", "0=simple, 1=counterbore, 2=countersink"}}, + json{{"name", "cbore_diameter"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "cbore_depth"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "csink_diameter"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "csink_angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 90}}, + json{{"name", "standard"}, {"type", "string"}, {"default", ""}, {"description", "provenance designation, e.g. M6"}}, + })}}, + json{{"name", "hole_standard"}, {"summary", "Drill a standard clearance hole (ISO 273 / ANSI) at (x,y) on a plane. style: 0=simple, 1=counterbore, 2=countersink."}, + {"params", json::array({ + json{{"name", "designation"}, {"type", "string"}, {"description", "e.g. M6, 1/4-20"}}, + json{{"name", "style"}, {"type", "integer"}, {"default", 0}}, + json{{"name", "through"}, {"type", "boolean"}, {"default", true}}, + json{{"name", "depth"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "x"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "y"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}, {"description", "in the sketch plane's frame (origin = describe_scene.modeling_origin), NOT world"}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + })}}, + json{{"name", "boolean"}, {"summary", "Combine two bodies: union | subtract (tool from target) | intersect."}, + {"params", json::array({ + json{{"name", "op"}, {"type", "string"}, {"enum", json::array({"union", "subtract", "intersect"})}, {"default", "subtract"}}, + json{{"name", "target"}, {"type", "integer"}, {"default", 0}}, + json{{"name", "tool"}, {"type", "integer"}, {"default", 1}}, + json{{"name", "keep_tool"}, {"type", "boolean"}, {"default", false}}, + json{{"name", "tolerance"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + })}}, + json{{"name", "pattern"}, {"summary", "Replicate a body: linear (count along a plane axis at spacing) or circular (count over an angle about the plane normal)."}, + {"params", json::array({ + json{{"name", "circular"}, {"type", "boolean"}, {"default", false}}, + json{{"name", "count"}, {"type", "integer"}, {"default", 3}, {"min", 1}}, + json{{"name", "spacing"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"description", "linear step"}}, + json{{"name", "dir"}, {"type", "integer"}, {"enum", json::array({0, 1})}, {"default", 0}, {"description", "linear axis: 0=plane X, 1=plane Y"}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 360}, {"description", "circular total sweep"}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "pattern_on_curve"}, {"summary", "Replicate a body along a sketch curve: `count` copies placed at equal-parameter points on the entity, each translated by (P_i - P_0)."}, + {"params", json::array({ + json{{"name", "count"}, {"type", "integer"}, {"default", 3}, {"min", 1}}, + json{{"name", "sketch"}, {"type", "integer"}, {"description", "feature index of the sketch holding the guide curve"}}, + json{{"name", "entity"}, {"type", "integer"}, {"description", "entity index of the guide curve within that sketch"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "shell"}, {"summary", "Hollow a body to a wall thickness (inward); optionally leave one face open."}, + {"params", json::array({ + json{{"name", "thickness"}, {"type", "number"}, {"unit", "mm"}, {"default", 1}, {"min", 0.01}}, + json{{"name", "face"}, {"type", "integer"}, {"default", -1}, {"description", "face id to leave open (query_topology); omit for a closed hollow"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "draft"}, {"summary", "Taper a body face by an angle about its base (pull direction +Z)."}, + {"params", json::array({ + json{{"name", "face"}, {"type", "integer"}, {"description", "face id to draft (query_topology)"}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 5}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "mirror"}, {"summary", "Mirror a body about a base plane. mode=new creates a mirrored copy; mode=add fuses the mirror back into the source."}, + {"params", json::array({ + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XZ"}}, + json{{"name", "mode"}, {"type", "string"}, {"enum", json::array({"new", "add"})}, {"default", "new"}}, + json{{"name", "keep_original"},{"type", "boolean"}, {"default", true}, {"description", "when mode=new, keep the source body"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "transform"}, {"summary", "Move and/or rotate a body (B-rep transform). copy=true keeps the source and appends the transformed copy as a new body."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + json{{"name", "dx"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "dy"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "dz"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "axis_x"}, {"type", "number"}, {"default", 0}}, + json{{"name", "axis_y"}, {"type", "number"}, {"default", 0}}, + json{{"name", "axis_z"}, {"type", "number"}, {"default", 1}}, + json{{"name", "pivot_x"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "pivot_y"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "pivot_z"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 0}}, + json{{"name", "copy"}, {"type", "boolean"}, {"default", false}}, + })}}, + json{{"name", "axis"}, {"summary", "Create a datum axis (reference line): two points, face normal, cylinder centreline, plane intersection, or along edge."}, + {"params", json::array({ + json{{"name", "type"}, {"type", "string"}, {"enum", json::array({"two_points", "face_normal", "cylinder", "plane_intersection", "along_edge"})}, {"default", "two_points"}}, + json{{"name", "p1"}, {"type", "array"}, {"default", json::array({0,0,0})}, {"description", "first point [x,y,z] for two_points"}}, + json{{"name", "p2"}, {"type", "array"}, {"default", json::array({0,0,10})}, {"description", "second point [x,y,z] for two_points"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "body for face/edge refs"}}, + json{{"name", "face"}, {"type", "integer"}, {"default", -1}, {"description", "face id (query_topology) for face_normal/cylinder"}}, + json{{"name", "edge"}, {"type", "integer"}, {"default", -1}, {"description", "edge id (query_topology) for along_edge"}}, + json{{"name", "plane_a"}, {"type", "integer"}, {"default", -1}, {"description", "first datum plane feature index for plane_intersection"}}, + json{{"name", "plane_b"}, {"type", "integer"}, {"default", -1}, {"description", "second datum plane feature index for plane_intersection"}}, + })}}, + json{{"name", "coordsys"}, {"summary", "Create a datum coordinate system (origin + orthonormal axes). PointWorld aligns to world; FaceAndDirection uses a face for Z and an edge/hint for X."}, + {"params", json::array({ + json{{"name", "type"}, {"type", "string"}, {"enum", json::array({"point_world", "face_and_direction"})}, {"default", "point_world"}}, + json{{"name", "point"}, {"type", "array"}, {"default", json::array({0,0,0})}, {"description", "origin [x,y,z] for point_world"}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "body for face/edge refs"}}, + json{{"name", "face"}, {"type", "integer"}, {"default", -1}, {"description", "face id (query_topology) for Z axis"}}, + json{{"name", "edge"}, {"type", "integer"}, {"default", -1}, {"description", "edge id (query_topology) for X axis hint"}}, + json{{"name", "x_hint"}, {"type", "array"}, {"default", json::array({1,0,0})}, {"description", "fallback X direction hint if no edge given"}}, + })}}, + json{{"name", "helix"}, {"summary", "Create a helical curve (consumed by sweep as a path to build springs/coils/augers). pitch = axial rise per turn. left_handed flips the winding. taper_deg != 0 gives a conical helix."}, + {"params", json::array({ + json{{"name", "radius"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "pitch"}, {"type", "number"}, {"unit", "mm"}, {"default", 5}, {"min", 0.01}}, + json{{"name", "height"}, {"type", "number"}, {"unit", "mm"}, {"default", 20}, {"min", 0.01}}, + json{{"name", "left_handed"}, {"type", "boolean"}, {"default", false}}, + json{{"name", "taper_deg"}, {"type", "number"}, {"unit", "deg"}, {"default", 0}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + })}}, + json{{"name", "thicken"}, {"summary", "Offset a face of a body by a wall thickness, producing a new thin solid body."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + json{{"name", "face"}, {"type", "integer"}, {"description", "face id to thicken (query_topology)"}}, + json{{"name", "thickness"}, {"type", "number"}, {"unit", "mm"}, {"default", 2}, {"min", 0.01}}, + json{{"name", "flip"}, {"type", "boolean"}, {"default", false}}, + })}}, + json{{"name", "split"}, {"summary", "Split a body along the plane of a picked face."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + json{{"name", "face_body"}, {"type", "integer"}, {"default", -1}, {"description", "body that owns the face; -1 = target"}}, + json{{"name", "face"}, {"type", "integer"}, {"description", "face id to split along (query_topology)"}}, + json{{"name", "keep_upper"},{"type", "boolean"}, {"default", true}}, + json{{"name", "keep_lower"},{"type", "boolean"}, {"default", true}}, + })}}, + json{{"name", "project"}, {"summary", "Project edges of a solid onto a sketch plane, producing a new sketch feature."}, + {"params", json::array({ + json{{"name", "source_body"}, {"type", "integer"}, {"default", -1}, {"description", "body owning the edges; -1 = last body"}}, + json{{"name", "face"}, {"type", "integer"}, {"default", -1}, {"description", "global face id on the source body; when set, all its edges are projected"}}, + json{{"name", "edges"}, {"type", "array"}, {"default", json::array()}, {"description", "global edge ids to project; empty => project the face"}}, + json{{"name", "plane"}, {"type", "string"}, {"default", "XY"}, {"description", "target sketch plane (XY/XZ/YZ)"}}, + })}}, + json{{"name", "delete_face"}, {"summary", "Remove faces from a solid, healing the gap via OCCT defeaturing."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + json{{"name", "faces"}, {"type", "array"}, {"description", "global face ids to delete"}}, + })}}, + json{{"name", "bridge"}, {"summary", "Build a cubic-Bezier G1 bridge (BSpline) between two sketch-entity endpoints within a sketch feature."}, + {"params", json::array({ + json{{"name", "sketch"}, {"type", "integer"}, {"description", "sketch feature index"}}, + json{{"name", "ent_a"}, {"type", "integer"}, {"description", "first entity index within the sketch"}}, + json{{"name", "end_a"}, {"type", "integer"}, {"enum", json::array({0, 1})}, {"default", 1}, {"description", "0 = start/p0 side, 1 = end/p1 side"}}, + json{{"name", "ent_b"}, {"type", "integer"}, {"description", "second entity index within the sketch"}}, + json{{"name", "end_b"}, {"type", "integer"}, {"enum", json::array({0, 1})}, {"default", 0}, {"description", "0 = start/p0 side, 1 = end/p1 side"}}, + })}}, + json{{"name", "rib"}, {"summary", "Grow a thin rib wall (stiffener) from an open Line sketch entity, fused to a body."}, + {"params", json::array({ + json{{"name", "sketch"}, {"type", "integer"}, {"description", "sketch feature index holding the open line"}}, + json{{"name", "entity"}, {"type", "integer"}, {"description", "entity index of the open Line within the sketch"}}, + json{{"name", "thickness"}, {"type", "number"}, {"unit", "mm"}, {"default", 2}, {"min", 0.01}}, + json{{"name", "depth"}, {"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + json{{"name", "body"}, {"type", "integer"}, {"default", -1}, {"description", "target body; omit for the last body"}}, + })}}, + json{{"name", "surface_extrude"}, {"summary", "Extrude a sketch wire with no end caps -> an open sheet body."}, + {"params", json::array({ + json{{"name", "sketch"}, {"type", "integer"}, {"description", "sketch feature index"}}, + json{{"name", "distance"},{"type", "number"}, {"unit", "mm"}, {"default", 10}, {"min", 0.01}}, + })}}, + json{{"name", "surface_revolve"}, {"summary", "Revolve a sketch wire with no caps -> an open sheet body."}, + {"params", json::array({ + json{{"name", "sketch"}, {"type", "integer"}, {"description", "sketch feature index"}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 360}}, + json{{"name", "axis"}, {"type", "integer"}, {"enum", json::array({0, 1})}, {"default", 0}}, + })}}, + json{{"name", "mate"}, {"summary", "Mate two bodies: transform the moving body (cs_b) so its connector lands on the fixed one (cs_a). kind: 0=Fastened, 1=Planar, 2=Revolute, 3=Slider, 4=Cylindrical."}, + {"params", json::array({ + json{{"name", "kind"}, {"type", "integer"}, {"default", 0}, {"description", "0=Fastened (rigid), 1=Planar (normal only), 2=Revolute (free rotation about axis), 3=Slider (free translation along axis), 4=Cylindrical (free rotation+translation)"}}, + json{{"name", "cs_a"}, {"type", "integer"}, {"description", "feature index of the fixed CoordSys (mate connector A)"}}, + json{{"name", "cs_b"}, {"type", "integer"}, {"description", "feature index of the CoordSys on the body that moves"}}, + json{{"name", "offset"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + json{{"name", "angle"}, {"type", "number"}, {"unit", "deg"}, {"default", 0}}, + json{{"name", "flip"}, {"type", "boolean"}, {"default", false}}, + })}}, + json{{"name", "check_interference"}, {"summary", "Solid bodies that overlap, as {body_a, body_b, volume}. Read-only; bodies that merely touch enclose no volume and are not reported."}, + {"params", json::array({ + json{{"name", "min_volume"}, {"type", "number"}, {"unit", "mm^3"}, {"default", 1e-6}, {"description", "overlap volume above which a pair counts as interfering"}}, + })}}, + json{{"name", "query_topology"}, {"summary", "Measured faces (centroid/normal/cylinder) and edges (length/circle) of a body."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", 0}}, + })}}, + json{{"name", "measure"}, {"summary", "Distance (and angle, when both have direction) between two refs {face|edge|point} on a body."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", 0}}, + json{{"name", "a"}, {"type", "object"}}, + json{{"name", "b"}, {"type", "object"}}, + })}}, + json{{"name", "mass_properties"}, {"summary", "Volume / surface area / centre of mass / inertia tensor of a body."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", 0}}, + })}}, + json{{"name", "slice_body"}, {"summary", "Cross-section of a body by a base plane at an offset (sections-as-evidence); returns ordered world contours, each flagged closed/open."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", 0}}, + json{{"name", "plane"}, {"type", "string"}, {"enum", json::array({"XY", "XZ", "YZ"})}, {"default", "XY"}}, + json{{"name", "offset"}, {"type", "number"}, {"unit", "mm"}, {"default", 0}}, + })}}, + json{{"name", "import_step"}, {"summary", "Import a STEP file as native B-rep bodies (the reference part to measure)."}, + {"params", json::array({ + json{{"name", "path"}, {"type", "string"}}, + })}}, + json{{"name", "import_mesh"}, {"summary", "Convert a triangle mesh (STL/OBJ) into an editable B-rep body. Reports whether the result is a real solid or an open shell, and why."}, + {"params", json::array({ + json{{"name", "path"}, {"type", "string"}}, + json{{"name", "tolerance"}, {"type", "number"}, {"default", 0.01}}, + json{{"name", "merge_angle_deg"}, {"type", "number"}, {"default", 5.0}}, + })}}, + json{{"name", "validate_against"}, {"summary", "Volume + bbox/centroid + surface deviation (max/mean/rms mm) of a body vs a reference {step:path|body:id} (the RE acceptance metric)."}, + {"params", json::array({ + json{{"name", "body"}, {"type", "integer"}, {"default", 0}}, + json{{"name", "reference"}, {"type", "object"}}, + })}}, + })}, + }; +} + +json describe_scene(DesignPanel* panel) +{ + CadDocument& doc = panel->mcp_doc(); + + json features = json::array(); + for (size_t i = 0; i < doc.features.size(); ++i) { + const CadFeature& f = doc.features[i]; + features.push_back(json{ + {"index", int(i)}, {"type", feature_type_name(f.type)}, + {"name", f.name}, {"enabled", f.enabled}}); + } + + json bodies = json::array(); + for (size_t i = 0; i < doc.bodies.size(); ++i) { + // The user's name when the body has one, the derived maker name otherwise — the same + // rule the Bodies row shows, so a driver and a person read the same thing. + json b{{"index", int(i)}, + {"name", doc.bodies[i].has_user_name ? doc.bodies[i].user_name : doc.bodies[i].name}, + {"user_name", doc.bodies[i].has_user_name}, + {"has_color", doc.bodies[i].has_color}}; + // Per-body bbox/centre from the already-tessellated display meshes. + if (i < doc.display_body_meshes.size() && !doc.display_body_meshes[i].empty()) { + BoundingBoxf3 bb = doc.display_body_meshes[i].bounding_box(); + b["bbox"] = json{{"min", {bb.min.x(), bb.min.y(), bb.min.z()}}, + {"max", {bb.max.x(), bb.max.y(), bb.max.z()}}}; + Vec3d c = bb.center(); + b["center"] = {c.x(), c.y(), c.z()}; + } + bodies.push_back(std::move(b)); + } + + return json{ + {"modeling_origin", {doc.modeling_origin.x(), doc.modeling_origin.y(), doc.modeling_origin.z()}}, + {"features", std::move(features)}, + {"bodies", std::move(bodies)}, + {"error", doc.error}, + // Pass this back as "generation" on any call that takes a face or edge id and the call + // is refused if the topology has moved on. See the note on the dispatcher. + {"generation", doc.topo_generation}, + }; +} + +// --- Measure layer (read-only "evidence" half of the RE loop) ------------------ +inline json vec3(const Vec3d& v) { return json::array({v.x(), v.y(), v.z()}); } + +// Shared Build helpers. +SketchPlane plane_from(const json& params, const CadDocument& doc) +{ + std::string n = params.value("plane", std::string("XY")); + SketchPlane pl = n == "XZ" ? SketchPlane::XZ() : n == "YZ" ? SketchPlane::YZ() : SketchPlane::XY(); + pl.origin = doc.modeling_origin; // land on the bed centre, like the GUI + return pl; +} +BooleanMode bool_from(const std::string& s) +{ + if (s == "union" || s == "add") return BooleanMode::Add; + if (s == "subtract" || s == "cut") return BooleanMode::Cut; + if (s == "intersect" || s == "common")return BooleanMode::Intersect; + return BooleanMode::New; +} +// Optional explicit closed profile: params["profile"] = [[x,y],...] in plane mm. +// This is the Measure->Build bridge — feed a measured contour straight back. +bool profile_from(const json& params, SketchProfile& out) +{ + if (!params.contains("profile")) return false; + out.points.clear(); + for (const auto& p : params["profile"]) out.points.emplace_back(p[0].get(), p[1].get()); + out.closed = true; + return out.points.size() >= 3; +} + +// Resolve body index -> shape, throwing a clear error if out of range / null. +const TopoDS_Shape& body_shape(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + int idx = params.value("body", 0); + if (idx < 0 || idx >= int(doc.bodies.size())) + throw std::runtime_error("body index out of range (have " + std::to_string(doc.bodies.size()) + ")"); + if (doc.bodies[idx].shape.IsNull()) + throw std::runtime_error("body has no shape"); + return doc.bodies[idx].shape; +} + +json query_topology(DesignPanel* panel, const json& params) +{ + const TopoDS_Shape& shape = body_shape(panel, params); + // Enumerate once. The _by_index accessors rescan the shape on every call (edge_by_index + // rebuilds the whole indexed map), so indexing a body face-by-face is quadratic: ~15 s on a + // 4.7k-face imported solid, on the UI thread. faces_of/edges_of keep the very same ids. + const std::vector all_faces = GeometryEngine::faces_of(shape); + const std::vector all_edges = GeometryEngine::edges_of(shape); + + json faces = json::array(); + const int nf = int(all_faces.size()); + for (int i = 0; i < nf; ++i) { + const TopoDS_Face& f = all_faces[i]; + if (f.IsNull()) continue; + json jf{{"id", i}, {"centroid", vec3(GeometryEngine::face_centroid_world(f))}, + {"normal", vec3(GeometryEngine::face_normal_world(f))}, {"kind", "planar"}}; + GeometryEngine::CylinderFace cyl = GeometryEngine::cylinder_of_face(f); + if (cyl.ok) { jf["kind"] = "cylindrical"; jf["radius"] = cyl.radius; + jf["axis"] = vec3(cyl.axis); jf["internal"] = cyl.internal; } + faces.push_back(std::move(jf)); + } + json edges = json::array(); + const int ne = int(all_edges.size()); + for (int i = 0; i < ne; ++i) { + const TopoDS_Edge& e = all_edges[i]; + if (e.IsNull()) continue; + std::vector pts = GeometryEngine::sample_edge_world(e); + if (pts.size() < 2) continue; + double len = 0; for (size_t k = 1; k < pts.size(); ++k) len += (pts[k] - pts[k-1]).norm(); + json je{{"id", i}, {"length", len}, {"p0", vec3(pts.front())}, {"p1", vec3(pts.back())}, + {"kind", "line"}}; + GeometryEngine::CylinderFace circ = GeometryEngine::circle_of_edge(e); + if (circ.ok) { je["kind"] = "circle"; je["radius"] = circ.radius; je["center"] = vec3(circ.base); } + edges.push_back(std::move(je)); + } + return json{{"body", params.value("body", 0)}, {"face_count", nf}, {"edge_count", ne}, + {"faces", std::move(faces)}, {"edges", std::move(edges)}, + // The ids above are indices into this exact topology and expire with it. Echo + // this back as "generation" on the calls that consume them. + {"generation", panel->mcp_doc().topo_generation}}; +} + +// One measurement reference -> a representative point and (optionally) a direction. +// ref = {"face": id} | {"edge": id} | {"point": [x,y,z]} on the given body. +bool resolve_ref(const TopoDS_Shape& shape, const json& ref, Vec3d& point, Vec3d& dir, bool& has_dir) +{ + has_dir = false; + if (ref.contains("point")) { auto p = ref["point"]; point = Vec3d(p[0], p[1], p[2]); return true; } + if (ref.contains("face")) { + TopoDS_Face f = GeometryEngine::face_by_index(shape, ref["face"].get()); + if (f.IsNull()) return false; + point = GeometryEngine::face_centroid_world(f); + dir = GeometryEngine::face_normal_world(f); has_dir = true; return true; + } + if (ref.contains("edge")) { + TopoDS_Edge e = GeometryEngine::edge_by_index(shape, ref["edge"].get()); + if (e.IsNull()) return false; + std::vector pts = GeometryEngine::sample_edge_world(e); + if (pts.empty()) return false; + point = pts[pts.size() / 2]; // midpoint sample + if (pts.size() >= 2) { dir = (pts.back() - pts.front()).normalized(); has_dir = true; } + return true; + } + return false; +} + +json measure(DesignPanel* panel, const json& params) +{ + const TopoDS_Shape& shape = body_shape(panel, params); + Vec3d pa, pb, da, db; bool hda = false, hdb = false; + if (!params.contains("a") || !params.contains("b")) + throw std::runtime_error("measure needs refs 'a' and 'b' ({face|edge|point})"); + if (!resolve_ref(shape, params["a"], pa, da, hda) || !resolve_ref(shape, params["b"], pb, db, hdb)) + throw std::runtime_error("could not resolve a measurement reference"); + json r{{"distance", (pa - pb).norm()}, {"point_a", vec3(pa)}, {"point_b", vec3(pb)}}; + if (hda && hdb) { + double c = std::max(-1.0, std::min(1.0, da.normalized().dot(db.normalized()))); + r["angle_deg"] = std::acos(c) * 180.0 / M_PI; + } + return r; +} + +json mass_properties(DesignPanel* panel, const json& params) +{ + const TopoDS_Shape& shape = body_shape(panel, params); + auto mp = GeometryEngine::mass_properties(shape); + if (!mp.valid) throw std::runtime_error("mass properties could not be computed (null/empty shape)"); + // A sheet body has no volume and no inertia. Report the area and say so, rather than + // returning numbers a caller would reasonably treat as a material check. + if (!mp.is_solid) + return json{ + {"surface_area", mp.surface_area}, + {"volume", 0.0}, + {"is_solid", false}, + {"valid", mp.valid}, + {"note", "sheet body (open shell): it encloses no material, so volume and inertia " + "are not defined; surface_area is exact"}, + }; + return json{ + {"volume", mp.volume}, + {"surface_area", mp.surface_area}, + {"center_of_mass", json::array({mp.center_of_mass.x(), mp.center_of_mass.y(), mp.center_of_mass.z()})}, + {"inertia", mp.inertia}, + {"is_solid", true}, + {"valid", mp.valid}, + }; +} + +// Chain raw section segments (each a sampled-edge polyline) into ordered contours by joining +// endpoints within tol. Grows the tail; when the tail is stuck, reverses the contour and grows +// the other end. A contour is closed when its two ends meet. OCCT section vertices are exact, +// so a small absolute tol suffices. +std::vector, bool>> +chain_segments(std::vector> segs, double tol) +{ + std::vector, bool>> contours; + std::vector used(segs.size(), 0); + auto meets = [&](const Vec3d& a, const Vec3d& b) { return (a - b).norm() <= tol; }; + for (size_t i = 0; i < segs.size(); ++i) { + if (used[i] || segs[i].size() < 2) continue; + used[i] = 1; + std::vector c = segs[i]; + for (int side = 0; side < 2; ) { // grow tail; reverse once when stuck + bool grew = false; + for (size_t j = 0; j < segs.size(); ++j) { + if (used[j] || segs[j].size() < 2) continue; + if (meets(c.back(), segs[j].front())) { + c.insert(c.end(), segs[j].begin() + 1, segs[j].end()); used[j] = 1; grew = true; + } else if (meets(c.back(), segs[j].back())) { + for (auto it = segs[j].rbegin() + 1; it != segs[j].rend(); ++it) c.push_back(*it); + used[j] = 1; grew = true; + } + } + if (grew) { side = 0; continue; } + std::reverse(c.begin(), c.end()); ++side; // try the other end + } + bool closed = c.size() > 2 && meets(c.front(), c.back()); + contours.emplace_back(std::move(c), closed); + } + return contours; +} + +// sections-as-evidence: cross-section of a body by a named base plane at an offset. +json slice_body(DesignPanel* panel, const json& params) +{ + const TopoDS_Shape& shape = body_shape(panel, params); + const std::string plane_name = params.value("plane", std::string("XY")); + const double offset = params.value("offset", 0.0); + // Base plane normal; offset shifts the plane along it. + gp_Dir n = plane_name == "XZ" ? gp_Dir(0, 1, 0) + : plane_name == "YZ" ? gp_Dir(1, 0, 0) + : gp_Dir(0, 0, 1); + gp_Pnt o(n.X() * offset, n.Y() * offset, n.Z() * offset); + BRepAlgoAPI_Section sect(shape, gp_Pln(o, n), Standard_False); + sect.ComputePCurveOn1(Standard_False); + sect.Approximation(Standard_True); + sect.Build(); + if (!sect.IsDone()) throw std::runtime_error("section failed"); + std::vector> segs; + for (TopExp_Explorer ex(sect.Shape(), TopAbs_EDGE); ex.More(); ex.Next()) { + std::vector pts = GeometryEngine::sample_edge_world(TopoDS::Edge(ex.Current())); + if (pts.size() >= 2) segs.push_back(std::move(pts)); + } + const int raw = int(segs.size()); + auto contours = chain_segments(std::move(segs), 1e-3); + json jcont = json::array(); + int closed_n = 0; + for (auto& pc : contours) { + if (pc.second) ++closed_n; + json pts = json::array(); + for (const Vec3d& p : pc.first) pts.push_back(vec3(p)); + jcont.push_back(json{{"closed", pc.second}, {"points", std::move(pts)}}); + } + return json{{"body", params.value("body", 0)}, {"plane", plane_name}, {"offset", offset}, + {"segment_count", raw}, {"contour_count", int(contours.size())}, + {"closed_count", closed_n}, {"contours", std::move(jcont)}}; +} + +// --- Build: bring a reference part in (Import STEP as native B-rep bodies) ------ +json import_step(DesignPanel* panel, const json& params) +{ + if (!params.contains("path")) throw std::runtime_error("import_step needs 'path'"); + const std::string path = params["path"].get(); + std::string err; + std::vector solids = GeometryEngine::read_step_solids(path, err); + if (solids.empty()) throw std::runtime_error(err.empty() ? "no solids in STEP" : err); + + CadDocument& doc = panel->mcp_doc(); + doc.checkpoint(); + int first = int(doc.features.size()); + for (const TopoDS_Shape& s : solids) { + CadFeature f; + f.type = CadFeatureType::Import; + f.name = "STEP" + std::to_string(int(doc.features.size()) + 1); + f.imported_solid = s; + f.mode = BooleanMode::New; // each solid = its own coexisting body + doc.features.push_back(f); + } + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"imported", int(solids.size())}, {"first_feature", first}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +// --- Import a triangle mesh as a B-rep body (GeometryEngine::mesh_to_brep) --- +// Same destination as import_step: a CadFeatureType::Import body every feature tool can edit. +// The full conversion stats come back so a caller can tell an honest solid from an open shell +// instead of discovering it later when a boolean silently fails. +json import_mesh(DesignPanel* panel, const json& params) +{ + if (!params.contains("path")) throw std::runtime_error("import_mesh needs 'path'"); + const std::string path = params["path"].get(); + const double tolerance = params.value("tolerance", 0.01); + const double merge_angle_deg = params.value("merge_angle_deg", 5.0); + + TriangleMesh mesh; + const std::string ext = boost::algorithm::to_lower_copy( + boost::filesystem::path(path).extension().string()); + if (ext == ".stl") { + if (!mesh.ReadSTLFile(path.c_str())) throw std::runtime_error("could not read STL: " + path); + } else if (ext == ".obj") { + ObjInfo obj_info; std::string obj_err; + if (!load_obj(path.c_str(), &mesh, obj_info, obj_err)) + throw std::runtime_error("could not read OBJ: " + obj_err); + } else { + throw std::runtime_error("unsupported mesh format (want .stl or .obj): " + ext); + } + + GeometryEngine::MeshBrepStats st; + const TopoDS_Shape shape = GeometryEngine::mesh_to_brep(mesh.its, tolerance, merge_angle_deg, st); + if (shape.IsNull()) throw std::runtime_error("mesh conversion produced no geometry"); + + CadDocument& doc = panel->mcp_doc(); + doc.checkpoint(); + const int first = int(doc.features.size()); + CadFeature f; + f.type = CadFeatureType::Import; + f.name = "Mesh" + std::to_string(first + 1); + f.imported_solid = shape; + f.mode = BooleanMode::New; + doc.features.push_back(f); + + const bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"first_feature", first}, {"bodies", int(doc.bodies.size())}, + {"input_triangles", st.input_tris}, {"kept_triangles", st.kept_tris}, + {"degenerate_collapsed", st.degenerate_collapsed}, + {"degenerate_sliver", st.degenerate_sliver}, + {"faces_built", st.faces_built}, {"faces_failed", st.faces_failed}, + {"faces_final", st.faces_final}, {"unique_edges", st.unique_edges}, + {"boundary_edges", st.boundary_edges}, + {"nonmanifold_edges", st.nonmanifold_edges}, + {"watertight", st.watertight}, {"is_solid", st.is_solid}, + {"volume", st.volume}, {"error", doc.error}}; +} + +// --- Validate: volume + bbox deviation of a body vs a reference (the "scarto %") -- +// ponytail: volume delta + bbox/centroid offset (the RE skill's actual acceptance metric). +// Surface-deviation heat-map is the upgrade path (per-vertex BRepExtrema), add when needed. +struct ShapeMetrics { double volume; Vec3d centroid, bmin, bmax; }; +ShapeMetrics shape_metrics(const TopoDS_Shape& s) +{ + GProp_GProps vp; BRepGProp::VolumeProperties(s, vp); + gp_Pnt c = vp.CentreOfMass(); + Bnd_Box bb; BRepBndLib::Add(s, bb); + Standard_Real x0, y0, z0, x1, y1, z1; bb.Get(x0, y0, z0, x1, y1, z1); + return {vp.Mass(), Vec3d(c.X(), c.Y(), c.Z()), Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}; +} + +json validate_against(DesignPanel* panel, const json& params) +{ + const TopoDS_Shape& cand = body_shape(panel, params); // candidate = the reconstruction + if (!params.contains("reference")) throw std::runtime_error("validate_against needs 'reference' {step|body}"); + const json& r = params["reference"]; + + TopoDS_Shape ref; + if (r.contains("step")) { + std::string err; + std::vector solids = GeometryEngine::read_step_solids(r["step"].get(), err); + if (solids.empty()) throw std::runtime_error(err.empty() ? "reference STEP has no solids" : err); + BRep_Builder b; TopoDS_Compound comp; b.MakeCompound(comp); + for (const TopoDS_Shape& s : solids) if (!s.IsNull()) b.Add(comp, s); + ref = comp; + } else if (r.contains("body")) { + CadDocument& doc = panel->mcp_doc(); + int idx = r["body"].get(); + if (idx < 0 || idx >= int(doc.bodies.size()) || doc.bodies[idx].shape.IsNull()) + throw std::runtime_error("reference body index out of range / null"); + ref = doc.bodies[idx].shape; + } else { + throw std::runtime_error("reference must be {\"step\": path} or {\"body\": id}"); + } + + ShapeMetrics a = shape_metrics(cand), b = shape_metrics(ref); + double dv = b.volume > 0 ? (a.volume - b.volume) / b.volume * 100.0 : 0.0; + Vec3d coff = a.centroid - b.centroid; + Vec3d dmin = a.bmin - b.bmin, dmax = a.bmax - b.bmax; + // Surface-level deviation (one-sided Hausdorff, candidate vertices -> reference solid): + // catches local shape error that matching volume + bbox can hide. + GeometryEngine::Deviation dev = GeometryEngine::surface_deviation(cand, ref); + return json{ + {"volume", a.volume}, {"volume_reference", b.volume}, {"volume_delta_pct", dv}, + {"centroid_offset", vec3(coff)}, {"centroid_offset_mm", coff.norm()}, + {"bbox", json{{"min", vec3(a.bmin)}, {"max", vec3(a.bmax)}}}, + {"bbox_reference", json{{"min", vec3(b.bmin)}, {"max", vec3(b.bmax)}}}, + {"bbox_delta", json{{"min", vec3(dmin)}, {"max", vec3(dmax)}}}, + {"surface_deviation", json{{"max_mm", dev.max_mm}, {"mean_mm", dev.mean_mm}, + {"rms_mm", dev.rms_mm}, {"samples", dev.sample_count}}}, + }; +} + +json action_extrude(DesignPanel* panel, const json& params) +{ + const double d = params.value("distance", 10.0); + if (d <= 0) throw std::runtime_error("distance must be > 0"); + CadDocument& doc = panel->mcp_doc(); + SketchPlane pl = plane_from(params, doc); + BooleanMode mode = bool_from(params.value("boolean", std::string("new"))); + + SketchProfile prof; + bool has_prof = profile_from(params, prof); + double w = 0, h = 0; + if (!has_prof) { + w = params.value("width", 20.0); h = params.value("height", 20.0); + if (w <= 0 || h <= 0) throw std::runtime_error("width and height must be > 0"); + } + doc.checkpoint(); + int s = has_prof ? doc.add_sketch_profile(prof, pl, "Sketch") + : doc.add_sketch(SketchShape::Rectangle, pl, w, h, 0.0, "Sketch"); + int e = doc.add_extrude(s, d, /*symmetric*/false, mode, "Extrude"); + // End condition (Onshape parity). apply reads extrude_end directly; the kernel `symmetric` + // bool is unused, so set the field here. up_to_face id comes from query_topology on the + // target (last) body. taper_deg lofts the side wall; flip negates the direction. + const std::string end = params.value("end", std::string("blind")); + CadFeature& fe = doc.features[e]; + fe.flip = params.value("flip", false); + fe.taper_deg = params.value("taper", 0.0); + if (end == "symmetric") fe.extrude_end = ExtrudeEnd::Symmetric; + else if (end == "two_sided") { fe.extrude_end = ExtrudeEnd::TwoSided; fe.distance2 = params.value("distance2", d); } + else if (end == "through_all") fe.extrude_end = ExtrudeEnd::ThroughAll; + else if (end == "up_to_face") { fe.extrude_end = ExtrudeEnd::UpToFace; fe.up_to_face = params.value("up_to_face", -1); } + else fe.extrude_end = ExtrudeEnd::Blind; + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"sketch_index", s}, {"extrude_index", e}, {"end", end}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_revolve(DesignPanel* panel, const json& params) +{ + const double angle = params.value("angle", 360.0); + const int axis = params.value("axis", 0); // 0 = plane X, 1 = plane Y + const bool flip = params.value("flip", false); + CadDocument& doc = panel->mcp_doc(); + SketchPlane pl = plane_from(params, doc); + BooleanMode mode = bool_from(params.value("boolean", std::string("new"))); + + SketchProfile prof; + bool has_prof = profile_from(params, prof); + double w = 0, h = 0; + if (!has_prof) { // ponytail: rectangle centred on the axis may self-overlap; offset via `profile` + w = params.value("width", 20.0); h = params.value("height", 10.0); + if (w <= 0 || h <= 0) throw std::runtime_error("width and height must be > 0"); + } + doc.checkpoint(); + int s = has_prof ? doc.add_sketch_profile(prof, pl, "Sketch") + : doc.add_sketch(SketchShape::Rectangle, pl, w, h, 0.0, "Sketch"); + int r = doc.add_revolve(s, angle, axis, flip, mode, "Revolve"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"sketch_index", s}, {"revolve_index", r}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +// Resolve an optional explicit body target. Default (no `body`, or <0) = last body, which is +// what the kernel picks anyway. Validated BEFORE any checkpoint so a bad index throws clean. +int target_body_arg(const json& params, const CadDocument& doc) +{ + int bi = params.value("body", -1); + if (bi >= int(doc.bodies.size())) + throw std::runtime_error("body index out of range (have " + std::to_string(doc.bodies.size()) + ")"); + return bi; // <0 -> kernel uses the last body +} + +json action_fillet(DesignPanel* panel, const json& params) +{ + if (!params.contains("edge")) throw std::runtime_error("fillet needs 'edge' (id from query_topology)"); + const double radius = params.value("radius", 1.0); + if (radius <= 0) throw std::runtime_error("radius must be > 0"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to fillet"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int f = doc.add_fillet(radius, params["edge"].get(), "Fillet"); + if (bi >= 0) doc.features[f].target_body = bi; // edge id resolved against THIS body's shape + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"fillet_index", f}, {"body", bi < 0 ? int(doc.bodies.size()) - 1 : bi}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_chamfer(DesignPanel* panel, const json& params) +{ + if (!params.contains("edge")) throw std::runtime_error("chamfer needs 'edge' (id from query_topology)"); + const double dist = params.value("distance", 1.0); + if (dist <= 0) throw std::runtime_error("distance must be > 0"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to chamfer"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int c = doc.add_chamfer(dist, params["edge"].get(), "Chamfer"); + if (bi >= 0) doc.features[c].target_body = bi; // edge id resolved against THIS body's shape + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"chamfer_index", c}, {"body", bi < 0 ? int(doc.bodies.size()) - 1 : bi}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_hole(DesignPanel* panel, const json& params) +{ + const double dia = params.value("diameter", 5.0); + const double depth = params.value("depth", 10.0); + const bool thru = params.value("through", false); + const double x = params.value("x", 0.0), y = params.value("y", 0.0); + if (dia <= 0) throw std::runtime_error("diameter must be > 0"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to drill"); + SketchPlane pl = plane_from(params, doc); + doc.checkpoint(); + int h = doc.add_hole(dia, depth, thru, x, y, pl, "Hole"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"hole_index", h}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_hole_styled(DesignPanel* panel, const json& params) +{ + const double dia = params.value("diameter", 5.0); + const double depth = params.value("depth", 10.0); + const bool thru = params.value("through", true); + const double x = params.value("x", 0.0), y = params.value("y", 0.0); + const int style = params.value("style", 0); + const double cbore_diameter = params.value("cbore_diameter", 0.0); + const double cbore_depth = params.value("cbore_depth", 0.0); + const double csink_diameter = params.value("csink_diameter", 0.0); + const double csink_angle = params.value("csink_angle", 90.0); + const std::string standard = params.value("standard", std::string("")); + if (dia <= 0) throw std::runtime_error("diameter must be > 0"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to drill"); + SketchPlane pl = plane_from(params, doc); + doc.checkpoint(); + int h = doc.add_hole_styled(dia, depth, thru, x, y, pl, style, + cbore_diameter, cbore_depth, + csink_diameter, csink_angle, standard, "Hole"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"hole_index", h}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_hole_standard(DesignPanel* panel, const json& params) +{ + const std::string desig = params.value("designation", std::string("")); + if (desig.empty()) throw std::runtime_error("designation is required"); + const int style = params.value("style", 0); + const bool thru = params.value("through", true); + const double depth = params.value("depth", 10.0); + const double x = params.value("x", 0.0), y = params.value("y", 0.0); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to drill"); + SketchPlane pl = plane_from(params, doc); + doc.checkpoint(); + try { + int h = doc.add_hole_standard(desig, style, thru, depth, x, y, pl, "Hole"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"hole_index", h}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; + } catch (const std::exception& ex) { + doc.undo(); + panel->mcp_after_change(); + return json{{"ok", false}, {"error", ex.what()}}; + } +} + +json action_boolean(DesignPanel* panel, const json& params) +{ + BooleanMode m = bool_from(params.value("op", std::string("subtract"))); + if (m == BooleanMode::New) throw std::runtime_error("op must be union | subtract | intersect"); + const int target = params.value("target", 0); + const int tool = params.value("tool", 1); + const bool keep = params.value("keep_tool", false); + const double tol = params.value("tolerance", 0.0); + CadDocument& doc = panel->mcp_doc(); + int n = int(doc.bodies.size()); + if (target < 0 || target >= n || tool < 0 || tool >= n) + throw std::runtime_error("target/tool body index out of range (have " + std::to_string(n) + ")"); + if (target == tool) throw std::runtime_error("target and tool must differ"); + doc.checkpoint(); + int b = doc.add_boolean(m, target, tool, keep, tol, -1, -1, "Boolean"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"boolean_index", b}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_pattern(DesignPanel* panel, const json& params) +{ + const bool circular = params.value("circular", false); + const int count = params.value("count", 3); + const double spacing = params.value("spacing", 10.0); // linear step (mm) + const int dir = params.value("dir", 0); // 0 = plane X, 1 = plane Y + const double angle = params.value("angle", 360.0); // circular total sweep (deg) + if (count < 1) throw std::runtime_error("count must be >= 1"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to pattern"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int p = doc.add_pattern(circular, count, spacing, dir, angle, bi, "Pattern"); + doc.features[p].plane = plane_from(params, doc); // axis (circular) / step dirs (linear) + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"pattern_index", p}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_pattern_on_curve(DesignPanel* panel, const json& params) +{ + const int count = params.value("count", 3); + if (count < 1) throw std::runtime_error("count must be >= 1"); + if (!params.contains("sketch")) throw std::runtime_error("pattern_on_curve needs 'sketch' (feature index)"); + if (!params.contains("entity")) throw std::runtime_error("pattern_on_curve needs 'entity' (entity index)"); + const int sketch = params["sketch"].get(); + const int entity = params["entity"].get(); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to pattern"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int p = doc.add_pattern_on_curve(count, sketch, entity, bi, "PatternOnCurve"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"pattern_index", p}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_shell(DesignPanel* panel, const json& params) +{ + const double thickness = params.value("thickness", 1.0); + if (thickness <= 0) throw std::runtime_error("thickness must be > 0"); + const int face = params.value("face", -1); // face id to leave open (-1 = closed hollow) + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to shell"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int s = doc.add_shell(thickness, face, bi, "Shell"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"shell_index", s}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_rib(DesignPanel* panel, const json& params) +{ + if (!params.contains("sketch")) throw std::runtime_error("rib needs 'sketch' (feature index)"); + if (!params.contains("entity")) throw std::runtime_error("rib needs 'entity' (entity index)"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to rib"); + int sketch = params["sketch"].get(); + int entity = params["entity"].get(); + double thickness = params.value("thickness", 2.0); + double depth = params.value("depth", 10.0); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int idx = doc.add_rib(sketch, entity, thickness, depth, bi, "Rib"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"rib_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_surface_extrude(DesignPanel* panel, const json& params) +{ + if (!params.contains("sketch")) throw std::runtime_error("surface_extrude needs 'sketch' (feature index)"); + CadDocument& doc = panel->mcp_doc(); + int sketch = params["sketch"].get(); + double distance = params.value("distance", 10.0); + doc.checkpoint(); + int idx = doc.add_surface_extrude(sketch, distance, "SurfaceExtrude"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_surface_revolve(DesignPanel* panel, const json& params) +{ + if (!params.contains("sketch")) throw std::runtime_error("surface_revolve needs 'sketch' (feature index)"); + CadDocument& doc = panel->mcp_doc(); + int sketch = params["sketch"].get(); + double angle = params.value("angle", 360.0); + int axis = params.value("axis", 0); + doc.checkpoint(); + int idx = doc.add_surface_revolve(sketch, angle, axis, "SurfaceRevolve"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_thicken_surface(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no sheet body to thicken"); + int bi = target_body_arg(params, doc); + double thickness = params.value("thickness", 2.0); + bool flip = params.value("flip", false); + doc.checkpoint(); + int idx = doc.add_thicken_surface(bi, thickness, flip, "ThickenSurface"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_surface_offset(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no sheet body to offset"); + int bi = target_body_arg(params, doc); + double offset = params.value("offset", 1.0); + doc.checkpoint(); + int idx = doc.add_surface_offset(bi, offset, "SurfaceOffset"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_surface_loft(DesignPanel* panel, const json& params) +{ + if (!params.contains("profiles") || !params["profiles"].is_array()) + throw std::runtime_error("surface_loft needs 'profiles' (array of int feature indices)"); + CadDocument& doc = panel->mcp_doc(); + std::vector profiles; + for (const json& j : params["profiles"]) profiles.push_back(j.get()); + bool ruled = params.value("ruled", false); + doc.checkpoint(); + int idx = doc.add_surface_loft(profiles, ruled, "SurfaceLoft"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_surface_fill(DesignPanel* panel, const json& params) +{ + if (!params.contains("sketch")) throw std::runtime_error("surface_fill needs 'sketch' (feature index)"); + CadDocument& doc = panel->mcp_doc(); + int sketch = params["sketch"].get(); + doc.checkpoint(); + int idx = doc.add_surface_fill(sketch, "SurfaceFill"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_draft(DesignPanel* panel, const json& params) +{ + if (!params.contains("face")) throw std::runtime_error("draft needs 'face' (id from query_topology)"); + const double angle = params.value("angle", 5.0); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to draft"); + int bi = target_body_arg(params, doc); + doc.checkpoint(); + int d = doc.add_draft(angle, params["face"].get(), bi, "Draft"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"draft_index", d}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +// ---- 2D sketch verbs -------------------------------------------------------------------- +// +// The model is FreeCAD's Sketcher, adapted to this tab's right-click world. Three ideas are +// taken over deliberately: +// +// * GEOMETRY IS SEPARATE FROM CONSTRAINTS. You add curves, then you constrain them; the +// solver reports degrees of freedom and whether it is consistent. `sketch_describe` returns +// both halves plus the DoF, which is the whole state a caller needs to reason about. +// * A SKETCH IS JUDGED BY ITS LOOPS, not by its coordinates. FreeCAD asks whether the profile +// is closed before it will build from it; `sketch_describe` answers that directly, listing +// each closed loop, the loops it encloses as VOIDS, and — the actionable part — the exact +// plane coordinates where a chain is still open. +// * VALIDATE, THEN FIX. FreeCAD's ValidateSketch finds vertices that overlap within a +// tolerance but carry no coincidence, and adds the missing ones. `sketch_validate` reports +// them, `sketch_heal` welds and constrains them. That is what turns a loop that is closed by +// floating-point luck into one that is closed by construction and stays closed through +// every later solve. +// +// What is NOT taken over: FreeCAD's Sketcher is a modal dialog with its own toolbars. Here the +// vocabulary is the right-click offer, so these verbs are named after what the menu offers on a +// selection, and every one of them drives the SAME DesignSketchTool the mouse drives. + +DesignSketchTool& mcp_sketch(DesignPanel* panel) +{ + DesignCanvas* vp = panel->mcp_viewport(); + if (vp == nullptr) throw std::runtime_error("no viewport"); + if (!vp->is_sketching()) + throw std::runtime_error("no sketch is open — call sketch_begin first"); + return vp->mcp_sketch_tool(); +} + +SketchEntity sketch_entity_from(const json& j) +{ + const std::string t = j.value("type", std::string("")); + SketchEntity e; + auto p = [&](const char* k, double dx, double dy) { + if (!j.contains(k)) return Vec2d(dx, dy); + const json& a = j.at(k); + if (!a.is_array() || a.size() < 2) throw std::runtime_error(std::string(k) + " must be [x, y]"); + return Vec2d(a[0].get(), a[1].get()); + }; + e.construction = j.value("construction", false); + // A circle and an arc are defined BY their centre, so a request that does not carry one is + // incomplete, not a request for a circle at the origin. Defaulting it silently put geometry + // somewhere the caller never asked for and then reported perfectly consistent loops, areas + // and hole attribution ABOUT THAT WRONG GEOMETRY — which is far more expensive to disbelieve + // than an error would have been. `p0` is accepted as an alias because that is exactly what a + // circle stores internally (e.p0 = e.center below), so a caller who writes p0 means centre. + auto centre_of = [&](const char* what) { + if (j.contains("center")) return p("center", 0, 0); + if (j.contains("centre")) return p("centre", 0, 0); + if (j.contains("p0")) return p("p0", 0, 0); + throw std::runtime_error(std::string(what) + " needs a 'center' (or 'p0')"); + }; + if (t == "line") { + e.type = SketchEntity::Type::Line; + e.p0 = p("p0", 0, 0); e.p1 = p("p1", 0, 0); + } else if (t == "circle") { + e.type = SketchEntity::Type::Circle; + e.center = centre_of("circle"); + e.radius = j.value("radius", 0.0); + e.p0 = e.center; + if (e.radius <= 0.0) throw std::runtime_error("circle needs a positive 'radius'"); + } else if (t == "arc") { + e.type = SketchEntity::Type::Arc; + e.center = centre_of("arc"); + e.radius = j.value("radius", 0.0); + e.start_angle = j.value("start_angle", 0.0); + e.end_angle = j.value("end_angle", 0.0); + if (e.radius <= 0.0) throw std::runtime_error("arc needs a positive 'radius'"); + e.p0 = e.center + e.radius * Vec2d(std::cos(e.start_angle), std::sin(e.start_angle)); + e.p1 = e.center + e.radius * Vec2d(std::cos(e.end_angle), std::sin(e.end_angle)); + } else if (t == "point") { + e.type = SketchEntity::Type::Point; + e.p0 = p("p", 0, 0); + } else { + throw std::runtime_error("unknown entity type '" + t + "' (line, arc, circle, point)"); + } + return e; +} + +json sketch_entity_to(const SketchEntity& e, int index) +{ + json j{{"index", index}, {"construction", e.construction}}; + switch (e.type) { + case SketchEntity::Type::Line: + j["type"] = "line"; + j["p0"] = json::array({e.p0.x(), e.p0.y()}); + j["p1"] = json::array({e.p1.x(), e.p1.y()}); + j["length"] = (e.p1 - e.p0).norm(); + break; + case SketchEntity::Type::Circle: + j["type"] = "circle"; + j["center"] = json::array({e.center.x(), e.center.y()}); + j["radius"] = e.radius; + break; + case SketchEntity::Type::Arc: + j["type"] = "arc"; + j["center"] = json::array({e.center.x(), e.center.y()}); + j["radius"] = e.radius; + j["start_angle"] = e.start_angle; + j["end_angle"] = e.end_angle; + j["p0"] = json::array({e.p0.x(), e.p0.y()}); + j["p1"] = json::array({e.p1.x(), e.p1.y()}); + break; + case SketchEntity::Type::Point: + j["type"] = "point"; + j["p"] = json::array({e.p0.x(), e.p0.y()}); + break; + // Ellipses and splines used to serialise as a TYPE NAME and nothing else, so every + // parameter they have was invisible to the only read-back this project has. A ladder could + // count them and grade the faceted area of the loop they close (2e-2, the faceting error) — + // it could not check a single axis, angle or pole. "Precise definition of every aspect" + // cannot be asserted about an entity whose aspects the instrument cannot see. + case SketchEntity::Type::Ellipse: + j["type"] = "ellipse"; + j["center"] = json::array({e.center.x(), e.center.y()}); + j["radius"] = e.radius; // semi-major (a) + j["rminor"] = e.rminor; // semi-minor (b) + j["rotation"] = e.rotation; // major-axis angle, radians + break; + case SketchEntity::Type::EllipseArc: + j["type"] = "ellipse_arc"; + j["center"] = json::array({e.center.x(), e.center.y()}); + j["radius"] = e.radius; + j["rminor"] = e.rminor; + j["rotation"] = e.rotation; + j["start_angle"] = e.start_angle; + j["end_angle"] = e.end_angle; + j["p0"] = json::array({e.p0.x(), e.p0.y()}); + j["p1"] = json::array({e.p1.x(), e.p1.y()}); + break; + case SketchEntity::Type::BSpline: { + j["type"] = "spline"; + json poles = json::array(); + for (const Vec2d& c : e.ctrl) poles.push_back(json::array({c.x(), c.y()})); + j["ctrl"] = poles; + j["p0"] = json::array({e.p0.x(), e.p0.y()}); + j["p1"] = json::array({e.p1.x(), e.p1.y()}); + break; + } + } + return j; +} + +// Which entities a verb acts on: an explicit "entities" array, else the current selection, +// else — only where the verb says so — everything. Same precedence the menu uses: what you +// pointed at wins, and the menu never silently acts on the whole sketch. +std::vector sketch_targets(const json& params, DesignSketchTool& t, bool all_if_empty) +{ + std::vector out; + if (params.contains("entities")) { + for (const auto& v : params.at("entities")) out.push_back(v.get()); + return out; + } + out = t.selection(); + if (out.empty() && all_if_empty) + for (int i = 0; i < int(t.entities().size()); ++i) out.push_back(i); + return out; +} + +json action_sketch_begin(DesignPanel* panel, const json& params) +{ + DesignCanvas* vp = panel->mcp_viewport(); + if (vp == nullptr) throw std::runtime_error("no viewport"); + if (vp->is_sketching()) throw std::runtime_error("a sketch is already open"); + const std::string pl = params.value("plane", std::string("XY")); + SketchPlane plane = SketchPlane::XY(); + if (pl == "XZ") plane = SketchPlane::XZ(); + else if (pl == "YZ") plane = SketchPlane::YZ(); + else if (pl != "XY") throw std::runtime_error("plane must be XY, XZ or YZ"); + vp->begin_sketch(plane, DesignSketchTool::Mode::Select); + // The panel has to enter sketch mode too, or the app is half in it: the tool sketches, the + // offer menu offers sketch verbs, and every sketch KEY is dead because key dispatch tests + // m_ui_mode while the menu tests the viewport. Driving the socket must leave the GUI in the + // state a user would be in, not a state only the socket can produce. + panel->mcp_set_sketch_mode(true); + return json{{"ok", true}, {"plane", pl}}; +} + +json action_sketch_commit(DesignPanel* panel, const json& params) +{ + (void)params; + DesignCanvas* vp = panel->mcp_viewport(); + if (vp == nullptr || !vp->is_sketching()) throw std::runtime_error("no sketch is open"); + vp->finish_sketch(); + panel->mcp_set_sketch_mode(false); + panel->mcp_after_change(); + return json{{"ok", true}, {"features", int(panel->mcp_doc().features.size())}}; +} + +json action_sketch_cancel(DesignPanel* panel, const json& params) +{ + (void)params; + DesignCanvas* vp = panel->mcp_viewport(); + if (vp == nullptr || !vp->is_sketching()) throw std::runtime_error("no sketch is open"); + vp->cancel_sketch(); + panel->mcp_set_sketch_mode(false); + return json{{"ok", true}}; +} + +json action_sketch_add(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + std::vector ents; + if (params.contains("entities")) { + for (const auto& j : params.at("entities")) ents.push_back(sketch_entity_from(j)); + } else if (params.contains("type")) { + ents.push_back(sketch_entity_from(params)); // single-entity shorthand + } else if (params.contains("rect")) { + // Corner rectangle as four shared-endpoint lines, so it arrives as ONE closed loop + // rather than four segments that happen to touch. + const json& r = params.at("rect"); + if (!r.is_array() || r.size() < 4) throw std::runtime_error("rect must be [x0, y0, x1, y1]"); + const double x0 = r[0].get(), y0 = r[1].get(); + const double x1 = r[2].get(), y1 = r[3].get(); + const bool c = params.value("construction", false); + auto seg = [&](Vec2d a, Vec2d b) { SketchEntity e; e.type = SketchEntity::Type::Line; + e.p0 = a; e.p1 = b; e.construction = c; return e; }; + ents.push_back(seg({x0, y0}, {x1, y0})); + ents.push_back(seg({x1, y0}, {x1, y1})); + ents.push_back(seg({x1, y1}, {x0, y1})); + ents.push_back(seg({x0, y1}, {x0, y0})); + } else { + throw std::runtime_error("sketch_add needs 'entities', a single 'type', or 'rect'"); + } + const int base = t.add_entities_scripted(ents); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", base >= 0}, {"first_index", base}, {"added", int(ents.size())}, + {"entities", int(t.entities().size())}, {"dof", t.dof()}}; +} + +json action_sketch_select(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + std::vector idx; + if (params.contains("entities")) + for (const auto& v : params.at("entities")) idx.push_back(v.get()); + const bool any = t.select_indices(idx); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", true}, {"selected", int(t.selection().size())}, {"any", any}}; +} + +json action_sketch_delete(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + const std::vector tgt = sketch_targets(params, t, false); + if (tgt.empty()) throw std::runtime_error("nothing selected and no 'entities' given"); + const int before = int(t.entities().size()); + t.select_indices(tgt); + t.delete_selected(); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", true}, {"removed", before - int(t.entities().size())}, + {"entities", int(t.entities().size())}}; +} + +json action_sketch_construction(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + const std::vector tgt = sketch_targets(params, t, false); + if (tgt.empty()) throw std::runtime_error("nothing selected and no 'entities' given"); + t.select_indices(tgt); + const int n = t.toggle_selection_construction(); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", n > 0}, {"changed", n}}; +} + +json action_sketch_offset(DesignPanel* panel, const json& params) +{ + if (!params.contains("distance")) throw std::runtime_error("sketch_offset needs 'distance'"); + DesignSketchTool& t = mcp_sketch(panel); + const double d = params.at("distance").get(); + const std::vector tgt = sketch_targets(params, t, true); + std::vector src; + for (int i : tgt) + if (i >= 0 && i < int(t.entities().size())) src.push_back(t.entities()[i]); + if (src.empty()) throw std::runtime_error("nothing to offset"); + const auto out = SketchEngine::offset_entities(src, d); + if (out.empty()) throw std::runtime_error("offset produced nothing (ellipses and splines are not offset)"); + const int base = t.add_entities_scripted(out); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", true}, {"first_index", base}, {"added", int(out.size())}, {"dof", t.dof()}}; +} + +json action_sketch_mirror(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + auto pt = [&](const char* k, double dx, double dy) { + if (!params.contains(k)) return Vec2d(dx, dy); + const json& a = params.at(k); + if (!a.is_array() || a.size() < 2) throw std::runtime_error(std::string(k) + " must be [x, y]"); + return Vec2d(a[0].get(), a[1].get()); + }; + const Vec2d a = pt("axis_a", 0, 0), b = pt("axis_b", 0, 1); + const std::vector tgt = sketch_targets(params, t, true); + std::vector src; + for (int i : tgt) + if (i >= 0 && i < int(t.entities().size())) src.push_back(t.entities()[i]); + if (src.empty()) throw std::runtime_error("nothing to mirror"); + const auto out = SketchEngine::mirror_entities(src, a, b); + const int base = t.add_entities_scripted(out); + panel->mcp_viewport()->request_repaint(); + return json{{"ok", true}, {"first_index", base}, {"added", int(out.size())}, {"dof", t.dof()}}; +} + +json sketch_report(DesignSketchTool& t) +{ + const auto rep = t.loop_report(); + json loops = json::array(); + for (const auto& l : rep.loops) { + json holes = json::array(); + for (int h : l.holes) holes.push_back(h); + loops.push_back(json{{"entities", l.ents}, {"holes", holes}, + {"closed", l.closed}, {"area", l.area}}); + } + json open_ends = json::array(); + for (const Vec2d& p : rep.open_ends) open_ends.push_back(json::array({p.x(), p.y()})); + // A profile is buildable when at least one loop closed and nothing is left dangling. + const bool buildable = !rep.loops.empty() && rep.open_ends.empty(); + return json{{"closed_loops", loops}, {"open_ends", open_ends}, {"buildable", buildable}}; +} + +json action_sketch_describe(DesignPanel* panel, const json& params) +{ + (void)params; + DesignSketchTool& t = mcp_sketch(panel); + json ents = json::array(); + for (int i = 0; i < int(t.entities().size()); ++i) + ents.push_back(sketch_entity_to(t.entities()[i], i)); + // The armed TOOL and its pending anchors. Without these the only way to tell which tool a + // menu row actually armed is to draw with it and infer from what came out — which is how a + // menu walk that lands one row off gets diagnosed as "the tool is broken". + static const char* const kModeNames[] = { + "select", "dimension", "polyline", "line", "rect_corner", "rect_center", "rect_oblique", + "rect_rounded", "circle_center", "circle_2pt", "point", + "circle_3pt", "arc_3pt", "arc_tangent", "arc_center", "slot", "slot_arc", "polygon", + "ellipse", "ellipse_arc", "spline", + "fillet", "chamfer", "offset", "mirror", + "trim", "extend", + "move", "rotate", "scale", "array", "array_polar", + "transform_art", + "constrain" }; + const int mi = int(t.mode()); + json out{{"ok", true}, + {"entities", ents}, + {"constraints", int(t.constraints().size())}, + {"dof", t.dof()}, + {"solve_ok", t.solve_ok()}, + {"tool", (mi >= 0 && mi < int(sizeof(kModeNames) / sizeof(kModeNames[0]))) + ? kModeNames[mi] : "unknown"}, + {"pending", t.pending_points()}, + {"editing", t.value_field_open()}, + {"selection", t.selection()}}; + out.update(sketch_report(t)); + return out; +} + +json action_sketch_validate(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + const double tol = params.value("tolerance", 1e-3); + json out{{"ok", true}, {"tolerance", tol}, {"dof", t.dof()}, {"solve_ok", t.solve_ok()}}; + out.update(sketch_report(t)); + return out; +} + +json action_sketch_heal(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + const double tol = params.value("tolerance", 1e-3); + const bool ic = params.value("ignore_construction", true); + const int welded = t.heal_coincidences(tol, ic); + panel->mcp_viewport()->request_repaint(); + json out{{"ok", true}, {"welded", welded}, {"tolerance", tol}, + {"dof", t.dof()}, {"solve_ok", t.solve_ok()}}; + out.update(sketch_report(t)); + return out; +} + +// Why sketch_set_value exists: committing a typed dimension could previously only be exercised +// by driving the in-canvas value field, and the rig's window manager never gives that frame +// keyboard focus, so the behaviour of apply_dimension on CONSTRAINED geometry was untestable. +// This calls the same function the widget calls, so the geometry can be asserted with no window +// manager involved. Note apply_dimension clears the selection. +json action_sketch_set_value(DesignPanel* panel, const json& params) +{ + DesignSketchTool& t = mcp_sketch(panel); + if (!params.contains("value")) throw std::runtime_error("sketch_set_value needs 'value'"); + const double value = params["value"].get(); + const DesignSketchTool::DimType kind = t.dimension_kind(); + if (kind == DesignSketchTool::DimType::None) + throw std::runtime_error("the selection has no value to set — pick a line, an arc, a circle, or two entities"); + + const char* kind_name = "none"; + switch (kind) { + case DesignSketchTool::DimType::Length: kind_name = "length"; break; + case DesignSketchTool::DimType::Radius: kind_name = "radius"; break; + case DesignSketchTool::DimType::Diameter: kind_name = "diameter"; break; + case DesignSketchTool::DimType::Angle: kind_name = "angle"; break; + case DesignSketchTool::DimType::Distance: kind_name = "distance"; break; + case DesignSketchTool::DimType::DistanceToLine: kind_name = "distance_to_line"; break; + default: break; + } + + // Validate BEFORE apply_dimension, at the socket boundary. The tool only MOVES geometry when + // the value passes its own per-case thresholds, but it records the driving constraint + // UNCONDITIONALLY afterwards — a negative/zero/NaN value that moved nothing would still be + // pushed to the solver as a constraint it must satisfy and cannot, silently corrupting the + // sketch rather than failing. (apply_dimension has the same flaw for any other caller; this + // guard protects the socket, not the tool.) Fail loudly instead of recording a poison value. + if (!std::isfinite(value)) + throw std::runtime_error("dimension must be finite — NaN or infinity is not a dimension"); + switch (kind) { + case DesignSketchTool::DimType::Length: + case DesignSketchTool::DimType::Radius: + case DesignSketchTool::DimType::Diameter: + if (value <= 0.0) + throw std::runtime_error(std::string(kind_name) + " must be positive (got " + std::to_string(value) + ")"); + break; + case DesignSketchTool::DimType::Distance: + case DesignSketchTool::DimType::DistanceToLine: + if (value < 0.0) + throw std::runtime_error(std::string(kind_name) + " must be >= 0 (zero means coincident / on the line)"); + break; + case DesignSketchTool::DimType::Angle: + default: + break; // any finite angle is valid + } + + const double before = t.dimension_current(); + t.apply_dimension(value); + panel->mcp_viewport()->request_repaint(); + + json out{{"ok", true}, {"kind", kind_name}, {"before", before}, {"value", value}, + {"dof", t.dof()}, {"solve_ok", t.solve_ok()}}; + out.update(sketch_report(t)); + return out; +} + +// Verbs whose handler opens a MODAL dialog. This matters more than it looks: the socket thread +// posts the call to the wx main thread and waits 15 s on a future, so a verb that blocks that +// thread inside ShowModal() times the RPC out AND leaves the main thread blocked until a human +// dismisses the dialog — every later call then times out too, 15 s at a time. Which is exactly +// the trap for the deck user this surface exists for: one button press and the app is modal, +// waiting for a mouse they may not be reaching for. +// +// So run_verb NEVER dispatches inline. The list here is only so list_verbs can label the keys +// that will want a mouse; re-derive it with +// grep -n ShowModal src/slic3r/GUI/CAD/DesignPanel.cpp +// and map each handler back to its action string in DesignOffer.hpp. +bool verb_is_modal(const char* id) +{ + static const char* kModal[] = { "sk_text", "sk_svg", "colour" }; + for (const char* m : kModal) + if (std::strcmp(m, id) == 0) return true; + return false; +} + +// Why list_verbs exists: the deck profile in VSD_n1_streamcontroller is built by parsing +// DesignPanel's key tables out of the SOURCE, so a verb without a keyboard shortcut is invisible +// to it. Serving the whole offer table over the socket lets the profile be generated from the +// running app instead, and lets a deck key name a verb rather than spend a letter. +json action_list_verbs(DesignPanel* panel, const json& params) +{ + const int kind = panel->mcp_offer_selection_kind(); + const uint32_t bit = offer_bit(OfferSel(kind)); + const bool applicable_only = params.value("applicable_only", false); + const bool has_sketch_mode = params.contains("sketch_mode"); + const bool want_sketch_mode = has_sketch_mode && params["sketch_mode"].get(); + + json verbs = json::array(); + for (int i = 0; i < kOfferVerbCount; ++i) { + const OfferVerb& v = kOfferVerbs[i]; + const bool applies = (v.accepts & bit) != 0; + if (applicable_only && !applies) continue; + if (has_sketch_mode && v.sketch_mode != want_sketch_mode) continue; + // Verbs whose action is nullptr exist in the vocabulary but have no GUI path yet — report + // them with a null action rather than dropping them. + verbs.push_back(json{ + {"id", v.id}, + {"name", v.name}, + {"row", v.row}, + {"row_name", kOfferRowNames[v.row]}, + {"key", v.key ? json(v.key) : json(nullptr)}, + {"action", v.action ? json(v.action) : json(nullptr)}, + {"sketch_mode", v.sketch_mode}, + {"applies", applies}, + {"modal", verb_is_modal(v.id)}, // opening a dialog: this key will want a mouse + {"hint", v.hint ? json(v.hint) : json(nullptr)}, + }); + } + return json{{"ok", true}, {"selection_kind", kind}, {"count", verbs.size()}, + {"verbs", std::move(verbs)}}; +} + +json action_run_verb(DesignPanel* panel, const json& params) +{ + if (!params.contains("verb")) throw std::runtime_error("run_verb needs 'verb' (an offer verb id)"); + const std::string verb = params["verb"].get(); + + // Scan the offer table BEFORE dispatching so the failure message can tell an unknown id from + // one that exists in the vocabulary but has no GUI path (action == nullptr). + bool known = false; + bool has_action = false; + const char* action = nullptr; + for (int i = 0; i < kOfferVerbCount; ++i) { + if (std::strcmp(kOfferVerbs[i].id, verb.c_str()) == 0) { + known = true; + has_action = (kOfferVerbs[i].action != nullptr); + action = kOfferVerbs[i].action; + break; + } + } + + if (!known) throw std::runtime_error("run_verb: unknown verb '" + verb + "'"); + if (!has_action) throw std::runtime_error("run_verb: '" + verb + "' has no GUI path yet"); + + // Whether the verb would be OFFERED for the current selection. Not a refusal: the GUI lets + // you press a tool's shortcut whatever is selected, and refusing here would make the socket + // stricter than the keyboard for no reason. Reported so a caller can tell "did nothing + // because it did not apply" from "did nothing because it is broken". + const int kind = panel->mcp_offer_selection_kind(); + const uint32_t bit = offer_bit(OfferSel(kind)); + bool applies = false; + for (int i = 0; i < kOfferVerbCount; ++i) + if (std::strcmp(kOfferVerbs[i].id, verb.c_str()) == 0) { applies = (kOfferVerbs[i].accepts & bit) != 0; break; } + + // The rule is not "validate more", it is "the socket should offer exactly what the GUI + // offers, no more and no less". A "btn:"/"fly:" verb is reachable in the GUI ONLY through + // the offer menu, which GREYS its row when it does not apply to the current selection — so + // a socket caller must not be able to fire it either. But a "key:" verb is reachable from + // the KEYBOARD whatever is selected, and the app permits that, so refusing it would make + // the socket stricter than the keyboard for no reason. Refuse only the menu-only verbs. + if (!applies && action && + (std::strncmp(action, "btn:", 4) == 0 || std::strncmp(action, "fly:", 4) == 0)) { + throw std::runtime_error("run_verb: '" + verb + + "' does not apply to the current selection (selection_kind " + + std::to_string(kind) + ")"); + } + + // Dispatch on the NEXT turn of the event loop, never inline. See verb_is_modal above: a verb + // that opens a dialog would otherwise block the thread this call is running on. Deferring + // costs the ability to report the verb's outcome — which run_offer_action never returned + // anyway — and buys a socket that cannot be wedged by any verb in the table. + wxGetApp().CallAfter([panel, verb]() { panel->mcp_run_verb(verb.c_str()); }); + + return json{{"ok", true}, {"verb", verb}, {"dispatched", true}, + {"applies", applies}, {"modal", verb_is_modal(verb.c_str())}, + {"selection_kind", kind}}; +} + +json action_mirror(DesignPanel* panel, const json& params) +{ + std::string m_str = params.value("mode", std::string("new")); + BooleanMode m = (m_str == "add") ? BooleanMode::Add : BooleanMode::New; + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to mirror"); + int bi = target_body_arg(params, doc); + bool keep = params.value("keep_original", true); + doc.checkpoint(); + int idx = doc.add_mirror(plane_from(params, doc), bi, m, "Mirror"); + doc.features[idx].mirror_keep_original = keep; + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"mirror_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_transform(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to transform"); + int bi = target_body_arg(params, doc); + Vec3d translate(params.value("dx", 0.0), params.value("dy", 0.0), params.value("dz", 0.0)); + Vec3d axis(params.value("axis_x", 0.0), params.value("axis_y", 0.0), params.value("axis_z", 1.0)); + Vec3d pivot(params.value("pivot_x", 0.0), params.value("pivot_y", 0.0), params.value("pivot_z", 0.0)); + double angle = params.value("angle", 0.0); + bool copy = params.value("copy", false); + doc.checkpoint(); + int idx = doc.add_transform(bi, translate, axis, pivot, angle, copy, "Transform"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"transform_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_thicken(DesignPanel* panel, const json& params) +{ + if (!params.contains("face")) throw std::runtime_error("thicken needs 'face' (id from query_topology)"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to thicken"); + int bi = target_body_arg(params, doc); + int face = params["face"].get(); + double thickness = params.value("thickness", 2.0); + bool flip = params.value("flip", false); + doc.checkpoint(); + int idx = doc.add_thicken(bi, face, thickness, flip, "Thicken"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"thicken_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_split(DesignPanel* panel, const json& params) +{ + if (!params.contains("face")) throw std::runtime_error("split needs 'face' (id from query_topology)"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to split"); + int bi = target_body_arg(params, doc); + int face_body = params.value("face_body", -1); + int face = params["face"].get(); + bool keep_upper = params.value("keep_upper", true); + bool keep_lower = params.value("keep_lower", true); + doc.checkpoint(); + int idx = doc.add_split_by_face(bi, face_body, face, keep_upper, keep_lower, "Split"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"split_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_project(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no source body to project from"); + int source_body = params.value("source_body", -1); + int face = params.value("face", -1); + std::vector edges; + if (params.contains("edges") && params["edges"].is_array()) + for (const auto& v : params["edges"]) edges.push_back(v.get()); + SketchPlane pl = plane_from(params, doc); + doc.checkpoint(); + int idx = doc.add_project_edges(source_body, edges, face, pl, "Project"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"project_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_delete_face(DesignPanel* panel, const json& params) +{ + if (!params.contains("faces")) throw std::runtime_error("delete_face needs 'faces' (array of face ids)"); + CadDocument& doc = panel->mcp_doc(); + if (doc.bodies.empty()) throw std::runtime_error("no body to delete faces from"); + int bi = target_body_arg(params, doc); + std::vector faces; + if (params["faces"].is_array()) + for (const auto& v : params["faces"]) faces.push_back(v.get()); + doc.checkpoint(); + int idx = doc.add_delete_face(bi, faces, "DeleteFace"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_bridge(DesignPanel* panel, const json& params) +{ + if (!params.contains("sketch")) throw std::runtime_error("bridge needs 'sketch' (feature index)"); + if (!params.contains("ent_a")) throw std::runtime_error("bridge needs 'ent_a' (entity index)"); + if (!params.contains("ent_b")) throw std::runtime_error("bridge needs 'ent_b' (entity index)"); + int sketch = params["sketch"].get(); + int ent_a = params["ent_a"].get(); + int ent_b = params["ent_b"].get(); + int end_a = params.value("end_a", 1); + int end_b = params.value("end_b", 0); + CadDocument& doc = panel->mcp_doc(); + doc.checkpoint(); + int ei = doc.add_bridge(sketch, ent_a, end_a, ent_b, end_b, "Bridge"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"sketch_index", sketch}, {"entity_index", ei}, + {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_axis(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + std::string t = params.value("type", std::string("two_points")); + AxisType at = AxisType::TwoPoints; + if (t == "face_normal") at = AxisType::FaceNormal; + else if (t == "cylinder") at = AxisType::CylinderCenterline; + else if (t == "plane_intersection") at = AxisType::PlaneIntersection; + else if (t == "along_edge") at = AxisType::AlongEdge; + doc.checkpoint(); + int idx = doc.add_axis(at, "Axis"); + CadFeature& f = doc.features[idx]; + if (params.contains("p1") && params["p1"].is_array() && params["p1"].size() >= 3) + f.axis_p1 = Vec3d(params["p1"][0].get(), params["p1"][1].get(), params["p1"][2].get()); + if (params.contains("p2") && params["p2"].is_array() && params["p2"].size() >= 3) + f.axis_p2 = Vec3d(params["p2"][0].get(), params["p2"][1].get(), params["p2"][2].get()); + f.axis_body = params.value("body", -1); + f.axis_face = params.value("face", -1); + f.axis_edge = params.value("edge", -1); + f.axis_plane_a = params.value("plane_a", -1); + f.axis_plane_b = params.value("plane_b", -1); + // Datum features don't produce a body; check for an error returned by resolve. + bool recompute_ok = doc.recompute(); + auto axes = doc.resolve_datum_axes(); + std::string err = doc.error; + if (recompute_ok && err.empty() && !axes.empty() && !axes.back().error.empty()) + err = axes.back().error; + panel->mcp_after_change(); + return json{{"ok", true}, {"axis_index", idx}, {"error", err}}; +} + +json action_coordsys(DesignPanel* panel, const json& params) +{ + CadDocument& doc = panel->mcp_doc(); + std::string t = params.value("type", std::string("point_world")); + CoordSysType ct = CoordSysType::PointWorld; + if (t == "face_and_direction") ct = CoordSysType::FaceAndDirection; + Vec3d pt(0, 0, 0); + if (params.contains("point") && params["point"].is_array() && params["point"].size() >= 3) + pt = Vec3d(params["point"][0].get(), params["point"][1].get(), params["point"][2].get()); + doc.checkpoint(); + int idx = doc.add_coordsys(ct, pt, "CoordSys"); + CadFeature& f = doc.features[idx]; + f.coordsys_body = params.value("body", -1); + f.coordsys_face = params.value("face", -1); + f.coordsys_edge = params.value("edge", -1); + if (params.contains("x_hint") && params["x_hint"].is_array() && params["x_hint"].size() >= 3) + f.coordsys_x_hint = Vec3d(params["x_hint"][0].get(), params["x_hint"][1].get(), params["x_hint"][2].get()); + bool recompute_ok = doc.recompute(); + auto css = doc.resolve_datum_coordsys(); + std::string err = doc.error; + if (recompute_ok && err.empty() && !css.empty() && !css.back().error.empty()) + err = css.back().error; + panel->mcp_after_change(); + return json{{"ok", true}, {"coordsys_index", idx}, {"error", err}}; +} + +json action_helix(DesignPanel* panel, const json& params) +{ + const double radius = params.value("radius", 10.0); + const double pitch = params.value("pitch", 5.0); + const double height = params.value("height", 20.0); + const bool left_handed = params.value("left_handed", false); + const double taper = params.value("taper_deg", 0.0); + CadDocument& doc = panel->mcp_doc(); + doc.checkpoint(); + int idx = doc.add_helix(plane_from(params, doc), radius, pitch, height, left_handed, taper, "Helix"); + panel->mcp_after_change(); + return json{{"ok", true}, {"helix_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_mate(DesignPanel* panel, const json& params) +{ + if (!params.contains("cs_a")) throw std::runtime_error("mate needs 'cs_a' (CoordSys feature index)"); + if (!params.contains("cs_b")) throw std::runtime_error("mate needs 'cs_b' (CoordSys feature index)"); + const int kind = params.value("kind", 0); + const int cs_a = params["cs_a"].get(); + const int cs_b = params["cs_b"].get(); + const double offset = params.value("offset", 0.0); + const double angle = params.value("angle", 0.0); + const bool flip = params.value("flip", false); + CadDocument& doc = panel->mcp_doc(); + doc.checkpoint(); + int idx = doc.add_mate(kind, cs_a, cs_b, offset, angle, flip, "Mate"); + bool ok = doc.recompute(); + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"mate_index", idx}, {"bodies", int(doc.bodies.size())}, {"error", doc.error}}; +} + +json action_check_interference(DesignPanel* panel, const json& params) +{ + const double min_volume = params.value("min_volume", 1e-6); + CadDocument& doc = panel->mcp_doc(); + // Read-only: no checkpoint(), no recompute(), no mcp_after_change(). + const auto hits = doc.check_interference(min_volume); + json arr = json::array(); + for (const auto& h : hits) { + arr.push_back(json{{"body_a", h.body_a}, {"body_b", h.body_b}, {"volume", h.volume}}); + } + return json{{"ok", true}, {"count", int(hits.size())}, {"interferences", arr}}; +} + +json action_set_variable(DesignPanel* panel, const json& params) +{ + if (!params.contains("name")) throw std::runtime_error("set_variable needs 'name'"); + if (!params.contains("expr")) throw std::runtime_error("set_variable needs 'expr'"); + CadDocument& doc = panel->mcp_doc(); + std::string name = params["name"].get(); + std::string expr = params["expr"].get(); + std::string old = doc.variables.count(name) ? doc.variables[name] : ""; + doc.checkpoint(); + doc.variables[name] = expr; + bool ok = doc.recompute(); + // undo() recomputes, which succeeds and clears doc.error; carry the reason across so + // the JSON reply below reports why the edit was rejected instead of an empty string. + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"name", name}, {"error", doc.error}}; +} + +json action_set_feature_expr(DesignPanel* panel, const json& params) +{ + if (!params.contains("feature")) throw std::runtime_error("set_feature_expr needs 'feature' index"); + if (!params.contains("field")) throw std::runtime_error("set_feature_expr needs 'field' name"); + if (!params.contains("expr")) throw std::runtime_error("set_feature_expr needs 'expr' string"); + CadDocument& doc = panel->mcp_doc(); + int fi = params["feature"].get(); + if (fi < 0 || fi >= (int)doc.features.size()) + return json{{"ok", false}, {"error", "feature index out of range"}}; + std::string field = params["field"].get(); + std::string expr = params["expr"].get(); + std::string old = doc.features[fi].expr.count(field) ? doc.features[fi].expr[field] : ""; + doc.checkpoint(); + doc.features[fi].expr[field] = expr; + bool ok = doc.recompute(); + // undo() recomputes, which succeeds and clears doc.error; carry the reason across so + // the JSON reply below reports why the edit was rejected instead of an empty string. + if (!ok) { const std::string why = doc.error; doc.undo(); doc.error = why; } + panel->mcp_after_change(); + return json{{"ok", ok}, {"feature", fi}, {"field", field}, {"error", doc.error}}; +} + +// 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; + if (!panel) + return rpc_error(id, -32001, "Design panel not ready"); + + // Stale-id guard, checked here rather than in each handler. + // + // Global face and edge ids are indices into TopExp::MapShapes, valid only against the + // topology that produced them. Every dress-up rewrites those maps, so the natural way to + // drive this socket — read the scene once, then issue several operations — silently + // addresses the WRONG edge on every call after the first. Measured on a box: four chamfers + // with ids re-read each time remove 0.400/0.397/0.397/0.395 mm3; the same four with ids + // captured up front remove 0.400/0.008/0.397/0.280. Neither run errors, because a stale id + // still resolves to a real edge — just not the one that was asked for. + // + // So a caller may pass back the "generation" it got from describe_scene or query_topology, + // and a mismatch is refused instead of silently obeyed. Optional by design: omitting it + // keeps every existing script working exactly as before, and supplying it is what buys the + // guarantee. One check at the dispatcher rather than one per handler, so a method added + // later cannot forget it. + // + // The type check is not decoration: this runs OUTSIDE the try below, and a bare + // get() on `"generation": "x"` throws nlohmann::type_error straight out of + // the CallAfter lambda that invoked us — through a wx event loop, which does not catch, + // so the whole GUI went down on one malformed line. Refuse it as a parameter error. + if (params.is_object() && params.contains("generation")) { + if (!params["generation"].is_number_unsigned()) + return rpc_error(id, -32602, "generation must be an unsigned integer"); + const uint64_t want = params["generation"].get(); + const uint64_t have = panel->mcp_doc().topo_generation; + if (want != have) + return rpc_error(id, -32010, + "stale face/edge ids: they were read at generation " + std::to_string(want) + + " but the model is now at " + std::to_string(have) + + ". Re-read query_topology and use the new ids — the old ones still name real " + "edges, just not the ones you measured."); + } + + try { + if (method == "describe_tools") return rpc_result(id, describe_tools()); + if (method == "describe_scene") return rpc_result(id, describe_scene(panel)); + if (method == "query_topology") return rpc_result(id, query_topology(panel, params)); + if (method == "measure") return rpc_result(id, measure(panel, params)); + if (method == "mass_properties") return rpc_result(id, mass_properties(panel, params)); + if (method == "slice_body") return rpc_result(id, slice_body(panel, params)); + if (method == "import_step") return rpc_result(id, import_step(panel, params)); + if (method == "import_mesh") return rpc_result(id, import_mesh(panel, params)); + if (method == "validate_against") return rpc_result(id, validate_against(panel, params)); + if (method == "extrude") return rpc_result(id, action_extrude(panel, params)); + if (method == "revolve") return rpc_result(id, action_revolve(panel, params)); + if (method == "fillet") return rpc_result(id, action_fillet(panel, params)); + if (method == "chamfer") return rpc_result(id, action_chamfer(panel, params)); + if (method == "hole") return rpc_result(id, action_hole(panel, params)); + if (method == "hole_styled") return rpc_result(id, action_hole_styled(panel, params)); + if (method == "hole_standard") return rpc_result(id, action_hole_standard(panel, params)); + if (method == "boolean") return rpc_result(id, action_boolean(panel, params)); + if (method == "pattern") return rpc_result(id, action_pattern(panel, params)); + if (method == "pattern_on_curve") return rpc_result(id, action_pattern_on_curve(panel, params)); + if (method == "shell") return rpc_result(id, action_shell(panel, params)); + if (method == "rib") return rpc_result(id, action_rib(panel, params)); + if (method == "draft") return rpc_result(id, action_draft(panel, params)); + if (method == "mirror") return rpc_result(id, action_mirror(panel, params)); + if (method == "sketch_begin") return rpc_result(id, action_sketch_begin(panel, params)); + if (method == "sketch_commit") return rpc_result(id, action_sketch_commit(panel, params)); + if (method == "sketch_cancel") return rpc_result(id, action_sketch_cancel(panel, params)); + if (method == "sketch_add") return rpc_result(id, action_sketch_add(panel, params)); + if (method == "sketch_select") return rpc_result(id, action_sketch_select(panel, params)); + if (method == "sketch_delete") return rpc_result(id, action_sketch_delete(panel, params)); + if (method == "sketch_construction") return rpc_result(id, action_sketch_construction(panel, params)); + if (method == "sketch_offset") return rpc_result(id, action_sketch_offset(panel, params)); + if (method == "sketch_mirror") return rpc_result(id, action_sketch_mirror(panel, params)); + if (method == "sketch_describe") return rpc_result(id, action_sketch_describe(panel, params)); + if (method == "sketch_validate") return rpc_result(id, action_sketch_validate(panel, params)); + if (method == "sketch_heal") return rpc_result(id, action_sketch_heal(panel, params)); + if (method == "sketch_set_value") return rpc_result(id, action_sketch_set_value(panel, params)); + if (method == "list_verbs") return rpc_result(id, action_list_verbs(panel, params)); + if (method == "run_verb") return rpc_result(id, action_run_verb(panel, params)); + if (method == "transform") return rpc_result(id, action_transform(panel, params)); + if (method == "thicken") return rpc_result(id, action_thicken(panel, params)); + if (method == "split") return rpc_result(id, action_split(panel, params)); + if (method == "project") return rpc_result(id, action_project(panel, params)); + if (method == "delete_face") return rpc_result(id, action_delete_face(panel, params)); + if (method == "bridge") return rpc_result(id, action_bridge(panel, params)); + if (method == "axis") return rpc_result(id, action_axis(panel, params)); + if (method == "coordsys") return rpc_result(id, action_coordsys(panel, params)); + if (method == "helix") return rpc_result(id, action_helix(panel, params)); + if (method == "set_variable") return rpc_result(id, action_set_variable(panel, params)); + if (method == "set_feature_expr") return rpc_result(id, action_set_feature_expr(panel, params)); + if (method == "surface_extrude") return rpc_result(id, action_surface_extrude(panel, params)); + if (method == "surface_revolve") return rpc_result(id, action_surface_revolve(panel, params)); + if (method == "thicken_surface") return rpc_result(id, action_thicken_surface(panel, params)); + if (method == "surface_offset") return rpc_result(id, action_surface_offset(panel, params)); + if (method == "surface_loft") return rpc_result(id, action_surface_loft(panel, params)); + if (method == "surface_fill") return rpc_result(id, action_surface_fill(panel, params)); + if (method == "mate") return rpc_result(id, action_mate(panel, params)); + if (method == "check_interference") return rpc_result(id, action_check_interference(panel, params)); + return rpc_error(id, -32601, "Unknown method: " + method); + } catch (const Standard_Failure& ex) { // OCCT errors are NOT std::exception + return rpc_error(id, -32000, std::string("OCCT: ") + (ex.GetMessageString() ? ex.GetMessageString() : "failure")); + } catch (const std::exception& ex) { + return rpc_error(id, -32000, ex.what()); + } +} + +// Marshal a request to the main thread and block (with a timeout) for the reply. +std::string dispatch_request(const std::string& line) +{ + json req; + try { req = json::parse(line); } + catch (const std::exception& ex) { return rpc_error(nullptr, -32700, std::string("parse error: ") + ex.what()); } + + json id = req.contains("id") ? req["id"] : json(nullptr); + std::string method = req.value("method", std::string()); + json params = req.contains("params") ? req["params"] : json::object(); + if (method.empty()) return rpc_error(id, -32600, "missing method"); + + auto prom = std::make_shared>(); + auto fut = prom->get_future(); + // Nothing may escape this lambda. It is invoked by the wx event loop, which has no + // handler of its own, so an escaping exception is std::terminate — the socket would + // become a way for any client to kill the application. handle_on_main() catches what + // it knows about; this catches what it does not, and still answers the caller. + wxGetApp().CallAfter([prom, method, params, id]() { + try { + prom->set_value(handle_on_main(method, params, id)); + } catch (const std::exception& ex) { + prom->set_value(rpc_error(id, -32000, std::string("internal error: ") + ex.what())); + } catch (...) { + prom->set_value(rpc_error(id, -32000, "internal error: unknown exception")); + } + }); + if (fut.wait_for(std::chrono::seconds(15)) != std::future_status::ready) + return rpc_error(id, -32000, "main-thread timeout"); + return fut.get(); +} + +// Read newline-delimited requests off one client connection until EOF. +void serve_client(int cfd) +{ + std::string buf; + char chunk[4096]; + for (;;) { + ssize_t n = ::read(cfd, chunk, sizeof(chunk)); + if (n <= 0) break; + buf.append(chunk, size_t(n)); + size_t nl; + while ((nl = buf.find('\n')) != std::string::npos) { + std::string line = buf.substr(0, nl); + buf.erase(0, nl + 1); + if (line.empty()) continue; + std::string reply = dispatch_request(line); + reply.push_back('\n'); + // Never a bare write(): a client that hangs up between its request and our + // reply raises SIGPIPE, whose default action kills the process — so closing + // a socket mid-call would take the GUI with it. +#ifdef MSG_NOSIGNAL + if (::send(cfd, reply.data(), reply.size(), MSG_NOSIGNAL) < 0) return; +#else + if (::write(cfd, reply.data(), reply.size()) < 0) return; // SO_NOSIGPIPE set at accept +#endif + } + } +} + +void server_thread(std::string sock_path) +{ + ::unlink(sock_path.c_str()); + int sfd = ::socket(AF_UNIX, SOCK_STREAM, 0); + if (sfd < 0) { BOOST_LOG_TRIVIAL(error) << "MCP: socket() failed"; return; } + + sockaddr_un addr{}; + addr.sun_family = AF_UNIX; + std::strncpy(addr.sun_path, sock_path.c_str(), sizeof(addr.sun_path) - 1); + // The socket is the full CAD command surface, including import_step on absolute paths. + // It lands in a world-writable directory by default (/tmp), so its access control is + // its file mode and nothing else — leaving that to the ambient umask means any local + // process may drive the modeller. umask around bind() makes it 0600 with no window in + // which a wider mode exists; the chmod afterwards covers platforms that do not apply + // umask to sockets. + const mode_t old_umask = ::umask(0177); + const int bind_rc = ::bind(sfd, reinterpret_cast(&addr), sizeof(addr)); + ::umask(old_umask); + if (bind_rc < 0) { + BOOST_LOG_TRIVIAL(error) << "MCP: bind() failed on " << sock_path; + ::close(sfd); return; + } + if (::chmod(sock_path.c_str(), S_IRUSR | S_IWUSR) < 0) { + BOOST_LOG_TRIVIAL(error) << "MCP: cannot restrict " << sock_path << " to the owner; refusing to listen"; + ::close(sfd); ::unlink(sock_path.c_str()); return; + } + if (::listen(sfd, 1) < 0) { BOOST_LOG_TRIVIAL(error) << "MCP: listen() failed"; ::close(sfd); return; } + BOOST_LOG_TRIVIAL(info) << "MCP control listening on " << sock_path; + + for (;;) { + int cfd = ::accept(sfd, nullptr, nullptr); + if (cfd < 0) continue; +#if !defined(MSG_NOSIGNAL) && defined(SO_NOSIGPIPE) + const int on = 1; // macOS/BSD equivalent of MSG_NOSIGNAL + ::setsockopt(cfd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on)); +#endif + serve_client(cfd); + ::close(cfd); + } +} + +} // namespace + +void start_mcp_control_if_enabled() +{ + const char* env = std::getenv("ORCA_CAD_MCP"); + if (!env || !*env) return; + std::string path = (std::strcmp(env, "1") == 0) ? "/tmp/orca-cad-mcp.sock" : env; + static bool started = false; + if (started) return; + started = true; + std::thread(server_thread, path).detach(); +} + +}} // namespace Slic3r::GUI + +#else // _WIN32 + +namespace Slic3r { namespace GUI { +void start_mcp_control_if_enabled() {} // ponytail: no Windows transport yet +}} + +#endif diff --git a/src/slic3r/GUI/CAD/McpControl.hpp b/src/slic3r/GUI/CAD/McpControl.hpp new file mode 100644 index 0000000000..12e3289eb5 --- /dev/null +++ b/src/slic3r/GUI/CAD/McpControl.hpp @@ -0,0 +1,24 @@ +#ifndef slic3r_GUI_McpControl_hpp_ +#define slic3r_GUI_McpControl_hpp_ + +// MCP control surface (slice 1): a local JSON-RPC 2.0 server, line-delimited over a +// Unix domain socket, that lets an external MCP bridge drive and perceive the Design +// tab. Off unless the env var ORCA_CAD_MCP is set: +// ORCA_CAD_MCP=1 -> socket at /tmp/orca-cad-mcp.sock +// ORCA_CAD_MCP=/path/to.sock -> socket at that path +// All CAD work is marshalled onto the wx main thread and runs through the SAME +// CadDocument kernel the GUI uses (no parallel engine). Slice-1 methods: +// describe_tools, describe_scene, extrude. +// +// ponytail: Unix-socket only (POSIX). Windows compiles this to a no-op; add a named +// pipe transport when a Windows agent actually needs it. + +namespace Slic3r { namespace GUI { + +// Start the server thread iff ORCA_CAD_MCP is set. Safe to call once after the +// MainFrame + DesignPanel exist. No-op when the env var is unset or on Windows. +void start_mcp_control_if_enabled(); + +}} // namespace Slic3r::GUI + +#endif // slic3r_GUI_McpControl_hpp_ diff --git a/src/slic3r/GUI/CAD/SketchInlineEditor.cpp b/src/slic3r/GUI/CAD/SketchInlineEditor.cpp new file mode 100644 index 0000000000..8dfb939576 --- /dev/null +++ b/src/slic3r/GUI/CAD/SketchInlineEditor.cpp @@ -0,0 +1,203 @@ +#include "slic3r/GUI/CAD/SketchInlineEditor.hpp" + +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "libslic3r/Color.hpp" + +#include +#include // BringWindowToDisplayFront / GetCurrentWindow + +#include +#include +#include +#include + +namespace Slic3r { +namespace GUI { + +namespace { + +// Numbers are typed and shown with a POINT, whatever the locale: this field feeds a CAD kernel, +// and a decimal comma reaching it as a thousands separator is a silent order-of-magnitude error. +// Parsing accepts either separator because a keyboard's numeric pad may only offer one. +std::string fmt_value(double v, int digits = 2) +{ + char fmt[16]; + std::snprintf(fmt, sizeof(fmt), "%%.%df", digits); + char buf[64]; + std::snprintf(buf, sizeof(buf), fmt, v); + for (char* c = buf; *c; ++c) + if (*c == ',') *c = '.'; + return std::string(buf); +} + +bool parse_value(const char* text, double& out) +{ + if (text == nullptr) return false; + std::string t(text); + for (char& c : t) + if (c == ',') c = '.'; + // strtod, not std::stod: no exceptions, and `end` tells us whether the WHOLE field was a + // number. "12mm" must be refused, not silently read as 12. + const char* b = t.c_str(); + char* end = nullptr; + const double v = std::strtod(b, &end); + if (end == b) return false; + while (*end == ' ' || *end == '\t') ++end; + if (*end != '\0') return false; + out = v; + return true; +} + +// One machine-readable line per event of the click-edit contract, for the UX check that runs +// after every build (scripts/CAD/check-gui-click-edit.py). Deliberately NOT the same switch as +// ORCA_CAD_KEYTRACE: that one is a debugging firehose, this one is an assertion surface and its +// format is a contract the script parses. +// +// The pair that matters is `open` vs `commit`: the check always types a value DIFFERENT from the +// prefill, so a field that is on screen but not editable commits its prefill and the two lines +// disagree. A focus flag cannot show that — it read 0 even when typing worked — but the number +// the user actually gets can. +void ux_trace(const char* event, const std::string& title, const std::string& detail) +{ + if (!std::getenv("ORCA_CAD_UXTRACE")) return; + std::fprintf(stderr, "[UX] %s title=%s %s\n", event, title.c_str(), detail.c_str()); + std::fflush(stderr); +} + +} // namespace + +void SketchInlineEditor::open(const wxPoint& canvas_px, double value, const std::string& title, + std::function on_commit, + std::function on_cancel) +{ + m_anchor = canvas_px; + m_title = title; + m_err.clear(); + m_commit = std::move(on_commit); + m_cancel = std::move(on_cancel); + const std::string v = fmt_value(value); + std::snprintf(m_buf, sizeof(m_buf), "%s", v.c_str()); + m_open = true; + // ImGui takes keyboard focus for one frame on request; asking on the frame the field first + // appears is what makes typing land without a click. There is no window manager to consult. + m_focus_pending = true; + ux_trace("open", m_title, "prefill=" + v); +} + +void SketchInlineEditor::close() +{ + m_open = false; + m_focus_pending = false; + m_commit = nullptr; + m_cancel = nullptr; + m_err.clear(); +} + +void SketchInlineEditor::cancel() +{ + if (m_open) do_cancel(); +} + +void SketchInlineEditor::commit() +{ + if (m_open) do_commit(); +} + +void SketchInlineEditor::do_cancel() +{ + ux_trace("cancel", m_title, ""); + auto cb = m_cancel; + close(); + if (cb) cb(); +} + +void SketchInlineEditor::do_commit() +{ + double v = 0.0; + if (!parse_value(m_buf, v)) { + // Refusing input in silence is indistinguishable from the app having frozen: the field + // just sits there and the user has no idea what it wants. Say so in the title line and + // keep editing. + ux_trace("refused", m_title, std::string("typed=") + m_buf); + m_err = (m_buf[0] == '\0') ? _u8L("Enter a number") : _u8L("Not a number"); + m_focus_pending = true; + return; + } + ux_trace("commit", m_title, std::string("typed=") + m_buf + " value=" + fmt_value(v, 4)); + auto cb = m_commit; + close(); + // AFTER close(): the callback may open the next queued dimension (a rectangle queues Width + // then Height), and doing that into a field that still believes it is open would drop the + // second one's prefill on the floor. + if (cb) cb(v); +} + +bool SketchInlineEditor::render(ImGuiWrapper& imgui, float scale) +{ + if (!m_open) return false; + + ImGuiWrapper::push_common_window_style(scale); + imgui.set_next_window_pos((float) m_anchor.x, (float) m_anchor.y, ImGuiCond_Always, 0.5f, 0.5f); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3.0f); + // NoInputs is what every other sketch overlay sets and is exactly what this one must not: + // it is the only overlay in the tab that the user types into. + imgui.begin(std::string("##sketchvalue"), + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration + | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings); + ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow()); + + if (!m_title.empty() || !m_err.empty()) { + if (m_err.empty()) { + imgui.text(m_title); + } else { + ImGui::PushStyleColor(ImGuiCol_Text, ImGuiWrapper::to_ImVec4(ColorRGBA(0.91f, 0.42f, 0.42f, 1.0f))); + imgui.text(m_err); + ImGui::PopStyleColor(); + } + } + + if (m_focus_pending) { + ImGui::SetKeyboardFocusHere(); + m_focus_pending = false; + } + ImGui::PushItemWidth(90.0f * scale); + // EnterReturnsTrue so Enter commits from inside the widget; AutoSelectAll so the prefill is + // replaced by the first digit typed, which is what "pre-selected" meant when this was a + // wxTextCtrl and is what makes typing a value a single gesture. + const bool entered = ImGui::InputText("##sketchvalue_in", m_buf, sizeof(m_buf), + ImGuiInputTextFlags_EnterReturnsTrue + | ImGuiInputTextFlags_AutoSelectAll + | ImGuiInputTextFlags_CharsDecimal); + // MEASUREMENT, not a fix: one line per frame saying whether ImGui believes it owns the + // keyboard and whether our widget is the active one. "Typing does not arrive" has two very + // different causes — no FRAMES (this canvas repaints on demand only, so an idle canvas never + // processes ImGui's queued characters) versus frames that run while the input is not active — + // and they are indistinguishable from outside. + if (std::getenv("ORCA_CAD_UXTRACE")) { + const ImGuiIO& io = ImGui::GetIO(); + std::fprintf(stderr, "[UX] frame title=%s want_text=%d want_kb=%d active=%d buf=%s\n", + m_title.c_str(), (int) io.WantTextInput, (int) io.WantCaptureKeyboard, + (int) ImGui::IsItemActive(), m_buf); + std::fflush(stderr); + } + ImGui::PopItemWidth(); + imgui.end(); + ImGui::PopStyleVar(); + ImGuiWrapper::pop_common_window_style(); + + // Keep the frames coming while the field is up — see request_frame's note in the header. + if (m_open && request_frame) + request_frame(); + + // Act AFTER end(): do_commit can reopen the field for the next queued dimension, and that + // must not happen inside this frame's window. + if (entered) + do_commit(); + else if (ImGui::IsKeyPressed(ImGui::GetKeyIndex(ImGuiKey_Escape))) + do_cancel(); + return true; +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/CAD/SketchInlineEditor.hpp b/src/slic3r/GUI/CAD/SketchInlineEditor.hpp new file mode 100644 index 0000000000..162d157864 --- /dev/null +++ b/src/slic3r/GUI/CAD/SketchInlineEditor.hpp @@ -0,0 +1,95 @@ +#ifndef slic3r_SketchInlineEditor_hpp_ +#define slic3r_SketchInlineEditor_hpp_ + +#include +#include + +#include + +namespace Slic3r { +namespace GUI { + +class ImGuiWrapper; + +// Onshape-style in-canvas value editor. +// +// IT IS NOT A WINDOW. It used to be a borderless top-level wxFrame holding a wxTextCtrl, and +// that is the whole history of this file: a separate top-level window can only receive typing +// if the window manager grants it focus, and whether it does is not ours to decide. openbox +// grants it; mutter's focus-stealing prevention refuses it, so on a GNOME desktop the field +// appeared, showed its value selected, and silently ignored every keystroke — Enter then +// committed the number it opened with. Seven workarounds were tried against that (a real X11 +// server timestamp for gtk_window_present, re-asserted SetFocus, dropping the _UTILITY hint, +// keeping the frame mapped between two queued fields, forwarding keys from the panel's +// CHAR_HOOK), one of them caused a macOS regression, and the test harness ended up clicking the +// field before typing — which is the workaround a user cannot be asked to perform, and is +// exactly the "label value not editable" report. +// +// So the field stops asking. It is now drawn INSIDE the GL canvas as an ImGui overlay, at the +// same screen point as before, and its keys arrive through the canvas's own key events, which +// GLCanvas3D already feeds to ImGui (see GLCanvas3D::on_key / on_char -> update_key_data). The +// canvas is part of the main window and already has focus, so there is no second window, no +// second focus, and no window manager in the path. The dimension labels next to it are already +// ImGui overlays (DesignSketchTool::draw_dim_label), so this is the same vocabulary, not a new +// one. +// +// Ownership: DesignCanvas owns it; DesignSketchTool::render() calls render() once per frame. +class SketchInlineEditor +{ +public: + SketchInlineEditor() = default; + + // Open the field anchored at `canvas_px` (canvas DEVICE pixels, the coordinate space the + // sketch tool works in), pre-filled with `value` and pre-selected. on_commit(parsed) fires + // on Enter with a valid number; on_cancel() on Esc. + void open(const wxPoint& canvas_px, double value, const std::string& title, + std::function on_commit, + std::function on_cancel); + void close(); // drop it with neither callback + void cancel(); // if open, run the registered cancel (keep-as-drawn) + void commit(); // if open, run the registered commit (accept the typed value) + bool is_open() const { return m_open; } + + // Draw it, and let ImGui do the editing. Called from DesignSketchTool::render() inside the + // frame's ImGui pass; `scale` is the tool's m_render_scale. Returns true if it drew. + bool render(ImGuiWrapper& imgui, float scale); + + // Ask for another frame. THE FIELD DOES NOT WORK WITHOUT THIS, and the reason is a deadlock + // that only a per-frame trace shows: + // + // [UX] frame want_text=0 want_kb=0 active=0 <- frame 1: the widget is not active yet + // [UX] frame want_text=0 want_kb=0 active=1 <- frame 2: it is now + // (nothing further) <- the canvas has nothing to redraw, so it stops + // + // This canvas repaints ON DEMAND. ImGui decides whether it wants the keyboard at the END of a + // frame, from the active item, and GLCanvas3D::on_char only calls render() when + // update_key_data() says ImGui wants it. No frames -> WantTextInput never turns on -> no + // render on a keystroke -> still no frames. The characters sit in ImGui's queue and the field + // looks exactly as deaf as the window it replaced. One repaint per frame while it is open + // breaks the circle. + std::function request_frame; + + // Kept because callers ask them, but there is no longer any difference to report: with no + // window there is no state where the field is on screen but logically closed, and no state + // where it is open but somebody else holds the keyboard. + bool is_mapped() const { return m_open; } + bool has_focus() const { return m_open; } + void dismiss() { close(); } + +private: + void do_commit(); + void do_cancel(); + + std::function m_commit; + std::function m_cancel; + bool m_open{false}; + bool m_focus_pending{false}; // one frame of SetKeyboardFocusHere after opening + wxPoint m_anchor{0, 0}; // canvas device px + std::string m_title; + std::string m_err; // why the last value was refused, shown in the title line + char m_buf[64]{}; // the edited text; ImGui::InputText writes into it +}; + +}} // namespace Slic3r::GUI + +#endif // slic3r_SketchInlineEditor_hpp_ diff --git a/src/slic3r/GUI/CaliHistoryDialog.cpp b/src/slic3r/GUI/CaliHistoryDialog.cpp index 4de90d8b8f..3ce8c1bb81 100644 --- a/src/slic3r/GUI/CaliHistoryDialog.cpp +++ b/src/slic3r/GUI/CaliHistoryDialog.cpp @@ -443,7 +443,7 @@ void HistoryWindow::sync_history_data() { auto edit_button = new Button(m_history_data_panel, _L("Edit")); edit_button->SetStyle(ButtonStyle::Confirm, ButtonType::Window); - edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value, edit_button](auto& e) { + edit_button->Bind(wxEVT_BUTTON, [this, result, k_value, name_value](auto& e) { if (m_ui_op_lock) return; PACalibResult result_buffer = result; @@ -702,7 +702,6 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject wxArrayString filament_items; std::set filament_id_set; - std::set printer_names; std::ostringstream stream; // If the machine didn't report a nozzle diameter (0.0 = unknown), fall back to the currently // selected printer preset so the filament list isn't empty. @@ -714,67 +713,21 @@ wxArrayString NewCalibrationHistoryDialog::get_all_filaments(const MachineObject stream << std::fixed << std::setprecision(1) << machine_diameter; std::string nozzle_diameter_str = stream.str(); - for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { - // filter by system preset - if (!printer_it->is_system) - continue; - // get printer_model - ConfigOption * printer_model_opt = printer_it->config.option("printer_model"); - ConfigOptionString *printer_model_str = dynamic_cast(printer_model_opt); - if (!printer_model_str) - continue; - - // use printer_model as printer type - if (printer_model_str->value != DevPrinterConfigUtil::get_printer_display_name(obj->printer_type)) - continue; - - if (printer_it->name.find(nozzle_diameter_str) != std::string::npos) - printer_names.insert(printer_it->name); - } - if (preset_bundle) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - // filter by system preset - Preset &preset = *filament_it; - /*The situation where the user preset is not displayed is as follows: - 1. Not a root preset - 2. Not system preset and the printer firmware does not support user preset */ - if (preset_bundle->filaments.get_preset_base(*filament_it) != &preset || (!filament_it->is_system && ! obj->is_support_user_preset)) { continue; } + for (Preset *filament_it : preset_bundle->get_filament_presets_for_machine( + DevPrinterConfigUtil::get_printer_display_name(obj->printer_type), nozzle_diameter_str, obj->is_support_user_preset)) { + if (!filament_id_set.insert(filament_it->filament_id).second) + continue; + const std::string alias = preset_bundle->filaments.get_preset_alias(*filament_it, true); + if (alias.empty()) + continue; - ConfigOption * printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings *printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_names.find(printer_str) != printer_names.end()) { - if (filament_id_set.find(filament_it->filament_id) != filament_id_set.end()) { - continue; - } else { - filament_id_set.insert(filament_it->filament_id); - // name matched - if (filament_it->is_system) { - filament_items.push_back(filament_it->alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[filament_it->alias] = filament_infos; - } else { - char target = '@'; - size_t pos = filament_it->name.find(target); - if (pos != std::string::npos) { - std::string user_preset_alias = filament_it->name.substr(0, pos - 1); - wxString wx_user_preset_alias = wxString(user_preset_alias.c_str(), wxConvUTF8); - user_preset_alias = wx_user_preset_alias.ToStdString(); - - filament_items.push_back(user_preset_alias); - FilamentInfos filament_infos; - filament_infos.filament_id = filament_it->filament_id; - filament_infos.setting_id = filament_it->setting_id; - map_filament_items[user_preset_alias] = filament_infos; - } - } - } - } - } + filament_items.push_back(alias); + FilamentInfos filament_infos; + filament_infos.filament_id = filament_it->filament_id; + filament_infos.setting_id = filament_it->setting_id; + map_filament_items[alias] = filament_infos; } } return filament_items; diff --git a/src/slic3r/GUI/Calibration.cpp b/src/slic3r/GUI/Calibration.cpp index 0c2b4f1659..f3351fdb6b 100644 --- a/src/slic3r/GUI/Calibration.cpp +++ b/src/slic3r/GUI/Calibration.cpp @@ -201,7 +201,7 @@ wxWindow* CalibrationDialog::create_check_option(wxString title, wxWindow* paren checkbox->SetToolTip(tooltip); text->SetToolTip(tooltip); - text->Bind(wxEVT_LEFT_DOWN, [this, check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); }); + text->Bind(wxEVT_LEFT_DOWN, [check](wxMouseEvent&) { check->SetValue(check->GetValue() ? false : true); }); m_checkbox_list[param] = check; m_checkbox_list[param]->SetValue(true); return checkbox; diff --git a/src/slic3r/GUI/CalibrationPanel.hpp b/src/slic3r/GUI/CalibrationPanel.hpp index eafb380c79..1f6b097af9 100644 --- a/src/slic3r/GUI/CalibrationPanel.hpp +++ b/src/slic3r/GUI/CalibrationPanel.hpp @@ -70,11 +70,7 @@ public: private: int m_my_devices_count{ 0 }; - int m_other_devices_count{ 0 }; bool m_dismiss{ false }; - wxWindow* m_placeholder_panel { nullptr }; - wxWindow* m_panel_body{ nullptr }; - wxBoxSizer* m_sizer_body{ nullptr }; wxBoxSizer* m_sizer_my_devices{ nullptr }; wxScrolledWindow* m_scrolledWindow{ nullptr }; wxTimer* m_refresh_timer{ nullptr }; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index b1f5c206c6..f80562578d 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1,6 +1,7 @@ #include "CalibrationWizard.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "MsgDialog.hpp" #include "CalibrationWizardPage.hpp" #include "../../libslic3r/calib.hpp" @@ -477,7 +478,7 @@ void CalibrationWizard::on_cali_go_home() if (go_home_dialog == nullptr) go_home_dialog = new SecondaryCheckDialog(this, wxID_ANY, _L("Confirm")); - go_home_dialog->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, method](wxCommandEvent &e) { + go_home_dialog->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this](wxCommandEvent &e) { if (curr_obj) { curr_obj->command_task_abort(); } else { diff --git a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp index d9604da84a..152f46f37c 100644 --- a/src/slic3r/GUI/CalibrationWizardCaliPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardCaliPage.cpp @@ -90,7 +90,7 @@ void CalibrationCaliPage::on_subtask_abort(wxCommandEvent& event) if (abort_dlg == nullptr) { abort_dlg = new SecondaryCheckDialog(this->GetParent(), wxID_ANY, _L("Cancel print")); - abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [this, obj](wxCommandEvent& e) { + abort_dlg->Bind(EVT_SECONDARY_CHECK_CONFIRM, [obj](wxCommandEvent& e) { if (obj) obj->command_task_abort(); }); } diff --git a/src/slic3r/GUI/CalibrationWizardPage.cpp b/src/slic3r/GUI/CalibrationWizardPage.cpp index ef17da9081..c117ec8857 100644 --- a/src/slic3r/GUI/CalibrationWizardPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPage.cpp @@ -762,7 +762,7 @@ void CaliPageActionPanel::bind_button(CaliPageActionType action_type, bool is_bl if (is_block) { m_action_btns[i]->Bind(wxEVT_BUTTON, - [this](wxCommandEvent& evt) { + [](wxCommandEvent& evt) { MessageDialog msg(nullptr, _L("The current firmware version of the printer does not support calibration.\nPlease upgrade the printer firmware."), _L("Calibration not supported"), wxOK | wxICON_WARNING); msg.ShowModal(); }); diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index db97354ad1..7a83d39dd3 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -1,5 +1,7 @@ #include #include "CalibrationWizardPresetPage.hpp" +#include "GUI.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" #include "MsgDialog.hpp" @@ -360,7 +362,7 @@ void CaliPresetCustomRangePanel::create_panel(wxWindow* parent) int max_decimal_length; if (i <= 1) max_decimal_length = 3; - else if (i >= 2) + else max_decimal_length = 4; if (decimal_number > max_decimal_length) { int allowed_length = number.length() - decimal_number + max_decimal_length; @@ -1015,7 +1017,7 @@ wxBoxSizer* CalibrationPresetPage::create_ams_items_sizer(MachineObject* obj, wx auto ams_items_sizer = new wxBoxSizer(wxHORIZONTAL); for (auto &info : ams_info) { auto preview_ams_item = new AMSPreview(ams_preview_panel, wxID_ANY, info, info.ams_type); - preview_ams_item->Update(info); + preview_ams_item->UpdateInfo(info); preview_ams_item->Open(); ams_preview_list.push_back(preview_ams_item); std::string ams_id = preview_ams_item->get_ams_id(); diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp index 78bc4bb77f..427f022d1c 100644 --- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp +++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp @@ -1,4 +1,5 @@ #include "CalibrationWizardSavePage.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "Widgets/Label.hpp" #include "MsgDialog.hpp" @@ -272,7 +273,7 @@ void CaliPASaveAutoPanel::sync_cali_result(const std::vector& cal preset_names = default_naming(preset_names); std::vector sorted_cali_result = cali_result; - std::sort(sorted_cali_result.begin(), sorted_cali_result.end(), [this](const PACalibResult &left, const PACalibResult& right) { + std::sort(sorted_cali_result.begin(), sorted_cali_result.end(), [](const PACalibResult &left, const PACalibResult& right) { return left.tray_id < right.tray_id; }); @@ -366,7 +367,7 @@ void CaliPASaveAutoPanel::sync_cali_result(const std::vector& cal } } - comboBox_tray_name->Bind(wxEVT_COMBOBOX, [this, comboBox_tray_name, k_value, n_value](auto& e) { + comboBox_tray_name->Bind(wxEVT_COMBOBOX, [comboBox_tray_name](auto& e) { int selection = comboBox_tray_name->GetSelection(); auto history = filtered_results[selection]; }); @@ -744,7 +745,7 @@ void CaliPASaveAutoPanel::sync_cali_result_for_multi_extruder(const std::vector< } } - comboBox_tray_name->Bind(wxEVT_COMBOBOX, [this, comboBox_tray_name, k_value, n_value](auto &e) { + comboBox_tray_name->Bind(wxEVT_COMBOBOX, [comboBox_tray_name](auto &e) { int selection = comboBox_tray_name->GetSelection(); auto history = filtered_results[selection]; }); diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index 0ee5694a34..cc7e00eec6 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -140,7 +140,7 @@ CameraPopup::CameraPopup(wxWindow *parent) vcamera_guide_link->Wrap(-1); vcamera_guide_link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); auto text_size = vcamera_guide_link->GetTextExtent(text); - vcamera_guide_link->Bind(wxEVT_LEFT_DOWN, [this, url](wxMouseEvent& e) {wxLaunchDefaultBrowser(url); }); + vcamera_guide_link->Bind(wxEVT_LEFT_DOWN, [url](wxMouseEvent& e) {wxLaunchDefaultBrowser(url); }); link_underline = new wxPanel(m_panel, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); link_underline->SetBackgroundColour(wxColour(0x1F, 0x8E, 0xEA)); diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index dbdb81a9cb..f45ebb6e42 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -72,8 +72,10 @@ private: SwitchButton* m_switch_recording; wxStaticText* m_text_vcamera; SwitchButton* m_switch_vcamera; +#if !BBL_RELEASE_TO_PUBLIC wxStaticText* m_text_liveview_retry; SwitchButton* m_switch_liveview_retry; +#endif //BBL_RELEASE_TO_PUBLIC wxStaticText* m_custom_camera_hint; TextInput* m_custom_camera_input; Button* m_custom_camera_input_confirm; diff --git a/src/slic3r/GUI/CapsuleButton.cpp b/src/slic3r/GUI/CapsuleButton.cpp index 8afe39889e..8d71f9911e 100644 --- a/src/slic3r/GUI/CapsuleButton.cpp +++ b/src/slic3r/GUI/CapsuleButton.cpp @@ -1,5 +1,6 @@ #include "GUI_App.hpp" #include "CapsuleButton.hpp" +#include "Widgets/StateColor.hpp" #include #include "wx/graphics.h" #include "Widgets/Label.hpp" diff --git a/src/slic3r/GUI/ColorDecomposeSupport.cpp b/src/slic3r/GUI/ColorDecomposeSupport.cpp index e8fb4c9082..cfd0d02532 100644 --- a/src/slic3r/GUI/ColorDecomposeSupport.cpp +++ b/src/slic3r/GUI/ColorDecomposeSupport.cpp @@ -1,4 +1,5 @@ #include "ColorDecomposeSupport.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "MixedFilamentDialog.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" @@ -62,10 +63,16 @@ std::string decompose_basic_type_from_source(size_t source_config_idx, auto& project_config = wxGetApp().preset_bundle->project_config; if (auto* filament_id_opt = project_config.option("filament_id")) { if (source_config_idx < filament_id_opt->values.size()) { - const std::string& filament_id = filament_id_opt->values[source_config_idx]; - if (filament_id == kDecomposePetgFilamentId) + // Dead in practice: "filament_id" is not in PresetBundle's s_project_options, so this + // option() lookup (create=false) always returns null and the block never runs. Kept as + // found, with the translation the values would need: they would be our OF ids, and the + // two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string& orca_filament_id = filament_id_opt->values[source_config_idx]; + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(orca_filament_id) : orca_filament_id; + if (printer_filament_id == kDecomposePetgFilamentId) return kDecomposePetgBasicType; - if (filament_id == kDecomposePlaFilamentId) + if (printer_filament_id == kDecomposePlaFilamentId) return kDecomposePlaBasicType; } } @@ -82,9 +89,14 @@ std::string decompose_basic_type_from_source(size_t source_config_idx, std::string decompose_basic_filament_id(const std::string& basic_type) { - if (basic_type == kDecomposePetgBasicType) - return kDecomposePetgFilamentId; - return kDecomposePlaFilamentId; + // The result becomes DecomposeOfficialComponent::filament_id, which the rest of this file + // reads as one of our OF ids (translating back before it compares against the printer's + // ids), so translate on the way out; kDecompose*FilamentId itself stays the printer-side + // literal. The only place that would carry it further, project_config's "filament_id", is + // dead code: that key is not in PresetBundle's s_project_options. + const std::string printer_filament_id = basic_type == kDecomposePetgBasicType ? kDecomposePetgFilamentId : kDecomposePlaFilamentId; + auto* agent = wxGetApp().getAgent(); + return agent ? agent->to_orca_filament_id(printer_filament_id) : printer_filament_id; } void set_created_standard_component_metadata(size_t config_idx, const DecomposeOfficialComponent& component) @@ -98,8 +110,11 @@ void set_created_standard_component_metadata(size_t config_idx, const DecomposeO } } - const std::string type = component.filament_id == kDecomposePetgFilamentId ? kDecomposePetgShortType : - component.filament_id == kDecomposePlaFilamentId ? kDecomposePlaShortType : ""; + // component.filament_id is our OF id; the two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(component.filament_id) : component.filament_id; + const std::string type = printer_filament_id == kDecomposePetgFilamentId ? kDecomposePetgShortType : + printer_filament_id == kDecomposePlaFilamentId ? kDecomposePlaShortType : ""; if (!type.empty()) { if (auto* type_opt = project_config.option("filament_type")) { while (type_opt->values.size() <= config_idx) @@ -151,7 +166,12 @@ DecomposeOfficialComponent lookup_decompose_official_component( continue; if (item.contains("fila_color") && item["fila_color"].is_array() && !item["fila_color"].empty()) result.color_hex = decompose_normalize_color_hex(item["fila_color"][0].get()); - result.filament_id = item.value("fila_id", result.filament_id); + // fila_id from this shipped, Bambu-keyed color table is a printer-side id; translate it so + // result.filament_id stays an OF id like the rest of this struct (the fallback default, + // result.filament_id, is already OF and passes through unchanged). + const std::string fila_id = item.value("fila_id", result.filament_id); + auto* agent = wxGetApp().getAgent(); + result.filament_id = agent ? agent->to_orca_filament_id(fila_id) : fila_id; return result; } } @@ -211,8 +231,11 @@ int find_existing_decompose_component( auto* type_opt = project_config.option("filament_type"); const PresetBundle& preset_bundle = *wxGetApp().preset_bundle; const size_t num_physical = physical_colors.size(); - const std::string expected_basic_type = component.filament_id == kDecomposePetgFilamentId ? kDecomposePetgBasicType : - component.filament_id == kDecomposePlaFilamentId ? kDecomposePlaBasicType : ""; + // component.filament_id is our OF id; the two constants are the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(component.filament_id) : component.filament_id; + const std::string expected_basic_type = printer_filament_id == kDecomposePetgFilamentId ? kDecomposePetgBasicType : + printer_filament_id == kDecomposePlaFilamentId ? kDecomposePlaBasicType : ""; const std::string expected_short_type = expected_basic_type == kDecomposePetgBasicType ? kDecomposePetgShortType : expected_basic_type == kDecomposePlaBasicType ? kDecomposePlaShortType : ""; const std::string expected_preset_part = expected_basic_type.empty() ? "" : std::string(kDecomposeBambuPresetPrefix) + expected_basic_type; @@ -372,8 +395,9 @@ bool confirm_create_decompose_missing_components(wxWindow* parent, const std::ve missing_text += missing[i].display_name; } - wxString message = _L("The current filament list does not contain ") + missing_text + - _L(". A project filament required by the mixed filament will be created automatically after decomposition."); + wxString message = wxString::Format(_L("The current filament list does not contain %s. A project filament required by " + "the mixed filament will be created automatically after decomposition."), + missing_text); MessageDialog dlg(parent, message, _L("Tip"), wxOK | wxCANCEL | wxICON_INFORMATION); dlg.show_dsa_button(); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index d15164ef63..f40c71ec4a 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -2,6 +2,7 @@ #include "ConfigManipulation.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "DeviceCore/DevConfigUtil.h" #include "format.hpp" #include "libslic3r/Config.hpp" #include "libslic3r/Model.hpp" @@ -453,7 +454,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (config->opt_bool("alternate_extra_wall") && (config->opt_enum("ensure_vertical_shell_thickness") == evstAll)) { - wxString msg_text = _(L("Alternate extra wall does't work well when ensure vertical shell thickness is set to All.")); + wxString msg_text = _(L("Alternate extra wall doesn't work well when ensure vertical shell thickness is set to All.")); if (is_global_config) msg_text += "\n\n" + _(L("Change these settings automatically?\n" @@ -642,7 +643,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con if (config->opt_enum("seam_slope_type") != SeamScarfType::None && config->get_abs_value("seam_slope_start_height") >= layer_height) { - const wxString msg_text = _(L("seam_slope_start_height need to be smaller than layer_height.\nReset to 0.")); + const wxString msg_text = _(L("seam_slope_start_height needs to be smaller than layer_height.\nReset to 0.")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; @@ -656,7 +657,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con float skin_depth = config->opt_float("skin_infill_depth"); if (config->opt_float("infill_lock_depth") > skin_depth) { // xgettext:no-c-format, no-boost-format - const wxString msg_text = _(L("Lock depth should smaller than skin depth.\nReset to 50% of skin depth.")); + const wxString msg_text = _(L("Lock depth should be smaller than skin depth.\nReset to 50% of skin depth.")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); DynamicPrintConfig new_conf = *config; is_msg_dlg_already_exist = true; @@ -741,14 +742,21 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in bool have_infill = config->option("sparse_infill_density")->value > 0; // sparse_infill_filament_id uses the same logic as in Print::extruders() for (auto el : { "sparse_infill_pattern", "infill_combination", "fill_multiline","infill_direction", - "minimum_sparse_infill_area", "sparse_infill_filament_id", "infill_anchor", "infill_anchor_max","infill_shift_step","sparse_infill_rotate_template","symmetric_infill_y_axis"}) + "minimum_sparse_infill_area", "sparse_infill_filament_id","infill_shift_step","sparse_infill_rotate_template","symmetric_infill_y_axis"}) toggle_line(el, have_infill); + InfillPattern pattern = config->opt_enum("sparse_infill_pattern"); + + // Orca: the concentric patterns follow the surface outline instead of crossing it, so there is + // nothing for an infill anchor to attach to. Hide the anchor settings for them. + bool have_infill_anchor = have_infill && pattern != ipConcentric && pattern != ipSpiralInset; + toggle_line("infill_anchor", have_infill_anchor); + toggle_line("infill_anchor_max", have_infill_anchor); + bool have_combined_infill = config->opt_bool("infill_combination") && have_infill; toggle_line("infill_combination_max_layer_height", have_combined_infill); // Infill patterns that support multiline infill. - InfillPattern pattern = config->opt_enum("sparse_infill_pattern"); bool have_multiline_infill_pattern = pattern == ipGyroid || pattern == ipGrid || pattern == ipRectilinear || pattern == ipTpmsD || pattern == ipTpmsFK || pattern == ipCrossHatch || pattern == ipHoneycomb || pattern == ipLateralLattice || pattern == ipLateralHoneycomb || pattern == ipConcentric || pattern == ipCubic || pattern == ipStars || pattern == ipAlignedRectilinear || pattern == ipLightning || pattern == ip3DHoneycomb || pattern == ipAdaptiveCubic || pattern == ipSupportCubic|| pattern == ipTriangles || pattern == ipQuarterCubic|| pattern == ipArchimedeanChords || pattern == ipHilbertCurve || pattern == ipOctagramSpiral; @@ -831,7 +839,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_line("separated_infills", is_internal_infill_separable); // Fill order is only meaningful for the center-based surface fill patterns; hide it otherwise. - auto is_centered_fill = [](InfillPattern p) { return p == ipConcentric || p == ipArchimedeanChords || p == ipOctagramSpiral; }; + auto is_centered_fill = [](InfillPattern p) { return p == ipConcentric || p == ipSpiralInset || p == ipArchimedeanChords || p == ipOctagramSpiral; }; toggle_line("top_surface_fill_order", has_top_shell && is_centered_fill(config->opt_enum("top_surface_pattern"))); toggle_line("bottom_surface_fill_order", has_bottom_shell && is_centered_fill(config->opt_enum("bottom_surface_pattern"))); @@ -1033,10 +1041,12 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_max_purge_speed", - "wipe_tower_bridging", "wipe_tower_extra_flow", - "wipe_tower_no_sparse_layers"}) + "wipe_tower_bridging", "wipe_tower_extra_flow"}) toggle_line(el, have_prime_tower && supports_wipe_tower_2); + // Orca: both tower generators skip sparse layers, so this is not a wipe tower 2 exclusive. + toggle_line("wipe_tower_no_sparse_layers", have_prime_tower); + WipeTowerWallType wipe_tower_wall_type = config->opt_enum("wipe_tower_wall_type"); bool have_rib_wall = (wipe_tower_wall_type == WipeTowerWallType::wtwRib)&&have_prime_tower; toggle_line("wipe_tower_cone_angle", have_prime_tower && supports_wipe_tower_2 && wipe_tower_wall_type == WipeTowerWallType::wtwCone); @@ -1047,6 +1057,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in toggle_line("single_extruder_multi_material_priming", !bSEMM && have_prime_tower && supports_wipe_tower_2); + bool use_cyclic_ordering = config->opt_enum("toolchange_ordering") == ToolChangeOrderingType::Cyclic; + toggle_line("toolchange_cyclic_order", use_cyclic_ordering); + toggle_line("toolchange_cyclic_first_layer", use_cyclic_ordering); + toggle_line("prime_volume",have_prime_tower && (!purge_in_primetower || !bSEMM)); for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"}) @@ -1096,6 +1110,9 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in auto is_role_based_wipe_speed = config->opt_bool("role_based_wipe_speed"); toggle_field("wipe_speed",!is_role_based_wipe_speed); + const bool have_wipe_inward = config->opt_bool("wipe_inward"); + toggle_line("wipe_inward_distance", have_wipe_inward); + for (auto el : {"accel_to_decel_enable", "accel_to_decel_factor"}) toggle_line(el, gcf_is_klipper); if(gcf_is_klipper) @@ -1117,6 +1134,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, in bool has_detect_overhang_wall = config->opt_bool("detect_overhang_wall"); bool has_overhang_reverse = config->opt_bool("overhang_reverse"); bool allow_overhang_reverse = !has_spiral_vase; + toggle_line("unsupported_wall_last", has_detect_overhang_wall); toggle_line("overhang_reverse", allow_overhang_reverse); toggle_line("overhang_reverse_internal_only", allow_overhang_reverse && has_overhang_reverse); bool has_overhang_reverse_internal_only = config->opt_bool("overhang_reverse_internal_only"); diff --git a/src/slic3r/GUI/ConfigValueFormatter.cpp b/src/slic3r/GUI/ConfigValueFormatter.cpp new file mode 100644 index 0000000000..17cf902217 --- /dev/null +++ b/src/slic3r/GUI/ConfigValueFormatter.cpp @@ -0,0 +1,256 @@ +#include "ConfigValueFormatter.hpp" + +#include +#include +#include +#include + +#include +#include + +#include "libslic3r/Config.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include "I18N.hpp" +#include "GUI.hpp" +#include "Field.hpp" + +namespace Slic3r { +namespace GUI { + +std::string get_pure_opt_key(const std::string& opt_key) +{ + std::string pure_key = opt_key; + const int pos = pure_key.find("#"); + if (pos > 0) + boost::erase_tail(pure_key, pure_key.size() - pos); + return pure_key; +} + +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill, int idx) +{ + const ConfigOptionDef& def = config.def()->options.at(opt_key); + const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); + int val = 0; + + if (idx >= 0) + val = dynamic_cast(config.option(opt_key))->get_at(idx); + else + val = config.option(opt_key)->getInt(); + + // Each infill doesn't use all list of infill declared in PrintConfig.hpp. + // So we should "convert" val to the correct one + if (is_infill) { + for (auto key_val : *def.enum_keys_map) + if (int(key_val.second) == val) { + auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); + if (it == def.enum_values.end()) + return ""; + return from_u8(_utf8(names[it - def.enum_values.begin()])); + } + return _L("Undefined"); + } + return from_u8(_utf8(names[val])); +} + +wxString get_full_label(const std::string& opt_key, const DynamicPrintConfig& config) +{ + const std::string pure_key = get_pure_opt_key(opt_key); + auto option = config.option(pure_key); + + if (!option || option->is_nil()) + return _L("N/A"); + + const ConfigOptionDef* opt = config.def()->get(pure_key); + return opt->full_label.empty() ? opt->label : opt->full_label; +} + +wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config) +{ + int orig_opt_idx = -1; + int opt_idx = -1; + int pos = opt_key.find("#"); + std::string temp_str = opt_key; + if (pos > 0) { + boost::erase_head(temp_str, pos + 1); + orig_opt_idx = std::atoi(temp_str.c_str()); + } + opt_idx = orig_opt_idx >= 0 ? orig_opt_idx : 0; + const std::string pure_key = get_pure_opt_key(opt_key); + auto option = config.option(pure_key); + if (!option) { + return _L("N/A"); + } + auto opt_vector = dynamic_cast(option); + + if ((option->is_scalar() && option->is_nil()) || + (option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx))) + return _L("N/A"); + + wxString out; + + const ConfigOptionDef* opt = config.def()->get(pure_key); + bool is_nullable = opt->nullable; + + switch (opt->type) { + case coInt: + return from_u8((boost::format("%1%") % config.opt_int(pure_key)).str()); + case coInts: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); + } + else { + auto values = config.opt(pure_key); + if (orig_opt_idx >= 0 && orig_opt_idx < values->size()) { + return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); + } + else { + std::string value_str; + for (int i = 0; i < values->size(); i++) { + value_str += std::to_string(values->get_at(i)); + if (i != values->size() - 1) { + value_str += ","; + } + } + return from_u8(value_str); + } + } + return _L("Undefined"); + } + case coBool: + return config.opt_bool(pure_key) ? "true" : "false"; + case coBools: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return values->get_at(opt_idx) ? "true" : "false"; + } + else { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return values->get_at(opt_idx) ? "true" : "false"; + } + return _L("Undefined"); + } + case coPercent: + return from_u8((boost::format("%1%%%") % int(config.optptr(pure_key)->getFloat())).str()); + case coPercents: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); + } + else { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); + } + return _L("Undefined"); + } + case coFloat: + return double_to_string(config.opt_float(pure_key)); + case coFloats: { + if (is_nullable) { + auto values = config.opt(pure_key); + if (opt_idx < values->size()) + return double_to_string(values->get_at(opt_idx)); + } + else { + auto values = config.opt(pure_key); + if (values && opt_idx < values->size()) + return double_to_string(values->get_at(opt_idx)); + } + return _L("Undefined"); + } + case coString: + return from_u8(config.opt_string(pure_key)); + case coStrings: { + const ConfigOptionStrings* strings = config.opt(pure_key); + if (strings) { + if (pure_key == "compatible_printers" || pure_key == "compatible_prints") { + if (strings->empty()) + return _L("All"); + for (size_t id = 0; id < strings->size(); id++) + out += from_u8(strings->get_at(id)) + "\n"; + out.RemoveLast(1); + return out; + } + if (!strings->empty() && opt_idx < strings->values.size()) + return from_u8(strings->get_at(opt_idx)); + } + break; + } + case coFloatOrPercent: { + const ConfigOptionFloatOrPercent* opt = config.opt(pure_key); + if (opt) + out = double_to_string(opt->value) + (opt->percent ? "%" : ""); + return out; + } + case coFloatsOrPercents: { + const auto* values = static_cast*>(option); + // Orca: Preset comparison may request the entire vector instead of an indexed entry. + if (orig_opt_idx < 0) + return from_u8(option->serialize()); + if (opt_idx < values->size()) { + const FloatOrPercent& value = values->get_at(opt_idx); + return double_to_string(value.value) + (value.percent ? "%" : ""); + } + return _L("Undefined"); + } + case coEnum: { + return get_string_from_enum(pure_key, config, + pure_key == "top_surface_pattern" || + pure_key == "bottom_surface_pattern" || + pure_key == "internal_solid_infill_pattern" || + pure_key == "sparse_infill_pattern" || + pure_key == "ironing_pattern" || + pure_key == "support_ironing_pattern" || + pure_key == "support_pattern" || + pure_key == "support_interface_pattern") + ; + } + case coEnums: { + return get_string_from_enum(pure_key, config, + pure_key == "top_surface_pattern" || + pure_key == "bottom_surface_pattern" || + pure_key == "internal_solid_infill_pattern" || + pure_key == "sparse_infill_pattern" || + pure_key == "ironing_pattern" || + pure_key == "support_ironing_pattern" || + pure_key == "support_pattern" || + pure_key == "support_interface_pattern" + , opt_idx); + } + case coPoint: { + Vec2d val = config.opt(pure_key)->value; + return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); + } + case coPoints: { + //BBS: add bed_exclude_area + if (pure_key == "printable_area" || pure_key == "thumbnails") { + ConfigOptionPoints points = *config.option(pure_key); + //BuildVolume build_volume = {points.values, 0.}; + return get_thumbnails_string(points.values); + } + else if (pure_key == "bed_exclude_area") { + return get_thumbnails_string(config.option(pure_key)->values); + } + else if (pure_key == "head_wrap_detect_zone") { + return get_thumbnails_string(config.option(pure_key)->values); + } + else if (pure_key == "wrapping_exclude_area") { + return get_thumbnails_string(config.option(pure_key)->values); + } + Vec2d val = config.opt(pure_key)->get_at(opt_idx); + return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); + } + default: + break; + } + return out; +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/ConfigValueFormatter.hpp b/src/slic3r/GUI/ConfigValueFormatter.hpp new file mode 100644 index 0000000000..67b16f9326 --- /dev/null +++ b/src/slic3r/GUI/ConfigValueFormatter.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include + +namespace Slic3r { + +class DynamicPrintConfig; + +namespace GUI { + +// Human-readable value of opt_key (may carry a "#" suffix) in config. +wxString get_string_value(const std::string& opt_key, const DynamicPrintConfig& config); + +// Full label of opt_key; "N/A" when the option is not set. +wxString get_full_label(const std::string& opt_key, const DynamicPrintConfig& config); + +// Strip the "#" suffix (if any) from the option key. +std::string get_pure_opt_key(const std::string& opt_key); + +// Localized label of the currently selected value of an enum option. +wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false, int idx = -1); + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index dba8699105..412df19091 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -2752,7 +2752,7 @@ ConfigWizard::ConfigWizard(wxWindow *parent) }); if (wxLinux_gtk3) - this->Bind(wxEVT_SHOW, [this, vsizer](const wxShowEvent& e) { + this->Bind(wxEVT_SHOW, [](const wxShowEvent& e) { ; }); diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 33f49c2a38..e6fb6e0782 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -599,7 +599,9 @@ static char* read_json_file(const std::string &preset_path) return NULL; } - fread(json_contents, 1, file_size, json_file); + const size_t read_bytes = fread(json_contents, 1, file_size, json_file); + if (read_bytes != static_cast(file_size)) + BOOST_LOG_TRIVIAL(error) << "Read " << read_bytes << " of " << file_size << " bytes from the JSON file"; fclose(json_file); return json_contents; @@ -1885,7 +1887,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_nozzle_diameter_item(wxWindow *par m_custom_nozzle_diameter_ctrl = new wxTextCtrl(parent, wxID_ANY, "", wxDefaultPosition, NAME_OPTION_COMBOBOX_SIZE); m_custom_nozzle_diameter_ctrl->SetHint(_L("Input Custom Nozzle Diameter")); - m_custom_nozzle_diameter_ctrl->Bind(wxEVT_CHAR, [this](wxKeyEvent &event) { + m_custom_nozzle_diameter_ctrl->Bind(wxEVT_CHAR, [](wxKeyEvent &event) { int key = event.GetKeyCode(); if (key != 44 && key != 46 && cannot_input_key.find(key) != cannot_input_key.end()) { // "@" can not be inputed event.Skip(false); @@ -3867,14 +3869,14 @@ void ExportConfigsDialog::select_curr_radiobox(std::vectorAdd(create_checkbox(m_presets_window, preset.second, printer_name, m_preset), 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(5)); } - m_serial_text->SetLabel(_L("Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only printer names with user printer presets will be displayed, and each preset you choose will be exported as a ZIP archive.")); } else if (export_type == m_exprot_type.filament_preset) { for (std::pair>> filament_name_to_preset : m_filament_name_to_presets) { if (filament_name_to_preset.second.empty()) continue; wxString filament_name = wxString::FromUTF8(filament_name_to_preset.first); m_preset_sizer->Add(create_checkbox(m_presets_window, filament_name, m_printer_name), 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(5)); } - m_serial_text->SetLabel(_L("Only the filament names with user filament presets will be displayed, \nand all user filament presets in each filament name you select will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only the filament names with user filament presets will be displayed, \nand all user filament presets in each filament name you select will be exported as a ZIP archive.")); } else if (export_type == m_exprot_type.process_preset) { for (std::pair> presets : m_process_presets) { Preset * printer_preset = preset_bundle->printers.find_preset(presets.first, false); @@ -3890,7 +3892,7 @@ void ExportConfigsDialog::select_curr_radiobox(std::vectorSetLabel(_L("Only printer names with changed process presets will be displayed, \nand all user process presets in each printer name you select will be exported as a zip.")); + m_serial_text->SetLabel(_L("Only printer names with changed process presets will be displayed, \nand all user process presets in each printer name you select will be exported as a ZIP archive.")); } //m_presets_window->SetSizerAndFit(m_preset_sizer); m_presets_window->Layout(); diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp index 678f4d40fd..07811aa144 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.hpp +++ b/src/slic3r/GUI/CreatePresetsDialog.hpp @@ -74,12 +74,9 @@ private: std::unordered_set m_system_filament_types_set; std::set m_visible_printers; CreateType m_create_type; - Button * m_button_create = nullptr; - Button * m_button_cancel = nullptr; ComboBox * m_filament_vendor_combobox = nullptr; ::CheckBox * m_can_not_find_vendor_checkbox = nullptr; ComboBox * m_filament_type_combobox = nullptr; - ComboBox * m_exist_vendor_combobox = nullptr; ComboBox * m_filament_preset_combobox = nullptr; TextInput * m_filament_custom_vendor_input = nullptr; wxGridSizer * m_filament_presets_sizer = nullptr; diff --git a/src/slic3r/GUI/DailyTips.cpp b/src/slic3r/GUI/DailyTips.cpp index f585425130..894c0316bb 100644 --- a/src/slic3r/GUI/DailyTips.cpp +++ b/src/slic3r/GUI/DailyTips.cpp @@ -1,4 +1,5 @@ #include "DailyTips.hpp" +#include "slic3r/GUI/Widgets/Label.hpp" #ifndef IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS @@ -245,7 +246,6 @@ DailyTipsPanel::DailyTipsPanel(bool can_expand, DailyTipsLayout layout) m_width(0), m_height(0), m_can_expand(can_expand), - m_layout(layout), m_uid(DailyTipsPanel::uid++), m_dailytips_renderer(std::make_unique(layout)) { diff --git a/src/slic3r/GUI/DailyTips.hpp b/src/slic3r/GUI/DailyTips.hpp index 508a8ad7e9..537fed4952 100644 --- a/src/slic3r/GUI/DailyTips.hpp +++ b/src/slic3r/GUI/DailyTips.hpp @@ -51,7 +51,6 @@ private: int m_uid; bool m_first_enter{ false }; bool m_is_dark{ false }; - DailyTipsLayout m_layout{ DailyTipsLayout::Vertical }; float m_fade_opacity{ 1.0f }; }; diff --git a/src/slic3r/GUI/DeviceCore/DevCalib.cpp b/src/slic3r/GUI/DeviceCore/DevCalib.cpp index cf7ee1d90e..ddf71e0c62 100644 --- a/src/slic3r/GUI/DeviceCore/DevCalib.cpp +++ b/src/slic3r/GUI/DeviceCore/DevCalib.cpp @@ -1,5 +1,7 @@ #include #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/UserNotification.hpp" #include "libslic3r/PrintConfig.hpp" diff --git a/src/slic3r/GUI/DeviceCore/DevConfig.h b/src/slic3r/GUI/DeviceCore/DevConfig.h index 449b5a7253..b0cdcb936e 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfig.h +++ b/src/slic3r/GUI/DeviceCore/DevConfig.h @@ -54,7 +54,7 @@ public: void ParseCalibrationConfig(const json& print_json); //cali private: - MachineObject* m_obj; + [[maybe_unused]] MachineObject* m_obj; /*configure vals*/ // chamber diff --git a/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp b/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp index b86d3cde98..25008cad29 100644 --- a/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp +++ b/src/slic3r/GUI/DeviceCore/DevConfigUtil.cpp @@ -16,24 +16,27 @@ namespace Slic3r // This block is never executed at runtime. static void _toolhead_translation_markers() { - // Dynamic toolhead display names from JSON config — xgettext cannot scan these - L("Main Extruder"); L("Main extruder"); L("main extruder"); - L("Auxiliary Extruder"); L("Auxiliary extruder"); L("auxiliary extruder"); - L("Left Extruder"); L("Left extruder"); L("left extruder"); - L("Right Extruder"); L("Right extruder"); L("right extruder"); - L("Main Nozzle"); L("Main nozzle"); L("main nozzle"); - L("Auxiliary Nozzle"); L("Auxiliary nozzle"); L("auxiliary nozzle"); - L("Left Nozzle"); L("Left nozzle"); L("left nozzle"); - L("Right Nozzle"); L("Right nozzle"); L("right nozzle"); - L("Main Hotend"); L("Main hotend"); L("main hotend"); - L("Auxiliary Hotend"); L("Auxiliary hotend"); L("auxiliary hotend"); - L("Left Hotend"); L("Left hotend"); L("left hotend"); - L("Right Hotend"); L("Right hotend"); L("right hotend"); - // standalone position words (short_name=true runtime results) - L("main"); L("auxiliary"); - L("Main"); L("Auxiliary"); - L("left"); L("right"); - L("Left"); L("Right"); + // Possible runtime values of tool_head_display_names, marked for extraction. + static const char *const markers[] = { + L("Main Extruder"), L("Main extruder"), L("main extruder"), + L("Auxiliary Extruder"), L("Auxiliary extruder"), L("auxiliary extruder"), + L("Left Extruder"), L("Left extruder"), L("left extruder"), + L("Right Extruder"), L("Right extruder"), L("right extruder"), + L("Main Nozzle"), L("Main nozzle"), L("main nozzle"), + L("Auxiliary Nozzle"), L("Auxiliary nozzle"), L("auxiliary nozzle"), + L("Left Nozzle"), L("Left nozzle"), L("left nozzle"), + L("Right Nozzle"), L("Right nozzle"), L("right nozzle"), + L("Main Hotend"), L("Main hotend"), L("main hotend"), + L("Auxiliary Hotend"), L("Auxiliary hotend"), L("auxiliary hotend"), + L("Left Hotend"), L("Left hotend"), L("left hotend"), + L("Right Hotend"), L("Right hotend"), L("right hotend"), + // standalone position words (short_name=true runtime results) + L("main"), L("auxiliary"), + L("Main"), L("Auxiliary"), + L("left"), L("right"), + L("Left"), L("Right"), + }; + (void) markers; } std::string DevPrinterConfigUtil::m_resource_file_path = ""; diff --git a/src/slic3r/GUI/DeviceCore/DevExtensionTool.h b/src/slic3r/GUI/DeviceCore/DevExtensionTool.h index 02f0b6a213..c3b9c5b0b7 100644 --- a/src/slic3r/GUI/DeviceCore/DevExtensionTool.h +++ b/src/slic3r/GUI/DeviceCore/DevExtensionTool.h @@ -31,7 +31,7 @@ protected: DevExtensionTool(MachineObject* obj); private: - MachineObject* m_owner = nullptr; + [[maybe_unused]] MachineObject* m_owner = nullptr; enum MountState { diff --git a/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h b/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h index efdad308b2..ca59b9fd3e 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h +++ b/src/slic3r/GUI/DeviceCore/DevFilaAmsSetting.h @@ -28,7 +28,7 @@ public: void SetAutoRefillEnabled(bool enable) { m_enable_auto_refill = enable; } private: - DevFilaSystem* m_owner = nullptr; + [[maybe_unused]] DevFilaSystem* m_owner = nullptr; std::optional m_enable_detect_on_insert = false; bool m_enable_detect_on_powerup = false; diff --git a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp index e75622720c..7ae990730a 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaBlackList.cpp @@ -4,6 +4,8 @@ #include #include "DevFilaBlackList.h" +#include "slic3r/Utils/NetworkAgent.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "DevFilaSystem.h" #include "DevManager.h" #include "DevConfigUtil.h" @@ -241,8 +243,11 @@ void check_filaments(const DevFilaBlacklist::CheckFilamentInfo& check_info, DevF std::set white_fila_ids = filament_item.contains("white_fila_ids") ? filament_item["white_fila_ids"].get>() : std::set(); if (!white_fila_ids.empty() && !check_info.fila_id.empty()) { - auto it = std::find_if(white_fila_ids.begin(), white_fila_ids.end(), [&check_info](const std::string& white_fila_id) { - return white_fila_id == check_info.fila_id; + // check_info.fila_id is our OF id; white_fila_ids in filaments_blacklist.json holds the printer's own. + auto* agent = Slic3r::GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(check_info.fila_id) : check_info.fila_id; + auto it = std::find_if(white_fila_ids.begin(), white_fila_ids.end(), [&printer_filament_id](const std::string& white_fila_id) { + return white_fila_id == printer_filament_id; }); if (it != white_fila_ids.end()) { continue; } } diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp index 806af9d5f0..881aa75d20 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp +++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.cpp @@ -1,10 +1,12 @@ #include #include "DevFilaSystem.h" +#include "slic3r/Utils/NetworkAgent.hpp" #include "DevNozzleSystem.h" // DevNozzle / DevNozzleSystem for GetNozzleFlowStringByAmsId // TODO: remove this include #include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/I18N.hpp" +#include "slic3r/GUI/GUI_App.hpp" #include "DevUtil.h" #include "DevUtilBackend.h" @@ -95,7 +97,12 @@ std::string DevAmsTray::get_filament_type() if (m_fila_type == "Sup.ABS") { return "ABS-S"; } if (m_fila_type == "Support W") { return "PLA-S"; } if (m_fila_type == "Support G") { return "PA-S"; } - if (m_fila_type == "Support") { if (setting_id == "GFS00") { m_fila_type = "PLA-S"; } else if (setting_id == "GFS01") { m_fila_type = "PA-S"; } else { return "PLA-S"; } } + // setting_id is our OF id; GFS00/GFS01 are the printer's own support-filament ids. + if (m_fila_type == "Support") { + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(setting_id) : setting_id; + if (printer_filament_id == "GFS00") { m_fila_type = "PLA-S"; } else if (printer_filament_id == "GFS01") { m_fila_type = "PA-S"; } else { return "PLA-S"; } + } return m_fila_type; } @@ -654,11 +661,14 @@ void DevFilaSystemParser::ParseV1_0(const json& jj, MachineObject* obj, DevFilaS curr_tray->setting_id = (*tray_it)["tray_info_idx"].get(); //std::string type = (*tray_it)["tray_type"].get(); std::string type = MachineObject::setting_id_to_type(curr_tray->setting_id, (*tray_it)["tray_type"].get()); - if (curr_tray->setting_id == "GFS00") + // curr_tray->setting_id is our OF id; GFS00/GFS01 are the printer's own support-filament ids. + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(curr_tray->setting_id) : curr_tray->setting_id; + if (printer_filament_id == "GFS00") { curr_tray->m_fila_type = "PLA-S"; } - else if (curr_tray->setting_id == "GFS01") + else if (printer_filament_id == "GFS01") { curr_tray->m_fila_type = "PA-S"; } diff --git a/src/slic3r/GUI/DeviceCore/DevFilaSystem.h b/src/slic3r/GUI/DeviceCore/DevFilaSystem.h index 36354cebbf..51fb744f72 100644 --- a/src/slic3r/GUI/DeviceCore/DevFilaSystem.h +++ b/src/slic3r/GUI/DeviceCore/DevFilaSystem.h @@ -58,7 +58,7 @@ public: std::string id; std::string tag_uid; // tag_uid - std::string setting_id; // tray_info_idx + std::string setting_id; // tray_info_idx, map to the filament_id std::string filament_setting_id; // setting_id std::string m_fila_type; std::string sub_brands; diff --git a/src/slic3r/GUI/DeviceCore/DevFirmware.h b/src/slic3r/GUI/DeviceCore/DevFirmware.h index 9dae603702..5b0ea986a2 100644 --- a/src/slic3r/GUI/DeviceCore/DevFirmware.h +++ b/src/slic3r/GUI/DeviceCore/DevFirmware.h @@ -64,7 +64,7 @@ public: DevFirmware(MachineObject* obj) : m_owner(obj) {} private: - MachineObject* m_owner = nullptr; + [[maybe_unused]] MachineObject* m_owner = nullptr; }; } // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceCore/DevHMS.h b/src/slic3r/GUI/DeviceCore/DevHMS.h index 205cad77b3..f72d899187 100644 --- a/src/slic3r/GUI/DeviceCore/DevHMS.h +++ b/src/slic3r/GUI/DeviceCore/DevHMS.h @@ -21,7 +21,7 @@ public: const std::vector& GetHMSItems() const { return m_hms_list; }; private: - MachineObject* m_object = nullptr; + [[maybe_unused]] MachineObject* m_object = nullptr; // all hms for this machine std::vector m_hms_list; diff --git a/src/slic3r/GUI/DeviceCore/DevInfo.h b/src/slic3r/GUI/DeviceCore/DevInfo.h index 66224888e6..259c277e46 100644 --- a/src/slic3r/GUI/DeviceCore/DevInfo.h +++ b/src/slic3r/GUI/DeviceCore/DevInfo.h @@ -34,7 +34,7 @@ private: //std::string m_connect_type; //std::string m_bind_state; - MachineObject* m_owner = nullptr; + [[maybe_unused]] MachineObject* m_owner = nullptr; }; } // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/DeviceCore/DevManager.cpp b/src/slic3r/GUI/DeviceCore/DevManager.cpp index 27ab690d46..0a456a9267 100644 --- a/src/slic3r/GUI/DeviceCore/DevManager.cpp +++ b/src/slic3r/GUI/DeviceCore/DevManager.cpp @@ -889,7 +889,7 @@ namespace Slic3r obj->m_is_online = elem["dev_online"].get(); if (elem.contains("dev_model_name") && !elem["dev_model_name"].is_null()) { auto printer_type = elem["dev_model_name"].get(); - for (const std::pair> &pair : device_subseries) { + for (const auto &pair : device_subseries) { auto it = std::find(pair.second.begin(), pair.second.end(), printer_type); if (it != pair.second.end()) { diff --git a/src/slic3r/GUI/DeviceCore/DevMapping.cpp b/src/slic3r/GUI/DeviceCore/DevMapping.cpp index 165492c9f6..0040bb05f2 100644 --- a/src/slic3r/GUI/DeviceCore/DevMapping.cpp +++ b/src/slic3r/GUI/DeviceCore/DevMapping.cpp @@ -1,3 +1,5 @@ +#include + #include #include "DevMapping.h" #include "DevFilaSystem.h" @@ -270,7 +272,7 @@ namespace Slic3r std::set picked_tar; for (int k = 0; k < distance_map.size(); k++) { - float min_val = INT_MAX; + float min_val = std::numeric_limits::max(); int picked_src_idx = -1; int picked_tar_idx = -1; for (int i = 0; i < distance_map.size(); i++) diff --git a/src/slic3r/GUI/DeviceCore/DevStatus.h b/src/slic3r/GUI/DeviceCore/DevStatus.h index 45f76d2239..4ed0d5c416 100644 --- a/src/slic3r/GUI/DeviceCore/DevStatus.h +++ b/src/slic3r/GUI/DeviceCore/DevStatus.h @@ -36,7 +36,7 @@ public: void ParseStatus(const nlohmann::json& print_jj); private: - MachineObject *m_owner = nullptr; + [[maybe_unused]] MachineObject *m_owner = nullptr; std::optional m_job_state; // could be nullopt for some old firmware }; diff --git a/src/slic3r/GUI/DeviceCore/DevStorage.h b/src/slic3r/GUI/DeviceCore/DevStorage.h index 537665f778..8ac53b7fea 100644 --- a/src/slic3r/GUI/DeviceCore/DevStorage.h +++ b/src/slic3r/GUI/DeviceCore/DevStorage.h @@ -31,7 +31,7 @@ public: bool is_timelapse_storage_low(const std::string& storage) const; private: - MachineObject *m_owner; + [[maybe_unused]] MachineObject *m_owner; SdcardState m_sdcard_state { NO_SDCARD }; // timelapse storage space info (from device push cam data) int tl_internal_free_kb{-1}; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 7bcf89ebb1..7a52c648ef 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1,5 +1,7 @@ #include "libslic3r/libslic3r.h" #include "DeviceManager.hpp" +#include "HMS.hpp" +#include "I18N.hpp" #include "libslic3r/Time.hpp" #include "libslic3r/Thread.hpp" #include "slic3r/Utils/NetworkAgent.hpp" @@ -111,7 +113,9 @@ bool Slic3r::is_stringing_prone_filament(const std::string& filament_id, float n if (filament_id.empty()) return false; const auto* set = pick_stringing_set(nozzle_diameter); if (!set) return false; - return set->count(filament_id) > 0; + // filament_id is one of our content-addressed OF ids; the table above is keyed by the printer's own. + auto* agent = Slic3r::GUI::wxGetApp().getAgent(); + return set->count(agent ? agent->from_orca_filament_id(filament_id) : filament_id) > 0; } wxString Slic3r::get_stage_string(int stage) @@ -5074,10 +5078,13 @@ DevAmsTray MachineObject::parse_vt_tray(json vtray) vt_tray.setting_id = vtray["tray_info_idx"].get(); //std::string type = vtray["tray_type"].get(); std::string type = setting_id_to_type(vt_tray.setting_id, vtray["tray_type"].get()); - if (vt_tray.setting_id == "GFS00") { + // vt_tray.setting_id is our OF id (translated on the way in); the two support ids below are the printer's own. + auto* agent = GUI::wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(vt_tray.setting_id) : vt_tray.setting_id; + if (printer_filament_id == "GFS00") { vt_tray.m_fila_type = "PLA-S"; } - else if (vt_tray.setting_id == "GFS01") { + else if (printer_filament_id == "GFS01") { vt_tray.m_fila_type = "PA-S"; } else { @@ -5618,7 +5625,10 @@ void MachineObject::update_filament_list() for (auto it = filament_list.begin(); it != filament_list.end(); it++) { if (m_filament_list.find(it->first) != m_filament_list.end()) { - assert(it->first.size() == 8 && it->first[0] == 'P'); + // User roots may legitimately carry adopted system-shaped ids (GF*/OF*/P-hex + // system), so a non-'P' id here is expected, not an invariant violation. + if (it->first.size() != 8 || it->first[0] != 'P') + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ": user-root filament_id is not user-shaped: " << it->first; if (it->second.first != m_filament_list[it->first].first) { BOOST_LOG_TRIVIAL(info) << "old min temp is not equal to new min temp and filament id: " << it->first; @@ -5680,6 +5690,17 @@ void MachineObject::update_printer_preset_name() void MachineObject::check_ams_filament_valid() { PresetBundle * preset_bundle = Slic3r::GUI::wxGetApp().preset_bundle; + // A tray id carried by ANY system filament preset is not a dangling user-preset id + // (ten shipped P-hex system ids pass the 'P' shape gates below), so the destructive + // tray-wipe / temp-rewrite handling must never fire for it. + auto is_system_filament_id = [preset_bundle](const std::string &id) { + if (!preset_bundle) + return false; + for (auto it = preset_bundle->filaments.begin(); it != preset_bundle->filaments.end(); it++) + if (it->is_system && it->filament_id == id) + return true; + return false; + }; auto printer_model = DevPrinterConfigUtil::get_printer_display_name(this->printer_type); std::map> need_checked_filament_id; for (auto &ams_pair : m_fila_system->GetAmsList()) { @@ -5701,6 +5722,8 @@ void MachineObject::check_ams_filament_valid() auto &checked_filament = data.checked_filament; for (const auto &[slot_id, curr_tray] : ams->GetTrays()) { + if (curr_tray->setting_id.size() == 8 && curr_tray->setting_id[0] == 'P' && is_system_filament_id(curr_tray->setting_id)) + continue; if (curr_tray->setting_id.size() == 8 && curr_tray->setting_id[0] == 'P' && filament_list.find(curr_tray->setting_id) == filament_list.end()) { if (checked_filament.find(curr_tray->setting_id) != checked_filament.end()) { need_checked_filament_id[nozzle_diameter_str].insert(curr_tray->setting_id); @@ -5761,6 +5784,8 @@ void MachineObject::check_ams_filament_valid() auto &data = m_nozzle_filament_data[nozzle_diameter_str]; auto &checked_filament = data.checked_filament; auto &filament_list = data.filament_list; + if (vt_tray.setting_id.size() == 8 && vt_tray.setting_id[0] == 'P' && is_system_filament_id(vt_tray.setting_id)) + continue; if (vt_tray.setting_id.size() == 8 && vt_tray.setting_id[0] == 'P' && filament_list.find(vt_tray.setting_id) == filament_list.end()) { if (checked_filament.find(vt_tray.setting_id) != checked_filament.end()) { need_checked_filament_id[nozzle_diameter_str].insert(vt_tray.setting_id); diff --git a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp index 103584602f..8505a559d6 100644 --- a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp +++ b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.cpp @@ -2,7 +2,7 @@ /* File: uiAMSBestPositionPopup.hpp * Description: The popup with suggest best ams position * -//**********************************************************/ +************************************************************/ #include "uiAMSBestPositionPopup.hpp" @@ -705,7 +705,7 @@ ReselectMachineDialog::ReselectMachineDialog(wxWindow* parent) Centre(); } -void ReselectMachineDialog::Update(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time) +void ReselectMachineDialog::UpdateInfo(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time) { if (suggestText) diff --git a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp index 427a5c6a73..265666bb12 100644 --- a/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp +++ b/src/slic3r/GUI/DeviceTab/uiAMSBestPositionPopup.hpp @@ -2,7 +2,7 @@ /* File: uiAMSBestPositionPopup.hpp * Description: The popup with suggest best ams position * -//**********************************************************/ +************************************************************/ #pragma once #include "slic3r/GUI/Widgets/AMSItem.hpp" @@ -188,7 +188,7 @@ class ReselectMachineDialog : public wxDialog public: ReselectMachineDialog(wxWindow* parent); ~ReselectMachineDialog(); - void Update(MachineObject* obj, + void UpdateInfo(MachineObject* obj, const std::map& best_pos_map, const std::vector& ams_mapping, wxString save_time); @@ -199,7 +199,6 @@ private: void OnRefreshButton(wxCommandEvent& event); private: - int saveTimes{0}; wxBoxSizer* mainSizer{nullptr}; wxPanel* textPanel{nullptr}; wxBoxSizer* textSizer{nullptr}; diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp index 259506612d..e33987af33 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.cpp @@ -98,7 +98,7 @@ void uiAmsPercentHumidityDryPopup::Create() Refresh(); } -void uiAmsPercentHumidityDryPopup::Update(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature) +void uiAmsPercentHumidityDryPopup::UpdateInfo(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature) { if (m_humidity_level != humidiy_level || m_humidity_percent != humidity_percent || m_left_dry_time != left_dry_time || m_current_temperature != current_temperature) diff --git a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h index a109381c86..867e6ac118 100644 --- a/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h +++ b/src/slic3r/GUI/DeviceTab/uiAmsHumidityPopup.h @@ -38,14 +38,14 @@ public: ~uiAmsPercentHumidityDryPopup() = default; public: - void Update(uiAmsHumidityInfo *info) { m_ams_id = info->ams_id; Update(info->humidity_display_idx, info->humidity_percent, info->left_dry_time, info->current_temperature); }; + void UpdateInfo(uiAmsHumidityInfo *info) { m_ams_id = info->ams_id; UpdateInfo(info->humidity_display_idx, info->humidity_percent, info->left_dry_time, info->current_temperature); }; std::string get_owner_ams_id() const { return m_ams_id; } void msw_rescale(); private: - void Update(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature); + void UpdateInfo(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature); void UpdateContents(); void Create(); diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp index a62277a858..44394866c8 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.cpp @@ -6,7 +6,7 @@ * \n class wgtDeviceNozzleRackNozzleItem; * \n class wgtDeviceNozzleRackToolHead; * \n class wgtDeviceNozzleRackPos; -//**********************************************************/ +************************************************************/ #include "wgtDeviceNozzleRack.h" #include "wgtDeviceNozzleRackUpdate.h" @@ -399,7 +399,7 @@ void wgtDeviceNozzleRackArea::UpdateNozzleItems(const std::unordered_mapUpdate(nozzle_rack); + iter.second->UpdateInfo(nozzle_rack); } /*update nozzle possition and background*/ @@ -837,7 +837,7 @@ void wgtDeviceNozzleRackNozzleItem::SetSelected(bool selected) } } -void wgtDeviceNozzleRackNozzleItem::Update(const std::shared_ptr rack, bool on_rack /*= true*/) +void wgtDeviceNozzleRackNozzleItem::UpdateInfo(const std::shared_ptr rack, bool on_rack /*= true*/) { m_rack = rack; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h index fe12b8bc50..16cd311120 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRack.h @@ -6,7 +6,7 @@ * \n class wgtDeviceNozzleRackNozzleItem; * \n class wgtDeviceNozzleRackToolHead; * \n class wgtDeviceNozzleRackPos; -//**********************************************************/ +************************************************************/ #pragma once #include "slic3r/GUI/DeviceCore/DevNozzleRack.h" @@ -200,7 +200,7 @@ public: wgtDeviceNozzleRackNozzleItem(wxWindow* parent, int nozzle_id); public: - void Update(const std::shared_ptr rack, bool on_rack = true); // on_rack is false means extruder nozzle + void UpdateInfo(const std::shared_ptr rack, bool on_rack = true); // on_rack is false means extruder nozzle int GetNozzleId() const { return m_nozzle_id; } void SetDisplayIdText(const wxString& text) { m_nozzle_label_id->SetLabel(text);}; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.cpp b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.cpp index 2750ad6323..fac14e31d9 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.cpp @@ -3,7 +3,7 @@ * Description: The panel with rack updating * * \n class wgtDeviceNozzleRackUpdate -//**********************************************************/ +************************************************************/ #include "wgtDeviceNozzleRackUpdate.h" diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h index 0fa07fd63a..06b950cd7e 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleRackUpdate.h @@ -3,7 +3,7 @@ * Description: The panel for updating hotends * * \n class wgtDeviceNozzleRackUpdate -//**********************************************************/ +************************************************************/ #pragma once #include "slic3r/GUI/DeviceCore/DevNozzleRack.h" @@ -122,7 +122,6 @@ private: private: int m_ext_nozzle_id = -1; int m_rack_nozzle_id = -1; - bool m_isRefreshFinish = false; bool findNozzleImage = false; NozzleStatus m_nozzle_status = NOZZLE_STATUS_DC; @@ -154,7 +153,6 @@ private: Label* m_diameter_label; Label* m_flowtype_label; Label* m_type_label; - ScalableButton* m_error_button{ nullptr }; Label* m_sn_label; Label* m_version_label; diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp index 0d61cfd144..f351e7af2b 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.cpp @@ -3,7 +3,7 @@ * Description: The panel to select nozzle * * \n class wgtDeviceNozzleSelect; -//**********************************************************/ +************************************************************/ #include "wgtDeviceNozzleSelect.h" #include "wgtDeviceNozzleRack.h" @@ -114,7 +114,7 @@ static void s_update_nozzle_info(wgtDeviceNozzleRackNozzleItem* item, std::shared_ptr rack, const DevNozzle& nozzle_info) { - item->Update(rack, nozzle_info.IsOnRack()); + item->UpdateInfo(rack, nozzle_info.IsOnRack()); if (nozzle_info.IsUnknown()) { if (item->GetToolTipText() != _L("Nozzle information needs to be read")) { item->SetToolTip(_L("Nozzle information needs to be read")); @@ -266,7 +266,7 @@ void wgtDeviceNozzleRackSelect::OnNozzleItemSelected(wxCommandEvent &evt) } auto *item = dynamic_cast(evt.GetEventObject()); - if (item; auto ptr = m_nozzle_rack.lock()) { + if (auto ptr = m_nozzle_rack.lock(); item && ptr) { int to_select_pos_id = sGetNozzlePosId(item, m_toolhead_nozzle_l, m_toolhead_nozzle_r); if (to_select_pos_id > -1 && to_select_pos_id != GetSelectedNozzlePosID()) { SetSelectedNozzle(ptr->GetNozzleSystem()->GetNozzleByPosId(to_select_pos_id)); diff --git a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.h b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.h index 3ff866f3a1..729d24a03d 100644 --- a/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.h +++ b/src/slic3r/GUI/DeviceTab/wgtDeviceNozzleSelect.h @@ -3,7 +3,7 @@ * Description: The panel to select nozzle * * \n class wgtDeviceNozzleSelect; -//**********************************************************/ +************************************************************/ #pragma once diff --git a/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp b/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp index 64195d97a8..16ae8812be 100644 --- a/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp +++ b/src/slic3r/GUI/DeviceTab/wgtMsgPanel.cpp @@ -1,6 +1,7 @@ #include "wgtMsgPanel.h" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/Widgets/Label.hpp" #include "slic3r/GUI/Widgets/StateColor.hpp" #include "slic3r/GUI/wxExtensions.hpp" diff --git a/src/slic3r/GUI/DragCanvas.cpp b/src/slic3r/GUI/DragCanvas.cpp index 04d51c0861..66a9acecbc 100644 --- a/src/slic3r/GUI/DragCanvas.cpp +++ b/src/slic3r/GUI/DragCanvas.cpp @@ -1,6 +1,7 @@ #include "DragCanvas.hpp" #include "wxExtensions.hpp" #include "GUI_App.hpp" +#include "Widgets/StateColor.hpp" namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/DragCanvas.hpp b/src/slic3r/GUI/DragCanvas.hpp index aa8d8ddfa8..f39e836673 100644 --- a/src/slic3r/GUI/DragCanvas.hpp +++ b/src/slic3r/GUI/DragCanvas.hpp @@ -3,6 +3,7 @@ #include "wx/bitmap.h" #include "wx/dragimag.h" +#include "wx/panel.h" namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/EncodedFilament.cpp b/src/slic3r/GUI/EncodedFilament.cpp index f9054e7f6d..0cab200386 100644 --- a/src/slic3r/GUI/EncodedFilament.cpp +++ b/src/slic3r/GUI/EncodedFilament.cpp @@ -1,7 +1,10 @@ #include "EncodedFilament.hpp" +#include #include "GUI_App.hpp" +using json = nlohmann::json; + namespace Slic3r { diff --git a/src/slic3r/GUI/ExportPresetBundleDialog.cpp b/src/slic3r/GUI/ExportPresetBundleDialog.cpp index 6d642ee1c1..9d2f26bf6a 100644 --- a/src/slic3r/GUI/ExportPresetBundleDialog.cpp +++ b/src/slic3r/GUI/ExportPresetBundleDialog.cpp @@ -1,4 +1,5 @@ #include "ExportPresetBundleDialog.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "GUI_App.hpp" #include "ConfigWizard.hpp" #include "I18N.hpp" @@ -12,7 +13,11 @@ #include #include #include +#include #include + +using json = nlohmann::json; + namespace Slic3r { namespace GUI { ExportPresetBundleDialog::ExportPresetBundleDialog( diff --git a/src/slic3r/GUI/ExtraRenderers.cpp b/src/slic3r/GUI/ExtraRenderers.cpp index 18811ef241..3abfdb82ff 100644 --- a/src/slic3r/GUI/ExtraRenderers.cpp +++ b/src/slic3r/GUI/ExtraRenderers.cpp @@ -1,6 +1,7 @@ #include "ExtraRenderers.hpp" #include "wxExtensions.hpp" #include "GUI.hpp" +#include "I18N.hpp" #include "BitmapComboBox.hpp" #include "Plater.hpp" #include "Widgets/ComboBox.hpp" diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index cd7f5990a7..1f07823d61 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -1,7 +1,9 @@ #include "ExtrusionCalibration.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "MsgDialog.hpp" #include "libslic3r/Preset.hpp" +#include #include "I18N.hpp" #include #include @@ -599,8 +601,10 @@ void ExtrusionCalibration::update_combobox_filaments() PresetBundle* preset_bundle = wxGetApp().preset_bundle; if (preset_bundle && obj) { BOOST_LOG_TRIVIAL(trace) << "system_preset_bundle filament number=" << preset_bundle->filaments.size(); - std::string printer_type = obj->printer_type; - std::set printer_preset_list; + double nozzle_value = 0.4; + m_comboBox_nozzle_dia->GetValue().ToDouble(&nozzle_value); + + std::vector printer_profiles; for (auto printer_it = preset_bundle->printers.begin(); printer_it != preset_bundle->printers.end(); printer_it++) { // only use system printer preset if (!printer_it->is_system) continue; @@ -610,49 +614,42 @@ void ExtrusionCalibration::update_combobox_filaments() ConfigOptionFloats* printer_nozzle_vals = nullptr; if (printer_nozzle_opt) printer_nozzle_vals = dynamic_cast(printer_nozzle_opt); - double nozzle_value = 0.4; - wxString nozzle_value_str = m_comboBox_nozzle_dia->GetValue(); - try { - nozzle_value_str.ToDouble(&nozzle_value); - } catch(...) { - ; - } if (!model_id.empty() && model_id.compare(obj->printer_type) == 0 && printer_nozzle_vals && abs(printer_nozzle_vals->get_at(0) - nozzle_value) < 1e-3) { - printer_preset_list.insert(printer_it->name); + printer_profiles.push_back(preset_bundle->printers.get_preset_with_vendor_profile(*printer_it)); BOOST_LOG_TRIVIAL(trace) << "extrusion_cali: printer_model = " << model_id; } else { BOOST_LOG_TRIVIAL(error) << "extrusion_cali: printer_model = " << model_id; } } + // Unlike the AMS dialogs this one offers every matching preset by full name rather than one + // root preset per alias, so it filters the collection itself instead of calling + // PresetBundle::get_filament_presets_for_machine(). for (auto filament_it = preset_bundle->filaments.begin(); filament_it != preset_bundle->filaments.end(); filament_it++) { - ConfigOption* printer_opt = filament_it->config.option("compatible_printers"); - ConfigOptionStrings* printer_strs = dynamic_cast(printer_opt); - for (auto printer_str : printer_strs->values) { - if (printer_preset_list.find(printer_str) != printer_preset_list.end()) { - user_filaments.push_back(&(*filament_it)); + const PresetWithVendorProfile filament = preset_bundle->filaments.get_preset_with_vendor_profile(*filament_it); + if (std::none_of(printer_profiles.begin(), printer_profiles.end(), + [&filament](const PresetWithVendorProfile &printer) { return is_compatible_with_printer(filament, printer); })) + continue; - // set default filament id - filament_index++; - if (filament_it->is_system - && !ams_filament_id.empty() - && filament_it->filament_id == ams_filament_id - ) { - curr_selection = filament_index; - } + user_filaments.push_back(&(*filament_it)); - if (filament_it->name == obj->extrusion_cali_filament_name && !obj->extrusion_cali_filament_name.empty()) - { - curr_selection = filament_index; - } - - wxString filament_name = wxString::FromUTF8(filament_it->name); - filament_items.Add(filament_name); - break; - } + // set default filament id + filament_index++; + if (filament_it->is_system + && !ams_filament_id.empty() + && filament_it->filament_id == ams_filament_id + ) { + curr_selection = filament_index; } + + if (filament_it->name == obj->extrusion_cali_filament_name && !obj->extrusion_cali_filament_name.empty()) + { + curr_selection = filament_index; + } + + filament_items.Add(wxString::FromUTF8(filament_it->name)); } m_comboBox_filament->Set(filament_items); m_comboBox_filament->SetSelection(curr_selection); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index dbbf5ec5e2..74ef3f87c8 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -11,6 +11,7 @@ #include "libslic3r/PrintConfig.hpp" #include +#include #include #include #include @@ -540,51 +541,95 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true case coStrings: case coFloatOrPercent: case coFloatsOrPercents: { - if ((m_opt.type == coFloatOrPercent || m_opt.type == coFloatsOrPercents) && !str.IsEmpty() && str.Last() != '%') - { + if ((m_opt.type == coFloatOrPercent || m_opt.type == coFloatsOrPercents) && !str.IsEmpty() && + !(m_opt.nullable && str == m_na_value)) { + bool update_control = false; + wxString numeric_str = str; double val = 0.; + const char dec_sep = is_decimal_separator_point() ? '.' : ','; const char dec_sep_alt = dec_sep == '.' ? ',' : '.'; - // Replace the first incorrect separator in decimal number. - if (str.Replace(dec_sep_alt, dec_sep, false) != 0) - set_value(str, false); + // Orca: normalize the decimal separator and optional unit before + // detecting the percentage suffix and parsing the numeric part. + update_control |= numeric_str.Replace(dec_sep_alt, dec_sep, false) != 0; + update_control |= numeric_str.Replace(" ", "", true) != 0; + const bool has_literal_unit = numeric_str.EndsWith("mm"); + if (has_literal_unit) { + numeric_str.RemoveLast(2); + update_control = true; + } + bool is_percent = !numeric_str.IsEmpty() && numeric_str.Last() == '%'; + if (is_percent) + numeric_str.RemoveLast(); - - // remove space and "mm" substring, if any exists - str.Replace(" ", "", true); - str.Replace("m", "", true); - - if (!str.ToDouble(&val)) - { + if ((has_literal_unit && is_percent) || !numeric_str.ToDouble(&val) || !std::isfinite(val)) { if (!check_value) { m_value.clear(); break; } show_error(m_parent, _L("Invalid numeric.")); - set_value(double_to_string(val), true); - } - else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) || - (m_opt.sidetext.rfind("mm ") != std::string::npos && val > /*1*/m_opt.max_literal)) && - (m_value.empty() || into_u8(str) != boost::any_cast(m_value))) - { - if (!check_value) { - m_value.clear(); - break; + numeric_str = double_to_string(std::clamp(0., double(m_opt.min), double(m_opt.max))); + is_percent = false; + update_control = true; + } else { + const bool looks_like_missing_percent = !is_percent && !has_literal_unit && + ((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) || + (m_opt.sidetext.rfind("mm ") != std::string::npos && val > m_opt.max_literal)); + // Orca: validate explicit percentages and literal values before + // asking whether an otherwise valid literal was meant as a percentage. + const bool out_of_range = !m_opt.is_value_valid(val); + if (out_of_range) { + if (!check_value) { + m_value.clear(); + break; + } + show_error(m_parent, _L("Value is out of range.")); + val = std::clamp(val, double(m_opt.min), double(m_opt.max)); + // Orca: retain the inferred percent unit when clamping a + // suspicious unitless value, so 2000 becomes 100%, not 100 mm. + is_percent |= looks_like_missing_percent; + numeric_str = double_to_string(val); + update_control = true; + } else { + const bool value_changed = m_value.empty() || into_u8(str) != boost::any_cast(m_value); + if (looks_like_missing_percent && value_changed) { + if (!check_value) { + m_value.clear(); + break; + } + + const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm"; + const wxString stVal = numeric_str; + const wxString msg_text = from_u8((boost::format(_utf8(L("Is it %s%% or %s %s?"))) % + stVal % stVal % sidetext).str()); + WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO); + dialog.SetButtonLabel(wxID_YES, stVal + _L("%")); + dialog.SetButtonLabel(wxID_NO, stVal + " " + _L(sidetext)); + dialog.GetSizer()->SetSizeHints(&dialog); + dialog.Fit(); + dialog.CenterOnParent(); + is_percent = dialog.ShowModal() == wxID_YES; + update_control = true; + } } - const std::string sidetext = m_opt.sidetext.rfind("mm/s") != std::string::npos ? "mm/s" : "mm"; - const wxString stVal = double_to_string(val, 2); - const wxString msg_text = from_u8((boost::format(_utf8(L("Is it %s%% or %s %s?\n" - "YES for %s%%, \n" - "NO for %s %s."))) % - stVal % stVal % sidetext % stVal % stVal % sidetext) - .str()); - WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO); - if ((val > 100) && dialog.ShowModal() == wxID_YES) { - set_value(from_u8((boost::format("%s%%") % stVal).str()), false /*true*/); - str += "%%"; - } else - set_value(stVal, false); // it's no needed but can be helpful, when inputted value contained "," instead of "." + // Orca: also enforce the literal limit after clamping an explicit mm input. + if (!is_percent && m_opt.sidetext.rfind("mm ") != std::string::npos && val > m_opt.max_literal) { + if (!check_value) { + m_value.clear(); + break; + } + if (!out_of_range) + show_error(m_parent, _L("Value is out of range.")); + val = m_opt.max_literal; + numeric_str = double_to_string(val); + update_control = true; + } + } + + if (update_control) { + str = numeric_str + (is_percent ? "%" : ""); + set_value(str, true); } } if (m_opt.opt_key == "thumbnails") { @@ -941,7 +986,11 @@ void TextCtrl::BUILD() { temp->SetToolTip(get_tooltip_text(text_value)); if (!m_opt.multiline) { - text_ctrl->Bind(wxEVT_TEXT_ENTER, ([this, temp](wxEvent &e) + text_ctrl->Bind(wxEVT_TEXT_ENTER, ([ +#if !defined(__WXGTK__) + temp, +#endif // __WXGTK__ + this](wxEvent &e) { #if !defined(__WXGTK__) e.Skip(); @@ -973,7 +1022,11 @@ void TextCtrl::BUILD() { temp->GetToolTip()->Enable(flag); }), text_ctrl->GetId()); - temp->Bind(wxEVT_KILL_FOCUS, ([this, temp](wxEvent &e) + temp->Bind(wxEVT_KILL_FOCUS, ([ +#if !defined(__WXGTK__) + temp, +#endif // __WXGTK__ + this](wxEvent &e) { e.Skip(); #if !defined(__WXGTK__) @@ -1324,7 +1377,7 @@ void SpinCtrl::BUILD() { bEnterPressed = true; }), temp->GetId()); - temp->GetTextCtrl()->Bind(wxEVT_TEXT, ([this, temp](wxCommandEvent e) + temp->GetTextCtrl()->Bind(wxEVT_TEXT, ([this](wxCommandEvent e) { // # On OSX / Cocoa, SpinInput::GetValue() doesn't return the new value // # when it was changed from the text control, so the on_change callback @@ -2146,6 +2199,7 @@ void PrinterAgentChoice::msw_rescale() void PluginField::BUILD() { auto* panel = new wxPanel(m_parent, wxID_ANY); + panel->SetBackgroundColour(*wxWHITE); wxGetApp().UpdateDarkUI(panel); window = panel; @@ -2188,9 +2242,8 @@ void PluginField::rebuild_ui() m_rows.clear(); m_standalone_add_btn = nullptr; - if (m_values.empty()) { - add_empty_state_row(); - } else { + add_empty_state_row(); + if (!m_values.empty()) { for (size_t i = 0; i < m_values.size(); ++i) add_plugin_row(display_name_for_value(m_values[i]), i == m_values.size() - 1); } @@ -2207,94 +2260,43 @@ void PluginField::rebuild_ui() void PluginField::add_empty_state_row() { - const auto button_size = wxSize(def_width_thinner() * m_em_unit, -1); - auto row_sizer = new wxBoxSizer(wxHORIZONTAL); - - wxTextCtrl* display = new wxTextCtrl(window, wxID_ANY, _L("No plugin selected"), - wxDefaultPosition, wxSize(def_width_wider() * m_em_unit, wxDefaultCoord), - wxTE_READONLY); - display->SetEditable(false); - wxGetApp().UpdateDarkUI(display); - display->SetToolTip(_L("No plugin selected")); - - auto add_btn = new ScalableButton(window, wxID_ANY, "param_add", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(add_btn); - add_btn->SetToolTip(_L("Add plugin")); + auto add_btn = new Button(window, _L("Add plugin"), "param_add", 0, 16); + add_btn->SetStyle(ButtonStyle::Regular, ButtonType::Parameter); add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_add_clicked(); }); - row_sizer->Add(display, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - row_sizer->Add(add_btn, 0, wxALIGN_CENTER_VERTICAL); - m_main_sizer->Add(row_sizer, 0, wxEXPAND); - - PluginRow row; - row.display = display; - row.add_btn = add_btn; - row.sizer = row_sizer; - m_rows.push_back(row); + m_main_sizer->Add(add_btn, 0, wxEXPAND | wxBOTTOM, window->FromDIP(SidebarProps::ContentMarginV())); m_standalone_add_btn = add_btn; } void PluginField::add_plugin_row(const wxString& value, bool is_last) { - const auto button_size = wxSize(def_width_thinner() * m_em_unit, -1); auto row_sizer = new wxBoxSizer(wxHORIZONTAL); - ScalableButton* select_btn = new ScalableButton(window, wxID_ANY, "search", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(select_btn); - select_btn->SetToolTip(_L("Select plugin")); - - wxTextCtrl* display = new wxTextCtrl(window, wxID_ANY, value, - wxDefaultPosition, wxSize(def_width_wider() * m_em_unit, wxDefaultCoord), - wxTE_READONLY); - display->SetEditable(false); - wxGetApp().UpdateDarkUI(display); + ComboBox* display = new ComboBox(window, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY | CB_NO_DROP_ICON); + display->SetIcon("edit"); display->SetToolTip(get_tooltip_text(value)); - ScalableButton* remove_btn = nullptr; - if (!m_opt.readonly) { - remove_btn = new ScalableButton(window, wxID_ANY, "cross", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(remove_btn); - remove_btn->SetToolTip(_L("Remove plugin")); - } + ScalableButton* remove_btn = new ScalableButton(window, wxID_ANY, "cross", wxEmptyString, + wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); + remove_btn->SetToolTip(_L("Remove plugin")); - ScalableButton* add_btn = nullptr; - if (is_last && !m_opt.readonly) { - add_btn = new ScalableButton(window, wxID_ANY, "param_add", wxEmptyString, - button_size, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true, 16); - wxGetApp().UpdateDarkUI(add_btn); - add_btn->SetToolTip(_L("Add plugin")); - add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { on_add_clicked(); }); - } + if (m_opt.readonly) + remove_btn->Disable(); const size_t row_index = m_rows.size(); - select_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_select_clicked(row_index); }); - if (remove_btn) - remove_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_remove_clicked(row_index); }); + display->Bind(wxEVT_LEFT_DOWN, [this, row_index](wxMouseEvent& ) { on_select_clicked(row_index); }); + remove_btn->Bind(wxEVT_BUTTON, [this, row_index](wxCommandEvent&) { on_remove_clicked(row_index); }); - row_sizer->Add(select_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - row_sizer->Add(display, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - if (remove_btn) - row_sizer->Add(remove_btn, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4); - if (add_btn) - row_sizer->Add(add_btn, 0, wxALIGN_CENTER_VERTICAL); - else if (!m_opt.readonly) { - // Reserve space equal to the add button so all rows align. - row_sizer->Add(button_size.GetWidth(), button_size.GetHeight(), 0, wxALIGN_CENTER_VERTICAL); - } + row_sizer->Add(display , 1, wxALIGN_CENTER_VERTICAL); + row_sizer->Add(remove_btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, window->FromDIP(SidebarProps::ElementSpacing())); - const int bottom_gap = is_last ? 0 : 4; - m_main_sizer->Add(row_sizer, 0, wxEXPAND | (bottom_gap > 0 ? wxBOTTOM : 0), bottom_gap); + m_main_sizer->Add(row_sizer, 0, wxEXPAND | wxBOTTOM, window->FromDIP(is_last ? SidebarProps::ContentMarginV() : 4)); PluginRow row; - row.select_btn = select_btn; row.display = display; row.remove_btn = remove_btn; - row.add_btn = add_btn; row.sizer = row_sizer; m_rows.push_back(row); } @@ -2346,9 +2348,9 @@ void PluginField::on_add_clicked() m_values.push_back(selected); m_value = m_values; - rebuild_ui(); - - on_change_field(); + // Defer: don't destroy the clicked button from inside its own handler. + if(window) + window->CallAfter([this]() {rebuild_ui(); on_change_field();}); } void PluginField::on_remove_clicked(size_t index) @@ -2359,8 +2361,9 @@ void PluginField::on_remove_clicked(size_t index) m_values.erase(m_values.begin() + index); m_value = m_values; - rebuild_ui(); - on_change_field(); + // Defer: don't destroy the clicked button from inside its own handler. + if(window) + window->CallAfter([this]() {rebuild_ui(); on_change_field();}); } wxString PluginField::get_row_value(size_t index) const @@ -2374,7 +2377,7 @@ void PluginField::set_row_value(size_t index, const wxString& value) { if (index >= m_rows.size() || !m_rows[index].display) return; - m_rows[index].display->ChangeValue(value); + m_rows[index].display->SetValue(value); m_rows[index].display->SetToolTip(get_tooltip_text(value)); } @@ -2417,14 +2420,10 @@ boost::any& PluginField::get_value() void PluginField::enable() { for (auto& row : m_rows) { - if (row.select_btn) - row.select_btn->Enable(); if (row.display) row.display->Enable(); if (row.remove_btn) row.remove_btn->Enable(); - if (row.add_btn) - row.add_btn->Enable(); } if (m_standalone_add_btn) m_standalone_add_btn->Enable(); @@ -2433,14 +2432,10 @@ void PluginField::enable() void PluginField::disable() { for (auto& row : m_rows) { - if (row.select_btn) - row.select_btn->Disable(); if (row.display) row.display->Disable(); if (row.remove_btn) row.remove_btn->Disable(); - if (row.add_btn) - row.add_btn->Disable(); } if (m_standalone_add_btn) m_standalone_add_btn->Disable(); @@ -2597,7 +2592,11 @@ void ColourPicker::BUILD() // // recast as a wxWindow to fit the calling convention window = dynamic_cast(temp); - temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([this,temp](wxCommandEvent e) { + temp->Bind(wxEVT_COLOURPICKER_CHANGED, ([ + #ifdef __WXMSW__ + temp, + #endif + this](wxCommandEvent e) { #ifdef __WXMSW__ draw_bmp_btn(temp, temp->GetColour()); #endif @@ -2699,7 +2698,8 @@ void ColourPicker::set_value(const boost::any& value, bool change_event) auto field = dynamic_cast(window); #ifdef __WXMSW__ - wxColour clr = (clr_str.IsEmpty() || !clr.IsOk()) ? wxTransparentColour : clr_str; + const wxColour parsed_clr(clr_str); + wxColour clr = (clr_str.IsEmpty() || !parsed_clr.IsOk()) ? wxTransparentColour : parsed_clr; field->SetColour(clr); draw_bmp_btn(field, clr); #else @@ -2850,11 +2850,11 @@ void PointCtrl::BUILD() //temp->Add(static_text_y, 0, wxALIGN_CENTER_VERTICAL, 0); temp->Add(y_input); - x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(x_textctrl); }), x_textctrl->GetId()); - y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_value(y_textctrl); }), y_textctrl->GetId()); + x_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_input_value(x_textctrl); }), x_textctrl->GetId()); + y_textctrl->Bind(wxEVT_TEXT_ENTER, ([this](wxCommandEvent e) { propagate_input_value(y_textctrl); }), y_textctrl->GetId()); - x_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_value(x_textctrl); }), x_textctrl->GetId()); - y_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_value(y_textctrl); }), y_textctrl->GetId()); + x_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_input_value(x_textctrl); }), x_textctrl->GetId()); + y_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_input_value(y_textctrl); }), y_textctrl->GetId()); // // recast as a wxWindow to fit the calling convention window = dynamic_cast(x_input); @@ -2903,7 +2903,7 @@ bool PointCtrl::value_was_changed(wxTextCtrl* win) return boost::any_cast(m_value) != boost::any_cast(val); } -void PointCtrl::propagate_value(wxTextCtrl* win) +void PointCtrl::propagate_input_value(wxTextCtrl* win) { if (win->GetValue().empty()) on_kill_focus(); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index 5d5d549427..3f55bf5c5a 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -25,6 +25,7 @@ #include "wxExtensions.hpp" #include "Widgets/SpinInput.hpp" #include "Widgets/TextInput.hpp" +#include "Widgets/ComboBox.hpp" #ifdef __WXMSW__ #define wxMSW true @@ -532,10 +533,8 @@ public: private: struct PluginRow { - ScalableButton* select_btn { nullptr }; - wxTextCtrl* display { nullptr }; + ComboBox* display { nullptr }; ScalableButton* remove_btn { nullptr }; - ScalableButton* add_btn { nullptr }; wxBoxSizer* sizer { nullptr }; }; @@ -553,7 +552,7 @@ private: wxBoxSizer* m_main_sizer { nullptr }; std::vector m_rows; std::vector m_values; - ScalableButton* m_standalone_add_btn { nullptr }; + Button* m_standalone_add_btn { nullptr }; std::function m_selector; }; @@ -628,8 +627,10 @@ private: void on_button_click(wxCommandEvent &WXUNUSED(ev)); void save_colors_to_config(); private: +#if !defined(__linux__) && !defined(__LINUX__) wxColourData* m_clrData{nullptr}; wxColourPickerWidget* m_picker_widget{nullptr}; +#endif }; class PointCtrl : public Field { @@ -649,7 +650,7 @@ public: void BUILD() override; bool value_was_changed(wxTextCtrl* win); // Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER - void propagate_value(wxTextCtrl* win); + void propagate_input_value(wxTextCtrl* win); void set_value(const Vec2d& value, bool change_event = false); void set_value(const boost::any& value, bool change_event = false) override; boost::any& get_value() override; diff --git a/src/slic3r/GUI/FilamentBitmapUtils.cpp b/src/slic3r/GUI/FilamentBitmapUtils.cpp index 1f51fc79b3..3af3d1ad01 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.cpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.cpp @@ -1,16 +1,66 @@ #include +#include #include +#include +#include #include #include +#include +#include +#include +#include #include "EncodedFilament.hpp" #include "FilamentBitmapUtils.hpp" #include "GUI_App.hpp" +#include "GuiColor.hpp" +#include "I18N.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/StateColor.hpp" #include "libslic3r/FilamentMixer.hpp" #include "libslic3r/PrintConfig.hpp" namespace Slic3r { namespace GUI { +// Barycentric utilities for a ternary (triangle) ratio picker. +double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c) +{ + return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y); +} + +bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) +{ + double total = tri_signed_area2(v0, v1, v2); + if (std::abs(total) < 1e-9) return false; + double s0 = tri_signed_area2(p, v1, v2) / total; + double s1 = tri_signed_area2(v0, p, v2) / total; + double s2 = 1.0 - s0 - s1; + return s0 >= -0.001 && s1 >= -0.001 && s2 >= -0.001; +} + +void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, + double& w0, double& w1, double& w2) +{ + double total = std::abs(tri_signed_area2(v0, v1, v2)); + if (total < 1e-9) { w0 = w1 = w2 = 1.0 / 3.0; return; } + w0 = std::abs(tri_signed_area2(p, v1, v2)) / total; + w1 = std::abs(tri_signed_area2(v0, p, v2)) / total; + w2 = 1.0 - w0 - w1; + w0 = std::clamp(w0, 0.0, 1.0); + w1 = std::clamp(w1, 0.0, 1.0); + w2 = std::clamp(w2, 0.0, 1.0); + double s = w0 + w1 + w2; + if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } +} + +TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) +{ + double w0, w1, w2; + tri_barycentric(p, v0, v1, v2, w0, w1, w2); + return {w0 * v0.x + w1 * v1.x + w2 * v2.x, + w0 * v0.y + w1 * v1.y + w2 * v2.y}; +} + void fill_gradient_rect_east(wxDC& dc, const wxRect& rect, const wxColour& from, const wxColour& to) { if (rect.width <= 0 || rect.height <= 0) return; @@ -73,7 +123,7 @@ std::vector sample_gradient_ramp(const wxColour& first, // Resolve the curve a gradient slot is sampled with, mirroring the slicer's fallback in // ToolOrdering: a custom curve wins, otherwise a straight line between gradient_range's // endpoints, otherwise the 0.10 -> 0.90 default. -static Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot) +Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot) { const auto* curve_opt = cfg.option("filament_mixed_gradient_curve"); if (curve_opt && slot < curve_opt->values.size() && !curve_opt->values[slot].empty()) { @@ -449,4 +499,378 @@ void recompute_mixed_slot_colors(std::vector& colors, } } +namespace { + +// Layout ratios of the gradient plot rect, copied from GradientCurveEditor so the read-only +// preview and the interactive editor stay pixel-identical. Plot rect is square 1:1; the +// right/bottom margins host the axis arrows and labels. +constexpr double kPlotLeftRatio = 0.0316; +constexpr double kPlotRightRatio = 0.6766; +constexpr double kPlotTopRatio = 0.1529; +constexpr double kPlotBottomRatio = 0.8474; +constexpr int kGridDivisions = 9; // 10 grid lines including the outer borders. +constexpr int kStrokeAxis = 2; // axis line width (px, no DPI scaling) +constexpr int kAxisArrowHalf = 5; // half-base of the axis arrow triangle (DIP) +constexpr int kAxisArrowLen = 10; // length of the axis arrow triangle (DIP) +constexpr int kPointRadius = 4; // anchor outer radius (DIP) +constexpr float kBgSimilarThreshold = 15.0f; +constexpr int kOutlineExtraDip = 2; +constexpr double kTriangleMarginDip = 20.0; + +// Quadratic blend that never goes out of gamut, matching MixedFilamentDialog::blend_colors. +wxColour lerp_blend(const wxColour& a, const wxColour& b, double ratio_a) +{ + unsigned char r, g, bl; + Slic3r::filament_mixer_lerp(a.Red(), a.Green(), a.Blue(), + b.Red(), b.Green(), b.Blue(), + static_cast(1.0 - ratio_a), &r, &g, &bl); + return wxColour(r, g, bl); +} + +// DIP conversion for these free functions: unlike the wxWindow member FromDIP, it needs the +// window parameter explicitly; nullptr picks the app's default DPI like the Publish dialog does. +int dip_px(int v) { return wxWindow::FromDIP(v, nullptr); } + +} // namespace + +wxRect mixed_gradient_plot_rect(const wxSize& sz) +{ + const int x = static_cast(std::lround(sz.x * kPlotLeftRatio)); + const int y = static_cast(std::lround(sz.y * kPlotTopRatio)); + const int x2 = static_cast(std::lround(sz.x * kPlotRightRatio)); + const int y2 = static_cast(std::lround(sz.y * kPlotBottomRatio)); + const int side = std::max(1, std::min(x2 - x, y2 - y)); + return wxRect(x, y, side, side); +} + +void draw_mixed_gradient_plot(wxDC& raw_dc, const wxSize& canvas, + const std::vector& curves, + const std::vector& anchors, + const MixedGradientTheme& theme) +{ + // Draw into an internal opaque buffer so wxGCDC text/curves anti-alias against a solid + // background (never a transparent one), then blit the finished image onto the caller's + // buffered paint DC. wxGCDC cannot wrap a generic wxDC&, so the buffer is always a + // wxMemoryDC -- the one type wxGCDC accepts on every platform. + if (canvas.x <= 0 || canvas.y <= 0) + return; + const wxRect rc = mixed_gradient_plot_rect(canvas); + if (rc.width <= 0 || rc.height <= 0) + return; + + wxBitmap buf(canvas); + wxMemoryDC memdc(buf); + memdc.SetBackground(wxBrush(theme.background)); + memdc.Clear(); + wxGCDC dc(memdc); + wxGraphicsContext* gc = dc.GetGraphicsContext(); + + // 10x10 light grid (10 lines including outer borders, 9 equal divisions). + dc.SetPen(wxPen(theme.grid, 1)); + for (int i = 0; i <= kGridDivisions; ++i) { + const int x = rc.x + rc.width * i / kGridDivisions; + const int y = rc.y + rc.height * i / kGridDivisions; + dc.DrawLine(x, rc.y, x, rc.y + rc.height); + dc.DrawLine(rc.x, y, rc.x + rc.width, y); + } + + // Set the label font first so text width measurements drive arrow / label placement. + wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); + dc.SetFont(label_font); + + const wxString axis_y_title = _L("Material Ratio"); + const wxString axis_x_title = _L("Model Height"); + const wxString pct_text = wxT("100%"); + const wxSize x_title_sz = dc.GetTextExtent(axis_x_title); + const wxSize y_title_sz = dc.GetTextExtent(axis_y_title); + + wxFont strong_font = label_font; + strong_font.SetWeight(wxFONTWEIGHT_SEMIBOLD); + dc.SetFont(strong_font); + const wxSize pct_text_sz = dc.GetTextExtent(pct_text); + dc.SetFont(label_font); + + // Axes (grey 700) with filled triangle arrows. Y-axis extends above the plot top to the + // canvas top edge; X-axis extends past the plot right toward the canvas right edge. + const int arrow_half = dip_px(kAxisArrowHalf); + const int arrow_len = dip_px(kAxisArrowLen); + dc.SetPen(wxPen(theme.axis, kStrokeAxis)); + dc.SetBrush(wxBrush(theme.axis)); + + const int y_axis_x = rc.x; + const int y_title_pct_gap = dip_px(1); + const int y_title_bottom_pad = dip_px(2); + const int y_title_y = std::max(0, rc.y - y_title_sz.y - y_title_pct_gap - pct_text_sz.y - y_title_bottom_pad); + const int y_arrow_tip_y = y_title_y; + const int y_arrow_ty = y_arrow_tip_y + arrow_len; + dc.DrawLine(y_axis_x, y_arrow_ty, y_axis_x, rc.y + rc.height); + { + wxPoint tri[3] = { + wxPoint(y_axis_x, y_arrow_tip_y), + wxPoint(y_axis_x - arrow_half, y_arrow_ty), + wxPoint(y_axis_x + arrow_half, y_arrow_ty), + }; + dc.DrawPolygon(3, tri); + } + + const int x_axis_y = rc.y + rc.height; + const int x_label_gap = dip_px(4); + const int x_edge_pad = dip_px(6); + const int x_arrow_ideal = rc.x + rc.width + dip_px(10); + const int x_arrow_max = canvas.x - x_title_sz.x - x_label_gap - x_edge_pad - arrow_len; + const int x_arrow_tx = std::max(rc.x + rc.width + arrow_len, std::min(x_arrow_ideal, x_arrow_max)); + const int x_arrow_tip_x = x_arrow_tx + arrow_len; + const int x_title_x = x_arrow_tip_x + x_label_gap; + dc.DrawLine(rc.x, x_axis_y, x_arrow_tx, x_axis_y); + { + wxPoint tri[3] = { + wxPoint(x_arrow_tip_x, x_axis_y), + wxPoint(x_arrow_tx, x_axis_y - arrow_half), + wxPoint(x_arrow_tx, x_axis_y + arrow_half), + }; + dc.DrawPolygon(3, tri); + } + + // Labels: "Material Ratio" and the leading "100%" share the same left x; the trailing + // "Model Height" follows the X-axis arrow tip (already clamped to make room). + const int label_left_x = y_axis_x + dip_px(10); + dc.SetTextForeground(theme.label); + dc.DrawText(axis_y_title, label_left_x, y_title_y); + + dc.SetFont(strong_font); + dc.SetTextForeground(theme.label_strong); + dc.DrawText(pct_text, label_left_x, y_title_y + y_title_sz.y + y_title_pct_gap); + + dc.DrawText(pct_text, rc.x + rc.width - pct_text_sz.x, x_axis_y); + dc.SetFont(label_font); + dc.SetTextForeground(theme.label); + dc.DrawText(axis_x_title, x_title_x, x_axis_y - x_title_sz.y / 2); + + if (!gc) + return; + + // Outline only when the curve colour is perceptually close to the background; otherwise the + // plain filament colour reads fine and the extra stroke would look heavy. + auto needs_outline = [&](const wxColour& c) { + return calc_color_distance(c, theme.background) < kBgSimilarThreshold; + }; + + // Only the geometry goes through the graphics context: dc.DrawLines() takes integer wxPoint + // and would quantize the curve back to whole pixels. The pen is still set on the dc, which + // forwards it here while keeping its own cached state in sync for later dc drawing. + auto draw_polyline = [&](const MixedGradientCurve& curve) { + if (curve.points.size() < 2) + return; + dc.SetPen(wxPen(curve.colour, dip_px(curve.stroke_dip))); + gc->StrokeLines(curve.points.size(), curve.points.data()); + }; + + for (const MixedGradientCurve& curve : curves) { + if (needs_outline(curve.colour)) + draw_polyline({curve.points, theme.outline, curve.stroke_dip + kOutlineExtraDip}); + draw_polyline(curve); + } + + // Control points: hollow circle with axis-colour border, theme-aware fill, drawn with a + // sub-pixel centre so the ring stays centred on the curve. + if (!anchors.empty()) { + const double r = dip_px(kPointRadius); + dc.SetPen(wxPen(theme.axis, 1)); + dc.SetBrush(wxBrush(theme.point_fill)); + for (const wxPoint2DDouble& p : anchors) + gc->DrawEllipse(p.m_x - r, p.m_y - r, r * 2, r * 2); + } + + memdc.SelectObject(wxNullBitmap); + raw_dc.DrawBitmap(buf, 0, 0); +} + +void draw_mixed_ratio_blend_bar(wxDC& dc, const wxRect& rect, const wxColour& first, + const wxColour& second, double second_fraction) +{ + if (rect.width <= 0 || rect.height <= 0) + return; + for (int x = 0; x < rect.width; ++x) { + const double t = rect.width > 1 ? double(x) / rect.width : 0.0; + const wxColour c = lerp_blend(first, second, 1.0 - t); + dc.SetPen(wxPen(c)); + dc.DrawLine(rect.x + x, rect.y, rect.x + x, rect.y + rect.height); + } + + // Fixed in both themes, like the triangle picker's drag handle: the divider is drawn over + // blended filament colour, so it has to keep its contrast against data rather than chrome. + const int div_x = rect.x + static_cast(second_fraction * rect.width); + dc.SetPen(wxPen(wxColour(80, 80, 80), dip_px(4))); + dc.DrawLine(div_x, rect.y, div_x, rect.y + rect.height); + dc.SetPen(wxPen(*wxWHITE, dip_px(2))); + dc.DrawLine(div_x, rect.y, div_x, rect.y + rect.height); +} + +void draw_mixed_ratio_segments(wxDC& dc, const wxRect& rect, const std::vector& colours, + const std::vector& shares) +{ + const size_t n = std::min(colours.size(), shares.size()); + if (n == 0 || rect.width <= 0 || rect.height <= 0) + return; + std::vector norm = shares; + double total = 0.0; + for (double s : norm) + total += s; + if (total <= 0.0) { + norm.assign(n, 1.0 / n); + total = 1.0; + } + auto share_to_px = [&](double share_sum) { return rect.x + int(std::lround(share_sum / total * double(rect.width))); }; + int x0 = rect.x; + std::vector segs(n); + for (size_t i = 0; i < n; ++i) { + int x1 = rect.x + rect.width; + if (i + 1 < n) + x1 = share_to_px(std::accumulate(norm.begin(), norm.begin() + i + 1, 0.0)); + segs[i] = wxRect(x0, rect.y, std::max(1, x1 - x0), rect.height); + x0 = segs[i].GetRight() + 1; + } + for (size_t i = 0; i < n; ++i) { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxBrush(colours[i])); + dc.DrawRectangle(segs[i]); + } + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#ACACAC")), 1)); + dc.DrawRectangle(rect); +} + +namespace { + +struct TriCacheKey +{ + int w, h; + int c0r, c0g, c0b, c1r, c1g, c1b, c2r, c2g, c2b; + int bg_r, bg_g, bg_b, ol_r, ol_g, ol_b; + bool operator<(const TriCacheKey& o) const + { + return std::tie(w, h, c0r, c0g, c0b, c1r, c1g, c1b, c2r, c2g, c2b, bg_r, bg_g, bg_b, ol_r, ol_g, ol_b) < + std::tie(o.w, o.h, o.c0r, o.c0g, o.c0b, o.c1r, o.c1g, o.c1b, o.c2r, o.c2g, o.c2b, o.bg_r, o.bg_g, o.bg_b, o.ol_r, o.ol_g, o.ol_b); + } +}; + +std::map& tri_cache() +{ + static std::map cache; + return cache; +} + +} // namespace + +std::array mixed_triangle_vertices(const wxSize& size, double margin_dip) +{ + const double pw = size.GetWidth(), ph = size.GetHeight(); + const double margin = dip_px(int(margin_dip)); + const double avail = std::min(pw, ph) - 2.0 * margin; + const double side = avail; + const double tri_h = side * std::sqrt(3.0) / 2.0; + const double cx = pw / 2.0; + const double top_y = (ph - tri_h) / 2.0; + return {{{cx, top_y}, {cx - side / 2.0, top_y + tri_h}, {cx + side / 2.0, top_y + tri_h}}}; +} + +void draw_mixed_triangle_picker(wxDC& dc, const wxSize& size, const std::array& colours, + const std::array& weights, const MixedTriangleTheme& theme) +{ + if (size.GetWidth() <= 0 || size.GetHeight() <= 0) + return; + const std::array v = mixed_triangle_vertices(size, kTriangleMarginDip); + + dc.SetBrush(wxBrush(theme.background)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight()); + + const wxColour& c0 = colours[0]; + const wxColour& c1 = colours[1]; + const wxColour& c2 = colours[2]; + const TriCacheKey key{size.GetWidth(), size.GetHeight(), + c0.Red(), c0.Green(), c0.Blue(), + c1.Red(), c1.Green(), c1.Blue(), + c2.Red(), c2.Green(), c2.Blue(), + theme.background.Red(), theme.background.Green(), theme.background.Blue(), + theme.outline.Red(), theme.outline.Green(), theme.outline.Blue()}; + + wxBitmap& bmp = tri_cache()[key]; + if (!bmp.IsOk()) { + bmp = wxBitmap(size.GetWidth(), size.GetHeight(), 24); + wxMemoryDC mdc(bmp); + mdc.SetBrush(wxBrush(theme.background)); + mdc.SetPen(*wxTRANSPARENT_PEN); + mdc.DrawRectangle(0, 0, size.GetWidth(), size.GetHeight()); + + const int min_y = int(std::min({v[0].y, v[1].y, v[2].y})); + const int max_y = int(std::max({v[0].y, v[1].y, v[2].y})); + const int min_x = int(std::min({v[0].x, v[1].x, v[2].x})); + const int max_x = int(std::max({v[0].x, v[1].x, v[2].x})); + for (int py = min_y; py <= max_y; ++py) { + for (int px = min_x; px <= max_x; ++px) { + const TriPoint p = {double(px), double(py)}; + if (!tri_contains(p, v[0], v[1], v[2])) + continue; + double w0, w1, w2; + tri_barycentric(p, v[0], v[1], v[2], w0, w1, w2); + unsigned char mr, mg, mb; + if (w0 + w1 > 1e-6) { + float t01 = float(w1 / (w0 + w1)); + Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), c1.Red(), c1.Green(), c1.Blue(), t01, &mr, &mg, &mb); + Slic3r::filament_mixer_lerp(mr, mg, mb, c2.Red(), c2.Green(), c2.Blue(), float(w2), &mr, &mg, &mb); + } else { + mr = c2.Red(); mg = c2.Green(); mb = c2.Blue(); + } + mdc.SetPen(wxPen(wxColour(mr, mg, mb))); + mdc.DrawPoint(px, py); + } + } + + mdc.SetPen(wxPen(theme.outline, 1)); + mdc.SetBrush(*wxTRANSPARENT_BRUSH); + const wxPoint pts[3] = {{int(v[0].x), int(v[0].y)}, {int(v[1].x), int(v[1].y)}, {int(v[2].x), int(v[2].y)}}; + mdc.DrawPolygon(3, pts); + mdc.SelectObject(wxNullBitmap); + + // Keep the cache from growing without bound across DPI/size changes. + if (tri_cache().size() > 6) { + auto& cache = tri_cache(); + cache.erase(cache.begin()); + } + } + dc.DrawBitmap(bmp, 0, 0); + + // Published-ratio marker (read-only twin of the editor's drag handle). + const double w0 = weights[0], w1 = weights[1], w2 = weights[2]; + const int hx = int(w0 * v[0].x + w1 * v[1].x + w2 * v[2].x); + const int hy = int(w0 * v[0].y + w1 * v[1].y + w2 * v[2].y); + dc.SetBrush(*wxWHITE_BRUSH); + dc.SetPen(wxPen(theme.ring, dip_px(2))); + dc.DrawCircle(hx, hy, dip_px(5)); +} + +void draw_mixed_triangle_labels(wxDC& dc, const wxSize& size, const std::array& weights, + const MixedTriangleTheme& theme) +{ + const std::array v = mixed_triangle_vertices(size, kTriangleMarginDip); + dc.SetFont(::Label::Body_12); + dc.SetTextForeground(theme.label); + + // "Ratio" title, sitting above the top vertex. + const wxString title = _L("Ratio"); + dc.DrawText(title, dip_px(2), std::max(0, int(v[0].y - dc.GetTextExtent(title).GetHeight() - dip_px(4)))); + + for (int i = 0; i < 3; ++i) { + const wxString text = wxString::Format("%d%%", int(std::lround(weights[i] * 100.0))); + const wxSize tsz = dc.GetTextExtent(text); + int lx = int(v[i].x - tsz.GetWidth() / 2.0); + int ly = (i == 0) ? int(v[i].y - tsz.GetHeight() - dip_px(4)) : int(v[i].y + dip_px(3)); + ly = std::clamp(ly, 0, size.GetHeight() - tsz.GetHeight()); + lx = std::clamp(lx, 0, size.GetWidth() - tsz.GetWidth()); + dc.DrawText(text, lx, ly); + } +} + }} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/FilamentBitmapUtils.hpp b/src/slic3r/GUI/FilamentBitmapUtils.hpp index 11696f3401..687d34a825 100644 --- a/src/slic3r/GUI/FilamentBitmapUtils.hpp +++ b/src/slic3r/GUI/FilamentBitmapUtils.hpp @@ -5,6 +5,9 @@ #include #include #include +#include +#include +#include #include // Orca: forward-declare so the header is self-contained outside libslic3r_gui's @@ -13,6 +16,16 @@ namespace Slic3r { class DynamicPrintConfig; struct GradientCurve; } namespace Slic3r { namespace GUI { +// Barycentric utilities for a ternary (triangle) ratio picker, shared by the mixed-filament +// editor and the Publish dialog's read-only definition preview. +struct TriPoint { double x, y; }; + +double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c); +bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2); +void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, + double& w0, double& w1, double& w2); +TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2); + // Fills a rect with a west->east linear gradient by drawing solid 1px columns. // Use instead of wxDC::GradientFillLinear, whose CoreGraphics (CGShading) backend // fails to render on some macOS builds; solid fills are unaffected. @@ -51,6 +64,12 @@ std::vector sample_gradient_ramp(const wxColour& first, // destination's height in pixels. std::vector mixed_gradient_ramp(const Slic3r::DynamicPrintConfig& cfg, size_t slot, int steps); +// Resolve the curve a gradient slot is sampled with: the custom curve wins when it has at +// least two points, otherwise a straight line between gradient_range's endpoints, otherwise +// the 0.10 -> 0.90 default. Mirrors the slicer's ToolOrdering fallback so every preview +// agrees with what gets sliced. Always returns a two-point curve. +Slic3r::GradientCurve mixed_gradient_curve(const Slic3r::DynamicPrintConfig& cfg, size_t slot); + // Fill rect with a ramp, ramp.front() along the bottom edge. void fill_gradient_ramp_rect(wxDC& dc, const wxRect& rect, const std::vector& ramp); @@ -63,6 +82,81 @@ wxBitmap create_gradient_ramp_bitmap(const std::vector& ramp, const wx void recompute_mixed_slot_colors(std::vector& colors, const Slic3r::DynamicPrintConfig& cfg); +// --- Gradient plot (shared by GradientCurveEditor and the Publish dialog's read-only +// preview). The plot is a square 1:1 rect laid out with the editor's ratios so both +// render identically; curves are drawn as sub-pixel anti-aliased polylines through +// wxGCDC so they never quantize to whole pixels. + +// One curve of the plot: screen-space sub-pixel points already mapped into the plot +// rect, the stroke colour and the stroke width in DIP. +struct MixedGradientCurve +{ + std::vector points; + wxColour colour; + int stroke_dip; +}; + +// Theme tokens, resolved by the caller through StateColor::darkModeColorFor. +struct MixedGradientTheme +{ + wxColour background; // for near-background outline detection + wxColour grid; // grid line + wxColour axis; // axis + arrow fill + wxColour label; // "Material Ratio" / "Model Height" + wxColour label_strong; // "100%" + wxColour outline; // near-background curve lift + wxColour point_fill; // anchor fill +}; + +// Square 1:1 plot rect inside `canvas`, using the editor's plot ratios. +wxRect mixed_gradient_plot_rect(const wxSize& canvas); + +// Draw the whole plot (grid, axes + arrowheads, axis labels, each curve with an optional +// near-background outline, and anchor circles). `anchors` are empty when the caller has +// none to show. `dc` is the caller's buffered paint DC; a wxGCDC is created inside so the +// geometry gets anti-aliased. +void draw_mixed_gradient_plot(wxDC& dc, const wxSize& canvas, + const std::vector& curves, + const std::vector& anchors, + const MixedGradientTheme& theme); + +// --- Ratio bar (2-component continuous blend + divider, matching MixedFilamentDialog). +// Colours blend first->second across the rect; the divider marks `second_fraction` of the +// rect's width (the second component's share, 0..1). +void draw_mixed_ratio_blend_bar(wxDC& dc, const wxRect& rect, const wxColour& first, + const wxColour& second, double second_fraction); + +// Fallback ratio bar for N>2 non-gradient slots: one solid segment per component, +// widths proportional to shares. Label text (the "NN%" inside wide-enough segments) is +// the caller's concern. +void draw_mixed_ratio_segments(wxDC& dc, const wxRect& rect, const std::vector& colours, + const std::vector& shares); + +// --- Triangle picker (3-component), shared by MixedFilamentDialog and the Publish preview. +struct MixedTriangleTheme +{ + wxColour background; + wxColour outline; // triangle border + wxColour ring; // drag-handle ring + wxColour label; // "Ratio" title + per-vertex labels +}; + +// The three vertices of the read-only/miniature triangle inside a `size` square panel, +// with `margin_dip` inset. Order: top, bottom-left, bottom-right. +std::array mixed_triangle_vertices(const wxSize& size, double margin_dip = 20.0); + +// Draw background, the cached barycentric fill, the outline and the drag-handle marker. +// `weights` are the three barycentric shares (sum 1). The "Ratio" title and per-vertex +// percentage labels are drawn by the caller so the interactive editor can keep its own +// live child labels while the read-only preview draws them as text. +void draw_mixed_triangle_picker(wxDC& dc, const wxSize& size, const std::array& colours, + const std::array& weights, const MixedTriangleTheme& theme); + +// Draw the "Ratio" title plus one "NN%" label per vertex (used by the read-only preview; +// the interactive editor positions its own live labels instead). +void draw_mixed_triangle_labels(wxDC& dc, const wxSize& size, const std::array& weights, + const MixedTriangleTheme& theme); + }} // namespace Slic3r::GUI #endif // slic3r_GUI_FilamentBitmapUtils_hpp_ \ No newline at end of file diff --git a/src/slic3r/GUI/FilamentMapDialog.cpp b/src/slic3r/GUI/FilamentMapDialog.cpp index 12ca3a2965..7bb6f51421 100644 --- a/src/slic3r/GUI/FilamentMapDialog.cpp +++ b/src/slic3r/GUI/FilamentMapDialog.cpp @@ -241,7 +241,7 @@ FilamentMapDialog::FilamentMapDialog(wxWindow *parent, wxBoxSizer *mode_sizer = new wxBoxSizer(wxHORIZONTAL); - m_auto_btn = new CapsuleButton(this, PageType::ptAuto, only_saving_mode ? _L("Fila Saving") : _L("Auto"), false); + m_auto_btn = new CapsuleButton(this, PageType::ptAuto, only_saving_mode ? _L("File Saving") : _L("Auto"), false); m_manual_btn = new CapsuleButton(this, PageType::ptManual, _L("Custom"), false); if (show_default) m_default_btn = new CapsuleButton(this, PageType::ptDefault, _L("Same as Global"), true); diff --git a/src/slic3r/GUI/FilamentMapPanel.cpp b/src/slic3r/GUI/FilamentMapPanel.cpp index ed63016438..0f3cc7217d 100644 --- a/src/slic3r/GUI/FilamentMapPanel.cpp +++ b/src/slic3r/GUI/FilamentMapPanel.cpp @@ -1,5 +1,6 @@ #include "FilamentMapPanel.hpp" #include "GUI_App.hpp" +#include "I18N.hpp" #include "Plater.hpp" #include "Widgets/MultiNozzleSync.hpp" // manuallySetNozzleCount producer for extruder_nozzle_stats #include @@ -642,19 +643,12 @@ void FilamentMapBtnPanel::Select(bool selected) Refresh(); } -void GUI::FilamentMapBtnPanel::Hide() +bool GUI::FilamentMapBtnPanel::Show(bool show) { - m_btn->Hide(); - m_label->Hide(); - m_detail->Hide(); - wxPanel::Hide(); -} -void GUI::FilamentMapBtnPanel::Show() -{ - m_btn->Show(); - m_label->Show(); - m_detail->Show(); - wxPanel::Show(); + m_btn->Show(show); + m_label->Show(show); + m_detail->Show(show); + return wxPanel::Show(show); } FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced) : wxPanel(parent) @@ -694,18 +688,11 @@ FilamentMapAutoPanel::FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mod Layout(); GUI::wxGetApp().UpdateDarkUIWin(this); } -void FilamentMapAutoPanel::Hide() +bool FilamentMapAutoPanel::Show(bool show) { - m_flush_panel->Hide(); - m_match_panel->Hide(); - wxPanel::Hide(); -} - -void FilamentMapAutoPanel::Show() -{ - m_flush_panel->Show(); - m_match_panel->Show(); - wxPanel::Show(); + m_flush_panel->Show(show); + m_match_panel->Show(show); + return wxPanel::Show(show); } void FilamentMapAutoPanel::UpdateStatus() @@ -743,16 +730,10 @@ FilamentMapDefaultPanel::FilamentMapDefaultPanel(wxWindow *parent) : wxPanel(par GUI::wxGetApp().UpdateDarkUIWin(this); } -void FilamentMapDefaultPanel::Hide() +bool FilamentMapDefaultPanel::Show(bool show) { - m_label->Hide(); - wxPanel::Hide(); -} - -void FilamentMapDefaultPanel::Show() -{ - m_label->Show(); - wxPanel::Show(); + m_label->Show(show); + return wxPanel::Show(show); } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/FilamentMapPanel.hpp b/src/slic3r/GUI/FilamentMapPanel.hpp index a0caf8e78b..ce7c8010a3 100644 --- a/src/slic3r/GUI/FilamentMapPanel.hpp +++ b/src/slic3r/GUI/FilamentMapPanel.hpp @@ -69,10 +69,9 @@ class FilamentMapBtnPanel : public wxPanel { public: FilamentMapBtnPanel(wxWindow *parent, const wxString &label, const wxString &detail, const std::string &icon_path); - void Hide(); - void Show(); + bool Show(bool show = true) override; void Select(bool selected); - bool Enable(bool enable); + bool Enable(bool enable) override; bool IsEnabled() const { return m_enabled; } protected: void OnPaint(wxPaintEvent &event); @@ -99,8 +98,7 @@ class FilamentMapAutoPanel : public wxPanel { public: FilamentMapAutoPanel(wxWindow *parent, FilamentMapMode mode, bool machine_synced); - void Hide(); - void Show(); + bool Show(bool show = true) override; FilamentMapMode GetMode() const { return m_mode; } private: @@ -116,8 +114,7 @@ class FilamentMapDefaultPanel : public wxPanel { public: FilamentMapDefaultPanel(wxWindow *parent); - void Hide(); - void Show(); + bool Show(bool show = true) override; private: Label *m_label; diff --git a/src/slic3r/GUI/FilamentPickerDialog.cpp b/src/slic3r/GUI/FilamentPickerDialog.cpp index 98c955fb76..5b5af59501 100644 --- a/src/slic3r/GUI/FilamentPickerDialog.cpp +++ b/src/slic3r/GUI/FilamentPickerDialog.cpp @@ -426,11 +426,11 @@ wxScrolledWindow* FilamentPickerDialog::CreateColorGrid() }); // Hover highlight - btn->Bind(wxEVT_ENTER_WINDOW, [btn](wxMouseEvent& evt) { + btn->Bind(wxEVT_ENTER_WINDOW, [](wxMouseEvent& evt) { evt.Skip(); }); - btn->Bind(wxEVT_LEAVE_WINDOW, [btn](wxMouseEvent& evt) { + btn->Bind(wxEVT_LEAVE_WINDOW, [](wxMouseEvent& evt) { evt.Skip(); }); diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 15085c3cc4..c40d6dd222 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -17,6 +17,7 @@ #include "Plater.hpp" #include "Camera.hpp" #include "I18N.hpp" +#include "format.hpp" #include "GUI_Utils.hpp" #include "GUI.hpp" #include "GLCanvas3D.hpp" @@ -785,6 +786,19 @@ void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& fil } } +// Byte offset just past the first count characters of str, or its length if it is shorter. +static size_t utf8_offset(const std::string& str, size_t count) +{ + const char* const begin = str.c_str(); + const char* const end = begin + str.size(); + const char* pos = begin; + for (size_t i = 0; i < count && pos < end; ++i) { + unsigned int codepoint = 0; + pos += ImTextCharFromUtf8(&codepoint, pos, end); + } + return pos - begin; +} + //BBS: GUI refactor: move to right void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, float right, uint64_t curr_line_id) const { @@ -796,23 +810,27 @@ void GCodeViewer::SequentialView::GCodeWindow::render(float top, float bottom, f // read line from file const size_t start = id == 1 ? 0 : m_lines_ends[id - 2]; const size_t original_len = m_lines_ends[id - 1] - start; - const size_t len = std::min(original_len, (size_t) 55); + // A character is four bytes at most, so 55 of them always fit in 220. + const size_t len = std::min(original_len, (size_t) 55 * 4); std::string gline(m_file.data() + start, len); - // If original line is longer than 55 characters, truncate and append "..." - if (original_len > 55) - gline = gline.substr(0, 52) + "..."; + // If original line is longer than 55 characters, truncate and append "...". + // The cut must land on a character boundary or it leaves half a character behind. + if (len < original_len || utf8_offset(gline, 55) < gline.size()) + gline = gline.substr(0, utf8_offset(gline, 52)) + "..."; std::string command, parameters, comment; - // extract comment - std::vector tokens; - boost::split(tokens, gline, boost::is_any_of(";"), boost::token_compress_on); - command = tokens.front(); - if (tokens.size() > 1) - comment = ";" + tokens.back(); + const size_t comment_start = gline.find(';'); + if (comment_start == std::string::npos) + command = gline; + else { + command = gline.substr(0, comment_start); + comment = gline.substr(comment_start); + } // extract gcode command and parameters if (!command.empty()) { + std::vector tokens; boost::split(tokens, command, boost::is_any_of(" "), boost::token_compress_on); command = tokens.front(); if (tokens.size() > 1) { @@ -2613,7 +2631,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector>& columns_offsets) + auto append_item = [icon_size, &imgui, &window_padding, &draw_list, this](const ColorRGBA& color, const std::vector>& columns_offsets) { // render icon ImVec2 pos = ImVec2(ImGui::GetCursorScreenPos().x + window_padding * 3, ImGui::GetCursorScreenPos().y); @@ -2648,7 +2666,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector ret = { koef * volume / (PI * sqr(0.5 * filament_diameters[extruder_id])), volume * filament_densities[extruder_id] * 0.001 }; @@ -3233,7 +3251,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv //ImVec2(pos_rect.x + ImGui::GetWindowWidth() + ImGui::GetFrameHeight(),pos_rect.y + ImGui::GetFrameHeight() + window_padding * 2.5), //ImGui::GetColorU32(ImVec4(0,0,0,0.3))); - auto append_item = [icon_size, &imgui, imperial_units, &window_padding, &draw_list, this]( + auto append_item = [icon_size, &imgui, &window_padding, &draw_list, this]( EItemType type, const ColorRGBA& color, const std::vector>& columns_offsets, @@ -3368,7 +3386,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return ret; }; - auto calculate_offsets = [&imgui, max_width, window_padding, this](const std::vector>>& title_columns, float extra_size = 0.0f) { + auto calculate_offsets = [max_width, this](const std::vector>>& title_columns, float extra_size = 0.0f) { const ImGuiStyle& style = ImGui::GetStyle(); std::vector offsets; // ORCA increase spacing for more readable format. Using direct number requires much less code change in here. GetTextLineHeight for additional spacing for icon_size @@ -3419,16 +3437,18 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return ret; }; + // Whole sentences: the bare "up to"/"above"/"from"/"to" these used to be glued from gave a + // translator no context, and left the unit and the numbers stuck in English word order. auto upto_label = [](double z) { char buf[64]; ::sprintf(buf, "%.2f", z); - return _u8L("up to") + " " + std::string(buf) + " " + _u8L("mm"); + return format(_u8L("up to %1% mm"), buf); }; auto above_label = [](double z) { char buf[64]; ::sprintf(buf, "%.2f", z); - return _u8L("above") + " " + std::string(buf) + " " + _u8L("mm"); + return format(_u8L("above %1% mm"), buf); }; auto fromto_label = [](double z1, double z2) { @@ -3436,7 +3456,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ::sprintf(buf1, "%.2f", z1); char buf2[64]; ::sprintf(buf2, "%.2f", z2); - return _u8L("from") + " " + std::string(buf1) + " " + _u8L("to") + " " + std::string(buf2) + " " + _u8L("mm"); + return format(_u8L("from %1% to %2% mm"), buf1, buf2); }; auto role_time_and_percent = [this, total_estimated_time](libvgcode::EGCodeExtrusionRole role) { @@ -3856,7 +3876,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({ distance_text, offsets[3] }); if (full_layout && !count_text.empty()) columns_offsets.push_back({ count_text, distance_text.empty() ? offsets[3] : offsets[4] }); - append_item(EItemType::Rect, color, columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, type, visible]() { + append_item(EItemType::Rect, color, columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, type]() { m_viewer.toggle_option_visibility(type); update_moves_slider(); }); @@ -3913,7 +3933,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({used_filaments_length[i], offsets[3]}); columns_offsets.push_back({used_filaments_weight[i], offsets[4]}); append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_extrusion_role_color(role)), columns_offsets, - true, offsets.back(), visible, [this, role, visible]() { + true, offsets.back(), visible, [this, role]() { m_viewer.toggle_extrusion_role_visibility(role); update_moves_slider(); }); @@ -3932,7 +3952,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv columns_offsets.push_back({ travel_percent, offsets[2] }); columns_offsets.push_back({ travel_distance, offsets[3] }); // Usage column columns_offsets.push_back({ travel_moves, offsets[4] }); // Usage column - append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, item, visible]() { + append_item(EItemType::Rect, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), columns_offsets, true, offsets.back()/*ORCA checkbox_pos*/, visible, [this, item]() { m_viewer.toggle_option_visibility(item); update_moves_slider(); }); @@ -3951,7 +3971,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); // refresh(*m_gcode_result, wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result)); update_moves_slider(); @@ -3968,7 +3988,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); // refresh(*m_gcode_result, wxGetApp().plater()->get_extruder_colors_from_plater_config(m_gcode_result)); update_moves_slider(); @@ -3985,7 +4005,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); update_moves_slider(); }); @@ -4001,7 +4021,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_headers({ {_u8L("Options"), offsets[0] }, { _u8L("Display"), offsets[1]} }); const bool travel_visible = m_viewer.is_option_visible(libvgcode::EOptionType::Travels); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0f, 3.0f)); - append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this, travel_visible]() { + append_item(EItemType::None, libvgcode::convert(m_viewer.get_option_color(libvgcode::EOptionType::Travels)), { {_u8L("Travel"), offsets[0] }}, true, predictable_icon_pos/*ORCA checkbox_pos*/, travel_visible, [this]() { m_viewer.toggle_option_visibility(libvgcode::EOptionType::Travels); update_moves_slider(); }); @@ -4121,7 +4141,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } float checkbox_pos = std::max(predictable_icon_pos, color_print_offsets[_u8L("Display")]); // ORCA prefer predictable_icon_pos when header not reacing end - append_item(EItemType::Rect, libvgcode::convert(tool_colors[extruder_idx]), columns_offsets, false, checkbox_pos/*ORCA*/, true, [this, extruder_idx]() {}); + append_item(EItemType::Rect, libvgcode::convert(tool_colors[extruder_idx]), columns_offsets, false, checkbox_pos/*ORCA*/, true, []() {}); } i++; } diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index a19f7bb9ae..5ba748775c 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -72,7 +72,6 @@ public: float m_model_z_offset{ 0.5f }; bool m_visible{ true }; bool m_is_dark = false; - bool m_fixed_screen_size{ false }; float m_scale_factor{ 1.0f }; #if ENABLE_ACTUAL_SPEED_DEBUG ActualSpeedImguiWidget m_actual_speed_imgui_widget; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 858d58eeab..f4a7e897c8 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1,5 +1,8 @@ #include "libslic3r/libslic3r.h" #include "GLCanvas3D.hpp" +#ifdef SLIC3R_CAD +#include "slic3r/GUI/CAD/DesignSketchTool.hpp" // Design tab: interactive 2D sketch tool +#endif #include @@ -1079,56 +1082,36 @@ const double GLCanvas3D::DefaultCameraZoomToPlateMarginFactor = 1.25; void GLCanvas3D::load_arrange_settings() { - std::string dist_fff_str = - wxGetApp().app_config->get("arrange", "min_object_distance_fff"); + // Each key must match what _render_arrange_menu writes, which appends a per-mode + // postfix to the base name. + auto load_float = [](const char *key, float &out) { + // The menu writes these with float_to_string_decimal_point, so parse them back + // the same way rather than with anything locale-dependent. + std::string value = wxGetApp().app_config->get("arrange", key); + size_t parsed = 0; + double number = string_to_double_decimal_point(value, &parsed); + if (parsed > 0) + out = float(number); + }; + auto load_bool = [](const char *key, bool &out) { + std::string value = wxGetApp().app_config->get("arrange", key); + if (!value.empty()) + out = (value == "1" || value == "true"); + }; - std::string dist_fff_seq_print_str = - wxGetApp().app_config->get("arrange", "min_object_distance_seq_print_fff"); + load_float("min_object_distance_fff", m_arrange_settings_fff.distance); + load_float("min_object_distance_fff_seq_print", m_arrange_settings_fff_seq_print.distance); + load_float("min_object_distance_sla", m_arrange_settings_sla.distance); - std::string dist_sla_str = - wxGetApp().app_config->get("arrange", "min_object_distance_sla"); + load_bool("enable_rotation_fff", m_arrange_settings_fff.enable_rotation); + load_bool("enable_rotation_fff_seq_print", m_arrange_settings_fff_seq_print.enable_rotation); + load_bool("enable_rotation_sla", m_arrange_settings_sla.enable_rotation); - std::string en_rot_fff_str = - wxGetApp().app_config->get("arrange", "enable_rotation_fff"); - - std::string en_rot_fff_seqp_str = - wxGetApp().app_config->get("arrange", "enable_rotation_seq_print"); - - std::string en_rot_sla_str = - wxGetApp().app_config->get("arrange", "enable_rotation_sla"); - - std::string en_allow_multiple_materials_str = - wxGetApp().app_config->get("arrange", "allow_multi_materials_on_same_plate"); - - std::string en_avoid_region_str = - wxGetApp().app_config->get("arrange", "avoid_extrusion_cali_region"); - - - - if (!dist_fff_str.empty()) - m_arrange_settings_fff.distance = std::stof(dist_fff_str); - - if (!dist_fff_seq_print_str.empty()) - m_arrange_settings_fff_seq_print.distance = std::stof(dist_fff_seq_print_str); - - if (!dist_sla_str.empty()) - m_arrange_settings_sla.distance = std::stof(dist_sla_str); - - if (!en_rot_fff_str.empty()) - m_arrange_settings_fff.enable_rotation = (en_rot_fff_str == "1" || en_rot_fff_str == "true"); - - if (!en_allow_multiple_materials_str.empty()) - m_arrange_settings_fff.allow_multi_materials_on_same_plate = (en_allow_multiple_materials_str == "1" || en_allow_multiple_materials_str == "true"); - - - if (!en_rot_fff_seqp_str.empty()) - m_arrange_settings_fff_seq_print.enable_rotation = (en_rot_fff_seqp_str == "1" || en_rot_fff_seqp_str == "true"); - - if(!en_avoid_region_str.empty()) - m_arrange_settings_fff.avoid_extrusion_cali_region = (en_avoid_region_str == "1" || en_avoid_region_str == "true"); - - if (!en_rot_sla_str.empty()) - m_arrange_settings_sla.enable_rotation = (en_rot_sla_str == "1" || en_rot_sla_str == "true"); + // These two keys carry no postfix, so the one stored value covers both FFF modes. + load_bool("allow_multi_materials_on_same_plate", m_arrange_settings_fff.allow_multi_materials_on_same_plate); + load_bool("allow_multi_materials_on_same_plate", m_arrange_settings_fff_seq_print.allow_multi_materials_on_same_plate); + load_bool("avoid_extrusion_cali_region", m_arrange_settings_fff.avoid_extrusion_cali_region); + load_bool("avoid_extrusion_cali_region", m_arrange_settings_fff_seq_print.avoid_extrusion_cali_region); //BBS: add specific arrange settings m_arrange_settings_fff_seq_print.is_seq_print = true; @@ -1848,6 +1831,16 @@ void GLCanvas3D::enable_separator_toolbar(bool enable) m_separator_toolbar.set_enabled(enable); } +void GLCanvas3D::enable_collapse_toolbar(bool enable) +{ + m_collapse_toolbar_enabled = enable; +} + +void GLCanvas3D::enable_plate_chrome(bool enable) +{ + m_plate_chrome_enabled = enable; +} + bool GLCanvas3D::has_mouse_capture() const { return m_canvas != nullptr && m_canvas->HasCapture(); } @@ -2069,14 +2062,24 @@ void GLCanvas3D::render(bool only_init) no_partplate = true; else if (gizmo_type == GLGizmosManager::BrimEars && !camera.is_looking_downward()) show_grid = false; + if (m_axes_at_bed_center) + // Design tab: the plate grid is generated from the plate's front-left corner, so it + // floats mid-cell under the modeling-origin triad. Suppress it here; a CAD grid centred + // on the origin is rendered in its place (see _render_cad_grid). + show_grid = false; /* view3D render*/ int hover_id = (m_hover_plate_idxs.size() > 0)?m_hover_plate_idxs.front():-1; if (m_canvas_type == ECanvasType::CanvasView3D) { - if (!no_partplate) + // 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) _render_bed(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward(), m_show_world_axes); - if (!no_partplate) //BBS: add outline logic + if (!no_partplate && m_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) + // 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()); //BBS: add outline logic // Depth pass for object-on-object and self shadows; consumed by the gouraud shader below. @@ -2119,12 +2122,6 @@ void GLCanvas3D::render(bool only_init) _render_selection_center(); #endif // ENABLE_RENDER_SELECTION_CENTER - // we need to set the mouse's scene position here because the depth buffer - // could be invalidated by the following gizmo render methods - // this position is used later into on_mouse() to drag the objects - if (m_picking_enabled) - m_mouse.scene_position = _mouse_to_3d(m_mouse.position.cast()); - // sidebar hints need to be rendered before the gizmos because the depth buffer // could be invalidated by the following gizmo render methods _render_selection_sidebar_hints(); @@ -2148,6 +2145,13 @@ void GLCanvas3D::render(bool only_init) if (_is_fxaa_enabled()) _render_fxaa_pass(static_cast(cnv_size.get_width()), static_cast(cnv_size.get_height())); + // Design tab: interactive 2D sketch overlay, drawn over the scene but + // beneath the UI overlays (toolbars, labels). +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && m_design_sketch_tool->has_display()) + m_design_sketch_tool->render(*this); +#endif + // draw overlays _render_overlays(); @@ -2192,7 +2196,7 @@ void GLCanvas3D::render(bool only_init) // Negative coordinate means out of the window, likely because the window was deactivated. // In that case the tooltip should be hidden. - if (m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0. || has_mouse_capture()) { // ORCA continue to capture mouse pos mid drag + if ((m_mouse.position.x() >= 0. && m_mouse.position.y() >= 0.) || has_mouse_capture()) { // ORCA continue to capture mouse pos mid drag if (tooltip.empty()) tooltip = m_layers_editing.get_tooltip(*this); @@ -2892,23 +2896,37 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; float x = dynamic_cast(proj_cfg.option("wipe_tower_x"))->get_at(plate_id); float y = dynamic_cast(proj_cfg.option("wipe_tower_y"))->get_at(plate_id); - float w = dynamic_cast(m_config->option("prime_tower_width"))->value; float a = dynamic_cast(m_config->option("wipe_tower_rotation_angle"))->value; - // BBS - float v = dynamic_cast(m_config->option("prime_volume"))->value; Vec3d plate_origin = ppl.get_plate(plate_id)->get_origin(); - const Print* print = m_process->fff_print(); const Print* current_print = part_plate->fff_print(); - if (!need_wipe_tower && part_plate->get_extruders(true).size() < 2) continue; if (part_plate->get_objects_on_this_plate().empty()) continue; - float brim_width = print->wipe_tower_data(filaments_count).brim_width; - int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = ppl.get_plate(plate_id)->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 0, false, dynamic_cast(dconfig.option("enable_wrapping_detection"))->value); + // Body and brim from this plate's own estimate: m_process->fff_print() is the + // selected plate's, so an auto brim drew every tower with that plate's brim. + const WipeTowerFootprint footprint = part_plate->estimate_wipe_tower_footprint(full_config); + // The estimate is also the answer to whether this plate prints a tower; + // deciding it here as well only gave the two room to drift. + if (footprint.depth <= 0.) continue; + float brim_width = float(footprint.brim_width); + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); + + // set_default_wipe_tower_pos_for_plate doesn't rerun when painting changes the + // filament count, so redo its clamp here on every reload — unconditionally: a + // paint-triggered reload can arrive before the background process invalidates + // psWipeTower, so gating on it would skip the clamp exactly when it is needed. + { + Vec3d clamped_pos, clamped_size; + part_plate->estimate_wipe_tower_polygon(full_config, plate_id, clamped_pos, clamped_size); + if (std::abs(x - (float) clamped_pos(0)) > EPSILON || std::abs(y - (float) clamped_pos(1)) > EPSILON) { + x = (float) clamped_pos(0); + y = (float) clamped_pos(1); + ConfigOptionFloat wt_x_opt(x), wt_y_opt(y); + dynamic_cast(proj_cfg.option("wipe_tower_x"))->set_at(&wt_x_opt, plate_id, 0); + dynamic_cast(proj_cfg.option("wipe_tower_y"))->set_at(&wt_y_opt, plate_id, 0); + } + } - // The stored position is already clamped onto the bed, by - // set_default_wipe_tower_pos_for_plate and again on every drag. if (!current_print->is_step_done(psWipeTower) || !current_print->wipe_tower_data().wipe_tower_mesh_data) { // update for wipe tower position int volume_idx_wipe_tower_new = m_volumes.load_wipe_tower_preview(1000 + plate_id, x + plate_origin(0), y + plate_origin(1), @@ -3216,7 +3234,11 @@ void GLCanvas3D::on_idle(wxIdleEvent& evt) // BBS //m_dirty |= wxGetApp().plater()->get_view_toolbar().update_items_state(); m_dirty |= wxGetApp().plater()->get_collapse_toolbar().update_items_state(); - bool mouse3d_controller_applied = wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera()); + // apply() DRAINS the 3D-mouse queue, so only the canvas actually on screen may call it: a + // hidden canvas renders nothing, so the motion it swallowed moves the shared camera without + // ever being drawn and the next visible frame jumps several states at once. + bool mouse3d_controller_applied = _is_shown_on_screen() + && wxGetApp().plater()->get_mouse3d_controller().apply(wxGetApp().plater()->get_camera()); m_dirty |= mouse3d_controller_applied; m_dirty |= wxGetApp().plater()->get_notification_manager()->update_notifications(*this); auto gizmo = wxGetApp().plater()->get_view3D_canvas3D()->get_gizmos_manager().get_current(); @@ -3284,6 +3306,64 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) return; } + // Design tab: Delete/Backspace removes the selected sketch entities while a + // sketch tool is active and the canvas has focus (dialog text fields are separate + // wx controls, so this never eats their editing keys). +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && m_design_sketch_tool->is_active() + && (keyCode == WXK_DELETE || keyCode == WXK_BACK) + && !m_design_sketch_tool->selection().empty()) { + m_design_sketch_tool->delete_selected(); + m_dirty = true; + render(); + return; + } +#endif + + // Esc exits the active sketch tool (Onshape-like, layered: abort in-progress entity -> + // drop to Select -> exit the session back to Feature mode). +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && m_design_sketch_tool->is_active() + && keyCode == WXK_ESCAPE) { + m_design_sketch_tool->request_exit(); + m_dirty = true; + render(); + return; + } +#endif + + // Design tab: Ctrl+Z / Ctrl+Shift+Z (and Ctrl+Y) undo/redo the Design feature + // history. Scoped by m_design_sketch_tool — only the Design canvas owns one — so the + // main 3D editor's undo/redo (the CanvasView3D-gated cases further below) is untouched. + // Handled here, before the generic Ctrl block, so it takes precedence and early-returns. +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && (evt.GetModifiers() & ctrlMask) != 0) { + const bool is_z = (keyCode == 'z' || keyCode == 'Z' || keyCode == WXK_CONTROL_Z); + const bool is_y = (keyCode == 'y' || keyCode == 'Y' || keyCode == WXK_CONTROL_Y); + if (is_z || is_y) { + const bool redo = is_y || ((evt.GetModifiers() & shiftMask) != 0); + m_design_sketch_tool->request_undo_redo(redo); + m_dirty = true; + render(); + return; + } + } +#endif + + // Design tab: F = Place on Face (Prepare's lay-flat), when the Design viewport is up + // and a body face is selected. The tool forwards to DesignPanel::place_on_face; it returns + // false (no face picked) so F falls through to the default handler below. +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && m_design_sketch_tool->has_display() + && (keyCode == 'f' || keyCode == 'F') && (evt.GetModifiers() & ctrlMask) == 0) { + if (m_design_sketch_tool->request_place_on_face()) { + m_dirty = true; + render(); + return; + } + } +#endif + bool is_in_painting_mode = false; GLGizmoPainterBase *current_gizmo_painter = dynamic_cast(get_gizmos_manager().get_current()); if (current_gizmo_painter != nullptr) { @@ -3661,6 +3741,20 @@ public: void GLCanvas3D::on_key(wxKeyEvent& evt) { + // Design tab: Delete/Backspace removes selected sketch entities. GTK delivers + // these as KEY_DOWN rather than CHAR, so handle it here too. +#ifdef SLIC3R_CAD + if (evt.GetEventType() == wxEVT_KEY_DOWN + && m_design_sketch_tool != nullptr && m_design_sketch_tool->is_active() + && (evt.GetKeyCode() == WXK_DELETE || evt.GetKeyCode() == WXK_BACK) + && !m_design_sketch_tool->selection().empty()) { + m_design_sketch_tool->delete_selected(); + m_dirty = true; + render(); + return; + } +#endif + static GLCanvas3D const * thiz = nullptr; static TranslationProcessor translationProcessor(nullptr, nullptr); if (thiz != this) { @@ -4169,7 +4263,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // https://github.com/OrcaSlicer/OrcaSlicer/pull/14999#issuecomment-5151344759 // We solve this by correcting the state of the event from the actual mouse state querying with `wxGetMouseState()` // so it works like on other platforms. - { + // Only fill in state the event does not carry, to preserve wx's synthetic right button for Ctrl+left. + if (!evt.ButtonIsDown(wxMOUSE_BTN_ANY)) { const auto state = wxGetMouseState(); evt.SetLeftDown(state.LeftIsDown()); evt.SetMiddleDown(state.MiddleIsDown()); @@ -4224,6 +4319,23 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) return; } + // Design tab: the interactive sketch tool owns the mouse whenever it has + // something on screen — an active session OR committed sketch overlays that the user + // can click to select. It runs after ImGui (so dialogs still work) but before + // camera/toolbar/gizmo handling; on_mouse returns false for events it doesn't consume + // (drag/orbit/wheel) so the camera keeps working over the display-only plate. +#ifdef SLIC3R_CAD + if (m_design_sketch_tool != nullptr && m_design_sketch_tool->has_display()) { + if (evt.LeftDown() && m_canvas != nullptr) + m_canvas->SetFocus(); // grab keyboard focus so Delete/keys reach this canvas + if (m_design_sketch_tool->on_mouse(evt, *this)) { + m_dirty = true; + render(); // force an immediate redraw so the sketch overlay updates live + return; + } + } +#endif + #ifdef __WXMSW__ bool on_enter_workaround = false; if (! evt.Entering() && ! evt.Leaving() && m_mouse.position.x() == -1.0) { @@ -4328,6 +4440,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (can_sequential_clearance_show_in_gizmo()) update_sequential_clearance(); } else { + // Orca: by-layer counterpart, for a prime tower compacted by "No sparse layers". + if (current_printer_technology() == ptFFF && can_sequential_clearance_show_in_gizmo()) + update_compacted_wipe_tower_clearance(); if (c == GLGizmosManager::EType::Move || c == GLGizmosManager::EType::Scale || c == GLGizmosManager::EType::Rotate) @@ -4497,12 +4612,13 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) BoundingBoxf3 volume_bbox = m_volumes.volumes[volume_idx]->transformed_bounding_box(); volume_bbox.offset(1.0); const bool is_cut_connector_selected = m_selection.is_any_connector(); - if ((!any_gizmo_active || !evt.CmdDown()) && volume_bbox.contains(m_mouse.scene_position) && !is_cut_connector_selected) { + const Vec3d scene_position = _mouse_to_3d(pos); + if ((!any_gizmo_active || !evt.CmdDown()) && volume_bbox.contains(scene_position) && !is_cut_connector_selected) { m_volumes.volumes[volume_idx]->hover = GLVolume::HS_None; // The dragging operation is initiated. m_mouse.drag.move_volume_idx = volume_idx; m_selection.setup_cache(); - m_mouse.drag.start_position_3D = m_mouse.scene_position; + m_mouse.drag.start_position_3D = scene_position; m_sequential_print_clearance_first_displacement = true; m_moving = true; @@ -4560,8 +4676,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) TransformationType trafo_type; trafo_type.set_relative(); m_selection.translate(cur_pos - m_mouse.drag.start_position_3D, trafo_type); - if (current_printer_technology() == ptFFF && (fff_print()->config().print_sequence == PrintSequence::ByObject)) - update_sequential_clearance(); + if (current_printer_technology() == ptFFF) { + if (fff_print()->config().print_sequence == PrintSequence::ByObject) + update_sequential_clearance(); + else + update_compacted_wipe_tower_clearance(); + } // BBS //wxGetApp().obj_manipul()->set_dirty(); m_dirty = true; @@ -4927,6 +5047,8 @@ bool GLCanvas3D::is_camera_rotate(const wxMouseEvent& evt, const std::map> notified; + for (unsigned int i : m_selection.get_volume_idxs()) { + const GLVolume* v = m_volumes.volumes[i]; + const int object_idx = v->object_idx(); + if (object_idx < 0 || object_idx >= static_cast(m_model->objects.size())) + continue; + const std::pair key(object_idx, selection_mode == Selection::Volume ? -1 : v->instance_idx()); + if (notified.insert(key).second) + m_selection.notify_instance_update(key.first, key.second); + } + } // Fixes sinking/flying instances (snaps object to buildplate) for (const std::pair& i : done) { @@ -5635,6 +5773,101 @@ bool GLCanvas3D::can_sequential_clearance_show_in_gizmo() { return false; } +// Live preview of the compacted prime tower clearance, the by-layer counterpart of +// update_sequential_clearance(). Called while the user drags a volume / gizmo; idle visibility +// matches sequential print (hidden when valid, filled when Print::validate reports a collision). +// Print::compacted_wipe_tower_clearance_valid() answers the same question authoritatively, but it +// reads the tower position from the config, which only catches up once do_move() writes it back on +// mouse release. Recomputing from the volumes here is what makes the keep-out zone follow the tower +// while it is still under the cursor. +void GLCanvas3D::update_compacted_wipe_tower_clearance() +{ + if (current_printer_technology() != ptFFF) + return; + const Print *print = fff_print(); + if (print == nullptr) + return; + const PrintConfig &config = print->config(); + if (config.print_sequence != PrintSequence::ByLayer || ! wipe_tower_sparse_layers_skipped(config) || ! print->has_wipe_tower()) + return; + + PartPlateList &plate_list = wxGetApp().plater()->get_partplate_list(); + PartPlate *plate = plate_list.get_curr_plate(); + if (plate == nullptr) + return; + const int plate_id = plate_list.get_curr_plate_index(); + + // Once the tower has been generated the scene shows its real mesh with the brim merged in, + // otherwise it is a bare estimated cube with no brim at all. Only the latter needs the brim added + // here, and the width comes from WipeTowerData, the same source the preview box is sized from, so + // the zone cannot be padded against a brim the preview was not built with. + const bool preview_carries_brim = print->is_step_done(psWipeTower) && print->wipe_tower_data().wipe_tower_mesh_data.has_value(); + const double brim = preview_carries_brim ? 0. : double(print->wipe_tower_data(print->extruders().size()).brim_width); + const double padding = compacted_tower_footprint_padding(config, brim); + + // Tower footprint straight from the volume the user sees, so that dragging either the tower or an + // object updates the zone on the very next frame. + Polygon tower_footprint; + for (const GLVolume *v : m_volumes.volumes) { + if (! v->is_wipe_tower || v->object_idx() - 1000 != plate_id) + continue; + const BoundingBoxf3 bbox = v->transformed_convex_hull_bounding_box(); + tower_footprint = Polygon({ Point(scale_(bbox.min.x() - padding), scale_(bbox.min.y() - padding)), + Point(scale_(bbox.max.x() + padding), scale_(bbox.min.y() - padding)), + Point(scale_(bbox.max.x() + padding), scale_(bbox.max.y() + padding)), + Point(scale_(bbox.min.x() - padding), scale_(bbox.max.y() + padding)) }); + break; + } + + const CompactedTowerZone zone = compacted_wipe_tower_zone(config, tower_footprint); + if (zone.empty()) { + reset_sequential_print_clearance(); + return; + } + + // While dragging, outline every on-plate instance next to the tower ring, the way sequential print + // outlines every object. Both carry half of the clearance, so the two outlines meeting is precisely + // the moment that object goes over its limit - which is what makes the pair worth drawing at all. + // The tier is per object, so a short object gets the narrow nozzle outline rather than the wide + // body one it is not subject to; without that, a 3 mm object parked beside the tower would be drawn + // deep inside the keep-out ring while passing the check. Only the instances that already exceed + // allowed_rise also get a height limit plane. + Polygons outlines; + std::vector> height_polygons; + bool body_tier_used = false; + const BoundingBox plate_bb = plate->get_bounding_box_crd(); + for (const ModelObject *model_object : m_model->objects) { + for (size_t i = 0; i < model_object->instances.size(); ++i) { + Geometry::Transformation trafo(model_object->instances[i]->get_transformation()); + const Vec3d offset = trafo.get_offset(); + trafo.set_offset(Vec3d(offset.x(), offset.y(), 0.0)); + const Polygon inst_hull = model_object->convex_hull_2d(trafo.get_matrix()); + if (inst_hull.points.empty() || ! plate_bb.overlap(inst_hull.bounding_box())) + continue; + + // Same tiers and the same rise measured from the plate as + // Print::compacted_wipe_tower_clearance_valid(), so that the preview and the validation + // that follows it never contradict each other. + const double object_top = model_object->get_instance_max_z(i); + const CompactedTowerClearance clearance = compacted_wipe_tower_clearance(config, zone, inst_hull, object_top); + body_tier_used = body_tier_used || compacted_tower_body_tier(clearance); + + const Polygon outline = compacted_wipe_tower_offender_outline(inst_hull, clearance.body_clearance); + outlines.emplace_back(outline); + if (object_top <= clearance.allowed_rise + EPSILON) + continue; + height_polygons.emplace_back(outline, float(clearance.allowed_rise)); + } + } + + Polygons polygons = compacted_wipe_tower_rings(zone, body_tier_used); + append(polygons, outlines); + + set_sequential_print_clearance_visible(true); + set_sequential_print_clearance_render_fill(false); + set_sequential_print_clearance_polygons(polygons, height_polygons); +} + void GLCanvas3D::update_sequential_clearance() { if (current_printer_technology() != ptFFF || (fff_print()->config().print_sequence == PrintSequence::ByLayer)) @@ -5955,7 +6188,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa } //BBS: GUI refactor: adjust main toolbar position -bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, float top) +void GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, float top) { ImGuiWrapper *imgui = wxGetApp().imgui(); @@ -5980,7 +6213,6 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo imgui->begin(_L("Arrange options"), ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar); - ArrangeSettings settings = get_arrange_settings(); ArrangeSettings &settings_out = get_arrange_settings(); const float slider_icon_width = imgui->get_slider_icon_size().x; const float cursor_slider_left = imgui->calc_text_size(_L("Spacing")).x + imgui->scaled(1.5f); @@ -5989,13 +6221,9 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo auto &appcfg = wxGetApp().app_config; PrinterTechnology ptech = current_printer_technology(); - bool settings_changed = false; - float dist_min = 0.f; // 0 means auto std::string dist_key = "min_object_distance", rot_key = "enable_rotation"; - std::string bed_shrink_x_key = "bed_shrink_x", bed_shrink_y_key = "bed_shrink_y"; std::string multi_material_key = "allow_multi_materials_on_same_plate"; std::string avoid_extrusion_key = "avoid_extrusion_cali_region"; - std::string align_to_y_axis_key = "align_to_y_axis"; std::string postfix; //BBS: bool seq_print = false; @@ -6003,59 +6231,41 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo if (ptech == ptSLA) { postfix = "_sla"; } else if (ptech == ptFFF) { - seq_print = &settings == &m_arrange_settings_fff_seq_print; - if (seq_print) { - postfix = "_fff_seq_print"; - } else { - postfix = "_fff"; - } + seq_print = wxGetApp().global_print_sequence() == PrintSequence::ByObject; + postfix = seq_print ? "_fff_seq_print" : "_fff"; } dist_key += postfix; rot_key += postfix; - bed_shrink_x_key += postfix; - bed_shrink_y_key += postfix; ImGui::AlignTextToFramePadding(); imgui->text(_L("Spacing")); ImGui::SameLine(1.2 * cursor_slider_left); ImGui::PushItemWidth(window_width - slider_icon_width); - bool b_Spacing = imgui->bbl_slider_float_style("##Spacing", &settings.distance, dist_min, 100.0f, "%5.2f") || dist_min > settings.distance; + bool b_Spacing = imgui->bbl_slider_float_style("##Spacing", &settings_out.distance, 0.f, 100.0f, "%5.2f", 1.0f, /*clamp=*/false); ImGui::SameLine(window_width - slider_icon_width + 1.3 * cursor_slider_left); ImGui::PushItemWidth(1.5 * slider_icon_width); - bool b_spacing_input = ImGui::BBLDragFloat("##spacing_input", &settings.distance, 0.05f, 0.0f, 0.0f, "%.2f"); - if (b_Spacing || b_spacing_input) - { - settings.distance = std::max(dist_min, settings.distance); - settings_out.distance = settings.distance; + bool b_spacing_input = ImGui::BBLDragFloat("##spacing_input", &settings_out.distance, 0.05f, 0.0f, 0.0f, "%.2f"); + if (b_Spacing || b_spacing_input) { + settings_out.distance = std::max(0.f, settings_out.distance); appcfg->set("arrange", dist_key.c_str(), float_to_string_decimal_point(settings_out.distance)); - settings_changed = true; } imgui->text(_L("0 means auto spacing.")); ImGui::Separator(); - if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings.enable_rotation)) { - settings_out.enable_rotation = settings.enable_rotation; + if (imgui->bbl_checkbox(_L("Auto rotate for arrangement"), settings_out.enable_rotation)) appcfg->set("arrange", rot_key.c_str(), settings_out.enable_rotation); - settings_changed = true; - } - if (imgui->bbl_checkbox(_L("Allow multiple materials on same plate"), settings.allow_multi_materials_on_same_plate)) { - settings_out.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; - appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate ); - settings_changed = true; - } + if (imgui->bbl_checkbox(_L("Allow multiple materials on same plate"), settings_out.allow_multi_materials_on_same_plate)) + appcfg->set("arrange", multi_material_key.c_str(), settings_out.allow_multi_materials_on_same_plate); // only show this option if the printer has micro Lidar and can do first layer scan DynamicPrintConfig ¤t_config = wxGetApp().preset_bundle->printers.get_edited_preset().config; const bool has_lidar = wxGetApp().preset_bundle->is_bbl_vendor(); auto op = current_config.option("scan_first_layer"); if (has_lidar && op && op->getBool()) { - if (imgui->bbl_checkbox(_L("Avoid extrusion calibration region"), settings.avoid_extrusion_cali_region)) { - settings_out.avoid_extrusion_cali_region = settings.avoid_extrusion_cali_region; - appcfg->set("arrange", avoid_extrusion_key.c_str(), settings_out.avoid_extrusion_cali_region ? "1" : "0"); - settings_changed = true; - } + if (imgui->bbl_checkbox(_L("Avoid extrusion calibration region"), settings_out.avoid_extrusion_cali_region)) + appcfg->set("arrange", avoid_extrusion_key.c_str(), settings_out.avoid_extrusion_cali_region); } else { settings_out.avoid_extrusion_cali_region = false; } @@ -6067,11 +6277,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo settings_out.align_to_y_axis = false; } - if (imgui->bbl_checkbox(_L("Align to Y axis"), settings.align_to_y_axis)) { - settings_out.align_to_y_axis = settings.align_to_y_axis; - appcfg->set("arrange", align_to_y_axis_key, settings_out.align_to_y_axis ? "1" : "0"); - settings_changed = true; - } + imgui->bbl_checkbox(_L("Align to Y axis"), settings_out.align_to_y_axis); if (settings_out.enable_rotation == true) { imgui->disabled_end(); } } @@ -6087,7 +6293,6 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo if (imgui->button(_L("Reset"))) { settings_out = ArrangeSettings{}; - settings_out.distance = std::max(dist_min, settings_out.distance); //BBS: add specific arrange settings if (seq_print) settings_out.is_seq_print = true; @@ -6097,18 +6302,16 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo else settings_out.align_to_y_axis = false; - appcfg->set("arrange", dist_key, float_to_string_decimal_point(settings_out.distance)); - appcfg->set("arrange", rot_key, settings_out.enable_rotation ? "1" : "0"); - appcfg->set("arrange", align_to_y_axis_key, settings_out.align_to_y_axis ? "1" : "0"); - settings_changed = true; + appcfg->erase("arrange", dist_key); + appcfg->erase("arrange", rot_key); + appcfg->erase("arrange", multi_material_key); + appcfg->erase("arrange", avoid_extrusion_key); } ImGui::PopStyleVar(1); imgui->end(); //BBS ImGuiWrapper::pop_toolbar_style(); - - return settings_changed; } static const float cameraProjection[16] = {1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 1.f, 0.f, 0.f, 0.f, 0.f, 1.f}; @@ -7974,13 +8177,113 @@ void GLCanvas3D::_render_bed(const Transform3d& view_matrix, const Transform3d& */ //bool show_texture = true; //BBS set axes mode - m_bed.set_axes_mode(m_main_toolbar.is_enabled()); + if (m_axes_at_bed_center) { + // Design tab: triad at the bed centre = modeling origin (set every frame because + // set_shape/set_axes_mode otherwise reset it to the bed corner). + const Vec2d bc = m_bed.build_volume().bed_center(); + m_bed.set_axes_origin(Vec3d(bc.x(), bc.y(), 0.0)); + } else { + m_bed.set_axes_mode(m_main_toolbar.is_enabled()); + } m_bed.render(*this, view_matrix, projection_matrix, bottom, scale_factor, show_axes); } void GLCanvas3D::_render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body, int hover_id, bool render_cali, bool show_grid) { - wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid); + wxGetApp().plater()->get_partplate_list().render(view_matrix, projection_matrix, bottom, only_current, only_body, hover_id, render_cali, show_grid, !m_plate_chrome_enabled); +} + +// Design tab: CAD grid on the bed plane, drawn in place of the plate's corner-origin grid. +// Generated from the bed centre (= modeling origin) so a grid line passes exactly through the +// triad in both axes. Minor lines every 10 mm, major every 50 mm; the two GLModels are built +// once and rebuilt only when the bed shape changes, not per frame. +void GLCanvas3D::_render_cad_grid(const Transform3d& view_matrix, const Transform3d& projection_matrix) +{ + const BuildVolume& build_volume = m_bed.build_volume(); + if (!build_volume.valid()) + return; + + const Vec2d center = build_volume.bed_center(); + const BoundingBoxf bb = build_volume.bounding_volume2d(); + if (!m_cad_grid_valid || m_cad_grid_center != center || m_cad_grid_bb != bb) { + m_cad_grid_center = center; + m_cad_grid_bb = bb; + m_cad_grid_valid = true; + + // Same z as PartPlate::GROUND_Z_GRIDLINE (-0.26f): just below the bed fill (GROUND_Z = + // -0.03f, which is drawn with the depth mask disabled) and above the physical bed model + // (offset z = -0.41), so the grid never z-fights the bed quad. Chosen by construction, + // not by magic number: it is the exact z the plate grid already uses on the shared bed. + const float z = -0.26f; + + auto build_grid = [&z, ¢er, &bb](double step, GLModel& model) { + std::vector> segs; + // Constant-x (vertical on screen) lines, both directions from the centre so the + // centre column itself is always present. Clipped to the bed bounding box so nothing + // spills past the bed quad. + for (double x = center.x(); x >= bb.min.x(); x -= step) + segs.emplace_back(Vec2d(x, bb.min.y()), Vec2d(x, bb.max.y())); + for (double x = center.x() + step; x <= bb.max.x(); x += step) + segs.emplace_back(Vec2d(x, bb.min.y()), Vec2d(x, bb.max.y())); + // Constant-y (horizontal on screen) lines, same centre-first convention. + for (double y = center.y(); y >= bb.min.y(); y -= step) + segs.emplace_back(Vec2d(bb.min.x(), y), Vec2d(bb.max.x(), y)); + for (double y = center.y() + step; y <= bb.max.y(); y += step) + segs.emplace_back(Vec2d(bb.min.x(), y), Vec2d(bb.max.x(), y)); + + GLModel::Geometry data; + data.format = { GLModel::Geometry::EPrimitiveType::Lines, GLModel::Geometry::EVertexLayout::P3 }; + data.reserve_vertices(2 * segs.size()); + data.reserve_indices(2 * segs.size()); + for (const auto& s : segs) { + data.add_vertex(Vec3f(float(s.first.x()), float(s.first.y()), z)); + data.add_vertex(Vec3f(float(s.second.x()), float(s.second.y()), z)); + const unsigned int vc = static_cast(data.vertices_count()); + data.add_line(vc - 2, vc - 1); + } + model.init_from(std::move(data)); + }; + + m_cad_grid_minor.reset(); + m_cad_grid_major.reset(); + build_grid(10.0, m_cad_grid_minor); + build_grid(50.0, m_cad_grid_major); + } + + if (!m_cad_grid_minor.is_initialized() || !m_cad_grid_major.is_initialized()) + return; + + GLShaderProgram* shader = wxGetApp().get_shader("flat"); + if (shader == nullptr) + return; + + shader->start_using(); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + shader->set_uniform("view_model_matrix", view_matrix); + shader->set_uniform("projection_matrix", projection_matrix); + + // White every 5 cm, grey every 1 cm — the SAME in both themes, deliberately. There is no + // "white bed" to vanish against: the plate is dark grey either way, DEFAULT_MODEL_COLOR + // {0.326,0.337,0.337} on light and DEFAULT_MODEL_COLOR_DARK {0.255,0.255,0.283} on dark + // (3DBed.cpp:185-186), a difference of 0.07. A per-theme palette here would be a branch + // that buys nothing and one more thing to keep in step. + // + // For contrast with what this replaces: the plate's own grid uses LINE_TOP_DARK_COLOR, a + // 0.43 grey, for BOTH its thin and its bold family — which is most of why the stock grid + // reads as a flat mesh with no scale to it. + const ColorRGBA minor_color(0.40f, 0.40f, 0.42f, 1.0f); + const ColorRGBA major_color(0.90f, 0.90f, 0.90f, 1.0f); + + glsafe(::glLineWidth(1.0f)); + m_cad_grid_minor.set_color(minor_color); + m_cad_grid_minor.render(); + + glsafe(::glLineWidth(2.0f)); + m_cad_grid_major.set_color(major_color); + m_cad_grid_major.render(); + + glsafe(::glDisable(GL_BLEND)); } void GLCanvas3D::_render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix) @@ -9261,7 +9564,7 @@ void GLCanvas3D::_render_imgui_select_plate_toolbar() ImVec2 size = ImVec2(button_width, button_height); ImVec2 end_pos = ImVec2(start_pos.x + size.x, start_pos.y + size.y); // ORCA show additional information depends on state - auto draw_info_btn = [end_pos, f_scale, margin, window_bg](std::string str, ImVec4 bg_color, ImVec4 fg_color){ + auto draw_info_btn = [end_pos, f_scale, margin](std::string str, ImVec4 bg_color, ImVec4 fg_color){ GImGui->FontSize = 15.0f * f_scale; ImVec2 txt_slice_sz = ImGui::CalcTextSize(str.c_str()); ImVec2 btn_pad = ImVec2(8.f, 1.f) * f_scale; @@ -9517,7 +9820,7 @@ void GLCanvas3D::_render_canvas_toolbar() Plater* p = wxGetApp().plater(); AppConfig* cfg = wxGetApp().app_config; - auto create_menu_item = [this, sc]( + auto create_menu_item = [sc]( const std::string& name, bool enable, bool condition, @@ -9534,7 +9837,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("3D Navigator")), m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly wxGetApp().show_3d_navigator(), - [this]{ + []{ wxGetApp().toggle_show_3d_navigator(); ImGui::CloseCurrentPopup(); // Close popup to show changes on UI } @@ -9543,7 +9846,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Zoom button")), true, // work on all wxGetApp().show_canvas_zoom_button(), - [this]{ + []{ wxGetApp().toggle_canvas_zoom_button(); ImGui::CloseCurrentPopup(); // Close popup to show changes on UI } @@ -9554,13 +9857,13 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Overhangs")), m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare p->is_view3D_overhang_shown(), - [this, p]{p->show_view3D_overhang(!p->is_view3D_overhang_shown());} + [p]{p->show_view3D_overhang(!p->is_view3D_overhang_shown());} ); create_menu_item( _utf8(L("Outline")), m_canvas_type != ECanvasType::CanvasPreview, // not work on preview wxGetApp().show_outline(), - [this]{wxGetApp().toggle_show_outline();} + []{wxGetApp().toggle_show_outline();} ); create_menu_item( _utf8(L("Wireframe")), @@ -9572,7 +9875,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Realistic View")), m_canvas_type != ECanvasType::CanvasPreview, // not work on preview cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE), - [this, &cfg]{ + [&cfg]{ cfg->set_bool(SETTING_OPENGL_REALISTIC_MODE, !cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE)); cfg->save(); } @@ -9583,7 +9886,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Perspective")), true, // work on all cfg->get_bool("use_perspective_camera"), - [this, &cfg]{ + [&cfg]{ cfg->set_bool("use_perspective_camera", !(cfg->get_bool("use_perspective_camera"))); wxGetApp().update_ui_from_settings(); } @@ -9600,7 +9903,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Gridlines")), m_canvas_type != ECanvasType::CanvasAssembleView, // not work on assembly wxGetApp().show_plate_gridlines(), - [this]{wxGetApp().toggle_show_plate_gridlines();} + []{wxGetApp().toggle_show_plate_gridlines();} ); ImGui::Separator(); @@ -9608,7 +9911,7 @@ void GLCanvas3D::_render_canvas_toolbar() create_menu_item( _utf8(L("Labels")), m_canvas_type == ECanvasType::CanvasView3D, // work only on prepare p->are_view3D_labels_shown(), - [this, p]{p->show_view3D_labels(!p->are_view3D_labels_shown());} + [p]{p->show_view3D_labels(!p->are_view3D_labels_shown());} ); ImGui::PopItemFlag(); @@ -9653,6 +9956,9 @@ void GLCanvas3D::_render_separator_toolbar_left() const void GLCanvas3D::_render_collapse_toolbar() const { + if (!m_collapse_toolbar_enabled) + return; + auto& plater = *wxGetApp().plater(); const auto sidebar_docking_dir = plater.get_sidebar_docking_state(); if (sidebar_docking_dir == Sidebar::None) { @@ -9790,18 +10096,18 @@ void GLCanvas3D::_render_paint_toolbar() const ImVec2 number_label_size = ImGui::CalcTextSize(std::to_string(i + 1).c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - number_label_size.x) / 2); - ImGui::TextColored(text_color, std::to_string(i + 1).c_str()); + ImGui::TextColored(text_color, "%s", std::to_string(i + 1).c_str()); imgui.pop_bold_font(); ImVec2 filament_first_line_label_size = ImGui::CalcTextSize(filament_text_first_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_first_line_label_size.x) / 2); - ImGui::TextColored(text_color, filament_text_first_line[i].c_str()); + ImGui::TextColored(text_color, "%s", filament_text_first_line[i].c_str()); ImVec2 filament_second_line_label_size = ImGui::CalcTextSize(filament_text_second_line[i].c_str()); ImGui::SetCursorPosY(cursor_y + text_offset_y + number_label_size.y + filament_first_line_label_size.y); ImGui::SetCursorPosX(spacing + i * (spacing + button_size.x) + (button_size.x - filament_second_line_label_size.x) / 2); - ImGui::TextColored(text_color, filament_text_second_line[i].c_str()); + ImGui::TextColored(text_color, "%s", filament_text_second_line[i].c_str()); } if (ImGui::GetWindowWidth() == constraint_window_width) { @@ -10028,9 +10334,9 @@ void GLCanvas3D::_render_assemble_info() const double size1 = m_selection.get_bounding_box().size()(1); double size2 = m_selection.get_bounding_box().size()(2); if (!m_selection.is_empty()) { - ImGui::Text(_L("Volume:").ToUTF8()); ImGui::SameLine(caption_max); + ImGui::Text("%s", _L("Volume:").ToUTF8().data()); ImGui::SameLine(caption_max); ImGui::Text("%.2f", size0 * size1 * size2); - ImGui::Text(_L("Size:").ToUTF8()); ImGui::SameLine(caption_max); + ImGui::Text("%s", _L("Size:").ToUTF8().data()); ImGui::SameLine(caption_max); ImGui::Text("%.2f x %.2f x %.2f", size0, size1, size2); } imgui->end(); diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 84dbd5d652..7c18fa3f64 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -57,6 +57,9 @@ namespace GUI { class Bed3D; class PartPlateList; +#ifdef SLIC3R_CAD +class DesignSketchTool; // Design tab: interactive 2D sketch tool +#endif #if ENABLE_RETINA_GL class RetinaHelper; @@ -337,7 +340,6 @@ class GLCanvas3D bool dragging{ false }; Vec2d position{ DBL_MAX, DBL_MAX }; - Vec3d scene_position{ DBL_MAX, DBL_MAX, DBL_MAX }; bool ignore_left_up{ false }; Drag drag; bool ignore_right_up; @@ -544,6 +546,27 @@ private: mutable Vec2i32 m_canvas_toolbar_pos = {140, 5}; mutable float m_sc{1}; mutable float m_paint_toolbar_width; + bool m_collapse_toolbar_enabled{true}; + bool m_plate_chrome_enabled{true}; + // Design tab: render the world-axis triad at the bed centre (= modeling origin) instead of + // the bed corner. Default false preserves the main editor's corner triad. + bool m_axes_at_bed_center{false}; + // Design tab: draw the printer bed and its plate grid at all. Default true, so the + // main editor is untouched; the Design tab lets the user hide it to model without a bed. + bool m_show_bed{true}; + // Design tab: CAD grid drawn on the bed plane in place of the plate's corner-origin grid. + // Two GLModels (10 mm minor / 50 mm major) generated from the bed centre so a line passes + // exactly through the modeling origin; built once and rebuilt only when the bed shape changes. + GLModel m_cad_grid_minor; + GLModel m_cad_grid_major; + // Geometry the CAD grid models were last built from, so they are rebuilt on bed-shape change + // rather than every frame. + BoundingBoxf m_cad_grid_bb; + Vec2d m_cad_grid_center; + bool m_cad_grid_valid{false}; +#ifdef SLIC3R_CAD + DesignSketchTool* m_design_sketch_tool{nullptr}; +#endif //BBS: add canvas type for assemble view usage ECanvasType m_canvas_type; @@ -571,6 +594,10 @@ private: std::array m_old_size{ 0, 0 }; bool m_is_touchpad_navigation{ false }; + // CAD navigation (Design tab only): left-drag is a selection rubber band, so orbit moves + // to middle-drag and pan to right-drag — the Onshape/SolidWorks mapping. Off everywhere + // else, so Prepare/Preview keep the mouse the user already learned. + bool m_cad_navigation{ false }; // Screen is only refreshed from the OnIdle handler if it is dirty. bool m_dirty; @@ -656,11 +683,7 @@ public: } void load_arrange_settings(); - ArrangeSettings& get_arrange_settings();// { return get_arrange_settings(this); } - ArrangeSettings& get_arrange_settings(PrintSequence print_seq) { - return (print_seq == PrintSequence::ByObject) ? m_arrange_settings_fff_seq_print - : m_arrange_settings_fff; - } + ArrangeSettings& get_arrange_settings(); class SequentialPrintClearance { @@ -888,6 +911,15 @@ public: void enable_assemble_view_toolbar(bool enable); void enable_return_toolbar(bool enable); void enable_separator_toolbar(bool enable); + void enable_collapse_toolbar(bool enable); + void enable_plate_chrome(bool enable); + void set_axes_at_bed_center(bool b) { m_axes_at_bed_center = b; } + void set_show_bed(bool b) { m_show_bed = b; } + bool get_show_bed() const { return m_show_bed; } +#ifdef SLIC3R_CAD + void set_design_sketch_tool(DesignSketchTool* tool) { m_design_sketch_tool = tool; } + DesignSketchTool* get_design_sketch_tool() const { return m_design_sketch_tool; } +#endif void enable_dynamic_background(bool enable) { m_dynamic_background_enabled = enable; } void enable_labels(bool enable) { m_labels.enable(enable); } void enable_slope(bool enable) { m_slope.enable(enable); } @@ -1057,6 +1089,7 @@ public: bool clicked_button_matches_action(const wxMouseEvent& evt, MouseAction action, const std::map& mappings) const; bool is_camera_rotate(const wxMouseEvent& evt, const std::map& mappings) const; bool is_camera_pan(const wxMouseEvent& evt, const std::map& mappings) const; + void set_cad_navigation(bool b) { m_cad_navigation = b; } Size get_canvas_size() const; Vec2d get_local_mouse_position() const; @@ -1163,17 +1196,6 @@ public: void highlight_toolbar_item(const std::string& item_name); void highlight_gizmo(const std::string& gizmo_name); - ArrangeSettings get_arrange_settings() const { - const ArrangeSettings &settings = get_arrange_settings(); - ArrangeSettings ret = settings; - if (&settings == &m_arrange_settings_fff_seq_print) { - ret.distance = std::max(ret.distance, - float(min_object_distance(*m_config))); - } - - return ret; - } - // Timestamp for FPS calculation and notification fade-outs. static int64_t timestamp_now() { #ifdef _WIN32 @@ -1207,6 +1229,8 @@ public: bool can_sequential_clearance_show_in_gizmo(); void update_sequential_clearance(); + // Orca: by-layer counterpart, for a prime tower compacted by "No sparse layers". + void update_compacted_wipe_tower_clearance(); const Print* fff_print() const; const SLAPrint* sla_print() const; @@ -1269,6 +1293,10 @@ private: void _render_shadows(const Transform3d& view_matrix, const Transform3d& projection_matrix); //BBS: add part plate related logic void _render_platelist(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true); + // Design tab: draw the CAD grid (minor 10 mm + major 50 mm) in place of the plate's + // corner-origin grid when the axes sit at the bed centre (modeling origin). Rebuilds its + // GLModels lazily, only when the bed shape changed. + void _render_cad_grid(const Transform3d& view_matrix, const Transform3d& projection_matrix); //BBS: add outline drawing logic void _render_objects(GLVolumeCollection::ERenderType type, bool with_outline = true); void _render_wireframe_overlay(); @@ -1308,7 +1336,7 @@ private: void _render_selection_sidebar_hints() { m_selection.render_sidebar_hints(m_sidebar_field, m_gizmos.get_uniform_scaling()); } //BBS: GUI refactor: adjust main toolbar position bool _render_orient_menu(float left, float right, float bottom, float top); - bool _render_arrange_menu(float left, float right, float bottom, float top); + void _render_arrange_menu(float left, float right, float bottom, float top); void _render_3d_navigator(); void _update_volumes_hover_state(); diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index d670181b1b..fbdb308c56 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -9,6 +9,7 @@ #include "3DScene.hpp" #include "OpenGLManager.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "GLModel.hpp" #include @@ -31,6 +32,7 @@ #include "GUI_App.hpp" #include #include +#include namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/GLToolbar.hpp b/src/slic3r/GUI/GLToolbar.hpp index 85413edc66..c4bc88045e 100644 --- a/src/slic3r/GUI/GLToolbar.hpp +++ b/src/slic3r/GUI/GLToolbar.hpp @@ -327,7 +327,6 @@ private: GLTexture m_icons_texture; bool m_icons_texture_dirty; mutable GLTexture m_images_texture; - mutable bool m_images_texture_dirty; BackgroundTexture m_background_texture; GLTexture m_arrow_texture; Layout m_layout; diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index da8cc3f5bf..e2714d7a1e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,14 +3,24 @@ #include "libslic3r/Technologies.hpp" #include "libslic3r/Platform.hpp" #include "GUI_App.hpp" +#include "BindDialog.hpp" +#include "DeviceManager.hpp" +#include "HMS.hpp" +#include "PresetBundleDialog.hpp" +#include "WebUserLoginDialog.hpp" +#include "WebViewDialog.hpp" +#include "slic3r/Utils/BBLCloudServiceAgent.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "GUI_Init.hpp" #include "GUI_ObjectList.hpp" #include "slic3r/GUI/UserManager.hpp" #include "slic3r/GUI/TaskManager.hpp" #include "format.hpp" #include "libslic3r_version.h" +#include "BuildCommit.hpp" #include "Downloader.hpp" #include +#include #include #include #include @@ -596,7 +606,7 @@ wxString file_wildcards(FileType file_type, const std::string &custom_extension) static std::string libslic3r_translate_callback(const char *s) { return wxGetTranslation(wxString(s, wxConvUTF8)).utf8_str().data(); } #ifdef WIN32 -static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; +static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; static void register_win32_device_notification_event() { @@ -2602,7 +2612,7 @@ void GUI_App::init_app_config() set_log_path_and_level(log_filename, 3); #endif - BOOST_LOG_TRIVIAL(info) << boost::format("gui mode, Current OrcaSlicer Version %1% build %2%") % SoftFever_VERSION % GIT_COMMIT_HASH; + BOOST_LOG_TRIVIAL(info) << boost::format("gui mode, Current OrcaSlicer Version %1% build %2%") % SoftFever_VERSION % build_commit_label; //BBS: remove GCodeViewer as seperate APP logic if (!app_config) @@ -2663,7 +2673,7 @@ std::string GUI_App::get_bbl_client_version() void GUI_App::on_start_subscribe_again(std::string dev_id) { auto start_subscribe_timer = new wxTimer(this, wxID_ANY); - Bind(wxEVT_TIMER, [this, start_subscribe_timer, dev_id](auto& e) { + Bind(wxEVT_TIMER, [start_subscribe_timer, dev_id](auto& e) { start_subscribe_timer->Stop(); Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -3253,7 +3263,7 @@ bool GUI_App::on_init_inner() } }); - Bind(EVT_SHOW_NO_NEW_VERSION, [this](const wxCommandEvent& evt) { + Bind(EVT_SHOW_NO_NEW_VERSION, [](const wxCommandEvent& evt) { wxString msg = _L("This is the newest version."); InfoDialog dlg(nullptr, _L("Info"), msg); dlg.ShowModal(); @@ -5278,7 +5288,7 @@ std::string GUI_App::handle_web_request(std::string cmd) } } else if (command_str.compare("begin_network_plugin_download") == 0) { - CallAfter([this] { wxGetApp().ShowDownNetPluginDlg(); }); + CallAfter([] { wxGetApp().ShowDownNetPluginDlg(); }); } else if (command_str.compare("get_web_shortcut") == 0) { if (root.get_child_optional("key_event") != boost::none) { @@ -6828,7 +6838,7 @@ bool GUI_App::check_preset_parent_available(const std::pair>& preset_data) { - Preset::Type type; + Preset::Type type = Preset::Type::TYPE_INVALID; if (preset_data.second.at(BBL_JSON_KEY_TYPE) == PRESET_IOT_PRINT_TYPE) type = Preset::Type::TYPE_PRINT; else if (preset_data.second.at(BBL_JSON_KEY_TYPE) == PRESET_IOT_PRINTER_TYPE) @@ -7789,21 +7799,6 @@ void GUI_App::stop_http_server() m_http_server.stop(); } -void GUI_App::switch_staff_pick(bool on) -{ - mainframe->m_webview->SendDesignStaffpick(on); -} - -bool GUI_App::switch_language() -{ - if (select_language()) { - recreate_GUI(_L("Switching application language") + dots); - return true; - } else { - return false; - } -} - #ifdef __linux__ static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguageInfo* language, const wxLanguageInfo* system_language) @@ -7898,72 +7893,6 @@ int GUI_App::GetSingleChoiceIndex(const wxString& message, #endif } -// select language from the list of installed languages -bool GUI_App::select_language() -{ - wxArrayString translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); - std::vector language_infos; - language_infos.emplace_back(wxLocale::GetLanguageInfo(wxLANGUAGE_ENGLISH)); - for (size_t i = 0; i < translations.GetCount(); ++ i) { - const wxLanguageInfo *langinfo = wxLocale::FindLanguageInfo(translations[i]); - if (langinfo != nullptr) - language_infos.emplace_back(langinfo); - } - sort_remove_duplicates(language_infos); - std::sort(language_infos.begin(), language_infos.end(), [](const wxLanguageInfo* l, const wxLanguageInfo* r) { return l->Description < r->Description; }); - - wxArrayString names; - names.Alloc(language_infos.size()); - - // Some valid language should be selected since the application start up. - const wxString active_language_code = current_language_code(); - const wxLanguageInfo* active_language_info = wxLocale::FindLanguageInfo(active_language_code); - const wxLanguage current_language = active_language_info != nullptr ? wxLanguage(active_language_info->Language) : wxLanguage(m_wxLocale->GetLanguage()); - const wxString active_lang_prefix = active_language_code.BeforeFirst('_'); - int init_selection = -1; - int init_selection_alt = -1; - int init_selection_default = -1; - for (size_t i = 0; i < language_infos.size(); ++ i) { - if (wxLanguage(language_infos[i]->Language) == current_language) - // The dictionary matches the active language and country. - init_selection = i; - else if ((language_infos[i]->CanonicalName.BeforeFirst('_') == active_lang_prefix) || - // if the active language is Slovak, mark the Czech language as active. - (language_infos[i]->CanonicalName.BeforeFirst('_') == "cs" && active_lang_prefix == "sk")) - // The dictionary matches the active language, it does not necessarily match the country. - init_selection_alt = i; - if (language_infos[i]->CanonicalName.BeforeFirst('_') == "en") - // This will be the default selection if the active language does not match any dictionary. - init_selection_default = i; - names.Add(language_infos[i]->Description); - } - if (init_selection == -1) - // This is the dictionary matching the active language. - init_selection = init_selection_alt; - if (init_selection != -1) - // This is the language to highlight in the choice dialog initially. - init_selection_default = init_selection; - - const long index = GetSingleChoiceIndex(_L("Select the language"), _L("Language"), names, init_selection_default); - // Try to load a new language. - if (index != -1 && (init_selection == -1 || init_selection != index)) { - const wxLanguageInfo *new_language_info = language_infos[index]; - if (this->load_language(new_language_info->CanonicalName, false)) { - // Save language at application config. - // Which language to save as the selected dictionary language? - // 1) Hopefully the language set to wxTranslations by this->load_language(), but that API is weird and we don't want to rely on its - // stability in the future: - // wxTranslations::Get()->GetBestTranslation(SLIC3R_APP_KEY, wxLANGUAGE_ENGLISH); - // 2) Current locale language may not match the dictionary name, see GH issue #3901 - // m_wxLocale->GetCanonicalName() - // 3) new_language_info->CanonicalName is a safe bet. It points to a valid dictionary name. - app_config->set("language", new_language_info->CanonicalName.ToUTF8().data()); - return true; - } - } - - return false; -} // Load gettext translation files and activate them at the start of the application, // based on the "language" key stored in the application config. @@ -8319,7 +8248,7 @@ bool GUI_App::show_modal_ip_address_enter_dialog(bool input_sn, wxString title) dlg.set_machine_obj(obj); if (!title.empty()) dlg.update_title(title); - dlg.Bind(EVT_ENTER_IP_ADDRESS, [this, obj](wxCommandEvent& e) { + dlg.Bind(EVT_ENTER_IP_ADDRESS, [obj](wxCommandEvent& e) { auto selection_data_arr = wxSplit(e.GetString().ToStdString(), '|'); if (selection_data_arr.size() == 2) { @@ -8350,146 +8279,6 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) show_modal_ip_address_enter_dialog(mode == -1?false:true, title); } -//void GUI_App::add_config_menu(wxMenuBar *menu) -//void GUI_App::add_config_menu(wxMenu *menu) -//{ -// auto local_menu = new wxMenu(); -// wxWindowID config_id_base = wxWindow::NewControlId(int(ConfigMenuCnt)); -// -// const auto config_wizard_name = _(ConfigWizard::name(true)); -// const auto config_wizard_tooltip = from_u8((boost::format(_utf8(L("Open %s"))) % config_wizard_name).str()); -// // Cmd+, is standard on OS X - what about other operating systems? -// if (is_editor()) { -// local_menu->Append(config_id_base + ConfigMenuWizard, config_wizard_name + dots, config_wizard_tooltip); -// local_menu->Append(config_id_base + ConfigMenuUpdate, _L("Check for Configuration Updates"), _L("Check for configuration updates")); -// local_menu->AppendSeparator(); -// } -// local_menu->Append(config_id_base + ConfigMenuPreferences, _L("Preferences") + dots + -//#ifdef __APPLE__ -// "\tCtrl+,", -//#else -// "\tCtrl+P", -//#endif -// _L("Application preferences")); -// wxMenu* mode_menu = nullptr; -// if (is_editor()) { -// local_menu->AppendSeparator(); -// mode_menu = new wxMenu(); -// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeSimple, _L("Simple"), _L("Simple Mode")); -// mode_menu->AppendRadioItem(config_id_base + ConfigMenuModeAdvanced, _L("Advanced"), _L("Advanced Mode")); -// Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comSimple) evt.Check(true); }, config_id_base + ConfigMenuModeSimple); -// Bind(wxEVT_UPDATE_UI, [this](wxUpdateUIEvent& evt) { if (get_mode() == comAdvanced) evt.Check(true); }, config_id_base + ConfigMenuModeAdvanced); -// -// local_menu->AppendSubMenu(mode_menu, _L("Mode"), wxString::Format(_L("%s Mode"), SLIC3R_APP_NAME)); -// } -// local_menu->AppendSeparator(); -// local_menu->Append(config_id_base + ConfigMenuLanguage, _L("Language")); -// if (is_editor()) { -// local_menu->AppendSeparator(); -// } -// -// local_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent &event) { -// switch (event.GetId() - config_id_base) { -// case ConfigMenuWizard: -// run_wizard(ConfigWizard::RR_USER); -// break; -// case ConfigMenuUpdate: -// check_updates(true); -// break; -//#ifdef __linux__ -// case ConfigMenuDesktopIntegration: -// show_desktop_integration_dialog(); -// break; -//#endif -// case ConfigMenuSnapshots: -// //BBS do not support task snapshot -// break; -// case ConfigMenuPreferences: -// { -// //BBS GUI refactor: remove unuse layout logic -// //bool app_layout_changed = false; -// { -// // the dialog needs to be destroyed before the call to recreate_GUI() -// // or sometimes the application crashes into wxDialogBase() destructor -// // so we put it into an inner scope -// PreferencesDialog dlg(mainframe); -// dlg.ShowModal(); -// //BBS GUI refactor: remove unuse layout logic -// //app_layout_changed = dlg.settings_layout_changed(); -// if (dlg.seq_top_layer_only_changed()) -// this->plater_->refresh_print(); -// -// if (dlg.recreate_GUI()) { -// recreate_GUI(_L("Restart application") + dots); -// return; -// } -//#ifdef _WIN32 -// if (is_editor()) { -// if (app_config->get("associate_3mf") == "true") -// associate_3mf_files(); -// if (app_config->get("associate_stl") == "true") -// associate_stl_files(); -// } -// else { -// if (app_config->get("associate_gcode") == "true") -// associate_gcode_files(); -// } -//#endif // _WIN32 -// } -// //BBS GUI refactor: remove unuse layout logic -// /*if (app_layout_changed) { -// // hide full main_sizer for mainFrame -// mainframe->GetSizer()->Show(false); -// mainframe->update_layout(); -// mainframe->select_tab(size_t(0)); -// }*/ -// break; -// } -// case ConfigMenuLanguage: -// { -// /* Before change application language, let's check unsaved changes on 3D-Scene -// * and draw user's attention to the application restarting after a language change -// */ -// { -// // the dialog needs to be destroyed before the call to switch_language() -// // or sometimes the application crashes into wxDialogBase() destructor -// // so we put it into an inner scope -// wxString title = is_editor() ? wxString(SLIC3R_APP_NAME) : wxString(GCODEVIEWER_APP_NAME); -// title += " - " + _L("Choose language"); -// //wxMessageDialog dialog(nullptr, -// MessageDialog dialog(nullptr, -// _L("Switching the language requires application restart.\n") + "\n\n" + -// _L("Do you want to continue?"), -// title, -// wxICON_QUESTION | wxOK | wxCANCEL); -// if (dialog.ShowModal() == wxID_CANCEL) -// return; -// } -// -// switch_language(); -// break; -// } -// case ConfigMenuFlashFirmware: -// //BBS FirmwareDialog::run(mainframe); -// break; -// default: -// break; -// } -// }); -// -// using std::placeholders::_1; -// -// if (mode_menu != nullptr) { -// auto modfn = [this](int mode, wxCommandEvent&) { if (get_mode() != mode) save_mode(mode); }; -// mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comSimple, _1), config_id_base + ConfigMenuModeSimple); -// mode_menu->Bind(wxEVT_MENU, std::bind(modfn, comAdvanced, _1), config_id_base + ConfigMenuModeAdvanced); -// } -// -// // BBS -// //menu->Append(local_menu, _L("Configuration")); -// menu->AppendSubMenu(local_menu, _L("Configuration")); -//} - void GUI_App::open_presetbundledialog(size_t open_on_tab, const std::string& highlight_option) { bool app_layout_changed = false; @@ -8799,7 +8588,7 @@ bool GUI_App::check_and_keep_current_preset_changes(const wxString& caption, con if (!no_need_change && dlg.ShowModal() == wxID_CANCEL) return false; - auto reset_modifications = [this, is_called_from_configwizard]() { + auto reset_modifications = [this]() { //if (is_called_from_configwizard) // return; // no need to discared changes. It will be done fromConfigWizard closing @@ -8928,10 +8717,16 @@ void GUI_App::load_current_presets(bool active_preset_combox/*= false*/, bool ch auto* nozzle_diameter = edited_printer_preset.config.option("nozzle_diameter"); if (nozzle_diameter) { // Mixed-color slots are virtual filaments kept at the tail of the list, so they have no - // nozzle of their own. Sizing to the nozzle count alone would silently drop the mixes of - // a just-loaded project, and update_extruder_count() would then strip the facets painted - // with them. - preset_bundle->set_num_filaments(nozzle_diameter->values.size() + preset_bundle->num_mixed_filaments()); + // nozzle of their own and the count has to allow for them. Only ever grow: this sizes + // the list so the combo boxes have something to bind to, and set_num_filaments() trims + // at the raw tail, so shrinking here would eat the mixes rather than the surplus + // physical slots. A list longer than the nozzle count is a state the app reaches + // legitimately - raising the extruder count and not saving the printer preset leaves + // exactly that on the next start - and losing the project's mixes to it is worse than + // carrying a filament the printer has no nozzle for until the count is next changed. + const size_t target = nozzle_diameter->values.size() + preset_bundle->num_mixed_filaments(); + if (target > preset_bundle->filament_presets.size()) + preset_bundle->set_num_filaments(target); } } this->plater()->set_printer_technology(printer_technology); @@ -9432,7 +9227,7 @@ int GUI_App::filaments_cnt() const PrintSequence GUI_App::global_print_sequence() const { PrintSequence global_print_seq = PrintSequence::ByDefault; - auto curr_preset_config = preset_bundle->prints.get_edited_preset().config; + const auto &curr_preset_config = preset_bundle->prints.get_edited_preset().config; if (curr_preset_config.has("print_sequence")) global_print_seq = curr_preset_config.option>("print_sequence")->value; return global_print_seq; diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 8bf32df64c..1b9b209ff8 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -1,23 +1,17 @@ #ifndef slic3r_GUI_App_hpp_ #define slic3r_GUI_App_hpp_ +#include #include #include #include "ActionRegistry.hpp" #include "ImGuiWrapper.hpp" #include "ConfigWizard.hpp" #include "OpenGLManager.hpp" -#include "PresetBundleDialog.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" -#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/UserNotification.hpp" -#include "slic3r/Utils/NetworkAgent.hpp" -#include "slic3r/Utils/BBLCloudServiceAgent.hpp" -#include "slic3r/GUI/WebViewDialog.hpp" -#include "slic3r/GUI/WebUserLoginDialog.hpp" -#include "slic3r/GUI/BindDialog.hpp" -#include "slic3r/GUI/HMS.hpp" +#include "slic3r/Utils/CloudProvider.hpp" #include "slic3r/GUI/Jobs/UpgradeNetworkJob.hpp" #include "slic3r/GUI/HttpServer.hpp" #include "../Utils/PrintHost.hpp" @@ -64,9 +58,14 @@ class ModelObject; class Model; class UserManager; class DeviceManager; +class MachineObject; class NetworkAgent; +class IPrinterAgent; class TaskManager; +// Same typedef as in bambu_networking.hpp, so this header need not include it. +typedef std::function WasCancelledFn; + namespace GUI{ class RemovableDriveManager; @@ -85,6 +84,8 @@ class ParamsDialog; class HMSQuery; class ModelMallDialog; class PingCodeBindDialog; +class PresetBundleDialog; +class ZUserLogin; class NetworkErrorDialog; class PluginsDialog; class SpeedDialWebDialog; @@ -349,6 +350,11 @@ public: int OnExit() override; bool initialized() const { return m_initialized; } inline bool is_enable_multi_machine() { return this->app_config&& this->app_config->get("enable_multi_machine") == "true"; } +#ifdef SLIC3R_CAD + inline bool is_enable_cad_feature() { return this->app_config && this->app_config->get_bool("enable_cad_feature"); } + inline bool is_auto_close_sketch_loops() { return !this->app_config + || this->app_config->get_bool("auto_close_sketch_loops"); } +#endif std::map test_url_state; @@ -569,7 +575,6 @@ public: void start_http_server(const std::string& provider = ORCA_CLOUD_PROVIDER); void start_http_server(int port, const std::string& provider = ORCA_CLOUD_PROVIDER); void stop_http_server(); - void switch_staff_pick(bool on); void on_show_check_privacy_dlg(int online_login = 0, const std::string& provider = ORCA_CLOUD_PROVIDER); void show_check_privacy_dlg(wxCommandEvent& evt); @@ -583,7 +588,6 @@ public: void persist_window_geometry(wxTopLevelWindow *window, bool default_maximized = false); void update_ui_from_settings(); - bool switch_language(); bool load_language(wxString language, bool initial); Tab* get_tab(Preset::Type type); @@ -801,7 +805,6 @@ private: bool window_pos_restore(wxTopLevelWindow* window, const std::string &name, bool default_maximized = false); void window_pos_sanitize(wxTopLevelWindow* window); void window_pos_center(wxTopLevelWindow *window); - bool select_language(); // Dynamic printer agent selection - internal helpers for switch_printer_agent // and the plugin load/unload callbacks (init_plugin_gui_wiring). @@ -832,7 +835,7 @@ wxDECLARE_EVENT(EVT_UPDATE_BUNDLE_COMPLETE, wxCommandEvent); bool is_support_filament(int extruder_id, bool strict_check = true); bool is_soluble_filament(int extruder_id); // check if the filament for model is in the list -bool has_filaments(const std::vector& model_filaments); +bool has_filaments(const std::vector& model_filaments); } // namespace GUI } // Slic3r diff --git a/src/slic3r/GUI/GUI_AuxiliaryList.cpp b/src/slic3r/GUI/GUI_AuxiliaryList.cpp index 1fa5b194ec..be9f99a76a 100644 --- a/src/slic3r/GUI/GUI_AuxiliaryList.cpp +++ b/src/slic3r/GUI/GUI_AuxiliaryList.cpp @@ -217,7 +217,7 @@ void AuxiliaryList::on_context_menu(wxDataViewEvent& evt) } else { append_menu_item(menu, wxID_ANY, _L("Open"), wxEmptyString, - [this, node](wxCommandEvent&) + [node](wxCommandEvent&) { wxLaunchDefaultApplication(node->path, 0); }); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index be407a270f..05248c38df 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1392,7 +1392,7 @@ void MenuFactory::create_default_menu() { wxMenu* sub_menu_primitives = append_submenu_add_generic(&m_default_menu, ModelVolumeType::INVALID); wxMenu* sub_menu_handy = append_submenu_add_handy_model(&m_default_menu, ModelVolumeType::INVALID); -#ifdef __WINDOWS__ + append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", []() {return true; }, m_parent); append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", @@ -1400,21 +1400,12 @@ void MenuFactory::create_default_menu() append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", &m_default_menu, []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#else - append_submenu(&m_default_menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", - []() {return true; }, m_parent); - append_submenu(&m_default_menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", - []() {return true; }, m_parent); - append_menu_item(&m_default_menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models - [](wxCommandEvent&) { plater()->add_file(); }, "", &m_default_menu, - []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#endif m_default_menu.AppendSeparator(); append_menu_check_item(&m_default_menu, wxID_ANY, _L("Show Labels"), "", [](wxCommandEvent&) { plater()->show_view3D_labels(!plater()->are_view3D_labels_shown()); plater()->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, &m_default_menu, - []() { return plater()->is_view3D_shown(); }, [this]() { return plater()->are_view3D_labels_shown(); }, m_parent); + []() { return plater()->is_view3D_shown(); }, []() { return plater()->are_view3D_labels_shown(); }, m_parent); } void MenuFactory::create_common_object_menu(wxMenu* menu) @@ -1789,7 +1780,6 @@ void MenuFactory::create_plate_menu() wxMenu* sub_menu_primitives = append_submenu_add_generic(menu, ModelVolumeType::INVALID); wxMenu* sub_menu_handy = append_submenu_add_handy_model(menu, ModelVolumeType::INVALID); -#ifdef __WINDOWS__ append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "menu_add_part", []() {return true; }, m_parent); append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "menu_add_part", @@ -1797,15 +1787,7 @@ void MenuFactory::create_plate_menu() append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models [](wxCommandEvent&) { plater()->add_file(); }, "menu_add_part", menu, []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#else - append_submenu(menu, sub_menu_primitives, wxID_ANY, _L("Add Primitive"), "", "", - []() {return true; }, m_parent); - append_submenu(menu, sub_menu_handy, wxID_ANY, _L("Add Handy models"), "", "", - []() {return true; }, m_parent); - append_menu_item(menu, wxID_ANY, _L("Add Models"), "", // ORCA: Add Models - [](wxCommandEvent&) { plater()->add_file(); }, "", menu, - []() {return wxGetApp().plater()->can_add_model(); }, m_parent); -#endif + append_menu_item_replace_all_with_stl(menu); @@ -2090,7 +2072,7 @@ void MenuFactory::append_menu_item_clone(wxMenu* menu) static const wxString ctrl = _L("Ctrl+"); #endif append_menu_item(menu, wxID_ANY, _L("Clone") + "\t" + ctrl + "K", "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->clone_selection(); }, "", nullptr, []() { @@ -2115,7 +2097,7 @@ void MenuFactory::append_menu_item_smooth_mesh(wxMenu *menu) void MenuFactory::append_menu_item_center(wxMenu* menu) { append_menu_item(menu, wxID_ANY, _L("Center") , "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->center_selection(); }, "", nullptr, []() { @@ -2134,7 +2116,7 @@ void MenuFactory::append_menu_item_center(wxMenu* menu) void MenuFactory::append_menu_item_drop(wxMenu* menu) { append_menu_item(menu, wxID_ANY, _L("Drop") , "", - [this](wxCommandEvent&) { + [](wxCommandEvent&) { plater()->drop_selection(); }, "", nullptr, []() { @@ -2309,7 +2291,7 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) } } - wxMenuItem* menu_item_set_printable = append_menu_check_item(menu, wxID_ANY, _L("Printable") + "\t" + "V", "", [this, all_printable](wxCommandEvent&) { + wxMenuItem* menu_item_set_printable = append_menu_check_item(menu, wxID_ANY, _L("Printable") + "\t" + "V", "", [all_printable](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_printable(!all_printable); }, menu); @@ -2329,7 +2311,7 @@ void MenuFactory::append_menu_item_set_auto_drop(wxMenu* menu) wxString menu_tooltip = _L("Automatically snaps the selected object to the build plate."); wxMenuItem* menu_item_set_auto_drop = append_menu_check_item( menu, wxID_ANY, menu_text, menu_tooltip, - [this, current_auto_drop](wxCommandEvent&) { + [current_auto_drop](wxCommandEvent&) { Selection& selection = plater()->canvas3D()->get_selection(); selection.set_auto_drop(!current_auto_drop); }, @@ -2384,7 +2366,7 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) auto item = append_menu_item( menu, wxID_ANY, name, "", - [plate](wxCommandEvent &e) { + [](wxCommandEvent &e) { int hover_idx =plater()->canvas3D()->GetHoverId(); if (hover_idx == -1) { int plate_idx=plater()->GetPlateIndexByRightMenuInLeftUI(); diff --git a/src/slic3r/GUI/GUI_ObjectLayers.cpp b/src/slic3r/GUI/GUI_ObjectLayers.cpp index 3b36158bd1..93bdeec9ee 100644 --- a/src/slic3r/GUI/GUI_ObjectLayers.cpp +++ b/src/slic3r/GUI/GUI_ObjectLayers.cpp @@ -48,7 +48,7 @@ void ObjectLayers::select_editor(LayerRangeEditor* editor, const bool is_last_ed * And as a result we couldn't edit this control. * */ #ifdef __WXOSX__ - wxTheApp->CallAfter([editor]() { + wxTheApp->CallAfter([]() { #endif //editor->SetFocus(); //editor->SelectAll(); @@ -223,7 +223,7 @@ void ObjectLayers::update_layers_list() // only call sizer->Clear(true) via CallAfter, otherwise crash happens in Linux when press enter in Height Range // because an element cannot be destroyed while there are pending events for this element.(https://github.com/wxWidgets/Phoenix/issues/1854) - wxGetApp().CallAfter([this, type, objects_ctrl, range]() { + wxGetApp().CallAfter([this, type, range]() { m_og->ctrl_parent()->Freeze(); // Delete all controls from options group diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index a3c29f3712..c973d6801f 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2348,7 +2348,7 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo bool split_compound = wxGetApp().app_config->get_bool("is_split_compound"); model = Model::read_from_step( input_file, LoadStrategy::LoadModel, nullptr, nullptr, - [this, &is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, + [&is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split) -> int { if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) { StepMeshDialog mesh_dlg(nullptr, file, linear, angle); @@ -3341,7 +3341,7 @@ void ObjectList::boolean() } } - TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [this](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); }); + TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); }); // add mesh to model as a new object, keep the original object's name and config Model* model = object->get_model(); @@ -6305,7 +6305,7 @@ void GUI::ObjectList::smooth_mesh() get_selection_indexes(obj_idxs, vol_idxs); auto object_idx = obj_idxs.front(); ModelObject *obj{nullptr}; - auto show_warning_dlg = [this](int cur_face_count,std::string name,bool is_part) { + auto show_warning_dlg = [](int cur_face_count,std::string name,bool is_part) { int limit_face_count = 1000000; if (cur_face_count > limit_face_count) { auto name_str = wxString::FromUTF8(name); @@ -6318,7 +6318,7 @@ void GUI::ObjectList::smooth_mesh() } return false; }; - auto show_smooth_mesh_error_dlg = [this](std::string name) { + auto show_smooth_mesh_error_dlg = [](std::string name) { auto name_str = wxString::FromUTF8(name); auto content = wxString::Format(_L("\"%s\" part's mesh contains errors. Please repair it first."), name_str); WarningDialog dlg(static_cast(wxGetApp().mainframe), content, wxEmptyString, wxOK); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 1fc07bf5a2..a496eca6d3 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -2578,7 +2578,7 @@ void ObjectGridTable::OnSelectCell(int row, int col) return; m_panel->m_side_window->Freeze(); if (row == 0 || col == col_filaments) { - m_panel->m_object_settings->UpdateAndShow(row, false, false, false, nullptr, nullptr, std::string()); + m_panel->m_object_settings->UpdateAndShowRow(row, false, false, false, nullptr, nullptr, std::string()); } else { ObjectGridRow* grid_row = m_grid_data[row - 1]; @@ -2588,7 +2588,7 @@ void ObjectGridTable::OnSelectCell(int row, int col) //m_panel->m_object_settings->get_og()->set_name(GUI::from_u8(grid_row->name.value)); //m_panel->m_page_text->SetLabel(GUI::from_u8(grid_row->name.value)); - m_panel->m_object_settings->UpdateAndShow(row, true, is_object, false, object, grid_row->config, grid_col->category); + m_panel->m_object_settings->UpdateAndShowRow(row, true, is_object, false, object, grid_row->config, grid_col->category); std::vector object_volume_ids; ObjectVolumeID object_volume_id; @@ -3520,13 +3520,13 @@ void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) Text()->GetTextCtrl()->SetInsertionPointEnd(); - m_control->Bind(wxEVT_TEXT_ENTER, [this, row, col, grid](wxCommandEvent &e) { + m_control->Bind(wxEVT_TEXT_ENTER, [grid](wxCommandEvent &e) { grid->HideCellEditControl(); grid->SaveEditControlValue(); e.Skip(); }); - m_control->Bind(wxEVT_CHAR_HOOK, [this, row, col, grid](wxKeyEvent &e) { + m_control->Bind(wxEVT_CHAR_HOOK, [grid](wxKeyEvent &e) { if (e.GetKeyCode() == WXK_ESCAPE) { grid->HideCellEditControl(); grid->SaveEditControlValue(); diff --git a/src/slic3r/GUI/GUI_ObjectTable.hpp b/src/slic3r/GUI/GUI_ObjectTable.hpp index a5a0059e1b..0fbd432e02 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.hpp +++ b/src/slic3r/GUI/GUI_ObjectTable.hpp @@ -591,16 +591,11 @@ private: wxColour m_hover_colour; wxBoxSizer* m_top_sizer{nullptr}; wxBoxSizer* m_page_sizer{nullptr}; - wxBoxSizer* m_page_top_sizer{nullptr}; - wxTextCtrl* m_search_line{ nullptr }; ObjectGrid* m_object_grid{nullptr}; ObjectGridTable* m_object_grid_table{nullptr}; - wxStaticText* m_page_text{nullptr}; - ScalableButton* m_global_reset{nullptr}; wxScrolledWindow* m_side_window{nullptr}; ObjectTableSettings* m_object_settings{ nullptr }; Model* m_model{nullptr}; - ModelConfig* m_config {nullptr}; Plater* m_plater{nullptr}; int m_cur_row { -1 }; @@ -625,8 +620,6 @@ class ObjectTableDialog : public GUI::DPIDialog const int POPUP_HEIGHT = FromDIP(1024); //wxPanel* m_panel{ nullptr }; - wxBoxSizer* m_top_sizer{ nullptr }; - wxStaticText* m_static_title{ nullptr }; //wxTimer* m_refresh_timer; ObjectTablePanel* m_obj_panel{ nullptr }; Model* m_model{ nullptr }; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index e72c421a08..4cd272840f 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -184,7 +184,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ btn->Bind(EVT_LOCK_ENABLE, [this, btn](auto &e) { btn->SetBitmap(m_bmp_reset_focus.bmp()); }); #endif - btn->Bind(wxEVT_BUTTON, [btn, opt_key, this, is_object, object, config, group_category](wxEvent &event) { + btn->Bind(wxEVT_BUTTON, [opt_key, this, is_object, object, config, group_category](wxEvent &event) { //wxGetApp().plater()->take_snapshot(from_u8((boost::format(_utf8(L("Reset Option %s"))) % opt_key).str())); config->erase(opt_key); //btn->Hide(); @@ -204,10 +204,13 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ this->m_parent->Thaw(); #ifdef __WXOSX_MAC__ - if (!btn->IsEnabled()) { - btn->SetBitmap(m_bmp_reset_disable.bmp()); - } else { - btn->SetBitmap(m_bmp_reset_focus.bmp()); + // The handler is bound on the button, so the event source is that button. + if (auto *btn = dynamic_cast(event.GetEventObject())) { + if (!btn->IsEnabled()) { + btn->SetBitmap(m_bmp_reset_disable.bmp()); + } else { + btn->SetBitmap(m_bmp_reset_focus.bmp()); + } } #endif }); @@ -284,13 +287,13 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ m_settings_list_sizer->Add(optgroup->sizer, 0, wxEXPAND | wxALL, 0); m_og_settings.push_back(optgroup); - auto toggle_field = [this, optgroup](const t_config_option_key & opt_key, bool toggle, int opt_index) + auto toggle_field = [optgroup](const t_config_option_key & opt_key, bool toggle, int opt_index) { Field* field = optgroup->get_fieldc(opt_key, opt_index);; if (field) field->toggle(toggle); }; - auto toggle_line = [this, optgroup](const t_config_option_key &opt_key, bool toggle, int opt_index) + auto toggle_line = [optgroup](const t_config_option_key &opt_key, bool toggle, int opt_index) { Line* line = optgroup->get_line(opt_key); if (line) line->toggle_visible = toggle; @@ -460,7 +463,7 @@ void ObjectTableSettings::update_config_values(bool is_object, ModelObject* obje m_table->reload_cell_data(m_current_row, category); } -void ObjectTableSettings::UpdateAndShow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category) +void ObjectTableSettings::UpdateAndShowRow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category) { m_current_row = row; m_current_category = category; diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp index 39e7e514e2..24e3d427a9 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.hpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.hpp @@ -71,7 +71,7 @@ public: //return visible count int update_extra_column_visible_status(ConfigOptionsGroup* option_group, const std::vector& option_keys, ModelConfig* config); void update_config_values(bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& changed_opt_key = ""); - void UpdateAndShow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category); + void UpdateAndShowRow(int row, const bool show, bool is_object, bool is_multiple_selection, ModelObject* object, ModelConfig* config, const std::string& category); void ValueChanged(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category, const std::string& key); void resetAllValues(int row, bool is_object, ModelObject* object, ModelConfig* config, const std::string& category); void msw_rescale(); diff --git a/src/slic3r/GUI/GUI_Utils.cpp b/src/slic3r/GUI/GUI_Utils.cpp index cb8ba45c6b..10dd29c9c1 100644 --- a/src/slic3r/GUI/GUI_Utils.cpp +++ b/src/slic3r/GUI/GUI_Utils.cpp @@ -69,6 +69,8 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std HANDLE handlesrc = nullptr; HANDLE handledst = nullptr; CopyFileResult ret = SUCCESS; + DWORD size = 0; + DWORD dwRead = 0, dwWrite = 0; handlesrc = CreateFile(src.wc_str(), GENERIC_READ, @@ -96,13 +98,12 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std goto __finished; } - DWORD size=GetFileSize(handlesrc,NULL); + size = GetFileSize(handlesrc,NULL); buff = new char[size+1]; - DWORD dwRead=0,dwWrite; result = ReadFile(handlesrc, buff, size, &dwRead, NULL); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } @@ -110,7 +111,7 @@ CopyFileResult copy_file_gui(const std::string &from, const std::string &to, std result = WriteFile(handledst,buff,size,&dwWrite,NULL); if (!result) { DWORD errCode = GetLastError(); - error_message = "Error: " + errCode; + error_message = "Error: " + std::to_string(errCode); ret = FAIL_COPY_FILE; goto __finished; } diff --git a/src/slic3r/GUI/GUI_Utils.hpp b/src/slic3r/GUI/GUI_Utils.hpp index c93c40b066..85790516ee 100644 --- a/src/slic3r/GUI/GUI_Utils.hpp +++ b/src/slic3r/GUI/GUI_Utils.hpp @@ -155,6 +155,9 @@ public: update_dark_config(); on_sys_color_changed(); event.Skip(); +#else + // Not calling Skip() is what stops the event propagating on Windows. + (void) this; #endif // __WINDOWS__ }); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 012e62b2bc..99ad00fe55 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -1,5 +1,7 @@ // Include GLGizmoBase.hpp before I18N.hpp as it includes some libigl code, which overrides our localization "L" macro. #include "GLGizmoAdvancedCut.hpp" +#include "slic3r/GUI/Widgets/ProgressDialog.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp index 709e7b5b21..6d9e810815 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp @@ -1,6 +1,7 @@ #include "GLGizmoBrimEars.hpp" #include #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -342,7 +343,7 @@ bool GLGizmoBrimEars::on_mouse(const wxMouseEvent& mouse_event) // concludes that the event was not intended for it, it should return false. bool GLGizmoBrimEars::gizmo_event(SLAGizmoEventType action, const Vec2d &mouse_position, bool shift_down, bool alt_down, bool control_down) { - if (action != SLAGizmoEventType::MouseWheelDown || action != SLAGizmoEventType::MouseWheelUp || action != SLAGizmoEventType::Moving) { + if (action != SLAGizmoEventType::MouseWheelDown && action != SLAGizmoEventType::MouseWheelUp && action != SLAGizmoEventType::Moving) { apply_radius_change(); } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index b5273e3024..273bb94b90 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -3596,7 +3596,7 @@ void GLGizmoCut3D::perform_cut(const Selection& selection) // model_name failing reason std::vector> failed_models; auto plater = wxGetApp().plater(); - auto fix_and_update_progress = [this, plater, keep_painting](ModelObject *model_object, const int vol_idx, const string &model_name, ProgressDialog &progress_dlg, + auto fix_and_update_progress = [keep_painting](ModelObject *model_object, const int vol_idx, const string &model_name, ProgressDialog &progress_dlg, std::vector &succes_models, std::vector> &failed_models) { wxString msg = _L("Repairing model object"); msg += ": " + from_u8(model_name) + "\n"; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index e6cbb7d0ef..109e0fe5bc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -94,7 +94,6 @@ class GLGizmoCut3D : public GLGizmoBase GLModel m_reference_radius; GLModel m_angle_arc; - Vec3d m_old_center; Vec3d m_cut_normal; struct InvalidConnectorsStatistics diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index f190e1ad97..035fb895aa 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -122,7 +122,7 @@ bool GLGizmoFdmSupports::on_init() {ctrl + _L("Mouse wheel"), _L("Gap area")} }; - memset(&m_print_instance, 0, sizeof(m_print_instance)); + m_print_instance = PrintInstance(); return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index f42d327a0e..57a6cc1981 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -86,7 +86,6 @@ private: boost::thread m_thread; // Mutex and condition variable to synchronize m_thread with the UI thread. std::mutex m_mutex; - int m_generate_count; // This map holds all translated description texts, so they can be easily referenced during layout calculations // etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect. diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index a040d96bd5..e9d8598423 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -4,7 +4,7 @@ #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" -#include "libslic3r/Geometry/ConvexHull.hpp" +#include "libslic3r/LayOnFace.hpp" #include "libslic3r/Model.hpp" #include @@ -45,10 +45,10 @@ void GLGizmoFlatten::data_changed(bool is_serializing) const ModelObject *model_object = nullptr; int instance_id = -1; if (selection.is_single_full_instance() || - selection.is_from_single_object() ) { + selection.is_from_single_object() ) { model_object = selection.get_model()->objects[selection.get_object_idx()]; instance_id = selection.get_instance_idx(); - } + } set_flattening_data(model_object, instance_id); } @@ -86,7 +86,7 @@ void GLGizmoFlatten::on_render() GLShaderProgram* shader = wxGetApp().get_shader("flat"); if (shader == nullptr) return; - + shader->start_using(); glsafe(::glClear(GL_DEPTH_BUFFER_BIT)); @@ -152,134 +152,18 @@ void GLGizmoFlatten::set_flattening_data(const ModelObject* model_object, int in void GLGizmoFlatten::update_planes() { const ModelObject* mo = m_c->selection_info()->model_object(); - TriangleMesh ch; - for (const ModelVolume* vol : mo->volumes) { - if (vol->type() != ModelVolumeType::MODEL_PART) - continue; - TriangleMesh vol_ch = vol->get_convex_hull(); - vol_ch.transform(vol->get_matrix()); - ch.merge(vol_ch); - } - ch = ch.convex_hull_3d(); + const Transform3d &inst_matrix = mo->instances.front()->get_matrix_no_offset(); + // The candidate faces are shared with the CLI --ground-* options, the rest only prepares them for rendering. + std::vector planes = lay_on_face_planes(*mo, inst_matrix); m_planes.clear(); on_unregister_raycasters_for_picking(); - const Transform3d &inst_matrix = mo->instances.front()->get_matrix_no_offset(); - // Following constants are used for discarding too small polygons. - const float minimal_area = 5.f; // in square mm (world coordinates) - const float minimal_side = 1.f; // mm - const float minimal_angle = 1.f; // degree, initial value was 10, but cause bugs + // We only keep the 254 largest planes (because of the picking pass limitations): + planes.resize(std::min((int)planes.size(), 254)); - // Now we'll go through all the facets and append Points of facets sharing the same normal. - // This part is still performed in mesh coordinate system. - const int num_of_facets = ch.facets_count(); - const std::vector face_normals = its_face_normals(ch.its); - const std::vector face_neighbors = its_face_neighbors(ch.its); - std::vector facet_queue(num_of_facets, 0); - std::vector facet_visited(num_of_facets, false); - int facet_queue_cnt = 0; - const stl_normal* normal_ptr = nullptr; - int facet_idx = 0; - while (1) { - // Find next unvisited triangle: - for (; facet_idx < num_of_facets; ++ facet_idx) - if (!facet_visited[facet_idx]) { - facet_queue[facet_queue_cnt ++] = facet_idx; - facet_visited[facet_idx] = true; - normal_ptr = &face_normals[facet_idx]; - m_planes.emplace_back(); - break; - } - if (facet_idx == num_of_facets) - break; // Everything was visited already - - while (facet_queue_cnt > 0) { - int facet_idx = facet_queue[-- facet_queue_cnt]; - const stl_normal& this_normal = face_normals[facet_idx]; - if (std::abs(this_normal(0) - (*normal_ptr)(0)) < 0.001 && std::abs(this_normal(1) - (*normal_ptr)(1)) < 0.001 && std::abs(this_normal(2) - (*normal_ptr)(2)) < 0.001) { - const Vec3i32 face = ch.its.indices[facet_idx]; - for (int j=0; j<3; ++j) - m_planes.back().vertices.emplace_back(ch.its.vertices[face[j]].cast()); - - facet_visited[facet_idx] = true; - for (int j = 0; j < 3; ++ j) - if (int neighbor_idx = face_neighbors[facet_idx][j]; neighbor_idx >= 0 && ! facet_visited[neighbor_idx]) - facet_queue[facet_queue_cnt ++] = neighbor_idx; - } - } - m_planes.back().normal = normal_ptr->cast(); - - Pointf3s& verts = m_planes.back().vertices; - // Now we'll transform all the points into world coordinates, so that the areas, angles and distances - // make real sense. - verts = transform(verts, inst_matrix); - - // if this is a just a very small triangle, remove it to speed up further calculations (it would be rejected later anyway): - if (verts.size() == 3 && - ((verts[0] - verts[1]).norm() < minimal_side - || (verts[0] - verts[2]).norm() < minimal_side - || (verts[1] - verts[2]).norm() < minimal_side)) - m_planes.pop_back(); - } - - // Let's prepare transformation of the normal vector from mesh to instance coordinates. - const Matrix3d normal_matrix = inst_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); - - // Now we'll go through all the polygons, transform the points into xy plane to process them: - for (unsigned int polygon_id=0; polygon_id < m_planes.size(); ++polygon_id) { - Pointf3s& polygon = m_planes[polygon_id].vertices; - const Vec3d& normal = m_planes[polygon_id].normal; - - // transform the normal according to the instance matrix: - const Vec3d normal_transformed = normal_matrix * normal; - - // We are going to rotate about z and y to flatten the plane - Eigen::Quaterniond q; - Transform3d m = Transform3d::Identity(); - m.matrix().block(0, 0, 3, 3) = q.setFromTwoVectors(normal_transformed, Vec3d::UnitZ()).toRotationMatrix(); - polygon = transform(polygon, m); - - // Now to remove the inner points. We'll misuse Geometry::convex_hull for that, but since - // it works in fixed point representation, we will rescale the polygon to avoid overflows. - // And yes, it is a nasty thing to do. Whoever has time is free to refactor. - Vec3d bb_size = BoundingBoxf3(polygon).size(); - float sf = std::min(1./bb_size(0), 1./bb_size(1)); - Transform3d tr = Geometry::scale_transform({ sf, sf, 1.f }); - polygon = transform(polygon, tr); - polygon = Slic3r::Geometry::convex_hull(polygon); - polygon = transform(polygon, tr.inverse()); - - // Calculate area of the polygons and discard ones that are too small - float& area = m_planes[polygon_id].area; - area = 0.f; - for (unsigned int i = 0; i < polygon.size(); i++) // Shoelace formula - area += polygon[i](0)*polygon[i + 1 < polygon.size() ? i + 1 : 0](1) - polygon[i + 1 < polygon.size() ? i + 1 : 0](0)*polygon[i](1); - area = 0.5f * std::abs(area); - - bool discard = false; - if (area < minimal_area) - discard = true; - else { - // We also check the inner angles and discard polygons with angles smaller than the following threshold - const double angle_threshold = ::cos(minimal_angle * (double)PI / 180.0); - - for (unsigned int i = 0; i < polygon.size(); ++i) { - const Vec3d& prec = polygon[(i == 0) ? polygon.size() - 1 : i - 1]; - const Vec3d& curr = polygon[i]; - const Vec3d& next = polygon[(i == polygon.size() - 1) ? 0 : i + 1]; - - if ((prec - curr).normalized().dot((next - curr).normalized()) > angle_threshold) { - discard = true; - break; - } - } - } - - if (discard) { - m_planes[polygon_id--] = std::move(m_planes.back()); - m_planes.pop_back(); - continue; - } + for (LayOnFacePlane& plane : planes) { + // The outline is convex and lies in the plane frame, where the plane is horizontal. + Pointf3s& polygon = plane.outline; // We will shrink the polygon a little bit so it does not touch the object edges: Vec3d centroid = std::accumulate(polygon.begin(), polygon.end(), Vec3d(0.0, 0.0, 0.0)); @@ -332,13 +216,12 @@ void GLGizmoFlatten::update_planes() b(2) += 0.1f; // Transform back to 3D (and also back to mesh coordinates) - polygon = transform(polygon, inst_matrix.inverse() * m.inverse()); + m_planes.emplace_back(); + m_planes.back().normal = plane.normal; + m_planes.back().area = plane.area; + m_planes.back().vertices = transform(polygon, inst_matrix.inverse() * plane.to_plane_frame.inverse()); } - // We'll sort the planes by area and only keep the 254 largest ones (because of the picking pass limitations): - std::sort(m_planes.rbegin(), m_planes.rend(), [](const PlaneData& a, const PlaneData& b) { return a.area < b.area; }); - m_planes.resize(std::min((int)m_planes.size(), 254)); - // Planes are finished - let's save what we calculated it from: m_volumes_matrices.clear(); m_volumes_types.clear(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp index 6689fcdcea..d807e466c8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp @@ -4,6 +4,7 @@ #include "libslic3r/Print.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index e21498163a..6f7d6fed58 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -1,4 +1,5 @@ #include "GLGizmoMeasure.hpp" +#include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/Plater.hpp" diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index c7186e5d80..8b12da14f9 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -223,7 +223,7 @@ void GLGizmoMeshBoolean::on_render_input_window(float x, float y, float bottom_l const int select_btn_length = 2 * ImGui::GetStyle().FramePadding.x + std::max(ImGui::CalcTextSize(("1 " + _u8L("selected")).c_str()).x, ImGui::CalcTextSize(_u8L("Select").c_str()).x); - auto selectable = [this](const std::string& label, bool selected, const ImVec2& size_arg) { + auto selectable = [](const std::string& label, bool selected, const ImVec2& size_arg) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 0,0 }); ImGuiWindow* window = ImGui::GetCurrentWindow(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index 8f0cd9a43d..3dcf51cbb5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -1456,7 +1456,7 @@ void TriangleSelectorPatch::update_triangles_per_patch() return touching_triangles; }; - auto calc_fragment_area = [this](const TrianglePatch& patch, float max_limit_area, int stride) { + auto calc_fragment_area = [](const TrianglePatch& patch, float max_limit_area, int stride) { double total_area = 0.f; const std::vector& ti = patch.triangle_indices; /*for (int i = 0; i < ti.size() / 3; i++) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.cpp new file mode 100644 index 0000000000..4e1a197a39 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.cpp @@ -0,0 +1,186 @@ +#include "GLGizmoPrimitive.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "slic3r/GUI/GUI_ObjectList.hpp" +#include "slic3r/GUI/NotificationManager.hpp" +#include "libslic3r/Model.hpp" + +#ifndef IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_MATH_OPERATORS +#endif +#include + +namespace Slic3r { +namespace GUI { + +GLGizmoPrimitive::GLGizmoPrimitive(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoBase(parent, icon_filename, sprite_id) {} + +bool GLGizmoPrimitive::on_init() { return true; } +std::string GLGizmoPrimitive::on_get_name() const { return _u8L("Primitive"); } +bool GLGizmoPrimitive::on_is_activable() const { return true; } +void GLGizmoPrimitive::on_render() {} +void GLGizmoPrimitive::on_set_state() +{ if (m_state == EState::On) { m_params = PrimitiveParams{}; m_preview_dirty = true; } } + +bool GLGizmoPrimitive::on_mouse(const wxMouseEvent&) { return false; } + +CommonGizmosDataID GLGizmoPrimitive::on_get_requirements() const +{ return CommonGizmosDataID(int(CommonGizmosDataID::SelectionInfo) | int(CommonGizmosDataID::InstancesHider)); } + +void GLGizmoPrimitive::on_load(cereal::BinaryInputArchive& ar) +{ ar(m_params); m_preview_dirty = true; } +void GLGizmoPrimitive::on_save(cereal::BinaryOutputArchive& ar) const +{ ar(m_params); } + +void GLGizmoPrimitive::apply_preset(const char*, double w, double h, double d) +{ + m_params.type = PrimitiveType::Box; + m_params.box_w = w; m_params.box_h = h; m_params.box_d = d; + m_preview_dirty = true; +} + +static void gen_mesh_and_add(PrimitiveParams& p, const char* snap_name) +{ + TopoDS_Solid solid = GeometryEngine::make_primitive(p); + TopoDS_Shape shape = solid; + if (p.dressup_enabled) { + if (p.dressup_type == DressUpType::Fillet) + shape = GeometryEngine::apply_fillet(shape, p.dressup_radius, p.dressup_faces); + else + shape = GeometryEngine::apply_chamfer(shape, p.dressup_chamfer_dist, p.dressup_faces); + } + TriangleMesh mesh = GeometryEngine::tessellate(shape, p.linear_deflection, p.angular_deflection); + if (mesh.its.indices.empty()) { + wxGetApp().notification_manager()->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::WarningNotificationLevel, _u8L("Empty mesh generated")); + return; + } + wxGetApp().plater()->take_snapshot(snap_name); + ModelObject* mo = wxGetApp().model().add_object(); + std::string name = GeometryEngine::primitive_name(p.type); + if (p.dressup_enabled && p.dressup_type == DressUpType::Fillet) name += " (Fillet)"; + else if (p.dressup_enabled) name += " (Chamfer)"; + mo->name = name; + mo->add_volume(std::move(mesh))->set_new_unique_id(); + mo->ensure_on_bed(); + wxGetApp().plater()->update(); +} + +void GLGizmoPrimitive::apply_primitive() { gen_mesh_and_add(m_params, "Add Primitive"); } + +void GLGizmoPrimitive::on_render_input_window(float x, float y, float bottom_limit) +{ + y = std::min(y, bottom_limit - ImGui::GetWindowHeight()); + const float scale = m_parent.get_scale(); + ImGuiWrapper::push_toolbar_style(scale); + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); + GizmoImguiBegin("Primitive", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove + | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse + | ImGuiWindowFlags_NoTitleBar); + + if (ImGui::CollapsingHeader("Shape", ImGuiTreeNodeFlags_DefaultOpen)) { + static const char* names[] = {"Box", "Cylinder", "Sphere", "Cone", "Torus"}; + int cur = (int)m_params.type; + if (ImGui::Combo("##type", &cur, names, (int)PrimitiveType::COUNT)) { + m_params.type = (PrimitiveType)cur; + m_preview_dirty = true; + } + ImGui::Text("Quick:"); + ImGui::SameLine(); + if (ImGui::SmallButton("10mm")) apply_preset("10mm cube", 10, 10, 10); + ImGui::SameLine(); + if (ImGui::SmallButton("20mm")) apply_preset("20mm cube", 20, 20, 20); + ImGui::SameLine(); + if (ImGui::SmallButton("50mm")) apply_preset("50mm cube", 50, 50, 50); + } + + ImGui::Separator(); + + if (ImGui::CollapsingHeader("Dimensions", ImGuiTreeNodeFlags_DefaultOpen)) { + auto dim = [&](const char* label, double& val, double step=0.5, double fast=5.0) { + ImGui::SetNextItemWidth(130); + if (ImGui::InputDouble(label, &val, step, fast, "%.1f mm")) m_preview_dirty = true; + if (val < 0.5) val = 0.5; + }; + switch (m_params.type) { + case PrimitiveType::Box: + dim("Width (X)", m_params.box_w); + dim("Depth (Y)", m_params.box_d); + dim("Height (Z)", m_params.box_h); + break; + case PrimitiveType::Cylinder: + dim("Radius", m_params.cyl_radius); + dim("Height", m_params.cyl_height); + break; + case PrimitiveType::Sphere: + dim("Radius", m_params.sph_radius); + break; + case PrimitiveType::Cone: + dim("Bottom R", m_params.cone_r1); + dim("Top R", m_params.cone_r2); + dim("Height", m_params.cone_height); + break; + case PrimitiveType::Torus: + dim("Major R", m_params.torus_r1); + dim("Minor R", m_params.torus_r2, 0.1, 1.0); + break; + default: break; + } + } + + ImGui::Separator(); + + if (ImGui::CollapsingHeader("Fillet / Chamfer")) { + ImGui::Checkbox("Enable", &m_params.dressup_enabled); + if (m_params.dressup_enabled) { + static const char* dn[] = {"Fillet", "Chamfer"}; + int du = (int)m_params.dressup_type; + ImGui::SetNextItemWidth(100); + if (ImGui::Combo("##dtype", &du, dn, 2)) { m_params.dressup_type = (DressUpType)du; m_preview_dirty = true; } + static const char* fn[] = {"All edges", "Top edges", "Bottom edges", "Lateral edges"}; + int fg = (int)m_params.dressup_faces; + ImGui::SetNextItemWidth(140); + if (ImGui::Combo("Edges", &fg, fn, 4)) { m_params.dressup_faces = (FaceGroup)fg; m_preview_dirty = true; } + if (m_params.dressup_type == DressUpType::Fillet) { + ImGui::SetNextItemWidth(100); + if (ImGui::InputDouble("Radius", &m_params.dressup_radius, 0.1, 1.0, "%.1f mm")) { + if (m_params.dressup_radius < 0.1) m_params.dressup_radius = 0.1; + m_preview_dirty = true; + } + } else { + ImGui::SetNextItemWidth(100); + if (ImGui::InputDouble("Distance", &m_params.dressup_chamfer_dist, 0.1, 1.0, "%.1f mm")) { + if (m_params.dressup_chamfer_dist < 0.1) m_params.dressup_chamfer_dist = 0.1; + m_preview_dirty = true; + } + } + } + } + + ImGui::Separator(); + + if (ImGui::CollapsingHeader("Quality")) { + ImGui::SetNextItemWidth(130); + if (ImGui::InputDouble("Mesh resolution", &m_params.linear_deflection, 0.001, 0.1, "%.3f mm")) { + if (m_params.linear_deflection < 0.001) m_params.linear_deflection = 0.001; + if (m_params.linear_deflection > 1.0) m_params.linear_deflection = 1.0; + m_preview_dirty = true; + } + } + + ImGui::Separator(); + + if (ImGui::Button("Add Shape", {-1, 28})) + apply_primitive(); + + if (ImGui::Button("Close", {-1, 0})) + m_parent.reset_all_gizmos(); + + GizmoImguiEnd(); + ImGuiWrapper::pop_toolbar_style(); +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.hpp new file mode 100644 index 0000000000..f78289a58d --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoPrimitive.hpp @@ -0,0 +1,43 @@ +#ifndef slic3r_GLGizmoPrimitive_hpp_ +#define slic3r_GLGizmoPrimitive_hpp_ + +#include "GLGizmoBase.hpp" +#include "GLGizmosCommon.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" + +namespace Slic3r { +namespace GUI { + +class GLGizmoPrimitive : public GLGizmoBase +{ +public: + GLGizmoPrimitive(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); + ~GLGizmoPrimitive() = default; + + bool on_mouse(const wxMouseEvent& mouse_event) override; + +protected: + bool on_init() override; + std::string on_get_name() const override; + bool on_is_activable() const override; + void on_render() override; + void on_set_state() override; + CommonGizmosDataID on_get_requirements() const override; + void on_render_input_window(float x, float y, float bottom_limit) override; + + void on_load(cereal::BinaryInputArchive& ar) override; + void on_save(cereal::BinaryOutputArchive& ar) const override; + +private: + void apply_primitive(); + void apply_preset(const char* name, double w, double h, double d); + + PrimitiveParams m_params; + TriangleMesh m_preview_mesh; + bool m_preview_dirty{true}; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GLGizmoPrimitive_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index f4fa1fbbb9..6a08d5eff4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -343,12 +343,12 @@ void GLGizmoSimplify::on_render_input_window(float x, float y, float bottom_limi ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing,ImVec2(10,20)); if (is_worker_running) { // apply or preview // draw progress bar - std::string progress_text = GUI::format("%1%", std::to_string(progress)) + "%%"; + std::string progress_text = GUI::format("%1%", std::to_string(progress)) + "%"; ImVec2 progress_size(bottom_left_width - space_size, 0.0f); ImGui::BBLProgressBar2(progress / 100., progress_size); ImGui::SameLine(); ImGui::AlignTextToFramePadding(); - ImGui::TextColored(ImVec4(0.42f, 0.42f, 0.42f, 1.00f), progress_text.c_str()); + ImGui::TextColored(ImVec4(0.42f, 0.42f, 0.42f, 1.00f), "%s", progress_text.c_str()); ImGui::SameLine(bottom_left_width + slider_width + m_imgui->scaled(1.0f)); } else { ImGui::Dummy(ImVec2(bottom_left_width - space_size, -1)); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp new file mode 100644 index 0000000000..195ceba713 --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoSketch.cpp @@ -0,0 +1,458 @@ +#include "GLGizmoSketch.hpp" +#include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/ImGuiWrapper.hpp" +#include "slic3r/GUI/GUI.hpp" +#include "slic3r/GUI/Plater.hpp" +#include "slic3r/GUI/GUI_ObjectList.hpp" +#include "slic3r/GUI/NotificationManager.hpp" +#include "libslic3r/Model.hpp" +#include +#include +#include + +#ifndef IMGUI_DEFINE_MATH_OPERATORS +#define IMGUI_DEFINE_MATH_OPERATORS +#endif +#include + +#define UL(s) Slic3r::GUI::I18N::translate_utf8((s)).c_str() + +namespace Slic3r { +namespace GUI { + +GLGizmoSketch::GLGizmoSketch(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) + : GLGizmoBase(parent, icon_filename, sprite_id) {} + +bool GLGizmoSketch::on_init() { return true; } +std::string GLGizmoSketch::on_get_name() const { return _u8L("Sketch"); } +bool GLGizmoSketch::on_is_activable() const { return true; } +void GLGizmoSketch::on_render() {} +void GLGizmoSketch::on_set_state() { if (m_state == EState::On) clear_all(); } +bool GLGizmoSketch::on_mouse(const wxMouseEvent&) { return false; } + +CommonGizmosDataID GLGizmoSketch::on_get_requirements() const +{ return CommonGizmosDataID(int(CommonGizmosDataID::SelectionInfo)); } + +void GLGizmoSketch::on_load(cereal::BinaryInputArchive& ar) +{ + ar(m_tool, m_profiles, m_plane, m_sp, m_rect_w, m_rect_h, m_circle_r, m_poly_sides, m_poly_r, m_snap_grid, m_grid_step); + m_active_profile = -1; +} + +void GLGizmoSketch::on_save(cereal::BinaryOutputArchive& ar) const +{ + ar(m_tool, m_profiles, m_plane, m_sp, m_rect_w, m_rect_h, m_circle_r, m_poly_sides, m_poly_r, m_snap_grid, m_grid_step); +} + +SketchProfile& GLGizmoSketch::active_profile() +{ + if (m_active_profile < 0 || m_active_profile >= (int)m_profiles.size()) { + m_profiles.emplace_back(); + m_active_profile = (int)m_profiles.size() - 1; + } + return m_profiles[m_active_profile]; +} + +bool GLGizmoSketch::has_closed_profile() const +{ + for (auto& p : m_profiles) if (p.closed && p.points.size() >= 3) return true; + return false; +} + +void GLGizmoSketch::clear_all() +{ + m_profiles.clear(); + m_canvas_points.clear(); + m_active_profile = -1; +} + +void GLGizmoSketch::add_closed_profile() +{ + auto& ap = active_profile(); + if (ap.points.size() >= 3) { + ap.closed = true; + m_active_profile = -1; + } +} + +void GLGizmoSketch::delete_profile(int idx) +{ + if (idx >= 0 && idx < (int)m_profiles.size()) { + m_profiles.erase(m_profiles.begin() + idx); + if (m_active_profile >= (int)m_profiles.size()) m_active_profile = -1; + } +} + +Vec2d GLGizmoSketch::snap(Vec2d pt) const +{ + if (!m_snap_grid) return pt; + double gs = m_grid_step; + return {round(pt.x() / gs) * gs, round(pt.y() / gs) * gs}; +} + +void GLGizmoSketch::build_preset_profile() +{ + auto& ap = active_profile(); + ap.clear(); + auto add = [&](double x, double y) { ap.points.emplace_back(x, y); }; + switch (m_tool) { + case SketchTool::Rectangle: + add(-m_rect_w/2, -m_rect_h/2); add( m_rect_w/2, -m_rect_h/2); + add( m_rect_w/2, m_rect_h/2); add(-m_rect_w/2, m_rect_h/2); + ap.closed = true; m_active_profile = -1; break; + case SketchTool::Circle: + for (int i = 0; i <= m_circle_seg; ++i) { + double a = 2.0*M_PI*i/m_circle_seg; + add(cos(a)*m_circle_r, sin(a)*m_circle_r); + } + ap.closed = true; m_active_profile = -1; break; + case SketchTool::Polygon: + for (int i = 0; i < m_poly_sides; ++i) { + double a = 2.0*M_PI*i/m_poly_sides - M_PI/2; + add(cos(a)*m_poly_r, sin(a)*m_poly_r); + } + ap.closed = true; m_active_profile = -1; break; + default: break; + } +} + +void GLGizmoSketch::handle_canvas_click(ImVec2 pos) +{ + Vec2d pt = snap({pos.x / m_canvas_scale, -pos.y / m_canvas_scale}); + if (m_tool == SketchTool::Line) { + auto& ap = active_profile(); + if (ap.points.size() >= 3 && (pt - ap.points.front()).norm() < m_grid_step) { + ap.points.push_back(ap.points.front()); + ap.closed = true; + m_active_profile = -1; + return; + } + ap.points.push_back(pt); + } +} + +void GLGizmoSketch::draw_canvas() +{ + ImDrawList* dl = ImGui::GetWindowDrawList(); + ImVec2 pos = ImGui::GetCursorScreenPos(); + float w = 280, h = 200; + ImVec2 end(pos.x+w, pos.y+h); + float cx = pos.x+w/2, cy = pos.y+h/2; + auto tc = [&](const ImVec2& p) { return ImVec2(cx+p.x*m_canvas_scale, cy-p.y*m_canvas_scale); }; + + dl->AddRectFilled(pos, end, IM_COL32(28,28,36,255)); + dl->AddRect(pos, end, IM_COL32(55,55,68,255)); + + float gs = m_grid_step; + for (float g = 0; g < w; g += gs * m_canvas_scale) { + ImU32 gc = (int(g/(gs*m_canvas_scale)) % 5 == 0) ? IM_COL32(60,60,75,100) : IM_COL32(45,45,55,60); + dl->AddLine({pos.x+g,pos.y}, {pos.x+g,end.y}, gc); + } + for (float g = 0; g < h; g += gs * m_canvas_scale) { + ImU32 gc = (int(g/(gs*m_canvas_scale)) % 5 == 0) ? IM_COL32(60,60,75,100) : IM_COL32(45,45,55,60); + dl->AddLine({pos.x,pos.y+g}, {end.x,pos.y+g}, gc); + } + + dl->AddLine({cx,pos.y},{cx,end.y}, IM_COL32(70,70,85,180), 1.5f); + dl->AddLine({pos.x,cy},{end.x,cy}, IM_COL32(70,70,85,180), 1.5f); + dl->AddText({end.x-12, cy+2}, IM_COL32(120,120,140,200), "X"); + dl->AddText({cx+4, pos.y+2}, IM_COL32(120,120,140,200), "Y"); + + for (size_t pi = 0; pi < m_profiles.size(); ++pi) { + auto& prof = m_profiles[pi]; + if (prof.points.size() < 2) continue; + std::vector sp; + for (auto& p : prof.points) sp.push_back(tc({(float)p.x(), (float)p.y()})); + if (prof.closed && sp.size() >= 3) { + bool is_outer = (pi == 0); + ImU32 fill = is_outer ? IM_COL32(0,180,90,35) : IM_COL32(180,60,60,35); + ImU32 line = is_outer ? IM_COL32(0,220,100,255) : IM_COL32(220,80,80,255); + dl->AddConvexPolyFilled(sp.data(), (int)sp.size(), fill); + for (size_t i=0; iAddLine(sp[i], sp[(i+1)%sp.size()], line, (pi==0)?2.5f:2.0f); + for (size_t i=0; iAddCircleFilled(sp[i], 3.0f, IM_COL32(255,255,255,255)); + } + } + + auto& ap = active_profile(); + if (!ap.closed && ap.points.size() >= 1) { + std::vector sp; + for (auto& p : ap.points) sp.push_back(tc({(float)p.x(), (float)p.y()})); + for (size_t i=1; iAddLine(sp[i-1], sp[i], IM_COL32(0,200,255,200), 2.0f); + for (auto& s : sp) dl->AddCircleFilled(s, 3.5f, IM_COL32(100,200,255,255)); + ImVec2 mouse = ImGui::GetMousePos(); + if (mouse.x > pos.x && mouse.x < end.x && mouse.y > pos.y && mouse.y < end.y) + dl->AddLine(sp.back(), mouse, IM_COL32(100,160,220,120), 1.5f); + } + + ImGui::InvisibleButton("canvas", ImVec2(w,h)); + if (ImGui::IsItemHovered()) { + ImVec2 m = ImGui::GetMousePos(); + Vec2d sk({(m.x-cx)/m_canvas_scale, -(m.y-cy)/m_canvas_scale}); + if (m_snap_grid) sk = snap(sk); + auto txt = wxString::Format("X:%.1f Y:%.1f", sk.x(), sk.y()).ToStdString(); + dl->AddText({pos.x+4, end.y-16}, IM_COL32(160,160,180,200), txt.c_str()); + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) + handle_canvas_click({(m.x-cx)/m_canvas_scale, -(m.y-cy)/m_canvas_scale}); + if (ImGui::IsMouseClicked(ImGuiMouseButton_Right)) { + auto& ap2 = active_profile(); + if (ap2.points.size() >= 3) { + ap2.points.push_back(ap2.points.front()); + ap2.closed = true; + m_active_profile = -1; + } + } + } +} + +TopoDS_Shape GLGizmoSketch::build_combined_shape() +{ + if (m_profiles.empty() || !m_profiles[0].closed) + throw std::runtime_error("No outer profile"); + + TopoDS_Wire outer_wire = m_profiles[0].to_occt_wire(m_plane); + BRepBuilderAPI_MakeFace face_maker(outer_wire); + if (!face_maker.IsDone()) throw std::runtime_error("Failed to make outer face"); + + for (size_t i = 1; i < m_profiles.size(); ++i) { + if (!m_profiles[i].closed) continue; + TopoDS_Wire inner = m_profiles[i].to_occt_wire(m_plane); + face_maker.Add(inner); + } + face_maker.Build(); + if (!face_maker.IsDone()) throw std::runtime_error("Failed to build face with holes"); + + TopoDS_Face face = face_maker.Face(); + + TopoDS_Shape shape; + if (m_sp.revolve_deg < 360.0 && m_sp.revolve_deg > 0.0) { + gp_Pnt o(m_plane.origin.x(), m_plane.origin.y(), m_plane.origin.z()); + gp_Dir xd(m_plane.x_axis.x(), m_plane.x_axis.y(), m_plane.x_axis.z()); + gp_Ax1 axis(o, xd); + BRepPrimAPI_MakeRevol rev(face, axis, m_sp.revolve_deg * M_PI / 180.0); + if (!rev.IsDone()) throw std::runtime_error("Revolve failed"); + shape = rev.Shape(); + } else { + shape = SketchEngine::make_extrude_face(face, m_plane, m_sp.extrude_len, m_sp.extrude_sym); + } + + if (m_sp.dressup_enabled) { + if (m_sp.dressup_type == DressUpType::Fillet) + shape = GeometryEngine::apply_fillet(shape, m_sp.dressup_radius, m_sp.dressup_faces); + else + shape = GeometryEngine::apply_chamfer(shape, m_sp.dressup_chamfer_dist, m_sp.dressup_faces); + } + return shape; +} + +void GLGizmoSketch::on_render_input_window(float x, float y, float bottom_limit) +{ + y = std::min(y, bottom_limit - ImGui::GetWindowHeight()); + const float scale = m_parent.get_scale(); + ImGuiWrapper::push_toolbar_style(scale); + GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always, 0.0f, 0.0f); + GizmoImguiBegin("Sketch", ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove + | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse + | ImGuiWindowFlags_NoTitleBar); + + if (ImGui::CollapsingHeader(UL("Profile"), ImGuiTreeNodeFlags_DefaultOpen)) { + static const char* names[] = {"Line", "Rectangle", "Circle", "Polygon"}; + int cur = (int)m_tool; + if (ImGui::Combo("##shape", &cur, names, (int)SketchTool::COUNT)) { + m_tool = (SketchTool)cur; + if (m_tool != SketchTool::Line) build_preset_profile(); + } + ImGui::SameLine(); + if (m_imgui->button("+##newprofile")) m_active_profile = -1; + if (ImGui::IsItemHovered()) ImGui::SetTooltip("%s", UL("Start new profile (for holes)")); + + if (m_tool == SketchTool::Rectangle) { + ImGui::SetNextItemWidth(80); if (ImGui::InputDouble("W", &m_rect_w,1,10,"%.0f")) build_preset_profile(); + ImGui::SameLine(); + ImGui::SetNextItemWidth(80); if (ImGui::InputDouble("H", &m_rect_h,1,10,"%.0f")) build_preset_profile(); + } else if (m_tool == SketchTool::Circle) { + ImGui::SetNextItemWidth(80); if (ImGui::InputDouble("R", &m_circle_r,1,5,"%.0f")) build_preset_profile(); + ImGui::SameLine(); + ImGui::SetNextItemWidth(80); if (ImGui::SliderInt("Seg", &m_circle_seg,8,64)) build_preset_profile(); + } else if (m_tool == SketchTool::Polygon) { + ImGui::SetNextItemWidth(80); if (ImGui::SliderInt("Sides", &m_poly_sides,3,12)) build_preset_profile(); + ImGui::SameLine(); + ImGui::SetNextItemWidth(80); if (ImGui::InputDouble("R", &m_poly_r,1,5,"%.0f")) build_preset_profile(); + } else { + ImGui::Text("%s", UL("Click on canvas to draw")); + } + + ImGui::Checkbox(UL("Snap to grid"), &m_snap_grid); + ImGui::SameLine(); + ImGui::SetNextItemWidth(80); ImGui::InputFloat("Step", &m_grid_step, 1, 5, "%.0f mm"); + + draw_canvas(); + + if (!m_profiles.empty()) { + ImGui::Text("%s: %zu", UL("Profiles"), m_profiles.size()); + for (int i = 0; i < (int)m_profiles.size(); ++i) { + auto& p = m_profiles[i]; + ImGui::PushID(i); + bool outer = (i == 0); + ImVec4 col = outer ? ImVec4(0,1,0,1) : ImVec4(1,0.3f,0.3f,1); + const char* label = outer ? "Outer" : "Hole"; + ImGui::TextColored(col, "%s %d: %zu pts %s", label, i+1, p.points.size(), p.closed ? "CLOSED" : ""); + ImGui::SameLine(); + if (ImGui::SmallButton("X")) delete_profile(i); + ImGui::PopID(); + } + } + } + + ImGui::Separator(); + + bool is_revolve = false; + bool has_sel = false; + + if (ImGui::CollapsingHeader(UL("Operation"), ImGuiTreeNodeFlags_DefaultOpen)) { + static int pi = 0; + if (ImGui::Combo(UL("Plane"), &pi, "XY (Top)\0XZ (Front)\0YZ (Side)\0")) + m_plane = (pi==0) ? SketchPlane::XY() : (pi==1) ? SketchPlane::XZ() : SketchPlane::YZ(); + + is_revolve = (m_sp.revolve_deg > 0 && m_sp.revolve_deg < 360); + ImGui::SetNextItemWidth(100); + if (ImGui::InputDouble(UL("Revolve deg"), &m_sp.revolve_deg, 15, 90, "%.0f")) { + if (m_sp.revolve_deg > 360) m_sp.revolve_deg = 360; + if (m_sp.revolve_deg < 0) m_sp.revolve_deg = 0; + } + if (ImGui::IsItemHovered()) ImGui::SetTooltip("%s", UL("Set to 0 for extrude, >0 for revolve")); + + if (!is_revolve) { + ImGui::SetNextItemWidth(100); + ImGui::InputDouble(UL("Length"), &m_sp.extrude_len, 0.5, 5, "%.1f mm"); + ImGui::SameLine(); + ImGui::Checkbox(UL("Symmetric"), &m_sp.extrude_sym); + } + + has_sel = !m_parent.get_selection().is_empty(); + if (has_sel) { + if (ImGui::Checkbox(UL("Pocket (cut)"), &m_sp.is_pocket)) + if (m_sp.is_pocket) m_sp.dressup_enabled = false; + } else m_sp.is_pocket = false; + } + + ImGui::Separator(); + + if (!m_sp.is_pocket && ImGui::CollapsingHeader(UL("Fillet / Chamfer"))) { + ImGui::Checkbox(UL("Enable"), &m_sp.dressup_enabled); + if (m_sp.dressup_enabled) { + static const char* dn[] = {"Fillet", "Chamfer"}; + int du = (int)m_sp.dressup_type; + ImGui::SetNextItemWidth(100); + if (ImGui::Combo("##dtype", &du, dn, 2)) m_sp.dressup_type = (DressUpType)du; + static const char* fn[] = {"All edges", "Top edges", "Bottom edges", "Lateral edges"}; + int fg = (int)m_sp.dressup_faces; + ImGui::SetNextItemWidth(140); + ImGui::Combo(UL("Edges"), &fg, fn, 4); m_sp.dressup_faces = (FaceGroup)fg; + ImGui::SetNextItemWidth(100); + if (m_sp.dressup_type == DressUpType::Fillet) + ImGui::InputDouble(UL("Radius"), &m_sp.dressup_radius, 0.1, 1, "%.1f mm"); + else + ImGui::InputDouble(UL("Distance"), &m_sp.dressup_chamfer_dist, 0.1, 1, "%.1f mm"); + } + } + + ImGui::Separator(); + + bool ok = has_closed_profile(); + if (ok) ImGui::TextColored({0,1,0,1}, "%zu %s", m_profiles.size(), UL("closed profile(s)")); + else ImGui::TextColored({0.6f,0.6f,0.6f,1}, "%s", UL("Draw a closed profile to enable")); + + auto btn = [&](const char* label, bool enabled) { + if (!enabled) { ImGui::PushItemFlag(ImGuiItemFlags_Disabled,true); ImGui::PushStyleColor(ImGuiCol_Button,{0.25f,0.25f,0.25f,1}); } + bool clicked = ImGui::Button(label, {-1,0}); + if (!enabled) { ImGui::PopStyleColor(); ImGui::PopItemFlag(); } + return clicked && enabled; + }; + + if (m_sp.is_pocket && has_sel) { + if (btn(_u8L("Pocket (Cut)").c_str(), ok)) apply_pocket(); + } else if (is_revolve) { + if (btn(_u8L("Revolve").c_str(), ok)) apply_revolve(); + } else { + if (btn(_u8L("Extrude").c_str(), ok)) apply_extrude(); + } + + if (ImGui::Button(_u8L("Clear All").c_str(), {-1,0})) clear_all(); + if (ImGui::Button(_u8L("Close").c_str(), {-1,0})) m_parent.reset_all_gizmos(); + + GizmoImguiEnd(); + ImGuiWrapper::pop_toolbar_style(); +} + +void GLGizmoSketch::apply_extrude() +{ + try { + TopoDS_Shape shape = build_combined_shape(); + TriangleMesh mesh = SketchEngine::tessellate(shape, m_sp.linear_deflection); + if (mesh.its.indices.empty()) throw std::runtime_error("Empty result"); + wxGetApp().plater()->take_snapshot("Sketch Extrude"); + ModelObject* mo = wxGetApp().model().add_object(); + mo->name = "Extrusion"; + mo->add_volume(std::move(mesh))->set_new_unique_id(); + mo->ensure_on_bed(); + wxGetApp().plater()->update(); + clear_all(); + } catch (const std::exception& e) { + wxGetApp().notification_manager()->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::ErrorNotificationLevel, std::string("Extrude: ")+e.what()); + } +} + +void GLGizmoSketch::apply_revolve() +{ + try { + TopoDS_Shape shape = build_combined_shape(); + TriangleMesh mesh = SketchEngine::tessellate(shape, m_sp.linear_deflection); + if (mesh.its.indices.empty()) throw std::runtime_error("Empty result"); + wxGetApp().plater()->take_snapshot("Sketch Revolve"); + ModelObject* mo = wxGetApp().model().add_object(); + mo->name = "Revolve"; + mo->add_volume(std::move(mesh))->set_new_unique_id(); + mo->ensure_on_bed(); + wxGetApp().plater()->update(); + clear_all(); + } catch (const std::exception& e) { + wxGetApp().notification_manager()->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::ErrorNotificationLevel, std::string("Revolve: ")+e.what()); + } +} + +void GLGizmoSketch::apply_pocket() +{ + try { + Selection& sel = m_parent.get_selection(); + int obj_idx = sel.get_object_idx(); + if (obj_idx < 0) throw std::runtime_error("No object selected"); + ModelObject* mo = wxGetApp().model().objects[obj_idx]; + + TopoDS_Wire outer = m_profiles[0].to_occt_wire(m_plane); + BRepBuilderAPI_MakeFace fm(outer); + if (!fm.IsDone()) throw std::runtime_error("Face failed"); + for (size_t i = 1; i < m_profiles.size(); ++i) + if (m_profiles[i].closed) fm.Add(m_profiles[i].to_occt_wire(m_plane)); + fm.Build(); + if (!fm.IsDone()) throw std::runtime_error("Face with holes failed"); + + TopoDS_Shape tool = SketchEngine::make_extrude_face(fm.Face(), m_plane, m_sp.extrude_len + 5.0, false); + TriangleMesh tool_mesh = SketchEngine::tessellate(tool, m_sp.linear_deflection); + if (tool_mesh.its.indices.empty()) throw std::runtime_error("Tool mesh empty"); + + wxGetApp().plater()->take_snapshot("Sketch Pocket"); + mo->add_volume(std::move(tool_mesh), ModelVolumeType::NEGATIVE_VOLUME)->set_new_unique_id(); + mo->ensure_on_bed(); + wxGetApp().plater()->update(); + clear_all(); + wxGetApp().notification_manager()->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::RegularNotificationLevel, UL("Pocket added (negative volume)")); + } catch (const std::exception& e) { + wxGetApp().notification_manager()->push_notification(NotificationType::CustomNotification, NotificationManager::NotificationLevel::ErrorNotificationLevel, std::string("Pocket: ")+e.what()); + } +} + +} // namespace GUI +} // namespace Slic3r diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSketch.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSketch.hpp new file mode 100644 index 0000000000..5a4b59edfd --- /dev/null +++ b/src/slic3r/GUI/Gizmos/GLGizmoSketch.hpp @@ -0,0 +1,74 @@ +#ifndef slic3r_GLGizmoSketch_hpp_ +#define slic3r_GLGizmoSketch_hpp_ + +#include "GLGizmoBase.hpp" +#include "GLGizmosCommon.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include + +namespace Slic3r { +namespace GUI { + +enum class SketchTool { Line, Rectangle, Circle, Polygon, COUNT }; + +class GLGizmoSketch : public GLGizmoBase +{ +public: + GLGizmoSketch(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); + + bool on_mouse(const wxMouseEvent& mouse_event) override; + +protected: + bool on_init() override; + std::string on_get_name() const override; + bool on_is_activable() const override; + void on_render() override; + void on_set_state() override; + CommonGizmosDataID on_get_requirements() const override; + void on_render_input_window(float x, float y, float bottom_limit) override; + + void on_load(cereal::BinaryInputArchive& ar) override; + void on_save(cereal::BinaryOutputArchive& ar) const override; + +private: + SketchTool m_tool{SketchTool::Line}; + std::vector m_profiles; // multiple profiles (outer + holes) + SketchPlane m_plane{SketchPlane::XY()}; + SketchParams m_sp; + + // Shape presets + double m_rect_w{20}, m_rect_h{15}; + double m_circle_r{10}; int m_circle_seg{32}; + int m_poly_sides{6}; double m_poly_r{10}; + + // Canvas + std::vector m_canvas_points; + Vec2d m_canvas_center{0,0}; + float m_canvas_scale{5.0f}; + bool m_snap_grid{true}; + float m_grid_step{5.0f}; + + // Current profile being drawn + int m_active_profile{-1}; + + SketchProfile& active_profile(); + bool has_closed_profile() const; + + void build_preset_profile(); + void add_closed_profile(); + void delete_profile(int idx); + void clear_all(); + + TopoDS_Shape build_combined_shape(); // all profiles as face with holes + void apply_extrude(); + void apply_revolve(); + void apply_pocket(); + void draw_canvas(); + void handle_canvas_click(ImVec2 pos); + Vec2d snap(Vec2d pt) const; +}; + +} // namespace GUI +} // namespace Slic3r + +#endif // slic3r_GLGizmoSketch_hpp_ diff --git a/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp b/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp index 00d608b80a..75dca0855d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoUtils.cpp @@ -32,6 +32,8 @@ */ +using namespace std::string_view_literals; + namespace Slic3r::GUI::GLGizmoUtils { void render_tooltip_button( diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 7882cf2269..be586ec55a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -27,6 +27,10 @@ #include "slic3r/GUI/Gizmos/GLGizmoSVG.hpp" #include "slic3r/GUI/Gizmos/GLGizmoMeshBoolean.hpp" #include "slic3r/GUI/Gizmos/GLGizmoAssembly.hpp" +#ifdef SLIC3R_CAD +#include "slic3r/GUI/Gizmos/GLGizmoPrimitive.hpp" +#include "slic3r/GUI/Gizmos/GLGizmoSketch.hpp" +#endif #include "libslic3r/format.hpp" #include "libslic3r/Model.hpp" @@ -176,6 +180,14 @@ void GLGizmosManager::switch_gizmos_icon_filename() case (EType::BrimEars): gizmo->set_icon_filename(m_is_dark ? "toolbar_brimears_dark.svg" : "toolbar_brimears.svg"); break; +#ifdef SLIC3R_CAD + case (EType::Primitive): + gizmo->set_icon_filename(m_is_dark ? "toolbar_modifier_cube_dark.svg" : "toolbar_modifier_cube.svg"); + break; + case (EType::Sketch): + gizmo->set_icon_filename(m_is_dark ? "toolbar_sketch_dark.svg" : "toolbar_sketch.svg"); + break; +#endif } } @@ -219,6 +231,12 @@ bool GLGizmosManager::init() m_gizmos.emplace_back(new GLGizmoAssembly(m_parent, m_is_dark ? "toolbar_assembly_dark.svg" : "toolbar_assembly.svg", EType::Assembly)); m_gizmos.emplace_back(new GLGizmoSimplify(m_parent, "reduce_triangles.svg", EType::Simplify)); m_gizmos.emplace_back(new GLGizmoBrimEars(m_parent, m_is_dark ? "toolbar_brimears_dark.svg" : "toolbar_brimears.svg", EType::BrimEars)); +#ifdef SLIC3R_CAD + // Registered last: Primitive and Sketch are the final entries before Undefined, so + // omitting them leaves every preceding m_gizmos index (indexed by EType) untouched. + m_gizmos.emplace_back(new GLGizmoPrimitive(m_parent, m_is_dark ? "toolbar_modifier_cube_dark.svg" : "toolbar_modifier_cube.svg", static_cast(Primitive))); + m_gizmos.emplace_back(new GLGizmoSketch(m_parent, m_is_dark ? "toolbar_sketch_dark.svg" : "toolbar_sketch.svg", static_cast(Sketch))); +#endif //m_gizmos.emplace_back(new GLGizmoSlaSupports(m_parent, "sla_supports.svg", sprite_id++)); //m_gizmos.emplace_back(new GLGizmoFaceDetector(m_parent, "face recognition.svg", sprite_id++)); //m_gizmos.emplace_back(new GLGizmoHollow(m_parent, "hollow.svg", sprite_id++)); @@ -1003,7 +1021,7 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) // number waits briefly for a second one. const int digit = keyCode - '0'; const int shortcut_max = int(GLGizmoMmuSegmentation::EXTRUDERS_LIMIT); - auto can_start_two_digit = [shortcut_max](int d) { return d > 0 && d * 10 <= shortcut_max; }; + auto can_start_two_digit = [](int d) { return d > 0 && d * 10 <= shortcut_max; }; auto select = [mmu_seg](int number) { return number > 0 && mmu_seg->on_number_key_down(number); }; if (m_timer_set_color.IsRunning() && m_pending_color_shortcut_tens > 0) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 157eb43dc7..d490a6c05f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -90,6 +90,12 @@ public: Assembly, Simplify, BrimEars, +#ifdef SLIC3R_CAD + // Both need the CAD kernel (GeometryEngine); keep them last so that with + // SLIC3R_CAD off the enum matches upstream's numbering exactly. + Primitive, + Sketch, +#endif //SlaSupports, // BBS //FaceRecognition, diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index d7b082426c..5d70fde833 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -239,7 +239,7 @@ void GizmoObjectManipulation::update_if_dirty() }; for (int i = 0; i < 3; ++ i) { - auto update = [this, i](Vec3d &cached, Vec3d &cached_rounded, const Vec3d &new_value) { + auto update = [i](Vec3d &cached, Vec3d &cached_rounded, const Vec3d &new_value) { //wxString new_text = double_to_string(new_value(i), 2); double new_rounded = round(new_value(i)*100)/100.0; //new_text.ToDouble(&new_rounded); @@ -702,7 +702,7 @@ bool GizmoObjectManipulation::reset_zero_button(ImGuiWrapper *imgui_wrapper, bo for (int i = 0; i < number; i++) { - char buf[3][64] = {0}; + char buf[3][64] = {}; float buf_size[3] = {0}; for (int j = 0; j < 3; j++) { ImGui::DataTypeFormatString(buf[j], IM_ARRAYSIZE(buf[j]), ImGuiDataType_Double, (void *) &vec[i][j], "%.2f"); diff --git a/src/slic3r/GUI/GradientCurveEditor.cpp b/src/slic3r/GUI/GradientCurveEditor.cpp index 5b1073d231..6d38ef81a5 100644 --- a/src/slic3r/GUI/GradientCurveEditor.cpp +++ b/src/slic3r/GUI/GradientCurveEditor.cpp @@ -1,4 +1,5 @@ #include "GradientCurveEditor.hpp" +#include "FilamentBitmapUtils.hpp" #include "GUI_App.hpp" #include "GuiColor.hpp" #include "I18N.hpp" @@ -19,23 +20,13 @@ namespace GUI { wxDEFINE_EVENT(wxEVT_GRADIENT_CURVE_CHANGED, wxCommandEvent); namespace { -// Layout ratios of the plot rect within the widget, taken from a 214 x 180 px reference drawing. -// Plot rect occupies the upper-left region; right + bottom margins host axis arrows / labels. -constexpr double kPlotLeftRatio = 0.0316; -constexpr double kPlotRightRatio = 0.6766; -constexpr double kPlotTopRatio = 0.1529; -constexpr double kPlotBottomRatio = 0.8474; -constexpr int kGridDivisions = 9; // 10 grid lines including the outer borders. - -// Hit / stroke (DIP). +// Hit / stroke (DIP). The plot-rect ratios, grid divisions, axis/arrow geometry and the +// near-background outline threshold now live in FilamentBitmapUtils so the read-only Publish +// preview and this editor stay pixel-identical. constexpr int kHitRadius = 6; constexpr int kCurveHitRadius = 5; -constexpr int kPointRadius = 4; // anchor outer radius (DIP) constexpr int kStrokeUnselected = 2; constexpr int kStrokeSelected = 4; -constexpr int kStrokeAxis = 2; // axis line width (px, no DPI scaling - matches kGridColor pen and 2DBed convention) -constexpr int kAxisArrowHalf = 5; // half-base of the axis arrow triangle (DIP) -constexpr int kAxisArrowLen = 10; // length of the axis arrow triangle (DIP) // Light-mode design tokens. Resolved through StateColor::darkModeColorFor() // at paint time so the editor follows the app theme (#EEEEEE -> #4C4C55, #6B6B6B -> @@ -46,12 +37,6 @@ const wxColour kAxisColor (107, 107, 107); // #6B6B6B grey 700 const wxColour kLabelMuted (107, 107, 107); // #6B6B6B grey 700 const wxColour kLabelStrong ( 38, 46, 48); // #262E30 grey 900 const wxColour kOutlineColor(172, 172, 172); // #ACACAC dimmed elements - -// LAB (DeltaE76) threshold for "curve color is too close to the background": below it the curve -// gets a subtle outline so it does not visually vanish, otherwise it is drawn plain. Looser than -// the 5.0 of FlushPredict::is_similar_color, so a pastel pink on white still gets an outline. -constexpr float kBgSimilarThreshold = 15.0f; -constexpr int kOutlineExtraDip = 2; } // namespace GradientCurveEditor::GradientCurveEditor(wxWindow* parent, @@ -177,15 +162,8 @@ void GradientCurveEditor::emit_changed() wxRect GradientCurveEditor::plot_rect() const { - const wxSize sz = GetClientSize(); - const int x = static_cast(std::lround(sz.x * kPlotLeftRatio)); - const int y = static_cast(std::lround(sz.y * kPlotTopRatio)); - const int x2 = static_cast(std::lround(sz.x * kPlotRightRatio)); - const int y2 = static_cast(std::lround(sz.y * kPlotBottomRatio)); - // Force square 1:1 so X/Y axes share the same scale and grid cells stay square. Anchor at - // the top-left so the "100%" labels on the bottom/right still align with the plot edges. - const int side = std::max(1, std::min(x2 - x, y2 - y)); - return wxRect(x, y, side, side); + // Square 1:1 plot, shared with the Publish dialog's read-only preview. + return mixed_gradient_plot_rect(GetClientSize()); } wxPoint2DDouble GradientCurveEditor::data_to_px_f(double x, double y) const @@ -330,171 +308,52 @@ void GradientCurveEditor::on_paint(wxPaintEvent& /*evt*/) raw_dc.SetBackground(wxBrush(bg)); raw_dc.Clear(); - // Render through wxGCDC so curves, arrows and anchor circles get anti-aliased; the buffered - // DC is the actual back buffer that gets blitted to the window. - wxGCDC dc(raw_dc); - // The curve and its anchors are drawn straight on the graphics context so their - // coordinates stay sub-pixel accurate (see data_to_px_f). - wxGraphicsContext* gc = dc.GetGraphicsContext(); - - const wxRect rc = plot_rect(); - if (rc.width <= 0 || rc.height <= 0) - return; - - // 10x10 light grid (10 lines including outer borders, 9 equal divisions). - dc.SetPen(wxPen(grid_color, 1)); - for (int i = 0; i <= kGridDivisions; ++i) { - const int x = rc.x + rc.width * i / kGridDivisions; - const int y = rc.y + rc.height * i / kGridDivisions; - dc.DrawLine(x, rc.y, x, rc.y + rc.height); - dc.DrawLine(rc.x, y, rc.x + rc.width, y); - } - - // Set the label font first so text width measurements drive arrow / label placement. - wxFont label_font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); - label_font.SetPointSize(std::max(7, label_font.GetPointSize() - 1)); - dc.SetFont(label_font); - - const wxString axis_y_title = _L("Material Ratio"); - const wxString axis_x_title = _L("Model Height"); - const wxString pct_text = wxT("100%"); - const wxSize x_title_sz = dc.GetTextExtent(axis_x_title); - const wxSize y_title_sz = dc.GetTextExtent(axis_y_title); - - wxFont strong_font = label_font; - strong_font.SetWeight(wxFONTWEIGHT_SEMIBOLD); - dc.SetFont(strong_font); - const wxSize pct_text_sz = dc.GetTextExtent(pct_text); - dc.SetFont(label_font); - - // Axes (grey 700) with filled triangle arrows. Y-axis extends above the plot top to the - // canvas top edge; X-axis extends past the plot right toward the canvas right edge. - const int arrow_half = FromDIP(kAxisArrowHalf); - const int arrow_len = FromDIP(kAxisArrowLen); - const wxSize sz = GetClientSize(); - dc.SetPen(wxPen(axis_color, kStrokeAxis)); - dc.SetBrush(wxBrush(axis_color)); - - // Y-axis: vertical line at plot_left, from arrow tip near canvas top down to plot bottom. - const int y_axis_x = rc.x; - const int y_title_pct_gap = FromDIP(1); - const int y_title_bottom_pad = FromDIP(2); - const int y_title_y = std::max(0, rc.y - y_title_sz.y - y_title_pct_gap - pct_text_sz.y - y_title_bottom_pad); - const int y_arrow_tip_y = y_title_y; - const int y_arrow_ty = y_arrow_tip_y + arrow_len; - dc.DrawLine(y_axis_x, y_arrow_ty, y_axis_x, rc.y + rc.height); - { - wxPoint tri[3] = { - wxPoint(y_axis_x, y_arrow_tip_y), - wxPoint(y_axis_x - arrow_half, y_arrow_ty), - wxPoint(y_axis_x + arrow_half, y_arrow_ty), + // Render the plot (grid, axes, labels, curves, anchors) through the shared painter so the + // interactive editor and the Publish dialog's read-only preview stay pixel-identical. The + // curves are handed over as sub-pixel polylines and anti-alias inside the helper. + std::vector curves; + std::vector anchors; + if (m_points.size() >= 2) { + auto color_for_curve = [&](int curve_idx) -> wxColour { + wxColour c = (curve_idx == 0) ? m_color_low : m_color_high; + // Transparent filaments (alpha == 0, e.g. #FFFFFF00) would be invisible. + if (c.Alpha() == 0) + c.Set(c.Red(), c.Green(), c.Blue(), 150); + return c; }; - dc.DrawPolygon(3, tri); - } - // X-axis arrow tip: stays just past the plot ideally, but is clamped so the trailing - // "Material Ratio" label still fits inside the canvas without overlapping the arrow. - const int x_axis_y = rc.y + rc.height; - const int x_label_gap = FromDIP(4); - const int x_edge_pad = FromDIP(6); - const int x_arrow_ideal = rc.x + rc.width + FromDIP(10); - const int x_arrow_max = sz.x - x_title_sz.x - x_label_gap - x_edge_pad - arrow_len; - const int x_arrow_tx = std::max(rc.x + rc.width + arrow_len, - std::min(x_arrow_ideal, x_arrow_max)); - const int x_arrow_tip_x = x_arrow_tx + arrow_len; - const int x_title_x = x_arrow_tip_x + x_label_gap; - dc.DrawLine(rc.x, x_axis_y, x_arrow_tx, x_axis_y); - { - wxPoint tri[3] = { - wxPoint(x_arrow_tip_x, x_axis_y), - wxPoint(x_arrow_tx, x_axis_y - arrow_half), - wxPoint(x_arrow_tx, x_axis_y + arrow_half), + auto build_polyline = [&](int curve_idx) -> std::vector { + const int samples = std::max(128, plot_rect().width * 2); + std::vector poly; + poly.reserve(samples + 1); + for (int s = 0; s <= samples; ++s) { + const double x = double(s) / samples; + const double y0 = sample_curve_y(x); + const double vy = to_visual_y(curve_idx, y0); + poly.push_back(data_to_px_f(x, vy)); + } + return poly; }; - dc.DrawPolygon(3, tri); - } - // Labels. - // "Model Height" and "100%" share the same left x; the gap is larger than the - // axis-arrow half-base so the text never visually touches the Y-axis arrow. - const int label_left_x = y_axis_x + FromDIP(10); - dc.SetTextForeground(label_muted); - dc.DrawText(axis_y_title, label_left_x, y_title_y); - - dc.SetFont(strong_font); - dc.SetTextForeground(label_strong); - dc.DrawText(pct_text, label_left_x, y_title_y + y_title_sz.y + y_title_pct_gap); - - // Bottom-right "100%" sits under the right end of the plot; "Material Ratio" follows the - // X-axis arrow tip (placement was already clamped above to leave room). - dc.DrawText(pct_text, rc.x + rc.width - pct_text_sz.x, x_axis_y); - dc.SetFont(label_font); - dc.SetTextForeground(label_muted); - dc.DrawText(axis_x_title, x_title_x, x_axis_y - x_title_sz.y / 2); - - if (m_points.size() < 2 || !gc) - return; - - auto color_for_curve = [&](int curve_idx) -> wxColour { - wxColour c = (curve_idx == 0) ? m_color_low : m_color_high; - // Transparent filaments (alpha == 0, e.g. #FFFFFF00) would be invisible. - // Lift alpha so the curve stays visible while still hinting at transparency. - if (c.Alpha() == 0) - c.Set(c.Red(), c.Green(), c.Blue(), 150); - return c; - }; - - auto build_polyline = [&](int curve_idx) -> std::vector { - const int samples = std::max(128, rc.width * 2); - std::vector poly; - poly.reserve(samples + 1); - for (int s = 0; s <= samples; ++s) { - const double x = double(s) / samples; - const double y0 = sample_curve_y(x); - const double vy = to_visual_y(curve_idx, y0); - poly.push_back(data_to_px_f(x, vy)); + // Draw unselected first so the selected curve sits on top. + const int other = 1 - m_selected_curve; + for (const int idx : {other, m_selected_curve}) { + std::vector pts = build_polyline(idx); + if (pts.empty()) + continue; + curves.push_back({std::move(pts), color_for_curve(idx), idx == m_selected_curve ? kStrokeSelected : kStrokeUnselected}); } - return poly; - }; - // Only the geometry goes through the graphics context: dc.DrawLines() takes integer wxPoint - // and would quantize the curve back to whole pixels. The pen is still set on the dc, which - // forwards it here while keeping its own cached state in sync for later dc drawing. - auto draw_polyline = [&](const std::vector& poly, const wxColour& col, int stroke_dip) { - dc.SetPen(wxPen(col, FromDIP(stroke_dip))); - gc->StrokeLines(poly.size(), poly.data()); - }; - - // Outline only when the curve color is perceptually close to the background; otherwise - // the plain filament color reads fine and the extra stroke would look heavy. - auto needs_outline = [&](const wxColour& c) { - return calc_color_distance(c, bg) < kBgSimilarThreshold; - }; - - auto draw_one = [&](int curve_idx, int stroke_dip) { - const auto poly = build_polyline(curve_idx); - const wxColour col = color_for_curve(curve_idx); - if (needs_outline(col)) - draw_polyline(poly, outline_color, stroke_dip + kOutlineExtraDip); - draw_polyline(poly, col, stroke_dip); - }; - - // Draw unselected first so the selected curve sits on top. - const int other = 1 - m_selected_curve; - draw_one(other, kStrokeUnselected); - draw_one(m_selected_curve, kStrokeSelected); - - // Control points (selected curve only): hollow circle with axis-color border, theme-aware fill. - // Drawn on the graphics context with a sub-pixel center so the ring stays centered on the - // curve instead of drifting up to half a pixel off it; pen and brush go through the dc for - // the same reason as in draw_polyline above. - const double r = FromDIP(kPointRadius); - dc.SetPen(wxPen(axis_color, 1)); - dc.SetBrush(wxBrush(point_fill)); - for (size_t i = 0; i < m_points.size(); ++i) { - const double vy = to_visual_y(m_selected_curve, m_points[i].y); - const wxPoint2DDouble p = data_to_px_f(m_points[i].x, vy); - gc->DrawEllipse(p.m_x - r, p.m_y - r, r * 2, r * 2); + // Control points (selected curve only). + anchors.reserve(m_points.size()); + for (size_t i = 0; i < m_points.size(); ++i) { + const double vy = to_visual_y(m_selected_curve, m_points[i].y); + anchors.push_back(data_to_px_f(m_points[i].x, vy)); + } } + + const MixedGradientTheme theme{bg, grid_color, axis_color, label_muted, label_strong, outline_color, point_fill}; + draw_mixed_gradient_plot(raw_dc, GetClientSize(), curves, anchors, theme); } void GradientCurveEditor::on_left_down(wxMouseEvent& evt) diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index 5471c16064..f00e661df2 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -46,7 +46,7 @@ int get_hms_info_version(std::string& version) std::string url = (boost::format("https://%1%/GetVersion.php?%2%") % hms_host % query_params).str(); Slic3r::Http http = Slic3r::Http::get(url); http.timeout_max(10) - .on_complete([&result, &version](std::string body, unsigned status){ + .on_complete([&version](std::string body, unsigned status){ try { json j = json::parse(body); if (j.contains("ver")) { @@ -95,7 +95,7 @@ int HMSQuery::download_hms_related(const std::string& hms_type, const std::strin BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url; Slic3r::Http http = Slic3r::Http::get(url); - http.on_complete([this, receive_json, hms_type, &to_save_local, &j, & local_version](std::string body, unsigned status) { + http.on_complete([receive_json, hms_type, &to_save_local, &j, & local_version](std::string body, unsigned status) { try { j = json::parse(body); if (j.contains("result")) { diff --git a/src/slic3r/GUI/HMSPanel.hpp b/src/slic3r/GUI/HMSPanel.hpp index 49910590b8..25ac56de96 100644 --- a/src/slic3r/GUI/HMSPanel.hpp +++ b/src/slic3r/GUI/HMSPanel.hpp @@ -25,7 +25,6 @@ class HMSNotifyItem : public wxPanel wxStaticBitmap *m_bitmap_notify; wxStaticBitmap *m_bitmap_arrow; wxStaticText * m_hms_content; - wxHtmlWindow * m_html; wxPanel * m_staticline; wxBitmap m_img_notify_lv1; diff --git a/src/slic3r/GUI/HttpServer.cpp b/src/slic3r/GUI/HttpServer.cpp index afdc46e9f0..ef26f20173 100644 --- a/src/slic3r/GUI/HttpServer.cpp +++ b/src/slic3r/GUI/HttpServer.cpp @@ -4,6 +4,10 @@ #include "slic3r/Utils/Http.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/Utils/BBLNetworkPlugin.hpp" +#include "libslic3r/Thread.hpp" +#include + +using json = nlohmann::json; namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index c008963646..fa777b6a37 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1,6 +1,7 @@ #include "IMSlider.hpp" #include "libslic3r/GCode.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "NotificationManager.hpp" #include "Widgets/StateColor.hpp" #ifndef IMGUI_DEFINE_MATH_OPERATORS @@ -790,7 +791,7 @@ void IMSlider::draw_ticks(const ImRect& slideable_region) { void IMSlider::show_tooltip(const std::string tooltip) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, { 6 * m_scale, 3 * m_scale }); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, { 3 * m_scale }); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3 * m_scale); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, { 0,0,0,0 }); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); diff --git a/src/slic3r/GUI/IMSlider.hpp b/src/slic3r/GUI/IMSlider.hpp index bd2399e990..d28a65c1ff 100644 --- a/src/slic3r/GUI/IMSlider.hpp +++ b/src/slic3r/GUI/IMSlider.hpp @@ -176,7 +176,6 @@ private: // Use those values to disable selection of active extruders bool m_is_dark = false; - bool is_osx{false}; int m_min_value; int m_max_value; int m_lower_value; @@ -201,10 +200,6 @@ private: void *m_one_layer_on_hover_id; void *m_one_layer_off_id; void *m_one_layer_off_hover_id; - void* m_one_layer_on_light_id; - void* m_one_layer_on_hover_light_id; - void* m_one_layer_off_light_id; - void* m_one_layer_off_hover_light_id; void* m_one_layer_on_dark_id; void* m_one_layer_on_hover_dark_id; void* m_one_layer_off_dark_id; @@ -221,7 +216,6 @@ private: long m_extra_style; float m_label_koef{1.0}; - float m_zero_layer_height = 0.0f; std::vector m_values; TickCodeInfo m_ticks; std::vector m_layers_times; diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 5850161a3e..cf107565e3 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -505,6 +505,23 @@ bool ImGuiWrapper::update_key_data(wxKeyEvent &evt) if (evt.GetEventType() == wxEVT_CHAR) { // Char event const auto key = evt.GetUnicodeKey(); + // THE MEASUREMENT THAT CANNOT LIE. This is the ONLY place in the application where ImGui + // is ever handed a character, so an ImGui text field that stays empty while reporting + // itself active has exactly two possible causes, and this line separates them: no output + // at all means the wxEVT_CHAR never reached the GL canvas (a focus problem, upstream of + // ImGui entirely), while output with unicode=0 means the character arrived empty and is + // being dropped right here. + // + // It lives here rather than on the canvas because a probe bound on the canvas CANNOT + // answer this: GLCanvas3D::on_char is bound later than any constructor-time probe, wx + // runs handlers in reverse bind order, and on_char returns without Skip() whenever this + // function returns true — so such a probe stays silent whether or not the key arrived. + // A day was lost to reading that silence as evidence. + if (std::getenv("ORCA_CAD_UXTRACE")) { + fprintf(stderr, "[UX] imgui_char unicode=%d keycode=%d want_text=%d\n", + (int) key, evt.GetKeyCode(), (int) io.WantTextInput); + fflush(stderr); + } if (key != 0) { io.AddInputCharacter(key); } @@ -2482,6 +2499,19 @@ static const ImWchar ranges_keyboard_shortcuts[] = }; #endif // __APPLE__ +// Names drawn through the atlas come from file names and CAD data, not from the UI language. +// GetGlyphRangesDefault() already gives every language the CJK ideographs, which is why a +// Chinese file name renders under an English UI; these are the alphabetic scripts it omits. +// Codepoints the font lacks are skipped at build time, so only existing glyphs cost anything. +static const ImWchar ranges_language_independent[] = +{ + 0x0100, 0x024F, // Latin Extended-A and Extended-B + 0x0370, 0x03FF, // Greek and Coptic + 0x0400, 0x04FF, // Cyrillic + 0x1E00, 0x1EFF, // Latin Extended Additional (Vietnamese) + 0, +}; + std::vector ImGuiWrapper::load_svg(const std::string& bitmap_name, unsigned target_width, unsigned target_height, unsigned *outwidth, unsigned *outheight) { @@ -2792,6 +2822,7 @@ void ImGuiWrapper::init_font(bool compress) ImFontAtlas::GlyphRangesBuilder builder; builder.AddRanges(m_glyph_ranges); builder.AddRanges(ImGui::GetIO().Fonts->GetGlyphRangesDefault()); + builder.AddRanges(ranges_language_independent); #ifdef __APPLE__ if (m_font_cjk) // Apple keyboard shortcuts are only contained in the CJK fonts. @@ -2813,12 +2844,17 @@ void ImGuiWrapper::init_font(bool compress) // Orca: temp fix for Korean font auto font_name_regular = "HarmonyOS_Sans_SC_Regular.ttf"; auto font_name_bold = "HarmonyOS_Sans_SC_Bold.ttf"; + // The Korean and Thai fonts cover their own script and little else, so they need the + // default font merged in behind them to reach the full range. + bool needs_glyph_fallback = false; if(m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesKorean()) { font_name_regular = "NanumGothic-Regular.ttf"; font_name_bold = "NanumGothic-Bold.ttf"; + needs_glyph_fallback = true; } else if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { font_name_regular = "Sarabun-Medium.ttf"; font_name_bold = "Sarabun-SemiBold.ttf"; + needs_glyph_fallback = true; } default_font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + font_name_regular).c_str(), m_font_size, &cfg, ranges.Data); if (default_font == nullptr) { @@ -2828,11 +2864,12 @@ void ImGuiWrapper::init_font(bool compress) } } - if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { + // A merged font only supplies glyphs the font ahead of it lacks, so this fills the gaps + // without restyling anything the script font already covers. + if (needs_glyph_fallback) { ImFontConfig fallback_cfg = cfg; fallback_cfg.MergeMode = true; - static constexpr ImWchar celsius_range[] = { 0x2103, 0x2103, 0 }; - io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf").c_str(), m_font_size, &fallback_cfg, celsius_range); + io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf").c_str(), m_font_size, &fallback_cfg, ranges.Data); } bold_font = io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/" + font_name_bold).c_str(), m_font_size, &cfg, ranges.Data); @@ -2841,11 +2878,10 @@ void ImGuiWrapper::init_font(bool compress) if (bold_font == nullptr) { throw Slic3r::RuntimeError("ImGui: Could not load deafult font"); } } - if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { + if (needs_glyph_fallback) { ImFontConfig fallback_cfg = cfg; fallback_cfg.MergeMode = true; - static constexpr ImWchar celsius_range[] = { 0x2103, 0x2103, 0 }; - io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Bold.ttf").c_str(), m_font_size, &fallback_cfg, celsius_range); + io.Fonts->AddFontFromFileTTF((Slic3r::resources_dir() + "/fonts/HarmonyOS_Sans_SC_Bold.ttf").c_str(), m_font_size, &fallback_cfg, ranges.Data); } if (m_glyph_ranges == ImGui::GetIO().Fonts->GetGlyphRangesThai()) { @@ -2897,13 +2933,18 @@ void ImGuiWrapper::init_font(bool compress) glsafe(::glGetIntegerv(GL_MAX_TEXTURE_SIZE, &gl_max_tex_size)); constexpr int max_retries = 6; for (int attempt = 0; attempt < max_retries && io.Fonts->TexHeight > gl_max_tex_size; ++attempt) { - io.Fonts->TexDesiredWidth = (io.Fonts->TexDesiredWidth > 0 ? io.Fonts->TexDesiredWidth : io.Fonts->TexWidth) * 2; + const int width = io.Fonts->TexDesiredWidth > 0 ? io.Fonts->TexDesiredWidth : io.Fonts->TexWidth; + // Both dimensions share the same limit, so widening past it would only trade an + // illegal height for an illegal width. + if (width * 2 > gl_max_tex_size) + break; + io.Fonts->TexDesiredWidth = width * 2; io.Fonts->Build(); } if (io.Fonts->TexHeight > gl_max_tex_size) { - // Shouldn't really happen - BOOST_LOG_TRIVIAL(error) << "Font atlas height " << io.Fonts->TexHeight - << " still exceeds GL_MAX_TEXTURE_SIZE (" << gl_max_tex_size << ")" + // Needs both a very large glyph set and a small GL_MAX_TEXTURE_SIZE. + BOOST_LOG_TRIVIAL(error) << "Font atlas " << io.Fonts->TexWidth << "x" << io.Fonts->TexHeight + << " does not fit GL_MAX_TEXTURE_SIZE (" << gl_max_tex_size << ")" << " after " << max_retries << " attempts; rendering may be incomplete"; } diff --git a/src/slic3r/GUI/ImageDPIFrame.cpp b/src/slic3r/GUI/ImageDPIFrame.cpp index 2133f18784..8dad9c44da 100644 --- a/src/slic3r/GUI/ImageDPIFrame.cpp +++ b/src/slic3r/GUI/ImageDPIFrame.cpp @@ -74,7 +74,7 @@ bool ImageDPIFrame::Show(bool show) } void ImageDPIFrame::set_bitmap(const wxBitmap &bit_map) { - if (&bit_map && bit_map.IsOk()) { + if (bit_map.IsOk()) { m_bitmap->SetBitmap(bit_map); } } diff --git a/src/slic3r/GUI/ImageDPIFrame.hpp b/src/slic3r/GUI/ImageDPIFrame.hpp index 817ef6be18..c22d296492 100644 --- a/src/slic3r/GUI/ImageDPIFrame.hpp +++ b/src/slic3r/GUI/ImageDPIFrame.hpp @@ -3,6 +3,8 @@ #include "GUI_App.hpp" #include "GUI_Utils.hpp" +#include +#include class wxStaticBitmap; namespace Slic3r { namespace GUI { diff --git a/src/slic3r/GUI/ImageGrid.cpp b/src/slic3r/GUI/ImageGrid.cpp index abef6f0f12..f6bf25d77c 100644 --- a/src/slic3r/GUI/ImageGrid.cpp +++ b/src/slic3r/GUI/ImageGrid.cpp @@ -521,7 +521,7 @@ void ImageGrid::render(wxDC& dc) if (!m_status_msg.IsEmpty()) { auto si = m_status_icon.GetBmpSize(); auto st = dc.GetMultiLineTextExtent(m_status_msg); - auto rect = wxRect{0, 0, max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size)); + auto rect = wxRect{0, 0, std::max(st.x, si.x), si.y + 26 + st.y}.CenterIn(wxRect({0, 0}, size)); dc.DrawBitmap(m_status_icon.bmp(), rect.x + (rect.width - si.x) / 2, rect.y); dc.SetTextForeground(wxColor(0x909090)); dc.DrawText(m_status_msg, rect.x + (rect.width - st.x) / 2, rect.GetBottom() - st.y); diff --git a/src/slic3r/GUI/InstanceCheck.cpp b/src/slic3r/GUI/InstanceCheck.cpp index bc68a3f788..28c5176cb1 100644 --- a/src/slic3r/GUI/InstanceCheck.cpp +++ b/src/slic3r/GUI/InstanceCheck.cpp @@ -114,7 +114,10 @@ namespace instance_check_internal if (my_instance_hash == other_instance_hash) { BOOST_LOG_TRIVIAL(debug) << "win enum - found correct instance"; orca_slicer_hwnd = hwnd; - ShowWindow(hwnd, SW_SHOWMAXIMIZED); + // Do not alter the window state when opening a file in the existing instance. + // A minimized window still needs restoring before it can receive focus. + if (IsIconic(hwnd)) + ShowWindow(hwnd, SW_RESTORE); SetForegroundWindow(hwnd); return false; } diff --git a/src/slic3r/GUI/InstanceCheck.hpp b/src/slic3r/GUI/InstanceCheck.hpp index 5f26f1e48f..9bfb3e2500 100644 --- a/src/slic3r/GUI/InstanceCheck.hpp +++ b/src/slic3r/GUI/InstanceCheck.hpp @@ -87,7 +87,6 @@ private: std::condition_variable m_thread_stop_condition; mutable std::mutex m_thread_stop_mutex; bool m_stop{ false }; - bool m_start{ true }; // background thread method void listen(); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 71a5e58344..438bda2cc2 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -266,8 +266,7 @@ arrangement::ArrangePolygon estimate_wipe_tower_info(int plate_index, std::setget_printer_extruder_count(); - auto arrange_poly = ppl.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(full_config, plate_index, wipe_tower_pos, wipe_tower_size, nozzle_nums, extruder_size); + auto arrange_poly = ppl.get_plate(plate_index_valid)->estimate_wipe_tower_polygon(full_config, plate_index, wipe_tower_pos, wipe_tower_size, extruder_size); arrange_poly.bed_idx = plate_index; return arrange_poly; } diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp index 61c430c6e6..76af712f63 100644 --- a/src/slic3r/GUI/Jobs/BindJob.cpp +++ b/src/slic3r/GUI/Jobs/BindJob.cpp @@ -3,6 +3,10 @@ #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/DeviceManager.hpp" +#include "slic3r/GUI/HMS.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "slic3r/GUI/DeviceCore/DevManager.h" diff --git a/src/slic3r/GUI/Jobs/BindJob.hpp b/src/slic3r/GUI/Jobs/BindJob.hpp index af89e2fc1b..1e8aa91d6f 100644 --- a/src/slic3r/GUI/Jobs/BindJob.hpp +++ b/src/slic3r/GUI/Jobs/BindJob.hpp @@ -20,7 +20,6 @@ class BindJob : public Job std::string m_sec_link; std::string m_ssdp_version; bool m_job_finished{ false }; - int m_print_job_completed_id = 0; bool m_improved{false}; public: diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index 502282c307..961b8af566 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -185,7 +185,7 @@ void FillBedJob::prepare() ap.poly = m_selected.front().poly; ap.bed_idx = PartPlateList::MAX_PLATES_COUNT; ap.itemid = -1; - ap.setter = [this, mi, offset](const ArrangePolygon &p) { + ap.setter = [this, offset](const ArrangePolygon &p) { ModelObject *mo = m_plater->model().objects[m_object_idx]; ModelObject *obj; if (m_instances) { diff --git a/src/slic3r/GUI/Jobs/PlaterWorker.hpp b/src/slic3r/GUI/Jobs/PlaterWorker.hpp index d38a57b6a6..f22bd6d511 100644 --- a/src/slic3r/GUI/Jobs/PlaterWorker.hpp +++ b/src/slic3r/GUI/Jobs/PlaterWorker.hpp @@ -79,9 +79,12 @@ class PlaterWorker: public Worker { steady_clock::time_point finalize_end = steady_clock::now(); long long finalize_duration = duration_cast(finalize_end - finalize_start).count(); + // Bound first so typeid's operand is not a call. typeid evaluates it for a + // polymorphic type, which clang reports as -Wpotentially-evaluated-expression. + const Job &job = *m_job; BOOST_LOG_TRIVIAL(info) << std::fixed // do not use scientific notations - << "Job '" << typeid(*m_job).name() << "' " + << "Job '" << typeid(job).name() << "' " << "spend " << m_process_duration + finalize_duration << "ms " << "(process " << m_process_duration << "ms + finalize " << finalize_duration << "ms)"; diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index cd9b851b2a..25535ff1a5 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -143,7 +143,6 @@ void PrintJob::process(Ctl &ctl) /* display info */ std::string msg; - wxString error_str; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); AppConfig* config = wxGetApp().app_config; @@ -410,9 +409,7 @@ void PrintJob::process(Ctl &ctl) &is_try_lan_mode, &is_try_lan_mode_failed, &msg, - &error_str, &curr_percent, - &error_text, StagePercentPoint ](int stage, int code, std::string info) { @@ -499,7 +496,7 @@ void PrintJob::process(Ctl &ctl) DeviceManager* dev = wxGetApp().getDeviceManager(); MachineObject* obj = dev->get_selected_machine(); - auto wait_fn = [this, &ctl, curr_percent, &obj](int state, std::string job_info) { + auto wait_fn = [&ctl, &obj](int state, std::string job_info) { BOOST_LOG_TRIVIAL(info) << "print_job: get_job_info = " << job_info; if (!obj->is_support_wait_sending_finish) { diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index f97b03bf62..7f8219008f 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -55,7 +55,7 @@ void RotoptimizeJob::process(Ctl &ctl) sla::RotOptimizeParams{} .accuracy(m_accuracy) .print_config(&m_default_print_cfg) - .statucb([this, &prev_status, &ctl/*, &statustxt*/](int s) + .statucb([&ctl/*, &statustxt*/](int s) { return !ctl.was_canceled(); }); diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index 5bf9010201..505475e4a9 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -1,5 +1,7 @@ #include "SendJob.hpp" #include "libslic3r/LifecycleEvents.hpp" +#include "slic3r/GUI/I18N.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "libslic3r/MTUtils.hpp" #include "libslic3r/Model.hpp" #include "libslic3r/PresetBundle.hpp" @@ -221,7 +223,6 @@ void SendJob::process(Ctl &ctl) params.password = m_access_code; params.use_ssl_for_ftp = m_local_use_ssl_for_ftp; params.use_ssl_for_mqtt = m_local_use_ssl; - wxString error_text; std::string msg_text; const int StagePercentPoint[(int)PrintingStageFinished + 1] = { @@ -235,7 +236,7 @@ void SendJob::process(Ctl &ctl) }; auto update_fn = [this, &ctl, - &msg, &curr_percent, &error_text, StagePercentPoint](int stage, int code, std::string info) { + &msg, &curr_percent, StagePercentPoint](int stage, int code, std::string info) { if (stage == SendingPrintJobStage::PrintingStageCreate) { if (this->connection_type == "lan") { msg = _u8L("Sending G-code file over LAN"); diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp index 6cd88ac5d3..7090f0e2e0 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp @@ -2,6 +2,7 @@ #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" #include "slic3r/Utils/Http.hpp" namespace Slic3r { diff --git a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp index 5a531065f3..3e634e0337 100644 --- a/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp +++ b/src/slic3r/GUI/Jobs/UpgradeNetworkJob.hpp @@ -27,7 +27,6 @@ class UpgradeNetworkJob : public Job wxWindow * m_event_handle{nullptr}; std::function m_success_fun{nullptr}; bool m_job_finished{ false }; - int m_print_job_completed_id = 0; InstallProgressFn pro_fn { nullptr }; diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index ed513c425f..2f882e35aa 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -174,6 +174,7 @@ void KBShortcutsDialog::fill_shortcuts() { ctrl + "O", L("Open Project") }, { ctrl + "S", L("Save Project") }, { ctrl + shift + "S", L("Save Project as")}, + { ctrl + shift + "E", L("Publish 3MF") }, // File>Import { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, // File>Export diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 5f7d69244e..cc994b2370 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -37,9 +37,12 @@ #include "I18N.hpp" #include "GLCanvas3D.hpp" #include "Plater.hpp" +#ifdef SLIC3R_CAD +#include "slic3r/GUI/CAD/DesignPanel.hpp" +#include "slic3r/GUI/CAD/McpControl.hpp" +#endif #include "WebViewDialog.hpp" #include "../Utils/Process.hpp" -#include "format.hpp" // BBS #include "PartPlate.hpp" #include "Preferences.hpp" @@ -49,11 +52,9 @@ #include "../Utils/NetworkAgentFactory.hpp" #include "../Utils/PrintHost.hpp" -#include -#include - #include "GUI_App.hpp" #include "UnsavedChangesDialog.hpp" +#include "PublishSettingsDialog.hpp" #include "MsgDialog.hpp" #include "Notebook.hpp" #include "GUI_Factories.hpp" @@ -743,10 +744,14 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ if (m_plater) { m_plater->add_file(); } return; } + if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'E') { + if (can_export_model()) publish_project(); + return; + } evt.Skip(); }); - Bind(wxEVT_SHOW, [this](wxShowEvent &evt) { + Bind(wxEVT_SHOW, [](wxShowEvent &evt) { DeviceManager *manger = wxGetApp().getDeviceManager(); if (manger) { evt.IsShown() ? manger->start_refresher() : manger->stop_refresher(); @@ -1018,7 +1023,15 @@ void MainFrame::update_layout() // Right after Home — or first, when there is no Home tab (PositionAfter() would // append instead, and by now the other built-in tabs are already in place). const int home_idx = m_tabpanel->FindPageByName(TAB_ID_HOME); - const size_t prepare_pos = (home_idx == wxNOT_FOUND) ? 0 : static_cast(home_idx) + 1; + size_t prepare_pos = (home_idx == wxNOT_FOUND) ? 0 : static_cast(home_idx) + 1; +#ifdef SLIC3R_CAD + // Design sits between Home and Prepare, so it goes in first and pushes Prepare along. + // The page only exists when the experimental CAD feature is enabled. + if (m_design_page != nullptr) { + m_design_page->Reparent(m_tabpanel); + m_tabpanel->InsertPage(prepare_pos++, TAB_ID_DESIGN, m_design_page, _L("Design"), "tab_design_active"); + } +#endif m_tabpanel->InsertPage(prepare_pos, TAB_ID_PREPARE, m_plater, _L("Prepare"), "tab_3d_active"); m_tabpanel->InsertPage(prepare_pos + 1, TAB_ID_PREVIEW, m_plater, _L("Preview"), "tab_preview_active"); m_main_sizer->Add(m_tabpanel, 1, wxEXPAND | wxTOP, 0); @@ -1236,6 +1249,19 @@ void MainFrame::show_option(bool show) } } +#ifdef SLIC3R_CAD +DesignPanel* MainFrame::ensure_design_panel() +{ + if (m_design_panel == nullptr && m_design_page != nullptr) { + wxBusyCursor busy; + m_design_panel = new DesignPanel(m_design_page); + m_design_page->GetSizer()->Add(m_design_panel, 1, wxEXPAND); + m_design_page->Layout(); + } + return m_design_panel; +} +#endif + void MainFrame::init_tabpanel() { // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on // Windows 10 with multiple high resolution displays connected. @@ -1276,9 +1302,26 @@ void MainFrame::init_tabpanel() { } //else if (panel == m_param_panel) // m_param_panel->OnActivate(); +#ifdef SLIC3R_CAD + else if (m_design_page != nullptr && panel == m_design_page) { + // Built on first activation, never at startup: the panel creates several hundred + // controls and its own GL canvas, which a user who does not open the tab should + // not pay for. + ensure_design_panel(); + // Re-sync the Design bed to the active printer: the panel is built before the + // printer profile is fully applied, so its bed must refresh on activation or the + // grid (true bed) spills past the stale default bed quad. + m_design_panel->on_tab_shown(); + } +#endif else if (panel == m_monitor) { //monitor } +#ifdef SLIC3R_CAD + // Any page that is not Design takes the Design status line down with it — see + // DesignPanel::on_tab_hidden for why the popup does not follow the page on its own. + if (m_design_panel != nullptr && panel != m_design_page) m_design_panel->on_tab_hidden(); +#endif #ifndef __APPLE__ if (m_last_selected_tab == TAB_ID_PREPARE) { m_topbar->EnableUndoRedoItems(); @@ -1309,6 +1352,20 @@ void MainFrame::init_tabpanel() { wxGetApp().plater_ = m_plater; +#ifdef SLIC3R_CAD + // Stand-in page for the Design tab. The real DesignPanel is built into it the first time + // the tab is selected (see the page-changed handler above), so nothing it constructs sits + // on the startup path. The experimental feature is off by default, and when it is off the + // page is never created, so the tab does not appear at all (the preference takes effect on + // the next start, like the other feature toggles). + if (wxGetApp().is_enable_cad_feature()) { + m_design_page = new wxPanel(this); + m_design_page->SetSizer(new wxBoxSizer(wxVERTICAL)); + m_design_page->Hide(); + start_mcp_control_if_enabled(); // opens the MCP socket iff ORCA_CAD_MCP is set + } +#endif + create_preset_tabs(); //BBS add pages @@ -1590,7 +1647,7 @@ void MainFrame::register_win32_callbacks() //static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10, 0x6530, 0x11D2, 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED }; //static GUID GUID_DEVINTERFACE_DISK = { 0x53f56307, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b }; //static GUID GUID_DEVINTERFACE_VOLUME = { 0x71a27cdd, 0x812a, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f }; - static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 }; + static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2, 0xF16F, 0x11CF, { 0x88, 0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; // Register USB HID (Human Interface Devices) notifications to trigger the 3DConnexion enumeration. DEV_BROADCAST_DEVICEINTERFACE NotificationFilter = { 0 }; @@ -1630,7 +1687,7 @@ void MainFrame::register_win32_callbacks() { static constexpr int device_count = 1; - RAWINPUTDEVICE devices[device_count] = { 0 }; + RAWINPUTDEVICE devices[device_count] = {}; // multi-axis mouse (SpaceNavigator, etc.) devices[0].usUsagePage = 0x01; devices[0].usUsage = 0x08; @@ -1739,6 +1796,22 @@ bool MainFrame::save_project_as(const wxString& filename) return ret; } +void MainFrame::publish_project() +{ + if (m_plater == nullptr) + return; + // Seed the dialog from the session selection (a remembered state or a freshly loaded + // published 3MF); a null pointer means "fresh", keeping the dirty defaults. + std::vector pending_keys; + std::vector pending_material; + const bool has_prior = m_plater->get_pending_published(pending_keys, pending_material); + PublishSettingsDialog dlg(this, has_prior ? &pending_keys : nullptr, has_prior ? &pending_material : nullptr); + if (dlg.ShowModal() != wxID_OK) + return; + m_plater->set_pending_published(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); + m_plater->export_published_3mf(dlg.GetPublishedKeys(), dlg.GetPublishedMaterialKeys()); +} + bool MainFrame::can_upload() const { return true; @@ -2834,6 +2907,20 @@ void MainFrame::init_menubar_as_editor() [this](){return m_plater != nullptr && can_save_as(); }, this); #endif + // BBS: publish + fileMenu->AppendSeparator(); + auto publish_handler = [this](wxCommandEvent&) { publish_project(); }; + +#ifndef __APPLE__ + append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + publish_handler, "menu_publish", nullptr, + [this](){return can_export_model(); }, this); +#else + append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + publish_handler, "", nullptr, + [this](){return can_export_model(); }, this); +#endif + fileMenu->AppendSeparator(); @@ -2850,12 +2937,12 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) { m_plater->add_model(); } }, "", nullptr, [this](){return can_add_models(); }, this); #endif - append_menu_item(import_menu, wxID_ANY, _L("Import Zip Archive") + dots, _L("Load models contained within a zip archive"), + append_menu_item(import_menu, wxID_ANY, _L("Import ZIP Archive") + dots, _L("Load models contained within a ZIP archive"), [this](wxCommandEvent&) { if (m_plater) m_plater->import_zip_archive(); }, "menu_import", nullptr, [this]() { return can_add_models(); }); append_menu_item(import_menu, wxID_ANY, _L("Import Configs") + dots /*+ "\t" + ctrl + "I"*/, _L("Load configs"), [this](wxCommandEvent&) { load_config_file(); }, "menu_import", nullptr, - [this](){return true; }, this); + [](){return true; }, this); append_submenu(fileMenu, import_menu, wxID_ANY, _L("Import"), ""); @@ -2968,7 +3055,7 @@ void MainFrame::init_menubar_as_editor() _L("Duplicate the current plate"),[this](wxCommandEvent&) { m_plater->duplicate_plate(); }, - "menu_remove", nullptr, [this](){return true;}, this); + "menu_remove", nullptr, [](){return true;}, this); editMenu->AppendSeparator(); #else // BBS undo @@ -3068,10 +3155,10 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return can_clone(); }, this); editMenu->AppendSeparator(); append_menu_item(editMenu, wxID_ANY, _L("Duplicate Current Plate"), - _L("Duplicate the current plate"),[this, handle_key_event](wxCommandEvent&) { + _L("Duplicate the current plate"),[this](wxCommandEvent&) { m_plater->duplicate_plate(); }, - "", nullptr, [this](){return true;}, this); + "", nullptr, [](){return true;}, this); editMenu->AppendSeparator(); #endif @@ -3135,13 +3222,13 @@ void MainFrame::init_menubar_as_editor() //BBS perspective view wxWindowID camera_id_base = wxWindow::NewControlId(int(wxID_CAMERA_COUNT)); auto perspective_item = append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), - [this](wxCommandEvent&) { + [](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", true); wxGetApp().update_ui_from_settings(); }, nullptr); //BBS orthogonal view auto orthogonal_item = append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), - [this](wxCommandEvent&) { + [](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", false); wxGetApp().update_ui_from_settings(); }, nullptr); @@ -3157,7 +3244,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().app_config->get_bool("auto_perspective"); }, this); + []() { return wxGetApp().app_config->get_bool("auto_perspective"); }, this); viewMenu->AppendSeparator(); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &G-code Window") + sep + "C", _L("Show G-code window in Preview scene."), @@ -3166,7 +3253,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_tabpanel->GetSelectedPageName() == TAB_ID_PREVIEW; }, - [this]() { return wxGetApp().show_gcode_window(); }, this); + []() { return wxGetApp().show_gcode_window(); }, this); append_menu_check_item( viewMenu, wxID_ANY, _L("Show 3D Navigator"), _L("Show 3D navigator in Prepare and Preview scene."), @@ -3175,7 +3262,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().show_3d_navigator(); }, this); + []() { return wxGetApp().show_3d_navigator(); }, this); append_menu_check_item(viewMenu, wxID_ANY, _L("Show Gridlines"), _L("Show Gridlines on plate"), [this](wxCommandEvent&) { @@ -3183,7 +3270,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return is_prepare_or_preview_tab(); }, - [this]() { return wxGetApp().show_plate_gridlines(); }, this); + []() { return wxGetApp().show_plate_gridlines(); }, this); append_menu_item( viewMenu, wxID_ANY, _L("Reset Window Layout"), _L("Reset to default window layout"), @@ -3212,7 +3299,7 @@ void MainFrame::init_menubar_as_editor() m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_tabpanel->GetSelectedPageName() == TAB_ID_PREPARE; }, - [this]() { return wxGetApp().show_outline(); }, this); + []() { return wxGetApp().show_outline(); }, this); /*viewMenu->AppendSeparator(); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Wireframe") + "\t" + ctrl + shift + _L("Enter"), _L("Show wireframes in 3D scene."), @@ -3244,105 +3331,16 @@ void MainFrame::init_menubar_as_editor() auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); #endif - //auto printer_item = new wxMenuItem(parent_menu, ConfigMenuPrinter + config_id_base, _L("Printer"), ""); - //auto language_item = new wxMenuItem(parent_menu, ConfigMenuLanguage + config_id_base, _L("Switch Language"), ""); -// parent_menu->Bind(wxEVT_MENU, [this, config_id_base](wxEvent& event) { -// switch (event.GetId() - config_id_base) { -// //case ConfigMenuLanguage: -// //{ -// // /* Before change application language, let's check unsaved changes on 3D-Scene -// // * and draw user's attention to the application restarting after a language change -// // */ -// // { -// // // the dialog needs to be destroyed before the call to switch_language() -// // // or sometimes the application crashes into wxDialogBase() destructor -// // // so we put it into an inner scope -// // wxString title = _L("Language selection"); -// // wxMessageDialog dialog(nullptr, -// // _L("Switching the language requires application restart.\n") + "\n\n" + -// // _L("Do you want to continue?"), -// // title, -// // wxICON_QUESTION | wxOK | wxCANCEL); -// // if (dialog.ShowModal() == wxID_CANCEL) -// // return; -// // } -// -// // wxGetApp().switch_language(); -// // break; -// //} -// //case ConfigMenuWizard: -// //{ -// // wxGetApp().run_wizard(ConfigWizard::RR_USER); -// // break; -// //} -// case ConfigMenuPrinter: -// { -// wxGetApp().params_dialog()->Popup(); -// wxGetApp().get_tab(Preset::TYPE_PRINTER)->restore_last_select_item(); -// break; -// } -// case ConfigMenuPreferences: -// { -// CallAfter([this] { -// PreferencesDialog dlg(this); -// dlg.ShowModal(); -//#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER -// if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) -//#else -// if (dlg.seq_top_layer_only_changed()) -//#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER -// plater()->refresh_print(); -//#if ENABLE_CUSTOMIZABLE_FILES_ASSOCIATION_ON_WIN -//#ifdef _WIN32 -// /* -// if (wxGetApp().app_config()->get("associate_3mf") == "true") -// wxGetApp().associate_3mf_files(); -// if (wxGetApp().app_config()->get("associate_stl") == "true") -// wxGetApp().associate_stl_files(); -// /*if (wxGetApp().app_config()->get("associate_step") == "true") -// wxGetApp().associate_step_files();*/ -//#endif // _WIN32 -//#endif -// }); -// break; -// } -// default: -// break; -// } -// }); #ifdef __APPLE__ wxString about_title = wxString::Format(_L("&About %s"), SLIC3R_APP_FULL_NAME); - //auto about_item = new wxMenuItem(parent_menu, OrcaSlicerMenuAbout + bambu_studio_id_base, about_title, ""); - //parent_menu->Bind(wxEVT_MENU, [this, bambu_studio_id_base](wxEvent& event) { - // switch (event.GetId() - bambu_studio_id_base) { - // case OrcaSlicerMenuAbout: - // Slic3r::GUI::about(); - // break; - // case OrcaSlicerMenuPreferences: - // CallAfter([this] { - // PreferencesDialog dlg(this); - // dlg.ShowModal(); - //#if ENABLE_GCODE_LINES_ID_IN_H_SLIDER - // if (dlg.seq_top_layer_only_changed() || dlg.seq_seq_top_gcode_indices_changed()) - //#else - // if (dlg.seq_top_layer_only_changed()) - //#endif // ENABLE_GCODE_LINES_ID_IN_H_SLIDER - // plater()->refresh_print(); - // }); - // break; - // default: - // break; - // } - //}); - //parent_menu->Insert(0, about_item); append_menu_item( parent_menu, wxID_ANY, _L(about_title), "", - [this](wxCommandEvent &) { Slic3r::GUI::about();}, + [](wxCommandEvent &) { Slic3r::GUI::about();}, "", nullptr, []() { return true; }, this, 0); append_menu_item( parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { wxGetApp().open_preferences(); }, "", nullptr, []() { return true; }, this, 1); @@ -3361,7 +3359,7 @@ void MainFrame::init_menubar_as_editor() append_menu_item( m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\t" + ctrl + "P", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit wxGetApp().open_preferences(); }, @@ -3393,14 +3391,14 @@ void MainFrame::init_menubar_as_editor() into_u8(_L("Syncing presets from cloud\u2026"))); wxGetApp().restart_sync_user_preset(); }, "", nullptr, - [this]() { + []() { return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); }, this); top_menu->AppendSeparator(); append_menu_item( top_menu, wxID_ANY, _L("Plugins") + "\t", "", - [this](wxCommandEvent &) { + [](wxCommandEvent &) { wxGetApp().open_plugins_dialog(); }, "", nullptr, []() { return true; }, this); @@ -3501,7 +3499,7 @@ void MainFrame::init_menubar_as_editor() [this]() {return m_plater->is_view3D_shown();; }, this); // help - append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), [this](wxCommandEvent &) + append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), [](wxCommandEvent &) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); @@ -3530,13 +3528,13 @@ void MainFrame::init_menubar_as_editor() into_u8(_L("Syncing presets from cloud\u2026"))); wxGetApp().restart_sync_user_preset(); }, "", nullptr, - [this]() { + []() { return wxGetApp().is_user_login() && !wxGetApp().app_config->get_stealth_mode(); }, this); fileMenu->AppendSeparator(); append_menu_item( - fileMenu, wxID_ANY, _L("Plugins"), "", [this](wxCommandEvent&) { wxGetApp().open_plugins_dialog(); }, "", nullptr, + fileMenu, wxID_ANY, _L("Plugins"), "", [](wxCommandEvent&) { wxGetApp().open_plugins_dialog(); }, "", nullptr, []() { return true; }, this); fileMenu->AppendSeparator(); @@ -3640,7 +3638,7 @@ void MainFrame::init_menubar_as_editor() [this]() {return m_plater->is_view3D_shown();; }, this); // help append_menu_item(calib_menu, wxID_ANY, _L("Calibration Guide"), _L("Calibration Guide"), - [this](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, + [](wxCommandEvent&) { wxLaunchDefaultBrowser("https://www.orcaslicer.com/wiki/calibration_guide", wxBROWSER_NEW_WINDOW); }, "", nullptr, [this]() {return m_plater->is_view3D_shown();; }, this); m_menubar->Append(calib_menu,wxString::Format("&%s", _L("Calibration"))); @@ -4212,15 +4210,23 @@ std::wstring MainFrame::FileHistory::GetThumbnailUrl(int index) const return wss.str(); } +bool MainFrame::FileHistory::GetPublished(int index) const +{ + return index >= 0 && index < static_cast(m_published_files.size()) && m_published_files[index]; +} + void MainFrame::FileHistory::AddFileToHistory(const wxString &file) { if (this->m_fileMaxFiles == 0) return; wxFileHistory::AddFileToHistory(file); - if (m_load_called) + if (m_load_called) { m_thumbnails.push_front(bbs_3mf_get_thumbnail(into_u8(file).c_str())); - else + m_published_files.push_front(bbs_3mf_is_published(into_u8(file))); + } else { m_thumbnails.push_front(""); + m_published_files.push_front(false); + } } void MainFrame::FileHistory::RemoveFileFromHistory(size_t i) @@ -4229,6 +4235,7 @@ void MainFrame::FileHistory::RemoveFileFromHistory(size_t i) return; wxFileHistory::RemoveFileFromHistory(i); m_thumbnails.erase(m_thumbnails.begin() + i); + m_published_files.erase(m_published_files.begin() + i); } size_t MainFrame::FileHistory::FindFileInHistory(const wxString & file) @@ -4244,6 +4251,7 @@ void MainFrame::FileHistory::LoadThumbnails() if (!thumbnail.empty()) { m_thumbnails[i] = thumbnail; } + m_published_files[i] = bbs_3mf_is_published(into_u8(GetHistoryFile(i))); } }); m_load_called = true; @@ -4264,6 +4272,7 @@ void MainFrame::get_recent_projects(boost::property_tree::wptree &tree, int imag std::wstring proj = m_recent_projects.GetHistoryFile(i).ToStdWstring(); item.put(L"project_name", proj.substr(proj.find_last_of(L"/\\") + 1)); item.put(L"path", proj); + item.put(L"published", m_recent_projects.GetPublished(i) ? L"1" : L"0"); boost::system::error_code ec; std::time_t t = boost::filesystem::last_write_time(proj, ec); if (!ec) { @@ -4488,10 +4497,9 @@ std::string MainFrame::get_dir_name(const wxString &full_name) const // ---------------------------------------------------------------------------- SettingsDialog::SettingsDialog(MainFrame* mainframe) -:DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "settings_dialog"), +:DPIDialog(NULL, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, "settings_dialog") //: DPIDialog(mainframe, wxID_ANY, wxString(SLIC3R_APP_NAME) + " - " + _L("Settings"), wxDefaultPosition, wxDefaultSize, // wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMINIMIZE_BOX | wxMAXIMIZE_BOX, "settings_dialog"), - m_main_frame(mainframe) { if (wxGetApp().is_gcode_viewer()) return; diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 2052860d80..bbdd8a4694 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -40,6 +40,9 @@ // Stable identifiers for MainFrame::m_tabpanel's built-in pages. These are // names rather than positional indices so optional pages cannot shift them. #define TAB_ID_HOME "home" +#ifdef SLIC3R_CAD +#define TAB_ID_DESIGN "design" +#endif #define TAB_ID_PREPARE "prepare" #define TAB_ID_PREVIEW "preview" #define TAB_ID_MONITOR "monitor" @@ -65,7 +68,11 @@ namespace GUI class Tab; class PrintHostQueueDialog; class Plater; +#ifdef SLIC3R_CAD +class DesignPanel; +#endif class MainFrame; +class WebViewPanel; class ParamsDialog; #ifdef __WXGTK__ class ResizeEdgePanel; @@ -94,7 +101,6 @@ class SettingsDialog : public DPIDialog//DPIDialog { //wxNotebook* m_tabpanel { nullptr }; Notebook* m_tabpanel{ nullptr }; - MainFrame* m_main_frame { nullptr }; wxMenuBar* m_menubar{ nullptr }; public: SettingsDialog(MainFrame* mainframe); @@ -179,6 +185,7 @@ class MainFrame : public DPIFrame { FileHistory(int max) : wxFileHistory(max) {} std::wstring GetThumbnailUrl(int index) const; + bool GetPublished(int index) const; virtual void AddFileToHistory(const wxString &file); virtual void RemoveFileFromHistory(size_t i); @@ -189,6 +196,7 @@ class MainFrame : public DPIFrame void SetMaxFiles(int max); private: std::deque m_thumbnails; + std::deque m_published_files; // parallel to m_thumbnails: is it a published 3mf? bool m_load_called = false; }; @@ -342,6 +350,8 @@ public: bool can_upload() const; void save_project(); bool save_project_as(const wxString& filename = wxString()); + // Open the Publish dialog and export the selected settings as a published 3MF. + void publish_project(); void add_to_recent_projects(const wxString& filename); void get_recent_projects(boost::property_tree::wptree &tree, int images); @@ -380,6 +390,17 @@ public: BBLTopbar* m_topbar{ nullptr }; PrintHostQueueDialog* printhost_queue_dlg() { return m_printhost_queue_dlg; } Plater* m_plater { nullptr }; +#ifdef SLIC3R_CAD + // The tab page is the placeholder; m_design_panel stays null until the tab is first + // selected, so everything the Design panel builds stays off the startup path. + wxPanel* m_design_page { nullptr }; + DesignPanel* m_design_panel { nullptr }; + // Builds the Design panel if it does not exist yet and returns it (null only before the + // placeholder page itself exists). Main thread only -- it creates wx controls. Both the + // tab activation and the MCP socket go through this: the socket is driven headlessly, + // with nobody to click the tab, and without this every verb would answer "not ready". + DesignPanel* ensure_design_panel(); +#endif //BBS: GUI refactor MonitorPanel* m_monitor{ nullptr }; diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index 36316f8ff5..e9e1f56b03 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -2,6 +2,9 @@ #include "ImageGrid.h" #include "I18N.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "DeviceManager.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "Plater.hpp" #include "Widgets/Button.hpp" #include "Widgets/SwitchButton.hpp" diff --git a/src/slic3r/GUI/MediaFilePanel.h b/src/slic3r/GUI/MediaFilePanel.h index 72fbc96a13..36696d2225 100644 --- a/src/slic3r/GUI/MediaFilePanel.h +++ b/src/slic3r/GUI/MediaFilePanel.h @@ -61,7 +61,6 @@ private: ::Button *m_button_year = nullptr; ::Button *m_button_month = nullptr; ::Button *m_button_all = nullptr; - ::Label *m_switch_label = nullptr; ::StaticBox * m_type_panel = nullptr; ::Button * m_button_video = nullptr; diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 90e956be69..557d859cf7 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -3,6 +3,11 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/Label.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" +#include "DeviceManager.hpp" +#include "DeviceCore/DevConfigUtil.h" +#include "slic3r/Utils/NetworkAgent.hpp" +#include "libslic3r/Thread.hpp" #include "libslic3r/AppConfig.hpp" #include "I18N.hpp" #include "MsgDialog.hpp" @@ -13,6 +18,7 @@ #include #include #include +#include #include #undef pid_t #include @@ -39,13 +45,14 @@ static std::map error_messages = { namespace Slic3r { namespace GUI { -MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const wxPoint &pos, const wxSize &size) +MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl3 *media_ctrl, const wxPoint &pos, const wxSize &size) : wxPanel(parent, wxID_ANY, pos, size) , m_media_ctrl(media_ctrl) { SetLabel("MediaPlayCtrl"); SetBackgroundColour(*wxWHITE); m_media_ctrl->Bind(wxEVT_MEDIA_STATECHANGED, &MediaPlayCtrl::onStateChanged, this); + m_media_ctrl->SetIdleImage(from_u8(resources_dir() + "/images/live_stream_default.png")); m_button_play = new Button(this, "", "media_play", wxBORDER_NONE); m_button_play->SetCanFocus(false); @@ -70,7 +77,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w auto ip = str.find(' ', ik); if (ip == wxString::npos) ip = str.Length(); auto v = str.Mid(ik, ip - ik); - if (k == "T:" && v.Length() == 8) { + if (strcmp(k, "T:") == 0 && v.Length() == 8) { long h = 0,m = 0,s = 0; v.Left(2).ToLong(&h); v.Mid(3, 2).ToLong(&m); @@ -177,13 +184,6 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj) if (machine == m_machine) { if (m_last_state == MEDIASTATE_IDLE && IsEnabled()) Play(); - else if (m_last_state == MEDIASTATE_LOADING && m_tutk_state == "disable" - && m_last_user_play + wxTimeSpan::Seconds(3) < wxDateTime::Now()) { - // resend ttcode to printer - if (auto agent = wxGetApp().getAgent()) - agent->get_camera_url(machine, [](auto) {}, wxGetApp().get_printer_cloud_provider()); - m_last_user_play = wxDateTime::Now(); - } return; } m_machine = machine; @@ -313,7 +313,7 @@ void MediaPlayCtrl::Play() // !m_lan_mode && !m_remote_proto && m_lan_proto == LVL_None (x) if (m_lan_proto <= MachineObject::LVL_Disable && (m_lan_mode || !m_remote_proto)) { - Stop(m_lan_proto == MachineObject::LVL_None + Stop(m_lan_proto == MachineObject::LVL_None ? _L("A problem occurred. Please update the printer firmware and try again.") : _L("LAN Only Liveview is off. Please turn on the liveview on printer screen.")); return; @@ -351,7 +351,7 @@ void MediaPlayCtrl::Play() url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); url += "&cli_ver=" + std::string(SLIC3R_VERSION); } - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(url, + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(url, {"?uid=", "authkey=", "passwd=", "license=", "token="}); CallAfter([this, m, url] { if (m != m_machine) { @@ -426,7 +426,7 @@ void MediaPlayCtrl::Stop(wxString const &msg, wxString const &msg2) auto tunnel = m_url.empty() ? "" : into_u8(wxURI(m_url).GetPath()).substr(1); if (auto n = tunnel.find_first_of("/_"); n != std::string::npos) tunnel = tunnel.substr(0, n); - if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 + if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 && m_last_failed_codes.find(m_failed_code) == m_last_failed_codes.end() && (m_user_triggered || m_failed_retry > 3)) { m_last_failed_codes.insert(m_failed_code); @@ -500,13 +500,13 @@ void MediaPlayCtrl::ToggleStream() DownloadProgressDialog2(MediaPlayCtrl *ctrl) : DownloadProgressDialog(_L("Downloading Virtual Camera Tools")), ctrl(ctrl) {} struct UpgradeNetworkJob2 : UpgradeNetworkJob { - UpgradeNetworkJob2(std::shared_ptr pri) : UpgradeNetworkJob() { + UpgradeNetworkJob2() { name = "cameratools"; package_name = "camera_tools.zip"; } }; - std::shared_ptr make_job(std::shared_ptr pri) - { return std::make_shared(pri); } + std::unique_ptr make_job() override + { return std::make_unique(); } void on_finish() override { ctrl->CallAfter([ctrl = this->ctrl] { ctrl->ToggleStream(); }); @@ -560,7 +560,7 @@ void MediaPlayCtrl::ToggleStream() url += "&cli_id=" + wxGetApp().app_config->get("slicer_uuid"); url += "&cli_ver=" + std::string(SLIC3R_VERSION); } - BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, {"?uid=", "authkey=", "passwd=", "license=", "token="}); CallAfter([this, m, url] { if (m != m_machine) return; @@ -580,8 +580,8 @@ void MediaPlayCtrl::ToggleStream() }, wxGetApp().get_printer_cloud_provider()); } -void MediaPlayCtrl::msw_rescale() { - m_button_play->Rescale(); +void MediaPlayCtrl::msw_rescale() { + m_button_play->Rescale(); } void MediaPlayCtrl::jump_to_play() @@ -715,7 +715,9 @@ void MediaPlayCtrl::media_proc() break; } else if (url == "") { + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: start play"; m_media_ctrl->Play(); + BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: end play"; } else { BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: start load"; @@ -771,15 +773,15 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_options::overwrite_existing); } - boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir), - boost::process::windows::create_no_window, + boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir), + boost::process::windows::create_no_window, boost::process::std_out > intermediate, boost::process::limit_handles); - boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::windows::create_no_window, + boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::windows::create_no_window, boost::process::std_in < intermediate, boost::process::limit_handles); #else boost::filesystem::permissions(file_source, boost::filesystem::owner_exe | boost::filesystem::add_perms); boost::filesystem::permissions(file_ffmpeg, boost::filesystem::owner_exe | boost::filesystem::add_perms); - boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::start_dir(start_dir), + boost::process::child process_source(file_source, file_url2.data().AsInternal(), boost::process::start_dir(start_dir), boost::process::std_out > intermediate, boost::process::limit_handles); boost::process::child process_ffmpeg(file_ffmpeg, configss, boost::process::std_in < intermediate, boost::process::limit_handles); #endif @@ -830,27 +832,16 @@ bool MediaPlayCtrl::get_stream_url(std::string *url) }} -void wxMediaCtrl2::DoSetSize(int x, int y, int width, int height, int sizeFlags) +void wxMediaCtrl_OnSize(wxWindow * ctrl, wxSize const & videoSize, int width, int height) { -#ifdef __WXMAC__ - wxWindow::DoSetSize(x, y, width, height, sizeFlags); -#else - wxMediaCtrl::DoSetSize(x, y, width, height, sizeFlags); -#endif -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_gtk_video_window) { - const wxSize client_size = GetClientSize(); - m_gtk_video_window->SetSize(0, 0, client_size.GetWidth(), client_size.GetHeight()); - } -#endif - if (sizeFlags & wxSIZE_USE_EXISTING) return; - wxSize size = m_video_size; + wxSize size = videoSize; + if (!size.IsFullySpecified()) size = {16, 9}; int maxHeight = (width * size.GetHeight() + size.GetHeight() - 1) / size.GetWidth(); - if (maxHeight != GetMaxHeight()) { - // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2::DoSetSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; - SetMaxSize({-1, maxHeight}); - CallAfter([this] { - if (auto p = GetParent()) { + if (maxHeight != ctrl->GetMaxHeight()) { + // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl_OnSize: width: " << width << ", height: " << height << ", maxHeight: " << maxHeight; + ctrl->SetMaxSize({-1, maxHeight}); + ctrl->CallAfter([ctrl] { + if (auto p = ctrl->GetParent()) { p->Layout(); p->Refresh(); } diff --git a/src/slic3r/GUI/MediaPlayCtrl.h b/src/slic3r/GUI/MediaPlayCtrl.h index f5e5dcddfc..0a01daefc9 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.h +++ b/src/slic3r/GUI/MediaPlayCtrl.h @@ -8,7 +8,7 @@ #ifndef MediaPlayCtrl_h #define MediaPlayCtrl_h -#include "wxMediaCtrl2.h" +#include "wxMediaCtrl3.h" #include @@ -30,7 +30,7 @@ namespace GUI { class MediaPlayCtrl : public wxPanel { public: - MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); + MediaPlayCtrl(wxWindow *parent, wxMediaCtrl3 *media_ctrl, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize); ~MediaPlayCtrl(); @@ -75,7 +75,7 @@ private: // token std::shared_ptr m_token = std::make_shared(0); - wxMediaCtrl2 * m_media_ctrl; + wxMediaCtrl3 * m_media_ctrl; wxMediaState m_last_state = MEDIASTATE_IDLE; std::string m_machine; int m_lan_proto = 0; @@ -90,7 +90,7 @@ private: bool m_device_busy = false; bool m_disable_lan = false; wxString m_url; - + std::deque m_tasks; boost::mutex m_mutex; boost::condition_variable m_cond; diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index bc6c60a360..173c5d2f13 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -297,7 +297,7 @@ void MeshClipper::recalculate_triangles() // it so it lies on our line. This will be the figure to subtract // from the cut. The coordinates must not overflow after the transform, // make the rectangle a bit smaller. - const coord_t size = (std::numeric_limits::max()/2 - scale_(std::max(std::abs(e * a), std::abs(e * b)))) / 4; + const coord_t size = (double(std::numeric_limits::max()/2) - scale_(std::max(std::abs(e * a), std::abs(e * b)))) / 4; Polygons ep {Polygon({Point(-size, 0), Point(size, 0), Point(size, 2*size), Point(-size, 2*size)})}; ep.front().rotate(angle); ep.front().translate(scale_(-e * a), scale_(-e * b)); @@ -352,7 +352,7 @@ void MeshClipper::recalculate_triangles() // To prevent overflow after scaling, downscale the input if needed: double extra_scale = 1.; - coord_t limit = coord_t(std::min(std::numeric_limits::max() / (2. * std::max(1., scale_x)), std::numeric_limits::max() / (2. * std::max(1., scale_y)))); + coord_t limit = coord_t(std::min(double(std::numeric_limits::max()) / (2. * std::max(1., scale_x)), double(std::numeric_limits::max()) / (2. * std::max(1., scale_y)))); coord_t max_coord = 0; for (const Point& pt : exp.contour) max_coord = std::max(max_coord, std::max(std::abs(pt.x()), std::abs(pt.y()))); diff --git a/src/slic3r/GUI/MixedFilamentDialog.cpp b/src/slic3r/GUI/MixedFilamentDialog.cpp index 902c12d27b..8176a76202 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.cpp +++ b/src/slic3r/GUI/MixedFilamentDialog.cpp @@ -126,7 +126,6 @@ MixedFilamentDialog::MixedFilamentDialog(wxWindow* parent, const std::vector& physical_types) : DPIDialog(parent, wxID_ANY, _L("Add Mixed Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) - , m_edit_mode(false) , m_physical_colors(physical_colors) , m_physical_names(physical_names) , m_physical_types(physical_types) @@ -157,7 +156,6 @@ MixedFilamentDialog::MixedFilamentDialog(wxWindow* parent, : DPIDialog(parent, wxID_ANY, _L("Edit Mixed Filament"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_result(existing) - , m_edit_mode(true) , m_physical_colors(physical_colors) , m_physical_names(physical_names) , m_physical_types(physical_types) @@ -847,23 +845,8 @@ wxBoxSizer* MixedFilamentDialog::create_ratio_slider() m_ratio_bar->Bind(wxEVT_PAINT, [this](wxPaintEvent&) { wxBufferedPaintDC dc(m_ratio_bar); wxSize sz = m_ratio_bar->GetClientSize(); - - wxColour col_a = comp_colour(0), col_b = comp_colour(1); - - for (int x = 0; x < sz.GetWidth(); ++x) { - double t = (double)x / sz.GetWidth(); - wxColour c = blend_colors(col_a, col_b, 1.0 - t); - dc.SetPen(wxPen(c)); - dc.DrawLine(x, 0, x, sz.GetHeight()); - } - - int div_x = (int)(ratio(1) / 100.0 * sz.GetWidth()); - // Fixed in both themes, like the triangle picker's drag handle: the divider is drawn over - // blended filament colour, so it has to keep its contrast against data rather than chrome. - dc.SetPen(wxPen(wxColour(80, 80, 80), FromDIP(4))); - dc.DrawLine(div_x, 0, div_x, sz.GetHeight()); - dc.SetPen(wxPen(*wxWHITE, FromDIP(2))); - dc.DrawLine(div_x, 0, div_x, sz.GetHeight()); + draw_mixed_ratio_blend_bar(dc, wxRect(0, 0, sz.GetWidth(), sz.GetHeight()), + comp_colour(0), comp_colour(1), ratio(1) / 100.0); }); m_ratio_bar->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent& e) { @@ -919,52 +902,8 @@ wxBoxSizer* MixedFilamentDialog::create_ratio_slider() } // ---- Triangle (ternary) ratio picker ---- - -// Barycentric coordinate utilities -struct TriPoint { double x, y; }; - -static double tri_signed_area2(TriPoint a, TriPoint b, TriPoint c) -{ - return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y); -} - -static bool tri_contains(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) -{ - double total = tri_signed_area2(v0, v1, v2); - if (std::abs(total) < 1e-9) return false; - double s0 = tri_signed_area2(p, v1, v2) / total; - double s1 = tri_signed_area2(v0, p, v2) / total; - double s2 = 1.0 - s0 - s1; - return s0 >= -0.001 && s1 >= -0.001 && s2 >= -0.001; -} - -static void tri_barycentric(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2, - double& w0, double& w1, double& w2) -{ - double total = std::abs(tri_signed_area2(v0, v1, v2)); - if (total < 1e-9) { w0 = w1 = w2 = 1.0 / 3.0; return; } - w0 = std::abs(tri_signed_area2(p, v1, v2)) / total; - w1 = std::abs(tri_signed_area2(v0, p, v2)) / total; - w2 = 1.0 - w0 - w1; - w0 = std::clamp(w0, 0.0, 1.0); - w1 = std::clamp(w1, 0.0, 1.0); - w2 = std::clamp(w2, 0.0, 1.0); - double s = w0 + w1 + w2; - if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } -} - -static TriPoint tri_clamp(TriPoint p, TriPoint v0, TriPoint v1, TriPoint v2) -{ - double w0, w1, w2; - tri_barycentric(p, v0, v1, v2, w0, w1, w2); - w0 = std::clamp(w0, 0.0, 1.0); - w1 = std::clamp(w1, 0.0, 1.0); - w2 = std::clamp(w2, 0.0, 1.0); - double s = w0 + w1 + w2; - if (s > 0) { w0 /= s; w1 /= s; w2 /= s; } - return {w0 * v0.x + w1 * v1.x + w2 * v2.x, - w0 * v0.y + w1 * v1.y + w2 * v2.y}; -} +// The barycentric utilities (TriPoint, tri_contains, tri_barycentric, tri_clamp) live in +// FilamentBitmapUtils so the Publish dialog can mirror this picker read-only. wxBoxSizer* MixedFilamentDialog::create_triangle_picker() { @@ -998,72 +937,15 @@ wxBoxSizer* MixedFilamentDialog::create_triangle_picker() wxSize sz = m_triangle_panel->GetClientSize(); auto [v0, v1, v2] = get_vertices(); - wxColour tri_bg = StateColor::darkModeColorFor(*wxWHITE); - dc.SetBrush(wxBrush(tri_bg)); - dc.SetPen(*wxTRANSPARENT_PEN); - dc.DrawRectangle(0, 0, sz.GetWidth(), sz.GetHeight()); - - wxColour c0 = comp_colour(0), c1 = comp_colour(1), c2 = comp_colour(2); - - const bool cache_valid = m_tri_cache_bmp.IsOk() && - m_tri_cache_size == sz && - m_tri_cache_c0 == c0 && m_tri_cache_c1 == c1 && m_tri_cache_c2 == c2; - - if (!cache_valid) { - int min_y = (int)std::min({v0.y, v1.y, v2.y}); - int max_y = (int)std::max({v0.y, v1.y, v2.y}); - int min_x = (int)std::min({v0.x, v1.x, v2.x}); - int max_x = (int)std::max({v0.x, v1.x, v2.x}); - - m_tri_cache_bmp = wxBitmap(sz.GetWidth(), sz.GetHeight(), 24); - wxMemoryDC mdc(m_tri_cache_bmp); - mdc.SetBrush(wxBrush(tri_bg)); - mdc.SetPen(*wxTRANSPARENT_PEN); - mdc.DrawRectangle(0, 0, sz.GetWidth(), sz.GetHeight()); - - for (int py = min_y; py <= max_y; ++py) { - for (int px = min_x; px <= max_x; ++px) { - TriPoint p = {(double)px, (double)py}; - if (!tri_contains(p, v0, v1, v2)) continue; - double w0, w1, w2; - tri_barycentric(p, v0, v1, v2, w0, w1, w2); - unsigned char mr, mg, mb; - if (w0 + w1 > 1e-6) { - float t01 = static_cast(w1 / (w0 + w1)); - Slic3r::filament_mixer_lerp(c0.Red(), c0.Green(), c0.Blue(), - c1.Red(), c1.Green(), c1.Blue(), - t01, &mr, &mg, &mb); - float t2 = static_cast(w2); - Slic3r::filament_mixer_lerp(mr, mg, mb, - c2.Red(), c2.Green(), c2.Blue(), - t2, &mr, &mg, &mb); - } else { - mr = c2.Red(); mg = c2.Green(); mb = c2.Blue(); - } - mdc.SetPen(wxPen(wxColour(mr, mg, mb))); - mdc.DrawPoint(px, py); - } - } - - mdc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#CECECE")), 1)); - mdc.SetBrush(*wxTRANSPARENT_BRUSH); - wxPoint pts[3] = {{(int)v0.x, (int)v0.y}, {(int)v1.x, (int)v1.y}, {(int)v2.x, (int)v2.y}}; - mdc.DrawPolygon(3, pts); - - mdc.SelectObject(wxNullBitmap); - m_tri_cache_c0 = c0; m_tri_cache_c1 = c1; m_tri_cache_c2 = c2; - m_tri_cache_size = sz; - } - - dc.DrawBitmap(m_tri_cache_bmp, 0, 0); - - // Drag handle (always redrawn on top of cached bitmap) - double hx = m_tri_wx * v0.x + m_tri_wy * v1.x + m_tri_wz * v2.x; - double hy = m_tri_wx * v0.y + m_tri_wy * v1.y + m_tri_wz * v2.y; - int handle_r = FromDIP(5); - dc.SetBrush(*wxWHITE_BRUSH); - dc.SetPen(wxPen(wxColour("#262E30"), FromDIP(2))); - dc.DrawCircle((int)hx, (int)hy, handle_r); + // Draw the background, cached barycentric fill, outline and drag-handle marker through the + // shared picker painter (same geometry the read-only Publish preview uses). + draw_mixed_triangle_picker(dc, sz, + {comp_colour(0), comp_colour(1), comp_colour(2)}, + {m_tri_wx, m_tri_wy, m_tri_wz}, + {StateColor::darkModeColorFor(*wxWHITE), + StateColor::darkModeColorFor(wxColour("#CECECE")), + StateColor::darkModeColorFor(wxColour("#262E30")), + StateColor::darkModeColorFor(COLOR_LABEL_MUTED)}); if (m_result.ratios.size() >= 3) { dc.SetFont(::Label::Body_10); diff --git a/src/slic3r/GUI/MixedFilamentDialog.hpp b/src/slic3r/GUI/MixedFilamentDialog.hpp index ea8ac5ad16..381896494e 100644 --- a/src/slic3r/GUI/MixedFilamentDialog.hpp +++ b/src/slic3r/GUI/MixedFilamentDialog.hpp @@ -115,7 +115,6 @@ private: wxColour comp_colour(size_t i) const; MixedFilamentResult m_result; - bool m_edit_mode{false}; std::vector m_physical_colors; std::vector m_physical_names; std::vector m_physical_types; @@ -170,10 +169,6 @@ private: // Triangle picker drag point (barycentric weights) double m_tri_wx{0.333}, m_tri_wy{0.333}, m_tri_wz{0.334}; - // Cached triangle color bitmap (invalidated when colors or size change) - wxBitmap m_tri_cache_bmp; - wxColour m_tri_cache_c0, m_tri_cache_c1, m_tri_cache_c2; - wxSize m_tri_cache_size; std::array m_triangle_ratio_labels{nullptr, nullptr, nullptr}; }; diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index fe115a351a..9252b04559 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -78,7 +78,6 @@ private: Tabbook* m_tabpanel{ nullptr }; wxSizer* m_main_sizer{ nullptr }; - AddMachinePanel* m_status_add_machine_panel; StatusPanel* m_status_info_panel; MediaFilePanel* m_media_file_panel; UpgradePanel* m_upgrade_panel; @@ -86,11 +85,6 @@ private: /* side tools */ SideTools* m_side_tools{nullptr}; - wxStaticBitmap* m_bitmap_printer_type; - wxStaticBitmap* m_bitmap_arrow; - wxStaticText* m_staticText_printer_name; - wxStaticBitmap* m_bitmap_wifi_signal; - wxBoxSizer * m_side_tools_sizer; SelectMachinePopup m_select_machine; /* images */ @@ -101,7 +95,6 @@ private: wxBitmap m_printer_img; wxBitmap m_arrow_img; - int last_wifi_signal = -1; int last_status; bool m_initialized { false }; bool update_flag{false}; diff --git a/src/slic3r/GUI/MonitorBasePanel.h b/src/slic3r/GUI/MonitorBasePanel.h index c5c76acec3..42424a7187 100644 --- a/src/slic3r/GUI/MonitorBasePanel.h +++ b/src/slic3r/GUI/MonitorBasePanel.h @@ -34,7 +34,6 @@ #include "Widgets/AxisCtrlButton.hpp" #include "Widgets/TextInput.hpp" #include "Widgets/StaticLine.hpp" -#include "wxMediaCtrl2.h" #include "MediaPlayCtrl.h" /////////////////////////////////////////////////////////////////////////// diff --git a/src/slic3r/GUI/Mouse3DController.cpp b/src/slic3r/GUI/Mouse3DController.cpp index 11709501ac..0317342412 100644 --- a/src/slic3r/GUI/Mouse3DController.cpp +++ b/src/slic3r/GUI/Mouse3DController.cpp @@ -1,6 +1,7 @@ #include "libslic3r/libslic3r.h" #include "libslic3r/PresetBundle.hpp" #include "Mouse3DController.hpp" +#include "GUI.hpp" #include "Camera.hpp" #include "GUI_App.hpp" @@ -498,7 +499,7 @@ void Mouse3DController::render_settings_dialog(GLCanvas3D& canvas) const ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0f, 20.0f)); static ImVec2 last_win_size(0.0f, 0.0f); bool shown = true; - if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse || ImGuiWindowFlags_NoTitleBar)) { + if (imgui.begin(_L("3Dconnexion settings"), &shown, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoTitleBar)) { if (shown) { ImVec2 win_size = ImGui::GetWindowSize(); if (last_win_size.x != win_size.x || last_win_size.y != win_size.y) { diff --git a/src/slic3r/GUI/MsgDialog.hpp b/src/slic3r/GUI/MsgDialog.hpp index 90fd160310..ed8079d88c 100644 --- a/src/slic3r/GUI/MsgDialog.hpp +++ b/src/slic3r/GUI/MsgDialog.hpp @@ -177,7 +177,6 @@ public: // Generic rich message dialog, used intead of wxRichMessageDialog class RichMessageDialog : public MsgDialog { - wxCheckBox* m_checkBox{ nullptr }; wxString m_checkBoxText; bool m_checkBoxValue{ false }; @@ -416,7 +415,6 @@ private: wxString m_new_keys; Button * m_update_btn = nullptr; Button * m_later_btn = nullptr; - wxStaticText *m_msg_text = nullptr; }; diff --git a/src/slic3r/GUI/MultiMachine.cpp b/src/slic3r/GUI/MultiMachine.cpp index f5ffd1319f..c0e84f40e9 100644 --- a/src/slic3r/GUI/MultiMachine.cpp +++ b/src/slic3r/GUI/MultiMachine.cpp @@ -217,7 +217,7 @@ std::vector selected_machines(const std::vector& dev_i SortItem::SortItem() { - sort_map.emplace(std::make_pair(SortRule::SR_None, [this](const DeviceItem* d1, const DeviceItem* d2) { + sort_map.emplace(std::make_pair(SortRule::SR_None, [](const DeviceItem* d1, const DeviceItem* d2) { return d1->state_dev_name > d2->state_dev_name; })); sort_map.emplace(std::make_pair(SortRule::SR_DEV_NAME, [this](const DeviceItem* d1, const DeviceItem* d2) { diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp index d6531cc8d4..792c23fb13 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.cpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -19,7 +19,7 @@ MultiMachineItem::MultiMachineItem(wxWindow* parent, MachineObject* obj) Bind(wxEVT_LEAVE_WINDOW, &MultiMachineItem::OnLeaveWindow, this); Bind(wxEVT_LEFT_DOWN, &MultiMachineItem::OnLeftDown, this); Bind(wxEVT_MOTION, &MultiMachineItem::OnMove, this); - Bind(EVT_MULTI_DEVICE_VIEW, [this, obj](auto& e) { + Bind(EVT_MULTI_DEVICE_VIEW, [obj](auto& e) { wxGetApp().mainframe->jump_to_monitor(obj->get_dev_id()); if (wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()) { wxGetApp().mainframe->m_monitor->get_status_panel()->get_media_play_ctrl()->jump_to_play(); diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp index 7bb12ffc75..9b5655a9ee 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.hpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -79,7 +79,6 @@ private: wxBoxSizer* m_main_sizer{nullptr}; wxBoxSizer* m_sizer_machine_list{nullptr}; wxScrolledWindow* m_machine_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // table head wxPanel* m_table_head_panel{ nullptr }; @@ -88,7 +87,6 @@ private: Button* m_task_name{ nullptr }; Button* m_status{ nullptr }; Button* m_action{ nullptr }; - Button* m_stop_all_botton{nullptr}; // tip when no device wxStaticText* m_tip_text{ nullptr }; @@ -100,8 +98,6 @@ private: int m_total_count{ 0 }; int m_count_page_item{ 10 }; - bool prev{ false }; - bool next{ false }; Button* btn_last_page{ nullptr }; Button* btn_next_page{ nullptr }; wxStaticText* st_page_number{ nullptr }; diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp index 88d03007b9..dd67e099a0 100644 --- a/src/slic3r/GUI/MultiMachinePage.cpp +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -80,7 +80,7 @@ void MultiMachinePage::init_tabpanel() sizer_side_tools->Add(m_side_tools, 1, wxEXPAND, 0); m_tabpanel = new Tabbook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, sizer_side_tools, wxNB_LEFT | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); m_tabpanel->SetBackgroundColour(wxColour("#FEFFFF")); - m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [this](wxBookCtrlEvent& e) {; }); + m_tabpanel->Bind(wxEVT_BOOKCTRL_PAGE_CHANGED, [](wxBookCtrlEvent& e) {; }); m_local_task_manager = new LocalTaskManagerPage(m_tabpanel); m_cloud_task_manager = new CloudTaskManagerPage(m_tabpanel); diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp index 0572c30d1b..724eeed2a9 100644 --- a/src/slic3r/GUI/MultiMachinePage.hpp +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -81,7 +81,6 @@ private: AppConfig* app_config; Label* m_label{ nullptr }; wxScrolledWindow* scroll_macine_list{ nullptr }; - wxBoxSizer* m_sizer_body{ nullptr }; wxBoxSizer* sizer_machine_list{ nullptr }; std::map m_device_items; int m_selected_count{0}; diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp index bca2de8761..48a7fbe43e 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.cpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -783,7 +783,7 @@ void LocalTaskManagerPage::refresh_user_device(bool clear) mtitem->m_send_time = task_state_info->get_sent_time(); mtitem->state_local_task = task_state_info->state(); - task_state_info->set_state_changed_fn([this, mtitem](TaskState state, int percent) { + task_state_info->set_state_changed_fn([mtitem](TaskState state, int percent) { mtitem->state_local_task = state; if (state == TaskState::TS_SEND_COMPLETED) { diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp index 0f676d06b3..f1b35ca2aa 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.hpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -99,7 +99,6 @@ private: wxBoxSizer* page_sizer{ nullptr }; wxBoxSizer* m_sizer_task_list{ nullptr }; wxScrolledWindow* m_task_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // table head wxPanel* m_table_head_panel{ nullptr }; @@ -113,7 +112,6 @@ private: Button* m_action{ nullptr }; // ctrl button for all - int m_sel_number{0}; wxPanel* m_ctrl_btn_panel{ nullptr }; wxBoxSizer* m_btn_sizer{ nullptr }; Button* btn_stop_all{ nullptr }; @@ -160,15 +158,12 @@ private: wxBoxSizer* m_sizer_task_list{ nullptr }; wxBoxSizer* m_main_sizer{ nullptr }; wxScrolledWindow* m_task_list{ nullptr }; - wxStaticText* m_selected_num{ nullptr }; // Flipping pages int m_current_page{ 0 }; int m_total_page{0}; int m_total_count{ 0 }; int m_count_page_item{ 10 }; - bool prev{ false }; - bool next{ false }; Button* btn_last_page{ nullptr }; Button* btn_next_page{ nullptr }; wxStaticText* st_page_number{ nullptr }; @@ -191,7 +186,6 @@ private: Button* m_action{ nullptr }; // ctrl button for all - int m_sel_number; wxPanel* m_ctrl_btn_panel{ nullptr }; wxBoxSizer* m_btn_sizer{ nullptr }; Button* btn_pause_all{ nullptr }; diff --git a/src/slic3r/GUI/NetworkPluginDialog.cpp b/src/slic3r/GUI/NetworkPluginDialog.cpp index bc898d0d24..42e1fc5fc5 100644 --- a/src/slic3r/GUI/NetworkPluginDialog.cpp +++ b/src/slic3r/GUI/NetworkPluginDialog.cpp @@ -156,14 +156,14 @@ void NetworkPluginDownloadDialog::create_update_available_ui(const std::string& auto daa_chk = new CheckBox(this); daa_chk->SetValue(cfg->is_network_update_prompt_disabled()); - daa_chk->Bind(wxEVT_TOGGLEBUTTON, [this](wxCommandEvent& e){ + daa_chk->Bind(wxEVT_TOGGLEBUTTON, [](wxCommandEvent& e){ auto cfg = wxGetApp().app_config; cfg->set_network_update_prompt_disabled(e.IsChecked()); cfg->save(); }); auto daa_str = new Label(this, _L("Don't Ask Again")); - auto on_toggle = [this, daa_chk]() { + auto on_toggle = [daa_chk]() { daa_chk->SetValue(!daa_chk->GetValue()); wxCommandEvent evt(wxEVT_TOGGLEBUTTON, daa_chk->GetId()); evt.SetEventObject(daa_chk); diff --git a/src/slic3r/GUI/NetworkTestDialog.cpp b/src/slic3r/GUI/NetworkTestDialog.cpp index 78f395febc..53876d9f97 100644 --- a/src/slic3r/GUI/NetworkTestDialog.cpp +++ b/src/slic3r/GUI/NetworkTestDialog.cpp @@ -268,7 +268,7 @@ void NetworkTestDialog::start_test_url(TestJob job, wxString name, wxString url) int result = -1; http.timeout_max(10) - .on_complete([this, &result](std::string body, unsigned status) { + .on_complete([&result](std::string body, unsigned status) { try { if (status == 200) { result = 0; diff --git a/src/slic3r/GUI/Notebook.cpp b/src/slic3r/GUI/Notebook.cpp index 673508454a..67c1831e4d 100644 --- a/src/slic3r/GUI/Notebook.cpp +++ b/src/slic3r/GUI/Notebook.cpp @@ -56,7 +56,7 @@ ButtonsListCtrl::ButtonsListCtrl(wxWindow *parent, wxBoxSizer* side_tools) : // BBS: disable custom paint //this->Bind(wxEVT_PAINT, &ButtonsListCtrl::OnPaint, this); - Bind(wxEVT_SYS_COLOUR_CHANGED, [this](auto& e){ + Bind(wxEVT_SYS_COLOUR_CHANGED, [](auto& e){ }); } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 5e83ad845f..2ee875901c 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -3083,7 +3083,7 @@ bool NotificationManager::push_notification_data(std::unique_ptractivate_existing(notification.get())) { - if (m_initialized) { // ignore update action - it cant be initialized if canvas and imgui context is not ready + if (m_initialized && m_imgui_ready) { if (notification->get_type() == NotificationType::SlicingWarning) { m_pop_notifications.back()->append(notification->get_data().ori_text); } else { @@ -3129,6 +3129,10 @@ void NotificationManager::stop_delayed_notifications_of_type(const NotificationT void NotificationManager::render_notifications(GLCanvas3D &canvas, float overlay_width, float bottom_margin, float right_margin) { + // Notifications render inside an ImGui frame, so the font atlas is built from this point on + // and pushed notifications may safely measure their text. + m_imgui_ready = true; + sort_notifications(); float bottom_up_last_y = bottom_margin; // ORCA dont scale margins @@ -3339,17 +3343,7 @@ size_t NotificationManager::get_notification_count() const void NotificationManager::bbl_show_plateinfo_notification(const std::string &text) { NotificationData data{NotificationType::BBLPlateInfo, NotificationLevel::PrintInfoNotificationLevel, BBL_NOTICE_MAX_INTERVAL, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBLPlateInfo) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + push_notification_data(data, 0); } void NotificationManager::bbl_close_3mf_warn_notification() @@ -3360,20 +3354,10 @@ void NotificationManager::bbl_close_3mf_warn_notification() } } -void NotificationManager::bbl_show_3mf_warn_notification(const std::string &text) +void NotificationManager::bbl_show_3mf_warn_notification(const std::string &text, NotificationLevel level) { - NotificationData data{NotificationType::BBL3MFInfo, NotificationLevel::ErrorNotificationLevel, BBL_NOTICE_MAX_INTERVAL, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBL3MFInfo) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + NotificationData data{NotificationType::BBL3MFInfo, level, BBL_NOTICE_MAX_INTERVAL, text}; + push_notification_data(data, 0); } void NotificationManager::bbl_close_plateinfo_notification() @@ -3388,17 +3372,7 @@ void NotificationManager::bbl_close_plateinfo_notification() void NotificationManager::bbl_show_preview_only_notification(const std::string &text) { NotificationData data{NotificationType::BBLPreviewOnlyMode, NotificationLevel::WarningNotificationLevel, 0, text}; - - for (std::unique_ptr ¬ification : m_pop_notifications) { - if (notification->get_type() == NotificationType::BBLPreviewOnlyMode) { - notification->reinit(); - notification->update(data); - return; - } - } - - auto notification = std::make_unique(data, m_id_provider, m_evt_handler); - push_notification_data(std::move(notification), 0); + push_notification_data(data, 0); } void NotificationManager::bbl_close_preview_only_notification() diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index bf0a5cfe1a..cb65524dac 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -378,7 +378,9 @@ public: void bbl_close_plateinfo_notification(); //BBS-- 3mf warning - void bbl_show_3mf_warn_notification(const std::string &text); + // level defaults to the historical error styling; callers reporting informational + // 3MF load notices (published settings) pass WarningNotificationLevel instead. + void bbl_show_3mf_warn_notification(const std::string &text, NotificationLevel level = NotificationLevel::ErrorNotificationLevel); void bbl_close_3mf_warn_notification(); //BBS--preview only mode @@ -1052,6 +1054,11 @@ private: bool m_is_dark = false; // set by init(), until false notifications are only added not updated and frame is not requested after push bool m_initialized{ false }; + // set by render_notifications() on the first rendered frame. m_initialized only proves the + // manager exists, not that the ImGui context can measure text: the font atlas is built lazily + // in ImGuiWrapper::new_frame() on the first GL render, so updating a notification before that + // (PopNotification::init -> count_spaces -> ImGui::CalcTextSize) dereferences a null font. + bool m_imgui_ready{ false }; // Target for wxWidgets events sent by clicking on the hyperlink available at some notifications. wxEvtHandler* m_evt_handler; // Cache of IDs to identify and reuse ImGUI windows. @@ -1076,7 +1083,10 @@ private: NotificationType::ProgressBar, NotificationType::PrintHostUpload, NotificationType::SimplifySuggestion, - NotificationType::ValidateWarning + NotificationType::ValidateWarning, + // A published file load can produce several distinct 3MF warnings (invalid values, + // skipped settings, changed slots); let them stack rather than clobber each other. + NotificationType::BBL3MFInfo }; //prepared (basic) notifications // non-static so its not loaded too early. If static, the translations wont load correctly. diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 2ee94dbeeb..4fce046162 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -158,7 +158,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/) ctrl_line.height = size.y; }; - auto add_buttons_width = [&h_pos, this] (int blinking_button_width) { + auto add_buttons_width = [&h_pos] (int blinking_button_width) { #ifndef DISABLE_BLINKING # ifndef DISABLE_UNDO_SYS h_pos += 3 * blinking_button_width; diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index 47f62aa168..ef5d4ba9d2 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -86,8 +86,6 @@ ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE /* | wxRESIZE_BORDER*/) - , m_filament_ids(in_out.filament_ids) - , m_first_extruder_id(in_out.first_extruder_id) { auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); @@ -254,7 +252,7 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c m_color_cluster_num_by_user_ebox->Bind(wxEVT_TEXT_ENTER, on_apply_color_cluster_text_modify); m_color_cluster_num_by_user_ebox->Bind(wxEVT_SPINCTRL, on_apply_color_cluster_text_modify); - m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [this](wxKeyEvent &e) { + m_color_cluster_num_by_user_ebox->Bind(wxEVT_CHAR, [](wxKeyEvent &e) { int keycode = e.GetKeyCode(); wxString input_char = wxString::Format("%c", keycode); long value; diff --git a/src/slic3r/GUI/ObjColorDialog.hpp b/src/slic3r/GUI/ObjColorDialog.hpp index 1ad74cdccd..34f9eb5de5 100644 --- a/src/slic3r/GUI/ObjColorDialog.hpp +++ b/src/slic3r/GUI/ObjColorDialog.hpp @@ -79,7 +79,6 @@ private: std::vector m_row_col_boxsizer_list; std::vector m_result_icon_list; int m_last_cluster_num{-1}; - const int m_combox_width{50}; int m_combox_icon_width; int m_combox_icon_height; wxButton * m_image_button = nullptr; @@ -95,7 +94,6 @@ private: std::vector m_cluster_map_filaments;//show middle int m_max_filament_index = 0; std::vector m_cluster_colours;//from_algo and show left - bool m_can_add_filament{true}; bool m_deal_thumbnail_flag{false}; std::vector m_new_add_colors; std::vector m_new_add_final_colors; @@ -124,8 +122,6 @@ private: wxBoxSizer * m_main_sizer = nullptr; wxBoxSizer * m_buttons_sizer = nullptr; std::unordered_map m_button_list; - std::vector& m_filament_ids; - unsigned char & m_first_extruder_id; }; #endif // _WIPE_TOWER_DIALOG_H_ \ No newline at end of file diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 25c13c4b8d..99151ca599 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -698,10 +698,15 @@ std::string OptionsGroup::pick_plugin(const ConfigOptionDef& opt) Slic3r::PluginManager& manager = Slic3r::PluginManager::instance(); const Slic3r::PluginCapabilityType plugin_type = Slic3r::plugin_capability_type_from_string(opt.plugin_type); if (plugin_type == Slic3r::PluginCapabilityType::Unknown) { - const std::string message = opt.plugin_type.empty() - ? "This setting does not specify a plugin capability type." - : "This setting specifies an unrecognized plugin capability type: '" + opt.plugin_type + "'."; - wxMessageBox(from_u8(message), _L("Plugin Selection"), wxOK | wxICON_WARNING, m_parent); + MessageDialog dlg(m_parent, + opt.plugin_type.empty() ? _L("This setting does not specify a plugin capability type.") + : _L("This setting specifies an unrecognized plugin capability type: ") + "'" + opt.plugin_type + "'.", + _L("Plugin Selection"), + wxOK | wxICON_WARNING + ); + dlg.CenterOnParent(); + dlg.ShowModal(); + return {}; } @@ -714,7 +719,13 @@ std::string OptionsGroup::pick_plugin(const ConfigOptionDef& opt) }); if (caps.empty()) { - wxMessageBox(_L("No plugins capabilities available for this type.\nEnable or install some to use."), _L("Plugin Selection"), wxOK | wxICON_INFORMATION, m_parent); + MessageDialog dlg(m_parent, + _L("No plugins capabilities available for this type.\nEnable or install some to use."), + _L("Plugin Selection"), + wxOK | wxICON_INFORMATION + ); + dlg.CenterOnParent(); + dlg.ShowModal(); return {}; } @@ -787,11 +798,9 @@ void ConfigOptionsGroup::back_to_config_value(const DynamicPrintConfig& config, #endif else if (opt_key == "printer_agent") { - // why: printer_agent is a coString kept out of m_opt_map. The generic non-opt_map revert - // below restores the edited config from get_value(), but a deregistered/"(missing)" saved - // id has no selectable row, so the field yields no value and the edited config keeps the - // user's interim pick -> stuck dirty. Restore the SAVED id straight into the edited config - // (displayable or not; config is the saved or system baseline), then repaint and notify. + // A deregistered/"(missing)" saved id has no selectable row, so the field yields no + // value. Restore the saved id directly instead of letting the generic revert path read + // the field value back into the edited config. const std::string saved_id = config.opt_string("printer_agent"); set_value(opt_key, saved_id); this->change_opt_value(opt_key, saved_id); diff --git a/src/slic3r/GUI/OptionsGroup.hpp b/src/slic3r/GUI/OptionsGroup.hpp index c808545145..b20d16aca9 100644 --- a/src/slic3r/GUI/OptionsGroup.hpp +++ b/src/slic3r/GUI/OptionsGroup.hpp @@ -199,7 +199,7 @@ public: OptionsGroup(wxWindow *_parent, const wxString &title, const wxString &icon, bool is_tab_opt = false, column_t extra_clmn = nullptr); - ~OptionsGroup() { clear(true); } + virtual ~OptionsGroup() { clear(true); } wxGridSizer* get_grid_sizer() { return m_grid_sizer; } const std::vector& get_lines() { return m_lines; } diff --git a/src/slic3r/GUI/ParamsPanel.cpp b/src/slic3r/GUI/ParamsPanel.cpp index 7d054d8a1b..a0834666ad 100644 --- a/src/slic3r/GUI/ParamsPanel.cpp +++ b/src/slic3r/GUI/ParamsPanel.cpp @@ -128,7 +128,7 @@ wxBoxSizer *TipsDialog::create_item_checkbox(wxString title, wxWindow *parent, w m_show_again = wxGetApp().app_config->has(param); checkbox->SetValue(m_show_again); - checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, checkbox, param](wxCommandEvent &e) { + checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, param](wxCommandEvent &e) { m_show_again = m_show_again ? false : true; e.Skip(); }); @@ -290,11 +290,11 @@ ParamsPanel::ParamsPanel( wxWindow* parent, wxWindowID id, const wxPoint& pos, c m_compare_btn = new ScalableButton(m_top_panel, wxID_ANY, "compare", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_compare_btn->SetToolTip(_L("Compare presets")); - m_compare_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { wxGetApp().mainframe->diff_dialog.show(); })); + m_compare_btn->Bind(wxEVT_BUTTON, ([](wxCommandEvent e) { wxGetApp().mainframe->diff_dialog.show(); })); m_setting_btn = new ScalableButton(m_top_panel, wxID_ANY, "table", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); m_setting_btn->SetToolTip(_L("View all object's settings")); - m_setting_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &) { wxGetApp().plater()->PopupObjectTable(-1, -1, {0, 0}); }); + m_setting_btn->Bind(wxEVT_BUTTON, [](wxCommandEvent &) { wxGetApp().plater()->PopupObjectTable(-1, -1, {0, 0}); }); m_highlighter.set_timer_owner(this, 0); this->Bind(wxEVT_TIMER, [this](wxTimerEvent &) diff --git a/src/slic3r/GUI/ParamsPanel.hpp b/src/slic3r/GUI/ParamsPanel.hpp index 0726db91d3..91bf3d2a7e 100644 --- a/src/slic3r/GUI/ParamsPanel.hpp +++ b/src/slic3r/GUI/ParamsPanel.hpp @@ -66,7 +66,6 @@ class ParamsPanel : public wxPanel { #if __WXOSX__ wxWindow* m_tmp_panel; - int m_size_move = -1; #endif // __WXOSX__ private: diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 1c604677d9..8802d1ff97 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -16,10 +17,12 @@ #include #include #include +#include #include #include "libslic3r/libslic3r.h" #include "libslic3r/Polygon.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/BoundingBox.hpp" #include "libslic3r/Geometry.hpp" @@ -158,7 +161,7 @@ PartPlate::PartPlate() init(); } -PartPlate::PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, int height, Plater* platerObj, Model* modelObj, bool printable, PrinterTechnology tech) +PartPlate::PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, double height, Plater* platerObj, Model* modelObj, bool printable, PrinterTechnology tech) :m_partplate_list(partplate_list), m_plater(platerObj), m_model(modelObj), printer_technology(tech), m_origin(origin), m_width(width), m_depth(depth), m_height(height), m_printable(printable) { init(); @@ -1051,7 +1054,13 @@ void PartPlate::render_grid(bool bottom) { void PartPlate::render_height_limit(PartPlate::HeightLimitMode mode) { - if (m_print && m_print->config().print_sequence == PrintSequence::ByObject && mode != HEIGHT_LIMIT_NONE) + // Orca: a prime tower compacted by "No sparse layers" drags the nozzle back down to the plate on + // every toolchange, so the rod and the lid limit how tall a neighbouring object may be exactly as + // they do in sequential printing. The reference lines are just as useful there. + const bool relevant_for_print_mode = m_print && (m_print->config().print_sequence == PrintSequence::ByObject || + (m_print->config().print_sequence == PrintSequence::ByLayer && + wipe_tower_sparse_layers_skipped(m_print->config()) && m_print->has_wipe_tower())); + if (relevant_for_print_mode && mode != HEIGHT_LIMIT_NONE) { // draw lower limit // ORCA: OpenGL Core Profile @@ -1111,7 +1120,7 @@ void PartPlate::show_tooltip(const std::string tooltip) { const auto scale = m_plater->get_current_canvas3D()->get_scale(); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, {6 * scale, 3 * scale}); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, {3 * scale}); + ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 3 * scale); ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); ImGui::PushStyleColor(ImGuiCol_Border, {0, 0, 0, 0}); ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.00f, 1.00f, 1.00f, 1.00f)); @@ -1532,8 +1541,23 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const if (check_objects_empty_and_gcode3mf(plate_extruders)) { return plate_extruders; } - // if 3mf file - const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + return get_extruders(conside_custom_gcode, wxGetApp().preset_bundle->prints.get_edited_preset().config, wxGetApp().preset_bundle->project_config); +} + +// The plate's filaments, with the global keys read from the given configs rather than the +// application's presets: the wipe tower estimate is also called under the CLI, which has no +// application object. get_extruders(bool) passes the edited presets; a full config serves both. +std::vector PartPlate::get_extruders(bool conside_custom_gcode, const DynamicPrintConfig& glb_config, const DynamicPrintConfig& project_config) const +{ + std::vector plate_extruders; + // A plate from a sliced .gcode.3mf holds no objects, so report the filaments the G-code + // used. check_objects_empty_and_gcode3mf does this for get_extruders(bool), but reaches + // the plater, which the CLI has none of; slice_filaments_info is only filled for such a plate. + if (m_model->objects.empty()) { + for (const FilamentInfo &info : slice_filaments_info) + plate_extruders.push_back(info.id + 1); + return plate_extruders; + } int glb_support_intf_extr = glb_config.opt_int("support_interface_filament"); int glb_support_extr = glb_config.opt_int("support_filament"); int glb_outer_wall_extr = glb_config.opt_int("outer_wall_filament_id"); @@ -1550,7 +1574,9 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const glb_support |= glb_config.opt_int("raft_layers") > 0; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!contain_instance_totally(obj_idx, 0)) + // Any instance on the plate counts, as PrintApply does: after an arrange, instance 0 + // can sit on a different plate. + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject* mo = m_model->objects[obj_idx]; @@ -1663,7 +1689,7 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const if (conside_custom_gcode) { //BBS int nums_extruders = 0; - if (const ConfigOptionStrings *color_option = dynamic_cast(wxGetApp().preset_bundle->project_config.option("filament_colour"))) { + if (const ConfigOptionStrings *color_option = dynamic_cast(project_config.option("filament_colour"))) { nums_extruders = color_option->values.size(); if (m_model->plates_custom_gcodes.find(m_plate_index) != m_model->plates_custom_gcodes.end()) { for (auto item : m_model->plates_custom_gcodes.at(m_plate_index).gcodes) { @@ -1682,9 +1708,8 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const // is never loaded into a tray, so callers (AMS mapping, filament checks) must see the // physical filaments it resolves to instead. { - auto& project_config = wxGetApp().preset_bundle->project_config; - auto* is_mixed_opt = project_config.option("filament_is_mixed"); - auto* comp_strs_opt = project_config.option("filament_mixed_components"); + const auto* is_mixed_opt = project_config.option("filament_is_mixed"); + const auto* comp_strs_opt = project_config.option("filament_mixed_components"); if (is_mixed_opt && comp_strs_opt && has_any_mixed_filament(is_mixed_opt->values)) { std::vector ext_0based; for (int e : plate_extruders) @@ -1699,7 +1724,7 @@ std::vector PartPlate::get_extruders(bool conside_custom_gcode) const return plate_extruders; } -std::vector PartPlate::get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config) const +std::vector PartPlate::get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config, bool expand_mixed_slots) const { std::vector plate_extruders; @@ -1758,26 +1783,25 @@ std::vector PartPlate::get_extruders_under_cli(bool conside_custom_gcode, D else obj_support = glb_support; - if (!obj_support) - continue; + if (obj_support) { + int obj_support_intf_extr = 0; + const ConfigOption* support_intf_extr_opt = object->config.option("support_interface_filament"); + if (support_intf_extr_opt != nullptr) + obj_support_intf_extr = support_intf_extr_opt->getInt(); + if (obj_support_intf_extr != 0) + plate_extruders.push_back(obj_support_intf_extr); + else if (glb_support_intf_extr != 0) + plate_extruders.push_back(glb_support_intf_extr); - int obj_support_intf_extr = 0; - const ConfigOption* support_intf_extr_opt = object->config.option("support_interface_filament"); - if (support_intf_extr_opt != nullptr) - obj_support_intf_extr = support_intf_extr_opt->getInt(); - if (obj_support_intf_extr != 0) - plate_extruders.push_back(obj_support_intf_extr); - else if (glb_support_intf_extr != 0) - plate_extruders.push_back(glb_support_intf_extr); - - int obj_support_extr = 0; - const ConfigOption* support_extr_opt = object->config.option("support_filament"); - if (support_extr_opt != nullptr) - obj_support_extr = support_extr_opt->getInt(); - if (obj_support_extr != 0) - plate_extruders.push_back(obj_support_extr); - else if (glb_support_extr != 0) - plate_extruders.push_back(glb_support_extr); + int obj_support_extr = 0; + const ConfigOption* support_extr_opt = object->config.option("support_filament"); + if (support_extr_opt != nullptr) + obj_support_extr = support_extr_opt->getInt(); + if (obj_support_extr != 0) + plate_extruders.push_back(obj_support_extr); + else if (glb_support_extr != 0) + plate_extruders.push_back(glb_support_extr); + } int obj_outer_wall_extr = 0; if (const ConfigOption* wall_opt = object->config.option("outer_wall_filament_id"); wall_opt != nullptr) @@ -1861,7 +1885,7 @@ std::vector PartPlate::get_extruders_under_cli(bool conside_custom_gcode, D // Expand mixed filament slots to their physical components. A mixed slot is virtual and // is never loaded into a tray, so callers (AMS mapping, filament checks) must see the // physical filaments it resolves to instead. - { + if (expand_mixed_slots) { auto* is_mixed_opt = full_config.option("filament_is_mixed"); auto* comp_strs_opt = full_config.option("filament_mixed_components"); if (is_mixed_opt && comp_strs_opt && has_any_mixed_filament(is_mixed_opt->values)) { @@ -1901,7 +1925,7 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!contain_instance_totally(obj_idx, 0)) + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject* mo = m_model->objects[obj_idx]; @@ -2072,7 +2096,7 @@ bool PartPlate::check_single_extruder_mixed_filament_risk(const DynamicPrintConf "which may significantly increase waste and the risk of nozzle / waste-chute clogging."); for (int obj_idx = 0; obj_idx < (int)m_model->objects.size(); ++obj_idx) { - if (!contain_instance_totally(obj_idx, 0)) + if (!contain_any_instance_totally(obj_idx)) continue; ModelObject *mo = m_model->objects[obj_idx]; int obj_ext = mo->config.has("extruder") ? mo->config.extruder() : 1; @@ -2291,7 +2315,7 @@ bool PartPlate::check_compatible_of_nozzle_and_filament(const DynamicPrintConfig return wipe_tower_size; for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!use_global_objects && !contain_instance_totally(obj_idx, 0)) + if (!use_global_objects && !contain_any_instance_totally(obj_idx)) continue; BoundingBoxf3 bbox = m_model->objects[obj_idx]->bounding_box(); @@ -2313,113 +2337,97 @@ bool PartPlate::check_compatible_of_nozzle_and_filament(const DynamicPrintConfig return wipe_tower_size; }*/ -Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double wipe_volume, int extruder_count, int plate_extruder_size, bool use_global_objects, bool enable_wrapping_detection) const +WipeTowerFootprint PartPlate::estimate_wipe_tower_footprint(const DynamicPrintConfig &config, int plate_extruder_size, bool use_global_objects) const { - Vec3d wipe_tower_size; - double layer_height = 0.08f; // hard code layer height - double max_height = 0.f; - wipe_tower_size.setZero(); + // The CLI calls this too, so the plate's filaments are derived from the passed config: + // get_extruders(bool) reads the same keys off wxGetApp()'s presets, which the CLI has none of. + // An explicit count is a floor: init-time and arrange estimates size an empty plate for that + // many generic filaments, the lowest ids not already on the plate. + std::vector plate_extruders = get_extruders(true, config, config); + for (int id = 1; int(plate_extruders.size()) < plate_extruder_size; ++id) + if (std::find(plate_extruders.begin(), plate_extruders.end(), id) == plate_extruders.end()) + plate_extruders.push_back(id); + // The wipe tower filament joins the tool ordering even when unused (Print::extruders), so + // validation counts it - but only where there is a tower to join, which is the + // has_wipe_tower() half of that guard. + const ConfigOption *wipe_tower_filament_opt = config.option("wipe_tower_filament"); + const ConfigOption *enable_prime_tower_opt = config.option("enable_prime_tower"); + const int wipe_tower_filament = wipe_tower_filament_opt != nullptr ? wipe_tower_filament_opt->getInt() : 0; + if (enable_prime_tower_opt != nullptr && enable_prime_tower_opt->getBool() && plate_extruders.size() > 1 && wipe_tower_filament > 0 && + std::find(plate_extruders.begin(), plate_extruders.end(), wipe_tower_filament) == plate_extruders.end()) + plate_extruders.push_back(wipe_tower_filament); + if (plate_extruders.empty()) + return WipeTowerFootprint(); - const ConfigOption* layer_height_opt = config.option("layer_height"); - if (layer_height_opt) - layer_height = layer_height_opt->getFloat(); - - // empty plate - if (plate_extruder_size == 0) - { - std::vector plate_extruders = get_extruders(true); - plate_extruder_size = plate_extruders.size(); - } - if (plate_extruder_size == 0) - return wipe_tower_size; - - for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { - if (!use_global_objects && !contain_instance_totally(obj_idx, 0)) + // Tallest object on this plate and the thinnest layer it is sliced at, resolved per object + // as PrintObject resolves them (override, else preset) and over this plate's objects only - + // seeding from the global value, or folding in an off-plate override, diverges from Print. + const ConfigOption *layer_height_opt = config.option("layer_height"); + const double global_layer_height = layer_height_opt != nullptr ? layer_height_opt->getFloat() : 0.08; + double max_height = 0.; + double layer_height = std::numeric_limits::max(); + for (int obj_idx = 0; obj_idx < int(m_model->objects.size()); ++obj_idx) { + const ModelObject *object = m_model->objects[obj_idx]; + if (!use_global_objects && !contain_any_instance_totally(obj_idx)) continue; - - BoundingBoxf3 bbox = m_model->objects[obj_idx]->bounding_box_exact(); - max_height = std::max(bbox.size().z(), max_height); - } - wipe_tower_size(2) = max_height; - //const DynamicPrintConfig &dconfig = wxGetApp().preset_bundle->prints.get_edited_preset().config; - auto timelapse_type = config.option>("timelapse_type"); - bool need_wipe_tower = (timelapse_type ? (timelapse_type->value == TimelapseType::tlSmooth) : false) | enable_wrapping_detection; - double extra_spacing = config.option("prime_tower_infill_gap")->getFloat() / 100.; - const ConfigOptionEnum* use_rib_wall_opt = config.option>("wipe_tower_wall_type"); - bool use_rib_wall = use_rib_wall_opt ? use_rib_wall_opt->value == WipeTowerWallType::wtwRib: false; - double rib_width = config.option("wipe_tower_rib_width")->getFloat(); - double depth; - double filament_change_volume=0.; - { - std::vector filament_change_lengths; - auto filament_change_lengths_opt = m_print->config().option("filament_change_length"); - if (filament_change_lengths_opt) filament_change_lengths = filament_change_lengths_opt->values; - double length = filament_change_lengths.empty() ? 0 : *std::max_element(filament_change_lengths.begin(), filament_change_lengths.end()); - double diameter = 1.75; - std::vector diameters; - auto filament_diameter_opt = m_print->config().option("filament_diameter"); - if (filament_diameter_opt) diameters = filament_diameter_opt->values; - diameter = diameters.empty() ? diameter : *std::max_element(diameters.begin(), diameters.end()); - filament_change_volume = length * PI * diameter * diameter / 4.; - } - double volume = wipe_volume * (extruder_count == 2 ? plate_extruder_size : (plate_extruder_size - 1)); - if (extruder_count == 2) volume += filament_change_volume * (int) (plate_extruder_size / 2); - // Read from the passed plate config — m_print may not have been applied yet - // (fresh plates, CLI), in which case its PrintConfig still holds defaults. - const auto *purge_opt = config.option("purge_in_prime_tower"); - const auto *semm_opt = config.option("single_extruder_multi_material"); - const bool semm_flush = purge_opt && purge_opt->value && semm_opt && semm_opt->value; - if (semm_flush) volume = WipeTower2::estimate_semm_flush_volume(config, plate_extruder_size); - if (use_rib_wall) { - depth = std::sqrt(volume / layer_height * extra_spacing); - if (need_wipe_tower || plate_extruder_size > 1) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - double volume_depth = depth; - depth = std::max((double) min_wipe_tower_depth, depth); - rib_width = std::min(rib_width, depth / 2); - depth = rib_width / std::sqrt(2) + std::max(depth + m_print->config().wipe_tower_extra_rib_length.value, volume_depth); - wipe_tower_size(0) = wipe_tower_size(1) = depth; + // Per instance, to match PrintObject::size(); the union over instances differs once + // they are rotated apart. The cached convex hull has the mesh's z extent and is cheap + // enough for every scene reload. + for (int inst_idx = 0; inst_idx < int(object->instances.size()); ++inst_idx) { + if (!use_global_objects && !contain_instance_totally(obj_idx, inst_idx)) + continue; + max_height = std::max(max_height, object->instance_convex_hull_bounding_box(inst_idx, true).size().z()); } + const ConfigOption *object_layer_height = object->config.option("layer_height"); + layer_height = std::min(layer_height, object_layer_height != nullptr ? object_layer_height->getFloat() : global_layer_height); } - else { - depth = volume / (layer_height * w); - // The flush volumes already hold the spacing between wipes. - if (!semm_flush) depth *= extra_spacing; - if (need_wipe_tower || depth > EPSILON) { - float min_wipe_tower_depth = WipeTower::get_limit_depth_by_height(max_height); - depth = std::max((double)min_wipe_tower_depth, depth); - } - wipe_tower_size(0) = w; - wipe_tower_size(1) = depth; - } + if (layer_height == std::numeric_limits::max()) + layer_height = global_layer_height; - return wipe_tower_size; + std::vector filament_ids; + for (int id : plate_extruders) + if (id > 0) + filament_ids.push_back(static_cast(id - 1)); + return Slic3r::estimate_wipe_tower_footprint(config, resolve_wipe_tower_type(config), filament_ids, layer_height, max_height); } -arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int extruder_count, int plate_extruder_size, bool use_global_objects) const +arrangement::ArrangePolygon PartPlate::estimate_wipe_tower_polygon(const DynamicPrintConfig& config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size, bool use_global_objects) const { float x = dynamic_cast(config.option("wipe_tower_x"))->get_at(plate_index); float y = dynamic_cast(config.option("wipe_tower_y"))->get_at(plate_index); - float w = dynamic_cast(config.option("prime_tower_width"))->value; //float a = dynamic_cast(config.option("wipe_tower_rotation_angle"))->value; - float v = dynamic_cast(config.option("prime_volume"))->value; - float tower_brim_width = dynamic_cast(config.option("prime_tower_brim_width"))->value; - const ConfigOptionBool * wrapping_opt = dynamic_cast(config.option("enable_wrapping_detection")); - bool enable_wrapping = (wrapping_opt != nullptr) && wrapping_opt->value; - wt_size = estimate_wipe_tower_size(config, w, v, extruder_count, plate_extruder_size, use_global_objects, enable_wrapping); + const WipeTowerFootprint footprint = estimate_wipe_tower_footprint(config, plate_extruder_size, use_global_objects); + wt_size = Vec3d(footprint.width, footprint.depth, footprint.height); int plate_width=m_width, plate_depth=m_depth; - w = wt_size(0); // effective width; differs from prime_tower_width when the rib wall squares the tower + float w = wt_size(0); // effective width; differs from prime_tower_width when the rib wall squares the tower float depth = wt_size(1); - float margin = WIPE_TOWER_MARGIN + tower_brim_width, wp_brim_width = 0.f; - const ConfigOption* wipe_tower_brim_width_opt = config.option("prime_tower_brim_width"); - if (wipe_tower_brim_width_opt) { - wp_brim_width = wipe_tower_brim_width_opt->getFloat(); - if (wp_brim_width < 0) wp_brim_width = WipeTower::get_auto_brim_by_height((float) wt_size.z()); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; - } - - x = std::clamp(x, margin, (float)plate_width - w - margin - wp_brim_width); - y = std::clamp(y, margin, (float)plate_depth - depth - margin - wp_brim_width); + // Resolved brim, not the raw option: "Auto" (-1) would yield a margin of 0 and let the + // clamp put the brim off the bed. Matches set_default_wipe_tower_pos_for_plate. + float wp_brim_width = float(footprint.brim_width); + // A Type2 stabilization cone bulges past the body box like a brim does - fold its worst-axis + // bulge into the same margin. + const BoundingBox outline = get_extents(estimate_wipe_tower_first_layer_outline(config, resolve_wipe_tower_type(config), w, depth, wt_size.z())); + wp_brim_width += float(std::max({0., unscaled(outline.max.x()) - w, unscaled(outline.max.y()) - depth, -unscaled(outline.min.x()), -unscaled(outline.min.y())})); + // A position valid by WIPE_TOWER_MARGIN is the user's choice and stays untouched; an + // invalid one is re-placed with the comfort margin (falling back to the validity bounds + // on cramped plates). std::clamp is UB if lo > hi, so keep every hi >= lo. + const float margin = WIPE_TOWER_MARGIN + wp_brim_width; + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format("arrange wipe_tower: wp_brim_width %1%") % wp_brim_width; + const float x_hi = std::max(margin, (float) plate_width - w - margin); + const float y_hi = std::max(margin, (float) plate_depth - depth - margin); + const float margin_c = (float) WIPE_TOWER_AUTO_MARGIN + wp_brim_width; + float x_lo_c = margin_c, x_hi_c = (float) plate_width - w - margin_c; + if (x_lo_c > x_hi_c) { x_lo_c = margin; x_hi_c = x_hi; } + float y_lo_c = margin_c, y_hi_c = (float) plate_depth - depth - margin_c; + if (y_lo_c > y_hi_c) { y_lo_c = margin; y_hi_c = y_hi; } + // Drag clamps reach this limit through the volume's bounding box (post-slice: the real + // mesh, a couple of mm inside this reserved estimate), so a drop can land slightly out + // of bounds — snap it onto the bound; only far-out positions get the comfort re-place. + const float tol = 5.f; + if (x < margin - tol || x > x_hi + tol) x = std::clamp(x, x_lo_c, x_hi_c); + else x = std::clamp(x, margin, x_hi); + if (y < margin - tol || y > y_hi + tol) y = std::clamp(y, y_lo_c, y_hi_c); + else y = std::clamp(y, margin, y_hi); wt_pos(0) = x; wt_pos(1) = y; wt_pos(2) = 0.f; @@ -2474,7 +2482,7 @@ void PartPlate::clear(bool clear_sliced_result) /* size and position related functions*/ //set position and size -void PartPlate::set_pos_and_size(Vec3d& origin, int width, int depth, int height, bool with_instance_move, bool do_clear) +void PartPlate::set_pos_and_size(Vec3d& origin, int width, int depth, double height, bool with_instance_move, bool do_clear) { bool size_changed = false; //size changed means the machine changed bool pos_changed = false; @@ -2766,6 +2774,20 @@ bool PartPlate::contain_instance_totally(int obj_id, int instance_id) const return result; } +//judge whether any of the object's instances is totally included in plate or not +bool PartPlate::contain_any_instance_totally(int obj_id) const +{ + if (obj_id < 0 || obj_id >= int(m_model->objects.size())) + return false; + + const ModelObject *object = m_model->objects[obj_id]; + for (int instance_id = 0; instance_id < int(object->instances.size()); ++instance_id) + if (contain_instance_totally(obj_id, instance_id)) + return true; + + return false; +} + //check whether instance is outside the plate or not bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* bounding_box) { @@ -2782,10 +2804,10 @@ bool PartPlate::check_outside(int obj_id, int instance_id, BoundingBoxf3* boundi if (instance_box.min.z() < SINKING_Z_THRESHOLD) { // Orca: For sinking object, we use a more expensive algorithm so part below build plate won't be considered - // m_plater is null in CLI mode. - if (m_plater && plate_box.intersects(instance_box)) { + // m_height mirrors the printer's printable height and is set in CLI mode too, unlike m_plater. + if (plate_box.intersects(instance_box)) { // TODO: FIXME: this does not take exclusion area into account - const BuildVolume build_volume(get_shape(), m_plater->build_volume().printable_height(), m_extruder_areas, m_extruder_heights); + const BuildVolume build_volume(get_shape(), m_height, m_extruder_areas, m_extruder_heights); const auto state = instance->calc_print_volume_state(build_volume); outside = state == ModelInstancePVS_Partly_Outside; } @@ -3495,7 +3517,7 @@ bool PartPlate::intersects(const BoundingBoxf3& bb) const return print_volume.intersects(bb); } -void PartPlate::render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_body, bool force_background_color, HeightLimitMode mode, int hover_id, bool render_cali, bool show_grid) +void PartPlate::render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_body, bool force_background_color, HeightLimitMode mode, int hover_id, bool render_cali, bool show_grid, bool hide_chrome) { glsafe(::glEnable(GL_DEPTH_TEST)); @@ -3546,16 +3568,18 @@ void PartPlate::render(const Transform3d& view_matrix, const Transform3d& projec if (wxGetApp().show_plate_gridlines() && show_grid) render_grid(bottom); - if (!bottom && m_selected && !force_background_color) { + if (!hide_chrome && !bottom && m_selected && !force_background_color) { if (m_partplate_list) render_logo(bottom, m_partplate_list->render_cali_logo && render_cali); else render_logo(bottom); } - render_icons(bottom, only_body, hover_id); - if (!force_background_color) { - render_only_numbers(bottom); + if (!hide_chrome) { + render_icons(bottom, only_body, hover_id); + if (!force_background_color) { + render_only_numbers(bottom); + } } glsafe(::glDisable(GL_DEPTH_TEST)); @@ -4109,7 +4133,7 @@ void PartPlate::on_filament_deleted(int filament_count, int filament_id) /* PartPlate List related functions*/ -PartPlateList::PartPlateList(int width, int depth, int height, Plater* platerObj, Model* modelObj, PrinterTechnology tech) +PartPlateList::PartPlateList(int width, int depth, double height, Plater* platerObj, Model* modelObj, PrinterTechnology tech) :m_plate_width(width), m_plate_depth(depth), m_plate_height(height), m_plater(platerObj), m_model(modelObj), printer_technology(tech), unprintable_plate(this, Vec3d(0.0 + width * (1. + LOGICAL_PART_PLATE_GAP), 0.0, 0.0), width, depth, height, platerObj, modelObj, false, tech) { @@ -4499,26 +4523,16 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini f_volume_maps = wxGetApp().preset_bundle->get_default_nozzle_volume_types_for_filaments(filament_maps); } DynamicPrintConfig full_config = wxGetApp().preset_bundle->full_config(false, filament_maps, f_volume_maps); - float w = dynamic_cast(full_config.option("prime_tower_width"))->value; - float v = dynamic_cast(full_config.option("prime_volume"))->value; - bool enable_wrapping = false; - const ConfigOptionBool *wrapping_opt = dynamic_cast(full_config.option("enable_wrapping_detection")); - if (wrapping_opt) enable_wrapping = wrapping_opt->value; - int nozzle_nums = wxGetApp().preset_bundle->get_printer_extruder_count(); - Vec3d wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, init_pos ? 2 : 0, false, enable_wrapping); + WipeTowerFootprint footprint = part_plate->estimate_wipe_tower_footprint(full_config, init_pos ? 2 : 0); - if (!init_pos && (is_approx(wipe_tower_size(0), 0.0) || is_approx(wipe_tower_size(1), 0.0))) { - wipe_tower_size = part_plate->estimate_wipe_tower_size(full_config, w, v, nozzle_nums, 2, false, enable_wrapping); + if (!init_pos && (is_approx(footprint.width, 0.0) || is_approx(footprint.depth, 0.0))) { + footprint = part_plate->estimate_wipe_tower_footprint(full_config, 2); } + Vec3d wipe_tower_size(footprint.width, footprint.depth, footprint.height); - // Compute brim-aware margin: brim extends outward from tower position - float brim_width = 0.f; - const ConfigOptionFloat *brim_opt = full_config.option("prime_tower_brim_width"); - if (brim_opt) { - brim_width = brim_opt->value; - if (brim_width < 0) brim_width = WipeTower::get_auto_brim_by_height((float) wipe_tower_size.z()); - } - const float margin = WIPE_TOWER_MARGIN + brim_width; + // Brim-aware margin: the brim extends outward from the tower position. + const float brim_width = float(footprint.brim_width); + const float margin = WIPE_TOWER_AUTO_MARGIN + brim_width; // clamp wipe tower position within plate boundaries { @@ -4554,7 +4568,7 @@ void PartPlateList::set_default_wipe_tower_pos_for_plate(int plate_idx, bool ini } //this may be happened after machine changed -void PartPlateList::reset_size(int width, int depth, int height, bool reload_objects, bool update_shapes) +void PartPlateList::reset_size(int width, int depth, double height, bool reload_objects, bool update_shapes) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":before size: plate_width %1%, plate_depth %2%, plate_height %3%") % m_plate_width % m_plate_depth % m_plate_height; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":after size: plate_width %1%, plate_depth %2%, plate_height %3%") % width % depth % height; @@ -5983,7 +5997,7 @@ void PartPlateList::postprocess_arrange_polygon(arrangement::ArrangePolygon& arr /*rendering related functions*/ //render -void PartPlateList::render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body, int hover_id, bool render_cali, bool show_grid) +void PartPlateList::render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current, bool only_body, int hover_id, bool render_cali, bool show_grid, bool hide_chrome) { const std::lock_guard local_lock(m_plates_mutex); std::vector::iterator it = m_plate_list.begin(); @@ -6008,15 +6022,15 @@ void PartPlateList::render(const Transform3d& view_matrix, const Transform3d& pr if (current_index == m_current_plate) { PartPlate::HeightLimitMode height_mode = (only_current)?PartPlate::HEIGHT_LIMIT_NONE:m_height_limit_mode; if (plate_hover_index == current_index) - (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, height_mode, plate_hover_action, render_cali, show_grid); + (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, height_mode, plate_hover_action, render_cali, show_grid, hide_chrome); else - (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, height_mode, -1, render_cali, show_grid); + (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, height_mode, -1, render_cali, show_grid, hide_chrome); } else { if (plate_hover_index == current_index) - (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, PartPlate::HEIGHT_LIMIT_NONE, plate_hover_action, render_cali, show_grid); + (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, PartPlate::HEIGHT_LIMIT_NONE, plate_hover_action, render_cali, show_grid, hide_chrome); else - (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, PartPlate::HEIGHT_LIMIT_NONE, -1, render_cali, show_grid); + (*it)->render(view_matrix, projection_matrix, bottom, only_body, false, PartPlate::HEIGHT_LIMIT_NONE, -1, render_cali, show_grid, hide_chrome); } } } @@ -6503,7 +6517,7 @@ int PartPlateList::store_to_3mf_structure(PlateDataPtrs& plate_data_list, bool w plate_data_item->filament_change_sequence = m_plate_list[i]->m_gcode_result->filament_change_sequence; plate_data_item->nozzle_change_sequence = m_plate_list[i]->m_gcode_result->nozzle_change_sequence; plate_data_item->optimal_assignment = m_plate_list[i]->m_gcode_result->optimal_assignment; - plate_data_item->first_layer_time = std::to_string(m_plate_list[i]->cali_bboxes_data.first_layer_time); + plate_data_item->first_layer_time = std::to_string(m_plate_list[i]->get_slice_result()->initial_layer_time); Print *print = nullptr; m_plate_list[i]->get_print((PrintBase **) &print, nullptr, nullptr); if (print) { @@ -6732,7 +6746,7 @@ int PartPlateList::load_gcode_files() //BoundingBoxf3 print_volume = m_plate_list[i]->get_bounding_box(false); //print_volume.max(2) = this->m_plate_height; //print_volume.min(2) = -1e10; - m_model->update_print_volume_state({m_plate_list[i]->get_shape(), (double)this->m_plate_height, m_plate_list[i]->get_extruder_areas(), m_plate_list[i]->get_extruder_heights() }); + m_model->update_print_volume_state({m_plate_list[i]->get_shape(), this->m_plate_height, m_plate_list[i]->get_extruder_areas(), m_plate_list[i]->get_extruder_heights() }); if (!m_plate_list[i]->load_gcode_from_file(m_plate_list[i]->m_gcode_path_from_3mf)) ret ++; diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 5760320b49..c05775a963 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -11,6 +11,7 @@ #include "libslic3r/GCode/GCodeProcessor.hpp" #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/Slicing.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" #include "libslic3r/Arrange.hpp" #include "Plater.hpp" #include "libslic3r/Model.hpp" @@ -96,7 +97,7 @@ private: Vec3d m_origin; int m_width; int m_depth; - int m_height; + double m_height; float m_height_to_lid; float m_height_to_rod; bool m_printable; @@ -227,7 +228,7 @@ public: static void load_render_colors(); PartPlate(); - PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, int height, Plater* platerObj, Model* modelObj, bool printable=true, PrinterTechnology tech = ptFFF); + PartPlate(PartPlateList *partplate_list, Vec3d origin, int width, int depth, double height, Plater* platerObj, Model* modelObj, bool printable=true, PrinterTechnology tech = ptFFF); ~PartPlate(); bool operator<(PartPlate&) const; @@ -328,7 +329,7 @@ public: Vec3d get_center_origin(); /* size and position related functions*/ //set position and size - void set_pos_and_size(Vec3d& origin, int width, int depth, int height, bool with_instance_move, bool do_clear = true); + void set_pos_and_size(Vec3d& origin, int width, int depth, double height, bool with_instance_move, bool do_clear = true); // BBS Vec2d get_size() const { return Vec2d(m_width, m_depth); } @@ -339,12 +340,18 @@ public: Vec3d get_origin() { return m_origin; } //Vec3d calculate_wipe_tower_size(const DynamicPrintConfig &config, const double w, const double wipe_volume, int plate_extruder_size = 0, bool use_global_objects = false) const; - Vec3d estimate_wipe_tower_size(const DynamicPrintConfig & config, const double w, const double wipe_volume, int extruder_count = 1, int plate_extruder_size = 0, bool use_global_objects = false, bool enable_wrapping_detection = false) const; - arrangement::ArrangePolygon estimate_wipe_tower_polygon(const DynamicPrintConfig & config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int extruder_count = 1, int plate_extruder_size = 0, bool use_global_objects = false) const; + // plate_extruder_size: a floor on the filaments purged on the plate; its own are always + // counted, so 0 sizes for exactly those. + // use_global_objects skips the containment test, which the CLI needs before objects are + // assigned to plates - the layer height is then the project's thinnest, which over-reserves. + WipeTowerFootprint estimate_wipe_tower_footprint(const DynamicPrintConfig & config, int plate_extruder_size = 0, bool use_global_objects = false) const; + arrangement::ArrangePolygon estimate_wipe_tower_polygon(const DynamicPrintConfig & config, int plate_index, Vec3d& wt_pos, Vec3d& wt_size, int plate_extruder_size = 0, bool use_global_objects = false) const; bool check_objects_empty_and_gcode3mf(std::vector &result) const; // get used filaments from config, 1 based idx std::vector get_extruders(bool conside_custom_gcode = false) const; - std::vector get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config) const; + std::vector get_extruders(bool conside_custom_gcode, const DynamicPrintConfig& glb_config, const DynamicPrintConfig& project_config) const; + // expand_mixed_slots = false keeps mixed filament slots as slots instead of their components. + std::vector get_extruders_under_cli(bool conside_custom_gcode, DynamicPrintConfig& full_config, bool expand_mixed_slots = true) const; std::vector get_extruders_without_support(bool conside_custom_gcode = false) const; // get used filaments from gcode result, 1 based idx std::vector get_used_filaments(); @@ -366,6 +373,8 @@ public: bool contain_instance_totally(ModelObject* object, int instance_id) const; //judge whether instance is totally included in plate or not bool contain_instance_totally(int obj_id, int instance_id) const; + //judge whether any of the object's instances is totally included in plate or not + bool contain_any_instance_totally(int obj_id) const; //judge whether the plate's origin is at the left of instance or not bool is_left_top_of(int obj_id, int instance_id); @@ -419,7 +428,7 @@ public: bool contains(const BoundingBoxf3& bb) const; bool intersects(const BoundingBoxf3& bb) const; - void render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_body = false, bool force_background_color = false, HeightLimitMode mode = HEIGHT_LIMIT_NONE, int hover_id = -1, bool render_cali = false, bool show_grid = true); + void render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_body = false, bool force_background_color = false, HeightLimitMode mode = HEIGHT_LIMIT_NONE, int hover_id = -1, bool render_cali = false, bool show_grid = true, bool hide_chrome = false); void set_selected(); void set_unselected(); @@ -590,7 +599,7 @@ class PartPlateList : public ObjectBase int m_plate_width; int m_plate_depth; - int m_plate_height; + double m_plate_height; float m_height_to_lid; float m_height_to_rod; @@ -675,16 +684,6 @@ public: offset = Vec2d(0, 0); } - TexturePart(const TexturePart& part) { - this->x = part.x; - this->y = part.y; - this->w = part.w; - this->h = part.h; - this->offset = part.offset; - this->buffer = part.buffer; - this->filename = part.filename; - this->texture = part.texture; - } void update_pos(float xx, float yy, float ww, float hh) { x = xx; y = yy; @@ -708,12 +707,12 @@ public: static bool is_load_cali_texture; static bool is_load_extruder_only_area_textures; - PartPlateList(int width, int depth, int height, Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); + PartPlateList(int width, int depth, double height, Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); PartPlateList(Plater* platerObj, Model* modelObj, PrinterTechnology tech = ptFFF); ~PartPlateList(); //this may be happened after machine changed - void reset_size(int width, int depth, int height, bool reload_objects = true, bool update_shapes = false); + void reset_size(int width, int depth, double height, bool reload_objects = true, bool update_shapes = false); //clear all the instances in the plate, but keep the plates void clear(bool delete_plates = false, bool release_print_list = false, bool except_locked = false, int plate_index = -1); //clear all the instances in the plate, and delete the plates, only keep the first default plate @@ -727,7 +726,7 @@ public: //get the plate stride double plate_stride_x(); double plate_stride_y(); - void get_plate_size(int& width, int& depth, int& height) { + void get_plate_size(int& width, int& depth, double& height) { width = m_plate_width; depth = m_plate_depth; height = m_plate_height; @@ -858,7 +857,7 @@ public: /*rendering related functions*/ void on_change_color_mode(bool is_dark) { m_is_dark = is_dark; } - void render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current = false, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true); + void render(const Transform3d& view_matrix, const Transform3d& projection_matrix, bool bottom, bool only_current = false, bool only_body = false, int hover_id = -1, bool render_cali = false, bool show_grid = true, bool hide_chrome = false); void set_render_option(bool bedtype_texture, bool plate_settings); void set_render_cali(bool value = true) { render_cali_logo = value; } void register_raycasters_for_picking(GLCanvas3D& canvas) diff --git a/src/slic3r/GUI/PartSkipDialog.cpp b/src/slic3r/GUI/PartSkipDialog.cpp index b9dd7d5007..9bd6687757 100644 --- a/src/slic3r/GUI/PartSkipDialog.cpp +++ b/src/slic3r/GUI/PartSkipDialog.cpp @@ -1,5 +1,6 @@ #include "GUI_Utils.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include #include #include diff --git a/src/slic3r/GUI/PartSkipDialog.hpp b/src/slic3r/GUI/PartSkipDialog.hpp index 95eba9f24d..b95681dcde 100644 --- a/src/slic3r/GUI/PartSkipDialog.hpp +++ b/src/slic3r/GUI/PartSkipDialog.hpp @@ -128,7 +128,6 @@ private: bool is_drag_mode(); boost::shared_ptr m_file_sys; - bool m_file_sys_result{false}; std::string m_timestamp; std::string m_tmp_path; std::vector m_local_paths; diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index 989cf204e1..04317ca46b 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.hpp b/src/slic3r/GUI/PhysicalPrinterDialog.hpp index 0ba2cad54f..c32da334be 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.hpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.hpp @@ -33,7 +33,6 @@ class PhysicalPrinterDialog : public DPIDialog Button* m_printhost_test_btn {nullptr}; Button* m_printhost_logout_btn {nullptr}; Button* m_printhost_cafile_browse_btn {nullptr}; - Button* m_printhost_client_cert_browse_btn {nullptr}; Button* m_printhost_port_browse_btn {nullptr}; RoundedRectangle* m_input_area {nullptr}; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index b330e1b7aa..283d6eca80 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1,12 +1,10 @@ #include "Plater.hpp" #include "../Utils/NetworkAgent.hpp" -#include "../Utils/NetworkAgentFactory.hpp" #include "libslic3r/Config.hpp" #include "libslic3r_version.h" #include #include -#include #include #include #include @@ -16,8 +14,6 @@ #include #include #include -#include -#include #include #include #include @@ -70,7 +66,6 @@ #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/GCode/ThumbnailData.hpp" #include "libslic3r/Model.hpp" -#include "libslic3r/SLA/Hollowing.hpp" #include "libslic3r/SLA/SupportPoint.hpp" #include "libslic3r/SLA/ReprojectPointsOnMesh.hpp" #include "libslic3r/Polygon.hpp" @@ -79,16 +74,15 @@ #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PublishSettings.hpp" #include "slic3r/Utils/CrealityPrint.hpp" #include "libslic3r/ClipperUtils.hpp" -#include "libslic3r/ObjColorUtils.hpp" // For stl export #include "libslic3r/CSGMesh/ModelToCSGMesh.hpp" #include "libslic3r/CSGMesh/PerformCSGMeshBooleans.hpp" #include "GUI.hpp" #include "GUI_App.hpp" -#include "GuiColor.hpp" #include "GUI_ObjectList.hpp" #ifdef __WXGTK__ #include "LinuxDisplayBackend.hpp" @@ -98,6 +92,9 @@ #include "wxExtensions.hpp" #include "../Utils/PrintHost.hpp" #include "MainFrame.hpp" +#ifdef SLIC3R_CAD +#include "slic3r/GUI/CAD/DesignPanel.hpp" +#endif #include "format.hpp" #include "3DScene.hpp" #include "GLCanvas3D.hpp" @@ -124,7 +121,6 @@ #include "SendMultiMachinePage.hpp" #include "SendToPrinter.hpp" #include "PublishDialog.hpp" -#include "ModelMall.hpp" #include "ConfigWizard.hpp" #include "SyncAmsInfoDialog.hpp" #include "../Utils/ASCIIFolding.hpp" @@ -150,7 +146,6 @@ #include "ParamsDialog.hpp" #include "ImageDPIFrame.hpp" #include "Widgets/Label.hpp" -#include "Widgets/RoundedRectangle.hpp" #include "Widgets/RadioGroup.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/Button.hpp" @@ -1341,7 +1336,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title if (index >= 0) label_flow->SetMinSize({FromDIP(80), -1}); auto combo_flow = new ComboBox(this, wxID_ANY, wxString(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); combo_flow->GetDropDown().SetUseContentWidth(true); - combo_flow->Bind(wxEVT_COMBOBOX, [this, index, combo_flow](wxCommandEvent &evt) { + combo_flow->Bind(wxEVT_COMBOBOX, [index, combo_flow](wxCommandEvent &evt) { auto printer_tab = dynamic_cast(wxGetApp().get_tab(Preset::TYPE_PRINTER)); NozzleVolumeType volume_type = NozzleVolumeType(intptr_t(combo_flow->GetClientData(evt.GetInt()))); printer_tab->set_extruder_volume_type(index, volume_type); @@ -1401,7 +1396,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title btn_up = new ScalableButton(this, wxID_ANY, "page_up", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_up->SetBackgroundColour(*wxWHITE); - btn_up->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) { + btn_up->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur > 0) --page_cur; update_ams(); @@ -1409,7 +1404,7 @@ ExtruderGroup::ExtruderGroup(wxWindow * parent, int index, wxString const &title btn_up->Hide(); btn_down = new ScalableButton(this, wxID_ANY, "page_down", "", {FromDIP(14), FromDIP(14)}, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 14); btn_down->SetBackgroundColour(*wxWHITE); - btn_down->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this, index](auto &evt) { + btn_down->Bind(wxEVT_COMMAND_BUTTON_CLICKED, [this](auto &evt) { if (page_cur + 1 < page_num) ++page_cur; update_ams(); @@ -1468,12 +1463,12 @@ void ExtruderGroup::update_ams() size_t left = 4; size_t index = 0; for (size_t i = i4; i < ams_n4 && left > 0; ++i, ++index, left -= 2) { - ams[index]->Update(i < ams_4.size() ? ams_4[i] : info4); + ams[index]->UpdateInfo(i < ams_4.size() ? ams_4[i] : info4); ams[index]->Refresh(); ams[index]->Open(); } for (size_t i = i1; i < ams_n1 && left > 0; ++i, ++index, --left) { - ams[index]->Update(i < ams_1.size() ? ams_1[i] : info1); + ams[index]->UpdateInfo(i < ams_1.size() ? ams_1[i] : info1); ams[index]->Refresh(); ams[index]->Open(); } @@ -2026,7 +2021,7 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material, bool is_man if (!this->plater) return false; - this->plater->update_objects_position_when_select_preset([&obj, machine_preset]() { + this->plater->update_objects_position_when_select_preset([machine_preset]() { Tab *printer_tab = GUI::wxGetApp().get_tab(Preset::Type::TYPE_PRINTER); printer_tab->select_preset(machine_preset->name); }); @@ -2171,7 +2166,7 @@ bool Sidebar::priv::sync_extruder_list(bool &only_external_material, bool is_man void Sidebar::priv::update_sync_status(const MachineObject *obj) { StateColor not_synced_colour(std::pair(wxColour("#009688"), StateColor::Normal)); - auto clear_all_sync_status = [this, ¬_synced_colour]() { + auto clear_all_sync_status = [this]() { panel_printer_preset->ShowBadge(false); panel_printer_bed->ShowBadge(false); panel_nozzle_dia->ShowBadge(false); // ORCA add support for nozzle sync @@ -2475,7 +2470,7 @@ Sidebar::Sidebar(Plater *parent) p->m_printer_icon = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "printer"); p->m_text_printer_settings = new Label(p->m_panel_printer_title, _L("Printer"), LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END); - p->m_printer_icon->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + p->m_printer_icon->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) { //auto wizard_t = new ConfigWizard(wxGetApp().mainframe); //wizard_t->run(ConfigWizard::RR_USER, ConfigWizard::SP_CUSTOM); }); @@ -2496,7 +2491,7 @@ Sidebar::Sidebar(Plater *parent) }); p->m_printer_setting = new ScalableButton(p->m_panel_printer_title, wxID_ANY, "settings"); - p->m_printer_setting->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { + p->m_printer_setting->Bind(wxEVT_BUTTON, [](wxCommandEvent &e) { // p->editing_filament = -1; // wxGetApp().params_dialog()->Popup(); // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); @@ -2611,8 +2606,8 @@ Sidebar::Sidebar(Plater *parent) p->image_printer->SetBackgroundColour(bg_color); p->combo_printer->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_printer->Bind(wxEVT_SET_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(true ); e.Skip();}); - p->combo_printer->Bind(wxEVT_KILL_FOCUS, [this, printer_focus_bg](auto& e) {printer_focus_bg(false); e.Skip();}); + p->combo_printer->Bind(wxEVT_SET_FOCUS, [printer_focus_bg](auto& e) {printer_focus_bg(true ); e.Skip();}); + p->combo_printer->Bind(wxEVT_KILL_FOCUS, [printer_focus_bg](auto& e) {printer_focus_bg(false); e.Skip();}); /* ORCA This part moved to titlebar p->btn_connect_printer = new ScalableButton(p->panel_printer_preset, wxID_ANY, "monitor_signal_strong"); @@ -2689,8 +2684,8 @@ Sidebar::Sidebar(Plater *parent) p->label_nozzle_type->SetBackgroundColour(bg_color); p->combo_nozzle_dia->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); - p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [this, nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); + p->combo_nozzle_dia->Bind(wxEVT_SET_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(true ); e.Skip();}); + p->combo_nozzle_dia->Bind(wxEVT_KILL_FOCUS, [nozzle_focus_bg](auto& e) {nozzle_focus_bg(false); e.Skip();}); p->label_nozzle_type = new Label(p->panel_nozzle_dia, "Brass", LB_PROPAGATE_MOUSE_EVENT | wxST_ELLIPSIZE_END | wxALIGN_CENTRE_HORIZONTAL); p->label_nozzle_type->SetFont(Label::Body_10); @@ -2764,8 +2759,8 @@ Sidebar::Sidebar(Plater *parent) p->image_printer_bed->SetBackgroundColour(bg_color); p->combo_printer_bed->SetBackgroundColour(bg_color); // paints margins instead combo background }; - p->combo_printer_bed->Bind(wxEVT_SET_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(true ); e.Skip();}); - p->combo_printer_bed->Bind(wxEVT_KILL_FOCUS, [this, bed_focus_bg](auto& e) {bed_focus_bg(false); e.Skip();}); + p->combo_printer_bed->Bind(wxEVT_SET_FOCUS, [bed_focus_bg](auto& e) {bed_focus_bg(true ); e.Skip();}); + p->combo_printer_bed->Bind(wxEVT_KILL_FOCUS, [bed_focus_bg](auto& e) {bed_focus_bg(false); e.Skip();}); // highlight border on hover auto printer_bed_hovered = std::make_shared>(); @@ -2979,7 +2974,7 @@ Sidebar::Sidebar(Plater *parent) ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); add_btn->SetToolTip(_L("Add one filament")); - add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ + add_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e){ add_filament(); update_filaments_counter(); }); @@ -2989,7 +2984,7 @@ Sidebar::Sidebar(Plater *parent) ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament"); del_btn->SetToolTip(_L("Remove last filament")); - del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { + del_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { delete_filament(); update_filaments_counter(); }); @@ -3003,7 +2998,7 @@ Sidebar::Sidebar(Plater *parent) ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 16); // ORCA match icon size with other icons as 16x16 ams_btn->SetToolTip(_L("Synchronize filament list from AMS")); - ams_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { + ams_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { sync_ams_list(); }); @@ -3668,8 +3663,8 @@ void Sidebar::update_presets(Preset::Type preset_type) // so extruders without an explicit sub-nozzle count never offer Hybrid. A nullable-int // nil is INT_MAX (> 1) and would otherwise falsely pass the gate, so exclude it too. if (boost::algorithm::contains(extruder_variants->values[index], type + " " + nozzle_volumes_def->enum_labels[i]) || - extruder_max_nozzle_count->get_at(index) > 1 && extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && - nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid) { + (extruder_max_nozzle_count->get_at(index) > 1 && extruder_max_nozzle_count->get_at(index) != ConfigOptionIntsNullable::nil_value() && + nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == nvtHybrid)) { if (nozzle_volumes_def->enum_keys_map->at(nozzle_volumes_def->enum_values[i]) == NozzleVolumeType::nvtHighFlow &&(diameter == "0.2" || is_skip_high_flow_printer(printer_model))) continue; @@ -3683,7 +3678,7 @@ void Sidebar::update_presets(Preset::Type preset_type) extruder.combo_flow->SetSelection(select); }; - auto update_extruder_diameter = [&diameters, &diameter, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) { + auto update_extruder_diameter = [&diameters, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) { extruder.combo_diameter->Clear(); int select = -1; // ORCA get the actual nozzle diameter from printer config @@ -3871,7 +3866,7 @@ bool Sidebar::reset_bed_type_combox_choices(bool is_sidebar_init) } } m_last_combo_bedtype_count = p->combo_printer_bed->GetCount(); - if (!is_sidebar_init && &p->plater->get_partplate_list()) { + if (!is_sidebar_init) { p->plater->get_partplate_list().check_all_plate_local_bed_type(m_cur_combox_bed_types); } return true; @@ -3989,16 +3984,16 @@ void Sidebar::update_mixed_filament_list() p->m_panel_mixed_warning->Show(false); // Show/dismiss 3D canvas notification for broken mixed filaments - if (has_mixed && !broken_set.empty()) { - auto* notify = wxGetApp().plater()->get_notification_manager(); - if (notify) + auto* notify = plater->get_notification_manager(); + GLCanvas3D* view3d_canvas = plater->get_view3D_canvas3D(); + if(view3d_canvas && view3d_canvas->is_initialized() && notify){ + if (has_mixed && !broken_set.empty()) { notify->push_notification(NotificationType::BBLMixedFilamentBroken, NotificationManager::NotificationLevel::ErrorNotificationLevel, _u8L("Mixed filament has invalid or mismatched components. Please re-edit affected entries.")); - } else { - auto* notify = wxGetApp().plater()->get_notification_manager(); - if (notify) + } else { notify->close_notification_of_type(NotificationType::BBLMixedFilamentBroken); + } } if (has_mixed) { @@ -5507,12 +5502,15 @@ void Sidebar::add_custom_filament(wxColour new_col, const std::string& preset_na // Mixed-color slots are kept at the tail of the filament arrays, so a new physical // filament has to be inserted just after the last physical one rather than appended. - // total == every slot (physical + mixed); insert_pos == the physical slot count. - size_t total = wxGetApp().preset_bundle->filament_presets.size(); - size_t insert_pos = p->combos_filament.size(); + // Count off filament_is_mixed, not filament_presets or the combos: the extruder-count spinner + // reaches this before the sidebar has rebuilt, and update_multi_material_filament_presets() + // can have grown filament_presets alone. + auto *bundle = wxGetApp().preset_bundle; + size_t insert_pos = bundle->num_physical_filaments(); + size_t total = insert_pos + bundle->num_mixed_filaments(); int filament_count = (int)(total + 1); std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); - wxGetApp().preset_bundle->set_num_filaments(filament_count, new_color); + bundle->set_num_filaments(filament_count, new_color); // Maintain physical-first ordering: rotate the new slot from end to insert_pos. // No mixed slots -> insert_pos == total -> every rotate below is a no-op. @@ -6710,6 +6708,12 @@ struct Plater::priv SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr; PublishDialog *m_publish_dlg = nullptr; + // Session-level stash of the last published selection. Written on publish and on + // loading a published 3MF; read when the Publish dialog is opened. + bool m_has_pending_published{false}; + std::vector m_pending_published_keys; + std::vector m_pending_material_keys; + // Data Slic3r::DynamicPrintConfig *config; // FIXME: leak? Slic3r::Print fff_print; @@ -6934,7 +6938,10 @@ struct Plater::priv // BBS: backup & restore using LoadProgressCallback = std::function; - std::vector load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi = false); + std::vector load_files(const std::vector& input_files, + LoadStrategy strategy, + bool ask_multi = false, + bool* published_out = nullptr); std::vector load_model_objects(const ModelObjectPtrs& model_objects, bool allow_negative_z = false, bool split_object = false, bool auto_drop = true); // Texture-to-color import: a mesh loaded with UVs + a texture map gets its faces clustered @@ -6962,7 +6969,7 @@ struct Plater::priv std::function cancel_callback = {}); fs::path get_export_file_path(GUI::FileType file_type); - wxString get_export_file(GUI::FileType file_type); + wxString get_export_file(GUI::FileType file_type, const wxString& title = {}, bool published = false); // BBS void load_auxiliary_files(); @@ -7495,7 +7502,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Keep tracking the current sidebar size, by storing it using `best_size`, which will be stored // in the config and re-applied when the app is opened again. - this->sidebar->Bind(wxEVT_IDLE, [&sidebar, this](wxIdleEvent& e) { + this->sidebar->Bind(wxEVT_IDLE, [&sidebar](wxIdleEvent& e) { if (sidebar.IsShown() && sidebar.IsDocked() && sidebar.rect.GetWidth() > 0) { sidebar.BestSize(sidebar.rect.GetWidth(), sidebar.best_size.GetHeight()); } @@ -7794,8 +7801,8 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) wxGetApp().removable_drive_manager()->init(this->q); #ifdef _WIN32 //Trigger enumeration of removable media on Win32 notification. - this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); - this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_ATTACHED, [](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_DETACHED, [](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); #endif /* _WIN32 */ } @@ -8270,13 +8277,17 @@ void read_binary_stl(const std::string& filename, std::string& model_id, std::st } // BBS: backup & restore -std::vector Plater::priv::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) +std::vector Plater::priv::load_files(const std::vector& input_files, + LoadStrategy strategy, + bool ask_multi, + bool* published_out) { std::vector empty_result; bool dlg_cont = true; bool is_user_cancel = false; bool translate_old = false; - int current_width = 0, current_depth = 0, current_height = 0, project_filament_count = 1; + int current_width = 0, current_depth = 0, project_filament_count = 1; + double current_height = 0; if (input_files.empty()) return std::vector(); @@ -8320,6 +8331,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ int answer_convert_from_meters = wxOK_DEFAULT; int answer_convert_from_imperial_units = wxOK_DEFAULT; int tolal_model_count = 0; + // Whether one of the files being loaded here carried a CAD recipe. A statement about these + // files, not about the plater — q->model() may still hold the previous project's recipe. + bool loaded_cad_recipe = false; int progress_percent = 0; int total_files = input_files.size(); @@ -8349,10 +8363,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ const float INPUT_FILES_RATIO = 0.7; const float INIT_MODEL_RATIO = 0.75; const float CENTER_AROUND_ORIGIN_RATIO = 0.8; + const float LOAD_MODEL_RATIO = 0.9; for (size_t i = 0; i < input_files.size(); ++i) { - int file_percent = 0; #ifdef _WIN32 auto path = input_files[i]; @@ -8390,6 +8404,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ DynamicPrintConfig config; Semver file_version; En3mfType en_3mf_file_type = En3mfType::From_BBS; + // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; + // on load keep the user's current presets and overlay only those keys. Declared + // here (outside the config block below) so it stays alive for the embedded-preset + // gate, the metadata strip and the preset overlay after the block closes. + PublishedConfig published_config; { DynamicPrintConfig config_loaded; @@ -8401,7 +8420,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ q->skip_thumbnail_invalid = true; model = Slic3r::Model::read_from_archive(path.string(), &config_loaded, &config_substitutions, en_3mf_file_type, strategy, &plate_data, &project_presets, &file_version, - [this, &dlg, real_filename, &progress_percent, &file_percent, stage_percent, INPUT_FILES_RATIO, total_files, i, + [&dlg, real_filename, &progress_percent, stage_percent, INPUT_FILES_RATIO, total_files, i, &is_user_cancel](int import_stage, int current, int total, bool &cancel) { bool cont = true; float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)stage_percent[import_stage] + (float)current * (float)(stage_percent[import_stage + 1] - stage_percent[import_stage]) /(float) total) / (float)total_files; @@ -8417,6 +8436,107 @@ std::vector Plater::priv::load_files(const std::vector& input_ << boost::format(", plate_data.size %1%, project_preset.size %2%, is_bbs_or_orca_3mf %3%, file_version %4% \n") % plate_data.size() % project_presets.size() % (en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) % file_version.to_string(); + // BBS: a "published" 3MF carries a flag plus the author-selected setting keys; + // on load keep the user's current presets and overlay only those keys. Parsed + // here (before the version/fallback chain below) because a published file has + // no project_settings.config: its values travel in the published_config + // metadata payload, which must fill config_loaded before the chain decides + // whether to import geometry only. + if (model.model_info != nullptr) { + auto published_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_TAG); + if (published_it != model.model_info->metadata_items.end() && is_published_3mf_flag(published_it->second)) { + published_config.published = true; + auto keys_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_KEYS_TAG); + if (keys_it != model.model_info->metadata_items.end()) { + try { + auto j = nlohmann::json::parse(keys_it->second); + if (j.is_array()) + for (const auto& k : j) + if (k.is_string()) + published_config.published_keys.emplace_back(k.get()); + } catch (...) { + // Ignore malformed published_keys; the project still loads normally. + } + } + + auto material_keys_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_MATERIAL_TAG); + if (material_keys_it != model.model_info->metadata_items.end()) { + try { + auto jm = nlohmann::json::parse(material_keys_it->second); + if (jm.is_array()) + for (const auto& m : jm) { + try { + // Malformed entries are isolated so one bad item + // cannot discard valid entries that follow it. + if (!m.is_object()) + continue; + PublishedMaterialEntry entry; + const auto mat_it = m.find("material"); + if (mat_it != m.end() && mat_it->is_object()) { + const auto& mat = *mat_it; + if (mat.contains("filament_type") && mat["filament_type"].is_string()) + entry.filament_type = mat["filament_type"].get(); + if (mat.contains("filament_vendor") && mat["filament_vendor"].is_string()) + entry.filament_vendor = mat["filament_vendor"].get(); + if (mat.contains("filament_id") && mat["filament_id"].is_string()) + entry.filament_id = mat["filament_id"].get(); + if (mat.contains("setting_id") && mat["setting_id"].is_string()) + entry.setting_id = mat["setting_id"].get(); + if (mat.contains("name") && mat["name"].is_string()) + entry.preset_name = mat["name"].get(); + } + if (m.contains("slot") && m["slot"].is_number_integer()) + entry.slot = m["slot"].get(); + const auto entry_keys_it = m.find("keys"); + if (entry_keys_it != m.end() && entry_keys_it->is_array()) + for (const auto& k : *entry_keys_it) + if (k.is_string()) + entry.keys.emplace_back(k.get()); + // Fields always written by the current exporter. + if (m.contains("full") && m["full"].is_boolean()) + entry.full = m["full"].get(); + const auto entry_full_keys_it = m.find("full_keys"); + if (entry_full_keys_it != m.end() && entry_full_keys_it->is_array()) + for (const auto& k : *entry_full_keys_it) + if (k.is_string()) + entry.full_keys.emplace_back(k.get()); + if (m.contains("publish_type") && m["publish_type"].is_boolean()) + entry.publish_type = m["publish_type"].get(); + if (m.contains("type") && m["type"].is_string()) + entry.publish_type_value = m["type"].get(); + if (m.contains("publish_color") && m["publish_color"].is_boolean()) + entry.publish_color = m["publish_color"].get(); + if (m.contains("color") && m["color"].is_string()) + entry.color = m["color"].get(); + published_config.material_keys.emplace_back(std::move(entry)); + } catch (const nlohmann::json::exception&) { + // Ignore only this malformed material entry. + } + } + } catch (const nlohmann::json::exception&) { + // Ignore malformed published_material_keys; the project still loads normally. + } + } + + // Rebuild the published values from the metadata payload: a published + // file carries no project_settings.config, so config_loaded is filled + // from here; a missing or malformed payload leaves it empty and the + // fallback chain below imports the geometry only. + auto payload_it = model.model_info->metadata_items.find(ORCA_PUBLISHED_CONFIG_TAG); + if (payload_it != model.model_info->metadata_items.end()) { + try { + ConfigSubstitutions payload_substitutions = + config_loaded.load_from_ini_string(payload_it->second, ForwardCompatibilitySubstitutionRule::Enable); + config_substitutions.substitutions.insert(config_substitutions.substitutions.end(), + std::make_move_iterator(payload_substitutions.begin()), + std::make_move_iterator(payload_substitutions.end())); + } catch (...) { + // Ignore malformed published_config; the project still loads normally. + } + } + } + } + // 1. add extruder for prusa model if the number of existing extruders is not enough // 2. add extruder for BBS or Other model if only import geometry if (en_3mf_file_type == En3mfType::From_Prusa || (load_model && !load_config)) { @@ -8580,7 +8700,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ text += "\n"; log_and_show_3mf_info(text, bambu_project_title); } - } else if (load_config) { + } else if (load_config && !published_config.published) { // BambuStudio version is older or same as our SLIC3R_VERSION wxString text = _L("The 3MF was created by BambuStudio. Some settings may differ from OrcaSlicer."); log_and_show_3mf_info(text, bambu_project_title); @@ -8640,7 +8760,9 @@ std::vector Plater::priv::load_files(const std::vector& input_ } Semver old_version(1, 5, 9); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && (file_version < old_version) && load_model && load_config && !config_loaded.empty()) { + // A published 3MF has no project config to migrate: skip the old-version + // translations even if a slicer tag slipped through classification. + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && (file_version < old_version) && !published_config.published && load_model && load_config && !config_loaded.empty()) { translate_old = true; partplate_list.get_plate_size(current_width, current_depth, current_height); } @@ -8662,8 +8784,10 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } - // BBS:: project embedded presets - if ((project_presets.size() > 0) && load_config) { + // BBS:: project embedded presets (skipped for published projects: the author's + // embedded presets must not pollute the receiver's library, the overlay applies + // the published keys to the receiver's own presets instead). + if ((project_presets.size() > 0) && load_config && !published_config.published) { // load project embedded presets PresetsConfigSubstitutions preset_substitutions; PresetBundle & preset_bundle = *wxGetApp().preset_bundle; @@ -8719,6 +8843,19 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } + // BBS: a "published" 3MF loads as a new project: its path must not become the + // project filename (Save/Ctrl-S would overwrite the shared file), and the + // published metadata is consumed above and stripped so a later save is a normal + // unpublished 3MF. + if (published_out != nullptr && published_config.published) + *published_out = true; + if (published_config.published && load_config && this->model.model_info != nullptr) { + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_KEYS_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_MATERIAL_TAG); + this->model.model_info->metadata_items.erase(ORCA_PUBLISHED_CONFIG_TAG); + } + if (load_config) { if (!config.empty()) { Preset::normalize(config); @@ -8727,7 +8864,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ { // BBS: modify the prime tower params for old version file Semver old_version3(2, 0, 0); - if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && file_version < old_version3) { + if ((en_3mf_file_type == En3mfType::From_BBS || en_3mf_file_type == En3mfType::From_Orca) && !published_config.published && file_version < old_version3) { double old_filament_prime_volume = 0.; int filament_count = 0; { @@ -8777,7 +8914,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } auto choise = wxGetApp().app_config->get("no_warn_when_modified_gcodes"); - if (choise.empty() || choise != "true") { + if (!published_config.published && (choise.empty() || choise != "true")) { // BBS: first validate the printer // validate the system profiles std::set modified_gcodes; @@ -8822,7 +8959,56 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (wipe_tower_y_opt) file_wipe_tower_y = *wipe_tower_y_opt; - preset_bundle->load_config_model(filename.string(), std::move(config), file_version); + // Convert the printer's filament ids to Orca ids before loading. + if (auto* agent = wxGetApp().getAgent()) { + if (auto* ids = config.opt("filament_ids")) + for (std::string& id : ids->values) + id = agent->to_orca_filament_id(id); + } + preset_bundle->load_config_model(filename.string(), std::move(config), file_version, &published_config); + + // Mixed-filament definitions that collided with one of the + // receiver's real slots were relocated during the preset load. + // Re-point the freshly parsed model's extruder references and + // color painting from the author's slot numbers to where each + // definition landed, so volumes colored with a mix follow it. + // Runs before the objects are handed over to the plater below. + if (load_model && !published_config.mixed_slot_relocations.empty()) + Slic3r::remap_model_filament_slots(model, published_config.mixed_slot_relocations); + + // BBS: notify the user about published settings that could not be applied. + if (!published_config.skipped_keys.empty()) { + NotificationManager* notify_manager = q->get_notification_manager(); + std::string message = _u8L("Some published settings could not be applied:"); + for (const std::string& key : published_config.skipped_keys) + message += "\n-" + key; + // Informational: the load succeeded, these keys were skipped. + notify_manager + ->bbl_show_3mf_warn_notification(message, + NotificationManager::NotificationLevel::WarningNotificationLevel); + } + + // BBS: notify the user about slot materials that were replaced while + // loading a published project (type mismatch / no same-type match). + if (!published_config.material_replacements.empty()) { + NotificationManager* notify_manager = q->get_notification_manager(); + std::string message = _u8L("Some filament slots were changed:"); + for (const std::string& replacement : published_config.material_replacements) + message += "\n-" + replacement; + // Informational: the load succeeded, the slots were adapted. + notify_manager + ->bbl_show_3mf_warn_notification(message, + NotificationManager::NotificationLevel::WarningNotificationLevel); + } + + // Remember the imported published selection so the Publish dialog is + // pre-seeded with the file's settings. Stored after the load so any + // per-slot relocations are already reflected in material_keys. + if (published_config.published) { + this->m_has_pending_published = true; + this->m_pending_published_keys = published_config.published_keys; + this->m_pending_material_keys = published_config.material_keys; + } ConfigOption* bed_type_opt = preset_bundle->project_config.option("curr_bed_type"); if (bed_type_opt != nullptr) { @@ -8963,7 +9149,13 @@ std::vector Plater::priv::load_files(const std::vector& input_ dynamic_map->value = false; } // Update filament combobox after loading config - wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT); + if (published_config.published) { + q->update_filament_colors_in_full_config(); + wxGetApp().plater()->sidebar().update_all_preset_comboboxes(); + wxGetApp().plater()->sidebar().update_dynamic_filament_list(); + } else { + wxGetApp().plater()->sidebar().update_presets(Preset::TYPE_FILAMENT); + } // The loaded project supplies nozzle_volume_type; refresh the sidebar // nozzle-count badges against it. if (auto *nozzle_volumes = wxGetApp().preset_bundle->project_config.option("nozzle_volume_type")) { @@ -8984,7 +9176,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ Semver file_version; //ObjImportColorFn obj_color_fun=nullptr; - auto obj_color_fun = [this, &path](ObjDialogInOut &in_out) { + auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path.string(), ".obj")) { return; } const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); @@ -9001,7 +9193,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (angle <= 0) angle = 0.5; bool split_compound = wxGetApp().app_config->get_bool("is_split_compound"); model = Slic3r::Model:: read_from_step(path.string(), strategy, - [this, &dlg, real_filename, &progress_percent, &file_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel) + [&dlg, real_filename, &progress_percent, step_percent, INPUT_FILES_RATIO, total_files, i](int load_stage, int current, int total, bool &cancel) { bool cont = true; float percent_float = (100.0f * (float)i / (float)total_files) + INPUT_FILES_RATIO * ((float)step_percent[load_stage] + (float)current * (float)(step_percent[load_stage + 1] - step_percent[load_stage]) / (float)total) / (float)total_files; @@ -9015,7 +9207,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ if (!isUtf8StepFile) { const auto no_warn = wxGetApp().app_config->get_bool("step_not_utf8_no_warn"); if (!no_warn) { - MessageDialog dlg(nullptr, _L("Component name(s) inside step file not in UTF8 format!") + "\n\n" + _L("Because of unsupported text encoding, garbage characters may appear!"), + MessageDialog dlg(nullptr, _L("Component name(s) inside step file not in UTF-8 format!") + "\n\n" + _L("Because of unsupported text encoding, garbage characters may appear!"), wxString(SLIC3R_APP_FULL_NAME " - ") + _L("Attention!"), wxOK | wxICON_INFORMATION); dlg.show_dsa_button(_L("Remember my choice.")); dlg.ShowModal(); @@ -9025,7 +9217,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } } }, - [this, &path, &is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split)-> int { + [&is_user_cancel, &linear, &angle, &split_compound](Slic3r::Step& file, double& linear_value, double& angle_value, bool& is_split)-> int { if (wxGetApp().app_config->get_bool("enable_step_mesh_setting")) { StepMeshDialog mesh_dlg(nullptr, file, linear, angle); if (mesh_dlg.ShowModal() == wxID_OK) { @@ -9046,7 +9238,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ }else { model = Slic3r::Model:: read_from_file( path.string(), nullptr, nullptr, strategy, &plate_data, &project_presets, &is_xxx, &file_version, nullptr, - [this, &dlg, real_filename, &progress_percent, &file_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) + [&dlg, real_filename, &progress_percent, INPUT_FILES_RATIO, total_files, i, &designer_model_id, &designer_country_code](int current, int total, bool &cancel, std::string &mode_id, std::string &code) { designer_model_id = mode_id; designer_country_code = code; @@ -9128,7 +9320,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ else if (model.looks_like_saved_in_meters()) { // BBS do not handle look like in meters MessageDialog dlg(q, - format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"), + format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); int answer = dlg.ShowModal(); @@ -9136,7 +9328,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } else if (model.looks_like_imperial_units()) { // BBS do not handle look like in meters MessageDialog dlg(q, - format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\n Do you want to scale to millimeters\?"), + format_wxstr(_L("The object from file %s is too small, and may be in meters or inches.\nDo you want to scale to millimeters\?"), from_path(filename)), _L("Object too small"), wxICON_QUESTION | wxYES_NO); int answer = dlg.ShowModal(); @@ -9267,6 +9459,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ auto loaded_idxs = load_model_objects(model.objects, is_project_file); obj_idxs.insert(obj_idxs.end(), loaded_idxs.begin(), loaded_idxs.end()); + // load_model_objects only transfers ModelObjects; carry the Model-level CAD recipe + // onto the plater model so the Design tab can rehydrate the editable feature tree on + // reopen. Assigned unconditionally on the project-replacing path so that opening a + // project without a recipe clears whatever the previous one left behind; importing a + // plain model into the open project leaves the current recipe alone. + if (is_project_file) { + q->model().cad_recipe = model.cad_recipe; + loaded_cad_recipe = !model.cad_recipe.empty(); + } + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":" << __LINE__ << boost::format(", finished load_model_objects"); wxString msg = wxString::Format(_L("Loading file: %s"), from_path(real_filename)); dlg_cont = dlg.Update(progress_percent, msg); @@ -9483,7 +9685,12 @@ std::vector Plater::priv::load_files(const std::vector& input_ // q->model().stl_design_country = ""; //} - if (tolal_model_count <= 0 && !q->m_exported_file) { + // A CAD project legitimately carries no mesh: the model lives in the feature tree until it is + // committed to the plate. Warning "no geometry data" for one is false, and it is the LAST thing + // a user sees after opening a design they spent an hour on — it reads as "your work is gone" + // when the recipe has in fact just been loaded and the Design tab will rehydrate it. Count a + // recipe that came from THESE files as geometry. + if (tolal_model_count <= 0 && !loaded_cad_recipe && !q->m_exported_file) { dlg.Hide(); if (!is_user_cancel) { MessageDialog msg(wxGetApp().mainframe, _L("The file does not contain any geometry data."), _L("Warning"), wxYES | wxICON_WARNING); @@ -9716,7 +9923,7 @@ fs::path Plater::priv::get_export_file_path(GUI::FileType file_type) return output_file; } -wxString Plater::priv::get_export_file(GUI::FileType file_type) +wxString Plater::priv::get_export_file(GUI::FileType file_type, const wxString& title, bool published) { wxString wildcard; switch (file_type) { @@ -9758,8 +9965,11 @@ wxString Plater::priv::get_export_file(GUI::FileType file_type) } case FT_3MF: { - output_file.replace_extension("3mf"); - dlg_title = _L("Save file as"); + // A published export is suggested as ".published.3mf" so the role is visible in the + // dialog and in the recent-files list. This is only a pre-filled suggestion; the user's + // typed filename wins, keeping a plain ".3mf" output fully valid. + output_file.replace_extension(published ? "published.3mf" : "3mf"); + dlg_title = title.empty() ? _L("Save file as") : title; break; } case FT_OBJ: @@ -10023,6 +10233,10 @@ void Plater::priv::reset(bool apply_presets_change) ctx.code = Slic3r::LifecycleEvtCode::Ok; Slic3r::fire_lifecycle_event(Slic3r::LifecycleEvent::ProjectClosed, ctx); } + // A new project must not inherit the previous project's published selection (Feature A/B). + m_has_pending_published = false; + m_pending_published_keys.clear(); + m_pending_material_keys.clear(); set_project_filename(""); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: empty"; @@ -10049,6 +10263,16 @@ void Plater::priv::reset(bool apply_presets_change) // Stop and reset the Print content. this->background_process.reset(); model.clear_objects(); + // clear_objects() only drops the ModelObjects; the CAD recipe is Model-level state and would + // otherwise be written into every project saved for the rest of the session. + model.cad_recipe.clear(); +#ifdef SLIC3R_CAD + // Same reason, one level up: the Design tab keeps the editable document, not the Model, so + // clearing the recipe alone leaves the tab showing the previous project's feature tree — + // and its next edit syncs that tree straight back into the new project. + if (wxGetApp().mainframe != nullptr && wxGetApp().mainframe->m_design_panel != nullptr) + wxGetApp().mainframe->m_design_panel->clear_document(); +#endif assemble_view->get_canvas3d()->reset_explosion_ratio(); update(); @@ -11319,7 +11543,7 @@ void Plater::priv::reload_from_disk() // load one file at a time for (size_t i = 0; i < input_paths.size(); ++i) { const auto& path = input_paths[i].string(); - auto obj_color_fun = [this, &path](ObjDialogInOut &in_out) { + auto obj_color_fun = [&path](ObjDialogInOut &in_out) { if (!boost::iends_with(path, ".obj")) { return; } const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config(); ObjColorDialog color_dlg(nullptr, in_out, extruder_colours, Sidebar::should_show_SEMM_buttons()); @@ -13563,6 +13787,14 @@ void Plater::priv::unbind_canvas_event_handlers() if (assemble_view != nullptr) assemble_view->get_canvas3d()->unbind_event_handlers(); + +#ifdef SLIC3R_CAD + // The Design tab's viewport is a fourth GLCanvas3D on the same shared GL context, owned by + // MainFrame rather than by us — same reach as reset() uses for clear_document(). Null until + // the tab has been opened once, so most sessions skip it. + if (wxGetApp().mainframe != nullptr && wxGetApp().mainframe->m_design_panel != nullptr) + wxGetApp().mainframe->m_design_panel->unbind_canvas_event_handlers(); +#endif } void Plater::priv::reset_canvas_volumes() @@ -13572,6 +13804,11 @@ void Plater::priv::reset_canvas_volumes() if (preview != nullptr) preview->get_canvas3d()->reset_volumes(); + +#ifdef SLIC3R_CAD + if (wxGetApp().mainframe != nullptr && wxGetApp().mainframe->m_design_panel != nullptr) + wxGetApp().mainframe->m_design_panel->reset_canvas_volumes(); +#endif } bool Plater::priv::check_ams_status_impl(bool is_slice_all) @@ -15148,14 +15385,15 @@ void Plater::load_project(wxString const& filename2, if (strategy & LoadStrategy::Restore) input_paths.push_back(into_u8(originfile)); - std::vector res = load_files(input_paths, strategy); + bool loaded_published = false; + std::vector res = load_files(input_paths, strategy, false, &loaded_published); reset_project_dirty_initial_presets(); update_project_dirty_from_presets(); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); // if res is empty no data has been loaded - if (!res.empty() && (load_restore || !(strategy & LoadStrategy::Silence))) { + if (!res.empty() && !loaded_published && (load_restore || !(strategy & LoadStrategy::Silence))) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << (load_restore ? originfile : filename); p->set_project_filename(load_restore ? originfile : filename); if (load_restore && originfile.IsEmpty()) { @@ -15173,6 +15411,15 @@ void Plater::load_project(wxString const& filename2, if (using_exported_file()) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " using ecported set project filename: " << filename; p->set_project_filename(filename); + } else if (loaded_published && !res.empty()) { + // A "published" 3MF loads as a new project: its path must not become the project + // filename (Save/Ctrl-S prompts for a destination instead of overwriting it); + // reset() already cleared the project name, so restore the default title and keep + // the file in recents. Only on a successful load (res not empty): a failed or + // cancelled load must not pollute "Recently opened". + p->set_project_name(_L("Untitled")); + if (!filename.IsEmpty()) + wxGetApp().mainframe->add_to_recent_projects(filename); } } @@ -15333,7 +15580,7 @@ void Plater::import_model_id(wxString download_info) p->project.reset(); /* prepare project and profile */ - boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &cancel, &retry_count, max_retries, &msg, &target_path, &download_ok, download_url, &filename] { + boost::thread import_thread = Slic3r::create_thread([&percent, &cont, &retry_count, &msg, &target_path, &download_ok, download_url, &filename] { // Orca: NetworkAgent is not needed and only prevents this from running // NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); @@ -15440,7 +15687,7 @@ void Plater::import_model_id(wxString download_info) msg = wxString::Format(_L("Project downloaded %d%%"), percent); } }) - .on_error([&msg, &cont, &retry_count, max_retries](std::string body, std::string error, unsigned http_status) { + .on_error([&msg, &cont, &retry_count](std::string body, std::string error, unsigned http_status) { (void)body; BOOST_LOG_TRIVIAL(error) << format("Error getting: `%1%`: HTTP %2%, %3%", body, @@ -15544,8 +15791,12 @@ bool Plater::up_to_date(bool saved, bool backup) Slic3r::clear_other_changes(backup); return p->up_to_date(saved, backup); } - return p->model.objects.empty() || (p->up_to_date(saved, backup) && - !Slic3r::has_other_changes(backup)); + // A Design-tab project is object-less until it is committed to the plate, but its feature + // tree is real work: treating it as an empty project skipped both the autosave and the + // "unsaved changes" prompt, so quitting threw it away without asking. Non-CAD projects + // never carry a recipe, so the empty-project shortcut is unchanged for them. + return (p->model.objects.empty() && p->model.cad_recipe.empty()) || + (p->up_to_date(saved, backup) && !Slic3r::has_other_changes(backup)); } bool Plater::add_model(bool imperial_units, std::string fname) @@ -15622,6 +15873,7 @@ void Plater::calib_pa(const Calib_Params& params) auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; print_config->set_key_value("overhang_reverse", new ConfigOptionBool(false)); print_config->set_key_value("precise_z_height", new ConfigOptionBool(false)); + print_config->set_key_value("wipe_inward", new ConfigOptionBool(false)); printer_config->set_key_value("resonance_avoidance", new ConfigOptionBool{false}); switch (params.mode) { case CalibMode::Calib_PA_Line: @@ -16307,6 +16559,7 @@ void Plater::calib_retraction(const Calib_Params& params) auto obj = model().objects[0]; print_config->set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); + print_config->set_key_value("wipe_inward", new ConfigOptionBool(false)); float nozzle_diameter = printer_config->option("nozzle_diameter")->get_at(0); float layer_height; @@ -16336,6 +16589,7 @@ void Plater::calib_retraction(const Calib_Params& params) obj->config.set_key_value("wall_sequence", new ConfigOptionEnum(WallSequence::InnerOuter)); obj->config.set_key_value("overhang_reverse", new ConfigOptionBool(false)); obj->config.set_key_value("precise_z_height", new ConfigOptionBool(false)); + obj->config.set_key_value("seam_slope_type", new ConfigOptionEnum(SeamScarfType::None)); changed_objects({ 0 }); @@ -16841,22 +17095,12 @@ void Plater::force_update_all_plate_thumbnails() } // BBS: backup -std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) { +std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi, bool* published_out) { //BBS: wish to reset state when load a new file p->m_slice_all_only_has_gcode = false; //BBS: wish to reset all plates stats item selected state when load a new file p->preview->get_canvas3d()->reset_select_plate_toolbar_selection(); - return p->load_files(input_files, strategy, ask_multi); -} - -// To be called when providing a list of files to the GUI slic3r on command line. -std::vector Plater::load_files(const std::vector& input_files, LoadStrategy strategy, bool ask_multi) -{ - std::vector paths; - paths.reserve(input_files.size()); - for (const std::string& path : input_files) - paths.emplace_back(path); - return p->load_files(paths, strategy, ask_multi); + return p->load_files(input_files, strategy, ask_multi, published_out); } bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) @@ -17715,6 +17959,10 @@ void Plater::increase_instances(size_t num) model_object->add_instance(offset_vec, model_instance->get_scaling_factor(), model_instance->get_rotation(), model_instance->get_mirror()); // p->print.get_object(obj_idx)->add_copy(Slic3r::to_2d(offset_vec)); } + // Register the copies with the plate they land on before the scene reloads: the plate's + // filament list and wipe tower preview are read from that registry. + for (size_t i = model_object->instances.size() - num; i < model_object->instances.size(); ++i) + p->partplate_list.notify_instance_update(obj_idx, static_cast(i)); #ifdef SUPPORT_AUTO_CENTER if (p->get_config("autocenter") == "true") @@ -17745,8 +17993,10 @@ void Plater::decrease_instances(size_t num) ModelObject* model_object = p->model.objects[obj_idx]; if (model_object->instances.size() > num) { - for (size_t i = 0; i < num; ++ i) + for (size_t i = 0; i < num; ++ i) { + p->partplate_list.notify_instance_removed(obj_idx, static_cast(model_object->instances.size()) - 1); model_object->delete_last_instance(); + } p->update(); // Delete object from Sidebar list. Do it after update, so that the GLScene selection is updated with the modified model. sidebar().obj_list()->decrease_object_instances(obj_idx, num); @@ -18085,7 +18335,6 @@ void Plater::send_gcode_finish(wxString name) auto out_str = GUI::format(_L("The file %s has been sent to the printer's storage space and can be viewed on the printer."), name); p->notification_manager->push_exporting_finished_notification(out_str, "", false); } - void Plater::export_core_3mf() { wxString path = p->get_export_file(FT_3MF); @@ -18094,6 +18343,182 @@ void Plater::export_core_3mf() export_3mf(path_u8, SaveStrategy::Silence); } +// Export the current project as a "published" 3MF: a pure export that never touches the +// project's file name, dirty state, backup path or title, and attaches the published metadata +// to the model only for the duration of the export (a later Save Project is a normal 3MF). +int Plater::export_published_3mf(const std::vector& published_keys, + const std::vector& material_keys) +{ + wxString path = p->get_export_file(FT_3MF, _L("Publish 3MF file as:"), true); + if (path.empty() || path == "") + return wxID_CANCEL; + + nlohmann::json j = nlohmann::json::array(); + for (const std::string& key : published_keys) + j.push_back(key); + nlohmann::json jm = nlohmann::json::array(); + for (const Slic3r::PublishedMaterialEntry& e : material_keys) + jm.push_back({{"material", + {{"filament_type", e.filament_type}, + {"filament_vendor", e.filament_vendor}, + {"filament_id", e.filament_id}, + {"setting_id", e.setting_id}, + {"name", e.preset_name}}}, + {"slot", e.slot}, + {"keys", e.keys}, + {"full", e.full}, + {"full_keys", e.full_keys}, + {"publish_type", e.publish_type}, + {"type", e.publish_type_value}, + {"publish_color", e.publish_color}, + {"color", e.color}}); + + Model& model = this->model(); + // Save the previous metadata so it can be restored after the export, keeping the in-memory + // project pristine (the published flag lives only in the exported file). + const bool had_model_info = (model.model_info != nullptr); + const bool had_published = had_model_info && + (model.model_info->metadata_items.find(ORCA_PUBLISHED_TAG) != model.model_info->metadata_items.end()); + const bool had_published_keys = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_KEYS_TAG) != + model.model_info->metadata_items.end()); + const bool had_material_keys = had_model_info && (model.model_info->metadata_items.find(ORCA_PUBLISHED_MATERIAL_TAG) != + model.model_info->metadata_items.end()); + const bool had_payload = had_model_info && + (model.model_info->metadata_items.find(ORCA_PUBLISHED_CONFIG_TAG) != model.model_info->metadata_items.end()); + const std::string prev_published = had_published ? model.model_info->metadata_items.at(ORCA_PUBLISHED_TAG) : std::string(); + const std::string prev_published_keys = had_published_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_KEYS_TAG) : + std::string(); + const std::string prev_material_keys = had_material_keys ? model.model_info->metadata_items.at(ORCA_PUBLISHED_MATERIAL_TAG) : + std::string(); + const std::string prev_payload = had_payload ? model.model_info->metadata_items.at(ORCA_PUBLISHED_CONFIG_TAG) : std::string(); + + // export_3mf() assigns archive paths to previously unsaved SVGs. Preserve those fields too, + // otherwise a publish changes what a later normal project save writes. + std::vector> previous_svg_paths; + for (ModelObject* object : model.objects) + for (ModelVolume* volume : object->volumes) + if (volume != nullptr && volume->emboss_shape.has_value() && volume->emboss_shape->svg_file.has_value()) { + std::string* path_in_3mf = &volume->emboss_shape->svg_file->path_in_3mf; + previous_svg_paths.emplace_back(path_in_3mf, *path_in_3mf); + } + + auto restore_temporary_state = [&]() { + for (const auto& [path_in_3mf, previous_path] : previous_svg_paths) + *path_in_3mf = previous_path; + + if (!had_model_info) { + model.model_info = nullptr; + } else { + if (had_published) + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = prev_published; + else + model.model_info->metadata_items.erase(ORCA_PUBLISHED_TAG); + if (had_published_keys) + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = prev_published_keys; + else + model.model_info->metadata_items.erase(ORCA_PUBLISHED_KEYS_TAG); + if (had_material_keys) + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = prev_material_keys; + else + model.model_info->metadata_items.erase(ORCA_PUBLISHED_MATERIAL_TAG); + if (had_payload) + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = prev_payload; + else + model.model_info->metadata_items.erase(ORCA_PUBLISHED_CONFIG_TAG); + } + }; + bool state_restored = false; + auto restore_now = [&]() { + if (state_restored) + return; + restore_temporary_state(); + state_restored = true; + }; + ScopeGuard restore_guard(restore_now); + + if (model.model_info == nullptr) + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = j.dump(); + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = jm.dump(); + + int ret = -1; + try { + // Minimal published export: filter full_config to the published keys, material keys, + // identity fields and plate geometry keys, and omit the project config file, the + // project-embedded preset dumps and the OrcaSlicer version tag from the archive. The + // filtered values are serialized into the published_config metadata payload instead, so + // OrcaSlicer versions without the publish feature fall back to importing the geometry only + // (keeping the receiver's presets) while new versions rebuild the config from the payload. + DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config_secure(); + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + std::string payload; + for (const std::string& key : filtered_cfg.keys()) { + // A value containing a newline would break the INI written below (read_ini throws), + // so load_from_ini_string discards the whole settings block on import. Skip such + // keys instead of silently dropping every setting. + std::string value = filtered_cfg.opt_serialize(key); + if (value.find('\n') != std::string::npos) { + BOOST_LOG_TRIVIAL(warning) << "publish: dropping key \"" << key + << "\" from the published payload (value contains a newline)"; + continue; + } + payload += key + " = " + value + "\n"; + } + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = std::move(payload); + + // Same file layout as save_project(), plus Silence (so export_3mf does not set the project + // filename on success, keeping this a pure export like export_core_3mf()) and MinimalPublished. + auto save_strategy = SaveStrategy::SplitModel | SaveStrategy::ShareMesh | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + bool full_pathnames = wxGetApp().app_config->get_bool("export_sources_full_pathnames"); + if (full_pathnames) + save_strategy = save_strategy | SaveStrategy::FullPathSources; + ret = export_3mf(into_path(path), save_strategy, -1, nullptr); + } catch (...) { + restore_now(); + MessageDialog(this, + _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs " + "have the file open."), + _L("Publish"), wxOK | wxICON_WARNING) + .ShowModal(); + return wxID_CANCEL; + } + + if (ret < 0) { + restore_now(); + MessageDialog(this, + _L("Failed to export the published 3MF file.\nPlease check whether the folder exists online or if other programs " + "have the file open."), + _L("Publish"), wxOK | wxICON_WARNING) + .ShowModal(); + return wxID_CANCEL; + } + restore_now(); + + // Register the exported file in the "Recently opened" list + wxGetApp().mainframe->add_to_recent_projects(path); + + return wxID_YES; +} + +bool Plater::get_pending_published(std::vector& out_keys, + std::vector& out_material) const +{ + if (!p->m_has_pending_published) + return false; + out_keys = p->m_pending_published_keys; + out_material = p->m_pending_material_keys; + return true; +} + +void Plater::set_pending_published(const std::vector& published_keys, + const std::vector& material_keys) +{ + p->m_has_pending_published = true; + p->m_pending_published_keys = published_keys; + p->m_pending_material_keys = material_keys; +} + Preset *get_printer_preset(const MachineObject *obj) { if (!obj) @@ -18738,6 +19163,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy nozzle_diameter_str = nozzle_diameter_option->serialize(); std::string printer_model_id = preset_bundle.printers.get_edited_preset().get_printer_type(&preset_bundle); + // The printer reads slice_info.config and knows only its own catalog ids. + auto* id_agent = preset_bundle.is_bbl_vendor() ? wxGetApp().getAgent() : nullptr; for (int i = 0; i < plate_data_list.size(); i++) { PlateData *plate_data = plate_data_list[i]; @@ -18747,6 +19174,8 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy std::string display_filament_type; it->type = cfg.get_filament_type(display_filament_type, it->id); it->filament_id = filament_id_opt ? filament_id_opt->get_at(it->id) : ""; + if (id_agent) + it->filament_id = id_agent->from_orca_filament_id(it->filament_id); it->color = filament_color ? filament_color->get_at(it->id) : "#FFFFFF"; // save filament info used in curr plate int index = p->partplate_list.get_curr_plate_index(); @@ -21725,7 +22154,7 @@ void Plater::show_object_info() auto mesh_errors = p->sidebar->obj_list()->get_mesh_errors_info(&info_manifold, &non_manifold_edges); if (non_manifold_edges > 0) { - info_manifold += into_u8("\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh.")); + info_manifold += "\n" + _L("Tips:") + "\n" + _L("Use \"Fix Model\" to repair the mesh."); } info_manifold = "" + info_manifold + ""; diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5308deec61..84e64acea0 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -42,6 +42,7 @@ class Button; namespace Slic3r { class BuildVolume; +class MachineObject; enum class BuildVolume_Type : char; class Model; class ModelObject; @@ -407,9 +408,7 @@ public: bool preview_zip_archive(const boost::filesystem::path& archive_path); // BBS: restore - std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false); - // To be called when providing a list of files to the GUI slic3r on command line. - std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false); + std::vector load_files(const std::vector& input_files, LoadStrategy strategy = LoadStrategy::LoadModel | LoadStrategy::LoadConfig, bool ask_multi = false, bool* published_out = nullptr); // to be called on drag and drop bool load_files(const wxArrayString& filenames); @@ -519,6 +518,13 @@ public: void export_gcode_3mf(bool export_all = false); void send_gcode_finish(wxString name); void export_core_3mf(); + // Export a "published" 3MF embedding the author-selected settings in the file metadata; a + // pure export that leaves the in-memory project untouched. + int export_published_3mf(const std::vector& published_keys, const std::vector& material_keys); + // Session-level stash of the last published selection, seeded into the Publish dialog on + // open and written on publish or on loading a published 3MF + bool get_pending_published(std::vector& out_keys, std::vector& out_material) const; + void set_pending_published(const std::vector& published_keys, const std::vector& material_keys); static TriangleMesh combine_mesh_fff(const ModelObject& mo, int instance_id, std::function notify_func = {}); void export_stl(bool extended = false, bool selection_only = false, bool multi_stls = false, FileType file_type = FT_STL); //BBS: remove amf diff --git a/src/slic3r/GUI/PluginPickerDialog.cpp b/src/slic3r/GUI/PluginPickerDialog.cpp index d0c387b0c0..5109b3b483 100644 --- a/src/slic3r/GUI/PluginPickerDialog.cpp +++ b/src/slic3r/GUI/PluginPickerDialog.cpp @@ -9,14 +9,17 @@ #include "GUI.hpp" #include "I18N.hpp" +#include "GUI_App.hpp" + +#include "Widgets/DialogButtons.hpp" + namespace Slic3r { namespace GUI { PluginPickerDialog::PluginPickerDialog(wxWindow* parent, const wxString& plugin_type_label, const std::vector& plugins) - : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) + : DPIDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_plugins(plugins) - , m_capability_mode(false) { build_ui(plugin_type_label); CentreOnParent(); @@ -25,9 +28,8 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, PluginPickerDialog::PluginPickerDialog(wxWindow* parent, const wxString& plugin_type_label, std::vector capabilities) - : wxDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) + : DPIDialog(parent, wxID_ANY, wxString::Format(_L("Select %s Plugin"), plugin_type_label)) , m_capabilities(std::move(capabilities)) - , m_capability_mode(true) { build_capability_ui(plugin_type_label); CentreOnParent(); @@ -35,12 +37,18 @@ PluginPickerDialog::PluginPickerDialog(wxWindow* parent, void PluginPickerDialog::build_ui(const wxString& plugin_type_label) { + SetBackgroundColour(*wxWHITE); + const bool has_plugins = !m_plugins.empty(); auto* top_sizer = new wxBoxSizer(wxVERTICAL); auto* info_text = new wxStaticText(this, wxID_ANY, wxString::Format(_L("Choose a %s plugin from the list below."), plugin_type_label)); - top_sizer->Add(info_text, 0, wxALL | wxEXPAND, 10); + info_text->SetFont(Label::Body_14); + info_text->SetForegroundColour(wxColour("#363636")); + top_sizer->Add(info_text, 0, wxALL | wxEXPAND, FromDIP(10)); + + top_sizer->AddSpacer(FromDIP(5)); wxArrayString choices; choices.reserve(m_plugins.size()); @@ -51,84 +59,103 @@ void PluginPickerDialog::build_ui(const wxString& plugin_type_label) choices.Add(label); } - m_choice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices); + m_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + for (const wxString &opt : choices) { m_choice->Append(opt); } + if (has_plugins) { m_choice->SetSelection(0); - m_choice->Bind(wxEVT_CHOICE, [this](wxCommandEvent& evt) { + m_choice->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { update_description(evt.GetSelection()); }); } else { m_choice->Enable(false); } - top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, 10); + top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(10)); m_description = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_description->SetFont(Label::Body_14); + m_description->SetForegroundColour(wxColour("#363636")); m_description->Wrap(400); - top_sizer->Add(m_description, 0, wxALL | wxEXPAND, 10); + top_sizer->Add(m_description, 0, wxALL | wxEXPAND, FromDIP(10)); if (has_plugins) update_description(0); else m_description->SetLabel(_L("No plugins found for this type.")); - auto* button_sizer = new wxStdDialogButtonSizer(); - auto* ok_button = new wxButton(this, wxID_OK); - ok_button->Enable(has_plugins); - button_sizer->AddButton(ok_button); - button_sizer->AddButton(new wxButton(this, wxID_CANCEL)); - button_sizer->Realize(); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); - top_sizer->Add(button_sizer, 0, wxALL | wxALIGN_RIGHT, 10); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_OK); }); + dlg_btns->GetOK()->Enable(has_plugins); + + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); + + top_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(top_sizer); + + wxGetApp().UpdateDlgDarkUI(this); } void PluginPickerDialog::build_capability_ui(const wxString& plugin_type_label) { + SetBackgroundColour(*wxWHITE); + const bool has_capabilities = !m_capabilities.empty(); auto* top_sizer = new wxBoxSizer(wxVERTICAL); auto* info_text = new wxStaticText(this, wxID_ANY, wxString::Format(_L("Choose a %s plugin from the list below."), plugin_type_label)); - top_sizer->Add(info_text, 0, wxALL | wxEXPAND, 10); + info_text->SetFont(Label::Body_14); + info_text->SetForegroundColour(wxColour("#363636")); + + top_sizer->Add(info_text, 0, wxALL | wxEXPAND, FromDIP(10)); + + top_sizer->AddSpacer(FromDIP(5)); wxArrayString choices; choices.reserve(m_capabilities.size()); for (const auto& cap : m_capabilities) choices.Add(cap.label); - m_choice = new wxChoice(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, choices); + m_choice = new ComboBox(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY); + for (const wxString &opt : choices) { m_choice->Append(opt); } + if (has_capabilities) { m_choice->SetSelection(0); - m_choice->Bind(wxEVT_CHOICE, [this](wxCommandEvent& evt) { + m_choice->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& evt) { update_capability_description(evt.GetSelection()); }); } else { m_choice->Enable(false); } - top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, 10); + top_sizer->Add(m_choice, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(10)); m_description = new wxStaticText(this, wxID_ANY, wxEmptyString); + m_description->SetFont(Label::Body_14); + m_description->SetForegroundColour(wxColour("#363636")); m_description->Wrap(400); - top_sizer->Add(m_description, 0, wxALL | wxEXPAND, 10); + top_sizer->Add(m_description, 0, wxALL | wxEXPAND, FromDIP(10)); if (has_capabilities) update_capability_description(0); else m_description->SetLabel(_L("No plugins found for this type.")); - auto* button_sizer = new wxStdDialogButtonSizer(); - auto* ok_button = new wxButton(this, wxID_OK); - ok_button->Enable(has_capabilities); - button_sizer->AddButton(ok_button); - button_sizer->AddButton(new wxButton(this, wxID_CANCEL)); - button_sizer->Realize(); + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); - top_sizer->Add(button_sizer, 0, wxALL | wxALIGN_RIGHT, 10); + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_OK); }); + dlg_btns->GetOK()->Enable(has_capabilities); + + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { EndModal(wxID_CANCEL); }); + + top_sizer->Add(dlg_btns, 0, wxEXPAND); SetSizerAndFit(top_sizer); + + wxGetApp().UpdateDlgDarkUI(this); } PluginPickerDialog::CapabilityEntry PluginPickerDialog::selected_capability() const @@ -187,4 +214,6 @@ void PluginPickerDialog::update_description(int selection) Layout(); } +void PluginPickerDialog::on_dpi_changed(const wxRect &suggested_rect) {} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PluginPickerDialog.hpp b/src/slic3r/GUI/PluginPickerDialog.hpp index 0d676eb04d..6ae4163c5f 100644 --- a/src/slic3r/GUI/PluginPickerDialog.hpp +++ b/src/slic3r/GUI/PluginPickerDialog.hpp @@ -11,9 +11,12 @@ #include "slic3r/plugin/PluginManager.hpp" +#include "GUI_Utils.hpp" +#include "Widgets/ComboBox.hpp" + namespace Slic3r { namespace GUI { -class PluginPickerDialog : public wxDialog +class PluginPickerDialog : public DPIDialog { public: // Entry for capability-level selection (plugin_type non-empty path). @@ -40,17 +43,18 @@ public: // Returns the {plugin_key, name} of the selected capability (capability path). CapabilityEntry selected_capability() const; + void on_dpi_changed(const wxRect &suggested_rect) override; + private: void build_ui(const wxString& plugin_type_label); void build_capability_ui(const wxString& plugin_type_label); void update_description(int selection); void update_capability_description(int selection); - wxChoice* m_choice { nullptr }; + ComboBox* m_choice { nullptr }; wxStaticText* m_description { nullptr }; std::vector m_plugins; std::vector m_capabilities; - bool m_capability_mode { false }; }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PluginsConfigDialog.cpp b/src/slic3r/GUI/PluginsConfigDialog.cpp index 0241b47b8c..9a79588af1 100644 --- a/src/slic3r/GUI/PluginsConfigDialog.cpp +++ b/src/slic3r/GUI/PluginsConfigDialog.cpp @@ -1,6 +1,7 @@ #include "PluginsConfigDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "format.hpp" diff --git a/src/slic3r/GUI/PluginsDialog.cpp b/src/slic3r/GUI/PluginsDialog.cpp index a39fcbc535..2bac7eddca 100644 --- a/src/slic3r/GUI/PluginsDialog.cpp +++ b/src/slic3r/GUI/PluginsDialog.cpp @@ -2,6 +2,7 @@ #include "GUI.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/NetworkAgent.hpp" #include "I18N.hpp" #include "OrcaCloudServiceAgent.hpp" #include "slic3r/plugin/PluginConfig.hpp" diff --git a/src/slic3r/GUI/PluginsDialog.hpp b/src/slic3r/GUI/PluginsDialog.hpp index e663de79e4..ec68d12969 100644 --- a/src/slic3r/GUI/PluginsDialog.hpp +++ b/src/slic3r/GUI/PluginsDialog.hpp @@ -2,6 +2,7 @@ #define slic3r_PluginsDialog_hpp_ #include "Widgets/WebViewHostDialog.hpp" +#include "Widgets/ProgressDialog.hpp" #include "PluginSource.hpp" #include "PluginStatus.hpp" #include "PluginSort.hpp" @@ -107,12 +108,12 @@ private: const wxString& title, const wxString& message, int maximum = 100, - int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE, + int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE, // | wxPD_CAN_ABORT for cancel button bool finish_after_dialog_destroyed = false) { const auto alive = m_alive; - wxProgressDialog* progress = new wxProgressDialog(title, message, maximum, this, style); - wxTimer* timer = new wxTimer(); + ProgressDialog* progress = new ProgressDialog(title, message, maximum, this, style); + wxTimer* timer = new wxTimer(); timer->Bind(wxEVT_TIMER, [alive, progress, message](wxTimerEvent&) { if (alive->load(std::memory_order_acquire) && progress) diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 8f3ac17f7c..aa831ad489 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -2,12 +2,14 @@ #include "OptionsGroup.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" +#include "WebViewDialog.hpp" #include "Plater.hpp" #include "GLCanvas3D.hpp" // ORCA: for live preview refresh when toggling "Dim lower layers" #include "MsgDialog.hpp" #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" #include "libslic3r/Format/DRC.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" #include #include "OG_CustomCtrl.hpp" #include "wx/graphics.h" @@ -347,7 +349,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS wxLanguage supported_languages[]{ wxLANGUAGE_ENGLISH, wxLANGUAGE_CHINESE_SIMPLIFIED, - wxLANGUAGE_CHINESE, + wxLANGUAGE_CHINESE_TRADITIONAL, wxLANGUAGE_GERMAN, wxLANGUAGE_CZECH, wxLANGUAGE_FRENCH, @@ -366,7 +368,8 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS wxLANGUAGE_PORTUGUESE_BRAZILIAN, wxLANGUAGE_LITHUANIAN, wxLANGUAGE_VIETNAMESE, - wxLANGUAGE_THAI + wxLANGUAGE_THAI, + wxLANGUAGE_ROMANIAN }; auto translations = wxTranslations::Get()->GetAvailableTranslations(SLIC3R_APP_KEY); @@ -407,7 +410,7 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE_SIMPLIFIED)) { language_name = wxString::FromUTF8("\xe4\xb8\xad\xe6\x96\x87\x28\xe7\xae\x80\xe4\xbd\x93\x29"); } - else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE)) { + else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_CHINESE_TRADITIONAL)) { language_name = wxString::FromUTF8("\xe4\xb8\xad\xe6\x96\x87\x28\xe7\xb9\x81\xe9\xab\x94\x29"); } else if (vlist[i] == wxLocale::GetLanguageInfo(wxLANGUAGE_SPANISH)) { @@ -507,26 +510,14 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox(wxString title, wxS } } - - // the dialog needs to be destroyed before the call to switch_language() - // or sometimes the application crashes into wxDialogBase() destructor - // so we put it into an inner scope - MessageDialog msg_wingow(nullptr, _L("Switching languages requires the application to restart.\n") + "\n" + _L("Do you want to continue?"), - L("Language selection"), wxICON_QUESTION | wxOK | wxCANCEL); - if (msg_wingow.ShowModal() == wxID_CANCEL) { + MessageDialog msg_window(nullptr, _L("Switching languages requires the application to restart.\n") + "\n" + _L("Do you want to continue?"), + _L("Language selection"), wxICON_QUESTION | wxOK | wxCANCEL); + if (msg_window.ShowModal() == wxID_CANCEL) { combobox->SetSelection(m_current_language_selected); return; } } - auto check = [this](bool yes_or_no) { - // if (yes_or_no) - // return true; - int act_btns = ActionButtons::SAVE; - return wxGetApp().check_and_keep_current_preset_changes(_L("Switching application language"), - _L("Switching application language while some presets are modified."), act_btns); - }; - m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { m_pending_language = vlist[m_current_language_selected]->CanonicalName.ToUTF8().data(); @@ -1031,11 +1022,6 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxString too app_config->set_bool(param, checkbox->GetValue()); app_config->save(); - // if (param == "staff_pick_switch") { - // bool pbool = app_config->get("staff_pick_switch") == "true"; - // wxGetApp().switch_staff_pick(pbool); - // } - if (param == "sync_user_preset") { bool sync = app_config->get("sync_user_preset") == "true" ? true : false; if (sync) { @@ -1200,7 +1186,7 @@ wxBoxSizer* PreferencesDialog::create_item_button(wxString title, wxString title m_button_download->SetStyle(title2 == _L("Clear") ? ButtonStyle::Alert : ButtonStyle::Regular, ButtonType::Parameter); m_button_download->SetToolTip(tooltip2.IsEmpty() ? tooltip : tooltip2); // use label tooltip if button tooltip empty - m_button_download->Bind(wxEVT_BUTTON, [this, onclick](auto &e) { onclick(); }); + m_button_download->Bind(wxEVT_BUTTON, [onclick](auto &e) { onclick(); }); m_sizer->Add(m_button_download, 0, wxALIGN_CENTER_VERTICAL); @@ -1490,7 +1476,7 @@ void PreferencesDialog::create() m_sizer_body = new wxBoxSizer(wxVERTICAL); m_pref_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); - m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_pref_tabs->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable right select m_pref_tabs->SetFont(Label::Body_14); create_items(); @@ -1740,6 +1726,21 @@ void PreferencesDialog::create_items() auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)")); g_sizer->Add(item_multi_machine); +#ifdef SLIC3R_CAD + auto item_cad_feature = create_item_checkbox(_L("CAD feature (experimental)"), + _L("With this option enabled, the Design tab is shown, where models can be built and edited " + "parametrically. This feature is experimental and still under development."), + "enable_cad_feature", _L("(Requires restart)")); + g_sizer->Add(item_cad_feature); + + auto item_auto_close_sketch_loops = create_item_checkbox(_L("Auto-close sketch loops"), + _L("Treat sketch endpoints within 0.001 mm as one joint and weld the loop shut. " + "Off: only exactly coincident endpoints join, so a loop with a tiny gap is " + "shown as open instead of being closed for you."), + "auto_close_sketch_loops"); + g_sizer->Add(item_auto_close_sketch_loops); +#endif + #if 0 g_sizer->Add(create_item_title(_L("Filament Grouping")), 1, wxEXPAND); //temporarily disable it @@ -1816,6 +1817,21 @@ void PreferencesDialog::create_items() auto reverse_mouse_zoom = create_item_checkbox(_L("Reverse mouse zoom"), _L("If enabled, reverses the direction of zoom with mouse wheel."), "reverse_mouse_wheel_zoom"); g_sizer->Add(reverse_mouse_zoom); +#ifdef SLIC3R_CAD + // Design-tab only, so it stays out of the way while the CAD feature is switched off. + if (wxGetApp().is_enable_cad_feature()) { + auto item_connector_face_glyph = create_item_checkbox(_L("Draw mate connectors as a face"), + _L("In the Design tab, draw a mate connector as a small face instead of the conventional " + "disc with a roll quadrant. A face's orientation is read without being learned. " + "Turn this off for the conventional CAD representation."), "design_connector_face_glyph"); + g_sizer->Add(item_connector_face_glyph); + } + + // Push the weld preference into the kernel now so toggling it takes effect without + // a restart (the sketch tool also re-pushes on activation, see DesignSketchTool::begin). + Slic3r::set_sketch_auto_close(wxGetApp().is_auto_close_sketch_loops()); +#endif + std::vector ButtonDragActions = {_L("None"), _L("Pan"), _L("Rotate")}; auto item_left_mouse_drag = create_item_combobox(_L("Left Mouse Drag"), _L("Set the action that dragging the left mouse button should perform."), "left_mouse_drag_action", ButtonDragActions); g_sizer->Add(item_left_mouse_drag); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index f78af21a99..ac419073d7 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -873,10 +873,15 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset auto fila_type = Preset::remove_suffix_modified(GetValue().ToUTF8().data()); bool is_official = boost::algorithm::starts_with(fila_type, "Bambu"); if (is_official) { - // Get filament_id from filament_presets + // Get filament_id from filament_presets. FilamentPickerDialog looks up + // filaments_color_codes.json, which is downloaded from Bambu and keyed by the + // printer's own ids, so translate our OF id (the "GFA00" fallback is already one). const std::string& preset_name = m_preset_bundle->filament_presets[m_filament_idx]; const Preset* selected_preset = m_collection->find_preset(preset_name); - wxString fila_id = selected_preset ? wxString::FromUTF8(selected_preset->filament_id) : "GFA00"; + auto* agent = wxGetApp().getAgent(); + wxString fila_id = "GFA00"; + if (selected_preset) + fila_id = wxString::FromUTF8(agent ? agent->from_orca_filament_id(selected_preset->filament_id) : selected_preset->filament_id); FilamentColor fila_color = get_cur_color_info(); // Show filament picker dialog @@ -1653,7 +1658,7 @@ void TabPresetComboBox::OnSelect(wxCommandEvent &evt) default: break; } if (sp != ConfigWizard::SP_WELCOME) { - wxTheApp->CallAfter([this, sp]() { + wxTheApp->CallAfter([sp]() { run_wizard(sp); }); } @@ -1949,7 +1954,7 @@ GUI::CalibrateFilamentComboBox::CalibrateFilamentComboBox(wxWindow *parent) { clr_picker->SetBackgroundColour(StateColor::darkModeColorFor(*wxWHITE)); clr_picker->SetToolTip(""); - clr_picker->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) {}); + clr_picker->Bind(wxEVT_BUTTON, [](wxCommandEvent& e) {}); } GUI::CalibrateFilamentComboBox::~CalibrateFilamentComboBox() diff --git a/src/slic3r/GUI/PrintHostDialogs.cpp b/src/slic3r/GUI/PrintHostDialogs.cpp index 669468d852..2b4d212d0f 100644 --- a/src/slic3r/GUI/PrintHostDialogs.cpp +++ b/src/slic3r/GUI/PrintHostDialogs.cpp @@ -2062,7 +2062,7 @@ void CrealityPrintHostSendDialog::init() } for (auto* c : m_slot_combos) { - c->Bind(wxEVT_COMBOBOX, [this, ext_slot_idx](wxCommandEvent& e) { + c->Bind(wxEVT_COMBOBOX, [this](wxCommandEvent& e) { int sel = e.GetSelection(); if (sel >= 0 && sel < (int)m_printer_slots.size() && m_printer_slots[sel].box_id == 0) { diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index 8ecbe87391..9aa35e2cff 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -164,7 +164,7 @@ void PrinterFileSystem::ListAllFiles() req["storage"] = m_file_storage; req["api_version"] = 2; req["notify"] = "DETAIL"; - SendRequest(LIST_INFO, req, [this, type = m_file_type](json const& resp, FileList & list, auto) -> int { + SendRequest(LIST_INFO, req, [type = m_file_type](json const& resp, FileList & list, auto) -> int { json files = resp["file_lists"]; for (auto& f : files) { std::string name = f["name"]; @@ -662,10 +662,10 @@ PrinterFileSystem::File const &PrinterFileSystem::GetFile(size_t index, bool &se void PrinterFileSystem::Attached() { boost::unique_lock lock(m_mutex); - m_recv_thread = std::move(boost::thread([w = weak_from_this()] { + m_recv_thread = boost::thread([w = weak_from_this()] { boost::shared_ptr s = w.lock(); if (s) s->RecvMessageThread(); - })); + }); } void PrinterFileSystem::Start() @@ -1230,7 +1230,7 @@ boost::uint32_t PrinterFileSystem::RequestMediaAbility(int api_version) req["api_version"] = api_version; return SendRequest( - REQUEST_MEDIA_ABILITY, req, [this](const json &resp, MediaAbilityList &list, auto) -> int { + REQUEST_MEDIA_ABILITY, req, [](const json &resp, MediaAbilityList &list, auto) -> int { json abliity_list = resp["storage"]; list = abliity_list.get(); return 0; @@ -1803,7 +1803,7 @@ static void* get_function(const char* name) return function; #if defined(_MSC_VER) || defined(_WIN32) - function = GetProcAddress(module, name); + function = reinterpret_cast(GetProcAddress(module, name)); #else function = dlsym(module, name); #endif diff --git a/src/slic3r/GUI/Printer/gstbambusrc.c b/src/slic3r/GUI/Printer/gstbambusrc.c deleted file mode 100644 index d3f4ab112a..0000000000 --- a/src/slic3r/GUI/Printer/gstbambusrc.c +++ /dev/null @@ -1,657 +0,0 @@ -/* bambusrc for gstreamer - * integration with proprietary Bambu Lab blob for getting raw h.264 video - * - * Copyright (C) 2023 Joshua Wise - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Alternatively, the contents of this file may be used under the - * GNU Lesser General Public License Version 2.1 (the "LGPL"), in - * which case the following provisions apply instead of the ones - * mentioned above: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#include "gstbambusrc.h" - -#include -#include -#ifndef EXTERNAL_GST_PLUGIN -#define BAMBU_DYNAMIC -#endif -#include "BambuTunnel.h" - -#ifdef BAMBU_DYNAMIC -// From PrinterFileSystem. -#ifdef __cplusplus -extern "C" -#else -extern -#endif -BambuLib *bambulib_get(); -BambuLib *_lib = NULL; -#define BAMBULIB(x) (_lib->x) - -#else -#define BAMBULIB(x) (x) -#endif - -GST_DEBUG_CATEGORY_STATIC (gst_bambusrc_debug); -#define GST_CAT_DEFAULT gst_bambusrc_debug - -static GstStaticPadTemplate srctemplate = GST_STATIC_PAD_TEMPLATE ("src", - GST_PAD_SRC, - GST_PAD_ALWAYS, - GST_STATIC_CAPS_ANY); - //GST_STATIC_CAPS("video/x-h264,framerate=0/1,parsed=(boolean)false,stream-format=(string)byte-stream")); - -enum -{ - PROP_0, - PROP_LOCATION, -}; - -static void gst_bambusrc_uri_handler_init (gpointer g_iface, - gpointer iface_data); -static void gst_bambusrc_finalize (GObject * gobject); -static void gst_bambusrc_dispose (GObject * gobject); - -static void gst_bambusrc_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec); -static void gst_bambusrc_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec); - -static GstStateChangeReturn gst_bambusrc_change_state (GstElement * - element, GstStateChange transition); -static GstFlowReturn gst_bambusrc_create (GstPushSrc * psrc, - GstBuffer ** outbuf); -static gboolean gst_bambusrc_start (GstBaseSrc * bsrc); -static gboolean gst_bambusrc_stop (GstBaseSrc * bsrc); -static gboolean gst_bambusrc_is_seekable (GstBaseSrc * bsrc); -static gboolean gst_bambusrc_query (GstBaseSrc * bsrc, GstQuery * query); -static gboolean gst_bambusrc_unlock (GstBaseSrc * bsrc); -static gboolean gst_bambusrc_unlock_stop (GstBaseSrc * bsrc); -static gboolean gst_bambusrc_set_location (GstBambuSrc * src, - const gchar * uri, GError ** error); - -#define gst_bambusrc_parent_class parent_class -G_DEFINE_TYPE_WITH_CODE (GstBambuSrc, gst_bambusrc, GST_TYPE_PUSH_SRC, - G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, - gst_bambusrc_uri_handler_init)); - -static void -gst_bambusrc_class_init (GstBambuSrcClass * klass) -{ - GObjectClass *gobject_class; - GstElementClass *gstelement_class; - GstBaseSrcClass *gstbasesrc_class; - GstPushSrcClass *gstpushsrc_class; - - gobject_class = (GObjectClass *) klass; - gstelement_class = (GstElementClass *) klass; - gstbasesrc_class = (GstBaseSrcClass *) klass; - gstpushsrc_class = (GstPushSrcClass *) klass; - - gobject_class->set_property = gst_bambusrc_set_property; - gobject_class->get_property = gst_bambusrc_get_property; - gobject_class->finalize = gst_bambusrc_finalize; - gobject_class->dispose = gst_bambusrc_dispose; - - g_object_class_install_property (gobject_class, - PROP_LOCATION, - g_param_spec_string ("location", "Location", - "URI to pass to Bambu Lab blobs", "", - (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); - - gst_element_class_add_static_pad_template (gstelement_class, &srctemplate); - - gst_element_class_set_static_metadata (gstelement_class, "Bambu Lab source", - "Source/Network", - "Receive data as a client over the network using the proprietary Bambu Lab blobs", - "Joshua Wise "); - gstelement_class->change_state = - GST_DEBUG_FUNCPTR (gst_bambusrc_change_state); - - gstbasesrc_class->start = GST_DEBUG_FUNCPTR (gst_bambusrc_start); - gstbasesrc_class->stop = GST_DEBUG_FUNCPTR (gst_bambusrc_stop); - gstbasesrc_class->unlock = GST_DEBUG_FUNCPTR (gst_bambusrc_unlock); - gstbasesrc_class->unlock_stop = - GST_DEBUG_FUNCPTR (gst_bambusrc_unlock_stop); - gstbasesrc_class->is_seekable = - GST_DEBUG_FUNCPTR (gst_bambusrc_is_seekable); - gstbasesrc_class->query = GST_DEBUG_FUNCPTR (gst_bambusrc_query); - - gstpushsrc_class->create = GST_DEBUG_FUNCPTR (gst_bambusrc_create); - - GST_DEBUG_CATEGORY_INIT (gst_bambusrc_debug, "bambusrc", 0, - "Bambu Lab src"); -} - -static void -gst_bambusrc_reset (GstBambuSrc * src) -{ - gst_caps_replace (&src->src_caps, NULL); - if (src->tnl) { - BAMBULIB(Bambu_Close)(src->tnl); - BAMBULIB(Bambu_Destroy)(src->tnl); - src->tnl = NULL; - } -} - -static void -gst_bambusrc_init (GstBambuSrc * src) -{ - src->location = NULL; - src->tnl = NULL; - - gst_base_src_set_automatic_eos (GST_BASE_SRC (src), FALSE); - gst_base_src_set_live(GST_BASE_SRC(src), TRUE); - - gst_bambusrc_reset (src); -} - -static void -gst_bambusrc_dispose (GObject * gobject) -{ - GstBambuSrc *src = GST_BAMBUSRC (gobject); - - GST_DEBUG_OBJECT (src, "dispose"); - - G_OBJECT_CLASS (parent_class)->dispose (gobject); -} - -static void -gst_bambusrc_finalize (GObject * gobject) -{ - GstBambuSrc *src = GST_BAMBUSRC (gobject); - - GST_DEBUG_OBJECT (src, "finalize"); - - g_free (src->location); - if (src->tnl) { - BAMBULIB(Bambu_Close)(src->tnl); - BAMBULIB(Bambu_Destroy)(src->tnl); - } - - G_OBJECT_CLASS (parent_class)->finalize (gobject); -} - -static void -gst_bambusrc_set_property (GObject * object, guint prop_id, - const GValue * value, GParamSpec * pspec) -{ - GstBambuSrc *src = GST_BAMBUSRC (object); - - switch (prop_id) { - case PROP_LOCATION: - { - const gchar *location; - - location = g_value_get_string (value); - - if (location == NULL) { - GST_WARNING ("location property cannot be NULL"); - goto done; - } - if (!gst_bambusrc_set_location (src, location, NULL)) { - GST_WARNING ("badly formatted location"); - goto done; - } - break; - } - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -done: - return; -} - -static void -gst_bambusrc_get_property (GObject * object, guint prop_id, - GValue * value, GParamSpec * pspec) -{ - GstBambuSrc *src = GST_BAMBUSRC (object); - - switch (prop_id) { - case PROP_LOCATION: - g_value_set_string (value, src->location); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -int gst_bambu_last_error = 0; - -static GstFlowReturn -gst_bambusrc_create (GstPushSrc * psrc, GstBuffer ** outbuf) -{ - GstBambuSrc *src; - - src = GST_BAMBUSRC (psrc); - - (void) src; - GST_DEBUG_OBJECT (src, "create()"); - - int rv; - Bambu_Sample sample; - - if (!src->tnl) { - return GST_FLOW_ERROR; - } - - while ((rv = BAMBULIB(Bambu_ReadSample)(src->tnl, &sample)) == Bambu_would_block) { - GST_DEBUG_OBJECT(src, "create would block"); - usleep(33333); /* 30Hz */ - } - - if (rv == Bambu_stream_end) { - return GST_FLOW_EOS; - } - - if (rv != Bambu_success) { - gst_bambu_last_error = rv; - return GST_FLOW_ERROR; - } - -#if GLIB_CHECK_VERSION(2,68,0) - gpointer sbuf = g_memdup2(sample.buffer, sample.size); -#else - gpointer sbuf = g_memdup(sample.buffer, sample.size); -#endif - *outbuf = gst_buffer_new_wrapped_full(0, sbuf, sample.size, 0, sample.size, sbuf, g_free); - - /* Synthesize monotonic timestamps at the announced frame rate, anchored - * to the first frame's arrival time. The X1C's RTSPS server emits - * unreliable decode timestamps (wildly non-monotonic jumps, or sometimes - * none at all); forwarding them directly froze the pipeline after a few - * seconds. Pacing on a synthesized clock — the same trick mpv uses when - * it reports "No video PTS! Making something up." — gives smooth - * playback regardless of network jitter, and only drops late frames if - * the printer can't keep up. A snap-back resets the anchor if real - * arrival drifts more than two frame periods from the synthesized - * timeline (e.g. announced framerate was wrong). - */ - GstClock *clock = GST_ELEMENT_CLOCK(psrc); - GstClockTime base_time = gst_element_get_base_time((GstElement *)psrc); - GstClockTime running_now = GST_CLOCK_TIME_NONE; - if (clock) { - GstClockTime now = gst_clock_get_time(clock); - if (now != GST_CLOCK_TIME_NONE && now >= base_time) - running_now = now - base_time; - } - - /* Adapt the period to actual inter-arrival time via EWMA. The announced - * frame_rate is unreliable on Bambu printers (X1C announces 30 but - * delivers ~28), so trusting it causes the synthesized timeline to drift - * relative to real time, which makes the sink consider frames late and - * skip pacing entirely. Measuring the real rate keeps PTS in step with - * arrival on average, so the sink can pace inside bursts while still - * tracking the printer's actual frame cadence. - */ - if (src->avg_period == 0) { - int fps = src->frame_rate > 0 ? src->frame_rate : 30; - src->avg_period = GST_SECOND / fps; - } - if (running_now != GST_CLOCK_TIME_NONE && src->last_arrival != 0) { - GstClockTimeDiff delta = GST_CLOCK_DIFF(src->last_arrival, running_now); - /* clamp to plausible video frame periods (5..200 ms) so a one-off - * burst-of-zero or long stall doesn't poison the average */ - if (delta > 5 * GST_MSECOND && delta < 200 * GST_MSECOND) { - src->avg_period = (src->avg_period * 15 + (GstClockTime)delta) / 16; - } - } - src->last_arrival = (running_now != GST_CLOCK_TIME_NONE) ? running_now : src->last_arrival; - GstClockTime period = src->avg_period; - - /* Lead time: schedule frames a few periods in the future of their - * arrival, so the sink has a small jitter buffer. Without this, frames - * arriving slightly later than expected land behind the running clock - * and the sink renders them immediately, producing visible stutter. - * 100ms is invisible for a live print-monitor view. - */ - const GstClockTime LEAD = 100 * GST_MSECOND; - - if (!src->sttime) { - src->sttime = (running_now != GST_CLOCK_TIME_NONE) ? running_now + LEAD : LEAD; - src->frame_count = 0; - } - - GstClockTime pts = src->sttime + src->frame_count * period; - - /* Safety net: with the lead applied, expected drift is roughly -LEAD - * (pts sits LEAD ns ahead of running_now). Re-anchor only if the - * synthesized timeline diverges from that expectation by several frame - * periods, which indicates a real disturbance (printer paused, stream - * resumed, large fps change) rather than ordinary jitter. - */ - if (running_now != GST_CLOCK_TIME_NONE) { - GstClockTimeDiff drift = GST_CLOCK_DIFF(pts, running_now); - GstClockTimeDiff expected = -(GstClockTimeDiff)LEAD; - GstClockTimeDiff slack = (GstClockTimeDiff)(4 * period); - if (drift > expected + slack || drift < expected - slack) { - GST_DEBUG_OBJECT(src, "ts drift %" G_GINT64_FORMAT " ns; re-anchoring", drift); - src->sttime = running_now + LEAD; - src->frame_count = 0; - pts = src->sttime; - } - } - - GST_BUFFER_PTS(*outbuf) = pts; - GST_BUFFER_DTS(*outbuf) = pts; - GST_BUFFER_DURATION(*outbuf) = period; - src->frame_count++; - GST_DEBUG_OBJECT(src, - "sttime:%lu, DTS:%lu, PTS: %lu~", - src->sttime, GST_BUFFER_DTS(*outbuf), GST_BUFFER_PTS(*outbuf)); - - return GST_FLOW_OK; -} - -static void _log(void *ctx, int lvl, const char *msg) { - GstBambuSrc *src = (GstBambuSrc *) ctx; - GST_DEBUG_OBJECT(src, "bambu: %s", msg); - BAMBULIB(Bambu_FreeLogMsg)(msg); -} - -static gboolean -gst_bambusrc_start (GstBaseSrc * bsrc) -{ - GstBambuSrc *src = GST_BAMBUSRC (bsrc); - - GST_DEBUG_OBJECT (src, "start(\"%s\")", src->location); - - if (src->tnl) { - BAMBULIB(Bambu_Close)(src->tnl); - BAMBULIB(Bambu_Destroy)(src->tnl); - src->tnl = NULL; - } - -#ifdef BAMBU_DYNAMIC - if (!_lib) { - _lib = bambulib_get(); - if (!_lib->Bambu_Open) { - return FALSE; - } - } -#endif - if (BAMBULIB(Bambu_Create)(&src->tnl, src->location) != Bambu_success) { - return FALSE; - } - - int rv = 0; - BAMBULIB(Bambu_SetLogger)(src->tnl, _log, (void *)src); - if ((rv = BAMBULIB(Bambu_Open)(src->tnl)) != Bambu_success) { - BAMBULIB(Bambu_Destroy)(src->tnl); - src->tnl = NULL; - gst_bambu_last_error = rv; - return FALSE; - } - - int n = 0; - while ((rv = BAMBULIB(Bambu_StartStream)(src->tnl, 1 /* video */)) == Bambu_would_block) { - usleep(100000); - } - if (rv != Bambu_success) { - BAMBULIB(Bambu_Close)(src->tnl); - BAMBULIB(Bambu_Destroy)(src->tnl); - src->tnl = NULL; - gst_bambu_last_error = rv; - return FALSE; - } - - src->video_type = AVC1; - n = BAMBULIB(Bambu_GetStreamCount)(src->tnl); - GST_INFO_OBJECT (src, "Bambu_GetStreamCount returned stream count=%d",n); - for (int i = 0; i < n; ++i) { - Bambu_StreamInfo info; - BAMBULIB(Bambu_GetStreamInfo)(src->tnl, i, &info); - - GST_INFO_OBJECT (src, "stream %d type=%d, sub_type=%d", i, info.type, info.sub_type); - if (info.type == VIDE) { - src->video_type = info.sub_type; - src->frame_rate = info.format.video.frame_rate; - GST_INFO_OBJECT (src, " width %d height=%d, frame_rate=%d", - info.format.video.width, info.format.video.height, info.format.video.frame_rate); - } - } - - src->sttime = 0; - src->frame_count = 0; - src->last_arrival = 0; - src->avg_period = 0; - return TRUE; -} - -static gboolean -gst_bambusrc_stop (GstBaseSrc * bsrc) -{ - GstBambuSrc *src; - - src = GST_BAMBUSRC (bsrc); - GST_DEBUG_OBJECT (src, "stop()"); - if (src->tnl) { - BAMBULIB(Bambu_Close)(src->tnl); - BAMBULIB(Bambu_Destroy)(src->tnl); - src->tnl = NULL; - } - - return TRUE; -} - -static GstStateChangeReturn -gst_bambusrc_change_state (GstElement * element, GstStateChange transition) -{ - GstStateChangeReturn ret; - GstBambuSrc *src; - - src = GST_BAMBUSRC (element); - - (void) src; - - switch (transition) { - case GST_STATE_CHANGE_READY_TO_NULL: - //gst_bambusrc_session_close (src); - break; - default: - break; - } - - ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); - - return ret; -} - -/* Interrupt a blocking request. */ -static gboolean -gst_bambusrc_unlock (GstBaseSrc * bsrc) -{ - GstBambuSrc *src; - - src = GST_BAMBUSRC (bsrc); - GST_DEBUG_OBJECT (src, "unlock()"); - - return TRUE; -} - -/* Interrupt interrupt. */ -static gboolean -gst_bambusrc_unlock_stop (GstBaseSrc * bsrc) -{ - GstBambuSrc *src; - - src = GST_BAMBUSRC (bsrc); - GST_DEBUG_OBJECT (src, "unlock_stop()"); - - return TRUE; -} - -static gboolean -gst_bambusrc_is_seekable (GstBaseSrc * bsrc) -{ - GstBambuSrc *src = GST_BAMBUSRC (bsrc); - - (void) src; - - return FALSE; -} - -static gboolean -gst_bambusrc_query (GstBaseSrc * bsrc, GstQuery * query) -{ - GstBambuSrc *src = GST_BAMBUSRC (bsrc); - gboolean ret; - GstSchedulingFlags flags; - gint minsize, maxsize, align; - - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_URI: - gst_query_set_uri (query, src->location); - ret = TRUE; - break; - default: - ret = FALSE; - break; - } - - if (!ret) - ret = GST_BASE_SRC_CLASS (parent_class)->query (bsrc, query); - - switch (GST_QUERY_TYPE (query)) { - case GST_QUERY_SCHEDULING: - gst_query_parse_scheduling (query, &flags, &minsize, &maxsize, &align); - flags = (GstSchedulingFlags)((int)flags | (int)GST_SCHEDULING_FLAG_SEQUENTIAL); - gst_query_set_scheduling (query, flags, minsize, maxsize, align); - break; - default: - break; - } - - return ret; -} - -static gboolean -gst_bambusrc_set_location (GstBambuSrc * src, const gchar * uri, - GError ** error) -{ - if (src->location) { - g_free (src->location); - src->location = NULL; - } - - if (uri == NULL) - return FALSE; - - src->location = g_strdup (uri); - - return TRUE; -} - -static GstURIType -gst_bambusrc_uri_get_type (GType type) -{ - return GST_URI_SRC; -} - -static const gchar *const * -gst_bambusrc_uri_get_protocols (GType type) -{ - static const gchar *protocols[] = { "bambu", NULL }; - - return protocols; -} - -static gchar * -gst_bambusrc_uri_get_uri (GstURIHandler * handler) -{ - GstBambuSrc *src = GST_BAMBUSRC (handler); - - /* FIXME: make thread-safe */ - return g_strdup (src->location); -} - -static gboolean -gst_bambusrc_uri_set_uri (GstURIHandler * handler, const gchar * uri, - GError ** error) -{ - GstBambuSrc *src = GST_BAMBUSRC (handler); - - return gst_bambusrc_set_location (src, uri, error); -} - -static void -gst_bambusrc_uri_handler_init (gpointer g_iface, gpointer iface_data) -{ - GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; - - iface->get_type = gst_bambusrc_uri_get_type; - iface->get_protocols = gst_bambusrc_uri_get_protocols; - iface->get_uri = gst_bambusrc_uri_get_uri; - iface->set_uri = gst_bambusrc_uri_set_uri; -} - -static gboolean gstbambusrc_init(GstPlugin *plugin) -{ - return gst_element_register(plugin, "bambusrc", GST_RANK_PRIMARY, GST_TYPE_BAMBUSRC); -} - -#ifndef EXTERNAL_GST_PLUGIN - -// for use inside of Bambu Slicer -void gstbambusrc_register() -{ - static int did_register = 0; - if (did_register) - return; - did_register = 1; - - gst_plugin_register_static(GST_VERSION_MAJOR, GST_VERSION_MINOR, "bambusrc", "Bambu Lab source", gstbambusrc_init, "0.0.1", "GPL", "BambuStudio", "BambuStudio", "https://github.com/bambulab/BambuStudio"); -} - -#else - -#ifndef PACKAGE -#define PACKAGE "bambusrc" -#endif - -GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, bambusrc, "Bambu Lab source", gstbambusrc_init, "0.0.1", "GPL", "BambuStudio", "https://github.com/bambulab/BambuStudio") - -#endif diff --git a/src/slic3r/GUI/Printer/gstbambusrc.h b/src/slic3r/GUI/Printer/gstbambusrc.h deleted file mode 100644 index d5c022a40e..0000000000 --- a/src/slic3r/GUI/Printer/gstbambusrc.h +++ /dev/null @@ -1,78 +0,0 @@ -/* bambusrc for gstreamer - * integration with proprietary Bambu Lab blob for getting raw h.264 video - * - * Copyright (C) 2023 Joshua Wise - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * Alternatively, the contents of this file may be used under the - * GNU Lesser General Public License Version 2.1 (the "LGPL"), in - * which case the following provisions apply instead of the ones - * mentioned above: - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __GST_BAMBUSRC_H__ -#define __GST_BAMBUSRC_H__ - -#include -#include -#include - -G_BEGIN_DECLS - -#define GST_TYPE_BAMBUSRC (gst_bambusrc_get_type()) -G_DECLARE_FINAL_TYPE (GstBambuSrc, gst_bambusrc, - GST, BAMBUSRC, GstPushSrc) - -typedef void *Bambu_Tunnel; - -struct _GstBambuSrc -{ - GstPushSrc element; - GstCaps *src_caps; - gchar *location; - Bambu_Tunnel tnl; - GstClockTime sttime; - int video_type; - int frame_rate; - guint64 frame_count; - GstClockTime last_arrival; - GstClockTime avg_period; -}; - -extern void gstbambusrc_register(); - -G_END_DECLS - -#endif /* __GST_BAMBUSRC_H__ */ diff --git a/src/slic3r/GUI/PrivacyUpdateDialog.cpp b/src/slic3r/GUI/PrivacyUpdateDialog.cpp index ef4dac9b13..c417767a42 100644 --- a/src/slic3r/GUI/PrivacyUpdateDialog.cpp +++ b/src/slic3r/GUI/PrivacyUpdateDialog.cpp @@ -1,5 +1,6 @@ #include "PrivacyUpdateDialog.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "BitmapCache.hpp" #include #include @@ -97,7 +98,7 @@ PrivacyUpdateDialog::PrivacyUpdateDialog(wxWindow* parent, wxWindowID id, const this->on_hide(); }); - Bind(wxEVT_CLOSE_WINDOW, [this](wxCloseEvent& e) {e.Veto(); }); + Bind(wxEVT_CLOSE_WINDOW, [](wxCloseEvent& e) {e.Veto(); }); if (btn_style != CONFIRM_AND_CANCEL) m_button_cancel->Hide(); diff --git a/src/slic3r/GUI/Project.hpp b/src/slic3r/GUI/Project.hpp index a41f76ba7e..a590212cb7 100644 --- a/src/slic3r/GUI/Project.hpp +++ b/src/slic3r/GUI/Project.hpp @@ -63,7 +63,6 @@ class ProjectPanel : public wxPanel { private: std::atomic m_web_init_completed{false}; - bool m_reload_already = {false}; std::shared_ptr> m_reload_cancel_token{std::make_shared>(false)}; std::unique_ptr m_reload_task; diff --git a/src/slic3r/GUI/PublishSettingsDialog.cpp b/src/slic3r/GUI/PublishSettingsDialog.cpp new file mode 100644 index 0000000000..57818dca82 --- /dev/null +++ b/src/slic3r/GUI/PublishSettingsDialog.cpp @@ -0,0 +1,2228 @@ +#include "PublishSettingsDialog.hpp" + +#include "GUI_App.hpp" +#include "MainFrame.hpp" +#include "MsgDialog.hpp" +#include "I18N.hpp" +#include "Tab.hpp" +#include "ConfigValueFormatter.hpp" +#include "FilamentBitmapUtils.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/TextInput.hpp" +#include "Widgets/DialogButtons.hpp" +#include "Widgets/StaticLine.hpp" +#include "Widgets/StateColor.hpp" + +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/Preset.hpp" +#include "libslic3r/PublishSettings.hpp" +#include "libslic3r/FilamentMixer.hpp" +#include "libslic3r/Model.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace Slic3r { namespace GUI { +namespace { + +// Menu ids for show_menu(): dedicated range so the popup cannot collide with application-level +// bindings (e.g. MainFrame's recent-files wxID_FILE1.. range). +enum { + kPublishSelectAll = wxID_HIGHEST + 1, + kPublishDeselectAll, + kPublishSelectVisible, + kPublishDeselectVisible, + kPublishFilterSelected, + kPublishFilterNonSelected +}; + +// Tree-style flags shared by the outer tabs and every group's inner tabs. +constexpr long s_tab_style = wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | + wxTR_FULL_ROW_HIGHLIGHT; + +// The author's hex colour for a filament slot (empty when the slot is out of range); shared by +// the header chip, the inner-tab chip and the DPI rescale paths. +std::string filament_color_hex(const DynamicPrintConfig& full, size_t slot) +{ + if (const auto* colours = full.opt("filament_colour")) + if (slot < colours->size()) + return colours->get_at(slot); + return std::string(); +} + +PublishMaterialIdentity material_identity(size_t slot, const DynamicPrintConfig& full) +{ + PublishMaterialIdentity identity; + if (const auto* types = full.opt("filament_type")) + if (slot < types->size()) + identity.type = types->get_at(slot); + if (const auto* vendors = full.opt("filament_vendor")) + if (slot < vendors->size()) + identity.vendor = vendors->get_at(slot); + if (const auto* ids = full.opt("filament_ids")) + if (slot < ids->size()) + identity.id = ids->get_at(slot); + return identity; +} + +// "Generic PLA @System" -> "Generic PLA"; mirrors the alias derivation in PresetBundle.cpp. +std::string material_display_name(const std::string& preset_name) +{ + const size_t at = preset_name.find_first_of('@'); + if (at == std::string::npos) + return preset_name; + std::string bare = preset_name.substr(0, at); + boost::trim_right(bare); + return bare.empty() ? preset_name : bare; +} + +// Section title for a filament slot: the resolved preset name, then the filament type, then +// the generic "Material". +wxString material_title(size_t slot, const PresetBundle* bundle, const DynamicPrintConfig& full) +{ + if (slot < bundle->filament_presets.size()) { + const Preset* preset = bundle->filaments.find_preset(bundle->filament_presets[slot]); + if (preset != nullptr && !preset->name.empty()) { + // Display the name the sidebar does: the alias (already bare-name + variant-tail + // stripped for root filament presets). + const std::string& display = preset->alias.empty() ? get_preset_bare_name(preset->name) : preset->alias; + return from_u8(material_display_name(display)); + } + } + const PublishMaterialIdentity identity = material_identity(slot, full); + if (!identity.type.empty()) + return from_u8(identity.type); + return _L("Material"); +} + +// The component slots of a mixed filament ("1,2,3"), 1-based, or empty when out of range. +std::vector mixed_slot_components(const DynamicPrintConfig& full, size_t slot) +{ + const auto* comp_opt = full.opt("filament_mixed_components"); + if (comp_opt == nullptr || slot >= comp_opt->size()) + return {}; + return parse_mixed_components(comp_opt->values[slot]); +} + +// Human-readable label of a mixed filament, mirroring the sidebar's mixed filament rows: the +// 1-based component slot numbers with their blend percentages (or a "->" gradient arrow), +// e.g. "1 (60%) + 2 (40%)". Used as the slot's tab/header title in place of a preset name. +wxString mixed_filament_label(const DynamicPrintConfig& full, size_t slot) +{ + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return _L("Mixed filament"); + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios"); + wxString label; + for (size_t i = 0; i < comps.size(); ++i) { + if (i > 0) + label += is_gradient ? wxString::FromUTF8(" \u2192 ") : wxString::FromUTF8(" + "); + label += wxString::Format("%u", comps[i]); + if (!is_gradient) { + double ratio = 100.0 / comps.size(); + if (ratios_opt != nullptr && slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + if (i < rs.size()) + ratio = rs[i] * 100.0; + } + label += wxString::Format(" (%d%%)", int(ratio + 0.5)); + } + } + return label; +} + +// Blended representative colour of a mixed slot, computed exactly like the sidebar's swatches +// (recompute_mixed_slot_colors): sublayer slots blend by their ratios, gradient slots by their +// two end colours, broken references fall back to grey. +wxColour mixed_filament_blend_color(const DynamicPrintConfig& full, size_t slot) +{ + std::vector colors; + if (const auto* colours = full.opt("filament_colour")) { + colors.reserve(colours->values.size()); + for (const std::string& hex : colours->values) { + const wxColour c(hex); + colors.push_back(c.IsOk() ? c : wxColour(0, 0, 0)); + } + } + while (colors.size() <= slot) + colors.push_back(wxColour("#D9D9D9")); + recompute_mixed_slot_colors(colors, full); + return slot < colors.size() ? colors[slot] : wxColour("#D9D9D9"); +} + +// The slot's own chip as the main GUI renders it: a curve-sampled gradient swatch for a +// gradient mixed slot, the static blended colour otherwise. Returns wxNullBitmap when nothing +// could be rendered (the caller falls back to a plain label). +wxBitmap mixed_filament_chip_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz) +{ + const std::string label = std::to_string(slot + 1); + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + wxBitmap* icon = nullptr; + if (is_gradient) { + // The same curve-sampled ramp the sidebar chips use; an empty ramp (broken definition) + // degrades to a plain fade between the slot's two component colours. + const std::vector ramp = mixed_gradient_ramp(full, slot, swatch_sz); + if (!ramp.empty()) { + icon = get_extruder_color_icon(std::vector(), true, label, swatch_sz, swatch_sz, &ramp); + } else { + std::vector hexes; + for (const unsigned int comp : mixed_slot_components(full, slot)) { + std::string hex = filament_color_hex(full, size_t(comp) - 1); + if (hex.empty()) + hex = "#D9D9D9"; + hexes.push_back(std::move(hex)); + } + if (hexes.size() >= 2) + icon = get_extruder_color_icon(std::move(hexes), true, label, swatch_sz, swatch_sz); + } + } + if (icon == nullptr) { + const wxColour blend = mixed_filament_blend_color(full, slot); + const std::string blend_hex = blend.IsOk() ? + std::string(wxString::Format("#%02X%02X%02X", blend.Red(), blend.Green(), blend.Blue()).ToUTF8()) : + std::string("#808080"); + icon = get_extruder_color_icon(blend_hex, label, swatch_sz, swatch_sz); + } + return icon != nullptr ? *icon : wxNullBitmap; +} + +// Tab-strip bitmap for a mixed slot: the mix's own chip, then its component swatches each +// followed by their percent share (or a "->" arrow for gradients), mirroring the main GUI's +// sidebar rows - e.g. "[3 purple]: [1 red] 50% + [2 blue] 50%". The whole composition is one +// bitmap because a TabCtrl item cannot interleave images into its text; the tab's text is +// therefore empty. The bitmap is opaque and bakes tab_bg (the tab strip's background colour): +// its texts are rasterized with plain GDI on that solid ground, like the sidebar rows and the +// color chips. Text on a transparent bitmap has to go through the graphics-context route, and +// on MSW that degrades into jagged ClearType-fallback glyphs with fringe halos - the same +// reason draw_mixed_gradient_plot renders into an opaque buffer (FilamentBitmapUtils.cpp). +wxBitmap mixed_filament_tab_bitmap(const DynamicPrintConfig& full, size_t slot, int swatch_sz, const wxColour& tab_bg) +{ + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return wxNullBitmap; + const auto* grad_opt = full.opt("filament_mixed_gradient"); + const bool is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios"); + std::vector ratio_pct(comps.size(), 100.0 / comps.size()); + if (!is_gradient && ratios_opt != nullptr && slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + for (size_t i = 0; i < rs.size() && i < comps.size(); ++i) + ratio_pct[i] = rs[i] * 100.0; + } + + const auto* colours = full.opt("filament_colour"); + const wxString lead_sep = wxString::FromUTF8(":"); + const wxString comp_sep = is_gradient ? wxString::FromUTF8("\u2192") : wxString::FromUTF8("+"); + + // Phase 1 (layout): render every swatch and measure every text piece so the composite + // width is known before drawing; the dummy bitmap keeps GetTextExtent reliable. + struct Piece + { + enum Kind { Swatch, Text } kind{Text}; + wxBitmap bmp; + wxString text; + }; + std::vector pieces; + bool has_lead = false; + wxBitmap dummy(1, 1); + wxMemoryDC measure_dc; + measure_dc.SelectObject(dummy); + measure_dc.SetFont(::Label::Body_12); + const int gap = wxWindow::FromDIP(4, nullptr); + + auto push_swatch = [&](const std::string& hex, const std::string& label) { + wxBitmap* icon = get_extruder_color_icon(hex, label, swatch_sz, swatch_sz); + if (icon == nullptr) + return; + pieces.push_back({Piece::Swatch, *icon, wxString()}); + }; + auto push_text = [&](const wxString& text) { pieces.push_back({Piece::Text, wxNullBitmap, text}); }; + + { + const wxBitmap chip = mixed_filament_chip_bitmap(full, slot, swatch_sz); + has_lead = chip.IsOk(); + if (has_lead) + pieces.push_back({Piece::Swatch, chip, wxString()}); + } + for (size_t ci = 0; ci < comps.size(); ++ci) { + if (pieces.empty()) + break; + push_text(has_lead && pieces.size() == 1 ? lead_sep : comp_sep); // lead chip may have failed to render + std::string hex = "#D9D9D9"; + if (colours != nullptr && comps[ci] >= 1 && comps[ci] <= colours->size()) + hex = colours->values[comps[ci] - 1]; + const size_t before = pieces.size(); + push_swatch(hex, std::to_string(comps[ci])); + if (pieces.size() == before) + break; // swatch failed: stop cleanly before an orphaned separator/percent pair + if (!is_gradient) { + push_text(wxString::Format("%d%%", int(ratio_pct[ci] + 0.5))); + } + } + if (pieces.empty()) + return wxNullBitmap; + + int width = 0; + for (const Piece& p : pieces) + width += (p.kind == Piece::Swatch ? swatch_sz : measure_dc.GetTextExtent(p.text).x + gap); + + // Phase 2 (draw): opaque, filled with the tab strip's background colour. Text goes through + // the plain DC on every platform (see the function comment for why the alpha route is + // avoided); chip bitmaps keep their own alpha and composite cleanly onto the fill. + wxBitmap composite(width, swatch_sz); + wxMemoryDC memdc; + memdc.SelectObject(composite); + memdc.SetBackground(wxBrush(tab_bg)); + memdc.Clear(); + memdc.SetBackgroundMode(wxTRANSPARENT); + memdc.SetFont(::Label::Body_12); + memdc.SetTextForeground(StateColor::darkModeColorFor(wxColour("#262E30"))); + int x = 0; + for (const Piece& p : pieces) { + if (p.kind == Piece::Swatch) { + memdc.DrawBitmap(p.bmp, x, 0, true); + x += swatch_sz; + } else { + const wxSize tsz = measure_dc.GetTextExtent(p.text); + memdc.DrawText(p.text, x + gap / 2, (swatch_sz - tsz.y) / 2); + x += tsz.x + gap; + } + } + memdc.SelectObject(wxNullBitmap); + return composite; +} + +// The filament slots (0-based) the current project actually uses, across every plate: base and +// MMU-painted volume extruders, per-object layer-range and support/wall/infill filament +// overrides, and custom-gcode tool changes. Used mixed slots are preserved as themselves (so an +// in-use mix is publishable) while their physical components are added too - a mix always ships +// with the materials of its components even if a component is not referenced directly anywhere. +std::set project_used_filament_slots(const PresetBundle& bundle, const DynamicPrintConfig& full, const Model& model) +{ + std::set used; // 0-based used slots, mixed slots not yet expanded + if (model.objects.empty()) + return used; + + auto add_1based = [&used](int id) { + if (id > 0) + used.insert(size_t(id - 1)); + }; + + const DynamicPrintConfig& print_cfg = bundle.prints.get_edited_preset().config; + const int glb_support_intf = print_cfg.opt_int("support_interface_filament"); + const int glb_support = print_cfg.opt_int("support_filament"); + const int glb_outer_wall = print_cfg.opt_int("outer_wall_filament_id"); + const int glb_inner_wall = print_cfg.opt_int("inner_wall_filament_id"); + const int glb_sparse_infill = print_cfg.opt_int("sparse_infill_filament_id"); + const int glb_internal_solid = print_cfg.opt_int("internal_solid_filament_id"); + const int glb_top_surface = print_cfg.opt_int("top_surface_filament_id"); + const int glb_bottom_surface = print_cfg.opt_int("bottom_surface_filament_id"); + const bool glb_support_on = print_cfg.opt_bool("enable_support") || print_cfg.opt_int("raft_layers") > 0; + + for (ModelObject* mo : model.objects) { + for (ModelVolume* mv : mo->volumes) + for (int e : mv->get_extruders()) + add_1based(e); + + for (const auto& range_entry : mo->layer_config_ranges) + if (const ConfigOption* ext_opt = range_entry.second.option("extruder")) + add_1based(ext_opt->getInt()); + + bool obj_support = glb_support_on; + if (const ConfigOption* s_opt = mo->config.option("enable_support"); s_opt != nullptr) + obj_support = s_opt->getBool(); + else if (const ConfigOption* r_opt = mo->config.option("raft_layers"); r_opt != nullptr) + obj_support = r_opt->getInt() > 0; + + if (obj_support) { + if (const ConfigOption* opt = mo->config.option("support_interface_filament"); opt != nullptr && opt->getInt() != 0) + add_1based(opt->getInt()); + else + add_1based(glb_support_intf); + + if (const ConfigOption* opt = mo->config.option("support_filament"); opt != nullptr && opt->getInt() != 0) + add_1based(opt->getInt()); + else + add_1based(glb_support); + } + + auto obj_id = [&mo](const char* key) { + const ConfigOption* opt = mo->config.option(key); + return (opt != nullptr) ? opt->getInt() : 0; + }; + + int obj_outer_wall = obj_id("outer_wall_filament_id"); + if (obj_outer_wall == 0) + obj_outer_wall = obj_id("inner_wall_filament_id"); + add_1based(obj_outer_wall != 0 ? obj_outer_wall : glb_outer_wall); + + int obj_inner_wall = obj_id("inner_wall_filament_id"); + if (obj_inner_wall == 0) + obj_inner_wall = obj_id("outer_wall_filament_id"); + add_1based(obj_inner_wall != 0 ? obj_inner_wall : glb_inner_wall); + + const int obj_sparse = obj_id("sparse_infill_filament_id"); + add_1based(obj_sparse != 0 ? obj_sparse : glb_sparse_infill); + + const int obj_internal_solid = obj_id("internal_solid_filament_id"); + add_1based(obj_internal_solid != 0 ? obj_internal_solid : glb_internal_solid); + + int obj_top = obj_id("top_surface_filament_id"); + if (obj_top == 0) + obj_top = obj_internal_solid; + add_1based(obj_top != 0 ? obj_top : glb_top_surface); + + int obj_bottom = obj_id("bottom_surface_filament_id"); + if (obj_bottom == 0) + obj_bottom = obj_internal_solid; + add_1based(obj_bottom != 0 ? obj_bottom : glb_bottom_surface); + } + + for (const auto& plate_entry : model.plates_custom_gcodes) + for (const CustomGCode::Item& item : plate_entry.second.gcodes) + if (item.type == CustomGCode::Type::ToolChange) + add_1based(item.extruder); + + // Expand used mixed slots to their physical components and keep each mixed slot itself so the + // dialog shows the mix. A component both used directly and pulled in via a mix is deduped. + const auto* is_mixed_opt = full.opt("filament_is_mixed"); + const auto* comp_opt = full.opt("filament_mixed_components"); + if (is_mixed_opt != nullptr && comp_opt != nullptr && has_any_mixed_filament(is_mixed_opt->values)) { + const std::vector raw(used.begin(), used.end()); + const std::vector expanded = expand_mixed_filaments(raw, is_mixed_opt->values, comp_opt->values); + std::set result(expanded.begin(), expanded.end()); + for (unsigned int s : raw) + if (s < is_mixed_opt->values.size() && is_mixed_opt->values[s]) + result.insert(s); + return result; + } + + return used; +} + +// Lays a translated sentence out along `row`, replacing each "%1%"-style placeholder with the +// matching window from `chips`. Keeping the sentence in one msgid lets a translation put the +// placeholders wherever its own grammar needs them; spacing comes from the translation itself. +void add_sentence_with_chips(wxWindow* parent, wxSizer* row, const wxString& sentence, const std::vector& chips) +{ + std::vector placed(chips.size(), false); + auto add_text = [&](wxString text) { + text.Replace("%%", "%"); // the sentence is a format string + if (text.IsEmpty()) + return; + auto* label = new wxStaticText(parent, wxID_ANY, text); + label->SetFont(Label::Body_12); + label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); + row->Add(label, 0, wxALIGN_CENTER_VERTICAL); + }; + auto add_chip = [&](size_t i) { + if (i < chips.size() && chips[i] != nullptr && !placed[i]) { + placed[i] = true; + row->Add(chips[i], 0, wxALIGN_CENTER_VERTICAL); + } + }; + + size_t literal = 0, pos = 0; + while ((pos = sentence.find('%', pos)) != wxString::npos) { + size_t end = pos + 1; + while (end < sentence.length() && sentence[end] >= '0' && sentence[end] <= '9') + ++end; + if (end == pos + 1 || end >= sentence.length() || sentence[end] != '%') { + ++pos; // a bare '%' + continue; + } + long index = 0; + sentence.Mid(pos + 1, end - pos - 1).ToLong(&index); + add_text(sentence.Mid(literal, pos - literal)); + add_chip(size_t(index - 1)); + literal = pos = end + 1; + } + add_text(sentence.Mid(literal)); + for (size_t i = 0; i < chips.size(); ++i) // whatever the translation left out + add_chip(i); +} + +} // namespace + +// Warning shown on OK when an enabled mixed-filament slot relies on a filament that would ship +// without its material. One row per unmet dependency, each a single translated sentence whose +// two placeholders are the mixed slot's and the component filament's colour chips. "Cancel" is +// the safe choice and keeps the dialog open; "Publish anyway" continues. +class MixedFilamentWarningDialog : public MsgDialog +{ +public: + MixedFilamentWarningDialog(wxWindow* parent, const DynamicPrintConfig& full, const std::vector& issues) + : MsgDialog(parent, _L("Warning"), wxEmptyString, wxOK | wxCANCEL | wxICON_WARNING) + { + auto* content = new wxBoxSizer(wxVERTICAL); + + auto* intro = new wxStaticText(this, wxID_ANY, _L("Some mixed filaments rely on filaments that will not be published:")); + intro->SetFont(Label::Body_13); + intro->Wrap(FromDIP(400)); + content->Add(intro, 0, wxEXPAND); + content->AddSpacer(FromDIP(10)); + + const int swatch = FromDIP(20); + // The slot's colour swatch, numbered like its tab, with the slot name on hover; falls + // back to a label so the sentence always names both filaments. + auto make_chip = [&](const wxBitmap& bmp, const wxString& name) -> wxWindow* { + if (bmp.IsOk()) { + auto* chip = new wxStaticBitmap(this, wxID_ANY, bmp); + chip->SetToolTip(name); + return chip; + } + auto* label = new wxStaticText(this, wxID_ANY, name); + label->SetFont(Label::Body_12); + return label; + }; + + for (const MixedDependencyIssue& issue : issues) { + std::string hex = filament_color_hex(full, issue.component_slot); + if (hex.empty()) + hex = "#D9D9D9"; + const wxBitmap* comp_bmp = get_extruder_color_icon(hex, std::to_string(issue.component_slot + 1), swatch, swatch); + + wxWindow* mix_chip = make_chip(mixed_filament_chip_bitmap(full, issue.mixed_slot, swatch), + wxString::Format(_L("Filament %d (mixed)"), int(issue.mixed_slot) + 1)); + wxWindow* comp_chip = make_chip(comp_bmp != nullptr ? *comp_bmp : wxNullBitmap, + wxString::Format(_L("Filament %d"), int(issue.component_slot) + 1)); + + auto* row = new wxWrapSizer(wxHORIZONTAL); + add_sentence_with_chips(this, row, + issue.reason == MixedDependencyIssue::Reason::Disabled ? + _L("%1% needs %2%, which is not enabled.") : + _L("%1% needs %2%, whose material will not be published."), + {mix_chip, comp_chip}); + content->Add(row, 0, wxEXPAND | wxLEFT, FromDIP(10)); + content->AddSpacer(FromDIP(6)); + } + + auto* hint = new wxStaticText( + this, wxID_ANY, + _L("To publish a mixed filament, enable every filament it uses and choose Full Publish or check its Type requirement.")); + hint->SetFont(Label::Body_12); + hint->Wrap(FromDIP(380)); + content->Add(hint, 0, wxEXPAND | wxTOP, FromDIP(4)); + + content_sizer->Add(content, 0, wxEXPAND); + + SetButtonLabel(wxID_OK, _L("Publish anyway")); + SetButtonLabel(wxID_CANCEL, _L("Cancel"), true); // safe choice gets the focus + + finalize(); + } +}; + +PublishSettingsDialog::MixedVisualSpec PublishSettingsDialog::make_mixed_visual_spec(const DynamicPrintConfig& full, size_t slot) +{ + MixedVisualSpec spec; + const std::vector comps = mixed_slot_components(full, slot); + if (comps.empty()) + return spec; + + const auto* grad_opt = full.opt("filament_mixed_gradient"); + spec.is_gradient = grad_opt != nullptr && slot < grad_opt->size() && grad_opt->values[slot]; + + const auto* colours = full.opt("filament_colour"); + for (unsigned int cid : comps) { + std::string hex = "#D9D9D9"; + if (colours != nullptr && cid >= 1 && cid <= colours->size()) + hex = colours->values[cid - 1]; + const wxColour c(hex); + spec.component_colours.push_back(c.IsOk() ? c : wxColour("#D9D9D9")); + } + + if (!spec.is_gradient) { + // Sublayer shares; parse_mixed_ratios already falls back to equal shares and + // normalizes to sum 1. + spec.ratios.assign(comps.size(), 1.0 / comps.size()); + if (const auto* ratios_opt = full.opt("filament_mixed_sublayer_ratios")) + if (slot < ratios_opt->size()) { + const std::vector rs = parse_mixed_ratios(ratios_opt->values[slot], comps.size()); + if (rs.size() == comps.size()) + spec.ratios = rs; + } + if (comps.size() == 3) + spec.tri_weights = spec.ratios; // the picker's barycentric shares + } else { + const Slic3r::GradientCurve curve = mixed_gradient_curve(full, slot); + constexpr int kSamples = 256; + for (int i = 0; i <= kSamples; ++i) { + const double t = double(i) / kSamples; + spec.gradient_samples.emplace_back(t, sample_gradient_curve(curve, t)); + } + for (const Slic3r::GradientAnchor& anchor : curve.points) + spec.gradient_anchors.emplace_back(anchor.x, anchor.y); + } + + spec.valid = true; + return spec; +} + +PublishSettingsDialog::PublishSettingsDialog(wxWindow* parent, + const std::vector* published_keys, + const std::vector* material_keys) + : DPIDialog(parent ? parent : static_cast(wxGetApp().mainframe), + wxID_ANY, + _L("Publish 3MF..."), + wxDefaultPosition, + wxDefaultSize, + wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER | wxFULL_REPAINT_ON_RESIZE) + , m_search(this, "search", 16) + , m_menu(this, "filter", 16) +{ + SetBackgroundColour(*wxWHITE); + + // --- filter bar: search box, All/None, menu button --- + wxPanel* f_bar = new wxPanel(this, wxID_ANY); + f_bar->SetBackgroundColour(GetBackgroundColour()); + wxBoxSizer* f_sizer = new wxBoxSizer(wxHORIZONTAL); + + m_filter_box = new TextInput(f_bar, "", "", "", wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); + m_filter_box->SetIcon(m_search.bmp()); + m_filter_box->SetMinSize(FromDIP(wxSize(200, 24))); + m_filter_box->SetSize(FromDIP(wxSize(-1, 24))); + m_filter_box->SetFocus(); + m_filter_ctrl = m_filter_box->GetTextCtrl(); + m_filter_ctrl->SetFont(Label::Body_13); + m_filter_ctrl->SetSize(wxSize(-1, FromDIP(16))); // centers text vertically + m_filter_ctrl->SetHint(_L("Type to filter...")); + m_filter_ctrl->Bind(wxEVT_TEXT, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_filter_ctrl->Bind(wxEVT_TEXT_ENTER, [this](auto&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_filter_ctrl->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { + if (m_filter_mode != FilterMode::Text) + apply_filter(m_filter_ctrl->GetValue()); + e.Skip(); + }); + f_sizer->Add(m_filter_box, 1, wxEXPAND); + + m_fb_sizer = new wxBoxSizer(wxHORIZONTAL); + auto create_btn = [this, f_bar](wxString title, bool select) { + auto btn = new wxStaticText(f_bar, wxID_ANY, title); + btn->SetForegroundColour("#009687"); + btn->SetCursor(wxCURSOR_HAND); + btn->SetFont(Label::Body_13); + btn->Bind(wxEVT_LEFT_DOWN, [this, select](wxMouseEvent&) { select_all(select); }); + m_fb_sizer->Add(btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + }; + f_sizer->Add(m_fb_sizer, 0, wxALIGN_CENTER_VERTICAL); + create_btn(_L("All"), true); + create_btn(_L("None"), false); + + // Indicator for the menu's pseudo filters: sits where All/None go while they are hidden. + // Labels reuse the menu entries (no new strings); clicking the chip returns to text + // filtering, keeping the search box contents. + m_pseudo_chip = new wxStaticText(f_bar, wxID_ANY, ""); + m_pseudo_chip->SetForegroundColour("#009687"); + m_pseudo_chip->SetCursor(wxCURSOR_HAND); + m_pseudo_chip->SetFont(Label::Body_13); + m_pseudo_chip->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent&) { apply_filter(m_filter_ctrl->GetValue()); }); + m_pseudo_chip->Hide(); + f_sizer->Add(m_pseudo_chip, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + + m_menu_button = new wxStaticBitmap(f_bar, wxID_ANY, m_menu.bmp()); + m_menu_button->SetCursor(wxCURSOR_HAND); + m_menu_button->Bind(wxEVT_LEFT_DOWN, &PublishSettingsDialog::show_menu, this); + f_sizer->Add(m_menu_button, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, FromDIP(10)); + + f_bar->SetSizerAndFit(f_sizer); + + m_outer_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); + m_outer_tabs->SetFont(Label::Body_14); + m_outer_tabs->SetBackgroundColour(GetBackgroundColour()); + + m_outer_host = new wxPanel(this, wxID_ANY); + m_outer_host->SetBackgroundColour(GetBackgroundColour()); + m_outer_host_sizer = new wxBoxSizer(wxVERTICAL); + m_outer_host->SetSizer(m_outer_host_sizer); + + wxBoxSizer* w_sizer = new wxBoxSizer(wxVERTICAL); + + wxStaticText* msg = new wxStaticText(this, wxID_ANY, _L("Select which settings to be published in the 3MF file")); + msg->SetFont(Label::Body_13); + msg->Wrap(-1); + w_sizer->Add(msg, 0, wxRIGHT | wxLEFT | wxTOP, FromDIP(10)); + + w_sizer->Add(f_bar, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + w_sizer->Add(m_outer_tabs, 0, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + w_sizer->Add(m_outer_host, 1, wxRIGHT | wxLEFT | wxTOP | wxEXPAND, FromDIP(10)); + + build_option_model(); + + // Seed from a remembered session selection or a freshly loaded published 3MF (authoritative). + if (published_keys != nullptr || material_keys != nullptr) + apply_selection(published_keys != nullptr ? *published_keys : std::vector(), + material_keys != nullptr ? *material_keys : std::vector()); + + auto dlg_btns = new DialogButtons(this, {"OK", "Cancel"}); + + dlg_btns->GetOK()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + // Publish is always allowed: no settings selected means no settings override. Warn only + // when an enabled mixed filament would ship without the material of one of its + // components; "Publish anyway" accepts that and publishes anyway. + if (const std::vector issues = unpublished_mixed_components(); !issues.empty()) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + MixedFilamentWarningDialog warn(this, full, issues); + if (warn.ShowModal() != wxID_OK) + return; // Cancel: dismiss the warning and stay in this dialog + } + EndModal(wxID_OK); + }); + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); + + // Guide links, bottom-left, sharing the footer row with the OK/Cancel buttons (pushed right). + auto make_link = [this](const wxString& label, const char* url) { + wxStaticText* link = new wxStaticText(this, wxID_ANY, label); + link->SetFont(Label::Body_13); + link->SetForegroundColour(wxColour(0x1F, 0x8E, 0xEA)); + link->SetCursor(wxCURSOR_HAND); + link->Bind(wxEVT_LEFT_DOWN, [url](wxMouseEvent&) { wxLaunchDefaultBrowser(url, wxBROWSER_NEW_WINDOW); }); + return link; + }; + wxBoxSizer* links_sizer = new wxBoxSizer(wxVERTICAL); + links_sizer->Add(make_link(_L("Publish 3MF Wiki"), "https://www.orcaslicer.com/wiki/publishing_3mf/publish_3mf.html"), 0, wxALIGN_LEFT); + links_sizer->Add(make_link(_L("Publish 3MF Video Guide"), "https://www.youtube.com/watch?v=-xt1N29UIOg"), 0, + wxTOP | wxALIGN_LEFT, FromDIP(4)); + + wxBoxSizer* footer = new wxBoxSizer(wxHORIZONTAL); + footer->Add(links_sizer, 0, wxALIGN_CENTER_VERTICAL); + footer->AddStretchSpacer(); + footer->Add(dlg_btns, 0, wxALIGN_CENTER_VERTICAL); + w_sizer->Add(footer, 0, wxRIGHT | wxLEFT | wxBOTTOM | wxEXPAND, FromDIP(10)); + + SetSizerAndFit(w_sizer); + fit_to_content(); // initial size only; the dialog is resizable + wxGetApp().UpdateDlgDarkUI(this); + // The dark-UI walk re-colours the tab strips after the compositions were baked; rebuild so + // they carry the theme-resolved background (the sidebar resolves its colours at paint time, + // this dialog bakes, so the bake has to happen after the walk). + refresh_mixed_tab_bitmaps(); +} + +// Size the window to its content: width follows the widest tab strip so no filament tab is +// hidden (TabCtrl::relayout hides overflowing buttons), height scales proportionally. Both +// are floored at the 600x500 base and capped at hard DIP limits - deliberately not the whole +// display - with one last-resort clamp so the dialog can never open larger than the screen. +// Also owns the resize floor: the window cannot be resized below what the tabs need, so +// shrinking never re-hides a filament tab. +void PublishSettingsDialog::fit_to_content() +{ + static const wxSize BASE{600, 500}; + static const wxSize CAP{1300, 850}; + + int strip = m_outer_tabs->GetFullSize(); + for (const SectionGroup& section : m_sections) { + strip = std::max(strip, section.tabs->GetFullSize()); + if (section.mixed_tabs != nullptr) + strip = std::max(strip, section.mixed_tabs->GetFullSize()); + } + + // Minimum width: whatever keeps every tab visible (never below the base). strip is device + // pixels (Button min sizes); BASE/CAP are DIP and converted over. + const int min_w = std::max(strip + 2 * FromDIP(10), FromDIP(BASE.x)); + + // Initial size: prefer proportional growth within the caps. + const int w = std::clamp(min_w, FromDIP(BASE.x), FromDIP(CAP.x)); + const double f = double(w) / FromDIP(BASE.x); + const int h = std::clamp(int(FromDIP(BASE.y) * f), FromDIP(BASE.y), FromDIP(CAP.y)); + + const wxRect area = wxDisplay(this).GetClientArea(); + const int max_w = area.width * 9 / 10; + const int max_h = area.height * 9 / 10; + + SetMinSize(wxSize(std::min(min_w, max_w), std::min(FromDIP(BASE.y), max_h))); + SetSize(std::min(w, max_w), std::min(h, max_h)); +} + +PublishSettingsDialog::~PublishSettingsDialog() {} + +void PublishSettingsDialog::build_option_model() +{ + // Structural / non-publishable keys, shared with the published-3MF overlay path. + const std::set& denylist = publish_structural_keys(); + // Base keys already added in the print section (dedup across pages/optgroups). The printer + // section keeps its own printer_added set keyed by the full per-extruder "#N" opt_id, so + // every extruder gets its own row (see Phase 1 below). + std::set added; + + PresetBundle* bundle = wxGetApp().preset_bundle; + DynamicPrintConfig full = bundle->full_config(); + + m_info_nonsel = _L("No selected items..."); + m_info_allsel = _L("All items selected..."); + m_info_empty = _L("No matching items..."); + m_info_mix = _L("Mixed filament - published as a whole when \"Enable\" above is selected"); + + // Tab order differs from Section's enum order (Print, Printer, Material): the dialog + // presents Printer, Filament, Process. + m_sections.reserve(3); + const Section tab_order[] = {Section::Printer, Section::Material, Section::Print}; + for (Section kind : tab_order) + section_group_for(kind); + bind_tab_events(); + + // Shared per-option label/value computation; returns false when the option must be skipped + // (denylisted / unknown / empty label). value is the stringified value; unit the translated + // sidetext (may be empty). + auto option_text = [&denylist, &full](const std::string& opt_id, const std::string& pure_key, wxString& label, wxString& value, + wxString& unit) -> bool { + if (denylist.count(pure_key) > 0) + return false; + const ConfigOptionDef* def = print_config_def.get(pure_key); + if (def == nullptr) + return false; + label = _(def->full_label.empty() ? def->label : def->full_label); + if (label.IsEmpty()) + return false; + value = get_string_value(opt_id, full); + unit = _(def->sidetext); + return true; + }; + + // --- Phase 1: printer per-extruder retraction settings (first, mirroring the sidebar's + // Printer group), from the printer tab's "Extruder"/"Extruder N" pages. One inner tab per + // extruder (e.g. "Left Extruder"/"Right Extruder" via Tab::translate_category), each holding + // that extruder's Retraction and Z-Hop rows with per-extruder "#N" values. + { + size_t g = section_group_for(Section::Printer); + std::set printer_added; + for (Tab* tab : wxGetApp().tabs_list) { + if (tab->m_type != Preset::TYPE_PRINTER) + continue; + for (const PageShp& page : tab->m_pages) { + if (!page->title().StartsWith("Extruder")) + continue; + // The extruder index of this page: its options are appended with the same + // "#N" opt_index (opt.second.second), so derive the tab's index from the first + // allowlisted option; skip the page when none is found (defensive). + int extruder_idx = -1; + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") + continue; + for (const auto& opt : optgroup->opt_map()) + if (extruder_idx < 0) + extruder_idx = opt.second.second; + if (extruder_idx >= 0) + break; + } + if (extruder_idx < 0) + continue; + const wxString page_title = Tab::translate_category(page->title(), tab->m_type); + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + // Allowlist on the untranslated optgroup title; the "Retraction when + // switching material" group is intentionally skipped. + if (optgroup->title != "Retraction" && optgroup->title != "Z-Hop") + continue; + const wxString subcategory = _(optgroup->title); + for (const auto& opt : optgroup->opt_map()) { + const std::string& opt_id = opt.first; + const std::string& pure_key = opt.second.first; + // Rows are keyed by the full per-extruder "#N" opt_id so each extruder + // tab publishes its own value; GetPublishedKeys() emits the checked rows + // as-is. + if (!printer_added.insert(opt_id).second) + continue; + wxString label, value, unit; + if (!option_text(opt_id, pure_key, label, value, unit)) + continue; + size_t cat_index = category_index_for(page_title, Section::Printer, g, size_t(extruder_idx)); + size_t sub_index = subcategory_index_for(cat_index, subcategory, optgroup->icon); + add_row_ui(opt_id, label, value, unit, cat_index, sub_index); + } + } + } + } + } + + // --- Phase 2: per-material sections synthesized from the filament tab's "Setting + // Overrides" page, under the Filament group. + { + size_t g = section_group_for(Section::Material); + Tab* filament_tab = nullptr; + for (Tab* tab : wxGetApp().tabs_list) + if (tab->m_type == Preset::TYPE_FILAMENT) { + filament_tab = tab; + break; + } + if (filament_tab != nullptr) { + const Page* overrides_page = nullptr; + for (const PageShp& page : filament_tab->m_pages) + if (page->title() == "Setting Overrides") { + overrides_page = page.get(); + break; + } + + if (overrides_page != nullptr) { + // Mixed-color slots are virtual: they carry no per-key Material/Retraction + // settings; their "Enable" toggle always embeds the mix definition (components, + // ratios, gradient). Detect them via the project-level flag. + const ConfigOptionBools* is_mixed_opt = full.opt("filament_is_mixed"); + // Only the slots the project actually uses: base/MMU-painted volume extruders, + // support/wall/infill overrides and custom-gcode tool changes, plus the physical + // components of any in-use mixed slot. Unused slots get no section at all (and are + // therefore never published). One section per used slot, disambiguated by its + // colour chip and slot identity while showing the bare name. + const std::set used_slots = project_used_filament_slots(*bundle, full, wxGetApp().plater()->model()); + for (size_t slot = 0; slot < bundle->filament_presets.size(); ++slot) { + if (used_slots.find(slot) == used_slots.end()) + continue; + const bool is_mixed = is_mixed_opt != nullptr && slot < is_mixed_opt->size() && is_mixed_opt->values[slot]; + const PublishMaterialIdentity identity = material_identity(slot, full); + // A mixed slot's title is its component composition (e.g. "1 (60%) + 2 + // (40%)"), not the cloned preset's name shown in the main GUI. + const wxString title = is_mixed ? mixed_filament_label(full, slot) : material_title(slot, bundle, full); + const size_t category_index = category_index_for(title, Section::Material, g, slot, identity, is_mixed); + + if (is_mixed) { + // A mixed slot publishes as one unit (its definition); nothing to select + // per-key. Its component filaments are auto-enabled + Full Published when + // "Enable" is checked (see on_enable_toggle). Its page still shows what + // would be published: a ratio bar, or the gradient graph. + add_mixed_visual(category_index, make_mixed_visual_spec(full, slot)); + continue; + } + + // Material requirement rows: an optional filament colour and/or a + // vendor-agnostic material type for this slot, in their own optgroup so they + // stay visually separated from the setting rows. + { + const size_t req_sub = subcategory_index_for(category_index, _L("Material"), "custom-gcode_filament"); + add_row_ui("filament_colour", _L("Color"), from_u8(filament_color_hex(full, slot)), wxString(), category_index, + req_sub, RowKind::Color); + std::string type; + if (const auto* types = full.opt("filament_type")) + if (slot < types->size()) + type = types->get_at(slot); + add_row_ui("filament_type", _L("Type"), from_u8(normalize_filament_type(type)), wxString(), category_index, req_sub, + RowKind::Type); + } + + // A material section must not repeat a key; the same key may appear in other + // material sections - that is intended. + std::set material_added; + + for (const ConfigOptionsGroupShp& optgroup : overrides_page->m_optgroups) { + // Allowlist on the untranslated optgroup title; "Ironing" is skipped. + if (optgroup->title != "Retraction" && optgroup->title != "Retraction when switching material") + continue; + for (const auto& opt : optgroup->opt_map()) { + // Row keys are base keys; the load side applies them positionally. + const std::string& opt_id = opt.first; + std::string base = publish_base_key(opt_id); + if (!material_added.insert(base).second) + continue; + // Show the value of this slot; fall back to slot 0 if out of range. + std::string value_opt_id = base + "#" + std::to_string(slot); + if (const ConfigOption* opt_cfg = full.option(base)) + if (const auto* vec = dynamic_cast(opt_cfg)) + if (vec->size() > 0 && slot >= vec->size()) + value_opt_id = base + "#0"; + wxString label, value, unit; + if (!option_text(value_opt_id, base, label, value, unit)) + continue; + size_t sub_index = subcategory_index_for(category_index, _(optgroup->title), optgroup->icon); + add_row_ui(base, label, value, unit, category_index, sub_index); + } + } + } + } + } + } + + // --- Phase 3: process (print) settings; grouping matches the process tab. + { + size_t g = section_group_for(Section::Print); + for (Tab* tab : wxGetApp().tabs_list) { + if (tab->m_type != Preset::TYPE_PRINT) + continue; + size_t page_index = 0; + for (const PageShp& page : tab->m_pages) { + wxString category = Tab::translate_category(page->title(), tab->m_type); + const size_t category_index = category_index_for(category, Section::Print, g, page_index); + + for (const ConfigOptionsGroupShp& optgroup : page->m_optgroups) { + for (const auto& opt : optgroup->opt_map()) { + // opt_map() key is the opt_id (may carry "#N"); the value is + // (pure_opt_key, opt_index). + const std::string& opt_id = opt.first; + const std::string& pure_key = opt.second.first; + // A key may appear in more than one page/group; keep the first. + if (!added.insert(pure_key).second) + continue; + wxString label, value, unit; + if (!option_text(opt_id, pure_key, label, value, unit)) + continue; + size_t sub_index = subcategory_index_for(category_index, _(optgroup->title), optgroup->icon); + add_row_ui(opt_id, label, value, unit, category_index, sub_index); + } + } + ++page_index; + } + } + } + + // Pre-check the dirty (modified) settings and mark them bold (per-slot match, across all + // sections; collect_dirty_settings_keys unions the prints, printers and filaments). + // Dirty keys carry a "#N" per-extruder/per-slot suffix (deep_diff), so the base key alone + // cannot distinguish which extruder/filament slot changed: match the row's exact key, and + // for material rows (base key + per-slot value) the base key plus the section's slot. + std::set dirty_keys; + for (const std::string& key : collect_dirty_settings_keys(*wxGetApp().preset_bundle)) + dirty_keys.insert(key); + for (Row& row : m_rows) { + // The Color/Type requirement rows are not "dirty overrides": never auto-checked. + if (row.kind != RowKind::Setting) + continue; + bool dirty = dirty_keys.count(row.key) != 0; + if (!dirty && row.section == Section::Material) + dirty = dirty_keys.count(publish_base_key(row.key) + "#" + std::to_string(m_categories[row.inner_index].filament_slot)) != 0; + row.dirty = dirty; + if (row.dirty) { + row.check->SetValue(true); + set_row_bold(row, true); + } + } + + // Wire the "Enable" checkboxes: toggling one reveals/hides the slot's settings below the + // header (and, for a mixed slot, auto-selects its components). Bind by index so the lambda + // stays valid even if the vector is reallocated later. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].enable_check != nullptr) + m_categories[c].enable_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_enable_toggle(c); }); + + // Wire the "Full Publish" checkboxes (physical slots): toggling one disables/enables the + // material's rows. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].full_check != nullptr) + m_categories[c].full_check->Bind(wxEVT_CHECKBOX, [this, c](wxCommandEvent&) { on_full_toggle(c); }); + + // No filter is active at startup: every row matches until the user types. + for (Row& row : m_rows) + row.matches_filter = true; + apply_visibility(); + + for (Category& category : m_categories) { + category.scroll->FitInside(); + category.list_sizer->Layout(); + } + for (SectionGroup& section : m_sections) + if (!section.categories.empty()) + section.tabs->SelectItem(0); + if (!m_sections.empty()) { + m_outer_tabs->SelectItem(0); + show_outer_page(0); + } + refresh_tab_indicators(); +} + +size_t PublishSettingsDialog::section_group_for(Section kind) +{ + for (size_t i = 0; i < m_sections.size(); ++i) + if (m_sections[i].kind == kind) + return i; + + SectionGroup section; + section.kind = kind; + const size_t new_index = m_sections.size(); + switch (kind) { + case Section::Printer: + section.title = _L("Printer"); + section.icon_name = "printer"; + break; + case Section::Material: + section.title = _L("Filament"); + section.icon_name = "filament"; + break; + case Section::Print: + section.title = _L("Process"); + section.icon_name = "process"; + break; + } + section.icon_bmp = ScalableBitmap(this, section.icon_name, 16); + + section.page = new wxPanel(m_outer_host, wxID_ANY); + section.page->SetBackgroundColour(GetBackgroundColour()); + auto* page_sizer = new wxBoxSizer(wxVERTICAL); + section.tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); + section.tabs->SetFont(Label::Body_14); + section.tabs->SetBackgroundColour(GetBackgroundColour()); + page_sizer->Add(section.tabs, 0, wxEXPAND); + // Mixed-color filament slots get a second tab strip below the physical filament tabs; only + // the Material section has them. + if (kind == Section::Material) { + section.mixed_tabs = new TabCtrl(section.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, s_tab_style); + section.mixed_tabs->SetFont(Label::Body_14); + section.mixed_tabs->SetBackgroundColour(GetBackgroundColour()); + page_sizer->Add(section.mixed_tabs, 0, wxEXPAND | wxTOP, FromDIP(2)); + section.mixed_tabs->Hide(); + } + section.page_host = new wxPanel(section.page, wxID_ANY); + section.page_host->SetBackgroundColour(GetBackgroundColour()); + section.page_host_sizer = new wxBoxSizer(wxVERTICAL); + section.page_host->SetSizer(section.page_host_sizer); + page_sizer->Add(section.page_host, 1, wxEXPAND | wxTOP, FromDIP(4)); + section.page->SetSizer(page_sizer); + + if (section.icon_bmp.bmp().IsOk()) + m_outer_tabs->AppendItem(section.title, section.icon_bmp.bmp()); + else + m_outer_tabs->AppendItem(section.title); + m_outer_host_sizer->Add(section.page, 1, wxEXPAND); + section.page->Hide(); + m_sections.push_back(std::move(section)); + return new_index; +} + +size_t PublishSettingsDialog::category_index_for( + const wxString& title, Section section, size_t group, size_t source_index, const PublishMaterialIdentity& identity, bool is_mixed) +{ + // Dedup across both tab rows (physical + mixed); mixed slots are never duplicated anyway. + auto match = [&](const Category& existing) { + return existing.title == title && existing.section == section && existing.source_index == source_index && + existing.filament_id == identity.id && existing.filament_type == identity.type && + existing.filament_vendor == identity.vendor; + }; + for (size_t i : m_sections[group].categories) + if (match(m_categories[i])) + return i; + for (size_t i : m_sections[group].mixed_categories) + if (match(m_categories[i])) + return i; + + Category category; + category.title = title; + category.section = section; + category.group = group; + category.source_index = source_index; + category.filament_type = identity.type; + category.filament_vendor = identity.vendor; + category.filament_id = identity.id; + category.filament_slot = source_index; + category.is_mixed = is_mixed; + category.page = new wxPanel(m_sections[group].page_host, wxID_ANY); + category.page->SetBackgroundColour(GetBackgroundColour()); + auto* page_sizer = new wxBoxSizer(wxVERTICAL); + + // The physical slot's colour chip decorates the page header and the inner tab; it carries + // the 1-based slot number, mirroring the main GUI's filament swatches. A mixed slot has no + // header at all: its page is just the Enable toggle above the (always visible) definition + // preview - the identification lives in the tab strip's composition bitmap. + std::string hex; + std::string chip_label; + if (section == Section::Material && !is_mixed) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + hex = filament_color_hex(full, source_index); + chip_label = std::to_string(source_index + 1); + } + + if (section == Section::Material) { + if (is_mixed) { + // No chip/title: the lone "Enable" checkbox tops the page. + auto* enable_sizer = new wxBoxSizer(wxHORIZONTAL); + category.enable_check = new wxCheckBox(category.page, wxID_ANY, _L("Enable")); + category.enable_check->SetFont(Label::Body_13); + category.enable_check->SetToolTip(_L("Publish this mixed filament and enable + Full Publish its component filaments")); + enable_sizer->Add(category.enable_check, 0, wxALIGN_CENTER_VERTICAL); + page_sizer->Add(enable_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + } else { + // Line 1: [chip] [title] [Enable]. The Enable checkbox gates the whole slot: while + // it is unchecked nothing below the title is shown and nothing of it is published. + auto* header_sizer = new wxBoxSizer(wxHORIZONTAL); + if (wxBitmap* chip = get_extruder_color_icon(hex, chip_label, FromDIP(20), FromDIP(20))) { + category.filament_color_chip = new wxStaticBitmap(category.page, wxID_ANY, *chip); + header_sizer->Add(category.filament_color_chip, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(4)); + } + category.title_label = new wxStaticText(category.page, wxID_ANY, title); + category.title_label->SetFont(Label::Head_14); + header_sizer->Add(category.title_label, 0, wxALIGN_CENTER_VERTICAL); + category.enable_check = new wxCheckBox(category.page, wxID_ANY, _L("Enable")); + category.enable_check->SetFont(Label::Body_13); + category.enable_check->SetToolTip(_L("Publish this filament slot in the 3MF file")); + header_sizer->Add(category.enable_check, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(10)); + page_sizer->Add(header_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + + // Line 2: the "Full Publish" toggle, on its own line below the title (hidden until + // the slot is enabled), aligned with the colour chip above it. + auto* full_sizer = new wxBoxSizer(wxHORIZONTAL); + category.full_check = new wxCheckBox(category.page, wxID_ANY, _L("Full Publish")); + category.full_check->SetFont(Label::Body_13); + category.full_check->SetToolTip(_L("Embed the entire filament of this slot in the 3MF file")); + full_sizer->Add(category.full_check, 0, wxALIGN_CENTER_VERTICAL); + category.full_line_item = page_sizer->Add(full_sizer, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(6)); + } + } + + category.scroll = new wxScrolledWindow(category.page, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL); + category.scroll->SetScrollRate(0, 10); + category.scroll->SetBackgroundColour(GetBackgroundColour()); + category.list_sizer = new wxBoxSizer(wxVERTICAL); + category.scroll->SetSizer(category.list_sizer); + category.scroll->DisableFocusFromKeyboard(); + category.scroll->Bind(wxEVT_RIGHT_DOWN, &PublishSettingsDialog::show_menu, this); + category.info = new wxStaticText(category.scroll, wxID_ANY, is_mixed ? m_info_mix : m_info_empty); + category.info->SetFont(Label::Body_13); + category.list_sizer->Add(category.info, 1, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(10)); + category.info->Hide(); + page_sizer->Add(category.scroll, 1, wxEXPAND | wxALL, FromDIP(4)); + // A material slot starts disabled: its rows (and its Full Publish line) stay hidden until + // "Enable" is checked. + if (section == Section::Material) + category.scroll->Hide(); + category.page->SetSizer(page_sizer); + category.page->Hide(); + + const size_t category_index = m_categories.size(); + m_categories.push_back(std::move(category)); + // Mixed slots live in a second tab row below the physical filament tabs. + if (is_mixed) + m_sections[group].mixed_categories.push_back(category_index); + else + m_sections[group].categories.push_back(category_index); + if (section == Section::Material) { + TabCtrl* target = is_mixed ? m_sections[group].mixed_tabs : m_sections[group].tabs; + if (is_mixed) { + // The tab's whole composition (mix chip + components + percents) lives in one + // bitmap; the text is empty because a TabCtrl item cannot interleave images into + // its text. + const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full_cfg, source_index, FromDIP(20), target->GetBackgroundColour()); + if (tab_bmp.IsOk()) + target->AppendItem(wxString(), tab_bmp); + else + target->AppendItem(title); + } else if (wxBitmap* chip = get_extruder_color_icon(hex, chip_label, FromDIP(20), FromDIP(20))) { + target->AppendItem(title, *chip); + } else { + target->AppendItem(title); + } + } else { + m_sections[group].tabs->AppendItem(title); + } + m_sections[group].page_host_sizer->Add(m_categories[category_index].page, 1, wxEXPAND); + if (is_mixed) { + if (m_sections[group].selected_mixed < 0) + m_sections[group].selected_mixed = 0; + m_sections[group].mixed_tabs->Show(); + } else if (m_sections[group].selected_inner < 0) { + m_sections[group].selected_inner = 0; + } + return category_index; +} + +size_t PublishSettingsDialog::subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon) +{ + Category& category = m_categories[category_index]; + for (size_t i = 0; i < category.subs.size(); ++i) + if (category.subs[i].title == title) + return i; + + Subcategory sub; + sub.title = title; + if (!title.IsEmpty()) { + sub.header = new ::StaticLine(category.scroll, false, title, icon); + sub.header->SetFont(Label::Head_14); + sub.header->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); + auto* wrap = new wxBoxSizer(wxVERTICAL); + wrap->Add(sub.header, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); + sub.item = category.list_sizer->Add(wrap, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(22)); + } + category.subs.push_back(std::move(sub)); + return category.subs.size() - 1; +} + +void PublishSettingsDialog::add_row_ui(const std::string& key, + const wxString& label, + const wxString& value, + const wxString& unit, + size_t category_index, + size_t subcategory_index, + RowKind kind) +{ + Category& category = m_categories[category_index]; + Row row; + row.key = key; + row.label = label; + row.value = value; + row.unit = unit; + row.kind = kind; + row.category = category.title; + row.subcategory = category.subs[subcategory_index].title; + row.section = category.section; + row.section_title = m_sections[category.group].title; + row.outer_index = category.group; + row.inner_index = category_index; + const size_t row_index = m_rows.size(); + m_rows.push_back(std::move(row)); + Row& current = m_rows[row_index]; + current.check = new wxCheckBox(category.scroll, wxID_ANY, label); + current.check->SetFont(Label::Body_13); + current.check->Bind(wxEVT_CHECKBOX, [this](wxCommandEvent&) { refresh_tab_indicators(); }); + auto* row_sizer = new wxBoxSizer(wxHORIZONTAL); + row_sizer->Add(current.check, 0, wxALIGN_CENTER_VERTICAL); + // The value is read-only text (incl. the Type row: the published type is the slot's + // normalized type, not author-editable). + current.value_label = new wxStaticText(category.scroll, wxID_ANY, value, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); + current.value_label->SetFont(Label::Body_13); + current.value_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#262E30"))); + current.value_label->SetToolTip(unit.IsEmpty() ? value : value + " " + unit); + if (kind == RowKind::Color && !value.IsEmpty()) { + // The colour swatch carries this slot's 1-based number, like the main GUI swatches. + const std::string chip_label = std::to_string(category.filament_slot + 1); + if (wxBitmap* chip = get_extruder_color_icon(value.ToStdString(), chip_label, FromDIP(20), FromDIP(20))) { + current.color_chip = new wxStaticBitmap(category.scroll, wxID_ANY, *chip); + row_sizer->Add(current.color_chip, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + } + } + row_sizer->Add(current.value_label, 1, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(8)); + if (!unit.IsEmpty()) { + current.unit_label = new wxStaticText(category.scroll, wxID_ANY, unit); + current.unit_label->SetFont(Label::Body_13); + current.unit_label->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#6B6B6B"))); + row_sizer->Add(current.unit_label, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(4)); + } + current.item = category.list_sizer->Add(row_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(38)); + category.rows.push_back(row_index); + category.subs[subcategory_index].rows.push_back(row_index); +} + +void PublishSettingsDialog::on_full_toggle(size_t category_index) +{ + Category& cat = m_categories[category_index]; + const bool full = cat.full_check->GetValue(); + for (size_t r : cat.rows) + m_rows[r].check->Enable(!full); + refresh_tab_indicators(); +} + +void PublishSettingsDialog::on_enable_toggle(size_t category_index) +{ + Category& cat = m_categories[category_index]; + const bool enabled = cat.enable_check->GetValue(); + + // A published mixed filament needs its component filaments published too: mark the slots it + // uses as "Enable"d and Full Published so the mix's physical components always ship their + // identities. + if (cat.is_mixed && enabled) { + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + const std::vector components = mixed_slot_components(full, cat.filament_slot); + for (const unsigned int component : components) { + // Components are 1-based physical filament indices. + const size_t component_slot = size_t(component) - 1; + for (size_t c = 0; c < m_categories.size(); ++c) { + Category& comp_cat = m_categories[c]; + if (comp_cat.section != Section::Material || comp_cat.is_mixed || comp_cat.filament_slot != component_slot) + continue; + if (comp_cat.enable_check != nullptr) + comp_cat.enable_check->SetValue(true); + if (comp_cat.full_check != nullptr) + comp_cat.full_check->SetValue(true); + on_full_toggle(c); + } + } + } + + // Reveal/hide everything below the slot's header (rows, info, Full Publish line) and refresh + // the visibility of the auto-selected component slots. + apply_visibility(); + if (cat.page != nullptr) + cat.page->GetSizer()->Layout(); + refresh_tab_indicators(); +} + +void PublishSettingsDialog::add_mixed_visual(size_t category_index, const MixedVisualSpec& spec) +{ + if (category_index >= m_categories.size() || !spec.valid) + return; + Category& category = m_categories[category_index]; + if (category.page == nullptr || category.page->GetSizer() == nullptr || category.scroll == nullptr || spec.component_colours.empty()) + return; + + auto* viz = new wxPanel(category.page, wxID_ANY); + viz->SetBackgroundStyle(wxBG_STYLE_PAINT); + // Theme colours and DIP metrics are resolved inside the paint handler so dark-mode toggles + // and DPI changes are picked up on the next repaint without any explicit listener. The + // ternary fill cache lives inside the shared triangle painter (FilamentBitmapUtils). + viz->Bind(wxEVT_PAINT, [this, panel = viz, spec](wxPaintEvent&) { + const wxColour bg = StateColor::darkModeColorFor(*wxWHITE); + wxBufferedPaintDC pdc(panel); + pdc.SetBackground(wxBrush(bg)); + pdc.Clear(); + const wxRect rc = panel->GetClientRect(); + if (rc.width <= 0 || rc.height <= 0) + return; + + const size_t n = spec.component_colours.size(); + + if (spec.tri_weights.size() == 3 && n == 3 && !spec.is_gradient) { + // Ternary mix: read-only miniature of the MixedFilamentDialog's triangle picker. + const MixedTriangleTheme tri_theme{StateColor::darkModeColorFor(*wxWHITE), StateColor::darkModeColorFor(wxColour("#CECECE")), + StateColor::darkModeColorFor(wxColour("#262E30")), + StateColor::darkModeColorFor(wxColour(107, 107, 107))}; + draw_mixed_triangle_picker(pdc, rc.GetSize(), {spec.component_colours[0], spec.component_colours[1], spec.component_colours[2]}, + {spec.tri_weights[0], spec.tri_weights[1], spec.tri_weights[2]}, tri_theme); + draw_mixed_triangle_labels(pdc, rc.GetSize(), {spec.tri_weights[0], spec.tri_weights[1], spec.tri_weights[2]}, tri_theme); + } else if (!spec.is_gradient) { + // Ratio bar. A 2-component slot matches the MixedFilamentDialog's continuous blend + + // divider (with its two end labels); wider non-gradient mixes (rare) fall back to one + // solid segment per component. + if (n == 2) { + const int bar_h = FromDIP(27); + draw_mixed_ratio_blend_bar(pdc, wxRect(rc.x, rc.y, rc.width, bar_h), spec.component_colours[0], spec.component_colours[1], + spec.ratios[1]); + // Read-only twin of the dialog's left/right percentage labels. + pdc.SetFont(::Label::Body_12); + pdc.SetTextForeground(StateColor::darkModeColorFor(wxColour(107, 107, 107))); + const wxString la = wxString::Format("%d%%", int(std::lround(spec.ratios[0] * 100.0))); + const wxString lb = wxString::Format("%d%%", int(std::lround(spec.ratios[1] * 100.0))); + const int lab_y = rc.y + bar_h + FromDIP(2); + pdc.DrawText(la, rc.x, lab_y); + pdc.DrawText(lb, rc.x + rc.width - pdc.GetTextExtent(lb).GetWidth(), lab_y); + } else { + draw_mixed_ratio_segments(pdc, rc, spec.component_colours, spec.ratios); + // Percent label centred in each segment wide enough to hold it. + std::vector shares = spec.ratios; + double total = 0.0; + for (double r : shares) + total += r; + if (total <= 0.0) { + shares.assign(n, 1.0 / n); + total = 1.0; + } + pdc.SetFont(::Label::Body_12); + int x0 = rc.x; + for (size_t i = 0; i < n; ++i) { + const int x1 = (i + 1 < n) ? rc.x + int(std::lround(std::accumulate(shares.begin(), shares.begin() + i + 1, 0.0) / + total * double(rc.width))) : + rc.x + rc.width; + const int w = std::max(1, x1 - x0); + const wxString text = wxString::Format("%d%%", int(std::lround(shares[i] / total * 100.0))); + const wxSize tsz = pdc.GetTextExtent(text); + if (tsz.GetWidth() + FromDIP(4) <= w) { + const wxColour& c = spec.component_colours[i]; + const double lum = 0.299 * c.Red() + 0.587 * c.Green() + 0.114 * c.Blue(); + pdc.SetTextForeground(lum > 140 ? wxColour("#262E30") : *wxWHITE); + pdc.DrawText(text, x0 + (w - tsz.GetWidth()) / 2, rc.y + (rc.height - tsz.GetHeight()) / 2); + } + x0 = x1; + } + } + } else { + // Gradient: read-only miniature of the GradientCurveEditor plot, drawn through the + // shared painter so it anti-aliases and keeps the square proportions and labels. + const MixedGradientTheme grad_theme{StateColor::darkModeColorFor(*wxWHITE), + StateColor::darkModeColorFor(wxColour(238, 238, 238)), + StateColor::darkModeColorFor(wxColour(107, 107, 107)), + StateColor::darkModeColorFor(wxColour(107, 107, 107)), + StateColor::darkModeColorFor(wxColour(38, 46, 48)), + StateColor::darkModeColorFor(wxColour(172, 172, 172)), + StateColor::darkModeColorFor(*wxWHITE)}; + std::vector curves; + std::vector anchors; + if (spec.gradient_samples.size() >= 2 && n >= 2) { + const wxRect plot = mixed_gradient_plot_rect(rc.GetSize()); + auto lift_alpha = [](wxColour c) { + if (c.Alpha() == 0) + c.Set(c.Red(), c.Green(), c.Blue(), 150); + return c; + }; + // First component's ratio solid, its mirror twin for the other. + const wxColour col_a = lift_alpha(spec.component_colours[0]); + const wxColour col_b = lift_alpha(spec.component_colours[1]); + std::vector pts_a, pts_b; + pts_a.reserve(spec.gradient_samples.size()); + pts_b.reserve(spec.gradient_samples.size()); + for (const auto& [t, r] : spec.gradient_samples) { + pts_a.push_back({plot.x + t * plot.width, plot.y + (1.0 - r) * plot.height}); + pts_b.push_back({plot.x + t * plot.width, plot.y + r * plot.height}); + } + // Control-point anchors of the stored curve on the first component's line. + anchors.reserve(spec.gradient_anchors.size()); + for (const auto& [t, r] : spec.gradient_anchors) + anchors.push_back({plot.x + t * plot.width, plot.y + (1.0 - r) * plot.height}); + curves.push_back({std::move(pts_a), col_a, 4}); + curves.push_back({std::move(pts_b), col_b, 2}); + } + draw_mixed_gradient_plot(pdc, rc.GetSize(), curves, anchors, grad_theme); + } + }); + + // Fixed DIP size, left-aligned: the visualization keeps its proportions no matter how the + // dialog is resized (the paint handler draws into whatever client rect the panel ends up + // with, so nothing else has to change). Sizes mirror the MixedFilamentDialog controls: the + // gradient plot and triangle picker match the editor's 260x200 / 160x160, the ratio bar is + // the dialog's 27px bar plus its label line. + int viz_h; + int viz_w; + if (spec.is_gradient) { + viz_w = 260; + viz_h = 200; + } else if (spec.tri_weights.size() == 3 && spec.component_colours.size() == 3) { + viz_w = 160; + viz_h = 160; + } else { + viz_w = 240; + viz_h = spec.component_colours.size() == 2 ? 50 : 30; + } + const wxSize viz_sz(FromDIP(viz_w), FromDIP(viz_h)); + viz->SetMinSize(viz_sz); + viz->SetMaxSize(viz_sz); + // Parented to the page right above the scroll area, so it is always shown with the tab: + // the "Enable" toggle keeps gating only the rows/info below, never this preview. + wxSizer* page_sizer = category.page->GetSizer(); + int scroll_idx = -1; + for (size_t i = 0; i < page_sizer->GetChildren().size(); ++i) + if (page_sizer->GetChildren()[i]->GetWindow() == category.scroll) { + scroll_idx = int(i); + break; + } + if (scroll_idx < 0) + page_sizer->Add(viz, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(10)); // defensive: no scroll item + else + page_sizer->Insert(scroll_idx, viz, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(10)); +} + +void PublishSettingsDialog::set_row_bold(Row& row, bool bold) +{ + // Rebase on the dialog's body font so clearing bold restores the exact original font. + row.check->SetFont(bold ? Label::Body_13.Bold() : Label::Body_13); +} + +void PublishSettingsDialog::save_scroll_position(Category& category) +{ + if (category.scroll != nullptr) + category.scroll->GetViewStart(&category.scroll_pos.x, &category.scroll_pos.y); +} + +void PublishSettingsDialog::show_outer_page(size_t section_index) +{ + if (section_index >= m_sections.size()) + return; + if (m_selected_outer >= 0 && m_selected_outer < static_cast(m_sections.size())) { + SectionGroup& old_section = m_sections[m_selected_outer]; + if (old_section.selected_inner >= 0 && old_section.selected_inner < static_cast(old_section.categories.size())) + save_scroll_position(m_categories[old_section.categories[old_section.selected_inner]]); + if (old_section.selected_mixed >= 0 && old_section.selected_mixed < static_cast(old_section.mixed_categories.size())) + save_scroll_position(m_categories[old_section.mixed_categories[old_section.selected_mixed]]); + m_sections[m_selected_outer].page->Hide(); + } + m_selected_outer = static_cast(section_index); + SectionGroup& section = m_sections[section_index]; + section.page->Show(); + // Restore whichever tab row (physical or mixed) was active. + if (section.selected_inner >= 0) + show_inner_page(section_index, section.selected_inner); + else if (section.selected_mixed >= 0) + show_mixed_page(section_index, section.selected_mixed); + m_outer_host_sizer->Layout(); +} + +void PublishSettingsDialog::show_inner_page(size_t section_index, int inner_index) +{ + if (section_index >= m_sections.size()) + return; + SectionGroup& section = m_sections[section_index]; + if (inner_index < 0 || inner_index >= static_cast(section.categories.size())) + return; + if (section.selected_inner >= 0 && section.selected_inner < static_cast(section.categories.size())) { + save_scroll_position(m_categories[section.categories[section.selected_inner]]); + m_categories[section.categories[section.selected_inner]].page->Hide(); + } + if (section.selected_mixed >= 0 && section.selected_mixed < static_cast(section.mixed_categories.size())) { + save_scroll_position(m_categories[section.mixed_categories[section.selected_mixed]]); + m_categories[section.mixed_categories[section.selected_mixed]].page->Hide(); + section.selected_mixed = -1; + } + section.selected_inner = inner_index; + Category& category = m_categories[section.categories[inner_index]]; + category.page->Show(); + category.scroll->FitInside(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + if (section.mixed_tabs != nullptr) + section.mixed_tabs->Unselect(); + section.page_host_sizer->Layout(); +} + +void PublishSettingsDialog::show_mixed_page(size_t section_index, int mixed_index) +{ + if (section_index >= m_sections.size()) + return; + SectionGroup& section = m_sections[section_index]; + if (mixed_index < 0 || mixed_index >= static_cast(section.mixed_categories.size())) + return; + if (section.selected_mixed >= 0 && section.selected_mixed < static_cast(section.mixed_categories.size())) { + save_scroll_position(m_categories[section.mixed_categories[section.selected_mixed]]); + m_categories[section.mixed_categories[section.selected_mixed]].page->Hide(); + } + if (section.selected_inner >= 0 && section.selected_inner < static_cast(section.categories.size())) { + save_scroll_position(m_categories[section.categories[section.selected_inner]]); + m_categories[section.categories[section.selected_inner]].page->Hide(); + section.selected_inner = -1; + } + section.selected_mixed = mixed_index; + Category& category = m_categories[section.mixed_categories[mixed_index]]; + category.page->Show(); + category.scroll->FitInside(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + section.tabs->Unselect(); + section.page_host_sizer->Layout(); +} + +void PublishSettingsDialog::on_outer_tab_changed(wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (selection >= 0 && selection < static_cast(m_sections.size())) + show_outer_page(static_cast(selection)); +} + +void PublishSettingsDialog::on_inner_tab_changed(size_t section_index, wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (section_index < m_sections.size() && selection >= 0 && selection < static_cast(m_sections[section_index].categories.size())) + show_inner_page(section_index, selection); +} + +void PublishSettingsDialog::on_mixed_tab_changed(size_t section_index, wxCommandEvent& event) +{ + const int selection = event.GetInt(); + if (section_index < m_sections.size() && selection >= 0 && + selection < static_cast(m_sections[section_index].mixed_categories.size())) + show_mixed_page(section_index, selection); +} + +void PublishSettingsDialog::bind_tab_events() +{ + m_outer_tabs->Bind(wxEVT_TAB_SEL_CHANGED, &PublishSettingsDialog::on_outer_tab_changed, this); + for (size_t section_index = 0; section_index < m_sections.size(); ++section_index) { + m_sections[section_index].tabs->Bind(wxEVT_TAB_SEL_CHANGED, + [this, section_index](wxCommandEvent& event) { on_inner_tab_changed(section_index, event); }); + if (m_sections[section_index].mixed_tabs != nullptr) + m_sections[section_index].mixed_tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this, section_index](wxCommandEvent& event) { + on_mixed_tab_changed(section_index, event); + }); + } +} + +void PublishSettingsDialog::apply_filter(const wxString& filter_text) +{ + m_filter_mode = FilterMode::Text; + refresh_filter(filter_text.Lower()); +} + +void PublishSettingsDialog::apply_pseudo_filter(bool selected_only) +{ + m_filter_mode = selected_only ? FilterMode::SelectedOnly : FilterMode::UnselectedOnly; + refresh_filter(wxString()); // the pseudo modes ignore the search text +} + +void PublishSettingsDialog::refresh_filter(const wxString& filter) +{ + Freeze(); + const bool pseudo = m_filter_mode != FilterMode::Text; + const bool want_checked = m_filter_mode == FilterMode::SelectedOnly; + m_fb_sizer->Show(!pseudo); + if (pseudo) { + // "×" marks the chip as a dismissible filter state (U+00D7, present in all UI fonts). + m_pseudo_chip->SetLabel((want_checked ? _L("Filter selected") : _L("Filter non-selected")) + " " + wxString::FromUTF8("\u00d7")); + } + m_pseudo_chip->Show(pseudo); + + // Row matches are computed first; page and optgroup visibility is applied below. + if (pseudo) { + for (Row& row : m_rows) + row.matches_filter = row.check->IsEnabled() && row.check->GetValue() == want_checked; + } else { + const bool clear = filter.IsEmpty(); + for (Row& row : m_rows) { + row.matches_filter = clear || (row.section_title + " " + row.category + " " + row.subcategory + " " + row.label + " " + + row.value + " " + row.unit) + .Lower() + .Contains(filter); + } + } + + size_t first_outer = 0; + int first_inner = -1; + bool active_has_match = false; + for (size_t s = 0; s < m_sections.size(); ++s) { + for (size_t inner = 0; inner < m_sections[s].categories.size(); ++inner) { + Category& category = m_categories[m_sections[s].categories[inner]]; + bool has_match = false; + for (size_t r : category.rows) + has_match = has_match || m_rows[r].matches_filter; + category.info->Show(!has_match); + if (!has_match) + // A mixed slot has no selectable rows: always explain it is published whole. + category.info->SetLabel(category.is_mixed ? m_info_mix : + (pseudo ? (want_checked ? m_info_nonsel : m_info_allsel) : m_info_empty)); + if (has_match && first_inner < 0) { + first_outer = s; + first_inner = static_cast(inner); + } + if (static_cast(s) == m_selected_outer && static_cast(inner) == m_sections[s].selected_inner) + active_has_match = has_match; + } + // Mixed slots have no rows: they can never match a filter, so they always fall back to + // their explanatory hint (shown once the slot is enabled). + for (size_t mixed : m_sections[s].mixed_categories) { + Category& category = m_categories[mixed]; + category.info->Show(true); + category.info->SetLabel(m_info_mix); + } + } + if (!active_has_match && first_inner >= 0 && + (m_selected_outer != static_cast(first_outer) || m_sections[first_outer].selected_inner != first_inner)) { + if (m_selected_outer != static_cast(first_outer)) { + m_outer_tabs->SelectItem(static_cast(first_outer)); + show_outer_page(first_outer); + } + m_sections[first_outer].tabs->SelectItem(first_inner); + show_inner_page(first_outer, first_inner); + } + + apply_visibility(); + for (Category& category : m_categories) { + save_scroll_position(category); + category.scroll->FitInside(); + category.list_sizer->Layout(); + category.scroll->Scroll(category.scroll_pos.x, category.scroll_pos.y); + } + Layout(); + Thaw(); +} + +void PublishSettingsDialog::apply_visibility() +{ + Freeze(); + for (Category& category : m_categories) { + // A disabled material slot hides everything below its header (rows, info and the Full + // Publish line); enable it first to reveal its settings. + const bool enabled = category.section != Section::Material || + (category.enable_check != nullptr && category.enable_check->GetValue()); + if (category.scroll != nullptr) + category.scroll->Show(enabled); + if (category.full_line_item != nullptr) + category.full_line_item->Show(enabled); + bool category_any = false; + for (size_t r : category.rows) + category_any = category_any || m_rows[r].matches_filter; + category.info->Show(enabled && !category_any); + for (Subcategory& sub : category.subs) { + bool sub_any = false; + for (size_t r : sub.rows) + sub_any = sub_any || m_rows[r].matches_filter; + if (sub.header != nullptr) + sub.item->Show(enabled && sub_any); + for (size_t r : sub.rows) + m_rows[r].item->Show(enabled && m_rows[r].matches_filter); + } + category.list_sizer->Layout(); + category.scroll->FitInside(); + } + Thaw(); +} + +void PublishSettingsDialog::select_all(bool value) +{ + // "All" skips disabled (gated) rows; "None" leaves a gated row's preserved value. + for (Row& row : m_rows) + if (row.check->IsEnabled()) + row.check->SetValue(value); + // "All" also enables every material slot (so its rows/Full Publish become visible and the + // selection is actually exported); "None" disables them all again. + for (Category& cat : m_categories) + if (cat.section == Section::Material && cat.enable_check != nullptr) + cat.enable_check->SetValue(value); + // wxCheckBox::SetValue does not emit wxEVT_CHECKBOX, so re-run the enable handlers to + // propagate mixed-slot components and refresh visibility as if the user had clicked. + for (size_t c = 0; c < m_categories.size(); ++c) + if (m_categories[c].section == Section::Material) + on_enable_toggle(c); + apply_visibility(); + refresh_tab_indicators(); +} + +bool PublishSettingsDialog::row_is_visible(const Row& row) const +{ + if (m_selected_outer < 0 || m_selected_outer >= static_cast(m_sections.size()) || + row.outer_index != static_cast(m_selected_outer) || m_sections[m_selected_outer].selected_inner < 0 || + m_sections[m_selected_outer].selected_inner >= static_cast(m_sections[m_selected_outer].categories.size()) || + row.inner_index != m_sections[m_selected_outer].categories[m_sections[m_selected_outer].selected_inner] || !row.matches_filter || + !row.check->IsEnabled()) + return false; + return row.item->IsShown(); +} + +void PublishSettingsDialog::select_visible(bool value) +{ + // In a pseudo-filter view the rows being toggled would all disappear; drop the filter + // afterwards so the result stays visible. + const bool clear_pseudo = (m_filter_mode == FilterMode::UnselectedOnly && !value) || + (m_filter_mode == FilterMode::SelectedOnly && value); + + // Toggle the rows visible under the *current* filter. + for (Row& row : m_rows) + if (row_is_visible(row)) + row.check->SetValue(value); + + if (clear_pseudo) { + // Note: SetValue() may fire wxEVT_TEXT on some platforms, re-entering apply_filter() - + // that is fine; the rows above were already toggled and the trailing call is idempotent. + m_filter_ctrl->ChangeValue(""); + apply_filter(""); // resync visibility and the All/None bar + } + refresh_tab_indicators(); +} + +void PublishSettingsDialog::show_menu(wxMouseEvent& evt) +{ + bool filtering = !m_filter_ctrl->GetValue().IsEmpty() || m_filter_mode != FilterMode::Text; + bool list_empty = true; + if (m_selected_outer >= 0) { + for (const Row& row : m_rows) + if (row_is_visible(row)) { + list_empty = false; + break; + } + } + + wxMenu m; + m.Append(kPublishSelectAll, _L("Select All"))->Enable(!filtering); + m.Append(kPublishDeselectAll, _L("Deselect All"))->Enable(!filtering); + m.AppendSeparator(); + m.Append(kPublishSelectVisible, _L("Select visible"))->Enable(!list_empty && filtering); + m.Append(kPublishDeselectVisible, _L("Deselect visible"))->Enable(!list_empty && filtering); + m.AppendSeparator(); + m.AppendCheckItem(kPublishFilterSelected, _L("Filter selected")); + m.AppendCheckItem(kPublishFilterNonSelected, _L("Filter non-selected")); + m.Check(kPublishFilterSelected, m_filter_mode == FilterMode::SelectedOnly); + m.Check(kPublishFilterNonSelected, m_filter_mode == FilterMode::UnselectedOnly); + + m.Bind( + wxEVT_MENU, + [this](wxCommandEvent& e) { + switch (e.GetId()) { + case kPublishSelectAll: select_all(true); break; + case kPublishDeselectAll: select_all(false); break; + case kPublishSelectVisible: select_visible(true); break; + case kPublishDeselectVisible: select_visible(false); break; + case kPublishFilterSelected: + // Clicking the active entry again clears the pseudo filter. + if (m_filter_mode == FilterMode::SelectedOnly) + apply_filter(m_filter_ctrl->GetValue()); + else + apply_pseudo_filter(true); + break; + case kPublishFilterNonSelected: + if (m_filter_mode == FilterMode::UnselectedOnly) + apply_filter(m_filter_ctrl->GetValue()); + else + apply_pseudo_filter(false); + break; + default: break; + } + }, + kPublishSelectAll, kPublishFilterNonSelected); + + wxWindow* src = dynamic_cast(evt.GetEventObject()); + if (!src) + return; + wxPoint screen_pos = src->ClientToScreen(evt.GetPosition()); + wxPoint local_pos = ScreenToClient(screen_pos); + PopupMenu(&m, local_pos); +} + +void PublishSettingsDialog::apply_selection(const std::vector& published_keys, + const std::vector& material_keys) +{ + // The supplied selection is authoritative: clear the dirty-default pre-check first so a + // dirty key the user deselected stays off, then re-select exactly what the selection names. + for (Row& row : m_rows) + if (row.check != nullptr) + row.check->SetValue(false); + for (Category& cat : m_categories) { + if (cat.section != Section::Material) + continue; + if (cat.enable_check != nullptr) + cat.enable_check->SetValue(false); + if (cat.full_check != nullptr) + cat.full_check->SetValue(false); + } + + // Print / printer rows: match by exact row key (the full "#N" opt_id where present). + for (const std::string& key : published_keys) + for (Row& row : m_rows) + if ((row.section == Section::Print || row.section == Section::Printer) && row.check != nullptr && row.key == key) { + row.check->SetValue(true); + break; + } + + // Per-slot material selections, applied positionally by slot. + for (const Slic3r::PublishedMaterialEntry& entry : material_keys) { + if (entry.slot < 0) + continue; + bool entry_mixed = false; + for (const std::string& k : entry.keys) + if (publish_mixed_keys().count(publish_base_key(k)) != 0) { + entry_mixed = true; + break; + } + size_t cat_idx = size_t(-1); + for (size_t c = 0; c < m_categories.size(); ++c) { + const Category& cat = m_categories[c]; + if (cat.section != Section::Material || cat.is_mixed != entry_mixed || cat.filament_slot != size_t(entry.slot)) + continue; + cat_idx = c; + break; + } + if (cat_idx == size_t(-1)) + continue; // slot not present in the receiver (out of range / skipped) + Category& cat = m_categories[cat_idx]; + if (cat.enable_check != nullptr) { + cat.enable_check->SetValue(true); + on_enable_toggle(cat_idx); + } + if (entry.full && cat.full_check != nullptr) { + cat.full_check->SetValue(true); + on_full_toggle(cat_idx); + } else { + // Setting rows are keyed by the base key. + for (const std::string& key : entry.keys) { + const std::string base = publish_base_key(key); + for (const size_t r : cat.rows) { + Row& row = m_rows[r]; + if (row.kind == RowKind::Setting && row.key == base) { + row.check->SetValue(true); + break; + } + } + } + if (entry.publish_type && !entry.publish_type_value.empty()) + for (const size_t r : cat.rows) + if (m_rows[r].kind == RowKind::Type && m_rows[r].check != nullptr) { + m_rows[r].check->SetValue(true); + break; + } + if (entry.publish_color && !entry.color.empty()) + for (const size_t r : cat.rows) + if (m_rows[r].kind == RowKind::Color && m_rows[r].check != nullptr) { + m_rows[r].check->SetValue(true); + break; + } + } + } + + apply_visibility(); + refresh_tab_indicators(); +} + +std::vector PublishSettingsDialog::GetPublishedKeys() const +{ + std::vector out; + // Process and printer sections both travel through published_keys (the load-side overlay + // applies process keys to the prints edited preset and the allowlisted printer keys to the + // printers edited preset); material keys use a separate API. Printer rows carry the full + // per-extruder "#N" opt_id (built in Phase 1), so a checked row publishes exactly that + // extruder's value - per-extruder selection is independent. + for (const Row& row : m_rows) { + if ((row.section != Section::Print && row.section != Section::Printer) || !row.check->GetValue()) + continue; + out.push_back(row.key); + } + return out; +} + +std::vector PublishSettingsDialog::unpublished_mixed_components() const +{ + std::vector out; + for (const Category& cat : m_categories) { + if (!cat.is_mixed || cat.section != Section::Material) + continue; + // Only enabled mixed slots depend on their components being published. + if (cat.enable_check == nullptr || !cat.enable_check->GetValue()) + continue; + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + // Components are 1-based physical filament indices. + for (const unsigned int component : mixed_slot_components(full, cat.filament_slot)) { + const size_t component_slot = size_t(component) - 1; + // Find the component slot's material category (one exists per physical slot). + const Category* comp_cat = nullptr; + for (const Category& other : m_categories) { + if (other.section == Section::Material && !other.is_mixed && other.filament_slot == component_slot) { + comp_cat = &other; + break; + } + } + if (comp_cat == nullptr || comp_cat->enable_check == nullptr) + continue; + // Missing when the component's "Enable" is off, or it is enabled with neither + // "Full Publish" nor the "Type" requirement row checked. Colour never counts: + // the receiver renders the mix from its own components' colours. + if (!comp_cat->enable_check->GetValue()) { + out.push_back({cat.filament_slot, component_slot, MixedDependencyIssue::Reason::Disabled}); + continue; + } + if (comp_cat->full_check != nullptr && comp_cat->full_check->GetValue()) + continue; + bool type_checked = false; + for (const size_t r : comp_cat->rows) { + const Row& row = m_rows[r]; + if (row.kind == RowKind::Type && row.check->GetValue()) { + type_checked = true; + break; + } + } + if (!type_checked) + out.push_back({cat.filament_slot, component_slot, MixedDependencyIssue::Reason::MaterialNotPublished}); + } + } + // Deterministic order for the warning rows: by mixed slot, then component slot. The same + // (mix, component) pair cannot repeat: each mix's components come from a config list. + std::sort(out.begin(), out.end(), [](const MixedDependencyIssue& a, const MixedDependencyIssue& b) { + return std::tie(a.mixed_slot, a.component_slot) < std::tie(b.mixed_slot, b.component_slot); + }); + return out; +} + +std::vector PublishSettingsDialog::GetPublishedMaterialKeys() const +{ + std::vector out; + for (const Category& cat : m_categories) { + if (cat.section != Section::Material) + continue; + // A slot that is not "Enable"d publishes nothing at all. + if (cat.enable_check != nullptr && !cat.enable_check->GetValue()) + continue; + Slic3r::PublishedMaterialEntry entry; + entry.filament_type = cat.filament_type; + entry.filament_vendor = cat.filament_vendor; + entry.filament_id = cat.filament_id; + entry.slot = static_cast(cat.filament_slot); + // The author's preset id distinguishes exact variants that share filament_id + // ("Generic PLA" vs "Generic PLA Matte"), so the receiver can match precisely; the + // preset name is the most direct identity and is matched first on load. + PresetBundle* bundle = wxGetApp().preset_bundle; + if (bundle != nullptr && cat.filament_slot < bundle->filament_presets.size()) { + if (const Preset* preset = bundle->filaments.find_preset(bundle->filament_presets[cat.filament_slot], false, true)) { + entry.setting_id = preset->setting_id; + entry.preset_name = preset->name; + } + } + // A mixed slot publishes as one unit: its definition (components, ratios, gradient) + // always travels (its Enable implies this), and the component filaments are enabled + + // Full Published by on_enable_toggle into their own entries. + if (cat.is_mixed) { + Slic3r::PublishedMaterialEntry mixed_entry; + mixed_entry.filament_type = cat.filament_type; + mixed_entry.filament_vendor = cat.filament_vendor; + mixed_entry.filament_id = cat.filament_id; + mixed_entry.slot = static_cast(cat.filament_slot); + // The mix's own colour (blended) is a property of the definition, not a + // requirement row; carry it so the receiver renders the swatch. + const DynamicPrintConfig full_cfg = wxGetApp().preset_bundle->full_config(); + const std::string mix_color = filament_color_hex(full_cfg, cat.filament_slot); + if (!mix_color.empty()) { + mixed_entry.publish_color = true; + mixed_entry.color = mix_color; + } + for (const std::string& key : publish_mixed_keys()) + mixed_entry.keys.emplace_back(key); + out.push_back(std::move(mixed_entry)); + continue; + } + // "Full Publish": the whole filament preset is embedded; type and colour are implicitly + // published, and the per-key rows are disabled / their state ignored. + if (cat.full_check != nullptr && cat.full_check->GetValue()) { + entry.full = true; + entry.full_keys = full_keys_for_slot(); + entry.publish_type = true; + entry.publish_type_value = normalize_filament_type(cat.filament_type); + for (size_t r : cat.rows) { + const Row& row = m_rows[r]; + if (row.kind == RowKind::Color && !row.value.IsEmpty()) { + entry.publish_color = true; + entry.color = row.value.ToStdString(); + } + } + out.push_back(std::move(entry)); + continue; + } + for (size_t r : cat.rows) { + const Row& row = m_rows[r]; + if (!row.check->GetValue()) + continue; + if (row.kind == RowKind::Color) { + entry.publish_color = true; + entry.color = row.value.ToStdString(); + } else if (row.kind == RowKind::Type) { + entry.publish_type = true; + entry.publish_type_value = row.value.ToStdString(); + } else { + entry.keys.push_back(row.key); + } + } + // Nothing checked at all -> nothing to write. + if (!entry.keys.empty() || entry.publish_type || entry.publish_color) + out.push_back(std::move(entry)); + } + return out; +} + +bool PublishSettingsDialog::category_has_selection(const Category& cat) const +{ + // A material slot publishes (or not) as a whole, gated by "Enable". + if (cat.section == Section::Material) + return cat.enable_check != nullptr && cat.enable_check->GetValue(); + // Print/Printer categories have no gate: any checked row counts. + for (const size_t r : cat.rows) + if (m_rows[r].check->GetValue()) + return true; + return false; +} + +void PublishSettingsDialog::refresh_tab_indicators() +{ + for (size_t s = 0; s < m_sections.size(); ++s) { + SectionGroup& section = m_sections[s]; + bool any = false; + for (size_t i = 0; i < section.categories.size(); ++i) { + const bool on = category_has_selection(m_categories[section.categories[i]]); + section.tabs->SetItemIndicator(static_cast(i), on); + any = any || on; + } + if (section.mixed_tabs != nullptr) + for (size_t i = 0; i < section.mixed_categories.size(); ++i) { + const bool on = category_has_selection(m_categories[section.mixed_categories[i]]); + section.mixed_tabs->SetItemIndicator(static_cast(i), on); + any = any || on; + } + m_outer_tabs->SetItemIndicator(static_cast(s), any); + } +} + +std::vector PublishSettingsDialog::full_keys_for_slot() const +{ + // The canonical filament preset keys minus the structural keys the published overlay must + // never touch (inherits, compatibility, *_settings_id, ...), plus filament_colour (not a + // member of Preset::filament_options). Values travel in the exported config, masked to + // this slot, and are applied on load onto the receiver's slot. + const std::set& denylist = publish_structural_keys(); + std::vector keys; + for (const std::string& key : Preset::filament_options()) + if (denylist.count(key) == 0) + keys.emplace_back(key); + keys.emplace_back("filament_colour"); + return keys; +} + +void PublishSettingsDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + // Rescale toolbar bitmaps and icons; collapse chevrons are vector-drawn and repaint. + m_search.msw_rescale(); + m_menu.msw_rescale(); + m_filter_box->SetIcon(m_search.bmp()); + m_menu_button->SetBitmap(m_menu.bmp()); + m_outer_tabs->Rescale(); + + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + + for (Category& cat : m_categories) { + if (cat.full_check != nullptr) + cat.full_check->Refresh(); + if (cat.enable_check != nullptr) + cat.enable_check->Refresh(); + if (cat.title_label != nullptr) + cat.title_label->Refresh(); + if (cat.filament_color_chip != nullptr) { + // Mixed pages have no header chip; this only ever fires for physical slots. + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, cat.filament_slot), std::to_string(cat.filament_slot + 1), + FromDIP(20), FromDIP(20))) { + cat.filament_color_chip->SetBitmap(*chip); + } + } + cat.scroll->FitInside(); + cat.list_sizer->Layout(); + } + + for (size_t s = 0; s < m_sections.size(); ++s) { + SectionGroup& section = m_sections[s]; + section.icon_bmp.msw_rescale(); + if (section.icon_bmp.bmp().IsOk()) + m_outer_tabs->SetItemBitmap(s, section.icon_bmp.bmp()); + section.tabs->Rescale(); + if (section.mixed_tabs != nullptr) + section.mixed_tabs->Rescale(); + } + + // Refresh the per-row Color chips at the new DPI (they carry the slot number too). + for (Row& row : m_rows) { + if (row.color_chip != nullptr && !row.value.IsEmpty()) { + const std::string chip_label = (row.inner_index < m_categories.size()) ? + std::to_string(m_categories[row.inner_index].filament_slot + 1) : + ""; + if (wxBitmap* chip = get_extruder_color_icon(row.value.ToStdString(), chip_label, FromDIP(20), FromDIP(20))) + row.color_chip->SetBitmap(*chip); + } + } + + for (size_t category_index = 0; category_index < m_categories.size(); ++category_index) { + const Category& category = m_categories[category_index]; + if (category.section != Section::Material || category.is_mixed) + continue; + if (wxBitmap* chip = get_extruder_color_icon(filament_color_hex(full, category.filament_slot), + std::to_string(category.filament_slot + 1), FromDIP(20), FromDIP(20))) { + const SectionGroup& section = m_sections[category.group]; + const auto iter = std::find(section.categories.begin(), section.categories.end(), category_index); + if (iter != section.categories.end()) + m_sections[category.group].tabs->SetItemBitmap(static_cast(iter - section.categories.begin()), *chip); + } + } + refresh_mixed_tab_bitmaps(); + + fit_to_content(); // tab buttons' min widths grew with the DPI: re-fit (incl. resize floor) + Refresh(); +} + +void PublishSettingsDialog::refresh_mixed_tab_bitmaps() +{ + // The mixed-tab composition bitmaps bake the tab strip's background colour and DPI-scaled + // text, so both a theme flip and a DPI change have to rebuild them. + const DynamicPrintConfig full = wxGetApp().preset_bundle->full_config(); + for (SectionGroup& section : m_sections) { + if (section.mixed_tabs == nullptr) + continue; + const wxColour tab_bg = section.mixed_tabs->GetBackgroundColour(); + for (size_t i = 0; i < section.mixed_categories.size(); ++i) { + const Category& category = m_categories[section.mixed_categories[i]]; + const wxBitmap tab_bmp = mixed_filament_tab_bitmap(full, category.filament_slot, FromDIP(20), tab_bg); + if (tab_bmp.IsOk()) + section.mixed_tabs->SetItemBitmap(static_cast(i), tab_bmp); + } + } +} + +void PublishSettingsDialog::on_sys_color_changed() +{ + // The mixed-tab compositions bake the tab strip's background colour: rebuild them when the + // theme changes (on_dpi_changed covers rescales). + refresh_mixed_tab_bitmaps(); + Refresh(); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/PublishSettingsDialog.hpp b/src/slic3r/GUI/PublishSettingsDialog.hpp new file mode 100644 index 0000000000..f41b3e73a3 --- /dev/null +++ b/src/slic3r/GUI/PublishSettingsDialog.hpp @@ -0,0 +1,286 @@ +#pragma once + +#include "GUI_Utils.hpp" +#include "wxExtensions.hpp" +#include "Widgets/TabCtrl.hpp" + +#include "libslic3r/PublishSettings.hpp" + +#include +#include +#include +#include +#include +#include +#include + +// Forward declarations (all are global classes, see Widgets/TextInput.hpp and +// Widgets/StaticLine.hpp). +class TextInput; +class StaticLine; + +namespace Slic3r { namespace GUI { + +struct PublishMaterialIdentity +{ + std::string type; + std::string vendor; + std::string id; +}; + +// One unmet dependency of an enabled mixed-filament slot: the component filament the mix uses +// would ship without its material (either the component slot is not enabled at all, or it is +// enabled with neither "Full Publish" nor the "Type" requirement checked). Slots are 0-based. +struct MixedDependencyIssue +{ + enum class Reason { Disabled, MaterialNotPublished }; + size_t mixed_slot{0}; + size_t component_slot{0}; + Reason reason{Reason::Disabled}; +}; + +// Dialog letting a model author select which settings get embedded in a 3MF. Nested tab layout +// mirroring the Process settings (Printer / Filament / Process outer tabs, category or material +// tabs inside each). Dirty settings are pre-checked and shown bold; on OK the print rows become +// "orca_published_keys" and the material rows become "orca_published_material_keys". +class PublishSettingsDialog : public DPIDialog +{ +public: + // Optional published selection (Feature A/B): when the caller supplies one (either a + // remembered session selection or the payload of a freshly loaded published 3MF) the dialog + // is seeded from it, overriding the dirty-default pre-check. A non-null pointer to an empty + // selection means "publish nothing" (an intentional empty state); a null pointer means "no + // remembered selection" (keep the dirty defaults). + PublishSettingsDialog(wxWindow* parent = nullptr, + const std::vector* published_keys = nullptr, + const std::vector* material_keys = nullptr); + ~PublishSettingsDialog(); + + // The selected print/printer setting keys (in display order); printer keys carry a '#N' + // per-extruder suffix. + std::vector GetPublishedKeys() const; + + // The selected keys grouped per material section (base keys, no '#N' suffix). + std::vector GetPublishedMaterialKeys() const; + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + void on_sys_color_changed() override; + +private: + void fit_to_content(); + void refresh_mixed_tab_bitmaps(); + + // Which part of the settings the row/category came from. + enum class Section { Print, Printer, Material }; + + // One selectable setting row: a checkbox (setting name) plus a value label and an optional + // grey unit label. key is the full config key, possibly with a "#N" variant suffix + // (print/printer rows); material rows carry the base key. + enum class RowKind { + Setting, // a regular setting key + Color, // material colour requirement (filament_colour) + Type, // material type requirement (read-only text) + }; + struct Row + { + std::string key; + wxString category; + wxString subcategory; + wxString label; + wxString value; + wxString unit; + wxString section_title; // outer tab title, for filter matching + Section section{Section::Print}; + RowKind kind{RowKind::Setting}; + size_t outer_index{0}; + size_t inner_index{0}; + bool dirty{false}; // matches a dirty base key: pre-checked + bold + bool matches_filter{false}; // survives the active filter (computed by apply_filter) + wxCheckBox* check{nullptr}; + wxStaticText* value_label{nullptr}; + wxStaticText* unit_label{nullptr}; + wxStaticBitmap* color_chip{nullptr}; // Color rows only; swatch next to the value + wxSizerItem* item{nullptr}; // sizer item of this row's h-sizer in its tab list sizer + }; + + // An optgroup heading. Rows store indices into m_rows. + struct Subcategory + { + wxString title; + ::StaticLine* header{nullptr}; // null when the title is empty + wxSizerItem* item{nullptr}; + std::vector rows; + }; + + // An inner TabCtrl page with its material controls and content. + struct Category + { + wxString title; + Section section{Section::Print}; + size_t group{0}; // index into m_sections / outer page + size_t source_index{0}; // stable source page or material slot index + wxPanel* page{nullptr}; + wxScrolledWindow* scroll{nullptr}; + wxBoxSizer* list_sizer{nullptr}; + wxStaticText* info{nullptr}; + wxPoint scroll_pos{0, 0}; + wxStaticBitmap* filament_color_chip{nullptr}; + wxStaticText* title_label{nullptr}; // material title (static text; Full Publish carries the label elsewhere) + // "Enable": while unchecked nothing of this slot is exported and everything below the + // header row is hidden. For physical slots the Full Publish toggle sits on a second + // line (full_line_item) visible only when enabled; for mixed slots Enable alone implies + // publishing the mix definition, so no Full Publish widget exists at all. + wxCheckBox* enable_check{nullptr}; + wxSizerItem* full_line_item{nullptr}; // sizer item of the Full Publish line (physical slots only) + // "Full Publish": while checked, the whole slot preset is serialized and its rows + // (incl. Color/Type) are disabled. + wxCheckBox* full_check{nullptr}; + // True for a mixed-color filament slot: no Material/Retraction rows; Enable publishes + // the slot's gradient/ratio definition as a whole. + bool is_mixed{false}; + // Material identity, only for Section::Material categories. + std::string filament_type; + std::string filament_vendor; + std::string filament_id; + // The author's 0-based filament slot this material section represents. + size_t filament_slot{0}; + std::vector subs; + std::vector rows; // flattened rows of this category + }; + + // Frozen snapshot of a mixed filament slot's definition for the read-only visualization + // painted on the slot's page. Plain data only: the paint handler must never touch the + // config. For gradient slots the curve is pre-sampled (t, ratio) pairs, where ratio is the + // first component's share over model height; anchors carry the raw control points. + struct MixedVisualSpec + { + bool valid{false}; + bool is_gradient{false}; + std::vector component_colours; // colour per component, in config order + std::vector ratios; // sublayer shares summing to ~1 (non-gradient) + std::vector tri_weights; // 3-component mixes: barycentric shares + std::vector> gradient_samples; + std::vector> gradient_anchors; + }; + + // One outer TabCtrl page. Category entries are its inner tabs. + struct SectionGroup + { + wxString title; // _L("Printer") / _L("Filament") / _L("Process") + Section kind{Section::Print}; // maps 1:1 to the display group + std::string icon_name; // "printer" / "filament" / "process" + ScalableBitmap icon_bmp; // tab icon next to the title; rescaled on DPI change + wxPanel* page{nullptr}; + TabCtrl* tabs{nullptr}; + // Second tab strip, below the main one, listing only the mixed-color filament slots. + // Present on the Material section only (null elsewhere). + TabCtrl* mixed_tabs{nullptr}; + wxPanel* page_host{nullptr}; + wxBoxSizer* page_host_sizer{nullptr}; + int selected_inner{-1}; + // Selected mixed tab (index into mixed_categories), valid while a mixed slot page is shown. + int selected_mixed{-1}; + std::vector categories; // indices into m_categories (physical slots) + std::vector mixed_categories; // indices into m_categories (mixed slots) + }; + + void build_option_model(); + // Seed the dialog from a published selection (print/printer keys + per-slot material keys): + // the supplied selection is authoritative - it is applied after the dirty pre-check and + // overrides it, so deselected dirty keys stay off. Rows/slots not present in the selection + // are left unselected. Unknown or out-of-range entries are skipped gracefully. + void apply_selection(const std::vector& published_keys, + const std::vector& material_keys); + // Frozen snapshot of a mixed slot's definition for the page visualization, resolved from + // the full config once at dialog-build time. Gradient slots pre-sample exactly what the + // slicer will print: the custom curve wins over the gradient_range endpoints over the + // 0.10 -> 0.90 default (the resolution FilamentBitmapUtils::mixed_gradient_curve mirrors). + static MixedVisualSpec make_mixed_visual_spec(const Slic3r::DynamicPrintConfig& full, size_t slot); + void apply_filter(const wxString& filter_text); + // Menu-only pseudo filters: show only the checked ("Filter selected") or only the + // unchecked ("Filter non-selected") rows. The search box keeps the user's text. + void apply_pseudo_filter(bool selected_only); + // Recompute row matches and visibility for the active filter mode. filter is the lowered + // search text; it is ignored by the pseudo modes. + void refresh_filter(const wxString& filter); + void select_all(bool value); + void select_visible(bool value); + void show_menu(wxMouseEvent& evt); + void set_row_bold(Row& row, bool bold); + // "Full Publish" toggled: disables/enables the material's rows. + void on_full_toggle(size_t category_index); + // "Enable" toggled on a material slot: reveals/hides everything below the header and, for a + // mixed slot, auto-selects its component filaments' "Enable" + "Full Publish" toggles. + void on_enable_toggle(size_t category_index); + // Whether a category currently publishes something, driving its tab's indicator dot. + // Print/Printer: any row checked. Material: the slot's "Enable" is on. + bool category_has_selection(const Category& cat) const; + // Recompute the indicator dot on every outer/inner tab from the current selection state. + void refresh_tab_indicators(); + // Unmet dependencies of enabled mixed-filament slots, one record per (mix, component) pair: + // "Enable" not checked on the component, or enabled with neither "Full Publish" nor the + // "Type" requirement row checked. Colour is deliberately ignored (the receiver renders the + // mix from its own components' colours). Sorted by mixed slot, then component slot. + std::vector unpublished_mixed_components() const; + // Read-only visualization of a mixed slot's definition (a stacked ratio bar, or the + // Material Ratio vs Model Height graph for a gradient), inserted above the info hint + // inside the category's scroll area. + void add_mixed_visual(size_t category_index, const MixedVisualSpec& spec); + // Return/create the fixed outer page for a Section kind. + size_t section_group_for(Section kind); + size_t category_index_for(const wxString& title, + Section section, + size_t group, + size_t source_index, + const PublishMaterialIdentity& identity = PublishMaterialIdentity(), + bool is_mixed = false); + size_t subcategory_index_for(size_t category_index, const wxString& title, const wxString& icon); + void add_row_ui(const std::string& key, + const wxString& label, + const wxString& value, + const wxString& unit, + size_t category_index, + size_t subcategory_index, + RowKind kind = RowKind::Setting); + // The non-structural filament keys of a slot's preset, for a "Full Publish" entry. + std::vector full_keys_for_slot() const; + void save_scroll_position(Category& category); + void show_outer_page(size_t section_index); + void show_inner_page(size_t section_index, int inner_index); + void show_mixed_page(size_t section_index, int mixed_index); + void on_outer_tab_changed(wxCommandEvent& event); + void on_inner_tab_changed(size_t section_index, wxCommandEvent& event); + void on_mixed_tab_changed(size_t section_index, wxCommandEvent& event); + bool row_is_visible(const Row& row) const; + void apply_visibility(); + void bind_tab_events(); + + TabCtrl* m_outer_tabs{nullptr}; + wxPanel* m_outer_host{nullptr}; + wxBoxSizer* m_outer_host_sizer{nullptr}; + int m_selected_outer{-1}; + wxBoxSizer* m_fb_sizer{nullptr}; // "All"/"None" buttons sizer + // Active filter mode: free text from the search box, or one of the menu's pseudo filters. + enum class FilterMode { Text, SelectedOnly, UnselectedOnly }; + FilterMode m_filter_mode{FilterMode::Text}; + TextInput* m_filter_box{nullptr}; + wxTextCtrl* m_filter_ctrl{nullptr}; + wxStaticBitmap* m_menu_button{nullptr}; + // Shown while a pseudo filter is active (the search box keeps the user's text, so the chip + // carries the visible state); clicking it returns to text filtering. + wxStaticText* m_pseudo_chip{nullptr}; + wxString m_info_nonsel; + wxString m_info_allsel; + wxString m_info_empty; + wxString m_info_mix; // body hint shown for a mixed slot (published as a whole) + + ScalableBitmap m_search; + ScalableBitmap m_menu; + + std::vector m_rows; + std::vector m_categories; + std::vector m_sections; +}; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/RammingChart.cpp b/src/slic3r/GUI/RammingChart.cpp index 96cd3b65a7..29116b12cb 100644 --- a/src/slic3r/GUI/RammingChart.cpp +++ b/src/slic3r/GUI/RammingChart.cpp @@ -7,6 +7,7 @@ #include "GUI.hpp" #include "GUI_App.hpp" #include "I18N.hpp" +#include "Widgets/StateColor.hpp" wxDEFINE_EVENT(EVT_WIPE_TOWER_CHART_CHANGED, wxCommandEvent); diff --git a/src/slic3r/GUI/RecenterDialog.hpp b/src/slic3r/GUI/RecenterDialog.hpp index 1e48e7990b..cd7511d3f5 100644 --- a/src/slic3r/GUI/RecenterDialog.hpp +++ b/src/slic3r/GUI/RecenterDialog.hpp @@ -10,8 +10,6 @@ namespace Slic3r { namespace GUI { class RecenterDialog : public DPIDialog { private: - wxStaticText* m_staticText_hint; - wxStaticBitmap* m_bitmap_home; ScalableBitmap m_home_bmp; wxString hint1; wxString hint2; diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 7b2d091176..029310faf9 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1250,7 +1250,7 @@ void ConfirmBeforeSendDialog::update_text(std::vector tex else { label_item = new Label(m_vebview_release_note, text.text + " " + _L("Please refer to Wiki before use->"), LB_AUTO_WRAP); - label_item->Bind(wxEVT_LEFT_DOWN, [this, text](wxMouseEvent& e) { wxLaunchDefaultBrowser(text.wiki_url);}); + label_item->Bind(wxEVT_LEFT_DOWN, [text](wxMouseEvent& e) { wxLaunchDefaultBrowser(text.wiki_url);}); label_item->Bind(wxEVT_ENTER_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_HAND); }); label_item->Bind(wxEVT_LEAVE_WINDOW, [this](auto& e) { SetCursor(wxCURSOR_ARROW); }); } diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index 0c11dc2f58..cfd372bc97 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -35,6 +35,7 @@ #include "Widgets/CheckBox.hpp" #include "Widgets/ComboBox.hpp" #include "Widgets/ScrolledWindow.hpp" +#include "Widgets/HyperLink.hpp" #include #include diff --git a/src/slic3r/GUI/SavePresetDialog.cpp b/src/slic3r/GUI/SavePresetDialog.cpp index 0b33e48ec4..04f98f06f9 100644 --- a/src/slic3r/GUI/SavePresetDialog.cpp +++ b/src/slic3r/GUI/SavePresetDialog.cpp @@ -114,7 +114,7 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox if (parent->m_mode == comDevelop) { // A new user copy of a system preset inherits from the selected system preset. const std::string parent_name = sel_preset.is_system ? sel_preset.name : sel_preset.inherits(); - const bool can_detach = !parent_name.empty(); + const bool has_parent = !parent_name.empty(); wxBoxSizer *detach_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -123,8 +123,9 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox auto detach_checkbox = new ::CheckBox(parent); detach_checkbox->SetToolTip(detach_tooltip); - auto detach_label = new wxStaticText(parent, wxID_ANY, _L("Detach from parent")); + auto detach_label = new wxStaticText(parent, wxID_ANY, has_parent ? _L("Detach from parent") : _L("Save without parent")); detach_label->SetFont(::Label::Body_14); + detach_label->SetForegroundColour(wxColour("#363636")); detach_label->SetToolTip(detach_tooltip); detach_sizer->Add(detach_checkbox, 0, wxALIGN_LEFT | wxLEFT, BORDER_W); @@ -132,36 +133,31 @@ SavePresetDialog::Item::Item(Preset::Type type, const std::string &suffix, wxBox sizer->Add(detach_sizer, 0, wxEXPAND | wxTOP, BORDER_W); sizer->AddSpacer(FromDIP(5)); - const wxString parent_text = can_detach ? from_u8(parent_name) : _L("Unique preset"); + const wxString parent_text = has_parent ? from_u8(parent_name) : _L("Unique preset"); auto parent_label = new wxStaticText(parent, wxID_ANY, parent_text); parent_label->SetFont(::Label::Body_12); parent_label->SetForegroundColour(wxColour("#6B6B6B")); - parent_label->SetToolTip(can_detach ? _L("Parent preset") : _L("This preset does not inherit from another preset.")); + parent_label->SetToolTip(has_parent ? _L("Parent preset") : _L("This preset does not inherit from another preset.")); sizer->Add(parent_label, 0, wxEXPAND | wxLEFT, BORDER_W + FromDIP(24)); sizer->AddSpacer(FromDIP(5)); - if (!can_detach) { - detach_checkbox->Disable(); - detach_label->SetForegroundColour(wxColour("#6B6B6B")); - } - else { - // Set initial state (unchecked by default) - detach_checkbox->SetValue(m_detach); - // Bind the checkbox event to update the detach state for this item - detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent&) { m_detach = detach_checkbox->GetValue(); }); + // Set initial state (unchecked by default) + detach_checkbox->SetValue(m_detach); + // Bind the checkbox event to update the detach state for this item + detach_checkbox->Bind(wxEVT_TOGGLEBUTTON, [this, detach_checkbox](wxCommandEvent& event) { + m_detach = detach_checkbox->GetValue(); + event.Skip(); // Let CheckBox update its bitmap for the new state. + }); - detach_label->SetForegroundColour(wxColour("#363636")); - - auto on_toggle = [this, detach_checkbox]() { - detach_checkbox->SetValue(!detach_checkbox->GetValue()); - wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); - ev.SetEventObject(detach_checkbox); - detach_checkbox->GetEventHandler()->ProcessEvent(ev); - }; - detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); - detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); - } + auto on_toggle = [detach_checkbox]() { + detach_checkbox->SetValue(!detach_checkbox->GetValue()); + wxCommandEvent ev(wxEVT_TOGGLEBUTTON, detach_checkbox->GetId()); + ev.SetEventObject(detach_checkbox); + detach_checkbox->GetEventHandler()->ProcessEvent(ev); + }; + detach_label->Bind(wxEVT_LEFT_DOWN, [on_toggle](wxMouseEvent& e) {if(!e.LeftDClick()) on_toggle();}); + detach_label->Bind(wxEVT_LEFT_DCLICK, [on_toggle](wxMouseEvent& e) {on_toggle();}); } m_radio_group->Bind(wxEVT_COMMAND_RADIOBOX_SELECTED, [this](wxCommandEvent &e) { diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 1d5cf0b9e5..eec03ebf62 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -62,7 +62,7 @@ static char marker_by_type(Preset::Type type, PrinterTechnology pt) } } -std::string Option::opt_key() const { return into_u8(key).substr(2); } +std::string Option::opt_key() const { return key.size() < 2 ? std::string() : into_u8(key).substr(2); } void FoundOption::get_marked_label_and_tooltip(const char **label_, const char **tooltip_) const { @@ -116,6 +116,7 @@ void OptionsSearcher::append_options(DynamicPrintConfig *config, Preset::Type ty case coFloats: change_opt_key(opt_key, config, cnt); break; case coStrings: change_opt_key(opt_key, config, cnt); break; case coPercents: change_opt_key(opt_key, config, cnt); break; + case coFloatsOrPercents: change_opt_key>(opt_key, config, cnt); break; case coPoints: change_opt_key(opt_key, config, cnt); break; // BBS case coEnums: change_opt_key(opt_key, config, cnt); break; @@ -334,29 +335,46 @@ const Option &OptionsSearcher::get_option(size_t pos_in_filter) const const Option &OptionsSearcher::get_option(const std::string &opt_key, Preset::Type type, int &variant_index) const { + auto not_found = [&variant_index]() -> const Option& { + static const Option empty_option; + variant_index = -2; + return empty_option; + }; + + variant_index = -1; std::string opt_key2 = opt_key; if (auto n = opt_key.find('#'); n != std::string::npos) { variant_index = std::atoi(opt_key.c_str() + n + 1); opt_key2 = opt_key.substr(0, n); } - auto it = std::lower_bound(options.begin(), options.end(), Option({boost::nowide::widen(get_key(opt_key2, type))})); - // BBS: return the 0th option when not found in searcher caused by mode difference - // assert(it != options.end()); - if (it == options.end()) { variant_index = -2 ; return options[0]; } - if (it->opt_key() == opt_key2) { + const std::wstring key = boost::nowide::widen(get_key(opt_key2, type)); + auto it = std::lower_bound(options.begin(), options.end(), Option({key})); + if (it == options.end()) return not_found(); + if (it->key == key) { variant_index = -1; } else { - const std::string opt_key3 = opt_key2 + "#"; - it = std::lower_bound(it, options.end(), Option({boost::nowide::widen(get_key(opt_key3, type))})); - if (it == options.end() || it->opt_key().compare(0, opt_key3.length(), opt_key3) != 0) { - variant_index = -2; // Not found - return options[0]; + const std::wstring prefix = key + L"#"; + it = std::lower_bound(it, options.end(), Option({prefix})); + if (it == options.end() || it->key.compare(0, prefix.length(), prefix) != 0) + return not_found(); + // Orca: Copy-parameters dialogs request the base key, without a vector index. + if (variant_index < 0) return *it; + + const bool has_mode = type == Preset::TYPE_PRINTER && printer_options_with_variant_2.count(opt_key2) > 0; + const bool has_variant = + (type == Preset::TYPE_PRINT && print_options_with_variant.count(opt_key2) > 0) || + (type == Preset::TYPE_FILAMENT && filament_options_with_variant.count(opt_key2) > 0) || + (type == Preset::TYPE_PRINTER && printer_options_with_variant_1.count(opt_key2) > 0) || has_mode; + if (!has_variant || has_mode) { + // Orca: Machine limits store (Normal, Silent) pairs per variant; the UI registers only #0/#1. + const std::wstring indexed_key = has_mode ? prefix + std::to_wstring(variant_index % 2) : + boost::nowide::widen(get_key(opt_key, type)); + it = std::lower_bound(it, options.end(), Option({indexed_key})); + if (it == options.end() || it->key != indexed_key) + return not_found(); + if (!has_variant) + variant_index = -1; } - auto it2 = it; - ++it2; - if (it2 != options.end() && it2->opt_key().compare(0, opt_key3.length(), opt_key3) == 0 - && printer_options_with_variant_1.find(opt_key2) == printer_options_with_variant_1.end()) - variant_index = -2; } return options[it - options.begin()]; @@ -681,7 +699,7 @@ SearchDialog::SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindo SearchDialog::~SearchDialog() {} -void SearchDialog::Popup(wxPoint position /*= wxDefaultPosition*/) +void SearchDialog::Popup(wxWindow *focus /*= nullptr*/) { /* const std::string& line = searcher->search_string(); search_line->SetValue(line.empty() ? default_string : from_u8(line)); @@ -696,17 +714,19 @@ void SearchDialog::Popup(wxPoint position /*= wxDefaultPosition*/) search_line2->SetValue(wxString("")); //const std::string &line = searcher->search_string(); //searcher->search(into_u8(line), true); - PopupWindow::Popup(); + PopupWindow::Popup(focus); search_line2->SetFocus(); update_list(); } +#ifdef __WXMSW__ void SearchDialog::MSWDismissUnfocusedPopup() { Dismiss(); OnDismiss(); } +#endif // __WXMSW__ void SearchDialog::OnDismiss() { } @@ -926,7 +946,7 @@ SearchObjectDialog::SearchObjectDialog(GUI::ObjectList* object_list, wxWindow* p SearchObjectDialog::~SearchObjectDialog() {} -void SearchObjectDialog::Popup(wxPoint position /*= wxDefaultPosition*/) +void SearchObjectDialog::Popup(wxWindow *focus /*= nullptr*/) { if (m_is_dismissing || this->IsShown()) { return; @@ -937,7 +957,7 @@ void SearchObjectDialog::Popup(wxPoint position /*= wxDefaultPosition*/) // dropdown list, otherwise the text input won't be usable m_object_list->SetFocus(); #endif - PopupWindow::Popup(); + PopupWindow::Popup(focus); search_line2->SetFocus(); m_object_list->assembly_plate_object_name(); @@ -945,11 +965,13 @@ void SearchObjectDialog::Popup(wxPoint position /*= wxDefaultPosition*/) update_list(); } +#ifdef __WXMSW__ void SearchObjectDialog::MSWDismissUnfocusedPopup() { Dismiss(); OnDismiss(); } +#endif // __WXMSW__ void SearchObjectDialog::OnDismiss() {} diff --git a/src/slic3r/GUI/Search.hpp b/src/slic3r/GUI/Search.hpp index bdb4da83c4..4ae43dbca0 100644 --- a/src/slic3r/GUI/Search.hpp +++ b/src/slic3r/GUI/Search.hpp @@ -216,10 +216,12 @@ public: SearchDialog(OptionsSearcher *searcher, Preset::Type type, wxWindow *parent, TextInput *input, wxWindow *search_btn); ~SearchDialog(); - void MSWDismissUnfocusedPopup(); - void Popup(wxPoint position = wxDefaultPosition); - void OnDismiss(); - void Dismiss(); +#ifdef __WXMSW__ + void MSWDismissUnfocusedPopup() override; +#endif // __WXMSW__ + void Popup(wxWindow *focus = nullptr) override; + void OnDismiss() override; + void Dismiss() override; void Die(); void msw_rescale(); @@ -260,10 +262,12 @@ public: SearchObjectDialog(GUI::ObjectList* object_list, wxWindow* parent, TextInput* input); ~SearchObjectDialog(); - void MSWDismissUnfocusedPopup(); - void Popup(wxPoint position = wxDefaultPosition); - void OnDismiss(); - void Dismiss(); +#ifdef __WXMSW__ + void MSWDismissUnfocusedPopup() override; +#endif // __WXMSW__ + void Popup(wxWindow *focus = nullptr) override; + void OnDismiss() override; + void Dismiss() override; void Die(); void OnInputText(wxCommandEvent& event); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 486be04243..629aef7296 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -483,7 +483,7 @@ SelectMachineDialog::SelectMachineDialog(Plater *plater) m_link_edit_nozzle->Bind(wxEVT_LEFT_DOWN, [this](auto &e) { - if (this && this->m_is_in_sending_mode) { + if (m_is_in_sending_mode) { return; } @@ -2176,7 +2176,7 @@ void SelectMachineDialog::on_reselect_dialog_btn_clicked(wxMouseEvent&) best_pos_map[slot.id] = pos.value(); } } - m_best_pos_dialog->Update(obj, best_pos_map, m_ams_mapping_result, text); + m_best_pos_dialog->UpdateInfo(obj, best_pos_map, m_ams_mapping_result, text); m_best_pos_dialog->ShowModal(); } @@ -2201,7 +2201,7 @@ void SelectMachineDialog::update_best_pos_dialog(wxCommandEvent& evt) best_pos_map[slot.id] = pos.value(); } } - m_best_pos_dialog->Update(obj_, best_pos_map, m_ams_mapping_result, text); + m_best_pos_dialog->UpdateInfo(obj_, best_pos_map, m_ams_mapping_result, text); } void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector params, wxString wiki_url) @@ -2847,7 +2847,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) }); // STUDIO-9580 - /* use warning color if there are warning and normal messages* / + /* use warning color if there are warning and normal messages*/ /* use indexes if there are several messages*/ /* add header and ending if there are several messages or has none block warnings*/ if (confirm_text.size() > 1 || !is_printing_block) @@ -3073,7 +3073,7 @@ static bool _HasExt(const std::vector &ams_mapping_result) { }; for (const auto &info : ams_mapping_result) { - if (info.ams_id == VIRTUAL_AMS_MAIN_ID_STR || info.ams_id == VIRTUAL_AMS_DEPUTY_ID_STR && !info.ams_id.empty()) { + if (info.ams_id == VIRTUAL_AMS_MAIN_ID_STR || (info.ams_id == VIRTUAL_AMS_DEPUTY_ID_STR && !info.ams_id.empty())) { return true; } } @@ -3428,7 +3428,7 @@ void SelectMachineDialog::show_timelapse_storage_dialog(MachineObject* obj) if (show_cleanup_btn) { auto* btn_cleanup = new Button(&dlg, _L("Clean Up")); - btn_cleanup->Bind(wxEVT_BUTTON, [&dlg, ID_CLEANUP](wxCommandEvent&) { dlg.EndModal(ID_CLEANUP); }); + btn_cleanup->Bind(wxEVT_BUTTON, [&dlg](wxCommandEvent&) { dlg.EndModal(ID_CLEANUP); }); btn_sizer->Add(btn_cleanup, 0, wxEXPAND); } @@ -3845,8 +3845,12 @@ int SelectMachineDialog::update_print_required_data(Slic3r::DynamicPrintConfig c m_required_data_config = config; m_required_data_model = model; //m_required_data_plate_data_list = plate_data_list; + auto* agent = wxGetApp().getAgent(); for (auto i = 0; i < plate_data_list.size(); i++) { if (!plate_data_list[i]->gcode_file.empty()) { + if (agent) + for (auto& info : plate_data_list[i]->slice_filaments_info) + info.filament_id = agent->to_orca_filament_id(info.filament_id); m_required_data_plate_data_list.push_back(plate_data_list[i]); } } @@ -5051,8 +5055,11 @@ void SelectMachineDialog::update_show_status(MachineObject* obj_) const auto& warning_tpu_filaments = DevPrinterConfigUtil::get_value_from_config>(obj_->printer_type, "auto_on_cali_warning_tpu_filaments"); if (!warning_tpu_filaments.empty()) { + auto* agent = wxGetApp().getAgent(); for (const auto& fila : m_ams_mapping_result) { - if (std::find(warning_tpu_filaments.begin(), warning_tpu_filaments.end(), fila.filament_id) != warning_tpu_filaments.end()) { + // fila.filament_id is our OF id; the printer config list holds the printer's own. + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(fila.filament_id) : fila.filament_id; + if (std::find(warning_tpu_filaments.begin(), warning_tpu_filaments.end(), printer_filament_id) != warning_tpu_filaments.end()) { show_status(PrintDialogStatus::PrintStatusTPUUnsuggestCali, { _L("If 'Dynamic Flow Calibration' is set to Auto/On, the system will use the manual calibration value or the default value and skip the flow calibration process. You can perform a manual flow calibration for TPU filament on the 'Calibration' page.") }); break; @@ -5208,9 +5215,12 @@ bool SelectMachineDialog::can_support_pa_auto_cali() std::vector unsupport_auto_cali_filaments = DevPrinterConfigUtil::get_unsupport_auto_cali_filaments(obj->printer_type); if (!unsupport_auto_cali_filaments.empty()) { + auto* agent = wxGetApp().getAgent(); auto iter = std::find_if(m_filaments.begin(), m_filaments.end(), - [&unsupport_auto_cali_filaments](const FilamentInfo &item) { - auto iter = std::find(unsupport_auto_cali_filaments.begin(), unsupport_auto_cali_filaments.end(), item.filament_id); + [&unsupport_auto_cali_filaments, agent](const FilamentInfo &item) { + // item.filament_id is our OF id; the printer config list holds the printer's own. + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(item.filament_id) : item.filament_id; + auto iter = std::find(unsupport_auto_cali_filaments.begin(), unsupport_auto_cali_filaments.end(), printer_filament_id); return iter != unsupport_auto_cali_filaments.end(); }); @@ -5497,7 +5507,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() first_enabled_id = extruder; } - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent &e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { if (!item->m_enable) {return;} if (!m_check_flag || m_print_status == PrintDialogStatus::PrintStatusUnsupportedPrinter) { return; } /*STUDIO-11301*/ @@ -6128,8 +6138,8 @@ void SelectMachineDialog::set_default_from_sdcard() first_enabled_id = fo.id; } - item->Bind(wxEVT_LEFT_UP, [this, item, materials](wxMouseEvent& e) {}); - item->Bind(wxEVT_LEFT_DOWN, [this, obj_, item, materials, diameters_count, fo](wxMouseEvent& e) { + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_DOWN, [this, obj_, item, materials, fo](wxMouseEvent& e) { if (!item->m_enable) {return;} if (!m_check_flag || m_print_status == PrintDialogStatus::PrintStatusUnsupportedPrinter) { return; } /*STUDIO-11301*/ diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 46d6adf4f4..6a3acce54c 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -662,7 +662,6 @@ private: ScalableButton* m_button_question { nullptr }; wxStaticBitmap* m_bed_image{ nullptr }; - Label* m_text_bed_type; }; diff --git a/src/slic3r/GUI/SelectMachinePop.cpp b/src/slic3r/GUI/SelectMachinePop.cpp index df0a566917..9b34e74f23 100644 --- a/src/slic3r/GUI/SelectMachinePop.cpp +++ b/src/slic3r/GUI/SelectMachinePop.cpp @@ -567,7 +567,7 @@ void SelectMachinePopup::update_other_devices() } } - op->Bind(EVT_CONNECT_LAN_PRINT, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_CONNECT_LAN_PRINT, [mobj](wxCommandEvent &e) { if (mobj) { if (mobj->is_lan_mode_printer()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); @@ -579,7 +579,7 @@ void SelectMachinePopup::update_other_devices() } }); - op->Bind(EVT_BIND_MACHINE, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_BIND_MACHINE, [mobj](wxCommandEvent &e) { BindMachineDialog dlg; dlg.update_machine_info(mobj); int dlg_result = wxID_CANCEL; @@ -700,7 +700,7 @@ void SelectMachinePopup::update_user_devices() op->set_printer_state(PrinterState::LOCK); } } - op->Bind(EVT_UNBIND_MACHINE, [this, dev, mobj](wxCommandEvent& e) { + op->Bind(EVT_UNBIND_MACHINE, [dev, mobj](wxCommandEvent& e) { dev->set_selected_machine(""); if (mobj) { AppConfig* config = wxGetApp().app_config; @@ -720,7 +720,7 @@ void SelectMachinePopup::update_user_devices() } else { op->show_printer_bind(true, PrinterBindState::ALLOW_UNBIND); - op->Bind(EVT_UNBIND_MACHINE, [this, mobj, dev](wxCommandEvent& e) { + op->Bind(EVT_UNBIND_MACHINE, [mobj, dev](wxCommandEvent& e) { // show_unbind_dialog UnBindMachineDialog dlg; dlg.update_machine_info(mobj); @@ -747,7 +747,7 @@ void SelectMachinePopup::update_user_devices() } } - op->Bind(EVT_CONNECT_LAN_PRINT, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_CONNECT_LAN_PRINT, [mobj](wxCommandEvent &e) { if (mobj) { if (mobj->is_lan_mode_printer()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); @@ -759,7 +759,7 @@ void SelectMachinePopup::update_user_devices() } }); - op->Bind(EVT_EDIT_PRINT_NAME, [this, mobj](wxCommandEvent &e) { + op->Bind(EVT_EDIT_PRINT_NAME, [mobj](wxCommandEvent &e) { EditDevNameDialog dlg; dlg.set_machine_obj(mobj); dlg.ShowModal(); diff --git a/src/slic3r/GUI/SelectMachinePop.hpp b/src/slic3r/GUI/SelectMachinePop.hpp index 757cb08ed5..e34a23708c 100644 --- a/src/slic3r/GUI/SelectMachinePop.hpp +++ b/src/slic3r/GUI/SelectMachinePop.hpp @@ -181,15 +181,13 @@ private: PinCodePanel* m_panel_direct_connection{nullptr}; wxWindow* m_placeholder_panel{nullptr}; HyperLink* m_hyperlink{nullptr}; // ORCA - Label* m_ping_code_text{nullptr}; - wxStaticBitmap* m_img_ping_code{nullptr}; - wxBoxSizer * m_sizer_body{nullptr}; wxBoxSizer * m_sizer_my_devices{nullptr}; wxBoxSizer * m_sizer_other_devices{nullptr}; +#if defined(__WINDOWS__) wxBoxSizer * m_sizer_search_bar{nullptr}; +#endif wxSearchCtrl* m_search_bar{nullptr}; wxScrolledWindow * m_scrolledWindow{nullptr}; - wxWindow * m_panel_body{nullptr}; wxTimer * m_refresh_timer{nullptr}; std::vector m_user_list_machine_panel; std::vector m_other_list_machine_panel; diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index b6d7abde21..84f4a0b836 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1273,10 +1273,9 @@ void Selection::translate(const Vec3d &displacement, TransformationType transfor const Polygons bed_polys{wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->get_shared_printable_polygon()}; Vec3d tower_origin = m_cache.volumes_data[i].get_volume_position(); Vec3d actual_displacement = displacement; - bool show_read_wipe_tower = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx)->fff_print()->is_step_done(psWipeTower); - float brim_width = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("prime_tower_brim_width"); - - const double margin = show_read_wipe_tower ? WIPE_TOWER_MARGIN : brim_width + 0.5; // 0.5 is the line width of wipe tower + // Both preview volumes carry the brim in their bounding box, and the release + // clamp holds it WIPE_TOWER_MARGIN inside — same margin, so drops don't snap. + const double margin = WIPE_TOWER_MARGIN; actual_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()) diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 7b7c42922f..cafbb360e6 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -3,6 +3,7 @@ #include "I18N.hpp" #include "GUI_App.hpp" +#include "slic3r/Utils/bambu_networking.hpp" #include "MainFrame.hpp" #include "Widgets/RadioBox.hpp" #include @@ -814,13 +815,13 @@ wxBoxSizer* SendMultiMachinePage::create_item_title(wxString title, wxWindow* pa wxBoxSizer* m_sizer_title = new wxBoxSizer(wxHORIZONTAL); auto m_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - m_title->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_title->SetForegroundColour(SEND_DESIGN_GRAY800_COLOR); m_title->SetFont(::Label::Head_13); m_title->Wrap(-1); m_title->SetToolTip(tooltip); auto m_line = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); - m_line->SetBackgroundColour(DESIGN_GRAY400_COLOR); + m_line->SetBackgroundColour(SEND_DESIGN_GRAY400_COLOR); m_sizer_title->Add(m_title, 0, wxALIGN_CENTER | wxALL, 3); m_sizer_title->Add(0, 0, 0, wxLEFT, 9); @@ -843,7 +844,7 @@ wxBoxSizer* SendMultiMachinePage::create_item_checkbox(wxString title, wxWindow* m_sizer_checkbox->Add(0, 0, 0, wxEXPAND | wxLEFT, 8); auto checkbox_title = new wxStaticText(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, 0); - checkbox_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + checkbox_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); checkbox_title->SetFont(::Label::Body_13); auto size = checkbox_title->GetTextExtent(title); @@ -867,12 +868,12 @@ wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxStrin { wxBoxSizer* sizer_input = new wxBoxSizer(wxHORIZONTAL); auto input_title = new wxStaticText(parent, wxID_ANY, str_before); - input_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + input_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); input_title->SetFont(::Label::Body_13); input_title->SetToolTip(tooltip); input_title->Wrap(-1); - auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); + auto input = new ::TextInput(parent, wxEmptyString, wxEmptyString, wxEmptyString, wxDefaultPosition, SEND_DESIGN_INPUT_SIZE, wxTE_PROCESS_ENTER); StateColor input_bg(std::pair(wxColour("#F0F0F1"), StateColor::Disabled), std::pair(*wxWHITE, StateColor::Enabled)); input->SetBackgroundColor(input_bg); input->GetTextCtrl()->SetValue(app_config->get(param)); @@ -880,7 +881,7 @@ wxBoxSizer* SendMultiMachinePage::create_item_input(wxString str_before, wxStrin input->GetTextCtrl()->SetValidator(validator); auto second_title = new wxStaticText(parent, wxID_ANY, str_after, wxDefaultPosition, wxDefaultSize, wxST_ELLIPSIZE_END); - second_title->SetForegroundColour(DESIGN_GRAY900_COLOR); + second_title->SetForegroundColour(SEND_DESIGN_GRAY900_COLOR); second_title->SetFont(::Label::Body_13); second_title->SetToolTip(tooltip); second_title->Wrap(-1); @@ -1337,7 +1338,7 @@ wxPanel* SendMultiMachinePage::create_page() m_tip_text->SetMinSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); m_tip_text->SetMaxSize(wxSize(FromDIP(DEVICE_ITEM_MAX_WIDTH), -1)); m_tip_text->SetLabel(_L("Please select the devices you would like to manage here (up to 6 devices)")); - m_tip_text->SetForegroundColour(DESIGN_GRAY800_COLOR); + m_tip_text->SetForegroundColour(SEND_DESIGN_GRAY800_COLOR); m_tip_text->SetFont(::Label::Head_20); m_tip_text->Wrap(-1); @@ -1468,7 +1469,7 @@ void SendMultiMachinePage::sync_ams_list() item->set_ams_info(wxColour("#CECECE"), "Ext", 0, std::vector()); m_ams_list_sizer->Add(item, 0, wxALL, FromDIP(4)); - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent& e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent& e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index a531e01262..eadd78eb0a 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -15,6 +15,9 @@ #include "SelectMachine.hpp" namespace Slic3r { + +struct PrintParams; + namespace GUI { #define SEND_LEFT_PADDING_LEFT 15 #define SEND_LEFT_PRINTABLE 40 @@ -22,15 +25,15 @@ namespace GUI { #define SEND_LEFT_DEV_STATUS 250 #define SEND_LEFT_TAKS_STATUS 180 -#define DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) -#define DESIGN_GRAY900_COLOR wxColour(38, 46, 48) -#define DESIGN_GRAY800_COLOR wxColour(50, 58, 61) -#define DESIGN_GRAY600_COLOR wxColour(144, 144, 144) -#define DESIGN_GRAY400_COLOR wxColour(166, 169, 170) -#define DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) -#define DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) -#define DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) -#define DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) +#define SEND_DESIGN_SELECTOR_NOMORE_COLOR wxColour(248, 248, 248) +#define SEND_DESIGN_GRAY900_COLOR wxColour(38, 46, 48) +#define SEND_DESIGN_GRAY800_COLOR wxColour(50, 58, 61) +#define SEND_DESIGN_GRAY600_COLOR wxColour(144, 144, 144) +#define SEND_DESIGN_GRAY400_COLOR wxColour(166, 169, 170) +#define SEND_DESIGN_RESOUTION_PREFERENCES wxSize(FromDIP(540), -1) +#define SEND_DESIGN_COMBOBOX_SIZE wxSize(FromDIP(140), -1) +#define SEND_DESIGN_LARGE_COMBOBOX_SIZE wxSize(FromDIP(160), -1) +#define SEND_DESIGN_INPUT_SIZE wxSize(FromDIP(50), -1) @@ -149,7 +152,6 @@ private: ScalableBitmap* print_time{ nullptr }; wxStaticBitmap* weightimg{ nullptr }; ScalableBitmap* print_weight{ nullptr }; - wxBoxSizer* m_thumbnail_sizer{ nullptr }; ThumbnailPanel* m_thumbnail_panel{nullptr}; wxPanel* m_panel_image{ nullptr }; wxBoxSizer* m_image_sizer{ nullptr }; diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 17da4b66a0..c4db0423ab 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -978,18 +978,16 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event) m_send_job->on_check_ip_address_fail([this, token = std::weak_ptr(m_token)](int result) { CallAfter([token, this] { if (token.expired()) { return; } - if (this) { - SendFailedConfirm sfcDlg; - auto res = sfcDlg.ShowModal(); - m_status_bar->cancel(); + SendFailedConfirm sfcDlg; + auto res = sfcDlg.ShowModal(); + m_status_bar->cancel(); - if (res == wxYES) { - wxQueueEvent(m_button_ensure, new wxCommandEvent(wxEVT_BUTTON)); - } else if (res == wxAPPLY) { - wxCommandEvent *evt = new wxCommandEvent(EVT_CLEAR_IPADDRESS); - wxQueueEvent(this, evt); - wxGetApp().show_ip_address_enter_dialog(); - } + if (res == wxYES) { + wxQueueEvent(m_button_ensure, new wxCommandEvent(wxEVT_BUTTON)); + } else if (res == wxAPPLY) { + wxCommandEvent *evt = new wxCommandEvent(EVT_CLEAR_IPADDRESS); + wxQueueEvent(this, evt); + wxGetApp().show_ip_address_enter_dialog(); } }); }); @@ -1393,7 +1391,7 @@ void SendToPrinterDialog::show_status(PrintDialogStatus status, std::vectorShow(); m_animaicon->Stop(); - m_animaicon->Enable(); + m_animaicon->ShowEnabledIcon(); Layout(); Enable_Send_Button(false); diff --git a/src/slic3r/GUI/SendToPrinter.hpp b/src/slic3r/GUI/SendToPrinter.hpp index 87948b28c3..24e483ae33 100644 --- a/src/slic3r/GUI/SendToPrinter.hpp +++ b/src/slic3r/GUI/SendToPrinter.hpp @@ -55,14 +55,12 @@ private: void init_timer(); int m_print_plate_idx; - int m_current_filament_id; int m_print_error_code = 0; int timeout_count = 0; int m_connect_try_times = 0; bool m_is_in_sending_mode{ false }; bool m_is_rename_mode{ false }; bool enable_prepare_mode{ true }; - bool m_need_adaptation_screen{ false }; bool m_export_3mf_cancel{ false }; bool m_is_canceled{ false }; bool m_tcp_try_connect{true}; @@ -78,10 +76,8 @@ private: TextInput* m_rename_input{ nullptr }; wxSimplebook* m_rename_switch_panel{ nullptr }; Plater* m_plater{ nullptr }; - wxStaticBitmap* m_staticbitmap{ nullptr }; ThumbnailPanel* m_thumbnailPanel{ nullptr }; ComboBox* m_comboBox_printer{ nullptr }; - ComboBox* m_comboBox_bed{ nullptr }; Button* m_rename_button{ nullptr }; Button* m_button_refresh{ nullptr }; Button* m_button_ensure{ nullptr }; @@ -99,8 +95,6 @@ private: wxPanel * m_connecting_panel{nullptr}; wxSimplebook* m_simplebook{ nullptr }; wxStaticText* m_statictext_finish{ nullptr }; - wxStaticText* m_stext_sending{ nullptr }; - wxStaticText* m_staticText_bed_title{ nullptr }; wxStaticText* m_statictext_printer_msg{ nullptr }; wxStaticText * m_connecting_printer_msg{nullptr}; wxStaticText* m_stext_printer_title{ nullptr }; @@ -117,7 +111,6 @@ private: wxBoxSizer* sizer_thumbnail; wxBoxSizer* m_sizer_scrollable_region; wxBoxSizer* m_sizer_main; - wxStaticText* m_file_name; PrintDialogStatus m_print_status{ PrintStatusInit }; AnimaIcon * m_animaicon{nullptr}; @@ -136,8 +129,6 @@ private: std::vector m_storage_radioBox; std::string m_selected_storage; bool m_if_has_sdcard; - bool m_waiting_support{ false }; - bool m_waiting_enable{ false }; std::vector m_ability_list; public: diff --git a/src/slic3r/GUI/SkipPartCanvas.cpp b/src/slic3r/GUI/SkipPartCanvas.cpp index 5e01b8140f..7b7db213b1 100644 --- a/src/slic3r/GUI/SkipPartCanvas.cpp +++ b/src/slic3r/GUI/SkipPartCanvas.cpp @@ -287,7 +287,7 @@ void SkipPartCanvas::Render() glDisable(GL_CULL_FACE); glEnable(GL_STENCIL_TEST); - auto draw_shape = [this, border_w](const int stencil, const PartState part_type, const ColorRGB& rgb) { + auto draw_shape = [this](const int stencil, const PartState part_type, const ColorRGB& rgb) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_ALWAYS, stencil, 0xFF); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); @@ -335,7 +335,7 @@ void SkipPartCanvas::Render() // stencil3 => skipped draw_shape(skipped_stencil, psSkipped, ColorRGB{95 / 255.f, 95 / 255.f, 95 / 255.f}); - auto draw_mask = [this, view_rect, border_w, w, h](const int stencil, const PartState part_type, + auto draw_mask = [this, view_rect](const int stencil, const PartState part_type, const ColorRGB& background, const ColorRGB& line, const ColorRGB& bound) { glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); glStencilFunc(GL_EQUAL, stencil, 0xFF); diff --git a/src/slic3r/GUI/SkipPartCanvas.hpp b/src/slic3r/GUI/SkipPartCanvas.hpp index a9c8f1fec7..d70ad3718f 100644 --- a/src/slic3r/GUI/SkipPartCanvas.hpp +++ b/src/slic3r/GUI/SkipPartCanvas.hpp @@ -87,7 +87,6 @@ private: std::unordered_map < uint32_t, std::vector>> parts_triangles_; std::unordered_map < uint32_t, std::vector>> pick_parts_; std::unordered_map parts_state_; - bool gl_inited_{false}; int zoom_percent_{100}; wxPoint offset_{0,0}; wxPoint drag_start_offset_{0,0}; diff --git a/src/slic3r/GUI/SliceInfoPanel.cpp b/src/slic3r/GUI/SliceInfoPanel.cpp index 37a3ba698d..a7e436c0ff 100644 --- a/src/slic3r/GUI/SliceInfoPanel.cpp +++ b/src/slic3r/GUI/SliceInfoPanel.cpp @@ -115,7 +115,7 @@ SliceInfoPopup::SliceInfoPopup(wxWindow *parent, wxBitmap bmp, BBLSliceInfo *inf f_sizer->Add(f_type, 0, wxEXPAND | wxALL, FromDIP(5)); f_sizer->Add(f_used_g, 0, wxEXPAND | wxALL, FromDIP(5)); grid_sizer->Add(f_sizer, 0, wxEXPAND, 0); - f_type->Bind(wxEVT_LEFT_DOWN, [this](auto &e) {}); + f_type->Bind(wxEVT_LEFT_DOWN, [](auto &e) {}); } } topSizer->Add(grid_sizer, 0, wxALL, FromDIP(5)); diff --git a/src/slic3r/GUI/SliceInfoPanel.hpp b/src/slic3r/GUI/SliceInfoPanel.hpp index 8f1710022b..09708d68e4 100644 --- a/src/slic3r/GUI/SliceInfoPanel.hpp +++ b/src/slic3r/GUI/SliceInfoPanel.hpp @@ -28,7 +28,6 @@ public: private: wxScrolledWindow *m_panel; - BBLSliceInfo *m_info { nullptr }; void OnMouse(wxMouseEvent &event); void OnSize(wxSizeEvent &event); diff --git a/src/slic3r/GUI/SlicingProgressNotification.cpp b/src/slic3r/GUI/SlicingProgressNotification.cpp index 6d7c6d7ecd..539da41024 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.cpp +++ b/src/slic3r/GUI/SlicingProgressNotification.cpp @@ -259,8 +259,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas // ImVec2 view_dailytips_text_pos = m_window_pos + ImVec2(text_left_margin_x, m_window_height / 2.0f + m_line_height * 0.2f); // bbl_render_left_sign(imgui, m_window_width, m_window_height, m_window_pos.x + m_window_width, m_window_pos.y); - // render_text(text_pos); - // render_close_button(button_pos, button_size); + // render_progress_text(text_pos); + // render_progress_close_button(button_pos, button_size); // render_show_dailytips(view_dailytips_text_pos); //} @@ -278,8 +278,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas ImVec2 button_pos = child_window_pos + ImVec2(progress_panel_width - button_size.x, progress_panel_height - text_bottom - button_size.y / 2.0f); ImVec2 text_pos = ImVec2(progress_bar_pos.x, progress_bar_pos.y - m_line_height * (1.2f + m_lines_count - 1)); - render_text(text_pos); - render_close_button(button_pos, button_size); + render_progress_text(text_pos); + render_progress_close_button(button_pos, button_size); if (m_sp_state == SlicingProgressState::SP_PROGRESS) { render_bar(progress_bar_pos, progress_bar_size); render_cancel_button(button_pos, button_size); @@ -319,7 +319,7 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas ImGui::PopStyleColor(3); } -void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_text(const ImVec2& pos) +void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_progress_text(const ImVec2& pos) { ImGuiWrapper& imgui = *wxGetApp().imgui(); float scale = imgui.get_font_size() / 15.0f; @@ -462,7 +462,7 @@ void Slic3r::GUI::NotificationManager::SlicingProgressNotification::render_cance } } -void NotificationManager::SlicingProgressNotification::render_close_button(const ImVec2& pos, const ImVec2& size) +void NotificationManager::SlicingProgressNotification::render_progress_close_button(const ImVec2& pos, const ImVec2& size) { if (m_sp_state == SlicingProgressState::SP_CANCELLED || m_sp_state == SlicingProgressState::SP_COMPLETED) { ImGuiWrapper& imgui = *wxGetApp().imgui(); diff --git a/src/slic3r/GUI/SlicingProgressNotification.hpp b/src/slic3r/GUI/SlicingProgressNotification.hpp index 44f2bbd32b..6a7ede1e2e 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.hpp +++ b/src/slic3r/GUI/SlicingProgressNotification.hpp @@ -53,10 +53,10 @@ protected: void init() override; void render(GLCanvas3D& canvas, float initial_y, bool move_from_overlay, float overlay_width, float right_margin) override; /* PARAMS: pos is relative to screen */ - void render_text(const ImVec2& pos); + void render_progress_text(const ImVec2& pos); void render_bar(const ImVec2& pos, const ImVec2& size); void render_cancel_button(const ImVec2& pos, const ImVec2& size); - void render_close_button(const ImVec2& pos, const ImVec2& size); + void render_progress_close_button(const ImVec2& pos, const ImVec2& size); void render_dailytips_panel(const ImVec2& pos, const ImVec2& size); void render_show_dailytips(const ImVec2& pos); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 43522f352b..f7bd41fe84 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -983,7 +983,7 @@ void PrintingTaskPanel::paint(wxPaintEvent&) dc.DrawBitmap(m_thumbnail_bmp_display, wxPoint(0, 0)); } dc.SetFont(Label::Body_12); - + if (m_plate_index >= 0) { wxString plate_id_str = wxString::Format("%d", m_plate_index); dc.DrawText(plate_id_str, wxPoint(4, 4)); @@ -1271,7 +1271,7 @@ void PrintingTaskPanel::set_plate_index(int plate_idx) } void PrintingTaskPanel::market_scoring_show() -{ +{ m_score_staticline->Show(); m_score_subtask_info->Show(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " show market scoring page"; @@ -1402,7 +1402,7 @@ void StatusBasePanel::init_bitmaps() m_bitmap_fan_off = ScalableBitmap(this, "monitor_fan_off", 22); m_bitmap_speed = ScalableBitmap(this, "monitor_speed", 24); m_bitmap_speed_active = ScalableBitmap(this, "monitor_speed_active", 24); - + m_thumbnail_brokenimg = ScalableBitmap(this, "monitor_brokenimg", 120); m_thumbnail_sdcard = ScalableBitmap(this, "monitor_sdcard_thumbnail", 120); //m_bitmap_camera = create_scaled_bitmap("monitor_camera", nullptr, 18); @@ -1530,7 +1530,7 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page() // media_ctrl_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize); // media_ctrl_panel->SetBackgroundColour(*wxBLACK); // wxBoxSizer *bSizer_monitoring = new wxBoxSizer(wxVERTICAL); - m_media_ctrl = new wxMediaCtrl2(this); + m_media_ctrl = new wxMediaCtrl3(this); m_media_ctrl->SetMinSize(wxSize(PAGE_MIN_WIDTH, FromDIP(288))); m_custom_camera_view = WebView::CreateWebView(this, wxEmptyString); @@ -2458,7 +2458,7 @@ StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, co m_project_task_panel->get_pause_resume_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_project_task_panel->get_abort_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); m_project_task_panel->get_market_scoring_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_scoring), NULL, this); - m_project_task_panel->get_market_retry_buttom()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_retry), NULL, this); + m_project_task_panel->get_market_retry_buttom()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_retry), NULL, this); m_project_task_panel->get_clean_button()->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_print_error_clean), NULL, this); m_setting_button->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); @@ -2520,7 +2520,7 @@ StatusPanel::~StatusPanel() m_project_task_panel->get_pause_resume_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_pause_resume), NULL, this); m_project_task_panel->get_abort_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_subtask_abort), NULL, this); m_project_task_panel->get_market_scoring_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_scoring), NULL, this); - m_project_task_panel->get_market_retry_buttom()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_retry), NULL, this); + m_project_task_panel->get_market_retry_buttom()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_market_retry), NULL, this); m_project_task_panel->get_clean_button()->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusPanel::on_print_error_clean), NULL, this); m_setting_button->Disconnect(wxEVT_LEFT_DOWN, wxMouseEventHandler(StatusPanel::on_camera_enter), NULL, this); @@ -2566,7 +2566,7 @@ StatusPanel::~StatusPanel() if (sdcard_hint_dlg != nullptr) delete sdcard_hint_dlg; - if (m_score_data != nullptr) { + if (m_score_data != nullptr) { delete m_score_data; } } @@ -2590,7 +2590,7 @@ void StatusPanel::init_scaled_buttons() m_bpButton_e_down_10->SetCornerRadius(FromDIP(12)); } -void StatusPanel::on_market_scoring(wxCommandEvent &event) { +void StatusPanel::on_market_scoring(wxCommandEvent &event) { if (obj && obj->is_makeworld_subtask() && obj->rating_info && obj->rating_info->request_successful) { // model is mall model and has rating_id BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": on_market_scoring" ; if (m_score_data && m_score_data->rating_id == obj->rating_info->rating_id) { // current score data for model is same as mall model @@ -2599,7 +2599,7 @@ void StatusPanel::on_market_scoring(wxCommandEvent &event) { int ret = m_score_dlg.ShowModal(); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": old data"; - if (ret == wxID_OK) { + if (ret == wxID_OK) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": old data is upload"; m_score_data->rating_id = -1; m_project_task_panel->set_star_count_dirty(false); @@ -2621,11 +2621,11 @@ void StatusPanel::on_market_scoring(wxCommandEvent &event) { std::string comment = obj->rating_info->content; if (!comment.empty()) { m_score_dlg.set_comment(comment); } - + std::vector images_json_array; images_json_array = obj->rating_info->image_url_paths; if (!images_json_array.empty()) m_score_dlg.set_cloud_bitmap(images_json_array); - + int ret = m_score_dlg.ShowModal(); if (ret == wxID_OK) { @@ -3651,14 +3651,14 @@ void StatusPanel::update_basic_print_data(bool def) void StatusPanel::update_model_info() { auto get_subtask_fn = [this](BBLModelTask* subtask) { - CallAfter([this, subtask]() { + CallAfter([this, subtask]() { if (obj && obj->subtask_id_ == subtask->task_id) { obj->set_modeltask(subtask); } }); }; - + if (wxGetApp().getAgent() && obj) { BBLSubTask* curr_task = obj->get_subtask(); if (curr_task) { @@ -3982,7 +3982,7 @@ void StatusPanel::reset_printing_values() m_project_task_panel->update_left_time(NA_STR); m_project_task_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); update_calib_bitmap(); - + task_thumbnail_state = ThumbnailState::PLACE_HOLDER; m_start_loading_thumbnail = false; m_load_sdcard_thumbnail = false; @@ -4037,7 +4037,7 @@ bool StatusPanel::check_axis_z_at_home(MachineObject* obj) } void StatusPanel::on_axis_ctrl_z_up_10(wxCommandEvent &event) -{ +{ if (obj) { obj->command_axis_control("Z", 1.0, -10.0f, 900); if (!check_axis_z_at_home(obj)) @@ -5396,7 +5396,7 @@ void StatusPanel::msw_rescale() m_calibration_btn->Rescale(); m_options_btn->SetMinSize(wxSize(-1, FromDIP(26))); - m_options_btn->Rescale(); + m_options_btn->Rescale(); m_safety_btn->SetMinSize(wxSize(-1, FromDIP(26))); m_safety_btn->Rescale(); @@ -5578,11 +5578,11 @@ ScoreDialog::ScoreDialog(wxWindow *parent, ScoreData *score_data) , m_upload_status_code(StatusCode::CODE_NUMBER) { m_tocken.reset(new int(0)); - + wxBoxSizer *m_main_sizer = get_main_sizer(score_data->local_to_url_image, score_data->comment_text); m_image_url_paths = score_data->image_url_paths; - + this->SetSizer(m_main_sizer); Fit(); @@ -5598,16 +5598,16 @@ void ScoreDialog::on_dpi_changed(const wxRect &suggested_rect) {} void ScoreDialog::OnBitmapClicked(wxMouseEvent &event) { wxStaticBitmap *clickedBitmap = dynamic_cast(event.GetEventObject()); - if (m_image.find(clickedBitmap) != m_image.end()) { + if (m_image.find(clickedBitmap) != m_image.end()) { if (!m_image[clickedBitmap].is_selected) { - for (auto panel : m_image[clickedBitmap].image_broad) { + for (auto panel : m_image[clickedBitmap].image_broad) { panel->Show(); } m_image[clickedBitmap].is_selected = true; m_selected_image_list.insert(clickedBitmap); } else { - for (auto panel : m_image[clickedBitmap].image_broad) { - panel->Hide(); + for (auto panel : m_image[clickedBitmap].image_broad) { + panel->Hide(); } m_image[clickedBitmap].is_selected = false; m_selected_image_list.erase(clickedBitmap); @@ -5624,9 +5624,9 @@ void ScoreDialog::OnBitmapClicked(wxMouseEvent &event) } std::set > ScoreDialog::add_need_upload_imgs() -{ +{ std::set> need_upload_images; - for (auto bitmap : m_image) { + for (auto bitmap : m_image) { if (!bitmap.second.is_uploaded) { wxString &local_image_path = bitmap.second.local_image_url; if (!local_image_path.empty()) { need_upload_images.insert(std::make_pair(bitmap.first, local_image_path)); } @@ -5646,7 +5646,7 @@ std::pair ScoreDialog::create_local_thu cur_image_msg.local_image_url = local_path; cur_image_msg.img_url_paths = ""; cur_image_msg.is_uploaded = false; - + wxStaticBitmap *imageCtrl = new wxStaticBitmap(this, wxID_ANY, wxBitmap(wxImage(local_path, wxBITMAP_TYPE_ANY).Rescale(FromDIP(80), FromDIP(60))), wxDefaultPosition, wxDefaultSize, 0); imageCtrl->Bind(wxEVT_LEFT_DOWN, &ScoreDialog::OnBitmapClicked, this); @@ -5711,7 +5711,7 @@ void ScoreDialog::update_static_bitmap(wxStaticBitmap* static_bitmap, wxImage im } wxBoxSizer *ScoreDialog::create_broad_sizer(wxStaticBitmap *bitmap, ImageMsg& cur_image_msg) -{ +{ // tb: top and bottom lr: left and right auto m_image_tb_broad = new wxBoxSizer(wxVERTICAL); auto line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); @@ -5755,7 +5755,7 @@ void ScoreDialog::init() { fail_image = wxImage(Slic3r::resources_dir() + "/images/oss_picture_load_failed.png", wxBITMAP_TYPE_ANY); } -wxBoxSizer *ScoreDialog::get_score_sizer() { +wxBoxSizer *ScoreDialog::get_score_sizer() { wxBoxSizer *score_sizer = new wxBoxSizer(wxHORIZONTAL); wxStaticText *static_score_text = new wxStaticText(this, wxID_ANY, _L("Rate"), wxDefaultPosition, wxDefaultSize, 0); static_score_text->Wrap(-1); @@ -5878,18 +5878,18 @@ wxBoxSizer *ScoreDialog::get_photo_btn_sizer() { for (int i = 0; i < filePaths.GetCount(); i++) { //It's ugly, but useful bool is_repeat = false; for (auto image : m_image) { - if (filePaths[i] == image.second.local_image_url) { + if (filePaths[i] == image.second.local_image_url) { is_repeat = true; continue; } } if (!is_repeat) { local_path.push_back(std::make_pair(filePaths[i], "")); - if (local_path.size() + m_image.size() > m_photo_nums) { - break; + if (local_path.size() + m_image.size() > m_photo_nums) { + break; } } - + } load_photo(local_path); @@ -6007,7 +6007,7 @@ wxBoxSizer *ScoreDialog::get_button_sizer() } } progress_dialog->Hide(); - if (progress_dialog) { + if (progress_dialog) { delete progress_dialog; progress_dialog = nullptr; } @@ -6141,7 +6141,7 @@ wxBoxSizer *ScoreDialog::get_main_sizer(const std::vectorAdd(m_photo_sizer, 0, wxEXPAND | wxTOP, FromDIP(8)); m_image_sizer = new wxGridSizer(5, FromDIP(5), FromDIP(5)); - if (!images.empty()) { + if (!images.empty()) { load_photo(images); } m_main_sizer->Add(m_image_sizer, 0, wxEXPAND | wxLEFT, FromDIP(24)); @@ -6153,7 +6153,7 @@ wxBoxSizer *ScoreDialog::get_main_sizer(const std::vectorGetValue(); score_data.image_url_paths = m_image_url_paths; for (auto img : m_image) { score_data.local_to_url_image.push_back(std::make_pair(img.second.local_image_url, img.second.img_url_paths)); } - + return score_data; } void ScoreDialog::set_comment(std::string comment) { - if (m_comment_text) { + if (m_comment_text) { m_comment_text->SetValue(wxString::FromUTF8(comment)); } } void ScoreDialog::set_cloud_bitmap(std::vector cloud_bitmaps) -{ +{ m_image_url_paths = cloud_bitmaps; for (std::string &url : cloud_bitmaps) { if (std::string::npos == url.find(m_model_id)) continue; diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index d0c8c99f49..341bb9ab69 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -14,7 +14,6 @@ #include #include #include -#include "wxMediaCtrl2.h" #include "MediaPlayCtrl.h" #include "AMSSetting.hpp" #include "Calibration.hpp" @@ -195,11 +194,11 @@ public: void set_cloud_bitmap(std::vector cloud_bitmaps); protected: - enum StatusCode { - UPLOAD_PROGRESS = 0, - UPLOAD_EXIST_ISSUE, + enum StatusCode { + UPLOAD_PROGRESS = 0, + UPLOAD_EXIST_ISSUE, UPLOAD_IMG_FAILED, - CODE_NUMBER + CODE_NUMBER }; std::shared_ptr m_tocken; @@ -217,7 +216,7 @@ protected: { wxString local_image_url; //local image path std::string img_url_paths; // oss url path - vector image_broad; + vector image_broad; bool is_selected; bool is_uploaded; // load wxBoxSizer * image_tb_broad = nullptr; @@ -252,7 +251,7 @@ protected: std::set> add_need_upload_imgs(); std::pair create_local_thumbnail(wxString &local_path); std::pair create_oss_thumbnail(std::string &oss_path); - + }; class PrintingTaskPanel : public wxPanel @@ -261,7 +260,7 @@ public: PrintingTaskPanel(wxWindow* parent, PrintingTaskType type); ~PrintingTaskPanel(); void create_panel(wxWindow* parent); - + private: MachineObject* m_obj{nullptr}; @@ -353,7 +352,7 @@ public: void set_plate_index(int plate_idx = -1); void market_scoring_show(); void market_scoring_hide(); - + public: ScalableButton* get_abort_button() {return m_button_abort;}; ScalableButton* get_pause_resume_button() {return m_button_pause_resume;}; @@ -443,7 +442,7 @@ protected: wxStaticBitmap* m_camera_switch_button; - wxMediaCtrl2 * m_media_ctrl; + wxMediaCtrl3 * m_media_ctrl; MediaPlayCtrl * m_media_play_ctrl; Label * m_staticText_printing; @@ -567,7 +566,7 @@ protected: virtual void on_bed_temp_kill_focus(wxFocusEvent &event) { event.Skip(); } virtual void on_bed_temp_set_focus(wxFocusEvent &event) { event.Skip(); } virtual void on_nozzle_temp_kill_focus(wxFocusEvent &event) { event.Skip(); } - virtual void on_nozzle_temp_set_focus(wxFocusEvent &event) { event.Skip(); } + virtual void on_nozzle_temp_set_focus(wxFocusEvent &event) { event.Skip(); } virtual void on_nozzle_fan_switch(wxCommandEvent &event) { event.Skip(); } virtual void on_printing_fan_switch(wxCommandEvent &event) { event.Skip(); } virtual void on_axis_ctrl_z_up_10(wxCommandEvent &event) { event.Skip(); } diff --git a/src/slic3r/GUI/StepMeshDialog.cpp b/src/slic3r/GUI/StepMeshDialog.cpp index b1a8e2319a..c6131b7bfa 100644 --- a/src/slic3r/GUI/StepMeshDialog.cpp +++ b/src/slic3r/GUI/StepMeshDialog.cpp @@ -167,7 +167,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line e.Skip(); })); // textctrl bind slider - linear_input->Bind(wxEVT_TEXT, ([this, linear_slider, linear_input](wxCommandEvent& e) { + linear_input->Bind(wxEVT_TEXT, ([linear_slider, linear_input](wxCommandEvent& e) { double slider_value_long; int slider_value; wxString value = linear_input->GetTextCtrl()->GetValue(); @@ -222,7 +222,7 @@ StepMeshDialog::StepMeshDialog(wxWindow* parent, Slic3r::Step& file, double line e.Skip(); })); // textctrl bind slider - angle_input->Bind(wxEVT_TEXT, ([this, angle_slider, angle_input](wxCommandEvent& e) { + angle_input->Bind(wxEVT_TEXT, ([angle_slider, angle_input](wxCommandEvent& e) { double slider_value_long; int slider_value; wxString value = angle_input->GetTextCtrl()->GetValue(); diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.cpp b/src/slic3r/GUI/SyncAmsInfoDialog.cpp index 9515ecc116..7f075dbbfa 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.cpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.cpp @@ -631,7 +631,6 @@ void SyncAmsInfoDialog::updata_ui_when_priner_not_same() { SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Synchronize AMS Filament Information"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_input_info(info) - , m_export_3mf_cancel(false) , m_mapping_popup(AmsMapingPopup(this,true)) , m_mapping_tip_popup(AmsMapingTipPopup(this)) , m_mapping_tutorial_popup(AmsTutorialPopup(this)) @@ -679,7 +678,7 @@ SyncAmsInfoDialog::SyncAmsInfoDialog(wxWindow *parent, SyncInfo &info) : wxBoxSizer *loading_Sizer = new wxBoxSizer(wxHORIZONTAL); m_gif_ctrl = new wxAnimationCtrl(m_loading_page, wxID_ANY, wxNullAnimation, wxDefaultPosition, wxDefaultSize, wxAC_DEFAULT_STYLE); - auto gif_path = Slic3r::var("loading.gif").c_str(); + const wxString gif_path = from_u8(Slic3r::var("loading.gif")); if (m_gif_ctrl->LoadFile(gif_path)){ m_gif_ctrl->SetSize(m_gif_ctrl->GetAnimation().GetSize()); m_gif_ctrl->Play(); @@ -1113,7 +1112,7 @@ void SyncAmsInfoDialog::init_bind() e.Skip(); }); - Bind(EVT_CONNECT_LAN_MODE_PRINT, [this](wxCommandEvent &e) { + Bind(EVT_CONNECT_LAN_MODE_PRINT, [](wxCommandEvent &e) { if (e.GetInt() == 0) { DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -1548,7 +1547,7 @@ bool SyncAmsInfoDialog::is_nozzle_type_match(DevExtderSystem data, wxString &err auto sai_nz_pt = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle); if (target_machine_nozzle_id == DEPUTY_EXTRUDER_ID) { pos = _L(DevPrinterConfigUtil::get_toolhead_display_name(sai_nz_pt, DEPUTY_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)); - } else if ((target_machine_nozzle_id == MAIN_EXTRUDER_ID)) { + } else if (target_machine_nozzle_id == MAIN_EXTRUDER_ID) { pos = _L(DevPrinterConfigUtil::get_toolhead_display_name(sai_nz_pt, MAIN_EXTRUDER_ID, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase)); } @@ -2644,7 +2643,7 @@ void SyncAmsInfoDialog::reset_and_sync_ams_list() item_index++; contronal_index++; - item->Bind(wxEVT_LEFT_UP, [this, item, materials, extruder](wxMouseEvent &e) {}); + item->Bind(wxEVT_LEFT_UP, [materials](wxMouseEvent &e) {}); item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder, item_index_str](wxMouseEvent &e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { diff --git a/src/slic3r/GUI/SyncAmsInfoDialog.hpp b/src/slic3r/GUI/SyncAmsInfoDialog.hpp index 248ca4032c..6f86af6032 100644 --- a/src/slic3r/GUI/SyncAmsInfoDialog.hpp +++ b/src/slic3r/GUI/SyncAmsInfoDialog.hpp @@ -21,15 +21,11 @@ class SyncAmsInfoDialog : public DPIDialog bool m_only_exist_ext_spool_flag{false}; int m_current_filament_id{0}; int m_print_plate_idx{0}; - int m_print_plate_total{0}; int m_timeout_count{0}; int m_print_error_code{0}; bool m_is_in_sending_mode{false}; bool m_ams_mapping_res{false}; bool m_ams_mapping_valid{false}; - bool m_export_3mf_cancel{false}; - bool m_is_canceled{false}; - bool m_is_rename_mode{false}; bool m_check_flag{false}; PrintPageMode m_print_page_mode{PrintPageMode::PrintPageModePrepare}; std::string m_print_error_msg; @@ -307,8 +303,6 @@ private: // wxBoxSizer * m_plate_combox_sizer = nullptr; wxBoxSizer * m_mode_combox_sizer = nullptr; //wxStaticText * m_printer_title = nullptr; - wxStaticText * m_printer_device_name = nullptr; - wxStaticText * m_printer_is_map_title = nullptr; CapsuleButton * m_colormap_btn = nullptr; CapsuleButton * m_override_btn = nullptr; @@ -326,7 +320,6 @@ private: bool m_check_dirty_fialment = true; bool m_expand_more_settings = true; - bool m_image_is_top = false; const int LEFT_THUMBNAIL_SIZE_WIDTH = 100; const int RIGHT_THUMBNAIL_SIZE_WIDTH = 300; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 56378f73db..4569146758 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -7,6 +7,7 @@ #include "libslic3r/FilamentMixer.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/PublishSettings.hpp" #include "libslic3r/GCode/GCodeProcessor.hpp" #include "Search.hpp" @@ -460,7 +461,7 @@ void Tab::create_preset_tab() // tree m_tabctrl = new TabCtrl(panel, wxID_ANY, wxDefaultPosition, wxSize(20 * m_em_unit, -1), wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); - m_tabctrl->Bind(wxEVT_RIGHT_DOWN, [this](auto &e) {}); // disable right select + m_tabctrl->Bind(wxEVT_RIGHT_DOWN, [](auto &e) {}); // disable right select m_tabctrl->SetFont(Label::Body_14); //m_left_sizer->Add(m_tabctrl, 1, wxEXPAND); const int img_sz = int(32 * scale_factor + 0.5f); @@ -1992,6 +1993,20 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) // reload scene to update timelapse wipe tower if (opt_key == "timelapse_type") { + // Smooth timelapse parks the nozzle on the prime tower every layer, so it needs a tower on + // every layer. That is exactly what "No sparse layers" removes, and with both on the tower is + // planned full height and then dropped on emission. Drop "No sparse layers" and tell the user. + if (boost::any_cast(value) == (int) TimelapseType::tlSmooth && m_config->opt_bool("wipe_tower_no_sparse_layers")) { + MessageDialog dlg(wxGetApp().plater(), + _L("Smooth timelapse needs a prime tower on every layer, which is not compatible with \"No sparse layers\". " + "\"No sparse layers\" has been turned off."), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + DynamicPrintConfig new_conf = *m_config; + new_conf.set_key_value("wipe_tower_no_sparse_layers", new ConfigOptionBool(false)); + m_config_manipulation.apply(m_config, &new_conf); + } + bool wipe_tower_enabled = m_config->option("enable_prime_tower")->value; if (!wipe_tower_enabled && boost::any_cast(value) == (int)TimelapseType::tlSmooth) { MessageDialog dlg(wxGetApp().plater(), _L("A prime tower is required for smooth timelapse mode. There may be flaws on the model without prime tower. Do you want to enable the prime tower\?"), @@ -2007,6 +2022,23 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } } + // Mirror of the timelapse_type branch above: enabling "No sparse layers" while smooth timelapse + // is active would leave the tower on every layer anyway, so fall back to traditional timelapse. + if (opt_key == "wipe_tower_no_sparse_layers" && boost::any_cast(value)) { + auto timelapse_type = m_config->option>("timelapse_type"); + if (timelapse_type && timelapse_type->value == TimelapseType::tlSmooth) { + MessageDialog dlg(wxGetApp().plater(), + _L("\"No sparse layers\" is not compatible with smooth timelapse, which needs a prime tower on every layer. " + "Timelapse has been switched to traditional mode."), + _L("Warning"), wxICON_WARNING | wxOK); + dlg.ShowModal(); + DynamicPrintConfig new_conf = *m_config; + new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(TimelapseType::tlTraditional)); + m_config_manipulation.apply(m_config, &new_conf); + wxGetApp().plater()->update(); + } + } + if (opt_key == "print_sequence" && m_config->opt_enum("print_sequence") == PrintSequence::ByObject) { auto printer_structure_opt = m_preset_bundle->printers.get_edited_preset().config.option>("printer_structure"); if (printer_structure_opt && printer_structure_opt->value == PrinterStructure::psI3) { @@ -2175,21 +2207,25 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) //Orca: sync filament num if it's a multi tool printer if (opt_key == "extruders_count" && !m_config->opt_bool("single_extruder_multi_material")){ - auto num_extruder = boost::any_cast(value); - int old_filament_size = wxGetApp().preset_bundle->filament_presets.size(); - std::vector new_colors; - for (int i = old_filament_size; i < num_extruder; ++i) { - wxColour new_col = Plater::get_next_color_for_filament(); - std::string new_color = new_col.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(); - new_colors.push_back(new_color); + const size_t num_extruder = boost::any_cast(value); + auto *bundle = wxGetApp().preset_bundle; + Sidebar &sidebar = wxGetApp().plater()->sidebar(); + // A tool changer feeds filament N from nozzle N, so the extruder count sizes the physical + // run only; mixed slots are virtual and keep the tail. Go one slot at a time through the + // sidebar's own +/- calls: they insert ahead of the mixed tail and renumber filament ids, + // painted facets, custom g-code and mixed components, which a bulk resize clamps away. + // Both also refresh the print tab and export the selections, so nothing to do afterwards. + size_t physical = bundle->num_physical_filaments(); + while (physical != num_extruder) { + if (physical < num_extruder) + sidebar.add_custom_filament(Plater::get_next_color_for_filament()); + else + sidebar.delete_filament(physical - 1); // physical > num_extruder >= 1 + const size_t updated = bundle->num_physical_filaments(); + if (updated == physical) + break; // the call declined, e.g. the total slot limit - do not spin + physical = updated; } - // Mixed-color slots are virtual filaments at the tail of the list with no nozzle of their - // own, so they are carried on top of the new extruder count instead of being truncated. - const size_t total_filaments = num_extruder + wxGetApp().preset_bundle->num_mixed_filaments(); - wxGetApp().preset_bundle->set_num_filaments(total_filaments, new_colors); - wxGetApp().plater()->on_filament_count_change(total_filaments); - wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); - wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); } //Orca: disable purge_in_prime_tower if single_extruder_multi_material is disabled @@ -2665,6 +2701,8 @@ void TabPrint::build() optgroup->append_single_option_line("role_based_wipe_speed","quality_settings_seam#role-based-wipe-speed"); optgroup->append_single_option_line("wipe_speed", "quality_settings_seam#wipe-speed"); optgroup->append_single_option_line("wipe_on_loops","quality_settings_seam#wipe-on-loop-inward-movement"); + optgroup->append_single_option_line("wipe_inward", "quality_settings_seam#wipe-inward"); + optgroup->append_single_option_line("wipe_inward_distance", "quality_settings_seam#wipe-inward"); optgroup->append_single_option_line("wipe_before_external_loop","quality_settings_seam#wipe-before-external"); @@ -2757,6 +2795,7 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Overhangs"), L"param_overhang"); optgroup->append_single_option_line("detect_overhang_wall", "quality_settings_overhangs#detect-overhang-wall"); + optgroup->append_single_option_line("unsupported_wall_last", "quality_settings_overhangs#unsupported-wall-last"); optgroup->append_single_option_line("make_overhang_printable", "quality_settings_overhangs#make-overhang-printable"); optgroup->append_single_option_line("make_overhang_printable_angle", "quality_settings_overhangs#maximum-angle"); optgroup->append_single_option_line("make_overhang_printable_hole_size", "quality_settings_overhangs#hole-area"); @@ -3020,6 +3059,8 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Advanced"), L"advanced"); optgroup->append_single_option_line("interlocking_beam", "multimaterial_settings_advanced#interlocking-beam"); optgroup->append_single_option_line("toolchange_ordering", "multimaterial_settings_advanced#toolchange-ordering"); + optgroup->append_single_option_line("toolchange_cyclic_order", "multimaterial_settings_advanced#toolchange-order"); + optgroup->append_single_option_line("toolchange_cyclic_first_layer", "multimaterial_settings_advanced#toolchange-order"); optgroup->append_single_option_line("interface_shells", "multimaterial_settings_advanced#interface-shells"); optgroup->append_single_option_line("mmu_segmented_region_max_width", "multimaterial_settings_advanced#maximum-width-of-segmented-region"); optgroup->append_single_option_line("mmu_segmented_region_interlocking_depth", "multimaterial_settings_advanced#interlocking-depth-of-segmented-region"); @@ -5025,28 +5066,12 @@ void TabPrinter::build_fff() auto registered_printer_agents = NetworkAgentFactory::get_registered_printer_agents(); if (!registered_printer_agents.empty()) { - ConfigOptionDef def; - def.type = coString; - def.gui_type = ConfigOptionDef::GUIType::printer_agent_select; - def.width = 3 * Field::def_width_wider() / 2; - def.label = L("Printer Agent"); - def.tooltip = L("Select the network agent implementation for printer communication. " + option = optgroup->get_option("printer_agent"); + option.opt.gui_type = ConfigOptionDef::GUIType::printer_agent_select; + option.opt.width = 3 * Field::def_width_wider() / 2; + option.opt.tooltip = L("Select the network agent implementation for printer communication. " "Available agents are registered at startup."); - def.mode = comAdvanced; - - // Create the field without get_option() so it is not registered in m_opt_map. - // ConfigOptionsGroup handles printer_agent before the generic mapped write path. - Line agent_line = optgroup->create_single_option_line(Option(def, "printer_agent")); - optgroup->append_line(agent_line); - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - choice->set_value(m_config->opt_string("printer_agent"), false); - } - - // Register by hand so the UnsavedChanges dialog can render a row for it. - wxGetApp().sidebar().get_searcher().add_key("printer_agent", m_type, optgroup->title, - optgroup->config_category()); + optgroup->append_single_option_line(option); } } @@ -5117,6 +5142,7 @@ void TabPrinter::build_fff() optgroup = page->new_optgroup(L("Extruder Clearance"), "param_extruder_clearance"); optgroup->append_single_option_line("extruder_clearance_radius", "printer_basic_information_extruder_clearance#radius"); + optgroup->append_single_option_line("extruder_clearance_dist_to_rod", "printer_basic_information_extruder_clearance#distance-to-rod"); optgroup->append_single_option_line("extruder_clearance_height_to_rod", "printer_basic_information_extruder_clearance#height-to-rod"); optgroup->append_single_option_line("extruder_clearance_height_to_lid", "printer_basic_information_extruder_clearance#height-to-lid"); @@ -5127,7 +5153,7 @@ void TabPrinter::build_fff() optgroup->append_single_option_line("adaptive_bed_mesh_margin", "printer_basic_information_adaptive_bed_mesh#mesh-margin"); optgroup = page->new_optgroup(L("Accessory"), "param_accessory"); - optgroup->append_single_option_line("nozzle_type", "printer_basic_information_accessory#nozzle-type"); + optgroup->append_single_option_line("nozzle_type", "printer_basic_information_accessory#nozzle-type", 0); optgroup->append_single_option_line("nozzle_hrc", "printer_basic_information_accessory#nozzle-hrc"); optgroup->append_single_option_line("auxiliary_fan", "printer_basic_information_accessory#auxiliary-part-cooling-fan"); optgroup->append_single_option_line("fan_direction"); @@ -5696,26 +5722,16 @@ if (is_marlin_flavor) optgroup->append_single_option_line("extruder_offset", "printer_extruder_basic_information#extruder-offset-position", extruder_idx); //BBS: don't show retract related config menu in machine page + // These optgroups are built from publishable_printer_retraction/z_hop_options() so the + // published-3MF printer allowlist (their union in libslic3r/PublishSettings.hpp) can + // never drift from what the machine page actually shows. optgroup = page->new_optgroup(L("Retraction"), L"param_retraction"); - optgroup->append_single_option_line("retraction_length", "printer_extruder_retraction#length", extruder_idx); - optgroup->append_single_option_line("retract_restart_extra", "printer_extruder_retraction#extra-length-on-restart", extruder_idx); - optgroup->append_single_option_line("retraction_speed", "printer_extruder_retraction#retraction-speed", extruder_idx); - optgroup->append_single_option_line("deretraction_speed", "printer_extruder_retraction#deretraction-speed", extruder_idx); - optgroup->append_single_option_line("retraction_minimum_travel", "printer_extruder_retraction#travel-distance-threshold", extruder_idx); - optgroup->append_single_option_line("retract_when_changing_layer", "printer_extruder_retraction#retract-on-layer-change", extruder_idx); - optgroup->append_single_option_line("wipe", "printer_extruder_retraction#wipe-while-retracting", extruder_idx); - optgroup->append_single_option_line("wipe_distance", "printer_extruder_retraction#wipe-distance", extruder_idx); - optgroup->append_single_option_line("retract_before_wipe", "printer_extruder_retraction#retract-amount-before-wipe", extruder_idx); - // Orca - optgroup->append_single_option_line("retract_after_wipe", "printer_extruder_retraction#retract-amount-after-wipe", extruder_idx); + for (const PublishablePrinterOption& opt : publishable_printer_retraction_options()) + optgroup->append_single_option_line(opt.key, opt.icon, extruder_idx); optgroup = page->new_optgroup(L("Z-Hop"), L"param_extruder_lift_enforcement"); - optgroup->append_single_option_line("retract_lift_enforce", "printer_extruder_z_hop#on-surfaces", extruder_idx); - optgroup->append_single_option_line("z_hop_types", "printer_extruder_z_hop#z-hop-type", extruder_idx); - optgroup->append_single_option_line("z_hop", "printer_extruder_z_hop#z-hop-height", extruder_idx); - optgroup->append_single_option_line("travel_slope", "printer_extruder_z_hop#traveling-angle", extruder_idx); - optgroup->append_single_option_line("retract_lift_above", "printer_extruder_z_hop#only-lift-z-above", extruder_idx); - optgroup->append_single_option_line("retract_lift_below", "printer_extruder_z_hop#only-lift-z-below", extruder_idx); + for (const PublishablePrinterOption& opt : publishable_printer_z_hop_options()) + optgroup->append_single_option_line(opt.key, opt.icon, extruder_idx); optgroup = page->new_optgroup(L("Retraction when switching material"), L"param_retraction_material_change"); optgroup->append_single_option_line("retract_length_toolchange", "printer_extruder_retraction#retraction-when-switching-materials", extruder_idx); @@ -5918,15 +5934,6 @@ void TabPrinter::reload_config() if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); - // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - { - const std::string selected_agent = m_config->opt_string("printer_agent"); - choice->set_value(selected_agent, false); - } - } } void TabPrinter::activate_selected_page(std::function throw_if_canceled) @@ -5938,15 +5945,6 @@ void TabPrinter::activate_selected_page(std::function throw_if_canceled) if (m_active_page && m_active_page->title() == "Multimaterial") m_active_page->set_value("extruders_count", int(m_extruders_count)); - // m_opt_map-driven reload does not cover printer_agent, so sync this custom field explicitly. - if (Field* agent_field = get_field("printer_agent")) - { - if (auto* choice = dynamic_cast(agent_field); choice && choice->getWindow()) - { - const std::string selected_agent = m_config->opt_string("printer_agent"); - choice->set_value(selected_agent, false); - } - } } void TabPrinter::clear_pages() @@ -6072,7 +6070,7 @@ void TabPrinter::toggle_options() auto nozzle_volumes = m_preset_bundle->project_config.option("nozzle_volume_type"); auto extruders = m_config->option("extruder_type"); auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes](int extruder_id, int stride = 1) { + [this, &extruders](int extruder_id, int stride = 1) { return m_config->get_index_for_extruder(extruder_id + 1, "printer_extruder_id", ExtruderType(extruders->values[extruder_id]), get_actual_nozzle_volume_type(extruder_id), "printer_extruder_variant", stride); }; @@ -7541,7 +7539,7 @@ void Tab::delete_preset() for (auto &preset2 : *m_presets) if (preset2.inherits() == current_preset.name) { ++count; - presets += "\n - " + preset2.name; + presets += "\n - " + from_u8(preset2.name); } if (count > 0) { msg = _L("Presets inherited by other presets cannot be deleted!"); @@ -7724,18 +7722,18 @@ wxSizer* Tab::compatible_widget_create(wxWindow* parent, PresetDependencies &dep this->update_changed_ui(); }; - deps.checkbox_title->Bind(wxEVT_LEFT_DOWN,([this, &deps, on_toggle](wxMouseEvent& e) { + deps.checkbox_title->Bind(wxEVT_LEFT_DOWN,([&deps, on_toggle](wxMouseEvent& e) { if (e.GetEventType() == wxEVT_LEFT_DCLICK) return; on_toggle(!deps.checkbox->GetValue()); e.Skip(); })); - deps.checkbox_title->Bind(wxEVT_LEFT_DCLICK,([this, &deps, on_toggle](wxMouseEvent& e) { + deps.checkbox_title->Bind(wxEVT_LEFT_DCLICK,([&deps, on_toggle](wxMouseEvent& e) { on_toggle(!deps.checkbox->GetValue()); e.Skip(); })); - deps.checkbox->Bind(wxEVT_TOGGLEBUTTON, ([this, on_toggle](wxCommandEvent& e) { + deps.checkbox->Bind(wxEVT_TOGGLEBUTTON, ([on_toggle](wxCommandEvent& e) { on_toggle(e.IsChecked()); e.Skip(); }), deps.checkbox->GetId()); @@ -8317,7 +8315,7 @@ void Tab::switch_excluder(int extruder_id, bool reload) return; } auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, int stride = 1) { + [this, &extruders, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, int stride = 1) { return m_config->get_index_for_extruder(extruder_id + 1, variant_keys.first, ExtruderType(extruders->values[extruder_id]), get_actual_nozzle_volume_type(extruder_id), variant_keys.second, stride); }; @@ -8374,7 +8372,7 @@ void Tab::sync_excluder() auto nozzle_volumes = m_preset_bundle->project_config.option("nozzle_volume_type"); auto extruders = printer_preset.config.option("extruder_type"); auto get_index_for_extruder = - [this, &extruders, &nozzle_volumes, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, NozzleVolumeType nozzle_type) { + [this, &extruders, variant_keys = extruder_variant_keys[m_type >= Preset::TYPE_COUNT ? Preset::TYPE_PRINT : m_type]](int extruder_id, NozzleVolumeType nozzle_type) { return m_config->get_index_for_extruder(extruder_id + 1, variant_keys.first, ExtruderType(extruders->values[extruder_id]), nozzle_type, variant_keys.second); }; @@ -8415,7 +8413,7 @@ void Tab::sync_excluder() } } if (config_to_apply.empty()) { - MessageDialog md(wxGetApp().plater(), _L("No modifications need to be copied."), _L("Copy paramters"), wxICON_INFORMATION | wxOK); + MessageDialog md(wxGetApp().plater(), _L("No modifications need to be copied."), _L("Copy parameters"), wxICON_INFORMATION | wxOK); md.ShowModal(); return; } @@ -8423,7 +8421,7 @@ void Tab::sync_excluder() std::string pt = m_preset_bundle->printers.get_edited_preset().get_printer_type(m_preset_bundle); std::string active_nozzle_name = DevPrinterConfigUtil::get_toolhead_display_name(pt, active_index, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase); std::string other_nozzle_name = DevPrinterConfigUtil::get_toolhead_display_name(pt, 1 - active_index, ToolHeadComponent::Nozzle, ToolHeadNameCase::LowerCase); - wxString title = wxString::Format(_L("Modify paramters of %s"), _L(active_nozzle_name)); + wxString title = wxString::Format(_L("Modify parameters of %s"), _L(active_nozzle_name)); wxString header = wxString::Format(_L("Do you want to modify the following parameters of the %s to that of the %s?"), _L(active_nozzle_name), _L(other_nozzle_name)); UnsavedChangesDialog dlg(title, header, &config_origin, from_index, dest_index, active_index == 0, active_nozzle); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index c6041ba1ea..30a06b4eb5 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -30,7 +30,6 @@ #include //#include "BedShapeDialog.hpp" -#include "Event.hpp" #include "wxExtensions.hpp" #include "ConfigManipulation.hpp" #include "OptionsGroup.hpp" @@ -38,7 +37,6 @@ //BBS: GUI refactor #include "Notebook.hpp" #include "ParamsPanel.hpp" -#include "Widgets/RoundedRectangle.hpp" #include "Widgets/TextInput.hpp" #include "Widgets/CheckBox.hpp" // ORCA @@ -472,6 +470,7 @@ protected: std::string m_last_sparse_infill_rotate_template_value; ConfigManipulation get_config_manipulation(); friend class EditGCodeDialog; + friend class PublishSettingsDialog; }; class TabPrint : public Tab @@ -626,13 +625,10 @@ private: bool m_rebuild_kinematics_page = false; void update_input_shaper_menu(GCodeFlavor flavor); - ogStaticText* m_fff_print_host_upload_description_line {nullptr}; - ogStaticText* m_sla_print_host_upload_description_line {nullptr}; std::vector m_pages_fff; std::vector m_pages_sla; - wxBoxSizer* m_presets_sizer {nullptr}; public: ScalableButton* m_reset_to_filament_color = nullptr; diff --git a/src/slic3r/GUI/Tabbook.hpp b/src/slic3r/GUI/Tabbook.hpp index 87fd215327..b1301a5c23 100644 --- a/src/slic3r/GUI/Tabbook.hpp +++ b/src/slic3r/GUI/Tabbook.hpp @@ -36,7 +36,6 @@ public: TabButton* pageButton; private: - wxWindow* m_parent; wxFlexGridSizer* m_buttons_sizer; wxBoxSizer* m_sizer; ScalableBitmap m_arrow_img; @@ -400,8 +399,6 @@ private: unsigned m_showTimeout, m_hideTimeout; - TabButtonsListCtrl *m_ctrl{nullptr}; - }; //#endif // _WIN32 #endif // slic3r_Tabbook_hpp_ diff --git a/src/slic3r/GUI/TextureImportDialog.cpp b/src/slic3r/GUI/TextureImportDialog.cpp index 1a24799a15..2e5c1145e1 100644 --- a/src/slic3r/GUI/TextureImportDialog.cpp +++ b/src/slic3r/GUI/TextureImportDialog.cpp @@ -134,7 +134,9 @@ public: } private: +#if defined(__WXMSW__) || defined(__APPLE__) int m_suspended_count = 0; +#endif }; static bool needs_filament_swatch_border(const wxColour& colour) @@ -519,7 +521,6 @@ public: , m_entries(entries) , m_colors_rgba(colors_rgba) , m_names(names) - , m_existing_count(existing_count) , m_dialog_anchor(dialog_anchor) , m_on_select(std::move(on_select)) , m_on_add_filament(std::move(on_add_filament)) @@ -877,7 +878,6 @@ private: std::vector m_entries; std::vector> m_colors_rgba; std::vector m_names; - size_t m_existing_count = 0; wxWindow* m_dialog_anchor = nullptr; std::function m_on_select; std::function m_on_add_filament; diff --git a/src/slic3r/GUI/ThermalPreconditioningDialog.hpp b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp index d13a1d19f5..57cda90b18 100644 --- a/src/slic3r/GUI/ThermalPreconditioningDialog.hpp +++ b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp @@ -31,7 +31,6 @@ private: wxStaticText *m_remaining_time_label; wxStaticText *m_explanation_label; wxButton *m_ok_button; - wxStaticBitmap *m_title_bitmap; DECLARE_EVENT_TABLE() }; diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index b0a8f71930..7cbb00b5d8 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -1,10 +1,13 @@ #include "TroubleshootDialog.hpp" #include "I18N.hpp" +#include "BuildCommit.hpp" #include "GUI.hpp" #include "GUI_App.hpp" #include "MainFrame.hpp" +#include +#include #include #include #include "wx/clipbrd.h" @@ -71,7 +74,7 @@ wxFlexGridSizer* TroubleshootDialog::create_item_loaded_profiles() auto gen_stats = GetProfilesOverview(); gen_stats = ""; // clear mem. not needed after generating m_..._act, m_..._usr variables - auto add_sizer = [this, g_sizer, create_label](PresetCollection* col, wxString label, int in_use, int user) { + auto add_sizer = [g_sizer, create_label](PresetCollection* col, wxString label, int in_use, int user) { int sys = 0; for (auto it = col->begin(); it != col->end(); it++) { if (it->is_system) @@ -137,9 +140,9 @@ TroubleshootDialog::TroubleshootDialog() version->SetFont(version_font); version->SetForegroundColour(StateColor::darkModeColorFor(wxColour("#363636"))); - auto build = new Button(this, wxString(GIT_COMMIT_HASH)); + auto build = new Button(this, wxString(build_commit_label)); build->SetStyle(ButtonStyle::Regular, ButtonType::Window); - auto hash_url = "https://github.com/OrcaSlicer/OrcaSlicer/commit/" + wxString(GIT_COMMIT_HASH); + auto hash_url = "https://github.com/OrcaSlicer/OrcaSlicer/commit/" + wxString(build_commit_hash); build->SetToolTip(hash_url); build->Bind(wxEVT_BUTTON, [hash_url](wxCommandEvent &e) { wxLaunchDefaultBrowser(hash_url); @@ -178,7 +181,7 @@ TroubleshootDialog::TroubleshootDialog() return wxTheClipboard->SetData(new wxTextDataObject(GetSysInfoAll())); }); - sys_less_btn->Bind(wxEVT_BUTTON, [this, sys_panel, sys_less_btn, sys_info_lines, sys_copy_btn](wxCommandEvent &e) { + sys_less_btn->Bind(wxEVT_BUTTON, [this, sys_panel, sys_less_btn, sys_info_lines](wxCommandEvent &e) { m_sys_panel_mode = !m_sys_panel_mode; sys_panel->SetText(sys_info_lines(m_sys_panel_mode)); sys_less_btn->SetLabel(m_sys_panel_mode ? _L("Hide") : _L("Show")); @@ -226,7 +229,7 @@ TroubleshootDialog::TroubleshootDialog() }; auto info_desc_1 = create_info_line(_L("We need information for diagnosing source of the issue. Check wiki page for detailed guide.")); - auto info_desc_2 = create_info_line(_L("Pack button collects project file and logs of current session onto a zip file.")); + auto info_desc_2 = create_info_line(_L("Pack button collects project file and logs of current session onto a ZIP archive.")); auto info_desc_3 = create_info_line(_L("Any additional visual examples like images or screen recordings might be helpful while reporting the issue.")); wxBoxSizer *info_desc_sizer = new wxBoxSizer(wxVERTICAL); info_desc_sizer->Add(info_desc_1, 0, wxEXPAND | wxBOTTOM, FromDIP(8)); @@ -292,7 +295,7 @@ TroubleshootDialog::TroubleshootDialog() auto log_level_szr = create_label(_L("Log level"), ""); log_level_szr->Add(create_item_log_level_combo(), 0, wxALIGN_CENTER_VERTICAL); - auto log_pack_szr = create_label(_L("Stored logs"), _L("Packs all stored logs onto a zip file.")); + auto log_pack_szr = create_label(_L("Stored logs"), _L("Packs all stored logs onto a ZIP archive.")); auto log_pack_btn = create_btn(_L("Pack") + "...", ""); log_pack_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { auto data_dir = boost::filesystem::path(Slic3r::data_dir()); @@ -371,7 +374,7 @@ wxString TroubleshootDialog::GetSysInfoAll() { wxString info; info += "Version : " + wxString(SoftFever_VERSION) + "\n" - + "Build : " + wxString(GIT_COMMIT_HASH) + "\n" + + "Build : " + wxString(build_commit_label) + "\n" + "Package : " + GetPackageType() + "\n" + "Platform : " + GetOSinfo() + "\n" + "Processor : " + GetCPUinfo() + "\n" diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 5c69466cfa..39e611b341 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -12,6 +12,7 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/Color.hpp" #include "format.hpp" +#include "ConfigValueFormatter.hpp" #include "GUI_App.hpp" #include "Plater.hpp" #include "Tab.hpp" @@ -22,7 +23,6 @@ #include "MsgDialog.hpp" #include "PresetComboBoxes.hpp" -#include "Widgets/RoundedRectangle.hpp" #include "Widgets/CheckBox.hpp" #include "Widgets/DialogButtons.hpp" #include "Widgets/HyperLink.hpp" @@ -571,14 +571,6 @@ void DiffModel::Clear() } -static std::string get_pure_opt_key(std::string opt_key) -{ - const int pos = opt_key.find("#"); - if (pos > 0) - boost::erase_tail(opt_key, opt_key.size() - pos); - return opt_key; -} - // ---------------------------------------------------------------------------- // DiffViewCtrl // ---------------------------------------------------------------------------- @@ -1212,32 +1204,6 @@ bool UnsavedChangesDialog::save(PresetCollection* dependent_presets, bool show_s return true; } -wxString get_string_from_enum(const std::string& opt_key, const DynamicPrintConfig& config, bool is_infill = false, int idx = -1) -{ - const ConfigOptionDef& def = config.def()->options.at(opt_key); - const std::vector& names = def.enum_labels;//ConfigOptionEnum::get_enum_names(); - int val = 0; - - if (idx >= 0) - val = dynamic_cast(config.option(opt_key))->get_at(idx); - else - val = config.option(opt_key)->getInt(); - - // Each infill doesn't use all list of infill declared in PrintConfig.hpp. - // So we should "convert" val to the correct one - if (is_infill) { - for (auto key_val : *def.enum_keys_map) - if (int(key_val.second) == val) { - auto it = std::find(def.enum_values.begin(), def.enum_values.end(), key_val.first); - if (it == def.enum_values.end()) - return ""; - return from_u8(_utf8(names[it - def.enum_values.begin()])); - } - return _L("Undefined"); - } - return from_u8(_utf8(names[val])); -} - // BBS #if 0 static size_t get_id_from_opt_key(std::string opt_key) @@ -1251,194 +1217,6 @@ static size_t get_id_from_opt_key(std::string opt_key) } #endif -static wxString get_full_label(std::string opt_key, const DynamicPrintConfig& config) -{ - opt_key = get_pure_opt_key(opt_key); - auto option = config.option(opt_key); - - if (!option || option->is_nil()) - return _L("N/A"); - - const ConfigOptionDef* opt = config.def()->get(opt_key); - return opt->full_label.empty() ? opt->label : opt->full_label; -} - -static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& config) -{ - int orig_opt_idx = -1; - int opt_idx = -1; - int pos = opt_key.find("#"); - std::string temp_str = opt_key; - if (pos > 0) { - boost::erase_head(temp_str, pos + 1); - orig_opt_idx = static_cast(atoi(temp_str.c_str())); - } - opt_idx = orig_opt_idx >= 0 ? orig_opt_idx : 0; - opt_key = get_pure_opt_key(opt_key); - auto option = config.option(opt_key); - if (!option) { - return _L("N/A"); - } - auto opt_vector = dynamic_cast(option); - - if (option->is_scalar() && config.option(opt_key)->is_nil() || - option->is_vector() && opt_vector && opt_idx >= 0 && opt_idx < opt_vector->size() && opt_vector->is_nil(opt_idx)) - return _L("N/A"); - - wxString out; - - const ConfigOptionDef* opt = config.def()->get(opt_key); - bool is_nullable = opt->nullable; - - switch (opt->type) { - case coInt: - return from_u8((boost::format("%1%") % config.opt_int(opt_key)).str()); - case coInts: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); - } - else { - auto values = config.opt(opt_key); - if (orig_opt_idx >= 0 && orig_opt_idx < values->size()) { - return from_u8((boost::format("%1%") % values->get_at(opt_idx)).str()); - } - else { - std::string value_str; - for (int i = 0; i < values->size(); i++) { - value_str += std::to_string(values->get_at(i)); - if (i != values->size() - 1) { - value_str += ","; - } - } - return from_u8(value_str); - } - } - return _L("Undefined"); - } - case coBool: - return config.opt_bool(opt_key) ? "true" : "false"; - case coBools: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return values->get_at(opt_idx) ? "true" : "false"; - } - else { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return values->get_at(opt_idx) ? "true" : "false"; - } - return _L("Undefined"); - } - case coPercent: - return from_u8((boost::format("%1%%%") % int(config.optptr(opt_key)->getFloat())).str()); - case coPercents: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); - } - else { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return from_u8((boost::format("%1%%%") % values->get_at(opt_idx)).str()); - } - return _L("Undefined"); - } - case coFloat: - return double_to_string(config.opt_float(opt_key)); - case coFloats: { - if (is_nullable) { - auto values = config.opt(opt_key); - if (opt_idx < values->size()) - return double_to_string(values->get_at(opt_idx)); - } - else { - auto values = config.opt(opt_key); - if (values && opt_idx < values->size()) - return double_to_string(values->get_at(opt_idx)); - } - return _L("Undefined"); - } - case coString: - return from_u8(config.opt_string(opt_key)); - case coStrings: { - const ConfigOptionStrings* strings = config.opt(opt_key); - if (strings) { - if (opt_key == "compatible_printers" || opt_key == "compatible_prints") { - if (strings->empty()) - return _L("All"); - for (size_t id = 0; id < strings->size(); id++) - out += from_u8(strings->get_at(id)) + "\n"; - out.RemoveLast(1); - return out; - } - if (!strings->empty() && opt_idx < strings->values.size()) - return from_u8(strings->get_at(opt_idx)); - } - break; - } - case coFloatOrPercent: { - const ConfigOptionFloatOrPercent* opt = config.opt(opt_key); - if (opt) - out = double_to_string(opt->value) + (opt->percent ? "%" : ""); - return out; - } - case coEnum: { - return get_string_from_enum(opt_key, config, - opt_key == "top_surface_pattern" || - opt_key == "bottom_surface_pattern" || - opt_key == "internal_solid_infill_pattern" || - opt_key == "sparse_infill_pattern" || - opt_key == "ironing_pattern" || - opt_key == "support_ironing_pattern" || - opt_key == "support_pattern" || - opt_key == "support_interface_pattern") - ; - } - case coEnums: { - return get_string_from_enum(opt_key, config, - opt_key == "top_surface_pattern" || - opt_key == "bottom_surface_pattern" || - opt_key == "internal_solid_infill_pattern" || - opt_key == "sparse_infill_pattern" || - opt_key == "ironing_pattern" || - opt_key == "support_ironing_pattern" || - opt_key == "support_pattern" || - opt_key == "support_interface_pattern" - , opt_idx); - } - case coPoint: { - Vec2d val = config.opt(opt_key)->value; - return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); - } - case coPoints: { - //BBS: add bed_exclude_area - if (opt_key == "printable_area" || opt_key == "thumbnails") { - ConfigOptionPoints points = *config.option(opt_key); - //BuildVolume build_volume = {points.values, 0.}; - return get_thumbnails_string(points.values); - } - else if (opt_key == "bed_exclude_area") { - return get_thumbnails_string(config.option(opt_key)->values); - } - else if (opt_key == "head_wrap_detect_zone") { - return get_thumbnails_string(config.option(opt_key)->values); - } - else if (opt_key == "wrapping_exclude_area") { - return get_thumbnails_string(config.option(opt_key)->values); - } - Vec2d val = config.opt(opt_key)->get_at(opt_idx); - return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str()); - } - default: - break; - } - return out; -} - void UnsavedChangesDialog::update(Preset::Type type, PresetCollection* dependent_presets, const std::string& new_selected_preset, const wxString& header) { PresetCollection* presets = dependent_presets; @@ -1712,7 +1490,15 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, DynamicConfig * config for (const std::string &opt_key : config->keys()) { int variant_index = -2; - const Search::Option &option = searcher.get_option(opt_key, type, variant_index); + Search::Option option = searcher.get_option(opt_key, type, variant_index); + if (variant_index == -2) { + // Orca: Every transferred setting must remain visible even when it is absent from the search index. + const ConfigOptionDef* def = print_config_def.get(opt_key); + const std::string label = def ? (def->full_label.empty() ? def->label : def->full_label) : std::string(); + option.label_local = (label.empty() ? from_u8(opt_key) : _L(label)).ToStdWstring(); + option.category_local = (def && !def->category.empty() ? + Tab::translate_category(from_u8(def->category), type) : _L("Others")).ToStdWstring(); + } auto category = option.category_local; auto opt = dynamic_cast(config->option(opt_key)); std::string value_from = opt->vserialize()[from]; @@ -1740,6 +1526,8 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres else presets_list.emplace_back(presets_); + const bool multiple_extruders = wxGetApp().preset_bundle->get_printer_extruder_count() > 1; + // Display a dialog showing the dirty options in a human readable form. for (PresetCollection* presets : presets_list) { @@ -1775,29 +1563,41 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres auto variant_key = Preset::get_iot_type_string(type) + "_extruder_variant"; auto id_key = Preset::get_iot_type_string(type) + "_extruder_id"; - auto extruder_variant = dynamic_cast(old_config.option(variant_key)); - auto extruder_id = dynamic_cast(old_config.option(id_key)); + // Orca: Dirty indices belong to the edited config, which may contain newly added variants. + auto extruder_variant = dynamic_cast(new_config.option(variant_key)); + auto extruder_id = dynamic_cast(new_config.option(id_key)); for (const std::string& opt_key : dirty_options) { int variant_index = -2; const Search::Option &option = searcher.get_option(opt_key, type, variant_index); - if (option.opt_key() != opt_key && variant_index < -1) { + if (variant_index == -2) { // When founded option isn't the correct one. // It can be for dirty_options: "default_print_profile", "printer_model", "printer_settings_id", // because of they don't exist in searcher continue; } - auto category = option.category_local; - if (variant_index >= 0) { - if (printer_options_with_variant_2.count(opt_key.substr(0, opt_key.find_last_of('#'))) > 0) - variant_index /= 2; - if (boost::nowide::narrow(category).find("Extruder ") == 0) - category = category.substr(0, 8); - if (extruder_id) - category = category + (wxString(" {") + (extruder_id->values[variant_index] == 1 ? _L("Left: ") : _L("Right: ")) - + L(extruder_variant->values[variant_index]) + "}"); - else - category = category + (wxString(" {") + L(extruder_variant->values[variant_index]) + "}"); + wxString category = option.category_local; + wxString label = option.label_local; + if (type == Preset::TYPE_PRINTER && variant_index >= 0 && + printer_options_with_variant_2.count(get_pure_opt_key(opt_key)) > 0) { + // Orca: silent_mode is obsolete on import, but its option and two-column UI still exist. + // Keep mode labels for configs that explicitly enable it; omit them in the default single-mode UI. + if (new_config.opt_bool("silent_mode")) + label += " (" + (variant_index % 2 == 0 ? _L("Normal") : _L("Silent")) + ")"; + variant_index /= 2; + } + if (variant_index >= 0 && extruder_variant && variant_index < extruder_variant->size()) { + // Orca: Match the untranslated category and use the same extruder names as the printer tabs. + if (option.category.compare(0, 9, L"Extruder ") == 0) + category = _L("Extruder"); + wxString variant_label = L(extruder_variant->values[variant_index]); + // Orca: An extruder name only disambiguates variants on printers with multiple extruders. + if (multiple_extruders && extruder_id && variant_index < extruder_id->size() && extruder_id->values[variant_index] > 0) { + const wxString extruder_name = Tab::translate_category( + wxString::Format("Extruder %d", extruder_id->values[variant_index]), Preset::TYPE_PRINTER); + variant_label = extruder_name + " (" + variant_label + ")"; + } + category = variant_label + ": " + category; } /*m_tree->Append(opt_key, type, option.category_local, option.group_local, option.label_local, @@ -1806,7 +1606,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres //PresetItem pi = {opt_key, type, 1983}; //m_presetitems.push_back() - PresetItem pi = {type, opt_key, category, option.group_local, option.label_local, get_string_value(opt_key, old_config), get_string_value(opt_key, new_config)}; + PresetItem pi = {type, opt_key, category, option.group_local, label, get_string_value(opt_key, old_config), get_string_value(opt_key, new_config)}; m_presetitems.push_back(pi); } diff --git a/src/slic3r/GUI/UpdateDialogs.hpp b/src/slic3r/GUI/UpdateDialogs.hpp index 04eb4ffb3c..784c10f09a 100644 --- a/src/slic3r/GUI/UpdateDialogs.hpp +++ b/src/slic3r/GUI/UpdateDialogs.hpp @@ -33,7 +33,6 @@ public: void on_hyperlink(wxHyperlinkEvent& evt); private: - wxCheckBox *cbox; }; diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 96b9c1b481..d31fde8613 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -862,7 +862,6 @@ void MachineInfoPanel::update_ams_ext(MachineObject *obj) if (new_extra_ams_ver != obj->new_ver_list.end()) has_new_version = true; - extra_ams_it->second.sw_new_ver; if (has_new_version) { m_extra_ams_panel->m_ams_new_version_img->Show(); ver_text = new_extra_ams_ver->second.sw_ver; diff --git a/src/slic3r/GUI/UserManager.cpp b/src/slic3r/GUI/UserManager.cpp index 456582e896..e874c2158d 100644 --- a/src/slic3r/GUI/UserManager.cpp +++ b/src/slic3r/GUI/UserManager.cpp @@ -1,9 +1,11 @@ #include "libslic3r/libslic3r.h" #include "UserManager.hpp" #include "DeviceManager.hpp" +#include "BindDialog.hpp" #include "NetworkAgent.hpp" #include "GUI.hpp" #include "GUI_App.hpp" +#include "I18N.hpp" #include "MsgDialog.hpp" #include "DeviceCore/DevManager.h" diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 6b58fffead..78030c68da 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -562,6 +563,78 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) m_ProfileJson["filament"][fName]["selected"] = 1; } } + else if (strCmd == "check_for_new_printers") { + json response = json::object(); + response["command"] = "check_new_printers_result"; + // Guide pages currently send sequence_id as a number, while older + // pages may send it as a string. Preserve the value without + // forcing either representation. + if (j.contains("sequence_id")) + response["sequence_id"] = j["sequence_id"]; + else + response["sequence_id"] = ""; + + if (!m_MainPtr->preset_updater) { + response["error"] = "Printer update service is unavailable."; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + wxGetApp().CallAfter([this, strJS] { RunScript(strJS); }); + } else { + // Orca: enumerate vendors directly from disk rather than from m_ProfileJson["model"] + // — a vendor with no machine models (e.g. a filament-only bundle, or a test fixture + // like "test123" with an empty machine_model_list) never gets a "vendor" entry + // pushed into "model" by LoadProfileFamily(), so it would be invisible to the + // request body and get endlessly re-offered by the server. Scan both the system dir + // (already-installed vendors) and the bundled resources dir (shipped-but-not-yet- + // installed vendors), same as LoadProfileData() does when building loaded_vendors. + std::set system_vendors; + for (const auto& dir : {vendor_dir, rsrc_vendor_dir}) { + if (!boost::filesystem::exists(dir)) + continue; + for (const auto& entry : boost::filesystem::directory_iterator(dir)) { + if (!boost::filesystem::is_directory(entry) && boost::iequals(entry.path().extension().string(), ".json")) + system_vendors.insert(entry.path().stem().string()); + } + } + // Orca: check_new_vendors() is async (network + confirmation dialog + download + // all happen off the calling thread apart from the dialog itself); guard against + // this dialog being closed before the callback fires. + wxWeakRef weak_this(this); + try { + m_MainPtr->preset_updater->check_new_vendors( + system_vendors, [weak_this, response](std::vector installed_vendors, bool declined) mutable { + if (!weak_this) + return; + + // Orca: append the newly installed vendor(s) into the in-memory + // profile data (instead of a full LoadProfileData() rescan of every + // vendor) and push the refreshed list to the webview, the same way + // request_userguide_profile does, so the printer list picks them up + // without needing to reopen the guide. + for (const auto& vendor_id : installed_vendors) { + weak_this->LoadProfileFamily(vendor_id, (weak_this->vendor_dir / (vendor_id + ".json")).string()); + } + if (!installed_vendors.empty()) { + json profile_response = json::object(); + profile_response["command"] = "response_userguide_profile"; + profile_response["sequence_id"] = "10001"; + profile_response["response"] = weak_this->m_ProfileJson; + wxString profileJS = wxString::Format("HandleStudio(%s)", profile_response.dump(-1, ' ', true)); + weak_this->RunScript(profileJS); + } + + response["vendors"] = installed_vendors; + response["declined"] = declined; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + weak_this->RunScript(strJS); + }); + } catch (const std::exception &e) { + BOOST_LOG_TRIVIAL(warning) << "Failed to check for new printers: " << e.what(); + response["error"] = "Failed to check for new printers."; + wxString strJS = wxString::Format("HandleStudio(%s)", response.dump(-1, ' ', true)); + wxGetApp().CallAfter([this, strJS] { RunScript(strJS); }); + } + } + } else if (strCmd == "user_guide_finish") { SaveProfile(); @@ -588,7 +661,7 @@ void GuideFrame::OnScriptMessage(wxWebViewEvent &evt) else if (strCmd == "user_guide_create_printer") { this->EndModal(wxID_CANCEL); this->Close(); - GUI::wxGetApp().CallAfter([this] {GUI::wxGetApp().sidebar().create_printer_preset();}); + GUI::wxGetApp().CallAfter([] {GUI::wxGetApp().sidebar().create_printer_preset();}); } else if (strCmd == "user_guide_cancel") { this->EndModal(wxID_CANCEL); @@ -871,7 +944,7 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle std::string preferred_model; std::string preferred_variant; PrinterTechnology preferred_pt = ptFFF; - auto get_preferred_printer_model = [preset_bundle, enabled_vendors, old_enabled_vendors, preferred_pt](const std::string& bundle_name, std::string& variant) { + auto get_preferred_printer_model = [preset_bundle, enabled_vendors, old_enabled_vendors](const std::string& bundle_name, std::string& variant) { const auto config = enabled_vendors.find(bundle_name); if (config == enabled_vendors.end()) return std::string(); @@ -1644,13 +1717,15 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath OneModel["materials"] = pm["default_materials"]; // wxString strCoverPath = wxString::Format("%s\\%s\\%s_cover.png", strFolder, strVendor, std::string(s1.mb_str())); - std::string cover_file = s1 + "_cover.png"; - boost::filesystem::path cover_path = boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/profiles/" / strVendor / cover_file).make_preferred(); + std::string cover_file = s1 + "_cover.png"; + boost::filesystem::path cover_path = boost::filesystem::absolute(vendor_dir / cover_file).make_preferred(); + BOOST_LOG_TRIVIAL(info) << "[WebGuideDialog] " << cover_path; if (!boost::filesystem::exists(cover_path)) { - cover_path = - (boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/web/image/printer/") / - cover_file) - .make_preferred(); + cover_path = boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/profiles/" / strVendor / cover_file) + .make_preferred(); + if (!boost::filesystem::exists(cover_path)) + cover_path = (boost::filesystem::absolute(boost::filesystem::path(resources_dir()) / "/web/image/printer/") / cover_file) + .make_preferred(); } OneModel["cover"] = cover_path.string(); diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index b9592d03fe..1ad60175ae 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -43,6 +43,8 @@ namespace Slic3r { namespace GUI { class GuideFrame : public DPIDialog { public: + using json = nlohmann::json; + GuideFrame(GUI_App *pGUI, long style = wxCAPTION | wxCLOSE_BOX | wxSYSTEM_MENU); virtual ~GuideFrame(); @@ -112,7 +114,6 @@ private: AppConfig m_appconfig_new; wxWebView *m_browser; - wxButton * m_TestBtn; wxString m_SectionName; diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 4222ce745b..829e7ef106 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -489,7 +489,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) std::string jump_url = j["data"]["url"].get(); int loopback_port = ensure_loopback_port(); jump_url = rewrite_loopback_url(jump_url, loopback_port); - CallAfter([this, jump_url] { + CallAfter([jump_url] { wxString url = wxString::FromUTF8(jump_url); wxLaunchDefaultBrowser(url); }); @@ -498,7 +498,7 @@ void ZUserLogin::OnScriptMessage(wxWebViewEvent &evt) else if (strCmd == "new_webpage") { if (j["data"].contains("url")) { std::string jump_url = j["data"]["url"].get(); - CallAfter([this, jump_url] { + CallAfter([jump_url] { wxString url = wxString::FromUTF8(jump_url); wxLaunchDefaultBrowser(url); }); diff --git a/src/slic3r/GUI/WebViewDialog.hpp b/src/slic3r/GUI/WebViewDialog.hpp index 23b3c711a1..bad0192115 100644 --- a/src/slic3r/GUI/WebViewDialog.hpp +++ b/src/slic3r/GUI/WebViewDialog.hpp @@ -108,13 +108,16 @@ public: private: wxWebView* m_browser; + wxButton * m_button_stop; + wxTextCtrl *m_url; +#if !BBL_RELEASE_TO_PUBLIC + // Created only by the internal-build toolbar in the constructor. wxBoxSizer *bSizer_toolbar; wxButton * m_button_back; wxButton * m_button_forward; - wxButton * m_button_stop; wxButton * m_button_reload; - wxTextCtrl *m_url; wxButton * m_button_tools; +#endif //BBL_RELEASE_TO_PUBLIC wxMenu* m_tools_menu; wxMenuItem* m_tools_handle_navigation; @@ -125,10 +128,6 @@ private: wxMenuItem* m_edit_undo; wxMenuItem* m_edit_redo; wxMenuItem* m_edit_mode; - wxMenuItem* m_scroll_line_up; - wxMenuItem* m_scroll_line_down; - wxMenuItem* m_scroll_page_up; - wxMenuItem* m_scroll_page_down; wxMenuItem* m_script_string; wxMenuItem* m_script_integer; wxMenuItem* m_script_double; @@ -147,7 +146,6 @@ private: wxMenuItem* m_dev_tools; wxInfoBar *m_info; - wxStaticText* m_info_text; long m_zoomFactor; diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index efcca12a05..7ba24fd991 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -278,7 +278,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_ams_dry_ctr_win->Move(popup_pos); m_ams_dry_ctr_win->ShowModal(); } else { - m_percent_humidity_dry_popup->Update(info); + m_percent_humidity_dry_popup->UpdateInfo(info); wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); wxPoint popup_pos(img_pos.x - m_percent_humidity_dry_popup->GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); @@ -984,7 +984,7 @@ void AMSControl::UpdateAms(const std::string &series_name, if (cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_MAIN_ID) || cans->get_ams_id() == std::to_string(VIRTUAL_TRAY_DEPUTY_ID)) { for (auto ifo : m_ext_info) { if (ifo.ams_id == ams_id) { - cans->Update(ifo); + cans->UpdateInfo(ifo); cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); } } @@ -992,7 +992,7 @@ void AMSControl::UpdateAms(const std::string &series_name, else{ for (auto ifo : m_ams_info) { if (ifo.ams_id == ams_id) { - cans->Update(ifo); + cans->UpdateInfo(ifo); cans->show_sn_value(m_ams_model == AMSModel::AMS_LITE ? false : true); } } @@ -1015,7 +1015,7 @@ void AMSControl::UpdateAms(const std::string &series_name, std::string id = ams_prv.second->get_ams_id(); auto item = m_ams_item_list.find(id); if (item != m_ams_item_list.end()) - { ams_prv.second->Update(item->second->get_ams_info()); + { ams_prv.second->UpdateInfo(item->second->get_ams_info()); } } } @@ -1034,7 +1034,7 @@ void AMSControl::UpdateAms(const std::string &series_name, humidity_info.humidity_percent = the_info.humidity_raw; humidity_info.left_dry_time = the_info.left_dray_time; humidity_info.current_temperature = the_info.current_temperature; - m_percent_humidity_dry_popup->Update(&humidity_info); + m_percent_humidity_dry_popup->UpdateInfo(&humidity_info); break; } } diff --git a/src/slic3r/GUI/Widgets/AMSItem.cpp b/src/slic3r/GUI/Widgets/AMSItem.cpp index b6f335b580..9d5ec9c1c1 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.cpp +++ b/src/slic3r/GUI/Widgets/AMSItem.cpp @@ -114,7 +114,6 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, DevAms *ams, bool remain_flag, info.ctype = 0; info.material_colour = AMS_TRAY_DEFAULT_COL; info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND; - wxColour(255, 255, 255); } if (it->second->is_tray_info_ready() && obj->cali_version >= 0) { @@ -171,7 +170,6 @@ void AMSinfo::parse_ext_info(MachineObject* obj, DevAmsTray tray) { info.filament_id = ""; info.ctype = 0; info.material_colour = AMS_TRAY_DEFAULT_COL; - wxColour(255, 255, 255); } info.material_state = AMSCanType::AMS_CAN_TYPE_VIRTUAL; if (tray.is_tray_info_ready() && obj->cali_version >= 0) { @@ -325,7 +323,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, std::string ams_id, wxString can_id, Ca m_can_id = can_id.ToStdString(); create(parent, wxID_ANY, pos, size); - Update(ams_id, info); + UpdateInfo(ams_id, info); } AMSrefresh::AMSrefresh(wxWindow *parent, std::string ams_id, int can_id, Caninfo info, const wxPoint &pos, const wxSize &size) : AMSrefresh() @@ -333,7 +331,7 @@ AMSrefresh::AMSrefresh(wxWindow *parent, std::string ams_id, int can_id, Caninfo m_can_id = wxString::Format("%d", can_id).ToStdString(); create(parent, wxID_ANY, pos, size); - Update(ams_id, info); + UpdateInfo(ams_id, info); } AMSrefresh::~AMSrefresh() @@ -482,7 +480,7 @@ void AMSrefresh::paintEvent(wxPaintEvent &evt) dc.DrawText(m_refresh_id, pot); } -void AMSrefresh::Update(std::string ams_id, Caninfo info) +void AMSrefresh::UpdateInfo(std::string ams_id, Caninfo info) { if (m_ams_id == ams_id && m_info == info) { @@ -945,7 +943,7 @@ AMSLib::AMSLib(wxWindow *parent, std::string ams_idx, Caninfo info, AMSModelOrig Bind(wxEVT_LEAVE_WINDOW, &AMSLib::on_leave_window, this); Bind(wxEVT_LEFT_DOWN, &AMSLib::on_left_down, this); - Update(info, ams_idx, false); + UpdateInfo(info, ams_idx, false); } AMSLib::~AMSLib() @@ -1730,7 +1728,7 @@ void AMSLib::on_pass_road(bool pass) } } -void AMSLib::Update(Caninfo info, std::string ams_idx, bool refresh) +void AMSLib::UpdateInfo(Caninfo info, std::string ams_idx, bool refresh) { DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -1868,7 +1866,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in void AMSRoad::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size) { wxWindow::Create(parent, id, pos, size); } -void AMSRoad::Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan) +void AMSRoad::UpdateInfo(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan) { m_amsinfo = amsinfo; m_info = info; @@ -2083,9 +2081,6 @@ void AMSRoad::OnPassRoad(std::vector prord_list) } } -/* - - /************************************************* Description:AMSRoadUpPart **************************************************/ @@ -2124,7 +2119,7 @@ void AMSRoadUpPart::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, Refresh(); } -void AMSRoadUpPart::Update(AMSinfo amsinfo) +void AMSRoadUpPart::UpdateInfo(AMSinfo amsinfo) { if (m_amsinfo != amsinfo) { @@ -2616,7 +2611,7 @@ void AMSPreview::Close() Hide(); } -void AMSPreview::Update(AMSinfo amsinfo) +void AMSPreview::UpdateInfo(AMSinfo amsinfo) { if (m_amsinfo == amsinfo) { @@ -2954,7 +2949,7 @@ AMSHumidity::AMSHumidity(wxWindow* parent, wxWindowID id, AMSinfo info, const wx } }); - Update(info); + UpdateInfo(info); } void AMSHumidity::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size) { @@ -2963,7 +2958,7 @@ void AMSHumidity::create(wxWindow* parent, wxWindowID id, const wxPoint& pos, co } -void AMSHumidity::Update(AMSinfo amsinfo) +void AMSHumidity::UpdateInfo(AMSinfo amsinfo) { if (m_amsinfo != amsinfo) { @@ -3380,7 +3375,7 @@ void AmsItem::AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer) //m_can_road_list[caninfo.can_id] = m_panel_road; } -void AmsItem::Update(AMSinfo info) +void AmsItem::UpdateInfo(AMSinfo info) { if (m_info == info) { @@ -3392,7 +3387,7 @@ void AmsItem::Update(AMSinfo info) if (m_humidity) { - m_humidity->Update(m_info); + m_humidity->UpdateInfo(m_info); } for (int i = 0; i < m_can_count; i++) { @@ -3401,7 +3396,7 @@ void AmsItem::Update(AMSinfo info) auto refresh = it->second; if (refresh != nullptr){ - refresh->Update(info.ams_id, info.cans[i]); + refresh->UpdateInfo(info.ams_id, info.cans[i]); refresh->Show(); } } @@ -3410,7 +3405,7 @@ void AmsItem::Update(AMSinfo info) AMSLib* lib = m_can_lib_list[std::to_string(i)]; if (lib != nullptr){ if (i < m_can_count){ - lib->Update(info.cans[i], info.ams_id); + lib->UpdateInfo(info.cans[i], info.ams_id); lib->Show(); } else{ @@ -3419,12 +3414,7 @@ void AmsItem::Update(AMSinfo info) } } if (m_panel_road != nullptr){ - m_panel_road->Update(m_info); - } - - if (true || m_ams_model == AMSModel::GENERIC_AMS) { - /*m_panel_road->Update(m_info, info.cans[0]); - m_panel_road->Show();*/ + m_panel_road->UpdateInfo(m_info); } Layout(); diff --git a/src/slic3r/GUI/Widgets/AMSItem.hpp b/src/slic3r/GUI/Widgets/AMSItem.hpp index bed57e7d39..ac4283b7e8 100644 --- a/src/slic3r/GUI/Widgets/AMSItem.hpp +++ b/src/slic3r/GUI/Widgets/AMSItem.hpp @@ -312,7 +312,7 @@ public: ~AMSrefresh(); public: - void Update(std::string ams_id, Caninfo info); + void UpdateInfo(std::string ams_id, Caninfo info); std::string GetCanId() const { return m_info.can_id; }; @@ -492,7 +492,7 @@ public: AMSModel m_ams_model; AMSModelOriginType m_ext_type = { AMSModelOriginType::GENERIC_EXT }; - void Update(Caninfo info, std::string ams_idx, bool refresh = true); + void UpdateInfo(Caninfo info, std::string ams_idx, bool refresh = true); void UnableSelected() { m_unable_selected = true; }; void EableSelected() { m_unable_selected = false; }; void OnSelected(); @@ -581,7 +581,7 @@ public: double m_radius = {4}; wxColour m_road_def_color; wxColour m_road_color; - void Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan); + void UpdateInfo(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan); std::vector ams_humidity_img; @@ -614,7 +614,7 @@ public: void create(wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); public: - void Update(AMSinfo amsinfo); + void UpdateInfo(AMSinfo amsinfo); void OnVamsLoading(bool load, wxColour col = AMS_CONTROL_GRAY500); void SetPassRoadColour(wxColour col); @@ -641,17 +641,11 @@ private: AMSRoadShowMode m_road_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSPassRoadSTEP m_load_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; - bool m_selected = {false}; - int m_passroad_width = {6}; - double m_radius = {4}; wxColour m_road_def_color; wxColour m_road_color; std::vector ams_humidity_img; - int m_humidity = {0}; - bool m_show_humidity = {false}; - bool m_vams_loading{false}; AMSModel m_ams_model; }; @@ -684,22 +678,16 @@ public: private: int m_nozzle_num = {1}; - AMSRoadShowMode m_single_ext_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSRoadShowMode m_left_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; AMSRoadShowMode m_right_rode_mode = {AMSRoadShowMode::AMS_ROAD_MODE_FOUR}; bool m_selected = {false}; int m_left_road_length = {-1}; int m_right_road_length = {-1}; - int m_passroad_width = {6}; - double m_radius = {4}; - AMSPassRoadType m_pass_road_type = {AMSPassRoadType::AMS_ROAD_TYPE_NONE}; AMSPassRoadSTEP m_pass_road_left_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; AMSPassRoadSTEP m_pass_road_right_step = {AMSPassRoadSTEP::AMS_ROAD_STEP_NONE}; std::map m_road_color; - bool m_vams_loading{false}; - AMSModel m_ams_model; }; /************************************************* @@ -715,7 +703,7 @@ public: void Open(); void Close(); - void Update(AMSinfo amsinfo); + void UpdateInfo(AMSinfo amsinfo); void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); void OnEnterWindow(wxMouseEvent &evt); void OnLeaveWindow(wxMouseEvent &evt); @@ -768,7 +756,7 @@ public: int m_canindex = { 0 }; bool m_selected = { false }; double m_radius = { 12 }; - void Update(AMSinfo amsinfo); + void UpdateInfo(AMSinfo amsinfo); std::vector ams_humidity_imgs; std::vector ams_humidity_dark_imgs; @@ -801,7 +789,7 @@ public: AmsItem(wxWindow *parent, AMSinfo info, AMSModel model, AMSPanelPos pos); ~AmsItem(); - void Update(AMSinfo info); + void UpdateInfo(AMSinfo info); void create(wxWindow *parent); void AddCan(Caninfo caninfo, int canindex, int maxcan, wxBoxSizer* sizer); void AddLiteCan(Caninfo caninfo, int canindex, wxGridSizer* sizer); @@ -866,11 +854,7 @@ private: AMSinfo m_info; wxBoxSizer * sizer_can = {nullptr}; wxGridSizer* sizer_can_extra = { nullptr }; - wxBoxSizer * sizer_humidity = { nullptr }; wxBoxSizer * sizer_item = { nullptr }; - wxBoxSizer * sizer_can_middle = {nullptr}; - wxBoxSizer * sizer_can_left = {nullptr}; - wxBoxSizer * sizer_can_right = {nullptr}; AMSExtImage* m_ext_image = { nullptr }; //the ext image upon the ext ams AMSExtText* m_ext_text = { nullptr }; //the ext text upon the ext ams }; diff --git a/src/slic3r/GUI/Widgets/AnimaController.cpp b/src/slic3r/GUI/Widgets/AnimaController.cpp index acf78c01f5..d5f665cde1 100644 --- a/src/slic3r/GUI/Widgets/AnimaController.cpp +++ b/src/slic3r/GUI/Widgets/AnimaController.cpp @@ -78,7 +78,7 @@ void AnimaIcon::Stop() m_timer->Stop(); } -void AnimaIcon::Enable() +void AnimaIcon::ShowEnabledIcon() { if (m_bitmap) { m_bitmap->SetBitmap(m_image_enable); } } diff --git a/src/slic3r/GUI/Widgets/AnimaController.hpp b/src/slic3r/GUI/Widgets/AnimaController.hpp index e2f67ff8a6..daf8f95314 100644 --- a/src/slic3r/GUI/Widgets/AnimaController.hpp +++ b/src/slic3r/GUI/Widgets/AnimaController.hpp @@ -13,7 +13,7 @@ public: void Play(); void Stop(); - void Enable(); + void ShowEnabledIcon(); bool IsPlaying() const { return IsRunning(); }; bool IsRunning() const; diff --git a/src/slic3r/GUI/Widgets/AxisCtrlButton.cpp b/src/slic3r/GUI/Widgets/AxisCtrlButton.cpp index ee0608ffbe..535abfcaf2 100644 --- a/src/slic3r/GUI/Widgets/AxisCtrlButton.cpp +++ b/src/slic3r/GUI/Widgets/AxisCtrlButton.cpp @@ -124,7 +124,7 @@ void AxisCtrlButton::SetInnerBackgroundColor(StateColor const& color) void AxisCtrlButton::SetBitmap(ScalableBitmap &bmp) { - if (&bmp && (& bmp.bmp()) && (bmp.bmp().IsOk())) { + if (bmp.bmp().IsOk()) { m_icon = bmp; } } diff --git a/src/slic3r/GUI/Widgets/Button.cpp b/src/slic3r/GUI/Widgets/Button.cpp index 5a5bd89403..5f03636f18 100644 --- a/src/slic3r/GUI/Widgets/Button.cpp +++ b/src/slic3r/GUI/Widgets/Button.cpp @@ -162,6 +162,15 @@ void Button::SetCenter(bool isCenter) { this->isCenter = isCenter; } +void Button::SetIndicator(bool on) +{ + if (m_show_indicator == on) + return; + m_show_indicator = on; + messureSize(); + Refresh(); +} + void Button::SetVertical(bool vertical) { this->vertical = vertical; @@ -302,8 +311,11 @@ void Button::render(wxDC& dc) } } auto szContent = textSize; + // Whether the measured content reserved the text/icon gap. macOS measures an empty label + // as 0-high, so the gap is skipped there; the dot must not advance past it in that case. + const bool gap_reserved = szContent.y > 0; if (icon.bmp().IsOk()) { - if (szContent.y > 0) { + if (gap_reserved) { //BBS norrow size between text and icon if (vertical) szContent.y += spacing; @@ -324,6 +336,13 @@ void Button::render(wxDC& dc) szContent.x -= d; } } + if (m_show_indicator) { + const int dot = FromDIP(6); + if (vertical) + szContent.y += dot + FromDIP(6); + else + szContent.x += dot + FromDIP(6); + } // move to center wxRect rcContent = { {0, 0}, size }; if (isCenter) { @@ -341,10 +360,10 @@ void Button::render(wxDC& dc) dc.DrawBitmap(icon.bmp(), pt); //BBS norrow size between text and icon if (vertical) { - pt.y += szIcon.y + spacing; + pt.y += szIcon.y + (gap_reserved ? spacing : 0); pt.x = rcContent.x; } else { - pt.x += szIcon.x + spacing; + pt.x += szIcon.x + (gap_reserved ? spacing : 0); pt.y = rcContent.y; } } @@ -364,6 +383,17 @@ void Button::render(wxDC& dc) #endif dc.DrawText(text, pt); } + if (m_show_indicator) { + const int dot = FromDIP(6); // diameter + wxPoint dot_pt; + dot_pt.x = pt.x + (text.IsEmpty() ? 0 : textSize.x) + FromDIP(6) + dot / 2; + // Centre on the content vertically; a bitmap-only (empty-label) tab has no text row. + dot_pt.y = text.IsEmpty() ? rcContent.y + rcContent.height / 2 : pt.y + textSize.y / 2; + const wxColour c = StateColor::darkModeColorFor(m_indicator_color); + dc.SetBrush(wxBrush(c)); + dc.SetPen(wxPen(c)); + dc.DrawCircle(dot_pt, dot / 2); + } } void Button::messureSize() @@ -388,6 +418,14 @@ void Button::messureSize() if (szIcon.y > szContent.y) szContent.y = szIcon.y; } } + if (m_show_indicator) { + // Indicator dot sits to the right of the label: its diameter plus the gap from the text. + const int dot = FromDIP(6); + if (vertical) + szContent.y += dot + FromDIP(6); + else + szContent.x += dot + FromDIP(6); + } wxSize size = szContent + paddingSize * 2; if (minSize.GetHeight() > 0) size.SetHeight(minSize.GetHeight()); diff --git a/src/slic3r/GUI/Widgets/Button.hpp b/src/slic3r/GUI/Widgets/Button.hpp index 2991edd425..758a9a4009 100644 --- a/src/slic3r/GUI/Widgets/Button.hpp +++ b/src/slic3r/GUI/Widgets/Button.hpp @@ -4,28 +4,30 @@ #include "../wxExtensions.hpp" #include "StaticBox.hpp" #include +#include class ButtonProps { public: - static int ChoiceButtonGap(){return 10;}; - static int WindowButtonGap(){return 10;}; + static int ChoiceButtonGap() { return 10; }; + static int WindowButtonGap() { return 10; }; }; -enum class ButtonStyle{ +enum class ButtonStyle { Regular, Confirm, Alert, Disabled, }; -enum class ButtonType{ - Compact , // Font10 FullyRounded For spaces with less areas - Window , // Font12 FullyRounded For regular buttons in windows and not related with parameter boxes - Choice , // Font14 Semi-Rounded For dialog/window choice buttons +enum class ButtonType { + Compact, // Font10 FullyRounded For spaces with less areas + Window, // Font12 FullyRounded For regular buttons in windows and not related with parameter boxes + Choice, // Font14 Semi-Rounded For dialog/window choice buttons Parameter, // Font14 Semi-Rounded For buttons that near parameter boxes - Icon , // ------ Semi-Rounded For buttons that only has icons. icons should be 16x16 and iconSize has to be defined as 16 while creation of button - Expanded , // Font14 Semi-Rounded For full length buttons. ex. buttons in static box + Icon, // ------ Semi-Rounded For buttons that only has icons. icons should be 16x16 and iconSize has to be defined as 16 while + // creation of button + Expanded, // Font14 Semi-Rounded For full length buttons. ex. buttons in static box }; class Button : public StaticBox @@ -36,15 +38,17 @@ class Button : public StaticBox wxSize paddingSize; ScalableBitmap active_icon; - StateColor text_color; + StateColor text_color; bool pressedDown = false; bool m_selected = true; - bool canFocus = true; + bool canFocus = true; bool isCenter = true; bool vertical = false; + bool m_show_indicator = false; + wxColour m_indicator_color = wxColour("#009688"); - static const int buttonWidth = 200; + static const int buttonWidth = 200; static const int buttonHeight = 50; public: @@ -68,19 +72,23 @@ public: void SetStyle(const ButtonStyle style /*= ButtonStyle::Regular*/, const ButtonType type /*= ButtonType::None*/); - void SetTextColor(StateColor const &color); + void SetTextColor(StateColor const& color); - void SetTextColorNormal(wxColor const &color); + void SetTextColorNormal(wxColor const& color); void SetSelected(bool selected = true) { m_selected = selected; } + // Show a small coloured dot to the right of the label (used by TabCtrl tabs to flag that + // the tab's category has a selected/toggled setting). + void SetIndicator(bool on); + // Only meant to be used by inspector, not public API ButtonStyle GetStyle() const { return m_style; } - ButtonType GetType() const { return m_type; } - bool IsSelected() const { return m_selected; } + ButtonType GetType() const { return m_type; } + bool IsSelected() const { return m_selected; } bool Enable(bool enable = true) override; - void EnableTooltipEvenDisabled();// The tip will be shown even if the button is disabled + void EnableTooltipEvenDisabled(); // The tip will be shown even if the button is disabled void SetCanFocus(bool canFocus) override; @@ -104,7 +112,7 @@ protected: private: bool m_has_style = false; ButtonStyle m_style; - ButtonType m_type; + ButtonType m_type; void paintEvent(wxPaintEvent& evt); @@ -115,10 +123,10 @@ private: // some useful events void mouseDown(wxMouseEvent& event); void mouseReleased(wxMouseEvent& event); - void mouseCaptureLost(wxMouseCaptureLostEvent &event); - void keyDownUp(wxKeyEvent &event); + void mouseCaptureLost(wxMouseCaptureLostEvent& event); + void keyDownUp(wxKeyEvent& event); - // + // void sendButtonEvent(); // parent motion diff --git a/src/slic3r/GUI/Widgets/CheckList.cpp b/src/slic3r/GUI/Widgets/CheckList.cpp index cd0dcebff3..c0101441ff 100644 --- a/src/slic3r/GUI/Widgets/CheckList.cpp +++ b/src/slic3r/GUI/Widgets/CheckList.cpp @@ -1,6 +1,7 @@ #include "CheckList.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/I18N.hpp" CheckList::CheckList( wxWindow* parent, diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index b6f6d42450..08687f3cf6 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -208,7 +208,7 @@ bool ComboBox::SetFont(wxFont const& font) int ComboBox::Append(const wxString &item, const wxBitmap &bitmap, int style) { - if (&bitmap && bitmap.IsOk()) { + if (bitmap.IsOk()) { return Append(item, bitmap, nullptr, style); } return Append(item, wxNullBitmap, nullptr, style); @@ -219,7 +219,7 @@ int ComboBox::Append(const wxString &text, void * clientData, int style) { - if (&bitmap && bitmap.IsOk()) { + if (bitmap.IsOk()) { return Append(text, bitmap, wxString{}, clientData, style); } return Append(text, wxNullBitmap, wxString{}, clientData, style); @@ -237,7 +237,7 @@ int ComboBox::Append(const wxString &text, void *clientData, int style) { - auto valid_bit_map = (&bitmap && bitmap.IsOk()) ? bitmap : wxNullBitmap; + auto valid_bit_map = bitmap.IsOk() ? bitmap : wxNullBitmap; Item item{text, wxEmptyString, valid_bit_map, valid_bit_map, clientData, group_key, group_label}; item.style = style; items.push_back(item); @@ -333,7 +333,7 @@ wxBitmap ComboBox::GetItemBitmap(unsigned int n) { return items[n].icon; } void ComboBox::SetItemBitmap(unsigned int n, wxBitmap const &bitmap) { if (n >= items.size()) return; - items[n].icon = (&bitmap && bitmap.IsOk()) ? bitmap : wxNullBitmap; + items[n].icon = bitmap.IsOk() ? bitmap : wxNullBitmap; drop.Invalidate(); } diff --git a/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp b/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp index 735a118a20..63968a57c5 100644 --- a/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp +++ b/src/slic3r/GUI/Widgets/ErrorMsgStaticText.hpp @@ -17,7 +17,7 @@ public: void paintEvent(wxPaintEvent &evt); - void SetLabel(wxString msg){m_msg = msg;}; + void SetLabel(const wxString &msg) override { m_msg = msg; } }; #endif diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index 057baca430..7efdfabf07 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -995,7 +995,7 @@ void FanControlPopupNew::init_names(MachineObject* obj) { radio_btn_name[AIR_DUCT::AIR_DUCT_HEATING_INTERNAL_FILT] = _L("Heating"); radio_btn_name[AIR_DUCT::AIR_DUCT_EXHAUST] = _L("Exhaust"); radio_btn_name[AIR_DUCT::AIR_DUCT_FULL_COOLING] = _L("Full Cooling"); - radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = L("Init"); + radio_btn_name[AIR_DUCT::AIR_DUCT_INIT] = _L("Init"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_CHAMBER] = _L("Chamber"); air_door_func_name[AIR_DOOR::AIR_DOOR_FUNC_INNERLOOP] = _L("Innerloop"); @@ -1014,8 +1014,12 @@ void FanControlPopupNew::init_names(MachineObject* obj) { if (obj) { const std::string& special_cooling_text = DevPrinterConfigUtil::get_fan_text(obj->printer_type, "special_cooling_text"); if (!special_cooling_text.empty()) { - L("Cooling mode is suitable for printing PLA/PETG/TPU materials."); //some potential text, add i18n flags - L("Cooling mode is suitable for printing PLA/PETG/TPU materials and filters the chamber air."); + // Possible runtime values of special_cooling_text, marked for extraction. + static const char *const markers[] = { + L("Cooling mode is suitable for printing PLA/PETG/TPU materials."), + L("Cooling mode is suitable for printing PLA/PETG/TPU materials and filters the chamber air."), + }; + (void) markers; label_text[AIR_DUCT::AIR_DUCT_COOLING_FILT] = _L(special_cooling_text); } } @@ -1028,9 +1032,13 @@ wxString FanControlPopupNew::get_fan_func_name(int mode, int submode, AIR_FUN fu const std::string& func_text = DevPrinterConfigUtil::get_fan_text(m_obj->printer_type, mode, (int)func, submode); if (!func_text.empty()) { - L_CONTEXT("Right(Aux)", "air_duct"); - L_CONTEXT("Right(Filter)", "air_duct"); - L_CONTEXT("Left(Aux)", "air_duct"); + // Possible runtime values of func_text, marked for extraction. + static const char *const markers[] = { + L_CONTEXT("Right(Aux)", "air_duct"), + L_CONTEXT("Right(Filter)", "air_duct"), + L_CONTEXT("Left(Aux)", "air_duct"), + }; + (void) markers; return _L_CONTEXT(func_text, "air_duct"); } } diff --git a/src/slic3r/GUI/Widgets/FanControl.hpp b/src/slic3r/GUI/Widgets/FanControl.hpp index fc29d22000..2badbf8594 100644 --- a/src/slic3r/GUI/Widgets/FanControl.hpp +++ b/src/slic3r/GUI/Widgets/FanControl.hpp @@ -109,7 +109,6 @@ public: void decrease_fan_speeds(); private: int m_current_speeds; - int m_target_speed; int m_min_speeds; int m_max_speeds; ScalableBitmap m_bitmap_add; @@ -213,7 +212,6 @@ private: wxGridSizer* m_sizer_fanControl { nullptr }; wxBoxSizer *m_mode_sizer{ nullptr }; - wxBoxSizer *m_bottom_sizer{ nullptr }; // mode switch buttons std::unordered_map m_mode_switch_btns; // diff --git a/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp b/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp index c8e054593f..a11839a8b8 100644 --- a/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp +++ b/src/slic3r/GUI/Widgets/LabeledStaticBox.cpp @@ -98,7 +98,7 @@ void LabeledStaticBox::SetBorderColor(StateColor const &color) Refresh(); } -void LabeledStaticBox::SetFont(wxFont set_font) +bool LabeledStaticBox::SetFont(const wxFont &set_font) { m_font = set_font; @@ -109,6 +109,7 @@ void LabeledStaticBox::SetFont(wxFont set_font) m_label_width = tW; Refresh(); + return true; } bool LabeledStaticBox::Enable(bool enable) diff --git a/src/slic3r/GUI/Widgets/LabeledStaticBox.hpp b/src/slic3r/GUI/Widgets/LabeledStaticBox.hpp index f42175ae05..d3e7f2efce 100644 --- a/src/slic3r/GUI/Widgets/LabeledStaticBox.hpp +++ b/src/slic3r/GUI/Widgets/LabeledStaticBox.hpp @@ -42,7 +42,7 @@ public: void SetBorderColor(StateColor const &color); - void SetFont(wxFont set_font); + bool SetFont(const wxFont &set_font) override; bool Enable(bool enable) override; diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp index 518bda1d19..9278565c47 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.cpp @@ -20,6 +20,8 @@ #include #include +#include +#include #include #include @@ -600,7 +602,7 @@ StaticBox* HotEndTable::CreateNozzleBox(const std::vector& nozzle_indices) void HotEndTable::UpdateNozzleItems(const std::unordered_map& nozzle_items, std::shared_ptr nozzle_rack) { for (auto& item : nozzle_items) - item.second->Update(nozzle_rack); + item.second->UpdateInfo(nozzle_rack); } void HotEndTable::OnPaint(wxPaintEvent& evt) diff --git a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp index 3af524c2fc..3e2e41ccb7 100644 --- a/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp +++ b/src/slic3r/GUI/Widgets/MultiNozzleSync.hpp @@ -89,8 +89,6 @@ private: bool m_right_on{ true }; wxStaticBitmap* badget; - Label* left; - Label* right; Label* left_diameter_desp; Label* right_diameter_desp; Label* left_flow_desp; @@ -204,7 +202,6 @@ private: Label* m_caution; wxTimer* m_refresh_timer {nullptr}; - size_t m_rack_event_token; Button* m_cancel_btn; Button* m_confirm_btn; }; diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.cpp b/src/slic3r/GUI/Widgets/ProgressDialog.cpp index 53842ecaea..c16f3bcf1f 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.cpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.cpp @@ -178,7 +178,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int wxBoxSizer *sizer_1line = new wxBoxSizer(wxHORIZONTAL); m_msg = new wxStaticText(m_panel_1line, wxID_ANY, wxEmptyString, wxDefaultPosition, PROGRESSDIALOG_SIMPLEBOOK_SIZE, 0); m_msg->Wrap(-1); - m_msg->SetFont(::Label::Body_13); + m_msg->SetFont(::Label::Body_14); m_msg->SetForegroundColour(PROGRESSDIALOG_GREY_700); sizer_1line->Add(m_msg, 0, wxALIGN_CENTER, 0); m_panel_1line->SetSizer(sizer_1line); @@ -188,7 +188,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int wxBoxSizer *sizer_2line = new wxBoxSizer(wxVERTICAL); m_msg_2line = new wxStaticText(m_panel_2line, wxID_ANY, wxEmptyString, wxDefaultPosition, PROGRESSDIALOG_SIMPLEBOOK_SIZE, 0); m_msg_2line->Wrap(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x); - m_msg_2line->SetFont(::Label::Body_13); + m_msg_2line->SetFont(::Label::Body_14); m_msg_2line->SetForegroundColour(PROGRESSDIALOG_GREY_700); m_msg_2line->SetMaxSize(wxSize(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x, -1)); sizer_2line->Add(m_msg_2line, 1, wxALL, 0); @@ -204,7 +204,7 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int m_msg = new wxStaticText(m_msg_scrolledWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x, -1), 0); m_msg->Wrap(PROGRESSDIALOG_SIMPLEBOOK_SIZE.x); - m_msg->SetFont(::Label::Body_13); + m_msg->SetFont(::Label::Body_14); m_msg->SetForegroundColour(PROGRESSDIALOG_GREY_700); m_msg_sizer->Add(m_msg, 0, wxEXPAND | wxALL, 0); @@ -228,6 +228,9 @@ bool ProgressDialog::Create(const wxString &title, const wxString &message, int if (!HasPDFlag(wxPD_NO_PROGRESS)) { m_gauge = new wxGauge(this, wxID_ANY, maximum, wxDefaultPosition, PROGRESSDIALOG_GAUGE_SIZE, gauge_style); m_gauge->SetValue(0); + m_gauge->SetForegroundColour(wxColour("#009688")); + m_gauge->SetBackgroundColour(wxColour("#D9D9D9")); + wxGetApp().UpdateDarkUI(m_gauge); m_sizer_main->Add(m_gauge, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(28)); } diff --git a/src/slic3r/GUI/Widgets/ProgressDialog.hpp b/src/slic3r/GUI/Widgets/ProgressDialog.hpp index bb770298a9..9ebf31b194 100644 --- a/src/slic3r/GUI/Widgets/ProgressDialog.hpp +++ b/src/slic3r/GUI/Widgets/ProgressDialog.hpp @@ -18,7 +18,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowDisabler; #define PROGRESSDIALOG_GAUGE_SIZE wxSize(FromDIP(320), FromDIP(6)) #define PROGRESSDIALOG_CANCEL_BUTTON_SIZE wxSize(FromDIP(60), FromDIP(24)) #define PROGRESSDIALOG_DEF_BK wxColour(255,255,255) -#define PROGRESSDIALOG_GREY_700 wxColour(107,107,107) +#define PROGRESSDIALOG_GREY_700 wxColour(54,54,54) // #363636 label color #define wxPD_NO_PROGRESS 0x0100 diff --git a/src/slic3r/GUI/Widgets/RadioBox.cpp b/src/slic3r/GUI/Widgets/RadioBox.cpp index 7f20b8724c..f00447e0ec 100644 --- a/src/slic3r/GUI/Widgets/RadioBox.cpp +++ b/src/slic3r/GUI/Widgets/RadioBox.cpp @@ -36,11 +36,6 @@ void RadioBox::SetValue(bool value) update(); } -bool RadioBox::GetValue() -{ - return wxBitmapToggleButton::GetValue(); -} - void RadioBox::Rescale() { diff --git a/src/slic3r/GUI/Widgets/RadioBox.hpp b/src/slic3r/GUI/Widgets/RadioBox.hpp index b2c03aae15..a34bd594dd 100644 --- a/src/slic3r/GUI/Widgets/RadioBox.hpp +++ b/src/slic3r/GUI/Widgets/RadioBox.hpp @@ -15,14 +15,10 @@ public: public: void SetValue(bool value) override; - bool GetValue(); void Rescale(); bool Disable() { return wxBitmapToggleButton::Disable(); } - bool Enable() { - return wxBitmapToggleButton::Enable(); - } private: void update(); diff --git a/src/slic3r/GUI/Widgets/ScrolledWindow.cpp b/src/slic3r/GUI/Widgets/ScrolledWindow.cpp index d570b9f764..90922f93f1 100644 --- a/src/slic3r/GUI/Widgets/ScrolledWindow.cpp +++ b/src/slic3r/GUI/Widgets/ScrolledWindow.cpp @@ -21,6 +21,8 @@ ScrolledWindow::ScrolledWindow(wxWindow *parent, wxWindowID id, wxPoint position m_bottomScrollbar = NULL; m_verticalSplitter = NULL; m_horizontalSplitter = NULL; + m_userPanel = NULL; + m_scroll_win = NULL; m_marginWidth = marginWidth; @@ -110,23 +112,13 @@ void ScrolledWindow::SetTipColor(wxColour color) if (m_bottomScrollbar) m_bottomScrollbar->SetTipColor(color); } -void ScrolledWindow::Refresh() +bool ScrolledWindow::SetBackgroundColour(const wxColour &color) { - // m_rightScrollbar->SetViewStart(0); - // m_rightScrollbar->Refresh(); - // m_rightScrollbar->Update(); - // m_userPanel->Refresh(); - // m_bottomScrollbar->SetViewStart(0); - // m_rightScrollbar->Refresh(); - // m_bottomScrollbar->Refresh(); -} - -void ScrolledWindow::SetBackgroundColour(wxColour color) -{ - wxWindow::SetBackgroundColour(color); + const bool result = wxWindow::SetBackgroundColour(color); m_verticalSplitter->SetBackgroundColour(color); m_userPanel->SetBackgroundColour(color); m_scroll_win->SetBackgroundColour(color); + return result; } void ScrolledWindow::SetMarginColor(wxColour color) diff --git a/src/slic3r/GUI/Widgets/ScrolledWindow.hpp b/src/slic3r/GUI/Widgets/ScrolledWindow.hpp index 56d54aade3..5c2bc2f9e5 100644 --- a/src/slic3r/GUI/Widgets/ScrolledWindow.hpp +++ b/src/slic3r/GUI/Widgets/ScrolledWindow.hpp @@ -15,8 +15,7 @@ public: ScrolledWindow(wxWindow *parent, wxWindowID id, wxPoint position, wxSize size, long style, int marginWidth = 0, int scrollbarWidth = 4, int tipLength = 0); void OnMouseWheel(wxMouseEvent &event); void SetTipColor(wxColour color); - void Refresh(); - void SetBackgroundColour(wxColour color); + bool SetBackgroundColour(const wxColour &color) override; void SetMarginColor(wxColour color); void SetScrollbarColor(wxColour color); @@ -27,7 +26,7 @@ public: // wxSplitterWindow* GetVerticalSplitter() { return m_verticalSplitter; } // wxSplitterWindow* GetHorizontalSplitter() { return m_horizontalSplitter; } bool IsBothDirections() { return m_bothDirections; } - virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int noUnitsX, int noUnitsY, int xPos = 0, int yPos = 0, bool noRefresh = false); + virtual void SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int noUnitsX, int noUnitsY, int xPos = 0, int yPos = 0, bool noRefresh = false) override; private: wxPanel * m_userPanel; // the panel targeted by the scrolled window diff --git a/src/slic3r/GUI/Widgets/StaticBox.cpp b/src/slic3r/GUI/Widgets/StaticBox.cpp index 6391c1a8c4..f6e7ca67f6 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.cpp +++ b/src/slic3r/GUI/Widgets/StaticBox.cpp @@ -7,6 +7,7 @@ BEGIN_EVENT_TABLE(StaticBox, wxWindow) // catch paint events //EVT_ERASE_BACKGROUND(StaticBox::eraseEvent) +EVT_SIZE(StaticBox::sizeEvent) EVT_PAINT(StaticBox::paintEvent) END_EVENT_TABLE() @@ -140,6 +141,12 @@ void StaticBox::eraseEvent(wxEraseEvent& evt) #endif } +void StaticBox::sizeEvent(wxSizeEvent& evt) +{ + Refresh(); + evt.Skip(); +} + void StaticBox::paintEvent(wxPaintEvent& evt) { // depending on your system you may need to look at double-buffered dcs diff --git a/src/slic3r/GUI/Widgets/StaticBox.hpp b/src/slic3r/GUI/Widgets/StaticBox.hpp index b7cdee34ef..363d431c8e 100644 --- a/src/slic3r/GUI/Widgets/StaticBox.hpp +++ b/src/slic3r/GUI/Widgets/StaticBox.hpp @@ -46,6 +46,8 @@ public: protected: void eraseEvent(wxEraseEvent& evt); + void sizeEvent(wxSizeEvent& evt); + void paintEvent(wxPaintEvent& evt); void render(wxDC& dc); diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 40e291d5ad..ef23e2c5e4 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -2,8 +2,8 @@ #include -wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGING, wxCommandEvent ); -wxDEFINE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent ); +wxDEFINE_EVENT(wxEVT_TAB_SEL_CHANGING, wxCommandEvent); +wxDEFINE_EVENT(wxEVT_TAB_SEL_CHANGED, wxCommandEvent); BEGIN_EVENT_TABLE(TabCtrl, StaticBox) @@ -22,11 +22,7 @@ END_EVENT_TABLE() #define TAB_BUTTON_PADDING_Y 2 #define TAB_BUTTON_PADDING TAB_BUTTON_PADDING_X, TAB_BUTTON_PADDING_Y -TabCtrl::TabCtrl(wxWindow * parent, - wxWindowID id, - const wxPoint & pos, - const wxSize & size, - long style) +TabCtrl::TabCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style) : StaticBox(parent, id, pos, size, style) { #if 0 @@ -42,14 +38,11 @@ TabCtrl::TabCtrl(wxWindow * parent, hsizer->Add(sizer, 0, wxEXPAND | wxBOTTOM, border_width * 4); SetSizer(hsizer); Bind(wxEVT_COMMAND_BUTTON_CLICKED, &TabCtrl::buttonClicked, this); - //wxString reason; - //IsTransparentBackgroundSupported(&reason); + // wxString reason; + // IsTransparentBackgroundSupported(&reason); } -TabCtrl::~TabCtrl() -{ - delete images; -} +TabCtrl::~TabCtrl() { delete images; } int TabCtrl::GetSelection() const { return sel; } @@ -75,15 +68,13 @@ void TabCtrl::SelectItem(int item) Refresh(); } -void TabCtrl::Unselect() -{ - SelectItem(-1); -} +void TabCtrl::Unselect() { SelectItem(-1); } void TabCtrl::Rescale() { - for (auto & b : btns) + for (auto& b : btns) b->Rescale(); + relayout(); } bool TabCtrl::SetFont(wxFont const& font) @@ -95,28 +86,32 @@ bool TabCtrl::SetFont(wxFont const& font) return true; } -int TabCtrl::AppendItem(const wxString &item, - int image, int selImage, - void * clientData) +int TabCtrl::AppendItem(const wxString& item, int image, int selImage, void* clientData) { - Button * btn = new Button(); + Button* btn = new Button(); btn->Create(this, item, "", wxBORDER_NONE); btn->SetFont(GetFont()); - btn->SetTextColor(StateColor( - std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), - std::make_pair(*wxLIGHT_GREY, (int) StateColor::Normal))); + btn->SetTextColor( + StateColor(std::make_pair(0x6B6B6C, (int) StateColor::NotChecked), std::make_pair(wxColour("#262E30"), (int) StateColor::Normal))); btn->SetBackgroundColor(StateColor()); btn->SetCornerRadius(0); btn->SetPaddingSize({TAB_BUTTON_PADDING}); btns.push_back(btn); if (btns.size() > 1) sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0}); - sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT, TAB_BUTTON_SPACE * 2); + sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL); sizer->AddStretchSpacer(1); relayout(); return btns.size() - 1; } +int TabCtrl::AppendItem(const wxString& item, const wxBitmap& bitmap, void* clientData) +{ + const int index = AppendItem(item, -1, -1, clientData); + SetItemBitmap(index, bitmap); + return index; +} + bool TabCtrl::DeleteItem(int item) { if (item < 0 || item >= btns.size()) { @@ -136,7 +131,7 @@ bool TabCtrl::DeleteItem(int item) sizer->GetItem(sizer->GetItemCount() - 1)->SetMinSize({0, 0}); if (selection_changed) { - sel--; // `relayout()` uses `sel` so we need to update this before calling `relayout()` + sel--; // `relayout()` uses `sel` so we need to update this before calling `relayout()` } relayout(); if (selection_changed) { @@ -159,74 +154,87 @@ void TabCtrl::DeleteAllItems() unsigned int TabCtrl::GetCount() const { return btns.size(); } -wxString TabCtrl::GetItemText(unsigned int item) const +wxString TabCtrl::GetItemText(unsigned int item) const { return item < btns.size() ? btns[item]->GetLabel() : wxString{}; } + +void TabCtrl::SetItemText(unsigned int item, wxString const& value) { - return item < btns.size() ? btns[item]->GetLabel() : wxString{}; + if (item >= btns.size()) + return; + btns[item]->SetLabel(value); } -void TabCtrl::SetItemText(unsigned int item, wxString const &value) +void TabCtrl::SetItemBitmap(unsigned int item, const wxBitmap& bitmap) { - if (item >= btns.size()) return; - btns[item]->SetLabel(value); + if (item >= btns.size()) + return; + btns[item]->SetIcon(bitmap); + relayout(); +} + +void TabCtrl::SetItemIndicator(unsigned int item, bool on) +{ + if (item >= btns.size()) + return; + btns[item]->SetIndicator(on); + relayout(); } bool TabCtrl::GetItemBold(unsigned int item) const { - if (item >= btns.size()) return false; + if (item >= btns.size()) + return false; return btns[item]->GetFont() == bold; } void TabCtrl::SetItemBold(unsigned int item, bool bold) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetFont(bold ? this->bold : GetFont()); btns[item]->Rescale(); } void* TabCtrl::GetItemData(unsigned int item) const { - if (item >= btns.size()) return nullptr; + if (item >= btns.size()) + return nullptr; return btns[item]->GetClientData(); } void TabCtrl::SetItemData(unsigned int item, void* clientData) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetClientData(clientData); } void TabCtrl::AssignImageList(wxImageList* imageList) { - if (images == imageList) return; + if (images == imageList) + return; delete images; images = imageList; } -void TabCtrl::SetItemTextColour(unsigned int item, const StateColor &col) +void TabCtrl::SetItemTextColour(unsigned int item, const StateColor& col) { - if (item >= btns.size()) return; + if (item >= btns.size()) + return; btns[item]->SetTextColor(col); } -int TabCtrl::GetFirstVisibleItem() const -{ - return btns.size() == 0 ? -1 : 0; -} +int TabCtrl::GetFirstVisibleItem() const { return btns.size() == 0 ? -1 : 0; } -int TabCtrl::GetNextVisible(int item) const -{ - return ++item < btns.size() ? item : -1; -} +int TabCtrl::GetNextVisible(int item) const { return ++item < btns.size() ? item : -1; } -bool TabCtrl::IsVisible(unsigned int item) const -{ - return true; -} +bool TabCtrl::IsVisible(unsigned int item) const { return true; } void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) { + auto size = GetSize(); wxWindow::DoSetSize(x, y, width, height, sizeFlags); - if (sizeFlags & wxSIZE_USE_EXISTING) return; + if (size == GetSize()) + return; relayout(); } @@ -234,7 +242,9 @@ void TabCtrl::DoSetSize(int x, int y, int width, int height, int sizeFlags) WXLRESULT TabCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) { - if (nMsg == WM_GETDLGCODE) { return DLGC_WANTARROWS; } + if (nMsg == WM_GETDLGCODE) { + return DLGC_WANTARROWS; + } return wxWindow::MSWWindowProc(nMsg, wParam, lParam); } @@ -243,15 +253,15 @@ WXLRESULT TabCtrl::MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam) void TabCtrl::relayout() { int offset = 10; - int item = sel + 1; - int first = 0; + int item = sel + 1; + int first = 0; for (int i = 0; i < item; ++i) - offset += btns[i]->GetMinSize().x + TAB_BUTTON_SPACE * 2; + offset += btns[i]->GetMinSize().x; if (item < btns.size()) - offset += btns[item]->GetMinSize().x + TAB_BUTTON_SPACE * 2; - int width = GetSize().x; + offset += btns[item]->GetMinSize().x; + int width = GetSize().x; for (int i = 0; i < btns.size(); ++i) { - auto size = btns[i]->GetMinSize().x + TAB_BUTTON_SPACE * 2; + auto size = btns[i]->GetMinSize().x; if (i < sel && offset > width) { sizer->Show(i * 2 + 1, false); sizer->Show(i * 2 + 2, false); @@ -272,14 +282,23 @@ void TabCtrl::relayout() sizer->GetItem(i * 2 + 2)->SetMinSize({0, 0}); } if (item >= btns.size()) - -- item; + --item; // Keep spacing 2 ~ 10 TAB_BUTTON_SPACE - int b = GetSize().x - offset - 10 - (item + 1 - first) * TAB_BUTTON_SPACE * 8; + int b = GetSize().x - offset - 10 - (item + 1 - first) * 16; sizer->GetItem(item * 2 + 2)->SetMinSize({b > 0 ? b : 0, 0}); Layout(); } -void TabCtrl::buttonClicked(wxCommandEvent &event) +int TabCtrl::GetFullSize() const +{ + // Mirrors relayout(): a 10px leading spacer plus every button's min width. + int width = 10; + for (const Button* btn : btns) + width += btn->GetMinSize().x; + return width; +} + +void TabCtrl::buttonClicked(wxCommandEvent& event) { SetFocus(); auto btn = event.GetEventObject(); @@ -287,7 +306,7 @@ void TabCtrl::buttonClicked(wxCommandEvent &event) SelectItem(iter == btns.end() ? -1 : iter - btns.begin()); } -void TabCtrl::keyDown(wxKeyEvent &event) +void TabCtrl::keyDown(wxKeyEvent& event) { switch (event.GetKeyCode()) { case WXK_UP: @@ -306,11 +325,13 @@ void TabCtrl::keyDown(wxKeyEvent &event) void TabCtrl::doRender(wxDC& dc) { wxSize size = GetSize(); - int states = state_handler.states(); - if (sel < 0) { return; } + int states = state_handler.states(); + if (sel < 0) { + return; + } - auto x1 = btns[sel]->GetPosition().x; - auto x2 = x1 + btns[sel]->GetSize().x; + auto x1 = btns[sel]->GetPosition().x; + auto x2 = x1 + btns[sel]->GetSize().x; const int BS2 = (1 + border_width) / 2; #if 0 const int BS = border_width / 2; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.hpp b/src/slic3r/GUI/Widgets/TabCtrl.hpp index 04b5b8e24e..d89da145af 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.hpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.hpp @@ -3,32 +3,29 @@ #include "Button.hpp" -wxDECLARE_EVENT( wxEVT_TAB_SEL_CHANGING, wxCommandEvent ); -wxDECLARE_EVENT( wxEVT_TAB_SEL_CHANGED, wxCommandEvent ); +wxDECLARE_EVENT(wxEVT_TAB_SEL_CHANGING, wxCommandEvent); +wxDECLARE_EVENT(wxEVT_TAB_SEL_CHANGED, wxCommandEvent); class TabCtrl : public StaticBox { std::vector btns; wxImageList* images = nullptr; - wxBoxSizer * sizer = nullptr; + wxBoxSizer* sizer = nullptr; int sel = -1; wxFont bold; public: - TabCtrl(wxWindow * parent, - wxWindowID id, - const wxPoint & pos = wxDefaultPosition, - const wxSize & size = wxDefaultSize, - long style = 0); + TabCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0); ~TabCtrl(); public: - virtual bool SetFont(wxFont const & font) override; + virtual bool SetFont(wxFont const& font) override; public: - int AppendItem(const wxString &item, int image = -1, int selImage = -1, void *clientData = nullptr); + int AppendItem(const wxString& item, int image = -1, int selImage = -1, void* clientData = nullptr); + int AppendItem(const wxString& item, const wxBitmap& bitmap, void* clientData = nullptr); bool DeleteItem(int item); @@ -36,7 +33,7 @@ public: unsigned int GetCount() const; - int GetSelection() const; + int GetSelection() const; void SelectItem(int item); @@ -45,15 +42,19 @@ public: virtual void Rescale(); wxString GetItemText(unsigned int item) const; - void SetItemText(unsigned int item, wxString const &value); + void SetItemText(unsigned int item, wxString const& value); + void SetItemBitmap(unsigned int item, const wxBitmap& bitmap); - bool GetItemBold(unsigned int item) const; - void SetItemBold(unsigned int item, bool bold); + // Show/hide the small "has selection" dot next to a tab's text. + void SetItemIndicator(unsigned int item, bool on); - void* GetItemData(unsigned int item) const; - void SetItemData(unsigned int item, void *clientData); - - void AssignImageList(wxImageList *imageList); + bool GetItemBold(unsigned int item) const; + void SetItemBold(unsigned int item, bool bold); + + void* GetItemData(unsigned int item) const; + void SetItemData(unsigned int item, void* clientData); + + void AssignImageList(wxImageList* imageList); void SetItemTextColour(unsigned int item, const StateColor& col); @@ -62,6 +63,8 @@ public: int GetNextVisible(int item) const; bool IsVisible(unsigned int item) const; + int GetFullSize() const; + private: virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO) override; @@ -71,10 +74,10 @@ private: void relayout(); - void buttonClicked(wxCommandEvent & event); - void keyDown(wxKeyEvent &event); + void buttonClicked(wxCommandEvent& event); + void keyDown(wxKeyEvent& event); - void doRender(wxDC & dc) override; + void doRender(wxDC& dc) override; // some useful events bool sendTabCtrlEvent(bool changing = false); diff --git a/src/slic3r/GUI/Widgets/TempInput.cpp b/src/slic3r/GUI/Widgets/TempInput.cpp index 6705378dac..79899940d1 100644 --- a/src/slic3r/GUI/Widgets/TempInput.cpp +++ b/src/slic3r/GUI/Widgets/TempInput.cpp @@ -275,9 +275,9 @@ void TempInput::Warning(bool warn, WarningType type) wxString warning_string; if (type == WarningType::WARNING_TOO_HIGH) - warning_string = _L("The maximum temperature cannot exceed ") + wxString::Format("%d", max_temp); + warning_string = wxString::Format(_L("The maximum temperature cannot exceed %d"), max_temp); else if (type == WarningType::WARNING_TOO_LOW) - warning_string = _L("The minmum temperature should not be less than ") + wxString::Format("%d", min_temp); + warning_string = wxString::Format(_L("The minimum temperature should not be less than %d"), min_temp); warning_text->SetLabel(warning_string); warning_text->Wrap(-1); warning_text->Fit(); diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index e281d97407..a29a3cb725 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -1,9 +1,13 @@ #include "WebView.hpp" +#include "slic3r/GUI/Widgets/StateColor.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/Utils/MacDarkMode.hpp" #include +#include +#include + #include #include #if wxUSE_WEBVIEW_EDGE @@ -12,6 +16,8 @@ #include #endif #include +#include +#include #if defined(__WIN32__) || defined(__WXMAC__) #include "wx/private/jsscriptwrapper.h" #endif @@ -73,7 +79,7 @@ DWORD DownloadAndInstallWV2RT() { }) .perform_sync(); // Sleep for 1 second to wait for the buffer writen into disk - std::this_thread::sleep_for(1000ms); + std::this_thread::sleep_for(std::chrono::milliseconds(1000)); if (downloaded) { // Either Package the WebView2 Bootstrapper with your app or download it using fwlink // Then invoke install at Runtime. diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index d4fbcc6fe3..9a473c7c8a 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -6,6 +6,7 @@ #include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" +#include "WebViewDialog.hpp" #include "MsgDialog.hpp" #include "format.hpp" #include "libslic3r/Color.hpp" diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp deleted file mode 100644 index f2d1d2701e..0000000000 --- a/src/slic3r/GUI/wxMediaCtrl2.cpp +++ /dev/null @@ -1,633 +0,0 @@ -#include "wxMediaCtrl2.h" -#include "libslic3r/Time.hpp" -#include "I18N.hpp" -#include "GUI_App.hpp" -#include "LinuxDisplayBackend.hpp" -#include -#include -#ifdef __WIN32__ -#include -#include -#include -#include -#endif - -#ifdef __LINUX__ -#include "Printer/gstbambusrc.h" -#include // main gstreamer header -#endif - -#if defined(__LINUX__) && defined(__WXGTK__) -#include -#include - -namespace { -bool ensure_gstreamer_initialized_for_liveview() -{ - GError* error = nullptr; - if (!gst_init_check(nullptr, nullptr, &error)) { - BOOST_LOG_TRIVIAL(error) << "wxMediaCtrl2: gst_init_check failed before native Wayland liveview setup" - << (error ? std::string(": ") + error->message : std::string()); - if (error) - g_error_free(error); - return false; - } - - return true; -} - -bool is_gstreamer_feature_available(const char* feature) -{ - if (!ensure_gstreamer_initialized_for_liveview()) - return false; - - GstElementFactory* factory = gst_element_factory_find(feature); - if (!factory) - return false; - - gst_object_unref(factory); - return true; -} - -void set_gstreamer_feature_rank(const char* feature, guint rank) -{ - GstElementFactory* factory = gst_element_factory_find(feature); - if (!factory) - return; - - gst_plugin_feature_set_rank(GST_PLUGIN_FEATURE(factory), rank); - gst_object_unref(factory); -} - -void configure_wayland_gstreamer_liveview_path() -{ - static bool configured = false; - if (configured) - return; - configured = true; - - if (!ensure_gstreamer_initialized_for_liveview()) - return; - - // Prefer software decode for Bambu liveview on Wayland/NVIDIA, where - // zero-copy GL/DMABUF display paths can be fragile. Keep hardware - // decoders available as lower-ranked fallbacks for VAAPI/NVDEC/V4L2-only - // installations instead of passing preflight and then blocking autoplug. - set_gstreamer_feature_rank("avdec_h264", GST_RANK_PRIMARY + 300); - set_gstreamer_feature_rank("openh264dec", GST_RANK_PRIMARY + 100); - set_gstreamer_feature_rank("nvh264dec", GST_RANK_MARGINAL); - set_gstreamer_feature_rank("vaapih264dec", GST_RANK_MARGINAL); - set_gstreamer_feature_rank("vah264dec", GST_RANK_MARGINAL); - set_gstreamer_feature_rank("v4l2h264dec", GST_RANK_MARGINAL); -} -} - -#endif // defined(__LINUX__) && defined(__WXGTK__) - -#ifdef __LINUX__ -extern "C" int gst_bambu_last_error; - -class WXDLLIMPEXP_MEDIA - wxGStreamerMediaBackend : public wxMediaBackendCommonBase -{ -public: - GstElement *m_playbin; // GStreamer media element -}; -#endif - -wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); - -wxMediaCtrl2::wxMediaCtrl2(wxWindow *parent) -{ -#if defined(__LINUX__) && defined(__WXGTK__) - m_native_wayland = Slic3r::GUI::is_running_on_wayland(); - if (m_native_wayland && is_gstreamer_feature_available("gtksink")) - configure_wayland_gstreamer_liveview_path(); - else if (m_native_wayland) { - m_gtk_sink_error = _L("Native Wayland liveview requires the GStreamer GTK video sink. Please install the gtksink plugin for GStreamer, then restart OrcaSlicer."); - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: native Wayland liveview disabled because GStreamer gtksink is unavailable"; - } -#endif -#ifdef __WIN32__ - auto hModExe = GetModuleHandle(NULL); - // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2: GetModuleHandle " << hModExe; - auto NvOptimusEnablement = (DWORD *) GetProcAddress(hModExe, "NvOptimusEnablement"); - auto AmdPowerXpressRequestHighPerformance = (int *) GetProcAddress(hModExe, "AmdPowerXpressRequestHighPerformance"); - if (NvOptimusEnablement) { - // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2: NvOptimusEnablement " << *NvOptimusEnablement; - *NvOptimusEnablement = 0; - } - if (AmdPowerXpressRequestHighPerformance) { - // BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2: AmdPowerXpressRequestHighPerformance " << *AmdPowerXpressRequestHighPerformance; - *AmdPowerXpressRequestHighPerformance = 0; - } -#endif -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_native_wayland) - wxControl::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize); - else -#endif - wxMediaCtrl::Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxMEDIACTRLPLAYERCONTROLS_NONE); -#ifdef __LINUX__ - gstbambusrc_register(); -#ifdef __WXGTK__ - if (m_native_wayland && m_gtk_sink_error.empty()) - m_use_gtk_sink = CreateGtkSinkPlayer(); - if (m_native_wayland && !m_use_gtk_sink && m_gtk_sink_error.empty()) - m_gtk_sink_error = _L("Failed to initialize the native Wayland GStreamer video sink. Please check your GStreamer GTK plugin installation."); -#endif - if (!m_use_gtk_sink && m_imp) { - auto playbin = reinterpret_cast(m_imp)->m_playbin; - g_object_set(G_OBJECT(playbin), - "audio-sink", nullptr, - nullptr); - } else if (!m_use_gtk_sink) { - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: wxMediaCtrl backend is unavailable"; - } - Bind(wxEVT_MEDIA_LOADED, [this](auto & e) { - m_loaded = true; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(0); - event.SetEventObject(this); - wxPostEvent(this, event); - }); -#endif -} - -wxMediaCtrl2::~wxMediaCtrl2() -{ -#if defined(__LINUX__) && defined(__WXGTK__) - DestroyGtkSinkPlayer(); -#endif -} - -#if defined(__LINUX__) && defined(__WXGTK__) -bool wxMediaCtrl2::CreateGtkSinkPlayer() -{ - GstElement *playbin = gst_element_factory_make("playbin", "orca-wayland-gtk-playbin"); - if (!playbin) - return false; - - GError *error = nullptr; - GstElement *video_sink = gst_parse_bin_from_description( - "videoconvert ! videoscale ! video/x-raw,format=BGRx ! gtksink name=orca_wayland_gtksink sync=false", - TRUE, - &error); - if (!video_sink) { - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: failed to create gtksink video bin" - << (error ? std::string(": ") + error->message : std::string()); - if (error) - g_error_free(error); - gst_object_unref(playbin); - return false; - } - - GstElement *gtk_sink = gst_bin_get_by_name(GST_BIN(video_sink), "orca_wayland_gtksink"); - if (!gtk_sink) { - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: failed to find gtksink in video bin"; - gst_object_unref(video_sink); - gst_object_unref(playbin); - return false; - } - - GtkWidget *gtk_widget = nullptr; - g_object_get(G_OBJECT(gtk_sink), "widget", >k_widget, nullptr); - if (!gtk_widget) { - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: gtksink did not expose a GtkWidget"; - gst_object_unref(gtk_sink); - gst_object_unref(video_sink); - gst_object_unref(playbin); - return false; - } - - gtk_widget_show(gtk_widget); - m_gtk_video_window = new wxNativeWindow(this, wxID_ANY, gtk_widget); - m_gtk_video_window->Show(); - g_object_unref(gtk_widget); - - g_object_set(G_OBJECT(playbin), - "video-sink", video_sink, - "audio-sink", nullptr, - nullptr); - gst_object_unref(video_sink); - - m_gtk_playbin = playbin; - m_gtk_sink = gtk_sink; - - GstBus *bus = gst_element_get_bus(playbin); - m_gtk_bus_watch_id = gst_bus_add_watch(bus, [](GstBus *, GstMessage *message, gpointer data) -> gboolean { - auto *self = static_cast(data); - if (!self || !self->m_gtk_playbin) - return G_SOURCE_REMOVE; - - switch (GST_MESSAGE_TYPE(message)) { - case GST_MESSAGE_ERROR: - { - GError *error = nullptr; - gchar *debug = nullptr; - gst_message_parse_error(message, &error, &debug); - BOOST_LOG_TRIVIAL(warning) << "wxMediaCtrl2: gtksink pipeline error" - << (error ? std::string(": ") + error->message : std::string()) - << (debug ? std::string(" debug: ") + debug : std::string()); - if (error) - g_error_free(error); - if (debug) - g_free(debug); - - self->m_error = gst_bambu_last_error ? gst_bambu_last_error : 2; - self->m_loaded = false; - self->m_gtk_state = wxMEDIASTATE_STOPPED; - self->PostGtkSinkStateEvent(self->GetId()); - break; - } - case GST_MESSAGE_EOS: - self->m_loaded = false; - self->m_gtk_state = wxMEDIASTATE_STOPPED; - self->PostGtkSinkStateEvent(self->GetId()); - break; - case GST_MESSAGE_STATE_CHANGED: - if (GST_MESSAGE_SRC(message) == GST_OBJECT(self->m_gtk_playbin)) { - GstState old_state; - GstState new_state; - GstState pending_state; - gst_message_parse_state_changed(message, &old_state, &new_state, &pending_state); - - if (new_state == GST_STATE_PLAYING) { - self->m_loaded = true; - self->m_gtk_state = wxMEDIASTATE_PLAYING; - self->PostGtkSinkStateEvent(); - } else if (new_state == GST_STATE_PAUSED && old_state < GST_STATE_PAUSED) { - // Treat only upward READY/NULL -> PAUSED as load completion. - // PLAYING -> PAUSED is a normal teardown step before NULL. - self->m_loaded = true; - self->m_gtk_state = wxMEDIASTATE_PAUSED; - self->PostGtkSinkStateEvent(); - } else if (new_state <= GST_STATE_READY && old_state >= GST_STATE_PAUSED) { - self->m_loaded = false; - self->m_gtk_state = wxMEDIASTATE_STOPPED; - self->PostGtkSinkStateEvent(); - } - } - break; - default: - break; - } - - return G_SOURCE_CONTINUE; - }, this); - gst_object_unref(bus); - - BOOST_LOG_TRIVIAL(info) << "wxMediaCtrl2: using GTK native Wayland video sink"; - return true; -} - -void wxMediaCtrl2::DestroyGtkSinkPlayer() -{ - if (m_gtk_bus_watch_id) { - g_source_remove(m_gtk_bus_watch_id); - m_gtk_bus_watch_id = 0; - } - - if (m_gtk_playbin) { - gst_element_set_state(m_gtk_playbin, GST_STATE_NULL); - } - - if (m_gtk_video_window) { - m_gtk_video_window->Destroy(); - m_gtk_video_window = nullptr; - } - - if (m_gtk_playbin) { - gst_object_unref(m_gtk_playbin); - m_gtk_playbin = nullptr; - } - - if (m_gtk_sink) { - gst_object_unref(m_gtk_sink); - m_gtk_sink = nullptr; - } - -} - -void wxMediaCtrl2::PostGtkSinkStateEvent(int id) -{ - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(id); - event.SetEventObject(this); - wxPostEvent(this, event); -} -#endif // defined(__LINUX__) && defined(__WXGTK__) - -#define CLSID_BAMBU_SOURCE L"{233E64FB-2041-4A6C-AFAB-FF9BCF83E7AA}" - -void wxMediaCtrl2::Load(wxURI url) -{ -#ifdef __WIN32__ - InvalidateBestSize(); - if (m_imp == nullptr) { - static bool notified = false; - if (!notified) CallAfter([] { - auto res = wxMessageBox(_L("Windows Media Player is required for this task! Do you want to enable 'Windows Media Player' for your operation system?"), _L("Error"), wxOK | wxCANCEL); - if (res == wxOK) { - wxString url = IsWindows10OrGreater() - ? "ms-settings:optionalfeatures?activationSource=SMC-Article-14209" - : "https://support.microsoft.com/en-au/windows/get-windows-media-player-81718e0d-cfce-25b1-aee3-94596b658287"; - wxExecute("cmd /c start " + url, wxEXEC_HIDE_CONSOLE); - } - }); - m_error = 100; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - return; - } - { - wxRegKey key11(wxRegKey::HKCU, L"SOFTWARE\\Classes\\CLSID\\" CLSID_BAMBU_SOURCE L"\\InProcServer32"); - wxRegKey key12(wxRegKey::HKCR, L"CLSID\\" CLSID_BAMBU_SOURCE L"\\InProcServer32"); - wxString path = key11.Exists() ? key11.QueryDefaultValue() - : key12.Exists() ? key12.QueryDefaultValue() : wxString{}; - wxRegKey key2(wxRegKey::HKCR, "bambu"); - wxString clsid; - if (key2.Exists()) - key2.QueryRawValue("Source Filter", clsid); - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": clsid %1% path %2%") % clsid % path; - - std::string data_dir_str = Slic3r::data_dir(); - boost::filesystem::path data_dir_path(data_dir_str); - auto dll_path = data_dir_path / "plugins" / "BambuSource.dll"; - if (path.empty() || !wxFile::Exists(path) || clsid != CLSID_BAMBU_SOURCE) { - if (boost::filesystem::exists(dll_path)) { - CallAfter( - [dll_path] { - int res = wxMessageBox(_L("BambuSource has not correctly been registered for media playing! Press Yes to re-register it. You will be promoted twice"), _L("Error"), wxYES_NO); - if (res == wxYES) { - std::string regContent = R"(Windows Registry Editor Version 5.00 - [HKEY_CLASSES_ROOT\bambu] - "Source Filter"="{233E64FB-2041-4A6C-AFAB-FF9BCF83E7AA}" - )"; - - auto reg_path = (fs::temp_directory_path() / fs::unique_path()).replace_extension(".reg"); - std::ofstream temp_reg_file(reg_path.c_str()); - if (!temp_reg_file) { - return false; - } - temp_reg_file << regContent; - temp_reg_file.close(); - auto sei_params = L"/q /s " + reg_path.wstring(); - SHELLEXECUTEINFO sei{sizeof(sei), SEE_MASK_NOCLOSEPROCESS, NULL, L"open", - L"regedit", sei_params.c_str(),SW_HIDE,SW_HIDE}; - ::ShellExecuteEx(&sei); - - wstring quoted_dll_path = L"\"" + dll_path.wstring() + L"\""; - SHELLEXECUTEINFO info{sizeof(info), 0, NULL, L"runas", L"regsvr32", quoted_dll_path.c_str(), SW_HIDE }; - ::ShellExecuteEx(&info); - fs::remove(reg_path); - } - return true; - }); - } else { - CallAfter([] { - wxMessageBox(_L("Missing BambuSource component registered for media playing! Please re-install OrcaSlicer or seek community help."), _L("Error"), wxOK); - }); - } - m_error = clsid != CLSID_BAMBU_SOURCE ? 101 : path.empty() ? 102 : 103; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - return; - } - if (path != dll_path) { - static bool notified = false; - if (!notified) CallAfter([dll_path] { - int res = wxMessageBox(_L("Using a BambuSource from a different install, video play may not work correctly! Press Yes to fix it."), _L("Warning"), wxYES_NO | wxICON_WARNING); - if (res == wxYES) { - auto path = dll_path.wstring(); - if (path.find(L' ') != std::wstring::npos) - path = L"\"" + path + L"\""; - SHELLEXECUTEINFO info{sizeof(info), 0, NULL, L"open", L"regsvr32", path.c_str(), SW_HIDE}; - ::ShellExecuteEx(&info); - } - }); - notified = true; - } - wxRegKey keyWmp(wxRegKey::HKCU, "SOFTWARE\\Microsoft\\MediaPlayer\\Player\\Extensions\\."); - keyWmp.Create(); - long permissions = 0; - if (keyWmp.HasValue("Permissions")) - keyWmp.QueryValue("Permissions", &permissions); - if ((permissions & 32) == 0) { - permissions |= 32; - keyWmp.SetValue("Permissions", permissions); - } - } - url = wxURI(url.BuildURI().append("&hwnd=").append(boost::lexical_cast(GetHandle())).append("&tid=").append( - boost::lexical_cast(GetCurrentThreadId()))); -#endif -#ifdef __WXGTK3__ - GstElementFactory *factory; - int hasplugins = 1; - - factory = gst_element_factory_find("h264parse"); - if (!factory) { - hasplugins = 0; - } else { - gst_object_unref(factory); - } - - factory = gst_element_factory_find("openh264dec"); - if (!factory) { - factory = gst_element_factory_find("avdec_h264"); - } - if (!factory) { - factory = gst_element_factory_find("vaapih264dec"); - } - if (!factory) { - factory = gst_element_factory_find("vah264dec"); - } - if (!factory) { - factory = gst_element_factory_find("nvh264dec"); - } - if (!factory) { - factory = gst_element_factory_find("v4l2h264dec"); - } - if (!factory) { - hasplugins = 0; - } else { - gst_object_unref(factory); - } - - if (!hasplugins) { - CallAfter([] { - wxMessageBox(_L("Your system is missing H.264 codecs for GStreamer, which are required to play video. (Try installing the gstreamer1.0-plugins-bad or gstreamer1.0-libav packages, then restart Orca Slicer?)"), _L("Error"), wxOK); - }); - m_error = 101; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - return; - } - wxLog::EnableLogging(false); -#endif - m_error = 0; - m_loaded = false; -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_use_gtk_sink && m_gtk_playbin) { - const std::string uri = std::string(url.BuildURI().ToUTF8().data()); - gst_element_set_state(m_gtk_playbin, GST_STATE_NULL); - g_object_set(G_OBJECT(m_gtk_playbin), "uri", uri.c_str(), nullptr); - m_gtk_state = wxMEDIASTATE_STOPPED; - GstStateChangeReturn state = gst_element_set_state(m_gtk_playbin, GST_STATE_PAUSED); - if (state == GST_STATE_CHANGE_FAILURE) { - m_error = gst_bambu_last_error ? gst_bambu_last_error : 2; - PostGtkSinkStateEvent(GetId()); - } - return; - } - if (!m_imp) { - m_error = m_native_wayland && !m_gtk_sink_error.empty() ? 104 : 100; - m_loaded = false; - if (m_native_wayland && !m_gtk_sink_error.empty() && !m_gtk_sink_error_notified) { - m_gtk_sink_error_notified = true; - const wxString message = m_gtk_sink_error; - CallAfter([message] { - wxMessageBox(message, _L("Error"), wxOK); - }); - } - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - return; - } -#endif - wxMediaCtrl::Load(url); -} - -void wxMediaCtrl2::Play() -{ -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_use_gtk_sink && m_gtk_playbin) { - GstStateChangeReturn state = gst_element_set_state(m_gtk_playbin, GST_STATE_PLAYING); - if (state == GST_STATE_CHANGE_FAILURE) { - m_error = gst_bambu_last_error ? gst_bambu_last_error : 2; - m_gtk_state = wxMEDIASTATE_STOPPED; - PostGtkSinkStateEvent(GetId()); - } - return; - } - if (!m_imp) { - m_error = m_native_wayland && !m_gtk_sink_error.empty() ? 104 : 100; - if (m_native_wayland && !m_gtk_sink_error.empty() && !m_gtk_sink_error_notified) { - m_gtk_sink_error_notified = true; - const wxString message = m_gtk_sink_error; - CallAfter([message] { - wxMessageBox(message, _L("Error"), wxOK); - }); - } - PostGtkSinkStateEvent(GetId()); - return; - } -#endif - wxMediaCtrl::Play(); -} - -void wxMediaCtrl2::Stop() -{ -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_use_gtk_sink && m_gtk_playbin) { - gst_element_set_state(m_gtk_playbin, GST_STATE_NULL); - m_gtk_state = wxMEDIASTATE_STOPPED; - m_loaded = false; - PostGtkSinkStateEvent(0); - return; - } - if (!m_imp) - return; -#endif - wxMediaCtrl::Stop(); -} - -wxMediaState wxMediaCtrl2::GetState() -{ -#if defined(__LINUX__) && defined(__WXGTK__) - if (m_use_gtk_sink && m_gtk_playbin) - return m_gtk_state; - if (!m_imp) - return wxMEDIASTATE_STOPPED; -#endif - return wxMediaCtrl::GetState(); -} - -int wxMediaCtrl2::GetLastError() const -{ -#ifdef __LINUX__ -#ifdef __WXGTK__ - if (m_use_gtk_sink && m_error) - return m_error; -#endif - if (m_error) - return m_error; - return gst_bambu_last_error; -#else - return m_error; -#endif -} - -wxSize wxMediaCtrl2::GetVideoSize() const -{ -#ifdef __LINUX__ - // Gstreamer doesn't give us a VideoSize until we're playing, which - // confuses the MediaPlayCtrl into claiming that it is stuck - // "Loading...". Fake it out for now. - return m_loaded ? wxSize(1280, 720) : wxSize{}; -#else - wxSize size = m_imp ? m_imp->GetVideoSize() : wxSize(0, 0); - if (size.GetWidth() > 0) - const_cast(m_video_size) = size; - return size; -#endif -} - -wxSize wxMediaCtrl2::DoGetBestSize() const -{ - return {-1, -1}; -} - -#ifdef __WIN32__ - -WXLRESULT wxMediaCtrl2::MSWWindowProc(WXUINT nMsg, - WXWPARAM wParam, - WXLPARAM lParam) -{ - // The stream source sends WM_USER+1000 with a synchronous SendMessage from its own threads, - // so this runs re-entrantly on the UI thread at whatever message-retrieval point the player - // happens to be in - often nested inside an Orca log statement. Never BOOST_LOG_TRIVIAL here: - // boost::log is not re-entrant on one thread, and doing so corrupted its per-thread record - // state, crashing later in unrelated places (the player, the log filter, a plug-in heap free). - // Post the string out (as the stat branch does) and log it on a clean stack instead. - if (nMsg == WM_USER + 1000) { - wxString msg((wchar_t const *) lParam); - if (wParam == 1) { - if (msg.EndsWith("]")) { - int n = msg.find_last_of('['); - if (n != wxString::npos) { - long val = 0; - if (msg.SubString(n + 1, msg.Length() - 2).ToLong(&val)) - m_error = (int) val; - } - } else if (msg.Contains("stat_log")) { - wxCommandEvent evt(EVT_MEDIA_CTRL_STAT); - evt.SetEventObject(this); - evt.SetString(msg.Mid(msg.Find(' ') + 1)); - wxPostEvent(this, evt); - } - } - return 0; - } - return wxMediaCtrl::MSWWindowProc(nMsg, wParam, lParam); -} - -#endif diff --git a/src/slic3r/GUI/wxMediaCtrl2.h b/src/slic3r/GUI/wxMediaCtrl2.h deleted file mode 100644 index 4f37b5cd1e..0000000000 --- a/src/slic3r/GUI/wxMediaCtrl2.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// wxMediaCtrl2.h -// libslic3r_gui -// -// Created by cmguo on 2021/12/7. -// - -#ifndef wxMediaCtrl2_h -#define wxMediaCtrl2_h - -#include "wx/uri.h" -#include "wx/mediactrl.h" - -wxDECLARE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); - -#if defined(__LINUX__) && defined(__WXGTK__) -typedef struct _GstElement GstElement; -#endif - -#ifdef __WXMAC__ - -class wxMediaCtrl2 : public wxWindow -{ -public: - wxMediaCtrl2(wxWindow * parent); - - ~wxMediaCtrl2(); - - void Load(wxURI url); - - void Play(); - - void Stop(); - - void SetIdleImage(wxString const & image); - - wxMediaState GetState() const; - - wxSize GetVideoSize() const; - - int GetLastError() const { return m_error; } - - static inline const wxMediaState MEDIASTATE_BUFFERING = static_cast(6); - -protected: - void DoSetSize(int x, int y, int width, int height, int sizeFlags) override; - - static void bambu_log(void const * ctx, int level, char const * msg); - - void NotifyStopped(); - -private: - void create_player(); - void * m_player = nullptr; - wxMediaState m_state = wxMEDIASTATE_STOPPED; - int m_error = 0; - wxSize m_video_size{16, 9}; -}; - -#else - -class wxMediaCtrl2 : public wxMediaCtrl -{ -public: - wxMediaCtrl2(wxWindow *parent); - ~wxMediaCtrl2(); - - void Load(wxURI url); - - void Play(); - - void Stop(); - - void SetIdleImage(wxString const & image); - - wxMediaState GetState(); - - int GetLastError() const; - - wxSize GetVideoSize() const; - -protected: - wxSize DoGetBestSize() const override; - - void DoSetSize(int x, int y, int width, int height, int sizeFlags) override; - -#ifdef __WIN32__ - WXLRESULT MSWWindowProc(WXUINT nMsg, - WXWPARAM wParam, - WXLPARAM lParam) override; -#endif - -private: -#if defined(__LINUX__) && defined(__WXGTK__) - bool CreateGtkSinkPlayer(); - void DestroyGtkSinkPlayer(); - void PostGtkSinkStateEvent(int id = 0); - - bool m_native_wayland = false; - bool m_use_gtk_sink = false; - wxString m_gtk_sink_error; - bool m_gtk_sink_error_notified = false; - GstElement *m_gtk_playbin = nullptr; - GstElement *m_gtk_sink = nullptr; - unsigned int m_gtk_bus_watch_id = 0; - wxWindow *m_gtk_video_window = nullptr; - wxMediaState m_gtk_state = wxMEDIASTATE_STOPPED; -#endif - wxString m_idle_image; - int m_error = 0; - bool m_loaded = false; - wxSize m_video_size{16, 9}; -}; - -#endif - -#endif /* wxMediaCtrl2_h */ diff --git a/src/slic3r/GUI/wxMediaCtrl2.mm b/src/slic3r/GUI/wxMediaCtrl2.mm deleted file mode 100644 index 063472eccc..0000000000 --- a/src/slic3r/GUI/wxMediaCtrl2.mm +++ /dev/null @@ -1,170 +0,0 @@ -// -// wxMediaCtrl2.m -// OrcaSlicer -// -// Created by cmguo on 2021/12/7. -// - -#import "wxMediaCtrl2.h" -#import "wx/mediactrl.h" -#include - -#import -#import "BambuPlayer/BambuPlayer.h" -#import "../Utils/NetworkAgent.hpp" - -#include -#include - -wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); - -#define BAMBU_DYNAMIC - -void wxMediaCtrl2::bambu_log(void const * ctx, int level, char const * msg) -{ - if (level == 1) { - wxString msg2(msg); - if (msg2.EndsWith("]")) { - int n = msg2.find_last_of('['); - if (n != wxString::npos) { - long val = 0; - wxMediaCtrl2 * ctrl = (wxMediaCtrl2 *) ctx; - if (msg2.SubString(n + 1, msg2.Length() - 2).ToLong(&val)) - ctrl->m_error = (int) val; - } - } else if (strstr(msg, "stat_log")) { - wxMediaCtrl2 * ctrl = (wxMediaCtrl2 *) ctx; - wxCommandEvent evt(EVT_MEDIA_CTRL_STAT); - evt.SetEventObject(ctrl); - evt.SetString(strchr(msg, ' ') + 1); - wxPostEvent(ctrl, evt); - } - } else if (level < 0) { - wxMediaCtrl2 * ctrl = (wxMediaCtrl2 *) ctx; - ctrl->NotifyStopped(); - } - BOOST_LOG_TRIVIAL(info) << msg; -} - -wxMediaCtrl2::wxMediaCtrl2(wxWindow * parent) - : wxWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) -{ - NSView * imageView = (NSView *) GetHandle(); - imageView.layer = [[CALayer alloc] init]; - CGColorRef color = CGColorCreateGenericRGB(0, 0, 0, 1.0f); - imageView.layer.backgroundColor = color; - CGColorRelease(color); - imageView.wantsLayer = YES; - create_player(); -} - -wxMediaCtrl2::~wxMediaCtrl2() -{ - BambuPlayer * player = (BambuPlayer *) m_player; - [player dealloc]; -} - -void wxMediaCtrl2::create_player() -{ - auto module = Slic3r::NetworkAgent::get_bambu_source_entry(); - if (!module) { - //not ready yet - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Network plugin not ready currently!"; - return; - } - Class cls = (__bridge Class) dlsym(module, "OBJC_CLASS_$_BambuPlayer"); - if (cls == nullptr) { - m_error = -2; - return; - } - NSView * imageView = (NSView *) GetHandle(); - BambuPlayer * player = [cls alloc]; - [player initWithImageView: imageView]; - [player setLogger: bambu_log withContext: this]; - m_player = player; -} - -void wxMediaCtrl2::Load(wxURI url) -{ - if (!m_player) { - create_player(); - if (!m_player) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": create_player failed currently!"; - return; - } - } - - BambuPlayer * player = (BambuPlayer *) m_player; - if (player) { - [player close]; - m_error = 0; - m_error = [player open: url.BuildURI().ToUTF8()]; - } - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); -} - -void wxMediaCtrl2::Play() -{ - if (!m_player) { - create_player(); - if (!m_player) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": create_player failed currently!"; - return; - } - } - BambuPlayer * player2 = (BambuPlayer *) m_player; - [player2 play]; - if (m_state != wxMEDIASTATE_PLAYING) { - m_state = wxMEDIASTATE_PLAYING; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - } -} - -void wxMediaCtrl2::Stop() -{ - if (!m_player) { - create_player(); - if (!m_player) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": create_player failed currently!"; - return; - } - } - BambuPlayer * player2 = (BambuPlayer *) m_player; - [player2 close]; - NotifyStopped(); -} - -void wxMediaCtrl2::NotifyStopped() -{ - if (m_state != wxMEDIASTATE_STOPPED) { - m_state = wxMEDIASTATE_STOPPED; - wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); - event.SetId(GetId()); - event.SetEventObject(this); - wxPostEvent(this, event); - } -} - -wxMediaState wxMediaCtrl2::GetState() const -{ - return m_state; -} - -wxSize wxMediaCtrl2::GetVideoSize() const -{ - BambuPlayer * player2 = (BambuPlayer *) m_player; - if (player2) { - NSSize size = [player2 videoSize]; - if (size.width > 0) - const_cast(m_video_size) = {(int) size.width, (int) size.height}; - return {(int) size.width, (int) size.height}; - } else { - return {0, 0}; - } -} diff --git a/src/slic3r/GUI/wxMediaCtrl3.cpp b/src/slic3r/GUI/wxMediaCtrl3.cpp new file mode 100644 index 0000000000..098db68808 --- /dev/null +++ b/src/slic3r/GUI/wxMediaCtrl3.cpp @@ -0,0 +1,313 @@ +#include "wxMediaCtrl3.h" +#include "AVVideoDecoder.hpp" +#include "I18N.hpp" +#include "libslic3r/Utils.hpp" +#include +#include +#ifdef __WIN32__ +#include +#include +#include +#endif + +wxDEFINE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); + +BEGIN_EVENT_TABLE(wxMediaCtrl3, wxWindow) + +// catch paint events +EVT_PAINT(wxMediaCtrl3::paintEvent) + +END_EVENT_TABLE() + +struct StaticBambuLib : BambuLib +{ + static StaticBambuLib &get(BambuLib *); +}; + +wxMediaCtrl3::wxMediaCtrl3(wxWindow *parent) + : wxWindow(parent, wxID_ANY) + , BambuLib(StaticBambuLib::get(this)) + , m_thread([this] { PlayThread(); }) +{ + SetBackgroundColour("#000001ff"); +} + +wxMediaCtrl3::~wxMediaCtrl3() +{ + { + std::unique_lock lk(m_mutex); + m_url.reset(new wxURI); + m_frame = wxImage(m_idle_image); + m_cond.notify_all(); + } + m_thread.join(); +} + +void wxMediaCtrl3::Load(wxURI url) +{ + std::unique_lock lk(m_mutex); + m_video_size = wxDefaultSize; + m_error = 0; + m_url.reset(new wxURI(url)); + m_cond.notify_all(); +} + +void wxMediaCtrl3::Play() +{ + std::unique_lock lk(m_mutex); + if (m_state != wxMEDIASTATE_PLAYING) { + m_state = wxMEDIASTATE_PLAYING; + wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); + event.SetId(GetId()); + event.SetEventObject(this); + wxPostEvent(this, event); + } +} + +void wxMediaCtrl3::Stop() +{ + std::unique_lock lk(m_mutex); + m_url.reset(); + m_frame = wxImage(m_idle_image); + NotifyStopped(); + m_cond.notify_all(); + Refresh(); +} + +void wxMediaCtrl3::SetIdleImage(wxString const &image) +{ + if (m_idle_image == image) + return; + m_idle_image = image; + if (m_url == nullptr) { + std::unique_lock lk(m_mutex); + m_frame = wxImage(m_idle_image); + assert(m_frame.IsOk()); + Refresh(); + } +} + +wxMediaState wxMediaCtrl3::GetState() +{ + std::unique_lock lk(m_mutex); + return m_state; +} + +int wxMediaCtrl3::GetLastError() +{ + std::unique_lock lk(m_mutex); + return m_error; +} + +wxSize wxMediaCtrl3::GetVideoSize() +{ + std::unique_lock lk(m_mutex); + return m_video_size; +} + +wxSize wxMediaCtrl3::DoGetBestSize() const +{ + return {-1, -1}; +} + +static void adjust_frame_size(wxSize & frame, wxSize const & video, wxSize const & window) +{ + if (video.x * window.y < video.y * window.x) + frame = { video.x * window.y / video.y, window.y }; + else + frame = { window.x, video.y * window.x / video.x }; +} + +void wxMediaCtrl3::paintEvent(wxPaintEvent &evt) +{ + wxPaintDC dc(this); + auto size = GetSize(); + if (size.x <= 0 || size.y <= 0) + return; + std::unique_lock lk(m_mutex); + if (!m_frame.IsOk()) + return; + auto size2 = m_frame.GetSize(); + if (size2.x != m_frame_size.x && size2.y == m_frame_size.y) + size2.x = m_frame_size.x; + auto size3 = (size - size2) / 2; + if (size2.x != size.x && size2.y != size.y) { + double scale = 1.; + if (size.x * size2.y > size.y * size2.x) { + size3 = {size.x * size2.y / size.y, size2.y}; + scale = double(size.y) / size2.y; + } else { + size3 = {size2.x, size.y * size2.x / size.x}; + scale = double(size.x) / size2.x; + } + dc.SetUserScale(scale, scale); + size3 = (size3 - size2) / 2; + } + dc.DrawBitmap(m_frame, size3.x, size3.y); +} + +void wxMediaCtrl3::DoSetSize(int x, int y, int width, int height, int sizeFlags) +{ + wxWindow::DoSetSize(x, y, width, height, sizeFlags); + if (sizeFlags == wxSIZE_USE_EXISTING) return; + wxMediaCtrl_OnSize(this, m_video_size, width, height); + std::unique_lock lk(m_mutex); + adjust_frame_size(m_frame_size, m_video_size, GetSize()); + Refresh(); +} + +void wxMediaCtrl3::bambu_log(void *ctx, int level, tchar const *msg2) +{ +#ifdef _WIN32 + wxString msg(msg2); +#else + wxString msg = wxString::FromUTF8(msg2); +#endif + if (level == 1) { + if (msg.EndsWith("]")) { + int n = msg.find_last_of('['); + if (n != wxString::npos) { + long val = 0; + wxMediaCtrl3 *ctrl = (wxMediaCtrl3 *) ctx; + if (msg.SubString(n + 1, msg.Length() - 2).ToLong(&val)) { + std::unique_lock lk(ctrl->m_mutex); + ctrl->m_error = (int) val; + } + } + } else if (msg.Contains("stat_log")) { + wxCommandEvent evt(EVT_MEDIA_CTRL_STAT); + wxMediaCtrl3 *ctrl = (wxMediaCtrl3 *) ctx; + evt.SetEventObject(ctrl); + evt.SetString(msg.Mid(msg.Find(' ') + 1)); + wxPostEvent(ctrl, evt); + } + } + BOOST_LOG_TRIVIAL(info) << msg.ToUTF8().data(); +} + +void wxMediaCtrl3::PlayThread() +{ + using namespace std::chrono_literals; + std::shared_ptr url; + std::unique_lock lk(m_mutex); + while (true) { + m_cond.wait(lk, [this, &url] { return m_url != url; }); + url = m_url; + if (url == nullptr) + continue; + if (!url->HasScheme()) + break; + lk.unlock(); + Bambu_Tunnel tunnel = nullptr; + int error = Bambu_Create(&tunnel, m_url->BuildURI().ToUTF8()); + if (error == 0) { + Bambu_SetLogger(tunnel, &wxMediaCtrl3::bambu_log, this); + error = Bambu_Open(tunnel); + if (error == 0) + error = Bambu_would_block; + } + lk.lock(); + while (error == int(Bambu_would_block)) { + m_cond.wait_for(lk, 100ms); + if (m_url != url) { + error = 1; + break; + } + lk.unlock(); + error = Bambu_StartStream(tunnel, true); + lk.lock(); + } + Bambu_StreamInfo info; + if (error == 0) + error = Bambu_GetStreamInfo(tunnel, 0, &info); + AVVideoDecoder decoder; + int minFrameDuration = 0; + if (error == 0) { + decoder.open(info); + m_video_size = { info.format.video.width, info.format.video.height }; + adjust_frame_size(m_frame_size, m_video_size, GetSize()); + minFrameDuration = 800 / info.format.video.frame_rate; // 80% + NotifyStopped(); + } + Bambu_Sample sample; + while (error == 0) { + lk.unlock(); + error = Bambu_ReadSample(tunnel, &sample); + lk.lock(); + while (error == int(Bambu_would_block)) { + m_cond.wait_for(lk, 100ms); + if (m_url != url) { + error = 1; + break; + } + lk.unlock(); + error = Bambu_ReadSample(tunnel, &sample); + lk.lock(); + } + if (error == 0) { + auto frame_size = m_frame_size; + lk.unlock(); + decoder.decode(sample); +#ifdef _WIN32 + wxBitmap bm; + decoder.toWxBitmap(bm, frame_size); +#else + wxImage bm; + decoder.toWxImage(bm, frame_size); +#endif + lk.lock(); + if (m_url != url) { + error = 1; + break; + } + if (bm.IsOk()) { + auto now = std::chrono::system_clock::now(); + if (m_last_PTS && (sample.decode_time - m_last_PTS) < 30000000ULL) { // 3s + auto next_PTS_expected = m_last_PTS_expected + std::chrono::milliseconds((sample.decode_time - m_last_PTS) / 10000ULL); + // The frame is late, catch up a little + auto next_PTS_practical = m_last_PTS_practical + std::chrono::milliseconds(minFrameDuration); + auto next_PTS = std::max(next_PTS_expected, next_PTS_practical); + if(now < next_PTS) + std::this_thread::sleep_until(next_PTS); + else + next_PTS = now; + //auto text = wxString::Format(L"wxMediaCtrl3 pts diff %ld\n", std::chrono::duration_cast(next_PTS - next_PTS_expected).count()); + //OutputDebugString(text); + m_last_PTS = sample.decode_time; + m_last_PTS_expected = next_PTS_expected; + m_last_PTS_practical = next_PTS; + } else { + // Resync + m_last_PTS = sample.decode_time; + m_last_PTS_expected = now; + m_last_PTS_practical = now; + } + m_frame = bm; + } + CallAfter([this] { Refresh(); }); + } + } + if (tunnel) { + lk.unlock(); + Bambu_Close(tunnel); + Bambu_Destroy(tunnel); + tunnel = nullptr; + lk.lock(); + } + if (m_url == url) + m_error = error; + m_frame_size = wxDefaultSize; + m_video_size = wxDefaultSize; + NotifyStopped(); + } + +} + +void wxMediaCtrl3::NotifyStopped() +{ + m_state = wxMEDIASTATE_STOPPED; + wxMediaEvent event(wxEVT_MEDIA_STATECHANGED); + event.SetId(GetId()); + event.SetEventObject(this); + wxPostEvent(this, event); +} diff --git a/src/slic3r/GUI/wxMediaCtrl3.h b/src/slic3r/GUI/wxMediaCtrl3.h new file mode 100644 index 0000000000..ff4595ad32 --- /dev/null +++ b/src/slic3r/GUI/wxMediaCtrl3.h @@ -0,0 +1,88 @@ +// +// wxMediaCtrl3.h +// libslic3r_gui +// +// Created by cmguo on 2024/6/22. +// + +#ifndef wxMediaCtrl3_h +#define wxMediaCtrl3_h + +#include +#include "wx/window.h" +#include "wx/bitmap.h" +#include "wx/uri.h" +#include "wx/mediactrl.h" + +wxDECLARE_EVENT(EVT_MEDIA_CTRL_STAT, wxCommandEvent); + +void wxMediaCtrl_OnSize(wxWindow * ctrl, wxSize const & videoSize, int width, int height); + +#define BAMBU_DYNAMIC +#include +#include +#ifndef _WIN32 +#include +#endif +#include "Printer/BambuTunnel.h" + +class AVVideoDecoder; + +class wxMediaCtrl3 : public wxWindow, BambuLib +{ +public: + wxMediaCtrl3(wxWindow *parent); + + ~wxMediaCtrl3(); + + void Load(wxURI url); + + void Play(); + + void Stop(); + + void SetIdleImage(wxString const & image); + + wxMediaState GetState(); + + int GetLastError(); + + wxSize GetVideoSize(); + +protected: + DECLARE_EVENT_TABLE() + + void paintEvent(wxPaintEvent &evt); + + wxSize DoGetBestSize() const override; + + void DoSetSize(int x, int y, int width, int height, int sizeFlags) override; + + static void bambu_log(void *ctx, int level, tchar const *msg); + + void PlayThread(); + + void NotifyStopped(); + +private: + wxString m_idle_image; + wxMediaState m_state = wxMEDIASTATE_STOPPED; + int m_error = 0; + wxSize m_video_size = wxDefaultSize; + wxSize m_frame_size = wxDefaultSize; +#ifdef _WIN32 + wxBitmap m_frame; +#else + wxImage m_frame; +#endif + + std::shared_ptr m_url; + std::uint64_t m_last_PTS{0}; + std::chrono::system_clock::time_point m_last_PTS_expected; + std::chrono::system_clock::time_point m_last_PTS_practical; + std::mutex m_mutex; + std::condition_variable m_cond; + std::thread m_thread; +}; + +#endif /* wxMediaCtrl3_h */ diff --git a/src/slic3r/GitCommitHash.cmake b/src/slic3r/GitCommitHash.cmake new file mode 100644 index 0000000000..9302885e6a --- /dev/null +++ b/src/slic3r/GitCommitHash.cmake @@ -0,0 +1,51 @@ +# Writes GIT_COMMIT_HASH and GIT_COMMIT_SUFFIX into a generated header. +# GIT_COMMIT_SUFFIX is "-dirty" for a build with uncommitted changes, and empty +# otherwise. +# +# A custom target runs this at the start of every build, which picks up a new +# commit without a reconfigure. The header is rewritten only when the value +# changes. +# +# Inputs: SOURCE_DIR, OUT_FILE. + +find_package(Git QUIET) + +set(HASH "") +set(SUFFIX "") + +if (DEFINED ENV{git_commit_hash} AND NOT "$ENV{git_commit_hash}" STREQUAL "") + if (GIT_FOUND AND EXISTS "${SOURCE_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short "$ENV{git_commit_hash}" + WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + else () + # No .git directory (e.g. Flatpak sandbox) - truncate directly + string(SUBSTRING "$ENV{git_commit_hash}" 0 7 HASH) + endif () +elseif (GIT_FOUND AND EXISTS "${SOURCE_DIR}/.git") + execute_process(COMMAND ${GIT_EXECUTABLE} log -1 --format=%h + WORKING_DIRECTORY ${SOURCE_DIR} OUTPUT_VARIABLE HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet HEAD + WORKING_DIRECTORY ${SOURCE_DIR} RESULT_VARIABLE DIRTY ERROR_QUIET) + if (DIRTY EQUAL 1) + set(SUFFIX "-dirty") + endif () +endif () + +if (NOT HASH) + set(HASH "0000000") # uninitialized +endif () + +message(STATUS "Build commit: ${HASH}${SUFFIX}") + +string(CONCAT CONTENT + "#pragma once\n" + "#define GIT_COMMIT_HASH \"${HASH}\"\n" + "#define GIT_COMMIT_SUFFIX \"${SUFFIX}\"\n") + +set(OLD "") +if (EXISTS "${OUT_FILE}") + file(READ "${OUT_FILE}" OLD) +endif () +if (NOT OLD STREQUAL CONTENT) + file(WRITE "${OUT_FILE}" "${CONTENT}") +endif () diff --git a/src/slic3r/Utils/3DPrinterOS.cpp b/src/slic3r/Utils/3DPrinterOS.cpp index 79c8a62700..503dbe63e3 100755 --- a/src/slic3r/Utils/3DPrinterOS.cpp +++ b/src/slic3r/Utils/3DPrinterOS.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include @@ -30,6 +31,8 @@ #include +using json = nlohmann::json; + namespace fs = boost::filesystem; namespace pt = boost::property_tree; @@ -323,7 +326,7 @@ bool C3DPrinterOS::login(wxString& msg) const msg.clear(); std::string token = get_api_auth_token(msg); if (token.empty()) { - msg = _L("Error. Can't get api token for authorization"); + msg = _L("Error. Can't get API token for authorization"); return false; } @@ -627,7 +630,7 @@ void C3DPrinterOS::send_form( responseTree.put("result", false); responseTree.put("message", error); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { std::stringstream ss(body); try { pt::read_json(ss, responseTree); diff --git a/src/slic3r/Utils/BBLCloudServiceAgent.cpp b/src/slic3r/Utils/BBLCloudServiceAgent.cpp index 846e4ce509..801ad1cf57 100644 --- a/src/slic3r/Utils/BBLCloudServiceAgent.cpp +++ b/src/slic3r/Utils/BBLCloudServiceAgent.cpp @@ -8,6 +8,9 @@ #include #include #include + +using json = nlohmann::json; + namespace Slic3r { diff --git a/src/slic3r/Utils/BBLNetworkPlugin.cpp b/src/slic3r/Utils/BBLNetworkPlugin.cpp index 607e7d16d1..d795abf354 100644 --- a/src/slic3r/Utils/BBLNetworkPlugin.cpp +++ b/src/slic3r/Utils/BBLNetworkPlugin.cpp @@ -349,7 +349,7 @@ void* BBLNetworkPlugin::get_function(const char* name) return function; #if defined(_MSC_VER) || defined(_WIN32) - function = GetProcAddress(m_networking_module, name); + function = reinterpret_cast(GetProcAddress(m_networking_module, name)); #else function = dlsym(m_networking_module, name); #endif diff --git a/src/slic3r/Utils/BBLPrinterAgent.cpp b/src/slic3r/Utils/BBLPrinterAgent.cpp index ef85e0a1ff..0c6225cc55 100644 --- a/src/slic3r/Utils/BBLPrinterAgent.cpp +++ b/src/slic3r/Utils/BBLPrinterAgent.cpp @@ -1,11 +1,132 @@ #include "BBLPrinterAgent.hpp" #include "BBLNetworkPlugin.hpp" #include "NetworkAgentFactory.hpp" +#include "libslic3r/Utils.hpp" #include +#include +#include +using json = nlohmann::json; + +#include +#include namespace Slic3r { +namespace { + +// Bambu's own catalog ids for every filament this app ships, Bambu's own included, since Orca +// content-addresses those too. Keyed both ways so each of the four translation entry points +// below is a single lookup. Loaded once per process, on first use. A missing or malformed file +// logs once and leaves both maps empty, so every translation degrades to identity. Same shape +// as DevFilaBlacklist::load_filaments_blacklist_config. +struct BambuFilamentIdMap { std::unordered_map to_bambu, to_orca; }; + +const BambuFilamentIdMap& bambu_filament_id_map() +{ + static const BambuFilamentIdMap map = [] { + BambuFilamentIdMap m; + const std::string path = resources_dir() + "/printers/bambu_filament_ids.json"; + try { + boost::nowide::ifstream file(path); + if (!file.is_open()) { + BOOST_LOG_TRIVIAL(warning) << "Bambu filament id map not found, ids pass through untranslated: " << path; + return m; + } + json doc; + file >> doc; + for (const auto& [orca_filament_id, row] : doc.at("filaments").items()) { + const std::string bambu_id = row.at("bambu_id").get(); + m.to_bambu.emplace(orca_filament_id, bambu_id); + m.to_orca.emplace(bambu_id, orca_filament_id); + } + } catch (const std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "Bambu filament id map unreadable, ids pass through untranslated: " << e.what(); + m = {}; + } + return m; + }(); + return map; +} + +// Rewrites every string under "tray_info_idx", "filament_id" or "filamentId", at any depth, in place. +void rewrite_filament_ids(json& j, const std::unordered_map& map) +{ + if (j.is_object()) { + for (auto& [key, value] : j.items()) { + if (value.is_string() && (key == "tray_info_idx" || key == "filament_id" || key == "filamentId")) { + auto it = map.find(value.get_ref()); + if (it != map.end()) + value = it->second; + } else + rewrite_filament_ids(value, map); + } + } else if (j.is_array()) + for (auto& element : j) + rewrite_filament_ids(element, map); +} + +// Text that does not parse as JSON, or that mentions none of the id keys, comes back byte-identical. +std::string rewrite_filament_ids(std::string text, const std::unordered_map& map) +{ + if (map.empty() || (text.find("tray_info_idx") == std::string::npos && text.find("filament_id") == std::string::npos && + text.find("filamentId") == std::string::npos)) + return text; // nothing to map, skip the parse (moved, not copied) + try { + json j = json::parse(text); + rewrite_filament_ids(j, map); + return j.dump(); + } catch (const std::exception&) { + return text; // not JSON: forward as received + } +} + +// Wraps an inbound message callback so every Bambu id it delivers arrives already translated. +// A null fn is a deregistration (see GUI_App.cpp's shutdown phase 1 and NetworkAgent::apply_printer_callbacks +// clearing callbacks with {}), and must stay null rather than become a live wrapper around an empty target. +OnMessageFn to_orca_messages(OnMessageFn fn) +{ + if (!fn) + return fn; + return [fn = std::move(fn)](std::string dev_id, std::string msg) { fn(std::move(dev_id), BBLPrinterAgent::to_orca_payload(std::move(msg))); }; +} + +// Retypes a plug-in entry point for an older plug-in generation. The detour through the +// generic function pointer marks the signature change as deliberate, which a direct cast +// between two signatures does not. +template +To as_abi(From fn) +{ + static_assert(std::is_function_v>, "as_abi retypes a function pointer"); + return reinterpret_cast(reinterpret_cast(fn)); +} + +} // namespace + +std::string BBLPrinterAgent::to_orca_filament_id(const std::string& printer_filament_id) const +{ + const auto& map = bambu_filament_id_map().to_orca; + auto it = map.find(printer_filament_id); + return it != map.end() ? it->second : printer_filament_id; +} + +std::string BBLPrinterAgent::from_orca_filament_id(const std::string& orca_filament_id) const +{ + const auto& map = bambu_filament_id_map().to_bambu; + auto it = map.find(orca_filament_id); + return it != map.end() ? it->second : orca_filament_id; +} + +std::string BBLPrinterAgent::to_orca_payload(std::string json_text) +{ + return rewrite_filament_ids(std::move(json_text), bambu_filament_id_map().to_orca); +} + +std::string BBLPrinterAgent::from_orca_payload(std::string json_text) +{ + return rewrite_filament_ids(std::move(json_text), bambu_filament_id_map().to_bambu); +} + BBLPrinterAgent::BBLPrinterAgent() = default; BBLPrinterAgent::~BBLPrinterAgent() = default; @@ -22,6 +143,7 @@ void BBLPrinterAgent::set_cloud_agent(std::shared_ptr cloud) int BBLPrinterAgent::send_message(std::string dev_id, std::string json_str, int qos, int flag) { + json_str = from_orca_payload(std::move(json_str)); auto& plugin = BBLNetworkPlugin::instance(); auto agent = plugin.get_agent(); auto func = plugin.get_send_message(); @@ -30,7 +152,7 @@ int BBLPrinterAgent::send_message(std::string dev_id, std::string json_str, int // series through the legacy form would silently drop MessageFlag sign/encrypt. switch (plugin.network_abi()) { case NetworkAbi::Legacy: { - auto legacy_func = reinterpret_cast(func); + auto legacy_func = as_abi(func); return legacy_func(agent, std::move(dev_id), std::move(json_str), qos); } case NetworkAbi::V0203: @@ -67,13 +189,14 @@ int BBLPrinterAgent::disconnect_printer() int BBLPrinterAgent::send_message_to_printer(std::string dev_id, std::string json_str, int qos, int flag) { + json_str = from_orca_payload(std::move(json_str)); auto& plugin = BBLNetworkPlugin::instance(); auto agent = plugin.get_agent(); auto func = plugin.get_send_message_to_printer(); if (func && agent) { switch (plugin.network_abi()) { case NetworkAbi::Legacy: { - auto legacy_func = reinterpret_cast(func); + auto legacy_func = as_abi(func); return legacy_func(agent, std::move(dev_id), std::move(json_str), qos); } case NetworkAbi::V0203: @@ -163,7 +286,7 @@ int BBLPrinterAgent::bind(std::string dev_ip, std::string dev_id, std::string de switch (plugin.network_abi()) { case NetworkAbi::Legacy: case NetworkAbi::V0203: { - auto older_func = reinterpret_cast(func); + auto older_func = as_abi(func); return older_func(agent, dev_ip, dev_id, sec_link, timezone, improved, update_fn); } case NetworkAbi::Current: @@ -321,11 +444,12 @@ int dispatch_start(CurrentFn func, PrintParams& params, const CallbackFns&... ca auto agent = plugin.get_agent(); if (!func || !agent) return -1; + params.ams_mapping_info = BBLPrinterAgent::from_orca_payload(std::move(params.ams_mapping_info)); switch (plugin.network_abi()) { case NetworkAbi::Legacy: - return reinterpret_cast(func)(agent, BBLNetworkPlugin::as_legacy(params), callbacks...); + return as_abi(func)(agent, BBLNetworkPlugin::as_legacy(params), callbacks...); case NetworkAbi::V0203: - return reinterpret_cast(func)(agent, BBLNetworkPlugin::as_0203(params), callbacks...); + return as_abi(func)(agent, BBLNetworkPlugin::as_0203(params), callbacks...); case NetworkAbi::Current: return func(agent, std::move(params), callbacks...); default: @@ -408,7 +532,7 @@ int BBLPrinterAgent::set_on_message_fn(OnMessageFn fn) auto agent = plugin.get_agent(); auto func = plugin.get_set_on_message_fn(); if (func && agent) { - return func(agent, fn); + return func(agent, to_orca_messages(std::move(fn))); } return -1; } @@ -441,7 +565,7 @@ int BBLPrinterAgent::set_on_local_message_fn(OnMessageFn fn) auto agent = plugin.get_agent(); auto func = plugin.get_set_on_local_message_fn(); if (func && agent) { - return func(agent, fn); + return func(agent, to_orca_messages(std::move(fn))); } return -1; } diff --git a/src/slic3r/Utils/BBLPrinterAgent.hpp b/src/slic3r/Utils/BBLPrinterAgent.hpp index a8880bf6bf..83e21bb6d8 100644 --- a/src/slic3r/Utils/BBLPrinterAgent.hpp +++ b/src/slic3r/Utils/BBLPrinterAgent.hpp @@ -84,6 +84,20 @@ public: int set_queue_on_main_fn(QueueOnMainFn fn) override; FilamentSyncMode get_filament_sync_mode() const override; + // Bambu's own catalog ids. Orca content-addresses every system filament, Bambu's included; + // the printer, the AMS and Bambu's cloud know only Bambu's ids, so this agent translates at + // the boundary through resources/printers/bambu_filament_ids.json (generated by + // scripts/update_bambu_filament_ids.py). An id without a map row is returned as it is. + std::string to_orca_filament_id(const std::string& printer_filament_id) const override; + std::string from_orca_filament_id(const std::string& orca_filament_id) const override; + + // Rewrite every string under "tray_info_idx", "filament_id" or "filamentId", at any depth, + // in a JSON document (an MQTT payload or PrintParams::ams_mapping_info). Text that does not + // parse, or contains none of the keys, is returned unchanged. + // Taken by value: most outbound traffic carries no filament id and is moved straight back out. + static std::string to_orca_payload(std::string json_text); + static std::string from_orca_payload(std::string json_text); + private: std::shared_ptr m_cloud_agent; }; diff --git a/src/slic3r/Utils/Bonjour.hpp b/src/slic3r/Utils/Bonjour.hpp index 50b71791fa..3ef8f0e1a2 100644 --- a/src/slic3r/Utils/Bonjour.hpp +++ b/src/slic3r/Utils/Bonjour.hpp @@ -115,6 +115,7 @@ class UdpSession { public: UdpSession(Bonjour::ReplyFn rfn); + virtual ~UdpSession() = default; virtual void handle_receive(const boost::system::error_code& error, size_t bytes) = 0; std::vector buffer; boost::asio::ip::udp::endpoint remote_endpoint; diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 473f62337f..e432ccc152 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -3,6 +3,7 @@ #include "../GUI/GUI_App.hpp" #include "../GUI/DeviceCore/DevStorage.h" #include "../GUI/DeviceManager.hpp" +#include "NetworkAgent.hpp" #include "../GUI/Jobs/ProgressIndicator.hpp" #include "../GUI/PartPlate.hpp" #include "libslic3r/CutUtils.hpp" @@ -62,22 +63,29 @@ std::vector not_support_auto_pa_cali_filaments = { void get_default_k_n_value(const std::string &filament_id, float &k, float &n) { - if (filament_id.compare("GFU01") == 0) { + // filament_id is our OF id; the literals below are the printer's own. An id the agent has + // no mapping for (e.g. a caller still on the old id) passes through unchanged. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(filament_id) : filament_id; + if (printer_filament_id.compare("GFU01") == 0) { /* TPU 95A */ k = 0.25; n = 1.0; - } else if (filament_id.compare("GFU03") == 0) { + } else if (printer_filament_id.compare("GFU03") == 0) { /* TPU 90A */ k = 0.35; n = 1.0; - } else if (filament_id.compare("GFU04") == 0) { + } else if (printer_filament_id.compare("GFU04") == 0) { /* TPU 85A */ k = 0.65; n = 1.0; - } else if (filament_id.compare("GFG00") == 0 || filament_id.compare("GFG01") == 0 || filament_id.compare("GFG60") == 0 || filament_id.compare("GFL06") == 0 || - filament_id.compare("GFL55") == 0 || filament_id.compare("GFG99") == 0 || filament_id.compare("GFG98") == 0 || filament_id.compare("GFG97") == 0 || - filament_id.compare("GFG50") == 0 || filament_id.compare("GFU02") == 0 || filament_id.compare("GFU98") == 0 || filament_id.compare("GFS00") == 0 || - filament_id.compare("GFS02") == 0) { + } else if (printer_filament_id.compare("GFG00") == 0 || printer_filament_id.compare("GFG01") == 0 || + printer_filament_id.compare("GFG60") == 0 || printer_filament_id.compare("GFL06") == 0 || + printer_filament_id.compare("GFL55") == 0 || printer_filament_id.compare("GFG99") == 0 || + printer_filament_id.compare("GFG98") == 0 || printer_filament_id.compare("GFG97") == 0 || + printer_filament_id.compare("GFG50") == 0 || printer_filament_id.compare("GFU02") == 0 || + printer_filament_id.compare("GFU98") == 0 || printer_filament_id.compare("GFS00") == 0 || + printer_filament_id.compare("GFS02") == 0) { /* 0.04 filaments */ k = 0.04; n = 1.0; @@ -1088,6 +1096,7 @@ bool CalibUtils::calib_generic_PA(const CalibInfo &calib_info, wxString &error_m calib_pa_pattern(calib_info, model); DynamicPrintConfig print_config = calib_info.print_prest->config; + print_config.set_key_value("wipe_inward", new ConfigOptionBool(false)); DynamicPrintConfig filament_config = calib_info.filament_prest->config; DynamicPrintConfig printer_config = calib_info.printer_prest->config; @@ -1349,6 +1358,7 @@ void CalibUtils::calib_retraction(const CalibInfo &calib_info, wxString &error_m read_model_from_file(input_file, model); DynamicPrintConfig print_config = calib_info.print_prest->config; + print_config.set_key_value("wipe_inward", new ConfigOptionBool(false)); DynamicPrintConfig filament_config = calib_info.filament_prest->config; DynamicPrintConfig printer_config = calib_info.printer_prest->config; @@ -1393,7 +1403,10 @@ void CalibUtils::calib_retraction(const CalibInfo &calib_info, wxString &error_m bool CalibUtils::is_support_auto_pa_cali(std::string filament_id) { - auto iter = std::find(not_support_auto_pa_cali_filaments.begin(), not_support_auto_pa_cali_filaments.end(), filament_id); + // filament_id is our OF id; not_support_auto_pa_cali_filaments holds the printer's own ids. + auto* agent = wxGetApp().getAgent(); + const std::string printer_filament_id = agent ? agent->from_orca_filament_id(filament_id) : filament_id; + auto iter = std::find(not_support_auto_pa_cali_filaments.begin(), not_support_auto_pa_cali_filaments.end(), printer_filament_id); if (iter != not_support_auto_pa_cali_filaments.end()) { return false; } diff --git a/src/slic3r/Utils/CloudProvider.hpp b/src/slic3r/Utils/CloudProvider.hpp new file mode 100644 index 0000000000..0f03683222 --- /dev/null +++ b/src/slic3r/Utils/CloudProvider.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include + +namespace Slic3r { + +// Identifiers of the cloud services an ICloudServiceAgent can stand for. +static const std::string ORCA_CLOUD_PROVIDER("orca"); +static const std::string BBL_CLOUD_PROVIDER("bbl"); + +} // namespace Slic3r diff --git a/src/slic3r/Utils/CrealityPrintAgent.cpp b/src/slic3r/Utils/CrealityPrintAgent.cpp index 55d99ff07b..f340a61267 100644 --- a/src/slic3r/Utils/CrealityPrintAgent.cpp +++ b/src/slic3r/Utils/CrealityPrintAgent.cpp @@ -8,7 +8,11 @@ #include #include +#include #include +#include + +using json = nlohmann::json; namespace Slic3r { @@ -16,6 +20,12 @@ namespace { constexpr const char* CrealityPrintAgent_VERSION = "0.1.0"; +std::string to_lower(std::string s) +{ + for (auto& c : s) c = static_cast(std::tolower(static_cast(c))); + return s; +} + bool has_visible_base_preset(const PresetCollection& filaments, const std::string& filament_id) { for (const auto& p : filaments.get_presets()) { @@ -27,19 +37,47 @@ bool has_visible_base_preset(const PresetCollection& filaments, const std::strin return false; } +// Lower-case words of a preset name with the "@scope" suffix dropped: +// "Generic PLA Matte @Creality K2-all" -> {"generic", "pla", "matte"}. +std::vector name_words(const std::string& name) +{ + std::vector words; + std::string word; + for (char c : name.substr(0, name.find('@'))) { + if (std::isalnum(static_cast(c))) { + word += static_cast(std::tolower(static_cast(c))); + } else if (!word.empty()) { + words.push_back(word); + word.clear(); + } + } + if (!word.empty()) + words.push_back(word); + return words; +} + } // namespace // Score visible compatible filament presets against the CFS spool metadata and // return the best-matching filament_id. Scoring: // +20 preset name contains brand_name as a substring // (e.g. "Hyper PLA" in "Hyper PLA @Creality K2 0.4 nozzle") -// +10 preset name contains the vendor substring (e.g. "Creality") -// Tiebreak: prefer the SYSTEM (shipped) preset over user copies. Brand- -// specific system presets carry their own filament_id; user copies of -// generic presets inherit a generic filament_id from their parent, so -// preferring the user copy can collapse a brand-specific match back to -// "Generic PLA" via the inherited id. Plus: this code targets upstream -// OrcaSlicer where shipping the user's local tuning would be wrong. +// +10 the preset belongs to the spool's vendor - by its owning VendorProfile OR by +// its name. The profile test is what finds the vendor's own generics, which are +// named "Generic @" and do not repeat the vendor; the name test +// still finds a third party filament shipped inside that vendor's bundle, which +// carries the bundle owner's profile but names its real brand. +// -5 per word of the preset name the spool never mentioned ("generic" excepted - +// it marks the unbranded base product rather than a qualifier), so the least +// specific preset that still explains the spool wins. Without it a spool +// reporting only "PLA" scores "Generic PLA High Speed" and "Generic PLA Matte" +// exactly as high as "Generic PLA"; those are three products with three +// filament_ids, so whichever sorted first won and the printer got the wrong +// one. Applied after the score gate, so it only reorders genuine matches. +// Tiebreak: prefer the SYSTEM (shipped) preset over user copies, then by name so the +// winner never depends on how std::sort leaves equal elements. User copies of generic +// presets inherit a generic filament_id from their parent, so preferring the user copy +// can collapse a brand-specific match back to "Generic PLA" via the inherited id. // Requires the preset's declared filament_type to equal the spool's base type // (PLA/PETG/ABS/...) so we never auto-pick a PETG preset for a PLA spool. // Falls back to filaments.filament_id_by_type(base_type) when nothing scores. @@ -48,15 +86,17 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi const std::string& brand_name, const std::string& base_type) { - auto to_lower = [](std::string s) { - for (auto& c : s) c = static_cast(std::tolower(static_cast(c))); - return s; - }; - const std::string vendor_lower = to_lower(vendor); const std::string brand_lower = to_lower(brand_name); const std::string type_lower = to_lower(base_type); + // Everything the spool told us about itself, as words. A word in a preset's name + // that is not in here is a qualifier the spool never claimed. + std::set spool_words{"generic"}; + for (const std::string& src : {brand_lower, vendor_lower, type_lower}) + for (auto& w : name_words(src)) + spool_words.insert(std::move(w)); + struct Match { const Preset* preset; int score; @@ -83,11 +123,20 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi int score = 0; if (!brand_lower.empty() && name_lower.find(brand_lower) != std::string::npos) score += 20; - if (!vendor_lower.empty() && name_lower.find(vendor_lower) != std::string::npos) + // Profile OR name - neither alone covers both the vendor's own generics and the + // third party filaments shipped inside its bundle. See the header comment. + if (!vendor_lower.empty() + && ((p.vendor != nullptr && to_lower(p.vendor->name) == vendor_lower) + || name_lower.find(vendor_lower) != std::string::npos)) score += 10; - if (score > 0) - matches.push_back({&p, score, !p.is_system && !p.is_default}); + if (score == 0) continue; + + for (const auto& w : name_words(p.name)) + if (spool_words.count(w) == 0) + score -= 5; + + matches.push_back({&p, score, !p.is_system && !p.is_default}); } if (matches.empty()) { @@ -105,7 +154,7 @@ std::string CrealityPrintAgent::match_filament_preset(const PresetCollection& fi [](const Match& a, const Match& b) { if (a.score != b.score) return a.score > b.score; if (a.is_user != b.is_user) return !a.is_user; // prefer system over user - return false; + return a.preset->name < b.preset->name; // keep the winner deterministic }); BOOST_LOG_TRIVIAL(info) diff --git a/src/slic3r/Utils/FixModelByCgal.cpp b/src/slic3r/Utils/FixModelByCgal.cpp index 8d196f7201..9d973844bb 100644 --- a/src/slic3r/Utils/FixModelByCgal.cpp +++ b/src/slic3r/Utils/FixModelByCgal.cpp @@ -12,6 +12,7 @@ #include "libslic3r/MeshBoolean.hpp" #include "libslic3r/Model.hpp" +#include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/format.hpp" #include "libslic3r/Thread.hpp" #include "../GUI/I18N.hpp" @@ -69,6 +70,9 @@ public: // Returns false if fixing was canceled. fix_result contains error message if failed. bool fix_model_with_cgal_gui(ModelObject &model_object, int volume_idx, GUI::ProgressDialog &progress_dialog, const wxString &msg_header, std::string &fix_result, bool keep_painting) { + // Hold SaveObjectGaurd to prevent backup manager from racing concurrent mesh mutations (use-after-free). + SaveObjectGaurd backup_gaurd(model_object); + // Orca: Synchronization primitives for progress updates between worker thread and GUI. std::mutex mtx; std::condition_variable condition; diff --git a/src/slic3r/Utils/Http.cpp b/src/slic3r/Utils/Http.cpp index f1ff056d10..6f43df74e4 100644 --- a/src/slic3r/Utils/Http.cpp +++ b/src/slic3r/Utils/Http.cpp @@ -254,10 +254,8 @@ int Http::priv::xfercb(void *userp, curl_off_t dltotal, curl_off_t dlnow, curl_o bool cb_cancel = false; if (self->progressfn) { - double speed; + double speed = 0.; curl_easy_getinfo(self->curl, CURLINFO_SPEED_UPLOAD, &speed); - if (speed > 0.01) - speed = speed; Progress progress(dltotal, dlnow, ultotal, ulnow, self->buffer, speed); self->progressfn(progress, cb_cancel); } @@ -323,8 +321,10 @@ void Http::priv::form_add_file(const char *name, const fs::path &path, const cha // We can't use CURLFORM_FILECONTENT, because curl doesn't support Unicode filenames on Windows // and so we use CURLFORM_STREAM with boost ifstream to read the file. + std::string filename_str; if (filename == nullptr) { - filename = path.string().c_str(); + filename_str = path.string(); + filename = filename_str.c_str(); } form_files.emplace_back(path, offset, length); diff --git a/src/slic3r/Utils/ICloudServiceAgent.hpp b/src/slic3r/Utils/ICloudServiceAgent.hpp index 556c253641..7d326eb4c6 100644 --- a/src/slic3r/Utils/ICloudServiceAgent.hpp +++ b/src/slic3r/Utils/ICloudServiceAgent.hpp @@ -2,6 +2,7 @@ #define __I_CLOUD_SERVICE_AGENT_HPP__ #include "bambu_networking.hpp" +#include "CloudProvider.hpp" #include "../../libslic3r/ProjectTask.hpp" #include #include @@ -37,9 +38,6 @@ namespace Slic3r { * implementation. */ -static const std::string ORCA_CLOUD_PROVIDER("orca"); -static const std::string BBL_CLOUD_PROVIDER("bbl"); - struct CloudEvent { std::string provider; // ORCA_CLOUD_PROVIDER or BBL_CLOUD_PROVIDER }; diff --git a/src/slic3r/Utils/IPrinterAgent.hpp b/src/slic3r/Utils/IPrinterAgent.hpp index 0fa3616344..1f0d45dc1e 100644 --- a/src/slic3r/Utils/IPrinterAgent.hpp +++ b/src/slic3r/Utils/IPrinterAgent.hpp @@ -290,6 +290,16 @@ public: * Populates the MachineObject's DevFilaSystem with fetched filament data. */ virtual bool fetch_filament_info(std::string dev_id) { return false; } + + /** + * Translate one filament id across the printer boundary. + * + * Orca content-addresses every system filament; a printer, its AMS and its vendor cloud + * know only that vendor's own catalog ids. An agent whose printers already speak Orca's + * ids leaves them alone, and so does an id with no mapping. + */ + virtual std::string to_orca_filament_id(const std::string& printer_filament_id) const { return printer_filament_id; } + virtual std::string from_orca_filament_id(const std::string& orca_filament_id) const { return orca_filament_id; } }; } // namespace Slic3r diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index cecd90044b..2bce7835e8 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -57,7 +57,7 @@ void set_miniaturizable(void * window) while(viewObject = (NSView *)[viewEnum nextObject]) { if([viewObject class] == [NSTextField self]) { //[(NSTextField*)viewObject setTextColor : NSColor.whiteColor]; - mainframe_text_field = viewObject; + mainframe_text_field = (NSTextField*)viewObject; } } } @@ -74,7 +74,7 @@ void set_title_colour_after_set_title(void * window) while(viewObject = (NSView *)[viewEnum nextObject]) { if([viewObject class] == [NSTextField self]) { [(NSTextField*)viewObject setTextColor : NSColor.whiteColor]; - mainframe_text_field = viewObject; + mainframe_text_field = (NSTextField*)viewObject; } } diff --git a/src/slic3r/Utils/MeshInspect.cpp b/src/slic3r/Utils/MeshInspect.cpp new file mode 100644 index 0000000000..0a60358278 --- /dev/null +++ b/src/slic3r/Utils/MeshInspect.cpp @@ -0,0 +1,61 @@ +#include "MeshInspect.hpp" + +#include "libslic3r/LayOnFace.hpp" +#include "libslic3r/Model.hpp" + +#include + +#include +#include +#include + +namespace Slic3r { +namespace MeshInspect { + +using json = nlohmann::json; + +static json to_json(const Vec3d &v) { return json::array({ v.x(), v.y(), v.z() }); } + +static json to_json(const BoundingBoxf3 &bb) +{ + return { { "min", to_json(bb.min) }, { "max", to_json(bb.max) }, { "size", to_json(bb.size()) } }; +} + +void inspect_to_json(const Model &model, const std::vector &source_paths, std::ostream &out, size_t max_planes) +{ + json objects = json::array(); + for (const ModelObject *mo : model.objects) { + json obj = { { "name", mo->name }, + { "triangle_count", mo->facets_count() }, + { "instance_count", mo->instances.size() }, + { "bbox_object", to_json(mo->raw_mesh_bounding_box()) } }; + if (!mo->instances.empty()) { + const std::vector planes = lay_on_face_planes(*mo, mo->instances.front()->get_matrix_no_offset()); + json planes_json = json::array(); + for (size_t i = 0; i < std::min(planes.size(), max_planes); ++i) + planes_json.push_back({ { "normal", to_json(planes[i].normal) }, + { "area_mm2", std::round(double(planes[i].area) * 1000.) / 1000. }, + { "center", to_json(planes[i].center) } }); + obj["bbox_world"] = to_json(mo->instance_bounding_box(0)); + obj["instance_offset"] = to_json(mo->instances.front()->get_offset()); + obj["plane_count"] = planes.size(); + obj["planes"] = std::move(planes_json); + } + objects.push_back(std::move(obj)); + } + + const json root = { + { "sources", source_paths }, + { "note", "Lengths in mm. bbox_object and the plane normals and centers are in object coordinates: the parts as " + "currently transformed, without the instance transformation. --ground-face-normal and " + "--ground-face-point take values in these coordinates. area_mm2 uses instance 0's scale, " + "bbox_world is instance 0 on the plate." }, + { "objects", std::move(objects) }, + }; + // Object names and file paths are arbitrary bytes, and dump() throws on invalid UTF-8 by default. + // Replace such sequences with U+FFFD so the output is always valid JSON. + out << root.dump(2, ' ', false, json::error_handler_t::replace) << std::endl; +} + +} // namespace MeshInspect +} // namespace Slic3r diff --git a/src/slic3r/Utils/MeshInspect.hpp b/src/slic3r/Utils/MeshInspect.hpp new file mode 100644 index 0000000000..0f53b41c4a --- /dev/null +++ b/src/slic3r/Utils/MeshInspect.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include + +namespace Slic3r { + +class Model; + +namespace MeshInspect { + +// Writes the --inspect-mesh JSON for `model` to `out`: per object its bounding boxes and the faces +// it can be laid on, taken from lay_on_face_planes() so they are the faces the --ground-* options +// choose from, in the frame those options take. At most `max_planes` faces are listed per object, +// largest first. `source_paths` lists every input file; the CLI merges them into one model. +void inspect_to_json(const Model &model, const std::vector &source_paths, std::ostream &out, size_t max_planes = 8); + +} // namespace MeshInspect +} // namespace Slic3r diff --git a/src/slic3r/Utils/Moonraker.cpp b/src/slic3r/Utils/Moonraker.cpp index f1ca432390..73fdb8486a 100644 --- a/src/slic3r/Utils/Moonraker.cpp +++ b/src/slic3r/Utils/Moonraker.cpp @@ -80,7 +80,7 @@ bool Moonraker::test(wxString &msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: /server/info body: %2%") % name % body; try { std::stringstream ss(body); @@ -141,7 +141,7 @@ bool Moonraker::get_storage(wxArrayString &storage_path, wxArrayString &storage_ % name % error % status % body; } }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: /server/files/roots body: %2%") % name % body; try { std::stringstream ss(body); diff --git a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp index cd3ef82b62..384a69d51e 100644 --- a/src/slic3r/Utils/MoonrakerPrinterAgent.cpp +++ b/src/slic3r/Utils/MoonrakerPrinterAgent.cpp @@ -3,6 +3,7 @@ #include "libslic3r/Preset.hpp" #include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/DeviceManager.hpp" #include "slic3r/GUI/DeviceCore/DevFilaSystem.h" #include "slic3r/GUI/DeviceCore/DevManager.h" #include "../GUI/DeviceCore/DevStorage.h" @@ -19,6 +20,7 @@ #include #include #include +#include #include namespace { @@ -619,51 +621,70 @@ std::string MoonrakerPrinterAgent::map_filament_type_to_generic_id(const std::st { const std::string upper = trim_and_upper(filament_type); - // Map to OrcaFilamentLibrary preset IDs (compatible with all printers) - // Source: resources/profiles/OrcaFilamentLibrary/filament/ + // Normalize reported material names (trimmed, uppercased) to an OrcaFilamentLibrary + // generic family. The family's filament_id is resolved from the loaded system presets + // below rather than hardcoded, so profile id re-mints never require touching this table. + // scripts/test_moonraker_lane_data.py parses this initializer; keep the {"A", "B"} format. + static const std::map type_to_ofl_family = { + // PLA variants + {"PLA", "PLA"}, + {"PLA-CF", "PLA-CF"}, + {"PLA SILK", "PLA Silk"}, + {"PLA-SILK", "PLA Silk"}, + {"PLA HIGH SPEED", "PLA High Speed"}, + {"PLA-HS", "PLA High Speed"}, + {"PLA HS", "PLA High Speed"}, - // PLA variants - if (upper == "PLA") return "OGFL99"; - if (upper == "PLA-CF") return "OGFL98"; - if (upper == "PLA SILK" || upper == "PLA-SILK") return "OGFL96"; - if (upper == "PLA HIGH SPEED" || upper == "PLA-HS" || upper == "PLA HS") return "OGFL95"; + // ABS/ASA variants + {"ABS", "ABS"}, + {"ASA", "ASA"}, - // ABS/ASA variants - if (upper == "ABS") return "OGFB99"; - if (upper == "ASA") return "OGFB98"; + // PETG/PET variants + {"PETG", "PETG"}, + {"PET", "PETG"}, + {"PCTG", "PCTG"}, - // PETG/PET variants - if (upper == "PETG" || upper == "PET") return "OGFG99"; - if (upper == "PCTG") return "OGFG97"; + // PA/Nylon variants + {"PA", "PA"}, + {"NYLON", "PA"}, + {"PA-CF", "PA-CF"}, + {"PPA", "PPA-CF"}, + {"PPA-CF", "PPA-CF"}, + {"PPA-GF", "PPA-GF"}, - // PA/Nylon variants - if (upper == "PA" || upper == "NYLON") return "OGFN99"; - if (upper == "PA-CF") return "OGFN98"; - if (upper == "PPA" || upper == "PPA-CF") return "OGFN97"; - if (upper == "PPA-GF") return "OGFN96"; + // PC variants + {"PC", "PC"}, - // PC variants - if (upper == "PC") return "OGFC99"; + // PP/PE variants + {"PE", "PE"}, + {"PP", "PP"}, - // PP/PE variants - if (upper == "PE") return "OGFP99"; - if (upper == "PP") return "OGFP97"; + // Support materials + {"PVA", "PVA"}, + {"HIPS", "HIPS"}, + {"BVOH", "BVOH"}, - // Support materials - if (upper == "PVA") return "OGFS99"; - if (upper == "HIPS") return "OGFS98"; - if (upper == "BVOH") return "OGFS97"; + // TPU variants + {"TPU", "TPU"}, - // TPU variants - if (upper == "TPU") return "OGFU99"; + // Other materials + {"EVA", "EVA"}, + {"PHA", "PHA"}, + {"COPE", "CoPE"}, + {"SBS", "SBS"}, + }; - // Other materials - if (upper == "EVA") return "OGFR99"; - if (upper == "PHA") return "OGFR98"; - if (upper == "COPE") return "OGFLC99"; - if (upper == "SBS") return "OFLSBS99"; + auto it = type_to_ofl_family.find(upper); + if (it == type_to_ofl_family.end()) + return UNKNOWN_FILAMENT_ID; - // Unknown material + if (auto* bundle = GUI::wxGetApp().preset_bundle) { + const Preset* preset = bundle->filaments.find_preset("Generic " + it->second + " @System"); + if (preset != nullptr && preset->is_system && !preset->filament_id.empty()) + return preset->filament_id; + } + + // Unknown material, or no loaded preset data to resolve against return UNKNOWN_FILAMENT_ID; } diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 0d77e5e660..b15e10c591 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -929,6 +929,20 @@ bool NetworkAgent::fetch_filament_info(std::string dev_id) return false; } +std::string NetworkAgent::to_orca_filament_id(const std::string& printer_filament_id) const +{ + if (m_printer_agent) + return m_printer_agent->to_orca_filament_id(printer_filament_id); + return printer_filament_id; +} + +std::string NetworkAgent::from_orca_filament_id(const std::string& orca_filament_id) const +{ + if (m_printer_agent) + return m_printer_agent->from_orca_filament_id(orca_filament_id); + return orca_filament_id; +} + int NetworkAgent::request_bind_ticket(std::string* ticket) { if (m_printer_agent) diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index d7032b7a20..76128073a4 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -165,6 +165,8 @@ public: int start_sdcard_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn); FilamentSyncMode get_filament_sync_mode() const; bool fetch_filament_info(std::string dev_id); + std::string to_orca_filament_id(const std::string& printer_filament_id) const; + std::string from_orca_filament_id(const std::string& orca_filament_id) const; int request_bind_ticket(std::string* ticket); int get_hms_snapshot(std::string dev_id, std::string file_name, std::function callback); diff --git a/src/slic3r/Utils/Obico.cpp b/src/slic3r/Utils/Obico.cpp index 5541d1c683..92d748b496 100644 --- a/src/slic3r/Utils/Obico.cpp +++ b/src/slic3r/Utils/Obico.cpp @@ -86,7 +86,7 @@ bool Obico::test(wxString& msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got version: %2%") % name % body; }) #ifdef WIN32 diff --git a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp index 4419395b4d..5d129a490e 100644 --- a/src/slic3r/Utils/OrcaCloudServiceAgent.cpp +++ b/src/slic3r/Utils/OrcaCloudServiceAgent.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -859,9 +860,11 @@ std::string OrcaCloudServiceAgent::build_login_cmd() display_name = "unknown name"; } json cmd; - cmd["command"] = "orca_userlogin"; - cmd["data"]["name"] = display_name; - cmd["data"]["avatar"] = get_user_avatar(); + cmd["command"] = "orca_userlogin"; + cmd["data"]["name"] = display_name; + cmd["data"]["avatar"] = get_user_avatar(); + // The unique handle, shown under the display name in the homepage account menu. + cmd["data"]["account"] = get_user_name(); return cmd.dump(); } diff --git a/src/slic3r/Utils/PaintCLI.cpp b/src/slic3r/Utils/PaintCLI.cpp new file mode 100644 index 0000000000..d99dc0b450 --- /dev/null +++ b/src/slic3r/Utils/PaintCLI.cpp @@ -0,0 +1,204 @@ +// PaintCLI.cpp — CLI paint-inspection primitives. See PaintCLI.hpp. +#include "PaintCLI.hpp" + +#include "libslic3r/Model.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/TriangleSelector.hpp" + +#include + +#include +#include +#include +#include + +namespace Slic3r { +namespace PaintCLI { + +namespace { + +using json = nlohmann::json; + +double its_surface_area(const indexed_triangle_set &its) +{ + double total = 0.0; + for (const stl_triangle_vertex_indices &t : its.indices) { + const Vec3f &a = its.vertices[t(0)]; + const Vec3f &b = its.vertices[t(1)]; + const Vec3f &c = its.vertices[t(2)]; + total += 0.5 * (b - a).cross(c - a).norm(); + } + return total; +} + +// Bbox over triangle-referenced vertices only. get_facets_strict() returns +// an itset with the full source vertex list — using bounding_box() on it +// would report the whole mesh's bbox even when only a few facets are painted. +BoundingBoxf3 its_referenced_bbox(const indexed_triangle_set &its) +{ + BoundingBoxf3 bb; + bool first = true; + for (const stl_triangle_vertex_indices &t : its.indices) { + for (int k = 0; k < 3; ++k) { + const Vec3d v = its.vertices[t(k)].cast(); + if (first) { bb.min = bb.max = v; first = false; } + else bb.merge(v); + } + } + return bb; +} + +json vec3_to_json(const Vec3d &v) +{ + return json::array({ v.x(), v.y(), v.z() }); +} + +json bbox_to_json(const BoundingBoxf3 &bb) +{ + return { + { "min", vec3_to_json(bb.min) }, + { "max", vec3_to_json(bb.max) }, + { "size", vec3_to_json(Vec3d(bb.max - bb.min)) }, + }; +} + +// One (layer, state) row — empty ones are omitted at the caller level. +json state_entry(const std::string &label, const indexed_triangle_set &its) +{ + return { + { "state", label }, + { "facets", its.indices.size() }, + { "area_mm2", its_surface_area(its) }, + { "bbox", bbox_to_json(its_referenced_bbox(its)) }, + }; +} + +// Iterate the states relevant to one FacetsAnnotation kind, collecting +// non-empty entries. Empty layer → {"empty": true}. `n_facets_out` is the +// running total of painted facets — bumped for the summary. +json inspect_layer(const ModelVolume &mv, const FacetsAnnotation &fa, + const std::vector> &states, + size_t &n_facets_out) +{ + if (fa.empty()) + return { { "empty", true } }; + + json entries = json::array(); + for (const auto &st : states) { + if (!fa.has_facets(mv, st.first)) + continue; + indexed_triangle_set its = fa.get_facets_strict(mv, st.first); + if (its.indices.empty()) + continue; + n_facets_out += its.indices.size(); + entries.push_back(state_entry(st.second, its)); + } + return { + { "empty", entries.empty() }, + { "states", std::move(entries) }, + }; +} + +const std::vector> &supports_states() +{ + static const std::vector> s = { + { EnforcerBlockerType::ENFORCER, "ENFORCER" }, + { EnforcerBlockerType::BLOCKER, "BLOCKER" }, + }; + return s; +} + +const std::vector> &fuzzy_states() +{ + // FUZZY_SKIN is an enum alias for ENFORCER; the layer is single-state. + static const std::vector> s = { + { EnforcerBlockerType::FUZZY_SKIN, "FUZZY_SKIN" }, + }; + return s; +} + +const std::vector> &mmu_states() +{ + static std::vector> s = []{ + std::vector> v; + for (int i = 1; i <= int(EnforcerBlockerType::ExtruderMax); ++i) + v.emplace_back(EnforcerBlockerType(i), "extruder_" + std::to_string(i)); + return v; + }(); + return s; +} + +} // namespace + +void inspect_to_json(const Model &model, const std::vector &source_paths, + std::ostream &out) +{ + json root; + root["sources"] = source_paths; + root["frame"] = "mesh_local"; + root["note"] = "Coordinates are mesh-local (each volume's own frame). " + "Paint gizmos operate in this frame."; + + json objects = json::array(); + size_t total_objects = 0, total_volumes = 0, total_painted = 0, total_facets = 0; + + for (size_t oi = 0; oi < model.objects.size(); ++oi) { + const ModelObject *mo = model.objects[oi]; + if (!mo) continue; + ++total_objects; + + json obj; + obj["index"] = oi; + obj["name"] = mo->name; + + json volumes = json::array(); + for (size_t vi = 0; vi < mo->volumes.size(); ++vi) { + const ModelVolume *mv = mo->volumes[vi]; + if (!mv) continue; + ++total_volumes; + + const indexed_triangle_set &its = mv->mesh().its; + json vol; + vol["index"] = vi; + vol["name"] = mv->name; + vol["n_facets"] = its.indices.size(); + vol["is_model_part"] = mv->is_model_part(); + vol["bbox_mesh_local"] = bbox_to_json(bounding_box(its)); + + size_t vol_painted = 0; + json paints; + paints["supports"] = inspect_layer(*mv, mv->supported_facets, + supports_states(), vol_painted); + paints["seam"] = inspect_layer(*mv, mv->seam_facets, + supports_states(), vol_painted); + paints["mmu_segmentation"] = inspect_layer(*mv, mv->mmu_segmentation_facets, + mmu_states(), vol_painted); + paints["fuzzy_skin"] = inspect_layer(*mv, mv->fuzzy_skin_facets, + fuzzy_states(), vol_painted); + vol["paints"] = std::move(paints); + vol["painted_facets_total"] = vol_painted; + + if (vol_painted > 0) ++total_painted; + total_facets += vol_painted; + + volumes.push_back(std::move(vol)); + } + obj["volumes"] = std::move(volumes); + objects.push_back(std::move(obj)); + } + root["objects"] = std::move(objects); + root["summary"] = { + { "objects", total_objects }, + { "volumes", total_volumes }, + { "volumes_with_paint", total_painted }, + { "painted_facets_total", total_facets }, + }; + + // Object names and file paths are arbitrary bytes, and dump() throws on invalid + // UTF-8 by default. Replace such sequences with U+FFFD so the output is always + // valid JSON rather than an exception out of the CLI. + out << root.dump(2, ' ', false, json::error_handler_t::replace) << std::endl; +} + +} // namespace PaintCLI +} // namespace Slic3r diff --git a/src/slic3r/Utils/PaintCLI.hpp b/src/slic3r/Utils/PaintCLI.hpp new file mode 100644 index 0000000000..8e31750b37 --- /dev/null +++ b/src/slic3r/Utils/PaintCLI.hpp @@ -0,0 +1,31 @@ +// PaintCLI.hpp — CLI paint-inspection primitives. +// +// Backs the --inspect-paint CLI action. Reads the per-facet enforcer / +// blocker / extruder / fuzzy-skin state that OrcaSlicer stores on every +// ModelVolume (supports, seam, MMU color, fuzzy-skin) and emits a +// structured JSON summary — facet count, surface area, and mesh-local +// bounding box per state — so CI / scripted / AI tooling can reason +// about existing paint on a .3mf without opening the GUI. +// +// Coordinates are mesh-local (each volume's own frame), matching the +// frame that the paint gizmos operate in. +#ifndef slic3r_PaintCLI_hpp_ +#define slic3r_PaintCLI_hpp_ + +#include +#include +#include + +namespace Slic3r { +class Model; + +namespace PaintCLI { + +// `source_paths` lists every input file; the CLI merges them into one Model. +void inspect_to_json(const Model &model, const std::vector &source_paths, + std::ostream &out); + +} // namespace PaintCLI +} // namespace Slic3r + +#endif diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 06808e253d..5fd5898a1b 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -29,6 +30,7 @@ #include "libslic3r/format.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PresetCacheFormat.hpp" #include "libslic3r_version.h" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" @@ -40,6 +42,7 @@ #include "slic3r/GUI/format.hpp" #include "slic3r/GUI/NotificationManager.hpp" #include "slic3r/Utils/Http.hpp" +#include "slic3r/Utils/bambu_networking.hpp" #include "slic3r/Config/Version.hpp" #include "slic3r/Config/Snapshot.hpp" #include "slic3r/GUI/MarkdownTip.hpp" @@ -96,6 +99,8 @@ struct Update bool forced_update; //BBS: add directory support bool is_directory {false}; + // Orca: a vendor update may be the cache-only form. + bool is_opc {false}; Update() {} //BBS: add directory support @@ -126,13 +131,24 @@ struct Update //BBS: add directory support void install() const { - if (is_directory) { + if (is_directory) { copy_directory_recursively(source, target, file_filter); - } - else { + } else { copy_file_fix(source, target); + + // A vendor must be installed in exactly one form. Remove the + // representation that would otherwise be stale or shadow this one. + boost::system::error_code ec; + if (is_opc) { + fs::remove(target.parent_path() / (vendor + ".json"), ec); + ec.clear(); + fs::remove_all(target.parent_path() / vendor, ec); + } + else { + fs::remove(target.parent_path() / (vendor + ".opc"), ec); + } } - } + } friend std::ostream& operator<<(std::ostream& os, const Update &self) { @@ -180,6 +196,8 @@ struct Updates std::vector updates; }; +static bool reload_configs_update_gui(); + wxDEFINE_EVENT(EVT_SLIC3R_VERSION_ONLINE, wxCommandEvent); wxDEFINE_EVENT(EVT_SLIC3R_EXPERIMENTAL_VERSION_ONLINE, wxCommandEvent); @@ -207,6 +225,10 @@ struct PresetUpdater::priv // Per-vendor update checking std::set checked_vendors; + // Orca (PR #130): changelog text for each vendor, captured in memory during + // sync_vendor_config()/check_new_vendors() instead of written beside the cache. + std::unordered_map vendor_changelogs; + mutable std::mutex vendor_changelogs_mutex; std::vector vendor_check_threads; std::atomic vendor_check_cancel{false}; @@ -231,6 +253,8 @@ struct PresetUpdater::priv void parse_version_string(const std::string& body) const; void sync_resources(std::string http_url, std::map &resources, bool check_patch = false, std::string current_version="", std::string changelog_file=""); void sync_vendor_config(const std::string& vendor_id); + void check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback); void sync_tooltip(std::string http_url, std::string language); void sync_plugins(std::string http_url, std::string plugin_version); void sync_printer_config(std::string http_url); @@ -268,7 +292,7 @@ void PresetUpdater::priv::set_download_prefs(AppConfig *app_config) version_check_url = app_config->version_check_url(); auto profile_update_url = app_config->profile_update_url(); - if (!profile_update_url.empty()) + if (!profile_update_url.empty() && app_config->get_bool("enable_ota")) enabled_config_update = true; else enabled_config_update = false; @@ -513,7 +537,7 @@ void PresetUpdater::priv::sync_resources(std::string http_url, std::map(); download_url_str = j["download_url"].get(); + changelog = j.value("changelog", std::string()); } } catch (const std::exception& e) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] vendor check JSON parse failed: " << e.what(); @@ -707,6 +737,10 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) boost::system::error_code ec; fs::remove_all(cache_profile_path / vendor_id, ec); fs::remove(cache_profile_path / (vendor_id + ".json"), ec); + // Orca: the OPC cache is the vendor's whole installation in one file; clear it too. + fs::remove(cache_profile_path / (vendor_id + ".opc"), ec); + // Best-effort cleanup of the legacy on-disk changelog written by older builds + // (changelogs are now kept in memory - see vendor_changelogs). fs::remove(cache_profile_path / (vendor_id + ".changelog"), ec); // Download the zip @@ -735,7 +769,7 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) if (!download_ok || cancel || vendor_check_cancel) return; // Extract vendor profile bundles under ota/profiles. The downloaded zip contains - // the vendor json/folder at its root. + // either the vendor json/folder or the vendor cache at its root. BOOST_LOG_TRIVIAL(info) << "[Orca Updater] extracting update for " << vendor_id; if (!extract_file(download_file, cache_profile_path)) { BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] extraction failed for " << vendor_id; @@ -745,6 +779,27 @@ void PresetUpdater::priv::sync_vendor_config(const std::string& vendor_id) if (cancel || vendor_check_cancel) return; + const fs::path cached_vendor_json = cache_profile_path / (vendor_id + ".json"); + const fs::path cached_vendor_folder = cache_profile_path / vendor_id; + + const fs::path cached_vendor_opc = cache_profile_path / (vendor_id + ".opc"); + + bool is_json_update = fs::is_regular_file(cached_vendor_json) && fs::is_directory(cached_vendor_folder) && !fs::is_empty(cached_vendor_folder); + bool is_opc_update = fs::is_regular_file(cached_vendor_opc); + if (!is_json_update && !is_opc_update) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] rejected update for " << vendor_id + << ": expected " << vendor_id << ".json and a non-empty " + << vendor_id << " directory, or OPC update format."; + fs::remove_all(cached_vendor_folder, ec); + fs::remove(cached_vendor_json, ec); + return; + } + + { + std::lock_guard lock(vendor_changelogs_mutex); + vendor_changelogs[vendor_id] = std::move(changelog); + } + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] vendor " << vendor_id << " update cached, notifying UI"; GUI::wxGetApp().CallAfter([] { GUI::wxGetApp().check_config_updates_from_updater(); @@ -1039,6 +1094,7 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer"; AppConfig *app_config = GUI::wxGetApp().app_config; + const auto enabled_vendors = app_config->vendors(); std::set bundles; @@ -1051,8 +1107,8 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const const auto is_vendor_enabled = (vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) // always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE || (enabled_vendors.find(vendor_name) != enabled_vendors.end()); - if (enabled_config_update) { - if (is_vendor_installed(vendor_name)) { + if (is_vendor_installed(vendor_name)) { + if (enabled_config_update) { if (is_vendor_enabled) { // Orca: whichever form of the vendor resources ships at the newer // version is the one installing lays down, and the one to judge @@ -1067,17 +1123,12 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const << resource_ver.to_string() << " from resource, old version " << vendor_ver.to_string(); bundles.insert(vendor_name); } - } - else { - //need to be removed because not installed + } else { + // need to be removed because not installed remove_installed_vendor(vendor_name); } } - else if (is_vendor_enabled) { - bundles.insert(vendor_name); - } - } - else if (is_vendor_enabled) { + } else if (is_vendor_enabled) { bundles.insert(vendor_name); } } @@ -1147,68 +1198,110 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version if (!fs::exists(cache_profile_path)) return updates; - for (auto &dir_entry : boost::filesystem::directory_iterator(cache_profile_path)) { - const auto &path = dir_entry.path(); - std::string file_path = path.string(); - if (is_json_file(file_path)) { - const auto path_in_vendor = vendor_path / path.filename(); - std::string vendor_name = path.filename().string(); - // Remove the .json suffix. - vendor_name.erase(vendor_name.size() - 5); - auto print_in_cache = (cache_profile_path / vendor_name / PRESET_PRINT_NAME); - auto filament_in_cache = (cache_profile_path / vendor_name / PRESET_FILAMENT_NAME); - auto machine_in_cache = (cache_profile_path / vendor_name / PRESET_PRINTER_NAME); + // Orca (PR #130): vendor changelogs are captured in memory during + // sync_vendor_config()/check_new_vendors(), not written beside the cache. + std::unordered_map changelogs; + { + std::lock_guard lock(vendor_changelogs_mutex); + changelogs = vendor_changelogs; + } - if (is_vendor_installed(vendor_name) - || fs::exists(print_in_cache) - || fs::exists(filament_in_cache) - || fs::exists(machine_in_cache)) { - // Orca: a vendor installed as a preset cache carries its version there. - Semver vendor_ver = installed_vendor_version(vendor_name); + for (auto &dir_entry : boost::filesystem::directory_iterator(cache_profile_path)) { + const auto &path = dir_entry.path(); + std::string file_path = path.string(); + const bool is_opc_file = boost::iequals(path.extension().string(), ".opc"); + if (!is_json_file(file_path) && !is_opc_file) + continue; - std::map key_values; - std::vector keys(3); - Semver cache_ver; - keys[0] = BBL_JSON_KEY_VERSION; - keys[1] = BBL_JSON_KEY_DESCRIPTION; - keys[2] = BBL_JSON_KEY_FORCE_UPDATE; - get_values_from_json(file_path, keys, key_values); - std::string description = key_values[BBL_JSON_KEY_DESCRIPTION]; - bool force_update = false; - if (key_values.find(BBL_JSON_KEY_FORCE_UPDATE) != key_values.end()) - force_update = (key_values[BBL_JSON_KEY_FORCE_UPDATE] == "1")?true:false; - auto config_version = Semver::parse(key_values[BBL_JSON_KEY_VERSION]); - if (config_version) - cache_ver = *config_version; + const std::string vendor_name = path.stem().string(); + auto print_in_cache = (cache_profile_path / vendor_name / PRESET_PRINT_NAME); + auto filament_in_cache = (cache_profile_path / vendor_name / PRESET_FILAMENT_NAME); + auto machine_in_cache = (cache_profile_path / vendor_name / PRESET_PRINTER_NAME); - std::string changelog; - std::string changelog_file = (cache_profile_path / (vendor_name + ".changelog")).string(); - boost::nowide::ifstream ifs(changelog_file); - if (ifs) { - std::ostringstream oss; - oss<< ifs.rdbuf(); - changelog = oss.str(); - ifs.close(); - } + // Orca (PR #130): a JSON cache entry is only meaningful next to a non-empty + // / preset directory; a stray or half-downloaded .json is + // skipped. An .opc cache is a single self-contained file (validated below), + // so this check does not apply to it. + if (!is_opc_file) { + const auto vendor_folder_in_cache = cache_profile_path / vendor_name; + if (!fs::is_regular_file(path) || !fs::is_directory(vendor_folder_in_cache) || + fs::is_empty(vendor_folder_in_cache)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater]:ignoring invalid cached update for " + << vendor_name << ": expected " << vendor_name + << ".json and a non-empty " << vendor_name << " directory"; + continue; + } + } - if (vendor_ver < cache_ver) { - BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:need to update settings from " << vendor_ver.to_string() - << " to newer version " << cache_ver.to_string() << ", app version " << SLIC3R_VERSION; - Version version; - version.config_version = cache_ver; - version.comment = description; - // Orca: update vendor.json - updates.updates.emplace_back(std::move(file_path), std::move(path_in_vendor.string()), std::move(version), vendor_name, changelog, "", force_update, false); - //Orca: update vendor folder - updates.updates.emplace_back(cache_profile_path / vendor_name, vendor_path / vendor_name, Version(), vendor_name, "", "", force_update, true); - } else { - BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:cached settings for " << vendor_name - << " are not newer than installed version, installed " << vendor_ver.to_string() - << ", cached " << cache_ver.to_string(); - } - } - } - } + if (is_vendor_installed(vendor_name) + || is_opc_file + || fs::exists(print_in_cache) + || fs::exists(filament_in_cache) + || fs::exists(machine_in_cache)) { + // Orca: a vendor installed as a preset cache carries its version there. + Semver vendor_ver = installed_vendor_version(vendor_name); + + Semver cache_ver; + std::string description; + bool force_update = false; + if (is_opc_file) { + cache_ver = VendorCacheFile::usable_version(file_path, vendor_name); + if (!cache_ver.valid()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater]:ignoring unreadable vendor cache " << file_path; + continue; + } + } + else { + std::map key_values; + std::vector keys(3); + keys[0] = BBL_JSON_KEY_VERSION; + keys[1] = BBL_JSON_KEY_DESCRIPTION; + keys[2] = BBL_JSON_KEY_FORCE_UPDATE; + get_values_from_json(file_path, keys, key_values); + description = key_values[BBL_JSON_KEY_DESCRIPTION]; + if (key_values.find(BBL_JSON_KEY_FORCE_UPDATE) != key_values.end()) + force_update = (key_values[BBL_JSON_KEY_FORCE_UPDATE] == "1")?true:false; + auto config_version = Semver::parse(key_values[BBL_JSON_KEY_VERSION]); + if (config_version) + cache_ver = *config_version; + } + + // Orca (PR #130): changelog for this vendor was captured in memory at sync time. + const auto changelog_it = changelogs.find(vendor_name); + std::string changelog = changelog_it != changelogs.end() ? changelog_it->second : std::string(); + + if (vendor_ver < cache_ver) { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:need to update settings from " << vendor_ver.to_string() + << " to newer version " << cache_ver.to_string() << ", app version " << SLIC3R_VERSION; + Version version; + version.config_version = cache_ver; + version.comment = description; + if (is_opc_file) { + // A cache contains the vendor profile and all presets. + // Install it directly; Update::install removes any + // superseded JSON representation. + auto &update = updates.updates.emplace_back( + std::move(file_path), vendor_path / (vendor_name + ".opc"), + std::move(version), vendor_name, changelog, "", force_update, false); + update.is_opc = true; + } + else { + // JSON profile and its preset directory are installed + // separately, as before. + updates.updates.emplace_back(std::move(file_path), + vendor_path / (vendor_name + ".json"), std::move(version), + vendor_name, changelog, "", force_update, false); + updates.updates.emplace_back(cache_profile_path / vendor_name, + vendor_path / vendor_name, Version(), vendor_name, + "", "", force_update, true); + } + } else { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:cached settings for " << vendor_name + << " are not newer than installed version, installed " << vendor_ver.to_string() + << ", cached " << cache_ver.to_string(); + } + } + } return updates; } @@ -1317,6 +1410,9 @@ void PresetUpdater::sync(std::string http_url, std::string language, std::string // after the startup printer preset has been restored. this->p->sync_plugins(http_url, plugin_version); this->p->sync_printer_config(http_url); + // Orca (PR #130): the filament library is always installed, so refresh it + // from the updater on every startup sync rather than deferring to check_vendor_update(). + this->p->sync_vendor_config(PresetBundle::ORCA_FILAMENT_LIBRARY); //if (p->cancel) // return; //remove the tooltip currently @@ -1349,6 +1445,302 @@ void PresetUpdater::check_vendor_update(const std::string& vendor_id) }); } +// Orca: ask the server which vendors from `system_vendors` have a profile bundle available that +// isn't installed yet (or is newer than what's installed). Request body maps vendor id -> currently +// installed profile version (unknown/not-yet-installed vendors report "0.0.0"). Response maps +// vendor id -> {version, download_url, changelog} for each vendor the server has an update for. +// Any such vendor is downloaded and cached under ota/profiles the same way sync_vendor_config() +// does; the caller's check_config_updates_from_updater() -> get_config_updates()/perform_updates() +// flow then installs the cached profiles into data_dir()/system. +// +// Mirrors check_vendor_update()/sync_vendor_config(): the network query and the download/extract +// work run on a background thread (vendor_check_threads), never on the calling (UI) thread. Only +// the confirmation dialog (which must run on the UI thread) and the final callback are marshaled +// back via CallAfter(). +void PresetUpdater::priv::check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback) +{ + vendor_check_threads.emplace_back([this, system_vendors, callback]() { + AppConfig* app_config = GUI::wxGetApp().app_config; + std::string url = app_config->profile_update_url() + "/new?orcaslicer_version=" + Http::url_encode(SoftFever_VERSION); + + auto check_cancel = [this](Http::Progress, bool& cancel_http) { + if (cancel || vendor_check_cancel) + cancel_http = true; + }; + + json request_body = json::object(); + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] checking new vendors for:"; + for (const auto& vendor_id : system_vendors) { + // Orca: installed_vendor_version() reads whichever form the vendor is + // installed as - the .json profile or the .opc preset cache stamp - + // so a cache-only vendor is not reported as version 0.0.0 and then + // endlessly re-offered by the server. + Semver installed_ver = installed_vendor_version(vendor_id); + request_body[vendor_id] = installed_ver.to_string(); + BOOST_LOG_TRIVIAL(info) << vendor_id << " (installed version " << installed_ver.to_string() << ")"; + } + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendor check request url: " << url; + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendor check request body: " << request_body.dump(2); + + json response_json; + bool got_response = false; + + auto post = Http::post(url); + + post.timeout_connect(5); + post.on_progress(check_cancel); + post.header("Content-Type", "application/json"); + post.on_error([](std::string body, std::string error, unsigned http_status) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendor check HTTP error: " << error; + }) + .on_complete([&response_json, &got_response](std::string body, unsigned http_status) { + if (http_status != 200) + return; + try { + json j = json::parse(body); + if (j.is_object()) { + response_json = std::move(j); + got_response = true; + } + } catch (const std::exception& e) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendor check JSON parse failed: " << e.what(); + } + }); + + post.set_post_body(request_body.dump()); + post.perform_sync(); + + if (cancel || vendor_check_cancel) + return; + + if (!got_response) { + GUI::wxGetApp().CallAfter([callback]() { callback({}, false); }); + return; + } + + // Collect candidates before touching the filesystem or network again. + struct NewVendorCandidate + { + std::string vendor_id; + Semver version; + std::string download_url; + std::string changelog; + }; + std::vector candidates; + for (auto it = response_json.begin(); it != response_json.end(); ++it) { + const json& entry = it.value(); + if (!entry.is_object()) + continue; + std::string download_url_str = entry.value("download_url", std::string()); + if (download_url_str.empty()) + continue; + + NewVendorCandidate candidate; + candidate.vendor_id = it.key(); + auto parsed_ver = Semver::parse(entry.value("version", std::string())); + candidate.version = parsed_ver ? *parsed_ver : Semver(); + candidate.download_url = std::move(download_url_str); + candidate.changelog = entry.value("changelog", std::string()); + candidates.push_back(std::move(candidate)); + } + + if (candidates.empty()) { + GUI::wxGetApp().CallAfter([callback]() { callback({}, false); }); + return; + } + + // Orca: the confirmation dialog must run on the UI thread; if confirmed, the actual + // download/install work is dispatched back onto a new background thread from there, + // same as check_vendor_update() does for a single vendor. + GUI::wxGetApp().CallAfter([this, candidates, callback]() { + std::vector updates_msg; + for (const auto& candidate : candidates) + updates_msg.emplace_back(candidate.vendor_id, candidate.version, std::string(), candidate.changelog); + + GUI::MsgUpdateConfig dlg(updates_msg); + if (dlg.ShowModal() != wxID_OK) { + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] user declined installing new vendors"; + callback({}, true); + return; + } + + // Orca: the actual download runs on a background thread below (so it doesn't block the + // UI), but that also means nothing visibly happens for the several seconds it can take + // (longer still if a retry kicks in) — push a notification so it's clear work is + // ongoing rather than looking hung. + { + std::string vendor_list; + for (const auto& candidate : candidates) { + if (!vendor_list.empty()) + vendor_list += ", "; + vendor_list += candidate.vendor_id; + } + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + _u8L("Downloading new vendor profile(s): ") + vendor_list + _u8L("...")); + } + + vendor_check_threads.emplace_back([this, candidates, callback]() { + auto check_cancel = [this](Http::Progress, bool& cancel_http) { + if (cancel || vendor_check_cancel) + cancel_http = true; + }; + + std::vector new_vendor_ids; + std::vector failed_vendor_ids; + auto cache_profile_path = cache_path / "profiles"; + fs::create_directories(cache_profile_path); + boost::system::error_code ec; + + for (const auto& candidate : candidates) { + if (cancel || vendor_check_cancel) + break; + + const std::string& vendor_id = candidate.vendor_id; + const std::string& download_url_str = candidate.download_url; + std::string changelog = candidate.changelog; + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] downloading new vendor " << vendor_id << " version " << candidate.version.to_string(); + + // Clear only this vendor's cached data, same as sync_vendor_config(). + fs::remove_all(cache_profile_path / vendor_id, ec); + fs::remove(cache_profile_path / (vendor_id + ".json"), ec); + + fs::path download_file = cache_path / (vendor_id + TMP_EXTENSION); + bool download_ok = false; + + // Orca: same retry pattern as Plater.cpp's project download — a single-shot + // 5s connect timeout against GitHub's redirect chain is prone to transient + // failures (DNS/connect hiccups) that succeed a moment later, so retry a few + // times before giving up rather than failing the whole vendor on one blip. + int retry_count = 0; + const int max_retries = 3; + bool keep_trying = true; + while (keep_trying && retry_count < max_retries) { + retry_count++; + Http::get(download_url_str) + .timeout_connect(5) + .on_progress(check_cancel) + .on_error([&vendor_id, &retry_count](std::string body, std::string error, unsigned http_status) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] download failed for new vendor " << vendor_id + << " (attempt " << retry_count << "/" << max_retries << "): " << error; + }) + .on_complete([&](std::string body, unsigned http_status) { + if (http_status != 200) + return; + fs::fstream file(download_file, std::ios::out | std::ios::binary | std::ios::trunc); + if (!file.good()) + return; + file.write(body.c_str(), body.size()); + file.close(); + if (file.good()) + download_ok = true; + }) + .perform_sync(); + + keep_trying = !download_ok && !(cancel || vendor_check_cancel); + } + + if (!download_ok || cancel || vendor_check_cancel) { + if (!download_ok) + failed_vendor_ids.push_back(vendor_id); + continue; + } + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] extracting new vendor " << vendor_id; + if (!extract_file(download_file, cache_profile_path)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] extraction failed for new vendor " << vendor_id; + fs::remove(download_file, ec); + failed_vendor_ids.push_back(vendor_id); + continue; + } + fs::remove(download_file, ec); + + const fs::path cached_vendor_json = cache_profile_path / (vendor_id + ".json"); + const fs::path cached_vendor_folder = cache_profile_path / vendor_id; + if (!fs::is_regular_file(cached_vendor_json) || !fs::is_directory(cached_vendor_folder) || + fs::is_empty(cached_vendor_folder)) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] rejected new vendor " << vendor_id << ": expected " << vendor_id + << ".json and a non-empty " << vendor_id << " directory"; + fs::remove_all(cached_vendor_folder, ec); + fs::remove(cached_vendor_json, ec); + failed_vendor_ids.push_back(vendor_id); + continue; + } + + { + std::lock_guard lock(vendor_changelogs_mutex); + vendor_changelogs[vendor_id] = std::move(changelog); + } + + new_vendor_ids.push_back(vendor_id); + } + + if (!new_vendor_ids.empty()) { + // Orca: the user already confirmed via the dialog above, so install right away + // instead of routing through check_config_updates_from_updater(), which only + // queues a passive notification (meant for the silent background per-vendor + // check) requiring yet another click + confirmation before anything is copied + // into data_dir()/system. + GUI::wxGetApp().CallAfter([this, new_vendor_ids] { + AppConfig* app_config = GUI::wxGetApp().app_config; + Updates updates = get_config_updates(app_config->orig_version()); + + // Only install the vendors just confirmed; leave any other unrelated + // pending cached update (from a background sync_vendor_config()) alone, + // still gated behind its own notification/confirmation. + std::set confirmed(new_vendor_ids.begin(), new_vendor_ids.end()); + Updates filtered; + for (auto& update : updates.updates) + if (confirmed.count(update.vendor)) + filtered.updates.push_back(std::move(update)); + + if (filtered.updates.empty()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] new vendors cached but no updates detected"; + return; + } + + if (!perform_updates(std::move(filtered)) || !reload_configs_update_gui()) { + BOOST_LOG_TRIVIAL(warning) << "[Orca Updater] failed to install new vendors"; + return; + } + + BOOST_LOG_TRIVIAL(info) << "[Orca Updater] new vendors installed"; + for (const auto& vendor_id : new_vendor_ids) { + Semver cur_ver = GUI::wxGetApp().preset_bundle->get_vendor_profile_version(vendor_id); + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + GUI::NotificationType::PresetUpdateFinished, + GUI::NotificationManager::NotificationLevel::ImportantNotificationLevel, + Slic3r::format(_u8L("Configuration package: %1% updated to %2%"), vendor_id, cur_ver.to_string())); + } + }); + } + + if (!failed_vendor_ids.empty()) { + GUI::wxGetApp().CallAfter([failed_vendor_ids] { + std::string vendor_list; + for (const auto& vendor_id : failed_vendor_ids) { + if (!vendor_list.empty()) + vendor_list += ", "; + vendor_list += vendor_id; + } + GUI::wxGetApp().plater()->get_notification_manager()->push_notification( + _u8L("Failed to download vendor profile(s): ") + vendor_list); + }); + } + + GUI::wxGetApp().CallAfter([callback, new_vendor_ids]() { callback(new_vendor_ids, false); }); + }); + }); + }); +} + +void PresetUpdater::check_new_vendors(const std::set& system_vendors, + std::function, bool)> callback) +{ + p->check_new_vendors(system_vendors, std::move(callback)); +} + void PresetUpdater::slic3r_update_notify() { if (! p->enabled_version_check) @@ -1370,10 +1762,9 @@ static bool reload_configs_update_gui() GUI::wxGetApp().load_current_presets(); GUI::wxGetApp().plater()->set_bed_shape(); - return true; + return true; } - PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3r_version, UpdateParams params) const { if (! p->enabled_config_update) { return R_NOOP; } @@ -1415,7 +1806,7 @@ PresetUpdater::UpdateResult PresetUpdater::config_update(const Semver& old_slic3 ->get_notification_manager() ->push_notification(GUI::NotificationType::PresetUpdateFinished, GUI::NotificationManager::NotificationLevel::ImportantNotificationLevel, - _u8L("Configuration package: ") + b + _u8L(" updated to ") + cur_ver.to_string()); + Slic3r::format(_u8L("Configuration package: %1% updated to %2%"), b, cur_ver.to_string())); } return R_UPDATE_INSTALLED; } diff --git a/src/slic3r/Utils/PresetUpdater.hpp b/src/slic3r/Utils/PresetUpdater.hpp index 27ec6748f2..ccb0902fd5 100644 --- a/src/slic3r/Utils/PresetUpdater.hpp +++ b/src/slic3r/Utils/PresetUpdater.hpp @@ -1,7 +1,9 @@ #ifndef slic3r_PresetUpdate_hpp_ #define slic3r_PresetUpdate_hpp_ +#include #include +#include #include #include @@ -59,6 +61,12 @@ public: void on_update_notification_confirm(); void do_printer_config_update(); void check_vendor_update(const std::string& vendor_id); + // Orca: async, mirrors check_vendor_update()/sync_vendor_config() — the network query and any + // download/install work happen on a background thread; only the confirmation dialog runs on + // the UI thread. `callback` is invoked on the UI thread with the ids of vendors that were + // installed (empty if none were found, or the user declined) and whether the user declined. + void check_new_vendors(const std::set& system_vendors, + std::function installed_vendors, bool declined)> callback); bool version_check_enabled() const; diff --git a/src/slic3r/Utils/Process.cpp b/src/slic3r/Utils/Process.cpp index 518462bbc9..96da521114 100644 --- a/src/slic3r/Utils/Process.cpp +++ b/src/slic3r/Utils/Process.cpp @@ -21,6 +21,7 @@ #include #endif +#include #include namespace Slic3r { diff --git a/src/slic3r/Utils/QidiPrinterAgent.cpp b/src/slic3r/Utils/QidiPrinterAgent.cpp index 6b05480194..1f437853ba 100644 --- a/src/slic3r/Utils/QidiPrinterAgent.cpp +++ b/src/slic3r/Utils/QidiPrinterAgent.cpp @@ -9,6 +9,8 @@ #include #include +using json = nlohmann::json; + namespace Slic3r { namespace { diff --git a/src/slic3r/Utils/Repetier.cpp b/src/slic3r/Utils/Repetier.cpp index 0d269e1cd5..a524f29b71 100644 --- a/src/slic3r/Utils/Repetier.cpp +++ b/src/slic3r/Utils/Repetier.cpp @@ -73,7 +73,7 @@ bool Repetier::test(wxString &msg) const res = false; msg = format_error(body, error, status); }) - .on_complete([&, this](std::string body, unsigned) { + .on_complete([&](std::string body, unsigned) { BOOST_LOG_TRIVIAL(debug) << boost::format("%1%: Got version: %2%") % name % body; try { diff --git a/src/slic3r/Utils/Serial.cpp b/src/slic3r/Utils/Serial.cpp index 4db1acc6b6..f8c03ceb26 100644 --- a/src/slic3r/Utils/Serial.cpp +++ b/src/slic3r/Utils/Serial.cpp @@ -331,7 +331,9 @@ void Serial::set_baud_rate(unsigned baud_rate) speed_t c_ispeed; speed_t c_ospeed; }; +#ifndef BOTHER #define BOTHER CBAUDEX +#endif termios2 ios; handle_errno(::ioctl(handle, TCGETS2, &ios)); diff --git a/src/slic3r/Utils/SimplyPrint.cpp b/src/slic3r/Utils/SimplyPrint.cpp index bbfd5209c9..a3edfd98ee 100644 --- a/src/slic3r/Utils/SimplyPrint.cpp +++ b/src/slic3r/Utils/SimplyPrint.cpp @@ -192,7 +192,7 @@ bool SimplyPrint::do_api_call(std::function bool res = true; - const auto create_request = [this, &build_request, &res, &on_complete](const std::string& access_token, bool is_retry) { + const auto create_request = [&build_request, &res, &on_complete](const std::string& access_token, bool is_retry) { auto http = build_request(is_retry); set_auth(http, access_token); http.header("User-Agent", "SimplyPrint Orca Plugin") @@ -300,7 +300,7 @@ bool SimplyPrint::do_temp_upload(const boost::filesystem::path& file_path, return http; }, - [&error_fn, &filename, this](std::string body, unsigned status) { + [&error_fn, &filename](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File uploaded: HTTP %1%: %2%") % status % body; // Get file UUID @@ -423,7 +423,7 @@ bool SimplyPrint::do_chunk_upload(const boost::filesystem::path& file_path, cons return http; }, - [&error_fn, i, chunk_amount, this, &chunk_id, &delete_token](std::string body, unsigned status) { + [&error_fn, i, chunk_amount, &chunk_id, &delete_token](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << boost::format("SimplyPrint: File chunk [%1%/%2%] uploaded: HTTP %3%: %4%") % (i + 1) % chunk_amount % status % body; if (i == 0) { // First chunk, parse chunk id diff --git a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp index 9b9a6809fd..5783738af7 100644 --- a/src/slic3r/Utils/SnapmakerPrinterAgent.cpp +++ b/src/slic3r/Utils/SnapmakerPrinterAgent.cpp @@ -6,6 +6,8 @@ #include "nlohmann/json.hpp" #include +using json = nlohmann::json; + namespace Slic3r { namespace { @@ -39,7 +41,7 @@ std::string find_closest_color_preset_by_vendor_and_type(const PresetCollection& std::string p_color = p.config.opt_string("default_filament_colour", 0u); unsigned int p_color_value; if (!p_color.empty()) { - unsigned int hash_pos = p_color.find("#"); + size_t hash_pos = p_color.find("#"); p_color_value = std::stoul(p_color.substr(hash_pos != std::string::npos ? hash_pos + 1 : 0), nullptr, 16); } else { // Default to black if no color specified in profile. Assume other profiles might be a closer color match. diff --git a/src/slic3r/plugin/PluginAuditManager.cpp b/src/slic3r/plugin/PluginAuditManager.cpp index 29aa59b253..4d69a4f761 100644 --- a/src/slic3r/plugin/PluginAuditManager.cpp +++ b/src/slic3r/plugin/PluginAuditManager.cpp @@ -7,11 +7,127 @@ #include #include +#include +#include #include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include +#include namespace Slic3r { +// extensive list of audit events can be found at https://docs.python.org/3/library/audit_events.html +static const std::unordered_map audit_event_categories{ + // fsread + {"glob.glob", AuditEventCategory::FsRead}, + {"glob.glob/2", AuditEventCategory::FsRead}, + {"os.fwalk", AuditEventCategory::FsRead}, + {"os.getxattr", AuditEventCategory::FsRead}, + {"os.listdir", AuditEventCategory::FsRead}, + {"os.listdrives", AuditEventCategory::FsRead}, + {"os.listmounts", AuditEventCategory::FsRead}, + {"os.listvolumes", AuditEventCategory::FsRead}, + {"os.listxattr", AuditEventCategory::FsRead}, + {"os.scandir", AuditEventCategory::FsRead}, + {"os.walk", AuditEventCategory::FsRead}, + {"pathlib.Path.glob", AuditEventCategory::FsRead}, + {"pathlib.Path.rglob", AuditEventCategory::FsRead}, + + // fsreadwrite + {"os.chflags", AuditEventCategory::FsReadWrite}, + {"os.chmod", AuditEventCategory::FsReadWrite}, + {"os.chown", AuditEventCategory::FsReadWrite}, + {"os.removexattr", AuditEventCategory::FsReadWrite}, + {"os.rename", AuditEventCategory::FsReadWrite}, + {"os.setxattr", AuditEventCategory::FsReadWrite}, + {"os.truncate", AuditEventCategory::FsReadWrite}, + {"os.utime", AuditEventCategory::FsReadWrite}, + {"shutil.chown", AuditEventCategory::FsReadWrite}, + {"shutil.copymode", AuditEventCategory::FsReadWrite}, + {"shutil.copystat", AuditEventCategory::FsReadWrite}, + {"shutil.copyfile", AuditEventCategory::FsReadWrite}, + {"shutil.copytree", AuditEventCategory::FsReadWrite}, + {"shutil.make_archive", AuditEventCategory::FsReadWrite}, + {"shutil.move", AuditEventCategory::FsReadWrite}, + {"shutil.unpack_archive", AuditEventCategory::FsReadWrite}, + + // fscreate + {"os.link", AuditEventCategory::FsCreate}, + {"os.mkdir", AuditEventCategory::FsCreate}, + {"os.symlink", AuditEventCategory::FsCreate}, + {"tempfile.mkdtemp", AuditEventCategory::FsCreate}, + {"tempfile.mkstemp", AuditEventCategory::FsCreate}, + {"_winapi.CreateJunction", AuditEventCategory::FsCreate}, + + // fsdelete + {"os.remove", AuditEventCategory::FsDelete}, + {"os.rmdir", AuditEventCategory::FsDelete}, + {"shutil.rmtree", AuditEventCategory::FsDelete}, + + // http + {"http.client.connect", AuditEventCategory::Http}, + {"http.client.send", AuditEventCategory::Http}, + {"urllib.Request", AuditEventCategory::Http}, + + // socket + {"socket.__new__", AuditEventCategory::Socket}, + {"socket.bind", AuditEventCategory::Socket}, + {"socket.connect", AuditEventCategory::Socket}, + {"socket.getaddrinfo", AuditEventCategory::Socket}, + {"socket.gethostbyaddr", AuditEventCategory::Socket}, + {"socket.gethostbyname", AuditEventCategory::Socket}, + {"socket.gethostname", AuditEventCategory::Socket}, + {"socket.getnameinfo", AuditEventCategory::Socket}, + {"socket.getservbyname", AuditEventCategory::Socket}, + {"socket.getservbyport", AuditEventCategory::Socket}, + {"socket.sendmsg", AuditEventCategory::Socket}, + {"socket.sendto", AuditEventCategory::Socket}, + + // processcreate + {"os.fork", AuditEventCategory::ProcessCreate}, + {"os.forkpty", AuditEventCategory::ProcessCreate}, + {"os.posix_spawn", AuditEventCategory::ProcessCreate}, + {"os.spawn", AuditEventCategory::ProcessCreate}, + {"os.system", AuditEventCategory::ProcessCreate}, + {"os.startfile", AuditEventCategory::ProcessCreate}, + {"os.startfile/2", AuditEventCategory::ProcessCreate}, + {"pty.spawn", AuditEventCategory::ProcessCreate}, + {"subprocess.Popen", AuditEventCategory::ProcessCreate}, + {"_winapi.CreateProcess", AuditEventCategory::ProcessCreate}, + {"_posixsubprocess.fork_exec", AuditEventCategory::ProcessCreate}, +}; + +// Returns the category event_name belongs to, or AuditEventCategory::None when it isn't audited. +static AuditEventCategory event_category(const std::string& event_name) +{ + const auto it = audit_event_categories.find(event_name); + return it == audit_event_categories.end() ? AuditEventCategory::None : it->second; +} + +// True for the categories whose targets are filesystem paths, as opposed to a network +// address or a process command line -- the deny-path and allowed-root checks only make sense +// against a path. +static bool is_fs_category(AuditEventCategory category) +{ + switch (category) { + case AuditEventCategory::FsRead: + case AuditEventCategory::FsReadWrite: + case AuditEventCategory::FsCreate: + case AuditEventCategory::FsDelete: + return true; + default: + return false; + } +} + // --------------------------------------------------------------------------- // Path safety // --------------------------------------------------------------------------- @@ -78,24 +194,21 @@ bool is_inside_allowed_root(const boost::filesystem::path& candidate, const boos // ScopedPluginAuditContext // --------------------------------------------------------------------------- -thread_local std::string PluginAuditManager::m_current_plugin_key = ""; -thread_local std::string PluginAuditManager::m_current_capability_name = ""; -thread_local PluginAuditManager::AuditMode PluginAuditManager::m_audit_mode = PluginAuditManager::AuditMode::Loading; -thread_local std::vector PluginAuditManager::m_scoped_allowed_roots; +thread_local std::string PluginAuditManager::m_current_plugin_key = ""; +thread_local std::string PluginAuditManager::m_current_capability_name = ""; +thread_local std::vector PluginAuditManager::m_scoped_allowed_roots; +thread_local bool PluginAuditManager::m_audit_denial_pending = false; thread_local bool PluginAuditManager::m_has_last_violation = false; thread_local AuditViolation PluginAuditManager::m_last_violation; ScopedPluginAuditContext::ScopedPluginAuditContext(const std::string& plugin_key, - const std::string& capability_name, - PluginAuditManager::AuditMode mode) + const std::string& capability_name) : m_previous_id(PluginAuditManager::instance().current_plugin()) , m_previous_capability(PluginAuditManager::instance().current_capability()) - , m_previous_mode(PluginAuditManager::instance().audit_mode()) , m_previous_scoped_roots(PluginAuditManager::m_scoped_allowed_roots) { PluginAuditManager::instance().set_current_plugin(plugin_key); PluginAuditManager::instance().set_current_capability(capability_name); - PluginAuditManager::instance().set_audit_mode(mode); PluginAuditManager::m_scoped_allowed_roots.clear(); } @@ -103,7 +216,6 @@ ScopedPluginAuditContext::~ScopedPluginAuditContext() { PluginAuditManager::instance().set_current_plugin(m_previous_id); PluginAuditManager::instance().set_current_capability(m_previous_capability); - PluginAuditManager::instance().set_audit_mode(m_previous_mode); PluginAuditManager::m_scoped_allowed_roots = std::move(m_previous_scoped_roots); } @@ -129,23 +241,24 @@ std::string PluginAuditManager::current_capability() const { return m_current_ca void PluginAuditManager::clear_current_capability() { m_current_capability_name.clear(); } -void PluginAuditManager::add_global_allowed_root(const boost::filesystem::path& root) +void PluginAuditManager::add_global_allowed_root(const boost::filesystem::path& root, bool allow_write) { if (root.empty()) return; std::lock_guard lock(m_mutex); - m_global_allowed_roots.push_back(root); - BOOST_LOG_TRIVIAL(info) << "[AUDIT] Global allowed root: " << root.string(); + m_global_allowed_roots.push_back({root, allow_write}); + BOOST_LOG_TRIVIAL(info) << "[AUDIT] Global allowed root: " << root.string() << " allow_write=" << allow_write; } -void PluginAuditManager::add_scoped_allowed_root(const boost::filesystem::path& root) +void PluginAuditManager::add_scoped_allowed_root(const boost::filesystem::path& root, bool allow_write) { if (root.empty()) return; - m_scoped_allowed_roots.push_back(root); - BOOST_LOG_TRIVIAL(info) << "[AUDIT] Scoped allowed root for plugin " << current_plugin() << ": " << root.string(); + m_scoped_allowed_roots.push_back({root, allow_write}); + BOOST_LOG_TRIVIAL(info) << "[AUDIT] Scoped allowed root for plugin " << current_plugin() << ": " << root.string() + << " allow_write=" << allow_write; } // --------------------------------------------------------------------------- @@ -199,12 +312,65 @@ bool PluginAuditManager::is_denied_filename(const boost::filesystem::path& candi } // --------------------------------------------------------------------------- -// Audit mode +// Denied path keywords // --------------------------------------------------------------------------- -void PluginAuditManager::set_audit_mode(AuditMode mode) { m_audit_mode = mode; } +void PluginAuditManager::add_denied_path_keyword(const std::string& keyword) +{ + if (keyword.empty()) + return; -PluginAuditManager::AuditMode PluginAuditManager::audit_mode() const { return m_audit_mode; } + std::string lower = keyword; + std::transform(lower.begin(), lower.end(), lower.begin(), [](unsigned char c) { return std::tolower(c); }); + + std::lock_guard lock(m_mutex); + m_denied_path_keywords.push_back(lower); + BOOST_LOG_TRIVIAL(info) << "[AUDIT] Denied path keyword: " << lower; +} + +std::vector PluginAuditManager::default_denied_path_keywords() +{ + // Broad, categorical rules on top of the exact-name is_denied_filename registry: a plugin + // must never be able to reach a secret, a certificate, or a configuration file just because + // it happens to live inside an otherwise-allowed root (e.g. the bundled TLS client cert at + // resources_dir()/cert/..., which would become reachable the moment resources_dir() is + // granted as a read-only allowed root). + return {"secret", "cert", "conf"}; +} + +bool PluginAuditManager::is_denied_path_keyword(const boost::filesystem::path& candidate) const +{ + namespace fs = boost::filesystem; + + boost::system::error_code ec; + fs::path canon = fs::weakly_canonical(candidate, ec); + if (ec) { + canon = fs::absolute(candidate, ec).lexically_normal(); + if (ec) + canon = candidate; + } + + std::lock_guard lock(m_mutex); + if (m_denied_path_keywords.empty()) + return false; + + for (const auto& component : canon) { + std::string name = component.string(); + if (name.empty()) + continue; + std::transform(name.begin(), name.end(), name.begin(), [](unsigned char c) { return std::tolower(c); }); + for (const auto& keyword : m_denied_path_keywords) { + if (name.find(keyword) != std::string::npos) + return true; + } + } + return false; +} + +bool PluginAuditManager::is_denied_path(const boost::filesystem::path& candidate) const +{ + return is_denied_filename(candidate) || is_denied_path_keyword(candidate); +} // --------------------------------------------------------------------------- // Policy checks @@ -219,20 +385,20 @@ AuditDecision PluginAuditManager::check_path_access(const boost::filesystem::pat if (plugin_key.empty()) return {true, ""}; // not running inside a plugin context - // Denied filenames are checked first, above both the Loading exemption below and the - // allowed roots. The app config and the cloud refresh token live directly inside - // data_dir(), which is a global allowed root, and no scope ever sets Enforcing — so a - // deny placed any lower would be unreachable for reads. + // Denied filenames/keywords are checked before the allowed roots. The app config and the + // cloud refresh token live directly inside data_dir(), which is a global allowed root, and + // the bundled TLS client cert lives inside resources_dir(), a read-only global allowed + // root, so a deny placed any lower would be unreachable. if (is_denied_filename(path)) { BOOST_LOG_TRIVIAL(warning) << "[AUDIT] block path=" << path.string() << " is_write=" << is_write << " plugin=" << plugin_key << " reason=denied filename"; return {false, "denied filename"}; } - - // During import/loading, only block writes. Python must be able to read - // stdlib modules and the plugin file itself during import. - if (m_audit_mode == AuditMode::Loading && !is_write) - return {true, ""}; + if (is_denied_path_keyword(path)) { + BOOST_LOG_TRIVIAL(warning) << "[AUDIT] block path=" << path.string() << " is_write=" << is_write + << " plugin=" << plugin_key << " reason=denied path keyword"; + return {false, "denied path keyword"}; + } namespace fs = boost::filesystem; fs::path candidate = path; @@ -245,8 +411,11 @@ AuditDecision PluginAuditManager::check_path_access(const boost::filesystem::pat candidate = absolute_candidate; } + // A root that doesn't allow writes only matches a read-shaped request; a write/create/ + // delete-shaped one falls through to "outside allowed root" for that root even though the + // path is physically inside it. for (const auto& root : m_scoped_allowed_roots) { - if (is_inside_allowed_root(candidate, root)) { + if ((!is_write || root.allow_write) && is_inside_allowed_root(candidate, root.path)) { return {true, ""}; } } @@ -254,14 +423,13 @@ AuditDecision PluginAuditManager::check_path_access(const boost::filesystem::pat { std::lock_guard lock(m_mutex); for (const auto& root : m_global_allowed_roots) { - if (is_inside_allowed_root(candidate, root)) { + if ((!is_write || root.allow_write) && is_inside_allowed_root(candidate, root.path)) { return {true, ""}; } } } BOOST_LOG_TRIVIAL(warning) << "[AUDIT] block path=" << candidate.string() << " is_write=" << is_write - << " audit_mode=" << (m_audit_mode == AuditMode::Loading ? "Loading" : "Enforcing") << " plugin=" << plugin_key; return {false, "outside allowed root"}; } @@ -269,19 +437,99 @@ AuditDecision PluginAuditManager::check_path_access(const boost::filesystem::pat AuditDecision PluginAuditManager::check_open(const std::string& path_str, const std::string& mode) { const bool is_write = mode.find('w') != std::string::npos || mode.find('a') != std::string::npos || - mode.find('+') != std::string::npos; + mode.find('+') != std::string::npos || mode.find('x') != std::string::npos; return check_path_access(boost::filesystem::path(path_str), is_write); } +bool PluginAuditManager::request_filesystem_read_permissions(const std::string& plugin_key, + const std::vector& paths) +{ + if (plugin_key.empty() || paths.empty()) + return true; + + PluginDescriptor descriptor; + if (!PluginManager::instance().try_get_plugin_descriptor(plugin_key, descriptor) || descriptor.plugin_root.empty()) + return false; + + PluginInstallState state; + read_install_state(boost::filesystem::path(descriptor.plugin_root), state); + + std::vector missing; + for (const std::string& path : paths) { + if (std::find(state.permissions.fs_read.begin(), state.permissions.fs_read.end(), path) == state.permissions.fs_read.end()) + missing.push_back(path); + } + if (missing.empty()) + return true; + + if (wxTheApp == nullptr || GUI::wxGetApp().is_closing()) + return false; + + auto show_dialog = [&descriptor, &missing]() { + wxString requested_paths; + for (const std::string& path : missing) + requested_paths += wxString::FromUTF8(path.c_str()) + "\n"; + + wxMessageDialog dialog( + nullptr, + wxString::Format("Plugin \"%s\" requests filesystem read access to:\n%s", + wxString::FromUTF8(descriptor.name.c_str()), requested_paths), + "Plugin permissions", + wxYES_NO | wxICON_WARNING); + return dialog.ShowModal() == wxID_YES; + }; + + bool granted = false; + if (wxIsMainThread()) { + granted = show_dialog(); + } else { + auto result = std::make_shared>(); + auto future = result->get_future(); + GUI::wxGetApp().CallAfter([result, descriptor_name = descriptor.name, missing]() { + wxString requested_paths; + for (const std::string& path : missing) + requested_paths += wxString::FromUTF8(path.c_str()) + "\n"; + + wxMessageDialog dialog( + nullptr, + wxString::Format("Plugin \"%s\" requests filesystem read access to:\n%s", + wxString::FromUTF8(descriptor_name.c_str()), requested_paths), + "Plugin permissions", + wxYES_NO | wxICON_WARNING); + result->set_value(dialog.ShowModal() == wxID_YES); + }); + granted = future.get(); + } + + if (!granted) + return false; + + if (state.plugin_name.empty()) { + state.installed_from = descriptor.is_cloud_plugin() ? "cloud" : "local"; + state.installed_version = !descriptor.installed_version.empty() ? descriptor.installed_version : descriptor.version; + state.plugin_name = descriptor.name; + state.cloud_uuid = descriptor.cloud_uuid(); + state.enabled = true; + } + + state.permissions.fs_read.insert(state.permissions.fs_read.end(), missing.begin(), missing.end()); + return write_install_state(boost::filesystem::path(descriptor.plugin_root), state); +} + void PluginAuditManager::report_violation(const AuditViolation& violation) { m_last_violation = violation; m_has_last_violation = true; + m_audit_denial_pending = true; BOOST_LOG_TRIVIAL(warning) << "[AUDIT BLOCKED] plugin=" << violation.plugin_key << " event=" << violation.event_name - << " path=" << violation.path.string() << " reason=" << violation.reason; + << " reason=" << violation.reason; } +bool PluginAuditManager::audit_denial_pending() const { return m_audit_denial_pending; } + +void PluginAuditManager::clear_audit_denial() { m_audit_denial_pending = false; } + void PluginAuditManager::clear_last_violation() { m_has_last_violation = false; @@ -297,31 +545,326 @@ bool PluginAuditManager::last_violation(AuditViolation& violation) const return true; } +bool PluginAuditManager::has_approved_ancestor(const std::string& plugin_key, + const std::vector& call_site_ids) const +{ + if (plugin_key.empty() || call_site_ids.empty()) + return false; + + std::lock_guard lock(m_mutex); + auto it = m_approved_call_sites.find(plugin_key); + if (it == m_approved_call_sites.end()) + return false; + + for (const auto& id : call_site_ids) + if (it->second.count(id)) + return true; + return false; +} + +void PluginAuditManager::record_approved_call_sites(const std::string& plugin_key, + const std::vector& call_site_ids) +{ + if (plugin_key.empty() || call_site_ids.empty()) + return; + + std::lock_guard lock(m_mutex); + auto& approved = m_approved_call_sites[plugin_key]; + approved.insert(call_site_ids.begin(), call_site_ids.end()); +} + // --------------------------------------------------------------------------- // The C-level audit hook // --------------------------------------------------------------------------- -namespace { +namespace PluginAuditDetail { + +PyObject* tuple_item(PyObject* args, Py_ssize_t index) +{ + if (!args || !PyTuple_Check(args) || index < 0 || index >= PyTuple_GET_SIZE(args)) + return nullptr; + return PyTuple_GET_ITEM(args, index); +} + +std::string python_path(PyObject* object) +{ + if (!object) + return {}; + + PyObject* path_object = PyOS_FSPath(object); + if (!path_object) { + PyErr_Clear(); + return {}; + } + + const char* path = PyUnicode_Check(path_object) ? PyUnicode_AsUTF8(path_object) : PyBytes_AsString(path_object); + std::string result = path ? path : ""; + Py_DECREF(path_object); + if (!path) + PyErr_Clear(); + return result; +} + +std::string python_unicode(PyObject* object) +{ + if (!object || !PyUnicode_Check(object)) + return {}; + const char* text = PyUnicode_AsUTF8(object); + if (!text) { + PyErr_Clear(); + return {}; + } + return text; +} + +std::string python_str(PyObject* object) +{ + if (!object) + return {}; + + PyObject* str_object = PyObject_Str(object); + if (!str_object) { + PyErr_Clear(); + return {}; + } + + const std::string result = python_unicode(str_object); + Py_DECREF(str_object); + return result; +} + +std::vector call_site_identities(const std::string& plugin_root) +{ + std::vector ids; + if (plugin_root.empty()) + return ids; + + PyFrameObject* frame = PyEval_GetFrame(); // borrowed reference + Py_XINCREF(frame); // normalize to an owned reference for the loop below + + while (frame) { + PyCodeObject* code = PyFrame_GetCode(frame); // new reference + const std::string filename = python_unicode(reinterpret_cast(code->co_filename)); + const bool is_plugin_frame = !filename.empty() && boost::algorithm::starts_with(filename, plugin_root); + + std::string id; + if (!is_plugin_frame && !filename.empty()) { + const std::string funcname = python_unicode(reinterpret_cast(code->co_name)); + id = filename + ":" + funcname + ":" + std::to_string(code->co_firstlineno); + } + Py_DECREF(code); + + PyFrameObject* back = PyFrame_GetBack(frame); // new reference, or nullptr at the top of the stack + Py_DECREF(frame); + frame = back; + + if (is_plugin_frame) + break; + if (!id.empty()) + ids.push_back(std::move(id)); + } + + Py_XDECREF(frame); // only holds a reference here if the loop exited via break + + return ids; +} + +static const std::unordered_set two_path_fs_events{ + "os.rename", "os.link", "os.symlink", "shutil.copyfile", + "shutil.copytree", "shutil.copymode", "shutil.copystat", "shutil.move", + "shutil.unpack_archive", "_winapi.CreateJunction", +}; + +static const std::unordered_map> audit_target_arg_indices{ + {"http.client.connect", {1}}, + {"urllib.Request", {0}}, + + {"socket.connect", {1}}, + {"socket.bind", {1}}, + {"socket.getaddrinfo", {0}}, + {"socket.gethostbyname", {0}}, + {"socket.gethostbyaddr", {0}}, + {"socket.getnameinfo", {0}}, + {"socket.getservbyname", {0}}, + {"socket.getservbyport", {0}}, + + {"os.system", {0}}, + {"subprocess.Popen", {1, 0}}, + {"os.posix_spawn", {1, 0}}, + {"os.spawn", {2, 1}}, + {"os.startfile", {0}}, + {"pty.spawn", {0}}, + {"_winapi.CreateProcess", {1, 0}}, + {"_posixsubprocess.fork_exec", {0}}, +}; + +AuditEventCategory open_category(PyObject* args) +{ + const std::string mode = python_unicode(tuple_item(args, 1)); + if (!mode.empty() && mode.find_first_of("wax+") == std::string::npos) + return AuditEventCategory::FsRead; + return AuditEventCategory::FsReadWrite; +} + +std::vector audit_targets(const std::string& event_name, AuditEventCategory category, PyObject* args) +{ + std::vector targets; + + switch (category) { + case AuditEventCategory::FsRead: + case AuditEventCategory::FsReadWrite: + case AuditEventCategory::FsCreate: + case AuditEventCategory::FsDelete: { + const Py_ssize_t path_count = two_path_fs_events.count(event_name) ? 2 : 1; + for (Py_ssize_t index = 0; index < path_count; ++index) { + const std::string path = python_path(tuple_item(args, index)); + if (!path.empty()) + targets.push_back(path); + } + return targets; + } + default: + break; + } + + const auto it = audit_target_arg_indices.find(event_name); + if (it != audit_target_arg_indices.end()) { + for (const Py_ssize_t index : it->second) { + std::string value = python_str(tuple_item(args, index)); + if (!value.empty()) { + targets.push_back(std::move(value)); + break; + } + } + } + + return targets; +} + +std::vector* permission_list_for(AuditEventCategory category, PluginPermissions& permissions) +{ + switch (category) { + case AuditEventCategory::FsRead: return &permissions.fs_read; + case AuditEventCategory::FsReadWrite: return &permissions.fs_readwrite; + case AuditEventCategory::Http: return &permissions.network_http; + case AuditEventCategory::Socket: return &permissions.network_socket; + case AuditEventCategory::ProcessCreate: return &permissions.process; + default: return nullptr; + } +} + +bool has_permission(const std::vector& granted, const std::string& target) +{ + return std::find(granted.begin(), granted.end(), target) != granted.end(); +} + +bool persist_permission(const std::string& plugin_key, + PluginInstallState& state, + std::vector& permission_list, + const std::string& target) +{ + PluginDescriptor descriptor; + if (!PluginManager::instance().try_get_plugin_descriptor(plugin_key, descriptor) || descriptor.plugin_root.empty()) + return false; + + // A sandbox plugin may not have a sidecar yet. Seed the small amount of install metadata + // needed by the writer so clicking Yes still creates the JSON file. + if (state.plugin_name.empty()) { + state.installed_from = descriptor.is_cloud_plugin() ? "cloud" : "local"; + state.installed_version = !descriptor.installed_version.empty() ? descriptor.installed_version : descriptor.version; + state.plugin_name = descriptor.name; + state.cloud_uuid = descriptor.cloud_uuid(); + state.enabled = true; + } + + if (!has_permission(permission_list, target)) + permission_list.push_back(target); + return write_install_state(boost::filesystem::path(descriptor.plugin_root), state); +} -// Records a blocked event and raises PermissionError in the calling interpreter. Returns -1 -// so an event branch can `return report_denied(...)` directly. int report_denied(PluginAuditManager& mgr, const std::string& event_name, - const boost::filesystem::path& path, const AuditDecision& decision) { AuditViolation violation; violation.plugin_key = mgr.current_plugin(); violation.event_name = event_name; - violation.path = path; violation.reason = decision.reason; mgr.report_violation(violation); - PyErr_SetString(PyExc_PermissionError, "Plugin attempted to access a blocked file path"); + PyErr_SetString(PyExc_PermissionError, "Plugin attempted an audited operation without permission"); return -1; } -} // namespace +wxString audit_message(AuditEventCategory category, const wxString& plugin_name, const wxString& event_name, + const wxString& target_list) +{ + if (target_list.IsEmpty()) + return wxString::Format( + _L("Plugin \"%s\" is requesting permission for the Python audit event \"%s\".\n\n" + "This operation does not expose a target the audit hook can display."), + plugin_name, event_name); + + switch (category) { + case AuditEventCategory::FsRead: + return wxString::Format(_L("Plugin \"%s\" is requesting to read the following file(s):\n%s"), plugin_name, target_list); + case AuditEventCategory::FsReadWrite: + return wxString::Format(_L("Plugin \"%s\" is requesting to read/write the following file(s):\n%s"), plugin_name, target_list); + case AuditEventCategory::FsCreate: + return wxString::Format(_L("Plugin \"%s\" is requesting to create the following file(s):\n%s"), plugin_name, target_list); + case AuditEventCategory::FsDelete: + return wxString::Format(_L("Plugin \"%s\" is requesting to delete the following file(s):\n%s"), plugin_name, target_list); + case AuditEventCategory::Http: + return wxString::Format(_L("Plugin \"%s\" is requesting to make an HTTP request to:\n%s"), plugin_name, target_list); + case AuditEventCategory::Socket: + return wxString::Format(_L("Plugin \"%s\" is requesting to open a network connection to:\n%s"), plugin_name, target_list); + case AuditEventCategory::ProcessCreate: + return wxString::Format(_L("Plugin \"%s\" is requesting to run the following command(s):\n%s"), plugin_name, target_list); + default: + return wxString::Format(_L("Plugin \"%s\" is requesting permission for the Python audit event \"%s\"."), plugin_name, event_name); + } +} + +int decide_audited_event(PluginAuditManager& mgr, + PluginInstallState& state, + const std::string& plugin_key, + const std::string& plugin_name, + const std::string& event_name, + AuditEventCategory category, + const std::vector& targets, + std::vector* permission_list, + const std::vector& call_site_ids) +{ + std::vector unresolved = targets; + if (permission_list) { + unresolved.clear(); + for (const auto& target : targets) + if (!has_permission(*permission_list, target)) + unresolved.push_back(target); + if (!targets.empty() && unresolved.empty()) + return 0; + } + + wxString target_list; + for (const auto& target : unresolved) + target_list += wxString::FromUTF8(target.c_str()) + "\n"; + + wxMessageDialog dialog(nullptr, + audit_message(category, wxString::FromUTF8(plugin_name.c_str()), + wxString::FromUTF8(event_name.c_str()), target_list), + _L("Plugin permission request"), wxYES_NO | wxICON_WARNING); + if (dialog.ShowModal() != wxID_YES) + return report_denied(mgr, event_name, {false, "audit permission required"}); + + if (permission_list) + for (const auto& target : unresolved) + persist_permission(plugin_key, state, *permission_list, target); + + mgr.record_approved_call_sites(plugin_key, call_site_ids); + return 0; +} + +} // namespace PluginAuditDetail int PluginAuditManager::audit_hook(const char* event, PyObject* args, void* user_data) { @@ -331,94 +874,95 @@ int PluginAuditManager::audit_hook(const char* event, PyObject* args, void* user std::string event_name(event ? event : ""); + if (event_name.empty()) + return 0; + // Verbose logging of every audit event (can be noisy) if (mgr->verbose_events) { BOOST_LOG_TRIVIAL(debug) << "[AUDIT EVENT] " << event_name; } - // extensive list of audit events can be found at https://docs.python.org/3/library/audit_events.html - - // --- open event --- - if (event_name == "open") { - const char* path_cstr = nullptr; - const char* mode_cstr = nullptr; - int flags = 0; - - // open(path, mode, flags) — path may be str, bytes, or int fd - if (!PyArg_ParseTuple(args, "s|si", &path_cstr, &mode_cstr, &flags)) { - PyErr_Clear(); // couldn't parse; allow - return 0; - } - - std::string path_str(path_cstr ? path_cstr : ""); - std::string mode_str(mode_cstr ? mode_cstr : "r"); - - AuditDecision decision = mgr->check_open(path_str, mode_str); - if (!decision.allowed) - return report_denied(*mgr, event_name, path_str, decision); + if (mgr->current_plugin().empty()) { + BOOST_LOG_TRIVIAL(trace) << "[AUDIT] event=" << event_name << " bypassed (no plugin context)"; return 0; } - // --- os.rename event (raised by os.rename and os.replace) --- - if (event_name == "os.rename") { - const char* src_cstr = nullptr; - const char* dst_cstr = nullptr; - PyObject* src_dir_fd = nullptr; - PyObject* dst_dir_fd = nullptr; - - // os.rename(src, dst, src_dir_fd, dst_dir_fd) — paths may be str, bytes, or int fd. - // The dir_fd arguments are unused, but must be accepted for the tuple to parse. - if (!PyArg_ParseTuple(args, "ss|OO", &src_cstr, &dst_cstr, &src_dir_fd, &dst_dir_fd)) { - PyErr_Clear(); // couldn't parse; allow - return 0; - } - - // A rename writes at both ends, so either end being denied blocks the call. - for (const char* path_cstr : {src_cstr, dst_cstr}) { - std::string path_str(path_cstr ? path_cstr : ""); - AuditDecision decision = mgr->check_path_access(path_str, /* is_write */ true); - if (!decision.allowed) - return report_denied(*mgr, event_name, path_str, decision); - } + // the open function can take in different flags that determine if it is a read or readwrite. + const AuditEventCategory event_type = + event_name == "open" ? PluginAuditDetail::open_category(args) : event_category(event_name); + if (event_type == AuditEventCategory::None) return 0; + + const bool fs_category = is_fs_category(event_type); + const std::vector targets = PluginAuditDetail::audit_targets(event_name, event_type, args); + + // A denied path (secrets, certificates, config files -- see is_denied_path) is an + // unconditional block: checked before the ancestor-cascade check below, so a cascade + // approval recorded for an unrelated action can never launder access to one, and before + // the allowed-root shortcut further down, so an allowed root (e.g. the read-only resources + // folder) cannot make a denied path underneath it reachable. + if (fs_category) { + for (const auto& target : targets) { + if (mgr->is_denied_path(boost::filesystem::path(target))) + return PluginAuditDetail::report_denied(*mgr, event_name, {false, "denied path"}); + } } - // --- os.remove event (raised by os.remove and os.unlink) --- - if (event_name == "os.remove") { - const char* path_cstr = nullptr; - PyObject* dir_fd = nullptr; + PluginDescriptor plugin_descriptor; + PluginManager::instance().try_get_plugin_descriptor(mgr->current_plugin(), plugin_descriptor); - // os.remove(path, dir_fd) — path may be str, bytes, or int fd - if (!PyArg_ParseTuple(args, "s|O", &path_cstr, &dir_fd)) { - PyErr_Clear(); // couldn't parse; allow - return 0; - } - - std::string path_str(path_cstr ? path_cstr : ""); - AuditDecision decision = mgr->check_path_access(path_str, /* is_write */ true); - if (!decision.allowed) - return report_denied(*mgr, event_name, path_str, decision); + // Some plugins call other audited events, e.g. urlib.request will call socket.connect. So this is so that if urlib.request + // was already approved, socket.connect won't trigger another permission dialog. + const std::vector call_site_ids = + PluginAuditDetail::call_site_identities(plugin_descriptor.plugin_root); + if (mgr->has_approved_ancestor(mgr->current_plugin(), call_site_ids)) return 0; + + // A filesystem target that resolves entirely inside a pre-determined allowed root -- the + // plugin system's own data_dir() tree (which holds each plugin's storage folder and the + // installed/system profile cache), the read-only bundled resources folder, or a per-call + // scoped root such as the current G-code folder -- is part of the plugin system's normal + // workflow and does not need a prompt. + if (fs_category && !targets.empty()) { + const bool is_write = event_type != AuditEventCategory::FsRead; + const bool all_inside_allowed_root = + std::all_of(targets.begin(), targets.end(), [&](const std::string& target) { + return mgr->check_path_access(boost::filesystem::path(target), is_write).allowed; + }); + if (all_inside_allowed_root) + return 0; } - // Unknown event — allow by default - return 0; + PluginInstallState state; + const bool have_install_state = PluginManager::instance().get_install_state(mgr->current_plugin(), state); + if (!have_install_state) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << " Failed to get install state for " << mgr->current_plugin(); + } + + const std::string plugin_name = state.plugin_name.empty() ? mgr->current_plugin() : state.plugin_name; + + std::vector* permission_list = PluginAuditDetail::permission_list_for(event_type, state.permissions); + + return PluginAuditDetail::decide_audited_event(*mgr, state, mgr->current_plugin(), plugin_name, event_name, + event_type, targets, permission_list, call_site_ids); } void PluginAuditManager::install_hook() { - if (PySys_AddAuditHook(audit_hook, this) < 0) { - BOOST_LOG_TRIVIAL(error) << "[AUDIT] Failed to install CPython audit hook"; - return; - } - BOOST_LOG_TRIVIAL(info) << "[AUDIT] CPython audit hook installed successfully"; - - // data_dir() is the only globally-allowed root during enforced plugin execution. - // The executable directory and resources directory are intentionally NOT allowed - // here: plugins must not write outside data_dir() (G-code plugins additionally get - // the temp G-code folder via a scoped root). Reads remain permissive in Loading mode. + // data_dir() is the primary globally-allowed root during plugin execution: read+write. It + // covers the plugin system's own workflow needs -- each plugin's storage folder + // (data_dir()/orca_plugins) and the installed/system profile cache (data_dir()/system) -- + // without a separate, narrower grant for either (G-code plugins additionally get the temp + // G-code folder via a scoped root, see SlicingPipelinePluginCapabilityTrampoline). add_global_allowed_root(data_dir()); + // resources_dir() holds the app's bundled, shared assets (installed system profiles, the + // bundled TLS client cert, web assets). Plugins may read from it -- e.g. inspecting bundled + // profiles -- but must never write into the shared, potentially multi-user app install, so + // it is granted read-only. The bundled cert itself stays unreachable regardless, via the + // "cert" denied-path keyword seeded below. + add_global_allowed_root(resources_dir(), /*allow_write=*/false); + // The user's app config and cloud credentials live directly inside data_dir(), so the // root just granted would otherwise expose them to any plugin. Deny them by name. // @@ -430,6 +974,19 @@ void PluginAuditManager::install_hook() // (see its comment for why all four config names are denied); the tests seed from it too. for (const auto& name : default_denied_filenames()) add_denied_filename(name); + + // Categorical denies on top of the exact-name list above: no path a plugin can reach may + // contain a "secret", "cert"(ificate), or "conf"(ig) path component, regardless of which + // allowed root it happens to sit inside. default_denied_path_keywords() is the single + // source of this list; the tests seed from it too. + for (const auto& keyword : default_denied_path_keywords()) + add_denied_path_keyword(keyword); + + if (PySys_AddAuditHook(audit_hook, this) < 0) { + BOOST_LOG_TRIVIAL(error) << "[AUDIT] Failed to install CPython audit hook"; + return; + } + BOOST_LOG_TRIVIAL(info) << "[AUDIT] CPython audit hook installed successfully"; } } // namespace Slic3r diff --git a/src/slic3r/plugin/PluginAuditManager.hpp b/src/slic3r/plugin/PluginAuditManager.hpp index 1b24357e47..153f9d6107 100644 --- a/src/slic3r/plugin/PluginAuditManager.hpp +++ b/src/slic3r/plugin/PluginAuditManager.hpp @@ -1,9 +1,13 @@ #ifndef slic3r_PluginAuditManager_hpp_ #define slic3r_PluginAuditManager_hpp_ -#include +// Via pybind11 so this file requests the same python3xx.lib as everything else. +#include +#include #include #include +#include +#include #include #include @@ -18,10 +22,31 @@ struct AuditDecision { struct AuditViolation { std::string plugin_key; std::string event_name; - boost::filesystem::path path; std::string reason; }; +// A filesystem root a plugin may access while an audit context is active. allow_write is +// false for a root that only grants reads (e.g. the bundled, shared resources folder) -- +// a write-shaped event never matches such a root, even though a read-shaped one does. +struct AllowedRoot { + boost::filesystem::path path; + bool allow_write = true; +}; + +// The set of CPython audit events PluginAuditManager recognizes, grouped by the kind of +// operation they represent. None means the event isn't one audit_hook() acts on at all. +enum class AuditEventCategory { + None, + FsRead, + FsReadWrite, + FsCreate, + FsDelete, + Http, + Socket, + ProcessCreate, + Threading, +}; + // Returns true if candidate resolves to a path inside allowed_root. // Uses weakly_canonical and component-wise comparison to reject traversal attacks. bool is_inside_allowed_root(const boost::filesystem::path& candidate, @@ -49,12 +74,15 @@ public: void clear_current_capability(); // --- allowed-roots registry --- - void add_global_allowed_root(const boost::filesystem::path& root); - void add_scoped_allowed_root(const boost::filesystem::path& root); + // allow_write = false registers a read-only root: a read-shaped event inside it is allowed, + // but a write/create/delete-shaped event is not, so it falls through to the normal + // prompt-or-deny path instead. + void add_global_allowed_root(const boost::filesystem::path& root, bool allow_write = true); + void add_scoped_allowed_root(const boost::filesystem::path& root, bool allow_write = true); // --- denied-filenames registry --- - // Filenames a plugin may never touch, in any directory, regardless of audit mode or - // enclosing allowed root. A candidate is denied when its filename starts with a + // Filenames a plugin may never touch, in any directory, regardless of the enclosing allowed + // root. A candidate is denied when its filename starts with a // registered name, so .bak/.tmp companions are covered by the same entry. // // The comparison is case-insensitive on every platform, unlike the _WIN32-only iequals @@ -73,33 +101,60 @@ public: // 8.3 short name is out of scope (see the design doc). This blocks direct access only. bool is_denied_filename(const boost::filesystem::path& candidate) const; - // --- enforcement mode --- - enum class AuditMode { - // Import/loading phase: allow reads anywhere, only block writes - // outside allowed roots. Python needs to read stdlib modules - // during import and those are not inside plugin directories. - Loading, + // --- denied-path-keyword registry --- + // Keywords that categorically deny a path if ANY of its components (directory or file + // name), not just the base name, contains one case-insensitively -- e.g. a "secrets" + // subfolder, a "certificates" folder, or a "conf"/"config" file anywhere the plugin can + // otherwise reach, including inside an allowed root. This is intentionally broader and + // fuzzier than the exact-name is_denied_filename registry: it exists to categorically rule + // out whole classes of sensitive paths (secrets, certificates, config) rather than name + // specific known files, at the cost of over-blocking an unrelated name that happens to + // contain the keyword -- the fail-safe direction, same rationale as is_denied_filename. + void add_denied_path_keyword(const std::string& keyword); - // Execution phase: block both reads and writes outside allowed - // roots, plus subprocess/socket/ctypes. - Enforcing, - }; + // The list install_hook() seeds into the keyword registry. Exposed so tests seed the exact + // same set without a live interpreter. + static std::vector default_denied_path_keywords(); - void set_audit_mode(AuditMode mode); - AuditMode audit_mode() const; + // True when any component of candidate's (canonicalized) path contains a registered + // keyword, case-insensitively. + bool is_denied_path_keyword(const boost::filesystem::path& candidate) const; + + // is_denied_filename(candidate) || is_denied_path_keyword(candidate). Convenience for + // call sites that only need to know whether a path is categorically off-limits, not which + // specific rule fired. + bool is_denied_path(const boost::filesystem::path& candidate) const; // --- policy checks --- - // Shared core for every audited filesystem event. The deny list is consulted above the - // Loading-mode read exemption and above the allowed roots, so a denied filename is - // blocked even though every scope currently runs in Loading and the files in question - // sit inside data_dir(), which is itself a global allowed root. + // Shared core for every audited filesystem event. The deny checks are consulted above the + // allowed roots, so a denied path is blocked even when it sits inside an allowed root (e.g. + // data_dir(), which is a global allowed root). AuditDecision check_path_access(const boost::filesystem::path& candidate, bool is_write); AuditDecision check_open(const std::string& path, const std::string& mode); + // Ask the user to grant the requested filesystem-read paths. The request may originate on a + // plugin load worker, so the implementation marshals the modal dialog to the wx main thread. + // Returns true only when every missing path was granted and persisted; denial aborts the plugin + // load without adding a permission. + bool request_filesystem_read_permissions(const std::string& plugin_key, + const std::vector& paths); + void report_violation(const AuditViolation& violation); + bool audit_denial_pending() const; + void clear_audit_denial(); void clear_last_violation(); bool last_violation(AuditViolation& violation) const; + // --- call-site cascade cache --- + // A single plugin action often fires several nested CPython audit events as it passes + // through stdlib layers (urllib.request calling http.client calling socket, for example). + // Once the user approves one event, every stdlib frame still on the stack for that call + // is recorded here by (filename, function, first line) identity. A later event whose own + // ancestor chain still contains one of those frames is the same logical action seen from + // a deeper layer, so it is auto-approved instead of prompting again. + bool has_approved_ancestor(const std::string& plugin_key, const std::vector& call_site_ids) const; + void record_approved_call_sites(const std::string& plugin_key, const std::vector& call_site_ids); + bool verbose_events = true; private: @@ -109,17 +164,19 @@ private: static int audit_hook(const char* event, PyObject* args, void* user_data); - static thread_local std::string m_current_plugin_key; - static thread_local std::string m_current_capability_name; - static thread_local AuditMode m_audit_mode; - static thread_local std::vector m_scoped_allowed_roots; - static thread_local bool m_has_last_violation; - static thread_local AuditViolation m_last_violation; + static thread_local std::string m_current_plugin_key; + static thread_local std::string m_current_capability_name; + static thread_local std::vector m_scoped_allowed_roots; + static thread_local bool m_audit_denial_pending; + static thread_local bool m_has_last_violation; + static thread_local AuditViolation m_last_violation; - // mutable: is_denied_filename() is a const query that must lock. + // mutable: is_denied_filename() and has_approved_ancestor() are const queries that must lock. mutable std::mutex m_mutex; - std::vector m_global_allowed_roots; + std::vector m_global_allowed_roots; std::vector m_denied_filenames; + std::vector m_denied_path_keywords; + std::unordered_map> m_approved_call_sites; // plugin_key -> call-site ids }; // RAII guard that sets the current plugin key and capability name, restoring the previous @@ -130,8 +187,7 @@ class ScopedPluginAuditContext public: explicit ScopedPluginAuditContext( const std::string& plugin_key, - const std::string& capability_name = {}, - PluginAuditManager::AuditMode mode = PluginAuditManager::AuditMode::Loading); + const std::string& capability_name = {}); ~ScopedPluginAuditContext(); @@ -141,8 +197,7 @@ public: private: std::string m_previous_id; std::string m_previous_capability; - PluginAuditManager::AuditMode m_previous_mode; - std::vector m_previous_scoped_roots; + std::vector m_previous_scoped_roots; }; } // namespace Slic3r diff --git a/src/slic3r/plugin/PluginFsUtils.cpp b/src/slic3r/plugin/PluginFsUtils.cpp index 8f93f7aaef..4d6aabe3d3 100644 --- a/src/slic3r/plugin/PluginFsUtils.cpp +++ b/src/slic3r/plugin/PluginFsUtils.cpp @@ -631,7 +631,7 @@ void parse_metadata_rfc822(const std::string& content, bool is_ignored_plugin_directory(const boost::filesystem::path& path) { const std::string name = path.filename().string(); - return name.empty() || name[0] == '.' || name.rfind("__", 0) == 0 || name == PLUGIN_SUBSCRIBED_DIR; + return name.empty() || name[0] == '.' || name.rfind("__", 0) == 0 || name == PLUGIN_SUBSCRIBED_DIR || name == PLUGIN_DATA_DIR; } bool is_safe_relative_path(const boost::filesystem::path& path) @@ -784,6 +784,23 @@ bool read_install_state(const boost::filesystem::path& plugin_dir, PluginInstall parsed.plugin_name = state["plugin_name"].get(); if (state.contains("cloud_uuid") && state["cloud_uuid"].is_string()) parsed.cloud_uuid = state["cloud_uuid"].get(); + + if (state.contains("permissions") && state["permissions"].is_object()) { + const auto& permissions = state["permissions"]; + auto read_string_list = [&permissions](const char* key, std::vector& out) { + if (!permissions.contains(key) || !permissions[key].is_array()) + return; + for (const auto& entry : permissions[key]) + if (entry.is_string()) + out.push_back(entry.get()); + }; + read_string_list("fs_read", parsed.permissions.fs_read); + read_string_list("fs_readwrite", parsed.permissions.fs_readwrite); + read_string_list("network_http", parsed.permissions.network_http); + read_string_list("network_socket", parsed.permissions.network_socket); + read_string_list("process", parsed.permissions.process); + } + if (state.contains("enabled") && state["enabled"].is_boolean()) parsed.enabled = state["enabled"].get(); @@ -819,6 +836,14 @@ bool write_install_state(const boost::filesystem::path& plugin_dir, const Plugin if (!state.cloud_uuid.empty()) json["cloud_uuid"] = state.cloud_uuid; + json["permissions"] = { + {"fs_read", state.permissions.fs_read}, + {"fs_readwrite", state.permissions.fs_readwrite}, + {"network_http", state.permissions.network_http}, + {"network_socket", state.permissions.network_socket}, + {"process", state.permissions.process}, + }; + nlohmann::json capabilities = nlohmann::json::array(); for (const auto& [name, enabled] : state.capabilities) capabilities.push_back(nlohmann::json{{name, enabled}}); @@ -836,6 +861,9 @@ bool write_install_state(const boost::filesystem::path& plugin_dir, const Plugin const std::vector>& capabilities) { PluginInstallState state; + // Loading a plugin updates its lifecycle/capability state, but must retain permissions granted + // during register_capabilities() or by a previous runtime audit prompt. + read_install_state(plugin_dir, state); state.installed_from = entry.is_cloud_plugin() ? "cloud" : "local"; // Prefer the descriptor's recorded installed_version (the version fetched from the cloud // at install time, preserved across sidecar re-writes) so a stale manifest/PEP723 header @@ -852,10 +880,16 @@ bool write_install_state(const boost::filesystem::path& plugin_dir, const Plugin bool write_install_state(const boost::filesystem::path& plugin_dir, const PluginDescriptor& entry) { // Install-time writer: the package is not loaded, so its capabilities are not known yet and the - // sidecar is (re)initialized to "auto-load, nothing disabled". PluginManager writes the real - // per-capability flags once the package is loaded, via the (dir, entry, enabled, capabilities) - // overload. - return write_install_state(plugin_dir, entry, true, {}); + // sidecar is (re)initialized to "auto-load, nothing disabled". This intentionally resets + // permissions on a fresh install/reinstall. PluginManager writes the real per-capability flags + // while preserving permissions once the package is loaded, via the overload above. + PluginInstallState state; + state.installed_from = entry.is_cloud_plugin() ? "cloud" : "local"; + state.installed_version = !entry.installed_version.empty() ? entry.installed_version : entry.version; + state.plugin_name = entry.name; + state.cloud_uuid = entry.cloud_uuid(); + state.enabled = true; + return write_install_state(plugin_dir, state); } bool read_python_plugin_metadata(const boost::filesystem::path& py_path, PluginDescriptor& descriptor, std::string& error) diff --git a/src/slic3r/plugin/PluginFsUtils.hpp b/src/slic3r/plugin/PluginFsUtils.hpp index 7922946b1c..5b62e9f7f1 100644 --- a/src/slic3r/plugin/PluginFsUtils.hpp +++ b/src/slic3r/plugin/PluginFsUtils.hpp @@ -12,6 +12,7 @@ #include #define PLUGIN_SUBSCRIBED_DIR "_subscribed" +#define PLUGIN_DATA_DIR "plugin_data" namespace Slic3r { @@ -81,11 +82,23 @@ inline nlohmann::json py_to_json(const pybind11::handle& o) return py::str(o).cast(); // fallback: str() } +struct PluginPermissions +{ + std::vector fs_read; + std::vector fs_readwrite; + std::vector network_http; + std::vector network_socket; + std::vector process; +}; + struct PluginInstallState { std::string installed_from; // "local" | "cloud" std::string installed_version; std::string plugin_name; std::string cloud_uuid; // empty for local + + PluginPermissions permissions; + bool enabled = true; std::vector> capabilities; // name -> enabled, ordered }; diff --git a/src/slic3r/plugin/PluginLoader.cpp b/src/slic3r/plugin/PluginLoader.cpp index 92fe92068f..0c45564f1b 100644 --- a/src/slic3r/plugin/PluginLoader.cpp +++ b/src/slic3r/plugin/PluginLoader.cpp @@ -280,7 +280,7 @@ bool load(const PluginDescriptor& descriptor, // (while the active plugin key is set), then instantiates each registered capability and caches // its get_name(). Returns one entry per capability. std::string bridge_error; - auto capabilities_found = bridge.finalize_plugin_capture(descriptor.entry_path, bridge_error); + auto capabilities_found = bridge.finalize_plugin_capture(descriptor.entry_path, descriptor.plugin_key, bridge_error); if (!bridge_error.empty()) { capabilities_found.clear(); error = "Plugin registration failed: " + bridge_error; diff --git a/src/slic3r/plugin/PluginManager.cpp b/src/slic3r/plugin/PluginManager.cpp index 3675f0e466..dad77aa7a0 100644 --- a/src/slic3r/plugin/PluginManager.cpp +++ b/src/slic3r/plugin/PluginManager.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -523,6 +524,38 @@ bool PluginManager::try_get_plugin_descriptor_for_capability(const std::string& return false; } +std::string PluginManager::get_storage_dir(const std::string& plugin_key) const +{ + namespace fs = boost::filesystem; + + PluginDescriptor descriptor; + if (!try_get_plugin_descriptor(plugin_key, descriptor)) + throw std::runtime_error("The current plugin is not registered"); + + const fs::path base_storage_dir = fs::path(get_orca_plugins_dir()) / PLUGIN_DATA_DIR; + + if (!descriptor.is_cloud_plugin()) { + const fs::path local_storage_dir = base_storage_dir / plugin_key; + fs::create_directories(local_storage_dir); + return local_storage_dir.string(); + } + + auto agent = m_cloud_service.get_cloud_agent(); + if (!agent) + throw std::runtime_error("Cloud plugin storage is unavailable before networking is initialized"); + + const std::string user_id = agent->get_user_id(); + if (user_id.empty()) + throw std::runtime_error("Cloud plugin storage is unavailable without a logged-in user"); + + if (!is_valid_plugin_id(plugin_key)) + throw std::runtime_error("The current cloud plugin key is not a valid folder name"); + + const fs::path cloud_storage_dir = base_storage_dir / PLUGIN_SUBSCRIBED_DIR / user_id / plugin_key; + fs::create_directories(cloud_storage_dir); + return cloud_storage_dir.string(); +} + // ── Capability instances ──────────────────────────────────────────────────────────────────── std::vector> PluginManager::get_plugin_capabilities(const std::string& plugin_key, @@ -591,6 +624,20 @@ std::shared_ptr PluginManager::get_plugin_capability( return nullptr; } +bool PluginManager::get_install_state(const std::string& plugin_key, PluginInstallState& install_state) +{ + PluginDescriptor descriptor; + if (!try_get_plugin_descriptor(plugin_key, descriptor)) { + return false; + } + + if (!read_install_state(boost::filesystem::path(descriptor.plugin_root), install_state)) { + return false; + } + + return true; +} + // ── Lifecycle ─────────────────────────────────────────────────────────────────────────────── bool PluginManager::is_plugin_loaded(const std::string& plugin_key) const @@ -879,6 +926,8 @@ void PluginManager::load_plugin_impl(const std::string& plugin_key, bool skip_de if (!plugin_loader::load(descriptor, skip_deps, capabilities_to_enable, registry_precheck, plugin, error)) { if (error == LOAD_CANCELLED) return; // cancelled: nothing materialized survives, and no error is recorded + if (error.rfind("Plugin registration failed:", 0) == 0) + mark_plugin_install_state_disabled(plugin_key); fail(std::move(error)); return; } @@ -1104,6 +1153,51 @@ void PluginManager::write_loaded_plugin_install_state(const std::string& plugin_ write_install_state(boost::filesystem::path(descriptor.plugin_root), descriptor, /*enabled=*/true, capabilities); } +void PluginManager::mark_plugin_install_state_disabled(const std::string& plugin_key) +{ + std::lock_guard state_lock(m_install_state_mutex); + + PluginDescriptor descriptor; + if (!try_get_plugin_descriptor(plugin_key, descriptor) || descriptor.plugin_root.empty()) + return; + + const boost::filesystem::path root(descriptor.plugin_root); + PluginInstallState state; + if (!read_install_state(root, state)) { + state.installed_from = descriptor.is_cloud_plugin() ? "cloud" : "local"; + state.installed_version = !descriptor.installed_version.empty() ? descriptor.installed_version : descriptor.version; + state.plugin_name = descriptor.name; + state.cloud_uuid = descriptor.cloud_uuid(); + } + state.enabled = false; + if (!write_install_state(root, state)) + return; + + std::lock_guard lock(m_mutex); + if (Plugin* plugin = find_plugin_locked(plugin_key)) + plugin->descriptor.enabled = false; +} + +void PluginManager::revoke_plugin_permissions(const std::string& plugin_key) +{ + std::lock_guard state_lock(m_install_state_mutex); + + PluginDescriptor descriptor; + if (!try_get_plugin_descriptor(plugin_key, descriptor) || descriptor.plugin_root.empty()) + return; + + const boost::filesystem::path root(descriptor.plugin_root); + PluginInstallState state; + if (!read_install_state(root, state)) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": Failed to read install state for " << plugin_key; + return; + } + + state.permissions = {}; + if (!write_install_state(root, state)) + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << ": Failed to revoke permissions for " << plugin_key; +} + // ── Callbacks ─────────────────────────────────────────────────────────────────────────────── void PluginManager::subscribe_on_load_callback(PluginLifecycleCompleteFn fn) @@ -1323,6 +1417,11 @@ bool PluginManager::install_plugin(const boost::filesystem::path& filepath, Plug return false; } + // Every successful install may have replaced executable plugin code. Revoke any permissions + // associated with the previous package so the newly installed version must request them again. + if (!plugin_descriptor.plugin_key.empty()) + revoke_plugin_permissions(plugin_descriptor.plugin_key); + if (!plugin_descriptor.plugin_key.empty()) clear_plugin_error(plugin_descriptor.plugin_key); @@ -1710,6 +1809,7 @@ bool PluginManager::update_cloud_plugin(const std::string& plugin_key, std::stri } clear_plugin_error(plugin_key); + return true; } @@ -1943,6 +2043,8 @@ bool PluginManager::delete_and_unsubscribe_cloud_plugin(const std::string& plugi return false; } + unload_plugin(plugin_key); + if (!m_cloud_service.request_cloud_unsubscribe(descriptor, error)) { set_plugin_error(plugin_key, error); return false; diff --git a/src/slic3r/plugin/PluginManager.hpp b/src/slic3r/plugin/PluginManager.hpp index 3d6be9981a..891f787bf2 100644 --- a/src/slic3r/plugin/PluginManager.hpp +++ b/src/slic3r/plugin/PluginManager.hpp @@ -143,6 +143,10 @@ public: bool try_get_plugin_descriptor_for_capability(const std::string& capability_name, PluginCapabilityType type, PluginDescriptor& out) const; + // Per-plugin storage directory under orca_plugins/plugin_data, created if missing. Throws + // std::runtime_error if the plugin is unregistered, the key is invalid, or (cloud plugins) + // no user is logged in yet. + std::string get_storage_dir(const std::string& plugin_key) const; std::vector> get_plugin_capabilities( const std::string& plugin_key = "", // "" => all plugins @@ -155,6 +159,8 @@ public: PluginCapabilityType type = PluginCapabilityType::Unknown, bool only_enabled = true) const; + bool get_install_state(const std::string& plugin_key, PluginInstallState& install_state); + void load_plugin(const std::string& plugin_key, bool skip_deps = false, std::vector capabilities_to_enable = {}); bool unload_plugin(const std::string& plugin_key); void unload_all_plugins(); @@ -253,6 +259,9 @@ private: // Writes the sidecar for a loaded plugin (enabled=true plus the current per-capability flags). void write_loaded_plugin_install_state(const std::string& plugin_key); + void mark_plugin_install_state_disabled(const std::string& plugin_key); + // Revoke permissions after a package replacement so the new package must request them again. + void revoke_plugin_permissions(const std::string& plugin_key); bool finalize_cloud_plugin_removal(const PluginDescriptor& plugin, bool keep_local, std::string& error); bool delete_installed_plugin_package(const PluginDescriptor& plugin, std::string& error); diff --git a/src/slic3r/plugin/PluginResolver.cpp b/src/slic3r/plugin/PluginResolver.cpp index 4ba58ee550..6e72929c63 100644 --- a/src/slic3r/plugin/PluginResolver.cpp +++ b/src/slic3r/plugin/PluginResolver.cpp @@ -3,6 +3,7 @@ #include "PluginManager.hpp" #include "../Utils/Http.hpp" #include "../Utils/OrcaCloudServiceAgent.hpp" +#include "../Utils/NetworkAgent.hpp" #include "../GUI/GUI.hpp" #include "../GUI/GUI_App.hpp" #include "../GUI/I18N.hpp" diff --git a/src/slic3r/plugin/PyPluginTrampoline.hpp b/src/slic3r/plugin/PyPluginTrampoline.hpp index a36fd8100a..c23bc30e98 100644 --- a/src/slic3r/plugin/PyPluginTrampoline.hpp +++ b/src/slic3r/plugin/PyPluginTrampoline.hpp @@ -26,25 +26,30 @@ try { \ override_call; \ } catch (pybind11::error_already_set & err) { \ + const bool _orca_audit_denial = ::Slic3r::PluginAuditManager::instance().audit_denial_pending(); \ + if (_orca_audit_denial) \ + ::Slic3r::PluginAuditManager::instance().clear_current_plugin(); \ ::Slic3r::log_python_exception_keep(err); \ + if (_orca_audit_denial) \ + ::Slic3r::PluginAuditManager::instance().clear_audit_denial(); \ throw; \ } // Opens the plugin's filesystem audit scope for the duration of a C++ -> Python call, and publishes // the calling capability's cached name so host APIs invoked from Python can tell which capability // they are serving. No-op without an audit plugin key. Declares a local `_orca_audit_scope`. -#define ORCA_PY_AUDIT_SCOPE(mode) \ +#define ORCA_PY_AUDIT_SCOPE() \ std::optional<::Slic3r::ScopedPluginAuditContext> _orca_audit_scope; \ if (const std::string& _orca_audit_key = this->audit_plugin_key(); !_orca_audit_key.empty()) \ - _orca_audit_scope.emplace(_orca_audit_key, this->name(), mode) + _orca_audit_scope.emplace(_orca_audit_key, this->name()) -#define ORCA_PY_OVERRIDE_AUDITED(mode, audit_setup, override_macro, ret, base, name, ...) \ +#define ORCA_PY_OVERRIDE_AUDITED(audit_setup, override_macro, ret, base, name, ...) \ do { \ ::Slic3r::PluginCapabilityInterface::RefCounter _orca_ref_counter(*this); \ ::Slic3r::PythonGILState _orca_python_gil; \ if (!_orca_python_gil) \ throw std::runtime_error("Python interpreter is shutting down"); \ - ORCA_PY_AUDIT_SCOPE(mode); \ + ORCA_PY_AUDIT_SCOPE(); \ if (_orca_audit_scope) \ audit_setup(); \ ORCA_PY_LOGGED_OVERRIDE_BODY(override_macro(ret, base, name, ##__VA_ARGS__)); \ @@ -58,7 +63,7 @@ public: std::string get_name() const override { - ORCA_PY_OVERRIDE_AUDITED(::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, std::string, Base, get_name); + ORCA_PY_OVERRIDE_AUDITED([] {}, PYBIND11_OVERRIDE_PURE, std::string, Base, get_name); } // Config UI hooks. Available on every capability type, so they live here rather than in @@ -66,7 +71,6 @@ public: bool has_config_ui() const override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, bool, @@ -77,7 +81,6 @@ public: std::string get_config_ui() const override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, std::string, @@ -94,7 +97,7 @@ public: // mistake), both fall back to the base's empty object rather than writing `"cap_config": null`. nlohmann::json get_default_config() const override { - ORCA_PY_AUDIT_SCOPE(::Slic3r::PluginAuditManager::AuditMode::Loading); + ORCA_PY_AUDIT_SCOPE(); try { pybind11::gil_scoped_acquire gil; pybind11::function override = pybind11::get_override(static_cast(this), "get_default_config"); @@ -117,17 +120,17 @@ public: void on_load() override { - ORCA_PY_OVERRIDE_AUDITED(::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, void, Base, on_load); + ORCA_PY_OVERRIDE_AUDITED([] {}, PYBIND11_OVERRIDE, void, Base, on_load); } void on_unload() override { - ORCA_PY_OVERRIDE_AUDITED(::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, void, Base, on_unload); + ORCA_PY_OVERRIDE_AUDITED([] {}, PYBIND11_OVERRIDE, void, Base, on_unload); } void on_cancelled() override { - ORCA_PY_OVERRIDE_AUDITED(::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, void, Base, on_cancelled); + ORCA_PY_OVERRIDE_AUDITED([] {}, PYBIND11_OVERRIDE, void, Base, on_cancelled); } void on_lifecycle_event(LifecycleEvent event, const LifecycleEventContext& ctx) override @@ -145,7 +148,7 @@ public: PluginCapabilityType get_type() const override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, PluginCapabilityType, PluginCapabilityInterface, + [] {}, PYBIND11_OVERRIDE, PluginCapabilityType, PluginCapabilityInterface, get_type); } }; diff --git a/src/slic3r/plugin/PythonInterpreter.cpp b/src/slic3r/plugin/PythonInterpreter.cpp index e46ee58f80..3d180c2f2a 100644 --- a/src/slic3r/plugin/PythonInterpreter.cpp +++ b/src/slic3r/plugin/PythonInterpreter.cpp @@ -87,6 +87,12 @@ void log_python_exception_keep(pybind11::error_already_set& err) if (!gil) return; + // Traceback output is host-owned work. In particular, the stderr tee opens the Python log + // file on every write. Keep that open outside the plugin audit context, otherwise an ordinary + // exception raised by a plugin can recursively trigger the filesystem permission dialog while + // its original exception is being reported. + ScopedPluginAuditContext audit_suppression(""); + // Non-destructive: print the traceback to sys.stderr (tee'd to the session log) // WITHOUT consuming err, so the caller can rethrow it intact. For example, downstream C++ // catchers can still read err.what() for the user-facing dialog. We must NOT use @@ -622,10 +628,6 @@ bool PythonInterpreter::initialize() else BOOST_LOG_TRIVIAL(info) << "Bundled uv executable not found"; - // Install the CPython audit hook for plugin policy enforcement. - // This is defense-in-depth: today it only inspects the `open` audit event - // and blocks writes outside the allowed roots; subprocess/socket/ctypes and - // other events are not yet handled. It is NOT a full security sandbox. PluginAuditManager::instance().install_hook(); // Persist Python stderr (plugin tracebacks, including uncaught diff --git a/src/slic3r/plugin/PythonInterpreter.hpp b/src/slic3r/plugin/PythonInterpreter.hpp index ff69ce6846..e15aa91598 100644 --- a/src/slic3r/plugin/PythonInterpreter.hpp +++ b/src/slic3r/plugin/PythonInterpreter.hpp @@ -1,7 +1,8 @@ #ifndef slic3r_PythonInterpreter_hpp_ #define slic3r_PythonInterpreter_hpp_ -#include +// Via pybind11 so this file requests the same python3xx.lib as everything else. +#include #include #include #include diff --git a/src/slic3r/plugin/PythonPluginBridge.cpp b/src/slic3r/plugin/PythonPluginBridge.cpp index 2b4ca52fd8..c2587ceb56 100644 --- a/src/slic3r/plugin/PythonPluginBridge.cpp +++ b/src/slic3r/plugin/PythonPluginBridge.cpp @@ -1,5 +1,6 @@ #include "PythonPluginBridge.hpp" +#include #include #include #include @@ -40,6 +41,7 @@ thread_local std::string g_active_plugin_key; std::mutex g_registry_mutex; std::unordered_map> g_pending_capabilities; std::unordered_map g_pending_package; +std::unordered_map> g_pending_fs_read_permissions; struct PluginInstanceHandle { // The C++ plugin interface points into a Python object. Keep both alive through one @@ -77,6 +79,8 @@ void discard_pending_capture_without_python(const std::string& plugin_key) (void) package->second.release(); g_pending_package.erase(package); } + + g_pending_fs_read_permissions.erase(plugin_key); } } // namespace @@ -101,34 +105,38 @@ void PythonPluginBridge::begin_plugin_capture(const std::string& plugin_key) // for this same entry path. g_pending_capabilities.erase(plugin_key); g_pending_package.erase(plugin_key); + g_pending_fs_read_permissions.erase(plugin_key); } // From now until finalize/cancel, @orca.plugin and register_capability() calls made by // Python code on this thread are attributed to this plugin. g_active_plugin_key = plugin_key; } -std::vector PythonPluginBridge::finalize_plugin_capture(const std::string& plugin_key, std::string& error) +std::vector PythonPluginBridge::finalize_plugin_capture(const std::string& capture_key, + const std::string& plugin_key, + std::string& error) { PythonGILState gil; if (!gil) { error = "Python interpreter is shutting down"; return {}; } - BOOST_LOG_TRIVIAL(info) << "Finalizing Python plugin capture for key " << plugin_key; + BOOST_LOG_TRIVIAL(info) << "Finalizing Python plugin capture for key " << capture_key; // Phase 1: run the package class's register_capabilities() while the active key is // still set. That method is expected to call orca.register_capability() once per // capability class, and register_capability() needs g_active_plugin_key to know which // pending bucket to append to. { - auto clear_active_key = [&plugin_key]() { - if (g_active_plugin_key == plugin_key) + auto clear_active_key = [&capture_key]() { + if (g_active_plugin_key == capture_key) g_active_plugin_key.clear(); }; - auto discard_pending_for_key = [&plugin_key]() { + auto discard_pending_for_key = [&capture_key]() { std::lock_guard lock(g_registry_mutex); - g_pending_capabilities.erase(plugin_key); - g_pending_package.erase(plugin_key); + g_pending_capabilities.erase(capture_key); + g_pending_package.erase(capture_key); + g_pending_fs_read_permissions.erase(capture_key); }; try { @@ -138,7 +146,7 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons py::object package_cls; { std::lock_guard lock(g_registry_mutex); - auto it = g_pending_package.find(plugin_key); + auto it = g_pending_package.find(capture_key); if (it != g_pending_package.end()) { package_cls = it->second; g_pending_package.erase(it); @@ -157,6 +165,33 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons // are kept. py::object package = package_cls(); package.attr("register_capabilities")(); + + // Permission declarations are collected while register_capabilities() runs so the + // plugin can describe its needs without touching wx from the Python load worker. Ask + // only after registration returns, before capability instances are materialized. + std::vector fs_read_permissions; + { + std::lock_guard lock(g_registry_mutex); + auto it = g_pending_fs_read_permissions.find(capture_key); + if (it != g_pending_fs_read_permissions.end()) { + fs_read_permissions = std::move(it->second); + g_pending_fs_read_permissions.erase(it); + } + } + if (!fs_read_permissions.empty()) { + bool granted = false; + { + py::gil_scoped_release release; + granted = PluginAuditManager::instance().request_filesystem_read_permissions(plugin_key, fs_read_permissions); + } + if (!granted) { + error = "Plugin filesystem read permission request denied"; + BOOST_LOG_TRIVIAL(warning) << error << " for key " << plugin_key; + discard_pending_for_key(); + clear_active_key(); + return {}; + } + } } catch (py::error_already_set& err) { log_python_exception_keep(err); error = err.what(); @@ -180,7 +215,7 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons std::vector classes; { std::lock_guard lock(g_registry_mutex); - auto it = g_pending_capabilities.find(plugin_key); + auto it = g_pending_capabilities.find(capture_key); if (it != g_pending_capabilities.end()) { classes = std::move(it->second); g_pending_capabilities.erase(it); @@ -189,10 +224,10 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons // Registration is complete. Later register_capability() calls should fail instead of // accidentally attaching themselves to this plugin. - if (g_active_plugin_key == plugin_key) + if (g_active_plugin_key == capture_key) g_active_plugin_key.clear(); - BOOST_LOG_TRIVIAL(info) << "Collected " << classes.size() << " registered capability class(es) for key " << plugin_key; + BOOST_LOG_TRIVIAL(info) << "Collected " << classes.size() << " registered capability class(es) for key " << capture_key; std::vector capabilities; capabilities.reserve(classes.size()); @@ -204,7 +239,7 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons py::object instance = cls(); if (!py::isinstance(instance)) { error = "Registered capability must inherit from a PluginCapability base"; - BOOST_LOG_TRIVIAL(error) << "Python plugin capture failed type check for key " << plugin_key + BOOST_LOG_TRIVIAL(error) << "Python plugin capture failed type check for key " << capture_key << " error=" << error; return {}; } @@ -212,7 +247,7 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons auto capability_iface = instance.cast>(); if (!capability_iface) { error = "Failed to cast Python capability to PluginCapabilityInterface"; - BOOST_LOG_TRIVIAL(error) << "Python plugin capture failed cast for key " << plugin_key + BOOST_LOG_TRIVIAL(error) << "Python plugin capture failed cast for key " << capture_key << " error=" << error; return {}; } @@ -226,7 +261,7 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons // here is a hard error that rejects the whole plugin capture. if (name.find(';') != std::string::npos) { error = "Capability name must not contain ';': " + name; - BOOST_LOG_TRIVIAL(error) << "Python plugin capture rejected capability for key " << plugin_key + BOOST_LOG_TRIVIAL(error) << "Python plugin capture rejected capability for key " << capture_key << " error=" << error; return {}; } @@ -246,12 +281,12 @@ std::vector PythonPluginBridge::finalize_plugin_capture(cons // log the traceback here. GIL is held for the duration of finalize_plugin_capture. log_python_exception_keep(err); error = err.what(); - BOOST_LOG_TRIVIAL(error) << "Python plugin capture raised Python exception for key " << plugin_key + BOOST_LOG_TRIVIAL(error) << "Python plugin capture raised Python exception for key " << capture_key << " error=" << error; return {}; } catch (const std::exception& ex) { error = ex.what(); - BOOST_LOG_TRIVIAL(error) << "Python plugin capture raised exception for key " << plugin_key + BOOST_LOG_TRIVIAL(error) << "Python plugin capture raised exception for key " << capture_key << " error=" << error; return {}; } @@ -279,6 +314,7 @@ void PythonPluginBridge::cancel_plugin_capture(const std::string& plugin_key) // may already have registered under this key. g_pending_capabilities.erase(plugin_key); g_pending_package.erase(plugin_key); + g_pending_fs_read_permissions.erase(plugin_key); } if (g_active_plugin_key == plugin_key) @@ -305,6 +341,7 @@ void PythonPluginBridge::clear_pending_captures() (void) pkg.release(); } g_pending_package.clear(); + g_pending_fs_read_permissions.clear(); g_active_plugin_key.clear(); return; } @@ -313,6 +350,7 @@ void PythonPluginBridge::clear_pending_captures() BOOST_LOG_TRIVIAL(info) << "Clearing " << g_pending_capabilities.size() << " pending Python plugin capture(s)"; g_pending_capabilities.clear(); g_pending_package.clear(); + g_pending_fs_read_permissions.clear(); g_active_plugin_key.clear(); } @@ -509,6 +547,27 @@ void bind_python_api(pybind11::module_& m) }, R"pbdoc(Register a PluginCapability subclass while OrcaSlicer loads your module.)pbdoc"); + m.def( + "request_permissions", + [](const std::vector& fs_read) { + if (g_active_plugin_key.empty()) + throw py::value_error("request_permissions() called outside plugin discovery context"); + + std::lock_guard lock(g_registry_mutex); + auto& requested = g_pending_fs_read_permissions[g_active_plugin_key]; + for (const std::string& path : fs_read) { + if (path.empty()) + throw py::value_error("request_permissions(fs_read=...) does not accept empty paths"); + if (std::find(requested.begin(), requested.end(), path) == requested.end()) + requested.push_back(path); + } + }, + py::arg("fs_read") = std::vector{}, + R"pbdoc(Request filesystem read permissions while OrcaSlicer loads your module. + +The host presents the request to the user after register_capabilities() returns. Denying the +request aborts the plugin load.)pbdoc"); + m.def("plugin", [](py::object cls) { if (g_active_plugin_key.empty()) throw py::value_error("@orca.plugin used outside plugin discovery context"); diff --git a/src/slic3r/plugin/PythonPluginBridge.hpp b/src/slic3r/plugin/PythonPluginBridge.hpp index 6ccadabd00..036c8f1941 100644 --- a/src/slic3r/plugin/PythonPluginBridge.hpp +++ b/src/slic3r/plugin/PythonPluginBridge.hpp @@ -31,7 +31,7 @@ public: // Returns one CapturedCapability per capability, or an empty vector on failure // (error message populated). std::vector finalize_plugin_capture( - const std::string& plugin_key, std::string& error); + const std::string& capture_key, const std::string& plugin_key, std::string& error); // Clear any pending registrations for the key. Safe to call when import fails. void cancel_plugin_capture(const std::string& plugin_key); diff --git a/src/slic3r/plugin/host/PluginHost.cpp b/src/slic3r/plugin/host/PluginHost.cpp index 524f07f12c..2830d6f276 100644 --- a/src/slic3r/plugin/host/PluginHost.cpp +++ b/src/slic3r/plugin/host/PluginHost.cpp @@ -1,9 +1,31 @@ #include "PluginHost.hpp" #include "PluginHostBindings.hpp" #include "PluginHostUi.hpp" +#include +#include + +#include namespace Slic3r { +namespace host_bindings { +void register_plugin(pybind11::module_& host) +{ + auto plugin_host = host.def_submodule("plugin", "Plugin host API"); + + plugin_host.def( + "storage", + []() -> std::string { + const std::string plugin_key = PluginAuditManager::instance().current_plugin(); + if (plugin_key.empty()) + throw std::runtime_error("plugin.storage() must be called from a plugin callback"); + + return PluginManager::instance().get_storage_dir(plugin_key); + }, + "Return the installed folder of the current plugin."); +} +} // namespace host_bindings + void PluginHost::RegisterBindings(pybind11::module_& module) { auto host = module.def_submodule("host", "Host application API"); @@ -15,6 +37,7 @@ void PluginHost::RegisterBindings(pybind11::module_& module) host_bindings::register_presets(host); host_bindings::register_model(host); host_bindings::register_app(host); + host_bindings::register_plugin(host); // UI: native dialogs and interactive HTML windows for plugins. PluginHostUi::RegisterBindings(host); diff --git a/src/slic3r/plugin/host/PluginHostBindings.hpp b/src/slic3r/plugin/host/PluginHostBindings.hpp index 0f206d5992..94601ad99c 100644 --- a/src/slic3r/plugin/host/PluginHostBindings.hpp +++ b/src/slic3r/plugin/host/PluginHostBindings.hpp @@ -12,5 +12,5 @@ void register_presets(pybind11::module_& host); // PluginHostPresets.cpp void register_model(pybind11::module_& host); // PluginHostModel.cpp void register_app(pybind11::module_& host); // PluginHostApp.cpp void register_slicing(pybind11::module_& host); // PluginHostSlicing.cpp - +void register_plugin(pybind11::module_& host); // PluginHost.cpp } // namespace Slic3r::host_bindings diff --git a/src/slic3r/plugin/host/PluginHostUi.cpp b/src/slic3r/plugin/host/PluginHostUi.cpp index c098ea3224..8fc3f12877 100644 --- a/src/slic3r/plugin/host/PluginHostUi.cpp +++ b/src/slic3r/plugin/host/PluginHostUi.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -19,6 +20,7 @@ #include #include +#include #include #include #include @@ -44,16 +46,20 @@ namespace { struct GilSafeCallable { py::object fn; + std::atomic_bool active{true}; explicit GilSafeCallable(py::object f) : fn(std::move(f)) {} + void disable() + { + active.store(false, std::memory_order_release); + PythonGILState gil; + if (gil) + fn = py::object(); + else + (void) fn.release(); + } ~GilSafeCallable() { - if (fn) { - PythonGILState gil; - if (gil) - fn = py::object(); - else - (void) fn.release(); - } + disable(); } }; using CallablePtr = std::shared_ptr; @@ -166,11 +172,34 @@ public: } return out; } + void bind_callback(const CallablePtr& callback, const std::string& plugin_key) + { + if (!callback) + return; + std::lock_guard lk(m_mtx); + m_callbacks[plugin_key].push_back(callback); + } + std::vector take_callbacks_for_plugin(const std::string& plugin_key) + { + std::lock_guard lk(m_mtx); + auto it = m_callbacks.find(plugin_key); + if (it == m_callbacks.end()) + return {}; + std::vector callbacks; + callbacks.reserve(it->second.size()); + for (const std::weak_ptr& weak_callback : it->second) { + if (auto callback = weak_callback.lock()) + callbacks.push_back(std::move(callback)); + } + m_callbacks.erase(it); + return callbacks; + } private: std::mutex m_mtx; std::unordered_map m_resources; std::unordered_map m_owners; + std::unordered_map>> m_callbacks; int m_next_id{1}; }; @@ -448,6 +477,46 @@ void progress_close(int id) }); } +void plater_notification(NotificationManager::NotificationLevel notification_level, const std::string& text, + const std::string& hypertext, py::object on_click) +{ + const std::string plugin_key = PluginAuditManager::instance().current_plugin(); + CallablePtr holder = make_holder(std::move(on_click)); + if (holder) + UiRegistry::instance().bind_callback(holder, plugin_key); + + std::function callback; + if (holder) { + callback = [holder](wxEvtHandler*) -> bool { + if (!holder->active.load(std::memory_order_acquire)) + return false; + + PythonGILState gil; + if (!gil) + return false; + try { + py::object result = holder->fn(); + return result.is_none() || result.cast(); + } catch (py::error_already_set& e) { + BOOST_LOG_TRIVIAL(error) << "orca.host.ui notification callback raised: " << e.what(); + PyErr_Clear(); + return false; + } catch (const std::exception& e) { + BOOST_LOG_TRIVIAL(error) << "orca.host.ui notification callback raised: " << e.what(); + return false; + } catch (...) { + BOOST_LOG_TRIVIAL(error) << "orca.host.ui notification callback raised an unknown exception"; + return false; + } + }; + } + + run_on_ui_blocking([notification_level, text, hypertext, callback = std::move(callback)]() mutable { + wxGetApp().plater()->get_notification_manager()->push_notification(NotificationType::CustomNotification, notification_level, text, + hypertext, std::move(callback)); + }); +} + } // namespace void PluginHostUi::RegisterBindings(pybind11::module_& host) @@ -530,6 +599,23 @@ void PluginHostUi::RegisterBindings(pybind11::module_& host) ui.def("create_progress_dialog", &ui_create_progress_dialog, py::arg("title"), py::arg("message"), py::arg("maximum") = 100, py::arg("style") = wxPD_APP_MODAL | wxPD_AUTO_HIDE, "Create a native progress dialog and return a ProgressDialog handle."); + + py::enum_(ui, "NotificationLevel") + .value("ProgressBarNotificationLevel", NotificationManager::NotificationLevel::ProgressBarNotificationLevel) + .value("HintNotificationLevel", NotificationManager::NotificationLevel::HintNotificationLevel) + .value("RegularNotificationLevel", NotificationManager::NotificationLevel::RegularNotificationLevel) + .value("PrintInfoNotificationLevel", NotificationManager::NotificationLevel::PrintInfoNotificationLevel) + .value("PrintInfoShortNotificationLevel", NotificationManager::NotificationLevel::PrintInfoShortNotificationLevel) + .value("ImportantNotificationLevel", NotificationManager::NotificationLevel::ImportantNotificationLevel) + .value("WarningNotificationLevel", NotificationManager::NotificationLevel::WarningNotificationLevel) + .value("SeriousWarningNotificationLevel", NotificationManager::NotificationLevel::SeriousWarningNotificationLevel) + .value("ErrorNotificationLevel", NotificationManager::NotificationLevel::ErrorNotificationLevel) + .export_values(); + + ui.def("push_notification", &plater_notification, py::arg("notification_level"), py::arg("text"), + py::arg("hyper_text") = "", py::arg("on_click") = py::none(), + "Push a plater notification. hyper_text is an underlined label; on_click() is called when it is clicked " + "and may return True to close the notification."); } void PluginHostUi::close_windows_for_plugin(const std::string& plugin_key) @@ -538,6 +624,9 @@ void PluginHostUi::close_windows_for_plugin(const std::string& plugin_key) return; auto teardown = [plugin_key]() { + for (auto& callback : UiRegistry::instance().take_callbacks_for_plugin(plugin_key)) + callback->disable(); + // Destroy() bypasses wxEVT_CLOSE, so the plugin's on_close is not fired on // forced teardown (intended); the resource destructor still cleans the registry. for (auto* window : UiRegistry::instance().take_for_plugin(plugin_key)) { diff --git a/src/slic3r/plugin/pluginTypes/pages/PagesPluginCapabilityTrampoline.hpp b/src/slic3r/plugin/pluginTypes/pages/PagesPluginCapabilityTrampoline.hpp index 3fb476c228..f6e13c981b 100644 --- a/src/slic3r/plugin/pluginTypes/pages/PagesPluginCapabilityTrampoline.hpp +++ b/src/slic3r/plugin/pluginTypes/pages/PagesPluginCapabilityTrampoline.hpp @@ -16,7 +16,6 @@ public: std::string get_icon() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE, std::string, @@ -27,7 +26,6 @@ public: std::string get_ui() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, std::string, @@ -42,7 +40,7 @@ public: if (!gil) throw std::runtime_error("Python interpreter is shutting down"); - ORCA_PY_AUDIT_SCOPE(::Slic3r::PluginAuditManager::AuditMode::Loading); + ORCA_PY_AUDIT_SCOPE(); pybind11::function override = pybind11::get_override(static_cast(this), "on_message"); if (!override) diff --git a/src/slic3r/plugin/pluginTypes/printerAgent/PrinterAgentPluginCapabilityTrampoline.hpp b/src/slic3r/plugin/pluginTypes/printerAgent/PrinterAgentPluginCapabilityTrampoline.hpp index 226ea04650..5491e1cef6 100644 --- a/src/slic3r/plugin/pluginTypes/printerAgent/PrinterAgentPluginCapabilityTrampoline.hpp +++ b/src/slic3r/plugin/pluginTypes/printerAgent/PrinterAgentPluginCapabilityTrampoline.hpp @@ -16,206 +16,206 @@ public: AgentInfo get_agent_info() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, AgentInfo, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, AgentInfo, PrinterAgentPluginCapability, get_agent_info); } int connect_printer(std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, connect_printer, dev_id, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, connect_printer, dev_id, dev_ip, username, password, use_ssl); } int disconnect_printer() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, disconnect_printer); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, disconnect_printer); } int send_message(std::string dev_id, std::string json_str, int qos, int flag) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, send_message, dev_id, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, send_message, dev_id, json_str, qos, flag); } int send_message_to_printer(std::string dev_id, std::string json_str, int qos, int flag) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, send_message_to_printer, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, send_message_to_printer, dev_id, json_str, qos, flag); } bool start_discovery(bool start, bool sending) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, bool, PrinterAgentPluginCapability, start_discovery, start, + [] {}, PYBIND11_OVERRIDE_PURE, bool, PrinterAgentPluginCapability, start_discovery, start, sending); } int bind_detect(std::string dev_ip, std::string sec_link, detectResult& detect) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, bind_detect, dev_ip, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, bind_detect, dev_ip, sec_link, detect); } std::string get_user_selected_machine() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, std::string, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, std::string, PrinterAgentPluginCapability, get_user_selected_machine); } int set_user_selected_machine(std::string dev_id) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_user_selected_machine, dev_id); } int start_send_gcode_to_sdcard(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_send_gcode_to_sdcard, params, update_fn, cancel_fn, wait_fn); } int start_local_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_local_print, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_local_print, params, update_fn, cancel_fn); } FilamentSyncMode get_filament_sync_mode() const override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, FilamentSyncMode, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, FilamentSyncMode, PrinterAgentPluginCapability, get_filament_sync_mode); } bool fetch_filament_info(std::string dev_id) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, bool, PrinterAgentPluginCapability, fetch_filament_info, dev_id); + [] {}, PYBIND11_OVERRIDE_PURE, bool, PrinterAgentPluginCapability, fetch_filament_info, dev_id); } int check_cert() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, check_cert); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, check_cert); } void install_device_cert(std::string dev_id, bool lan_only) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, void, PrinterAgentPluginCapability, install_device_cert, dev_id, + [] {}, PYBIND11_OVERRIDE_PURE, void, PrinterAgentPluginCapability, install_device_cert, dev_id, lan_only); } int ping_bind(std::string ping_code) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, ping_bind, ping_code); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, ping_bind, ping_code); } int bind(std::string dev_ip, std::string dev_id, std::string dev_model, std::string sec_link, std::string timezone, bool improved, OnUpdateStatusFn update_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, bind, dev_ip, dev_id, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, bind, dev_ip, dev_id, dev_model, sec_link, timezone, improved, update_fn); } int unbind(std::string dev_id) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, unbind, dev_id); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, unbind, dev_id); } int start_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_print, params, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_print, params, update_fn, cancel_fn, wait_fn); } int start_local_print_with_record(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn, OnWaitFn wait_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_local_print_with_record, params, update_fn, cancel_fn, wait_fn); } int start_sdcard_print(PrintParams params, OnUpdateStatusFn update_fn, WasCancelledFn cancel_fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_sdcard_print, params, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, start_sdcard_print, params, update_fn, cancel_fn); } int get_hms_snapshot(std::string dev_id, std::string file_name, std::function callback) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, get_hms_snapshot, dev_id, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, get_hms_snapshot, dev_id, file_name, callback); } int set_server_callback(OnServerErrFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_server_callback, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_server_callback, fn); } int set_on_ssdp_msg_fn(OnMsgArrivedFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_ssdp_msg_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_ssdp_msg_fn, fn); } int set_on_printer_connected_fn(OnPrinterConnectedFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_printer_connected_fn, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_printer_connected_fn, fn); } int set_on_subscribe_failure_fn(GetSubscribeFailureFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_subscribe_failure_fn, + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_subscribe_failure_fn, fn); } int set_on_message_fn(OnMessageFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_message_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_message_fn, fn); } int set_on_user_message_fn(OnMessageFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_user_message_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_user_message_fn, fn); } int set_on_local_connect_fn(OnLocalConnectedFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_local_connect_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_local_connect_fn, fn); } int set_on_local_message_fn(OnMessageFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_local_message_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_on_local_message_fn, fn); } int set_queue_on_main_fn(QueueOnMainFn fn) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_queue_on_main_fn, fn); + [] {}, PYBIND11_OVERRIDE_PURE, int, PrinterAgentPluginCapability, set_queue_on_main_fn, fn); } // request_bind_ticket returns its ticket through a std::string* out-param, which pybind11 @@ -223,7 +223,7 @@ public: // returns a (result, ticket) tuple, which we unpack into the int result and the out-param. int request_bind_ticket(std::string* ticket) override { - ORCA_PY_AUDIT_SCOPE(::Slic3r::PluginAuditManager::AuditMode::Loading); + ORCA_PY_AUDIT_SCOPE(); ::Slic3r::PluginCapabilityInterface::RefCounter _orca_ref_counter(*this); ::Slic3r::PythonGILState gil; if (!gil) diff --git a/src/slic3r/plugin/pluginTypes/script/ScriptPluginCapabilityTrampoline.hpp b/src/slic3r/plugin/pluginTypes/script/ScriptPluginCapabilityTrampoline.hpp index f77d7ce597..62958a89d9 100644 --- a/src/slic3r/plugin/pluginTypes/script/ScriptPluginCapabilityTrampoline.hpp +++ b/src/slic3r/plugin/pluginTypes/script/ScriptPluginCapabilityTrampoline.hpp @@ -13,7 +13,6 @@ public: ExecutionResult execute() override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [] {}, PYBIND11_OVERRIDE_PURE, ExecutionResult, diff --git a/src/slic3r/plugin/pluginTypes/slicingPipeline/SlicingPipelinePluginCapabilityTrampoline.hpp b/src/slic3r/plugin/pluginTypes/slicingPipeline/SlicingPipelinePluginCapabilityTrampoline.hpp index 8605532c12..5c9d527e42 100644 --- a/src/slic3r/plugin/pluginTypes/slicingPipeline/SlicingPipelinePluginCapabilityTrampoline.hpp +++ b/src/slic3r/plugin/pluginTypes/slicingPipeline/SlicingPipelinePluginCapabilityTrampoline.hpp @@ -10,7 +10,6 @@ public: using PyPluginCommonTrampoline::PyPluginCommonTrampoline; ExecutionResult execute(SlicingPipelineContext& ctx) override { ORCA_PY_OVERRIDE_AUDITED( - ::Slic3r::PluginAuditManager::AuditMode::Loading, [&]{ // At Step.psGCodePostProcess the plugin edits the exported G-code file, which lives // outside data_dir() (a temp/output folder), so writing to it would otherwise be diff --git a/src/slic3r/win_platform.hpp b/src/slic3r/win_platform.hpp new file mode 100644 index 0000000000..0c5a8e81b2 --- /dev/null +++ b/src/slic3r/win_platform.hpp @@ -0,0 +1,19 @@ +#pragma once + +// Force-included into libslic3r_gui when SLIC3R_PCH is OFF, standing in for +// pchheader.hpp, which includes before anything else. Arriving +// late and transitively, rpcndr.h defines a global `byte` that collides with +// std::byte under `using namespace std`, and the control and URL moniker +// types the GUI uses are never declared. +#ifdef _WIN32 + #ifndef WIN32_LEAN_AND_MEAN + #define WIN32_LEAN_AND_MEAN + #endif + #ifndef NOMINMAX + #define NOMINMAX + #endif + #include + #include + #include +#endif // _WIN32 + diff --git a/tests/AGENTS.md b/tests/AGENTS.md index c62a1d12ec..e6f3bf864c 100644 --- a/tests/AGENTS.md +++ b/tests/AGENTS.md @@ -10,16 +10,17 @@ Rules for writing tests under `tests/`. [CATCH2.md](CATCH2.md) is the Catch2 ref - `libnest2d`: 2D nesting and packing. - `slic3rutils`: the Python plugin system and its slicing-pipeline bindings. - `filament_group`: filament-to-extruder grouping, checked against golden files. +- `cli`: end-to-end runs of the built `orca-slicer` binary, Linux only. These tests carry the `RequiresApp` label, which the CI unit-test job excludes because it receives only `build/tests`; run them with `ctest --test-dir build/tests -C Release -L RequiresApp`. ## Building and running Tests are off by default, so the build has to be told to include them. -- Windows: `build_release_vs.bat tests`, then `ctest --test-dir build/tests -C Release` +- Windows: `build_win.bat -ds --run-tests`, which builds the dependencies and the tests and runs them (`-l -x` for the clang-cl and Ninja build CI uses) - macOS: `./build_release_macos.sh -s -a arm64 -T`, which builds and runs them -- Linux: `./build_linux.sh -t`, then `ctest --test-dir build/tests` +- Linux: `./build_linux.sh -t`, then `ctest --test-dir build/tests -C Release` -Rebuild a single suite with `cmake --build build --config Release --target _tests`. Visual Studio and Xcode are multi-configuration generators, so `ctest` needs `-C` there; on Linux it does not. +Rebuild a single suite with `cmake --build build --config Release --target _tests`. Visual Studio, Xcode and the Ninja Multi-Config generator that `build_linux.sh` uses are all multi-configuration, so `ctest` needs `-C` on every platform; without it, tests registered with plain `add_test()` lose their labels and report "Not Run". ## Where a test goes diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 3cbdc25f5f..f79a3c54c2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -30,25 +30,47 @@ if (APPLE) target_link_libraries(test_common INTERFACE "-liconv -framework IOKit" "-framework CoreFoundation" -lc++) endif() -# Copies runtime DLLs next to each test executable. Handles both single-config -# generators (CMAKE_BUILD_TYPE set) and multi-config generators (Ninja -# Multi-Config, Visual Studio) where CMAKE_BUILD_TYPE is empty and DLLs must -# land in every per-config output directory. +# Copies runtime shared libraries next to each test executable. Handles both +# single-config generators (CMAKE_BUILD_TYPE set) and multi-config generators +# (Ninja Multi-Config, Visual Studio) where CMAKE_BUILD_TYPE is empty and DLLs +# must land in every per-config output directory. On Windows the loader finds +# DLLs in the executable's directory; the Linux branch below does the same for +# the deps-built FFmpeg libraries and adds an $ORIGIN rpath, since the ELF +# loader does not search the executable's directory and the CI unit-test runner +# only receives the tests artifact (no deps install). function(orcaslicer_copy_test_dlls) - if (NOT WIN32) - return() - endif() - set(_configs ${CMAKE_CONFIGURATION_TYPES}) - if (NOT _configs) - set(_configs "${CMAKE_BUILD_TYPE}") - endif() - foreach(_cfg IN LISTS _configs) - if (_cfg STREQUAL "Debug") - orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" _unused_dlls) - else() - orcaslicer_copy_dlls(COPY_DLLS "${_cfg}" "" _unused_dlls) + if (WIN32) + set(_configs ${CMAKE_CONFIGURATION_TYPES}) + if (NOT _configs) + set(_configs "${CMAKE_BUILD_TYPE}") endif() - endforeach() + foreach(_cfg IN LISTS _configs) + if (_cfg STREQUAL "Debug") + orcaslicer_copy_dlls(COPY_DLLS "Debug" "d" _unused_dlls) + else() + orcaslicer_copy_dlls(COPY_DLLS "${_cfg}" "" _unused_dlls) + endif() + endforeach() + elseif (UNIX AND NOT APPLE) + # Only test executables that link libslic3r_gui pull in the FFmpeg + # shared libraries (src/slic3r/CMakeLists.txt links PkgConfig::LIBAV + # into it). Copy them next to the executable and give it an $ORIGIN + # rpath so the loader finds them when the tests run on the CI unit-test + # runner, which only receives this build/tests tree. + get_target_property(_linked_libs ${_TEST_NAME}_tests LINK_LIBRARIES) + if (NOT "libslic3r_gui" IN_LIST _linked_libs) + return() + endif() + + set_property(TARGET ${_TEST_NAME}_tests PROPERTY BUILD_RPATH "$ORIGIN") + set(_configs ${CMAKE_CONFIGURATION_TYPES}) + if (NOT _configs) + set(_configs "${CMAKE_BUILD_TYPE}") + endif() + foreach(_cfg IN LISTS _configs) + orcaslicer_copy_sos(${_TEST_NAME}_tests "${_cfg}" "" _unused_sos) + endforeach() + endif() endfunction() # Register Catch2 tags as CTest labels so `ctest -L`/`-LE` can filter by tag. @@ -63,4 +85,9 @@ add_subdirectory(fff_print) add_subdirectory(sla_print) add_subdirectory(filament_group) +# End-to-end checks of the orca-slicer binary. Linux only: they read result.json, which the CLI +# writes on Linux only. src/ is added before tests/, so the target is known here. +if (UNIX AND NOT APPLE AND TARGET OrcaSlicer) + add_subdirectory(cli) +endif () diff --git a/tests/cli/CMakeLists.txt b/tests/cli/CMakeLists.txt new file mode 100644 index 0000000000..6707159fb2 --- /dev/null +++ b/tests/cli/CMakeLists.txt @@ -0,0 +1,17 @@ +# Runs the real orca-slicer binary, so it needs the built app and resources/, not just build/tests. +# The CI unit-test job only receives build/tests, so the test carries the RequiresApp label that +# scripts/run_unit_tests.sh excludes. Run it with `ctest -C Release -L RequiresApp`. It also exits 77 +# (skipped) when the binary is missing. + +find_program(ORCA_CLI_TEST_PYTHON NAMES python3) +if (NOT ORCA_CLI_TEST_PYTHON) + message(STATUS "python3 not found, not registering the CLI tests") + return() +endif () + +add_test(NAME cli_strict_mode + COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cli_strict.sh $ ${ORCA_CLI_TEST_PYTHON}) +set_tests_properties(cli_strict_mode PROPERTIES + LABELS "CLI;RequiresApp" + SKIP_RETURN_CODE 77 + TIMEOUT 900) diff --git a/tests/cli/test_cli_strict.sh b/tests/cli/test_cli_strict.sh new file mode 100644 index 0000000000..6051511f23 --- /dev/null +++ b/tests/cli/test_cli_strict.sh @@ -0,0 +1,153 @@ +#!/usr/bin/env bash +# End-to-end check of the CLI --strict option against the real orca-slicer binary. +# +# A model with a large unsupported overhang, sliced with support off, raises the NON_CRITICAL +# "support needed" slicing warning. The CLI lists it in result.json's "warnings" array, and with +# --strict it also fails the run with CLI_SLICING_ERROR. --strict with --no-check is rejected up +# front, because --no-check skips that check. +# +# usage: test_cli_strict.sh +set -u + +BIN="${1:-}" +PY="${2:-python3}" +# 77 is the test's SKIP_RETURN_CODE. +[ -x "$BIN" ] || { echo "SKIP: orca-slicer binary not found: $BIN"; exit 77; } + +# From src/libslic3r/Utils.hpp. main() returns them, so the shell sees them modulo 256. +CLI_SUCCESS=0 +CLI_INVALID_PARAMS=-2 +CLI_SLICING_ERROR=-100 + +WORK="$(mktemp -d "${TMPDIR:-/tmp}/orca-cli-strict.XXXXXX")" +trap 'rm -rf "$WORK"' EXIT +mkdir -p "$WORK/datadir" + +# Standalone presets: without "inherits" the CLI loads them as-is, with no preset bundle. +cat > "$WORK/machine.json" <<'EOF' +{ + "type": "machine", + "from": "User", + "name": "CLI strict test printer", + "printable_area": ["0x0", "200x0", "200x200", "0x200"], + "printable_height": "100", + "layer_change_gcode": "G92 E0" +} +EOF +cat > "$WORK/process.json" <<'EOF' +{ + "type": "process", + "from": "User", + "name": "CLI strict test process", + "enable_support": "0", + "enforce_support_layers": "0" +} +EOF + +# A 40x40mm cap on an 8x8mm stem: the cap reaches ~22mm past the stem, beyond the 6mm +# cantilever limit of PrintObject::is_support_necessary(). +"$PY" - "$WORK/capital.stl" <<'EOF' +import sys + +def box(x0, y0, z0, x1, y1, z1): + v = [(x, y, z) for z in (z0, z1) for y in (y0, y1) for x in (x0, x1)] + # Faces wound counter-clockwise seen from outside: -z, +z, -y, +y, -x, +x. + for a, b, c, d in ((0, 2, 3, 1), (4, 5, 7, 6), (0, 1, 5, 4), (2, 6, 7, 3), (0, 4, 6, 2), (1, 3, 7, 5)): + yield v[a], v[b], v[c] + yield v[a], v[c], v[d] + +with open(sys.argv[1], "w") as f: + f.write("solid capital\n") + for tri in (*box(16, 16, 0, 24, 24, 13), *box(0, 0, 12, 40, 40, 14)): + f.write("facet normal 0 0 0\nouter loop\n") + for p in tri: + f.write("vertex %g %g %g\n" % p) + f.write("endloop\nendfacet\n") + f.write("endsolid capital\n") +EOF + +fails=0 +fail() { echo "FAIL: $*"; fails=$((fails + 1)); } + +# run [option...]: slice into $WORK/, keeping the log and the shell status there. +run() { + local out="$WORK/$1"; shift + mkdir -p "$out" + timeout 300 "$BIN" --datadir "$WORK/datadir" --load-settings "$WORK/machine.json;$WORK/process.json" \ + "$@" --slice 0 --outputdir "$out" "$WORK/capital.stl" > "$out/log" 2>&1 + echo $? > "$out/status" +} + +# expect_status +expect_status() { + local got; got="$(cat "$WORK/$1/status")" + [ "$got" -eq $(( $2 & 255 )) ] || fail "$1: shell status $got, want $(( $2 & 255 )) (code $2)" +} + +# expect_gcode yes|no +expect_gcode() { + if compgen -G "$WORK/$1/*.gcode" > /dev/null; then + [ "$2" = yes ] || fail "$1: G-code was exported" + else + [ "$2" = no ] || fail "$1: no G-code was exported" + fi +} + +# expect_result +expect_result() { + "$PY" - "$WORK/$1/result.json" "$2" "$3" "$4" <<'EOF' || fail "$1: result.json" +import json, sys + +path, want_rc, want_strict, want_warning = sys.argv[1], int(sys.argv[2]), sys.argv[3] == "true", sys.argv[4] +try: + with open(path) as f: + result = json.load(f) +except (OSError, ValueError) as e: + sys.exit("cannot read %s: %s" % (path, e)) + +errors = [] +if result.get("return_code") != want_rc: + errors.append("return_code %r, want %d" % (result.get("return_code"), want_rc)) +if result.get("strict_mode") is not want_strict: + errors.append("strict_mode %r, want %r" % (result.get("strict_mode"), want_strict)) +warnings = result.get("warnings") +if not isinstance(warnings, list): + errors.append("warnings %r is not a list" % (warnings,)) +else: + found = any(isinstance(w, dict) and w.get("class") == "slicing_warning_non_critical" for w in warnings) + if found != (want_warning == "some"): + errors.append("warnings %r, want %s slicing_warning_non_critical" % (warnings, want_warning)) +for e in errors: + print(e) +sys.exit(1 if errors else 0) +EOF +} + +echo "== without --strict the warning is listed and the slice succeeds" +run plain +expect_status plain $CLI_SUCCESS +expect_result plain $CLI_SUCCESS false some +expect_gcode plain yes + +echo "== --strict fails the run on the same warning, before G-code export" +run strict --strict +expect_status strict $CLI_SLICING_ERROR +expect_result strict $CLI_SLICING_ERROR true some +expect_gcode strict no + +echo "== --strict with --no-check is rejected before slicing" +run conflict --strict --no-check +expect_status conflict $CLI_INVALID_PARAMS +expect_result conflict $CLI_INVALID_PARAMS true none +expect_gcode conflict no +grep -q -- "--strict cannot be combined with --no-check" "$WORK/conflict/log" \ + || fail "conflict: error message missing" + +if [ "$fails" -ne 0 ]; then + for log in "$WORK"/*/log; do + echo "--- $log" + tail -n 40 "$log" + done + exit 1 +fi +echo "PASS" diff --git a/tests/data/cad_recipe_v3.bin b/tests/data/cad_recipe_v3.bin new file mode 100644 index 0000000000..c3bc6e95f7 Binary files /dev/null and b/tests/data/cad_recipe_v3.bin differ diff --git a/tests/data/cad_recipe_v4.bin b/tests/data/cad_recipe_v4.bin new file mode 100644 index 0000000000..eb8f8ec730 Binary files /dev/null and b/tests/data/cad_recipe_v4.bin differ diff --git a/tests/data/cad_recipe_v5.bin b/tests/data/cad_recipe_v5.bin new file mode 100644 index 0000000000..718f2d2d84 Binary files /dev/null and b/tests/data/cad_recipe_v5.bin differ diff --git a/tests/data/utf8_part_names.step b/tests/data/utf8_part_names.step new file mode 100644 index 0000000000..c6d41898ad --- /dev/null +++ b/tests/data/utf8_part_names.step @@ -0,0 +1,1207 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('Open CASCADE Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2026-08-27T11:50:16',('Author'),( + 'Open CASCADE'),'Open CASCADE STEP processor 7.6','Open CASCADE 7.6' + ,'Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('pièce','pièce','',(#8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#15),#345); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = MANIFOLD_SOLID_BREP('',#16); +#16 = CLOSED_SHELL('',(#17,#137,#237,#284,#331,#338)); +#17 = ADVANCED_FACE('',(#18),#32,.F.); +#18 = FACE_BOUND('',#19,.F.); +#19 = EDGE_LOOP('',(#20,#55,#83,#111)); +#20 = ORIENTED_EDGE('',*,*,#21,.F.); +#21 = EDGE_CURVE('',#22,#24,#26,.T.); +#22 = VERTEX_POINT('',#23); +#23 = CARTESIAN_POINT('',(0.,0.,0.)); +#24 = VERTEX_POINT('',#25); +#25 = CARTESIAN_POINT('',(0.,0.,6.)); +#26 = SURFACE_CURVE('',#27,(#31,#43),.PCURVE_S1.); +#27 = LINE('',#28,#29); +#28 = CARTESIAN_POINT('',(0.,0.,0.)); +#29 = VECTOR('',#30,1.); +#30 = DIRECTION('',(0.,0.,1.)); +#31 = PCURVE('',#32,#37); +#32 = PLANE('',#33); +#33 = AXIS2_PLACEMENT_3D('',#34,#35,#36); +#34 = CARTESIAN_POINT('',(0.,0.,0.)); +#35 = DIRECTION('',(1.,0.,-0.)); +#36 = DIRECTION('',(0.,0.,1.)); +#37 = DEFINITIONAL_REPRESENTATION('',(#38),#42); +#38 = LINE('',#39,#40); +#39 = CARTESIAN_POINT('',(0.,0.)); +#40 = VECTOR('',#41,1.); +#41 = DIRECTION('',(1.,0.)); +#42 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#43 = PCURVE('',#44,#49); +#44 = PLANE('',#45); +#45 = AXIS2_PLACEMENT_3D('',#46,#47,#48); +#46 = CARTESIAN_POINT('',(0.,0.,0.)); +#47 = DIRECTION('',(-0.,1.,0.)); +#48 = DIRECTION('',(0.,0.,1.)); +#49 = DEFINITIONAL_REPRESENTATION('',(#50),#54); +#50 = LINE('',#51,#52); +#51 = CARTESIAN_POINT('',(0.,0.)); +#52 = VECTOR('',#53,1.); +#53 = DIRECTION('',(1.,0.)); +#54 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#55 = ORIENTED_EDGE('',*,*,#56,.T.); +#56 = EDGE_CURVE('',#22,#57,#59,.T.); +#57 = VERTEX_POINT('',#58); +#58 = CARTESIAN_POINT('',(0.,12.,0.)); +#59 = SURFACE_CURVE('',#60,(#64,#71),.PCURVE_S1.); +#60 = LINE('',#61,#62); +#61 = CARTESIAN_POINT('',(0.,0.,0.)); +#62 = VECTOR('',#63,1.); +#63 = DIRECTION('',(-0.,1.,0.)); +#64 = PCURVE('',#32,#65); +#65 = DEFINITIONAL_REPRESENTATION('',(#66),#70); +#66 = LINE('',#67,#68); +#67 = CARTESIAN_POINT('',(0.,0.)); +#68 = VECTOR('',#69,1.); +#69 = DIRECTION('',(0.,-1.)); +#70 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#71 = PCURVE('',#72,#77); +#72 = PLANE('',#73); +#73 = AXIS2_PLACEMENT_3D('',#74,#75,#76); +#74 = CARTESIAN_POINT('',(0.,0.,0.)); +#75 = DIRECTION('',(0.,0.,1.)); +#76 = DIRECTION('',(1.,0.,-0.)); +#77 = DEFINITIONAL_REPRESENTATION('',(#78),#82); +#78 = LINE('',#79,#80); +#79 = CARTESIAN_POINT('',(0.,0.)); +#80 = VECTOR('',#81,1.); +#81 = DIRECTION('',(0.,1.)); +#82 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#83 = ORIENTED_EDGE('',*,*,#84,.T.); +#84 = EDGE_CURVE('',#57,#85,#87,.T.); +#85 = VERTEX_POINT('',#86); +#86 = CARTESIAN_POINT('',(0.,12.,6.)); +#87 = SURFACE_CURVE('',#88,(#92,#99),.PCURVE_S1.); +#88 = LINE('',#89,#90); +#89 = CARTESIAN_POINT('',(0.,12.,0.)); +#90 = VECTOR('',#91,1.); +#91 = DIRECTION('',(0.,0.,1.)); +#92 = PCURVE('',#32,#93); +#93 = DEFINITIONAL_REPRESENTATION('',(#94),#98); +#94 = LINE('',#95,#96); +#95 = CARTESIAN_POINT('',(0.,-12.)); +#96 = VECTOR('',#97,1.); +#97 = DIRECTION('',(1.,0.)); +#98 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#99 = PCURVE('',#100,#105); +#100 = PLANE('',#101); +#101 = AXIS2_PLACEMENT_3D('',#102,#103,#104); +#102 = CARTESIAN_POINT('',(0.,12.,0.)); +#103 = DIRECTION('',(-0.,1.,0.)); +#104 = DIRECTION('',(0.,0.,1.)); +#105 = DEFINITIONAL_REPRESENTATION('',(#106),#110); +#106 = LINE('',#107,#108); +#107 = CARTESIAN_POINT('',(0.,0.)); +#108 = VECTOR('',#109,1.); +#109 = DIRECTION('',(1.,0.)); +#110 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#111 = ORIENTED_EDGE('',*,*,#112,.F.); +#112 = EDGE_CURVE('',#24,#85,#113,.T.); +#113 = SURFACE_CURVE('',#114,(#118,#125),.PCURVE_S1.); +#114 = LINE('',#115,#116); +#115 = CARTESIAN_POINT('',(0.,0.,6.)); +#116 = VECTOR('',#117,1.); +#117 = DIRECTION('',(-0.,1.,0.)); +#118 = PCURVE('',#32,#119); +#119 = DEFINITIONAL_REPRESENTATION('',(#120),#124); +#120 = LINE('',#121,#122); +#121 = CARTESIAN_POINT('',(6.,0.)); +#122 = VECTOR('',#123,1.); +#123 = DIRECTION('',(0.,-1.)); +#124 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#125 = PCURVE('',#126,#131); +#126 = PLANE('',#127); +#127 = AXIS2_PLACEMENT_3D('',#128,#129,#130); +#128 = CARTESIAN_POINT('',(0.,0.,6.)); +#129 = DIRECTION('',(0.,0.,1.)); +#130 = DIRECTION('',(1.,0.,-0.)); +#131 = DEFINITIONAL_REPRESENTATION('',(#132),#136); +#132 = LINE('',#133,#134); +#133 = CARTESIAN_POINT('',(0.,0.)); +#134 = VECTOR('',#135,1.); +#135 = DIRECTION('',(0.,1.)); +#136 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#137 = ADVANCED_FACE('',(#138),#152,.T.); +#138 = FACE_BOUND('',#139,.T.); +#139 = EDGE_LOOP('',(#140,#170,#193,#216)); +#140 = ORIENTED_EDGE('',*,*,#141,.F.); +#141 = EDGE_CURVE('',#142,#144,#146,.T.); +#142 = VERTEX_POINT('',#143); +#143 = CARTESIAN_POINT('',(20.,0.,0.)); +#144 = VERTEX_POINT('',#145); +#145 = CARTESIAN_POINT('',(20.,0.,6.)); +#146 = SURFACE_CURVE('',#147,(#151,#163),.PCURVE_S1.); +#147 = LINE('',#148,#149); +#148 = CARTESIAN_POINT('',(20.,0.,0.)); +#149 = VECTOR('',#150,1.); +#150 = DIRECTION('',(0.,0.,1.)); +#151 = PCURVE('',#152,#157); +#152 = PLANE('',#153); +#153 = AXIS2_PLACEMENT_3D('',#154,#155,#156); +#154 = CARTESIAN_POINT('',(20.,0.,0.)); +#155 = DIRECTION('',(1.,0.,-0.)); +#156 = DIRECTION('',(0.,0.,1.)); +#157 = DEFINITIONAL_REPRESENTATION('',(#158),#162); +#158 = LINE('',#159,#160); +#159 = CARTESIAN_POINT('',(0.,0.)); +#160 = VECTOR('',#161,1.); +#161 = DIRECTION('',(1.,0.)); +#162 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#163 = PCURVE('',#44,#164); +#164 = DEFINITIONAL_REPRESENTATION('',(#165),#169); +#165 = LINE('',#166,#167); +#166 = CARTESIAN_POINT('',(0.,20.)); +#167 = VECTOR('',#168,1.); +#168 = DIRECTION('',(1.,0.)); +#169 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#170 = ORIENTED_EDGE('',*,*,#171,.T.); +#171 = EDGE_CURVE('',#142,#172,#174,.T.); +#172 = VERTEX_POINT('',#173); +#173 = CARTESIAN_POINT('',(20.,12.,0.)); +#174 = SURFACE_CURVE('',#175,(#179,#186),.PCURVE_S1.); +#175 = LINE('',#176,#177); +#176 = CARTESIAN_POINT('',(20.,0.,0.)); +#177 = VECTOR('',#178,1.); +#178 = DIRECTION('',(-0.,1.,0.)); +#179 = PCURVE('',#152,#180); +#180 = DEFINITIONAL_REPRESENTATION('',(#181),#185); +#181 = LINE('',#182,#183); +#182 = CARTESIAN_POINT('',(0.,0.)); +#183 = VECTOR('',#184,1.); +#184 = DIRECTION('',(0.,-1.)); +#185 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#186 = PCURVE('',#72,#187); +#187 = DEFINITIONAL_REPRESENTATION('',(#188),#192); +#188 = LINE('',#189,#190); +#189 = CARTESIAN_POINT('',(20.,0.)); +#190 = VECTOR('',#191,1.); +#191 = DIRECTION('',(0.,1.)); +#192 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#193 = ORIENTED_EDGE('',*,*,#194,.T.); +#194 = EDGE_CURVE('',#172,#195,#197,.T.); +#195 = VERTEX_POINT('',#196); +#196 = CARTESIAN_POINT('',(20.,12.,6.)); +#197 = SURFACE_CURVE('',#198,(#202,#209),.PCURVE_S1.); +#198 = LINE('',#199,#200); +#199 = CARTESIAN_POINT('',(20.,12.,0.)); +#200 = VECTOR('',#201,1.); +#201 = DIRECTION('',(0.,0.,1.)); +#202 = PCURVE('',#152,#203); +#203 = DEFINITIONAL_REPRESENTATION('',(#204),#208); +#204 = LINE('',#205,#206); +#205 = CARTESIAN_POINT('',(0.,-12.)); +#206 = VECTOR('',#207,1.); +#207 = DIRECTION('',(1.,0.)); +#208 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#209 = PCURVE('',#100,#210); +#210 = DEFINITIONAL_REPRESENTATION('',(#211),#215); +#211 = LINE('',#212,#213); +#212 = CARTESIAN_POINT('',(0.,20.)); +#213 = VECTOR('',#214,1.); +#214 = DIRECTION('',(1.,0.)); +#215 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#216 = ORIENTED_EDGE('',*,*,#217,.F.); +#217 = EDGE_CURVE('',#144,#195,#218,.T.); +#218 = SURFACE_CURVE('',#219,(#223,#230),.PCURVE_S1.); +#219 = LINE('',#220,#221); +#220 = CARTESIAN_POINT('',(20.,0.,6.)); +#221 = VECTOR('',#222,1.); +#222 = DIRECTION('',(-0.,1.,0.)); +#223 = PCURVE('',#152,#224); +#224 = DEFINITIONAL_REPRESENTATION('',(#225),#229); +#225 = LINE('',#226,#227); +#226 = CARTESIAN_POINT('',(6.,0.)); +#227 = VECTOR('',#228,1.); +#228 = DIRECTION('',(0.,-1.)); +#229 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#230 = PCURVE('',#126,#231); +#231 = DEFINITIONAL_REPRESENTATION('',(#232),#236); +#232 = LINE('',#233,#234); +#233 = CARTESIAN_POINT('',(20.,0.)); +#234 = VECTOR('',#235,1.); +#235 = DIRECTION('',(0.,1.)); +#236 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#237 = ADVANCED_FACE('',(#238),#44,.F.); +#238 = FACE_BOUND('',#239,.F.); +#239 = EDGE_LOOP('',(#240,#261,#262,#283)); +#240 = ORIENTED_EDGE('',*,*,#241,.F.); +#241 = EDGE_CURVE('',#22,#142,#242,.T.); +#242 = SURFACE_CURVE('',#243,(#247,#254),.PCURVE_S1.); +#243 = LINE('',#244,#245); +#244 = CARTESIAN_POINT('',(0.,0.,0.)); +#245 = VECTOR('',#246,1.); +#246 = DIRECTION('',(1.,0.,-0.)); +#247 = PCURVE('',#44,#248); +#248 = DEFINITIONAL_REPRESENTATION('',(#249),#253); +#249 = LINE('',#250,#251); +#250 = CARTESIAN_POINT('',(0.,0.)); +#251 = VECTOR('',#252,1.); +#252 = DIRECTION('',(0.,1.)); +#253 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#254 = PCURVE('',#72,#255); +#255 = DEFINITIONAL_REPRESENTATION('',(#256),#260); +#256 = LINE('',#257,#258); +#257 = CARTESIAN_POINT('',(0.,0.)); +#258 = VECTOR('',#259,1.); +#259 = DIRECTION('',(1.,0.)); +#260 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#261 = ORIENTED_EDGE('',*,*,#21,.T.); +#262 = ORIENTED_EDGE('',*,*,#263,.T.); +#263 = EDGE_CURVE('',#24,#144,#264,.T.); +#264 = SURFACE_CURVE('',#265,(#269,#276),.PCURVE_S1.); +#265 = LINE('',#266,#267); +#266 = CARTESIAN_POINT('',(0.,0.,6.)); +#267 = VECTOR('',#268,1.); +#268 = DIRECTION('',(1.,0.,-0.)); +#269 = PCURVE('',#44,#270); +#270 = DEFINITIONAL_REPRESENTATION('',(#271),#275); +#271 = LINE('',#272,#273); +#272 = CARTESIAN_POINT('',(6.,0.)); +#273 = VECTOR('',#274,1.); +#274 = DIRECTION('',(0.,1.)); +#275 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#276 = PCURVE('',#126,#277); +#277 = DEFINITIONAL_REPRESENTATION('',(#278),#282); +#278 = LINE('',#279,#280); +#279 = CARTESIAN_POINT('',(0.,0.)); +#280 = VECTOR('',#281,1.); +#281 = DIRECTION('',(1.,0.)); +#282 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#283 = ORIENTED_EDGE('',*,*,#141,.F.); +#284 = ADVANCED_FACE('',(#285),#100,.T.); +#285 = FACE_BOUND('',#286,.T.); +#286 = EDGE_LOOP('',(#287,#308,#309,#330)); +#287 = ORIENTED_EDGE('',*,*,#288,.F.); +#288 = EDGE_CURVE('',#57,#172,#289,.T.); +#289 = SURFACE_CURVE('',#290,(#294,#301),.PCURVE_S1.); +#290 = LINE('',#291,#292); +#291 = CARTESIAN_POINT('',(0.,12.,0.)); +#292 = VECTOR('',#293,1.); +#293 = DIRECTION('',(1.,0.,-0.)); +#294 = PCURVE('',#100,#295); +#295 = DEFINITIONAL_REPRESENTATION('',(#296),#300); +#296 = LINE('',#297,#298); +#297 = CARTESIAN_POINT('',(0.,0.)); +#298 = VECTOR('',#299,1.); +#299 = DIRECTION('',(0.,1.)); +#300 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#301 = PCURVE('',#72,#302); +#302 = DEFINITIONAL_REPRESENTATION('',(#303),#307); +#303 = LINE('',#304,#305); +#304 = CARTESIAN_POINT('',(0.,12.)); +#305 = VECTOR('',#306,1.); +#306 = DIRECTION('',(1.,0.)); +#307 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#308 = ORIENTED_EDGE('',*,*,#84,.T.); +#309 = ORIENTED_EDGE('',*,*,#310,.T.); +#310 = EDGE_CURVE('',#85,#195,#311,.T.); +#311 = SURFACE_CURVE('',#312,(#316,#323),.PCURVE_S1.); +#312 = LINE('',#313,#314); +#313 = CARTESIAN_POINT('',(0.,12.,6.)); +#314 = VECTOR('',#315,1.); +#315 = DIRECTION('',(1.,0.,-0.)); +#316 = PCURVE('',#100,#317); +#317 = DEFINITIONAL_REPRESENTATION('',(#318),#322); +#318 = LINE('',#319,#320); +#319 = CARTESIAN_POINT('',(6.,0.)); +#320 = VECTOR('',#321,1.); +#321 = DIRECTION('',(0.,1.)); +#322 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#323 = PCURVE('',#126,#324); +#324 = DEFINITIONAL_REPRESENTATION('',(#325),#329); +#325 = LINE('',#326,#327); +#326 = CARTESIAN_POINT('',(0.,12.)); +#327 = VECTOR('',#328,1.); +#328 = DIRECTION('',(1.,0.)); +#329 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#330 = ORIENTED_EDGE('',*,*,#194,.F.); +#331 = ADVANCED_FACE('',(#332),#72,.F.); +#332 = FACE_BOUND('',#333,.F.); +#333 = EDGE_LOOP('',(#334,#335,#336,#337)); +#334 = ORIENTED_EDGE('',*,*,#56,.F.); +#335 = ORIENTED_EDGE('',*,*,#241,.T.); +#336 = ORIENTED_EDGE('',*,*,#171,.T.); +#337 = ORIENTED_EDGE('',*,*,#288,.F.); +#338 = ADVANCED_FACE('',(#339),#126,.T.); +#339 = FACE_BOUND('',#340,.T.); +#340 = EDGE_LOOP('',(#341,#342,#343,#344)); +#341 = ORIENTED_EDGE('',*,*,#112,.F.); +#342 = ORIENTED_EDGE('',*,*,#263,.T.); +#343 = ORIENTED_EDGE('',*,*,#217,.T.); +#344 = ORIENTED_EDGE('',*,*,#310,.F.); +#345 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#349)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#346,#347,#348)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#346 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#347 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#348 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#349 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#346, + 'distance_accuracy_value','confusion accuracy'); +#350 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#351 = SHAPE_DEFINITION_REPRESENTATION(#352,#358); +#352 = PRODUCT_DEFINITION_SHAPE('','',#353); +#353 = PRODUCT_DEFINITION('design','',#354,#357); +#354 = PRODUCT_DEFINITION_FORMATION('','',#355); +#355 = PRODUCT('Gehäuse','Gehäuse','',(#356)); +#356 = PRODUCT_CONTEXT('',#2,'mechanical'); +#357 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#358 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#359),#689); +#359 = MANIFOLD_SOLID_BREP('',#360); +#360 = CLOSED_SHELL('',(#361,#481,#581,#628,#675,#682)); +#361 = ADVANCED_FACE('',(#362),#376,.F.); +#362 = FACE_BOUND('',#363,.F.); +#363 = EDGE_LOOP('',(#364,#399,#427,#455)); +#364 = ORIENTED_EDGE('',*,*,#365,.F.); +#365 = EDGE_CURVE('',#366,#368,#370,.T.); +#366 = VERTEX_POINT('',#367); +#367 = CARTESIAN_POINT('',(25.,0.,0.)); +#368 = VERTEX_POINT('',#369); +#369 = CARTESIAN_POINT('',(25.,0.,6.)); +#370 = SURFACE_CURVE('',#371,(#375,#387),.PCURVE_S1.); +#371 = LINE('',#372,#373); +#372 = CARTESIAN_POINT('',(25.,0.,0.)); +#373 = VECTOR('',#374,1.); +#374 = DIRECTION('',(0.,0.,1.)); +#375 = PCURVE('',#376,#381); +#376 = PLANE('',#377); +#377 = AXIS2_PLACEMENT_3D('',#378,#379,#380); +#378 = CARTESIAN_POINT('',(25.,0.,0.)); +#379 = DIRECTION('',(1.,0.,-0.)); +#380 = DIRECTION('',(0.,0.,1.)); +#381 = DEFINITIONAL_REPRESENTATION('',(#382),#386); +#382 = LINE('',#383,#384); +#383 = CARTESIAN_POINT('',(0.,0.)); +#384 = VECTOR('',#385,1.); +#385 = DIRECTION('',(1.,0.)); +#386 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#387 = PCURVE('',#388,#393); +#388 = PLANE('',#389); +#389 = AXIS2_PLACEMENT_3D('',#390,#391,#392); +#390 = CARTESIAN_POINT('',(25.,0.,0.)); +#391 = DIRECTION('',(-0.,1.,0.)); +#392 = DIRECTION('',(0.,0.,1.)); +#393 = DEFINITIONAL_REPRESENTATION('',(#394),#398); +#394 = LINE('',#395,#396); +#395 = CARTESIAN_POINT('',(0.,0.)); +#396 = VECTOR('',#397,1.); +#397 = DIRECTION('',(1.,0.)); +#398 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#399 = ORIENTED_EDGE('',*,*,#400,.T.); +#400 = EDGE_CURVE('',#366,#401,#403,.T.); +#401 = VERTEX_POINT('',#402); +#402 = CARTESIAN_POINT('',(25.,12.,0.)); +#403 = SURFACE_CURVE('',#404,(#408,#415),.PCURVE_S1.); +#404 = LINE('',#405,#406); +#405 = CARTESIAN_POINT('',(25.,0.,0.)); +#406 = VECTOR('',#407,1.); +#407 = DIRECTION('',(-0.,1.,0.)); +#408 = PCURVE('',#376,#409); +#409 = DEFINITIONAL_REPRESENTATION('',(#410),#414); +#410 = LINE('',#411,#412); +#411 = CARTESIAN_POINT('',(0.,0.)); +#412 = VECTOR('',#413,1.); +#413 = DIRECTION('',(0.,-1.)); +#414 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#415 = PCURVE('',#416,#421); +#416 = PLANE('',#417); +#417 = AXIS2_PLACEMENT_3D('',#418,#419,#420); +#418 = CARTESIAN_POINT('',(25.,0.,0.)); +#419 = DIRECTION('',(0.,0.,1.)); +#420 = DIRECTION('',(1.,0.,-0.)); +#421 = DEFINITIONAL_REPRESENTATION('',(#422),#426); +#422 = LINE('',#423,#424); +#423 = CARTESIAN_POINT('',(0.,0.)); +#424 = VECTOR('',#425,1.); +#425 = DIRECTION('',(0.,1.)); +#426 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#427 = ORIENTED_EDGE('',*,*,#428,.T.); +#428 = EDGE_CURVE('',#401,#429,#431,.T.); +#429 = VERTEX_POINT('',#430); +#430 = CARTESIAN_POINT('',(25.,12.,6.)); +#431 = SURFACE_CURVE('',#432,(#436,#443),.PCURVE_S1.); +#432 = LINE('',#433,#434); +#433 = CARTESIAN_POINT('',(25.,12.,0.)); +#434 = VECTOR('',#435,1.); +#435 = DIRECTION('',(0.,0.,1.)); +#436 = PCURVE('',#376,#437); +#437 = DEFINITIONAL_REPRESENTATION('',(#438),#442); +#438 = LINE('',#439,#440); +#439 = CARTESIAN_POINT('',(0.,-12.)); +#440 = VECTOR('',#441,1.); +#441 = DIRECTION('',(1.,0.)); +#442 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#443 = PCURVE('',#444,#449); +#444 = PLANE('',#445); +#445 = AXIS2_PLACEMENT_3D('',#446,#447,#448); +#446 = CARTESIAN_POINT('',(25.,12.,0.)); +#447 = DIRECTION('',(-0.,1.,0.)); +#448 = DIRECTION('',(0.,0.,1.)); +#449 = DEFINITIONAL_REPRESENTATION('',(#450),#454); +#450 = LINE('',#451,#452); +#451 = CARTESIAN_POINT('',(0.,0.)); +#452 = VECTOR('',#453,1.); +#453 = DIRECTION('',(1.,0.)); +#454 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#455 = ORIENTED_EDGE('',*,*,#456,.F.); +#456 = EDGE_CURVE('',#368,#429,#457,.T.); +#457 = SURFACE_CURVE('',#458,(#462,#469),.PCURVE_S1.); +#458 = LINE('',#459,#460); +#459 = CARTESIAN_POINT('',(25.,0.,6.)); +#460 = VECTOR('',#461,1.); +#461 = DIRECTION('',(-0.,1.,0.)); +#462 = PCURVE('',#376,#463); +#463 = DEFINITIONAL_REPRESENTATION('',(#464),#468); +#464 = LINE('',#465,#466); +#465 = CARTESIAN_POINT('',(6.,0.)); +#466 = VECTOR('',#467,1.); +#467 = DIRECTION('',(0.,-1.)); +#468 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#469 = PCURVE('',#470,#475); +#470 = PLANE('',#471); +#471 = AXIS2_PLACEMENT_3D('',#472,#473,#474); +#472 = CARTESIAN_POINT('',(25.,0.,6.)); +#473 = DIRECTION('',(0.,0.,1.)); +#474 = DIRECTION('',(1.,0.,-0.)); +#475 = DEFINITIONAL_REPRESENTATION('',(#476),#480); +#476 = LINE('',#477,#478); +#477 = CARTESIAN_POINT('',(0.,0.)); +#478 = VECTOR('',#479,1.); +#479 = DIRECTION('',(0.,1.)); +#480 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#481 = ADVANCED_FACE('',(#482),#496,.T.); +#482 = FACE_BOUND('',#483,.T.); +#483 = EDGE_LOOP('',(#484,#514,#537,#560)); +#484 = ORIENTED_EDGE('',*,*,#485,.F.); +#485 = EDGE_CURVE('',#486,#488,#490,.T.); +#486 = VERTEX_POINT('',#487); +#487 = CARTESIAN_POINT('',(41.,0.,0.)); +#488 = VERTEX_POINT('',#489); +#489 = CARTESIAN_POINT('',(41.,0.,6.)); +#490 = SURFACE_CURVE('',#491,(#495,#507),.PCURVE_S1.); +#491 = LINE('',#492,#493); +#492 = CARTESIAN_POINT('',(41.,0.,0.)); +#493 = VECTOR('',#494,1.); +#494 = DIRECTION('',(0.,0.,1.)); +#495 = PCURVE('',#496,#501); +#496 = PLANE('',#497); +#497 = AXIS2_PLACEMENT_3D('',#498,#499,#500); +#498 = CARTESIAN_POINT('',(41.,0.,0.)); +#499 = DIRECTION('',(1.,0.,-0.)); +#500 = DIRECTION('',(0.,0.,1.)); +#501 = DEFINITIONAL_REPRESENTATION('',(#502),#506); +#502 = LINE('',#503,#504); +#503 = CARTESIAN_POINT('',(0.,0.)); +#504 = VECTOR('',#505,1.); +#505 = DIRECTION('',(1.,0.)); +#506 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#507 = PCURVE('',#388,#508); +#508 = DEFINITIONAL_REPRESENTATION('',(#509),#513); +#509 = LINE('',#510,#511); +#510 = CARTESIAN_POINT('',(0.,16.)); +#511 = VECTOR('',#512,1.); +#512 = DIRECTION('',(1.,0.)); +#513 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#514 = ORIENTED_EDGE('',*,*,#515,.T.); +#515 = EDGE_CURVE('',#486,#516,#518,.T.); +#516 = VERTEX_POINT('',#517); +#517 = CARTESIAN_POINT('',(41.,12.,0.)); +#518 = SURFACE_CURVE('',#519,(#523,#530),.PCURVE_S1.); +#519 = LINE('',#520,#521); +#520 = CARTESIAN_POINT('',(41.,0.,0.)); +#521 = VECTOR('',#522,1.); +#522 = DIRECTION('',(-0.,1.,0.)); +#523 = PCURVE('',#496,#524); +#524 = DEFINITIONAL_REPRESENTATION('',(#525),#529); +#525 = LINE('',#526,#527); +#526 = CARTESIAN_POINT('',(0.,0.)); +#527 = VECTOR('',#528,1.); +#528 = DIRECTION('',(0.,-1.)); +#529 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#530 = PCURVE('',#416,#531); +#531 = DEFINITIONAL_REPRESENTATION('',(#532),#536); +#532 = LINE('',#533,#534); +#533 = CARTESIAN_POINT('',(16.,0.)); +#534 = VECTOR('',#535,1.); +#535 = DIRECTION('',(0.,1.)); +#536 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#537 = ORIENTED_EDGE('',*,*,#538,.T.); +#538 = EDGE_CURVE('',#516,#539,#541,.T.); +#539 = VERTEX_POINT('',#540); +#540 = CARTESIAN_POINT('',(41.,12.,6.)); +#541 = SURFACE_CURVE('',#542,(#546,#553),.PCURVE_S1.); +#542 = LINE('',#543,#544); +#543 = CARTESIAN_POINT('',(41.,12.,0.)); +#544 = VECTOR('',#545,1.); +#545 = DIRECTION('',(0.,0.,1.)); +#546 = PCURVE('',#496,#547); +#547 = DEFINITIONAL_REPRESENTATION('',(#548),#552); +#548 = LINE('',#549,#550); +#549 = CARTESIAN_POINT('',(0.,-12.)); +#550 = VECTOR('',#551,1.); +#551 = DIRECTION('',(1.,0.)); +#552 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#553 = PCURVE('',#444,#554); +#554 = DEFINITIONAL_REPRESENTATION('',(#555),#559); +#555 = LINE('',#556,#557); +#556 = CARTESIAN_POINT('',(0.,16.)); +#557 = VECTOR('',#558,1.); +#558 = DIRECTION('',(1.,0.)); +#559 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#560 = ORIENTED_EDGE('',*,*,#561,.F.); +#561 = EDGE_CURVE('',#488,#539,#562,.T.); +#562 = SURFACE_CURVE('',#563,(#567,#574),.PCURVE_S1.); +#563 = LINE('',#564,#565); +#564 = CARTESIAN_POINT('',(41.,0.,6.)); +#565 = VECTOR('',#566,1.); +#566 = DIRECTION('',(-0.,1.,0.)); +#567 = PCURVE('',#496,#568); +#568 = DEFINITIONAL_REPRESENTATION('',(#569),#573); +#569 = LINE('',#570,#571); +#570 = CARTESIAN_POINT('',(6.,0.)); +#571 = VECTOR('',#572,1.); +#572 = DIRECTION('',(0.,-1.)); +#573 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#574 = PCURVE('',#470,#575); +#575 = DEFINITIONAL_REPRESENTATION('',(#576),#580); +#576 = LINE('',#577,#578); +#577 = CARTESIAN_POINT('',(16.,0.)); +#578 = VECTOR('',#579,1.); +#579 = DIRECTION('',(0.,1.)); +#580 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#581 = ADVANCED_FACE('',(#582),#388,.F.); +#582 = FACE_BOUND('',#583,.F.); +#583 = EDGE_LOOP('',(#584,#605,#606,#627)); +#584 = ORIENTED_EDGE('',*,*,#585,.F.); +#585 = EDGE_CURVE('',#366,#486,#586,.T.); +#586 = SURFACE_CURVE('',#587,(#591,#598),.PCURVE_S1.); +#587 = LINE('',#588,#589); +#588 = CARTESIAN_POINT('',(25.,0.,0.)); +#589 = VECTOR('',#590,1.); +#590 = DIRECTION('',(1.,0.,-0.)); +#591 = PCURVE('',#388,#592); +#592 = DEFINITIONAL_REPRESENTATION('',(#593),#597); +#593 = LINE('',#594,#595); +#594 = CARTESIAN_POINT('',(0.,0.)); +#595 = VECTOR('',#596,1.); +#596 = DIRECTION('',(0.,1.)); +#597 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#598 = PCURVE('',#416,#599); +#599 = DEFINITIONAL_REPRESENTATION('',(#600),#604); +#600 = LINE('',#601,#602); +#601 = CARTESIAN_POINT('',(0.,0.)); +#602 = VECTOR('',#603,1.); +#603 = DIRECTION('',(1.,0.)); +#604 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#605 = ORIENTED_EDGE('',*,*,#365,.T.); +#606 = ORIENTED_EDGE('',*,*,#607,.T.); +#607 = EDGE_CURVE('',#368,#488,#608,.T.); +#608 = SURFACE_CURVE('',#609,(#613,#620),.PCURVE_S1.); +#609 = LINE('',#610,#611); +#610 = CARTESIAN_POINT('',(25.,0.,6.)); +#611 = VECTOR('',#612,1.); +#612 = DIRECTION('',(1.,0.,-0.)); +#613 = PCURVE('',#388,#614); +#614 = DEFINITIONAL_REPRESENTATION('',(#615),#619); +#615 = LINE('',#616,#617); +#616 = CARTESIAN_POINT('',(6.,0.)); +#617 = VECTOR('',#618,1.); +#618 = DIRECTION('',(0.,1.)); +#619 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#620 = PCURVE('',#470,#621); +#621 = DEFINITIONAL_REPRESENTATION('',(#622),#626); +#622 = LINE('',#623,#624); +#623 = CARTESIAN_POINT('',(0.,0.)); +#624 = VECTOR('',#625,1.); +#625 = DIRECTION('',(1.,0.)); +#626 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#627 = ORIENTED_EDGE('',*,*,#485,.F.); +#628 = ADVANCED_FACE('',(#629),#444,.T.); +#629 = FACE_BOUND('',#630,.T.); +#630 = EDGE_LOOP('',(#631,#652,#653,#674)); +#631 = ORIENTED_EDGE('',*,*,#632,.F.); +#632 = EDGE_CURVE('',#401,#516,#633,.T.); +#633 = SURFACE_CURVE('',#634,(#638,#645),.PCURVE_S1.); +#634 = LINE('',#635,#636); +#635 = CARTESIAN_POINT('',(25.,12.,0.)); +#636 = VECTOR('',#637,1.); +#637 = DIRECTION('',(1.,0.,-0.)); +#638 = PCURVE('',#444,#639); +#639 = DEFINITIONAL_REPRESENTATION('',(#640),#644); +#640 = LINE('',#641,#642); +#641 = CARTESIAN_POINT('',(0.,0.)); +#642 = VECTOR('',#643,1.); +#643 = DIRECTION('',(0.,1.)); +#644 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#645 = PCURVE('',#416,#646); +#646 = DEFINITIONAL_REPRESENTATION('',(#647),#651); +#647 = LINE('',#648,#649); +#648 = CARTESIAN_POINT('',(0.,12.)); +#649 = VECTOR('',#650,1.); +#650 = DIRECTION('',(1.,0.)); +#651 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#652 = ORIENTED_EDGE('',*,*,#428,.T.); +#653 = ORIENTED_EDGE('',*,*,#654,.T.); +#654 = EDGE_CURVE('',#429,#539,#655,.T.); +#655 = SURFACE_CURVE('',#656,(#660,#667),.PCURVE_S1.); +#656 = LINE('',#657,#658); +#657 = CARTESIAN_POINT('',(25.,12.,6.)); +#658 = VECTOR('',#659,1.); +#659 = DIRECTION('',(1.,0.,-0.)); +#660 = PCURVE('',#444,#661); +#661 = DEFINITIONAL_REPRESENTATION('',(#662),#666); +#662 = LINE('',#663,#664); +#663 = CARTESIAN_POINT('',(6.,0.)); +#664 = VECTOR('',#665,1.); +#665 = DIRECTION('',(0.,1.)); +#666 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#667 = PCURVE('',#470,#668); +#668 = DEFINITIONAL_REPRESENTATION('',(#669),#673); +#669 = LINE('',#670,#671); +#670 = CARTESIAN_POINT('',(0.,12.)); +#671 = VECTOR('',#672,1.); +#672 = DIRECTION('',(1.,0.)); +#673 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#674 = ORIENTED_EDGE('',*,*,#538,.F.); +#675 = ADVANCED_FACE('',(#676),#416,.F.); +#676 = FACE_BOUND('',#677,.F.); +#677 = EDGE_LOOP('',(#678,#679,#680,#681)); +#678 = ORIENTED_EDGE('',*,*,#400,.F.); +#679 = ORIENTED_EDGE('',*,*,#585,.T.); +#680 = ORIENTED_EDGE('',*,*,#515,.T.); +#681 = ORIENTED_EDGE('',*,*,#632,.F.); +#682 = ADVANCED_FACE('',(#683),#470,.T.); +#683 = FACE_BOUND('',#684,.T.); +#684 = EDGE_LOOP('',(#685,#686,#687,#688)); +#685 = ORIENTED_EDGE('',*,*,#456,.F.); +#686 = ORIENTED_EDGE('',*,*,#607,.T.); +#687 = ORIENTED_EDGE('',*,*,#561,.T.); +#688 = ORIENTED_EDGE('',*,*,#654,.F.); +#689 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#693)) GLOBAL_UNIT_ASSIGNED_CONTEXT +((#690,#691,#692)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#690 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#691 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#692 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#693 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#690, + 'distance_accuracy_value','confusion accuracy'); +#694 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#355)); +#695 = SHAPE_DEFINITION_REPRESENTATION(#696,#702); +#696 = PRODUCT_DEFINITION_SHAPE('','',#697); +#697 = PRODUCT_DEFINITION('design','',#698,#701); +#698 = PRODUCT_DEFINITION_FORMATION('','',#699); +#699 = PRODUCT('bracket','bracket','',(#700)); +#700 = PRODUCT_CONTEXT('',#2,'mechanical'); +#701 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#702 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#703),#1033); +#703 = MANIFOLD_SOLID_BREP('',#704); +#704 = CLOSED_SHELL('',(#705,#825,#925,#972,#1019,#1026)); +#705 = ADVANCED_FACE('',(#706),#720,.F.); +#706 = FACE_BOUND('',#707,.F.); +#707 = EDGE_LOOP('',(#708,#743,#771,#799)); +#708 = ORIENTED_EDGE('',*,*,#709,.F.); +#709 = EDGE_CURVE('',#710,#712,#714,.T.); +#710 = VERTEX_POINT('',#711); +#711 = CARTESIAN_POINT('',(45.,0.,0.)); +#712 = VERTEX_POINT('',#713); +#713 = CARTESIAN_POINT('',(45.,0.,6.)); +#714 = SURFACE_CURVE('',#715,(#719,#731),.PCURVE_S1.); +#715 = LINE('',#716,#717); +#716 = CARTESIAN_POINT('',(45.,0.,0.)); +#717 = VECTOR('',#718,1.); +#718 = DIRECTION('',(0.,0.,1.)); +#719 = PCURVE('',#720,#725); +#720 = PLANE('',#721); +#721 = AXIS2_PLACEMENT_3D('',#722,#723,#724); +#722 = CARTESIAN_POINT('',(45.,0.,0.)); +#723 = DIRECTION('',(1.,0.,-0.)); +#724 = DIRECTION('',(0.,0.,1.)); +#725 = DEFINITIONAL_REPRESENTATION('',(#726),#730); +#726 = LINE('',#727,#728); +#727 = CARTESIAN_POINT('',(0.,0.)); +#728 = VECTOR('',#729,1.); +#729 = DIRECTION('',(1.,0.)); +#730 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#731 = PCURVE('',#732,#737); +#732 = PLANE('',#733); +#733 = AXIS2_PLACEMENT_3D('',#734,#735,#736); +#734 = CARTESIAN_POINT('',(45.,0.,0.)); +#735 = DIRECTION('',(-0.,1.,0.)); +#736 = DIRECTION('',(0.,0.,1.)); +#737 = DEFINITIONAL_REPRESENTATION('',(#738),#742); +#738 = LINE('',#739,#740); +#739 = CARTESIAN_POINT('',(0.,0.)); +#740 = VECTOR('',#741,1.); +#741 = DIRECTION('',(1.,0.)); +#742 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#743 = ORIENTED_EDGE('',*,*,#744,.T.); +#744 = EDGE_CURVE('',#710,#745,#747,.T.); +#745 = VERTEX_POINT('',#746); +#746 = CARTESIAN_POINT('',(45.,12.,0.)); +#747 = SURFACE_CURVE('',#748,(#752,#759),.PCURVE_S1.); +#748 = LINE('',#749,#750); +#749 = CARTESIAN_POINT('',(45.,0.,0.)); +#750 = VECTOR('',#751,1.); +#751 = DIRECTION('',(-0.,1.,0.)); +#752 = PCURVE('',#720,#753); +#753 = DEFINITIONAL_REPRESENTATION('',(#754),#758); +#754 = LINE('',#755,#756); +#755 = CARTESIAN_POINT('',(0.,0.)); +#756 = VECTOR('',#757,1.); +#757 = DIRECTION('',(0.,-1.)); +#758 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#759 = PCURVE('',#760,#765); +#760 = PLANE('',#761); +#761 = AXIS2_PLACEMENT_3D('',#762,#763,#764); +#762 = CARTESIAN_POINT('',(45.,0.,0.)); +#763 = DIRECTION('',(0.,0.,1.)); +#764 = DIRECTION('',(1.,0.,-0.)); +#765 = DEFINITIONAL_REPRESENTATION('',(#766),#770); +#766 = LINE('',#767,#768); +#767 = CARTESIAN_POINT('',(0.,0.)); +#768 = VECTOR('',#769,1.); +#769 = DIRECTION('',(0.,1.)); +#770 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#771 = ORIENTED_EDGE('',*,*,#772,.T.); +#772 = EDGE_CURVE('',#745,#773,#775,.T.); +#773 = VERTEX_POINT('',#774); +#774 = CARTESIAN_POINT('',(45.,12.,6.)); +#775 = SURFACE_CURVE('',#776,(#780,#787),.PCURVE_S1.); +#776 = LINE('',#777,#778); +#777 = CARTESIAN_POINT('',(45.,12.,0.)); +#778 = VECTOR('',#779,1.); +#779 = DIRECTION('',(0.,0.,1.)); +#780 = PCURVE('',#720,#781); +#781 = DEFINITIONAL_REPRESENTATION('',(#782),#786); +#782 = LINE('',#783,#784); +#783 = CARTESIAN_POINT('',(0.,-12.)); +#784 = VECTOR('',#785,1.); +#785 = DIRECTION('',(1.,0.)); +#786 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#787 = PCURVE('',#788,#793); +#788 = PLANE('',#789); +#789 = AXIS2_PLACEMENT_3D('',#790,#791,#792); +#790 = CARTESIAN_POINT('',(45.,12.,0.)); +#791 = DIRECTION('',(-0.,1.,0.)); +#792 = DIRECTION('',(0.,0.,1.)); +#793 = DEFINITIONAL_REPRESENTATION('',(#794),#798); +#794 = LINE('',#795,#796); +#795 = CARTESIAN_POINT('',(0.,0.)); +#796 = VECTOR('',#797,1.); +#797 = DIRECTION('',(1.,0.)); +#798 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#799 = ORIENTED_EDGE('',*,*,#800,.F.); +#800 = EDGE_CURVE('',#712,#773,#801,.T.); +#801 = SURFACE_CURVE('',#802,(#806,#813),.PCURVE_S1.); +#802 = LINE('',#803,#804); +#803 = CARTESIAN_POINT('',(45.,0.,6.)); +#804 = VECTOR('',#805,1.); +#805 = DIRECTION('',(-0.,1.,0.)); +#806 = PCURVE('',#720,#807); +#807 = DEFINITIONAL_REPRESENTATION('',(#808),#812); +#808 = LINE('',#809,#810); +#809 = CARTESIAN_POINT('',(6.,0.)); +#810 = VECTOR('',#811,1.); +#811 = DIRECTION('',(0.,-1.)); +#812 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#813 = PCURVE('',#814,#819); +#814 = PLANE('',#815); +#815 = AXIS2_PLACEMENT_3D('',#816,#817,#818); +#816 = CARTESIAN_POINT('',(45.,0.,6.)); +#817 = DIRECTION('',(0.,0.,1.)); +#818 = DIRECTION('',(1.,0.,-0.)); +#819 = DEFINITIONAL_REPRESENTATION('',(#820),#824); +#820 = LINE('',#821,#822); +#821 = CARTESIAN_POINT('',(0.,0.)); +#822 = VECTOR('',#823,1.); +#823 = DIRECTION('',(0.,1.)); +#824 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#825 = ADVANCED_FACE('',(#826),#840,.T.); +#826 = FACE_BOUND('',#827,.T.); +#827 = EDGE_LOOP('',(#828,#858,#881,#904)); +#828 = ORIENTED_EDGE('',*,*,#829,.F.); +#829 = EDGE_CURVE('',#830,#832,#834,.T.); +#830 = VERTEX_POINT('',#831); +#831 = CARTESIAN_POINT('',(57.,0.,0.)); +#832 = VERTEX_POINT('',#833); +#833 = CARTESIAN_POINT('',(57.,0.,6.)); +#834 = SURFACE_CURVE('',#835,(#839,#851),.PCURVE_S1.); +#835 = LINE('',#836,#837); +#836 = CARTESIAN_POINT('',(57.,0.,0.)); +#837 = VECTOR('',#838,1.); +#838 = DIRECTION('',(0.,0.,1.)); +#839 = PCURVE('',#840,#845); +#840 = PLANE('',#841); +#841 = AXIS2_PLACEMENT_3D('',#842,#843,#844); +#842 = CARTESIAN_POINT('',(57.,0.,0.)); +#843 = DIRECTION('',(1.,0.,-0.)); +#844 = DIRECTION('',(0.,0.,1.)); +#845 = DEFINITIONAL_REPRESENTATION('',(#846),#850); +#846 = LINE('',#847,#848); +#847 = CARTESIAN_POINT('',(0.,0.)); +#848 = VECTOR('',#849,1.); +#849 = DIRECTION('',(1.,0.)); +#850 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#851 = PCURVE('',#732,#852); +#852 = DEFINITIONAL_REPRESENTATION('',(#853),#857); +#853 = LINE('',#854,#855); +#854 = CARTESIAN_POINT('',(0.,12.)); +#855 = VECTOR('',#856,1.); +#856 = DIRECTION('',(1.,0.)); +#857 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#858 = ORIENTED_EDGE('',*,*,#859,.T.); +#859 = EDGE_CURVE('',#830,#860,#862,.T.); +#860 = VERTEX_POINT('',#861); +#861 = CARTESIAN_POINT('',(57.,12.,0.)); +#862 = SURFACE_CURVE('',#863,(#867,#874),.PCURVE_S1.); +#863 = LINE('',#864,#865); +#864 = CARTESIAN_POINT('',(57.,0.,0.)); +#865 = VECTOR('',#866,1.); +#866 = DIRECTION('',(-0.,1.,0.)); +#867 = PCURVE('',#840,#868); +#868 = DEFINITIONAL_REPRESENTATION('',(#869),#873); +#869 = LINE('',#870,#871); +#870 = CARTESIAN_POINT('',(0.,0.)); +#871 = VECTOR('',#872,1.); +#872 = DIRECTION('',(0.,-1.)); +#873 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#874 = PCURVE('',#760,#875); +#875 = DEFINITIONAL_REPRESENTATION('',(#876),#880); +#876 = LINE('',#877,#878); +#877 = CARTESIAN_POINT('',(12.,0.)); +#878 = VECTOR('',#879,1.); +#879 = DIRECTION('',(0.,1.)); +#880 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#881 = ORIENTED_EDGE('',*,*,#882,.T.); +#882 = EDGE_CURVE('',#860,#883,#885,.T.); +#883 = VERTEX_POINT('',#884); +#884 = CARTESIAN_POINT('',(57.,12.,6.)); +#885 = SURFACE_CURVE('',#886,(#890,#897),.PCURVE_S1.); +#886 = LINE('',#887,#888); +#887 = CARTESIAN_POINT('',(57.,12.,0.)); +#888 = VECTOR('',#889,1.); +#889 = DIRECTION('',(0.,0.,1.)); +#890 = PCURVE('',#840,#891); +#891 = DEFINITIONAL_REPRESENTATION('',(#892),#896); +#892 = LINE('',#893,#894); +#893 = CARTESIAN_POINT('',(0.,-12.)); +#894 = VECTOR('',#895,1.); +#895 = DIRECTION('',(1.,0.)); +#896 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#897 = PCURVE('',#788,#898); +#898 = DEFINITIONAL_REPRESENTATION('',(#899),#903); +#899 = LINE('',#900,#901); +#900 = CARTESIAN_POINT('',(0.,12.)); +#901 = VECTOR('',#902,1.); +#902 = DIRECTION('',(1.,0.)); +#903 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#904 = ORIENTED_EDGE('',*,*,#905,.F.); +#905 = EDGE_CURVE('',#832,#883,#906,.T.); +#906 = SURFACE_CURVE('',#907,(#911,#918),.PCURVE_S1.); +#907 = LINE('',#908,#909); +#908 = CARTESIAN_POINT('',(57.,0.,6.)); +#909 = VECTOR('',#910,1.); +#910 = DIRECTION('',(-0.,1.,0.)); +#911 = PCURVE('',#840,#912); +#912 = DEFINITIONAL_REPRESENTATION('',(#913),#917); +#913 = LINE('',#914,#915); +#914 = CARTESIAN_POINT('',(6.,0.)); +#915 = VECTOR('',#916,1.); +#916 = DIRECTION('',(0.,-1.)); +#917 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#918 = PCURVE('',#814,#919); +#919 = DEFINITIONAL_REPRESENTATION('',(#920),#924); +#920 = LINE('',#921,#922); +#921 = CARTESIAN_POINT('',(12.,0.)); +#922 = VECTOR('',#923,1.); +#923 = DIRECTION('',(0.,1.)); +#924 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#925 = ADVANCED_FACE('',(#926),#732,.F.); +#926 = FACE_BOUND('',#927,.F.); +#927 = EDGE_LOOP('',(#928,#949,#950,#971)); +#928 = ORIENTED_EDGE('',*,*,#929,.F.); +#929 = EDGE_CURVE('',#710,#830,#930,.T.); +#930 = SURFACE_CURVE('',#931,(#935,#942),.PCURVE_S1.); +#931 = LINE('',#932,#933); +#932 = CARTESIAN_POINT('',(45.,0.,0.)); +#933 = VECTOR('',#934,1.); +#934 = DIRECTION('',(1.,0.,-0.)); +#935 = PCURVE('',#732,#936); +#936 = DEFINITIONAL_REPRESENTATION('',(#937),#941); +#937 = LINE('',#938,#939); +#938 = CARTESIAN_POINT('',(0.,0.)); +#939 = VECTOR('',#940,1.); +#940 = DIRECTION('',(0.,1.)); +#941 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#942 = PCURVE('',#760,#943); +#943 = DEFINITIONAL_REPRESENTATION('',(#944),#948); +#944 = LINE('',#945,#946); +#945 = CARTESIAN_POINT('',(0.,0.)); +#946 = VECTOR('',#947,1.); +#947 = DIRECTION('',(1.,0.)); +#948 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#949 = ORIENTED_EDGE('',*,*,#709,.T.); +#950 = ORIENTED_EDGE('',*,*,#951,.T.); +#951 = EDGE_CURVE('',#712,#832,#952,.T.); +#952 = SURFACE_CURVE('',#953,(#957,#964),.PCURVE_S1.); +#953 = LINE('',#954,#955); +#954 = CARTESIAN_POINT('',(45.,0.,6.)); +#955 = VECTOR('',#956,1.); +#956 = DIRECTION('',(1.,0.,-0.)); +#957 = PCURVE('',#732,#958); +#958 = DEFINITIONAL_REPRESENTATION('',(#959),#963); +#959 = LINE('',#960,#961); +#960 = CARTESIAN_POINT('',(6.,0.)); +#961 = VECTOR('',#962,1.); +#962 = DIRECTION('',(0.,1.)); +#963 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#964 = PCURVE('',#814,#965); +#965 = DEFINITIONAL_REPRESENTATION('',(#966),#970); +#966 = LINE('',#967,#968); +#967 = CARTESIAN_POINT('',(0.,0.)); +#968 = VECTOR('',#969,1.); +#969 = DIRECTION('',(1.,0.)); +#970 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#971 = ORIENTED_EDGE('',*,*,#829,.F.); +#972 = ADVANCED_FACE('',(#973),#788,.T.); +#973 = FACE_BOUND('',#974,.T.); +#974 = EDGE_LOOP('',(#975,#996,#997,#1018)); +#975 = ORIENTED_EDGE('',*,*,#976,.F.); +#976 = EDGE_CURVE('',#745,#860,#977,.T.); +#977 = SURFACE_CURVE('',#978,(#982,#989),.PCURVE_S1.); +#978 = LINE('',#979,#980); +#979 = CARTESIAN_POINT('',(45.,12.,0.)); +#980 = VECTOR('',#981,1.); +#981 = DIRECTION('',(1.,0.,-0.)); +#982 = PCURVE('',#788,#983); +#983 = DEFINITIONAL_REPRESENTATION('',(#984),#988); +#984 = LINE('',#985,#986); +#985 = CARTESIAN_POINT('',(0.,0.)); +#986 = VECTOR('',#987,1.); +#987 = DIRECTION('',(0.,1.)); +#988 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#989 = PCURVE('',#760,#990); +#990 = DEFINITIONAL_REPRESENTATION('',(#991),#995); +#991 = LINE('',#992,#993); +#992 = CARTESIAN_POINT('',(0.,12.)); +#993 = VECTOR('',#994,1.); +#994 = DIRECTION('',(1.,0.)); +#995 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#996 = ORIENTED_EDGE('',*,*,#772,.T.); +#997 = ORIENTED_EDGE('',*,*,#998,.T.); +#998 = EDGE_CURVE('',#773,#883,#999,.T.); +#999 = SURFACE_CURVE('',#1000,(#1004,#1011),.PCURVE_S1.); +#1000 = LINE('',#1001,#1002); +#1001 = CARTESIAN_POINT('',(45.,12.,6.)); +#1002 = VECTOR('',#1003,1.); +#1003 = DIRECTION('',(1.,0.,-0.)); +#1004 = PCURVE('',#788,#1005); +#1005 = DEFINITIONAL_REPRESENTATION('',(#1006),#1010); +#1006 = LINE('',#1007,#1008); +#1007 = CARTESIAN_POINT('',(6.,0.)); +#1008 = VECTOR('',#1009,1.); +#1009 = DIRECTION('',(0.,1.)); +#1010 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1011 = PCURVE('',#814,#1012); +#1012 = DEFINITIONAL_REPRESENTATION('',(#1013),#1017); +#1013 = LINE('',#1014,#1015); +#1014 = CARTESIAN_POINT('',(0.,12.)); +#1015 = VECTOR('',#1016,1.); +#1016 = DIRECTION('',(1.,0.)); +#1017 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) +PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE','' + ) ); +#1018 = ORIENTED_EDGE('',*,*,#882,.F.); +#1019 = ADVANCED_FACE('',(#1020),#760,.F.); +#1020 = FACE_BOUND('',#1021,.F.); +#1021 = EDGE_LOOP('',(#1022,#1023,#1024,#1025)); +#1022 = ORIENTED_EDGE('',*,*,#744,.F.); +#1023 = ORIENTED_EDGE('',*,*,#929,.T.); +#1024 = ORIENTED_EDGE('',*,*,#859,.T.); +#1025 = ORIENTED_EDGE('',*,*,#976,.F.); +#1026 = ADVANCED_FACE('',(#1027),#814,.T.); +#1027 = FACE_BOUND('',#1028,.T.); +#1028 = EDGE_LOOP('',(#1029,#1030,#1031,#1032)); +#1029 = ORIENTED_EDGE('',*,*,#800,.F.); +#1030 = ORIENTED_EDGE('',*,*,#951,.T.); +#1031 = ORIENTED_EDGE('',*,*,#905,.T.); +#1032 = ORIENTED_EDGE('',*,*,#998,.F.); +#1033 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1037)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1034,#1035,#1036)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1034 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1035 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1036 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1037 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1034, + 'distance_accuracy_value','confusion accuracy'); +#1038 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#699)); +ENDSEC; +END-ISO-10303-21; diff --git a/tests/fff_print/CMakeLists.txt b/tests/fff_print/CMakeLists.txt index fc46bb8fdc..60e1721817 100644 --- a/tests/fff_print/CMakeLists.txt +++ b/tests/fff_print/CMakeLists.txt @@ -19,7 +19,9 @@ add_executable(${_TEST_NAME}_tests test_skirt_brim.cpp test_slicing_pipeline_hook.cpp test_support_material.cpp + test_tree_support.cpp test_trianglemesh.cpp + test_wipe.cpp test_wipe_tower.cpp ) target_link_libraries(${_TEST_NAME}_tests test_common libslic3r Catch2::Catch2WithMain) diff --git a/tests/fff_print/test_cooling.cpp b/tests/fff_print/test_cooling.cpp index ec29b5fdc9..a21ff236ce 100644 --- a/tests/fff_print/test_cooling.cpp +++ b/tests/fff_print/test_cooling.cpp @@ -2,7 +2,10 @@ #include "test_helpers.hpp" +#include +#include #include +#include using namespace Slic3r; using namespace Slic3r::Test; @@ -25,3 +28,68 @@ TEST_CASE("Cooling consumes its internal speed markers", "[Cooling]") const std::string gcode = slice({ cube(20) }, { { "layer_height", 0.2 } }); CHECK(gcode.find(";_EXTRUDE_SET_SPEED") == std::string::npos); } + +TEST_CASE("Overhang fan transitions do not depend on overhang speed", "[Cooling][Regression]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "bridge_speed", 2.0 }, + { "enable_arc_fitting", false }, + { "enable_overhang_bridge_fan", true }, + { "enable_overhang_speed", false }, + { "initial_layer_print_height", 0.3 }, + { "inner_wall_speed", 30.0 }, + { "layer_height", 0.3 }, + { "outer_wall_speed", 30.0 }, + { "overhang_1_4_speed", "30" }, + { "overhang_2_4_speed", "29" }, + { "overhang_3_4_speed", "6" }, + { "overhang_4_4_speed", "3" }, + { "slow_down_for_layer_cooling", false }, + { "slowdown_for_curled_perimeters", false }, + }); + config.set_key_value("fan_max_speed", new ConfigOptionFloats{20.0}); + config.set_key_value("fan_min_speed", new ConfigOptionFloats{20.0}); + config.set_key_value("overhang_fan_speed", new ConfigOptionInts{100}); + config.set_key_value("overhang_fan_threshold", new ConfigOptionEnumsGeneric{Overhang_threshold_2_4}); + config.set_key_value("layer_change_gcode", new ConfigOptionString{";TEST_LAYER_Z=[layer_z]"}); + + const auto fan_commands = [](const std::string &gcode) { + std::vector> commands; + std::istringstream input(gcode); + std::string layer; + std::string line; + while (std::getline(input, line)) { + if (line.rfind(";TEST_LAYER_Z=", 0) == 0) + layer = line; + else if (!layer.empty() && (line.rfind("M106", 0) == 0 || line.rfind("M107", 0) == 0)) + commands.emplace_back(layer, line); + } + return commands; + }; + const auto feedrates = [](const std::string &gcode) { + std::vector values; + std::istringstream input(gcode); + std::string word; + while (input >> word) + if (!word.empty() && word.front() == 'F') + values.push_back(word); + return values; + }; + + constexpr double sphere_radius = 50.0; // 100 mm diameter. + const std::string without_speed_gcode = slice({make_sphere(sphere_radius, PI / 24.0)}, config); + config.set_deserialize_strict({{"enable_overhang_speed", true}}); + const std::string with_speed_gcode = slice({make_sphere(sphere_radius, PI / 24.0)}, config); + + const auto without_speed_fan = fan_commands(without_speed_gcode); + const auto with_speed_fan = fan_commands(with_speed_gcode); + const auto without_speed_feedrates = feedrates(without_speed_gcode); + const auto with_speed_feedrates = feedrates(with_speed_gcode); + + REQUIRE_FALSE(without_speed_fan.empty()); + REQUIRE(std::any_of(without_speed_fan.begin(), without_speed_fan.end(), + [](const auto &command) { return command.second.find("S255") != std::string::npos; })); + REQUIRE(with_speed_feedrates != without_speed_feedrates); + CHECK(with_speed_fan == without_speed_fan); +} diff --git a/tests/fff_print/test_fill.cpp b/tests/fff_print/test_fill.cpp index d26639c659..a3696c47ad 100644 --- a/tests/fff_print/test_fill.cpp +++ b/tests/fff_print/test_fill.cpp @@ -9,11 +9,13 @@ #include #include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/AABBTreeLines.hpp" #include "libslic3r/Fill/Fill.hpp" #include "libslic3r/Flow.hpp" #include "libslic3r/Geometry.hpp" #include "libslic3r/Layer.hpp" #include "libslic3r/Print.hpp" +#include "libslic3r/PrintConfig.hpp" #include "libslic3r/SVG.hpp" #include "libslic3r/libslic3r.h" @@ -675,6 +677,73 @@ TEST_CASE("Ironing follows the solid infill rotation template", "[Fill]") REQUIRE(compared > int(ironing.size()) / 2); } + +namespace { + +PrintRegionConfig ironing_config(IroningType type, + int top_surface_filament_id = 1, + int top_shell_layers = 3, + int bottom_shell_layers = 1) +{ + PrintRegionConfig cfg; + cfg.ironing_type.value = type; + cfg.top_surface_filament_id.value = top_surface_filament_id; + cfg.top_shell_layers.value = top_shell_layers; + cfg.bottom_shell_layers.value = bottom_shell_layers; + cfg.outer_wall_filament_id.value = 1; + cfg.wall_loops.value = 2; + return cfg; +} + +} // namespace + +TEST_CASE("Ironing an all-solid region uses the top surface filament on every layer", "[Fill]") +{ + const PrintRegionConfig cfg = ironing_config(IroningType::AllSolid, /*top_surface_filament_id=*/2); + const bool is_topmost_layer = GENERATE(false, true); + CAPTURE(is_topmost_layer); + REQUIRE(Layer::choose_ironing_extruder(cfg, /*spiral_mode=*/false, is_topmost_layer) == 2); +} + +TEST_CASE("Ironing top surfaces uses the top surface filament when the region has top shells", "[Fill]") +{ + const PrintRegionConfig cfg = ironing_config(IroningType::TopSurfaces, + /*top_surface_filament_id=*/3, + /*top_shell_layers=*/2); + REQUIRE(Layer::choose_ironing_extruder(cfg, /*spiral_mode=*/false, /*is_topmost_layer=*/false) == 3); +} + +TEST_CASE("Ironing top surfaces without top shells needs spiral mode and more than one bottom shell", "[Fill]") +{ + const PrintRegionConfig one_bottom_shell = ironing_config(IroningType::TopSurfaces, + /*top_surface_filament_id=*/1, + /*top_shell_layers=*/0, + /*bottom_shell_layers=*/1); + const PrintRegionConfig two_bottom_shells = ironing_config(IroningType::TopSurfaces, + /*top_surface_filament_id=*/1, + /*top_shell_layers=*/0, + /*bottom_shell_layers=*/2); + + REQUIRE(Layer::choose_ironing_extruder(two_bottom_shells, /*spiral_mode=*/true, /*is_topmost_layer=*/false) == 1); + REQUIRE(Layer::choose_ironing_extruder(one_bottom_shell, /*spiral_mode=*/true, /*is_topmost_layer=*/false) == -1); + REQUIRE(Layer::choose_ironing_extruder(two_bottom_shells, /*spiral_mode=*/false, /*is_topmost_layer=*/false) == -1); +} + +TEST_CASE("Ironing the topmost surface only applies to the topmost layer", "[Fill]") +{ + const PrintRegionConfig cfg = ironing_config(IroningType::TopmostOnly, /*top_surface_filament_id=*/4); + REQUIRE(Layer::choose_ironing_extruder(cfg, /*spiral_mode=*/false, /*is_topmost_layer=*/true) == 4); + REQUIRE(Layer::choose_ironing_extruder(cfg, /*spiral_mode=*/false, /*is_topmost_layer=*/false) == -1); +} + +TEST_CASE("A region with ironing turned off is never ironed", "[Fill]") +{ + const PrintRegionConfig cfg = ironing_config(IroningType::NoIroning); + const bool spiral_mode = GENERATE(false, true); + CAPTURE(spiral_mode); + REQUIRE(Layer::choose_ironing_extruder(cfg, spiral_mode, /*is_topmost_layer=*/true) == -1); +} + TEST_CASE("Solid infill direction offsets every layer when no template is set", "[Fill]") { auto angles_for = [](int direction) { @@ -699,6 +768,213 @@ TEST_CASE("Solid infill direction offsets every layer when no template is set", } } +// Orca: the spiral inset pattern chains the concentric loops into a single continuous path per +// island, so it has to cope with the degenerate loops offsetting leaves behind and it must not join +// loops that only look adjacent. +namespace { + +Slic3r::Polylines spiral_inset_fill(const Slic3r::ExPolygon &surface_shape, double spacing) +{ + std::unique_ptr filler(Slic3r::Fill::new_from_type("spiralinset")); + filler->spacing = spacing; + // Cancel the half-spacing contraction fill_surface() applies, so the filler sees the shape as given. + filler->overlap = 0.5 * spacing; + + Slic3r::FillParams fill_params; + fill_params.density = 1.f; + fill_params.dont_adjust = true; + + Slic3r::Surface surface(Slic3r::stBottom, surface_shape); + return filler->fill_surface(&surface, fill_params); +} + +Slic3r::ExPolygon rectangle(double x, double y, double w, double h) +{ + return Slic3r::ExPolygon({Slic3r::Point::new_scale(x, y), Slic3r::Point::new_scale(x + w, y), + Slic3r::Point::new_scale(x + w, y + h), Slic3r::Point::new_scale(x, y + h)}); +} + +// Area of the surface the toolpaths fail to cover, and the largest single patch of it, in mm2. Each +// bead is measured at its own width so the variable width walls are not sold short. +std::pair uncovered_area(const Slic3r::ExPolygon &surface_shape, const Slic3r::Polygons &covered) +{ + double total = 0, biggest = 0; + for (const Slic3r::ExPolygon &gap : Slic3r::diff_ex(Slic3r::ExPolygons{surface_shape}, Slic3r::union_(covered))) { + const double area = unscale(unscale(gap.area())); + total += area; + biggest = std::max(biggest, area); + } + return {total, biggest}; +} + +Slic3r::Polygons beads_of(const Slic3r::Polylines &paths, double width) +{ + return Slic3r::offset(paths, float(scale_(0.5 * width))); +} + +Slic3r::Polygons beads_of(const Slic3r::ThickPolylines &paths) +{ + Slic3r::Polygons covered; + for (const Slic3r::ThickPolyline &path : paths) + for (size_t i = 0; i + 1 < path.points.size(); ++i) { + Slic3r::Polyline segment; + segment.points = {path.points[i], path.points[i + 1]}; + Slic3r::append(covered, Slic3r::offset(Slic3r::Polylines{segment}, + float(0.5 * std::max(path.width[2 * i], path.width[2 * i + 1])))); + } + return covered; +} + +} // namespace + +TEST_CASE("Spiral inset fill drops loops shorter than the end clipping", "[Fill][Regression]") +{ + // A sliver whose whole perimeter is shorter than the length clipped off the end of a loop, so the + // clipping consumes the path entirely. Such a loop carries no extrusion and must be dropped + // rather than kept as an empty path and read back from. + const double spacing = 0.45; + + Slic3r::Polylines paths; + REQUIRE_NOTHROW(paths = spiral_inset_fill(rectangle(0, 0, 0.05, 0.05), spacing)); + for (const Slic3r::Polyline &path : paths) + CHECK(path.size() >= 2); + + // The same surface at a size the clipping cannot swallow still gets filled. + REQUIRE_NOTHROW(paths = spiral_inset_fill(rectangle(0, 0, 5, 5), spacing)); + REQUIRE(paths.size() == 1); + CHECK(paths.front().size() >= 2); +} + +TEST_CASE("Spiral inset fill keeps separate islands on separate paths", "[Fill]") +{ + // Two lobes joined by a neck narrower than the loop spacing: the inward offsets break the surface + // into two islands, which cannot share one spiral, and no path may leave the surface. + const double spacing = 0.45; + Slic3r::ExPolygon dumbbell = rectangle(0, 0, 6, 6); + dumbbell = Slic3r::union_ex(Slic3r::ExPolygons{dumbbell, rectangle(6, 2.9, 4, 0.2), rectangle(10, 0, 6, 6)}).front(); + + const Slic3r::Polylines paths = spiral_inset_fill(dumbbell, spacing); + REQUIRE(paths.size() >= 2); + + // Inflate by a hair so that loops sitting exactly on the outline still count as contained. + const Slic3r::ExPolygons within = Slic3r::offset_ex(dumbbell, float(SCALED_EPSILON)); + REQUIRE(within.size() == 1); + for (const Slic3r::Polyline &path : paths) { + CHECK(path.size() >= 2); + CHECK(within.front().contains(path)); + } +} + + +TEST_CASE("Spiral inset fill stays connected across sharp corners", "[Fill][Regression]") +{ + // At a corner of half-angle a, the next ring inward retreats along the bisector by spacing/sin(a), + // which leaves it several spacings from the end of the ring it continues. Judging the break by + // distance broke the spiral into loose rings at every spike; nesting is what decides the island. + const double spacing = 0.45; + const Slic3r::ExPolygon spike({Slic3r::Point::new_scale(0, 0), Slic3r::Point::new_scale(30, 0), + Slic3r::Point::new_scale(15, 4)}); + + const Slic3r::Polylines paths = spiral_inset_fill(spike, spacing); + CHECK(paths.size() == 1); + + const Slic3r::ExPolygons within = Slic3r::offset_ex(spike, float(SCALED_EPSILON)); + REQUIRE(within.size() == 1); + for (const Slic3r::Polyline &path : paths) + CHECK(within.front().contains(path)); +} + +TEST_CASE("Spiral inset fill starts on a convex corner", "[Fill][Regression]") +{ + // The only right angle on this outline is the reflex one: the two edges meeting at the origin + // span 90 degrees exactly as a square corner would, but the material lies outside them. The next + // ring in steps away from a reflex corner along the bisector instead of hugging it, so starting + // the spiral there sent it across a long diagonal on every single ring. + const double spacing = 0.45; + const Slic3r::ExPolygon notched({Slic3r::Point::new_scale(0, 0), Slic3r::Point::new_scale(0, 10), + Slic3r::Point::new_scale(-16, 18), Slic3r::Point::new_scale(-16, -2), + Slic3r::Point::new_scale(-8, -16), Slic3r::Point::new_scale(18, -16), + Slic3r::Point::new_scale(10, 0)}); + + const Slic3r::Polylines paths = spiral_inset_fill(notched, spacing); + REQUIRE(paths.size() >= 1); + + // Every edge of the outline is at least 45 degrees off the bisector of that reflex corner, and + // so is every ring offset from it. A long segment running along the bisector can therefore only + // be the spiral striking out across the rings to reach the next one. + for (const Slic3r::Polyline &path : paths) + for (const Slic3r::Line &segment : path.lines()) { + const Vec2d v = (segment.b - segment.a).cast(); + const double direction = std::fmod(std::atan2(v.y(), v.x()) * 180.0 / M_PI + 180.0, 180.0); + if (std::abs(direction - 45.0) > 25.0) + continue; + CAPTURE(direction, unscale(segment.length())); + CHECK(segment.length() <= scale_(1.5 * spacing)); + } +} + +TEST_CASE("Spiral inset fill closes the gaps with variable width walls", "[Fill]") +{ + // Fixed width loops cannot fill a region that is not a whole number of lines across and leave the + // remainder open, which on a ring shows up as a wedge several lines wide. Plain concentric avoids + // that by building solid surfaces out of Arachne's variable width walls, and so must this pattern. + const double spacing = 0.45; + Slic3r::ExPolygon ring = rectangle(0, 0, 24, 24); + Slic3r::Polygon hole; + for (int i = 0; i < 64; ++i) { + const double angle = -2.0 * PI * i / 64.0; // clockwise, so it reads as a hole + hole.points.emplace_back(Slic3r::Point::new_scale(12 + 7.3 * std::cos(angle), 12 + 7.3 * std::sin(angle))); + } + ring.holes.emplace_back(hole); + + Slic3r::PrintConfig print_config; + Slic3r::PrintObjectConfig object_config; + auto make_filler = [&]() { + std::unique_ptr filler(Slic3r::Fill::new_from_type("spiralinset")); + filler->spacing = spacing; + filler->overlap = 0.5 * spacing; // cancel the contraction, so both see the same surface + filler->print_config = &print_config; + filler->print_object_config = &object_config; + return filler; + }; + + Slic3r::FillParams params; + params.density = 1.f; + params.dont_adjust = false; + params.layer_height = 0.2; + + const Slic3r::Surface surface(Slic3r::stTop, ring); + + std::unique_ptr fixed = make_filler(); + const Slic3r::Polylines fixed_width = fixed->fill_surface(&surface, params); + REQUIRE(!fixed_width.empty()); + const auto fixed_gaps = uncovered_area(ring, beads_of(fixed_width, fixed->spacing)); + + params.use_arachne = true; + std::unique_ptr variable = make_filler(); + const Slic3r::ThickPolylines variable_width = variable->fill_surface_arachne(&surface, params); + REQUIRE(!variable_width.empty()); + const auto variable_gaps = uncovered_area(ring, beads_of(variable_width)); + + CAPTURE(fixed_gaps.first, fixed_gaps.second, variable_gaps.first, variable_gaps.second); + // The wedges the fixed width loops leave behind are what the variable width walls take up. + CHECK(variable_gaps.second < 0.5 * fixed_gaps.second); + CHECK(variable_gaps.first < fixed_gaps.first); + + // And it is still a spiral: far fewer paths than the ring has loops. + // And the walls are still chained into spirals rather than printed one path per wall. The ring is + // at its narrowest (12 - 7.3) mm across and is filled from both sides, so it is at least this many + // walls thick there and thicker elsewhere. Arachne's short thin feature walls cannot join a spiral, + // so only the substantial paths count towards this. + const size_t walls_across = size_t(2.0 * (12.0 - 7.3) / spacing); + size_t spirals = 0; + for (const Slic3r::ThickPolyline &path : variable_width) + if (path.length() > scale_(10.0 * spacing)) + ++spirals; + CAPTURE(spirals, walls_across, variable_width.size(), fixed_width.size()); + CHECK(2 * spirals < walls_across); +} + TEST_CASE("Honeycomb infill rounds its cell corners with the smooth factor", "[Fill]") { // A cell whose sides are several times the line width, so that the corners have room to be rounded. @@ -1022,3 +1298,68 @@ TEST_CASE("Smoothing multiline lightning infill keeps its outlines connected", " REQUIRE(smooth.point_count > sharp.point_count); REQUIRE(smooth.sharp_turns < sharp.sharp_turns); } + +TEST_CASE("Sparse plane-path anchors match the printed infill", "[Fill][InternalBridge][Regression]") +{ + // Orca: Compare generated anchors with actual extrusion across plane-path patterns, + // smoothing, multiline and rotations; an origin shift must not pass as valid support. + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral", "archimedeanchords"); + const std::string smoothing = GENERATE("0%", "100%"); + const int multiline = GENERATE(1, 2); + const bool rotated = GENERATE(false, true); + const bool separated = GENERATE(false, true); + CAPTURE(pattern, smoothing, multiline, rotated, separated); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"sparse_infill_pattern", pattern}, + {"sparse_infill_density", "15%"}, + {"sparse_infill_smooth_factor", smoothing}, + {"fill_multiline", multiline}, + {"infill_direction", 45}, + {"sparse_infill_rotate_template", rotated ? "0,25,50" : ""}, + {"align_infill_direction_to_model", rotated}, + {"separated_infills", separated}, + {"top_shell_layers", 0}, + {"bottom_shell_layers", 0}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"resolution", 0.012}}); + Print print; + Model model; + TriangleMesh mesh = make_cube(30, 24, 1); + if (separated) { + // Orca: Two disconnected bodies in one object must each use their own infill origin. + TriangleMesh second = make_cube(30, 24, 1); + second.translate(50, 0, 0); + mesh.merge(second); + } + Slic3r::Test::init_print({mesh}, print, model, config, nullptr, false); + if (rotated) { + model.objects.front()->instances.front()->set_rotation(Vec3d(0., 0., Geometry::deg2rad(23.))); + print.apply(model, config); + } + print.process(); + + const Layer &layer = *print.objects().front()->get_layer(4); + Polylines printed; + for (const LayerRegion *region : layer.regions()) + for (const ExtrusionEntity *entity : region->fills.flatten().entities) + if (entity->role() == erInternalInfill) + entity->collect_polylines(printed); + REQUIRE_FALSE(printed.empty()); + const AABBTreeLines::LinesDistancer printed_tree(to_lines(printed)); + + // Orca: Exclude perimeter connections: anchoring and extrusion can trim those differently. + const Polylines anchors = intersection_pl(layer.generate_sparse_infill_polylines_for_anchoring(nullptr, nullptr, nullptr), + shrink(to_polygons(layer.lslices), scale_(3.))); + REQUIRE_FALSE(anchors.empty()); + double max_distance = 0.; + for (const Polyline &path : anchors) + for (const Point &point : path.equally_spaced_points(scale_(0.25))) + max_distance = std::max(max_distance, printed_tree.distance_from_lines(point)); + // Orca: Allow only the configured simplification tolerance; infill-scale offsets + // would hide anchors that no longer coincide with printed lines. + CHECK(unscale(max_distance) <= config.opt_float("resolution")); +} diff --git a/tests/fff_print/test_gcodewriter.cpp b/tests/fff_print/test_gcodewriter.cpp index b09b38e794..c0c9e794b9 100644 --- a/tests/fff_print/test_gcodewriter.cpp +++ b/tests/fff_print/test_gcodewriter.cpp @@ -574,6 +574,9 @@ static DynamicPrintConfig dual_extruder_toolchange_config() config.set_key_value("nozzle_temperature_range_high", new ConfigOptionInts({240, 240})); config.set_key_value("flush_multiplier", new ConfigOptionFloats({1})); config.set_key_value("flush_volumes_matrix", new ConfigOptionFloats({0, 140, 140, 0})); + // Inside the 200x200 test bed; the default y, 220, is not, and generation rejects that. + config.set_key_value("wipe_tower_x", new ConfigOptionFloats({50.})); + config.set_key_value("wipe_tower_y", new ConfigOptionFloats({50.})); return config; } diff --git a/tests/fff_print/test_perimeters.cpp b/tests/fff_print/test_perimeters.cpp index a98877ad2f..7067c60c61 100644 --- a/tests/fff_print/test_perimeters.cpp +++ b/tests/fff_print/test_perimeters.cpp @@ -4,9 +4,14 @@ #include "libslic3r/ExtrusionEntityCollection.hpp" #include "libslic3r/Layer.hpp" #include "libslic3r/Print.hpp" +#include "libslic3r/GCodeReader.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/TriangleMesh.hpp" #include #include +#include +#include #include #include "test_helpers.hpp" @@ -255,3 +260,238 @@ TEST_CASE("Only one wall on the first layer needs a bottom shell", "[Perimeters] // No bottom shell: the option is inert, down to the same walls an unchecked box gives. CHECK_THAT(one_wall_no_shell, Catch::Matchers::WithinAbs(plain_no_shell, 1.0)); } + +namespace { + +// The layer that closes the cavity of box_over_cavity(), the first one printed over air. +const double cavity_ceiling_z = 6.2; + +// A cone standing on its tip, flaring by 5mm of radius per mm of height: at a layer height of 0.2 every +// wall of a layer lands a full millimetre outside the one below, entirely off the layer below but right +// alongside the walls printed with it. +TriangleMesh flared_cone() +{ + TriangleMesh cone = make_cone(20., 4.); + cone.mirror(Z); + cone.translate(0., 0., 4.); + return cone; +} + +// A 30mm box holding a 20mm cavity from z=2 to z=6, with a 4mm hole punched down through the ceiling +// of that cavity. The layer at cavity_ceiling_z bridges the cavity, and the walls of the hole sit in +// the middle of that bridge, 15mm clear of anything the layer below supports. +Print &box_over_cavity(Print &print, Model &model, const DynamicPrintConfig &config) +{ + ModelObject *object = model.add_object(); + object->name = "box_over_cavity.stl"; + object->add_volume(make_cube(30., 30., 8.), ModelVolumeType::MODEL_PART, false); + TriangleMesh cavity = make_cube(20., 20., 4.); + cavity.translate(5.f, 5.f, 2.f); + object->add_volume(std::move(cavity), ModelVolumeType::NEGATIVE_VOLUME, false); + TriangleMesh hole = make_cube(4., 4., 6.); + hole.translate(13.f, 13.f, 5.f); + object->add_volume(std::move(hole), ModelVolumeType::NEGATIVE_VOLUME, false); + object->add_instance(); + object->ensure_on_bed(); + + print.auto_assign_extruders(object); + print.apply(model, config); + print.validate(); + print.set_status_silent(); + return print; +} + +// Every setting the assertions below depend on, so none of them rests on a default. +DynamicPrintConfig unsupported_walls_config(const char *wall_generator, bool unsupported_wall_last) +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "wall_generator", wall_generator }, + { "layer_height", 0.2 }, + { "initial_layer_print_height", 0.2 }, + { "wall_loops", 3 }, + { "detect_overhang_wall", true }, + // Outer wall first, so an unsupported loop only ends up last if the feature puts it there. + { "wall_sequence", "outer wall/inner wall" }, + { "is_infill_first", false }, + { "sparse_infill_density", "15%" }, + { "unsupported_wall_last", unsupported_wall_last }, + { "gcode_comments", true }, + }); + return config; +} + +// A loop extruded entirely in mid air: every one of its paths is an overhang. +bool unsupported_loop(const ExtrusionEntity *entity) +{ + if (! entity->is_loop()) + return false; + const ExtrusionPaths &paths = static_cast(entity)->paths; + return ! paths.empty() && std::all_of(paths.begin(), paths.end(), + [](const ExtrusionPath &path) { return path.role() == erOverhangPerimeter; }); +} + +// The loops of every wall island of the print, island by island, in extrusion order. +std::vector> wall_islands(const Print &print) +{ + std::vector> islands; + for (const Layer *layer : print.objects().front()->layers()) + for (const LayerRegion *region : layer->regions()) + for (const ExtrusionEntity *island : region->perimeters.entities) { + std::vector loops; + for (const ExtrusionEntity *entity : static_cast(island)->entities) + if (entity->is_loop()) + loops.push_back(static_cast(entity)); + islands.push_back(std::move(loops)); + } + return islands; +} + +// Islands where a loop that is anchored is extruded after one that is not. +int islands_with_a_supported_loop_last(const Print &print) +{ + int count = 0; + for (const std::vector &loops : wall_islands(print)) { + bool seen_unsupported = false; + for (const ExtrusionLoop *loop : loops) { + if (unsupported_loop(loop)) + seen_unsupported = true; + else if (seen_unsupported) { + ++ count; + break; + } + } + } + return count; +} + +// The unsupported loops of the print, and those of them held back for the infill. +std::vector unsupported_loops(const Print &print, double print_z = -1.) +{ + std::vector loops; + for (const Layer *layer : print.objects().front()->layers()) { + if (print_z >= 0. && std::abs(layer->print_z - print_z) > EPSILON) + continue; + for (const LayerRegion *region : layer->regions()) + for (const ExtrusionEntity *island : region->perimeters.entities) + for (const ExtrusionEntity *entity : static_cast(island)->entities) + if (unsupported_loop(entity)) + loops.push_back(static_cast(entity)); + } + return loops; +} + +int loops_held_back_for_infill(const std::vector &loops) +{ + return int(std::count_if(loops.begin(), loops.end(), [](const ExtrusionLoop *loop) { return loop->print_after_infill; })); +} + +// The G-code emitted at `print_z`, so the order of one layer can be read on its own. +std::string layer_gcode(const std::string &gcode, double print_z) +{ + std::string out; + GCodeReader reader; + reader.parse_buffer(gcode, [&out, print_z](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (std::abs(self.z() - print_z) < EPSILON) + out += line.raw() + "\n"; + }); + return out; +} + +} // namespace + +// Whatever the wall order asks for, a loop with nothing under it cannot be extruded before the loops it +// leans on. The flared cone gives every layer an outer wall that lands completely off the one below, and +// the outer wall first sequence would otherwise put it down before any of them. +TEST_CASE("Unsupported wall loops are extruded after the walls that anchor them", "[Perimeters]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + CAPTURE(wall_generator); + + auto slice_cone = [wall_generator](bool unsupported_wall_last, Print &print) { + init_and_process_print({ flared_cone() }, print, unsupported_walls_config(wall_generator, unsupported_wall_last)); + REQUIRE_FALSE(print.objects().empty()); + }; + + Print on; + slice_cone(true, on); + // Without unsupported loops to reorder the rest of the test would pass on an empty print. + REQUIRE(unsupported_loops(on).size() > 0); + CHECK(islands_with_a_supported_loop_last(on) == 0); + + SECTION("the held back loops run innermost first") { + for (const std::vector &loops : wall_islands(on)) { + int previous_inset = std::numeric_limits::max(); + for (const ExtrusionLoop *loop : loops) + if (unsupported_loop(loop)) { + CHECK(loop->inset_idx <= previous_inset); + previous_inset = loop->inset_idx; + } + } + } + + SECTION("switched off, the configured wall order is left alone") { + Print off; + slice_cone(false, off); + REQUIRE(unsupported_loops(off).size() == unsupported_loops(on).size()); + // Outer wall first puts the unsupported outer wall ahead of the walls behind it. + CHECK(islands_with_a_supported_loop_last(off) > 0); + } +} + +// A loop the walls cannot reach is a different case: only the bridges of its own layer will ever hold it, +// so it has to wait for them - while a loop that runs alongside a wall keeps its place, because the +// bridges anchor on it instead. +TEST_CASE("A wall loop out of reach of the layer below waits for the infill", "[Perimeters]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + CAPTURE(wall_generator); + + Print print; + Model model; + box_over_cavity(print, model, unsupported_walls_config(wall_generator, true)); + print.process(); + + const std::vector hole_loops = unsupported_loops(print, cavity_ceiling_z); + REQUIRE(hole_loops.size() > 0); + CHECK(loops_held_back_for_infill(hole_loops) == int(hole_loops.size())); + + SECTION("a loop alongside a supported wall is not held back") { + Print cone; + init_and_process_print({ flared_cone() }, cone, unsupported_walls_config(wall_generator, true)); + const std::vector loops = unsupported_loops(cone); + REQUIRE(loops.size() > 0); + CHECK(loops_held_back_for_infill(loops) == 0); + } + + SECTION("switched off, no loop is held back") { + Print off; + Model off_model; + box_over_cavity(off, off_model, unsupported_walls_config(wall_generator, false)); + off.process(); + const std::vector loops = unsupported_loops(off, cavity_ceiling_z); + REQUIRE(loops.size() == hole_loops.size()); + CHECK(loops_held_back_for_infill(loops) == 0); + } +} + +// The held back loops reach the G-code in a second pass, after the infill of their layer: on the layer +// that closes the cavity the walls of the hole are extruded once the bridge is down, so the layer emits +// perimeters, then infill, then the perimeters that were waiting for it. +TEST_CASE("Loops waiting for the infill are extruded after it", "[Perimeters]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + CAPTURE(wall_generator); + + auto ceiling_roles = [wall_generator](bool unsupported_wall_last) { + Print print; + Model model; + box_over_cavity(print, model, unsupported_walls_config(wall_generator, unsupported_wall_last)); + const std::string layer = layer_gcode(gcode(print), cavity_ceiling_z); + REQUIRE_FALSE(layer.empty()); + return role_sequence(layer, { "perimeter", "infill" }); + }; + + CHECK(ceiling_roles(true) == std::vector{ "perimeter", "infill", "perimeter" }); + CHECK(ceiling_roles(false) == std::vector{ "perimeter", "infill" }); +} diff --git a/tests/fff_print/test_printobject.cpp b/tests/fff_print/test_printobject.cpp index fb7fe2c1fd..a373a1ad39 100644 --- a/tests/fff_print/test_printobject.cpp +++ b/tests/fff_print/test_printobject.cpp @@ -4,11 +4,18 @@ #include "libslic3r/Print.hpp" #include "libslic3r/Layer.hpp" #include "libslic3r/GCodeReader.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/AABBTreeLines.hpp" #include "test_helpers.hpp" +#include #include +#include #include +#include +#include +#include using namespace Slic3r; using namespace Slic3r::Test; @@ -130,3 +137,438 @@ TEST_CASE("Initial layer height is honored", "[PrintObject]") REQUIRE_THAT(*layer_zs.begin(), Catch::Matchers::WithinAbs(0.3, 1e-4)); REQUIRE_THAT(*std::next(layer_zs.begin()), Catch::Matchers::WithinAbs(0.5, 1e-4)); } + +static TriangleMesh internal_bridge_step() +{ + // Orca: The smaller tower leaves a shoulder whose solid skin needs internal bridges + // over the sparse infill in the base, without relying on an external model file. + TriangleMesh mesh = make_cube(30, 24, 3); + TriangleMesh tower = make_cube(14, 10, 1); + tower.translate(8, 7, 3); + mesh.merge(tower); + return mesh; +} + +static DynamicPrintConfig internal_bridge_config(const std::string &pattern, int multiline) +{ + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"sparse_infill_pattern", pattern}, + {"fill_multiline", multiline}, + {"sparse_infill_density", "15%"}, + {"sparse_infill_smooth_factor", "100%"}, + {"infill_direction", 45}, + {"internal_bridge_angle", 0}, + {"thick_internal_bridges", true}, + {"top_shell_layers", 3}, + {"bottom_shell_layers", 2}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}}); + return config; +} + +TEST_CASE("Internal bridge angles follow the lower infill layer and model rotation", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral"); + // Orca: Cover both a central line (odd counts) and offset pairs (even counts). + const int multiline = GENERATE(1, 2, 3); + CAPTURE(multiline); + const double rotation = GENERATE(23., -123.); + const std::vector cycle{10., 30., 70.}; + auto config = internal_bridge_config(pattern, multiline); + config.set_deserialize_strict({{"sparse_infill_rotate_template", "10,30,70"}, + {"align_infill_direction_to_model", true}, + {"separated_infills", false}}); + Print print; + Model model; + init_print({internal_bridge_step()}, print, model, config, nullptr, false); + model.objects.front()->instances.front()->set_rotation(Vec3d(0., 0., Geometry::deg2rad(rotation))); + print.apply(model, config); + print.process(); + const PrintObject &object = *print.objects().front(); + size_t bridges = 0; + for (size_t i = 1; i < object.layer_count(); ++i) { + // Orca: The support is one layer below the bridge. Check the template and model + // rotation together, including normalization when the resulting angle is negative. + double expected = std::fmod(cycle[(i - 1) % cycle.size()] + 90. + rotation, 180.); + if (expected < 0.) expected += 180.; + for (const LayerRegion *region : object.get_layer(i)->regions()) + for (const Surface *surface : region->fill_surfaces.filter_by_type(stInternalBridge)) { + CAPTURE(pattern, rotation, i); + CHECK_THAT(Geometry::rad2deg(surface->bridge_angle), Catch::Matchers::WithinAbs(expected, 0.001)); + ++bridges; + } + } + REQUIRE(bridges > 0); +} + +TEST_CASE("Turning infill does not replace the anchors of another region", "[PrintObject][InternalBridge][Regression]") +{ + // Orca: Keep the right-hand region fixed while changing the left-hand pattern in the + // same object. Its bridge areas must be independent of a previous candidate's anchors. + const int multiline = GENERATE(1, 2, 3); + CAPTURE(multiline); + auto right_bridges = [multiline](const std::string &left_pattern) { + auto config = internal_bridge_config(left_pattern, multiline); + Print print; + Model model; + init_print({internal_bridge_step()}, print, model, config, nullptr, false); + TriangleMesh right = internal_bridge_step(); + right.translate(50, 0, 0); + ModelVolume *volume = model.objects.front()->add_volume(std::move(right)); + volume->config.set_key_value("sparse_infill_pattern", new ConfigOptionEnum(ipRectilinear)); + volume->config.set_key_value("infill_direction", new ConfigOptionFloat(17.)); + print.apply(model, config); + print.process(); + std::map result; + const PrintObject &object = *print.objects().front(); + for (size_t i = 0; i < object.layer_count(); ++i) + for (const LayerRegion *region : object.get_layer(i)->regions()) + if (region->region().config().infill_direction == 17.) + polygons_append(result[i], to_polygons(region->fill_surfaces.filter_by_type(stInternalBridge))); + return result; + }; + const auto baseline = right_bridges("rectilinear"); + const auto actual = right_bridges(GENERATE("hilbertcurve", "octagramspiral")); + REQUIRE(actual.size() == baseline.size()); + double total_area = 0.; + for (const auto &[layer, expected] : baseline) { + CAPTURE(layer); + const auto &polys = actual.at(layer); + CHECK(area(diff(expected, polys)) < scaled(1.) * scaled(1.) * 1e-6); + CHECK(area(diff(polys, expected)) < scaled(1.) * scaled(1.) * 1e-6); + total_area += area(expected); + } + REQUIRE(total_area > 0.); +} + +TEST_CASE("Rounded internal bridges end on printed support", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral"); + const bool separated = GENERATE(false, true); + CAPTURE(pattern, separated); + auto config = internal_bridge_config(pattern, 1); + config.set_deserialize_strict({{"infill_wall_overlap", "0%"}, {"separated_infills", separated}}); + TriangleMesh mesh = internal_bridge_step(); + if (separated) { + TriangleMesh second = internal_bridge_step(); + second.translate(50, 0, 0); + mesh.merge(second); + } + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + + // Orca: Check final extrusion endpoints after polygon cleanup and fill generation. + // A correct bridge angle and correct sparse anchors alone do not guarantee contact. + const PrintObject &object = *print.objects().front(); + size_t checked = 0; + for (size_t i = 1; i < object.layer_count(); ++i) { + Polygons support; + Polylines walls; + for (const LayerRegion *region : object.get_layer(i - 1)->regions()) { + region->perimeters.polygons_covered_by_width(support, 0.f); + region->fills.polygons_covered_by_width(support, 0.f); + region->perimeters.collect_polylines(walls); + } + REQUIRE_FALSE(support.empty()); + const AABBTreeLines::LinesDistancer support_tree(to_lines(union_(support))); + const AABBTreeLines::LinesDistancer wall_tree(to_lines(walls)); + for (const LayerRegion *region : object.get_layer(i)->regions()) + for (const ExtrusionEntity *entity : region->fills.flatten().entities) { + if (entity->role() != erInternalBridgeInfill) + continue; + const auto *path = dynamic_cast(entity); + REQUIRE(path != nullptr); + for (const Line &line : path->polyline.to_polyline().lines()) { + // Orca: Sample span ends, excluding short connectors and wall overlap. + if (line.length() < scale_(std::max(0.7, 3. * path->width))) + continue; + for (const Point &point : {line.a, line.b}) { + if (wall_tree.distance_from_lines(point) <= scale_(0.5)) + continue; + CAPTURE(i, point.x(), point.y()); + const double gap = unscale(support_tree.distance_from_lines(point)) - 0.5 * path->width; + CHECK(gap <= 0.1); + ++checked; + } + } + } + } + REQUIRE(checked > 0); +} + +TEST_CASE("Enabling separated infill recomputes body origins", "[PrintObject][InternalBridge][Regression]") +{ + const std::string pattern = GENERATE("hilbertcurve", "octagramspiral", "archimedeanchords"); + CAPTURE(pattern); + auto footprint = [&](bool reslice) { + auto config = internal_bridge_config(pattern, 2); + config.set_deserialize_strict({{"separated_infills", !reslice}}); + TriangleMesh mesh = internal_bridge_step(); + TriangleMesh second = internal_bridge_step(); + second.translate(50, 0, 0); + mesh.merge(second); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + if (reslice) { + // Orca: Enabling centering after a completed slice must rebuild the body + // origins now shared by bridge preparation and printed infill. + config.set_deserialize_strict({{"separated_infills", true}}); + print.apply(model, config); + print.process(); + } + Polygons result; + for (const LayerRegion *region : print.objects().front()->get_layer(4)->regions()) + region->fills.polygons_covered_by_width(result, 0.f); + return union_(result); + }; + const Polygons fresh = footprint(false); + const Polygons resliced = footprint(true); + REQUIRE_FALSE(fresh.empty()); + CHECK(area(diff(fresh, resliced)) < scaled(1.) * scaled(1.) * 1e-6); + CHECK(area(diff(resliced, fresh)) < scaled(1.) * scaled(1.) * 1e-6); +} + +TEST_CASE("Surface centering survives changes to separated infill settings", "[PrintObject][SurfaceInfill][Regression]") +{ + const std::string pattern = GENERATE("archimedeanchords", "octagramspiral"); + const std::string initial_center = GENERATE("each_surface", "each_model", "each_assembly"); + const std::string final_center = GENERATE("each_surface", "each_model", "each_assembly"); + const bool separated = GENERATE(false, true); + const std::string top_order = GENERATE("default", "outward", "inward"); + const std::string bottom_order = top_order == "outward" ? "inward" : top_order == "inward" ? "outward" : "default"; + const std::string density = GENERATE("80%", "100%"); + const bool change_center = initial_center != final_center; + CAPTURE(pattern, initial_center, final_center, separated, top_order, bottom_order, density); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"top_surface_pattern", pattern}, + {"bottom_surface_pattern", pattern}, + {"top_surface_fill_order", top_order}, + {"bottom_surface_fill_order", bottom_order}, + {"top_surface_density", density}, + {"bottom_surface_density", density}, + {"center_of_surface_pattern", initial_center}, + {"separated_infills", change_center ? separated : !separated}, + {"sparse_infill_pattern", "rectilinear"}, + {"sparse_infill_density", "15%"}, + {"top_shell_layers", 2}, + {"bottom_shell_layers", 2}, + {"top_shell_thickness", 0}, + {"bottom_shell_thickness", 0}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}}); + + // Orca: Two disconnected bodies exercise per-body centering. The offset tower also + // makes each-surface and each-model centering differ on the top surfaces. + TriangleMesh mesh = make_cube(30, 24, 2); + TriangleMesh tower = make_cube(12, 10, 1); + tower.translate(4, 3, 2); + mesh.merge(tower); + TriangleMesh second = mesh; + second.translate(50, 0, 0); + mesh.merge(second); + + // Orca: Equal footprints can hide reordered or reversed paths. Retain their point + // sequences and ordering protection to cover the directional surface behavior too. + struct SurfaceFillSnapshot { + std::map> paths; + bool protected_order = true; + }; + auto surface_fills = [](const Print &print) { + std::map, SurfaceFillSnapshot> result; + const PrintObject &object = *print.objects().front(); + for (size_t i = 0; i < object.layer_count(); ++i) { + auto collect = [&](const auto &self, const ExtrusionEntity &entity, bool no_sort) -> void { + if (const auto *collection = dynamic_cast(&entity)) { + for (const ExtrusionEntity *child : collection->entities) + self(self, *child, no_sort || collection->no_sort); + } else if (entity.role() == erTopSolidInfill || entity.role() == erBottomSurface) { + const auto *path = dynamic_cast(&entity); + REQUIRE(path != nullptr); + auto &snapshot = result[{i, entity.role()}]; + // Orca: The centered test model has one body on either side of X=0. + // Their traversal order may vary; preserve path order within each body. + Points points = path->polyline.to_polyline().points; + REQUIRE_FALSE(points.empty()); + snapshot.paths[points.front().x() > 0].push_back(std::move(points)); + snapshot.protected_order &= no_sort && !path->can_reverse(); + } + }; + for (const LayerRegion *region : object.get_layer(i)->regions()) + collect(collect, region->fills, false); + } + return result; + }; + + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + print.process(); + const auto initial = surface_fills(print); + config.set_deserialize_strict({{"center_of_surface_pattern", final_center}, {"separated_infills", separated}}); + print.apply(model, config); + // Orca: Preparation owns the body origins, and its invalidation must also force + // regeneration of top/bottom extrusion paths, even when sparse infill is unchanged. + CHECK_FALSE(print.objects().front()->is_step_done(posPrepareInfill)); + CHECK_FALSE(print.objects().front()->is_step_done(posInfill)); + print.process(); + const auto resliced = surface_fills(print); + + Print fresh_print; + Model fresh_model; + init_print({mesh}, fresh_print, fresh_model, config, nullptr, false); + fresh_print.process(); + const auto fresh = surface_fills(fresh_print); + REQUIRE_FALSE(fresh.empty()); + REQUIRE(resliced.size() == fresh.size()); + std::set roles; + bool changed_paths = false; + for (const auto &entry : fresh) { + CAPTURE(entry.first.first, entry.first.second); + REQUIRE_FALSE(entry.second.paths.empty()); + roles.insert(entry.first.second); + REQUIRE(resliced.count(entry.first) == 1); + REQUIRE(initial.count(entry.first) == 1); + const auto &actual = resliced.at(entry.first); + const auto &expected = entry.second; + const auto &before = initial.at(entry.first); + CHECK((actual.paths == expected.paths)); + if (!change_center) + CHECK((actual.paths == before.paths)); + if (top_order != "default") { + CHECK(expected.protected_order); + CHECK(actual.protected_order); + CHECK(before.protected_order); + } + changed_paths |= expected.paths != before.paths; + } + CHECK(roles.count(erTopSolidInfill) == 1); + CHECK(roles.count(erBottomSurface) == 1); + // Orca: Guard against a vacuous comparison: changing surface centering must change + // the printed pattern, while toggling separated sparse infill must leave it alone. + CHECK(changed_paths == change_center); +} + +TEST_CASE("Separated infill keeps fragmented and nested bodies independent", "[PrintObject][SurfaceInfill][Regression]") +{ + constexpr size_t grid_size = 8; + TriangleMesh mesh; + auto add_box = [&](double x, double y, double width, double depth) { + TriangleMesh box = make_cube(width, depth, 0.6); + box.translate(x, y, 0); + mesh.merge(box); + }; + // Orca: Many small islands exercise spatial pruning and the tree's original + // island indices. A pillar inside a frame also overlaps its bounding box, + // but must remain a separate body because it lies entirely inside the hole. + for (size_t x = 0; x < grid_size; ++ x) + for (size_t y = 0; y < grid_size; ++ y) + add_box(6 * x, 6 * y, 3, 3); + add_box(54, 0, 20, 4); + add_box(54, 16, 20, 4); + add_box(54, 0, 4, 20); + add_box(70, 0, 4, 20); + add_box(62, 8, 4, 4); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"separated_infills", true}, + {"center_of_surface_pattern", "each_surface"}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"elefant_foot_compensation", 0}, + {"wall_loops", 1}}); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + // Orca: Prepare body bounds through the public pipeline, then inspect the object read-only. + print.process(); + const PrintObject &object = *print.objects().front(); + REQUIRE(object.layer_count() > 1); + for (const Layer *layer : object.layers()) { + REQUIRE(layer->lslices.size() == grid_size * grid_size + 2); + REQUIRE(layer->lslices_separated_component_bboxes.size() == layer->lslices.size()); + size_t holes = 0; + for (size_t i = 0; i < layer->lslices.size(); ++ i) { + const BoundingBox &body = layer->lslices_separated_component_bboxes[i]; + const BoundingBox &island = layer->lslices_bboxes[i]; + CHECK(body.min == island.min); + CHECK(body.max == island.max); + holes += layer->lslices[i].holes.size(); + } + CHECK(holes == 1); + } +} + +TEST_CASE("Body centering survives islands merging and splitting between layers", "[PrintObject][SurfaceInfill][Regression]") +{ + const bool separated = GENERATE(false, true); + CAPTURE(separated); + // Orca: Four posts join through horizontal then vertical rails, creating a + // cycle of overlaps before splitting into four islands again. This exercises + // redundant connections and indexing either adjacent layer. A fifth post + // stays separate at every height. + TriangleMesh mesh; + for (int x : {0, 8}) + for (int y : {0, 8}) { + TriangleMesh post = make_cube(4, 4, 1); + post.translate(x, y, 0); + mesh.merge(post); + } + for (int y : {0, 8}) { + TriangleMesh rail = make_cube(12, 4, 0.2); + rail.translate(0, y, 0.2); + mesh.merge(rail); + } + for (int x : {0, 8}) { + TriangleMesh rail = make_cube(4, 12, 0.2); + rail.translate(x, 0, 0.4); + mesh.merge(rail); + } + TriangleMesh isolated = make_cube(4, 4, 1); + isolated.translate(20, 0, 0); + mesh.merge(isolated); + + auto config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({{"separated_infills", separated}, + {"center_of_surface_pattern", separated ? "each_surface" : "each_model"}, + {"layer_height", 0.2}, + {"initial_layer_print_height", 0.2}, + {"elefant_foot_compensation", 0}, + {"wall_loops", 1}}); + Print print; + Model model; + init_print({mesh}, print, model, config, nullptr, false); + // Orca: Prepare body bounds through the public pipeline, then inspect the object read-only. + print.process(); + const PrintObject &object = *print.objects().front(); + REQUIRE(object.layer_count() == 5); + REQUIRE(object.get_layer(0)->lslices.size() == 5); + REQUIRE(object.get_layer(1)->lslices.size() == 3); + REQUIRE(object.get_layer(2)->lslices.size() == 3); + REQUIRE(object.get_layer(4)->lslices.size() == 5); + + BoundingBox isolated_bbox = object.get_layer(0)->lslices_bboxes.front(); + for (const BoundingBox &bbox : object.get_layer(0)->lslices_bboxes) + if (bbox.min.x() > isolated_bbox.min.x()) + isolated_bbox = bbox; + BoundingBox connected_bbox; + for (const Layer *layer : object.layers()) + for (const BoundingBox &bbox : layer->lslices_bboxes) + if (bbox.min.x() < isolated_bbox.min.x()) + connected_bbox.merge(bbox); + for (const Layer *layer : object.layers()) { + REQUIRE(layer->lslices_separated_component_bboxes.size() == layer->lslices.size()); + for (size_t i = 0; i < layer->lslices.size(); ++ i) { + const BoundingBox &expected = layer->lslices_bboxes[i].min.x() < isolated_bbox.min.x() ? connected_bbox : isolated_bbox; + const BoundingBox &actual = layer->lslices_separated_component_bboxes[i]; + CHECK(actual.min == expected.min); + CHECK(actual.max == expected.max); + } + } +} diff --git a/tests/fff_print/test_support_material.cpp b/tests/fff_print/test_support_material.cpp index f854939c8c..97a9cea9e1 100644 --- a/tests/fff_print/test_support_material.cpp +++ b/tests/fff_print/test_support_material.cpp @@ -3,11 +3,104 @@ #include "libslic3r/GCodeReader.hpp" #include "libslic3r/Layer.hpp" +#include +#include +#include +#include +#include + #include "test_helpers.hpp" // get access to init_print, etc +// Not self-contained: its inline constructor uses PrintObject, PrintRegion, SlicingParameters and +// Geometry, so it must follow the headers (pulled in via test_helpers.hpp) that define them. +#include "libslic3r/Support/SupportParameters.hpp" + using namespace Slic3r::Test; using namespace Slic3r; +// Distinct layer Z heights carrying support interface extrusion. +static size_t support_interface_layer_count(const std::string &gcode) +{ + return layers_with_role(gcode, "support material interface").size(); +} + +// Distinct layer Z heights carrying support base extrusion. The base G-code label "support material" +// is a substring of "support material interface", so a base line is a support line that is not an +// interface line. +static size_t support_base_layer_count(const std::string &gcode) +{ + std::set layers; + GCodeReader parser; + parser.parse_buffer(gcode, [&layers](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + const std::string_view comment = line.comment(); + if (comment.find("support material") != std::string_view::npos && + comment.find("interface") == std::string_view::npos) + layers.insert(self.z()); + }); + return layers.size(); +} + +// Dominant support-interface fill direction per interface layer, in radians [0, pi). Uses the +// length-weighted axial mean (each segment angle doubled so a line and its reverse agree, then +// halved): the parallel infill lines reinforce while the surrounding perimeter cancels. +static std::map interface_fill_angle_by_layer(const std::string &gcode) +{ + std::map> acc; // z -> summed length*(cos2a, sin2a) + GCodeReader parser; + parser.parse_buffer(gcode, [&acc](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + if (line.comment().find("support material interface") == std::string_view::npos) return; + const double dx = line.dist_X(self), dy = line.dist_Y(self); + const double len = std::hypot(dx, dy); + if (len < 1e-6) return; + const double a2 = 2.0 * std::atan2(dy, dx); + auto &p = acc[self.z()]; + p.first += len * std::cos(a2); + p.second += len * std::sin(a2); + }); + std::map out; + for (const auto &kv : acc) { + double a = 0.5 * std::atan2(kv.second.second, kv.second.first); + if (a < 0) a += M_PI; + out[kv.first] = a; + } + return out; +} + +// Acute angle (degrees) between two axial fill directions in [0, pi). +static double axial_angle_diff_deg(double a, double b) +{ + const double d = std::fmod(std::fabs(a - b), M_PI); + return std::min(d, M_PI - d) * 180.0 / M_PI; +} + +// Denser interface spacing yields more extruded length. +static double support_interface_extrusion_length(const std::string &gcode) +{ + double len = 0; + GCodeReader parser; + parser.parse_buffer(gcode, [&len](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (! line.extruding(self)) return; + if (line.comment().find("support material interface") == std::string_view::npos) return; + len += std::hypot(line.dist_X(self), line.dist_Y(self)); + }); + return len; +} + +// A cap slab overhanging a base, joined by a central stem: the cap can only be supported by resting on the +// base, forcing a genuine bottom contact. A horizontal tunnel does not work here -- tree/organic can arch a +// branch in from the opening and avoid the floor entirely. +static TriangleMesh support_capital() +{ + TriangleMesh model = make_cube(40, 40, 2); // base [0,40]x[0,40]x[0,2] + TriangleMesh stem = make_cube(8, 8, 12); stem.translate(16, 16, 1); // stem centered, z 1..13 + TriangleMesh cap = make_cube(40, 40, 2); cap.translate(0, 0, 12); // cap z 12..14 + model.merge(stem); + model.merge(cap); + return model; +} + TEST_CASE("Three raft layers are created", "[SupportMaterial]") { Slic3r::Print print; @@ -36,6 +129,49 @@ TEST_CASE("Enforced support layers are generated", "[SupportMaterial]") REQUIRE(enforced.objects().front()->support_layers().size() > 0); } +// Support-needed statuses raised while slicing support_capital() with support off. The CLI lists these +// in result.json and fails on them under --strict. Collected under a lock: generate_support_material() +// runs on TBB workers. +static std::vector support_needed_statuses(bool no_check) +{ + Slic3r::Print print; + Slic3r::Model model; + Slic3r::Test::init_print({ support_capital() }, print, model, { + { "enable_support", 0 }, + { "enforce_support_layers", 0 } + }); + print.set_no_check_flag(no_check); + + std::mutex mutex; + std::vector statuses; + print.set_status_callback([&mutex, &statuses](const PrintBase::SlicingStatus &status) { + if (status.message_type != PrintStateBase::SlicingNeedSupportOn) + return; + std::lock_guard lock(mutex); + statuses.push_back(status); + }); + print.process(); + return statuses; +} + +TEST_CASE("An overhang sliced with support off reports that support is needed", "[SupportMaterial]") +{ + // The 40mm cap reaches ~22mm past its 8mm stem, beyond the 6mm cantilever limit of + // PrintObject::is_support_necessary(). + const std::vector statuses = support_needed_statuses(false); + REQUIRE(! statuses.empty()); + for (const PrintBase::SlicingStatus &status : statuses) { + // The CLI only considers step warnings (warning_step != -1), and --strict only NON_CRITICAL ones. + CHECK(status.warning_level == PrintStateBase::WarningLevel::NON_CRITICAL); + CHECK(status.warning_step != -1); + } +} + +TEST_CASE("The no-check flag skips the support-needed check", "[SupportMaterial]") +{ + CHECK(support_needed_statuses(true).empty()); +} + SCENARIO("Support layer Z honors contact distance", "[SupportMaterial]") { // Box h = 20mm, hole bottom at 5mm, hole height 10mm (top edge at 15mm). @@ -104,3 +240,272 @@ TEST_CASE("Support G-code emission survives a second slice in the same process", const std::string second = slice({ TestMesh::overhang }, { { "enable_support", 1 } }); REQUIRE(! layers_with_role(second, "support").empty()); } + +// The contact layer counts toward the configured interface layer count, so N configured top +// interface layers produce exactly N interface layers, not N+1. +TEST_CASE("Support top interface layer count matches the configured value", "[SupportMaterial]") +{ + const int top = GENERATE(1, 2, 3, 4, 6); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 1 }, + { "support_interface_top_layers", top }, + { "support_interface_bottom_layers", 0 }, + }); + CAPTURE(top); + REQUIRE(support_base_layer_count(g) > 0); // support actually formed + REQUIRE(support_interface_layer_count(g) == size_t(top)); +} + +// A rotated cube-with-hole is a horizontal tunnel whose ceiling and floor both receive support, so top +// and bottom interfaces can be exercised independently (the floor is the bottom contact). +static TriangleMesh support_tunnel() +{ + TriangleMesh tunnel = Slic3r::Test::mesh(TestMesh::cube_with_hole); + tunnel.rotate_x(float(M_PI / 2)); + return tunnel; +} + +static size_t tunnel_interface_layers(const TriangleMesh &tunnel, int top, int bottom) +{ + const std::string g = slice({ tunnel }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 0 }, + { "support_interface_top_layers", top }, + { "support_interface_bottom_layers", bottom }, + }); + REQUIRE(support_base_layer_count(g) > 0); // support actually formed + return support_interface_layer_count(g); +} + +TEST_CASE("No support interface is generated when neither top nor bottom is configured", "[SupportMaterial]") +{ + REQUIRE(tunnel_interface_layers(support_tunnel(), 0, 0) == 0); +} + +TEST_CASE("Bottom interface layer count matches its setting with top interface off", "[SupportMaterial]") +{ + const int bottom = GENERATE(1, 3, 6); + CAPTURE(bottom); + REQUIRE(tunnel_interface_layers(support_tunnel(), 0, bottom) == size_t(bottom)); +} + +// support_interface_bottom_layers = -1 means "same as top". +TEST_CASE("Support interface bottom layers default to the top layer count", "[SupportMaterial]") +{ + const TriangleMesh tunnel = support_tunnel(); + REQUIRE(tunnel_interface_layers(tunnel, 0, -1) == tunnel_interface_layers(tunnel, 0, 0)); + REQUIRE(tunnel_interface_layers(tunnel, 3, -1) == tunnel_interface_layers(tunnel, 3, 3)); +} + +TEST_CASE("Default support still emits base and interface material", "[SupportMaterial][Regression]") +{ + const std::string g = slice({ TestMesh::overhang }, { { "enable_support", 1 } }); + REQUIRE(support_base_layer_count(g) > 0); + REQUIRE(support_interface_layer_count(g) > 0); +} + +// Organic runs TreeSupport3D + TreeModelVolumes, the others the classic TreeSupport.cpp path. +TEST_CASE("Every tree support style produces base and interface material", "[SupportMaterial]") +{ + const char *style = GENERATE("organic", "tree_slim", "tree_strong", "tree_hybrid"); + INFO("style=" << style); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_type", "tree(auto)" }, + { "support_style", style }, + { "support_interface_top_layers", 3 }, + }); + CHECK(support_base_layer_count(g) > 0); + CHECK(support_interface_layer_count(g) > 0); +} + +TEST_CASE("Raft interface angle alternates by 45 degrees per interface id", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { { "enable_support", 1 } }); + SupportParameters sp(*print.objects().front()); + sp.raft_angle_interface = 0.5f; + REQUIRE_THAT(sp.raft_interface_angle(0), Catch::Matchers::WithinAbs(0.5 + M_PI / 4., 1e-6)); + REQUIRE_THAT(sp.raft_interface_angle(1), Catch::Matchers::WithinAbs(0.5 - M_PI / 4., 1e-6)); +} + +// The angle inputs are overwritten directly, so the pattern-to-angle mapping is checked +// independently of the sliced object's configuration. +TEST_CASE("Support interface fill angle follows the configured interface pattern", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { { "enable_support", 1 } }); + SupportParameters sp(*print.objects().front()); + sp.interface_angle = 0.3f; + sp.base_angle = 1.1f; + const double tol = 1e-6; + + SECTION("Rectilinear shifts the interface angle by -45deg for snug support") { + sp.support_interface_pattern = smipRectilinear; + sp.support_style = smsSnug; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + REQUIRE_THAT(sp.support_interface_angle(3), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + } + SECTION("Rectilinear leaves the interface angle alone for the other styles") { + sp.support_interface_pattern = smipRectilinear; + sp.support_style = smsGrid; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + } + SECTION("Rectilinear interlaced alternates -/+45deg by interface id parity") { + sp.support_interface_pattern = smipRectilinearInterlaced; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle - M_PI_4, tol)); + REQUIRE_THAT(sp.support_interface_angle(1), Catch::Matchers::WithinAbs(sp.interface_angle + M_PI_4, tol)); + } + SECTION("Grid uses the base angle") { + sp.support_interface_pattern = smipGrid; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.base_angle, tol)); + } + SECTION("Auto and concentric use the interface angle unchanged") { + sp.support_interface_pattern = smipAuto; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + sp.support_interface_pattern = smipConcentric; + REQUIRE_THAT(sp.support_interface_angle(0), Catch::Matchers::WithinAbs(sp.interface_angle, tol)); + } +} + +// End-to-end that the pattern reaches the emitted fill, not just support_interface_angle(). +TEST_CASE("Interlaced support interface alternates fill angle while rectilinear does not", "[SupportMaterial]") +{ + auto interface_angles = [](const char *pattern) { + std::vector a; + for (const auto &kv : interface_fill_angle_by_layer(slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 1 }, + { "support_interface_top_layers", 6 }, + { "support_interface_pattern", pattern } }))) + a.push_back(kv.second); + return a; + }; + + const std::vector rectilinear = interface_angles("rectilinear"); + const std::vector interlaced = interface_angles("rectilinear_interlaced"); + REQUIRE(rectilinear.size() >= 3); + REQUIRE(interlaced.size() >= 3); + + for (size_t i = 1; i < rectilinear.size(); ++i) + REQUIRE(axial_angle_diff_deg(rectilinear[i], rectilinear[0]) < 15.0); + + for (size_t i = 1; i < interlaced.size(); ++i) + REQUIRE(axial_angle_diff_deg(interlaced[i], interlaced[i - 1]) > 60.0); +} + +// Normal and non-organic tree support share the same interface angle logic: with a rectilinear interface +// pattern both emit their interface fill at the same angle (both go through support_interface_angle()). +TEST_CASE("Normal and tree support use the same interface fill angle", "[SupportMaterial]") +{ + auto mean_interface_angle = [](const char *type, const char *style) { + const auto angles = interface_fill_angle_by_layer(slice({ TestMesh::overhang }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 1 }, + { "support_type", type }, { "support_style", style }, + { "support_interface_top_layers", 6 }, { "support_interface_pattern", "rectilinear" } })); + REQUIRE(angles.size() >= 3); + // Axial mean, as in interface_fill_angle_by_layer: a plain mean would split angles either + // side of the [0, pi) wrap. + double x = 0, y = 0; + for (const auto &kv : angles) { + x += std::cos(2.0 * kv.second); + y += std::sin(2.0 * kv.second); + } + double mean = 0.5 * std::atan2(y, x); + if (mean < 0) mean += M_PI; + return mean; + }; + REQUIRE(axial_angle_diff_deg(mean_interface_angle("normal(auto)", "default"), + mean_interface_angle("tree(auto)", "tree_slim")) < 10.0); +} + +// Every style, because the non-organic tree styles once emitted one more top interface layer than the rest. +TEST_CASE("Top interface layer count equals the configured value for every support style", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "grid" }, { "normal(auto)", "snug" }, + { "tree(auto)", "organic" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + })); + CAPTURE(style); + const std::string g = slice({ TestMesh::overhang }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_type", type }, + { "support_style", style }, + { "support_interface_top_layers", 4 }, + }); + REQUIRE(support_interface_layer_count(g) == 4u); +} + +// The bottom interface was dropped in earlier versions when support started on the model rather +// than the plate. +TEST_CASE("Non-organic tree support generates a bottom interface on internal geometry", "[SupportMaterial]") +{ + const std::string g = slice({ support_tunnel() }, { + { "enable_support", 1 }, + { "layer_height", 0.2 }, + { "support_on_build_plate_only", 0 }, + { "support_type", "tree(auto)" }, + { "support_style", "tree_slim" }, + { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, + }); + REQUIRE(support_base_layer_count(g) > 0); + REQUIRE(support_interface_layer_count(g) > 0); +} + +// The capital forces the model contact; on a horizontal tunnel organic can arch a branch in and make none. +TEST_CASE("A bottom interface is produced for every support style on a forced model contact", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "default" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + { "tree(auto)", "organic" }, + })); + CAPTURE(style); + REQUIRE(support_interface_layer_count(slice({ support_capital() }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 0 }, + { "support_type", type }, { "support_style", style }, + { "support_interface_top_layers", 0 }, { "support_interface_bottom_layers", 6 } })) > 0); +} + +TEST_CASE("Bottom interface spacing controls bottom interface density for every support style", "[SupportMaterial]") +{ + auto [type, style] = GENERATE(table({ + { "normal(auto)", "default" }, { "tree(auto)", "tree_slim" }, + { "tree(auto)", "tree_strong" }, { "tree(auto)", "tree_hybrid" }, + { "tree(auto)", "organic" }, + })); + CAPTURE(style); + const TriangleMesh model = support_capital(); + auto len = [&model](const char *support_type, const char *support_style, double spacing) { + return support_interface_extrusion_length(slice({ model }, { + { "enable_support", 1 }, { "layer_height", 0.2 }, { "support_on_build_plate_only", 0 }, + { "support_type", support_type }, { "support_style", support_style }, { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, { "support_bottom_interface_spacing", spacing } })); + }; + REQUIRE(len(type, style, 0.0) > len(type, style, 4.0) * 1.5); +} + +// Interface and base flows are identical in width and rate unless a separate support-interface +// filament is used, so density is the observable here, not flow. +TEST_CASE("Bottom-only support interface keeps the dense interface density", "[SupportMaterial]") +{ + Slic3r::Print print; + Slic3r::Test::init_and_process_print({ TestMesh::overhang }, print, { + { "enable_support", 1 }, + { "support_interface_top_layers", 0 }, + { "support_interface_bottom_layers", 6 }, + { "support_bottom_interface_spacing", 0.0 }, // solid: density resolves to 1.0 + { "support_base_pattern_spacing", 2.5 }, // sparse: density stays below 1.0 + }); + SupportParameters sp(*print.objects().front()); + REQUIRE(sp.bottom_interface_density > sp.support_density); +} + diff --git a/tests/fff_print/test_tree_support.cpp b/tests/fff_print/test_tree_support.cpp new file mode 100644 index 0000000000..fbb40bb8f3 --- /dev/null +++ b/tests/fff_print/test_tree_support.cpp @@ -0,0 +1,190 @@ +#include + +#include + +#include "libslic3r/Layer.hpp" +#include "libslic3r/TriangleMesh.hpp" + +#include "test_helpers.hpp" + +using namespace Slic3r::Test; +using namespace Slic3r; + +namespace { + +// The upper plate overhangs both the lower plate and open air, so branches land on the model and on +// the bed in the same slice. +TriangleMesh two_tier_mesh() +{ + TriangleMesh lower = make_cube(30, 30, 3); + TriangleMesh column = make_cube(8, 8, 15); + TriangleMesh upper = make_cube(50, 50, 3); + // Each part overlaps the one below rather than resting on it; a coplanar join slices ambiguously. + column.translate(11.f, 11.f, 2.f); + upper.translate(-10.f, -10.f, 16.f); + TriangleMesh mesh = lower; + mesh.merge(column); + mesh.merge(upper); + return mesh; +} + +TriangleMesh scaled(TestMesh id, float scale) +{ + TriangleMesh mesh = Slic3r::Test::mesh(id); + mesh.scale(scale); + return mesh; +} + +// `extra` is applied last, so a caller can add or override any key. +void slice_with_tree_support(const TriangleMesh &mesh, Slic3r::Print &print, const char *style, + int threshold_angle = 30, int build_plate_only = 0, int raft_layers = 0, + std::initializer_list extra = {}) +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "enable_support", 1 }, + { "support_type", "tree(auto)" }, + { "support_style", style }, + { "support_on_build_plate_only", build_plate_only }, + { "support_threshold_angle", threshold_angle }, + { "raft_layers", raft_layers }, + { "layer_height", 0.2 }, + }); + config.set_deserialize_strict(extra); + Slic3r::Test::init_and_process_print({ mesh }, print, config); +} + +Points support_points(const Slic3r::Print &print) +{ + Points points; + for (const SupportLayer *layer : print.objects().front()->support_layers()) + layer->support_fills.collect_points(points); + return points; +} + +size_t support_point_count(const TriangleMesh &mesh, const char *style, int threshold_angle = 30, + int build_plate_only = 0) +{ + Slic3r::Print print; + slice_with_tree_support(mesh, print, style, threshold_angle, build_plate_only); + return support_points(print).size(); +} + +// Index of the first differing point, or the common length when they match. An index keeps a +// failure readable; comparing the vectors themselves dumps thousands of points. +size_t first_difference(const Points &a, const Points &b) +{ + const size_t common = std::min(a.size(), b.size()); + for (size_t i = 0; i < common; ++i) + if (a[i] != b[i]) + return i; + return common; +} + +// Slice `mesh` twice and require an identical support point sequence. Point counts and total +// length are order insensitive, so the sequence is what a reordering shows up in. +void sliced_twice_matches(const TriangleMesh &mesh, int build_plate_only, const char *style = "tree_slim", + std::initializer_list extra = {}) +{ + Slic3r::Print first_print, second_print; + slice_with_tree_support(mesh, first_print, style, 30, build_plate_only, 0, extra); + slice_with_tree_support(mesh, second_print, style, 30, build_plate_only, 0, extra); + const Points first = support_points(first_print); + const Points second = support_points(second_print); + REQUIRE(first.size() > 1000); // without support the comparison below passes vacuously + REQUIRE(second.size() == first.size()); + REQUIRE(first_difference(first, second) == first.size()); +} + +} // namespace + +TEST_CASE("Tree support is generated for an overhang and not for a plain cube", "[TreeSupport]") +{ + REQUIRE(support_point_count(scaled(TestMesh::overhang, 2.f), "tree_slim") > 1000); + REQUIRE(support_point_count(Slic3r::Test::cube(20), "tree_slim") == 0); +} + +TEST_CASE("Restricting tree support to the build plate changes what is generated", "[TreeSupport]") +{ + const TriangleMesh mesh = two_tier_mesh(); + const size_t anywhere = support_point_count(mesh, "tree_slim", 30, 0); + const size_t plate_only = support_point_count(mesh, "tree_slim", 30, 1); + REQUIRE(anywhere > 1000); + REQUIRE(plate_only > 1000); + // The upper plate overhangs the lower one, so some branches would land on the model. + REQUIRE(plate_only != anywhere); +} + +TEST_CASE("Tree support layers rise monotonically within the layer height limits", "[TreeSupport]") +{ + Slic3r::Print print; + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), print, "tree_slim"); + const double nozzle = print.config().nozzle_diameter.values.front(); + + size_t checked = 0; + double previous = 0; + bool previous_was_adjacent = false; + for (const SupportLayer *layer : print.objects().front()->support_layers()) { + if (layer->print_z <= 0 || layer->height <= 0) { + // Layers with no nodes are left at zero. Skipping one leaves a hole, so the next pair + // spans more than one layer and its gap says nothing about the layer height limit. + previous_was_adjacent = false; + continue; + } + if (previous > 0) { + CAPTURE(previous, layer->print_z); + REQUIRE(layer->print_z > previous); + if (previous_was_adjacent) + REQUIRE(layer->print_z - previous <= nozzle + EPSILON); + } + previous = layer->print_z; + previous_was_adjacent = true; + ++checked; + } + REQUIRE(checked > 10); +} + +TEST_CASE("A raft is still generated under tree support", "[TreeSupport]") +{ + // The mesh supports itself, so a layer count alone passes with no raft at all. + Slic3r::Print rafted, unrafted; + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), rafted, "tree_slim", 30, 0, 3); + slice_with_tree_support(scaled(TestMesh::overhang, 2.f), unrafted, "tree_slim", 30, 0, 0); + const PrintObject *rafted_object = rafted.objects().front(); + const PrintObject *unrafted_object = unrafted.objects().front(); + REQUIRE(rafted_object->support_layers().size() > unrafted_object->support_layers().size()); + // The raft goes under the object. + REQUIRE(rafted_object->layers().front()->print_z > unrafted_object->layers().front()->print_z); +} + +// drop_nodes() decides the node merges and spawns the next layer's nodes in parallel. Every one of +// those decisions has to be applied in a fixed order, or the same model gives different branches on +// each slice. +TEST_CASE("Tree support toolpaths do not depend on thread scheduling", "[TreeSupport][Regression]") +{ + // Scaled up so that a layer holds enough nodes for the parallel range to be split. At stock + // size it stays in one chunk and the order never varies. + SECTION("overhang") { sliced_twice_matches(scaled(TestMesh::overhang, 2.f), 0); } + SECTION("bridge with hole") { sliced_twice_matches(scaled(TestMesh::bridge_with_hole, 3.f), 0); } + // Dropping every branch that cannot reach the bed leaves the survivors dense enough that the + // neighbour merge fires in bulk. + SECTION("on the build plate") { sliced_twice_matches(scaled(TestMesh::overhang, 4.f), 1); } + // Branches resting on the model are what put nodes in a part group other than 0, which is the + // only way to reach the prune in the second pass. tree_hybrid additionally builds polygon + // nodes, so it is the only style that exercises the overhang merge. + SECTION("resting on the model") { sliced_twice_matches(two_tier_mesh(), 0); } + SECTION("hybrid on the model") { sliced_twice_matches(two_tier_mesh(), 0, "tree_hybrid"); } +} + +// Prim breaks equal-distance ties by heap address. A 1 mm branch diameter puts neighbours close +// enough to tie, and an explicit line width pins max_move_dist, so the moved tie winner reaches +// the support toolpaths. +TEST_CASE("Tree support toolpaths do not depend on the MST tie order", "[TreeSupport][Regression]") +{ + sliced_twice_matches(two_tier_mesh(), 0, "tree_hybrid", { + { "tree_support_branch_diameter", 1.0 }, + { "tree_support_branch_distance", 5.0 }, + { "tree_support_branch_angle", 40 }, + { "support_line_width", 0.4 }, + }); +} diff --git a/tests/fff_print/test_wipe.cpp b/tests/fff_print/test_wipe.cpp new file mode 100644 index 0000000000..46ee0d6441 --- /dev/null +++ b/tests/fff_print/test_wipe.cpp @@ -0,0 +1,653 @@ +#include + +#include +#include +#include +#include +#include +#include + +#include "libslic3r/GCode/GCodeProcessor.hpp" +#include "libslic3r/GCodeReader.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "libslic3r/Layer.hpp" + +#include "test_helpers.hpp" + +using namespace Slic3r; +using namespace Slic3r::Test; + +namespace { + +DynamicPrintConfig wipe_config(const char *wall_generator, bool wipe_inward, + const char *wipe_inward_distance = "50%", + const char *seam_gap = "10%", bool wipe_on_loops = false, + const char *wall_loops = "2", + const char *wall_sequence = "inner wall/outer wall", + bool alternate_extra_wall = false, + const char *sparse_infill_density = "0%", + const char *seam_position = "aligned") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.set_deserialize_strict({ + { "nozzle_diameter", "0.4" }, + { "layer_height", "0.2" }, + { "initial_layer_print_height", "0.2" }, + { "line_width", "0.45" }, + { "outer_wall_line_width", "0" }, // Orca: Auto must use the actual path width. + { "wall_loops", wall_loops }, + { "wall_generator", wall_generator }, + { "wall_sequence", wall_sequence }, + { "top_shell_layers", "0" }, + { "bottom_shell_layers", "0" }, + { "sparse_infill_density", sparse_infill_density }, + { "seam_position", seam_position }, + { "seam_gap", seam_gap }, + { "wipe", "1" }, + { "wipe_distance", "2" }, + { "retraction_length", "0.8" }, + { "retract_when_changing_layer", "1" }, + { "wipe_inward", wipe_inward ? "1" : "0" }, + { "wipe_inward_distance", wipe_inward_distance }, + { "wipe_on_loops", wipe_on_loops ? "1" : "0" }, + { "alternate_extra_wall", alternate_extra_wall ? "1" : "0" }, + { "gcode_comments", "1" }, + { "machine_start_gcode", "" }, + { "machine_end_gcode", "" }, + }); + return config; +} + +struct WipeTrajectory { + Vec2d start; + double z; + std::vector destinations; +}; + +std::vector wipe_trajectories(const std::string &gcode) +{ + const std::string &start_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start); + const std::string &end_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_End); + std::vector trajectories; + bool in_wipe = false; + + GCodeReader parser; + parser.parse_buffer(gcode, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) { + const std::string_view comment = line.comment(); + if (comment.find(start_tag) != std::string_view::npos) { + in_wipe = true; + trajectories.push_back({Vec2d(self.x(), self.y()), self.z(), {}}); + return; + } + if (comment.find(end_tag) != std::string_view::npos) { + in_wipe = false; + return; + } + if (in_wipe && line.dist_XY(self) > EPSILON) + trajectories.back().destinations.emplace_back(line.new_X(self), line.new_Y(self)); + }); + return trajectories; +} + +std::vector wipe_destinations(const std::string &gcode) +{ + std::vector destinations; + for (const WipeTrajectory &trajectory : wipe_trajectories(gcode)) + destinations.insert(destinations.end(), trajectory.destinations.begin(), trajectory.destinations.end()); + return destinations; +} + +bool trajectories_differ(const std::vector &lhs, const std::vector &rhs) +{ + if (lhs.size() != rhs.size()) + return true; + for (size_t i = 0; i < lhs.size(); ++i) + if ((lhs[i] - rhs[i]).norm() > 0.01) + return true; + return false; +} + +double trajectory_length(const WipeTrajectory &trajectory) +{ + double length = 0.; + Vec2d previous = trajectory.start; + for (const Vec2d &destination : trajectory.destinations) { + length += (destination - previous).norm(); + previous = destination; + } + return length; +} + +} // namespace + +TEST_CASE("Wipe retraction preserves fractional speed with inward wipe disabled", "[Wipe][Regression]") +{ + const char *retraction_speed = GENERATE("25.25", "25.5", "25.75"); + const char *relative_e = GENERATE("0", "1"); + INFO("retraction speed: " << retraction_speed); + INFO("relative E: " << relative_e); + DynamicPrintConfig config = wipe_config("classic", false); + config.set_deserialize_strict({ + {"gcode_flavor", "marlin2"}, + {"use_relative_e_distances", relative_e}, + {"retraction_speed", retraction_speed}, + {"retraction_length", "0.8"}, + {"retract_before_wipe", "0%"}, + {"retract_after_wipe", "0%"}, + {"role_based_wipe_speed", "0"}, + {"wipe_speed", "100"}, + {"wipe_distance", "2"}, + }); + const std::string output = slice({make_cube(10., 10., 1.)}, config); + const auto &start_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start); + const auto &end_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_End); + double before_wipe = 0.; + double during_wipe = 0.; + bool in_wipe = false; + bool complete = false; + GCodeReader parser; + parser.apply_config(config); + parser.parse_buffer(output, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (complete) + return; + if (line.comment().find(start_tag) != std::string_view::npos) { + in_wipe = true; + } else if (in_wipe && line.comment().find(end_tag) != std::string_view::npos) { + complete = true; + } else if (line.retracting(self)) { + (in_wipe ? during_wipe : before_wipe) -= line.dist_E(self); + } else if (line.extruding(self)) { + before_wipe = 0.; + } + }); + + REQUIRE(complete); + // At 100 mm/s, the 2 mm wipe lasts 0.02 seconds. The remaining part of + // the configured 0.8 mm retraction must be emitted before that wipe. + const double expected_during = std::stod(retraction_speed) * 2. / 100.; + CHECK_THAT(during_wipe, Catch::Matchers::WithinAbs(expected_during, 0.00005)); + CHECK_THAT(before_wipe, Catch::Matchers::WithinAbs(0.8 - expected_during, 0.00005)); +} + +TEST_CASE("Inward wipe respects the minimum travel for retraction and Z hop", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + const char *relative_e = GENERATE("0", "1"); + const char *reduce_crossing_wall = GENERATE("0", "1"); + const char *minimum_travel = GENERATE("5", "0"); + CAPTURE(wall_generator, relative_e, reduce_crossing_wall, minimum_travel); + DynamicPrintConfig config = wipe_config( + wall_generator, true, "50%", "10%", false, "3", "inner-outer-inner wall"); + config.set_deserialize_strict({ + {"gcode_flavor", "marlin2"}, + {"use_relative_e_distances", relative_e}, + {"reduce_crossing_wall", reduce_crossing_wall}, + {"retraction_minimum_travel", minimum_travel}, + {"retract_when_changing_layer", "0"}, + {"use_firmware_retraction", "0"}, + {"retract_before_wipe", "0%"}, + {"retract_after_wipe", "0%"}, + {"retraction_speed", "25.5"}, + {"role_based_wipe_speed", "0"}, + {"wipe_speed", "100"}, + {"z_hop", "0.4"}, + {"retract_lift_above", "0"}, + {"retract_lift_below", "0"}, + }); + config.set_key_value("z_hop_types", new ConfigOptionEnumsGeneric{zhtNormal}); + config.set_key_value("retract_lift_enforce", new ConfigOptionEnumsGeneric{rletAllSurfaces}); + const std::string output = slice({make_cube(10., 10., 1.)}, config); + const auto &role_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role); + const auto &start_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start); + const auto &end_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_End); + ExtrusionRole role = erNone; + bool after_outer_wall = false; + bool in_wipe = false; + size_t transitions = 0; + size_t same_layer_transitions = 0; + size_t inward_wipes = 0; + double retraction = 0.; + double lift = 0.; + double outer_z = 0.; + GCodeReader parser; + parser.apply_config(config); + parser.parse_buffer(output, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (line.comment().find(role_tag) == 0) + role = ExtrusionEntity::string_to_role(line.comment().substr(role_tag.size())); + if (line.comment().find(start_tag) == 0) { + in_wipe = true; + if (after_outer_wall) + ++inward_wipes; + } else if (line.comment().find(end_tag) == 0) { + in_wipe = false; + } + if (line.extruding(self) && line.dist_XY(self) > EPSILON) { + if (role == erExternalPerimeter) { + after_outer_wall = true; + retraction = lift = 0.; + outer_z = line.new_Z(self); + } else if (after_outer_wall) { + REQUIRE(role == erPerimeter); + ++transitions; + const double layer_rise = std::max(0., double(self.z()) - outer_z); + if (layer_rise < EPSILON) + ++same_layer_transitions; + // A 5 mm threshold suppresses retraction across a few wall widths. + // A zero threshold still permits the ordinary retract and lift. + const bool retract = std::stod(minimum_travel) == 0.; + CHECK_THAT(retraction, Catch::Matchers::WithinAbs(retract ? 0.8 : 0., 0.00005)); + // Exclude an ordinary layer change from the accumulated upward motion. + CHECK_THAT(lift - layer_rise, Catch::Matchers::WithinAbs(retract ? 0.4 : 0., 0.001)); + after_outer_wall = false; + } + } else if (after_outer_wall) { + if (line.retracting(self)) + retraction -= line.dist_E(self); + lift += std::max(0., double(line.dist_Z(self))); + if (in_wipe) + CHECK_THAT(line.dist_E(self), Catch::Matchers::WithinAbs(0., 0.00005)); + } + }); + // The 1 mm cube has five 0.2 mm layers: every outer wall must still wipe. + REQUIRE(transitions == 5); + REQUIRE(same_layer_transitions >= 4); + REQUIRE(inward_wipes == transitions); +} + +TEST_CASE("Changing inward wipe settings preserves the sliced geometry", "[Wipe][Regression]") +{ + const char *key = GENERATE("wipe_inward", "wipe_inward_distance"); + DynamicPrintConfig config = wipe_config("classic", false); + Print print; + Model model; + init_print({make_cube(10., 10., 1.)}, print, model, config); + gcode(print); + const PrintObject &object = *print.objects().front(); + REQUIRE(object.is_step_done(posPerimeters)); + REQUIRE(object.is_step_done(posInfill)); + REQUIRE(print.is_step_done(psWipeTower)); + REQUIRE(print.is_step_done(psGCodeExport)); + + DynamicPrintConfig changed = config; + changed.set_deserialize_strict({{key, std::string(key) == "wipe_inward" ? "1" : "75%"}}); + print.apply(model, changed); + + CHECK(print.objects().front()->is_step_done(posPerimeters)); + CHECK(print.objects().front()->is_step_done(posInfill)); + CHECK(print.is_step_done(psWipeTower)); + CHECK_FALSE(print.is_step_done(psGCodeExport)); +} + +TEST_CASE("Retraction and pressure advance calibration suppress inward wipe overrides", "[Wipe][Regression]") +{ + const auto mode = GENERATE(CalibMode::Calib_None, CalibMode::Calib_PA_Tower, + CalibMode::Calib_Auto_PA_Line, CalibMode::Calib_Retraction_tower, + CalibMode::Calib_Flow_Rate); + const char *wall_generator = GENERATE("classic", "arachne"); + const bool per_object = GENERATE(false, true); + INFO("calibration mode: " << int(mode) << ", wall generator: " << wall_generator + << ", per-object override: " << per_object); + + const auto trajectories = [&](bool inward) { + DynamicPrintConfig config = wipe_config(wall_generator, inward && !per_object); + const std::vector> overrides{ + {{"wipe_inward", inward ? "1" : "0"}} + }; + Print print; + Model model; + init_print({make_cube(10., 10., 1.)}, print, model, config, per_object ? &overrides : nullptr); + Calib_Params params; + params.mode = mode; + params.start = 0.2; + params.end = 0.4; + params.step = 0.1; + print.set_calib_params(params); + return wipe_destinations(gcode(print)); + }; + + const auto regular = trajectories(false); + const auto inward = trajectories(true); + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(inward.empty()); + // Other calibration modes and ordinary prints must still honor the option. + const bool should_differ = mode == CalibMode::Calib_None || mode == CalibMode::Calib_Flow_Rate; + CHECK(trajectories_differ(regular, inward) == should_differ); +} + +TEST_CASE("Inactive inward wipe settings preserve the exported trajectory", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + const bool disable_wiping = GENERATE(false, true); + DynamicPrintConfig regular = wipe_config(wall_generator, false); + DynamicPrintConfig inward = wipe_config(wall_generator, true, disable_wiping ? "50%" : "0"); + if (disable_wiping) { + regular.set_deserialize_strict({{"wipe", "0"}}); + inward.set_deserialize_strict({{"wipe", "0"}}); + } + const auto regular_paths = wipe_destinations(slice({make_cube(10., 10., 1.)}, regular)); + const auto inward_paths = wipe_destinations(slice({make_cube(10., 10., 1.)}, inward)); + if (!disable_wiping) + REQUIRE_FALSE(regular_paths.empty()); + CHECK_FALSE(trajectories_differ(regular_paths, inward_paths)); +} + +TEST_CASE("Inward wipe changes the exported trajectory when outer wall width is Auto", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, false))); + const std::vector inward = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, true))); + + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(inward.empty()); + REQUIRE(trajectories_differ(regular, inward)); +} + +TEST_CASE("Inward wipe recognizes an external wall starting on an overhang", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + const bool inward = GENERATE(false, true); + CAPTURE(wall_generator, inward); + const auto config = wipe_config(wall_generator, inward, "50%", "0%", false, + "3", "inner-outer-inner wall", false, "0%", "back"); + Print print; + Model model; + init_print({make_cube(10., 10., 1.)}, print, model, config); + print.process(); + size_t mixed_loops = 0; + const auto mark_overhangs = [&](auto &&self, ExtrusionEntity *entity) -> void { + if (auto *collection = dynamic_cast(entity)) { + for (ExtrusionEntity *child : collection->entities) + self(self, child); + } else if (auto *loop = dynamic_cast(entity); loop && is_external_perimeter(loop->role())) { + // Keep the printed geometry intact and give the back seam overhang + // roles. The front edge remains an ordinary external-wall segment. + ExtrusionPaths paths; + bool has_overhang = false; + bool has_external = false; + for (const ExtrusionPath &source : loop->paths) { + for (size_t i = 1; i < source.polyline.points.size(); ++i) { + ExtrusionPath path = source; + path.polyline.points = {source.polyline.points[i - 1], source.polyline.points[i]}; + const bool overhang = path.polyline.points.front().y() > 0 || path.polyline.points.back().y() > 0; + path.set_extrusion_role(overhang ? erOverhangPerimeter : erExternalPerimeter); + has_overhang |= overhang; + has_external |= !overhang; + paths.push_back(std::move(path)); + } + } + REQUIRE(has_overhang); + REQUIRE(has_external); + loop->paths = std::move(paths); + ++mixed_loops; + } + }; + for (const PrintObject *object : print.objects()) + for (Layer *layer : object->layers()) + for (LayerRegion *region : layer->regions()) + mark_overhangs(mark_overhangs, ®ion->perimeters); + REQUIRE(mixed_loops > 0); + + bool has_inward_wipe = false; + for (const WipeTrajectory &trajectory : wipe_trajectories(gcode(print))) { + if (trajectory.destinations.empty()) + continue; + const Vec2d move = trajectory.destinations.front() - trajectory.start; + if (trajectory.start.x() > 4. && trajectory.start.y() > 4. && move.x() < -0.05 && move.y() < -0.05) + has_inward_wipe = true; + } + CHECK(has_inward_wipe == inward); +} + +TEST_CASE("Inward wipe keeps its offset when seam gap is zero", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, false, "50%", "0%"))); + const std::vector inward = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, true, "50%", "0%"))); + + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(inward.empty()); + REQUIRE(trajectories_differ(regular, inward)); +} + +TEST_CASE("Inward wipe is retained across layers with a back seam", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const DynamicPrintConfig inward_config = wipe_config( + wall_generator, true, "50%", "0%", false, "3", "inner-outer-inner wall", false, "0%", "back"); + const std::vector inward = wipe_trajectories(slice({make_cube(27., 27., 1.)}, inward_config)); + + REQUIRE_FALSE(inward.empty()); + std::map inward_wipe_by_layer; + for (const WipeTrajectory &trajectory : inward) { + bool &has_inward_wipe = inward_wipe_by_layer[trajectory.z]; + if (trajectory.destinations.empty()) + continue; + const Vec2d first_move = trajectory.destinations.front() - trajectory.start; + // Orca: a back seam lands on the cube's positive-X/positive-Y corner. + // Its inward wipe must move diagonally away from both external faces. + has_inward_wipe = has_inward_wipe || + (trajectory.start.x() > 13. && trajectory.start.y() > 13. && + first_move.x() < -0.05 && first_move.y() < -0.05); + } + REQUIRE(inward_wipe_by_layer.size() == 5); + for (const auto &[z, has_inward_wipe] : inward_wipe_by_layer) { + INFO("layer Z: " << z); + REQUIRE(has_inward_wipe); + } +} + +TEST_CASE("Literal inward wipe distance is clamped to the outer wall width", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, false))); + const std::vector full_width = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, true, "100%"))); + const std::vector oversized = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, true, "2"))); + + REQUIRE_FALSE(full_width.empty()); + REQUIRE(trajectories_differ(regular, full_width)); + REQUIRE(oversized.size() == full_width.size()); + for (size_t i = 0; i < full_width.size(); ++i) + REQUIRE_THAT((oversized[i] - full_width[i]).norm(), Catch::Matchers::WithinAbs(0., 0.01)); +} + +TEST_CASE("Inward wipe is not applied without an adjacent wall", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, false, "50%", "10%", false, "1"))); + const std::vector inward = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config(wall_generator, true, "50%", "10%", false, "1"))); + + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(trajectories_differ(regular, inward)); +} + +TEST_CASE("Inward wipe uses an alternate extra wall when the configured wall count is one", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const DynamicPrintConfig regular_config = wipe_config( + wall_generator, false, "50%", "10%", false, "1", "inner wall/outer wall", true, "15%"); + const DynamicPrintConfig inward_config = wipe_config( + wall_generator, true, "50%", "10%", false, "1", "inner wall/outer wall", true, "15%"); + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, regular_config)); + const std::vector inward = wipe_destinations( + slice({make_cube(10., 10., 1.)}, inward_config)); + + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(inward.empty()); + REQUIRE(trajectories_differ(regular, inward)); +} + +TEST_CASE("Inward wipe is not applied before the adjacent wall is printed", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + INFO("wall generator: " << wall_generator); + + const std::vector regular = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config( + wall_generator, false, "50%", "10%", false, "2", "outer wall/inner wall"))); + const std::vector inward = wipe_destinations( + slice({make_cube(10., 10., 1.)}, wipe_config( + wall_generator, true, "50%", "10%", false, "2", "outer wall/inner wall"))); + + REQUIRE_FALSE(regular.empty()); + REQUIRE_FALSE(trajectories_differ(regular, inward)); +} + +TEST_CASE("Wipe on loops preserves the corner move with inward wipe disabled", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + const char *nozzle_diameter = GENERATE("0.4", "0.8"); + const char *comments = GENERATE("0", "1"); + CAPTURE(comments); + INFO("wall generator: " << wall_generator << ", nozzle diameter: " << nozzle_diameter); + // A closed square gives a 90-degree material-side corner at the seam. + DynamicPrintConfig config = wipe_config(wall_generator, false, "50%", "0", true); + config.set_deserialize_strict({{"nozzle_diameter", nozzle_diameter}, {"seam_position", "nearest"}, + {"gcode_comments", comments}}); + const std::string output = slice({make_cube(10., 10., 1.)}, config); + const auto &role_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role); + const auto &wipe_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start); + ExtrusionRole role = erNone; + std::vector loop; + bool after_extrusion = false; + size_t moves = 0; + GCodeReader parser; + parser.apply_config(config); + parser.parse_buffer(output, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (line.comment().find(role_tag) == 0) { + role = ExtrusionEntity::string_to_role(line.comment().substr(role_tag.size())); + loop.clear(); + after_extrusion = false; + } + if (line.comment().find(wipe_tag) == 0) + after_extrusion = false; + if (role != erExternalPerimeter) + return; + if (line.extruding(self) && line.dist_XY(self) > EPSILON) { + if (loop.empty()) + loop.emplace_back(self.x(), self.y()); + loop.emplace_back(line.new_X(self), line.new_Y(self)); + after_extrusion = true; + return; + } + // The loop move is the first non-extruding XY move after the external + // wall and before the reserved wipe marker, regardless of comment text. + if (!after_extrusion || line.dist_XY(self) <= EPSILON) + return; + after_extrusion = false; + + ++moves; + INFO("layer Z: " << self.z()); + REQUIRE(loop.size() >= 4); + const Vec2d seam = loop.front(); + REQUIRE_THAT((loop.back() - seam).norm(), Catch::Matchers::WithinAbs(0., 0.003)); + const Vec2d outgoing = (loop[1] - seam).normalized(); + const Vec2d into_corner = (loop[loop.size() - 2] - seam).normalized(); + REQUIRE_THAT(outgoing.dot(into_corner), Catch::Matchers::WithinAbs(0., 0.01)); + const Vec2d move = Vec2d(line.new_X(self), line.new_Y(self)) - seam; + // The legacy corner move is 20% of the nozzle diameter, turned 30 degrees + // from the outgoing edge into the square. Check both components independently. + const double distance = 0.2 * std::stod(nozzle_diameter); + CHECK_THAT(move.dot(outgoing), Catch::Matchers::WithinAbs(distance * std::sqrt(3.) / 2., 0.003)); + CHECK_THAT(move.dot(into_corner), Catch::Matchers::WithinAbs(distance / 2., 0.003)); + }); + REQUIRE(moves == 5); +} + +TEST_CASE("Inward wipe remains valid after wipe on loops moves the nozzle", "[Wipe][Regression]") +{ + const char *wall_generator = GENERATE("classic", "arachne"); + const char *comments = GENERATE("0", "1"); + CAPTURE(comments); + INFO("wall generator: " << wall_generator); + + DynamicPrintConfig config = wipe_config(wall_generator, false, "50%", "10%", true); + config.set_deserialize_strict({{"gcode_comments", comments}}); + const std::string loop_move = slice({make_cube(10., 10., 1.)}, config); + config.set_deserialize_strict({{"wipe_inward", "1"}}); + const std::string combined = slice({make_cube(10., 10., 1.)}, config); + config.set_deserialize_strict({{"wipe_on_loops", "0"}}); + const std::string inward_only = slice({make_cube(10., 10., 1.)}, config); + + for (const std::string *output : {&loop_move, &combined}) { + INFO("wipe_inward: " << (output == &combined)); + std::map> loop_moves_by_layer; + const auto &role_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role); + const auto &wipe_tag = GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Wipe_Start); + ExtrusionRole role = erNone; + bool after_extrusion = false; + GCodeReader parser; + parser.apply_config(config); + parser.parse_buffer(*output, [&](GCodeReader &self, const GCodeReader::GCodeLine &line) { + if (line.comment().find(role_tag) == 0) { + role = ExtrusionEntity::string_to_role(line.comment().substr(role_tag.size())); + after_extrusion = false; + } + if (line.comment().find(wipe_tag) == 0) + after_extrusion = false; + if (role != erExternalPerimeter || line.dist_XY(self) <= EPSILON) + return; + if (line.extruding(self)) { + after_extrusion = true; + } else if (after_extrusion) { + loop_moves_by_layer[line.new_Z(self)].emplace_back(line.new_X(self), line.new_Y(self)); + after_extrusion = false; + } + }); + + // The 1 mm cube at 0.2 mm layer height has one external loop on each of five layers. + const auto trajectories = wipe_trajectories(*output); + REQUIRE(loop_moves_by_layer.size() == 5); + for (size_t layer = 1; layer <= 5; ++layer) { + const double z = layer * 0.2; + const auto moves = std::find_if(loop_moves_by_layer.begin(), loop_moves_by_layer.end(), + [z](const auto &entry) { return std::abs(entry.first - z) < 0.001; }); + REQUIRE(moves != loop_moves_by_layer.end()); + REQUIRE(moves->second.size() == 1); + const auto wipe = std::find_if(trajectories.begin(), trajectories.end(), [&](const WipeTrajectory &trajectory) { + return std::abs(trajectory.z - z) < 0.001 && + (trajectory.start - moves->second.front()).norm() < 0.001; + }); + REQUIRE(wipe != trajectories.end()); + // The configured 2 mm wipe must be measured from the inward move's + // endpoint, including when wipe_inward is off (set_last_pos regression). + CHECK_THAT(trajectory_length(*wipe), Catch::Matchers::WithinAbs(2., 0.003)); + } + } + + const std::vector combined_trajectories = wipe_trajectories(combined); + const std::vector inward_trajectories = wipe_trajectories(inward_only); + REQUIRE_FALSE(combined_trajectories.empty()); + REQUIRE(combined_trajectories.size() == inward_trajectories.size()); + REQUIRE(trajectories_differ(wipe_destinations(combined), wipe_destinations(loop_move))); + + bool start_changed = false; + for (size_t i = 0; i < combined_trajectories.size(); ++i) { + start_changed = start_changed || + (combined_trajectories[i].start - inward_trajectories[i].start).norm() > 0.01; + REQUIRE_THAT(trajectory_length(combined_trajectories[i]), + Catch::Matchers::WithinAbs(trajectory_length(inward_trajectories[i]), 0.01)); + } + REQUIRE(start_changed); +} diff --git a/tests/fff_print/test_wipe_tower.cpp b/tests/fff_print/test_wipe_tower.cpp index 2bd7ac4189..24d50d6e66 100644 --- a/tests/fff_print/test_wipe_tower.cpp +++ b/tests/fff_print/test_wipe_tower.cpp @@ -152,6 +152,8 @@ static DynamicPrintConfig wipe_tower_toolchange_config(const std::string &gcode_ { "outer_wall_filament_id", 2 }, { "inner_wall_filament_id", 2 }, { "enable_prime_tower", true }, + { "wipe_tower_x", 50 }, // inside the 200x200 test bed + { "wipe_tower_y", 50 }, // (the default y, 220, is not) { "layer_height", 0.3 }, { "gcode_flavor", gcode_flavor }, }); @@ -182,3 +184,148 @@ TEST_CASE("The wipe tower's toolchange planner flush follows the gcode flavor", CHECK_THAT(tower, !Catch::Matchers::ContainsSubstring(unexpected)); } } + +// What Print feeds the shared estimate. The libslic3r WipeTowerEstimate cases cannot see this: +// they call the estimator directly. The estimate counts the filaments the print really uses, +// so the two-filament shape gives the outer wall the second one. +static DynamicPrintConfig tower_estimate_config(const char *wall_type, unsigned int filaments = 2) +{ + // 100 mm3 per purge on a 50 mm wide tower: one purge is 100/(layer_height * 50) of depth. + return multifilament_config(filaments, { + { "outer_wall_filament_id", filaments == 2 ? "2" : "1" }, + { "enable_prime_tower", "1" }, + { "wipe_tower_wall_type", wall_type }, + { "prime_tower_width", "50" }, + { "prime_volume", "100" }, + { "prime_tower_infill_gap", "100%" }, + { "prime_tower_brim_width", "3" }, + { "purge_in_prime_tower", "0" }, + { "single_extruder_multi_material", "0" }, + { "timelapse_type", "0" }, + { "layer_height", "0.2" }, + { "enable_wrapping_detection", "0" }, + { "raft_layers", "0" } }); +} + +TEST_CASE("The tower is sized for the thinnest layer any object on the plate is sliced at", "[WipeTower]") +{ + // The tower has to survive its thinnest layer, so an override finer than the preset drives + // the estimate even on the second object. Two 20 mm cubes, the second at 0.1 mm. + const DynamicPrintConfig config = tower_estimate_config("rectangle"); + const std::vector> overrides = { + {}, { { "layer_height", "0.1" } } }; + + Print print; + Model model; + init_print({ cube(20), cube(20) }, print, model, config, &overrides); + + // One purge at 0.1 mm: 100 / (0.1 * 50) = 20 mm, above the 20 mm-tall tower's stability + // floor. At the preset's 0.2 mm it would be half that, so the two are easy to tell apart. + const float floor_20mm = WipeTower::get_limit_depth_by_height(20.f); + REQUIRE(floor_20mm < 10.f); + CHECK_THAT(print.wipe_tower_data(2).depth, Catch::Matchers::WithinAbs(20., 1e-4)); +} + +TEST_CASE("Validation is given the tower's effective width, not the configured one", "[WipeTower]") +{ + // A rib wall squares the tower, so its width is its depth. Validation reads this rather + // than re-deriving the rule from the wall type. + Print print; + Model model; + + SECTION("a rectangle wall keeps the configured width") { + const DynamicPrintConfig config = tower_estimate_config("rectangle"); + init_print({ cube(20) }, print, model, config); + const WipeTowerData &data = print.wipe_tower_data(2); + CHECK_THAT(data.width, Catch::Matchers::WithinAbs(50., 1e-4)); + CHECK(data.depth < data.width); + } + + SECTION("a rib wall reports the squared footprint") { + const DynamicPrintConfig config = tower_estimate_config("rib"); + init_print({ cube(20) }, print, model, config); + const WipeTowerData &data = print.wipe_tower_data(2); + CHECK_THAT(data.width, Catch::Matchers::WithinAbs(data.depth, 1e-4)); + CHECK(data.width > 0.f); + } +} + +TEST_CASE("Generating the tower keeps its reported width current", "[WipeTower]") +{ + // width is handed out after the slice, so leaving it at the estimate reports a zero-width + // tower to every post-generation consumer. + const DynamicPrintConfig config = wipe_tower_toolchange_config("marlin"); + Print print; + Model model; + init_print({ cube(10) }, print, model, config); + print.apply(model, config); + REQUIRE(print.wipe_tower_data(2).width > 0.f); + + print.process(); + REQUIRE(print.is_step_done(psWipeTower)); + const WipeTowerData &data = print.wipe_tower_data(); + // A width the generator never wrote reads as zero. A rib wall squares the tower, so the + // generated width is the body square: under the configured 50 mm, and inside the depth. + CHECK(data.width > 0.f); + CHECK(data.width < 50.f); + CHECK(data.width <= data.depth + EPSILON); +} + +TEST_CASE("A single-filament plate reserves a tower only when one is actually printed", "[WipeTower]") +{ + // The estimate has to answer this the way Print::apply does: reporting no tower for one + // that is built collapses the validation hull to a point, and reporting one for a tower + // that is not built takes that bed area away from the arranger and draws a preview box + // over nothing. + Print print; + Model model; + + SECTION("no tool change and nothing else that prints one") { + const DynamicPrintConfig config = tower_estimate_config("rib", 1); + init_print({ cube(20) }, print, model, config); + REQUIRE_FALSE(print.has_wipe_tower()); + CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); + } + + // A raft puts the tower on every layer below the object, but only where there is a tower: + // Print::apply runs normalize_fdm_2, which clears enable_prime_tower for a plate that + // purges one filament and has neither smooth timelapse nor wrapping detection on. + SECTION("a raft alone does not print one") { + DynamicPrintConfig config = tower_estimate_config("rib", 1); + config.set_deserialize_strict({ { "raft_layers", "3" } }); + init_print({ cube(20) }, print, model, config); + REQUIRE_FALSE(print.config().enable_prime_tower.value); + REQUIRE_FALSE(print.has_wipe_tower()); + CHECK_THAT(print.wipe_tower_data(1).depth, Catch::Matchers::WithinAbs(0., 1e-6)); + } + + SECTION("smooth timelapse prints one, and keeps enable_prime_tower on") { + DynamicPrintConfig config = tower_estimate_config("rib", 1); + config.set_deserialize_strict({ { "timelapse_type", "1" } }); + init_print({ cube(20) }, print, model, config); + REQUIRE(print.has_wipe_tower()); + CHECK(print.wipe_tower_data(1).depth > 0.f); + } +} + +TEST_CASE("A tower printed without a tool change is still validated against the bed", "[WipeTower]") +{ + // Wrapping detection prints a tower on a plate that purges one filament. Neither the old + // estimate (which read the wall type and smooth timelapse) nor the old containment gate (the + // filament count or smooth timelapse) knew about it, so between them that tower was never + // checked against the bed. + Print print; + Model model; + DynamicPrintConfig config = tower_estimate_config("rectangle", 1); + // Relative E without a per-layer G92 is rejected before the tower is ever looked at, and + // has_wipe_tower() wants a real exclusion polygon before it honours wrapping detection. + config.set_deserialize_strict({ { "enable_wrapping_detection", "1" }, + { "wrapping_exclude_area", "180x180,190x180,190x190,180x190" }, + { "wipe_tower_x", "500" }, { "wipe_tower_y", "500" }, { "use_relative_e_distances", "0" } }); + + init_print({ cube(20) }, print, model, config); + REQUIRE(print.extruders(true).size() == 1); + REQUIRE(print.has_wipe_tower()); + CHECK(print.wipe_tower_data(1).depth > 0.f); + CHECK_THAT(print.validate().string, Catch::Matchers::ContainsSubstring("printable area")); +} diff --git a/tests/libslic3r/CMakeLists.txt b/tests/libslic3r/CMakeLists.txt index ef42a5e897..185dce37da 100644 --- a/tests/libslic3r/CMakeLists.txt +++ b/tests/libslic3r/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(${_TEST_NAME}_tests test_arachne_walls.cpp test_arrange.cpp test_bambu_networking.cpp + test_buildvolume.cpp test_calib.cpp test_clipper_offset.cpp test_clipper_utils.cpp @@ -18,6 +19,7 @@ add_executable(${_TEST_NAME}_tests test_preset_setting_id.cpp test_preset_diff.cpp test_vendor_cache.cpp + test_preset_options.cpp test_elephant_foot_compensation.cpp test_fill_corner_smoothing.cpp test_filament_mixer.cpp @@ -28,15 +30,21 @@ add_executable(${_TEST_NAME}_tests test_polygon.cpp test_mutable_polygon.cpp test_mutable_priority_queue.cpp + test_minimum_spanning_tree.cpp test_nozzle_volume_type.cpp + test_step.cpp test_stl.cpp test_triangle_selector.cpp test_meshboolean.cpp test_marchingsquares.cpp + test_lay_on_face.cpp test_model.cpp test_utils.cpp test_timeutils.cpp test_voronoi.cpp + test_wipe_tower_estimate.cpp + test_wipe_tower.cpp + test_wipe_path.cpp test_optimizers.cpp test_ordering_strategies.cpp # test_png_io.cpp @@ -44,6 +52,17 @@ add_executable(${_TEST_NAME}_tests ../libnest2d/printer_parts.cpp ) +if (SLIC3R_CAD) + target_sources(${_TEST_NAME}_tests PRIVATE + test_caddocument.cpp + test_sketchconstraints.cpp + test_sketchedit.cpp + test_sketchprofile.cpp + test_sketchimport.cpp + test_sketchinference.cpp + test_slvs_constraints.cpp) +endif () + if (TARGET OpenVDB::openvdb) target_sources(${_TEST_NAME}_tests PRIVATE test_hollowing.cpp) endif() diff --git a/tests/libslic3r/test_3mf.cpp b/tests/libslic3r/test_3mf.cpp index 4c0a09cf3f..02d392140b 100644 --- a/tests/libslic3r/test_3mf.cpp +++ b/tests/libslic3r/test_3mf.cpp @@ -1,18 +1,24 @@ #include "libslic3r/Model.hpp" -#include "libslic3r/TriangleSelector.hpp" #include "libslic3r/Format/3mf.hpp" #include "libslic3r/Format/bbs_3mf.hpp" #include "libslic3r/Format/STL.hpp" +#include "libslic3r/miniz_extension.hpp" +#include "libslic3r/Zipper.hpp" #include "libslic3r/PrintConfig.hpp" #include "libslic3r/Semver.hpp" #include "libslic3r/Preset.hpp" #include "libslic3r/MultiNozzleUtils.hpp" #include "libslic3r/ProjectTask.hpp" +#include "libslic3r/PublishSettings.hpp" #include "test_utils.hpp" +#include + #include +#include +#include #include #include @@ -141,6 +147,236 @@ SCENARIO("Export+Import geometry to/from 3mf file cycle", "[3mf]") { } } +// The recipe is an opaque binary blob (CadDocument::serialize_recipe()), so the 3mf backend has +// to carry it byte-for-byte — no XML/text mangling, embedded NULs intact. +static std::string make_cad_recipe() +{ + // Built from an explicit length, not append(const char*), which would stop at the first + // embedded NUL — the one thing this blob exists to prove survives the archive. + static const char blob[] = "\x01" "RECIPE" "\0" "\xff\xfe\x00\x10" "cad-features-blob"; + return std::string(blob, sizeof(blob) - 1); +} + +static const std::string CAD_RECIPE_ENTRY = "Metadata/orca_cad.bin"; +static const std::string LEGACY_CAD_RECIPE_ENTRY = "Metadata/SnapOrca_cad.bin"; + +// Pulls one named entry out of a 3mf archive; false when it is absent. +static bool read_cad_recipe_entry(const std::string& path, std::string& out, + const std::string& entry = CAD_RECIPE_ENTRY) +{ + mz_zip_archive zip; + mz_zip_zero_struct(&zip); + REQUIRE(open_zip_reader(&zip, path)); + bool found = false; + mz_uint n = mz_zip_reader_get_num_files(&zip); + for (mz_uint i = 0; i < n; ++i) { + mz_zip_archive_file_stat st; + if (!mz_zip_reader_file_stat(&zip, i, &st)) continue; + std::string name(st.m_filename); + std::replace(name.begin(), name.end(), '\\', '/'); + if (boost::algorithm::iequals(name, entry)) { + out.resize(st.m_uncomp_size); + found = mz_zip_reader_extract_to_mem(&zip, i, out.data(), out.size(), 0) != 0; + break; + } + } + close_zip_reader(&zip); + return found; +} + +// Rewrites the archive at `path` with the recipe entry back under the name it had before the +// rename, which is what every project saved by an earlier build looks like on disk. Generated +// rather than checked in because a whole project archive is not frozen evidence the way a bare +// recipe blob is -- it has to be whatever today's exporter writes, with only the name aged. +// miniz cannot rename in place and open_zip_writer truncates, so the entries are held across +// the switch. +static void rename_cad_recipe_entry_to_legacy(const std::string& path) +{ + std::vector> entries; + bool renamed = false; + { + mz_zip_archive zip; + mz_zip_zero_struct(&zip); + REQUIRE(open_zip_reader(&zip, path)); + mz_uint n = mz_zip_reader_get_num_files(&zip); + for (mz_uint i = 0; i < n; ++i) { + mz_zip_archive_file_stat st; + REQUIRE(mz_zip_reader_file_stat(&zip, i, &st)); + if (st.m_is_directory) continue; + std::string name(st.m_filename); + std::replace(name.begin(), name.end(), '\\', '/'); + std::string data((size_t) st.m_uncomp_size, '\0'); + if (st.m_uncomp_size > 0) + REQUIRE(mz_zip_reader_extract_to_mem(&zip, i, data.data(), data.size(), 0)); + if (boost::algorithm::iequals(name, CAD_RECIPE_ENTRY)) { + name = LEGACY_CAD_RECIPE_ENTRY; + renamed = true; + } + entries.emplace_back(std::move(name), std::move(data)); + } + close_zip_reader(&zip); + } + // Without this the scenario would degrade silently into re-testing the new name if the + // exporter's constant ever moved again: every load below would still pass. + REQUIRE(renamed); + + Zipper out(path); + for (const auto& e : entries) + out.add_entry(e.first, e.second.data(), e.second.size()); + out.finalize(); +} + +// The recipe lives only in the BBS-native backend, because that is the only one that runs: +// store_bbs_3mf is the sole exporter the app calls, and 3mf.cpp's load_3mf is reached only for +// files fingerprinted as PrusaSlicer's, which never carry a recipe. This locks in both halves: +// the archive entry is at the exact path the importer looks for, and the recipe comes back +// through the real importer. +SCENARIO("CAD recipe is embedded in the BBS 3mf archive", "[3mf][CAD]") { + GIVEN("a model carrying a binary cad_recipe") { + Model model; + std::string src = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src.c_str(), &model)); + model.add_default_instances(); + + // store_bbs_3mf stages its metadata through the model's backup path; point it at a + // writable temp dir, as the sibling BBS scenarios do. The process-global + // set_temporary_dir() would leak into every test that ran afterwards. + ScopedTemporaryDir backup_dir("orca_cad"); + model.set_backup_path(backup_dir.string()); + + const std::string recipe = make_cad_recipe(); + model.cad_recipe = recipe; + + WHEN("saved through the BBS backend (the format the GUI uses)") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig cfg; + StoreParams sp; + sp.path = test_file.c_str(); + sp.model = &model; + sp.config = &cfg; + sp.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(sp)); + + THEN("the archive entry is present byte-for-byte") { + std::string got; + REQUIRE(read_cad_recipe_entry(test_file, got)); + REQUIRE(got.size() == recipe.size()); + REQUIRE(got == recipe); + } + + THEN("the importer restores it onto the loaded model") { + Model dst_model; + ScopedTemporaryDir dst_backup_dir("orca_cad_dst"); + dst_model.set_backup_path(dst_backup_dir.string()); + + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + REQUIRE(load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig)); + REQUIRE(dst_model.cad_recipe.size() == recipe.size()); + REQUIRE(dst_model.cad_recipe == recipe); + + release_PlateData_list(dst_plates); + } + } + + WHEN("the same model is saved with no recipe") { + model.cad_recipe.clear(); + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig cfg; + StoreParams sp; + sp.path = test_file.c_str(); + sp.model = &model; + sp.config = &cfg; + sp.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(sp)); + + THEN("no entry is written at all") { + std::string got; + REQUIRE_FALSE(read_cad_recipe_entry(test_file, got)); + } + } + } +} + +// The recipe entry was renamed from Metadata/SnapOrca_cad.bin to Metadata/orca_cad.bin. Nothing +// in the blob marks that move, so a reader that knows only the new name loads a project written +// before it with an empty cad_recipe and no error at all — a feature tree gone with no symptom +// but an empty Design tab. The importer must still accept the old name; the exporter may never +// write it. +SCENARIO("a project saved under the pre-rename recipe name still loads", "[3mf][CAD]") { + GIVEN("a project whose recipe entry carries the old name") { + Model model; + std::string src = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src.c_str(), &model)); + model.add_default_instances(); + const std::string recipe = make_cad_recipe(); + model.cad_recipe = recipe; + + WHEN("it was written by the BBS backend") { + ScopedTemporaryDir backup_dir("orca_cad_legacy"); + model.set_backup_path(backup_dir.string()); + + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + DynamicPrintConfig cfg; + StoreParams sp; + sp.path = test_file.c_str(); + sp.model = &model; + sp.config = &cfg; + sp.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(sp)); + rename_cad_recipe_entry_to_legacy(test_file); + + // Catch2 replays the enclosing sections per THEN, so one load here serves both. + Model dst_model; + ScopedTemporaryDir dst_backup_dir("orca_cad_legacy_dst"); + dst_model.set_backup_path(dst_backup_dir.string()); + + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + REQUIRE(load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig)); + release_PlateData_list(dst_plates); + + THEN("the recipe still comes back byte-for-byte") { + REQUIRE(dst_model.cad_recipe == recipe); + } + + THEN("re-saving migrates it to the new name and leaves the old one behind") { + ScopedTemporaryFile again(".3mf"); + const std::string resaved = again.string(); + DynamicPrintConfig cfg2; + StoreParams sp2; + sp2.path = resaved.c_str(); + sp2.model = &dst_model; + sp2.config = &cfg2; + sp2.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(sp2)); + + std::string got; + REQUIRE(read_cad_recipe_entry(resaved, got)); + REQUIRE(got == recipe); + REQUIRE_FALSE(read_cad_recipe_entry(resaved, got, LEGACY_CAD_RECIPE_ENTRY)); + } + } + } +} + // .3mf multi-nozzle round-trip. // Locks the load/save handling for the H2C multi-nozzle plate metadata: // * filament_volume_maps -> plate config "filament_volume_map" (with the >1 -> 0 clamp) @@ -499,7 +735,6 @@ SCENARIO("Nozzle-group metadata .3mf round-trip", "[3mf][MultiNozzle]") { } } - // A mixed-color filament occupies an ordinary filament slot, and painting with it stores an // ordinary extruder state: a project saved by BambuStudio encodes filament 5 of a 5-slot setup // as paint state 5, with the mix described by the parallel filament_mixed_* project arrays. @@ -590,3 +825,639 @@ SCENARIO("Mixed-color filament setup and painting round-trip through a .3mf", "[ } } } +// Locks the serialization contract of the "Publish" metadata: the orca_published flag and the +// orca_published_keys JSON array in model.model_info->metadata_items must survive a store_bbs_3mf -> +// load_bbs_3mf round-trip unchanged. (The full preset-preservation behavior is exercised +// headlessly in test_preset_bundle_loading.cpp.) +SCENARIO("Published 3MF round-trips the published flag and published_keys metadata", "[3mf]") { + GIVEN("a model carrying published metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = R"(["layer_height","wall_thickness"])"; + + // store_bbs_3mf stages project_settings.config through the model's backup path; point + // it at a writable temp dir (the default lives under a read-only root in CI). + ScopedTemporaryDir backup_dir("orca_pub"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the published metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height","wall_thickness"])"); + + // The orca_published_keys value is a JSON array of setting keys; it must parse back to + // the same keys that were selected. + nlohmann::json keys = nlohmann::json::parse(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG]); + REQUIRE(keys.is_array()); + REQUIRE(keys.size() == 2); + REQUIRE(keys[0] == "layer_height"); + REQUIRE(keys[1] == "wall_thickness"); + } + release_PlateData_list(dst_plates); + } + } +} + +// A normal 3MF (no Publish metadata) must load identically: the loader must not fabricate a +// "orca_published" flag or orca_published_keys for files that never carried them. +SCENARIO("Legacy 3MF without published metadata loads unchanged", "[3mf]") { + GIVEN("a model without any published metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + ScopedTemporaryDir backup_dir("orca_legacy"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("no published key is fabricated") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_TAG) == 0); + REQUIRE(dst_model.model_info->metadata_items.count(ORCA_PUBLISHED_KEYS_TAG) == 0); + } + release_PlateData_list(dst_plates); + } + } +} + +// Locks the serialization contract of the orca_published_material_keys metadata: the per-entry JSON +// must survive a store_bbs_3mf -> load_bbs_3mf round-trip verbatim, exactly like orca_published_keys. +SCENARIO("Published 3MF round-trips the published_material_keys metadata", "[3mf]") { + GIVEN("a model carrying published material keys metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + const std::string material_keys_json = + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99"},"slot":0,"keys":["filament_retraction_length","filament_z_hop"]}])"; + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = material_keys_json; + + ScopedTemporaryDir backup_dir("orca_pub_mat"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the published material keys metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] == material_keys_json); + + // The value must parse back to one material entry carrying the nested identity + // object, the author slot ordinal and the key list. + nlohmann::json entries = nlohmann::json::parse(material_keys_json); + REQUIRE(entries.is_array()); + REQUIRE(entries.size() == 1); + REQUIRE(entries[0]["material"]["filament_type"] == "PLA"); + REQUIRE(entries[0]["material"]["filament_vendor"] == "Generic"); + REQUIRE(entries[0]["material"]["filament_id"] == "GFL99"); + REQUIRE(entries[0]["slot"] == 0); + REQUIRE(entries[0]["keys"].is_array()); + REQUIRE(entries[0]["keys"].size() == 2); + REQUIRE(entries[0]["keys"][0] == "filament_retraction_length"); + } + release_PlateData_list(dst_plates); + } + } +} + +SCENARIO("Minimal published 3MF omits project config, preset dumps and slicer tags", "[3mf]") { + GIVEN("a multi-instance model carrying published metadata and a published_config payload") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + // A second instance: tag-less third-party files get their multi-instance objects split, + // published files must not (the loader recognizes them by their metadata). + model.objects.front()->add_instance(); + + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.set_key_value("layer_height", new ConfigOptionFloat(0.24)); + full_cfg.set_key_value("retraction_length", new ConfigOptionFloats({ 1.2 })); + + const std::vector published_keys = { "layer_height", "retraction_length" }; + const std::vector material_keys = { + { "PLA", "Generic", "GFL99", "", "Generic PLA", 0, { "filament_retraction_length" } } + }; + + // The payload builder keeps the published and identity keys and drops everything else. + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, published_keys, material_keys); + REQUIRE(filtered_cfg.option("layer_height") != nullptr); + REQUIRE(filtered_cfg.option("retraction_length") != nullptr); + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + REQUIRE(filtered_cfg.option("filament_type") != nullptr); + REQUIRE(filtered_cfg.option("wipe_tower_x") != nullptr); + REQUIRE(filtered_cfg.option("sparse_infill_density") == nullptr); + REQUIRE(filtered_cfg.option("machine_start_gcode") == nullptr); + + // Serialize the payload exactly like export_published_3mf does. + std::string payload; + for (const std::string &key : filtered_cfg.keys()) + payload += key + " = " + filtered_cfg.opt_serialize(key) + "\n"; + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = R"(["layer_height","retraction_length"])"; + model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] = payload; + + ScopedTemporaryDir backup_dir("orca_min_pub"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored using SaveStrategy::MinimalPublished and reloaded") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + // Create a fake project preset to verify MinimalPublished omits it. + Preset preset(Preset::TYPE_PRINT, "TestPrintPreset"); + preset.config = full_cfg; + std::vector project_presets = { &preset }; + + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &filtered_cfg; + store_params.project_presets = project_presets; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + ScopedTemporaryDir loaded_backup_dir("orca_min_pub_loaded"); + dst_model.set_backup_path(loaded_backup_dir.string()); + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector loaded_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &loaded_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the 3MF loads without project config or embedded presets") { + REQUIRE(loaded); + REQUIRE(dst_config.empty()); + REQUIRE(loaded_presets.empty()); + } + THEN("the file carries no slicer tags and classifies as a generic 3MF") { + REQUIRE_FALSE(is_bbl_3mf); + REQUIRE_FALSE(is_orca_3mf); + // No Application / OrcaSlicer tag: old receivers import the geometry silently + // instead of showing a baked-in, wrong "old version" popup. + REQUIRE_FALSE(file_version.valid()); + } + THEN("the geometry keeps BBS-grade handling: instances are not split") { + REQUIRE(dst_model.objects.size() == 1); + REQUIRE(dst_model.objects.front()->instances.size() == 2); + } + THEN("the published metadata and payload round-trip unchanged") { + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height","retraction_length"])"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG] == payload); + } + THEN("the payload parses back to the published values") { + DynamicPrintConfig parsed_payload; + parsed_payload.load_from_ini_string(dst_model.model_info->metadata_items[ORCA_PUBLISHED_CONFIG_TAG], ForwardCompatibilitySubstitutionRule::Enable); + REQUIRE(parsed_payload.option("layer_height") != nullptr); + REQUIRE_THAT(parsed_payload.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.24, 1e-6)); + REQUIRE(parsed_payload.option("retraction_length") != nullptr); + REQUIRE_THAT(parsed_payload.opt("retraction_length")->get_at(0), Catch::Matchers::WithinAbs(1.2, 1e-6)); + } + release_PlateData_list(dst_plates); + } + } +} + +// A minimal published 3MF must not leak the slicer tags of the source project. The exporter seeds +// metadata_item_map from the input file's metadata_items, so re-publishing a project opened from a +// regular Orca/BBS 3MF (the typical remix flow) must strip the Application / OrcaSlicer tags it +// came with, otherwise old receivers route onto the baked-in "old version" popup. +SCENARIO("MinimalPublished strips slicer tags carried by the source project", "[3mf]") { + GIVEN("a model loaded from a regular Orca/BBS 3MF whose metadata carries the slicer tags") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = "1"; + model.model_info->metadata_items["Application"] = "BambuStudio-2.0.0"; + model.model_info->metadata_items["OrcaSlicer"] = "2.1.0"; + + ScopedTemporaryDir backup_dir("orca_strip_tags"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored using SaveStrategy::MinimalPublished and reloaded") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence | SaveStrategy::MinimalPublished; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector loaded_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &loaded_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the source slicer tags are stripped, not carried through") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items.count("Application") == 0); + REQUIRE(dst_model.model_info->metadata_items.count("OrcaSlicer") == 0); + // The published marker itself must survive. + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "1"); + } + THEN("the file classifies as a generic 3MF without a version popup") { + REQUIRE_FALSE(is_bbl_3mf); + REQUIRE_FALSE(is_orca_3mf); + REQUIRE_FALSE(file_version.valid()); + } + release_PlateData_list(dst_plates); + } + } +} + +// An entry masks the non-published slots to their defaults so publishing slot 1 never leaks slot +// 0's value into the file. Both a full entry (the whole-slot key list) and a partial entry (a +// per-slot key) go through the same masking path in filter_published_config (keys and full_keys +// are filtered identically), so the two forms are exercised together. +SCENARIO("Published entries mask the other slots to their defaults", "[3mf]") { + const bool full = GENERATE(true, false); + GIVEN("a full print configuration with two filament slots") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222" }; + // filament_flow_ratio carries a non-empty option default (1.0) of the same type, so the + // mask can restore it on the non-published slot. + full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; + + WHEN("filtering with a published entry for slot 1") { + PublishedMaterialEntry entry; + entry.slot = 1; + if (full) { + entry.full = true; + entry.full_keys = { "filament_flow_ratio" }; + } else { + entry.keys = { "filament_flow_ratio" }; + } + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { entry }); + + THEN("the selected key is present with the author's slot value") { + REQUIRE(filtered_cfg.option("filament_flow_ratio") != nullptr); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); + } + THEN("the non-published slot is masked to its default") { + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + +// A key needing slot masking that cannot be masked (no registered option default of the same +// type) is dropped from the payload entirely instead of shipping the author's whole vector. +SCENARIO("Unmaskable keys are dropped from the published payload instead of leaking", "[3mf]") { + GIVEN("a config carrying a synthetic def-less vector key and a maskable one") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222" }; + // Not a PrintConfig key: print_config_def has no default to mask with. + full_cfg.set_key_value("orca_synthetic_setting", new ConfigOptionFloats({ 9.9, 8.8 })); + full_cfg.opt("filament_flow_ratio", true)->values = { 1.02, 0.98 }; + + PublishedMaterialEntry partial_entry; + partial_entry.slot = 1; + partial_entry.keys = { "orca_synthetic_setting", "filament_flow_ratio" }; + + WHEN("filtering with a partial entry for slot 1") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { partial_entry }); + + THEN("the unmaskable synthetic key is not published") { + REQUIRE(filtered_cfg.option("orca_synthetic_setting") == nullptr); + } + THEN("the maskable key is present, author slot kept, other slot masked") { + REQUIRE(filtered_cfg.opt("filament_flow_ratio") != nullptr); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[1], Catch::Matchers::WithinAbs(0.98, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("filament_flow_ratio")->values[0], Catch::Matchers::WithinAbs(1.0, 1e-6)); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + +// A per-extruder printer key carrying a "#N" variant (e.g. retraction_length#1) must not serialize +// every extruder's value: the base is masked to the author's extruder and the other slots are +// restored to their option default, matching the material-side slot-masking invariant. A bare +// printer base key (no variant) keeps whole-vector serialization. +SCENARIO("Published per-extruder printer keys mask the other extruders to their defaults", "[3mf]") { + GIVEN("a full print configuration with three extruders carrying per-extruder retraction values") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + // Non-default values on the un-selected slots, so a leak is distinguishable from the mask + // restoring the option default (retraction_length defaults to {0.8}). + full_cfg.opt("retraction_length")->values = { 3.0, 1.2, 4.0 }; + + WHEN("filtering with only extruder 1's retraction_length checked") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, { "retraction_length#1" }, {}); + + THEN("the author's extruder value survives") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[1], Catch::Matchers::WithinAbs(1.2, 1e-6)); + } + THEN("the other extruders are masked to their default") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[0], Catch::Matchers::WithinAbs(0.8, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[2], Catch::Matchers::WithinAbs(0.8, 1e-6)); + } + } + WHEN("filtering the bare base key without a '#N' variant") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, { "retraction_length" }, {}); + + THEN("the whole vector is serialized unmasked") { + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[0], Catch::Matchers::WithinAbs(3.0, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[1], Catch::Matchers::WithinAbs(1.2, 1e-6)); + REQUIRE_THAT(filtered_cfg.opt("retraction_length")->values[2], Catch::Matchers::WithinAbs(4.0, 1e-6)); + } + } + } +} + +// The extended per-entry fields (full dump list, published type and colour) travel inside the +// published_material_keys metadata and round-trip unchanged. +SCENARIO("Published 3MF round-trips the extended material metadata", "[3mf]") { + GIVEN("a model carrying extended published material keys metadata") { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + + const std::string material_keys_json = + R"([{"material":{"filament_type":"PLA","filament_vendor":"Generic","filament_id":"GFL99","setting_id":"RFs9eCKYOMUSmvZf","name":"Generic PLA Matte @System"},"slot":1,"keys":[],"full":true,"full_keys":["filament_retraction_length","filament_colour"],"publish_type":true,"type":"PLA","publish_color":false,"color":""}])"; + + model.model_info = std::make_shared(); + model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] = material_keys_json; + + ScopedTemporaryDir backup_dir("orca_pub_mat2"); + model.set_backup_path(backup_dir.string()); + + WHEN("stored to and reloaded from a .3mf") { + ScopedTemporaryFile temp(".3mf"); + const std::string test_file = temp.string(); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = test_file.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + bool loaded = load_bbs_3mf(test_file.c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig); + THEN("the extended material metadata round-trips unchanged") { + REQUIRE(loaded); + REQUIRE(dst_model.model_info != nullptr); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_MATERIAL_TAG] == material_keys_json); + + // The value must parse back with every extended field intact. + nlohmann::json entries = nlohmann::json::parse(material_keys_json); + REQUIRE(entries.is_array()); + REQUIRE(entries.size() == 1); + REQUIRE(entries[0]["full"].get() == true); + REQUIRE(entries[0]["full_keys"].is_array()); + REQUIRE(entries[0]["full_keys"].size() == 2); + REQUIRE(entries[0]["publish_type"].get() == true); + REQUIRE(entries[0]["type"] == "PLA"); + REQUIRE(entries[0]["publish_color"].get() == false); + } + release_PlateData_list(dst_plates); + } + } +} + +// A published mixed filament serializes its whole definition (components, ratios, gradient) +// masked to the author's slot: the mix slot's values survive, the non-published slots reset to +// their defaults, so a partial publish never leaks another slot's mix data. +SCENARIO("Published mixed-filament keys are masked to the author's slot", "[3mf]") { + GIVEN("a full print configuration with three slots, one of them mixed") { + DynamicPrintConfig full_cfg = DynamicPrintConfig::full_print_config(); + full_cfg.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + full_cfg.opt("filament_colour")->values = { "#111111", "#222222", "#333333" }; + full_cfg.opt("filament_is_mixed")->values = { 0, 0, 1 }; + full_cfg.opt("filament_mixed_components")->values = { "", "", "1,2" }; + full_cfg.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + full_cfg.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + full_cfg.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + full_cfg.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + full_cfg.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + + PublishedMaterialEntry mix_entry; + mix_entry.slot = 2; + mix_entry.keys = { + "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" + }; + + WHEN("filtering with a mixed entry for slot 2") { + DynamicPrintConfig filtered_cfg = filter_published_config(full_cfg, {}, { mix_entry }); + + THEN("the author's mixed slot keeps its definition") { + REQUIRE(filtered_cfg.option("filament_is_mixed") != nullptr); + REQUIRE(filtered_cfg.opt("filament_is_mixed")->values == std::vector{ 0, 0, 1 }); + const auto& components = filtered_cfg.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + CHECK(filtered_cfg.opt("filament_mixed_sublayer_ratios")->values[2] == "0.6,0.4"); + CHECK(filtered_cfg.opt("filament_mixed_gradient_curve")->values[2] == "0,0.1|1,0.9"); + CHECK(filtered_cfg.opt("filament_mixed_gradient")->values[2]); + CHECK(filtered_cfg.opt("filament_mixed_gradient_per_part")->values[2]); + } + THEN("the non-published slots are masked to their defaults") { + CHECK(filtered_cfg.opt("filament_mixed_components")->values[0] == ""); + CHECK(filtered_cfg.opt("filament_mixed_components")->values[1] == ""); + CHECK(filtered_cfg.opt("filament_is_mixed")->values[0] == 0); + CHECK(filtered_cfg.opt("filament_is_mixed")->values[1] == 0); + } + THEN("the identity keys stay present") { + REQUIRE(filtered_cfg.option("filament_colour") != nullptr); + } + } + } +} + +// The published flag is gated on the exact string "1": any other serialized value means "not +// published", so a receiver never treats a file as published on a loose truthiness check. +TEST_CASE("is_published_3mf_flag accepts only the literal \"1\"", "[3mf]") { + CHECK(is_published_3mf_flag("1")); + CHECK_FALSE(is_published_3mf_flag("0")); + CHECK_FALSE(is_published_3mf_flag("false")); + CHECK_FALSE(is_published_3mf_flag("true")); + CHECK_FALSE(is_published_3mf_flag("")); + CHECK_FALSE(is_published_3mf_flag("YES")); +} + +// bbs_3mf_is_published is the lightweight metadata probe used to decide whether a file was +// produced by the publish feature (GUI "recently published" tracking). It must return true only +// for a file whose metadata carries the flag set to "1", and false for legacy files and for a +// file whose flag is present but not "1" (which loads as a normal, non-published 3MF). +SCENARIO("bbs_3mf_is_published detects only genuinely published 3MFs", "[3mf]") { + auto store_model = [](const std::string &path, const std::string &flag_value, const std::string &keys_value) { + Model model; + std::string src_file = std::string(TEST_DATA_DIR) + "/test_3mf/Prusa.stl"; + REQUIRE(load_stl(src_file.c_str(), &model)); + model.add_default_instances(); + model.model_info = std::make_shared(); + // An empty flag_value means "don't write the flag at all" (a legacy file). + if (!flag_value.empty()) + model.model_info->metadata_items[ORCA_PUBLISHED_TAG] = flag_value; + model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] = keys_value; + ScopedTemporaryDir backup_dir("orca_is_pub"); + model.set_backup_path(backup_dir.string()); + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + StoreParams store_params; + store_params.path = path.c_str(); + store_params.model = &model; + store_params.config = &config; + store_params.strategy = SaveStrategy::Zip64 | SaveStrategy::Silence; + REQUIRE(store_bbs_3mf(store_params)); + }; + + GIVEN("a minimal published 3MF whose flag is \"1\"") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "1", R"(["layer_height"])"); + WHEN("probed by bbs_3mf_is_published") { + THEN("it is recognized as published") { + CHECK(bbs_3mf_is_published(temp.string())); + } + } + } + GIVEN("a legacy 3MF without any published flag") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "", R"(["layer_height"])"); + WHEN("probed by bbs_3mf_is_published") { + THEN("it is not recognized as published") { + CHECK_FALSE(bbs_3mf_is_published(temp.string())); + } + } + } + GIVEN("a 3MF carrying the flag set to \"0\"") { + ScopedTemporaryFile temp(".3mf"); + store_model(temp.string(), "0", R"(["layer_height"])"); + WHEN("probed and loaded") { + THEN("it is not recognized as published") { + CHECK_FALSE(bbs_3mf_is_published(temp.string())); + } + THEN("it loads as a normal, non-published 3MF") { + Model dst_model; + DynamicPrintConfig dst_config; + ConfigSubstitutionContext ctxt{ ForwardCompatibilitySubstitutionRule::Enable }; + PlateDataPtrs dst_plates; + std::vector project_presets; + bool is_bbl_3mf = false, is_orca_3mf = false; + Semver file_version; + REQUIRE(load_bbs_3mf(temp.string().c_str(), &dst_config, &ctxt, &dst_model, &dst_plates, + &project_presets, &is_bbl_3mf, &is_orca_3mf, &file_version, nullptr, + LoadStrategy::LoadModel | LoadStrategy::LoadConfig)); + REQUIRE(dst_model.model_info != nullptr); + // The key is present but not "1", so nothing treats the file as published; the + // stored keys still round-trip verbatim. + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_TAG] == "0"); + REQUIRE(dst_model.model_info->metadata_items[ORCA_PUBLISHED_KEYS_TAG] == R"(["layer_height"])"); + release_PlateData_list(dst_plates); + } + } + } +} + diff --git a/tests/libslic3r/test_arachne_walls.cpp b/tests/libslic3r/test_arachne_walls.cpp index 4ca18400af..2b6580ed11 100644 --- a/tests/libslic3r/test_arachne_walls.cpp +++ b/tests/libslic3r/test_arachne_walls.cpp @@ -22,6 +22,8 @@ #include "libslic3r/Arachne/utils/ExtrusionLine.hpp" #include "libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.hpp" #include "libslic3r/Arachne/BeadingStrategy/BeadingStrategy.hpp" +#include "libslic3r/Feature/FuzzySkin/FuzzySkin.hpp" +#include "libslic3r/Flow.hpp" #include "libslic3r/Polygon.hpp" #include "libslic3r/ExPolygon.hpp" #include "libslic3r/ClipperUtils.hpp" @@ -309,3 +311,71 @@ TEST_CASE("Beading interpolation tolerates a thicker side with fewer insets", "[ CHECK(result.bead_widths[i] == expected.bead_widths[i]); } } + +namespace { + +// Closed 20 mm square loop at a uniform width. +Arachne::ExtrusionJunctions square_loop(coord_t width) +{ + const coord_t s = scaled(20.); + return {{Point(0, 0), width, 0}, {Point(s, 0), width, 0}, {Point(s, s), width, 0}, {Point(0, s), width, 0}, {Point(0, 0), width, 0}}; +} + +FuzzySkinConfig thick_fuzzy_config(FuzzySkinMode mode, NoiseType noise_type, double thickness_mm) +{ + FuzzySkinConfig cfg{}; + cfg.type = FuzzySkinType::All; + cfg.thickness = scaled(thickness_mm); + cfg.point_distance = scaled(0.3); + cfg.fuzzy_first_layer = true; + cfg.noise_type = noise_type; + cfg.noise_scale = 1.0; + cfg.noise_octaves = 4; + cfg.noise_persistence = 0.5; + cfg.mode = mode; + cfg.layer_id = 5; + return cfg; +} + +} // namespace + +// Extrusion and Combined mode add noise to each junction's width. A junction narrower than +// height * (1 - PI/4) makes Flow::rounded_rectangle_extrusion_spacing() throw and fails the slice. +// The fuzz thickness is 3x the line width so the clamp is hit on every run regardless of RNG seed. +// Ridged multifractal is covered because its output is not bounded to [-1, 1], so it scales past +// the configured thickness; the floor has to hold for any noise value, not just an in-range one. +TEST_CASE("Fuzzy skin extrusion width is floored at the minimum the flow accepts", "[Arachne][FuzzySkin]") { + using namespace Slic3r::Feature::FuzzySkin; + + const double layer_height = GENERATE(0.08, 0.2, 0.28); + const auto mode = GENERATE(FuzzySkinMode::Extrusion, FuzzySkinMode::Combined); + const auto noise_type = GENERATE(NoiseType::Classic, NoiseType::Perlin, NoiseType::Billow, NoiseType::RidgedMulti, NoiseType::Voronoi); + CAPTURE(layer_height, int(mode), int(noise_type)); + + const double line_width_mm = 0.42; + auto loop = square_loop(scaled(line_width_mm)); + fuzzy_extrusion_line(loop, /*slice_z*/ 1.0, layer_height, thick_fuzzy_config(mode, noise_type, 3 * line_width_mm)); + + REQUIRE(loop.size() > 100); + + const auto narrowest = std::min_element(loop.begin(), loop.end(), [](const auto& a, const auto& b) { return a.w < b.w; }); + const double narrowest_mm = unscaled(narrowest->w); + const double floor_mm = layer_height * (1. - 0.25 * PI); + CAPTURE(narrowest_mm, floor_mm); + + CHECK(narrowest_mm < line_width_mm); // the clamp was exercised + CHECK(narrowest_mm > floor_mm); + CHECK_NOTHROW(Flow::rounded_rectangle_extrusion_spacing(float(narrowest_mm), float(layer_height))); +} + +// Displacement mode only moves points; widths must pass through unchanged. +TEST_CASE("Fuzzy skin displacement mode leaves widths untouched", "[Arachne][FuzzySkin]") { + using namespace Slic3r::Feature::FuzzySkin; + + const coord_t width = scaled(0.42); + auto loop = square_loop(width); + fuzzy_extrusion_line(loop, /*slice_z*/ 1.0, /*layer_height*/ 0.2, thick_fuzzy_config(FuzzySkinMode::Displacement, NoiseType::Classic, 1.26)); + + REQUIRE(loop.size() > 100); + CHECK(std::all_of(loop.begin(), loop.end(), [width](const auto& j) { return j.w == width; })); +} diff --git a/tests/libslic3r/test_arrange.cpp b/tests/libslic3r/test_arrange.cpp index a9fb51e352..3906cba8ba 100644 --- a/tests/libslic3r/test_arrange.cpp +++ b/tests/libslic3r/test_arrange.cpp @@ -4,6 +4,8 @@ #include "libslic3r/BoundingBox.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/ExPolygon.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/PrintConfig.hpp" using namespace Slic3r; using namespace Slic3r::arrangement; @@ -24,11 +26,13 @@ ArrangePolygon make_square(coord_t side) return ap; } -ArrangePolygons squares(int n, double side_mm) +ArrangePolygons squares(int n, double side_mm, double height_mm = 0.) { ArrangePolygons items; - for (int i = 0; i < n; ++i) + for (int i = 0; i < n; ++i) { items.emplace_back(make_square(scaled(side_mm))); + items.back().height = height_mm; + } return items; } @@ -82,6 +86,38 @@ void require_no_overlap(const ArrangePolygons &items) REQUIRE(disjoint(placed_shapes(items))); } +// The sequential-print floor is chosen by comparing object height against the nozzle, +// so the two are defined together and every expectation is derived from them. +constexpr double NOZZLE_HEIGHT_MM = 2.5; +constexpr double CLEARANCE_MM = 30.; +constexpr double NOZZLE_FLOOR_MM = MAX_OUTER_NOZZLE_DIAMETER / 2.; + +ArrangeParams seq_print_params(coord_t min_dist) +{ + ArrangeParams p = quiet_params(min_dist); + p.is_seq_print = true; + p.clearance_radius = float(CLEARANCE_MM); + p.nozzle_height = float(NOZZLE_HEIGHT_MM); + p.object_skirt_offset = 0.f; + return p; +} + +// update_selected_items_inflation reads the bed out of the config to cap inflation. +DynamicPrintConfig bed_config() +{ + DynamicPrintConfig c; + c.set_key_value("printable_area", new ConfigOptionPoints{{0, 0}, {200, 0}, {200, 200}, {0, 200}}); + return c; +} + +ArrangePolygons squares_of_heights(const std::vector &heights_mm) +{ + ArrangePolygons items; + for (double height_mm : heights_mm) + items.push_back(squares(1, 20., height_mm).front()); + return items; +} + } // namespace // Prove the overlap check the other tests rely on actually detects overlap. @@ -222,3 +258,61 @@ TEST_CASE("Arrange aligns the pile to a custom center", "[Arrange]") REQUIRE(ap.bed_idx == 0); require_no_overlap(items); } + +TEST_CASE("Sequential print floors the object distance by object height", "[Arrange]") +{ + // The only place sequential-print clearance is enforced. The arrange menu offers + // no floor of its own, so a stored 0 has to be raised here or not at all. + struct Case + { + std::string description; + std::vector heights; + double skirt_offset_mm; + double expected_floor_mm; + }; + + auto c = GENERATE(values({ + {"objects taller than the nozzle need the full clearance", {NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}, 0., CLEARANCE_MM}, + {"an object exactly at the nozzle height counts as tall", {NOZZLE_HEIGHT_MM, NOZZLE_HEIGHT_MM}, 0., CLEARANCE_MM}, + {"one tall object among short ones is enough", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM * 2}, 0., CLEARANCE_MM}, + {"objects the nozzle clears keep only the nozzle-width floor", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM / 2}, 0., NOZZLE_FLOOR_MM}, + {"a wide skirt raises the floor for short objects", {NOZZLE_HEIGHT_MM / 2, NOZZLE_HEIGHT_MM / 2}, 3., 6.}, + })); + + DYNAMIC_SECTION(c.description) + { + ArrangePolygons items = squares_of_heights(c.heights); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(0); + p.object_skirt_offset = float(c.skirt_offset_mm); + + update_selected_items_inflation(items, &cfg, p); + + CHECK(p.min_obj_distance >= scaled(c.expected_floor_mm)); + CHECK(p.min_obj_distance <= scaled(c.expected_floor_mm + 0.01)); + // Half each, so a pair ends up a full min_obj_distance apart. + CHECK(items.front().inflation == p.min_obj_distance / 2); + } +} + +TEST_CASE("Sequential print keeps an object distance already above the floor", "[Arrange]") +{ + const coord_t stored = scaled(CLEARANCE_MM * 2); + ArrangePolygons items = squares_of_heights({NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(stored); + + update_selected_items_inflation(items, &cfg, p); + CHECK(p.min_obj_distance == stored); +} + +TEST_CASE("Layered printing does not floor the object distance", "[Arrange]") +{ + ArrangePolygons items = squares_of_heights({NOZZLE_HEIGHT_MM * 2, NOZZLE_HEIGHT_MM * 2}); + DynamicPrintConfig cfg = bed_config(); + ArrangeParams p = seq_print_params(0); + p.is_seq_print = false; + + update_selected_items_inflation(items, &cfg, p); + CHECK(p.min_obj_distance == 0); +} diff --git a/tests/libslic3r/test_buildvolume.cpp b/tests/libslic3r/test_buildvolume.cpp new file mode 100644 index 0000000000..b2e8040d68 --- /dev/null +++ b/tests/libslic3r/test_buildvolume.cpp @@ -0,0 +1,40 @@ +#include + +#include "libslic3r/BuildVolume.hpp" + +using namespace Slic3r; + +static std::vector rect_area(double w, double d) +{ + return { { 0., 0. }, { w, 0. }, { w, d }, { 0., d } }; +} + +// extruder_printable_height and extruder_printable_area are independent config options, so a +// profile can leave the heights short. BuildVolume must not index past the end of the heights. +TEST_CASE("BuildVolume falls back to the bed height when extruder_printable_height is short", "[BuildVolume]") +{ + const std::vector bed = rect_area(200., 200.); + const std::vector> areas = { rect_area(200., 200.), rect_area(100., 200.) }; + const std::vector heights = { 180. }; + + const BuildVolume build_volume(bed, 250., areas, heights); + + REQUIRE(build_volume.get_extruder_area_count() == 2); + // The extruder with a height of its own keeps it, and differs from the bed, so it gets its own volume. + CHECK_THAT(build_volume.get_extruder_area_volume(0).bboxf.max.z(), Catch::Matchers::WithinAbs(180., 1e-6)); + // The extruder without one falls back to the bed's printable_height instead of reading out of range. + CHECK_THAT(build_volume.get_extruder_area_volume(1).bboxf.max.z(), Catch::Matchers::WithinAbs(250., 1e-6)); +} + +TEST_CASE("BuildVolume keeps per-extruder heights when both vectors match", "[BuildVolume]") +{ + const std::vector bed = rect_area(200., 200.); + const std::vector> areas = { rect_area(120., 200.), rect_area(100., 200.) }; + const std::vector heights = { 180., 200.5 }; + + const BuildVolume build_volume(bed, 250., areas, heights); + + REQUIRE(build_volume.get_extruder_area_count() == 2); + CHECK_THAT(build_volume.get_extruder_area_volume(0).bboxf.max.z(), Catch::Matchers::WithinAbs(180., 1e-6)); + CHECK_THAT(build_volume.get_extruder_area_volume(1).bboxf.max.z(), Catch::Matchers::WithinAbs(200.5, 1e-6)); +} diff --git a/tests/libslic3r/test_caddocument.cpp b/tests/libslic3r/test_caddocument.cpp new file mode 100644 index 0000000000..d69ada09b6 --- /dev/null +++ b/tests/libslic3r/test_caddocument.cpp @@ -0,0 +1,8414 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) + +// Substring assertions, spelled so this file compiles UNCHANGED on both forks. +// Catch2 v2 (Snapmaker) spells it Matchers::Contains; v3 (orca_cad / mainline) spells it +// Matchers::ContainsSubstring and gives Contains an incompatible meaning — range-contains- +// ELEMENT — which fails to compile against a std::string rather than failing a test. +// Using find() sidesteps the rename entirely; INFO keeps the actual string in the report. +#define REQUIRE_CONTAINS(str, sub) \ + do { const std::string _actual = (str); INFO("actual: " << _actual); \ + REQUIRE(_actual.find(sub) != std::string::npos); } while (0) +#define CHECK_CONTAINS(str, sub) \ + do { const std::string _actual = (str); INFO("actual: " << _actual); \ + CHECK(_actual.find(sub) != std::string::npos); } while (0) + +#include "libslic3r/CAD/CadDocument.hpp" +#include "libslic3r/CAD/GeometryEngine.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" +#include "libslic3r/CAD/SketchImport.hpp" +#include "libslic3r/CAD/ThreadStandards.hpp" +#include "libslic3r/Utils.hpp" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace Slic3r; +using Catch::Approx; // Catch2 v3 scopes Approx under Catch:: (v2 had it unqualified) + +TEST_CASE("CadDocument profile sketch -> extrude -> solid", "[CadDocument]") +{ + CadDocument doc; + + SketchProfile sp; + sp.points.push_back(Vec2d(-10, -10)); + sp.points.push_back(Vec2d( 10, -10)); + sp.points.push_back(Vec2d( 10, 10)); + sp.points.push_back(Vec2d(-10, 10)); + sp.closed = true; + + int sk_idx = doc.add_sketch_profile(sp, SketchPlane::XY(), "SquareProfile"); + REQUIRE(sk_idx >= 0); + doc.add_extrude(sk_idx, 5.0, false, BooleanMode::New, "Extrude1"); + + bool ok = doc.recompute(); + REQUIRE(ok); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); +} + +TEST_CASE("CadDocument legacy Rectangle sketch still works", "[CadDocument]") +{ + CadDocument doc; + + int sk_idx = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "RectSketch"); + REQUIRE(sk_idx >= 0); + doc.add_extrude(sk_idx, 5.0, false, BooleanMode::New, "Extrude1"); + + bool ok = doc.recompute(); + REQUIRE(ok); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); +} + +TEST_CASE("CadDocument preview with profile on self-contained candidate", "[CadDocument]") +{ + CadDocument doc; + + CadFeature candidate; + candidate.type = CadFeatureType::Extrude; + candidate.plane = SketchPlane::XY(); + candidate.distance = 4; + candidate.mode = BooleanMode::New; + // sketch_ref is -1 by default -> apply_feature uses candidate's own params + + SketchProfile tri; + tri.points.push_back(Vec2d(0, 0)); + tri.points.push_back(Vec2d(10, 0)); + tri.points.push_back(Vec2d(5, 8.66)); + tri.closed = true; + candidate.profile = tri; + + TriangleMesh mesh; + std::string err; + bool ok = doc.preview(candidate, mesh, err); + REQUIRE(ok); + REQUIRE(mesh.facets_count() > 0); +} + +TEST_CASE("CadDocument solve_sketch_feature snaps a rough quad to a rectangle", "[CadDocument]") +{ + CadDocument doc; + SketchProfile sp; + sp.points = { Vec2d(0,0), Vec2d(8,1), Vec2d(9,5), Vec2d(-1,4) }; + sp.closed = true; + int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "S"); + + auto& cons = doc.features[sk].constraints; + cons.push_back({SketchConstraintType::Fix, 0,-1,-1,-1, 0}); + cons.push_back({SketchConstraintType::LockX, 0,-1,-1,-1, 0}); + cons.push_back({SketchConstraintType::LockY, 0,-1,-1,-1, 0}); + cons.push_back({SketchConstraintType::Horizontal, 0, 1,-1,-1, 0}); + cons.push_back({SketchConstraintType::Vertical, 1, 2,-1,-1, 0}); + cons.push_back({SketchConstraintType::Horizontal, 2, 3,-1,-1, 0}); + cons.push_back({SketchConstraintType::Vertical, 3, 0,-1,-1, 0}); + cons.push_back({SketchConstraintType::Distance, 0, 1,-1,-1, 10}); + cons.push_back({SketchConstraintType::Distance, 1, 2,-1,-1, 6}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& pts = doc.features[sk].profile.points; + REQUIRE_THAT(pts[1].x(), Catch::Matchers::WithinAbs(10.0, 1e-3)); + REQUIRE_THAT(pts[1].y(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE_THAT(pts[2].x(), Catch::Matchers::WithinAbs(10.0, 1e-3)); + REQUIRE_THAT(pts[2].y(), Catch::Matchers::WithinAbs(6.0, 1e-3)); + REQUIRE_THAT(pts[3].x(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE_THAT(pts[3].y(), Catch::Matchers::WithinAbs(6.0, 1e-3)); + + // the solved profile still extrudes into a solid + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.display_mesh.facets_count() > 0); +} + +TEST_CASE("sketch entities -> wire -> extrude", "[CadDocument]") +{ + SECTION("square from 4 lines") { + CadDocument doc; + + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "square"; + sk.plane = SketchPlane::XY(); + sk.entities = { + {SketchEntity::Type::Line, Vec2d(-10,-10), Vec2d(10,-10)}, + {SketchEntity::Type::Line, Vec2d(10,-10), Vec2d(10,10)}, + {SketchEntity::Type::Line, Vec2d(10,10), Vec2d(-10,10)}, + {SketchEntity::Type::Line, Vec2d(-10,10), Vec2d(-10,-10)}, + }; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "extrude"; + ex.sketch_ref = 0; + ex.distance = 5; + ex.mode = BooleanMode::New; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto bb = doc.display_mesh.bounding_box(); + auto sz = bb.max - bb.min; + REQUIRE(std::abs(sz.x() - 20.0) < 0.5); + REQUIRE(std::abs(sz.y() - 20.0) < 0.5); + REQUIRE(std::abs(sz.z() - 5.0) < 0.5); + } + + SECTION("single circle") { + CadDocument doc; + + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "circle"; + sk.plane = SketchPlane::XY(); + sk.entities = { + {SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 10.0}, + }; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "extrude"; + ex.sketch_ref = 0; + ex.distance = 8; + ex.mode = BooleanMode::New; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto bb = doc.display_mesh.bounding_box(); + auto sz = bb.max - bb.min; + REQUIRE(std::abs(sz.x() - 20.0) < 0.5); + REQUIRE(std::abs(sz.y() - 20.0) < 0.5); + REQUIRE(std::abs(sz.z() - 8.0) < 0.5); + } + + SECTION("construction line excluded") { + CadDocument doc; + + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "square_with_construction"; + sk.plane = SketchPlane::XY(); + + SketchEntity cline; + cline.type = SketchEntity::Type::Line; + cline.p0 = Vec2d(-30, 0); + cline.p1 = Vec2d(30, 0); + cline.construction = true; + + sk.entities = { + {SketchEntity::Type::Line, Vec2d(-10,-10), Vec2d(10,-10)}, + {SketchEntity::Type::Line, Vec2d(10,-10), Vec2d(10,10)}, + {SketchEntity::Type::Line, Vec2d(10,10), Vec2d(-10,10)}, + {SketchEntity::Type::Line, Vec2d(-10,10), Vec2d(-10,-10)}, + cline, + }; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "extrude"; + ex.sketch_ref = 0; + ex.distance = 5; + ex.mode = BooleanMode::New; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto bb = doc.display_mesh.bounding_box(); + auto sz = bb.max - bb.min; + REQUIRE(std::abs(sz.x() - 20.0) < 0.5); + REQUIRE(std::abs(sz.y() - 20.0) < 0.5); + REQUIRE(std::abs(sz.z() - 5.0) < 0.5); + } +} + +TEST_CASE("construction flag survives recipe round-trip", "[CadDocument]") +{ + CadDocument doc; + + // Square edge + 1 construction line + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(-10, -10), Vec2d(10, -10)}, + {SketchEntity::Type::Line, Vec2d(10, -10), Vec2d(10, 10)}, + {SketchEntity::Type::Line, Vec2d(10, 10), Vec2d(-10, 10)}, + {SketchEntity::Type::Line, Vec2d(-10, 10), Vec2d(-10, -10)}, + }; + SketchEntity cx; + cx.type = SketchEntity::Type::Line; + cx.p0 = Vec2d(-33.0, 7.0); + cx.p1 = Vec2d(33.0, 7.0); + cx.construction = true; + ents.push_back(cx); // ents[4] + + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "SkCtor"); + REQUIRE(sk == 0); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Ex"); + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + + // Locate SkCtor in fresh.features + const CadFeature* sf = nullptr; + for (const auto& f : fresh.features) { + if (f.name == "SkCtor") { sf = &f; break; } + } + REQUIRE(sf != nullptr); + REQUIRE(sf->entities.size() == 5); + REQUIRE(sf->entities[0].construction == false); + REQUIRE(sf->entities[4].construction == true); + REQUIRE_THAT(sf->entities[4].p0.x(), Catch::Matchers::WithinAbs(-33.0, 1e-9)); + REQUIRE_THAT(sf->entities[4].p1.x(), Catch::Matchers::WithinAbs( 33.0, 1e-9)); +} + +// Mirrors the GUI interactive-sketch commit path (DesignPanel -> +// add_sketch_entities) for the Fase 4.1 entity drawing tools: a corner-rect and +// a center-rect produce 4 closed Line entities; a center-circle produces 1 +// Circle entity. add_sketch_entities must store them and extrude into a solid. +TEST_CASE("add_sketch_entities commit path -> extrude", "[CadDocument]") +{ + SECTION("corner-rect 4 lines -> 30x16x5") { + CadDocument doc; + // Corner A=(-15,-8), B=(15,8): the tool's push_closed_lines order. + const Vec2d A(-15, -8), B(15, 8); + std::vector ents = { + {SketchEntity::Type::Line, A, Vec2d(B.x(), A.y())}, + {SketchEntity::Type::Line, Vec2d(B.x(),A.y()), B}, + {SketchEntity::Type::Line, B, Vec2d(A.x(), B.y())}, + {SketchEntity::Type::Line, Vec2d(A.x(),B.y()), A}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "Sketch1"); + REQUIRE(sk == 0); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + auto sz = doc.display_mesh.bounding_box().size(); + REQUIRE(std::abs(sz.x() - 30.0) < 0.5); + REQUIRE(std::abs(sz.y() - 16.0) < 0.5); + REQUIRE(std::abs(sz.z() - 5.0) < 0.5); + } + + SECTION("center-circle 1 entity -> r=7 cylinder") { + CadDocument doc; + SketchEntity c; + c.type = SketchEntity::Type::Circle; + c.center = Vec2d(0, 0); + c.p0 = Vec2d(0, 0); + c.radius = 7.0; + int sk = doc.add_sketch_entities({c}, SketchPlane::XY(), "Sketch1"); + doc.add_extrude(sk, 4.0, false, BooleanMode::New, "Extrude1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + auto sz = doc.display_mesh.bounding_box().size(); + REQUIRE(std::abs(sz.x() - 14.0) < 0.5); + REQUIRE(std::abs(sz.y() - 14.0) < 0.5); + REQUIRE(std::abs(sz.z() - 4.0) < 0.5); + } +} + +// A slot (stadium): 2 lines + 2 semicircular Arc entities forming one closed +// loop — the shape the Fase 4.1b Slot tool emits. Validates the kernel's Arc +// edge path (GC_MakeArcOfCircle via center/radius/start_angle/end_angle, with +// the mid reconstructed at (start+end)/2) inside a mixed Line/Arc wire. +TEST_CASE("slot (line+arc closed wire) -> extrude", "[CadDocument]") +{ + const double PI = 3.14159265358979323846; + CadDocument doc; + + // Centerline ends c0=(-10,0), c1=(10,0); half-width w=5 → stadium 30 x 10. + SketchEntity top; // top line A0(-10,5) -> A1(10,5) + top.type = SketchEntity::Type::Line; top.p0 = Vec2d(-10, 5); top.p1 = Vec2d(10, 5); + + SketchEntity cap1; // right cap @c1=(10,0): A1(10,5) -> B1(10,-5) through (15,0) + cap1.type = SketchEntity::Type::Arc; cap1.center = Vec2d(10, 0); cap1.radius = 5; + cap1.p0 = Vec2d(10, 5); cap1.p1 = Vec2d(10, -5); + cap1.start_angle = PI / 2; cap1.end_angle = -PI / 2; // mid angle 0 -> (15,0) + + SketchEntity bot; // bottom line B1(10,-5) -> B0(-10,-5) + bot.type = SketchEntity::Type::Line; bot.p0 = Vec2d(10, -5); bot.p1 = Vec2d(-10, -5); + + SketchEntity cap0; // left cap @c0=(-10,0): B0(-10,-5) -> A0(-10,5) through (-15,0) + cap0.type = SketchEntity::Type::Arc; cap0.center = Vec2d(-10, 0); cap0.radius = 5; + cap0.p0 = Vec2d(-10, -5); cap0.p1 = Vec2d(-10, 5); + cap0.start_angle = -PI / 2; cap0.end_angle = -3 * PI / 2; // mid angle -PI -> (-15,0) + + int sk = doc.add_sketch_entities({top, cap1, bot, cap0}, SketchPlane::XY(), "Slot"); + doc.add_extrude(sk, 4.0, false, BooleanMode::New, "Extrude1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + auto sz = doc.display_mesh.bounding_box().size(); + REQUIRE(std::abs(sz.x() - 30.0) < 0.5); + REQUIRE(std::abs(sz.y() - 10.0) < 0.5); + REQUIRE(std::abs(sz.z() - 4.0) < 0.5); +} + +// Onshape-style constraints on coexisting entities (Fase 4.2). The solver maps +// each Line/Point entity endpoint to a solver variable, applies the entity +// constraints, and writes the solved coordinates back into the entities. +TEST_CASE("entity constraints: solve on SketchEntity endpoints", "[CadDocument]") +{ + using R = SketchPointRole; + using T = SketchConstraintType; + + auto dir = [](const SketchEntity& e) { return Vec2d(e.p1 - e.p0); }; + + SECTION("perpendicular rotates line1 normal to a pinned line0") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // line0 (pinned) + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(7,7)}, // line1 @45 deg + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); + ec.push_back({T::Fix, 0, -1, R::P1, R::P0, 0.0}); + ec.push_back({T::Perpendicular, 0, 1, R::P0, R::P0, 0.0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + // line0 stayed put. + REQUIRE(std::abs(e[0].p0.x() - 0.0) < 1e-6); + REQUIRE(std::abs(e[0].p1.x() - 10.0) < 1e-6); + // line1 is now perpendicular to line0: directions dot to ~0. + const double d = dir(e[0]).dot(dir(e[1])); + REQUIRE(std::abs(d) < 1e-6); + } + + // Driving length: the Dimension tool records a Distance between a line's own + // P0/P1 (committed via add_sketch_entities' constraints arg). Solving drives + // the line to that exact length. + SECTION("driving length: Distance(P0,P1) sets a line's length") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // length 10 + }; + std::vector cons; + cons.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); // pin the start + cons.push_back({T::Distance, 0, 0, R::P0, R::P1, 25.0}); // length -> 25 + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S", cons); + REQUIRE(doc.features[sk].entity_constraints.size() == 2); // constraints stored + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs((e[0].p1 - e[0].p0).norm() - 25.0) < 1e-6); + } + + SECTION("parallel flattens line1 onto a pinned horizontal line0") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // line0 (pinned) + {SketchEntity::Type::Line, Vec2d(0,5), Vec2d(7,9)}, // line1 tilted + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); + ec.push_back({T::Fix, 0, -1, R::P1, R::P0, 0.0}); + ec.push_back({T::Parallel, 0, 1, R::P0, R::P0, 0.0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + const Vec2d d0 = dir(e[0]), d1 = dir(e[1]); + const double cross = d0.x() * d1.y() - d0.y() * d1.x(); + REQUIRE(std::abs(cross) < 1e-6); + } + + SECTION("coincident merges a line endpoint onto another") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // line0 + {SketchEntity::Type::Line, Vec2d(12,1), Vec2d(20,1)}, // line1 + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Coincident, 0, 1, R::P1, R::P0, 0.0}); // line0.end == line1.start + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + const Vec2d gap = Vec2d(e[0].p1 - e[1].p0); + REQUIRE(gap.norm() < 1e-6); + } + + SECTION("horizontal levels a tilted line's endpoints") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,2)}, // tilted line + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Horizontal, 0, 0, R::P0, R::P1, 0.0}); // p0.y == p1.y + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs(e[0].p0.y() - e[0].p1.y()) < 1e-6); + } +} + +TEST_CASE("entity constraints: arc/circle registration + concentric", "[CadDocument]") +{ + using R = SketchPointRole; + using T = SketchConstraintType; + + SECTION("concentric centers coincide") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 5.0}, // circle0 + {SketchEntity::Type::Circle, Vec2d(10,2), Vec2d(10,2), Vec2d(10,2), 3.0}, // circle1 + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::Center, R::Center, 0.0}); + ec.push_back({T::Concentric, 0, 1, R::Center, R::Center, 0.0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE((e[1].center - e[0].center).norm() < 1e-6); + REQUIRE(e[0].center.x() < 1e-6); + REQUIRE(e[0].center.y() < 1e-6); + } + + SECTION("arc reflow keeps radius and angle consistent") { + CadDocument doc; + const double PI2 = M_PI / 2; + std::vector ents = { + {SketchEntity::Type::Arc, Vec2d(5,0), Vec2d(0,5), Vec2d(0,0), 5.0, 0.0, PI2}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::Center, R::Center, 0.0}); + ec.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs((e[0].p0 - e[0].center).norm() - 5.0) < 1e-6); + REQUIRE(std::abs(e[0].start_angle - 0.0) < 1e-6); + REQUIRE(std::abs(e[0].end_angle - PI2) < 1e-3); + REQUIRE(e[0].end_angle > e[0].start_angle); + } +} + +TEST_CASE("entity constraints: radius/diameter dimensions", "[CadDocument]") +{ + using R = SketchPointRole; + using T = SketchConstraintType; + + SECTION("circle radius dimension") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 5.0}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::Center, R::Center, 0.0, -1, R::P0}); + ec.push_back({T::Radius, 0, -1, R::Center, R::P0, 8.0, -1, R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs(e[0].radius - 8.0) < 1e-9); + } + + SECTION("circle diameter dimension") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 5.0}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::Center, R::Center, 0.0, -1, R::P0}); + ec.push_back({T::Diameter, 0, -1, R::Center, R::P0, 20.0, -1, R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs(e[0].radius - 10.0) < 1e-9); + } + + SECTION("arc radius rescales endpoints") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Arc, Vec2d(5,0), Vec2d(0,5), Vec2d(0,0), 5.0, 0.0, M_PI/2}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0, -1, R::Center, R::Center, 0.0, -1, R::P0}); + ec.push_back({T::Radius, 0, -1, R::Center, R::P0, 10.0, -1, R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs(e[0].radius - 10.0) < 1e-9); + REQUIRE((e[0].p0 - Vec2d(10,0)).norm() < 1e-6); + REQUIRE((e[0].p1 - Vec2d(0,10)).norm() < 1e-6); + } +} + +// PointOnLine (Fase: persistent positioning). A point-like entity is held on a +// line (value 0) or at perpendicular distance `value`. Drives e.g. a circle centre +// onto a construction axis and, being a real constraint, keeps it there on re-solve. +TEST_CASE("entity constraints: point-on-line positions a centre onto an axis", "[CadDocument]") +{ + using R = SketchPointRole; + using T = SketchConstraintType; + + SECTION("circle centre snaps onto a pinned axis (value 0) and persists") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // axis (X) + {SketchEntity::Type::Circle, Vec2d(5,7), Vec2d(5,7), Vec2d(5,7), 3.0}, // off-axis centre + }; + std::vector cons; + cons.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); // pin axis endpoints + cons.push_back({T::Fix, 0, -1, R::P1, R::P1, 0.0}); + cons.push_back({T::PointOnLine, 1, 0, R::Center, R::P0, 0.0}); // centre onto axis + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S", cons); + REQUIRE(doc.solve_sketch_feature(sk)); + REQUIRE(std::abs(doc.features[sk].entities[1].center.y()) < 1e-6); // on the axis + // Re-solving keeps it on the axis (a driving constraint, not a one-shot move). + REQUIRE(doc.solve_sketch_feature(sk)); + REQUIRE(std::abs(doc.features[sk].entities[1].center.y()) < 1e-6); + } + + SECTION("non-zero perpendicular distance via the free solve_sketch_entities") { + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, + {SketchEntity::Type::Point, Vec2d(4,9)}, // point above the axis + }; + std::vector cons; + cons.push_back({T::Fix, 0, -1, R::P0, R::P0, 0.0}); + cons.push_back({T::Fix, 0, -1, R::P1, R::P1, 0.0}); + cons.push_back({T::PointOnLine, 1, 0, R::P0, R::P0, 2.0}); // hold at distance 2 + REQUIRE(solve_sketch_entities(ents, cons)); + REQUIRE(std::abs(std::abs(ents[1].p0.y()) - 2.0) < 1e-6); // 2 mm off the axis + } +} + +// The "tangent line to circle" SECTION used to abort the whole Catch2 process inside the +// vendored solver (slvs/dsc.h FindById, "Cannot find handle"), taking every later test with +// it, and was quarantined for it. Fixed in SketchSolver: a full circle can no longer be handed +// to SLVS_C_ARC_LINE_TANGENT, which dereferences arc endpoints a circle does not have. See +// tkz. +TEST_CASE("entity constraints: tangent/midpoint/symmetric/angle", "[CadDocument][sketch]") +{ + using R = SketchPointRole; + using T = SketchConstraintType; + + auto dir = [](const SketchEntity& e) { return Vec2d(e.p1 - e.p0); }; + + SECTION("angle 90 between two lines") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // line0 + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(5,5)}, // line1 + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0,-1, R::P0,R::P0, 0.0, -1,R::P0}); + ec.push_back({T::Fix, 0,-1, R::P1,R::P0, 0.0, -1,R::P0}); + ec.push_back({T::Fix, 1,-1, R::P0,R::P0, 0.0, -1,R::P0}); + ec.push_back({T::Angle,0, 1, R::P0,R::P0, M_PI/2,-1,R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + const Vec2d d0 = dir(e[0]).normalized(); + const Vec2d d1 = dir(e[1]).normalized(); + REQUIRE(std::abs(d0.dot(d1)) < 1e-3); + } + + SECTION("midpoint of a line") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, // line0 + {SketchEntity::Type::Point, Vec2d(3,9)}, // point p + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0,-1, R::P0,R::P0, 0.0,-1,R::P0}); + ec.push_back({T::Fix, 0,-1, R::P1,R::P0, 0.0,-1,R::P0}); + ec.push_back({T::Midpoint,1, 0, R::P0,R::P0, 0.0,-1,R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE((e[1].p0 - Vec2d(5,0)).norm() < 1e-3); + } + + SECTION("tangent line to circle") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 5.0}, // circle0 r=5 + {SketchEntity::Type::Line, Vec2d(-10,8), Vec2d(10,8)}, // line1 y=8 + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0,-1, R::Center,R::Center, 0.0,-1,R::P0}); + ec.push_back({T::LockX, 1,-1, R::P0, R::P0, -10.0,-1,R::P0}); + ec.push_back({T::LockX, 1,-1, R::P1, R::P0, 10.0,-1,R::P0}); + ec.push_back({T::Horizontal, 1, 1, R::P0, R::P1, 0.0,-1,R::P0}); + ec.push_back({T::Tangent, 0, 1, R::Center,R::P0, 0.0,-1,R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE(std::abs(std::abs(e[1].p0.y()) - 5.0) < 1e-3); + } + + SECTION("symmetric across a line") { + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Point, Vec2d(2,3)}, // pointA + {SketchEntity::Type::Point, Vec2d(-1,1)}, // pointB + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(0,10)}// axis (Y axis) + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + auto& ec = doc.features[sk].entity_constraints; + ec.push_back({T::Fix, 0,-1, R::P0,R::P0, 0.0,-1,R::P0}); + ec.push_back({T::Fix, 2,-1, R::P0,R::P0, 0.0,-1,R::P0}); + ec.push_back({T::Fix, 2,-1, R::P1,R::P0, 0.0,-1,R::P0}); + ec.push_back({T::Symmetric, 0, 1, R::P0,R::P0, 0.0, 2,R::P0}); + + REQUIRE(doc.solve_sketch_feature(sk)); + const auto& e = doc.features[sk].entities; + REQUIRE((e[1].p0 - Vec2d(-2,3)).norm() < 1e-3); + } +} + +TEST_CASE("imported text glyphs all extrude without failing (charset sweep)", "[CadDocument]") +{ + std::string font = resources_dir().empty() + ? std::string("resources/fonts/HarmonyOS_Sans_SC_Regular.ttf") + : resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf"; + { + std::ifstream probe(font); + if (!probe.good()) { + SUCCEED("bundled font not reachable in this environment; covered live on :10"); + return; + } + } + + const std::string charset = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "@#$%&*()[]{}<>?/+-=.,;:!" + "\xC3\xA0\xC3\xA8\xC3\xA9\xC3\xAC\xC3\xB2\xC3\xB9"; // à è é ì ò ù (UTF-8) + + std::string failures; + for (char c : charset) { + ImportRegions regs = text_to_regions(std::string(1, c), 12.0, font); + if (regs.empty()) continue; + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = regs; + doc.features.push_back(sk); + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 3; + doc.features.push_back(ex); + if (!doc.recompute() || !doc.error.empty()) + failures += c; + } + INFO("glyphs that failed to extrude: [" << failures << "]"); + CHECK(failures.empty()); + + // A realistic multi-glyph word must extrude too. + { + ImportRegions regs = text_to_regions("Snapmaker", 12.0, font); + REQUIRE_FALSE(regs.empty()); + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = regs; + doc.features.push_back(sk); + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 3; + doc.features.push_back(ex); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + } +} + +TEST_CASE("imported regions: faces-with-holes extrude (Text/SVG carrier)", "[CadDocument]") +{ + SECTION("square with a square hole -> tube volume") { + CadDocument doc; + + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "art"; + sk.plane = SketchPlane::XY(); + // One region: outer 20x20 (CCW) + inner 8x8 hole (CW). + sk.imported_regions = {{ + {Vec2d(-10,-10), Vec2d(10,-10), Vec2d(10,10), Vec2d(-10,10)}, // outer + {Vec2d(-4,-4), Vec2d(-4,4), Vec2d(4,4), Vec2d(4,-4)}, // hole (reversed winding) + }}; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "extrude"; + ex.sketch_ref = 0; + ex.distance = 5; + ex.mode = BooleanMode::New; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + // (20*20 - 8*8) * 5 = 1680 mm^3 + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(1680.0, 0.02)); + + auto sz = doc.display_mesh.bounding_box().size(); + REQUIRE(std::abs(sz.x() - 20.0) < 0.5); + REQUIRE(std::abs(sz.y() - 20.0) < 0.5); + REQUIRE(std::abs(sz.z() - 5.0) < 0.5); + } + + SECTION("inverted winding (CW outer, CCW hole) keeps body solid, counter empty") { + // Real glyph contours (P, e, o, 8) arrive with outer CW + hole CCW. The + // extrude must NORMALISE winding so the letter BODY is solid and the + // counter is the hole — not the inverse (the reported bug). 20x20 outer + // CW with an 8x8 hole CCW -> volume (400-64)*5 = 1680, NOT the inverse. + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = {{ + {Vec2d(-10,-10), Vec2d(-10,10), Vec2d(10,10), Vec2d(10,-10)}, // outer CW + {Vec2d(-4,-4), Vec2d(4,-4), Vec2d(4,4), Vec2d(-4,4)}, // hole CCW + }}; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 5; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(1680.0, 0.02)); + } + + SECTION("degenerate / duplicate points are sanitised, not fatal") { + // FreeType/SVG flattening can emit repeated points; the extrude must + // survive them (previously to_occt_wire threw and failed the whole op). + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = {{ + // 20x20 outer square with consecutive dups + an explicit closing dup + {Vec2d(-10,-10), Vec2d(-10,-10), Vec2d(10,-10), Vec2d(10,-10), + Vec2d(10,10), Vec2d(-10,10), Vec2d(-10,-10)}, + }}; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 5; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(2000.0, 0.02)); + } + + SECTION("a degenerate region is skipped, valid ones still extrude") { + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = { + { {Vec2d(0,0), Vec2d(0,0), Vec2d(0,0)} }, // collapses to nothing + { {Vec2d(0,0), Vec2d(5,0), Vec2d(5,5), Vec2d(0,5)} }, // valid 5x5 + }; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 4; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(100.0, 0.02)); + } + + SECTION("two disjoint regions form one shape") { + CadDocument doc; + + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = { + {{Vec2d(0,0), Vec2d(5,0), Vec2d(5,5), Vec2d(0,5)}}, + {{Vec2d(10,0), Vec2d(15,0), Vec2d(15,5), Vec2d(10,5)}}, + }; + doc.features.push_back(sk); + + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 3; + doc.features.push_back(ex); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + // 2 * (5*5*3) = 150 mm^3 + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(150.0, 0.02)); + } +} + +TEST_CASE("tessellate tracks per-triangle face id", "[CadDocument]") +{ + TopoDS_Shape box = BRepPrimAPI_MakeBox(10., 10., 10.).Shape(); + std::vector tf; + TriangleMesh m = SketchEngine::tessellate(box, tf); + + REQUIRE(tf.size() == m.its.indices.size()); + REQUIRE(!tf.empty()); + + std::set distinct(tf.begin(), tf.end()); + REQUIRE(distinct.size() == 6); + REQUIRE(*distinct.begin() == 0); + REQUIRE(*distinct.rbegin() == 5); + + for (int fid : distinct) { + int count = 0; + for (int x : tf) if (x == fid) ++count; + REQUIRE(count >= 2); + } + + REQUIRE(m.its.indices.size() >= 12); +} + +TEST_CASE("extrude two-sided + through-all + intersect", "[CadDocument]") +{ + using namespace Slic3r; + SketchPlane xy = SketchPlane::XY(); + // a 10x10 square wire centred on origin + SketchProfile sp; + sp.points = { Vec2d(-5,-5), Vec2d(5,-5), Vec2d(5,5), Vec2d(-5,5) }; + sp.closed = true; + TopoDS_Wire w = sp.to_occt_wire(xy); + + SECTION("two-sided height = up+down") { + TopoDS_Shape s = SketchEngine::make_extrude_two_sided(w, xy, 10.0, 4.0); + REQUIRE_FALSE(s.IsNull()); + Bnd_Box bb; BRepBndLib::Add(s, bb); + double xmin,ymin,zmin,xmax,ymax,zmax; bb.Get(xmin,ymin,zmin,xmax,ymax,zmax); + REQUIRE_THAT(zmax - zmin, Catch::Matchers::WithinAbs(14.0, 0.05)); // 10 up + 4 down + REQUIRE_THAT(zmax, Catch::Matchers::WithinAbs(10.0, 0.05)); + REQUIRE_THAT(zmin, Catch::Matchers::WithinAbs(-4.0, 0.05)); + } +} + +TEST_CASE("extrude taper + up-to-face distance", "[CadDocument]") +{ + using namespace Slic3r; + SketchPlane xy = SketchPlane::XY(); + SketchProfile sp; sp.points = { Vec2d(-5,-5),Vec2d(5,-5),Vec2d(5,5),Vec2d(-5,5) }; sp.closed = true; + TopoDS_Wire w = sp.to_occt_wire(xy); + + SECTION("taper widens the top") { + TopoDS_Shape s = SketchEngine::make_extrude_taper(w, xy, 10.0, 15.0); + REQUIRE_FALSE(s.IsNull()); + Bnd_Box bb; BRepBndLib::Add(s, bb); + double x0,y0,z0,x1,y1,z1; bb.Get(x0,y0,z0,x1,y1,z1); + REQUIRE_THAT(z1 - z0, Catch::Matchers::WithinAbs(10.0, 0.1)); + REQUIRE((x1 - x0) > 12.0); + } + SECTION("extreme taper falls back to a straight prism") { + TopoDS_Shape s = SketchEngine::make_extrude_taper(w, xy, 10.0, 89.0); + REQUIRE_FALSE(s.IsNull()); + Bnd_Box bb; BRepBndLib::Add(s, bb); + double x0,y0,z0,x1,y1,z1; bb.Get(x0,y0,z0,x1,y1,z1); + REQUIRE_THAT(x1 - x0, Catch::Matchers::WithinAbs(10.0, 0.1)); + } +} + +// Was [known-broken] until the numbers were actually measured (kzy). The geometry +// was right all along; the TEST compared against the wrong reference. An internal thread bores +// at the MINOR radius (radius - depth) and then carves the groove out to radius + depth, so a +// tapped hole keeps the crests between turns and therefore holds MORE material than a plain +// clearance hole at the nominal radius. Asserting the thread removes more than a plain Ø12 bore +// asked for something no real tapped hole does. Measured on this fixture: plain Ø12 bore removes +// 2261 mm3, the thread removes 2157 = 1571 (minor bore) + 586 (groove). Exact BRepGProp volume +// agrees with the tessellated volume to 2.5 mm3, so this was never a meshing artefact either. +// The tap-drill bore is the honest reference: against it, the groove's 586 mm3 is the thing worth +// asserting, because that is what "the thread actually cuts" means. +TEST_CASE("internal thread cuts a visible groove into the bore wall", "[CadDocument][thread]") +{ + using namespace Slic3r; + SketchPlane xy = SketchPlane::XY(); + + // 40x40x20 box centred on the origin, extruded +Z. + auto make_box = [&](CadDocument& doc) { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = xy; + sk.imported_regions = {{ + {Vec2d(-20,-20), Vec2d(20,-20), Vec2d(20,20), Vec2d(-20,20)}, + }}; + doc.features.push_back(sk); + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = 20; + doc.features.push_back(ex); + }; + + // Reference: box bored at the MINOR diameter — the tap drill the thread starts from. + // Ø10 = 2 * (radius 6 - depth 1), matching what apply_thread cuts before the groove. + CadDocument hole_doc; + make_box(hole_doc); + hole_doc.add_hole(10.0, 20.0, true, 0.0, 0.0, xy, "Hole"); + REQUIRE(hole_doc.recompute()); + REQUIRE(hole_doc.error.empty()); + const double v_hole = double(hole_doc.display_mesh.volume()); + + // Threaded: same box, internal thread of radius 6 (the bore radius). + CadDocument thr_doc; + make_box(thr_doc); + thr_doc.add_thread(6.0, 3.0, 20.0, 1.0, /*internal=*/true, 0.0, 0.0, xy, "Thread"); + REQUIRE(thr_doc.recompute()); + REQUIRE(thr_doc.error.empty()); + const double v_thread = double(thr_doc.display_mesh.volume()); + + // The groove must carve material out of the wall BEYOND the tap-drill bore, which is what + // makes the thread visible. A profile that only swept already-empty bore space would give + // v_thread ~= v_hole; the real one removes several hundred mm3 more. + REQUIRE(v_thread > 0.0); + REQUIRE(v_thread < v_hole); + REQUIRE((v_hole - v_thread) > 20.0); +} + +TEST_CASE("revolve builds a solid of revolution about an in-plane axis", "[CadDocument]") +{ + using namespace Slic3r; + SketchPlane xy = SketchPlane::XY(); + + // Rectangle profile (10 wide x 10 tall, area 100) offset to +v so it lies entirely + // on one side of the X axis; revolved 360deg about X -> a rectangular-section ring. + // Pappus: V = 2*pi*R*A = 2*pi*15*100 = ~9424.78 mm^3 (tessellation slightly under). + auto make_rev_doc = [&](double angle, int axis, double u0, double v0) { + auto doc = std::make_unique(); + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = xy; + sk.profile.points = { Vec2d(u0 - 5, v0 - 5), Vec2d(u0 + 5, v0 - 5), + Vec2d(u0 + 5, v0 + 5), Vec2d(u0 - 5, v0 + 5) }; + sk.profile.closed = true; + doc->features.push_back(sk); + doc->add_revolve(0, angle, axis, false, BooleanMode::New, "Rev"); + return doc; + }; + + auto full = make_rev_doc(360.0, /*axis=X*/0, 0.0, 15.0); + REQUIRE(full->recompute()); + REQUIRE(full->error.empty()); + const double v_full = double(full->display_mesh.volume()); + REQUIRE(v_full > 0.0); + REQUIRE(v_full == Approx(9424.78).epsilon(0.05)); + + // A 180deg sweep removes exactly half the material. + auto half = make_rev_doc(180.0, 0, 0.0, 15.0); + REQUIRE(half->recompute()); + REQUIRE(half->error.empty()); + const double v_half = double(half->display_mesh.volume()); + REQUIRE(v_half > 0.0); + REQUIRE(v_full == Approx(2.0 * v_half).epsilon(0.05)); + + // Axis = plane Y: profile offset to +u (one side of the Y axis) gives the same ring. + auto ydoc = make_rev_doc(360.0, /*axis=Y*/1, 15.0, 0.0); + REQUIRE(ydoc->recompute()); + REQUIRE(ydoc->error.empty()); + REQUIRE(double(ydoc->display_mesh.volume()) == Approx(9424.78).epsilon(0.05)); +} + +TEST_CASE("sweep builds a solid by sweeping a profile along a path", "[CadDocument]") +{ + using namespace Slic3r; + CadDocument doc; + + // Profile: circle r=5 on the XY plane at the origin (area = 25*pi). + SketchEntity circ; + circ.type = SketchEntity::Type::Circle; + circ.center = Vec2d(0, 0); + circ.radius = 5.0; + const int prof = doc.add_sketch_entities({circ}, SketchPlane::XY(), "Profile"); + + // Path: a straight line on the XZ plane from 2D (0,0)->(0,100), i.e. world + // (0,0,0)->(0,0,100): the spine starts on the profile plane and runs +Z by 100. + SketchEntity line; + line.type = SketchEntity::Type::Line; + line.p0 = Vec2d(0, 0); + line.p1 = Vec2d(0, 100); + const int path = doc.add_sketch_entities({line}, SketchPlane::XZ(), "Path"); + + doc.add_sweep(prof, path, BooleanMode::New, "Sweep1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Straight sweep of a circle == a cylinder: V = pi*r^2*h = pi*25*100 = ~7853.98. + const double v = double(doc.display_mesh.volume()); + REQUIRE(v > 0.0); + REQUIRE_THAT(v, Catch::Matchers::WithinRel(M_PI * 25.0 * 100.0, 0.03)); + + // A valid path sketch is mandatory: a -1 path ref must error cleanly, not crash. + CadDocument bad; + const int p2 = bad.add_sketch_entities({circ}, SketchPlane::XY(), "Profile"); + bad.add_sweep(p2, -1, BooleanMode::New, "BadSweep"); + REQUIRE_FALSE(bad.recompute()); +} + +TEST_CASE("pattern replicates a body linearly and circularly", "[CadDocument]") +{ + using namespace Slic3r; + + // Linear: a 10x10x10 box (V=1000) repeated 3x at 20mm spacing along plane X. + // 20 > 10 so the copies are disjoint -> total V = 3*1000 = 3000. + { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 10, 10, 5, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + doc.add_pattern(/*circular=*/false, /*count=*/3, /*spacing=*/20, + /*dir=*/0, /*angle=*/0, /*target=*/-1, "LinearPattern"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double v = double(doc.display_mesh.volume()); + REQUIRE_THAT(v, Catch::Matchers::WithinRel(3000.0, 0.02)); + } + + // Circular: a 10x10x10 box centred at x=50 (radius 50 from the Z axis), 4 copies + // over 360deg about the plane normal through the origin -> a ring of 4 disjoint + // boxes -> V = 4*1000 = 4000. + { + CadDocument doc; + SketchProfile sp; + sp.points.push_back(Vec2d(45, -5)); + sp.points.push_back(Vec2d(55, -5)); + sp.points.push_back(Vec2d(55, 5)); + sp.points.push_back(Vec2d(45, 5)); + sp.closed = true; + int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "OffsetBox"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + doc.add_pattern(/*circular=*/true, /*count=*/4, /*spacing=*/0, + /*dir=*/0, /*angle=*/360, /*target=*/-1, "CircularPattern"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double v = double(doc.display_mesh.volume()); + REQUIRE_THAT(v, Catch::Matchers::WithinRel(4000.0, 0.02)); + } + + // A pattern with no body must error cleanly, not crash. + { + CadDocument bad; + bad.add_pattern(false, 3, 20, 0, 0, -1, "NoBody"); + REQUIRE_FALSE(bad.recompute()); + } +} + +TEST_CASE("pattern-on-curve: copies land on a line and bbox spans the curve length", "[CadDocument][pattern]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + using namespace Slic3r; + + CadDocument doc; + + // Seed body: 4x4x4 box at the origin via sketch+extrude. + int s0 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 4, 4, 0, "Seed"); + doc.add_extrude(s0, 4.0, false, BooleanMode::New, "E"); + + // Guide sketch: one Line entity from (0,0) to (30,0) on XY. + std::vector guide = { + {SketchEntity::Type::Line, Vec2d(0, 0), Vec2d(30, 0)}, + }; + int gs = doc.add_sketch_entities(guide, SketchPlane::XY(), "Guide"); + + doc.add_pattern_on_curve(4, gs, 0, 0, "OnCurve"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto bb = doc.display_mesh.bounding_box(); + double x_extent = bb.max.x() - bb.min.x(); + // 4 copies: at x=0, x=10, x=20, x=30. The seed is a 4x4 box centred at origin, + // so the overall X span is from -2 to 32 = 34 mm. + REQUIRE_THAT(x_extent, WithinAbs(34.0, 2.0)); +} + +TEST_CASE("pattern-on-curve: bad refs are safe", "[CadDocument][pattern]") +{ + using namespace Slic3r; + + CadDocument doc; + int s0 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 4, 4, 0, "Seed"); + doc.add_extrude(s0, 4.0, false, BooleanMode::New, "E"); + + // Bad sketch ref -> error. + doc.add_pattern_on_curve(3, 999, 0, 0, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_FALSE(doc.error.empty()); + REQUIRE(doc.error.find("pattern") != std::string::npos); +} + +TEST_CASE("pattern-on-curve: round-trip through serialize/deserialize", "[CadDocument][pattern]") +{ + using Catch::Matchers::WithinRel; + using namespace Slic3r; + + CadDocument doc; + int s0 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 4, 4, 0, "Seed"); + doc.add_extrude(s0, 4.0, false, BooleanMode::New, "E"); + + std::vector guide = { + {SketchEntity::Type::Line, Vec2d(0, 0), Vec2d(30, 0)}, + }; + int gs = doc.add_sketch_entities(guide, SketchPlane::XY(), "Guide"); + + doc.add_pattern_on_curve(4, gs, 0, 0, "OnCurve"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto orig_bb = doc.display_mesh.bounding_box(); + size_t orig_n = doc.bodies.size(); + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.recompute()); + REQUIRE(fresh.error.empty()); + REQUIRE(fresh.bodies.size() == orig_n); + + auto fresh_bb = fresh.display_mesh.bounding_box(); + REQUIRE_THAT(orig_bb.min.x(), WithinRel(fresh_bb.min.x(), 1e-6)); + REQUIRE_THAT(orig_bb.max.x(), WithinRel(fresh_bb.max.x(), 1e-6)); + + // Verify the deserialized field values. + bool found = false; + for (const auto& f : fresh.features) { + if (f.name == "OnCurve") { + REQUIRE(f.pattern_curve_sketch == gs); + REQUIRE(f.pattern_curve_entity == 0); + found = true; + break; + } + } + REQUIRE(found); +} + +TEST_CASE("thread standards table carries correct ISO/UTS measures", "[CadDocument]") +{ + using namespace Slic3r; + + // Table is non-empty and every entry is self-consistent. + const auto& table = thread_standards(); + REQUIRE(table.size() > 40); + for (const ThreadSpec& s : table) { + REQUIRE(s.major_diameter_mm > 0.0); + REQUIRE(s.pitch_mm > 0.0); + REQUIRE(s.minor_diameter_mm() < s.major_diameter_mm); + REQUIRE(s.minor_diameter_mm() > 0.0); + // 60deg V cut depth = 0.6134 * pitch. + REQUIRE(s.thread_depth_mm() == Approx(0.6134 * s.pitch_mm)); + } + + // ISO metric coarse: known nominal/pitch pairs. + const ThreadSpec* m6 = find_thread_standard("M6"); + REQUIRE(m6 != nullptr); + REQUIRE(m6->major_diameter_mm == Approx(6.0)); + REQUIRE(m6->pitch_mm == Approx(1.0)); + REQUIRE(m6->series == ThreadSpec::Series::MetricCoarse); + REQUIRE_FALSE(m6->imperial()); + REQUIRE(m6->thread_depth_mm() == Approx(0.6134)); + // Tapped minor (tap-drill) diameter D - 1.0825*P = 6 - 1.0825 = 4.9175. + REQUIRE(m6->minor_diameter_mm() == Approx(4.9175)); + + const ThreadSpec* m3 = find_thread_standard("M3"); + REQUIRE(m3 != nullptr); + REQUIRE(m3->pitch_mm == Approx(0.5)); + + // Imperial UNC: 1/4-20 -> 0.25in major, pitch = 25.4/20 = 1.27 mm. + const ThreadSpec* q = find_thread_standard("1/4-20 UNC"); + REQUIRE(q != nullptr); + REQUIRE(q->major_diameter_mm == Approx(6.35)); + REQUIRE(q->pitch_mm == Approx(1.27)); + REQUIRE(q->series == ThreadSpec::Series::UNC); + REQUIRE(q->imperial()); + + // Imperial UNF fine variant has a finer pitch than its UNC sibling. + const ThreadSpec* qf = find_thread_standard("1/4-28 UNF"); + REQUIRE(qf != nullptr); + REQUIRE(qf->major_diameter_mm == Approx(6.35)); + REQUIRE(qf->pitch_mm == Approx(25.4 / 28.0)); + REQUIRE(qf->pitch_mm < q->pitch_mm); + + // Unknown designation -> nullptr. + REQUIRE(find_thread_standard("M7.3 bogus") == nullptr); +} + +TEST_CASE("datum plane: offset + tilt resolution and sketching on it", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + // Parallel offset plane 30 mm above XY (normal +Z, origin at z=30). + CadDocument doc; + int p0 = doc.add_plane(0 /*XY*/, 30.0, 0.0, 0, "Plane1"); + REQUIRE(p0 == 0); + + auto planes = doc.resolve_datum_planes(); + REQUIRE(planes.size() == 1); + REQUIRE(planes[0].first == "Plane1"); + CHECK_THAT(planes[0].second.origin.z(), WithinAbs(30.0, 1e-9)); + CHECK_THAT(planes[0].second.normal.z(), WithinAbs(1.0, 1e-9)); + + // A second datum plane tilted 90 deg about the base (XY) X axis: its normal + // rotates from +Z toward -Y (Rodrigues about +X: +Z -> -Y). + doc.add_plane(0 /*XY*/, 0.0, 90.0, 0 /*about X*/, "Plane2"); + planes = doc.resolve_datum_planes(); + REQUIRE(planes.size() == 2); + CHECK_THAT(planes[1].second.normal.y(), WithinAbs(-1.0, 1e-9)); + CHECK_THAT(planes[1].second.normal.z(), WithinAbs(0.0, 1e-9)); + + // Sketch a 10x10 square ON Plane1 and extrude 4 mm: the solid must sit in z=[30,34]. + SketchPlane sp = planes[0].second; + SketchProfile prof; + prof.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; + prof.closed = true; + int sk = doc.add_sketch_profile(prof, sp, "S"); + doc.add_extrude(sk, 4.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + + Bnd_Box bb; + BRepBndLib::Add(doc.body, bb); + double xmin,ymin,zmin,xmax,ymax,zmax; + bb.Get(xmin,ymin,zmin,xmax,ymax,zmax); + CHECK_THAT(zmin, WithinAbs(30.0, 1e-6)); + CHECK_THAT(zmax, WithinAbs(34.0, 1e-6)); + CHECK_THAT(double(doc.display_mesh.volume()), WithinRel(400.0, 0.02)); + + // A datum-plane-only document has no solid, and that is a benign SUCCESS, not a benign + // failure. It used to return false, and "benign failure" is exactly the phrasing that hid + // mtav: two callers read the false as "unusable document" and threw the design + // away — the 3MF recipe was never written, and a project that had one was refused on load. + CadDocument only_plane; + only_plane.add_plane(0, 10.0, 0.0, 0, "P"); + REQUIRE(only_plane.recompute()); + REQUIRE(only_plane.error.empty()); + REQUIRE(only_plane.bodies.empty()); +} + +TEST_CASE("loft builds a solid skinning two profiles on parallel planes", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Bottom 20x20 square on XY. + SketchProfile bot; + bot.points = {{-10,-10},{10,-10},{10,10},{-10,10}}; + bot.closed = true; + int s0 = doc.add_sketch_profile(bot, SketchPlane::XY(), "Bottom"); + + // Top 10x10 square on a datum plane 20 mm above XY (exercises datum -> loft). + doc.add_plane(0 /*XY*/, 20.0, 0.0, 0, "Plane1"); + SketchPlane top = doc.resolve_datum_planes()[0].second; + SketchProfile tp; + tp.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; + tp.closed = true; + int s1 = doc.add_sketch_profile(tp, top, "Top"); + + // Ruled (straight) sections -> exact planar end caps at z=0 and z=20. + doc.add_loft({s0, s1}, true /*ruled*/, BooleanMode::New, "Loft1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // The loft spans z=[0,20]. ThruSections approximates each section as a BSpline + // curve, so the lateral surface bulges ~0.05 mm past the end planes (sub-visual, + // ~0.25%) — assert the span loosely; the volume below is the real correctness gate. + Bnd_Box bb; + BRepBndLib::Add(doc.body, bb); + double xmin,ymin,zmin,xmax,ymax,zmax; + bb.Get(xmin,ymin,zmin,xmax,ymax,zmax); + CHECK_THAT(zmin, WithinAbs(0.0, 0.1)); + CHECK_THAT(zmax, WithinAbs(20.0, 0.1)); + // Square frustum volume = h/3*(A1+A2+sqrt(A1*A2)) = 20/3*(400+100+200) = 4666.67. + CHECK_THAT(double(doc.display_mesh.volume()), WithinRel(4666.67, 0.03)); + + // A single profile is not enough -> benign recompute failure. + CadDocument one; + SketchProfile sp; sp.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; sp.closed = true; + int only = one.add_sketch_profile(sp, SketchPlane::XY(), "Only"); + one.add_loft({only}, false, BooleanMode::New, "L"); + REQUIRE_FALSE(one.recompute()); +} + +TEST_CASE("draft tapers a solid face about the body base", "[CadDocument]") +{ + using namespace Slic3r; + + // 10x10x10 box from z=0..10 (V=1000). Drafting a vertical side face by +10deg about + // the bottom (neutral) plane tilts its top edge inward, removing material so V<1000. + // A box's 2 horizontal faces are parallel to the neutral plane and cannot be drafted + // (Add fails -> recompute returns false), so exactly the 4 vertical sides succeed. + int ok_faces = 0; + bool saw_taper = false; + for (int fid = 0; fid < 6; ++fid) { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 5, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + doc.add_draft(10.0, fid, -1, "Draft1"); + if (!doc.recompute()) continue; // top/bottom faces: parallel to base -> benign skip + ++ok_faces; + const double v = double(doc.display_mesh.volume()); + REQUIRE(v > 0.0); + if (v < 999.0) saw_taper = true; + } + REQUIRE(ok_faces == 4); + REQUIRE(saw_taper); + + // Draft with no body must fail cleanly, not crash. + CadDocument bad; + bad.add_draft(5.0, 0, -1, "NoBody"); + REQUIRE_FALSE(bad.recompute()); +} + +TEST_CASE("a split renumbers the bodies a later feature indexes", "[CadDocument][cut]") +{ + // Pins the invariant the Design tab's re-edit path depends on (oz7): a stored + // target_body indexes the body list AS IT WAS when that feature ran, and a Cut placed + // later in the tree changes that list. If this test ever fails, the GUI's + // fill_body_choice() replay-to-timeline-slot assumption needs revisiting with it. + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + // Cut the single body in half, keeping BOTH pieces — what the Cut card always does. + doc.add_cut(SketchPlane::XY(), 10.0, false, true, true, 0, "Split"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); // one body became two + + // Body index 1 did not exist before the Cut. A feature recorded BEFORE the Cut could + // never have referred to it, which is exactly why re-edit must list the earlier set. + const double half = 20.0 * 20.0 * 10.0; + double v0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double v1 = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + CHECK_THAT(v0 + v1, WithinRel(2.0 * half, 1e-3)); + + // Replaying to just before the Cut yields the pre-split list — the one a feature sitting + // there indexes into. This is the operation fill_body_choice() performs. + CadDocument as_of = doc; + as_of.features.resize(as_of.features.size() - 1); // drop the Cut + REQUIRE(as_of.recompute()); + REQUIRE(as_of.bodies.size() == 1); + CHECK(as_of.bodies.size() < doc.bodies.size()); +} + +TEST_CASE("cut splits a body with a plane", "[cut]") +{ + using Catch::Matchers::WithinRel; + + auto make_box = [](CadDocument& doc, double w, double h, double d) { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = SketchPlane::XY(); + sk.imported_regions = {{ + {Vec2d(-w / 2, -h / 2), Vec2d(w / 2, -h / 2), + Vec2d(w / 2, h / 2), Vec2d(-w / 2, h / 2)}, + }}; + doc.features.push_back(sk); + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.sketch_ref = 0; + ex.distance = d; + doc.features.push_back(ex); + }; + + SECTION("keep upper half only") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double v_orig = double(doc.display_mesh.volume()); + const int n_before = int(doc.bodies.size()); + REQUIRE(v_orig > 0.0); + + CadFeature cut; + cut.type = CadFeatureType::Cut; + cut.plane = SketchPlane::XY(); + cut.cut_offset = 10.0; // mid-height of the 0..20 box + cut.cut_keep_upper = true; + cut.cut_keep_lower = false; + doc.features.push_back(cut); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(int(doc.bodies.size()) == n_before); + REQUIRE_THAT(double(doc.display_mesh.volume()), WithinRel(v_orig * 0.5, 0.01)); + } + + SECTION("keep both halves splits into two bodies") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + const double v_orig = double(doc.display_mesh.volume()); + const int n_before = int(doc.bodies.size()); + REQUIRE(v_orig > 0.0); + + CadFeature cut; + cut.type = CadFeatureType::Cut; + cut.plane = SketchPlane::XY(); + cut.cut_offset = 10.0; + cut.cut_keep_upper = true; + cut.cut_keep_lower = true; + doc.features.push_back(cut); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(int(doc.bodies.size()) == n_before + 1); + REQUIRE_THAT(double(doc.display_mesh.volume()), WithinRel(v_orig, 0.01)); + + for (const auto& b : doc.bodies) { + double v = double(SketchEngine::tessellate(b.shape).volume()); + REQUIRE_THAT(v, WithinRel(v_orig * 0.5, 0.01)); + } + } + + SECTION("keep lower half only") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + const double v_orig = double(doc.display_mesh.volume()); + const int n_before = int(doc.bodies.size()); + + CadFeature cut; + cut.type = CadFeatureType::Cut; + cut.plane = SketchPlane::XY(); + cut.cut_offset = 10.0; + cut.cut_keep_upper = false; + cut.cut_keep_lower = true; + doc.features.push_back(cut); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(int(doc.bodies.size()) == n_before); + REQUIRE_THAT(double(doc.display_mesh.volume()), WithinRel(v_orig * 0.5, 0.01)); + } + + SECTION("flip swaps which side is kept") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + const double v_orig = double(doc.display_mesh.volume()); + + // cut with flip=true, keep_upper=true → the -normal side (original bottom half) + CadFeature cut; + cut.type = CadFeatureType::Cut; + cut.plane = SketchPlane::XY(); + cut.cut_offset = 10.0; + cut.cut_flip = true; + cut.cut_keep_upper = true; + cut.cut_keep_lower = false; + doc.features.push_back(cut); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(double(doc.display_mesh.volume()), WithinRel(v_orig * 0.5, 0.01)); + } + + SECTION("both keep flags false throws") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + + CadFeature cut; + cut.type = CadFeatureType::Cut; + cut.plane = SketchPlane::XY(); + cut.cut_keep_upper = false; + cut.cut_keep_lower = false; + doc.features.push_back(cut); + + REQUIRE_FALSE(doc.recompute()); + } +} + +TEST_CASE("both-halves plane cut splits a body into two equal halves", "[CadDocument][cut]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + double v_orig = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE(v_orig > 0.0); + + doc.add_cut(SketchPlane::XY(), 5.0, false, true, true, 0, "SplitBoth"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + double v0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double v1 = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + REQUIRE_THAT(v0 + v1, WithinRel(v_orig, 1e-4)); + REQUIRE_THAT(v0, WithinRel(20.0 * 20.0 * 5.0, 0.01)); + REQUIRE_THAT(v1, WithinRel(20.0 * 20.0 * 5.0, 0.01)); +} + +TEST_CASE("split by a body face divides a box into two halves via top-face offset", "[CadDocument][cut]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + double v_orig = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_split_by_face(0, -1, top_face, true, true, "SplitByFace"); + doc.features.back().cut_offset = -5.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + double v0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double v1 = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + REQUIRE_THAT(v0 + v1, WithinRel(v_orig, 1e-4)); + REQUIRE_THAT(v0, WithinRel(20.0 * 20.0 * 5.0, 0.02)); + REQUIRE_THAT(v1, WithinRel(20.0 * 20.0 * 5.0, 0.02)); +} + +TEST_CASE("split by face keep upper only", "[CadDocument][cut]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_split_by_face(0, -1, top_face, true, false, "SplitUpper"); + doc.features.back().cut_offset = -5.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + + double v = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE_THAT(v, WithinRel(20.0 * 20.0 * 5.0, 0.02)); +} + +TEST_CASE("split by face round-trip serialization", "[CadDocument][cut]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_split_by_face(0, 0, top_face, true, true, "SplitRT"); + doc.features.back().cut_offset = -5.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + int saved_face_body = doc.features.back().cut_face_body; + int saved_face = doc.features.back().cut_face; + bool saved_upper = doc.features.back().cut_keep_upper; + bool saved_lower = doc.features.back().cut_keep_lower; + size_t saved_nb = doc.bodies.size(); + + std::vector> bboxes; + for (const auto& b : doc.bodies) { + Bnd_Box bb; BRepBndLib::Add(b.shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes.push_back({Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}); + } + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.bodies.size() == saved_nb); + REQUIRE(doc2.features.size() == doc.features.size()); + + const auto& f2 = doc2.features.back(); + REQUIRE(f2.cut_face_body == saved_face_body); + REQUIRE(f2.cut_face == saved_face); + REQUIRE(f2.cut_keep_upper == saved_upper); + REQUIRE(f2.cut_keep_lower == saved_lower); + + for (size_t i = 0; i < saved_nb; ++i) { + Bnd_Box bb; BRepBndLib::Add(doc2.bodies[i].shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(double(x0), WithinAbs(bboxes[i].first.x(), 1e-6)); + REQUIRE_THAT(double(y0), WithinAbs(bboxes[i].first.y(), 1e-6)); + REQUIRE_THAT(double(z0), WithinAbs(bboxes[i].first.z(), 1e-6)); + REQUIRE_THAT(double(x1), WithinAbs(bboxes[i].second.x(), 1e-6)); + REQUIRE_THAT(double(y1), WithinAbs(bboxes[i].second.y(), 1e-6)); + REQUIRE_THAT(double(z1), WithinAbs(bboxes[i].second.z(), 1e-6)); + } +} + +TEST_CASE("mirror reflects a body about a plane", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + auto make_box = [](CadDocument& doc, double w, double h, double d) { + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), w, h, 0, "Box"); + doc.add_extrude(sk, d, false, BooleanMode::New, "E"); + }; + + // --- New mode: 20x20x20 cube, mirror about XZ plane offset to x=30 --- + // The cube is in x=[-10,10]; the mirror is at x=30, so the mirrored cube + // is at x=[50,70]. Disjoint -> two bodies, equal volumes (8000 each). + SECTION("New mode: two disjoint bodies, equal volumes") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double v_orig = double(doc.display_mesh.volume()); + REQUIRE_THAT(v_orig, WithinRel(8000.0, 0.01)); + + doc.add_mirror(SketchPlane::XZ(), 0, BooleanMode::New, "Mirror1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + double v0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double v1 = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + REQUIRE_THAT(v0, WithinRel(8000.0, 0.01)); + REQUIRE_THAT(v1, WithinRel(8000.0, 0.01)); + } + + // --- New mode with keep_original=false: the source body is replaced --- + SECTION("New mode, keep_original=false: source body removed") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + doc.add_mirror(SketchPlane::XZ(), 0, BooleanMode::New, "Mirror1"); + doc.features.back().mirror_keep_original = false; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + double v = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE_THAT(v, WithinRel(8000.0, 0.01)); + } + + // --- Add mode: L-shape, entirely on one side of the mirror plane -> 2x volume --- + // Build an L-shape completely in x>0: base 20x20x5 at x=[0,20] + wall 10x20x10 + // at x=[0,10] on top. Mirror about XZ at x=30 -> mirror at x=[40,60], disjoint. + SECTION("Add mode: asymmetric L-shape, disjoint halves -> 2x volume") { + CadDocument doc; + // Base: 20x20x5, shifted to x=10 so it's in x=[0,20] + CadFeature skb; + skb.type = CadFeatureType::Sketch; + skb.name = "Base"; + skb.plane = SketchPlane::XY(); + skb.imported_regions = {{ {Vec2d(0,-10), Vec2d(20,-10), Vec2d(20,10), Vec2d(0,10)} }}; + doc.features.push_back(skb); + int skb_idx = int(doc.features.size()) - 1; + CadFeature exb; + exb.type = CadFeatureType::Extrude; + exb.name = "EBase"; + exb.sketch_ref = skb_idx; + exb.distance = 5.0; + exb.mode = BooleanMode::New; + doc.features.push_back(exb); + + // Wall: 10x20x10 on top of the base, x=[0,10] + CadFeature skw; + skw.type = CadFeatureType::Sketch; + skw.name = "Wall"; + skw.plane = SketchPlane::XY(); + skw.plane.origin = Vec3d(0, 0, 5); + skw.imported_regions = {{ {Vec2d(0,-10), Vec2d(10,-10), Vec2d(10,10), Vec2d(0,10)} }}; + doc.features.push_back(skw); + int skw_idx = int(doc.features.size()) - 1; + CadFeature exw; + exw.type = CadFeatureType::Extrude; + exw.name = "EWall"; + exw.sketch_ref = skw_idx; + exw.distance = 10.0; + exw.mode = BooleanMode::Add; + exw.target_body = 0; + doc.features.push_back(exw); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double v_l = double(doc.display_mesh.volume()); + + // Mirror about YZ at x=30 -> the mirror is entirely in x=[40,60], + // disjoint from the original in x=[0,20]. + SketchPlane mp = SketchPlane::YZ(); + mp.origin = Vec3d(30, 0, 0); + doc.add_mirror(mp, 0, BooleanMode::Add, "Mirror1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + const double v_m = double(doc.display_mesh.volume()); + REQUIRE_THAT(v_m, WithinRel(2.0 * v_l, 0.02)); + } + + // --- Add mode with intersecting plane -> fused volume < 2x --- + // A 20x20x20 cube centred on the origin (so x=[-10,10]), mirrored about + // XZ plane at x=0. The mirror maps the cube onto itself exactly (symmetry). + // Fusing a cube with itself at the plane of symmetry produces the same cube + // -> volume == original, strictly less than 2x. + SECTION("Add mode: intersecting plane -> volume < 2x original") { + CadDocument doc; + make_box(doc, 20.0, 20.0, 20.0); + REQUIRE(doc.recompute()); + const double v_orig = double(doc.display_mesh.volume()); + REQUIRE_THAT(v_orig, WithinRel(8000.0, 0.01)); + + doc.add_mirror(SketchPlane::XZ(), 0, BooleanMode::Add, "Mirror1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double v_mir = double(doc.display_mesh.volume()); + REQUIRE(v_mir < v_orig * 1.9); + } + + // --- Invalid target body index --- + SECTION("invalid target body index -> error, no crash") { + CadDocument doc; + // No bodies in the document -> mirror must fail, not crash. + doc.features.push_back({CadFeatureType::Mirror, "BadMirror", true, + SketchShape::Rectangle, SketchPlane::XZ()}); + doc.features.back().mode = BooleanMode::New; + REQUIRE_FALSE(doc.recompute()); + REQUIRE_FALSE(doc.error.empty()); + } +} + +TEST_CASE("mirror serialization round-trip", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + + doc.add_mirror(SketchPlane::XZ(), 0, BooleanMode::New, "Mirror1"); + doc.features.back().mirror_keep_original = false; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.recompute()); + REQUIRE(doc2.error.empty()); + + REQUIRE(doc2.features.size() == doc.features.size()); + const auto& f1 = doc.features.back(); + const auto& f2 = doc2.features.back(); + REQUIRE(f2.type == CadFeatureType::Mirror); + REQUIRE(f2.mode == BooleanMode::New); + REQUIRE(f2.mirror_keep_original == false); + REQUIRE(f2.name == "Mirror1"); + + REQUIRE(doc2.bodies.size() == doc.bodies.size()); +} + +TEST_CASE("mass properties: analytic cube", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto mp = doc.body_mass_properties(0); + REQUIRE(mp.valid); + // Cube 20x20x20 -> V = 8000 mm^3 + REQUIRE_THAT(mp.volume, WithinRel(8000.0, 1e-6)); + // Surface area = 6 * 20^2 = 2400 mm^2 + REQUIRE_THAT(mp.surface_area, WithinRel(2400.0, 1e-6)); + // COM at geometric centre: the box centred on origin is from z=0 to z=20, + // so centre at (0, 0, 10) + REQUIRE_THAT(mp.center_of_mass.x(), WithinAbs(0.0, 1e-6)); + REQUIRE_THAT(mp.center_of_mass.y(), WithinAbs(0.0, 1e-6)); + REQUIRE_THAT(mp.center_of_mass.z(), WithinAbs(10.0, 1e-6)); + // Inertia sanity: symmetric cube -> diagonal terms equal, off-diagonal ~0 + double Ixx = mp.inertia[0], Iyy = mp.inertia[4], Izz = mp.inertia[8]; + REQUIRE_THAT(Ixx, WithinRel(8000.0 * (20*20 + 20*20) / 12.0, 1e-4)); // I = m/12*(b^2+h^2) about COM + REQUIRE_THAT(Iyy, WithinRel(Ixx, 1e-4)); + REQUIRE_THAT(Izz, WithinRel(Ixx, 1e-4)); + REQUIRE_THAT(mp.inertia[1], WithinAbs(0.0, 1e-6)); + REQUIRE_THAT(mp.inertia[2], WithinAbs(0.0, 1e-6)); + REQUIRE_THAT(mp.inertia[5], WithinAbs(0.0, 1e-6)); +} + +TEST_CASE("mass properties: analytic cylinder", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + // Circle r=10 on XY, extrude height=5 -> cylinder + SketchEntity c; + c.type = SketchEntity::Type::Circle; + c.center = Vec2d(0, 0); + c.radius = 10.0; + int sk = doc.add_sketch_entities({c}, SketchPlane::XY(), "Circle"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto mp = doc.body_mass_properties(0); + REQUIRE(mp.valid); + double expected_vol = M_PI * 100.0 * 5.0; // pi * r^2 * h + REQUIRE_THAT(mp.volume, WithinRel(expected_vol, 1e-4)); + // Surface: 2*pi*r^2 + 2*pi*r*h = 2*pi*100 + 2*pi*10*5 = 200*pi + 100*pi = 300*pi + double expected_area = 2 * M_PI * 100.0 + 2 * M_PI * 10.0 * 5.0; + REQUIRE_THAT(mp.surface_area, WithinRel(expected_area, 1e-4)); +} + +TEST_CASE("mass properties: hollow body", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + // Solid cube + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + auto mp_solid = doc.body_mass_properties(0); + REQUIRE(mp_solid.valid); + double solid_vol = mp_solid.volume; + + // Hollow cube with a through hole + CadDocument doc2; + int sk2 = doc2.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc2.add_extrude(sk2, 20.0, false, BooleanMode::New, "Extrude"); + doc2.add_hole(10.0, 20.0, true, 0.0, 0.0, SketchPlane::XY(), "Hole"); + REQUIRE(doc2.recompute()); + auto mp_hollow = doc2.body_mass_properties(0); + REQUIRE(mp_hollow.valid); + + // Hollow volume < solid volume + REQUIRE(mp_hollow.volume < solid_vol); + // Hollow = solid - cylinder: V_cyl = pi*5^2*20 = 500*pi + double expected_hollow = solid_vol - M_PI * 25.0 * 20.0; + REQUIRE_THAT(mp_hollow.volume, WithinRel(expected_hollow, 0.01)); +} + +TEST_CASE("mass properties: invalid body index", "[CadDocument]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + // Out of range -> valid=false + auto mp = doc.body_mass_properties(99); + REQUIRE_FALSE(mp.valid); + REQUIRE(mp.volume == 0.0); + // Negative index + auto mp2 = doc.body_mass_properties(-1); + REQUIRE_FALSE(mp2.valid); + + // Empty document (no recompute) -> all bodies empty, index 0 out of range + CadDocument empty; + auto mp3 = empty.body_mass_properties(0); + REQUIRE_FALSE(mp3.valid); +} + +TEST_CASE("serialize_recipe roundtrip with two bodies", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + CadDocument doc; + + // Body 1: rectangle sketch + extrude + fillet + int sk1 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Rect1"); + REQUIRE(sk1 >= 0); + doc.add_extrude(sk1, 10.0, false, BooleanMode::New, "Extrude1"); + doc.add_fillet(2.0, FaceGroup::All, "Fillet1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body 2: circle sketch + extrude (separate New body) + SketchEntity circ; + circ.type = SketchEntity::Type::Circle; + circ.center = Vec2d(0, 0); + circ.radius = 8.0; + int sk2 = doc.add_sketch_entities({circ}, SketchPlane::XZ(), "Circle2"); + doc.add_extrude(sk2, 6.0, false, BooleanMode::New, "Extrude2"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + REQUIRE(doc.bodies.size() >= 2); + std::vector orig_vols; + for (const auto& b : doc.bodies) + orig_vols.push_back(double(SketchEngine::tessellate(b.shape).volume())); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.bodies.size() == doc.bodies.size()); + + for (size_t i = 0; i < doc.bodies.size(); ++i) { + double v2 = double(SketchEngine::tessellate(doc2.bodies[i].shape).volume()); + REQUIRE_THAT(v2, WithinRel(orig_vols[i], 1e-6)); + } +} + +TEST_CASE("deserialize_recipe rejects future version with error", "[CadDocument]") +{ + CadDocument doc; + std::ostringstream oss; + { + cereal::BinaryOutputArchive ar(oss); + uint32_t v = 999; + ar(v); + } + REQUIRE_FALSE(doc.deserialize_recipe(oss.str())); + REQUIRE_FALSE(doc.error.empty()); + CHECK_CONTAINS(doc.error, "newer version"); +} + +TEST_CASE("deserialize_recipe rejects older version with error", "[CadDocument]") +{ + CadDocument doc; + std::ostringstream oss; + { + cereal::BinaryOutputArchive ar(oss); + uint32_t v = 1; + ar(v); + } + REQUIRE_FALSE(doc.deserialize_recipe(oss.str())); + REQUIRE_FALSE(doc.error.empty()); + CHECK_CONTAINS(doc.error, "older version"); +} + +TEST_CASE("deserialize_recipe handles truncated blob without throwing", "[CadDocument]") +{ + CadDocument doc; + std::string garbage = "this is not a valid cereal blob"; + REQUIRE_FALSE(doc.deserialize_recipe(garbage)); + REQUIRE_FALSE(doc.error.empty()); +} + +TEST_CASE("deserialize_recipe handles empty blob without throwing", "[CadDocument]") +{ + CadDocument doc; + REQUIRE_FALSE(doc.deserialize_recipe("")); + REQUIRE_FALSE(doc.error.empty()); +} + +TEST_CASE("deserialize_recipe error is non-empty on every failure path", "[CadDocument]") +{ + CadDocument doc; + auto reset = [&]() { doc = CadDocument{}; }; + + // too new + { + std::ostringstream oss; + { cereal::BinaryOutputArchive ar(oss); uint32_t v = 999; ar(v); } + reset(); + REQUIRE_FALSE(doc.deserialize_recipe(oss.str())); + REQUIRE_FALSE(doc.error.empty()); + } + // too old + { + std::ostringstream oss; + { cereal::BinaryOutputArchive ar(oss); uint32_t v = 1; ar(v); } + reset(); + REQUIRE_FALSE(doc.deserialize_recipe(oss.str())); + REQUIRE_FALSE(doc.error.empty()); + } + // truncated / garbage + { + reset(); + REQUIRE_FALSE(doc.deserialize_recipe("not a valid blob \x00\x01\x02")); + REQUIRE_FALSE(doc.error.empty()); + } + // empty + { + reset(); + REQUIRE_FALSE(doc.deserialize_recipe("")); + REQUIRE_FALSE(doc.error.empty()); + } +} + +TEST_CASE("a v4 project still opens", "[CadDocument][recipe]") +{ + // The regression guard for everyone who already has projects: a pre-framing v4 + // recipe must keep opening on this build, through the unchanged flat path — not be + // refused at the version gate after the bump to v5. + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_v4.bin"; + std::ifstream ifs(path, std::ios::binary); + REQUIRE(ifs.is_open()); + std::string blob((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + ifs.close(); + REQUIRE_FALSE(blob.empty()); + + // Trusted reference read of the flat v4 layout (what the golden test's Layer 1 does). + std::vector flat; + { + std::istringstream iss(blob); + cereal::BinaryInputArchive ar(iss); + uint32_t v; + ar(v); + REQUIRE(v == 4); + ar(flat); + } + REQUIRE_FALSE(flat.empty()); + + CadDocument doc; + doc.deserialize_recipe(blob); + // Not refused at the gate: the only failure allowed is the fixture's own geometry + // (the golden doc is a serialization-coverage tree whose fillet radius is too large), + // which is orthogonal to the v5 framing change and unchanged by it. + REQUIRE(doc.error.find("older version") == std::string::npos); + REQUIRE(doc.error.find("newer version") == std::string::npos); + // The v4 flat path read the same feature tree as the trusted reference. + REQUIRE(doc.features.size() == flat.size()); +} + +// Do NOT regenerate cad_recipe_v5.bin either. It was written by the build that predates the +// bump to v6, which is the whole reason it can prove the gate lets a v5 project through. +TEST_CASE("a v5 project still opens", "[CadDocument][recipe]") +{ + // The bump to v6 renamed nothing inside the blob — it records the recipe's move to + // Metadata/orca_cad.bin — so a v5 project must still come through the framed path rather + // than be refused at the version gate for being old. + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_v5.bin"; + std::ifstream ifs(path, std::ios::binary); + REQUIRE(ifs.is_open()); + std::string blob((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + ifs.close(); + REQUIRE(blob.size() >= sizeof(uint32_t)); + + uint32_t stamped = 0; + std::memcpy(&stamped, blob.data(), sizeof(stamped)); + REQUIRE(stamped == 5); // the fixture really is pre-bump, not a regenerated one + + CadDocument doc; + doc.deserialize_recipe(blob); + // As with the v4 fixture: the only failure allowed is the golden tree's own geometry, which + // is orthogonal to the version gate. Being turned away at the gate is not. + REQUIRE(doc.error.find("older version") == std::string::npos); + REQUIRE(doc.error.find("newer version") == std::string::npos); + REQUIRE_FALSE(doc.features.empty()); +} + +TEST_CASE("a v5 round trip is exact", "[CadDocument][recipe]") +{ + using Catch::Matchers::WithinRel; + CadDocument doc; + + // Body 1: rectangle sketch + extrude + fillet + int sk1 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Rect1"); + REQUIRE(sk1 >= 0); + doc.add_extrude(sk1, 10.0, false, BooleanMode::New, "Extrude1"); + doc.add_fillet(2.0, FaceGroup::All, "Fillet1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body 2: circle sketch + extrude (separate New body) + SketchEntity circ; + circ.type = SketchEntity::Type::Circle; + circ.center = Vec2d(0, 0); + circ.radius = 8.0; + int sk2 = doc.add_sketch_entities({circ}, SketchPlane::XZ(), "Circle2"); + doc.add_extrude(sk2, 6.0, false, BooleanMode::New, "Extrude2"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + REQUIRE(doc.bodies.size() >= 2); + std::vector orig_vols; + for (const auto& b : doc.bodies) + orig_vols.push_back(double(SketchEngine::tessellate(b.shape).volume())); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.features.size() == doc.features.size()); + for (size_t i = 0; i < doc.features.size(); ++i) + REQUIRE(doc2.features[i].type == doc.features[i].type); + REQUIRE(doc2.bodies.size() == doc.bodies.size()); + for (size_t i = 0; i < doc.bodies.size(); ++i) { + double v2 = double(SketchEngine::tessellate(doc2.bodies[i].shape).volume()); + REQUIRE_THAT(v2, WithinRel(orig_vols[i], 1e-6)); + } +} + +TEST_CASE("a truncated feature keeps what it could read", "[CadDocument][recipe]") +{ + // The forward-compat proof: a framed reader that meets a feature blob shorter than its own + // field list must keep what it read and default the rest, not error. Simulate an older + // file by hand-shortening ONE feature's frame: rewrite its length prefix and drop the + // tail bytes, then confirm the load still succeeds and the fields before the cut survive. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "Sk1"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Ex1"); + int sk2 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 12, 12, 0, "Sk2"); + doc.add_extrude(sk2, 3.0, false, BooleanMode::New, "Ex2"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Two trailing connector-fingerprint fields, made distinctive so the cut is observable: + // coordsys_face_kind sits right before the LAST serialized field (coordsys_face_edges), + // which is the one we drop. They are ignored by an Extrude's recompute, so the truncated + // document still replays cleanly. + doc.features[1].coordsys_face_kind = 777; + doc.features[1].coordsys_face_edges = 888; + + auto blob = doc.serialize_recipe(); + REQUIRE(blob.size() > 8); + + auto rd32 = [](const std::string& s, size_t off) -> uint32_t { + uint32_t u; + std::memcpy(&u, s.data() + off, sizeof(u)); + return u; + }; + auto wr32 = [](std::string& s, size_t off, uint32_t u) { + std::memcpy(&s[off], &u, sizeof(u)); + }; + + // Against the constant, not a literal: what this asserts is that the outer frame opens with + // the version stamp, which stays true across every bump. + REQUIRE(rd32(blob, 0) == CadDocument::ORCA_CAD_RECIPE_VERSION); + uint32_t count = rd32(blob, 4); + REQUIRE(count == doc.features.size()); + + // Walk the outer framing: version + count, then [len][bytes] per feature. + std::vector f_off, f_len; + size_t off = 8; + for (uint32_t i = 0; i < count; ++i) { + f_off.push_back(off); + f_len.push_back(rd32(blob, off)); + off += 4 + f_len.back(); + } + + // Shorten feature 1 by dropping its final field (4 bytes): rewrite its length prefix + // and erase the tail bytes. The reader then runs out inside fa(f), throws, and keeps + // everything it had already assigned — that is the whole point of the try/catch. + const size_t drop = sizeof(uint32_t); + REQUIRE(f_len[1] > drop); + std::string shortened = blob; + shortened.erase(f_off[1] + 4 + f_len[1] - drop, drop); + wr32(shortened, f_off[1], static_cast(f_len[1] - drop)); + + CadDocument loaded; + REQUIRE(loaded.deserialize_recipe(shortened)); + REQUIRE(loaded.error.empty()); + REQUIRE(loaded.features.size() == count); + + // Fields before the cut survived; the cut field defaulted; the neighbours on both sides + // are intact, proving the outer framing held. + REQUIRE(loaded.features[1].name == doc.features[1].name); + REQUIRE(loaded.features[1].coordsys_face_kind == 777); // right before the cut + REQUIRE(loaded.features[1].coordsys_face_edges == -1); // defaulted by the cut + REQUIRE(loaded.features[0].name == doc.features[0].name); + REQUIRE(loaded.features[2].name == doc.features[2].name); +} + +TEST_CASE("a v3 recipe is refused with a message naming the version", "[CadDocument][recipe]") +{ + // Honesty guard: the framing fixes the future, not the past. A v3 field list no longer + // exists in this code, so a v3 blob must be refused cleanly and must say which version. + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_v3.bin"; + std::ifstream ifs(path, std::ios::binary); + REQUIRE(ifs.is_open()); + std::string blob((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + ifs.close(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc; + REQUIRE_FALSE(doc.deserialize_recipe(blob)); + REQUIRE_FALSE(doc.error.empty()); + REQUIRE(doc.error.find("v3") != std::string::npos); +} + +TEST_CASE("re-edit: editing a mid-timeline feature rebuilds downstream", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + CadDocument doc; + + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 10, 0, "Sketch1"); + REQUIRE(sk >= 0); + int ex = doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(ex >= 0); + doc.add_fillet(1.0, FaceGroup::All, "Fillet1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + Vec3d sz0 = doc.display_mesh.bounding_box().size(); + REQUIRE(sz0.z() > 0.0); + + // Edit the MID feature (extrude — NOT the last; Fillet is downstream). + doc.features[ex].distance = 12.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + Vec3d sz1 = doc.display_mesh.bounding_box().size(); + REQUIRE(sz1.z() > sz0.z() + 1.0); + REQUIRE(doc.bodies.size() == 1); + + // Edit the FIRST feature (sketch width) — must propagate the whole chain. + doc.features[sk].width = 30; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + Vec3d sz2 = doc.display_mesh.bounding_box().size(); + REQUIRE(sz2.x() > sz1.x() + 1.0); +} + +TEST_CASE("re-edit survives serialize -> deserialize", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + CadDocument doc; + + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 10, 0, "Sketch1"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude1"); + doc.add_fillet(1.0, FaceGroup::All, "Fillet1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.recompute()); + REQUIRE(doc2.error.empty()); + Vec3d sz_pre = doc2.display_mesh.bounding_box().size(); + REQUIRE(sz_pre.z() > 0.0); + + // Mid-edit the deserialized document — the persisted recipe stays re-editable. + doc2.features[1].distance = 12.0; + REQUIRE(doc2.recompute()); + REQUIRE(doc2.error.empty()); + Vec3d sz_post = doc2.display_mesh.bounding_box().size(); + REQUIRE(sz_post.z() > sz_pre.z() + 1.0); +} + +TEST_CASE("re-edit: multi-type timeline replays all downstream features", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + CadDocument doc; + + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 30, 30, 0, "Sketch1"); + REQUIRE(sk >= 0); + int ex = doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(ex >= 0); + doc.add_hole(6.0, 4.0, false, 0.0, 0.0, SketchPlane::XY(), "Hole1"); + doc.add_chamfer(1.0, FaceGroup::All, "Chamfer1"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + size_t n_bodies = doc.bodies.size(); + REQUIRE(n_bodies >= 1); + Vec3d sz0 = doc.display_mesh.bounding_box().size(); + REQUIRE(sz0.z() > 0.0); + + // Edit the MID extrude — downstream Hole and Chamfer must rebuild. + doc.features[ex].distance = 16.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == n_bodies); + Vec3d sz1 = doc.display_mesh.bounding_box().size(); + REQUIRE(sz1.z() > sz0.z() + 1.0); +} + +TEST_CASE("datum plane construction methods", "[CadDocument][plane]") +{ + using Catch::Matchers::WithinAbs; + + // Build a doc with a box (sketch rect 40x30 + extrude 20) so bodies[0] has faces/edges. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 40, 30, 0, "BoxSketch"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + const int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + REQUIRE(n_faces == 6); // a box + const int n_edges = GeometryEngine::edge_count(doc.bodies[0].shape); + REQUIRE(n_edges == 12); + + // Find top face (normal ~ +Z) and bottom face (normal ~ -Z) by scanning. + int top_idx = -1, bot_idx = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) top_idx = i; + if (n.z() < -0.9) bot_idx = i; + } + REQUIRE(top_idx >= 0); + REQUIRE(bot_idx >= 0); + + // --- Offset from base XY by 10 --- + auto planes0 = doc.resolve_datum_planes(); + size_t initial = planes0.size(); + + CadFeature f0; + f0.type = CadFeatureType::Plane; + f0.name = "Offset10"; + f0.plane_base = 0; // XY + f0.plane_type = PlaneType::Offset; + f0.plane_offset = 10; + doc.features.push_back(f0); + + auto planes = doc.resolve_datum_planes(); + REQUIRE(planes.size() == initial + 1); + CHECK_THAT(planes.back().second.origin.z(), WithinAbs(10.0, 1e-6)); + CHECK_THAT(planes.back().second.normal.z(), WithinAbs(1.0, 1e-6)); + + // --- Coincident to top face --- + CadFeature f1; + f1.type = CadFeatureType::Plane; + f1.name = "CoincidentTop"; + f1.plane_type = PlaneType::Coincident; + f1.plane_face_body = 0; + f1.plane_face = top_idx; + doc.features.push_back(f1); + + planes = doc.resolve_datum_planes(); + REQUIRE(planes.size() == initial + 2); + CHECK_THAT(planes.back().second.origin.z(), WithinAbs(20.0, 1e-6)); // box height is 20 + CHECK_THAT(planes.back().second.normal.z(), WithinAbs(1.0, 1e-6)); + + // --- Midplane between top and bottom faces --- + CadFeature f2; + f2.type = CadFeatureType::Plane; + f2.name = "Midplane"; + f2.plane_type = PlaneType::Midplane; + f2.plane_face_body = 0; + f2.plane_face = top_idx; + f2.plane_face2_body = 0; + f2.plane_face2 = bot_idx; + doc.features.push_back(f2); + + planes = doc.resolve_datum_planes(); + REQUIRE(planes.size() == initial + 3); + CHECK_THAT(planes.back().second.origin.z(), WithinAbs(10.0, 1e-6)); // midway + CHECK_THAT(std::abs(planes.back().second.normal.z()), WithinAbs(1.0, 1e-6)); + + // --- Orthonormality check on all resolved planes --- + for (const auto& [name, sp] : planes) { + INFO("Plane: " << name); + CHECK_THAT(sp.normal.norm(), WithinAbs(1.0, 1e-6)); + CHECK_THAT(sp.x_axis.norm(), WithinAbs(1.0, 1e-6)); + CHECK_THAT(sp.y_axis.norm(), WithinAbs(1.0, 1e-6)); + CHECK_THAT(std::abs(sp.x_axis.dot(sp.y_axis)), WithinAbs(0.0, 1e-6)); + CHECK_THAT(std::abs(sp.x_axis.dot(sp.normal)), WithinAbs(0.0, 1e-6)); + CHECK_THAT(std::abs(sp.y_axis.dot(sp.normal)), WithinAbs(0.0, 1e-6)); + } +} + +// Mirrors the Snapmaker [Deviation] case (Snapmaker carries it in test_geometry.cpp; here it lives +// alongside the CAD suite). GeometryEngine::surface_deviation = one-sided Hausdorff used by the +// MCP validate_against acceptance metric. +TEST_CASE("surface_deviation: identical solids ~0, shifted solid ~shift", "[Deviation]") +{ + TopoDS_Shape ref = BRepPrimAPI_MakeBox(10.0, 10.0, 10.0).Shape(); + auto d0 = GeometryEngine::surface_deviation(ref, ref, 0.5); + REQUIRE(d0.sample_count > 0); + REQUIRE_THAT(d0.max_mm, Catch::Matchers::WithinAbs(0.0, 1e-6)); + + // candidate shifted +2mm in X: far corner vertices sit 2mm outside the reference + gp_Trsf t; t.SetTranslation(gp_Vec(2.0, 0.0, 0.0)); + TopoDS_Shape shifted = BRepBuilderAPI_Transform(ref, t, true).Shape(); + auto d1 = GeometryEngine::surface_deviation(shifted, ref, 0.5); + REQUIRE_THAT(d1.max_mm, Catch::Matchers::WithinAbs(2.0, 0.05)); + REQUIRE(d1.mean_mm > 0.0); +} + +TEST_CASE("mesh_to_brep: watertight cube -> solid, coplanar merge gives 6 faces", "[design][mesh2brep]") +{ + const indexed_triangle_set cube = its_make_cube(10.0, 20.0, 30.0); + REQUIRE(cube.indices.size() == 12); + + SECTION("faceted: one B-rep face per triangle, exact volume") { + GeometryEngine::MeshBrepStats st; + const TopoDS_Shape shape = GeometryEngine::mesh_to_brep(cube, 0.01, /*no merge*/0.0, st); + REQUIRE_FALSE(shape.IsNull()); + CHECK(st.kept_tris == 12); + CHECK(st.faces_built == 12); + CHECK(st.faces_final == 12); + // Shared topology by construction: a cube has 8 vertices and 18 edges once the two + // triangles of each face share their diagonal. Every edge used exactly twice. + CHECK(st.unique_edges == 18); + CHECK(st.boundary_edges == 0); + CHECK(st.nonmanifold_edges == 0); + CHECK(st.watertight); + REQUIRE(st.is_solid); + REQUIRE_THAT(st.volume, Catch::Matchers::WithinRel(10.0 * 20.0 * 30.0, 1e-9)); + } + + SECTION("merge coplanar: 12 triangles collapse to the cube's 6 real faces") { + GeometryEngine::MeshBrepStats st; + const TopoDS_Shape shape = GeometryEngine::mesh_to_brep(cube, 0.01, 5.0, st); + REQUIRE_FALSE(shape.IsNull()); + REQUIRE(st.is_solid); + // This is the whole point of merging: the imported body must expose pickable CAD faces, + // not one face per triangle, or the fillet/extrude tools have nothing meaningful to grab. + REQUIRE(st.faces_final == 6); + REQUIRE_THAT(st.volume, Catch::Matchers::WithinRel(10.0 * 20.0 * 30.0, 1e-9)); + } +} + +TEST_CASE("mesh_to_brep: an open mesh is reported as a shell, never a fake solid", "[design][mesh2brep]") +{ + indexed_triangle_set open_cube = its_make_cube(10.0, 10.0, 10.0); + open_cube.indices.pop_back(); // punch a hole: drop one triangle + open_cube.indices.pop_back(); // (and its coplanar partner -> a whole face missing) + + GeometryEngine::MeshBrepStats st; + const TopoDS_Shape shape = GeometryEngine::mesh_to_brep(open_cube, 0.01, 5.0, st); + REQUIRE_FALSE(shape.IsNull()); + CHECK(st.kept_tris == 10); + CHECK(st.boundary_edges > 0); // the hole's rim + CHECK_FALSE(st.watertight); + REQUIRE_FALSE(st.is_solid); // must NOT be dressed up as a solid + CHECK(st.volume == 0.0); +} + +TEST_CASE("mesh_to_brep: degenerate triangles are rejected on a scale-independent test", "[design][mesh2brep]") +{ + // A thin but perfectly legitimate CAD sliver. Every edge (1.0, ~0.5, ~0.5) is far above the + // 0.01 dedup tolerance, so no vertex collapses — but its area (5e-5) is BELOW tolerance^2 + // (1e-4). A rule of "reject when area < tolerance^2" would therefore throw it away, which is + // precisely the bug that turned a watertight 62k-triangle input into a falsely-open shell. + // The scale-independent test (area < 1e-9 * longest_edge^2 = 1e-9) keeps it, as it must. + indexed_triangle_set sliver; + sliver.vertices = { {0.f, 0.f, 0.f}, {1.f, 0.f, 0.f}, {0.5f, 0.0001f, 0.f} }; + sliver.indices = { {0, 1, 2} }; + GeometryEngine::MeshBrepStats st; + GeometryEngine::mesh_to_brep(sliver, 0.01, 0.0, st); + CHECK(st.degenerate_sliver == 0); + CHECK(st.degenerate_collapsed == 0); + CHECK(st.kept_tris == 1); + + // A truly collinear triangle has no area at any scale -> rejected as a sliver. + indexed_triangle_set collinear; + collinear.vertices = { {0.f, 0.f, 0.f}, {10.f, 0.f, 0.f}, {20.f, 0.f, 0.f} }; + collinear.indices = { {0, 1, 2} }; + GeometryEngine::MeshBrepStats st2; + CHECK_THROWS(GeometryEngine::mesh_to_brep(collinear, 0.01, 0.0, st2)); // nothing left to build + CHECK(st2.degenerate_sliver == 1); + + // A triangle entirely inside one tolerance cell is sub-resolution noise -> collapsed. + indexed_triangle_set tiny; + tiny.vertices = { {0.f, 0.f, 0.f}, {0.001f, 0.f, 0.f}, {0.f, 0.001f, 0.f} }; + tiny.indices = { {0, 1, 2} }; + GeometryEngine::MeshBrepStats st3; + CHECK_THROWS(GeometryEngine::mesh_to_brep(tiny, 0.1, 0.0, st3)); + CHECK(st3.degenerate_collapsed == 1); +} + +TEST_CASE("datum axis: two points direction is unit and analytic", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int ax = doc.add_axis(AxisType::TwoPoints, "AxisThroughZ"); + REQUIRE(ax == 0); + doc.features[ax].axis_p1 = Vec3d(0, 0, 0); + doc.features[ax].axis_p2 = Vec3d(0, 0, 10); + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE(axes[0].name == "AxisThroughZ"); + REQUIRE(axes[0].error.empty()); + CHECK_THAT(axes[0].direction.x(), WithinAbs(0.0, 1e-12)); + CHECK_THAT(axes[0].direction.y(), WithinAbs(0.0, 1e-12)); + CHECK_THAT(axes[0].direction.z(), WithinAbs(1.0, 1e-12)); + CHECK_THAT(axes[0].direction.norm(), WithinAbs(1.0, 1e-9)); + CHECK_THAT(axes[0].origin.x(), WithinAbs(0.0, 1e-9)); + CHECK_THAT(axes[0].origin.y(), WithinAbs(0.0, 1e-9)); + CHECK_THAT(axes[0].origin.z(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("datum axis: degenerate two identical points fails cleanly", "[CadDocument]") +{ + CadDocument doc; + int ax = doc.add_axis(AxisType::TwoPoints, "Degenerate"); + doc.features[ax].axis_p1 = Vec3d(5, 5, 5); + doc.features[ax].axis_p2 = Vec3d(5, 5, 5); + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE_FALSE(axes[0].error.empty()); +} + +TEST_CASE("datum axis: two parallel planes fail with error", "[CadDocument]") +{ + CadDocument doc; + // Two offset XY planes are parallel -> no intersection. + // 3 and 4, not 0 and 1: axis_plane_a/b use the same encoding as plane_base — 0/1/2 are the + // XY/XZ/YZ base planes and datums start at 3 — because the GUI fills these from + // populate_plane_choices() and stores the row verbatim. + doc.add_plane(0 /*XY*/, 10.0, 0.0, 0, "PlaneA"); + doc.add_plane(0 /*XY*/, 30.0, 0.0, 0, "PlaneB"); + + int ax = doc.add_axis(AxisType::TwoPoints, "Parallel"); + doc.features[ax].axis_type = AxisType::PlaneIntersection; + doc.features[ax].axis_plane_a = 3; + doc.features[ax].axis_plane_b = 4; + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE_FALSE(axes[0].error.empty()); +} + +// The case the GUI actually produces most often, and which could not work before: the two refs +// are rows of the plane picker, whose first three entries are the base planes. XY x XZ is the +// X axis. Previously ref 0 was read as "datum plane 0", so this silently resolved to the wrong +// plane or failed with "plane ref not found". +TEST_CASE("datum axis: intersection of two BASE planes gives the expected axis", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int ax = doc.add_axis(AxisType::PlaneIntersection, "XAxis"); + doc.features[ax].axis_plane_a = 0; // XY + doc.features[ax].axis_plane_b = 1; // XZ + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE(axes[0].error.empty()); + // XY normal is Z, XZ normal is Y; Z x Y is +/-X. + CHECK_THAT(std::abs(axes[0].direction.x()), WithinAbs(1.0, 1e-12)); + CHECK_THAT(axes[0].direction.y(), WithinAbs(0.0, 1e-12)); + CHECK_THAT(axes[0].direction.z(), WithinAbs(0.0, 1e-12)); +} + +// A datum plane crossed with a base plane — the mixed case, which pins the +3 offset. +TEST_CASE("datum axis: base plane crossed with a datum plane", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + doc.add_plane(1 /*XZ*/, 5.0, 0.0, 0, "OffsetXZ"); // datum 0 -> row 3 + + int ax = doc.add_axis(AxisType::PlaneIntersection, "MixedAxis"); + doc.features[ax].axis_plane_a = 0; // XY base + doc.features[ax].axis_plane_b = 3; // the datum above + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE(axes[0].error.empty()); + CHECK_THAT(std::abs(axes[0].direction.x()), WithinAbs(1.0, 1e-12)); +} + +TEST_CASE("datum axis: cylinder centreline from extruded circle", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Build a cylinder: circle r=5 at origin, extrude 20 mm along +Z -> cylinder z=[0,20] + int sk = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 5.0, "Circle"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Cyl"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + // Find the lateral cylindrical face + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int lateral_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + GeometryEngine::CylinderFace cyl = GeometryEngine::cylinder_of_face(fc); + if (cyl.ok) { lateral_face = i; break; } + } + REQUIRE(lateral_face >= 0); + + int ax = doc.add_axis(AxisType::TwoPoints, "CylAx"); + doc.features[ax].axis_type = AxisType::CylinderCenterline; + doc.features[ax].axis_body = 0; + doc.features[ax].axis_face = lateral_face; + + auto axes = doc.resolve_datum_axes(); + REQUIRE(axes.size() == 1); + REQUIRE(axes[0].error.empty()); + // OCCT may return the axis direction as +Z or -Z depending on face orientation; + // the centreline is always collinear with Z and passes through (x=0,y=0). + CHECK_THAT(std::abs(axes[0].direction.z()), WithinAbs(1.0, 1e-12)); + CHECK_THAT(axes[0].direction.x(), WithinAbs(0.0, 1e-12)); + CHECK_THAT(axes[0].direction.y(), WithinAbs(0.0, 1e-12)); + CHECK_THAT(axes[0].origin.x(), WithinAbs(0.0, 1e-6)); + CHECK_THAT(axes[0].origin.y(), WithinAbs(0.0, 1e-6)); +} + +TEST_CASE("datum coordinate system: non-perpendicular inputs produce orthonormal axes", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Build a body so we have a face to reference for FaceAndDirection. + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + Vec3d fn = GeometryEngine::face_normal_world(GeometryEngine::face_by_index(doc.bodies[0].shape, i)); + if (fn.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "CS1"); + REQUIRE(cs >= 0); + doc.features[cs].coordsys_type = CoordSysType::FaceAndDirection; + doc.features[cs].coordsys_body = 0; + doc.features[cs].coordsys_face = top_face; + // Deliberately non-perpendicular X hint (NOT orthogonal to face normal ~+Z). + doc.features[cs].coordsys_x_hint = Vec3d(3.0, -1.0, 0.5); + + auto css = doc.resolve_datum_coordsys(); + REQUIRE(css.size() == 1); + REQUIRE(css[0].error.empty()); + + Vec3d X = css[0].x, Y = css[0].y; + // Orthonormality: each axis has unit length + CHECK_THAT(X.norm(), WithinAbs(1.0, 1e-9)); + CHECK_THAT(Y.norm(), WithinAbs(1.0, 1e-9)); + // Pairwise dot products are ~0 + CHECK_THAT(std::abs(X.dot(Y)), WithinAbs(0.0, 1e-9)); + // Z = X x Y (derived), also unit and perpendicular + Vec3d Z = X.cross(Y); + CHECK_THAT(Z.norm(), WithinAbs(1.0, 1e-9)); + CHECK_THAT(std::abs(X.dot(Z)), WithinAbs(0.0, 1e-9)); + CHECK_THAT(std::abs(Y.dot(Z)), WithinAbs(0.0, 1e-9)); + // Right-handedness: X x Y == Z + CHECK_THAT(Z.x(), WithinAbs((X.cross(Y)).x(), 1e-9)); + CHECK_THAT(Z.y(), WithinAbs((X.cross(Y)).y(), 1e-9)); + CHECK_THAT(Z.z(), WithinAbs((X.cross(Y)).z(), 1e-9)); +} + +TEST_CASE("datum coordinate system: a face-only frame rotates with its body", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + // The bug this pins down: Z came from the face normal (body-following) but X came from + // coordsys_x_hint, a WORLD constant. Spinning the body about its own face normal left the + // frame identical, so a face-only connector could not encode that rotation at all — and a + // Fastened or Slider mate built on it claimed to fix an orientation it could not see. + // A rectangular top face is used deliberately: its edges give an unambiguous in-plane + // direction, so "did the frame follow the body" is answerable to the degree. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 40, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + Vec3d fn = GeometryEngine::face_normal_world(GeometryEngine::face_by_index(doc.bodies[0].shape, i)); + if (fn.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "CS"); + doc.features[cs].coordsys_type = CoordSysType::FaceAndDirection; + doc.features[cs].coordsys_body = 0; + doc.features[cs].coordsys_face = top_face; + doc.features[cs].coordsys_edge = -1; // face only: no explicit direction edge + REQUIRE(doc.recompute()); + + auto before = doc.resolve_datum_coordsys(); + REQUIRE(before.size() == 1); + REQUIRE(before[0].error.empty()); + const Vec3d X0 = before[0].x; + const Vec3d Z0 = before[0].x.cross(before[0].y); + + // Spin the body 90 degrees about its own face normal (world Z here). + doc.add_transform(0, Vec3d(0, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 90.0, false, "Spin"); + REQUIRE(doc.recompute()); + + auto after = doc.resolve_datum_coordsys(); + REQUIRE(after.size() == 1); + REQUIRE(after[0].error.empty()); + const Vec3d X1 = after[0].x; + + // The normal is unchanged by a spin about itself — that is exactly why the old code could + // not detect the rotation. + const Vec3d Z1 = after[0].x.cross(after[0].y); + CHECK_THAT(std::abs(Z0.dot(Z1)), WithinAbs(1.0, 1e-6)); + + // X must have turned with the body. Before the fix X0 == X1 and this failed. + const double cos_turn = std::clamp(X0.dot(X1), -1.0, 1.0); + CHECK_THAT(std::abs(cos_turn), WithinAbs(0.0, 1e-6)); // 90 degrees apart +} + +TEST_CASE("datum coordinate system: point_world gives world axes", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(10, 20, 30), "CS_World"); + REQUIRE(cs == 0); + + auto css = doc.resolve_datum_coordsys(); + REQUIRE(css.size() == 1); + REQUIRE(css[0].error.empty()); + CHECK_THAT(css[0].origin.x(), WithinAbs(10.0, 1e-9)); + CHECK_THAT(css[0].origin.y(), WithinAbs(20.0, 1e-9)); + CHECK_THAT(css[0].origin.z(), WithinAbs(30.0, 1e-9)); + CHECK_THAT(css[0].x.x(), WithinAbs(1.0, 1e-9)); + CHECK_THAT(css[0].x.y(), WithinAbs(0.0, 1e-9)); + CHECK_THAT(css[0].x.z(), WithinAbs(0.0, 1e-9)); + CHECK_THAT(css[0].y.x(), WithinAbs(0.0, 1e-9)); + CHECK_THAT(css[0].y.y(), WithinAbs(1.0, 1e-9)); + CHECK_THAT(css[0].y.z(), WithinAbs(0.0, 1e-9)); +} + + +TEST_CASE("helix curve: arc length, bounding box, left-handed, conical", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + // --- Cylindrical helix r=5, pitch=2, height=10 (5 turns) --- + // One turn arc length = sqrt((2*pi*r)^2 + pitch^2) = sqrt((10*pi)^2 + 4). + // Total = 5 * sqrt(986.96...) ≈ 5 * 31.4159 ≈ 157.08 mm. + SECTION("cylindrical helix arc length matches analytic") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 2.0, 10.0, false, 0.0, "H1"); + REQUIRE(doc.features.size() == 1); + std::string err; + TopoDS_Wire w = doc.build_helix_wire(doc.features[0], err); + REQUIRE_FALSE(w.IsNull()); + REQUIRE(err.empty()); + + GProp_GProps props; + BRepGProp::LinearProperties(w, props); + const double len = props.Mass(); + const double one_turn = std::sqrt(std::pow(2.0 * M_PI * 5.0, 2) + std::pow(2.0, 2)); + const double expected = 5.0 * one_turn; + REQUIRE_THAT(len, WithinRel(expected, 1e-3)); + } + + // --- Bounding box: X/Y extent = 2*radius, Z extent = height --- + SECTION("cylindrical helix bounding box") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 2.0, 10.0, false, 0.0, "H1"); + std::string err; + TopoDS_Wire w = doc.build_helix_wire(doc.features[0], err); + REQUIRE_FALSE(w.IsNull()); + + Bnd_Box bb; + BRepBndLib::Add(w, bb); + double xmin, ymin, zmin, xmax, ymax, zmax; + bb.Get(xmin, ymin, zmin, xmax, ymax, zmax); + REQUIRE_THAT(xmax - xmin, WithinRel(10.0, 0.1)); + REQUIRE_THAT(ymax - ymin, WithinRel(10.0, 0.1)); + REQUIRE_THAT(zmax - zmin, WithinRel(10.0, 0.1)); + } + + // --- Left-handed helix: sample a point at parameter ~0.25 and compare --- + SECTION("left_handed flips the winding direction") { + CadDocument doc_rh, doc_lh; + doc_rh.add_helix(SketchPlane::XY(), 5.0, 2.0, 10.0, false, 0.0, "RH"); + doc_lh.add_helix(SketchPlane::XY(), 5.0, 2.0, 10.0, true, 0.0, "LH"); + + std::string err; + TopoDS_Wire w_rh = doc_rh.build_helix_wire(doc_rh.features[0], err); + TopoDS_Wire w_lh = doc_lh.build_helix_wire(doc_lh.features[0], err); + REQUIRE_FALSE(w_rh.IsNull()); + REQUIRE_FALSE(w_lh.IsNull()); + + // Sample at height = height/4 along the helix: + // RH: angle = 2*pi*turns*0.25 = pi/2, direction is +2*pi*turns + // so at z = 2.5: u = pi/2 => x = r*cos(pi/2) = 0, y = r*sin(pi/2) = +5 + // LH: angle goes negative, at z = 2.5: u = -pi/2 => x = 0, y = -5 + double z_sample = 2.5; // height/4 + // Approximate by scanning edges and picking the vertex nearest to target z + auto point_at_z = [&](const TopoDS_Wire& w, double target_z) -> gp_Pnt { + double best_dz = 1e9; + gp_Pnt best(0,0,0); + for (TopExp_Explorer ex(w, TopAbs_EDGE); ex.More(); ex.Next()) { + TopoDS_Edge e = TopoDS::Edge(ex.Current()); + BRepAdaptor_Curve curve(e); + double u0 = curve.FirstParameter(); + double u1 = curve.LastParameter(); + for (int s = 0; s <= 100; ++s) { + double u = u0 + (u1 - u0) * s / 100.0; + gp_Pnt p = curve.Value(u); + if (std::abs(p.Z() - target_z) < best_dz) { + best_dz = std::abs(p.Z() - target_z); + best = p; + } + } + } + return best; + }; + + gp_Pnt prh = point_at_z(w_rh, z_sample); + gp_Pnt plh = point_at_z(w_lh, z_sample); + + // At z=2.5 for RH: angle ~ pi/2 -> y > 0 + REQUIRE(prh.Y() > 0.0); + // At z=2.5 for LH: angle ~ -pi/2 -> y < 0 + REQUIRE(plh.Y() < 0.0); + // They must differ in sign of y (mirror winding), not just "differ" + REQUIRE(prh.Y() * plh.Y() < 0.0); + } + + // --- Conical helix: top radius matches r + height*tan(taper) --- + SECTION("conical helix top radius") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 2.0, 10.0, false, 10.0, "Cone"); + std::string err; + TopoDS_Wire w = doc.build_helix_wire(doc.features[0], err); + REQUIRE_FALSE(w.IsNull()); + REQUIRE(err.empty()); + + // Top radius = 5 + 10*tan(10) ≈ 5 + 1.7633 = 6.7633 + const double expected_top = 5.0 + 10.0 * std::tan(10.0 * M_PI / 180.0); + + // Sample at z = height: use same sampling approach + double best_dz = 1e9; + gp_Pnt best(0,0,0); + for (TopExp_Explorer ex(w, TopAbs_EDGE); ex.More(); ex.Next()) { + TopoDS_Edge e = TopoDS::Edge(ex.Current()); + BRepAdaptor_Curve curve(e); + double u0 = curve.FirstParameter(); + double u1 = curve.LastParameter(); + for (int s = 0; s <= 200; ++s) { + double u = u0 + (u1 - u0) * s / 200.0; + gp_Pnt p = curve.Value(u); + if (std::abs(p.Z() - 10.0) < best_dz) { + best_dz = std::abs(p.Z() - 10.0); + best = p; + } + } + } + double top_r = std::sqrt(best.X() * best.X() + best.Y() * best.Y()); + REQUIRE_THAT(top_r, WithinRel(expected_top, 1e-2)); + } +} + +TEST_CASE("helix: invalid inputs fail cleanly", "[CadDocument]") +{ + SECTION("radius <= 0") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 0.0, 2.0, 10.0, false, 0.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + } + SECTION("pitch <= 0") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 0.0, 10.0, false, 0.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + } + SECTION("height < 0") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 2.0, -1.0, false, 0.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + } + SECTION("height == 0 (flat spiral) rejected") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 2.0, 0.0, false, 0.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + CHECK_CONTAINS(err, "flat spiral"); + } + SECTION("absurd turn count") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 5.0, 1e-4, 2.0, false, 0.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + } + SECTION("taper drives radius negative") { + CadDocument doc; + doc.add_helix(SketchPlane::XY(), 1.0, 2.0, 10.0, false, -10.0, "H"); + std::string err; + REQUIRE(doc.build_helix_wire(doc.features[0], err).IsNull()); + REQUIRE_FALSE(err.empty()); + CHECK_CONTAINS(err, "negative"); + } +} + +TEST_CASE("helix as sweep path: spring integration test", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + + // Build a plane at the helix start (5,0,0) whose normal IS the start tangent direction. + // The helix tangent at u=0 is (0, R, P/(2*pi)) = (0, 5, 3/(2*pi)). + const double R = 5.0, P = 3.0; + Vec3d tan_dir(0, R, P / (2.0 * M_PI)); + tan_dir.normalize(); + Vec3d ref = (std::abs(tan_dir.z()) < 0.9) ? Vec3d(0, 0, 1) : Vec3d(1, 0, 0); + Vec3d x_axis = ref.cross(tan_dir); + if (x_axis.squaredNorm() < 1e-12) x_axis = Vec3d(1, 0, 0); + x_axis.normalize(); + Vec3d y_axis = tan_dir.cross(x_axis).normalized(); + SketchPlane profile_plane; + profile_plane.origin = Vec3d(R, 0, 0); + profile_plane.normal = tan_dir; + profile_plane.x_axis = x_axis; + profile_plane.y_axis = y_axis; + + // Profile: small circle r=1.5 centered at 2D (0,0) = world (5,0,0) = helix start + SketchEntity prof; + prof.type = SketchEntity::Type::Circle; + prof.center = Vec2d(0, 0); + prof.radius = 1.5; + int prof_idx = doc.add_sketch_entities({prof}, profile_plane, "CircleProfile"); + + // Helix path: r=5, pitch=3, height=15 (5 turns) about Z axis from origin + int helix_idx = doc.add_helix(SketchPlane::XY(), R, P, 15.0, false, 0.0, "HelixPath"); + + int sweep_idx = doc.add_sweep(prof_idx, helix_idx, BooleanMode::New, "Spring"); + REQUIRE(sweep_idx >= 0); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + const double v = double(doc.display_mesh.volume()); + REQUIRE(v > 0.0); + + const double one_turn = std::sqrt(std::pow(2.0 * M_PI * R, 2) + std::pow(P, 2)); + const double total_len = 5.0 * one_turn; + const double prof_area = M_PI * 1.5 * 1.5; + const double expected_v = prof_area * total_len; + REQUIRE_THAT(v, WithinRel(expected_v, 0.1)); +} + +TEST_CASE("helix serialization round-trip with distinctive values", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + doc.add_helix(SketchPlane::XZ(), 7.5, 3.25, 22.0, true, 5.0, "Helix_RT"); + doc.features.back().helix_radius = 7.5; + doc.features.back().helix_pitch = 3.25; + doc.features.back().helix_height = 22.0; + doc.features.back().helix_left_handed = true; + doc.features.back().helix_taper_deg = 5.0; + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + // Deserialize through the real entry point — recompute fails because a lone + // helix doesn't produce a solid, but the serialized field values must survive. + CadDocument doc2; + doc2.deserialize_recipe(blob); + REQUIRE(doc2.features.size() == 1); + + const auto& f = doc2.features[0]; + REQUIRE(f.type == CadFeatureType::Helix); + REQUIRE(f.name == "Helix_RT"); + REQUIRE_THAT(f.helix_radius, WithinAbs(7.5, 1e-9)); + REQUIRE_THAT(f.helix_pitch, WithinAbs(3.25, 1e-9)); + REQUIRE_THAT(f.helix_height, WithinAbs(22.0, 1e-9)); + REQUIRE(f.helix_left_handed == true); + REQUIRE_THAT(f.helix_taper_deg, WithinAbs(5.0, 1e-9)); +} + +TEST_CASE("helix with sweep path from a non-sketch/non-helix feature errors", "[CadDocument]") +{ + // An Extrude feature used as sweep path must fail cleanly. + CadDocument doc; + + // Profile: circle + SketchEntity prof; + prof.type = SketchEntity::Type::Circle; + prof.center = Vec2d(0, 0); + prof.radius = 2.0; + int prof_idx = doc.add_sketch_entities({prof}, SketchPlane::XY(), "Profile"); + + // Path: an Extrude feature (not a Sketch or Helix) + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "NotAValidPath"; + ex.sketch_ref = -1; + doc.features.push_back(ex); + int path_idx = int(doc.features.size()) - 1; + + int sw = doc.add_sweep(prof_idx, path_idx, BooleanMode::New, "BadSweep"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_FALSE(doc.error.empty()); +} + +TEST_CASE("transform translate shifts body bbox by the given vector", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "S"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Box"); + REQUIRE(doc.recompute()); + + Bnd_Box bb0; + BRepBndLib::Add(doc.bodies[0].shape, bb0); + double xmin0, ymin0, zmin0, xmax0, ymax0, zmax0; + bb0.Get(xmin0, ymin0, zmin0, xmax0, ymax0, zmax0); + double vol0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + + doc.checkpoint(); + doc.add_transform(0, Vec3d(5, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0, false, "Move"); + REQUIRE(doc.recompute()); + + REQUIRE(doc.bodies.size() == 1); + double vol1 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE_THAT(vol1, WithinRel(vol0, 1e-6)); + + Bnd_Box bb1; + BRepBndLib::Add(doc.bodies[0].shape, bb1); + double xmin1, ymin1, zmin1, xmax1, ymax1, zmax1; + bb1.Get(xmin1, ymin1, zmin1, xmax1, ymax1, zmax1); + REQUIRE_THAT(xmin1, WithinAbs(xmin0 + 5, 1e-6)); + REQUIRE_THAT(xmax1, WithinAbs(xmax0 + 5, 1e-6)); +} + +TEST_CASE("transform rotate 90 about Z swaps XY bbox extents", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "S"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Box"); + REQUIRE(doc.recompute()); + + Bnd_Box bb0; + BRepBndLib::Add(doc.bodies[0].shape, bb0); + double xmin0, ymin0, zmin0, xmax0, ymax0, zmax0; + bb0.Get(xmin0, ymin0, zmin0, xmax0, ymax0, zmax0); + double vol0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double dx0 = xmax0 - xmin0; + double dy0 = ymax0 - ymin0; + + doc.checkpoint(); + doc.add_transform(0, Vec3d(0, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 90, false, "Rot90"); + REQUIRE(doc.recompute()); + + double vol1 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE_THAT(vol1, WithinRel(vol0, 1e-6)); + + Bnd_Box bb1; + BRepBndLib::Add(doc.bodies[0].shape, bb1); + double xmin1, ymin1, zmin1, xmax1, ymax1, zmax1; + bb1.Get(xmin1, ymin1, zmin1, xmax1, ymax1, zmax1); + double dx1 = xmax1 - xmin1; + double dy1 = ymax1 - ymin1; + REQUIRE_THAT(dx1, WithinAbs(dy0, 1e-6)); + REQUIRE_THAT(dy1, WithinAbs(dx0, 1e-6)); +} + +TEST_CASE("transform copy keeps original and appends transformed body", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "S"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Box"); + REQUIRE(doc.recompute()); + + Bnd_Box bb0; + BRepBndLib::Add(doc.bodies[0].shape, bb0); + double xmin0, ymin0, zmin0, xmax0, ymax0, zmax0; + bb0.Get(xmin0, ymin0, zmin0, xmax0, ymax0, zmax0); + + doc.checkpoint(); + doc.add_transform(0, Vec3d(5, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0, true, "Copy"); + REQUIRE(doc.recompute()); + + REQUIRE(doc.bodies.size() == 2); + + Bnd_Box bb_orig; + BRepBndLib::Add(doc.bodies[0].shape, bb_orig); + double xo_min, yo_min, zo_min, xo_max, yo_max, zo_max; + bb_orig.Get(xo_min, yo_min, zo_min, xo_max, yo_max, zo_max); + REQUIRE_THAT(xo_min, WithinAbs(xmin0, 1e-6)); + REQUIRE_THAT(xo_max, WithinAbs(xmax0, 1e-6)); + + Bnd_Box bb_copy; + BRepBndLib::Add(doc.bodies[1].shape, bb_copy); + double xc_min, yc_min, zc_min, xc_max, yc_max, zc_max; + bb_copy.Get(xc_min, yc_min, zc_min, xc_max, yc_max, zc_max); + REQUIRE_THAT(xc_min, WithinAbs(xmin0 + 5, 1e-6)); + REQUIRE_THAT(xc_max, WithinAbs(xmax0 + 5, 1e-6)); +} + +TEST_CASE("transform degenerate axis errors", "[CadDocument]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "S"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Box"); + REQUIRE(doc.recompute()); + + doc.checkpoint(); + doc.add_transform(0, Vec3d(0, 0, 0), Vec3d(0, 0, 0), Vec3d(0, 0, 0), 45, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE(doc.error.find("axis") != std::string::npos); +} + +TEST_CASE("transform moved body participates in later boolean at its new position", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Two boxes that do NOT overlap + int sk0 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 5, "S0"); + doc.add_extrude(sk0, 5.0, false, BooleanMode::New, "Box0"); + + int sk1 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 5, "S1"); + doc.add_extrude(sk1, 5.0, false, BooleanMode::New, "Box1"); + doc.features.back().target_body = 0; + REQUIRE(doc.recompute()); + + double v0 = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + double v1 = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + double sum = v0 + v1; + + // Move body 1 so it overlaps body 0 + doc.checkpoint(); + doc.add_transform(1, Vec3d(5, 5, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0, false, "Move1"); + REQUIRE(doc.recompute()); + + doc.add_boolean(BooleanMode::Add, 0, 1, false, 0.0, -1, -1, "Fuse"); + REQUIRE(doc.recompute()); + + REQUIRE(doc.bodies.size() == 1); + double vf = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + // Partial overlap: strictly more than one box (the move DID take effect) and strictly + // less than both (they still intersect). Without a real B-rep transform the two boxes + // stay coincident and vf would equal v0 -- that is what `vf > v0` catches. + REQUIRE(vf > v0 * 1.05); + REQUIRE(vf < sum); +} + +TEST_CASE("transform round-trip preserves all xf_* fields", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "S"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Box"); + doc.add_transform(0, Vec3d(3, 4, 5), Vec3d(0, 1, 0), Vec3d(1, 2, 3), 37, true, "RoundTrip"); + REQUIRE(doc.recompute()); + int nb = int(doc.bodies.size()); + REQUIRE(nb >= 1); + + // Capture bboxes before serialization + std::vector> bboxes_before; + for (int i = 0; i < nb; ++i) { + Bnd_Box bb; + BRepBndLib::Add(doc.bodies[i].shape, bb); + double x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes_before.push_back({Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}); + } + + auto blob = doc.serialize_recipe(); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.bodies.size() == size_t(nb)); + + // Check the Transform feature fields + bool found = false; + for (const auto& f : doc2.features) { + if (f.type != CadFeatureType::Transform) continue; + REQUIRE_THAT(f.xf_translate.x(), WithinAbs(3, 1e-9)); + REQUIRE_THAT(f.xf_translate.y(), WithinAbs(4, 1e-9)); + REQUIRE_THAT(f.xf_translate.z(), WithinAbs(5, 1e-9)); + REQUIRE_THAT(f.xf_axis.x(), WithinAbs(0, 1e-9)); + REQUIRE_THAT(f.xf_axis.y(), WithinAbs(1, 1e-9)); + REQUIRE_THAT(f.xf_axis.z(), WithinAbs(0, 1e-9)); + REQUIRE_THAT(f.xf_pivot.x(), WithinAbs(1, 1e-9)); + REQUIRE_THAT(f.xf_pivot.y(), WithinAbs(2, 1e-9)); + REQUIRE_THAT(f.xf_pivot.z(), WithinAbs(3, 1e-9)); + REQUIRE_THAT(f.xf_angle_deg, WithinAbs(37, 1e-9)); + REQUIRE(f.xf_copy == true); + found = true; + break; + } + REQUIRE(found); + + // Verify bboxes equal + for (int i = 0; i < nb; ++i) { + Bnd_Box bb; + BRepBndLib::Add(doc2.bodies[i].shape, bb); + double x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(x0, WithinAbs(bboxes_before[i].first.x(), 1e-6)); + REQUIRE_THAT(y0, WithinAbs(bboxes_before[i].first.y(), 1e-6)); + REQUIRE_THAT(z0, WithinAbs(bboxes_before[i].first.z(), 1e-6)); + REQUIRE_THAT(x1, WithinAbs(bboxes_before[i].second.x(), 1e-6)); + REQUIRE_THAT(y1, WithinAbs(bboxes_before[i].second.y(), 1e-6)); + REQUIRE_THAT(z1, WithinAbs(bboxes_before[i].second.z(), 1e-6)); + } +} + +// --- Thicken tests --- + +TEST_CASE("thicken a planar face to a plate", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxSketch"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_thicken(0, top_face, 3.0, false, "Plate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + double v = double(SketchEngine::tessellate(doc.bodies[1].shape).volume()); + REQUIRE_THAT(v, WithinRel(20.0 * 20.0 * 3.0, 0.01)); +} + +TEST_CASE("thicken flip offsets against face normal", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxSketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + // non-flipped: plate grows above the box (z > 10) + CadDocument doc2; + int sk2 = doc2.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxSketch2"); + doc2.add_extrude(sk2, 10.0, false, BooleanMode::New, "Extrude2"); + REQUIRE(doc2.recompute()); + int nf2 = GeometryEngine::face_count(doc2.bodies[0].shape); + int tf2 = -1; + for (int i = 0; i < nf2; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc2.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { tf2 = i; break; } + } + REQUIRE(tf2 >= 0); + doc2.add_thicken(0, tf2, 3.0, false, "PlateFwd"); + REQUIRE(doc2.recompute()); + Bnd_Box bb_fwd; BRepBndLib::Add(doc2.bodies[1].shape, bb_fwd); + Standard_Real x0, y0, z0, x1, y1, z1; + bb_fwd.Get(x0, y0, z0, x1, y1, z1); + + // flipped: plate grows below the face plane (z < 10) + CadDocument doc3; + int sk3 = doc3.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxSketch3"); + doc3.add_extrude(sk3, 10.0, false, BooleanMode::New, "Extrude3"); + REQUIRE(doc3.recompute()); + int nf3 = GeometryEngine::face_count(doc3.bodies[0].shape); + int tf3 = -1; + for (int i = 0; i < nf3; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc3.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { tf3 = i; break; } + } + REQUIRE(tf3 >= 0); + doc3.add_thicken(0, tf3, 3.0, true, "PlateRev"); + REQUIRE(doc3.recompute()); + Bnd_Box bb_rev; BRepBndLib::Add(doc3.bodies[1].shape, bb_rev); + Standard_Real rx0, ry0, rz0, rx1, ry1, rz1; + bb_rev.Get(rx0, ry0, rz0, rx1, ry1, rz1); + + // forward plate bbox z > 10 (source face at z=10, +3 offset = z in (10,13)) + REQUIRE(z0 >= 9.9); + // reverse plate bbox z < 10 (source face at z=10, -3 offset = z in (7,10)) + REQUIRE(rz1 <= 10.1); +} + +TEST_CASE("thicken bad face index returns error", "[CadDocument]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + + doc.add_thicken(0, 9999, 3.0, false, "Bad"); + bool ok = doc.recompute(); + REQUIRE_FALSE(ok); + REQUIRE(doc.error.find("face") != std::string::npos); +} + +TEST_CASE("thicken zero thickness returns error", "[CadDocument]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_thicken(0, top_face, 0.0, false, "Zero"); + bool ok = doc.recompute(); + REQUIRE_FALSE(ok); + REQUIRE(doc.error.find("thickness") != std::string::npos); +} + +TEST_CASE("thickened plate fuses with source", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + double v_box = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_thicken(0, top_face, 3.0, false, "Plate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + doc.add_boolean(BooleanMode::Add, 0, 1, false, 0.0, -1, -1, "Fuse"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + double v_fused = double(SketchEngine::tessellate(doc.bodies[0].shape).volume()); + REQUIRE(v_fused > v_box); +} + +TEST_CASE("thicken round-trip serialization", "[CadDocument]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + doc.add_thicken(0, top_face, 3.0, false, "Plate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + // Remember field values + int tf = doc.features.back().thicken_face; + double tt = doc.features.back().thicken_thickness; + bool tb = doc.features.back().thicken_flip; + size_t nb = doc.bodies.size(); + + std::vector> bboxes; + for (const auto& b : doc.bodies) { + Bnd_Box bb; BRepBndLib::Add(b.shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes.push_back({Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}); + } + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.features.size() == doc.features.size()); + REQUIRE(doc2.bodies.size() == nb); + + const CadFeature& f2 = doc2.features.back(); + REQUIRE(f2.thicken_face == tf); + REQUIRE_THAT(f2.thicken_thickness, WithinAbs(tt, 1e-9)); + REQUIRE(f2.thicken_flip == tb); + + for (size_t i = 0; i < nb; ++i) { + Bnd_Box bb; BRepBndLib::Add(doc2.bodies[i].shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(double(x0), WithinAbs(bboxes[i].first.x(), 1e-6)); + REQUIRE_THAT(double(y0), WithinAbs(bboxes[i].first.y(), 1e-6)); + REQUIRE_THAT(double(z0), WithinAbs(bboxes[i].first.z(), 1e-6)); + REQUIRE_THAT(double(x1), WithinAbs(bboxes[i].second.x(), 1e-6)); + REQUIRE_THAT(double(y1), WithinAbs(bboxes[i].second.y(), 1e-6)); + REQUIRE_THAT(double(z1), WithinAbs(bboxes[i].second.z(), 1e-6)); + } +} + +// --- Project feature tests --- + +TEST_CASE("project a box top face to 4 lines, extrudable", "[CadDocument][project]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + int proj = doc.add_project_edges(0, {}, top_face, SketchPlane::XY(), "ProjTop"); + REQUIRE(proj >= 0); + doc.add_extrude(proj, 5.0, false, BooleanMode::New, "FromProj"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + const auto& pf = doc.features[proj]; + REQUIRE(pf.entities.size() == 4); + for (const auto& e : pf.entities) + REQUIRE(e.type == SketchEntity::Type::Line); + + REQUIRE(doc.bodies.size() >= 2); + double v = double(SketchEngine::tessellate(doc.bodies.back().shape).volume()); + REQUIRE_THAT(v, WithinRel(20.0 * 20.0 * 5.0, 1e-3)); +} + +TEST_CASE("project a cylinder top edge to 1 circle, extrudable", "[CadDocument][project]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + SketchEntity c; + c.type = SketchEntity::Type::Circle; + c.center = Vec2d(0, 0); + c.radius = 6.0; + int sk = doc.add_sketch_entities({c}, SketchPlane::XY(), "Circ"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Cyl"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_edges = GeometryEngine::edge_count(doc.bodies[0].shape); + int top_edge = -1; + for (int i = 0; i < n_edges; ++i) { + TopoDS_Edge e = GeometryEngine::edge_by_index(doc.bodies[0].shape, i); + auto pts = GeometryEngine::sample_edge_world(e); + if (pts.empty()) continue; + Vec3d mid = Vec3d::Zero(); + for (const auto& p : pts) mid += p; + mid /= double(pts.size()); + if (mid.z() > 9.0) { + BRepAdaptor_Curve ac(e); + if (ac.GetType() == GeomAbs_Circle) { top_edge = i; break; } + } + } + REQUIRE(top_edge >= 0); + + int proj = doc.add_project_edges(0, {top_edge}, -1, SketchPlane::XY(), "ProjCirc"); + REQUIRE(proj >= 0); + doc.add_extrude(proj, 4.0, false, BooleanMode::New, "FromCirc"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + const auto& pf = doc.features[proj]; + REQUIRE(pf.entities.size() == 1); + REQUIRE(pf.entities[0].type == SketchEntity::Type::Circle); + REQUIRE_THAT(pf.entities[0].radius, WithinRel(6.0, 1e-3)); + + REQUIRE(doc.bodies.size() >= 2); + double v = double(SketchEngine::tessellate(doc.bodies.back().shape).volume()); + REQUIRE_THAT(v, WithinRel(M_PI * 36.0 * 4.0, 1e-2)); +} + +TEST_CASE("project with no face and no edge selection projects every edge", "[CadDocument][project]") +{ + // This is the state the Project card opens in — its label reads "(all edges)". Before the + // all-edges branch existed it threw "no edges or face selected", so the card's default + // could never be confirmed. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + + int proj = doc.add_project_edges(0, {}, -1, SketchPlane::XY(), "ProjAll"); + REQUIRE(proj >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // A box has 12 edges; the 4 running along Z collapse to points on XY and are dropped, + // leaving the 4 bottom and 4 top edges. + const auto& pf = doc.features[proj]; + REQUIRE(pf.entities.size() == 8); + for (const auto& e : pf.entities) { + REQUIRE(e.type == SketchEntity::Type::Line); + REQUIRE((e.p1 - e.p0).norm() > 1e-6); + } +} + +TEST_CASE("project bad face id returns error", "[CadDocument][project]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + + doc.add_project_edges(0, {}, 9999, SketchPlane::XY(), "Bad"); + bool ok = doc.recompute(); + REQUIRE_FALSE(ok); + bool has_project = doc.error.find("project") != std::string::npos + || doc.error.find("face") != std::string::npos; + REQUIRE(has_project); +} + +TEST_CASE("project round-trip serialization", "[CadDocument][project]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + Vec3d n = GeometryEngine::face_normal_world(fc); + if (n.z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + doc.add_project_edges(0, {}, top_face, SketchPlane::XY(), "ProjTop"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int saved_src = doc.features.back().project_source_body; + int saved_face = doc.features.back().project_face; + auto saved_edges = doc.features.back().project_edges; + size_t saved_nb = doc.bodies.size(); + + std::vector> bboxes; + for (const auto& b : doc.bodies) { + Bnd_Box bb; BRepBndLib::Add(b.shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes.push_back({Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}); + } + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.bodies.size() == saved_nb); + REQUIRE(doc2.features.size() == doc.features.size()); + + const auto& f2 = doc2.features.back(); + REQUIRE(f2.project_source_body == saved_src); + REQUIRE(f2.project_face == saved_face); + REQUIRE(f2.project_edges == saved_edges); + + for (size_t i = 0; i < saved_nb; ++i) { + Bnd_Box bb; BRepBndLib::Add(doc2.bodies[i].shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(double(x0), WithinAbs(bboxes[i].first.x(), 1e-6)); + REQUIRE_THAT(double(y0), WithinAbs(bboxes[i].first.y(), 1e-6)); + REQUIRE_THAT(double(z0), WithinAbs(bboxes[i].first.z(), 1e-6)); + REQUIRE_THAT(double(x1), WithinAbs(bboxes[i].second.x(), 1e-6)); + REQUIRE_THAT(double(y1), WithinAbs(bboxes[i].second.y(), 1e-6)); + REQUIRE_THAT(double(z1), WithinAbs(bboxes[i].second.z(), 1e-6)); + } +} + +TEST_CASE("Use/Convert Entities: box top-face edges land as construction geometry", "[CadDocument][project]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + if (GeometryEngine::face_normal_world(fc).z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + int target = doc.add_sketch_entities({}, SketchPlane::XY(), "Use"); + REQUIRE(target >= 0); + + int appended = doc.project_edges_into_sketch(target, 0, {}, top_face); + REQUIRE(appended == 4); + + const auto& ents = doc.features[target].entities; + REQUIRE(ents.size() == 4); + for (const auto& e : ents) { + REQUIRE(e.type == SketchEntity::Type::Line); + REQUIRE(e.construction == true); + } +} + +TEST_CASE("Use/Convert Entities: construction references never become solid", "[CadDocument][project]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + if (GeometryEngine::face_normal_world(fc).z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + const size_t body_count_before = doc.bodies.size(); + const double volume_before = doc.body_mass_properties(0).volume; + + int target = doc.add_sketch_entities({}, SketchPlane::XY(), "Use"); + int appended = doc.project_edges_into_sketch(target, 0, {}, top_face); + REQUIRE(appended == 4); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == body_count_before); + REQUIRE_THAT(doc.body_mass_properties(0).volume, WithinRel(volume_before, 1e-9)); +} + +TEST_CASE("Use/Convert Entities: bad references return -1 and change nothing", "[CadDocument][project]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int target = doc.add_sketch_entities({}, SketchPlane::XY(), "Use"); + REQUIRE(target >= 0); + + REQUIRE(doc.project_edges_into_sketch(-1, 0, {}, -1) == -1); + REQUIRE(doc.project_edges_into_sketch(999, 0, {}, -1) == -1); + REQUIRE(doc.project_edges_into_sketch(target, -1, {}, -1) == -1); + REQUIRE(doc.project_edges_into_sketch(target, 999, {}, -1) == -1); + REQUIRE(doc.features[target].entities.empty()); +} + +TEST_CASE("Use/Convert Entities: cylinder edge arrives as a Circle, not a polyline", "[CadDocument][project]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + SketchEntity c; + c.type = SketchEntity::Type::Circle; + c.center = Vec2d(0, 0); + c.radius = 6.0; + int sk = doc.add_sketch_entities({c}, SketchPlane::XY(), "Circ"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Cyl"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_edges = GeometryEngine::edge_count(doc.bodies[0].shape); + int top_edge = -1; + for (int i = 0; i < n_edges; ++i) { + TopoDS_Edge e = GeometryEngine::edge_by_index(doc.bodies[0].shape, i); + auto pts = GeometryEngine::sample_edge_world(e); + if (pts.empty()) continue; + Vec3d mid = Vec3d::Zero(); + for (const auto& p : pts) mid += p; + mid /= double(pts.size()); + if (mid.z() > 9.0) { + BRepAdaptor_Curve ac(e); + if (ac.GetType() == GeomAbs_Circle) { top_edge = i; break; } + } + } + REQUIRE(top_edge >= 0); + + int target = doc.add_sketch_entities({}, SketchPlane::XY(), "Use"); + int appended = doc.project_edges_into_sketch(target, 0, {top_edge}, -1); + REQUIRE(appended == 1); + + const auto& ents = doc.features[target].entities; + REQUIRE(ents.size() == 1); + REQUIRE(ents[0].type == SketchEntity::Type::Circle); + REQUIRE(ents[0].construction == true); + REQUIRE_THAT(ents[0].radius, WithinRel(6.0, 1e-6)); +} + +TEST_CASE("Project feature still emits non-construction entities (regression guard)", "[CadDocument][project]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Ext"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int n_faces = GeometryEngine::face_count(doc.bodies[0].shape); + int top_face = -1; + for (int i = 0; i < n_faces; ++i) { + TopoDS_Face fc = GeometryEngine::face_by_index(doc.bodies[0].shape, i); + if (GeometryEngine::face_normal_world(fc).z() > 0.9) { top_face = i; break; } + } + REQUIRE(top_face >= 0); + + int proj = doc.add_project_edges(0, {}, top_face, SketchPlane::XY(), "ProjTop"); + REQUIRE(proj >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + const auto& pf = doc.features[proj]; + REQUIRE(pf.entities.size() == 4); + for (const auto& e : pf.entities) + REQUIRE(e.construction == false); +} + +// --- Golden recipe fixture (v1 format tripwire) --- + +static CadDocument make_golden_doc_v1() +{ + CadDocument doc; + + // ---- Body 0: base box with distinctive taper ---- + int sk0 = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 30, 20, 15, "Sketch_Base"); + doc.add_extrude(sk0, 15.0, false, BooleanMode::New, "Extrude_Base"); + int ex0 = int(doc.features.size()) - 1; + doc.features[ex0].taper_deg = 8.5; + doc.features[ex0].extrude_end = ExtrudeEnd::Blind; + + // Dress-up: fillet lateral faces, chamfer top face — distinct non-default sizes + doc.add_fillet(3.5, FaceGroup::Lateral, "Fillet_Lat35"); + doc.add_chamfer(2.0, FaceGroup::Top, "Chamfer_Top2"); + + // Hole: offset position, non-through + doc.add_hole(7.5, 11.0, false, 4.0, 3.0, SketchPlane::XY(), "Hole_Off75"); + + // Draft: angle 7.25 deg on face 3 + doc.add_draft(7.25, 3, 0, "Draft_F3"); + + // Shell: thickness 1.375 mm, open face 1 + doc.add_shell(1.375, 1, 0, "Shell_T1375"); + + // Thread: internal, radius 4, pitch 2.5, height 15, depth 1.25 + doc.add_thread(4.0, 2.5, 15.0, 1.25, true, 0.0, 0.0, SketchPlane::XY(), "Thread_Int"); + + // Cut: plane XY, offset 10, flip, keep upper only + doc.add_cut(SketchPlane::XY(), 10.0, true, true, false, 0, "Cut_Flip"); + + // Pattern: linear 5 copies, spacing 13.5 mm along plane X + doc.add_pattern(false, 5, 13.5, 0, 360.0, 0, "Pattern_Lin5"); + + // ---- Datum plane ---- + doc.add_plane(0, 25.0, 0.0, 0, "Plane_Datum25"); + + // ---- Revolve: self-contained body (sketch + revolve) ---- + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_Rev"; + sk.plane = SketchPlane::XY(); + sk.entities = {{SketchEntity::Type::Circle, Vec2d(12,0), Vec2d(12,0), Vec2d(12,0), 4.0}}; + doc.features.push_back(sk); + } + int rev_sk = int(doc.features.size()) - 1; + doc.add_revolve(rev_sk, 217.0, 1, false, BooleanMode::New, "Revolve_Y217"); + + // ---- Sweep: self-contained body (profile + path sketches + sweep) ---- + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_SwProf"; + sk.plane = SketchPlane::XY(); + sk.entities = {{SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 3.0}}; + doc.features.push_back(sk); + } + int sw_prof = int(doc.features.size()) - 1; + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_SwPath"; + sk.plane = SketchPlane::XZ(); + sk.entities = {{SketchEntity::Type::Line, Vec2d(0,0), Vec2d(0,35)}}; + doc.features.push_back(sk); + } + int sw_path = int(doc.features.size()) - 1; + doc.add_sweep(sw_prof, sw_path, BooleanMode::New, "Sweep_Z35"); + + // ---- Loft: self-contained body (two profiles + loft) ---- + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_LoftBot"; + sk.plane = SketchPlane::XY(); + sk.profile.points = {{-7,-7},{7,-7},{7,7},{-7,7}}; + sk.profile.closed = true; + doc.features.push_back(sk); + } + int loft_bot = int(doc.features.size()) - 1; + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_LoftTop"; + sk.plane.origin = Vec3d(0, 0, 25); + sk.plane.normal = Vec3d(0, 0, 1); + sk.plane.x_axis = Vec3d(1, 0, 0); + sk.plane.y_axis = Vec3d(0, 1, 0); + sk.profile.points = {{-9,-9},{9,-9},{9,9},{-9,9}}; + sk.profile.closed = true; + doc.features.push_back(sk); + } + int loft_top = int(doc.features.size()) - 1; + doc.add_loft({loft_bot, loft_top}, true, BooleanMode::New, "Loft_Ruled"); + + // ---- Boolean: distinctive tolerance and face-mate params ---- + doc.add_boolean(BooleanMode::Cut, 0, 1, false, 0.01, 2, 3, "Boolean_Cut"); + + // ---- Extrude variant: symmetric + two-sided end ---- + { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "Sketch_Ex2"; + sk.plane = SketchPlane::XZ(); + sk.entities = {{SketchEntity::Type::Circle, Vec2d(0,0), Vec2d(0,0), Vec2d(0,0), 6.0}}; + doc.features.push_back(sk); + } + int sk_ex2 = int(doc.features.size()) - 1; + { + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "Extrude_Sym"; + ex.sketch_ref = sk_ex2; + ex.distance = 25.0; + ex.symmetric = true; + ex.mode = BooleanMode::New; + ex.extrude_end = ExtrudeEnd::Symmetric; + ex.distance2 = 12.5; + doc.features.push_back(ex); + } + + // ---- Mirror: XZ plane, New mode, keep_original=false (distinctive non-defaults) ---- + doc.add_mirror(SketchPlane::XZ(), 0, BooleanMode::New, "Mirror_XZ"); + doc.features.back().mirror_keep_original = false; + + // ---- Datum Axis: two-points with distinctive non-default coordinates ---- + { + int ax = doc.add_axis(AxisType::TwoPoints, "Axis_TP"); + doc.features[ax].axis_p1 = Vec3d(10, 20, 30); + doc.features[ax].axis_p2 = Vec3d(13, 24, 34); + doc.features[ax].axis_body = 1; + doc.features[ax].axis_face = 3; + doc.features[ax].axis_edge = 2; + doc.features[ax].axis_plane_a = 4; + doc.features[ax].axis_plane_b = 5; + } + + // ---- Datum CoordSys: PointWorld with distinctive origin ---- + { + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(7, 8, 9), "CS_PtWorld"); + doc.features[cs].coordsys_body = 2; + doc.features[cs].coordsys_face = 1; + doc.features[cs].coordsys_edge = 0; + doc.features[cs].coordsys_x_hint = Vec3d(0.5, 0.8, 0.3); + } + + // ---- Helix: conical left-handed with distinctive non-default values ---- + { + int hx = doc.add_helix(SketchPlane::XZ(), 11.5, 4.25, 18.0, true, 3.0, "Helix_CLH"); + (void)hx; + } + + // ---- Transform: rigid move/rotate with distinctive non-default values ---- + doc.add_transform(0, Vec3d(3.5, 4.5, 5.5), Vec3d(0.0, 1.0, 0.0), Vec3d(1.5, 2.5, 3.5), + 37.0, true, "GoldenTransform"); + + doc.add_thicken(0, 0, 1.75, true, "GoldenThicken"); + + doc.add_split_by_face(0, 0, 2, true, false, "GoldenSplit"); + + doc.add_project_edges(0, {}, 0, SketchPlane::XY(), "GoldenProject"); + + // Construction-flag on-disk lock: a real edge + a construction edge with distinctive + // literals. Regen-golden does not recompute, so this only exercises serialization. + { + std::vector ge; + SketchEntity real0; real0.type = SketchEntity::Type::Line; + real0.p0 = Vec2d(-12.0, -12.0); real0.p1 = Vec2d(12.0, -12.0); + SketchEntity ctor; ctor.type = SketchEntity::Type::Line; + ctor.p0 = Vec2d(-40.0, 9.0); ctor.p1 = Vec2d(40.0, 9.0); + ctor.construction = true; + ge.push_back(real0); + ge.push_back(ctor); + doc.add_sketch_entities(ge, SketchPlane::XY(), "Sketch_Ctor"); + } + + // ---- Mate connectors: two CoordSys features with distinctive non-default values ---- + int cs_idx_a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(11, 12, 13), "CS_MateA"); + doc.features[cs_idx_a].coordsys_body = 0; + doc.features[cs_idx_a].coordsys_x_hint = Vec3d(0.1, 0.2, 0.9); + int cs_idx_b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(14, 15, 16), "CS_MateB"); + doc.features[cs_idx_b].coordsys_body = 1; + doc.features[cs_idx_b].coordsys_x_hint = Vec3d(0.6, 0.7, 0.3); + + // ---- Mate: Fastened with all six fields carrying distinctive non-defaults ---- + doc.add_mate(1, cs_idx_a, cs_idx_b, 7.25, 33.0, true, "GoldenMate"); + + return doc; +} + +TEST_CASE("regenerate golden recipe fixture", "[.regen]") +{ + CadDocument doc = make_golden_doc_v1(); + // ponytail: serialize_recipe() only needs features, recompute is unnecessary + // for a fixture that exercises the serialization format. + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + // Version-free on purpose: this writes whatever today's format is, so a version bump does + // not have to remember to edit it. The version-stamped fixtures beside it are frozen + // evidence from older builds and are never regenerated. + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_current.bin"; + std::ofstream ofs(path, std::ios::binary); + REQUIRE(ofs.is_open()); + ofs.write(blob.data(), static_cast(blob.size())); + ofs.close(); + SUCCEED("Fixture written to " << path); +} + +// The previous format's real blob, kept on disk deliberately. It is the only thing that can +// prove the version gate does its job: a v3 recipe carries FEWER fields per feature than this +// build reads, so without the bump to v4 it would have passed the gate and had two ints read +// past the end of every connector — into the next feature's bytes. Silent corruption of a saved +// project, which is far worse than a refusal. This asserts the refusal is clean and says why. +// +// Do NOT regenerate cad_recipe_v3.bin. Its value is entirely that it was written by an older +// build; rewriting it with today's code destroys the only evidence this test rests on. +TEST_CASE("a previous-format recipe is refused, not silently misread", "[CadDocument]") +{ + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_v3.bin"; + std::ifstream ifs(path, std::ios::binary); + REQUIRE(ifs.is_open()); + std::string blob((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + ifs.close(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc; + REQUIRE_FALSE(doc.deserialize_recipe(blob)); + REQUIRE_FALSE(doc.error.empty()); + REQUIRE(doc.error.find("older version") != std::string::npos); + REQUIRE(doc.features.empty()); // nothing half-read was left behind +} + +TEST_CASE("golden recipe v1 still deserialises", "[CadDocument]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + // Read the golden blob from disk + std::string path = std::string(TEST_DATA_DIR) + "/cad_recipe_v4.bin"; + std::ifstream ifs(path, std::ios::binary); + REQUIRE(ifs.is_open()); + std::string blob((std::istreambuf_iterator(ifs)), + std::istreambuf_iterator()); + ifs.close(); + REQUIRE_FALSE(blob.empty()); + + // --- Layer 1: deserialize features WITHOUT recomputing, assert field values --- + std::vector features; + { + std::istringstream iss(blob); + cereal::BinaryInputArchive ar(iss); + uint32_t v; + ar(v); + REQUIRE(v <= CadDocument::ORCA_CAD_RECIPE_VERSION); + ar(features); + } + + CadDocument expected = make_golden_doc_v1(); + // Scoped tightly: this advice is ONLY valid for a count mismatch. It must not be in + // scope for the field-value assertions below, where "regenerate the fixture" is the + // one thing you must never do -- regenerating after a reorder bakes the corrupted + // layout in as the new golden and permanently disarms this test. + { + INFO("Feature count changed - did you add/remove features in make_golden_doc_v1()?"); + INFO("If so: run libslic3r_tests \"[.regen]\" and re-run this test."); + REQUIRE(features.size() == expected.features.size()); + } + + // A failure BELOW this point means the on-disk serialization format changed: some field + // in CadFeature::save/load was reordered, retyped, or removed. Fields may only ever be + // APPENDED at the end of both lists. Do NOT regenerate the fixture to make this pass -- + // fix the field order instead. See scripts/CAD/run-kernel-tests.sh and the [.regen] case. + + // Field-by-field assertions against expected values. + // Every field set to a distinctive non-default literal must be checked here. + // A field reorder in save()/load() that swaps fields of differing types + // will produce a wrong value at this position and FAIL the test. + + for (size_t i = 0; i < features.size(); ++i) { + const auto& f = features[i]; + const auto& e = expected.features[i]; + + INFO("Feature index " << i << " type " << int(f.type)); + + REQUIRE(f.type == e.type); + REQUIRE(f.name == e.name); + REQUIRE(f.enabled == e.enabled); + + // Sketch params (all Sketch types) + if (f.type == CadFeatureType::Sketch) { + REQUIRE(f.shape == e.shape); + if (e.name == "Sketch_Base") { + REQUIRE(f.width == 30); + REQUIRE(f.height == 20); + REQUIRE(f.radius == 15); + } + if (e.name == "Sketch_Rev" || e.name == "Sketch_SwProf" || e.name == "Sketch_Ex2" || e.name == "Sketch_SwPath") { + REQUIRE(f.entities.size() == e.entities.size()); + if (!f.entities.empty()) { + REQUIRE(f.entities[0].type == e.entities[0].type); + REQUIRE_THAT(f.entities[0].p0.x(), WithinAbs(e.entities[0].p0.x(), 1e-9)); + REQUIRE_THAT(f.entities[0].p0.y(), WithinAbs(e.entities[0].p0.y(), 1e-9)); + } + } + if (e.name == "Sketch_LoftBot" || e.name == "Sketch_LoftTop") { + REQUIRE(f.profile.points.size() == e.profile.points.size()); + REQUIRE(f.profile.closed == e.profile.closed); + } + if (e.name == "Sketch_LoftTop") { + REQUIRE_THAT(f.plane.origin.z(), WithinAbs(25.0, 1e-9)); + } + if (e.name == "Sketch_Ctor") { + REQUIRE(f.entities.size() == 2); + REQUIRE(f.entities[0].construction == false); + REQUIRE(f.entities[1].construction == true); + REQUIRE_THAT(f.entities[1].p0.x(), WithinAbs(-40.0, 1e-9)); + } + } + + // Extrude params + if (f.type == CadFeatureType::Extrude) { + REQUIRE(f.mode == e.mode); + if (e.name == "Extrude_Base") { + REQUIRE(f.distance == 15.0); + REQUIRE(f.symmetric == false); + REQUIRE(f.extrude_end == ExtrudeEnd::Blind); + REQUIRE_THAT(f.taper_deg, WithinAbs(8.5, 1e-9)); + } + if (e.name == "Extrude_Sym") { + REQUIRE(f.distance == 25.0); + REQUIRE(f.symmetric == true); + REQUIRE(f.extrude_end == ExtrudeEnd::Symmetric); + REQUIRE_THAT(f.distance2, WithinAbs(12.5, 1e-9)); + } + } + + // Fillet + if (f.type == CadFeatureType::Fillet && e.name == "Fillet_Lat35") { + REQUIRE_THAT(f.dressup_size, WithinAbs(3.5, 1e-9)); + REQUIRE(f.face_group == FaceGroup::Lateral); + } + + // Chamfer + if (f.type == CadFeatureType::Chamfer && e.name == "Chamfer_Top2") { + REQUIRE_THAT(f.dressup_size, WithinAbs(2.0, 1e-9)); + REQUIRE(f.face_group == FaceGroup::Top); + } + + // Hole + if (f.type == CadFeatureType::Hole && e.name == "Hole_Off75") { + REQUIRE_THAT(f.hole_diameter, WithinAbs(7.5, 1e-9)); + REQUIRE_THAT(f.hole_depth, WithinAbs(11.0, 1e-9)); + REQUIRE(f.hole_through == false); + REQUIRE_THAT(f.hole_x, WithinAbs(4.0, 1e-9)); + REQUIRE_THAT(f.hole_y, WithinAbs(3.0, 1e-9)); + } + + // Draft + if (f.type == CadFeatureType::Draft && e.name == "Draft_F3") { + REQUIRE(f.draft_face == 3); + REQUIRE_THAT(f.draft_angle, WithinAbs(7.25, 1e-9)); + } + + // Shell + if (f.type == CadFeatureType::Shell && e.name == "Shell_T1375") { + REQUIRE_THAT(f.shell_thickness, WithinAbs(1.375, 1e-9)); + REQUIRE(f.shell_face == 1); + } + + // Thread + if (f.type == CadFeatureType::Thread && e.name == "Thread_Int") { + REQUIRE_THAT(f.thread_radius, WithinAbs(4.0, 1e-9)); + REQUIRE_THAT(f.thread_pitch, WithinAbs(2.5, 1e-9)); + REQUIRE_THAT(f.thread_height, WithinAbs(15.0, 1e-9)); + REQUIRE_THAT(f.thread_depth, WithinAbs(1.25, 1e-9)); + REQUIRE(f.thread_internal == true); + REQUIRE_THAT(f.thread_x, WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(f.thread_y, WithinAbs(0.0, 1e-9)); + } + + // Cut + if (f.type == CadFeatureType::Cut && e.name == "Cut_Flip") { + REQUIRE_THAT(f.cut_offset, WithinAbs(10.0, 1e-9)); + REQUIRE(f.cut_flip == true); + REQUIRE(f.cut_keep_upper == true); + REQUIRE(f.cut_keep_lower == false); + } + + // Pattern + if (f.type == CadFeatureType::Pattern && e.name == "Pattern_Lin5") { + REQUIRE(f.pattern_circular == false); + REQUIRE(f.pattern_count == 5); + REQUIRE_THAT(f.pattern_spacing, WithinAbs(13.5, 1e-9)); + REQUIRE(f.pattern_dir == 0); + } + + // Datum Plane + if (f.type == CadFeatureType::Plane && e.name == "Plane_Datum25") { + REQUIRE(f.plane_base == 0); + REQUIRE_THAT(f.plane_offset, WithinAbs(25.0, 1e-9)); + REQUIRE_THAT(f.plane_angle_tilt, WithinAbs(0.0, 1e-9)); + REQUIRE(f.plane_axis == 0); + } + + // Revolve + if (f.type == CadFeatureType::Revolve && e.name == "Revolve_Y217") { + REQUIRE_THAT(f.revolve_angle, WithinAbs(217.0, 1e-9)); + REQUIRE(f.revolve_axis == 1); + } + + // Sweep + if (f.type == CadFeatureType::Sweep && e.name == "Sweep_Z35") { + REQUIRE(f.sweep_path_ref == e.sweep_path_ref); + REQUIRE(f.sweep_path_ref >= 0); + } + + // Loft + if (f.type == CadFeatureType::Loft && e.name == "Loft_Ruled") { + REQUIRE(f.loft_ruled == true); + REQUIRE(f.loft_profile_refs.size() == 2); + } + + // Boolean + if (f.type == CadFeatureType::Boolean && e.name == "Boolean_Cut") { + REQUIRE(f.mode == BooleanMode::Cut); + REQUIRE(f.bool_tool_body == 1); + REQUIRE(f.bool_keep_tool == false); + REQUIRE_THAT(f.bool_tolerance, WithinAbs(0.01, 1e-9)); + REQUIRE(f.bool_target_face == 2); + REQUIRE(f.bool_tool_face == 3); + } + + // Mirror + if (f.type == CadFeatureType::Mirror && e.name == "Mirror_XZ") { + REQUIRE(f.mode == BooleanMode::New); + REQUIRE(f.mirror_keep_original == false); + REQUIRE(f.target_body == 0); + } + + // Datum Axis + if (f.type == CadFeatureType::Axis && e.name == "Axis_TP") { + REQUIRE(f.axis_type == AxisType::TwoPoints); + REQUIRE_THAT(f.axis_p1.x(), WithinAbs(10.0, 1e-9)); + REQUIRE_THAT(f.axis_p1.y(), WithinAbs(20.0, 1e-9)); + REQUIRE_THAT(f.axis_p1.z(), WithinAbs(30.0, 1e-9)); + REQUIRE_THAT(f.axis_p2.x(), WithinAbs(13.0, 1e-9)); + REQUIRE_THAT(f.axis_p2.y(), WithinAbs(24.0, 1e-9)); + REQUIRE_THAT(f.axis_p2.z(), WithinAbs(34.0, 1e-9)); + REQUIRE(f.axis_body == 1); + REQUIRE(f.axis_face == 3); + REQUIRE(f.axis_edge == 2); + REQUIRE(f.axis_plane_a == 4); + REQUIRE(f.axis_plane_b == 5); + } + + // Datum CoordSys + if (f.type == CadFeatureType::CoordSys && e.name == "CS_PtWorld") { + REQUIRE(f.coordsys_type == CoordSysType::PointWorld); + REQUIRE_THAT(f.coordsys_point.x(), WithinAbs(7.0, 1e-9)); + REQUIRE_THAT(f.coordsys_point.y(), WithinAbs(8.0, 1e-9)); + REQUIRE_THAT(f.coordsys_point.z(), WithinAbs(9.0, 1e-9)); + REQUIRE(f.coordsys_body == 2); + REQUIRE(f.coordsys_face == 1); + REQUIRE(f.coordsys_edge == 0); + REQUIRE_THAT(f.coordsys_x_hint.x(), WithinAbs(0.5, 1e-9)); + REQUIRE_THAT(f.coordsys_x_hint.y(), WithinAbs(0.8, 1e-9)); + REQUIRE_THAT(f.coordsys_x_hint.z(), WithinAbs(0.3, 1e-9)); + } + + // Helix + if (f.type == CadFeatureType::Helix && e.name == "Helix_CLH") { + REQUIRE_THAT(f.helix_radius, WithinAbs(11.5, 1e-9)); + REQUIRE_THAT(f.helix_pitch, WithinAbs(4.25, 1e-9)); + REQUIRE_THAT(f.helix_height, WithinAbs(18.0, 1e-9)); + REQUIRE(f.helix_left_handed == true); + REQUIRE_THAT(f.helix_taper_deg, WithinAbs(3.0, 1e-9)); + } + + // Transform + if (f.type == CadFeatureType::Transform && e.name == "GoldenTransform") { + REQUIRE_THAT(f.xf_translate.x(), WithinAbs(3.5, 1e-9)); + REQUIRE_THAT(f.xf_translate.y(), WithinAbs(4.5, 1e-9)); + REQUIRE_THAT(f.xf_translate.z(), WithinAbs(5.5, 1e-9)); + REQUIRE_THAT(f.xf_axis.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(f.xf_axis.y(), WithinAbs(1.0, 1e-9)); + REQUIRE_THAT(f.xf_axis.z(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(f.xf_pivot.x(), WithinAbs(1.5, 1e-9)); + REQUIRE_THAT(f.xf_pivot.y(), WithinAbs(2.5, 1e-9)); + REQUIRE_THAT(f.xf_pivot.z(), WithinAbs(3.5, 1e-9)); + REQUIRE_THAT(f.xf_angle_deg, WithinAbs(37.0, 1e-9)); + REQUIRE(f.xf_copy == true); + } + + // Thicken + if (f.type == CadFeatureType::Thicken && e.name == "GoldenThicken") { + REQUIRE(f.thicken_face == 0); + REQUIRE_THAT(f.thicken_thickness, WithinAbs(1.75, 1e-9)); + REQUIRE(f.thicken_flip == true); + } + + // Cut-by-face: GoldenSplit uses cut_face_body/cut_face instead of plane + if (f.type == CadFeatureType::Cut && e.name == "GoldenSplit") { + REQUIRE(f.cut_face_body == 0); + REQUIRE(f.cut_face == 2); + REQUIRE(f.cut_keep_upper == true); + REQUIRE(f.cut_keep_lower == false); + } + + // Project + if (f.type == CadFeatureType::Project && e.name == "GoldenProject") { + REQUIRE(f.project_source_body == 0); + REQUIRE(f.project_face == 0); + REQUIRE(f.project_edges == e.project_edges); + } + + // Mate + if (f.type == CadFeatureType::Mate && e.name == "GoldenMate") { + REQUIRE(f.mate_kind == 1); + REQUIRE(f.mate_cs_a == e.mate_cs_a); + REQUIRE(f.mate_cs_b == e.mate_cs_b); + REQUIRE_THAT(f.mate_offset, WithinAbs(7.25, 1e-9)); + REQUIRE_THAT(f.mate_angle, WithinAbs(33.0, 1e-9)); + REQUIRE(f.mate_flip == true); + } + } + + // --- Layer 2: geometry check (optional — only if the document recomputes) --- + // Build expected document and try to recompute it. + // ponytail: the field-value layer above is the real tripwire; + // this layer is a bonus sanity check on the full recompute path. + CadDocument exp_doc = make_golden_doc_v1(); + bool exp_ok = exp_doc.recompute(); + if (!exp_ok) { + INFO("Expected document from make_golden_doc_v1() could not recompute " + "(complex feature tree). Field-value checks above are sufficient."); + } + + CadDocument doc; + bool ser_ok = doc.deserialize_recipe(blob); + + if (exp_ok && ser_ok) { + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == exp_doc.bodies.size()); + for (size_t i = 0; i < doc.bodies.size(); ++i) { + double v = double(SketchEngine::tessellate(doc.bodies[i].shape).volume()); + double ev = double(SketchEngine::tessellate(exp_doc.bodies[i].shape).volume()); + REQUIRE_THAT(v, WithinRel(ev, 1e-6)); + } + } else { + INFO("The golden recipe fixture was loaded and field-value checks passed."); + INFO("Recompute on the deserialized or expected document failed — this is"); + INFO("expected for the extended golden fixture (many feature types coexist"); + INFO("purely for serialization coverage). The field-value tripwire above is"); + INFO("the primary format check."); + } +} + +// --- Rib tests (M5b) --- + +TEST_CASE("rib adds material to a box", "[CadDocument][rib]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + + // Build a box: 40x40x10 extruded on XY -> z=[0,10] + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 40, 40, 10, "Box"); + doc.add_extrude(sk_box, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double Vbox = double(doc.display_mesh.volume()); + REQUIRE(Vbox > 0.0); + + // Sketch a single open Line across the box footprint, on the same XY plane. + // Line from (5,20) to (35,20), centred in Y but off-centre in X. + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(5, 20), Vec2d(35, 20)}, + }; + int sk_rib = doc.add_sketch_entities(ents, SketchPlane::XY(), "RibLine"); + REQUIRE(sk_rib >= 0); + + int fi = doc.add_rib(sk_rib, 0, 3.0, 12.0, 0, "Rib"); + REQUIRE(fi >= 0); + REQUIRE(doc.features[fi].type == CadFeatureType::Rib); + + bool ok = doc.recompute(); + REQUIRE(ok); + REQUIRE(doc.error.empty()); + // The rib fused extra material -> volume must be strictly larger. + double Vrib = double(doc.display_mesh.volume()); + REQUIRE(Vrib > Vbox); + + // A rib with a bad sketch ref must fail cleanly, not crash. + CadDocument bad; + bad.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + bad.add_extrude(0, 10.0, false, BooleanMode::New, "E"); + REQUIRE(bad.recompute()); + bad.add_rib(999, 0, 3.0, 10.0, 0, "BadRib"); + REQUIRE_FALSE(bad.recompute()); +} + +TEST_CASE("rib accepts a Project feature as its sketch ref", "[CadDocument][rib]") +{ + // Project carries plane + Line entities, which is all a rib reads. Every other consumer + // (Extrude, SurfaceExtrude, SurfaceRevolve) already accepts it; Rib used to reject it, + // which made "project a body edge, then rib along it" unreachable. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 40, 40, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + double Vbox = double(doc.display_mesh.volume()); + + // Project the whole body onto XY: the 4 top and 4 bottom edges survive as Lines. + int proj = doc.add_project_edges(0, {}, -1, SketchPlane::XY(), "Proj"); + REQUIRE(proj >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.features[proj].entities.size() == 8); + + int fi = doc.add_rib(proj, 0, 3.0, 12.0, 0, "RibFromProjection"); + REQUIRE(fi >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(double(doc.display_mesh.volume()) > Vbox); +} + +TEST_CASE("rib non-line entity rejected safely", "[CadDocument][rib]") +{ + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + + // Sketch with a Circle entity (not a Line) + std::vector ents = { + {SketchEntity::Type::Circle, Vec2d(0, 0), Vec2d(0, 0), Vec2d(0, 0), 5.0}, + }; + int sk2 = doc.add_sketch_entities(ents, SketchPlane::XY(), "CircleSketch"); + doc.add_rib(sk2, 0, 2.0, 10.0, 0, "BadRib"); + + REQUIRE_FALSE(doc.recompute()); + REQUIRE_FALSE(doc.error.empty()); + REQUIRE_CONTAINS(doc.error, "rib"); +} + +TEST_CASE("rib round-trip serialization", "[CadDocument][rib]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 40, 40, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(5, 20), Vec2d(35, 20)}, + }; + int sk2 = doc.add_sketch_entities(ents, SketchPlane::XY(), "RibLine"); + doc.add_rib(sk2, 0, 3.0, 12.0, 0, "Rib"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + size_t nb = doc.bodies.size(); + double Vdoc = double(doc.display_mesh.volume()); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.bodies.size() == nb); + double Vfresh = double(fresh.display_mesh.volume()); + REQUIRE_THAT(Vfresh, WithinAbs(Vdoc, 1e-6)); + + // Find the rib feature and check its fields survived. + const CadFeature* rf = nullptr; + for (const auto& f : fresh.features) { + if (f.type == CadFeatureType::Rib) { rf = &f; break; } + } + REQUIRE(rf != nullptr); + REQUIRE_THAT(rf->rib_thickness, WithinAbs(3.0, 1e-9)); + REQUIRE_THAT(rf->rib_depth, WithinAbs(12.0, 1e-9)); +} + +// --- Bridge tests (M3c) --- + +TEST_CASE("bridge two collinear lines", "[CadDocument][bridge]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, + {SketchEntity::Type::Line, Vec2d(20,0), Vec2d(30,0)}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + REQUIRE(sk == 0); + + int bi = doc.add_bridge(0, 0, 1, 1, 0, "Bridge"); + REQUIRE(bi == 2); + + const auto& se = doc.features[0].entities; + REQUIRE(se.size() == 3); + REQUIRE(se[bi].type == SketchEntity::Type::BSpline); + REQUIRE(se[bi].ctrl.size() == 4); + REQUIRE_THAT(se[bi].ctrl.front().x(), WithinAbs(10.0, 1e-6)); + REQUIRE_THAT(se[bi].ctrl.front().y(), WithinAbs(0.0, 1e-6)); + REQUIRE_THAT(se[bi].ctrl.back().x(), WithinAbs(20.0, 1e-6)); + REQUIRE_THAT(se[bi].ctrl.back().y(), WithinAbs(0.0, 1e-6)); +} + +TEST_CASE("bridge closes a C profile and extrudes", "[CadDocument][bridge]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + // Right-side of a closed square: P0(10,-10), up to P1(10,10) + std::vector ents = { + // bottom edge: (-10,-10) to (10,-10) + {SketchEntity::Type::Line, Vec2d(-10,-10), Vec2d(10,-10)}, + // left edge: (10,-10) to (10,10) + {SketchEntity::Type::Line, Vec2d(10,-10), Vec2d(10,10)}, + // top edge: (10,10) to (-10,10) + {SketchEntity::Type::Line, Vec2d(10,10), Vec2d(-10,10)}, + }; + // Missing: left edge from (-10,10) to (-10,-10). Build it as a separate line + // entity so the bridge connects two existing lines. + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "C"); + REQUIRE(sk == 0); + + // Add the closing line as entity 3: (-10,10) to (-10,-10) + CadFeature& f = doc.features[sk]; + SketchEntity closing; + closing.type = SketchEntity::Type::Line; + closing.p0 = Vec2d(-10, 10); + closing.p1 = Vec2d(-10, -10); + // The C is entities 0,1,2 (bottom cap, right side, top cap). + // Entity 0 end=1 is (10,-10); entity 2 start=0 is (10,10). That's a U. + // But we need a closed square from C shape. + // Re-think: a C shape open on the left side. + // Entities: 0 = bottom edge (-10,-10)->(10,-10) [end=1 at (10,-10)] + // 1 = right edge (10,-10)->(10,10) [start=0 at (10,-10), end=1 at (10,10)] + // 2 = top edge (10,10)->(-10,10) [start=0 at (10,10), end=1 at (-10,10)] + // The C is open: entity 2's end is at (-10,10) and entity 0's start is at (-10,-10). + // Bridge: entity 2 end=1 (-10,10) -> entity 0 start=0 (-10,-10). + f.entities.push_back(closing); + REQUIRE(f.entities.size() == 4); + + // Now bridge from top end (entity 2 end=1 = (-10,10)) to bottom start (entity 0 end=0 = (-10,-10)) + int bi = doc.add_bridge(sk, 2/*top edge*/, 1/*end*/, 0/*bottom edge*/, 0/*start*/, "Bridge"); + REQUIRE(bi == 4); + REQUIRE(f.entities.size() == 5); + + // Now the entities should form a closed loop -> extrude + int ex = doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(ex >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + REQUIRE_THAT(double(doc.display_mesh.volume()), WithinRel(20.0 * 20.0 * 5.0, 1e-2)); +} + +TEST_CASE("bridge bad indices throw", "[CadDocument][bridge]") +{ + CadDocument doc; + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, + {SketchEntity::Type::Line, Vec2d(20,0), Vec2d(30,0)}, + }; + doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + + // out-of-range entity a + REQUIRE_THROWS(doc.add_bridge(0, 99, 1, 1, 0, "Bad")); + // out-of-range entity b + REQUIRE_THROWS(doc.add_bridge(0, 0, 1, 99, 0, "Bad")); + // out-of-range sketch_ref + REQUIRE_THROWS(doc.add_bridge(99, 0, 1, 1, 0, "Bad")); + // non-sketch feature as sketch_ref + doc.add_extrude(0, 5.0, false, BooleanMode::New, "Ex"); + REQUIRE_THROWS(doc.add_bridge(1, 0, 1, 1, 0, "Bad")); +} + +TEST_CASE("bridge round-trip serialization", "[CadDocument][bridge]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // The two collinear stubs plus the bridge span (0,0)->(30,0); the remaining three lines + // return to the origin so the profile is genuinely CLOSED. It used to be just the two + // stubs and the bridge, an entirely open chain that "extruded" only because OCCT will + // make a face out of an open wire — the silently-wrong geometry this area exists to stop. + // This test is about the bridge's serialization round-trip, and deserialize_recipe + // recomputes, so the document has to be one that legitimately builds. + std::vector ents = { + {SketchEntity::Type::Line, Vec2d(0,0), Vec2d(10,0)}, + {SketchEntity::Type::Line, Vec2d(20,0), Vec2d(30,0)}, + {SketchEntity::Type::Line, Vec2d(30,0), Vec2d(30,10)}, + {SketchEntity::Type::Line, Vec2d(30,10), Vec2d(0,10)}, + {SketchEntity::Type::Line, Vec2d(0,10), Vec2d(0,0)}, + }; + int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "S"); + REQUIRE(sk == 0); + int bi = doc.add_bridge(sk, 0, 1, 1, 0, "Bridge"); + REQUIRE(bi == 5); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.features.size() == 2); + + const auto& br = doc2.features[0].entities[5]; + REQUIRE(br.type == SketchEntity::Type::BSpline); + REQUIRE(br.ctrl.size() == 4); + REQUIRE_THAT(br.ctrl.front().x(), WithinAbs(10.0, 1e-9)); + REQUIRE_THAT(br.ctrl.front().y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(br.ctrl.back().x(), WithinAbs(20.0, 1e-9)); + REQUIRE_THAT(br.ctrl.back().y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("delete_face removes a fillet face and restores volume", "[CadDocument][deleteface]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double Vbox = double(doc.display_mesh.volume()); + REQUIRE(Vbox > 0.0); + + doc.add_fillet(2.0, FaceGroup::All, "Fillet"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double Vf = double(doc.display_mesh.volume()); + REQUIRE(Vf < Vbox); + + int nfaces = GeometryEngine::face_count(doc.bodies[0].shape); + doc.checkpoint(); + bool found = false; + for (int fi = 0; fi < nfaces && !found; ++fi) { + int idx = doc.add_delete_face(0, {fi}, "Unfillet"); + (void)idx; + if (doc.recompute() && doc.error.empty()) { + double Vr = double(doc.display_mesh.volume()); + if (Vr > Vf) { + found = true; + } + } + if (!found) doc.undo(); + } + REQUIRE(found); +} + +TEST_CASE("delete_face with bad face index fails safely", "[CadDocument][deleteface]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_delete_face(0, {9999}, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "face"); +} + +TEST_CASE("delete_face round-trip serialization", "[CadDocument][deleteface]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.add_fillet(2.0, FaceGroup::All, "Fillet"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int nfaces = GeometryEngine::face_count(doc.bodies[0].shape); + int fillet_face = -1; + for (int fi = 0; fi < nfaces; ++fi) { + doc.checkpoint(); + doc.add_delete_face(0, {fi}, "Unfillet"); + bool ok = doc.recompute(); + if (ok && doc.error.empty()) { + fillet_face = fi; + break; + } + doc.undo(); + } + REQUIRE(fillet_face >= 0); + + std::vector> bboxes; + for (const auto& b : doc.bodies) { + Bnd_Box bb; BRepBndLib::Add(b.shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes.push_back({Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)}); + } + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.recompute()); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.bodies.size() == doc.bodies.size()); + + for (size_t i = 0; i < bboxes.size(); ++i) { + Bnd_Box bb; BRepBndLib::Add(doc2.bodies[i].shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(double(x0), WithinAbs(bboxes[i].first.x(), 1e-6)); + REQUIRE_THAT(double(y0), WithinAbs(bboxes[i].first.y(), 1e-6)); + REQUIRE_THAT(double(z0), WithinAbs(bboxes[i].first.z(), 1e-6)); + REQUIRE_THAT(double(x1), WithinAbs(bboxes[i].second.x(), 1e-6)); + REQUIRE_THAT(double(y1), WithinAbs(bboxes[i].second.y(), 1e-6)); + REQUIRE_THAT(double(z1), WithinAbs(bboxes[i].second.z(), 1e-6)); + } +} + +TEST_CASE("hole: counterbore removes more material than a simple bore", "[CadDocument][hole]") +{ + using Catch::Matchers::WithinAbs; + auto make_box_hole = [](int style, double cbore_d, double cbore_depth, + double csink_d, double csink_angle, const std::string& desig) { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 30, 30, 0, "Box"); + doc.add_extrude(sk, 15.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double v_box = doc.body_mass_properties(0).volume; + if (style == 0) + doc.add_hole(6.0, 10.0, false, 0.0, 0.0, SketchPlane::XY(), "Hole"); + else + doc.add_hole_styled(6.0, 10.0, false, 0.0, 0.0, SketchPlane::XY(), style, + cbore_d, cbore_depth, csink_d, csink_angle, desig, "Hole"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + double v = doc.body_mass_properties(0).volume; + REQUIRE(v < v_box); + return v; + }; + + double v_simple = make_box_hole(0, 0, 0, 0, 0, ""); + double v_cbore = make_box_hole(1, 11.0, 6.0, 0, 0, "M6"); + REQUIRE(v_cbore < v_simple); +} + +TEST_CASE("hole: countersink removes more material than a simple bore", "[CadDocument][hole]") +{ + using Catch::Matchers::WithinAbs; + auto make_box = []() { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 30, 30, 0, "Box"); + doc.add_extrude(sk, 15.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + return doc; + }; + + CadDocument doc_simple = make_box(); + doc_simple.add_hole(6.0, 10.0, false, 0.0, 0.0, SketchPlane::XY(), "Hole"); + REQUIRE(doc_simple.recompute()); + double v_simple = doc_simple.body_mass_properties(0).volume; + double v_box = 30.0 * 30.0 * 15.0; + + CadDocument doc_csink = make_box(); + doc_csink.add_hole_styled(6.0, 10.0, false, 0.0, 0.0, SketchPlane::XY(), 2, + 0.0, 0.0, 12.0, 90.0, "M6", "Hole"); + REQUIRE(doc_csink.recompute()); + double v_csink = doc_csink.body_mass_properties(0).volume; + + REQUIRE(v_simple < v_box); + REQUIRE(v_csink < v_simple); +} + +TEST_CASE("hole: standards table lookup", "[CadDocument][hole]") +{ + using Catch::Matchers::WithinAbs; + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 30, 30, 0, "Box"); + doc.add_extrude(sk, 15.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int fi = doc.add_hole_standard("M6", 0, true, 10, 0, 0, SketchPlane::XY(), "H"); + REQUIRE(fi >= 0); + REQUIRE_THAT(doc.features[fi].hole_diameter, WithinAbs(6.6, 1e-6)); + REQUIRE(doc.features[fi].hole_standard == "M6"); + + REQUIRE_THROWS(doc.add_hole_standard("M999", 0, true, 10, 0, 0, SketchPlane::XY(), "H")); + try { + doc.add_hole_standard("M999", 0, true, 10, 0, 0, SketchPlane::XY(), "H"); + } catch (const std::exception& ex) { + CHECK_CONTAINS(std::string(ex.what()), "standard"); + } +} + +TEST_CASE("hole: round-trip preserves styled counterbore hole", "[CadDocument][hole]") +{ + using Catch::Matchers::WithinAbs; + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 30, 30, 0, "Box"); + doc.add_extrude(sk, 15.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_hole_styled(6.0, 10.0, false, 0.0, 0.0, SketchPlane::XY(), 1, + 11.0, 6.0, 0.0, 90.0, "M6", "Cbore"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + std::vector> bboxes; + for (const auto& b : doc.bodies) { + Bnd_Box bb; BRepBndLib::Add(b.shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + bboxes.emplace_back(Vec3d(x0, y0, z0), Vec3d(x1, y1, z1)); + } + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + REQUIRE(doc2.error.empty()); + REQUIRE(doc2.bodies.size() == doc.bodies.size()); + + for (size_t i = 0; i < bboxes.size(); ++i) { + Bnd_Box bb; BRepBndLib::Add(doc2.bodies[i].shape, bb); + Standard_Real x0, y0, z0, x1, y1, z1; + bb.Get(x0, y0, z0, x1, y1, z1); + REQUIRE_THAT(double(x0), WithinAbs(bboxes[i].first.x(), 1e-6)); + REQUIRE_THAT(double(y0), WithinAbs(bboxes[i].first.y(), 1e-6)); + REQUIRE_THAT(double(z0), WithinAbs(bboxes[i].first.z(), 1e-6)); + REQUIRE_THAT(double(x1), WithinAbs(bboxes[i].second.x(), 1e-6)); + REQUIRE_THAT(double(y1), WithinAbs(bboxes[i].second.y(), 1e-6)); + REQUIRE_THAT(double(z1), WithinAbs(bboxes[i].second.z(), 1e-6)); + } + + bool found = false; + for (const auto& f : doc2.features) { + if (f.type == CadFeatureType::Hole && f.name == "Cbore") { + REQUIRE(f.hole_style == 1); + REQUIRE_THAT(f.hole_cbore_diameter, WithinAbs(11.0, 1e-9)); + found = true; + } + } + REQUIRE(found); +} + +TEST_CASE("variables drive a box (parametric sketch + extrude)", "[CadDocument][variables]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.features.size() >= 2); + int ex = sk + 1; + + doc.variables = {{"w", "10"}, {"h", "w*2"}}; + doc.features[sk].expr = {{"width", "w"}, {"height", "w"}}; + doc.features[ex].expr = {{"distance", "h"}}; + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_FALSE(doc.body.IsNull()); + + Bnd_Box bb; BRepBndLib::Add(doc.body, bb); + double xlo, ylo, zlo, xhi, yhi, zhi; + bb.Get(xlo, ylo, zlo, xhi, yhi, zhi); + REQUIRE_THAT(xhi - xlo, WithinAbs(10.0, 1.0)); + REQUIRE_THAT(yhi - ylo, WithinAbs(10.0, 1.0)); + REQUIRE_THAT(zhi - zlo, WithinAbs(20.0, 2.0)); +} + +TEST_CASE("function + pi in expression binding", "[CadDocument][variables]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.features.size() >= 2); + + doc.variables = {{"r", "sqrt(16)+abs(-2)"}}; + doc.features[sk].expr = {{"radius", "r"}}; + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(doc.features[sk].radius, WithinAbs(6.0, 1e-6)); + + doc.variables = {{"r", "max(3, pi)"}}; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(doc.features[sk].radius, WithinAbs(M_PI, 1e-6)); + + doc.variables = {{"r", "5"}, {"d", "r*2"}}; + doc.features[sk].expr = {{"radius", "d"}}; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_THAT(doc.features[sk].radius, WithinAbs(10.0, 1e-6)); +} + +TEST_CASE("cycle detected fails recompute with error", "[CadDocument][variables]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.features[sk].expr = {{"width", "a"}}; + + doc.variables = {{"a", "b"}, {"b", "a"}}; + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "cycle"); +} + +TEST_CASE("unknown parameter fails recompute", "[CadDocument][variables]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.features[sk].expr = {{"nope", "1"}}; + + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "unknown parameter"); +} + +TEST_CASE("unknown identifier fails recompute", "[CadDocument][variables]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.features[sk].expr = {{"width", "x"}}; + + doc.variables = {{"x", "y+1"}}; + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "unknown identifier"); +} + +// The checkpoint -> mutate -> recompute -> undo-on-failure pattern is what both the GUI and +// McpControl use to keep a bad edit out of the document. It only works if the snapshot covers +// `variables` as well as `features`: undo() used to restore features alone, so a bad variable +// survived the rollback and every later recompute failed — the document was left unusable. +TEST_CASE("undo rolls back a bad variable, not just features", "[CadDocument][variables]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.features[sk].expr = {{"width", "w"}}; + doc.variables = {{"w", "20"}}; + REQUIRE(doc.recompute()); + + // Caller sets a variable to something unevaluable, exactly as action_set_variable does. + doc.checkpoint(); + doc.variables["w"] = "nosuchvar + 1"; + REQUIRE_FALSE(doc.recompute()); + REQUIRE(doc.undo()); + + // The good value must be back... + REQUIRE(doc.variables.at("w") == "20"); + // ...and, the part that actually bit, the document must still be usable. + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); +} + +// A variable ADDED under a checkpoint must disappear entirely on undo, not linger with a +// stale value: the pre-mutation snapshot simply did not contain the key. +TEST_CASE("undo removes a variable that did not exist before the checkpoint", "[CadDocument][variables]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.variables.empty()); + + doc.checkpoint(); + doc.variables["bogus"] = "1/0 +"; // syntactically broken + REQUIRE_FALSE(doc.recompute()); + REQUIRE(doc.undo()); + + REQUIRE(doc.variables.count("bogus") == 0); + REQUIRE(doc.recompute()); +} + +TEST_CASE("parametric recipe round-trips through serialize/deserialize", "[CadDocument][variables]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), + 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.features.size() >= 2); + int ex = sk + 1; + + doc.variables = {{"w", "10"}, {"h", "w*2"}}; + doc.features[sk].expr = {{"width", "w"}, {"height", "w"}}; + doc.features[ex].expr = {{"distance", "h"}}; + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + Bnd_Box bb_orig; BRepBndLib::Add(doc.body, bb_orig); + double ox0, oy0, oz0, ox1, oy1, oz1; + bb_orig.Get(ox0, oy0, oz0, ox1, oy1, oz1); + + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument doc2; + REQUIRE(doc2.deserialize_recipe(blob)); + + REQUIRE(doc2.variables.size() == 2); + REQUIRE(doc2.variables["w"] == "10"); + REQUIRE(doc2.variables["h"] == "w*2"); + + bool found_sk = false, found_ex = false; + for (const auto& f : doc2.features) { + if (f.name == "Sketch") { + REQUIRE(f.expr.size() == 2); + REQUIRE(f.expr.at("width") == "w"); + REQUIRE(f.expr.at("height") == "w"); + found_sk = true; + } + if (f.name == "Extrude") { + REQUIRE(f.expr.size() == 1); + REQUIRE(f.expr.at("distance") == "h"); + found_ex = true; + } + } + REQUIRE(found_sk); + REQUIRE(found_ex); + + REQUIRE(doc2.bodies.size() == doc.bodies.size()); + + Bnd_Box bb2; BRepBndLib::Add(doc2.body, bb2); + double nx0, ny0, nz0, nx1, ny1, nz1; + bb2.Get(nx0, ny0, nz0, nx1, ny1, nz1); + REQUIRE_THAT(nx0, WithinAbs(ox0, 1e-6)); + REQUIRE_THAT(ny0, WithinAbs(oy0, 1e-6)); + REQUIRE_THAT(nz0, WithinAbs(oz0, 1e-6)); + REQUIRE_THAT(nx1, WithinAbs(ox1, 1e-6)); + REQUIRE_THAT(ny1, WithinAbs(oy1, 1e-6)); + REQUIRE_THAT(nz1, WithinAbs(oz1, 1e-6)); +} + +TEST_CASE("surface-extrude makes an open shell", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + REQUIRE(sk >= 0); + int fi = doc.add_surface_extrude(sk, 12.0, "Skin"); + REQUIRE(fi == 1); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + // A rectangle skin has 4 side faces (no end caps). + int face_count = 0, solid_count = 0; + for (TopExp_Explorer fe(doc.bodies.back().shape, TopAbs_FACE); fe.More(); fe.Next()) ++face_count; + for (TopExp_Explorer se(doc.bodies.back().shape, TopAbs_SOLID); se.More(); se.Next()) ++solid_count; + REQUIRE(face_count >= 1); + REQUIRE(solid_count == 0); + REQUIRE(doc.display_mesh.facets_count() > 0); +} + +TEST_CASE("surface-revolve makes an open shell", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + // A small rectangle offset from the axis: u=10..15, v=0..5. + SketchProfile sp; + sp.points = {{10,0},{15,0},{15,5},{10,5}}; + sp.closed = true; + const int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "Profile"); + REQUIRE(sk >= 0); + int fi = doc.add_surface_revolve(sk, 360, 0, "Rev"); + REQUIRE(fi == 1); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + int solid_count = 0; + for (TopExp_Explorer se(doc.bodies.back().shape, TopAbs_SOLID); se.More(); se.Next()) ++solid_count; + REQUIRE(solid_count == 0); + REQUIRE(doc.display_mesh.facets_count() > 0); +} + +TEST_CASE("surface-extrude bad ref safe", "[CadDocument][surface]") +{ + CadDocument doc; + int fi = doc.add_surface_extrude(999, 10, "Bad"); + REQUIRE(fi == 0); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "surface-extrude"); +} + +TEST_CASE("surface round-trip serialize/deserialize", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + doc.add_surface_extrude(sk, 12.0, "Skin"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + size_t orig_nb = doc.bodies.size(); + Bnd_Box orig_bb; + BRepBndLib::Add(doc.bodies.back().shape, orig_bb); + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.error.empty()); + REQUIRE(fresh.bodies.size() == orig_nb); + REQUIRE(CadDocument::is_sheet_shape(fresh.bodies.back().shape)); + + Bnd_Box fresh_bb; + BRepBndLib::Add(fresh.bodies.back().shape, fresh_bb); + Standard_Real ox0, oy0, oz0, ox1, oy1, oz1; + orig_bb.Get(ox0, oy0, oz0, ox1, oy1, oz1); + Standard_Real fx0, fy0, fz0, fx1, fy1, fz1; + fresh_bb.Get(fx0, fy0, fz0, fx1, fy1, fz1); + REQUIRE_THAT(double(fx0), WithinAbs(double(ox0), 1e-6)); + REQUIRE_THAT(double(fy0), WithinAbs(double(oy0), 1e-6)); + REQUIRE_THAT(double(fz0), WithinAbs(double(oz0), 1e-6)); + REQUIRE_THAT(double(fx1), WithinAbs(double(ox1), 1e-6)); + REQUIRE_THAT(double(fy1), WithinAbs(double(oy1), 1e-6)); + REQUIRE_THAT(double(fz1), WithinAbs(double(oz1), 1e-6)); +} + +TEST_CASE("thicken-surface makes a solid from a sheet", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinRel; + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + REQUIRE(sk >= 0); + int si = doc.add_surface_extrude(sk, 12.0, "Skin"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + Bnd_Box sheet_bb; + BRepBndLib::Add(doc.bodies.back().shape, sheet_bb); + + int ti = doc.add_thicken_surface(0, 2.0, false, "Wall"); + REQUIRE(ti == 2); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + REQUIRE(!CadDocument::is_sheet_shape(doc.bodies.back().shape)); + double vol = doc.body_mass_properties(1).volume; + REQUIRE(vol > 0); + + Bnd_Box thick_bb; + BRepBndLib::Add(doc.bodies.back().shape, thick_bb); + Standard_Real sx0, sy0, sz0, sx1, sy1, sz1; + Standard_Real tx0, ty0, tz0, tx1, ty1, tz1; + sheet_bb.Get(sx0, sy0, sz0, sx1, sy1, sz1); + thick_bb.Get(tx0, ty0, tz0, tx1, ty1, tz1); + REQUIRE_THAT(double(tx0), WithinAbs(double(sx0), 2.1)); + REQUIRE_THAT(double(tx1), WithinAbs(double(sx1), 2.1)); +} + +// Regression for lu27, with the rig's own numbers. A 60x60x40 four-walled open box +// used to report volume 96000 and an inertia diagonal of [-4.2e7, -4.2e7, -6.9e7] — negative +// principal moments, which no real body can have. VolumeProperties was being integrated over +// an open shell as though it were closed, and std::abs() on the mass hid the only obvious tell. +// The area was always right, so that stays reported and valid; the volume and inertia must not. +TEST_CASE("mass properties of a sheet body report area only, never a volume", + "[CadDocument][surface]") +{ + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 60, 60, 0, "Rect"); + REQUIRE(sk >= 0); + doc.add_surface_extrude(sk, 40.0, "Skin"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + + auto sheet = doc.body_mass_properties(0); + REQUIRE_FALSE(sheet.is_solid); + REQUIRE(sheet.valid); // the area IS trustworthy + REQUIRE_THAT(sheet.surface_area, WithinRel(9600.0, 1e-6)); // 4 walls x 60 x 40 + REQUIRE(sheet.volume == 0.0); + for (double v : sheet.inertia) + REQUIRE(v == 0.0); + + // The solid thickened from that same sheet is the contrast case: it does have a volume, + // and its principal moments are positive, as any real body's must be. + REQUIRE(doc.add_thicken_surface(0, 2.0, false, "Wall") >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + auto solid = doc.body_mass_properties(1); + REQUIRE(solid.is_solid); + REQUIRE(solid.valid); + REQUIRE(solid.volume > 0.0); + REQUIRE(solid.inertia[0] > 0.0); + REQUIRE(solid.inertia[4] > 0.0); + REQUIRE(solid.inertia[8] > 0.0); +} + +// wm4s. The wall of a thickened open box must contain the corner material. Thickening +// each face along its own normal and sewing (MakeThickSolidBySimple) leaves the four vertical +// corners empty and measured 29648.15 where the geometry requires 44000; the two controls below +// were exact before and must stay exact, since they are what a corner-only fix must not disturb. +TEST_CASE("thicken surface fills the corners of a closed-loop wall", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinRel; + + SECTION("open box: (60^2 - 50^2) * 40") { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 60, 60, 0, "Rect"); + REQUIRE(sk >= 0); + doc.add_surface_extrude(sk, 40.0, "Skin"); // 4 walls, no caps + REQUIRE(doc.recompute()); + REQUIRE(doc.body_mass_properties(0).surface_area == Approx(9600.0)); // the sheet is what we think + + REQUIRE(doc.add_thicken_surface(0, 5.0, false, "Wall") >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto w = doc.body_mass_properties(1); + REQUIRE(w.is_solid); // NOT a shell: the old ByJoin attempts + REQUIRE_THAT(w.volume, WithinRel(44000.0, 1e-6)); // returned volume 0.0 / is_solid false + // The wall must sit ON the sheet, not around it: an inverted capped solid offsets the + // wrong way and lands at 70x70 with a volume larger than its own bounding box. + const auto bb = doc.display_body_meshes[1].bounding_box(); + REQUIRE_THAT(bb.max.x() - bb.min.x(), WithinRel(60.0, 1e-3)); + REQUIRE_THAT(bb.max.z() - bb.min.z(), WithinRel(40.0, 1e-3)); + } + + SECTION("control, flat sheet stays exact: 3600 * 5") { + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 60, 60, 0, "Rect"); + REQUIRE(doc.add_surface_fill(sk, "Face") >= 0); // one flat face, no rim to mitre + REQUIRE(doc.recompute()); + REQUIRE(doc.add_thicken_surface(0, 5.0, false, "Plate") >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto p = doc.body_mass_properties(1); + REQUIRE(p.is_solid); + REQUIRE_THAT(p.volume, WithinRel(18000.0, 1e-6)); + } +} + +TEST_CASE("surface-offset creates another sheet shifted outward", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + REQUIRE(sk >= 0); + int si = doc.add_surface_extrude(sk, 12.0, "Skin"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + Bnd_Box src_bb; + BRepBndLib::Add(doc.bodies.back().shape, src_bb); + + int oi = doc.add_surface_offset(0, 1.0, "Off"); + REQUIRE(oi == 2); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + Bnd_Box off_bb; + BRepBndLib::Add(doc.bodies.back().shape, off_bb); + Standard_Real sx0, sy0, sz0, sx1, sy1, sz1; + Standard_Real ox0, oy0, oz0, ox1, oy1, oz1; + src_bb.Get(sx0, sy0, sz0, sx1, sy1, sz1); + off_bb.Get(ox0, oy0, oz0, ox1, oy1, oz1); + REQUIRE(std::abs(double(ox0) - double(sx0)) > 1e-3); + REQUIRE(std::abs(double(ox1) - double(sx1)) > 1e-3); + REQUIRE(std::abs(double(oy0) - double(sy0)) > 1e-3); + REQUIRE(std::abs(double(oy1) - double(sy1)) > 1e-3); +} + +TEST_CASE("thicken-surface on non-sheet fails", "[CadDocument][surface]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + REQUIRE(sk >= 0); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Solid"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_FALSE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + doc.add_thicken_surface(0, 2.0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "sheet"); +} + +TEST_CASE("thicken-surface round-trip serialize/deserialize", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinAbs; + using Catch::Matchers::WithinRel; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + doc.add_surface_extrude(sk, 12.0, "Skin"); + REQUIRE(doc.recompute()); + doc.add_thicken_surface(0, 2.0, false, "Wall"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_FALSE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + size_t orig_nb = doc.bodies.size(); + Bnd_Box orig_bb; + BRepBndLib::Add(doc.bodies.back().shape, orig_bb); + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.error.empty()); + REQUIRE(fresh.bodies.size() == orig_nb); + REQUIRE_FALSE(CadDocument::is_sheet_shape(fresh.bodies.back().shape)); + + Bnd_Box fresh_bb; + BRepBndLib::Add(fresh.bodies.back().shape, fresh_bb); + Standard_Real ox0, oy0, oz0, ox1, oy1, oz1; + Standard_Real fx0, fy0, fz0, fx1, fy1, fz1; + orig_bb.Get(ox0, oy0, oz0, ox1, oy1, oz1); + fresh_bb.Get(fx0, fy0, fz0, fx1, fy1, fz1); + REQUIRE_THAT(double(fx0), WithinAbs(double(ox0), 1e-6)); + REQUIRE_THAT(double(fy0), WithinAbs(double(oy0), 1e-6)); + REQUIRE_THAT(double(fz0), WithinAbs(double(oz0), 1e-6)); + REQUIRE_THAT(double(fx1), WithinAbs(double(ox1), 1e-6)); + REQUIRE_THAT(double(fy1), WithinAbs(double(oy1), 1e-6)); + REQUIRE_THAT(double(fz1), WithinAbs(double(oz1), 1e-6)); +} + +TEST_CASE("surface-loft makes an open shell", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + SketchProfile bot; + bot.points = {{-10,-10},{10,-10},{10,10},{-10,10}}; + bot.closed = true; + int s0 = doc.add_sketch_profile(bot, SketchPlane::XY(), "Bottom"); + + doc.add_plane(0 /*XY*/, 20.0, 0.0, 0, "Plane1"); + SketchPlane top = doc.resolve_datum_planes()[0].second; + SketchProfile tp; + tp.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; + tp.closed = true; + int s1 = doc.add_sketch_profile(tp, top, "Top"); + + int fi = doc.add_surface_loft({s0, s1}, false, "Skin"); + REQUIRE(fi >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + // Contrast with a solid loft on the same profiles. + CadDocument doc2; + SketchProfile bot2; + bot2.points = {{-10,-10},{10,-10},{10,10},{-10,10}}; + bot2.closed = true; + int a0 = doc2.add_sketch_profile(bot2, SketchPlane::XY(), "Bottom"); + doc2.add_plane(0 /*XY*/, 20.0, 0.0, 0, "Plane1"); + SketchPlane top2 = doc2.resolve_datum_planes()[0].second; + SketchProfile tp2; + tp2.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; + tp2.closed = true; + int a1 = doc2.add_sketch_profile(tp2, top2, "Top"); + doc2.add_loft({a0, a1}, false, BooleanMode::New, "SolidLoft"); + REQUIRE(doc2.recompute()); + REQUIRE(doc2.error.empty()); + REQUIRE_FALSE(CadDocument::is_sheet_shape(doc2.bodies.back().shape)); +} + +TEST_CASE("surface-fill makes a one-face sheet", "[CadDocument][surface]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Rect"); + REQUIRE(sk >= 0); + int fi = doc.add_surface_fill(sk, "Patch"); + REQUIRE(fi == 1); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 1); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + int face_count = 0; + for (TopExp_Explorer fe(doc.bodies.back().shape, TopAbs_FACE); fe.More(); fe.Next()) ++face_count; + REQUIRE(face_count >= 1); +} + +TEST_CASE("surface-loft / surface-fill bad refs safe", "[CadDocument][surface]") +{ + { + CadDocument doc; + doc.add_surface_loft({999}, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "surface-loft"); + } + { + CadDocument doc; + doc.add_surface_fill(999, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "surface-fill"); + } +} + +TEST_CASE("surface-loft round-trip serialize/deserialize", "[CadDocument][surface]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + SketchProfile bot; + bot.points = {{-10,-10},{10,-10},{10,10},{-10,10}}; + bot.closed = true; + int s0 = doc.add_sketch_profile(bot, SketchPlane::XY(), "Bottom"); + doc.add_plane(0 /*XY*/, 20.0, 0.0, 0, "Plane1"); + SketchPlane top = doc.resolve_datum_planes()[0].second; + SketchProfile tp; + tp.points = {{-5,-5},{5,-5},{5,5},{-5,5}}; + tp.closed = true; + int s1 = doc.add_sketch_profile(tp, top, "Top"); + doc.add_surface_loft({s0, s1}, false, "Skin"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies.back().shape)); + + size_t orig_nb = doc.bodies.size(); + Bnd_Box orig_bb; + BRepBndLib::Add(doc.bodies.back().shape, orig_bb); + + std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.error.empty()); + REQUIRE(fresh.bodies.size() == orig_nb); + REQUIRE(CadDocument::is_sheet_shape(fresh.bodies.back().shape)); + + Bnd_Box fresh_bb; + BRepBndLib::Add(fresh.bodies.back().shape, fresh_bb); + Standard_Real ox0, oy0, oz0, ox1, oy1, oz1; + Standard_Real fx0, fy0, fz0, fx1, fy1, fz1; + orig_bb.Get(ox0, oy0, oz0, ox1, oy1, oz1); + fresh_bb.Get(fx0, fy0, fz0, fx1, fy1, fz1); + REQUIRE_THAT(double(fx0), WithinAbs(double(ox0), 1e-6)); + REQUIRE_THAT(double(fy0), WithinAbs(double(oy0), 1e-6)); + REQUIRE_THAT(double(fz0), WithinAbs(double(oz0), 1e-6)); + REQUIRE_THAT(double(fx1), WithinAbs(double(ox1), 1e-6)); + REQUIRE_THAT(double(fy1), WithinAbs(double(oy1), 1e-6)); + REQUIRE_THAT(double(fz1), WithinAbs(double(oz1), 1e-6)); +} + +// --- Mate tests (M8a) --- + +TEST_CASE("fastened mate with zero offset/angle", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk_box, 5.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_cyl = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk_cyl, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int mi = doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Mate"); + REQUIRE(mi >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(5.0, 1e-4)); +} + +TEST_CASE("fastened mate with offset", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk2 = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk2, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 7.0, 0.0, false, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.Z()), WithinAbs(12.0, 1e-4)); +} + +TEST_CASE("fastened mate with angle", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk2 = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk2, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_x_hint = Vec3d(1, 0, 0); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 90.0, false, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); +} + +TEST_CASE("fastened mate with flip", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk2 = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk2, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, true, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + // Flip opposes Z axes: for a symmetric cylinder this is invisible in centroid, + // but the mate executed cleanly and the body moved to the target connector. +} + +TEST_CASE("planar mate: normal distance becomes mate_offset", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk2 = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk2, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(20, 0, 0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(1, cs_fixed, cs_moving, 3.0, 0.0, false, "MatePlanar"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + // Connector B was at z=0 (bottom of 10mm cylinder). After planar mate with + // offset=3 and A at z=5, the z-distance from A to B becomes 3 => B.z = 8. + // The cylinder centroid (was at z=5) moves to z=13. + REQUIRE_THAT(double(com.Z()), WithinAbs(13.0, 1e-4)); +} + +TEST_CASE("mate round-trip serialization", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_A"); + doc.features[cs_a].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk2 = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk2, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(20, 0, 5), "CS_B"); + doc.features[cs_b].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(1, cs_a, cs_b, 7.25, 33.0, true, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + size_t nb = doc.bodies.size(); + auto blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.bodies.size() == nb); + + const CadFeature* mf = nullptr; + for (const auto& f : fresh.features) { + if (f.type == CadFeatureType::Mate) { mf = &f; break; } + } + REQUIRE(mf != nullptr); + REQUIRE(mf->mate_kind == 1); + REQUIRE_THAT(mf->mate_offset, WithinAbs(7.25, 1e-9)); + REQUIRE_THAT(mf->mate_angle, WithinAbs(33.0, 1e-9)); + REQUIRE(mf->mate_flip == true); +} + +TEST_CASE("version 2 blob is rejected", "[CadDocument][mate]") +{ + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + std::ostringstream oss; + { + cereal::BinaryOutputArchive ar(oss); + uint32_t fake_v = 2; + ar(fake_v); + ar(doc.features); + ar(doc.variables); + } + std::string blob = oss.str(); + + CadDocument fresh; + REQUIRE_FALSE(fresh.deserialize_recipe(blob)); + REQUIRE_CONTAINS(fresh.error, "older version"); +} + +TEST_CASE("mate error: out of range connectors", "[CadDocument][mate]") +{ + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS"); + doc.features[cs].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, 999, cs, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "mate_cs_a out of range"); + doc.features.pop_back(); doc.error.clear(); + + doc.add_mate(0, cs, 999, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "mate_cs_b out of range"); + doc.features.pop_back(); doc.error.clear(); + + doc.add_mate(0, sk, cs, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "not a valid CoordSys"); + doc.features.pop_back(); doc.error.clear(); +} + +// A mate stores its two connectors as FEATURE INDICES. remove_feature() erases a slot and remaps +// every surviving sketch_ref through the deletion, but it did not remap mate_cs_a / mate_cs_b — +// so deleting anything ahead of a connector slid both references down onto whatever features +// happened to occupy those indices. The validation in recompute() only catches out-of-range and +// non-CoordSys targets; when the landing slots are themselves CoordSys features — the normal +// case, since an assembly carries at least two — nothing reports anything. The mate silently +// resolves against the wrong frames and moves the wrong body. +// +// The third connector below (CS_Spare) is what makes the corruption silent rather than loud: +// without it the one-slot shift would push mate_cs_b onto the Mate feature itself and trip the +// "not a valid CoordSys" guard, hiding the real defect behind an error that looks handled. +TEST_CASE("mate connectors survive deletion of an earlier feature", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk_box, 5.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // The victim: an unrelated connector sitting AHEAD of the pair the mate will use. + int cs_decoy = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(1, 1, 1), "CS_Decoy"); + doc.features[cs_decoy].coordsys_body = 0; + REQUIRE(doc.recompute()); + + int sk_cyl = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk_cyl, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + int cs_spare = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(9, 9, 9), "CS_Spare"); + doc.features[cs_spare].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + REQUIRE_THAT(double(props.CentreOfMass().X()), WithinAbs(5.0, 1e-4)); + + REQUIRE(doc.remove_feature(cs_decoy)); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // The mate must still name the same two connectors it was built with. + const CadFeature& mate = doc.features.back(); + REQUIRE(mate.type == CadFeatureType::Mate); + REQUIRE(mate.mate_cs_a >= 0); + REQUIRE(mate.mate_cs_b >= 0); + REQUIRE(doc.features[mate.mate_cs_a].name == "CS_Fixed"); + REQUIRE(doc.features[mate.mate_cs_b].name == "CS_Moving"); + + // ...and therefore still assemble the same way: the cylinder on the fixed connector. + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + REQUIRE_THAT(double(props.CentreOfMass().X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(props.CentreOfMass().Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(props.CentreOfMass().Z()), WithinAbs(5.0, 1e-4)); +} + +// move_feature() has the same blind spot from the other direction: it swaps two slots and +// rewrites sketch_ref for both, but leaves mate_cs_a / mate_cs_b pointing at the old positions. +TEST_CASE("mate connectors survive reordering of an earlier feature", "[CadDocument][mate]") +{ + CadDocument doc; + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk_box, 5.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + + int sk_cyl = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk_cyl, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Swap the two connectors' slots. The mate's references must follow the features, + // not stay behind on the indices. + REQUIRE(doc.move_feature(cs_fixed, 1)); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + const CadFeature& mate = doc.features.back(); + REQUIRE(mate.type == CadFeatureType::Mate); + REQUIRE(mate.mate_cs_a >= 0); + REQUIRE(mate.mate_cs_b >= 0); + REQUIRE(doc.features[mate.mate_cs_a].name == "CS_Fixed"); + REQUIRE(doc.features[mate.mate_cs_b].name == "CS_Moving"); +} + +TEST_CASE("mate error: no associated body", "[CadDocument][mate]") +{ + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "no associated body"); +} + +TEST_CASE("mate error: disabled connector", "[CadDocument][mate]") +{ + + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.features[cs_moving].enabled = false; + + doc.add_mate(0, cs_fixed, cs_moving, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "not a valid CoordSys"); +} + +TEST_CASE("mate conflicts: a clean assembly reports none", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk_box, 5.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_cyl = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk_cyl, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + + int mi = doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Mate1"); + REQUIRE(mi >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.mate_conflicts.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(5.0, 1e-4)); +} + +TEST_CASE("mate conflicts: two mates driving the same body", "[CadDocument][mate]") +{ + CadDocument doc; + int sk_box = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk_box, 5.0, false, BooleanMode::New, "BoxExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_cyl = doc.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 3, "Cyl"); + doc.add_extrude(sk_cyl, 10.0, false, BooleanMode::New, "CylExt"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + int cs_a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "CS_A"); + doc.features[cs_a].coordsys_body = 0; + int cs_b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "CS_B"); + doc.features[cs_b].coordsys_body = 1; + int cs_c = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(10, 10, 10), "CS_C"); + doc.features[cs_c].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int mate1 = doc.add_mate(0, cs_c, cs_b, 0, 0, false, "Mate1"); + REQUIRE(mate1 >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int mate2 = doc.add_mate(0, cs_a, cs_b, 0, 0, false, "Mate2"); + REQUIRE(mate2 >= 0); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + REQUIRE(doc.mate_conflicts.size() == 1); + REQUIRE(doc.mate_conflicts[0].first == mate2); + REQUIRE(doc.mate_conflicts[0].second.find("Mate1") != std::string::npos); + REQUIRE(doc.mate_conflicts[0].second.find("Mate2") != std::string::npos); +} + +TEST_CASE("mate conflicts: a circular mate chain", "[CadDocument][mate]") +{ + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "ExtA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "ExtB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + int cs_a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_A"); + doc.features[cs_a].coordsys_body = 0; + int cs_b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_B"); + doc.features[cs_b].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_c = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 10), "CS_C"); + doc.features[cs_c].coordsys_body = 0; + int cs_d = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 10), "CS_D"); + doc.features[cs_d].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int mate1 = doc.add_mate(0, cs_a, cs_b, 0, 0, false, "MateAB"); + REQUIRE(mate1 >= 0); + REQUIRE(doc.recompute()); + + int mate2 = doc.add_mate(0, cs_d, cs_c, 0, 0, false, "MateBA"); + REQUIRE(mate2 >= 0); + REQUIRE(doc.recompute()); + + REQUIRE(doc.error.empty()); + REQUIRE(doc.mate_conflicts.size() >= 1); + bool found_cycle = false; + for (const auto& c : doc.mate_conflicts) { + if (c.second.find("circular") != std::string::npos) { + found_cycle = true; + break; + } + } + REQUIRE(found_cycle); +} + +TEST_CASE("mate conflicts: a broken mate is left to apply_mate", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "Box"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "E"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS"); + doc.features[cs].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, 999, cs, 0, 0, false, "Bad"); + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "mate_cs_a out of range"); + REQUIRE(doc.mate_conflicts.empty()); +} + +TEST_CASE("ordering: fillet after mate resolves face ids", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Mate"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_fillet(1.0, FaceGroup::All, "FilletAfterMate"); + doc.features.back().target_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); +} + +// --- M8a fix round: planar antiparallel + blind tests --- + +static int find_face_by_normal(const CadDocument& doc, int body_idx, const Vec3d& dir, double tol = 0.99) +{ + auto faces = GeometryEngine::faces_of(doc.bodies[body_idx].shape); + for (int fi = 0; fi < int(faces.size()); ++fi) { + if (GeometryEngine::face_normal_world(faces[fi]).dot(dir) > tol) return fi; + } + return -1; +} + +// Global edge index of the first edge belonging to `face_idx`. +// +// A CoordSys built from a face alone takes its z from the face normal (which follows the +// body) but its x from coordsys_x_hint, a WORLD constant. Such a frame is only half +// body-following: the body's rotation about the face normal is invisible to it, so no mate +// can correct or preserve a spin the connector cannot see. Pinning coordsys_edge to an edge +// of the body makes the in-plane direction follow the body too, which is what any test +// distinguishing Slider (corrects spin) from Cylindrical (preserves it) requires. +static int find_edge_on_face(const CadDocument& doc, int body_idx, int face_idx) +{ + TopoDS_Face f = GeometryEngine::face_by_index(doc.bodies[body_idx].shape, face_idx); + if (f.IsNull()) return -1; + auto face_edges = GeometryEngine::edges_of_face(f); + auto all_edges = GeometryEngine::edges_of(doc.bodies[body_idx].shape); + for (int ei = 0; ei < int(all_edges.size()); ++ei) { + for (const auto& fe : face_edges) { + if (all_edges[ei].IsSame(fe)) return ei; + } + } + return -1; +} + +TEST_CASE("planar mate: antiparallel normals with asymmetric body", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box 20x20x5, centered at origin in XY + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body B: box 20x10x5, also centered at origin (asymmetric in Y) + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + // Face on A with normal +X, face on B with normal -X + int faceA = find_face_by_normal(doc, 0, Vec3d(1, 0, 0)); + REQUIRE(faceA >= 0); + int faceB = find_face_by_normal(doc, 1, Vec3d(-1, 0, 0)); + REQUIRE(faceB >= 0); + + // Verify z_A != z_B (they point opposite) + Vec3d nA_pre = GeometryEngine::face_normal_world( + GeometryEngine::face_by_index(doc.bodies[0].shape, faceA)); + Vec3d nB_pre = GeometryEngine::face_normal_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)); + REQUIRE(nA_pre.dot(nB_pre) < -0.9); // antiparallel + + int cs_fixed = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + doc.features[cs_fixed].coordsys_face = faceA; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_moving = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + doc.features[cs_moving].coordsys_face = faceB; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Planar mate: z_A=+X, z_B=-X antiparallel. offset=0. + // With fix: 180° flip, then translated so z-distance=0. + // Without fix: no rotation, only translation — body X-centroid moves differently. + doc.add_mate(1, cs_fixed, cs_moving, 0.0, 0.0, false, "PlanarAnti"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // With the fix: 180° rotation about faceB centroid, then translation. + // Body B's X-extents are mirrored. After rotation, centroid X = 2*o_B.x - pre_cx = -20, + // then translated by offset ≈ 20mm → centroid returns near 0. + // Without the fix: no rotation, body just translates ~+20mm → centroid X ≈ 20. + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + double post_cx = post_props.CentreOfMass().X(); + REQUIRE_THAT(std::abs(post_cx), WithinAbs(0.0, 1e-4)); +} + +TEST_CASE("planar mate: in-plane pose preserved", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 10.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + gp_Pnt pre_com = pre_props.CentreOfMass(); + + // Both connectors use PointWorld (z=(0,0,1)). B's connector offset in X/Y from A's. + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(10, 10, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(7, 4, 10), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(1, cs_fixed, cs_moving, 0.0, 0.0, false, "PlanarSameZ"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt post_com = post_props.CentreOfMass(); + + // In-plane (X,Y) components unchanged, only Z moves. + REQUIRE_THAT(double(post_com.X()), WithinAbs(double(pre_com.X()), 1e-4)); + REQUIRE_THAT(double(post_com.Y()), WithinAbs(double(pre_com.Y()), 1e-4)); + REQUIRE_THAT(double(post_com.Z()), !WithinAbs(double(pre_com.Z()), 1e-4)); +} + +TEST_CASE("mate with FaceAndDirection connectors on non-Z faces", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box 20x20x10 + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Face on A with normal +Y + int faceA = find_face_by_normal(doc, 0, Vec3d(0, 1, 0)); + REQUIRE(faceA >= 0); + + int cs_fixed = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + doc.features[cs_fixed].coordsys_face = faceA; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body B: box placed at a different location + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Face on B with normal +Y + int faceB = find_face_by_normal(doc, 1, Vec3d(0, 1, 0)); + REQUIRE(faceB >= 0); + + int cs_moving = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + doc.features[cs_moving].coordsys_face = faceB; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Fastened mate: B's +Y face lands on A's +Y face, offset=0. + // Both normals are +Y so z_A = z_B = (0,1,0) — genuine rotation from frame composition. + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "MateY"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // After fastened mate, the two mated faces should be coincident: + // same centroid position along the normal (Y), and same centroid in X and Z + // (within face dimensions since they're different sizes). + Vec3d ca = GeometryEngine::face_centroid_world(GeometryEngine::face_by_index(doc.bodies[0].shape, faceA)); + Vec3d cb = GeometryEngine::face_centroid_world(GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)); + REQUIRE_THAT(cb.x(), WithinAbs(ca.x(), 1e-4)); + REQUIRE_THAT(cb.y(), WithinAbs(ca.y(), 1e-4)); + REQUIRE_THAT(cb.z(), WithinAbs(ca.z(), 1e-4)); +} + +TEST_CASE("fastened mate with flip on asymmetric body", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body B: tapered extrude (asymmetric, centroid not at geometric centre) + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + int ex_b = doc.add_extrude(sk_b, 8.0, false, BooleanMode::New, "EB"); + doc.features[ex_b].taper_deg = 8.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // PointWorld connectors at distinct positions. + // A's connector on the top face centre, B's connector at a corner. + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(10, 10, 10), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(2, 3, 0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Fastened, NO flip + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "MateNoFlip"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + GProp_GProps nf_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, nf_props); + double nf_z = nf_props.CentreOfMass().Z(); + + doc.undo(); + + // Fastened, WITH flip + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, true, "MateFlip"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + GProp_GProps f_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, f_props); + double f_z = f_props.CentreOfMass().Z(); + + // Flip changes the centroid Z for an asymmetric body + REQUIRE_THAT(f_z, !WithinAbs(nf_z, 1e-4)); +} + +// --- M8b: Revolute / Slider / Cylindrical mates --- + +TEST_CASE("revolute mate: position corrected, rotation about axis preserved", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: reference box + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body B: asymmetric box 20x10x5 + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.size() == 2); + + // Pre-rotate B 30deg about Z, translate off-axis to (15, 2, 7) + doc.add_transform(1, Vec3d(15, 2, 7), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Record rotation: body B has a face that was originally +X, now at 30deg + auto faces_pre = GeometryEngine::faces_of(doc.bodies[1].shape); + REQUIRE(faces_pre.size() == 6); + Vec3d pre_x_face_normal; + bool found = false; + for (const auto& f : faces_pre) { + Vec3d n = GeometryEngine::face_normal_world(f); + // The face that was originally +X now points ~(cos30, sin30, 0) + if (std::abs(n.x() - 0.866) < 0.02 && std::abs(n.y() - 0.5) < 0.02) { + pre_x_face_normal = n; found = true; break; + } + } + REQUIRE(found); + + // Fixed connector on A at (5,5,5), world axes + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + // Moving connector on B: PointWorld at its current (transformed) centroid + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(15, 2, 7), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(2, cs_fixed, cs_moving, 0.0, 0.0, false, "Revolute"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position corrected: body centroid moves to the axis line. + // Connector B (15,2,7) → (5,5,5); body centroid (15,2,9.5) → (5,5,7.5). + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(7.5, 1e-4)); + + // Rotation about Z preserved: the ~(0.866, 0.5, 0) face normal still exists + auto faces_post = GeometryEngine::faces_of(doc.bodies[1].shape); + REQUIRE(faces_post.size() == 6); + bool rot_preserved = false; + for (const auto& f : faces_post) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.x() - 0.866) < 0.02 && std::abs(n.y() - 0.5) < 0.02) { + rot_preserved = true; break; + } + } + REQUIRE(rot_preserved); + // Fastened would have aligned face normals to world axes: no face with Y≈0.5 would exist. +} + +TEST_CASE("revolute mate: no-op when already correct", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Move body B to exactly the correct pose: on axis at (5,5,5) with no rotation + doc.add_transform(1, Vec3d(5, 5, 5), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + gp_Pnt pre_com = pre_props.CentreOfMass(); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(2, cs_fixed, cs_moving, 0.0, 0.0, false, "RevoluteNoOp"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt post_com = post_props.CentreOfMass(); + REQUIRE_THAT(double(post_com.X()), WithinAbs(double(pre_com.X()), 1e-4)); + REQUIRE_THAT(double(post_com.Y()), WithinAbs(double(pre_com.Y()), 1e-4)); + REQUIRE_THAT(double(post_com.Z()), WithinAbs(double(pre_com.Z()), 1e-4)); +} + +TEST_CASE("revolute mate: mate_angle applies additional rotation", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body B: asymmetric box, pre-rotated 30deg about Z, off-axis + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_transform(1, Vec3d(15, 2, 7), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(15, 2, 7), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // mate_angle=45deg on top of preserved 30deg → face originally +X now at 75deg + doc.add_mate(2, cs_fixed, cs_moving, 0.0, 45.0, false, "RevoluteAngle"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position on axis line (same as revolute preservation test) + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(7.5, 1e-4)); + + // Rotation = 30deg (preserved) + 45deg (mate_angle) = 75deg → normal ≈ (cos75, sin75, 0) + auto faces = GeometryEngine::faces_of(doc.bodies[1].shape); + bool found_75 = false; + for (const auto& f : faces) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.x() - 0.2588) < 0.02 && std::abs(n.y() - 0.9659) < 0.02) { + found_75 = true; break; + } + } + REQUIRE(found_75); +} + +TEST_CASE("slider mate: rotation corrected, axial position preserved", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Pre-rotate B 30deg about Z, translate off-axis to (15, 2, 13) + doc.add_transform(1, Vec3d(15, 2, 13), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + double pre_z = pre_props.CentreOfMass().Z(); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(15, 2, 13), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(3, cs_fixed, cs_moving, 0.0, 0.0, false, "Slider"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Perpendicular position corrected to the axis line (X=5, Y=5) + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt post_com = post_props.CentreOfMass(); + REQUIRE_THAT(double(post_com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(post_com.Y()), WithinAbs(5.0, 1e-4)); + + // Axial (Z) position preserved from pre-mate pose + REQUIRE_THAT(double(post_com.Z()), WithinAbs(pre_z, 1e-4)); + // Fastened would have placed the body at Z=5. pre_z=15.5 (centroid), clearly different. +} + +TEST_CASE("slider mate: mate_offset shifts axial position", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_transform(1, Vec3d(12, 3, 9), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(12, 3, 9), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Slider with mate_offset=4: body centroid at (12,3,11.5), connector at (12,3,9). + // Perpendicular corrected: X=5,Y=5. Axial: preserved Z 11.5 + offset 4 = 15.5. + doc.add_mate(3, cs_fixed, cs_moving, 4.0, 0.0, false, "SliderOffset"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(15.5, 1e-3)); +} + +TEST_CASE("slider mate: no-op when already correct", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body already on axis at (5,5,20), no rotation + doc.add_transform(1, Vec3d(5, 5, 20), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + gp_Pnt pre_com = pre_props.CentreOfMass(); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 20), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(3, cs_fixed, cs_moving, 0.0, 0.0, false, "SliderNoOp"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt post_com = post_props.CentreOfMass(); + REQUIRE_THAT(double(post_com.X()), WithinAbs(double(pre_com.X()), 1e-4)); + REQUIRE_THAT(double(post_com.Y()), WithinAbs(double(pre_com.Y()), 1e-4)); + REQUIRE_THAT(double(post_com.Z()), WithinAbs(double(pre_com.Z()), 1e-4)); +} + +TEST_CASE("cylindrical mate: perpendicular corrected, rotation and axial preserved", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Pre-rotate B 30deg about Z, translate off-axis to (15, 2, 13) + doc.add_transform(1, Vec3d(15, 2, 13), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + double pre_z = pre_props.CentreOfMass().Z(); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(15, 2, 13), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(4, cs_fixed, cs_moving, 0.0, 0.0, false, "Cylindrical"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Perpendicular position corrected to axis line + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt com = post_props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + + // Axial Z position preserved from pre-mate + REQUIRE_THAT(double(com.Z()), WithinAbs(pre_z, 1e-4)); + + // Rotation about Z preserved: face originally +X is still at 30deg + auto faces = GeometryEngine::faces_of(doc.bodies[1].shape); + REQUIRE(faces.size() == 6); + bool rot_preserved = false; + for (const auto& f : faces) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.x() - 0.866) < 0.02 && std::abs(n.y() - 0.5) < 0.02) { + rot_preserved = true; break; + } + } + REQUIRE(rot_preserved); + // Fastened would have aligned face normals to world axes and fixed Z. +} + +TEST_CASE("cylindrical mate: mate_offset and mate_angle applied on top", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_transform(1, Vec3d(15, 2, 9), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(15, 2, 9), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(4, cs_fixed, cs_moving, 3.0, 45.0, false, "CylOffsetAngle"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position: perpendicular corrected, axial = 11.5 (centroid preserved) + 3 (offset) = 14.5 + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(5.0, 1e-4)); + REQUIRE_THAT(double(com.Z()), WithinAbs(14.5, 1e-3)); + + // Rotation = 30deg (preserved) + 45deg (angle) = 75deg + auto faces = GeometryEngine::faces_of(doc.bodies[1].shape); + bool found_75 = false; + for (const auto& f : faces) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.x() - 0.2588) < 0.02 && std::abs(n.y() - 0.9659) < 0.02) { + found_75 = true; break; + } + } + REQUIRE(found_75); +} + +TEST_CASE("cylindrical mate: no-op when already correct", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 5.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 10, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Body already on axis at (5,5,20), no rotation + doc.add_transform(1, Vec3d(5, 5, 20), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps pre_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, pre_props); + gp_Pnt pre_com = pre_props.CentreOfMass(); + + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(5, 5, 20), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_mate(4, cs_fixed, cs_moving, 0.0, 0.0, false, "CylNoOp"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + GProp_GProps post_props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, post_props); + gp_Pnt post_com = post_props.CentreOfMass(); + REQUIRE_THAT(double(post_com.X()), WithinAbs(double(pre_com.X()), 1e-4)); + REQUIRE_THAT(double(post_com.Y()), WithinAbs(double(pre_com.Y()), 1e-4)); + REQUIRE_THAT(double(post_com.Z()), WithinAbs(double(pre_com.Z()), 1e-4)); +} + +TEST_CASE("revolute mate with FaceAndDirection on non-Z faces", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box 20x20x10 + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Face on A with normal +Y + int faceA = find_face_by_normal(doc, 0, Vec3d(0, 1, 0)); + REQUIRE(faceA >= 0); + Vec3d nA = GeometryEngine::face_normal_world( + GeometryEngine::face_by_index(doc.bodies[0].shape, faceA)); + + // Body B: asymmetric box 20x10x5, also with +Y face + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int faceB = find_face_by_normal(doc, 1, Vec3d(0, 1, 0)); + REQUIRE(faceB >= 0); + Vec3d nB_pre = GeometryEngine::face_normal_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)); + REQUIRE_THAT(nB_pre.dot(nA), WithinAbs(1.0, 1e-4)); + + // Pre-rotate B about Y (the face normal) by 30deg to give it a non-trivial rotation about its connector z + doc.add_transform(1, Vec3d(0, 0, 0), Vec3d(0, 1, 0), Vec3d(0, 0, 0), 30.0, false, "PrePose"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // FaceAndDirection on A's +Y face + int cs_fixed = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + doc.features[cs_fixed].coordsys_face = faceA; + // FaceAndDirection on B's +Y face + int cs_moving = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0,0,0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + doc.features[cs_moving].coordsys_face = faceB; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Record face normals on B before mate (to verify rotation preservation) + // +30deg rotation about Y maps +Z=(0,0,1) → (0.5, 0, 0.866), -Z → (-0.5, 0, -0.866) + auto faces_pre = GeometryEngine::faces_of(doc.bodies[1].shape); + Vec3d pre_rotated_normal; + { + bool fnd = false; + for (const auto& f : faces_pre) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.z()) > 0.85 && std::abs(n.x()) > 0.45 && std::abs(n.y()) < 0.02) { + pre_rotated_normal = n; fnd = true; break; + } + } + REQUIRE(fnd); + } + + doc.add_mate(2, cs_fixed, cs_moving, 0.0, 0.0, false, "RevoluteFaceDir"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position: faces are coincident (same as fastened position since no offset and axes aligned) + Vec3d ca = GeometryEngine::face_centroid_world(GeometryEngine::face_by_index(doc.bodies[0].shape, faceA)); + Vec3d cb = GeometryEngine::face_centroid_world(GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)); + REQUIRE_THAT(cb.x(), WithinAbs(ca.x(), 1e-4)); + REQUIRE_THAT(cb.y(), WithinAbs(ca.y(), 1e-4)); + REQUIRE_THAT(cb.z(), WithinAbs(ca.z(), 1e-4)); + + // Rotation about the connector z (which is +Y) is preserved: + // the face with |z| ≈ 0.866, |x| ≈ 0.5, y ≈ 0 must still exist. + auto faces_post = GeometryEngine::faces_of(doc.bodies[1].shape); + bool rot_preserved = false; + for (const auto& f : faces_post) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.z()) > 0.85 && std::abs(n.x()) > 0.45 && std::abs(n.y()) < 0.02) { + rot_preserved = true; break; + } + } + REQUIRE(rot_preserved); + // Fastened would force all axes to align: no face with Z≈0.87 would exist. +} + +// --- M8b: rotation-coverage hole — FaceAndDirection captures body orientation --- + +TEST_CASE("slider mate with FaceAndDirection corrects rotation", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box 20x20x10 + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int faceA = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + REQUIRE(faceA >= 0); + + // Body B: asymmetric box 20x10x5 + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int faceB = find_face_by_normal(doc, 1, Vec3d(0, 0, 1)); + REQUIRE(faceB >= 0); + + // Pre-rotate B: first 20deg about X (tilts +Z face normal off-axis, so the + // connector z genuinely differs from A's), then 30deg about Z (adds rotation + // about the mate axis that Slider must correct and Cylindrical must preserve). + doc.add_transform(1, Vec3d(14, 3, 7), Vec3d(1, 0, 0), Vec3d(0, 0, 0), 20.0, false, "RotX"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_transform(1, Vec3d(0, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "RotZ"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Both connectors pin their in-plane direction to an edge of their own body, so each + // frame follows its body's spin. Without this the frames' x comes from the world hint + // and the 30deg spin is invisible to the mate — see find_edge_on_face. + int edgeA = find_edge_on_face(doc, 0, faceA); + int edgeB = find_edge_on_face(doc, 1, faceB); + REQUIRE(edgeA >= 0); + REQUIRE(edgeB >= 0); + + int cs_fixed = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + doc.features[cs_fixed].coordsys_face = faceA; + doc.features[cs_fixed].coordsys_edge = edgeA; + + int cs_moving = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + doc.features[cs_moving].coordsys_face = faceB; + doc.features[cs_moving].coordsys_edge = edgeB; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Record the pre-mate axial position of the CONNECTOR, not of the centroid. Slider + // rotates the body about the connector origin to correct the 20deg tilt, and that + // rotation legitimately moves the centroid in Z (by -d*(1-cos20) for a centroid d + // below the mated face) while leaving the connector itself where it is. The DOF + // Slider preserves is the connector's position along the axis. + const double pre_conn_z = GeometryEngine::face_centroid_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)).z(); + + doc.add_mate(3, cs_fixed, cs_moving, 0.0, 0.0, false, "SliderFaceDir"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position: perpendicular corrected to axis line through A's +Z face centroid. + // The +Z face of a 20x20x10 box centred at origin has centroid at (0, 0, 10). + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(0.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(0.0, 1e-4)); + // Axial position of the connector preserved — Slider does not own that DOF. + const double post_conn_z = GeometryEngine::face_centroid_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)).z(); + REQUIRE_THAT(post_conn_z, WithinAbs(pre_conn_z, 1e-4)); + + // Rotation: Slider owns this DOF — all face normals must be axis-aligned. + auto faces = GeometryEngine::faces_of(doc.bodies[1].shape); + REQUIRE(faces.size() == 6); + int axis_aligned = 0; + for (const auto& f : faces) { + Vec3d n = GeometryEngine::face_normal_world(f); + double d = std::max({std::abs(n.x()), std::abs(n.y()), std::abs(n.z())}); + if (d > 0.999) ++axis_aligned; + } + REQUIRE(axis_aligned == 6); + // Dropping rotation correction would leave 30deg Z rotation — at least 2 + // faces would have normals not aligned to any world axis. +} + +TEST_CASE("cylindrical mate with FaceAndDirection preserves rotation", "[CadDocument][mate]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // Body A: box 20x20x10 + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int faceA = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + REQUIRE(faceA >= 0); + + // Body B: asymmetric box 20x10x5 + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 10, 0, "BoxB"); + doc.add_extrude(sk_b, 5.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int faceB = find_face_by_normal(doc, 1, Vec3d(0, 0, 1)); + REQUIRE(faceB >= 0); + + // Same two-step pre-rotation as the slider test. + doc.add_transform(1, Vec3d(14, 3, 7), Vec3d(1, 0, 0), Vec3d(0, 0, 0), 20.0, false, "RotX"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + doc.add_transform(1, Vec3d(0, 0, 0), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 30.0, false, "RotZ"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Edge-pinned frames, as in the Slider case. These matter here for the opposite + // reason: with a world-derived in-plane direction, a Cylindrical that WRONGLY aligned + // the spin would still leave the body's 30deg face at 30deg, and the assertion below + // would pass for the wrong implementation. + int edgeA = find_edge_on_face(doc, 0, faceA); + int edgeB = find_edge_on_face(doc, 1, faceB); + REQUIRE(edgeA >= 0); + REQUIRE(edgeB >= 0); + + int cs_fixed = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + doc.features[cs_fixed].coordsys_face = faceA; + doc.features[cs_fixed].coordsys_edge = edgeA; + + int cs_moving = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + doc.features[cs_moving].coordsys_face = faceB; + doc.features[cs_moving].coordsys_edge = edgeB; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // As in the Slider case, the preserved DOF is the CONNECTOR's position along the + // axis, not the centroid's: aligning the 20deg tilt rotates the body about the + // connector origin, which moves the centroid in Z by design. + const double pre_conn_z_c = GeometryEngine::face_centroid_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)).z(); + + doc.add_mate(4, cs_fixed, cs_moving, 0.0, 0.0, false, "CylFaceDir"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Position: perpendicular corrected to axis line (X=0, Y=0 at +Z face centroid) + GProp_GProps props; + BRepGProp::VolumeProperties(doc.bodies[1].shape, props); + gp_Pnt com = props.CentreOfMass(); + REQUIRE_THAT(double(com.X()), WithinAbs(0.0, 1e-4)); + REQUIRE_THAT(double(com.Y()), WithinAbs(0.0, 1e-4)); + // Axial position of the connector preserved — Cylindrical leaves that DOF free. + const double post_conn_z_c = GeometryEngine::face_centroid_world( + GeometryEngine::face_by_index(doc.bodies[1].shape, faceB)).z(); + REQUIRE_THAT(post_conn_z_c, WithinAbs(pre_conn_z_c, 1e-4)); + + // Rotation about Z (30deg) is preserved: the 20deg X-rotation was undone + // by z-alignment, leaving the 30deg Z-rotation intact. + // The +X face normal should be at ~(cos30, sin30, 0). + auto faces = GeometryEngine::faces_of(doc.bodies[1].shape); + REQUIRE(faces.size() == 6); + bool rot_preserved = false; + for (const auto& f : faces) { + Vec3d n = GeometryEngine::face_normal_world(f); + if (std::abs(n.x() - 0.866) < 0.02 && std::abs(n.y() - 0.5) < 0.02) { + rot_preserved = true; break; + } + } + REQUIRE(rot_preserved); + // If cylindrical behaved like slider, the face would be at (1,0,0) instead. +} + +// --- Interference detection (M8c) --- + +TEST_CASE("interference: overlapping bodies reported with overlap volume", "[CadDocument][interference]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + // A: 20x20x10 box centred on the origin in XY, z in [0,10] + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + // B: 20x20x10 box, same footprint + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxB"); + doc.add_extrude(sk_b, 10.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + + // Lift B by 6mm: the two overlap over 4mm of height => 20*20*4 = 1600 mm^3. + doc.add_transform(1, Vec3d(0, 0, 6), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "LiftB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto hits = doc.check_interference(); + REQUIRE(hits.size() == 1); + REQUIRE(hits[0].body_a == 0); + REQUIRE(hits[0].body_b == 1); + REQUIRE_THAT(hits[0].volume, WithinAbs(1600.0, 1e-3)); +} + +TEST_CASE("interference: disjoint and merely touching bodies are not reported", "[CadDocument][interference]") +{ + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxB"); + doc.add_extrude(sk_b, 10.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + + SECTION("clearly apart") { + doc.add_transform(1, Vec3d(0, 0, 50), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "MoveB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.check_interference().empty()); + } + + SECTION("face-to-face contact encloses no volume") { + // B sits exactly on top of A: they share a face but nothing overlaps. + doc.add_transform(1, Vec3d(0, 0, 10), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "StackB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.check_interference().empty()); + } +} + +TEST_CASE("interference: sheet bodies are skipped", "[CadDocument][interference]") +{ + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + // A sheet passing straight through the solid: it has no volume, so no interference. + int sk_s = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 40, 40, 0, "Sheet"); + doc.add_surface_extrude(sk_s, 5.0, "SE"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 2); + REQUIRE(CadDocument::is_sheet_shape(doc.bodies[1].shape)); + + REQUIRE(doc.check_interference().empty()); +} + +TEST_CASE("interference: reports every overlapping pair", "[CadDocument][interference]") +{ + CadDocument doc; + for (int i = 0; i < 3; ++i) { + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "E"); + } + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 3); + + // 0 and 1 stay coincident (overlapping); 2 is moved clear of both. + doc.add_transform(2, Vec3d(0, 0, 100), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "MoveC"); + REQUIRE(doc.recompute()); + + auto hits = doc.check_interference(); + REQUIRE(hits.size() == 1); + REQUIRE(hits[0].body_a == 0); + REQUIRE(hits[0].body_b == 1); + + // min_volume gates the report: a threshold above the overlap silences it. + REQUIRE(doc.check_interference(1e9).empty()); +} + +TEST_CASE("interference: detects a clash created by a mate", "[CadDocument][interference]") +{ + CadDocument doc; + int sk_a = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxA"); + doc.add_extrude(sk_a, 10.0, false, BooleanMode::New, "EA"); + int sk_b = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "BoxB"); + doc.add_extrude(sk_b, 10.0, false, BooleanMode::New, "EB"); + REQUIRE(doc.recompute()); + + // Park B well clear, so the clash below is created by the mate and nothing else. + doc.add_transform(1, Vec3d(0, 0, 80), Vec3d(0, 0, 1), Vec3d(0, 0, 0), 0.0, false, "ParkB"); + REQUIRE(doc.recompute()); + REQUIRE(doc.check_interference().empty()); + + // Fastened mate onto a connector inside A's volume drives B into A. + int cs_fixed = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 5), "CS_Fixed"); + doc.features[cs_fixed].coordsys_body = 0; + int cs_moving = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 85), "CS_Moving"); + doc.features[cs_moving].coordsys_body = 1; + REQUIRE(doc.recompute()); + + doc.add_mate(0, cs_fixed, cs_moving, 0.0, 0.0, false, "Clash"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + auto hits = doc.check_interference(); + REQUIRE(hits.size() == 1); + REQUIRE(hits[0].volume > 1.0); +} + +// A filleted solid must reach the plate as a watertight mesh. OCCT emits one degenerate +// triangle at the pole of every corner sphere patch; welded, its v->v edge counts as an open +// edge and the slicer tells the user to go repair the model in another CAD application -- +// the exact round trip this feature exists to remove. agw. +TEST_CASE("CadDocument filleted solid tessellates watertight", "[CadDocument]") +{ + CadDocument doc; + SketchProfile sp; + sp.points.push_back(Vec2d( 0, 0)); + sp.points.push_back(Vec2d( 80, 0)); + sp.points.push_back(Vec2d( 80, 50)); + sp.points.push_back(Vec2d( 0, 50)); + sp.closed = true; + const int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "P"); + doc.add_extrude(sk, 12.0, false, BooleanMode::New, "E"); + doc.add_fillet(3.0, FaceGroup::All, "F"); + REQUIRE(doc.recompute()); + + CHECK(doc.display_mesh.stats().open_edges == 0); + CHECK(its_num_open_edges(doc.display_mesh.its) == 0); + // No degenerate triangles survive the weld, and the per-triangle face map stays aligned. + size_t degenerate = 0; + for (const auto& t : doc.display_mesh.its.indices) + if (t[0] == t[1] || t[1] == t[2] || t[0] == t[2]) ++degenerate; + REQUIRE(degenerate == 0); + REQUIRE(doc.display_tri_face.size() == doc.display_mesh.its.indices.size()); + REQUIRE(doc.display_tri_body.size() == doc.display_mesh.its.indices.size()); +} + +// A rejected solve must leave the sketch untouched. libslvs writes its last Newton iterate +// into the params whether or not it converged, so reading geometry back unconditionally made +// every failed attempt destructive -- and the fillet degrade ladder tries a deliberately +// over-constrained rung FIRST, so a filleted corner was wrecked before the rung that works +// ever got a chance. pl5. +TEST_CASE("Failed sketch solve leaves geometry untouched", "[CadDocument]") +{ + using R = SketchPointRole; + using CT = SketchConstraintType; + auto line = [](Vec2d p0, Vec2d p1) { + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = p0; e.p1 = p1; return e; }; + auto coinc = [](int ea, R ra, int eb, R rb) { + SketchEntityConstraintDef d; d.type = CT::Coincident; d.ea = ea; d.ra = ra; d.eb = eb; d.rb = rb; return d; }; + auto axis = [](CT t, int e) { + SketchEntityConstraintDef d; d.type = t; d.ea = e; d.ra = R::P0; d.eb = e; d.rb = R::P1; return d; }; + + // Axis-aligned rectangle, drawn as four lines with the constraints the sketch tool + // infers: a Coincident at each corner and H/V per leg. + std::vector ents = { + line(Vec2d(-89.32, 72.05), Vec2d( 52.00, 72.05)), // 0 top (H) + line(Vec2d( 52.00, 72.05), Vec2d( 52.00, -68.97)), // 1 right (V) + line(Vec2d( 52.00, -68.97), Vec2d(-89.32, -68.97)), // 2 bottom (H) + line(Vec2d(-89.32, -68.97), Vec2d(-89.32, 72.05)), // 3 left (V) + }; + std::vector cs = { + coinc(0, R::P1, 1, R::P0), coinc(0, R::P0, 3, R::P1), + coinc(1, R::P1, 2, R::P0), coinc(2, R::P1, 3, R::P0), + axis(CT::Horizontal, 0), axis(CT::Vertical, 1), + axis(CT::Horizontal, 2), axis(CT::Vertical, 3), + }; + REQUIRE(solve_sketch_entities(ents, cs)); + + // Fillet the top-left corner: trim both legs, drop the stale corner Coincident. + const int a = 0, b = 3; + SketchEntity a_out, b_out, arc; + REQUIRE(SketchEngine::fillet_lines(ents[a], ents[b], 28.205, a_out, b_out, arc)); + ents[a] = a_out; ents[b] = b_out; + const int xi = int(ents.size()); + ents.push_back(arc); + cs.erase(std::remove_if(cs.begin(), cs.end(), [&](const SketchEntityConstraintDef& d) { + return d.type == CT::Coincident && d.ea == a && d.ra == R::P0 && d.eb == b && d.rb == R::P1; + }), cs.end()); + const std::vector trimmed = ents; + + auto coin = [&](R xr, int ln, R lr) { return coinc(xi, xr, ln, lr); }; + auto tang = [&](int ln) { + SketchEntityConstraintDef d; d.type = CT::Tangent; d.ea = xi; d.eb = ln; return d; }; + + // Rung 1 of the ladder: a tangent on each leg. Over-constrained against the legs' + // own H/V, so it must be rejected -- and must not move a single point. + { + std::vector pc = cs; + for (const auto& c : { coin(R::P0, a, R::P0), coin(R::P1, b, R::P1), tang(a), tang(b) }) + pc.push_back(c); + std::vector e = ents; + REQUIRE_FALSE(solve_sketch_entities(e, pc)); + for (size_t i = 0; i < e.size(); ++i) { + CHECK((e[i].p0 - trimmed[i].p0).norm() == Approx(0.0).margin(1e-9)); + CHECK((e[i].p1 - trimmed[i].p1).norm() == Approx(0.0).margin(1e-9)); + CHECK((e[i].center - trimmed[i].center).norm() == Approx(0.0).margin(1e-9)); + } + } + + // Rung 2 (one tangent) solves, and the arc keeps the radius the fillet gave it. + { + std::vector pc = cs; + for (const auto& c : { coin(R::P0, a, R::P0), coin(R::P1, b, R::P1), tang(a) }) + pc.push_back(c); + REQUIRE(solve_sketch_entities(ents, pc)); + CHECK(ents[xi].radius == Approx(28.205).margin(1e-6)); + // Corner stays open: the legs end on the arc, they do not meet each other. + CHECK((ents[a].p0 - ents[b].p1).norm() > 1.0); + CHECK((ents[a].p0 - ents[xi].p0).norm() == Approx(0.0).margin(1e-6)); + CHECK((ents[b].p1 - ents[xi].p1).norm() == Approx(0.0).margin(1e-6)); + } +} + +// A subtraction whose tool misses the target is a perfectly legal boolean that removes nothing, +// so OCCT reports success and the feature lands in the recipe with ok:true and an unchanged body. +// That is how a hole placed with world coordinates instead of plane-frame ones read as "drilled" +// three times in a row while the volume never moved. daf. +TEST_CASE("A cut that removes no material is an error, not a silent success", "[CadDocument]") +{ + // 20 x 20 box, 20 tall, centred on the origin of the XY plane. + auto box = [] { + CadDocument d; + int sk = d.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + d.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude"); + return d; + }; + + SECTION("hole placed clear of the body is rejected") { + CadDocument doc = box(); + REQUIRE(doc.recompute()); + const double solid = doc.body_mass_properties(0).volume; + + // 135 mm away — exactly the failure the issue reported (world centre passed for a + // plane-frame coordinate). The old behaviour: recompute() true, volume unchanged. + doc.add_hole(8.0, 20.0, true, 135.0, 0.0, SketchPlane::XY(), "Hole"); + CHECK_FALSE(doc.recompute()); + CHECK(doc.error.find("removed no material") != std::string::npos); + + // And the body is left as it was, not half-applied. + CadDocument again = box(); + REQUIRE(again.recompute()); + CHECK_THAT(again.body_mass_properties(0).volume, + Catch::Matchers::WithinAbs(solid, 1e-6)); + } + + SECTION("the same hole on the body still works") { + CadDocument doc = box(); + REQUIRE(doc.recompute()); + const double solid = doc.body_mass_properties(0).volume; + doc.add_hole(8.0, 20.0, true, 0.0, 0.0, SketchPlane::XY(), "Hole"); + REQUIRE(doc.recompute()); + CHECK_THAT(doc.body_mass_properties(0).volume, + Catch::Matchers::WithinRel(solid - M_PI * 16.0 * 20.0, 0.01)); + } + + SECTION("a cut-mode extrude that misses is rejected too") { + CadDocument doc = box(); + REQUIRE(doc.recompute()); + // Same trick, on the sketch plane's origin: the profile sits far outside the box, + // so the subtraction is a legal no-op. + SketchPlane far_plane = SketchPlane::XY(); + far_plane.origin = Vec3d(200.0, 0.0, 0.0); + int sk = doc.add_sketch(SketchShape::Rectangle, far_plane, 5, 5, 10, "Tool"); + doc.add_extrude(sk, 30.0, false, BooleanMode::Cut, "Cut"); + CHECK_FALSE(doc.recompute()); + CHECK(doc.error.find("removed no material") != std::string::npos); + } +} + +// entities_to_wire handles exactly two shapes: one lone closed entity, or a chain of open ones. +// Anything else returns a null wire, and build_sketch_wire used to answer that by falling through +// to its legacy tail — which ends in a rectangle built from width/height. For an entity sketch +// those are whatever they were initialised to, so the extrude produced a box nobody drew. +// 88v. +TEST_CASE("An entity sketch that forms no wire fails instead of extruding a default box", "[CadDocument]") +{ + auto circle = [](Vec2d c, double r) { + SketchEntity e; e.type = SketchEntity::Type::Circle; e.center = c; e.p0 = c; e.radius = r; + return e; + }; + auto line = [](Vec2d a, Vec2d b) { + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = a; e.p1 = b; + return e; + }; + + SECTION("a lone circle still works — the supported case is untouched") { + CadDocument doc; + int sk = doc.add_sketch_entities({ circle({0, 0}, 10.0) }, SketchPlane::XY(), "Sketch"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + CHECK_THAT(doc.body_mass_properties(0).volume, + Catch::Matchers::WithinRel(M_PI * 100.0 * 5.0, 0.01)); + } + + // Behaviour CHANGED 2026-09-02 by Tommaso's decision. This used to require a refusal, + // because back then ignoring the stray meant falling through to a default rectangle — a + // box the user never drew. That fallback is gone: the closed profile is now built and the + // stray open chain is discarded, exactly as the viewport's region_loops already discards + // open chains when it decides what is extrudable. A stray click must not break a model + // that looks perfect on screen. + SECTION("circle + stray line builds the circle and ignores the stray") { + CadDocument doc; + int sk = doc.add_sketch_entities({ circle({0, 0}, 10.0), line({40, 40}, {60, 40}) }, + SketchPlane::XY(), "Sketch"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + CHECK(doc.error.empty()); + CHECK_THAT(doc.body_mass_properties(0).volume, + Catch::Matchers::WithinRel(M_PI * 100.0 * 5.0, 0.01)); + } + + SECTION("two disjoint circles are rejected too") { + CadDocument doc; + int sk = doc.add_sketch_entities({ circle({-20, 0}, 8.0), circle({20, 0}, 8.0) }, + SketchPlane::XY(), "Sketch"); + doc.add_extrude(sk, 5.0, false, BooleanMode::New, "Extrude"); + CHECK_FALSE(doc.recompute()); + CHECK(doc.error.find("disjoint") != std::string::npos); + } +} + +namespace { + +std::vector rect_entities(double w, double h) +{ + const double hw = w * 0.5, hh = h * 0.5; + return { + {SketchEntity::Type::Line, Vec2d(-hw, -hh), Vec2d( hw, -hh)}, + {SketchEntity::Type::Line, Vec2d( hw, -hh), Vec2d( hw, hh)}, + {SketchEntity::Type::Line, Vec2d( hw, hh), Vec2d(-hw, hh)}, + {SketchEntity::Type::Line, Vec2d(-hw, hh), Vec2d(-hw, -hh)}, + }; +} + +SketchEntity circle_entity(const Vec2d& c, double r) +{ + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = c; e.p0 = c; e.radius = r; + return e; +} + +CadDocument plate_doc(const std::vector& entities, double distance) +{ + CadDocument doc; + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.name = "sketch"; + sk.plane = SketchPlane::XY(); + sk.entities = entities; + doc.features.push_back(sk); + CadFeature ex; + ex.type = CadFeatureType::Extrude; + ex.name = "extrude"; + ex.sketch_ref = 0; + ex.distance = distance; + ex.mode = BooleanMode::New; + doc.features.push_back(ex); + return doc; +} + +} // namespace + +// 88v: a sketch may hold more than one closed loop. The Extrude path builds the +// sketch's planar region via SketchEngine::entities_to_wires + wires_to_face: the largest loop +// is the outer boundary, every other loop a hole. Volumes are the proof — a plate with a hole +// must subtract the hole, not merely "not throw". +TEST_CASE("a circle inside a rectangle extrudes to a plate with a hole", "[CadDocument][sketchwire]") +{ + std::vector ents = rect_entities(40, 30); + ents.push_back(circle_entity({0, 0}, 5.0)); + CadDocument doc = plate_doc(ents, 10.0); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double expected = 40.0 * 30.0 * 10.0 - M_PI * 25.0 * 10.0; + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(expected, 0.01)); +} + +TEST_CASE("two holes are both subtracted", "[CadDocument][sketchwire]") +{ + std::vector ents = rect_entities(40, 30); + ents.push_back(circle_entity({ 5, 0}, 3.0)); + ents.push_back(circle_entity({-5, 0}, 3.0)); + CadDocument doc = plate_doc(ents, 10.0); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double expected = 40.0 * 30.0 * 10.0 - 2.0 * M_PI * 9.0 * 10.0; + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(expected, 0.01)); +} + +TEST_CASE("a lone circle still extrudes exactly as before", "[CadDocument][sketchwire]") +{ + std::vector ents = { circle_entity({0, 0}, 8.0) }; + CadDocument doc = plate_doc(ents, 5.0); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double expected = M_PI * 64.0 * 5.0; + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(expected, 0.01)); +} + +TEST_CASE("a closed polygon still extrudes exactly as before", "[CadDocument][sketchwire]") +{ + std::vector ents = rect_entities(20, 20); + CadDocument doc = plate_doc(ents, 10.0); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double expected = 20.0 * 20.0 * 10.0; + REQUIRE_THAT(double(doc.display_mesh.volume()), Catch::Matchers::WithinRel(expected, 0.01)); +} + +TEST_CASE("two disjoint regions are refused, not guessed", "[CadDocument][sketchwire]") +{ + std::vector ents = { circle_entity({-10, 0}, 5.0), circle_entity({10, 0}, 5.0) }; + CadDocument doc = plate_doc(ents, 10.0); + + CHECK_FALSE(doc.recompute()); + CHECK(doc.error.find("disjoint") != std::string::npos); + CHECK(doc.bodies.empty()); +} + +TEST_CASE("entities_to_wires returns one wire per loop", "[CadDocument][sketchwire]") +{ + std::vector ents = rect_entities(40, 30); + ents.push_back(circle_entity({0, 0}, 5.0)); + + const std::vector wires = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + REQUIRE(wires.size() == 2); + REQUIRE_FALSE(wires[0].IsNull()); + REQUIRE_FALSE(wires[1].IsNull()); +} + +// Sketching on a picked face is the most common gesture in solid modelling, and it was impossible: +// the plane came from a combo of base + datum planes only, so the sole route onto a face was to +// build a Coincident datum plane first. plane_of_face is the shared derivation that makes the +// viewport selection usable directly. 3a2. +TEST_CASE("plane_of_face gives a sketchable plane for a planar face only", "[CadDocument]") +{ + // 20 x 20 x 20 box on XY, so its top face sits at z = 20 with +Z normal. + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Sketch"); + doc.add_extrude(sk, 20.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + SECTION("every planar face of the box resolves, and its normal is a unit axis") { + int resolved = 0, top = -1; + for (int fi = 0; fi < 64; ++fi) { + SketchPlane p; + if (!doc.plane_of_face(0, fi, p)) continue; + ++resolved; + CHECK_THAT(p.normal.norm(), Catch::Matchers::WithinAbs(1.0, 1e-9)); + // The frame must be orthonormal or sketch coordinates on it would be skewed. + CHECK_THAT(p.x_axis.dot(p.y_axis), Catch::Matchers::WithinAbs(0.0, 1e-9)); + CHECK_THAT(p.x_axis.dot(p.normal), Catch::Matchers::WithinAbs(0.0, 1e-9)); + if (p.normal.z() > 0.99) top = fi; + } + CHECK(resolved == 6); // a box has exactly six planar faces + REQUIRE(top >= 0); // and one of them faces +Z + SketchPlane p; + REQUIRE(doc.plane_of_face(0, top, p)); + CHECK_THAT(p.origin.z(), Catch::Matchers::WithinAbs(20.0, 1e-6)); // the top, not the base + } + + SECTION("bad indices are refused rather than guessed") { + SketchPlane p; + CHECK_FALSE(doc.plane_of_face(0, -1, p)); + CHECK_FALSE(doc.plane_of_face(-1, 0, p)); + CHECK_FALSE(doc.plane_of_face(9, 0, p)); + CHECK_FALSE(doc.plane_of_face(0, 999, p)); + } + + SECTION("a cylindrical face is refused — it has no single sketch plane") { + CadDocument cyl; + int c = cyl.add_sketch(SketchShape::Circle, SketchPlane::XY(), 0, 0, 10.0, "Sketch"); + cyl.add_extrude(c, 20.0, false, BooleanMode::New, "Extrude"); + REQUIRE(cyl.recompute()); + int planar = 0, refused = 0; + for (int fi = 0; fi < 16; ++fi) { + SketchPlane p; + if (cyl.plane_of_face(0, fi, p)) ++planar; else ++refused; + } + CHECK(planar == 2); // the two flat caps, and NOT the barrel + CHECK(refused > 0); + } +} + +// 5425 — POSITIVE-CONTRACT variant. A feature that left a body with a null +// TopoDS_Shape used to be tolerated: recompute() returned true and the document kept +// advertising the body. The new guard makes that a hard failure. This test asserts the +// contract the guard preserves on the healthy side: a normal box + fillet document +// recomputes true, reports an empty error, and NO resulting body has a null shape. +// +// Why not assert the negative branch (a dress-up chain nulling a body -> recompute false)? +// Reproducing the original silent-null degeneracy (prism -> 6 vertical fillets -> chamfer on +// the already-filleted rim -> hole) is a separate open question. Driving that order headlessly +// makes the dress-up step THROW (OCCT "fillet radius too large" — an already-loud, already- +// caught path) rather than silently null a body, so no public-API sequence reliably reaches +// the guard's null branch in a headless test. Faking one (writing a null into `bodies` after +// recompute) would not exercise the guard — it runs on the freshly-built vector — and a test +// that asserts a state the code cannot reach is exactly what the contract forbids. +TEST_CASE("recompute on a healthy box + fillet leaves no body null and no error (positive contract)", "[CadDocument]") +{ + using namespace Slic3r; + CadDocument doc; + SketchProfile sp; + sp.points.push_back(Vec2d(0, 0)); + sp.points.push_back(Vec2d(20, 0)); + sp.points.push_back(Vec2d(20, 20)); + sp.points.push_back(Vec2d(0, 20)); + sp.closed = true; + const int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + doc.add_fillet(2.0, FaceGroup::All, "Fillet"); + + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE_FALSE(doc.bodies.empty()); + for (size_t i = 0; i < doc.bodies.size(); ++i) { + INFO("body " << i << " has a null shape"); + REQUIRE_FALSE(doc.bodies[i].shape.IsNull()); + } +} + +// ============================================================================ +// rgbj — does a chamfer chain degenerate from a KERNEL defect, or from +// how the DRIVER captured its edge ids? Experiment, not a fix. +// +// CadFeature::dressup_edge is a GLOBAL edge id: an ordinal into +// TopExp::MapShapes(body, TopAbs_EDGE) (GeometryEngine::edge_by_index), resolved +// at recompute time against the body AS IT STANDS at that feature's position in +// the recipe. Every dress-up rewrites the edge map, so an id captured against one +// version of the shape names a DIFFERENT edge once an earlier dress-up has run. +// +// Test 1 = correct usage (re-read the map after each chamfer, pick by geometry). +// Test 2 = suspected-wrong usage (capture all four ids up-front, then run four). +// ============================================================================ + +namespace { + +// A square box centred on the origin, extruded +Z by `height`. Its four top-rim +// edges have midpoints at Z=height: (+X)(half,0,h), (+Y)(0,half,h), (-X)(-half,0,h), +// (-Y)(0,-half,h). All four are geometrically identical (equal length), so a +// near-uniform chamfer removes the same volume from each. +CadDocument make_centred_box(double half, double height) +{ + CadDocument doc; + SketchProfile sp; + sp.points = { Vec2d(-half, -half), Vec2d(half, -half), Vec2d(half, half), Vec2d(-half, half) }; + sp.closed = true; + const int sk = doc.add_sketch_profile(sp, SketchPlane::XY(), "Box"); + doc.add_extrude(sk, height, false, BooleanMode::New, "Extrude"); + return doc; +} + +// Exact analytic volume (BRepGProp, not tessellation) of a solid. +double solid_volume(const TopoDS_Shape& s) +{ + GeometryEngine::MassProps p = GeometryEngine::mass_properties(s); + return p.valid ? p.volume : 0.0; +} + +// World-space midpoint of an edge, from its sampled polyline. +Vec3d edge_mid(const TopoDS_Edge& e) +{ + const std::vector pts = GeometryEngine::sample_edge_world(e); + Vec3d m = Vec3d::Zero(); + for (const Vec3d& p : pts) m += p; + return m / double(pts.size()); +} + +// Global edge id whose midpoint is within `tol` mm of `target`. -1 if none. +// Picks by GEOMETRY (position), never by a hardcoded index. +int edge_near(const TopoDS_Shape& shape, const Vec3d& target, double tol) +{ + const std::vector edges = GeometryEngine::edges_of(shape); + for (int i = 0; i < int(edges.size()); ++i) { + if (edges[i].IsNull()) continue; + const std::vector pts = GeometryEngine::sample_edge_world(edges[i]); + if (pts.size() < 2) continue; + if ((edge_mid(edges[i]) - target).norm() < tol) return i; + } + return -1; +} + +} // namespace + +TEST_CASE("dressup: sequential chamfers, ids re-read after each, stay uniform", "[CadDocument][dressup]") +{ + const double half = 10.0, h = 10.0, d = 0.2; // tiny d: the corner-shortening of a + // neighbour's rim edge stays negligible + CadDocument doc = make_centred_box(half, h); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // The four top-rim edges, addressed by world midpoint — never by index. + const std::vector rim = { + Vec3d( half, 0.0, h), // +X + Vec3d(0.0, half, h), // +Y + Vec3d(-half, 0.0, h), // -X + Vec3d(0.0, -half, h), // -Y + }; + + std::vector removals; + double prev = solid_volume(doc.bodies[0].shape); + for (size_t k = 0; k < rim.size(); ++k) { + // Correct usage: re-read the CURRENT body's edge map, pick by geometry. + const int id = edge_near(doc.bodies[0].shape, rim[k], 1.5); + INFO("chamfer " << k << " -> edge id " << id); + REQUIRE(id >= 0); + doc.add_chamfer(d, id, "Chamfer" + std::to_string(k)); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + const double now = solid_volume(doc.bodies[0].shape); + removals.push_back(prev - now); + prev = now; + } + + std::ostringstream os; + for (size_t i = 0; i < removals.size(); ++i) os << (i ? ", " : "") << removals[i]; + INFO("removals (mm^3): [" << os.str() << "]"); + + REQUIRE(removals.size() == 4); + double mn = removals[0], mx = removals[0]; + for (double r : removals) { mn = std::min(mn, r); mx = std::max(mx, r); } + INFO("min=" << mn << " max=" << mx); + REQUIRE(mn > 0.0); + // All four removals equal within a few percent. Measured on this fixture: + // [0.4, 0.397333, 0.397333, 0.394667] mm^3. The residual spread is real geometry (each + // chamfer shortens the two rim edges it shares a corner with), not id drift; drift would + // push the later removals toward zero and blow the spread wide open. + REQUIRE((mx - mn) <= 0.10 * mn); +} + +TEST_CASE("dressup: four chamfer ids captured up-front drift as earlier chamfers run", "[CadDocument][dressup]") +{ + const double half = 10.0, h = 10.0, d = 0.2; + CadDocument doc = make_centred_box(half, h); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + const std::vector rim = { + Vec3d( half, 0.0, h), Vec3d(0.0, half, h), Vec3d(-half, 0.0, h), Vec3d(0.0, -half, h), + }; + + // Capture all four ids ONCE, from the shape as it stands before any chamfer. + std::vector ids; + for (const Vec3d& t : rim) { + const int id = edge_near(doc.bodies[0].shape, t, 1.5); + REQUIRE(id >= 0); + ids.push_back(id); + } + REQUIRE(ids.size() == 4); + INFO("captured ids: [" << ids[0] << "," << ids[1] << "," << ids[2] << "," << ids[3] << "]"); + + // Recompute resolves each dressup_edge against the body as it stands at that feature's + // position — exactly what chaining apply_chamfer reproduces here. Measure each step, and + // record whether a stale id throws (invalid/out-of-range edge) or silently lands elsewhere. + TopoDS_Shape s = doc.bodies[0].shape; + std::vector vols{ solid_volume(s) }; + bool threw = false; + std::string why; + for (int id : ids) { + try { + s = GeometryEngine::apply_chamfer(s, d, id); + vols.push_back(solid_volume(s)); + } catch (const std::exception& e) { threw = true; why = e.what(); break; } + } + + std::vector rmv; + for (size_t i = 1; i < vols.size(); ++i) rmv.push_back(vols[i - 1] - vols[i]); + + std::ostringstream os; + for (size_t i = 0; i < rmv.size(); ++i) os << (i ? ", " : "") << rmv[i]; + INFO("up-front-id removals (mm^3): [" << os.str() << "] threw=" << threw << " (" << why << ")"); + + // Documents a defect, not a desired result. Measured on this fixture: [0.4, 0.008324, + // 0.397333, 0.280405] mm^3 — the second chamfer's stale id landed on a nearly-consumed + // edge and cut ~2% of the intended volume. Ids captured once and replayed against an + // evolving edge map DRIFT; that is the degeneration the socket chamfers showed, and it is + // a driver artefact (wrong usage), not a kernel defect — Test 1 proves the kernel stays + // uniform when ids are re-read. + REQUIRE_FALSE(threw); // currently it does NOT throw: it silently drifts + REQUIRE(rmv.size() == 4); + double mn = rmv[0], mx = rmv[0]; + for (double r : rmv) { mn = std::min(mn, r); mx = std::max(mx, r); } + INFO("up-front-id min=" << mn << " max=" << mx); + REQUIRE(mx > 1.10 * mn); // non-uniform: the id-drift signature + + // The first captured id is still a valid top-rim edge, so the first chamfer must cut. + REQUIRE(vols.size() >= 2); + REQUIRE(vols[1] < vols[0]); + + // Literal driver path: append all four and recompute once. + CadDocument doc2 = make_centred_box(half, h); + REQUIRE(doc2.recompute()); + for (size_t i = 0; i < ids.size(); ++i) + doc2.add_chamfer(d, ids[i], "C" + std::to_string(i)); + const bool ok = doc2.recompute(); + INFO("single-recompute driver path: ok=" << ok << " error=" << (ok ? std::string() : doc2.error)); + REQUIRE(ok); +} + +// --- Face-drift fingerprint: a FaceAndDirection connector warns when its face index slides --- + +TEST_CASE("a connector records its face fingerprint on first recompute", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int top_face = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + REQUIRE(top_face >= 0); + + int cs = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS"); + doc.features[cs].coordsys_body = 0; + doc.features[cs].coordsys_face = top_face; + REQUIRE(doc.recompute()); + + REQUIRE(doc.features[cs].coordsys_face_kind >= 0); + REQUIRE(doc.features[cs].coordsys_face_edges >= 0); + REQUIRE(doc.mate_conflicts.empty()); +} + +TEST_CASE("a connector whose face index slides onto a different KIND of face is reported", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int top_face = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + REQUIRE(top_face >= 0); + + int cs = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS"); + doc.features[cs].coordsys_body = 0; + doc.features[cs].coordsys_face = top_face; + REQUIRE(doc.recompute()); + REQUIRE(doc.mate_conflicts.empty()); + REQUIRE(doc.features[cs].coordsys_face_kind >= 0); + + // Insert a fillet: the box gains cylindrical faces and the face map is renumbered. + doc.add_fillet(2.0, FaceGroup::All, "Fillet"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + // Find the cylindrical face the fillet introduced (a different KIND than the recorded + // planar fingerprint), then force the drift by pointing coordsys_face at it. + int cyl_face = -1; + auto faces = GeometryEngine::faces_of(doc.bodies[0].shape); + for (int i = 0; i < int(faces.size()); ++i) { + if (GeometryEngine::cylinder_of_face(faces[i]).ok) { cyl_face = i; break; } + } + REQUIRE(cyl_face >= 0); + + doc.features[cs].coordsys_face = cyl_face; + const bool ok = doc.recompute(); + REQUIRE(ok); // non-fatality is the contract under test + + bool reported = false; + for (const auto& c : doc.mate_conflicts) + if (c.first == cs) { reported = true; break; } + REQUIRE(reported); +} + +TEST_CASE("a resized body does not report drift", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 10, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int top_face = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + REQUIRE(top_face >= 0); + + int cs = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "CS"); + doc.features[cs].coordsys_body = 0; + doc.features[cs].coordsys_face = top_face; + REQUIRE(doc.recompute()); + REQUIRE(doc.mate_conflicts.empty()); + + // Resize upstream: same face, same kind, same edge count — only its dimensions changed. + // This is a legitimate parametric edit and must not raise the drift warning. + for (CadFeature& f : doc.features) + if (f.type == CadFeatureType::Extrude) f.distance = 25.0; + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.mate_conflicts.empty()); +} + +TEST_CASE("mate_options always returns five entries in kind order", "[CadDocument][mate]") +{ + CadDocument doc; + // Completely invalid pair: the stability contract (always five, always in order) must hold. + auto opts = doc.mate_options(-1, -1); + REQUIRE(opts.size() == 5); + for (int i = 0; i < 5; ++i) REQUIRE(opts[i].kind == i); + + // A valid, distinct pair must return the same shape. + int a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "A"); + int b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(1, 0, 0), "B"); + auto opts2 = doc.mate_options(a, b); + REQUIRE(opts2.size() == 5); + for (int i = 0; i < 5; ++i) REQUIRE(opts2[i].kind == i); +} + +TEST_CASE("a connector with no body dims every mate kind, with a reason", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + // Point(world) connectors belong to no body, which is the default the GUI hands you. + int a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "A"); + int b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(30, 0, 0), "B"); + REQUIRE(doc.features[b].coordsys_body < 0); + + // B is the connector whose body MOVES, so without one no kind can apply. The offer used to + // call all five viable and the mate only failed at recompute, after the feature existed. + auto opts = doc.mate_options(a, b); + REQUIRE(opts.size() == 5); + for (int i = 0; i < 5; ++i) { + REQUIRE(opts[i].kind == i); + REQUIRE_FALSE(opts[i].viable); + REQUIRE(opts[i].reason.find("not attached to a body") != std::string::npos); + } + + // A needs no body — it is the fixed reference. Giving B one is enough to revive the offer. + doc.features[b].coordsys_body = 0; + auto opts2 = doc.mate_options(a, b); + REQUIRE(opts2[0].viable); // Fastened is frame-only + REQUIRE(opts2[0].reason.empty()); + + // A body index that no longer resolves is refused too, and says so differently. + doc.features[b].coordsys_body = 7; + auto opts3 = doc.mate_options(a, b); + for (const auto& o : opts3) { + REQUIRE_FALSE(o.viable); + REQUIRE(o.reason.find("no longer exists") != std::string::npos); + } +} + +TEST_CASE("a flat-face pair offers Fastened, Planar and Slider but not the axial types", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + + int top = find_face_by_normal(doc, 0, Vec3d(0, 0, 1)); + int side = find_face_by_normal(doc, 0, Vec3d(1, 0, 0)); + REQUIRE(top >= 0); + REQUIRE(side >= 0); + + int a = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "A"); + doc.features[a].coordsys_body = 0; + doc.features[a].coordsys_face = top; + int b = doc.add_coordsys(CoordSysType::FaceAndDirection, Vec3d(0, 0, 0), "B"); + doc.features[b].coordsys_body = 0; + doc.features[b].coordsys_face = side; + + // Recompute so the face fingerprints record (both planar => GeomAbs_Plane). + REQUIRE(doc.recompute()); + REQUIRE(doc.features[a].coordsys_face_kind >= 0); + REQUIRE(doc.features[b].coordsys_face_kind >= 0); + + auto opts = doc.mate_options(a, b); + REQUIRE(opts.size() == 5); + REQUIRE(opts[0].viable); // Fastened: frame-only, always viable + REQUIRE(opts[1].viable); // Planar: both faces planar + REQUIRE_FALSE(opts[2].viable); // Revolute: needs a cylindrical face + REQUIRE(opts[3].viable); // Slider: frame-only, always viable + REQUIRE_FALSE(opts[4].viable); // Cylindrical: needs a cylindrical face + + REQUIRE(opts[0].reason.empty()); + REQUIRE(opts[1].reason.empty()); + REQUIRE(opts[3].reason.empty()); + REQUIRE_FALSE(opts[2].reason.empty()); + REQUIRE_FALSE(opts[4].reason.empty()); + REQUIRE_CONTAINS(opts[2].reason, "connector"); + REQUIRE_CONTAINS(opts[4].reason, "connector"); +} + +TEST_CASE("an unrecorded fingerprint does not make a type non-viable", "[CadDocument][mate]") +{ + CadDocument doc; + int sk = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "Box"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + + int a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "A"); + int b = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(1, 0, 0), "B"); + // The MISSING FINGERPRINT is the whole subject here, so nothing else may be missing: B is + // given a body, because a connector without one is refused for that reason instead and the + // case would no longer isolate what this test is named for. + doc.features[a].coordsys_body = 0; + doc.features[b].coordsys_body = 0; + // PointWorld connectors never record a face fingerprint: face_kind stays -1. + REQUIRE(doc.features[a].coordsys_face_kind == -1); + REQUIRE(doc.features[b].coordsys_face_kind == -1); + + auto opts = doc.mate_options(a, b); + REQUIRE(opts.size() == 5); + for (const auto& o : opts) { + REQUIRE(o.viable); + REQUIRE(o.reason.empty()); + } +} + +TEST_CASE("an invalid pair names which side is wrong", "[CadDocument][mate]") +{ + CadDocument doc; + int a = doc.add_coordsys(CoordSysType::PointWorld, Vec3d(0, 0, 0), "A"); + int sketch = doc.add_sketch(SketchShape::Rectangle, SketchPlane::XY(), 20, 20, 0, "S"); + + // cs_b points at a Sketch feature, not a CoordSys: all five non-viable, reason names B. + auto opts = doc.mate_options(a, sketch); + REQUIRE(opts.size() == 5); + for (const auto& o : opts) { + REQUIRE_FALSE(o.viable); + REQUIRE_CONTAINS(o.reason, "connector B"); + REQUIRE(o.reason.find("connector A") == std::string::npos); + } + + // Out of range on B names B; out of range on A names A. + for (const auto& o : doc.mate_options(a, 9999)) + REQUIRE_CONTAINS(o.reason, "connector B"); + for (const auto& o : doc.mate_options(-5, a)) + REQUIRE_CONTAINS(o.reason, "connector A"); +} + +// A rectangular plate 120 x 160 x 10 centred on the origin with a radius-30 bore through +// the middle: one solid whose volume is the box minus the cylinder, and whose topology is a +// plate-with-a-bore (1 solid, 7 faces) rather than a plate plus a plug. +TEST_CASE("add_extrude_entities builds a plate with a bore", "[CadDocument][holes]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + + const Vec2d A(-60, -80), B(60, -80), C(60, 80), D(-60, 80); + std::vector entities = { + {SketchEntity::Type::Line, A, B}, + {SketchEntity::Type::Line, B, C}, + {SketchEntity::Type::Line, C, D}, + {SketchEntity::Type::Line, D, A}, + }; + SketchEntity bore; + bore.type = SketchEntity::Type::Circle; + bore.center = Vec2d(0, 0); + bore.radius = 30.0; + entities.push_back(bore); + + doc.add_extrude_entities(entities, SketchPlane::XY(), 10.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto mp = doc.body_mass_properties(0); + REQUIRE(mp.valid); + const double expected_vol = 120.0 * 160.0 * 10.0 - M_PI * 30.0 * 30.0 * 10.0; + REQUIRE_THAT(mp.volume, WithinAbs(expected_vol, 1.0)); + + // One solid, seven faces: top + bottom (each a planar face with a hole), four side + // walls, and the single cylindrical bore wall. + int face_count = 0, solid_count = 0; + for (TopExp_Explorer fe(doc.bodies.back().shape, TopAbs_FACE); fe.More(); fe.Next()) ++face_count; + for (TopExp_Explorer se(doc.bodies.back().shape, TopAbs_SOLID); se.More(); se.Next()) ++solid_count; + INFO("volume mm^3 = " << mp.volume << ", faces = " << face_count << ", solids = " << solid_count); + REQUIRE(solid_count == 1); + REQUIRE(face_count == 7); +} + +TEST_CASE("two disjoint circles are refused by name", "[CadDocument][holes]") +{ + CadDocument doc; + + SketchEntity a; + a.type = SketchEntity::Type::Circle; a.center = Vec2d(-50, 0); a.radius = 20.0; + SketchEntity b; + b.type = SketchEntity::Type::Circle; b.center = Vec2d( 50, 0); b.radius = 20.0; + + doc.add_extrude_entities({a, b}, SketchPlane::XY(), 10.0, false, BooleanMode::New, "Extrude1"); + + REQUIRE_FALSE(doc.recompute()); + REQUIRE_CONTAINS(doc.error, "disjoint"); +} + +// Same plate-with-a-bore, but the bore circle is wound CLOCKWISE (geometric winding opposite +// the CCW rectangle). The old wires_to_face reversed every hole wire unconditionally +// (wires[i].Reversed()), which only produced a correct hole when the circle was wound the same +// way as the outer loop; a clockwise circle got reversed into matching the outer boundary and +// the prism swept it solid — measured 220274 mm^3 = box (192000) + disc (28274), the filled-bore +// signature. The current ShapeFix_Face::FixOrientation path is winding-independent. Flipping the +// plane normal reverses gp_Circ's parametrisation (gp_Ax2(center, -Z) sweeps clockwise seen from +// +Z) while the rectangle's 2D coordinates stay CCW. +TEST_CASE("add_extrude_entities builds a plate with a bore (clockwise circle)", "[CadDocument][holes]") +{ + using Catch::Matchers::WithinAbs; + + CadDocument doc; + + SketchPlane cw_plane = SketchPlane::XY(); + cw_plane.normal = Vec3d(0, 0, -1); + + const Vec2d A(-60, -80), B(60, -80), C(60, 80), D(-60, 80); + std::vector entities = { + {SketchEntity::Type::Line, A, B}, + {SketchEntity::Type::Line, B, C}, + {SketchEntity::Type::Line, C, D}, + {SketchEntity::Type::Line, D, A}, + }; + SketchEntity bore; + bore.type = SketchEntity::Type::Circle; + bore.center = Vec2d(0, 0); + bore.radius = 30.0; + entities.push_back(bore); + + doc.add_extrude_entities(entities, cw_plane, 10.0, false, BooleanMode::New, "Extrude1"); + REQUIRE(doc.recompute()); + REQUIRE(doc.error.empty()); + REQUIRE(doc.display_mesh.facets_count() > 0); + + auto mp = doc.body_mass_properties(0); + REQUIRE(mp.valid); + const double expected_vol = 120.0 * 160.0 * 10.0 - M_PI * 30.0 * 30.0 * 10.0; + REQUIRE_THAT(mp.volume, WithinAbs(expected_vol, 1.0)); + + int face_count = 0, solid_count = 0; + for (TopExp_Explorer fe(doc.bodies.back().shape, TopAbs_FACE); fe.More(); fe.Next()) ++face_count; + for (TopExp_Explorer se(doc.bodies.back().shape, TopAbs_SOLID); se.More(); se.Next()) ++solid_count; + INFO("volume mm^3 = " << mp.volume << ", faces = " << face_count << ", solids = " << solid_count); + REQUIRE(solid_count == 1); + REQUIRE(face_count == 7); +} + + +// mtav. A document that has only sketches in it is not a broken document, it is the +// state every design passes through between drawing a profile and extruding it. recompute() +// used to call that "no solid-producing features" and return false, and two things downstream +// read that false as "the document is unusable": the GUI syncs the 3MF recipe only after a +// successful recompute, so a sketch-only design was saved with NO recipe at all and vanished on +// reopen; and deserialize_recipe ends with `return recompute()`, so even a project that did +// carry one was refused on load. The failure has to stay for a document that ASKED for a solid +// and got none — that is a real geometry failure — so both halves are asserted here. +TEST_CASE("A sketch-only document recomputes and round-trips", "[CadDocument]") +{ + CadDocument doc; + std::vector ents{ + {SketchEntity::Type::Line, Vec2d(-60, -40), Vec2d(60, -40)}, + {SketchEntity::Type::Line, Vec2d(60, -40), Vec2d(60, 40)}, + {SketchEntity::Type::Line, Vec2d(60, 40), Vec2d(-60, 40)}, + {SketchEntity::Type::Line, Vec2d(-60, 40), Vec2d(-60, -40)}, + }; + const int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "Profile"); + REQUIRE(sk == 0); + + const bool built = doc.recompute(); // nothing to build is not a failure + INFO("recompute error: " << doc.error); + REQUIRE(built); + REQUIRE(doc.error.empty()); + REQUIRE(doc.bodies.empty()); + + const std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.error.empty()); + REQUIRE(fresh.features.size() == 1); + REQUIRE(fresh.features[0].name == "Profile"); + REQUIRE(fresh.features[0].entities.size() == 4); + for (size_t i = 0; i < ents.size(); ++i) { + REQUIRE(fresh.features[0].entities[i].p0.x() == ents[i].p0.x()); + REQUIRE(fresh.features[0].entities[i].p0.y() == ents[i].p0.y()); + REQUIRE(fresh.features[0].entities[i].p1.x() == ents[i].p1.x()); + REQUIRE(fresh.features[0].entities[i].p1.y() == ents[i].p1.y()); + } + + // The other half of the rule: a feature that MEANT to build a solid and produced none is + // still an error, and must not be swallowed by the change above. + CadDocument bad; + bad.add_sketch_entities(ents, SketchPlane::XY(), "Profile"); + bad.add_extrude(0, 0.0, false, BooleanMode::New, "ZeroDepth"); + REQUIRE_FALSE(bad.recompute()); + REQUIRE_FALSE(bad.error.empty()); +} + +// A body is NOT the feature that created it. Reported 2026-08-23, in these words: "you have +// renamed the feature extrusion, not the body ... this means that you consider the extrusion = +// the body, which is very far from truth as a body can contain several extrusions." The rename +// used to resolve CadBody::source_feature and rename THAT, so naming a body edited one operation +// in its history. A body now carries its own name, and this pins the three properties that make +// it a name rather than a label: it does not touch the features, it survives a recompute that +// adds more features to the same body, and it survives the recipe round trip. +TEST_CASE("a body carries its own name, through recompute and the recipe", "[CadDocument]") +{ + CadDocument doc; + std::vector ents; + auto line = [&](double x0, double y0, double x1, double y1) { + SketchEntity e; e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(x0, y0); e.p1 = Vec2d(x1, y1); ents.push_back(e); }; + line(0, 0, 40, 0); line(40, 0, 40, 30); line(40, 30, 0, 30); line(0, 30, 0, 0); + + const int sk = doc.add_sketch_entities(ents, SketchPlane::XY(), "Profile"); + doc.add_extrude(sk, 10.0, false, BooleanMode::New, "Extrude"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + + doc.bodies[0].has_user_name = true; + doc.bodies[0].user_name = "Bracket"; + + // A SECOND feature lands on the same body — the case the report is about. + doc.add_hole(6.0, 5.0, true, 20.0, 15.0, SketchPlane::XY(), "Hole"); + REQUIRE(doc.recompute()); + REQUIRE(doc.bodies.size() == 1); + CHECK(doc.bodies[0].has_user_name); + CHECK(doc.bodies[0].user_name == "Bracket"); + + // The features keep their own names: renaming the body renamed nothing else. + REQUIRE(doc.features.size() == 3); + CHECK(doc.features[0].name == "Profile"); + CHECK(doc.features[1].name == "Extrude"); + CHECK(doc.features[2].name == "Hole"); + + // ...and the name is part of what gets saved. Bodies are recomputed, never serialised, so + // without the recipe block a body name would live exactly until the project was reopened. + const std::string blob = doc.serialize_recipe(); + REQUIRE_FALSE(blob.empty()); + CadDocument fresh; + REQUIRE(fresh.deserialize_recipe(blob)); + REQUIRE(fresh.bodies.size() == 1); + CHECK(fresh.bodies[0].has_user_name); + CHECK(fresh.bodies[0].user_name == "Bracket"); +} + +// A feature reference is a reference whatever feature holds it. +// +// remove_feature()/move_feature() used to remap Extrude::sketch_ref and a Mate's two +// connectors, and nothing else — so every later consumer of a Sketch (Revolve, Sweep, Loft, +// Rib, Pattern-on-curve, the Surface* family) kept an index that the erase had just +// invalidated. The failure is quiet by construction: a shifted index still names a real +// feature, recompute() succeeds, and what comes out is built from the wrong profile. +// +// The volume is the assertion. Two different profiles go in; deleting the unused feature in +// front of them must leave the SAME solid behind, which it only can if the reference moved +// with its target. +TEST_CASE("deleting a feature remaps the references of every consumer, not just Extrude", + "[CadDocument]") +{ + using namespace Slic3r; + const SketchPlane xy = SketchPlane::XY(); + + // A rectangle 10x10 centred at v = 15, revolved 360 deg about the plane X axis. + auto rect_at = [&](double v0) { + CadFeature sk; + sk.type = CadFeatureType::Sketch; + sk.plane = xy; + sk.profile.points = { Vec2d(-5, v0 - 5), Vec2d(5, v0 - 5), + Vec2d(5, v0 + 5), Vec2d(-5, v0 + 5) }; + sk.profile.closed = true; + return sk; + }; + + SECTION("Revolve::sketch_ref survives the deletion of a feature in front of it") { + CadDocument doc; + doc.features.push_back(rect_at(40.0)); // f0: a decoy profile, never consumed + doc.features.push_back(rect_at(15.0)); // f1: the real profile + doc.add_revolve(1, 360.0, /*axis=X*/0, false, BooleanMode::New, "Rev"); + REQUIRE(doc.recompute()); + const double before = double(doc.display_mesh.volume()); + REQUIRE(before == Approx(9424.78).epsilon(0.05)); + + // f0 is consumed by nothing, so this deletes exactly one feature and shifts f1 to 0. + REQUIRE(doc.remove_feature(0)); + REQUIRE(doc.features.size() == 2); + REQUIRE(doc.features[1].type == CadFeatureType::Revolve); + REQUIRE(doc.features[1].sketch_ref == 0); // followed its target + REQUIRE(doc.error.empty()); + REQUIRE(double(doc.display_mesh.volume()) == Approx(before).epsilon(1e-6)); + } + + SECTION("move_feature swaps a Revolve's reference too") { + CadDocument doc; + doc.features.push_back(rect_at(40.0)); // f0 + doc.features.push_back(rect_at(15.0)); // f1 -> consumed + doc.add_revolve(1, 360.0, 0, false, BooleanMode::New, "Rev"); + REQUIRE(doc.recompute()); + const double before = double(doc.display_mesh.volume()); + + REQUIRE(doc.move_feature(0, 1)); // f0 and f1 trade places + REQUIRE(doc.features[2].sketch_ref == 0); // the profile is now at 0 + REQUIRE(double(doc.display_mesh.volume()) == Approx(before).epsilon(1e-6)); + } + + SECTION("deleting a Sketch cascades to a Revolve that consumes it") { + CadDocument doc; + doc.features.push_back(rect_at(15.0)); + doc.add_revolve(0, 360.0, 0, false, BooleanMode::New, "Rev"); + REQUIRE(doc.recompute()); + + // The Revolve has no profile without this Sketch, exactly as an Extrude would not: + // it goes with it rather than being left pointing at nothing. + REQUIRE(doc.remove_feature(0)); + REQUIRE(doc.features.empty()); + } +} diff --git a/tests/libslic3r/test_config.cpp b/tests/libslic3r/test_config.cpp index 12b161322d..208bbc6cf0 100644 --- a/tests/libslic3r/test_config.cpp +++ b/tests/libslic3r/test_config.cpp @@ -15,6 +15,8 @@ #include #include +#include + using namespace Slic3r; SCENARIO("Generic config validation performs as expected.", "[Config]") { @@ -488,6 +490,59 @@ TEST_CASE("save_to_json round-trips plugin capability references as strings", "[ CHECK(reloaded.option("slicing_pipeline_plugin")->values == refs); } +TEST_CASE("save_to_json writes the same document to a stream as to a file", "[Config]") { + DynamicPrintConfig config; + config.set_key_value("layer_height", new ConfigOptionFloat(0.2)); + config.set_key_value("wall_loops", new ConfigOptionInt(3)); + config.set_key_value("filament_type", new ConfigOptionStrings({ "PLA", "PETG" })); + config.set_key_value("machine_start_gcode", new ConfigOptionString("G28\nG1 Z5")); + + ScopedTemporaryFile tmp(".json"); + config.save_to_json(tmp.string(), "test_preset", "User", "1.0.0.0"); + std::string file_contents; + { + boost::nowide::ifstream ifs(tmp.string()); + file_contents.assign(std::istreambuf_iterator(ifs), std::istreambuf_iterator()); + } + // The file format: one tab per nesting level and a trailing newline. + REQUIRE_FALSE(file_contents.empty()); + CHECK(file_contents.rfind("{\n\t\"", 0) == 0); + CHECK(file_contents.back() == '\n'); + + std::ostringstream strict, replaced; + config.save_to_json(strict, "test_preset", "User", "1.0.0.0"); + config.save_to_json(replaced, "test_preset", "User", "1.0.0.0", true); + CHECK(strict.str() == file_contents); + CHECK(replaced.str() == file_contents); + CHECK(nlohmann::json::parse(strict.str())["machine_start_gcode"] == "G28\nG1 Z5"); +} + +TEST_CASE("save_to_json replaces invalid UTF-8 in a stream only when asked", "[Config]") { + DynamicPrintConfig config; + config.set_key_value("machine_start_gcode", new ConfigOptionString("G28 ; \xff")); + + std::ostringstream strict, replaced; + CHECK_THROWS_AS(config.save_to_json(strict, "test_preset", "User", "1.0.0.0"), nlohmann::json::type_error); + REQUIRE_NOTHROW(config.save_to_json(replaced, "test_preset", "User", "1.0.0.0", true)); + CHECK(nlohmann::json::parse(replaced.str())["machine_start_gcode"] == "G28 ; \xEF\xBF\xBD"); +} + +TEST_CASE("save_to_json leaves an existing file untouched when the config cannot be serialized", "[Config]") { + DynamicPrintConfig config; + config.set_key_value("machine_start_gcode", new ConfigOptionString("G28 ; \xff")); + + ScopedTemporaryFile tmp(".json"); + { + boost::nowide::ofstream ofs(tmp.string()); + ofs << "previous"; + } + CHECK_THROWS_AS(config.save_to_json(tmp.string(), "test_preset", "User", "1.0.0.0"), nlohmann::json::type_error); + + boost::nowide::ifstream ifs(tmp.string()); + const std::string contents((std::istreambuf_iterator(ifs)), std::istreambuf_iterator()); + CHECK(contents == "previous"); +} + TEST_CASE("plugin capability references survive string-map serialization", "[Config][plugins]") { const std::vector refs = { "master_plugin;;header-stamp", @@ -828,3 +883,391 @@ SCENARIO("ConfigOptionVector::set_to_index throws on incompatible type", "[Confi } } } + +TEST_CASE("read_cli applies valid values and collects non-option arguments", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--nozzle-temperature", "210,190", "--reduce-crossing-wall=1", "model.3mf"}; + REQUIRE(config.read_cli(5, argv, &extra, &keys)); + REQUIRE(config.opt("nozzle_temperature")->values == std::vector{210, 190}); + REQUIRE(config.opt("reduce_crossing_wall")->value); + REQUIRE(extra == t_config_option_keys{"model.3mf"}); + REQUIRE(keys == t_config_option_keys{"nozzle_temperature", "reduce_crossing_wall"}); +} + +TEST_CASE("read_cli rejects nil for a non-nullable vector option", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--nozzle-temperature", "nil"}; + REQUIRE_FALSE(config.read_cli(3, argv, &extra, &keys)); +} + +TEST_CASE("read_cli rejects an invalid boolean value", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--reduce-crossing-wall=maybe"}; + REQUIRE_FALSE(config.read_cli(2, argv, &extra, &keys)); +} + +TEST_CASE("read_cli accepts the common spellings of a boolean value", "[Config]") { + const auto [text, expected] = GENERATE(table({ + {"--reduce-crossing-wall=1", true}, + {"--reduce-crossing-wall=true", true}, + {"--reduce-crossing-wall=Yes", true}, + {"--reduce-crossing-wall=on", true}, + {"--reduce-crossing-wall=enabled", true}, + {"--reduce-crossing-wall=TRUE", true}, + {"--reduce-crossing-wall=oN", true}, + {"--reduce-crossing-wall=0", false}, + {"--reduce-crossing-wall=false", false}, + {"--reduce-crossing-wall=No", false}, + {"--reduce-crossing-wall=off", false}, + {"--reduce-crossing-wall=disabled", false}, + {"--reduce-crossing-wall=FALSE", false}, + {"--reduce-crossing-wall=DiSaBlEd", false}, + })); + + DYNAMIC_SECTION(text) { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", text}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("reduce_crossing_wall")->value == expected); + } +} + +TEST_CASE("read_cli accepts the common boolean spellings inside a bools vector", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=true,no,1"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("filament_soluble")->values == std::vector{1, 0, 1}); +} + +TEST_CASE("read_cli trims whitespace around boolean spellings", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--reduce-crossing-wall= true ", "--filament-soluble= true , no ,1"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + REQUIRE(config.opt("reduce_crossing_wall")->value); + REQUIRE(config.opt("filament_soluble")->values == std::vector{1, 0, 1}); +} + +TEST_CASE("read_cli normalizes boolean spellings when a bools vector is repeated", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=true", "--filament-soluble=off"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + REQUIRE(config.opt("filament_soluble")->values == std::vector{1, 0}); +} + +TEST_CASE("read_cli keeps nil alongside boolean spellings in a nullable bools vector", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--enable-overhang-speed=nil,yes,off"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + auto* opt = config.opt("enable_overhang_speed"); + REQUIRE(opt != nullptr); + REQUIRE(opt->values.size() == 3); + REQUIRE(opt->is_nil(0)); + REQUIRE(opt->values[1] == 1); + REQUIRE(opt->values[2] == 0); +} + +TEST_CASE("read_cli rejects an empty item inside a bools vector", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=true,,1"}; + REQUIRE_FALSE(config.read_cli(2, argv, &extra, &keys)); +} + +TEST_CASE("read_cli rejects an unknown spelling next to a valid one in a bools vector", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=true,affirmative"}; + REQUIRE_FALSE(config.read_cli(2, argv, &extra, &keys)); +} + +// The normalization lives in read_cli's boolean branches, so options of other types keep the +// value verbatim - a path named "on" or a colour named "true" must not turn into "1". +TEST_CASE("read_cli leaves boolean spellings alone for non-boolean options", "[Config]") { + SECTION("string option") { + Slic3r::DynamicPrintAndCLIConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--logfile=true"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("logfile")->value == "true"); + } + SECTION("strings vector option") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-colour=on;off"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("filament_colour")->values == std::vector{"on", "off"}); + } +} + +TEST_CASE("read_cli treats a bare boolean flag as true without consuming the next argument", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--reduce-crossing-wall", "model.3mf"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + REQUIRE(config.opt("reduce_crossing_wall")->value); + REQUIRE(extra == t_config_option_keys{"model.3mf"}); +} + +TEST_CASE("read_cli rejects an invalid scalar numeric value", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--top-shell-layers", "several"}; + REQUIRE_FALSE(config.read_cli(3, argv, &extra, &keys)); +} + +TEST_CASE("read_cli appends values when a vector option is repeated", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--nozzle-temperature", "210", "--nozzle-temperature", "190,200"}; + REQUIRE(config.read_cli(5, argv, &extra, &keys)); + REQUIRE(config.opt("nozzle_temperature")->values == std::vector{210, 190, 200}); + // the key is recorded once, on first use + REQUIRE(keys == t_config_option_keys{"nozzle_temperature"}); +} + +TEST_CASE("read_cli parses a bools vector given in the --flag=values form", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=1,0,1"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("filament_soluble")->values == std::vector{1, 0, 1}); +} + +TEST_CASE("read_cli rejects an invalid value inside a bools vector", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble=1,maybe"}; + REQUIRE_FALSE(config.read_cli(2, argv, &extra, &keys)); +} + +TEST_CASE("read_cli appends true for a bare bools vector flag", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-soluble"}; + REQUIRE(config.read_cli(2, argv, &extra, &keys)); + REQUIRE(config.opt("filament_soluble")->values == std::vector{1}); +} + +TEST_CASE("read_cli splits a strings vector on semicolons and unescapes quoted items", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-colour", "#FF0000;\"a\\nb\";#00FF00"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + auto& values = config.opt("filament_colour")->values; + REQUIRE(values == std::vector{"#FF0000", "a\nb", "#00FF00"}); +} + +TEST_CASE("read_cli rejects a strings vector with an unterminated quote", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-colour", "\"oops"}; + REQUIRE_FALSE(config.read_cli(3, argv, &extra, &keys)); +} + +TEST_CASE("read_cli parses a points vector in the NxM coordinate form", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--printable-area", "0x0,200x0,200x200,0x200"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + auto& points = config.opt("printable_area")->values; + REQUIRE(points.size() == 4); + REQUIRE_THAT(points[1].x(), Catch::Matchers::WithinAbs(200.0, 1e-9)); + REQUIRE_THAT(points[1].y(), Catch::Matchers::WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(points[3].x(), Catch::Matchers::WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(points[3].y(), Catch::Matchers::WithinAbs(200.0, 1e-9)); +} + +// logfile is a CLI-only option, so it needs the config type whose def pulls in cli_misc_config_def. +TEST_CASE("read_cli stores the log file path as a string", "[Config]") { + Slic3r::DynamicPrintAndCLIConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--logfile", "orca.log"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + REQUIRE(config.opt("logfile")->value == "orca.log"); +} + +TEST_CASE("read_cli accepts nil entries for a nullable vector option", "[Config]") { + Slic3r::DynamicPrintConfig config; + t_config_option_keys extra, keys; + const char* argv[] = {"orca-slicer", "--filament-retraction-length", "nil,2.5"}; + REQUIRE(config.read_cli(3, argv, &extra, &keys)); + auto* opt = config.opt("filament_retraction_length"); + REQUIRE(opt != nullptr); + REQUIRE(opt->values.size() == 2); + REQUIRE(opt->is_nil(0)); + REQUIRE_FALSE(opt->is_nil(1)); + REQUIRE_THAT(opt->values[1], Catch::Matchers::WithinAbs(2.5, 1e-9)); +} + +// get_at() returns values.front() for an out-of-range index, so calling it on an empty vector +// option is UB. filament_id and filament_is_support are unpopulated on a CLI from-scratch slice. +TEST_CASE("get_filament_type treats empty vector options as absent", "[Config][Filament]") +{ + DynamicPrintConfig config; + std::string displayed; + + SECTION("an empty filament_type yields no type at all") + { + config.set_key_value("filament_type", new ConfigOptionStrings()); + REQUIRE(config.get_filament_type(displayed, 0) == ""); + } + + SECTION("an empty filament_is_support falls back to the plain filament type") + { + config.set_key_value("filament_type", new ConfigOptionStrings({"PETG"})); + config.set_key_value("filament_is_support", new ConfigOptionBools()); + REQUIRE(config.get_filament_type(displayed, 0) == "PETG"); + REQUIRE(displayed == "PETG"); + } + + SECTION("a support filament with an empty filament_id resolves from the type alone") + { + config.set_key_value("filament_type", new ConfigOptionStrings({"PLA"})); + config.set_key_value("filament_is_support", new ConfigOptionBools({true})); + config.set_key_value("filament_id", new ConfigOptionStrings()); + REQUIRE(config.get_filament_type(displayed, 0) == "PLA-S"); + REQUIRE(displayed == "Sup.PLA"); + } + + SECTION("a populated filament_id still selects the support type by id") + { + config.set_key_value("filament_type", new ConfigOptionStrings({"PETG"})); + config.set_key_value("filament_is_support", new ConfigOptionBools({true})); + config.set_key_value("filament_id", new ConfigOptionStrings({"GFS00"})); + REQUIRE(config.get_filament_type(displayed, 0) == "PLA-S"); + REQUIRE(displayed == "Sup.PLA"); + } +} + +namespace { + +// min_object_distance reads exactly these three options. +DynamicPrintConfig spacing_config(PrinterTechnology tech, PrintSequence seq, double clearance_radius) +{ + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(tech)); + c.set_key_value("print_sequence", new ConfigOptionEnum(seq)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(clearance_radius)); + return c; +} + +} // namespace + +TEST_CASE("min_object_distance floors object spacing per print sequence", "[Config]") +{ + struct Case + { + std::string description; + PrinterTechnology tech; + PrintSequence sequence; + double clearance_radius; + double expected; + }; + + auto c = GENERATE(values({ + {"sequential FFF takes a clearance radius above the floor", ptFFF, PrintSequence::ByObject, 12., 12.}, + {"sequential FFF holds the floor at the radius", ptFFF, PrintSequence::ByObject, 6., 6.}, + {"sequential FFF holds the floor below the radius", ptFFF, PrintSequence::ByObject, 4., 6.}, + {"layered FFF ignores the clearance radius", ptFFF, PrintSequence::ByLayer, 12., 6.}, + {"SLA is a flat 6mm", ptSLA, PrintSequence::ByObject, 12., 6.}, + {"SLA ignores the print sequence too", ptSLA, PrintSequence::ByLayer, 12., 6.}, + })); + + DYNAMIC_SECTION(c.description) + { + CHECK_THAT(min_object_distance(spacing_config(c.tech, c.sequence, c.clearance_radius)), + Catch::Matchers::WithinAbs(c.expected, 1e-9)); + } +} + +TEST_CASE("min_object_distance yields no floor when an FFF config lacks the options", "[Config]") +{ + // Missing options yield 0 rather than an error, so a caller gets no floor at all. + SECTION("no clearance radius") { + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(ptFFF)); + c.set_key_value("print_sequence", new ConfigOptionEnum(PrintSequence::ByObject)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("no print sequence") { + DynamicPrintConfig c; + c.set_key_value("printer_technology", new ConfigOptionEnum(ptFFF)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(12.)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("nothing at all") { + CHECK_THAT(min_object_distance(DynamicPrintConfig{}), Catch::Matchers::WithinAbs(0., 1e-9)); + } + + SECTION("an unset printer technology is treated as FFF") { + DynamicPrintConfig c; + c.set_key_value("print_sequence", new ConfigOptionEnum(PrintSequence::ByObject)); + c.set_key_value("extruder_clearance_radius", new ConfigOptionFloat(12.)); + CHECK_THAT(min_object_distance(c), Catch::Matchers::WithinAbs(12., 1e-9)); + } +} + +TEST_CASE("Static print configs compare, order and hash by their option values", "[Config]") +{ + // PrintObjectConfig comes from PRINT_CONFIG_CLASS_DEFINE; PrintConfig combines MachineEnvelopeConfig + // and GCodeConfig through PRINT_CONFIG_CLASS_DERIVED_DEFINE. Both generate hash(), operator==, + // operator< and the option registration from the same option list. The hash inequalities use fixed + // inputs, so they are deterministic; they check that hash() covers the changed option. + SECTION("default-constructed configs are equal and find their options by key") + { + PrintObjectConfig a, b; + REQUIRE(a == b); + REQUIRE(a.hash() == b.hash()); + REQUIRE_FALSE(a < b); + REQUIRE_FALSE(b < a); + REQUIRE(a.optptr("layer_height") == &a.layer_height); + REQUIRE(a.optptr("brim_object_gap") == &a.brim_object_gap); + } + + SECTION("one differing option makes the configs unequal and orders them") + { + PrintObjectConfig a, b; + b.layer_height.value = a.layer_height.value + 0.05; + REQUIRE(a != b); + REQUIRE(a.hash() != b.hash()); + REQUIRE(a < b); + REQUIRE_FALSE(b < a); + } + + SECTION("ordering is decided by the first option in declaration order that differs") + { + PrintObjectConfig a, b; + a.brim_object_gap.value = b.brim_object_gap.value + 1.0; // declared first + a.layer_height.value = b.layer_height.value - 0.05; // declared later, points the other way + REQUIRE(b < a); + REQUIRE_FALSE(a < b); + } + + SECTION("a derived config sees differences in its parents and in its own options") + { + PrintConfig a, b; + REQUIRE(a == b); + REQUIRE(a.hash() == b.hash()); + + b.gcode_flavor.value = b.gcode_flavor.value == gcfMarlinLegacy ? gcfKlipper : gcfMarlinLegacy; // GCodeConfig parent + REQUIRE(a != b); + REQUIRE(a.hash() != b.hash()); + + PrintConfig c, d; + d.skirt_distance.value = c.skirt_distance.value + 1.0; // PrintConfig's own list + REQUIRE(c != d); + REQUIRE(c.hash() != d.hash()); + REQUIRE(c.optptr("skirt_distance") == &c.skirt_distance); + REQUIRE(c.optptr("gcode_flavor") == &c.gcode_flavor); + } +} diff --git a/tests/libslic3r/test_config_variant_expansion.cpp b/tests/libslic3r/test_config_variant_expansion.cpp index dd7de2af44..d8e09539bb 100644 --- a/tests/libslic3r/test_config_variant_expansion.cpp +++ b/tests/libslic3r/test_config_variant_expansion.cpp @@ -130,6 +130,12 @@ TEST_CASE("get_config_index_base resolves (volume type, extruder type, id) to a } } +TEST_CASE("support interface pattern registry includes spiral inset", "[Config]") +{ + const auto &values = ConfigOptionEnum::get_enum_values(); + REQUIRE(values.at("spiralinset") == SupportMaterialInterfacePattern::smipSpiralInset); +} + TEST_CASE("get_extruder_nozzle_volume_count reads the per-extruder volume-type layout", "[Config]") { std::vector> nozzle_volume_types; @@ -478,4 +484,113 @@ TEST_CASE("update_values_to_printer_extruders_for_multiple_filaments resolves pe REQUIRE(config.option("filament_max_volumetric_speed")->values == std::vector({12., 21.})); REQUIRE(config.option("filament_self_index")->values == std::vector({1, 2})); } + + SECTION("a variant option shorter than the filament slots keeps its first value instead of zero") { + DynamicPrintConfig config; + config.option("extruder_type", true)->values = {etDirectDrive, etDirectDrive}; + config.option("nozzle_volume_type", true)->values = {nvtStandard, nvtHighFlow}; + config.option("extruder_variant_list", true)->values = {"Direct Drive Standard,Direct Drive High Flow", + "Direct Drive Standard,Direct Drive High Flow"}; + make_filament_arrays(config); + config.option("filament_map", true)->values = {1, 2}; + // no loaded preset carries the key, so only its single registered default is present + config.option("filament_cooling_before_tower", true)->values = {10.}; + // only the first filament's two variant columns were loaded + config.option("filament_ramming_volumetric_speed", true)->values = {-1., -2.}; + + std::vector> nozzle_volume_types; + int extruder_count = 2; + int count = config.get_extruder_nozzle_volume_count(extruder_count, nozzle_volume_types); + + config.update_values_to_printer_extruders_for_multiple_filaments(config, extruder_count, count, filament_keys, + "filament_self_index", "filament_extruder_variant"); + + // filament 2 resolves to column 3 (its extruder's High Flow column), past the end of both vectors + REQUIRE_THAT(config.option("filament_cooling_before_tower")->values, + Catch::Matchers::Approx(std::vector({10., 10.}))); + REQUIRE_THAT(config.option("filament_ramming_volumetric_speed")->values, + Catch::Matchers::Approx(std::vector({-1., -1.}))); + REQUIRE(config.option("filament_max_volumetric_speed")->values == std::vector({12., 21.})); + } +} + +// update_values_from_multi_to_multi_2 walks the DESTINATION PRINTER's variant list while writing +// into a row taken from the destination PRINT preset, whose arrays are sized to its own +// print_extruder_variant. Those two widths disagree until the print preset is re-selected for the +// new printer -- Tab::load_current_preset() runs this migration first -- so a project authored on +// a single-variant printer, opened and switched to a wider one, wrote past the end of the row. +TEST_CASE("update_values_from_multi_to_multi_2 sizes the destination row to the variant count", + "[Config][VariantExpansion]") +{ + const std::vector src_variants{"Direct Drive Standard"}; + const std::vector dst_variants{"Direct Drive Standard", "Direct Drive High Flow", + "Direct Drive Standard", "Direct Drive High Flow"}; + const std::set keys{"outer_wall_speed"}; + + // The per-object override as authored on the single-variant printer. + const auto object_override = [] { + DynamicPrintConfig c; + c.option("outer_wall_speed", true)->values = {42.}; + return c; + }; + + SECTION("a row narrower than the variant list is grown, not overrun") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option("outer_wall_speed", true)->values = {200.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2(src_variants, dst_variants, dst, keys) == 0); + + const auto& out = object_config.option("outer_wall_speed")->values; + REQUIRE(out.size() == dst_variants.size()); + // Both "Direct Drive Standard" columns match the source variant, so they take the override. + CHECK(out[0] == Catch::Approx(42.)); + CHECK(out[2] == Catch::Approx(42.)); + // The High Flow columns have no matching source variant: nil, so the destination keeps + // tracking the print preset rather than being pinned to another variant's value. + CHECK(std::isnan(out[1])); + CHECK(std::isnan(out[3])); + } + + // The regression guard: where the row already matches the variant list -- every case that was + // not corrupting the heap -- the resize is a no-op and the output is unchanged. + SECTION("a correctly sized row is untouched") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option("outer_wall_speed", true)->values = {200., 500., 210., 510.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2(src_variants, dst_variants, dst, keys) == 0); + + const auto& out = object_config.option("outer_wall_speed")->values; + REQUIRE(out.size() == 4); + CHECK(out[0] == Catch::Approx(42.)); // matched -> override + CHECK(out[1] == Catch::Approx(500.)); // unmatched -> preset value preserved + CHECK(out[2] == Catch::Approx(42.)); + CHECK(out[3] == Catch::Approx(510.)); + } + + // is_nil(idx) indexes values[idx] with no bounds check, so a source shorter than its own + // variant list read out of range before the guard was added. + SECTION("a source shorter than its variant list is read in range") { + DynamicPrintConfig object_config = object_override(); // one value... + DynamicPrintConfig dst; + dst.option("outer_wall_speed", true)->values = {200., 500.}; + + REQUIRE(object_config.update_values_from_multi_to_multi_2( + {"Direct Drive Standard", "Direct Drive Standard"}, // ...but two source variants + {"Direct Drive Standard", "Direct Drive High Flow"}, dst, keys) == 0); + + const auto& out = object_config.option("outer_wall_speed")->values; + REQUIRE(out.size() == 2); + CHECK(out[0] == Catch::Approx(42.)); + CHECK(out[1] == Catch::Approx(500.)); + } + + SECTION("an empty destination variant list is refused") { + DynamicPrintConfig object_config = object_override(); + DynamicPrintConfig dst; + dst.option("outer_wall_speed", true)->values = {200.}; + + CHECK(object_config.update_values_from_multi_to_multi_2(src_variants, {}, dst, keys) == -1); + } } diff --git a/tests/libslic3r/test_lay_on_face.cpp b/tests/libslic3r/test_lay_on_face.cpp new file mode 100644 index 0000000000..60226a9aab --- /dev/null +++ b/tests/libslic3r/test_lay_on_face.cpp @@ -0,0 +1,205 @@ +#include + +#include "libslic3r/LayOnFace.hpp" +#include "libslic3r/Model.hpp" + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +namespace { + +// Adds a box part spanning `origin` to `origin + size`, in object coordinates. +void add_box(ModelObject &object, const Vec3d &size, const Vec3d &origin = Vec3d::Zero()) +{ + TriangleMesh mesh = make_cube(size.x(), size.y(), size.z()); + mesh.translate(origin.cast()); + object.add_volume(std::move(mesh), ModelVolumeType::MODEL_PART, false); +} + +ModelObject &add_box_object(Model &model, const Vec3d &size) +{ + ModelObject *object = model.add_object(); + add_box(*object, size); + object->add_instance(); + return *object; +} + +// A 30 x 30 x 2 plate with three 1 mm thick, 20 mm tall ribs along Y. The rib sides facing -X add up +// to more area than the plate's bottom, but only the bottom is a face of the convex hull. +ModelObject &add_ribbed_plate(Model &model) +{ + ModelObject *object = model.add_object(); + add_box(*object, { 30, 30, 2 }); + for (double x : { 5., 14.5, 24. }) + add_box(*object, { 1, 30, 20 }, { x, 0, 2 }); + object->add_instance(); + return *object; +} + +std::vector instance_planes(const ModelObject &object) +{ + return lay_on_face_planes(object, object.instances.front()->get_matrix_no_offset()); +} + +void lay_on_largest_face(ModelObject &object) +{ + const std::vector planes = instance_planes(object); + const int idx = find_largest_plane(planes); + REQUIRE(idx >= 0); + lay_on_face(object, 0, planes[idx].normal); +} + +void check_size(const ModelObject &object, const Vec3d &expected) +{ + const Vec3d size = object.instance_bounding_box(0).size(); + CHECK_THAT(size.x(), WithinAbs(expected.x(), 1e-3)); + CHECK_THAT(size.y(), WithinAbs(expected.y(), 1e-3)); + CHECK_THAT(size.z(), WithinAbs(expected.z(), 1e-3)); +} + +void check_on_bed(const ModelObject &object) { CHECK_THAT(object.instance_bounding_box(0).min.z(), WithinAbs(0., 1e-3)); } + +} // namespace + +TEST_CASE("A tilted box is laid on its largest face and dropped onto the bed", "[LayOnFace]") +{ + Model model; + ModelObject &box = add_box_object(model, { 40, 20, 10 }); // the 40 x 20 faces are the largest + box.instances.front()->set_rotation({ 0.3, 0.5, 0.2 }); + box.instances.front()->set_offset({ 0, 0, 50 }); + REQUIRE(box.instance_bounding_box(0).size().z() > 11.); + + const std::vector planes = instance_planes(box); + REQUIRE(planes.size() == 6); + CHECK_THAT(planes.front().area, WithinAbs(40. * 20., 1e-2)); + + lay_on_largest_face(box); + CHECK_THAT(box.instance_bounding_box(0).size().z(), WithinAbs(10., 1e-3)); + check_on_bed(box); +} + +TEST_CASE("A box lying on one of its equally large faces is not flipped", "[LayOnFace]") +{ + // A half turn about X puts the other large face down, so the two cases expect different faces + // and neither can pass on the order in which the hull lists them. + const double rotation_x = GENERATE(0., PI); + Model model; + ModelObject &box = add_box_object(model, { 40, 20, 10 }); // the bottom and top are both 40 x 20 + box.instances.front()->set_rotation({ rotation_x, 0, 0 }); + const Transform3d before = box.instances.front()->get_matrix_no_offset(); + + const std::vector planes = instance_planes(box); + const int idx = find_largest_plane(planes); + REQUIRE(idx >= 0); + // The face down on the plate is the object's -Z face, or its +Z face after the half turn. + CHECK_THAT(planes[idx].normal.z(), WithinAbs(rotation_x == 0. ? -1. : 1., 1e-6)); + + lay_on_face(box, 0, planes[idx].normal); + CHECK(box.instances.front()->get_matrix_no_offset().isApprox(before, 1e-9)); +} + +TEST_CASE("Faces are chosen from the orientation left by an earlier part rotation", "[LayOnFace]") +{ + Model model; + ModelObject &box = add_box_object(model, { 40, 20, 10 }); + box.rotate(PI / 2., X); // what --rotate-x 90 does: rotates the parts, not the instance + check_size(box, { 40, 10, 20 }); + + SECTION("the largest face") { + lay_on_largest_face(box); + check_size(box, { 40, 20, 10 }); + check_on_bed(box); + } + + SECTION("the face pointing along +X") { + const std::vector planes = instance_planes(box); + const int idx = find_plane_by_normal(planes, { 1, 0, 0 }); + REQUIRE(idx >= 0); + CHECK_THAT(planes[idx].normal.x(), WithinAbs(1., 1e-6)); + lay_on_face(box, 0, planes[idx].normal); + check_size(box, { 20, 10, 40 }); + check_on_bed(box); + } +} + +TEST_CASE("Objects are laid on their own faces independently", "[LayOnFace]") +{ + Model model; + // Standing on end through its instance rotation. + ModelObject &standing = add_box_object(model, { 40, 20, 10 }); + standing.instances.front()->set_rotation({ 0, PI / 2., 0 }); + // Standing on edge through a part rotation, lifted above the bed. + ModelObject &on_edge = add_box_object(model, { 30, 20, 5 }); + on_edge.rotate(PI / 2., X); + on_edge.instances.front()->set_offset({ 100, 0, 30 }); + check_size(standing, { 10, 20, 40 }); + check_size(on_edge, { 30, 5, 20 }); + + for (ModelObject *object : model.objects) + lay_on_largest_face(*object); + + check_size(standing, { 40, 20, 10 }); + check_on_bed(standing); + check_size(on_edge, { 30, 20, 5 }); + check_on_bed(on_edge); +} + +TEST_CASE("A part rests on its largest hull face even when parallel inner faces add up to more area", "[LayOnFace]") +{ + Model model; + ModelObject &plate = add_ribbed_plate(model); + + double area_facing_minus_x = 0.; + for (const ModelVolume *volume : plate.volumes) { + const indexed_triangle_set &its = volume->mesh().its; + for (const Vec3i32 &face : its.indices) { + const Vec3d cross = (its.vertices[face[1]] - its.vertices[face[0]]).cast().cross( + (its.vertices[face[2]] - its.vertices[face[0]]).cast()); + if (cross.normalized().x() < -0.999) + area_facing_minus_x += 0.5 * cross.norm(); + } + } + // Summing triangle area per normal would pick a rib side over the 900 mm² bottom. + REQUIRE(area_facing_minus_x > 30. * 30.); + + plate.instances.front()->set_rotation({ 0, PI / 2., 0 }); // stand the plate on its side + check_size(plate, { 22, 30, 30 }); + + const std::vector planes = instance_planes(plate); + const int idx = find_largest_plane(planes); + REQUIRE(idx >= 0); + CHECK_THAT(planes[idx].area, WithinAbs(30. * 30., 1e-2)); + CHECK_THAT(planes[idx].normal.z(), WithinAbs(-1., 1e-6)); + + lay_on_face(plate, 0, planes[idx].normal); + check_size(plate, { 30, 30, 22 }); + check_on_bed(plate); +} + +TEST_CASE("Faces are selected in object coordinates whatever the instance rotation", "[LayOnFace]") +{ + Model model; + ModelObject &plate = add_ribbed_plate(model); + plate.instances.front()->set_rotation({ 0, 0, PI / 2. }); + const Transform3d instance_matrix = plate.instances.front()->get_matrix_no_offset(); + const std::vector planes = lay_on_face_planes(plate, instance_matrix); + REQUIRE_FALSE(planes.empty()); + + // Every face center, as --inspect-mesh reports it, selects its own face. + for (size_t i = 0; i < planes.size(); ++i) + CHECK(find_plane_at_point(planes, instance_matrix, planes[i].center, 0.01) == int(i)); + + const int bottom = find_plane_at_point(planes, instance_matrix, { 15, 15, 0 }, 0.01); + REQUIRE(bottom >= 0); + CHECK_THAT(planes[bottom].normal.z(), WithinAbs(-1., 1e-6)); + CHECK(find_plane_by_normal(planes, { 0, 0, -1 }) == bottom); + // Above the bottom plane, and on a rib side that lies inside the hull. + CHECK(find_plane_at_point(planes, instance_matrix, { 15, 15, 0.5 }, 0.01) == -1); + CHECK(find_plane_at_point(planes, instance_matrix, { 14.5, 15, 12 }, 0.01) == -1); +} + +TEST_CASE("A part too small to rest on offers no faces", "[LayOnFace]") +{ + Model model; + CHECK(instance_planes(add_box_object(model, { 2, 2, 2 })).empty()); // every face is 4 mm², under the 5 mm² minimum +} diff --git a/tests/libslic3r/test_marchingsquares.cpp b/tests/libslic3r/test_marchingsquares.cpp index 6844ecb6ac..9a11f49faa 100644 --- a/tests/libslic3r/test_marchingsquares.cpp +++ b/tests/libslic3r/test_marchingsquares.cpp @@ -1,4 +1,6 @@ +#ifndef NOMINMAX #define NOMINMAX +#endif #include #include "test_utils.hpp" diff --git a/tests/libslic3r/test_minimum_spanning_tree.cpp b/tests/libslic3r/test_minimum_spanning_tree.cpp new file mode 100644 index 0000000000..5f9998171c --- /dev/null +++ b/tests/libslic3r/test_minimum_spanning_tree.cpp @@ -0,0 +1,66 @@ +#include + +#include + +#include "libslic3r/MinimumSpanningTree.hpp" +#include "libslic3r/Point.hpp" + +using namespace Slic3r; + +// A 5x5 lattice: at every step of Prim's algorithm several candidates sit at the same +// distance from the tree, so the tie-break decides the tree's shape. +static std::vector lattice() +{ + std::vector vertices; + for (int y = 0; y < 5; ++y) + for (int x = 0; x < 5; ++x) + vertices.emplace_back(Point::new_scale(x, y)); + return vertices; +} + +static std::vector sorted_neighbours(const MinimumSpanningTree &mst, const Point &vertex) +{ + std::vector neighbours = mst.adjacent_nodes(vertex); + std::sort(neighbours.begin(), neighbours.end()); + return neighbours; +} + +TEST_CASE("Minimum spanning tree connects every vertex", "[MinimumSpanningTree]") +{ + const std::vector vertices = lattice(); + const MinimumSpanningTree mst(vertices); + + REQUIRE(mst.vertices().size() == vertices.size()); + size_t adjacency_entries = 0; + for (const Point &vertex : vertices) { + const std::vector neighbours = mst.adjacent_nodes(vertex); + REQUIRE(! neighbours.empty()); + adjacency_entries += neighbours.size(); + } + // A tree on n vertices has n - 1 edges, each listed from both ends. + REQUIRE(adjacency_entries == 2 * (vertices.size() - 1)); +} + +TEST_CASE("Minimum spanning tree does not depend on the order of the non-root vertices", "[MinimumSpanningTree][Regression]") +{ + const std::vector vertices = lattice(); + const MinimumSpanningTree reference(vertices); + + // The root stays first: Prim's tree legitimately depends on where it starts. + // Every other order of the remaining vertices must give the same tree. + std::vector> orders; + orders.emplace_back(vertices); + std::reverse(orders.back().begin() + 1, orders.back().end()); + for (size_t shift = 1; shift + 1 < vertices.size(); ++shift) { + orders.emplace_back(vertices); + std::rotate(orders.back().begin() + 1, orders.back().begin() + 1 + shift, orders.back().end()); + } + + for (const std::vector &order : orders) { + const MinimumSpanningTree mst(order); + for (const Point &vertex : vertices) { + INFO("vertex " << vertex.x() << "," << vertex.y()); + REQUIRE(sorted_neighbours(mst, vertex) == sorted_neighbours(reference, vertex)); + } + } +} diff --git a/tests/libslic3r/test_preset_bundle_loading.cpp b/tests/libslic3r/test_preset_bundle_loading.cpp index ea05ec0cf5..6ec6ba9b1e 100644 --- a/tests/libslic3r/test_preset_bundle_loading.cpp +++ b/tests/libslic3r/test_preset_bundle_loading.cpp @@ -1,19 +1,42 @@ #include +#include #include #include #include "libslic3r/PresetBundle.hpp" #include "libslic3r/AppConfig.hpp" +#include "libslic3r/Model.hpp" +#include "libslic3r/TriangleMesh.hpp" +#include "libslic3r/Utils.hpp" +#include "libslic3r/miniz_extension.hpp" #include "test_utils.hpp" +#include +#include +#include + using namespace Slic3r; namespace { namespace fs = boost::filesystem; +// Whether a key is listed in a vector of keys (published_keys / skipped_keys). +bool contains_key(const std::vector &keys, const std::string &key) +{ + return std::find(keys.begin(), keys.end(), key) != keys.end(); +} + +void check_double_vector(const std::vector &actual, std::initializer_list expected) +{ + REQUIRE(actual.size() == expected.size()); + size_t index = 0; + for (double value : expected) + REQUIRE_THAT(actual[index++], Catch::Matchers::WithinAbs(value, 1e-6)); +} + void write_print_preset(const DynamicPrintConfig &default_config, const fs::path &file, const std::string &name, const std::string &inherits = {}) { DynamicPrintConfig config(default_config); @@ -52,6 +75,22 @@ void set_renamed_from(PresetCollection &coll, const std::string &preset_name, st it->renamed_from = std::move(old_names); } +// A single-slot PLA file config for the published-material load tests (mirrors what the GUI +// builds from a 3mf's project settings before load_config_model). +DynamicPrintConfig published_pla_file_config() +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; +} + // A standalone print preset collection that exposes the protected rename-map builder, so a // renamed_from scenario can be set up without the full system-profile load pipeline. // (PresetCollection is non-copyable - it holds a mutex - so it is constructed directly with @@ -184,6 +223,44 @@ TEST_CASE("Printer extruder count tolerates missing nozzle diameter", "[Preset][ CHECK(bundle.get_printer_extruder_count() == 2); } +TEST_CASE("Selected printer uses its default or saved bed type", "[Preset][Bundle]") +{ + PresetBundle bundle; + Preset& printer = add_inmemory_preset(bundle.printers, "Test Printer"); + printer.is_system = true; + printer.config.option("printer_model")->value = "TEST-MODEL"; + printer.config.option("printer_variant")->value = "0.4"; + printer.config.option("default_bed_type")->value = "Engineering Plate"; + + AppConfig app_config; + app_config.set("curr_bed_type", std::to_string(static_cast(btPTE))); + PresetBundle::PresetPreferences preferred_selection; + BedType expected_bed_type; + + SECTION("New printer uses its symbolic default") { + expected_bed_type = btEP; + preferred_selection = {"TEST-MODEL", "0.4"}; + } + SECTION("Re-enabled printer uses its saved selection") { + expected_bed_type = btPC; + preferred_selection = {"TEST-MODEL", "0.4"}; + app_config.set_printer_setting("Test Printer", "curr_bed_type", + std::to_string(static_cast(expected_bed_type))); + } + SECTION("Existing printer keeps its saved selection after presets reload") { + expected_bed_type = btPCT; + app_config.set("presets", PRESET_PRINTER_NAME, "Test Printer"); + app_config.set_printer_setting("Test Printer", "curr_bed_type", + std::to_string(static_cast(expected_bed_type))); + } + + bundle.load_selections(app_config, preferred_selection); + bundle.export_selections(app_config); + + CHECK(bundle.project_config.opt_enum("curr_bed_type") == expected_bed_type); + CHECK(app_config.get_printer_setting("Test Printer", "curr_bed_type") == std::to_string(static_cast(expected_bed_type))); +} + TEST_CASE("find_preset resolves a system preset's renamed_from", "[Preset][Rename]") { RenameTestCollection coll; @@ -476,6 +553,107 @@ TEST_CASE("Profile validator flags dangling and renamed preset references", "[Pr } } +TEST_CASE("Every printer variant has a compatible default material", "[Preset][Validate][DefaultMaterials]") +{ + PresetBundle bundle; + auto &vendor = bundle.vendors["Acme"]; + vendor.id = vendor.name = "Acme"; + vendor.models.emplace_back(); + auto &model = vendor.models.back(); + model.id = model.name = "Acme Printer"; + model.default_materials = {"Acme PLA @0.4", "Acme PLA @0.6"}; + + for (const std::string variant : {"0.4", "0.6"}) { + model.variants.emplace_back(variant); + const std::string printer_name = "Acme Printer " + variant; + Preset &printer = add_inmemory_preset(bundle.printers, printer_name); + printer.is_system = true; + printer.is_visible = false; // Validation covers uninstalled variants too. + printer.vendor = &vendor; + printer.config.option("printer_model")->value = model.id; + printer.config.option("printer_variant")->value = variant; + printer.config.option("nozzle_diameter")->values = {std::stod(variant)}; + + Preset &filament = add_inmemory_preset(bundle.filaments, "Acme PLA @" + variant); + filament.is_system = true; + filament.vendor = &vendor; + filament.alias = "Acme PLA"; + filament.config.option("compatible_printers")->values = {printer_name}; + } + + // A second system filament, compatible with a user printer this model does not have, so a + // section can list a known-but-incompatible name without tripping the existence check. + Preset &other_printer = add_inmemory_preset(bundle.printers, "Acme Printer 0.2"); + other_printer.vendor = &vendor; + Preset &other_filament = add_inmemory_preset(bundle.filaments, "Acme PLA @0.2"); + other_filament.is_system = true; + other_filament.vendor = &vendor; + other_filament.alias = "Acme PLA"; + other_filament.config.option("compatible_printers")->values = {"Acme Printer 0.2"}; + + CHECK_FALSE(bundle.has_errors()); + bool expected_errors = true; + + SECTION("A model default for one nozzle does not cover another nozzle") { + model.default_materials = {"Acme PLA @0.4"}; + } + SECTION("An empty default list leaves every variant uncovered") { + model.default_materials.clear(); + } + SECTION("An unknown filament cannot be a default") { + model.default_materials = {"Missing PLA"}; + } + SECTION("An unknown name is an error even when a compatible default covers the variant") { + model.default_materials.insert(model.default_materials.begin(), "Missing PLA"); + } + SECTION("An unknown default_filament_profile name is an error") { + bundle.printers.find_preset("Acme Printer 0.6", false, true) + ->config.option("default_filament_profile", true)->values = {"Missing PLA"}; + } + SECTION("A known default_filament_profile name is not an error") { + bundle.printers.find_preset("Acme Printer 0.6", false, true) + ->config.option("default_filament_profile", true)->values = {"Acme PLA @0.6"}; + expected_errors = false; + } + SECTION("A short alias does not resolve as an installed default") { + model.default_materials = {"Acme PLA"}; + } + SECTION("A user filament cannot satisfy a shipped default") { + bundle.filaments.find_preset("Acme PLA @0.6", false, true)->is_system = false; + } + SECTION("One compatible default per variant is sufficient") { + model.default_materials.insert(model.default_materials.begin(), "Acme PLA @0.2"); + expected_errors = false; + } + SECTION("Compatibility conditions apply to each nozzle") { + model.default_materials = {"Acme PLA @0.4"}; + Preset *filament = bundle.filaments.find_preset("Acme PLA @0.4", false, true); + auto &library = bundle.vendors[PresetBundle::ORCA_FILAMENT_LIBRARY]; + library.id = library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + filament->vendor = &library; + filament->config.option("compatible_printers")->values.clear(); + filament->config.option("compatible_printers_condition")->value = "nozzle_diameter[0] == 0.4"; + } + SECTION("Library defaults respect printer exclusions") { + model.default_materials = {"Acme PLA @0.4"}; + Preset *filament = bundle.filaments.find_preset("Acme PLA @0.4", false, true); + auto &library = bundle.vendors[PresetBundle::ORCA_FILAMENT_LIBRARY]; + library.id = library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + filament->vendor = &library; + filament->config.option("compatible_printers")->values.clear(); + CHECK_FALSE(bundle.check_printer_default_materials()); + filament->m_excluded_from.insert("Acme Printer 0.6"); + } + SECTION("User printers do not need model defaults") { + model.default_materials = {"Acme PLA @0.4"}; + bundle.printers.find_preset("Acme Printer 0.6", false, true)->is_system = false; + expected_errors = false; + } + + CHECK(bundle.check_printer_default_materials() == expected_errors); + CHECK(bundle.has_errors() == expected_errors); +} + // Under a shared override key, the last preset merged into the full config overwrote the others', so an // edited slicing-pipeline override never reached Print::apply's diff and re-configuring a plugin never // re-sliced. Per-type keys make that collision impossible; guard the scoping here. @@ -515,6 +693,588 @@ struct LibraryFilamentTestCollection : public PresetCollection } // namespace +TEST_CASE("Missing app config is accepted as default CLI state", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + AppConfig app_config; + app_config.set_loading_path((dir.path() / "missing.conf").string()); + CHECK(app_config.load_if_exists().empty()); +} + +TEST_CASE("Read-only user preset loading does not create or delete files", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + PresetBundle bundle; + PresetsConfigSubstitutions substitutions; + + const fs::path missing_root = dir.path() / "missing-user"; + bundle.prints.load_presets(missing_root.string(), PRESET_PRINT_NAME, substitutions, + ForwardCompatibilitySubstitutionRule::EnableSilent, nullptr, + PresetOrigin(), true); + CHECK_FALSE(fs::exists(missing_root / PRESET_PRINT_NAME)); + + const fs::path malformed = dir.path() / "existing-user" / PRESET_PRINT_NAME / "malformed.json"; + fs::create_directories(malformed.parent_path()); + std::ofstream(malformed.string()) << "{not-json"; + bundle.prints.load_presets((dir.path() / "existing-user").string(), PRESET_PRINT_NAME, substitutions, + ForwardCompatibilitySubstitutionRule::EnableSilent, nullptr, + PresetOrigin(), true); + CHECK(fs::exists(malformed)); +} + +TEST_CASE("Typeless preset resolution probes loaded FFF collections", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "typeless-process.json"; + std::ofstream(source_file.string()) << R"({"name":"Typeless Process","from":"User"})"; + + PresetBundle bundle; + Preset &process = add_inmemory_preset(bundle.prints, "Typeless Process"); + process.file = source_file.string(); + process.config.option("travel_speed", true)->values = {321.0}; + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + REQUIRE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error.empty()); + CHECK(resolved_type == Preset::TYPE_PRINT); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); +} + +TEST_CASE("Typeless preset resolution preserves duplicate identity ambiguity", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "duplicate-process.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + add_inmemory_preset(bundle.prints, "First Process Identity").file = source_file.string(); + add_inmemory_preset(bundle.prints, "Second Process Identity").file = source_file.string(); + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset identity is ambiguous"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Typeless preset resolution rejects cross-type ambiguity", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "ambiguous.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + add_inmemory_preset(bundle.prints, "Process Identity").file = source_file.string(); + add_inmemory_preset(bundle.filaments, "Filament Identity").file = source_file.string(); + + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset type is ambiguous"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Typeless preset resolution rejects a missing type candidate", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "unknown.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + DynamicPrintConfig raw; + Preset::Type resolved_type = Preset::TYPE_INVALID; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config_type(raw, resolved_type, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset type could not be resolved"); + CHECK(resolved_type == Preset::TYPE_INVALID); +} + +TEST_CASE("Exact file resolution rejects multiple preset identities", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "duplicate.json"; + std::ofstream(source_file.string()) << "{}"; + + PresetBundle bundle; + Preset &first = add_inmemory_preset(bundle.prints, "First Identity"); + first.file = source_file.string(); + Preset &second = add_inmemory_preset(bundle.prints, "Second Identity"); + second.file = source_file.string(); + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Parent"; + + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset identity is ambiguous"); +} + +TEST_CASE("System preset resolution returns the canonical vendor configuration", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir source_dir; + PresetBundle bundle; + + VendorProfile vendor("VendorB"); + vendor.name = "Vendor B"; + auto [vendor_it, inserted] = bundle.vendors.emplace(vendor.id, std::move(vendor)); + REQUIRE(inserted); + + Preset &resolved = add_inmemory_preset(bundle.prints, "Vendor B Process", "fdm_process_common"); + resolved.is_system = true; + resolved.vendor = &vendor_it->second; + resolved.file = (source_dir.path() / "vendor-b-process.json").string(); + std::ofstream(resolved.file) << "{}"; + resolved.config.option("travel_speed", true)->values = {321.0}; + resolved.config.option("wall_loops", true)->value = 2; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + raw.option("wall_loops", true)->value = 5; + + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, resolved.file, + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); + CHECK(raw.option("wall_loops")->value == 2); +} + +TEST_CASE("Manifest-backed preset resolution loads the source vendor tree", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path vendor_dir = dir.path() / "Acme"; + const fs::path child_file = vendor_dir / "process" / "nested" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"fdm_process_common","sub_path":"process/base.json"},)" + << R"({"name":"Acme Process","sub_path":"process/nested/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream((vendor_dir / "process" / "base.json").string()) + << R"({"type":"process","name":"fdm_process_common","from":"system",)" + << R"("instantiation":"false","travel_speed":["321"]})"; + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common","wall_loops":"5"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + raw.option("wall_loops", true)->value = 5; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(321.0, 1e-6)); + CHECK(raw.option("wall_loops")->value == 5); +} + +TEST_CASE("Manifest-backed resolution is scoped to the explicit source root", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + auto write_vendor = [&](const std::string &root_name, double travel_speed) { + const fs::path root = dir.path() / root_name; + const fs::path child_file = root / "Acme" / "process" / "child.json"; + fs::create_directories(child_file.parent_path()); + std::ofstream((root / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"fdm_process_common","sub_path":"process/base.json"},)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + std::ofstream((root / "Acme" / "process" / "base.json").string()) + << R"({"type":"process","name":"fdm_process_common","from":"system",)" + << R"("instantiation":"false","travel_speed":[")" << travel_speed << R"("]})"; + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common"})"; + return child_file; + }; + + const fs::path source_a = write_vendor("root-a", 111.0); + const fs::path source_b = write_vendor("root-b", 222.0); + REQUIRE(fs::exists(source_a)); + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "synthetic-parent-marker"; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_b.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + REQUIRE(raw.option("travel_speed")->values.size() == 1); + CHECK_THAT(raw.option("travel_speed")->values.front(), Catch::Matchers::WithinAbs(222.0, 1e-6)); +} + +TEST_CASE("Exact-only resolution rejects an unconfigured manifest-backed file", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path source_file = dir.path() / "Acme" / "process" / "child.json"; + fs::create_directories(source_file.parent_path()); + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + std::ofstream(source_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Some Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, source_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error, false)); + CHECK(error == "Preset was not found in the loaded bundle"); +} + +TEST_CASE("Vendor filament resolution uses the shared Orca library base", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path library_dir = dir.path() / PresetBundle::ORCA_FILAMENT_LIBRARY; + const fs::path vendor_dir = dir.path() / "Acme"; + const fs::path child_file = vendor_dir / "filament" / "nested" / "petg.json"; + + std::ofstream((dir.path() / (std::string(PresetBundle::ORCA_FILAMENT_LIBRARY) + ".json")).string()) + << R"({"version":"1.0.0","name":"OrcaFilamentLibrary","filament_list":[)" + << R"({"name":"fdm_filament_pet","sub_path":"filament/pet.json","filament_id":"GFL99"}]})"; + fs::create_directories(library_dir / "filament"); + std::ofstream((library_dir / "filament" / "pet.json").string()) + << R"({"type":"filament","name":"fdm_filament_pet","from":"system",)" + << R"("filament_id":"GFL99","instantiation":"false",)" + << R"("filament_type":["PETG"],"filament_density":["1.27"]})"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","filament_list":[)" + << R"({"name":"Acme PETG","sub_path":"filament/nested/petg.json","filament_id":"GFA00"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"filament","name":"Acme PETG","from":"system",)" + << R"("filament_id":"GFA00","instantiation":"true","inherits":"fdm_filament_pet"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_pet"; + + PresetBundle bundle; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_FILAMENT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error.empty()); + CHECK(raw.opt_string("filament_type", 0u) == "PETG"); + REQUIRE(raw.option("filament_density")->values.size() == 1); + CHECK_THAT(raw.option("filament_density")->values.front(), Catch::Matchers::WithinAbs(1.27, 1e-6)); +} + +TEST_CASE("Manifest-backed resolution rejects a missing parent", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path child_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","inherits":"Missing Parent","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Missing Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK_FALSE(error.empty()); +} + +TEST_CASE("Manifest-backed resolution rejects a vendor load with malformed entries", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path child_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[123,)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK_FALSE(error.empty()); +} + +TEST_CASE("Manifest-backed resolution rejects files absent from the vendor manifest", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path listed_file = dir.path() / "Acme" / "process" / "listed.json"; + const fs::path unlisted_file = dir.path() / "Acme" / "process" / "unlisted.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Listed Process","sub_path":"process/listed.json"}]})"; + fs::create_directories(listed_file.parent_path()); + std::ofstream(listed_file.string()) + << R"({"type":"process","name":"Listed Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + std::ofstream(unlisted_file.string()) + << R"({"type":"process","name":"Unlisted Process","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, unlisted_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Source file is not an instantiated preset in its vendor manifest"); +} + +TEST_CASE("Manifest-backed resolution rejects a mismatched preset type", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path process_file = dir.path() / "Acme" / "process" / "child.json"; + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + fs::create_directories(process_file.parent_path()); + std::ofstream(process_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_common"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_FILAMENT, process_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Source file is not an instantiated preset in its vendor manifest"); +} + +TEST_CASE("Resolution terminates when no vendor manifest exists", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path detached_file = dir.path() / "detached.json"; + std::ofstream(detached_file.string()) << "{}"; + + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "Missing Parent"; + + PresetBundle bundle; + std::string error; + CHECK_FALSE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, detached_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(error == "Preset was not found in the loaded bundle"); +} + +TEST_CASE("Manifest-backed resolution reuses the vendor tree it already loaded", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path process_dir = dir.path() / "Acme" / "process"; + fs::create_directories(process_dir); + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" + << R"({"name":"fdm_process_common","sub_path":"process/base.json"},)" + << R"({"name":"Acme First","sub_path":"process/first.json"},)" + << R"({"name":"Acme Second","sub_path":"process/second.json"}]})"; + auto write_base = [&](double travel_speed) { + std::ofstream((process_dir / "base.json").string()) + << R"({"type":"process","name":"fdm_process_common","from":"system",)" + << R"("instantiation":"false","travel_speed":[")" << travel_speed << R"("]})"; + }; + auto write_child = [&](const std::string &file, const std::string &name) { + std::ofstream((process_dir / file).string()) + << R"({"type":"process","name":")" << name << R"(","from":"system",)" + << R"("instantiation":"true","inherits":"fdm_process_common"})"; + }; + write_base(111.0); + write_child("first.json", "Acme First"); + write_child("second.json", "Acme Second"); + + auto travel_speed = [&](PresetBundle &bundle, const std::string &file) { + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, (process_dir / file).string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + return raw.option("travel_speed")->values.front(); + }; + + PresetBundle bundle; + CHECK_THAT(travel_speed(bundle, "first.json"), Catch::Matchers::WithinAbs(111.0, 1e-6)); + + // Only a reload would see this change. + write_base(222.0); + CHECK_THAT(travel_speed(bundle, "second.json"), Catch::Matchers::WithinAbs(111.0, 1e-6)); + + PresetBundle fresh; + CHECK_THAT(travel_speed(fresh, "second.json"), Catch::Matchers::WithinAbs(222.0, 1e-6)); +} + +TEST_CASE("Manifest-backed resolution does not keep a vendor tree that failed to load", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path child_file = dir.path() / "Acme" / "process" / "child.json"; + auto write_manifest = [&](const std::string &leading_entry) { + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","process_list":[)" << leading_entry + << R"({"name":"Acme Process","sub_path":"process/child.json"}]})"; + }; + write_manifest("123,"); + fs::create_directories(child_file.parent_path()); + std::ofstream(child_file.string()) + << R"({"type":"process","name":"Acme Process","from":"system",)" + << R"("instantiation":"true","layer_height":"0.2"})"; + + PresetBundle bundle; + auto resolve = [&](std::string &error) { + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_process_common"; + return bundle.resolve_preset_config(raw, Preset::TYPE_PRINT, child_file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error); + }; + + std::string error; + CHECK_FALSE(resolve(error)); + CHECK_FALSE(error.empty()); + + write_manifest(""); + error.clear(); + CHECK(resolve(error)); + CHECK(error.empty()); +} + +TEST_CASE("Manifest-backed resolution reuses the library base for type-probed files", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path library_pet = dir.path() / PresetBundle::ORCA_FILAMENT_LIBRARY / "filament" / "pet.json"; + const fs::path filament_dir = dir.path() / "Acme" / "filament"; + + std::ofstream((dir.path() / (std::string(PresetBundle::ORCA_FILAMENT_LIBRARY) + ".json")).string()) + << R"({"version":"1.0.0","name":"OrcaFilamentLibrary","filament_list":[)" + << R"({"name":"fdm_filament_pet","sub_path":"filament/pet.json","filament_id":"GFL99"}]})"; + fs::create_directories(library_pet.parent_path()); + auto write_library_pet = [&](double density) { + std::ofstream(library_pet.string()) + << R"({"type":"filament","name":"fdm_filament_pet","from":"system",)" + << R"("filament_id":"GFL99","instantiation":"false",)" + << R"("filament_type":["PETG"],"filament_density":[")" << density << R"("]})"; + }; + write_library_pet(1.27); + + std::ofstream((dir.path() / "Acme.json").string()) + << R"({"version":"1.0.0","name":"Acme","filament_list":[)" + << R"({"name":"Acme PETG","sub_path":"filament/petg.json","filament_id":"GFA00"},)" + << R"({"name":"Acme PETG Matte","sub_path":"filament/petg_matte.json","filament_id":"GFA01"}]})"; + fs::create_directories(filament_dir); + auto write_child = [&](const std::string &file, const std::string &name, const std::string &filament_id) { + std::ofstream((filament_dir / file).string()) + << R"({"type":"filament","name":")" << name << R"(","from":"system",)" + << R"("filament_id":")" << filament_id << R"(","instantiation":"true","inherits":"fdm_filament_pet"})"; + }; + write_child("petg.json", "Acme PETG", "GFA00"); + write_child("petg_matte.json", "Acme PETG Matte", "GFA01"); + + auto density = [](const DynamicPrintConfig &config) { + return config.option("filament_density")->values.front(); + }; + + PresetBundle bundle; + DynamicPrintConfig first; + first.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_pet"; + std::string error; + REQUIRE(bundle.resolve_preset_config(first, Preset::TYPE_FILAMENT, (filament_dir / "petg.json").string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK_THAT(density(first), Catch::Matchers::WithinAbs(1.27, 1e-6)); + + // Only a reload would see this change. + write_library_pet(1.5); + + DynamicPrintConfig second; + Preset::Type type = Preset::TYPE_INVALID; + REQUIRE(bundle.resolve_preset_config_type(second, type, (filament_dir / "petg_matte.json").string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + CHECK(type == Preset::TYPE_FILAMENT); + CHECK_THAT(density(second), Catch::Matchers::WithinAbs(1.27, 1e-6)); +} + +TEST_CASE("Manifest-backed resolution shares the library between vendors under one root", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir dir; + const fs::path library_dir = dir.path() / PresetBundle::ORCA_FILAMENT_LIBRARY / "filament"; + + std::ofstream((dir.path() / (std::string(PresetBundle::ORCA_FILAMENT_LIBRARY) + ".json")).string()) + << R"({"version":"1.0.0","name":"OrcaFilamentLibrary","filament_list":[)" + << R"({"name":"fdm_filament_pet","sub_path":"filament/pet.json","filament_id":"GFL99"},)" + << R"({"name":"Generic PETG","sub_path":"filament/generic_petg.json","filament_id":"GFL98"}]})"; + fs::create_directories(library_dir); + auto write_library_pet = [&](double density) { + std::ofstream((library_dir / "pet.json").string()) + << R"({"type":"filament","name":"fdm_filament_pet","from":"system",)" + << R"("filament_id":"GFL99","instantiation":"false",)" + << R"("filament_type":["PETG"],"filament_density":[")" << density << R"("]})"; + }; + write_library_pet(1.27); + std::ofstream((library_dir / "generic_petg.json").string()) + << R"({"type":"filament","name":"Generic PETG","from":"system",)" + << R"("filament_id":"GFL98","instantiation":"true","inherits":"fdm_filament_pet"})"; + + auto write_vendor = [&](const std::string &vendor, const std::string &filament_id) { + const fs::path filament_dir = dir.path() / vendor / "filament"; + fs::create_directories(filament_dir); + std::ofstream((dir.path() / (vendor + ".json")).string()) + << R"({"version":"1.0.0","name":")" << vendor << R"(","filament_list":[)" + << R"({"name":")" << vendor << R"( PETG","sub_path":"filament/petg.json","filament_id":")" << filament_id << R"("}]})"; + std::ofstream((filament_dir / "petg.json").string()) + << R"({"type":"filament","name":")" << vendor << R"( PETG","from":"system",)" + << R"("filament_id":")" << filament_id << R"(","instantiation":"true","inherits":"fdm_filament_pet"})"; + return filament_dir / "petg.json"; + }; + const fs::path acme_petg = write_vendor("Acme", "GFA00"); + const fs::path beta_petg = write_vendor("Beta", "GFB00"); + + auto density = [&](PresetBundle &bundle, const fs::path &file) { + DynamicPrintConfig raw; + raw.option(BBL_JSON_KEY_INHERITS, true)->value = "fdm_filament_pet"; + std::string error; + REQUIRE(bundle.resolve_preset_config(raw, Preset::TYPE_FILAMENT, file.string(), + ForwardCompatibilitySubstitutionRule::EnableSilent, error)); + return raw.option("filament_density")->values.front(); + }; + + PresetBundle bundle; + CHECK_THAT(density(bundle, acme_petg), Catch::Matchers::WithinAbs(1.27, 1e-6)); + + // Only a reload would see this change. + write_library_pet(1.5); + CHECK_THAT(density(bundle, beta_petg), Catch::Matchers::WithinAbs(1.27, 1e-6)); + CHECK_THAT(density(bundle, library_dir / "generic_petg.json"), Catch::Matchers::WithinAbs(1.27, 1e-6)); + + PresetBundle fresh; + CHECK_THAT(density(fresh, beta_petg), Catch::Matchers::WithinAbs(1.5, 1e-6)); +} + // Orca: a filament in the Orca Filament Library that names its compatible printers has to hide the generic // library filament sharing its alias, the same way a vendor owned filament does. Otherwise both are compatible // with that printer and the plater combo box lists the shared alias twice. @@ -566,6 +1326,87 @@ TEST_CASE("A printer specific filament supersedes the generic library filament w CHECK(is_compatible_with_printer(generic_lib, PresetWithVendorProfile(*printer_c, nullptr))); } +namespace { + +// One system printer plus the filament presets a machine facing dialog has to choose between: +// an Orca Filament Library generic with no compatible_printers, a same alias vendor filament +// that names the printer, a library filament with no vendor twin, and a vendor filament that +// belongs to a different printer. +struct MachineFilaments +{ + PresetBundle bundle; + VendorProfile library{PresetBundle::ORCA_FILAMENT_LIBRARY}; + VendorProfile vendor{"Vendor"}; + + MachineFilaments() + { + // VendorProfile's constructor takes an id; the library rule keys off the name. + library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + vendor.name = "Vendor"; + + Preset &printer = add_inmemory_preset(bundle.printers, "Printer A 0.4 nozzle"); + printer.is_system = true; + printer.vendor = &vendor; + printer.config.option("printer_model", true)->value = "Printer A"; + + add_filament(library, "Generic ABS @System", "Generic ABS", {}); + add_filament(vendor, "Generic ABS @Printer A", "Generic ABS", { "Printer A 0.4 nozzle" }); + add_filament(library, "FilAr ABS @System", "FilAr ABS", {}); + add_filament(vendor, "Vendor PLA @Printer B", "Vendor PLA", { "Printer B 0.4 nozzle" }); + + // update_library_profile_excluded_from() is protected and has its own test above; record + // the exclusion it derives from the same alias vendor filament. + Preset *shadowed = bundle.filaments.find_preset("Generic ABS @System"); + REQUIRE(shadowed != nullptr); + shadowed->m_excluded_from.insert("Printer A 0.4 nozzle"); + } + + void add_filament(const VendorProfile &owner, const std::string &name, const std::string &alias, + std::vector compatible_printers) + { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.is_system = true; + preset.alias = alias; + preset.vendor = &owner; + compatible_list(bundle.filaments, name, "compatible_printers") = std::move(compatible_printers); + } + + bool offers(const std::string &preset_name, bool include_user_presets = false) + { + const std::vector offered = + bundle.get_filament_presets_for_machine("Printer A", "0.4", include_user_presets); + return std::any_of(offered.begin(), offered.end(), + [&preset_name](const Preset *p) { return p->name == preset_name; }); + } +}; + +} // namespace + +TEST_CASE("Filaments offered for a machine follow the app's compatibility rule", "[Preset][Bundle]") +{ + MachineFilaments f; + + SECTION("a library filament with no compatible_printers is offered") { + CHECK(f.offers("FilAr ABS @System")); + } + + SECTION("a same alias vendor filament shadows the library generic") { + CHECK(f.offers("Generic ABS @Printer A")); + CHECK_FALSE(f.offers("Generic ABS @System")); + } + + SECTION("a filament naming a different printer is not offered") { + CHECK_FALSE(f.offers("Vendor PLA @Printer B")); + } + + SECTION("a user filament is offered only when the printer supports user presets") { + add_inmemory_preset(f.bundle.filaments, "My PLA"); + + CHECK_FALSE(f.offers("My PLA", /*include_user_presets=*/false)); + CHECK(f.offers("My PLA", /*include_user_presets=*/true)); + } +} + namespace { @@ -704,3 +1545,3940 @@ TEST_CASE("Sizing the filament list to a multi-tool nozzle count keeps mixed slo CHECK(bundle.num_mixed_filaments() == 0); } } + +// A "published" 3MF keeps the user's currently-selected presets and overlays only the +// author-selected process keys onto the edited preset (mirrors the GUI load path: normalize +// before load_config_model, then the overlay in load_config_file_config). +TEST_CASE("Published 3MF overlays only the author-selected process keys onto the edited preset", "[Preset][Bundle][Published]") +{ + // The file config the GUI builds from a .3mf's project settings. + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // The loader derives the filament count from filament_colour and throws when it is + // empty; a 3mf always carries it. + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt_float("layer_height") = 0.28; // process scalar + config.opt("wiping_volumes_extruders")->values = { 140., 150. }; // matching-size vector + config.opt("post_process")->values = { "script-a", "script-b" }; // mismatched vector + config.opt("nozzle_temperature")->values = { 220 }; // filament key (not applied anywhere) + // Structural (denylisted) key: must be silently ignored. full_print_config() omits the + // *_settings_id keys, so create one explicitly. + config.opt_string("print_settings_id", true) = "file process"; + config.opt("flush_multiplier")->values = { 2., 2. }; // must NOT cross over + config.opt("wipe_tower_x")->values = { 100. }; // plate geometry, does cross over + config.opt("wipe_tower_rotation_angle")->value = 45.; // published-only plate geometry, crosses over + config.option("curr_bed_type")->setInt(BedType::btPC); // must NOT cross over + return config; + }; + + const std::vector published_keys = { + "layer_height", "wiping_volumes_extruders", "post_process", "nozzle_temperature", "print_settings_id" + }; + + PresetBundle bundle; + const std::string pre_load_name = bundle.prints.get_edited_preset().name; + const size_t pre_load_size = bundle.prints.size(); + + // The edited presets are the overlay targets: recognizable pre-load values. + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values = { 10., 20. }; + bundle.prints.get_edited_preset().config.opt("post_process")->values = { "existing-script" }; + bundle.prints.get_edited_preset().config.opt_string("print_settings_id") = "user process"; + // Capture the ctor-seeded project_config values so the assertions below check the load + // leaves them untouched rather than hardcoding the defaults. + const std::vector seed_filament_colour = bundle.project_config.opt("filament_colour")->values; + const std::vector seed_flush_multiplier = bundle.project_config.opt("flush_multiplier")->values; + const int seed_bed_type = bundle.project_config.option("curr_bed_type")->getInt(); + + DynamicPrintConfig config = make_file_config(); + // The GUI normalizes the config before load; mirror that so only the production path runs. + Preset::normalize(config); + + PublishedConfig pub; + pub.published = true; + pub.published_keys = published_keys; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // a) Process scalar overlaid; matching-size vector applied, mismatched one lands in + // skipped_keys; applied keys are not reported. + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 140., 150. }); + CHECK(bundle.prints.get_edited_preset().config.opt("post_process")->values == std::vector{ "existing-script" }); + CHECK(contains_key(pub.skipped_keys, "post_process")); + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); + + // b) A filament key is never applied anywhere and is reported as skipped. + CHECK(bundle.prints.get_edited_preset().config.option("nozzle_temperature") == nullptr); + CHECK(contains_key(pub.skipped_keys, "nozzle_temperature")); + + // c) A structural key is silently ignored: neither applied nor reported as skipped. + CHECK(bundle.prints.get_edited_preset().config.opt_string("print_settings_id") == "user process"); + CHECK_FALSE(contains_key(pub.skipped_keys, "print_settings_id")); + + // d) Only plate/bed geometry crosses in published mode: filament/purge data and bed type + // stay at the ctor seeds. + CHECK(bundle.project_config.opt("filament_colour")->values == seed_filament_colour); + CHECK(bundle.project_config.opt("flush_multiplier")->values == seed_flush_multiplier); + CHECK(bundle.project_config.option("curr_bed_type")->getInt() == seed_bed_type); + check_double_vector(bundle.project_config.opt("wipe_tower_x")->values, { 100. }); + CHECK_THAT(bundle.project_config.opt("wipe_tower_rotation_angle")->value, Catch::Matchers::WithinAbs(45., 0.000001)); + + // e) The published path keeps the user's currently-selected presets: same preset, same size. + CHECK(bundle.prints.get_edited_preset().name == pre_load_name); + CHECK(bundle.prints.size() == pre_load_size); + + // f) Non-published control: the overlay is disabled, the file's presets are imported + // instead, and no skipped_keys are produced. + PresetBundle control_bundle; + const size_t control_pre_size = control_bundle.prints.size(); + PublishedConfig control_pub; + control_pub.published = false; + control_pub.published_keys = published_keys; + DynamicPrintConfig control_config = make_file_config(); + Preset::normalize(control_config); + control_bundle.load_config_model("test.3mf", std::move(control_config), Semver(), &control_pub); + + CHECK(control_pub.skipped_keys.empty()); + CHECK(control_bundle.prints.size() > control_pre_size); + // The file's layer_height reached the edited preset via the normal import, not the overlay. + CHECK_THAT(control_bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); +} + +// The published printer overlay is restricted to the publishable retraction/z-hop allowlist: +// matching-size vectors apply, mismatched vectors are reported as skipped, and any other +// printer-class key (e.g. machine_start_gcode) is contract-excluded (never applied, never +// reported). +TEST_CASE("Published 3MF overlays only the allowlisted retraction and z-hop keys onto the edited printer preset", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + Preset::normalize(config); + config.opt("retraction_length")->values = { 1.4 }; // matching size (1 extruder) + config.opt("retraction_speed")->values = { 45., 55. }; // size 2: mismatched + config.opt_string("machine_start_gcode") = "G28 ; from file"; // outside the allowlist + + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + // A recognizable non-default value: the skipped mismatch below must leave it untouched + // (asserting the default instead would silently test PrintConfig's retraction_speed). + bundle.printers.get_edited_preset().config.opt("retraction_speed")->values = { 33. }; + bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") = "G28 ; user"; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length", "retraction_speed", "machine_start_gcode" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Matching-size retraction vector applied; mismatched vector reported as skipped and the + // receiver's own value survives. + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 1.4 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values, { 33. }); + CHECK(contains_key(pub.skipped_keys, "retraction_speed")); + // Contract-excluded printer key: silently ignored, absent from skipped_keys. + CHECK(bundle.printers.get_edited_preset().config.opt_string("machine_start_gcode") == "G28 ; user"); + CHECK_FALSE(contains_key(pub.skipped_keys, "machine_start_gcode")); +} + +// A published 3MF carries per-slot material keys; on load they are applied positionally to the +// receiver's slot N (a key-only entry has no type gate), written onto the slot's stored preset +// in place. +TEST_CASE("Published 3MF applies positional material keys onto the receiver's material presets", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Two filament slots; filament_diameter drives the normalized per-slot vector sizes. + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + // Keep the multi-extruder consistency validation happy for a 2-slot config. + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + // Author per-slot retraction values. These are per-filament override keys that are not + // members of the static PrintRegionConfig, so full_print_config() omits them and they + // must be created explicitly (as nullable, matching the real 3MF project config). + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + config.option("filament_z_hop", true)->values = { 0.2, 0.3 }; + return config; + }; + + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.filament_id = "GFL99"; + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt_string("filament_vendor", 0u) = "Generic"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_settings_id")->values = { "receiver-pla" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.filament_id = "GFT99"; + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt_string("filament_vendor", 0u) = "Generic"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + petg.config.opt("filament_z_hop", true)->values = { 0.1 }; + bundle.filament_presets = { "My PLA", "My PETG" }; + + PublishedMaterialEntry pla_entry; + pla_entry.filament_id = "GFL99"; + pla_entry.slot = 0; // the author's PLA slot + pla_entry.keys = { "filament_retraction_length", "filament_settings_id" }; + PublishedMaterialEntry petg_entry; + petg_entry.filament_id = "GFT99"; + petg_entry.slot = 1; // the author's PETG slot + petg_entry.keys = { "filament_retraction_length", "filament_z_hop" }; + // A slot-less entry (no slot field, only possible in hand-crafted files): silently skipped. + PublishedMaterialEntry noslot_entry; + noslot_entry.filament_type = "ABS"; + noslot_entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { pla_entry, petg_entry, noslot_entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The author's slot values are written onto the receiver's stored presets in place. + check_double_vector(bundle.filaments.find_preset("My PLA")->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My PETG")->config.opt("filament_retraction_length")->values, { 1.2 }); + check_double_vector(bundle.filaments.find_preset("My PETG")->config.opt("filament_z_hop")->values, { 0.3 }); + // Structural keys inside a material entry are silently ignored: the receiver's own + // filament_settings_id is untouched and nothing is reported for it. + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_settings_id")->values == std::vector{ "receiver-pla" }); + CHECK_FALSE(contains_key(pub.skipped_keys, "material:GFL99 (filament_settings_id)")); + // Everything applied; the slot-less entry produced no skipped entry. + CHECK(pub.skipped_keys.empty()); +} + +// A "full publish" slot serializes the whole filament. On load the slot always receives a +// standalone detached copy of the author's material - created even when the receiver's own +// material matches the published type - and no receiver library preset is ever mutated. +TEST_CASE("Published 3MF full-published slots are imported as standalone detached copies", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Two author slots; filament_diameter drives the normalized per-slot vector sizes. + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + return config; + }; + // The full dump of slot 0, publishing the whole filament as type "ABS". + auto make_full_abs_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "ABS"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + + SECTION("type match still creates a detached copy instead of mutating the receiver material") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA", "My PLA" }; + + PublishedMaterialEntry full = make_full_abs_entry(); + full.publish_type_value = "PLA"; // author requires PLA, receiver slot is PLA + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { full }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The type matches, but the import still detaches: the slot lands on a fresh copy + // named from the published type (no identity fields in this entry), carrying the + // author's values; the receiver's own material is untouched. + CHECK(bundle.filament_presets[0] == "PLA"); + Preset *copy = bundle.filaments.find_preset("PLA", false, true); + REQUIRE(copy != nullptr); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> PLA"); + } + + SECTION("type mismatch also detaches: a fresh same-type copy replaces the slot") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &abs = add_inmemory_preset(bundle.filaments, "My ABS"); + abs.config.opt_string("filament_type", 0u) = "ABS"; + abs.config.opt("filament_retraction_length", true)->values = { 0.3 }; + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_abs_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 1); + // No substitution search runs: a brand-new copy named after the published type is + // created and both pre-existing presets stay exactly as they were. + CHECK(bundle.filament_presets[0] == "ABS"); + Preset *copy = bundle.filaments.find_preset("ABS", false, true); + REQUIRE(copy != nullptr); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("My ABS", false, true)->config.opt("filament_retraction_length")->values, { 0.3 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS"); + } + + SECTION("the author's identity rides on the copy when the type has no library match") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PLA"); + other.config.opt_string("filament_type", 0u) = "PLA"; + other.config.opt("filament_retraction_length", true)->values = { 0.7 }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry full = make_full_abs_entry(); + // The dump carries the identity too, so the created copy takes the author's type + // and vendor instead of the baseline clone's. + full.full_keys = { "filament_retraction_length", "filament_type", "filament_vendor" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { full }; + DynamicPrintConfig config = make_file_config(); + // The author's slot 0 really is ABS. + config.opt("filament_type")->values = { "ABS", "PETG" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // No ABS preset needs to exist in the library: the copy carries the author's values, + // type and vendor included. Neither receiver preset was touched. + CHECK(bundle.filament_presets[0] == "ABS"); + Preset *copy = bundle.filaments.find_preset("ABS", false, true); + REQUIRE(copy != nullptr); + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + CHECK(copy->config.opt_string("filament_type", 0u) == "ABS"); + CHECK(copy->config.opt_string("filament_vendor", 0u) == "Generic"); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt_string("filament_type", 0u) == "PLA"); + check_double_vector(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.7 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PLA -> ABS"); + } +} + +// The author's preset name travels in the file and names the created standalone copy (variant +// tail stripped), regardless of what the receiver's library holds: an exact-name library preset +// is never reused nor mutated. +TEST_CASE("Published 3MF imports a full material under the author's stripped name", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "OGFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + + auto add_pla = [](PresetBundle &bundle, const char *name, const char *id, const char *vendor, const char *setting_id) { + Preset &preset = add_inmemory_preset(bundle.filaments, name); + preset.filament_id = id; + preset.setting_id = setting_id; + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt_string("filament_vendor", 0u) = vendor; + preset.config.opt("filament_retraction_length", true)->values = { 0.5 }; + return &preset; + }; + + SECTION("an exact-name library preset exists: a detached copy is created beside it") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "OGFL99"; + entry.filament_vendor = "Generic"; + entry.setting_id = "RcBNzytWgwRrwXXz"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The copy is named after the stripped author name; the receiver's exact-name preset + // keeps its own values. + CHECK(bundle.filament_presets[0] == "Generic PLA"); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("only the name is present (broken/stale ids): the copy is still created") { + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA"); + check_double_vector(bundle.filaments.find_preset("Bambu PLA Basic @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA"); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("grown slot (author slot 1) receives its own detached copy") { + auto two_slot_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "OGFL99", "OGFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 0.8 }; + return config; + }; + + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + add_pla(bundle, "Generic PLA @System", "OGFL99", "Generic", "RcBNzytWgwRrwXXz"); + add_pla(bundle, "Bambu PLA Basic @System", "OGFA00", "Bambu Lab", "zkc85XTKi4cb6cOw"); + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @System"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = two_slot_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "My PETG"); + // The grown slot seeds the receiver's last preset ("My PETG"), then the full material + // detaches onto a copy carrying the author's slot-1 value; "Generic PLA @System" is + // left untouched. + CHECK(bundle.filament_presets[1] == "Generic PLA"); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.8 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 1: My PETG -> Generic PLA"); + CHECK(pub.skipped_keys.empty()); + } +} + +// The stripped author name can collide with an existing library preset ("Generic PLA"): the +// created copy must uniquify with the "(Published)" suffix rather than overwrite, reuse or +// mutate any of the receiver's own presets. +TEST_CASE("Published 3MF uniquifies an imported full material name on collision", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + // A legacy bundle preset literally named "Generic PLA" - collides with the stripped name. + Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + bare.config.opt_string("filament_vendor", 0u) = "Generic"; + bare.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // The author's exact preset. + Preset &qidi = add_inmemory_preset(bundle.filaments, "Generic PLA @Qidi Q2 0.4 nozzle"); + qidi.config.opt_string("filament_type", 0u) = "PLA"; + qidi.config.opt_string("filament_vendor", 0u) = "Generic"; + qidi.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // The Orca library preset. + Preset &sys = add_inmemory_preset(bundle.filaments, "Generic PLA @System"); + sys.config.opt_string("filament_type", 0u) = "PLA"; + sys.config.opt_string("filament_vendor", 0u) = "Generic"; + sys.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @Qidi Q2 0.4 nozzle"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The copy lands beside the collision, suffixed; every pre-existing preset keeps its own + // values. + CHECK(bundle.filament_presets[0] == "Generic PLA (Published)"); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published)", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @Qidi Q2 0.4 nozzle", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA @System", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (Published)"); + CHECK(pub.skipped_keys.empty()); +} + +// The overlay writes onto the edited layer only when that layer survives the load (slot 0's +// preset still matches the edited preset). When the user views a non-first slot's material and +// the published entry targets that slot, the final re-select would destroy the edited layer - +// so the values must land on the stored preset instead and survive. +TEST_CASE("Published 3MF writes to the stored preset when the edited layer is re-selected away", "[Preset][Bundle][Published]") +{ + // Two-slot author config: slot 1 carries the published retraction value. + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFT99", "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.6, 0.9 }; + return config; + }; + + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PETG", "My PLA" }; + // The user is viewing slot 1's material. + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The published values survived on the stored preset (the edited layer was re-selected to + // slot 0's material and must not have been the only copy). + Preset *stored = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(stored != nullptr); + CHECK(stored->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(stored->config.opt("filament_retraction_length")->values, { 0.9 }); + // The load re-selected slot 0's material, mirroring a normal project load. + CHECK(bundle.filaments.get_edited_preset().name == "My PETG"); + // Selecting the slot's material afterwards surfaces the applied values. + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + CHECK(bundle.filaments.get_edited_preset().config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(bundle.filaments.get_edited_preset().config.opt("filament_retraction_length")->values, { 0.9 }); + CHECK(pub.skipped_keys.empty()); +} + +// The created copy is named after the author's preset with the "@variant" tail stripped; +// trailing whitespace left behind by the truncation must be trimmed away, and names without +// a tail pass through unchanged. +TEST_CASE("publish_material_base_name strips the variant tail from a published preset name", "[Preset][Bundle][Published]") +{ + CHECK(publish_material_base_name("Generic PLA @System") == "Generic PLA"); + CHECK(publish_material_base_name("Generic PLA @Qidi Q2 0.4 nozzle") == "Generic PLA"); + // Truncation at '@' leaves the space before the tail; it must not survive. + CHECK(publish_material_base_name("Generic PLA @System") == "Generic PLA"); + CHECK(publish_material_base_name("Voron Generic PLA") == "Voron Generic PLA"); + CHECK(publish_material_base_name("") == ""); + // A tail-only name strips to nothing; the caller falls back to identity fields. + CHECK(publish_material_base_name("@System").empty()); +} + +// A full-published material arrives as a brand-new standalone preset: parentless, visible, +// project-embedded ("Preset Inside Project"), carrying the author's values and colour - and +// never touching any of the receiver's own presets. +TEST_CASE("Published 3MF imports a full material as a detached project-embedded preset", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &spare = add_inmemory_preset(bundle.filaments, "Spare PLA"); + spare.config.opt_string("filament_type", 0u) = "PLA"; + spare.config.opt("filament_retraction_length", true)->values = { 0.4 }; + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The slot lands on the freshly created copy, named after the stripped author name. + CHECK(bundle.filament_presets[0] == "Author PLA"); + Preset *copy = bundle.filaments.find_preset("Author PLA", false, true); + REQUIRE(copy != nullptr); + // Detached + project-embedded contract. + CHECK(copy->is_project_embedded); + CHECK(copy->inherits().empty()); + CHECK(copy->setting_id.empty()); + CHECK(copy->vendor == nullptr); + CHECK_FALSE(copy->is_system); + CHECK_FALSE(copy->is_default); + CHECK_FALSE(copy->is_external); + CHECK(copy->is_visible); + CHECK(copy->filament_id == "AFL01"); + CHECK(copy->config.opt("filament_settings_id")->values == std::vector{ "Author PLA" }); + // The published values and colour live on the copy. + check_double_vector(copy->config.opt("filament_retraction_length")->values, { 0.9 }); + CHECK(copy->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // Universally compatible: no printer/print restrictions survive the import. + CHECK(copy->config.opt("compatible_printers")->values.empty()); + CHECK(copy->config.opt("compatible_prints")->values.empty()); + CHECK(copy->config.opt("compatible_printers_condition")->value.empty()); + CHECK(copy->config.opt("compatible_prints_condition")->value.empty()); + // Nothing pre-existing was touched. + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); + check_double_vector(bundle.filaments.find_preset("Spare PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.4 }); + CHECK(pub.skipped_keys.empty()); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA"); +} + +// Compatibility restrictions riding on the receiver's baseline preset must not leak onto the +// imported copy: a detached full material is usable with every printer and print profile. +TEST_CASE("Published 3MF clears printer restrictions on the imported full material", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &restricted = add_inmemory_preset(bundle.filaments, "Restricted PLA"); + restricted.config.opt_string("filament_type", 0u) = "PLA"; + restricted.config.opt("filament_retraction_length", true)->values = { 0.5 }; + restricted.config.set_key_value("compatible_printers", new ConfigOptionStrings({ "Unrelated Printer" })); + restricted.config.set_key_value("compatible_prints", new ConfigOptionStrings({ "Unrelated Print" })); + restricted.config.option("compatible_printers_condition", true)->value = "printer_settings_id==\"Nope\""; + restricted.config.option("compatible_prints_condition", true)->value = "print_settings_id==\"Nope\""; + bundle.filament_presets = { "Restricted PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The copy (named from the published type; no identity fields) has no restrictions left. + CHECK(bundle.filament_presets[0] == "PLA"); + Preset *copy = bundle.filaments.find_preset("PLA", false, true); + REQUIRE(copy != nullptr); + CHECK(copy->config.opt("compatible_printers")->values.empty()); + CHECK(copy->config.opt("compatible_prints")->values.empty()); + CHECK(copy->config.opt("compatible_printers_condition")->value.empty()); + CHECK(copy->config.opt("compatible_prints_condition")->value.empty()); + // The receiver's own restricted preset keeps its restrictions. + const Preset *original = bundle.filaments.find_preset("Restricted PLA", false, true); + REQUIRE(original != nullptr); + CHECK(original->config.opt("compatible_printers")->values == std::vector{ "Unrelated Printer" }); + CHECK(original->config.opt("compatible_printers_condition")->value == "printer_settings_id==\"Nope\""); + CHECK(pub.skipped_keys.empty()); +} + +// Identical Full materials (same setting_id + preset_name identity) share one created +// instance: an author who pointed several slots at one material gets one standalone copy, +// and the first entry's slot values win. +TEST_CASE("Published 3MF shares one imported copy between identical full slots", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "AFL01", "AFL01" }; + config.option("filament_retraction_length", true)->values = { 0.9, 0.8 }; + return config; + }; + auto make_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PETG"); + other.config.opt_string("filament_type", 0u) = "PETG"; + other.config.opt("filament_retraction_length", true)->values = { 0.65 }; + bundle.filament_presets = { "My PETG", "Other PETG" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry(0), make_entry(1) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Both slots point at the single shared copy; no second "(Published)" instance exists. + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "Author PLA"); + CHECK(bundle.filament_presets[1] == "Author PLA"); + CHECK(bundle.filaments.find_preset("Author PLA", false, true) != nullptr); + CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true) == nullptr); + // The first entry's slot values won. + check_double_vector(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + // Both slots reported, same target; originals untouched. + REQUIRE(pub.material_replacements.size() == 2); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Author PLA"); + CHECK(pub.material_replacements[1] == "slot 1: Other PETG -> Author PLA"); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.6 }); + check_double_vector(bundle.filaments.find_preset("Other PETG", false, true)->config.opt("filament_retraction_length")->values, { 0.65 }); + CHECK(pub.skipped_keys.empty()); +} + +// Without a preset name the copy falls back to the stable material id; fully anonymous +// hand-crafted entries never share instances between slots (their dedup key is slot-scoped). +TEST_CASE("Published 3MF names unidentified full materials from their fallback fields", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + return config; + }; + + SECTION("empty preset_name falls back to the filament_id") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "AFL01"); + CHECK(bundle.filaments.find_preset("AFL01", false, true) != nullptr); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("fully anonymous entries get slot-scoped copies") { + PresetBundle bundle; + Preset &first = add_inmemory_preset(bundle.filaments, "First PLA"); + first.config.opt_string("filament_type", 0u) = "PLA"; + first.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &second = add_inmemory_preset(bundle.filaments, "Second PLA"); + second.config.opt_string("filament_type", 0u) = "PLA"; + second.config.opt("filament_retraction_length", true)->values = { 0.55 }; + bundle.filament_presets = { "First PLA", "Second PLA" }; + + PublishedMaterialEntry entry0; + entry0.slot = 0; + entry0.full = true; + entry0.publish_type = true; + entry0.publish_type_value = "ABS"; // the only naming field present + entry0.full_keys = { "filament_retraction_length" }; + PublishedMaterialEntry entry1 = entry0; + entry1.slot = 1; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry0, entry1 }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // No shared identity: each slot gets its own uniquified copy. + CHECK(bundle.filament_presets[0] == "ABS"); + CHECK(bundle.filament_presets[1] == "ABS (Published)"); + CHECK(bundle.filaments.find_preset("ABS", false, true) != nullptr); + CHECK(bundle.filaments.find_preset("ABS (Published)", false, true) != nullptr); + CHECK(pub.skipped_keys.empty()); + } +} + +// Within-load dedup does not span loads: importing the same published file again into the same +// session creates a second, uniquified copy instead of mutating or reusing the first. +TEST_CASE("Re-importing a published full material uniquifies the second copy", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + bundle.filament_presets = { "My PETG" }; + + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.filament_id = "AFL01"; + entry.setting_id = "Sid000111222"; + entry.preset_name = "Author PLA @Vendor"; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + + for (int round = 0; round < 2; ++round) { + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + if (round == 0) { + CHECK(bundle.filament_presets[0] == "Author PLA"); + CHECK(bundle.filaments.find_preset("Author PLA (Published)", false, true) == nullptr); + } else { + // The second import uniquifies beside the first instead of touching it. + CHECK(bundle.filament_presets[0] == "Author PLA (Published)"); + check_double_vector(bundle.filaments.find_preset("Author PLA (Published)", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Author PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: Author PLA -> Author PLA (Published)"); + } + CHECK(pub.skipped_keys.empty()); + } +} + +// A partially-published slot can carry a curated type and/or colour. The colour is applied +// regardless of the type match; a type mismatch with no same-type replacement keeps the +// receiver's material and reports the slot's keys as skipped. The receiver's slot count grows +// only as far as the highest slot with published content. +TEST_CASE("Published 3MF partial slots apply colour and gate keys by the published type", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PETG" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99" }; + config.option("filament_retraction_length", true)->values = { 0.9, 1.2 }; + return config; + }; + + SECTION("matching type applies the keys and the colour") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Type matched: keys and colour applied onto the receiver's preset in place. + Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(pla_preset != nullptr); + check_double_vector(pla_preset->config.opt("filament_retraction_length")->values, { 0.9 }); + CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); + } + + SECTION("type mismatch without a replacement keeps the material and skips the keys") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "ABS"; // no ABS in the receiver library + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The slot keeps the receiver's material: the colour applies in place, the keys are + // skipped. + CHECK(bundle.filament_presets[0] == "My PLA"); + Preset *pla_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(pla_preset != nullptr); + check_double_vector(pla_preset->config.opt("filament_retraction_length")->values, { 0.5 }); + CHECK(pla_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(contains_key(pub.skipped_keys, "material:ABS (filament_retraction_length)")); + CHECK(pub.material_replacements.empty()); + } + + SECTION("receiver slot count grows to fit the highest published slot and assigns matching type preset") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.8 }; + // The receiver has a single slot; the file carries two, only slot 1 is published. + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.publish_type = true; + entry.publish_type_value = "PETG"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The slot list was grown so author slot 1 has a material (the PETG preset), which + // then receives the author's values in place. + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[1] == "My PETG"); + check_double_vector(bundle.filaments.find_preset("My PETG", false, true)->config.opt("filament_retraction_length")->values, { 1.2 }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + } +} + +// The receiver's slot list grows only as far as the highest published slot: a file whose author +// published nothing (or only a low slot) must not pull filler materials into the receiver's +// setup, and the receiver never grows to the file's count. +TEST_CASE("Published 3MF grows the receiver's slots only as far as the published slots", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Four author slots (a 4-filament model). + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + auto add_pla_preset = [](PresetBundle &bundle) { + Preset &preset = add_inmemory_preset(bundle.filaments, "My PLA"); + preset.config.opt_string("filament_type", 0u) = "PLA"; + preset.config.opt("filament_colour", true)->values = { "#123456" }; + return &preset; + }; + auto make_color_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.publish_color = true; + entry.color = "#ABCDEF"; + return entry; + }; + + // A file whose author published nothing for any slot: the receiver's setup is untouched. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; // no material entries at all + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + CHECK(bundle.filaments.find_preset("My PLA")->config.opt("filament_colour")->values == std::vector{ "#123456" }); + CHECK(pub.skipped_keys.empty()); + } + + // Only slot 0 published: a single-slot receiver keeps its single slot; the file's other + // three slots pull nothing in. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + // The published colour lands on the slot's preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + } + + // Slot 3 published: the receiver grows to 4 so the published slot exists. Unpublished + // filler slots repeat the receiver's last preset ("Add one filament" behaviour). + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(3) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "My PLA"); + // Only "My PLA" exists in the library, so the published slot keeps the aliasing and the + // colour is written onto the shared preset (every slot references it). + CHECK(bundle.filament_presets[3] == "My PLA"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + // The project-level per-slot vectors were grown and seeded: fillers take their preset's + // colour, the published slot its published colour. + CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); + CHECK(bundle.project_config.opt("filament_colour")->values[3] == "#ABCDEF"); + CHECK(bundle.project_config.opt("filament_multi_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour_type")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); + CHECK(bundle.project_config.opt("flush_volumes_matrix")->values.size() == 16); + } + + // Slots 0 and 2 published: the receiver grows to 3, never to the file's 4. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0), make_color_entry(2) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + } + + // A receiver with more slots than the file's filament count keeps its setup: neither the + // preset list nor the project-level vectors are shrunk to the file's smaller size. + { + PresetBundle bundle; + add_pla_preset(bundle); + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + // Distinct project colours make a shrink observable. + bundle.project_config.opt("filament_colour")->values = { "#111111", "#222222", "#333333" }; + bundle.project_config.opt("filament_multi_colour")->values = { "#111111", "#222222", "#333333" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_color_entry(0) }; // highest published slot: 0 + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // A one-filament file: num_filaments (1) is below the receiver's slot count (3). + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + // No shrink: all three project entries survive, with slot 0 synced to the published + // colour at its unshifted index and slots 1-2 untouched. + CHECK(bundle.project_config.opt("filament_colour")->values == std::vector{ "#ABCDEF", "#222222", "#333333" }); + CHECK(bundle.project_config.opt("filament_multi_colour")->values == std::vector{ "#ABCDEF", "#222222", "#333333" }); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 3); + // The published colour still reached slot 0's preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + } +} + +// A published slot is seeded from an unused library preset and the values are written onto it +// in place, so the receiver's own material (slot 0) is never overwritten. +TEST_CASE("Published 3MF grows published slots to the receiver's last preset and recolors it in place", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + // Receiver with its own material plus one more library preset; author publishes only slot 4 + // (Red). Growth always repeats the receiver's last filament ("Add one filament"), so the + // grown slot references the shared "My PLA" preset and the published red recolors it in + // place; the unused "Other PLA" preset is left untouched. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &other = add_inmemory_preset(bundle.filaments, "Other PLA"); + other.config.opt_string("filament_type", 0u) = "PLA"; + other.config.opt("filament_colour", true)->values = { "#654321" }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 3; + entry.publish_color = true; + entry.color = "#ABCDEF"; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + // Every grown slot (published or filler) repeats the receiver's last preset. + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "My PLA"); + // The published red recolors the shared "My PLA" preset in place; the unused "Other PLA" + // preset is left untouched. + CHECK(bundle.filament_presets[3] == "My PLA"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + CHECK(bundle.filaments.find_preset("Other PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#654321" }); + // The project-level colours are sized and seeded for every grown slot. + CHECK(bundle.project_config.opt("filament_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour")->values[1] == "#123456"); + CHECK(bundle.project_config.opt("filament_colour")->values[3] == "#ABCDEF"); + CHECK(bundle.project_config.opt("filament_multi_colour")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_colour_type")->values.size() == 4); + CHECK(bundle.project_config.opt("filament_map")->values.size() == 4); +} + +// Growth always repeats the receiver's last preset; a published slot only lands on its +// material identity when the aliased grown slot is re-pointed (de-alias fires on a preset +// key). Lock the identity priority there: an exact filament_id outranks an arbitrary unused +// preset, and an entry carrying only a family constrains the pick to that family. +TEST_CASE("Published 3MF re-points an aliased grown slot by published identity or family without a type requirement", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + PublishedMaterialEntry entry; + entry.slot = 2; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.keys = { "filament_retraction_length" }; + // An unused preset sorting before everything else: an unconstrained pick would take it. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &arbitrary = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + arbitrary.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + SECTION("an exact filament_id outranks the first unused preset") { + Preset &authored = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + authored.config.opt_string("filament_type", 0u) = "PLA"; + authored.filament_id = "GFA00"; + entry.filament_id = "GFA00"; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Zzz PLA"); + // The exact-id preset outranks the type-only "Aaa PLA"; the re-point is reported. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Zzz PLA"); + } + + SECTION("a family-only entry picks an unused preset of that family") { + Preset &petg = add_inmemory_preset(bundle.filaments, "Bbb PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + entry.filament_type = "PETG"; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + // The family pick lands on the only PETG preset (the PLA presets and the receiver's own + // material lose), and the re-point is reported. + CHECK(bundle.filament_presets[2] == "Bbb PETG"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Bbb PETG"); + } +} + +// The GUI displays the edited preset, a snapshot of the selected collection preset taken at +// selection time. Since the overlay mutates the collection presets in place, the load must +// re-select the first slot's filament so the applied values - and slot replacements - surface +// in the GUI. +TEST_CASE("Published 3MF refreshes the edited preset so the applied material values surface", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + SECTION("the edited preset carries the applied colour and keys") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + // Mirror the GUI: the displayed preset is the collection's edited preset. + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + const Preset &edited = bundle.filaments.get_edited_preset(); + // The slot references the edited preset, so the overlay lands on the edited layer: + // visible as a modification while the stored preset stays untouched. + CHECK(edited.name == "My PLA"); + CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#123456" }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.5 }); + // The overlay is a visible, revertible modification of the edited preset. + CHECK(bundle.filaments.current_is_dirty()); + CHECK(pub.skipped_keys.empty()); + } + + SECTION("a slot replacement is reflected in the edited preset") { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &abs = add_inmemory_preset(bundle.filaments, "My ABS"); + abs.config.opt_string("filament_type", 0u) = "ABS"; + abs.config.opt("filament_retraction_length", true)->values = { 0.3 }; + bundle.filament_presets = { "My PLA" }; + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + PublishedMaterialEntry entry = make_entry(); + entry.publish_type_value = "ABS"; // mismatch: replaced by the library's ABS + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets[0] == "My ABS"); + // The edited preset now displays the replacement with the author's values on top. + const Preset &edited = bundle.filaments.get_edited_preset(); + CHECK(edited.name == "My ABS"); + CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); + } +} + +// The overlay lands on the edited layer when the slot references the collection's edited +// preset, so the user's unsaved in-memory edits on it survive a published load (only the +// published keys are touched) and the change shows as a visible, revertible modification. +TEST_CASE("Published 3MF preserves unsaved edits on the edited filament preset", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + pla.config.opt("filament_z_hop", true)->values = { 0.1 }; + bundle.filament_presets = { "My PLA" }; + REQUIRE(bundle.filaments.select_preset_by_name("My PLA", false)); + + // The user has unsaved in-memory edits on the preset being shown. + bundle.filaments.get_edited_preset().config.opt("filament_z_hop")->values = { 0.7 }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Published values land on the edited layer... + const Preset &edited = bundle.filaments.get_edited_preset(); + CHECK(edited.name == "My PLA"); + CHECK(edited.config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(edited.config.opt("filament_retraction_length")->values, { 0.9 }); + // ...the user's unsaved edit on a non-published key survives... + check_double_vector(edited.config.opt("filament_z_hop")->values, { 0.7 }); + // ...and the stored preset is untouched. + Preset *stored = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(stored != nullptr); + CHECK(stored->config.opt("filament_colour")->values == std::vector{ "#123456" }); + check_double_vector(stored->config.opt("filament_retraction_length")->values, { 0.5 }); + check_double_vector(stored->config.opt("filament_z_hop")->values, { 0.1 }); + // The overlay is a visible, revertible modification of the edited preset. + CHECK(bundle.filaments.current_is_dirty()); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); +} + +// The published overlay must validate '#' variant indices: an out-of-range index is reported as +// skipped and must NOT resize/corrupt the receiver's vector, and a variant suffix on a scalar +// key is rejected instead of silently no-op'd. +TEST_CASE("Published 3MF rejects out-of-range vector variants and variant-suffixed scalar keys", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Vector key, size 2 (matches the receiver's resized vector); distinct values make the + // applied element observable. + config.opt("wiping_volumes_extruders")->values = { 140., 150. }; + config.opt_float("layer_height") = 0.28; + Preset::normalize(config); + + PresetBundle bundle; + bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values = { 10., 20. }; + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "wiping_volumes_extruders#5", "wiping_volumes_extruders#1", "wiping_volumes_extruders#abc", "layer_height#0" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // In-range variant applied element-wise; the out-of-range one did not resize the vector. + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 10., 150. }); + CHECK(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values.size() == 2); + // Out-of-range variant, malformed variant and variant-suffixed scalar are reported as + // skipped; the malformed one must not fall back to element 0. + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders#5")); + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders#abc")); + CHECK(contains_key(pub.skipped_keys, "layer_height#0")); + CHECK_FALSE(contains_key(pub.skipped_keys, "wiping_volumes_extruders#1")); + // The scalar was never applied. + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.1, 0.000001)); +} + +// The print/printer overlay guards option types like the material pass does: a published key +// whose file-side option kind differs from the receiver's is reported as skipped instead of +// throwing ConfigurationError out of load_config_model, which would abort the whole project +// load. (Nullable variants share the type() of their non-nullable base, so this covers +// genuinely different option kinds - e.g. a string where a float vector is expected.) +TEST_CASE("Published 3MF reports type-mismatched keys as skipped instead of aborting", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // The file carries the vector key as a string option (equal size to the receiver's)... + config.set_key_value("wiping_volumes_extruders", new ConfigOptionStrings({ "140", "150" })); + config.opt_float("layer_height") = 0.28; + + PresetBundle bundle; + // ...while the receiver's edited print preset holds the float variant of the same key: + // without the type guard, ConfigOptionVector::set() throws ConfigurationError out of + // load_config_model. + bundle.prints.get_edited_preset().config.set_key_value("wiping_volumes_extruders", new ConfigOptionFloats({ 10., 20. })); + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "wiping_volumes_extruders", "layer_height" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The load completes; the type-mismatched key is reported as skipped and the receiver's + // value is untouched; the matching scalar key still applies. + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, { 10., 20. }); + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 0.000001)); + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); +} + +// A receiver filament preset missing its material identity (hand-edited file) must not crash +// the type gate: the gate reads it as a type mismatch, and the slot falls back to the +// "no replacement" path (keys skipped, colour still applied to the slot's preset). +TEST_CASE("Published 3MF survives a receiver preset missing its material identity", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + Preset::normalize(config); + + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + // Malformed receiver preset: the identity options are missing entirely. + pla.config.erase("filament_type"); + pla.config.erase("filament_vendor"); + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry entry; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFL99"; + entry.slot = 0; + entry.publish_type = true; // exercises the type gate against the missing identity + // Require ABS: the receiver library (PLA-typed default preset, typeless slot preset) has no + // ABS candidate, so the gate falls into the "no replacement" path (a PLA requirement would + // legitimately replace the slot with the visible PLA default). + entry.publish_type_value = "ABS"; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The gate reads the missing identity as a type mismatch; no same-type replacement exists, + // so the keys are skipped while the colour applies to the slot's preset in place. No crash. + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (filament_retraction_length)")); + CHECK(bundle.filament_presets[0] == "My PLA"); + Preset *mine_preset = bundle.filaments.find_preset("My PLA", false, true); + REQUIRE(mine_preset != nullptr); + CHECK(mine_preset->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); +} + +// Lock the exact contents and order of the printer allowlist (the union of the tab's +// "Retraction" and "Z-Hop" optgroup lists, Tab.cpp). +TEST_CASE("Printer publishable allowlist matches the printer tab's Retraction and Z-Hop optgroups", "[Preset][Bundle][Published]") +{ + auto keys_of = [](const std::vector& opts) { + std::vector keys; + keys.reserve(opts.size()); + for (const PublishablePrinterOption& opt : opts) + keys.emplace_back(opt.key); + return keys; + }; + + const std::vector expected_retraction = { + "retraction_length", "retract_restart_extra", "retraction_speed", "deretraction_speed", + "retraction_minimum_travel", "retract_when_changing_layer", "wipe", "wipe_distance", + "retract_before_wipe", "retract_after_wipe" + }; + const std::vector expected_z_hop = { + "retract_lift_enforce", "z_hop_types", "z_hop", "travel_slope", "retract_lift_above", + "retract_lift_below" + }; + + CHECK(keys_of(publishable_printer_retraction_options()) == expected_retraction); + CHECK(keys_of(publishable_printer_z_hop_options()) == expected_z_hop); + + std::set expected_union(expected_retraction.begin(), expected_retraction.end()); + expected_union.insert(expected_z_hop.begin(), expected_z_hop.end()); + CHECK(publishable_printer_keys() == expected_union); +} + +// Loading the same published file twice must not compound values on the receiver's presets: +// each load re-applies the same absolute values, so the result is idempotent. +TEST_CASE("Published 3MF reloading does not compound values on the receiver's presets", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_ids")->values = { "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.9 }; + return config; + }; + auto make_entry = [] { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_color = true; + entry.color = "#ABCDEF"; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + pla.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PLA" }; + + auto load = [&] { + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry() }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + }; + load(); + // First load: the receiver's preset carries the published values (mutated in place). + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + load(); + // Each load re-applies the same values onto the (already mutated) preset: no accumulation. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == std::vector{ "#ABCDEF" }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_retraction_length")->values, { 0.9 }); +} + +// A receiver with several slots aliasing the same preset (multi-extruder profile with one +// filament) and an author publishing keys on several slots: each published slot is re-pointed +// at its own distinct preset so values never leak between slots. +TEST_CASE("Published 3MF gives each published slot its own preset on an aliased receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.6, 0.9, 1.2, 1.5 }; + return config; + }; + auto make_key_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + // A 4-extruder receiver with a single filament preset: the slots alias [A, A, A, A] before + // the published pass. + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // Spare library presets for the re-pointing to fall back on. + for (const char *name : { "Extra PLA A", "Extra PLA B", "Extra PLA C" }) { + Preset &extra = add_inmemory_preset(bundle.filaments, name); + extra.config.opt_string("filament_type", 0u) = "PLA"; + extra.config.opt("filament_retraction_length", true)->values = { 0.5 }; + } + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_key_entry(0), make_key_entry(1), make_key_entry(2), make_key_entry(3) }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 4); + // Every published slot references its own distinct preset: slot 0 keeps the receiver's + // material, slots 1-3 are re-pointed at the spare library presets. + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[2] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[2] != bundle.filament_presets[1]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[0]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[1]); + CHECK(bundle.filament_presets[3] != bundle.filament_presets[2]); + // Each slot's stored preset carries its own slot's retraction (mutated in place). + const std::vector expected = { 0.6, 0.9, 1.2, 1.5 }; + for (size_t slot = 0; slot < 4; ++slot) { + Preset *preset = bundle.filaments.find_preset(bundle.filament_presets[slot], false, true); + REQUIRE(preset != nullptr); + check_double_vector(preset->config.opt("filament_retraction_length")->values, { expected[slot] }); + } + CHECK(pub.skipped_keys.empty()); +} + +// De-aliasing runs on the exported identity even without a checked Type row: the re-pointed +// slot lands on the exact published material (by filament_id) rather than an arbitrary spare, +// and the formerly silent re-point is surfaced through the replacements notification list. +TEST_CASE("Published 3MF de-aliases an aliased slot by published identity without a type requirement", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard", "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99" }; + config.option("filament_retraction_length", true)->values = { 0.6, 0.9 }; + + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + mine.config.opt("filament_retraction_length", true)->values = { 0.5 }; + // A spare sorting before the exact match: an unconstrained pick would take it. + Preset &spare = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + spare.config.opt_string("filament_type", 0u) = "PLA"; + spare.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &match = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + match.config.opt_string("filament_type", 0u) = "PLA"; + match.config.opt("filament_retraction_length", true)->values = { 0.5 }; + match.filament_id = "GFA00"; + bundle.filament_presets = { "My PLA", "My PLA" }; + + PublishedMaterialEntry entry; + entry.slot = 1; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.filament_id = "GFA00"; + entry.keys = { "filament_retraction_length" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] == "Zzz PLA"); + // The published key was written onto the re-pointed slot's own preset. + Preset *target = bundle.filaments.find_preset("Zzz PLA", false, true); + REQUIRE(target != nullptr); + check_double_vector(target->config.opt("filament_retraction_length")->values, { 0.9 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 1: My PLA -> Zzz PLA"); + CHECK(pub.skipped_keys.empty()); +} + +// Printer retraction keys are published per-extruder ("#N"): a receiver with a different +// extruder count still receives the in-range elements; out-of-range variants are reported as +// skipped instead of corrupting the receiver's vector. +TEST_CASE("Published 3MF applies per-extruder printer keys across extruder-count mismatches", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Author has 4 extruders. + config.opt("retraction_length")->values = { 0.6, 0.9, 1.2, 1.5 }; + Preset::normalize(config); + return config; + }; + + // Receiver with a single extruder: only "#0" is in range; "#1..#3" are skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1", "retraction_length#2", "retraction_length#3" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6 }); + CHECK(contains_key(pub.skipped_keys, "retraction_length#1")); + CHECK(contains_key(pub.skipped_keys, "retraction_length#2")); + CHECK(contains_key(pub.skipped_keys, "retraction_length#3")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_length#0")); + } + + // Receiver with four extruders and a 1-extruder author: only "#0" is published; the + // receiver's other extruders keep their own values. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8, 0.8, 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0" }; + DynamicPrintConfig config = make_file_config(); + // The author's file carries a single-extruder value. + config.opt("retraction_length")->values = { 0.7 }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.7, 0.8, 0.8, 0.8 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// A published mixed filament serializes its definition (components, ratios, gradient) into the +// receiver's project_config - the project-level parallel arrays, not a filament preset. The +// mix's own blended colour is carried as publish_color so the receiver renders the swatch. +TEST_CASE("Published 3MF applies a mixed filament definition onto the receiver's project config", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Three author slots: two physical PLA/PETG plus one virtual mixed slot (index 2) + // blending slots 1 and 2 at 60/40 with a gradient. + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFT99", "GFL99" }; + // The mixed slot's definition. These keys are project-level arrays in the full config; + // on export they are masked so only the published slot's entry survives. + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + return config; + }; + + // A receiver that already carries the mix slot at index 2 as an actual mixed slot (e.g. a + // two-physical-plus-one-mix project with the same layout): the incoming definition is a + // like-for-like override of the virtual slot and applies in place without relocation. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + bundle.filament_presets = { "My PLA", "My PETG", "My PLA" }; + + // Grow the receiver's project arrays to 3 slots first, as set_num_filaments would, + // then mark the third slot as the receiver's own mixed filament. + bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.5,0.5"; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition landed in project_config's parallel arrays at the author slot. + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 3); + CHECK(ratios[2] == "0.6,0.4"); + const auto &gradient = bundle.project_config.opt("filament_mixed_gradient")->values; + CHECK(gradient[2]); + const auto &range = bundle.project_config.opt("filament_mixed_gradient_range")->values; + CHECK(range[2] == "0.9,0.1"); + const auto &curve = bundle.project_config.opt("filament_mixed_gradient_curve")->values; + CHECK(curve[2] == "0,0.1|1,0.9"); + const auto &per_part = bundle.project_config.opt("filament_mixed_gradient_per_part")->values; + CHECK(per_part[2]); + // The mix's blended colour crossed into project_config for the swatch. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 3); + CHECK(colour[2] == "#800080"); + // The other slots were not overwritten by the mask. + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + // Nothing skipped: every serialized mixed key was applied. + CHECK(pub.skipped_keys.empty()); + // Like-for-like override: no slot was relocated. + CHECK(pub.material_replacements.empty()); + } + + // A receiver with fewer slots: the slot is grown and seeded before the definition applies. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + PublishedMaterialEntry mix; + mix.slot = 2; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + CHECK(pub.skipped_keys.empty()); + } +} + +// A published mixed filament whose definition cannot be applied is reported as skipped instead +// of aborting the load: the entry lists a mixed key that the file's payload does not carry. +TEST_CASE("Published 3MF reports an unappliable mixed filament definition as skipped", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + // Two author slots (so slot 1 is in range) but the payload omits the mixed arrays: the + // entry lists them, the file config does not. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75 }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + config.opt("filament_type")->values = { "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic" }; + + PublishedMaterialEntry mix; + mix.slot = 1; + mix.keys = { "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grows to two slots; the missing payload keys are reported as skipped rather + // than dropped silently (material_label is empty for this entry). + REQUIRE(bundle.filament_presets.size() == 2); + CHECK(contains_key(pub.skipped_keys, "material: (filament_mixed_components)")); + CHECK(contains_key(pub.skipped_keys, "material: (filament_mixed_sublayer_ratios)")); +} + +// A published mixed filament must never convert one of the receiver's real, physical slots +// into a virtual mix: definitions that collide with a physical slot are relocated past every +// positional (real-filament) destination, while ones colliding with an existing mixed slot +// override it in place. +TEST_CASE("Published 3MF relocates a mixed filament instead of overwriting a physical slot", "[Preset][Bundle][Published]") +{ + // An author project with slots whose last slot is a mixed filament. + auto make_file_config = [](size_t num_author_slots, size_t num_tail_mixes = 1) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + std::vector diameters(num_author_slots, 1.75); + std::vector self_index; + std::vector variants; + std::vector types; + for (size_t i = 0; i < num_author_slots; ++i) { + self_index.push_back(int(i + 1)); + variants.emplace_back("Direct Drive Standard"); + types.push_back(i % 2 == 0 ? "PLA" : "PETG"); + } + config.opt("filament_diameter")->values = diameters; + config.opt("filament_self_index")->values = self_index; + config.opt("filament_extruder_variant")->values = variants; + config.opt("filament_colour")->values = { "#FF0000", "#00AA00", "#0000FF", "#FFFF00", "#800080" }; + config.opt("filament_colour")->values.resize(num_author_slots, "#808080"); + config.opt("filament_type")->values = types; + config.opt("filament_vendor")->values.assign(num_author_slots, "Generic"); + config.opt("filament_ids")->values.resize(num_author_slots); + // The last author slots are mixed ones (components differ per slot so + // the definitions are distinguishable after relocation). + const size_t first_mix_slot = num_author_slots - num_tail_mixes; + config.opt("filament_is_mixed")->values.assign(num_author_slots, 0); + config.opt("filament_mixed_components")->values.assign(num_author_slots, ""); + config.opt("filament_mixed_sublayer_ratios")->values.assign(num_author_slots, ""); + for (size_t i = first_mix_slot; i < num_author_slots; ++i) { + config.opt("filament_is_mixed")->values[i] = 1; + config.opt("filament_mixed_components")->values[i] = + i % 2 == 0 ? std::string("1,2") : std::string("1,3"); + config.opt("filament_mixed_sublayer_ratios")->values[i] = + i % 2 == 0 ? std::string("0.6,0.4") : std::string("0.3,0.7"); + } + return config; + }; + + // The reported bug: an author publishes with physical filaments on slots 1-2 and a mixed + // filament on slot 5; the receiver runs five real filaments of his own. Slot 5 must stay + // untouched and the mix lands as a newly appended virtual slot 6. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.slot = 4; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew by exactly one extra virtual slot. + REQUIRE(bundle.filament_presets.size() == 6); + // All five physical slots kept their meaning: no mixed flag, untouched names/colours. + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 6); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK_FALSE(is_mixed[2]); + CHECK_FALSE(is_mixed[3]); + CHECK_FALSE(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[4] == "My PLA"); + // The definition itself is readable at the new index. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 6); + CHECK(components[5] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 6); + CHECK(ratios[5] == "0.6,0.4"); + // The blended colour seeds the swatch of the new slot only. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 6); + CHECK(colour[5] == "#800080"); + // The relocation is surfaced to the user through the post-import notice (the de-alias + // pass may contribute further messages, so presence is asserted, not the count). + bool relocated_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 4 -> slot 5") != std::string::npos) + relocated_reported = true; + CHECK(relocated_reported); + CHECK(pub.skipped_keys.empty()); + } + + // A definition colliding with the receiver's own mixed filament is overridden in place: + // nothing grows, nothing is reported as moved. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.9,0.1"; + + PublishedMaterialEntry mix; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(3); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 3); + CHECK(ratios[2] == "0.6,0.4"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); + } + + // Author publishes four physical filaments plus two mixed ones on slots 5 and 6; the + // receiver runs five real filaments. Both mixes relocate onto consecutive fresh slots, + // preserving their author order (slot 5 -> slot 6, slot 6 -> slot 7); no receiver slot is + // converted into a virtual mix. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + auto make_mix_entry = [](int authored_slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = authored_slot; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + return entry; + }; + PublishedMaterialEntry mix_a = make_mix_entry(4, "#800080"); + PublishedMaterialEntry mix_b = make_mix_entry(5, "#FF69B4"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix_a, mix_b }; + DynamicPrintConfig config = make_file_config(6, 2); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Two fresh virtual slots were appended. + REQUIRE(bundle.filament_presets.size() == 7); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 7); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[5]); + CHECK(is_mixed[6]); + // The definitions follow their author order. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 7); + CHECK(components[5] == "1,2"); + CHECK(components[6] == "1,3"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 7); + CHECK(ratios[5] == "0.6,0.4"); + CHECK(ratios[6] == "0.3,0.7"); + // The five real slots kept their colours; each mix's blended colour seeded its new slot. + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 7); + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), colour.begin())); + CHECK(colour[5] == "#800080"); + CHECK(colour[6] == "#FF69B4"); + // Both relocations are reported with the correct mapping. + bool a_reported = false, b_reported = false; + for (const std::string &message : pub.material_replacements) { + if (message.find("slot 4 -> slot 5") != std::string::npos) + a_reported = true; + if (message.find("slot 5 -> slot 6") != std::string::npos) + b_reported = true; + } + CHECK(a_reported); + CHECK(b_reported); + CHECK(pub.skipped_keys.empty()); + // The relocation table is exposed for the model-reference remapping. + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(4) == 5); + CHECK(pub.mixed_slot_relocations.at(5) == 6); + } +} + +// A receiver that already owns a MIXED filament must keep the physical-first invariant after a +// published-3MF import: when incoming physical filaments would land on (or ahead of) the +// receiver's mixed slot, that mix is displaced to a fresh tail slot instead of being left +// interleaved with them (the R,M,R bug). +TEST_CASE("Published 3MF relocates the receiver's mixed filament past the incoming physical slots", "[Preset][Bundle][Published]") +{ + // Build the receiver's tool-changer with three slots, the third being the receiver's own + // mixed filament. A SEMM (single_extruder_multi_material) receiver sizes its slot list by + // hand, so a lower slot count than the printer's nozzle count is preserved on load - a + // non-SEMM tool-changer would top the preset list up to the nozzle count and shift the + // expected sizes (the rebalance logic under test is the same either way). + auto make_receiver = [](PresetBundle &bundle, const std::string &components, const std::string &ratios) { + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3, "#123456"); + bundle.printers.get_edited_preset().config.opt("single_extruder_multi_material", true)->value = true; + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = components; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = ratios; + bundle.project_config.opt("filament_colour")->values[2] = "#800080"; + bundle.project_config.opt("filament_multi_colour")->values[2] = "#800080"; + }; + auto make_real_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + // A four-physical author project with no mixed slots (colour publish only), as in the + // reported Ferrari reference file. + auto make_config_4_real = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#000000", "#FFFFFF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + // [R, R, M] + four colour-only physical slots at authored 0..3 -> [R, R, R, R, M]. + { + PresetBundle bundle; + make_receiver(bundle, "1,2", "0.5,0.5"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#000000"), + make_real_entry(2, "#FFFFFF"), make_real_entry(3, "#FFFF00") }; + DynamicPrintConfig config = make_config_4_real(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grows by one extra virtual slot; the mix lands at the tail. + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + // The definition travelled with its swatch colour; the vacated slot 2 became physical. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4] == "1,2"); + CHECK(components[2].empty()); + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 5); + CHECK(colour[4] == "#800080"); + CHECK(colour[2] == "#FFFFFF"); + CHECK(pub.mixed_slot_relocations.at(2) == 4); + bool relocated_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 2 -> slot 4") != std::string::npos && + message.find("mixed filament") != std::string::npos) + relocated_reported = true; + CHECK(relocated_reported); + CHECK(pub.skipped_keys.empty()); + } + + // [R, R, M] plus a payload mix authored at slot 3: the receiver mix (displaced to slot 3) sits + // ahead of the appended payload mix (slot 4), preserving physical-first tail ordering. + { + PresetBundle bundle; + make_receiver(bundle, "1,2", "0.5,0.5"); + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#000000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + // Authored slot 3 is a payload mixed definition blending slots 1 and 3. + config.opt("filament_is_mixed")->values = { 0, 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "1,3" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 0, 1 }; + + PublishedMaterialEntry mix; + mix.slot = 3; + mix.filament_type = "PLA"; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#000000"), + make_real_entry(2, "#0000FF"), mix }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK_FALSE(is_mixed[2]); + CHECK(is_mixed[3]); // receiver's mix, displaced to slot 3 first + CHECK(is_mixed[4]); // payload's mix, appended after + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[3] == "1,2"); + CHECK(components[4] == "1,3"); + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(2) == 3); + CHECK(pub.mixed_slot_relocations.at(3) == 4); + CHECK(pub.skipped_keys.empty()); + } +} + +// Multiple receiver mixed slots interleaved with multiple incoming physical slots all rebalance +// onto consecutive tail slots in index order (no cascade/overlap). +TEST_CASE("Published 3MF rebalances several receiver mixed slots past the physical region", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3, "#123456"); + bundle.printers.get_edited_preset().config.opt("single_extruder_multi_material", true)->value = true; + // Receiver: slot 1 and slot 2 are mixed. + bundle.project_config.opt("filament_is_mixed")->values[1] = 1; + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[1] = "1,2"; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,3"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[1] = "0.5,0.5"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.4,0.6"; + + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#00AA00", "#0000FF" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99" }; + + auto make_real_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_real_entry(0, "#FF0000"), make_real_entry(1, "#00AA00"), make_real_entry(2, "#0000FF") }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 3; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[3]); + CHECK(is_mixed[4]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[3] == "1,2"); + CHECK(components[4] == "1,3"); + REQUIRE(pub.mixed_slot_relocations.size() == 2); + CHECK(pub.mixed_slot_relocations.at(1) == 3); + CHECK(pub.mixed_slot_relocations.at(2) == 4); + CHECK(pub.skipped_keys.empty()); +} + +// The receiver's printer gates how many PHYSICAL filament slots a published 3MF may add: a +// non-SEMM tool-changer feeds filament N from nozzle N, so a published slot past the nozzle +// count cannot become a physical filament. It becomes an empty mixed-filament placeholder +// instead - a virtual tail slot the GUI flags (broken mix) and the user fills with components +// from their own filaments. SEMM receivers keep the ungated behaviour. +TEST_CASE("Published 3MF turns a surplus slot past the printer's filament capacity into an empty mixed placeholder", "[Preset][Bundle][Published]") +{ + // An author project with physical slots, no mixed ones. + auto make_file_config = [](size_t num_author_slots) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + std::vector diameters(num_author_slots, 1.75); + std::vector self_index; + std::vector variants; + for (size_t i = 0; i < num_author_slots; ++i) { + self_index.push_back(int(i + 1)); + variants.emplace_back("Direct Drive Standard"); + } + config.opt("filament_diameter")->values = diameters; + config.opt("filament_self_index")->values = self_index; + config.opt("filament_extruder_variant")->values = variants; + config.opt("filament_colour")->values.resize(num_author_slots, "#808080"); + config.opt("filament_type")->values.assign(num_author_slots, "PLA"); + config.opt("filament_vendor")->values.assign(num_author_slots, "Generic"); + config.opt("filament_ids")->values.resize(num_author_slots); + return config; + }; + // A non-SEMM receiver with nozzles running copies of one preset. + auto make_receiver = [](PresetBundle &bundle, size_t nozzles, size_t slots) { + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(slots, "My PLA"); + bundle.set_num_filaments(slots, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(nozzles, 0.4); + }; + auto make_physical_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + return entry; + }; + + // The reported case: an author publishes with a filament on slot 5; the receiver is a + // 4-filament tool-changer. The receiver keeps its four physical slots and the surplus + // material lands as an empty mixed placeholder at the tail. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew by exactly one virtual slot, not a fifth physical one. + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + // The placeholder carries no definition: the GUI's integrity check flags it and + // blocks slicing until the user assigns components. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4].empty()); + // The four physical slots kept their meaning and colours. + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[3] == "My PLA"); + // The published colour seeds the placeholder's swatch. + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + // The conversion is surfaced through the post-import notice. + bool placeholder_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("unassigned mixed filament") != std::string::npos) + placeholder_reported = true; + CHECK(placeholder_reported); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.mixed_slot_relocations.empty()); + } + + // Two surplus slots (5 and 6) become two consecutive empty placeholders. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF"), make_physical_entry(5, "#F0F0F0") }; + DynamicPrintConfig config = make_file_config(6); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 6); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 6); + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 6); + CHECK(components[4].empty()); + CHECK(components[5].empty()); + const auto &colour = bundle.project_config.opt("filament_colour")->values; + REQUIRE(colour.size() == 6); + CHECK(colour[4] == "#ABCDEF"); + CHECK(colour[5] == "#F0F0F0"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.mixed_slot_relocations.empty()); + } + + // A surplus slot past both the receiver's list and the capacity packs onto the next free + // tail slot (never max(authored, next_free), which would grow filler physical slots past + // the capacity), and the relocation is recorded for the model-reference remapping. + { + PresetBundle bundle; + make_receiver(bundle, 2, 2); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(3, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(4); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 3); + CHECK_FALSE(is_mixed[0]); + CHECK_FALSE(is_mixed[1]); + CHECK(is_mixed[2]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 3); + CHECK(components[2].empty()); + REQUIRE(pub.mixed_slot_relocations.size() == 1); + CHECK(pub.mixed_slot_relocations.at(3) == 2); + bool relocation_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 3 -> slot 2") != std::string::npos && + message.find("unassigned mixed filament") != std::string::npos) + relocation_reported = true; + CHECK(relocation_reported); + CHECK(pub.skipped_keys.empty()); + } + + // A Full Publish entry past the capacity becomes a placeholder too: no standalone + // detached copy is created for a material that got no physical slot. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedMaterialEntry entry = make_physical_entry(4, "#ABCDEF"); + entry.full = true; + entry.preset_name = "Generic PLA @System"; + entry.filament_id = "GFL99"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK(is_mixed[4]); + // No detached copy under the stripped name or its uniquified forms. + CHECK(bundle.filaments.find_preset("Generic PLA", false, true) == nullptr); + CHECK(bundle.filaments.find_preset("Generic PLA (Published)", false, true) == nullptr); + CHECK(pub.skipped_keys.empty()); + } + + // A SEMM receiver (the default printer preset) sizes its slot list by hand: the published + // slot past the nozzle count still grows physically, as before the capacity gate. + { + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(4, "#123456"); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + CHECK(pub.skipped_keys.empty()); + } + + // A pre-existing oversized slot list is never shrunk: a published entry pointing at one + // of its slots is applied positionally even though the list exceeds the nozzle count. + { + PresetBundle bundle; + make_receiver(bundle, 4, 5); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(4, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(5); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + for (size_t i = 0; i < 5; ++i) + CHECK_FALSE(is_mixed[i]); + // The published colour reached the addressed slot's (shared) preset in place. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#ABCDEF" }); + CHECK(bundle.project_config.opt("filament_colour")->values[4] == "#ABCDEF"); + CHECK(pub.skipped_keys.empty()); + } + + // On a single-physical-slot receiver an empty mix could never be edited (the sidebar's + // mixed section needs two physical filaments), so the surplus entry is dropped and + // reported instead of becoming an unfixable placeholder. + { + PresetBundle bundle; + make_receiver(bundle, 1, 1); + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_physical_entry(1, "#ABCDEF") }; + DynamicPrintConfig config = make_file_config(2); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets.size() == 1); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 1); + CHECK_FALSE(is_mixed[0]); + REQUIRE(pub.skipped_keys.size() == 1); + CHECK(pub.skipped_keys.front().find("printer supports only 1") != std::string::npos); + } + + // A payload mixed definition is exempt from the capacity gate: mixes are virtual slots + // that consume no nozzle, so a published mix past the nozzle count still lands. + { + PresetBundle bundle; + make_receiver(bundle, 4, 4); + + PublishedMaterialEntry mix; + mix.slot = 4; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(5); + config.opt("filament_is_mixed")->values.assign(5, 0); + config.opt("filament_mixed_components")->values.assign(5, ""); + config.opt("filament_mixed_sublayer_ratios")->values.assign(5, ""); + config.opt("filament_is_mixed")->values[4] = 1; + config.opt("filament_mixed_components")->values[4] = "1,2"; + config.opt("filament_mixed_sublayer_ratios")->values[4] = "0.6,0.4"; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 5); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 5); + CHECK(is_mixed[4]); + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 5); + CHECK(components[4] == "1,2"); + const auto &ratios = bundle.project_config.opt("filament_mixed_sublayer_ratios")->values; + REQUIRE(ratios.size() == 5); + CHECK(ratios[4] == "0.6,0.4"); + CHECK(pub.skipped_keys.empty()); + } +} + +// A single-extruder receiver collapses the author's per-extruder printer slots onto its single +// slot: the first serialized variant of a base key is applied, the remaining variants of that +// base key are reported as skipped. +TEST_CASE("Published 3MF collapses a multi-extruder publish onto a single-extruder receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + // Author has two extruders. + config.opt("retraction_length")->values = { 0.6, 0.9 }; + config.opt("retraction_speed")->values = { 30.0, 40.0 }; + Preset::normalize(config); + return config; + }; + + // Both extruders published: the first serialized variant (#0, left) lands on the receiver's + // single slot; the second variant (#1) is reported as skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + bundle.printers.get_edited_preset().config.opt("retraction_speed")->values = { 25.0 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1", "retraction_speed#0", "retraction_speed#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6 }); + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_speed")->values, { 30.0 }); + CHECK(contains_key(pub.skipped_keys, "retraction_length#1")); + CHECK(contains_key(pub.skipped_keys, "retraction_speed#1")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_length#0")); + CHECK_FALSE(contains_key(pub.skipped_keys, "retraction_speed#0")); + } + + // Only the second extruder published: the single-extruder receiver still applies it (the + // author's "right" is the only serialized slot) and reports nothing skipped. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.9 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// A multi-extruder "similar setup" receiver overrides each published extruder slot element-wise +// (no collapsing): each '#N' variant applies to the matching receiver slot, out-of-range ones are +// reported as skipped. +TEST_CASE("Published 3MF overrides each extruder slot on a similar multi-extruder receiver", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00" }; + // Author has two extruders. + config.opt("retraction_length")->values = { 0.6, 0.9 }; + Preset::normalize(config); + return config; + }; + + // Receiver with two extruders: both published slots override element-wise. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6, 0.9 }); + CHECK(pub.skipped_keys.empty()); + } + + // Receiver with three extruders: slots 0 and 1 override, slot 2 keeps its own value. + { + PresetBundle bundle; + bundle.printers.get_edited_preset().config.opt("retraction_length")->values = { 0.8, 0.8, 0.7 }; + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "retraction_length#0", "retraction_length#1" }; + DynamicPrintConfig config = make_file_config(); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.printers.get_edited_preset().config.opt("retraction_length")->values, { 0.6, 0.9, 0.7 }); + CHECK(pub.skipped_keys.empty()); + } +} + +// The nozzle-count top-up in update_multi_material_filament_presets() grows filament_presets on +// its own, so a physical count derived from that list reports a slot no per-filament array has +// yet. That is what made the extruder-count handler conclude there was nothing to add and leave +// the new sidebar combo with no colour to draw. +TEST_CASE("The physical filament count is not fooled by a lone filament_presets top-up", "[Preset][Bundle][FilamentMixer]") +{ + PresetBundle bundle; + + SECTION("no mixed slots") { + bundle.set_num_filaments(4u, std::string("#FF0000")); + bundle.printers.get_edited_preset().config.option("nozzle_diameter", true)->values = + { 0.4, 0.4, 0.4, 0.4, 0.4 }; + bundle.update_multi_material_filament_presets(); + + REQUIRE(bundle.filament_presets.size() == 5); // the top-up moved this list on its own + REQUIRE(bundle.project_config.option("filament_colour")->values.size() == 4); + CHECK(bundle.num_physical_filaments() == 4); + } + + SECTION("behind a mixed tail") { + bundle.set_num_filaments(5u, std::string("#FF0000")); + bundle.project_config.option("filament_is_mixed")->values = + { false, false, false, false, true }; + bundle.printers.get_edited_preset().config.option("nozzle_diameter", true)->values = + { 0.4, 0.4, 0.4, 0.4, 0.4, 0.4 }; + bundle.update_multi_material_filament_presets(); + + REQUIRE(bundle.filament_presets.size() == 6); + REQUIRE(bundle.project_config.option("filament_colour")->values.size() == 5); + CHECK(bundle.num_physical_filaments() == 4); + CHECK(bundle.num_mixed_filaments() == 1); + } +} + +// Which slots are new is a fact about the per-filament arrays, not about filament_presets, for the +// same reason. Keyed off the wrong one, a freshly opened slot silently keeps filament 1's colour. +TEST_CASE("New filament colours are placed by array position", "[Preset][Bundle][FilamentMixer]") +{ + PresetBundle bundle; + bundle.set_num_filaments(4u, std::string("#FF0000")); + bundle.printers.get_edited_preset().config.option("nozzle_diameter", true)->values = + { 0.4, 0.4, 0.4, 0.4, 0.4 }; + bundle.update_multi_material_filament_presets(); + REQUIRE(bundle.filament_presets.size() == 5); + REQUIRE(bundle.project_config.option("filament_colour")->values.size() == 4); + + // The call Sidebar::add_custom_filament makes once the extruder count opens a slot. + bundle.set_num_filaments(5u, std::string("#00FF00")); + + const auto &colours = bundle.project_config.option("filament_colour")->values; + REQUIRE(colours.size() == 5); + CHECK(colours[4] == "#00FF00"); // not colours[0], which resize() would have padded with +} + +// The mixed-slot flags are written into the app config on exit and read back on the next start. +// If the read side loses them the slots survive as filaments but stop being mixes, so the project +// comes back with the mix showing as an ordinary physical filament. +TEST_CASE("A saved mix is still a mix after an app restart", "[Preset][Bundle][FilamentMixer]") +{ + AppConfig app_config; + + // Last session: a 4-tool project carrying one mix of filaments 2 and 3 at the tail. + { + PresetBundle bundle; + add_inmemory_preset(bundle.printers, "Test Printer"); + bundle.printers.select_preset_by_name("Test Printer", true); + add_inmemory_preset(bundle.filaments, "Test Filament"); + bundle.filaments.select_preset_by_name("Test Filament", true); + bundle.set_num_filaments(5u, std::string("#FF0000")); + bundle.filament_presets.assign(5, "Test Filament"); + bundle.project_config.option("filament_is_mixed")->values = + { false, false, false, false, true }; + bundle.project_config.option("filament_mixed_components")->values = + { "", "", "", "", "2,3" }; + bundle.export_selections(app_config); + + REQUIRE(app_config.get_printer_setting("Test Printer", "filament_is_mixed") == "0,0,0,0,1"); + } + + // This session. + PresetBundle bundle; + add_inmemory_preset(bundle.printers, "Test Printer"); + add_inmemory_preset(bundle.filaments, "Test Filament"); + bundle.load_selections(app_config); + + CHECK(bundle.filament_presets.size() == 5); + CHECK(bundle.num_mixed_filaments() == 1); + CHECK(bundle.is_mixed_filament(4)); + CHECK(bundle.project_config.option("filament_mixed_components")->values[4] == "2,3"); +} + +// The same restart, on the printer shape that actually shows the bug: a 4-tool changer whose +// saved filament list is one longer than its nozzle count, because the extra slot is the mix. +TEST_CASE("A saved mix survives a restart on a multi-tool printer", "[Preset][Bundle][FilamentMixer]") +{ + auto make_toolchanger = [](PresetBundle &bundle) -> Preset & { + Preset &p = add_inmemory_preset(bundle.printers, "Tool Changer"); + p.config.option("nozzle_diameter", true)->values = { 0.4, 0.4, 0.4, 0.4 }; + p.config.option("single_extruder_multi_material", true)->value = false; + return p; + }; + + AppConfig app_config; + { + PresetBundle bundle; + make_toolchanger(bundle); + bundle.printers.select_preset_by_name("Tool Changer", true); + add_inmemory_preset(bundle.filaments, "Test Filament"); + bundle.filaments.select_preset_by_name("Test Filament", true); + bundle.set_num_filaments(5u, std::string("#FF0000")); + bundle.filament_presets.assign(5, "Test Filament"); + bundle.project_config.option("filament_is_mixed")->values = + { false, false, false, false, true }; + bundle.project_config.option("filament_mixed_components")->values = + { "", "", "", "", "1,2" }; + bundle.export_selections(app_config); + REQUIRE(app_config.get_printer_setting("Tool Changer", "filament_is_mixed") == "0,0,0,0,1"); + } + + PresetBundle bundle; + make_toolchanger(bundle); + add_inmemory_preset(bundle.filaments, "Test Filament"); + bundle.load_selections(app_config); + + CHECK(bundle.filament_presets.size() == 5); + CHECK(bundle.num_mixed_filaments() == 1); + CHECK(bundle.is_mixed_filament(4)); + + SECTION("and through the GUI startup calls that follow it") { + // GUI_App::load_current_presets sizes the list for a non-SEMM printer, growing only. + const size_t target = 4u + bundle.num_mixed_filaments(); + if (target > bundle.filament_presets.size()) + bundle.set_num_filaments(target); + CHECK(bundle.num_mixed_filaments() == 1); + + // TabPrinter::extruders_count_changed. + bundle.on_extruders_count_changed(4); + CHECK(bundle.num_mixed_filaments() == 1); + + // Tab::select_preset re-reads the snapshot when remember_printer_config is on. + bundle.update_selections(app_config); + CHECK(bundle.filament_presets.size() == 5); + CHECK(bundle.num_mixed_filaments() == 1); + CHECK(bundle.is_mixed_filament(4)); + } +} + +// The startup sizing in GUI_App::load_current_presets targets the nozzle count plus the mixes. +// That is a floor, never a ceiling: set_num_filaments() trims at the raw tail, which is exactly +// where the mixes live, so applying the target to a longer list deletes them. A list longer than +// the target is reachable - raising the extruder count without saving the printer preset leaves +// the extra physical slot behind on the next start - so the startup sizing must only ever grow. +TEST_CASE("Sizing down to the nozzle count plus mixes is what eats the mixed tail", "[Preset][Bundle][FilamentMixer]") +{ + // 5 physical + 1 mix, on a printer preset still reporting 4 nozzles. + const size_t nozzle_count = 4; + PresetBundle bundle; + bundle.set_num_filaments(6u, std::string("#FF0000")); + bundle.project_config.option("filament_is_mixed")->values = + { false, false, false, false, false, true }; + bundle.project_config.option("filament_mixed_components")->values = + { "", "", "", "", "", "1,2" }; + REQUIRE(bundle.num_physical_filaments() == 5); + + const size_t target = nozzle_count + bundle.num_mixed_filaments(); + REQUIRE(target < bundle.filament_presets.size()); + + SECTION("applied as written, the mix is gone and every slot reads physical") { + bundle.set_num_filaments(target); + + CHECK(bundle.filament_presets.size() == target); + CHECK(bundle.num_mixed_filaments() == 0); + CHECK(bundle.num_physical_filaments() == target); + } + + SECTION("applied as a floor, the mix is left alone") { + if (target > bundle.filament_presets.size()) + bundle.set_num_filaments(target); + + CHECK(bundle.filament_presets.size() == 6); + CHECK(bundle.num_mixed_filaments() == 1); + CHECK(bundle.is_mixed_filament(5)); + CHECK(bundle.project_config.option("filament_mixed_components")->values[5] == "1,2"); + } +} + +// After a published-3MF import relocated mixed-filament definitions, the freshly loaded +// model's slot references must follow: object/volume "extruder" configs and multi-material +// color-painting states (which store the one-based slot number) are re-pointed to where each +// definition landed; everything else keeps its state. +TEST_CASE("remap_model_filament_slots repoints extruder configs and color painting", "[Preset][Bundle][Published]") +{ + auto make_model = [] { + Model model; + ModelObject *object_a = model.add_object(); + object_a->name = "relocated mix"; + ModelVolume *vol_a = object_a->add_volume(make_cube(10., 10., 10.)); + vol_a->config.set_key_value("extruder", new ConfigOptionInt(5)); // author slot 5 (0-based 4) + // Author painted one facet with the mix (slot 5) and another with a physical (slot 2). + { + TriangleSelector selector(vol_a->mesh()); + selector.set_facet(0, EnforcerBlockerType(5)); + selector.set_facet(1, EnforcerBlockerType(2)); + vol_a->mmu_segmentation_facets.set_data(selector.serialize()); + } + // A second object that does not reference the relocated slot at all. Painted with a + // real, non-relocated state (NONE is never serialized: an unsplit triangle without a + // state is the unpainted default and is skipped by TriangleSelector::serialize()). + ModelObject *object_b = model.add_object(); + object_b->name = "untouched"; + object_b->config.set_key_value("extruder", new ConfigOptionInt(1)); + ModelVolume *vol_b = object_b->add_volume(make_cube(5., 5., 5.)); + vol_b->config.set_key_value("extruder", new ConfigOptionInt(2)); + { + TriangleSelector selector(vol_b->mesh()); + selector.set_facet(0, EnforcerBlockerType(2)); + vol_b->mmu_segmentation_facets.set_data(selector.serialize()); + } + return model; + }; + + const std::map relocations = {{4, 5}}; + + Model model = make_model(); + Slic3r::remap_model_filament_slots(model, relocations); + + const ModelVolume *vol_a = model.objects[0]->volumes.front(); + CHECK(vol_a->config.extruder() == 6); // author slot 5 -> final slot 6 + // Painted states follow: the mix facet moved 5 -> 6, the physical one is untouched. + REQUIRE(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(6))); + REQUIRE_FALSE(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(5))); + CHECK(TriangleSelector::has_facets(vol_a->mmu_segmentation_facets.get_data(), EnforcerBlockerType(2))); + + const ModelVolume *vol_b = model.objects[1]->volumes.front(); + CHECK(vol_b->config.extruder() == 2); + // The untouched volume's paint (a non-relocated state) survives as-is. + CHECK(TriangleSelector::has_facets(vol_b->mmu_segmentation_facets.get_data(), EnforcerBlockerType(2))); + + // The mapping is applied simultaneously: each entry reads the original slot number, so + // relocating onto another relocated-from slot number must not chase chains. With the + // 0-based relocations {3->4, 4->6} the 1-based config map is {4->5, 5->7}: a volume on + // 1-based slot 4 lands on 5 and does NOT continue to 7. + Model chained = make_model(); + chained.objects[0]->volumes.front()->config.set_key_value("extruder", new ConfigOptionInt(4)); + Slic3r::remap_model_filament_slots(chained, std::map{{3, 4}, {4, 6}}); + CHECK(chained.objects[0]->volumes.front()->config.extruder() == 5); + // The chained model's paint follows its own single-step mapping: painted state 5 -> 7, + // and nothing lands back on 5. + CHECK(TriangleSelector::has_facets(chained.objects[0]->volumes.front()->mmu_segmentation_facets.get_data(), + EnforcerBlockerType(7))); + CHECK_FALSE(TriangleSelector::has_facets(chained.objects[0]->volumes.front()->mmu_segmentation_facets.get_data(), + EnforcerBlockerType(5))); +} + +// The slot ceiling (EnforcerBlockerType::ExtruderMax) is what the color-painting encoding can +// address, so a mixed filament that does not fit must be dropped and reported instead of being +// forced onto one of the receiver's physical filaments. +TEST_CASE("Published 3MF drops a mixed filament that does not fit the slot limit and reports it", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + // A receiver already at the format's slot ceiling. + bundle.set_num_filaments(unsigned(EnforcerBlockerType::ExtruderMax), "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.slot = int(EnforcerBlockerType::ExtruderMax) + 6; // beyond the ceiling + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // Nothing grew and no slot became a virtual mix. + REQUIRE(bundle.filament_presets.size() == size_t(EnforcerBlockerType::ExtruderMax)); + for (size_t i = 0; i < bundle.filament_presets.size(); ++i) + CHECK_FALSE(bundle.is_mixed_filament(i)); + // The receiver's colours were not touched. + CHECK(bundle.project_config.opt("filament_colour")->values == receiver_colours); + // The mix was reported instead of being applied. + REQUIRE(contains_key(pub.skipped_keys, "material:PLA (mixed filament definition: filament slot limit reached)")); + CHECK(pub.material_replacements.empty()); +} + +// The publish dialog can only produce definitions whose components reference existing physical +// slots, so a payload whose components point at slots that do not exist (or at another mixed +// slot) or that carries fewer than two components is broken. The load reports it through the +// same channel as every other rejected input instead of shipping a mix the GUI integrity check +// would only flag later. +TEST_CASE("Published 3MF rejects a mixed filament definition with impossible components", "[Preset][Bundle][Published]") +{ + // A two-physical-plus-one-mix author file; the definition under test sits on slot 2. + auto make_file_config = [](const std::string &components) { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", components }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + return config; + }; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + + for (const char *components : { "1,4", "1,3", "1" }) { + // The claimed components: "1,4" names a slot past the final count, "1,3" names the mix + // slot itself (1-based), "1" is not enough components to blend. + INFO("components = " << components); + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + bundle.filament_presets = { "My PLA" }; + + mix.keys = { "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = make_file_config(components); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition was rejected, not applied: the grown slot is finalized as an empty + // mixed placeholder instead of keeping the seeded preset and masquerading as a real + // filament. + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.is_mixed_filament(2)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[2].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2].empty()); + // Reported through the shared rejection channel. + if (std::string(components) == "1") + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); + else + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: components reference missing slots)")); + // The slot change was surfaced like the other slot adaptations. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0].find("slot 2: mixed filament definition could not be imported") != std::string::npos); + // The blended colour was not written into the (shared) slot preset either. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#123456" }); + } +} + +// The reported scenario: an author publishes two mixed filaments whose components are +// full-published physical slots; the receiver is a smaller tool-changer, so some of those +// component slots become empty mixed placeholders. A mix whose component turned into a +// placeholder can never be valid (mixes cannot reference mixes): it is rejected, and its +// grown slot must be finalized as an empty mixed placeholder too - not keep the seeded +// preset and masquerade as a real filament carrying the mix identity. +TEST_CASE("Published 3MF finalizes a mixed filament rejected over a placeholder component as an empty placeholder", "[Preset][Bundle][Published]") +{ + // An author project: six physical slots plus two tail mixes, the second referencing the + // sixth physical slot (H2C-style: slot 7 = 1+2, slot 8 = 2+6). + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = std::vector(8, 1.75); + config.opt("filament_self_index")->values = { 1, 2, 3, 4, 5, 6, 7, 8 }; + config.opt("filament_extruder_variant")->values = std::vector(8, "Direct Drive Standard"); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00", + "#FF00FF", "#00FFFF", "#800080", "#804000" }; + config.opt("filament_type")->values.assign(8, "PLA"); + config.opt("filament_vendor")->values.assign(8, "Generic"); + config.opt("filament_is_mixed")->values = { 0, 0, 0, 0, 0, 0, 1, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "", "", "", "1,2", "2,6" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "", "", "", "0.6,0.4", "0.5,0.5" }; + // The export always serializes all seven masked mixed arrays, not just the ones in + // use; the unused gradient arrays ride along as defaults. + config.opt("filament_mixed_gradient")->values = { 0, 0, 0, 0, 0, 0, 0, 0 }; + config.opt("filament_mixed_gradient_range")->values.assign(8, ""); + config.opt("filament_mixed_gradient_curve")->values.assign(8, ""); + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 0, 0, 0, 0, 0, 0 }; + return config; + }; + // A non-SEMM receiver with four nozzles and four slots (tool-changer style). + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(4, "My PLA"); + bundle.set_num_filaments(4, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(4, 0.4); + + auto make_full_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.full = true; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + auto make_mix_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.filament_vendor = "Generic"; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + return entry; + }; + + // The dialog's emit order: the full-published physical slots (1, 2, 5, 6) and both mixes. + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_entry(0), make_full_entry(1), make_full_entry(4), make_full_entry(5), + make_mix_entry(6, "#800080"), make_mix_entry(7, "#804000") }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The receiver grew to the author's slot count, all virtual territory at the tail. + REQUIRE(bundle.filament_presets.size() == 8); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 8); + // Slots 0-3 stayed physical; authored slots 5 and 6 (0-based 4 and 5) became capacity + // placeholders. + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[4].empty()); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[5].empty()); + // The first mix applied onto its uncontended tail slot. + CHECK(is_mixed[6]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[6] == "1,2"); + // The second mix was rejected - its second component (authored slot 6) turned into a + // placeholder - and its slot was finalized as an empty mixed placeholder instead of + // keeping the seeded preset as a phantom real filament. + CHECK(is_mixed[7]); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[7].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[7].empty()); + REQUIRE(pub.skipped_keys.size() == 1); + CHECK(pub.skipped_keys[0] == "material:PLA (mixed filament definition: components reference missing slots)"); + // Two Full Publish detach lines (slots 0-1), two capacity placeholder lines (slots 4-5), + // and the rejected mix's finalization line (slot 7). + REQUIRE(pub.material_replacements.size() == 5); + CHECK(std::any_of(pub.material_replacements.begin(), pub.material_replacements.end(), + [](const std::string &line) { + return line.find("slot 7: mixed filament definition could not be imported") != std::string::npos; + })); +} + +// The receiver must not overflow its physical capacity when it grows slots to reach a published +// mixed definition: an unpublished mixed slot that lands as a gap past the nozzle count becomes +// an empty mixed placeholder, not a physical filament. An author with six physical slots (0-5) +// and two tail mixes (slots 6 and 7) publishes only 0-5 and 7; the receiver has four nozzles. +// Slots 4 and 5 become surplus placeholders, slot 7 keeps its authored mix position, and the +// unpublished gap slot 6 is finalized as a virtual placeholder - never a fifth physical slot. +TEST_CASE("Published 3MF turns an unpublished gap slot past the printer's capacity into an empty mixed placeholder", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets.assign(4, "My PLA"); + bundle.set_num_filaments(4, "#123456"); + auto &printer_config = bundle.printers.get_edited_preset().config; + printer_config.opt("single_extruder_multi_material", true)->value = false; + printer_config.opt("nozzle_diameter", true)->values.assign(4, 0.4); + + // 8 authored slots: 0-5 physical, 6 unpublished mixed, 7 published mixed. The payload masks + // the unpublished slot's mixed flag (filter_published_config), so slot 6 reads as physical. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = std::vector(8, 1.75); + config.opt("filament_self_index")->values = { 1, 2, 3, 4, 5, 6, 7, 8 }; + config.opt("filament_extruder_variant")->values = std::vector(8, "Direct Drive Standard"); + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00", + "#FF00FF", "#00FFFF", "#800080", "#804000" }; + config.opt("filament_type")->values.assign(8, "PLA"); + config.opt("filament_vendor")->values.assign(8, "Generic"); + config.opt("filament_is_mixed")->values = { 0, 0, 0, 0, 0, 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "", "", "", "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "", "", "", "", "", "0.5,0.5" }; + config.opt("filament_mixed_gradient")->values = std::vector(8, 0); + config.opt("filament_mixed_gradient_range")->values.assign(8, ""); + config.opt("filament_mixed_gradient_curve")->values.assign(8, ""); + config.opt("filament_mixed_gradient_per_part")->values = std::vector(8, 0); + + auto make_full_entry = [](int slot) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.full = true; + entry.full_keys = { "filament_retraction_length" }; + return entry; + }; + auto make_mix_entry = [](int slot, const char *color) { + PublishedMaterialEntry entry; + entry.slot = slot; + entry.filament_type = "PLA"; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_full_entry(0), make_full_entry(1), make_full_entry(2), make_full_entry(3), + make_full_entry(4), make_full_entry(5), make_mix_entry(7, "#804000") }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 8); + const auto &is_mixed = bundle.project_config.opt("filament_is_mixed")->values; + REQUIRE(is_mixed.size() == 8); + // Slots 0-3 stay physical; 4 and 5 are surplus placeholders; 6 is the unpublished gap; 7 is + // the published mix. All four tail slots are virtual. + for (size_t i = 0; i < 4; ++i) + CHECK_FALSE(is_mixed[i]); + CHECK(is_mixed[4]); + CHECK(is_mixed[5]); + CHECK(is_mixed[6]); + CHECK(is_mixed[7]); + // Surplus physical slots (4,5) and the unpublished gap (6) carry no definition; the + // published mix on slot 7 keeps its own. + const auto &components = bundle.project_config.opt("filament_mixed_components")->values; + REQUIRE(components.size() == 8); + CHECK(components[4].empty()); + CHECK(components[5].empty()); + CHECK(components[6].empty()); + CHECK(components[7] == "1,2"); + // Exactly four physical slots remain (never a fifth past the nozzle count). + size_t physical_count = 0; + for (bool mixed : is_mixed) + if (!mixed) + ++physical_count; + CHECK(physical_count == 4); + // The unpublished gap's conversion is surfaced through the post-import notice. + bool gap_reported = false; + for (const std::string &message : pub.material_replacements) + if (message.find("slot 6: unassigned mixed filament") != std::string::npos) + gap_reported = true; + CHECK(gap_reported); + CHECK(pub.skipped_keys.empty()); +} + +// The relocation shifts cells inside the file's per-slot mixed arrays; a payload too short to +// actually carry the definition degrades to empty cells, which the definition validation then +// reports - an empty mix must not ship as a virtual slot. +TEST_CASE("Published 3MF reports a relocated mixed filament whose payload cells are missing", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(5, "#123456"); + const std::vector receiver_colours = + bundle.project_config.opt("filament_colour")->values; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 3; // authored slot 3; the receiver's five real slots occupy 0-4 + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + // The file's mixed arrays only cover its single physical slot: the definition data for + // slot 3 does not exist in the payload. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75 }; + config.opt("filament_self_index")->values = { 1 }; + config.opt("filament_extruder_variant")->values = { "Direct Drive Standard" }; + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt("filament_type")->values = { "PLA" }; + config.opt("filament_vendor")->values = { "Generic" }; + config.opt("filament_is_mixed")->values = { 0 }; + config.opt("filament_mixed_components")->values = { "" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "" }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The mix was relocated past the physical territory... + REQUIRE(pub.mixed_slot_relocations.size() == 1); + CHECK(pub.mixed_slot_relocations.at(3) == 5); + REQUIRE(pub.material_replacements.size() == 2); + CHECK(pub.material_replacements[0].find("slot 3 -> slot 5") != std::string::npos); + // ...and the receiver grew to hold the destination slot, but the definition itself was + // rejected: the relocated cells degraded to empty defaults, the slot was finalized as an + // empty mixed placeholder (not a real filament), and both facts were reported. + REQUIRE(bundle.filament_presets.size() == 6); + CHECK(bundle.is_mixed_filament(5)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[5].empty()); + CHECK(bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[5].empty()); + CHECK(contains_key(pub.skipped_keys, "material:GFL99 (mixed filament definition: needs at least two components)")); + CHECK(pub.material_replacements[1].find("slot 5: mixed filament definition could not be imported") != std::string::npos); + // The five real slots kept their colours. + CHECK(std::equal(receiver_colours.begin(), receiver_colours.end(), + bundle.project_config.opt("filament_colour")->values.begin())); +} + +// A grown published slot always repeats the receiver's last preset; it can only move to the +// published material's identity when a replacement is warranted (an aliased slot that would +// otherwise leak keys, or a type mismatch). The tier priority candidate_score uses is locked +// here: exact preset name > bare name > exact setting_id > exact filament_id > vendor+type, +// with the lower tiers reported as a substitute. +TEST_CASE("Published 3MF re-points an aliased grown slot's material by identity tiers", "[Preset][Bundle][Published]") +{ + auto make_file_config = [] { + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3, 4 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#00FF00", "#0000FF", "#FFFF00" }; + config.opt("filament_type")->values = { "PLA", "PLA", "PLA", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic", "Generic" }; + config.opt("filament_ids")->values = { "GFL99", "GFL99", "GFL99", "GFL99" }; + return config; + }; + + PublishedMaterialEntry entry; + entry.slot = 2; + entry.filament_type = "PLA"; + + SECTION("an exact preset name outranks the bare-name form") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &bare = add_inmemory_preset(bundle.filaments, "Authored PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + Preset &exact = add_inmemory_preset(bundle.filaments, "Authored PLA @Vendor"); + exact.config.opt_string("filament_type", 0u) = "PLA"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; + entry.keys = { "filament_retraction_length" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + // The aliased grown slot is re-pointed at the exact-name preset; the bare-name and the + // receiver's own preset lose. + CHECK(bundle.filament_presets[2] == "Authored PLA @Vendor"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Authored PLA @Vendor"); + } + + SECTION("a bare name outranks an exact setting_id") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &bare = add_inmemory_preset(bundle.filaments, "Authored PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + Preset &sid = add_inmemory_preset(bundle.filaments, "Bbb PLA"); + sid.config.opt_string("filament_type", 0u) = "PLA"; + sid.setting_id = "SID123"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name + entry.setting_id = "SID123"; + entry.keys = { "filament_retraction_length" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Authored PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Authored PLA"); + } + + SECTION("an exact setting_id outranks an exact filament_id") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PLA"); + mine.config.opt_string("filament_type", 0u) = "PLA"; + Preset &sid = add_inmemory_preset(bundle.filaments, "Bbb PLA"); + sid.config.opt_string("filament_type", 0u) = "PLA"; + sid.setting_id = "SID123"; + Preset &fid = add_inmemory_preset(bundle.filaments, "Ccc PLA"); + fid.config.opt_string("filament_type", 0u) = "PLA"; + fid.filament_id = "GFA00"; + bundle.filament_presets = { "My PLA" }; + + entry.preset_name = "Authored PLA @Vendor"; // no library preset carries this name + entry.setting_id = "SID123"; + entry.filament_id = "GFA00"; + entry.keys = { "filament_retraction_length" }; + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(bundle.filament_presets[2] == "Bbb PLA"); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PLA -> Bbb PLA"); + } + + SECTION("a vendor+type match is reported as a substitute") + { + PresetBundle bundle; + Preset &mine = add_inmemory_preset(bundle.filaments, "My PETG"); + mine.config.opt_string("filament_type", 0u) = "PETG"; + Preset &exact_vendor = add_inmemory_preset(bundle.filaments, "Aaa PLA"); + exact_vendor.config.opt_string("filament_type", 0u) = "PLA"; + exact_vendor.config.opt_string("filament_vendor", 0u) = "Generic"; + Preset &other_vendor = add_inmemory_preset(bundle.filaments, "Zzz PLA"); + other_vendor.config.opt_string("filament_type", 0u) = "PLA"; + other_vendor.config.opt_string("filament_vendor", 0u) = "Other"; + bundle.filament_presets = { "My PETG" }; + + entry.filament_vendor = "Generic"; // no name or id identity: the family tiers decide + entry.publish_type = true; + entry.publish_type_value = "PLA"; // the grown slot seeds "My PETG" -> the gate reads a mismatch + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = make_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + REQUIRE(bundle.filament_presets.size() == 3); + CHECK(bundle.filament_presets[1] == "My PETG"); + // The same-vendor PLA outranks the type-only candidate... + CHECK(bundle.filament_presets[2] == "Aaa PLA"); + // ...and since it is not an exact material match, the load says so. + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 2: My PETG -> Aaa PLA (substitute)"); + } +} + +// Structural keys (identity links like filament_ids / inherits / printer_settings_id) are +// never applied onto the receiver and never reported: a hand-crafted file listing them must +// not trigger the "could not be applied" warning, while unknown keys still do. +TEST_CASE("Published 3MF silently ignores structural keys in published_keys", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt_float("layer_height") = 0.28; + Preset::normalize(config); + + PresetBundle bundle; + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + const std::vector ids_before = + bundle.filaments.get_edited_preset().config.opt("filament_settings_id")->values; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "filament_ids", "inherits", "printer_settings_id", "layer_height", "not_a_setting" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The real setting applied... + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 1e-6)); + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + // ...the structural keys were neither applied nor reported... + CHECK_FALSE(contains_key(pub.skipped_keys, "filament_ids")); + CHECK_FALSE(contains_key(pub.skipped_keys, "inherits")); + CHECK_FALSE(contains_key(pub.skipped_keys, "printer_settings_id")); + CHECK(bundle.filaments.get_edited_preset().config.opt("filament_settings_id")->values == ids_before); + // ...while an unknown key still reports. + CHECK(contains_key(pub.skipped_keys, "not_a_setting")); +} + +// A whole-vector key requires the receiver's vector to have the same number of elements as the +// author's: pasting a 3-extruder list into a 2-extruder machine would overwrite the wrong +// elements, so the key is reported as skipped and the receiver keeps its own values. +TEST_CASE("Published 3MF skips a whole-vector key whose size does not match the receiver", "[Preset][Bundle][Published]") +{ + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_colour")->values = { "#FF0000" }; + config.opt_float("layer_height") = 0.28; + // Author's wiping matrix sized for three extruders. + config.set_key_value("wiping_volumes_extruders", new ConfigOptionFloats({ 10., 20., 30. })); + Preset::normalize(config); + + PresetBundle bundle; + // Receiver sized for two extruders. + bundle.prints.get_edited_preset().config.set_key_value("wiping_volumes_extruders", new ConfigOptionFloats({ 40., 50. })); + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.1; + + PublishedConfig pub; + pub.published = true; + pub.published_keys = { "wiping_volumes_extruders", "layer_height" }; + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + check_double_vector(bundle.prints.get_edited_preset().config.opt("wiping_volumes_extruders")->values, + { 40., 50. }); + CHECK(contains_key(pub.skipped_keys, "wiping_volumes_extruders")); + // The matching scalar key still applied. + CHECK_FALSE(contains_key(pub.skipped_keys, "layer_height")); + CHECK_THAT(bundle.prints.get_edited_preset().config.opt_float("layer_height"), Catch::Matchers::WithinAbs(0.28, 1e-6)); +} + +// The uniquify chain continues past the first suffix: with both "X" and "X (Published)" already +// present, the next imported copy of "X" lands as "X (Published 2)" and leaves the others alone. +TEST_CASE("Published 3MF uniquifies a second imported full material as (Published 2)", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + petg.config.opt("filament_retraction_length", true)->values = { 0.6 }; + Preset &bare = add_inmemory_preset(bundle.filaments, "Generic PLA"); + bare.config.opt_string("filament_type", 0u) = "PLA"; + bare.config.opt("filament_retraction_length", true)->values = { 0.5 }; + Preset &pub1 = add_inmemory_preset(bundle.filaments, "Generic PLA (Published)"); + pub1.config.opt_string("filament_type", 0u) = "PLA"; + pub1.config.opt("filament_retraction_length", true)->values = { 0.5 }; + bundle.filament_presets = { "My PETG" }; + + PublishedMaterialEntry entry; + entry.slot = 0; + entry.full = true; + entry.publish_type = true; + entry.publish_type_value = "PLA"; + entry.preset_name = "Generic PLA @Qidi Q2 0.4 nozzle"; + entry.full_keys = { "filament_retraction_length" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { entry }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + CHECK(bundle.filament_presets[0] == "Generic PLA (Published 2)"); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published 2)", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.9 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.5 }); + check_double_vector(bundle.filaments.find_preset("Generic PLA (Published)", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.5 }); + REQUIRE(pub.material_replacements.size() == 1); + CHECK(pub.material_replacements[0] == "slot 0: My PETG -> Generic PLA (Published 2)"); + CHECK(pub.skipped_keys.empty()); +} + +// A mixed filament's blended colour is a swatch for the project's colour strip only: it must +// never be written into the slot's (possibly shared) preset config, or every slot referencing +// that preset would turn into the blend colour. +TEST_CASE("Published 3MF never writes a mixed filament's blended colour into the slot's preset", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#123456" }; + Preset &petg = add_inmemory_preset(bundle.filaments, "My PETG"); + petg.config.opt_string("filament_type", 0u) = "PETG"; + bundle.filament_presets = { "My PLA", "My PLA", "My PLA" }; + bundle.set_num_filaments(3); + bundle.project_config.opt("filament_is_mixed")->values[2] = 1; + bundle.project_config.opt("filament_mixed_components")->values[2] = "1,1"; + bundle.project_config.opt("filament_mixed_sublayer_ratios")->values[2] = "0.5,0.5"; + + PublishedMaterialEntry mix; + mix.filament_type = "PLA"; + mix.filament_vendor = "Generic"; + mix.filament_id = "GFL99"; + mix.slot = 2; + mix.publish_color = true; + mix.color = "#800080"; + mix.keys = { "filament_is_mixed", "filament_mixed_components", + "filament_mixed_sublayer_ratios", "filament_mixed_gradient", + "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { mix }; + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + config.opt("filament_diameter")->values = { 1.75, 1.75, 1.75 }; + config.opt("filament_self_index")->values = { 1, 2, 3 }; + config.opt("filament_extruder_variant")->values = { + "Direct Drive Standard", "Direct Drive Standard", "Direct Drive Standard" + }; + config.opt("filament_colour")->values = { "#FF0000", "#0000FF", "#800080" }; + config.opt("filament_type")->values = { "PLA", "PETG", "PLA" }; + config.opt("filament_vendor")->values = { "Generic", "Generic", "Generic" }; + config.opt("filament_is_mixed")->values = { 0, 0, 1 }; + config.opt("filament_mixed_components")->values = { "", "", "1,2" }; + config.opt("filament_mixed_sublayer_ratios")->values = { "", "", "0.6,0.4" }; + config.opt("filament_mixed_gradient")->values = { 0, 0, 1 }; + config.opt("filament_mixed_gradient_range")->values = { "", "", "0.9,0.1" }; + config.opt("filament_mixed_gradient_curve")->values = { "", "", "0,0.1|1,0.9" }; + config.opt("filament_mixed_gradient_per_part")->values = { 0, 0, 1 }; + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The definition applied like-for-like onto the virtual slot... + CHECK(bundle.filament_presets.size() == 3); + CHECK(bundle.is_mixed_filament(2)); + CHECK(bundle.project_config.opt("filament_mixed_components")->values[2] == "1,2"); + // ...the blend colour landed in the project strip only... + CHECK(bundle.project_config.opt("filament_colour")->values[2] == "#800080"); + // ...and the shared preset kept its own colour: slots 0 and 1 render unchanged. + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#123456" }); + CHECK(bundle.filament_presets[0] == "My PLA"); + CHECK(bundle.filament_presets[1] == "My PLA"); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); +} + +// Duplicate entries for the same authored slot only occur in hand-crafted files (the dialog +// emits one entry per slot); the load's contract under that input is deterministic last-wins, +// not corruption. +TEST_CASE("Published 3MF applies duplicate entries for one slot last-wins", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + Preset &pla = add_inmemory_preset(bundle.filaments, "My PLA"); + pla.config.opt_string("filament_type", 0u) = "PLA"; + pla.config.opt("filament_colour", true)->values = { "#000000" }; + bundle.filament_presets = { "My PLA" }; + + auto make_entry = [](const char *color) { + PublishedMaterialEntry entry; + entry.slot = 0; + entry.publish_color = true; + entry.color = color; + entry.keys = { "filament_retraction_length" }; + return entry; + }; + + PublishedConfig pub; + pub.published = true; + pub.material_keys = { make_entry("#AA0000"), make_entry("#BB0000") }; + DynamicPrintConfig config = published_pla_file_config(); + Preset::normalize(config); + bundle.load_config_model("test.3mf", std::move(config), Semver(), &pub); + + // The second entry won both the project strip and the slot's preset. + CHECK(bundle.project_config.opt("filament_colour")->values[0] == "#BB0000"); + CHECK(bundle.filaments.find_preset("My PLA", false, true)->config.opt("filament_colour")->values == + std::vector{ "#BB0000" }); + check_double_vector(bundle.filaments.find_preset("My PLA", false, true) + ->config.opt("filament_retraction_length")->values, + { 0.9 }); + CHECK(pub.skipped_keys.empty()); + CHECK(pub.material_replacements.empty()); +} + +// normalize_filament_type maps "PLA High Speed" onto the canonical family "PLA" (a space- +// separated modifier is dropped) but leaves dash-separated composite types like "PA-CF" intact, +// and passes through unknown types and the empty string unchanged. +TEST_CASE("normalize_filament_type strips a space modifier but keeps dash types", "[Preset][Bundle][Published]") +{ + CHECK(normalize_filament_type("PLA High Speed") == "PLA"); + CHECK(normalize_filament_type("PA-CF") == "PA-CF"); + CHECK(normalize_filament_type("PETG-CF") == "PETG-CF"); + CHECK(normalize_filament_type("PLA") == "PLA"); + CHECK(normalize_filament_type("ABC") == "ABC"); + CHECK(normalize_filament_type("") == ""); +} + +// collect_dirty_settings_keys feeds the Publish dialog's pre-check: it must be the set union of +// the dirty options across the edited print, printer and filament presets. +TEST_CASE("collect_dirty_settings_keys unions the dirty settings from all three presets", "[Preset][Bundle][Published]") +{ + PresetBundle bundle; + // The edited preset is initialised as a copy of the selected (default) preset, so a single + // edit makes exactly that option dirty. deep_diff reports scalar keys by name but per-element + // vector keys as "key#", so a vector edit surfaces as "key#0". + bundle.prints.get_edited_preset().config.opt_float("layer_height") = 0.28; + bundle.filaments.get_edited_preset().config.opt("filament_type", true)->values = { "ABS" }; + bundle.printers.get_edited_preset().config.opt("nozzle_diameter", true)->values = { 0.6 }; + + const std::vector dirty = collect_dirty_settings_keys(bundle); + for (const char *key : { "layer_height", "filament_type#0", "nozzle_diameter#0" }) + CHECK(contains_key(dirty, key)); +} + +// The publish denylist and the mixed-key list are single sources of truth for the import path: +// lock their members so a silent edit to either cannot drift away from the contract the import +// and export masks rely on. +TEST_CASE("Published 3MF denylist and mixed-key sets match the import/export contract", "[Preset][Bundle][Published]") +{ + const std::set& structural = publish_structural_keys(); + // Structural / inheritance keys must never be applied onto a receiver's presets. + for (const char *key : { "printer_settings_id", "filament_settings_id", "print_settings_id", + "compatible_printers", "compatible_prints", "compatible_printers_condition", + "compatible_prints_condition", "default_filament_profile", "default_print_profile", + "inherits", "extruder_count", "printer_model", "filament_ids" }) + CHECK(structural.count(key) == 1); + // ...but a per-slot publishable material key is not structural. + CHECK(structural.count("filament_retraction_length") == 0); + CHECK(structural.count("filament_colour") == 0); + + const std::set& mixed = publish_mixed_keys(); + CHECK(mixed == std::set{ + "filament_is_mixed", "filament_mixed_components", "filament_mixed_sublayer_ratios", + "filament_mixed_gradient", "filament_mixed_gradient_range", "filament_mixed_gradient_curve", + "filament_mixed_gradient_per_part" }); + // Mixed keys are project-level arrays, not material-preset keys, so none is structural. + for (const std::string &key : mixed) + CHECK(structural.count(key) == 0); +} + +namespace { + +// data_dir() is a process-wide global that import_presets extracts into; scope it to the test. +struct ScopedDataDir +{ + std::string previous = data_dir(); + explicit ScopedDataDir(const fs::path &dir) { set_data_dir(dir.string()); } + ~ScopedDataDir() { set_data_dir(previous); } +}; + +std::string read_file(const fs::path &file) +{ + std::ifstream in(file.string(), std::ios::binary); + return std::string(std::istreambuf_iterator(in), std::istreambuf_iterator()); +} + +void write_zip(const fs::path &zip_file, const std::vector> &entries) +{ + mz_zip_archive zip; + mz_zip_zero_struct(&zip); + REQUIRE(open_zip_writer(&zip, zip_file.string())); + for (const auto &[name, content] : entries) + REQUIRE(mz_zip_writer_add_mem(&zip, name.c_str(), content.data(), content.size(), MZ_DEFAULT_COMPRESSION)); + REQUIRE(mz_zip_writer_finalize_archive(&zip)); + REQUIRE(close_zip_writer(&zip)); +} + +bool any_filename_contains(const fs::path &root, const std::string &needle) +{ + for (fs::recursive_directory_iterator it(root), end; it != end; ++it) + if (it->path().filename().string().find(needle) != std::string::npos) + return true; + return false; +} + +} // namespace + +TEST_CASE("Config import confines zip entries, preset names and bundle ids to the preset directory", "[Preset][Bundle][Regression]") +{ + ScopedTemporaryDir temp_dir; + const fs::path data_root = temp_dir.path() / "datadir"; + const fs::path src_dir = temp_dir.path() / "src"; + fs::create_directories(src_dir); + ScopedDataDir scoped_data_dir(data_root); + + PresetBundle bundle; + AppConfig app_config; + const auto confirm = [](std::string const &) { return 1; }; + const auto import = [&](const fs::path &file) { + std::vector files{file.string()}; + bundle.import_presets(files, confirm, ForwardCompatibilitySubstitutionRule::Disable, app_config); + return files; + }; + + const fs::path good_file = src_dir / "Good.json"; + write_print_preset(bundle.prints.default_preset().config, good_file, "Good"); + const std::string good_json = read_file(good_file); + + // Four levels up from where import_presets writes (/user/default/temp) is temp_dir + // itself, so anything that escapes lands where the scan below can see it. + const std::string up = "../../../../"; + const std::string up_win = "..\\..\\..\\..\\"; + + SECTION("zip entry names with either separator are reduced to a basename") { + const fs::path zip = src_dir / "bundle.zip"; + write_zip(zip, {{up + "zip-escape.json", "{}"}, {up_win + "zip-escape.json", "{}"}, {"presets/Good.json", good_json}}); + import(zip); + CHECK(bundle.prints.find_preset("Good") != nullptr); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "zip-escape")); + } + + SECTION("a preset name that walks out of the preset directory is rejected") { + for (const std::string &name : {up + "name-escape", up_win + "name-escape"}) { + const fs::path file = src_dir / "escape.json"; + write_print_preset(bundle.prints.default_preset().config, file, name); + CHECK(import(file).empty()); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "name-escape")); + } + } + + SECTION("a bundle id that walks out of the bundle directory is rejected") { + const fs::path zip = src_dir / "bundle.zip"; + write_zip(zip, {{BUNDLE_STRUCTURE_JSON_NAME, "{\"id\": \"" + up + "bundle-escape\"}"}, {"Good.json", good_json}}); + CHECK(import(zip).empty()); + CHECK_FALSE(any_filename_contains(temp_dir.path(), "bundle-escape")); + } +} diff --git a/tests/libslic3r/test_preset_diff.cpp b/tests/libslic3r/test_preset_diff.cpp index 399fdabae1..22255c049e 100644 --- a/tests/libslic3r/test_preset_diff.cpp +++ b/tests/libslic3r/test_preset_diff.cpp @@ -33,3 +33,20 @@ TEST_CASE("deep_diff flags new vector entries that duplicate values[0]", "[Prese // specific to new indices rather than flagging the whole vector. REQUIRE(std::find(diff.begin(), diff.end(), "nozzle_diameter#0") == diff.end()); } + +TEST_CASE("deep_diff distinguishes absolute and percentage speeds for each variant", "[PresetDiff][Config]") +{ + const size_t changed_index = GENERATE(size_t(0), size_t(1)); + Preset reference(Preset::TYPE_PRINT, "ref"); + reference.config.set_key_value("small_perimeter_speed", new ConfigOptionFloatsOrPercents{{50., false}, {50., false}}); + + Preset edited = reference; + edited.config.option("small_perimeter_speed")->values[changed_index].percent = true; + + const auto diff = PresetCollection::dirty_options(&edited, &reference, /*deep_compare=*/true); + REQUIRE(diff == std::vector{"small_perimeter_speed#" + std::to_string(changed_index)}); + + DynamicPrintConfig transferred = reference.config; + transferred.apply_only(edited.config, diff); + REQUIRE(*transferred.option("small_perimeter_speed") == *edited.config.option("small_perimeter_speed")); +} diff --git a/tests/libslic3r/test_preset_options.cpp b/tests/libslic3r/test_preset_options.cpp new file mode 100644 index 0000000000..1763f5fbc7 --- /dev/null +++ b/tests/libslic3r/test_preset_options.cpp @@ -0,0 +1,70 @@ +// Regression test for the "option in def + UI but missing from preset key list" +// crash class. +// +// The print preset's DynamicPrintConfig is seeded with only the keys returned by +// Preset::print_options() (PresetBundle.cpp). A field added to PrintRegionConfig +// or PrintObjectConfig and registered via print_config_def plus a TabPrint +// optgroup, but left out of print_options(), still gets its control built; on tab +// activation reload_config -> get_config_value dispatches to opt_bool/opt_int on a +// DynamicPrintConfig with no entry for the key, and the accessor null-derefs the +// result of option(key). +// +// The invariant asserted here is the inverse: every key declared on +// PrintRegionConfig and PrintObjectConfig appears in Preset::print_options() or +// Preset::filament_options(), the two preset key lists that seed a print preset's +// DynamicConfig. + +#include + +#include "libslic3r/Preset.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include + +using namespace Slic3r; + +namespace { + +// Deprecated keys renamed in handle_legacy() (ironing_direction -> +// ironing_angle, wall_infill_order -> wall_sequence); neither is in a +// preset list. Register new options in a preset list, not here. +const std::set kDeprecatedRegionFields = { + "ironing_direction", + "wall_infill_order", +}; + +void check_keys_are_in_a_preset(const t_config_option_keys& keys, const std::string& class_name) +{ + REQUIRE_FALSE(keys.empty()); + const auto& print_options = Preset::print_options(); + const auto& filament_options = Preset::filament_options(); + const std::set in_print(print_options.begin(), print_options.end()); + const std::set in_filament(filament_options.begin(), filament_options.end()); + for (const std::string& key : keys) { + DYNAMIC_SECTION(class_name << "::" << key) + { + INFO("'" << key << "' on " << class_name + << " is missing from " + "Preset::print_options()/filament_options(); add it to " + "s_Preset_print_options (or s_Preset_filament_options) in Preset.cpp."); + const bool registered = in_print.count(key) || in_filament.count(key) || kDeprecatedRegionFields.count(key); + REQUIRE(registered); + } + } +} + +} // namespace + +// Bodies are laid out like the rest of the test suite rather than collapsed +// onto the brace line. +// clang-format off +TEST_CASE("Every PrintRegionConfig field is registered in a preset key list", "[Preset][Config]") +{ + check_keys_are_in_a_preset(PrintRegionConfig::defaults().keys(), "PrintRegionConfig"); +} + +TEST_CASE("Every PrintObjectConfig field is registered in a preset key list", "[Preset][Config]") +{ + check_keys_are_in_a_preset(PrintObjectConfig::defaults().keys(), "PrintObjectConfig"); +} +// clang-format on diff --git a/tests/libslic3r/test_preset_setting_id.cpp b/tests/libslic3r/test_preset_setting_id.cpp index b0e340ead5..5c06335381 100644 --- a/tests/libslic3r/test_preset_setting_id.cpp +++ b/tests/libslic3r/test_preset_setting_id.cpp @@ -5,10 +5,10 @@ using namespace Slic3r; // Golden vectors from the Python reference generate_preset_setting_id (defined in -// scripts/assign_vendor_setting_ids.py). The C++ generate_preset_setting_id() MUST stay -// byte-identical to it, otherwise app-side on-the-fly ids would diverge from the +// scripts/orca_profile_tool.py). The C++ generate_preset_setting_id() MUST stay byte-identical +// to it, otherwise app-side on-the-fly ids would diverge from the // script-assigned ones in the profiles. Regenerate a vector with: -// python3 -c "from assign_vendor_setting_ids import generate_preset_setting_id as g; print(g('Afinia','filament','Afinia ABS @Afinia H400'))" +// python3 -c "import sys; sys.path.insert(0, 'scripts'); from orca_profile_tool import generate_preset_setting_id as g; print(g('Afinia','filament','Afinia ABS @Afinia H400'))" TEST_CASE("preset setting_id matches the Python reference", "[Preset][setting_id]") { struct Vec { const char* vendor; const char* type; const char* name; const char* expected; }; const Vec vectors[] = { diff --git a/tests/libslic3r/test_sketchconstraints.cpp b/tests/libslic3r/test_sketchconstraints.cpp new file mode 100644 index 0000000000..d0c5844b40 --- /dev/null +++ b/tests/libslic3r/test_sketchconstraints.cpp @@ -0,0 +1,396 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) +#include "libslic3r/CAD/SketchConstraints.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" + +using namespace Slic3r; + +namespace { +SketchEntity mk_line(double x0, double y0, double x1, double y1) +{ + SketchEntity e; e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(x0, y0); e.p1 = Vec2d(x1, y1); return e; +} +SketchEntity mk_point(double x, double y) +{ + SketchEntity e; e.type = SketchEntity::Type::Point; e.p0 = Vec2d(x, y); return e; +} +SketchEntity mk_circle(double cx, double cy, double r) +{ + SketchEntity e; e.type = SketchEntity::Type::Circle; + e.center = Vec2d(cx, cy); e.radius = r; return e; +} +} + +TEST_CASE("Coincident with anchor", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(5, 5); + sc.fix_point(a); + sc.coincident(a, b); + REQUIRE(sc.solve()); + Vec2d pb = sc.get_point(b); + REQUIRE_THAT(pb.x(), Catch::Matchers::WithinAbs(0.0, 1e-4)); + REQUIRE_THAT(pb.y(), Catch::Matchers::WithinAbs(0.0, 1e-4)); +} + +TEST_CASE("Horizontal + distance", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(5, 3); + sc.fix_point(a); + sc.horizontal(a, b); + sc.distance(a, b, 10); + REQUIRE(sc.solve()); + Vec2d pb = sc.get_point(b); + REQUIRE_THAT(pb.y(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE_THAT(std::abs(pb.x()), Catch::Matchers::WithinAbs(10.0, 1e-3)); +} + +TEST_CASE("Rectangle", "[SketchConstraints]") +{ + SketchConstraints sc; + int p0 = sc.add_point(0, 0); + int p1 = sc.add_point(8, 1); + int p2 = sc.add_point(9, 5); + int p3 = sc.add_point(-1, 4); + sc.fix_point(p0); + sc.lock_x(p0, 0); + sc.lock_y(p0, 0); + sc.horizontal(p0, p1); + sc.vertical(p1, p2); + sc.horizontal(p2, p3); + sc.vertical(p3, p0); + sc.distance(p0, p1, 10); + sc.distance(p1, p2, 6); + REQUIRE(sc.solve()); + Vec2d pp1 = sc.get_point(p1); + Vec2d pp2 = sc.get_point(p2); + Vec2d pp3 = sc.get_point(p3); + REQUIRE_THAT(pp1.x(), Catch::Matchers::WithinAbs(10.0, 1e-3)); + REQUIRE_THAT(pp1.y(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE_THAT(pp2.x(), Catch::Matchers::WithinAbs(10.0, 1e-3)); + REQUIRE_THAT(pp2.y(), Catch::Matchers::WithinAbs(6.0, 1e-3)); + REQUIRE_THAT(pp3.x(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE_THAT(pp3.y(), Catch::Matchers::WithinAbs(6.0, 1e-3)); +} + +TEST_CASE("residual_norm after each solve", "[SketchConstraints]") +{ + SECTION("coincident case") + { + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(5, 5); + sc.fix_point(a); + sc.coincident(a, b); + REQUIRE(sc.solve()); + REQUIRE(sc.residual_norm() < 1e-5); + } + SECTION("horizontal+distance case") + { + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(5, 3); + sc.fix_point(a); + sc.horizontal(a, b); + sc.distance(a, b, 10); + REQUIRE(sc.solve()); + REQUIRE(sc.residual_norm() < 1e-5); + } + SECTION("rectangle case") + { + SketchConstraints sc; + int p0 = sc.add_point(0, 0); + int p1 = sc.add_point(8, 1); + int p2 = sc.add_point(9, 5); + int p3 = sc.add_point(-1, 4); + sc.fix_point(p0); + sc.lock_x(p0, 0); + sc.lock_y(p0, 0); + sc.horizontal(p0, p1); + sc.vertical(p1, p2); + sc.horizontal(p2, p3); + sc.vertical(p3, p0); + sc.distance(p0, p1, 10); + sc.distance(p1, p2, 6); + REQUIRE(sc.solve()); + REQUIRE(sc.residual_norm() < 1e-5); + } +} + +TEST_CASE("midpoint", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(10, 0); + int m = sc.add_point(3, 7); + sc.fix_point(a); + sc.fix_point(b); + sc.midpoint(m, a, b); + REQUIRE(sc.solve()); + Vec2d pm = sc.get_point(m); + REQUIRE_THAT(pm.x(), Catch::Matchers::WithinAbs(5.0, 1e-3)); + REQUIRE_THAT(pm.y(), Catch::Matchers::WithinAbs(0.0, 1e-3)); +} + +TEST_CASE("symmetric across Y axis", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(2, 3); + int b = sc.add_point(-1, 1); + int c = sc.add_point(0, 0); + int d = sc.add_point(0, 1); + sc.fix_point(a); + sc.fix_point(c); + sc.fix_point(d); + sc.symmetric(a, b, c, d); + REQUIRE(sc.solve()); + Vec2d pb = sc.get_point(b); + REQUIRE_THAT(pb.x(), Catch::Matchers::WithinAbs(-2.0, 1e-3)); + REQUIRE_THAT(pb.y(), Catch::Matchers::WithinAbs(3.0, 1e-3)); +} + +TEST_CASE("angle 90 degrees", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(1, 0); + int c = sc.add_point(0, 0); + int d = sc.add_point(1, 1); + sc.fix_point(a); + sc.fix_point(b); + sc.fix_point(c); + sc.angle(a, b, c, d, M_PI / 2); + REQUIRE(sc.solve()); + Vec2d pd = sc.get_point(d); + Vec2d pc = sc.get_point(c); + REQUIRE_THAT(pd.x() - pc.x(), Catch::Matchers::WithinAbs(0.0, 1e-3)); + REQUIRE(pd.y() > pc.y()); +} + +TEST_CASE("point-line distance", "[SketchConstraints]") +{ + SketchConstraints sc; + int a = sc.add_point(0, 0); + int b = sc.add_point(10, 0); + int p = sc.add_point(3, 1); + sc.fix_point(a); + sc.fix_point(b); + sc.lock_x(p, 3.0); + sc.point_line_distance(p, a, b, 5.0); + REQUIRE(sc.solve()); + Vec2d pp = sc.get_point(p); + REQUIRE_THAT(std::abs(pp.y()), Catch::Matchers::WithinAbs(5.0, 1e-3)); + REQUIRE_THAT(pp.x(), Catch::Matchers::WithinAbs(3.0, 1e-3)); +} + +// ---- entity-constraint planner (kernel port of DesignPanel::apply_entity_constraint) ---- + +TEST_CASE("sketch_entity_ends exposes real roles only", "[SketchConstraints]") +{ + std::pair out[2]; + REQUIRE(sketch_entity_ends(mk_point(3, 4), out) == 1); + REQUIRE(out[0].first == SketchPointRole::P0); + REQUIRE(sketch_entity_ends(mk_circle(1, 2, 5), out) == 1); + REQUIRE(out[0].first == SketchPointRole::Center); + REQUIRE_THAT(out[0].second.x(), Catch::Matchers::WithinAbs(1.0, 1e-9)); + REQUIRE_THAT(out[0].second.y(), Catch::Matchers::WithinAbs(2.0, 1e-9)); + REQUIRE(sketch_entity_ends(mk_line(0, 0, 10, 0), out) == 2); + REQUIRE(out[0].first == SketchPointRole::P0); + REQUIRE(out[1].first == SketchPointRole::P1); +} + +TEST_CASE("Coincident on two Points binds P0/P0, not phantom p1", "[SketchConstraints]") +{ + std::vector ents = { mk_point(0, 0), mk_point(5, 5) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::Coincident); + REQUIRE(p.kind == ConstraintPlan::Kind::Apply); + REQUIRE(p.defs.size() == 1); + REQUIRE(p.defs[0].type == SketchConstraintType::Coincident); + REQUIRE(p.defs[0].ea == 0); + REQUIRE(p.defs[0].ra == SketchPointRole::P0); + REQUIRE(p.defs[0].eb == 1); + REQUIRE(p.defs[0].rb == SketchPointRole::P0); +} + +TEST_CASE("DistanceX on two Points binds real roles with non-negative prefill", "[SketchConstraints]") +{ + // e0 is right of e1, so the raw projected delta is negative: the plan must swap the + // refs so accepting the shown (positive) value is a no-op, not a sign flip. + std::vector ents = { mk_point(5, 1), mk_point(2, 3) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::DistanceX); + REQUIRE(p.kind == ConstraintPlan::Kind::AskValue); + REQUIRE(p.defs.size() == 1); + REQUIRE(p.defs[0].type == SketchConstraintType::DistanceX); + REQUIRE(p.defs[0].ra == SketchPointRole::P0); + REQUIRE(p.defs[0].rb == SketchPointRole::P0); + REQUIRE(p.prefill >= 0.0); + REQUIRE(p.defs[0].ea == 1); + REQUIRE(p.defs[0].eb == 0); +} + +TEST_CASE("Horizontal on a Point rejects with NeedALine", "[SketchConstraints]") +{ + std::vector ents = { mk_point(1, 2) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, -1, -1, SketchConstraintType::Horizontal); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == ConstraintReject::NeedALine); +} + +TEST_CASE("Angle on two Circles rejects with NeedTwoLines", "[SketchConstraints]") +{ + std::vector ents = { mk_circle(0, 0, 1), mk_circle(5, 0, 1) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::Angle); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == ConstraintReject::NeedTwoLines); +} + +TEST_CASE("Parallel on a Line + Circle rejects with NeedTwoLines (new guard)", "[SketchConstraints]") +{ + std::vector ents = { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::Parallel); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == ConstraintReject::NeedTwoLines); +} + +TEST_CASE("Equal on two Circles promotes to EqualRadius", "[SketchConstraints]") +{ + std::vector ents = { mk_circle(0, 0, 1), mk_circle(5, 0, 2) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::EqualLength); + REQUIRE(p.kind == ConstraintPlan::Kind::Apply); + REQUIRE(p.defs.size() == 1); + REQUIRE(p.defs[0].type == SketchConstraintType::EqualRadius); + REQUIRE(p.defs[0].ea == 0); + REQUIRE(p.defs[0].eb == 1); +} + +TEST_CASE("Symmetric on two Lines returns two defs with ec set to the axis", "[SketchConstraints]") +{ + std::vector ents = { mk_line(0, 1, 5, 1), mk_line(0, -1, 5, -1), mk_line(0, 0, 0, 1) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, 2, SketchConstraintType::Symmetric); + REQUIRE(p.kind == ConstraintPlan::Kind::Apply); + REQUIRE(p.defs.size() == 2); + for (const auto& d : p.defs) { + REQUIRE(d.type == SketchConstraintType::Symmetric); + REQUIRE(d.ea == 0); + REQUIRE(d.eb == 1); + REQUIRE(d.ec == 2); + } + REQUIRE(p.defs[0].ra == SketchPointRole::P0); + REQUIRE(p.defs[0].rb == SketchPointRole::P0); + REQUIRE(p.defs[1].ra == SketchPointRole::P1); + REQUIRE(p.defs[1].rb == SketchPointRole::P1); +} + +TEST_CASE("Symmetric with no axis rejects with NeedAxisLine", "[SketchConstraints]") +{ + std::vector ents = { mk_point(0, 0), mk_point(5, 0) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::Symmetric); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == ConstraintReject::NeedAxisLine); +} + +TEST_CASE("SymmetricAboutY on two Points returns one def with ec == kSketchRefAxisY", "[SketchConstraints]") +{ + std::vector ents = { mk_point(1, 0), mk_point(-2, 0) }; + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, SketchConstraintType::SymmetricAboutY); + REQUIRE(p.kind == ConstraintPlan::Kind::Apply); + REQUIRE(p.defs.size() == 1); + REQUIRE(p.defs[0].type == SketchConstraintType::SymmetricAboutY); + REQUIRE(p.defs[0].ec == kSketchRefAxisY); + REQUIRE(p.defs[0].ea == 0); + REQUIRE(p.defs[0].eb == 1); +} + +TEST_CASE("constraint planner apply/askvalue matrix", "[SketchConstraints]") +{ + struct C { + const char* name; SketchConstraintType type; std::vector ents; + int e0, e1, e2; ConstraintPlan::Kind kind; + }; + const std::vector cases = { + { "Fix", SketchConstraintType::Fix, { mk_point(1, 2) }, 0, -1, -1, ConstraintPlan::Kind::Apply }, + { "Coincident", SketchConstraintType::Coincident, { mk_point(0, 0), mk_point(5, 5) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Horizontal", SketchConstraintType::Horizontal, { mk_line(0, 0, 5, 0) }, 0, -1, -1, ConstraintPlan::Kind::Apply }, + { "Vertical", SketchConstraintType::Vertical, { mk_line(0, 0, 0, 5) }, 0, -1, -1, ConstraintPlan::Kind::Apply }, + { "Parallel", SketchConstraintType::Parallel, { mk_line(0, 0, 1, 0), mk_line(0, 1, 1, 1) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Perpendicular", SketchConstraintType::Perpendicular, { mk_line(0, 0, 1, 0), mk_line(0, 0, 0, 1) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "EqualLength", SketchConstraintType::EqualLength, { mk_line(0, 0, 1, 0), mk_line(0, 1, 2, 1) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Concentric", SketchConstraintType::Concentric, { mk_circle(0, 0, 1), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Tangent", SketchConstraintType::Tangent, { mk_line(0, 0, 1, 0), mk_circle(0, 1, 1) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Midpoint", SketchConstraintType::Midpoint, { mk_point(2, 0), mk_line(0, 0, 5, 0) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Symmetric", SketchConstraintType::Symmetric, { mk_point(0, 0), mk_point(5, 0), mk_line(0, -1, 0, 1) }, 0, 1, 2, ConstraintPlan::Kind::Apply }, + { "SymmetricAboutY", SketchConstraintType::SymmetricAboutY, { mk_point(1, 0), mk_point(-2, 0) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "SymmetricAboutX", SketchConstraintType::SymmetricAboutX, { mk_point(0, 1), mk_point(0, -2) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "EqualRadius", SketchConstraintType::EqualRadius, { mk_circle(0, 0, 1), mk_circle(5, 0, 2) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Collinear", SketchConstraintType::Collinear, { mk_line(0, 0, 1, 0), mk_line(2, 0, 3, 0) }, 0, 1, -1, ConstraintPlan::Kind::Apply }, + { "Angle", SketchConstraintType::Angle, { mk_line(0, 0, 1, 0), mk_line(0, 0, 0, 1) }, 0, 1, -1, ConstraintPlan::Kind::AskValue }, + { "Radius", SketchConstraintType::Radius, { mk_circle(0, 0, 2.5) }, 0, -1, -1, ConstraintPlan::Kind::AskValue }, + { "Diameter", SketchConstraintType::Diameter, { mk_circle(0, 0, 2.5) }, 0, -1, -1, ConstraintPlan::Kind::AskValue }, + { "DistanceX", SketchConstraintType::DistanceX, { mk_point(0, 0), mk_point(5, 3) }, 0, 1, -1, ConstraintPlan::Kind::AskValue }, + { "DistanceY", SketchConstraintType::DistanceY, { mk_point(0, 0), mk_point(5, 3) }, 0, 1, -1, ConstraintPlan::Kind::AskValue }, + }; + for (const C& c : cases) { + DYNAMIC_SECTION("apply " << c.name) { + ConstraintPlan p = plan_entity_constraint(c.ents, c.e0, c.e1, c.e2, c.type); + REQUIRE(p.kind == c.kind); + REQUIRE(p.defs.size() >= 1); + for (const auto& d : p.defs) REQUIRE(d.type == c.type); + } + } +} + +TEST_CASE("constraint planner reject matrix", "[SketchConstraints]") +{ + struct C { + const char* name; SketchConstraintType type; std::vector ents; + int e0, e1, e2; ConstraintReject reason; + }; + const std::vector cases = { + { "Fix", SketchConstraintType::Fix, {}, 0, -1, -1, ConstraintReject::NeedOneEntity }, + { "Coincident", SketchConstraintType::Coincident, { mk_point(0, 0) }, 0, -1, -1, ConstraintReject::NeedTwoEntities }, + { "Horizontal", SketchConstraintType::Horizontal, { mk_point(1, 2) }, 0, -1, -1, ConstraintReject::NeedALine }, + { "Vertical", SketchConstraintType::Vertical, { mk_circle(0, 0, 1) }, 0, -1, -1, ConstraintReject::NeedALine }, + { "Parallel", SketchConstraintType::Parallel, { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoLines }, + { "Perpendicular", SketchConstraintType::Perpendicular, { mk_circle(0, 0, 1), mk_line(0, 0, 1, 0) }, 0, 1, -1, ConstraintReject::NeedTwoLines }, + { "EqualLength", SketchConstraintType::EqualLength, { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoLines }, + { "Concentric", SketchConstraintType::Concentric, { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoRounds }, + { "Tangent", SketchConstraintType::Tangent, { mk_line(0, 0, 1, 0), mk_line(0, 1, 1, 1) }, 0, 1, -1, ConstraintReject::NeedTangentPair }, + { "Midpoint", SketchConstraintType::Midpoint, { mk_line(0, 0, 1, 0), mk_line(0, 1, 1, 1) }, 0, 1, -1, ConstraintReject::NeedPointAndLine }, + { "Symmetric", SketchConstraintType::Symmetric, { mk_line(0, 0, 1, 0), mk_point(1, 1), mk_line(0, -1, 0, 1) }, 0, 1, 2, ConstraintReject::NeedTwoPointsOrLines }, + { "SymmetricAboutY", SketchConstraintType::SymmetricAboutY, { mk_line(0, 0, 1, 0), mk_point(1, 1) }, 0, 1, -1, ConstraintReject::NeedTwoPointsOrLines }, + { "SymmetricAboutX", SketchConstraintType::SymmetricAboutX, { mk_point(1, 1), mk_line(0, 0, 1, 0) }, 0, 1, -1, ConstraintReject::NeedTwoPointsOrLines }, + { "EqualRadius", SketchConstraintType::EqualRadius, { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoRounds }, + { "Collinear", SketchConstraintType::Collinear, { mk_line(0, 0, 1, 0), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoLines }, + { "Angle", SketchConstraintType::Angle, { mk_circle(0, 0, 1), mk_circle(5, 0, 1) }, 0, 1, -1, ConstraintReject::NeedTwoLines }, + { "Radius", SketchConstraintType::Radius, { mk_line(0, 0, 1, 0) }, 0, -1, -1, ConstraintReject::NeedRound }, + { "Diameter", SketchConstraintType::Diameter, { mk_point(1, 2) }, 0, -1, -1, ConstraintReject::NeedRound }, + { "DistanceX", SketchConstraintType::DistanceX, { mk_point(0, 0) }, 0, -1, -1, ConstraintReject::NeedTwoEntities }, + { "DistanceY", SketchConstraintType::DistanceY, { mk_point(0, 0) }, 0, -1, -1, ConstraintReject::NeedTwoEntities }, + }; + for (const C& c : cases) { + DYNAMIC_SECTION("reject " << c.name) { + ConstraintPlan p = plan_entity_constraint(c.ents, c.e0, c.e1, c.e2, c.type); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == c.reason); + } + } +} + +TEST_CASE("constraint planner rejects types with no entity binding", "[SketchConstraints]") +{ + const SketchConstraintType unsupported[] = { + SketchConstraintType::Distance, SketchConstraintType::LockX, SketchConstraintType::LockY, + SketchConstraintType::PointOnLine, SketchConstraintType::PointOnObject, + }; + std::vector ents = { mk_point(0, 0), mk_point(1, 1) }; + for (SketchConstraintType t : unsupported) { + DYNAMIC_SECTION("unsupported " << int(t)) { + ConstraintPlan p = plan_entity_constraint(ents, 0, 1, -1, t); + REQUIRE(p.kind == ConstraintPlan::Kind::Reject); + REQUIRE(p.reason == ConstraintReject::Unsupported); + } + } +} diff --git a/tests/libslic3r/test_sketchedit.cpp b/tests/libslic3r/test_sketchedit.cpp new file mode 100644 index 0000000000..634e743b99 --- /dev/null +++ b/tests/libslic3r/test_sketchedit.cpp @@ -0,0 +1,730 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) +#include "libslic3r/CAD/SketchEngine.hpp" +#include +#include +#include +#include + +using namespace Slic3r; + +using Catch::Matchers::WithinAbs; + +// CONTRACT: mirror_entities hands the reflected half back REVERSED — the order of the entities +// and the direction of each — because a reflection reverses orientation and the result has to +// CONTINUE the chain it was made from. So a mirrored line's p0 is the reflection of the source's +// p1, not its p0. See [SketchProfile] "a mirrored half continues the original chain". +TEST_CASE("Mirror Line across Y axis (reversed: p0 is the reflection of the source p1)", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(3, 2); + e.p1 = Vec2d(5, 4); + + Vec2d a(0, -1); + Vec2d b(0, 1); + + auto result = SketchEngine::mirror_entities({e}, a, b); + REQUIRE(result.size() == 1); + + const auto& m = result[0]; + REQUIRE(m.type == SketchEntity::Type::Line); + REQUIRE_THAT(m.p0.x(), WithinAbs(-5.0, 1e-9)); // reflection of the SOURCE p1 + REQUIRE_THAT(m.p0.y(), WithinAbs(4.0, 1e-9)); + REQUIRE_THAT(m.p1.x(), WithinAbs(-3.0, 1e-9)); // reflection of the SOURCE p0 + REQUIRE_THAT(m.p1.y(), WithinAbs(2.0, 1e-9)); +} + +TEST_CASE("Mirror Circle across Y axis", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = Vec2d(5, 0); + e.p0 = Vec2d(5, 0); + e.radius = 3; + + Vec2d a(0, -1); + Vec2d b(0, 1); + + auto result = SketchEngine::mirror_entities({e}, a, b); + REQUIRE(result.size() == 1); + + const auto& m = result[0]; + REQUIRE(m.type == SketchEntity::Type::Circle); + REQUIRE_THAT(m.center.x(), WithinAbs(-5.0, 1e-9)); + REQUIRE_THAT(m.center.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(m.radius, WithinAbs(3.0, 1e-9)); + REQUIRE_THAT(m.p0.x(), WithinAbs(-5.0, 1e-9)); + REQUIRE_THAT(m.p0.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Mirror Arc across X axis", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 1.0; + e.start_angle = 0.0; + e.end_angle = M_PI / 2.0; + e.p0 = Vec2d(1, 0); + e.p1 = Vec2d(0, 1); + + Vec2d a(-1, 0); + Vec2d b(1, 0); + + auto result = SketchEngine::mirror_entities({e}, a, b); + REQUIRE(result.size() == 1); + + const auto& m = result[0]; + REQUIRE(m.type == SketchEntity::Type::Arc); + + // Reversed with the rest of the half: the mirrored arc STARTS where the reflection of the + // source's end is, and finishes at the reflection of its start. + REQUIRE_THAT(m.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(m.p0.y(), WithinAbs(-1.0, 1e-9)); + REQUIRE_THAT(m.p1.x(), WithinAbs(1.0, 1e-9)); + REQUIRE_THAT(m.p1.y(), WithinAbs(0.0, 1e-9)); + + // The reflection alone would negate the sweep; walking the arc the other way negates it + // again, so a mirrored CCW arc is CCW once more and a mirrored CCW loop stays CCW. + double sweep = m.end_angle - m.start_angle; + double orig_sweep = e.end_angle - e.start_angle; + REQUIRE(orig_sweep > 0.0); + REQUIRE(sweep > 0.0); +} + +TEST_CASE("Offset Line by positive d", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(0, 0); + e.p1 = Vec2d(10, 0); + + auto result = SketchEngine::offset_entities({e}, 2.0); + REQUIRE(result.size() == 1); + + const auto& o = result[0]; + REQUIRE(o.type == SketchEntity::Type::Line); + REQUIRE_THAT(o.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(o.p0.y(), WithinAbs(2.0, 1e-9)); + REQUIRE_THAT(o.p1.x(), WithinAbs(10.0, 1e-9)); + REQUIRE_THAT(o.p1.y(), WithinAbs(2.0, 1e-9)); +} + +TEST_CASE("Offset Circle: expand and collapse", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = Vec2d(0, 0); + e.p0 = Vec2d(0, 0); + e.radius = 5; + + auto expanded = SketchEngine::offset_entities({e}, 2.0); + REQUIRE(expanded.size() == 1); + REQUIRE_THAT(expanded[0].radius, WithinAbs(7.0, 1e-9)); + + auto collapsed = SketchEngine::offset_entities({e}, -5.0); + REQUIRE(collapsed.empty()); +} + +// CONTRACT CHANGED: +d used to mean "radius + d" for every arc regardless of its sweep, while +// for a line it meant "left of the direction of travel". The two disagreed, so a profile made +// of lines AND arcs (any slot outline) offset with its straights going one way and its caps the +// other, and could never come back closed. The arc now follows the line's rule: +d is left of +// travel, which for this CCW quarter-arc is inward -> r = 3. See [SketchProfile]. +TEST_CASE("Offset Arc by positive d (left of travel: a CCW arc shrinks)", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 4.0; + e.start_angle = 0.0; + e.end_angle = M_PI / 2.0; + e.p0 = Vec2d(4, 0); + e.p1 = Vec2d(0, 4); + + auto result = SketchEngine::offset_entities({e}, 1.0); + REQUIRE(result.size() == 1); + + const auto& o = result[0]; + REQUIRE(o.type == SketchEntity::Type::Arc); + REQUIRE_THAT(o.radius, WithinAbs(3.0, 1e-9)); + REQUIRE_THAT(o.p0.x(), WithinAbs(3.0, 1e-9)); + REQUIRE_THAT(o.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(o.p1.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(o.p1.y(), WithinAbs(3.0, 1e-9)); +} + +TEST_CASE("Fillet right-angle corner", "[SketchEdit]") +{ + SketchEntity a; + a.type = SketchEntity::Type::Line; + a.p0 = Vec2d(0, 0); + a.p1 = Vec2d(10, 0); + + SketchEntity b; + b.type = SketchEntity::Type::Line; + b.p0 = Vec2d(10, 0); + b.p1 = Vec2d(10, 10); + + SketchEntity a_out, b_out, arc_out; + bool ok = SketchEngine::fillet_lines(a, b, 2.0, a_out, b_out, arc_out); + REQUIRE(ok); + + REQUIRE_THAT(a_out.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(a_out.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(a_out.p1.x(), WithinAbs(8.0, 1e-9)); + REQUIRE_THAT(a_out.p1.y(), WithinAbs(0.0, 1e-9)); + + REQUIRE_THAT(b_out.p0.x(), WithinAbs(10.0, 1e-9)); + REQUIRE_THAT(b_out.p0.y(), WithinAbs(2.0, 1e-9)); + REQUIRE_THAT(b_out.p1.x(), WithinAbs(10.0, 1e-9)); + REQUIRE_THAT(b_out.p1.y(), WithinAbs(10.0, 1e-9)); + + REQUIRE(arc_out.type == SketchEntity::Type::Arc); + REQUIRE_THAT(arc_out.radius, WithinAbs(2.0, 1e-9)); + REQUIRE_THAT(arc_out.center.x(), WithinAbs(8.0, 1e-9)); + REQUIRE_THAT(arc_out.center.y(), WithinAbs(2.0, 1e-9)); + REQUIRE_THAT((arc_out.p0 - arc_out.center).norm(), WithinAbs(2.0, 1e-9)); + REQUIRE_THAT((arc_out.p1 - arc_out.center).norm(), WithinAbs(2.0, 1e-9)); +} + +TEST_CASE("Fillet parallel lines returns false", "[SketchEdit]") +{ + SketchEntity a; + a.type = SketchEntity::Type::Line; + a.p0 = Vec2d(0, 0); + a.p1 = Vec2d(10, 0); + + SketchEntity b; + b.type = SketchEntity::Type::Line; + b.p0 = Vec2d(0, 5); + b.p1 = Vec2d(10, 5); + + SketchEntity a_out, b_out, arc_out; + REQUIRE_FALSE(SketchEngine::fillet_lines(a, b, 1.0, a_out, b_out, arc_out)); +} + +TEST_CASE("Fillet arc too big returns false", "[SketchEdit]") +{ + SketchEntity a; + a.type = SketchEntity::Type::Line; + a.p0 = Vec2d(0, 0); + a.p1 = Vec2d(1, 0); + + SketchEntity b; + b.type = SketchEntity::Type::Line; + b.p0 = Vec2d(1, 0); + b.p1 = Vec2d(1, 1); + + SketchEntity a_out, b_out, arc_out; + REQUIRE_FALSE(SketchEngine::fillet_lines(a, b, 5.0, a_out, b_out, arc_out)); +} + +TEST_CASE("Trim right arm", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(-5, 0); + e.p1 = Vec2d(5, 0); + + SketchEntity vc; + vc.type = SketchEntity::Type::Line; + vc.p0 = Vec2d(0, -5); + vc.p1 = Vec2d(0, 5); + + bool ok = SketchEngine::trim_entity(e, {vc}, Vec2d(3, 0)); + REQUIRE(ok); + REQUIRE_THAT(e.p0.x(), WithinAbs(-5.0, 1e-9)); + REQUIRE_THAT(e.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Trim left arm", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(-5, 0); + e.p1 = Vec2d(5, 0); + + SketchEntity vc; + vc.type = SketchEntity::Type::Line; + vc.p0 = Vec2d(0, -5); + vc.p1 = Vec2d(0, 5); + + bool ok = SketchEngine::trim_entity(e, {vc}, Vec2d(-3, 0)); + REQUIRE(ok); + REQUIRE_THAT(e.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.x(), WithinAbs(5.0, 1e-9)); + REQUIRE_THAT(e.p1.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Trim no cut (u out of range)", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(-5, 0); + e.p1 = Vec2d(5, 0); + + SketchEntity other; + other.type = SketchEntity::Type::Line; + other.p0 = Vec2d(0, 3); + other.p1 = Vec2d(0, 8); + + REQUIRE_FALSE(SketchEngine::trim_entity(e, {other}, Vec2d(3, 0))); +} + +TEST_CASE("Extend forward to line", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(0, 0); + e.p1 = Vec2d(2, 0); + + SketchEntity other; + other.type = SketchEntity::Type::Line; + other.p0 = Vec2d(5, -5); + other.p1 = Vec2d(5, 5); + + bool ok = SketchEngine::extend_entity(e, {other}, Vec2d(2, 0)); + REQUIRE(ok); + REQUIRE_THAT(e.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.x(), WithinAbs(5.0, 1e-9)); + REQUIRE_THAT(e.p1.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Extend forward to circle", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(0, 0); + e.p1 = Vec2d(2, 0); + + SketchEntity other; + other.type = SketchEntity::Type::Circle; + other.center = Vec2d(10, 0); + other.p0 = Vec2d(10, 0); + other.radius = 3; + + bool ok = SketchEngine::extend_entity(e, {other}, Vec2d(2, 0)); + REQUIRE(ok); + REQUIRE_THAT(e.p0.x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.x(), WithinAbs(7.0, 1e-9)); + REQUIRE_THAT(e.p1.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Extend backward", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(0, 0); + e.p1 = Vec2d(2, 0); + + SketchEntity other; + other.type = SketchEntity::Type::Line; + other.p0 = Vec2d(-3, -5); + other.p1 = Vec2d(-3, 5); + + bool ok = SketchEngine::extend_entity(e, {other}, Vec2d(0, 0)); + REQUIRE(ok); + REQUIRE_THAT(e.p0.x(), WithinAbs(-3.0, 1e-9)); + REQUIRE_THAT(e.p0.y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.p1.x(), WithinAbs(2.0, 1e-9)); + REQUIRE_THAT(e.p1.y(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Extend no target", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(0, 0); + e.p1 = Vec2d(2, 0); + + SketchEntity other; + other.type = SketchEntity::Type::Line; + other.p0 = Vec2d(5, -5); + other.p1 = Vec2d(5, -1); + + REQUIRE_FALSE(SketchEngine::extend_entity(e, {other}, Vec2d(2, 0))); +} + +// --- Arc/Circle subject trim & extend (Fase 4.5 kernel) ------------------- + +TEST_CASE("Trim arc drops the picked (start) side", "[SketchEdit]") +{ + // Upper semicircle r=5, ccw from (5,0) to (-5,0); cutter = vertical axis. + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 5; + e.start_angle = 0.0; + e.end_angle = M_PI; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(0, -10); + cut.p1 = Vec2d(0, 10); + + // Pick the right quarter (phi=pi/4) -> it is removed, left quarter kept. + bool ok = SketchEngine::trim_entity(e, {cut}, Vec2d(5 * std::cos(M_PI/4), 5 * std::sin(M_PI/4))); + REQUIRE(ok); + REQUIRE(e.type == SketchEntity::Type::Arc); + REQUIRE_THAT(e.radius, WithinAbs(5.0, 1e-9)); + REQUIRE_THAT(e.start_angle, WithinAbs(M_PI / 2.0, 1e-9)); + REQUIRE_THAT(e.end_angle, WithinAbs(M_PI, 1e-9)); +} + +TEST_CASE("Trim arc drops the picked (end) side", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 5; + e.start_angle = 0.0; + e.end_angle = M_PI; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(0, -10); + cut.p1 = Vec2d(0, 10); + + // Pick the left quarter (phi=3pi/4) -> removed, right quarter kept. + bool ok = SketchEngine::trim_entity(e, {cut}, Vec2d(5 * std::cos(3*M_PI/4), 5 * std::sin(3*M_PI/4))); + REQUIRE(ok); + REQUIRE(e.type == SketchEntity::Type::Arc); + REQUIRE_THAT(e.start_angle, WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.end_angle, WithinAbs(M_PI / 2.0, 1e-9)); +} + +TEST_CASE("Trim circle opens into an arc excluding the pick", "[SketchEdit]") +{ + // Full circle r=5; vertical axis cuts it at (0,+-5). Pick the right side + // (5,0): the kept arc is the left half, sweeping pi and centred on (-5,0). + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = Vec2d(0, 0); + e.p0 = Vec2d(5, 0); + e.radius = 5; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(0, -10); + cut.p1 = Vec2d(0, 10); + + bool ok = SketchEngine::trim_entity(e, {cut}, Vec2d(5, 0)); + REQUIRE(ok); + REQUIRE(e.type == SketchEntity::Type::Arc); + REQUIRE_THAT(e.radius, WithinAbs(5.0, 1e-9)); + REQUIRE_THAT(e.end_angle - e.start_angle, WithinAbs(M_PI, 1e-9)); + // Midpoint of the kept arc must point left (away from the pick). + double mid = 0.5 * (e.start_angle + e.end_angle); + REQUIRE_THAT(5 * std::cos(mid), WithinAbs(-5.0, 1e-9)); + REQUIRE_THAT(5 * std::sin(mid), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("Extend arc forward (end) to a crossing", "[SketchEdit]") +{ + // Quarter arc (5,0)->(0,5); cutter crosses the circle at (-5,0). Picking + // near the end grows the sweep ccw to pi. + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 5; + e.start_angle = 0.0; + e.end_angle = M_PI / 2.0; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(-10, 0); + cut.p1 = Vec2d(0, 0); + + bool ok = SketchEngine::extend_entity(e, {cut}, Vec2d(0, 5)); + REQUIRE(ok); + REQUIRE(e.type == SketchEntity::Type::Arc); + REQUIRE_THAT(e.start_angle, WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.end_angle, WithinAbs(M_PI, 1e-9)); +} + +TEST_CASE("Extend arc backward (start) to a crossing", "[SketchEdit]") +{ + // Quarter arc (0,5)->(-5,0); cutter crosses at (5,0). Picking near the + // start grows the sweep cw to start_angle 0. + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 5; + e.start_angle = M_PI / 2.0; + e.end_angle = M_PI; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(10, 0); + cut.p1 = Vec2d(0, 0); + + bool ok = SketchEngine::extend_entity(e, {cut}, Vec2d(0, 5)); + REQUIRE(ok); + REQUIRE_THAT(e.start_angle, WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(e.end_angle, WithinAbs(M_PI, 1e-9)); +} + +TEST_CASE("Extend circle returns false (closed)", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Circle; + e.center = Vec2d(0, 0); + e.p0 = Vec2d(5, 0); + e.radius = 5; + + SketchEntity cut; + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(0, -10); + cut.p1 = Vec2d(0, 10); + + REQUIRE_FALSE(SketchEngine::extend_entity(e, {cut}, Vec2d(5, 0))); +} + +TEST_CASE("Trim arc with no crossing returns false", "[SketchEdit]") +{ + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = Vec2d(0, 0); + e.radius = 5; + e.start_angle = 0.0; + e.end_angle = M_PI / 2.0; + + SketchEntity cut; // far away, never reaches the r=5 circle + cut.type = SketchEntity::Type::Line; + cut.p0 = Vec2d(20, -5); + cut.p1 = Vec2d(20, 5); + + REQUIRE_FALSE(SketchEngine::trim_entity(e, {cut}, Vec2d(5 * std::cos(M_PI/4), 5 * std::sin(M_PI/4)))); +} + +// Regression guard: BEFORE the weld fix this test failed with 4 edges instead of 6. +// BRepLib_MakeWire::Add silently DROPS a disconnected edge (BRepLib_DisconnectedWire + NotDone) +// yet every successful Add ends with BRepLib_WireDone + Done(), so IsDone() reported only whether +// the LAST edge connected. This sketch is a real user loop (2 arcs + 4 lines) given in +// creation order, which is NOT traversal order, and its joint between the 3rd and 4th entity +// below is open by 2.28e-5 mm — larger than OCCT's default vertex tolerance. +TEST_CASE("entities_to_wires keeps every edge of a loop drawn out of order", "[SketchEngine]") +{ + std::vector ents(6); + + ents[0].type = SketchEntity::Type::Line; + ents[0].p0 = Vec2d(-0.537697713190522, -0.0009077462579133498); + ents[0].p1 = Vec2d(99.46230228680926, -0.0009141694814321626); + + ents[1].type = SketchEntity::Type::Arc; + ents[1].p0 = Vec2d(-0.537697713190522, -0.0009077462579133498); + ents[1].p1 = Vec2d(-100.14602636660666, -0.27673132181233495); + ents[1].center = Vec2d(-50.313868583115394, -10.248112903179617); + ents[1].radius = 50.81999999999999; + ents[1].start_angle = 0.20302922018398933; + ents[1].end_angle = 2.944101582158999; + + ents[2].type = SketchEntity::Type::Line; + ents[2].p0 = Vec2d(99.46228668626469, -39.22091416947833); + ents[2].p1 = Vec2d(-0.537864366432629, -39.22420589376945); + + ents[3].type = SketchEntity::Type::Arc; + ents[3].p0 = Vec2d(-100.14602636694521, -38.94673132181234); + ents[3].p1 = Vec2d(-0.5378420354900413, -39.22421049164698); + ents[3].center = Vec2d(-50.31377078666179, -28.975499083790503); + ents[3].radius = 50.82006659345552; + ents[3].start_angle = -2.944104841286737; + ents[3].end_angle = -0.20305921095748136; + + ents[4].type = SketchEntity::Type::Line; + ents[4].p0 = Vec2d(99.46228668626469, -39.22091416947833); + ents[4].p1 = Vec2d(99.46230228680926, -0.0009141694814321626); + + ents[5].type = SketchEntity::Type::Line; + ents[5].p0 = Vec2d(-100.14602636694521, -38.94673132181234); + ents[5].p1 = Vec2d(-100.14602636660666, -0.27673132181233495); + + auto wires = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + + REQUIRE(wires.size() == 1); + + int edge_count = 0; + for (TopExp_Explorer ex(wires[0], TopAbs_EDGE); ex.More(); ex.Next()) + ++edge_count; + REQUIRE(edge_count == 6); + + REQUIRE(wires[0].Closed()); +} + +// Regression guard: this fails at 1e-4 (the wire builder refuses a joint the viewport had +// already shaded closed) and passes at kSketchJoinTol. A 20x10 quad with one joint left open +// by 9e-4 mm — just inside kSketchJoinTol, exactly the case the viewport shades closed — given +// in an order that is NOT traversal order, so the ordering path is covered too. +TEST_CASE("a loop the viewport shades closed is buildable by the kernel", "[SketchEngine]") +{ + std::vector ents(4); + + // (0,0) -> (20,0) -> (20,10) -> (0,10) -> (0.0009, 0): last endpoint misses (0,0) by 9e-4. + ents[0].type = SketchEntity::Type::Line; + ents[0].p0 = Vec2d(0, 0); + ents[0].p1 = Vec2d(20, 0); + + // Index 1 is the FAR side, not the neighbour of index 0: creation order here is + // deliberately not traversal order, so a partial wire would reject it without the + // traversal walk. + ents[1].type = SketchEntity::Type::Line; + ents[1].p0 = Vec2d(20, 10); + ents[1].p1 = Vec2d(0, 10); + + ents[2].type = SketchEntity::Type::Line; + ents[2].p0 = Vec2d(20, 0); + ents[2].p1 = Vec2d(20, 10); + + ents[3].type = SketchEntity::Type::Line; + ents[3].p0 = Vec2d(0, 10); + ents[3].p1 = Vec2d(0.0009, 0); + + auto wires = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + + REQUIRE(wires.size() == 1); + + int edge_count = 0; + for (TopExp_Explorer ex(wires[0], TopAbs_EDGE); ex.More(); ex.Next()) + ++edge_count; + REQUIRE(edge_count == 4); + + REQUIRE(wires[0].Closed()); +} + +// Regression guard for the auto-close preference. Same 20x10 quad, one joint open by 9e-4 mm +// and given out of traversal order, as "a loop the viewport shades closed is buildable by the +// kernel". With auto-close ON the gap welds (one closed wire); with auto-close OFF it must not. +TEST_CASE("auto-close off makes the kernel demand an exact joint", "[SketchEngine]") +{ + std::vector ents(4); + + ents[0].type = SketchEntity::Type::Line; + ents[0].p0 = Vec2d(0, 0); + ents[0].p1 = Vec2d(20, 0); + + ents[1].type = SketchEntity::Type::Line; + ents[1].p0 = Vec2d(20, 10); + ents[1].p1 = Vec2d(0, 10); + + ents[2].type = SketchEntity::Type::Line; + ents[2].p0 = Vec2d(20, 0); + ents[2].p1 = Vec2d(20, 10); + + ents[3].type = SketchEntity::Type::Line; + ents[3].p0 = Vec2d(0, 10); + ents[3].p1 = Vec2d(0.0009, 0); + + auto edge_count = [](const TopoDS_Wire& w) { + int n = 0; + for (TopExp_Explorer ex(w, TopAbs_EDGE); ex.More(); ex.Next()) ++n; + return n; + }; + + // ON: the 9e-4 mm gap is inside kSketchJoinTol, so the loop welds into one closed wire. + Slic3r::set_sketch_auto_close(true); + auto wires_on = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + REQUIRE(wires_on.size() == 1); + REQUIRE(edge_count(wires_on[0]) == 4); + REQUIRE(wires_on[0].Closed()); + + // OFF: the joint is not exact, so the gap is NOT welded. entities_to_wires legitimately + // returns open chains (a sweep path is open), so the observable is an OPEN wire — the + // kernel no longer hands back the closed loop the viewport would have shaded. + Slic3r::set_sketch_auto_close(false); + auto wires_off = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + REQUIRE(wires_off.size() == 1); + REQUIRE(edge_count(wires_off[0]) == 4); + REQUIRE_FALSE(wires_off[0].Closed()); + + // OFF + an EXACT joint (last endpoint exactly (0,0)): the quad still builds closed, + // proving "off" means exact rather than broken. + ents[3].p1 = Vec2d(0, 0); + auto wires_exact = SketchEngine::entities_to_wires(ents, SketchPlane::XY()); + REQUIRE(wires_exact.size() == 1); + REQUIRE(edge_count(wires_exact[0]) == 4); + REQUIRE(wires_exact[0].Closed()); + + // Restore the default so test order cannot leak OFF into the other cases. + Slic3r::set_sketch_auto_close(true); +} + +// A stray open segment touching nothing must not break a closed profile: the viewport +// discards open chains when it shades a region extrudable, so with closed_only the kernel +// must discard them too — otherwise Revolve/Extrude fail on a sketch that looks perfect. +TEST_CASE("a stray open segment does not break a closed profile", "[SketchEngine]") +{ + auto line = [](double x0, double y0, double x1, double y1) { + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(x0, y0); + e.p1 = Vec2d(x1, y1); + return e; + }; + + std::vector ents; + ents.push_back(line(0, 0, 20, 0)); // 20x10 quad + ents.push_back(line(20, 0, 20, 10)); + ents.push_back(line(20, 10, 0, 10)); + ents.push_back(line(0, 10, 0, 0)); + ents.push_back(line(5, 5, 6, 5.2)); // stray, touches nothing + + auto edge_count = [](const TopoDS_Wire& w) { + int n = 0; + for (TopExp_Explorer ex(w, TopAbs_EDGE); ex.More(); ex.Next()) ++n; + return n; + }; + + // Unchanged behaviour: the stray line is its own open wire. + auto wires_all = SketchEngine::entities_to_wires(ents, SketchPlane::XY(), /*closed_only=*/false); + REQUIRE(wires_all.size() == 2); + + // closed_only drops the open chain: one closed quad survives. + auto wires_closed = SketchEngine::entities_to_wires(ents, SketchPlane::XY(), /*closed_only=*/true); + REQUIRE(wires_closed.size() == 1); + REQUIRE(edge_count(wires_closed[0]) == 4); + REQUIRE(wires_closed[0].Closed()); + + // The Revolve path (entities_to_wire) finds the single closed loop. + TopoDS_Wire w = SketchEngine::entities_to_wire(ents, SketchPlane::XY(), /*closed_only=*/true); + REQUIRE_FALSE(w.IsNull()); + REQUIRE(edge_count(w) == 4); +} + +// sketch_open_ends names the two free endpoints of an open chain, so the "does not form a +// single closed wire" failure can say WHERE the sketch is open. +TEST_CASE("sketch_open_ends names where a chain fails to close", "[SketchEngine]") +{ + auto line = [](double x0, double y0, double x1, double y1) { + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = Vec2d(x0, y0); + e.p1 = Vec2d(x1, y1); + return e; + }; + + // Open C shape: three lines, free endpoints at (0,0) and (0,10). + std::vector ents; + ents.push_back(line(0, 0, 10, 0)); + ents.push_back(line(10, 0, 10, 10)); + ents.push_back(line(10, 10, 0, 10)); + + auto got = sketch_open_ends(ents, SketchPlane::XY()); + REQUIRE(got.size() == 2); + + std::sort(got.begin(), got.end(), [](const Vec2d& a, const Vec2d& b) { + if (a.x() < b.x()) return true; + if (a.x() > b.x()) return false; + return a.y() < b.y(); + }); + + REQUIRE_THAT(got[0].x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(got[0].y(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(got[1].x(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT(got[1].y(), WithinAbs(10.0, 1e-9)); +} diff --git a/tests/libslic3r/test_sketchimport.cpp b/tests/libslic3r/test_sketchimport.cpp new file mode 100644 index 0000000000..3e3f7c906e --- /dev/null +++ b/tests/libslic3r/test_sketchimport.cpp @@ -0,0 +1,103 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) + +#include "libslic3r/CAD/SketchImport.hpp" +#include "libslic3r/Utils.hpp" // resources_dir +#include "test_utils.hpp" // ScopedTemporaryFile + +#include +#include + +using namespace Slic3r; + +// A 10x10 mm filled square, on disk because nanosvg reads from a file. The path +// must come from the system temp dir: a hardcoded /tmp is not writable on +// Windows, where the stream fails silently and the parse then sees no file. +static void write_square_svg(const std::string& path) +{ + std::ofstream f(path); + f << "" + ""; + REQUIRE(f.good()); +} + +TEST_CASE("svg_to_regions parses a filled path into a region", "[SketchImport]") +{ + ScopedTemporaryFile square(".svg"); + write_square_svg(square.string()); + + ImportRegions regs = svg_to_regions(square.string(), 1.0); + REQUIRE(regs.size() >= 1); + // Outer contour present with at least a few vertices. + REQUIRE(regs[0].size() >= 1); + REQUIRE(regs[0][0].size() >= 4); + + // Centred on the origin: bbox half-extent ~5 mm on each side. + double hi = 0.0; + for (const auto& region : regs) + for (const auto& contour : region) + for (const Vec2d& p : contour) + hi = std::max(hi, std::max(std::abs(p.x()), std::abs(p.y()))); + REQUIRE(hi > 3.0); // not collapsed + REQUIRE(hi < 8.0); // ~5 mm half-size after centring +} + +TEST_CASE("svg_to_regions rejects bad input gracefully", "[SketchImport]") +{ + ScopedTemporaryFile square(".svg"); + write_square_svg(square.string()); + ScopedTemporaryFile missing(".svg"); // name reserved, never written + + REQUIRE(svg_to_regions("", 1.0).empty()); + REQUIRE(svg_to_regions(missing.string(), 1.0).empty()); + REQUIRE(svg_to_regions(square.string(), 0.0).empty()); // scale<=0 +} + +TEST_CASE("transform_regions moves and scales independently", "[SketchImport]") +{ + ImportRegions r = {{ {Vec2d(-1,-1), Vec2d(1,-1), Vec2d(1,1), Vec2d(-1,1)} }}; + ImportRegions t = transform_regions(r, Vec2d(10, 20), 2.0, 3.0); + REQUIRE(t.size() == 1); + REQUIRE(t[0][0].size() == 4); + // (-1,-1) -> (-1*2+10, -1*3+20) = (8, 17) + REQUIRE_THAT(t[0][0][0].x(), Catch::Matchers::WithinAbs(8.0, 1e-9)); + REQUIRE_THAT(t[0][0][0].y(), Catch::Matchers::WithinAbs(17.0, 1e-9)); + // (1,1) -> (1*2+10, 1*3+20) = (12, 23) + REQUIRE_THAT(t[0][0][2].x(), Catch::Matchers::WithinAbs(12.0, 1e-9)); + REQUIRE_THAT(t[0][0][2].y(), Catch::Matchers::WithinAbs(23.0, 1e-9)); + // identity is a no-op + ImportRegions id = transform_regions(r, Vec2d(0,0), 1.0, 1.0); + REQUIRE_THAT(id[0][0][1].x(), Catch::Matchers::WithinAbs(1.0, 1e-9)); +} + +TEST_CASE("text_to_regions vectorizes glyphs with counters", "[SketchImport]") +{ + // Locate the bundled font; resources_dir() may be unset under ctest, so + // fall back to a cwd-relative path (tests run from the repo root). + std::string font = resources_dir().empty() + ? std::string("resources/fonts/HarmonyOS_Sans_SC_Regular.ttf") + : resources_dir() + "/fonts/HarmonyOS_Sans_SC_Regular.ttf"; + { + std::ifstream probe(font); + if (!probe.good()) { + SUCCEED("bundled font not reachable in this environment; covered live on :10"); + return; + } + } + + // Bad input is rejected without throwing. + REQUIRE(text_to_regions("", 10.0, font).empty()); + REQUIRE(text_to_regions("A", 0.0, font).empty()); + + // 'A' has one triangular counter -> a region with an outer + 1 hole. + ImportRegions a = text_to_regions("A", 12.0, font); + REQUIRE(a.size() >= 1); + bool has_hole = false; + for (const auto& region : a) + if (region.size() >= 2) has_hole = true; + REQUIRE(has_hole); + + // Two letters produce more regions than one. + ImportRegions ab = text_to_regions("AB", 12.0, font); + REQUIRE(ab.size() >= a.size()); +} diff --git a/tests/libslic3r/test_sketchinference.cpp b/tests/libslic3r/test_sketchinference.cpp new file mode 100644 index 0000000000..cbdd90628b --- /dev/null +++ b/tests/libslic3r/test_sketchinference.cpp @@ -0,0 +1,174 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) +using Catch::Approx; // v3 scopes Approx into the Catch namespace; v2 had it at global scope + +#include "libslic3r/CAD/SketchInference.hpp" + +using namespace Slic3r; +using K = InferenceSnap::Kind; + +static SketchEntity line(Vec2d a, Vec2d b) +{ + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = a; e.p1 = b; return e; +} +static SketchEntity circle(Vec2d c, double r) +{ + SketchEntity e; e.type = SketchEntity::Type::Circle; e.center = c; e.p0 = c; e.radius = r; return e; +} + +TEST_CASE("inference: cursor near a line endpoint snaps Coincident-able to it", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}) }; + auto s = infer_point_snap(ents, {10.3, 0.2}, 1.0); + REQUIRE(s.kind == K::Endpoint); + CHECK(s.entity == 0); + CHECK(s.role == SketchPointRole::P1); + CHECK((s.point - Vec2d(10, 0)).norm() == Approx(0.0).margin(1e-9)); +} + +TEST_CASE("inference: endpoint beats midpoint when both are in range", "[inference]") +{ + std::vector ents = { line({0, 0}, {2, 0}) }; + // Query equidistant-ish but closer to the endpoint: endpoint tier wins regardless. + auto s = infer_point_snap(ents, {1.9, 0.0}, 5.0); + CHECK(s.kind == K::Endpoint); + CHECK(s.role == SketchPointRole::P1); +} + +TEST_CASE("inference: midpoint of a line is detected", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}) }; + auto s = infer_point_snap(ents, {5.1, 0.1}, 0.5, /*include_origin=*/false); + REQUIRE(s.kind == K::Midpoint); + CHECK((s.point - Vec2d(5, 0)).norm() == Approx(0.0).margin(1e-9)); +} + +TEST_CASE("inference: circle centre and rim", "[inference]") +{ + std::vector ents = { circle({0, 0}, 5.0) }; + auto c = infer_point_snap(ents, {0.2, 0.1}, 1.0, false); + CHECK(c.kind == K::Center); + auto r = infer_point_snap(ents, {5.1, 0.0}, 1.0, false); + REQUIRE(r.kind == K::OnEdge); + CHECK((r.point - Vec2d(5, 0)).norm() == Approx(0.0).margin(1e-9)); +} + +TEST_CASE("inference: origin snap when nothing else is near", "[inference]") +{ + std::vector ents = { line({20, 20}, {30, 20}) }; + auto s = infer_point_snap(ents, {0.1, 0.1}, 1.0); + REQUIRE(s.kind == K::Origin); + CHECK(s.entity == -1); + CHECK((s.point - Vec2d(0, 0)).norm() == Approx(0.0).margin(1e-9)); +} + +TEST_CASE("inference: nothing in range returns None and the raw query", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}) }; + auto s = infer_point_snap(ents, {50, 50}, 1.0, /*include_origin=*/false); + CHECK(s.kind == K::None); + CHECK((s.point - Vec2d(50, 50)).norm() == Approx(0.0).margin(1e-9)); +} + +TEST_CASE("inference: axis inference flags horizontal / vertical segments", "[inference]") +{ + CHECK(infer_axis_constraint({0, 0}, {10, 0.05}).value() == SketchConstraintType::Horizontal); + CHECK(infer_axis_constraint({0, 0}, {0.05, 10}).value() == SketchConstraintType::Vertical); + CHECK_FALSE(infer_axis_constraint({0, 0}, {10, 10}).has_value()); // 45 deg + CHECK_FALSE(infer_axis_constraint({0, 0}, {0, 0}).has_value()); // degenerate +} + +TEST_CASE("inference: perpendicular inferred for a connected square corner", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10, 0}, {10, 7}) }; + auto r = infer_relations(ents, 1); + REQUIRE(r.size() == 1); + CHECK(r[0].type == SketchConstraintType::Perpendicular); + CHECK(r[0].ea == 0); + CHECK(r[0].eb == 1); +} + +TEST_CASE("inference: parallel inferred for connected collinear-ish lines", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10, 0}, {21, 0.1}) }; + auto r = infer_relations(ents, 1); + REQUIRE(r.size() == 1); + CHECK(r[0].type == SketchConstraintType::Parallel); + CHECK(r[0].ea == 0); + CHECK(r[0].eb == 1); +} + +TEST_CASE("inference: two unconnected parallel lines infer nothing", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({0, 5}, {10, 5}) }; + auto r = infer_relations(ents, 1); + CHECK(r.empty()); +} + +TEST_CASE("inference: a corner outside tolerance infers nothing", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10, 0}, {15, 7}) }; + auto r = infer_relations(ents, 1); + CHECK(r.empty()); +} + +TEST_CASE("inference: equal radius inferred for near-equal circles", "[inference]") +{ + auto r = infer_relations({ circle({0, 0}, 5.0), circle({30, 0}, 5.02) }, 1); + REQUIRE(r.size() == 1); + CHECK(r[0].type == SketchConstraintType::EqualRadius); + CHECK(r[0].ea == 0); + CHECK(r[0].eb == 1); + + auto r2 = infer_relations({ circle({0, 0}, 5.0), circle({30, 0}, 6.0) }, 1); + CHECK(r2.empty()); +} + +TEST_CASE("inference: tangent inferred for a line meeting a circle tangentially", "[inference]") +{ + std::vector ents = { circle({0, 0}, 5.0), line({0, 5}, {10, 5}) }; + auto r = infer_relations(ents, 1); + REQUIRE(r.size() == 1); + CHECK(r[0].type == SketchConstraintType::Tangent); + CHECK(r[0].ea == 0); + CHECK(r[0].eb == 1); + + std::vector off = { circle({0, 0}, 5.0), line({0, 5}, {10, 9}) }; + CHECK(infer_relations(off, 1).empty()); +} + +TEST_CASE("inference: nothing inferred against a higher index", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10, 0}, {10, 7}) }; + auto r = infer_relations(ents, 0); + CHECK(r.empty()); +} + +TEST_CASE("inference: degenerate entities are ignored", "[inference]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10, 0}, {10, 0}) }; + auto r = infer_relations(ents, 1); + CHECK(r.empty()); +} + +// The cap that keeps infer_relations linear rather than quadratic. Without it a drawing with +// many equal holes yields a constraint per PAIR: 200 equal circles produced ~20000 candidates, +// the batch was rejected as over-constrained, and the caller's one-at-a-time fallback then ran +// a solve per constraint -- which pinned the app at 95% of a core with the MCP socket +// unresponsive, and is what the corpus rung caught. +TEST_CASE("inference: at most one relation per rule per new entity", "[inference]") +{ + // 40 circles of the same radius; the 41st must not produce 40 EqualRadius constraints. + std::vector ents; + for (int i = 0; i < 41; ++i) { + SketchEntity c; + c.type = SketchEntity::Type::Circle; + c.center = Vec2d(i * 20.0, 0.0); + c.p0 = c.center; + c.radius = 5.0; + ents.push_back(c); + } + auto rels = infer_relations(ents, 40); + CHECK(rels.size() == 1); + CHECK(rels[0].type == SketchConstraintType::EqualRadius); + CHECK(rels[0].eb == 40); +} diff --git a/tests/libslic3r/test_sketchprofile.cpp b/tests/libslic3r/test_sketchprofile.cpp new file mode 100644 index 0000000000..7f455eb936 --- /dev/null +++ b/tests/libslic3r/test_sketchprofile.cpp @@ -0,0 +1,209 @@ +// Closed-profile harness for the 2D sketch layer. +// +// The existing [SketchEdit] cases check one entity at a time — offset ONE line, mirror ONE +// arc — and every one of them passes while the feature they belong to is unusable. What a +// user actually does is combine 2D features into a CLOSED PROFILE and extrude it, and the +// property that makes that work is topological, not per-entity: after the operation, do the +// pieces still form a single closed loop? +// +// So these cases assert the loop, not the coordinates. That is the invariant every sketch +// operation has to preserve and the only one that predicts whether the GUI can build a solid +// out of the result. +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) +#include "libslic3r/CAD/SketchEngine.hpp" +#include +#include +#include + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +namespace { + +SketchPlane xy_plane() { return SketchPlane::XY(); } + +SketchEntity line(const Vec2d& a, const Vec2d& b) +{ + SketchEntity e; + e.type = SketchEntity::Type::Line; + e.p0 = a; e.p1 = b; + return e; +} + +// A CCW rectangle as four Line entities sharing endpoints exactly. +std::vector rect(double w, double h) +{ + return { line({0, 0}, {w, 0}), line({w, 0}, {w, h}), + line({w, h}, {0, h}), line({0, h}, {0, 0}) }; +} + +// How many of the wires the sketch resolves to are CLOSED. +int closed_wires(const std::vector& ents) +{ + const auto ws = SketchEngine::entities_to_wires(ents, xy_plane()); + int n = 0; + for (const auto& w : ws) + if (!w.IsNull() && w.Closed()) ++n; + return n; +} + +// Enclosed area of the single closed loop the sketch resolves to. -1 when it is not one +// closed loop — the failure the whole file exists to catch. +double profile_area(const std::vector& ents) +{ + const auto ws = SketchEngine::entities_to_wires(ents, xy_plane()); + if (ws.size() != 1 || ws[0].IsNull() || !ws[0].Closed()) return -1.0; + const TopoDS_Face f = SketchEngine::wires_to_face(ws, xy_plane()); + GProp_GProps props; + BRepGProp::SurfaceProperties(f, props); + return props.Mass(); +} + +SketchEntity arc(const Vec2d& c, double r, double a0, double a1) +{ + SketchEntity e; + e.type = SketchEntity::Type::Arc; + e.center = c; + e.radius = r; + e.start_angle = a0; + e.end_angle = a1; + e.p0 = c + r * Vec2d(std::cos(a0), std::sin(a0)); + e.p1 = c + r * Vec2d(std::cos(a1), std::sin(a1)); + return e; +} + +} // namespace + +TEST_CASE("profile baseline: a hand-built rectangle is one closed loop", "[SketchProfile]") +{ + REQUIRE(closed_wires(rect(40, 20)) == 1); +} + +TEST_CASE("profile: mirroring a closed rectangle keeps it closed", "[SketchProfile]") +{ + const auto m = SketchEngine::mirror_entities(rect(40, 20), Vec2d(-10, 0), Vec2d(-10, 1)); + REQUIRE(m.size() == 4); + REQUIRE(closed_wires(m) == 1); +} + +TEST_CASE("profile: mirroring an open half-profile closes it against the axis", "[SketchProfile]") +{ + // Half a rectangle, open along x=0 — the classic "draw half, mirror it" gesture. + const std::vector half = { + line({0, 0}, {20, 0}), line({20, 0}, {20, 10}), line({20, 10}, {0, 10}) }; + auto all = half; + for (const auto& e : SketchEngine::mirror_entities(half, Vec2d(0, 0), Vec2d(0, 1))) + all.push_back(e); + REQUIRE(all.size() == 6); + REQUIRE(closed_wires(all) == 1); +} + +TEST_CASE("profile: offsetting a closed rectangle keeps it closed", "[SketchProfile]") +{ + const auto out = SketchEngine::offset_entities(rect(40, 20), 5.0); + REQUIRE(out.size() == 4); + REQUIRE(closed_wires(out) == 1); +} + +TEST_CASE("profile: offset outward grows the enclosed area by the right amount", "[SketchProfile]") +{ + // A rectangle offset outward by d is (w+2d) x (h+2d) with the corners rounded at r=d, + // so its area is w*h + 2d(w+h) + pi*d^2 whichever way the corners are healed... except + // for a sharp-corner offset, which is exactly (w+2d)*(h+2d). Either healing is defensible; + // a set of four disconnected segments is not, and that is what this measures. + const double w = 40, h = 20, d = 5; + const auto out = SketchEngine::offset_entities(rect(w, h), d); + const auto ws = SketchEngine::entities_to_wires(out, xy_plane()); + REQUIRE(ws.size() == 1); + REQUIRE(ws[0].Closed()); +} + +TEST_CASE("profile: offset sign is left-of-travel, so +d shrinks a CCW rectangle", "[SketchProfile]") +{ + // The convention has to be pinned by a test, because it is the one thing a caller cannot + // read off the geometry: +d = left of the direction of travel = inward for a CCW loop. + // Miter join on a rectangle keeps the corners sharp, so the result is exact. + const double w = 40, h = 20, d = 5; + REQUIRE_THAT(profile_area(SketchEngine::offset_entities(rect(w, h), d)), + WithinAbs((w - 2 * d) * (h - 2 * d), 1e-6)); + REQUIRE_THAT(profile_area(SketchEngine::offset_entities(rect(w, h), -d)), + WithinAbs((w + 2 * d) * (h + 2 * d), 1e-6)); +} + +TEST_CASE("profile: offsetting a stadium (two lines + two arcs) stays closed", "[SketchProfile]") +{ + // A slot outline: straight top and bottom joined by half-circle caps. This is the case the + // per-entity offset could never repair, because both seams are line-to-arc. + const double L = 30, r = 8, d = 3; + const std::vector slot = { + line({0, -r}, {L, -r}), + arc({L, 0}, r, -M_PI / 2, M_PI / 2), + line({L, r}, {0, r}), + arc({0, 0}, r, M_PI / 2, 3 * M_PI / 2), + }; + REQUIRE(closed_wires(slot) == 1); + const auto out = SketchEngine::offset_entities(slot, -d); // -d = outward for this CCW loop + REQUIRE(closed_wires(out) == 1); + // Offsetting a stadium outward by d gives the stadium with radius r+d: L*2(r+d) + pi(r+d)^2. + // Lines and caps must move the SAME way — that is the assertion this case exists for. + const double rr = r + d; + REQUIRE_THAT(profile_area(out), WithinAbs(L * 2 * rr + M_PI * rr * rr, 1e-6)); +} + +TEST_CASE("profile: an open chain offsets without being forced closed", "[SketchProfile]") +{ + // A sweep path is legitimately open; the repair must join its interior seams and leave + // the two free ends alone. + const std::vector open_chain = { + line({0, 0}, {20, 0}), line({20, 0}, {20, 10}) }; + const auto out = SketchEngine::offset_entities(open_chain, 4.0); + REQUIRE(out.size() == 2); + REQUIRE(closed_wires(out) == 0); + // The interior seam is repaired: the two offset segments still meet. + REQUIRE_THAT((out[0].p1 - out[1].p0).norm(), WithinAbs(0.0, 1e-9)); +} + +TEST_CASE("profile: a mirrored half offsets as one loop, not two", "[SketchProfile]") +{ + // The classic "draw half, mirror it" gesture on a stadium. mirror_entities emits a half + // that travels the opposite way round, so the concatenation must still chain as ONE closed + // loop and its mirrored cap must offset outward like the original, not inward. + const double L = 30, R = 15, d = 4; + const std::vector half = { + line({0, -R}, {L, -R}), + arc({L, 0}, R, -M_PI / 2, M_PI / 2), + line({L, R}, {0, R}), + }; + std::vector all = half; + for (const auto& e : SketchEngine::mirror_entities(half, Vec2d(0, 0), Vec2d(0, 1))) + all.push_back(e); + REQUIRE(closed_wires(all) == 1); + + const auto out = SketchEngine::offset_entities(all, -d); // -d = outward for this loop + REQUIRE(closed_wires(out) == 1); + for (const auto& o : out) + if (o.type == SketchEntity::Type::Arc) + REQUIRE_THAT(o.radius, WithinAbs(R + d, 1e-9)); +} + +TEST_CASE("profile: a mirrored half continues the original chain", "[SketchProfile]") +{ + // The point of emitting the reflected half reversed: appending it to the source must give a + // chain you can WALK, head-to-tail, with no consumer having to notice that half of it came + // from a mirror. The end of the last source entity must be the start of the first mirrored + // one, and the end of the last mirrored one must close back to the very first start. + const std::vector half = { + line({0, -15}, {50, -15}), line({50, -15}, {50, 15}), line({50, 15}, {0, 15}) }; + const auto m = SketchEngine::mirror_entities(half, Vec2d(0, 0), Vec2d(0, 1)); + REQUIRE(m.size() == 3); + + REQUIRE_THAT((half.back().p1 - m.front().p0).norm(), WithinAbs(0.0, 1e-9)); + REQUIRE_THAT((m.back().p1 - half.front().p0).norm(), WithinAbs(0.0, 1e-9)); + + for (size_t i = 0; i + 1 < m.size(); ++i) + REQUIRE_THAT((m[i].p1 - m[i + 1].p0).norm(), WithinAbs(0.0, 1e-9)); + + auto all = half; + for (const auto& e : m) all.push_back(e); + REQUIRE(closed_wires(all) == 1); +} diff --git a/tests/libslic3r/test_slvs_constraints.cpp b/tests/libslic3r/test_slvs_constraints.cpp new file mode 100644 index 0000000000..6dfac07348 --- /dev/null +++ b/tests/libslic3r/test_slvs_constraints.cpp @@ -0,0 +1,401 @@ +#include // mainline OrcaSlicer ships Catch2 v3 (v2 was catch2/catch.hpp) +using Catch::Approx; // v3 scopes Approx into the Catch namespace; v2 had it at global scope + +#include "libslic3r/CAD/SketchSolver.hpp" +#include "libslic3r/CAD/SketchEngine.hpp" + +using namespace Slic3r; +using CT = SketchConstraintType; +using R = SketchPointRole; + +static SketchEntity line(Vec2d a, Vec2d b) +{ + SketchEntity e; e.type = SketchEntity::Type::Line; e.p0 = a; e.p1 = b; return e; +} +static SketchEntity circle(Vec2d c, double r) +{ + SketchEntity e; e.type = SketchEntity::Type::Circle; e.center = c; e.p0 = c; e.radius = r; return e; +} +static SketchEntityConstraintDef con(CT t, int ea, R ra, int eb, R rb, double v = 0.0) +{ + SketchEntityConstraintDef c; c.type = t; c.ea = ea; c.ra = ra; c.eb = eb; c.rb = rb; c.value = v; return c; +} + +TEST_CASE("slvs: distance + horizontal + fix solves a line length", "[slvs]") +{ + std::vector ents = { line({0, 0}, {5, 1}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Horizontal, 0, R::P0, 0, R::P1), + con(CT::Distance, 0, R::P0, 0, R::P1, 10.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK((ents[0].p1 - ents[0].p0).norm() == Approx(10.0).margin(1e-6)); + CHECK(ents[0].p0.x() == Approx(0.0).margin(1e-6)); + CHECK(ents[0].p0.y() == Approx(0.0).margin(1e-6)); + CHECK(ents[0].p1.y() == Approx(0.0).margin(1e-6)); // horizontal +} + +TEST_CASE("slvs: coincident joins two line endpoints (loop closes)", "[slvs]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({10.3, 0.2}, {10, 10}) }; + std::vector cons = { + con(CT::Coincident, 0, R::P1, 1, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK((ents[0].p1 - ents[1].p0).norm() == Approx(0.0).margin(1e-6)); +} + +TEST_CASE("slvs: parallel + perpendicular on lines", "[slvs]") +{ + std::vector ents = { line({0, 0}, {10, 1}), line({0, 5}, {10, 5.5}), line({0, 0}, {0.5, 10}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Horizontal, 0, R::P0, 0, R::P1), + con(CT::Parallel, 0, R::P0, 1, R::P0), // line1 parallel to line0 + con(CT::Perpendicular, 0, R::P0, 2, R::P0), // line2 perpendicular to line0 + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[1].p1.y() - ents[1].p0.y() == Approx(0.0).margin(1e-6)); // line1 horizontal + CHECK(ents[2].p1.x() - ents[2].p0.x() == Approx(0.0).margin(1e-6)); // line2 vertical +} + +TEST_CASE("slvs: circle radius constraint", "[slvs]") +{ + std::vector ents = { circle({2, 2}, 3.0) }; + std::vector cons = { con(CT::Radius, 0, R::P0, -1, R::P0, 7.0) }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].radius == Approx(7.0).margin(1e-6)); +} + +TEST_CASE("slvs: degrees of freedom reported", "[slvs]") +{ + // One free line with only a Fix on the start: 4 DoF total minus 2 (fix) = 2 remaining. + std::vector ents = { line({0, 0}, {3, 4}) }; + std::vector cons = { con(CT::Fix, 0, R::P0, 0, R::P0) }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(res.dof == 2); +} + +TEST_CASE("slvs: drag pulls a point while constraints hold", "[slvs]") +{ + // A vertical line of fixed length 10, P0 pinned at the origin. Dragging P1 toward + // (10,0) must keep the length (Distance constraint) but rotate the line so the end + // follows the cursor into positive x — the dragged param wins the under-constrained DoF. + std::vector ents = { line({0, 0}, {0, 10}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Distance, 0, R::P0, 0, R::P1, 10.0), + }; + ents[0].p1 = Vec2d(10, 0); // user dropped the endpoint here + auto res = sketch_solve_drag(ents, cons, 0, R::P1); + REQUIRE(res.ok); + CHECK((ents[0].p1 - ents[0].p0).norm() == Approx(10.0).margin(1e-6)); // length held + CHECK(ents[0].p0.x() == Approx(0.0).margin(1e-6)); // P0 still pinned + CHECK(ents[0].p0.y() == Approx(0.0).margin(1e-6)); + CHECK(ents[0].p1.x() > 1.0); // end followed the drag toward +x (not stuck vertical) +} + +TEST_CASE("slvs: over-constrained / inconsistent is detected", "[slvs]") +{ + std::vector ents = { line({0, 0}, {5, 0}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Fix, 0, R::P1, 0, R::P1), + con(CT::Distance, 0, R::P0, 0, R::P1, 99.0), // contradicts the pinned endpoints + }; + auto res = sketch_solve(ents, cons); + CHECK_FALSE(res.ok); // SLVS_RESULT_INCONSISTENT +} + +// yww4. libslvs sizes its System with a compile-time `MAX_UNKNOWNS = 1024`, and the +// solver is handed every entity in the sketch at 2 params per point — so a sketch of about 480 +// lines is the last one that fits and the next comes back TOO_MANY_UNKNOWNS. Because +// try_add_constraints rolls a failed batch back, that turned into: every auto-inferred constraint +// on a large sketch silently dropped, and from then on no dimension could ever be applied to it. +// Constraints only couple entities that share a point, so the sketch is solved component by +// component when the whole system does not fit. +TEST_CASE("slvs: a sketch past the solver's unknown limit still solves", "[slvs]") +{ + // 300 disjoint squares: 1200 lines, 4800 unknowns whole, 8 per component. + const int N = 300; + std::vector ents; + std::vector cons; + for (int i = 0; i < N; ++i) { + const double x = (i % 30) * 10.0, y = (i / 30) * 10.0; + const int b = int(ents.size()); + ents.push_back(line({x, y}, {x + 4.0, y})); + ents.push_back(line({x + 4.0, y}, {x + 4.0, y + 4.0})); + ents.push_back(line({x + 4.0, y + 4.0}, {x, y + 4.0})); + ents.push_back(line({x, y + 4.0}, {x, y})); + for (int k = 0; k < 4; ++k) + cons.push_back(con(CT::Coincident, b + k, R::P1, b + (k + 1) % 4, R::P0)); + } + REQUIRE(ents.size() == size_t(4 * N)); + + std::vector before = ents; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + for (size_t i = 0; i < ents.size(); ++i) { // already satisfied: nothing may move + CHECK(ents[i].p0.x() == Approx(before[i].p0.x()).margin(1e-9)); + CHECK(ents[i].p0.y() == Approx(before[i].p0.y()).margin(1e-9)); + CHECK(ents[i].p1.x() == Approx(before[i].p1.x()).margin(1e-9)); + CHECK(ents[i].p1.y() == Approx(before[i].p1.y()).margin(1e-9)); + } + + // And a dimension typed onto one of them lands exactly, which is what stopped working. + cons.push_back(con(CT::Distance, 0, R::P0, 0, R::P1, 7.0)); + auto res2 = sketch_solve(ents, cons); + REQUIRE(res2.ok); + CHECK((ents[0].p1 - ents[0].p0).norm() == Approx(7.0).margin(1e-9)); + + // A conflict inside ONE component must still be caught, not swallowed by the split. + cons.push_back(con(CT::Distance, 0, R::P0, 0, R::P1, 99.0)); + auto res3 = sketch_solve(ents, cons); + CHECK_FALSE(res3.ok); +} + +TEST_CASE("slvs: equal radius drives two circles to one radius", "[slvs][CadDocument]") +{ + std::vector ents = { circle({0, 0}, 5.0), circle({10, 0}, 12.0) }; + std::vector cons = { + con(CT::EqualRadius, 0, R::P0, 1, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].radius == Approx(ents[1].radius).margin(1e-9)); + CHECK(ents[0].radius > 1e-6); // equal-at-zero would satisfy the line above trivially +} + +TEST_CASE("slvs: equal radius plus a radius dimension pins both", "[slvs][CadDocument]") +{ + std::vector ents = { circle({0, 0}, 5.0), circle({10, 0}, 12.0) }; + std::vector cons = { + con(CT::EqualRadius, 0, R::P0, 1, R::P0), + con(CT::Radius, 0, R::P0, -1, R::P0, 8.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].radius == Approx(8.0).margin(1e-9)); + CHECK(ents[1].radius == Approx(8.0).margin(1e-9)); +} + +TEST_CASE("slvs: collinear makes two offset lines share one line", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({0, 4}, {10, 4}) }; + std::vector cons = { + con(CT::Collinear, 0, R::P0, 1, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + const Vec2d& a0 = ents[0].p0; + const Vec2d ad = ents[0].p1 - ents[0].p0; + for (int k = 0; k <= 1; ++k) { + const Vec2d& pk = (k == 0) ? ents[1].p0 : ents[1].p1; + const double cross = ad.x() * (pk.y() - a0.y()) - ad.y() * (pk.x() - a0.x()); + CHECK(cross == Approx(0.0).margin(1e-9)); + } + // A line collapsed to a point is trivially collinear with anything, so the cross + // products above would pass on a degenerate solve. Both lines must survive intact. + CHECK(ad.norm() == Approx(10.0).margin(1e-9)); + CHECK((ents[1].p1 - ents[1].p0).norm() == Approx(10.0).margin(1e-9)); +} + +TEST_CASE("slvs: collinear on already-collinear lines moves nothing", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {10, 0}), line({20, 0}, {30, 0}) }; + std::vector cons = { + con(CT::Collinear, 0, R::P0, 1, R::P0), + }; + std::vector before = ents; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + for (size_t i = 0; i < ents.size(); ++i) { // already satisfied: nothing may move + CHECK(ents[i].p0.x() == Approx(before[i].p0.x()).margin(1e-9)); + CHECK(ents[i].p0.y() == Approx(before[i].p0.y()).margin(1e-9)); + CHECK(ents[i].p1.x() == Approx(before[i].p1.x()).margin(1e-9)); + CHECK(ents[i].p1.y() == Approx(before[i].p1.y()).margin(1e-9)); + } +} + +TEST_CASE("slvs: distance-x drives the horizontal gap and leaves Y alone", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {3, 7}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::DistanceX, 0, R::P0, 0, R::P1, 10.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + // SIGNED, not abs. PROJ_PT_DISTANCE constrains (pB - pA).dot(unit(dir)), and a + // LINE_SEGMENT's direction is point[0] - point[1] (slvs entity.cpp), so the reference + // line is built head-first to mean +X. Assert on abs and a flipped reference passes + // while every dimension lands the point on the wrong side of its anchor. + CHECK(ents[0].p1.x() - ents[0].p0.x() == Approx(10.0).margin(1e-9)); + CHECK(ents[0].p1.y() == Approx(7.0).margin(1e-9)); // Y must not be disturbed +} + +TEST_CASE("slvs: distance-y drives the vertical gap and leaves X alone", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {3, 7}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::DistanceY, 0, R::P0, 0, R::P1, 10.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p1.y() - ents[0].p0.y() == Approx(10.0).margin(1e-9)); // signed: see above + CHECK(ents[0].p1.x() == Approx(3.0).margin(1e-9)); // X must not be disturbed +} + +TEST_CASE("slvs: distance-x is not the straight-line distance", "[slvs][CadDocument]") +{ + // B is at straight-line distance 10 from A; DistanceX = 6 is already satisfied, so a + // correct projection leaves B untouched. This is the case that fails if the constraint + // were wired to SLVS_C_PT_PT_DISTANCE, which would drag B onto the radius-6 circle. + std::vector ents = { line({0, 0}, {6, 8}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::DistanceX, 0, R::P0, 0, R::P1, 6.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p1.x() == Approx(6.0).margin(1e-9)); + CHECK(ents[0].p1.y() == Approx(8.0).margin(1e-9)); +} + +TEST_CASE("slvs: distance-x plus distance-y fully locates a point", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {1, 1}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::DistanceX, 0, R::P0, 0, R::P1, 4.0), + con(CT::DistanceY, 0, R::P0, 0, R::P1, 3.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p1.x() - ents[0].p0.x() == Approx(4.0).margin(1e-9)); // signed: see above + CHECK(ents[0].p1.y() - ents[0].p0.y() == Approx(3.0).margin(1e-9)); +} + +// The property the GUI's ref-ordering exists to preserve: DistanceX is SIGNED, so applying +// the CURRENT projected delta as the target must not move anything. If the refs are ordered +// so the shown value is positive while the actual signed delta is negative, accepting the +// value a dimension opens with teleports the point to the other side of its anchor. +TEST_CASE("slvs: applying a point's own distance-x is a no-op", "[slvs][CadDocument]") +{ + // p1 sits to the LEFT of p0, so the signed delta p1 - p0 is negative. + std::vector ents = { line({0, 0}, {-4, 7}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::DistanceX, 0, R::P0, 0, R::P1, -4.0), // the CURRENT signed delta + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p1.x() == Approx(-4.0).margin(1e-9)); // stayed left, did not flip to +4 + CHECK(ents[0].p1.y() == Approx(7.0).margin(1e-9)); +} + +static SketchEntity point(Vec2d p) +{ + SketchEntity e; e.type = SketchEntity::Type::Point; e.p0 = p; return e; +} + +TEST_CASE("slvs: coincident onto the origin sentinel pins a point", "[slvs][CadDocument]") +{ + std::vector ents = { point({5, 5}) }; + std::vector cons = { + con(CT::Coincident, 0, R::P0, kSketchRefOrigin, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p0.x() == Approx(0.0).margin(1e-9)); + CHECK(ents[0].p0.y() == Approx(0.0).margin(1e-9)); +} + +// NOTE on why these pin the free direction instead of asserting "the other coordinate is +// left alone". sys.dragged[] is populated only while a drag is in progress, so a plain +// sketch_solve of an UNDER-constrained system is free to move any parameter -- solvespace +// runs a Newton iteration, it does not minimise movement. PointOnLine alone is one equation +// in two unknowns, and the point measurably slides along the axis (from (7,4) to (4,0)). +// That is legal, not a defect, so the well-posed test states both coordinates. +TEST_CASE("slvs: point-on-line onto the X axis, located along it from the origin", "[slvs][CadDocument]") +{ + std::vector ents = { point({7, 4}) }; + std::vector cons = { + con(CT::PointOnLine, 0, R::P0, kSketchRefAxisX, R::P0), + con(CT::DistanceX, kSketchRefOrigin, R::P0, 0, R::P0, 7.0), // both sentinels at once + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p0.y() == Approx(0.0).margin(1e-9)); // driven onto the X axis + CHECK(ents[0].p0.x() == Approx(7.0).margin(1e-9)); // and located along it +} + +TEST_CASE("slvs: point-on-line onto the Y axis, located along it from the origin", "[slvs][CadDocument]") +{ + std::vector ents = { point({4, 7}) }; + std::vector cons = { + con(CT::PointOnLine, 0, R::P0, kSketchRefAxisY, R::P0), + con(CT::DistanceY, kSketchRefOrigin, R::P0, 0, R::P0, 7.0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p0.x() == Approx(0.0).margin(1e-9)); // driven onto the Y axis + CHECK(ents[0].p0.y() == Approx(7.0).margin(1e-9)); // and located along it +} + +TEST_CASE("slvs: parallel to the X axis levels a line without collapsing it", "[slvs][CadDocument]") +{ + std::vector ents = { line({0, 0}, {10, 3}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Parallel, 0, R::P0, kSketchRefAxisX, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p1.y() == Approx(0.0).margin(1e-9)); // leveled onto y = 0 + // A bare Parallel leaves length free; the solver preserves the endpoint's free + // x-coordinate, so the line lands at (10,0) — length 10, not the original sqrt(109). + // Assert that free coordinate rather than abs(): a flipped/collapsed line would not + // land exactly here. + CHECK(ents[0].p1.x() == Approx(10.0).margin(1e-9)); + CHECK((ents[0].p1 - ents[0].p0).norm() == Approx(10.0).margin(1e-6)); // did not collapse +} + +TEST_CASE("slvs: symmetric-about-Y mirrors two points across x = 0", "[slvs][CadDocument]") +{ + std::vector ents = { point({3, 5}), point({9, 5}) }; + std::vector cons = { + con(CT::SymmetricAboutY, 0, R::P0, 1, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(ents[0].p0.x() == Approx(-ents[1].p0.x()).margin(1e-9)); // mirror across x = 0 + // Neither x may be 0: a both-collapsed-to-the-axis solution also satisfies the mirror + // trivially. Squared, not abs(), so a near-zero x still fails cleanly. + CHECK(ents[0].p0.x() * ents[0].p0.x() > 1e-12); + CHECK(ents[1].p0.x() * ents[1].p0.x() > 1e-12); + CHECK(ents[0].p0.y() == Approx(5.0).margin(1e-9)); // Y values untouched + CHECK(ents[1].p0.y() == Approx(5.0).margin(1e-9)); +} + +TEST_CASE("slvs: reference-based constraint adds no degrees of freedom", "[slvs][CadDocument]") +{ + // A free line with Fix on P0 and Parallel to the X axis: 4 DoF - 2 (fix) - 1 (angle) + // = 1 (length still free). If the G_FIXED reference entities leaked unknowns into the + // solved group, this figure would be wrong. + std::vector ents = { line({0, 0}, {3, 4}) }; + std::vector cons = { + con(CT::Fix, 0, R::P0, 0, R::P0), + con(CT::Parallel, 0, R::P0, kSketchRefAxisX, R::P0), + }; + auto res = sketch_solve(ents, cons); + REQUIRE(res.ok); + CHECK(res.dof == 1); +} diff --git a/tests/libslic3r/test_step.cpp b/tests/libslic3r/test_step.cpp new file mode 100644 index 0000000000..a2aa7218f1 --- /dev/null +++ b/tests/libslic3r/test_step.cpp @@ -0,0 +1,93 @@ +#include + +#include + +#include "libslic3r/Model.hpp" +#include "libslic3r/Format/STEP.hpp" +#include "test_utils.hpp" + +using namespace Slic3r; + +static void write_step_line(const std::string &path, const std::string &line) +{ + boost::nowide::ofstream file(path, std::ios::binary); + file << "ISO-10303-21;\n" << line << "\nEND-ISO-10303-21;\n"; +} + +// preprocess() hands back the input path unless it transcoded into a temporary. +static std::string preprocess_result(const std::string &line) +{ + ScopedSlic3rTemporaryDir scratch; + + ScopedTemporaryFile step(".step"); + write_step_line(step.string(), line); + + std::string output_path; + StepPreProcessor preprocessor; + REQUIRE(preprocessor.preprocess(step.string().c_str(), output_path)); + + return output_path == step.string() ? "untouched" : "transcoded"; +} + +// data/utf8_part_names.step is three boxes written by OCCT's own STEP writer, whose +// PRODUCT names were then patched to raw UTF-8. Most CAD exporters write non-ASCII names +// that way rather than in the \X2\ escape form. The third part is ASCII, as a control. +TEST_CASE("Part names with multi-byte UTF-8 survive import", "[Step]") +{ + // getNamedSolids() replaces a name that isUtf8() rejects with a running number. + const std::string path = TEST_DATA_DIR PATH_SEPARATOR "utf8_part_names.step"; + + Model model; + bool cancel = false; + Step step(path); // no isUtf8Fn, matching how Model::read_from_step builds it + + REQUIRE(step.load() == Step::Step_Status::LOAD_SUCCESS); + REQUIRE(step.mesh(&model, cancel, false) == Step::Step_Status::MESH_SUCCESS); + + REQUIRE(model.objects.size() == 1); + const ModelObject *object = model.objects.front(); + REQUIRE(object->volumes.size() == 3); + // "ce" is split off, or the hex escape would swallow it as further hex digits. + CHECK(object->volumes[0]->name == "pi\xC3\xA8" "ce"); + CHECK(object->volumes[1]->name == "Geh\xC3\xA4use"); + CHECK(object->volumes[2]->name == "bracket"); +} + +TEST_CASE("isUtf8 recognises two, three and four byte sequences", "[Step]") +{ + CHECK(StepPreProcessor::isUtf8("\xC3\xA9")); // U+00E9 + CHECK(StepPreProcessor::isUtf8("\xE4\xB8\xAD")); // U+4E2D + CHECK(StepPreProcessor::isUtf8("\xF0\x9F\x94\xA9")); // U+1F529 + CHECK_FALSE(StepPreProcessor::isUtf8("\x81\x30")); // 0x81 is not a lead byte + CHECK_FALSE(StepPreProcessor::isUtf8("\xC3")); // truncated sequence +} + +// The only caller of isGBK is preprocess(), which nothing calls today. +TEST_CASE("Encoding detection decides whether a step file is transcoded", "[Step]") +{ + SECTION("UTF-8, so left alone") + { + // A two byte sequence also satisfies every GBK range, so misdetecting it as + // not-UTF-8 sends it to be transcoded. + const std::string sequence = GENERATE(std::string("\xC3\xA9"), // U+00E9 + std::string("\xE4\xB8\xAD"), // U+4E2D + std::string("\xF0\x9F\x94\xA9")); // U+1F529 + + CHECK(preprocess_result("NAME('" + sequence + "');") == "untouched"); + } + + SECTION("neither UTF-8 nor GBK, so left alone") + { + // 0x81 is not a UTF-8 lead byte, and 0x30 is below the 0x40 floor for a GBK trail. + CHECK(preprocess_result("NAME('\x81\x30');") == "untouched"); + } + + SECTION("GBK, so transcoded") + { + // U+554A in GBK, whose lead byte is not valid UTF-8. Pins the other direction, + // since a detector that never reports GBK would pass every case above. + CHECK(preprocess_result("NAME('\xB0\xA1');") == "transcoded"); + } + + SECTION("plain ASCII, so left alone") { CHECK(preprocess_result("NAME('bracket');") == "untouched"); } +} diff --git a/tests/libslic3r/test_toolordering_nozzle_group.cpp b/tests/libslic3r/test_toolordering_nozzle_group.cpp index 26e36c0dbf..d9a5d70406 100644 --- a/tests/libslic3r/test_toolordering_nozzle_group.cpp +++ b/tests/libslic3r/test_toolordering_nozzle_group.cpp @@ -163,6 +163,50 @@ TEST_CASE("H2C multi-nozzle: filaments get distinct nozzles on the 6-nozzle extr } } +TEST_CASE("Grouping context spans the filament count with mis-sized config arrays", "[ToolOrdering][H2C]") +{ + // FilamentGroup indexes the grouping context's filament_info by filament id, so a short + // per-filament array must not shorten it: the reads run off the end. + DynamicPrintConfig config = DynamicPrintConfig::full_print_config(); + // Single 6-nozzle extruder: opens the grouping engine without needing a BBL multi-extruder. + config.option("nozzle_diameter", true)->values = {0.4}; + config.option("extruder_max_nozzle_count", true)->values = {6}; + config.option("extruder_nozzle_stats", true)->values = {"Standard#6"}; + + // Four filaments, with filament_type / filament_is_support left short on purpose. + config.option("filament_colour", true)->values = {"#FF0000", "#00FF00", "#0000FF", "#FFFF00"}; + config.option("filament_type", true)->values = {"PLA"}; + config.option("filament_is_support", true)->values = {0}; + config.option("filament_diameter", true)->values = {1.75, 1.75, 1.75, 1.75}; + config.option("filament_map", true)->values = {1, 1, 1, 1}; + config.option("flush_volumes_matrix", true)->values = std::vector(16, 140.); + config.option("flush_multiplier", true)->values = {1.}; + + Model model; + model.add_object("cube", "", make_cube(20, 20, 20))->add_instance(); + + Print print; + print.apply(model, config); + // apply() does not pad the per-filament arrays, so the mis-sizing survives into the engine. + REQUIRE(print.config().filament_type.values.size() < print.config().filament_colour.values.size()); + + std::vector> layer_filaments = {{0, 1}, {1, 2}, {2, 3}}; + + SECTION("short per-filament arrays still yield one entry per filament") { + auto result = ToolOrdering::get_recommended_filament_maps(layer_filaments, &print, FilamentMapMode::fmmAutoForFlush, {}, {}); + REQUIRE(result.get_extruder_map(false).size() == 4); + for (int f = 0; f < 4; ++f) + REQUIRE(result.get_extruder_id(f) == 0); + } + + SECTION("filament_ids longer than the filament count is truncated, not paired past the end") { + config.option("filament_ids", true)->values = {"a", "b", "c", "d", "e", "f"}; + print.apply(model, config); + auto result = ToolOrdering::get_recommended_filament_maps(layer_filaments, &print, FilamentMapMode::fmmAutoForFlush, {}, {}); + REQUIRE(result.get_extruder_map(false).size() == 4); + } +} + TEST_CASE("H2C dynamic selector: per-layer nozzle ids reach the g-code surface", "[ToolOrdering][H2C][Dynamic]") { // The per-layer regroup engine @@ -981,3 +1025,41 @@ TEST_CASE("Selector slicing keeps the result valid across re-apply", "[Print][H2 REQUIRE(status != PrintBase::APPLY_STATUS_INVALIDATED); REQUIRE(print.is_step_done(psSlicingFinished)); } + +TEST_CASE("parse_cyclic_order parses user cyclic toolchange sequences", "[ToolOrdering][Cyclic]") +{ + // Filament numbers are 1-based in the UI; the parser returns 0-based indices. + SECTION("well-formed sequence") { + REQUIRE(parse_cyclic_order("3,2,1,4", 4) == std::vector({2, 1, 0, 3})); + } + + SECTION("surrounding whitespace is tolerated") { + REQUIRE(parse_cyclic_order(" 3 , 2 ,1, 4 ", 4) == std::vector({2, 1, 0, 3})); + } + + SECTION("out-of-range and non-positive entries are dropped") { + // 0 is below the 1-based range, 5 is above it for a 4-filament setup, -1 is invalid. + REQUIRE(parse_cyclic_order("0,5,-1,2", 4) == std::vector({1})); + } + + SECTION("duplicates keep only the first occurrence") { + REQUIRE(parse_cyclic_order("2,2,1,2", 4) == std::vector({1, 0})); + } + + SECTION("garbage tokens are ignored") { + REQUIRE(parse_cyclic_order("3,abc,,2,x1", 4) == std::vector({2, 1})); + } + + SECTION("tokens that only start with a number are ignored") { + // "2x" must be dropped rather than parsed as filament 2. + REQUIRE(parse_cyclic_order("3,2x,1", 4) == std::vector({2, 0})); + } + + SECTION("empty string yields an empty order") { + REQUIRE(parse_cyclic_order("", 4).empty()); + } + + SECTION("a partial sequence only names the filaments it lists") { + REQUIRE(parse_cyclic_order("3,1", 4) == std::vector({2, 0})); + } +} diff --git a/tests/libslic3r/test_utils.cpp b/tests/libslic3r/test_utils.cpp index c039069b2a..7880b783f1 100644 --- a/tests/libslic3r/test_utils.cpp +++ b/tests/libslic3r/test_utils.cpp @@ -2,6 +2,15 @@ #include "libslic3r/Utils.hpp" +#include "test_utils.hpp" + +#include + +#include +#include +#include +#include + #ifndef _WIN32 #include // getuid #endif @@ -52,3 +61,94 @@ TEST_CASE("per-user temp root is unchanged on Windows, isolated elsewhere", "[ut REQUIRE_THAT(root, Catch::Matchers::StartsWith(base + "/orcaslicer_")); #endif } + +TEST_CASE("copy_file reports the OS error when the destination cannot be written", "[utils]") { + ScopedTemporaryFile source(".txt"); + { + std::ofstream ofs(source.string(), std::ios::binary); + ofs << "orca"; + } + REQUIRE(boost::filesystem::exists(source.path())); + + // A directory that was never created, so the copy fails on every platform. + const boost::filesystem::path destination = source.path().parent_path() / "orca-missing-dir" / "copy.txt"; + REQUIRE_FALSE(boost::filesystem::exists(destination.parent_path())); + + std::string error_message; + REQUIRE(copy_file(source.string(), destination.string(), error_message) == FAIL_COPY_FILE); + REQUIRE_FALSE(error_message.empty()); + +#ifdef _WIN32 + // The Windows branch formats GetLastError() itself. Writing that as + // "Error: " + errCode adds an integer to a string literal, which indexes into the + // literal instead of appending and runs off its end for any code above 7. + const std::string prefix = "Error: "; + REQUIRE(error_message.rfind(prefix, 0) == 0); + + const std::string code = error_message.substr(prefix.size()); + REQUIRE_FALSE(code.empty()); + REQUIRE(std::all_of(code.begin(), code.end(), [](unsigned char c) { return std::isdigit(c) != 0; })); +#endif // _WIN32 +} + +TEST_CASE("A resolved input path still names the same file after the working directory changes", "[utils]") { + ScopedTemporaryFile model(".3mf"); + { std::ofstream out(model.string()); out << "3mf"; } + const std::string name = model.path().filename().string(); + + // Resolve the bare name from the directory holding the file, then move away from it. The guard + // restores the directory the test started in, wherever this leaves it. + ScopedWorkingDirectory cwd(model.path().parent_path()); + const std::string resolved = resolve_cli_input_path(name); + boost::filesystem::current_path(boost::filesystem::path(TEST_DATA_DIR)); + + REQUIRE(boost::filesystem::exists(resolved)); + REQUIRE(boost::filesystem::equivalent(resolved, model.path())); + // Control: the bare name finds nothing from here, so resolving it this late would have failed. + REQUIRE_FALSE(boost::filesystem::exists(name)); +} + +TEST_CASE("resolve_cli_input_path completes a relative path against the working directory", "[utils]") { + ScopedWorkingDirectory cwd(boost::filesystem::temp_directory_path()); + // Read back rather than reusing temp_directory_path(): changing to it resolves any symlink. + const boost::filesystem::path here = boost::filesystem::current_path(); + + SECTION("a bare name") { + REQUIRE(resolve_cli_input_path("model.3mf") == (here / "model.3mf").make_preferred().string()); + } + SECTION("a ./ prefix is dropped") { + REQUIRE(resolve_cli_input_path("./model.3mf") == (here / "model.3mf").make_preferred().string()); + } + SECTION("a ../ traversal is collapsed") { + REQUIRE(resolve_cli_input_path("../model.3mf") == (here.parent_path() / "model.3mf").make_preferred().string()); + } +} + +TEST_CASE("resolve_cli_input_path leaves inputs that must not be completed unchanged", "[utils]") { + SECTION("an absolute path") { + const boost::filesystem::path absolute = (boost::filesystem::temp_directory_path() / "model.3mf").make_preferred(); + REQUIRE(resolve_cli_input_path(absolute.string()) == absolute.string()); + } +#ifdef _WIN32 + // Every absolute form Windows accepts opens today, so each must come back byte for byte: + // normalizing them would rewrite the forward slashes and rebuild the \\?\ and UNC prefixes. + SECTION("an absolute Windows path of any form") { + for (const std::string absolute : {R"(C:\models\model.3mf)", + R"(C:/models/model.3mf)", + R"(\\server\share\model.3mf)", + R"(\\?\C:\models\model.3mf)"}) + REQUIRE(resolve_cli_input_path(absolute) == absolute); + } +#endif + // These are downloaded rather than opened, and completing one would produce a path, not a URL. + SECTION("a custom open protocol URL") { + for (const std::string url : {"orcaslicer://open/?file=https://example.com/model.3mf", + "prusaslicer://open/?file=https://example.com/model.3mf", + "bambustudio://open/?file=https://example.com/model.3mf", + "cura://open/?file=https://example.com/model.3mf"}) + REQUIRE(resolve_cli_input_path(url) == url); + } + SECTION("an empty argument") { + REQUIRE(resolve_cli_input_path("").empty()); + } +} diff --git a/tests/libslic3r/test_wipe_path.cpp b/tests/libslic3r/test_wipe_path.cpp new file mode 100644 index 0000000000..b637ad2b87 --- /dev/null +++ b/tests/libslic3r/test_wipe_path.cpp @@ -0,0 +1,1024 @@ +#include + +#include "libslic3r/GCode/WipePathHelpers.hpp" +#include "libslic3r/AABBTreeLines.hpp" +#include "libslic3r/Polyline.hpp" +#include "libslic3r/Point.hpp" +#include "libslic3r/Line.hpp" +#include "libslic3r/libslic3r.h" + +#include +#include +#include + +using namespace Slic3r; +using Slic3r::AABBTreeLines::LinesDistancer; + +TEST_CASE("Stored wipe path retains its length around a curved wall after a seam gap", "[WipePath][Regression]") +{ + const int mirror = GENERATE(1, -1); + const double wipe_length = GENERATE(0.8, 1.0); + CAPTURE(mirror, wipe_length); + // A 0.02 mm seam gap on a curved 0.24 mm wall leaves a short outgoing + // segment whose inward offset backtracks. Coordinates use internal scaling + // from the affected loop; the adjacent inner wall is already printed. + const auto point = [mirror](coord_t x, coord_t y) { return Point(mirror * x, y); }; + const Polyline original{ + point(671861, 7772276), point(688586, 7765098), point(781082, 7687014), + point(852059, 7608861), point(889773, 7556912), point(958919, 7382963), + point(977048, 7259018), point(977325, 7173839), point(944250, 7039370), + point(911230, 6952087), point(880323, 6894944), point(760243, 6763860), + point(598587, 6641719), point(492626, 6593610), point(362533, 6543938), + point(170173, 6513482), point(114917, 6509380), point(18418, 6513666), + point(-145550, 6537251), point(-259087, 6580797), point(-413987, 6690495), + point(-485220, 6767022), point(-561189, 6893573), point(-576897, 6965717), + point(-595201, 7089303), point(-597977, 7164172), point(-590614, 7239553), + point(-574031, 7305533), point(-539668, 7383293), point(-442552, 7550465), + point(-332173, 7659644), point(-257819, 7717153), point(-209522, 7749563), + point(-121695, 7793438), point(399, 7844160), point(228137, 7880068), + point(363721, 7881585), point(431909, 7865985), point(569648, 7816149), + point(653482, 7780164), + }; + const Polyline inner{ + point(739251, 7241332), point(739377, 7202281), point(716708, 7110113), + point(694416, 7051190), point(685088, 7033943), point(599527, 6940541), + point(476243, 6847393), point(400952, 6813209), point(300851, 6774988), + point(142724, 6749952), point(111379, 6747625), point(40681, 6750765), + point(-85281, 6768883), point(-146010, 6792175), point(-256555, 6870462), + point(-295251, 6912034), point(-336173, 6978125), point(-357996, 7111200), + point(-359693, 7156985), point(-355612, 7198777), point(-348288, 7227916), + point(-327412, 7275156), point(-252784, 7403618), point(-175201, 7480358), + point(-89616, 7543582), point(-22802, 7576960), point(65459, 7613627), + point(248096, 7642423), point(338175, 7643431), point(364673, 7637369), + point(482204, 7594844), point(562221, 7560499), point(615604, 7515433), + point(679764, 7441323), point(727601, 7320981), point(739251, 7241332), + }; + const Point seam_start = original.first_point(); + const Point seam_end = original.last_point(); + const double offset = scale_(0.239999); + Polyline forward = original; + REQUIRE_FALSE(offset_wipe_path(forward, seam_start, seam_end, seam_end, + -mirror, offset, scale_(wipe_length))); + + Polyline path = original; + REQUIRE(offset_wipe_path_toward_support(path, seam_start, seam_end, seam_end, + -mirror, offset, scale_(wipe_length), inner.lines(), inner.lines(), original.lines(), offset)); + REQUIRE(path.first_point() == seam_start); + REQUIRE(path.points.size() > 2); + // Wipe::wipe replaces the sentinel with the actual extrusion endpoint. + path.points.front() = seam_end; + CHECK_THAT(unscale_(path.length()), Catch::Matchers::WithinAbs(wipe_length, 0.0004)); + CHECK(mirror * (path.points[1].x() - seam_end.x()) < 0); + CHECK(path.points[1].y() < seam_end.y()); + Lines support = inner.lines(); + const Lines current = original.lines(); + support.insert(support.end(), current.begin(), current.end()); + REQUIRE(wipe_path_support_score(path, seam_end, LinesDistancer(inner.lines()), + LinesDistancer(support), offset).has_value()); +} + +TEST_CASE("Stored wipe path retains its length after a loop pre-move at a curved seam", "[WipePath][Regression]") +{ + const int mirror = GENERATE(1, -1); + const bool pre_move = GENERATE(false, true); + CAPTURE(mirror, pre_move); + const auto point = [mirror](coord_t x, coord_t y) { return Point(mirror * x, y); }; + // A 0.02 mm seam gap on a curved 0.24 mm wall, with the adjacent inner + // wall already printed. The loop pre-move advances the nozzle near the seam. + const Polyline original{ + point(686772, 7813199), point(516334, 7887188), point(411017, 7915098), + point(346190, 7926015), point(246957, 7925330), point(-16945, 7881611), + point(-116443, 7842513), point(-255907, 7773886), point(-378126, 7681053), + point(-499258, 7552879), point(-574414, 7438250), point(-613558, 7370259), + point(-626313, 7341394), point(-650774, 7263424), point(-669964, 7169919), + point(-666798, 7058662), point(-631336, 6876547), point(-624410, 6852946), + point(-577832, 6762704), point(-517493, 6693143), point(-455794, 6631765), + point(-315549, 6531304), point(-169627, 6468424), point(-1908, 6443726), + point(143562, 6438395), point(314277, 6465470), point(380448, 6480795), + point(519922, 6526617), point(673990, 6611110), point(801581, 6705610), + point(927505, 6840928), point(969616, 6912718), point(1004269, 7009155), + point(1044144, 7171737), point(1046617, 7228598), point(1028598, 7358360), + point(950280, 7560914), point(867133, 7675444), point(732946, 7788889), + point(706168, 7804780), point(705118, 7805235), + }; + const Polyline inner{ + point(808905, 7211140), point(796801, 7298317), point(739603, 7446245), + point(691575, 7512401), point(595745, 7593416), point(438069, 7661865), + point(360694, 7682370), point(327119, 7688024), point(266586, 7687607), + point(53302, 7653657), point(-20276, 7624745), point(-130307, 7570601), + point(-218687, 7503470), point(-311907, 7404832), point(-371722, 7313599), + point(-401113, 7262547), point(-420207, 7203763), point(-431422, 7149118), + point(-429596, 7084952), point(-401187, 6939055), point(-379519, 6897073), + point(-343546, 6855603), point(-301665, 6813940), point(-197879, 6739595), + point(-104131, 6699197), point(19838, 6680942), point(129154, 6676936), + point(268758, 6699077), point(316366, 6710103), point(424812, 6745731), + point(545430, 6811879), point(642396, 6883697), point(735572, 6983824), + point(753259, 7013976), point(776223, 7077887), point(808905, 7211140), + }; + const Point seam_start = original.first_point(); + const Point seam_end = original.last_point(); + const Point wipe_start = pre_move ? point(652751, 7792162) : seam_end; + const double offset = scale_(0.239999); + Polyline path = original; + REQUIRE(offset_wipe_path_toward_support(path, seam_start, seam_end, wipe_start, + mirror, offset, scale_(0.8), inner.lines(), inner.lines(), original.lines(), offset)); + REQUIRE(path.first_point() == seam_start); + path.points.front() = wipe_start; + CHECK_THAT(unscale_(path.length()), Catch::Matchers::WithinAbs(0.8, 0.0004)); + Lines support = inner.lines(); + const Lines current = original.lines(); + support.insert(support.end(), current.begin(), current.end()); + REQUIRE(wipe_path_support_score(path, wipe_start, LinesDistancer(inner.lines()), + LinesDistancer(support), offset).has_value()); +} + +// Orca: helpers for constructing the extrusion geometry used by wipe tests. + +static ExtrusionPath make_path(const std::vector &pts, ExtrusionRole role = erExternalPerimeter, + float width = 0.4f, float height = 0.2f) +{ + ExtrusionPath p(role, 0.5, width, height); + for (const Point &pt : pts) + p.polyline.append(Point3(pt.x(), pt.y(), coord_t(0))); + return p; +} + +static ExtrusionPaths make_paths(const std::vector &pts, ExtrusionRole role = erExternalPerimeter, + float width = 0.4f) +{ + ExtrusionPaths paths; + paths.push_back(make_path(pts, role, width)); + return paths; +} + +TEST_CASE("Inward wipe support recognizes an inner wall starting on an overhang", "[WipePath][Regression]") +{ + const bool overhang_first = GENERATE(false, true); + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + ExtrusionPaths paths{ + make_path({point(0.4, 0.4), point(0.4, 2.)}, erOverhangPerimeter), + make_path({point(0.4, 2.), point(0.4, 9.6), point(5.6, 9.6), point(5.6, 0.4), point(0.4, 0.4)}, erPerimeter) + }; + if (!overhang_first) + std::rotate(paths.begin(), paths.begin() + 1, paths.end()); + const ExtrusionLoop inner(paths); + REQUIRE(inner.role() == (overhang_first ? erOverhangPerimeter : erPerimeter)); + + WipeInwardSupport support; + support.append(inner); + REQUIRE(support.inner_lines.size() == inner.as_polyline().lines().size()); + // The overhanging portion itself is already printed and can support the wipe. + const LinesDistancer inner_distancer(support.inner_lines); + CHECK_THAT(inner_distancer.distance_from_lines(point(0.4, 1.)), + Catch::Matchers::WithinAbs(0., SCALED_EPSILON)); + const Polyline original{point(0., 0.), point(0., 10.), point(6., 10.), point(6., 0.), point(0., 0.)}; + Polyline wipe = original; + REQUIRE(offset_wipe_path_toward_support(wipe, original.first_point(), original.first_point(), + original.first_point(), -1, scale_(0.2), scale_(2.), support.inner_lines, + support.printed_lines, original.lines(), scale_(0.6))); + CHECK(wipe.points[1].x() > original.first_point().x()); +} + +TEST_CASE("Inward wipe support accumulates earlier walls without treating outer walls as targets", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + WipeInwardSupport support; + const ExtrusionPath inner = make_path({point(0.4, 0.), point(0.4, 5.)}, erPerimeter); + support.append(inner); + const ExtrusionLoop outer(ExtrusionPaths{ + make_path({point(0., 0.), point(0., 5.)}, erOverhangPerimeter), + make_path({point(0., 5.), point(-5., 5.), point(-5., 0.), point(0., 0.)}) + }); + support.append(outer); + REQUIRE(support.inner_lines.size() == 1); + REQUIRE(support.printed_lines.size() == 5); + const LinesDistancer targets(support.inner_lines); + CHECK_THAT(targets.distance_from_lines(point(0., 2.)), + Catch::Matchers::WithinAbs(scale_(0.4), SCALED_EPSILON)); +} + +static ExtrusionPaths make_loop_paths(const std::vector &contour_pts, float width = 0.4f) +{ + ExtrusionPaths paths; + size_t mid = contour_pts.size() / 2; + ExtrusionPath first(erExternalPerimeter, 0.5, width, 0.2f); + for (size_t i = 0; i <= mid; ++i) + first.polyline.append(Point3(contour_pts[i].x(), contour_pts[i].y(), coord_t(0))); + ExtrusionPath second(erExternalPerimeter, 0.5, width, 0.2f); + for (size_t i = mid; i < contour_pts.size(); ++i) + second.polyline.append(Point3(contour_pts[i].x(), contour_pts[i].y(), coord_t(0))); + second.polyline.append(Point3(contour_pts[0].x(), contour_pts[0].y(), coord_t(0))); + paths.push_back(std::move(first)); + paths.push_back(std::move(second)); + return paths; +} + +// Orca: sample_path_at_distance coverage. + +TEST_CASE("sample_path_at_distance forward returns start for zero target", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s)}); + REQUIRE(sample_path_at_distance(paths, true, 0.0) == Point(0, 0)); +} + +TEST_CASE("sample_path_at_distance forward samples along path", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s)}); + + Point result = sample_path_at_distance(paths, true, 50 * s); + REQUIRE_THAT(result.x(), Catch::Matchers::WithinAbs(50 * s, 2)); + REQUIRE_THAT(result.y(), Catch::Matchers::WithinAbs(0, 2)); +} + +TEST_CASE("sample_path_at_distance forward crosses segment boundary", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s)}); + + Point result = sample_path_at_distance(paths, true, 150 * s); + REQUIRE_THAT(result.x(), Catch::Matchers::WithinAbs(100 * s, 2)); + REQUIRE_THAT(result.y(), Catch::Matchers::WithinAbs(50 * s, 2)); +} + +TEST_CASE("sample_path_at_distance backward from end", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s)}); + + Point result = sample_path_at_distance(paths, false, 50 * s); + REQUIRE_THAT(result.x(), Catch::Matchers::WithinAbs(100 * s, 2)); + REQUIRE_THAT(result.y(), Catch::Matchers::WithinAbs(50 * s, 2)); +} + +TEST_CASE("sample_path_at_distance on short path returns reachable point", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(0, 0), Point(10 * s, 0)}); + + Point result = sample_path_at_distance(paths, true, 1000 * s); + REQUIRE(result == Point(10 * s, 0)); +} + +TEST_CASE("sample_path_at_distance on zero-length path returns start", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(50 * s, 50 * s)}); + + REQUIRE(sample_path_at_distance(paths, true, 100 * s) == Point(50 * s, 50 * s)); + REQUIRE(sample_path_at_distance(paths, false, 100 * s) == Point(50 * s, 50 * s)); +} + +TEST_CASE("Wipe offset direction follows the material side", "[WipePath]") +{ + REQUIRE(wipe_offset_direction(true, false) == +1); + REQUIRE(wipe_offset_direction(false, false) == -1); + REQUIRE(wipe_offset_direction(true, true) == -1); + REQUIRE(wipe_offset_direction(false, true) == +1); +} + +TEST_CASE("Stored wipe path leaves source crossings to support validation", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(10 * s, 0), Point(100 * s, 0), Point(coord_t(13.4 * s), coord_t(50 * s))}; + + // Orca: crossing the just-printed wall is harmless for a non-extruding wipe. + // The caller decides whether the result is supported by printed geometry. + REQUIRE(offset_wipe_path(path, Point(10 * s, 0), Point(0, 0), Point(0, 0), +1, 5 * s, 1000 * s)); +} + +TEST_CASE("Stored wipe path builds the join after a nonzero seam gap", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(10 * s, 0), Point(10 * s, 0), Point(10 * s, 100 * s)}; + + REQUIRE(offset_wipe_path(path, Point(10 * s, 0), Point(0, 0), Point(0, 0), +1, 5 * s, 1000 * s)); + REQUIRE(path.points.size() == 3); + REQUIRE(path.points[1] == Point(5 * s, 5 * s)); + REQUIRE(path.points[2] == Point(5 * s, 100 * s)); + REQUIRE(path.fitting_result.size() == 1); + REQUIRE(path.fitting_result.front().end_point_index == path.points.size() - 1); +} + +TEST_CASE("Stored wipe path rejects an offset seam join that turns backward", "[WipePath][Regression]") +{ + const coord_t s = scale_(1.0); + const Point seam_start(s, s); + const Point seam_end(0, 0); + Polyline path{seam_start, Point(s, -10 * s), Point(s, -20 * s)}; + const Polyline original = path; + + REQUIRE_FALSE(offset_wipe_path(path, seam_start, seam_end, seam_end, +1, s, 5 * s)); + REQUIRE(path.points == original.points); +} + +TEST_CASE("Stored wipe path continues after an inward pre-move", "[WipePath][Regression]") +{ + const coord_t s = scale_(1.0); + const Point seam_start(s, s); + const Point seam_end(0, 0); + const Point wipe_start(2 * s, 2 * s); + Polyline path{seam_start, Point(s, -10 * s), Point(s, -20 * s)}; + + REQUIRE(offset_wipe_path(path, seam_start, seam_end, wipe_start, +1, s, 5 * s)); + REQUIRE(path.points.size() >= 3); + path.points.front() = wipe_start; // Orca: reproduce Wipe::wipe()'s executable representation. + CHECK_THAT(path.length(), Catch::Matchers::WithinAbs(5. * s, 2.)); +} + +TEST_CASE("Stored wipe path does not retrace a translated seam gap", "[WipePath][Regression]") +{ + const coord_t s = scale_(1.0); + const Point seam_start(s, 0); + const Point seam_end(0, 0); + Polyline path{seam_start, seam_end, Point(-10 * s, 0)}; + const Polyline original = path; + const Lines support{Line(Point(-10 * s, s), Point(10 * s, s))}; + + // Orca: the exact reversal at seam_start forces the translated fallback. + // The seam gap supplies its incoming direction but must not become an + // inward-outward-inward detour in the executable path. + REQUIRE(offset_wipe_path_toward_support( + path, seam_start, seam_end, seam_end, +1, s, 5 * s, + support, support, original.lines(), s)); + REQUIRE(path.points.size() == 2); + CHECK(path.points[1].y() > seam_end.y()); +} + +TEST_CASE("Stored wipe path keeps its first offset point when seam gap is zero", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s), + Point(0, 100 * s), Point(0, 0)}; + + REQUIRE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), +1, 5 * s, 20 * s)); + REQUIRE(path.points.size() >= 3); + REQUIRE(path.points[0] == Point(0, 0)); + REQUIRE_THAT(path.points[1].x(), Catch::Matchers::WithinAbs(5 * s, 2)); + REQUIRE_THAT(path.points[1].y(), Catch::Matchers::WithinAbs(5 * s, 2)); +} + +TEST_CASE("Stored wipe path ignores unsafe geometry beyond the used prefix", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(1000 * s, 0), Point(1000 * s, 20 * s), + Point(900 * s, 20 * s), Point(0, 20 * s), Point(0, 0)}; + + REQUIRE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), +1, 30 * s, 10 * s)); + REQUIRE(path.points.size() == 2); + REQUIRE_THAT(path.length(), Catch::Matchers::WithinAbs(10 * s, 2)); +} + +TEST_CASE("Stored wipe path grows its source until the offset reaches the requested length", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s), Point(0, 100 * s)}; + const double wipe_length = 250 * s; + + // Orca: two inward corners shorten this offset by more than 2 * offset_dist. + REQUIRE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), + +1, 10 * s, wipe_length)); + REQUIRE_THAT(path.length(), Catch::Matchers::WithinAbs(wipe_length, 2)); +} + +TEST_CASE("Stored wipe path is unchanged when wipe distance is zero", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(100 * s, 0)}; + const Polyline orig = path; + + REQUIRE_FALSE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), +1, 5 * s, 0)); + REQUIRE(path.points == orig.points); +} + +TEST_CASE("Stored wipe path defers actual-start crossings to support validation", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(100 * s, 0), Point(100 * s, 100 * s), + Point(0, 100 * s), Point(0, 0)}; + const Lines current = path.lines(); + const Lines remote{Line(Point(0, 50 * s), Point(100 * s, 50 * s))}; + const Point wipe_start(50 * s, -10 * s); + + REQUIRE(offset_wipe_path(path, Point(0, 0), Point(0, 0), wipe_start, +1, 5 * s, 100 * s)); + Lines all_support = remote; + all_support.insert(all_support.end(), current.begin(), current.end()); + REQUIRE_FALSE(wipe_path_support_score(path, wipe_start, + LinesDistancer(remote), LinesDistancer(all_support), 5 * s).has_value()); +} + +TEST_CASE("Stored wipe path keeps the closing join when its prefix ends at the closing vertex", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(0, 100 * s), Point(100 * s, 100 * s), + Point(100 * s, 0), Point(0, 0)}; + + REQUIRE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), + +1, 5 * s, 300 * s)); + REQUIRE(path.points.size() >= 2); + REQUIRE(path.points[1] == Point(-5 * s, -5 * s)); +} + +TEST_CASE("Stored wipe path rejects a two-point zero-gap loop", "[WipePath]") +{ + const coord_t s = scale_(1.0); + Polyline path{Point(0, 0), Point(100 * s, 0), Point(0, 0)}; + const Polyline original = path; + + REQUIRE_FALSE(offset_wipe_path(path, Point(0, 0), Point(0, 0), Point(0, 0), + +1, 5 * s, 100 * s)); + REQUIRE(path.points == original.points); +} + +TEST_CASE("Stored wipe path tolerates quantized contact at its actual start", "[WipePath]") +{ + const coord_t s = scale_(1.0); + const coord_t quantization = coord_t(SCALED_EPSILON / 2); + Polyline path{Point(0, quantization), Point(100 * s, quantization), + Point(100 * s, 100 * s + quantization), Point(0, 100 * s + quantization), + Point(0, quantization)}; + + // Orca: the executable transition starts within the geometry epsilon of the + // source endpoint. Treat this as the allowed start contact, while contacts + // farther along the transition remain unsafe. + REQUIRE(offset_wipe_path(path, Point(0, quantization), Point(0, quantization), + Point(0, 0), +1, 5 * s, 20 * s)); +} + +TEST_CASE("Stored wipe path requires nearby generated perimeter geometry", "[WipePath]") +{ + const coord_t s = scale_(1.0); + const Polyline path{Point(0, 0), Point(0, 2 * s), Point(10 * s, 2 * s)}; + const Lines adjacent{Line(Point(0, 4 * s), Point(10 * s, 4 * s))}; + const Lines remote{Line(Point(0, 20 * s), Point(10 * s, 20 * s))}; + const Lines current = path.lines(); + + const LinesDistancer adjacent_distancer(adjacent); + const LinesDistancer remote_distancer(remote); + Lines all_support = remote; + all_support.insert(all_support.end(), current.begin(), current.end()); + const LinesDistancer all_support_distancer(all_support); + + const auto score = wipe_path_support_score(path, Point(0, 2 * s), adjacent_distancer, adjacent_distancer, 3 * s); + REQUIRE(score.has_value()); + CHECK_THAT(*score, Catch::Matchers::WithinAbs(2. * s, 2.)); + REQUIRE_FALSE(wipe_path_support_score(path, Point(0, 2 * s), adjacent_distancer, adjacent_distancer, 0).has_value()); + REQUIRE_FALSE(wipe_path_support_score(path, Point(0, 2 * s), remote_distancer, remote_distancer, 3 * s).has_value()); + REQUIRE_FALSE(wipe_path_support_score(path, Point(0, 2 * s), remote_distancer, all_support_distancer, 3 * s).has_value()); + REQUIRE_FALSE(wipe_path_support_score(path, Point(0, 2 * s), LinesDistancer(Lines{}), + all_support_distancer, 3 * s).has_value()); +} + +TEST_CASE("Stored wipe path checks the first segment from its actual start", "[WipePath]") +{ + const coord_t s = scale_(1.0); + const Polyline path{Point(0, 0), Point(10 * s, 0)}; + const Lines support_near_ends{ + Line(Point(0, -s), Point(0, s)), + Line(Point(10 * s, -s), Point(10 * s, s)) + }; + + // Orca: both endpoints are supported, but the middle of the executable segment + // from wipe_start is not. The dummy path[0] must not hide that segment. + const LinesDistancer support_distancer(support_near_ends); + REQUIRE_FALSE(wipe_path_support_score(path, Point(0, 0), support_distancer, support_distancer, 2 * s).has_value()); +} + +TEST_CASE("Stored wipe path rejects unsupported gaps between nearby samples", "[WipePath][Regression]") +{ + const Point start = Point::new_scale(0., 0.); + const Point end = Point::new_scale(0.8, 0.); + const Polyline path{start, end}; + const double support_y = GENERATE(0.8, 0.95); + const Lines support{ + Line(Point::new_scale(0., support_y), Point::new_scale(0., 2.)), + Line(Point::new_scale(0.8, support_y), Point::new_scale(0.8, 2.)) + }; + + // Both endpoints are within 1 mm of support and the move is shorter than + // the old sampling interval. Only the 0.8 mm case supports its midpoint. + const LinesDistancer support_distancer(support); + const bool supported = wipe_path_support_score(path, start, support_distancer, support_distancer, scale_(1.)).has_value(); + CHECK(supported == (support_y < 0.9)); +} + +TEST_CASE("Stored wipe path checks support at the actual nozzle position", "[WipePath][Regression]") +{ + const Point end = Point::new_scale(0., 0.); + const Polyline path{end, end}; + const Lines support{Line(Point::new_scale(-1., 0.), Point::new_scale(1., 0.))}; + + const LinesDistancer support_distancer(support); + REQUIRE_FALSE(wipe_path_support_score(path, Point::new_scale(0., -2.), + support_distancer, support_distancer, scale_(1.)).has_value()); +} + +TEST_CASE("Direct inward fallback respects a short wipe distance before validation", "[WipePath][Regression]") +{ + const Point seam = Point::new_scale(0., 0.); + Polyline path{seam, Point::new_scale(10., 0.), Point::new_scale(10., 10.), + Point::new_scale(0., 10.), seam}; + const Lines current = path.lines(); + const Lines support{Line(Point::new_scale(0.4, 0.4), Point::new_scale(9.6, 0.4))}; + const bool pre_move = GENERATE(false, true); + const Point wipe_start = pre_move ? Point::new_scale(0.02, 0.02) : seam; + const double wipe_length = scale_(0.05); + + REQUIRE(offset_wipe_path_toward_support( + path, seam, seam, wipe_start, +1, scale_(0.2), wipe_length, + support, support, current, scale_(0.4))); + REQUIRE(path.points.size() == 2); + path.points.front() = wipe_start; + CHECK_THAT(path.length(), Catch::Matchers::WithinAbs(wipe_length, 2.)); + CHECK(path.last_point().x() > wipe_start.x()); + CHECK(path.last_point().y() > wipe_start.y()); +} + +TEST_CASE("Stored wipe path uses a stable zero-gap join for nearly parallel segments", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(58.777, 61.985); + Polyline path{ + seam, point(58.822, 61.918), point(58.900, 61.789), point(58.980, 61.641), + point(59.054, 61.480), point(59.260, 60.980), point(58.412, 62.485), + point(58.631, 62.202), seam, + }; + + REQUIRE(offset_wipe_path(path, seam, seam, seam, -1, scale_(0.23), scale_(0.8))); + REQUIRE(path.points.size() >= 3); + + const Vec2d first = (path.points[1] - seam).cast(); + const Vec2d second = (path.points[2] - path.points[1]).cast(); + CHECK(first.dot(second) >= 0.); +} + +TEST_CASE("Stored wipe path follows the inner wall at a narrow external cusp", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(55.139, 60.077); + Polyline path{ + seam, point(55.156, 60.010), point(55.205, 59.961), point(55.237, 59.934), + point(55.304, 59.907), point(55.392, 59.872), point(55.630, 59.791), + point(56.564, 59.430), point(55.061, 59.956), point(55.108, 60.008), seam, + }; + const Polyline original = path; + const Lines target_support{ + Line(point(54.983, 59.648), point(55.121, 59.745)), + }; + Lines printed_support = target_support; + printed_support.emplace_back(point(54.75, 60.25), point(55.50, 60.10)); + + REQUIRE(offset_wipe_path_toward_support( + path, seam, seam, seam, -1, scale_(0.270341), scale_(0.8), + target_support, printed_support, original.lines(), scale_(0.4))); + REQUIRE(path.points.size() >= 2); + CHECK(path.points[1].y() < seam.y() - scale_(0.2)); + CHECK(std::abs(path.points[1].x() - seam.x()) < scale_(0.1)); +} + +TEST_CASE("Stored wipe path keeps a supported zero-gap join that initially backtracks", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(56.737, 62.049); + Polyline path{ + seam, point(56.759, 62.142), point(56.727, 62.294), point(56.682, 62.447), + point(56.631, 62.570), point(56.581, 62.669), point(56.512, 62.776), + point(54.0, 64.0), point(50.0, 60.0), point(54.0, 58.0), + point(56.773, 62.031), seam, + }; + const Polyline original = path; + const Lines target_support{ + Line(point(56.546, 62.012), point(56.534, 62.104)), + Line(point(56.534, 62.104), point(56.506, 62.238)), + Line(point(56.506, 62.238), point(56.467, 62.371)), + Line(point(56.467, 62.371), point(56.424, 62.474)), + Line(point(56.424, 62.474), point(56.382, 62.556)), + }; + + Polyline inward = path; + REQUIRE(offset_wipe_path(inward, seam, seam, seam, +1, scale_(0.23), scale_(0.8))); + REQUIRE(inward.points.size() >= 3); + const Vec2d connector = (inward.points[1] - seam).cast(); + const Vec2d outgoing = (inward.points[2] - inward.points[1]).cast(); + REQUIRE(connector.dot(outgoing) < 0.); + + REQUIRE(offset_wipe_path_toward_support( + path, seam, seam, seam, +1, scale_(0.23), scale_(0.8), + target_support, target_support, original.lines(), scale_(0.4))); + CHECK(path.points[1].x() < seam.x() - scale_(0.1)); +} + +TEST_CASE("Stored wipe path leaves a narrow cusp directly after a seam gap", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam_start = point(55.139, 60.077); + const Point seam_end = point(55.141, 60.067); + Polyline path{ + seam_start, point(55.107, 60.008), point(55.061, 59.956), point(55.027, 59.943), + point(54.982, 59.924), point(54.922, 59.879), point(54.868, 59.845), + point(54.754, 59.783), point(54.391, 59.635), point(54.053, 59.471), + }; + const Polyline original = path; + const Lines target_support{ + Line(point(55.132, 59.744), point(55.121, 59.745)), + Line(point(55.121, 59.745), point(54.983, 59.648)), + Line(point(54.983, 59.648), point(54.938, 59.623)), + Line(point(54.938, 59.623), point(54.866, 59.584)), + Line(point(54.866, 59.584), point(54.483, 59.427)), + Line(point(54.483, 59.427), point(54.157, 59.268)), + }; + + REQUIRE(offset_wipe_path_toward_support( + path, seam_start, seam_end, seam_end, -1, scale_(0.270341), scale_(0.8), + target_support, target_support, original.lines(), scale_(0.4))); + REQUIRE(path.points.size() >= 2); + CHECK(path.points[1].y() < seam_end.y() - scale_(0.2)); + CHECK(std::abs(path.points[1].x() - seam_end.x()) < scale_(0.05)); + + // Orca: the inward connector must not run back through the first extruded + // point after the gap, which would put the wipe on the external wall. + const Line connector(seam_end, path.points[1]); + CHECK(connector.distance_to(original.points[1]) > scale_(0.02)); +} + +TEST_CASE("Stored wipe path does not reverse after an inward pre-move at a wide gap", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam_start = point(55.139, 60.077); + const Point seam_end = point(55.163, 60.002); + const Point wipe_start = point(55.142, 60.037); + Polyline path{ + seam_start, point(55.107, 60.008), point(55.061, 59.956), point(55.027, 59.943), + point(54.982, 59.924), point(54.922, 59.879), point(54.868, 59.845), + point(54.754, 59.783), point(54.391, 59.635), point(54.053, 59.471), + point(50.2, 55.0), point(50.2, 50.0), point(60.8, 50.0), point(60.8, 55.0), + point(56.564, 59.430), point(55.824, 59.708), point(55.392, 59.872), + point(55.237, 59.934), point(55.205, 59.961), seam_end, + }; + const Polyline original = path; + const Lines target_support{ + Line(point(55.132, 59.744), point(55.121, 59.745)), + Line(point(55.121, 59.745), point(54.983, 59.648)), + Line(point(54.983, 59.648), point(54.866, 59.584)), + Line(point(54.866, 59.584), point(54.483, 59.427)), + Line(point(54.483, 59.427), point(54.157, 59.268)), + }; + + REQUIRE(offset_wipe_path_toward_support( + path, seam_start, seam_end, wipe_start, -1, scale_(0.270341), scale_(0.8), + target_support, target_support, original.lines(), scale_(0.4))); + REQUIRE(path.points.size() >= 3); + + const Vec2d connector = (path.points[1] - wipe_start).cast(); + const Vec2d outgoing = (path.points[2] - path.points[1]).cast(); + CHECK(connector.dot(outgoing) >= 0.); + path.points.front() = wipe_start; + CHECK_THAT(path.length(), Catch::Matchers::WithinAbs(scale_(0.8), 2.)); +} + +TEST_CASE("Stored wipe path follows the incoming wall when a corner gap truncates the forward path", + "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam_start = point(46.047, 61.988); + const Point seam_end = point(46.118, 61.917); + Polyline path{ + seam_start, point(39.139, 55.080), point(46.047, 48.171), + point(52.956, 55.080), seam_end, + }; + const Polyline original = path; + const Lines target_support{ + Line(point(46.047, 61.672), point(39.461, 55.080)), + Line(point(39.461, 55.080), point(46.047, 48.493)), + Line(point(46.047, 48.493), point(52.633, 55.080)), + Line(point(52.633, 55.080), point(46.047, 61.672)), + }; + + REQUIRE(offset_wipe_path_toward_support( + path, seam_start, seam_end, seam_end, +1, scale_(0.23), scale_(0.8), + target_support, target_support, original.lines(), scale_(0.4))); + path.points.front() = seam_end; + CHECK_THAT(path.length(), Catch::Matchers::WithinAbs(scale_(0.8), 2.)); + REQUIRE(path.points.size() >= 3); + CHECK(path.points[1].x() < seam_end.x()); + CHECK(path.points[1].y() < seam_end.y()); +} + +TEST_CASE("Stored wipe path prefers support on the material side of a seam gap", "[WipePath][Regression]") +{ + const coord_t s = scale_(1.0); + const Point seam_start(s, 0); + const Point seam_end(0, 0); + Polyline path{seam_start, Point(s, 10 * s), Point(s, 20 * s)}; + const Polyline original = path; + const Lines target_support{ + Line(Point(0, s), Point(0, 3 * s)), + Line(Point(s / 2, -s / 10), Point(3 * s / 2, -s / 10)), + }; + + // Orca: the lower line is closest at the cusp and the preferred winding + // points toward it, but the outgoing wall is adjacent to the upper line. + REQUIRE(offset_wipe_path_toward_support( + path, seam_start, seam_end, seam_end, -1, s, 5 * s, + target_support, target_support, original.lines(), 2 * s)); + CHECK(path.points[1].y() > seam_end.y()); +} + +TEST_CASE("Stored wipe path rejects an outward offset at a reflex seam gap", "[WipePath][Regression]") +{ + const double offset = GENERATE(0.2, 0.4); // 50% and 100% of a 0.4 mm wall. + const double mirror = GENERATE(1., -1.); + CAPTURE(offset, mirror); + const auto point = [mirror](double x, double y) { return Point::new_scale(mirror * x, y); }; + const Point seam_start = point(0., 0.); + const double gap_component = 0.04 / std::sqrt(2.); // Default 10% seam gap for a 0.4 mm nozzle. + const Point seam_end = point(-gap_component, -gap_component); + const Polyline original{seam_start, point(0., -10.)}; + const Lines support{Line(point(0.4, -10.), point(0.4, 1.))}; + const int preferred_dir = mirror > 0. ? +1 : -1; + + // The inward miter backtracks. The opposite offset can still be supported + // by the outer bead, so support alone must not make it an inward candidate. + Polyline outward = original; + REQUIRE(offset_wipe_path(outward, seam_start, seam_end, seam_end, + -preferred_dir, scale_(offset), scale_(2.))); + Lines all_support = support; + const Lines current = original.lines(); + all_support.insert(all_support.end(), current.begin(), current.end()); + REQUIRE(wipe_path_support_score(outward, seam_end, + LinesDistancer(support), LinesDistancer(all_support), scale_(0.4)).has_value()); + REQUIRE(mirror * outward.points[1].x() < 0.); + + Polyline path = original; + if (offset_wipe_path_toward_support(path, seam_start, seam_end, seam_end, + preferred_dir, scale_(offset), scale_(2.), support, support, current, scale_(0.4))) { + REQUIRE(path.points.size() >= 2); + CHECK(mirror * path.points[1].x() > 0.); + } else { + CHECK(path.points == original.points); + } + + // An inward pre-move provides a clear connector to the direct fallback. + // The fix must retain this usable inward path, rather than reject all wipes. + const Point wipe_start = point(0.05, -0.04); + path = original; + REQUIRE(offset_wipe_path_toward_support(path, seam_start, seam_end, wipe_start, + preferred_dir, scale_(offset), scale_(2.), support, support, current, scale_(0.4))); + REQUIRE(path.points.size() == 2); + CHECK(mirror * path.points[1].x() > mirror * wipe_start.x()); +} + +TEST_CASE("Direct inward wipes respect the nozzle position and intervening walls", "[WipePath][Regression]") +{ + const int mirror = GENERATE(1, -1); + const bool crossing_wall = GENERATE(false, true); + CAPTURE(mirror, crossing_wall); + const auto point = [mirror](double x, double y) { return Point::new_scale(mirror * x, y); }; + const Point seam_start = point(0., 0.); + const double gap_component = 0.04 / std::sqrt(2.); + const Point seam_end = point(-gap_component, -gap_component); + const Polyline original{seam_start, point(0., -10.)}; + const Lines support{Line(point(0.4, -10.), point(0.4, 1.))}; + Lines current = original.lines(); + // The direct destination is near x=0.172. A nozzle already farther inward + // must not return toward the wall. An inward connector from x=0.05 must + // still be rejected when another wall lies between it and the destination. + const Point wipe_start = point(crossing_wall ? 0.05 : 0.3, -0.04); + if (crossing_wall) + current.emplace_back(point(0.1, -0.2), point(0.1, 0.2)); + Polyline path = original; + REQUIRE_FALSE(offset_wipe_path_toward_support(path, seam_start, seam_end, wipe_start, + mirror, scale_(0.2), scale_(2.), support, support, current, scale_(0.4))); + CHECK(path.points == original.points); +} + +TEST_CASE("Inward wipe checks the material side after leaving an open wall endpoint", "[WipePath][Regression]") +{ + const bool require_clearance = GENERATE(false, true); + CAPTURE(require_clearance); + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(0., 0.); + const LinesDistancer current(Lines{Line(seam, point(2., 0.))}); + const LinesDistancer support(Lines{Line(point(0., 0.4), point(2., 0.4))}); + Polyline path{seam, point(0.1, 0.2), point(0.5, 0.2), point(-0.2, 0.2)}; + REQUIRE(wipe_path_stays_on_material_side( + path, seam, Vec2d(0., 1.), support, current, scale_(0.2), require_clearance)); + + // Rounding the open endpoint keeps 0.2 mm of unsigned clearance while + // moving to the air side. Checking only the first direction cannot catch it. + path.points.push_back(point(-0.2, -0.2)); + path.points.push_back(point(0.5, -0.2)); + REQUIRE_FALSE(wipe_path_stays_on_material_side( + path, seam, Vec2d(0., 1.), support, current, scale_(0.2), require_clearance)); +} + +TEST_CASE("Direct inward fallbacks check the material side without requiring clearance", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(0., 0.); + const LinesDistancer current(Lines{Line(point(-2., 0.), point(2., 0.))}); + const LinesDistancer support(Lines{Line(point(-2., 0.4), point(2., 0.4))}); + REQUIRE(wipe_path_stays_on_material_side( + Polyline{seam, point(0., 0.05)}, seam, Vec2d(0., 1.), support, current, scale_(0.2), false)); + + // Even if the construction's initial direction points outward, the nearby + // inner wall still identifies the material side independently of that hint. + REQUIRE_FALSE(wipe_path_stays_on_material_side( + Polyline{seam, point(0., -0.05)}, seam, Vec2d(0., -1.), support, current, scale_(0.2), false)); +} + +TEST_CASE("Stored wipe path may return to the current wall after reaching an earlier wall", "[WipePath]") +{ + const coord_t s = scale_(1.0); + const Polyline path{Point(0, 0), Point(0, 2 * s), Point(10 * s, 0)}; + const Lines earlier{Line(Point(0, 2 * s), Point(10 * s, 2 * s))}; + const Lines current{Line(Point(0, 0), Point(10 * s, 0))}; + + Lines all_support = earlier; + all_support.insert(all_support.end(), current.begin(), current.end()); + REQUIRE(wipe_path_support_score(path, Point(0, 0), + LinesDistancer(earlier), LinesDistancer(all_support), s).has_value()); +} + +TEST_CASE("Stored wipe path tolerates compounded coordinate quantization", "[WipePath]") +{ + const coord_t s = scale_(1.0); + const coord_t rounding = coord_t(3.5 * SCALED_EPSILON); + const Point destination(0, 2 * s + rounding); + const Polyline path{Point(0, 0), destination}; + const Lines earlier{Line(Point(-s, 0), Point(s, 0))}; + + const LinesDistancer support_distancer(earlier); + REQUIRE(wipe_path_support_score(path, destination, support_distancer, support_distancer, 2 * s).has_value()); +} + +TEST_CASE("Stored wipe path stays on the inner side of a short external loop", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(55.270, 41.666); + Polyline path{ + seam, point(55.241, 41.568), point(55.210, 41.518), point(55.195, 41.506), + point(55.173, 41.496), point(55.141, 41.479), point(55.126, 41.473), + point(55.068, 41.421), point(55.055, 41.416), point(55.006, 41.382), + point(54.808, 41.231), point(54.687, 41.153), point(54.590, 41.069), + point(54.529, 41.027), point(54.441, 40.949), point(54.299, 40.803), + point(54.219, 40.674), point(54.183, 40.581), point(54.172, 40.511), + point(54.182, 40.450), point(54.225, 40.358), point(54.256, 40.318), + point(54.341, 40.251), point(54.418, 40.211), point(54.499, 40.176), + point(54.675, 40.124), point(54.797, 40.106), point(54.978, 40.092), + point(55.245, 40.093), point(55.443, 40.103), point(55.591, 40.128), + point(55.771, 40.164), point(55.962, 40.217), point(56.103, 40.264), + point(56.167, 40.295), point(56.246, 40.341), point(56.338, 40.412), + point(56.382, 40.469), point(56.396, 40.527), point(56.386, 40.609), + point(56.313, 40.740), point(56.208, 40.867), point(56.071, 40.991), + point(55.946, 41.094), point(55.812, 41.198), point(55.722, 41.262), + point(55.665, 41.294), point(55.556, 41.398), point(55.520, 41.414), + point(55.495, 41.424), point(55.478, 41.437), point(55.442, 41.469), + point(55.407, 41.505), point(55.386, 41.510), point(55.367, 41.516), + point(55.335, 41.535), point(55.292, 41.575), seam, + }; + const Polyline original = path; + const Polyline inner{ + point(55.111, 41.176), point(54.946, 41.050), point(54.824, 40.970), + point(54.733, 40.892), point(54.668, 40.846), point(54.598, 40.784), + point(54.480, 40.662), point(54.424, 40.572), point(54.403, 40.516), + point(54.420, 40.479), point(54.465, 40.443), point(54.577, 40.390), + point(54.723, 40.347), point(54.823, 40.333), point(54.986, 40.320), + point(55.239, 40.321), point(55.418, 40.330), point(55.550, 40.352), + point(55.718, 40.386), point(55.896, 40.435), point(56.017, 40.476), + point(56.061, 40.497), point(56.118, 40.530), point(56.154, 40.558), + point(56.124, 40.611), point(56.043, 40.709), point(55.921, 40.819), + point(55.804, 40.916), point(55.676, 41.015), point(55.600, 41.069), + point(55.526, 41.114), point(55.426, 41.207), point(55.379, 41.235), + point(55.349, 41.259), point(55.291, 41.317), point(55.252, 41.293), + point(55.192, 41.238), point(55.111, 41.176), + }; + Lines target_support = inner.lines(); + // Orca: a different contour has a slightly closer inner wall on the air + // side of this short loop. It must not override the loop's material side. + target_support.emplace_back(point(55.159, 42.147), point(55.299, 42.011)); + + REQUIRE(offset_wipe_path_toward_support( + path, seam, seam, seam, +1, scale_(0.293166), scale_(0.8), + target_support, target_support, original.lines(), scale_(0.4))); + REQUIRE(path.points.size() >= 2); + + // Orca: the nearest inner wall is below the seam; accepting the opposite + // offset would send the wipe into air outside this small contour. + CHECK(path.points[1].y() < seam.y()); +} + +TEST_CASE("Stored wipe path does not return to the external wall after moving inward", "[WipePath][Regression]") +{ + const auto point = [](double x, double y) { return Point::new_scale(x, y); }; + const Point seam = point(47.451, 54.647); + Polyline path{ + seam, point(47.370, 54.634), point(47.345, 54.619), point(47.333, 54.604), + point(47.322, 54.572), point(47.312, 54.518), point(47.315, 54.445), + point(47.345, 54.257), point(47.357, 54.206), point(47.380, 54.135), + point(47.418, 54.065), point(47.514, 53.917), point(47.537, 53.886), + point(47.597, 53.834), point(47.705, 53.769), point(47.747, 53.748), + point(47.785, 53.734), point(47.825, 53.735), point(47.862, 53.746), + point(47.889, 53.763), point(47.939, 53.817), point(47.964, 53.856), + point(47.979, 53.897), point(47.986, 53.943), point(47.986, 54.005), + point(47.977, 54.075), point(47.949, 54.188), point(47.902, 54.321), + point(47.871, 54.388), point(47.835, 54.444), point(47.765, 54.521), + point(47.741, 54.542), point(47.675, 54.589), point(47.615, 54.620), + point(47.518, 54.642), seam, + }; + const Polyline original = path; + const Polyline inner{ + point(47.541, 54.281), point(47.545, 54.258), point(47.560, 54.212), + point(47.577, 54.181), point(47.682, 54.017), point(47.707, 53.995), + point(47.789, 53.946), point(47.791, 53.958), point(47.791, 53.992), + point(47.785, 54.039), point(47.762, 54.132), point(47.721, 54.249), + point(47.700, 54.294), point(47.680, 54.324), point(47.628, 54.382), + point(47.574, 54.422), point(47.548, 54.435), point(47.513, 54.443), + point(47.541, 54.281), + }; + const double offset = scale_(0.229999); + + REQUIRE(offset_wipe_path_toward_support( + path, seam, seam, seam, +1, offset, scale_(0.8), + inner.lines(), inner.lines(), original.lines(), scale_(0.4))); + + // Orca: after reaching the inner wall, a full-width inward wipe must not + // collapse back onto the external perimeter at a tight turn. + for (size_t index = 1; index < path.points.size(); ++index) { + double clearance = std::numeric_limits::infinity(); + for (const Line &line : original.lines()) + clearance = std::min(clearance, line.distance_to(path.points[index])); + CHECK(clearance >= 0.75 * offset); + } +} + +// Orca: wipe_on_loops_destination coverage for every orientation. + +TEST_CASE("wipe_on_loops destination is on the material side for every orientation", "[WipePath]") +{ + const auto [is_ccw, is_hole] = GENERATE( + table({{true, false}, {false, false}, {false, true}, {true, true}})); + INFO("is_ccw=" << is_ccw << ", is_hole=" << is_hole); + const double nozzle_diameter = GENERATE(0.4, 0.8); + const bool subdivided = GENERATE(false, true); + INFO("nozzle diameter=" << nozzle_diameter << ", subdivided=" << subdivided); + + const coord_t s = scale_(1.0); + std::vector contour = {Point(0, 0), Point(20 * s, 0), Point(20 * s, 20 * s), Point(0, 20 * s)}; + if (subdivided) { + // The same square, with path boundaries inside both sampling distances near the seam. + contour = {Point(0, 0), Point(scale_(0.03), 0.), Point(scale_(0.2), 0.), + Point(20 * s, 0), Point(20 * s, 20 * s), Point(0, 20 * s), + Point(0., scale_(0.2)), Point(0., scale_(0.03))}; + } + if (!is_ccw) + for (Point &point : contour) + std::swap(point.x(), point.y()); + ExtrusionPaths paths; + if (subdivided) { + for (size_t i = 0; i < contour.size(); ++i) + paths.push_back(make_path({contour[i], contour[(i + 1) % contour.size()]})); + } else { + paths = make_loop_paths(contour); + } + + const std::optional destination = + wipe_on_loops_destination(paths, scale_(nozzle_diameter), is_ccw, is_hole); + REQUIRE(destination.has_value()); + + const Point seam_start = paths.front().first_point(); + const Vec2d first_edge = (paths.front().polyline.points[1].to_point() - seam_start).cast(); + Vec2d material_normal(-first_edge.y(), first_edge.x()); + if (is_ccw == is_hole) + material_normal = -material_normal; + + // Orca: contours use their winding's inside; holes use the opposite side. + const Vec2d move = destination->cast() - seam_start.cast(); + REQUIRE(move.dot(material_normal) > 0.); + // Move 20% of the nozzle diameter, turning through one third of the material-side + // corner: 90 degrees for a contour, 270 degrees for a hole. + const double distance = scale_(0.2 * nozzle_diameter); + const double angle = is_hole ? PI / 2. : PI / 6.; + CHECK_THAT(move.dot(first_edge.normalized()), Catch::Matchers::WithinAbs(distance * std::cos(angle), 2.)); + CHECK_THAT(move.dot(material_normal.normalized()), Catch::Matchers::WithinAbs(distance * std::sin(angle), 2.)); +} + +TEST_CASE("wipe_on_loops returns destination for small but nonzero loop", "[WipePath]") +{ + // Orca: a 0.5 mm square is tight for a 0.4 mm nozzle but remains valid. + const coord_t s = scale_(1.0); + auto paths = make_loop_paths({Point(0, 0), Point(s / 2, 0), Point(s / 2, s / 2), Point(0, s / 2)}); + + auto dest = wipe_on_loops_destination(paths, scale_(0.4), true, false); + REQUIRE(dest.has_value()); +} + +TEST_CASE("wipe_on_loops destination is nullopt for degenerate single-point path", "[WipePath]") +{ + const coord_t s = scale_(1.0); + auto paths = make_paths({Point(50 * s, 50 * s)}); + + auto dest = wipe_on_loops_destination(paths, scale_(0.4), true, false); + REQUIRE_FALSE(dest.has_value()); +} diff --git a/tests/libslic3r/test_wipe_tower.cpp b/tests/libslic3r/test_wipe_tower.cpp new file mode 100644 index 0000000000..277e11eceb --- /dev/null +++ b/tests/libslic3r/test_wipe_tower.cpp @@ -0,0 +1,289 @@ +#include + +#include + +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" +#include "libslic3r/Print.hpp" +#include "libslic3r/PrintConfig.hpp" + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +// A Bambu P1S project that reproduced the off-plate brim: two PLAs priming 30 and 45 mm3 in +// separate adhesiveness categories on a 35 mm tower, 0.21 mm layers, 0.4 nozzle (0.5 mm lines), +// 150 % infill gap (0.75 mm line pitch), rib width 8, 16 mm tall. +static std::vector cube_purges(int first_category = 100) +{ + return {{30.f, first_category}, {45.f, 0}}; +} + +TEST_CASE("Cone base polygon bulges past the body box", "[WipeTower]") { + // Zero angle: plain body box. + const Polygon box = WipeTower2::cone_base_polygon(35., 20., 100., 0.); + CHECK(box.points.size() == 4); + CHECK(get_extents(box).size() == Point::new_scale(Vec2d(35., 20.))); + // A 25-degree cone on a 100 mm tower: base radius R = tan(12.5deg)*100 = 22.2 mm, + // which exceeds the body half-depth, so the footprint bulges to center +- R in y + // (support_scale keeps the x extent compressed near the body). + const Polygon base = WipeTower2::cone_base_polygon(35., 20., 100., 25.); + const BoundingBox bb = get_extents(base); + const double R = std::tan(25. / 2. * M_PI / 180.) * 100.; + CHECK_THAT(unscaled(bb.min.y()), WithinAbs(10. - R, 0.1)); + CHECK_THAT(unscaled(bb.max.y()), WithinAbs(10. + R, 0.1)); + // The footprint always contains the body box. + CHECK(diff(Polygons{box}, Polygons{base}).empty()); +} + +TEST_CASE("Type1 block-stack depth quantizes each purge to whole lines", "[WipeTower]") { + // A 0.5 mm line at 0.21 mm carries 0.0955 mm3 per mm, so across the 34 mm between the + // perimeters 30 mm3 is 10 lines and 45 mm3 is 14: 7.5 + 10.5 at the 0.75 mm pitch behind + // one perimeter width. The generated mesh of the project measured exactly this. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(cube_purges(), 35.f, 0.21f, 0.4f, 1.5f), WithinAbs(18.5f, 0.01f)); + // Sharing one category, a layer can never purge into every filament (one of them starts + // the layer), so the block is sized by its worst layer and the 10-line purge drops out. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(cube_purges(0), 35.f, 0.21f, 0.4f, 1.5f), WithinAbs(11.0f, 0.01f)); + CHECK_THAT(WipeTower::estimate_tower_blocks_depth({}, 35.f, 0.2f, 0.4f, 1.f), WithinAbs(0.f, 1e-6f)); + // A width narrower than two perimeter widths cannot hold purge lines. + CHECK_THAT(WipeTower::estimate_tower_blocks_depth({{45.f, 0}}, 0.9f, 0.2f, 0.4f, 1.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("A nozzle change adds its ramming lines to the block", "[WipeTower]") { + // 10 mm of 1.75 mm filament (24.05 mm3) laid as 1.0 mm nozzle-change lines at 0.2 mm + // (0.1914 mm2 each) is 125.7 mm; across the 48.5 mm available that is 3 lines of 1.0 mm. + std::vector purges{{100.f, 0}, {100.f, 0}}; + const float without_change = WipeTower::estimate_tower_blocks_depth(purges, 50.f, 0.2f, 0.4f, 1.f); + purges.front().filament_change_length = 10.f; + CHECK_THAT(WipeTower::estimate_tower_blocks_depth(purges, 50.f, 0.2f, 0.4f, 1.f) - without_change, WithinAbs(3.f, 1e-4f)); +} + +TEST_CASE("Rib tower footprint estimate covers the generated footprint", "[WipeTower]") { + // The generated first-layer wall bbox of the project measured 29.56 mm from the sliced + // G-code; the volume-only estimate said 23.585 mm. + const float side = WipeTower::estimate_rib_tower_bbox_side(cube_purges(), 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 16.f); + CHECK(side >= 29.56f); + CHECK(side <= 29.56f + 4.f); // without grossly over-reserving plate space + // Separate categories stack their blocks, so the footprint must not shrink when they differ. + CHECK(side >= WipeTower::estimate_rib_tower_bbox_side(cube_purges(0), 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 16.f)); + CHECK_THAT(WipeTower::estimate_rib_tower_bbox_side({}, 35.f, 0.2f, 0.4f, 1.f, 8.f, 0.f, 16.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("Rib footprint extends the ribs, not the body, below the stability minimum", "[WipeTower]") { + // A 10 mm body under a 90 mm print: the ribs stretch to the minimum depth's diagonal, and + // the rib width is capped at half the body, so the square grows to minimum + 5 / sqrt(2). + const float min_depth = WipeTower::get_limit_depth_by_height(90.f); + REQUIRE(min_depth > 10.f); + CHECK_THAT(WipeTower::rib_footprint_side(10.f, 10.f, 8.f, 0.f, 90.f), WithinAbs(min_depth + 5.f / std::sqrt(2.f), 1e-4f)); + // The extra rib length runs along the diagonal, so it shows as its projection on each axis. + const float plain = WipeTower::rib_footprint_side(30.f, 30.f, 8.f, 0.f, 5.f); + CHECK_THAT(plain, WithinAbs(30.f + 8.f / std::sqrt(2.f), 1e-4f)); + CHECK_THAT(WipeTower::rib_footprint_side(30.f, 30.f, 8.f, 4.f, 5.f) - plain, WithinAbs(4.f / std::sqrt(2.f), 1e-4f)); + // A negative extra length cannot pull the ribs inside the diagonal. + CHECK_THAT(WipeTower::rib_footprint_side(30.f, 30.f, 8.f, -4.f, 5.f), WithinAbs(plain, 1e-4f)); + CHECK_THAT(WipeTower::rib_footprint_side(0.f, 30.f, 8.f, 0.f, 5.f), WithinAbs(0.f, 1e-6f)); +} + +TEST_CASE("Brim width estimate matches each generator's loop quantization", "[WipeTower]") { + // 3 mm configured, 0.4 nozzle, 0.2 first layer: 0.4571 mm spacing, 7 loops. WipeTower2 + // prints and reports the 7 loops; WipeTower reports half a spacing of line width on top. + const float spacing = 0.5f - 0.2f * float(1. - M_PI_4); + CHECK_THAT(WipeTower::estimate_brim_real_width(3.f, 0.4f, 0.2f, true), WithinAbs(7.f * spacing, 1e-4f)); + CHECK_THAT(WipeTower::estimate_brim_real_width(3.f, 0.4f, 0.2f, false), WithinAbs(7.5f * spacing, 1e-4f)); + CHECK_THAT(WipeTower::estimate_brim_real_width(0.f, 0.4f, 0.2f, true), WithinAbs(0.f, 1e-6f)); +} + +// --------------------------------------------------------------------------------------------- +// "No sparse layers": the compaction rule and the clearance it demands of the plate. +// --------------------------------------------------------------------------------------------- + +// A square of side mm centred on (cx, cy), in bed coordinates. +static Polygon centered_square(double cx, double cy, double side) +{ + const double h = 0.5 * side; + Polygon poly; + poly.points = {Point::new_scale(cx - h, cy - h), Point::new_scale(cx + h, cy - h), + Point::new_scale(cx + h, cy + h), Point::new_scale(cx - h, cy + h)}; + return poly; +} + +static WipeTower::ToolChangeResult make_tcr(int initial_tool, int new_tool, float layer_height) +{ + WipeTower::ToolChangeResult tcr{}; + tcr.initial_tool = initial_tool; + tcr.new_tool = new_tool; + tcr.layer_height = layer_height; + return tcr; +} + +// A 20 mm square tower at the bed origin, no spiral z-hop, so the keep-out zone is the bare +// footprint and every distance below is one the test sets. +static PrintConfig clearance_config() +{ + PrintConfig cfg; + cfg.extruder_clearance_radius.value = 40.; + cfg.extruder_clearance_dist_to_rod.value = 20.; + cfg.extruder_clearance_height_to_rod.value = 25.; + cfg.extruder_clearance_height_to_lid.value = 120.; + cfg.nozzle_height.value = 5.; + cfg.nozzle_diameter.values = {0.4}; + cfg.z_hop.values = {0.}; + cfg.travel_slope.values = {3.}; + return cfg; +} + +TEST_CASE("Sparse layers are skipped only when nothing else needs a tower on every layer", "[WipeTower][NoSparseLayers]") { + PrintConfig cfg; + cfg.timelapse_type.value = TimelapseType::tlTraditional; + cfg.enable_wrapping_detection.value = false; + + cfg.wipe_tower_no_sparse_layers.value = false; + CHECK_FALSE(wipe_tower_sparse_layers_skipped(cfg)); + cfg.wipe_tower_no_sparse_layers.value = true; + CHECK(wipe_tower_sparse_layers_skipped(cfg)); + + // Both park the nozzle on the tower every layer, so no layer is ever dropped and the option + // must read as off everywhere rather than compact in one place and not another. + cfg.timelapse_type.value = TimelapseType::tlSmooth; + CHECK_FALSE(wipe_tower_sparse_layers_skipped(cfg)); + cfg.timelapse_type.value = TimelapseType::tlTraditional; + cfg.enable_wrapping_detection.value = true; + CHECK_FALSE(wipe_tower_sparse_layers_skipped(cfg)); +} + +TEST_CASE("A planned layer is sparse only when its single tool change keeps the filament", "[WipeTower][NoSparseLayers]") { + CHECK(wipe_tower_layer_is_sparse({make_tcr(1, 1, 0.2f)})); + CHECK_FALSE(wipe_tower_layer_is_sparse({make_tcr(0, 1, 0.2f)})); + // A second entry means the layer carries real work whatever the tools are. + CHECK_FALSE(wipe_tower_layer_is_sparse({make_tcr(1, 1, 0.2f), make_tcr(1, 1, 0.2f)})); + CHECK_FALSE(wipe_tower_layer_is_sparse({})); +} + +TEST_CASE("The compacted tower falls one layer height behind the object per sparse layer", "[WipeTower][NoSparseLayers]") { + // Five 0.2 mm layers off a 0.1 mm z offset, the middle two sparse. The object reaches + // 0.1 + 5 * 0.2 = 1.1; the tower only grows on the three printed layers, so it ends at + // 0.1 + 3 * 0.2 = 0.7 and a sparse layer carries the previous value rather than its own. + const std::vector> tool_changes{ + {make_tcr(0, 1, 0.2f)}, {make_tcr(1, 1, 0.2f)}, {make_tcr(1, 1, 0.2f)}, + {make_tcr(1, 0, 0.2f)}, {make_tcr(0, 1, 0.2f)}}; + + const std::vector tower_z = compute_compacted_wipe_tower_z(tool_changes, 0.1f); + REQUIRE(tower_z.size() == tool_changes.size()); + CHECK_THAT(tower_z[0], WithinAbs(0.3f, 1e-5f)); + CHECK_THAT(tower_z[1], WithinAbs(0.3f, 1e-5f)); + CHECK_THAT(tower_z[2], WithinAbs(0.3f, 1e-5f)); + CHECK_THAT(tower_z[3], WithinAbs(0.5f, 1e-5f)); + CHECK_THAT(tower_z[4], WithinAbs(0.7f, 1e-5f)); + CHECK_THAT(1.1f - tower_z.back(), WithinAbs(2 * 0.2f, 1e-5f)); + + // Without a base the tower starts at the bed, and an empty layer carries over like a sparse one. + const std::vector no_offset = compute_compacted_wipe_tower_z({{make_tcr(0, 1, 0.2f)}, {}}, 0.f); + CHECK_THAT(no_offset[0], WithinAbs(0.2f, 1e-5f)); + CHECK_THAT(no_offset[1], WithinAbs(0.2f, 1e-5f)); +} + +TEST_CASE("The tower keep-out zone grows by the spiral z-hop envelope", "[WipeTower][NoSparseLayers]") { + PrintConfig cfg = clearance_config(); + const Polygon footprint = centered_square(0., 0., 20.); + + // No lift, no envelope: the zone works on the bare footprint. + CHECK_THAT(unscaled(compacted_wipe_tower_zone(cfg, footprint).hull.bounding_box().max.x()), WithinAbs(10., 1e-6)); + + // A spiral lift leaves the outline at low z, so it counts as tower. The circle reaches + // 2 * lift / (2*pi*atan(slope)) past the outline, matching GCodeWriter: 2*2/(2*pi*atan(3)) = 0.51 mm. + cfg.z_hop.values = {2.}; + const CompactedTowerZone lifted = compacted_wipe_tower_zone(cfg, footprint); + CHECK_THAT(unscaled(lifted.hull.bounding_box().max.x()), WithinAbs(10.51, 0.02)); + CHECK_THAT(unscaled(lifted.hull.bounding_box().min.y()), WithinAbs(-10.51, 0.02)); + CHECK(diff(Polygons{footprint}, Polygons{lifted.hull}).empty()); + + // z_hop is capped at 5 mm by the option, so a taller lift cannot widen the zone further. + cfg.z_hop.values = {10.}; + const double capped = unscaled(compacted_wipe_tower_zone(cfg, footprint).hull.bounding_box().max.x()); + CHECK_THAT(capped, WithinAbs(10. + 2. * 5. / (2. * M_PI * std::atan(3.)), 0.02)); + + // The rod sweeps the whole X axis, so its band is the tower's y span plus half the rod offset. + CHECK_THAT(unscaled(lifted.bbox_rod.max.y()), WithinAbs(10.51 + 10., 0.02)); +} + +TEST_CASE("An object beside a compacted tower is limited by the nearest part of the toolhead", "[WipeTower][NoSparseLayers]") { + const PrintConfig cfg = clearance_config(); + const CompactedTowerZone zone = compacted_wipe_tower_zone(cfg, centered_square(0., 0., 20.)); + + // Each side carries half its clearance less 0.1 mm slack, so the two outlines meet when the + // objects are a full clearance apart: 2 * (4 - 0.2) / 2 = 3.8 mm for the bare nozzle cone, + // 2 * (40 - 0.2) / 2 = 39.8 mm for the head body. A 10 mm object at x leaves a gap of x - 15. + const double tall = 50., shortish = 3.; + + // Gap 1 mm, inside the nozzle cone: the object may not rise above the tower at all. + const CompactedTowerClearance touching = compacted_wipe_tower_clearance(cfg, zone, centered_square(16., 0., 10.), tall); + CHECK_THAT(touching.allowed_rise, WithinAbs(0., 1e-9)); + + // Gap 10 mm: clear of the cone but inside the head body, which starts at nozzle_height. + const CompactedTowerClearance near_body = compacted_wipe_tower_clearance(cfg, zone, centered_square(25., 0., 10.), tall); + CHECK(near_body.near_body); + CHECK_THAT(near_body.allowed_rise, WithinAbs(5., 1e-9)); + CHECK_THAT(near_body.body_clearance, WithinAbs(40., 1e-9)); + + // The same spot, but an object that never rises past the cone. The body sits above the cone, so + // it cannot reach this object however close it stands, and only the narrow tier applies. + const CompactedTowerClearance low = compacted_wipe_tower_clearance(cfg, zone, centered_square(25., 0., 10.), shortish); + CHECK_FALSE(low.near_body); + CHECK_THAT(low.body_clearance, WithinAbs(4., 1e-9)); + CHECK_THAT(low.allowed_rise, WithinAbs(25., 1e-9)); + + // Gap 55 mm, clear of the head entirely: the rod is the obstacle, since the object shares the + // tower's y band and the rod spans the whole x axis however far apart the two stand. + const CompactedTowerClearance far_in_band = compacted_wipe_tower_clearance(cfg, zone, centered_square(70., 0., 10.), tall); + CHECK_FALSE(far_in_band.near_body); + CHECK_THAT(far_in_band.far_clearance, WithinAbs(25., 1e-9)); + CHECK_THAT(far_in_band.allowed_rise, WithinAbs(25., 1e-9)); + + // Out of the band the rod passes over it and only the lid is left. + const CompactedTowerClearance out_of_band = compacted_wipe_tower_clearance(cfg, zone, centered_square(70., 60., 10.), tall); + CHECK_THAT(out_of_band.allowed_rise, WithinAbs(120., 1e-9)); +} + +TEST_CASE("The ring drawn around the tower meets the outline drawn around an offender", "[WipeTower][NoSparseLayers]") { + const PrintConfig cfg = clearance_config(); + const CompactedTowerZone zone = compacted_wipe_tower_zone(cfg, centered_square(0., 0., 20.)); + + // What the plater draws has to be what the check tested, otherwise a user moves an object until + // the outlines part and slicing still refuses the plate. Both halves of the 3.8 mm nozzle + // clearance: at a 3 mm gap the rings overlap and the rise limit is zero, at 5 mm neither holds. + for (const auto &c : {std::make_pair(18., true), std::make_pair(20., false)}) { + DYNAMIC_SECTION("object at x = " << c.first) { + const Polygon hull = centered_square(c.first, 0., 10.); + const CompactedTowerClearance clearance = compacted_wipe_tower_clearance(cfg, zone, hull, 3.); + const Polygons rings = compacted_wipe_tower_rings(zone, compacted_tower_body_tier(clearance)); + const Polygon outline = compacted_wipe_tower_offender_outline(hull, clearance.body_clearance); + const bool outlines_meet = ! intersection(rings, Polygons{outline}).empty(); + const bool rise_denied = clearance.allowed_rise < EPSILON; + CHECK(outlines_meet == c.second); + CHECK(rise_denied == c.second); + } + } +} + +TEST_CASE("Only the keep-out ring an object is measured against is drawn", "[WipeTower][NoSparseLayers]") { + const PrintConfig cfg = clearance_config(); + const CompactedTowerZone zone = compacted_wipe_tower_zone(cfg, centered_square(0., 0., 20.)); + + // Drawing the wide ring when no object is judged on it would show a keep-out zone the check can + // never trip, so it is added only once some object reaches past the nozzle cone. + CHECK(compacted_wipe_tower_rings(zone, false).size() == zone.grown_nozzle.size()); + CHECK(compacted_wipe_tower_rings(zone, true).size() == zone.grown_nozzle.size() + zone.grown_body.size()); + CHECK_THAT(unscaled(get_extents(zone.grown_nozzle).max.x()), WithinAbs(10. + 0.5 * (4. - 0.2), 0.02)); + CHECK_THAT(unscaled(get_extents(zone.grown_body).max.x()), WithinAbs(10. + 0.5 * (40. - 0.2), 0.02)); +} + +TEST_CASE("Footprint padding covers the brim and the extrusion half width on each side", "[WipeTower][NoSparseLayers]") { + // A nominal outline hulls extrusion centre lines and is re-centred once the real wall is known, + // so a line width per side on top of the brim is what keeps an estimate enclosing the real tower. + const PrintConfig cfg = clearance_config(); + CHECK_THAT(compacted_tower_footprint_padding(cfg, 2.), WithinAbs(2. + 2. * 0.4, 1e-9)); + CHECK_THAT(compacted_tower_footprint_padding(cfg, 0.), WithinAbs(2. * 0.4, 1e-9)); + // Callers whose outline already carries the brim pass zero, and a negative one cannot shrink it. + CHECK_THAT(compacted_tower_footprint_padding(cfg, -5.), WithinAbs(2. * 0.4, 1e-9)); +} diff --git a/tests/libslic3r/test_wipe_tower_estimate.cpp b/tests/libslic3r/test_wipe_tower_estimate.cpp new file mode 100644 index 0000000000..20644200f3 --- /dev/null +++ b/tests/libslic3r/test_wipe_tower_estimate.cpp @@ -0,0 +1,351 @@ +#include + +#include "libslic3r/BoundingBox.hpp" +#include "libslic3r/ClipperUtils.hpp" +#include "libslic3r/GCode/WipeTower.hpp" +#include "libslic3r/GCode/WipeTower2.hpp" +#include "libslic3r/GCode/WipeTowerEstimate.hpp" +#include "libslic3r/PrintConfig.hpp" + +#include +#include +#include + +using namespace Slic3r; +using Catch::Matchers::WithinAbs; + +// Rectangle wall, one nozzle, 100 mm3 prime volume on a 50 mm wide tower at 0.2 mm layers: one +// purge is 10 mm of depth. The flush matrix is off here; the shipped-default case covers it. +// Built as PresetBundle::full_config builds the GUI's: apply() creates each enum as a +// ConfigOptionEnumGeneric, where full_print_config() would clone the static defaults' +// ConfigOptionEnum. The estimate has to read either. +static DynamicPrintConfig preset_shaped_defaults() +{ + DynamicPrintConfig config; + config.apply(FullPrintConfig::defaults()); + return config; +} + +static DynamicPrintConfig make_config(const char *wall_type = "rectangle") +{ + DynamicPrintConfig config = preset_shaped_defaults(); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(50.)); + config.set_key_value("prime_volume", new ConfigOptionFloat(100.)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({100.})); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({0})); + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(100.)); + config.set_key_value("wipe_tower_extra_spacing", new ConfigOptionPercent(100.)); + config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(3.)); + config.set_deserialize_strict("wipe_tower_wall_type", wall_type); + config.set_key_value("wipe_tower_rib_width", new ConfigOptionFloat(8.)); + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4})); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.2)); + config.set_deserialize_strict("timelapse_type", "0"); + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); + config.set_key_value("raft_layers", new ConfigOptionInt(0)); + config.set_key_value("purge_in_prime_tower", new ConfigOptionBool(false)); + config.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); + return config; +} + +static std::vector filaments(size_t count) +{ + std::vector ids(count); + std::iota(ids.begin(), ids.end(), 0u); + return ids; +} + +// The first `count` filaments on the given planner; Type2 unless a case says otherwise. +static WipeTowerFootprint estimate(const ConfigBase &config, size_t count, double layer_height, double height, WipeTowerType type = WipeTowerType::Type2) +{ + return estimate_wipe_tower_footprint(config, type, filaments(count), layer_height, height); +} + +// What both planners print for a 3 mm brim at 0.4 nozzle and 0.2 first layer (0.4571 mm loops). +static double printed_brim(double configured, WipeTowerType type) +{ + return WipeTower::estimate_brim_real_width(float(configured), 0.4f, 0.2f, type == WipeTowerType::Type2); +} + +TEST_CASE("A rectangle wall tower is sized by the purge volume", "[WipeTowerEstimate]") { + const DynamicPrintConfig config = make_config(); + // Three filaments purge twice per layer; a 5 mm object keeps the stability floor at 5 mm. + const WipeTowerFootprint fp = estimate(config, 3, 0.2, 5.); + CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); + CHECK_THAT(fp.depth, WithinAbs(20., 1e-9)); + CHECK_THAT(fp.height, WithinAbs(5., 1e-9)); + CHECK_THAT(fp.brim_width, WithinAbs(printed_brim(3., WipeTowerType::Type2), 1e-6)); + // Thinner layers need more depth for the same volume. + CHECK_THAT(estimate(config, 3, 0.1, 5.).depth, WithinAbs(40., 1e-9)); +} + +TEST_CASE("Each planner spaces its purge lines by its own option", "[WipeTowerEstimate]") { + // Type2 reads wipe_tower_extra_spacing and Type1 prime_tower_infill_gap; neither sees the + // other's key. Type2's extra flow cancels out of its depth. + DynamicPrintConfig config = make_config(); + config.set_key_value("wipe_tower_extra_flow", new ConfigOptionPercent(250.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(20., 1e-9)); + config.set_key_value("wipe_tower_extra_spacing", new ConfigOptionPercent(150.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); + const double type1_spaced = estimate(config, 3, 0.2, 5., WipeTowerType::Type1).depth; + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs(30., 1e-9)); + // Type1 stacks whole lines behind one 0.5 mm perimeter width, so only the stack scales. + CHECK_THAT(estimate(config, 3, 0.2, 5., WipeTowerType::Type1).depth - 0.5, WithinAbs(1.5 * (type1_spaced - 0.5), 1e-6)); +} + +TEST_CASE("Type1 sizes the tower from each filament's own prime volume", "[WipeTowerEstimate]") { + // The Bambu P1S project of the WipeTower cases: 30 and 45 mm3 in two categories on a 35 mm + // tower at 0.21 mm, 150 % gap, is 18.5 mm of stacked blocks (11 mm sharing one category). + DynamicPrintConfig config = make_config(); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(35.)); + config.set_key_value("prime_tower_infill_gap", new ConfigOptionPercent(150.)); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.21)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({30., 45.})); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({100, 0})); + const std::vector purges{{30.f, 100}, {45.f, 0}}; + const double blocks = WipeTower::estimate_tower_blocks_depth(purges, 35.f, 0.21f, 0.4f, 1.5f); + REQUIRE_THAT(blocks, WithinAbs(18.5, 0.01)); + CHECK_THAT(estimate(config, 2, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(blocks, 1e-4)); + // The ids pick the volumes, so their order does not matter and a lone filament has no purge. + CHECK_THAT(estimate_wipe_tower_footprint(config, WipeTowerType::Type1, {1, 0}, 0.21, 5.).depth, WithinAbs(blocks, 1e-4)); + CHECK_THAT(estimate(config, 1, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(0., 1e-9)); + config.set_key_value("filament_adhesiveness_category", new ConfigOptionInts({0, 0})); + CHECK_THAT(estimate(config, 2, 0.21, 5., WipeTowerType::Type1).depth, WithinAbs(11., 0.01)); + // A rib wall squares the same stack. + config.set_deserialize_strict("wipe_tower_wall_type", "rib"); + const WipeTowerFootprint rib = estimate(config, 2, 0.21, 5., WipeTowerType::Type1); + CHECK_THAT(rib.width, WithinAbs(rib.depth, 1e-9)); + CHECK_THAT(rib.depth, WithinAbs(WipeTower::estimate_rib_tower_bbox_side({{30.f, 0}, {45.f, 0}}, 35.f, 0.21f, 0.4f, 1.5f, 8.f, 0.f, 5.f), 1e-4)); +} + +TEST_CASE("A second nozzle adds the ramming of one nozzle change per layer", "[WipeTowerEstimate]") { + // Two filaments on two nozzles: the tool order crosses once per layer, and Type1 rams 10 mm + // of filament as three 1.0 mm nozzle-change lines (see the WipeTower case). + DynamicPrintConfig config = make_config(); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + config.set_key_value("filament_change_length", new ConfigOptionFloats({10., 10.})); + config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); + config.set_key_value("filament_map", new ConfigOptionInts({1, 1})); + const double same_nozzle = estimate(config, 2, 0.2, 5., WipeTowerType::Type1).depth; + config.set_key_value("filament_map", new ConfigOptionInts({1, 2})); + CHECK_THAT(estimate(config, 2, 0.2, 5., WipeTowerType::Type1).depth - same_nozzle, WithinAbs(3., 1e-4)); +} + +TEST_CASE("The tower is sized for the first layer when it is the thinnest", "[WipeTowerEstimate]") { + // Both planners reserve the worst layer: a 0.28 mm print with a 0.2 mm first layer needs + // the 0.2 mm depth, while a thicker first layer changes nothing. + DynamicPrintConfig config = make_config(); + const double at_thinnest = estimate(config, 3, 0.2, 5.).depth; + CHECK_THAT(estimate(config, 3, 0.28, 5.).depth, WithinAbs(at_thinnest, 1e-9)); + config.set_key_value("initial_layer_print_height", new ConfigOptionFloat(0.3)); + CHECK(estimate(config, 3, 0.28, 5.).depth < at_thinnest); +} + +TEST_CASE("Object height sets the stability floor and the auto brim", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + // Two filaments purge once: 10 mm, lifted to the 20 mm floor of a 100 mm tower. + CHECK_THAT(estimate(config, 2, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + config.set_key_value("prime_tower_brim_width", new ConfigOptionFloat(-1.)); + const double auto_brim = WipeTower::get_auto_brim_by_height(50.f); + CHECK_THAT(estimate(config, 2, 0.2, 50.).brim_width, WithinAbs(printed_brim(auto_brim, WipeTowerType::Type2), 1e-6)); + CHECK_THAT(estimate(config, 2, 0.2, 50., WipeTowerType::Type1).brim_width, WithinAbs(printed_brim(auto_brim, WipeTowerType::Type1), 1e-6)); +} + +TEST_CASE("A single filament only gets a tower when one is printed anyway", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 0, 0.2, 100.).width, WithinAbs(0., 1e-9)); + + // Wrapping detection prints a tower on the first layers whatever the filament count: the + // Type1 planner's fixed 10 mm, the stability floor otherwise. + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(true)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 100., WipeTowerType::Type1).depth, WithinAbs(WipeTower::get_wrapping_detection_depth(), 1e-9)); + config.set_key_value("enable_wrapping_detection", new ConfigOptionBool(false)); + + // A raft is not one of them: normalize_fdm_2 clears enable_prime_tower for a plate that + // purges one filament unless smooth timelapse or wrapping detection is on, so a raft + // alone leaves no tower to reserve for. + config.set_key_value("raft_layers", new ConfigOptionInt(3)); + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(0., 1e-9)); + config.set_key_value("raft_layers", new ConfigOptionInt(0)); + + config.set_deserialize_strict("timelapse_type", "1"); + // A tower printed with no tool change is exactly the planner's idle depth: there is + // nothing to purge, and WipeTower2 sizes it at the stability floor. + CHECK_THAT(estimate(config, 1, 0.2, 100.).depth, WithinAbs(20., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, 5.).depth, WithinAbs(WipeTower::get_limit_depth_by_height(5.f), 1e-9)); +} + +TEST_CASE("A tool change reserves a tower even with nothing to purge", "[WipeTowerEstimate]") { + // The purge volumes are configurable down to zero, but the tool changes are still printed + // on the tower and both planners still floor it - so the estimate has to floor it too. + // Type1 plans per filament and already reserves one; Type2 has only the volume to go on. + const double height = GENERATE(5., 100.); + const float floor = WipeTower::get_limit_depth_by_height(float(height)); + const char *wall = GENERATE("rectangle", "rib"); + DynamicPrintConfig config = make_config(wall); + config.set_key_value("prime_volume", new ConfigOptionFloat(0.)); + config.set_key_value("filament_prime_volume", new ConfigOptionFloats({0.})); + + CHECK(estimate(config, 3, 0.2, height, WipeTowerType::Type2).depth >= floor); + CHECK(estimate(config, 3, 0.2, height, WipeTowerType::Type1).depth >= floor); + // Still nothing for a lone filament with no other reason. + CHECK_THAT(estimate(config, 1, 0.2, height, WipeTowerType::Type2).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(config, 1, 0.2, height, WipeTowerType::Type1).depth, WithinAbs(0., 1e-9)); +} + +TEST_CASE("Both wall types agree on whether there is a tower at all", "[WipeTowerEstimate]") { + // A wall type may only change the shape of the tower, never whether one is reserved: + // reporting no tower for one that is built collapses the validation hull to a point. + const double height = GENERATE(5., 100.); + DynamicPrintConfig rect = make_config(); + DynamicPrintConfig rib = make_config("rib"); + + // No tool change and nothing else that prints a tower - neither wall type reserves one. + CHECK_THAT(estimate(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + + // Not even on a dual-nozzle printer, where a lone filament still needs no purge. + rect.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + rib.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + CHECK_THAT(estimate(rect, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + CHECK_THAT(estimate(rib, 1, 0.2, height).depth, WithinAbs(0., 1e-9)); + + // With a tool change both reserve one, and both respect the stability floor. + CHECK(estimate(rect, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); + CHECK(estimate(rib, 2, 0.2, height).depth >= WipeTower::get_limit_depth_by_height(float(height))); +} + +TEST_CASE("A rib wall squares the tower and caps the rib width", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config("rib"); + // sqrt(200 / 0.2) = 31.62 mm square, plus the 8 mm rib bulge along the diagonal. + const double body = std::sqrt(1000.); + WipeTowerFootprint fp = estimate(config, 3, 0.2, 5.); + CHECK_THAT(fp.depth, WithinAbs(8. / std::sqrt(2.) + body, 1e-5)); + CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); + // The extra rib length runs along the diagonal and grows the footprint by its projection. + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(4.)); + CHECK_THAT(estimate(config, 3, 0.2, 5.).depth, WithinAbs((8. + 4.) / std::sqrt(2.) + body, 1e-5)); + // A tiny tower caps the rib width at half its depth: 5 mm body, 2.5 mm rib. + config.set_key_value("wipe_tower_extra_rib_length", new ConfigOptionFloat(0.)); + config.set_key_value("prime_volume", new ConfigOptionFloat(5.)); + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs(2.5 / std::sqrt(2.) + 5., 1e-5)); +} + +TEST_CASE("Every wall and tower type is read the same from a preset and a static config", "[WipeTowerEstimate]") { + // The GUI, arrange and the CLI pass a DynamicPrintConfig whose enums are + // ConfigOptionEnumGeneric; Print passes a static config whose enums are ConfigOptionEnum. + // Both the wall type and the planner selection are read by value, so both give the same shape. + const char *wall_type = GENERATE("rectangle", "cone", "rib"); + const char *tower_type = GENERATE("type1", "type2"); + DynamicPrintConfig preset = make_config(wall_type); + preset.set_deserialize_strict("wipe_tower_type", tower_type); + REQUIRE(dynamic_cast(preset.option("wipe_tower_wall_type")) != nullptr); + + FullPrintConfig static_config; + static_config.apply(preset, true); + REQUIRE(static_config.wipe_tower_wall_type.serialize() == wall_type); + REQUIRE(static_config.wipe_tower_type.serialize() == tower_type); + + const WipeTowerType type = resolve_wipe_tower_type(preset); + CHECK(type == (std::string(tower_type) == "type1" ? WipeTowerType::Type1 : WipeTowerType::Type2)); + CHECK(resolve_wipe_tower_type(static_config) == type); + + // Three filaments purge twice per layer on a 5 mm object. + const WipeTowerFootprint fp = estimate(preset, 3, 0.2, 5., type); + const WipeTowerFootprint from_static = estimate(static_config, 3, 0.2, 5., type); + CHECK(fp.depth > 0.); + if (std::string(wall_type) == "rib") + CHECK_THAT(fp.width, WithinAbs(fp.depth, 1e-9)); + else + CHECK_THAT(fp.width, WithinAbs(50., 1e-9)); + CHECK_THAT(from_static.width, WithinAbs(fp.width, 1e-9)); + CHECK_THAT(from_static.depth, WithinAbs(fp.depth, 1e-9)); + CHECK_THAT(from_static.brim_width, WithinAbs(fp.brim_width, 1e-9)); + + // Smooth timelapse is the other enum the estimate reads: a lone filament gets a tower + // through both storages too. + preset.set_deserialize_strict("timelapse_type", "1"); + static_config.apply(preset, true); + CHECK(estimate(preset, 1, 0.2, 5., type).depth > 0.); + CHECK(estimate(static_config, 1, 0.2, 5., type).depth > 0.); +} + +TEST_CASE("The first-layer outline bulges only for a Type2 cone wall", "[WipeTowerEstimate]") { + // Read off a preset-shaped config, whose enums are ConfigOptionEnumGeneric: a cast to + // ConfigOptionEnum sees no wall type there and would never find the cone. + DynamicPrintConfig config = make_config("cone"); + config.set_key_value("wipe_tower_cone_angle", new ConfigOptionFloat(25.)); + REQUIRE(dynamic_cast(config.option("wipe_tower_wall_type")) != nullptr); + const Polygon box = Polygon::new_scale({{0., 0.}, {35., 0.}, {35., 20.}, {0., 20.}}); + auto is_box = [&box](const Polygon &outline) { return diff(Polygons{outline}, Polygons{box}).empty(); }; + + // A 25-degree cone on a 100 mm tower has a 22 mm base radius, past the 10 mm half-depth. + const Polygon cone = estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type2, 35., 20., 100.); + CHECK(unscaled(get_extents(cone).max.y()) > 20. + 1.); + CHECK(diff(Polygons{box}, Polygons{cone}).empty()); + // Type1 ignores the cone option, and the other wall types have no cone. + CHECK(is_box(estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type1, 35., 20., 100.))); + for (const char *wall_type : {"rectangle", "rib"}) { + config.set_deserialize_strict("wipe_tower_wall_type", wall_type); + CHECK(is_box(estimate_wipe_tower_first_layer_outline(config, WipeTowerType::Type2, 35., 20., 100.))); + } + // The static config Print holds gives the same outline. + config.set_deserialize_strict("wipe_tower_wall_type", "cone"); + FullPrintConfig static_config; + static_config.apply(config, true); + const Polygon from_static = estimate_wipe_tower_first_layer_outline(static_config, WipeTowerType::Type2, 35., 20., 100.); + CHECK(from_static.points == cone.points); +} + +TEST_CASE("A Bambu Lab printer always gets the Type1 planner", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + config.set_deserialize_strict("wipe_tower_type", "type2"); + config.set_key_value("printer_model", new ConfigOptionString("Bambu Lab X1 Carbon")); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type1); + config.set_key_value("printer_model", new ConfigOptionString("Voron 2.4")); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type2); + config.erase("wipe_tower_type"); + CHECK(resolve_wipe_tower_type(config) == WipeTowerType::Type2); +} + +TEST_CASE("A dual nozzle purges every filament plus the filament change", "[WipeTowerEstimate]") { + DynamicPrintConfig config = make_config(); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4, 0.4})); + config.set_key_value("filament_change_length", new ConfigOptionFloats({10., 10.})); + config.set_key_value("filament_diameter", new ConfigOptionFloats({1.75, 1.75})); + // Two purges of 100 mm3 plus one 10 mm filament change: (200 + 10 * pi * 1.75^2 / 4) / (0.2 * 50). + const double change_volume = 10. * PI * 1.75 * 1.75 / 4.; + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs((200. + change_volume) / 10., 1e-9)); +} + +TEST_CASE("The shipped defaults size the tower from the flush matrix", "[WipeTowerEstimate]") { + // Both keys default to true, so the shipped configuration purges the flush volumes rather + // than the prime volume, with no infill gap on top - the flush volumes already hold it. + DynamicPrintConfig config = preset_shaped_defaults(); + REQUIRE(config.opt_bool("purge_in_prime_tower")); + REQUIRE(config.opt_bool("single_extruder_multi_material")); + config.set_key_value("prime_tower_width", new ConfigOptionFloat(50.)); + config.set_deserialize_strict("wipe_tower_wall_type", "rectangle"); + config.set_key_value("nozzle_diameter", new ConfigOptionFloats({0.4})); + + const double flush_volume = WipeTower2::estimate_semm_flush_volume(config, 2); + const double expected = std::max(double(WipeTower::get_limit_depth_by_height(5.f)), flush_volume / (0.2 * 50.)); + CHECK_THAT(estimate(config, 2, 0.2, 5.).depth, WithinAbs(expected, 1e-6)); +} + +TEST_CASE("A config missing a tower key falls back to that key's default", "[WipeTowerEstimate]") { + // The signature takes any ConfigBase: an absent key must read as its declared default. + const DynamicPrintConfig full = make_config(); + DynamicPrintConfig partial = full; + partial.erase("wipe_tower_extra_spacing"); + REQUIRE(partial.option("wipe_tower_extra_spacing") == nullptr); + + DynamicPrintConfig defaulted = full; + defaulted.set_key_value("wipe_tower_extra_spacing", + print_config_def.get("wipe_tower_extra_spacing")->default_value->clone()); + CHECK_THAT(estimate(partial, 3, 0.2, 5.).depth, WithinAbs(estimate(defaulted, 3, 0.2, 5.).depth, 1e-9)); +} diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index ebbd62b820..3ddacc5a1b 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -1,6 +1,8 @@ get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME) add_executable(${_TEST_NAME}_tests ${_TEST_NAME}_tests_main.cpp + test_bambu_filament_ids.cpp + test_creality_cfs_match.cpp test_dev_mapping.cpp test_filament_bitmap_utils.cpp test_network_versions.cpp @@ -53,6 +55,18 @@ elseif (APPLE) COMMENT "Copying Python runtime for macOS plugin host API tests" VERBATIM ) +elseif (FLATPAK) + # Same /python home as WIN32/APPLE; symlink since /app/libpython + # already ships in the flatpak (the test exe links libpython3.12.so from it). + add_custom_command(TARGET ${_TEST_NAME}_tests POST_BUILD + COMMAND ${CMAKE_COMMAND} -E rm -rf + "$/python" + COMMAND ${CMAKE_COMMAND} -E create_symlink + "${CMAKE_PREFIX_PATH}/libpython" + "$/python" + COMMENT "Linking Python runtime for flatpak plugin host API tests" + VERBATIM + ) endif() orcaslicer_discover_tests(${_TEST_NAME}_tests) diff --git a/tests/slic3rutils/plugin_test_utils.hpp b/tests/slic3rutils/plugin_test_utils.hpp index d60b3441c8..cbdcf1ff95 100644 --- a/tests/slic3rutils/plugin_test_utils.hpp +++ b/tests/slic3rutils/plugin_test_utils.hpp @@ -34,4 +34,24 @@ struct ScopedDataDir ScopedDataDir& operator=(const ScopedDataDir&) = delete; }; +// Point resources_dir() at a throwaway directory for the lifetime of a test and restore the +// previous value afterwards, mirroring ScopedDataDir. +struct ScopedResourcesDir +{ + ScopedTemporaryDir tmp; + boost::filesystem::path dir; + std::string previous; + + explicit ScopedResourcesDir(const std::string& tag) + : tmp("orca-" + tag), dir(tmp.path()), previous(resources_dir()) + { + set_resources_dir(dir.string()); + } + + ~ScopedResourcesDir() { set_resources_dir(previous); } + + ScopedResourcesDir(const ScopedResourcesDir&) = delete; + ScopedResourcesDir& operator=(const ScopedResourcesDir&) = delete; +}; + } // namespace Slic3r diff --git a/tests/slic3rutils/test_bambu_filament_ids.cpp b/tests/slic3rutils/test_bambu_filament_ids.cpp new file mode 100644 index 0000000000..5f6215d7ca --- /dev/null +++ b/tests/slic3rutils/test_bambu_filament_ids.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include + +#include "libslic3r/Utils.hpp" +#include "slic3r/Utils/BBLPrinterAgent.hpp" +#include "slic3r/Utils/OrcaPrinterAgent.hpp" + +using json = nlohmann::json; +using namespace Slic3r; + +namespace { + +// Point resources_dir() at the repo's own tree for the lifetime of a test and restore it +// afterwards, mirroring ScopedResourcesDir (which only ever makes a throwaway directory). +// PROFILES_DIR is /resources/profiles; the map lives in /resources/printers. +struct ScopedRepoResourcesDir +{ + std::string previous{resources_dir()}; + + ScopedRepoResourcesDir() { set_resources_dir(boost::filesystem::path(PROFILES_DIR).parent_path().string()); } + ~ScopedRepoResourcesDir() { set_resources_dir(previous); } + + ScopedRepoResourcesDir(const ScopedRepoResourcesDir&) = delete; + ScopedRepoResourcesDir& operator=(const ScopedRepoResourcesDir&) = delete; +}; + +std::string orca_id_of(const std::string& bambu_id) +{ + boost::nowide::ifstream file(resources_dir() + "/printers/bambu_filament_ids.json"); + json doc; + file >> doc; + for (const auto& [orca_id, row] : doc["filaments"].items()) + if (row["bambu_id"] == bambu_id) + return orca_id; + FAIL("no map row for " << bambu_id); + return {}; +} + +} // namespace + +TEST_CASE("Bambu filament id map is one-to-one and leaves unmapped ids alone", "[BambuFilamentIds]") +{ + const ScopedRepoResourcesDir repo_resources; + const BBLPrinterAgent bbl; + const std::string abs = orca_id_of("GFB00"); // Bambu ABS + REQUIRE(abs.rfind("OF", 0) == 0); + CHECK(bbl.from_orca_filament_id(abs) == "GFB00"); + CHECK(bbl.to_orca_filament_id("GFB00") == abs); + CHECK(bbl.from_orca_filament_id("OFnotarow") == "OFnotarow"); + CHECK(bbl.to_orca_filament_id("GFZZ99") == "GFZZ99"); // Bambu id we do not ship + CHECK(bbl.to_orca_filament_id("P1234567") == "P1234567"); // user root + CHECK(bbl.from_orca_filament_id("") == ""); + + // An agent whose printers already speak our ids inherits IPrinterAgent's identity default. + const OrcaPrinterAgent other{""}; + CHECK(other.from_orca_filament_id(abs) == abs); + CHECK(other.to_orca_filament_id("GFB00") == "GFB00"); +} + +TEST_CASE("Payload rewrite covers nested trays, calibration lists and mapping info", "[BambuFilamentIds]") +{ + const ScopedRepoResourcesDir repo_resources; + const std::string abs = orca_id_of("GFB00"), pla = orca_id_of("GFA00"); + const std::string status = + R"({"print":{"ams":{"ams":[{"tray":[{"tray_info_idx":"GFB00"},{"tray_info_idx":"GFZZ99"}]}]},)" + R"("vt_tray":{"tray_info_idx":"GFA00"},"filaments":[{"filament_id":"GFA00","setting_id":"GFB00"}]}})"; + json inbound = json::parse(BBLPrinterAgent::to_orca_payload(status)); + CHECK(inbound["print"]["ams"]["ams"][0]["tray"][0]["tray_info_idx"] == abs); + CHECK(inbound["print"]["ams"]["ams"][0]["tray"][1]["tray_info_idx"] == "GFZZ99"); // no row: untouched + CHECK(inbound["print"]["vt_tray"]["tray_info_idx"] == pla); + CHECK(inbound["print"]["filaments"][0]["filament_id"] == pla); + CHECK(inbound["print"]["filaments"][0]["setting_id"] == "GFB00"); // not an id key: has a map row but must stay put + CHECK(json::parse(BBLPrinterAgent::from_orca_payload(inbound.dump())) == json::parse(status)); // round trip + + const std::string mapping = R"([{"ams":0,"filamentId":")" + abs + R"(","filamentType":"ABS"}])"; + CHECK(BBLPrinterAgent::from_orca_payload(mapping) == R"([{"ams":0,"filamentId":"GFB00","filamentType":"ABS"}])"); + CHECK(BBLPrinterAgent::from_orca_payload("not json") == "not json"); + CHECK(BBLPrinterAgent::from_orca_payload(R"({"print":{"command":"pushall"}})") == R"({"print":{"command":"pushall"}})"); +} diff --git a/tests/slic3rutils/test_creality_cfs_match.cpp b/tests/slic3rutils/test_creality_cfs_match.cpp new file mode 100644 index 0000000000..06606684b7 --- /dev/null +++ b/tests/slic3rutils/test_creality_cfs_match.cpp @@ -0,0 +1,141 @@ +#include + +#include "libslic3r/Preset.hpp" +#include "libslic3r/PresetBundle.hpp" +#include "libslic3r/PrintConfig.hpp" +#include "slic3r/Utils/CrealityPrintAgent.hpp" + +using namespace Slic3r; + +namespace { + +// A standalone filament collection, built the same way PresetBundle builds its own, so the +// CFS matcher can be exercised without loading the shipped profiles or touching a printer. +struct FilamentTestCollection : public PresetCollection +{ + FilamentTestCollection() + : PresetCollection(Preset::TYPE_FILAMENT, Preset::filament_options(), + static_cast(FullPrintConfig::defaults())) + {} +}; + +struct FilamentSpec +{ + const char *name; + const char *filament_id; + const char *filament_type; + bool is_library = false; // belongs to the Orca Filament Library, not the printer vendor + bool is_system = true; +}; + +// Load the specs into the collection, then stamp the fields the matcher reads. Done in a second +// pass because load_preset() keeps m_presets sorted, so a reference taken during the first pass +// can be left dangling by a later load. +void populate(PresetCollection &filaments, const std::vector &specs, + const VendorProfile &vendor, const VendorProfile &library) +{ + for (const FilamentSpec &spec : specs) { + DynamicPrintConfig config(filaments.default_preset().config); + config.option("filament_type", true)->values = {spec.filament_type}; + filaments.load_preset(std::string(), spec.name, config, /*select=*/false); + } + for (auto it = filaments.begin(); it != filaments.end(); ++it) { + const auto spec = std::find_if(specs.begin(), specs.end(), + [&](const FilamentSpec &s) { return it->name == s.name; }); + if (spec == specs.end()) + continue; + it->filament_id = spec->filament_id; + it->vendor = spec->is_library ? &library : &vendor; + it->is_system = spec->is_system; + it->is_default = false; + it->is_visible = true; + it->is_compatible = true; + } +} + +// What a stock K2 with a 0.4 nozzle sees after the filament_id rework: the vendor's plain generics +// carry no "Creality" in their name (they are "Generic @"), while the subtype +// variants that do keep a vendor scope are separate products with their own filament_ids. +const std::vector k2_stock_nozzle{ + {"AliZ PLA @System", "ALIZ-PLA", "PLA", /*is_library=*/true}, + {"Generic PETG @K2-all", "PETG-GENERIC", "PETG"}, + {"Generic PLA @K2-all", "PLA-GENERIC", "PLA"}, + {"Generic PLA High Speed @Creality K2-all","PLA-HS", "PLA"}, + {"Generic PLA Matte @Creality K2-all", "PLA-MATTE", "PLA"}, + {"Generic PLA Silk @Creality K2-all", "PLA-SILK", "PLA"}, + {"Hyper PLA @K2-all", "PLA-HYPER", "PLA"}, +}; + +std::string match(const std::vector &specs, const std::string &spool_vendor, + const std::string &spool_name, const std::string &base_type) +{ + FilamentTestCollection filaments; + VendorProfile vendor("Creality"); + VendorProfile library(PresetBundle::ORCA_FILAMENT_LIBRARY); + vendor.name = "Creality"; + library.name = PresetBundle::ORCA_FILAMENT_LIBRARY; + populate(filaments, specs, vendor, library); + return CrealityPrintAgent::match_filament_preset(filaments, spool_vendor, spool_name, base_type); +} + +} // namespace + +// Orca: a CFS spool that names no recognised product must map to the vendor's plain generic. The +// subtype variants ("High Speed", "Matte", "Silk") score just as well on vendor alone, and since +// each is its own product with its own filament_id, letting one of them win sends the printer the +// id of a filament the user does not have loaded. +TEST_CASE("An unbranded CFS spool maps to the vendor's plain generic, not a subtype", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "", "PLA") == "PLA-GENERIC"); +} + +// Orca: the vendor bonus reads the preset's owning VendorProfile. "Generic PETG @K2-all" does not +// repeat "Creality" anywhere in its name, so a name based vendor test scored nothing for it and the +// spool fell through to the collection wide first-of-type - an unrelated third party PETG. +TEST_CASE("A CFS spool matches its vendor's presets even when the name omits the vendor", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "", "PETG") == "PETG-GENERIC"); +} + +TEST_CASE("A branded CFS spool still beats the generic", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "Hyper PLA", "PLA") == "PLA-HYPER"); +} + +// Orca: the specificity penalty must not stop a spool that genuinely asks for a subtype from +// getting it - only unclaimed qualifiers are penalised. +TEST_CASE("A CFS spool that names a subtype gets that subtype", "[CFS][Creality]") +{ + CHECK(match(k2_stock_nozzle, "Creality", "Generic PLA Silk", "PLA") == "PLA-SILK"); + CHECK(match(k2_stock_nozzle, "Creality", "Generic PLA Matte", "PLA") == "PLA-MATTE"); +} + +// Orca: a third party spool matches no preset by brand or vendor, so it falls back to the first +// visible preset of the same type rather than returning nothing. Which one that is depends on the +// collection's ordering, so only the type is pinned here - what matters is that a PLA spool never +// comes back empty and never comes back as another material. +TEST_CASE("A CFS spool from an unknown vendor falls back to a preset of the same type", "[CFS][Creality]") +{ + const std::string matched = match(k2_stock_nozzle, "SomeOtherBrand", "", "PLA"); + REQUIRE_FALSE(matched.empty()); + const auto spec = std::find_if(k2_stock_nozzle.begin(), k2_stock_nozzle.end(), + [&](const FilamentSpec &s) { return matched == s.filament_id; }); + REQUIRE(spec != k2_stock_nozzle.end()); + CHECK(std::string(spec->filament_type) == "PLA"); +} + + +// Orca: Creality's bundle also ships third party filaments ("eSUN PLA+ @K2 Plus-all"). Those carry +// Creality's VendorProfile but name their real brand, so the vendor bonus has to accept a name +// match as well as a profile match - otherwise an eSUN spool stops matching its own preset. +TEST_CASE("A third party spool matches its preset inside the printer vendor's bundle", "[CFS][Creality]") +{ + const std::vector with_third_party{ + {"Generic PLA @K2-all", "PLA-GENERIC", "PLA"}, + {"eSUN PLA+ @K2 Plus-all", "ESUN-PLA", "PLA"}, // shipped by Creality, branded eSUN + }; + CHECK(match(with_third_party, "eSUN", "", "PLA") == "ESUN-PLA"); + // ... and a Creality spool still prefers Creality's own generic over the eSUN preset, which + // carries Creality's profile too but adds a brand word the spool never claimed. + CHECK(match(with_third_party, "Creality", "", "PLA") == "PLA-GENERIC"); +} diff --git a/tests/slic3rutils/test_plugin_audit.cpp b/tests/slic3rutils/test_plugin_audit.cpp index 49eedbd1fb..71ce692671 100644 --- a/tests/slic3rutils/test_plugin_audit.cpp +++ b/tests/slic3rutils/test_plugin_audit.cpp @@ -27,6 +27,16 @@ void seed_denied_names() mgr.add_denied_filename(name); } +// Seed the keyword registry with the same list install_hook() uses. Same rationale as +// seed_denied_names(): a process-singleton registry, seeded from the single shared source so +// production and tests cannot drift apart. +void seed_denied_keywords() +{ + PluginAuditManager& mgr = PluginAuditManager::instance(); + for (const auto& keyword : PluginAuditManager::default_denied_path_keywords()) + mgr.add_denied_path_keyword(keyword); +} + } // namespace TEST_CASE("Plugin audit denies app config and token filenames anywhere", "[audit]") @@ -81,7 +91,7 @@ TEST_CASE("Plugin audit denies app config and token filenames anywhere", "[audit } } -TEST_CASE("Plugin audit deny beats allowed roots and the Loading read exemption", "[audit]") +TEST_CASE("Plugin audit deny beats allowed roots", "[audit]") { ScopedDataDir data_dir_guard("plugin-audit-deny"); seed_denied_names(); @@ -91,8 +101,8 @@ TEST_CASE("Plugin audit deny beats allowed roots and the Loading read exemption" // config and the token would otherwise be reachable simply by living inside it. mgr.add_global_allowed_root(data_dir()); - // Enter a plugin context. The deny must hold in Loading mode, which every scope runs in. - ScopedPluginAuditContext ctx("test_plugin", "", PluginAuditManager::AuditMode::Loading); + // Enter a plugin context. The deny must hold even inside a globally allowed root. + ScopedPluginAuditContext ctx("test_plugin", ""); const fs::path conf = fs::path(data_dir()) / (SLIC3R_APP_KEY ".conf"); const fs::path token = fs::path(data_dir()) / secret_constants::USER_SECRET_FILENAME; @@ -103,6 +113,13 @@ TEST_CASE("Plugin audit deny beats allowed roots and the Loading read exemption" CHECK(decision.allowed); } + SECTION("a file outside the allowed root is blocked for reads as well as writes") + { + AuditDecision decision = mgr.check_open((fs::path(data_dir()).parent_path() / "outside.txt").string(), "r"); + CHECK_FALSE(decision.allowed); + CHECK(decision.reason == "outside allowed root"); + } + SECTION("writing the app config is blocked despite data_dir() being allowed") { AuditDecision decision = mgr.check_open(conf.string(), "w"); @@ -110,16 +127,14 @@ TEST_CASE("Plugin audit deny beats allowed roots and the Loading read exemption" CHECK(decision.reason == "denied filename"); } - SECTION("reading the app config is blocked even though Loading exempts reads") + SECTION("reading the app config is blocked despite the allowed root") { - // Without the deny, a read in Loading mode short-circuits to allow. The deny sits above - // that exemption, so this must still be blocked. AuditDecision decision = mgr.check_open(conf.string(), "r"); CHECK_FALSE(decision.allowed); CHECK(decision.reason == "denied filename"); } - SECTION("reading the cloud refresh token is blocked in Loading mode") + SECTION("reading the cloud refresh token is blocked") { AuditDecision decision = mgr.check_open(token.string(), "r"); CHECK_FALSE(decision.allowed); @@ -150,7 +165,7 @@ TEST_CASE("Plugin audit deny beats a plugin's own scoped root", "[audit]") const fs::path plugin_dir = fs::path(data_dir()) / "plugins" / "test_plugin"; fs::create_directories(plugin_dir); - ScopedPluginAuditContext ctx("test_plugin", "", PluginAuditManager::AuditMode::Loading); + ScopedPluginAuditContext ctx("test_plugin", ""); mgr.add_scoped_allowed_root(plugin_dir); SECTION("the plugin's own non-denied file opens for read and write") @@ -185,3 +200,139 @@ TEST_CASE("Plugin audit does not constrain non-plugin code", "[audit]") CHECK(mgr.check_open(conf.string(), "w").allowed); CHECK(mgr.check_open(conf.string(), "r").allowed); } + +TEST_CASE("Plugin audit denies secret/certificate/config-like paths by keyword", "[audit]") +{ + seed_denied_keywords(); + const PluginAuditManager& mgr = PluginAuditManager::instance(); + + SECTION("a 'secrets' directory component is denied") + { + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/secrets/api_key.json"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/secret/token.txt"))); + } + + SECTION("a 'certificate(s)' directory component is denied") + { + CHECK(mgr.is_denied_path_keyword(fs::path("/resources/cert/slicer_base64.cer"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/resources/certificates/ca.pem"))); + } + + SECTION("a 'conf'/'config' directory or file component is denied") + { + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/conf/settings.json"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/config/settings.json"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/plugin.conf"))); + } + + SECTION("matching is case-insensitive") + { + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/SECRETS/token.txt"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/resources/CertBundle/ca.pem"))); + CHECK(mgr.is_denied_path_keyword(fs::path("/plugin/CONFIG.JSON"))); + } + + SECTION("matching is not limited to the base name -- any ancestor component counts") + { + CHECK(mgr.is_denied_path_keyword(fs::path("/data/secrets/nested/deep/file.txt"))); + } + + SECTION("an unrelated path is not denied") + { + CHECK_FALSE(mgr.is_denied_path_keyword(fs::path("/plugin/output/model.gcode"))); + CHECK_FALSE(mgr.is_denied_path_keyword(fs::path("/plugin/storage/state.json"))); + } + + SECTION("an empty path is not denied") + { + CHECK_FALSE(mgr.is_denied_path_keyword(fs::path())); + } +} + +TEST_CASE("Plugin audit is_denied_path combines the filename and keyword registries", "[audit]") +{ + seed_denied_names(); + seed_denied_keywords(); + const PluginAuditManager& mgr = PluginAuditManager::instance(); + + SECTION("a filename-registry match is denied") + { + CHECK(mgr.is_denied_path(fs::path(SLIC3R_APP_KEY ".conf"))); + } + + SECTION("a keyword-registry match is denied") + { + CHECK(mgr.is_denied_path(fs::path("/plugin/secrets/token.txt"))); + } + + SECTION("a path matching neither registry is not denied") + { + CHECK_FALSE(mgr.is_denied_path(fs::path("/plugin/output/model.gcode"))); + } +} + +TEST_CASE("Plugin audit a read-only allowed root blocks writes but not reads", "[audit]") +{ + ScopedDataDir data_dir_guard("plugin-audit-readonly"); + ScopedResourcesDir resources_dir_guard("plugin-audit-readonly-resources"); + seed_denied_names(); + seed_denied_keywords(); + + PluginAuditManager& mgr = PluginAuditManager::instance(); + mgr.add_global_allowed_root(resources_dir(), /*allow_write=*/false); + + ScopedPluginAuditContext ctx("test_plugin", ""); + + const fs::path readonly_file = fs::path(resources_dir()) / "profiles" / "vendor.json"; + + SECTION("a read inside the read-only root is allowed") + { + CHECK(mgr.check_open(readonly_file.string(), "r").allowed); + } + + SECTION("a write inside the read-only root is blocked") + { + AuditDecision decision = mgr.check_open(readonly_file.string(), "w"); + CHECK_FALSE(decision.allowed); + CHECK(decision.reason == "outside allowed root"); + } + + SECTION("a create inside the read-only root is blocked") + { + AuditDecision decision = mgr.check_path_access(readonly_file, /*is_write=*/true); + CHECK_FALSE(decision.allowed); + } + + SECTION("the bundled cert underneath the read-only root is denied even for reads") + { + const fs::path cert = fs::path(resources_dir()) / "cert" / "slicer_base64.cer"; + AuditDecision decision = mgr.check_open(cert.string(), "r"); + CHECK_FALSE(decision.allowed); + CHECK(decision.reason == "denied path keyword"); + } +} + +TEST_CASE("Plugin audit a scoped root can also be registered read-only", "[audit]") +{ + ScopedDataDir data_dir_guard("plugin-audit-scoped-readonly"); + seed_denied_names(); + seed_denied_keywords(); + + PluginAuditManager& mgr = PluginAuditManager::instance(); + + const fs::path readonly_dir = fs::path(data_dir()) / "readonly_scope"; + fs::create_directories(readonly_dir); + + ScopedPluginAuditContext ctx("test_plugin", ""); + mgr.add_scoped_allowed_root(readonly_dir, /*allow_write=*/false); + + SECTION("a read inside the scoped read-only root is allowed") + { + CHECK(mgr.check_open((readonly_dir / "vendor.json").string(), "r").allowed); + } + + SECTION("a write inside the scoped read-only root is blocked") + { + CHECK_FALSE(mgr.check_open((readonly_dir / "vendor.json").string(), "w").allowed); + } +} diff --git a/tests/slic3rutils/test_plugin_install.cpp b/tests/slic3rutils/test_plugin_install.cpp index fceeaf1f83..ae16703fa6 100644 --- a/tests/slic3rutils/test_plugin_install.cpp +++ b/tests/slic3rutils/test_plugin_install.cpp @@ -112,6 +112,22 @@ TEST_CASE("install-state sidecar is the source of truth for a cloud plugin's ins REQUIRE(read_install_state(plugin_dir, state)); CHECK(state.installed_version == "1.2.0"); + state.permissions.fs_read = {"/path/to/read"}; + state.permissions.fs_readwrite = {"/path/to/readwrite"}; + state.permissions.network_http = {"https://api.example.com"}; + state.permissions.network_socket = {"192.168.45.6:443"}; + state.permissions.process = {"/usr/bin/curl"}; + REQUIRE(write_install_state(plugin_dir, state)); + + // Permission data is persisted in the same sidecar as the installation metadata. + PluginInstallState persisted; + REQUIRE(read_install_state(plugin_dir, persisted)); + CHECK(persisted.permissions.fs_read == state.permissions.fs_read); + CHECK(persisted.permissions.fs_readwrite == state.permissions.fs_readwrite); + CHECK(persisted.permissions.network_http == state.permissions.network_http); + CHECK(persisted.permissions.network_socket == state.permissions.network_socket); + CHECK(persisted.permissions.process == state.permissions.process); + // Reading the sidecar back onto a freshly-scanned descriptor (whose header version is still // 1.0.0) must surface the cloud-installed 1.2.0. This is what lets update_cloud_metadata compare // the cloud's latest version against the installed version instead of the stale header, so an @@ -120,4 +136,4 @@ TEST_CASE("install-state sidecar is the source of truth for a cloud plugin's ins scanned.version = "1.0.0"; // as parsed from the unchanged PEP723 header read_install_state(plugin_dir, scanned); CHECK(scanned.installed_version == "1.2.0"); -} \ No newline at end of file +} diff --git a/tests/test_utils.hpp b/tests/test_utils.hpp index 97e684fd6e..0b04e6ad11 100644 --- a/tests/test_utils.hpp +++ b/tests/test_utils.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -32,7 +33,7 @@ inline Slic3r::TriangleMesh load_model(const std::string &obj_filename) // --------------------------------------------------------------------------- // Owns a unique path under the system temp dir, "-[]" -// (parallel-safe, cross-platform). Shared base for the two RAII temp guards below. +// (parallel-safe, cross-platform). Shared base for the RAII temp guards below. class ScopedTemporaryPath { public: @@ -70,6 +71,24 @@ public: ~ScopedTemporaryDir() { boost::system::error_code ec; boost::filesystem::remove_all(m_path, ec); } }; +// A temp directory that is also Slic3r::temporary_dir() for its lifetime. No test +// process sets that global, so code under test which writes there (for example +// StepPreProcessor::preprocess) lands at the filesystem root. Restored on scope exit +// even when an assertion throws, so it cannot leak into later tests. +class ScopedSlic3rTemporaryDir : public ScopedTemporaryDir +{ +public: + explicit ScopedSlic3rTemporaryDir(const std::string &prefix = "orca") + : ScopedTemporaryDir(prefix), m_previous(Slic3r::temporary_dir()) + { Slic3r::set_temporary_dir(string()); } + // Runs before ~ScopedTemporaryDir, so the setting goes back while the directory + // it names still exists. + ~ScopedSlic3rTemporaryDir() { Slic3r::set_temporary_dir(m_previous); } + +private: + const std::string m_previous; +}; + // --------------------------------------------------------------------------- // Debug-only test artifacts // @@ -157,4 +176,22 @@ inline void write_debug_stream([[maybe_unused]] const std::string &name, [[maybe #endif } +// Changes the working directory and restores the previous one on scope exit, including when an +// assertion throws. It is process wide state shared with every other test. +class ScopedWorkingDirectory +{ +public: + explicit ScopedWorkingDirectory(const boost::filesystem::path &dir) + : m_previous(boost::filesystem::current_path()) + { + boost::filesystem::current_path(dir); + } + ~ScopedWorkingDirectory() { boost::system::error_code ec; boost::filesystem::current_path(m_previous, ec); } + ScopedWorkingDirectory(const ScopedWorkingDirectory &) = delete; + ScopedWorkingDirectory &operator=(const ScopedWorkingDirectory &) = delete; + +private: + boost::filesystem::path m_previous; +}; + #endif // SLIC3R_TEST_UTILS diff --git a/tools/orca_cad_mcp_bridge.py b/tools/orca_cad_mcp_bridge.py new file mode 100644 index 0000000000..d54320a9cb --- /dev/null +++ b/tools/orca_cad_mcp_bridge.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +"""Zero-dependency stdio MCP server bridging to the Orca/Orca-CAD control socket. + +Speaks MCP (JSON-RPC 2.0 over newline-delimited stdio) to an MCP client (Claude Code), +and forwards each tool call to the app's Unix-domain control socket (opened by the GUI +when launched with ORCA_CAD_MCP set). The tool list is built *live* from the app's own +`describe_tools` reply — introspection drives the schema, so new kernel methods surface +without touching this file. + +Usage: orca_cad_mcp_bridge.py [SOCKET_PATH] (default /tmp/orca-cad-mcp.sock) +The app must be running with ORCA_CAD_MCP set; if the socket is down, tools/list falls +back to the slice-1 set and tool calls report the connection error (never crash). +""" +import sys, os, json, socket, itertools + +SOCK_PATH = sys.argv[1] if len(sys.argv) > 1 else "/tmp/orca-cad-mcp.sock" +SERVER_INFO = {"name": "orca-cad", "version": "0.1"} +_app_id = itertools.count(1) + +# --- app control-socket round-trip -------------------------------------------- +def app_call(method, params=None): + """One request to the app over the unix socket. Raises on transport failure.""" + req = {"jsonrpc": "2.0", "id": next(_app_id), "method": method} + if params is not None: + req["params"] = params + s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + s.settimeout(20) + try: + s.connect(SOCK_PATH) + s.sendall((json.dumps(req) + "\n").encode()) + buf = b"" + while not buf.endswith(b"\n"): + chunk = s.recv(65536) + if not chunk: + break + buf += chunk + finally: + s.close() + return json.loads(buf.decode()) + +# --- describe_tools -> MCP tool schemas --------------------------------------- +_TYPE_MAP = {"number": "number", "integer": "integer", "string": "string", + "boolean": "boolean", "array": "array", "object": "object"} + +def _param_schema(p): + sch = {"type": _TYPE_MAP.get(p.get("type", "string"), "string")} + desc = p.get("description") + if "unit" in p: desc = (desc + " " if desc else "") + f"in {p['unit']}" + if desc: sch["description"] = desc + if "enum" in p: sch["enum"] = p["enum"] + if "min" in p: sch["minimum"] = p["min"] + if "max" in p: sch["maximum"] = p["max"] + if "default" in p: sch["default"] = p["default"] + return sch + +# Fallback when the app socket is unreachable at list time (e.g. the GUI isn't up yet when the +# MCP client lists tools at session start). The LIVE describe_tools reply is authoritative — this +# mirrors its 16-method surface so the agent still sees the full toolset; params without a +# `default` are surfaced as required. Keep in sync with McpControl.cpp describe_tools(). +def _p(name, typ="number", **kw): return dict(name=name, type=typ, **kw) +_PLANE = _p("plane", "string", enum=["XY", "XZ", "YZ"], default="XY") +_FALLBACK_TOOLS = {"tools": [ + {"name": "describe_tools", "summary": "List callable tools and their parameters.", "params": []}, + {"name": "describe_scene", "summary": "Feature tree + per-body bounding boxes.", "params": []}, + {"name": "extrude", "summary": "Extrude a profile (or width x height rectangle) to a depth; Onshape end conditions.", + "params": [_p("width", default=20), _p("height", default=20), _p("distance", default=10), _PLANE, + _p("profile", "array", default=[], description="closed [[x,y],...] overrides width/height"), + _p("boolean", "string", enum=["new", "union", "subtract", "intersect"], default="new"), + _p("end", "string", enum=["blind", "symmetric", "two_sided", "through_all", "up_to_face"], default="blind"), + _p("distance2", default=0, description="second side when end=two_sided"), + _p("up_to_face", "integer", default=-1, description="target face id when end=up_to_face"), + _p("taper", default=0), _p("flip", "boolean", default=False)]}, + {"name": "revolve", "summary": "Revolve a profile about a plane axis.", + "params": [_p("width", default=20), _p("height", default=10), _p("angle", default=360), + _p("axis", "integer", enum=[0, 1], default=0), _p("flip", "boolean", default=False), _PLANE, + _p("profile", "array", default=[], description="closed [[x,y],...] overrides width/height"), + _p("boolean", "string", enum=["new", "union", "subtract", "intersect"], default="new")]}, + {"name": "fillet", "summary": "Round a measured edge of a body.", + "params": [_p("edge", "integer"), _p("radius", default=1), + _p("body", "integer", default=-1, description="target body; omit for last")]}, + {"name": "chamfer", "summary": "Chamfer a measured edge of a body.", + "params": [_p("edge", "integer"), _p("distance", default=1), + _p("body", "integer", default=-1, description="target body; omit for last")]}, + {"name": "hole", "summary": "Drill a circular hole at (x,y) on a plane.", + "params": [_p("diameter", default=5), _p("depth", default=10), _p("through", "boolean", default=False), + _p("x", default=0), _p("y", default=0), _PLANE]}, + {"name": "boolean", "summary": "Combine two bodies: union | subtract | intersect.", + "params": [_p("op", "string", enum=["union", "subtract", "intersect"], default="subtract"), + _p("target", "integer", default=0), _p("tool", "integer", default=1), + _p("keep_tool", "boolean", default=False), _p("tolerance", default=0)]}, + {"name": "pattern", "summary": "Replicate a body: linear or circular.", + "params": [_p("circular", "boolean", default=False), _p("count", "integer", default=3), + _p("spacing", default=10), _p("dir", "integer", enum=[0, 1], default=0), + _p("angle", default=360), _PLANE, _p("body", "integer", default=-1, description="target body; omit for last")]}, + {"name": "shell", "summary": "Hollow a body to a wall thickness; optionally open one face.", + "params": [_p("thickness", default=1), _p("face", "integer", default=-1, description="face id to leave open; omit for closed"), + _p("body", "integer", default=-1, description="target body; omit for last")]}, + {"name": "draft", "summary": "Taper a body face by an angle (pull +Z).", + "params": [_p("face", "integer"), _p("angle", default=5), + _p("body", "integer", default=-1, description="target body; omit for last")]}, + {"name": "query_topology", "summary": "Measured faces and edges of a body.", + "params": [_p("body", "integer", default=0)]}, + {"name": "measure", "summary": "Distance/angle between two refs {face|edge|point} on a body.", + "params": [_p("body", "integer", default=0), _p("a", "object"), _p("b", "object")]}, + {"name": "slice_body", "summary": "Cross-section of a body; ordered closed/open contours.", + "params": [_p("body", "integer", default=0), _PLANE, _p("offset", default=0)]}, + {"name": "import_step", "summary": "Import a STEP file as native B-rep bodies.", + "params": [_p("path", "string")]}, + {"name": "validate_against", "summary": "Volume + bbox + surface deviation of a body vs a reference {step|body}.", + "params": [_p("body", "integer", default=0), _p("reference", "object")]}, +]} + +def list_tools(): + try: + desc = app_call("describe_tools").get("result", {}) + if "tools" not in desc: + desc = _FALLBACK_TOOLS + except Exception: + desc = _FALLBACK_TOOLS + out = [] + for t in desc["tools"]: + params = t.get("params", []) + props = {p["name"]: _param_schema(p) for p in params} + required = [p["name"] for p in params if "default" not in p] + out.append({ + "name": t["name"], + "description": t.get("summary", ""), + "inputSchema": {"type": "object", "properties": props, "required": required}, + }) + return out + +# --- MCP method handlers ------------------------------------------------------ +def handle(req): + m = req.get("method") + rid = req.get("id") + if m == "initialize": + ver = (req.get("params") or {}).get("protocolVersion", "2024-11-05") + return {"jsonrpc": "2.0", "id": rid, "result": { + "protocolVersion": ver, + "capabilities": {"tools": {"listChanged": False}}, + "serverInfo": SERVER_INFO}} + if m == "ping": + return {"jsonrpc": "2.0", "id": rid, "result": {}} + if m == "tools/list": + return {"jsonrpc": "2.0", "id": rid, "result": {"tools": list_tools()}} + if m == "tools/call": + p = req.get("params") or {} + name = p.get("name") + args = p.get("arguments") or {} + try: + reply = app_call(name, args) + except Exception as e: + return {"jsonrpc": "2.0", "id": rid, "result": { + "content": [{"type": "text", "text": f"control socket unreachable ({SOCK_PATH}): {e}"}], + "isError": True}} + if "error" in reply: + return {"jsonrpc": "2.0", "id": rid, "result": { + "content": [{"type": "text", "text": json.dumps(reply["error"])}], "isError": True}} + return {"jsonrpc": "2.0", "id": rid, "result": { + "content": [{"type": "text", "text": json.dumps(reply.get("result"), indent=2)}]}} + if rid is not None: # unknown *request* + return {"jsonrpc": "2.0", "id": rid, "error": {"code": -32601, "message": f"method not found: {m}"}} + return None # notification (e.g. notifications/initialized) -> no reply + +def main(): + for line in sys.stdin: + line = line.strip() + if not line: + continue + try: + req = json.loads(line) + except Exception: + continue + resp = handle(req) + if resp is not None: + sys.stdout.write(json.dumps(resp) + "\n") + sys.stdout.flush() + +if __name__ == "__main__": + main()